From b1cb6ff61fccfef28d38590a8b819ccaafa5928a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 10 Mar 2026 15:17:36 +0100 Subject: [PATCH 001/691] fix to work with "ghidra-cli" and "ghidra" commands --- tools/decomp-context.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/tools/decomp-context.py b/tools/decomp-context.py index 51ccb9cb8..f90903c15 100644 --- a/tools/decomp-context.py +++ b/tools/decomp-context.py @@ -15,6 +15,7 @@ import json import os import re +import shutil import subprocess import sys from typing import Any, Dict, List, Optional, Tuple @@ -130,10 +131,14 @@ def search_symbols_file(file: str, name: str) -> List[Tuple[str, str, str]]: def ghidra_decompile(address: str, program: str) -> Optional[str]: """Decompile a function at the given address using Ghidra CLI.""" + ghidra_cmd = shutil.which("ghidra-cli") or shutil.which("ghidra") + if ghidra_cmd is None: + return None + try: result = subprocess.run( [ - "ghidra", + ghidra_cmd, "decompile", "--program", program, @@ -173,9 +178,9 @@ def tu_name_from_unit(unit: Dict[str, Any]) -> str: def print_section(title: str, content: str) -> None: """Print a labeled section.""" - print(f"\n{'='*60}") + print(f"\n{'=' * 60}") print(f" {title}") - print(f"{'='*60}") + print(f"{'=' * 60}") print(content) From d7291b431145268ccb67489fe7332da8e67b93f0 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 10 Mar 2026 19:22:01 +0100 Subject: [PATCH 002/691] Improve AI workflow tooling and documentation - decomp-context.py: scope source output to function line range instead of full file; add Ghidra error diagnostics with stderr reporting and --ghidra-check flag - tools/find-symbol.py: new CLI symbol finder to replace clangd workspace/symbol for checking existing definitions before declaring new types - refiner/SKILL.md: new skill for resolving stubborn instruction mismatches with systematic lateral strategies - AGENTS.md: document new tools, expand Matching Tips with branch/stack/vtable/register/inline patterns, add Discovered Matching Patterns section with entry template - lookup/SKILL.md: replace clangd instructions with find-symbol.py - scaffold/SKILL.md: fix typos, replace clangd reference, add jumbo unit identification guidance - execute/SKILL.md: fix section numbering gap (1a/1c -> 1a/1b), link skill files in agent type list - implement/SKILL.md: replace cat command with Read tool guidance --- .github/skills/execute/SKILL.md | 8 +- .github/skills/implement/SKILL.md | 10 +- .github/skills/lookup/SKILL.md | 25 ++-- .github/skills/refiner/SKILL.md | 135 ++++++++++++++++++++ .github/skills/scaffold/SKILL.md | 14 ++- AGENTS.md | 73 ++++++++++- tools/decomp-context.py | 202 +++++++++++++++++++++++++----- tools/find-symbol.py | 152 ++++++++++++++++++++++ 8 files changed, 564 insertions(+), 55 deletions(-) create mode 100644 .github/skills/refiner/SKILL.md create mode 100644 tools/find-symbol.py diff --git a/.github/skills/execute/SKILL.md b/.github/skills/execute/SKILL.md index 413f9a893..5772356a3 100644 --- a/.github/skills/execute/SKILL.md +++ b/.github/skills/execute/SKILL.md @@ -14,9 +14,9 @@ original retail binary. This skill coordinates several agent types: 1. **reverse-engineer** — Update Ghidra with accurate data types for the class -2. **scaffolder** — Create header/source if the class is not yet in the project -3. **implementer** — Match each function one at a time until the TU is complete. -4. **refiner** — Use on non-matching functions to improve the match. This uses a slower, but more thorough model that can fix issues the implementer can't. +2. **scaffolder** — Create header/source if the class is not yet in the project (see `.github/skills/scaffold/SKILL.md`) +3. **implementer** — Match each function one at a time until the TU is complete (see `.github/skills/implement/SKILL.md`) +4. **refiner** — Use on non-matching functions to improve the match. Applies systematic lateral strategies for stubborn mismatches (see `.github/skills/refiner/SKILL.md`). All non-read-only work is done **sequentially** — never spawn multiple writing agents at the same time, as they will interfere with each other. @@ -44,7 +44,7 @@ Before spawning any implementation agents, understand the current state of the T Determine the file path (e.g. `src/Speed/Indep/SourceLists/zWorld2`). The game uses unity builds, so such a file includes multiple source files from `src/Speed/Indep/Src/`. -### 1c. Get the full function list +### 1b. Get the full function list ```sh python tools/decomp-diff.py -u main/Path/To/TU diff --git a/.github/skills/implement/SKILL.md b/.github/skills/implement/SKILL.md index b37898c28..315f7fa8c 100644 --- a/.github/skills/implement/SKILL.md +++ b/.github/skills/implement/SKILL.md @@ -34,12 +34,14 @@ Reference the skill for the usage. It gives info based on the virtual address of ### 1e. Assembly reference -If these doesn't provide enough detail, check the generated assembly: +If these don't provide enough detail, check the generated assembly. Use the Read tool +to open the relevant `.s` file (prefer this over dumping the whole file): -```sh -# Look at the target disassembly -cat build/GOWE69/asm/Path/To/TU.s ``` +build/GOWE69/asm/Path/To/TU.s +``` + +Search for the function label (mangled name) to navigate directly to its section. ### 1f. Related functions diff --git a/.github/skills/lookup/SKILL.md b/.github/skills/lookup/SKILL.md index f911ea3ce..100020bed 100644 --- a/.github/skills/lookup/SKILL.md +++ b/.github/skills/lookup/SKILL.md @@ -127,26 +127,21 @@ python tools/lookup.py ./symbols/Dwarf typedef HHANDLER ## Checking for Existing Definitions -**Before declaring any new symbol** (struct, class, enum, global variable, typedef, or any other type), use clangd to search for an existing definition in the source tree. Only declare it yourself if clangd finds nothing. +**Before declaring any new symbol** (struct, class, enum, global variable, typedef, or any other type), search for an existing definition in the source tree using `find-symbol.py`. Only declare it yourself if the script finds nothing. -Use clangd's workspace symbol search to look up the name: - -``` -clangd: workspace/symbol { "query": "AIGoal" } -``` - -Or equivalently via any LSP-capable tool: - -``` -clangd: textDocument/definition (on any usage of the symbol) +```bash +python tools/find-symbol.py AIGoal +python tools/find-symbol.py CEntity --type class +python tools/find-symbol.py EState --type enum +python tools/find-symbol.py HHANDLER --type typedef ``` -If clangd returns a definition inside `./src/`: +If the script prints results inside `./src/`: -- **Do not redeclare it.** Include the header that contains it instead. +- **Do not redeclare it.** Include the header shown in the output instead. - Note the file path and `#include` it in your translation unit. -If clangd finds nothing in `./src/`: +If the script prints "Not found ... Safe to declare": - Declare it yourself, using the Dwarf and PS2 dumps as the source of truth for layout and `struct` vs `class`. @@ -167,7 +162,7 @@ This applies to **all** of the following before writing them: - **Always use `./symbols/Dwarf` as the primary source** for all decompilation work. - **Always check `./symbols/PS2/PS2_types.nothpp`** for every type to determine `struct` vs `class` and vtable layout. - **`struct` vs `class` rule:** no visibility modifiers in PS2 dump → `struct`; any visibility modifier present → `class`. -- **Never declare a symbol without first searching for it with clangd.** If it exists in `./src/`, include that header instead. +- **Never declare a symbol without first running `find-symbol.py`.** If it exists in `./src/`, include that header instead. - **Never guess field offsets or sizes.** Look them up. - **Nested enums** must be queried as `StructName::EnumName`, not just `EnumName`. - **Function addresses** are hex. Always include the `0x` prefix. diff --git a/.github/skills/refiner/SKILL.md b/.github/skills/refiner/SKILL.md new file mode 100644 index 000000000..b35017fa2 --- /dev/null +++ b/.github/skills/refiner/SKILL.md @@ -0,0 +1,135 @@ +--- +name: refiner +description: Workflow for resolving stubborn instruction mismatches in a function that the standard implementer has already attempted. Use when a function is stuck at 80–99% match and the obvious approaches have already been tried. Assumes the function compiles cleanly, a diff exists, and the implementer has already made one or more passes. +--- + +# Refiner Workflow + +Your goal is to close the remaining instruction mismatches in a function that is partially +matching. The implementer has already made a pass. You must **not** repeat the same +approaches that were tried before — instead, apply systematic lateral analysis. + +## Starting assumptions + +- The function already compiles. +- A diff is available (`decomp-diff.py -u -d `). +- The "obvious" translation from Ghidra has been attempted. +- You have been given the current source code and the diff. + +## Phase 1: Read the full diff without collapsing + +```sh +python tools/decomp-diff.py -u main/Path/To/TU -d FunctionName --no-collapse +``` + +Read every instruction pair. Categorize each mismatch: + +| Category | Symptom | Strategy | +|---|---|---| +| **Branch inversion** | Entire blocks swapped, branch condition inverted | Invert the `if` condition and swap the two bodies | +| **Register pressure** | Same ops, different register allocation | Reorder source expressions; introduce/remove a named temp | +| **Stack frame size** | Wrong frame size in prologue | Count locals in DWARF; remove temporaries not in DWARF | +| **Float vs int sequence** | `xoris` present → field is `int`; absent → `uint` | Check field type in DWARF; change cast | +| **`fmuls` operand order** | `fmuls fX, fX, fY` or `fmuls fX, fY, fX` | Try `v *= fY` vs `fY * v` explicitly | +| **Relocation offset** | `@stringBase0` or data offset differs | More string literals will shift this; add them in order | +| **Virtual vs direct call** | `bl` vs indirect through vtable | Check const-qualifier; use `GetFoo()` vs `Foo()` | +| **Inline vs outlined** | Extra call to helper vs inlined sequence | Force inline by rewriting the expression without calling the helper | +| **Missing `this->` dereference** | Wrong address in load/store | Ensure member access goes through the correct `this` pointer | +| **Loop structure** | `do/while` vs `for` vs `while` | Try all three forms; compiler emits different branch sequences | + +## Phase 2: Systematic permutation strategies + +Try these **in order**, rebuilding and diffing after each: + +### 2a. Temporaries + +Remove any named temporary that is **not** in the DWARF, or add one that **is**. +Temporaries affect register allocation significantly. + +```bash +python tools/lookup.py ./symbols/Dwarf function 0xADDR # check for temps in DWARF +``` + +### 2b. Expression decomposition + +Split or merge compound expressions. GCC often schedules arithmetic differently when +sub-expressions are named: + +```cpp +// Try decomposed: +float a = foo->x * bar; +float b = a + baz->y; +result = b; + +// vs composed: +result = foo->x * bar + baz->y; +``` + +### 2c. Const-correctness + +Check every method call in the diff against the DWARF. A const method resolves to a +different symbol than its non-const overload. Even one wrong const qualifier causes +a `bl` mismatch. + +```bash +python tools/lookup.py ./symbols/Dwarf struct ClassName +``` + +### 2d. Inline math + +The game uses `UMath` and `bMath` inlines. If the diff shows a hand-rolled float +sequence, look up whether an inline covers the same operation: + +```bash +python tools/lookup.py ./symbols/Dwarf struct UMath +python tools/lookup.py ./symbols/Dwarf struct bMath +``` + +Replace hand-rolled sequences with the correct inline call. + +### 2e. Initializer list order + +Constructors compiled with GCC are sensitive to initializer list order. The DWARF +shows the canonical member order. If yours differs, reorder. + +### 2f. Cast type + +`static_cast` vs `static_cast` produces different assembly +sequences on PPC (see `xoris` pattern in AGENTS.md). Check all casts. + +### 2g. Compiler flag hint + +If none of the above resolve the mismatch, note the function address and consider +running `flag_permuter.py`. This is a last resort — only do this for a single +isolated function, not as a general strategy. + +## Phase 3: DWARF verification + +After any instruction match, verify the DWARF also matches: + +```bash +# Dump your compiled unit +dtk dwarf dump build/GOWE69/src/Path/To/UNIT.o -o /tmp/refiner__check.nothpp + +# Compare your function's DWARF against the original +python tools/lookup.py --file /tmp/refiner__check.nothpp function "ClassName::FunctionName(void)" +python tools/lookup.py ./symbols/Dwarf function 0xADDR +``` + +DWARF mismatches to watch for: + +- Extra or missing local variables (temporaries in DWARF = they must exist in source) +- Wrong parameter types or qualifiers +- Wrong return type +- Missing inlined function records (means an inline call was outlined) + +## Phase 4: Report + +Summarize: + +- Final match % and instruction count +- What was blocking the match (the root cause category from Phase 1) +- The specific source change that resolved it +- Any new generalizable assembly pattern discovered (add to AGENTS.md if so) +- DWARF match status +- If still not matching: the exact diff lines that remain and your best theory diff --git a/.github/skills/scaffold/SKILL.md b/.github/skills/scaffold/SKILL.md index f89d3da13..76abd7925 100644 --- a/.github/skills/scaffold/SKILL.md +++ b/.github/skills/scaffold/SKILL.md @@ -5,7 +5,7 @@ description: Workflow for creating an accurate header for an unimplemented class # Class Initialization Workflow -Your goal is to create copy the struct and header definitions from the dwarf that capture the exact class layout (vtable, members, sizes) using `clangd`, the `lookup` and the `line-lookup` skills. +Your goal is to copy the struct and header definitions from the dwarf that capture the exact class layout (vtable, members, sizes) using `find-symbol.py`, the `lookup` and the `line-lookup` skills. ## Phase 1: Gather Information @@ -39,7 +39,17 @@ Write a TODO comment over the struct/class if you aren't 100% sure that it belon ## Phase 3: Add needed files to jumbo file and compile -Since the project uses jumbo builds, you'll need to add the real source files to the jumbo build using `#include` statements before your changes can picked up by the build system. Try to build afterwards and see if there are any compile errors. +Since the project uses jumbo builds, you'll need to add the real source files to the jumbo +build using `#include` statements before your changes can be picked up by the build system. + +**Finding the correct jumbo unit:** Use the `line-lookup` skill on any function address from +the class you are scaffolding. The outermost `.cpp` file in the result (the one spanning +the widest sequential address range) is the source file being compiled. Its corresponding +`SourceLists/z*.cpp` jumbo unit is where the new `#include` belongs. For example, if +`line_lookup.py` shows `src/Speed/Indep/Src/zWorld2/CWorldObject.cpp` dominating the range, +the new file goes into `src/Speed/Indep/SourceLists/zWorld2.cpp`. + +Try to build afterwards and see if there are any compile errors. ## Phase 4: Report diff --git a/AGENTS.md b/AGENTS.md index 01518f3b7..57bb3a399 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -77,14 +77,30 @@ python tools/decomp-status.py --json # machine-readable ### decomp-context.py — Function context for matching work -Gathers source code, objdiff diff, Ghidra decompile, and debug map info: +Gathers a scoped source excerpt, objdiff diff, and Ghidra decompile for a specific function: ```sh python tools/decomp-context.py -u main/Speed/Indep/SourceLists/zAnim -f AcceptScriptMsg python tools/decomp-context.py -u main/Speed/Indep/SourceLists/zAnim -f FindIOWin --no-source +python tools/decomp-context.py --ghidra-check # verify Ghidra CLI is set up correctly ``` -Flags: `--no-source`, `--no-ghidra` to skip sections. +Flags: `--no-source`, `--no-ghidra` to skip sections. Source output is automatically scoped +to the function's line range (with a few lines of context) instead of dumping the whole file. + +### find-symbol.py — Check for existing definitions before declaring new types + +Before declaring any new struct, class, enum, global, or typedef, run this to check whether +it already exists in `src/`. This is the CLI alternative to clangd workspace/symbol search. + +```sh +python tools/find-symbol.py AITarget +python tools/find-symbol.py CEntity --type class +python tools/find-symbol.py EState --type enum +``` + +If it prints "Not found: ... Safe to declare", you can proceed to define the symbol. +If it finds a match, include that header instead of redeclaring. ### dtk (decomp-toolkit) @@ -167,3 +183,56 @@ register assignments but does NOT affect integer register assignments (and vice - `fmuls fX, fX, fY` or sometimes `fmuls fX, fY, fX` often translates to `v *= fY` - `xoris r0, r0, 0x8000` in int-to-float conversion => field is `int`, not `uint`. Unsigned int-to-float uses a different sequence without `xoris`. + +### Branch structure + +- Ghidra almost always **inverts** `if`-statement branch logic: the true and false bodies + are swapped in its output. Fix by inverting the condition and swapping the two code paths. +- A `do { ... } while (i < upperBound)` with a leading `if (upperBound > 0)` guard should + be written as a plain `for` loop — GCC emits the same code. + +### Stack frame and locals + +- Frame size (`stwu r1, -0xNNN(r1)`) is determined by the number and types of locals. + Every local that is NOT in the DWARF is a spurious temporary — remove it. +- Every local that IS in the DWARF must exist in the source, even if you don't use the name. + Name it exactly as the DWARF shows. + +### Virtual vs direct calls + +- A `bl` to a specific address = direct (non-virtual) call. +- An `lwz + mtctr + bctrl` sequence = virtual dispatch through vtable. +- If the diff shows a virtual call where you have a direct call (or vice versa), the + const-qualifier of the method or the object pointer is wrong. Check the DWARF. + +### Register allocation hints + +- GCC is sensitive to expression decomposition. Splitting a compound expression into + named sub-expressions often produces different (matching) register allocation. +- Conversely, merging sub-expressions into one can collapse intermediate registers. +- If two adjacent float ops are swapped, try commuting the operands or using a temp. + +### Inlines + +- Inlines at the bottom of a TU are emitted by usage, not by definition. Do not write + them as normal function bodies; their presence in source is controlled by `#include`. +- If an inline appears in the DWARF but does not exist in `src/`, deduce its body and add + it to the correct header (use `line-lookup` skill to find the header file). + +--- + +## Discovered Matching Patterns + +This section accumulates session-specific patterns discovered during decompilation. +Generalizable entries are promoted here; TU-specific ones stay in session context only. + +**Format for new entries:** + +``` +### +TU: | Function: + +``` + + + diff --git a/tools/decomp-context.py b/tools/decomp-context.py index f90903c15..1506ef08d 100644 --- a/tools/decomp-context.py +++ b/tools/decomp-context.py @@ -9,6 +9,8 @@ Usage: python tools/decomp-context.py -u main/Speed/Indep/SourceLists/zAnim -f __9CAnimBank python tools/decomp-context.py -u main/Speed/Indep/SourceLists/zAnim -f __9CAnimBank --no-ghidra + python tools/decomp-context.py -u main/Speed/Indep/SourceLists/zAnim -f __9CAnimBank --no-source + python tools/decomp-context.py --ghidra-check """ import argparse @@ -31,6 +33,9 @@ GC_GHIDRA_PROGRAM = "NFSMWRELEASE.ELF" PS2_GHIDRA_PROGRAM = "NFS.ELF" +# Number of lines of context to show before/after the matched function in source +SOURCE_CONTEXT_LINES = 5 + def load_project_config() -> Dict[str, Any]: """Load objdiff.json.""" @@ -129,11 +134,15 @@ def search_symbols_file(file: str, name: str) -> List[Tuple[str, str, str]]: return results -def ghidra_decompile(address: str, program: str) -> Optional[str]: - """Decompile a function at the given address using Ghidra CLI.""" +def ghidra_decompile(address: str, program: str) -> Tuple[Optional[str], Optional[str]]: + """Decompile a function at the given address using Ghidra CLI. + + Returns (code, error_message). On success error_message is None. + On failure code is None and error_message describes the problem. + """ ghidra_cmd = shutil.which("ghidra-cli") or shutil.which("ghidra") if ghidra_cmd is None: - return None + return None, "ghidra-cli / ghidra not found in PATH" try: result = subprocess.run( @@ -149,14 +158,121 @@ def ghidra_decompile(address: str, program: str) -> Optional[str]: timeout=30, ) if result.returncode != 0: - return None + stderr = result.stderr.decode(errors="replace").strip() + msg = f"ghidra exited with code {result.returncode}" + if stderr: + msg += f"\n stderr: {stderr}" + return None, msg data = json.loads(result.stdout) if data and isinstance(data, list) and len(data) > 0: - return data[0].get("code", "") - return None - except (subprocess.TimeoutExpired, FileNotFoundError, json.JSONDecodeError): + return data[0].get("code", ""), None + return None, "ghidra returned empty result" + except subprocess.TimeoutExpired: + return None, "ghidra timed out after 30s" + except FileNotFoundError: + return None, f"ghidra binary not executable: {ghidra_cmd}" + except json.JSONDecodeError as e: + return None, f"ghidra returned invalid JSON: {e}" + + +def check_ghidra() -> None: + """Verify Ghidra CLI is reachable and the required programs are loaded.""" + ghidra_cmd = shutil.which("ghidra-cli") or shutil.which("ghidra") + if ghidra_cmd is None: + print("FAIL ghidra-cli / ghidra not found in PATH") + print(" Install ghidra-cli and ensure it is on your PATH.") + sys.exit(1) + print(f"OK ghidra binary: {ghidra_cmd}") + + # Try a minimal command that lists available programs + try: + result = subprocess.run( + [ghidra_cmd, "list", "programs"], + capture_output=True, + timeout=15, + ) + output = result.stdout.decode(errors="replace") + stderr = result.stderr.decode(errors="replace").strip() + + for prog in [GC_GHIDRA_PROGRAM, PS2_GHIDRA_PROGRAM]: + if prog in output: + print(f"OK program found: {prog}") + else: + print(f"WARN program not found in listing: {prog}") + print(f" Run: ghidra set-default project NeedForSpeed") + + if result.returncode != 0 and stderr: + print(f"WARN ghidra list programs exited {result.returncode}: {stderr}") + except subprocess.TimeoutExpired: + print("WARN ghidra list programs timed out — Ghidra may be slow to start") + except Exception as e: + print(f"WARN could not verify programs: {e}") + + # Quick decompile smoke test — use a known small GC function address if symbols exist + if os.path.exists(GC_SYMBOLS_FILE): + with open(GC_SYMBOLS_FILE) as f: + for line in f: + m = re.match(r"^\S+\s*=\s*(?:\.text:)?0x([0-9A-Fa-f]+)", line.strip()) + if m: + test_addr = m.group(1) + break + else: + test_addr = None + if test_addr: + code, err = ghidra_decompile(test_addr, GC_GHIDRA_PROGRAM) + if code is not None: + print(f"OK decompile smoke test passed (0x{test_addr})") + else: + print(f"FAIL decompile smoke test failed for 0x{test_addr}: {err}") + else: + print(f"SKIP smoke test — symbols file not found: {GC_SYMBOLS_FILE}") + + +def extract_source_for_function( + source_path: str, right_sym: Optional[Dict[str, Any]] +) -> Optional[str]: + """Extract the source lines relevant to the function from its source file. + + Uses the line numbers embedded in the right (decomp) symbol's instructions + to determine the source region. Falls back to full file if line numbers are + unavailable or the file cannot be read. + + Returns the extracted source text, or None if the file doesn't exist. + """ + full_path = os.path.join(root_dir, source_path) + if not os.path.exists(full_path): return None + with open(full_path) as f: + all_lines = f.readlines() + + # Collect all source line numbers referenced by the decomp symbol's instructions + line_numbers: List[int] = [] + if right_sym: + for inst_entry in right_sym.get("instructions", []): + ln = inst_entry.get("instruction", {}).get("line_number") + if ln is not None: + line_numbers.append(int(ln)) + + if not line_numbers: + # No line info available — return full source + return "".join(all_lines) + + first_line = min(line_numbers) + last_line = max(line_numbers) + + # Expand to capture the enclosing function: walk back to find the function + # signature (a line that looks like a function definition, not just a brace). + # Heuristic: walk backward from first_line to find an opening that precedes + # the function body, giving context. + start = max(1, first_line - SOURCE_CONTEXT_LINES) + end = min(len(all_lines), last_line + SOURCE_CONTEXT_LINES) + + # 1-indexed lines -> 0-indexed slice + excerpt = all_lines[start - 1 : end] + header = f"// Lines {start}–{end} of {source_path}\n" + return header + "".join(excerpt) + def strip_ansi(text: str) -> str: """Remove ANSI escape codes from text.""" @@ -203,13 +319,15 @@ def print_ghidra_decompilation( mangled_function = matches[0][0] if addr: - decomp = ghidra_decompile(addr, program) - if decomp: - print_section(f"{version_name}: Ghidra Decompile (0x{addr})", decomp) + code, err = ghidra_decompile(addr, program) + if code is not None: + print_section(f"{version_name}: Ghidra Decompile (0x{addr})", code) else: - print(f"\nGhidra decompile failed for 0x{addr}") + print(f"\nGhidra decompile failed for {version_name} 0x{addr}: {err}") else: - print(f"\nCould not find address for {mangled_function} in symbols.txt") + print( + f"\nCould not find address for {mangled_function} in {version_name} symbols.txt" + ) def main(): @@ -217,19 +335,29 @@ def main(): description="Gather context for decomp function matching" ) parser.add_argument( - "-u", "--unit", required=True, help="Unit name (e.g. main/MetroidPrime/CEntity)" - ) - parser.add_argument( - "-f", "--function", required=True, help="Function name to look up" + "-u", "--unit", help="Unit name (e.g. main/MetroidPrime/CEntity)" ) + parser.add_argument("-f", "--function", help="Function name to look up") parser.add_argument( "--no-source", action="store_true", help="Skip source file output" ) parser.add_argument( "--no-ghidra", action="store_true", help="Skip Ghidra decompile" ) + parser.add_argument( + "--ghidra-check", + action="store_true", + help="Verify Ghidra CLI is reachable and programs are loaded, then exit", + ) args = parser.parse_args() + if args.ghidra_check: + check_ghidra() + return + + if not args.unit or not args.function: + parser.error("-u/--unit and -f/--function are required (or use --ghidra-check)") + config = load_project_config() unit = find_unit(config, args.unit) if not unit: @@ -239,23 +367,40 @@ def main(): meta = unit.get("metadata", {}) source_path = meta.get("source_path", "") - # === Source File === + # === objdiff Status (run first so we have line numbers for source scoping) === + diff_data = run_objdiff(args.unit) + left_sym = right_sym = None + + if diff_data: + left_sym, right_sym = find_symbol_in_diff(diff_data, args.function) + + # === Source File (scoped to function if line info available) === if not args.no_source and source_path: - full_path = os.path.join(root_dir, source_path) - if os.path.exists(full_path): - with open(full_path) as f: - source = f.read() - print_section(f"Source: {source_path}", source) + excerpt = extract_source_for_function(source_path, right_sym) + if excerpt is not None: + label = "Source" + if right_sym and right_sym.get("instructions"): + # Check if we actually got line info + has_lines = any( + inst.get("instruction", {}).get("line_number") is not None + for inst in right_sym.get("instructions", []) + ) + if has_lines: + label = "Source (function excerpt)" + else: + label = f"Source (full file — no line info): {source_path}" + print_section(label, excerpt) else: - print(f"\nSource file not found: {full_path}", file=sys.stderr) + print( + f"\nSource file not found: {os.path.join(root_dir, source_path)}", + file=sys.stderr, + ) # === objdiff Status === - diff_data = run_objdiff(args.unit) if diff_data: - left_sym, right_sym = find_symbol_in_diff(diff_data, args.function) - if left_sym or right_sym: - sym = left_sym or right_sym + sym = left_sym if left_sym is not None else right_sym + assert sym is not None name = sym.get("demangled_name", sym.get("name", "?")) mangled = sym.get("name", "?") mp = sym.get("match_percent") @@ -320,7 +465,8 @@ def main(): # === Ghidra Decompile === if not args.no_ghidra and (left_sym or right_sym): - sym = left_sym or right_sym + sym = left_sym if left_sym is not None else right_sym + assert sym is not None mangled = sym.get("name", "") print_ghidra_decompilation( diff --git a/tools/find-symbol.py b/tools/find-symbol.py new file mode 100644 index 000000000..c44164234 --- /dev/null +++ b/tools/find-symbol.py @@ -0,0 +1,152 @@ +#!/usr/bin/env python3 +""" +find-symbol.py + +Search src/ for existing definitions of a class, struct, enum, global variable, +or typedef. Use this before declaring any new symbol to avoid redeclaring something +that already exists in the project. + +This is the CLI alternative to clangd workspace/symbol search. + +Usage: + python tools/find-symbol.py AITarget + python tools/find-symbol.py CEntity --type class + python tools/find-symbol.py EState --type enum + python tools/find-symbol.py TheAnimCandidateData --type global + python tools/find-symbol.py HHANDLER --type typedef + python tools/find-symbol.py --all AIGoal # show all match types +""" + +import argparse +import os +import re +import sys +from typing import List, Optional, Tuple + +script_dir = os.path.dirname(os.path.realpath(__file__)) +root_dir = os.path.abspath(os.path.join(script_dir, "..")) +SRC_DIR = os.path.join(root_dir, "src") + +# Extensions to search +SOURCE_EXTS = {".h", ".hpp", ".cpp", ".cc", ".c", ".hh"} + +# ------------------------------------------------------------------- +# Pattern builders +# ------------------------------------------------------------------- + + +def _word(name: str) -> str: + """Return a regex that matches `name` as a whole word.""" + return r"(?]*>\s*)?struct\s+({name})(?:\s|:|\{{|;)" + ), + "class": re.compile( + r"^\s*(?:template\s*<[^>]*>\s*)?class\s+({name})(?:\s|:|\{{|;)" + ), + "enum": re.compile(r"^\s*enum\s+(?:class\s+)?({name})(?:\s|:|\{{|;)"), + "typedef": re.compile(r"\btypedef\b.*\b({name})\s*;"), + "global": re.compile( + r"^(?:extern\s+)?(?:const\s+)?[\w:<>*&\s]+?\b({name})\s*(?:;|=|\[)" + ), +} + + +def make_pattern(kind: str, name: str) -> re.Pattern: + return re.compile(PATTERNS[kind].pattern.replace("{name}", re.escape(name))) + + +# ------------------------------------------------------------------- +# Search +# ------------------------------------------------------------------- + +Match = Tuple[str, int, str, str] # (filepath, lineno, kind, line_text) + + +def search_file(filepath: str, name: str, kinds: List[str]) -> List[Match]: + results: List[Match] = [] + compiled = {k: make_pattern(k, name) for k in kinds} + try: + with open(filepath, encoding="utf-8", errors="ignore") as f: + for lineno, line in enumerate(f, 1): + for kind, pat in compiled.items(): + if pat.search(line): + results.append((filepath, lineno, kind, line.rstrip())) + break # only report the first kind match per line + except OSError: + pass + return results + + +def search_tree(name: str, kinds: List[str]) -> List[Match]: + results: List[Match] = [] + for dirpath, _dirs, files in os.walk(SRC_DIR): + for fname in files: + if os.path.splitext(fname)[1] in SOURCE_EXTS: + fpath = os.path.join(dirpath, fname) + results.extend(search_file(fpath, name, kinds)) + return results + + +# ------------------------------------------------------------------- +# Main +# ------------------------------------------------------------------- + +ALL_KINDS = ["struct", "class", "enum", "typedef", "global"] + + +def main() -> None: + parser = argparse.ArgumentParser( + description="Search src/ for existing symbol definitions", + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__, + ) + parser.add_argument("name", help="Symbol name to search for") + parser.add_argument( + "--type", + dest="kind", + choices=ALL_KINDS, + help="Restrict search to a specific symbol kind", + ) + parser.add_argument( + "--all", + action="store_true", + help="Search for all symbol kinds (default when --type is omitted)", + ) + args = parser.parse_args() + + kinds = [args.kind] if args.kind else ALL_KINDS + + if not os.path.isdir(SRC_DIR): + print(f"Error: src/ directory not found at {SRC_DIR}", file=sys.stderr) + sys.exit(1) + + matches = search_tree(args.name, kinds) + + if not matches: + print(f"Not found: '{args.name}' in {SRC_DIR}") + print("Safe to declare — symbol does not exist in the project.") + sys.exit(0) + + # Group by file for readable output + by_file: dict = {} + for filepath, lineno, kind, text in matches: + rel = os.path.relpath(filepath, root_dir) + by_file.setdefault(rel, []).append((lineno, kind, text)) + + print(f"Found '{args.name}' in {len(by_file)} file(s):\n") + for rel_path, hits in sorted(by_file.items()): + print(f" {rel_path}") + for lineno, kind, text in hits: + print(f" {lineno:>5}: [{kind}] {text.strip()}") + print() + + print("Include the header above instead of redeclaring.") + sys.exit(0) + + +if __name__ == "__main__": + main() From 8bd64c611e5c3de0ee7eea47e5257a4c36fe078a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 10 Mar 2026 19:58:54 +0100 Subject: [PATCH 003/691] ~ --- configure.py | 2 + src/Speed/Indep/SourceLists/zCamera.cpp | 6 + src/Speed/Indep/Src/Camera/Camera.cpp | 253 +++ src/Speed/Indep/Src/Camera/Camera.hpp | 152 +- src/Speed/Indep/Src/Camera/CameraMover.cpp | 1557 +++++++++++++++++ src/Speed/Indep/Src/Camera/CameraMover.hpp | 316 +++- src/Speed/Indep/Src/Camera/ICE/ICEData.cpp | 51 + src/Speed/Indep/Src/Camera/ICE/ICEData.hpp | 4 + src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp | 434 +++++ src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp | 38 + src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 358 ++++ src/Speed/Indep/Src/Camera/ICE/ICEMover.hpp | 337 ++++ src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp | 168 ++ src/Speed/Indep/Src/Camera/ICE/ICEReplay.hpp | 38 + src/Speed/Indep/Src/Misc/GameFlow.hpp | 2 + src/Speed/Indep/Src/World/WCollider.h | 1 + src/Speed/Indep/bWare/Inc/bMath.hpp | 1 + 17 files changed, 3685 insertions(+), 33 deletions(-) diff --git a/configure.py b/configure.py index 98dc5d20d..68ac64063 100755 --- a/configure.py +++ b/configure.py @@ -496,6 +496,8 @@ def MatchingFor(*versions): Object(NonMatching, "Speed/Indep/SourceLists/zAnim.cpp"), Object(NonMatching, "Speed/Indep/SourceLists/zAttribSys.cpp"), Object(NonMatching, "Speed/Indep/SourceLists/zBWare.cpp"), + # Keep zCamera on the real unity C++ source; do not point it at build/asm + # dumps to inflate progress. Object(NonMatching, "Speed/Indep/SourceLists/zCamera.cpp"), Object(NonMatching, "Speed/Indep/SourceLists/zComms.cpp"), Object(NonMatching, "Speed/Indep/SourceLists/zDebug.cpp"), diff --git a/src/Speed/Indep/SourceLists/zCamera.cpp b/src/Speed/Indep/SourceLists/zCamera.cpp index e69de29bb..c4420f364 100644 --- a/src/Speed/Indep/SourceLists/zCamera.cpp +++ b/src/Speed/Indep/SourceLists/zCamera.cpp @@ -0,0 +1,6 @@ +#include "Speed/Indep/Src/Camera/Camera.cpp" +#include "Speed/Indep/Src/Camera/CameraMover.cpp" +#include "Speed/Indep/Src/Camera/ICE/ICEData.cpp" +#include "Speed/Indep/Src/Camera/ICE/ICEMover.cpp" +#include "Speed/Indep/Src/Camera/ICE/ICEReplay.cpp" +#include "Speed/Indep/Src/Camera/ICE/ICEManager.cpp" diff --git a/src/Speed/Indep/Src/Camera/Camera.cpp b/src/Speed/Indep/Src/Camera/Camera.cpp index e69de29bb..41b44aad0 100644 --- a/src/Speed/Indep/Src/Camera/Camera.cpp +++ b/src/Speed/Indep/Src/Camera/Camera.cpp @@ -0,0 +1,253 @@ +#include "Camera.hpp" +#include "Speed/Indep/Src/Ecstasy/eMath.hpp" +#include "Speed/Indep/Src/Misc/Timer.hpp" +#include "Speed/Indep/bWare/Inc/Strings.hpp" +#include "Speed/Indep/bWare/Inc/bFunk.hpp" +#include "Speed/Indep/bWare/Inc/bWare.hpp" + +void UpdateCameraMovers(float dT); +void UpdateCameraShakers(float dT); + +extern int DisableCommunication; +extern int JR2ServerExists; + +int Camera::StopUpdating; +volatile JollyRancherResponsePacket Camera::JollyRancherResponse; + +static unsigned short aBaselineFovNoise; +static int cameralink; + +Camera::Camera() { + bMatrix4 matrix; + + matrix.v0.x = 1.0f; + matrix.v0.y = 0.0f; + matrix.v0.z = 0.0f; + matrix.v0.w = 0.0f; + matrix.v1.x = 0.0f; + matrix.v1.y = -1.0f; + matrix.v1.z = 0.0f; + matrix.v1.w = 0.0f; + matrix.v2.x = 0.0f; + matrix.v2.y = 0.0f; + matrix.v2.z = -1.0f; + matrix.v2.w = 100.0f; + matrix.v3.x = 0.0f; + matrix.v3.y = 0.0f; + matrix.v3.z = 1200.0f; + matrix.v3.w = 1.0f; + + LastUpdateTime = 0x80000000; + LastDisparateTime = RealTimeFrames; + RenderDash = 0; + CurrentKey.TargetDistance = 10.0f; + CurrentKey.NearZ = 0.5f; + bClearVelocity = false; + CurrentKey.FocalDistance = 0.0f; + CurrentKey.DepthOfField = 0.0f; + ElapsedTime = 1.0f; + CurrentKey.FarZ = 10000.0f; + CurrentKey.FieldOfView = 0x36FB; + CurrentKey.NoiseAmplitude2.w = 0.0f; + CurrentKey.LB_height = 0.0f; + CurrentKey.NoiseAmplitude1.x = 0.0f; + CurrentKey.NoiseAmplitude1.y = 0.0f; + CurrentKey.NoiseAmplitude1.z = 0.0f; + CurrentKey.NoiseAmplitude1.w = 0.0f; + CurrentKey.SimTimeMultiplier = 1.0f; + CurrentKey.NoiseFrequency1.x = 1.0f; + CurrentKey.NoiseFrequency1.y = 1.0f; + CurrentKey.NoiseFrequency1.z = 1.0f; + CurrentKey.NoiseFrequency1.w = 1.0f; + CurrentKey.NoiseFrequency2.x = 1.0f; + CurrentKey.NoiseFrequency2.y = 1.0f; + CurrentKey.NoiseFrequency2.z = 1.0f; + CurrentKey.NoiseFrequency2.w = 1.0f; + CurrentKey.NoiseAmplitude2.x = 0.0f; + CurrentKey.NoiseAmplitude2.y = 0.0f; + CurrentKey.NoiseAmplitude2.z = 0.0f; + SetCameraMatrix(matrix, 1.0f); + SetCameraMatrix(matrix, 1.0f); +} + +void Camera::UpdateAll(float dT) { + UpdateCameraMovers(dT); + UpdateCameraShakers(dT); +} + +float NoiseBase(int x) { + int n = x << 13 ^ x; + return 1.0f - static_cast((n * (n * n * 15731 + 789221) + 1376312589) & 0x7fffffff) * 0.0000000009313226f; +} + +float NoiseInterpolated(float x) { + int a = static_cast(bFloor(x)); + float t = NoiseBase(a); + float s = NoiseBase(a + 1); + float f = x - static_cast(a); + + return f * s + (1.0f - f) * t; +} + +float Noise(float x) { + float total = 0.0f; + float amplitude = 1.0f; + float frequency = 1.0f; + + for (int i = 0; i <= 5; i++) { + total += amplitude * NoiseInterpolated(x * frequency); + frequency += frequency; + amplitude *= 0.5f; + } + + return total; +} + +unsigned short Camera::FovRelativeAngle(unsigned short angle) { + float sine = bSin(angle); + float fov_sine = bSin(static_cast(CurrentKey.FieldOfView >> 1)); + float baseline_sine = bSin(static_cast(aBaselineFovNoise >> 1)); + + return bASin((sine * fov_sine) / baseline_sine); +} + +void Camera::CommunicateWithJollyRancher(char *cameraname) { + if (DisableCommunication == 0) { + char data[96]; + void *addr = const_cast(const_cast(&JollyRancherResponse)); + int protocol = DisableCommunication; + bMatrix4 scaledmatrix; + + bMemCpy(&data[0], &addr, 4); + bMemCpy(&data[4], &protocol, 4); + PSMTX44Copy(*reinterpret_cast(this), *reinterpret_cast(&scaledmatrix)); + scaledmatrix.v3.x *= 100.0f; + scaledmatrix.v3.y *= 100.0f; + scaledmatrix.v3.z *= 100.0f; + scaledmatrix.v3.w = 1.0f; + bMemCpy(&data[8], &scaledmatrix, 0x40); + bStrCpy(&data[72], cameraname); + bFunkCallASync("JR2Server", 1, data, 0x60); + } +} + +void Camera::SetCameraMatrix(const bMatrix4 &m, float fTime) { + if (StopUpdating != 0) { + return; + } + + bMemCpy(&PreviousKey, &CurrentKey, sizeof(CameraParams)); + ElapsedTime = fTime; + + if (JollyRancherResponse.UseMatrix != 0 && DisableCommunication == 0) { + bMatrix4 scaledmatrix; + + if (cameralink == 0) { + cameralink = 1; + } + + bMemCpy(&scaledmatrix, const_cast(&JollyRancherResponse.CamMatrix), sizeof(bMatrix4)); + scaledmatrix.v3.x *= 0.01f; + scaledmatrix.v3.y *= 0.01f; + scaledmatrix.v3.z *= 0.01f; + scaledmatrix.v3.w = 1.0f; + PSMTX44Copy(*reinterpret_cast(&scaledmatrix), *reinterpret_cast(&CurrentKey.Matrix)); + } else { + if (cameralink != 0) { + cameralink = 0; + } + + PSMTX44Copy(*reinterpret_cast(&m), *reinterpret_cast(&CurrentKey.Matrix)); + } + + bMatrix4 t; + bTransposeMatrix(&t, &CurrentKey.Matrix); + eMulVector(&CurrentKey.Position, &t, reinterpret_cast(&CurrentKey.Matrix.v3)); + CurrentKey.Position.x = -CurrentKey.Position.x; + CurrentKey.Position.y = -CurrentKey.Position.y; + CurrentKey.Position.z = -CurrentKey.Position.z; + bNormalize(&CurrentKey.Direction, reinterpret_cast(&t.v2)); + CurrentKey.Target.x = CurrentKey.Direction.x * CurrentKey.TargetDistance + CurrentKey.Position.x; + CurrentKey.Target.y = CurrentKey.Direction.y * CurrentKey.TargetDistance + CurrentKey.Position.y; + CurrentKey.Target.z = CurrentKey.Direction.z * CurrentKey.TargetDistance + CurrentKey.Position.z; + + if (bClearVelocity) { + bClearVelocity = false; + bMemCpy(&PreviousKey, &CurrentKey, sizeof(CameraParams)); + ElapsedTime = 1.0f; + } + + if (ElapsedTime > 0.0f) { + float scale = 1.0f / ElapsedTime; + + VelocityKey.Position.x = (CurrentKey.Position.x - PreviousKey.Position.x) * scale; + VelocityKey.Position.y = (CurrentKey.Position.y - PreviousKey.Position.y) * scale; + VelocityKey.Position.z = (CurrentKey.Position.z - PreviousKey.Position.z) * scale; + + VelocityKey.Direction.x = (CurrentKey.Direction.x - PreviousKey.Direction.x) * scale; + VelocityKey.Direction.y = (CurrentKey.Direction.y - PreviousKey.Direction.y) * scale; + VelocityKey.Direction.z = (CurrentKey.Direction.z - PreviousKey.Direction.z) * scale; + + VelocityKey.Target.x = (CurrentKey.Target.x - PreviousKey.Target.x) * scale; + VelocityKey.Target.y = (CurrentKey.Target.y - PreviousKey.Target.y) * scale; + VelocityKey.Target.z = (CurrentKey.Target.z - PreviousKey.Target.z) * scale; + + VelocityKey.FieldOfView = + static_cast(static_cast(scale * static_cast(static_cast(CurrentKey.FieldOfView - PreviousKey.FieldOfView)))); + + VelocityKey.TargetDistance = (CurrentKey.TargetDistance - PreviousKey.TargetDistance) * scale; + VelocityKey.FocalDistance = (CurrentKey.FocalDistance - PreviousKey.FocalDistance) * scale; + VelocityKey.DepthOfField = (CurrentKey.DepthOfField - PreviousKey.DepthOfField) * scale; + VelocityKey.NearZ = (CurrentKey.NearZ - PreviousKey.NearZ) * scale; + VelocityKey.FarZ = (CurrentKey.FarZ - PreviousKey.FarZ) * scale; + VelocityKey.LB_height = (CurrentKey.LB_height - PreviousKey.LB_height) * scale; + VelocityKey.SimTimeMultiplier = (CurrentKey.SimTimeMultiplier - PreviousKey.SimTimeMultiplier) * scale; + + VelocityKey.NoiseFrequency1.x = (CurrentKey.NoiseFrequency1.x - PreviousKey.NoiseFrequency1.x) * scale; + VelocityKey.NoiseFrequency1.y = (CurrentKey.NoiseFrequency1.y - PreviousKey.NoiseFrequency1.y) * scale; + VelocityKey.NoiseFrequency1.z = (CurrentKey.NoiseFrequency1.z - PreviousKey.NoiseFrequency1.z) * scale; + VelocityKey.NoiseFrequency1.w = (CurrentKey.NoiseFrequency1.w - PreviousKey.NoiseFrequency1.w) * scale; + + VelocityKey.NoiseAmplitude1.x = (CurrentKey.NoiseAmplitude1.x - PreviousKey.NoiseAmplitude1.x) * scale; + VelocityKey.NoiseAmplitude1.y = (CurrentKey.NoiseAmplitude1.y - PreviousKey.NoiseAmplitude1.y) * scale; + VelocityKey.NoiseAmplitude1.z = (CurrentKey.NoiseAmplitude1.z - PreviousKey.NoiseAmplitude1.z) * scale; + VelocityKey.NoiseAmplitude1.w = (CurrentKey.NoiseAmplitude1.w - PreviousKey.NoiseAmplitude1.w) * scale; + + VelocityKey.NoiseFrequency2.x = (CurrentKey.NoiseFrequency2.x - PreviousKey.NoiseFrequency2.x) * scale; + VelocityKey.NoiseFrequency2.y = (CurrentKey.NoiseFrequency2.y - PreviousKey.NoiseFrequency2.y) * scale; + VelocityKey.NoiseFrequency2.z = (CurrentKey.NoiseFrequency2.z - PreviousKey.NoiseFrequency2.z) * scale; + VelocityKey.NoiseFrequency2.w = (CurrentKey.NoiseFrequency2.w - PreviousKey.NoiseFrequency2.w) * scale; + + VelocityKey.NoiseAmplitude2.x = (CurrentKey.NoiseAmplitude2.x - PreviousKey.NoiseAmplitude2.x) * scale; + VelocityKey.NoiseAmplitude2.y = (CurrentKey.NoiseAmplitude2.y - PreviousKey.NoiseAmplitude2.y) * scale; + VelocityKey.NoiseAmplitude2.z = (CurrentKey.NoiseAmplitude2.z - PreviousKey.NoiseAmplitude2.z) * scale; + VelocityKey.NoiseAmplitude2.w = (CurrentKey.NoiseAmplitude2.w - PreviousKey.NoiseAmplitude2.w) * scale; + } +} + +void Camera::ApplyNoise(bMatrix4 *p_matrix, float time, float intensity) { + bVector4 noise1; + bVector4 noise2; + bVector4 v_noise; + bMatrix4 m; + + noise1.x = Noise(CurrentKey.NoiseFrequency1.x * time) * CurrentKey.NoiseAmplitude1.x; + noise1.y = Noise(CurrentKey.NoiseFrequency1.y * time) * CurrentKey.NoiseAmplitude1.y; + noise1.z = Noise(CurrentKey.NoiseFrequency1.z * time) * CurrentKey.NoiseAmplitude1.z; + noise1.w = Noise(CurrentKey.NoiseFrequency1.w * time) * CurrentKey.NoiseAmplitude1.w; + + noise2.x = Noise(CurrentKey.NoiseFrequency2.x * time) * CurrentKey.NoiseAmplitude2.x; + noise2.y = Noise(CurrentKey.NoiseFrequency2.y * time) * CurrentKey.NoiseAmplitude2.y; + noise2.z = Noise(CurrentKey.NoiseFrequency2.z * time) * CurrentKey.NoiseAmplitude2.z; + noise2.w = Noise(CurrentKey.NoiseFrequency2.w * time) * CurrentKey.NoiseAmplitude2.w; + + v_noise.x = (noise1.x + noise2.x) * intensity; + v_noise.y = (noise1.y + noise2.y) * intensity; + v_noise.z = (noise1.z + noise2.z) * intensity; + v_noise.w = (noise1.w + noise2.w) * intensity; + + bIdentity(&m); + eRotateX(&m, &m, FovRelativeAngle(bDegToAng(v_noise.z))); + eRotateY(&m, &m, FovRelativeAngle(bDegToAng(v_noise.w))); + eMulMatrix(p_matrix, p_matrix, &m); +} diff --git a/src/Speed/Indep/Src/Camera/Camera.hpp b/src/Speed/Indep/Src/Camera/Camera.hpp index 835f62948..dfab4fae0 100644 --- a/src/Speed/Indep/Src/Camera/Camera.hpp +++ b/src/Speed/Indep/Src/Camera/Camera.hpp @@ -8,6 +8,16 @@ #include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" #include "Speed/Indep/bWare/Inc/bMath.hpp" +extern int RealTimeFrames; + +struct JollyRancherResponsePacket { + volatile int UseMatrix; // offset 0x0, size 0x4 + volatile int Pad1; // offset 0x4, size 0x4 + volatile int Pad2; // offset 0x8, size 0x4 + volatile int Pad3; // offset 0xC, size 0x4 + volatile bMatrix4 CamMatrix; // offset 0x10, size 0x40 +}; + struct CameraParams { // total size: 0xD4 bMatrix4 Matrix; // offset 0x0, size 0x40 @@ -32,8 +42,17 @@ struct CameraParams { // total size: 0x290 class Camera { public: + static int StopUpdating; + static volatile JollyRancherResponsePacket JollyRancherResponse; + + Camera(); + static void UpdateAll(float dT); + void CommunicateWithJollyRancher(char *cameraname); + void SetCameraMatrix(const bMatrix4 &m, float fTime); + void ApplyNoise(bMatrix4 *p_matrix, float time, float intensity); + bMatrix4 *GetCameraMatrix() { return &this->CurrentKey.Matrix; } @@ -47,6 +66,9 @@ class Camera { // float GetDepthOfField() {} // unsigned short GetFieldOfView() {} + unsigned short GetFieldOfView() { + return CurrentKey.FieldOfView; + } // bMatrix4 *GetWorldToCameraMatrix() {} @@ -58,9 +80,15 @@ class Camera { return &this->CurrentKey.Direction; } - // bVector3 *GetTarget() {} + bVector3 *GetTarget() { + return &CurrentKey.Target; + } + + unsigned short GetFov() { + return CurrentKey.FieldOfView; + } - // unsigned short GetFov() {} + unsigned short FovRelativeAngle(unsigned short angle); bVector3 GetPositionSimSpace() { bVector3 vec(CurrentKey.Position); @@ -77,65 +105,131 @@ class Camera { // unsigned short GetPreviousFov() {} - // bVector3 *GetVelocityPosition() {} + bVector3 *GetVelocityPosition() { + return &VelocityKey.Position; + } - // bVector3 *GetVelocityDirection() {} + bVector3 *GetVelocityDirection() { + return &VelocityKey.Direction; + } - // bVector3 *GetVelocityTarget() {} + bVector3 *GetVelocityTarget() { + return &VelocityKey.Target; + } // unsigned short GetVelocityFov() {} + unsigned short GetVelocityFov() { + return VelocityKey.FieldOfView; + } // unsigned int GetLastDisparateTime() {} - void ClearVelocity() {} + void ClearVelocity() { + bClearVelocity = true; + LastDisparateTime = RealTimeFrames; + } - void SetRenderDash(int r) {} + void SetRenderDash(int r) { + RenderDash = r; + } - void SetTargetDistance(float f) {} + void SetTargetDistance(float f) { + CurrentKey.TargetDistance = f; + } - void SetFocalDistance(float f) {} + void SetFocalDistance(float f) { + CurrentKey.FocalDistance = f; + } - void SetDepthOfField(float f) {} + void SetDepthOfField(float f) { + CurrentKey.DepthOfField = f; + } - void SetFieldOfView(unsigned short fov) {} + void SetFieldOfView(unsigned short fov) { + CurrentKey.FieldOfView = fov; + } - void SetNoiseFrequency1(float x, float y, float z, float w) {} + void SetNoiseFrequency1(float x, float y, float z, float w) { + CurrentKey.NoiseFrequency1.x = x; + CurrentKey.NoiseFrequency1.y = y; + CurrentKey.NoiseFrequency1.z = z; + CurrentKey.NoiseFrequency1.w = w; + } - void SetNoiseFrequency2(float x, float y, float z, float w) {} + void SetNoiseFrequency2(float x, float y, float z, float w) { + CurrentKey.NoiseFrequency2.x = x; + CurrentKey.NoiseFrequency2.y = y; + CurrentKey.NoiseFrequency2.z = z; + CurrentKey.NoiseFrequency2.w = w; + } - void SetNoiseAmplitude1(float x, float y, float z, float w) {} + void SetNoiseAmplitude1(float x, float y, float z, float w) { + CurrentKey.NoiseAmplitude1.x = x; + CurrentKey.NoiseAmplitude1.y = y; + CurrentKey.NoiseAmplitude1.z = z; + CurrentKey.NoiseAmplitude1.w = w; + } - void SetNoiseAmplitude2(float x, float y, float z, float w) {} + void SetNoiseAmplitude2(float x, float y, float z, float w) { + CurrentKey.NoiseAmplitude2.x = x; + CurrentKey.NoiseAmplitude2.y = y; + CurrentKey.NoiseAmplitude2.z = z; + CurrentKey.NoiseAmplitude2.w = w; + } - void SetNoiseFrequency1(bVector4 *p) {} + void SetNoiseFrequency1(bVector4 *p) { + CurrentKey.NoiseFrequency1 = *p; + } - void SetNoiseFrequency2(bVector4 *p) {} + void SetNoiseFrequency2(bVector4 *p) { + CurrentKey.NoiseFrequency2 = *p; + } - void SetNoiseAmplitude1(bVector4 *p) {} + void SetNoiseAmplitude1(bVector4 *p) { + CurrentKey.NoiseAmplitude1 = *p; + } - void SetNoiseAmplitude2(bVector4 *p) {} + void SetNoiseAmplitude2(bVector4 *p) { + CurrentKey.NoiseAmplitude2 = *p; + } - void SetNoiseFrequency1(float *p) {} + void SetNoiseFrequency1(float *p) { + SetNoiseFrequency1(p[0], p[1], p[2], p[3]); + } - void SetNoiseFrequency2(float *p) {} + void SetNoiseFrequency2(float *p) { + SetNoiseFrequency2(p[0], p[1], p[2], p[3]); + } - void SetNoiseAmplitude1(float *p) {} + void SetNoiseAmplitude1(float *p) { + SetNoiseAmplitude1(p[0], p[1], p[2], p[3]); + } - void SetNoiseAmplitude2(float *p) {} + void SetNoiseAmplitude2(float *p) { + SetNoiseAmplitude2(p[0], p[1], p[2], p[3]); + } - void SetNearZ(float near_z) {} + void SetNearZ(float near_z) { + CurrentKey.NearZ = near_z; + } - void SetFarZ(float far_z) {} + void SetFarZ(float far_z) { + CurrentKey.FarZ = far_z; + } // float GetNearZ() {} // float GetFarZ() {} - void SetLetterBox(float LB_h) {} + void SetLetterBox(float LB_h) { + CurrentKey.LB_height = LB_h; + } // float GetLetterBox() {} - void SetSimTimeMultiplier(float multiplier) {} + void SetSimTimeMultiplier(float multiplier) { + CurrentKey.SimTimeMultiplier = multiplier; + } // float GetSimTimeMultiplier() {} @@ -153,4 +247,8 @@ class Camera { // TODO move? extern bool gCinematicMomementCamera; +float NoiseBase(int x); +float NoiseInterpolated(float x); +float Noise(float x); + #endif diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index e69de29bb..893f322e6 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -0,0 +1,1557 @@ +#include "CameraMover.hpp" +#include "CameraAI.hpp" +#include "Speed/Indep/Src/Frontend/Database/FEDatabase.hpp" +#include "Speed/Indep/Src/Frontend/FEManager.hpp" +#include "Speed/Indep/Src/Interfaces/SimActivities/INIS.h" +#include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" +#include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" +#include "Speed/Indep/Src/Misc/GameFlow.hpp" +#include "Speed/Indep/Src/Misc/Table.hpp" +#include "Speed/Indep/Src/Physics/Common/VehicleSystem.h" +#include "Speed/Indep/Src/World/CarInfo.hpp" +#include "Speed/Indep/Src/World/TrackStreamer.hpp" +#include "Speed/Indep/bWare/Inc/bFunk.hpp" + +extern int WeHaveCheckedIfJR2ServerExists; +extern int DisablePrecullerCounter; +extern int JR2ServerExists; +extern int LastUpdateTimeCaffeine; +extern int LastUpdateTimeJR2; +extern int RealTime; +extern int DisableCommunication; +extern int TrackStreamerRemoteCaffeinating; +extern int bStreamingPositionFromICE; +extern Timer RealTimer; +extern bool TrackCopCameraMover_IdleSim; + +bool OutsidePovType(int pov_type); +bool RenderCarPovType(int pov_type, bool look_back); +bool RenderCarPovTypeRaw(int pov_type, int look_back) __asm__("RenderCarPovType__Fib"); +void espSetCameraPositionFix(const struct LongVector *eye, const struct LongVector *target); +int bFunkDoesServerExist(const char *server_name); + +extern bVector4 CameraNoiseHandheldFrequency; +extern bVector4 CameraNoiseHandheldAmplitude; +extern bVector4 CameraNoiseChopperFrequency; +extern bVector4 CameraNoiseChopperAmplitude; +extern bVector4 CameraNoiseSpeedFrequency; +extern bVector4 CameraNoiseSpeedAmplitude; +extern bVector4 CameraNoiseTerrainFrequency; +extern bVector4 CameraNoiseTerrainAmplitude; +extern bVector4 CameraNoiseSpeedData[5]; +extern float CameraAccelerationCurve[5]; +extern bVector2 CameraSpeedHugData[5]; +extern Graph gDriftSpeed; +extern CarTypeInfo *GetCarTypeInfoFromHash(unsigned int car_type_hash); +extern float RVMnearz; +extern float RVMfarz; +extern bVector3 RVMOffsetInCar; +extern float TrackCarIsoZoomDistance[3]; +extern float TrackCarLookOffsetX[3]; +extern float TrackCarLookOffsetY[3]; +extern float TrackCarLookOffsetZ[3]; +void ApplyCameraShake(int nViewID, bMatrix4 *pMatrix); +void HideEverySingleHud(); +void SplineSeek(tCubic1D *p, float time, float fDClamp, float fDDClamp) __asm__("SplineSeek__6cPointP8tCubic1Dfff"); +namespace CameraAI { +void MaybeKillJumpCam(unsigned int id); +void MaybeKillPursuitCam(unsigned int id); +} + +struct LongVector { + int x; + int y; + int z; +}; + +static void MakeLongVector(LongVector *dest, const bVector3 *src, float scale) { + dest->x = static_cast(src->x * scale); + dest->y = static_cast(src->y * scale); + dest->z = static_cast(src->z * scale); +} + +static float SampleFloatTable(const float *data, int count, float value, float min_value, float max_value) { + if (count <= 0) { + return 0.0f; + } + if (value <= min_value) { + return data[0]; + } + if (value >= max_value) { + return data[count - 1]; + } + + { + float scaled = (value - min_value) * (static_cast(count - 1) / (max_value - min_value)); + int index = static_cast(bFloor(scaled)); + float blend = scaled - static_cast(index); + + if (index < 0) { + index = 0; + } + if (index >= count - 1) { + index = count - 2; + } + + return data[index] + (data[index + 1] - data[index]) * blend; + } +} + +static bVector2 SampleVector2Table(const bVector2 *data, int count, float value, float min_value, float max_value) { + if (count <= 0) { + return bVector2(0.0f, 0.0f); + } + if (value <= min_value) { + return data[0]; + } + if (value >= max_value) { + return data[count - 1]; + } + + { + float scaled = (value - min_value) * (static_cast(count - 1) / (max_value - min_value)); + int index = static_cast(bFloor(scaled)); + float blend = scaled - static_cast(index); + bVector2 sample; + + if (index < 0) { + index = 0; + } + if (index >= count - 1) { + index = count - 2; + } + + sample.x = data[index].x + (data[index + 1].x - data[index].x) * blend; + sample.y = data[index].y + (data[index + 1].y - data[index].y) * blend; + return sample; + } +} + +bool OutsidePovType(int pov_type) { + return (static_cast(pov_type - 2) < 3) || pov_type == 6 || pov_type == 5; +} + +bool RenderCarPovType(int pov_type, bool look_back) { + return (static_cast(pov_type - 2) < 3) || (pov_type == 1 && !look_back) || pov_type == 6 || pov_type == 5; +} + +static void ResetCubic1DState(tCubic1D *cubic) { + cubic->Val = cubic->ValDesired; + cubic->dVal = cubic->dValDesired; + cubic->state = 0; +} + +static void ResetCubic3DState(tCubic3D *cubic) { + ResetCubic1DState(&cubic->x); + ResetCubic1DState(&cubic->y); + ResetCubic1DState(&cubic->z); +} + +CameraAnchor::CameraAnchor(int model) + : mVelMag(0.0f), // + mTopSpeed(0.0f), // + mModel(0), // + mWorldID(0), // + mSurface(), // + mCollisionDamping(0.0f), // + mDrift(0.0f), // + mGroundCollision(0.0f), // + mObjectCollision(0.0f), // + mIsNosEngaged(false), // + mIsBrakeEngaged(false), // + mIsDragRace(false), // + mIsOverRev(false), // + mIsTouchingGround(false), // + mIsVehicleDestroyed(false), // + mIsGearChanging(false), // + mIsCloseToRoadBlock(false), // + mZoom(1.0f), // + mModelAttributes(Attrib::FindCollection(Attrib::Gen::ecar::ClassKey(), 0xeec2271a), 0, nullptr), // + mCameraInfoAttributes(Attrib::FindCollection(Attrib::Gen::camerainfo::ClassKey(), 0xeec2271a), 0, nullptr) { + mVelocity.x = 0.0f; + mVelocity.y = 0.0f; + mVelocity.z = 0.0f; + mGeomPos.x = 0.0f; + mGeomPos.y = 0.0f; + mGeomPos.z = 0.0f; + mDimension.x = 0.0f; + mDimension.y = 0.0f; + mDimension.z = 0.0f; + mAccel.x = 0.0f; + mAccel.y = 0.0f; + mAccel.z = 0.0f; + mPOV.Type = 3; + mPOV.Angle = bDegToAng(mCameraInfoAttributes.ANGLE(0)); + mPOV.Lag = mCameraInfoAttributes.LAG(0); + mPOV.Height = mCameraInfoAttributes.HEIGHT(0); + mPOV.LatOffset = mCameraInfoAttributes.LATOFFSET(0); + mPOV.Fov = bDegToAng(mCameraInfoAttributes.FOV(0)); + mPOV.Stiffness = mCameraInfoAttributes.STIFFNESS(0); + mPOV.AllowTilting = mCameraInfoAttributes.TILTING(0); + SetModel(model); + bIdentity(&mGeomRot); +} + +CameraAnchor::~CameraAnchor() {} + +void CameraAnchor::SetModel(int model) { + if (mModel != model) { + const char *model_name = ""; + CarTypeInfo *info = GetCarTypeInfoFromHash(model); + + if (info != nullptr) { + model_name = info->CarTypeName; + } + + mModel = model; + mModelAttributes.Change(Attrib::FindCollectionWithDefault(Attrib::Gen::ecar::ClassKey(), Attrib::StringToLowerCaseKey(model_name))); + } +} + +POV *CameraAnchor::GetPov(int pov_type) { + Attrib::Key attrib_key; + + mPOV.Type = static_cast(pov_type); + + switch (pov_type) { + case 0: + attrib_key = 0x585517f3; + break; + case 1: + attrib_key = 0xd74c1435; + break; + case 2: + attrib_key = 0x0c2da793; + break; + case 3: + attrib_key = 0xccf03cb3; + break; + case 4: + attrib_key = 0x10204a90; + break; + case 5: + attrib_key = 0x4b675dc8; + break; + case 6: + attrib_key = 0xd76a6fad; + break; + default: + mPOV.Type = 3; + mCameraInfoAttributes.Change(Attrib::FindCollection(Attrib::Gen::camerainfo::ClassKey(), 0xeec2271a)); + attrib_key = 0; + break; + } + + if (attrib_key != 0) { + const Attrib::RefSpec *refspec = reinterpret_cast(mModelAttributes.GetAttributePointer(attrib_key, 0)); + + if (refspec == nullptr) { + refspec = reinterpret_cast(Attrib::DefaultDataArea(sizeof(Attrib::RefSpec))); + } + + mCameraInfoAttributes.ChangeWithDefault(*refspec); + } + + { + float zoom = bMax(1.0f, mZoom); + unsigned int index = eGetCurrentViewMode() == 3; + + mPOV.Angle = bDegToAng(mCameraInfoAttributes.ANGLE(index)); + mPOV.Lag = mCameraInfoAttributes.LAG(index) / zoom; + mPOV.Height = mCameraInfoAttributes.HEIGHT(index); + mPOV.LatOffset = mCameraInfoAttributes.LATOFFSET(index); + mPOV.Fov = bDegToAng(mCameraInfoAttributes.FOV(index) * zoom); + mPOV.Stiffness = mCameraInfoAttributes.STIFFNESS(index); + mPOV.AllowTilting = static_cast(mCameraInfoAttributes.TILTING(index)); + } + + return &mPOV; +} + +void CameraAnchor::Update(float dT, const bMatrix4 &matrix, const bVector3 &velocity, const bVector3 &forward) { + float old_vel_mag = mVelMag; + float dist = bDistBetween(&mGeomPos, reinterpret_cast(&matrix.v3)); + float vel_mag_sq; + + PSMTX44Copy(*reinterpret_cast(&matrix), *reinterpret_cast(&mGeomRot)); + mAccel.x = 0.0f; + mAccel.y = 0.0f; + mAccel.z = 0.0f; + + mGeomPos.x = matrix.v3.x; + mGeomPos.y = matrix.v3.y; + mGeomPos.z = matrix.v3.z; + mVelocity = velocity; + + vel_mag_sq = forward.x * forward.x + forward.y * forward.y + forward.z * forward.z; + if (vel_mag_sq > 0.0f) { + mVelMag = bSqrt(vel_mag_sq); + } else { + mVelMag = 0.0f; + } + + if (dT > 0.0f && dist / dT < 200.0f) { + bVector3 accel_local; + + accel_local.x = (mVelMag - old_vel_mag) / dT; + accel_local.y = 0.0f; + accel_local.z = 0.0f; + bMulMatrix(&mAccel, &mGeomRot, &accel_local); + } else { + mAccel.x = 0.0f; + mAccel.y = 0.0f; + mAccel.z = 0.0f; + } +} + +void RenderCameraMovers(eView *view) { + CameraMover *head = view->CameraMoverList.GetHead(); + int no_camera_mover = head == view->CameraMoverList.EndOfList(); + CameraMover *camera_mover = nullptr; + + if (!no_camera_mover) { + camera_mover = head; + } + if (camera_mover != nullptr) { + camera_mover = nullptr; + if (!no_camera_mover) { + camera_mover = head; + } + camera_mover->Render(view); + } +} + +void CameraMoverRestartRace() { + WeHaveCheckedIfJR2ServerExists = 0; + CameraAI::Reset(); + + for (int view_id = 1; view_id < 4; view_id++) { + eView *view = eGetView(view_id, false); + + if (view == nullptr) { + continue; + } + + CameraMover *camera_mover = view->GetCameraMover(); + if (camera_mover) { + camera_mover->ResetState(); + } + } +} + +Camera *GetCurrentCamera() { + Camera *camera = 0; + + if (&eViews[1] != 0) { + camera = eViews[1].pCamera; + } + + if (camera != 0) { + return camera; + } + + return 0; +} + +void UpdateCameraMovers(float dT) { + static bool sHavePrevPosition = false; + static bVector3 sPrevPosition; + + for (int view_id = 0; view_id < 22; view_id++) { + eView *view = eGetView(view_id, false); + CameraMover *camera_mover = view->GetCameraMover(); + + if (camera_mover != nullptr) { + camera_mover->Update(dT); + } + } + + if (WeHaveCheckedIfJR2ServerExists == 0) { + JR2ServerExists = bFunkDoesServerExist("JR2Server"); + WeHaveCheckedIfJR2ServerExists = 1; + } + + { + eView *view = eGetView(1, false); + Camera *camera = view->GetCamera(); + + if (JR2ServerExists != 0 && camera != nullptr) { + if (bAbs(RealTime - LastUpdateTimeJR2) > 0x10) { + LastUpdateTimeJR2 = RealTime; + camera->CommunicateWithJollyRancher(const_cast("Player1Camera")); + } + } + + if (TrackStreamerRemoteCaffeinating != 0 && DisableCommunication == 0 && camera != nullptr) { + if (bAbs(RealTime - LastUpdateTimeCaffeine) > 0x10) { + LongVector eye; + LongVector target; + bVector3 scaled_velocity = *camera->GetVelocityPosition(); + bVector3 look = *camera->GetPosition() - scaled_velocity; + + LastUpdateTimeCaffeine = RealTime; + scaled_velocity.x *= 0.01f; + scaled_velocity.y *= 0.01f; + scaled_velocity.z *= 0.01f; + + MakeLongVector(&eye, camera->GetPosition(), 100.0f); + MakeLongVector(&target, &look, 100.0f); + espSetCameraPositionFix(&eye, &target); + + if (!sHavePrevPosition) { + sPrevPosition = *camera->GetPosition(); + sHavePrevPosition = true; + } + + if (bDistBetween(&sPrevPosition, camera->GetPosition()) > 0.1f) { + sPrevPosition = *camera->GetPosition(); + } + } + } + } + + { + bool set_any_positions = false; + + for (int view_id = 1; view_id < 3; view_id++) { + eView *view = eGetView(view_id, false); + + if (view->Active != 0) { + Camera *camera = view->GetCamera(); + CameraMover *camera_mover = view->GetCameraMover(); + + if (camera != nullptr && camera_mover != nullptr) { + bVector3 pos = *camera->GetPosition(); + + if (!set_any_positions) { + TheTrackStreamer.ClearStreamingPositions(); + set_any_positions = true; + } + + if (bStreamingPositionFromICE != 0) { + if (INIS::Exists() && INIS::Get()->GetStartLocation() != nullptr) { + bConvertFromBond(pos, *reinterpret_cast(INIS::Get()->GetStartLocation())); + } + } else { + IPlayer *player = IPlayer::First(PLAYER_LOCAL); + + if (player != nullptr && player->GetSimable() != nullptr && player->GetSimable()->GetRigidBody() != nullptr) { + IRigidBody *body = player->GetSimable()->GetRigidBody(); + + bConvertFromBond(pos, reinterpret_cast(body->GetPosition())); + } + } + + TheTrackStreamer.SetStreamingPosition(view_id - 1, &pos); + } + } + } + } +} + +bool DoesCameraTypeDisablePreculler(CameraMoverTypes type) { + if (type == CM_DEBUG_WORLD) { + return true; + } + return type == CM_TRACK_CAR; +} + +CameraMover::CameraMover(int view_id, CameraMoverTypes type) + : mWPos(0.025f) { + mCollider = WCollider::Create(0, WCollider::kColliderShape_Sphere, 0x1C, 0); + Type = type; + RenderDash = 0; + ViewID = view_id; + Enabled = 0; + pView = nullptr; + pCamera = nullptr; + fAccumulatedClearance = 0.0f; + fAccumulatedAdjust = 0.0f; + fSavedAdjust = 0.0f; + vSavedForward.z = 0.0f; + vSavedForward.x = 0.0f; + vSavedForward.y = 0.0f; + if (view_id == -1) { + } else { + pView = eGetView(view_id, false); + pCamera = pView->GetCamera(); + pCamera->SetFarZ(12000.0f); + RenderDash = pCamera->GetRenderDash(); + Enable(); + } + + if (DoesCameraTypeDisablePreculler(Type)) { + DisablePrecullerCounter++; + } +} + +CameraMover::~CameraMover() { + WCollider::Destroy(mCollider); + if (DoesCameraTypeDisablePreculler(Type)) { + DisablePrecullerCounter--; + } + Disable(); +} + +void CameraMover::Update(float dT) {} + +void CameraMover::Render(eView *view) {} + +CameraAnchor *CameraMover::GetAnchor() { + return nullptr; +} + +bool CameraMover::OutsidePOV() { + return true; +} + +bool CameraMover::RenderCarPOV() { + return true; +} + +void CameraMover::Enable() { + if (Enabled == 0) { + Enabled = 1; + if (Camera::StopUpdating == 0) { + pCamera->SetRenderDash(RenderDash); + } + pView->AttachCameraMover(this); + pCamera->SetNearZ(0.5f); + } +} + +void CameraMover::Disable() { + if (Enabled != 0) { + Enabled = 0; + RenderDash = pCamera->GetRenderDash(); + pView->UnattachCameraMover(this); + } +} + +bool CameraMover::OnWCollide(const WCollisionMgr::WorldCollisionInfo &cInfo, const UMath::Vector3 &cPoint, void *userdata) { + if (userdata) { + bVector3 vPoint; + eSwizzleWorldVector(cPoint, vPoint); + } + return true; +} + +bool CameraMover::IsSomethingInBetween(const UMath::Vector4 &start, const UMath::Vector4 &end) { + UMath::Vector4 seg[2]; + WCollisionMgr::WorldCollisionInfo cInfo; + WCollisionMgr collision_mgr(0, 3); + + seg[0] = start; + seg[1] = end; + seg[0].y += 0.1f; + seg[1].y += 0.1f; + return collision_mgr.CheckHitWorld(seg, cInfo, 3) != 0; +} + +bool CameraMover::IsSomethingInBetween(const bVector3 *start, const bVector3 *end) { + bVector3 bond_start; + bVector3 bond_end; + UMath::Vector4 world_start; + UMath::Vector4 world_end; + + bConvertToBond(bond_start, *start); + bConvertToBond(bond_end, *end); + world_start.x = bond_start.x; + world_start.y = bond_start.y; + world_start.z = bond_start.z; + world_start.w = 1.0f; + world_end.x = bond_end.x; + world_end.y = bond_end.y; + world_end.z = bond_end.z; + world_end.w = 1.0f; + return IsSomethingInBetween(world_start, world_end); +} + +float CameraMover::MinDistToWall() { + return 0.7f; +} + +unsigned short CameraMover::GetLookbackAngle() { + return 0; +} + +void CameraMover::ResetState() {} + +unsigned int CameraMover::GetAnchorID() { + CameraAnchor *anchor = GetAnchor(); + if (anchor) { + return anchor->GetWorldID(); + } + return 0; +} + +int CameraMover::IsHoodCamera() { + return false; +} + +bVector3 *CameraMover::GetTarget() { + return pCamera->GetTarget(); +} + +void CameraMover::HandheldNoise(bMatrix4 *world_to_camera, float f_scale, bool useWorldTimer) { + if (f_scale <= 0.0f) { + return; + } + + bVector4 v_frequency = CameraNoiseHandheldFrequency; + bVector4 v_magnitude = CameraNoiseHandheldAmplitude; + + v_magnitude.x *= f_scale; + v_magnitude.y *= f_scale; + v_magnitude.z *= f_scale; + v_magnitude.w *= f_scale; + + pCamera->SetNoiseFrequency1(&v_frequency); + pCamera->SetNoiseAmplitude1(&v_magnitude); + pCamera->ApplyNoise(world_to_camera, useWorldTimer ? WorldTimer.GetSeconds() : RealTimer.GetSeconds(), 1.0f); +} + +void CameraMover::ChopperNoise(bMatrix4 *world_to_camera, float f_scale, bool useWorldTimer) { + if (f_scale <= 0.0f) { + return; + } + + const IVehicle::List &vehicles = IVehicle::GetList(VEHICLE_ALL); + + for (IVehicle::List::const_iterator iter = vehicles.begin(); iter != vehicles.end(); ++iter) { + IVehicle *vehicle = *iter; + + if (vehicle != nullptr && vehicle->GetVehicleClass() == VehicleClass::CHOPPER) { + bVector3 bpos; + bVector3 dir; + float distance; + + eSwizzleWorldVector(vehicle->GetPosition(), bpos); + bSub(&dir, &bpos, pCamera->GetPosition()); + dir.z = 0.0f; + distance = bLength(&dir); + + if (distance < 100.0f) { + float intensity = f_scale * (1.0f - distance * 0.01f); + bVector4 v_frequency; + bVector4 v_magnitude; + float time; + + bScale(&v_frequency, &CameraNoiseChopperFrequency, intensity); + bScale(&v_magnitude, &CameraNoiseChopperAmplitude, intensity); + pCamera->SetNoiseFrequency1(&v_frequency); + pCamera->SetNoiseAmplitude1(&v_magnitude); + time = useWorldTimer ? WorldTimer.GetSeconds() : RealTimer.GetSeconds(); + pCamera->ApplyNoise(world_to_camera, time, 1.0f); + } + } + } +} + +void CameraMover::TerrainVelocityNoise(bMatrix4 *world_to_camera, CameraAnchor *car, float speed_scale, float terrain_scale) { + if (car == nullptr) { + return; + } + + float speed_amount = speed_scale * car->GetVelMag(); + float terrain_amount = terrain_scale * car->GetSurface().CAMERA_NOISE(0); + float terrain_mix = car->GetSurface().CAMERA_NOISE(1); + bVector3 accel = *car->GetAccel(); + const bMatrix4 *matrix = car->GetMatrix(); + float accel_forward = accel.x * matrix->v0.x + accel.y * matrix->v1.x + accel.z * matrix->v2.x; + bVector4 speed_frequency = CameraNoiseSpeedFrequency; + bVector4 speed_amplitude = CameraNoiseSpeedAmplitude; + bVector4 terrain_frequency = CameraNoiseTerrainFrequency; + bVector4 terrain_amplitude = CameraNoiseTerrainAmplitude; + + if (speed_amount > 0.0f) { + int speed_index = bClamp(static_cast(speed_amount * 0.05f), 0, 4); + bVector4 speed_sample = CameraNoiseSpeedData[speed_index]; + + terrain_amount += bAbs(accel_forward) * 0.25f; + speed_amount = speed_sample.x * speed_scale + bAbs(accel_forward) * 0.5f; + } + + if (car->IsDragRace()) { + speed_amount *= 0.75f; + } + + if (car->IsOverRev()) { + speed_amount += 1.0f; + terrain_amount *= 0.5f; + } + + if (car->IsNosEngaged() && car->GetVelMag() > 1.0f) { + speed_amount = 1.5f; + terrain_amount = 1.0f; + } + + if (car->IsBrakeEngaged() && car->GetVelMag() > 1.0f) { + speed_amount = 1.5f; + terrain_amount = 0.0f; + } + + if (!RenderCarPOV()) { + speed_amount *= 0.5f; + terrain_amount *= 0.5f; + } + + terrain_amount *= terrain_mix; + bScale(&speed_frequency, &speed_frequency, terrain_amount); + bScale(&speed_amplitude, &speed_amplitude, speed_amount); + bScale(&terrain_frequency, &terrain_frequency, terrain_mix); + bScale(&terrain_amplitude, &terrain_amplitude, terrain_scale * terrain_amount); + + pCamera->SetNoiseFrequency1(&speed_frequency); + pCamera->SetNoiseAmplitude1(&speed_amplitude); + pCamera->SetNoiseFrequency2(&terrain_frequency); + pCamera->SetNoiseAmplitude2(&terrain_amplitude); + pCamera->ApplyNoise(world_to_camera, WorldTimer.GetSeconds(), 1.0f); +} + +void CameraMover::ComputeBankedUpVector(bVector3 *up, bVector3 *eye, bVector3 *look, unsigned short bank) { + bMatrix4 axis_rotation; + bVector3 axis; + bVector3 new_up(0.0f, 0.0f, 1.0f); + + bSub(&axis, look, eye); + bNormalize(&axis, &axis); + eCreateAxisRotationMatrix(&axis_rotation, axis, bank); + eMulVector(up, &axis_rotation, &new_up); +} + +void CameraMover::IsoProjectionMatrix(bMatrix4 *pMatrix, bVector3 *pEye, bVector3 *pLook, bVector2 *pProjection) { + bVector3 vUp(-pMatrix->v0.y, -pMatrix->v1.y, -pMatrix->v2.y); + bMatrix4 mWorldToCamera; + bMatrix4 mCameraToWorld; + bVector3 vNewLookCameraSpace; + bVector3 vNewLookWorldSpace; + + eCreateLookAtMatrix(&mWorldToCamera, *pEye, *pLook, vUp); + eInvertTransformationMatrix(&mCameraToWorld, &mWorldToCamera); + eMulVector(&vNewLookCameraSpace, &mWorldToCamera, pLook); + vNewLookCameraSpace.x -= vNewLookCameraSpace.z * pProjection->x; + vNewLookCameraSpace.y -= vNewLookCameraSpace.z * pProjection->y; + eMulVector(&vNewLookWorldSpace, &mCameraToWorld, &vNewLookCameraSpace); + eCreateLookAtMatrix(pMatrix, *pEye, vNewLookWorldSpace, vUp); +} + +double CameraMover::AdjustHeightAroundCar(const bVector3 *car_pos, bVector3 *pEye, bVector3 *pForward) { + double adjust = 0.0; + float min_height = car_pos->z + 1.0f; + + if (pEye->z < min_height) { + adjust = min_height - pEye->z; + pEye->z = min_height; + } + + if (pForward != nullptr && pForward->z < 0.5f) { + pForward->z = 0.5f; + } + + return adjust; +} + +int CameraMover::MinGapCars(bMatrix4 *pMatrix, bVector3 *pLook, bVector3 *pForward) { + bMatrix4 inv_matrix; + bVector3 projection; + int adjusted = 0; + int iterations = 0; + double height_adjust; + + eInvertTransformationMatrix(&inv_matrix, pMatrix); + do { + height_adjust = AdjustHeightAroundCar(reinterpret_cast(&pMatrix->v3), pLook, pForward); + if (height_adjust <= 0.0) { + break; + } + + adjusted = 1; + iterations++; + pLook->z += static_cast(height_adjust); + } while (iterations < 16); + + vSavedForward = *pForward; + fSavedAdjust = pLook->z; + eMulVector(&projection, pMatrix, pForward); + + if (projection.z > 0.0f) { + bVector2 iso(projection.x / projection.z, projection.y / projection.z); + IsoProjectionMatrix(pMatrix, pLook, pForward, &iso); + } else { + adjusted = 0; + } + + return adjusted; +} + +int CameraMover::MinGapTopology(bMatrix4 *pMatrix, bVector3 *pLook) { + bMatrix4 inv_matrix; + bVector3 eye; + bVector3 look_camera_space; + + eInvertTransformationMatrix(&inv_matrix, pMatrix); + eye.x = pMatrix->v3.x; + eye.y = pMatrix->v3.y; + eye.z = pMatrix->v3.z; + + if (eye.z < pLook->z + 0.5f) { + eye.z = pLook->z + 0.5f; + } + + eMulVector(&look_camera_space, pMatrix, pLook); + if (look_camera_space.z <= 0.0f) { + return 0; + } + + { + bVector2 projection(look_camera_space.x / look_camera_space.z, look_camera_space.y / look_camera_space.z); + IsoProjectionMatrix(pMatrix, &eye, pLook, &projection); + } + + return 1; +} + +void CameraMover::FovCubicInit(tCubic1D *cubic) { + float fov = static_cast(pCamera->GetFov()) + static_cast(pCamera->GetVelocityFov()) * (1.0f / 30.0f); + float fov_velocity = static_cast(pCamera->GetVelocityFov()) * cubic->duration; + + cubic->SetVal(fov); + cubic->SetdVal(fov_velocity); +} + +void CameraMover::EyeCubicInit(tCubic3D *eye, bMatrix4 *matrix, bVector3 *target) { + bVector3 value; + bVector4 dval; + bScaleAdd(&value, pCamera->GetPosition(), pCamera->GetVelocityPosition(), 1.0f / 30.0f); + + if (matrix != nullptr) { + bMulMatrix(&value, matrix, &value); + } + + eye->SetVal(&value); + + dval.x = pCamera->GetVelocityPosition()->x; + dval.y = pCamera->GetVelocityPosition()->y; + dval.z = pCamera->GetVelocityPosition()->z; + + if (target != nullptr) { + dval.x -= target->x; + dval.y -= target->y; + dval.z -= target->z; + } + + dval.x *= eye->x.duration; + dval.y *= eye->x.duration; + dval.z *= eye->x.duration; + dval.w = 0.0f; + + if (matrix != nullptr) { + bMulMatrix(&dval, matrix, &dval); + } + + eye->SetdVal(reinterpret_cast(&dval)); +} + +void CameraMover::LookCubicInit(tCubic3D *look, bMatrix4 *matrix, bVector3 *target) { + bVector3 value; + bVector4 dval; + bScaleAdd(&value, pCamera->GetTarget(), pCamera->GetVelocityTarget(), 1.0f / 30.0f); + + if (matrix != nullptr) { + bMulMatrix(&value, matrix, &value); + } + + look->SetVal(&value); + + dval.x = pCamera->GetVelocityTarget()->x; + dval.y = pCamera->GetVelocityTarget()->y; + dval.z = pCamera->GetVelocityTarget()->z; + + if (target != nullptr) { + dval.x -= target->x; + dval.y -= target->y; + dval.z -= target->z; + } + + dval.x *= look->x.duration; + dval.y *= look->x.duration; + dval.z *= look->x.duration; + dval.w = 0.0f; + + if (matrix != nullptr) { + bMulMatrix(&dval, matrix, &dval); + } + + look->SetdVal(reinterpret_cast(&dval)); +} + +void CameraMover::SetEyeLook(tCubic3D *eye, tCubic3D *look, tCubic1D *fov, bMatrix4 *matrix, bVector3 *target) { + FovCubicInit(fov); + EyeCubicInit(eye, matrix, target); + LookCubicInit(look, matrix, target); +} + +CameraAnchor *CubicCameraMover::GetAnchor() { + return pCar; +} + +CubicCameraMover::CubicCameraMover(int nView, CameraAnchor *p_car, int pov_type, bool disable_lag, bool look_back, bool perfect_focus, bool snap_next) + : CameraMover(nView, CM_DRIVE_CUBIC), + pCar(p_car), + pFov(new tCubic1D(1, 1.0f)), + pEye(new tCubic3D(1, 1.0f)), + pLook(new tCubic3D(1, 1.0f)), + pForward(new tCubic3D(1, 1.0f)), + pUp(new tCubic3D(1, 1.0f)), + nPovType(pov_type), + nPovTypeUsed(pov_type), + bAccelLag(!disable_lag), + bLookBack(look_back), + bSnapNext(snap_next), + bPerfectFocus(perfect_focus), + bFirstTime(1), + tLastGrounded(WorldTimer.GetPackedTime() - 8000), + tLastUnderVehicle(WorldTimer.GetPackedTime() - 0x1900), + tLastGearChange(WorldTimer.GetPackedTime() - 6000), + fIgnoreSetSnapNextTimer(0.0f), + vSavedEye(), + vCameraImpcat(), + vCameraImpcatTimer(), + pAvgAccel(nullptr) { + vSavedEye.x = 0.0f; + vSavedEye.y = 0.0f; + vSavedEye.z = 0.0f; + vCameraImpcat.x = 0.0f; + vCameraImpcat.y = 0.0f; + vCameraImpcatTimer.x = 0.0f; + vCameraImpcatTimer.y = 0.0f; + + if (pCar != nullptr) { + POV *pov = pCar->GetPov(pov_type); + bMatrix4 matrix; + + PSMTX44Copy(*reinterpret_cast(pCar->GetMatrix()), *reinterpret_cast(&matrix)); + SetEyeLook(pEye, pLook, pFov, &matrix, pCar->GetGeomPos()); + + pForward->x.SetVal(0.0f); + pForward->y.SetVal(0.0f); + pForward->z.SetVal(1.0f); + pForward->x.SetValDesired(0.0f); + pForward->y.SetValDesired(0.0f); + pForward->z.SetValDesired(1.0f); + + pUp->x.SetVal(0.0f); + pUp->y.SetVal(0.0f); + pUp->z.SetVal(1.0f); + pUp->x.SetValDesired(0.0f); + pUp->y.SetValDesired(0.0f); + pUp->z.SetValDesired(1.0f); + + if (pov != nullptr && Camera::StopUpdating == 0) { + GetCamera()->SetFieldOfView(pov->Fov); + GetCamera()->SetTargetDistance(bDistBetween(pCar->GetGeomPos(), GetCamera()->GetPosition())); + } + } + + if (bSnapNext) { + pEye->Snap(); + pLook->Snap(); + pForward->Snap(); + pUp->Snap(); + pFov->Snap(); + } +} + +void CubicCameraMover::SetLookBack(bool b) { + bLookBack = b; +} + +void CubicCameraMover::SetDisableLag(bool disable) { + bAccelLag = !disable; +} + +bool CubicCameraMover::OutsidePOV() { + return OutsidePovType(nPovTypeUsed); +} + +bool CubicCameraMover::RenderCarPOV() { + return RenderCarPovTypeRaw(nPovTypeUsed, bLookBack); +} + +float CubicCameraMover::MinDistToWall() { + return 0.7f; +} + +bool CubicCameraMover::HighliteMode() { + return false; +} + +void CubicCameraMover::SetSnapNext() { + if (fIgnoreSetSnapNextTimer > 0.0f) { + return; + } + bSnapNext = 1; +} + +unsigned short CubicCameraMover::GetLookbackAngle() { + if (bLookBack == 0) { + return 0; + } + return 0x8000; +} + +int CubicCameraMover::IsHoodCamera() { + int is_hood_camera = 0; + + if (nPovTypeUsed == 1) { + is_hood_camera = !bLookBack; + } + return is_hood_camera; +} + +void CubicCameraMover::SetForward(POV *pov, bool snap) { + if (pCar == nullptr) { + return; + } + + if (pov == nullptr || !OutsidePovType(pov->Type)) { + pForward->SetValDesired(reinterpret_cast(&pCar->GetMatrix()->v0)); + } else { + bVector3 forward = *pCar->GetVelocity(); + const bVector3 *car_forward = reinterpret_cast(&pCar->GetMatrix()->v0); + float drift_speed = gDriftSpeed.GetValue(pCar->GetVelMag()); + + if (bDot(&forward, car_forward) < 0.0f) { + bScaleAdd(&forward, &forward, car_forward, bDot(&forward, car_forward) * 0.25f); + } + + bNormalize(&forward, &forward); + forward.x *= drift_speed; + forward.y *= drift_speed; + forward.z *= drift_speed; + bScaleAdd(&forward, &forward, car_forward, 1.0f - drift_speed); + pForward->SetValDesired(&forward); + } + + if (snap) { + pForward->Snap(); + } +} + +void CubicCameraMover::CameraAccelCurve(bVector3 *pAccel) { + if (pCar == nullptr) { + pAccel->x = 0.0f; + pAccel->y = 0.0f; + pAccel->z = 0.0f; + return; + } + + pAccel->x = SampleFloatTable(CameraAccelerationCurve, 5, pCar->GetAccel()->x, -2.0f, 2.0f) * 4.0f; + pAccel->y = SampleFloatTable(CameraAccelerationCurve, 5, pCar->GetAccel()->y, -2.0f, 2.0f) * 4.0f; + pAccel->z = SampleFloatTable(CameraAccelerationCurve, 5, pCar->GetAccel()->z, -2.0f, 2.0f) * 4.0f; +} + +void CubicCameraMover::CameraSpeedHug(bVector3 *pForward) { + if (pCar == nullptr) { + return; + } + + if (pCar->GetTopSpeed() > 0.0f) { + bVector2 hug = SampleVector2Table(CameraSpeedHugData, 5, pCar->GetVelMag(), 0.0f, pCar->GetTopSpeed()); + + pForward->x *= hug.x; + pForward->z *= hug.y; + } +} + +void CubicCameraMover::MakeSpace(bMatrix4 *pMatrix) { + if (!RenderCarPOV()) { + PSMTX44Copy(*reinterpret_cast(pCar->GetMatrix()), *reinterpret_cast(pMatrix)); + + if (pCar->GetMatrix()->v0.z < 0.5f) { + pMatrix->v1.x = -pMatrix->v1.x; + pMatrix->v1.y = -pMatrix->v1.y; + pMatrix->v1.z = -pMatrix->v1.z; + pMatrix->v1.w = -pMatrix->v1.w; + pMatrix->v2.x = -pMatrix->v2.x; + pMatrix->v2.y = -pMatrix->v2.y; + pMatrix->v2.z = -pMatrix->v2.z; + pMatrix->v2.w = -pMatrix->v2.w; + } + } else { + bIdentity(pMatrix); + + { + bVector3 forward; + bVector3 right; + bVector3 up; + + pForward->GetVal(&forward); + bNormalize(reinterpret_cast(&pMatrix->v0), &forward); + right = bCross(*reinterpret_cast(&pMatrix->v2), *reinterpret_cast(&pMatrix->v0)); + up = bCross(*reinterpret_cast(&pMatrix->v0), right); + pMatrix->v1.x = right.x; + pMatrix->v1.y = right.y; + pMatrix->v1.z = right.z; + pMatrix->v2.x = up.x; + pMatrix->v2.y = up.y; + pMatrix->v2.z = up.z; + } + + pMatrix->v3.x = pCar->GetGeomPos()->x; + pMatrix->v3.y = pCar->GetGeomPos()->y; + pMatrix->v3.z = pCar->GetGeomPos()->z; + pMatrix->v3.w = 1.0f; + } +} + +CubicCameraMover::~CubicCameraMover() { + delete pUp; + delete pFov; + delete pEye; + delete pLook; + delete pForward; + delete reinterpret_cast(pAvgAccel); +} + +void CubicCameraMover::SetPovType(int pov_type) { + if (pov_type != nPovTypeUsed) { + bool reset = !OutsidePovType(nPovTypeUsed) || !OutsidePovType(pov_type); + + bSnapNext = bSnapNext || reset; + nPovType = pov_type; + } +} + +void CubicCameraMover::ResetState() { + ResetCubic3DState(pUp); + ResetCubic1DState(pFov); + ResetCubic3DState(pEye); + ResetCubic3DState(pLook); + ResetCubic3DState(pForward); + GetCamera()->ClearVelocity(); + vSavedEye.x = 0.0f; + vSavedEye.y = 0.0f; + vSavedEye.z = 0.0f; + fIgnoreSetSnapNextTimer = 0.0f; +} + +Bezier::Bezier() + : pControlPoints(nullptr) { + mBasis.v0.x = 1.0f; + mBasis.v0.y = -3.0f; + mBasis.v0.z = 3.0f; + mBasis.v0.w = -1.0f; + mBasis.v1.x = 0.0f; + mBasis.v1.y = 3.0f; + mBasis.v1.z = -6.0f; + mBasis.v1.w = 3.0f; + mBasis.v2.x = 0.0f; + mBasis.v2.y = 0.0f; + mBasis.v2.z = 3.0f; + mBasis.v2.w = -3.0f; + mBasis.v3.x = 0.0f; + mBasis.v3.y = 0.0f; + mBasis.v3.z = 0.0f; + mBasis.v3.w = 1.0f; +} + +void Bezier::GetPoint(bVector3 *pPoint, float parameter) { + if (pControlPoints != nullptr) { + bVector4 v; + bVector4 basis; + float t = 1.0f - parameter; + float t2 = t * t; + + basis.x = t * t2; + basis.y = t2; + basis.z = t; + basis.w = 1.0f; + + bMulMatrix(&v, &mBasis, &basis); + bMulMatrix(reinterpret_cast(pPoint), pControlPoints, &v); + } +} + +RearViewMirrorCameraMover::RearViewMirrorCameraMover(int view_id, CameraAnchor *car) + : CameraMover(view_id, CM_REAR_VIEW_MIRROR), + pCar(car) { + if (Camera::StopUpdating == 0) { + GetCamera()->SetRenderDash(0); + } +} + +RearViewMirrorCameraMover::~RearViewMirrorCameraMover() {} + +void RearViewMirrorCameraMover::Update(float dT) { + if (*reinterpret_cast(reinterpret_cast(FEDatabase) + 0x5c) != 0) { + bMatrix4 identity; + bMatrix4 car_matrix; + bMatrix4 mirror_matrix; + bMatrix4 camera_matrix; + bVector3 eye; + + bIdentity(&identity); + eye.x = -pCar->GetGeomPos()->x; + eye.y = -pCar->GetGeomPos()->y; + eye.z = -pCar->GetGeomPos()->z; + PSMTX44Copy(*reinterpret_cast(pCar->GetMatrix()), *reinterpret_cast(&car_matrix)); + bTransposeMatrix(&mirror_matrix, &car_matrix); + eRotateX(&mirror_matrix, &mirror_matrix, 0x4000); + eRotateY(&mirror_matrix, &mirror_matrix, 0x4000); + eRotateZ(&mirror_matrix, &mirror_matrix, 0); + eMulMatrix(&camera_matrix, &identity, &mirror_matrix); + camera_matrix.v3.x += RVMOffsetInCar.x; + camera_matrix.v3.y += RVMOffsetInCar.y; + camera_matrix.v3.z += RVMOffsetInCar.z; + if (Camera::StopUpdating == 0) { + GetCamera()->SetFieldOfView(20000); + } + GetCamera()->SetNearZ(RVMnearz); + GetCamera()->SetFarZ(RVMfarz); + ApplyCameraShake(0, &camera_matrix); + GetCamera()->SetCameraMatrix(camera_matrix, dT); + } +} + +TrackCarCameraMover::TrackCarCameraMover(int nView, CameraAnchor *pCar, bool focus_effects) + : CameraMover(nView, CM_TRACK_CAR), + CarToFollow(pCar), + FocalDistCubic(1, 1.0f), + FocusEffects(focus_effects), + CameraType(0) { + Init(); +} + +void TrackCarCameraMover::Init() { + bVector3 offset; + + CameraType = 0; + Eye = *CarToFollow->GetGeomPos(); + Look = *CarToFollow->GetGeomPos(); + + Eye.z += TrackCarIsoZoomDistance[CameraType]; + offset.x = TrackCarLookOffsetX[CameraType]; + offset.y = TrackCarLookOffsetY[CameraType]; + offset.z = TrackCarLookOffsetZ[CameraType]; + eMulVector(&offset, CarToFollow->GetMatrix(), &offset); + + Look.x += offset.x; + Look.y += offset.y; + Look.z += offset.z; + FocalDistCubic.Val = 0.0f; + FocalDistCubic.ValDesired = 0.0f; + FocalDistCubic.dVal = 0.0f; + FocalDistCubic.dValDesired = 0.0f; + GetCamera()->ClearVelocity(); + + if (Camera::StopUpdating == 0) { + GetCamera()->SetTargetDistance(bDistBetween(&Eye, CarToFollow->GetGeomPos())); + } +} + +TrackCarCameraMover::~TrackCarCameraMover() { + GetCamera()->SetSimTimeMultiplier(1.0f); + if (Camera::StopUpdating == 0) { + GetCamera()->SetFocalDistance(0.0f); + } + if (Camera::StopUpdating == 0) { + GetCamera()->SetDepthOfField(0.0f); + } + GetCamera()->ClearVelocity(); +} + +void TrackCarCameraMover::Update(float dT) { + if (!TheGameFlowManager.IsPaused()) { + bVector3 world_up(0.0f, 0.0f, 1.0f); + bVector3 to_car; + bVector3 offset; + bMatrix4 camera_matrix; + float dist; + float inv_dist; + float focal_distance; + + GetCamera()->SetSimTimeMultiplier(1.0f); + + to_car.x = Eye.x - CarToFollow->GetGeomPos()->x; + to_car.y = Eye.y - CarToFollow->GetGeomPos()->y; + to_car.z = Eye.z - CarToFollow->GetGeomPos()->z; + dist = bLength(&to_car); + + if (dist > 0.0f) { + unsigned short fov = bATan(dist, TrackCarIsoZoomDistance[CameraType]); + unsigned int fov_limit = bMax(800, static_cast((fov & 0x7fff) << 1)); + + if (fov_limit > 0x332c) { + fov_limit = 0x332c; + } + if (Camera::StopUpdating == 0 && (fov & 0x7fff) != 0) { + GetCamera()->SetFieldOfView(static_cast(fov_limit)); + } + } + + Look = *CarToFollow->GetGeomPos(); + inv_dist = dist > 1.0f ? 1.0f / dist : 1.0f; + to_car.x *= inv_dist; + to_car.y *= inv_dist; + to_car.z *= inv_dist; + world_up = bCross(to_car, world_up); + + offset.x = TrackCarLookOffsetX[CameraType]; + offset.y = TrackCarLookOffsetY[CameraType]; + offset.z = TrackCarLookOffsetZ[CameraType]; + eMulVector(&offset, CarToFollow->GetMatrix(), &offset); + + Look.x += offset.x; + Look.y += offset.y; + Look.z += offset.z; + + eCreateLookAtMatrix(&camera_matrix, Eye, Look, world_up); + focal_distance = bDistBetween(CarToFollow->GetGeomPos(), &Eye); + if (Camera::StopUpdating == 0) { + GetCamera()->SetTargetDistance(focal_distance); + } + + FocalDistCubic.dVal = FocalDistCubic.Val * 0.1f; + SplineSeek(&FocalDistCubic, dT, 0.0f, 0.0f); + focal_distance = bMax(1.0f, focal_distance + FocalDistCubic.Val); + + if (FocusEffects) { + if (Camera::StopUpdating == 0) { + GetCamera()->SetFocalDistance(focal_distance + FocalDistCubic.Val); + } + if (Camera::StopUpdating == 0) { + GetCamera()->SetDepthOfField(2.0f); + } + } + + GetCamera()->SetCameraMatrix(camera_matrix, dT); + if (IsSomethingInBetween(GetCamera()->GetPosition(), CarToFollow->GetGeomPos())) { + CameraAI::MaybeKillJumpCam(CarToFollow->GetWorldID()); + } + } +} + +TrackCopCameraMover::TrackCopCameraMover(int nView, CameraAnchor *pCar, bool focus_effects) + : CameraMover(nView, CM_TRACK_COP), + CarToFollow(pCar), + FocalDistCubic(1, 1.0f), + FocusEffects(focus_effects), + bRenderCarPOV(true) { + ZoomSplineParam = 0.0f; + EyeSplineParam = 0.0f; + LookSplineParam = 0.0f; + Init(); +} + +TrackCopCameraMover::~TrackCopCameraMover() { + TrackCopCameraMover_IdleSim = false; + GetCamera()->SetSimTimeMultiplier(1.0f); + if (Camera::StopUpdating == 0) { + GetCamera()->SetFocalDistance(0.0f); + } + if (Camera::StopUpdating == 0) { + GetCamera()->SetDepthOfField(0.0f); + } + GetCamera()->ClearVelocity(); +} + +bool TrackCopCameraMover::FindPursuitVehiclePosition(bVector3 *pPosition) { + bool found = false; + float best_distance = 10000.0f; + const IVehicle::List &vehicles = IVehicle::GetList(VEHICLE_ALL); + + for (IVehicle::List::const_iterator iter = vehicles.begin(); iter != vehicles.end(); ++iter) { + IVehicle *vehicle = *iter; + + if (vehicle != nullptr && vehicle->GetVehicleClass() == VehicleClass::CAR) { + bVector3 render_position; + float distance; + + eSwizzleWorldVector(vehicle->GetPosition(), render_position); + if (IsSomethingInBetween(GetCamera()->GetPosition(), &render_position)) { + continue; + } + + distance = bDistBetween(CarToFollow->GetGeomPos(), &render_position); + if (distance < best_distance) { + *pPosition = render_position; + best_distance = distance; + found = true; + } + } + } + + return found; +} + +void TrackCopCameraMover::Init() { + bVector3 pursuit_position; + bVector3 eye = *GetCamera()->GetPosition(); + bVector3 look = *GetCamera()->GetTarget(); + float fov = static_cast(GetCamera()->GetFieldOfView()); + + TrackCopCameraMover_IdleSim = true; + HideEverySingleHud(); + bRenderCarPOV = true; + + ZoomVerts.v0.x = fov; + ZoomVerts.v0.y = 0.0f; + ZoomVerts.v0.z = 0.0f; + ZoomVerts.v0.w = 1.0f; + ZoomVerts.v1 = ZoomVerts.v0; + ZoomVerts.v2 = ZoomVerts.v0; + ZoomVerts.v3 = ZoomVerts.v0; + + EyeVerts.v0.x = eye.x; + EyeVerts.v0.y = eye.y; + EyeVerts.v0.z = eye.z; + EyeVerts.v0.w = 1.0f; + EyeVerts.v1 = EyeVerts.v0; + EyeVerts.v2 = EyeVerts.v0; + EyeVerts.v3 = EyeVerts.v0; + + LookVerts.v0.x = look.x; + LookVerts.v0.y = look.y; + LookVerts.v0.z = look.z; + LookVerts.v0.w = 1.0f; + LookVerts.v1 = LookVerts.v0; + LookVerts.v2 = LookVerts.v0; + LookVerts.v3 = LookVerts.v0; + + if (FindPursuitVehiclePosition(&pursuit_position)) { + bVector3 chase_eye = pursuit_position; + bVector3 chase_look = *CarToFollow->GetGeomPos(); + + chase_eye.z += 2.0f; + EyeVerts.v1.x = chase_eye.x; + EyeVerts.v1.y = chase_eye.y; + EyeVerts.v1.z = chase_eye.z; + EyeVerts.v2 = EyeVerts.v1; + EyeVerts.v3 = EyeVerts.v1; + + LookVerts.v1.x = chase_look.x; + LookVerts.v1.y = chase_look.y; + LookVerts.v1.z = chase_look.z; + LookVerts.v2 = LookVerts.v1; + LookVerts.v3 = LookVerts.v1; + + ZoomVerts.v1.x = fov; + ZoomVerts.v2.x = fov; + ZoomVerts.v3.x = fov; + bRenderCarPOV = false; + } else { + CameraAI::MaybeKillPursuitCam(CarToFollow->GetWorldID()); + } + + EyeSpline.SetControlPoints(&EyeVerts); + LookSpline.SetControlPoints(&LookVerts); + ZoomSpline.SetControlPoints(&ZoomVerts); + EyeSplineParam = 0.0f; + LookSplineParam = 0.0f; + ZoomSplineParam = 0.0f; + FocalDistCubic.Val = 0.0f; + FocalDistCubic.ValDesired = 0.0f; + FocalDistCubic.dVal = 0.0f; + FocalDistCubic.dValDesired = 0.0f; + + if (FocusEffects == 0 && Camera::StopUpdating == 0) { + GetCamera()->SetFocalDistance(0.0f); + GetCamera()->SetDepthOfField(0.0f); + } +} + +void TrackCopCameraMover::Update(float dT) { + if (FEManager::Get() == nullptr || !FEManager::ShouldPauseSimulation(true)) { + bVector3 world_up(0.0f, 0.0f, 1.0f); + bVector3 look; + bVector3 eye; + bVector3 offset; + bMatrix4 camera_matrix; + float focal_distance; + + EyeSplineParam += dT * 0.25f; + if (EyeSplineParam > 1.0f) { + EyeSplineParam = 1.0f; + } + EyeSpline.GetPoint(&eye, EyeSplineParam); + + LookSplineParam += dT * 0.25f; + if (LookSplineParam > 1.0f) { + LookSplineParam = 1.0f; + } + LookSpline.GetPoint(&look, LookSplineParam); + + ZoomSplineParam += dT * 0.25f; + if (ZoomSplineParam > 1.0f) { + ZoomSplineParam = 1.0f; + } + ZoomSpline.GetPoint(reinterpret_cast(&offset), ZoomSplineParam); + + if (Camera::StopUpdating == 0) { + GetCamera()->SetFieldOfView(static_cast(bDegToAng(offset.x))); + } + + offset.x = 0.0f; + offset.y = 0.0f; + offset.z = 0.0f; + eMulVector(&offset, CarToFollow->GetMatrix(), &offset); + look.x += offset.x; + look.y += offset.y; + look.z += offset.z; + + eCreateLookAtMatrix(&camera_matrix, eye, look, world_up); + focal_distance = bDistBetween(CarToFollow->GetGeomPos(), &eye); + if (Camera::StopUpdating == 0) { + GetCamera()->SetTargetDistance(focal_distance); + } + + FocalDistCubic.dVal = FocalDistCubic.Val * 0.1f; + SplineSeek(&FocalDistCubic, dT, 0.0f, 0.0f); + focal_distance = bMax(1.0f, focal_distance + FocalDistCubic.Val); + + if (FocusEffects) { + if (Camera::StopUpdating == 0) { + GetCamera()->SetFocalDistance(focal_distance + FocalDistCubic.Val); + } + if (Camera::StopUpdating == 0) { + GetCamera()->SetDepthOfField(2.0f); + } + } + + GetCamera()->SetCameraMatrix(camera_matrix, dT); + } +} + +CameraAnchor *RearViewMirrorCameraMover::GetAnchor() { + return pCar; +} + +CameraAnchor *TrackCarCameraMover::GetAnchor() { + return CarToFollow; +} + +bVector3 *TrackCarCameraMover::GetTarget() { + CameraAnchor *car = CarToFollow; + if (car != nullptr) { + return car->GetGeomPos(); + } + return GetCamera()->GetTarget(); +} + +CameraAnchor *TrackCopCameraMover::GetAnchor() { + return CarToFollow; +} + +bool TrackCopCameraMover::RenderCarPOV() { + return bRenderCarPOV; +} + +bVector3 *TrackCopCameraMover::GetTarget() { + CameraAnchor *car = CarToFollow; + if (car != nullptr) { + return car->GetGeomPos(); + } + return GetCamera()->GetTarget(); +} diff --git a/src/Speed/Indep/Src/Camera/CameraMover.hpp b/src/Speed/Indep/Src/Camera/CameraMover.hpp index e2ef17946..44321dd8d 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.hpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.hpp @@ -8,12 +8,131 @@ #include "./Camera.hpp" #include "Speed/Indep/Src/Generated/AttribSys/Classes/camerainfo.h" #include "Speed/Indep/Src/Generated/AttribSys/Classes/ecar.h" +#include "Speed/Indep/Src/Misc/Timer.hpp" #include "Speed/Indep/Src/Sim/SimSurface.h" #include "Speed/Indep/Src/World/WCollisionMgr.h" #include "Speed/Indep/Src/World/WWorldPos.h" #include "Speed/Indep/bWare/Inc/bList.hpp" class eView; +class tCubic3D; +template class tAverage; + +struct tCubic1D { + float Val; // offset 0x0, size 0x4 + float dVal; // offset 0x4, size 0x4 + float ValDesired; // offset 0x8, size 0x4 + float dValDesired; // offset 0xC, size 0x4 + float Coeff[4]; // offset 0x10, size 0x10 + float time; // offset 0x20, size 0x4 + float duration; // offset 0x24, size 0x4 + short state; // offset 0x28, size 0x2 + short flags; // offset 0x2A, size 0x2 + + tCubic1D(short type, float dur) + : Val(0.0f), // + dVal(0.0f), // + ValDesired(0.0f), // + dValDesired(0.0f), // + time(0.0f), // + duration(dur), // + state(0), // + flags(type) { + Coeff[0] = 0.0f; + Coeff[1] = 0.0f; + Coeff[2] = 0.0f; + Coeff[3] = 0.0f; + } + + void SetVal(const float v) { + Val = v; + if (v != ValDesired) { + state = 2; + } + } + + void SetdVal(float v) { + dVal = v; + if (v != dValDesired) { + state = 2; + } + } + + void SetValDesired(float v) { + ValDesired = v; + if (v != Val) { + state = 2; + } + } + + void SetDuration(const float t) { + duration = t; + } + + void SetFlags(short f) { + flags = f; + } + + void Snap() { + Val = ValDesired; + dVal = dValDesired; + state = 0; + } +}; + +struct tCubic3D { + tCubic1D x; // offset 0x0, size 0x2C + tCubic1D y; // offset 0x2C, size 0x2C + tCubic1D z; // offset 0x58, size 0x2C + + tCubic3D(short type, float dur) + : x(type, dur), // + y(type, dur), // + z(type, dur) {} + + tCubic3D(short type, bVector3 *pDuration) + : x(type, pDuration->x), // + y(type, pDuration->y), // + z(type, pDuration->z) {} + + void SetVal(const bVector3 *pV); + void SetdVal(bVector3 *pV); + void SetValDesired(const bVector3 *pV) { + x.SetValDesired(pV->x); + y.SetValDesired(pV->y); + z.SetValDesired(pV->z); + } + + void GetVal(bVector3 *pV) { + pV->x = x.Val; + pV->y = y.Val; + pV->z = z.Val; + } + + void GetValDesired(bVector3 *pV) { + pV->x = x.ValDesired; + pV->y = y.ValDesired; + pV->z = z.ValDesired; + } + + void Snap() { + x.Snap(); + y.Snap(); + z.Snap(); + } +}; + +struct Bezier { + bMatrix4 *pControlPoints; // offset 0x0, size 0x4 + bMatrix4 mBasis; // offset 0x4, size 0x40 + + Bezier(); + void GetPoint(bVector3 *pPoint, float parameter); + + void SetControlPoints(bMatrix4 *pPoints) { + pControlPoints = pPoints; + } +}; enum CameraMoverTypes { CM_NONE_TYPE = 0, @@ -40,10 +159,61 @@ enum CameraMoverTypes { // total size: 0x124 class CameraAnchor { public: + CameraAnchor(int model); + ~CameraAnchor(); + + bVector3 *GetGeomPos() { + return &mGeomPos; + } + + const bVector3 *GetVelocity() const { + return &mVelocity; + } + + const bVector3 *GetAccel() const { + return &mAccel; + } + + bMatrix4 *GetMatrix() { + return &mGeomRot; + } + + float GetVelMag() const { + return mVelMag; + } + + float GetTopSpeed() const { + return mTopSpeed; + } + + const SimSurface &GetSurface() const { + return mSurface; + } + + bool IsNosEngaged() const { + return mIsNosEngaged; + } + + bool IsBrakeEngaged() const { + return mIsBrakeEngaged; + } + + bool IsDragRace() const { + return mIsDragRace; + } + + bool IsOverRev() const { + return mIsOverRev; + } + unsigned int GetWorldID() const { return mWorldID; } + void Update(float dT, const bMatrix4 &matrix, const bVector3 &velocity, const bVector3 &forward); + void SetModel(int model); + POV *GetPov(int pov_type); + private: bVector3 mVelocity; // offset 0x0, size 0x10 float mVelMag; // offset 0x10, size 0x4 @@ -77,6 +247,7 @@ class CameraAnchor { class CameraMover : public bTNode, public WCollisionMgr::ICollisionHandler { public: CameraMover(); + CameraMover(int view_id, CameraMoverTypes type); CameraMoverTypes GetType() { return Type; @@ -86,13 +257,17 @@ class CameraMover : public bTNode, public WCollisionMgr::ICollision return pCamera->GetPosition(); } + Camera *GetCamera() { + return pCamera; + } + // Virtual methods virtual ~CameraMover(); virtual void Update(float dT); virtual void Render(eView *view); - virtual CameraAnchor *GetAnchor() {} + virtual CameraAnchor *GetAnchor(); virtual void SetLookBack(bool b) {} @@ -102,15 +277,15 @@ class CameraMover : public bTNode, public WCollisionMgr::ICollision virtual void SetPovType(int pov_type) {} - virtual bool OutsidePOV() {} + virtual bool OutsidePOV(); - virtual bool RenderCarPOV() {} + virtual bool RenderCarPOV(); - virtual float MinDistToWall() {} + virtual float MinDistToWall(); - virtual unsigned short GetLookbackAngle() {} + virtual unsigned short GetLookbackAngle(); - virtual void ResetState() {} + virtual void ResetState(); // ICollisionHandler bool OnWCollide(const WCollisionMgr::WorldCollisionInfo &cInfo, const UMath::Vector3 &cPoint, void *userdata) override; @@ -118,6 +293,26 @@ class CameraMover : public bTNode, public WCollisionMgr::ICollision virtual void Enable(); virtual void Disable(); + virtual bVector3 *GetTarget(); + + bool IsSomethingInBetween(const UMath::Vector4 &start, const UMath::Vector4 &end); + bool IsSomethingInBetween(const bVector3 *start, const bVector3 *end); + void HandheldNoise(bMatrix4 *world_to_camera, float f_scale, bool useWorldTimer); + void ChopperNoise(bMatrix4 *world_to_camera, float f_scale, bool useWorldTimer); + void TerrainVelocityNoise(bMatrix4 *world_to_camera, CameraAnchor *car, float speed_scale, float terrain_scale); + static void ComputeBankedUpVector(bVector3 *up, bVector3 *eye, bVector3 *look, unsigned short bank); + void IsoProjectionMatrix(bMatrix4 *pMatrix, bVector3 *pEye, bVector3 *pLook, bVector2 *pProjection); + double AdjustHeightAroundCar(const bVector3 *car_pos, bVector3 *pEye, bVector3 *pForward); + int MinGapCars(bMatrix4 *pMatrix, bVector3 *pLook, bVector3 *pForward); + int MinGapTopology(bMatrix4 *pMatrix, bVector3 *pLook); + void FovCubicInit(tCubic1D *cubic); + void EyeCubicInit(tCubic3D *eye, bMatrix4 *matrix, bVector3 *target); + void LookCubicInit(tCubic3D *look, bMatrix4 *matrix, bVector3 *target); + void SetEyeLook(tCubic3D *eye, tCubic3D *look, tCubic1D *fov, bMatrix4 *matrix, bVector3 *target); + + unsigned int GetAnchorID(); + int IsHoodCamera(); + private: CameraMoverTypes Type; // offset 0xC, size 0x4 int ViewID; // offset 0x10, size 0x4 @@ -135,4 +330,113 @@ class CameraMover : public bTNode, public WCollisionMgr::ICollision void CameraMoverRestartRace(); +class CubicCameraMover : public CameraMover { + public: + CubicCameraMover(int nView, CameraAnchor *pCar, int pov_type, bool disable_lag, bool look_back, bool perfect_focus, bool snap_next); + virtual ~CubicCameraMover(); + + virtual void Update(float dT); + virtual CameraAnchor *GetAnchor(); + virtual void SetLookBack(bool b); + virtual void SetDisableLag(bool disable); + virtual void SetPovType(int pov_type); + virtual bool OutsidePOV(); + virtual bool RenderCarPOV(); + virtual float MinDistToWall(); + virtual unsigned short GetLookbackAngle(); + virtual void ResetState(); + + int IsHoodCamera(); + bool HighliteMode(); + void SetSnapNext(); + void SetForward(POV *pov, bool snap); + void MakeSpace(bMatrix4 *pMatrix); + void CameraAccelCurve(bVector3 *pAccel); + void CameraSpeedHug(bVector3 *pForward); + + private: + CameraAnchor *pCar; // offset 0x80, size 0x4 + tCubic1D *pFov; // offset 0x84, size 0x4 + tCubic3D *pEye; // offset 0x88, size 0x4 + tCubic3D *pLook; // offset 0x8C, size 0x4 + tCubic3D *pForward; // offset 0x90, size 0x4 + tCubic3D *pUp; // offset 0x94, size 0x4 + int nPovType; // offset 0x98, size 0x4 + int nPovTypeUsed; // offset 0x9C, size 0x4 + int bAccelLag; // offset 0xA0, size 0x4 + int bLookBack; // offset 0xA4, size 0x4 + int bSnapNext; // offset 0xA8, size 0x4 + int bPerfectFocus; // offset 0xAC, size 0x4 + int bFirstTime; // offset 0xB0, size 0x4 + Timer tLastGrounded; // offset 0xB4, size 0x4 + Timer tLastUnderVehicle; // offset 0xB8, size 0x4 + Timer tLastGearChange; // offset 0xBC, size 0x4 + float fIgnoreSetSnapNextTimer; // offset 0xC0, size 0x4 + bVector3 vSavedEye; // offset 0xC4, size 0x10 + bVector2 vCameraImpcat; // offset 0xD4, size 0x8 + bVector2 vCameraImpcatTimer; // offset 0xDC, size 0x8 + tAverage *pAvgAccel; // offset 0xE4, size 0x4 +}; + +class RearViewMirrorCameraMover : public CameraMover { + public: + RearViewMirrorCameraMover(int view_id, CameraAnchor *car); + virtual ~RearViewMirrorCameraMover(); + + virtual void Update(float dT); + virtual CameraAnchor *GetAnchor(); + + private: + CameraAnchor *pCar; // offset 0x80, size 0x4 +}; + +class TrackCarCameraMover : public CameraMover { + public: + TrackCarCameraMover(int nView, CameraAnchor *pCar, bool focus_effects); + virtual ~TrackCarCameraMover(); + + virtual void Update(float dT); + virtual CameraAnchor *GetAnchor(); + virtual bVector3 *GetTarget(); + + private: + bVector3 Eye; // offset 0x80, size 0x10 + bVector3 Look; // offset 0x90, size 0x10 + CameraAnchor *CarToFollow; // offset 0xA0, size 0x4 + tCubic1D FocalDistCubic; // offset 0xA4, size 0x2C + int FocusEffects; // offset 0xD0, size 0x4 + int CameraType; // offset 0xD4, size 0x4 + + void Init(); +}; + +class TrackCopCameraMover : public CameraMover { + public: + TrackCopCameraMover(int nView, CameraAnchor *pCar, bool focus_effects); + virtual ~TrackCopCameraMover(); + + virtual void Update(float dT); + virtual CameraAnchor *GetAnchor(); + virtual bool RenderCarPOV(); + virtual bVector3 *GetTarget(); + + private: + Bezier ZoomSpline; // offset 0x80, size 0x44 + bMatrix4 ZoomVerts; // offset 0xC4, size 0x40 + float ZoomSplineParam; // offset 0x104, size 0x4 + Bezier EyeSpline; // offset 0x108, size 0x44 + bMatrix4 EyeVerts; // offset 0x14C, size 0x40 + float EyeSplineParam; // offset 0x18C, size 0x4 + Bezier LookSpline; // offset 0x190, size 0x44 + bMatrix4 LookVerts; // offset 0x1D4, size 0x40 + float LookSplineParam; // offset 0x214, size 0x4 + CameraAnchor *CarToFollow; // offset 0x218, size 0x4 + tCubic1D FocalDistCubic; // offset 0x21C, size 0x2C + int FocusEffects; // offset 0x248, size 0x4 + bool bRenderCarPOV; // offset 0x24C, size 0x4 + + bool FindPursuitVehiclePosition(bVector3 *pPosition); + void Init(); +}; + #endif diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEData.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEData.cpp index e69de29bb..d28a52061 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEData.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEData.cpp @@ -0,0 +1,51 @@ +#include "ICEManager.hpp" +#include "Speed/Indep/bWare/Inc/bWare.hpp" + +bool bMirrorICEData; + +void ICEData::PlatEndianSwap() { + bPlatEndianSwap(&fParameter); + bPlatEndianSwap(&nShakeType); + + for (int i = 0; i < 2; i++) { + bPlatEndianSwap(&fTangentLength[i]); + + for (int j = 0; j < 3; j++) { + bPlatEndianSwap(&vEye[i][j]); + bPlatEndianSwap(&vLook[i][j]); + } + + bPlatEndianSwap(&fDutch[i]); + bPlatEndianSwap(&fLens[i]); + bPlatEndianSwap(&fNearClip[i]); + bPlatEndianSwap(&fNoiseAmplitude[i]); + bPlatEndianSwap(&fFocalDistance[i]); + bPlatEndianSwap(&fNoiseFrequency[i]); + } +} + +void ICEData::GetEye(int i, ICE::Vector3 *p) { + p->x = vEye[i][0]; + p->y = vEye[i][1]; + p->z = vEye[i][2]; + + if (bMirrorICEData) { + p->y = -p->y; + } + if (nSpaceEye == 3) { + TheICEManager.FixAnimElevation(p); + } +} + +void ICEData::GetLook(int i, ICE::Vector3 *p) { + p->x = vLook[i][0]; + p->y = vLook[i][1]; + p->z = vLook[i][2]; + + if (bMirrorICEData) { + p->y = -p->y; + } + if (nSpaceLook == 3) { + TheICEManager.FixAnimElevation(p); + } +} diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEData.hpp b/src/Speed/Indep/Src/Camera/ICE/ICEData.hpp index 9504cfaeb..8db5e14df 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEData.hpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEData.hpp @@ -9,7 +9,10 @@ // total size: 0x84 struct ICEData { + void InitData(); + void PlatEndianSwap(); void GetEye(int i, ICE::Vector3 *p); + void GetLook(int i, ICE::Vector3 *p); unsigned char nType; // offset 0x0, size 0x1 unsigned char bSmooth; // offset 0x1, size 0x1 @@ -35,6 +38,7 @@ struct ICEData { float fFocalDistance[2]; // offset 0x74, size 0x8 unsigned char fAperture[2]; // offset 0x7C, size 0x2 unsigned char fLetterbox[2]; // offset 0x7E, size 0x2 + unsigned char fSimSpeed[2]; // offset 0x80, size 0x2 }; #endif diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp index e69de29bb..a6cf47c3d 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp @@ -0,0 +1,434 @@ +#include "ICEManager.hpp" +#include "ICEAnimScene.hpp" +#include "ICEReplay.hpp" +#include "Speed/Indep/Src/Animation/AnimDirectory.hpp" +#include "Speed/Indep/Src/Interfaces/SimActivities/INIS.h" +#include "Speed/Indep/Src/Misc/Timer.hpp" +#include "Speed/Indep/bWare/Inc/Strings.hpp" +#include "Speed/Indep/bWare/Inc/bWare.hpp" + +extern Timer RealTimer; +extern AnimDirectory *TheAnimDirectory; + +struct ICEAnchor; +ICEAnchor *GetICEAnchor(); + +namespace ICEReplay { +ICETrack *ChooseGoodCamera(ICEAnchor *p_car, ICEGroup *p_replay_cameras, int num_replay_cameras); +} + +namespace ICE { +ICEScene *FindAnimScene(); +unsigned int GetSceneCount(); +} + +ICEManager TheICEManager; + +void ICEGroup::FlushAllocatedTracks() { + ICETrack *track = TrackList.GetHead(); + + while (track != TrackList.EndOfList()) { + ICETrack *next = track->GetNext(); + + if (track->Allocated != 0) { + TrackList.Remove(track); + delete track; + NumTracks--; + } + + track = next; + } +} + +ICETrack *ICEGroup::GetTrack(int n) { + ICETrack *track = TrackList.GetNode(n); + + if (track == TrackList.EndOfList()) { + track = 0; + } + + return track; +} + +ICETrack *ICEGroup::GetTrack(char *s) { + ICETrack *track = TrackList.GetHead(); + + while (track != TrackList.EndOfList()) { + if (bStrCmp(s, track->Name) == 0) { + return track; + } + + track = track->GetNext(); + } + + return 0; +} + +void ICEShakeGroup::FlushAllocatedTracks() { + ICEShakeTrack *track = TrackList.GetHead(); + + while (track != TrackList.EndOfList()) { + ICEShakeTrack *next = track->GetNext(); + + if (track->Allocated != 0) { + TrackList.Remove(track); + delete track; + NumTracks--; + } + + track = next; + } +} + +ICEShakeTrack *ICEShakeGroup::GetTrack(int n) { + ICEShakeTrack *track = TrackList.GetNode(n); + + if (track == TrackList.EndOfList()) { + track = 0; + } + + return track; +} + +void ICETrack::PlatEndianSwap() { + bPlatEndianSwap(&Start); + bPlatEndianSwap(&Length); + bPlatEndianSwap(&NumKeys); + + for (int i = 0; i < NumKeys; i++) { + Keys[i].PlatEndianSwap(); + } +} + +int ICETrack::GetContext() { + if (Group == 0) { + return 4; + } + + return Group->Context; +} + +int ICETrack::GetKeyNumber(float f_param) { + int i = NumKeys - 1; + float *parameters = &Keys[0].fParameter; + + if (i < 1) { + return i; + } + if (!(f_param < parameters[i * 33])) { + return i; + } + + do { + i--; + + if (i < 1) { + return i; + } + } while (parameters[i * 33] > f_param); + + return i; +} + +float ICETrack::GetParameter() { + float parameter = 0.0f; + int context = GetContext(); + + if (context == 0) { + ICEScene *scene = ICE::FindAnimScene(); + + if (scene != 0) { + parameter = (scene->GetTimeElapsed() - scene->GetTimeStart()) / (scene->GetTimeTotalLength() - scene->GetTimeStart()); + } + } else if (context == 1 || context == 2 || context == 3) { + if (0.0f < Length) { + parameter = (TheICEManager.GetTimerSeconds() - Start) / Length; + + if (1.0f < parameter) { + parameter = 1.0f; + } + } + } + + return parameter; +} + +ICEData *ICETrack::GetCameraData(float *p_start, float *p_end, float *p_current) { + float current = GetParameter(); + + if (current < 0.0f || 1.0f < current) { + return 0; + } + + int i = GetKeyNumber(current); + + if (p_current != 0) { + *p_current = current; + } + if (p_start != 0) { + float start = 0.0f; + + if (i > -1 && i < NumKeys) { + start = Keys[i].fParameter; + } + + *p_start = start; + } + if (p_end != 0) { + int next = i + 1; + float end = 1.0f; + + if (next > -1 && next < NumKeys) { + end = Keys[next].fParameter; + } + + *p_end = end; + } + + int clamped = i; + + if (clamped < 0) { + clamped = 0; + } + + int max = NumKeys - 1; + + if (max < clamped) { + clamped = max; + } + + if (i == clamped) { + return &Keys[i]; + } + + return 0; +} + +void ICEShakeData::PlatEndianSwap() { + for (int i = 0; i < 3; i++) { + bPlatEndianSwap(&q[i]); + bPlatEndianSwap(&p[i]); + } +} + +void ICEShakeTrack::PlatEndianSwap() { + bPlatEndianSwap(&NumKeys); + + for (int i = 0; i < NumKeys; i++) { + Keys[i].PlatEndianSwap(); + } +} + +ICEManager::ICEManager() { + pNisCameras = 0; + pFmvCameras = 0; + pReplayCameras = 0; + pGenericCameras = 0; + pShakeGroup = 0; + nNisCameras = 0; + nFmvCameras = 0; + nReplayCameras = 0; + nGenericCameras = 0; + pPlaybackTrack = 0; + nState = 0; + nTrack = 0; + nHandle = 0; + nOption = 0; + nSetting = 0; + nExitConfirmOption = 0; + nDeleteConfirmOption = 0; + nContext = 3; + nCopyMode = 0; + nSceneHash = 0; + fAnimElevation = 0.0f; + fParameterStart = 0.0f; + fParameterLength = 0.0f; + fParameterLengthBackup = 0.0f; + nPlayGenericGroupHash = 0; + bSmoothExit = false; + nMarkerIndex = -1; + bUseRealTime = false; + ICEReplay::ClearRecentlyUsed(); +} + +float ICEManager::GetTimerSeconds() { + int packed_time; + + if (!bUseRealTime) { + packed_time = WorldTimer.GetPackedTime(); + } else { + packed_time = RealTimer.GetPackedTime(); + } + + return packed_time / 4000.0f; +} + +bool ICEManager::RefreshCameraSplines() { + return false; +} + +void ICEManager::Update() {} + +ICEGroup *ICEManager::GetNisCameraGroup(unsigned int scene_hash) { + for (int i = 0; i < nNisCameras; i++) { + if (scene_hash == pNisCameras[i].Handle) { + return &pNisCameras[i]; + } + } + + return 0; +} + +ICEGroup *ICEManager::GetFmvCameraGroup(unsigned int scene_hash) { + for (int i = 0; i < nFmvCameras; i++) { + if (scene_hash == pFmvCameras[i].Handle) { + return &pFmvCameras[i]; + } + } + + return 0; +} + +ICEGroup *ICEManager::GetReplayCameraGroup(unsigned int category_hash) { + for (int i = 0; i < nReplayCameras; i++) { + if (category_hash == pReplayCameras[i].Handle) { + return &pReplayCameras[i]; + } + } + + return 0; +} + +ICEGroup *ICEManager::GetGenericCameraGroup(unsigned int name_hash) { + for (int i = 0; i < nGenericCameras; i++) { + if (name_hash == pGenericCameras[i].Handle) { + return &pGenericCameras[i]; + } + } + + return 0; +} + +ICEShakeTrack *ICEManager::GetShakeTrack(unsigned int shake_type) { + if (shake_type != 0 && pShakeGroup != 0) { + for (int i = 0; i < pShakeGroup->NumTracks; i++) { + ICEShakeTrack *track = pShakeGroup->GetTrack(i); + + if (track != 0 && bStringHash(track->Name) == shake_type) { + return track; + } + } + } + + return 0; +} + +int ICEManager::GetCameraIndex(float f_param, ICETrack *track) { + int camera_index = 0; + + if (track != 0) { + camera_index = track->GetKeyNumber(f_param); + } + + return camera_index; +} + +float ICEManager::GetParameter() { + float parameter = 0.0f; + ICEScene *scene = ICE::FindAnimScene(); + + if (scene != 0 && 0.0f < fParameterLength) { + parameter = (scene->GetTimeElapsed() - fParameterStart) / fParameterLength; + } + + return parameter; +} + +float ICEManager::GetParameter(int i, ICETrack *track) { + if (track != 0 && i > -1) { + if (track->NumKeys <= i) { + return 1.0f; + } + + return track->Keys[i].fParameter; + } + + return 0.0f; +} + +float ICEManager::GetIntervalSize(ICEData *data, ICETrack *track) { + int i = 0; + + if (track != 0) { + i = data - track->Keys; + } + + return GetParameter(i + 1, track) - GetParameter(i, track); +} + +ICETrack *ICEManager::ChooseGenericCamera() { + ICETrack *track = 0; + ICEGroup *group = GetGenericCameraGroup(nPlayGenericGroupHash); + + if (group != 0) { + track = group->GetTrack(nPlayGenericTrackName); + + if (track != 0) { + track->Start = GetTimerSeconds(); + } + } + + return track; +} + +int ICEManager::GetNumSceneCameraTrack(unsigned int scene_hash) { + ICEGroup *group = GetNisCameraGroup(scene_hash); + int available_tracks = 0; + + if (group != 0) { + available_tracks = group->NumTracks; + } + + return available_tracks; +} + +void ICEManager::ChooseReplayCamera() { + float parameter = 0.0f; + + if (pPlaybackTrack != 0) { + parameter = (GetTimerSeconds() - pPlaybackTrack->Start) / pPlaybackTrack->Length; + } + + if (0.0f <= parameter) { + ICETrack *track = ICEReplay::ChooseGoodCamera(GetICEAnchor(), pReplayCameras, nReplayCameras); + + if (track != 0) { + pPlaybackTrack = track; + pPlaybackTrack->Start = GetTimerSeconds(); + } + } +} + +namespace ICE { + +ICEScene *FindAnimScene() { + INIS *nis = INIS::Get(); + + if (nis != 0) { + return nis->GetScene(); + } + + return 0; +} + +unsigned int GetSceneCount() { + AnimDirectory *directory = TheAnimDirectory; + + if (directory == 0) { + return 0; + } + + return directory->GetSceneCount(); +} + +} // namespace ICE diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp index db8ce5c52..269db9599 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp @@ -10,6 +10,10 @@ struct ICEGroup { // total size: 0x14 + void FlushAllocatedTracks(); + struct ICETrack *GetTrack(int n); + struct ICETrack *GetTrack(char *s); + unsigned int Handle; // offset 0x0, size 0x4 int Context; // offset 0x4, size 0x4 int NumTracks; // offset 0x8, size 0x4 @@ -18,6 +22,12 @@ struct ICEGroup { // total size: 0x19F0 struct ICETrack : public bTNode { + void PlatEndianSwap(); + int GetContext(); + int GetKeyNumber(float f_param); + float GetParameter(); + struct ICEData *GetCameraData(float *p_start, float *p_end, float *p_current); + ICEGroup *Group; // offset 0x8, size 0x4 float Start; // offset 0xC, size 0x4 float Length; // offset 0x10, size 0x4 @@ -29,18 +39,26 @@ struct ICETrack : public bTNode { // total size: 0xC struct ICEShakeGroup { + void FlushAllocatedTracks(); + struct ICEShakeTrack *GetTrack(int n); + int NumTracks; // offset 0x0, size 0x4 struct bTList TrackList; // offset 0x4, size 0x8 }; // total size: 0x18 struct ICEShakeData { + void InitData(); + void PlatEndianSwap(); + float q[3]; // offset 0x0, size 0xC float p[3]; // offset 0xC, size 0xC }; // total size: 0xB60 struct ICEShakeTrack : public bTNode { + void PlatEndianSwap(); + ICEShakeGroup *Group; // offset 0x8, size 0x4 short NumKeys; // offset 0xC, size 0x2 char Allocated; // offset 0xE, size 0x1 @@ -51,16 +69,36 @@ struct ICEShakeTrack : public bTNode { // total size: 0x80 class ICEManager { public: + ICEManager(); + void Init(); void Resolve(); ICEData *GetCameraData(unsigned int scene_hash, int camTrack); + ICEShakeTrack *GetShakeTrack(unsigned int shake_type); + int GetCameraIndex(float f_param, ICETrack *track); + float GetParameter(); + float GetTimerSeconds(); + bool RefreshCameraSplines(); + void Update(); + int GetNumSceneCameraTrack(unsigned int scene_hash); + void ChooseReplayCamera(); bool IsEditorOn() { // TODO maybe negated? return nState >= 1; } + void FixAnimElevation(ICE::Vector3 *position); + private: + float GetParameter(int i, ICETrack *track); + float GetIntervalSize(ICEData *data, ICETrack *track); + ICETrack *ChooseGenericCamera(); + ICEGroup *GetNisCameraGroup(unsigned int scene_hash); + ICEGroup *GetFmvCameraGroup(unsigned int scene_hash); + ICEGroup *GetReplayCameraGroup(unsigned int category_hash); + ICEGroup *GetGenericCameraGroup(unsigned int name_hash); + ICEGroup *pNisCameras; // offset 0x0, size 0x4 ICEGroup *pFmvCameras; // offset 0x4, size 0x4 ICEGroup *pReplayCameras; // offset 0x8, size 0x4 diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index e69de29bb..6e274af2e 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -0,0 +1,358 @@ +#include "ICEMover.hpp" +#include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" + +unsigned short ConvertLensLengthToFovAngle(float f_lens_mm) { + return (bATan(f_lens_mm, 15.96f) & 0x7FFF) << 1; +} + +float ConvertFovAngleToLensLength(unsigned short a_fov) { + unsigned short half_angle = a_fov >> 1; + float tangent = bSin(half_angle) / bCos(half_angle); + + if (tangent <= 0.0f) { + tangent = 0.0001f; + } + + return 15.96f / tangent; +} + +float ConvertLensDeltaToFovDelta(float f_lens_mm, float f_lens_slope) { + short a_fov = bATan(f_lens_mm, 15.96f) << 1; + short a_fov_desired = bATan(f_lens_mm + f_lens_slope * 0.01f, 15.96f) << 1; + return static_cast(a_fov_desired - a_fov) * 100.0f; +} + +float ConvertApertureNumberToFStop(float aperture) { + static const float kFStops[] = { + 1.0f, + 1.1224620f, + 1.2599211f, + 1.4142135f, + 1.5874010f, + 1.7817974f, + 2.0f, + 2.2449241f, + 2.5198421f, + 2.8284271f, + 3.1748021f, + 3.5635948f, + 4.0f, + 4.4898481f, + 5.0396843f, + 5.6568542f, + 6.3496041f, + 7.1271896f, + 8.0f, + 8.9796963f, + 10.079369f, + 11.313708f, + 12.699208f, + 14.254379f, + 16.0f, + 17.959393f, + 20.158737f, + 22.627417f, + 25.398417f, + 28.508759f, + 32.0f, + 35.918785f, + 40.317474f, + 45.254833f, + 50.796833f, + 57.017517f, + 64.0f, + }; + int index = static_cast(aperture + 0.5f); + + if (index < 0) { + index = 0; + } + if (index > 36) { + index = 36; + } + + return kFStops[index]; +} + +ICEAnchor::ICEAnchor() + : mGeomPos(), // + mGeomRot(), // + mVelocity(), // + mAccel(), // + mVelMag(0.0f), // + mTopSpeed(0.0f), // + mRPM(0.0f), // + mNumWheels(false), // + mForwardSlip(0.0f), // + mSlipAngle(0.0f), // + mIsTouchingGround(true), // + mIsNosEngaged(false), // + mNosPercentageLeft(0.0f) { + PSMTX44Identity(*reinterpret_cast(&mGeomRot)); +} + +void ICEAnchor::Update(float dT, const ICE::Matrix4 &orientpos, const ICE::Vector3 &velocity, const ICE::Vector3 &) { + float previous_mag = mVelMag; + float dist = bDistBetween(reinterpret_cast(&mGeomPos), reinterpret_cast(&orientpos.v3)); + + PSMTX44Copy(*reinterpret_cast(&orientpos), *reinterpret_cast(&mGeomRot)); + mGeomRot.v3.x = 0.0f; + mGeomRot.v3.y = 0.0f; + mGeomRot.v3.z = 0.0f; + mGeomPos.x = orientpos.v3.x; + mGeomPos.y = orientpos.v3.y; + mGeomPos.z = orientpos.v3.z; + mVelocity = velocity; + + { + float vel_squared = velocity.x * velocity.x + velocity.y * velocity.y + velocity.z * velocity.z; + + if (5.0e-11f < vel_squared) { + float inv_mag = 1.0f / bSqrt(vel_squared); + inv_mag += -(vel_squared * inv_mag * inv_mag - 1.0f) * inv_mag * 0.5f; + mVelMag = (-(vel_squared * inv_mag * inv_mag - 1.0f) * inv_mag * 0.5f + inv_mag) * vel_squared; + } else { + mVelMag = 0.0f; + } + } + + if (dT <= 0.0f || 300.0f <= dist / dT) { + mAccel.x = 0.0f; + mAccel.y = 0.0f; + mAccel.z = 0.0f; + mAccel.pad = 0.0f; + } else { + ICE::Vector3 accel; + + accel.x = (mVelMag - previous_mag) / dT; + accel.y = 0.0f; + accel.z = 0.0f; + accel.pad = 0.0f; + bMulMatrix(reinterpret_cast(&mAccel), reinterpret_cast(&mGeomRot), reinterpret_cast(&accel)); + } +} + +namespace ICE { + +void Cubic1D::MakeCoeffs() { + float delta = ValDesired - Val; + + Coeff[2] = dVal; + Coeff[3] = Val; + Coeff[0] = (dVal + dValDesired) - (delta + delta); + Coeff[1] = (delta * 3.0f - dValDesired) - (dVal + dVal); +} + +float Cubic1D::GetVal(float t) const { + return ((Coeff[0] * t + Coeff[1]) * t + Coeff[2]) * t + Coeff[3]; +} + +float Cubic1D::GetdVal(float t) const { + float value = Coeff[0] * (t * 3.0f) + Coeff[1]; + return (value + Coeff[1]) * t + Coeff[2]; +} + +float Cubic1D::GetddVal(float t) const { + float value = Coeff[0] * (t * 6.0f) + Coeff[1]; + return value + Coeff[1]; +} + +float Cubic1D::GetValDesired() const { + return ValDesired; +} + +float Cubic1D::GetDerivative(float t) const { + float scale = 1.0f / duration; + return GetdVal(t * scale) * scale; +} + +float Cubic1D::GetSecondDerivative(float t) const { + float scale = 1.0f / duration; + return GetddVal(t * scale) * (scale * scale); +} + +void Cubic1D::ClampDerivative(float fMag) { + float deriv = GetDerivative(duration); + float deriv_abs = bAbs(deriv); + + if (deriv_abs > fMag) { + dValDesired = (deriv_abs / deriv) * fMag * duration; + } +} + +void Cubic1D::ClampSecondDerivative(float fMag) { + float acc0 = GetSecondDerivative(0.0f); + float acc0_abs = bAbs(acc0); + float acc1 = GetSecondDerivative(duration); + float acc1_abs = bAbs(acc1); + bool need_fix = false; + + if (acc0_abs > fMag) { + acc0 = (acc0_abs / acc0) * fMag; + need_fix = true; + } + if (acc1_abs > fMag) { + acc1 = (acc1_abs / acc1) * fMag; + need_fix = true; + } + if (need_fix) { + float duration_squared = duration * duration; + float start = acc0 * duration_squared; + + Coeff[0] = (acc1 * duration_squared - start) * (1.0f / 6.0f); + Coeff[1] = start * 0.5f; + } +} + +void Cubic1D::Update(float fSeconds, float fDClamp, float fDDClamp) { + if (state == 2) { + time = 0.0f; + + if (flags == 0) { + state = 1; + } + if (0.0f < fDClamp) { + ClampDerivative(fDClamp); + } + + MakeCoeffs(); + + if (0.0f < fDDClamp) { + ClampSecondDerivative(fDDClamp); + } + } + + if (state == 1 || state == 2) { + float t = 1.0f; + + if (0.0f < duration) { + t = time + fSeconds / duration; + } + + time = t; + + if (1.0f < time) { + time = 1.0f; + Snap(); + } + + Val = GetVal(time); + dVal = GetdVal(time); + } +} + +void Cubic3D::SetVal(const Vector3 *pV) { + x.SetVal(pV->x); + y.SetVal(pV->y); + z.SetVal(pV->z); +} + +void Cubic3D::SetdVal(const Vector3 *pV) { + x.SetdVal(pV->x); + y.SetdVal(pV->y); + z.SetdVal(pV->z); +} + +void Cubic3D::SetValDesired(const Vector3 *pV) { + x.SetValDesired(pV->x); + y.SetValDesired(pV->y); + z.SetValDesired(pV->z); +} + +void Cubic3D::SetdValDesired(const Vector3 *pV) { + float vx = pV->x; + float vy = pV->y; + float vz = pV->z; + + x.dValDesired = vx; + y.dValDesired = vy; + z.dValDesired = vz; +} + +void Cubic3D::GetVal(Vector3 *pV) const { + pV->x = x.Val; + pV->y = y.Val; + pV->z = z.Val; +} + +void Cubic3D::GetdVal(Vector3 *pV) const { + pV->x = x.dVal; + pV->y = y.dVal; + pV->z = z.dVal; +} + +void Cubic3D::GetVal(Vector3 *pV, float t) const { + pV->x = x.GetVal(t); + pV->y = y.GetVal(t); + pV->z = z.GetVal(t); +} + +void Cubic3D::GetValDesired(Vector3 *pV) const { + pV->x = x.ValDesired; + pV->y = y.ValDesired; + pV->z = z.ValDesired; +} + +void Cubic3D::Update(float fSeconds, float fDClamp, float fDDClamp) { + x.Update(fSeconds, fDClamp, fDDClamp); + y.Update(fSeconds, fDClamp, fDDClamp); + z.Update(fSeconds, fDClamp, fDDClamp); +} + +} // namespace ICE + +void ICEMover::DutchCubicInit(ICE::Cubic1D *pDutch) { + pDutch->SetVal(0.0f); + pDutch->SetdVal(0.0f); +} + +void ICEMover::FovCubicInit(ICE::Cubic1D *pFov) { + int fov_angle = GetCamera()->GetFov(); + int fov_velocity_angle = GetCamera()->GetVelocityFov(); + float fov = static_cast(fov_velocity_angle) * (1.0f / 30.0f) + static_cast(fov_angle); + float fov_velocity = static_cast(fov_velocity_angle) * pFov->duration; + + pFov->SetVal(fov); + pFov->SetdVal(fov_velocity); +} + +float ICEMover::GetDutch(float f_param) { + if (pICEData == 0) { + goto blend; + } + if (pICEData->bCubicEye == 0) { + goto blend; + } + + return pDutch->GetVal(f_param); + +blend: + return pDutch->GetVal() * (1.0f - f_param) + pDutch->GetValDesired() * f_param; +} + +unsigned short ICEMover::GetFOV(float f_param) { + if (pICEData == 0) { + goto blend; + } + if (pICEData->bCubicEye == 0) { + goto blend; + } + + return static_cast(pFov->GetVal(f_param)); + +blend: + return static_cast(pFov->GetVal() * (1.0f - f_param) + pFov->GetValDesired() * f_param); +} + +ICEAnchor *GetICEAnchor() { + CameraMover *camera_mover = 0; + + if (&eViews[1] != 0) { + camera_mover = eViews[1].GetCameraMover(); + } + if (camera_mover != 0 && camera_mover->GetType() == CM_ICE) { + return reinterpret_cast(camera_mover)->GetICEAnchor(); + } + + return 0; +} diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.hpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.hpp index a643a2a0b..eca743e95 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.hpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.hpp @@ -5,6 +5,343 @@ #pragma once #endif +#include "ICEMath.hpp" +#include "ICEData.hpp" +#include "Speed/Indep/Src/Camera/CameraMover.hpp" + +namespace ICE { + +struct Cubic1D { + Cubic1D(short type = 0, float dur = 0.0f) + : Val(0.0f), // + dVal(0.0f), // + ValDesired(0.0f), // + dValDesired(0.0f), // + time(0.0f), // + duration(dur), // + state(0), // + flags(type) { + Coeff[0] = 0.0f; + Coeff[1] = 0.0f; + Coeff[2] = 0.0f; + Coeff[3] = 0.0f; + } + + void Snap() { + Val = ValDesired; + dVal = dValDesired; + state = 0; + } + + void SetVal(float v) { + Val = v; + if (v != ValDesired) { + state = 2; + } + } + + void SetdVal(float v) { + dVal = v; + if (v != dValDesired) { + state = 2; + } + } + + void SetValDesired(float v) { + ValDesired = v; + if (v != Val) { + state = 2; + } + } + + void SetdValDesired(float v) { + dValDesired = v; + if (v != dVal) { + state = 2; + } + } + + void SetDuration(float t) { + duration = t; + } + + void SetState(short s) { + state = s; + } + + void SetFlags(short f) { + flags = f; + } + + float GetVal() const { + return Val; + } + + float GetdVal() const { + return dVal; + } + + float GetddVal() const { + return GetddVal(time); + } + + int HasArrived() const { + return state == 0; + } + + void MakeCoeffs(); + float GetVal(float t) const; + float GetdVal(float t) const; + float GetddVal(float t) const; + float GetValDesired() const; + float GetDerivative(float t) const; + float GetSecondDerivative(float t) const; + void ClampDerivative(float fMag); + void ClampSecondDerivative(float fMag); + void Update(float fSeconds, float fDClamp, float fDDClamp); + + float Val; + float dVal; + float ValDesired; + float dValDesired; + float Coeff[4]; + float time; + float duration; + short state; + short flags; +}; + +struct Cubic3D { + Cubic3D(short type = 0, float dur = 0.0f) + : x(type, dur), // + y(type, dur), // + z(type, dur) {} + + Cubic3D(short type, const Vector3 *pDuration) + : x(type, pDuration->x), // + y(type, pDuration->y), // + z(type, pDuration->z) {} + + int HasArrived() const { + return x.HasArrived() && y.HasArrived() && z.HasArrived(); + } + + void Snap() { + x.Snap(); + y.Snap(); + z.Snap(); + } + + void SetDuration(float t) { + x.SetDuration(t); + y.SetDuration(t); + z.SetDuration(t); + } + + void SetState(short s) { + x.SetState(s); + y.SetState(s); + z.SetState(s); + } + + void SetFlags(short s) { + x.SetFlags(s); + y.SetFlags(s); + z.SetFlags(s); + } + + void MakeCoeffs() { + x.MakeCoeffs(); + y.MakeCoeffs(); + z.MakeCoeffs(); + } + + void SetVal(const Vector3 *pV); + void SetdVal(const Vector3 *pV); + void SetValDesired(const Vector3 *pV); + void SetdValDesired(const Vector3 *pV); + void GetVal(Vector3 *pV) const; + void GetdVal(Vector3 *pV) const; + void GetVal(Vector3 *pV, float t) const; + void GetValDesired(Vector3 *pV) const; + void Update(float fSeconds, float fDClamp, float fDDClamp); + + Cubic1D x; + Cubic1D y; + Cubic1D z; +}; + +} // namespace ICE + +struct ICEAnchor { + ICE::Vector3 *GetVelocity() { + return &mVelocity; + } + + float GetVelocityMagnitude() { + return mVelMag; + } + + ICE::Vector3 *GetForwardVector() { + return reinterpret_cast(&mGeomRot.v0); + } + + ICE::Vector3 *GetUpVector() { + return reinterpret_cast(&mGeomRot.v2); + } + + ICE::Vector3 *GetGeometryPosition() { + return &mGeomPos; + } + + ICE::Vector3 *GetAcceleration() { + return &mAccel; + } + + ICE::Matrix4 *GetGeometryOrientation() { + return &mGeomRot; + } + + float GetTopSpeed() const { + return mTopSpeed; + } + + void SetTopSpeed(float s) { + mTopSpeed = s; + } + + float GetRPM() const { + return mRPM; + } + + void SetRPM(float s) { + mRPM = s; + } + + bool GetNumWheels() const { + return mNumWheels; + } + + void SetNumWheels(bool w) { + mNumWheels = w; + } + + int IsTouchingGround() const { + return mIsTouchingGround; + } + + void SetTouchingGround(bool touching) { + mIsTouchingGround = touching; + } + + float GetForwardSlip() const { + return mForwardSlip; + } + + void SetForwardSlip(float slip) { + mForwardSlip = slip; + } + + float GetSlipAngle() const { + return mSlipAngle; + } + + void SetSlipAngle(float a) { + mSlipAngle = a; + } + + bool IsNosEngaged() const { + return mIsNosEngaged; + } + + void SetNosEngaged(bool engaged) { + mIsNosEngaged = engaged; + } + + float GetNosPercentageLeft() const { + return mNosPercentageLeft; + } + + void SetNosPercentageLeft(float percentage) { + mNosPercentageLeft = percentage; + } + + void Update(float dT, const ICE::Matrix4 &orientpos, const ICE::Vector3 &velocity, const ICE::Vector3 &acceleration); + ICEAnchor(); + + ICE::Vector3 mGeomPos; + ICE::Matrix4 mGeomRot; + ICE::Vector3 mVelocity; + ICE::Vector3 mAccel; + float mVelMag; + float mTopSpeed; + float mRPM; + bool mNumWheels; + float mForwardSlip; + float mSlipAngle; + bool mIsTouchingGround; + bool mIsNosEngaged; + float mNosPercentageLeft; +}; + +class ICEMover : public CameraMover { + public: + ICEMover(int nView, ICEAnchor *pCar); + ~ICEMover() override; + + void EyeCubicInit(ICE::Cubic3D *pEye, ICE::Matrix4 *pMatrix, ICE::Vector3 *pVelocity); + void LookCubicInit(ICE::Cubic3D *pLook, ICE::Matrix4 *pMatrix, ICE::Vector3 *pVelocity); + void DutchCubicInit(ICE::Cubic1D *pDutch); + void FovCubicInit(ICE::Cubic1D *pFov); + void SetDesired(bool b_snap, bool b_refresh); + void GetEye(ICE::Vector3 *vEye, float f_param); + void GetLook(ICE::Vector3 *vLook, float f_param); + float GetDutch(float f_param); + unsigned short GetFOV(float f_param); + float GetNearClip(float f_param); + float GetNoiseAmplitude(float f_param); + float GetNoiseFrequency(float f_param); + float GetFocalDistance(float f_param); + float GetAperture(float f_param); + float GetLetterbox(float f_param); + float GetSimSpeed(float f_param); + void Update(float dT) override; + + bool IsViolatingTopology() { + return bViolatesTopology; + } + + bool IsSmooth() { + return pICEData != 0 && pICEData->bSmooth != 0; + } + + ICEAnchor *GetICEAnchor() { + return pCar; + } + + ICEAnchor *pCar; + ICE::Cubic3D *pEye; + ICE::Cubic3D *pLook; + ICE::Cubic1D *pDutch; + ICE::Cubic1D *pFov; + ICE::Cubic1D *pNearClip; + ICE::Cubic1D *pNoiseAmplitude; + ICE::Cubic1D *pNoiseFrequency; + ICE::Cubic1D *pFocalDistance; + ICE::Cubic1D *pAperture; + ICE::Cubic1D *pLetterbox; + ICE::Cubic1D *pSimSpeed; + ICE::Cubic3D *pAccelOffset; + float fParameter0; + float fParameter1; + int nSpaceEye; + int nSpaceLook; + ICEData *pICEData; + bool bViolatesTopology; + ICE::Matrix4 mHybridToWorld; + ICE::Vector3 vSmoothCarPos; + ICE::Vector3 vSmoothCarFwd; +}; #endif diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp index e69de29bb..01a03099c 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp @@ -0,0 +1,168 @@ +#include "ICEReplay.hpp" +#include "ICEMover.hpp" + +float PredictAverageAir(float fSeconds, float *pHighest, float *pLongest, bool b_grounded_abort); +float GetRecentCurvature(); + +static float ReplayNosScore(ICEAnchor *p_car) { + float ret = 0.0f; + + if (p_car->IsNosEngaged()) { + ret = p_car->GetNosPercentageLeft() * 0.25f + 0.5f; + } + + return ret; +} + +static bool ReplayNosMirror(ICEAnchor *) { + return false; +} + +static float ReplayJumpScore(ICEAnchor *p_car) { + float ret = p_car->GetUpVector()->z < 0.0f ? 1.0f : 0.0f; + + if (p_car->IsTouchingGround() != 0) { + float highest = 0.0f; + float longest = 0.0f; + + PredictAverageAir(3.0f, &highest, &longest, true); + if (1.0f < highest && 1.5f < longest) { + ret = 1.0f; + } + } + + return ret * 5.0f; +} + +static bool ReplayJumpMirror(ICEAnchor *) { + return false; +} + +static float ReplaySpeedScore(ICEAnchor *p_car) { + float ret = 0.0f; + + if (10.0f < p_car->GetVelocityMagnitude()) { + ret = bClamp((p_car->GetVelocityMagnitude() / p_car->GetTopSpeed()) * 0.7f + 0.3f, 0.0f, 1.0f); + } + + return ret; +} + +static bool ReplaySpeedMirror(ICEAnchor *) { + return false; +} + +static float ReplayCornerScore(ICEAnchor *p_car) { + float ret = 0.0f; + + if (5.0f < p_car->GetVelocityMagnitude()) { + ret = bClamp(bAbs(GetRecentCurvature()) * 20.0f, 0.0f, 1.0f); + } + + return ret; +} + +static bool ReplayCornerMirror(ICEAnchor *) { + return GetRecentCurvature() < 0.0f; +} + +static float ReplayBurnoutScore(ICEAnchor *p_car) { + float speed = p_car->GetVelocityMagnitude(); + + if (speed != bClamp(speed, -10.0f, 20.0f)) { + return 0.0f; + } + + { + float score = bClamp(p_car->GetForwardSlip() * 0.1f - 1.0f, 0.0f, 1.0f); + + if (speed != bClamp(speed, -1.0f, 1.0f)) { + return score; + } + if (p_car->GetRPM() <= 3000.0f) { + return score; + } + + return score + 10.9999895f; + } +} + +static bool ReplayBurnoutMirror(ICEAnchor *) { + return false; +} + +static float ReplayPowerSlideScore(ICEAnchor *p_car) { + if (p_car->GetVelocityMagnitude() <= 4.0f) { + return 0.0f; + } + + { + float score = (bAbs(p_car->GetSlipAngle()) * 360.0f - 5.0f) * 0.025f; + + if (score <= 0.0f) { + return 0.0f; + } + + return bClamp(score + 0.1f, 0.0f, 1.0f); + } +} + +static bool ReplayPowerSlideMirror(ICEAnchor *p_car) { + return p_car->GetSlipAngle() < 0.0f; +} + +static ICEReplayCategory ReplayCategories[] = { + {"NOS", 0x40DFADC5, "ReplayNos", 0xF6F4912B, ReplayNosScore, ReplayNosMirror}, + {"Jump", 0xC9CFEAFB, "ReplayJump", 0x17911633, ReplayJumpScore, ReplayJumpMirror}, + {"Speed", 0x41862FE6, "ReplaySpeed", 0xC0E543F7, ReplaySpeedScore, ReplaySpeedMirror}, + {"Corner", 0xA38C8885, "ReplayCorner", 0xE12BD1A8, ReplayCornerScore, ReplayCornerMirror}, + {"Burnout", 0x6512F314, "ReplayBurnout", 0x87EA4B2F, ReplayBurnoutScore, ReplayBurnoutMirror}, + {"PowerSlide", 0x9FD09E0E, "ReplaySlide", 0xD7BFCC6F, ReplayPowerSlideScore, ReplayPowerSlideMirror}, +}; + +namespace ICE { + +int GetReplayCategoryNumElements() { + return 6; +} + +unsigned int GetReplayCategoryHash(int category) { + return ReplayCategories[category].nCategoryHash; +} + +ICEReplayCategory *GetReplayCategory(unsigned int category_hash) { + for (int i = 0; i < 6; i++) { + if (category_hash == ReplayCategories[i].nCategoryHash) { + return &ReplayCategories[i]; + } + } + + return 0; +} + +} // namespace ICE + +namespace ICEReplay { + +ICETrack *RecentlyUsedTracks[3]; +int nRecentlyUsedIndex; + +bool WasRecentlyUsed(ICETrack *track) { + for (int i = 0; i < 3; i++) { + if (track == RecentlyUsedTracks[i]) { + return true; + } + } + + return false; +} + +void ClearRecentlyUsed() { + nRecentlyUsedIndex = 0; + + for (int i = 0; i < 3; i++) { + RecentlyUsedTracks[i] = 0; + } +} + +} // namespace ICEReplay diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.hpp b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.hpp index 3054e235d..1737ebfe9 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.hpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.hpp @@ -5,6 +5,44 @@ #pragma once #endif +struct ICEAnchor; +struct ICETrack; + +struct ICEReplayCategory { + float GetScore(ICEAnchor *car) { + return ScoreFunction(car); + } + + bool GetMirror(ICEAnchor *car) { + return MirrorFunction(car); + } + + const char *pCategoryName; + unsigned int nCategoryHash; + const char *pSceneName; + unsigned int nSceneHash; + float (*ScoreFunction)(ICEAnchor *); + bool (*MirrorFunction)(ICEAnchor *); +}; + +namespace ICE { + +int GetReplayCategoryNumElements(); +unsigned int GetReplayCategoryHash(int category); +ICEReplayCategory *GetReplayCategory(unsigned int category_hash); + +} // namespace ICE + +namespace ICEReplay { + +extern ICETrack *RecentlyUsedTracks[3]; +extern int nRecentlyUsedIndex; + +bool WasRecentlyUsed(ICETrack *track); +void ClearRecentlyUsed(); + +} // namespace ICEReplay + #endif diff --git a/src/Speed/Indep/Src/Misc/GameFlow.hpp b/src/Speed/Indep/Src/Misc/GameFlow.hpp index a1034b17e..2573e38b3 100644 --- a/src/Speed/Indep/Src/Misc/GameFlow.hpp +++ b/src/Speed/Indep/Src/Misc/GameFlow.hpp @@ -45,6 +45,8 @@ class GameFlowManager { return GetState() == GAMEFLOW_STATE_LOADING_REGION || GetState() == GAMEFLOW_STATE_LOADING_TRACK; } + bool IsPaused(); + private: void (*pSingleFunction)(int); // offset 0x0, size 0x4 int SingleFunctionParam; // offset 0x4, size 0x4 diff --git a/src/Speed/Indep/Src/World/WCollider.h b/src/Speed/Indep/Src/World/WCollider.h index fcafc2d6f..0252a9ea4 100644 --- a/src/Speed/Indep/Src/World/WCollider.h +++ b/src/Speed/Indep/Src/World/WCollider.h @@ -31,6 +31,7 @@ class WCollider : public UTL::Collections::Listable { }; static void Destroy(WCollider *col); + static WCollider *Create(unsigned int wuid, eColliderShape shape, unsigned int typeCheckMask, unsigned int exclusionMask); void Clear(); bool IsEmpty() const; diff --git a/src/Speed/Indep/bWare/Inc/bMath.hpp b/src/Speed/Indep/bWare/Inc/bMath.hpp index 92cfb3cc1..d4ef923de 100644 --- a/src/Speed/Indep/bWare/Inc/bMath.hpp +++ b/src/Speed/Indep/bWare/Inc/bMath.hpp @@ -848,6 +848,7 @@ inline bMatrix4 *bCopy(bMatrix4 *dest, const bMatrix4 *v, const struct bVector4 inline bMatrix4 *bCopy(bMatrix4 *dest, const bMatrix4 *v, const struct bVector3 *position) {} void bMulMatrix(bMatrix4 *dest, const bMatrix4 *a, const bMatrix4 *b); +void bMulMatrix(bVector4 *dest, const bMatrix4 *a, const bVector4 *b); void bMulMatrix(bVector3 *dest, const bMatrix4 *a, const bVector3 *b); bMatrix4 *bTransposeMatrix(bMatrix4 *dest, const bMatrix4 *m); From a9117e3b30403e2f671c9547b7e1c7e0a87d9ac0 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 10 Mar 2026 22:09:18 +0100 Subject: [PATCH 004/691] 22% --- src/Speed/Indep/SourceLists/zCamera.cpp | 23 ++ .../Src/Camera/Actions/CDActionDebug.cpp | 40 +++ .../Src/Camera/Actions/CDActionDebug.hpp | 34 +++ .../Camera/Actions/CDActionDebugWatchCar.cpp | 50 ++++ .../Camera/Actions/CDActionDebugWatchCar.hpp | 40 +++ .../Src/Camera/Actions/CDActionDrive.cpp | 95 ++++++ .../Src/Camera/Actions/CDActionDrive.hpp | 66 +++++ .../Indep/Src/Camera/Actions/CDActionIce.cpp | 69 +++++ .../Indep/Src/Camera/Actions/CDActionIce.hpp | 53 ++++ .../Src/Camera/Actions/CDActionShowcase.cpp | 60 ++++ .../Src/Camera/Actions/CDActionShowcase.hpp | 45 +++ .../Src/Camera/Actions/CDActionTrackCar.cpp | 65 ++++ .../Src/Camera/Actions/CDActionTrackCar.hpp | 47 +++ .../Src/Camera/Actions/CDActionTrackCop.cpp | 65 ++++ .../Src/Camera/Actions/CDActionTrackCop.hpp | 47 +++ src/Speed/Indep/Src/Camera/CameraAI.cpp | 280 ++++++++++++++++++ src/Speed/Indep/Src/Camera/CameraAI.hpp | 118 ++++++++ src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp | 11 + src/Speed/Indep/Src/Camera/IDebugWatchCar.h | 26 ++ .../Indep/Src/Camera/Movers/SelectCar.cpp | 41 +++ .../Indep/Src/Camera/Movers/SelectCar.hpp | 59 ++++ .../Indep/Src/Camera/Movers/Showcase.cpp | 29 ++ .../Indep/Src/Camera/Movers/Showcase.hpp | 34 +++ .../Src/Frontend/Database/FEDatabase.hpp | 16 + src/Speed/Indep/Src/World/WorldConn.h | 1 + 25 files changed, 1414 insertions(+) create mode 100644 src/Speed/Indep/Src/Camera/Actions/CDActionDebug.hpp create mode 100644 src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.hpp create mode 100644 src/Speed/Indep/Src/Camera/Actions/CDActionDrive.hpp create mode 100644 src/Speed/Indep/Src/Camera/Actions/CDActionIce.hpp create mode 100644 src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.hpp create mode 100644 src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.hpp create mode 100644 src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.hpp create mode 100644 src/Speed/Indep/Src/Camera/IDebugWatchCar.h create mode 100644 src/Speed/Indep/Src/Camera/Movers/SelectCar.hpp create mode 100644 src/Speed/Indep/Src/Camera/Movers/Showcase.hpp diff --git a/src/Speed/Indep/SourceLists/zCamera.cpp b/src/Speed/Indep/SourceLists/zCamera.cpp index c4420f364..58932488c 100644 --- a/src/Speed/Indep/SourceLists/zCamera.cpp +++ b/src/Speed/Indep/SourceLists/zCamera.cpp @@ -1,6 +1,29 @@ #include "Speed/Indep/Src/Camera/Camera.cpp" #include "Speed/Indep/Src/Camera/CameraMover.cpp" +#include "Speed/Indep/Src/Camera/CameraAI.cpp" +#include "Speed/Indep/Src/Camera/ChaseCamAI.cpp" +#include "Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp" +#include "Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp" +#include "Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp" +#include "Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp" +#include "Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp" +#include "Speed/Indep/Src/Camera/Actions/CDActionIce.cpp" +#include "Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp" +#include "Speed/Indep/Src/Camera/Movers/Cubic.cpp" +#include "Speed/Indep/Src/Camera/Movers/TrackCar.cpp" +#include "Speed/Indep/Src/Camera/Movers/TrackCop.cpp" +#include "Speed/Indep/Src/Camera/Movers/Rearview.cpp" +#include "Speed/Indep/Src/Camera/Movers/SelectCar.cpp" +#include "Speed/Indep/Src/Camera/Movers/Showcase.cpp" +#include "Speed/Indep/Src/Camera/Movers/DebugWorld.cpp" +#include "Speed/Indep/Src/Camera/Movers/Still.cpp" +#include "Speed/Indep/Src/Camera/Movers/CopView.cpp" #include "Speed/Indep/Src/Camera/ICE/ICEData.cpp" +#include "Speed/Indep/Src/Camera/ICE/ICEAnchor.cpp" +#include "Speed/Indep/Src/Camera/ICE/ICEAnimScene.cpp" #include "Speed/Indep/Src/Camera/ICE/ICEMover.cpp" #include "Speed/Indep/Src/Camera/ICE/ICEReplay.cpp" +#include "Speed/Indep/Src/Camera/ICE/ICEPoint.cpp" +#include "Speed/Indep/Src/Camera/ICE/ICERender.cpp" +#include "Speed/Indep/Src/Camera/ICE/ICEOverlays.cpp" #include "Speed/Indep/Src/Camera/ICE/ICEManager.cpp" diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp index e69de29bb..57296e86a 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp @@ -0,0 +1,40 @@ +#include "Speed/Indep/Src/Camera/Actions/CDActionDebug.hpp" +#include "Speed/Indep/Src/Camera/CameraMover.hpp" + +static UTL::COM::Factory::Prototype _CDActionDebug("DEBUG", CDActionDebug::Construct); + +const Attrib::StringKey &CDActionDebug::GetName() const { + static Attrib::StringKey name("DEBUG"); + return name; +} + +Attrib::StringKey CDActionDebug::GetNext() const { + if (!mDone) { + return Attrib::StringKey(""); + } + return mPrev; +} + +CameraAI::Action *CDActionDebug::Construct(CameraAI::Director *director) { + // TODO + return nullptr; +} + +CDActionDebug::CDActionDebug(CameraAI::Director *director) + : CameraAI::Action(), // + mActionQ(false) { + // TODO +} + +CDActionDebug::~CDActionDebug() { + // TODO +} + +void CDActionDebug::Update(float dT) { + // TODO +} + +bool CDActionDebug::GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) { + // TODO + return false; +} diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.hpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.hpp new file mode 100644 index 000000000..82644cbc8 --- /dev/null +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.hpp @@ -0,0 +1,34 @@ +#ifndef CAMERA_ACTIONS_CDACTIONDEBUG_H +#define CAMERA_ACTIONS_CDACTIONDEBUG_H + +#ifdef EA_PRAGMA_ONCE_SUPPORTED +#pragma once +#endif + +#include "Speed/Indep/Src/Camera/CameraAI.hpp" +#include "Speed/Indep/Src/Input/ActionQueue.h" +#include "Speed/Indep/Src/Interfaces/SimActivities/ITrafficCenter.h" + +// total size: 0x2D0 +class CDActionDebug : public CameraAI::Action, public ITrafficCenter { + public: + const Attrib::StringKey &GetName() const override; + Attrib::StringKey GetNext() const override; + CameraMover *GetMover() override { return mMover; } + void SetSpecial(float val) override {} + + static CameraAI::Action *Construct(CameraAI::Director *director); + CDActionDebug(CameraAI::Director *director); + ~CDActionDebug() override; + void Reset() override {} + void Update(float dT) override; + bool GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) override; + + private: + ActionQueue mActionQ; // offset 0x20, size 0x294 + CameraMover *mMover; // offset 0x2B4, size 0x4 + Attrib::StringKey mPrev; // offset 0x2B8, size 0x10 + bool mDone; // offset 0x2C8, size 0x1 +}; + +#endif diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp index e69de29bb..551cb3619 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp @@ -0,0 +1,50 @@ +#include "Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.hpp" +#include "Speed/Indep/Src/Camera/CameraMover.hpp" + +static UTL::COM::Factory::Prototype _CDActionDebugWatchCar("DEBUGWATCHCAR", CDActionDebugWatchCar::Construct); + +const Attrib::StringKey &CDActionDebugWatchCar::GetName() const { + static Attrib::StringKey name("DEBUGWATCHCAR"); + return name; +} + +Attrib::StringKey CDActionDebugWatchCar::GetNext() const { + return mPrev; +} + +ISimable *CDActionDebugWatchCar::GetSimable() { + // TODO + return nullptr; +} + +void CDActionDebugWatchCar::ReleaseTarget() { + // TODO +} + +void CDActionDebugWatchCar::AquireTarget() { + // TODO +} + +CameraAI::Action *CDActionDebugWatchCar::Construct(CameraAI::Director *director) { + // TODO + return nullptr; +} + +CDActionDebugWatchCar::CDActionDebugWatchCar(CameraAI::Director *director) + : CameraAI::Action(), // + IDebugWatchCar(this) { + // TODO +} + +CDActionDebugWatchCar::~CDActionDebugWatchCar() { + // TODO +} + +void CDActionDebugWatchCar::Update(float dT) { + // TODO +} + +bool CDActionDebugWatchCar::GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) { + // TODO + return false; +} diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.hpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.hpp new file mode 100644 index 000000000..a770e7f10 --- /dev/null +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.hpp @@ -0,0 +1,40 @@ +#ifndef CAMERA_ACTIONS_CDACTIONDEBUGWATCHCAR_H +#define CAMERA_ACTIONS_CDACTIONDEBUGWATCHCAR_H + +#ifdef EA_PRAGMA_ONCE_SUPPORTED +#pragma once +#endif + +#include "Speed/Indep/Src/Camera/CameraAI.hpp" +#include "Speed/Indep/Src/Camera/IDebugWatchCar.h" +#include "Speed/Indep/Src/Interfaces/Simables/ISimable.h" +#include "Speed/Indep/Src/Interfaces/SimActivities/ITrafficCenter.h" +#include "Speed/Indep/Src/World/WorldConn.h" + +// total size: 0x60 +class CDActionDebugWatchCar : public CameraAI::Action, public IDebugWatchCar, public ITrafficCenter { + public: + const Attrib::StringKey &GetName() const override; + Attrib::StringKey GetNext() const override; + CameraMover *GetMover() override { return mMover; } + void SetSpecial(float val) override {} + + static CameraAI::Action *Construct(CameraAI::Director *director); + CDActionDebugWatchCar(CameraAI::Director *director); + ~CDActionDebugWatchCar() override; + void Reset() override {} + ISimable *GetSimable() override; + void ReleaseTarget(); + void AquireTarget(); + void Update(float dT) override; + bool GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) override; + + private: + CameraMover *mMover; // offset 0x2C, size 0x4 + CameraAnchor *mAnchor; // offset 0x30, size 0x4 + WorldConn::Reference mTarget; // offset 0x34, size 0x10 + Attrib::StringKey mPrev; // offset 0x48, size 0x10 + HSIMABLE mhSimable; // offset 0x58, size 0x4 +}; + +#endif diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index e69de29bb..9cdfb5814 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -0,0 +1,95 @@ +#include "Speed/Indep/Src/Camera/Actions/CDActionDrive.hpp" +#include "Speed/Indep/Src/Camera/CameraMover.hpp" +#include "Speed/Indep/Src/Generated/Messages/MJumpCut.h" + +static float kCinematicMomementSeconds; + +static UTL::COM::Factory::Prototype _CDActionDrive("DRIVE", CDActionDrive::Construct); + +const Attrib::StringKey &CDActionDrive::GetName() const { + static Attrib::StringKey name("DRIVE"); + return name; +} + +Attrib::StringKey CDActionDrive::GetNext() const { + return Attrib::StringKey(); +} + +void CDActionDrive::SetSpecial(float val) { + if (val > 0.0f) { + kCinematicMomementSeconds = val; + mCinematicMomementTimerInc = true; + } +} + +bool CDActionDrive::Attach(UTL::COM::IUnknown *pOther) { + return mAttachments->Attach(pOther); +} + +bool CDActionDrive::Detach(UTL::COM::IUnknown *pOther) { + return mAttachments->Detach(pOther); +} + +bool CDActionDrive::IsAttached(const UTL::COM::IUnknown *pOther) const { + return mAttachments->IsAttached(pOther); +} + +const IAttachable::List *CDActionDrive::GetAttachments() const { + return &mAttachments->GetList(); +} + +CameraAI::Action *CDActionDrive::Construct(CameraAI::Director *director) { + // TODO + return nullptr; +} + +CDActionDrive::CDActionDrive(CameraAI::Director *director, IPlayer *player) + : CameraAI::Action(), // + IAttachable(this), // + mMaxCollisionTime(0.5f) { + // TODO +} + +CDActionDrive::~CDActionDrive() { + // TODO +} + +void CDActionDrive::Reset() { + mGear = 0; + mCinematicMomementTimer = 0.0f; + mGameBreakerScale = 0.0f; + mDampCollisionTime = 0.0f; + mGroundCollisionTime = 0.0f; + mObjectCollisionTime = 0.0f; + mPulseTimer = 0.0f; + mCinematicMomementTimerInc = false; +} + +void CDActionDrive::OnDetached(IAttachable *pOther) { + // TODO +} + +void CDActionDrive::OnCarDetached() { + // TODO +} + +void CDActionDrive::OnCollision(const Sim::Collision::Info &cinfo) { + // TODO +} + +void CDActionDrive::AquireCar() { + // TODO +} + +void CDActionDrive::Update(float dT) { + // TODO +} + +bool CDActionDrive::GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) { + // TODO + return false; +} + +void CDActionDrive::MessageJumpCut(const MJumpCut &message) { + // TODO +} diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.hpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.hpp new file mode 100644 index 000000000..dd3d13527 --- /dev/null +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.hpp @@ -0,0 +1,66 @@ +#ifndef CAMERA_ACTIONS_CDACTIONDRIVE_H +#define CAMERA_ACTIONS_CDACTIONDRIVE_H + +#ifdef EA_PRAGMA_ONCE_SUPPORTED +#pragma once +#endif + +#include "Speed/Indep/Src/Camera/CameraAI.hpp" +#include "Speed/Indep/Src/Interfaces/IAttachable.h" +#include "Speed/Indep/Src/Interfaces/IListener.h" +#include "Speed/Indep/Src/Interfaces/SimActivities/ITrafficCenter.h" +#include "Speed/Indep/Src/Sim/SimAttachable.h" +#include "Speed/Indep/Src/World/WorldConn.h" + +struct _h_HHANDLER__; +typedef _h_HHANDLER__ *HHANDLER; + +class MJumpCut; + +// total size: 0x80 +class CDActionDrive : public CameraAI::Action, public IAttachable, public Sim::Collision::IListener, public ITrafficCenter { + public: + const Attrib::StringKey &GetName() const override; + Attrib::StringKey GetNext() const override; + CameraMover *GetMover() override { return mMover; } + void SetSpecial(float val) override; + bool Attach(UTL::COM::IUnknown *pOther) override; + bool Detach(UTL::COM::IUnknown *pOther) override; + bool IsAttached(const UTL::COM::IUnknown *pOther) const override; + void OnAttached(IAttachable *pOther) override {} + const IAttachable::List *GetAttachments() const override; + + static CameraAI::Action *Construct(CameraAI::Director *director); + CDActionDrive(CameraAI::Director *director, IPlayer *player); + ~CDActionDrive() override; + void Reset() override; + void OnDetached(IAttachable *pOther) override; + void OnCarDetached(); + void OnCollision(const Sim::Collision::Info &cinfo) override; + void AquireCar(); + void Update(float dT) override; + bool GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) override; + void MessageJumpCut(const MJumpCut &message); + + private: + CameraMover *mMover; // offset 0x2C, size 0x4 + CameraMover *mRearViewMirrorMover; // offset 0x30, size 0x4 + CameraAnchor *mAnchor; // offset 0x34, size 0x4 + WorldConn::Reference mTarget; // offset 0x38, size 0x10 + IPlayer *mPlayer; // offset 0x48, size 0x4 + Sim::Attachments *mAttachments; // offset 0x4C, size 0x4 + IVehicle *mVehicle; // offset 0x50, size 0x4 + float mGameBreakerScale; // offset 0x54, size 0x4 + EVIEW_ID mViewID; // offset 0x58, size 0x4 + float mDampCollisionTime; // offset 0x5C, size 0x4 + float mGroundCollisionTime; // offset 0x60, size 0x4 + float mObjectCollisionTime; // offset 0x64, size 0x4 + const float mMaxCollisionTime; // offset 0x68, size 0x4 + float mPulseTimer; // offset 0x6C, size 0x4 + float mCinematicMomementTimer; // offset 0x70, size 0x4 + bool mCinematicMomementTimerInc; // offset 0x74, size 0x1 + int mGear; // offset 0x78, size 0x4 + HHANDLER mMsgJumpCut; // offset 0x7C, size 0x4 +}; + +#endif diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp index e69de29bb..ecb7c9cff 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp @@ -0,0 +1,69 @@ +#include "Speed/Indep/Src/Camera/Actions/CDActionIce.hpp" +#include "Speed/Indep/Src/Camera/CameraMover.hpp" +#include "Speed/Indep/Src/Camera/ICE/ICEMover.hpp" + +static UTL::COM::Factory::Prototype _CDActionIce("ICE", CDActionIce::Construct); + +const Attrib::StringKey &CDActionIce::GetName() const { + static Attrib::StringKey name("ICE"); + return name; +} + +Attrib::StringKey CDActionIce::GetNext() const { + if (!mDone) { + return Attrib::StringKey(""); + } + return mPrev; +} + +CameraMover *CDActionIce::GetMover() { + return mMover; +} + +bool CDActionIce::Attach(UTL::COM::IUnknown *pOther) { + return mAttachments->Attach(pOther); +} + +bool CDActionIce::Detach(UTL::COM::IUnknown *pOther) { + return mAttachments->Detach(pOther); +} + +bool CDActionIce::IsAttached(const UTL::COM::IUnknown *pOther) const { + return mAttachments->IsAttached(pOther); +} + +const IAttachable::List *CDActionIce::GetAttachments() const { + return &mAttachments->GetList(); +} + +CameraAI::Action *CDActionIce::Construct(CameraAI::Director *director) { + // TODO + return nullptr; +} + +CDActionIce::CDActionIce(CameraAI::Director *director, IPlayer *player) + : CameraAI::Action(), // + IAttachable(this), // + mActionQ(false) { + // TODO +} + +CDActionIce::~CDActionIce() { + // TODO +} + +void CDActionIce::OnDetached(IAttachable *pOther) { + // TODO +} + +void CDActionIce::ReleaseCar(bool detach) { + // TODO +} + +void CDActionIce::AquireCar() { + // TODO +} + +void CDActionIce::Update(float dT) { + // TODO +} diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionIce.hpp b/src/Speed/Indep/Src/Camera/Actions/CDActionIce.hpp new file mode 100644 index 000000000..7f7a3b9a9 --- /dev/null +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionIce.hpp @@ -0,0 +1,53 @@ +#ifndef CAMERA_ACTIONS_CDACTIONICE_H +#define CAMERA_ACTIONS_CDACTIONICE_H + +#ifdef EA_PRAGMA_ONCE_SUPPORTED +#pragma once +#endif + +#include "Speed/Indep/Src/Camera/CameraAI.hpp" +#include "Speed/Indep/Src/Input/ActionQueue.h" +#include "Speed/Indep/Src/Interfaces/IAttachable.h" +#include "Speed/Indep/Src/Sim/SimAttachable.h" +#include "Speed/Indep/Src/World/WorldConn.h" + +class ICEAnchor; +class ICEMover; +class ICETrack; + +// total size: 0x2F8 +class CDActionIce : public CameraAI::Action, public IAttachable { + public: + const Attrib::StringKey &GetName() const override; + Attrib::StringKey GetNext() const override; + CameraMover *GetMover() override; + void SetSpecial(float val) override {} + bool Attach(UTL::COM::IUnknown *pOther) override; + bool Detach(UTL::COM::IUnknown *pOther) override; + bool IsAttached(const UTL::COM::IUnknown *pOther) const override; + void OnAttached(IAttachable *pOther) override {} + const IAttachable::List *GetAttachments() const override; + + static CameraAI::Action *Construct(CameraAI::Director *director); + CDActionIce(CameraAI::Director *director, IPlayer *player); + ~CDActionIce() override; + void Reset() override {} + void OnDetached(IAttachable *pOther) override; + void ReleaseCar(bool detach); + void AquireCar(); + void Update(float dT) override; + + private: + ActionQueue mActionQ; // offset 0x20, size 0x294 + Attrib::StringKey mPrev; // offset 0x2B8, size 0x10 + ICEAnchor *mAnchor; // offset 0x2C8, size 0x4 + ICEMover *mMover; // offset 0x2CC, size 0x4 + WorldConn::Reference mTarget; // offset 0x2D0, size 0x10 + IPlayer *mPlayer; // offset 0x2E0, size 0x4 + Sim::Attachments *mAttachments; // offset 0x2E4, size 0x4 + IVehicle *mVehicle; // offset 0x2E8, size 0x4 + ICETrack *mTrack; // offset 0x2EC, size 0x4 + bool mDone; // offset 0x2F0, size 0x1 +}; + +#endif diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp index e69de29bb..ceb605722 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp @@ -0,0 +1,60 @@ +#include "Speed/Indep/Src/Camera/Actions/CDActionShowcase.hpp" +#include "Speed/Indep/Src/Camera/CameraMover.hpp" + +static UTL::COM::Factory::Prototype _CDActionShowcase("SHOWCASE", CDActionShowcase::Construct); + +const Attrib::StringKey &CDActionShowcase::GetName() const { + static Attrib::StringKey name("SHOWCASE"); + return name; +} + +Attrib::StringKey CDActionShowcase::GetNext() const { + return Attrib::StringKey(); +} + +bool CDActionShowcase::Attach(UTL::COM::IUnknown *pOther) { + return mAttachments->Attach(pOther); +} + +bool CDActionShowcase::Detach(UTL::COM::IUnknown *pOther) { + return mAttachments->Detach(pOther); +} + +bool CDActionShowcase::IsAttached(const UTL::COM::IUnknown *pOther) const { + return mAttachments->IsAttached(pOther); +} + +const IAttachable::List *CDActionShowcase::GetAttachments() const { + return &mAttachments->GetList(); +} + +CameraAI::Action *CDActionShowcase::Construct(CameraAI::Director *director) { + // TODO + return nullptr; +} + +CDActionShowcase::CDActionShowcase(CameraAI::Director *director, IPlayer *player) + : CameraAI::Action(), // + IAttachable(this) { + // TODO +} + +CDActionShowcase::~CDActionShowcase() { + // TODO +} + +void CDActionShowcase::OnDetached(IAttachable *pOther) { + // TODO +} + +void CDActionShowcase::OnCarDetached() { + // TODO +} + +void CDActionShowcase::AquireCar() { + // TODO +} + +void CDActionShowcase::Update(float dT) { + // TODO +} diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.hpp b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.hpp new file mode 100644 index 000000000..03ef57706 --- /dev/null +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.hpp @@ -0,0 +1,45 @@ +#ifndef CAMERA_ACTIONS_CDACTIONSHOWCASE_H +#define CAMERA_ACTIONS_CDACTIONSHOWCASE_H + +#ifdef EA_PRAGMA_ONCE_SUPPORTED +#pragma once +#endif + +#include "Speed/Indep/Src/Camera/CameraAI.hpp" +#include "Speed/Indep/Src/Interfaces/IAttachable.h" +#include "Speed/Indep/Src/Sim/SimAttachable.h" +#include "Speed/Indep/Src/World/WorldConn.h" + +// total size: 0x48 +class CDActionShowcase : public CameraAI::Action, public IAttachable { + public: + const Attrib::StringKey &GetName() const override; + Attrib::StringKey GetNext() const override; + CameraMover *GetMover() override { return mMover; } + void SetSpecial(float val) override {} + bool Attach(UTL::COM::IUnknown *pOther) override; + bool Detach(UTL::COM::IUnknown *pOther) override; + bool IsAttached(const UTL::COM::IUnknown *pOther) const override; + void OnAttached(IAttachable *pOther) override {} + const IAttachable::List *GetAttachments() const override; + + static CameraAI::Action *Construct(CameraAI::Director *director); + CDActionShowcase(CameraAI::Director *director, IPlayer *player); + ~CDActionShowcase() override; + void Reset() override {} + void OnDetached(IAttachable *pOther) override; + void OnCarDetached(); + void AquireCar(); + void Update(float dT) override; + + private: + CameraMover *mMover; // offset 0x20, size 0x4 + CameraAnchor *mAnchor; // offset 0x24, size 0x4 + WorldConn::Reference mTarget; // offset 0x28, size 0x10 + IPlayer *mPlayer; // offset 0x38, size 0x4 + Sim::Attachments *mAttachments; // offset 0x3C, size 0x4 + IVehicle *mVehicle; // offset 0x40, size 0x4 + EVIEW_ID mViewID; // offset 0x44, size 0x4 +}; + +#endif diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp index e69de29bb..e79979119 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp @@ -0,0 +1,65 @@ +#include "Speed/Indep/Src/Camera/Actions/CDActionTrackCar.hpp" +#include "Speed/Indep/Src/Camera/CameraMover.hpp" + +static UTL::COM::Factory::Prototype _CDActionTrackCar("TRACKCAR", CDActionTrackCar::Construct); + +const Attrib::StringKey &CDActionTrackCar::GetName() const { + static Attrib::StringKey name("TRACKCAR"); + return name; +} + +Attrib::StringKey CDActionTrackCar::GetNext() const { + return Attrib::StringKey(); +} + +bool CDActionTrackCar::Attach(UTL::COM::IUnknown *pOther) { + return mAttachments->Attach(pOther); +} + +bool CDActionTrackCar::Detach(UTL::COM::IUnknown *pOther) { + return mAttachments->Detach(pOther); +} + +bool CDActionTrackCar::IsAttached(const UTL::COM::IUnknown *pOther) const { + return mAttachments->IsAttached(pOther); +} + +const IAttachable::List *CDActionTrackCar::GetAttachments() const { + return &mAttachments->GetList(); +} + +CameraAI::Action *CDActionTrackCar::Construct(CameraAI::Director *director) { + // TODO + return nullptr; +} + +CDActionTrackCar::CDActionTrackCar(CameraAI::Director *director, IPlayer *player) + : CameraAI::Action(), // + IAttachable(this) { + // TODO +} + +CDActionTrackCar::~CDActionTrackCar() { + // TODO +} + +void CDActionTrackCar::OnDetached(IAttachable *pOther) { + // TODO +} + +void CDActionTrackCar::OnCarDetached() { + // TODO +} + +void CDActionTrackCar::AquireCar() { + // TODO +} + +void CDActionTrackCar::Update(float dT) { + // TODO +} + +bool CDActionTrackCar::GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) { + // TODO + return false; +} diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.hpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.hpp new file mode 100644 index 000000000..0929bef5b --- /dev/null +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.hpp @@ -0,0 +1,47 @@ +#ifndef CAMERA_ACTIONS_CDACTIONTRACKCAR_H +#define CAMERA_ACTIONS_CDACTIONTRACKCAR_H + +#ifdef EA_PRAGMA_ONCE_SUPPORTED +#pragma once +#endif + +#include "Speed/Indep/Src/Camera/CameraAI.hpp" +#include "Speed/Indep/Src/Interfaces/IAttachable.h" +#include "Speed/Indep/Src/Interfaces/SimActivities/ITrafficCenter.h" +#include "Speed/Indep/Src/Sim/SimAttachable.h" +#include "Speed/Indep/Src/World/WorldConn.h" + +// total size: 0x50 +class CDActionTrackCar : public CameraAI::Action, public IAttachable, public ITrafficCenter { + public: + const Attrib::StringKey &GetName() const override; + Attrib::StringKey GetNext() const override; + CameraMover *GetMover() override { return mMover; } + void SetSpecial(float val) override {} + bool Attach(UTL::COM::IUnknown *pOther) override; + bool Detach(UTL::COM::IUnknown *pOther) override; + bool IsAttached(const UTL::COM::IUnknown *pOther) const override; + void OnAttached(IAttachable *pOther) override {} + const IAttachable::List *GetAttachments() const override; + + static CameraAI::Action *Construct(CameraAI::Director *director); + CDActionTrackCar(CameraAI::Director *director, IPlayer *player); + ~CDActionTrackCar() override; + void Reset() override {} + void OnDetached(IAttachable *pOther) override; + void OnCarDetached(); + void AquireCar(); + void Update(float dT) override; + bool GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) override; + + private: + CameraMover *mMover; // offset 0x28, size 0x4 + CameraAnchor *mAnchor; // offset 0x2C, size 0x4 + WorldConn::Reference mTarget; // offset 0x30, size 0x10 + IPlayer *mPlayer; // offset 0x40, size 0x4 + Sim::Attachments *mAttachments; // offset 0x44, size 0x4 + IVehicle *mVehicle; // offset 0x48, size 0x4 + EVIEW_ID mViewID; // offset 0x4C, size 0x4 +}; + +#endif diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp index e69de29bb..54c1dc002 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp @@ -0,0 +1,65 @@ +#include "Speed/Indep/Src/Camera/Actions/CDActionTrackCop.hpp" +#include "Speed/Indep/Src/Camera/CameraMover.hpp" + +static UTL::COM::Factory::Prototype _CDActionTrackCop("TRACKCOP", CDActionTrackCop::Construct); + +const Attrib::StringKey &CDActionTrackCop::GetName() const { + static Attrib::StringKey name("TRACKCOP"); + return name; +} + +Attrib::StringKey CDActionTrackCop::GetNext() const { + return Attrib::StringKey(); +} + +bool CDActionTrackCop::Attach(UTL::COM::IUnknown *pOther) { + return mAttachments->Attach(pOther); +} + +bool CDActionTrackCop::Detach(UTL::COM::IUnknown *pOther) { + return mAttachments->Detach(pOther); +} + +bool CDActionTrackCop::IsAttached(const UTL::COM::IUnknown *pOther) const { + return mAttachments->IsAttached(pOther); +} + +const IAttachable::List *CDActionTrackCop::GetAttachments() const { + return &mAttachments->GetList(); +} + +CameraAI::Action *CDActionTrackCop::Construct(CameraAI::Director *director) { + // TODO + return nullptr; +} + +CDActionTrackCop::CDActionTrackCop(CameraAI::Director *director, IPlayer *player) + : CameraAI::Action(), // + IAttachable(this) { + // TODO +} + +CDActionTrackCop::~CDActionTrackCop() { + // TODO +} + +void CDActionTrackCop::OnDetached(IAttachable *pOther) { + // TODO +} + +void CDActionTrackCop::OnCarDetached() { + // TODO +} + +void CDActionTrackCop::AquireCar() { + // TODO +} + +void CDActionTrackCop::Update(float dT) { + // TODO +} + +bool CDActionTrackCop::GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) { + // TODO + return false; +} diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.hpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.hpp new file mode 100644 index 000000000..432d2b10d --- /dev/null +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.hpp @@ -0,0 +1,47 @@ +#ifndef CAMERA_ACTIONS_CDACTIONTRACKCOP_H +#define CAMERA_ACTIONS_CDACTIONTRACKCOP_H + +#ifdef EA_PRAGMA_ONCE_SUPPORTED +#pragma once +#endif + +#include "Speed/Indep/Src/Camera/CameraAI.hpp" +#include "Speed/Indep/Src/Interfaces/IAttachable.h" +#include "Speed/Indep/Src/Interfaces/SimActivities/ITrafficCenter.h" +#include "Speed/Indep/Src/Sim/SimAttachable.h" +#include "Speed/Indep/Src/World/WorldConn.h" + +// total size: 0x50 +class CDActionTrackCop : public CameraAI::Action, public IAttachable, public ITrafficCenter { + public: + const Attrib::StringKey &GetName() const override; + Attrib::StringKey GetNext() const override; + CameraMover *GetMover() override { return mMover; } + void SetSpecial(float val) override {} + bool Attach(UTL::COM::IUnknown *pOther) override; + bool Detach(UTL::COM::IUnknown *pOther) override; + bool IsAttached(const UTL::COM::IUnknown *pOther) const override; + void OnAttached(IAttachable *pOther) override {} + const IAttachable::List *GetAttachments() const override; + + static CameraAI::Action *Construct(CameraAI::Director *director); + CDActionTrackCop(CameraAI::Director *director, IPlayer *player); + ~CDActionTrackCop() override; + void Reset() override {} + void OnDetached(IAttachable *pOther) override; + void OnCarDetached(); + void AquireCar(); + void Update(float dT) override; + bool GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) override; + + private: + CameraMover *mMover; // offset 0x28, size 0x4 + CameraAnchor *mAnchor; // offset 0x2C, size 0x4 + WorldConn::Reference mTarget; // offset 0x30, size 0x10 + IPlayer *mPlayer; // offset 0x40, size 0x4 + Sim::Attachments *mAttachments; // offset 0x44, size 0x4 + IVehicle *mVehicle; // offset 0x48, size 0x4 + EVIEW_ID mViewID; // offset 0x4C, size 0x4 +}; + +#endif diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index e69de29bb..ecab26cdf 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -0,0 +1,280 @@ +#include "Speed/Indep/Src/Camera/CameraAI.hpp" +#include "Speed/Indep/Src/Camera/CameraMover.hpp" +#include "Speed/Indep/Src/Frontend/Database/FEDatabase.hpp" +#include "Speed/Indep/Src/Frontend/FEManager.hpp" +#include "Speed/Indep/Src/Interfaces/IBody.h" +#include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" +#include "Speed/Indep/Src/Misc/GameFlow.hpp" + +#include + +#include + +DECLARE_CONTAINER_TYPE(CameraAIAvoidables); + +struct Avoidables : public _STL::list > { + void *operator new(std::size_t size) { + return gFastMem.Alloc(size, nullptr); + } + + void operator delete(void *mem, std::size_t size) { + if (mem) { + gFastMem.Free(mem, size, nullptr); + } + } +}; + +static Avoidables *TheAvoidables; + +static float kJumpTimeMultiplier = 2.0f; +static float kEndJumpThreshold = 0.0f; +static float kEndJumpValue = -1.0f; +static float kEndPursuitThreshold = 0.0f; +static float kEndPursuitValue = -1.0f; + +// --- Director methods --- + +CameraAI::Director::Director(EVIEW_ID viewID) + : UTL::Collections::Listable(), // + mViewID(viewID), // + mDesiredMode(""), // + mAction(nullptr), // + mInputQ(false), // + mPrepareToEnableIce(false), // + mPursuitStartTime(0.0f), // + mJumpTime(0.0f), // + mIsCinematicMomement(false), // + mCinematicSlowdownSeconds(0.0f) { + Reset(); +} + +CameraAI::Director::~Director() { + ReleaseAction(); +} + +void CameraAI::Director::ReleaseAction() { + if (mAction != nullptr) { + delete mAction; + mAction = nullptr; + } +} + +void CameraAI::Director::Reset() { + mIsCinematicMomement = false; + mCinematicSlowdownSeconds = 0.0f; + mJumpTime = 0.0f; + mPursuitStartTime = 0.0f; + SetAction(Attrib::StringKey("DRIVE")); + if (mAction != nullptr) { + mAction->Reset(); + } +} + +void CameraAI::Director::JumpStart(float time) { + mJumpTime = time * kJumpTimeMultiplier; +} + +void CameraAI::Director::EndJumping() { + if (mJumpTime >= kEndJumpThreshold) { + return; + } + mJumpTime = kEndJumpValue; +} + +void CameraAI::Director::EndPursuitStart() { + if (mPursuitStartTime >= kEndPursuitThreshold) { + return; + } + mPursuitStartTime = kEndPursuitValue; +} + +CameraMover *CameraAI::Director::GetMover() { + if (mAction == nullptr) { + return nullptr; + } + return mAction->GetMover(); +} + +void CameraAI::Director::Update(float dT) { + if (!TheGameFlowManager.IsPaused() && mJumpTime > 0.0f) { + mJumpTime -= dT; + } + if (!FEManager::ShouldPauseSimulation(true) && mPursuitStartTime > 0.0f) { + mPursuitStartTime -= dT; + } + SelectAction(); + if (mAction != nullptr) { + if (mAction->GetName() == Attrib::StringKey("DRIVE")) { + mAction->SetSpecial(mCinematicSlowdownSeconds); + } + if (mAction != nullptr) { + mAction->Update(dT); + } + } +} + +void CameraAI::Director::SetAction(Attrib::StringKey desiredMode) { + // TODO +} + +void CameraAI::Director::SelectAction() { + // TODO +} + +void CameraAI::Director::TotaledStart() { + // TODO +} + +void CameraAI::Director::PursuitStart() { + // TODO +} + +// --- Free functions --- + +IPlayer *FindPlayer(EVIEW_ID id) { + const UTL::Collections::ListableSet::List &list = + UTL::Collections::ListableSet::GetList(PLAYER_LOCAL); + for (IPlayer *const *iter = list.begin(); iter != list.end(); ++iter) { + IPlayer *ip = *iter; + if (ip->GetControllerPort() == static_cast(id)) { + return ip; + } + } + return nullptr; +} + +CameraAI::Director *FindDirector(EVIEW_ID id) { + const CameraAI::Director::List &list = CameraAI::Director::GetList(); + for (CameraAI::Director *const *iter = list.begin(); iter != list.end(); ++iter) { + CameraAI::Director *cd = *iter; + if (cd->GetViewID() == id) { + return cd; + } + } + return nullptr; +} + +CameraAI::Director *FindDirector(unsigned int id) { + const CameraAI::Director::List &list = CameraAI::Director::GetList(); + for (CameraAI::Director *const *iter = list.begin(); iter != list.end(); ++iter) { + CameraAI::Director *cd = *iter; + IPlayer *iplayer = FindPlayer(cd->GetViewID()); + if (iplayer != nullptr) { + ISimable *isimable = iplayer->GetSimable(); + if (isimable != nullptr && isimable->GetWorldID() == id) { + return cd; + } + } + } + return nullptr; +} + +bool AreMomentCamerasEnabled() { + if (FEDatabase->IsSplitScreenMode()) { + if (FEDatabase->iNumPlayers == 2) { + return false; + } + } + if (!FEDatabase->IsLANMode() && !FEDatabase->IsOnlineMode()) { + return FEDatabase->GetGameplaySettings()->JumpCam; + } + return false; +} + +// --- CameraAI namespace functions --- + +void CameraAI::Update(float dT) { + unsigned int playercount = UTL::Collections::ListableSet::GetList(PLAYER_LOCAL).size(); + for (unsigned int player = 1; player <= playercount; ++player) { + EVIEW_ID viewID = static_cast(player); + IPlayer *iplayer = FindPlayer(viewID); + Director *cd = FindDirector(viewID); + if (cd == nullptr) { + if (iplayer != nullptr) { + cd = new ("CameraAI") Director(viewID); + } + } else if (iplayer == nullptr) { + delete cd; + } + } + const Director::List &list = Director::GetList(); + for (Director *const *iter = list.begin(); iter != list.end(); ++iter) { + Director *cd = *iter; + cd->Update(dT); + } +} + +void CameraAI::Reset() { + const Director::List &list = Director::GetList(); + for (Director *const *iter = list.begin(); iter != list.end(); ++iter) { + Director *cd = *iter; + cd->Reset(); + } +} + +void CameraAI::SetAction(EVIEW_ID viewID, const char *desiredMode) { + const Director::List &list = Director::GetList(); + for (Director *const *iter = list.begin(); iter != list.end(); ++iter) { + Director *cd = *iter; + if (cd->GetViewID() == viewID) { + cd->SetAction(Attrib::StringKey(desiredMode)); + } + } +} + +void CameraAI::MaybeKillPursuitCam(unsigned int id) { + Director *cd = FindDirector(id); + if (cd != nullptr) { + cd->EndPursuitStart(); + } +} + +void CameraAI::MaybeKillJumpCam(unsigned int id) { + Director *cd = FindDirector(id); + if (cd != nullptr) { + cd->EndJumping(); + } +} + +void CameraAI::Init() { + TheAvoidables = new Avoidables(); +} + +void CameraAI::Shutdown() { + if (TheAvoidables != nullptr) { + TheAvoidables->clear(); + delete TheAvoidables; + } + TheAvoidables = nullptr; + Director::List copy(Director::GetList()); + for (Director *const *iter = copy.begin(); iter != copy.end(); ++iter) { + Director *cd = *iter; + if (cd != nullptr) { + delete cd; + } + } +} + +void CameraAI::AddAvoidable(IBody *body) { + // TODO +} + +void CameraAI::RemoveAvoidable(IBody *body) { + // TODO +} + +void CameraAI::StartCinematicSlowdown(EVIEW_ID viewID, float seconds) { + // TODO +} + +void CameraAI::MaybeDoTotaledCam(IPlayer *iplayer) { + // TODO +} + +void CameraAI::MaybeDoPursuitCam(IVehicle *ivehicle) { + // TODO +} + +void CameraAI::MaybeDoJumpCam(ISimable *simable) { + // TODO +} diff --git a/src/Speed/Indep/Src/Camera/CameraAI.hpp b/src/Speed/Indep/Src/Camera/CameraAI.hpp index b4cad6624..ed629cad1 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.hpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.hpp @@ -5,15 +5,133 @@ #pragma once #endif +#include "Speed/Indep/Libs/Support/Utility/UCOM.h" +#include "Speed/Indep/Libs/Support/Utility/UCrc.h" +#include "Speed/Indep/Libs/Support/Utility/UListable.h" +#include "Speed/Indep/Src/Ecstasy/EcstasyData.hpp" +#include "Speed/Indep/Src/Input/ActionQueue.h" #include "Speed/Indep/Src/Interfaces/Simables/IVehicle.h" +#include "Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h" + +class CameraMover; +class IBody; +class ISimable; namespace CameraAI { +// total size: 0x18 +struct Action : public UTL::COM::Object, public UTL::COM::Factory { + Action() : UTL::COM::Object(0) {} + + virtual ~Action() {} + + virtual void Update(float dT) {} + virtual void Reset() {} + virtual const Attrib::StringKey &GetName() const = 0; + virtual Attrib::StringKey GetNext() const = 0; + virtual CameraMover *GetMover() = 0; + virtual void SetSpecial(float val) {} +}; + +// total size: 0x2C8 +class Director : public UTL::Collections::Listable { + public: + void *operator new(std::size_t size) { + return gFastMem.Alloc(size, nullptr); + } + + void operator delete(void *mem, std::size_t size) { + if (mem) { + gFastMem.Free(mem, size, nullptr); + } + } + + void *operator new(std::size_t size, const char *name) { + return gFastMem.Alloc(size, name); + } + + void operator delete(void *mem, const char *name) { + if (mem) { + gFastMem.Free(mem, 0, name); + } + } + + void operator delete(void *mem, std::size_t size, const char *name) { + if (mem) { + gFastMem.Free(mem, size, name); + } + } + + EVIEW_ID GetViewID() const { + return mViewID; + } + + Action *GetAction() { + return mAction; + } + + bool IsJumping() { + return mJumpTime > 0.0f; + } + + bool IsCinematicMomement() { + return mIsCinematicMomement; + } + + float GetCinematicSlowdown() { + return mCinematicSlowdownSeconds; + } + + void SetCinematicSlowdown(float seconds) { + mCinematicSlowdownSeconds = seconds; + } + + Director(EVIEW_ID viewID); + virtual ~Director(); + + void ReleaseAction(); + void Reset(); + void SetAction(Attrib::StringKey desiredMode); + void SelectAction(); + void TotaledStart(); + void JumpStart(float time); + void EndJumping(); + void PursuitStart(); + void EndPursuitStart(); + void Update(float dT); + CameraMover *GetMover(); + + private: + EVIEW_ID mViewID; // offset 0x4, size 0x4 + Attrib::StringKey mDesiredMode; // offset 0x8, size 0x10 + Action *mAction; // offset 0x18, size 0x4 + ActionQueue mInputQ; // offset 0x1C, size 0x294 + bool mPrepareToEnableIce; // offset 0x2B0, size 0x1 + float mPursuitStartTime; // offset 0x2B4, size 0x4 + float mJumpTime; // offset 0x2B8, size 0x4 + bool mIsCinematicMomement; // offset 0x2BC, size 0x1 + float mCinematicSlowdownSeconds; // offset 0x2C0, size 0x4 +}; + void Update(float dT); void Reset(); +void SetAction(EVIEW_ID viewID, const char *action); +void StartCinematicSlowdown(EVIEW_ID viewID, float seconds); +void Init(); +void Shutdown(); +void AddAvoidable(IBody *body); +void RemoveAvoidable(IBody *body); void MaybeDoTotaledCam(IPlayer *iplayer); void MaybeDoPursuitCam(IVehicle *ivehicle); +void MaybeKillPursuitCam(unsigned int handle); +void MaybeKillJumpCam(unsigned int handle); +void MaybeDoJumpCam(ISimable *simable); }; // namespace CameraAI +IPlayer *FindPlayer(EVIEW_ID viewID); +CameraAI::Director *FindDirector(EVIEW_ID viewID); +CameraAI::Director *FindDirector(unsigned int handle); +bool AreMomentCamerasEnabled(); + #endif diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp index 01a03099c..3075b95eb 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp @@ -4,6 +4,9 @@ float PredictAverageAir(float fSeconds, float *pHighest, float *pLongest, bool b_grounded_abort); float GetRecentCurvature(); +static float sPredictedAir; +static float sRecentCurvature; + static float ReplayNosScore(ICEAnchor *p_car) { float ret = 0.0f; @@ -166,3 +169,11 @@ void ClearRecentlyUsed() { } } // namespace ICEReplay + +float PredictAverageAir(float fSeconds, float *pHighest, float *pLongest, bool b_grounded_abort) { + return sPredictedAir; +} + +float GetRecentCurvature() { + return sRecentCurvature; +} diff --git a/src/Speed/Indep/Src/Camera/IDebugWatchCar.h b/src/Speed/Indep/Src/Camera/IDebugWatchCar.h new file mode 100644 index 000000000..71a777b40 --- /dev/null +++ b/src/Speed/Indep/Src/Camera/IDebugWatchCar.h @@ -0,0 +1,26 @@ +#ifndef CAMERA_IDEBUGWATCHCAR_H +#define CAMERA_IDEBUGWATCHCAR_H + +#ifdef EA_PRAGMA_ONCE_SUPPORTED +#pragma once +#endif + +#include "Speed/Indep/Libs/Support/Utility/UCOM.h" +#include "Speed/Indep/Libs/Support/Utility/UListable.h" + +class ISimable; + +class IDebugWatchCar : public UTL::COM::IUnknown, public UTL::Collections::Listable { + public: + static HINTERFACE _IHandle() { + return (HINTERFACE)_IHandle; + } + + IDebugWatchCar(UTL::COM::Object *owner) : UTL::COM::IUnknown(owner, _IHandle()) {} + + virtual ~IDebugWatchCar() {} + + virtual ISimable *GetSimable() = 0; +}; + +#endif diff --git a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp index e69de29bb..983c9ffb4 100644 --- a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp @@ -0,0 +1,41 @@ +#include "Speed/Indep/Src/Camera/Movers/SelectCar.hpp" + +SelectCarCameraMover::~SelectCarCameraMover() {} + +void SelectCarCameraMover::SetVRotateSpeed(float f) { + OrbitVSpeed = f; +} + +void SelectCarCameraMover::SetHRotateSpeed(float f) { + OrbitHSpeed = f; +} + +void SelectCarCameraMover::SetZoomSpeed(float f) { + RadiusSpeed = f; +} + +SelectCarCameraMover::SelectCarCameraMover(int view_id) : CameraMover(view_id) { + // TODO +} + +void SelectCarCameraMover::Update(float dT) { + // TODO +} + +void SelectCarCameraMover::SetCurrentOrientation(bVector3 &orbit, float roll, float fov, bVector3 &lookAt) { + // TODO +} + +void SelectCarCameraMover::SetDesiredOrientation(bVector3 &orbit, float roll, float fov, bVector3 &lookAt, float animSpeed, float damping, + int periods) { + // TODO +} + +float SelectCarCameraMover::FindBestAngleGoal(float start, float goal) { + // TODO + return 0.0f; +} + +void SelectCarCameraMover::CreateCameraMatrix(bMatrix4 *camera_matrix, SelectCarCameraData *camera_data) { + // TODO +} diff --git a/src/Speed/Indep/Src/Camera/Movers/SelectCar.hpp b/src/Speed/Indep/Src/Camera/Movers/SelectCar.hpp new file mode 100644 index 000000000..4a9a4d0fd --- /dev/null +++ b/src/Speed/Indep/Src/Camera/Movers/SelectCar.hpp @@ -0,0 +1,59 @@ +#ifndef CAMERA_MOVERS_SELECTCAR_H +#define CAMERA_MOVERS_SELECTCAR_H + +#ifdef EA_PRAGMA_ONCE_SUPPORTED +#pragma once +#endif + +#include "Speed/Indep/Src/Camera/CameraMover.hpp" + +struct SelectCarCameraData { + float OrbitVAngle; // offset 0x0, size 0x4 + float OrbitHAngle; // offset 0x4, size 0x4 + float Radius; // offset 0x8, size 0x4 + float RollAngle; // offset 0xC, size 0x4 + float FOV; // offset 0x10, size 0x4 + bVector3 LookAt; // offset 0x14, size 0x10 + + SelectCarCameraData() {} +}; + +// total size: 0x114 +class SelectCarCameraMover : public CameraMover { + public: + SelectCarCameraMover(int view_id); + ~SelectCarCameraMover() override; + + void Update(float dT) override; + + static void CreateCameraMatrix(bMatrix4 *camera_matrix, SelectCarCameraData *camera_data); + void SetVRotateSpeed(float f); + void SetHRotateSpeed(float f); + void SetZoomSpeed(float f); + void SetCurrentOrientation(bVector3 &orbit, float roll, float fov, bVector3 &lookAt); + void SetDesiredOrientation(bVector3 &orbit, float roll, float fov, bVector3 &lookAt, float animSpeed, float damping, int periods); + float FindBestAngleGoal(float start, float goal); + + float GetTotalAnimationTime() { return TotalAnimationTime; } + float GetCurrentAnimationTime() { return CurrentAnimationTime; } + float GetVAngle() { return CurrentCameraData.OrbitVAngle; } + float GetHAngle() { return CurrentCameraData.OrbitHAngle; } + float GetZoom() { return CurrentCameraData.Radius; } + + private: + int ControlMode; // offset 0x80, size 0x4 + int DramaticMode; // offset 0x84, size 0x4 + int LookingAtParts; // offset 0x88, size 0x4 + SelectCarCameraData CurrentCameraData; // offset 0x8C, size 0x24 + SelectCarCameraData StartAnimCameraData; // offset 0xB0, size 0x24 + SelectCarCameraData GoalAnimCameraData; // offset 0xD4, size 0x24 + float RadiusSpeed; // offset 0xF8, size 0x4 + float OrbitVSpeed; // offset 0xFC, size 0x4 + float OrbitHSpeed; // offset 0x100, size 0x4 + float Damping; // offset 0x104, size 0x4 + int Periods; // offset 0x108, size 0x4 + float CurrentAnimationTime; // offset 0x10C, size 0x4 + float TotalAnimationTime; // offset 0x110, size 0x4 +}; + +#endif diff --git a/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp b/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp index e69de29bb..9356544e5 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp @@ -0,0 +1,29 @@ +#include "Speed/Indep/Src/Camera/Movers/Showcase.hpp" + +ShowcaseCameraMover::~ShowcaseCameraMover() {} + +void ShowcaseCameraMover::ResetState() { + // TODO - accesses ICEData members through pCar +} + +ShowcaseCameraMover::ShowcaseCameraMover(int nView, CameraAnchor *p_car, bool flipSide) + : CameraMover(nView) { + // TODO +} + +void ShowcaseCameraMover::SetFromTweakables() { + // TODO +} + +void ShowcaseCameraMover::SetShowcaseCameraParams(float lat_ang, float up_ang, float dist, float carpos_bias_x, float carpos_bias_y, + float carpos_bias_z, float fov, float fd, float dof) { + // TODO +} + +void ShowcaseCameraMover::BuildPhotoCameraMatrix() { + // TODO +} + +void ShowcaseCameraMover::Update(float dT) { + // TODO +} diff --git a/src/Speed/Indep/Src/Camera/Movers/Showcase.hpp b/src/Speed/Indep/Src/Camera/Movers/Showcase.hpp new file mode 100644 index 000000000..b1e10ced9 --- /dev/null +++ b/src/Speed/Indep/Src/Camera/Movers/Showcase.hpp @@ -0,0 +1,34 @@ +#ifndef CAMERA_MOVERS_SHOWCASE_H +#define CAMERA_MOVERS_SHOWCASE_H + +#ifdef EA_PRAGMA_ONCE_SUPPORTED +#pragma once +#endif + +#include "Speed/Indep/Src/Camera/CameraMover.hpp" + +// total size: 0xEC +class ShowcaseCameraMover : public CameraMover { + public: + ShowcaseCameraMover(int nView, CameraAnchor *p_car, bool flipSide); + ~ShowcaseCameraMover() override; + + void SetFromTweakables(); + void SetShowcaseCameraParams(float lat_ang, float up_ang, float dist, float carpos_bias_x, float carpos_bias_y, float carpos_bias_z, float fov, float fd, float dof); + void BuildPhotoCameraMatrix(); + void ResetState() override; + void Update(float dT) override; + + private: + CameraAnchor *pCar; // offset 0x80, size 0x4 + float mLatAng; // offset 0x84, size 0x4 + float mUpAng; // offset 0x88, size 0x4 + float mDist; // offset 0x8C, size 0x4 + bVector3 mCarPosBias; // offset 0x90, size 0x10 + float mFOV; // offset 0xA0, size 0x4 + float mFd; // offset 0xA4, size 0x4 + float mDOF; // offset 0xA8, size 0x4 + bMatrix4 mCameraMatrix; // offset 0xAC, size 0x40 +}; + +#endif diff --git a/src/Speed/Indep/Src/Frontend/Database/FEDatabase.hpp b/src/Speed/Indep/Src/Frontend/Database/FEDatabase.hpp index e3b8fea94..3a41974f6 100644 --- a/src/Speed/Indep/Src/Frontend/Database/FEDatabase.hpp +++ b/src/Speed/Indep/Src/Frontend/Database/FEDatabase.hpp @@ -139,6 +139,10 @@ class AudioSettings { // total size: 0xC0 class OptionsSettings { public: + GameplaySettings *GetGameplaySettings() { + return &TheGameplaySettings; + } + eOptionsCategory CurrentCategory; // offset 0x0, size 0x4 VideoSettings TheVideoSettings; // offset 0x4, size 0x10 GameplaySettings TheGameplaySettings; // offset 0x14, size 0x20 @@ -278,6 +282,18 @@ class cFrontendDatabase { return FEGameMode & 1; } + bool IsOnlineMode() { + return FEGameMode & 0x40; + } + + bool IsLANMode() { + return FEGameMode & 8; + } + + GameplaySettings *GetGameplaySettings() { + return CurrentUserProfiles[0]->GetOptions()->GetGameplaySettings(); + } + unsigned char iNumPlayers; // offset 0x0, size 0x1 bool bComingFromBoot; // offset 0x4, size 0x1 bool bSavedProfileForMP; // offset 0x8, size 0x1 diff --git a/src/Speed/Indep/Src/World/WorldConn.h b/src/Speed/Indep/Src/World/WorldConn.h index f0301ef9c..c2a91ed2f 100644 --- a/src/Speed/Indep/Src/World/WorldConn.h +++ b/src/Speed/Indep/Src/World/WorldConn.h @@ -18,6 +18,7 @@ namespace WorldConn { // total size: 0x10 class Reference { public: + Reference() : mWorldID(0), mMatrix(nullptr), mVelocity(nullptr), mAcceleration(nullptr) {} Reference(unsigned int); ~Reference(); void Set(unsigned int); From 544e9135d7f44c35cbd0ef92c1ce5821a24f8117 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 10 Mar 2026 22:32:55 +0100 Subject: [PATCH 005/691] 25% --- src/Speed/Indep/Src/Camera/CameraAI.cpp | 23 ++- src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp | 186 ++++++++++++++++++ src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp | 108 ++++++++++ .../Indep/Src/Camera/ICE/ICEOverlays.cpp | 61 ++++++ .../Indep/Src/Camera/Movers/SelectCar.cpp | 2 +- .../Indep/Src/Camera/Movers/Showcase.cpp | 2 +- .../Indep/Src/Camera/Movers/TrackCop.cpp | 5 + 7 files changed, 383 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index ecab26cdf..5222facf0 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -2,6 +2,9 @@ #include "Speed/Indep/Src/Camera/CameraMover.hpp" #include "Speed/Indep/Src/Frontend/Database/FEDatabase.hpp" #include "Speed/Indep/Src/Frontend/FEManager.hpp" +#include "Speed/Indep/Src/Generated/Messages/MGamePlayMoment.h" +#include "Speed/Indep/Src/Generated/Messages/MICECameraFinished.h" +#include "Speed/Indep/Src/Generated/Messages/MMiscSound.h" #include "Speed/Indep/Src/Interfaces/IBody.h" #include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" #include "Speed/Indep/Src/Misc/GameFlow.hpp" @@ -122,11 +125,27 @@ void CameraAI::Director::SelectAction() { } void CameraAI::Director::TotaledStart() { - // TODO + mDesiredMode = Attrib::StringKey("TOTALED"); + mJumpTime = 0.0f; + SetAction(mDesiredMode); } void CameraAI::Director::PursuitStart() { - // TODO + if (mPursuitStartTime <= 0.0f) { + UMath::Vector4 position = UMath::Vector4::kZero; + UMath::Vector4 vector = UMath::Vector4::kZero; + UMath::Vector4 velocity = UMath::Vector4::kZero; + MGamePlayMoment msg(position, vector, velocity, 0, + Attrib::StringHash32("pursuit")); + msg.Deliver(); + + MMiscSound snd(1); + snd.SetID(Attrib::StringHash32("play")); + snd.Deliver(); + + mPursuitStartTime = 5.0f; + mCinematicSlowdownSeconds = 3.0f; + } } // --- Free functions --- diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp index a6cf47c3d..cfc980da2 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp @@ -4,7 +4,9 @@ #include "Speed/Indep/Src/Animation/AnimDirectory.hpp" #include "Speed/Indep/Src/Interfaces/SimActivities/INIS.h" #include "Speed/Indep/Src/Misc/Timer.hpp" +#include "Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h" #include "Speed/Indep/bWare/Inc/Strings.hpp" +#include "Speed/Indep/bWare/Inc/bPrintf.hpp" #include "Speed/Indep/bWare/Inc/bWare.hpp" extern Timer RealTimer; @@ -13,6 +15,9 @@ extern AnimDirectory *TheAnimDirectory; struct ICEAnchor; ICEAnchor *GetICEAnchor(); +static float GetGroundElevation(const ICE::Vector3 *position); +static void ICEGetPlayerCarTransform(ICE::Matrix4 *matrix); + namespace ICEReplay { ICETrack *ChooseGoodCamera(ICEAnchor *p_car, ICEGroup *p_replay_cameras, int num_replay_cameras); } @@ -409,6 +414,148 @@ void ICEManager::ChooseReplayCamera() { } } +float ICEManager::GetAnimElevationFixup(ICE::Vector3 *position) { + float elevation = GetGroundElevation(position); + if (elevation != 0.0f) { + return fAnimElevation - elevation; + } + return 0.0f; +} + +void ICEManager::FixAnimElevation(ICE::Vector3 *position) { + // TODO +} + +void ICEManager::SetGenericCameraToPlay(const char *group_name, const char *track_name) { + nPlayGenericGroupHash = Attrib::StringHash32(group_name); + bStrNCpy(nPlayGenericTrackName, track_name, 14); +} + +ICEData *ICEManager::GetCameraData(unsigned int scene_hash, int camTrack) { + ICEGroup *group = GetNisCameraGroup(scene_hash); + if (group != 0) { + char name[14]; + bSPrintf(name, "cam%d", camTrack); + pPlaybackTrack = group->GetTrack(name); + if (pPlaybackTrack != 0) { + return pPlaybackTrack->GetCameraData(0, 0, 0); + } + } + return 0; +} + +ICEData *ICEManager::GetCameraData(ICETrack **p_track, float *p_start, float *p_end) { + if (p_track != 0) { + *p_track = pPlaybackTrack; + } + if (pPlaybackTrack != 0) { + return pPlaybackTrack->GetCameraData(p_start, p_end, 0); + } + return 0; +} + +ICEData *ICEManager::GetNeighbour(ICEData *data, int key, ICETrack *track) { + int camera = track->GetKeyNumber(data); + camera += key; + return track->GetKey(camera); +} + +ICEGroup *ICEManager::GetCameraGroup(ICEContext context, unsigned int handle) { + int num_groups = 0; + ICEGroup *groups = 0; + + switch (context) { + case eDCE_NIS: + num_groups = nNisCameras; + groups = pNisCameras; + break; + case eDCE_FMV: + num_groups = nFmvCameras; + groups = pFmvCameras; + break; + case eDCE_REPLAY: + num_groups = nReplayCameras; + groups = pReplayCameras; + break; + case eDCE_GENERIC: + num_groups = nGenericCameras; + groups = pGenericCameras; + break; + default: + break; + } + + for (int i = 0; i < num_groups; i++) { + ICEGroup *group = &groups[i]; + if (group->GetHandle() == handle) { + return group; + } + } + return 0; +} + +ICEGroup *ICEManager::AddCameraGroup(ICEContext context, unsigned int handle) { + // TODO + return 0; +} + +void ICEManager::LoadCameraSet(bChunk *chunk) { + // TODO +} + +void ICEManager::UnloadCameraSet(bChunk *chunk) { + // TODO +} + +void ICEManager::LoadCameraShakes(bChunk *chunk) { + // TODO +} + +void ICEManager::UnloadCameraShakes(bChunk *chunk) { + // TODO +} + +void ICEManager::Init() { + // TODO +} + +void ICEManager::Resolve() { + // TODO +} + +bool ICEManager::ChooseCameraPlaybackTrack() { + // TODO + return false; +} + +int ChooseGoodSceneCameraTrackIndex(unsigned int scene_hash, const ICE::Matrix4 *scene_origin) { + // TODO + return 0; +} + +void ICEManager::GetSlope(ICE::Vector3 *eye, ICE::Vector3 *look, float *fov, float *dutch, ICEData *data, int key, ICETrack *track) { + // TODO +} + +static float GetGroundElevation(const ICE::Vector3 *position) { + // TODO + return 0.0f; +} + +static void ICEGetPlayerCarTransform(ICE::Matrix4 *matrix) { + // TODO +} + +int LoaderICECameras(bChunk *pChunk) { + // TODO + return 0; +} + +int UnloaderICECameras(bChunk *pChunk) { + // TODO + return 0; +} + namespace ICE { ICEScene *FindAnimScene() { @@ -431,4 +578,43 @@ unsigned int GetSceneCount() { return directory->GetSceneCount(); } +unsigned int GetSceneHash(unsigned int slot) { + if (TheAnimDirectory == 0 || TheAnimDirectory->GetSceneCount() <= slot) { + return 0; + } + AnimSceneLoadInfo info; + TheAnimDirectory->GetSceneLoadInfo(slot, info); + return info.mAnimSceneHash; +} + +void GetNameOfSceneHash(unsigned int hash, char *name) { + *name = 0; + if (TheAnimDirectory != 0) { + TheAnimDirectory->GetNameOfSceneHash(hash, name); + } +} + +void FireEventTag(int key) { + INIS *nis = INIS::Get(); + if (nis != 0) { + char tagName[64]; + bSPrintf(tagName, "key_%d", key); + nis->FireEventTag(tagName); + } +} + } // namespace ICE + +void ICECompleteEventTags() { + ICETrack *p_track = 0; + float fParameter0; + float fParameter1; + TheICEManager.GetCameraData(&p_track, &fParameter0, &fParameter1); + int key = TheICEManager.GetCameraIndex((fParameter0 + fParameter1) * 0.5f, p_track); + if (p_track != 0) { + int keyCount = p_track->GetNumKeys(); + while (++key < keyCount) { + ICE::FireEventTag(key); + } + } +} diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp index 269db9599..fb320dcc8 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp @@ -8,12 +8,25 @@ #include "Speed/Indep/Src/Camera/ICE/ICEData.hpp" #include "Speed/Indep/bWare/Inc/bList.hpp" +enum ICEContext { + eDCE_NIS = 0, + eDCE_FMV = 1, + eDCE_REPLAY = 2, + eDCE_GENERIC = 3, + eDCE_NUM_CONTEXTS = 4, + eDCE_NOCONTEXT = 4, +}; + struct ICEGroup { // total size: 0x14 void FlushAllocatedTracks(); struct ICETrack *GetTrack(int n); struct ICETrack *GetTrack(char *s); + unsigned int GetHandle() { + return Handle; + } + unsigned int Handle; // offset 0x0, size 0x4 int Context; // offset 0x4, size 0x4 int NumTracks; // offset 0x8, size 0x4 @@ -25,9 +38,53 @@ struct ICETrack : public bTNode { void PlatEndianSwap(); int GetContext(); int GetKeyNumber(float f_param); + int GetKeyNumber(ICEData *data); float GetParameter(); struct ICEData *GetCameraData(float *p_start, float *p_end, float *p_current); + int GetNumKeys() { + return NumKeys; + } + + ICEData *GetKey(int n) { + int clamped = n; + if (clamped < 0) clamped = 0; + if (clamped >= NumKeys) clamped = NumKeys - 1; + return &Keys[clamped]; + } + + char *GetName() { + return Name; + } + + ICEGroup *GetGroup() { + return Group; + } + + float GetStart() { + return Start; + } + + float GetLength() { + return Length; + } + + bool IsAllocated() { + return Allocated != 0; + } + + void SetGroup(ICEGroup *g) { + Group = g; + } + + void SetStart(float s) { + Start = s; + } + + void SetLength(float l) { + Length = l; + } + ICEGroup *Group; // offset 0x8, size 0x4 float Start; // offset 0xC, size 0x4 float Length; // offset 0x10, size 0x4 @@ -88,8 +145,59 @@ class ICEManager { return nState >= 1; } + bool IsEditorOff() { + return nState == 0; + } + + ICETrack *GetPlaybackTrack() { + return pPlaybackTrack; + } + + void SetSmoothExit(bool smooth) { + bSmoothExit = smooth; + } + + bool IsSmoothExit() { + return bSmoothExit; + } + + void SetUseRealTime(bool val) { + bUseRealTime = val; + } + + float IsUsingRealTime() { + return bUseRealTime; + } + + float GetParameterLength() { + return fParameterLength; + } + + bool IsGenericCameraPlaying() { + return nPlayGenericGroupHash != 0; + } + + float GetAnimElevationFixup(ICE::Vector3 *position); + void SetupAnimElevation(); void FixAnimElevation(ICE::Vector3 *position); + int ChooseGoodSceneCameraTrackIndex(unsigned int scene_hash, const ICE::Matrix4 *scene_origin); + void SetGenericCameraToPlay(const char *group_name, const char *track_name); + ICEGroup *GetCurrentGroup(); + unsigned int GetRelativeShakeType(unsigned int shake_type, int inc); + char *GetShakeTypeName(unsigned int shake_type); + ICETrack *GetCurrentTrack(); + bool ChooseCameraPlaybackTrack(); + ICEData *GetCameraData(ICETrack **p_track, float *p_start, float *p_end); + ICEData *GetNeighbour(ICEData *data, int key, ICETrack *track); + void GetSlope(ICE::Vector3 *eye, ICE::Vector3 *look, float *fov, float *dutch, ICEData *data, int key, ICETrack *track); + ICEGroup *AddCameraGroup(ICEContext context, unsigned int handle); + ICEGroup *GetCameraGroup(ICEContext context, unsigned int handle); + void LoadCameraSet(bChunk *chunk); + void UnloadCameraSet(bChunk *chunk); + void LoadCameraShakes(bChunk *chunk); + void UnloadCameraShakes(bChunk *chunk); + private: float GetParameter(int i, ICETrack *track); float GetIntervalSize(ICEData *data, ICETrack *track); diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEOverlays.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEOverlays.cpp index e69de29bb..6b299c82e 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEOverlays.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEOverlays.cpp @@ -0,0 +1,61 @@ +// ICE Overlay system + +struct cFEng { + static cFEng *Get(); + void PushNoControlPackage(const char *name, int priority); + void PopNoControlPackage(const char *name); + bool IsPackagePushed(const char *name); +}; + +struct ELoadingScreenOff { + ELoadingScreenOff(); +}; + +struct OverlayEntry { + unsigned char id; + char pad[3]; + const char *name; +}; + +static const int NUM_OVERLAYS = 5; +extern OverlayEntry gIceOverlays[NUM_OVERLAYS]; +static unsigned char gOverlay; + +static int GetOverlayIndex(unsigned char overlay) { + for (int i = 0; i < NUM_OVERLAYS; i++) { + if (gIceOverlays[i].id == overlay) { + return i; + } + } + return 0; +} + +namespace ICE { + +char *GetOverlayName(unsigned char overlay) { + int index = GetOverlayIndex(overlay); + return const_cast(gIceOverlays[index].name); +} + +void ShowOverlay(unsigned char overlay) { + if (overlay != 0) { + if ((gOverlay & 0x7f) == 0 || (gOverlay & 0x80) != 0) { + new ELoadingScreenOff(); + gOverlay = overlay; + cFEng::Get()->PushNoControlPackage(GetOverlayName(overlay), 0x67); + } + } +} + +void HideOverlay() { + if ((gOverlay & 0x7f) != 0) { + if (!cFEng::Get()->IsPackagePushed(GetOverlayName(gOverlay & 0x7f))) { + gOverlay = gOverlay | 0x80; + } else { + cFEng::Get()->PopNoControlPackage(GetOverlayName(gOverlay & 0x7f)); + gOverlay = 0; + } + } +} + +} // namespace ICE \ No newline at end of file diff --git a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp index 983c9ffb4..dd1be5c4b 100644 --- a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp @@ -14,7 +14,7 @@ void SelectCarCameraMover::SetZoomSpeed(float f) { RadiusSpeed = f; } -SelectCarCameraMover::SelectCarCameraMover(int view_id) : CameraMover(view_id) { +SelectCarCameraMover::SelectCarCameraMover(int view_id) : CameraMover(view_id, CM_SELECT_CAR) { // TODO } diff --git a/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp b/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp index 9356544e5..7d7474a65 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp @@ -7,7 +7,7 @@ void ShowcaseCameraMover::ResetState() { } ShowcaseCameraMover::ShowcaseCameraMover(int nView, CameraAnchor *p_car, bool flipSide) - : CameraMover(nView) { + : CameraMover(nView, CM_SHOWCASE) { // TODO } diff --git a/src/Speed/Indep/Src/Camera/Movers/TrackCop.cpp b/src/Speed/Indep/Src/Camera/Movers/TrackCop.cpp index e69de29bb..9af000b1e 100644 --- a/src/Speed/Indep/Src/Camera/Movers/TrackCop.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/TrackCop.cpp @@ -0,0 +1,5 @@ +#include "Speed/Indep/Src/Camera/CameraMover.hpp" + +static float CrossXY(const bVector3 *v1, const bVector3 *v2) { + return v1->x * v2->y - v1->y * v2->x; +} From 114782e1ccca84b295e032b9868e8302791d4bc3 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 10 Mar 2026 23:21:12 +0100 Subject: [PATCH 006/691] 35% --- src/Speed/Indep/Src/Camera/Camera.hpp | 4 +- src/Speed/Indep/Src/Camera/CameraAI.cpp | 16 +- src/Speed/Indep/Src/Camera/CameraMover.cpp | 153 ++++ src/Speed/Indep/Src/Camera/CameraMover.hpp | 129 +++ src/Speed/Indep/Src/Camera/ICE/ICEData.cpp | 41 + src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp | 1 + src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp | 4 + src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 832 ++++++++++++++++++ src/Speed/Indep/Src/Camera/Movers/Cubic.cpp | 573 ++++++++++++ .../Indep/Src/Camera/Movers/DebugWorld.cpp | 285 ++++++ .../Indep/Src/Camera/Movers/TrackCar.cpp | 84 ++ src/Speed/Indep/Src/Ecstasy/Ecstasy.hpp | 4 + src/Speed/Indep/Src/Misc/Table.hpp | 52 +- src/Speed/Indep/Src/Misc/Timer.hpp | 4 + src/Speed/Indep/Src/World/RaceParameters.hpp | 4 + src/Speed/Indep/Src/World/World.hpp | 1 + src/Speed/Indep/Tools/Inc/ConversionUtil.hpp | 69 ++ src/Speed/Indep/bWare/Inc/bMath.hpp | 2 + 18 files changed, 2241 insertions(+), 17 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Camera.hpp b/src/Speed/Indep/Src/Camera/Camera.hpp index dfab4fae0..116cd31de 100644 --- a/src/Speed/Indep/Src/Camera/Camera.hpp +++ b/src/Speed/Indep/Src/Camera/Camera.hpp @@ -217,7 +217,9 @@ class Camera { CurrentKey.FarZ = far_z; } - // float GetNearZ() {} + float GetNearZ() { + return CurrentKey.NearZ; + } // float GetFarZ() {} diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index 5222facf0..aefeaeddf 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -13,21 +13,7 @@ #include -DECLARE_CONTAINER_TYPE(CameraAIAvoidables); - -struct Avoidables : public _STL::list > { - void *operator new(std::size_t size) { - return gFastMem.Alloc(size, nullptr); - } - - void operator delete(void *mem, std::size_t size) { - if (mem) { - gFastMem.Free(mem, size, nullptr); - } - } -}; - -static Avoidables *TheAvoidables; +extern Avoidables *TheAvoidables; static float kJumpTimeMultiplier = 2.0f; static float kEndJumpThreshold = 0.0f; diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 893f322e6..16d06b931 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -2,6 +2,7 @@ #include "CameraAI.hpp" #include "Speed/Indep/Src/Frontend/Database/FEDatabase.hpp" #include "Speed/Indep/Src/Frontend/FEManager.hpp" +#include "Speed/Indep/Src/Interfaces/IBody.h" #include "Speed/Indep/Src/Interfaces/SimActivities/INIS.h" #include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" #include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" @@ -12,6 +13,22 @@ #include "Speed/Indep/Src/World/TrackStreamer.hpp" #include "Speed/Indep/bWare/Inc/bFunk.hpp" +DECLARE_CONTAINER_TYPE(CameraAIAvoidables); + +struct Avoidables : public _STL::list > { + void *operator new(std::size_t size) { + return gFastMem.Alloc(size, nullptr); + } + + void operator delete(void *mem, std::size_t size) { + if (mem) { + gFastMem.Free(mem, size, nullptr); + } + } +}; + +Avoidables *TheAvoidables; + extern int WeHaveCheckedIfJR2ServerExists; extern int DisablePrecullerCounter; extern int JR2ServerExists; @@ -571,6 +588,82 @@ float CameraMover::MinDistToWall() { return 0.7f; } +bool CameraMover::EnforceMinGapToWalls(WCollider *collider, bVector3 *pCarPos, bVector3 *pCameraPos, bVector4 *pAdjust) { + bool bViolates = false; + bVector3 vAdjust(0.0f, 0.0f, 0.0f); + + { + float fovScale = bClamp(bAngToDeg(pCamera->GetFieldOfView()) * (1.0f / 180.0f) * 2.0f, 0.0f, 1.0f); + + bVector3 camDir = *pCarPos - *pCameraPos; + float camDist = bLength(&camDir); + + if (camDist >= 0.1f) { + bVector3 camVec = bNormalize(camDir); + bVector3 upVec(0.0f, 1.0f, 0.0f); + bVector3 leftVec; + bCross(&leftVec, &upVec, &camVec); + + const int kProbeSize = 2; + bVector3 camVecProbe[2]; + + float sideMargin = fovScale * camDist * 0.5f * 0.85f; + bScaleAdd(&camVecProbe[0], &camDir, &leftVec, sideMargin); + bScaleAdd(&camVecProbe[1], &camDir, &leftVec, -sideMargin); + + float clearance = 0.0f; + for (int i = 0; i < kProbeSize; ++i) { + bVector3 probeVec; + bNormalize(&probeVec, &camVecProbe[i]); + + bVector3 vCameraPosBackClearance; + bScaleAdd(&vCameraPosBackClearance, pCameraPos, &probeVec, -0.5f); + + UMath::Vector4 camSeg[2]; + eUnSwizzleWorldVector(*pCarPos, reinterpret_cast(camSeg[0])); + eUnSwizzleWorldVector(vCameraPosBackClearance, reinterpret_cast(camSeg[1])); + camSeg[0].w = 0.0f; + camSeg[1].w = 0.0f; + + WCollisionMgr::WorldCollisionInfo cInfo; + WCollisionMgr collision_mgr(0, 3); + + if (collision_mgr.CheckHitWorld(camSeg, cInfo, 2)) { + bViolates = true; + bVector3 collisionPt; + bVector3 collisionNorm; + eSwizzleWorldVector(reinterpret_cast(cInfo.fCollidePt), collisionPt); + eSwizzleWorldVector(reinterpret_cast(cInfo.fNormal), collisionNorm); + + float dot = camDir.x * collisionNorm.x + camDir.y * collisionNorm.y + camDir.z * collisionNorm.z; + float normalFactor = (1.0f - bAbs(dot)) * 2.0f + 1.0f; + float oldDist = bDistBetween(pCarPos, &vCameraPosBackClearance); + float newDist = bDistBetween(pCarPos, &collisionPt); + float newClearance = (oldDist - newDist) * normalFactor; + if (clearance < newClearance) { + clearance = newClearance; + } + } + } + + float fSmoothed = (fAccumulatedClearance + clearance) * 0.5f; + fAccumulatedClearance = fAccumulatedClearance + (clearance - fSmoothed); + if (0.0f < fSmoothed) { + vAdjust.x = camVec.x * fSmoothed; + vAdjust.y = camVec.y * fSmoothed; + vAdjust.z = camVec.z * fSmoothed; + } + + pAdjust->w = 0.0f; + pAdjust->x = vAdjust.x; + pAdjust->y = vAdjust.y; + pAdjust->z = vAdjust.z; + } + } + + return bViolates; +} + unsigned short CameraMover::GetLookbackAngle() { return 0; } @@ -752,6 +845,66 @@ double CameraMover::AdjustHeightAroundCar(const bVector3 *car_pos, bVector3 *pEy return adjust; } +bVector3 *CameraMover::DutchAroundCar(bVector3 *pCarPos, bVector3 *pCarVelocity) { + static bVector3 ret(0.0f, 0.0f, 0.0f); + + ret.x = 0.0f; + ret.y = 0.0f; + ret.z = 0.0f; + + { + _STL::list >::const_iterator iter; + + for (iter = TheAvoidables->begin(); iter != TheAvoidables->end(); ++iter) { + IBody *car = *iter; + UMath::Matrix4 umatrix; + bMatrix4 matrix; + + car->GetTransform(umatrix); + eSwizzleWorldMatrix(reinterpret_cast(umatrix), matrix); + + const bVector3 *car_position = reinterpret_cast(&matrix.v3); + bVector3 eye_to_car; + bSub(&eye_to_car, car_position, pCarPos); + float gap_squared = bDot(&eye_to_car, &eye_to_car); + + if (gap_squared > 100.0f && gap_squared < 10000.0f) { + bVector3 unitEyeVelocity; + bNormalize(&eye_to_car, &eye_to_car); + bNormalize(&unitEyeVelocity, pCarVelocity); + + float dot = bDot(&eye_to_car, &unitEyeVelocity); + + if (dot > 0.5f) { + float gap_factor = bClamp(1000.0f / gap_squared, 0.0f, 1.0f); + + UMath::Vector3 uvelocity; + car->GetLinearVelocity(uvelocity); + bVector3 velocity; + eSwizzleWorldVector(reinterpret_cast(uvelocity), velocity); + + float vel_diff = bDistBetween(pCarVelocity, &velocity) - 5.0f; + float vel_factor = bClamp(vel_diff * 0.1f, 0.0f, 1.0f); + + bVector3 unitVelocity; + bNormalize(&unitVelocity, &velocity); + bNormalize(&unitEyeVelocity, pCarVelocity); + + float vel_dot = bDot(&unitEyeVelocity, &unitVelocity); + float dot_factor = 0.0f; + if (vel_dot < 0.0f) { + dot_factor = -vel_dot; + } + + bScaleAdd(&ret, &ret, &eye_to_car, gap_factor * (vel_factor + dot_factor)); + } + } + } + } + + return &ret; +} + int CameraMover::MinGapCars(bMatrix4 *pMatrix, bVector3 *pLook, bVector3 *pForward) { bMatrix4 inv_matrix; bVector3 projection; diff --git a/src/Speed/Indep/Src/Camera/CameraMover.hpp b/src/Speed/Indep/Src/Camera/CameraMover.hpp index 44321dd8d..fde00a190 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.hpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.hpp @@ -16,6 +16,7 @@ class eView; class tCubic3D; +class ActionQueue; template class tAverage; struct tCubic1D { @@ -73,6 +74,8 @@ struct tCubic1D { flags = f; } + void Update(float fSeconds, float fDClamp, float fDDClamp); + void Snap() { Val = ValDesired; dVal = dValDesired; @@ -120,6 +123,20 @@ struct tCubic3D { y.Snap(); z.Snap(); } + + void SetDuration(const float t) { + x.SetDuration(t); + y.SetDuration(t); + z.SetDuration(t); + } + + void SetDuration(const float tx, const float ty, const float tz) { + x.SetDuration(tx); + y.SetDuration(ty); + z.SetDuration(tz); + } + + void Update(float fSeconds, float fDClamp, float fDDClamp); }; struct Bezier { @@ -166,6 +183,10 @@ class CameraAnchor { return &mGeomPos; } + bVector3 *GetGeometryPosition() { + return &mGeomPos; + } + const bVector3 *GetVelocity() const { return &mVelocity; } @@ -210,6 +231,26 @@ class CameraAnchor { return mWorldID; } + bool IsTouchingGround() const { + return mIsTouchingGround; + } + + bool IsGearChanging() const { + return mIsGearChanging; + } + + float GetCollisionDamping() const { + return mCollisionDamping; + } + + float GetDrift() const { + return mDrift; + } + + bVector3 *GetUpVector() { + return reinterpret_cast(&mGeomRot.v1); + } + void Update(float dT, const bMatrix4 &matrix, const bVector3 &velocity, const bVector3 &forward); void SetModel(int model); POV *GetPov(int pov_type); @@ -305,6 +346,8 @@ class CameraMover : public bTNode, public WCollisionMgr::ICollision double AdjustHeightAroundCar(const bVector3 *car_pos, bVector3 *pEye, bVector3 *pForward); int MinGapCars(bMatrix4 *pMatrix, bVector3 *pLook, bVector3 *pForward); int MinGapTopology(bMatrix4 *pMatrix, bVector3 *pLook); + bool EnforceMinGapToWalls(WCollider *collider, bVector3 *pCarPos, bVector3 *pCameraPos, bVector4 *pAdjust); + bVector3 *DutchAroundCar(bVector3 *pPos, bVector3 *pVelocity); void FovCubicInit(tCubic1D *cubic); void EyeCubicInit(tCubic3D *eye, bMatrix4 *matrix, bVector3 *target); void LookCubicInit(tCubic3D *look, bMatrix4 *matrix, bVector3 *target); @@ -330,6 +373,35 @@ class CameraMover : public bTNode, public WCollisionMgr::ICollision void CameraMoverRestartRace(); +// total size: 0xB0 +struct CubicPovData { + float fEyeDuration; // offset 0x0, size 0x4 + float fLookDuration; // offset 0x4, size 0x4 + float fFovDuration; // offset 0x8, size 0x4 + float fUpDuration; // offset 0xC, size 0x4 + bVector3 vUpAccel; // offset 0x10, size 0x10 + bVector3 vUpAccelMin; // offset 0x20, size 0x10 + bVector3 vUpAccelMax; // offset 0x30, size 0x10 + bVector3 vEyeAccel; // offset 0x40, size 0x10 + bVector3 vEyeAccelMin; // offset 0x50, size 0x10 + bVector3 vEyeAccelMax; // offset 0x60, size 0x10 + bVector3 vLookAccel; // offset 0x70, size 0x10 + bVector3 vLookAccelMin; // offset 0x80, size 0x10 + bVector3 vLookAccelMax; // offset 0x90, size 0x10 + bVector3 vForwardDuration; // offset 0xA0, size 0x10 + + bVector3 *GetUpAccel() { return &vUpAccel; } + bVector3 *GetUpAccelMin() { return &vUpAccelMin; } + bVector3 *GetUpAccelMax() { return &vUpAccelMax; } + bVector3 *GetEyeAccel() { return &vEyeAccel; } + bVector3 *GetEyeAccelMin() { return &vEyeAccelMin; } + bVector3 *GetEyeAccelMax() { return &vEyeAccelMax; } + bVector3 *GetLookAccel() { return &vLookAccel; } + bVector3 *GetLookAccelMin() { return &vLookAccelMin; } + bVector3 *GetLookAccelMax() { return &vLookAccelMax; } + bVector3 *GetForwardDuration() { return &vForwardDuration; } +}; + class CubicCameraMover : public CameraMover { public: CubicCameraMover(int nView, CameraAnchor *pCar, int pov_type, bool disable_lag, bool look_back, bool perfect_focus, bool snap_next); @@ -353,6 +425,8 @@ class CubicCameraMover : public CameraMover { void MakeSpace(bMatrix4 *pMatrix); void CameraAccelCurve(bVector3 *pAccel); void CameraSpeedHug(bVector3 *pForward); + bool IsUnderVehicle(); + void SetDesired(bMatrix4 *pCarToWorld, POV *pov, CubicPovData *pov_data, bool bSnapForward); private: CameraAnchor *pCar; // offset 0x80, size 0x4 @@ -439,4 +513,59 @@ class TrackCopCameraMover : public CameraMover { void Init(); }; +enum JoystickPort { + JOYSTICK_PORT_NONE = -1, + JOYSTICK_PORT1 = 0, + JOYSTICK_PORT2 = 1, + JOYSTICK_PORT3 = 2, + JOYSTICK_PORT4 = 3, + JOYSTICK_PORT_ALL = 4, +}; + +class DebugWorldCameraMover : public CameraMover { + public: + DebugWorldCameraMover(int view_id, const bVector3 *start_position, const bVector3 *start_direction, JoystickPort jp); + ~DebugWorldCameraMover() override; + + void JoyHandler(); + void Update(float dT) override; + + static void SetEye(const bVector3 &eye) { + Eye = eye; + } + + static void SetLook(const bVector3 &look) { + Look = look; + } + + static const bVector3 &GetLook() { + return Look; + } + + static const bVector3 &GetEye() { + return Eye; + } + + static bVector3 Eye; + static bVector3 Look; + static bVector3 Up; + static float TurboSpeed; + static float SuperTurboSpeed; + static int TurboOn; + static int SuperTurboOn; + + private: + float HeightInc; // offset 0x80, size 0x4 + float ForwardInc; // offset 0x84, size 0x4 + float ForwardAnalogInc; // offset 0x88, size 0x4 + float StrafeInc; // offset 0x8C, size 0x4 + short TurnHInc; // offset 0x90, size 0x2 + short TurnVInc; // offset 0x92, size 0x2 + float RoadNetworkXInc; // offset 0x94, size 0x4 + float RoadNetworkYInc; // offset 0x98, size 0x4 + JoystickPort JoyPort; // offset 0x9C, size 0x4 + float PrevNearZ; // offset 0xA0, size 0x4 + ActionQueue *mActionQ; // offset 0xA4, size 0x4 +}; + #endif diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEData.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEData.cpp index d28a52061..7d45ab24a 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEData.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEData.cpp @@ -1,5 +1,6 @@ #include "ICEManager.hpp" #include "Speed/Indep/bWare/Inc/bWare.hpp" +#include "Speed/Indep/Libs/Support/Utility/UMath.h" bool bMirrorICEData; @@ -49,3 +50,43 @@ void ICEData::GetLook(int i, ICE::Vector3 *p) { TheICEManager.FixAnimElevation(p); } } + +namespace ICE { + +bool KeysSharedSpace(ICEData *p1, int n1, ICEData *p2, int n2); + +bool KeysShared(ICEData *p1, int n1, ICEData *p2, int n2) { + if (UMath::Abs(p1->fTangentLength[n1] - p2->fTangentLength[n2]) > 0.001f) { + return false; + } + if (UMath::Abs(p1->fDutch[n1] - p2->fDutch[n2]) > 0.001f) { + return false; + } + if (UMath::Abs(p1->fLens[n1] - p2->fLens[n2]) > 0.001f) { + return false; + } + return KeysSharedSpace(p1, n1, p2, n2); +} + +bool KeysSharedSpace(ICEData *p1, int n1, ICEData *p2, int n2) { + if (p1->nType != p2->nType) { + return false; + } + if (p1->nSpaceEye != p2->nSpaceEye) { + return false; + } + if (p1->nSpaceLook != p2->nSpaceLook) { + return false; + } + for (int i = 0; i < 3; i++) { + if (UMath::Abs(p1->vEye[n1][i] - p2->vEye[n2][i]) > 0.001f) { + return false; + } + if (UMath::Abs(p1->vLook[n1][i] - p2->vLook[n2][i]) > 0.001f) { + return false; + } + } + return true; +} + +} // namespace ICE diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp index cfc980da2..03f8dc0cb 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp @@ -5,6 +5,7 @@ #include "Speed/Indep/Src/Interfaces/SimActivities/INIS.h" #include "Speed/Indep/Src/Misc/Timer.hpp" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h" +#include "Speed/Indep/Tools/Inc/ConversionUtil.hpp" #include "Speed/Indep/bWare/Inc/Strings.hpp" #include "Speed/Indep/bWare/Inc/bPrintf.hpp" #include "Speed/Indep/bWare/Inc/bWare.hpp" diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp index fb320dcc8..bb5a324cf 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp @@ -149,6 +149,10 @@ class ICEManager { return nState == 0; } + int GetState() { + return nState; + } + ICETrack *GetPlaybackTrack() { return pPlaybackTrack; } diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index 6e274af2e..0ff62138f 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -1,5 +1,26 @@ #include "ICEMover.hpp" +#include "ICEManager.hpp" +#include "ICEAnimScene.hpp" #include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" +#include "Speed/Indep/Libs/Support/Utility/UMath.h" +#include "Speed/Indep/Src/Misc/GameFlow.hpp" + +namespace ICE { +void HideOverlay(); +void ShowOverlay(unsigned char overlay); +ICEScene *FindAnimScene(); +bool KeysShared(ICEData *p1, int n1, ICEData *p2, int n2); +void FireEventTag(int key); +} + +void FlushAccumulationBuffer(); +extern bool bMirrorICEData; +extern ICE::Vector3 vIceAccelLagScale; +extern ICE::Vector3 vIceAccelLagMin; +extern ICE::Vector3 vIceAccelLagMax; +void bQuaternionToMatrix(bMatrix4 *matrix, const bQuaternion *quaternion); + +bVector3 *bCross(bVector3 *dest, const bVector3 *v1, const bVector3 *v2); unsigned short ConvertLensLengthToFovAngle(float f_lens_mm) { return (bATan(f_lens_mm, 15.96f) & 0x7FFF) << 1; @@ -74,6 +95,97 @@ float ConvertApertureNumberToFStop(float aperture) { return kFStops[index]; } +static void CreateLookAtMatrix(ICE::Matrix4 *mat, ICE::Vector3 &eye, ICE::Vector3 ¢er, unsigned short dutch) { + UMath::Vector3 c; + UMath::Vector3 vUp; + UMath::Vector3 b; + UMath::Vector3 a; + UMath::Matrix4 tl; + + UMath::Sub(reinterpret_cast(center), reinterpret_cast(eye), c); + bNormalize(reinterpret_cast(&c), reinterpret_cast(&c)); + + vUp.x = 0.0f; + vUp.y = 0.0f; + vUp.z = 1.0f; + + bCross(reinterpret_cast(&b), reinterpret_cast(&vUp), reinterpret_cast(&c)); + bCross(reinterpret_cast(&a), reinterpret_cast(&c), reinterpret_cast(&b)); + bNormalize(reinterpret_cast(&b), reinterpret_cast(&b)); + bNormalize(reinterpret_cast(&a), reinterpret_cast(&a)); + + bMatrix4 *m = reinterpret_cast(mat); + m->v0.x = b.x; + m->v0.y = a.x; + m->v0.z = c.x; + m->v0.w = 0.0f; + m->v1.x = b.y; + m->v1.y = a.y; + m->v1.z = c.y; + m->v1.w = 0.0f; + m->v2.x = b.z; + m->v2.y = a.z; + m->v2.z = c.z; + m->v2.w = 0.0f; + m->v3.x = 0.0f; + m->v3.y = 0.0f; + m->v3.z = 0.0f; + m->v3.w = 1.0f; + + eRotateZ(m, m, dutch); + + tl.v0.x = 1.0f; + tl.v0.y = 0.0f; + tl.v0.z = 0.0f; + tl.v0.w = 0.0f; + tl.v1.x = 0.0f; + tl.v1.y = 1.0f; + tl.v1.z = 0.0f; + tl.v1.w = 0.0f; + tl.v2.x = 0.0f; + tl.v2.y = 0.0f; + tl.v2.z = 1.0f; + tl.v2.w = 0.0f; + tl.v3.x = -eye.x; + tl.v3.y = -eye.y; + tl.v3.z = -eye.z; + tl.v3.w = 1.0f; + + bMulMatrix(m, m, reinterpret_cast(&tl)); +} + +ICEMover::ICEMover(int nView, ICEAnchor *pCar) + : CameraMover(nView, CM_ICE), // + pCar(pCar), // + mHybridToWorld(), // + vSmoothCarPos(), // + vSmoothCarFwd() { + GetCamera()->ClearVelocity(); + pEye = new ICE::Cubic3D(0, 0.0f); + pLook = new ICE::Cubic3D(0, 0.0f); + pDutch = new ICE::Cubic1D(0, 0.0f); + pFov = new ICE::Cubic1D(0, 0.0f); + pNearClip = new ICE::Cubic1D(0, 0.0f); + pNoiseAmplitude = new ICE::Cubic1D(0, 0.0f); + pNoiseFrequency = new ICE::Cubic1D(0, 0.0f); + pFocalDistance = new ICE::Cubic1D(0, 0.0f); + pAperture = new ICE::Cubic1D(0, 0.0f); + pLetterbox = new ICE::Cubic1D(0, 0.0f); + pSimSpeed = new ICE::Cubic1D(0, 0.0f); + pAccelOffset = new ICE::Cubic3D(1, 0.0f); + bViolatesTopology = false; + fParameter0 = 0.0f; + fParameter1 = 0.0f; + pICEData = 0; + nSpaceEye = 0; + nSpaceLook = 0; + ICE::HideOverlay(); + PSMTX44Identity(*reinterpret_cast(&mHybridToWorld)); + bCopy(reinterpret_cast(&vSmoothCarPos), reinterpret_cast(pCar->GetGeometryPosition())); + bCopy(reinterpret_cast(&vSmoothCarFwd), reinterpret_cast(pCar->GetForwardVector())); + SetDesired(true, true); +} + ICEAnchor::ICEAnchor() : mGeomPos(), // mGeomRot(), // @@ -301,6 +413,66 @@ void Cubic3D::Update(float fSeconds, float fDClamp, float fDDClamp) { } // namespace ICE +void ICEMover::EyeCubicInit(ICE::Cubic3D *pEye, ICE::Matrix4 *pMatrix, ICE::Vector3 *pVelocity) { + ICE::Vector3 vEye; + ICE::Vector3 vEyeRel; + UMath::Vector4 vEyeVel; + + bScaleAdd(reinterpret_cast(&vEye), + GetCamera()->GetPosition(), + GetCamera()->GetVelocityPosition(), + 1.0f / 30.0f); + if (pMatrix != 0) { + bMulMatrix(reinterpret_cast(&vEye), reinterpret_cast(pMatrix), reinterpret_cast(&vEye)); + } + pEye->SetVal(&vEye); + + bVector3 *velPos = GetCamera()->GetVelocityPosition(); + vEyeRel.x = velPos->x; + vEyeRel.y = velPos->y; + vEyeRel.z = velPos->z; + if (pVelocity != 0) { + bSub(reinterpret_cast(&vEyeRel), reinterpret_cast(&vEyeRel), reinterpret_cast(pVelocity)); + } + float dur = pEye->x.duration; + bScale(reinterpret_cast(&vEyeVel), reinterpret_cast(&vEyeRel), dur); + vEyeVel.w = 0.0f; + if (pMatrix != 0) { + bMulMatrix(reinterpret_cast(&vEyeVel), reinterpret_cast(pMatrix), reinterpret_cast(&vEyeVel)); + } + pEye->SetdVal(reinterpret_cast(&vEyeVel)); +} + +void ICEMover::LookCubicInit(ICE::Cubic3D *pLook, ICE::Matrix4 *pMatrix, ICE::Vector3 *pVelocity) { + ICE::Vector3 vLook; + ICE::Vector3 vLookRel; + UMath::Vector4 vLookVel; + + bScaleAdd(reinterpret_cast(&vLook), + GetCamera()->GetTarget(), + GetCamera()->GetVelocityTarget(), + 1.0f / 30.0f); + if (pMatrix != 0) { + bMulMatrix(reinterpret_cast(&vLook), reinterpret_cast(pMatrix), reinterpret_cast(&vLook)); + } + pLook->SetVal(&vLook); + + bVector3 *velTgt = GetCamera()->GetVelocityTarget(); + vLookRel.x = velTgt->x; + vLookRel.y = velTgt->y; + vLookRel.z = velTgt->z; + if (pVelocity != 0) { + bSub(reinterpret_cast(&vLookRel), reinterpret_cast(&vLookRel), reinterpret_cast(pVelocity)); + } + float dur = pLook->x.duration; + bScale(reinterpret_cast(&vLookVel), reinterpret_cast(&vLookRel), dur); + vLookVel.w = 0.0f; + if (pMatrix != 0) { + bMulMatrix(reinterpret_cast(&vLookVel), reinterpret_cast(pMatrix), reinterpret_cast(&vLookVel)); + } + pLook->SetdVal(reinterpret_cast(&vLookVel)); +} + void ICEMover::DutchCubicInit(ICE::Cubic1D *pDutch) { pDutch->SetVal(0.0f); pDutch->SetdVal(0.0f); @@ -316,6 +488,258 @@ void ICEMover::FovCubicInit(ICE::Cubic1D *pFov) { pFov->SetdVal(fov_velocity); } +void ICEMover::SetDesired(bool b_snap, bool b_refresh) { + ICEData *pOldCameraData = pICEData; + ICETrack *p_track = 0; + ICEData *pCameraData = TheICEManager.GetCameraData(&p_track, &fParameter0, &fParameter1); + + bool b_new_camera = (pICEData == pCameraData); + + if (!b_refresh && b_new_camera) { + return; + } + + bool hard_cut = false; + if (!b_new_camera && pCameraData != 0 && pOldCameraData != 0) { + hard_cut = !ICE::KeysShared(pOldCameraData, 1, pCameraData, 0); + } + + bool entering_smooth = false; + if (pCameraData != 0 && pOldCameraData == 0 && (pCameraData->bSmooth & 1)) { + entering_smooth = true; + } + + bool leaving_smooth = false; + if (pOldCameraData != 0 && pCameraData == 0 && (pOldCameraData->bSmooth & 1)) { + leaving_smooth = true; + } + + pICEData = pCameraData; + + if (hard_cut || entering_smooth || leaving_smooth) { + FlushAccumulationBuffer(); + ICE::Vector3 *pos = pCar->GetGeometryPosition(); + vSmoothCarPos.x = pos->x; + vSmoothCarPos.y = pos->y; + vSmoothCarPos.z = pos->z; + ICE::Vector3 *fwd = pCar->GetForwardVector(); + vSmoothCarFwd.x = fwd->x; + vSmoothCarFwd.y = fwd->y; + vSmoothCarFwd.z = fwd->z; + } + + if (!b_new_camera) { + int key = TheICEManager.GetCameraIndex((fParameter0 + fParameter1) * 0.5f, p_track); + ICE::FireEventTag(key); + } + + if (pCameraData == 0) { + return; + } + + nSpaceEye = pCameraData->nSpaceEye; + nSpaceLook = pCameraData->nSpaceLook; + + if (!b_new_camera && (pCameraData->bSmooth & 1) != 0) { + bMirrorICEData = (pCameraData->bSmooth >> 1) & 1; + + TheICEManager.SetSmoothExit(true); + + { + UMath::Matrix4 mCarToWorld; + UMath::Matrix4 mWorldToCar; + UMath::Matrix4 mWorldToHybrid; + ICE::Cubic3D eye(0, 0.0f); + ICE::Cubic3D look(0, 0.0f); + ICE::Cubic1D dutch(0, 0.0f); + ICE::Cubic1D fov(0, 0.0f); + UMath::Matrix4 mWorldToScene; + UMath::Matrix4 *pWorldToScene = 0; + UMath::Matrix4 *eye_space; + UMath::Matrix4 *look_space; + + bCopy(reinterpret_cast(&mCarToWorld), + reinterpret_cast(pCar->GetGeometryOrientation()), + reinterpret_cast(pCar->GetGeometryPosition())); + + eInvertTransformationMatrix(reinterpret_cast(&mWorldToCar), + reinterpret_cast(&mCarToWorld)); + + eInvertTransformationMatrix(reinterpret_cast(&mWorldToHybrid), + reinterpret_cast(&mHybridToWorld)); + + PSMTX44Identity(*reinterpret_cast(&mWorldToScene)); + + if (nSpaceEye == 3 || nSpaceLook == 3) { + ICEScene *scene = ICE::FindAnimScene(); + if (scene != 0) { + bMatrix4 &sceneMat = scene->GetSceneTransformMatrix(); + pWorldToScene = &mWorldToScene; + eInvertTransformationMatrix(reinterpret_cast(pWorldToScene), &sceneMat); + } + } + + ICE::Vector3 v_eye[2]; + ICE::Vector3 v_look[2]; + ICE::Vector3 v_eye_slope[2]; + ICE::Vector3 v_look_slope[2]; + float f_dutch_slope[2]; + float f_lens_slope[2]; + + pCameraData->GetEye(0, &v_eye[0]); + pCameraData->GetEye(1, &v_eye[1]); + pCameraData->GetLook(0, &v_look[0]); + pCameraData->GetLook(1, &v_look[1]); + + TheICEManager.GetSlope(&v_eye_slope[0], &v_look_slope[0], &f_lens_slope[0], &f_dutch_slope[0], pCameraData, 0, p_track); + TheICEManager.GetSlope(&v_eye_slope[1], &v_look_slope[1], &f_lens_slope[1], &f_dutch_slope[1], pCameraData, 1, p_track); + + eye.SetVal(&v_eye[0]); + eye.SetdVal(&v_eye_slope[0]); + eye.SetValDesired(&v_eye[1]); + eye.SetdValDesired(&v_eye_slope[1]); + + look.SetVal(&v_look[0]); + look.SetdVal(&v_look_slope[0]); + look.SetValDesired(&v_look[1]); + look.SetdValDesired(&v_look_slope[1]); + + dutch.SetVal(pCameraData->fDutch[0]); + dutch.SetdVal(f_dutch_slope[0]); + dutch.SetValDesired(pCameraData->fDutch[1]); + dutch.SetdValDesired(f_dutch_slope[1]); + + unsigned short fov0 = ConvertLensLengthToFovAngle(pCameraData->fLens[0]); + unsigned short fov1 = ConvertLensLengthToFovAngle(pCameraData->fLens[1]); + float fov0_slope = ConvertLensDeltaToFovDelta(pCameraData->fLens[0], f_lens_slope[0]); + float fov1_slope = ConvertLensDeltaToFovDelta(pCameraData->fLens[1], f_lens_slope[1]); + + fov.SetVal(static_cast(fov0)); + fov.SetdVal(fov0_slope); + fov.SetValDesired(static_cast(fov1)); + fov.SetdValDesired(fov1_slope); + + if (hard_cut || entering_smooth || leaving_smooth) { + PSMTX44Identity(*reinterpret_cast(&mHybridToWorld)); + ICE::Vector3 *carPos = pCar->GetGeometryPosition(); + bCopy(reinterpret_cast(&mHybridToWorld), + reinterpret_cast(pCar->GetGeometryOrientation()), + reinterpret_cast(carPos)); + } + + switch (nSpaceEye) { + case 0: eye_space = reinterpret_cast(&mWorldToCar); break; + case 2: eye_space = &mWorldToHybrid; break; + case 3: eye_space = pWorldToScene; break; + default: eye_space = 0; break; + } + + switch (nSpaceLook) { + case 0: look_space = reinterpret_cast(&mWorldToCar); break; + case 2: look_space = &mWorldToHybrid; break; + case 3: look_space = pWorldToScene; break; + default: look_space = 0; break; + } + + ICE::Vector3 *eye_vel = (nSpaceEye == 0) ? pCar->GetVelocity() : static_cast(0); + ICE::Vector3 *look_vel = (nSpaceLook == 0) ? pCar->GetVelocity() : static_cast(0); + + EyeCubicInit(&eye, reinterpret_cast(eye_space), eye_vel); + LookCubicInit(&look, reinterpret_cast(look_space), look_vel); + DutchCubicInit(&dutch); + FovCubicInit(&fov); + + float f_route_param = TheICEManager.GetParameter(); + float f_to_start = bAbs(f_route_param - fParameter0); + float f_to_end = bAbs(f_route_param - fParameter1); + + if (f_to_end <= f_to_start) { + ICE::Vector3 v_eye_val; + ICE::Vector3 v_deye; + ICE::Vector3 v_look_val; + ICE::Vector3 v_dlook; + + eye.GetVal(&v_eye_val); + eye.GetdVal(&v_deye); + pEye->SetValDesired(&v_eye_val); + pEye->SetdValDesired(&v_deye); + + look.GetVal(&v_look_val); + look.GetdVal(&v_dlook); + pLook->SetValDesired(&v_look_val); + pLook->SetdValDesired(&v_dlook); + + pDutch->SetValDesired(dutch.GetVal()); + pDutch->dValDesired = dutch.GetdVal(); + + pFov->SetValDesired(fov.GetVal()); + pFov->dValDesired = fov.GetdVal(); + } else { + ICE::Vector3 v_eye_val; + ICE::Vector3 v_deye; + ICE::Vector3 v_look_val; + ICE::Vector3 v_dlook; + + eye.GetVal(&v_eye_val); + eye.GetdVal(&v_deye); + pEye->SetVal(&v_eye_val); + pEye->SetdVal(&v_deye); + + look.GetVal(&v_look_val); + look.GetdVal(&v_dlook); + pLook->SetVal(&v_look_val); + pLook->SetdVal(&v_dlook); + + pDutch->SetVal(dutch.GetVal()); + pDutch->SetdVal(dutch.GetdVal()); + + pFov->SetVal(fov.GetVal()); + pFov->SetdVal(fov.GetdVal()); + } + } + } + + pEye->MakeCoeffs(); + pLook->MakeCoeffs(); + pDutch->MakeCoeffs(); + pFov->MakeCoeffs(); + + pNearClip->SetVal(pCameraData->fNearClip[0]); + pNearClip->SetValDesired(pCameraData->fNearClip[1]); + pNearClip->MakeCoeffs(); + + pNoiseAmplitude->SetVal(pCameraData->fNoiseAmplitude[0]); + pNoiseAmplitude->SetValDesired(pCameraData->fNoiseAmplitude[1]); + pNoiseAmplitude->MakeCoeffs(); + + pNoiseFrequency->SetVal(pCameraData->fNoiseFrequency[0]); + pNoiseFrequency->SetValDesired(pCameraData->fNoiseFrequency[1]); + pNoiseFrequency->MakeCoeffs(); + + pFocalDistance->SetVal(pCameraData->fFocalDistance[0]); + pFocalDistance->SetValDesired(pCameraData->fFocalDistance[1]); + pFocalDistance->MakeCoeffs(); + + pAperture->SetVal(static_cast(pCameraData->fAperture[0])); + pAperture->SetValDesired(static_cast(pCameraData->fAperture[1])); + pAperture->MakeCoeffs(); + + pLetterbox->SetVal(static_cast(pCameraData->fLetterbox[0])); + pLetterbox->SetValDesired(static_cast(pCameraData->fLetterbox[1])); + pLetterbox->MakeCoeffs(); + + pSimSpeed->SetVal(static_cast(pCameraData->fSimSpeed[0])); + pSimSpeed->SetValDesired(static_cast(pCameraData->fSimSpeed[1])); + pSimSpeed->MakeCoeffs(); + + int state = TheICEManager.GetState(); + if ((state == 0 || state == 5 || state == 7) && + (pOldCameraData == 0 || pOldCameraData->nOverlay != pCameraData->nOverlay)) { + ICE::HideOverlay(); + ICE::ShowOverlay(pCameraData->nOverlay); + } +} + float ICEMover::GetDutch(float f_param) { if (pICEData == 0) { goto blend; @@ -344,6 +768,61 @@ unsigned short ICEMover::GetFOV(float f_param) { return static_cast(pFov->GetVal() * (1.0f - f_param) + pFov->GetValDesired() * f_param); } +ICEMover::~ICEMover() { + ICE::HideOverlay(); + delete pEye; + delete pLook; + delete pDutch; + delete pFov; + delete pNearClip; + delete pNoiseAmplitude; + delete pNoiseFrequency; + delete pFocalDistance; + delete pAperture; + delete pLetterbox; + delete pSimSpeed; + delete pAccelOffset; + GetCamera()->SetSimTimeMultiplier(1.0f); + GetCamera()->SetLetterBox(0.0f); + if (!Camera::StopUpdating) { + GetCamera()->SetDepthOfField(0.0f); + } + if (!Camera::StopUpdating) { + GetCamera()->SetFocalDistance(0.0f); + } + GetCamera()->ClearVelocity(); +} + +void ICEMover::GetEye(ICE::Vector3 *vEye, float f_param) { + if (pICEData == 0 || pICEData->bCubicEye == 0) { + ICE::Vector3 v0; + ICE::Vector3 v1; + pEye->GetVal(&v0); + pEye->GetValDesired(&v1); + float inv = 1.0f - f_param; + bScale(reinterpret_cast(vEye), reinterpret_cast(&v0), inv); + bScaleAdd(reinterpret_cast(vEye), reinterpret_cast(vEye), + reinterpret_cast(&v1), f_param); + } else { + pEye->GetVal(vEye, f_param); + } +} + +void ICEMover::GetLook(ICE::Vector3 *vLook, float f_param) { + if (pICEData == 0 || pICEData->bCubicLook == 0) { + ICE::Vector3 v0; + ICE::Vector3 v1; + pLook->GetVal(&v0); + pLook->GetValDesired(&v1); + float inv = 1.0f - f_param; + bScale(reinterpret_cast(vLook), reinterpret_cast(&v0), inv); + bScaleAdd(reinterpret_cast(vLook), reinterpret_cast(vLook), + reinterpret_cast(&v1), f_param); + } else { + pLook->GetVal(vLook, f_param); + } +} + ICEAnchor *GetICEAnchor() { CameraMover *camera_mover = 0; @@ -356,3 +835,356 @@ ICEAnchor *GetICEAnchor() { return 0; } + +void ICEMover::Update(float dT) { + ICETrack *p_track = TheICEManager.GetPlaybackTrack(); + bool bLerpLag = false; + UMath::Matrix4 mSceneToWorld; + + float realTime = TheICEManager.IsUsingRealTime(); + if (realTime == 0.0f && TheGameFlowManager.IsPaused()) { + return; + } + + bool bNoTrack = (p_track == 0); + if (!bNoTrack) { + int context = p_track->GetContext(); + bLerpLag = (context == 3); + if (p_track->GetContext() != 2) { + bMirrorICEData = false; + } + } + + bViolatesTopology = false; + bool b_refresh = TheICEManager.RefreshCameraSplines(); + SetDesired(false, b_refresh); + + PSMTX44Identity(*reinterpret_cast(&mSceneToWorld)); + + if (nSpaceEye == 3 || nSpaceLook == 3) { + ICEScene *scene = ICE::FindAnimScene(); + if (scene == 0) { + return; + } + bMatrix4 &sceneMat = scene->GetSceneTransformMatrix(); + PSMTX44Copy(*reinterpret_cast(&sceneMat), *reinterpret_cast(&mSceneToWorld)); + } + + float f_route_param; + if (bNoTrack) { + f_route_param = TheICEManager.GetParameter(); + } else { + f_route_param = p_track->GetParameter(); + } + + float f_range = fParameter1 - fParameter0; + float f_param = 0.0f; + if (0.0001f < bAbs(f_range)) { + f_param = (f_route_param - fParameter0) / f_range; + } + + if (1.0f <= f_route_param) { + TheICEManager.SetGenericCameraToPlay("", ""); + } + + float simspeed = pSimSpeed->GetVal(f_param); + if (0.0f <= simspeed) { + if (1.0f <= simspeed) { + simspeed = 1.0f; + } + simspeed = simspeed * 30.0f; + GetCamera()->SetSimTimeMultiplier(simspeed); + } + if (simspeed < 1.0f) { + simspeed = 1.0f; + } + + float f_near_clip = pNearClip->GetVal(f_param); + if (0.0f <= f_near_clip) { + GetCamera()->SetNearZ(f_near_clip); + } + + unsigned short a_fov = GetFOV(f_param); + if (a_fov != 0 && !Camera::StopUpdating) { + GetCamera()->SetFieldOfView(a_fov); + } + + ICE::Vector3 vEye; + ICE::Vector3 vLook; + + GetEye(&vEye, f_param); + GetLook(&vLook, f_param); + + UMath::Matrix4 mCarToWorld; + int n_state; + + if (pICEData == 0) { + ICE::Vector3 *carPos = pCar->GetGeometryPosition(); + mCarToWorld.v0 = *reinterpret_cast(&pCar->GetGeometryOrientation()->v0); + mCarToWorld.v1 = *reinterpret_cast(&pCar->GetGeometryOrientation()->v1); + mCarToWorld.v2 = *reinterpret_cast(&pCar->GetGeometryOrientation()->v2); + bCopy(reinterpret_cast(&mCarToWorld.v3), reinterpret_cast(carPos), 1.0f); + } else if (pICEData->bIgnoreOrientation == 0) { + if (pICEData->bCarSpaceLag == 0 || !bLerpLag) { + ICE::Vector3 *carPos = pCar->GetGeometryPosition(); + bCopy(reinterpret_cast(&mCarToWorld), + reinterpret_cast(pCar->GetGeometryOrientation()), + reinterpret_cast(carPos)); + } else { + float lerp = f_route_param * 10.0f + 0.01f; + ICE::Vector3 *carPos = pCar->GetGeometryPosition(); + + vSmoothCarPos.x = (carPos->x - vSmoothCarPos.x) * lerp + vSmoothCarPos.x; + vSmoothCarPos.y = (carPos->y - vSmoothCarPos.y) * lerp + vSmoothCarPos.y; + vSmoothCarPos.z = (carPos->z - vSmoothCarPos.z) * lerp + vSmoothCarPos.z; + + ICE::Vector3 *carFwd = pCar->GetForwardVector(); + vSmoothCarFwd.x = (carFwd->x - vSmoothCarFwd.x) * lerp + vSmoothCarFwd.x; + vSmoothCarFwd.y = (carFwd->y - vSmoothCarFwd.y) * lerp + vSmoothCarFwd.y; + vSmoothCarFwd.z = (carFwd->z - vSmoothCarFwd.z) * lerp + vSmoothCarFwd.z; + + PSMTX44Identity(*reinterpret_cast(&mCarToWorld)); + bNormalize(reinterpret_cast(&vSmoothCarFwd), reinterpret_cast(&vSmoothCarFwd)); + bCopy(reinterpret_cast(&mCarToWorld.v0), reinterpret_cast(&vSmoothCarFwd), 0.0f); + bCross(reinterpret_cast(&mCarToWorld.v1), reinterpret_cast(&mCarToWorld.v2), reinterpret_cast(&mCarToWorld.v0)); + bCross(reinterpret_cast(&mCarToWorld.v2), reinterpret_cast(&mCarToWorld.v0), reinterpret_cast(&mCarToWorld.v1)); + bCopy(reinterpret_cast(&mCarToWorld.v3), reinterpret_cast(&vSmoothCarPos), 1.0f); + } + } else { + mCarToWorld.v0 = *reinterpret_cast(&mHybridToWorld.v0); + mCarToWorld.v1 = *reinterpret_cast(&mHybridToWorld.v1); + mCarToWorld.v2 = *reinterpret_cast(&mHybridToWorld.v2); + ICE::Vector3 *carPos = pCar->GetGeometryPosition(); + bCopy(reinterpret_cast(&mCarToWorld.v3), reinterpret_cast(carPos), 1.0f); + } + + if (nSpaceEye == 2) { + ICE::Vector3 *carPos = pCar->GetGeometryPosition(); + vEye.x += carPos->x; + vEye.y += carPos->y; + vEye.z += carPos->z; + } else if (nSpaceEye == 0) { + bMulMatrix(reinterpret_cast(&vEye), reinterpret_cast(&mCarToWorld), reinterpret_cast(&vEye)); + } else if (nSpaceEye == 3) { + bMulMatrix(reinterpret_cast(&vEye), reinterpret_cast(&mSceneToWorld), reinterpret_cast(&vEye)); + } + + if (nSpaceLook == 2) { + ICE::Vector3 *carPos = pCar->GetGeometryPosition(); + vLook.x += carPos->x; + vLook.y += carPos->y; + vLook.z += carPos->z; + } else if (nSpaceLook == 0) { + bMulMatrix(reinterpret_cast(&vLook), reinterpret_cast(&mCarToWorld), reinterpret_cast(&vLook)); + } else if (nSpaceLook == 3) { + bMulMatrix(reinterpret_cast(&vLook), reinterpret_cast(&mSceneToWorld), reinterpret_cast(&vLook)); + } + + if (pICEData != 0 && pICEData->bCarSpaceLag != 0) { + ICE::Vector3 accel_offset; + pAccelOffset->SetValDesired(reinterpret_cast(pCar->GetAcceleration())); + pAccelOffset->Update(dT * simspeed, 0.0f, 0.0f); + pAccelOffset->GetVal(&accel_offset); + + accel_offset.x = accel_offset.x * vIceAccelLagScale.x; + if (accel_offset.x - vIceAccelLagMin.x < 0.0f) { + accel_offset.x = vIceAccelLagMin.x; + } + if (vIceAccelLagMax.x - accel_offset.x < 0.0f) { + accel_offset.x = vIceAccelLagMax.x; + } + + accel_offset.y = accel_offset.y * vIceAccelLagScale.y; + if (accel_offset.y - vIceAccelLagMin.y < 0.0f) { + accel_offset.y = vIceAccelLagMin.y; + } + if (vIceAccelLagMax.y - accel_offset.y < 0.0f) { + accel_offset.y = vIceAccelLagMax.y; + } + + accel_offset.z = accel_offset.z * vIceAccelLagScale.z; + if (accel_offset.z - vIceAccelLagMin.z < 0.0f) { + accel_offset.z = vIceAccelLagMin.z; + } + if (vIceAccelLagMax.z - accel_offset.z < 0.0f) { + accel_offset.z = vIceAccelLagMax.z; + } + + vLook.x -= accel_offset.x; + vLook.y -= accel_offset.y; + vLook.z -= accel_offset.z; + vEye.x -= accel_offset.x; + vEye.y -= accel_offset.y; + vEye.z -= accel_offset.z; + } + + n_state = TheICEManager.GetState(); + float dutchVal = GetDutch(f_param); + unsigned short dutch = static_cast(static_cast(dutchVal * 65536.0f) & 0xffff); + + UMath::Matrix4 mWorldToCamera; + CreateLookAtMatrix(reinterpret_cast(&mWorldToCamera), + *reinterpret_cast(&vEye), + *reinterpret_cast(&vLook), + dutch); + + float f_amplitude = pNoiseAmplitude->GetVal(f_param); + float f_frequency = pNoiseFrequency->GetVal(f_param); + if (f_amplitude < 0.0f) { + f_amplitude = 0.0f; + } + if (f_frequency < 0.0f) { + f_frequency = 0.0f; + } + + if (pICEData == 0 || pICEData->nShakeType == 0) { + GetCamera()->SetNoiseAmplitude1(0.0f, 0.0f, f_amplitude, f_amplitude); + GetCamera()->SetNoiseFrequency1(0.0f, 0.0f, f_amplitude, f_amplitude); + GetCamera()->SetNoiseAmplitude2(0.0f, 0.0f, 0.0f, 0.0f); + GetCamera()->SetNoiseFrequency2(0.0f, 0.0f, 0.0f, 0.0f); + + float routeLen; + if (!bNoTrack) { + routeLen = p_track->GetLength(); + } else { + routeLen = TheICEManager.GetParameterLength(); + } + + float time = f_route_param * routeLen; + GetCamera()->ApplyNoise(reinterpret_cast(&mWorldToCamera), time, 1.0f); + } else { + ICEShakeTrack *shake_track = TheICEManager.GetShakeTrack(pICEData->nShakeType); + if (shake_track != 0) { + float routeLen; + if (!bNoTrack) { + routeLen = p_track->GetLength(); + } else { + routeLen = TheICEManager.GetParameterLength(); + } + + int numKeys = static_cast(shake_track->NumKeys); + int frame = static_cast(f_route_param * routeLen * f_frequency); + + if (numKeys < 1) { + frame = 0; + } else { + while (frame < 0) { + frame += numKeys; + } + frame = frame % numKeys; + } + + int maxKey = shake_track->NumKeys - 1; + int clampedFrame = frame; + if (clampedFrame < 0) clampedFrame = 0; + if (clampedFrame > maxKey) clampedFrame = maxKey; + + ICEShakeData *shake_data; + if (frame == clampedFrame) { + shake_data = &shake_track->Keys[clampedFrame]; + } else { + shake_data = 0; + } + + if (shake_data != 0) { + UMath::Vector3 r; + r.x = shake_data->q[0] * f_amplitude; + r.y = shake_data->q[1] * f_amplitude; + r.z = shake_data->q[2] * f_amplitude; + float w = bLength(reinterpret_cast(&r)); + float halfAngle = bSqrt(1.0f - w); + + bQuaternion q(r.x, r.y, r.z, halfAngle); + UMath::Matrix4 shake_matrix; + bQuaternionToMatrix(reinterpret_cast(&shake_matrix), &q); + + UMath::Vector3 t; + t.x = shake_data->p[0] * f_amplitude; + t.y = shake_data->p[1] * f_amplitude; + t.z = shake_data->p[2] * f_amplitude; + bCopy(reinterpret_cast(&shake_matrix), + reinterpret_cast(&shake_matrix), + reinterpret_cast(&t)); + + bMulMatrix(reinterpret_cast(&mWorldToCamera), + reinterpret_cast(&shake_matrix), + reinterpret_cast(&mWorldToCamera)); + } + } + } + + if (bNoTrack || p_track->GetContext() != 2) { + bool constrain_to_topology = false; + if (pICEData != 0 && pICEData->bConstrainToWorld != 0) { + constrain_to_topology = (n_state < 9); + } + if (constrain_to_topology) { + MinGapTopology(reinterpret_cast(&mWorldToCamera), + reinterpret_cast(pCar->GetGeometryPosition())); + } + + bool constrain_to_cars = false; + if (pICEData != 0 && pICEData->bConstrainToCars != 0) { + constrain_to_cars = (n_state < 9); + } + if (constrain_to_cars) { + MinGapCars(reinterpret_cast(&mWorldToCamera), + reinterpret_cast(pCar->GetGeometryPosition()), + reinterpret_cast(pCar->GetVelocity())); + } + } else { + int topViolation = MinGapTopology(reinterpret_cast(&mWorldToCamera), + reinterpret_cast(pCar->GetGeometryPosition())); + bViolatesTopology = topViolation != 0; + int carViolation = MinGapCars(reinterpret_cast(&mWorldToCamera), + reinterpret_cast(pCar->GetGeometryPosition()), + reinterpret_cast(pCar->GetVelocity())); + bViolatesTopology = (bViolatesTopology || carViolation != 0); + } + + float letterbox = pLetterbox->GetVal(f_param); + if (0.0f <= letterbox) { + GetCamera()->SetLetterBox(letterbox * 0.01f); + } + + float aperture = pAperture->GetVal(f_param); + if (aperture < 0.0f || 37.0f <= aperture) { + if (!Camera::StopUpdating) { + GetCamera()->SetFocalDistance(0.0f); + } + } else { + float focal = pFocalDistance->GetVal(f_param); + if (focal < 1.0f) { + focal = 1.0f; + } + focal = focal * 100.0f; + + unsigned short fovAngle = GetFOV(f_param); + float lens = ConvertFovAngleToLensLength(fovAngle); + float fstop = ConvertApertureNumberToFStop(aperture); + + float hyperFocal = (lens * lens) / (fstop * 0.03f) + lens; + float dofNear = (hyperFocal - lens) * focal; + float dofFar = 10000.0f; + if (0.001f < hyperFocal - focal) { + dofFar = (dofNear / (hyperFocal - focal)) * 2.0f; + } + if (dofFar < dofNear) { + dofFar = dofNear + 1.0f; + } + if (!Camera::StopUpdating) { + GetCamera()->SetFocalDistance((dofFar + dofNear) * 0.5f); + } + float dof = dofFar - dofNear; + } + if (!Camera::StopUpdating) { + GetCamera()->SetDepthOfField(0.0f); + } + + float targetDist = bDistBetween(reinterpret_cast(&vEye), reinterpret_cast(&vLook)); + if (!Camera::StopUpdating) { + GetCamera()->SetTargetDistance(targetDist); + } + + GetCamera()->SetCameraMatrix(*reinterpret_cast(&mWorldToCamera), dT * simspeed); +} diff --git a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp index e69de29bb..fc82718b3 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp @@ -0,0 +1,573 @@ +#include "Speed/Indep/Src/Camera/CameraMover.hpp" +#include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" +#include "Speed/Indep/Src/Ecstasy/eMath.hpp" +#include "Speed/Indep/Src/Gameplay/GRaceStatus.h" +#include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" +#include "Speed/Indep/Src/Interfaces/Simables/IVehicle.h" +#include "Speed/Indep/Src/Misc/GameFlow.hpp" +#include "Speed/Indep/Src/Misc/Table.hpp" +#include "Speed/Indep/Src/World/RaceParameters.hpp" +#include "Speed/Indep/Src/World/Rain.hpp" +#include "Speed/Indep/Libs/Support/Utility/UMath.h" +#include "Speed/Indep/Libs/Support/Utility/UVector.h" + +extern tTable aCubicPovTables[]; +extern float CameraImpcatCurveH[]; +extern float CameraImpcatCurveV[]; +extern float CameraGearChangingCurve[]; +extern float PovHandheldNoiseScale[]; +extern float PovHandheldChopperScale[]; +extern float PovVelocityNoiseScale[]; +extern float PovTerrainNoiseScale[]; +extern float _SmokeShowEyeOffset; +extern float _HydraulicsEyeOffset; +extern unsigned short _SmokeShowLookAngle; +extern unsigned short _HydraulicsLookAngle; +extern unsigned short _NOSFovWidening; +extern RaceParameters theRaceParameters; +extern Timer RealTimer; + +bool OutsidePovType(int pov_type); +void FlushAccumulationBuffer(); +void ApplyCameraShake(int nViewID, bMatrix4 *pMatrix); +int AmIinATunnel(eView *view, int CheckOverPass); + +bVector3* bClamp(bVector3* dest, const bVector3* pMin, const bVector3* pMax) { + float x = bClamp(dest->x, pMin->x, pMax->x); + float y = bClamp(dest->y, pMin->y, pMax->y); + float z = bClamp(dest->z, pMin->z, pMax->z); + dest->x = x; + dest->y = y; + dest->z = z; + return dest; +} + +void tTable::Blend(CubicPovData *dest, CubicPovData *a, CubicPovData *b, float blend_a) { + float blend_b = 1.0f - blend_a; + + dest->fEyeDuration = blend_a * a->fEyeDuration + blend_b * b->fEyeDuration; + dest->fLookDuration = blend_a * a->fLookDuration + blend_b * b->fLookDuration; + dest->fFovDuration = blend_a * a->fFovDuration + blend_b * b->fFovDuration; + dest->fUpDuration = blend_a * a->fUpDuration + blend_b * b->fUpDuration; + + bVector3 v0, v1, v2, v3, v4, v5, v6, v7, v8, v9; + + bScale(&v0, a->GetUpAccel(), blend_a); + bScaleAdd(dest->GetUpAccel(), &v0, b->GetUpAccel(), blend_b); + + bScale(&v1, a->GetUpAccelMin(), blend_a); + bScaleAdd(dest->GetUpAccelMin(), &v1, b->GetUpAccelMin(), blend_b); + + bScale(&v2, a->GetUpAccelMax(), blend_a); + bScaleAdd(dest->GetUpAccelMax(), &v2, b->GetUpAccelMax(), blend_b); + + bScale(&v3, a->GetEyeAccel(), blend_a); + bScaleAdd(dest->GetEyeAccel(), &v3, b->GetEyeAccel(), blend_b); + + bScale(&v4, a->GetEyeAccelMin(), blend_a); + bScaleAdd(dest->GetEyeAccelMin(), &v4, b->GetEyeAccelMin(), blend_b); + + bScale(&v5, a->GetEyeAccelMax(), blend_a); + bScaleAdd(dest->GetEyeAccelMax(), &v5, b->GetEyeAccelMax(), blend_b); + + bScale(&v6, a->GetLookAccel(), blend_a); + bScaleAdd(dest->GetLookAccel(), &v6, b->GetLookAccel(), blend_b); + + bScale(&v7, a->GetLookAccelMin(), blend_a); + bScaleAdd(dest->GetLookAccelMin(), &v7, b->GetLookAccelMin(), blend_b); + + bScale(&v8, a->GetLookAccelMax(), blend_a); + bScaleAdd(dest->GetLookAccelMax(), &v8, b->GetLookAccelMax(), blend_b); + + bScale(&v9, a->GetForwardDuration(), blend_a); + bScaleAdd(dest->GetForwardDuration(), &v9, b->GetForwardDuration(), blend_b); +} + +bool CubicCameraMover::IsUnderVehicle() { + const IVehicle::List &vehicles = IVehicle::GetList(VEHICLE_ALL); + + for (IVehicle::List::const_iterator iter = vehicles.begin(); iter != vehicles.end(); ++iter) { + IVehicle *ivehicle = *iter; + + if (!ivehicle->IsActive()) { + continue; + } + if (ivehicle->IsDestroyed()) { + continue; + } + + ISimable *isimable = ivehicle->GetSimable(); + if (isimable == nullptr) { + continue; + } + + IRigidBody *irb = isimable->GetRigidBody(); + if (irb == nullptr) { + continue; + } + + if (isimable->GetWorldID() == pCar->GetWorldID()) { + continue; + } + + if (!irb->IsSimple()) { + continue; + } + + UMath::Vector4 vehiclePos; + const UMath::Vector3 &pos = irb->GetPosition(); + vehiclePos.x = pos.x; + vehiclePos.y = pos.y; + vehiclePos.z = pos.z; + vehiclePos.w = 0.0f; + + UMath::Vector4 testPos; + testPos.x = vehiclePos.x; + testPos.y = vehiclePos.y; + testPos.z = vehiclePos.z; + testPos.w = 0.0f; + + UMath::Vector3 dim; + irb->GetDimension(dim); + + UMath::Matrix4 mat; + irb->GetMatrix4(mat); + + UMath::Matrix4 world2local; + UMath::Transpose(mat, world2local); + + UMath::Vector3 forward; + irb->GetForwardVector(forward); + + bVector3 carFwd; + eSwizzleWorldVector(reinterpret_cast(forward), carFwd); + + bVector3 *camFwd = GetCamera()->GetDirection(); + float dot = bDot(camFwd, &carFwd); + + if (bAbs(dot) >= 0.5f) { + continue; + } + + { + bVector3 predictedPos; + bVector3 *geomPos = pCar->GetGeometryPosition(); + bVector3 *vel = const_cast(pCar->GetVelocity()); + bVector3 scaled = *vel * 0.5f; + bVector3 sum = *geomPos + scaled; + eUnSwizzleWorldVector(sum, reinterpret_cast(testPos)); + testPos.w = 0.0f; + + UMath::Vector4 test2vehicle; + UMath::Subxyz(testPos, vehiclePos, test2vehicle); + float dist = UMath::Lengthxyz(test2vehicle); + + if (dist >= irb->GetRadius()) { + continue; + } + + UMath::Vector4 test2vehicleLocal; + UMath::Rotate(reinterpret_cast(test2vehicle), world2local, + reinterpret_cast(test2vehicleLocal)); + + float absX = test2vehicleLocal.x; + if (absX < 0.0f) { + absX = -absX; + } + if (absX < dim.x) { + float absZ = test2vehicleLocal.z; + if (absZ < 0.0f) { + absZ = -absZ; + } + if (absZ < dim.z) { + return true; + } + } + } + } + return false; +} + +void CubicCameraMover::SetDesired(bMatrix4 *pCarToWorld, POV *pov, CubicPovData *pov_data, bool bSnapForward) { + bool bOutside = OutsidePovType(pov->Type); + + if (pCar->IsTouchingGround()) { + tLastGrounded = WorldTimer; + } + + if (IsUnderVehicle()) { + tLastUnderVehicle = WorldTimer; + } + + SetForward(pov, bSnapForward); + MakeSpace(pCarToWorld); + + bMatrix4 mWorldToCar; + eInvertTransformationMatrix(&mWorldToCar, pCarToWorld); + + bVector4 vAccel(0.0f, 0.0f, 0.0f, 0.0f); + if (bAccelLag) { + bVector3 *avgAccelVal = pAvgAccel->GetValue(); + vAccel.x = avgAccelVal->x; + vAccel.y = avgAccelVal->y; + vAccel.z = avgAccelVal->z; + vAccel.w = 0.0f; + bMulMatrix(reinterpret_cast(&vAccel), &mWorldToCar, &vAccel); + } + + bVector3 vEyeOffset; + unsigned short aAngle; + + bool b_snap_always = false; + if (theRaceParameters.IsBurnout()) { + b_snap_always = true; + } + + if (b_snap_always) { + vEyeOffset = bVector3(_SmokeShowEyeOffset, 0.0f, 0.0f); + aAngle = _SmokeShowLookAngle; + } else { + if (!HighliteMode()) { + vEyeOffset.x = pov->Lag; + vEyeOffset.y = pov->LatOffset; + vEyeOffset.z = pov->Height; + CameraSpeedHug(&vEyeOffset); + aAngle = pov->Angle; + } else { + vEyeOffset = bVector3(_HydraulicsEyeOffset, 0.0f, 0.0f); + aAngle = _HydraulicsLookAngle; + } + } + + float fTan = bSin(aAngle) / bCos(aAngle); + + bVector3 vLookOffset; + if (!bOutside) { + vLookOffset.x = vEyeOffset.x + 1.0f; + vLookOffset.z = vEyeOffset.z - fTan; + } else { + vLookOffset.z = fTan * vEyeOffset.x + vEyeOffset.z; + vLookOffset.x = 0.0f; + } + + bVector3 vEye; + vEye.x = pov_data->vEyeAccel.x * vAccel.x; + vEye.y = pov_data->vEyeAccel.y * vAccel.y; + vEye.z = pov_data->vEyeAccel.z * vAccel.z; + vLookOffset.y = 0.0f; + bClamp(&vEye, pov_data->GetEyeAccelMin(), pov_data->GetEyeAccelMax()); + + if (HighliteMode()) { + vEyeOffset *= 0.25f; + } + + vEye += vEyeOffset; + pEye->SetValDesired(&vEye); + + bVector3 vLook; + vLook.x = pov_data->vLookAccel.x * vAccel.x; + vLook.y = pov_data->vLookAccel.y * vAccel.y; + vLook.z = pov_data->vLookAccel.z * vAccel.z; + bClamp(&vLook, pov_data->GetLookAccelMin(), pov_data->GetLookAccelMax()); + vLook += vLookOffset; + pLook->SetValDesired(&vLook); + + bVector3 v_up(0.0f, 0.0f, 1.0f); + if (pov->AllowTilting) { + bVector3 *avgVal = pAvgAccel->GetValue(); + bVector3 scaled = bScale(*pov_data->GetUpAccel(), *avgVal); + v_up = v_up + scaled; + bClamp(&v_up, pov_data->GetUpAccelMin(), pov_data->GetUpAccelMax()); + } + + if (0.1f < pCar->GetVelMag()) { + bVector3 *dutch = DutchAroundCar(pCar->GetGeometryPosition(), const_cast(pCar->GetVelocity())); + v_up += *dutch; + } + bNormalize(&v_up, &v_up); + pUp->SetValDesired(&v_up); + + unsigned short aFov = pov->Fov; + if (bOutside && pCar->IsNosEngaged() && 0.0f < pCar->GetVelMag()) { + aFov = aFov + _NOSFovWidening; + } + pFov->SetValDesired(static_cast(aFov)); + + if (bSnapNext || !bOutside) { + pUp->Snap(); + pFov->Snap(); + pEye->Snap(); + pLook->Snap(); + } + + if (bSnapNext) { + FlushAccumulationBuffer(); + } +} + +void CubicCameraMover::Update(float dT) { + if (TheGameFlowManager.IsPaused() && !bFirstTime) { + return; + } + + bFirstTime = 0; + + if (0.0f < fIgnoreSetSnapNextTimer) { + fIgnoreSetSnapNextTimer -= dT; + } + + nPovTypeUsed = nPovType; + POV *pov = pCar->GetPov(nPovType); + + float collision_damper = pCar->GetCollisionDamping(); + float drift_damper = pCar->GetDrift(); + float stiffness = bClamp(pCar->GetVelMag() * 0.005f, 0.0f, 1.0f); + + CubicPovData pov_data; + aCubicPovTables[nPovTypeUsed].GetValue(&pov_data, stiffness); + + if (theRaceParameters.IsDriftRace() || theRaceParameters.IsBurnout()) { + pov_data.vEyeAccel = bVector3(0.0f, 0.0f, 0.0f); + } + + bVector3 vAccel(0.0f, 0.0f, 0.0f); + if (fIgnoreSetSnapNextTimer <= 0.0f) { + CameraAccelCurve(&vAccel); + } + + tAverage *avg = pAvgAccel; + if (avg->GetNumSamples() < avg->nSlots) { + avg->nSamples = avg->nSamples + 1; + } + + int slot = static_cast(avg->nCurrentSlot); + bVector3 *slotData = &avg->pData[slot]; + avg->Total -= *slotData; + avg->Total += vAccel; + *slotData = vAccel; + + bVector3 avgVal = avg->Total * (1.0f / static_cast(static_cast(avg->nSamples))); + avg->Average = avgVal; + + avg->nCurrentSlot = avg->nCurrentSlot + 1; + if (avg->nSlots <= avg->nCurrentSlot) { + avg->nCurrentSlot = 0; + } + + float fAccelH = bAbs(vAccel.x); + float fAccelV; + if (bAbs(vAccel.x) - bAbs(vAccel.y) < 0.0f) { + fAccelH = bAbs(vAccel.y); + } + + if (0.1f <= fAccelH && 0.0f < pCar->GetCollisionDamping() && + vCameraImpcat.x < pCar->GetCollisionDamping()) { + vCameraImpcat.x = pCar->GetCollisionDamping(); + vCameraImpcatTimer.x = 1.0f; + } + + float eye_duration = pov_data.fEyeDuration; + pUp->SetDuration(eye_duration); + pFov->SetDuration(eye_duration); + pLook->SetDuration(eye_duration); + bVector3 *foward_duration = pov_data.GetForwardDuration(); + pForward->SetDuration(foward_duration->x, foward_duration->y, foward_duration->z); + pEye->SetDuration(eye_duration); + + float target_dist = bDistBetween(GetCamera()->GetPosition(), pCar->GetGeometryPosition()); + if (Camera::StopUpdating == 0) { + GetCamera()->SetTargetDistance(target_dist); + } + + float fSign; + if (!bPerfectFocus) { + if (Camera::StopUpdating == 0) { + GetCamera()->SetFocalDistance(40.0f); + } + fSign = 100.0f; + } else { + if (Camera::StopUpdating == 0) { + GetCamera()->SetFocalDistance(0.0f); + } + } + if (Camera::StopUpdating == 0) { + GetCamera()->SetDepthOfField(fSign); + } + + bMatrix4 mCarToWorld; + SetDesired(&mCarToWorld, pov, &pov_data, bSnapNext); + bSnapNext = 0; + + float f_stiffness = 1.0f; + if (bLookBack) { + f_stiffness = -1.0f; + } + + bool bOutside = OutsidePovType(pov->Type); + bVector3 vUp; + vUp.x = (*pUp).x.Val; + vUp.y = (*pUp).y.Val; + vUp.z = 1.0f; + if (!bOutside) { + vUp.x = pCar->GetUpVector()->x; + vUp.y = pCar->GetUpVector()->y; + vUp.z = pCar->GetUpVector()->z; + } + + bVector3 vEye(f_stiffness * (*pEye).x.Val, f_stiffness * (*pEye).y.Val, (*pEye).z.Val); + bVector3 vLook(f_stiffness * (*pLook).x.Val, f_stiffness * (*pLook).y.Val, (*pLook).z.Val); + + { + float impact; + if (vCameraImpcat.x > 0.0f) { + if (0.0f < vCameraImpcatTimer.x) { + tTable envelope(CameraImpcatCurveH, 5, 0.0f, 1.0f); + float s; + envelope.GetValue(&s, vCameraImpcatTimer.x); + s = s * vCameraImpcat.x * 0.001f; + vEye.x = vEye.x * (1.0f - s); + vLook.x = vLook.x * (s + 1.0f); + vCameraImpcatTimer.x -= dT; + if (vCameraImpcatTimer.x <= 0.0f) { + goto clearH; + } + } else { + clearH: + vCameraImpcat.x = 0.0f; + } + } + } + + { + if (vCameraImpcat.y > 0.0f) { + if (0.0f < vCameraImpcatTimer.y) { + tTable envelope(CameraImpcatCurveV, 5, 0.0f, 1.0f); + float s; + envelope.GetValue(&s, vCameraImpcatTimer.y); + vEye.z = vEye.z * (1.0f - s * vCameraImpcat.y * 0.001f); + vCameraImpcatTimer.y -= dT; + if (vCameraImpcatTimer.y <= 0.0f) { + goto clearV; + } + } else { + clearV: + vCameraImpcat.y = 0.0f; + } + } + } + + if (!bOutside) { + float fSeconds = (Timer(WorldTimer - tLastGearChange)).GetSeconds(); + if (fSeconds >= 1.0f) { + if (0.4f < pCar->GetVelMag() && pCar->IsGearChanging()) { + tLastGearChange = WorldTimer; + } + } else { + tTable gear_changing_table(CameraGearChangingCurve, 9, 0.0f, 1.0f); + float eyeMove; + gear_changing_table.GetValue(&eyeMove, fSeconds); + float speed_attenuation = bClamp(pCar->GetVelMag() * 0.01f, 0.0f, 1.0f); + float lag_scale = bAbs(vEye.x); + vEye.x = vEye.x + eyeMove * lag_scale * 0.5f * (1.0f - speed_attenuation); + } + } + + bool isUnder = false; + if (!bOutside) { + float fSeconds = (Timer(WorldTimer - tLastUnderVehicle)).GetSeconds() * 0.001f; + float fCurve = 2.0f - bClamp(fSeconds, 0.0f, 2.0f); + if (fCurve > 1.0f) { + fCurve = 3.0f - fCurve; + } + vEye.z = fCurve * 0.05f + vEye.z; + if (0.0f < fCurve) { + isUnder = true; + } + } + + pUp->SetDuration(0.0f, 0.0f, 0.0f); + pFov->SetDuration(0.0f); + pEye->SetDuration(0.0f, 0.0f, 0.0f); + pLook->SetDuration(0.0f, 0.0f, 0.0f); + pForward->SetDuration(0.0f, 0.0f, collision_damper + drift_damper); + + if (HighliteMode()) { + eye_duration = pov_data.fEyeDuration * 2.0f; + } + + pEye->SetDuration(eye_duration, eye_duration, eye_duration); + + pUp->Update(dT, 0.0f, 0.0f); + pFov->Update(dT, 0.0f, 0.0f); + pEye->Update(dT, 0.0f, 0.0f); + pLook->Update(dT, 0.0f, 0.0f); + pForward->Update(dT, 0.0f, 0.0f); + + bOutside = OutsidePovType(pov->Type); + + target_dist = bDistBetween(GetCamera()->GetPosition(), pCar->GetGeometryPosition()); + if (Camera::StopUpdating == 0) { + GetCamera()->SetTargetDistance(target_dist); + } + + fSign = 0.0f; + if (!bPerfectFocus) { + if (Camera::StopUpdating == 0) { + GetCamera()->SetFocalDistance(40.0f); + } + fSign = 100.0f; + } else { + if (Camera::StopUpdating == 0) { + GetCamera()->SetFocalDistance(0.0f); + } + } + if (Camera::StopUpdating == 0) { + GetCamera()->SetDepthOfField(fSign); + } + + if (GRaceStatus::Exists() && pCar->IsDragRace()) { + float seconds = GRaceStatus::Get().GetRaceTimeElapsed(); + if (seconds < 0.0f) { + float t = -seconds; + bVector3 velCopy = *pCar->GetVelocity(); + vEye = (*pCar->GetUpVector()) * t + velCopy * (t * 0.5f) + vEye; + } + } + + bVector3 vDiff = vEye - vLook; + vDiff *= f_stiffness; + vLook = vLook + vDiff; + vEye = vLook; + + unsigned short a_fov = static_cast(static_cast(pFov->Val)); + float f_tan_fov = bTan(a_fov >> 1); + unsigned short a_new_fov = bATan(1.0f, f_tan_fov) << 1; + + if (Camera::StopUpdating == 0) { + GetCamera()->SetFieldOfView(a_new_fov); + } + + bMatrix4 mWorldToCamera; + eCreateLookAtMatrix(&mWorldToCamera, vEye, vLook, vUp); + + ApplyCameraShake(0, &mWorldToCamera); + HandheldNoise(&mWorldToCamera, PovHandheldNoiseScale[nPovTypeUsed], true); + + if (!AmIinATunnel(eGetView(0, false), 1)) { + float speed_attenuation = bClamp(pCar->GetVelMag() * 0.01f, 0.0f, 1.0f); + float f_chopper_scale = PovHandheldChopperScale[nPovTypeUsed] * (1.0f - speed_attenuation * 0.5f); + ChopperNoise(&mWorldToCamera, f_chopper_scale, true); + } + + TerrainVelocityNoise(&mWorldToCamera, pCar, PovVelocityNoiseScale[nPovTypeUsed], + PovTerrainNoiseScale[nPovTypeUsed]); + + if (!bOutside) { + MinGapTopology(&mWorldToCamera, pCar->GetGeometryPosition()); + if (!isUnder) { + MinGapCars(&mWorldToCamera, pCar->GetGeometryPosition(), const_cast(pCar->GetVelocity())); + } + } + + GetCamera()->SetCameraMatrix(mWorldToCamera, dT); +} \ No newline at end of file diff --git a/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp b/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp index e69de29bb..43b1b5a5f 100644 --- a/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp @@ -0,0 +1,285 @@ +#include "Speed/Indep/Src/Camera/CameraMover.hpp" +#include "Speed/Indep/Src/Ecstasy/eMath.hpp" +#include "Speed/Indep/Src/Input/ActionQueue.h" +#include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" +#include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" +#include "Speed/Indep/Src/Misc/Table.hpp" +#include "Speed/Indep/Src/World/WCollisionMgr.h" +#include "Speed/Indep/bWare/Inc/bFunk.hpp" + +extern float DebugCameraNearPlane; +extern bVector3 JumpToPosition; +extern bool gDebugCameraSetEye; +extern bool gDebugCameraSetLook; +extern bVector3 gDebugCameraTweakableEye; +extern bVector3 gDebugCameraTweakableLook; +extern tGraph gDebugCameraInputGraph; + +unsigned short bFixATan(int x); +unsigned short bFixATan(int x, int y); + +bVector3 DebugWorldCameraMover::Eye; +bVector3 DebugWorldCameraMover::Look; +bVector3 DebugWorldCameraMover::Up; +float DebugWorldCameraMover::TurboSpeed = 3.06f; +float DebugWorldCameraMover::SuperTurboSpeed = 7.16f; +int DebugWorldCameraMover::TurboOn; +int DebugWorldCameraMover::SuperTurboOn; + +DebugWorldCameraMover::DebugWorldCameraMover(int view_id, const bVector3 *start_position, + const bVector3 *start_direction, JoystickPort jp) + : CameraMover(view_id, CM_DEBUG_WORLD) { + JoyPort = jp; + TurnVInc = 0; + TurnHInc = 0; + StrafeInc = 0.0f; + HeightInc = 0.0f; + ForwardInc = 0.0f; + ForwardAnalogInc = 0.0f; + SuperTurboOn = 0; + Eye = *start_position; + TurboOn = 0; + Look = *start_direction; + PrevNearZ = GetCamera()->GetNearZ(); + GetCamera()->SetNearZ(DebugCameraNearPlane); + mActionQ = new ActionQueue(JoyPort, 0x98c7a2f5, "DebugWorld", false); +} + +DebugWorldCameraMover::~DebugWorldCameraMover() { + if (mActionQ != nullptr) { + GetCamera()->SetNearZ(PrevNearZ); + if (mActionQ != nullptr) { + delete mActionQ; + } + mActionQ = nullptr; + } +} + +void DebugWorldCameraMover::JoyHandler() { + if (mActionQ == nullptr) { + return; + } + + while (!mActionQ->IsEmpty()) { + ActionRef aRef = mActionQ->GetAction(); + float data = gDebugCameraInputGraph.GetValue(aRef.Data()); + + int id = aRef.ID(); + switch (id) { + case 0x35: + HeightInc = data * 1.0f; + break; + case 0x36: + HeightInc = data * 2.0f; + break; + case 0x37: + StrafeInc = -data * 3.0f; + break; + case 0x38: + StrafeInc = data * 3.0f; + break; + case 0x39: + ForwardAnalogInc = data * 4.0f; + break; + case 0x3a: + ForwardAnalogInc = -data * 4.0f; + break; + case 0x3b: + StrafeInc = -data * 3.0f; + break; + case 0x3c: + StrafeInc = data * 3.0f; + break; + case 0x3d: + ForwardInc = -data * 4.0f; + break; + case 0x3e: + ForwardInc = data * 4.0f; + break; + case 0x3f: + TurnVInc = static_cast(static_cast(-data * 5.0f)); + break; + case 0x40: + TurnVInc = static_cast(static_cast(-data * 5.0f)); + break; + case 0x41: + TurnHInc = static_cast(static_cast(-data * 6.0f)); + break; + case 0x42: + TurnHInc = static_cast(static_cast(data * 6.0f)); + break; + case 0x43: + TurnHInc = static_cast(static_cast(data * 6.0f)); + break; + case 0x44: + TurnVInc = static_cast(static_cast(-data * 5.0f)); + break; + case 0x45: + TurnHInc = static_cast(static_cast(-data * 6.0f)); + break; + case 0x46: + TurnHInc = static_cast(static_cast(data * 6.0f)); + break; + case 0x47: + if (data == 0.0f) { + TurboOn = 0; + } else { + TurboOn = 1; + } + break; + case 0x48: + if (data == 0.0f) { + SuperTurboOn = 0; + } else { + SuperTurboOn = 1; + } + break; + case 0x49: { + bVector3 simpos; + eUnSwizzleWorldVector(*GetPosition(), simpos); + IPlayer *player = IPlayer::First(PLAYER_LOCAL); + if (player != nullptr) { + ISimable *sim = player->GetSimable(); + if (sim != nullptr) { + WCollisionMgr wcm(0, 3); + float height = 0.0f; + wcm.GetWorldHeightAtPoint( + reinterpret_cast(simpos), height, nullptr); + height += 5.0f; + IRigidBody *rb = sim->GetRigidBody(); + rb->SetPosition(reinterpret_cast(simpos)); + } + } + break; + } + default: + break; + } + + mActionQ->PopAction(); + } +} + +void DebugWorldCameraMover::Update(float dT) { + if (JumpToPosition.y != 0.0f) { + JumpToPosition.z += 100.0f; + bVector3 dir = Eye - Look; + bVector3 eyelook; + bNormalize(&eyelook, &dir, 1.0f); + bVector3 newEye = JumpToPosition + eyelook; + Eye = newEye; + Look = JumpToPosition; + bFill(&JumpToPosition, 0.0f, 0.0f, 0.0f); + bRefreshTweaker(); + } + + if (gDebugCameraSetEye) { + eSwizzleWorldVector(gDebugCameraTweakableEye, Eye); + gDebugCameraSetEye = false; + } + + if (gDebugCameraSetLook) { + eSwizzleWorldVector(gDebugCameraTweakableLook, Look); + gDebugCameraSetLook = false; + } + + JoyHandler(); + + bVector3 eyelook = Look - Eye; + unsigned short hAngle = bFixATan(static_cast(eyelook.x * 65536.0f), + static_cast(eyelook.y * 65536.0f)); + + if (TurnHInc != 0 || HeightInc != 0.0f) { + float xylen = eyelook.x * eyelook.x + eyelook.y * eyelook.y; + hAngle = (hAngle + static_cast(static_cast(TurnHInc) * dT)) & 0xffff; + + if (xylen > 0.0001f) { + float invlen = 1.0f / __builtin_sqrtf(xylen); + invlen = -(xylen * invlen * invlen - 3.0f) * invlen * 0.5f + invlen; + xylen = (-(xylen * invlen * invlen - 3.0f) * invlen * 0.5f + invlen) * xylen; + } + + unsigned short pitch = bFixATan(static_cast(xylen * 65536.0f), + static_cast(eyelook.z * 65536.0f)); + pitch = (pitch + static_cast(static_cast(TurnVInc) * dT)) & 0xffff; + + if (pitch - 0x3ff7 < 0x4009) { + pitch = 0x3ff6; + } + if (((pitch - 0x8000) & 0xffff) < 0x400a) { + pitch = 0xc00a; + } + + float fi; + if (SuperTurboOn != 0) { + fi = HeightInc * SuperTurboSpeed; + } else if (TurboOn != 0) { + fi = HeightInc * TurboSpeed; + } else { + fi = HeightInc; + } + + float hi = fi * dT; + Eye.z += hi; + + float dist = 100.0f; + Look.x = bCos(pitch) * (bCos(hAngle) * dist) + Eye.x; + Look.y = bCos(pitch) * (bSin(hAngle) * dist) + Eye.y; + Look.z = bSin(pitch) * dist + Eye.z; + } + + if (ForwardInc != 0.0f) { + float fi; + if (SuperTurboOn != 0) { + fi = ForwardInc * SuperTurboSpeed; + } else if (TurboOn != 0) { + fi = ForwardInc * TurboSpeed; + } else { + fi = ForwardInc; + } + float amount = fi * dT; + bVector3 forward = *GetCamera()->GetDirection() * amount; + Eye += forward; + Look += forward; + } else if (ForwardAnalogInc != 0.0f) { + float fi; + if (SuperTurboOn != 0) { + fi = ForwardAnalogInc * SuperTurboSpeed; + } else if (TurboOn != 0) { + fi = ForwardAnalogInc * TurboSpeed; + } else { + fi = ForwardAnalogInc; + } + float amount = fi * dT; + bVector3 forward = *GetCamera()->GetDirection() * amount; + Eye += forward; + Look += forward; + } + + if (StrafeInc != 0.0f) { + float si; + if (SuperTurboOn != 0) { + si = StrafeInc * SuperTurboSpeed; + } else if (TurboOn != 0) { + si = StrafeInc * TurboSpeed; + } else { + si = StrafeInc; + } + unsigned short sAngle = (hAngle + 0x4000) & 0xffff; + float cval = bCos(sAngle) * (si * dT); + float sval = bSin(sAngle) * (si * dT); + bVector3 rl(cval, sval, 0.0f); + Eye += rl; + Look += rl; + } + + bVector3 up; + ComputeBankedUpVector(&up, &Eye, &Look, 0); + bMatrix4 m; + eCreateLookAtMatrix(&m, Eye, Look, up); + + if (Camera::StopUpdating == 0) { + GetCamera()->SetFieldOfView(0x32dc); + } + GetCamera()->SetCameraMatrix(m, dT); +} diff --git a/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp b/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp index e69de29bb..a969b7042 100644 --- a/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp @@ -0,0 +1,84 @@ +#include "Speed/Indep/Src/Camera/CameraMover.hpp" +#include "Speed/Indep/Src/Interfaces/Simables/IAI.h" +#include "Speed/Indep/Libs/Support/Utility/UVector.h" + +extern float TrackCarEyeOffsetZ[]; + +static bool IsAnyCopNear(CameraAnchor *pCar) { + IVehicle *const *iter = IVehicle::GetList(VEHICLE_AICOPS).begin(); + + while (iter != IVehicle::GetList(VEHICLE_AICOPS).end()) { + IVehicle *p_car = *iter; + if (p_car != nullptr && p_car->IsActive()) { + UVector3 ucoppos(p_car->GetPosition()); + bVector3 coppos; + bVector3 copdir; + eSwizzleWorldVector(reinterpret_cast(ucoppos), coppos); + bSub(&copdir, &coppos, pCar->GetGeometryPosition()); + float copdist = bLength(&copdir); + if (copdist < 30.0f) { + return true; + } + } + ++iter; + } + return false; +} + +static bool IsBeingPursued(int nView) { + IPerpetrator *iperp; + const IPlayer::List &playerList = IPlayer::GetList(PLAYER_ALL); + + IPlayer *const *iter = playerList.begin(); + + while (iter != playerList.end()) { + IPlayer *ip = *iter; + if (ip->GetRenderPort() == nView) { + ISimable *simable = ip->GetSimable(); + if (simable != nullptr) { + simable->QueryInterface(&iperp); + if (iperp != nullptr) { + if (iperp->IsBeingPursued()) { + return true; + } + } + } + return false; + } + ++iter; + } + return false; +} + +static void FixWorldHeight(UMath::Vector3 *point, int type) { + if (!IsGameFlowInGame()) { + return; + } + + UMath::Vector3 test; + float ground_elevation = 0.0f; + + test = *point; + test.y += 4.0f; + + WCollisionMgr collision_mgr(0, 3); + + if (collision_mgr.GetWorldHeightAtPointRigorous(test, ground_elevation, nullptr)) { + if (type == 3) { + point->y = ground_elevation; + } + } + + if (ground_elevation > point->y) { + point->y = ground_elevation; + } + + point->y += TrackCarEyeOffsetZ[type]; +} + +// TEMP: force emission for testing +volatile void *_force_active_TrackCar[] = { + (void *)IsAnyCopNear, + (void *)IsBeingPursued, + (void *)FixWorldHeight, +}; \ No newline at end of file diff --git a/src/Speed/Indep/Src/Ecstasy/Ecstasy.hpp b/src/Speed/Indep/Src/Ecstasy/Ecstasy.hpp index a325f01ac..954fcba47 100644 --- a/src/Speed/Indep/Src/Ecstasy/Ecstasy.hpp +++ b/src/Speed/Indep/Src/Ecstasy/Ecstasy.hpp @@ -108,6 +108,10 @@ inline void eUnSwizzleWorldVector(const bVector3 &inVec, bVector3 &outVec) { bConvertToBond(outVec, inVec); } +inline void eSwizzleWorldMatrix(const bMatrix4 &inMat, bMatrix4 &outMat) { + bConvertFromBond(outMat, inMat); +} + eRenderTarget *eGetRenderTarget(int render_target); void eUpdateViewMode(void); diff --git a/src/Speed/Indep/Src/Misc/Table.hpp b/src/Speed/Indep/Src/Misc/Table.hpp index 6672953f1..e74f07eac 100644 --- a/src/Speed/Indep/Src/Misc/Table.hpp +++ b/src/Speed/Indep/Src/Misc/Table.hpp @@ -29,6 +29,14 @@ class TableBase { IndexMultiplier = (NumEntries - 1) / (MaxArg - MinArg); } + int GetNumEntries() const { + return NumEntries; + } + + float GetIndex(float f) const { + return (f - MinArg) * IndexMultiplier; + } + protected: int NumEntries; // offset 0x0, size 0x4 float MinArg; // offset 0x4, size 0x4 @@ -56,6 +64,26 @@ template class tTable : public TableBase { T *pTable; public: + tTable(T *table, int num, float min, float max) : TableBase(num, min, max), pTable(table) {} + + void Blend(T *dest, T *a, T *b, float blend_a); + + void GetValue(T *p, float arg) { + int entries = GetNumEntries(); + float normarg = GetIndex(arg); + int index = static_cast(normarg); + if (index < 0) { + bMemCpy(p, &pTable[0], sizeof(T)); + } else if (index < entries - 1) { + float blend = normarg - bFloor(normarg); + if (normarg < blend) { + blend = blend - 1.0f; + } + Blend(p, &pTable[index + 1], &pTable[index], blend); + } else { + bMemCpy(p, &pTable[entries - 1], sizeof(T)); + } + } }; class AverageBase { @@ -94,13 +122,35 @@ class AverageBase { virtual void Recalculate() {} - protected: unsigned char nSize; unsigned char nSlots; unsigned char nSamples; unsigned char nCurrentSlot; }; +template class tAverage : public AverageBase { + public: + tAverage(int nSlots) : AverageBase(sizeof(T), nSlots) { + pData = static_cast(AverageBase::Allocate(sizeof(T) * nSlots, nullptr)); + } + + virtual ~tAverage() { + AverageBase::DeAllocate(pData, sizeof(T) * nSlots, nullptr); + } + + T *GetValue() { + return &Average; + } + + void Record(T *pValue); + + virtual void Recalculate(); + + T *pData; // offset 0x8, size 0x4 + T Total; // offset 0xC + T Average; // offset varies +}; + class Average : public AverageBase { public: Average(); diff --git a/src/Speed/Indep/Src/Misc/Timer.hpp b/src/Speed/Indep/Src/Misc/Timer.hpp index 634d10422..621ce9360 100644 --- a/src/Speed/Indep/Src/Misc/Timer.hpp +++ b/src/Speed/Indep/Src/Misc/Timer.hpp @@ -49,6 +49,10 @@ class Timer { Timer operator*(const Timer &t) const {} + Timer operator-(const Timer &t) const { + return Timer(PackedTime - t.PackedTime); + } + Timer &operator+=(const Timer &t) {} Timer &operator-=(const Timer &t) {} diff --git a/src/Speed/Indep/Src/World/RaceParameters.hpp b/src/Speed/Indep/Src/World/RaceParameters.hpp index f3484afd2..b7a40981c 100644 --- a/src/Speed/Indep/Src/World/RaceParameters.hpp +++ b/src/Speed/Indep/Src/World/RaceParameters.hpp @@ -76,6 +76,10 @@ struct RaceParameters { return ((this->bDriftRaceFlag) || (g_tweakIsDriftRace)); } + inline bool IsBurnout() { + return ((this->bBurnoutFlag) || (g_tweakIsBurnout)); + } + int TrackNumber; // offset 0x0, size 0x4 eTrackDirection TrackDirection; // offset 0x4, size 0x4 eTrafficDensity TrafficDensity; // offset 0x8, size 0x4 diff --git a/src/Speed/Indep/Src/World/World.hpp b/src/Speed/Indep/Src/World/World.hpp index 0f0115f73..4569b789f 100644 --- a/src/Speed/Indep/Src/World/World.hpp +++ b/src/Speed/Indep/Src/World/World.hpp @@ -57,6 +57,7 @@ enum eTimeOfDay { }; extern int g_tweakIsDriftRace; +extern int g_tweakIsBurnout; void ServiceSpaceNodes(); void ResetWorldTime(); diff --git a/src/Speed/Indep/Tools/Inc/ConversionUtil.hpp b/src/Speed/Indep/Tools/Inc/ConversionUtil.hpp index 780e5a3c0..8b044fa4b 100644 --- a/src/Speed/Indep/Tools/Inc/ConversionUtil.hpp +++ b/src/Speed/Indep/Tools/Inc/ConversionUtil.hpp @@ -99,4 +99,73 @@ inline Mps KPH2MPS(Kph x) { return x / 3.6f; } +namespace ConversionUtil { + +template +inline void Copy4(T1 &out, const T2 &in) { + out.x = in.x; + out.y = in.y; + out.z = in.z; + out.w = in.w; +} + +template +inline void Scale3(T &v, float s) { + v.x *= s; + v.y *= s; + v.z *= s; +} + +template +inline T Make4(float x, float y, float z, float w) { + T v; + v.x = x; + v.y = y; + v.z = z; + v.w = w; + return v; +} + +template +inline T Make3(float x, float y, float z) { + T v; + v.x = x; + v.y = y; + v.z = z; + return v; +} + +template +inline void RightToLeftVector4(const T1 &in, T2 &out) { + out.x = in.x; + out.y = in.z; + out.z = -in.y; + out.w = in.w; +} + +template +inline void RightToLeftVector3(const T1 &in, T2 &out) { + out.x = in.x; + out.y = in.z; + out.z = -in.y; +} + +template +inline void RightToLeftMatrix4(const T1 &in, T2 &out) { + T2 tmp; + RightToLeftVector4(in[0], tmp[0]); + RightToLeftVector4(in[1], tmp[1]); + RightToLeftVector4(in[2], tmp[2]); + RightToLeftVector4(in[3], tmp[3]); + out[0] = tmp[0]; + out[1] = tmp[2]; + out[2].x = -tmp[1].x; + out[2].y = -tmp[1].y; + out[2].z = -tmp[1].z; + out[2].w = -tmp[1].w; + out[3] = tmp[3]; +} + +} // namespace ConversionUtil + #endif diff --git a/src/Speed/Indep/bWare/Inc/bMath.hpp b/src/Speed/Indep/bWare/Inc/bMath.hpp index d4ef923de..c3df16fe7 100644 --- a/src/Speed/Indep/bWare/Inc/bMath.hpp +++ b/src/Speed/Indep/bWare/Inc/bMath.hpp @@ -316,6 +316,7 @@ struct ALIGN_16 bVector3 { bVector3 *bNormalize(bVector3 *dest, const bVector3 *v); bVector3 *bNormalize(bVector3 *dest, const bVector3 *v, float length); bVector3 *bScaleAdd(bVector3 *dest, const bVector3 *v1, const bVector3 *v2, float scale); +bVector3 *bCross(bVector3 *dest, const bVector3 *v1, const bVector3 *v2); inline bVector3 *bFill(bVector3 *dest, float x, float y, float z) { dest->x = x; @@ -853,6 +854,7 @@ void bMulMatrix(bVector3 *dest, const bMatrix4 *a, const bVector3 *b); bMatrix4 *bTransposeMatrix(bMatrix4 *dest, const bMatrix4 *m); void bInvertMatrix(bMatrix4 *dest, const bMatrix4 *src); +void bConvertFromBond(bMatrix4 &dest, const bMatrix4 &m); struct bQuaternion { // total size: 0x10 From 7760f93c463042302654df73a7f4790c2b650729 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 10 Mar 2026 23:54:34 +0100 Subject: [PATCH 007/691] Implement CDAction Construct functions and Action::operator new Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Libs/Support/Utility/UCOM.h | 4 + .../Src/Camera/Actions/CDActionDebug.cpp | 26 ++++- .../Camera/Actions/CDActionDebugWatchCar.cpp | 6 +- .../Src/Camera/Actions/CDActionDrive.cpp | 23 ++++- .../Indep/Src/Camera/Actions/CDActionIce.cpp | 29 +++++- .../Src/Camera/Actions/CDActionShowcase.cpp | 76 ++++++++++++++- .../Src/Camera/Actions/CDActionTrackCar.cpp | 23 ++++- .../Src/Camera/Actions/CDActionTrackCop.cpp | 78 ++++++++++++++- src/Speed/Indep/Src/Camera/CameraAI.cpp | 10 ++ src/Speed/Indep/Src/Camera/CameraAI.hpp | 20 ++++ .../Indep/Src/Camera/Movers/SelectCar.cpp | 95 ++++++++++++++++++- .../Indep/Src/Camera/Movers/TrackCar.cpp | 3 +- 12 files changed, 373 insertions(+), 20 deletions(-) diff --git a/src/Speed/Indep/Libs/Support/Utility/UCOM.h b/src/Speed/Indep/Libs/Support/Utility/UCOM.h index 511c88f54..d55a5db69 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UCOM.h +++ b/src/Speed/Indep/Libs/Support/Utility/UCOM.h @@ -54,6 +54,10 @@ class Object { return gFastMem.Alloc(size, nullptr); } + void *operator new(std::size_t size, const char *name) { + return gFastMem.Alloc(size, name); + } + Object(std::size_t icount) : _mInterfaces(icount) {} ~Object() {} diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp index 57296e86a..8e2714c64 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp @@ -16,14 +16,32 @@ Attrib::StringKey CDActionDebug::GetNext() const { } CameraAI::Action *CDActionDebug::Construct(CameraAI::Director *director) { - // TODO - return nullptr; + return new ("CDActionDebug") CDActionDebug(director); } CDActionDebug::CDActionDebug(CameraAI::Director *director) : CameraAI::Action(), // - mActionQ(false) { - // TODO + mActionQ(1, 0x98c7a2f5, "DebugWorld", false) { + mDone = false; + mPrev = director->GetAction()->GetName(); + + CameraMover *m = director->GetMover(); + bVector3 pos; + bVector3 dir; + + if (m != nullptr) { + pos = m->GetCamera()->GetPosition(); + dir = m->GetCamera()->GetDirection(); + } else { + pos.x = 0.0f; + pos.y = 0.0f; + pos.z = 0.0f; + dir.x = 0.0f; + dir.y = 0.0f; + dir.z = 1.0f; + } + + mMover = new DebugWorldCameraMover(static_cast(director->GetViewID()), &pos, &dir, static_cast(director->GetViewID())); } CDActionDebug::~CDActionDebug() { diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp index 551cb3619..56c34947d 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp @@ -26,8 +26,10 @@ void CDActionDebugWatchCar::AquireTarget() { } CameraAI::Action *CDActionDebugWatchCar::Construct(CameraAI::Director *director) { - // TODO - return nullptr; + if (!director->GetAction()) { + return nullptr; + } + return new CDActionDebugWatchCar(director); } CDActionDebugWatchCar::CDActionDebugWatchCar(CameraAI::Director *director) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index 9cdfb5814..8c13eb42c 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -1,6 +1,7 @@ #include "Speed/Indep/Src/Camera/Actions/CDActionDrive.hpp" #include "Speed/Indep/Src/Camera/CameraMover.hpp" #include "Speed/Indep/Src/Generated/Messages/MJumpCut.h" +#include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" static float kCinematicMomementSeconds; @@ -39,8 +40,26 @@ const IAttachable::List *CDActionDrive::GetAttachments() const { } CameraAI::Action *CDActionDrive::Construct(CameraAI::Director *director) { - // TODO - return nullptr; + IPlayer *player = nullptr; + { + const UTL::Vector &list = IPlayer::GetList(PLAYER_LOCAL); + for (IPlayer *const *iter = list.begin(); iter != list.end(); ++iter) { + IPlayer *ip = *iter; + if (ip->GetRenderPort() == director->GetViewID()) { + player = ip; + break; + } + } + } + if (!player) return nullptr; + if (!player->GetSettings()) return nullptr; + ISimable *isimable = player->GetSimable(); + if (!isimable) return nullptr; + { + unsigned int world_id = isimable->GetWorldID(); + if (!world_id) return nullptr; + return new ((const char *)nullptr) CDActionDrive(director, player); + } } CDActionDrive::CDActionDrive(CameraAI::Director *director, IPlayer *player) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp index ecb7c9cff..85247bac6 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp @@ -1,5 +1,10 @@ #include "Speed/Indep/Src/Camera/Actions/CDActionIce.hpp" #include "Speed/Indep/Src/Camera/CameraMover.hpp" +#include "Speed/Indep/Src/Camera/ICE/ICEManager.hpp" +#include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" + +extern ICEManager TheICEManager; +extern int Tweak_ForceICEReplay; #include "Speed/Indep/Src/Camera/ICE/ICEMover.hpp" static UTL::COM::Factory::Prototype _CDActionIce("ICE", CDActionIce::Construct); @@ -37,8 +42,28 @@ const IAttachable::List *CDActionIce::GetAttachments() const { } CameraAI::Action *CDActionIce::Construct(CameraAI::Director *director) { - // TODO - return nullptr; + IPlayer *player = nullptr; + { + const UTL::Vector &list = IPlayer::GetList(PLAYER_LOCAL); + for (IPlayer *const *iter = list.begin(); iter != list.end(); ++iter) { + IPlayer *ip = *iter; + if (ip->GetRenderPort() == director->GetViewID()) { + player = ip; + break; + } + } + } + if (!player) return nullptr; + if (!player->GetSettings()) return nullptr; + ISimable *isimable = player->GetSimable(); + if (!isimable) return nullptr; + { + unsigned int world_id = isimable->GetWorldID(); + if (!world_id) return nullptr; + bool have_a_track = TheICEManager.ChooseCameraPlaybackTrack(); + if (!have_a_track && !Tweak_ForceICEReplay) return nullptr; + return new ((const char *)nullptr) CDActionIce(director, player); + } } CDActionIce::CDActionIce(CameraAI::Director *director, IPlayer *player) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp index ceb605722..c5a1e9c50 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp @@ -1,5 +1,15 @@ #include "Speed/Indep/Src/Camera/Actions/CDActionShowcase.hpp" #include "Speed/Indep/Src/Camera/CameraMover.hpp" +#include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" +#include "Speed/Indep/Src/Camera/Movers/Showcase.hpp" +#include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" +#include "Speed/Indep/Src/Interfaces/Simables/ICollisionBody.h" +#include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" +#include "Speed/Indep/Libs/Support/Utility/UVector.h" + +static bool IsRightSide() { + return false; +} static UTL::COM::Factory::Prototype _CDActionShowcase("SHOWCASE", CDActionShowcase::Construct); @@ -29,14 +39,74 @@ const IAttachable::List *CDActionShowcase::GetAttachments() const { } CameraAI::Action *CDActionShowcase::Construct(CameraAI::Director *director) { - // TODO - return nullptr; + IPlayer *player = nullptr; + int player_idx; + ISimable *isimable; + const IPlayer::List &list = IPlayer::GetList(PLAYER_LOCAL); + for (IPlayer *const *iter = list.begin(); iter != list.end(); ++iter) { + IPlayer *ip = *iter; + if (ip->GetControllerPort() == static_cast(director->GetViewID())) { + player = ip; + break; + } + } + + if (player == nullptr) { + return nullptr; + } + + isimable = player->GetSimable(); + if (isimable == nullptr) { + return nullptr; + } + + IVehicle *ivehicle = nullptr; + isimable->QueryInterface(&ivehicle); + if (ivehicle == nullptr) { + return nullptr; + } + + unsigned int world_id = isimable->GetWorldID(); + if (world_id == 0) { + return nullptr; + } + + return new ("CDActionShowcase") CDActionShowcase(director, player); } CDActionShowcase::CDActionShowcase(CameraAI::Director *director, IPlayer *player) : CameraAI::Action(), // IAttachable(this) { - // TODO + mTarget = WorldConn::Reference(0); + mPlayer = player; + mVehicle = nullptr; + mViewID = director->GetViewID(); + + mAttachments = new Sim::Attachments(static_cast(this)); + + mAnchor = new CameraAnchor(0); + + AquireCar(); + + if (mTarget.IsValid()) { + bMatrix4 mat(*mTarget.GetMatrix()); + + ICollisionBody *irbc = nullptr; + mVehicle->QueryInterface(&irbc); + if (irbc != nullptr) { + IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); + UVector3 cg(irbc->GetCenterOfGravity()); + irb->ConvertLocalToWorld(cg, false); + cg += irb->GetPosition(); + eSwizzleWorldVector(static_cast(cg), static_cast(cg)); + } + + mAnchor->Update(0.0f, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); + } + + bool flipSide = IsRightSide(); + mMover = new ShowcaseCameraMover(static_cast(director->GetViewID()), mAnchor, flipSide); + mMover->GetCamera()->SetRenderDash(0); } CDActionShowcase::~CDActionShowcase() { diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp index e79979119..2135d8515 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp @@ -1,5 +1,6 @@ #include "Speed/Indep/Src/Camera/Actions/CDActionTrackCar.hpp" #include "Speed/Indep/Src/Camera/CameraMover.hpp" +#include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" static UTL::COM::Factory::Prototype _CDActionTrackCar("TRACKCAR", CDActionTrackCar::Construct); @@ -29,8 +30,26 @@ const IAttachable::List *CDActionTrackCar::GetAttachments() const { } CameraAI::Action *CDActionTrackCar::Construct(CameraAI::Director *director) { - // TODO - return nullptr; + IPlayer *player = nullptr; + { + const UTL::Vector &list = IPlayer::GetList(PLAYER_LOCAL); + for (IPlayer *const *iter = list.begin(); iter != list.end(); ++iter) { + IPlayer *ip = *iter; + if (ip->GetRenderPort() == director->GetViewID()) { + player = ip; + break; + } + } + } + if (!player) return nullptr; + if (!player->GetSettings()) return nullptr; + ISimable *isimable = player->GetSimable(); + if (!isimable) return nullptr; + { + unsigned int world_id = isimable->GetWorldID(); + if (!world_id) return nullptr; + return new ((const char *)nullptr) CDActionTrackCar(director, player); + } } CDActionTrackCar::CDActionTrackCar(CameraAI::Director *director, IPlayer *player) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp index 54c1dc002..3d1b40f25 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp @@ -1,5 +1,10 @@ #include "Speed/Indep/Src/Camera/Actions/CDActionTrackCop.hpp" #include "Speed/Indep/Src/Camera/CameraMover.hpp" +#include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" +#include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" +#include "Speed/Indep/Src/Interfaces/Simables/ICollisionBody.h" +#include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" +#include "Speed/Indep/Libs/Support/Utility/UVector.h" static UTL::COM::Factory::Prototype _CDActionTrackCop("TRACKCOP", CDActionTrackCop::Construct); @@ -29,14 +34,81 @@ const IAttachable::List *CDActionTrackCop::GetAttachments() const { } CameraAI::Action *CDActionTrackCop::Construct(CameraAI::Director *director) { - // TODO - return nullptr; + IPlayer *player = nullptr; + int player_idx; + ISimable *isimable; + const IPlayer::List &list = IPlayer::GetList(PLAYER_LOCAL); + for (IPlayer *const *iter = list.begin(); iter != list.end(); ++iter) { + IPlayer *ip = *iter; + if (ip->GetControllerPort() == static_cast(director->GetViewID())) { + player = ip; + break; + } + } + + if (player == nullptr) { + return nullptr; + } + + isimable = player->GetSimable(); + if (isimable == nullptr) { + return nullptr; + } + + IVehicle *ivehicle = nullptr; + isimable->QueryInterface(&ivehicle); + if (ivehicle == nullptr) { + return nullptr; + } + + unsigned int world_id = isimable->GetWorldID(); + if (world_id == 0) { + return nullptr; + } + + return new ("CDActionTrackCop") CDActionTrackCop(director, player); } CDActionTrackCop::CDActionTrackCop(CameraAI::Director *director, IPlayer *player) : CameraAI::Action(), // IAttachable(this) { - // TODO + mTarget = WorldConn::Reference(0); + mPlayer = player; + mVehicle = nullptr; + bool renderCarPOV = true; + mViewID = director->GetViewID(); + + mAttachments = new Sim::Attachments(static_cast(this)); + mAttachments->Attach(mPlayer); + + CameraMover *m = director->GetMover(); + if (m != nullptr) { + renderCarPOV = m->RenderCarPOV(); + } + + mAnchor = new CameraAnchor(0); + + AquireCar(); + + if (mTarget.IsValid()) { + bMatrix4 mat(*mTarget.GetMatrix()); + + ICollisionBody *irbc = nullptr; + mVehicle->QueryInterface(&irbc); + if (irbc != nullptr) { + IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); + UVector3 cg(irbc->GetCenterOfGravity()); + irb->ConvertLocalToWorld(cg, false); + cg += irb->GetPosition(); + eSwizzleWorldVector(static_cast(cg), static_cast(cg)); + } + + mAnchor->Update(0.0f, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); + } + + mMover = new TrackCopCameraMover(static_cast(director->GetViewID()), mAnchor, false); + mMover->GetCamera()->SetRenderDash(0); + static_cast(mMover)->bRenderCarPOV = renderCarPOV; } CDActionTrackCop::~CDActionTrackCop() { diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index aefeaeddf..ef7785e8a 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -13,13 +13,23 @@ #include +#include "Speed/Indep/Src/Camera/ICE/ICEManager.hpp" +#include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" +#include "Speed/Indep/Src/Interfaces/SimActivities/INIS.h" + extern Avoidables *TheAvoidables; +extern bool gGameBreakerCamera; + +void SetNewSndCamAction(Attrib::StringKey mode, EVIEW_ID viewID); static float kJumpTimeMultiplier = 2.0f; static float kEndJumpThreshold = 0.0f; static float kEndJumpValue = -1.0f; static float kEndPursuitThreshold = 0.0f; static float kEndPursuitValue = -1.0f; +static float kJumpSpeedHigh = 100.0f; +static float kJumpSpeedLow = 80.0f; +static float kJumpDuration = 5.0f; // --- Director methods --- diff --git a/src/Speed/Indep/Src/Camera/CameraAI.hpp b/src/Speed/Indep/Src/Camera/CameraAI.hpp index ed629cad1..d2ad3a808 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.hpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.hpp @@ -23,6 +23,26 @@ namespace CameraAI { struct Action : public UTL::COM::Object, public UTL::COM::Factory { Action() : UTL::COM::Object(0) {} + void *operator new(std::size_t size) { + return gFastMem.Alloc(size, nullptr); + } + + void operator delete(void *mem, std::size_t size) { + if (mem) { + gFastMem.Free(mem, size, nullptr); + } + } + + void *operator new(std::size_t size, const char *name) { + return gFastMem.Alloc(size, name); + } + + void operator delete(void *mem, const char *name) { + if (mem) { + gFastMem.Free(mem, 0, name); + } + } + virtual ~Action() {} virtual void Update(float dT) {} diff --git a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp index dd1be5c4b..1a224341a 100644 --- a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp @@ -1,4 +1,17 @@ #include "Speed/Indep/Src/Camera/Movers/SelectCar.hpp" +#include "Speed/Indep/Src/Camera/Camera.hpp" + +#include + +extern int CarGuysCamera; + +static float kSelectCarFrameRate = 60.0f; +static float kSelectCarUpperOrbitV = 110.0f; +static float kSelectCarLowerOrbitV = 94.5f; +static float kSelectCarRadiusSpeedScale = 0.125f; +static float kSelectCarUpperRadius = 6.65f; +static float kSelectCarLowerRadius = 4.65f; +static float kSelectCarWrapAngle = 360.0f; SelectCarCameraMover::~SelectCarCameraMover() {} @@ -19,7 +32,87 @@ SelectCarCameraMover::SelectCarCameraMover(int view_id) : CameraMover(view_id, C } void SelectCarCameraMover::Update(float dT) { - // TODO + SelectCarCameraData *camera_data = &CurrentCameraData; + + if (ControlMode != 2) { + float animiation_amount = 1.0f; + CurrentAnimationTime = CurrentAnimationTime + dT; + if (0.0f < TotalAnimationTime && CurrentAnimationTime < TotalAnimationTime) { + animiation_amount = CurrentAnimationTime / TotalAnimationTime; + } + float aa2 = animiation_amount * animiation_amount; + float anim = 1.0f - static_cast(expf(-Damping * aa2)) * + static_cast(cosf((static_cast(Periods) + 0.5f) * aa2 * 3.14159265f)); + if (ControlMode == 1) { + float the_frame_rate = dT * kSelectCarFrameRate; + + camera_data->OrbitHAngle = OrbitHSpeed * the_frame_rate + camera_data->OrbitHAngle; + float possibleNewOrbitV = OrbitVSpeed * the_frame_rate + camera_data->OrbitVAngle; + if (CarGuysCamera == 0) { + if (possibleNewOrbitV > kSelectCarUpperOrbitV) { + possibleNewOrbitV = kSelectCarUpperOrbitV; + } else if (possibleNewOrbitV < kSelectCarLowerOrbitV) { + possibleNewOrbitV = kSelectCarLowerOrbitV; + } + } + camera_data->OrbitVAngle = possibleNewOrbitV; + float possibleNewRadius = RadiusSpeed * (the_frame_rate * kSelectCarRadiusSpeedScale) + camera_data->Radius; + if (CarGuysCamera == 0) { + if (possibleNewRadius > kSelectCarUpperRadius) { + possibleNewRadius = kSelectCarUpperRadius; + } else if (possibleNewRadius < kSelectCarLowerRadius) { + possibleNewRadius = kSelectCarLowerRadius; + } + } + float complement = 1.0f - anim; + camera_data->Radius = possibleNewRadius; + camera_data->RollAngle = complement * StartAnimCameraData.RollAngle + anim * GoalAnimCameraData.RollAngle; + camera_data->FOV = complement * StartAnimCameraData.FOV + anim * GoalAnimCameraData.FOV; + bVector3 lookat_change = GoalAnimCameraData.LookAt - StartAnimCameraData.LookAt; + lookat_change *= anim; + camera_data->LookAt = StartAnimCameraData.LookAt + lookat_change; + if (kSelectCarWrapAngle < camera_data->OrbitHAngle) { + camera_data->OrbitHAngle = camera_data->OrbitHAngle - kSelectCarWrapAngle; + } + if (camera_data->OrbitHAngle < 0.0f) { + camera_data->OrbitHAngle = camera_data->OrbitHAngle + kSelectCarWrapAngle; + } + } else if (ControlMode == 0) { + float complement = 1.0f - anim; + camera_data->OrbitVAngle = complement * StartAnimCameraData.OrbitVAngle + anim * GoalAnimCameraData.OrbitVAngle; + camera_data->OrbitHAngle = complement * StartAnimCameraData.OrbitHAngle + anim * GoalAnimCameraData.OrbitHAngle; + camera_data->Radius = complement * StartAnimCameraData.Radius + anim * GoalAnimCameraData.Radius; + camera_data->RollAngle = complement * StartAnimCameraData.RollAngle + anim * GoalAnimCameraData.RollAngle; + camera_data->FOV = complement * StartAnimCameraData.FOV + anim * GoalAnimCameraData.FOV; + bVector3 lookat_change = GoalAnimCameraData.LookAt - StartAnimCameraData.LookAt; + lookat_change *= anim; + camera_data->LookAt = StartAnimCameraData.LookAt + lookat_change; + if (kSelectCarWrapAngle < camera_data->OrbitHAngle) { + camera_data->OrbitHAngle = camera_data->OrbitHAngle - kSelectCarWrapAngle; + } + if (camera_data->OrbitHAngle < 0.0f) { + camera_data->OrbitHAngle = camera_data->OrbitHAngle + kSelectCarWrapAngle; + } + if (kSelectCarWrapAngle < camera_data->RollAngle) { + camera_data->RollAngle = camera_data->RollAngle - kSelectCarWrapAngle; + } + if (camera_data->RollAngle < 0.0f) { + camera_data->RollAngle = camera_data->RollAngle + kSelectCarWrapAngle; + } + if (ControlMode == 0 && 1.0f <= animiation_amount) { + ControlMode = 2; + } + } + } + bMatrix4 camera_matrix; + CreateCameraMatrix(&camera_matrix, camera_data); + if (Camera::StopUpdating == 0) { + GetCamera()->SetFieldOfView(bDegToAng(camera_data->FOV)); + } + if (Camera::StopUpdating == 0) { + GetCamera()->SetTargetDistance(camera_data->Radius); + } + GetCamera()->SetCameraMatrix(camera_matrix, dT); } void SelectCarCameraMover::SetCurrentOrientation(bVector3 &orbit, float roll, float fov, bVector3 &lookAt) { diff --git a/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp b/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp index a969b7042..d21fd8018 100644 --- a/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp @@ -56,9 +56,10 @@ static void FixWorldHeight(UMath::Vector3 *point, int type) { } UMath::Vector3 test; - float ground_elevation = 0.0f; + float ground_elevation; test = *point; + ground_elevation = 0.0f; test.y += 4.0f; WCollisionMgr collision_mgr(0, 3); From d86bd1d2df7573c9892653d1b3cd0f258cce3a76 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 00:01:04 +0100 Subject: [PATCH 008/691] Fix build errors: WorldConn getters, SetRenderCarPOV, CDActionDebug casts, ICEGroup Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Src/Camera/Actions/CDActionDebug.cpp | 6 +- .../Src/Camera/Actions/CDActionShowcase.cpp | 2 +- .../Src/Camera/Actions/CDActionTrackCop.cpp | 4 +- src/Speed/Indep/Src/Camera/CameraAI.cpp | 107 ++++++++++++++++++ src/Speed/Indep/Src/Camera/CameraMover.hpp | 1 + src/Speed/Indep/Src/World/WorldConn.h | 8 ++ 6 files changed, 122 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp index 8e2714c64..c4fdf5aa9 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp @@ -30,8 +30,8 @@ CDActionDebug::CDActionDebug(CameraAI::Director *director) bVector3 dir; if (m != nullptr) { - pos = m->GetCamera()->GetPosition(); - dir = m->GetCamera()->GetDirection(); + pos = *m->GetCamera()->GetPosition(); + dir = *m->GetCamera()->GetDirection(); } else { pos.x = 0.0f; pos.y = 0.0f; @@ -41,7 +41,7 @@ CDActionDebug::CDActionDebug(CameraAI::Director *director) dir.z = 1.0f; } - mMover = new DebugWorldCameraMover(static_cast(director->GetViewID()), &pos, &dir, static_cast(director->GetViewID())); + mMover = new DebugWorldCameraMover(static_cast(director->GetViewID()), &pos, &dir, static_cast(static_cast(director->GetViewID()))); } CDActionDebug::~CDActionDebug() { diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp index c5a1e9c50..b4053dc63 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp @@ -98,7 +98,7 @@ CDActionShowcase::CDActionShowcase(CameraAI::Director *director, IPlayer *player UVector3 cg(irbc->GetCenterOfGravity()); irb->ConvertLocalToWorld(cg, false); cg += irb->GetPosition(); - eSwizzleWorldVector(static_cast(cg), static_cast(cg)); + eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(cg)); } mAnchor->Update(0.0f, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp index 3d1b40f25..3bb3085a9 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp @@ -100,7 +100,7 @@ CDActionTrackCop::CDActionTrackCop(CameraAI::Director *director, IPlayer *player UVector3 cg(irbc->GetCenterOfGravity()); irb->ConvertLocalToWorld(cg, false); cg += irb->GetPosition(); - eSwizzleWorldVector(static_cast(cg), static_cast(cg)); + eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(cg)); } mAnchor->Update(0.0f, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); @@ -108,7 +108,7 @@ CDActionTrackCop::CDActionTrackCop(CameraAI::Director *director, IPlayer *player mMover = new TrackCopCameraMover(static_cast(director->GetViewID()), mAnchor, false); mMover->GetCamera()->SetRenderDash(0); - static_cast(mMover)->bRenderCarPOV = renderCarPOV; + static_cast(mMover)->SetRenderCarPOV(renderCarPOV); } CDActionTrackCop::~CDActionTrackCop() { diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index ef7785e8a..33b9b9c73 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -244,6 +244,113 @@ void CameraAI::MaybeKillPursuitCam(unsigned int id) { } } +static float AverageAir(ISimable *isimable, float fSeconds, float *pHighest, float *pLongest) { + IRigidBody *irb = isimable->GetRigidBody(); + if (irb != nullptr) { + ICollisionBody *irbc; + if (isimable->QueryInterface(&irbc)) { + float fSpeed = irb->GetSpeed(); + if (fSpeed >= 1.0f) { + int nSteps = static_cast(fSpeed * fSeconds * 0.5f); + if (nSteps > 0) { + ISuspension *isuspension; + IVehicle *vehicle; + if (isimable->QueryInterface(&isuspension) && isimable->QueryInterface(&vehicle)) { + UMath::Vector3 p = UMath::Vector3::kZero; + + for (unsigned int j = 0; j < isuspension->GetNumWheels(); j++) { + UMath::Vector3 wp = isuspension->GetWheelPos(j); + const UMath::Vector3 &upVec = irbc->GetUpVector(); + float compression = isuspension->GetCompression(j); + UMath::ScaleAdd(upVec, -compression, wp, wp); + UMath::ScaleAdd(wp, 0.25f, p, p); + } + + UMath::Vector4 vNormal = irbc->GetGroundNormal(); + WWorldPos pTopo = isimable->GetWPos(); + pTopo.SetTolerance(5.0f); + + float fElevation = pTopo.HeightAtPoint(p); + float fAirSum = 0.0f; + float fAirMax = bMax(0.0f, p.y - fElevation); + float fStep = fSeconds / static_cast(nSteps); + float fAirTime = 0.0f; + float fDeparture = 0.0f; + + if (0.0f < fAirMax) { + fDeparture = -fStep; + fAirTime = fStep; + } + + Attrib::Gen::pvehicle attributes(vehicle->GetVehicleAttributes()); + Attrib::Gen::chassis chassis(attributes.chassis(0), 0, nullptr); + + float fDownForce = Physics::Info::AerodynamicDownforce(chassis, fSpeed); + float gravity = irbc->GetGravity(); + float fDownAccel = gravity + (-fDownForce / irb->GetMass()); + + UMath::Vector3 a = UMath::Vector3Make(0.0f, fDownAccel, 0.0f); + + const UMath::Vector3 &linVel = irb->GetLinearVelocity(); + UMath::Vector3 v; + v.x = linVel.x; + v.y = linVel.y; + v.z = linVel.z; + + UMath::Vector3 pNew; + UMath::ScaleAdd(v, 0.5f, p, pNew); + + const float tbarr = 1.0f; + + UMath::Vector4 seg[2]; + seg[0] = UMath::Vector4Make(p, tbarr); + seg[1] = UMath::Vector4Make(pNew, tbarr); + + WCollisionMgr::WorldCollisionInfo cInfo; + WCollisionMgr collMgr(0, 3); + collMgr.CheckHitWorld(seg, cInfo, 2); + + if (!cInfo.HitSomething()) { + int i = 1; + bool bHighest = pHighest != nullptr; + bool bLongest = pLongest != nullptr; + float fFuture = fAirTime; + + if (nSteps > 1) { + for (i = 1; i < nSteps; i++) { + fFuture = fStep * static_cast(i) - fDeparture; + UMath::ScaleAdd(a, fFuture * 0.5f, v, pNew); + UMath::ScaleAdd(pNew, fFuture, p, pNew); + + if (pTopo.Update(pNew, vNormal, true, nullptr, true)) { + if (pTopo.OnValidFace() && 0.5f <= vNormal.y) { + float fElevation = pTopo.HeightAtPoint(pNew); + float fAir = pNew.y - fElevation; + if (fAir <= 0.0f) break; + fAirMax = bMax(fAirMax, fAir); + fAirSum += fAir; + } + } + } + } + + if (bHighest) { + *pHighest = fAirMax; + } + if (bLongest) { + *pLongest = fFuture; + } + + return fAirSum / static_cast(i); + } + } + } + } + } + } + return 0.0f; +} + void CameraAI::MaybeKillJumpCam(unsigned int id) { Director *cd = FindDirector(id); if (cd != nullptr) { diff --git a/src/Speed/Indep/Src/Camera/CameraMover.hpp b/src/Speed/Indep/Src/Camera/CameraMover.hpp index fde00a190..dd1d49a21 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.hpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.hpp @@ -493,6 +493,7 @@ class TrackCopCameraMover : public CameraMover { virtual CameraAnchor *GetAnchor(); virtual bool RenderCarPOV(); virtual bVector3 *GetTarget(); + void SetRenderCarPOV(bool val) { bRenderCarPOV = val; } private: Bezier ZoomSpline; // offset 0x80, size 0x44 diff --git a/src/Speed/Indep/Src/World/WorldConn.h b/src/Speed/Indep/Src/World/WorldConn.h index c2a91ed2f..c0bcfdba4 100644 --- a/src/Speed/Indep/Src/World/WorldConn.h +++ b/src/Speed/Indep/Src/World/WorldConn.h @@ -30,6 +30,14 @@ class Reference { return mMatrix; } + const bVector3 *GetVelocity() const { + return mVelocity; + } + + const bVector3 *GetAcceleration() const { + return mAcceleration; + } + private: unsigned int mWorldID; // offset 0x0, size 0x4 const bMatrix4 *mMatrix; // offset 0x4, size 0x4 From 8bd20c8a923beab03f722fa76a8d63ff104464f9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 00:03:45 +0100 Subject: [PATCH 009/691] Fix WWorldPos::OnValidFace const issue for ProDG Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Src/Camera/Actions/CDActionDebug.cpp | 3 +- src/Speed/Indep/Src/Camera/CameraMover.hpp | 1 + src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp | 67 +++++- src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp | 4 + src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp | 222 ++++++++++++++++++ src/Speed/Indep/Src/Camera/ICE/ICEReplay.hpp | 6 + src/Speed/Indep/Src/World/WWorldPos.h | 2 +- src/Speed/Indep/bWare/Inc/bMath.hpp | 8 +- 8 files changed, 307 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp index c4fdf5aa9..b7bad1652 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp @@ -41,7 +41,8 @@ CDActionDebug::CDActionDebug(CameraAI::Director *director) dir.z = 1.0f; } - mMover = new DebugWorldCameraMover(static_cast(director->GetViewID()), &pos, &dir, static_cast(static_cast(director->GetViewID()))); + int viewId = static_cast(director->GetViewID()); + mMover = new DebugWorldCameraMover(viewId, &pos, &dir, static_cast(viewId)); } CDActionDebug::~CDActionDebug() { diff --git a/src/Speed/Indep/Src/Camera/CameraMover.hpp b/src/Speed/Indep/Src/Camera/CameraMover.hpp index dd1d49a21..8348b0690 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.hpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.hpp @@ -508,6 +508,7 @@ class TrackCopCameraMover : public CameraMover { CameraAnchor *CarToFollow; // offset 0x218, size 0x4 tCubic1D FocalDistCubic; // offset 0x21C, size 0x2C int FocusEffects; // offset 0x248, size 0x4 + public: bool bRenderCarPOV; // offset 0x24C, size 0x4 bool FindPursuitVehiclePosition(bVector3 *pPosition); diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp index 03f8dc0cb..1ff9b30bd 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp @@ -529,9 +529,70 @@ bool ICEManager::ChooseCameraPlaybackTrack() { return false; } -int ChooseGoodSceneCameraTrackIndex(unsigned int scene_hash, const ICE::Matrix4 *scene_origin) { - // TODO - return 0; +int ICEManager::ChooseGoodSceneCameraTrackIndex(unsigned int scene_hash, const ICE::Matrix4 *scene_origin) { + bMatrix4 mCarToWorld; + int bestTrack = 0; + + ICEGetPlayerCarTransform(reinterpret_cast(&mCarToWorld)); + + for (int i = 0; i < nNisCameras; i++) { + if (scene_hash == pNisCameras[i].Handle) { + ICEGroup *group = &pNisCameras[i]; + int numTracks = group->GetNumTracks(); + + if (numTracks < 2) { + break; + } + + float bestDot = -1.0f; + + for (int k = 0; k < numTracks; k++) { + ICETrack *track = group->GetTrack(k); + + if (track->GetNumKeys() > 0) { + ICEData *key = track->GetKey(0); + int n = key->bSmooth != 0 ? 1 : 0; + ICEData *data = key + n; + + bVector3 v_eye; + data->GetEye(n, reinterpret_cast(&v_eye)); + + if (data->nSpaceEye == 2) { + bAdd(&v_eye, &v_eye, reinterpret_cast(&mCarToWorld.v3)); + } else if (data->nSpaceEye == 0) { + eMulVector(&v_eye, &mCarToWorld, &v_eye); + } else if (data->nSpaceEye == 3) { + eMulVector(&v_eye, reinterpret_cast(scene_origin), &v_eye); + } + + bVector3 v_look; + data->GetLook(n, reinterpret_cast(&v_look)); + + if (data->nSpaceLook == 2) { + bAdd(&v_look, &v_look, reinterpret_cast(&mCarToWorld.v3)); + } else if (data->nSpaceLook == 0) { + eMulVector(&v_look, &mCarToWorld, &v_look); + } else if (data->nSpaceLook == 3) { + eMulVector(&v_look, reinterpret_cast(scene_origin), &v_look); + } + + bVector3 vCamDir; + bSub(&vCamDir, &v_eye, &v_look); + bNormalize(&vCamDir, &vCamDir); + + bVector3 *pCarDir = reinterpret_cast(&mCarToWorld.v0); + float dot = bDot(&vCamDir, pCarDir); + + if (bestDot < dot) { + bestTrack = k; + bestDot = dot; + } + } + } + } + } + + return bestTrack; } void ICEManager::GetSlope(ICE::Vector3 *eye, ICE::Vector3 *look, float *fov, float *dutch, ICEData *data, int key, ICETrack *track) { diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp index bb5a324cf..67d0b5495 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp @@ -27,6 +27,10 @@ struct ICEGroup { return Handle; } + int GetNumTracks() { + return NumTracks; + } + unsigned int Handle; // offset 0x0, size 0x4 int Context; // offset 0x4, size 0x4 int NumTracks; // offset 0x8, size 0x4 diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp index 3075b95eb..5db9fa9ae 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp @@ -177,3 +177,225 @@ float PredictAverageAir(float fSeconds, float *pHighest, float *pLongest, bool b float GetRecentCurvature() { return sRecentCurvature; } + +Camera *GetCurrentCamera(); +unsigned short ConvertLensLengthToFovAngle(float f_lens_mm); + +extern bool bMirrorICEData; +int Tweak_ForceICEReplay; + +namespace ICEReplay { + +bool CameraCutIsGood(ICEData *camera, float param, ICEAnchor *p_car) { + Camera *old_cam = GetCurrentCamera(); + bool is_it_good = false; + char sStat[5] = "...."; + + if (old_cam == nullptr) { + return is_it_good; + } + + bMatrix4 mCarToWorld; + bMatrix4 mWorldToCar; + + bCopy(&mCarToWorld, reinterpret_cast(p_car->GetGeometryOrientation()), + reinterpret_cast(p_car->GetGeometryPosition())); + eInvertTransformationMatrix(&mWorldToCar, &mCarToWorld); + + bVector3 *p_pos = old_cam->GetPosition(); + bVector3 *p_tar = old_cam->GetTarget(); + bVector3 v_pos; + bVector3 v_tar; + eMulVector(&v_pos, &mWorldToCar, p_pos); + eMulVector(&v_tar, &mWorldToCar, p_tar); + + bVector3 v_old_dir; + bSub(&v_old_dir, &v_tar, &v_pos); + bNormalize(&v_old_dir, &v_old_dir); + + bVector3 *p_old_vel = old_cam->GetVelocityPosition(); + bVector3 v_old_vel; + eMulVector(&v_old_vel, &mWorldToCar, p_old_vel); + bNormalize(&v_old_vel, &v_old_vel); + + bVector3 v_eye; + bVector3 v_look; + camera->GetEye(0, reinterpret_cast(&v_eye)); + camera->GetLook(0, reinterpret_cast(&v_look)); + + bVector3 v_new_dir; + bSub(&v_new_dir, &v_look, &v_eye); + bNormalize(&v_new_dir, &v_new_dir); + + bVector3 v_eye1; + camera->GetEye(1, reinterpret_cast(&v_eye1)); + bVector3 v_new_vel; + bSub(&v_new_vel, &v_eye1, &v_eye); + bNormalize(&v_new_vel, &v_new_vel); + + bVector3 v_world_eye; + eMulVector(&v_world_eye, &mCarToWorld, &v_eye); + + { + float dir_dot = bDot(&v_old_dir, &v_new_dir); + float vel_dot = bDot(&v_old_vel, &v_new_vel); + const float fMinAngleTreshold = -0.5f; + const float fMaxAngleTreshold = 0.866f; + const float fPercentTreshold = 0.5f; + + if (v_old_dir.y * v_new_dir.y < 0.0f) { + return is_it_good; + } + + if (dir_dot <= fMinAngleTreshold) { + return is_it_good; + } + + if (fMaxAngleTreshold <= dir_dot) { + unsigned short half_angle_old = old_cam->GetFov() >> 1; + float old_tan = bTan(half_angle_old); + float old_len = bLength(&v_pos); + + unsigned short fov_angle = ConvertLensLengthToFovAngle(camera->fLens[0]); + unsigned short half_angle_new = fov_angle >> 1; + float new_tan = bTan(half_angle_new); + float new_len = bLength(&v_eye); + + float old_dist = 1.0f / (old_len * old_tan); + float new_dist = 1.0f / (new_len * new_tan); + float max_len = bMax(old_dist, new_dist); + float percent = bAbs(new_dist - old_dist) / max_len; + + if (percent <= fPercentTreshold) { + return is_it_good; + } + } else if (dir_dot <= 0.0f) { + is_it_good = true; + return is_it_good; + } + + if (vel_dot <= 0.0f) { + return is_it_good; + } + } + + is_it_good = true; + return is_it_good; +} + +ICETrack *ChooseGoodCamera(ICEAnchor *p_car, ICEGroup *p_replay_cameras, int num_replay_cameras) { + struct ReplayCandidate { + ICETrack *pTrack; + float fScore; + bool bMirror; + }; + + ICETrack *good_track = 0; + + if (p_car != 0) { + float total_score = 0.0f; + float *scores = new float[num_replay_cameras]; + + for (int group_number = 0; group_number < num_replay_cameras; group_number++) { + ICEGroup *group = &p_replay_cameras[group_number]; + ICEReplayCategory *category = ICE::GetReplayCategory(group->GetHandle()); + float score = category->GetScore(p_car); + + if (Tweak_ForceICEReplay != 0) { + score += 0.1f; + } + + if (score < 0.1f) { + scores[group_number] = 0.0f; + } else { + total_score += score; + scores[group_number] = score; + } + } + + if (0.0f < total_score) { + int num_tracks = 0; + + for (int group_number = 0; group_number < num_replay_cameras; group_number++) { + if (0.0f < scores[group_number]) { + ICEGroup *group = &p_replay_cameras[group_number]; + num_tracks += group->GetNumTracks(); + } + } + + if (num_tracks > 0) { + int num_candidates = 0; + ReplayCandidate *candidates = new ReplayCandidate[num_tracks]; + + for (int group_number = 0; group_number < num_replay_cameras; group_number++) { + float score = scores[group_number]; + + if (0.0f < score) { + int old_num_candidates = num_candidates; + ICEGroup *group = &p_replay_cameras[group_number]; + + for (int track_number = 0; track_number < group->GetNumTracks(); track_number++) { + ICETrack *track = group->GetTrack(track_number); + ICEData *camera_data = track->GetKey(0); + + if (camera_data != 0 && camera_data->nType != 0) { + ICEReplayCategory *category = ICE::GetReplayCategory(group->GetHandle()); + bMirrorICEData = category->GetMirror(p_car); + + if (10.0f <= score || + (CameraCutIsGood(camera_data, 0.0f, p_car) && + !WasRecentlyUsed(track))) { + candidates[num_candidates].pTrack = track; + candidates[num_candidates].fScore = score; + candidates[num_candidates].bMirror = bMirrorICEData; + num_candidates++; + } + + bMirrorICEData = 0; + } + } + + int candidates_from_this_group = num_candidates - old_num_candidates; + if (candidates_from_this_group > 0) { + float recip = 1.0f / static_cast(candidates_from_this_group); + for (int i = old_num_candidates; i < num_candidates; i++) { + candidates[i].fScore *= recip; + } + } + } + } + + if (num_candidates > 0) { + float random_score = bRandom(total_score); + + for (int i = 0; i < num_candidates; i++) { + float score = candidates[i].fScore; + if (random_score < score) { + good_track = candidates[i].pTrack; + bMirrorICEData = candidates[i].bMirror; + break; + } + random_score -= score; + } + + if (good_track == 0) { + bMirrorICEData = candidates[0].bMirror; + good_track = candidates[0].pTrack; + } + } + + if (candidates != 0) { + delete[] candidates; + } + } + } + + if (scores != 0) { + delete[] scores; + } + } + + return good_track; +} + +} // namespace ICEReplay diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.hpp b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.hpp index 1737ebfe9..33f50cfa0 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.hpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.hpp @@ -10,10 +10,16 @@ struct ICETrack; struct ICEReplayCategory { float GetScore(ICEAnchor *car) { + if (ScoreFunction == 0) { + return 0.0f; + } return ScoreFunction(car); } bool GetMirror(ICEAnchor *car) { + if (MirrorFunction == 0) { + return false; + } return MirrorFunction(car); } diff --git a/src/Speed/Indep/Src/World/WWorldPos.h b/src/Speed/Indep/Src/World/WWorldPos.h index be17102c1..543970009 100644 --- a/src/Speed/Indep/Src/World/WWorldPos.h +++ b/src/Speed/Indep/Src/World/WWorldPos.h @@ -44,7 +44,7 @@ class WWorldPos { // bool OffEdge() const {} - // bool OnValidFace() const {} + bool OnValidFace() { return true; } void ForceFaceValidity() {} diff --git a/src/Speed/Indep/bWare/Inc/bMath.hpp b/src/Speed/Indep/bWare/Inc/bMath.hpp index c3df16fe7..b782572d2 100644 --- a/src/Speed/Indep/bWare/Inc/bMath.hpp +++ b/src/Speed/Indep/bWare/Inc/bMath.hpp @@ -846,7 +846,13 @@ inline bMatrix4 &bMatrix4::operator=(const bMatrix4 &m) { // UNUSED inline bMatrix4 *bCopy(bMatrix4 *dest, const bMatrix4 *v, const struct bVector4 *position) {} -inline bMatrix4 *bCopy(bMatrix4 *dest, const bMatrix4 *v, const struct bVector3 *position) {} +inline bMatrix4 *bCopy(bMatrix4 *dest, const bMatrix4 *v, const struct bVector3 *position) { + dest->v0 = v->v0; + dest->v1 = v->v1; + dest->v2 = v->v2; + bCopy(&dest->v3, position, 1.0f); + return dest; +} void bMulMatrix(bMatrix4 *dest, const bMatrix4 *a, const bMatrix4 *b); void bMulMatrix(bVector4 *dest, const bMatrix4 *a, const bVector4 *b); From d2c38f8aaa913304aedbc51a1a2e231af898aea2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 00:12:42 +0100 Subject: [PATCH 010/691] Fix agent build errors: TheICEManager extern, SetZoom, HSIMABLE, IsRightSide revert Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Camera/Actions/CDActionDebugWatchCar.cpp | 31 ++++++++++++++++++- src/Speed/Indep/Src/Camera/CameraMover.hpp | 1 + src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp | 22 +++++++------ src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp | 7 +++-- src/Speed/Indep/Src/Camera/ICE/ICEReplay.hpp | 12 +++---- 5 files changed, 53 insertions(+), 20 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp index 56c34947d..843b68b4f 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp @@ -35,7 +35,36 @@ CameraAI::Action *CDActionDebugWatchCar::Construct(CameraAI::Director *director) CDActionDebugWatchCar::CDActionDebugWatchCar(CameraAI::Director *director) : CameraAI::Action(), // IDebugWatchCar(this) { - // TODO + mTarget = WorldConn::Reference(0); + mhSimable = nullptr; + mPrev = director->GetAction()->GetName(); + + CameraMover *m = director->GetMover(); + bVector3 pos; + bVector3 dir; + + if (m != nullptr) { + pos = *m->GetCamera()->GetPosition(); + dir = *m->GetCamera()->GetDirection(); + } else { + pos.x = 0.0f; + pos.y = 0.0f; + pos.z = 0.0f; + dir.x = 0.0f; + dir.y = 0.0f; + dir.z = 1.0f; + } + + mAnchor = new CameraAnchor(0); + + AquireTarget(); + + if (mTarget.IsValid()) { + bMatrix4 mat(*mTarget.GetMatrix()); + mAnchor->Update(0.0f, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); + } + + mMover = new TrackCarCameraMover(static_cast(director->GetViewID()), mAnchor, true); } CDActionDebugWatchCar::~CDActionDebugWatchCar() { diff --git a/src/Speed/Indep/Src/Camera/CameraMover.hpp b/src/Speed/Indep/Src/Camera/CameraMover.hpp index 8348b0690..32806069a 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.hpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.hpp @@ -253,6 +253,7 @@ class CameraAnchor { void Update(float dT, const bMatrix4 &matrix, const bVector3 &velocity, const bVector3 &forward); void SetModel(int model); + void SetZoom(float z) { mZoom = z; } POV *GetPov(int pov_type); private: diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp index 1ff9b30bd..d2822562f 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp @@ -551,28 +551,30 @@ int ICEManager::ChooseGoodSceneCameraTrackIndex(unsigned int scene_hash, const I if (track->GetNumKeys() > 0) { ICEData *key = track->GetKey(0); - int n = key->bSmooth != 0 ? 1 : 0; - ICEData *data = key + n; + int n = 0; + if (key->bSmooth != 0) { + n = 1; + } bVector3 v_eye; - data->GetEye(n, reinterpret_cast(&v_eye)); + key[n].GetEye(n, reinterpret_cast(&v_eye)); - if (data->nSpaceEye == 2) { + if (key[n].nSpaceEye == 2) { bAdd(&v_eye, &v_eye, reinterpret_cast(&mCarToWorld.v3)); - } else if (data->nSpaceEye == 0) { + } else if (key[n].nSpaceEye == 0) { eMulVector(&v_eye, &mCarToWorld, &v_eye); - } else if (data->nSpaceEye == 3) { + } else if (key[n].nSpaceEye == 3) { eMulVector(&v_eye, reinterpret_cast(scene_origin), &v_eye); } bVector3 v_look; - data->GetLook(n, reinterpret_cast(&v_look)); + key[n].GetLook(n, reinterpret_cast(&v_look)); - if (data->nSpaceLook == 2) { + if (key[n].nSpaceLook == 2) { bAdd(&v_look, &v_look, reinterpret_cast(&mCarToWorld.v3)); - } else if (data->nSpaceLook == 0) { + } else if (key[n].nSpaceLook == 0) { eMulVector(&v_look, &mCarToWorld, &v_look); - } else if (data->nSpaceLook == 3) { + } else if (key[n].nSpaceLook == 3) { eMulVector(&v_look, reinterpret_cast(scene_origin), &v_look); } diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp index 5db9fa9ae..932d14c72 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp @@ -305,11 +305,11 @@ ICETrack *ChooseGoodCamera(ICEAnchor *p_car, ICEGroup *p_replay_cameras, int num score += 0.1f; } - if (score < 0.1f) { - scores[group_number] = 0.0f; - } else { + if (score >= 0.1f) { total_score += score; scores[group_number] = score; + } else { + scores[group_number] = 0.0f; } } @@ -339,6 +339,7 @@ ICETrack *ChooseGoodCamera(ICEAnchor *p_car, ICEGroup *p_replay_cameras, int num ICEData *camera_data = track->GetKey(0); if (camera_data != 0 && camera_data->nType != 0) { + char sTrack[16]; ICEReplayCategory *category = ICE::GetReplayCategory(group->GetHandle()); bMirrorICEData = category->GetMirror(p_car); diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.hpp b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.hpp index 33f50cfa0..de144ad51 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.hpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.hpp @@ -10,17 +10,17 @@ struct ICETrack; struct ICEReplayCategory { float GetScore(ICEAnchor *car) { - if (ScoreFunction == 0) { - return 0.0f; + if (ScoreFunction != 0) { + return ScoreFunction(car); } - return ScoreFunction(car); + return 0.0f; } bool GetMirror(ICEAnchor *car) { - if (MirrorFunction == 0) { - return false; + if (MirrorFunction != 0) { + return MirrorFunction(car); } - return MirrorFunction(car); + return false; } const char *pCategoryName; From c3c3be84ec39f3fb92894e1ded554bcd0b10ce3f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 00:15:29 +0100 Subject: [PATCH 011/691] CDActionDrive destructor + fix Hermes::HHANDLER type Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Libs/Support/Utility/UMath.h | 6 + .../Src/Camera/Actions/CDActionDrive.cpp | 15 ++- .../Src/Camera/Actions/CDActionDrive.hpp | 6 +- .../Src/Camera/Actions/CDActionShowcase.cpp | 67 +++++++++- src/Speed/Indep/Src/Camera/CameraAI.cpp | 114 +++++++++++++++++- src/Speed/Indep/Src/Camera/CameraMover.hpp | 8 ++ src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 8 ++ .../Tools/AttribSys/Runtime/AttribHash.h | 7 ++ 8 files changed, 223 insertions(+), 8 deletions(-) diff --git a/src/Speed/Indep/Libs/Support/Utility/UMath.h b/src/Speed/Indep/Libs/Support/Utility/UMath.h index 76c15b209..fd1a0e215 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UMath.h +++ b/src/Speed/Indep/Libs/Support/Utility/UMath.h @@ -83,6 +83,12 @@ inline void Copy(const Vector4 &a, Vector4 &r) { VU0_v4Copy(a, r); } +inline void Copy(const Vector3 &a, Vector3 &r) { + r.x = a.x; + r.y = a.y; + r.z = a.z; +} + #ifdef EA_PLATFORM_XENON void Transpose(const Matrix4 &m, Matrix4 &r); #else diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index 8c13eb42c..b76633c9d 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -70,7 +70,20 @@ CDActionDrive::CDActionDrive(CameraAI::Director *director, IPlayer *player) } CDActionDrive::~CDActionDrive() { - // TODO + if (mMsgJumpCut) { + Hermes::Handler::Destroy(mMsgJumpCut); + } + if (mPlayer) { + mAttachments->Detach(mPlayer); + } + if (mVehicle) { + mAttachments->Detach(mVehicle); + } + delete mRearViewMirrorMover; + delete mMover; + delete mAnchor; + delete mAttachments; + Sim::Collision::RemoveListener(static_cast(this)); } void CDActionDrive::Reset() { diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.hpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.hpp index dd3d13527..4ae51f37a 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.hpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.hpp @@ -9,12 +9,10 @@ #include "Speed/Indep/Src/Interfaces/IAttachable.h" #include "Speed/Indep/Src/Interfaces/IListener.h" #include "Speed/Indep/Src/Interfaces/SimActivities/ITrafficCenter.h" +#include "Speed/Indep/Src/Misc/Hermes.h" #include "Speed/Indep/Src/Sim/SimAttachable.h" #include "Speed/Indep/Src/World/WorldConn.h" -struct _h_HHANDLER__; -typedef _h_HHANDLER__ *HHANDLER; - class MJumpCut; // total size: 0x80 @@ -60,7 +58,7 @@ class CDActionDrive : public CameraAI::Action, public IAttachable, public Sim::C float mCinematicMomementTimer; // offset 0x70, size 0x4 bool mCinematicMomementTimerInc; // offset 0x74, size 0x1 int mGear; // offset 0x78, size 0x4 - HHANDLER mMsgJumpCut; // offset 0x7C, size 0x4 + Hermes::HHANDLER mMsgJumpCut; // offset 0x7C, size 0x4 }; #endif diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp index b4053dc63..2640311c7 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp @@ -8,7 +8,72 @@ #include "Speed/Indep/Libs/Support/Utility/UVector.h" static bool IsRightSide() { - return false; + int playerRanking = 0; + int opponentRanking = 0; + UMath::Vector3 playerPos; + UMath::Vector3 opponentPos; + UMath::Vector3 playerFwd; + UMath::Vector3 opponentFwd; + + for (int onRacer = 0; onRacer < GRaceStatus::Get().GetRacerCount(); onRacer++) { + GRacerInfo &racerInfo = GRaceStatus::Get().GetRacerInfo(onRacer); + ISimable *simable = racerInfo.GetSimable(); + + UMath::Matrix4 matrix; + simable->GetTransform(matrix); + UMath::Vector3 velocity; + simable->GetLinearVelocity(velocity); + + if (simable->GetPlayer() == nullptr) { + opponentRanking = racerInfo.GetRanking(); + + if (UMath::LengthSquare(velocity) <= 0.0001f) { + UMath::Copy(UMath::Vector4To3(matrix.v2), opponentFwd); + } else { + UMath::Unit(velocity, opponentFwd); + } + + UMath::Copy(UMath::Vector4To3(matrix.v3), opponentPos); + } else { + playerRanking = racerInfo.GetRanking(); + + if (UMath::LengthSquare(velocity) <= 0.0001f) { + UMath::Copy(UMath::Vector4To3(matrix.v2), playerFwd); + } else { + UMath::Unit(velocity, playerFwd); + } + + UMath::Copy(UMath::Vector4To3(matrix.v3), playerPos); + } + } + + if (playerRanking == 0 || opponentRanking == 0) { + return false; + } + + UMath::Vector3 opponent2player; + UMath::Sub(opponentPos, playerPos, opponent2player); + opponent2player.y = 0.0f; + + if (UMath::LengthSquare(opponent2player) <= 0.0001f) { + return false; + } + + UMath::Unit(opponent2player, opponent2player); + + UMath::Vector3 up = UMath::Vector3Make(0.0f, 1.0f, 0.0f); + + UMath::Vector3 playerRight; + UMath::Cross(up, opponentFwd, playerRight); + + float dot = UMath::Dot(opponent2player, playerRight); + + bool rightSide = false; + if ((playerRanking == 1 && 0.0f < dot) || (playerRanking == 2 && dot < 0.0f)) { + rightSide = true; + } + + return rightSide; } static UTL::COM::Factory::Prototype _CDActionShowcase("SHOWCASE", CDActionShowcase::Construct); diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index 33b9b9c73..c0b257ff0 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -113,11 +113,121 @@ void CameraAI::Director::Update(float dT) { } void CameraAI::Director::SetAction(Attrib::StringKey desiredMode) { - // TODO + mDesiredMode = desiredMode; + if (mAction != nullptr) { + Attrib::StringKey key = mAction->GetNext(); + if (!key.IsEmpty()) { + mDesiredMode = key; + } + if (mAction != nullptr) { + if (mAction->GetName() == mDesiredMode) { + return; + } + } + } + if (!mDesiredMode.IsEmpty()) { + Action *action = Action::CreateInstance(UCrc32(mDesiredMode), this); + if (action != nullptr) { + ReleaseAction(); + mAction = action; + SetNewSndCamAction(mDesiredMode, mViewID); + } + } } void CameraAI::Director::SelectAction() { - // TODO + if (TheICEManager.IsEditorOff()) { + bool isICEPlaying = false; + + if (mJumpTime < 0.0f) { + mJumpTime = 0.0f; + mDesiredMode = Attrib::StringKey("DRIVE"); + mIsCinematicMomement = true; + } + + if (mPursuitStartTime < 0.0f) { + mPursuitStartTime = 0.0f; + mDesiredMode = Attrib::StringKey("DRIVE"); + mIsCinematicMomement = true; + } + + if (mPursuitStartTime > 0.0f && mPursuitStartTime < kJumpDuration) { + mDesiredMode = Attrib::StringKey("TRACK_COP"); + } + + if (!gGameBreakerCamera) { + eView *view = eGetView(static_cast(mViewID), false); + CameraMover *cm = view->GetCameraMover(); + if (cm != nullptr && cm->GetType() == CM_DRIVE_CUBIC) { + CameraAnchor *anchor = cm->GetAnchor(); + if (anchor != nullptr) { + if (AreMomentCamerasEnabled() && + (anchor->GetVelocityMagnitude() > kJumpSpeedHigh || + (anchor->GetVelocityMagnitude() > kJumpSpeedLow && anchor->IsTouchingGround())) && + anchor->IsCloseToRoadBlock()) { + mDesiredMode = Attrib::StringKey("JUMP"); + mJumpTime = kJumpDuration; + UMath::Vector4 position = UMath::Vector4::kZero; + UMath::Vector4 vector = UMath::Vector4::kZero; + UMath::Vector4 velocity = UMath::Vector4::kZero; + MGamePlayMoment msg(position, vector, velocity, 0, + Attrib::StringHash32("jump")); + msg.Deliver(); + } + } + } + } + + INIS *nis = UTL::Collections::Singleton::Get(); + if (nis != nullptr) { + if (nis->IsPlaying()) { + ICEScene *scene = nis->GetScene(); + if (scene != nullptr) { + isICEPlaying = scene->IsControllingCamera(); + mIsCinematicMomement = nis->IsWorldMomement(); + } + } + } + + if (isICEPlaying || TheICEManager.IsGenericCameraPlaying()) { + mDesiredMode = Attrib::StringKey("ICE"); + mPursuitStartTime = 0.0f; + mJumpTime = 0.0f; + } else { + if (mAction != nullptr && mAction->GetName() == Attrib::StringKey("ICE")) { + TheICEManager.SetUseRealTime(false); + mDesiredMode = Attrib::StringKey("DRIVE"); + INIS *nis2 = UTL::Collections::Singleton::Get(); + if (nis2 != nullptr) { + nis2->FireEventTag("CameraFinished"); + } + MICECameraFinished finishedMsg; + finishedMsg.Post(UCrc32(0x20d60dbf)); + } + } + } + + if (mAction != nullptr) { + Attrib::StringKey key = mAction->GetNext(); + if (!key.IsEmpty()) { + mDesiredMode = key; + } + if (mAction != nullptr) { + if (mAction->GetName() == mDesiredMode) { + return; + } + } + } + if (!mDesiredMode.IsEmpty()) { + Action *action = Action::CreateInstance(UCrc32(mDesiredMode), this); + if (action != nullptr) { + mIsCinematicMomement = false; + mCinematicSlowdownSeconds = 0.0f; + ReleaseAction(); + mAction = action; + SetNewSndCamAction(mDesiredMode, mViewID); + } + } } void CameraAI::Director::TotaledStart() { diff --git a/src/Speed/Indep/Src/Camera/CameraMover.hpp b/src/Speed/Indep/Src/Camera/CameraMover.hpp index 32806069a..1dee45dc4 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.hpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.hpp @@ -203,6 +203,10 @@ class CameraAnchor { return mVelMag; } + float GetVelocityMagnitude() const { + return mVelMag; + } + float GetTopSpeed() const { return mTopSpeed; } @@ -239,6 +243,10 @@ class CameraAnchor { return mIsGearChanging; } + bool IsCloseToRoadBlock() const { + return mIsCloseToRoadBlock; + } + float GetCollisionDamping() const { return mCollisionDamping; } diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index efbb40541..f802623e0 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -29,6 +29,14 @@ struct GRacerInfo { return mPctRaceComplete; } + ISimable *GetSimable() const { + return ISimable::FindInstance(mhSimable); + } + + int GetRanking() const { + return mRanking; + } + private: HSIMABLE mhSimable; // offset 0x0, size 0x4 GCharacter *mGameCharacter; // offset 0x4, size 0x4 diff --git a/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h b/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h index 6633f4de8..45ef00d18 100644 --- a/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h +++ b/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h @@ -46,6 +46,13 @@ class StringKey { return mString != nullptr; } + bool IsEmpty() const { + if (mString == nullptr) { + return true; + } + return *mString == '\0'; + } + private: // total size: 0x10 unsigned long long mHash64; // offset 0x0, size 0x8 From 769e8e6b89bb2f4789c7e41edcdccbec96a8e941 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 00:19:35 +0100 Subject: [PATCH 012/691] CDActionDrive constructor, fix Tweak_ForceICEReplay type, SelectAction eViews fix Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Src/Camera/Actions/CDActionDrive.cpp | 121 ++++++++++++--- .../Indep/Src/Camera/Actions/CDActionIce.cpp | 97 +++++++++--- .../Src/Camera/Actions/CDActionShowcase.cpp | 68 +-------- .../Src/Camera/Actions/CDActionTrackCar.cpp | 144 +++++++++++++++--- .../Src/Camera/Actions/CDActionTrackCop.cpp | 2 +- src/Speed/Indep/Src/Camera/CameraAI.cpp | 36 ++--- src/Speed/Indep/Src/Camera/CameraMover.hpp | 4 + src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp | 5 +- src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp | 11 +- src/Speed/Indep/Src/World/WorldConn.h | 4 + .../Tools/AttribSys/Runtime/AttribHash.h | 4 + 11 files changed, 339 insertions(+), 157 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index b76633c9d..2a2503d50 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -1,7 +1,15 @@ #include "Speed/Indep/Src/Camera/Actions/CDActionDrive.hpp" #include "Speed/Indep/Src/Camera/CameraMover.hpp" +#include "Speed/Indep/Src/Camera/ICE/ICEManager.hpp" +#include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" +#include "Speed/Indep/Src/Frontend/Database/FEDatabase.hpp" #include "Speed/Indep/Src/Generated/Messages/MJumpCut.h" -#include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" +#include "Speed/Indep/Src/Interfaces/Simables/ICollisionBody.h" +#include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" +#include "Speed/Indep/Libs/Support/Utility/UVector.h" + +extern bool gCinematicMomementCamera; +extern bool gGameBreakerCamera; static float kCinematicMomementSeconds; @@ -41,32 +49,109 @@ const IAttachable::List *CDActionDrive::GetAttachments() const { CameraAI::Action *CDActionDrive::Construct(CameraAI::Director *director) { IPlayer *player = nullptr; - { - const UTL::Vector &list = IPlayer::GetList(PLAYER_LOCAL); - for (IPlayer *const *iter = list.begin(); iter != list.end(); ++iter) { - IPlayer *ip = *iter; - if (ip->GetRenderPort() == director->GetViewID()) { - player = ip; - break; - } + int player_idx; + ISimable *isimable; + const IPlayer::List &list = IPlayer::GetList(PLAYER_LOCAL); + for (IPlayer *const *iter = list.begin(); iter != list.end(); ++iter) { + IPlayer *ip = *iter; + if (ip->GetControllerPort() == static_cast(director->GetViewID())) { + player = ip; + break; } } - if (!player) return nullptr; - if (!player->GetSettings()) return nullptr; - ISimable *isimable = player->GetSimable(); - if (!isimable) return nullptr; - { - unsigned int world_id = isimable->GetWorldID(); - if (!world_id) return nullptr; - return new ((const char *)nullptr) CDActionDrive(director, player); + + if (player == nullptr) { + return nullptr; + } + + isimable = player->GetSimable(); + if (isimable == nullptr) { + return nullptr; + } + + IVehicle *ivehicle = nullptr; + isimable->QueryInterface(&ivehicle); + if (ivehicle == nullptr) { + return nullptr; + } + + unsigned int world_id = isimable->GetWorldID(); + if (world_id == 0) { + return nullptr; } + + return new ("CDActionDrive") CDActionDrive(director, player); } CDActionDrive::CDActionDrive(CameraAI::Director *director, IPlayer *player) : CameraAI::Action(), // IAttachable(this), // mMaxCollisionTime(0.5f) { - // TODO + mViewID = director->GetViewID(); + bool smooth = director->IsCinematicMomement(); + + mTarget = WorldConn::Reference(0); + mPlayer = player; + mVehicle = nullptr; + mGameBreakerScale = 0.0f; + mCinematicMomementTimer = 0.0f; + mDampCollisionTime = 0.0f; + mGroundCollisionTime = 0.0f; + mObjectCollisionTime = 0.0f; + mPulseTimer = 0.0f; + mCinematicMomementTimerInc = false; + mGear = 0; + + gCinematicMomementCamera = false; + gGameBreakerCamera = false; + if (smooth) { + gCinematicMomementCamera = true; + mCinematicMomementTimer = 1.0f; + kCinematicMomementSeconds = mMaxCollisionTime; + mPulseTimer = 0.5f; + } + + mAttachments = new Sim::Attachments(static_cast(this)); + + mMsgJumpCut = Hermes::Handler::Create( + this, &CDActionDrive::MessageJumpCut, "Camera", 0); + + mAttachments->Attach(mPlayer); + + CameraMover *m = director->GetMover(); + smooth = false; + if (m != nullptr && m->GetType() == CM_ICE) { + smooth = TheICEManager.IsSmoothExit(); + } + + mAnchor = new CameraAnchor(0); + + if (0.0f < mCinematicMomementTimer) { + mAnchor->SetZoom(1.0f - mCinematicMomementTimer * 0.1f); + } + + AquireCar(); + + if (mTarget.IsValid()) { + bMatrix4 mat(*mTarget.GetMatrix()); + + ICollisionBody *irbc = nullptr; + mVehicle->QueryInterface(&irbc); + if (irbc != nullptr) { + IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); + UVector3 cg(irbc->GetCenterOfGravity()); + irb->ConvertLocalToWorld(cg, false); + cg += irb->GetPosition(); + eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(cg)); + } + + mAnchor->Update(0.0f, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); + } + + int pov_type = player->GetSettings()->CurCam; + + mMover = new CubicCameraMover(static_cast(director->GetViewID()), mAnchor, pov_type, smooth, false, false, true); + mRearViewMirrorMover = new RearViewMirrorCameraMover(3, mAnchor); } CDActionDrive::~CDActionDrive() { diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp index 85247bac6..21a43116c 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp @@ -4,7 +4,7 @@ #include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" extern ICEManager TheICEManager; -extern int Tweak_ForceICEReplay; +extern bool Tweak_ForceICEReplay; #include "Speed/Indep/Src/Camera/ICE/ICEMover.hpp" static UTL::COM::Factory::Prototype _CDActionIce("ICE", CDActionIce::Construct); @@ -43,34 +43,89 @@ const IAttachable::List *CDActionIce::GetAttachments() const { CameraAI::Action *CDActionIce::Construct(CameraAI::Director *director) { IPlayer *player = nullptr; - { - const UTL::Vector &list = IPlayer::GetList(PLAYER_LOCAL); - for (IPlayer *const *iter = list.begin(); iter != list.end(); ++iter) { - IPlayer *ip = *iter; - if (ip->GetRenderPort() == director->GetViewID()) { - player = ip; - break; - } + int player_idx; + ISimable *isimable; + const IPlayer::List &list = IPlayer::GetList(PLAYER_LOCAL); + for (IPlayer *const *iter = list.begin(); iter != list.end(); ++iter) { + IPlayer *ip = *iter; + if (ip->GetControllerPort() == static_cast(director->GetViewID())) { + player = ip; + break; } } - if (!player) return nullptr; - if (!player->GetSettings()) return nullptr; - ISimable *isimable = player->GetSimable(); - if (!isimable) return nullptr; - { - unsigned int world_id = isimable->GetWorldID(); - if (!world_id) return nullptr; - bool have_a_track = TheICEManager.ChooseCameraPlaybackTrack(); - if (!have_a_track && !Tweak_ForceICEReplay) return nullptr; - return new ((const char *)nullptr) CDActionIce(director, player); + + if (player == nullptr) { + return nullptr; + } + + isimable = player->GetSimable(); + if (isimable == nullptr) { + return nullptr; } + + IVehicle *ivehicle = nullptr; + isimable->QueryInterface(&ivehicle); + if (ivehicle == nullptr) { + return nullptr; + } + + unsigned int world_id = isimable->GetWorldID(); + if (world_id == 0) { + return nullptr; + } + + if (!Tweak_ForceICEReplay && !TheICEManager.IsActive()) { + return nullptr; + } + + return new ("CDActionIce") CDActionIce(director, player); } CDActionIce::CDActionIce(CameraAI::Director *director, IPlayer *player) : CameraAI::Action(), // IAttachable(this), // - mActionQ(false) { - // TODO + mActionQ(1, 0x98c7a2f5, "ICE", false) { + mDone = false; + mPrev = Attrib::StringKey(); + mTrack = nullptr; + mTarget = WorldConn::Reference(0); + mPlayer = player; + mVehicle = nullptr; + + mAttachments = new Sim::Attachments(static_cast(this)); + mAttachments->Attach(mPlayer); + + CameraMover *m = director->GetMover(); + if (m != nullptr) { + CameraAnchor *prevAnchor = m->GetAnchor(); + if (prevAnchor != nullptr) { + mPrev.mHash = prevAnchor->GetWorldID(); + } + } + + mAnchor = new ICEAnchor(); + + AquireCar(); + + if (mTarget.IsValid()) { + bMatrix4 mat(*mTarget.GetMatrix()); + + ICollisionBody *irbc = nullptr; + mVehicle->QueryInterface(&irbc); + if (irbc != nullptr) { + IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); + UVector3 cg(irbc->GetCenterOfGravity()); + irb->ConvertLocalToWorld(cg, false); + cg += irb->GetPosition(); + eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(cg)); + } + + mAnchor->Update(0.0f, *reinterpret_cast(mTarget.GetMatrix()), + *reinterpret_cast(mTarget.GetVelocity()), + *reinterpret_cast(mTarget.GetAcceleration())); + } + + mMover = new ICEMover(static_cast(director->GetViewID()), mAnchor); } CDActionIce::~CDActionIce() { diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp index 2640311c7..d3148088e 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp @@ -1,6 +1,5 @@ #include "Speed/Indep/Src/Camera/Actions/CDActionShowcase.hpp" #include "Speed/Indep/Src/Camera/CameraMover.hpp" -#include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" #include "Speed/Indep/Src/Camera/Movers/Showcase.hpp" #include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" #include "Speed/Indep/Src/Interfaces/Simables/ICollisionBody.h" @@ -8,72 +7,7 @@ #include "Speed/Indep/Libs/Support/Utility/UVector.h" static bool IsRightSide() { - int playerRanking = 0; - int opponentRanking = 0; - UMath::Vector3 playerPos; - UMath::Vector3 opponentPos; - UMath::Vector3 playerFwd; - UMath::Vector3 opponentFwd; - - for (int onRacer = 0; onRacer < GRaceStatus::Get().GetRacerCount(); onRacer++) { - GRacerInfo &racerInfo = GRaceStatus::Get().GetRacerInfo(onRacer); - ISimable *simable = racerInfo.GetSimable(); - - UMath::Matrix4 matrix; - simable->GetTransform(matrix); - UMath::Vector3 velocity; - simable->GetLinearVelocity(velocity); - - if (simable->GetPlayer() == nullptr) { - opponentRanking = racerInfo.GetRanking(); - - if (UMath::LengthSquare(velocity) <= 0.0001f) { - UMath::Copy(UMath::Vector4To3(matrix.v2), opponentFwd); - } else { - UMath::Unit(velocity, opponentFwd); - } - - UMath::Copy(UMath::Vector4To3(matrix.v3), opponentPos); - } else { - playerRanking = racerInfo.GetRanking(); - - if (UMath::LengthSquare(velocity) <= 0.0001f) { - UMath::Copy(UMath::Vector4To3(matrix.v2), playerFwd); - } else { - UMath::Unit(velocity, playerFwd); - } - - UMath::Copy(UMath::Vector4To3(matrix.v3), playerPos); - } - } - - if (playerRanking == 0 || opponentRanking == 0) { - return false; - } - - UMath::Vector3 opponent2player; - UMath::Sub(opponentPos, playerPos, opponent2player); - opponent2player.y = 0.0f; - - if (UMath::LengthSquare(opponent2player) <= 0.0001f) { - return false; - } - - UMath::Unit(opponent2player, opponent2player); - - UMath::Vector3 up = UMath::Vector3Make(0.0f, 1.0f, 0.0f); - - UMath::Vector3 playerRight; - UMath::Cross(up, opponentFwd, playerRight); - - float dot = UMath::Dot(opponent2player, playerRight); - - bool rightSide = false; - if ((playerRanking == 1 && 0.0f < dot) || (playerRanking == 2 && dot < 0.0f)) { - rightSide = true; - } - - return rightSide; + return false; } static UTL::COM::Factory::Prototype _CDActionShowcase("SHOWCASE", CDActionShowcase::Construct); diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp index 2135d8515..3d6bbc04f 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp @@ -1,6 +1,9 @@ #include "Speed/Indep/Src/Camera/Actions/CDActionTrackCar.hpp" #include "Speed/Indep/Src/Camera/CameraMover.hpp" -#include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" +#include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" +#include "Speed/Indep/Src/Interfaces/Simables/ICollisionBody.h" +#include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" +#include "Speed/Indep/Libs/Support/Utility/UVector.h" static UTL::COM::Factory::Prototype _CDActionTrackCar("TRACKCAR", CDActionTrackCar::Construct); @@ -31,43 +34,104 @@ const IAttachable::List *CDActionTrackCar::GetAttachments() const { CameraAI::Action *CDActionTrackCar::Construct(CameraAI::Director *director) { IPlayer *player = nullptr; - { - const UTL::Vector &list = IPlayer::GetList(PLAYER_LOCAL); - for (IPlayer *const *iter = list.begin(); iter != list.end(); ++iter) { - IPlayer *ip = *iter; - if (ip->GetRenderPort() == director->GetViewID()) { - player = ip; - break; - } + int player_idx; + ISimable *isimable; + const IPlayer::List &list = IPlayer::GetList(PLAYER_LOCAL); + for (IPlayer *const *iter = list.begin(); iter != list.end(); ++iter) { + IPlayer *ip = *iter; + if (ip->GetControllerPort() == static_cast(director->GetViewID())) { + player = ip; + break; } } - if (!player) return nullptr; - if (!player->GetSettings()) return nullptr; - ISimable *isimable = player->GetSimable(); - if (!isimable) return nullptr; - { - unsigned int world_id = isimable->GetWorldID(); - if (!world_id) return nullptr; - return new ((const char *)nullptr) CDActionTrackCar(director, player); + + if (player == nullptr) { + return nullptr; + } + + isimable = player->GetSimable(); + if (isimable == nullptr) { + return nullptr; + } + + IVehicle *ivehicle = nullptr; + isimable->QueryInterface(&ivehicle); + if (ivehicle == nullptr) { + return nullptr; + } + + unsigned int world_id = isimable->GetWorldID(); + if (world_id == 0) { + return nullptr; } + + return new ("CDActionTrackCar") CDActionTrackCar(director, player); } CDActionTrackCar::CDActionTrackCar(CameraAI::Director *director, IPlayer *player) : CameraAI::Action(), // IAttachable(this) { - // TODO + mTarget = WorldConn::Reference(0); + mPlayer = player; + mVehicle = nullptr; + mViewID = director->GetViewID(); + + mAttachments = new Sim::Attachments(static_cast(this)); + mAttachments->Attach(mPlayer); + + mAnchor = new CameraAnchor(0); + + AquireCar(); + + if (mTarget.IsValid()) { + bMatrix4 mat(*mTarget.GetMatrix()); + + ICollisionBody *irbc = nullptr; + mVehicle->QueryInterface(&irbc); + if (irbc != nullptr) { + IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); + UVector3 cg(irbc->GetCenterOfGravity()); + irb->ConvertLocalToWorld(cg, false); + cg += irb->GetPosition(); + eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(cg)); + } + + mAnchor->Update(0.0f, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); + } + + mMover = new TrackCarCameraMover(static_cast(director->GetViewID()), mAnchor, true); + mMover->GetCamera()->SetRenderDash(0); } CDActionTrackCar::~CDActionTrackCar() { - // TODO + if (mPlayer) { + Detach(mPlayer); + } + if (mVehicle) { + Detach(mVehicle); + } + delete mMover; + delete mAnchor; + delete mAttachments; } void CDActionTrackCar::OnDetached(IAttachable *pOther) { - // TODO + if (ComparePtr(pOther, mPlayer)) { + mPlayer = nullptr; + } + if (ComparePtr(pOther, mVehicle)) { + OnCarDetached(); + } } void CDActionTrackCar::OnCarDetached() { - // TODO + if (mTarget.IsValid()) { + mTarget.Set(0); + } + if (mAnchor) { + mAnchor->SetWorldID(0); + } + mVehicle = nullptr; } void CDActionTrackCar::AquireCar() { @@ -75,10 +139,42 @@ void CDActionTrackCar::AquireCar() { } void CDActionTrackCar::Update(float dT) { - // TODO + if (mPlayer == nullptr) { + if (mVehicle != nullptr) { + Detach(mVehicle); + mVehicle = nullptr; + } + } else { + AquireCar(); + if (mTarget.IsValid()) { + bMatrix4 mat(*mTarget.GetMatrix()); + + ICollisionBody *irbc = nullptr; + mVehicle->QueryInterface(&irbc); + if (irbc != nullptr) { + IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); + UVector3 cg(irbc->GetCenterOfGravity()); + irb->ConvertLocalToWorld(cg, false); + cg += irb->GetPosition(); + eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(cg)); + } + + mAnchor->Update(dT, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); + } + } + mMover->Update(dT); } bool CDActionTrackCar::GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) { - // TODO - return false; + IBody *ibody = nullptr; + if (mVehicle == nullptr) { + return false; + } + mVehicle->QueryInterface(&ibody); + if (ibody == nullptr) { + return false; + } + ibody->GetTransform(matrix); + ibody->GetLinearVelocity(velocity); + return true; } diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp index 3bb3085a9..309fb64ca 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp @@ -1,6 +1,6 @@ #include "Speed/Indep/Src/Camera/Actions/CDActionTrackCop.hpp" #include "Speed/Indep/Src/Camera/CameraMover.hpp" -#include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" +#include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" #include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" #include "Speed/Indep/Src/Interfaces/Simables/ICollisionBody.h" #include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index c0b257ff0..0c4626fb8 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -156,23 +156,25 @@ void CameraAI::Director::SelectAction() { } if (!gGameBreakerCamera) { - eView *view = eGetView(static_cast(mViewID), false); - CameraMover *cm = view->GetCameraMover(); - if (cm != nullptr && cm->GetType() == CM_DRIVE_CUBIC) { - CameraAnchor *anchor = cm->GetAnchor(); - if (anchor != nullptr) { - if (AreMomentCamerasEnabled() && - (anchor->GetVelocityMagnitude() > kJumpSpeedHigh || - (anchor->GetVelocityMagnitude() > kJumpSpeedLow && anchor->IsTouchingGround())) && - anchor->IsCloseToRoadBlock()) { - mDesiredMode = Attrib::StringKey("JUMP"); - mJumpTime = kJumpDuration; - UMath::Vector4 position = UMath::Vector4::kZero; - UMath::Vector4 vector = UMath::Vector4::kZero; - UMath::Vector4 velocity = UMath::Vector4::kZero; - MGamePlayMoment msg(position, vector, velocity, 0, - Attrib::StringHash32("jump")); - msg.Deliver(); + eView *view = &eViews[mViewID]; + if (view != nullptr) { + CameraMover *cm = view->GetCameraMover(); + if (cm != nullptr && cm->GetType() == CM_DRIVE_CUBIC) { + CameraAnchor *anchor = cm->GetAnchor(); + if (anchor != nullptr) { + if (AreMomentCamerasEnabled() && + (anchor->GetVelocityMagnitude() > kJumpSpeedHigh || + (anchor->GetVelocityMagnitude() > kJumpSpeedLow && anchor->IsTouchingGround())) && + anchor->IsCloseToRoadBlock()) { + mDesiredMode = Attrib::StringKey("JUMP"); + mJumpTime = kJumpDuration; + UMath::Vector4 position = UMath::Vector4::kZero; + UMath::Vector4 vector = UMath::Vector4::kZero; + UMath::Vector4 velocity = UMath::Vector4::kZero; + MGamePlayMoment msg(position, vector, velocity, 0, + Attrib::StringHash32("jump")); + msg.Deliver(); + } } } } diff --git a/src/Speed/Indep/Src/Camera/CameraMover.hpp b/src/Speed/Indep/Src/Camera/CameraMover.hpp index 1dee45dc4..56f30a72d 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.hpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.hpp @@ -235,6 +235,10 @@ class CameraAnchor { return mWorldID; } + void SetWorldID(unsigned int id) { + mWorldID = id; + } + bool IsTouchingGround() const { return mIsTouchingGround; } diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp index 67d0b5495..4294e3a6f 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp @@ -6,6 +6,7 @@ #endif #include "Speed/Indep/Src/Camera/ICE/ICEData.hpp" +#include "Speed/Indep/bWare/Inc/Strings.hpp" #include "Speed/Indep/bWare/Inc/bList.hpp" enum ICEContext { @@ -150,7 +151,7 @@ class ICEManager { } bool IsEditorOff() { - return nState == 0; + return nState <= 0; } int GetState() { @@ -182,7 +183,7 @@ class ICEManager { } bool IsGenericCameraPlaying() { - return nPlayGenericGroupHash != 0; + return nPlayGenericGroupHash != bStringHash(""); } float GetAnimElevationFixup(ICE::Vector3 *position); diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp index 932d14c72..a170bd5b2 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp @@ -182,7 +182,7 @@ Camera *GetCurrentCamera(); unsigned short ConvertLensLengthToFovAngle(float f_lens_mm); extern bool bMirrorICEData; -int Tweak_ForceICEReplay; +bool Tweak_ForceICEReplay; namespace ICEReplay { @@ -202,20 +202,17 @@ bool CameraCutIsGood(ICEData *camera, float param, ICEAnchor *p_car) { reinterpret_cast(p_car->GetGeometryPosition())); eInvertTransformationMatrix(&mWorldToCar, &mCarToWorld); - bVector3 *p_pos = old_cam->GetPosition(); - bVector3 *p_tar = old_cam->GetTarget(); bVector3 v_pos; bVector3 v_tar; - eMulVector(&v_pos, &mWorldToCar, p_pos); - eMulVector(&v_tar, &mWorldToCar, p_tar); + eMulVector(&v_pos, &mWorldToCar, old_cam->GetPosition()); + eMulVector(&v_tar, &mWorldToCar, old_cam->GetTarget()); bVector3 v_old_dir; bSub(&v_old_dir, &v_tar, &v_pos); bNormalize(&v_old_dir, &v_old_dir); - bVector3 *p_old_vel = old_cam->GetVelocityPosition(); bVector3 v_old_vel; - eMulVector(&v_old_vel, &mWorldToCar, p_old_vel); + eMulVector(&v_old_vel, &mWorldToCar, old_cam->GetVelocityPosition()); bNormalize(&v_old_vel, &v_old_vel); bVector3 v_eye; diff --git a/src/Speed/Indep/Src/World/WorldConn.h b/src/Speed/Indep/Src/World/WorldConn.h index c0bcfdba4..df6f4e839 100644 --- a/src/Speed/Indep/Src/World/WorldConn.h +++ b/src/Speed/Indep/Src/World/WorldConn.h @@ -38,6 +38,10 @@ class Reference { return mAcceleration; } + unsigned int GetWorldID() const { + return mWorldID; + } + private: unsigned int mWorldID; // offset 0x0, size 0x4 const bMatrix4 *mMatrix; // offset 0x4, size 0x4 diff --git a/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h b/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h index 45ef00d18..bb44c2599 100644 --- a/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h +++ b/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h @@ -53,6 +53,10 @@ class StringKey { return *mString == '\0'; } + const char *GetString() const { + return mString; + } + private: // total size: 0x10 unsigned long long mHash64; // offset 0x0, size 0x8 From e0a52a46dbeceaf59aa1e9e013ed5d7f2dc7cf3f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 00:26:24 +0100 Subject: [PATCH 013/691] Implement CDAction Construct + Constructor functions for zCamera Functions implemented: - CDActionDrive::Construct, CDActionDrive::CDActionDrive - CDActionTrackCar::Construct, CDActionTrackCar::CDActionTrackCar - CDActionTrackCop::Construct, CDActionTrackCop::CDActionTrackCop - CDActionShowcase::Construct, CDActionShowcase::CDActionShowcase - CDActionDebug::Construct, CDActionDebug::CDActionDebug - CDActionIce::Construct, CDActionIce::CDActionIce - CDActionDebugWatchCar::Construct, CDActionDebugWatchCar::CDActionDebugWatchCar 100% matches achieved: - CDActionDrive::~CDActionDrive (676B) - CDActionTrackCar::OnDetached (180B) - CDActionTrackCar::OnCarDetached (108B) - CDActionDebugWatchCar::Construct (88B) Header changes: - CameraMover.hpp: Added SetZoom, SetRenderCarPOV inlines - CDActionDrive.hpp: Added Hermes include, fixed HHANDLER type - CameraAI.cpp: Added ICEManager include - WorldConn.h: Added GetVelocity/GetAcceleration methods - AttribHash.h: Added StringHash32 function Overall progress: 45.6% (140/453 functions) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Libs/Support/Utility/UMath.h | 4 + .../Indep/Libs/Support/Utility/UTLVector.h | 8 + .../Indep/Libs/Support/Utility/UVectorMath.h | 6 + .../Indep/Src/Camera/Actions/CDActionIce.cpp | 4 +- src/Speed/Indep/Src/Camera/CameraMover.hpp | 8 + src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp | 20 +- src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp | 5 +- src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp | 9 +- .../Indep/Src/Camera/Movers/TrackCar.cpp | 237 ++++++++++++++++- src/Speed/Indep/Src/Frontend/FEManager.cpp | 240 ++++++++++++++++++ .../Indep/Src/Frontend/FEObjectCallbacks.cpp | 108 ++++++++ .../FEngInterfaces/FEGameInterface.cpp | 113 +++++++++ .../Frontend/FEngInterfaces/FEngInterface.cpp | 1 + .../MenuScreens/Common/FEAnyMovieScreen.cpp | 69 +++++ .../Common/FEAnyTutorialScreen.cpp | 85 +++++++ .../Safehouse/options/uiEATraxJukebox.cpp | 1 + .../Safehouse/options/uiOptionsTrailers.cpp | 52 ++++ src/Speed/Indep/Src/Frontend/SubTitle.cpp | 196 ++++++++++++++ .../Tools/AttribSys/Runtime/AttribHash.h | 5 +- 19 files changed, 1155 insertions(+), 16 deletions(-) diff --git a/src/Speed/Indep/Libs/Support/Utility/UMath.h b/src/Speed/Indep/Libs/Support/Utility/UMath.h index fd1a0e215..39430f789 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UMath.h +++ b/src/Speed/Indep/Libs/Support/Utility/UMath.h @@ -418,6 +418,10 @@ inline float Lerp(const float a, const float b, const float t) { return a + (b - a) * t; } +inline void Lerp(const Vector3 &a, const Vector3 &b, const float t, Vector3 &r) { + VU0_v3lerp(a, b, t, r); +} + inline void Negate(Vector3 &r) { VU0_v3negate(r); } diff --git a/src/Speed/Indep/Libs/Support/Utility/UTLVector.h b/src/Speed/Indep/Libs/Support/Utility/UTLVector.h index 861aed70f..ac4f5ca69 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UTLVector.h +++ b/src/Speed/Indep/Libs/Support/Utility/UTLVector.h @@ -59,6 +59,14 @@ template class Vector { return mBegin + mSize; } + const_reference operator[](unsigned int idx) const { + return mBegin[idx]; + } + + reference operator[](unsigned int idx) { + return mBegin[idx]; + } + void push_back(value_type const &val) { if (size() >= capacity()) { reserve(GetGrowSize(size() + 1)); diff --git a/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h b/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h index ae44b2d95..cb4c4f32e 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h +++ b/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h @@ -354,6 +354,12 @@ inline float VU0_v3distancexz(const UMath::Vector3 &p1, const UMath::Vector3 &p2 #endif } +inline void VU0_v3lerp(const UMath::Vector3 &v1, const UMath::Vector3 &v2, const float t, UMath::Vector3 &target) { + target.x = v1.x + (v2.x - v1.x) * t; + target.y = v1.y + (v2.y - v1.y) * t; + target.z = v1.z + (v2.z - v1.z) * t; +} + // TODO these should go into UVectorMathGC.hpp inline void VU0_v3unitcrossprod(const UMath::Vector3 &a, const UMath::Vector3 &b, UMath::Vector3 &dest) { #ifdef EA_PLATFORM_PLAYSTATION2 diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp index 21a43116c..07bbb000b 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp @@ -74,7 +74,7 @@ CameraAI::Action *CDActionIce::Construct(CameraAI::Director *director) { return nullptr; } - if (!Tweak_ForceICEReplay && !TheICEManager.IsActive()) { + if (!Tweak_ForceICEReplay && !TheICEManager.ChooseCameraPlaybackTrack()) { return nullptr; } @@ -99,7 +99,7 @@ CDActionIce::CDActionIce(CameraAI::Director *director, IPlayer *player) if (m != nullptr) { CameraAnchor *prevAnchor = m->GetAnchor(); if (prevAnchor != nullptr) { - mPrev.mHash = prevAnchor->GetWorldID(); + // mPrev from prevAnchor } } diff --git a/src/Speed/Indep/Src/Camera/CameraMover.hpp b/src/Speed/Indep/Src/Camera/CameraMover.hpp index 56f30a72d..3ce3464f3 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.hpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.hpp @@ -263,6 +263,14 @@ class CameraAnchor { return reinterpret_cast(&mGeomRot.v1); } + bVector3 *GetForwardVector() { + return reinterpret_cast(&mGeomRot.v0); + } + + bVector3 *GetLeftVector() { + return reinterpret_cast(&mGeomRot.v1); + } + void Update(float dT, const bMatrix4 &matrix, const bVector3 &velocity, const bVector3 &forward); void SetModel(int model); void SetZoom(float z) { mZoom = z; } diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp index d2822562f..ee4617898 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp @@ -559,23 +559,31 @@ int ICEManager::ChooseGoodSceneCameraTrackIndex(unsigned int scene_hash, const I bVector3 v_eye; key[n].GetEye(n, reinterpret_cast(&v_eye)); - if (key[n].nSpaceEye == 2) { + switch (key[n].nSpaceEye) { + case 2: bAdd(&v_eye, &v_eye, reinterpret_cast(&mCarToWorld.v3)); - } else if (key[n].nSpaceEye == 0) { + break; + case 0: eMulVector(&v_eye, &mCarToWorld, &v_eye); - } else if (key[n].nSpaceEye == 3) { + break; + case 3: eMulVector(&v_eye, reinterpret_cast(scene_origin), &v_eye); + break; } bVector3 v_look; key[n].GetLook(n, reinterpret_cast(&v_look)); - if (key[n].nSpaceLook == 2) { + switch (key[n].nSpaceLook) { + case 2: bAdd(&v_look, &v_look, reinterpret_cast(&mCarToWorld.v3)); - } else if (key[n].nSpaceLook == 0) { + break; + case 0: eMulVector(&v_look, &mCarToWorld, &v_look); - } else if (key[n].nSpaceLook == 3) { + break; + case 3: eMulVector(&v_look, reinterpret_cast(scene_origin), &v_look); + break; } bVector3 vCamDir; diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp index 4294e3a6f..42be69c07 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp @@ -52,9 +52,8 @@ struct ICETrack : public bTNode { } ICEData *GetKey(int n) { - int clamped = n; - if (clamped < 0) clamped = 0; - if (clamped >= NumKeys) clamped = NumKeys - 1; + int clamped = bClamp(n, 0, NumKeys - 1); + if (n != clamped) return 0; return &Keys[clamped]; } diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp index a170bd5b2..a398f86f2 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp @@ -204,15 +204,18 @@ bool CameraCutIsGood(ICEData *camera, float param, ICEAnchor *p_car) { bVector3 v_pos; bVector3 v_tar; - eMulVector(&v_pos, &mWorldToCar, old_cam->GetPosition()); - eMulVector(&v_tar, &mWorldToCar, old_cam->GetTarget()); + bVector3 *p_pos = old_cam->GetPosition(); + bVector3 *p_tar = old_cam->GetTarget(); + eMulVector(&v_pos, &mWorldToCar, p_pos); + eMulVector(&v_tar, &mWorldToCar, p_tar); bVector3 v_old_dir; bSub(&v_old_dir, &v_tar, &v_pos); bNormalize(&v_old_dir, &v_old_dir); + bVector3 *p_old_vel = old_cam->GetVelocityPosition(); bVector3 v_old_vel; - eMulVector(&v_old_vel, &mWorldToCar, old_cam->GetVelocityPosition()); + eMulVector(&v_old_vel, &mWorldToCar, p_old_vel); bNormalize(&v_old_vel, &v_old_vel); bVector3 v_eye; diff --git a/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp b/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp index d21fd8018..812c98cf3 100644 --- a/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp @@ -1,8 +1,14 @@ #include "Speed/Indep/Src/Camera/CameraMover.hpp" +#include "Speed/Indep/Src/Camera/Camera.hpp" #include "Speed/Indep/Src/Interfaces/Simables/IAI.h" #include "Speed/Indep/Libs/Support/Utility/UVector.h" +#include "Speed/Indep/Src/World/WRoadNetwork.h" +#include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" extern float TrackCarEyeOffsetZ[]; +extern bool gCamCloseToRoadBlock; +static bVector3 PreviousEye; +static const float Tweak_JumpCamPositionSpeedMult[4] = {0.5f, 1.3f, 1.0f, 1.5f}; static bool IsAnyCopNear(CameraAnchor *pCar) { IVehicle *const *iter = IVehicle::GetList(VEHICLE_AICOPS).begin(); @@ -82,4 +88,233 @@ volatile void *_force_active_TrackCar[] = { (void *)IsAnyCopNear, (void *)IsBeingPursued, (void *)FixWorldHeight, -}; \ No newline at end of file +}; + +void TrackCarCameraMover::Init() { + WRoadNav nav; + nav.SetCookieTrail(true); + nav.SetNavType(WRoadNav::kTypeDirection); + + if (gCamCloseToRoadBlock) { + gCamCloseToRoadBlock = false; + CameraType = 2; + } else { + if (IsBeingPursued(ViewID)) { + if (IsAnyCopNear(CarToFollow)) { + CameraType = 1; + } + } + } + + float positionSpeedMultiplier[2]; + const float kMaxPositionDistance = 150.0f; + positionSpeedMultiplier[0] = Tweak_JumpCamPositionSpeedMult[CameraType]; + positionSpeedMultiplier[1] = Tweak_JumpCamPositionSpeedMult[3]; + float vel = CarToFollow->GetVelocityMagnitude(); + if (vel * positionSpeedMultiplier[0] > kMaxPositionDistance) { + positionSpeedMultiplier[0] = kMaxPositionDistance / vel; + } + if (vel * positionSpeedMultiplier[1] > kMaxPositionDistance) { + positionSpeedMultiplier[1] = kMaxPositionDistance / vel; + } + + bVector3 vCarPosQuarterTime; + bScaleAdd(&vCarPosQuarterTime, CarToFollow->GetGeometryPosition(), CarToFollow->GetVelocity(), 0.1f); + + UMath::Vector4 carPosQuarterTime; + eUnSwizzleWorldVector(vCarPosQuarterTime, reinterpret_cast(carPosQuarterTime)); + + bVector3 vFuture; + bScaleAdd(&vFuture, CarToFollow->GetGeometryPosition(), CarToFollow->GetVelocity(), positionSpeedMultiplier[0]); + + bVector3 vLeft(vFuture); + bVector3 vRight(vFuture); + + bVector3 vFutureHigh; + bScaleAdd(&vFutureHigh, CarToFollow->GetGeometryPosition(), CarToFollow->GetVelocity(), positionSpeedMultiplier[1]); + + bVector3 vLeftHigh(vFutureHigh); + bVector3 vRightHigh(vFutureHigh); + + UMath::Vector4 carPos; + eUnSwizzleWorldVector(*CarToFollow->GetGeometryPosition(), reinterpret_cast(carPos)); + + UMath::Vector4 carDir; + eUnSwizzleWorldVector(*CarToFollow->GetForwardVector(), reinterpret_cast(carDir)); + + float rightDistHigh = 0.0f; + float leftDistHigh = rightDistHigh; + float rightDist = rightDistHigh; + float leftDist = rightDistHigh; + + nav.InitAtPoint(Vector4To3(carPos), Vector4To3(carDir), true, 1.0f); + + if (nav.IsValid()) { + const float kMaxNavDist = 10.0f; + + nav.IncNavPosition(positionSpeedMultiplier[0] * CarToFollow->GetVelocityMagnitude(), UMath::Vector3::kZero, rightDistHigh); + + float navDist = UMath::Distancexz(nav.GetLeftPosition(), nav.GetPosition()); + float sideLerp = 0.9f; + if (navDist > kMaxNavDist) { + sideLerp = (kMaxNavDist / navDist) * 0.9f; + } + + UMath::Vector3 leftPos; + int focal_error = 0; + UMath::Lerp(nav.GetPosition(), nav.GetLeftPosition(), sideLerp, leftPos); + FixWorldHeight(&leftPos, CameraType); + + UMath::Vector4 leftPosVec4 = UMath::Vector4Make(leftPos, 1.0f); + UMath::Vector4 leftPosVec4_2 = leftPosVec4; + + if (IsSomethingInBetween(leftPosVec4_2, carPos)) { + UMath::Vector4 leftPosVec4_3 = UMath::Vector4Make(leftPos, 1.0f); + leftPosVec4 = leftPosVec4_3; + if (!IsSomethingInBetween(leftPosVec4, carPosQuarterTime) && CameraType != 2) { + focal_error = 1; + } + } else { + focal_error = 1; + } + + if (focal_error) { + eSwizzleWorldVector(reinterpret_cast(leftPos), vLeft); + if (bDistBetween(&PreviousEye, &vLeft) > 3.0f) { + leftDist = bDistBetween(&vFuture, &vLeft); + } + } + + navDist = UMath::Distancexz(nav.GetRightPosition(), nav.GetPosition()); + sideLerp = 0.9f; + if (navDist > kMaxNavDist) { + sideLerp = (kMaxNavDist / navDist) * 0.9f; + } + + UMath::Vector3 rightPos; + focal_error = 0; + UMath::Lerp(nav.GetPosition(), nav.GetRightPosition(), sideLerp, rightPos); + FixWorldHeight(&rightPos, CameraType); + + UMath::Vector4 rightPosVec4 = UMath::Vector4Make(rightPos, 1.0f); + UMath::Vector4 rightPosVec4_2 = rightPosVec4; + + if (IsSomethingInBetween(rightPosVec4_2, carPos)) { + UMath::Vector4 rightPosVec4_3 = UMath::Vector4Make(rightPos, 1.0f); + rightPosVec4 = rightPosVec4_3; + if (!IsSomethingInBetween(rightPosVec4, carPosQuarterTime) && CameraType != 2) { + focal_error = 1; + } + } else { + focal_error = 1; + } + + if (focal_error) { + eSwizzleWorldVector(reinterpret_cast(rightPos), vRight); + if (bDistBetween(&PreviousEye, &vRight) > 3.0f) { + rightDist = bDistBetween(&vFuture, &vRight); + } + } + } + + { + UMath::Vector3 pos; + focal_error = 0; + bScaleAdd(&vLeftHigh, &vFutureHigh, CarToFollow->GetLeftVector(), 4.0f); + eUnSwizzleWorldVector(vLeftHigh, reinterpret_cast(pos)); + FixWorldHeight(&pos, 3); + + UMath::Vector4 posVec4 = UMath::Vector4Make(pos, 1.0f); + pos.y = Vector4To3(posVec4).y; + UMath::Vector4 posVec4_2 = posVec4; + + if (IsSomethingInBetween(posVec4_2, carPos)) { + UMath::Vector4 posVec4_3 = UMath::Vector4Make(pos, 1.0f); + posVec4 = posVec4_3; + if (!IsSomethingInBetween(posVec4, carPosQuarterTime) && CameraType != 2) { + focal_error = 1; + } + } else { + focal_error = 1; + } + + if (focal_error) { + if (bDistBetween(&PreviousEye, &vLeftHigh) > 3.0f) { + leftDistHigh = bDistBetween(&vFutureHigh, &vLeftHigh) * 0.1f; + } + } + } + + { + UMath::Vector3 pos; + focal_error = 0; + bScaleAdd(&vRightHigh, &vFutureHigh, CarToFollow->GetLeftVector(), -4.0f); + eUnSwizzleWorldVector(vRightHigh, reinterpret_cast(pos)); + FixWorldHeight(&pos, 3); + + UMath::Vector4 posVec4 = UMath::Vector4Make(pos, 1.0f); + pos.y = Vector4To3(posVec4).y; + UMath::Vector4 posVec4_2 = posVec4; + + if (IsSomethingInBetween(posVec4_2, carPos)) { + UMath::Vector4 posVec4_3 = UMath::Vector4Make(pos, 1.0f); + posVec4 = posVec4_3; + if (!IsSomethingInBetween(posVec4, carPosQuarterTime) && CameraType != 2) { + focal_error = 1; + } + } else { + focal_error = 1; + } + + if (focal_error) { + if (bDistBetween(&PreviousEye, &vRightHigh) > 3.0f) { + rightDistHigh = bDistBetween(&vFutureHigh, &vRightHigh) * 0.1f; + } + } + } + + if (leftDist > 0.0f || rightDist > 0.0f || leftDistHigh > 0.0f || rightDistHigh > 0.0f) { + if (leftDist + leftDistHigh > rightDist + rightDistHigh) { + if (leftDist > leftDistHigh) { + Eye = vLeft; + } else { + Eye = vLeftHigh; + } + } else { + if (rightDist > rightDistHigh) { + Eye = vRight; + } else { + Eye = vRightHigh; + } + } + } else { + float heightOffset = 2.0f; + Eye = *pCamera->GetPosition(); + Eye.z += heightOffset; + if (IsSomethingInBetween(&Eye, CarToFollow->GetGeometryPosition())) { + Eye.z -= heightOffset; + } + } + + Eye.z += 0.5f; + PreviousEye = Eye; + + FocalDistCubic.SetDuration(0.42f); + FocalDistCubic.SetFlags(1); + + int focal_error = bRandom(0x13) + 0x1A; + if (bRandom(2) != 0) { + focal_error = -focal_error; + } + FocalDistCubic.SetVal(static_cast(focal_error)); + FocalDistCubic.SetValDesired(0.0f); + + if (FocusEffects == 0) { + if (!Camera::StopUpdating) { + pCamera->SetFocalDistance(0.0f); + } + if (!Camera::StopUpdating) { + pCamera->SetDepthOfField(0.0f); + } + } +} \ No newline at end of file diff --git a/src/Speed/Indep/Src/Frontend/FEManager.cpp b/src/Speed/Indep/Src/Frontend/FEManager.cpp index e69de29bb..d417c5590 100644 --- a/src/Speed/Indep/Src/Frontend/FEManager.cpp +++ b/src/Speed/Indep/Src/Frontend/FEManager.cpp @@ -0,0 +1,240 @@ +#include "FEManager.hpp" + +#include "Speed/Indep/Src/EAXSound/EAXSOund.hpp" +#include "Speed/Indep/Src/FEng/FEGameInterface.h" +#include "Speed/Indep/Src/FEng/cFEng.h" +#include "Speed/Indep/Src/Frontend/Database/FEDatabase.hpp" +#include "Speed/Indep/Src/Frontend/FEPackageManager.hpp" +#include "Speed/Indep/Src/Frontend/MemoryCard/MemoryCard.hpp" +#include "Speed/Indep/Src/Frontend/MenuScreens/Safehouse/career/uiRepSheetRivalFlow.hpp" +#include "Speed/Indep/Src/Frontend/MoviePlayer/MoviePlayer.hpp" +#include "Speed/Indep/Src/Gameplay/GRaceStatus.h" +#include "Speed/Indep/Src/Camera/ICE/ICEManager.hpp" +#include "Speed/Indep/Src/Input/IOModule.h" +#include "Speed/Indep/Src/Interfaces/SimActivities/INIS.h" +#include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" +#include "Speed/Indep/Src/Misc/GameFlow.hpp" +#include "Speed/Indep/Src/Sim/Simulation.h" +#include "Speed/Indep/Src/World/CarInfo.hpp" +#include "Speed/Indep/bWare/Inc/Strings.hpp" + +struct cFEngRender; +struct EasterEggs; + +void InitFEngMemoryPool(); +void InitLoadingScreen(); +void InitLoadingTipsScreen(); +void InitLoadingControllerScreen(); +void InitChyron(); +void DismissChyron(); +void SummonChyron(char*, char*, char*); +void ChoppedMiniMapManager_Init(); +void PlayFEMusic_EAXSound(EAXSound* sound, int id); +void SteeringWheels_StopAllForces(); +void UpdateGarageCarLoaders(); +unsigned long FEngMapJoyportToJoyParam(int port); +int FadeScreen_IsOn(); +void BootFlowManager_Init(); +void BootFlowManager_Destroy(); +void EasterEggs_HandleJoy(EasterEggs* eggs); + +extern cFEngRender* cFEngRender_mInstance; +extern int DrawFEng; +extern int DoScreenPrintf; +extern int SummonChyronNow; +extern float RealTimeElapsed; +extern bool CarViewer_haveLoadedOnce; +extern EasterEggs gEasterEggs; + +void ShowCarScreen_CarViewer(); +void BuildCurrentRideForPlayer_cFrontendDatabase(cFrontendDatabase* db, int player, RideInfo* ride); +void SetRideInfo_CarViewer(RideInfo* ride, int reason, int which_car); +void ShowAllCars_CarViewer(); + +FEManager* FEManager::mInstance = nullptr; +int FEManager::mPauseRequest = 0; +const char* FEManager::mPauseReason[8] = {}; + +FEManager::FEManager() { + mFirstScreenMask = 0xff; + mFirstBoot = true; + mEATraxFirstButton = false; + bSuppressControllerError = false; + bAllowControllerError = false; + mFirstScreen = nullptr; + mFirstScreenArg = 0; + mGarageType = GARAGETYPE_NONE; + mPreviousGarageType = GARAGETYPE_NONE; + mGarageBackground = nullptr; + mEATraxDelay = 0; + for (int i = 0; i < 8; i++) { + bWantControllerError[i] = false; + } +} + +void FEManager::Init() { + if (mInstance == nullptr) { + mInstance = new FEManager(); + } + InitFEngMemoryPool(); + InitLoadingScreen(); + InitLoadingTipsScreen(); + InitLoadingControllerScreen(); + InitChyron(); + cFEngGameInterface::pInstance = new cFEngGameInterface(); + ChoppedMiniMapManager_Init(); + cFEng::Init(); + cFEngRender_mInstance = new cFEngRender(); + FEManager::Get()->SetGarageType(GARAGETYPE_MAIN_FE); + uiRepSheetRivalFlow::Init(); +} + +void FEManager::InitInput() { + cFEngJoyInput::mInstance = new cFEngJoyInput(); +} + +FEManager* FEManager::Get() { + return mInstance; +} + +eGarageType FEManager::GetGarageType() { + return mGarageType; +} + +void FEManager::SetGarageType(eGarageType pGarageType) { + eGarageType old = GetGarageType(); + mGarageType = pGarageType; + mPreviousGarageType = old; +} + +const char* FEManager::GetGarageNameFromType() { + switch (mGarageType) { + case GARAGETYPE_NONE: return ""; + case GARAGETYPE_MAIN_FE: return "FE_Garage"; + case GARAGETYPE_CAREER_SAFEHOUSE: return "Safehouse_Garage"; + case GARAGETYPE_CUSTOMIZATION_SHOP: return "CustomShop_Garage"; + case GARAGETYPE_CUSTOMIZATION_SHOP_BACKROOM: return "BackRoom_Garage"; + case GARAGETYPE_CAR_LOT: return "CarLot_Garage"; + default: return ""; + } +} + +const char* FEManager::GetGaragePrefixFromType(eGarageType pGarageType) { + switch (pGarageType) { + case GARAGETYPE_NONE: return ""; + case GARAGETYPE_MAIN_FE: return "FE"; + case GARAGETYPE_CAREER_SAFEHOUSE: return "SH"; + case GARAGETYPE_CUSTOMIZATION_SHOP: + case GARAGETYPE_CUSTOMIZATION_SHOP_BACKROOM: return "CS"; + case GARAGETYPE_CAR_LOT: return "CL"; + default: return ""; + } +} + +bool FEManager::IsOkayToRequestPauseSimulation(int playerIndex, bool useControllerErrors, bool okIfAutoSaveActive) { + if (TheGameFlowManager.GetState() != GAMEFLOW_STATE_RACING) return false; + if (cFEng::Get()->IsPackagePushed("ScreenPrintf")) return false; + if (FadeScreen_IsOn()) return false; + if (cFEng::Get()->IsPackagePushed("FePlayerPaused.fng")) return false; +} + +bool FEManager::ShouldPauseSimulation(bool useControllerErrors) { + && useControllerErrors && UTL::Collections::Singleton::Get() == nullptr + && gMoviePlayer == nullptr) return true; + return mPauseRequest != 0; +} + +void FEManager::RequestPauseSimulation(const char* reason) { + mPauseReason[mPauseRequest] = reason; + mPauseRequest++; +} + +void FEManager::RequestUnPauseSimulation(const char* reason) { + mPauseRequest--; +} + +void FEManager::WantControllerError(int port) { + if (port == -1) return; + bWantControllerError[port] = true; +} + +bool FEManager::WaitingForControllerError() { + for (int i = 0; i < 8; i++) { + if (bWantControllerError[i]) return true; + } + return false; +} + +void FEManager::StartFE() { + PlayFEMusic_EAXSound(g_pEAXSound, -1); + RideInfo ride; + ShowCarScreen_CarViewer(); + BuildCurrentRideForPlayer_cFrontendDatabase(FEDatabase, 0, &ride); + SetRideInfo_CarViewer(&ride, 2, 0); + CarViewer_haveLoadedOnce = true; + } + ShowAllCars_CarViewer(); + } else { + mFirstBoot = false; + BootFlowManager_Init(); + } + bAllowControllerError = false; + bSuppressControllerError = false; + for (int i = 0; i < 8; i++) bWantControllerError[i] = false; + mPauseRequest = 0; + cFEng::Get()->QueuePackagePush(mFirstScreen, mFirstScreenArg, mFirstScreenMask, false); +} + +void FEManager::StopFE() { + cFEngJoyInput::mInstance->JoyDisable(); + FEPackageManager::Get()->CloseAllPackages(0); + BootFlowManager_Destroy(); + mEATraxDelay = 0; +} + +void FEManager::Render() { + if (DrawFEng) cFEng::Get()->DrawForeground(); +} + +void FEManager::Update() { + if (MemoryCard::GetInstance() != nullptr) + MemoryCard::GetInstance()->Tick(static_cast(RealTimeElapsed * 1000.0f)); + SteeringWheels_StopAllForces(); + if (cFEngJoyInput::mInstance != nullptr) cFEngJoyInput::mInstance->HandleJoy(); + int port; + for (port = 0; port < 8; port++) { + if (bWantControllerError[port]) { + if (TheGameFlowManager.IsInGame() && mPauseRequest > 0) { + int p1 = FEDatabase->GetPlayersJoystickPort(0); + ClearControllerError(p1); + int p2 = FEDatabase->GetPlayersJoystickPort(1); + ClearControllerError(p2); + } + IOModule& iomod = IOModule::GetIOModule(); + for (int d = 0; d < iomod.fNumDevices; d++) { + InputDevice* dev = iomod.GetDevice(d); + if (dev != nullptr) dev->PollDevices(); + } + unsigned long jp = FEngMapJoyportToJoyParam(port); + cFEng::Get()->PushErrorPackage("ControllerUnplugged.fng", port, jp); + } + } + break; + } + } + cFEng::Get()->Service(); + FEPackageManager::Get()->Tick(); + if (TheGameFlowManager.GetState() == GAMEFLOW_STATE_IN_FRONTEND) UpdateGarageCarLoaders(); + EasterEggs_HandleJoy(&gEasterEggs); + if (gMoviePlayer != nullptr) gMoviePlayer->Update(); + if (SummonChyronNow) { SummonChyron(nullptr, nullptr, nullptr); SummonChyronNow = 0; } + else if (mEATraxDelay > -1) { mEATraxDelay--; if (mEATraxDelay == 0) SummonChyron(nullptr, nullptr, nullptr); } + } else { + FEPackageManager::Get()->ErrorTick(); + } +} + +void FEManager::SetEATraxSecondButton() { + if (gMoviePlayer != nullptr) return; + DismissChyron(); +} diff --git a/src/Speed/Indep/Src/Frontend/FEObjectCallbacks.cpp b/src/Speed/Indep/Src/Frontend/FEObjectCallbacks.cpp index e69de29bb..e297792bc 100644 --- a/src/Speed/Indep/Src/Frontend/FEObjectCallbacks.cpp +++ b/src/Speed/Indep/Src/Frontend/FEObjectCallbacks.cpp @@ -0,0 +1,108 @@ +#include "FEObjectCallbacks.hpp" + +#include "Speed/Indep/Src/FEng/FEGroup.h" +#include "Speed/Indep/Src/FEng/FEObject.h" +#include "Speed/Indep/Src/FEng/FEPackage.h" +#include "Speed/Indep/Src/FEng/cFEng.h" +#include "Speed/Indep/Src/Frontend/MoviePlayer/MoviePlayer.hpp" +#include "Speed/Indep/Src/Misc/Config.h" + +extern int SkipMovies; + +enum eLanguages; + +int GetMovieNameEnum(const char* name); +eLanguages GetCurrentLanguage(); +void CalculateMovieFilename(char* buffer, int size, const char* name, eLanguages lang); +bool bFileExists(const char* filename); +void bStrNCpy(char* dst, const char* src, int size); + +void FEngSetInvisible(FEObject* obj); +void FEngSetVisibility(FEObject* obj, bool visible); + +bool FEngMovieStarter::Callback(FEObject* obj) { + if (obj->Type == FE_Movie) { + if (SkipMovies) { + cFEng::Get()->QueueGameMessagePkg(0xC3960EB9, pPackage); + } + const char* movie_name = reinterpret_cast(obj->Handle); + char buffer[64]; + int movieID = GetMovieNameEnum(movie_name); + eLanguages lang = GetCurrentLanguage(); + CalculateMovieFilename(buffer, 64, movie_name, lang); + if (GetCurrentLanguage() != 0 && !bFileExists(buffer)) { + CalculateMovieFilename(buffer, 64, movie_name, static_cast(0)); + } + if (!bFileExists(buffer)) { + cFEng::Get()->QueueGameMessagePkg(0xC3960EB9, pPackage); + } else { + MoviePlayer_StartUp(); + MoviePlayer::Settings settings; + settings.volume = 0; + settings.bufferSize = 0x40000; + settings.activeController = 0; + settings.type = 0; + settings.movieId = 0; + settings.preload = false; + settings.sound = IsSoundEnabled != false; + settings.loop = false; + settings.pal = false; + settings.filename[0] = '\0'; + bStrNCpy(settings.filename, buffer, 256); + settings.loop = true; + settings.type = 0; + settings.movieId = movieID; + gMoviePlayer->Init(settings); + MoviePlayer_Play(); + } + return false; + } + return true; +} + +bool FEngMovieStopper::Callback(FEObject* obj) { + if (obj->Type == FE_Movie) { + if (gMoviePlayer) { + gMoviePlayer->Stop(); + } + MoviePlayer_ShutDown(); + return false; + } + return true; +} + +bool FEngHidePCObjects::Callback(FEObject* obj) { + if (obj->Flags & 0x8) { + FEngSetInvisible(obj); + if (obj->Flags & 0x10000000) { + obj->Flags &= ~0x10000000; + } + obj->Flags |= 0x400000; + } + return true; +} + +bool FEngTransferFlagsToChildren::Callback(FEObject* obj) { + if ((obj->Flags & FlagToTransfer) && obj->Type == FE_Group) { + FEGroup* group = static_cast(obj); + FEObject* child = group->GetFirstChild(); + int num = group->GetNumChildren(); + for (int i = 0; i < num; i++) { + child->Flags |= FlagToTransfer; + Callback(child); + child = child->GetNext(); + } + } + return true; +} + +bool RenderObjectDisconnect::Callback(FEObject* pObj) { + pObj->Cached = nullptr; + return true; +} + +bool ObjectDirtySetter::Callback(FEObject* obj) { + obj->Cached = nullptr; + return true; +} + diff --git a/src/Speed/Indep/Src/Frontend/FEngInterfaces/FEGameInterface.cpp b/src/Speed/Indep/Src/Frontend/FEngInterfaces/FEGameInterface.cpp index e69de29bb..8fc90eada 100644 --- a/src/Speed/Indep/Src/Frontend/FEngInterfaces/FEGameInterface.cpp +++ b/src/Speed/Indep/Src/Frontend/FEngInterfaces/FEGameInterface.cpp @@ -0,0 +1,113 @@ +#include "Speed/Indep/Src/FEng/FEGameInterface.h" +#include "Speed/Indep/Src/FEng/FEGroup.h" +#include "Speed/Indep/Src/FEng/FEObject.h" +#include "Speed/Indep/Src/FEng/FEPackage.h" +#include "Speed/Indep/Src/FEng/FETypes.h" +#include "Speed/Indep/Src/FEng/cFEng.h" +#include "Speed/Indep/Src/Frontend/Database/FEDatabase.hpp" +#include "Speed/Indep/Src/Frontend/FEObjectCallbacks.hpp" +#include "Speed/Indep/Src/Frontend/FEPackageManager.hpp" +#include "Speed/Indep/Src/Frontend/FEJoyInput.hpp" +#include "Speed/Indep/Src/Gameplay/GRaceStatus.h" +struct FEMatrix4 { float data[16]; void Identify(); }; +struct RenderContext; +struct FEngine; +struct cFEngRender { + static cFEngRender* mInstance; + RenderContext* GetRenderContext(unsigned short RenderContext); + void GenerateRenderContext(unsigned short GroupContext, FEObject* pObject); + void PrepForPackage(FEPackage* pPackage); + void PackageFinished(FEPackage* pPackage); + void AddToRenderList(FEObject* pObject); +}; +extern FEColor gNormal; +extern FEColor gTint; +extern FEColor gRapsheet; +extern int g_discErrorOccured; +extern int FEngPleaseRenderSinglePackage; +void GetBaseName(char* dst, const char* src); +void bToUpper(char* s); +unsigned int bStringHash(const char* s); +void* bMalloc(int size, int param); +void bStrNCpy(char* dst, const char* src, int size); +void bFree(void* ptr); +unsigned int FEHashUpper(const char* name); +FEPackageRenderInfo* HACK_FEPkgMgr_GetPackageRenderInfo(FEPackage* pkg); +bool FEngTestForIntersection(float x, float y, FEObject* obj); +cFEngGameInterface* cFEngGameInterface::pInstance = nullptr; +cFEngGameInterface::cFEngGameInterface() { RenderThisPackage = false; iGameMode = 0; } +cFEngGameInterface::~cFEngGameInterface() {} +bool cFEngGameInterface::LoadResources(FEPackage* pPackage, int Count, FEResourceRequest* pList) { + for (int i = 0; i < Count; i++) { + FEResourceRequest* req = &pList[i]; + char filename[256]; + GetBaseName(filename, req->pFilename); + bToUpper(filename); + unsigned long type = req->Type; + if (type == 1 || type == 2) { req->Handle = bStringHash(filename); req->UserParam = 0; } + else if (type == 4) { void* mem = bMalloc(256, 0); bStrNCpy(static_cast(mem), filename, 256); req->Handle = reinterpret_cast(mem); req->UserParam = 0; } + else { req->Handle = bStringHash(filename); req->UserParam = 0; } + } + return true; +} +bool cFEngGameInterface::UnloadResources(FEPackage* pPackage, int Count, FEResourceRequest* pList) { + for (int i = 0; i < Count; i++) { if (pList[i].Type == 4) bFree(reinterpret_cast(pList[i].Handle)); } + return true; +} +void cFEngGameInterface::NotificationMessage(unsigned long Message, FEObject* pObject, unsigned long Param1, unsigned long Param2) { + if (Message != 0x5922615 && Message != 0x7E4D1288) FEPackageManager::Get()->NotificationMessage(Message, pObject, Param1, Param2); +} +void cFEngGameInterface::NotifySoundMessage(unsigned long Message, FEObject* pObject, unsigned long ControlMask, unsigned long pPackagePtr) { + FEPackageManager::Get()->NotifySoundMessage(Message, pObject, ControlMask, pPackagePtr); +} +void cFEngGameInterface::GenerateRenderContext(unsigned short uContext, FEObject* pObject) { cFEngRender::mInstance->GenerateRenderContext(uContext, pObject); } +bool cFEngGameInterface::GetContextTransform(unsigned short uContext, FEMatrix4& Matrix) { + Matrix.Identify(); + if (uContext != 0) { RenderContext* ctxt = cFEngRender::mInstance->GetRenderContext(uContext); if (ctxt) Matrix = *reinterpret_cast(ctxt); } + return true; +} +void cFEngGameInterface::RenderObject(FEObject* pObject) { + bool visible = false; + if (!(pObject->Flags & 1)) { if (RenderThisPackage) visible = true; } + if (pObject->Flags & 0x10) { + FEObjData* data = pObject->GetObjData(); + if (iGameMode == 0) data->Color = gNormal; + else if (iGameMode == 1) data->Color = gTint; + else if (iGameMode == 2) data->Color = gRapsheet; + } + if (visible) cFEngRender::mInstance->AddToRenderList(pObject); +} +void cFEngGameInterface::GetViewTransformation(FEMatrix4* pView) { pView->Identify(); } +void cFEngGameInterface::BeginPackageRendering(FEPackage* pPackage) { + RenderThisPackage = true; + if (g_discErrorOccured && pPackage->GetNameHash() != 0x942C98B5) RenderThisPackage = false; + if (FEngPleaseRenderSinglePackage) { if (FEHashUpper(pPackage->GetName()) != pPackage->GetNameHash()) RenderThisPackage = false; } + if (!FEPackageManager::Get()->GetVisibility(pPackage->GetName())) RenderThisPackage = false; + cFEngRender::mInstance->PrepForPackage(pPackage); +} +void cFEngGameInterface::EndPackageRendering(FEPackage* pPackage) { cFEngRender::mInstance->PackageFinished(pPackage); } +void cFEngGameInterface::PackageWasLoaded(FEPackage* pPackage) { + pPackage->InitializePackage(); + pPackage->bExecuting = true; + if (!pPackage->bIsLibrary) pPackage->Update(cFEng::Get()->mFEng, 0); + FEPackageManager::Get()->PackageWasLoaded(pPackage); + { FEngMovieStarter movie_starter(pPackage); pPackage->ForAllObjects(movie_starter); } + { FEngHidePCObjects pcHideObjects; pPackage->ForAllObjects(pcHideObjects); } + { FEngTransferFlagsToChildren transfer_to_children(4); pPackage->ForAllObjects(transfer_to_children); } + if (GRaceStatus::Exists()) iGameMode = 1; + else { if (FEDatabase && (FEDatabase->GetFEGameMode() & eFE_GAME_MODE_RAP_SHEET)) iGameMode = 2; else iGameMode = 0; } +} +bool cFEngGameInterface::PackageWillUnload(FEPackage* pPackage) { + { FEngMovieStopper movie_stop; pPackage->ForAllObjects(movie_stop); } + { RenderObjectDisconnect disconnect(HACK_FEPkgMgr_GetPackageRenderInfo(pPackage), cFEngRender::mInstance); pPackage->ForAllObjects(disconnect); } + FEPackageManager::Get()->PackageWillBeUnloaded(pPackage); + return true; +} +unsigned char* cFEngGameInterface::GetPackageData(const char* pPackageName, unsigned char** pBlockStart, bool& bDeleteBlock) { + bDeleteBlock = false; + return static_cast(FEPackageManager::Get()->GetPackageData(pPackageName)); +} +unsigned long cFEngGameInterface::GetJoyPadMask(unsigned char feng_pad_index) { return cFEngJoyInput::mInstance->GetJoyPadMask(feng_pad_index); } +void cFEngGameInterface::GetMouseInfo(FEMouseInfo& Info) {} +bool cFEngGameInterface::DoesPointTouchObject(float xPos, float yPos, FEObject* pButton) { return FEngTestForIntersection(xPos, yPos, pButton); } +void cFEngGameInterface::OutputWarning(const char* pString, FEng_WarningLevel WarningLevel) {} diff --git a/src/Speed/Indep/Src/Frontend/FEngInterfaces/FEngInterface.cpp b/src/Speed/Indep/Src/Frontend/FEngInterfaces/FEngInterface.cpp index e69de29bb..b4be79c18 100644 --- a/src/Speed/Indep/Src/Frontend/FEngInterfaces/FEngInterface.cpp +++ b/src/Speed/Indep/Src/Frontend/FEngInterfaces/FEngInterface.cpp @@ -0,0 +1 @@ +void DisplayStatus(int i) {} diff --git a/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyMovieScreen.cpp b/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyMovieScreen.cpp index e69de29bb..7563c53e7 100644 --- a/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyMovieScreen.cpp +++ b/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyMovieScreen.cpp @@ -0,0 +1,69 @@ +#include "FEAnyMovieScreen.hpp" +#include "Speed/Indep/Src/FEng/cFEng.h" +#include "Speed/Indep/Src/Frontend/Database/FEDatabase.hpp" +#include "Speed/Indep/Src/Frontend/FEManager.hpp" +#include "Speed/Indep/Src/Frontend/MenuScreens/Safehouse/career/uiRepSheetRivalFlow.hpp" +#include "Speed/Indep/Src/Frontend/MoviePlayer/MoviePlayer.hpp" +#include "Speed/Indep/Src/Generated/Events/EFadeScreenOff.hpp" +struct FEMovie; +struct GarageMainScreen { + static GarageMainScreen* GetInstance(); + bool IsVisable(); + void NotificationMessage(unsigned long, unsigned long, unsigned long, unsigned long); +}; +FEObject* FEngFindObject(const char* pkg_name, unsigned int hash); +void FEngSetMovieName(FEMovie* movie, const char* name); +void DismissChyron(); +void bStrNCpy(char* dst, const char* src, int size); +bool eIsWidescreen(); +char FEAnyMovieScreen::MovieFilename[64] = {}; +char FEAnyMovieScreen::ReturnToPackageName[64] = {}; +FEAnyMovieScreen::FEAnyMovieScreen(ScreenConstructorData* sd) + : MenuScreen(sd) // + , mSubtitler() // + , bHidGarage(false) // + , bAllowingControllerErrors(false) +{ + bAllowingControllerErrors = FEManager::Get()->IsAllowingControllerError(); + FEManager::Get()->AllowControllerError(false); + FEMovie* movie = static_cast(FEngFindObject(GetPackageName(), 0x348FF9F)); + FEngSetMovieName(movie, MovieFilename); + mSubtitler.BeginningMovie(MovieFilename, GetPackageName()); + DismissChyron(); + EFadeScreenOff* evt = new EFadeScreenOff(0x14035FB); + GarageMainScreen* gs = GarageMainScreen::GetInstance(); + if (gs && !gs->IsVisable()) { gs->NotificationMessage(0xAD4BBDC, 0, 0, 0); bHidGarage = true; } +} +FEAnyMovieScreen::~FEAnyMovieScreen() { + if (bHidGarage) { GarageMainScreen* gs = GarageMainScreen::GetInstance(); if (gs) gs->NotificationMessage(0x18883F75, 0, 0, 0); } + FEManager::Get()->SetEATraxSecondButton(); + FEManager::Get()->AllowControllerError(bAllowingControllerErrors); +} +MenuScreen* FEAnyMovieScreen::Create(ScreenConstructorData* sd) { return new(__FILE__, __LINE__) FEAnyMovieScreen(sd); } +void FEAnyMovieScreen::NotificationMessage(unsigned long msg, FEObject* obj, unsigned long param1, unsigned long param2) { + mSubtitler.Update(msg); + if (msg == 0xB5AF2461 || msg == 0x406415E3) { + if (FEDatabase->IsDDay() || MoviePlayer_Bypass()) { mSubtitler.Update(0xC3960EB9); DismissMovie(); } + } else if (msg == 0xC3960EB9) { DismissMovie(); } +} +void FEAnyMovieScreen::LaunchMovie(const char* return_to_pkg, const char* filename) { + bStrNCpy(ReturnToPackageName, return_to_pkg, 64); SetMovieName(filename); + cFEng::Get()->QueuePackageSwitch(GetFEngPackageName(), 0, 0, false); +} +void FEAnyMovieScreen::PlaySafehouseIntroMovie() { + SetMovieName("SafehouseIntroMovie"); bStrNCpy(ReturnToPackageName, "FeMainMenu.fng", 64); +} +void FEAnyMovieScreen::DismissMovie() { + if (ReturnToPackageName[0] != '\0') { + cFEng::Get()->QueuePackageSwitch(ReturnToPackageName, 0, 0, false); + ReturnToPackageName[0] = '\0'; + } else { + if (FEDatabase->IsPostRivalMode()) uiRepSheetRivalFlow::Get()->Next(); + else cFEng::Get()->QueuePackagePop(1); + } +} +void FEAnyMovieScreen::SetMovieName(const char* filename) { bStrNCpy(MovieFilename, filename, 64); } +const char* FEAnyMovieScreen::GetFEngPackageName() { + if (eIsWidescreen()) return "FeMovieWide.fng"; + return "FeMovie.fng"; +} diff --git a/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyTutorialScreen.cpp b/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyTutorialScreen.cpp index e69de29bb..83354e43a 100644 --- a/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyTutorialScreen.cpp +++ b/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyTutorialScreen.cpp @@ -0,0 +1,85 @@ +#include "FEAnyTutorialScreen.hpp" +#include "Speed/Indep/Src/FEng/cFEng.h" +#include "Speed/Indep/Src/Frontend/Database/FEDatabase.hpp" +#include "Speed/Indep/Src/Frontend/FEManager.hpp" +#include "Speed/Indep/Src/Frontend/MoviePlayer/MoviePlayer.hpp" +#include "Speed/Indep/Src/Generated/Events/EFadeScreenOff.hpp" +struct FEMovie; +FEObject* FEngFindObject(const char* pkg_name, unsigned int hash); +void FEngSetMovieName(FEMovie* movie, const char* name); +void DismissChyron(); +void bStrNCpy(char* dst, const char* src, int size); +int bStrCmp(const char* a, const char* b); +bool eIsWidescreen(); +unsigned int FEngHashString(const char* s); +void FEngSetLanguageHash(const char* pkg_name, unsigned int obj_hash, unsigned int lang_hash); +unsigned int bStringHash(const char* s, unsigned int hash); +static const char* FEAnyTutorialScreenName = "FeTutorial.fng"; +char FEAnyTutorialScreen::MovieFilename[64] = {}; +char FEAnyTutorialScreen::PackageFilename[64] = {}; +bool FEAnyTutorialScreen::PackageSet = false; +FEAnyTutorialScreen::FEAnyTutorialScreen(ScreenConstructorData* sd) + : MenuScreen(sd) // + , LastTime(0) // + , TimeElapsed(0.0f) // + , TextToggleTiming(0.0f) // + , mTimer() // + , mSubtitler() +{ + DismissChyron(); + FEMovie* movie = static_cast(FEngFindObject(GetPackageName(), 0x348FF9F)); + FEngSetMovieName(movie, MovieFilename); + if (eIsWidescreen()) cFEng::Get()->QueuePackageMessage(0x70D2183B, GetPackageName(), nullptr); + CareerSettings* career = FEDatabase->GetCareerSettings(); + unsigned int str_hash = 0; + bool mSkipable = true; + unsigned int label_hash; + if (bStrCmp(MovieFilename, "DragRaceTutorial") == 0) { + if (career && !career->HasDoneDragTutorial()) { mSkipable = false; career->SetHasDoneDragTutorial(); } + label_hash = FEngHashString("DragTutText"); + } else if (bStrCmp(MovieFilename, "SpeedtrapTutorial") == 0) { + if (career && !career->HasDoneSpeedTrapTutorial()) { mSkipable = false; career->SetHasDoneSpeedTrapTutorial(); } + label_hash = FEngHashString("SpeedTrapTutText"); + } else if (bStrCmp(MovieFilename, "TollBoothTutorial") == 0) { + if (career && !career->HasDoneTollBoothTutorial()) { mSkipable = false; career->SetHasDoneTollBoothTutorial(); } + label_hash = FEngHashString("TollBoothTutText"); + } else if (bStrCmp(MovieFilename, "BountyTutorial") == 0) { + if (career && !career->HasDoneBountyTutorial()) { mSkipable = false; career->SetHasDoneBountyTutorial(); } + label_hash = FEngHashString("BountyTutText"); + } else if (bStrCmp(MovieFilename, "PursuitTutorial") == 0) { + if (career && !career->HasDonePursuitTutorial()) { mSkipable = false; career->SetHasDonePursuitTutorial(); } + label_hash = FEngHashString("PursuitTutText"); + } else { + goto skip_labels; + } + str_hash = label_hash; +skip_labels: + if (mSkipable) cFEng::Get()->QueuePackageMessage(0x59291F95, GetPackageName(), nullptr); + { + unsigned int einput = bStringHash("TutText", str_hash); + FEngSetLanguageHash(GetPackageName(), 0x5A0EE0D9, einput); + FEngSetLanguageHash(GetPackageName(), 0xF414BF3E, einput); + FEngSetLanguageHash(GetPackageName(), 0x5A0EE0D8, einput); + FEngSetLanguageHash(GetPackageName(), 0x07D2EA5D, einput); + } + mSubtitler.BeginningMovie(MovieFilename, GetPackageName()); + EFadeScreenOff* evt = new EFadeScreenOff(0x14035FB); +} +MenuScreen* FEAnyTutorialScreen::Create(ScreenConstructorData* sd) { return new(__FILE__, __LINE__) FEAnyTutorialScreen(sd); } +FEAnyTutorialScreen::~FEAnyTutorialScreen() { FEManager::Get()->SetEATraxSecondButton(); } +void FEAnyTutorialScreen::NotificationMessage(unsigned long msg, FEObject* obj, unsigned long param1, unsigned long param2) { + mSubtitler.Update(msg); + if (msg == 0xB5AF2461 || msg == 0x406415E3) { DismissMovie(true); mSubtitler.Update(0xC3960EB9); } + else if (msg == 0xC3960EB9) { DismissMovie(false); } +} +void FEAnyTutorialScreen::LaunchMovie(const char* filename, const char* packageName) { + PackageSet = false; SetMovieName(filename); + if (packageName) SetPackageName(packageName); + cFEng::Get()->QueuePackagePush(FEAnyTutorialScreenName, 0, 0, false); +} +void FEAnyTutorialScreen::DismissMovie(bool send_message) { + cFEng::Get()->QueuePackagePop(1); + if (send_message) cFEng::Get()->QueueGameMessage(0xC3960EB9, PackageFilename, 0xFF); +} +void FEAnyTutorialScreen::SetMovieName(const char* filename) { bStrNCpy(MovieFilename, filename, 64); } +void FEAnyTutorialScreen::SetPackageName(const char* packageName) { PackageSet = true; bStrNCpy(PackageFilename, packageName, 64); } diff --git a/src/Speed/Indep/Src/Frontend/MenuScreens/Safehouse/options/uiEATraxJukebox.cpp b/src/Speed/Indep/Src/Frontend/MenuScreens/Safehouse/options/uiEATraxJukebox.cpp index e69de29bb..4520d2961 100644 --- a/src/Speed/Indep/Src/Frontend/MenuScreens/Safehouse/options/uiEATraxJukebox.cpp +++ b/src/Speed/Indep/Src/Frontend/MenuScreens/Safehouse/options/uiEATraxJukebox.cpp @@ -0,0 +1 @@ +#include "uiEATraxJukebox.hpp" diff --git a/src/Speed/Indep/Src/Frontend/MenuScreens/Safehouse/options/uiOptionsTrailers.cpp b/src/Speed/Indep/Src/Frontend/MenuScreens/Safehouse/options/uiOptionsTrailers.cpp index e69de29bb..3a2287d45 100644 --- a/src/Speed/Indep/Src/Frontend/MenuScreens/Safehouse/options/uiOptionsTrailers.cpp +++ b/src/Speed/Indep/Src/Frontend/MenuScreens/Safehouse/options/uiOptionsTrailers.cpp @@ -0,0 +1,52 @@ +#include "uiOptionsTrailers.hpp" + +#include "Speed/Indep/Src/FEng/cFEng.h" +#include "Speed/Indep/Src/Frontend/Database/FEDatabase.hpp" + +struct GarageMainScreen { + static GarageMainScreen* GetInstance(); + void CancelCameraPush(); +}; + +void FEngSetLanguageHash(const char* pkg_name, unsigned int obj_hash, unsigned int language); +int FEngGetLastButton(const char* pkg_name); + +UIOptionsTrailers::UIOptionsTrailers(ScreenConstructorData* sd) + : IconScrollerMenu(sd) { + Setup(); +} + +void UIOptionsTrailers::NotificationMessage(unsigned long msg, FEObject* pobj, unsigned long param1, + unsigned long param2) { + if (msg != 0xC407210) { + IconScrollerMenu::NotificationMessage(msg, pobj, param1, param2); + } + + if (msg == 0x911AB364) { + StorePrevNotification(msg, pobj, param1, param2); + cFEng::Get()->QueuePackageMessage(0x587C018B, GetPackageName(), 0); + } else if (msg == 0xC407210) { + cFEng::Get()->QueuePackageMessage(0x8CB81F09, 0, 0); + Options.GetCurrentOption()->React(GetPackageName(), 0xC407210, pobj, param1, param2); + } else if (msg == 0xD05FC3A3) { + Options.GetCurrentOption()->React(GetPackageName(), 0xD05FC3A3, pobj, param1, param2); + } else if (msg == 0xE1FDE1D1) { + if (PrevButtonMessage == 0x911AB364) { + FEDatabase->ClearGameMode(eFE_GAME_TRAILERS); + FEDatabase->GetOptionsSettings()->CurrentCategory = static_cast(-1); + cFEng::Get()->QueuePackageSwitch("OptionsMain.fng", 0, 0, 0); + } + } +} + +void UIOptionsTrailers::Setup() { + int lastButton = FEngGetLastButton(GetPackageName()); + if (bFadeInIconsImmediately) { + SetInitialOption(lastButton); + } + + GarageMainScreen::GetInstance()->CancelCameraPush(); + + FEngSetLanguageHash(GetPackageName(), 0xB71B576D, 0xB65A46D8); + RefreshHeader(); +} diff --git a/src/Speed/Indep/Src/Frontend/SubTitle.cpp b/src/Speed/Indep/Src/Frontend/SubTitle.cpp index e69de29bb..6634f1e1d 100644 --- a/src/Speed/Indep/Src/Frontend/SubTitle.cpp +++ b/src/Speed/Indep/Src/Frontend/SubTitle.cpp @@ -0,0 +1,196 @@ +#include "SubTitle.hpp" + +#include + +#include "Speed/Indep/Src/FEng/cFEng.h" +#include "Speed/Indep/Src/Frontend/MoviePlayer/MoviePlayer.hpp" +#include "Speed/Indep/Src/Misc/Timer.hpp" +#include "Speed/Indep/bWare/Inc/Strings.hpp" +#include "Speed/Indep/bWare/Inc/bDebug.hpp" +#include "Speed/Indep/bWare/Inc/bPrintf.hpp" +#include "Speed/Indep/bWare/Inc/bWare.hpp" + +struct FEString; +struct FEObject; + +int GetCurrentLanguage(); +void FEngSetScript(FEObject* object, unsigned int script_hash, bool start_at_beginning); +void FEngSetLanguageHash(FEString* text, unsigned int hash); +int FEPrintf(FEString* text, const char* fmt, ...); +FEString* FEngFindString(const char* pkg_name, int name_hash); +FEObject* FEngFindObject(const char* pkg_name, unsigned int hash); +void FEngGetTopLeft(FEObject* object, float& x, float& y); +void FEngSetTopLeft(FEObject* object, float x, float y); +unsigned int FEngHashString(const char* str, ...); +bool DoesStringExist(unsigned int hash); +const char* GetLocalizedString(unsigned int hash); + +SubTitler* SubTitler::gCurrentSubtitler_; + +SubTitler::SubTitler() { + next_ = 0; + float zero = 0.0f; + data_ = nullptr; + str_ = nullptr; + str2_ = nullptr; + back_ = nullptr; + gCurrentSubtitler_ = this; + timeElapsed = zero; + mSubtitlePaused = false; + lastTime = 0; +} + +SubTitler::~SubTitler() { + Unload(); + gCurrentSubtitler_ = nullptr; +} + +bool SubTitler::ShouldShowSubTitles(const char* movie_name) { + int lang = GetCurrentLanguage(); + if (lang != 0 || mIsTutorial) { + return true; + } + return false; +} + +void SubTitler::BeginningMovie(const char* moviename, const char* packagename) { + SetIsTutorialMovie(moviename); + if (ShouldShowSubTitles(moviename)) { + Load(moviename, packagename); + } +} + +void SubTitler::Load(const char* movieName, const char* packageName) { + char filename[64]; + Unload(); + if (movieName != nullptr) { + bSNPrintf(filename, 0x40, "SUBTITLES\%s.sub", movieName); + int size; + data_ = static_cast(bGetFile(filename, &size, 0)); + if (data_ != nullptr) { + lastTime = 0; + timeElapsed = 0.0f; + next_ = 0; + for (int i = 0; data_[i].startTime != static_cast(0xFFFF); i++) { + bEndianSwap16(&data_[i].startTime); + bEndianSwap32(&data_[i].stringHash); + } + str_ = FEngFindString(packageName, 0x599B8442); + str2_ = FEngFindString(packageName, 0x2E8DA933); + back_ = FEngFindObject(packageName, 0x8BD49BCC); + FEPrintf(str_, ""); + unsigned int hideHash = FEngHashString("HIDE"); + FEngSetScript(reinterpret_cast(str_), hideHash, true); + FEPrintf(str2_, ""); + hideHash = FEngHashString("HIDE"); + FEngSetScript(reinterpret_cast(str2_), hideHash, true); + } + } +} + +void SubTitler::Unload() { + if (data_ != nullptr) { + bFree(data_); + data_ = nullptr; + } +} + +float SubTitler::GetElapsedTime() { + unsigned int timenow; + float thetime_ms; + if (mSubtitlePaused == false) { + timenow = bGetTicker(); + float diff = bGetTickerDifference(lastTime, timenow); + lastTime = timenow; + thetime_ms = timeElapsed + diff * 0.001f; + timeElapsed = thetime_ms; + } else { + timenow = bGetTicker(); + lastTime = timenow; + thetime_ms = timeElapsed; + } + return thetime_ms; +} + +void SubTitler::Update(unsigned int msg) { + if (gMoviePlayer != nullptr) { + mSubtitlePaused = gMoviePlayer->IsMoviePaused(); + if (msg == 0xC9960EBA) { + if (data_ != nullptr && lastTime != 0) { + float timenow = GetElapsedTime(); + if (IsMovieTimerPrintf != 0) { + Timer timer; + char timer_str[100]; + timer.SetTime(timenow); + timer.PrintToString(timer_str, 0); + } + unsigned short delta = static_cast( + static_cast(timenow * 1000.0f)); + if (data_[next_].startTime <= delta) { + RefreshText(); + next_++; + } + } + } else if (msg == 0xC3960EB9) { + Unload(); + } + } +} + +void SubTitler::Start() { + lastTime = bGetTicker(); +} + +void SubTitler::NotifyFirstFrame() { + if (gCurrentSubtitler_ != nullptr) { + gCurrentSubtitler_->Start(); + } +} + +void SubTitler::RefreshText() { + if (mIsTutorial == false) { + if (data_[next_].stringHash != 0x1A20BA) { + const char* str = GetLocalizedString(data_[next_].stringHash); + if (bStrCmp("", str) != 0) { + FEngSetLanguageHash(str_, data_[next_].stringHash); + float x1, y1; + FEngGetTopLeft(reinterpret_cast(str_), x1, y1); + float x2, dummy; + FEngGetTopLeft(back_, x2, dummy); + FEngSetTopLeft(back_, x2, y1); + return; + } + } + float x3, dummy2; + FEngGetTopLeft(back_, x3, dummy2); + FEngSetTopLeft(back_, x3, 1000.0f); + FEPrintf(str_, ""); + } else if (data_[next_].stringHash == 0x1A20BA) { + cFEng::Get()->QueuePackageMessage(0xDBDF2888, nullptr, nullptr); + } else { + FEngSetScript(reinterpret_cast(str_), 0x16A259, true); + FEngSetScript(reinterpret_cast(str2_), 0x16A259, true); + unsigned int text_hash = bStringHash("1_", data_[next_].stringHash); + if (DoesStringExist(text_hash)) { + FEngSetLanguageHash(str_, text_hash); + FEngSetScript(reinterpret_cast(str_), 0xBCBF0306, true); + } + text_hash = bStringHash("2_", data_[next_].stringHash); + if (DoesStringExist(text_hash)) { + FEngSetLanguageHash(str2_, text_hash); + FEngSetScript(reinterpret_cast(str2_), 0xBCBF0306, true); + } + } +} + +void SubTitler::SetIsTutorialMovie(const char* movieName) { + if (bStrCmp(movieName, "NIS_tutorial_1") == 0 || + bStrCmp(movieName, "NIS_tutorial_2") == 0 || + bStrCmp(movieName, "NIS_tutorial_3") == 0 || + bStrCmp(movieName, "NIS_tutorial_4") == 0 || + bStrCmp(movieName, "NIS_tutorial_5") == 0) { + mIsTutorial = true; + } else { + mIsTutorial = false; + } +} diff --git a/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h b/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h index bb44c2599..4dab0ead0 100644 --- a/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h +++ b/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h @@ -60,7 +60,10 @@ class StringKey { private: // total size: 0x10 unsigned long long mHash64; // offset 0x0, size 0x8 - unsigned int mHash32; // offset 0x8, size 0x4 + union { + unsigned int mHash32; // offset 0x8, size 0x4 + unsigned int mHash; + }; const char *mString; // offset 0xC, size 0x4 }; From 6afe055124316585ecc7cbc5cfa8d327901b08b9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 01:00:27 +0100 Subject: [PATCH 014/691] Revert broken agent changes, keep clean CDAction implementations Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Camera/Actions/CDActionDebugWatchCar.cpp | 60 ++++++++++++++--- .../Src/Camera/Actions/CDActionShowcase.cpp | 50 ++++++++++++-- .../Src/Camera/Actions/CDActionTrackCop.cpp | 66 +++++++++++++++++-- 3 files changed, 157 insertions(+), 19 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp index 843b68b4f..f51f79f1b 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp @@ -1,5 +1,11 @@ #include "Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.hpp" #include "Speed/Indep/Src/Camera/CameraMover.hpp" +#include "Speed/Indep/Src/Interfaces/Simables/IVehicle.h" +#include "Speed/Indep/Tools/Inc/ConversionUtil.hpp" +#include "Speed/Indep/bWare/Inc/Strings.hpp" + +extern int mToggleCar; +extern eVehicleList mToggleCarList; static UTL::COM::Factory::Prototype _CDActionDebugWatchCar("DEBUGWATCHCAR", CDActionDebugWatchCar::Construct); @@ -13,16 +19,43 @@ Attrib::StringKey CDActionDebugWatchCar::GetNext() const { } ISimable *CDActionDebugWatchCar::GetSimable() { - // TODO - return nullptr; + return ISimable::FindInstance(mhSimable); } void CDActionDebugWatchCar::ReleaseTarget() { - // TODO + if (mTarget.IsValid()) { + mhSimable = 0; + mTarget.Set(0); + } } void CDActionDebugWatchCar::AquireTarget() { - // TODO + ISimable *isim = ISimable::FindInstance(mhSimable); + if (isim == nullptr) { + ReleaseTarget(); + } + + if (mToggleCar > -1 && mToggleCarList < VEHICLE_MAX && mToggleCarList > -1) { + int count = IVehicle::Count(mToggleCarList); + if (count != 0) { + IVehicle *ivehicle = IVehicle::GetList(mToggleCarList)[static_cast(mToggleCar % count)]; + if (ivehicle != nullptr) { + if (ivehicle->GetSimable()->GetInstanceHandle() != mhSimable) { + unsigned int world_id = ivehicle->GetSimable()->GetWorldID(); + if (world_id != 0) { + ReleaseTarget(); + const char *model_str = ivehicle->GetVehicleAttributes().MODEL().GetString(); + if (model_str == nullptr) { + model_str = ""; + } + mAnchor->SetModel(bStringHash(model_str)); + mTarget.Set(world_id); + mhSimable = ivehicle->GetSimable()->GetInstanceHandle(); + } + } + } + } + } } CameraAI::Action *CDActionDebugWatchCar::Construct(CameraAI::Director *director) { @@ -68,14 +101,25 @@ CDActionDebugWatchCar::CDActionDebugWatchCar(CameraAI::Director *director) } CDActionDebugWatchCar::~CDActionDebugWatchCar() { - // TODO + ReleaseTarget(); + delete mMover; + delete mAnchor; } void CDActionDebugWatchCar::Update(float dT) { - // TODO + AquireTarget(); + if (mTarget.IsValid()) { + mAnchor->SetWorldID(mTarget.GetWorldID()); + mAnchor->Update(dT, *mTarget.GetMatrix(), *mTarget.GetVelocity(), *mTarget.GetAcceleration()); + } + mMover->Update(dT); } bool CDActionDebugWatchCar::GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) { - // TODO - return false; + bool valid = mTarget.IsValid(); + if (valid) { + ConversionUtil::RightToLeftMatrix4(*mTarget.GetMatrix(), matrix); + ConversionUtil::RightToLeftVector3(*mTarget.GetVelocity(), velocity); + } + return valid; } diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp index d3148088e..bc789055e 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp @@ -109,15 +109,34 @@ CDActionShowcase::CDActionShowcase(CameraAI::Director *director, IPlayer *player } CDActionShowcase::~CDActionShowcase() { - // TODO + if (mPlayer) { + Detach(mPlayer); + } + if (mVehicle) { + Detach(mVehicle); + } + delete mMover; + delete mAnchor; + delete mAttachments; } void CDActionShowcase::OnDetached(IAttachable *pOther) { - // TODO + if (ComparePtr(pOther, mPlayer)) { + mPlayer = nullptr; + } + if (ComparePtr(pOther, mVehicle)) { + OnCarDetached(); + } } void CDActionShowcase::OnCarDetached() { - // TODO + if (mTarget.IsValid()) { + mTarget.Set(0); + } + if (mAnchor) { + mAnchor->SetWorldID(0); + } + mVehicle = nullptr; } void CDActionShowcase::AquireCar() { @@ -125,5 +144,28 @@ void CDActionShowcase::AquireCar() { } void CDActionShowcase::Update(float dT) { - // TODO + if (mPlayer == nullptr) { + if (mVehicle != nullptr) { + Detach(mVehicle); + mVehicle = nullptr; + } + } else { + AquireCar(); + if (mTarget.IsValid()) { + bMatrix4 mat(*mTarget.GetMatrix()); + + ICollisionBody *irbc = nullptr; + mVehicle->QueryInterface(&irbc); + if (irbc != nullptr) { + IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); + UVector3 cg(irbc->GetCenterOfGravity()); + irb->ConvertLocalToWorld(cg, false); + cg += irb->GetPosition(); + eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(cg)); + } + + mAnchor->Update(dT, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); + } + } + mMover->Update(dT); } diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp index 309fb64ca..8c3076f15 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp @@ -1,9 +1,10 @@ #include "Speed/Indep/Src/Camera/Actions/CDActionTrackCop.hpp" #include "Speed/Indep/Src/Camera/CameraMover.hpp" #include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" -#include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" +#include "Speed/Indep/Src/Interfaces/IBody.h" #include "Speed/Indep/Src/Interfaces/Simables/ICollisionBody.h" #include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" +#include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" #include "Speed/Indep/Libs/Support/Utility/UVector.h" static UTL::COM::Factory::Prototype _CDActionTrackCop("TRACKCOP", CDActionTrackCop::Construct); @@ -112,15 +113,34 @@ CDActionTrackCop::CDActionTrackCop(CameraAI::Director *director, IPlayer *player } CDActionTrackCop::~CDActionTrackCop() { - // TODO + if (mPlayer) { + Detach(mPlayer); + } + if (mVehicle) { + Detach(mVehicle); + } + delete mMover; + delete mAnchor; + delete mAttachments; } void CDActionTrackCop::OnDetached(IAttachable *pOther) { - // TODO + if (ComparePtr(pOther, mPlayer)) { + mPlayer = nullptr; + } + if (ComparePtr(pOther, mVehicle)) { + OnCarDetached(); + } } void CDActionTrackCop::OnCarDetached() { - // TODO + if (mTarget.IsValid()) { + mTarget.Set(0); + } + if (mAnchor) { + mAnchor->SetWorldID(0); + } + mVehicle = nullptr; } void CDActionTrackCop::AquireCar() { @@ -128,10 +148,42 @@ void CDActionTrackCop::AquireCar() { } void CDActionTrackCop::Update(float dT) { - // TODO + if (mPlayer == nullptr) { + if (mVehicle != nullptr) { + Detach(mVehicle); + mVehicle = nullptr; + } + } else { + AquireCar(); + if (mTarget.IsValid()) { + bMatrix4 mat(*mTarget.GetMatrix()); + + ICollisionBody *irbc = nullptr; + mVehicle->QueryInterface(&irbc); + if (irbc != nullptr) { + IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); + UVector3 cg(irbc->GetCenterOfGravity()); + irb->ConvertLocalToWorld(cg, false); + cg += irb->GetPosition(); + eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(cg)); + } + + mAnchor->Update(dT, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); + } + } + mMover->Update(dT); } bool CDActionTrackCop::GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) { - // TODO - return false; + IBody *ibody = nullptr; + if (mVehicle == nullptr) { + return false; + } + mVehicle->QueryInterface(&ibody); + if (ibody == nullptr) { + return false; + } + ibody->GetTransform(matrix); + ibody->GetLinearVelocity(velocity); + return true; } From 547c500128a3e82e9b41938ad482c3af52b27c75 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 01:23:05 +0100 Subject: [PATCH 015/691] zCamera: Implement CDAction functions, reach 50% match rate Implemented functions: - CDActionDrive: OnDetached, OnCarDetached, OnCollision, AquireCar, GetTrafficBasis, MessageJumpCut - CDActionTrackCar: AquireCar - CDActionTrackCop: AquireCar - CDActionShowcase: AquireCar - CDActionDebug: destructor, Update, GetTrafficBasis Added CameraAnchor::SetDimension, SetTopSpeed inlines. Reverted broken TrackCar.cpp agent code (Init redefinition). Match rate: 50.1% (152/453 functions) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Src/Camera/Actions/CDActionDebug.cpp | 22 +- .../Src/Camera/Actions/CDActionDrive.cpp | 102 +++++++- .../Src/Camera/Actions/CDActionShowcase.cpp | 28 +- .../Src/Camera/Actions/CDActionTrackCar.cpp | 35 ++- .../Src/Camera/Actions/CDActionTrackCop.cpp | 34 ++- src/Speed/Indep/Src/Camera/CameraMover.hpp | 4 + .../Indep/Src/Camera/Movers/TrackCar.cpp | 240 +----------------- 7 files changed, 213 insertions(+), 252 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp index b7bad1652..3891df20a 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp @@ -1,5 +1,9 @@ #include "Speed/Indep/Src/Camera/Actions/CDActionDebug.hpp" #include "Speed/Indep/Src/Camera/CameraMover.hpp" +#include "Speed/Indep/Src/Camera/Camera.hpp" +#include "Speed/Indep/Tools/Inc/ConversionUtil.hpp" + +extern bool Tweak_EnableICEAuthoring; static UTL::COM::Factory::Prototype _CDActionDebug("DEBUG", CDActionDebug::Construct); @@ -46,14 +50,24 @@ CDActionDebug::CDActionDebug(CameraAI::Director *director) } CDActionDebug::~CDActionDebug() { - // TODO + delete mMover; } void CDActionDebug::Update(float dT) { - // TODO + while (!mActionQ.IsEmpty()) { + ActionRef aRef = mActionQ.GetAction(); + float data = aRef.Data(); + if (aRef.ID() == 0x15 && !Tweak_EnableICEAuthoring) { + mDone = true; + } + mActionQ.PopAction(); + } } bool CDActionDebug::GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) { - // TODO - return false; + bMatrix4 camera_to_world; + eInvertTransformationMatrix(&camera_to_world, mMover->GetCamera()->GetCameraMatrix()); + ConversionUtil::RightToLeftMatrix4(camera_to_world, matrix); + ConversionUtil::RightToLeftVector3(*mMover->GetCamera()->GetVelocityPosition(), velocity); + return true; } diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index 2a2503d50..551b083aa 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -3,9 +3,12 @@ #include "Speed/Indep/Src/Camera/ICE/ICEManager.hpp" #include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" #include "Speed/Indep/Src/Frontend/Database/FEDatabase.hpp" +#include "Speed/Indep/Src/Generated/AttribSys/Classes/pvehicle.h" #include "Speed/Indep/Src/Generated/Messages/MJumpCut.h" +#include "Speed/Indep/Src/Interfaces/IBody.h" #include "Speed/Indep/Src/Interfaces/Simables/ICollisionBody.h" #include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" +#include "Speed/Indep/Src/Interfaces/Simables/ITransmission.h" #include "Speed/Indep/Libs/Support/Utility/UVector.h" extern bool gCinematicMomementCamera; @@ -183,19 +186,93 @@ void CDActionDrive::Reset() { } void CDActionDrive::OnDetached(IAttachable *pOther) { - // TODO + if (ComparePtr(pOther, mPlayer)) { + mPlayer = nullptr; + } + if (ComparePtr(pOther, mVehicle)) { + OnCarDetached(); + } } void CDActionDrive::OnCarDetached() { - // TODO + Sim::Collision::RemoveListener(static_cast(this), mVehicle); + if (mTarget.IsValid()) { + mTarget.Set(0); + } + if (mAnchor != nullptr) { + mAnchor->SetWorldID(0); + } + mVehicle = nullptr; } void CDActionDrive::OnCollision(const Sim::Collision::Info &cinfo) { - // TODO + float speed = UMath::Length(cinfo.closingVel); + switch (cinfo.type) { + case Sim::Collision::Info::OBJECT: { + if (speed > 20.0f) { + float objecttime = UMath::Min((speed - 20.0f) * 0.01f, 1.0f); + objecttime = UMath::Max(objecttime * mMaxCollisionTime, mObjectCollisionTime); + mObjectCollisionTime = objecttime; + } + break; + } + case Sim::Collision::Info::WORLD: { + if (speed > 5.0f) { + float damptime = UMath::Min((speed - 5.0f) * 0.025f, 1.0f); + damptime = UMath::Max(damptime * mMaxCollisionTime, mDampCollisionTime); + mDampCollisionTime = damptime; + } + break; + } + case Sim::Collision::Info::GROUND: { + if (speed > 3.0f) { + float groundtime = UMath::Min((speed - 3.0f) * 0.05f, 1.0f); + groundtime = UMath::Max(groundtime * mMaxCollisionTime, mGroundCollisionTime); + mGroundCollisionTime = groundtime; + } + break; + } + } } void CDActionDrive::AquireCar() { - // TODO + if (mPlayer == nullptr) { + return; + } + ISimable *isimable = mPlayer->GetSimable(); + if (!ComparePtr(isimable, mVehicle)) { + if (mVehicle != nullptr) { + Detach(mVehicle); + mVehicle = nullptr; + } + } + if (mVehicle != nullptr) { + return; + } + isimable = mPlayer->GetSimable(); + if (isimable != nullptr) { + mTarget.Set(isimable->GetWorldID()); + if (mTarget.IsValid()) { + isimable->QueryInterface(&mVehicle); + if (mVehicle != nullptr) { + Attach(mVehicle); + Sim::Collision::AddListener(static_cast(this), mVehicle, "Camera"); + const char *model_str = mVehicle->GetVehicleAttributes().MODEL().GetString(); + mAnchor->SetModel(bStringHash(model_str)); + mAnchor->SetWorldID(mTarget.GetWorldID()); + IRigidBody *body = isimable->GetRigidBody(); + UMath::Vector3 dimension; + body->GetDimension(dimension); + mAnchor->SetDimension(dimension); + ITransmission *itrans = nullptr; + mVehicle->QueryInterface(&itrans); + if (itrans != nullptr) { + mAnchor->SetTopSpeed(itrans->GetMaxSpeedometer()); + mGear = itrans->GetGear(); + } + } + } + } } void CDActionDrive::Update(float dT) { @@ -203,10 +280,21 @@ void CDActionDrive::Update(float dT) { } bool CDActionDrive::GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) { - // TODO - return false; + IBody *ibody = nullptr; + if (mVehicle == nullptr) { + return false; + } + mVehicle->QueryInterface(&ibody); + if (ibody == nullptr) { + return false; + } + ibody->GetTransform(matrix); + ibody->GetLinearVelocity(velocity); + return true; } void CDActionDrive::MessageJumpCut(const MJumpCut &message) { - // TODO + if (mAnchor != nullptr && message.GetAnchorWorldID() == mAnchor->GetWorldID()) { + static_cast(mMover)->SetSnapNext(); + } } diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp index bc789055e..e44a63c9c 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp @@ -2,6 +2,7 @@ #include "Speed/Indep/Src/Camera/CameraMover.hpp" #include "Speed/Indep/Src/Camera/Movers/Showcase.hpp" #include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" +#include "Speed/Indep/Src/Generated/AttribSys/Classes/pvehicle.h" #include "Speed/Indep/Src/Interfaces/Simables/ICollisionBody.h" #include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" #include "Speed/Indep/Libs/Support/Utility/UVector.h" @@ -140,7 +141,32 @@ void CDActionShowcase::OnCarDetached() { } void CDActionShowcase::AquireCar() { - // TODO + if (mPlayer == nullptr) { + return; + } + ISimable *isimable = mPlayer->GetSimable(); + if (!ComparePtr(isimable, mVehicle)) { + if (mVehicle != nullptr) { + Detach(mVehicle); + mVehicle = nullptr; + } + } + if (mVehicle != nullptr) { + return; + } + isimable = mPlayer->GetSimable(); + if (isimable != nullptr) { + mTarget.Set(isimable->GetWorldID()); + if (mTarget.IsValid()) { + isimable->QueryInterface(&mVehicle); + if (mVehicle != nullptr) { + Attach(mVehicle); + const char *model_str = mVehicle->GetVehicleAttributes().MODEL().GetString(); + mAnchor->SetModel(bStringHash(model_str)); + mAnchor->SetWorldID(mTarget.GetWorldID()); + } + } + } } void CDActionShowcase::Update(float dT) { diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp index 3d6bbc04f..34421f03b 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp @@ -1,8 +1,11 @@ #include "Speed/Indep/Src/Camera/Actions/CDActionTrackCar.hpp" #include "Speed/Indep/Src/Camera/CameraMover.hpp" #include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" +#include "Speed/Indep/Src/Generated/AttribSys/Classes/pvehicle.h" +#include "Speed/Indep/Src/Interfaces/IBody.h" #include "Speed/Indep/Src/Interfaces/Simables/ICollisionBody.h" #include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" +#include "Speed/Indep/Src/Interfaces/Simables/ITransmission.h" #include "Speed/Indep/Libs/Support/Utility/UVector.h" static UTL::COM::Factory::Prototype _CDActionTrackCar("TRACKCAR", CDActionTrackCar::Construct); @@ -135,7 +138,37 @@ void CDActionTrackCar::OnCarDetached() { } void CDActionTrackCar::AquireCar() { - // TODO + if (mPlayer == nullptr) { + return; + } + ISimable *isimable = mPlayer->GetSimable(); + if (!ComparePtr(isimable, mVehicle)) { + if (mVehicle != nullptr) { + Detach(mVehicle); + mVehicle = nullptr; + } + } + if (mVehicle != nullptr) { + return; + } + isimable = mPlayer->GetSimable(); + if (isimable != nullptr) { + mTarget.Set(isimable->GetWorldID()); + if (mTarget.IsValid()) { + isimable->QueryInterface(&mVehicle); + if (mVehicle != nullptr) { + Attach(mVehicle); + const char *model_str = mVehicle->GetVehicleAttributes().MODEL().GetString(); + mAnchor->SetModel(bStringHash(model_str)); + mAnchor->SetWorldID(mTarget.GetWorldID()); + ITransmission *itrans = nullptr; + mVehicle->QueryInterface(&itrans); + if (itrans != nullptr) { + mAnchor->SetTopSpeed(itrans->GetMaxSpeedometer()); + } + } + } + } } void CDActionTrackCar::Update(float dT) { diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp index 8c3076f15..fe4337247 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp @@ -1,9 +1,11 @@ #include "Speed/Indep/Src/Camera/Actions/CDActionTrackCop.hpp" #include "Speed/Indep/Src/Camera/CameraMover.hpp" #include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" +#include "Speed/Indep/Src/Generated/AttribSys/Classes/pvehicle.h" #include "Speed/Indep/Src/Interfaces/IBody.h" #include "Speed/Indep/Src/Interfaces/Simables/ICollisionBody.h" #include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" +#include "Speed/Indep/Src/Interfaces/Simables/ITransmission.h" #include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" #include "Speed/Indep/Libs/Support/Utility/UVector.h" @@ -144,7 +146,37 @@ void CDActionTrackCop::OnCarDetached() { } void CDActionTrackCop::AquireCar() { - // TODO + if (mPlayer == nullptr) { + return; + } + ISimable *isimable = mPlayer->GetSimable(); + if (!ComparePtr(isimable, mVehicle)) { + if (mVehicle != nullptr) { + Detach(mVehicle); + mVehicle = nullptr; + } + } + if (mVehicle != nullptr) { + return; + } + isimable = mPlayer->GetSimable(); + if (isimable != nullptr) { + mTarget.Set(isimable->GetWorldID()); + if (mTarget.IsValid()) { + isimable->QueryInterface(&mVehicle); + if (mVehicle != nullptr) { + Attach(mVehicle); + const char *model_str = mVehicle->GetVehicleAttributes().MODEL().GetString(); + mAnchor->SetModel(bStringHash(model_str)); + mAnchor->SetWorldID(mTarget.GetWorldID()); + ITransmission *itrans = nullptr; + mVehicle->QueryInterface(&itrans); + if (itrans != nullptr) { + mAnchor->SetTopSpeed(itrans->GetMaxSpeedometer()); + } + } + } + } } void CDActionTrackCop::Update(float dT) { diff --git a/src/Speed/Indep/Src/Camera/CameraMover.hpp b/src/Speed/Indep/Src/Camera/CameraMover.hpp index 3ce3464f3..0a4ce159b 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.hpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.hpp @@ -274,6 +274,10 @@ class CameraAnchor { void Update(float dT, const bMatrix4 &matrix, const bVector3 &velocity, const bVector3 &forward); void SetModel(int model); void SetZoom(float z) { mZoom = z; } + + void SetDimension(const bVector3 &dim) { mDimension = dim; } + void SetTopSpeed(float s) { mTopSpeed = s; } + POV *GetPov(int pov_type); private: diff --git a/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp b/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp index 812c98cf3..a969b7042 100644 --- a/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp @@ -1,14 +1,8 @@ #include "Speed/Indep/Src/Camera/CameraMover.hpp" -#include "Speed/Indep/Src/Camera/Camera.hpp" #include "Speed/Indep/Src/Interfaces/Simables/IAI.h" #include "Speed/Indep/Libs/Support/Utility/UVector.h" -#include "Speed/Indep/Src/World/WRoadNetwork.h" -#include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" extern float TrackCarEyeOffsetZ[]; -extern bool gCamCloseToRoadBlock; -static bVector3 PreviousEye; -static const float Tweak_JumpCamPositionSpeedMult[4] = {0.5f, 1.3f, 1.0f, 1.5f}; static bool IsAnyCopNear(CameraAnchor *pCar) { IVehicle *const *iter = IVehicle::GetList(VEHICLE_AICOPS).begin(); @@ -62,10 +56,9 @@ static void FixWorldHeight(UMath::Vector3 *point, int type) { } UMath::Vector3 test; - float ground_elevation; + float ground_elevation = 0.0f; test = *point; - ground_elevation = 0.0f; test.y += 4.0f; WCollisionMgr collision_mgr(0, 3); @@ -88,233 +81,4 @@ volatile void *_force_active_TrackCar[] = { (void *)IsAnyCopNear, (void *)IsBeingPursued, (void *)FixWorldHeight, -}; - -void TrackCarCameraMover::Init() { - WRoadNav nav; - nav.SetCookieTrail(true); - nav.SetNavType(WRoadNav::kTypeDirection); - - if (gCamCloseToRoadBlock) { - gCamCloseToRoadBlock = false; - CameraType = 2; - } else { - if (IsBeingPursued(ViewID)) { - if (IsAnyCopNear(CarToFollow)) { - CameraType = 1; - } - } - } - - float positionSpeedMultiplier[2]; - const float kMaxPositionDistance = 150.0f; - positionSpeedMultiplier[0] = Tweak_JumpCamPositionSpeedMult[CameraType]; - positionSpeedMultiplier[1] = Tweak_JumpCamPositionSpeedMult[3]; - float vel = CarToFollow->GetVelocityMagnitude(); - if (vel * positionSpeedMultiplier[0] > kMaxPositionDistance) { - positionSpeedMultiplier[0] = kMaxPositionDistance / vel; - } - if (vel * positionSpeedMultiplier[1] > kMaxPositionDistance) { - positionSpeedMultiplier[1] = kMaxPositionDistance / vel; - } - - bVector3 vCarPosQuarterTime; - bScaleAdd(&vCarPosQuarterTime, CarToFollow->GetGeometryPosition(), CarToFollow->GetVelocity(), 0.1f); - - UMath::Vector4 carPosQuarterTime; - eUnSwizzleWorldVector(vCarPosQuarterTime, reinterpret_cast(carPosQuarterTime)); - - bVector3 vFuture; - bScaleAdd(&vFuture, CarToFollow->GetGeometryPosition(), CarToFollow->GetVelocity(), positionSpeedMultiplier[0]); - - bVector3 vLeft(vFuture); - bVector3 vRight(vFuture); - - bVector3 vFutureHigh; - bScaleAdd(&vFutureHigh, CarToFollow->GetGeometryPosition(), CarToFollow->GetVelocity(), positionSpeedMultiplier[1]); - - bVector3 vLeftHigh(vFutureHigh); - bVector3 vRightHigh(vFutureHigh); - - UMath::Vector4 carPos; - eUnSwizzleWorldVector(*CarToFollow->GetGeometryPosition(), reinterpret_cast(carPos)); - - UMath::Vector4 carDir; - eUnSwizzleWorldVector(*CarToFollow->GetForwardVector(), reinterpret_cast(carDir)); - - float rightDistHigh = 0.0f; - float leftDistHigh = rightDistHigh; - float rightDist = rightDistHigh; - float leftDist = rightDistHigh; - - nav.InitAtPoint(Vector4To3(carPos), Vector4To3(carDir), true, 1.0f); - - if (nav.IsValid()) { - const float kMaxNavDist = 10.0f; - - nav.IncNavPosition(positionSpeedMultiplier[0] * CarToFollow->GetVelocityMagnitude(), UMath::Vector3::kZero, rightDistHigh); - - float navDist = UMath::Distancexz(nav.GetLeftPosition(), nav.GetPosition()); - float sideLerp = 0.9f; - if (navDist > kMaxNavDist) { - sideLerp = (kMaxNavDist / navDist) * 0.9f; - } - - UMath::Vector3 leftPos; - int focal_error = 0; - UMath::Lerp(nav.GetPosition(), nav.GetLeftPosition(), sideLerp, leftPos); - FixWorldHeight(&leftPos, CameraType); - - UMath::Vector4 leftPosVec4 = UMath::Vector4Make(leftPos, 1.0f); - UMath::Vector4 leftPosVec4_2 = leftPosVec4; - - if (IsSomethingInBetween(leftPosVec4_2, carPos)) { - UMath::Vector4 leftPosVec4_3 = UMath::Vector4Make(leftPos, 1.0f); - leftPosVec4 = leftPosVec4_3; - if (!IsSomethingInBetween(leftPosVec4, carPosQuarterTime) && CameraType != 2) { - focal_error = 1; - } - } else { - focal_error = 1; - } - - if (focal_error) { - eSwizzleWorldVector(reinterpret_cast(leftPos), vLeft); - if (bDistBetween(&PreviousEye, &vLeft) > 3.0f) { - leftDist = bDistBetween(&vFuture, &vLeft); - } - } - - navDist = UMath::Distancexz(nav.GetRightPosition(), nav.GetPosition()); - sideLerp = 0.9f; - if (navDist > kMaxNavDist) { - sideLerp = (kMaxNavDist / navDist) * 0.9f; - } - - UMath::Vector3 rightPos; - focal_error = 0; - UMath::Lerp(nav.GetPosition(), nav.GetRightPosition(), sideLerp, rightPos); - FixWorldHeight(&rightPos, CameraType); - - UMath::Vector4 rightPosVec4 = UMath::Vector4Make(rightPos, 1.0f); - UMath::Vector4 rightPosVec4_2 = rightPosVec4; - - if (IsSomethingInBetween(rightPosVec4_2, carPos)) { - UMath::Vector4 rightPosVec4_3 = UMath::Vector4Make(rightPos, 1.0f); - rightPosVec4 = rightPosVec4_3; - if (!IsSomethingInBetween(rightPosVec4, carPosQuarterTime) && CameraType != 2) { - focal_error = 1; - } - } else { - focal_error = 1; - } - - if (focal_error) { - eSwizzleWorldVector(reinterpret_cast(rightPos), vRight); - if (bDistBetween(&PreviousEye, &vRight) > 3.0f) { - rightDist = bDistBetween(&vFuture, &vRight); - } - } - } - - { - UMath::Vector3 pos; - focal_error = 0; - bScaleAdd(&vLeftHigh, &vFutureHigh, CarToFollow->GetLeftVector(), 4.0f); - eUnSwizzleWorldVector(vLeftHigh, reinterpret_cast(pos)); - FixWorldHeight(&pos, 3); - - UMath::Vector4 posVec4 = UMath::Vector4Make(pos, 1.0f); - pos.y = Vector4To3(posVec4).y; - UMath::Vector4 posVec4_2 = posVec4; - - if (IsSomethingInBetween(posVec4_2, carPos)) { - UMath::Vector4 posVec4_3 = UMath::Vector4Make(pos, 1.0f); - posVec4 = posVec4_3; - if (!IsSomethingInBetween(posVec4, carPosQuarterTime) && CameraType != 2) { - focal_error = 1; - } - } else { - focal_error = 1; - } - - if (focal_error) { - if (bDistBetween(&PreviousEye, &vLeftHigh) > 3.0f) { - leftDistHigh = bDistBetween(&vFutureHigh, &vLeftHigh) * 0.1f; - } - } - } - - { - UMath::Vector3 pos; - focal_error = 0; - bScaleAdd(&vRightHigh, &vFutureHigh, CarToFollow->GetLeftVector(), -4.0f); - eUnSwizzleWorldVector(vRightHigh, reinterpret_cast(pos)); - FixWorldHeight(&pos, 3); - - UMath::Vector4 posVec4 = UMath::Vector4Make(pos, 1.0f); - pos.y = Vector4To3(posVec4).y; - UMath::Vector4 posVec4_2 = posVec4; - - if (IsSomethingInBetween(posVec4_2, carPos)) { - UMath::Vector4 posVec4_3 = UMath::Vector4Make(pos, 1.0f); - posVec4 = posVec4_3; - if (!IsSomethingInBetween(posVec4, carPosQuarterTime) && CameraType != 2) { - focal_error = 1; - } - } else { - focal_error = 1; - } - - if (focal_error) { - if (bDistBetween(&PreviousEye, &vRightHigh) > 3.0f) { - rightDistHigh = bDistBetween(&vFutureHigh, &vRightHigh) * 0.1f; - } - } - } - - if (leftDist > 0.0f || rightDist > 0.0f || leftDistHigh > 0.0f || rightDistHigh > 0.0f) { - if (leftDist + leftDistHigh > rightDist + rightDistHigh) { - if (leftDist > leftDistHigh) { - Eye = vLeft; - } else { - Eye = vLeftHigh; - } - } else { - if (rightDist > rightDistHigh) { - Eye = vRight; - } else { - Eye = vRightHigh; - } - } - } else { - float heightOffset = 2.0f; - Eye = *pCamera->GetPosition(); - Eye.z += heightOffset; - if (IsSomethingInBetween(&Eye, CarToFollow->GetGeometryPosition())) { - Eye.z -= heightOffset; - } - } - - Eye.z += 0.5f; - PreviousEye = Eye; - - FocalDistCubic.SetDuration(0.42f); - FocalDistCubic.SetFlags(1); - - int focal_error = bRandom(0x13) + 0x1A; - if (bRandom(2) != 0) { - focal_error = -focal_error; - } - FocalDistCubic.SetVal(static_cast(focal_error)); - FocalDistCubic.SetValDesired(0.0f); - - if (FocusEffects == 0) { - if (!Camera::StopUpdating) { - pCamera->SetFocalDistance(0.0f); - } - if (!Camera::StopUpdating) { - pCamera->SetDepthOfField(0.0f); - } - } -} \ No newline at end of file +}; \ No newline at end of file From a5775bee5fbc6f3ecb2cd706e05e6a8992fedb21 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 01:39:22 +0100 Subject: [PATCH 016/691] zCamera: Implement CDActionIce functions (51.7%) Implemented CDActionIce destructor (98.6%), OnDetached (100%), ReleaseCar (100%), AquireCar (100%), Update (100%). Match rate: 51.7% (155/453 functions) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Indep/Src/Camera/Actions/CDActionIce.cpp | 133 +++++++++++++++++- 1 file changed, 128 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp index 07bbb000b..529c342dc 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp @@ -2,9 +2,12 @@ #include "Speed/Indep/Src/Camera/CameraMover.hpp" #include "Speed/Indep/Src/Camera/ICE/ICEManager.hpp" #include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" +#include "Speed/Indep/Src/Interfaces/Simables/IEngine.h" +#include "Speed/Indep/Src/Interfaces/Simables/ISuspension.h" extern ICEManager TheICEManager; extern bool Tweak_ForceICEReplay; +extern bool Tweak_EnableICEAuthoring; #include "Speed/Indep/Src/Camera/ICE/ICEMover.hpp" static UTL::COM::Factory::Prototype _CDActionIce("ICE", CDActionIce::Construct); @@ -129,21 +132,141 @@ CDActionIce::CDActionIce(CameraAI::Director *director, IPlayer *player) } CDActionIce::~CDActionIce() { - // TODO + TheICEManager.SetGenericCameraToPlay("", ""); + if (mPlayer) { + mAttachments->Detach(mPlayer); + } + ReleaseCar(true); + delete mMover; + delete mAnchor; + delete mAttachments; } void CDActionIce::OnDetached(IAttachable *pOther) { - // TODO + if (ComparePtr(pOther, mPlayer)) { + mPlayer = nullptr; + } + if (ComparePtr(pOther, mVehicle)) { + ReleaseCar(false); + } } void CDActionIce::ReleaseCar(bool detach) { - // TODO + if (mVehicle != nullptr) { + if (detach) { + Detach(mVehicle); + } + mVehicle = nullptr; + } + mTarget.Set(0); } void CDActionIce::AquireCar() { - // TODO + ISimable *isimable; + ITransmission *itrans; + ISuspension *isuspension; + + if (mPlayer == nullptr) { + return; + } + + if (!ComparePtr(mPlayer->GetSimable(), mVehicle)) { + ReleaseCar(true); + } + if (mVehicle != nullptr) { + return; + } + + isimable = mPlayer->GetSimable(); + if (isimable == nullptr) { + return; + } + + mTarget.Set(isimable->GetWorldID()); + if (!mTarget.IsValid()) { + return; + } + + if (!isimable->QueryInterface(&mVehicle)) { + return; + } + + Attach(mVehicle); + + if (mVehicle->QueryInterface(&itrans)) { + mAnchor->SetTopSpeed(itrans->GetMaxSpeedometer()); + } + + if (mVehicle->QueryInterface(&isuspension)) { + mAnchor->SetNumWheels(isuspension->GetNumWheels() != 0); + } } void CDActionIce::Update(float dT) { - // TODO + while (!mActionQ.IsEmpty()) { + ActionRef aRef = mActionQ.GetAction(); + float data = aRef.Data(); + if (aRef.ID() == 0x15 && Tweak_EnableICEAuthoring) { + Tweak_EnableICEAuthoring = false; + mDone = true; + } + mActionQ.PopAction(); + } + + if (mPlayer == nullptr) { + ReleaseCar(true); + } else { + AquireCar(); + if (mTarget.IsValid()) { + bMatrix4 mat(*mTarget.GetMatrix()); + ICollisionBody *irbc; + ISimable *isimable; + float forward_slip; + ISuspension *isuspension; + + if (mVehicle != nullptr && mVehicle->QueryInterface(&irbc)) { + IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); + UVector3 cg(irbc->GetCenterOfGravity()); + irb->ConvertLocalToWorld(cg, false); + cg += irb->GetPosition(); + eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(mat.v3)); + } + + mAnchor->SetSlipAngle(0.0f); + if (mVehicle != nullptr) { + mAnchor->SetSlipAngle(mVehicle->GetSlipAngle()); + } + + mAnchor->SetRPM(0.0f); + mAnchor->SetNosEngaged(false); + mAnchor->SetNosPercentageLeft(0.0f); + + if (mVehicle != nullptr && mVehicle->QueryInterface(&isimable)) { + IEngine *iengine; + if (isimable->QueryInterface(&iengine)) { + mAnchor->SetRPM(iengine->GetRPM()); + mAnchor->SetNosEngaged(iengine->IsNOSEngaged()); + mAnchor->SetNosPercentageLeft(iengine->GetNOSCapacity()); + } + } + + forward_slip = 0.0f; + if (mVehicle != nullptr && mVehicle->QueryInterface(&isuspension)) { + for (unsigned int i = 0; i < isuspension->GetNumWheels(); i++) { + if (isuspension->GetWheelSlip(i) > 0.0f) { + forward_slip += isuspension->GetWheelSlip(i); + } + } + } + + mAnchor->SetForwardSlip(forward_slip); + mAnchor->Update(dT, *reinterpret_cast(&mat), + *reinterpret_cast(mTarget.GetVelocity()), + *reinterpret_cast(mTarget.GetAcceleration())); + if (TheICEManager.IsEditorOff() && Tweak_ForceICEReplay) { + TheICEManager.ChooseReplayCamera(); + } + } + TheICEManager.Update(); + } } From bf0047f0755e1b3f9f7b840b1a0d9e7a9fc2c31e Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 02:56:13 +0100 Subject: [PATCH 017/691] fix(IPlayer): remove SetSettings and IsLocal from GC vtable - Remove SetSettings virtual function from IPlayer (exists in PS2 alpha but not GC release), fixing vtable offset from 0x68 to 0x60 for GetControllerPort and aligning all IPlayer virtual dispatch offsets - Change IsLocal guard from #ifndef to #ifdef EA_BUILD_A124 in both IPlayer.h and Simulation.cpp, excluding it from GC builds - Fixes vtable layout for ~10+ functions: FindPlayer, CDAction Construct functions, and any code calling IPlayer virtual methods - Progress: 163/453 -> 167/453 (53.3%) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- config_temp/splits.txt | 1661 - config_temp/symbols.txt | 25571 ---------------- .../Src/Camera/Actions/CDActionDebug.cpp | 2 +- .../Src/Camera/Actions/CDActionDrive.cpp | 5 +- .../Src/Camera/Actions/CDActionShowcase.cpp | 4 +- .../Src/Camera/Actions/CDActionTrackCar.cpp | 9 +- .../Src/Camera/Actions/CDActionTrackCop.cpp | 9 +- src/Speed/Indep/Src/Camera/CameraAI.cpp | 106 +- src/Speed/Indep/Src/Camera/CameraMover.cpp | 76 +- src/Speed/Indep/Src/Camera/ICE/ICEData.cpp | 2 +- src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp | 41 +- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 83 +- .../Indep/Src/Camera/ICE/ICEOverlays.cpp | 7 +- .../Indep/Src/Camera/Movers/SelectCar.cpp | 37 +- .../Src/Interfaces/SimEntities/IPlayer.h | 5 - src/Speed/Indep/Tools/Inc/ConversionUtil.hpp | 14 +- 16 files changed, 259 insertions(+), 27373 deletions(-) delete mode 100644 config_temp/splits.txt delete mode 100644 config_temp/symbols.txt diff --git a/config_temp/splits.txt b/config_temp/splits.txt deleted file mode 100644 index 3bb901e94..000000000 --- a/config_temp/splits.txt +++ /dev/null @@ -1,1661 +0,0 @@ -Sections: - .init type:code align:4 - .text type:code align:16 - .over type:code align:8 - .ctors type:data align:1 - .dtors type:data align:1 - .rodata type:rodata align:8 - .data type:data align:32 - .bss type:bss align:32 - .sdata type:data align:8 - .sbss type:bss align:8 - .sdata2 type:data align:8 - -Speed/Indep/SourceLists/zAI.cpp: - .init start:0x80003100 end:0x800034A0 - .text start:0x800034A0 end:0x80045E3C - .over start:0x803A41B8 end:0x803A41B8 - .ctors start:0x803C8B60 end:0x803C8C40 - .dtors start:0x803C8C40 end:0x803C8C60 - .rodata start:0x803C8C60 end:0x803D0710 - .data start:0x80415180 end:0x804156F4 - .bss start:0x80456560 end:0x804575C0 - .sdata start:0x804FEDC0 end:0x804FEDD0 - .sbss start:0x804FF8C0 end:0x804FF8C0 - .sdata2 start:0x804FFF40 end:0x804FFF40 - -zAnim.cpp: - .text start:0x80045E3C end:0x80050370 - .rodata start:0x803D0710 end:0x803D1494 - .data start:0x804156F4 end:0x804158D8 - .bss start:0x804575C0 end:0x80457780 - -zAttribSys.cpp: - .text start:0x80050370 end:0x8005C1F8 - .data start:0x804158D8 end:0x80416400 - .bss start:0x80457780 end:0x8045A20C - -zBWare.cpp: - .text start:0x8005C1F8 end:0x80069424 - .rodata start:0x803D1494 end:0x803D3AE4 - .data start:0x80416400 end:0x8041648C - .bss start:0x8045A20C end:0x8045AB34 - -zCamera.cpp: - .text start:0x80069424 end:0x80083604 - .rodata start:0x803D3AE4 end:0x803D3F50 - .data start:0x8041648C end:0x80417108 - .bss start:0x8045AB34 end:0x8045B0F8 - -zComms.cpp: - .text start:0x80083604 end:0x80083604 - -zDebug.cpp: - .text start:0x80083604 end:0x80083680 - .bss start:0x8045B0F8 end:0x8045B108 - -zDynamics.cpp: - .text start:0x80083680 end:0x8008A7B0 - .rodata start:0x803D3F50 end:0x803D5E28 - .bss start:0x8045B108 end:0x8045B110 - -zEagl4Anim.cpp: - .text start:0x8008A7B0 end:0x800A6128 - .rodata start:0x803D5E28 end:0x803D8A6C - .data start:0x80417108 end:0x80417634 - .bss start:0x8045B110 end:0x8045B268 - -zEAXSound.cpp: - .text start:0x800A6128 end:0x800CAF5C - .rodata start:0x803D8A6C end:0x803DD468 - .data start:0x80417634 end:0x80417F60 - .bss start:0x8045B268 end:0x8045DE60 - -zEAXSound2.cpp: - .text start:0x800CAF5C end:0x800F486C - .rodata start:0x803DD468 end:0x803DF51C - .data start:0x80417F60 end:0x8041AB34 - .bss start:0x8045DE60 end:0x80464F28 - -zEcstasy.cpp: - .text start:0x800F486C end:0x80118248 - .rodata start:0x803DF51C end:0x803E4290 - .data start:0x8041AB34 end:0x8041B5E4 - .bss start:0x80464F28 end:0x804729E0 - -zFe.cpp: - .text start:0x80118248 end:0x80142AC0 - .rodata start:0x803E4290 end:0x803EA794 - .data start:0x8041B5E4 end:0x8041BE08 - .bss start:0x804729E0 end:0x80472FBC - -zFe2.cpp: - .text start:0x80142AC0 end:0x8017FE2C - .rodata start:0x803EA794 end:0x803EB9FC - .data start:0x8041BE08 end:0x8041D060 - .bss start:0x80472FBC end:0x80473CD0 - -zFEng.cpp: - .text start:0x8017FE2C end:0x80191550 - .data start:0x8041D060 end:0x8041D1DC - .bss start:0x80473CD0 end:0x80473E74 - -zFoundation.cpp: - .text start:0x80191550 end:0x8019A1F0 - .rodata start:0x803EB9FC end:0x803ED2FC - .data start:0x8041D1DC end:0x8041D31C - .bss start:0x80473E74 end:0x80473EF8 - -zGameModes.cpp: - .text start:0x8019A1F0 end:0x8019A26C - .bss start:0x80473EF8 end:0x80473F00 - -zGameplay.cpp: - .text start:0x8019A26C end:0x801BCB0C - .rodata start:0x803ED2FC end:0x803EEF24 - .data start:0x8041D31C end:0x8041D5A4 - .bss start:0x80473F00 end:0x80473FE0 - -zLua.cpp: - .text start:0x801BCB0C end:0x801D3B44 - .rodata start:0x803EEF24 end:0x803F3EB8 - .data start:0x8041D5A4 end:0x8041D7EC - .bss start:0x80473FE0 end:0x80474024 - -zMain.cpp: - .text start:0x801D3B44 end:0x801FAB64 - .rodata start:0x803F3EB8 end:0x803F6638 - .data start:0x8041D7EC end:0x8041E598 - .bss start:0x80474024 end:0x8047FEA4 - -zMisc.cpp: - .text start:0x801FAB64 end:0x8020DEA0 - .rodata start:0x803F6638 end:0x803F9804 - .data start:0x8041E598 end:0x8041EFE8 - .bss start:0x8047FEA4 end:0x804801A4 - -zMiscSmall.cpp: - .text start:0x8020DEA0 end:0x8020DF1C - .bss start:0x804801A4 end:0x804801AC - -zMission.cpp: - .text start:0x8020DF1C end:0x8020DF98 - .bss start:0x804801AC end:0x804801D8 - -zPhysics.cpp: - .text start:0x8020DF98 end:0x80231A64 - .rodata start:0x803F9804 end:0x803FAB04 - .data start:0x8041EFE8 end:0x8041F358 - .bss start:0x804801D8 end:0x8048A1A8 - -zPhysicsBehaviors.cpp: - .text start:0x80231A64 end:0x8026B4F4 - .rodata start:0x803FAB04 end:0x80403B1C - .data start:0x8041F358 end:0x8041F7F4 - .bss start:0x8048A1A8 end:0x8048BD18 - -zPlatform.cpp: - .text start:0x8026B4F4 end:0x80272870 - .rodata start:0x80403B1C end:0x804074A4 - .data start:0x8041F7F4 end:0x80435814 - .bss start:0x8048BD18 end:0x80496A20 - -zRender.cpp: - .text start:0x80272870 end:0x802728EC - .bss start:0x80496A20 end:0x80496A28 - -zSim.cpp: - .text start:0x802728EC end:0x8028A17C - .data start:0x80435814 end:0x80435970 - .bss start:0x80496A28 end:0x80498974 - -zSpeech.cpp: - .text start:0x8028A17C end:0x802B5C44 - .rodata start:0x804074A4 end:0x8040DCC4 - .data start:0x80435970 end:0x80435FFC - .bss start:0x80498974 end:0x8049A5A4 - -zTrack.cpp: - .text start:0x802B5C44 end:0x802C5544 - .data start:0x80435FFC end:0x804374BC - .bss start:0x8049A5A4 end:0x804A5E60 - -zWorld.cpp: - .text start:0x802C5544 end:0x802ECA00 - .rodata start:0x8040DCC4 end:0x8040E370 - .data start:0x804374BC end:0x80438F80 - .bss start:0x804A5E60 end:0x804AA598 - -zWorld2.cpp: - .text start:0x802ECA00 end:0x8030EB08 - .rodata start:0x8040E370 end:0x8040FBB8 - .data start:0x80438F80 end:0x804390F0 - .bss start:0x804AA598 end:0x804AAA88 - -zOnline.cpp: - .over start:0x803A41B8 end:0x803A4294 - .bss start:0x804AAA88 end:0x804AAA90 - -zFeOverlay.cpp: - .over start:0x803A4294 end:0x803C8B60 - .data start:0x804390F0 end:0x804394D0 - .bss start:0x804AAA90 end:0x804B4DE8 - -D:/DOCUME~1/tom/LOCALS~1/Temp/crt2D1.tmp: - .data start:0x804394D0 end:0x804397D4 - -D:/DOCUME~1/tom/LOCALS~1/Temp/ppc2D2.tmp: - .text start:0x8030EB08 end:0x80310C58 - .bss start:0x804B4DE8 end:0x804B4F54 - -D:/DOCUME~1/tom/LOCALS~1/Temp/fil2D3.tmp: - .text start:0x80310C58 end:0x80311414 - -D:/DOCUME~1/tom/LOCALS~1/Temp/pro2D4.tmp: - .text start:0x80311414 end:0x80311DA8 - -inituser.c: - -D:/DOCUME~1/tom/LOCALS~1/Temp/pro2D9.tmp: - -D:/DOCUME~1/tom/LOCALS~1/Temp/tea2DA.tmp: - -FSasync.c: - .text start:0x80311DA8 end:0x803125E0 - .data start:0x804397D4 end:0x804397E0 - .bss start:0x804B4F54 end:0x804B4FC8 - -sndvd.c: - .text start:0x803125E0 end:0x80312C10 - .data start:0x804397E0 end:0x804397E8 - .bss start:0x804B4FC8 end:0x804B53A0 - -debug.c: - -ctype_.c: - -errno.c: - .text start:0x80312C10 end:0x80312C18 - -impure.c: - .data start:0x804397E8 end:0x80439AEC - -fclose.c: - .text start:0x80312C18 end:0x80312CD0 - -fflush.c: - .text start:0x80312CD0 end:0x80312DC4 - -fopen.c: - .text start:0x80312DC4 end:0x80313158 - .bss start:0x804B53A0 end:0x804B53AC - -fprintf.c: - .text start:0x80313158 end:0x803131EC - -fread.c: - -fseek.c: - .text start:0x803131EC end:0x803135D0 - -fwalk.c: - .text start:0x803135D0 end:0x80313650 - -makebuf.c: - .text start:0x80313650 end:0x803137D4 - -printf.c: - -refill.c: - .text start:0x803137D4 end:0x80313A40 - -rget.c: - -sn_buf.cpp: - .data start:0x80439AEC end:0x80439B3C - -sprintf.c: - -stdio.c: - .text start:0x80313A40 end:0x80313BA0 - -ungetc.c: - -vsprintf.c: - .text start:0x80313BA0 end:0x80313C70 - -atexit.c: - .text start:0x80313C70 end:0x80313D08 - -atoi.c: - -qsort.c: - .text start:0x80313D08 end:0x803146B8 - -rand.c: - -sn_malloc.c: - .text start:0x803146B8 end:0x80314730 - -memcmp.c: - .text start:0x80314730 end:0x803147C0 - -memcpy.c: - .text start:0x803147C0 end:0x80314864 - -memmove.c: - .text start:0x80314864 end:0x80314950 - -memset.c: - .text start:0x80314950 end:0x803149E4 - -strcasecmp.c: - .text start:0x803149E4 end:0x80314A60 - -strcat.c: - .text start:0x80314A60 end:0x80314AF0 - -strchr.c: - .text start:0x80314AF0 end:0x80314B8C - -strcmp.c: - .text start:0x80314B8C end:0x80314C34 - -strcoll.c: - .text start:0x80314C34 end:0x80314C54 - -strcpy.c: - .text start:0x80314C54 end:0x80314CD8 - -strcspn.c: - .text start:0x80314CD8 end:0x80314D48 - -strerror.c: - -strlen.c: - .text start:0x80314D48 end:0x80314DB4 - -strncasecmp.c: - .text start:0x80314DB4 end:0x80314E60 - -strncat.c: - .text start:0x80314E60 end:0x80314F0C - -strncmp.c: - .text start:0x80314F0C end:0x80314FEC - -strncpy.c: - .text start:0x80314FEC end:0x803150B8 - -strstr.c: - .text start:0x803150B8 end:0x803152A0 - -u_strerr.c: - -C:/DOCUME~1/DAVE~1.DOM/LOCALS~1/Temp/set671.tmp: - -vfprintf.c: - .text start:0x803152A0 end:0x803173D0 - .rodata start:0x8040FBB8 end:0x8040FC48 - .data start:0x80439B3C end:0x80439B68 - .bss start:0x804B53AC end:0x804B54D0 - .sdata start:0x804FEDD0 end:0x804FEDD8 - -vfprintf.c_1: - .text start:0x803173D0 end:0x80318B24 - .rodata start:0x8040FC48 end:0x8040FCD8 - .bss start:0x804B54D0 end:0x804B5550 - .sdata start:0x804FEDD8 end:0x804FEDE0 - -strtol.c: - -strtod2d.c: - .text start:0x80318B24 end:0x80318E50 - .data start:0x80439B68 end:0x80439BB0 - .sdata start:0x804FEDE0 end:0x804FF3B4 - -_tolower.c: - .text start:0x80318E50 end:0x80318E6C - -isdigit.c: - .text start:0x80318E6C end:0x80318E80 - -isspace.c: - .text start:0x80318E80 end:0x80318EC4 - -locale.c: - .rodata start:0x8040FCD8 end:0x8040FD40 - -math_support.c: - .text start:0x80318EC4 end:0x803197D8 - .rodata start:0x8040FD40 end:0x8040FED0 - -closer.c: - .text start:0x803197D8 end:0x80319828 - -fstatr.c: - .text start:0x80319828 end:0x80319880 - -lseekr.c: - .text start:0x80319880 end:0x803198D8 - -openr.c: - .text start:0x803198D8 end:0x80319934 - -readr.c: - .text start:0x80319934 end:0x8031998C - -sbrkr.c: - -writer.c: - .text start:0x8031998C end:0x803199E4 - -flags.c: - .text start:0x803199E4 end:0x80319A80 - -mbtowc_r.c: - .text start:0x80319A80 end:0x80319D9C - .data start:0x80439BB0 end:0x80439F18 - -memchr.c: - .text start:0x80319D9C end:0x80319F24 - -libgcc2.c: - .bss start:0x804B5550 end:0x804B5558 - -libgcc2.c_1: - .text start:0x80319F24 end:0x80319F64 - -libgcc2.c_2: - .text start:0x80319F64 end:0x80319FA4 - -libgcc2.c_3: - .text start:0x80319FA4 end:0x80319FE0 - -libgcc2.c_4: - .text start:0x80319FE0 end:0x8031A55C - .sdata2 start:0x804FFF40 end:0x80500040 - -libgcc2.c_5: - -libgcc2.c_6: - .text start:0x8031A55C end:0x8031A60C - -libgcc2.c_7: - .text start:0x8031A60C end:0x8031A64C - -libgcc2.c_8: - .text start:0x8031A64C end:0x8031AB80 - .sdata2 start:0x80500040 end:0x80500140 - -libgcc2.c_9: - .text start:0x8031AB80 end:0x8031ABA0 - -libgcc2.c_10: - .text start:0x8031ABA0 end:0x8031B084 - .sdata2 start:0x80500140 end:0x80500240 - -libgcc2.c_11: - .text start:0x8031B084 end:0x8031B51C - .sdata2 start:0x80500240 end:0x80500340 - -libgcc2.c_12: - .text start:0x8031B51C end:0x8031B558 - -e_acos.c: - -e_log.c: - -e_pow.c: - .text start:0x8031B558 end:0x8031BD28 - .sdata2 start:0x80500340 end:0x80500370 - -e_sqrt.c: - .text start:0x8031BD28 end:0x8031BF3C - -s_fabs.c: - .text start:0x8031BF3C end:0x8031BF78 - -ef_acos.c: - .text start:0x8031BF78 end:0x8031C1C4 - -ef_asin.c: - .text start:0x8031C1C4 end:0x8031C3F0 - -ef_atan2.c: - .text start:0x8031C3F0 end:0x8031C610 - -ef_cosh.c: - .text start:0x8031C610 end:0x8031C740 - -ef_exp.c: - .text start:0x8031C740 end:0x8031C96C - .sdata2 start:0x80500370 end:0x80500388 - -ef_fmod.c: - .text start:0x8031C96C end:0x8031CB34 - .sdata2 start:0x80500388 end:0x80500390 - -ef_log.c: - .text start:0x8031CB34 end:0x8031CDB4 - -ef_log10.c: - .text start:0x8031CDB4 end:0x8031CEC0 - -ef_pow.c: - .text start:0x8031CEC0 end:0x8031D5B4 - .sdata2 start:0x80500390 end:0x805003A8 - -ef_sinh.c: - .text start:0x8031D5B4 end:0x8031D704 - -ef_sqrt.c: - .text start:0x8031D704 end:0x8031D7FC - -sf_atan.c: - .text start:0x8031D7FC end:0x8031DA0C - .sdata2 start:0x805003A8 end:0x805003F8 - -sf_ceil.c: - .text start:0x8031DA0C end:0x8031DAD0 - -sf_cos.c: - .text start:0x8031DAD0 end:0x8031DBAC - -sf_fabs.c: - .text start:0x8031DBAC end:0x8031DBD0 - -sf_floor.c: - .text start:0x8031DBD0 end:0x8031DC98 - -sf_isnan.c: - .text start:0x8031DC98 end:0x8031DCBC - -sf_sin.c: - .text start:0x8031DCBC end:0x8031DD98 - -sf_tan.c: - .text start:0x8031DD98 end:0x8031DE18 - -sf_tanh.c: - .text start:0x8031DE18 end:0x8031DF28 - -s_scalbn.c: - .text start:0x8031DF28 end:0x8031E07C - -sf_scalbn.c: - .text start:0x8031E07C end:0x8031E198 - -sf_expm1.c: - .text start:0x8031E198 end:0x8031E4BC - -kf_cos.c: - .text start:0x8031E4BC end:0x8031E5A8 - -kf_sin.c: - .text start:0x8031E5A8 end:0x8031E654 - -kf_tan.c: - .text start:0x8031E654 end:0x8031E868 - .sdata2 start:0x805003F8 end:0x8050042C - -ef_rem_pio2.c: - .text start:0x8031E868 end:0x8031EBB8 - .sdata2 start:0x8050042C end:0x805007C4 - -s_copysign.c: - .text start:0x8031EBB8 end:0x8031EC08 - -sf_copysign.c: - .text start:0x8031EC08 end:0x8031EC3C - -kf_rem_pio2.c: - .text start:0x8031EC3C end:0x8031F5D8 - .sdata2 start:0x805007C4 end:0x80500800 - -PPCArch.c: - -allsrc.c: - .text start:0x8031F5D8 end:0x80321960 - .data start:0x80439F18 end:0x80439F40 - .bss start:0x804B5558 end:0x804BA040 - .sbss start:0x804FF8C0 end:0x804FF8D8 - .sdata2 start:0x80500800 end:0x80500828 - -OS.c: - .text start:0x80321960 end:0x80322A14 - .data start:0x80439F40 end:0x8043A138 - .bss start:0x804BA040 end:0x804BA0B0 - .sdata start:0x804FF3B4 end:0x804FF3C8 - .sbss start:0x804FF8D8 end:0x804FF910 - -OSAlarm.c: - .text start:0x80322A14 end:0x803233E0 - .data start:0x8043A138 end:0x8043A330 - .sbss start:0x804FF910 end:0x804FF918 - -OSAlloc.c: - .data start:0x8043A330 end:0x8043A6C8 - .sbss start:0x804FF918 end:0x804FF928 - -OSArena.c: - .sdata start:0x804FF3C8 end:0x804FF3D4 - .sbss start:0x804FF928 end:0x804FF930 - -OSAudioSystem.c: - .data start:0x8043A6C8 end:0x8043A748 - -OSCache.c: - .data start:0x8043A748 end:0x8043A978 - -OSContext.c: - .text start:0x803233E0 end:0x803242FC - .data start:0x8043A978 end:0x8043AB50 - -OSError.c: - .data start:0x8043AB50 end:0x8043AE70 - .bss start:0x804BA0B0 end:0x804BA100 - .sdata start:0x804FF3D4 end:0x804FF3D8 - -OSExec.c: - .text start:0x803242FC end:0x80324C5C - .data start:0x8043AE70 end:0x8043AE80 - .sdata start:0x804FF3D8 end:0x804FF3E0 - .sbss start:0x804FF930 end:0x804FF938 - -OSFont.c: - .text start:0x80324C5C end:0x8032634C - .data start:0x8043AE80 end:0x8043B990 - .sdata start:0x804FF3E0 end:0x804FF3E8 - .sbss start:0x804FF938 end:0x804FF948 - .sdata2 start:0x80500828 end:0x80500830 - -OSInterrupt.c: - .text start:0x8032634C end:0x803263B4 - .data start:0x8043B990 end:0x8043B9C0 - .sbss start:0x804FF948 end:0x804FF960 - -OSLink.c: - .data start:0x8043B9C0 end:0x8043BA10 - -OSMemory.c: - .text start:0x803263B4 end:0x80326A88 - .data start:0x8043BA10 end:0x8043BA20 - -OSMutex.c: - -OSReboot.c: - .sbss start:0x804FF960 end:0x804FF968 - -OSReset.c: - .text start:0x80326A88 end:0x8032718C - .data start:0x8043BA20 end:0x8043BA70 - .sbss start:0x804FF968 end:0x804FF978 - -OSResetSW.c: - .sbss start:0x804FF978 end:0x804FF998 - -OSRtc.c: - .text start:0x8032718C end:0x80327F54 - .bss start:0x804BA100 end:0x804BA158 - -OSSync.c: - .text start:0x80327F54 end:0x80327FD8 - -OSThread.c: - .text start:0x80327FD8 end:0x80329424 - .data start:0x8043BA70 end:0x8043C280 - .bss start:0x804BA158 end:0x804BAB60 - .sdata start:0x804FF3E8 end:0x804FF3F8 - .sbss start:0x804FF998 end:0x804FF9B0 - -OSTime.c: - .data start:0x8043C280 end:0x8043C2E0 - -OSUtf.c: - .data start:0x8043C2E0 end:0x8044D520 - -__ppc_eabi_init.cpp: - .text start:0x80329424 end:0x8032A8FC - -db.c: - .data start:0x8044D520 end:0x8044D538 - -mtx.c: - .sdata start:0x804FF3F8 end:0x804FF400 - .sdata2 start:0x80500830 end:0x80500850 - -mtxvec.c: - -mtx44.c: - .data start:0x8044D538 end:0x8044D548 - .sdata2 start:0x80500850 end:0x80500870 - -vec.c: - .sdata2 start:0x80500870 end:0x80500898 - -dvdfs.c: - .text start:0x8032A8FC end:0x8032A92C - .data start:0x8044D548 end:0x8044D938 - .sdata start:0x804FF400 end:0x804FF40C - .sbss start:0x804FF9B0 end:0x804FF9D0 - -dvd.c: - .text start:0x8032A92C end:0x8032D2AC - .data start:0x8044D938 end:0x8044DAC0 - .bss start:0x804BAB60 end:0x804BABF8 - .sdata start:0x804FF40C end:0x804FF428 - .sbss start:0x804FF9D0 end:0x804FFA30 - -dvdqueue.c: - .data start:0x8044DAC0 end:0x8044DC28 - .bss start:0x804BABF8 end:0x804BAC18 - .sdata start:0x804FF428 end:0x804FF468 - -dvderror.c: - .text start:0x8032D2AC end:0x8032D56C - .data start:0x8044DC28 end:0x8044DC70 - -dvdidutils.c: - -dvdFatal.c: - .data start:0x8044DC70 end:0x8044E020 - .sbss start:0x804FFA30 end:0x804FFA38 - .sdata2 start:0x80500898 end:0x805008A0 - -fstload.c: - .text start:0x8032D56C end:0x8032DBC0 - .data start:0x8044E020 end:0x8044E090 - .bss start:0x804BAC18 end:0x804BAC88 - .sdata start:0x804FF468 end:0x804FF478 - .sbss start:0x804FFA38 end:0x804FFA48 - -dvdlow.c: - .text start:0x8032DBC0 end:0x8032FFAC - .bss start:0x804BAC88 end:0x804BAD58 - .sdata start:0x804FF478 end:0x804FF484 - .sbss start:0x804FFA48 end:0x804FFA90 - -vi.c: - .text start:0x8032FFAC end:0x80330468 - .data start:0x8044E090 end:0x8044E478 - .bss start:0x804BAD58 end:0x804BAEA0 - .sdata start:0x804FF484 end:0x804FF494 - .sbss start:0x804FFA90 end:0x804FFB00 - -DEMOPad.c: - .data start:0x8044E478 end:0x8044E488 - .bss start:0x804BAEA0 end:0x804BAED0 - -Padclamp.c: - .text start:0x80330468 end:0x80331A64 - .rodata start:0x8040FED0 end:0x8041045C - .sdata2 start:0x805008A0 end:0x805008C4 - -Pad.c: - .text start:0x80331A64 end:0x80332834 - .data start:0x8044E488 end:0x8044E4E0 - .bss start:0x804BAED0 end:0x804BAF20 - .sdata start:0x804FF494 end:0x804FF4D0 - .sbss start:0x804FFB00 end:0x804FFB30 - -ai.c: - .text start:0x80332834 end:0x80332C54 - .data start:0x8044E4E0 end:0x8044E528 - .sbss start:0x804FFB30 end:0x804FFB70 - -ar.c: - .text start:0x80332C54 end:0x803344F0 - .data start:0x8044E528 end:0x8044E570 - .sbss start:0x804FFB70 end:0x804FFB90 - -CARDMount.c: - .text start:0x803344F0 end:0x8033662C - .data start:0x8044E570 end:0x8044E5B0 - -CARDNet.c: - -CARDBios.c: - .text start:0x8033662C end:0x80336698 - .data start:0x8044E5B0 end:0x8044E620 - .bss start:0x804BAF20 end:0x804BB160 - .sbss start:0x804FFB90 end:0x804FFBA8 - -CARDUnlock.c: - .text start:0x80336698 end:0x803378F8 - .data start:0x8044E620 end:0x8044E780 - .sdata start:0x804FF4D0 end:0x804FF4E0 - -CARDRdwr.c: - .text start:0x803378F8 end:0x80337B90 - -CARDBlock.c: - .text start:0x80337B90 end:0x80337F94 - -CARDDir.c: - .text start:0x80337F94 end:0x803383A0 - -CARDCheck.c: - .text start:0x803383A0 end:0x80339CA8 - -CARDStatEx.c: - -CARDOpen.c: - -GXInit.c: - .text start:0x80339CA8 end:0x8033B650 - .data start:0x8044E780 end:0x8044E9C0 - .bss start:0x804BB160 end:0x804BB790 - .sbss start:0x804FFBA8 end:0x804FFBC0 - .sdata2 start:0x805008C4 end:0x805008E8 - -GXFifo.c: - .text start:0x8033B650 end:0x8033D068 - .sbss start:0x804FFBC0 end:0x804FFBE0 - -GXAttr.c: - .data start:0x8044E9C0 end:0x8044EC38 - .sdata start:0x804FF4E0 end:0x804FF4F0 - -GXMisc.c: - .text start:0x8033D068 end:0x8033E510 - .data start:0x8044EC38 end:0x8044EE28 - .sbss start:0x804FFBE0 end:0x804FFBF8 - -GXGeometry.c: - -GXFrameBuf.c: - .sdata2 start:0x805008E8 end:0x805008F8 - -GXLight.c: - .data start:0x8044EE28 end:0x8044EE48 - .sdata2 start:0x805008F8 end:0x80500940 - -GXTexture.c: - .text start:0x8033E510 end:0x80341AB4 - .data start:0x8044EE48 end:0x8044F160 - .sdata start:0x804FF4F0 end:0x804FF53C - .sdata2 start:0x80500940 end:0x80500978 - -GXBump.c: - .sdata2 start:0x80500978 end:0x80500990 - -GXTev.c: - .data start:0x8044F160 end:0x8044F1D8 - -GXPixel.c: - .data start:0x8044F1D8 end:0x8044F254 - .sdata2 start:0x80500990 end:0x805009F0 - -GXDisplayList.c: - .bss start:0x804BB790 end:0x804BBD68 - .sbss start:0x804FFBF8 end:0x804FFC00 - -GXTransform.c: - .sdata2 start:0x805009F0 end:0x00000000 - -GXPerf.c: - .data start:0x8044F254 end:0x8044F340 - -EXIBios.c: - .text start:0x80341AB4 end:0x80343490 - .data start:0x8044F340 end:0x8044F450 - .bss start:0x804BBD68 end:0x804BBE28 - .sdata start:0x804FF53C end:0x804FF574 - .sbss start:0x804FFC00 end:0x804FFC08 - -EXIUart.c: - .text start:0x80343490 end:0x80343AA4 - .sbss start:0x804FFC08 end:0x804FFC18 - -SIBios.c: - .text start:0x80343AA4 end:0x803454B0 - .data start:0x8044F450 end:0x8044F568 - .bss start:0x804BBE28 end:0x804BC0C8 - .sdata start:0x804FF574 end:0x804FF588 - .sbss start:0x804FFC18 end:0x804FFC28 - -SISamplingRate.c: - .data start:0x8044F568 end:0x8044F600 - .sbss start:0x804FFC28 end:0x804FFC30 - -SISteering.c: - .text start:0x803454B0 end:0x80345564 - .data start:0x8044F600 end:0x8044F610 - .sbss start:0x804FFC30 end:0x804FFC40 - -SISteeringXfer.c: - .text start:0x80345564 end:0x803459FC - -SISteeringAuto.c: - .text start:0x803459FC end:0x80346338 - .sbss start:0x804FFC40 end:0x804FFC48 - -DebuggerDriver.c: - .text start:0x80346338 end:0x803465D0 - .sdata start:0x804FF588 end:0x804FF590 - .sbss start:0x804FFC48 end:0x804FFC60 - -AmcExi2Comm.c: - .text start:0x803465D0 end:0x803471E4 - .data start:0x8044F610 end:0x8044F754 - .sdata start:0x804FF590 end:0x804FF598 - .sbss start:0x804FFC60 end:0x804FFC80 - -AmcExi.c: - .text start:0x803471E4 end:0x803472B4 - .bss start:0x804BC0C8 end:0x804BD904 - .sdata start:0x804FF598 end:0x804FF5A0 - -avplayer.cpp: - .text start:0x803472B4 end:0x80348334 - -avsubtitle.cpp: - -audioplayer.cpp: - .text start:0x80348334 end:0x80348640 - -bigyuvswizzler.cpp: - .text start:0x80348640 end:0x80348EE4 - -bigswizzler.cpp: - .text start:0x80348EE4 end:0x8034939C - -rcmpbase.cpp: - .text start:0x8034939C end:0x8034983C - -rcmp_vp6_codec.cpp: - .text start:0x8034983C end:0x8034A348 - -rcmp_vp6_codec_chunk_types.cpp: - .text start:0x8034A348 end:0x8034A390 - -rcmp_mad_codec.cpp: - .text start:0x8034A390 end:0x8034ADB0 - -rcmp_mad_codec_chunk_types.cpp: - .text start:0x8034ADB0 end:0x8034ADE4 - .rodata start:0x8041045C end:0x80410468 - -maddec.cpp: - .text start:0x8034ADE4 end:0x8034B900 - .rodata start:0x80410468 end:0x80411358 - .bss start:0x804BD904 end:0x804BDC04 - .sbss start:0x804FFC80 end:0x804FFF40 - -maddeca.cpp: - .text start:0x8034B900 end:0x8034BAC4 - .rodata start:0x80411358 end:0x804114A8 - -madidct.cpp: - .text start:0x8034BAC4 end:0x8034C0A4 - .bss start:0x804BDC04 end:0x804BDD04 - -allocator.cpp: - .text start:0x8034C0A4 end:0x8034C160 - .sdata start:0x804FF5A0 end:0x804FF5B0 - -pb_globals.c: - .text start:0x8034C160 end:0x8034C4E4 - .bss start:0x804BDD04 end:0x804BE104 - -postproc.c: - .text start:0x8034C4E4 end:0x8034D1A8 - -quantize.c: - .text start:0x8034D1A8 end:0x8034DEC8 - .rodata start:0x804114A8 end:0x804119D0 - -simpledeblocker.c: - .rodata start:0x804119D0 end:0x80411AF4 - -vfwpbdll_if.c: - .text start:0x8034DEC8 end:0x8034E180 - -vputil.c: - .text start:0x8034E180 end:0x8034E9F4 - .data start:0x8044F754 end:0x80450094 - .bss start:0x804BE104 end:0x804BE56C - -doptsystemdependant.c: - .text start:0x8034E9F4 end:0x8034EB4C - -DSystemDependant.c: - .text start:0x8034EB4C end:0x8034EB64 - -uoptsystemdependant.c: - .text start:0x8034EB64 end:0x8034ED68 - -duck_mem.cpp: - -boolhuff.c: - -borders.c: - .text start:0x8034ED68 end:0x8034F154 - -clamp.c: - .text start:0x8034F154 end:0x8034F21C - -deblock.c: - .text start:0x8034F21C end:0x80351AC0 - -decodembs.c: - .text start:0x80351AC0 end:0x8035305C - .rodata start:0x80411AF4 end:0x80412108 - -decodemode.c: - .text start:0x8035305C end:0x80353564 - -decodemv.c: - .text start:0x80353564 end:0x80353734 - -DeInterlace.c: - .text start:0x80353734 end:0x803537FC - -dering.c: - .text start:0x803537FC end:0x80354FF0 - -DFrameR.c: - .text start:0x80354FF0 end:0x803556B0 - -FrameIni.c: - .text start:0x803556B0 end:0x80355CA8 - .rodata start:0x80412108 end:0x80412168 - -Huffman.c: - .text start:0x80355CA8 end:0x8035645C - -idctpart.c: - .rodata start:0x80412168 end:0x80412484 - -loopfilter.c: - .text start:0x8035645C end:0x80356920 - -reconstruct.c: - .text start:0x80356920 end:0x80356BB0 - -scale.c: - .text start:0x80356BB0 end:0x80357864 - -TokenEntropy.c: - .text start:0x80357864 end:0x80357928 - .rodata start:0x80412484 end:0x804124FC - -criticalpath.c: - .text start:0x80357928 end:0x8035A830 - .rodata start:0x804124FC end:0x80415180 - .data start:0x80450094 end:0x804502C4 - .bss start:0x804BE56C end:0x804FEDC0 - .sdata start:0x804FF5B0 end:0x804FF8C0 - -recon.c: - .text start:0x8035A830 end:0x8035A9B0 - -s3dlow.c: - .text start:0x8035A9B0 end:0x8035AA7C - -saems.c: - .text start:0x8035AA7C end:0x8035D4A0 - .data start:0x804502C4 end:0x80456560 - -saemsamb.c: - .text start:0x8035D4A0 end:0x8035D6BC - -saemsmbf.c: - .text start:0x8035D6BC end:0x8035DCA4 - -saemsmbm.c: - .text start:0x8035DCA4 end:0x8035DFE4 - -saemstimupdt.c: - .text start:0x8035DFE4 end:0x803A41B8 - -salloc.c: - -sattrdef.c: - -sbadd.c: - -sballoc.c: - -sbasync.c: - -sbasyncm.c: - -sbhdrcpy.c: - -sbhdrsze.c: - -sbplay.c: - -sbremove.c: - -sbvalid.c: - -scheckpo.c: - -sclnt100.c: - -sctrldry.cpp: - -sdata.c: - -sfxlevel.c: - -slowpass.c: - -smemcpy.cpp: - -smemdis.c: - -smemlmt.c: - -smemlu.c: - -smemman.c: - -sndfxbus.cpp: - -spatkey.c: - -spitch.c: - -spktplay.c: - -splysdef.c: - -spoutlat.c: - -srandom.c: - -srender.c: - -sresopat.c: - -sserver.c: - -ssine.c: - -sst.c: - -sst3dpos.c: - -sstautov.c: - -sstcrtap.c: - -sstfxlev.c: - -sstgetrp.c: - -ssthold.c: - -sstlowp.c: - -sstop.c: - -sstovrhd.c: - -sstpmult.c: - -sstqmem.c: - -sstqreqi.c: - -sstrmdry.cpp: - -sstrstat.c: - -sstsetgl.c: - -sststat.c: - -ssttmul.c: - -sstvol.c: - -ssys.cpp: - -ssysinit.c: - -ssysserv.c: - -ssysveccsismutex.cpp: - -stagpat.c: - -stimemul.c: - -stpparse.c: - -svecreal6.cpp: - -svol.c: - -lbmpeg.cpp: - -mpeghufftables.cpp: - -mpegl3base.cpp: - -sdfx.c: - -sdspmix.c: - -snddrv.c: - -sfxrevc.c: - -slinkmix.c: - -smixer.c: - -smixfilt.c: - -smixfram.c: - -smixhip.c: - -smixlowp.c: - -smixptch.c: - -smixtmul.c: - -smixvec.c: - -stretch.c: - -sx87d16.c: - -author.cpp: - -satospkr.c: - -sclcptch.c: - -sctlfilt.c: - -sdownmix.cpp: - -sexithndl.c: - -sformat.c: - -sgetdata.c: - -sgettag.c: - -slib.c: - -slinklst.c: - -smemhigh.cpp: - -SNDI_cos.c: - -SNDI_sin.c: - -soutputmap.cpp: - -sover.c: - -spantoaz.c: - -spat2hdr.c: - -spktctoh.c: - -sprofvoc.c: - -sreallocbuf.cpp: - -srrange.c: - -coda.cpp: - -setmemcpy.cpp: - -saramman.c: - -sfamplf.c: - -sfbpffir8.c: - -sfecho.c: - -sfft24.c: - -sfhpffir8.c: - -sfilter.c: - -sfir.c: - -sfir8.c: - -sflpf.c: - -sflpffir8.c: - -sfmixer.c: - -sfreson.c: - -sfrsf.c: - -sfsplit.c: - -sfsrc.c: - -sinit16.c: - -sinitut.c: - -sinitxa.c: - -smixc.c: - -supf.c: - -suplf.c: - -supmutf.c: - -supmutlf.c: - -supmutpf.c: - -suppf.c: - -supxaf.cpp: - -supxalf.cpp: - -supxapf.cpp: - -sgparse.cpp: - -SNDI_mult16.c: - -SNDI_root1x.c: - -eaxadecf.cpp: - -mtdecf.cpp: - -scrsfl.c: - -SNDI_findprime.c: - -csis.cpp: - -pathcontrol.cpp: - -pathevent.cpp: - -pathinit.cpp: - -pathreal.cpp: - -pathreal6.cpp: - -pathserv.cpp: - -pathsnd.cpp: - -pathtrack.cpp: - -pathvol.cpp: - -author.cpp_1: - -pathaction.cpp: - -pathbank.cpp: - -pathdebug.cpp: - -pathnode.cpp: - -pathrand.cpp: - -spchbank.c: - -spchdata.c: - -spchevnt.c: - -spchinit.c: - -spchpick.c: - -spchrand.c: - -spchrslv.c: - -spchrule.c: - -spchsamp.c: - -sptick.c: - -sputil.c: - -spchcsis.cpp: - -author.cpp_2: - -filesys_c.cpp: - -filesys_cc.cpp: - -filesys.cpp: - -filesysopts.cpp: - -hlafile.cpp: - -hlsfile.cpp: - -syncfile.cpp: - -device.cpp: - -dvd_device.cpp: - -hd_device.cpp: - -bigfile.cpp: - -inittmr.cpp: - -signals.cpp: - -threads.cpp: - -timerthread.cpp: - -exit.cpp: - -mutex.cpp: - -systask.cpp: - -systemvars.cpp: - -timer.cpp: - -initvblt.cpp: - -oldfontkern.cpp: - -oldfontchar.cpp: - -oldfontcreate.cpp: - -oldfontdriver.cpp: - -shpcreate.cpp: - -txldepthto.cpp: - -allocator.cpp_1: - -shpdestroy.cpp: - -abortmsg.cpp: - -shpelement.cpp: - -shpsize.cpp: - -shpclone.cpp: - -memcard_interface.cpp: - -memcard_interface_impl.cpp: - -memcard_memvectors.cpp: - -memcard_taskmanager.cpp: - -gc_memcard_interface_impl.cpp: - -gc_memcard_taskmanager.cpp: - -locale.cpp: - -memcard_utilities.cpp: - -gc_driver.cpp: - -gc_interface.cpp: - -gc_public.cpp: - -gc_tasks.cpp: - -gc_trctasks.cpp: - -interfaceimp.cpp: - -gc_blockcalculator.cpp: - -memcopy.cpp: - -memfill.cpp: - -locale.cpp_1: - -memclear.cpp: - -abortmsg.cpp_1: - -debugger.cpp: - -printvstr.cpp: - -printstr.cpp: - -printdrv.cpp: - -gc_effect.cpp: - -effectimp.cpp: - -interface.cpp: - -memvectors.cpp: - -gc_device.cpp: - -gc_interface.cpp_1: - -gc_pad.cpp: - -interfaceimp.cpp_1: - -device.cpp_1: - -effect.cpp: - -event.cpp: - -eventqueue.cpp: - -itimer.cpp: - -VM.c: - -VMPageReplacement.c: - -VMMapping.c: - -dummy.c: - -tors.c: - -tolower.c: - -vprintf.c: - -wprintf.c: - -bsearch.c: - -strrchr.c: - -wcscat.c: - -wcscpy.c: - -wcslen.c: - -VFPRINTF2.C: - -VFPRINTF2.C_1: - -wmemchr.c: - -wmemcpy.c: - -eabi.asm: - -e_exp.c: - -s_sin.c: - -k_cos.c: - -k_sin.c: - -e_rem_pio2.c: - -k_rem_pio2.c: - -s_floor.c: - -OSFatal.c: - -OSMessage.c: - -arq.c: - -AX.c: - -AXAlloc.c: - -AXAux.c: - -AXCL.c: - -AXOut.c: - -AXSPB.c: - -AXVPB.c: - -AXProf.c: - -AXComp.c: - -DSPCode.c: - -dsp.c: - -dsp_debug.c: - -dsp_task.c: - -CARDFormat.c: - -CARDCreate.c: - -CARDRead.c: - -CARDWrite.c: - -CARDDelete.c: - -CARDStat.c: - -CARDRename.c: - -eathread_semaphore.cpp: - -eathread.cpp: - -eathread_thread.cpp: - -sbpatinf.c: - -sgetpvol.c: - -sstgetpv.c: - -stimerem.c: - -VMBase.c: - -OSSemaphore.c: diff --git a/config_temp/symbols.txt b/config_temp/symbols.txt deleted file mode 100644 index 4a489daf6..000000000 --- a/config_temp/symbols.txt +++ /dev/null @@ -1,25571 +0,0 @@ -__start = .init:0x80003100; // type:label scope:global -__init_vm = .init:0x80003464; // type:label scope:global -__premain = .init:0x80003464; // type:label scope:global -__init_hardware = .init:0x80003468; // type:function size:0x24 scope:global -gcc2_compiled. = .text:0x800034A0; // type:label scope:local -__16AITrafficManagerGQ23Sim5Param = .text:0x800034A0; // type:function size:0x6C4 scope:global -_._16AITrafficManager = .text:0x80003B64; // type:function size:0x2B0 scope:global -Construct__16AITrafficManagerGQ23Sim5Param = .text:0x80003E14; // type:function size:0x9C scope:global -OnQueryVehicleCache__C16AITrafficManagerPC8IVehiclePC13IVehicleCache = .text:0x80003EB0; // type:function size:0x1AC scope:global -OnRemovedVehicleCache__16AITrafficManagerP8IVehicle = .text:0x8000405C; // type:function size:0x4 scope:global -OnAttached__16AITrafficManagerP11IAttachable = .text:0x80004060; // type:function size:0x94 scope:global -OnDetached__16AITrafficManagerP11IAttachable = .text:0x800040F4; // type:function size:0xDC scope:global -NextSpawn__16AITrafficManager = .text:0x800041D0; // type:function size:0x2A4 scope:global -GetAvailableTrafficVehicle__16AITrafficManagerUib = .text:0x80004474; // type:function size:0x244 scope:global -SpawnTraffic__16AITrafficManager = .text:0x800046B8; // type:function size:0x3D0 scope:global -NeedsTraffic__C16AITrafficManager = .text:0x80004A88; // type:function size:0xBC scope:global -UpdateDebug__16AITrafficManager = .text:0x80004B44; // type:function size:0x54 scope:global -SetTrafficPattern__16AITrafficManagerUi = .text:0x80004B98; // type:function size:0x13C scope:global -RandomSortTC__FP14ITrafficCenterT0 = .text:0x80004CD4; // type:function size:0x30 scope:local -FindCollisions__C16AITrafficManagerRCQ25UMath7Vector3 = .text:0x80004D04; // type:function size:0x160 scope:global -CheckRace__C16AITrafficManagerRC8WRoadNav = .text:0x80004E64; // type:function size:0xA0 scope:global -FindSpawnPoint__C16AITrafficManagerR8WRoadNav = .text:0x80004F04; // type:function size:0x2BC scope:global -ChoosePattern__16AITrafficManager = .text:0x800051C0; // type:function size:0x204 scope:global -ValidateVehicle__C16AITrafficManagerP8IVehiclef = .text:0x800053C4; // type:function size:0x1E4 scope:global -ComputeDensity__C16AITrafficManager = .text:0x800055A8; // type:function size:0x1E8 scope:global -Update__16AITrafficManagerf = .text:0x80005790; // type:function size:0x168 scope:global -FlushAllTraffic__16AITrafficManagerb = .text:0x800058F8; // type:function size:0x1D8 scope:global -OnTask__16AITrafficManagerP10HSIMTASK__f = .text:0x80005AD0; // type:function size:0x3C scope:global -OnDebugDraw__16AITrafficManager = .text:0x80005B0C; // type:function size:0x4 scope:global -__12AICopManagerGQ23Sim5Param = .text:0x80005B10; // type:function size:0x87C scope:global -_._12AICopManager = .text:0x8000638C; // type:function size:0x3E0 scope:global -Construct__12AICopManagerGQ23Sim5Param = .text:0x8000676C; // type:function size:0x74 scope:global -IsPendingSupportVehicle__C12AICopManagerP8IVehicle = .text:0x800067E0; // type:function size:0x70 scope:global -OnQueryVehicleCache__C12AICopManagerPC8IVehiclePC13IVehicleCache = .text:0x80006850; // type:function size:0x10C scope:global -OnRemovedVehicleCache__12AICopManagerP8IVehicle = .text:0x8000695C; // type:function size:0x94 scope:global -OnAttached__12AICopManagerP11IAttachable = .text:0x800069F0; // type:function size:0x1A4 scope:global -OnDetached__12AICopManagerP11IAttachable = .text:0x80006B94; // type:function size:0x2C4 scope:global -VehicleSpawningEnabled__12AICopManagerb = .text:0x80006E58; // type:function size:0xA8 scope:global -GetAvailableCopVehicleByClass__12AICopManagerG6UCrc32b = .text:0x80006F00; // type:function size:0x1FC scope:global -GetAvailableCopVehicleByName__12AICopManagerPCc = .text:0x800070FC; // type:function size:0x314 scope:global -GetActiveCopVehicleFromOutOfView__12AICopManagerG6UCrc32 = .text:0x80007410; // type:function size:0x238 scope:global -GetPursuitActivity__12AICopManagerP8ISimable = .text:0x80007648; // type:function size:0x198 scope:global -SpawnCop__12AICopManagerRQ25UMath7Vector3T1PCcbT4 = .text:0x800077E0; // type:function size:0x120 scope:global -DoesSpotOverlapCar__FRCQ25UMath7Vector3f = .text:0x80007900; // type:function size:0x170 scope:local -TrySpawnCop__12AICopManagerRCQ212AICopManager15SpawnCopRequest = .text:0x80007A70; // type:function size:0x2F8 scope:global -IsCopSpawnPending__C12AICopManager = .text:0x80007D68; // type:function size:0x58 scope:global -UpdateSpawnRequests__12AICopManager = .text:0x80007DC0; // type:function size:0xCC scope:global -MessageSetAutoSpawnMode__12AICopManagerRC20MSetCopAutoSpawnMode = .text:0x80007E8C; // type:function size:0x4 scope:global -MessageSetCopsEnabled__12AICopManagerRC15MSetCopsEnabled = .text:0x80007E90; // type:function size:0x18 scope:global -MessageForcePursuitStart__12AICopManagerRC18MForcePursuitStart = .text:0x80007EA8; // type:function size:0x3C scope:global -SetAllBustedTimersToZero__12AICopManager = .text:0x80007EE4; // type:function size:0x80 scope:global -MessageBreakerStopCops__12AICopManagerRC16MBreakerStopCops = .text:0x80007F64; // type:function size:0xEC scope:global -ApplyBreakerZones__12AICopManager = .text:0x80008050; // type:function size:0x25C scope:global -SpawnPatrolCar__12AICopManager = .text:0x800082AC; // type:function size:0x14C scope:global -GetSpawnPositionAheadOfTarget__12AICopManagerP8IPursuitRQ25UMath7Vector3T2f = .text:0x800083F8; // type:function size:0x28C scope:global -SpawnPursuitCar__12AICopManagerP8IPursuit = .text:0x80008684; // type:function size:0x1F0 scope:global -rand_point_in_circle__Fv = .text:0x80008874; // type:function size:0x114 scope:global -SpawnPursuitIVehicle__12AICopManagerP8IPursuitP8IVehicle = .text:0x80008988; // type:function size:0x7DC scope:global -SpawnPursuitCarByName__12AICopManagerP8IPursuitPCc = .text:0x80009164; // type:function size:0x8C scope:global -SpawnVehicleBehindTarget__12AICopManagerP8IPursuitP8IVehicle = .text:0x800091F0; // type:function size:0x1EC scope:global -SpawnCopCarNow__12AICopManagerP8IPursuit = .text:0x800093DC; // type:function size:0x60 scope:global -SpawnPursuitHelicopter__12AICopManagerP8IPursuit = .text:0x8000943C; // type:function size:0x2F0 scope:global -PickRoadblockSetup__Ffib = .text:0x8000972C; // type:function size:0x90 scope:global -CreateRoadBlock__12AICopManagerP8IPursuitiP8IVehiclePQ43UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10_4List = .text:0x800097BC; // type:function size:0xFE0 scope:global -RemoveActiveCopVehicle__12AICopManagerP8IVehicle = .text:0x8000A79C; // type:function size:0x178 scope:global -UpdatePatrols__12AICopManager = .text:0x8000A914; // type:function size:0x6F0 scope:global -GetHeavySupportVehicles__12AICopManagerP20GroundSupportRequest = .text:0x8000B004; // type:function size:0x25C scope:global -StartHeavySupport__12AICopManagerP8IPursuitP20GroundSupportRequest = .text:0x8000B260; // type:function size:0x200 scope:global -GetLeaderSupportVehicles__12AICopManagerP20GroundSupportRequest = .text:0x8000B460; // type:function size:0x248 scope:global -StartLeaderSupport__12AICopManagerP8IPursuitP20GroundSupportRequest = .text:0x8000B6A8; // type:function size:0x284 scope:global -UpdateSupportCops__12AICopManagerP8IPursuit = .text:0x8000B92C; // type:function size:0x27C scope:global -PursuitIsEvaded__12AICopManagerP8IPursuit = .text:0x8000BBA8; // type:function size:0x284 scope:global -CommitPursuitDetails__12AICopManagerP8IPursuit = .text:0x8000BE2C; // type:function size:0x2C0 scope:global -IsCopRequestPending__12AICopManager = .text:0x8000C0EC; // type:function size:0x130 scope:global -CanPursueRacers__12AICopManager = .text:0x8000C21C; // type:function size:0x124 scope:global -IsPlayerPursuitActive__12AICopManager = .text:0x8000C340; // type:function size:0x94 scope:global -PlayerPursuitHasCop__C12AICopManager = .text:0x8000C3D4; // type:function size:0xA8 scope:global -UpdatePursuits__12AICopManager = .text:0x8000C47C; // type:function size:0x9D4 scope:global -UpdateRoadBlocks__12AICopManager = .text:0x8000CE50; // type:function size:0x4D4 scope:global -UpdateDebug__12AICopManager = .text:0x8000D324; // type:function size:0x54 scope:global -UpdateCopPriorities__12AICopManageri = .text:0x8000D378; // type:function size:0x468 scope:global -PursueAtHeatLevel__12AICopManageri = .text:0x8000D7E0; // type:function size:0x344 scope:global -KillVehicle__FP8IVehicle = .text:0x8000DB24; // type:function size:0x5C scope:local -ResetCopsForRestart__12AICopManagerb = .text:0x8000DB80; // type:function size:0x86C scope:global -LockoutCops__12AICopManagerb = .text:0x8000E3EC; // type:function size:0x140 scope:global -NoNewPursuitsOrCops__12AICopManager = .text:0x8000E52C; // type:function size:0xC scope:global -OnTask__12AICopManagerP10HSIMTASK__f = .text:0x8000E538; // type:function size:0x90 scope:global -OnDebugDraw__12AICopManager = .text:0x8000E5C8; // type:function size:0x4 scope:global -__16AvoidableManagerGQ23Sim5Param = .text:0x8000E5CC; // type:function size:0xAC scope:global -_._16AvoidableManager = .text:0x8000E678; // type:function size:0x98 scope:global -Construct__16AvoidableManagerGQ23Sim5Param = .text:0x8000E710; // type:function size:0x74 scope:global -OnDebugDraw__16AvoidableManager = .text:0x8000E784; // type:function size:0x20 scope:global -OnTask__16AvoidableManagerP10HSIMTASK__f = .text:0x8000E7A4; // type:function size:0x38 scope:global -__11AIAvoidablePQ33UTL3COM8IUnknown = .text:0x8000E7DC; // type:function size:0xC0 scope:global -_._11AIAvoidable = .text:0x8000E89C; // type:function size:0x1BC scope:global -OnOverLap__11AIAvoidableR11AIAvoidableT1f = .text:0x8000EA58; // type:function size:0xB8 scope:global -DrawAll__11AIAvoidable = .text:0x8000EB10; // type:function size:0x4 scope:global -UpdateAllAvoidables__11AIAvoidablef = .text:0x8000EB14; // type:function size:0xB5C scope:global -Construct__12AIActionNoneP14AIActionParams = .text:0x8000F670; // type:function size:0x6C scope:global -__18AIActionTooDamagedP14AIActionParamsf = .text:0x8000F6DC; // type:function size:0x7C scope:global -OnBehaviorChange__18AIActionTooDamagedRC6UCrc32 = .text:0x8000F758; // type:function size:0x58 scope:global -Construct__18AIActionTooDamagedP14AIActionParams = .text:0x8000F7B0; // type:function size:0x4C scope:global -CanBeAttempted__18AIActionTooDamagedf = .text:0x8000F7FC; // type:function size:0x54 scope:global -BeginAction__18AIActionTooDamagedf = .text:0x8000F850; // type:function size:0x60 scope:global -FinishAction__18AIActionTooDamagedf = .text:0x8000F8B0; // type:function size:0x4 scope:global -Update__18AIActionTooDamagedf = .text:0x8000F8B4; // type:function size:0x158 scope:global -OnDebugDraw__18AIActionTooDamaged = .text:0x8000FA0C; // type:function size:0x4 scope:global -__18AIActionGetUnstuckP14AIActionParamsf = .text:0x8000FA10; // type:function size:0x70 scope:global -OnBehaviorChange__18AIActionGetUnstuckRC6UCrc32 = .text:0x8000FA80; // type:function size:0x58 scope:global -Construct__18AIActionGetUnstuckP14AIActionParams = .text:0x8000FAD8; // type:function size:0x4C scope:global -CanBeAttempted__18AIActionGetUnstuckf = .text:0x8000FB24; // type:function size:0x228 scope:global -FinishAction__18AIActionGetUnstuckf = .text:0x8000FD4C; // type:function size:0x6C scope:global -IsFinished__18AIActionGetUnstuck = .text:0x8000FDB8; // type:function size:0x3C scope:global -Update__18AIActionGetUnstuckf = .text:0x8000FDF4; // type:function size:0x84 scope:global -__15AIActionTrafficP14AIActionParamsf = .text:0x8000FE78; // type:function size:0x2D8 scope:global -_._15AIActionTraffic = .text:0x80010150; // type:function size:0x10C scope:global -Construct__15AIActionTrafficP14AIActionParams = .text:0x8001025C; // type:function size:0x4C scope:global -OnBehaviorChange__15AIActionTrafficRC6UCrc32 = .text:0x800102A8; // type:function size:0x88 scope:global -OnAccident__15AIActionTrafficP10HSIMABLE__RCQ25UMath7Vector3T2 = .text:0x80010330; // type:function size:0x168 scope:global -OnCollision__15AIActionTrafficRCQ33Sim9Collision4Info = .text:0x80010498; // type:function size:0x8C scope:global -IsFinished__15AIActionTraffic = .text:0x80010524; // type:function size:0x98 scope:global -CanBeAttempted__15AIActionTrafficf = .text:0x800105BC; // type:function size:0x15C scope:global -BeginAction__15AIActionTrafficf = .text:0x80010718; // type:function size:0x174 scope:global -FinishAction__15AIActionTrafficf = .text:0x8001088C; // type:function size:0x4 scope:global -ComputeSpeed__15AIActionTrafficff = .text:0x80010890; // type:function size:0x344 scope:global -UpdateNavPos__15AIActionTrafficf = .text:0x80010BD4; // type:function size:0x45C scope:global -ShouldPullOver__15AIActionTrafficRCQ25UMath7Vector3P8WRoadNav = .text:0x80011030; // type:function size:0x8 scope:global -Update__15AIActionTrafficf = .text:0x80011038; // type:function size:0x5B0 scope:global -OnDebugDraw__15AIActionTraffic = .text:0x800115E8; // type:function size:0x4 scope:global -MessageSetSpeed__15AIActionTrafficRC16MSetTrafficSpeed = .text:0x800115EC; // type:function size:0xAC scope:global -__22AIActionPursuitOffRoadP14AIActionParamsf = .text:0x80011698; // type:function size:0x120 scope:global -OnBehaviorChange__22AIActionPursuitOffRoadRC6UCrc32 = .text:0x800117B8; // type:function size:0x8C scope:global -Construct__22AIActionPursuitOffRoadP14AIActionParams = .text:0x80011844; // type:function size:0x4C scope:global -ShouldDoIt__22AIActionPursuitOffRoad = .text:0x80011890; // type:function size:0x21C scope:global -CanBeAttempted__22AIActionPursuitOffRoadf = .text:0x80011AAC; // type:function size:0x9C scope:global -IsFinished__22AIActionPursuitOffRoad = .text:0x80011B48; // type:function size:0x64 scope:global -BeginAction__22AIActionPursuitOffRoadf = .text:0x80011BAC; // type:function size:0x138 scope:global -FinishAction__22AIActionPursuitOffRoadf = .text:0x80011CE4; // type:function size:0x4 scope:global -UpdateRoadAffinity__22AIActionPursuitOffRoadRQ25UMath7Vector3 = .text:0x80011CE8; // type:function size:0x258 scope:global -UpdateSeparation__22AIActionPursuitOffRoadRQ25UMath7Vector3 = .text:0x80011F40; // type:function size:0x68 scope:global -UpdateAvoidWalls__22AIActionPursuitOffRoadRQ25UMath7Vector3 = .text:0x80011FA8; // type:function size:0x318 scope:global -UpdateSeek__22AIActionPursuitOffRoadRQ25UMath7Vector3 = .text:0x800122C0; // type:function size:0xB88 scope:global -Update__22AIActionPursuitOffRoadf = .text:0x80012E48; // type:function size:0x798 scope:global -OnDebugDraw__22AIActionPursuitOffRoad = .text:0x800135E0; // type:function size:0x4 scope:global -__19AIActionHeliPursuitP14AIActionParamsf = .text:0x800135E4; // type:function size:0x144 scope:global -OnCollision__19AIActionHeliPursuitRCQ33Sim9Collision4Info = .text:0x80013728; // type:function size:0x154 scope:global -Construct__19AIActionHeliPursuitP14AIActionParams = .text:0x8001387C; // type:function size:0x4C scope:global -IsFinished__19AIActionHeliPursuit = .text:0x800138C8; // type:function size:0x1C scope:global -FinishAction__19AIActionHeliPursuitf = .text:0x800138E4; // type:function size:0x14 scope:global -StartPathToPlayerCar__19AIActionHeliPursuit = .text:0x800138F8; // type:function size:0xC4 scope:global -BeginAction__19AIActionHeliPursuitf = .text:0x800139BC; // type:function size:0x20 scope:global -StraightLinePursuit__19AIActionHeliPursuit = .text:0x800139DC; // type:function size:0x570 scope:global -SkidHitPursuit__19AIActionHeliPursuit = .text:0x80013F4C; // type:function size:0x47C scope:global -SetNextPerpSearchDest__19AIActionHeliPursuit = .text:0x800143C8; // type:function size:0x250 scope:global -SearchForPerp__19AIActionHeliPursuit = .text:0x80014618; // type:function size:0x19C scope:global -Update__19AIActionHeliPursuitf = .text:0x800147B4; // type:function size:0x1C8 scope:global -OnDebugDraw__19AIActionHeliPursuit = .text:0x8001497C; // type:function size:0x4 scope:global -__16AIActionHeliExitP14AIActionParamsf = .text:0x80014980; // type:function size:0xE4 scope:global -Construct__16AIActionHeliExitP14AIActionParams = .text:0x80014A64; // type:function size:0x4C scope:global -IsFinished__16AIActionHeliExit = .text:0x80014AB0; // type:function size:0x13C scope:global -FinishAction__16AIActionHeliExitf = .text:0x80014BEC; // type:function size:0x18 scope:global -BeginAction__16AIActionHeliExitf = .text:0x80014C04; // type:function size:0x9C scope:global -Update__16AIActionHeliExitf = .text:0x80014CA0; // type:function size:0x354 scope:global -OnDebugDraw__16AIActionHeliExit = .text:0x80014FF4; // type:function size:0x4 scope:global -__17AIActionHeadOnRamP14AIActionParamsf = .text:0x80014FF8; // type:function size:0xE4 scope:global -OnBehaviorChange__17AIActionHeadOnRamRC6UCrc32 = .text:0x800150DC; // type:function size:0x8C scope:global -Construct__17AIActionHeadOnRamP14AIActionParams = .text:0x80015168; // type:function size:0x4C scope:global -CanBeAttempted__17AIActionHeadOnRamf = .text:0x800151B4; // type:function size:0xCC scope:global -IsFinished__17AIActionHeadOnRam = .text:0x80015280; // type:function size:0x40 scope:global -BeginAction__17AIActionHeadOnRamf = .text:0x800152C0; // type:function size:0xC0 scope:global -FinishAction__17AIActionHeadOnRamf = .text:0x80015380; // type:function size:0x4 scope:global -GetSeekPosition__17AIActionHeadOnRamRQ25UMath7Vector3 = .text:0x80015384; // type:function size:0x208 scope:global -GetDesiredSpeed__17AIActionHeadOnRamRQ25UMath7Vector3 = .text:0x8001558C; // type:function size:0x13C scope:global -Update__17AIActionHeadOnRamf = .text:0x800156C8; // type:function size:0x198 scope:global -OnDebugDraw__17AIActionHeadOnRam = .text:0x80015860; // type:function size:0x4 scope:global -__11AIActionRamP14AIActionParamsf = .text:0x80015864; // type:function size:0xFC scope:global -OnBehaviorChange__11AIActionRamRC6UCrc32 = .text:0x80015960; // type:function size:0xBC scope:global -Construct__11AIActionRamP14AIActionParams = .text:0x80015A1C; // type:function size:0x4C scope:global -ShouldDoIt__11AIActionRam = .text:0x80015A68; // type:function size:0x80 scope:global -CanBeAttempted__11AIActionRamf = .text:0x80015AE8; // type:function size:0x9C scope:global -IsFinished__11AIActionRam = .text:0x80015B84; // type:function size:0x64 scope:global -BeginAction__11AIActionRamf = .text:0x80015BE8; // type:function size:0xAC scope:global -FinishAction__11AIActionRamf = .text:0x80015C94; // type:function size:0x4 scope:global -GetSeekPosition__11AIActionRamRQ25UMath7Vector3b = .text:0x80015C98; // type:function size:0x5B4 scope:global -UpdateSeek__11AIActionRamRQ25UMath7Vector3T1b = .text:0x8001624C; // type:function size:0x1EC scope:global -Update__11AIActionRamf = .text:0x80016438; // type:function size:0x738 scope:global -OnDebugDraw__11AIActionRam = .text:0x80016B70; // type:function size:0x4 scope:global -Construct__17AIActionStopShortP14AIActionParams = .text:0x80016B74; // type:function size:0x4C scope:global -__17AIActionStopShortP14AIActionParamsf = .text:0x80016BC0; // type:function size:0x7C scope:global -CanBeAttempted__17AIActionStopShortf = .text:0x80016C3C; // type:function size:0x8 scope:global -OnBehaviorChange__17AIActionStopShortRC6UCrc32 = .text:0x80016C44; // type:function size:0x8C scope:global -IsFinished__17AIActionStopShort = .text:0x80016CD0; // type:function size:0x40 scope:global -Update__17AIActionStopShortf = .text:0x80016D10; // type:function size:0xF0 scope:global -Construct__14AIActionSplineP14AIActionParams = .text:0x80016E00; // type:function size:0x6C scope:global -Update__14AIActionSplinef = .text:0x80016E6C; // type:function size:0x4 scope:global -Construct__14AIActionStrafeP14AIActionParams = .text:0x80016E70; // type:function size:0x6C scope:global -Update__14AIActionStrafef = .text:0x80016EDC; // type:function size:0x4 scope:global -Construct__16AIActionAirborneP14AIActionParams = .text:0x80016EE0; // type:function size:0x4C scope:global -__16AIActionAirborneP14AIActionParamsf = .text:0x80016F2C; // type:function size:0xA8 scope:global -OnBehaviorChange__16AIActionAirborneRC6UCrc32 = .text:0x80016FD4; // type:function size:0xB8 scope:global -CanBeAttempted__16AIActionAirbornef = .text:0x8001708C; // type:function size:0xD8 scope:global -IsFinished__16AIActionAirborne = .text:0x80017164; // type:function size:0xC scope:global -Update__16AIActionAirbornef = .text:0x80017170; // type:function size:0xF4 scope:global -Construct__17AIActionJackKnifeP14AIActionParams = .text:0x80017264; // type:function size:0x4C scope:global -__17AIActionJackKnifeP14AIActionParamsf = .text:0x800172B0; // type:function size:0x180 scope:global -OnBehaviorChange__17AIActionJackKnifeRC6UCrc32 = .text:0x80017430; // type:function size:0x8C scope:global -CanBeAttempted__17AIActionJackKnifef = .text:0x800174BC; // type:function size:0x284 scope:global -Update__17AIActionJackKnifef = .text:0x80017740; // type:function size:0x2DC scope:global -MessageJackKnife__17AIActionJackKnifeRC10MJackKnife = .text:0x80017A1C; // type:function size:0x78 scope:global -__23AIActionStaticRoadBlockP14AIActionParamsf = .text:0x80017A94; // type:function size:0x7C scope:global -OnBehaviorChange__23AIActionStaticRoadBlockRC6UCrc32 = .text:0x80017B10; // type:function size:0x58 scope:global -Construct__23AIActionStaticRoadBlockP14AIActionParams = .text:0x80017B68; // type:function size:0x4C scope:global -CanBeAttempted__23AIActionStaticRoadBlockf = .text:0x80017BB4; // type:function size:0x2C scope:global -BeginAction__23AIActionStaticRoadBlockf = .text:0x80017BE0; // type:function size:0x4 scope:global -FinishAction__23AIActionStaticRoadBlockf = .text:0x80017BE4; // type:function size:0x4 scope:global -Update__23AIActionStaticRoadBlockf = .text:0x80017BE8; // type:function size:0xF0 scope:global -OnDebugDraw__23AIActionStaticRoadBlock = .text:0x80017CD8; // type:function size:0x4 scope:global -__12AIActionRaceP14AIActionParamsf = .text:0x80017CDC; // type:function size:0x16C scope:global -Construct__12AIActionRaceP14AIActionParams = .text:0x80017E48; // type:function size:0x4C scope:global -OnBehaviorChange__12AIActionRaceRC6UCrc32 = .text:0x80017E94; // type:function size:0xB8 scope:global -OnTask__12AIActionRaceP10HSIMTASK__f = .text:0x80017F4C; // type:function size:0x3C scope:global -CanBeAttempted__12AIActionRacef = .text:0x80017F88; // type:function size:0xF4 scope:global -_._12AIActionRace = .text:0x8001807C; // type:function size:0xAC scope:global -BeginAction__12AIActionRacef = .text:0x80018128; // type:function size:0x308 scope:global -FinishAction__12AIActionRacef = .text:0x80018430; // type:function size:0x70 scope:global -ComputePotentials__12AIActionRace = .text:0x800184A0; // type:function size:0xCB8 scope:global -GetSpeedLimitForCurvature__Ffff = .text:0x80019158; // type:function size:0x80 scope:global -GetSpeedLimit__Fffff = .text:0x800191D8; // type:function size:0xAC scope:global -GetPotentialSpeed__C12AIActionRaceffb = .text:0x80019284; // type:function size:0x7A8 scope:global -GetPotentialAcceleration__C12AIActionRaceffbT3 = .text:0x80019A2C; // type:function size:0x374 scope:global -GetPotentialNOS__C12AIActionRacefbf = .text:0x80019DA0; // type:function size:0x118 scope:global -CheckOffPath__12AIActionRacef = .text:0x80019EB8; // type:function size:0x2D0 scope:global -UpdateNavPos__12AIActionRacefRCQ25UMath7Vector3 = .text:0x8001A188; // type:function size:0x2B0 scope:global -CheckSpeedTraps__C12AIActionRacefffb = .text:0x8001A438; // type:function size:0x290 scope:global -Update__12AIActionRacef = .text:0x8001A6C8; // type:function size:0xF54 scope:global -OnDebugDraw__12AIActionRace = .text:0x8001B61C; // type:function size:0x4 scope:global -GetCaffeineLayerName__Fi = .text:0x8001B620; // type:function size:0x54 scope:global -__14AIVehicleEmptyRC14BehaviorParams = .text:0x8001B674; // type:function size:0x74 scope:global -Construct__14AIVehicleEmptyRC14BehaviorParams = .text:0x8001B6E8; // type:function size:0x44 scope:global -__14AIVehicleHumanRC14BehaviorParams = .text:0x8001B72C; // type:function size:0xE0 scope:global -Construct__14AIVehicleHumanRC14BehaviorParams = .text:0x8001B80C; // type:function size:0x44 scope:global -_._14AIVehicleHuman = .text:0x8001B850; // type:function size:0x1B0 scope:global -UpdateWrongWay__14AIVehicleHuman = .text:0x8001BA00; // type:function size:0x224 scope:global -SetAiControl__14AIVehicleHumanb = .text:0x8001BC24; // type:function size:0xC4 scope:global -IsDragRacing__14AIVehicleHuman = .text:0x8001BCE8; // type:function size:0x5C scope:global -IsDragSteering__14AIVehicleHuman = .text:0x8001BD44; // type:function size:0xD4 scope:global -ChangeDragLanes__14AIVehicleHumanb = .text:0x8001BE18; // type:function size:0x70 scope:global -OnDebugDraw__14AIVehicleHuman = .text:0x8001BE88; // type:function size:0x4 scope:global -Update__14AIVehicleHumanf = .text:0x8001BE8C; // type:function size:0x700 scope:global -Construct__9AIVehicleRC14BehaviorParams = .text:0x8001C58C; // type:function size:0x58 scope:global -__9AIVehicleRC14BehaviorParamsffQ23Sim8TaskMode = .text:0x8001C5E4; // type:function size:0x4A0 scope:global -_._9AIVehicle = .text:0x8001CA84; // type:function size:0x1E8 scope:global -ResetInternals__9AIVehicle = .text:0x8001CC6C; // type:function size:0xC8 scope:global -OnTaskSimulate__9AIVehiclef = .text:0x8001CD34; // type:function size:0x98 scope:global -OnClearCausality__9AIVehiclef = .text:0x8001CDCC; // type:function size:0x44 scope:global -GetAcceleration__C9AIVehiclef = .text:0x8001CE10; // type:function size:0x94 scope:global -OnUpdateAvoidable__9AIVehicleRQ25UMath7Vector3Rf = .text:0x8001CEA4; // type:function size:0x120 scope:global -DoNOS__9AIVehicle = .text:0x8001CFC4; // type:function size:0x320 scope:global -OnTask__9AIVehicleP10HSIMTASK__f = .text:0x8001D2E4; // type:function size:0x154 scope:global -OnOwnerAttached__9AIVehicleP11IAttachable = .text:0x8001D438; // type:function size:0x9C scope:global -OnOwnerDetached__9AIVehicleP11IAttachable = .text:0x8001D4D4; // type:function size:0xA0 scope:global -OnBehaviorChange__9AIVehicleRC6UCrc32 = .text:0x8001D574; // type:function size:0x12C scope:global -ClearGoal__9AIVehicle = .text:0x8001D6A0; // type:function size:0x64 scope:global -SetGoal__9AIVehicleRC6UCrc32 = .text:0x8001D704; // type:function size:0x238 scope:global -Update__9AIVehiclef = .text:0x8001D93C; // type:function size:0x184 scope:global -ResetDriveToNav__9AIVehicle14eLaneSelection = .text:0x8001DAC0; // type:function size:0x110 scope:global -ResetVehicleToRoadNav__9AIVehicleP8WRoadNav = .text:0x8001DBD0; // type:function size:0xA0 scope:global -ResetVehicleToRoadNav__9AIVehiclescf = .text:0x8001DC70; // type:function size:0xB4 scope:global -ResetVehicleToRoadPos__9AIVehicleRCQ25UMath7Vector3T1 = .text:0x8001DD24; // type:function size:0xAC scope:global -UpdateRoadNavInfo__9AIVehicle = .text:0x8001DDD0; // type:function size:0x110 scope:global -OnReverse__9AIVehiclef = .text:0x8001DEE0; // type:function size:0x204 scope:global -GetOverSteerCorrection__9AIVehiclef = .text:0x8001E0E4; // type:function size:0xC scope:global -OnSteering__9AIVehiclef = .text:0x8001E0F0; // type:function size:0x3F4 scope:global -OnGasBrake__9AIVehiclef = .text:0x8001E4E4; // type:function size:0x3E0 scope:global -OnDriving__9AIVehiclef = .text:0x8001E8C4; // type:function size:0x84 scope:global -GetPathDistanceRemaining__9AIVehicle = .text:0x8001E948; // type:function size:0x234 scope:global -ClearReverseOverride__9AIVehicle = .text:0x8001EB7C; // type:function size:0x1C scope:global -SetReverseOverride__9AIVehiclef = .text:0x8001EB98; // type:function size:0x9C scope:global -UpdateReverseOverride__9AIVehiclef = .text:0x8001EC34; // type:function size:0xA8 scope:global -GetLookAhead__9AIVehicle = .text:0x8001ECDC; // type:function size:0xDC scope:global -UpdateTargeting__9AIVehicle = .text:0x8001EDB8; // type:function size:0x70 scope:global -WorldCollision__9AIVehicleRCQ25UMath7Vector3T1 = .text:0x8001EE28; // type:function size:0x208 scope:global -OnCollision__9AIVehicleRCQ33Sim9Collision4Info = .text:0x8001F030; // type:function size:0x4 scope:global -GetWorldAvoidanceInfo__C9AIVehiclefRQ25UMath7Vector3T2 = .text:0x8001F034; // type:function size:0x454 scope:global -GetCollNav__9AIVehicleRCQ25UMath7Vector3f = .text:0x8001F488; // type:function size:0x1E0 scope:global -SetSpawned__9AIVehicle = .text:0x8001F668; // type:function size:0x1B8 scope:global -UnSpawn__9AIVehicle = .text:0x8001F820; // type:function size:0x11C scope:global -CanRespawn__9AIVehicleb = .text:0x8001F93C; // type:function size:0x68 scope:global -UpdateSimplePhysics__9AIVehiclef = .text:0x8001F9A4; // type:function size:0x7D0 scope:global -EnableSimplePhysics__9AIVehicle = .text:0x80020174; // type:function size:0x6C scope:global -DisableSimplePhysics__9AIVehicle = .text:0x800201E0; // type:function size:0x1FC scope:global -IsSimplePhysicsActive__9AIVehicle = .text:0x800203DC; // type:function size:0x5C scope:global -init_nav__C9path_spotR8WRoadNav = .text:0x80020438; // type:function size:0x1CC scope:global -init_nav__C9path_spotR8WRoadNavRCQ25UMath7Vector3 = .text:0x80020604; // type:function size:0xF4 scope:global -walk_road__11road_walkerRCQ25UMath7Vector3T1ffsi = .text:0x800206F8; // type:function size:0xBD0 scope:global -walk_all_paths__11road_walkerRC9path_spotffb = .text:0x800212C8; // type:function size:0x358 scope:global -evaluate_end__11road_walkerRC9path_spotb = .text:0x80021620; // type:function size:0x408 scope:global -UpdateRoads__9AIVehicle = .text:0x80021A28; // type:function size:0x6C4 scope:global -GetCurrentRoad__9AIVehicle = .text:0x800220EC; // type:function size:0x30 scope:global -GetFutureRoad__9AIVehicle = .text:0x8002211C; // type:function size:0x30 scope:global -GetFarFuturePosition__9AIVehicle = .text:0x8002214C; // type:function size:0x30 scope:global -GetFarFutureDirection__9AIVehicle = .text:0x8002217C; // type:function size:0x30 scope:global -GetSeekAheadPosition__9AIVehicle = .text:0x800221AC; // type:function size:0x29C scope:global -OnDebugDraw__9AIVehicle = .text:0x80022448; // type:function size:0x4 scope:global -__13AIPerpVehicleRC14BehaviorParams = .text:0x8002244C; // type:function size:0x40C scope:global -_._13AIPerpVehicle = .text:0x80022858; // type:function size:0x2EC scope:global -ComputeSkill__13AIPerpVehicle = .text:0x80022B44; // type:function size:0x21C scope:global -SetRacerInfo__13AIPerpVehicleP10GRacerInfo = .text:0x80022D60; // type:function size:0x24 scope:global -Update__13AIPerpVehiclef = .text:0x80022D84; // type:function size:0x990 scope:global -Set911CallTime__13AIPerpVehiclef = .text:0x80023714; // type:function size:0x14 scope:global -OnBehaviorChange__13AIPerpVehicleRC6UCrc32 = .text:0x80023728; // type:function size:0x20 scope:global -IsPartiallyHidden__C13AIPerpVehicleRf = .text:0x80023748; // type:function size:0x5C scope:global -SetCostToState__13AIPerpVehiclei = .text:0x800237A4; // type:function size:0x8 scope:global -GetCostToState__C13AIPerpVehicle = .text:0x800237AC; // type:function size:0x8 scope:global -SetHeat__13AIPerpVehiclef = .text:0x800237B4; // type:function size:0x364 scope:global -GetSkill__C13AIPerpVehicle = .text:0x80023B18; // type:function size:0x2C scope:global -GetCatchupCheat__C13AIPerpVehicle = .text:0x80023B44; // type:function size:0x7C scope:global -GetHeat__C13AIPerpVehicle = .text:0x80023BC0; // type:function size:0x8 scope:global -AddCostToState__13AIPerpVehiclei = .text:0x80023BC8; // type:function size:0xD4 scope:global -AddToPendingRepPointsNormal__13AIPerpVehiclei = .text:0x80023C9C; // type:function size:0xA8 scope:global -AddToPendingRepPointsFromCopDestruction__13AIPerpVehiclei = .text:0x80023D44; // type:function size:0xA8 scope:global -IsRacing__C13AIPerpVehicle = .text:0x80023DEC; // type:function size:0xBC scope:global -GetPercentRaceComplete__C13AIPerpVehicle = .text:0x80023EA8; // type:function size:0x20 scope:global -IsBeingPursued__C13AIPerpVehicle = .text:0x80023EC8; // type:function size:0xAC scope:global -OnCausedExplosion__13AIPerpVehicleP10IExplosionP8ISimable = .text:0x80023F74; // type:function size:0x228 scope:global -OnClearCausality__13AIPerpVehiclef = .text:0x8002419C; // type:function size:0x8 scope:global -OnCausedCollision__13AIPerpVehicleRCQ33Sim9Collision4InfoP8ISimableT2 = .text:0x800241A4; // type:function size:0x8C0 scope:global -GetLastTrafficHitTime__C13AIPerpVehicle = .text:0x80024A64; // type:function size:0x8 scope:global -__15AIVehicleCopCarRC14BehaviorParams = .text:0x80024A6C; // type:function size:0x80 scope:global -_._15AIVehicleCopCar = .text:0x80024AEC; // type:function size:0x98 scope:global -Construct__15AIVehicleCopCarRC14BehaviorParams = .text:0x80024B84; // type:function size:0x44 scope:global -Update__15AIVehicleCopCarf = .text:0x80024BC8; // type:function size:0x25C scope:global -IsTetheredToTarget__15AIVehicleCopCarPQ33UTL3COM8IUnknown = .text:0x80024E24; // type:function size:0x1F8 scope:global -CanSeeTarget__15AIVehicleCopCarP8AITarget = .text:0x8002501C; // type:function size:0x468 scope:global -WatchForPerps__15AIVehicleCopCar = .text:0x80025484; // type:function size:0x13C scope:global -CheckForPursuit__15AIVehicleCopCarP8IVehicle = .text:0x800255C0; // type:function size:0x260 scope:global -__12AIVehiclePidRC14BehaviorParamsffQ23Sim8TaskMode = .text:0x80025820; // type:function size:0x384 scope:global -_._12AIVehiclePid = .text:0x80025BA4; // type:function size:0x1B8 scope:global -Reset__12AIVehiclePid = .text:0x80025D5C; // type:function size:0x48 scope:global -OnGasBrake__12AIVehiclePidf = .text:0x80025DA4; // type:function size:0x3B4 scope:global -OnSteering__12AIVehiclePidf = .text:0x80026158; // type:function size:0x6FC scope:global -__16AIVehicleRacecarRC14BehaviorParams = .text:0x80026854; // type:function size:0xDC scope:global -_._16AIVehicleRacecar = .text:0x80026930; // type:function size:0xCC scope:global -StartRace__16AIVehicleRacecar11DriverStyle = .text:0x800269FC; // type:function size:0x298 scope:global -QuitRace__16AIVehicleRacecar = .text:0x80026C94; // type:function size:0x190 scope:global -PrepareForRace__16AIVehicleRacecarRC19RacePreparationInfo = .text:0x80026E24; // type:function size:0x200 scope:global -Construct__16AIVehicleRacecarRC14BehaviorParams = .text:0x80027024; // type:function size:0x44 scope:global -ShouldDoSimplePhysics__C16AIVehicleRacecar = .text:0x80027068; // type:function size:0x100 scope:global -Update__16AIVehicleRacecarf = .text:0x80027168; // type:function size:0x104 scope:global -Construct__16AIVehicleTrafficRC14BehaviorParams = .text:0x8002726C; // type:function size:0x44 scope:global -__16AIVehicleTrafficRC14BehaviorParams = .text:0x800272B0; // type:function size:0xF8 scope:global -_._16AIVehicleTraffic = .text:0x800273A8; // type:function size:0xA8 scope:global -Update__16AIVehicleTrafficf = .text:0x80027450; // type:function size:0x6C scope:global -StartDriving__16AIVehicleTrafficf = .text:0x800274BC; // type:function size:0x2B0 scope:global -__16AIVehiclePursuitRC14BehaviorParams = .text:0x8002776C; // type:function size:0x1A0 scope:global -_._16AIVehiclePursuit = .text:0x8002790C; // type:function size:0xA8 scope:global -ResetInternals__16AIVehiclePursuit = .text:0x800279B4; // type:function size:0xA8 scope:global -StartPatrol__16AIVehiclePursuit = .text:0x80027A5C; // type:function size:0x88 scope:global -StartFlee__16AIVehiclePursuit = .text:0x80027AE4; // type:function size:0x144 scope:global -StartRoadBlock__16AIVehiclePursuit = .text:0x80027C28; // type:function size:0x124 scope:global -StartPursuit__16AIVehiclePursuitP8AITargetP8ISimable = .text:0x80027D4C; // type:function size:0x170 scope:global -DoInPositionGoal__16AIVehiclePursuit = .text:0x80027EBC; // type:function size:0x24 scope:global -EndPursuit__16AIVehiclePursuit = .text:0x80027EE0; // type:function size:0x80 scope:global -StartSupportGoal__16AIVehiclePursuit = .text:0x80027F60; // type:function size:0x68 scope:global -SetSupportGoal__16AIVehiclePursuitG6UCrc32 = .text:0x80027FC8; // type:function size:0xC scope:global -GetPursuitTarget__16AIVehiclePursuit = .text:0x80027FD4; // type:function size:0x70 scope:global -PursuitRequest__16AIVehiclePursuit = .text:0x80028044; // type:function size:0x94 scope:global -Update__16AIVehiclePursuitf = .text:0x800280D8; // type:function size:0x118 scope:global -UpdateSiren__16AIVehiclePursuitf = .text:0x800281F0; // type:function size:0x670 scope:global -HeliVehicleActive__Fv = .text:0x80028860; // type:function size:0x1C scope:global -__19AIVehicleHelicopterRC14BehaviorParams = .text:0x8002887C; // type:function size:0x1D0 scope:global -_._19AIVehicleHelicopter = .text:0x80028A4C; // type:function size:0xCC scope:global -Construct__19AIVehicleHelicopterRC14BehaviorParams = .text:0x80028B18; // type:function size:0x44 scope:global -SetFuelFull__19AIVehicleHelicopter = .text:0x80028B5C; // type:function size:0xAC scope:global -SetDestinationVelocity__19AIVehicleHelicopterRCQ25UMath7Vector3 = .text:0x80028C08; // type:function size:0x74 scope:global -Update__19AIVehicleHelicopterf = .text:0x80028C7C; // type:function size:0x200 scope:global -UpdateFuel__19AIVehicleHelicopterf = .text:0x80028E7C; // type:function size:0xA8 scope:global -CanSeeTarget__19AIVehicleHelicopterP8AITarget = .text:0x80028F24; // type:function size:0x450 scope:global -StartPathToPoint__19AIVehicleHelicopterRQ25UMath7Vector3 = .text:0x80029374; // type:function size:0x74 scope:global -SteerToNav__19AIVehicleHelicopterP8WRoadNavffb = .text:0x800293E8; // type:function size:0x1E8 scope:global -FilterHeliAltitude__19AIVehicleHelicopterRQ25UMath7Vector3 = .text:0x800295D0; // type:function size:0x80 scope:global -CheckHeliSheet__19AIVehicleHelicopterRCQ25UMath7Vector3N21RQ25UMath7Vector3T4 = .text:0x80029650; // type:function size:0x35C scope:global -RestrictPointToRoadNet__19AIVehicleHelicopterRQ25UMath7Vector3 = .text:0x800299AC; // type:function size:0xE0 scope:global -AvoidCamera__19AIVehicleHelicopterRQ25UMath7Vector3 = .text:0x80029A8C; // type:function size:0x294 scope:global -OnDriving__19AIVehicleHelicopterf = .text:0x80029D20; // type:function size:0x4DC scope:global -__25AdaptivePIDControllerBase15eAdaptationRulef = .text:0x8002A1FC; // type:function size:0x154 scope:global -_._25AdaptivePIDControllerBase = .text:0x8002A350; // type:function size:0xAC scope:global -UpdateBase__25AdaptivePIDControllerBasefff = .text:0x8002A3FC; // type:function size:0x1F0 scope:global -GetOutput__25AdaptivePIDControllerBase = .text:0x8002A5EC; // type:function size:0x104 scope:global -GetNewCoefficientDerivative__25AdaptivePIDControllerBase8ePIDTermff = .text:0x8002A6F0; // type:function size:0x138 scope:global -GetSensitivityDerivative__25AdaptivePIDControllerBasef = .text:0x8002A828; // type:function size:0x84 scope:global -Sign__25AdaptivePIDControllerBasef = .text:0x8002A8AC; // type:function size:0x34 scope:global -__27AdaptivePIDControllerSimple15eAdaptationRulefii = .text:0x8002A8E0; // type:function size:0x8C scope:global -GetTerm__27AdaptivePIDControllerSimple8ePIDTerm = .text:0x8002A96C; // type:function size:0x90 scope:global -__32AdaptivePIDControllerComplicated15eAdaptationRulef = .text:0x8002A9FC; // type:function size:0x60 scope:global -Update__32AdaptivePIDControllerComplicatedffff = .text:0x8002AA5C; // type:function size:0x2C scope:global -CanAquire__8AITargetPC8ISimable = .text:0x8002AA88; // type:function size:0x68 scope:global -Register__8AITargetP8ISimable = .text:0x8002AAF0; // type:function size:0x15C scope:global -UnRegister__8AITargetP8ISimable = .text:0x8002AC4C; // type:function size:0x100 scope:global -Track__8AITargetPC8ISimable = .text:0x8002AD4C; // type:function size:0x64 scope:global -TrackAll__8AITarget = .text:0x8002ADB0; // type:function size:0x48 scope:global -__8AITargetP8ISimable = .text:0x8002ADF8; // type:function size:0x74 scope:global -_._8AITarget = .text:0x8002AE6C; // type:function size:0x64 scope:global -Clear__8AITarget = .text:0x8002AED0; // type:function size:0x78 scope:global -Aquire__8AITargetP8ISimable = .text:0x8002AF48; // type:function size:0x60 scope:global -Aquire__8AITargetRCQ25UMath7Vector3 = .text:0x8002AFA8; // type:function size:0x88 scope:global -Aquire__8AITargetRCQ25UMath7Vector3T1 = .text:0x8002B030; // type:function size:0x84 scope:global -Aquire__8AITargetPC8AITarget = .text:0x8002B0B4; // type:function size:0x68 scope:global -IsTarget__C8AITargetPC8AITarget = .text:0x8002B11C; // type:function size:0x94 scope:global -GetSpeed__C8AITarget = .text:0x8002B1B0; // type:function size:0x64 scope:global -GetLinearVelocity__C8AITarget = .text:0x8002B214; // type:function size:0x64 scope:global -TrackInternal__8AITarget = .text:0x8002B278; // type:function size:0x138 scope:global -Seek__7AISteerRQ25UMath7Vector3RCQ25UMath7Vector3N22 = .text:0x8002B3B0; // type:function size:0x28 scope:global -Pursuit__7AISteerRQ25UMath7Vector3RCQ25UMath7Vector3N32 = .text:0x8002B3D8; // type:function size:0x60 scope:global -Ram__7AISteerRQ25UMath7Vector3RCQ25UMath7Vector3fT2T2 = .text:0x8002B438; // type:function size:0x35C scope:global -LineSegSeperation__FRQ25UMath7Vector3RCQ25UMath7Vector3N31 = .text:0x8002B794; // type:function size:0x41C scope:global -Separation__7AISteerRQ25UMath7Vector3RCQ25UMath7Vector3T2fT2T2f = .text:0x8002BBB0; // type:function size:0xF0 scope:global -SetupCapsule__7AISteerPC5IBodyRQ25UMath7Vector3T2Rf = .text:0x8002BCA0; // type:function size:0x164 scope:global -Seperation__7AISteerRQ25UMath7Vector3P5IBodyT2ff = .text:0x8002BE04; // type:function size:0x3B8 scope:global -VehicleSeperation__7AISteerRQ25UMath7Vector3P8IVehicleRCQ33UTL3Stdt4list2ZP11AIAvoidableZ26_type_AIAvoidableNeighborsff = .text:0x8002C1BC; // type:function size:0x158 scope:global -GetDesiredSpeedToTarget__7AISteerff = .text:0x8002C314; // type:function size:0xAC scope:global -__8AIActionP14AIActionParamsf = .text:0x8002C3C0; // type:function size:0x9C scope:global -init__19performance_limiterf = .text:0x8002C45C; // type:function size:0x8 scope:global -update__19performance_limiterffff = .text:0x8002C464; // type:function size:0x100 scope:global -_._6AIGoal = .text:0x8002C564; // type:function size:0x108 scope:global -AddAction__6AIGoalPCc = .text:0x8002C66C; // type:function size:0xB4 scope:global -OnBehaviorChange__6AIGoalRC6UCrc32 = .text:0x8002C720; // type:function size:0x88 scope:global -ChooseAction__6AIGoalf = .text:0x8002C7A8; // type:function size:0x160 scope:global -Update__6AIGoalf = .text:0x8002C908; // type:function size:0x74 scope:global -__6AIGoalP8ISimable = .text:0x8002C97C; // type:function size:0x70 scope:global -__10AIGoalNoneP8ISimable = .text:0x8002C9EC; // type:function size:0x4C scope:global -__13AIGoalTrafficP8ISimable = .text:0x8002CA38; // type:function size:0x5C scope:global -__12AIGoalPatrolP8ISimable = .text:0x8002CA94; // type:function size:0x6C scope:global -__13AIGoalPursuitP8ISimable = .text:0x8002CB00; // type:function size:0xE0 scope:global -Update__13AIGoalPursuitf = .text:0x8002CBE0; // type:function size:0x20 scope:global -_._13AIGoalPursuit = .text:0x8002CC00; // type:function size:0x68 scope:global -__15AIGoalStopShortP8ISimable = .text:0x8002CC68; // type:function size:0x8C scope:global -__9AIGoalRamP8ISimable = .text:0x8002CCF4; // type:function size:0xAC scope:global -__9AIGoalPitP8ISimable = .text:0x8002CDA0; // type:function size:0xAC scope:global -__15AIGoalHeadOnRamP8ISimable = .text:0x8002CE4C; // type:function size:0x11C scope:global -__21AIGoalStaticRoadBlockP8ISimable = .text:0x8002CF68; // type:function size:0x5C scope:global -_._21AIGoalStaticRoadBlock = .text:0x8002CFC4; // type:function size:0x68 scope:global -__17AIGoalFleePursuitP8ISimable = .text:0x8002D02C; // type:function size:0x8C scope:global -__17AIGoalHeliPursuitP8ISimable = .text:0x8002D0B8; // type:function size:0x6C scope:global -__14AIGoalHeliExitP8ISimable = .text:0x8002D124; // type:function size:0x6C scope:global -Update__14AIGoalHeliExitf = .text:0x8002D190; // type:function size:0xBC scope:global -__11AIGoalRacerP8ISimable = .text:0x8002D24C; // type:function size:0x6C scope:global -__16PursuitFormation = .text:0x8002D2B8; // type:function size:0x5C scope:global -_._16PursuitFormation = .text:0x8002D314; // type:function size:0xB0 scope:global -Reset__16PursuitFormation = .text:0x8002D3C4; // type:function size:0x98 scope:global -AddTargetOffset__16PursuitFormationRCQ25UMath7Vector3iG6UCrc32T1 = .text:0x8002D45C; // type:function size:0x2EC scope:global -__14BoxInFormationiP8IPursuit = .text:0x8002D748; // type:function size:0x2D4 scope:global -getPosition__14BoxInFormationifRQ25UMath7Vector3 = .text:0x8002DA1C; // type:function size:0x34 scope:global -Update__14BoxInFormationfP8IPursuit = .text:0x8002DA50; // type:function size:0xD4 scope:global -__21RollingBlockFormationiP8IPursuit = .text:0x8002DB24; // type:function size:0x208 scope:global -getPosition__21RollingBlockFormationifRQ25UMath7Vector3 = .text:0x8002DD2C; // type:function size:0x34 scope:global -Update__21RollingBlockFormationfP8IPursuit = .text:0x8002DD60; // type:function size:0xD4 scope:global -__15FollowFormationi = .text:0x8002DE34; // type:function size:0x398 scope:global -__22StaggerFollowFormationi = .text:0x8002E1CC; // type:function size:0x3A0 scope:global -__12PitFormationi = .text:0x8002E56C; // type:function size:0x1CC scope:global -__13HerdFormationi = .text:0x8002E738; // type:function size:0x20C scope:global -Update__13HerdFormationfP8IPursuit = .text:0x8002E944; // type:function size:0x3D0 scope:global -Reset__20GroundSupportRequest = .text:0x8002ED14; // type:function size:0x1C8 scope:global -Update__20GroundSupportRequestf = .text:0x8002EEDC; // type:function size:0x4C scope:global -__9AIPursuitGQ23Sim5Param = .text:0x8002EF28; // type:function size:0x908 scope:global -_._9AIPursuit = .text:0x8002F830; // type:function size:0x3A8 scope:global -Construct__9AIPursuitGQ23Sim5Param = .text:0x8002FBD8; // type:function size:0x74 scope:global -GetPursuitLevelAttrib__C9AIPursuit = .text:0x8002FC4C; // type:function size:0xC4 scope:global -GetPursuitSupportAttrib__C9AIPursuit = .text:0x8002FD10; // type:function size:0xC4 scope:global -LockInPursuitAttribs__9AIPursuit = .text:0x8002FDD4; // type:function size:0x78 scope:global -CalcTotalCostToState__C9AIPursuit = .text:0x8002FE4C; // type:function size:0x74 scope:global -AddVehicleToContingent__9AIPursuitP8IVehicle = .text:0x8002FEC0; // type:function size:0x224 scope:global -OnAttached__9AIPursuitP11IAttachable = .text:0x800300E4; // type:function size:0x510 scope:global -OnDetached__9AIPursuitP11IAttachable = .text:0x800305F4; // type:function size:0x498 scope:global -IncNumCopsDestroyed__9AIPursuitP8IVehicle = .text:0x80030A8C; // type:function size:0x270 scope:global -TrackVehicleCounts__9AIPursuit = .text:0x80030CFC; // type:function size:0x120 scope:global -GetFormationType__C9AIPursuit = .text:0x80030E1C; // type:function size:0x8 scope:global -InitFormation__9AIPursuiti = .text:0x80030E24; // type:function size:0x17C scope:global -EndCurrentFormation__9AIPursuit = .text:0x80030FA0; // type:function size:0x1C scope:global -AssignCopOffset__9AIPursuitiRQ33UTL3Stdt6vector2ZP10IPursuitAIZ16_type_AIPursuersRCQ25UMath7Vector3T3RC6UCrc32b = .text:0x80030FBC; // type:function size:0xC0 scope:global -AssignChopperGoal__9AIPursuitP10IPursuitAI = .text:0x8003107C; // type:function size:0x128 scope:global -EvenOutOffsets__9AIPursuitRQ33UTL3Stdt6vector2ZQ25UMath7Vector3Z19_type_AIVector3ListRQ33UTL3Stdt6vector2ZQ29AIPursuit15FormationTargetZ27_type_AIFormationTargetList = .text:0x800311A4; // type:function size:0x5BC scope:global -AssignClosestOffsets__9AIPursuitRQ33UTL3Stdt6vector2ZQ25UMath7Vector3Z19_type_AIVector3ListRQ33UTL3Stdt6vector2ZP10IPursuitAIZ16_type_AIPursuersRQ33UTL3Stdt6vector2ZQ29AIPursuit15FormationTargetZ27_type_AIFormationTargetListb = .text:0x80031760; // type:function size:0x694 scope:global -CopAndAngleSortPredicate__FPCvT0 = .text:0x80031DF4; // type:function size:0x20 scope:local -CopAndAngleDistanceSortPredicate__FPCvT0 = .text:0x80031E14; // type:function size:0x20 scope:local -SetupCollapse__9AIPursuitRCQ33UTL3Stdt6vector2ZP10IPursuitAIZ16_type_AIPursuersiff = .text:0x80031E34; // type:function size:0x7F0 scope:global -AssignCopsInCircle__9AIPursuitP11CopAndAngleifRCQ25UMath7Vector3T4 = .text:0x80032624; // type:function size:0x22C scope:global -UpdateFormation__9AIPursuitf = .text:0x80032850; // type:function size:0xF3C scope:global -UpdateOutOfFormationOffsets__9AIPursuit = .text:0x8003378C; // type:function size:0xA88 scope:global -IsPlayerPursuit__C9AIPursuit = .text:0x80034214; // type:function size:0xB8 scope:global -ContingentHasActiveCops__C9AIPursuit = .text:0x800342CC; // type:function size:0x34 scope:global -OnTask__9AIPursuitP10HSIMTASK__f = .text:0x80034300; // type:function size:0x17E4 scope:global -IsHeliInPursuit__C9AIPursuit = .text:0x80035AE4; // type:function size:0x88 scope:global -ShouldEnd__C9AIPursuit = .text:0x80035B6C; // type:function size:0x98 scope:global -GetAdjustedCopCounts__9AIPursuitP14CopCountRecordRi = .text:0x80035C04; // type:function size:0x348 scope:global -RemoveUnwantedVehicles__9AIPursuit = .text:0x80035F4C; // type:function size:0x2A8 scope:global -FleeCopOfType__9AIPursuitG6UCrc32i = .text:0x800361F4; // type:function size:0x3B0 scope:global -CopRequest__9AIPursuit = .text:0x800365A4; // type:function size:0x404 scope:global -RequestRoadBlock__9AIPursuit = .text:0x800369A8; // type:function size:0x214 scope:global -AddRoadBlock__9AIPursuitP10IRoadBlock = .text:0x80036BBC; // type:function size:0x98 scope:global -ClearGroundSupportRequest__9AIPursuit = .text:0x80036C54; // type:function size:0x24 scope:global -SkidHitEnabled__C9AIPursuit = .text:0x80036C78; // type:function size:0xA8 scope:global -RequestGroundSupport__9AIPursuit = .text:0x80036D20; // type:function size:0x304 scope:global -IsSupportVehicle__9AIPursuitP8IVehicle = .text:0x80037024; // type:function size:0x94 scope:global -IsTarget__C9AIPursuitP8AITarget = .text:0x800370B8; // type:function size:0x24 scope:global -GetTarget__C9AIPursuit = .text:0x800370DC; // type:function size:0x8 scope:global -IsFinisherActive__C9AIPursuit = .text:0x800370E4; // type:function size:0x20 scope:global -TimeToFinisherAttempt__C9AIPursuit = .text:0x80037104; // type:function size:0x4C scope:global -BailPursuit__9AIPursuit = .text:0x80037150; // type:function size:0x48 scope:global -TimeUntilBusted__C9AIPursuit = .text:0x80037198; // type:function size:0x78 scope:global -IsAttemptingRoadBlock__C9AIPursuit = .text:0x80037210; // type:function size:0x18 scope:global -NotifyCopDamaged__9AIPursuitP8IVehicle = .text:0x80037228; // type:function size:0xD4 scope:global -OnDebugDraw__9AIPursuit = .text:0x800372FC; // type:function size:0x4 scope:global -GetGlobalPursuitLevelAttrib__Fv = .text:0x80037300; // type:function size:0x224 scope:global -IsValidPursuitCarName__FPCc = .text:0x80037524; // type:function size:0xC0 scope:global -GetRandomValidCopCar__Fv = .text:0x800375E4; // type:function size:0x170 scope:global -SpikesHit__9AIPursuitP10IVehicleAI = .text:0x80037754; // type:function size:0xF4 scope:global -EndPursuitEnteringSafehouse__9AIPursuit = .text:0x80037848; // type:function size:0x20 scope:global -UpdateJerk__9AIPursuitf = .text:0x80037868; // type:function size:0x148 scope:global -__11AIRoadBlockGQ23Sim5Param = .text:0x800379B0; // type:function size:0x240 scope:global -_._11AIRoadBlock = .text:0x80037BF0; // type:function size:0x220 scope:global -Construct__11AIRoadBlockGQ23Sim5Param = .text:0x80037E10; // type:function size:0x74 scope:global -AddVehicle__11AIRoadBlockP8IVehicle = .text:0x80037E84; // type:function size:0x8C scope:global -AddSmackable__11AIRoadBlockP17IPlaceableSceneryb = .text:0x80037F10; // type:function size:0x180 scope:global -RemoveVehicle__11AIRoadBlockP8IVehicle = .text:0x80038090; // type:function size:0x38 scope:global -ReleaseAllSmackables__11AIRoadBlock = .text:0x800380C8; // type:function size:0x8C scope:global -GetMinDistanceToTarget__11AIRoadBlockfRfPP8IVehicle = .text:0x80038154; // type:function size:0x3BC scope:global -GetNumCops__11AIRoadBlock = .text:0x80038510; // type:function size:0x14 scope:global -OnAttached__11AIRoadBlockP11IAttachable = .text:0x80038524; // type:function size:0x17C scope:global -OnDetached__11AIRoadBlockP11IAttachable = .text:0x800386A0; // type:function size:0xF0 scope:global -IsComprisedOf__11AIRoadBlockP10HSIMABLE__ = .text:0x80038790; // type:function size:0xA0 scope:global -__14AISpawnManagerff = .text:0x80038830; // type:function size:0x5C scope:global -_._14AISpawnManager = .text:0x8003888C; // type:function size:0x34 scope:global -GetBasePosition__14AISpawnManagerRQ25UMath7Vector3 = .text:0x800388C0; // type:function size:0x88 scope:global -GetBaseForwardVector__14AISpawnManagerRQ25UMath7Vector3 = .text:0x80038948; // type:function size:0x88 scope:global -RespawnAvailable__14AISpawnManagerRCQ25UMath7Vector3f = .text:0x800389D0; // type:function size:0x11C scope:global -GetSpawnPointOnSegment__14AISpawnManagerRsRcRf = .text:0x80038AEC; // type:function size:0xC8 scope:global -GetSpawnLocation__14AISpawnManagerRsRcRf = .text:0x80038BB4; // type:function size:0x168 scope:global -CheckSpawnPosition__14AISpawnManagerRCQ25UMath7Vector3biiT2 = .text:0x80038D1C; // type:function size:0x294 scope:global -RefreshSpawnData__14AISpawnManager = .text:0x80038FB0; // type:function size:0x460 scope:global -AngleTo__Q22AI4MathRCQ25UMath7Vector3N21 = .text:0x80039410; // type:function size:0xAC scope:global -TimeToIntercept__Q22AI4MathRCQ25UMath7Vector3N31 = .text:0x800394BC; // type:function size:0xD8 scope:global -TimeToImpactXZ__Q22AI4MathRCQ25UMath7Vector3T1fT1T1f = .text:0x80039594; // type:function size:0x2AC scope:global -PredictPosition__Q22AI4MathfRCQ25UMath7Vector3T2fT2fRQ25UMath7Vector3 = .text:0x80039840; // type:function size:0x150 scope:global -Construct__3GpsGQ23Sim5Param = .text:0x80039990; // type:function size:0x58 scope:global -__3Gps = .text:0x800399E8; // type:function size:0x19C scope:global -_._3Gps = .text:0x80039B84; // type:function size:0xE8 scope:global -OnTask__3GpsP10HSIMTASK__f = .text:0x80039C6C; // type:function size:0x3C scope:global -Update__3Gpsf = .text:0x80039CA8; // type:function size:0x388 scope:global -Engage__3GpsRCQ25UMath7Vector3f = .text:0x8003A030; // type:function size:0x200 scope:global -Render__3GpsP5eView = .text:0x8003A230; // type:function size:0x710 scope:global -GPS_Disengage__Fv = .text:0x8003A940; // type:function size:0x1C scope:global -GPS_Engage__FRCQ25UMath7Vector3f = .text:0x8003A95C; // type:function size:0x3C scope:global -GPS_IsEngaged__Fv = .text:0x8003A998; // type:function size:0x28 scope:global -RenderGpsArrows__FP5eView = .text:0x8003A9C0; // type:function size:0x34 scope:global -Get__CQ26Attribt7TAttrib1ZQ25UMath7Vector4Ui = .text:0x8003A9F4; // type:function size:0x50 scope:global -__lower_bound__H4ZPCUiZUiZQ24_STLt4less1ZUiZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x8003AA44; // type:function size:0x48 scope:global -__lower_bound__H4ZPCfZfZQ24_STLt4less1ZfZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x8003AA8C; // type:function size:0x4C scope:global -clear__Q24_STLt10_List_base2ZP11IAttachableZQ33UTL3Stdt9Allocator2ZP11IAttachableZ21_type_IAttachableList = .text:0x8003AAD8; // type:function size:0x78 scope:global -find__H2ZPP7IPlayerZP7IPlayer_4_STLX01X01RCX11_X01 = .text:0x8003AB50; // type:function size:0xB0 scope:global -find__H2ZPPQ23Sim7IEntityZPQ23Sim7IEntity_4_STLX01X01RCX11_X01 = .text:0x8003AC00; // type:function size:0xB0 scope:global -Get__CQ26Attribt7TAttrib1ZbUi = .text:0x8003ACB0; // type:function size:0x50 scope:global -reserve__Q24_STLt6vector2ZiZQ33UTL3Stdt9Allocator2ZiZQ26Speech14_type_voiceIDsUi = .text:0x8003AD00; // type:function size:0x11C scope:global -reserve__Q24_STLt6vector2ZQ26Speech7copPairZQ33UTL3Stdt9Allocator2ZQ26Speech7copPairZQ26Speech12_type_copMapUi = .text:0x8003AE1C; // type:function size:0x15C scope:global -find__H2ZPP8IPursuitZP8IPursuit_4_STLX01X01RCX11_X01 = .text:0x8003AF78; // type:function size:0xB0 scope:global -find__H2ZPP10IRoadBlockZP10IRoadBlock_4_STLX01X01RCX11_X01 = .text:0x8003B028; // type:function size:0xB0 scope:global -find__H2ZPP14ICollisionBodyZP14ICollisionBody_4_STLX01X01RCX11_X01 = .text:0x8003B0D8; // type:function size:0xB0 scope:global -find__H2ZPP11ISimpleBodyZP11ISimpleBody_4_STLX01X01RCX11_X01 = .text:0x8003B188; // type:function size:0xB0 scope:global -find__H2ZPP10IRigidBodyZP10IRigidBody_4_STLX01X01RCX11_X01 = .text:0x8003B238; // type:function size:0xB0 scope:global -find__H2ZPP14ITrafficCenterZP14ITrafficCenter_4_STLX01X01RCX11_X01 = .text:0x8003B2E8; // type:function size:0xB0 scope:global -find__H2ZPP12IInputPlayerZP12IInputPlayer_4_STLX01X01RCX11_X01 = .text:0x8003B398; // type:function size:0xB0 scope:global -find__H2ZPP13IVehicleCacheZP13IVehicleCache_4_STLX01X01RCX11_X01 = .text:0x8003B448; // type:function size:0xB0 scope:global -find__H2ZPP8IVehicleZP8IVehicle_4_STLX01X01RCX11_X01 = .text:0x8003B4F8; // type:function size:0xB0 scope:global -reserve__Q24_STLt6vector2ZQ26Hermes7HandlerZQ33UTL3Stdt9Allocator2ZQ26Hermes7HandlerZ12_type_vectorUi = .text:0x8003B5A8; // type:function size:0x184 scope:global -reserve__Q24_STLt6vector2Z13WCollisionTriZQ33UTL3Stdt9Allocator2Z13WCollisionTriZ22_type_WCollisionVectorUi = .text:0x8003B72C; // type:function size:0x1BC scope:global -reserve__Q24_STLt6vector2ZP18WCollisionTriBlockZQ33UTL3Stdt9Allocator2ZP18WCollisionTriBlockZ22_type_WCollisionVectorUi = .text:0x8003B8E8; // type:function size:0x11C scope:global -Get__CQ26Attribt7TAttrib1Z14GCollectionKeyUi = .text:0x8003BA04; // type:function size:0x50 scope:global -find__H2ZPP6IModelZP6IModel_4_STLX01X01RCX11_X01 = .text:0x8003BA54; // type:function size:0xB0 scope:global -__lower_bound__H4ZPCQ216AITrafficManager10PatternKeyZQ216AITrafficManager10PatternKeyZQ24_STLt4less1ZQ216AITrafficManager10PatternKeyZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x8003BB04; // type:function size:0x48 scope:global -clear__Q24_STLt10_List_base2ZP8IVehicleZQ33UTL3Stdt9Allocator2ZP8IVehicleZ17_type_TrafficList = .text:0x8003BB4C; // type:function size:0x78 scope:global -reserve__Q24_STLt6vector2ZQ216AITrafficManager10PatternKeyZQ33UTL3Stdt9Allocator2ZQ216AITrafficManager10PatternKeyZ33_type_AITrafficManager_PatternMapUi = .text:0x8003BBC4; // type:function size:0x15C scope:global -__upper_bound__H4ZPQ216AITrafficManager10PatternKeyZQ216AITrafficManager10PatternKeyZQ24_STLt4less1ZQ216AITrafficManager10PatternKeyZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x8003BD20; // type:function size:0x48 scope:global -find__H2ZQ24_STLt14_List_iterator2ZP8IVehicleZQ24_STLt16_Nonconst_traits1ZP8IVehicleZP8IVehicle_4_STLX01X01RCX11_X01 = .text:0x8003BD68; // type:function size:0x60 scope:global -Count__Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi1012eVehicleList = .text:0x8003BDC8; // type:function size:0x18 scope:global -CreateInstance__Q33UTL3COMt7Factory3ZQ23Sim5ParamZ8ISimableZ6UCrc32G6UCrc32GQ23Sim5Param = .text:0x8003BDE0; // type:function size:0x7C scope:global -__adjust_heap__H4ZPP14ITrafficCenterZiZP14ITrafficCenterZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X11X11X21X31_v = .text:0x8003BE5C; // type:function size:0x118 scope:global -make_heap__H2ZPP14ITrafficCenterZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X01X11_v = .text:0x8003BF74; // type:function size:0x78 scope:global -pop_heap__H2ZPP14ITrafficCenterZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X01X11_v = .text:0x8003BFEC; // type:function size:0x40 scope:global -__partial_sort__H3ZPP14ITrafficCenterZP14ITrafficCenterZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X01X01PX11X21_v = .text:0x8003C02C; // type:function size:0xBC scope:global -partial_sort__H2ZPP14ITrafficCenterZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X01X01X11_v = .text:0x8003C0E8; // type:function size:0x28 scope:global -__unguarded_partition__H3ZPP14ITrafficCenterZP14ITrafficCenterZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X01X11X21_X01 = .text:0x8003C110; // type:function size:0x9C scope:global -__introsort_loop__H4ZPP14ITrafficCenterZP14ITrafficCenterZiZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X01PX11X21X31_v = .text:0x8003C1AC; // type:function size:0x158 scope:global -__unguarded_linear_insert__H3ZPP14ITrafficCenterZP14ITrafficCenterZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X11X21_v = .text:0x8003C304; // type:function size:0x60 scope:global -__insertion_sort__H2ZPP14ITrafficCenterZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X01X11_v = .text:0x8003C364; // type:function size:0xA4 scope:global -__unguarded_insertion_sort_aux__H3ZPP14ITrafficCenterZP14ITrafficCenterZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X01PX11X21_v = .text:0x8003C408; // type:function size:0x54 scope:global -__final_insertion_sort__H2ZPP14ITrafficCenterZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X01X11_v = .text:0x8003C45C; // type:function size:0x6C scope:global -sort__H2ZPP14ITrafficCenterZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X01X11_v = .text:0x8003C4C8; // type:function size:0x84 scope:global -clear__Q24_STLt10_List_base2ZPcZQ33UTL3Stdt9Allocator2ZPcZ10_type_list = .text:0x8003C54C; // type:function size:0x78 scope:global -CreateInstance__Q33UTL3COMt7Factory3ZRCQ25Sound16AudioEventParamsZQ25Sound10AudioEventZUiUiRCQ25Sound16AudioEventParams = .text:0x8003C5C4; // type:function size:0x5C scope:global -find__H2ZPP12EAX_CarStateZP12EAX_CarState_4_STLX01X01RCX11_X01 = .text:0x8003C620; // type:function size:0xB0 scope:global -find__H2ZPP13EAX_HeliStateZP13EAX_HeliState_4_STLX01X01RCX11_X01 = .text:0x8003C6D0; // type:function size:0xB0 scope:global -find__H2ZPP4IHudZP4IHud_4_STLX01X01RCX11_X01 = .text:0x8003C780; // type:function size:0xB0 scope:global -clear__Q24_STLt10_List_base2ZQ212AICopManager15SpawnCopRequestZQ33UTL3Stdt9Allocator2ZQ212AICopManager15SpawnCopRequestZ31_type_AICopManagerSpawnRequests = .text:0x8003C830; // type:function size:0x78 scope:global -clear__Q24_STLt10_List_base2ZQ212AICopManager11BreakerZoneZQ33UTL3Stdt9Allocator2ZQ212AICopManager11BreakerZoneZ10_type_list = .text:0x8003C8A8; // type:function size:0x78 scope:global -clear__Q24_STLt10_List_base2ZP8IPursuitZQ33UTL3Stdt9Allocator2ZP8IPursuitZ26_type_AICopManagerPursuits = .text:0x8003C920; // type:function size:0x78 scope:global -clear__Q24_STLt10_List_base2ZP10IRoadBlockZQ33UTL3Stdt9Allocator2ZP10IRoadBlockZ28_type_AICopManagerRoadBlocks = .text:0x8003C998; // type:function size:0x78 scope:global -CreateInstance__Q33UTL3COMt7Factory3ZQ23Sim5ParamZQ23Sim9IActivityZ6UCrc32G6UCrc32GQ23Sim5Param = .text:0x8003CA10; // type:function size:0x7C scope:global -find__H2ZQ24_STLt14_List_iterator2ZP8IPursuitZQ24_STLt16_Nonconst_traits1ZP8IPursuitZP8IPursuit_4_STLX01X01RCX11_X01 = .text:0x8003CA8C; // type:function size:0x60 scope:global -find__H2ZQ24_STLt14_List_iterator2ZP10IRoadBlockZQ24_STLt16_Nonconst_traits1ZP10IRoadBlockZP10IRoadBlock_4_STLX01X01RCX11_X01 = .text:0x8003CAEC; // type:function size:0x60 scope:global -First__Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi311ePlayerList = .text:0x8003CB4C; // type:function size:0x30 scope:global -reserve__Q24_STLt6vector2ZP8IVehicleZQ33UTL3Stdt9Allocator2ZP8IVehicleZ41_type_AICopManagerCreateRoadBlockVehiclesUi = .text:0x8003CB7C; // type:function size:0x11C scope:global -clear__Q24_STLt10_List_base2ZP11AIAvoidableZQ33UTL3Stdt9Allocator2ZP11AIAvoidableZ26_type_AIAvoidableNeighbors = .text:0x8003CC98; // type:function size:0x78 scope:global -find__H2ZQ24_STLt14_List_iterator2ZP11AIAvoidableZQ24_STLt16_Nonconst_traits1ZP11AIAvoidableZP11AIAvoidable_4_STLX01X01RCX11_X01 = .text:0x8003CD10; // type:function size:0x60 scope:global -clear__Q24_STLt10_List_base2Z13WGridNodeElemZQ33UTL3Stdt9Allocator2Z13WGridNodeElemZ10_type_list = .text:0x8003CD70; // type:function size:0x78 scope:global -reset__t17time_delay_filter1Z18speed_delay_traitsf = .text:0x8003CDE8; // type:function size:0x38 scope:global -get_sample__Ct17time_delay_filter1Z18speed_delay_traitsf = .text:0x8003CE20; // type:function size:0x1A4 scope:global -add_sample__t17time_delay_filter1Z18speed_delay_traitsff = .text:0x8003CFC4; // type:function size:0x17C scope:global -find__H2ZPP10IExplosionZP10IExplosion_4_STLX01X01RCX11_X01 = .text:0x8003D140; // type:function size:0xB0 scope:global -CreateInstance__Q33UTL3COMt7Factory3ZP8ISimableZ6AIGoalZ6UCrc32G6UCrc32P8ISimable = .text:0x8003D1F0; // type:function size:0x60 scope:global -_M_erase__Q24_STLt8_Rb_tree5ZsZsZQ24_STLt9_Identity1ZsZQ24_STLt4less1ZsZQ33UTL3Stdt9Allocator2ZsZ9_type_setPQ24_STLt13_Rb_tree_node1Zs = .text:0x8003D250; // type:function size:0x68 scope:global -_Rotate_left__Q24_STLt10_Rb_global1ZbPQ24_STL18_Rb_tree_node_baseRPQ24_STL18_Rb_tree_node_base = .text:0x8003D2B8; // type:function size:0x60 scope:global -_Rotate_right__Q24_STLt10_Rb_global1ZbPQ24_STL18_Rb_tree_node_baseRPQ24_STL18_Rb_tree_node_base = .text:0x8003D318; // type:function size:0x60 scope:global -_Rebalance__Q24_STLt10_Rb_global1ZbPQ24_STL18_Rb_tree_node_baseRPQ24_STL18_Rb_tree_node_base = .text:0x8003D378; // type:function size:0x168 scope:global -_M_insert__Q24_STLt8_Rb_tree5ZsZsZQ24_STLt9_Identity1ZsZQ24_STLt4less1ZsZQ33UTL3Stdt9Allocator2ZsZ9_type_setPQ24_STL18_Rb_tree_node_baseT1RCsT1 = .text:0x8003D4E0; // type:function size:0x12C scope:global -_M_decrement__Q24_STLt10_Rb_global1ZbPQ24_STL18_Rb_tree_node_base = .text:0x8003D60C; // type:function size:0x70 scope:global -insert_unique__Q24_STLt8_Rb_tree5ZsZsZQ24_STLt9_Identity1ZsZQ24_STLt4less1ZsZQ33UTL3Stdt9Allocator2ZsZ9_type_setRCs = .text:0x8003D67C; // type:function size:0x118 scope:global -reserve__Q24_STLt6vector2ZQ211road_walker12start_recordZQ24_STLt9allocator1ZQ211road_walker12start_recordUi = .text:0x8003D794; // type:function size:0x1B4 scope:global -_M_increment__Q24_STLt10_Rb_global1ZbPQ24_STL18_Rb_tree_node_base = .text:0x8003D948; // type:function size:0x58 scope:global -__less__H1ZQ211road_walker12start_record_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x8003D9A0; // type:function size:0xC scope:global -__adjust_heap__H4ZPQ211road_walker12start_recordZiZQ211road_walker12start_recordZQ24_STLt4less1ZQ211road_walker12start_record_4_STLX01X11X11X21X31_v = .text:0x8003D9AC; // type:function size:0x2A4 scope:global -make_heap__H2ZPQ211road_walker12start_recordZQ24_STLt4less1ZQ211road_walker12start_record_4_STLX01X01X11_v = .text:0x8003DC50; // type:function size:0xEC scope:global -pop_heap__H2ZPQ211road_walker12start_recordZQ24_STLt4less1ZQ211road_walker12start_record_4_STLX01X01X11_v = .text:0x8003DD3C; // type:function size:0x15C scope:global -__partial_sort__H3ZPQ211road_walker12start_recordZQ211road_walker12start_recordZQ24_STLt4less1ZQ211road_walker12start_record_4_STLX01X01X01PX11X21_v = .text:0x8003DE98; // type:function size:0x1D8 scope:global -partial_sort__H2ZPQ211road_walker12start_recordZQ24_STLt4less1ZQ211road_walker12start_record_4_STLX01X01X01X11_v = .text:0x8003E070; // type:function size:0x30 scope:global -__unguarded_partition__H3ZPQ211road_walker12start_recordZQ211road_walker12start_recordZQ24_STLt4less1ZQ211road_walker12start_record_4_STLX01X01X11X21_X01 = .text:0x8003E0A0; // type:function size:0x174 scope:global -__introsort_loop__H4ZPQ211road_walker12start_recordZQ211road_walker12start_recordZiZQ24_STLt4less1ZQ211road_walker12start_record_4_STLX01X01PX11X21X31_v = .text:0x8003E214; // type:function size:0x180 scope:global -__unguarded_linear_insert__H3ZPQ211road_walker12start_recordZQ211road_walker12start_recordZQ24_STLt4less1ZQ211road_walker12start_record_4_STLX01X11X21_v = .text:0x8003E394; // type:function size:0xD8 scope:global -__insertion_sort__H2ZPQ211road_walker12start_recordZQ24_STLt4less1ZQ211road_walker12start_record_4_STLX01X01X11_v = .text:0x8003E46C; // type:function size:0x214 scope:global -__unguarded_insertion_sort_aux__H3ZPQ211road_walker12start_recordZQ211road_walker12start_recordZQ24_STLt4less1ZQ211road_walker12start_record_4_STLX01X01PX11X21_v = .text:0x8003E680; // type:function size:0xB4 scope:global -__final_insertion_sort__H2ZPQ211road_walker12start_recordZQ24_STLt4less1ZQ211road_walker12start_record_4_STLX01X01X11_v = .text:0x8003E734; // type:function size:0x7C scope:global -sort__H1ZPQ211road_walker12start_record_4_STLX01X01_v = .text:0x8003E7B0; // type:function size:0xA0 scope:global -First__Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi1012eVehicleList = .text:0x8003E850; // type:function size:0x30 scope:global -find__H2ZPP14IDebugWatchCarZP14IDebugWatchCar_4_STLX01X01RCX11_X01 = .text:0x8003E880; // type:function size:0xB0 scope:global -find__H2ZPP8ISimableZPC8ISimable_4_STLX01X01RCX11_X01 = .text:0x8003E930; // type:function size:0xB0 scope:global -find__H2ZPP8ISimableZP8ISimable_4_STLX01X01RCX11_X01 = .text:0x8003E9E0; // type:function size:0xB0 scope:global -clear__Q24_STLt10_List_base2ZP8AIActionZQ33UTL3Stdt9Allocator2ZP8AIActionZ10_type_list = .text:0x8003EA90; // type:function size:0x78 scope:global -CreateInstance__Q33UTL3COMt7Factory3ZP14AIActionParamsZ8AIActionZ6UCrc32G6UCrc32P14AIActionParams = .text:0x8003EB08; // type:function size:0x60 scope:global -reserve__Q24_STLt6vector2ZQ29AIPursuit13CopContingentZQ33UTL3Stdt9Allocator2ZQ29AIPursuit13CopContingentZ21_type_AICopContingentUi = .text:0x8003EB68; // type:function size:0x15C scope:global -reserve__Q24_STLt6vector2ZPCQ216PursuitFormation12TargetOffsetZQ33UTL3Stdt9Allocator2ZPCQ216PursuitFormation12TargetOffsetZ42_type_AIPursuitEvenOutOffsetsSourceOffsetsUi = .text:0x8003ECC4; // type:function size:0x11C scope:global -reserve__Q24_STLt6vector2ZfZQ33UTL3Stdt9Allocator2ZfZ44_type_AIPursuitAssignClosestOffsetsDistancesUi = .text:0x8003EDE0; // type:function size:0x11C scope:global -reserve__Q24_STLt6vector2ZfZQ33UTL3Stdt9Allocator2ZfZ43_type_AIPursuitAssignClosestOffsetsMaximumsUi = .text:0x8003EEFC; // type:function size:0x11C scope:global -reserve__Q24_STLt6vector2Z11CopAndAngleZQ33UTL3Stdt9Allocator2Z11CopAndAngleZ37_type_AIPursuitSetupCollapseCopAnglesUi = .text:0x8003F018; // type:function size:0x180 scope:global -reserve__Q24_STLt6vector2ZP10IPursuitAIZQ33UTL3Stdt9Allocator2ZP10IPursuitAIZ16_type_AIPursuersUi = .text:0x8003F198; // type:function size:0x11C scope:global -reserve__Q24_STLt6vector2ZQ25UMath7Vector3ZQ33UTL3Stdt9Allocator2ZQ25UMath7Vector3Z19_type_AIVector3ListUi = .text:0x8003F2B4; // type:function size:0x180 scope:global -reserve__Q24_STLt6vector2ZQ29AIPursuit15FormationTargetZQ33UTL3Stdt9Allocator2ZQ29AIPursuit15FormationTargetZ27_type_AIFormationTargetListUi = .text:0x8003F434; // type:function size:0x1A8 scope:global -__static_initialization_and_destruction_0 = .text:0x8003F5DC; // type:function size:0x24A4 scope:local -VU0_v3unit__FRCQ25UMath7Vector3RQ25UMath7Vector3 = .text:0x80041A80; // type:function size:0x40 scope:global -_._Q33UTL3COM8IUnknown = .text:0x80041AC0; // type:function size:0x54 scope:global -__8bVector3RC8bVector3 = .text:0x80041B14; // type:function size:0x20 scope:global -_IHandle__11IAttachable = .text:0x80041B34; // type:function size:0xC scope:global -_IHandle__8ISimable = .text:0x80041B40; // type:function size:0xC scope:global -push_back__Q23UTLt6Vector2ZQ33UTL11Collections10_KeyedNodei16RCQ33UTL11Collections10_KeyedNode = .text:0x80041B4C; // type:function size:0x158 scope:global -_IHandle__Q23Sim9IActivity = .text:0x80041CA4; // type:function size:0xC scope:global -_._Q23SAPt4Grid1Z11AIAvoidable = .text:0x80041CB0; // type:function size:0x164 scope:global -ClassKey__Q36Attrib3Gen13pursuitlevels = .text:0x80041E14; // type:function size:0xC scope:global -ClassKey__Q36Attrib3Gen17pursuitescalation = .text:0x80041E20; // type:function size:0xC scope:global -_IHandle__10IVehicleAI = .text:0x80041E2C; // type:function size:0xC scope:global -_._10IVehicleAI = .text:0x80041E38; // type:function size:0x54 scope:global -_IHandle__8IHumanAI = .text:0x80041E8C; // type:function size:0xC scope:global -_IHandle__12IPerpetrator = .text:0x80041E98; // type:function size:0xC scope:global -_._12IPerpetrator = .text:0x80041EA4; // type:function size:0x54 scope:global -_IHandle__6IRacer = .text:0x80041EF8; // type:function size:0xC scope:global -_IHandle__8IPursuit = .text:0x80041F04; // type:function size:0xC scope:global -_._8IPursuit = .text:0x80041F10; // type:function size:0x160 scope:global -push_back__Q23UTLt6Vector2ZP8IPursuiti16RCP8IPursuit = .text:0x80042070; // type:function size:0x154 scope:global -_IHandle__10IRoadBlock = .text:0x800421C4; // type:function size:0xC scope:global -_._10IRoadBlock = .text:0x800421D0; // type:function size:0x160 scope:global -push_back__Q23UTLt6Vector2ZP10IRoadBlocki16RCP10IRoadBlock = .text:0x80042330; // type:function size:0x154 scope:global -_IHandle__10IPursuitAI = .text:0x80042484; // type:function size:0xC scope:global -_IHandle__10ITrafficAI = .text:0x80042490; // type:function size:0xC scope:global -_IHandle__14ICollisionBody = .text:0x8004249C; // type:function size:0xC scope:global -_IHandle__5IBody = .text:0x800424A8; // type:function size:0xC scope:global -_IHandle__10IRBVehicle = .text:0x800424B4; // type:function size:0xC scope:global -_IHandle__10IRigidBody = .text:0x800424C0; // type:function size:0xC scope:global -_IHandle__11ITrafficMgr = .text:0x800424CC; // type:function size:0xC scope:global -_._11ITrafficMgr = .text:0x800424D8; // type:function size:0x6C scope:global -__as__Q36Attrib3Gen14trafficpatternRCQ26Attrib8Instance = .text:0x80042544; // type:function size:0x30 scope:global -ClassKey__Q36Attrib3Gen14trafficpattern = .text:0x80042574; // type:function size:0xC scope:global -GetPriority__C8Behavior = .text:0x80042580; // type:function size:0x8 scope:global -OnOwnerAttached__8BehaviorP11IAttachable = .text:0x80042588; // type:function size:0x4 scope:global -OnOwnerDetached__8BehaviorP11IAttachable = .text:0x8004258C; // type:function size:0x4 scope:global -OnTaskSimulate__8Behaviorf = .text:0x80042590; // type:function size:0x4 scope:global -OnBehaviorChange__8BehaviorRC6UCrc32 = .text:0x80042594; // type:function size:0x4 scope:global -OnPause__8Behavior = .text:0x80042598; // type:function size:0x4 scope:global -OnUnPause__8Behavior = .text:0x8004259C; // type:function size:0x4 scope:global -_._8Behavior = .text:0x800425A0; // type:function size:0x74 scope:global -SetMinMax__9TableBaseff = .text:0x80042614; // type:function size:0x2C scope:global -_IHandle__12IInputPlayer = .text:0x80042640; // type:function size:0xC scope:global -_IHandle__6IInput = .text:0x8004264C; // type:function size:0xC scope:global -Default__Q37Physics4Info11Performance = .text:0x80042658; // type:function size:0x18 scope:global -_IHandle__13ITransmission = .text:0x80042670; // type:function size:0xC scope:global -_IHandle__7IEngine = .text:0x8004267C; // type:function size:0xC scope:global -_IHandle__13IVehicleCache = .text:0x80042688; // type:function size:0xC scope:global -_._13IVehicleCache = .text:0x80042694; // type:function size:0x160 scope:global -push_back__Q23UTLt6Vector2ZP13IVehicleCachei16RCP13IVehicleCache = .text:0x800427F4; // type:function size:0x154 scope:global -_IHandle__11ISuspension = .text:0x80042948; // type:function size:0xC scope:global -_IHandle__14ISimpleChopper = .text:0x80042954; // type:function size:0xC scope:global -_IHandle__13IAIHelicopter = .text:0x80042960; // type:function size:0xC scope:global -_IHandle__19IArticulatedVehicle = .text:0x8004296C; // type:function size:0xC scope:global -_._Q43UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10_4List = .text:0x80042978; // type:function size:0xB4 scope:global -_IHandle__8IVehicle = .text:0x80042A2C; // type:function size:0xC scope:global -TypeName__13VehicleParams = .text:0x80042A38; // type:function size:0x64 scope:global -GetBits__C9WRoadLaneii = .text:0x80042A9C; // type:function size:0x18 scope:global -GetBitsSigned__C9WRoadLaneii = .text:0x80042AB4; // type:function size:0x1C scope:global -_._19WRoadNavWithCookies = .text:0x80042AD0; // type:function size:0x74 scope:global -_GetKind__16MSetTrafficSpeed = .text:0x80042B44; // type:function size:0x64 scope:global -_IHandle__7ICopMgr = .text:0x80042BA8; // type:function size:0xC scope:global -_._7ICopMgr = .text:0x80042BB4; // type:function size:0x6C scope:global -GetCacheName__C16AITrafficManager = .text:0x80042C20; // type:function size:0xC scope:global -_._11PartChecker = .text:0x80042C2C; // type:function size:0x34 scope:global -OnModel__11PartCheckerP6IModel = .text:0x80042C60; // type:function size:0x5C scope:global -_IHandle__11IRenderable = .text:0x80042CBC; // type:function size:0xC scope:global -_IHandle__11IDamageable = .text:0x80042CC8; // type:function size:0xC scope:global -_IHandle__6ICause = .text:0x80042CD4; // type:function size:0xC scope:global -_._6ICause = .text:0x80042CE0; // type:function size:0x10C scope:global -_._8AIAction = .text:0x80042DEC; // type:function size:0x74 scope:global -ShouldRestartWhenFinished__8AIAction = .text:0x80042E60; // type:function size:0x8 scope:global -_IHandle__8ICheater = .text:0x80042E68; // type:function size:0xC scope:global -GetSimable__C9AIVehicle = .text:0x80042E74; // type:function size:0x8 scope:global -GetVehicle__C9AIVehicle = .text:0x80042E7C; // type:function size:0x8 scope:global -GetAvoidableList__9AIVehicle = .text:0x80042E84; // type:function size:0x8 scope:global -SetAvoidableRadius__9AIVehiclef = .text:0x80042E8C; // type:function size:0x8 scope:global -GetSplinePath__9AIVehicle = .text:0x80042E94; // type:function size:0x8 scope:global -GetDriveToNav__9AIVehicle = .text:0x80042E9C; // type:function size:0x8 scope:global -GetDrivableToDriveToNav__C9AIVehicle = .text:0x80042EA4; // type:function size:0x8 scope:global -GetDriveSpeed__9AIVehicle = .text:0x80042EAC; // type:function size:0x8 scope:global -SetDriveSpeed__9AIVehiclef = .text:0x80042EB4; // type:function size:0x8 scope:global -SetDriveTarget__9AIVehicleRCQ25UMath7Vector3 = .text:0x80042EBC; // type:function size:0x20 scope:global -GetDriveTarget__9AIVehicle = .text:0x80042EDC; // type:function size:0x8 scope:global -GetDriveFlags__C9AIVehicle = .text:0x80042EE4; // type:function size:0x8 scope:global -ClearDriveFlags__9AIVehicle = .text:0x80042EEC; // type:function size:0xC scope:global -DoReverse__9AIVehicle = .text:0x80042EF8; // type:function size:0x10 scope:global -DoSteering__9AIVehicle = .text:0x80042F08; // type:function size:0x10 scope:global -DoGasBrake__9AIVehicle = .text:0x80042F18; // type:function size:0x10 scope:global -DoDriving__9AIVehicleUi = .text:0x80042F28; // type:function size:0x8 scope:global -GetReverseOverride__9AIVehicle = .text:0x80042F30; // type:function size:0x1C scope:global -GetTarget__C9AIVehicle = .text:0x80042F4C; // type:function size:0x8 scope:global -GetDrivableToTargetPos__C9AIVehicle = .text:0x80042F54; // type:function size:0x8 scope:global -GetLastSpawnTime__9AIVehicle = .text:0x80042F5C; // type:function size:0x8 scope:global -GetAttributes__C9AIVehicle = .text:0x80042F64; // type:function size:0x8 scope:global -GetTopSpeed__C9AIVehicle = .text:0x80042F6C; // type:function size:0x8 scope:global -GetPursuit__9AIVehicle = .text:0x80042F74; // type:function size:0x8 scope:global -GetRoadBlock__9AIVehicle = .text:0x80042F7C; // type:function size:0x8 scope:global -IsCurrentGoal__9AIVehicleRC6UCrc32 = .text:0x80042F84; // type:function size:0x18 scope:global -GetGoalName__9AIVehicle = .text:0x80042F9C; // type:function size:0x8 scope:global -IsCurrentAction__9AIVehicleRC6UCrc32 = .text:0x80042FA4; // type:function size:0x50 scope:global -GetActionName__9AIVehicle = .text:0x80042FF4; // type:function size:0x5C scope:global -GetSkill__C9AIVehicle = .text:0x80043050; // type:function size:0xC scope:global -GetShortcutSkill__C9AIVehicle = .text:0x8004305C; // type:function size:0xC scope:global -GetPercentRaceComplete__C9AIVehicle = .text:0x80043068; // type:function size:0xC scope:global -GetPriority__C9AIVehicle = .text:0x80043074; // type:function size:0x8 scope:global -Reset__9AIVehicle = .text:0x8004307C; // type:function size:0x3C scope:global -IsTetheredToTarget__9AIVehiclePQ33UTL3COM8IUnknown = .text:0x800430B8; // type:function size:0x8 scope:global -IsHiddenFromCars__C13AIPerpVehicle = .text:0x800430C0; // type:function size:0x8 scope:global -IsHiddenFromHelicopters__C13AIPerpVehicle = .text:0x800430C8; // type:function size:0x8 scope:global -GetPendingRepPointsNormal__C13AIPerpVehicle = .text:0x800430D0; // type:function size:0x8 scope:global -GetPendingRepPointsFromCopDestruction__C13AIPerpVehicle = .text:0x800430D8; // type:function size:0x8 scope:global -ClearPendingRepPoints__13AIPerpVehicle = .text:0x800430E0; // type:function size:0x10 scope:global -GetPursuitEscalationAttrib__13AIPerpVehicle = .text:0x800430F0; // type:function size:0x8 scope:global -GetPursuitLevelAttrib__13AIPerpVehicle = .text:0x800430F8; // type:function size:0x8 scope:global -GetPursuitSupportAttrib__13AIPerpVehicle = .text:0x80043100; // type:function size:0x8 scope:global -GetRacerInfo__C13AIPerpVehicle = .text:0x80043108; // type:function size:0x8 scope:global -GetShortcutSkill__C13AIPerpVehicle = .text:0x80043110; // type:function size:0x2C scope:global -Get911CallTime__C13AIPerpVehicle = .text:0x8004313C; // type:function size:0x8 scope:global -SetInPursuit__16AIVehiclePursuitb = .text:0x80043144; // type:function size:0x8 scope:global -GetInPursuit__16AIVehiclePursuit = .text:0x8004314C; // type:function size:0x8 scope:global -SetInFormation__16AIVehiclePursuitb = .text:0x80043154; // type:function size:0x8 scope:global -GetInFormation__16AIVehiclePursuit = .text:0x8004315C; // type:function size:0x8 scope:global -SetInPosition__16AIVehiclePursuitb = .text:0x80043164; // type:function size:0x8 scope:global -GetInPosition__16AIVehiclePursuit = .text:0x8004316C; // type:function size:0x8 scope:global -SetPursuitOffset__16AIVehiclePursuitRCQ25UMath7Vector3 = .text:0x80043174; // type:function size:0x20 scope:global -GetPursuitOffset__C16AIVehiclePursuit = .text:0x80043194; // type:function size:0x8 scope:global -SetInPositionOffset__16AIVehiclePursuitRCQ25UMath7Vector3 = .text:0x8004319C; // type:function size:0x20 scope:global -GetInPositionOffset__C16AIVehiclePursuit = .text:0x800431BC; // type:function size:0x8 scope:global -SetInPositionGoal__16AIVehiclePursuitRC6UCrc32 = .text:0x800431C4; // type:function size:0xC scope:global -GetInPositionGoal__C16AIVehiclePursuit = .text:0x800431D0; // type:function size:0x8 scope:global -SetBreaker__16AIVehiclePursuitb = .text:0x800431D8; // type:function size:0x8 scope:global -GetBreaker__16AIVehiclePursuit = .text:0x800431E0; // type:function size:0x8 scope:global -SetChicken__16AIVehiclePursuitb = .text:0x800431E8; // type:function size:0x8 scope:global -GetChicken__16AIVehiclePursuit = .text:0x800431F0; // type:function size:0x8 scope:global -SetDamagedByPerp__16AIVehiclePursuitb = .text:0x800431F8; // type:function size:0x8 scope:global -GetDamagedByPerp__16AIVehiclePursuit = .text:0x80043200; // type:function size:0x8 scope:global -GetSirenState__C16AIVehiclePursuit = .text:0x80043208; // type:function size:0x8 scope:global -GetTimeSinceTargetSeen__C16AIVehiclePursuit = .text:0x80043210; // type:function size:0x8 scope:global -ZeroTimeSinceTargetSeen__16AIVehiclePursuit = .text:0x80043218; // type:function size:0x10 scope:global -GetSupportGoal__C16AIVehiclePursuit = .text:0x80043228; // type:function size:0x8 scope:global -SetWithinEngagementRadius__16AIVehiclePursuit = .text:0x80043230; // type:function size:0xC scope:global -WasWithinEngagementRadius__C16AIVehiclePursuit = .text:0x8004323C; // type:function size:0x8 scope:global -GetSkill__C15AIVehicleCopCar = .text:0x80043244; // type:function size:0xC scope:global -GetShortcutSkill__C15AIVehicleCopCar = .text:0x80043250; // type:function size:0xC scope:global -_._Q23UTLt6Vector2ZP8IVehiclei16 = .text:0x8004325C; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP8IVehiclei10i16 = .text:0x80043290; // type:function size:0xB4 scope:global -GetNumCops__C9AIPursuit = .text:0x80043344; // type:function size:0x8 scope:global -IsPerpBusted__C9AIPursuit = .text:0x8004334C; // type:function size:0x8 scope:global -AddVehicle__9AIPursuitP8IVehicle = .text:0x80043354; // type:function size:0x38 scope:global -RemoveVehicle__9AIPursuitP8IVehicle = .text:0x8004338C; // type:function size:0x38 scope:global -GetPursuitDuration__C9AIPursuit = .text:0x800433C4; // type:function size:0x8 scope:global -GetEvadeLevel__C9AIPursuit = .text:0x800433CC; // type:function size:0x8 scope:global -GetCoolDownTimeRemaining__C9AIPursuit = .text:0x800433D4; // type:function size:0x8 scope:global -GetCoolDownTimeRequired__C9AIPursuit = .text:0x800433DC; // type:function size:0x14 scope:global -GetBackupETA__C9AIPursuit = .text:0x800433F0; // type:function size:0x8 scope:global -IsPerpInSight__C9AIPursuit = .text:0x800433F8; // type:function size:0x8 scope:global -IsPursuitBailed__C9AIPursuit = .text:0x80043400; // type:function size:0x8 scope:global -IsCollapseActive__C9AIPursuit = .text:0x80043408; // type:function size:0x8 scope:global -AttemptingToReAquire__C9AIPursuit = .text:0x80043410; // type:function size:0x30 scope:global -GetLastKnownLocation__C9AIPursuit = .text:0x80043440; // type:function size:0x8 scope:global -GetRoadBlock__C9AIPursuit = .text:0x80043448; // type:function size:0x8 scope:global -GetNearestCopInRoadblock__9AIPursuitPf = .text:0x80043450; // type:function size:0x18 scope:global -GetNumCopsDestroyed__C9AIPursuit = .text:0x80043468; // type:function size:0x8 scope:global -GetNumCopsDamaged__C9AIPursuit = .text:0x80043470; // type:function size:0x8 scope:global -GetTotalNumCopsInvolved__C9AIPursuit = .text:0x80043478; // type:function size:0x8 scope:global -GetNumCopsFullyEngaged__C9AIPursuit = .text:0x80043480; // type:function size:0x8 scope:global -NotifyRoadblockDodged__9AIPursuit = .text:0x80043488; // type:function size:0x10 scope:global -NotifyRoadblockDeployed__9AIPursuit = .text:0x80043498; // type:function size:0x10 scope:global -NotifyPropertyDamaged__9AIPursuiti = .text:0x800434A8; // type:function size:0x1C scope:global -NotifyTrafficCarHit__9AIPursuit = .text:0x800434C4; // type:function size:0x10 scope:global -NotifySpikeStripsDodged__9AIPursuiti = .text:0x800434D4; // type:function size:0x10 scope:global -NotifySpikeStripDeployed__9AIPursuit = .text:0x800434E4; // type:function size:0x10 scope:global -NotifyHeliSpikeStripDeployed__9AIPursuiti = .text:0x800434F4; // type:function size:0x10 scope:global -NotifyCopCarDeployed__9AIPursuit = .text:0x80043504; // type:function size:0x10 scope:global -NotifySupportVehicleDeployed__9AIPursuit = .text:0x80043514; // type:function size:0x10 scope:global -GetNumRoadblocksDodged__C9AIPursuit = .text:0x80043524; // type:function size:0x8 scope:global -GetNumRoadblocksDeployed__C9AIPursuit = .text:0x8004352C; // type:function size:0x8 scope:global -GetValueOfPropertyDamaged__C9AIPursuit = .text:0x80043534; // type:function size:0x8 scope:global -GetNumPropertyDamaged__C9AIPursuit = .text:0x8004353C; // type:function size:0x8 scope:global -GetNumTrafficCarsHit__C9AIPursuit = .text:0x80043544; // type:function size:0x8 scope:global -GetNumSpikeStripsDodged__C9AIPursuit = .text:0x8004354C; // type:function size:0x8 scope:global -GetNumSpikeStripsDeployed__C9AIPursuit = .text:0x80043554; // type:function size:0x8 scope:global -GetNumHeliSpikeStripDeployed__C9AIPursuit = .text:0x8004355C; // type:function size:0x8 scope:global -GetNumCopCarsDeployed__C9AIPursuit = .text:0x80043564; // type:function size:0x8 scope:global -GetNumSupportVehiclesDeployed__C9AIPursuit = .text:0x8004356C; // type:function size:0x8 scope:global -GetPursuitStatus__C9AIPursuit = .text:0x80043574; // type:function size:0x8 scope:global -GetTimeToBackupSpawned__C9AIPursuit = .text:0x8004357C; // type:function size:0x8 scope:global -PendingRoadBlockRequest__C9AIPursuit = .text:0x80043584; // type:function size:0x8 scope:global -GetNumHeliSpawns__C9AIPursuit = .text:0x8004358C; // type:function size:0x8 scope:global -GetCopDestroyedBonusMultiplier__C9AIPursuit = .text:0x80043594; // type:function size:0x8 scope:global -GetMostRecentCopDestroyedRepPoints__C9AIPursuit = .text:0x8004359C; // type:function size:0x8 scope:global -GetMostRecentCopDestroyedType__C9AIPursuit = .text:0x800435A4; // type:function size:0x10 scope:global -GetNumCopsInWave__C9AIPursuit = .text:0x800435B4; // type:function size:0x8 scope:global -GetNumCopsRemainingInWave__C9AIPursuit = .text:0x800435BC; // type:function size:0x18 scope:global -PursuitMeterCanShowBusted__C9AIPursuit = .text:0x800435D4; // type:function size:0x34 scope:global -GetIsAJerk__C9AIPursuit = .text:0x80043608; // type:function size:0x8 scope:global -GetMinDistanceToTarget__C9AIPursuit = .text:0x80043610; // type:function size:0x8 scope:global -SetBustedTimerToZero__9AIPursuit = .text:0x80043618; // type:function size:0x10 scope:global -GetEnterSafehouseOnDone__9AIPursuit = .text:0x80043628; // type:function size:0x8 scope:global -SetPursuit__11AIRoadBlockP8IPursuit = .text:0x80043630; // type:function size:0x84 scope:global -GetPursuit__11AIRoadBlock = .text:0x800436B4; // type:function size:0x8 scope:global -SetDodged__11AIRoadBlockb = .text:0x800436BC; // type:function size:0x8 scope:global -GetDodged__11AIRoadBlock = .text:0x800436C4; // type:function size:0x8 scope:global -IncNumCopsDestroyed__11AIRoadBlock = .text:0x800436CC; // type:function size:0x10 scope:global -GetNumCopsDestroyed__11AIRoadBlock = .text:0x800436DC; // type:function size:0x8 scope:global -IncNumCopsDamaged__11AIRoadBlock = .text:0x800436E4; // type:function size:0x10 scope:global -GetNumCopsDamaged__11AIRoadBlock = .text:0x800436F4; // type:function size:0x8 scope:global -GetRoadBlockCentre__11AIRoadBlock = .text:0x800436FC; // type:function size:0x8 scope:global -GetRoadBlockDir__11AIRoadBlock = .text:0x80043704; // type:function size:0x8 scope:global -SetRoadBlockCentre__11AIRoadBlockRCQ25UMath7Vector3T1 = .text:0x8004370C; // type:function size:0x3C scope:global -GetNumSpikeStrips__11AIRoadBlock = .text:0x80043748; // type:function size:0x8 scope:global -GetVehicles__C11AIRoadBlock = .text:0x80043750; // type:function size:0x8 scope:global -GetSmackables__C11AIRoadBlock = .text:0x80043758; // type:function size:0x8 scope:global -IsPerpCheating__C11AIRoadBlock = .text:0x80043760; // type:function size:0x8 scope:global -_GetKind__11MUnspawnCop = .text:0x80043768; // type:function size:0x64 scope:global -_GetKind__20MSetCopAutoSpawnMode = .text:0x800437CC; // type:function size:0x64 scope:global -_GetKind__15MSetCopsEnabled = .text:0x80043830; // type:function size:0x64 scope:global -_GetKind__18MForcePursuitStart = .text:0x80043894; // type:function size:0x64 scope:global -_GetKind__16MNotifyPlayerRep = .text:0x800438F8; // type:function size:0x64 scope:global -_GetKind__13MReqRoadBlock = .text:0x8004395C; // type:function size:0x64 scope:global -_GetKind__10MReqBackup = .text:0x800439C0; // type:function size:0x64 scope:global -_GetKind__16MBreakerStopCops = .text:0x80043A24; // type:function size:0x64 scope:global -_GetKind__12MPerpEscaped = .text:0x80043A88; // type:function size:0x64 scope:global -_GetKind__18MControlPathfinder = .text:0x80043AEC; // type:function size:0x64 scope:global -_IHandle__11IReputation = .text:0x80043B50; // type:function size:0xC scope:global -GetCacheName__C12AICopManager = .text:0x80043B5C; // type:function size:0xC scope:global -GetLockoutTimeRemaining__C12AICopManager = .text:0x80043B68; // type:function size:0x8 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z20MSetCopAutoSpawnModeZ12AICopManagerZ12AICopManagerPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x80043B70; // type:function size:0x88 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z15MSetCopsEnabledZ12AICopManagerZ12AICopManagerPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x80043BF8; // type:function size:0x88 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z16MBreakerStopCopsZ12AICopManagerZ12AICopManagerPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x80043C80; // type:function size:0x88 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z18MForcePursuitStartZ12AICopManagerZ12AICopManagerPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x80043D08; // type:function size:0x88 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP8IVehiclei16Ui = .text:0x80043D90; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP8IVehiclei16Ui = .text:0x80043D94; // type:function size:0x20 scope:global -reserve__Q23UTLt6Vector2ZP8IVehiclei16Ui = .text:0x80043DB4; // type:function size:0x14C scope:global -_._12AIActionNone = .text:0x80043F00; // type:function size:0x74 scope:global -CanBeAttempted__12AIActionNonef = .text:0x80043F74; // type:function size:0x8 scope:global -IsFinished__12AIActionNone = .text:0x80043F7C; // type:function size:0x8 scope:global -BeginAction__12AIActionNonef = .text:0x80043F84; // type:function size:0x4 scope:global -FinishAction__12AIActionNonef = .text:0x80043F88; // type:function size:0x4 scope:global -Update__12AIActionNonef = .text:0x80043F8C; // type:function size:0x4 scope:global -OnBehaviorChange__12AIActionNoneRC6UCrc32 = .text:0x80043F90; // type:function size:0x4 scope:global -_._18AIActionTooDamaged = .text:0x80043F94; // type:function size:0x74 scope:global -IsFinished__18AIActionTooDamaged = .text:0x80044008; // type:function size:0x8 scope:global -_._18AIActionGetUnstuck = .text:0x80044010; // type:function size:0x74 scope:global -BeginAction__18AIActionGetUnstuckf = .text:0x80044084; // type:function size:0x4 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z16MSetTrafficSpeedZ15AIActionTrafficZ15AIActionTrafficPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x80044088; // type:function size:0x88 scope:global -_._22AIActionPursuitOffRoad = .text:0x80044110; // type:function size:0x74 scope:global -_._19AIActionHeliPursuit = .text:0x80044184; // type:function size:0xA4 scope:global -CanBeAttempted__19AIActionHeliPursuitf = .text:0x80044228; // type:function size:0x8 scope:global -OnBehaviorChange__19AIActionHeliPursuitRC6UCrc32 = .text:0x80044230; // type:function size:0x4 scope:global -ShouldRestartWhenFinished__19AIActionHeliPursuit = .text:0x80044234; // type:function size:0x8 scope:global -_._16AIActionHeliExit = .text:0x8004423C; // type:function size:0x74 scope:global -CanBeAttempted__16AIActionHeliExitf = .text:0x800442B0; // type:function size:0x8 scope:global -OnBehaviorChange__16AIActionHeliExitRC6UCrc32 = .text:0x800442B8; // type:function size:0x4 scope:global -ShouldRestartWhenFinished__16AIActionHeliExit = .text:0x800442BC; // type:function size:0x8 scope:global -_._17AIActionHeadOnRam = .text:0x800442C4; // type:function size:0x74 scope:global -_._11AIActionRam = .text:0x80044338; // type:function size:0x74 scope:global -_._17AIActionStopShort = .text:0x800443AC; // type:function size:0x74 scope:global -BeginAction__17AIActionStopShortf = .text:0x80044420; // type:function size:0x4 scope:global -FinishAction__17AIActionStopShortf = .text:0x80044424; // type:function size:0x4 scope:global -_._14AIActionSpline = .text:0x80044428; // type:function size:0x74 scope:global -CanBeAttempted__14AIActionSplinef = .text:0x8004449C; // type:function size:0x8 scope:global -IsFinished__14AIActionSpline = .text:0x800444A4; // type:function size:0x8 scope:global -BeginAction__14AIActionSplinef = .text:0x800444AC; // type:function size:0x4 scope:global -FinishAction__14AIActionSplinef = .text:0x800444B0; // type:function size:0x4 scope:global -OnBehaviorChange__14AIActionSplineRC6UCrc32 = .text:0x800444B4; // type:function size:0x4 scope:global -_._14AIActionStrafe = .text:0x800444B8; // type:function size:0x74 scope:global -CanBeAttempted__14AIActionStrafef = .text:0x8004452C; // type:function size:0x8 scope:global -IsFinished__14AIActionStrafe = .text:0x80044534; // type:function size:0x8 scope:global -BeginAction__14AIActionStrafef = .text:0x8004453C; // type:function size:0x4 scope:global -FinishAction__14AIActionStrafef = .text:0x80044540; // type:function size:0x4 scope:global -OnBehaviorChange__14AIActionStrafeRC6UCrc32 = .text:0x80044544; // type:function size:0x4 scope:global -_._16AIActionAirborne = .text:0x80044548; // type:function size:0x74 scope:global -BeginAction__16AIActionAirbornef = .text:0x800445BC; // type:function size:0x4 scope:global -FinishAction__16AIActionAirbornef = .text:0x800445C0; // type:function size:0x4 scope:global -_GetKind__10MJackKnife = .text:0x800445C4; // type:function size:0x64 scope:global -_._17AIActionJackKnife = .text:0x80044628; // type:function size:0xA0 scope:global -IsFinished__17AIActionJackKnife = .text:0x800446C8; // type:function size:0x8 scope:global -BeginAction__17AIActionJackKnifef = .text:0x800446D0; // type:function size:0x4 scope:global -FinishAction__17AIActionJackKnifef = .text:0x800446D4; // type:function size:0x4 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z10MJackKnifeZ17AIActionJackKnifeZ17AIActionJackKnifePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800446D8; // type:function size:0x88 scope:global -_._23AIActionStaticRoadBlock = .text:0x80044760; // type:function size:0x74 scope:global -IsFinished__23AIActionStaticRoadBlock = .text:0x800447D4; // type:function size:0x8 scope:global -IsFinished__12AIActionRace = .text:0x800447DC; // type:function size:0x8 scope:global -_._14AIVehicleEmpty = .text:0x800447E4; // type:function size:0x8C scope:global -Update__14AIVehicleEmptyf = .text:0x80044870; // type:function size:0x20 scope:global -OnDebugDraw__14AIVehicleEmpty = .text:0x80044890; // type:function size:0x4 scope:global -IsPlayerSteering__14AIVehicleHuman = .text:0x80044894; // type:function size:0x3C scope:global -GetAiControl__14AIVehicleHuman = .text:0x800448D0; // type:function size:0x8 scope:global -SetWorldMoment__14AIVehicleHumanRCQ25UMath7Vector3f = .text:0x800448D8; // type:function size:0x24 scope:global -GetWorldMomentPosition__14AIVehicleHuman = .text:0x800448FC; // type:function size:0x8 scope:global -GetWorldMomentRadius__14AIVehicleHuman = .text:0x80044904; // type:function size:0x8 scope:global -ClearWorldMoment__14AIVehicleHuman = .text:0x8004490C; // type:function size:0x10 scope:global -GetSkill__C14AIVehicleHuman = .text:0x8004491C; // type:function size:0xC scope:global -IsFacingWrongWay__C14AIVehicleHuman = .text:0x80044928; // type:function size:0x8 scope:global -GetCatchupCheat__C14AIVehicleHuman = .text:0x80044930; // type:function size:0xC scope:global -_GetKind__11MPerpBusted = .text:0x8004493C; // type:function size:0x64 scope:global -__Q33UTL3Stdt3set2ZsZ9_type_set = .text:0x800449A0; // type:function size:0x74 scope:global -_._Q23UTLt6Vector2ZUii16 = .text:0x80044A14; // type:function size:0x34 scope:global -_._Q23UTLt10FastVector2ZUii16 = .text:0x80044A48; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZUii16Ui = .text:0x80044AFC; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt6Vector2ZUii16Ui = .text:0x80044B00; // type:function size:0x20 scope:global -reserve__Q23UTLt6Vector2ZUii16Ui = .text:0x80044B20; // type:function size:0x14C scope:global -_._27AdaptivePIDControllerSimple = .text:0x80044C6C; // type:function size:0x94 scope:global -_._32AdaptivePIDControllerComplicated = .text:0x80044D00; // type:function size:0x68 scope:global -GetTerm__32AdaptivePIDControllerComplicated8ePIDTerm = .text:0x80044D68; // type:function size:0x10 scope:global -GetDesiredHeightOverDest__C19AIVehicleHelicopter = .text:0x80044D78; // type:function size:0x8 scope:global -SetDesiredHeightOverDest__19AIVehicleHelicopterf = .text:0x80044D80; // type:function size:0x8 scope:global -SetLookAtPosition__19AIVehicleHelicopterGQ25UMath7Vector3 = .text:0x80044D88; // type:function size:0x20 scope:global -GetLookAtPosition__C19AIVehicleHelicopter = .text:0x80044DA8; // type:function size:0x24 scope:global -StrafeToDestIsSet__C19AIVehicleHelicopter = .text:0x80044DCC; // type:function size:0x8 scope:global -SetStrafeToDest__19AIVehicleHelicopterb = .text:0x80044DD4; // type:function size:0x8 scope:global -GetHeliSheetCoord__C19AIVehicleHelicopter = .text:0x80044DDC; // type:function size:0x8 scope:global -GetFuelTimeRemaining__19AIVehicleHelicopter = .text:0x80044DE4; // type:function size:0x8 scope:global -SetShadowScale__19AIVehicleHelicopterf = .text:0x80044DEC; // type:function size:0x8 scope:global -GetShadowScale__19AIVehicleHelicopter = .text:0x80044DF4; // type:function size:0x8 scope:global -SetDustStormIntensity__19AIVehicleHelicopterf = .text:0x80044DFC; // type:function size:0x8 scope:global -GetDustStormIntensity__19AIVehicleHelicopter = .text:0x80044E04; // type:function size:0x8 scope:global -push_back__Q23UTLt6Vector2ZP8ISimablei16RCP8ISimable = .text:0x80044E0C; // type:function size:0x154 scope:global -_._10AIGoalNone = .text:0x80044F60; // type:function size:0x68 scope:global -Construct__10AIGoalNoneP8ISimable = .text:0x80044FC8; // type:function size:0x44 scope:global -_._13AIGoalTraffic = .text:0x8004500C; // type:function size:0x68 scope:global -Construct__13AIGoalTrafficP8ISimable = .text:0x80045074; // type:function size:0x44 scope:global -_._12AIGoalPatrol = .text:0x800450B8; // type:function size:0x68 scope:global -Construct__12AIGoalPatrolP8ISimable = .text:0x80045120; // type:function size:0x44 scope:global -Construct__13AIGoalPursuitP8ISimable = .text:0x80045164; // type:function size:0x44 scope:global -_._15AIGoalStopShort = .text:0x800451A8; // type:function size:0x68 scope:global -Construct__15AIGoalStopShortP8ISimable = .text:0x80045210; // type:function size:0x44 scope:global -_._9AIGoalRam = .text:0x80045254; // type:function size:0x68 scope:global -Construct__9AIGoalRamP8ISimable = .text:0x800452BC; // type:function size:0x44 scope:global -_._9AIGoalPit = .text:0x80045300; // type:function size:0x68 scope:global -Construct__9AIGoalPitP8ISimable = .text:0x80045368; // type:function size:0x44 scope:global -Construct__14AIGoalPullOverP8ISimable = .text:0x800453AC; // type:function size:0x44 scope:global -_._15AIGoalHeadOnRam = .text:0x800453F0; // type:function size:0x68 scope:global -Construct__15AIGoalHeadOnRamP8ISimable = .text:0x80045458; // type:function size:0x44 scope:global -Construct__21AIGoalStaticRoadBlockP8ISimable = .text:0x8004549C; // type:function size:0x44 scope:global -_._17AIGoalFleePursuit = .text:0x800454E0; // type:function size:0x68 scope:global -Construct__17AIGoalFleePursuitP8ISimable = .text:0x80045548; // type:function size:0x44 scope:global -_._17AIGoalHeliPursuit = .text:0x8004558C; // type:function size:0x68 scope:global -Construct__17AIGoalHeliPursuitP8ISimable = .text:0x800455F4; // type:function size:0x44 scope:global -_._14AIGoalHeliExit = .text:0x80045638; // type:function size:0x68 scope:global -Construct__14AIGoalHeliExitP8ISimable = .text:0x800456A0; // type:function size:0x44 scope:global -_._11AIGoalRacer = .text:0x800456E4; // type:function size:0x5C scope:global -Construct__11AIGoalRacerP8ISimable = .text:0x80045740; // type:function size:0x44 scope:global -_GetKind__20MNotifyPursuitLength = .text:0x80045784; // type:function size:0x64 scope:global -Update__16PursuitFormationfP8IPursuit = .text:0x800457E8; // type:function size:0x4 scope:global -GetFinisherTolerance__16PursuitFormation = .text:0x800457EC; // type:function size:0xC scope:global -GetFinisherTime__16PursuitFormation = .text:0x800457F8; // type:function size:0xC scope:global -GetTimeToFinisher__16PursuitFormation = .text:0x80045804; // type:function size:0xC scope:global -_._14BoxInFormation = .text:0x80045810; // type:function size:0x5C scope:global -GetFinisherTime__14BoxInFormation = .text:0x8004586C; // type:function size:0x8 scope:global -_._21RollingBlockFormation = .text:0x80045874; // type:function size:0x5C scope:global -GetFinisherTime__21RollingBlockFormation = .text:0x800458D0; // type:function size:0x8 scope:global -_._15FollowFormation = .text:0x800458D8; // type:function size:0x5C scope:global -_._22StaggerFollowFormation = .text:0x80045934; // type:function size:0x5C scope:global -_._12PitFormation = .text:0x80045990; // type:function size:0x5C scope:global -GetTimeToFinisher__12PitFormation = .text:0x800459EC; // type:function size:0xC scope:global -GetFinisherTolerance__12PitFormation = .text:0x800459F8; // type:function size:0xC scope:global -_._13HerdFormation = .text:0x80045A04; // type:function size:0x5C scope:global -SegmentSphereIntersect__Q22AI4MathRCQ25UMath7Vector3N21fRQ25UMath7Vector3 = .text:0x80045A60; // type:function size:0x194 scope:global -AllocVectorSpace__Q23UTLt10FastVector2ZUii16UiUi = .text:0x80045BF4; // type:function size:0x34 scope:global -FreeVectorSpace__Q23UTLt10FastVector2ZUii16PUiUi = .text:0x80045C28; // type:function size:0x34 scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZUii16 = .text:0x80045C5C; // type:function size:0xC scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP8IVehiclei10i16UiUi = .text:0x80045C68; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP8IVehiclei10i16PP8IVehicleUi = .text:0x80045C70; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP8IVehiclei10i16Ui = .text:0x80045C74; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP8IVehiclei10i16 = .text:0x80045C7C; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP8IVehiclei16 = .text:0x80045C84; // type:function size:0xC scope:global -CalcIndexMultiplier__9TableBase = .text:0x80045C90; // type:function size:0x4C scope:global -OnGrowRequest__Q23UTLt6Vector2ZP8ISimablei16Ui = .text:0x80045CDC; // type:function size:0x4 scope:global -_._Q23UTLt11FixedVector3ZP8ISimablei10i16 = .text:0x80045CE0; // type:function size:0xB4 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP8ISimablei10i16UiUi = .text:0x80045D94; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP8ISimablei10i16PP8ISimableUi = .text:0x80045D9C; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP8ISimablei10i16Ui = .text:0x80045DA0; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP8ISimablei10i16 = .text:0x80045DA8; // type:function size:0x8 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP8ISimablei16Ui = .text:0x80045DB0; // type:function size:0x20 scope:global -_._Q23UTLt6Vector2ZP8ISimablei16 = .text:0x80045DD0; // type:function size:0x34 scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP8ISimablei16 = .text:0x80045E04; // type:function size:0xC scope:global -_GLOBAL_.I._16AITrafficManager.mTrafficMinSpawnDist = .text:0x80045E10; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x80045E3C; // type:label scope:local -__9CAnimBank = .text:0x80045E3C; // type:function size:0x44 scope:global -_._9CAnimBank = .text:0x80045E80; // type:function size:0x34 scope:global -GetNextAnimBank__FPCQ25EAGL413DynamicLoaderRi = .text:0x80045EB4; // type:function size:0x40 scope:global -GetFirstAnimBank__FPCQ25EAGL413DynamicLoader = .text:0x80045EF4; // type:function size:0x2C scope:global -Initialize__9CAnimBankPci = .text:0x80045F20; // type:function size:0xB8 scope:global -Cleanup__9CAnimBank = .text:0x80045FD8; // type:function size:0x94 scope:global -InitAnimBankSlotPool__Fv = .text:0x8004606C; // type:function size:0x64 scope:global -CloseAnimBankSlotPool__Fv = .text:0x800460D0; // type:function size:0x40 scope:global -__nw__12CNFSAnimBankUiPCc = .text:0x80046110; // type:function size:0x3C scope:global -__dl__12CNFSAnimBankPv = .text:0x8004614C; // type:function size:0x54 scope:global -__12CNFSAnimBankP6bChunk = .text:0x800461A0; // type:function size:0x44 scope:global -_._12CNFSAnimBank = .text:0x800461E4; // type:function size:0x50 scope:global -DumpAnimBanks__Fv = .text:0x80046234; // type:function size:0x78 scope:global -GetAnimFromBankByNamehash__FUiPPQ29EAGL4Anim8AnimBankPi = .text:0x800462AC; // type:function size:0xA0 scope:global -LoaderEAGLAnimations__FP6bChunk = .text:0x8004634C; // type:function size:0xAC scope:global -UnloaderEAGLAnimations__FP6bChunk = .text:0x800463F8; // type:function size:0xA8 scope:global -GetSceneMomentMarkerType__18CAnimCandidateDataUi = .text:0x800464A0; // type:function size:0x48 scope:global -GetMomentMarkerName__18CAnimCandidateDatai = .text:0x800464E8; // type:function size:0x28 scope:global -GetClosestMarker__18CAnimCandidateDataUiR8bVector3PiPfUs = .text:0x80046510; // type:function size:0x178 scope:global -ChooseArrestAnimation__FPiPci = .text:0x80046688; // type:function size:0x398 scope:global -ChooseArrestLocation__FRQ25UMath7Vector3Rf = .text:0x80046A20; // type:function size:0x284 scope:global -__19NISListenerActivity = .text:0x80046CA4; // type:function size:0x124 scope:global -_._19NISListenerActivity = .text:0x80046DC8; // type:function size:0xC8 scope:global -ArrestLevel__19NISListenerActivityi = .text:0x80046E90; // type:function size:0x4 scope:global -MessageBusted__19NISListenerActivityRC11MPerpBusted = .text:0x80046E94; // type:function size:0x1A8 scope:global -__12CAnimChooser = .text:0x8004703C; // type:function size:0x14 scope:global -_._12CAnimChooser = .text:0x80047050; // type:function size:0x34 scope:global -__9CAnimCtrl = .text:0x80047084; // type:function size:0x3C scope:global -_._9CAnimCtrl = .text:0x800470C0; // type:function size:0x4C scope:global -InitAnimCtrls__Fv = .text:0x8004710C; // type:function size:0x4C scope:global -__nw__9CAnimCtrlUiPCc = .text:0x80047158; // type:function size:0x28 scope:global -__dl__9CAnimCtrlPv = .text:0x80047180; // type:function size:0x2C scope:global -Purge__9CAnimCtrl = .text:0x800471AC; // type:function size:0x34 scope:global -Clear__9CAnimCtrl = .text:0x800471E0; // type:function size:0x88 scope:global -Cleanup__9CAnimCtrl = .text:0x80047268; // type:function size:0x7C scope:global -SetLoopRange__9CAnimCtrlUiUi = .text:0x800472E4; // type:function size:0x74 scope:global -CreateFnAnimFromBank__9CAnimCtrlPQ29EAGL4Anim8AnimBankii = .text:0x80047358; // type:function size:0x80 scope:global -CreateFnAnimFromNamehash__9CAnimCtrlUii = .text:0x800473D8; // type:function size:0x78 scope:global -AdvanceAnimTime__9CAnimCtrlf = .text:0x80047450; // type:function size:0x294 scope:global -UpdateAnimPose__9CAnimCtrlb = .text:0x800476E4; // type:function size:0x1A0 scope:global -LoadSceneCandidateData__FP6bChunk = .text:0x80047884; // type:function size:0x220 scope:global -UnloadSceneCandidateData__FP6bChunk = .text:0x80047AA4; // type:function size:0x2C scope:global -LoadSceneLoadData__FP6bChunk = .text:0x80047AD0; // type:function size:0x64 scope:global -UnloadSceneLoadData__FP6bChunk = .text:0x80047B34; // type:function size:0x2C scope:global -LoaderAnimDirectoryData__FP6bChunk = .text:0x80047B60; // type:function size:0xAC scope:global -UnloaderAnimDirectoryData__FP6bChunk = .text:0x80047C0C; // type:function size:0xAC scope:global -InitNFSAnimEngine__Fv = .text:0x80047CB8; // type:function size:0x2C scope:global -MyEAGLMallocOverride__FUiPCc = .text:0x80047CE4; // type:function size:0x6C scope:global -MyEAGLFreeOverride__FPvUi = .text:0x80047D50; // type:function size:0x20 scope:global -Init__18CAnimEngineManager = .text:0x80047D70; // type:function size:0x44 scope:global -CreateAnimEntity__18CAnimEntityFactoryi = .text:0x80047DB4; // type:function size:0x58 scope:global -EndianSwapEntityData__18CAnimEntityFactoryPvi = .text:0x80047E0C; // type:function size:0x6C scope:global -InitCharacterEffects__Fv = .text:0x80047E78; // type:function size:0x3C scope:global -CloseCharacterEffects__Fv = .text:0x80047EB4; // type:function size:0x10 scope:global -EndianSwapEntityData__25CBasicCharacterAnimEntityPvi = .text:0x80047EC4; // type:function size:0xC8 scope:global -__25CBasicCharacterAnimEntity = .text:0x80047F8C; // type:function size:0x50 scope:global -_._25CBasicCharacterAnimEntity = .text:0x80047FDC; // type:function size:0x58 scope:global -Init__25CBasicCharacterAnimEntityPvP9SpaceNode = .text:0x80048034; // type:function size:0x478 scope:global -Purge__25CBasicCharacterAnimEntity = .text:0x800484AC; // type:function size:0x8C scope:global -SetTime__25CBasicCharacterAnimEntityf = .text:0x80048538; // type:function size:0x50 scope:global -UpdateTimeStep__25CBasicCharacterAnimEntityf = .text:0x80048588; // type:function size:0x2C0 scope:global -RenderEffects__25CBasicCharacterAnimEntityP5eViewi = .text:0x80048848; // type:function size:0x3B4 scope:global -FindWorldBonePosition__25CBasicCharacterAnimEntityiP8bVector3 = .text:0x80048BFC; // type:function size:0xBC scope:global -EndianSwapEntityData__15CPropAnimEntityPvi = .text:0x80048CB8; // type:function size:0x60 scope:global -__15CPropAnimEntity = .text:0x80048D18; // type:function size:0x30 scope:global -_._15CPropAnimEntity = .text:0x80048D48; // type:function size:0x58 scope:global -Init__15CPropAnimEntityPvP9SpaceNode = .text:0x80048DA0; // type:function size:0xC4 scope:global -Purge__15CPropAnimEntity = .text:0x80048E64; // type:function size:0x54 scope:global -SetTime__15CPropAnimEntityf = .text:0x80048EB8; // type:function size:0x4 scope:global -UpdateTimeStep__15CPropAnimEntityf = .text:0x80048EBC; // type:function size:0x4 scope:global -__nw__16CWorldAnimEntityUiPCc = .text:0x80048EC0; // type:function size:0x4C scope:global -__dl__16CWorldAnimEntityPv = .text:0x80048F0C; // type:function size:0x3C scope:global -__nw__20CWorldAnimEntityTreeUiPCc = .text:0x80048F48; // type:function size:0x4C scope:global -__dl__20CWorldAnimEntityTreePv = .text:0x80048F94; // type:function size:0x3C scope:global -__nw__23WorldAnimEntityTreeInfoUiPCc = .text:0x80048FD0; // type:function size:0x4C scope:global -__dl__23WorldAnimEntityTreeInfoPv = .text:0x8004901C; // type:function size:0x3C scope:global -EndianSwapEntityData__16CWorldAnimEntityPvi = .text:0x80049058; // type:function size:0x6C scope:global -__16CWorldAnimEntity = .text:0x800490C4; // type:function size:0x30 scope:global -_._16CWorldAnimEntity = .text:0x800490F4; // type:function size:0x58 scope:global -GetAnimChannelHash__FUiUi = .text:0x8004914C; // type:function size:0x6C scope:global -Init__16CWorldAnimEntityPvP9SpaceNode = .text:0x800491B8; // type:function size:0x390 scope:global -Purge__16CWorldAnimEntity = .text:0x80049548; // type:function size:0x8C scope:global -Play__16CWorldAnimEntity = .text:0x800495D4; // type:function size:0x2C scope:global -Pause__16CWorldAnimEntity = .text:0x80049600; // type:function size:0x2C scope:global -Stop__16CWorldAnimEntity = .text:0x8004962C; // type:function size:0x2C scope:global -IsPlaying__16CWorldAnimEntity = .text:0x80049658; // type:function size:0x28 scope:global -SetTime__16CWorldAnimEntityf = .text:0x80049680; // type:function size:0x68 scope:global -UpdateTimeStep__16CWorldAnimEntityf = .text:0x800496E8; // type:function size:0x118 scope:global -CompareParentIndex__FP6bPNodeT0 = .text:0x80049800; // type:function size:0x2C scope:global -__23WorldAnimEntityTreeInfoUiRt6bPList1Z19WorldAnimEntityInfoP19WorldAnimNamedRange = .text:0x8004982C; // type:function size:0xB0 scope:global -__20CWorldAnimEntityTree = .text:0x800498DC; // type:function size:0x34 scope:global -_._20CWorldAnimEntityTree = .text:0x80049910; // type:function size:0xEC scope:global -_._23WorldAnimEntityTreeInfo = .text:0x800499FC; // type:function size:0xA8 scope:global -LoaderWorldAnimTreeMarker__FP6bChunk = .text:0x80049AA4; // type:function size:0x22C scope:global -UnloaderWorldAnimTreeMarker__FP6bChunk = .text:0x80049CD0; // type:function size:0x74 scope:global -LoaderWorldAnimEntityData__FP6bChunk = .text:0x80049D44; // type:function size:0xE0 scope:global -UnloaderWorldAnimEntityData__FP6bChunk = .text:0x80049E24; // type:function size:0xBC scope:global -LoaderWorldAnimDirectoryData__FP6bChunk = .text:0x80049EE0; // type:function size:0x160 scope:global -UnloaderWorldAnimDirectoryData__FP6bChunk = .text:0x8004A040; // type:function size:0xBC scope:global -SetTime__20CWorldAnimEntityTreef = .text:0x8004A0FC; // type:function size:0x68 scope:global -Pause__20CWorldAnimEntityTree = .text:0x8004A164; // type:function size:0x88 scope:global -Play__20CWorldAnimEntityTree = .text:0x8004A1EC; // type:function size:0x98 scope:global -Stop__20CWorldAnimEntityTree = .text:0x8004A284; // type:function size:0x88 scope:global -AnimBridgeNewDynamicLoader__FPcT0i = .text:0x8004A30C; // type:function size:0x54 scope:global -AnimBridgeDeleteDynamicLoader__FPQ25EAGL413DynamicLoader = .text:0x8004A360; // type:function size:0x2C scope:global -AnimBridgeNewTransform__FPci = .text:0x8004A38C; // type:function size:0x4C scope:global -AnimBridgeDeleteTransform__FPQ25EAGL49Transform = .text:0x8004A3D8; // type:function size:0x44 scope:global -SetAnimOriginPosition__12CAnimLocatorRC8bVector3Us = .text:0x8004A41C; // type:function size:0x2C scope:global -GetAnimOriginPosition__12CAnimLocatorP8bVector3PUsb = .text:0x8004A448; // type:function size:0x58 scope:global -GetInitialAnimMatricies__12CAnimLocatorP8bMatrix4T1b = .text:0x8004A4A0; // type:function size:0x12C scope:global -ANIM_GetWorldHeight__FRCQ25UMath7Vector3RfRQ25UMath7Vector3 = .text:0x8004A5CC; // type:function size:0x398 scope:global -IsDebugPrintEnabled__13CAnimSettings = .text:0x8004A964; // type:function size:0xC scope:global -__11CAnimPlayer = .text:0x8004A970; // type:function size:0x5C scope:global -_._11CAnimPlayer = .text:0x8004A9CC; // type:function size:0xA8 scope:global -AnimLoader_Init__Fv = .text:0x8004AA74; // type:function size:0x34 scope:global -AnimLoader_IncrementAndAlignUp__FRii = .text:0x8004AAA8; // type:function size:0x24 scope:global -AnimLoader_SizeNeeded__Fv = .text:0x8004AACC; // type:function size:0xA0 scope:global -AnimLoader_LoadResourceFile__FPCc = .text:0x8004AB6C; // type:function size:0xC8 scope:global -AnimLoader_NextStep__Fv = .text:0x8004AC34; // type:function size:0xCC scope:global -AnimLoader_Callback__Fi = .text:0x8004AD00; // type:function size:0x20 scope:global -Load__11CAnimPlayerUiib = .text:0x8004AD20; // type:function size:0x1F0 scope:global -Unload__11CAnimPlayerUi = .text:0x8004AF10; // type:function size:0x100 scope:global -IsLoaded__11CAnimPlayerUi = .text:0x8004B010; // type:function size:0x5C scope:global -CreateAnimInstance__11CAnimPlayerUiiii = .text:0x8004B06C; // type:function size:0x5C scope:global -DeleteAnimInstance__11CAnimPlayeri = .text:0x8004B0C8; // type:function size:0x20 scope:global -CreateAnimScene__11CAnimPlayerP14CAnimSceneDataiii = .text:0x8004B0E8; // type:function size:0x98 scope:global -DestroyAnimScene__11CAnimPlayeri = .text:0x8004B180; // type:function size:0x6C scope:global -CreateAndPlayAnim__11CAnimPlayerUiiii = .text:0x8004B1EC; // type:function size:0x48 scope:global -FindAnimScene__11CAnimPlayeri = .text:0x8004B234; // type:function size:0xA4 scope:global -Play__11CAnimPlayeri = .text:0x8004B2D8; // type:function size:0x34 scope:global -Stop__11CAnimPlayerib = .text:0x8004B30C; // type:function size:0x68 scope:global -UpdateTime__11CAnimPlayerf = .text:0x8004B374; // type:function size:0x40 scope:global -Init__11CAnimPlayer = .text:0x8004B3B4; // type:function size:0x8 scope:global -InitWorldAnimScene__11CAnimPlayer = .text:0x8004B3BC; // type:function size:0x78 scope:global -GetWorldAnimScene__11CAnimPlayer = .text:0x8004B434; // type:function size:0x8 scope:global -KillWorldAnimScene__11CAnimPlayerbT1 = .text:0x8004B43C; // type:function size:0xBC scope:global -StartCopDoorAnim__Fifff = .text:0x8004B4F8; // type:function size:0x78 scope:global -UpdateCopDoorPositions__Ff = .text:0x8004B570; // type:function size:0xA4 scope:global -__9CAnimPart = .text:0x8004B614; // type:function size:0x20 scope:global -_._9CAnimPart = .text:0x8004B634; // type:function size:0x40 scope:global -__dl__9CAnimPartPv = .text:0x8004B674; // type:function size:0x2C scope:global -Init__9CAnimPartP13CAnimSkeleton = .text:0x8004B6A0; // type:function size:0xD4 scope:global -Purge__9CAnimPart = .text:0x8004B774; // type:function size:0x60 scope:global -__17CarAnimationState = .text:0x8004B7D4; // type:function size:0x1C scope:global -ResetCarAnimState__FP8IVehicle = .text:0x8004B7F0; // type:function size:0x4C scope:global -FindAnimSceneData__14CAnimSceneDataUi = .text:0x8004B83C; // type:function size:0x38 scope:global -__14CAnimSceneDataP6bChunk = .text:0x8004B874; // type:function size:0x2C scope:global -_._14CAnimSceneData = .text:0x8004B8A0; // type:function size:0x78 scope:global -EndianSwapHeaderData__14CAnimSceneData = .text:0x8004B918; // type:function size:0x78 scope:global -InitHeaderData__14CAnimSceneDataPvi = .text:0x8004B990; // type:function size:0x2C scope:global -AddEntityData__14CAnimSceneDataPvi = .text:0x8004B9BC; // type:function size:0x6C scope:global -CreateAnimSceneData__FP6bChunkT0 = .text:0x8004BA28; // type:function size:0x7C scope:global -LoaderAnimSceneData__FP6bChunk = .text:0x8004BAA4; // type:function size:0xE4 scope:global -UnloaderAnimSceneData__FP6bChunk = .text:0x8004BB88; // type:function size:0x9C scope:global -__13CAnimProperty13eAnimPropertyb = .text:0x8004BC24; // type:function size:0x1C scope:global -_._13CAnimProperty = .text:0x8004BC40; // type:function size:0x34 scope:global -GetType__13CAnimProperty = .text:0x8004BC74; // type:function size:0x8 scope:global -SetEnabled__13CAnimPropertyb = .text:0x8004BC7C; // type:function size:0x8 scope:global -IsEnabled__13CAnimProperty = .text:0x8004BC84; // type:function size:0x18 scope:global -GenerateHandle__10CAnimScene = .text:0x8004BC9C; // type:function size:0x30 scope:global -__10CAnimSceneP14CAnimSceneDataiii = .text:0x8004BCCC; // type:function size:0xBC scope:global -_._10CAnimScene = .text:0x8004BD88; // type:function size:0xC0 scope:global -GetHandle__10CAnimScene = .text:0x8004BE48; // type:function size:0x8 scope:global -GetAnimID__10CAnimScene = .text:0x8004BE50; // type:function size:0x10 scope:global -GetSceneHash__10CAnimScene = .text:0x8004BE60; // type:function size:0x20 scope:global -GetSceneType__10CAnimScene = .text:0x8004BE80; // type:function size:0x10 scope:global -GetSceneName__10CAnimScenePc = .text:0x8004BE90; // type:function size:0x13C scope:global -GetCameraTrackNumber__10CAnimScene = .text:0x8004BFCC; // type:function size:0x8 scope:global -SetPropertyEnabled__10CAnimScene13eAnimPropertyb = .text:0x8004BFD4; // type:function size:0x60 scope:global -IsPropertyEnabled__10CAnimScene13eAnimProperty = .text:0x8004C034; // type:function size:0x34 scope:global -BindToGame__10CAnimScene = .text:0x8004C068; // type:function size:0xB0 scope:global -UnBindToGame__10CAnimScene = .text:0x8004C118; // type:function size:0x70 scope:global -ChangePlayStatus__10CAnimSceneQ210CAnimScene11ePlayStatus = .text:0x8004C188; // type:function size:0xD4 scope:global -Play__10CAnimScene = .text:0x8004C25C; // type:function size:0x28 scope:global -Stop__10CAnimScene = .text:0x8004C284; // type:function size:0x28 scope:global -Pause__10CAnimScene = .text:0x8004C2AC; // type:function size:0x28 scope:global -UnPause__10CAnimScene = .text:0x8004C2D4; // type:function size:0x28 scope:global -IsPlaying__10CAnimScene = .text:0x8004C2FC; // type:function size:0x14 scope:global -IsPaused__10CAnimScene = .text:0x8004C310; // type:function size:0x14 scope:global -ResetTime__10CAnimScene = .text:0x8004C324; // type:function size:0x38 scope:global -JumpToEnd__10CAnimScene = .text:0x8004C35C; // type:function size:0x38 scope:global -SetTime__10CAnimScenef = .text:0x8004C394; // type:function size:0x88 scope:global -UpdateTime__10CAnimScenef = .text:0x8004C41C; // type:function size:0x1CC scope:global -RenderEffects__10CAnimSceneP5eViewi = .text:0x8004C5E8; // type:function size:0x68 scope:global -AddProperty__10CAnimScene13eAnimPropertyb = .text:0x8004C650; // type:function size:0x68 scope:global -FindProperty__10CAnimScene13eAnimProperty = .text:0x8004C6B8; // type:function size:0x5C scope:global -Init__10CAnimScene = .text:0x8004C714; // type:function size:0x170 scope:global -Purge__10CAnimScene = .text:0x8004C884; // type:function size:0x64 scope:global -ForcePlayerToAnimCarPosition__10CAnimSceneii = .text:0x8004C8E8; // type:function size:0x4 scope:global -ClearCarAnimStates__10CAnimScene = .text:0x8004C8EC; // type:function size:0x28 scope:global -InitCarAnimStatesFromStartingPositions__10CAnimScene = .text:0x8004C914; // type:function size:0xCC scope:global -InitCarAnimStatesFromNIS__10CAnimScene = .text:0x8004C9E0; // type:function size:0x194 scope:global -SetCarAnimationPositions__10CAnimScene = .text:0x8004CB74; // type:function size:0x90 scope:global -CreateCarAnimationControllers__10CAnimScene = .text:0x8004CC04; // type:function size:0x218 scope:global -ClearCarAnimationControllers__10CAnimScene = .text:0x8004CE1C; // type:function size:0x94 scope:global -AnimatedCars_SetMainAndWheels__10CAnimSceneiP9CAnimCtrlf = .text:0x8004CEB0; // type:function size:0x164 scope:global -AnimatedCars_ResetToBeginning__10CAnimScene = .text:0x8004D014; // type:function size:0x70 scope:global -AnimatedCars_ClearLastPose__10CAnimScene = .text:0x8004D084; // type:function size:0x28 scope:global -AnimatedCars_SetTime__10CAnimScenef = .text:0x8004D0AC; // type:function size:0xA0 scope:global -AnimatedCars_Update__10CAnimScenef = .text:0x8004D14C; // type:function size:0xDC scope:global -AnimatedCars_Bind__10CAnimScene = .text:0x8004D228; // type:function size:0x188 scope:global -AnimatedCars_UnBind__10CAnimScene = .text:0x8004D3B0; // type:function size:0xBC scope:global -GetAnimEntityWithModelName__10CAnimScenePCc = .text:0x8004D46C; // type:function size:0xA4 scope:global -CreateAnimEntities__10CAnimScene = .text:0x8004D510; // type:function size:0xDC scope:global -ClearAnimEntities__10CAnimScene = .text:0x8004D5EC; // type:function size:0xB4 scope:global -RenderAnimSceneEffects__FP5eViewi = .text:0x8004D6A0; // type:function size:0x68 scope:global -__13CAnimSkeleton = .text:0x8004D708; // type:function size:0x28 scope:global -_._13CAnimSkeleton = .text:0x8004D730; // type:function size:0x28 scope:global -InitAnimSkelSlotPool__Fv = .text:0x8004D758; // type:function size:0x5C scope:global -CloseAnimSkelSlotPool__Fv = .text:0x8004D7B4; // type:function size:0x40 scope:global -__nw__13CAnimSkeletonUiPCc = .text:0x8004D7F4; // type:function size:0x3C scope:global -__dl__13CAnimSkeletonPv = .text:0x8004D830; // type:function size:0x54 scope:global -Initialize__13CAnimSkeletonPci = .text:0x8004D884; // type:function size:0x5C scope:global -Cleanup__13CAnimSkeleton = .text:0x8004D8E0; // type:function size:0x54 scope:global -DynamicLoadResolve__13CAnimSkeleton = .text:0x8004D934; // type:function size:0x9C scope:global -GetSkeletonFromList__FUi = .text:0x8004D9D0; // type:function size:0x68 scope:global -LoaderEAGLSkeletons__FP6bChunk = .text:0x8004DA38; // type:function size:0xA0 scope:global -UnloaderEAGLSkeletons__FP6bChunk = .text:0x8004DAD8; // type:function size:0x9C scope:global -__15CAnimWorldScene = .text:0x8004DB74; // type:function size:0x5C scope:global -ClearAllAnimations__15CAnimWorldScene = .text:0x8004DBD0; // type:function size:0x74 scope:global -GetAnimTreeFromHash__15CAnimWorldSceneUi = .text:0x8004DC44; // type:function size:0x2C scope:global -_._15CAnimWorldScene = .text:0x8004DC70; // type:function size:0x94 scope:global -UpdateTime__15CAnimWorldScenef = .text:0x8004DD04; // type:function size:0xA0 scope:global -InstantiateAnimTree__15CAnimWorldSceneP17WorldAnimInstance = .text:0x8004DDA4; // type:function size:0x3D8 scope:global -ControlWorldAnim__FUifbT2 = .text:0x8004E17C; // type:function size:0xB8 scope:global -StartWorldAnimations__Fv = .text:0x8004E234; // type:function size:0x150 scope:global -ResetWorldAnimations__Fv = .text:0x8004E384; // type:function size:0x98 scope:global -CloseAllGarageDoors__Fv = .text:0x8004E41C; // type:function size:0x1CC scope:global -InitAnimControlScenarios__FPP16IControlScenario = .text:0x8004E5E8; // type:function size:0xA8 scope:global -CleanControlScenarios__FPP16IControlScenario = .text:0x8004E690; // type:function size:0x6C scope:global -HandleEventMessage__25GenericNISControlScenarioP20CWorldAnimEntityTreeUiPv = .text:0x8004E6FC; // type:function size:0x178 scope:global -__nw__14CWorldAnimCtrlUiPCc = .text:0x8004E874; // type:function size:0x4C scope:global -__dl__14CWorldAnimCtrlPv = .text:0x8004E8C0; // type:function size:0x3C scope:global -__14CWorldAnimCtrl = .text:0x8004E8FC; // type:function size:0x3C scope:global -_._14CWorldAnimCtrl = .text:0x8004E938; // type:function size:0x4C scope:global -Purge__14CWorldAnimCtrl = .text:0x8004E984; // type:function size:0x34 scope:global -Clear__14CWorldAnimCtrl = .text:0x8004E9B8; // type:function size:0x7C scope:global -SetEvalTime__14CWorldAnimCtrlf = .text:0x8004EA34; // type:function size:0x8C scope:global -Cleanup__14CWorldAnimCtrl = .text:0x8004EAC0; // type:function size:0x7C scope:global -SetLoopRange__14CWorldAnimCtrlUiUi = .text:0x8004EB3C; // type:function size:0x18 scope:global -GetLoopRangeScaledStart__14CWorldAnimCtrl = .text:0x8004EB54; // type:function size:0x44 scope:global -GetLoopRangeScaledEnd__14CWorldAnimCtrl = .text:0x8004EB98; // type:function size:0x44 scope:global -CreateFnAnimFromBank__14CWorldAnimCtrlPQ29EAGL4Anim8AnimBankii = .text:0x8004EBDC; // type:function size:0x80 scope:global -CreateFnAnimFromNamehash__14CWorldAnimCtrlUii = .text:0x8004EC5C; // type:function size:0x78 scope:global -Play__14CWorldAnimCtrl = .text:0x8004ECD4; // type:function size:0xC scope:global -Stop__14CWorldAnimCtrl = .text:0x8004ECE0; // type:function size:0x18 scope:global -Pause__14CWorldAnimCtrl = .text:0x8004ECF8; // type:function size:0xC scope:global -JumpToEndForTrigger__14CWorldAnimCtrl = .text:0x8004ED04; // type:function size:0x1C scope:global -JumpToBeginForTrigger__14CWorldAnimCtrl = .text:0x8004ED20; // type:function size:0x20 scope:global -ApplySpeedModifier__14CWorldAnimCtrlf = .text:0x8004ED40; // type:function size:0x8 scope:global -AdvanceAnimTime__14CWorldAnimCtrlf = .text:0x8004ED48; // type:function size:0x358 scope:global -GetAnimLengthInSeconds__14CWorldAnimCtrl = .text:0x8004F0A0; // type:function size:0x24 scope:global -UpdateAnimPose__14CWorldAnimCtrl = .text:0x8004F0C4; // type:function size:0x13C scope:global -__nw__22WorldAnimInstanceEntryUiPCc = .text:0x8004F200; // type:function size:0x4C scope:global -__dl__22WorldAnimInstanceEntryPv = .text:0x8004F24C; // type:function size:0x3C scope:global -__26WorldAnimInstanceDirectory = .text:0x8004F288; // type:function size:0x50 scope:global -__22WorldAnimInstanceEntry = .text:0x8004F2D8; // type:function size:0x14 scope:global -GetAnimTreeInfo__26WorldAnimInstanceDirectoryUi = .text:0x8004F2EC; // type:function size:0x90 scope:global -AddLoadedAnimTreeInfo__26WorldAnimInstanceDirectoryP23WorldAnimEntityTreeInfo = .text:0x8004F37C; // type:function size:0x74 scope:global -AddLoadedAnimEntityInfo__26WorldAnimInstanceDirectoryP19WorldAnimEntityInfo = .text:0x8004F3F0; // type:function size:0x7C scope:global -RemoveAndDeleteAllAnimTreeInfos__26WorldAnimInstanceDirectory = .text:0x8004F46C; // type:function size:0x94 scope:global -RemoveAndDeleteAnimTreeInfo__26WorldAnimInstanceDirectoryUi = .text:0x8004F500; // type:function size:0x94 scope:global -RemoveEntityInfo__26WorldAnimInstanceDirectoryP19WorldAnimEntityInfo = .text:0x8004F594; // type:function size:0x84 scope:global -AddLoadedAnimInstance__26WorldAnimInstanceDirectoryP17WorldAnimInstance = .text:0x8004F618; // type:function size:0x7C scope:global -RemoveAnimInstance__26WorldAnimInstanceDirectoryP17WorldAnimInstance = .text:0x8004F694; // type:function size:0x84 scope:global -GetNumInstanceEntries__26WorldAnimInstanceDirectory = .text:0x8004F718; // type:function size:0x48 scope:global -GetNumLoadedInstances__26WorldAnimInstanceDirectory = .text:0x8004F760; // type:function size:0x50 scope:global -GetInstanceList__26WorldAnimInstanceDirectory = .text:0x8004F7B0; // type:function size:0x8 scope:global -RemoveAndDeleteAllInstanceEntries__26WorldAnimInstanceDirectory = .text:0x8004F7B8; // type:function size:0x7C scope:global -AddInstanceEntryFromInfo__26WorldAnimInstanceDirectoryP26WorldAnimInstanceEntryInfo = .text:0x8004F834; // type:function size:0xB4 scope:global -RemoveInstanceEntryAndInfo__26WorldAnimInstanceDirectoryP26WorldAnimInstanceEntryInfo = .text:0x8004F8E8; // type:function size:0xD0 scope:global -Init__26WorldAnimInstanceDirectory = .text:0x8004F9B8; // type:function size:0x124 scope:global -DeInit__26WorldAnimInstanceDirectorybT1 = .text:0x8004FADC; // type:function size:0xE8 scope:global -LoaderWorldAnimInstanceEntry__FP6bChunk = .text:0x8004FBC4; // type:function size:0xD4 scope:global -UnloaderWorldAnimInstanceEntry__FP6bChunk = .text:0x8004FC98; // type:function size:0xB0 scope:global -AddSorted__t6bTList1Z6bPNodePFP6bPNodeP6bPNode_iP6bPNode = .text:0x8004FD48; // type:function size:0x90 scope:global -__static_initialization_and_destruction_0 = .text:0x8004FDD8; // type:function size:0x24C scope:local -_._Q29EAGL4Anim17FnDefaultAnimBank = .text:0x80050024; // type:function size:0x34 scope:global -Init__Q29EAGL4Anim17FnDefaultAnimBankPQ29EAGL4Anim8AnimBank = .text:0x80050058; // type:function size:0x8 scope:global -GetNumAnims__CQ29EAGL4Anim17FnDefaultAnimBank = .text:0x80050060; // type:function size:0xC scope:global -GetAnim__Q29EAGL4Anim17FnDefaultAnimBanki = .text:0x8005006C; // type:function size:0x14 scope:global -GetAnimName__CQ29EAGL4Anim17FnDefaultAnimBanki = .text:0x80050080; // type:function size:0x14 scope:global -GetAnim__Q29EAGL4Anim17FnDefaultAnimBankPCc = .text:0x80050094; // type:function size:0x4C scope:global -GetAnimIndex__Q29EAGL4Anim17FnDefaultAnimBankPCc = .text:0x800500E0; // type:function size:0x24 scope:global -GetAttributeDictionary__CQ29EAGL4Anim17FnDefaultAnimBank = .text:0x80050104; // type:function size:0xC scope:global -_IHandle__14INISCarControl = .text:0x80050110; // type:function size:0xC scope:global -_IHandle__4INIS = .text:0x8005011C; // type:function size:0xC scope:global -_IHandle__12INISLISTENER = .text:0x80050128; // type:function size:0xC scope:global -Construct__19NISListenerActivityGQ23Sim5Param = .text:0x80050134; // type:function size:0x48 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z11MPerpBustedZ19NISListenerActivityZ19NISListenerActivityPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x8005017C; // type:function size:0x88 scope:global -_._11IAnimEntity = .text:0x80050204; // type:function size:0x34 scope:global -RenderEffects__11IAnimEntityP5eViewi = .text:0x80050238; // type:function size:0x4 scope:global -GetWorldModel__11IAnimEntity = .text:0x8005023C; // type:function size:0x8 scope:global -GetTypeID__25CBasicCharacterAnimEntity = .text:0x80050244; // type:function size:0x8 scope:global -GetInstanceNameHash__25CBasicCharacterAnimEntity = .text:0x8005024C; // type:function size:0x8 scope:global -GetSpaceNode__25CBasicCharacterAnimEntity = .text:0x80050254; // type:function size:0x8 scope:global -GetWorldModel__25CBasicCharacterAnimEntity = .text:0x8005025C; // type:function size:0x8 scope:global -GetTypeID__15CPropAnimEntity = .text:0x80050264; // type:function size:0x8 scope:global -GetInstanceNameHash__15CPropAnimEntity = .text:0x8005026C; // type:function size:0x8 scope:global -GetSpaceNode__15CPropAnimEntity = .text:0x80050274; // type:function size:0x8 scope:global -GetWorldModel__15CPropAnimEntity = .text:0x8005027C; // type:function size:0x8 scope:global -GetTimeElapsed__10CAnimScene = .text:0x80050284; // type:function size:0x8 scope:global -GetTimeStart__10CAnimScene = .text:0x8005028C; // type:function size:0x8 scope:global -GetTimeTotalLength__10CAnimScene = .text:0x80050294; // type:function size:0x8 scope:global -IsControllingCamera__10CAnimScene = .text:0x8005029C; // type:function size:0x8 scope:global -IsCameraFixingElevation__10CAnimScene = .text:0x800502A4; // type:function size:0x8 scope:global -GetSceneRotationMatrix__10CAnimScene = .text:0x800502AC; // type:function size:0x8 scope:global -GetSceneTransformMatrix__10CAnimScene = .text:0x800502B4; // type:function size:0x8 scope:global -GetTypeID__16CWorldAnimEntity = .text:0x800502BC; // type:function size:0x8 scope:global -GetInstanceNameHash__16CWorldAnimEntity = .text:0x800502C4; // type:function size:0x8 scope:global -GetSpaceNode__16CWorldAnimEntity = .text:0x800502CC; // type:function size:0x8 scope:global -GetWorldModel__16CWorldAnimEntity = .text:0x800502D4; // type:function size:0x8 scope:global -_._25GenericNISControlScenario = .text:0x800502DC; // type:function size:0x34 scope:global -_._16IControlScenario = .text:0x80050310; // type:function size:0x34 scope:global -_GLOBAL_.I.__9CAnimBank = .text:0x80050344; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x80050370; // type:label scope:local -__Q26Attrib5ClassUiRQ26Attrib12ClassPrivate = .text:0x80050370; // type:function size:0x4C scope:global -_._Q26Attrib5Class = .text:0x800503BC; // type:function size:0x84 scope:global -GetDefinition__CQ26Attrib5ClassUi = .text:0x80050440; // type:function size:0x64 scope:global -GetNumDefinitions__CQ26Attrib5Class = .text:0x800504A4; // type:function size:0xC scope:global -GetFirstDefinition__CQ26Attrib5Class = .text:0x800504B0; // type:function size:0x24 scope:global -GetNextDefinition__CQ26Attrib5ClassUi = .text:0x800504D4; // type:function size:0x8C scope:global -GetCollection__CQ26Attrib5ClassUi = .text:0x80050560; // type:function size:0x170 scope:global -GetCollectionWithDefault__CQ26Attrib5ClassUi = .text:0x800506D0; // type:function size:0x2D4 scope:global -GetNumCollections__CQ26Attrib5Class = .text:0x800509A4; // type:function size:0xC scope:global -GetFirstCollection__CQ26Attrib5Class = .text:0x800509B0; // type:function size:0x2C scope:global -GetNextCollection__CQ26Attrib5ClassUi = .text:0x800509DC; // type:function size:0x158 scope:global -SetTableBuffer__Q26Attrib5ClassPvUi = .text:0x80050B34; // type:function size:0x2EC scope:global -GetTableNodeSize__CQ26Attrib5Class = .text:0x80050E20; // type:function size:0x8 scope:global -Delete__CQ26Attrib5Class = .text:0x80050E28; // type:function size:0x110 scope:global -AddCollection__Q26Attrib5ClassPQ26Attrib10Collection = .text:0x80050F38; // type:function size:0x414 scope:global -RemoveCollection__Q26Attrib5ClassPQ26Attrib10Collection = .text:0x8005134C; // type:function size:0x5F8 scope:global -AllocLayout__CQ26Attrib5Class = .text:0x80051944; // type:function size:0x138 scope:global -CloneLayout__CQ26Attrib5ClassPv = .text:0x80051A7C; // type:function size:0xA4 scope:global -CopyLayout__CQ26Attrib5ClassPvT1 = .text:0x80051B20; // type:function size:0x34 scope:global -FreeLayout__CQ26Attrib5ClassPv = .text:0x80051B54; // type:function size:0x74 scope:global -__Q26Attrib10CollectionPQ26Attrib5ClassPCQ26Attrib10CollectionUiUi = .text:0x80051BC8; // type:function size:0x114 scope:global -__Q26Attrib10CollectionRCQ26Attrib18CollectionLoadDataPQ26Attrib5Vault = .text:0x80051CDC; // type:function size:0x454 scope:global -_._Q26Attrib10Collection = .text:0x80052130; // type:function size:0x184 scope:global -GetNode__CQ26Attrib10CollectionUiRPCQ26Attrib10Collection = .text:0x800522B4; // type:function size:0x390 scope:global -Get__CQ26Attrib10CollectionRCQ26Attrib8InstanceUi = .text:0x80052644; // type:function size:0x68 scope:global -GetData__CQ26Attrib10CollectionUiUi = .text:0x800526AC; // type:function size:0x134 scope:global -Count__CQ26Attrib10Collection = .text:0x800527E0; // type:function size:0x18 scope:global -Contains__CQ26Attrib10CollectionUi = .text:0x800527F8; // type:function size:0x35C scope:global -FirstKey__CQ26Attrib10CollectionRb = .text:0x80052B54; // type:function size:0x60 scope:global -NextKey__CQ26Attrib10CollectionUiRb = .text:0x80052BB4; // type:function size:0x390 scope:global -SetParent__Q26Attrib10CollectionUi = .text:0x80052F44; // type:function size:0x98 scope:global -AddAttribute__Q26Attrib10CollectionUiUi = .text:0x80052FDC; // type:function size:0x4C0 scope:global -RemoveAttribute__Q26Attrib10CollectionUi = .text:0x8005349C; // type:function size:0x4B8 scope:global -Clear__Q26Attrib10Collection = .text:0x80053954; // type:function size:0x288 scope:global -Clean__CQ26Attrib10Collection = .text:0x80053BDC; // type:function size:0x300 scope:global -FreeNodeData__Q26Attrib10CollectionbPvT1RCQ26Attrib8TypeDesc = .text:0x80053EDC; // type:function size:0x1D4 scope:global -Delete__CQ26Attrib10Collection = .text:0x800540B0; // type:function size:0x2C scope:global -__Q26Attrib17AttributeIteratorPCQ26Attrib10Collection = .text:0x800540DC; // type:function size:0x50 scope:global -Advance__Q26Attrib17AttributeIterator = .text:0x8005412C; // type:function size:0x58 scope:global -GetExportPolicies__Q26Attrib8Database = .text:0x80054184; // type:function size:0x194 scope:global -__Q26Attrib8DatabaseRQ26Attrib15DatabasePrivate = .text:0x80054318; // type:function size:0x14 scope:global -_._Q26Attrib8Database = .text:0x8005432C; // type:function size:0x7C scope:global -GetClass__CQ26Attrib8DatabaseUi = .text:0x800543A8; // type:function size:0x16C scope:global -GetNumIndexedTypes__CQ26Attrib8Database = .text:0x80054514; // type:function size:0xC scope:global -GetIndexedTypeDesc__CQ26Attrib8DatabaseUs = .text:0x80054520; // type:function size:0x28 scope:global -GetTypeDesc__CQ26Attrib8DatabaseUi = .text:0x80054548; // type:function size:0xDC scope:global -Delete__Q26Attrib8DatabasePCQ26Attrib10Collection = .text:0x80054624; // type:function size:0xB8 scope:global -Delete__Q26Attrib8DatabasePCQ26Attrib5Class = .text:0x800546DC; // type:function size:0xB8 scope:global -CollectGarbage__Q26Attrib8Database = .text:0x80054794; // type:function size:0x278 scope:global -AddClass__Q26Attrib8DatabasePQ26Attrib5Class = .text:0x80054A0C; // type:function size:0x414 scope:global -RemoveClass__Q26Attrib8DatabasePCQ26Attrib5Class = .text:0x80054E20; // type:function size:0x5C0 scope:global -DumpContents__CQ26Attrib8DatabaseUi = .text:0x800553E0; // type:function size:0x4 scope:global -PrepareToAddStrings__6AttribUi = .text:0x800553E4; // type:function size:0x4 scope:global -RegisterString__6AttribPCc = .text:0x800553E8; // type:function size:0x20 scope:global -KeyToString__6AttribUi = .text:0x80055408; // type:function size:0x8 scope:global -StringToKey__6AttribPCc = .text:0x80055410; // type:function size:0x20 scope:global -hash32__6AttribPCUcUiUi = .text:0x80055430; // type:function size:0x2E8 scope:local -StringHash32__6AttribPCc = .text:0x80055718; // type:function size:0x5C scope:global -hash64__6AttribPCUcUiUx = .text:0x80055774; // type:function size:0x1140 scope:local -StringHash64__6AttribPCc = .text:0x800568B4; // type:function size:0x68 scope:global -__Q26Attrib8InstancePCQ26Attrib10CollectionUiPQ33UTL3COM8IUnknown = .text:0x8005691C; // type:function size:0x54 scope:global -__Q26Attrib8InstanceRCQ26Attrib7RefSpecUiPQ33UTL3COM8IUnknown = .text:0x80056970; // type:function size:0x88 scope:global -__Q26Attrib8InstanceRCQ26Attrib8Instance = .text:0x800569F8; // type:function size:0x68 scope:global -__as__Q26Attrib8InstanceRCQ26Attrib8Instance = .text:0x80056A60; // type:function size:0x50 scope:global -_._Q26Attrib8Instance = .text:0x80056AB0; // type:function size:0xB0 scope:global -GetClass__CQ26Attrib8Instance = .text:0x80056B60; // type:function size:0x28 scope:global -GetCollection__CQ26Attrib8Instance = .text:0x80056B88; // type:function size:0x18 scope:global -GetParent__CQ26Attrib8Instance = .text:0x80056BA0; // type:function size:0x48 scope:global -SetParent__Q26Attrib8InstanceUi = .text:0x80056BE8; // type:function size:0x38 scope:global -Get__CQ26Attrib8InstanceUi = .text:0x80056C20; // type:function size:0x54 scope:global -Lookup__CQ26Attrib8InstanceUiRQ26Attrib9Attribute = .text:0x80056C74; // type:function size:0x6C scope:global -Contains__CQ26Attrib8InstanceUi = .text:0x80056CE0; // type:function size:0x34 scope:global -Iterator__CQ26Attrib8Instance = .text:0x80056D14; // type:function size:0x34 scope:global -LocalAttribCount__CQ26Attrib8Instance = .text:0x80056D48; // type:function size:0x34 scope:global -Add__Q26Attrib8InstanceUiUi = .text:0x80056D7C; // type:function size:0x40 scope:global -Remove__Q26Attrib8InstanceUi = .text:0x80056DBC; // type:function size:0x4C scope:global -Modify__Q26Attrib8InstanceUiUi = .text:0x80056E08; // type:function size:0x64 scope:global -ModifyInternal__Q26Attrib8InstanceUiUiUi = .text:0x80056E6C; // type:function size:0x100 scope:global -Unmodify__Q26Attrib8Instance = .text:0x80056F6C; // type:function size:0xA0 scope:global -GenerateUniqueKey__CQ26Attrib8InstancePCcb = .text:0x8005700C; // type:function size:0x48 scope:global -GUKeyInternal__CQ26Attrib8InstanceUiPCcb = .text:0x80057054; // type:function size:0xB8 scope:global -Change__Q26Attrib8InstancePCQ26Attrib10Collection = .text:0x8005710C; // type:function size:0xCC scope:global -Change__Q26Attrib8InstanceRCQ26Attrib7RefSpec = .text:0x800571D8; // type:function size:0x3C scope:global -ChangeWithDefault__Q26Attrib8InstanceRCQ26Attrib7RefSpec = .text:0x80057214; // type:function size:0x3C scope:global -GetAttributePointer__CQ26Attrib8InstanceUiUi = .text:0x80057250; // type:function size:0x34 scope:global -StringToAssetID__6AttribPCc = .text:0x80057284; // type:function size:0x20 scope:global -StringToTypeID__6AttribPCc = .text:0x800572A4; // type:function size:0x20 scope:global -__Q26Attrib13ExportManagerUi = .text:0x800572C4; // type:function size:0x8C scope:global -AddExportPolicy__Q26Attrib13ExportManagerUiPQ26Attrib13IExportPolicy = .text:0x80057350; // type:function size:0x3C scope:global -Seal__Q26Attrib13ExportManager = .text:0x8005738C; // type:function size:0x30 scope:global -GetExportPolicyByIndex__CQ26Attrib13ExportManagerUi = .text:0x800573BC; // type:function size:0x28 scope:global -GetExportPolicyTypeByIndex__CQ26Attrib13ExportManagerUi = .text:0x800573E4; // type:function size:0x24 scope:global -GetExportPolicyIndex__CQ26Attrib13ExportManagerUi = .text:0x80057408; // type:function size:0x84 scope:global -__Q26Attrib5VaultRQ26Attrib13ExportManagerUiPvUiPQ26Attrib17IGarbageCollector = .text:0x8005748C; // type:function size:0x304 scope:global -_._Q26Attrib5Vault = .text:0x80057790; // type:function size:0x150 scope:global -GetDependencyList__CQ26Attrib5VaultRUi = .text:0x800578E0; // type:function size:0x18 scope:global -IsAssetDependency__CQ26Attrib5VaultUi = .text:0x800578F8; // type:function size:0x24 scope:global -ResolveDependency__Q26Attrib5VaultUiPvUiPQ26Attrib17IGarbageCollector = .text:0x8005791C; // type:function size:0x50 scope:global -HasUnresolvedDependency__CQ26Attrib5Vault = .text:0x8005796C; // type:function size:0x18 scope:global -Initialize__Q26Attrib5Vault = .text:0x80057984; // type:function size:0x24C scope:global -Clean__Q26Attrib5Vault = .text:0x80057BD0; // type:function size:0xB4 scope:global -Deinitialize__Q26Attrib5Vault = .text:0x80057C84; // type:function size:0x150 scope:global -Export__Q26Attrib5VaultRCUiPvUi = .text:0x80057DD4; // type:function size:0x60 scope:global -CountExports__CQ26Attrib5Vault = .text:0x80057E34; // type:function size:0x8 scope:global -FindExportID__CQ26Attrib5VaultUi = .text:0x80057E3C; // type:function size:0x60 scope:global -GetExportType__CQ26Attrib5VaultUi = .text:0x80057E9C; // type:function size:0x64 scope:global -GetExportData__CQ26Attrib5VaultUi = .text:0x80057F00; // type:function size:0x3C scope:global -ExportsCleared__CQ26Attrib5Vault = .text:0x80057F3C; // type:function size:0x44 scope:global -AllocationAccounting__6AttribUib = .text:0x80057F80; // type:function size:0x48 scope:global -FindCollection__6AttribUiUi = .text:0x80057FC8; // type:function size:0x54 scope:global -FindCollectionWithDefault__6AttribUiUi = .text:0x8005801C; // type:function size:0x54 scope:global -GetCollectionKey__6AttribPCQ26Attrib10Collection = .text:0x80058070; // type:function size:0x18 scope:global -GetCollectionParent__6AttribPCQ26Attrib10Collection = .text:0x80058088; // type:function size:0x18 scope:global -StringToLowerCaseKey__6AttribPCc = .text:0x800580A0; // type:function size:0x80 scope:global -AdjustHashTableSize__6AttribUi = .text:0x80058120; // type:function size:0x4 scope:global -GetLength__CQ26Attrib7Private = .text:0x80058124; // type:function size:0x8 scope:global -__Q26Attrib7RefSpecRCQ26Attrib7RefSpec = .text:0x8005812C; // type:function size:0x30 scope:global -__as__Q26Attrib7RefSpecRCQ26Attrib7RefSpec = .text:0x8005815C; // type:function size:0x60 scope:global -SetCollection__Q26Attrib7RefSpecPCQ26Attrib10Collection = .text:0x800581BC; // type:function size:0x70 scope:global -GetClass__CQ26Attrib7RefSpec = .text:0x8005822C; // type:function size:0x50 scope:global -GetCollection__CQ26Attrib7RefSpec = .text:0x8005827C; // type:function size:0x7C scope:global -GetCollectionWithDefault__CQ26Attrib7RefSpec = .text:0x800582F8; // type:function size:0x6C scope:global -Clean__CQ26Attrib7RefSpec = .text:0x80058364; // type:function size:0x6C scope:global -__Q26Attrib9Attribute = .text:0x800583D0; // type:function size:0x1C scope:global -__Q26Attrib9AttributeRCQ26Attrib9Attribute = .text:0x800583EC; // type:function size:0x38 scope:global -__Q26Attrib9AttributeRCQ26Attrib8InstancePCQ26Attrib10CollectionPQ26Attrib4Node = .text:0x80058424; // type:function size:0xA4 scope:global -_._Q26Attrib9Attribute = .text:0x800584C8; // type:function size:0x88 scope:global -__as__Q26Attrib9AttributeRCQ26Attrib9Attribute = .text:0x80058550; // type:function size:0x50 scope:global -IsValid__CQ26Attrib9Attribute = .text:0x800585A0; // type:function size:0x18 scope:global -GetKey__CQ26Attrib9Attribute = .text:0x800585B8; // type:function size:0x58 scope:global -GetType__CQ26Attrib9Attribute = .text:0x80058610; // type:function size:0x44 scope:global -GetCollection__CQ26Attrib9Attribute = .text:0x80058654; // type:function size:0x8 scope:global -GetLength__CQ26Attrib9Attribute = .text:0x8005865C; // type:function size:0xAC scope:global -GetInternalPointer__CQ26Attrib9AttributeUi = .text:0x80058708; // type:function size:0x13C scope:global -__lower_bound__H4ZPCQ26Attrib10DefinitionZQ26Attrib10DefinitionZQ24_STLt4less1ZQ26Attrib10DefinitionZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80058844; // type:function size:0x48 scope:global -ScanForValidKey__H1ZQ36Attrib12ClassPrivate17CollectionHashMap_6AttribRCX01Ui_Ui = .text:0x8005888C; // type:function size:0xC0 scope:global -ScanForValidKey__H1ZQ26Attrib7HashMap_6AttribRCX01Ui_Ui = .text:0x8005894C; // type:function size:0x12C scope:global -_M_erase__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescPQ24_STLt13_Rb_tree_node1ZQ26Attrib8TypeDesc = .text:0x80058A78; // type:function size:0x6C scope:global -clear__Q24_STLt10_List_base2ZPCQ26Attrib10CollectionZQ24_STLt9allocator1ZPCQ26Attrib10Collection = .text:0x80058AE4; // type:function size:0x7C scope:global -clear__Q24_STLt10_List_base2ZPCQ26Attrib5ClassZQ24_STLt9allocator1ZPCQ26Attrib5Class = .text:0x80058B60; // type:function size:0x7C scope:global -reserve__Q24_STLt6vector2ZPCQ26Attrib8TypeDescZQ24_STLt9allocator1ZPCQ26Attrib8TypeDescUi = .text:0x80058BDC; // type:function size:0x120 scope:global -_M_insert__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescPQ24_STL18_Rb_tree_node_baseT1RCQ26Attrib8TypeDescT1 = .text:0x80058CFC; // type:function size:0x164 scope:global -insert_unique__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescRCQ26Attrib8TypeDesc = .text:0x80058E60; // type:function size:0x118 scope:global -find__H2ZQ24_STLt14_List_iterator2ZPCQ26Attrib10CollectionZQ24_STLt16_Nonconst_traits1ZPCQ26Attrib10CollectionZPCQ26Attrib10Collection_4_STLX01X01RCX11_X01 = .text:0x80058F78; // type:function size:0x60 scope:global -find__H2ZQ24_STLt14_List_iterator2ZPCQ26Attrib5ClassZQ24_STLt16_Nonconst_traits1ZPCQ26Attrib5ClassZPCQ26Attrib5Class_4_STLX01X01RCX11_X01 = .text:0x80058FD8; // type:function size:0x60 scope:global -__less__H1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x80059038; // type:function size:0xC scope:global -__adjust_heap__H4ZPQ36Attrib13ExportManager16ExportPolicyPairZiZQ36Attrib13ExportManager16ExportPolicyPairZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X11X11X21X31_v = .text:0x80059044; // type:function size:0x11C scope:global -make_heap__H2ZPQ36Attrib13ExportManager16ExportPolicyPairZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X01X11_v = .text:0x80059160; // type:function size:0x94 scope:global -pop_heap__H2ZPQ36Attrib13ExportManager16ExportPolicyPairZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X01X11_v = .text:0x800591F4; // type:function size:0x78 scope:global -__partial_sort__H3ZPQ36Attrib13ExportManager16ExportPolicyPairZQ36Attrib13ExportManager16ExportPolicyPairZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X01X01PX11X21_v = .text:0x8005926C; // type:function size:0xD8 scope:global -partial_sort__H2ZPQ36Attrib13ExportManager16ExportPolicyPairZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X01X01X11_v = .text:0x80059344; // type:function size:0x30 scope:global -__unguarded_partition__H3ZPQ36Attrib13ExportManager16ExportPolicyPairZQ36Attrib13ExportManager16ExportPolicyPairZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X01X11X21_X01 = .text:0x80059374; // type:function size:0x7C scope:global -__introsort_loop__H4ZPQ36Attrib13ExportManager16ExportPolicyPairZQ36Attrib13ExportManager16ExportPolicyPairZiZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X01PX11X21X31_v = .text:0x800593F0; // type:function size:0x134 scope:global -__unguarded_linear_insert__H3ZPQ36Attrib13ExportManager16ExportPolicyPairZQ36Attrib13ExportManager16ExportPolicyPairZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X11X21_v = .text:0x80059524; // type:function size:0x38 scope:global -__insertion_sort__H2ZPQ36Attrib13ExportManager16ExportPolicyPairZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X01X11_v = .text:0x8005955C; // type:function size:0xD0 scope:global -__unguarded_insertion_sort_aux__H3ZPQ36Attrib13ExportManager16ExportPolicyPairZQ36Attrib13ExportManager16ExportPolicyPairZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X01PX11X21_v = .text:0x8005962C; // type:function size:0x68 scope:global -__final_insertion_sort__H2ZPQ36Attrib13ExportManager16ExportPolicyPairZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X01X11_v = .text:0x80059694; // type:function size:0x7C scope:global -sort__H1ZPQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X01_v = .text:0x80059710; // type:function size:0xA0 scope:global -__lower_bound__H4ZPQ36Attrib13ExportManager16ExportPolicyPairZQ36Attrib13ExportManager16ExportPolicyPairZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x800597B0; // type:function size:0x48 scope:global -find__H2ZPUiZUi_4_STLX01X01RCX11_X01 = .text:0x800597F8; // type:function size:0xB0 scope:global -__static_initialization_and_destruction_0 = .text:0x800598A8; // type:function size:0xC8 scope:local -GetFlag__CQ26Attrib10DefinitionUi = .text:0x80059970; // type:function size:0x18 scope:global -GetPad__CQ26Attrib5Array = .text:0x80059988; // type:function size:0x18 scope:global -GetData__CQ26Attrib5ArrayUi = .text:0x800599A0; // type:function size:0x7C scope:global -SetData__Q26Attrib5ArrayUiPv = .text:0x80059A1C; // type:function size:0x184 scope:global -__Q26Attrib5ArrayUiUiUiUib = .text:0x80059BA0; // type:function size:0x1A0 scope:global -_._Q26Attrib5Array = .text:0x80059D40; // type:function size:0x9C scope:global -__nw__Q26Attrib5ArrayUiPv = .text:0x80059DDC; // type:function size:0x8 scope:global -IsLaidOut__CQ26Attrib4Node = .text:0x80059DE4; // type:function size:0x18 scope:global -RebuildTable__Q26Attrib7HashMapUi = .text:0x80059DFC; // type:function size:0x1D0 scope:global -Transfer__Q26Attrib7HashMapRQ26Attrib4Node = .text:0x80059FCC; // type:function size:0x12C scope:global -UpdateSearchLength__Q26Attrib7HashMapUiUi = .text:0x8005A0F8; // type:function size:0x2B8 scope:global -PreFlightAdd__Q26Attrib7HashMapUiUiRUi = .text:0x8005A3B0; // type:function size:0xD4 scope:global -PostFlightAdd__Q26Attrib7HashMapUiUi = .text:0x8005A484; // type:function size:0x58 scope:global -GetKey__CQ26Attrib10Collection = .text:0x8005A4DC; // type:function size:0x8 scope:global -_._Q36Attrib12ClassPrivate17CollectionHashMap = .text:0x8005A4E4; // type:function size:0x11C scope:global -RebuildTable__t10VecHashMap5ZUiZQ26Attrib10CollectionZQ36Attrib5Class11TablePolicyb1Ui40Ui = .text:0x8005A600; // type:function size:0x2B4 scope:global -RebuildTable__t10VecHashMap5ZUiZQ26Attrib5ClassZQ36Attrib5Class11TablePolicyb0Ui16Ui = .text:0x8005A8B4; // type:function size:0x2B4 scope:global -Initialize__Q26Attrib20DatabaseExportPolicyRQ26Attrib5VaultRCUiT2PCcPvUi = .text:0x8005AB68; // type:function size:0x9C4 scope:global -IsReferenced__Q26Attrib20DatabaseExportPolicyRCQ26Attrib5VaultRCUiT2 = .text:0x8005B52C; // type:function size:0x64 scope:global -Clean__Q26Attrib20DatabaseExportPolicyRQ26Attrib5VaultRCUiT2 = .text:0x8005B590; // type:function size:0x4 scope:global -Deinitialize__Q26Attrib20DatabaseExportPolicyRQ26Attrib5VaultRCUiT2 = .text:0x8005B594; // type:function size:0x88 scope:global -Initialize__Q26Attrib17ClassExportPolicyRQ26Attrib5VaultRCUiT2PCcPvUi = .text:0x8005B61C; // type:function size:0x234 scope:global -IsReferenced__Q26Attrib17ClassExportPolicyRCQ26Attrib5VaultRCUiT2 = .text:0x8005B850; // type:function size:0x60 scope:global -Clean__Q26Attrib17ClassExportPolicyRQ26Attrib5VaultRCUiT2 = .text:0x8005B8B0; // type:function size:0x4 scope:global -Deinitialize__Q26Attrib17ClassExportPolicyRQ26Attrib5VaultRCUiT2 = .text:0x8005B8B4; // type:function size:0x90 scope:global -Initialize__Q26Attrib22CollectionExportPolicyRQ26Attrib5VaultRCUiT2PCcPvUi = .text:0x8005B944; // type:function size:0xCC scope:global -IsReferenced__Q26Attrib22CollectionExportPolicyRCQ26Attrib5VaultRCUiT2 = .text:0x8005BA10; // type:function size:0x60 scope:global -Clean__Q26Attrib22CollectionExportPolicyRQ26Attrib5VaultRCUiT2 = .text:0x8005BA70; // type:function size:0x4C scope:global -Deinitialize__Q26Attrib22CollectionExportPolicyRQ26Attrib5VaultRCUiT2 = .text:0x8005BABC; // type:function size:0x90 scope:global -__Q36Attrib12ClassPrivate17CollectionHashMapUi = .text:0x8005BB4C; // type:function size:0x2D0 scope:global -__Q26Attrib9TypeTable = .text:0x8005BE1C; // type:function size:0x78 scope:global -_._Q26Attrib15DatabasePrivate = .text:0x8005BE94; // type:function size:0x19C scope:global -_._Q26Attrib10ClassTable = .text:0x8005C030; // type:function size:0xCC scope:global -_._Q26Attrib9TypeTable = .text:0x8005C0FC; // type:function size:0xD0 scope:global -_GLOBAL_.I.__Q26Attrib5ClassUiRQ26Attrib12ClassPrivate = .text:0x8005C1CC; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x8005C1F8; // type:label scope:local -bCalculateCrc32__FPCviUi = .text:0x8005C1F8; // type:function size:0x7C scope:global -bWareInit__Fv = .text:0x8005C274; // type:function size:0x28 scope:global -bSetUserPutStringFunction__FPFiPCc_b = .text:0x8005C29C; // type:function size:0xC scope:global -HandleUserPutString__FiPCc = .text:0x8005C2A8; // type:function size:0x60 scope:global -bReleasePutString__FcPCc = .text:0x8005C308; // type:function size:0x50 scope:global -bBreak__Fv = .text:0x8005C358; // type:function size:0x34 scope:global -bIsValidPointer__FPvi = .text:0x8005C38C; // type:function size:0x14 scope:global -bGetTickerDifference__FUi = .text:0x8005C3A0; // type:function size:0x38 scope:global -bGetFixTickerDifference__FUiUi = .text:0x8005C3D8; // type:function size:0x38 scope:global -bInitTicker__Ff = .text:0x8005C410; // type:function size:0x4 scope:global -bGetTicker__Fv = .text:0x8005C414; // type:function size:0x20 scope:global -bGetTickerDifference__FUiUi = .text:0x8005C434; // type:function size:0x60 scope:global -Create__6bMutex = .text:0x8005C494; // type:function size:0x20 scope:global -Destroy__6bMutex = .text:0x8005C4B4; // type:function size:0x20 scope:global -Lock__6bMutex = .text:0x8005C4D4; // type:function size:0x20 scope:global -Unlock__6bMutex = .text:0x8005C4F4; // type:function size:0x20 scope:global -bFunkCallASync__FPCciPCvi = .text:0x8005C514; // type:function size:0xC scope:global -bFunkCallSync__FPCciPCviPvi = .text:0x8005C520; // type:function size:0x10 scope:global -bFunkDoesServerExist__FPCc = .text:0x8005C530; // type:function size:0x68 scope:global -bRefreshTweaker__Fv = .text:0x8005C598; // type:function size:0x34 scope:global -GetNode__5bListi = .text:0x8005C5CC; // type:function size:0x28 scope:global -TraversebList__5bListP5bNode = .text:0x8005C5F4; // type:function size:0x40 scope:global -Sort__5bListPFP5bNodeP5bNode_i = .text:0x8005C634; // type:function size:0xAC scope:global -MergeSort__5bListPFP5bNodeP5bNode_i = .text:0x8005C6E0; // type:function size:0x194 scope:global -bPListInit__Fi = .text:0x8005C874; // type:function size:0x64 scope:global -bPListClose__Fv = .text:0x8005C8D8; // type:function size:0x58 scope:global -Malloc__6bPNode = .text:0x8005C930; // type:function size:0x44 scope:global -Free__6bPNodePv = .text:0x8005C974; // type:function size:0x40 scope:global -bChunkLoaderFunctionNull__FP6bChunk = .text:0x8005C9B4; // type:function size:0x10 scope:global -__12bChunkLoaderUiPFP6bChunk_iT2 = .text:0x8005C9C4; // type:function size:0x54 scope:global -FindLoader__12bChunkLoaderUi = .text:0x8005CA18; // type:function size:0x4C scope:global -PlatformEndianSwap__16bChunkCarpHeader = .text:0x8005CA64; // type:function size:0x3C scope:global -bEndianSwap64__FPv = .text:0x8005CAA0; // type:function size:0x70 scope:global -bEndianSwap32__FPv = .text:0x8005CB10; // type:function size:0x24 scope:global -bEndianSwap16__FPv = .text:0x8005CB34; // type:function size:0x14 scope:global -bPlatEndianSwap__FP8bVector2 = .text:0x8005CB48; // type:function size:0x34 scope:global -bPlatEndianSwap__FP8bVector3 = .text:0x8005CB7C; // type:function size:0x3C scope:global -bPlatEndianSwap__FP8bVector4 = .text:0x8005CBB8; // type:function size:0x44 scope:global -bPlatEndianSwap__FP8bMatrix4 = .text:0x8005CBFC; // type:function size:0x44 scope:global -bDiv__Fii = .text:0x8005CC40; // type:function size:0x50 scope:global -bSetRandomSeed__FUiPUi = .text:0x8005CC90; // type:function size:0x28 scope:global -bRandom__FiPUi = .text:0x8005CCB8; // type:function size:0x44 scope:global -bRandom__FfPUi = .text:0x8005CCFC; // type:function size:0x68 scope:global -bRandom__Fi = .text:0x8005CD64; // type:function size:0x28 scope:global -bRandom__Ff = .text:0x8005CD8C; // type:function size:0x28 scope:global -bFMod__Fff = .text:0x8005CDB4; // type:function size:0x6C scope:global -bSin__FUs = .text:0x8005CE20; // type:function size:0xCC scope:global -bSin__Ff = .text:0x8005CEEC; // type:function size:0x3C scope:global -bCos__FUs = .text:0x8005CF28; // type:function size:0x28 scope:global -bSinCos__FPfT0Us = .text:0x8005CF50; // type:function size:0x150 scope:global -bASin__Ff = .text:0x8005D0A0; // type:function size:0x150 scope:global -bATan__Fff = .text:0x8005D1F0; // type:function size:0x148 scope:global -bFixATan__Fi = .text:0x8005D338; // type:function size:0xCC scope:global -bFixATan__Fii = .text:0x8005D404; // type:function size:0xAC scope:global -bConvertToBond__FR8bMatrix4RC8bMatrix4 = .text:0x8005D4B0; // type:function size:0x98 scope:global -bConvertFromBond__FR8bMatrix4RC8bMatrix4 = .text:0x8005D548; // type:function size:0x98 scope:global -bMathTimingTest__Fv = .text:0x8005D5E0; // type:function size:0x4 scope:global -bInvertMatrix__FP8bMatrix4PC8bMatrix4 = .text:0x8005D5E4; // type:function size:0x20 scope:global -fDeterminant__FP8bMatrix4 = .text:0x8005D604; // type:function size:0x1C0 scope:global -fInvertMatrix__FP8bMatrix4T0 = .text:0x8005D7C4; // type:function size:0x680 scope:global -hermite_basis__FP8bMatrix4T0ffff = .text:0x8005DE44; // type:function size:0x19C scope:global -hermite_parameter__FP8bVector4PC8bMatrix4f = .text:0x8005DFE0; // type:function size:0x44 scope:global -bMulMatrix__FP8bMatrix4PC8bMatrix4T1 = .text:0x8005E024; // type:function size:0x2C scope:global -bMulMatrix__FP8bVector4PC8bMatrix4PC8bVector4 = .text:0x8005E050; // type:function size:0x20 scope:global -bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 = .text:0x8005E070; // type:function size:0x20 scope:global -bTransposeMatrix__FP8bMatrix4PC8bMatrix4 = .text:0x8005E090; // type:function size:0x38 scope:global -bMemCpy = .text:0x8005E0C8; // type:function size:0xA0 scope:global -bMemSet = .text:0x8005E168; // type:function size:0xCC scope:global -bMemCmp = .text:0x8005E234; // type:function size:0x40 scope:global -bOverlappedMemCpy = .text:0x8005E274; // type:function size:0x84 scope:global -bPrintfSetLocaleInfo__Fccc = .text:0x8005E2F8; // type:function size:0x18 scope:global -bFlushBufferedPutChar__Fv = .text:0x8005E310; // type:function size:0x60 scope:global -bBufferedPutChar__Fc = .text:0x8005E370; // type:function size:0x48 scope:global -bReleasePrintf__FPCce = .text:0x8005E3B8; // type:function size:0xB0 scope:global -bVPrintf__FPCcP13__va_list_tag = .text:0x8005E468; // type:function size:0x44 scope:global -bSPrintf__FPcPCce = .text:0x8005E4AC; // type:function size:0x94 scope:global -bSNPrintf__FPciPCce = .text:0x8005E540; // type:function size:0x90 scope:global -bVSPrintf__FPcPCcP13__va_list_tag = .text:0x8005E5D0; // type:function size:0x94 scope:global -bVSNPrintf__FPciPCcP13__va_list_tag = .text:0x8005E664; // type:function size:0x50 scope:global -_bOutput__FP11bOutputInfoPCcP13__va_list_tag = .text:0x8005E6B4; // type:function size:0x143C scope:global -_stuff_char__FP11bOutputInfocPi = .text:0x8005FAF0; // type:function size:0x78 scope:global -_stuff_str__FP11bOutputInfoPCciPi = .text:0x8005FB68; // type:function size:0xC4 scope:global -Slerp__C11bQuaternionR11bQuaternionRC11bQuaternionf = .text:0x8005FC2C; // type:function size:0x1B8 scope:global -bMatrixToQuaternion__FR11bQuaternionRC8bMatrix4 = .text:0x8005FDE4; // type:function size:0x290 scope:global -bNewSlotPool__FiiPCci = .text:0x80060074; // type:function size:0x40 scope:global -bDeleteSlotPool__FP8SlotPool = .text:0x800600B4; // type:function size:0x2C scope:global -bMalloc__FP8SlotPool = .text:0x800600E0; // type:function size:0x20 scope:global -bOMalloc__FP8SlotPool = .text:0x80060100; // type:function size:0x20 scope:global -bFree__FP8SlotPoolPv = .text:0x80060120; // type:function size:0x20 scope:global -bIsSlotPoolFull__FP8SlotPool = .text:0x80060140; // type:function size:0x18 scope:global -bCountFreeSlots__FP8SlotPool = .text:0x80060158; // type:function size:0x10 scope:global -bCountTotalSlots__FP8SlotPool = .text:0x80060168; // type:function size:0x8 scope:global -NewSlotPool__8SlotPooliiPCci = .text:0x80060170; // type:function size:0x88 scope:global -DeleteSlotPool__8SlotPoolP8SlotPool = .text:0x800601F8; // type:function size:0x28 scope:global -FlushSlotPool__8SlotPool = .text:0x80060220; // type:function size:0x70 scope:global -ExpandSlotPool__8SlotPooli = .text:0x80060290; // type:function size:0xA8 scope:global -GetSlotNumber__8SlotPoolPv = .text:0x80060338; // type:function size:0x50 scope:global -GetSlot__8SlotPooli = .text:0x80060388; // type:function size:0x48 scope:global -GetAllocatedSlot__8SlotPooli = .text:0x800603D0; // type:function size:0xC0 scope:global -CleanupExpandedSlotPools__8SlotPool = .text:0x80060490; // type:function size:0x144 scope:global -Malloc__8SlotPool = .text:0x800605D4; // type:function size:0xAC scope:global -FastMalloc__8SlotPool = .text:0x80060680; // type:function size:0x38 scope:global -Free__8SlotPoolPv = .text:0x800606B8; // type:function size:0x1C scope:global -Malloc__8SlotPooliPPv = .text:0x800606D4; // type:function size:0x150 scope:global -__15SlotPoolManager = .text:0x80060824; // type:function size:0x1C scope:global -NewSlotPool__15SlotPoolManageriiPCci = .text:0x80060840; // type:function size:0x74 scope:global -DeleteSlotPool__15SlotPoolManagerP8SlotPool = .text:0x800608B4; // type:function size:0x94 scope:global -CleanupExpandedSlotPools__15SlotPoolManager = .text:0x80060948; // type:function size:0x44 scope:global -bDistBetween__FPC8bVector3T0 = .text:0x8006098C; // type:function size:0x8C scope:global -bNormalize__FP8bVector2PC8bVector2 = .text:0x80060A18; // type:function size:0xA8 scope:global -bNormalize__FP8bVector3PC8bVector3 = .text:0x80060AC0; // type:function size:0xCC scope:global -bNormalize__FP8bVector3PC8bVector3f = .text:0x80060B8C; // type:function size:0xC8 scope:global -bNormalize__FP8bVector4PC8bVector4 = .text:0x80060C54; // type:function size:0xD4 scope:global -bScaleAdd__FP8bVector2PC8bVector2T1f = .text:0x80060D28; // type:function size:0x28 scope:global -bScaleAdd__FP8bVector3PC8bVector3T1f = .text:0x80060D50; // type:function size:0x38 scope:global -bScaleAdd__FP8bVector4PC8bVector4T1f = .text:0x80060D88; // type:function size:0x48 scope:global -bEqual__FPC8bVector2T0f = .text:0x80060DD0; // type:function size:0x44 scope:global -bCross__FP8bVector3PC8bVector3T1 = .text:0x80060E14; // type:function size:0x44 scope:global -bInitializeBoundingBox__FP8bVector2T0 = .text:0x80060E58; // type:function size:0x24 scope:global -bExpandBoundingBox__FP8bVector2T0PC8bVector2 = .text:0x80060E7C; // type:function size:0x4C scope:global -bBoundingBoxIsInside__FPC8bVector2N20f = .text:0x80060EC8; // type:function size:0x5C scope:global -bBoundingBoxOverlapping__FPC8bVector2N30 = .text:0x80060F24; // type:function size:0x5C scope:global -bInitializeBoundingBox__FP8bVector3T0 = .text:0x80060F80; // type:function size:0x2C scope:global -bInitializeBoundingBox__FP8bVector3T0PC8bVector3 = .text:0x80060FAC; // type:function size:0x28 scope:global -bExpandBoundingBox__FP8bVector3T0PC8bVector3f = .text:0x80060FD4; // type:function size:0xA0 scope:global -bExpandBoundingBox__FP8bVector3T0PC8bVector3T2 = .text:0x80061074; // type:function size:0x94 scope:global -bBoundingBoxIsInside__FPC8bVector3N20f = .text:0x80061108; // type:function size:0x80 scope:global -bDistToLine__FPC8bVector2N20 = .text:0x80061188; // type:function size:0x1FC scope:global -bIsPointInPoly__FPC8bVector2T0i = .text:0x80061384; // type:function size:0xBC scope:global -bIsPointInPoly__FPC8bVector2PC8bVector3i = .text:0x80061440; // type:function size:0xBC scope:global -bFunkGameCube__FPCcUcPCvl = .text:0x800614FC; // type:function size:0x4 scope:global -GetAlignmentAdjustTop__Fiii = .text:0x80061500; // type:function size:0x20 scope:global -GetAlignmentAdjustBottom__Fiii = .text:0x80061520; // type:function size:0x1C scope:global -Init__10MemoryPoolPviPCc = .text:0x8006153C; // type:function size:0xB4 scope:global -Close__10MemoryPool = .text:0x800615F0; // type:function size:0x58 scope:global -AddMemory__10MemoryPoolPvi = .text:0x80061648; // type:function size:0x38 scope:global -FreeMemory__10MemoryPoolPviPCc = .text:0x80061680; // type:function size:0x80 scope:global -AddFreeMemory__10MemoryPoolPviPCc = .text:0x80061700; // type:function size:0x170 scope:global -AllocateMemory__10MemoryPooliiiiiPi = .text:0x80061870; // type:function size:0x2EC scope:global -GetAmountFree__10MemoryPool = .text:0x80061B5C; // type:function size:0x60 scope:global -GetLargestFreeBlock__10MemoryPool = .text:0x80061BBC; // type:function size:0x68 scope:global -VerifyPoolIntegrity__10MemoryPoolb = .text:0x80061C24; // type:function size:0x1E4 scope:global -CheckFlipMemoryByAddress__FP16AllocationHeaderT0 = .text:0x80061E08; // type:function size:0x20 scope:global -CheckFlipMemoryByAllocationNumber__FP16AllocationHeaderT0 = .text:0x80061E28; // type:function size:0x8 scope:global -PrintAllocationsByAddress__10MemoryPoolii = .text:0x80061E30; // type:function size:0x120 scope:global -PrintAllocations__10MemoryPoolii = .text:0x80061F50; // type:function size:0xD8 scope:global -GetAllocations__10MemoryPoolPPvi = .text:0x80062028; // type:function size:0x74 scope:global -CheckFancyStompDetector__10MemoryPoolPCvi = .text:0x8006209C; // type:function size:0x8 scope:global -TraceNewPool__10MemoryPool = .text:0x800620A4; // type:function size:0x70 scope:global -TraceDeletePool__10MemoryPool = .text:0x80062114; // type:function size:0x38 scope:global -TraceFreeMemory__10MemoryPoolPvi = .text:0x8006214C; // type:function size:0x6C scope:global -bGetFreeMemoryPoolNum__Fv = .text:0x800621B8; // type:function size:0x58 scope:global -bReserveMemoryPool__Fi = .text:0x80062210; // type:function size:0x18 scope:global -bSetMemoryPoolOverrideInfo__FiP22MemoryPoolOverrideInfo = .text:0x80062228; // type:function size:0x20 scope:global -bInitMemoryPool__FiPviPCc = .text:0x80062248; // type:function size:0x84 scope:global -bCloseMemoryPool__Fi = .text:0x800622CC; // type:function size:0x40 scope:global -bSetMemoryPoolDebugFill__Fib = .text:0x8006230C; // type:function size:0x1C scope:global -bSetMemoryPoolDebugTracing__Fib = .text:0x80062328; // type:function size:0x84 scope:global -bSetMemoryPoolTopDirection__Fib = .text:0x800623AC; // type:function size:0x18 scope:global -bMemorySetOverflowPoolNumber__Fii = .text:0x800623C4; // type:function size:0x18 scope:global -PlatformMemoryINIT__Fv = .text:0x800623DC; // type:function size:0x8 scope:global -Init__21bVirtualMemoryManager = .text:0x800623E4; // type:function size:0x74 scope:global -Alloc__21bVirtualMemoryManager = .text:0x80062458; // type:function size:0x38 scope:global -GetVirtualMemoryPoolName__Fv = .text:0x80062490; // type:function size:0xC scope:global -GetVirtualMemoryPoolNumber__Fv = .text:0x8006249C; // type:function size:0x8 scope:global -GetVirtualMemoryAllocParams__Fv = .text:0x800624A4; // type:function size:0x28 scope:global -bMemoryInit__Fv = .text:0x800624CC; // type:function size:0x150 scope:global -bMalloc__Fii = .text:0x8006261C; // type:function size:0x2C scope:global -bWareMalloc__FiPCcii = .text:0x80062648; // type:function size:0x244 scope:global -bFree__FPv = .text:0x8006288C; // type:function size:0x180 scope:global -bGetMallocSize__FPCv = .text:0x80062A0C; // type:function size:0x18 scope:global -bGetMallocPool__FPv = .text:0x80062A24; // type:function size:0x18 scope:global -bGetMallocName__FPv = .text:0x80062A3C; // type:function size:0x18 scope:global -bCountFreeMemory__Fi = .text:0x80062A54; // type:function size:0x74 scope:global -bLargestMalloc__Fi = .text:0x80062AC8; // type:function size:0xA8 scope:global -bVerifyPoolIntegrity__Fi = .text:0x80062B70; // type:function size:0x3C scope:global -bGetMemoryPoolNum__FPCc = .text:0x80062BAC; // type:function size:0x9C scope:global -bMemoryGetAllocationNumber__Fv = .text:0x80062C48; // type:function size:0xC scope:global -bMemoryPrintAllocations__Fiii = .text:0x80062C54; // type:function size:0x30 scope:global -bMemoryPrintAllocationsByAddress__Fiii = .text:0x80062C84; // type:function size:0x38 scope:global -bMemoryGetAllocations__FiPPvi = .text:0x80062CBC; // type:function size:0x40 scope:global -Alloc__16bMemoryAllocatorUiRCQ22EA12TagValuePair = .text:0x80062CFC; // type:function size:0x90 scope:global -Free__16bMemoryAllocatorPvUi = .text:0x80062D8C; // type:function size:0x24 scope:global -AddRef__16bMemoryAllocator = .text:0x80062DB0; // type:function size:0x14 scope:global -Release__16bMemoryAllocator = .text:0x80062DC4; // type:function size:0x5C scope:global -bMemoryCreatePersistentPool__Fi = .text:0x80062E20; // type:function size:0x64 scope:global -bStringHashUpper__FPCc = .text:0x80062E84; // type:function size:0x48 scope:global -bStringHash__FPCc = .text:0x80062ECC; // type:function size:0x30 scope:global -bStringHash__FPCci = .text:0x80062EFC; // type:function size:0x30 scope:global -bStrLen__FPCc = .text:0x80062F2C; // type:function size:0x30 scope:global -bStrCpy__FPcPCc = .text:0x80062F5C; // type:function size:0x34 scope:global -bStrNCpy__FPcPCci = .text:0x80062F90; // type:function size:0x4C scope:global -bSafeStrCpy__FPcPCci = .text:0x80062FDC; // type:function size:0x58 scope:global -bStrCmp__FPCcT0 = .text:0x80063034; // type:function size:0x64 scope:global -bStrNCmp__FPCcT0i = .text:0x80063098; // type:function size:0xB0 scope:global -bStrICmp__FPCcT0 = .text:0x80063148; // type:function size:0x88 scope:global -bStrNICmp__FPCcT0i = .text:0x800631D0; // type:function size:0xFC scope:global -bStrCat__FPcPCcT1 = .text:0x800632CC; // type:function size:0x70 scope:global -bToUpper__FPc = .text:0x8006333C; // type:function size:0x38 scope:global -bStrToLong__FPCc = .text:0x80063374; // type:function size:0xF4 scope:global -bStrToFloat__FPCc = .text:0x80063468; // type:function size:0x1CC scope:global -bStrLen__FPCUs = .text:0x80063634; // type:function size:0x34 scope:global -bStrCpy__FPUsPCUs = .text:0x80063668; // type:function size:0x38 scope:global -bStrCpy__FPUsPCc = .text:0x800636A0; // type:function size:0x40 scope:global -bStrNCpy__FPUsPCci = .text:0x800636E0; // type:function size:0x58 scope:global -bStrStr__FPCcT0 = .text:0x80063738; // type:function size:0x80 scope:global -bStrIStr__FPCcT0 = .text:0x800637B8; // type:function size:0x74 scope:global -bMatchNameWithWildcard__FPCcT0 = .text:0x8006382C; // type:function size:0x140 scope:global -Init__17bSharedStringPooli = .text:0x8006396C; // type:function size:0x6C scope:global -Allocate__17bSharedStringPoolPCc = .text:0x800639D8; // type:function size:0x2B4 scope:global -Free__17bSharedStringPoolPCc = .text:0x80063C8C; // type:function size:0x1EC scope:global -bInitSharedStringPool__Fi = .text:0x80063E78; // type:function size:0x2C scope:global -bAllocateSharedString__FPCc = .text:0x80063EA4; // type:function size:0x2C scope:global -bFreeSharedString__FPCc = .text:0x80063ED0; // type:function size:0x2C scope:global -IsWhiteSpace__Fc = .text:0x80063EFC; // type:function size:0x48 scope:global -__11SpeedScriptPCci = .text:0x80063F44; // type:function size:0x50 scope:global -InitFromFile__11SpeedScriptPCc = .text:0x80063F94; // type:function size:0x68 scope:global -_._11SpeedScript = .text:0x80063FFC; // type:function size:0x84 scope:global -Error__11SpeedScriptPCce = .text:0x80064080; // type:function size:0xC0 scope:global -DefaultErrorFunction__11SpeedScriptPCc = .text:0x80064140; // type:function size:0x20 scope:global -GetPositionName__11SpeedScript = .text:0x80064160; // type:function size:0xAC scope:global -ResizeEntryTable__11SpeedScripti = .text:0x8006420C; // type:function size:0x68 scope:global -AddEntry__11SpeedScript = .text:0x80064274; // type:function size:0x84 scope:global -ParseNextWord__11SpeedScriptPcPCciPiT4 = .text:0x800642F8; // type:function size:0x180 scope:global -Init__11SpeedScriptPCcT1i = .text:0x80064478; // type:function size:0x1F8 scope:global -HandleIncludeScript__11SpeedScriptPCc = .text:0x80064670; // type:function size:0x194 scope:global -GetNextCommand__11SpeedScript = .text:0x80064804; // type:function size:0xA0 scope:global -GetNextCommand__11SpeedScriptPCc = .text:0x800648A4; // type:function size:0x5C scope:global -IsAnotherArgument__11SpeedScript = .text:0x80064900; // type:function size:0x44 scope:global -GetNextArgument__11SpeedScript = .text:0x80064944; // type:function size:0x68 scope:global -GetNextArgumentString__11SpeedScript = .text:0x800649AC; // type:function size:0x5C scope:global -GetNextArgumentInt__11SpeedScript = .text:0x80064A08; // type:function size:0xA0 scope:global -GetNextArgumentShort__11SpeedScript = .text:0x80064AA8; // type:function size:0x74 scope:global -GetNextArgumentFloat__11SpeedScript = .text:0x80064B1C; // type:function size:0x24 scope:global -GetNextArgumentVector3__11SpeedScript = .text:0x80064B40; // type:function size:0x6C scope:global -__static_initialization_and_destruction_0 = .text:0x80064BAC; // type:function size:0x174 scope:local -_._16bMemoryAllocator = .text:0x80064D20; // type:function size:0x34 scope:global -_._Q32EA9Allocator10IAllocator = .text:0x80064D54; // type:function size:0x34 scope:global -_GLOBAL_.I.bCalculateCrc32__FPCviUi = .text:0x80064D88; // type:function size:0x2C scope:local -__6Camera = .text:0x80064DB4; // type:function size:0x16C scope:global -SetCameraMatrix__6CameraRC8bMatrix4f = .text:0x80064F20; // type:function size:0x574 scope:global -CommunicateWithJollyRancher__6CameraPc = .text:0x80065494; // type:function size:0xE4 scope:global -NoiseBase__Fi = .text:0x80065578; // type:function size:0x70 scope:global -NoiseInterpolated__Ff = .text:0x800655E8; // type:function size:0xE4 scope:global -Noise__Ff = .text:0x800656CC; // type:function size:0x94 scope:global -FovRelativeAngle__6CameraUs = .text:0x80065760; // type:function size:0x70 scope:global -ApplyNoise__6CameraP8bMatrix4ff = .text:0x800657D0; // type:function size:0x2B4 scope:global -UpdateAll__6Cameraf = .text:0x80065A84; // type:function size:0x34 scope:global -CameraMoverRestartRace__Fv = .text:0x80065AB8; // type:function size:0x90 scope:global -DoesCameraTypeDisablePreculler__F16CameraMoverTypes = .text:0x80065B48; // type:function size:0x20 scope:global -__11CameraMoveri16CameraMoverTypes = .text:0x80065B68; // type:function size:0x180 scope:global -_._11CameraMover = .text:0x80065CE8; // type:function size:0x78 scope:global -Update__11CameraMoverf = .text:0x80065D60; // type:function size:0x4 scope:global -Render__11CameraMoverP5eView = .text:0x80065D64; // type:function size:0x4 scope:global -Enable__11CameraMover = .text:0x80065D68; // type:function size:0x74 scope:global -Disable__11CameraMover = .text:0x80065DDC; // type:function size:0x4C scope:global -ChopperNoise__11CameraMoverP8bMatrix4fb = .text:0x80065E28; // type:function size:0x304 scope:global -HandheldNoise__11CameraMoverP8bMatrix4fb = .text:0x8006612C; // type:function size:0x134 scope:global -TerrainVelocityNoise__11CameraMoverP8bMatrix4P12CameraAnchorff = .text:0x80066260; // type:function size:0x4A8 scope:global -ComputeBankedUpVector__11CameraMoverP8bVector3N21Us = .text:0x80066708; // type:function size:0xB0 scope:global -IsSomethingInBetween__11CameraMoverRCQ25UMath7Vector4T1 = .text:0x800667B8; // type:function size:0x150 scope:global -IsSomethingInBetween__11CameraMoverPC8bVector3T1 = .text:0x80066908; // type:function size:0x6C scope:global -MinDistToWall__11CameraMover = .text:0x80066974; // type:function size:0xC scope:global -EnforceMinGapToWalls__11CameraMoverP9WColliderP8bVector3T2P8bVector4 = .text:0x80066980; // type:function size:0x4C8 scope:global -IsoProjectionMatrix__11CameraMoverP8bMatrix4P8bVector3T2P8bVector2 = .text:0x80066E48; // type:function size:0xEC scope:global -AdjustHeightAroundCar__11CameraMoverPC8bVector3P8bVector3T2 = .text:0x80066F34; // type:function size:0x324 scope:global -DutchAroundCar__11CameraMoverP8bVector3T1 = .text:0x80067258; // type:function size:0x304 scope:global -MinGapCars__11CameraMoverP8bMatrix4P8bVector3T2 = .text:0x8006755C; // type:function size:0x220 scope:global -MinGapTopology__11CameraMoverP8bMatrix4P8bVector3 = .text:0x8006777C; // type:function size:0x524 scope:global -OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv = .text:0x80067CA0; // type:function size:0x34 scope:global -GetAnchorID__11CameraMover = .text:0x80067CD4; // type:function size:0x48 scope:global -FovCubicInit__11CameraMoverP8tCubic1D = .text:0x80067D1C; // type:function size:0xAC scope:global -EyeCubicInit__11CameraMoverP8tCubic3DP8bMatrix4P8bVector3 = .text:0x80067DC8; // type:function size:0x124 scope:global -LookCubicInit__11CameraMoverP8tCubic3DP8bMatrix4P8bVector3 = .text:0x80067EEC; // type:function size:0x124 scope:global -SetEyeLook__11CameraMoverP8tCubic3DT1P8tCubic1DP8bMatrix4P8bVector3 = .text:0x80068010; // type:function size:0x68 scope:global -RenderCameraMovers__FP5eView = .text:0x80068078; // type:function size:0x70 scope:global -UpdateCameraMovers__Ff = .text:0x800680E8; // type:function size:0x4F0 scope:global -Update__12CameraAnchorfRC8bMatrix4RC8bVector3T3 = .text:0x800685D8; // type:function size:0x178 scope:global -SetModel__12CameraAnchori = .text:0x80068750; // type:function size:0x78 scope:global -GetPov__12CameraAnchori = .text:0x800687C8; // type:function size:0x344 scope:global -__12CameraAnchori = .text:0x80068B0C; // type:function size:0x328 scope:global -__Q28CameraAI8Director8EVIEW_ID = .text:0x80068E34; // type:function size:0x1E8 scope:global -_._Q28CameraAI8Director = .text:0x8006901C; // type:function size:0x174 scope:global -ReleaseAction__Q28CameraAI8Director = .text:0x80069190; // type:function size:0x58 scope:global -Reset__Q28CameraAI8Director = .text:0x800691E8; // type:function size:0xA0 scope:global -SetAction__Q28CameraAI8DirectorGQ26Attrib9StringKey = .text:0x80069288; // type:function size:0x19C scope:global -AreMomentCamerasEnabled__Fv = .text:0x80069424; // type:function size:0x54 scope:local -SelectAction__Q28CameraAI8Director = .text:0x80069478; // type:function size:0x758 scope:global -TotaledStart__Q28CameraAI8Director = .text:0x80069BD0; // type:function size:0xAC scope:global -JumpStart__Q28CameraAI8Directorf = .text:0x80069C7C; // type:function size:0x14 scope:global -EndJumping__Q28CameraAI8Director = .text:0x80069C90; // type:function size:0x28 scope:global -PursuitStart__Q28CameraAI8Director = .text:0x80069CB8; // type:function size:0x1B4 scope:global -EndPursuitStart__Q28CameraAI8Director = .text:0x80069E6C; // type:function size:0x28 scope:global -Update__Q28CameraAI8Directorf = .text:0x80069E94; // type:function size:0x16C scope:global -GetMover__Q28CameraAI8Director = .text:0x8006A000; // type:function size:0x48 scope:global -FindPlayer__F8EVIEW_ID = .text:0x8006A048; // type:function size:0x88 scope:local -FindDirector__F8EVIEW_ID = .text:0x8006A0D0; // type:function size:0x44 scope:local -FindDirector__FUi = .text:0x8006A114; // type:function size:0xB8 scope:local -Update__8CameraAIf = .text:0x8006A1CC; // type:function size:0xFC scope:global -Reset__8CameraAIv = .text:0x8006A2C8; // type:function size:0x5C scope:global -SetAction__8CameraAI8EVIEW_IDPCc = .text:0x8006A324; // type:function size:0x9C scope:global -StartCinematicSlowdown__8CameraAI8EVIEW_IDf = .text:0x8006A3C0; // type:function size:0xFC scope:global -MaybeDoTotaledCam__8CameraAIP7IPlayer = .text:0x8006A4BC; // type:function size:0x94 scope:global -MaybeDoPursuitCam__8CameraAIP8IVehicle = .text:0x8006A550; // type:function size:0x114 scope:global -MaybeKillPursuitCam__8CameraAIUi = .text:0x8006A664; // type:function size:0x2C scope:global -AverageAir__FP8ISimablefPfT2 = .text:0x8006A690; // type:function size:0x7F4 scope:local -MaybeKillJumpCam__8CameraAIUi = .text:0x8006AE84; // type:function size:0x2C scope:global -MaybeDoJumpCam__8CameraAIP8ISimable = .text:0x8006AEB0; // type:function size:0x3D0 scope:global -Init__8CameraAIv = .text:0x8006B280; // type:function size:0x6C scope:global -Shutdown__8CameraAIv = .text:0x8006B2EC; // type:function size:0x164 scope:global -AddAvoidable__8CameraAIP5IBody = .text:0x8006B450; // type:function size:0xB8 scope:global -RemoveAvoidable__8CameraAIP5IBody = .text:0x8006B508; // type:function size:0xB4 scope:global -Construct__13CDActionDrivePQ28CameraAI8Director = .text:0x8006B5BC; // type:function size:0x11C scope:global -__13CDActionDrivePQ28CameraAI8DirectorP7IPlayer = .text:0x8006B6D8; // type:function size:0x5B0 scope:global -_._13CDActionDrive = .text:0x8006BC88; // type:function size:0x2A4 scope:global -Reset__13CDActionDrive = .text:0x8006BF2C; // type:function size:0x30 scope:global -OnDetached__13CDActionDriveP11IAttachable = .text:0x8006BF5C; // type:function size:0xB4 scope:global -OnCarDetached__13CDActionDrive = .text:0x8006C010; // type:function size:0x78 scope:global -OnCollision__13CDActionDriveRCQ33Sim9Collision4Info = .text:0x8006C088; // type:function size:0x198 scope:global -AquireCar__13CDActionDrive = .text:0x8006C220; // type:function size:0x2B4 scope:global -Update__13CDActionDrivef = .text:0x8006C4D4; // type:function size:0x11D4 scope:global -GetTrafficBasis__13CDActionDriveRQ25UMath7Matrix4RQ25UMath7Vector3 = .text:0x8006D6A8; // type:function size:0xA4 scope:global -MessageJumpCut__13CDActionDriveRC8MJumpCut = .text:0x8006D74C; // type:function size:0x40 scope:global -Construct__16CDActionTrackCarPQ28CameraAI8Director = .text:0x8006D78C; // type:function size:0x11C scope:global -__16CDActionTrackCarPQ28CameraAI8DirectorP7IPlayer = .text:0x8006D8A8; // type:function size:0x3FC scope:global -_._16CDActionTrackCar = .text:0x8006DCA4; // type:function size:0x258 scope:global -Reset__16CDActionTrackCar = .text:0x8006DEFC; // type:function size:0x4 scope:global -OnDetached__16CDActionTrackCarP11IAttachable = .text:0x8006DF00; // type:function size:0xB4 scope:global -OnCarDetached__16CDActionTrackCar = .text:0x8006DFB4; // type:function size:0x6C scope:global -AquireCar__16CDActionTrackCar = .text:0x8006E020; // type:function size:0x224 scope:global -Update__16CDActionTrackCarf = .text:0x8006E244; // type:function size:0x1C4 scope:global -GetTrafficBasis__16CDActionTrackCarRQ25UMath7Matrix4RQ25UMath7Vector3 = .text:0x8006E408; // type:function size:0xA4 scope:global -Construct__16CDActionTrackCopPQ28CameraAI8Director = .text:0x8006E4AC; // type:function size:0x11C scope:global -__16CDActionTrackCopPQ28CameraAI8DirectorP7IPlayer = .text:0x8006E5C8; // type:function size:0x434 scope:global -_._16CDActionTrackCop = .text:0x8006E9FC; // type:function size:0x258 scope:global -Reset__16CDActionTrackCop = .text:0x8006EC54; // type:function size:0x4 scope:global -OnDetached__16CDActionTrackCopP11IAttachable = .text:0x8006EC58; // type:function size:0xB4 scope:global -OnCarDetached__16CDActionTrackCop = .text:0x8006ED0C; // type:function size:0x6C scope:global -AquireCar__16CDActionTrackCop = .text:0x8006ED78; // type:function size:0x224 scope:global -Update__16CDActionTrackCopf = .text:0x8006EF9C; // type:function size:0x1C4 scope:global -GetTrafficBasis__16CDActionTrackCopRQ25UMath7Matrix4RQ25UMath7Vector3 = .text:0x8006F160; // type:function size:0xA4 scope:global -Construct__16CDActionShowcasePQ28CameraAI8Director = .text:0x8006F204; // type:function size:0x11C scope:global -IsRightSide__Fv = .text:0x8006F320; // type:function size:0x2B0 scope:local -__16CDActionShowcasePQ28CameraAI8DirectorP7IPlayer = .text:0x8006F5D0; // type:function size:0x2B0 scope:global -_._16CDActionShowcase = .text:0x8006F880; // type:function size:0x13C scope:global -Reset__16CDActionShowcase = .text:0x8006F9BC; // type:function size:0x4 scope:global -OnDetached__16CDActionShowcaseP11IAttachable = .text:0x8006F9C0; // type:function size:0xB4 scope:global -OnCarDetached__16CDActionShowcase = .text:0x8006FA74; // type:function size:0x6C scope:global -AquireCar__16CDActionShowcase = .text:0x8006FAE0; // type:function size:0x1D8 scope:global -Update__16CDActionShowcasef = .text:0x8006FCB8; // type:function size:0x1C4 scope:global -Construct__13CDActionDebugPQ28CameraAI8Director = .text:0x8006FE7C; // type:function size:0x44 scope:global -__13CDActionDebugPQ28CameraAI8Director = .text:0x8006FEC0; // type:function size:0x2D8 scope:global -_._13CDActionDebug = .text:0x80070198; // type:function size:0x1C8 scope:global -Reset__13CDActionDebug = .text:0x80070360; // type:function size:0x4 scope:global -Update__13CDActionDebugf = .text:0x80070364; // type:function size:0x8C scope:global -GetTrafficBasis__13CDActionDebugRQ25UMath7Matrix4RQ25UMath7Vector3 = .text:0x800703F0; // type:function size:0x68 scope:global -Construct__11CDActionIcePQ28CameraAI8Director = .text:0x80070458; // type:function size:0x144 scope:global -__11CDActionIcePQ28CameraAI8DirectorP7IPlayer = .text:0x8007059C; // type:function size:0x300 scope:global -_._11CDActionIce = .text:0x8007089C; // type:function size:0x14C scope:global -Reset__11CDActionIce = .text:0x800709E8; // type:function size:0x4 scope:global -OnDetached__11CDActionIceP11IAttachable = .text:0x800709EC; // type:function size:0xB8 scope:global -ReleaseCar__11CDActionIceb = .text:0x80070AA4; // type:function size:0x70 scope:global -AquireCar__11CDActionIce = .text:0x80070B14; // type:function size:0x208 scope:global -Update__11CDActionIcef = .text:0x80070D1C; // type:function size:0x424 scope:global -Construct__21CDActionDebugWatchCarPQ28CameraAI8Director = .text:0x80071140; // type:function size:0x58 scope:global -__21CDActionDebugWatchCarPQ28CameraAI8Director = .text:0x80071198; // type:function size:0x3D0 scope:global -_._21CDActionDebugWatchCar = .text:0x80071568; // type:function size:0x31C scope:global -Reset__21CDActionDebugWatchCar = .text:0x80071884; // type:function size:0x4 scope:global -GetSimable__21CDActionDebugWatchCar = .text:0x80071888; // type:function size:0x58 scope:global -ReleaseTarget__21CDActionDebugWatchCar = .text:0x800718E0; // type:function size:0x50 scope:global -AquireTarget__21CDActionDebugWatchCar = .text:0x80071930; // type:function size:0x1B4 scope:global -Update__21CDActionDebugWatchCarf = .text:0x80071AE4; // type:function size:0x78 scope:global -GetTrafficBasis__21CDActionDebugWatchCarRQ25UMath7Matrix4RQ25UMath7Vector3 = .text:0x80071B5C; // type:function size:0x5C scope:global -Blend__t6tTable1Z12CubicPovDataP12CubicPovDataN21f = .text:0x80071BB8; // type:function size:0x30C scope:global -bClamp__FP8bVector3PC8bVector3T1 = .text:0x80071EC4; // type:function size:0x68 scope:global -OutsidePovType__Fi = .text:0x80071F2C; // type:function size:0x2C scope:global -RenderCarPovType__Fib = .text:0x80071F58; // type:function size:0x3C scope:global -IsHoodCamera__16CubicCameraMover = .text:0x80071F94; // type:function size:0x24 scope:global -__16CubicCameraMoveriP12CameraAnchoribN34 = .text:0x80071FB8; // type:function size:0x8E4 scope:global -_._16CubicCameraMover = .text:0x8007289C; // type:function size:0x94 scope:global -MinDistToWall__16CubicCameraMover = .text:0x80072930; // type:function size:0xC scope:global -OutsidePOV__16CubicCameraMover = .text:0x8007293C; // type:function size:0x24 scope:global -RenderCarPOV__16CubicCameraMover = .text:0x80072960; // type:function size:0x28 scope:global -HighliteMode__16CubicCameraMover = .text:0x80072988; // type:function size:0x8 scope:global -SetSnapNext__16CubicCameraMover = .text:0x80072990; // type:function size:0x20 scope:global -SetPovType__16CubicCameraMoveri = .text:0x800729B0; // type:function size:0x80 scope:global -ResetState__16CubicCameraMover = .text:0x80072A30; // type:function size:0x150 scope:global -IsUnderVehicle__16CubicCameraMover = .text:0x80072B80; // type:function size:0x44C scope:global -SetForward__16CubicCameraMoverP3POVb = .text:0x80072FCC; // type:function size:0x24C scope:global -MakeSpace__16CubicCameraMoverP8bMatrix4 = .text:0x80073218; // type:function size:0x1B8 scope:global -CameraAccelCurve__16CubicCameraMoverP8bVector3 = .text:0x800733D0; // type:function size:0x2F4 scope:global -CameraSpeedHug__16CubicCameraMoverP8bVector3 = .text:0x800736C4; // type:function size:0x158 scope:global -SetDesired__16CubicCameraMoverP8bMatrix4P3POVP12CubicPovDatab = .text:0x8007381C; // type:function size:0x634 scope:global -Update__16CubicCameraMoverf = .text:0x80073E50; // type:function size:0xEC0 scope:global -__19TrackCarCameraMoveriP12CameraAnchorb = .text:0x80074D10; // type:function size:0xA8 scope:global -_._19TrackCarCameraMover = .text:0x80074DB8; // type:function size:0x88 scope:global -IsAnyCopNear__FP12CameraAnchor = .text:0x80074E40; // type:function size:0x188 scope:local -IsBeingPursued__Fi = .text:0x80074FC8; // type:function size:0xE0 scope:local -FixWorldHeight__FPQ25UMath7Vector3i = .text:0x800750A8; // type:function size:0xE4 scope:local -Init__19TrackCarCameraMover = .text:0x8007518C; // type:function size:0xA94 scope:global -GetTarget__19TrackCarCameraMover = .text:0x80075C20; // type:function size:0x24 scope:global -Update__19TrackCarCameraMoverf = .text:0x80075C44; // type:function size:0x3E0 scope:global -__6Bezier = .text:0x80076024; // type:function size:0x80 scope:global -GetPoint__6BezierP8bVector3f = .text:0x800760A4; // type:function size:0x80 scope:global -CrossXY__FPC8bVector3T0 = .text:0x80076124; // type:function size:0x1C scope:local -__19TrackCopCameraMoveriP12CameraAnchorb = .text:0x80076140; // type:function size:0xD0 scope:global -_._19TrackCopCameraMover = .text:0x80076210; // type:function size:0x94 scope:global -FindPursuitVehiclePosition__19TrackCopCameraMoverP8bVector3 = .text:0x800762A4; // type:function size:0x28C scope:global -Init__19TrackCopCameraMover = .text:0x80076530; // type:function size:0x8B0 scope:global -GetTarget__19TrackCopCameraMover = .text:0x80076DE0; // type:function size:0x24 scope:global -Update__19TrackCopCameraMoverf = .text:0x80076E04; // type:function size:0x3B4 scope:global -__21DebugWorldCameraMoveriPC8bVector3T212JoystickPort = .text:0x800771B8; // type:function size:0x114 scope:global -_._21DebugWorldCameraMover = .text:0x800772CC; // type:function size:0x78 scope:global -JoyHandler__21DebugWorldCameraMover = .text:0x80077344; // type:function size:0x420 scope:global -Update__21DebugWorldCameraMoverf = .text:0x80077764; // type:function size:0x80C scope:global -__25RearViewMirrorCameraMoveriP12CameraAnchor = .text:0x80077F70; // type:function size:0x60 scope:global -_._25RearViewMirrorCameraMover = .text:0x80077FD0; // type:function size:0x30 scope:global -Update__25RearViewMirrorCameraMoverf = .text:0x80078000; // type:function size:0x170 scope:global -__20SelectCarCameraMoveri = .text:0x80078170; // type:function size:0xE8 scope:global -_._20SelectCarCameraMover = .text:0x80078258; // type:function size:0x30 scope:global -Update__20SelectCarCameraMoverf = .text:0x80078288; // type:function size:0x524 scope:global -CreateCameraMatrix__20SelectCarCameraMoverP8bMatrix4P19SelectCarCameraData = .text:0x800787AC; // type:function size:0x170 scope:global -SetVRotateSpeed__20SelectCarCameraMoverf = .text:0x8007891C; // type:function size:0xD0 scope:global -SetHRotateSpeed__20SelectCarCameraMoverf = .text:0x800789EC; // type:function size:0xD0 scope:global -SetZoomSpeed__20SelectCarCameraMoverf = .text:0x80078ABC; // type:function size:0xD0 scope:global -SetCurrentOrientation__20SelectCarCameraMoverR8bVector3ffT1 = .text:0x80078B8C; // type:function size:0x3C scope:global -SetDesiredOrientation__20SelectCarCameraMoverR8bVector3ffT1ffi = .text:0x80078BC8; // type:function size:0x124 scope:global -FindBestAngleGoal__20SelectCarCameraMoverff = .text:0x80078CEC; // type:function size:0x78 scope:global -__19ShowcaseCameraMoveriP12CameraAnchorb = .text:0x80078D64; // type:function size:0x88 scope:global -_._19ShowcaseCameraMover = .text:0x80078DEC; // type:function size:0x30 scope:global -SetFromTweakables__19ShowcaseCameraMover = .text:0x80078E1C; // type:function size:0x5C scope:global -BuildPhotoCameraMatrix__19ShowcaseCameraMover = .text:0x80078E78; // type:function size:0x258 scope:global -ResetState__19ShowcaseCameraMover = .text:0x800790D0; // type:function size:0x1C scope:global -Update__19ShowcaseCameraMoverf = .text:0x800790EC; // type:function size:0xCC scope:global -MakeCoeffs__Q23ICE7Cubic1D = .text:0x800791B8; // type:function size:0x48 scope:global -GetVal__CQ23ICE7Cubic1Df = .text:0x80079200; // type:function size:0x20 scope:global -GetdVal__CQ23ICE7Cubic1Df = .text:0x80079220; // type:function size:0x28 scope:global -GetddVal__CQ23ICE7Cubic1Df = .text:0x80079248; // type:function size:0x20 scope:global -GetValDesired__CQ23ICE7Cubic1D = .text:0x80079268; // type:function size:0x8 scope:global -GetDerivative__CQ23ICE7Cubic1Df = .text:0x80079270; // type:function size:0x44 scope:global -GetSecondDerivative__CQ23ICE7Cubic1Df = .text:0x800792B4; // type:function size:0x48 scope:global -ClampDerivative__Q23ICE7Cubic1Df = .text:0x800792FC; // type:function size:0x60 scope:global -ClampSecondDerivative__Q23ICE7Cubic1Df = .text:0x8007935C; // type:function size:0xD4 scope:global -Update__Q23ICE7Cubic1Dfff = .text:0x80079430; // type:function size:0x144 scope:global -SetVal__Q23ICE7Cubic3DPCQ23ICE7Vector3 = .text:0x80079574; // type:function size:0x58 scope:global -SetdVal__Q23ICE7Cubic3DPCQ23ICE7Vector3 = .text:0x800795CC; // type:function size:0x58 scope:global -SetValDesired__Q23ICE7Cubic3DPCQ23ICE7Vector3 = .text:0x80079624; // type:function size:0x58 scope:global -SetdValDesired__Q23ICE7Cubic3DPCQ23ICE7Vector3 = .text:0x8007967C; // type:function size:0x1C scope:global -GetVal__CQ23ICE7Cubic3DPQ23ICE7Vector3 = .text:0x80079698; // type:function size:0x1C scope:global -GetdVal__CQ23ICE7Cubic3DPQ23ICE7Vector3 = .text:0x800796B4; // type:function size:0x1C scope:global -GetVal__CQ23ICE7Cubic3DPQ23ICE7Vector3f = .text:0x800796D0; // type:function size:0x60 scope:global -GetValDesired__CQ23ICE7Cubic3DPQ23ICE7Vector3 = .text:0x80079730; // type:function size:0x1C scope:global -Update__Q23ICE7Cubic3Dfff = .text:0x8007974C; // type:function size:0x78 scope:global -PlatEndianSwap__7ICEData = .text:0x800797C4; // type:function size:0xDC scope:global -GetEye__7ICEDataiPQ23ICE7Vector3 = .text:0x800798A0; // type:function size:0x78 scope:global -GetLook__7ICEDataiPQ23ICE7Vector3 = .text:0x80079918; // type:function size:0x78 scope:global -KeysShared__3ICEP7ICEDataiT1i = .text:0x80079990; // type:function size:0xA4 scope:global -KeysSharedSpace__3ICEP7ICEDataiT1i = .text:0x80079A34; // type:function size:0xAC scope:global -FlushAllocatedTracks__8ICEGroup = .text:0x80079AE0; // type:function size:0x84 scope:global -GetTrack__8ICEGroupi = .text:0x80079B64; // type:function size:0x3C scope:global -GetTrack__8ICEGroupPc = .text:0x80079BA0; // type:function size:0x60 scope:global -PlatEndianSwap__8ICETrack = .text:0x80079C00; // type:function size:0x68 scope:global -GetContext__8ICETrack = .text:0x80079C68; // type:function size:0x18 scope:global -GetKeyNumber__8ICETrackf = .text:0x80079C80; // type:function size:0x44 scope:global -GetParameter__8ICETrack = .text:0x80079CC4; // type:function size:0x154 scope:global -GetCameraData__8ICETrackPfN21 = .text:0x80079E18; // type:function size:0x150 scope:global -PlatEndianSwap__12ICEShakeData = .text:0x80079F68; // type:function size:0x54 scope:global -FlushAllocatedTracks__13ICEShakeGroup = .text:0x80079FBC; // type:function size:0x84 scope:global -GetTrack__13ICEShakeGroupi = .text:0x8007A040; // type:function size:0x3C scope:global -PlatEndianSwap__13ICEShakeTrack = .text:0x8007A07C; // type:function size:0x58 scope:global -Update__9ICEAnchorfRCQ23ICE7Matrix4RCQ23ICE7Vector3T3 = .text:0x8007A0D4; // type:function size:0x178 scope:global -__9ICEAnchor = .text:0x8007A24C; // type:function size:0xDC scope:global -ConvertLensLengthToFovAngle__Ff = .text:0x8007A328; // type:function size:0x2C scope:global -ConvertFovAngleToLensLength__FUs = .text:0x8007A354; // type:function size:0x6C scope:global -ConvertLensDeltaToFovDelta__Fff = .text:0x8007A3C0; // type:function size:0xC8 scope:global -ConvertApertureNumberToFStop__Ff = .text:0x8007A488; // type:function size:0xAC scope:global -CreateLookAtMatrix__FPQ23ICE7Matrix4RQ23ICE7Vector3T1Us = .text:0x8007A534; // type:function size:0x1EC scope:local -__8ICEMoveriP9ICEAnchor = .text:0x8007A720; // type:function size:0x564 scope:global -_._8ICEMover = .text:0x8007AC84; // type:function size:0x10C scope:global -EyeCubicInit__8ICEMoverPQ23ICE7Cubic3DPQ23ICE7Matrix4PQ23ICE7Vector3 = .text:0x8007AD90; // type:function size:0x13C scope:global -LookCubicInit__8ICEMoverPQ23ICE7Cubic3DPQ23ICE7Matrix4PQ23ICE7Vector3 = .text:0x8007AECC; // type:function size:0x13C scope:global -DutchCubicInit__8ICEMoverPQ23ICE7Cubic1D = .text:0x8007B008; // type:function size:0x3C scope:global -FovCubicInit__8ICEMoverPQ23ICE7Cubic1D = .text:0x8007B044; // type:function size:0xB8 scope:global -SetDesired__8ICEMoverbT1 = .text:0x8007B0FC; // type:function size:0xFC0 scope:global -GetEye__8ICEMoverPQ23ICE7Vector3f = .text:0x8007C0BC; // type:function size:0xE8 scope:global -GetLook__8ICEMoverPQ23ICE7Vector3f = .text:0x8007C1A4; // type:function size:0xE8 scope:global -GetDutch__8ICEMoverf = .text:0x8007C28C; // type:function size:0x78 scope:global -GetFOV__8ICEMoverf = .text:0x8007C304; // type:function size:0x8C scope:global -Update__8ICEMoverf = .text:0x8007C390; // type:function size:0xF1C scope:global -WasRecentlyUsed__9ICEReplayP8ICETrack = .text:0x8007D2AC; // type:function size:0x38 scope:global -ClearRecentlyUsed__9ICEReplayv = .text:0x8007D2E4; // type:function size:0x34 scope:global -GetICEAnchor__Fv = .text:0x8007D318; // type:function size:0x54 scope:local -GetGroundElevation__FPCQ23ICE7Vector3 = .text:0x8007D36C; // type:function size:0xC4 scope:global -GetAnimElevationFixup__10ICEManagerPQ23ICE7Vector3 = .text:0x8007D430; // type:function size:0x50 scope:global -FixAnimElevation__10ICEManagerPQ23ICE7Vector3 = .text:0x8007D480; // type:function size:0xF4 scope:global -__10ICEManager = .text:0x8007D574; // type:function size:0xC4 scope:global -GetTimerSeconds__10ICEManager = .text:0x8007D638; // type:function size:0x5C scope:global -RefreshCameraSplines__10ICEManager = .text:0x8007D694; // type:function size:0x8 scope:global -ICEGetPlayerCarTransform__FPQ23ICE7Matrix4 = .text:0x8007D69C; // type:function size:0xD0 scope:local -ChooseGoodSceneCameraTrackIndex__10ICEManagerUiPCQ23ICE7Matrix4 = .text:0x8007D76C; // type:function size:0x320 scope:global -SetGenericCameraToPlay__10ICEManagerPCcT1 = .text:0x8007DA8C; // type:function size:0x50 scope:global -GetNisCameraGroup__10ICEManagerUi = .text:0x8007DADC; // type:function size:0x40 scope:global -GetFmvCameraGroup__10ICEManagerUi = .text:0x8007DB1C; // type:function size:0x40 scope:global -GetReplayCameraGroup__10ICEManagerUi = .text:0x8007DB5C; // type:function size:0x40 scope:global -GetGenericCameraGroup__10ICEManagerUi = .text:0x8007DB9C; // type:function size:0x40 scope:global -GetShakeTrack__10ICEManagerUi = .text:0x8007DBDC; // type:function size:0x88 scope:global -Init__10ICEManager = .text:0x8007DC64; // type:function size:0x194 scope:global -Resolve__10ICEManager = .text:0x8007DDF8; // type:function size:0x28C scope:global -GetCameraIndex__10ICEManagerfP8ICETrack = .text:0x8007E084; // type:function size:0x30 scope:global -GetParameter__10ICEManager = .text:0x8007E0B4; // type:function size:0x80 scope:global -GetParameter__10ICEManageriP8ICETrack = .text:0x8007E134; // type:function size:0x44 scope:global -GetIntervalSize__10ICEManagerP7ICEDataP8ICETrack = .text:0x8007E178; // type:function size:0x7C scope:global -ChooseGenericCamera__10ICEManager = .text:0x8007E1F4; // type:function size:0x5C scope:global -ChooseReplayCamera__10ICEManager = .text:0x8007E250; // type:function size:0x8C scope:global -ChooseCameraPlaybackTrack__10ICEManager = .text:0x8007E2DC; // type:function size:0x12C scope:global -GetCameraData__10ICEManagerUii = .text:0x8007E408; // type:function size:0x80 scope:global -GetCameraData__10ICEManagerPP8ICETrackPfT2 = .text:0x8007E488; // type:function size:0x50 scope:global -GetNeighbour__10ICEManagerP7ICEDataiP8ICETrack = .text:0x8007E4D8; // type:function size:0x78 scope:global -GetSlope__10ICEManagerPQ23ICE7Vector3T1PfT3P7ICEDataiP8ICETrack = .text:0x8007E550; // type:function size:0x578 scope:global -Update__10ICEManager = .text:0x8007EAC8; // type:function size:0x4 scope:global -GetNumSceneCameraTrack__10ICEManagerUi = .text:0x8007EACC; // type:function size:0x3C scope:global -AddCameraGroup__10ICEManager10ICEContextUi = .text:0x8007EB08; // type:function size:0xF0 scope:global -GetCameraGroup__10ICEManager10ICEContextUi = .text:0x8007EBF8; // type:function size:0x94 scope:global -LoadCameraSet__10ICEManagerP6bChunk = .text:0x8007EC8C; // type:function size:0x158 scope:global -UnloadCameraSet__10ICEManagerP6bChunk = .text:0x8007EDE4; // type:function size:0x1C8 scope:global -LoadCameraShakes__10ICEManagerP6bChunk = .text:0x8007EFAC; // type:function size:0xA8 scope:global -UnloadCameraShakes__10ICEManagerP6bChunk = .text:0x8007F054; // type:function size:0x84 scope:global -LoaderICECameras__FP6bChunk = .text:0x8007F0D8; // type:function size:0x88 scope:global -UnloaderICECameras__FP6bChunk = .text:0x8007F160; // type:function size:0x88 scope:global -ICECompleteEventTags__Fv = .text:0x8007F1E8; // type:function size:0x94 scope:global -GetSceneCount__3ICEv = .text:0x8007F27C; // type:function size:0x1C scope:global -GetSceneHash__3ICEUi = .text:0x8007F298; // type:function size:0x6C scope:global -GetNameOfSceneHash__3ICEUiPc = .text:0x8007F304; // type:function size:0x10C scope:global -FireEventTag__3ICEi = .text:0x8007F410; // type:function size:0x68 scope:global -FindAnimScene__3ICEv = .text:0x8007F478; // type:function size:0x4C scope:global -GetOverlayIndex__FUc = .text:0x8007F4C4; // type:function size:0x44 scope:local -GetOverlayName__3ICEUc = .text:0x8007F508; // type:function size:0x34 scope:global -ShowOverlay__3ICEUc = .text:0x8007F53C; // type:function size:0x74 scope:global -HideOverlay__3ICEv = .text:0x8007F5B0; // type:function size:0x84 scope:global -GetCurrentCamera__Fv = .text:0x8007F634; // type:function size:0x30 scope:local -PredictAverageAir__FfPfT1b = .text:0x8007F664; // type:function size:0xC scope:local -GetRecentCurvature__Fv = .text:0x8007F670; // type:function size:0xC scope:local -ReplayNosScore__FP9ICEAnchor = .text:0x8007F67C; // type:function size:0x30 scope:local -ReplayNosMirror__FP9ICEAnchor = .text:0x8007F6AC; // type:function size:0x8 scope:local -ReplayJumpScore__FP9ICEAnchor = .text:0x8007F6B4; // type:function size:0xBC scope:local -ReplayJumpMirror__FP9ICEAnchor = .text:0x8007F770; // type:function size:0x8 scope:local -ReplaySpeedScore__FP9ICEAnchor = .text:0x8007F778; // type:function size:0x54 scope:local -ReplaySpeedMirror__FP9ICEAnchor = .text:0x8007F7CC; // type:function size:0x8 scope:local -ReplayCornerScore__FP9ICEAnchor = .text:0x8007F7D4; // type:function size:0x70 scope:local -ReplayCornerMirror__FP9ICEAnchor = .text:0x8007F844; // type:function size:0x34 scope:local -ReplayBurnoutScore__FP9ICEAnchor = .text:0x8007F878; // type:function size:0xA0 scope:local -ReplayBurnoutMirror__FP9ICEAnchor = .text:0x8007F918; // type:function size:0x8 scope:local -ReplayPowerSlideScore__FP9ICEAnchor = .text:0x8007F920; // type:function size:0x78 scope:local -ReplayPowerSlideMirror__FP9ICEAnchor = .text:0x8007F998; // type:function size:0x1C scope:local -GetReplayCategoryNumElements__3ICEv = .text:0x8007F9B4; // type:function size:0x8 scope:global -GetReplayCategoryHash__3ICEi = .text:0x8007F9BC; // type:function size:0x18 scope:global -GetReplayCategory__3ICEUi = .text:0x8007F9D4; // type:function size:0x40 scope:global -CameraCutIsGood__9ICEReplayP7ICEDatafP9ICEAnchor = .text:0x8007FA14; // type:function size:0x56C scope:global -ChooseGoodCamera__9ICEReplayP9ICEAnchorP8ICEGroupi = .text:0x8007FF80; // type:function size:0x3BC scope:global -find__H2ZPPQ28CameraAI8DirectorZPQ28CameraAI8Director_4_STLX01X01RCX11_X01 = .text:0x8008033C; // type:function size:0xB0 scope:global -CreateInstance__Q33UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32G6UCrc32PQ28CameraAI8Director = .text:0x800803EC; // type:function size:0x60 scope:global -Count__Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi311ePlayerList = .text:0x8008044C; // type:function size:0x18 scope:global -clear__Q24_STLt10_List_base2ZP5IBodyZQ33UTL3Stdt9Allocator2ZP5IBodyZ24_type_CameraAIAvoidables = .text:0x80080464; // type:function size:0x78 scope:global -find__H2ZQ24_STLt14_List_iterator2ZP5IBodyZQ24_STLt16_Nonconst_traits1ZP5IBodyZP5IBody_4_STLX01X01RCX11_X01 = .text:0x800804DC; // type:function size:0x60 scope:global -Copy4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRX11RCX01_v = .text:0x8008053C; // type:function size:0x24 scope:global -Scale3__H1ZQ25UMath7Vector4__14ConversionUtilRX01f_v = .text:0x80080560; // type:function size:0x28 scope:global -Make4__H1ZQ25UMath7Vector4__14ConversionUtilffff_X01 = .text:0x80080588; // type:function size:0x44 scope:global -RightToLeftVector4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRCX01RX11_v = .text:0x800805CC; // type:function size:0x6C scope:global -RightToLeftMatrix4__H2ZQ25UMath7Matrix4ZQ25UMath7Matrix4__14ConversionUtilRCX01RX11_v = .text:0x80080638; // type:function size:0xAC scope:global -Make3__H1ZQ25UMath7Vector3__14ConversionUtilfff_X01 = .text:0x800806E4; // type:function size:0x38 scope:global -RightToLeftVector3__H2ZQ25UMath7Vector3ZQ25UMath7Vector3__14ConversionUtilRCX01RX11_v = .text:0x8008071C; // type:function size:0x60 scope:global -Copy4__H2Z8bVector4ZQ25UMath7Vector4__14ConversionUtilRX11RCX01_v = .text:0x8008077C; // type:function size:0x24 scope:global -RightToLeftMatrix4__H2Z8bMatrix4ZQ25UMath7Matrix4__14ConversionUtilRCX01RX11_v = .text:0x800807A0; // type:function size:0xAC scope:global -RightToLeftVector3__H2Z8bVector3ZQ25UMath7Vector3__14ConversionUtilRCX01RX11_v = .text:0x8008084C; // type:function size:0x60 scope:global -find__H2ZPCP8IVehicleZPC8IVehicle_4_STLX01X01RCX11_X01 = .text:0x800808AC; // type:function size:0xB0 scope:global -__static_initialization_and_destruction_0 = .text:0x8008095C; // type:function size:0xE14 scope:local -GetMatrix__C11bQuaternionR8bMatrix4 = .text:0x80081770; // type:function size:0xC0 scope:global -__Q33UTL11Collectionst8_Storage2ZPQ28CameraAI8Directori2RCQ33UTL11Collectionst8_Storage2ZPQ28CameraAI8Directori2 = .text:0x80081830; // type:function size:0x484 scope:global -_._Q43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4List = .text:0x80081CB4; // type:function size:0xB4 scope:global -_._Q28CameraAI6Action = .text:0x80081D68; // type:function size:0x68 scope:global -_IHandle__14IDebugWatchCar = .text:0x80081DD0; // type:function size:0xC scope:global -_._14IDebugWatchCar = .text:0x80081DDC; // type:function size:0x160 scope:global -push_back__Q23UTLt6Vector2ZP14IDebugWatchCari16RCP14IDebugWatchCar = .text:0x80081F3C; // type:function size:0x154 scope:global -ClassKey__Q36Attrib3Gen4ecar = .text:0x80082090; // type:function size:0xC scope:global -ClassKey__Q36Attrib3Gen10camerainfo = .text:0x8008209C; // type:function size:0xC scope:global -GetAnchor__11CameraMover = .text:0x800820A8; // type:function size:0x8 scope:global -SetLookBack__11CameraMoverb = .text:0x800820B0; // type:function size:0x4 scope:global -SetLookbackSpeed__11CameraMoverf = .text:0x800820B4; // type:function size:0x4 scope:global -SetDisableLag__11CameraMoverb = .text:0x800820B8; // type:function size:0x4 scope:global -SetPovType__11CameraMoveri = .text:0x800820BC; // type:function size:0x4 scope:global -OutsidePOV__11CameraMover = .text:0x800820C0; // type:function size:0x8 scope:global -RenderCarPOV__11CameraMover = .text:0x800820C8; // type:function size:0x8 scope:global -GetLookbackAngle__11CameraMover = .text:0x800820D0; // type:function size:0x8 scope:global -ResetState__11CameraMover = .text:0x800820D8; // type:function size:0x4 scope:global -IsHoodCamera__11CameraMover = .text:0x800820DC; // type:function size:0x8 scope:global -GetTarget__11CameraMover = .text:0x800820E4; // type:function size:0xC scope:global -GetAnchor__25RearViewMirrorCameraMover = .text:0x800820F0; // type:function size:0x8 scope:global -GetAnchor__19TrackCarCameraMover = .text:0x800820F8; // type:function size:0x8 scope:global -GetAnchor__19TrackCopCameraMover = .text:0x80082100; // type:function size:0x8 scope:global -RenderCarPOV__19TrackCopCameraMover = .text:0x80082108; // type:function size:0x8 scope:global -_._12CameraAnchor = .text:0x80082110; // type:function size:0x60 scope:global -SetLookBack__16CubicCameraMoverb = .text:0x80082170; // type:function size:0x8 scope:global -SetDisableLag__16CubicCameraMoverb = .text:0x80082178; // type:function size:0xC scope:global -GetLookbackAngle__16CubicCameraMover = .text:0x80082184; // type:function size:0x18 scope:global -GetAnchor__16CubicCameraMover = .text:0x8008219C; // type:function size:0x8 scope:global -_._11IAttachable = .text:0x800821A4; // type:function size:0x54 scope:global -_GetKind__15MGamePlayMoment = .text:0x800821F8; // type:function size:0x64 scope:global -_GetKind__18MICECameraFinished = .text:0x8008225C; // type:function size:0x64 scope:global -_GetKind__10MMiscSound = .text:0x800822C0; // type:function size:0x64 scope:global -GetGrowSize__CQ23UTLt6Vector2ZPQ28CameraAI8Directori16Ui = .text:0x80082324; // type:function size:0x20 scope:global -OnGrowRequest__Q23UTLt6Vector2ZPQ28CameraAI8Directori16Ui = .text:0x80082344; // type:function size:0x4 scope:global -push_back__Q23UTLt6Vector2ZPQ28CameraAI8Directori16RCPQ28CameraAI8Director = .text:0x80082348; // type:function size:0x154 scope:global -_._Q23UTLt6Vector2ZPQ28CameraAI8Directori16 = .text:0x8008249C; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16 = .text:0x800824D0; // type:function size:0xB4 scope:global -_._14ITrafficCenter = .text:0x80082584; // type:function size:0x148 scope:global -push_back__Q23UTLt6Vector2ZP14ITrafficCenteri16RCP14ITrafficCenter = .text:0x800826CC; // type:function size:0x154 scope:global -_GetKind__8MJumpCut = .text:0x80082820; // type:function size:0x64 scope:global -GetName__C13CDActionDrive = .text:0x80082884; // type:function size:0x74 scope:global -GetNext__C13CDActionDrive = .text:0x800828F8; // type:function size:0x2C scope:global -GetMover__13CDActionDrive = .text:0x80082924; // type:function size:0x8 scope:global -SetSpecial__13CDActionDrivef = .text:0x8008292C; // type:function size:0x28 scope:global -Attach__13CDActionDrivePQ33UTL3COM8IUnknown = .text:0x80082954; // type:function size:0x24 scope:global -Detach__13CDActionDrivePQ33UTL3COM8IUnknown = .text:0x80082978; // type:function size:0x24 scope:global -IsAttached__C13CDActionDrivePCQ33UTL3COM8IUnknown = .text:0x8008299C; // type:function size:0x24 scope:global -OnAttached__13CDActionDriveP11IAttachable = .text:0x800829C0; // type:function size:0x4 scope:global -GetAttachments__C13CDActionDrive = .text:0x800829C4; // type:function size:0x8 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z8MJumpCutZ13CDActionDriveZ13CDActionDrivePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800829CC; // type:function size:0x88 scope:global -GetName__C16CDActionTrackCar = .text:0x80082A54; // type:function size:0x74 scope:global -GetNext__C16CDActionTrackCar = .text:0x80082AC8; // type:function size:0x2C scope:global -GetMover__16CDActionTrackCar = .text:0x80082AF4; // type:function size:0x8 scope:global -SetSpecial__16CDActionTrackCarf = .text:0x80082AFC; // type:function size:0x4 scope:global -Attach__16CDActionTrackCarPQ33UTL3COM8IUnknown = .text:0x80082B00; // type:function size:0x24 scope:global -Detach__16CDActionTrackCarPQ33UTL3COM8IUnknown = .text:0x80082B24; // type:function size:0x24 scope:global -IsAttached__C16CDActionTrackCarPCQ33UTL3COM8IUnknown = .text:0x80082B48; // type:function size:0x24 scope:global -OnAttached__16CDActionTrackCarP11IAttachable = .text:0x80082B6C; // type:function size:0x4 scope:global -GetAttachments__C16CDActionTrackCar = .text:0x80082B70; // type:function size:0x8 scope:global -GetName__C16CDActionTrackCop = .text:0x80082B78; // type:function size:0x74 scope:global -GetNext__C16CDActionTrackCop = .text:0x80082BEC; // type:function size:0x2C scope:global -GetMover__16CDActionTrackCop = .text:0x80082C18; // type:function size:0x8 scope:global -SetSpecial__16CDActionTrackCopf = .text:0x80082C20; // type:function size:0x4 scope:global -Attach__16CDActionTrackCopPQ33UTL3COM8IUnknown = .text:0x80082C24; // type:function size:0x24 scope:global -Detach__16CDActionTrackCopPQ33UTL3COM8IUnknown = .text:0x80082C48; // type:function size:0x24 scope:global -IsAttached__C16CDActionTrackCopPCQ33UTL3COM8IUnknown = .text:0x80082C6C; // type:function size:0x24 scope:global -OnAttached__16CDActionTrackCopP11IAttachable = .text:0x80082C90; // type:function size:0x4 scope:global -GetAttachments__C16CDActionTrackCop = .text:0x80082C94; // type:function size:0x8 scope:global -GetName__C16CDActionShowcase = .text:0x80082C9C; // type:function size:0x74 scope:global -GetNext__C16CDActionShowcase = .text:0x80082D10; // type:function size:0x2C scope:global -GetMover__16CDActionShowcase = .text:0x80082D3C; // type:function size:0x8 scope:global -SetSpecial__16CDActionShowcasef = .text:0x80082D44; // type:function size:0x4 scope:global -Attach__16CDActionShowcasePQ33UTL3COM8IUnknown = .text:0x80082D48; // type:function size:0x24 scope:global -Detach__16CDActionShowcasePQ33UTL3COM8IUnknown = .text:0x80082D6C; // type:function size:0x24 scope:global -IsAttached__C16CDActionShowcasePCQ33UTL3COM8IUnknown = .text:0x80082D90; // type:function size:0x24 scope:global -OnAttached__16CDActionShowcaseP11IAttachable = .text:0x80082DB4; // type:function size:0x4 scope:global -GetAttachments__C16CDActionShowcase = .text:0x80082DB8; // type:function size:0x8 scope:global -GetName__C13CDActionDebug = .text:0x80082DC0; // type:function size:0x74 scope:global -GetNext__C13CDActionDebug = .text:0x80082E34; // type:function size:0x84 scope:global -GetMover__13CDActionDebug = .text:0x80082EB8; // type:function size:0x8 scope:global -SetSpecial__13CDActionDebugf = .text:0x80082EC0; // type:function size:0x4 scope:global -GetName__C11CDActionIce = .text:0x80082EC4; // type:function size:0x74 scope:global -GetNext__C11CDActionIce = .text:0x80082F38; // type:function size:0x84 scope:global -GetMover__11CDActionIce = .text:0x80082FBC; // type:function size:0x8 scope:global -SetSpecial__11CDActionIcef = .text:0x80082FC4; // type:function size:0x4 scope:global -Attach__11CDActionIcePQ33UTL3COM8IUnknown = .text:0x80082FC8; // type:function size:0x24 scope:global -Detach__11CDActionIcePQ33UTL3COM8IUnknown = .text:0x80082FEC; // type:function size:0x24 scope:global -IsAttached__C11CDActionIcePCQ33UTL3COM8IUnknown = .text:0x80083010; // type:function size:0x24 scope:global -OnAttached__11CDActionIceP11IAttachable = .text:0x80083034; // type:function size:0x4 scope:global -GetAttachments__C11CDActionIce = .text:0x80083038; // type:function size:0x8 scope:global -GetName__C21CDActionDebugWatchCar = .text:0x80083040; // type:function size:0x74 scope:global -GetNext__C21CDActionDebugWatchCar = .text:0x800830B4; // type:function size:0x5C scope:global -GetMover__21CDActionDebugWatchCar = .text:0x80083110; // type:function size:0x8 scope:global -SetSpecial__21CDActionDebugWatchCarf = .text:0x80083118; // type:function size:0x4 scope:global -_._t8tAverage1Z8bVector3 = .text:0x8008311C; // type:function size:0x7C scope:global -Recalculate__t8tAverage1Z8bVector3 = .text:0x80083198; // type:function size:0x124 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16UiUi = .text:0x800832BC; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16PPQ28CameraAI8DirectorUi = .text:0x800832C4; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16Ui = .text:0x800832C8; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16 = .text:0x800832D0; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZPQ28CameraAI8Directori16 = .text:0x800832D8; // type:function size:0xC scope:global -_._Q33UTL11Collectionst8_Storage2ZPQ28CameraAI8Directori2 = .text:0x800832E4; // type:function size:0xB4 scope:global -_._Q43UTL11Collectionst8Listable2Z14IDebugWatchCari2_4List = .text:0x80083398; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP14IDebugWatchCari16Ui = .text:0x8008344C; // type:function size:0x4 scope:global -_._11AverageBase = .text:0x80083450; // type:function size:0x54 scope:global -Recalculate__11AverageBase = .text:0x800834A4; // type:function size:0x4 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP14IDebugWatchCari2i16UiUi = .text:0x800834A8; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP14IDebugWatchCari2i16PP14IDebugWatchCarUi = .text:0x800834B0; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP14IDebugWatchCari2i16Ui = .text:0x800834B4; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP14IDebugWatchCari2i16 = .text:0x800834BC; // type:function size:0x8 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP14IDebugWatchCari16Ui = .text:0x800834C4; // type:function size:0x20 scope:global -_._Q23UTLt6Vector2ZP14IDebugWatchCari16 = .text:0x800834E4; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP14IDebugWatchCari2i16 = .text:0x80083518; // type:function size:0xB4 scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP14IDebugWatchCari16 = .text:0x800835CC; // type:function size:0xC scope:global -_GLOBAL_.I._6Camera.StopUpdating = .text:0x800835D8; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x80083604; // type:label scope:local -__static_initialization_and_destruction_0 = .text:0x80083604; // type:function size:0x50 scope:local -_GLOBAL_.I.__10DebugGraphPcfffiffb = .text:0x80083654; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x80083680; // type:label scope:local -GetForce__CQ38Dynamics9Collision8FrictionRC8UVector3fT1R8UVector3 = .text:0x80083680; // type:function size:0x150 scope:global -__Q38Dynamics9Collision6MomentRCQ25UMath7Matrix4fRCQ25UMath7Vector3N43 = .text:0x800837D0; // type:function size:0x1B8 scope:global -__Q38Dynamics9Collision6MomentPCQ28Dynamics7IEntity = .text:0x80083988; // type:function size:0x29C scope:global -SetInertia__Q38Dynamics9Collision6MomentRCQ25UMath7Vector3 = .text:0x80083C24; // type:function size:0x1C scope:global -SetMass__Q38Dynamics9Collision6Momentf = .text:0x80083C40; // type:function size:0x18 scope:global -SetCG__Q38Dynamics9Collision6MomentRCQ25UMath7Vector3 = .text:0x80083C58; // type:function size:0x1C scope:global -React__Q38Dynamics9Collision6MomentRCQ38Dynamics9Collision5Planei = .text:0x80083C74; // type:function size:0xA1C scope:global -React__Q38Dynamics9Collision6MomentRQ38Dynamics9Collision6MomentRCQ38Dynamics9Collision5Planei = .text:0x80084690; // type:function size:0x1624 scope:global -React__Q38Dynamics9Collision6MomentRQ38Dynamics9Collision6MomentRCQ38Dynamics9Collision5Jointi = .text:0x80085CB4; // type:function size:0x1120 scope:global -React__Q38Dynamics9Collision6MomentRCQ38Dynamics9Collision5Jointi = .text:0x80086DD4; // type:function size:0x83C scope:global -Constrain__Q28Dynamics12ArticulationPQ38Dynamics12Articulation8HJOINT__PQ28Dynamics7IEntityRCQ25UMath7Matrix4ffRCQ25UMath7Vector3Q38Dynamics12Articulation11eConstraint = .text:0x80087610; // type:function size:0x58 scope:global -IsJoined__Q28Dynamics12ArticulationPCQ28Dynamics7IEntityT1 = .text:0x80087668; // type:function size:0x7C scope:global -IsJoined__Q28Dynamics12ArticulationPCQ28Dynamics7IEntity = .text:0x800876E4; // type:function size:0x64 scope:global -Resolve__Q28Dynamics12Articulationv = .text:0x80087748; // type:function size:0x48 scope:global -Create__Q28Dynamics12ArticulationPQ28Dynamics7IEntityRCQ25UMath7Vector3T1T2Q38Dynamics12Articulation11eJointFlags = .text:0x80087790; // type:function size:0x90 scope:global -Release__Q28Dynamics12ArticulationPQ28Dynamics7IEntity = .text:0x80087820; // type:function size:0x80 scope:global -__Q38Dynamics12Articulation5JointPQ28Dynamics7IEntityRCQ25UMath7Vector3T1T2Q38Dynamics12Articulation11eJointFlags = .text:0x800878A0; // type:function size:0xDC scope:global -OnDebugDraw__Q38Dynamics12Articulation5Joint = .text:0x8008797C; // type:function size:0x4 scope:global -_._Q38Dynamics12Articulation5Joint = .text:0x80087980; // type:function size:0xF8 scope:global -Owns__CQ38Dynamics12Articulation5JointPCQ28Dynamics7IEntity = .text:0x80087A78; // type:function size:0x28 scope:global -Resolve__Q38Dynamics12Articulation5Joint = .text:0x80087AA0; // type:function size:0x514 scope:global -SetFulcrum__Q38Dynamics12Articulation5LeverRC8UVector3b = .text:0x80087FB4; // type:function size:0x3C8 scope:global -OnDebugDraw__Q38Dynamics12Articulation5Lever = .text:0x8008837C; // type:function size:0x4 scope:global -AddConstraint__Q38Dynamics12Articulation5JointPQ28Dynamics7IEntityRCQ25UMath7Matrix4ffRCQ25UMath7Vector3Q38Dynamics12Articulation11eConstraint = .text:0x80088380; // type:function size:0x110 scope:global -__Q38Dynamics12Articulation10ConstraintRCQ25UMath7Matrix4ffRQ38Dynamics12Articulation5LeverT4RCQ25UMath7Vector3Q38Dynamics12Articulation11eConstraint = .text:0x80088490; // type:function size:0x1A0 scope:global -Resolve__Q38Dynamics12Articulation10ConstraintRC8UVector3 = .text:0x80088630; // type:function size:0x628 scope:global -Rotate__Q38Dynamics12Articulation10ConstraintRQ38Dynamics12Articulation5LeverRCQ38Dynamics12Articulation10QuaternionT2RC8UVector3f = .text:0x80088C58; // type:function size:0x310 scope:global -OnDebugDraw__Q38Dynamics12Articulation10Constraint = .text:0x80088F68; // type:function size:0x4 scope:global -React__Q38Dynamics12Articulation10ConstraintRC8UVector3N21fRCQ38Dynamics12Articulation10QuaternionT5 = .text:0x80088F6C; // type:function size:0x3A8 scope:global -__Q38Dynamics9Collision8Geometry = .text:0x80089314; // type:function size:0xC scope:global -__Q38Dynamics9Collision8GeometryRCQ25UMath7Matrix4RCQ25UMath7Vector3T2Q48Dynamics9Collision8Geometry5ShapeT2 = .text:0x80089320; // type:function size:0x30 scope:global -Move__Q38Dynamics9Collision8GeometryRCQ25UMath7Vector3 = .text:0x80089350; // type:function size:0x48 scope:global -Set__Q38Dynamics9Collision8GeometryRCQ25UMath7Matrix4RCQ25UMath7Vector3T2Q48Dynamics9Collision8Geometry5ShapeT2 = .text:0x80089398; // type:function size:0x2C0 scope:global -BoxVsBox__Q38Dynamics9Collision8GeometryPCQ38Dynamics9Collision8GeometryT1PQ38Dynamics9Collision8Geometry = .text:0x80089658; // type:function size:0x6F8 scope:global -SphereVsBox__Q38Dynamics9Collision8GeometryPCQ38Dynamics9Collision8GeometryT1PQ38Dynamics9Collision8Geometry = .text:0x80089D50; // type:function size:0x768 scope:global -SphereVsSphere__Q38Dynamics9Collision8GeometryPCQ38Dynamics9Collision8GeometryT1PQ38Dynamics9Collision8Geometry = .text:0x8008A4B8; // type:function size:0x14C scope:global -BoxVsSphere__Q38Dynamics9Collision8GeometryPCQ38Dynamics9Collision8GeometryT1PQ38Dynamics9Collision8Geometry = .text:0x8008A604; // type:function size:0x2C scope:global -FindIntersection__Q38Dynamics9Collision8GeometryPCQ38Dynamics9Collision8GeometryT1PQ38Dynamics9Collision8Geometry = .text:0x8008A630; // type:function size:0x7C scope:global -clear__Q24_STLt10_List_base2ZPQ38Dynamics12Articulation10ConstraintZQ33UTL3Stdt9Allocator2ZPQ38Dynamics12Articulation10ConstraintZ10_type_list = .text:0x8008A6AC; // type:function size:0x78 scope:global -__static_initialization_and_destruction_0 = .text:0x8008A724; // type:function size:0x60 scope:local -_GLOBAL_.I.GetForce__CQ38Dynamics9Collision8FrictionRC8UVector3fT1R8UVector3 = .text:0x8008A784; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x8008A7B0; // type:label scope:local -Constructor__Q29EAGL4Anim8AnimBankPvPQ25EAGL413DynamicLoaderPCc = .text:0x8008A7B0; // type:function size:0x68 scope:global -Destructor__Q29EAGL4Anim8AnimBankPv = .text:0x8008A818; // type:function size:0x4 scope:global -GetAnimIndex__Q29EAGL4Anim8AnimBankPCc = .text:0x8008A81C; // type:function size:0x84 scope:global -NewFnAnim__CQ29EAGL4Anim8AnimBanki = .text:0x8008A8A0; // type:function size:0x2C scope:global -NewFnAnim__Q29EAGL4Anim8AnimBankPQ29EAGL4Anim13AnimMemoryMap = .text:0x8008A8CC; // type:function size:0x100 scope:global -FindAttribute__CQ29EAGL4Anim14AttributeBlockGQ29EAGL4Anim11AttributeId = .text:0x8008A9CC; // type:function size:0x5C scope:global -GetAttribute__CQ29EAGL4Anim14AttributeBlockGQ29EAGL4Anim11AttributeIdRPv = .text:0x8008AA28; // type:function size:0x54 scope:global -_._Q29EAGL4Anim17FnCompoundChannel = .text:0x8008AA7C; // type:function size:0xD8 scope:global -SetAnimMemoryMap__Q29EAGL4Anim17FnCompoundChannelPQ29EAGL4Anim13AnimMemoryMap = .text:0x8008AB54; // type:function size:0xA4 scope:global -EvalEvent__Q29EAGL4Anim17FnCompoundChannelffPPQ29EAGL4Anim12EventHandlerPv = .text:0x8008ABF8; // type:function size:0x17C scope:global -EvalSQT__Q29EAGL4Anim17FnCompoundChannelfPfPCQ29EAGL4Anim8BoneMask = .text:0x8008AD74; // type:function size:0x168 scope:global -EvalPose__Q29EAGL4Anim17FnCompoundChannelfPCQ29EAGL4Anim15PosePaletteBankPf = .text:0x8008AEDC; // type:function size:0x168 scope:global -EvalWeights__Q29EAGL4Anim17FnCompoundChannelfPf = .text:0x8008B044; // type:function size:0x160 scope:global -EvalVel2D__Q29EAGL4Anim17FnCompoundChannelfPf = .text:0x8008B1A4; // type:function size:0x160 scope:global -EvalState__Q29EAGL4Anim17FnCompoundChannelfPQ29EAGL4Anim5State = .text:0x8008B304; // type:function size:0x160 scope:global -FindTime__Q29EAGL4Anim17FnCompoundChannelRCQ29EAGL4Anim9StateTestfRf = .text:0x8008B464; // type:function size:0x118 scope:global -EvalPhase__Q29EAGL4Anim17FnCompoundChannelfRQ29EAGL4Anim10PhaseValue = .text:0x8008B57C; // type:function size:0xE0 scope:global -InitAnimMemoryMap__Q29EAGL4Anim15CompoundChannelPQ29EAGL4Anim13AnimMemoryMap = .text:0x8008B65C; // type:function size:0x64 scope:global -GetPhaseChan__Q29EAGL4Anim17FnCompoundChannel = .text:0x8008B6C0; // type:function size:0xF0 scope:global -UseFPS__Q29EAGL4Anim17FnCompoundChannelb = .text:0x8008B7B0; // type:function size:0x90 scope:global -HandleEvents__Q29EAGL4Anim16CsisEventChannelfPPQ29EAGL4Anim12EventHandlerPvRQ29EAGL4Anim9CsisEvent = .text:0x8008B840; // type:function size:0x188 scope:global -Eval__Q29EAGL4Anim16CsisEventChannelffRiRfPPQ29EAGL4Anim12EventHandlerPv = .text:0x8008B9C8; // type:function size:0x1A0 scope:global -_._Q29EAGL4Anim11FnDeltaChan = .text:0x8008BB68; // type:function size:0xC0 scope:global -SetAnimMemoryMap__Q29EAGL4Anim11FnDeltaChanPQ29EAGL4Anim13AnimMemoryMap = .text:0x8008BC28; // type:function size:0xD0 scope:global -EvalToPrevValues__Q29EAGL4Anim11FnDeltaChani = .text:0x8008BCF8; // type:function size:0x74 scope:global -EvalToPrevValues__Q29EAGL4Anim11FnDeltaChaniiiPCUs = .text:0x8008BD6C; // type:function size:0x78 scope:global -Eval__Q29EAGL4Anim15FnDeltaLerpChanffPf = .text:0x8008BDE4; // type:function size:0xF8 scope:global -EvalSQT__Q29EAGL4Anim15FnDeltaLerpChanfPfPCQ29EAGL4Anim8BoneMask = .text:0x8008BEDC; // type:function size:0x13C scope:global -EvalSQTMask__Q29EAGL4Anim15FnDeltaLerpChanfPfPCQ29EAGL4Anim8BoneMask = .text:0x8008C018; // type:function size:0x200 scope:global -EvalWeights__Q29EAGL4Anim15FnDeltaLerpChanfPf = .text:0x8008C218; // type:function size:0x3C scope:global -EvalVel2D__Q29EAGL4Anim15FnDeltaLerpChanfPf = .text:0x8008C254; // type:function size:0x3C scope:global -Eval__Q29EAGL4Anim15FnDeltaQuatChanffPf = .text:0x8008C290; // type:function size:0x120 scope:global -EvalSQT__Q29EAGL4Anim15FnDeltaQuatChanfPfPCQ29EAGL4Anim8BoneMask = .text:0x8008C3B0; // type:function size:0x16C scope:global -EvalSQTMask__Q29EAGL4Anim15FnDeltaQuatChanfPfPCQ29EAGL4Anim8BoneMask = .text:0x8008C51C; // type:function size:0x228 scope:global -_._Q29EAGL4Anim14FnKeyDeltaChan = .text:0x8008C744; // type:function size:0xC0 scope:global -SetAnimMemoryMap__Q29EAGL4Anim14FnKeyDeltaChanPQ29EAGL4Anim13AnimMemoryMap = .text:0x8008C804; // type:function size:0xD0 scope:global -EvalToPrevValues__Q29EAGL4Anim14FnKeyDeltaChani = .text:0x8008C8D4; // type:function size:0x54 scope:global -EvalToPrevValues__Q29EAGL4Anim14FnKeyDeltaChaniiiPCUs = .text:0x8008C928; // type:function size:0x58 scope:global -FindLowerKey__Q29EAGL4Anim14FnKeyDeltaChanf = .text:0x8008C980; // type:function size:0xF0 scope:global -Eval__Q29EAGL4Anim13FnKeyLerpChanffPf = .text:0x8008CA70; // type:function size:0x3C scope:global -EvalSQT__Q29EAGL4Anim13FnKeyLerpChanfPfPCQ29EAGL4Anim8BoneMask = .text:0x8008CAAC; // type:function size:0x1F0 scope:global -EvalSQTMask__Q29EAGL4Anim13FnKeyLerpChanfPfPCQ29EAGL4Anim8BoneMask = .text:0x8008CC9C; // type:function size:0x2B0 scope:global -Eval__Q29EAGL4Anim13FnKeyQuatChanffPf = .text:0x8008CF4C; // type:function size:0x3C scope:global -EvalSQT__Q29EAGL4Anim13FnKeyQuatChanfPfPCQ29EAGL4Anim8BoneMask = .text:0x8008CF88; // type:function size:0x39C scope:global -EvalSQTMask__Q29EAGL4Anim13FnKeyQuatChanfPfPCQ29EAGL4Anim8BoneMask = .text:0x8008D324; // type:function size:0x468 scope:global -DecompressValues__CQ29EAGL4Anim19DeltaCompressedDataiiiiPCfPf = .text:0x8008D78C; // type:function size:0x4DC scope:global -DecompressValuesIndexed__CQ29EAGL4Anim19DeltaCompressedDataiiiiPCfPfiPUsf = .text:0x8008DC68; // type:function size:0x3B4 scope:global -DecompressValues__CQ29EAGL4Anim19DeltaCompressedDataiiiPCfPfiPCUs = .text:0x8008E01C; // type:function size:0x2B4 scope:global -DecompressValuesIndexed__CQ29EAGL4Anim19DeltaCompressedDataiiPCfPfiPUsfiPCUs = .text:0x8008E2D0; // type:function size:0x2E4 scope:global -SetMallocOverride__13EAGL4InternalPFUiPCc_Pv = .text:0x8008E5B4; // type:function size:0xC scope:global -SetFreeOverride__13EAGL4InternalPFPvUi_v = .text:0x8008E5C0; // type:function size:0xC scope:global -DefaultMalloc__13EAGL4InternalUiPCc = .text:0x8008E5CC; // type:function size:0x2C scope:local -DefaultFree__13EAGL4InternalPvUi = .text:0x8008E5F8; // type:function size:0x2C scope:local -AddType__Q25EAGL415ConstructorPoolPCcPFPvPQ25EAGL413DynamicLoaderPCc_vPFPv_v = .text:0x8008E624; // type:function size:0x44 scope:global -FindConstructor__Q25EAGL415ConstructorPoolPCc = .text:0x8008E668; // type:function size:0x34 scope:global -FindDestructor__Q25EAGL415ConstructorPoolPCc = .text:0x8008E69C; // type:function size:0x38 scope:global -FindConstructor__Q25EAGL427RuntimeAllocConstructorPoolPCc = .text:0x8008E6D4; // type:function size:0x34 scope:global -FindDestructor__Q25EAGL427RuntimeAllocConstructorPoolPCc = .text:0x8008E708; // type:function size:0x38 scope:global -elfhash__5EAGL4PCc = .text:0x8008E740; // type:function size:0x4C scope:local -__Q25EAGL413DynamicLoaderPvUiPFPCcRb_Pv = .text:0x8008E78C; // type:function size:0x78 scope:global -DoVersionCheck__Q25EAGL413DynamicLoader = .text:0x8008E804; // type:function size:0x8 scope:global -_._Q25EAGL413DynamicLoader = .text:0x8008E80C; // type:function size:0x80 scope:global -Release__Q25EAGL413DynamicLoader = .text:0x8008E88C; // type:function size:0xDC scope:global -RunConstructors__Q25EAGL413DynamicLoader = .text:0x8008E968; // type:function size:0x148 scope:global -RunDestructors__Q25EAGL413DynamicLoader = .text:0x8008EAB0; // type:function size:0xD4 scope:global -Resolve__Q25EAGL413DynamicLoader = .text:0x8008EB84; // type:function size:0x514 scope:global -Initialize__Q25EAGL413DynamicLoaderPFPCcRb_Pv = .text:0x8008F098; // type:function size:0x930 scope:global -GetCount__CQ25EAGL413DynamicLoader = .text:0x8008F9C8; // type:function size:0x1C scope:global -GetSymbol__CQ25EAGL413DynamicLoaderi = .text:0x8008F9E4; // type:function size:0x174 scope:global -dlsym__FPvPCc = .text:0x8008FB58; // type:function size:0xD4 scope:local -GetNextSymbol__CQ25EAGL413DynamicLoaderPCcRiRQ35EAGL413DynamicLoader6Symbol = .text:0x8008FC2C; // type:function size:0xB4 scope:global -GetNextAddr__CQ25EAGL413DynamicLoaderPCcRiRPv = .text:0x8008FCE0; // type:function size:0x58 scope:global -__Q25EAGL410SymbolPool = .text:0x8008FD38; // type:function size:0x24 scope:global -HashFunction__Q25EAGL410SymbolPoolPCc = .text:0x8008FD5C; // type:function size:0x4C scope:global -Insert__Q25EAGL410SymbolPoolPCcPv = .text:0x8008FDA8; // type:function size:0x1C4 scope:global -AddSymbol__Q25EAGL410SymbolPoolPCcPv = .text:0x8008FF6C; // type:function size:0x80 scope:global -Search__Q25EAGL410SymbolPoolPCcRb = .text:0x8008FFEC; // type:function size:0xD4 scope:global -PostMult__Q25EAGL49TransformRCQ25EAGL49Transform = .text:0x800900C0; // type:function size:0x98 scope:global -ExtractQuatTrans__CQ25EAGL49TransformPQ25UMath7Vector4T1 = .text:0x80090158; // type:function size:0x2F0 scope:global -BuildSQT__Q25EAGL49Transformffffffffff = .text:0x80090448; // type:function size:0x108 scope:global -MultMatrix__5EAGL4PCQ25UMath7Matrix4T1PQ25UMath7Matrix4 = .text:0x80090550; // type:function size:0x344 scope:global -GetAttributes__CQ29EAGL4Anim6FnAnim = .text:0x80090894; // type:function size:0x8 scope:global -__Q29EAGL4Anim15FnAnimMemoryMap = .text:0x8009089C; // type:function size:0x20 scope:global -_._Q29EAGL4Anim15FnAnimMemoryMap = .text:0x800908BC; // type:function size:0x34 scope:global -SetAnimMemoryMap__Q29EAGL4Anim15FnAnimMemoryMapPQ29EAGL4Anim13AnimMemoryMap = .text:0x800908F0; // type:function size:0x8 scope:global -GetAnimMemoryMap__Q29EAGL4Anim15FnAnimMemoryMap = .text:0x800908F8; // type:function size:0x8 scope:global -GetAnimMemoryMap__CQ29EAGL4Anim15FnAnimMemoryMap = .text:0x80090900; // type:function size:0x8 scope:global -GetTargetCheckSum__CQ29EAGL4Anim15FnAnimMemoryMap = .text:0x80090908; // type:function size:0xC scope:global -__Q29EAGL4Anim9FnDeltaF1 = .text:0x80090914; // type:function size:0x64 scope:global -Eval__Q29EAGL4Anim9FnDeltaF1ffPf = .text:0x80090978; // type:function size:0x3C scope:global -EvalSQT__Q29EAGL4Anim9FnDeltaF1fPfPCQ29EAGL4Anim8BoneMask = .text:0x800909B4; // type:function size:0x8A8 scope:global -EvalSQTMask__Q29EAGL4Anim9FnDeltaF1fPfPCQ29EAGL4Anim8BoneMask = .text:0x8009125C; // type:function size:0xA48 scope:global -EvalWeights__Q29EAGL4Anim9FnDeltaF1fPf = .text:0x80091CA4; // type:function size:0x3C scope:global -EvalVel2D__Q29EAGL4Anim9FnDeltaF1fPf = .text:0x80091CE0; // type:function size:0x3C scope:global -InitBuffersAsRequired__Q29EAGL4Anim9FnDeltaF1 = .text:0x80091D1C; // type:function size:0x1B0 scope:global -__Q29EAGL4Anim9FnDeltaF3 = .text:0x80091ECC; // type:function size:0x64 scope:global -Eval__Q29EAGL4Anim9FnDeltaF3ffPf = .text:0x80091F30; // type:function size:0x3C scope:global -EvalSQT__Q29EAGL4Anim9FnDeltaF3fPfPCQ29EAGL4Anim8BoneMask = .text:0x80091F6C; // type:function size:0xCFC scope:global -EvalSQTMask__Q29EAGL4Anim9FnDeltaF3fPfPCQ29EAGL4Anim8BoneMask = .text:0x80092C68; // type:function size:0xE90 scope:global -EvalWeights__Q29EAGL4Anim9FnDeltaF3fPf = .text:0x80093AF8; // type:function size:0x3C scope:global -EvalVel2D__Q29EAGL4Anim9FnDeltaF3fPf = .text:0x80093B34; // type:function size:0x3C scope:global -InitBuffersAsRequired__Q29EAGL4Anim9FnDeltaF3 = .text:0x80093B70; // type:function size:0x200 scope:global -__Q29EAGL4Anim8FnDeltaQ = .text:0x80093D70; // type:function size:0x6C scope:global -_._Q29EAGL4Anim8FnDeltaQ = .text:0x80093DDC; // type:function size:0x94 scope:global -SetAnimMemoryMap__Q29EAGL4Anim8FnDeltaQPQ29EAGL4Anim13AnimMemoryMap = .text:0x80093E70; // type:function size:0x8 scope:global -GetLength__CQ29EAGL4Anim8FnDeltaQRf = .text:0x80093E78; // type:function size:0x64 scope:global -Eval__Q29EAGL4Anim8FnDeltaQffPf = .text:0x80093EDC; // type:function size:0x40 scope:global -EvalSQT__Q29EAGL4Anim8FnDeltaQfPfPCQ29EAGL4Anim8BoneMask = .text:0x80093F1C; // type:function size:0x1374 scope:global -EvalSQTMasked__Q29EAGL4Anim8FnDeltaQfPCQ29EAGL4Anim8BoneMaskPf = .text:0x80095290; // type:function size:0x1524 scope:global -__Q29EAGL4Anim12FnDeltaQFast = .text:0x800967B4; // type:function size:0x7C scope:global -_._Q29EAGL4Anim12FnDeltaQFast = .text:0x80096830; // type:function size:0x94 scope:global -SetAnimMemoryMap__Q29EAGL4Anim12FnDeltaQFastPQ29EAGL4Anim13AnimMemoryMap = .text:0x800968C4; // type:function size:0x274 scope:global -GetLength__CQ29EAGL4Anim12FnDeltaQFastRf = .text:0x80096B38; // type:function size:0x64 scope:global -Eval__Q29EAGL4Anim12FnDeltaQFastffPf = .text:0x80096B9C; // type:function size:0x3C scope:global -EvalSQT__Q29EAGL4Anim12FnDeltaQFastfPfPCQ29EAGL4Anim8BoneMask = .text:0x80096BD8; // type:function size:0xAE0 scope:global -UpdateNextQs__Q29EAGL4Anim12FnDeltaQFastPQ29EAGL4Anim10DeltaQFastiii = .text:0x800976B8; // type:function size:0x334 scope:global -EvalSQTMask__Q29EAGL4Anim12FnDeltaQFastfPfPCQ29EAGL4Anim8BoneMask = .text:0x800979EC; // type:function size:0x84C scope:global -AddDeltaMask__Q29EAGL4Anim12FnDeltaQFastPQ29EAGL4Anim18DeltaQFastPhysicalPQ29EAGL4Anim10DeltaQFastiiPQ25UMath7Vector4PCQ29EAGL4Anim8BoneMask = .text:0x80098238; // type:function size:0x210 scope:global -SubDeltaMask__Q29EAGL4Anim12FnDeltaQFastPQ29EAGL4Anim18DeltaQFastPhysicalPQ29EAGL4Anim10DeltaQFastiiPQ25UMath7Vector4PCQ29EAGL4Anim8BoneMask = .text:0x80098448; // type:function size:0x208 scope:global -UpdateNextQsMask__Q29EAGL4Anim12FnDeltaQFastPQ29EAGL4Anim10DeltaQFastiiiPCQ29EAGL4Anim8BoneMask = .text:0x80098650; // type:function size:0x39C scope:global -__Q29EAGL4Anim14FnDeltaSingleQ = .text:0x800989EC; // type:function size:0x6C scope:global -_._Q29EAGL4Anim14FnDeltaSingleQ = .text:0x80098A58; // type:function size:0xD4 scope:global -SetAnimMemoryMap__Q29EAGL4Anim14FnDeltaSingleQPQ29EAGL4Anim13AnimMemoryMap = .text:0x80098B2C; // type:function size:0x8 scope:global -GetLength__CQ29EAGL4Anim14FnDeltaSingleQRf = .text:0x80098B34; // type:function size:0x64 scope:global -Eval__Q29EAGL4Anim14FnDeltaSingleQffPf = .text:0x80098B98; // type:function size:0x40 scope:global -QuatMultXxYxZ__FRCQ25UMath7Vector4N20RQ25UMath7Vector4 = .text:0x80098BD8; // type:function size:0x94 scope:local -QuatMultXxQ__FRCQ25UMath7Vector4T0RQ25UMath7Vector4 = .text:0x80098C6C; // type:function size:0x7C scope:local -QuatMultQxZ__FRCQ25UMath7Vector4T0RQ25UMath7Vector4 = .text:0x80098CE8; // type:function size:0x78 scope:local -EvalSQT__Q29EAGL4Anim14FnDeltaSingleQfPfPCQ29EAGL4Anim8BoneMask = .text:0x80098D60; // type:function size:0x1444 scope:global -EvalSQTMasked__Q29EAGL4Anim14FnDeltaSingleQfPCQ29EAGL4Anim8BoneMaskPf = .text:0x8009A1A4; // type:function size:0x151C scope:global -Eval__Q29EAGL4Anim14FnEventBlenderffPf = .text:0x8009B6C0; // type:function size:0x11C scope:global -__Q29EAGL4Anim10FnPoseAnim = .text:0x8009B7DC; // type:function size:0x4C scope:global -SetAnimMemoryMap__Q29EAGL4Anim10FnPoseAnimPQ29EAGL4Anim13AnimMemoryMap = .text:0x8009B828; // type:function size:0x8 scope:global -GetLength__CQ29EAGL4Anim10FnPoseAnimRf = .text:0x8009B830; // type:function size:0x3C scope:global -EvalPose__Q29EAGL4Anim10FnPoseAnimfPCQ29EAGL4Anim15PosePaletteBankPf = .text:0x8009B86C; // type:function size:0x504 scope:global -Blend__Q29EAGL4Anim13FnPoseBlenderifPCfT3PfPCQ29EAGL4Anim8BoneMask = .text:0x8009BD70; // type:function size:0x42C scope:global -EvalSQT__Q29EAGL4Anim13FnPoseBlenderfPfPCQ29EAGL4Anim8BoneMask = .text:0x8009C19C; // type:function size:0xB40 scope:global -Eval__Q29EAGL4Anim13FnPoseBlenderffPf = .text:0x8009CCDC; // type:function size:0x650 scope:global -Eval__Q29EAGL4Anim16FnRawPoseChannelffPf = .text:0x8009D32C; // type:function size:0x30 scope:global -EvalSQT__Q29EAGL4Anim16FnRawPoseChannelfPfPCQ29EAGL4Anim8BoneMask = .text:0x8009D35C; // type:function size:0x30 scope:global -length__FPf = .text:0x8009D38C; // type:function size:0x30 scope:global -__Q29EAGL4Anim12FnRunBlender = .text:0x8009D3BC; // type:function size:0x78 scope:global -_._Q29EAGL4Anim12FnRunBlender = .text:0x8009D434; // type:function size:0x1E0 scope:global -EvalSQT__Q29EAGL4Anim12FnRunBlenderfPfPCQ29EAGL4Anim8BoneMask = .text:0x8009D614; // type:function size:0x250 scope:global -Eval__Q29EAGL4Anim12FnRunBlenderffPf = .text:0x8009D864; // type:function size:0x3C scope:global -SetWeight__Q29EAGL4Anim12FnRunBlenderf = .text:0x8009D8A0; // type:function size:0x550 scope:global -CycleTime__CQ29EAGL4Anim12FnRunBlenderfff = .text:0x8009DDF0; // type:function size:0xB8 scope:global -ComputeCycleIdx__CQ29EAGL4Anim12FnRunBlenderfff = .text:0x8009DEA8; // type:function size:0x60 scope:global -EvalPhase__Q29EAGL4Anim12FnRunBlenderfRQ29EAGL4Anim10PhaseValue = .text:0x8009DF08; // type:function size:0x8 scope:global -EvalVel2D__Q29EAGL4Anim12FnRunBlenderfPf = .text:0x8009DF10; // type:function size:0x1C0 scope:global -FindMatchTime__CQ29EAGL4Anim12FnRunBlenderRCQ29EAGL4Anim15MatchPhaseInputRf = .text:0x8009E0D0; // type:function size:0x2D0 scope:global -ComputeAlignQ__CQ29EAGL4Anim12FnRunBlenderPfT1RQ25UMath7Vector4 = .text:0x8009E3A0; // type:function size:0xF4 scope:global -AlignCycleBeginEnd__Q29EAGL4Anim12FnRunBlenderi = .text:0x8009E494; // type:function size:0x1E4 scope:global -AlignRootQ__CQ29EAGL4Anim12FnRunBlenderPf = .text:0x8009E678; // type:function size:0xB0 scope:global -AlignVel__CQ29EAGL4Anim12FnRunBlenderPf = .text:0x8009E728; // type:function size:0xC4 scope:global -BlendVel__CQ29EAGL4Anim12FnRunBlenderffPf = .text:0x8009E7EC; // type:function size:0x16C scope:global -BlendFacing__CQ29EAGL4Anim12FnRunBlenderffPf = .text:0x8009E958; // type:function size:0x358 scope:global -GetFrequency__CQ29EAGL4Anim12FnRunBlender = .text:0x8009ECB0; // type:function size:0x8 scope:global -ComputeRootQ__CQ29EAGL4Anim12FnRunBlenderffRQ25UMath7Vector4 = .text:0x8009ECB8; // type:function size:0x24C scope:global -ComputeBeginRootQ__CQ29EAGL4Anim12FnRunBlenderRQ25UMath7Vector4 = .text:0x8009EF04; // type:function size:0x2C scope:global -ComputeEndRootQ__CQ29EAGL4Anim12FnRunBlenderRQ25UMath7Vector4 = .text:0x8009EF30; // type:function size:0x88 scope:global -__Q29EAGL4Anim13FnStatelessF3 = .text:0x8009EFB8; // type:function size:0x44 scope:global -_._Q29EAGL4Anim13FnStatelessF3 = .text:0x8009EFFC; // type:function size:0x60 scope:global -SetAnimMemoryMap__Q29EAGL4Anim13FnStatelessF3PQ29EAGL4Anim13AnimMemoryMap = .text:0x8009F05C; // type:function size:0x8 scope:global -GetLength__CQ29EAGL4Anim13FnStatelessF3Rf = .text:0x8009F064; // type:function size:0x64 scope:global -Eval__Q29EAGL4Anim13FnStatelessF3ffPf = .text:0x8009F0C8; // type:function size:0x3C scope:global -EvalSQT__Q29EAGL4Anim13FnStatelessF3fPfPCQ29EAGL4Anim8BoneMask = .text:0x8009F104; // type:function size:0x5BC scope:global -EvalSQTMask__Q29EAGL4Anim13FnStatelessF3fPfPCQ29EAGL4Anim8BoneMaskbif = .text:0x8009F6C0; // type:function size:0x410 scope:global -EvalSQTfast__Q29EAGL4Anim13FnStatelessF3fPfPCQ29EAGL4Anim8BoneMaskbif = .text:0x8009FAD0; // type:function size:0x35C scope:global -UseFPS__Q29EAGL4Anim13FnStatelessF3b = .text:0x8009FE2C; // type:function size:0x98 scope:global -__Q29EAGL4Anim12FnStatelessQ = .text:0x8009FEC4; // type:function size:0x4C scope:global -_._Q29EAGL4Anim12FnStatelessQ = .text:0x8009FF10; // type:function size:0x60 scope:global -SetAnimMemoryMap__Q29EAGL4Anim12FnStatelessQPQ29EAGL4Anim13AnimMemoryMap = .text:0x8009FF70; // type:function size:0x8 scope:global -GetLength__CQ29EAGL4Anim12FnStatelessQRf = .text:0x8009FF78; // type:function size:0x64 scope:global -Eval__Q29EAGL4Anim12FnStatelessQffPf = .text:0x8009FFDC; // type:function size:0x3C scope:global -EvalSQT__Q29EAGL4Anim12FnStatelessQfPfPCQ29EAGL4Anim8BoneMask = .text:0x800A0018; // type:function size:0x5C8 scope:global -EvalSQTMask__Q29EAGL4Anim12FnStatelessQfPfPCQ29EAGL4Anim8BoneMaskbif = .text:0x800A05E0; // type:function size:0x37C scope:global -UseFPS__Q29EAGL4Anim12FnStatelessQb = .text:0x800A095C; // type:function size:0x98 scope:global -__Q29EAGL4Anim13FnTurnBlender = .text:0x800A09F4; // type:function size:0x64 scope:global -_._Q29EAGL4Anim13FnTurnBlender = .text:0x800A0A58; // type:function size:0xA8 scope:global -EvalSQT__Q29EAGL4Anim13FnTurnBlenderfPfPCQ29EAGL4Anim8BoneMask = .text:0x800A0B00; // type:function size:0x1C0 scope:global -Eval__Q29EAGL4Anim13FnTurnBlenderffPf = .text:0x800A0CC0; // type:function size:0x3C scope:global -SetWeight__Q29EAGL4Anim13FnTurnBlenderf = .text:0x800A0CFC; // type:function size:0x1DC scope:global -EvalPhase__Q29EAGL4Anim13FnTurnBlenderfRQ29EAGL4Anim10PhaseValue = .text:0x800A0ED8; // type:function size:0x8 scope:global -EvalVel2D__Q29EAGL4Anim13FnTurnBlenderfPf = .text:0x800A0EE0; // type:function size:0x194 scope:global -BlendVel__CQ29EAGL4Anim13FnTurnBlenderffPf = .text:0x800A1074; // type:function size:0x16C scope:global -ComputeCycleIdx__CQ29EAGL4Anim13FnTurnBlenderfff = .text:0x800A11E0; // type:function size:0x60 scope:global -ComputeAlignQ__CQ29EAGL4Anim13FnTurnBlenderPfT1RQ25UMath7Vector4 = .text:0x800A1240; // type:function size:0xF4 scope:global -AlignCycleBeginEnd__Q29EAGL4Anim13FnTurnBlenderi = .text:0x800A1334; // type:function size:0x1A4 scope:global -AlignRootQ__CQ29EAGL4Anim13FnTurnBlenderPf = .text:0x800A14D8; // type:function size:0xB0 scope:global -AlignVel__CQ29EAGL4Anim13FnTurnBlenderPf = .text:0x800A1588; // type:function size:0xC4 scope:global -BlendBeginFacing__CQ29EAGL4Anim13FnTurnBlenderPf = .text:0x800A164C; // type:function size:0x278 scope:global -CycleTime__CQ29EAGL4Anim13FnTurnBlenderfff = .text:0x800A18C4; // type:function size:0xB8 scope:global -BlendEndFacing__CQ29EAGL4Anim13FnTurnBlenderPf = .text:0x800A197C; // type:function size:0x278 scope:global -GetMemoryPoolUsageAux__Q29EAGL4Anim17MemoryPoolManager = .text:0x800A1BF4; // type:function size:0x18 scope:global -GetFreePoolSizeAux__Q29EAGL4Anim17MemoryPoolManager = .text:0x800A1C0C; // type:function size:0x48 scope:global -AllocateIdxBlock__Q29EAGL4Anim17MemoryPoolManagerUs = .text:0x800A1C54; // type:function size:0x40 scope:global -NewBlockByIdxAux__Q29EAGL4Anim17MemoryPoolManagerUs = .text:0x800A1C94; // type:function size:0x50 scope:global -NewBlockAux__Q29EAGL4Anim17MemoryPoolManagerUi = .text:0x800A1CE4; // type:function size:0x54 scope:global -ResetPoolAux__Q29EAGL4Anim17MemoryPoolManager = .text:0x800A1D38; // type:function size:0x5C scope:global -InitAux__Q29EAGL4Anim17MemoryPoolManagerUi = .text:0x800A1D94; // type:function size:0x80 scope:global -CleanupAux__Q29EAGL4Anim17MemoryPoolManager = .text:0x800A1E14; // type:function size:0x3C scope:global -NewFnAnimAux__Q29EAGL4Anim17MemoryPoolManagerQ39EAGL4Anim10AnimTypeId4Type = .text:0x800A1E50; // type:function size:0x3B8 scope:global -NewFnAnimAux__Q29EAGL4Anim17MemoryPoolManagerPQ29EAGL4Anim13AnimMemoryMap = .text:0x800A2208; // type:function size:0xB8 scope:global -InitAnimMemoryMapAux__Q29EAGL4Anim17MemoryPoolManagerPQ29EAGL4Anim13AnimMemoryMap = .text:0x800A22C0; // type:function size:0x9C scope:global -DeleteBlockByIdxAux__Q29EAGL4Anim17MemoryPoolManagerUsPv = .text:0x800A235C; // type:function size:0x1C scope:global -DeleteBlockAux__Q29EAGL4Anim17MemoryPoolManagerPv = .text:0x800A2378; // type:function size:0x20 scope:global -DeleteFnAnimAux__Q29EAGL4Anim17MemoryPoolManagerPQ29EAGL4Anim6FnAnim = .text:0x800A2398; // type:function size:0x88 scope:global -GetLength__CQ29EAGL4Anim11FnPhaseChanRf = .text:0x800A2420; // type:function size:0x3C scope:global -Eval__Q29EAGL4Anim11FnPhaseChanffPf = .text:0x800A245C; // type:function size:0x284 scope:global -SetAnimMemoryMap__Q29EAGL4Anim11FnPhaseChanPQ29EAGL4Anim13AnimMemoryMap = .text:0x800A26E0; // type:function size:0x70 scope:global -InitAnimMemoryMap__Q29EAGL4Anim8PoseAnimPQ29EAGL4Anim13AnimMemoryMap = .text:0x800A2750; // type:function size:0x44 scope:global -Eval__Q29EAGL4Anim15RawEventChannelffRiRfPPQ29EAGL4Anim12EventHandlerPv = .text:0x800A2794; // type:function size:0x1E0 scope:global -InitAnimMemoryMap__Q29EAGL4Anim14RawPoseChannelPQ29EAGL4Anim13AnimMemoryMap = .text:0x800A2974; // type:function size:0x190 scope:global -Eval__Q29EAGL4Anim14RawPoseChannelfPfbPCQ29EAGL4Anim8BoneMask = .text:0x800A2B04; // type:function size:0x28C scope:global -EvalFrame__Q29EAGL4Anim14RawPoseChanneliPfPCQ29EAGL4Anim8BoneMask = .text:0x800A2D90; // type:function size:0x1AC scope:global -Decode__CQ29EAGL4Anim14FnRawStateChanPUcT1 = .text:0x800A2F3C; // type:function size:0x154 scope:global -EvalState__Q29EAGL4Anim14FnRawStateChanfPQ29EAGL4Anim5State = .text:0x800A3090; // type:function size:0x1C8 scope:global -FindTime__Q29EAGL4Anim14FnRawStateChanRCQ29EAGL4Anim9StateTestfRf = .text:0x800A3258; // type:function size:0xE8 scope:global -FreeBuffer__Q29EAGL4Anim13ScratchBuffer = .text:0x800A3340; // type:function size:0x64 scope:global -GetScratchBuffer__Q29EAGL4Anim13ScratchBufferi = .text:0x800A33A4; // type:function size:0x14 scope:global -MirrorPose__Q29EAGL4Anim8SkeletonPfT1bPCQ29EAGL4Anim8BoneMask = .text:0x800A33B8; // type:function size:0x424 scope:global -PoseSQTToGlobal__Q29EAGL4Anim8SkeletonPfPQ25EAGL49TransformPQ29EAGL4Anim8BoneMask = .text:0x800A37DC; // type:function size:0x1FC scope:global -GetStillPose__CQ29EAGL4Anim8SkeletonPfPCQ29EAGL4Anim8BoneMask = .text:0x800A39D8; // type:function size:0x2CC scope:global -InitAnimMemoryMap__Q29EAGL4Anim11StatelessF3PQ29EAGL4Anim13AnimMemoryMap = .text:0x800A3CA4; // type:function size:0x44 scope:global -InitAnimMemoryMap__Q29EAGL4Anim10StatelessQPQ29EAGL4Anim13AnimMemoryMap = .text:0x800A3CE8; // type:function size:0x90 scope:global -MtxMult__FPQ25EAGL49TransformPCQ25EAGL49TransformT1 = .text:0x800A3D78; // type:function size:0x3C scope:local -InitInternal__Q29EAGL4Anim11InitializerUib = .text:0x800A3DB4; // type:function size:0xB8 scope:global -__static_initialization_and_destruction_0 = .text:0x800A3E6C; // type:function size:0x104 scope:local -_._Q29EAGL4Anim11FnAnimSuper = .text:0x800A3F70; // type:function size:0x34 scope:global -GetTargetCheckSum__CQ29EAGL4Anim6FnAnim = .text:0x800A3FA4; // type:function size:0x8 scope:global -UseFPS__Q29EAGL4Anim6FnAnimb = .text:0x800A3FAC; // type:function size:0x4 scope:global -Eval__Q29EAGL4Anim6FnAnimffPf = .text:0x800A3FB0; // type:function size:0x4 scope:global -GetLength__CQ29EAGL4Anim6FnAnimRf = .text:0x800A3FB4; // type:function size:0x8 scope:global -FindMatchTime__CQ29EAGL4Anim6FnAnimRCQ29EAGL4Anim15MatchPhaseInputRf = .text:0x800A3FBC; // type:function size:0x8 scope:global -EvalSQT__Q29EAGL4Anim6FnAnimfPfPCQ29EAGL4Anim8BoneMask = .text:0x800A3FC4; // type:function size:0x8 scope:global -EvalPhase__Q29EAGL4Anim6FnAnimfRQ29EAGL4Anim10PhaseValue = .text:0x800A3FCC; // type:function size:0x8 scope:global -EvalVel2D__Q29EAGL4Anim6FnAnimfPf = .text:0x800A3FD4; // type:function size:0x8 scope:global -EvalEvent__Q29EAGL4Anim6FnAnimffPPQ29EAGL4Anim12EventHandlerPv = .text:0x800A3FDC; // type:function size:0x8 scope:global -EvalWeights__Q29EAGL4Anim6FnAnimfPf = .text:0x800A3FE4; // type:function size:0x8 scope:global -EvalState__Q29EAGL4Anim6FnAnimfPQ29EAGL4Anim5State = .text:0x800A3FEC; // type:function size:0x8 scope:global -EvalPose__Q29EAGL4Anim6FnAnimfPCQ29EAGL4Anim15PosePaletteBankPf = .text:0x800A3FF4; // type:function size:0x8 scope:global -FindTime__Q29EAGL4Anim6FnAnimRCQ29EAGL4Anim9StateTestfRf = .text:0x800A3FFC; // type:function size:0x8 scope:global -GetPhaseChan__Q29EAGL4Anim6FnAnim = .text:0x800A4004; // type:function size:0x8 scope:global -_._Q29EAGL4Anim17MemoryPoolManager = .text:0x800A400C; // type:function size:0x44 scope:global -GetTargetCheckSum__CQ29EAGL4Anim17FnCompoundChannel = .text:0x800A4050; // type:function size:0xC scope:global -GetLength__CQ29EAGL4Anim17FnCompoundChannelRf = .text:0x800A405C; // type:function size:0x68 scope:global -GetTargetCheckSum__CQ29EAGL4Anim12FnStatelessQ = .text:0x800A40C4; // type:function size:0xC scope:global -GetTargetCheckSum__CQ29EAGL4Anim13FnStatelessF3 = .text:0x800A40D0; // type:function size:0xC scope:global -_._Q29EAGL4Anim10FnPoseAnim = .text:0x800A40DC; // type:function size:0x54 scope:global -GetTargetCheckSum__CQ29EAGL4Anim10FnPoseAnim = .text:0x800A4130; // type:function size:0xC scope:global -GetAttributes__CQ29EAGL4Anim17FnCompoundChannel = .text:0x800A413C; // type:function size:0xC scope:global -Eval__Q29EAGL4Anim17FnCompoundChannelffPf = .text:0x800A4148; // type:function size:0x148 scope:global -_._Q29EAGL4Anim15FnDeltaLerpChan = .text:0x800A4290; // type:function size:0x54 scope:global -_._Q29EAGL4Anim15FnDeltaQuatChan = .text:0x800A42E4; // type:function size:0x54 scope:global -_._Q29EAGL4Anim13FnKeyLerpChan = .text:0x800A4338; // type:function size:0x54 scope:global -_._Q29EAGL4Anim13FnKeyQuatChan = .text:0x800A438C; // type:function size:0x54 scope:global -__Q29EAGL4Anim11FnDeltaChan = .text:0x800A43E0; // type:function size:0x58 scope:global -GetLength__CQ29EAGL4Anim11FnDeltaChanRf = .text:0x800A4438; // type:function size:0x3C scope:global -GetLength__CQ29EAGL4Anim14FnKeyDeltaChanRf = .text:0x800A4474; // type:function size:0x54 scope:global -_._Q29EAGL4Anim18FnCsisEventChannel = .text:0x800A44C8; // type:function size:0x54 scope:global -SetAnimMemoryMap__Q29EAGL4Anim18FnCsisEventChannelPQ29EAGL4Anim13AnimMemoryMap = .text:0x800A451C; // type:function size:0x1C scope:global -EvalEvent__Q29EAGL4Anim18FnCsisEventChannelffPPQ29EAGL4Anim12EventHandlerPv = .text:0x800A4538; // type:function size:0x3C scope:global -Eval__Q29EAGL4Anim18FnCsisEventChannelffPf = .text:0x800A4574; // type:function size:0x38 scope:global -GetConstBoneIdx__Q29EAGL4Anim6DeltaQ = .text:0x800A45AC; // type:function size:0x70 scope:global -GetConstPhysical__Q29EAGL4Anim6DeltaQ = .text:0x800A461C; // type:function size:0x80 scope:global -_._Q29EAGL4Anim9FnDeltaF1 = .text:0x800A469C; // type:function size:0xD4 scope:global -SetAnimMemoryMap__Q29EAGL4Anim9FnDeltaF1PQ29EAGL4Anim13AnimMemoryMap = .text:0x800A4770; // type:function size:0x14 scope:global -GetLength__CQ29EAGL4Anim9FnDeltaF1Rf = .text:0x800A4784; // type:function size:0x64 scope:global -_._Q29EAGL4Anim9FnDeltaF3 = .text:0x800A47E8; // type:function size:0xD4 scope:global -SetAnimMemoryMap__Q29EAGL4Anim9FnDeltaF3PQ29EAGL4Anim13AnimMemoryMap = .text:0x800A48BC; // type:function size:0x14 scope:global -GetLength__CQ29EAGL4Anim9FnDeltaF3Rf = .text:0x800A48D0; // type:function size:0x64 scope:global -GetConstBoneIdx__Q29EAGL4Anim10DeltaQFast = .text:0x800A4934; // type:function size:0x70 scope:global -GetConstPhysical__Q29EAGL4Anim10DeltaQFast = .text:0x800A49A4; // type:function size:0x80 scope:global -_._Q29EAGL4Anim14FnEventBlender = .text:0x800A4A24; // type:function size:0x38 scope:global -__dl__Q29EAGL4Anim14FnEventBlenderPvUi = .text:0x800A4A5C; // type:function size:0x2C scope:global -EulF3__9EAGL4AnimRPfPf = .text:0x800A4A88; // type:function size:0x13C scope:global -QuatF4__9EAGL4AnimRPfPf = .text:0x800A4BC4; // type:function size:0x48 scope:global -TranF3__9EAGL4AnimRPfPf = .text:0x800A4C0C; // type:function size:0x38 scope:global -EulF3Interp__9EAGL4AnimfRPfT2Pf = .text:0x800A4C44; // type:function size:0x350 scope:global -QuatF4Interp__9EAGL4AnimfRPfT2Pf = .text:0x800A4F94; // type:function size:0x1E8 scope:global -TranF3Interp__9EAGL4AnimfRPfT2Pf = .text:0x800A517C; // type:function size:0xB0 scope:global -_._Q29EAGL4Anim16FnRawPoseChannel = .text:0x800A522C; // type:function size:0x54 scope:global -__dl__Q29EAGL4Anim16FnRawPoseChannelPvUi = .text:0x800A5280; // type:function size:0x2C scope:global -GetLength__CQ29EAGL4Anim16FnRawPoseChannelRf = .text:0x800A52AC; // type:function size:0x40 scope:global -_._Q29EAGL4Anim13FnPoseBlender = .text:0x800A52EC; // type:function size:0x38 scope:global -__dl__Q29EAGL4Anim13FnPoseBlenderPvUi = .text:0x800A5324; // type:function size:0x2C scope:global -_._Q29EAGL4Anim17FnRawEventChannel = .text:0x800A5350; // type:function size:0x54 scope:global -SetAnimMemoryMap__Q29EAGL4Anim17FnRawEventChannelPQ29EAGL4Anim13AnimMemoryMap = .text:0x800A53A4; // type:function size:0x1C scope:global -EvalEvent__Q29EAGL4Anim17FnRawEventChannelffPPQ29EAGL4Anim12EventHandlerPv = .text:0x800A53C0; // type:function size:0x3C scope:global -Eval__Q29EAGL4Anim17FnRawEventChannelffPf = .text:0x800A53FC; // type:function size:0x38 scope:global -_._Q29EAGL4Anim11FnPhaseChan = .text:0x800A5434; // type:function size:0x54 scope:global -GetPhaseChan__Q29EAGL4Anim11FnPhaseChan = .text:0x800A5488; // type:function size:0x8 scope:global -GetAttributes__CQ29EAGL4Anim13FnStatelessF3 = .text:0x800A5490; // type:function size:0xC scope:global -GetAttributes__CQ29EAGL4Anim12FnStatelessQ = .text:0x800A549C; // type:function size:0xC scope:global -_._Q29EAGL4Anim18FnRawLinearChannel = .text:0x800A54A8; // type:function size:0x54 scope:global -Eval__Q29EAGL4Anim18FnRawLinearChannelffPf = .text:0x800A54FC; // type:function size:0x1E8 scope:global -GetLength__CQ29EAGL4Anim18FnRawLinearChannelRf = .text:0x800A56E4; // type:function size:0x40 scope:global -_._Q29EAGL4Anim7FnGraft = .text:0x800A5724; // type:function size:0x38 scope:global -Eval__Q29EAGL4Anim7FnGraftffPf = .text:0x800A575C; // type:function size:0x94 scope:global -_._Q29EAGL4Anim12FnPoseMirror = .text:0x800A57F0; // type:function size:0x38 scope:global -Eval__Q29EAGL4Anim12FnPoseMirrorffPf = .text:0x800A5828; // type:function size:0x94 scope:global -EvalSQT__Q29EAGL4Anim12FnPoseMirrorfPfPCQ29EAGL4Anim8BoneMask = .text:0x800A58BC; // type:function size:0xAC scope:global -_._Q29EAGL4Anim7FnCycle = .text:0x800A5968; // type:function size:0x38 scope:global -Eval__Q29EAGL4Anim7FnCycleffPf = .text:0x800A59A0; // type:function size:0x1C0 scope:global -EvalEvent__Q29EAGL4Anim7FnCycleffPPQ29EAGL4Anim12EventHandlerPv = .text:0x800A5B60; // type:function size:0x1C0 scope:global -EvalSQT__Q29EAGL4Anim7FnCyclefPfPCQ29EAGL4Anim8BoneMask = .text:0x800A5D20; // type:function size:0x100 scope:global -EvalPhase__Q29EAGL4Anim7FnCyclefRQ29EAGL4Anim10PhaseValue = .text:0x800A5E20; // type:function size:0x100 scope:global -_._Q29EAGL4Anim14FnRawStateChan = .text:0x800A5F20; // type:function size:0x60 scope:global -GetLength__CQ29EAGL4Anim14FnRawStateChanRf = .text:0x800A5F80; // type:function size:0x3C scope:global -Eval__Q29EAGL4Anim14FnRawStateChanffPf = .text:0x800A5FBC; // type:function size:0x38 scope:global -__dl__Q29EAGL4Anim18FnCsisEventChannelPvUi = .text:0x800A5FF4; // type:function size:0x2C scope:global -__dl__Q29EAGL4Anim17FnRawEventChannelPvUi = .text:0x800A6020; // type:function size:0x2C scope:global -__dl__Q29EAGL4Anim18FnRawLinearChannelPvUi = .text:0x800A604C; // type:function size:0x2C scope:global -__dl__Q29EAGL4Anim7FnGraftPvUi = .text:0x800A6078; // type:function size:0x2C scope:global -__dl__Q29EAGL4Anim12FnPoseMirrorPvUi = .text:0x800A60A4; // type:function size:0x2C scope:global -__dl__Q29EAGL4Anim7FnCyclePvUi = .text:0x800A60D0; // type:function size:0x2C scope:global -_GLOBAL_.I.Constructor__Q29EAGL4Anim8AnimBankPvPQ25EAGL413DynamicLoaderPCc = .text:0x800A60FC; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x800A6128; // type:label scope:local -__18AudioMemoryManager = .text:0x800A6128; // type:function size:0x20 scope:global -InitMemoryPool__18AudioMemoryManager15eAUDMEMPOOLTYPEi = .text:0x800A6148; // type:function size:0x64 scope:global -AllocateMemory__18AudioMemoryManageriPCcb = .text:0x800A61AC; // type:function size:0xB0 scope:global -FreeMemory__18AudioMemoryManagerPv = .text:0x800A625C; // type:function size:0x28 scope:global -AllocateMemoryChar__18AudioMemoryManageriPCcb = .text:0x800A6284; // type:function size:0x20 scope:global -g_EAXIsPaused__Fv = .text:0x800A62A4; // type:function size:0x24 scope:global -START_321Countdown__8EAXSound = .text:0x800A62C8; // type:function size:0x84 scope:global -AreResourceLoadsPending__8EAXSound = .text:0x800A634C; // type:function size:0x28 scope:global -QueueNISButtonThrough__8EAXSoundUii = .text:0x800A6374; // type:function size:0xE8 scope:global -QueueNISStream__8EAXSoundUiiPFUii_v = .text:0x800A645C; // type:function size:0x70 scope:global -IsNISStreamQueued__8EAXSound = .text:0x800A64CC; // type:function size:0x58 scope:global -NISFinished__8EAXSound = .text:0x800A6524; // type:function size:0xA8 scope:global -PlayNIS__8EAXSound = .text:0x800A65CC; // type:function size:0x58 scope:global -PlayUISoundFX__8EAXSound18eMenuSoundTriggers = .text:0x800A6624; // type:function size:0x8C scope:global -StopUISoundFX__8EAXSound18eMenuSoundTriggers = .text:0x800A66B0; // type:function size:0x84 scope:global -SetCsisName__8EAXSoundP7SndBase = .text:0x800A6734; // type:function size:0x78 scope:global -SetCsisName__8EAXSoundPc = .text:0x800A67AC; // type:function size:0xC scope:global -__8EAXSound = .text:0x800A67B8; // type:function size:0xA0 scope:global -_._8EAXSound = .text:0x800A6858; // type:function size:0x1D4 scope:global -GetPointerCallback__8EAXSoundi = .text:0x800A6A2C; // type:function size:0x48 scope:global -SetSFXOutCallback__8EAXSoundiPi = .text:0x800A6A74; // type:function size:0x58 scope:global -SetSFXInputCallback__8EAXSoundiPi = .text:0x800A6ACC; // type:function size:0x60 scope:global -GetStateRefCount__8EAXSoundi = .text:0x800A6B2C; // type:function size:0x24 scope:global -SetSFXBaseObject__8EAXSoundP8SFX_Base14eMAINMAPSTATESii = .text:0x800A6B50; // type:function size:0x10C scope:global -GetSFXBase_Object__8EAXSoundi = .text:0x800A6C5C; // type:function size:0x90 scope:global -GetSndBase_Object__8EAXSoundi = .text:0x800A6CEC; // type:function size:0xC0 scope:global -GetCurMusicVolume__8EAXSound = .text:0x800A6DAC; // type:function size:0x34 scope:global -ReInitMasterVolumes__8EAXSound = .text:0x800A6DE0; // type:function size:0x4 scope:global -UpdateVolumes__8EAXSoundP13AudioSettingsf = .text:0x800A6DE4; // type:function size:0x74 scope:global -Random__8EAXSoundi = .text:0x800A6E58; // type:function size:0x2C scope:global -Random__8EAXSoundf = .text:0x800A6E84; // type:function size:0x28 scope:global -UpdateSongInfo__8EAXSound = .text:0x800A6EAC; // type:function size:0x4 scope:global -InitializeDriver__8EAXSound = .text:0x800A6EB0; // type:function size:0x3D4 scope:global -RefreshLocalAttr__8EAXSound = .text:0x800A7284; // type:function size:0x2E4 scope:global -InitializeSoundBootLoad__8EAXSound = .text:0x800A7568; // type:function size:0xE4 scope:global -StartNewGamePlay__8EAXSound = .text:0x800A764C; // type:function size:0x334 scope:global -InitializeInGame__8EAXSound = .text:0x800A7980; // type:function size:0x110 scope:global -InitializeFrontEnd__8EAXSound = .text:0x800A7A90; // type:function size:0x234 scope:global -MixMapReadyCallback__8EAXSound = .text:0x800A7CC4; // type:function size:0x68 scope:global -AttachPlayerCars__8EAXSound = .text:0x800A7D2C; // type:function size:0xD8 scope:global -InitEATRAX__8EAXSound = .text:0x800A7E04; // type:function size:0x20 scope:global -PlayFEMusic__8EAXSoundi = .text:0x800A7E24; // type:function size:0x80 scope:global -Update__8EAXSoundf = .text:0x800A7EA4; // type:function size:0x4F0 scope:global -CommitAssets__8EAXSound = .text:0x800A8394; // type:function size:0x68 scope:global -GetPlayerTunerCar__8EAXSoundi = .text:0x800A83FC; // type:function size:0x38 scope:global -SpawnHelicopter__8EAXSoundP13EAX_HeliState = .text:0x800A8434; // type:function size:0x8C scope:global -DestroyEAXHeli__8EAXSoundP13EAX_HeliState = .text:0x800A84C0; // type:function size:0x58 scope:global -DestroyEAXCar__8EAXSoundP12EAX_CarState = .text:0x800A8518; // type:function size:0xE0 scope:global -LoadFrontEndSoundBanks__8EAXSoundPFi_vi = .text:0x800A85F8; // type:function size:0x180 scope:global -UnloadFrontEndSoundBanks__8EAXSound = .text:0x800A8778; // type:function size:0x1F8 scope:global -g_LoadSndAsset__FGQ26Attrib9StringKey12eSNDDATAPATH12eSNDDATATYPE = .text:0x800A8970; // type:function size:0xA4 scope:global -LoadCommonIngameFiles__Fv = .text:0x800A8A14; // type:function size:0x5C8 scope:global -StopSND11__8EAXSound = .text:0x800A8FDC; // type:function size:0x4 scope:global -StartSND11__8EAXSound = .text:0x800A8FE0; // type:function size:0x4 scope:global -LoadInGameSoundBanks__8EAXSoundPFi_vi = .text:0x800A8FE4; // type:function size:0x1E8 scope:global -CloseSound__8EAXSound = .text:0x800A91CC; // type:function size:0xCC scope:global -UnLoadInGameSoundBanks__8EAXSound = .text:0x800A9298; // type:function size:0x1E4 scope:global -ReStartRace__8EAXSoundb = .text:0x800A947C; // type:function size:0x13C scope:global -InitializeSoundDriver__Fv = .text:0x800A95B8; // type:function size:0x7C scope:global -InitializeSoundLoad__Fv = .text:0x800A9634; // type:function size:0x28 scope:global -LoadAemsFrontEnd__FPFi_vi = .text:0x800A965C; // type:function size:0x54 scope:global -UnloadAemsFrontEnd__Fv = .text:0x800A96B0; // type:function size:0x38 scope:global -SoundPause__Fb16eSNDPAUSE_REASON = .text:0x800A96E8; // type:function size:0x4 scope:global -FESoundControl__FbPCc = .text:0x800A96EC; // type:function size:0x82C scope:global -SetSoundControlState__Fb12eSNDCTLSTATEPCc = .text:0x800A9F18; // type:function size:0x2D0 scope:global -LoadAemsInGame__FPFi_vi = .text:0x800AA1E8; // type:function size:0x54 scope:global -UnloadAemsInGame__Fv = .text:0x800AA23C; // type:function size:0x38 scope:global -CloseSound__Fv = .text:0x800AA274; // type:function size:0x38 scope:global -GetDefaultPlatformAudioMode__8EAXSound = .text:0x800AA2AC; // type:function size:0x24 scope:global -SetAudioModeFromMemoryCard__8EAXSound13eSndAudioMode = .text:0x800AA2D0; // type:function size:0x24 scope:global -GetFreeSlot__14BankSlotSystem15eBANK_SLOT_TYPE = .text:0x800AA2F4; // type:function size:0x70 scope:global -DestroySlots__14BankSlotSystem = .text:0x800AA364; // type:function size:0xDC scope:global -__14EAXAemsManager = .text:0x800AA440; // type:function size:0x148 scope:global -_._14EAXAemsManager = .text:0x800AA588; // type:function size:0x1A0 scope:global -AreResourceLoadsPending__14EAXAemsManager = .text:0x800AA728; // type:function size:0x48 scope:global -Init__14EAXAemsManager = .text:0x800AA770; // type:function size:0xF4 scope:global -InitSPUram__14EAXAemsManager = .text:0x800AA864; // type:function size:0x44 scope:global -AddEventSystem__14EAXAemsManager7eEVTSYS12eSNDDATAPATH = .text:0x800AA8A8; // type:function size:0x130 scope:global -EvtSysLoadCallback__14EAXAemsManagerii = .text:0x800AA9D8; // type:function size:0x28 scope:global -GetCallbackEventSys__14EAXAemsManager = .text:0x800AAA00; // type:function size:0x14 scope:global -SubscribeEventSys__Fv = .text:0x800AAA14; // type:function size:0x58 scope:global -UnloadSndData__14EAXAemsManagerGQ26Attrib9StringKey = .text:0x800AAA6C; // type:function size:0x6C scope:global -UnloadSndData__14EAXAemsManageri = .text:0x800AAAD8; // type:function size:0x1B0 scope:global -RemoveBankListing__14EAXAemsManageri = .text:0x800AAC88; // type:function size:0x650 scope:global -RemoveAEMSBank__14EAXAemsManager = .text:0x800AB2D8; // type:function size:0x30 scope:global -AddAemsBank__14EAXAemsManager = .text:0x800AB308; // type:function size:0x98 scope:global -SetupNextLoad__14EAXAemsManager = .text:0x800AB3A0; // type:function size:0x3F0 scope:global -ResetBankLoadParams__14EAXAemsManager = .text:0x800AB790; // type:function size:0x4C scope:global -InitiateLoad__14EAXAemsManager = .text:0x800AB7DC; // type:function size:0x3EC scope:global -CheckForCompleteAsyncLoad__14EAXAemsManager = .text:0x800ABBC8; // type:function size:0x8C scope:global -CompleteAsyncLoad__14EAXAemsManager = .text:0x800ABC54; // type:function size:0x60 scope:global -ResolvePendingAsyncLoads__14EAXAemsManager = .text:0x800ABCB4; // type:function size:0x4 scope:global -Update__14EAXAemsManager = .text:0x800ABCB8; // type:function size:0x770 scope:global -AsyncResidentAllocCB__14EAXAemsManageri = .text:0x800AC428; // type:function size:0x1D0 scope:global -ResidentAllocCB__14EAXAemsManagerPvii = .text:0x800AC5F8; // type:function size:0xCC scope:global -DataLoadCB__14EAXAemsManagerii = .text:0x800AC6C4; // type:function size:0x140 scope:global -ResolveCurrentDataMemory__14EAXAemsManager = .text:0x800AC804; // type:function size:0xA8 scope:global -AddBankListing__14EAXAemsManagerR18stAssetDescription = .text:0x800AC8AC; // type:function size:0x168 scope:global -IsAssetInList__14EAXAemsManagerGQ26Attrib9StringKey = .text:0x800ACA14; // type:function size:0x64 scope:global -IsAssetLoaded__14EAXAemsManagerGQ26Attrib9StringKey = .text:0x800ACA78; // type:function size:0x84 scope:global -QueueFileLoad__14EAXAemsManagerR15stSndAssetQueue15eBANK_SLOT_TYPE = .text:0x800ACAFC; // type:function size:0x2E0 scope:global -InitializeSlots__14EAXAemsManagerb = .text:0x800ACDDC; // type:function size:0xB0 scope:global -DestroySlots__14EAXAemsManagerb = .text:0x800ACE8C; // type:function size:0x68 scope:global -RegisterSlots__14EAXAemsManager15eBANK_SLOT_TYPEiiib = .text:0x800ACEF4; // type:function size:0x1FC scope:global -__11EAXFrontEnd = .text:0x800AD0F0; // type:function size:0x130 scope:global -_._11EAXFrontEnd = .text:0x800AD220; // type:function size:0x114 scope:global -AttachSFXOBJ__11EAXFrontEndP8SFX_Base18eSFXOBJ_MAIN_TYPES = .text:0x800AD334; // type:function size:0x10 scope:global -Initialize__11EAXFrontEnd = .text:0x800AD344; // type:function size:0x4 scope:global -Stop__11EAXFrontEnd18eMenuSoundTriggers = .text:0x800AD348; // type:function size:0x64 scope:global -Play__11EAXFrontEnd18eMenuSoundTriggers = .text:0x800AD3AC; // type:function size:0x264 scope:global -Play__11EAXFrontEndPv = .text:0x800AD610; // type:function size:0x1B0 scope:global -Update__11EAXFrontEndPv = .text:0x800AD7C0; // type:function size:0x20 scope:global -GetEventPointer__11EAXFrontEndi = .text:0x800AD7E0; // type:function size:0x8 scope:global -UpdateDriveOn__11EAXFrontEnd = .text:0x800AD7E8; // type:function size:0x4 scope:global -SetFEDrivingCarState__11EAXFrontEndP8bVector3T1P6Camerai = .text:0x800AD7EC; // type:function size:0x4 scope:global -DestroyAllDriveOnSnds__11EAXFrontEnd = .text:0x800AD7F0; // type:function size:0x4 scope:global -__9EAXCommon = .text:0x800AD7F4; // type:function size:0xD4 scope:global -_._9EAXCommon = .text:0x800AD8C8; // type:function size:0x58 scope:global -AttachSFXOBJ__9EAXCommonP8SFX_Base18eSFXOBJ_MAIN_TYPES = .text:0x800AD920; // type:function size:0x10 scope:global -MsgPlayMiscSound__9EAXCommonRC10MMiscSound = .text:0x800AD930; // type:function size:0x10C scope:global -Initialize__9EAXCommon = .text:0x800ADA3C; // type:function size:0x4 scope:global -Stop__9EAXCommon18eMenuSoundTriggers = .text:0x800ADA40; // type:function size:0x4 scope:global -Play__9EAXCommon18eMenuSoundTriggers = .text:0x800ADA44; // type:function size:0x1EC scope:global -Play__9EAXCommonPv = .text:0x800ADC30; // type:function size:0x1B0 scope:global -Update__9EAXCommonPv = .text:0x800ADDE0; // type:function size:0xA0 scope:global -GetEventPointer__9EAXCommoni = .text:0x800ADE80; // type:function size:0x8 scope:global -GetStateInfo__C13EAXAITunerCar = .text:0x800ADE88; // type:function size:0xC scope:global -GetStateName__C13EAXAITunerCar = .text:0x800ADE94; // type:function size:0xC scope:global -CreateState__13EAXAITunerCarUi = .text:0x800ADEA0; // type:function size:0x5C scope:global -__13EAXAITunerCar = .text:0x800ADEFC; // type:function size:0x54 scope:global -_._13EAXAITunerCar = .text:0x800ADF50; // type:function size:0x68 scope:global -SFXMessage__13EAXAITunerCar15eSFXMessageTypeUiUi = .text:0x800ADFB8; // type:function size:0x34 scope:global -UpdateCarPhysics__13EAXAITunerCar = .text:0x800ADFEC; // type:function size:0x20 scope:global -UpdateParams__13EAXAITunerCarf = .text:0x800AE00C; // type:function size:0x40 scope:global -ProcessEvent__13EAXAITunerCarP7emEvent = .text:0x800AE04C; // type:function size:0x4 scope:global -UpdatAIDriveBy__13EAXAITunerCarf = .text:0x800AE050; // type:function size:0x2C8 scope:global -GetStateInfo__C9EAXCopCar = .text:0x800AE318; // type:function size:0xC scope:global -GetStateName__C9EAXCopCar = .text:0x800AE324; // type:function size:0xC scope:global -CreateState__9EAXCopCarUi = .text:0x800AE330; // type:function size:0x78 scope:global -GetStateInfo__C8EAXTruck = .text:0x800AE3A8; // type:function size:0xC scope:global -GetStateName__C8EAXTruck = .text:0x800AE3B4; // type:function size:0xC scope:global -CreateState__8EAXTruckUi = .text:0x800AE3C0; // type:function size:0x78 scope:global -UpdateParams__8EAXTruckf = .text:0x800AE438; // type:function size:0x44 scope:global -UpdateParams__9EAXCopCarf = .text:0x800AE47C; // type:function size:0x44 scope:global -Attach__9EAXCopCarPv = .text:0x800AE4C0; // type:function size:0x70 scope:global -GetStateInfo__C13EAXTrafficCar = .text:0x800AE530; // type:function size:0xC scope:global -GetStateName__C13EAXTrafficCar = .text:0x800AE53C; // type:function size:0xC scope:global -CreateState__13EAXTrafficCarUi = .text:0x800AE548; // type:function size:0x5C scope:global -__13EAXTrafficCar = .text:0x800AE5A4; // type:function size:0x3C scope:global -_._13EAXTrafficCar = .text:0x800AE5E0; // type:function size:0x58 scope:global -Attach__13EAXTrafficCarPv = .text:0x800AE638; // type:function size:0x34 scope:global -Detach__13EAXTrafficCar = .text:0x800AE66C; // type:function size:0x38 scope:global -GetStateInfo__C11EAXTunerCar = .text:0x800AE6A4; // type:function size:0xC scope:global -GetStateName__C11EAXTunerCar = .text:0x800AE6B0; // type:function size:0xC scope:global -CreateState__11EAXTunerCarUi = .text:0x800AE6BC; // type:function size:0x5C scope:global -__11EAXTunerCar = .text:0x800AE718; // type:function size:0x60 scope:global -_._11EAXTunerCar = .text:0x800AE778; // type:function size:0x58 scope:global -PreLoadAssets__11EAXTunerCar = .text:0x800AE7D0; // type:function size:0x4 scope:global -ProcessSoundSphere__11EAXTunerCarUiiP8bVector3f = .text:0x800AE7D4; // type:function size:0x4 scope:global -SFXMessage__11EAXTunerCar15eSFXMessageTypeUiUi = .text:0x800AE7D8; // type:function size:0x88 scope:global -DebugPrintSkidBar__FiiPci = .text:0x800AE860; // type:function size:0x4 scope:global -UpdateRotation__11EAXTunerCar = .text:0x800AE864; // type:function size:0x28 scope:global -UpdatePov__11EAXTunerCar = .text:0x800AE88C; // type:function size:0xA0 scope:global -FirstUpdate__11EAXTunerCarf = .text:0x800AE92C; // type:function size:0xC scope:global -UpdateParams__11EAXTunerCarf = .text:0x800AE938; // type:function size:0x8C scope:global -DistanceToView__5SoundPC8bVector3 = .text:0x800AE9C4; // type:function size:0x1FC scope:global -IsPrimaryTarget__5SoundUi = .text:0x800AEBC0; // type:function size:0x178 scope:global -PlayScrape__Q25Sound14CollisionEventRCQ25Sound16AudioEventParams = .text:0x800AED38; // type:function size:0x128 scope:global -Play__Q25Sound14CollisionEventRCQ25Sound16AudioEventParams = .text:0x800AEE60; // type:function size:0x11C scope:global -__Q25Sound14CollisionEventRCQ25Sound16AudioEventParamsb = .text:0x800AEF7C; // type:function size:0x338 scope:global -Update__Q25Sound14CollisionEventRC8bVector3N21f = .text:0x800AF2B4; // type:function size:0xD0 scope:global -InitAsScrape__Q25Sound14CollisionEventRCQ36Attrib3Gen11audioscrape = .text:0x800AF384; // type:function size:0xC4 scope:global -InitAsImpact__Q25Sound14CollisionEventRCQ36Attrib3Gen11audioimpact = .text:0x800AF448; // type:function size:0x38C scope:global -Release__Q25Sound14CollisionEvent = .text:0x800AF7D4; // type:function size:0x8C scope:global -_._Q25Sound14CollisionEvent = .text:0x800AF860; // type:function size:0x90 scope:global -SetOwner__Q25Sound14CollisionEventP11CSTATE_Base = .text:0x800AF8F0; // type:function size:0x8 scope:global -GetCollisionDescription__5SoundRCQ26Attrib9StringKey = .text:0x800AF8F8; // type:function size:0x10C scope:global -__9cPathLine = .text:0x800AFA04; // type:function size:0x38 scope:global -_._9cPathLine = .text:0x800AFA3C; // type:function size:0x28 scope:global -Initialize__9cPathLineffi = .text:0x800AFA64; // type:function size:0x64 scope:global -ClearStages__9cPathLine = .text:0x800AFAC8; // type:function size:0x6C scope:global -AddStage__9cPathLineffi10eCURVETYPE = .text:0x800AFB34; // type:function size:0xF0 scope:global -AddLinkedStage__9cPathLinefi10eCURVETYPE = .text:0x800AFC24; // type:function size:0x68 scope:global -Update__9cPathLinef = .text:0x800AFC8C; // type:function size:0x210 scope:global -__11cInterpLine = .text:0x800AFE9C; // type:function size:0x34 scope:global -_._11cInterpLine = .text:0x800AFED0; // type:function size:0x28 scope:global -Initialize__11cInterpLineffi10eCURVETYPE = .text:0x800AFEF8; // type:function size:0x78 scope:global -Update__11cInterpLineff = .text:0x800AFF70; // type:function size:0x4C scope:global -Update__11cInterpLinef = .text:0x800AFFBC; // type:function size:0x17C scope:global -__5Slopeffff = .text:0x800B0138; // type:function size:0x30 scope:global -_._5Slope = .text:0x800B0168; // type:function size:0x28 scope:global -Initialize__5Slopeffff = .text:0x800B0190; // type:function size:0x4C scope:global -GetValue__5Slopef = .text:0x800B01DC; // type:function size:0x34 scope:global -Regenerate__5Slope = .text:0x800B0210; // type:function size:0x54 scope:global -GetClosestPlayerCar__FPC8bVector3 = .text:0x800B0264; // type:function size:0x30 scope:global -GetClosestPlayerCar__FPC8bVector3bRi = .text:0x800B0294; // type:function size:0x138 scope:global -GetClosestCopCarToCamera__Fv = .text:0x800B03CC; // type:function size:0x98 scope:global -GetPlayerCarInRadius__FR8bVector3f = .text:0x800B0464; // type:function size:0x110 scope:global -IsCarInRadius__FP12EAX_CarStatePC8bVector3f = .text:0x800B0574; // type:function size:0x54 scope:global -__14EAXSND8Wrapper = .text:0x800B05C8; // type:function size:0x30 scope:global -_._14EAXSND8Wrapper = .text:0x800B05F8; // type:function size:0x70 scope:global -Initialize__14EAXSND8Wrapper = .text:0x800B0668; // type:function size:0x158 scope:global -ReInit__14EAXSND8Wrapper = .text:0x800B07C0; // type:function size:0x70 scope:global -STUPID__14EAXSND8Wrapper = .text:0x800B0830; // type:function size:0x4 scope:global -Update__14EAXSND8Wrapper = .text:0x800B0834; // type:function size:0x20 scope:global -SetAudioModeFromMemoryCard__14EAXSND8Wrapper13eSndAudioMode = .text:0x800B0854; // type:function size:0xE4 scope:global -SetAudioRenderMode__14EAXSND8Wrapper13eSndAudioMode = .text:0x800B0938; // type:function size:0xB4 scope:global -SetSnd8RenderMode__14EAXSND8Wrapper13eSndAudioMode = .text:0x800B09EC; // type:function size:0xAC scope:global -GetDefaultPlatformAudioMode__14EAXSND8Wrapper = .text:0x800B0A98; // type:function size:0x54 scope:global -GetRoadNoiseTransitionVol__F22FXROADNOISE_TRANSITION = .text:0x800B0AEC; // type:function size:0x4C scope:global -GetStichTypeName__F10STICH_TYPE = .text:0x800B0B38; // type:function size:0xC scope:global -__15cSTICH_PlayBack = .text:0x800B0B44; // type:function size:0xB8 scope:global -_._15cSTICH_PlayBack = .text:0x800B0BFC; // type:function size:0xD0 scope:global -QueueSampleRequest__15cSTICH_PlayBackR15SampleQueueItem = .text:0x800B0CCC; // type:function size:0x174 scope:global -KillSample__FP14cSampleWarpper = .text:0x800B0E40; // type:function size:0x20 scope:local -RemoveFromList__15cSTICH_PlayBackG15SampleQueueItem = .text:0x800B0E60; // type:function size:0x174 scope:global -Prune__15cSTICH_PlayBack10STICH_TYPEii = .text:0x800B0FD4; // type:function size:0x1A8 scope:global -AddStich__15cSTICH_PlayBack10STICH_TYPER9SND_Stich = .text:0x800B117C; // type:function size:0x58 scope:global -GetStich__15cSTICH_PlayBack10STICH_TYPEi = .text:0x800B11D4; // type:function size:0x38 scope:global -Update__15cSTICH_PlayBackf = .text:0x800B120C; // type:function size:0x98 scope:global -DestroyAllStichs__15cSTICH_PlayBack = .text:0x800B12A4; // type:function size:0xF4 scope:global -__13cStichWrapperRC9SND_Stich = .text:0x800B1398; // type:function size:0x58 scope:global -_._13cStichWrapper = .text:0x800B13F0; // type:function size:0x58 scope:global -__nw__13cStichWrapperUi = .text:0x800B1448; // type:function size:0x30 scope:global -__dl__13cStichWrapperPv = .text:0x800B1478; // type:function size:0x3C scope:global -Play__13cStichWrapperiii = .text:0x800B14B4; // type:function size:0x34 scope:global -Play__13cStichWrapperPC10SND_Params = .text:0x800B14E8; // type:function size:0x180 scope:global -Update__13cStichWrapperPC10SND_Params = .text:0x800B1668; // type:function size:0xF0 scope:global -Destroy__13cStichWrapper = .text:0x800B1758; // type:function size:0xA8 scope:global -__14cSampleWarpperR13SND_SampleRef = .text:0x800B1800; // type:function size:0x20 scope:global -_._14cSampleWarpper = .text:0x800B1820; // type:function size:0x15C scope:global -__nw__14cSampleWarpperUi = .text:0x800B197C; // type:function size:0x50 scope:global -__dl__14cSampleWarpperPv = .text:0x800B19CC; // type:function size:0x3C scope:global -Destroy__14cSampleWarpper = .text:0x800B1A08; // type:function size:0x1D0 scope:global -Initialize__14cSampleWarpper = .text:0x800B1BD8; // type:function size:0xC scope:global -Update__14cSampleWarpperPC10SND_Params = .text:0x800B1BE4; // type:function size:0x398 scope:global -Play__14cSampleWarpperPC10SND_Params = .text:0x800B1F7C; // type:function size:0x868 scope:global -Prune__14cSampleWarpper10STICH_TYPEii = .text:0x800B27E4; // type:function size:0x1A0 scope:global -__11cStitchLoopUi = .text:0x800B2984; // type:function size:0x10C scope:global -_._11cStitchLoop = .text:0x800B2A90; // type:function size:0x8C scope:global -Update__11cStitchLoopPC10SND_Paramsf = .text:0x800B2B1C; // type:function size:0x130 scope:global -LoaderSoundStichs__FP6bChunk = .text:0x800B2C4C; // type:function size:0x188 scope:global -UnloaderSoundStichs__FP6bChunk = .text:0x800B2DD4; // type:function size:0x5C scope:global -__12SndAITrigger = .text:0x800B2E30; // type:function size:0x74 scope:global -_._12SndAITrigger = .text:0x800B2EA4; // type:function size:0x48 scope:global -Initialize__12SndAITriggeri = .text:0x800B2EEC; // type:function size:0x4C scope:global -BeginTrigger__12SndAITrigger = .text:0x800B2F38; // type:function size:0x14 scope:global -EndTrigger__12SndAITrigger = .text:0x800B2F4C; // type:function size:0x14 scope:global -Update__12SndAITriggerff = .text:0x800B2F60; // type:function size:0x110 scope:global -__17SndAIStateManager = .text:0x800B3070; // type:function size:0x80 scope:global -_._17SndAIStateManager = .text:0x800B30F0; // type:function size:0x98 scope:global -Initialize__17SndAIStateManagerP14SFXCTL_Physics = .text:0x800B3188; // type:function size:0x1A4 scope:global -Update__17SndAIStateManagerf = .text:0x800B332C; // type:function size:0x2E8 scope:global -UpdateState__17SndAIStateManagerf = .text:0x800B3614; // type:function size:0x200 scope:global -SwitchState__17SndAIStateManager12SND_AI_STATE = .text:0x800B3814; // type:function size:0x24 scope:global -GeneratePotentialStates__17SndAIStateManagerPb = .text:0x800B3838; // type:function size:0x12C scope:global -InitServices__9SoundConnv = .text:0x800B3964; // type:function size:0x4 scope:global -RestoreServices__9SoundConnv = .text:0x800B3968; // type:function size:0x4 scope:global -Construct__12CarSoundConnRCQ23Sim14ConnectionData = .text:0x800B396C; // type:function size:0x44 scope:global -__12CarSoundConnRCQ23Sim14ConnectionData = .text:0x800B39B0; // type:function size:0x250 scope:global -_._12CarSoundConn = .text:0x800B3C00; // type:function size:0x310 scope:global -OnStatusCheck__12CarSoundConn = .text:0x800B3F10; // type:function size:0x30 scope:global -UpdateState__12CarSoundConnf = .text:0x800B3F40; // type:function size:0x6F8 scope:global -Construct__13HeliSoundConnRCQ23Sim14ConnectionData = .text:0x800B4638; // type:function size:0x44 scope:global -__13HeliSoundConnRCQ23Sim14ConnectionData = .text:0x800B467C; // type:function size:0x3C0 scope:global -_._13HeliSoundConn = .text:0x800B4A3C; // type:function size:0x2D4 scope:global -UpdateState__13HeliSoundConnf = .text:0x800B4D10; // type:function size:0x218 scope:global -UpdateServices__9SoundConnf = .text:0x800B4F28; // type:function size:0xA8 scope:global -Add__Q26Speech6copMapP10HSIMABLE__P6EAXCop = .text:0x800B4FD0; // type:function size:0x288 scope:global -Remove__Q26Speech6copMapP10HSIMABLE__ = .text:0x800B5258; // type:function size:0xC0 scope:global -ModifyHandle__Q26Speech6copMapP10HSIMABLE__T1 = .text:0x800B5318; // type:function size:0x50 scope:global -Find__CQ26Speech6copMapP10HSIMABLE__ = .text:0x800B5368; // type:function size:0x7C scope:global -Add__Q26Speech15SpeechHashIDMapUi18SPCHType_1_EventID = .text:0x800B53E4; // type:function size:0x1F4 scope:global -GetID__Q26Speech15SpeechHashIDMapUi = .text:0x800B55D8; // type:function size:0x3C scope:global -GetHash__Q26Speech15SpeechHashIDMap18SPCHType_1_EventID = .text:0x800B5614; // type:function size:0x8C scope:global -Init__Q26Speech12EventHistory = .text:0x800B56A0; // type:function size:0x2C8 scope:global -Find__Q26Speech12EventHistory18SPCHType_1_EventID = .text:0x800B5968; // type:function size:0x94 scope:global -GetCount__Q26Speech12EventHistory18SPCHType_1_EventID = .text:0x800B59FC; // type:function size:0x34 scope:global -GetTime__Q26Speech12EventHistory18SPCHType_1_EventID = .text:0x800B5A30; // type:function size:0x50 scope:global -Touch__Q26Speech12EventHistory18SPCHType_1_EventIDUs = .text:0x800B5A80; // type:function size:0x80 scope:global -Reset__Q26Speech12EventHistory = .text:0x800B5B00; // type:function size:0x3C scope:global -Destruct__Q26Speech16SpeechSampleDataPQ26Speech16SpeechSampleData = .text:0x800B5B3C; // type:function size:0x2C scope:global -Construct__Q26Speech16SpeechSampleDataP26SPCHType_SampleRequestDataUib = .text:0x800B5B68; // type:function size:0xB8 scope:global -__Q26Speech20ScheduledSpeechEvent = .text:0x800B5C20; // type:function size:0x80 scope:global -_._Q26Speech20ScheduledSpeechEvent = .text:0x800B5CA0; // type:function size:0x1A4 scope:global -__nw__Q26Speech20ScheduledSpeechEventUiUi = .text:0x800B5E44; // type:function size:0x88 scope:global -__dl__Q26Speech20ScheduledSpeechEventPv = .text:0x800B5ECC; // type:function size:0x3C scope:global -sort_nested_priority__Q26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEventT1 = .text:0x800B5F08; // type:function size:0x68 scope:global -GetData__Q26Speech20ScheduledSpeechEventPUi = .text:0x800B5F70; // type:function size:0x18 scope:global -ReserveSample__Q26Speech20ScheduledSpeechEvent = .text:0x800B5F88; // type:function size:0x18 scope:global -AddSample__Q26Speech20ScheduledSpeechEventPQ26Speech16SpeechSampleDataUc = .text:0x800B5FA0; // type:function size:0x40 scope:global -IsWorldDataStreaming__FUi = .text:0x800B5FE0; // type:function size:0x6C scope:global -AssignAudioStreamHandle__FUi = .text:0x800B604C; // type:function size:0x10 scope:global -__18EAXS_StreamManager = .text:0x800B605C; // type:function size:0x48 scope:global -_._18EAXS_StreamManager = .text:0x800B60A4; // type:function size:0xA4 scope:global -InitializeStreams__18EAXS_StreamManager9eGAMEMODE = .text:0x800B6148; // type:function size:0x18C scope:global -GetStreamChannel__18EAXS_StreamManageri = .text:0x800B62D4; // type:function size:0x20 scope:global -AddStreamChannel__18EAXS_StreamManagerP18EAXS_StreamChannel9eSTRMTYPE = .text:0x800B62F4; // type:function size:0x1C scope:global -RemoveStreamChannel__18EAXS_StreamManager9eSTRMTYPE = .text:0x800B6310; // type:function size:0x4 scope:global -__18EAXS_StreamChannel = .text:0x800B6314; // type:function size:0x3C scope:global -InitParams__18EAXS_StreamChannelP18EAXS_StreamManager = .text:0x800B6350; // type:function size:0xB4 scope:global -_._18EAXS_StreamChannel = .text:0x800B6404; // type:function size:0x48 scope:global -SetupBigFileStuff__18EAXS_StreamChannelPCcl = .text:0x800B644C; // type:function size:0x40 scope:global -AddToStrmReq__18EAXS_StreamChannelPCcli = .text:0x800B648C; // type:function size:0x44 scope:global -InitChannel__18EAXS_StreamChanneliii9eSTRMTYPE = .text:0x800B64D0; // type:function size:0x68 scope:global -ProcessTrackStreamerOn__18EAXS_StreamChannel = .text:0x800B6538; // type:function size:0xC scope:global -ProcessTrackStreamerOff__18EAXS_StreamChannel = .text:0x800B6544; // type:function size:0xC scope:global -__14SndStrmWrapper = .text:0x800B6550; // type:function size:0x14 scope:global -Create__14SndStrmWrapperiii = .text:0x800B6564; // type:function size:0xB0 scope:global -CreateStream__14SndStrmWrapperiiPciPv = .text:0x800B6614; // type:function size:0x90 scope:global -IsPlaying__14SndStrmWrapper = .text:0x800B66A4; // type:function size:0x7C scope:global -GetCurrentTime__14SndStrmWrapper = .text:0x800B6720; // type:function size:0x44 scope:global -GetTimeRemaining__14SndStrmWrapper = .text:0x800B6764; // type:function size:0x44 scope:global -AlmostDone__14SndStrmWrapper = .text:0x800B67A8; // type:function size:0x84 scope:global -Stop__14SndStrmWrapper = .text:0x800B682C; // type:function size:0x34 scope:global -AddToStream__14SndStrmWrapperPCcli = .text:0x800B6860; // type:function size:0x40 scope:global -AddToStream__14SndStrmWrapperiPvii = .text:0x800B68A0; // type:function size:0x28 scope:global -ModifyHold__14SndStrmWrapperii = .text:0x800B68C8; // type:function size:0x28 scope:global -SetVol__14SndStrmWrapperib = .text:0x800B68F0; // type:function size:0x94 scope:global -SetAz__14SndStrmWrapperi = .text:0x800B6984; // type:function size:0x78 scope:global -RampVol__14SndStrmWrapperii = .text:0x800B69FC; // type:function size:0xA4 scope:global -SetLowPass__14SndStrmWrapperi = .text:0x800B6AA0; // type:function size:0x48 scope:global -GetStatus__14SndStrmWrapperP15SNDSTREAMSTATUS = .text:0x800B6AE8; // type:function size:0x48 scope:global -GetRequestStatus__14SndStrmWrapperiP16SNDREQUESTSTATUS = .text:0x800B6B30; // type:function size:0x48 scope:global -GetTimeBuffered__14SndStrmWrapper = .text:0x800B6B78; // type:function size:0x34 scope:global -Pause__14SndStrmWrapper = .text:0x800B6BAC; // type:function size:0x3C scope:global -Resume__14SndStrmWrapper = .text:0x800B6BE8; // type:function size:0x3C scope:global -_._14SndStrmWrapper = .text:0x800B6C24; // type:function size:0x64 scope:global -DestroyStream__14SndStrmWrapper = .text:0x800B6C88; // type:function size:0x5C scope:global -PurgeStream__14SndStrmWrapper = .text:0x800B6CE4; // type:function size:0x34 scope:global -validatehandle__FiPP15STREAMHEADERtagPP12TAPSTRUCTtag = .text:0x800B6D18; // type:function size:0x40 scope:local -inbetween__FPcN20 = .text:0x800B6D58; // type:function size:0x40 scope:local -decbufferusage__FP15STREAMHEADERtagi = .text:0x800B6D98; // type:function size:0x80 scope:local -getfreerequest__FP15STREAMHEADERtag = .text:0x800B6E18; // type:function size:0x88 scope:local -queuerequest__FP15STREAMHEADERtagP16REQUESTSTRUCTtag = .text:0x800B6EA0; // type:function size:0x7C scope:local -locaterequest__FP15STREAMHEADERtagi = .text:0x800B6F1C; // type:function size:0x50 scope:local -freerequest__FP15STREAMHEADERtagP16REQUESTSTRUCTtag = .text:0x800B6F6C; // type:function size:0x80 scope:local -filterchunk__FP15STREAMHEADERtagP14STREAMCHUNKHDR = .text:0x800B6FEC; // type:function size:0x78 scope:local -parsechunks__FP15STREAMHEADERtag = .text:0x800B7064; // type:function size:0x2DC scope:local -opencallback__FiiPv = .text:0x800B7340; // type:function size:0x8C scope:local -closecallback__FiiPv = .text:0x800B73CC; // type:function size:0x5C scope:local -readcallback__FiiPv = .text:0x800B7428; // type:function size:0x104 scope:local -startnextrequest__FP15STREAMHEADERtagi = .text:0x800B752C; // type:function size:0x164 scope:local -restartstream__FP15STREAMHEADERtagi = .text:0x800B7690; // type:function size:0x3E8 scope:local -STREAM_overhead__Fiii = .text:0x800B7A78; // type:function size:0x20 scope:global -STREAM_create__FiiiPvi = .text:0x800B7A98; // type:function size:0x268 scope:global -STREAM_setfilter__Fiiiii = .text:0x800B7D00; // type:function size:0xBC scope:global -STREAM_destroy__Fi = .text:0x800B7DBC; // type:function size:0x94 scope:global -STREAM_setpriority__Fiii = .text:0x800B7E50; // type:function size:0x50 scope:global -STREAM_setgreedylevel__Fii = .text:0x800B7EA0; // type:function size:0x74 scope:global -STREAM_setgreedystate__Fii = .text:0x800B7F14; // type:function size:0x68 scope:global -STREAM_taphandle__Fii = .text:0x800B7F7C; // type:function size:0x6C scope:global -STREAM_queuefile__FiPCcii = .text:0x800B7FE8; // type:function size:0xF4 scope:global -STREAM_queuemem__FiPvii = .text:0x800B80DC; // type:function size:0x164 scope:global -STREAM_cancelrequest__Fii = .text:0x800B8240; // type:function size:0x2C0 scope:global -STREAM_kill__Fi = .text:0x800B8500; // type:function size:0x23C scope:global -STREAM_get__Fi = .text:0x800B873C; // type:function size:0x168 scope:global -STREAM_release__FiP14STREAMCHUNKHDR = .text:0x800B88A4; // type:function size:0x130 scope:global -STREAM_gettable__Fi = .text:0x800B89D4; // type:function size:0x40 scope:global -STREAM_state__Fi = .text:0x800B8A14; // type:function size:0x40 scope:global -STREAM_isendofstream__Fi = .text:0x800B8A54; // type:function size:0x5C scope:global -STREAM_buffersize__Fi = .text:0x800B8AB0; // type:function size:0x48 scope:global -GetTypeInfo__C6SFXCTL = .text:0x800B8AF8; // type:function size:0xC scope:global -GetTypeName__C6SFXCTL = .text:0x800B8B04; // type:function size:0xC scope:global -__6SFXCTL = .text:0x800B8B10; // type:function size:0x44 scope:global -_._6SFXCTL = .text:0x800B8B54; // type:function size:0x58 scope:global -InitSFX__6SFXCTL = .text:0x800B8BAC; // type:function size:0x4 scope:global -UpdateParams__6SFXCTLf = .text:0x800B8BB0; // type:function size:0x4 scope:global -GetTypeInfo__C12SFXCTL_Wheel = .text:0x800B8BB4; // type:function size:0xC scope:global -GetTypeName__C12SFXCTL_Wheel = .text:0x800B8BC0; // type:function size:0xC scope:global -CreateObject__12SFXCTL_WheelUi = .text:0x800B8BCC; // type:function size:0x5C scope:global -__12SFXCTL_Wheel = .text:0x800B8C28; // type:function size:0x22C scope:global -_._12SFXCTL_Wheel = .text:0x800B8E54; // type:function size:0x8C scope:global -UpdateParams__12SFXCTL_Wheelf = .text:0x800B8EE0; // type:function size:0x34 scope:global -InitSFX__12SFXCTL_Wheel = .text:0x800B8F14; // type:function size:0x140 scope:global -GenerateWheelPosition__12SFXCTL_Wheel = .text:0x800B9054; // type:function size:0x190 scope:global -UpdateTireParams__12SFXCTL_Wheel = .text:0x800B91E4; // type:function size:0x3CC scope:global -GetWheelPos__12SFXCTL_Wheelii = .text:0x800B95B0; // type:function size:0x4C scope:global -GenerateTerrainTypes__12SFXCTL_Wheel = .text:0x800B95FC; // type:function size:0x3D8 scope:global -GetTypeInfo__C15SFXCTL_Shifting = .text:0x800B99D4; // type:function size:0xC scope:global -GetTypeName__C15SFXCTL_Shifting = .text:0x800B99E0; // type:function size:0xC scope:global -CreateObject__15SFXCTL_ShiftingUi = .text:0x800B99EC; // type:function size:0x5C scope:global -__15SFXCTL_Shifting = .text:0x800B9A48; // type:function size:0x98 scope:global -_._15SFXCTL_Shifting = .text:0x800B9AE0; // type:function size:0xA4 scope:global -UpdateMixerOutputs__15SFXCTL_Shifting = .text:0x800B9B84; // type:function size:0x5C scope:global -GetController__15SFXCTL_Shiftingi = .text:0x800B9BE0; // type:function size:0x14 scope:global -AttachController__15SFXCTL_ShiftingP6SFXCTL = .text:0x800B9BF4; // type:function size:0x58 scope:global -SetupSFX__15SFXCTL_ShiftingP11CSTATE_Base = .text:0x800B9C4C; // type:function size:0x54 scope:global -InitSFX__15SFXCTL_Shifting = .text:0x800B9CA0; // type:function size:0x88 scope:global -UpdateGearShiftState__15SFXCTL_Shiftingf = .text:0x800B9D28; // type:function size:0xB60 scope:global -UpdateParams__15SFXCTL_Shiftingf = .text:0x800BA888; // type:function size:0xA8 scope:global -UpdateTorque__15SFXCTL_Shiftingf = .text:0x800BA930; // type:function size:0xA8 scope:global -UpdateRPM__15SFXCTL_Shiftingf = .text:0x800BA9D8; // type:function size:0xA8 scope:global -GetShiftingRPM__15SFXCTL_Shifting = .text:0x800BAA80; // type:function size:0x8 scope:global -GetShiftingTRQ__15SFXCTL_Shifting = .text:0x800BAA88; // type:function size:0x8 scope:global -GetShiftingVOL__15SFXCTL_Shifting = .text:0x800BAA90; // type:function size:0x8 scope:global -BeginUpShift__15SFXCTL_Shifting = .text:0x800BAA98; // type:function size:0x3B0 scope:global -FillGraphFromSpline__FRCQ25UMath7Matrix4P8bVector2iff = .text:0x800BAE48; // type:function size:0xE0 scope:global -BeginDownShift__15SFXCTL_Shifting = .text:0x800BAF28; // type:function size:0x190 scope:global -PostShiftFX_Update__15SFXCTL_Shiftingf = .text:0x800BB0B8; // type:function size:0xB4 scope:global -PostShiftFX_End__15SFXCTL_Shifting = .text:0x800BB16C; // type:function size:0x24 scope:global -PostShiftFX_Init__15SFXCTL_Shifting = .text:0x800BB190; // type:function size:0x130 scope:global -CleanUpShiftFX__15SFXCTL_Shifting = .text:0x800BB2C0; // type:function size:0x38 scope:global -GetCurGear__15SFXCTL_Shifting = .text:0x800BB2F8; // type:function size:0x10 scope:global -GetLastGear__15SFXCTL_Shifting = .text:0x800BB308; // type:function size:0x10 scope:global -GetTypeInfo__C13SFXCTL_Engine = .text:0x800BB318; // type:function size:0xC scope:global -GetTypeName__C13SFXCTL_Engine = .text:0x800BB324; // type:function size:0xC scope:global -CreateObject__13SFXCTL_EngineUi = .text:0x800BB330; // type:function size:0x5C scope:global -__13SFXCTL_Engine = .text:0x800BB38C; // type:function size:0x228 scope:global -_._13SFXCTL_Engine = .text:0x800BB5B4; // type:function size:0xC4 scope:global -MessageVehicleDestroyed__13SFXCTL_EngineRC23MNotifyVehicleDestroyed = .text:0x800BB678; // type:function size:0x18C scope:global -MsgCountdownDone__13SFXCTL_EngineRC14MCountdownDone = .text:0x800BB804; // type:function size:0x18 scope:global -SetupSFX__13SFXCTL_EngineP11CSTATE_Base = .text:0x800BB81C; // type:function size:0x4C scope:global -InitSFX__13SFXCTL_Engine = .text:0x800BB868; // type:function size:0x1D0 scope:global -GetController__13SFXCTL_Enginei = .text:0x800BBA38; // type:function size:0x54 scope:global -AttachController__13SFXCTL_EngineP6SFXCTL = .text:0x800BBA8C; // type:function size:0x94 scope:global -UpdateParams__13SFXCTL_Enginef = .text:0x800BBB20; // type:function size:0x3D4 scope:global -UpdateFilterFX__13SFXCTL_Engine = .text:0x800BBEF4; // type:function size:0x134 scope:global -UpdateCompression__13SFXCTL_Enginef = .text:0x800BC028; // type:function size:0xD0 scope:global -UpdateRedlining__13SFXCTL_Enginef = .text:0x800BC0F8; // type:function size:0x268 scope:global -UpdateVolume__13SFXCTL_Enginef = .text:0x800BC360; // type:function size:0xB8 scope:global -UpdateRPM__13SFXCTL_Enginef = .text:0x800BC418; // type:function size:0x2CC scope:global -UpdateTorque__13SFXCTL_Enginef = .text:0x800BC6E4; // type:function size:0xE4 scope:global -UpdateEngineLFO_FX__13SFXCTL_Enginef = .text:0x800BC7C8; // type:function size:0x338 scope:global -ShouldTurnOnClutch__13SFXCTL_Engine = .text:0x800BCB00; // type:function size:0x8C scope:global -UpdateClutchState__13SFXCTL_Engine = .text:0x800BCB8C; // type:function size:0x30 scope:global -UpdateNIS__14SFXCTL_Physicsff = .text:0x800BCBBC; // type:function size:0x638 scope:global -MsgRevEngine__14SFXCTL_PhysicsRC12MAIEngineRev = .text:0x800BD1F4; // type:function size:0x54 scope:global -MsgRevOff__14SFXCTL_PhysicsRC12MAIEngineRev = .text:0x800BD248; // type:function size:0x14 scope:global -__14NIS_RevManager = .text:0x800BD25C; // type:function size:0x58 scope:global -_._14NIS_RevManager = .text:0x800BD2B4; // type:function size:0x7C scope:global -OpenNISRevData__14NIS_RevManagerUi = .text:0x800BD330; // type:function size:0x16C scope:global -StartNISReving__14NIS_RevManager = .text:0x800BD49C; // type:function size:0x4 scope:global -Start321Reving__14NIS_RevManager = .text:0x800BD4A0; // type:function size:0x80 scope:global -CloseNIS__14NIS_RevManager = .text:0x800BD520; // type:function size:0x90 scope:global -Update__14NIS_RevManagerf = .text:0x800BD5B0; // type:function size:0x1A8 scope:global -GetTypeInfo__C17SFXCTL_AccelTrans = .text:0x800BD758; // type:function size:0xC scope:global -GetTypeName__C17SFXCTL_AccelTrans = .text:0x800BD764; // type:function size:0xC scope:global -CreateObject__17SFXCTL_AccelTransUi = .text:0x800BD770; // type:function size:0x5C scope:global -__17SFXCTL_AccelTrans = .text:0x800BD7CC; // type:function size:0x64 scope:global -_._17SFXCTL_AccelTrans = .text:0x800BD830; // type:function size:0x80 scope:global -SetupSFX__17SFXCTL_AccelTransP11CSTATE_Base = .text:0x800BD8B0; // type:function size:0x58 scope:global -InitSFX__17SFXCTL_AccelTrans = .text:0x800BD908; // type:function size:0x4C scope:global -GetController__17SFXCTL_AccelTransi = .text:0x800BD954; // type:function size:0x2C scope:global -AttachController__17SFXCTL_AccelTransP6SFXCTL = .text:0x800BD980; // type:function size:0x68 scope:global -UpdateParams__17SFXCTL_AccelTransf = .text:0x800BD9E8; // type:function size:0xE8 scope:global -UpdateRPM__17SFXCTL_AccelTransf = .text:0x800BDAD0; // type:function size:0x84 scope:global -UpdateTRQ__17SFXCTL_AccelTransf = .text:0x800BDB54; // type:function size:0x7C scope:global -UpdateState__17SFXCTL_AccelTransf = .text:0x800BDBD0; // type:function size:0x25C scope:global -BeginAccelTrans__17SFXCTL_AccelTrans = .text:0x800BDE2C; // type:function size:0xA4 scope:global -BeginAccelTrans_Idle__17SFXCTL_AccelTrans = .text:0x800BDED0; // type:function size:0xC4 scope:global -ShouldBeginAccelTrans_Idle__17SFXCTL_AccelTrans = .text:0x800BDF94; // type:function size:0x118 scope:global -ShouldBeginAccelTrans__17SFXCTL_AccelTrans = .text:0x800BE0AC; // type:function size:0xCC scope:global -ShouldPlayEngOffSweet__17SFXCTL_AccelTrans = .text:0x800BE178; // type:function size:0x74 scope:global -Destroy__17SFXCTL_AccelTrans = .text:0x800BE1EC; // type:function size:0x4 scope:global -GetTypeInfo__C18SFXCTL_HybridMotor = .text:0x800BE1F0; // type:function size:0xC scope:global -GetTypeName__C18SFXCTL_HybridMotor = .text:0x800BE1FC; // type:function size:0xC scope:global -CreateObject__18SFXCTL_HybridMotorUi = .text:0x800BE208; // type:function size:0x5C scope:global -__18SFXCTL_HybridMotor = .text:0x800BE264; // type:function size:0x154 scope:global -_._18SFXCTL_HybridMotor = .text:0x800BE3B8; // type:function size:0x68 scope:global -SetupSFX__18SFXCTL_HybridMotorP11CSTATE_Base = .text:0x800BE420; // type:function size:0x148 scope:global -InitSFX__18SFXCTL_HybridMotor = .text:0x800BE568; // type:function size:0x3C scope:global -GetController__18SFXCTL_HybridMotori = .text:0x800BE5A4; // type:function size:0x44 scope:global -AttachController__18SFXCTL_HybridMotorP6SFXCTL = .text:0x800BE5E8; // type:function size:0x80 scope:global -UpdateDeltaRPM__18SFXCTL_HybridMotor = .text:0x800BE668; // type:function size:0x15C scope:global -UpdateParams__18SFXCTL_HybridMotorf = .text:0x800BE7C4; // type:function size:0x100 scope:global -UpdateSingleMixEng__18SFXCTL_HybridMotorf = .text:0x800BE8C4; // type:function size:0x5D4 scope:global -UpdateDualMixEng__18SFXCTL_HybridMotorf = .text:0x800BEE98; // type:function size:0x674 scope:global -UpdateVolumeRedlining__18SFXCTL_HybridMotor = .text:0x800BF50C; // type:function size:0x11C scope:global -UpdateMixerOutputs__18SFXCTL_HybridMotor = .text:0x800BF628; // type:function size:0x260 scope:global -GetTypeInfo__C14SFXCTL_Physics = .text:0x800BF888; // type:function size:0xC scope:global -GetTypeName__C14SFXCTL_Physics = .text:0x800BF894; // type:function size:0xC scope:global -CreateObject__14SFXCTL_PhysicsUi = .text:0x800BF8A0; // type:function size:0x5C scope:global -__14SFXCTL_Physics = .text:0x800BF8FC; // type:function size:0x1E0 scope:global -_._14SFXCTL_Physics = .text:0x800BFADC; // type:function size:0x88 scope:global -UpdateParams__14SFXCTL_Physicsf = .text:0x800BFB64; // type:function size:0x370 scope:global -SetupSFX__14SFXCTL_PhysicsP11CSTATE_Base = .text:0x800BFED4; // type:function size:0x34 scope:global -InitSFX__14SFXCTL_Physics = .text:0x800BFF08; // type:function size:0xC0 scope:global -UpdateMixerOutputs__14SFXCTL_Physics = .text:0x800BFFC8; // type:function size:0x4BC scope:global -GetTypeInfo__C16SFXCTL_AIPhysics = .text:0x800C0484; // type:function size:0xC scope:global -GetTypeName__C16SFXCTL_AIPhysics = .text:0x800C0490; // type:function size:0xC scope:global -CreateObject__16SFXCTL_AIPhysicsUi = .text:0x800C049C; // type:function size:0x5C scope:global -__16SFXCTL_AIPhysics = .text:0x800C04F8; // type:function size:0x7C scope:global -_._16SFXCTL_AIPhysics = .text:0x800C0574; // type:function size:0x68 scope:global -SetupSFX__16SFXCTL_AIPhysicsP11CSTATE_Base = .text:0x800C05DC; // type:function size:0x20 scope:global -InitSFX__16SFXCTL_AIPhysics = .text:0x800C05FC; // type:function size:0x44 scope:global -UpdateParams__16SFXCTL_AIPhysicsf = .text:0x800C0640; // type:function size:0x270 scope:global -GenDeltaRPM__16SFXCTL_AIPhysics = .text:0x800C08B0; // type:function size:0x1C4 scope:global -UpdateRPM__16SFXCTL_AIPhysicsf = .text:0x800C0A74; // type:function size:0x154 scope:global -UpdateAccel__16SFXCTL_AIPhysicsf = .text:0x800C0BC8; // type:function size:0xA0 scope:global -UpdateTorque__16SFXCTL_AIPhysicsf = .text:0x800C0C68; // type:function size:0x60 scope:global -SuggestGear__16SFXCTL_AIPhysics = .text:0x800C0CC8; // type:function size:0xD4 scope:global -GetController__16SFXCTL_AIPhysicsi = .text:0x800C0D9C; // type:function size:0x14 scope:global -AttachController__16SFXCTL_AIPhysicsP6SFXCTL = .text:0x800C0DB0; // type:function size:0x58 scope:global -UpdateGear__16SFXCTL_AIPhysics = .text:0x800C0E08; // type:function size:0x17C scope:global -Destroy__16SFXCTL_AIPhysics = .text:0x800C0F84; // type:function size:0x4 scope:global -GetTypeInfo__C19SFXCTL_TruckPhysics = .text:0x800C0F88; // type:function size:0xC scope:global -GetTypeName__C19SFXCTL_TruckPhysics = .text:0x800C0F94; // type:function size:0xC scope:global -CreateObject__19SFXCTL_TruckPhysicsUi = .text:0x800C0FA0; // type:function size:0x78 scope:global -GetTypeInfo__C13SFXCTL_Tunnel = .text:0x800C1018; // type:function size:0xC scope:global -GetTypeName__C13SFXCTL_Tunnel = .text:0x800C1024; // type:function size:0xC scope:global -CreateObject__13SFXCTL_TunnelUi = .text:0x800C1030; // type:function size:0x5C scope:global -__13SFXCTL_Tunnel = .text:0x800C108C; // type:function size:0x13C scope:global -_._13SFXCTL_Tunnel = .text:0x800C11C8; // type:function size:0x68 scope:global -SetupSFX__13SFXCTL_TunnelP11CSTATE_Base = .text:0x800C1230; // type:function size:0x20 scope:global -InitSFX__13SFXCTL_Tunnel = .text:0x800C1250; // type:function size:0x6C scope:global -GetController__13SFXCTL_Tunneli = .text:0x800C12BC; // type:function size:0x8 scope:global -AttachController__13SFXCTL_TunnelP6SFXCTL = .text:0x800C12C4; // type:function size:0x4 scope:global -UpdateDriveBySnds__13SFXCTL_Tunnelf = .text:0x800C12C8; // type:function size:0x754 scope:global -GetTunnelType__13SFXCTL_TunnelR8bVector318eTrackPathZoneType = .text:0x800C1A1C; // type:function size:0x88 scope:global -UpdateParams__13SFXCTL_Tunnelf = .text:0x800C1AA4; // type:function size:0xA4 scope:global -UpdateIsInTunnel__13SFXCTL_Tunnelf = .text:0x800C1B48; // type:function size:0x264 scope:global -UpdateOcclusion__13SFXCTL_Tunnelf = .text:0x800C1DAC; // type:function size:0x254 scope:global -UpdateMixerOutputs__13SFXCTL_Tunnel = .text:0x800C2000; // type:function size:0xD4 scope:global -UpdateCityVerb__13SFXCTL_Tunnelf = .text:0x800C20D4; // type:function size:0x128 scope:global -Destroy__13SFXCTL_Tunnel = .text:0x800C21FC; // type:function size:0x4 scope:global -EndTunnelVerb__13SFXCTL_Tunnel = .text:0x800C2200; // type:function size:0x44 scope:global -AdjustReverbOffset__13SFXCTL_Tunneli = .text:0x800C2244; // type:function size:0xE4 scope:global -SetCurrentReverbType__13SFXCTL_Tunnel9eREVERBFXi = .text:0x800C2328; // type:function size:0xA8 scope:global -UpdateReflectionParams__13SFXCTL_Tunnelf = .text:0x800C23D0; // type:function size:0x3CC scope:global -GetTypeInfo__C16SFXCTL_MasterVol = .text:0x800C279C; // type:function size:0xC scope:global -GetTypeName__C16SFXCTL_MasterVol = .text:0x800C27A8; // type:function size:0xC scope:global -CreateObject__16SFXCTL_MasterVolUi = .text:0x800C27B4; // type:function size:0x5C scope:global -__16SFXCTL_MasterVol = .text:0x800C2810; // type:function size:0x50 scope:global -_._16SFXCTL_MasterVol = .text:0x800C2860; // type:function size:0x58 scope:global -InitSFX__16SFXCTL_MasterVol = .text:0x800C28B8; // type:function size:0x4 scope:global -UpdateParams__16SFXCTL_MasterVolf = .text:0x800C28BC; // type:function size:0x380 scope:global -GetTypeInfo__C16SFXCTL_GameState = .text:0x800C2C3C; // type:function size:0xC scope:global -GetTypeName__C16SFXCTL_GameState = .text:0x800C2C48; // type:function size:0xC scope:global -CreateObject__16SFXCTL_GameStateUi = .text:0x800C2C54; // type:function size:0x78 scope:global -UpdateMixerOutputs__16SFXCTL_GameState = .text:0x800C2CCC; // type:function size:0x4C scope:global -GetTypeInfo__C15SFXCTL_3DColPos = .text:0x800C2D18; // type:function size:0xC scope:global -GetTypeName__C15SFXCTL_3DColPos = .text:0x800C2D24; // type:function size:0xC scope:global -CreateObject__15SFXCTL_3DColPosUi = .text:0x800C2D30; // type:function size:0x78 scope:global -GetTypeInfo__C18SFXCTL_3DScrapePos = .text:0x800C2DA8; // type:function size:0xC scope:global -GetTypeName__C18SFXCTL_3DScrapePos = .text:0x800C2DB4; // type:function size:0xC scope:global -CreateObject__18SFXCTL_3DScrapePosUi = .text:0x800C2DC0; // type:function size:0x78 scope:global -GetTypeInfo__C15SFXCTL_3DCarPos = .text:0x800C2E38; // type:function size:0xC scope:global -GetTypeName__C15SFXCTL_3DCarPos = .text:0x800C2E44; // type:function size:0xC scope:global -CreateObject__15SFXCTL_3DCarPosUi = .text:0x800C2E50; // type:function size:0x5C scope:global -__15SFXCTL_3DCarPos = .text:0x800C2EAC; // type:function size:0x3C scope:global -_._15SFXCTL_3DCarPos = .text:0x800C2EE8; // type:function size:0x58 scope:global -GetTypeInfo__C15SFXCTL_3DObjPos = .text:0x800C2F40; // type:function size:0xC scope:global -GetTypeName__C15SFXCTL_3DObjPos = .text:0x800C2F4C; // type:function size:0xC scope:global -CreateObject__15SFXCTL_3DObjPosUi = .text:0x800C2F58; // type:function size:0x5C scope:global -__15SFXCTL_3DObjPos = .text:0x800C2FB4; // type:function size:0x7C scope:global -_._15SFXCTL_3DObjPos = .text:0x800C3030; // type:function size:0x58 scope:global -SetPlayerRef__15SFXCTL_3DObjPosi = .text:0x800C3088; // type:function size:0x8 scope:global -SetCameraAngle__15SFXCTL_3DObjPos = .text:0x800C3090; // type:function size:0xF0 scope:global -GenerateSinglePlayerMix__15SFXCTL_3DObjPos = .text:0x800C3180; // type:function size:0x5D0 scope:global -Generate3DParams__15SFXCTL_3DObjPosi = .text:0x800C3750; // type:function size:0x198 scope:global -AssignPositionVector__15SFXCTL_3DObjPosP8bVector3 = .text:0x800C38E8; // type:function size:0x8 scope:global -AssignDirectionVector__15SFXCTL_3DObjPosPC8bVector3 = .text:0x800C38F0; // type:function size:0x8 scope:global -AssignVelocityVector__15SFXCTL_3DObjPosPC8bVector3 = .text:0x800C38F8; // type:function size:0x8 scope:global -Detach__15SFXCTL_3DObjPos = .text:0x800C3900; // type:function size:0x10 scope:global -UpdateParams__15SFXCTL_3DObjPosf = .text:0x800C3910; // type:function size:0xCC scope:global -UpdateDoppler__15SFXCTL_3DObjPosif = .text:0x800C39DC; // type:function size:0x348 scope:global -GetTypeInfo__C17SFXCTL_Pathfinder = .text:0x800C3D24; // type:function size:0xC scope:global -GetTypeName__C17SFXCTL_Pathfinder = .text:0x800C3D30; // type:function size:0xC scope:global -CreateObject__17SFXCTL_PathfinderUi = .text:0x800C3D3C; // type:function size:0x5C scope:global -__17SFXCTL_Pathfinder = .text:0x800C3D98; // type:function size:0x78 scope:global -_._17SFXCTL_Pathfinder = .text:0x800C3E10; // type:function size:0xC8 scope:global -GetController__17SFXCTL_Pathfinderi = .text:0x800C3ED8; // type:function size:0x8 scope:global -AttachController__17SFXCTL_PathfinderP6SFXCTL = .text:0x800C3EE0; // type:function size:0x4 scope:global -UpdateParams__17SFXCTL_Pathfinderf = .text:0x800C3EE4; // type:function size:0x84 scope:global -UpdateMixerOutputs__17SFXCTL_Pathfinder = .text:0x800C3F68; // type:function size:0x4 scope:global -SetupSFX__17SFXCTL_PathfinderP11CSTATE_Base = .text:0x800C3F6C; // type:function size:0xC scope:global -CrossMapNodeParam__17SFXCTL_Pathfinderii = .text:0x800C3F78; // type:function size:0x78 scope:global -SongProgressCallback__17SFXCTL_Pathfinderii = .text:0x800C3FF0; // type:function size:0x13C scope:global -EventReleaseCallback__17SFXCTL_PathfinderPv15PATHEVENTRESULT = .text:0x800C412C; // type:function size:0x4 scope:global -EventActionCallback__17SFXCTL_Pathfinderiii = .text:0x800C4130; // type:function size:0x1AC scope:global -InitSFX__17SFXCTL_Pathfinder = .text:0x800C42DC; // type:function size:0x78 scope:global -InitPFParms__17SFXCTL_PathfinderP9stPFParmsii = .text:0x800C4354; // type:function size:0xF4 scope:global -CreateTrack__17SFXCTL_Pathfinderi = .text:0x800C4448; // type:function size:0xAC scope:global -GetHandle__17SFXCTL_Pathfinderi = .text:0x800C44F4; // type:function size:0x50 scope:global -DetachStreamInstance__17SFXCTL_PathfinderP9stPFParms = .text:0x800C4544; // type:function size:0x84 scope:global -AttachStreamInstance__17SFXCTL_PathfinderP9stPFParms = .text:0x800C45C8; // type:function size:0xA0 scope:global -DestroyTrack__17SFXCTL_PathfinderP9stPFParms = .text:0x800C4668; // type:function size:0x148 scope:global -GetTypeInfo__C16SFXCTL_3DHeliPos = .text:0x800C47B0; // type:function size:0xC scope:global -GetTypeName__C16SFXCTL_3DHeliPos = .text:0x800C47BC; // type:function size:0xC scope:global -CreateObject__16SFXCTL_3DHeliPosUi = .text:0x800C47C8; // type:function size:0x78 scope:global -GetTypeInfo__C17SFXCTL_Helicopter = .text:0x800C4840; // type:function size:0xC scope:global -GetTypeName__C17SFXCTL_Helicopter = .text:0x800C484C; // type:function size:0xC scope:global -CreateObject__17SFXCTL_HelicopterUi = .text:0x800C4858; // type:function size:0x5C scope:global -__17SFXCTL_Helicopter = .text:0x800C48B4; // type:function size:0x90 scope:global -_._17SFXCTL_Helicopter = .text:0x800C4944; // type:function size:0x58 scope:global -GetController__17SFXCTL_Helicopteri = .text:0x800C499C; // type:function size:0x14 scope:global -AttachController__17SFXCTL_HelicopterP6SFXCTL = .text:0x800C49B0; // type:function size:0x58 scope:global -SetupSFX__17SFXCTL_HelicopterP11CSTATE_Base = .text:0x800C4A08; // type:function size:0x20 scope:global -InitSFX__17SFXCTL_Helicopter = .text:0x800C4A28; // type:function size:0x94 scope:global -Detach__17SFXCTL_Helicopter = .text:0x800C4ABC; // type:function size:0xC scope:global -UpdateParams__17SFXCTL_Helicopterf = .text:0x800C4AC8; // type:function size:0x190 scope:global -reserve__Q24_STLt6vector2ZUiZQ33UTL3Stdt9Allocator2ZUiZ18_type_ResAllocListUi = .text:0x800C4C58; // type:function size:0x11C scope:global -reserve__Q24_STLt6vector2ZP12EAX_CarStateZQ33UTL3Stdt9Allocator2ZP12EAX_CarStateZ18_type_RefCountListUi = .text:0x800C4D74; // type:function size:0x11C scope:global -find__H2ZPP14ISndAttachableZP14ISndAttachable_4_STLX01X01RCX11_X01 = .text:0x800C4E90; // type:function size:0xB0 scope:global -find__H2ZQ24_STLt14_List_iterator2ZiZQ24_STLt16_Nonconst_traits1ZiZi_4_STLX01X01RCX11_X01 = .text:0x800C4F40; // type:function size:0x60 scope:global -clear__Q24_STLt10_List_base2Z10stBankSlotZQ33UTL3Stdt9Allocator2Z10stBankSlotZ20_type_BankSlotSystem = .text:0x800C4FA0; // type:function size:0x84 scope:global -clear__Q24_STLt10_List_base2Z15stSndAssetQueueZQ33UTL3Stdt9Allocator2Z15stSndAssetQueueZ19_type_SndAssetQueue = .text:0x800C5024; // type:function size:0x78 scope:global -_M_create_nodes__Q24_STLt11_Deque_base2ZP19stSndDataLoadParamsZQ33UTL3Stdt9Allocator2ZP19stSndDataLoadParamsZ16_type_AsyncQueuePPP19stSndDataLoadParamsT1 = .text:0x800C509C; // type:function size:0x58 scope:global -_M_initialize_map__Q24_STLt11_Deque_base2ZP19stSndDataLoadParamsZQ33UTL3Stdt9Allocator2ZP19stSndDataLoadParamsZ16_type_AsyncQueueUi = .text:0x800C50F4; // type:function size:0xF0 scope:global -_M_destroy_nodes__Q24_STLt11_Deque_base2ZP19stSndDataLoadParamsZQ33UTL3Stdt9Allocator2ZP19stSndDataLoadParamsZ16_type_AsyncQueuePPP19stSndDataLoadParamsT1 = .text:0x800C51E4; // type:function size:0x60 scope:global -_._Q24_STLt11_Deque_base2ZP19stSndDataLoadParamsZQ33UTL3Stdt9Allocator2ZP19stSndDataLoadParamsZ16_type_AsyncQueue = .text:0x800C5244; // type:function size:0x7C scope:global -_M_fill_insert__Q24_STLt6vector2ZPcZQ33UTL3Stdt9Allocator2ZPcZ16_type_EvtSystemsPPcUiRCPc = .text:0x800C52C0; // type:function size:0x270 scope:global -clear__Q24_STLt10_List_base2Z15SampleQueueItemZQ33UTL3Stdt9Allocator2Z15SampleQueueItemZ10_type_list = .text:0x800C5530; // type:function size:0x78 scope:global -find__H2ZPP14cSampleWarpperZP14cSampleWarpper_4_STLX01X01RCX11_X01 = .text:0x800C55A8; // type:function size:0xB0 scope:global -clear__Q24_STLt10_List_base2ZP14cSampleWarpperZQ33UTL3Stdt9Allocator2ZP14cSampleWarpperZ10_type_list = .text:0x800C5658; // type:function size:0x78 scope:global -find__H2ZPP12CarSoundConnZP12CarSoundConn_4_STLX01X01RCX11_X01 = .text:0x800C56D0; // type:function size:0xB0 scope:global -find__H2ZPP13HeliSoundConnZP13HeliSoundConn_4_STLX01X01RCX11_X01 = .text:0x800C5780; // type:function size:0xB0 scope:global -__upper_bound__H4ZPQ26Speech7copPairZQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x800C5830; // type:function size:0x48 scope:global -__lower_bound__H4ZPQ26Speech7copPairZQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x800C5878; // type:function size:0x48 scope:global -__less__H1ZQ26Speech7copPair_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x800C58C0; // type:function size:0xC scope:global -__adjust_heap__H4ZPQ26Speech7copPairZiZQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPair_4_STLX01X11X11X21X31_v = .text:0x800C58CC; // type:function size:0x11C scope:global -make_heap__H2ZPQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPair_4_STLX01X01X11_v = .text:0x800C59E8; // type:function size:0x90 scope:global -pop_heap__H2ZPQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPair_4_STLX01X01X11_v = .text:0x800C5A78; // type:function size:0x60 scope:global -__partial_sort__H3ZPQ26Speech7copPairZQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPair_4_STLX01X01X01PX11X21_v = .text:0x800C5AD8; // type:function size:0xD8 scope:global -partial_sort__H2ZPQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPair_4_STLX01X01X01X11_v = .text:0x800C5BB0; // type:function size:0x30 scope:global -__unguarded_partition__H3ZPQ26Speech7copPairZQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPair_4_STLX01X01X11X21_X01 = .text:0x800C5BE0; // type:function size:0x6C scope:global -__introsort_loop__H4ZPQ26Speech7copPairZQ26Speech7copPairZiZQ24_STLt4less1ZQ26Speech7copPair_4_STLX01X01PX11X21X31_v = .text:0x800C5C4C; // type:function size:0x134 scope:global -__unguarded_linear_insert__H3ZPQ26Speech7copPairZQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPair_4_STLX01X11X21_v = .text:0x800C5D80; // type:function size:0x44 scope:global -__insertion_sort__H2ZPQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPair_4_STLX01X01X11_v = .text:0x800C5DC4; // type:function size:0xC0 scope:global -__unguarded_insertion_sort_aux__H3ZPQ26Speech7copPairZQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPair_4_STLX01X01PX11X21_v = .text:0x800C5E84; // type:function size:0x68 scope:global -__final_insertion_sort__H2ZPQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPair_4_STLX01X01X11_v = .text:0x800C5EEC; // type:function size:0x7C scope:global -sort__H1ZPQ26Speech7copPair_4_STLX01X01_v = .text:0x800C5F68; // type:function size:0xA0 scope:global -__lower_bound__H4ZPCQ26Speech7copPairZQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x800C6008; // type:function size:0x48 scope:global -__upper_bound__H4ZPQ26Speech15SpeechEventPairZQ26Speech15SpeechEventPairZQ24_STLt4less1ZQ26Speech15SpeechEventPairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x800C6050; // type:function size:0x48 scope:global -__lower_bound__H4ZPQ26Speech15SpeechEventPairZQ26Speech15SpeechEventPairZQ24_STLt4less1ZQ26Speech15SpeechEventPairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x800C6098; // type:function size:0x48 scope:global -__upper_bound__H4ZPQ26Speech11HistoryPairZQ26Speech11HistoryPairZQ24_STLt4less1ZQ26Speech11HistoryPairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x800C60E0; // type:function size:0x54 scope:global -__lower_bound__H4ZPQ26Speech11HistoryPairZQ26Speech11HistoryPairZQ24_STLt4less1ZQ26Speech11HistoryPairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x800C6134; // type:function size:0x54 scope:global -smooth__H1Zf_X01X01X01X01_X01 = .text:0x800C6188; // type:function size:0x28 scope:global -smooth__H1Zf_X01X01X01_X01 = .text:0x800C61B0; // type:function size:0x28 scope:global -smooth__H1Zi_X01X01X01_X01 = .text:0x800C61D8; // type:function size:0x28 scope:global -smooth__H1Zi_X01X01X01X01_X01 = .text:0x800C6200; // type:function size:0x28 scope:global -__static_initialization_and_destruction_0 = .text:0x800C6228; // type:function size:0x2444 scope:local -__as__Q36Attrib3Gen10simsurfaceRCQ26Attrib8Instance = .text:0x800C866C; // type:function size:0x30 scope:global -ClassKey__Q36Attrib3Gen10simsurface = .text:0x800C869C; // type:function size:0xC scope:global -Compress__CQ23Sim6PacketPQ23Sim6Packet = .text:0x800C86A8; // type:function size:0x8 scope:global -Decompress__CQ23Sim6PacketPQ23Sim6Packet = .text:0x800C86B0; // type:function size:0x8 scope:global -_._Q23Sim6Packet = .text:0x800C86B8; // type:function size:0x34 scope:global -_._12AudioMemBase = .text:0x800C86EC; // type:function size:0x34 scope:global -_._Q25Sound10AudioEvent = .text:0x800C8720; // type:function size:0x68 scope:global -Update__Q25Sound10AudioEventRC8bVector3N21f = .text:0x800C8788; // type:function size:0x50 scope:global -Pause__Q25Sound14CollisionEventb = .text:0x800C87D8; // type:function size:0x4 scope:global -ClassKey__Q36Attrib3Gen6speech = .text:0x800C87DC; // type:function size:0xC scope:global -_._Q25Sound5Wheel = .text:0x800C87E8; // type:function size:0x54 scope:global -ClassKey__Q36Attrib3Gen11engineaudio = .text:0x800C883C; // type:function size:0xC scope:global -push_back__Q23UTLt6Vector2ZP12EAX_CarStatei16RCP12EAX_CarState = .text:0x800C8848; // type:function size:0x154 scope:global -__12EAX_CarStatePCQ26Attrib10CollectionQ25Sound7ContextUiP10HSIMABLE__ = .text:0x800C899C; // type:function size:0x51C scope:global -push_back__Q23UTLt6Vector2ZP13EAX_HeliStatei16RCP13EAX_HeliState = .text:0x800C8EB8; // type:function size:0x154 scope:global -ClassKey__Q36Attrib3Gen11audiosystem = .text:0x800C900C; // type:function size:0xC scope:global -Clear__18stAssetDescription = .text:0x800C9018; // type:function size:0x80 scope:global -Clear__10stBankSlot = .text:0x800C9098; // type:function size:0x30 scope:global -Clear__19stSndDataLoadParams = .text:0x800C90C8; // type:function size:0x108 scope:global -InitChannel__18EAXS_StreamChanneliiPci9eSTRMTYPE = .text:0x800C91D0; // type:function size:0x8 scope:global -SetQueueReqInitiated__18EAXS_StreamChannelb = .text:0x800C91D8; // type:function size:0x4 scope:global -_._Q33UTL3Stdt5deque2ZP19stSndDataLoadParamsZ16_type_AsyncQueue = .text:0x800C91DC; // type:function size:0xB0 scope:global -__Q33UTL3Stdt5deque2ZP19stSndDataLoadParamsZ16_type_AsyncQueue = .text:0x800C928C; // type:function size:0x60 scope:global -Play__11EAXTunerCarPv = .text:0x800C92EC; // type:function size:0x8 scope:global -_._9EAXCopCar = .text:0x800C92F4; // type:function size:0x4C scope:global -_._8EAXTruck = .text:0x800C9340; // type:function size:0x4C scope:global -_GetKind__16MNotifyMusicFlow = .text:0x800C938C; // type:function size:0x64 scope:global -OnReceive__12CarSoundConnPQ23Sim6Packet = .text:0x800C93F0; // type:function size:0x4 scope:global -OnClose__12CarSoundConn = .text:0x800C93F4; // type:function size:0x40 scope:global -SetAssetsLoaded__12CarSoundConnP12CarSoundConn = .text:0x800C9434; // type:function size:0x24 scope:global -_._Q29SoundConn15Pkt_Car_Service = .text:0x800C9458; // type:function size:0x78 scope:global -ConnectionClass__Q29SoundConn15Pkt_Car_Service = .text:0x800C94D0; // type:function size:0x64 scope:global -Size__Q29SoundConn15Pkt_Car_Service = .text:0x800C9534; // type:function size:0x8 scope:global -Type__Q29SoundConn15Pkt_Car_Service = .text:0x800C953C; // type:function size:0x20 scope:global -_._Q29SoundConn16Pkt_Heli_Service = .text:0x800C955C; // type:function size:0x34 scope:global -ConnectionClass__Q29SoundConn16Pkt_Heli_Service = .text:0x800C9590; // type:function size:0x64 scope:global -Size__Q29SoundConn16Pkt_Heli_Service = .text:0x800C95F4; // type:function size:0x8 scope:global -Type__Q29SoundConn16Pkt_Heli_Service = .text:0x800C95FC; // type:function size:0x20 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z10MMiscSoundZ9EAXCommonZ9EAXCommonPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800C961C; // type:function size:0x88 scope:global -ClassKey__Q36Attrib3Gen15aud_stitch_loop = .text:0x800C96A4; // type:function size:0xC scope:global -push_back__Q23UTLt6Vector2Z15SampleQueueItemi16RC15SampleQueueItem = .text:0x800C96B0; // type:function size:0x158 scope:global -GetStichList__15cSTICH_PlayBack10STICH_TYPE = .text:0x800C9808; // type:function size:0x10 scope:global -push_back__Q23UTLt6Vector2ZP14cSampleWarpperi16RCP14cSampleWarpper = .text:0x800C9818; // type:function size:0x154 scope:global -_GetKind__12MAIEngineRev = .text:0x800C996C; // type:function size:0x64 scope:global -GetPhysTRQ__14SFXCTL_Physics = .text:0x800C99D0; // type:function size:0x8 scope:global -UpdateMixerOutputs__16SFXCTL_AIPhysics = .text:0x800C99D8; // type:function size:0x4 scope:global -_._19SFXCTL_TruckPhysics = .text:0x800C99DC; // type:function size:0x4C scope:global -push_back__Q23UTLt6Vector2ZP12CarSoundConni16RCP12CarSoundConn = .text:0x800C9A28; // type:function size:0x154 scope:global -OnReceive__13HeliSoundConnPQ23Sim6Packet = .text:0x800C9B7C; // type:function size:0x4 scope:global -OnClose__13HeliSoundConn = .text:0x800C9B80; // type:function size:0x40 scope:global -OnStatusCheck__13HeliSoundConn = .text:0x800C9BC0; // type:function size:0x8 scope:global -push_back__Q23UTLt6Vector2ZP13HeliSoundConni16RCP13HeliSoundConn = .text:0x800C9BC8; // type:function size:0x154 scope:global -GetEngRPM__13SFXCTL_Engine = .text:0x800C9D1C; // type:function size:0x8 scope:global -GetSmoothedEngRPM__13SFXCTL_Engine = .text:0x800C9D24; // type:function size:0x8 scope:global -GetEngTorque__13SFXCTL_Engine = .text:0x800C9D2C; // type:function size:0x8 scope:global -GetSmoothedEngTorque__13SFXCTL_Engine = .text:0x800C9D34; // type:function size:0x8 scope:global -_GetKind__23MNotifyVehicleDestroyed = .text:0x800C9D3C; // type:function size:0x64 scope:global -_GetKind__14MCountdownDone = .text:0x800C9DA0; // type:function size:0x64 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z14MCountdownDoneZ13SFXCTL_EngineZ13SFXCTL_EnginePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800C9E04; // type:function size:0x88 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z23MNotifyVehicleDestroyedZ13SFXCTL_EngineZ13SFXCTL_EnginePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800C9E8C; // type:function size:0x88 scope:global -_IHandle__10ICountdown = .text:0x800C9F14; // type:function size:0xC scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z12MAIEngineRevZ14SFXCTL_PhysicsZ14SFXCTL_PhysicsPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800C9F20; // type:function size:0x88 scope:global -_GetKind__15MPursuitBreaker = .text:0x800C9FA8; // type:function size:0x64 scope:global -_._16SFXCTL_GameState = .text:0x800CA00C; // type:function size:0x4C scope:global -_._15SFXCTL_3DColPos = .text:0x800CA058; // type:function size:0x58 scope:global -_._18SFXCTL_3DScrapePos = .text:0x800CA0B0; // type:function size:0x58 scope:global -_._16SFXCTL_3DHeliPos = .text:0x800CA108; // type:function size:0x58 scope:global -__dl__12AudioMemBasePv = .text:0x800CA160; // type:function size:0x2C scope:global -Reset__Q25Sound5Wheel = .text:0x800CA18C; // type:function size:0x7C scope:global -Reset__Q25Sound6Engine = .text:0x800CA208; // type:function size:0x2C scope:global -_._Q43UTL11Collectionst8Listable2Z12EAX_CarStatei10_4List = .text:0x800CA234; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP12EAX_CarStatei16Ui = .text:0x800CA2E8; // type:function size:0x4 scope:global -_._Q43UTL11Collectionst8Listable2Z13EAX_HeliStatei10_4List = .text:0x800CA2EC; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP13EAX_HeliStatei16Ui = .text:0x800CA3A0; // type:function size:0x4 scope:global -Alloc__17CSISCoreAllocatorUiPCcUi = .text:0x800CA3A4; // type:function size:0x28 scope:global -Alloc__17CSISCoreAllocatorUiPCcUiUiUi = .text:0x800CA3CC; // type:function size:0x40 scope:global -Free__17CSISCoreAllocatorPvUi = .text:0x800CA40C; // type:function size:0x28 scope:global -_._Q43UTL11Collectionst11ListableSet4Z14cSampleWarpperi25Z10STICH_TYPEUi3_4List = .text:0x800CA434; // type:function size:0xB4 scope:global -_._Q43UTL11Collectionst8Listable2Z12CarSoundConni10_4List = .text:0x800CA4E8; // type:function size:0xB4 scope:global -SType__Q29SoundConn15Pkt_Car_Service = .text:0x800CA59C; // type:function size:0x58 scope:global -SType__Q29SoundConn16Pkt_Heli_Service = .text:0x800CA5F4; // type:function size:0x58 scope:global -OnGrowRequest__Q23UTLt6Vector2Z15SampleQueueItemi16Ui = .text:0x800CA64C; // type:function size:0x4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP14cSampleWarpperi16Ui = .text:0x800CA650; // type:function size:0x4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP12CarSoundConni16Ui = .text:0x800CA654; // type:function size:0x4 scope:global -_._Q43UTL11Collectionst8Listable2Z13HeliSoundConni10_4List = .text:0x800CA658; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP13HeliSoundConni16Ui = .text:0x800CA70C; // type:function size:0x4 scope:global -_._12PF_Allocator = .text:0x800CA710; // type:function size:0x34 scope:global -Alloc__12PF_AllocatorUiRCQ22EA12TagValuePair = .text:0x800CA744; // type:function size:0x34 scope:global -Free__12PF_AllocatorPvUi = .text:0x800CA778; // type:function size:0x28 scope:global -AddRef__12PF_Allocator = .text:0x800CA7A0; // type:function size:0x14 scope:global -Release__12PF_Allocator = .text:0x800CA7B4; // type:function size:0x5C scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP13HeliSoundConni10i16UiUi = .text:0x800CA810; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP13HeliSoundConni10i16PP13HeliSoundConnUi = .text:0x800CA818; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP13HeliSoundConni10i16Ui = .text:0x800CA81C; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP13HeliSoundConni10i16 = .text:0x800CA824; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP12CarSoundConni10i16UiUi = .text:0x800CA82C; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP12CarSoundConni10i16PP12CarSoundConnUi = .text:0x800CA834; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP12CarSoundConni10i16Ui = .text:0x800CA838; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP12CarSoundConni10i16 = .text:0x800CA840; // type:function size:0x8 scope:global -_._Q23UTLt11FixedVector3Z15SampleQueueItemi43i16 = .text:0x800CA848; // type:function size:0xB4 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3Z15SampleQueueItemi43i16UiUi = .text:0x800CA8FC; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3Z15SampleQueueItemi43i16P15SampleQueueItemUi = .text:0x800CA904; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3Z15SampleQueueItemi43i16Ui = .text:0x800CA908; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3Z15SampleQueueItemi43i16 = .text:0x800CA910; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP14cSampleWarpperi25i16UiUi = .text:0x800CA918; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP14cSampleWarpperi25i16PP14cSampleWarpperUi = .text:0x800CA920; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP14cSampleWarpperi25i16Ui = .text:0x800CA924; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP14cSampleWarpperi25i16 = .text:0x800CA92C; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP13EAX_HeliStatei10i16UiUi = .text:0x800CA934; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP13EAX_HeliStatei10i16PP13EAX_HeliStateUi = .text:0x800CA93C; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP13EAX_HeliStatei10i16Ui = .text:0x800CA940; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP13EAX_HeliStatei10i16 = .text:0x800CA948; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP12EAX_CarStatei10i16UiUi = .text:0x800CA950; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP12EAX_CarStatei10i16PP12EAX_CarStateUi = .text:0x800CA958; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP12EAX_CarStatei10i16Ui = .text:0x800CA95C; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP12EAX_CarStatei10i16 = .text:0x800CA964; // type:function size:0x8 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP12EAX_CarStatei16Ui = .text:0x800CA96C; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP13EAX_HeliStatei16Ui = .text:0x800CA98C; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2Z15SampleQueueItemi16Ui = .text:0x800CA9AC; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP14cSampleWarpperi16Ui = .text:0x800CA9CC; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP12CarSoundConni16Ui = .text:0x800CA9EC; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP13HeliSoundConni16Ui = .text:0x800CAA0C; // type:function size:0x20 scope:global -_._Q23UTLt6Vector2Z15SampleQueueItemi16 = .text:0x800CAA2C; // type:function size:0x34 scope:global -_._Q23UTLt6Vector2ZP14cSampleWarpperi16 = .text:0x800CAA60; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP14cSampleWarpperi25i16 = .text:0x800CAA94; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2ZP12EAX_CarStatei16 = .text:0x800CAB48; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP12EAX_CarStatei10i16 = .text:0x800CAB7C; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2ZP13EAX_HeliStatei16 = .text:0x800CAC30; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP13EAX_HeliStatei10i16 = .text:0x800CAC64; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2ZP12CarSoundConni16 = .text:0x800CAD18; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP12CarSoundConni10i16 = .text:0x800CAD4C; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2ZP13HeliSoundConni16 = .text:0x800CAE00; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP13HeliSoundConni10i16 = .text:0x800CAE34; // type:function size:0xB4 scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP13HeliSoundConni16 = .text:0x800CAEE8; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP12CarSoundConni16 = .text:0x800CAEF4; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2Z15SampleQueueItemi16 = .text:0x800CAF00; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP14cSampleWarpperi16 = .text:0x800CAF0C; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP13EAX_HeliStatei16 = .text:0x800CAF18; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP12EAX_CarStatei16 = .text:0x800CAF24; // type:function size:0xC scope:global -_GLOBAL_.I.DEBUG_360MEM = .text:0x800CAF30; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x800CAF5C; // type:label scope:local -GetStateInfo__C6EAXCar = .text:0x800CAF5C; // type:function size:0xC scope:global -GetStateName__C6EAXCar = .text:0x800CAF68; // type:function size:0xC scope:global -CreateState__6EAXCarUi = .text:0x800CAF74; // type:function size:0x3C scope:global -__6EAXCar = .text:0x800CAFB0; // type:function size:0x178 scope:global -_._6EAXCar = .text:0x800CB128; // type:function size:0x9C scope:global -GetEngineAttributes__6EAXCar = .text:0x800CB1C4; // type:function size:0x1C scope:global -UpgradeIntervals__Fiii = .text:0x800CB1E0; // type:function size:0xBC scope:global -Attach__6EAXCarPv = .text:0x800CB29C; // type:function size:0x320 scope:global -GenerateUpgradedEngine__FP12EAX_CarStatei = .text:0x800CB5BC; // type:function size:0x188 scope:global -Detach__6EAXCar = .text:0x800CB744; // type:function size:0x28 scope:global -ProcessUpdate__6EAXCar = .text:0x800CB76C; // type:function size:0x2C scope:global -UpdateParams__6EAXCarf = .text:0x800CB798; // type:function size:0x64 scope:global -UpdateRotation__6EAXCar = .text:0x800CB7FC; // type:function size:0x10 scope:global -GetVelocityMagnitudeMPH__6EAXCar = .text:0x800CB80C; // type:function size:0x84 scope:global -IsHoodCameraOn__6EAXCar = .text:0x800CB890; // type:function size:0x24 scope:global -IsBumperCameraOn__6EAXCar = .text:0x800CB8B4; // type:function size:0x24 scope:global -UpdatePov__6EAXCar = .text:0x800CB8D8; // type:function size:0xC scope:global -SFXMessage__6EAXCar15eSFXMessageTypeUiUi = .text:0x800CB8E4; // type:function size:0xC scope:global -SetNewSndCamAction__FGQ26Attrib9StringKey8EVIEW_ID = .text:0x800CB8F0; // type:function size:0x4C scope:global -UpdateCameras__9SndCamera = .text:0x800CB93C; // type:function size:0x610 scope:global -GetCam__9SndCamerai = .text:0x800CBF4C; // type:function size:0x30 scope:global -GetTypeInfo__C7SndBase = .text:0x800CBF7C; // type:function size:0xC scope:global -__7SndBase = .text:0x800CBF88; // type:function size:0x64 scope:global -_._7SndBase = .text:0x800CBFEC; // type:function size:0x1C4 scope:global -GetDMixOutput__7SndBasei15DMX_PRESET_TYPE = .text:0x800CC1B0; // type:function size:0xAC scope:global -GetTypeName__C7SndBase = .text:0x800CC25C; // type:function size:0xC scope:global -SetupSFX__7SndBaseP11CSTATE_Base = .text:0x800CC268; // type:function size:0x38 scope:global -LoadAsset__7SndBaseGQ26Attrib9StringKey12eSNDDATAPATH12eSNDDATATYPE15eBANK_SLOT_TYPEb = .text:0x800CC2A0; // type:function size:0xD4 scope:global -LoadAsset__7SndBaseR15stSndAssetQueue15eBANK_SLOT_TYPE = .text:0x800CC374; // type:function size:0x28 scope:global -RegisterSFX__Fv = .text:0x800CC39C; // type:function size:0x2F8 scope:global -RegisterStates__Fv = .text:0x800CC694; // type:function size:0xA0 scope:global -GetStateInfo__C11CSTATE_Base = .text:0x800CC734; // type:function size:0xC scope:global -GetStateName__C11CSTATE_Base = .text:0x800CC740; // type:function size:0xC scope:global -CreateState__11CSTATE_BaseUi = .text:0x800CC74C; // type:function size:0x3C scope:global -__11CSTATE_Base = .text:0x800CC788; // type:function size:0x50 scope:global -Setup__11CSTATE_Basei = .text:0x800CC7D8; // type:function size:0x44 scope:global -_._11CSTATE_Base = .text:0x800CC81C; // type:function size:0x60 scope:global -DisconnectMixMap__11CSTATE_Base = .text:0x800CC87C; // type:function size:0xEC scope:global -SafeConnectOrphanObjects__11CSTATE_Base = .text:0x800CC968; // type:function size:0xB4 scope:global -CreateSFXObjs__11CSTATE_Base = .text:0x800CCA1C; // type:function size:0x54 scope:global -ForceCreateSFXCtrls__11CSTATE_Basei = .text:0x800CCA70; // type:function size:0x54 scope:global -CreateSFXCtrls__11CSTATE_Base = .text:0x800CCAC4; // type:function size:0x150 scope:global -SortSFXCtl__11CSTATE_Base = .text:0x800CCC14; // type:function size:0x128 scope:global -NewSFXObj__11CSTATE_Basei = .text:0x800CCD3C; // type:function size:0x98 scope:global -NewSFXCtrl__11CSTATE_Basei = .text:0x800CCDD4; // type:function size:0xB8 scope:global -HasCtrlBeenAdded__11CSTATE_Basei = .text:0x800CCE8C; // type:function size:0x74 scope:global -LoadData__11CSTATE_Base = .text:0x800CCF00; // type:function size:0x54 scope:global -ProcessUpdate__11CSTATE_Base = .text:0x800CCF54; // type:function size:0x54 scope:global -UpdateParams__11CSTATE_Basef = .text:0x800CCFA8; // type:function size:0x104 scope:global -Destroy__11CSTATE_Base = .text:0x800CD0AC; // type:function size:0xB4 scope:global -GetSFXObject__11CSTATE_Basei = .text:0x800CD160; // type:function size:0x30 scope:global -GetSFXCTLObject__11CSTATE_Basei = .text:0x800CD190; // type:function size:0x2C scope:global -IsDataLoaded__11CSTATE_Base = .text:0x800CD1BC; // type:function size:0x80 scope:global -Attach__11CSTATE_BasePv = .text:0x800CD23C; // type:function size:0x7C scope:global -Detach__11CSTATE_Base = .text:0x800CD2B8; // type:function size:0x244 scope:global -GetStateInfo__C16CSTATE_Collision = .text:0x800CD4FC; // type:function size:0xC scope:global -GetStateName__C16CSTATE_Collision = .text:0x800CD508; // type:function size:0xC scope:global -CreateState__16CSTATE_CollisionUi = .text:0x800CD514; // type:function size:0x5C scope:global -__16CSTATE_Collision = .text:0x800CD570; // type:function size:0x44 scope:global -_._16CSTATE_Collision = .text:0x800CD5B4; // type:function size:0x94 scope:global -Attach__16CSTATE_CollisionPv = .text:0x800CD648; // type:function size:0x2C scope:global -Detach__16CSTATE_Collision = .text:0x800CD674; // type:function size:0x68 scope:global -GetStateInfo__C11CSTATE_Main = .text:0x800CD6DC; // type:function size:0xC scope:global -GetStateName__C11CSTATE_Main = .text:0x800CD6E8; // type:function size:0xC scope:global -CreateState__11CSTATE_MainUi = .text:0x800CD6F4; // type:function size:0x5C scope:global -__11CSTATE_Main = .text:0x800CD750; // type:function size:0x3C scope:global -_._11CSTATE_Main = .text:0x800CD78C; // type:function size:0x58 scope:global -GetStateInfo__C14CSTATE_DriveBy = .text:0x800CD7E4; // type:function size:0xC scope:global -GetStateName__C14CSTATE_DriveBy = .text:0x800CD7F0; // type:function size:0xC scope:global -CreateState__14CSTATE_DriveByUi = .text:0x800CD7FC; // type:function size:0x5C scope:global -__14CSTATE_DriveBy = .text:0x800CD858; // type:function size:0x74 scope:global -_._14CSTATE_DriveBy = .text:0x800CD8CC; // type:function size:0x58 scope:global -Attach__14CSTATE_DriveByPv = .text:0x800CD924; // type:function size:0x60 scope:global -Detach__14CSTATE_DriveBy = .text:0x800CD984; // type:function size:0x30 scope:global -GetStateInfo__C12CSTATE_Music = .text:0x800CD9B4; // type:function size:0xC scope:global -GetStateName__C12CSTATE_Music = .text:0x800CD9C0; // type:function size:0xC scope:global -CreateState__12CSTATE_MusicUi = .text:0x800CD9CC; // type:function size:0x5C scope:global -__12CSTATE_Music = .text:0x800CDA28; // type:function size:0x3C scope:global -_._12CSTATE_Music = .text:0x800CDA64; // type:function size:0x58 scope:global -GetStateInfo__C17CSTATE_Helicopter = .text:0x800CDABC; // type:function size:0xC scope:global -GetStateName__C17CSTATE_Helicopter = .text:0x800CDAC8; // type:function size:0xC scope:global -CreateState__17CSTATE_HelicopterUi = .text:0x800CDAD4; // type:function size:0x5C scope:global -__17CSTATE_Helicopter = .text:0x800CDB30; // type:function size:0x44 scope:global -_._17CSTATE_Helicopter = .text:0x800CDB74; // type:function size:0x58 scope:global -UpdateParams__17CSTATE_Helicopterf = .text:0x800CDBCC; // type:function size:0x114 scope:global -Attach__17CSTATE_HelicopterPv = .text:0x800CDCE0; // type:function size:0x2C scope:global -Detach__17CSTATE_Helicopter = .text:0x800CDD0C; // type:function size:0x48 scope:global -__14CSTATEMGR_Base = .text:0x800CDD54; // type:function size:0x38 scope:global -_._14CSTATEMGR_Base = .text:0x800CDD8C; // type:function size:0x44 scope:global -DisconnectMixMap__14CSTATEMGR_Base = .text:0x800CDDD0; // type:function size:0x50 scope:global -SafeConnectOrphanObjects__14CSTATEMGR_Base = .text:0x800CDE20; // type:function size:0x50 scope:global -Initialize__14CSTATEMGR_Base14eMAINMAPSTATES = .text:0x800CDE70; // type:function size:0x8 scope:global -RegisterSFXCTL__14CSTATEMGR_BasePQ27SndBase8TypeInfo = .text:0x800CDE78; // type:function size:0x4C scope:global -RegisterSTATE__14CSTATEMGR_BasePQ211CSTATE_Base9StateInfo = .text:0x800CDEC4; // type:function size:0x4C scope:global -RegisterSFX__14CSTATEMGR_BasePQ27SndBase8TypeInfo = .text:0x800CDF10; // type:function size:0x4C scope:global -ClearClassLists__14CSTATEMGR_Base = .text:0x800CDF5C; // type:function size:0xC0 scope:global -IsDataLoaded__14CSTATEMGR_Base = .text:0x800CE01C; // type:function size:0x58 scope:global -CreateSFX__14CSTATEMGR_Baseii = .text:0x800CE074; // type:function size:0x164 scope:global -CreateSFXCTL__14CSTATEMGR_Baseii = .text:0x800CE1D8; // type:function size:0x164 scope:global -CreateState__14CSTATEMGR_Baseii = .text:0x800CE33C; // type:function size:0x134 scope:global -EnterWorld__14CSTATEMGR_Base12eSndGameMode = .text:0x800CE470; // type:function size:0xC scope:global -GetFreeState__14CSTATEMGR_BasePv = .text:0x800CE47C; // type:function size:0x2C scope:global -UpdateParams__14CSTATEMGR_Basef = .text:0x800CE4A8; // type:function size:0xA0 scope:global -ProcessUpdate__14CSTATEMGR_Base = .text:0x800CE548; // type:function size:0x60 scope:global -GetStateObj__14CSTATEMGR_Basei = .text:0x800CE5A8; // type:function size:0x2C scope:global -GetStateObj__14CSTATEMGR_BasePv = .text:0x800CE5D4; // type:function size:0x2C scope:global -ExitWorld__14CSTATEMGR_Base = .text:0x800CE600; // type:function size:0x94 scope:global -GetAttachedStateCount__14CSTATEMGR_Base = .text:0x800CE694; // type:function size:0x30 scope:global -__19CSTATEMGR_PlayerCar = .text:0x800CE6C4; // type:function size:0x3C scope:global -_._19CSTATEMGR_PlayerCar = .text:0x800CE700; // type:function size:0x58 scope:global -EnterWorld__19CSTATEMGR_PlayerCar12eSndGameMode = .text:0x800CE758; // type:function size:0x198 scope:global -UpdateParams__19CSTATEMGR_PlayerCarf = .text:0x800CE8F0; // type:function size:0x20 scope:global -GetTypeInfo__C16SFXCTL_3DRearPos = .text:0x800CE910; // type:function size:0xC scope:global -GetTypeName__C16SFXCTL_3DRearPos = .text:0x800CE91C; // type:function size:0xC scope:global -CreateObject__16SFXCTL_3DRearPosUi = .text:0x800CE928; // type:function size:0x78 scope:global -InitSFX__16SFXCTL_3DRearPos = .text:0x800CE9A0; // type:function size:0x80 scope:global -UpdateParams__16SFXCTL_3DRearPosf = .text:0x800CEA20; // type:function size:0x1C8 scope:global -__20CSTATEMGR_TrafficCar = .text:0x800CEBE8; // type:function size:0x50 scope:global -_._20CSTATEMGR_TrafficCar = .text:0x800CEC38; // type:function size:0x58 scope:global -EnterWorld__20CSTATEMGR_TrafficCar12eSndGameMode = .text:0x800CEC90; // type:function size:0x74 scope:global -UpdateParams__20CSTATEMGR_TrafficCarf = .text:0x800CED04; // type:function size:0x44 scope:global -DebugDisplayTrafficConnections__20CSTATEMGR_TrafficCar = .text:0x800CED48; // type:function size:0xAC scope:global -__15CSTATEMGR_AICar = .text:0x800CEDF4; // type:function size:0x50 scope:global -_._15CSTATEMGR_AICar = .text:0x800CEE44; // type:function size:0x58 scope:global -UpdateParams__15CSTATEMGR_AICarf = .text:0x800CEE9C; // type:function size:0x44 scope:global -DebugDisplayAIConnections__15CSTATEMGR_AICar = .text:0x800CEEE0; // type:function size:0x4 scope:global -EnterWorld__15CSTATEMGR_AICar12eSndGameMode = .text:0x800CEEE4; // type:function size:0xCC scope:global -QueueSlots__15CSTATEMGR_AICar = .text:0x800CEFB0; // type:function size:0xD0 scope:global -__19CSTATEMGR_Collision = .text:0x800CF080; // type:function size:0x3C scope:global -_._19CSTATEMGR_Collision = .text:0x800CF0BC; // type:function size:0x58 scope:global -EnterWorld__19CSTATEMGR_Collision12eSndGameMode = .text:0x800CF114; // type:function size:0x74 scope:global -UpdateParams__19CSTATEMGR_Collisionf = .text:0x800CF188; // type:function size:0x20 scope:global -GetCollisionPriority__FPQ25Sound14CollisionEvent = .text:0x800CF1A8; // type:function size:0x1C8 scope:global -GetFreeState__19CSTATEMGR_CollisionPv = .text:0x800CF370; // type:function size:0x1DC scope:global -__14CSTATEMGR_Main = .text:0x800CF54C; // type:function size:0x3C scope:global -_._14CSTATEMGR_Main = .text:0x800CF588; // type:function size:0x58 scope:global -EnterWorld__14CSTATEMGR_Main12eSndGameMode = .text:0x800CF5E0; // type:function size:0x8C scope:global -__17CSTATEMGR_DriveBy = .text:0x800CF66C; // type:function size:0x44 scope:global -_._17CSTATEMGR_DriveBy = .text:0x800CF6B0; // type:function size:0x58 scope:global -TestSmackableForWoosh__FP6IModeli = .text:0x800CF708; // type:function size:0x438 scope:global -TestAllSmackablesForWhoosh__Fv = .text:0x800CFB40; // type:function size:0x1B0 scope:global -UpdateParams__17CSTATEMGR_DriveByf = .text:0x800CFCF0; // type:function size:0x2B4 scope:global -EnterWorld__17CSTATEMGR_DriveBy12eSndGameMode = .text:0x800CFFA4; // type:function size:0x74 scope:global -GetFreeState__17CSTATEMGR_DriveByPv = .text:0x800D0018; // type:function size:0x10C scope:global -__15CSTATEMGR_Music = .text:0x800D0124; // type:function size:0x3C scope:global -_._15CSTATEMGR_Music = .text:0x800D0160; // type:function size:0x58 scope:global -EnterWorld__15CSTATEMGR_Music12eSndGameMode = .text:0x800D01B8; // type:function size:0x80 scope:global -__20CSTATEMGR_Helicopter = .text:0x800D0238; // type:function size:0x3C scope:global -_._20CSTATEMGR_Helicopter = .text:0x800D0274; // type:function size:0x58 scope:global -EnterWorld__20CSTATEMGR_Helicopter12eSndGameMode = .text:0x800D02CC; // type:function size:0x60 scope:global -GetStateInfo__C18CSTATE_WorldObject = .text:0x800D032C; // type:function size:0xC scope:global -GetStateName__C18CSTATE_WorldObject = .text:0x800D0338; // type:function size:0xC scope:global -CreateState__18CSTATE_WorldObjectUi = .text:0x800D0344; // type:function size:0x5C scope:global -AddWorldObject__16CSTATEMGR_Envirofff17WORLDOBJECT_TYPES = .text:0x800D03A0; // type:function size:0xB8 scope:global -RegisterWorldObjects__16CSTATEMGR_Enviro = .text:0x800D0458; // type:function size:0xC0 scope:global -__18CSTATE_WorldObject = .text:0x800D0518; // type:function size:0x44 scope:global -_._18CSTATE_WorldObject = .text:0x800D055C; // type:function size:0x60 scope:global -Attach__18CSTATE_WorldObjectPv = .text:0x800D05BC; // type:function size:0x2C scope:global -Detach__18CSTATE_WorldObject = .text:0x800D05E8; // type:function size:0x28 scope:global -__16CSTATEMGR_Enviro = .text:0x800D0610; // type:function size:0x70 scope:global -_._16CSTATEMGR_Enviro = .text:0x800D0680; // type:function size:0xE4 scope:global -EnterWorld__16CSTATEMGR_Enviro12eSndGameMode = .text:0x800D0764; // type:function size:0x74 scope:global -UpdateParams__16CSTATEMGR_Envirof = .text:0x800D07D8; // type:function size:0x154 scope:global -__15CSTATEMGR_Truck = .text:0x800D092C; // type:function size:0x44 scope:global -_._15CSTATEMGR_Truck = .text:0x800D0970; // type:function size:0x58 scope:global -EnterWorld__15CSTATEMGR_Truck12eSndGameMode = .text:0x800D09C8; // type:function size:0x7C scope:global -__18CSTATEMGR_CarState = .text:0x800D0A44; // type:function size:0x58 scope:global -_._18CSTATEMGR_CarState = .text:0x800D0A9C; // type:function size:0x58 scope:global -UpdateParams__18CSTATEMGR_CarStatef = .text:0x800D0AF4; // type:function size:0x1FC scope:global -sort_engine_priority__FUiUi = .text:0x800D0CF0; // type:function size:0xD8 scope:global -ResetCarBanks__18CSTATEMGR_CarState = .text:0x800D0DC8; // type:function size:0x1C4 scope:global -ResolveCarBanks__18CSTATEMGR_CarState = .text:0x800D0F8C; // type:function size:0x1D54 scope:global -DestroyCar__18CSTATEMGR_CarStateP12EAX_CarState = .text:0x800D2CE0; // type:function size:0x3B4 scope:global -AddMapping__18CSTATEMGR_CarStateUiUi = .text:0x800D3094; // type:function size:0x19C scope:global -__16CSTATEMGR_CopCar = .text:0x800D3230; // type:function size:0x58 scope:global -_._16CSTATEMGR_CopCar = .text:0x800D3288; // type:function size:0x58 scope:global -UpdateParams__16CSTATEMGR_CopCarf = .text:0x800D32E0; // type:function size:0x38 scope:global -EnterWorld__16CSTATEMGR_CopCar12eSndGameMode = .text:0x800D3318; // type:function size:0x8C scope:global -__6CARSFX = .text:0x800D33A4; // type:function size:0x44 scope:global -_._6CARSFX = .text:0x800D33E8; // type:function size:0x58 scope:global -GetTypeInfo__C10SFX_Common = .text:0x800D3440; // type:function size:0xC scope:global -GetTypeName__C10SFX_Common = .text:0x800D344C; // type:function size:0xC scope:global -CreateObject__10SFX_CommonUi = .text:0x800D3458; // type:function size:0x5C scope:global -__10SFX_Common = .text:0x800D34B4; // type:function size:0xE0 scope:global -_._10SFX_Common = .text:0x800D3594; // type:function size:0x128 scope:global -AttachController__10SFX_CommonP6SFXCTL = .text:0x800D36BC; // type:function size:0x4 scope:global -Destroy__10SFX_Common = .text:0x800D36C0; // type:function size:0x4 scope:global -MsgPlayMiscSound__10SFX_CommonRC10MMiscSound = .text:0x800D36C4; // type:function size:0x30C scope:global -UpdateParams__10SFX_Commonf = .text:0x800D39D0; // type:function size:0x4 scope:global -ProcessUpdate__10SFX_Common = .text:0x800D39D4; // type:function size:0x318 scope:global -GetTypeInfo__C12CARSFX_Shift = .text:0x800D3CEC; // type:function size:0xC scope:global -GetTypeName__C12CARSFX_Shift = .text:0x800D3CF8; // type:function size:0xC scope:global -CreateObject__12CARSFX_ShiftUi = .text:0x800D3D04; // type:function size:0x5C scope:global -__12CARSFX_Shift = .text:0x800D3D60; // type:function size:0x68 scope:global -_._12CARSFX_Shift = .text:0x800D3DC8; // type:function size:0x60 scope:global -UpdateMixerOutputs__12CARSFX_Shift = .text:0x800D3E28; // type:function size:0x30 scope:global -SetupSFX__12CARSFX_ShiftP11CSTATE_Base = .text:0x800D3E58; // type:function size:0x48 scope:global -InitSFX__12CARSFX_Shift = .text:0x800D3EA0; // type:function size:0x18 scope:global -Destroy__12CARSFX_Shift = .text:0x800D3EB8; // type:function size:0x15C scope:global -GetController__12CARSFX_Shifti = .text:0x800D4014; // type:function size:0x44 scope:global -AttachController__12CARSFX_ShiftP6SFXCTL = .text:0x800D4058; // type:function size:0x84 scope:global -UpdateParams__12CARSFX_Shiftf = .text:0x800D40DC; // type:function size:0x2A8 scope:global -PlayGearWhine__12CARSFX_Shift = .text:0x800D4384; // type:function size:0x234 scope:global -PlayDisengageSnd__12CARSFX_Shift = .text:0x800D45B8; // type:function size:0x1FC scope:global -PlayEngageSnd__12CARSFX_Shift = .text:0x800D47B4; // type:function size:0x1FC scope:global -PlayAccelSnd__12CARSFX_Shift = .text:0x800D49B0; // type:function size:0x1D8 scope:global -PlayDecelSnd__12CARSFX_Shift = .text:0x800D4B88; // type:function size:0x1D8 scope:global -PlayShiftSnd__12CARSFX_Shift = .text:0x800D4D60; // type:function size:0x2A0 scope:global -PlayBrakesMashed__12CARSFX_Shift = .text:0x800D5000; // type:function size:0x180 scope:global -ProcessUpdate__12CARSFX_Shift = .text:0x800D5180; // type:function size:0x168 scope:global -GetTypeInfo__C12CARSFX_Turbo = .text:0x800D52E8; // type:function size:0xC scope:global -GetTypeName__C12CARSFX_Turbo = .text:0x800D52F4; // type:function size:0xC scope:global -CreateObject__12CARSFX_TurboUi = .text:0x800D5300; // type:function size:0x5C scope:global -__12CARSFX_Turbo = .text:0x800D535C; // type:function size:0x88 scope:global -_._12CARSFX_Turbo = .text:0x800D53E4; // type:function size:0x84 scope:global -GetController__12CARSFX_Turboi = .text:0x800D5468; // type:function size:0x44 scope:global -AttachController__12CARSFX_TurboP6SFXCTL = .text:0x800D54AC; // type:function size:0x84 scope:global -SetupSFX__12CARSFX_TurboP11CSTATE_Base = .text:0x800D5530; // type:function size:0x40 scope:global -InitSFX__12CARSFX_Turbo = .text:0x800D5570; // type:function size:0xE0 scope:global -Detach__12CARSFX_Turbo = .text:0x800D5650; // type:function size:0x48 scope:global -Destroy__12CARSFX_Turbo = .text:0x800D5698; // type:function size:0xA0 scope:global -UpdateParams__12CARSFX_Turbof = .text:0x800D5738; // type:function size:0x1AC scope:global -ProcessUpdate__12CARSFX_Turbo = .text:0x800D58E4; // type:function size:0x2A0 scope:global -PlayBlowoff__12CARSFX_Turboiiiii = .text:0x800D5B84; // type:function size:0x2AC scope:global -IsBlowOffDone__12CARSFX_Turbo = .text:0x800D5E30; // type:function size:0x80 scope:global -UpdateBlowOff__12CARSFX_Turbof = .text:0x800D5EB0; // type:function size:0xC0 scope:global -StopBlowOff__12CARSFX_Turbo = .text:0x800D5F70; // type:function size:0x64 scope:global -PlaySpl__12CARSFX_Turboiiiii = .text:0x800D5FD4; // type:function size:0x1CC scope:global -ResetSpool__12CARSFX_Turbo = .text:0x800D61A0; // type:function size:0x10 scope:global -UpdateSpool__12CARSFX_Turbof = .text:0x800D61B0; // type:function size:0x260 scope:global -GetTypeInfo__C19CARSFX_SparkChatter = .text:0x800D6410; // type:function size:0xC scope:global -GetTypeName__C19CARSFX_SparkChatter = .text:0x800D641C; // type:function size:0xC scope:global -CreateObject__19CARSFX_SparkChatterUi = .text:0x800D6428; // type:function size:0x5C scope:global -__19CARSFX_SparkChatter = .text:0x800D6484; // type:function size:0x80 scope:global -_._19CARSFX_SparkChatter = .text:0x800D6504; // type:function size:0x60 scope:global -GetController__19CARSFX_SparkChatteri = .text:0x800D6564; // type:function size:0x2C scope:global -AttachController__19CARSFX_SparkChatterP6SFXCTL = .text:0x800D6590; // type:function size:0x6C scope:global -SetupSFX__19CARSFX_SparkChatterP11CSTATE_Base = .text:0x800D65FC; // type:function size:0x58 scope:global -InitSFX__19CARSFX_SparkChatter = .text:0x800D6654; // type:function size:0x13C scope:global -SparkChatCreateCallBack__19CARSFX_SparkChatterPQ24Csis5ClassPQ24Csis9ParameterPv = .text:0x800D6790; // type:function size:0x70 scope:global -SparkChatUpdateCallBack__19CARSFX_SparkChatterPQ24Csis9ParameterPv = .text:0x800D6800; // type:function size:0x2C scope:global -SparkChatDestroyCallBack__19CARSFX_SparkChatterPQ24Csis5ClassPv = .text:0x800D682C; // type:function size:0x60 scope:global -UpdateMixerOutputs__19CARSFX_SparkChatter = .text:0x800D688C; // type:function size:0x34 scope:global -ReceiveSparkChatterInputs__19CARSFX_SparkChatterPQ24Csis20CAR_SputOutputStruct = .text:0x800D68C0; // type:function size:0xC scope:global -Destroy__19CARSFX_SparkChatter = .text:0x800D68CC; // type:function size:0x60 scope:global -UpdateParams__19CARSFX_SparkChatterf = .text:0x800D692C; // type:function size:0xC4 scope:global -ProcessUpdate__19CARSFX_SparkChatter = .text:0x800D69F0; // type:function size:0x1E8 scope:global -GetTypeInfo__C16CARSFX_RoadNoise = .text:0x800D6BD8; // type:function size:0xC scope:global -GetTypeName__C16CARSFX_RoadNoise = .text:0x800D6BE4; // type:function size:0xC scope:global -CreateObject__16CARSFX_RoadNoiseUi = .text:0x800D6BF0; // type:function size:0x5C scope:global -__16CARSFX_RoadNoise = .text:0x800D6C4C; // type:function size:0x90 scope:global -_._16CARSFX_RoadNoise = .text:0x800D6CDC; // type:function size:0x60 scope:global -Detach__16CARSFX_RoadNoise = .text:0x800D6D3C; // type:function size:0x34 scope:global -GetController__16CARSFX_RoadNoisei = .text:0x800D6D70; // type:function size:0x44 scope:global -AttachController__16CARSFX_RoadNoiseP6SFXCTL = .text:0x800D6DB4; // type:function size:0x84 scope:global -SetupSFX__16CARSFX_RoadNoiseP11CSTATE_Base = .text:0x800D6E38; // type:function size:0x20 scope:global -InitSFX__16CARSFX_RoadNoise = .text:0x800D6E58; // type:function size:0x1BC scope:global -Destroy__16CARSFX_RoadNoise = .text:0x800D7014; // type:function size:0x124 scope:global -UpdateParams__16CARSFX_RoadNoisef = .text:0x800D7138; // type:function size:0x20 scope:global -ProcessUpdate__16CARSFX_RoadNoise = .text:0x800D7158; // type:function size:0xC40 scope:global -MapLoopToVolume__16CARSFX_RoadNoise16FXROADNOISE_LOOP = .text:0x800D7D98; // type:function size:0x94 scope:global -PlayTransition__16CARSFX_RoadNoise22FXROADNOISE_TRANSITIONi = .text:0x800D7E2C; // type:function size:0x2D0 scope:global -GenerateRoadNoise__16CARSFX_RoadNoise = .text:0x800D80FC; // type:function size:0x4D8 scope:global -Play__16CARSFX_RoadNoise16FXROADNOISE_LOOPi = .text:0x800D85D4; // type:function size:0x188 scope:global -GetTypeInfo__C20SFXCTL_3DLeftWindPos = .text:0x800D875C; // type:function size:0xC scope:global -GetTypeName__C20SFXCTL_3DLeftWindPos = .text:0x800D8768; // type:function size:0xC scope:global -CreateObject__20SFXCTL_3DLeftWindPosUi = .text:0x800D8774; // type:function size:0x78 scope:global -GetTypeInfo__C21SFXCTL_3DRightWindPos = .text:0x800D87EC; // type:function size:0xC scope:global -GetTypeName__C21SFXCTL_3DRightWindPos = .text:0x800D87F8; // type:function size:0xC scope:global -CreateObject__21SFXCTL_3DRightWindPosUi = .text:0x800D8804; // type:function size:0x78 scope:global -GetTypeInfo__C16CARSFX_WindNoise = .text:0x800D887C; // type:function size:0xC scope:global -GetTypeName__C16CARSFX_WindNoise = .text:0x800D8888; // type:function size:0xC scope:global -CreateObject__16CARSFX_WindNoiseUi = .text:0x800D8894; // type:function size:0x5C scope:global -__16CARSFX_WindNoise = .text:0x800D88F0; // type:function size:0x98 scope:global -_._16CARSFX_WindNoise = .text:0x800D8988; // type:function size:0x60 scope:global -Destroy__16CARSFX_WindNoise = .text:0x800D89E8; // type:function size:0x54 scope:global -GetController__16CARSFX_WindNoisei = .text:0x800D8A3C; // type:function size:0x24 scope:global -AttachController__16CARSFX_WindNoiseP6SFXCTL = .text:0x800D8A60; // type:function size:0x68 scope:global -UpdateMasterVolume__16CARSFX_WindNoise = .text:0x800D8AC8; // type:function size:0x8 scope:global -SetupSFX__16CARSFX_WindNoiseP11CSTATE_Base = .text:0x800D8AD0; // type:function size:0x4C scope:global -InitSFX__16CARSFX_WindNoise = .text:0x800D8B1C; // type:function size:0x194 scope:global -ProcessUpdate__16CARSFX_WindNoise = .text:0x800D8CB0; // type:function size:0x38 scope:global -UpdateParams__16CARSFX_WindNoisef = .text:0x800D8CE8; // type:function size:0x31C scope:global -UpdateCSISParams__16CARSFX_WindNoise = .text:0x800D9004; // type:function size:0x208 scope:global -GetTypeInfo__C18CARSFX_WindWeather = .text:0x800D920C; // type:function size:0xC scope:global -GetTypeName__C18CARSFX_WindWeather = .text:0x800D9218; // type:function size:0xC scope:global -CreateObject__18CARSFX_WindWeatherUi = .text:0x800D9224; // type:function size:0x5C scope:global -__18CARSFX_WindWeather = .text:0x800D9280; // type:function size:0x48 scope:global -_._18CARSFX_WindWeather = .text:0x800D92C8; // type:function size:0x60 scope:global -SetupSFX__18CARSFX_WindWeatherP11CSTATE_Base = .text:0x800D9328; // type:function size:0x20 scope:global -InitSFX__18CARSFX_WindWeather = .text:0x800D9348; // type:function size:0x18 scope:global -Destroy__18CARSFX_WindWeather = .text:0x800D9360; // type:function size:0x54 scope:global -UpdateParams__18CARSFX_WindWeatherf = .text:0x800D93B4; // type:function size:0xE0 scope:global -Play__18CARSFX_WindWeather = .text:0x800D9494; // type:function size:0xC4 scope:global -ProcessUpdate__18CARSFX_WindWeather = .text:0x800D9558; // type:function size:0xD4 scope:global -GetTypeInfo__C12CARSFX_Skids = .text:0x800D962C; // type:function size:0xC scope:global -GetTypeName__C12CARSFX_Skids = .text:0x800D9638; // type:function size:0xC scope:global -CreateObject__12CARSFX_SkidsUi = .text:0x800D9644; // type:function size:0x5C scope:global -__12CARSFX_Skids = .text:0x800D96A0; // type:function size:0x4C scope:global -_._12CARSFX_Skids = .text:0x800D96EC; // type:function size:0x60 scope:global -Destroy__12CARSFX_Skids = .text:0x800D974C; // type:function size:0x5C scope:global -GetController__12CARSFX_Skidsi = .text:0x800D97A8; // type:function size:0x44 scope:global -AttachController__12CARSFX_SkidsP6SFXCTL = .text:0x800D97EC; // type:function size:0x124 scope:global -SetupSFX__12CARSFX_SkidsP11CSTATE_Base = .text:0x800D9910; // type:function size:0x20 scope:global -InitSFX__12CARSFX_Skids = .text:0x800D9930; // type:function size:0x1C4 scope:global -Detach__12CARSFX_Skids = .text:0x800D9AF4; // type:function size:0x54 scope:global -UpdateMixerOutputs__12CARSFX_Skids = .text:0x800D9B48; // type:function size:0x140 scope:global -ProcessUpdate__12CARSFX_Skids = .text:0x800D9C88; // type:function size:0x564 scope:global -GetTypeInfo__C22SFXCTL_3DRightWheelPos = .text:0x800DA1EC; // type:function size:0xC scope:global -GetTypeName__C22SFXCTL_3DRightWheelPos = .text:0x800DA1F8; // type:function size:0xC scope:global -CreateObject__22SFXCTL_3DRightWheelPosUi = .text:0x800DA204; // type:function size:0x78 scope:global -GetTypeInfo__C21SFXCTL_3DLeftWheelPos = .text:0x800DA27C; // type:function size:0xC scope:global -GetTypeName__C21SFXCTL_3DLeftWheelPos = .text:0x800DA288; // type:function size:0xC scope:global -CreateObject__21SFXCTL_3DLeftWheelPosUi = .text:0x800DA294; // type:function size:0x78 scope:global -GetTypeInfo__C19CARSFX_TrafficSkids = .text:0x800DA30C; // type:function size:0xC scope:global -GetTypeName__C19CARSFX_TrafficSkids = .text:0x800DA318; // type:function size:0xC scope:global -CreateObject__19CARSFX_TrafficSkidsUi = .text:0x800DA324; // type:function size:0x5C scope:global -__19CARSFX_TrafficSkids = .text:0x800DA380; // type:function size:0x3C scope:global -_._19CARSFX_TrafficSkids = .text:0x800DA3BC; // type:function size:0x58 scope:global -Detach__19CARSFX_TrafficSkids = .text:0x800DA414; // type:function size:0x20 scope:global -GetController__19CARSFX_TrafficSkidsi = .text:0x800DA434; // type:function size:0x14 scope:global -__17CARSFX_EngineBase = .text:0x800DA448; // type:function size:0x60 scope:global -_._17CARSFX_EngineBase = .text:0x800DA4A8; // type:function size:0xA4 scope:global -Detach__17CARSFX_EngineBase = .text:0x800DA54C; // type:function size:0x80 scope:global -UpdateParams__17CARSFX_EngineBasef = .text:0x800DA5CC; // type:function size:0x4 scope:global -SetupSFX__17CARSFX_EngineBaseP11CSTATE_Base = .text:0x800DA5D0; // type:function size:0x20 scope:global -InitSFX__17CARSFX_EngineBase = .text:0x800DA5F0; // type:function size:0x18 scope:global -Destroy__17CARSFX_EngineBase = .text:0x800DA608; // type:function size:0x4 scope:global -ProcessUpdate__17CARSFX_EngineBase = .text:0x800DA60C; // type:function size:0x34 scope:global -InitializeEngine__17CARSFX_EngineBase = .text:0x800DA640; // type:function size:0x4 scope:global -SetEngineParams__17CARSFX_EngineBase = .text:0x800DA644; // type:function size:0x4 scope:global -GetTypeInfo__C17CARSFX_AEMSEngine = .text:0x800DA648; // type:function size:0xC scope:global -GetTypeName__C17CARSFX_AEMSEngine = .text:0x800DA654; // type:function size:0xC scope:global -CreateObject__17CARSFX_AEMSEngineUi = .text:0x800DA660; // type:function size:0x5C scope:global -__17CARSFX_AEMSEngine = .text:0x800DA6BC; // type:function size:0x74 scope:global -_._17CARSFX_AEMSEngine = .text:0x800DA730; // type:function size:0x58 scope:global -UpdateParams__17CARSFX_AEMSEnginef = .text:0x800DA788; // type:function size:0x20 scope:global -SetupSFX__17CARSFX_AEMSEngineP11CSTATE_Base = .text:0x800DA7A8; // type:function size:0x20 scope:global -InitSFX__17CARSFX_AEMSEngine = .text:0x800DA7C8; // type:function size:0x188 scope:global -GetController__17CARSFX_AEMSEnginei = .text:0x800DA950; // type:function size:0x2C scope:global -AttachController__17CARSFX_AEMSEngineP6SFXCTL = .text:0x800DA97C; // type:function size:0x6C scope:global -SetEngineParams__17CARSFX_AEMSEngine = .text:0x800DA9E8; // type:function size:0x2CC scope:global -__18CARSFX_GinsuEngine = .text:0x800DACB4; // type:function size:0x98 scope:global -_._18CARSFX_GinsuEngine = .text:0x800DAD4C; // type:function size:0x124 scope:global -GetController__18CARSFX_GinsuEnginei = .text:0x800DAE70; // type:function size:0x64 scope:global -AttachController__18CARSFX_GinsuEngineP6SFXCTL = .text:0x800DAED4; // type:function size:0xA4 scope:global -SetupSFX__18CARSFX_GinsuEngineP11CSTATE_Base = .text:0x800DAF78; // type:function size:0x20 scope:global -InitSFX__18CARSFX_GinsuEngine = .text:0x800DAF98; // type:function size:0x4C scope:global -Detach__18CARSFX_GinsuEngine = .text:0x800DAFE4; // type:function size:0x90 scope:global -StartupGinsu__18CARSFX_GinsuEngine = .text:0x800DB074; // type:function size:0x19C scope:global -GetGinsuData__FPCc = .text:0x800DB210; // type:function size:0x90 scope:global -InitializeEngine__18CARSFX_GinsuEngine = .text:0x800DB2A0; // type:function size:0x258 scope:global -SetEngineParams__18CARSFX_GinsuEngine = .text:0x800DB4F8; // type:function size:0x47C scope:global -GetTypeInfo__C21CARSFX_SingleGinsuEng = .text:0x800DB974; // type:function size:0xC scope:global -GetTypeName__C21CARSFX_SingleGinsuEng = .text:0x800DB980; // type:function size:0xC scope:global -CreateObject__21CARSFX_SingleGinsuEngUi = .text:0x800DB98C; // type:function size:0x5C scope:global -__21CARSFX_SingleGinsuEng = .text:0x800DB9E8; // type:function size:0x3C scope:global -_._21CARSFX_SingleGinsuEng = .text:0x800DBA24; // type:function size:0x58 scope:global -SetGinsuParams__21CARSFX_SingleGinsuEng = .text:0x800DBA7C; // type:function size:0x1D4 scope:global -GetTypeInfo__C19CARSFX_DualGinsuEng = .text:0x800DBC50; // type:function size:0xC scope:global -GetTypeName__C19CARSFX_DualGinsuEng = .text:0x800DBC5C; // type:function size:0xC scope:global -CreateObject__19CARSFX_DualGinsuEngUi = .text:0x800DBC68; // type:function size:0x5C scope:global -__19CARSFX_DualGinsuEng = .text:0x800DBCC4; // type:function size:0x3C scope:global -_._19CARSFX_DualGinsuEng = .text:0x800DBD00; // type:function size:0x58 scope:global -SetGinsuParams__19CARSFX_DualGinsuEng = .text:0x800DBD58; // type:function size:0x320 scope:global -GetTypeInfo__C18CARSFX_PreColWoosh = .text:0x800DC078; // type:function size:0xC scope:global -GetTypeName__C18CARSFX_PreColWoosh = .text:0x800DC084; // type:function size:0xC scope:global -CreateObject__18CARSFX_PreColWooshUi = .text:0x800DC090; // type:function size:0x5C scope:global -__18CARSFX_PreColWoosh = .text:0x800DC0EC; // type:function size:0x170 scope:global -_._18CARSFX_PreColWoosh = .text:0x800DC25C; // type:function size:0xB8 scope:global -InitSFX__18CARSFX_PreColWoosh = .text:0x800DC314; // type:function size:0x60 scope:global -Destroy__18CARSFX_PreColWoosh = .text:0x800DC374; // type:function size:0x4 scope:global -MsgBarrier__18CARSFX_PreColWooshRC16MAudioReflection = .text:0x800DC378; // type:function size:0x8C scope:global -MsgBarrierHit__18CARSFX_PreColWooshRC16MAudioReflection = .text:0x800DC404; // type:function size:0x40 scope:global -BailOnWoosh__18CARSFX_PreColWoosh = .text:0x800DC444; // type:function size:0x60 scope:global -Detach__18CARSFX_PreColWoosh = .text:0x800DC4A4; // type:function size:0x4 scope:global -UpdateParams__18CARSFX_PreColWooshf = .text:0x800DC4A8; // type:function size:0x2C0 scope:global -ProcessUpdate__18CARSFX_PreColWoosh = .text:0x800DC768; // type:function size:0x10C scope:global -GetTypeInfo__C14CARSFX_Nitrous = .text:0x800DC874; // type:function size:0xC scope:global -GetTypeName__C14CARSFX_Nitrous = .text:0x800DC880; // type:function size:0xC scope:global -CreateObject__14CARSFX_NitrousUi = .text:0x800DC88C; // type:function size:0x5C scope:global -__14CARSFX_Nitrous = .text:0x800DC8E8; // type:function size:0x58 scope:global -_._14CARSFX_Nitrous = .text:0x800DC940; // type:function size:0x6C scope:global -GetController__14CARSFX_Nitrousi = .text:0x800DC9AC; // type:function size:0x2C scope:global -AttachController__14CARSFX_NitrousP6SFXCTL = .text:0x800DC9D8; // type:function size:0x68 scope:global -SetupSFX__14CARSFX_NitrousP11CSTATE_Base = .text:0x800DCA40; // type:function size:0x54 scope:global -InitSFX__14CARSFX_Nitrous = .text:0x800DCA94; // type:function size:0x20 scope:global -Play__14CARSFX_Nitrousiii = .text:0x800DCAB4; // type:function size:0x1E4 scope:global -Stop__14CARSFX_Nitrous = .text:0x800DCC98; // type:function size:0x54 scope:global -PlayPurge__14CARSFX_Nitrous = .text:0x800DCCEC; // type:function size:0x128 scope:global -Destroy__14CARSFX_Nitrous = .text:0x800DCE14; // type:function size:0x80 scope:global -UpdateParams__14CARSFX_Nitrousf = .text:0x800DCE94; // type:function size:0x140 scope:global -ProcessUpdate__14CARSFX_Nitrous = .text:0x800DCFD4; // type:function size:0x2C0 scope:global -GetTypeInfo__C11CARSFX_Rain = .text:0x800DD294; // type:function size:0xC scope:global -GetTypeName__C11CARSFX_Rain = .text:0x800DD2A0; // type:function size:0xC scope:global -CreateObject__11CARSFX_RainUi = .text:0x800DD2AC; // type:function size:0x5C scope:global -__11CARSFX_Rain = .text:0x800DD308; // type:function size:0x60 scope:global -_._11CARSFX_Rain = .text:0x800DD368; // type:function size:0x60 scope:global -GetController__11CARSFX_Raini = .text:0x800DD3C8; // type:function size:0x14 scope:global -AttachController__11CARSFX_RainP6SFXCTL = .text:0x800DD3DC; // type:function size:0x58 scope:global -SetupSFX__11CARSFX_RainP11CSTATE_Base = .text:0x800DD434; // type:function size:0x20 scope:global -InitSFX__11CARSFX_Rain = .text:0x800DD454; // type:function size:0x18 scope:global -Play__11CARSFX_Rain = .text:0x800DD46C; // type:function size:0xF0 scope:global -Stop__11CARSFX_Rain = .text:0x800DD55C; // type:function size:0x58 scope:global -Destroy__11CARSFX_Rain = .text:0x800DD5B4; // type:function size:0x58 scope:global -QueueWeatherStream__11CARSFX_Rain = .text:0x800DD60C; // type:function size:0x294 scope:global -UpdateParams__11CARSFX_Rainf = .text:0x800DD8A0; // type:function size:0x208 scope:global -UpdateMixerOutputs__11CARSFX_Rain = .text:0x800DDAA8; // type:function size:0x38 scope:global -ProcessUpdate__11CARSFX_Rain = .text:0x800DDAE0; // type:function size:0x130 scope:global -GetTypeInfo__C16SFXObj_Collision = .text:0x800DDC10; // type:function size:0xC scope:global -GetTypeName__C16SFXObj_Collision = .text:0x800DDC1C; // type:function size:0xC scope:global -CreateObject__16SFXObj_CollisionUi = .text:0x800DDC28; // type:function size:0x5C scope:global -__16SFXObj_Collision = .text:0x800DDC84; // type:function size:0xD8 scope:global -_._16SFXObj_Collision = .text:0x800DDD5C; // type:function size:0x60 scope:global -SetupSFX__16SFXObj_CollisionP11CSTATE_Base = .text:0x800DDDBC; // type:function size:0x34 scope:global -InitSFX__16SFXObj_Collision = .text:0x800DDDF0; // type:function size:0x518 scope:global -Detach__16SFXObj_Collision = .text:0x800DE308; // type:function size:0x34 scope:global -UpdateParams__16SFXObj_Collisionf = .text:0x800DE33C; // type:function size:0x214 scope:global -ProcessUpdate__16SFXObj_Collision = .text:0x800DE550; // type:function size:0x29C scope:global -GetController__16SFXObj_Collisioni = .text:0x800DE7EC; // type:function size:0x2C scope:global -AttachController__16SFXObj_CollisionP6SFXCTL = .text:0x800DE818; // type:function size:0x6C scope:global -Destroy__16SFXObj_Collision = .text:0x800DE884; // type:function size:0x8C scope:global -GetTypeInfo__C12SFXObj_Woosh = .text:0x800DE910; // type:function size:0xC scope:global -GetTypeName__C12SFXObj_Woosh = .text:0x800DE91C; // type:function size:0xC scope:global -CreateObject__12SFXObj_WooshUi = .text:0x800DE928; // type:function size:0x5C scope:global -GetWooshBlockSizeParams__F14eDRIVE_BY_TYPER17STICH_WHOOSH_TYPERiT2 = .text:0x800DE984; // type:function size:0xF8 scope:global -__12SFXObj_Woosh = .text:0x800DEA7C; // type:function size:0x6C scope:global -_._12SFXObj_Woosh = .text:0x800DEAE8; // type:function size:0x60 scope:global -Detach__12SFXObj_Woosh = .text:0x800DEB48; // type:function size:0x58 scope:global -SetupSFX__12SFXObj_WooshP11CSTATE_Base = .text:0x800DEBA0; // type:function size:0x34 scope:global -InitSFX__12SFXObj_Woosh = .text:0x800DEBD4; // type:function size:0x360 scope:global -UpdateParams__12SFXObj_Wooshf = .text:0x800DEF34; // type:function size:0x8C scope:global -ProcessUpdate__12SFXObj_Woosh = .text:0x800DEFC0; // type:function size:0x168 scope:global -GetController__12SFXObj_Wooshi = .text:0x800DF128; // type:function size:0x14 scope:global -AttachController__12SFXObj_WooshP6SFXCTL = .text:0x800DF13C; // type:function size:0x54 scope:global -Destroy__12SFXObj_Woosh = .text:0x800DF190; // type:function size:0x58 scope:global -GetTypeInfo__C17SFXCTL_3DWooshPos = .text:0x800DF1E8; // type:function size:0xC scope:global -GetTypeName__C17SFXCTL_3DWooshPos = .text:0x800DF1F4; // type:function size:0xC scope:global -CreateObject__17SFXCTL_3DWooshPosUi = .text:0x800DF200; // type:function size:0x78 scope:global -GetTypeInfo__C15SFXObj_Ambience = .text:0x800DF278; // type:function size:0xC scope:global -GetTypeName__C15SFXObj_Ambience = .text:0x800DF284; // type:function size:0xC scope:global -CreateObject__15SFXObj_AmbienceUi = .text:0x800DF290; // type:function size:0x5C scope:global -__15SFXObj_Ambience = .text:0x800DF2EC; // type:function size:0x3C scope:global -_._15SFXObj_Ambience = .text:0x800DF328; // type:function size:0x58 scope:global -InitSFX__15SFXObj_Ambience = .text:0x800DF380; // type:function size:0x4C scope:global -Destroy__15SFXObj_Ambience = .text:0x800DF3CC; // type:function size:0x4 scope:global -UpdateParams__15SFXObj_Ambiencef = .text:0x800DF3D0; // type:function size:0x4 scope:global -GetTypeInfo__C13SFXObj_Speech = .text:0x800DF3D4; // type:function size:0xC scope:global -GetTypeName__C13SFXObj_Speech = .text:0x800DF3E0; // type:function size:0xC scope:global -CreateObject__13SFXObj_SpeechUi = .text:0x800DF3EC; // type:function size:0x5C scope:global -__13SFXObj_Speech = .text:0x800DF448; // type:function size:0x74 scope:global -_._13SFXObj_Speech = .text:0x800DF4BC; // type:function size:0x7C scope:global -InitSFX__13SFXObj_Speech = .text:0x800DF538; // type:function size:0x78 scope:global -Destroy__13SFXObj_Speech = .text:0x800DF5B0; // type:function size:0x4 scope:global -GetController__13SFXObj_Speechi = .text:0x800DF5B4; // type:function size:0x14 scope:global -AttachController__13SFXObj_SpeechP6SFXCTL = .text:0x800DF5C8; // type:function size:0x58 scope:global -UpdateParams__13SFXObj_Speechf = .text:0x800DF620; // type:function size:0x138 scope:global -GetTypeInfo__C22SFXCTL_3DVoiceActorPos = .text:0x800DF758; // type:function size:0xC scope:global -GetTypeName__C22SFXCTL_3DVoiceActorPos = .text:0x800DF764; // type:function size:0xC scope:global -CreateObject__22SFXCTL_3DVoiceActorPosUi = .text:0x800DF770; // type:function size:0x78 scope:global -GetTypeInfo__C12SFXObj_FEHUD = .text:0x800DF7E8; // type:function size:0xC scope:global -GetTypeName__C12SFXObj_FEHUD = .text:0x800DF7F4; // type:function size:0xC scope:global -CreateObject__12SFXObj_FEHUDUi = .text:0x800DF800; // type:function size:0x5C scope:global -__12SFXObj_FEHUD = .text:0x800DF85C; // type:function size:0x3C scope:global -_._12SFXObj_FEHUD = .text:0x800DF898; // type:function size:0x78 scope:global -InitSFX__12SFXObj_FEHUD = .text:0x800DF910; // type:function size:0x4C scope:global -Destroy__12SFXObj_FEHUD = .text:0x800DF95C; // type:function size:0x4 scope:global -UpdateMixerOutputs__12SFXObj_FEHUD = .text:0x800DF960; // type:function size:0x4C scope:global -IsPlayerGoingFastEnough__Ffi = .text:0x800DF9AC; // type:function size:0x50 scope:global -GetTypeInfo__C20CARSFX_TrafficEngine = .text:0x800DF9FC; // type:function size:0xC scope:global -GetTypeName__C20CARSFX_TrafficEngine = .text:0x800DFA08; // type:function size:0xC scope:global -CreateObject__20CARSFX_TrafficEngineUi = .text:0x800DFA14; // type:function size:0x5C scope:global -__20CARSFX_TrafficEngine = .text:0x800DFA70; // type:function size:0x4C scope:global -_._20CARSFX_TrafficEngine = .text:0x800DFABC; // type:function size:0x60 scope:global -GetController__20CARSFX_TrafficEnginei = .text:0x800DFB1C; // type:function size:0x14 scope:global -AttachController__20CARSFX_TrafficEngineP6SFXCTL = .text:0x800DFB30; // type:function size:0x54 scope:global -InitSFX__20CARSFX_TrafficEngine = .text:0x800DFB84; // type:function size:0x58 scope:global -InitEngine__20CARSFX_TrafficEngine = .text:0x800DFBDC; // type:function size:0x178 scope:global -Detach__20CARSFX_TrafficEngine = .text:0x800DFD54; // type:function size:0xB4 scope:global -Destroy__20CARSFX_TrafficEngine = .text:0x800DFE08; // type:function size:0x58 scope:global -ProcessUpdate__20CARSFX_TrafficEngine = .text:0x800DFE60; // type:function size:0x26C scope:global -GetTypeInfo__C19SFXCTL_3DTrafficPos = .text:0x800E00CC; // type:function size:0xC scope:global -GetTypeName__C19SFXCTL_3DTrafficPos = .text:0x800E00D8; // type:function size:0xC scope:global -CreateObject__19SFXCTL_3DTrafficPosUi = .text:0x800E00E4; // type:function size:0x78 scope:global -GetTypeInfo__C18CARSFX_TrafficHorn = .text:0x800E015C; // type:function size:0xC scope:global -GetTypeName__C18CARSFX_TrafficHorn = .text:0x800E0168; // type:function size:0xC scope:global -CreateObject__18CARSFX_TrafficHornUi = .text:0x800E0174; // type:function size:0x5C scope:global -GetTypeInfo__C16CARSFX_TruckHorn = .text:0x800E01D0; // type:function size:0xC scope:global -GetTypeName__C16CARSFX_TruckHorn = .text:0x800E01DC; // type:function size:0xC scope:global -CreateObject__16CARSFX_TruckHornUi = .text:0x800E01E8; // type:function size:0x78 scope:global -__18CARSFX_TrafficHorn = .text:0x800E0260; // type:function size:0xC4 scope:global -_._18CARSFX_TrafficHorn = .text:0x800E0324; // type:function size:0x68 scope:global -Destroy__18CARSFX_TrafficHorn = .text:0x800E038C; // type:function size:0x20 scope:global -Detach__18CARSFX_TrafficHorn = .text:0x800E03AC; // type:function size:0x20 scope:global -UpdateParams__18CARSFX_TrafficHornf = .text:0x800E03CC; // type:function size:0x214 scope:global -ProcessUpdate__18CARSFX_TrafficHorn = .text:0x800E05E0; // type:function size:0x20 scope:global -GetController__18CARSFX_TrafficHorni = .text:0x800E0600; // type:function size:0x14 scope:global -AttachController__18CARSFX_TrafficHornP6SFXCTL = .text:0x800E0614; // type:function size:0x54 scope:global -StartHonkHorn__18CARSFX_TrafficHorn = .text:0x800E0668; // type:function size:0x4 scope:global -StopHonkHorn__18CARSFX_TrafficHorn = .text:0x800E066C; // type:function size:0x38 scope:global -EndCarHonk__18CARSFX_TrafficHorn = .text:0x800E06A4; // type:function size:0x44 scope:global -UpdateMixerOutputs__18CARSFX_TrafficHorn = .text:0x800E06E8; // type:function size:0x28 scope:global -CSIS_BeginHonk__18CARSFX_TrafficHorni = .text:0x800E0710; // type:function size:0x148 scope:global -CSIS_EndHonk__18CARSFX_TrafficHorn = .text:0x800E0858; // type:function size:0x6C scope:global -CSIS_UpdateHOnk__18CARSFX_TrafficHorn = .text:0x800E08C4; // type:function size:0x130 scope:global -IsHonking__18CARSFX_TrafficHorn = .text:0x800E09F4; // type:function size:0x18 scope:global -IsPlayerCarInRange__18CARSFX_TrafficHorni = .text:0x800E0A0C; // type:function size:0x2A0 scope:global -GetTypeInfo__C19CARSFX_TrafficWoosh = .text:0x800E0CAC; // type:function size:0xC scope:global -GetTypeName__C19CARSFX_TrafficWoosh = .text:0x800E0CB8; // type:function size:0xC scope:global -CreateObject__19CARSFX_TrafficWooshUi = .text:0x800E0CC4; // type:function size:0x5C scope:global -__19CARSFX_TrafficWoosh = .text:0x800E0D20; // type:function size:0x50 scope:global -_._19CARSFX_TrafficWoosh = .text:0x800E0D70; // type:function size:0x60 scope:global -Destroy__19CARSFX_TrafficWoosh = .text:0x800E0DD0; // type:function size:0x58 scope:global -Detach__19CARSFX_TrafficWoosh = .text:0x800E0E28; // type:function size:0x58 scope:global -UpdateParams__19CARSFX_TrafficWooshf = .text:0x800E0E80; // type:function size:0x228 scope:global -GetWooshSample__19CARSFX_TrafficWoosh = .text:0x800E10A8; // type:function size:0x4C scope:global -IsPlayerCarInRadius__19CARSFX_TrafficWoosh = .text:0x800E10F4; // type:function size:0x44 scope:global -ProcessUpdate__19CARSFX_TrafficWoosh = .text:0x800E1138; // type:function size:0x10C scope:global -GetPlayerSpeedRelativeToUs__19CARSFX_TrafficWoosh = .text:0x800E1244; // type:function size:0x10C scope:global -GetTypeInfo__C16CARSFX_BottomOut = .text:0x800E1350; // type:function size:0xC scope:global -GetTypeName__C16CARSFX_BottomOut = .text:0x800E135C; // type:function size:0xC scope:global -CreateObject__16CARSFX_BottomOutUi = .text:0x800E1368; // type:function size:0x5C scope:global -__16CARSFX_BottomOut = .text:0x800E13C4; // type:function size:0x9C scope:global -_._16CARSFX_BottomOut = .text:0x800E1460; // type:function size:0x60 scope:global -InitSFX__16CARSFX_BottomOut = .text:0x800E14C0; // type:function size:0x18 scope:global -Destroy__16CARSFX_BottomOut = .text:0x800E14D8; // type:function size:0xCC scope:global -LandJumpPlay__16CARSFX_BottomOutfb = .text:0x800E15A4; // type:function size:0x190 scope:global -BottomOutPlay__16CARSFX_BottomOutUi = .text:0x800E1734; // type:function size:0x108 scope:global -Detach__16CARSFX_BottomOut = .text:0x800E183C; // type:function size:0xCC scope:global -UpdateParams__16CARSFX_BottomOutf = .text:0x800E1908; // type:function size:0x6E0 scope:global -ProcessUpdate__16CARSFX_BottomOut = .text:0x800E1FE8; // type:function size:0x2A0 scope:global -GetTypeInfo__C13SFXObj_Reverb = .text:0x800E2288; // type:function size:0xC scope:global -GetTypeName__C13SFXObj_Reverb = .text:0x800E2294; // type:function size:0xC scope:global -CreateObject__13SFXObj_ReverbUi = .text:0x800E22A0; // type:function size:0x5C scope:global -__13SFXObj_Reverb = .text:0x800E22FC; // type:function size:0x60 scope:global -_._13SFXObj_Reverb = .text:0x800E235C; // type:function size:0x60 scope:global -GetController__13SFXObj_Reverbi = .text:0x800E23BC; // type:function size:0x14 scope:global -AttachController__13SFXObj_ReverbP6SFXCTL = .text:0x800E23D0; // type:function size:0x58 scope:global -SetupLoadData__13SFXObj_Reverb = .text:0x800E2428; // type:function size:0x88 scope:global -SetupSFX__13SFXObj_ReverbP11CSTATE_Base = .text:0x800E24B0; // type:function size:0x4C scope:global -InitSFX__13SFXObj_Reverb = .text:0x800E24FC; // type:function size:0x174 scope:global -UpdateParams__13SFXObj_Reverbf = .text:0x800E2670; // type:function size:0x94 scope:global -ProcessUpdate__13SFXObj_Reverb = .text:0x800E2704; // type:function size:0xA8 scope:global -Destroy__13SFXObj_Reverb = .text:0x800E27AC; // type:function size:0xA8 scope:global -GetTypeInfo__C12CARSFX_Siren = .text:0x800E2854; // type:function size:0xC scope:global -GetTypeName__C12CARSFX_Siren = .text:0x800E2860; // type:function size:0xC scope:global -CreateObject__12CARSFX_SirenUi = .text:0x800E286C; // type:function size:0x5C scope:global -__12CARSFX_Siren = .text:0x800E28C8; // type:function size:0x48 scope:global -_._12CARSFX_Siren = .text:0x800E2910; // type:function size:0x60 scope:global -Detach__12CARSFX_Siren = .text:0x800E2970; // type:function size:0x34 scope:global -Destroy__12CARSFX_Siren = .text:0x800E29A4; // type:function size:0x54 scope:global -GetController__12CARSFX_Sireni = .text:0x800E29F8; // type:function size:0x8 scope:global -AttachController__12CARSFX_SirenP6SFXCTL = .text:0x800E2A00; // type:function size:0x4 scope:global -SetupSFX__12CARSFX_SirenP11CSTATE_Base = .text:0x800E2A04; // type:function size:0x20 scope:global -InitSFX__12CARSFX_Siren = .text:0x800E2A24; // type:function size:0xA0 scope:global -UpdateParams__12CARSFX_Sirenf = .text:0x800E2AC4; // type:function size:0xC8 scope:global -ProcessUpdate__12CARSFX_Siren = .text:0x800E2B8C; // type:function size:0x2C0 scope:global -UpdateSirenState__12CARSFX_Sirenf = .text:0x800E2E4C; // type:function size:0x84 scope:global -GetTypeInfo__C17SFXObj_Pathfinder = .text:0x800E2ED0; // type:function size:0xC scope:global -GetTypeName__C17SFXObj_Pathfinder = .text:0x800E2EDC; // type:function size:0xC scope:global -CreateObject__17SFXObj_PathfinderUi = .text:0x800E2EE8; // type:function size:0x5C scope:global -__17SFXObj_Pathfinder = .text:0x800E2F44; // type:function size:0x54 scope:global -GetController__17SFXObj_Pathfinderi = .text:0x800E2F98; // type:function size:0x14 scope:global -AttachController__17SFXObj_PathfinderP6SFXCTL = .text:0x800E2FAC; // type:function size:0x54 scope:global -GetTypeInfo__C15SFXObj_PFEATrax = .text:0x800E3000; // type:function size:0xC scope:global -GetTypeName__C15SFXObj_PFEATrax = .text:0x800E300C; // type:function size:0xC scope:global -CreateObject__15SFXObj_PFEATraxUi = .text:0x800E3018; // type:function size:0x5C scope:global -__15SFXObj_PFEATrax = .text:0x800E3074; // type:function size:0x4F8 scope:global -_._15SFXObj_PFEATrax = .text:0x800E356C; // type:function size:0xF0 scope:global -RestartRace__15SFXObj_PFEATrax = .text:0x800E365C; // type:function size:0x64 scope:global -SendPathEvent__15SFXObj_PFEATrax = .text:0x800E36C0; // type:function size:0x150 scope:global -SwapInteractiveProjects__15SFXObj_PFEATrax = .text:0x800E3810; // type:function size:0x10 scope:global -StartLicensedMusic__15SFXObj_PFEATraxUi = .text:0x800E3820; // type:function size:0x318 scope:global -StartAmbience__15SFXObj_PFEATraxUi = .text:0x800E3B38; // type:function size:0x138 scope:global -StartInteractiveMusic__15SFXObj_PFEATraxUi = .text:0x800E3C70; // type:function size:0x168 scope:global -Stop__15SFXObj_PFEATrax = .text:0x800E3DD8; // type:function size:0x60 scope:global -Destroy__15SFXObj_PFEATrax = .text:0x800E3E38; // type:function size:0xE0 scope:global -InitializeEATrax__Fb = .text:0x800E3F18; // type:function size:0x158 scope:global -MessageInitSongsList__15SFXObj_PFEATraxRC18MControlPathfinder = .text:0x800E4070; // type:function size:0x50 scope:global -GenEATraxState__15SFXObj_PFEATrax = .text:0x800E40C0; // type:function size:0x4C scope:global -GenMusicType__15SFXObj_PFEATrax = .text:0x800E410C; // type:function size:0xF4 scope:global -TestToPursuit__15SFXObj_PFEATrax = .text:0x800E4200; // type:function size:0xC8 scope:global -TestToLicensed__15SFXObj_PFEATraxb = .text:0x800E42C8; // type:function size:0x36C scope:global -TestToAmbience__15SFXObj_PFEATrax = .text:0x800E4634; // type:function size:0x2E0 scope:global -UpdateInGame__15SFXObj_PFEATraxf = .text:0x800E4914; // type:function size:0x314 scope:global -UpdateAmbience__15SFXObj_PFEATraxf = .text:0x800E4C28; // type:function size:0x140 scope:global -UpdatePursuitBreaker__15SFXObj_PFEATraxf = .text:0x800E4D68; // type:function size:0x1E4 scope:global -UpdateParams__15SFXObj_PFEATraxf = .text:0x800E4F4C; // type:function size:0x36C scope:global -ProcessUpdate__15SFXObj_PFEATrax = .text:0x800E52B8; // type:function size:0x298 scope:global -SetupSFX__15SFXObj_PFEATraxP11CSTATE_Base = .text:0x800E5550; // type:function size:0xF0 scope:global -SetupLoadData__15SFXObj_PFEATrax = .text:0x800E5640; // type:function size:0xE8 scope:global -InitSFX__15SFXObj_PFEATrax = .text:0x800E5728; // type:function size:0x194 scope:global -GenNextMusicTrackID__15SFXObj_PFEATrax = .text:0x800E58BC; // type:function size:0x2E8 scope:global -NotifyChyron__15SFXObj_PFEATrax = .text:0x800E5BA4; // type:function size:0x8C scope:global -MessageStartPathfinder__15SFXObj_PFEATraxRC18MControlPathfinder = .text:0x800E5C30; // type:function size:0x18C scope:global -MessageSendPathEvent__15SFXObj_PFEATraxRC18MControlPathfinder = .text:0x800E5DBC; // type:function size:0x118 scope:global -MessageSendPathControl__15SFXObj_PFEATraxRC18MControlPathfinder = .text:0x800E5ED4; // type:function size:0x70 scope:global -MessagePartUpdate__15SFXObj_PFEATraxRC18MControlPathfinder = .text:0x800E5F44; // type:function size:0x38 scope:global -MessagePerpBusted__15SFXObj_PFEATraxRC11MPerpBusted = .text:0x800E5F7C; // type:function size:0x4 scope:global -MessageInteractiveDone__15SFXObj_PFEATraxRC18MControlPathfinder = .text:0x800E5F80; // type:function size:0x10 scope:global -MessageSwapInteractive__15SFXObj_PFEATraxRC18MControlPathfinder = .text:0x800E5F90; // type:function size:0x3C scope:global -GetTypeInfo__C17SFXObj_Helicopter = .text:0x800E5FCC; // type:function size:0xC scope:global -GetTypeName__C17SFXObj_Helicopter = .text:0x800E5FD8; // type:function size:0xC scope:global -CreateObject__17SFXObj_HelicopterUi = .text:0x800E5FE4; // type:function size:0x5C scope:global -__17SFXObj_Helicopter = .text:0x800E6040; // type:function size:0x7C scope:global -_._17SFXObj_Helicopter = .text:0x800E60BC; // type:function size:0x60 scope:global -SetupSFX__17SFXObj_HelicopterP11CSTATE_Base = .text:0x800E611C; // type:function size:0x20 scope:global -InitSFX__17SFXObj_Helicopter = .text:0x800E613C; // type:function size:0x264 scope:global -Detach__17SFXObj_Helicopter = .text:0x800E63A0; // type:function size:0x34 scope:global -GetController__17SFXObj_Helicopteri = .text:0x800E63D4; // type:function size:0x14 scope:global -AttachController__17SFXObj_HelicopterP6SFXCTL = .text:0x800E63E8; // type:function size:0x54 scope:global -Destroy__17SFXObj_Helicopter = .text:0x800E643C; // type:function size:0x54 scope:global -UpdateParams__17SFXObj_Helicopterf = .text:0x800E6490; // type:function size:0x4 scope:global -ProcessUpdate__17SFXObj_Helicopter = .text:0x800E6494; // type:function size:0x278 scope:global -GetTypeInfo__C16SFXObj_NISStream = .text:0x800E670C; // type:function size:0xC scope:global -GetTypeName__C16SFXObj_NISStream = .text:0x800E6718; // type:function size:0xC scope:global -CreateObject__16SFXObj_NISStreamUi = .text:0x800E6724; // type:function size:0x5C scope:global -GenerateNISAnimHashMap__Fv = .text:0x800E6780; // type:function size:0x7F8 scope:global -GetCsisEventIndex__FUi = .text:0x800E6F78; // type:function size:0x34 scope:global -__16SFXObj_NISStream = .text:0x800E6FAC; // type:function size:0x68 scope:global -_._16SFXObj_NISStream = .text:0x800E7014; // type:function size:0x78 scope:global -InitSFX__16SFXObj_NISStream = .text:0x800E708C; // type:function size:0x84 scope:global -QueueNISStream__16SFXObj_NISStreamUiiPFUii_vb = .text:0x800E7110; // type:function size:0x38 scope:global -StopStream__16SFXObj_NISStream = .text:0x800E7148; // type:function size:0x28 scope:global -QueueNISStream__16SFXObj_NISStreamUiibT3 = .text:0x800E7170; // type:function size:0x614 scope:global -NISActivityDone__16SFXObj_NISStream = .text:0x800E7784; // type:function size:0x74 scope:global -StartNIS__16SFXObj_NISStream = .text:0x800E77F8; // type:function size:0x6C scope:global -UpdateParams__16SFXObj_NISStreamf = .text:0x800E7864; // type:function size:0x16C scope:global -PlayNISStream__16SFXObj_NISStream = .text:0x800E79D0; // type:function size:0x60 scope:global -Destroy__16SFXObj_NISStream = .text:0x800E7A30; // type:function size:0x4 scope:global -GetTypeInfo__C17SFXObj_MomentStrm = .text:0x800E7A34; // type:function size:0xC scope:global -GetTypeName__C17SFXObj_MomentStrm = .text:0x800E7A40; // type:function size:0xC scope:global -CreateObject__17SFXObj_MomentStrmUi = .text:0x800E7A4C; // type:function size:0x5C scope:global -__17SFXObj_MomentStrm = .text:0x800E7AA8; // type:function size:0x1DC scope:global -_._17SFXObj_MomentStrm = .text:0x800E7C84; // type:function size:0x188 scope:global -SetupSFX__17SFXObj_MomentStrmP11CSTATE_Base = .text:0x800E7E0C; // type:function size:0x20 scope:global -InitSFX__17SFXObj_MomentStrm = .text:0x800E7E2C; // type:function size:0x364 scope:global -GetController__17SFXObj_MomentStrmi = .text:0x800E8190; // type:function size:0x14 scope:global -AttachController__17SFXObj_MomentStrmP6SFXCTL = .text:0x800E81A4; // type:function size:0x58 scope:global -Destroy__17SFXObj_MomentStrm = .text:0x800E81FC; // type:function size:0x4 scope:global -ShouldStreamPlay__17SFXObj_MomentStrmUibf = .text:0x800E8200; // type:function size:0x284 scope:global -CommitStreamReq__17SFXObj_MomentStrmGQ25UMath7Vector4Ui = .text:0x800E8484; // type:function size:0x20C scope:global -ReceiveMoment__17SFXObj_MomentStrmRC15MGamePlayMoment = .text:0x800E8690; // type:function size:0x1C4 scope:global -CBPlayMomentStream__17SFXObj_MomentStrm = .text:0x800E8854; // type:function size:0xF8 scope:global -UpdateParams__17SFXObj_MomentStrmf = .text:0x800E894C; // type:function size:0x370 scope:global -ProcessUpdate__17SFXObj_MomentStrm = .text:0x800E8CBC; // type:function size:0x10 scope:global -ReceivePursuitBreaker__17SFXObj_MomentStrmRC15MPursuitBreaker = .text:0x800E8CCC; // type:function size:0x368 scope:global -GetTypeInfo__C18SFXCTL_3DMomentPos = .text:0x800E9034; // type:function size:0xC scope:global -GetTypeName__C18SFXCTL_3DMomentPos = .text:0x800E9040; // type:function size:0xC scope:global -CreateObject__18SFXCTL_3DMomentPosUi = .text:0x800E904C; // type:function size:0x78 scope:global -GetTypeInfo__C20SFXCTL_3DFountainPos = .text:0x800E90C4; // type:function size:0xC scope:global -GetTypeName__C20SFXCTL_3DFountainPos = .text:0x800E90D0; // type:function size:0xC scope:global -CreateObject__20SFXCTL_3DFountainPosUi = .text:0x800E90DC; // type:function size:0x78 scope:global -GetTypeInfo__C18SFXObj_WorldObject = .text:0x800E9154; // type:function size:0xC scope:global -GetTypeName__C18SFXObj_WorldObject = .text:0x800E9160; // type:function size:0xC scope:global -CreateObject__18SFXObj_WorldObjectUi = .text:0x800E916C; // type:function size:0x5C scope:global -__18SFXObj_WorldObject = .text:0x800E91C8; // type:function size:0x70 scope:global -_._18SFXObj_WorldObject = .text:0x800E9238; // type:function size:0x58 scope:global -Destroy__18SFXObj_WorldObject = .text:0x800E9290; // type:function size:0x54 scope:global -ProcessUpdate__18SFXObj_WorldObject = .text:0x800E92E4; // type:function size:0x180 scope:global -GetController__18SFXObj_WorldObjecti = .text:0x800E9464; // type:function size:0x14 scope:global -AttachController__18SFXObj_WorldObjectP6SFXCTL = .text:0x800E9478; // type:function size:0x54 scope:global -InitSFX__18SFXObj_WorldObject = .text:0x800E94CC; // type:function size:0x19C scope:global -Detach__18SFXObj_WorldObject = .text:0x800E9668; // type:function size:0x94 scope:global -GetTypeInfo__C14SFXObj_TruckFX = .text:0x800E96FC; // type:function size:0xC scope:global -GetTypeName__C14SFXObj_TruckFX = .text:0x800E9708; // type:function size:0xC scope:global -CreateObject__14SFXObj_TruckFXUi = .text:0x800E9714; // type:function size:0x5C scope:global -__14SFXObj_TruckFX = .text:0x800E9770; // type:function size:0x58 scope:global -_._14SFXObj_TruckFX = .text:0x800E97C8; // type:function size:0x60 scope:global -Destroy__14SFXObj_TruckFX = .text:0x800E9828; // type:function size:0x54 scope:global -SetupSFX__14SFXObj_TruckFXP11CSTATE_Base = .text:0x800E987C; // type:function size:0x20 scope:global -UpdateParams__14SFXObj_TruckFXf = .text:0x800E989C; // type:function size:0x4E8 scope:global -ProcessUpdate__14SFXObj_TruckFX = .text:0x800E9D84; // type:function size:0x150 scope:global -GetController__14SFXObj_TruckFXi = .text:0x800E9ED4; // type:function size:0x8 scope:global -AttachController__14SFXObj_TruckFXP6SFXCTL = .text:0x800E9EDC; // type:function size:0x4 scope:global -InitSFX__14SFXObj_TruckFX = .text:0x800E9EE0; // type:function size:0x28 scope:global -Detach__14SFXObj_TruckFX = .text:0x800E9F08; // type:function size:0x34 scope:global -GetTypeInfo__C17CARSFX_TruckWoosh = .text:0x800E9F3C; // type:function size:0xC scope:global -GetTypeName__C17CARSFX_TruckWoosh = .text:0x800E9F48; // type:function size:0xC scope:global -CreateObject__17CARSFX_TruckWooshUi = .text:0x800E9F54; // type:function size:0x5C scope:global -__17CARSFX_TruckWoosh = .text:0x800E9FB0; // type:function size:0x9C scope:global -_._17CARSFX_TruckWoosh = .text:0x800EA04C; // type:function size:0x68 scope:global -GetController__17CARSFX_TruckWooshi = .text:0x800EA0B4; // type:function size:0x14 scope:global -AttachController__17CARSFX_TruckWooshP6SFXCTL = .text:0x800EA0C8; // type:function size:0x58 scope:global -InitSFX__17CARSFX_TruckWoosh = .text:0x800EA120; // type:function size:0x7C scope:global -IsPlayerCarInRadius__17CARSFX_TruckWoosh = .text:0x800EA19C; // type:function size:0x3C scope:global -UpdateParams__17CARSFX_TruckWooshf = .text:0x800EA1D8; // type:function size:0xBC scope:global -GetWooshSample__17CARSFX_TruckWoosh = .text:0x800EA294; // type:function size:0xEC scope:global -GetTypeInfo__C19SFXCTL_3DTrailerPos = .text:0x800EA380; // type:function size:0xC scope:global -GetTypeName__C19SFXCTL_3DTrailerPos = .text:0x800EA38C; // type:function size:0xC scope:global -CreateObject__19SFXCTL_3DTrailerPosUi = .text:0x800EA398; // type:function size:0x78 scope:global -SetupLoadData__14CARSFX_Nitrous = .text:0x800EA410; // type:function size:0xBC scope:global -SetupLoadData__12CARSFX_Shift = .text:0x800EA4CC; // type:function size:0x1BC scope:global -SetupLoadData__19CARSFX_SparkChatter = .text:0x800EA688; // type:function size:0x94 scope:global -SetupLoadData__12CARSFX_Turbo = .text:0x800EA71C; // type:function size:0xBC scope:global -SetupLoadData__12CARSFX_Skids = .text:0x800EA7D8; // type:function size:0xB8 scope:global -SetupLoadData__17CARSFX_AEMSEngine = .text:0x800EA890; // type:function size:0xF4 scope:global -SetupLoadData__21CARSFX_SingleGinsuEng = .text:0x800EA984; // type:function size:0xC4 scope:global -SetupLoadData__19CARSFX_DualGinsuEng = .text:0x800EAA48; // type:function size:0x10C scope:global -SetupLoadData__10SFX_Common = .text:0x800EAB54; // type:function size:0x10C scope:global -swapbytes__FPUc = .text:0x800EAC60; // type:function size:0x24 scope:local -AdjustEndienness__FP15GinsuDataLayout = .text:0x800EAC84; // type:function size:0x98 scope:local -DecodeBlock__14GinsuSynthDatai = .text:0x800EAD1C; // type:function size:0x120 scope:global -__14GinsuSynthData = .text:0x800EAE3C; // type:function size:0x38 scope:global -BindToData__14GinsuSynthDataPv = .text:0x800EAE74; // type:function size:0x154 scope:global -FrequencyToSample__C14GinsuSynthDataf = .text:0x800EAFC8; // type:function size:0x1B0 scope:global -CycleToSample__C14GinsuSynthDataf = .text:0x800EB178; // type:function size:0x190 scope:global -CyclePeriod__C14GinsuSynthDataf = .text:0x800EB308; // type:function size:0x25C scope:global -SampleToCycle__C14GinsuSynthDatai = .text:0x800EB564; // type:function size:0x36C scope:global -GetSamples__14GinsuSynthDataiiPs = .text:0x800EB8D0; // type:function size:0xF4 scope:global -PacketReleaseCallback__14GinsuSynthesisPvT1 = .text:0x800EB9C4; // type:function size:0x2C scope:global -HandlePacketRelease__14GinsuSynthesisPs = .text:0x800EB9F0; // type:function size:0x790 scope:global -GetMemblockSize__14GinsuSynthesis = .text:0x800EC180; // type:function size:0x28 scope:global -__14GinsuSynthesisPvi = .text:0x800EC1A8; // type:function size:0xA4 scope:global -_._14GinsuSynthesis = .text:0x800EC24C; // type:function size:0x68 scope:global -SetSynthData__14GinsuSynthesisR14GinsuSynthData = .text:0x800EC2B4; // type:function size:0x1C4 scope:global -StartSynthesis__14GinsuSynthesisf = .text:0x800EC478; // type:function size:0x174 scope:global -UpdateFrequency__14GinsuSynthesisff = .text:0x800EC5EC; // type:function size:0xDC scope:global -GetCurrentPitch__14GinsuSynthesis = .text:0x800EC6C8; // type:function size:0x8C scope:global -StopSynthesis__14GinsuSynthesis = .text:0x800EC754; // type:function size:0x4C scope:global -__9NFSMixMap = .text:0x800EC7A0; // type:function size:0x30 scope:global -_._9NFSMixMap = .text:0x800EC7D0; // type:function size:0x44 scope:global -DestroyMainMixMap__9NFSMixMap = .text:0x800EC814; // type:function size:0x1A4 scope:global -AssignSFXCallbacks__9NFSMixMapPFi_PiPFiPi_vPFiPi_bPFi_iPFv_v = .text:0x800EC9B8; // type:function size:0x3C scope:global -SETSFXID__9NFSMixMapiPi = .text:0x800EC9F4; // type:function size:0x34 scope:global -InitMixMap__9NFSMixMapPiP9NFSMixMap = .text:0x800ECA28; // type:function size:0x68 scope:global -ResetMapData__9NFSMixMap = .text:0x800ECA90; // type:function size:0x160 scope:global -SetupStateRefCount__9NFSMixMap = .text:0x800ECBF0; // type:function size:0x90 scope:global -PreProcessMixMap__9NFSMixMap = .text:0x800ECC80; // type:function size:0x574 scope:global -AllocateMixerMemory__9NFSMixMap = .text:0x800ED1F4; // type:function size:0x378 scope:global -GetNextInputBlock__9NFSMixMapb = .text:0x800ED56C; // type:function size:0x48 scope:global -GetNextEvtMixCtlProc__9NFSMixMapb = .text:0x800ED5B4; // type:function size:0x28 scope:global -GetNextEvtMixCtlShared__9NFSMixMapb = .text:0x800ED5DC; // type:function size:0x28 scope:global -GetNextEvtMixCtlUnique__9NFSMixMapb = .text:0x800ED604; // type:function size:0x48 scope:global -GetNext3DMixCtlProc__9NFSMixMapb = .text:0x800ED64C; // type:function size:0x28 scope:global -GetNext3DMixCtlShared__9NFSMixMapb = .text:0x800ED674; // type:function size:0x28 scope:global -GetNext3DMixCtlUnique__9NFSMixMapb = .text:0x800ED69C; // type:function size:0x28 scope:global -GetNextMasterMixProc__9NFSMixMapb = .text:0x800ED6C4; // type:function size:0x28 scope:global -GetNextMasterMixShared__9NFSMixMapb = .text:0x800ED6EC; // type:function size:0x28 scope:global -GetNextMasterMixUnique__9NFSMixMapb = .text:0x800ED714; // type:function size:0x28 scope:global -GetNextSubMixProc__9NFSMixMapb = .text:0x800ED73C; // type:function size:0x28 scope:global -GetNextSubMixUnique__9NFSMixMapb = .text:0x800ED764; // type:function size:0x28 scope:global -GetNextSubMixShared__9NFSMixMapb = .text:0x800ED78C; // type:function size:0x28 scope:global -GetNextMapState__9NFSMixMapb = .text:0x800ED7B4; // type:function size:0x24 scope:global -GetCurveDataPtr__9NFSMixMapP14stMixCtlParams = .text:0x800ED7D8; // type:function size:0xD0 scope:global -AddScaleIDs__9NFSMixMapP14stMixCtlParamsi = .text:0x800ED8A8; // type:function size:0x114 scope:global -AddScaleIDs__9NFSMixMapP14stMixEvtParamsi = .text:0x800ED9BC; // type:function size:0x120 scope:global -GetProcessMixCtlPtr__9NFSMixMapb = .text:0x800EDADC; // type:function size:0x28 scope:global -AssignMixCtlDataPtrs__9NFSMixMapP12stMixCtlProcP14stMixCtlParamsii = .text:0x800EDB04; // type:function size:0xAC scope:global -GetMasterChannelOutputArrayPtr__9NFSMixMapi = .text:0x800EDBB0; // type:function size:0x20 scope:global -GetMasterChannelInputPtr__9NFSMixMapi = .text:0x800EDBD0; // type:function size:0x1C scope:global -GetSubChannelInputPtr__9NFSMixMapi = .text:0x800EDBEC; // type:function size:0x1C scope:global -GetMapStateCopies__9NFSMixMapi = .text:0x800EDC08; // type:function size:0x28 scope:global -CreateMainMapState__9NFSMixMap14eMAINMAPSTATESii = .text:0x800EDC30; // type:function size:0xDC scope:global -AllocateInputArrays__9NFSMixMap = .text:0x800EDD0C; // type:function size:0x48C scope:global -GetObjectPtr__9NFSMixMapibT2 = .text:0x800EE198; // type:function size:0x1EC scope:global -ConnectMixMap__9NFSMixMap = .text:0x800EE384; // type:function size:0x1BC scope:global -SetupStateProcArrays__9NFSMixMap = .text:0x800EE540; // type:function size:0xA8 scope:global -InitMainMapStates__9NFSMixMap = .text:0x800EE5E8; // type:function size:0x34 scope:global -ProcessMixMap__9NFSMixMapf10eCamStates = .text:0x800EE61C; // type:function size:0x194 scope:global -UpdateSubChannels__9NFSMixMap = .text:0x800EE7B0; // type:function size:0xCC scope:global -UpdateMasterChannels__9NFSMixMap = .text:0x800EE87C; // type:function size:0xD8 scope:global -MixMasterChannels__9NFSMixMap = .text:0x800EE954; // type:function size:0x31C scope:global -UpdateEvtMixCtls__9NFSMixMap = .text:0x800EEC70; // type:function size:0x18C scope:global -UpdateLFOEvent__9NFSMixMapP15stEvtMixCtlProc = .text:0x800EEDFC; // type:function size:0x4 scope:global -UpdateATREvent__9NFSMixMapP15stEvtMixCtlProc = .text:0x800EEE00; // type:function size:0x3F8 scope:global -UpdateASREvent__9NFSMixMapP15stEvtMixCtlProc = .text:0x800EF1F8; // type:function size:0x22C scope:global -UpdateAREvent__9NFSMixMapP15stEvtMixCtlProc = .text:0x800EF424; // type:function size:0x1E4 scope:global -Update3DMixCtls__9NFSMixMap = .text:0x800EF608; // type:function size:0x860 scope:global -__14NFSMixMapState = .text:0x800EFE68; // type:function size:0x14 scope:global -Initialize__14NFSMixMapStateP9NFSMixMapiii = .text:0x800EFE7C; // type:function size:0x64 scope:global -GetStateRefCount__14NFSMixMapState = .text:0x800EFEE0; // type:function size:0xC scope:global -_._14NFSMixMapState = .text:0x800EFEEC; // type:function size:0x34 scope:global -GetMixCtlProc__14NFSMixMapStateii = .text:0x800EFF20; // type:function size:0x38 scope:global -Get3DMixCtlProc__14NFSMixMapStateii = .text:0x800EFF58; // type:function size:0x38 scope:global -GetEvtMixCtlProc__14NFSMixMapStateii = .text:0x800EFF90; // type:function size:0x38 scope:global -GetSubMixChProc__14NFSMixMapStateii = .text:0x800EFFC8; // type:function size:0x38 scope:global -GetMasterMixChProc__14NFSMixMapStateii = .text:0x800F0000; // type:function size:0x38 scope:global -CreateMixCtls__14NFSMixMapState = .text:0x800F0038; // type:function size:0x1C0 scope:global -CreateSubMixChannels__14NFSMixMapState = .text:0x800F01F8; // type:function size:0x150 scope:global -CreateMasterMixChannels__14NFSMixMapState = .text:0x800F0348; // type:function size:0x22C scope:global -CreateEvtMixCtls__14NFSMixMapState = .text:0x800F0574; // type:function size:0x1F8 scope:global -Create3DMixCtls__14NFSMixMapState = .text:0x800F076C; // type:function size:0x1B0 scope:global -InitializeSubChannels__14NFSMixMapState = .text:0x800F091C; // type:function size:0x170 scope:global -InitializeMasterChannels__14NFSMixMapState = .text:0x800F0A8C; // type:function size:0x228 scope:global -GetMixMapProc__14NFSMixMapStatei = .text:0x800F0CB4; // type:function size:0x10 scope:global -SetFirstStateInst__14NFSMixMapStateP14NFSMixMapState = .text:0x800F0CC4; // type:function size:0x8 scope:global -AddMixState__14NFSMixMapStateiP14NFSMixMapState = .text:0x800F0CCC; // type:function size:0xA4 scope:global -__12NFSMixMaster = .text:0x800F0D70; // type:function size:0x58 scope:global -_._12NFSMixMaster = .text:0x800F0DC8; // type:function size:0x8C scope:global -DestroyMainMainMap__12NFSMixMaster = .text:0x800F0E54; // type:function size:0x98 scope:global -CreateMainMainMap__12NFSMixMaster9eRACETYPE = .text:0x800F0EEC; // type:function size:0x60 scope:global -LoadMixMapFile__12NFSMixMaster7eMMTYPEPc = .text:0x800F0F4C; // type:function size:0xE8 scope:global -LoadDataCallback__12NFSMixMasterii = .text:0x800F1034; // type:function size:0x4 scope:global -DestroyMap__12NFSMixMaster = .text:0x800F1038; // type:function size:0x24 scope:global -InitMixMap__12NFSMixMasteri = .text:0x800F105C; // type:function size:0x16C scope:global -AssignSFXCallbacks__12NFSMixMasterPFi_PiPFiPi_vPFiPi_bPFi_iPFv_v = .text:0x800F11C8; // type:function size:0x20 scope:global -ProcessMixMap__12NFSMixMasterf10eCamStates = .text:0x800F11E8; // type:function size:0x44 scope:global -GetCentsFromPitchMult__11NFSMixShapef = .text:0x800F122C; // type:function size:0xD4 scope:global -GetIntPitchMultFromCents__11NFSMixShapei = .text:0x800F1300; // type:function size:0x5C scope:global -GetPitchMultFromCents__11NFSMixShapei = .text:0x800F135C; // type:function size:0xF0 scope:global -GetQ15FromHundredthsdB__11NFSMixShapei = .text:0x800F144C; // type:function size:0x7C scope:global -GetdBFromQ15__11NFSMixShapei = .text:0x800F14C8; // type:function size:0x104 scope:global -GetFloatFromHundredthsdB__11NFSMixShapei = .text:0x800F15CC; // type:function size:0x50 scope:global -GetCurveOutput__11NFSMixShape11eMIXTABLEIDib = .text:0x800F161C; // type:function size:0x248 scope:global -GetAzimShapeOutput__11NFSMixShape11eMIXTABLEIDT1Pii = .text:0x800F1864; // type:function size:0x7C scope:global -reserve__Q24_STLt6vector2ZP8WTriggerZQ33UTL3Stdt9Allocator2ZP8WTriggerZ12_type_vectorUi = .text:0x800F18E0; // type:function size:0x11C scope:global -clear__Q24_STLt10_List_base2ZP11WorldObjectZQ33UTL3Stdt9Allocator2ZP11WorldObjectZ10_type_list = .text:0x800F19FC; // type:function size:0x78 scope:global -__adjust_heap__H4ZPUiZiZUiZPFUiUi_b_4_STLX01X11X11X21X31_v = .text:0x800F1A74; // type:function size:0x118 scope:global -make_heap__H2ZPUiZPFUiUi_b_4_STLX01X01X11_v = .text:0x800F1B8C; // type:function size:0x78 scope:global -pop_heap__H2ZPUiZPFUiUi_b_4_STLX01X01X11_v = .text:0x800F1C04; // type:function size:0x40 scope:global -__partial_sort__H3ZPUiZUiZPFUiUi_b_4_STLX01X01X01PX11X21_v = .text:0x800F1C44; // type:function size:0xBC scope:global -partial_sort__H2ZPUiZPFUiUi_b_4_STLX01X01X01X11_v = .text:0x800F1D00; // type:function size:0x28 scope:global -__unguarded_partition__H3ZPUiZUiZPFUiUi_b_4_STLX01X01X11X21_X01 = .text:0x800F1D28; // type:function size:0x9C scope:global -__introsort_loop__H4ZPUiZUiZiZPFUiUi_b_4_STLX01X01PX11X21X31_v = .text:0x800F1DC4; // type:function size:0x158 scope:global -__unguarded_linear_insert__H3ZPUiZUiZPFUiUi_b_4_STLX01X11X21_v = .text:0x800F1F1C; // type:function size:0x60 scope:global -__insertion_sort__H2ZPUiZPFUiUi_b_4_STLX01X01X11_v = .text:0x800F1F7C; // type:function size:0xA4 scope:global -__unguarded_insertion_sort_aux__H3ZPUiZUiZPFUiUi_b_4_STLX01X01PX11X21_v = .text:0x800F2020; // type:function size:0x54 scope:global -__final_insertion_sort__H2ZPUiZPFUiUi_b_4_STLX01X01X11_v = .text:0x800F2074; // type:function size:0x6C scope:global -sort__H2ZPUiZPFUiUi_b_4_STLX01X01X11_v = .text:0x800F20E0; // type:function size:0x84 scope:global -find__H2ZP17EngineMappingPairZ17EngineMappingPair_4_STLX01X01RCX11_X01 = .text:0x800F2164; // type:function size:0x1A0 scope:global -__static_initialization_and_destruction_0 = .text:0x800F2304; // type:function size:0xBE0 scope:local -ClassKey__Q36Attrib3Gen11audioimpact = .text:0x800F2EE4; // type:function size:0xC scope:global -ClassKey__Q36Attrib3Gen8pvehicle = .text:0x800F2EF0; // type:function size:0xC scope:global -_GetKind__16MAudioReflection = .text:0x800F2EFC; // type:function size:0x64 scope:global -PreLoadAssets__11CSTATE_Base = .text:0x800F2F60; // type:function size:0x4 scope:global -GetController__7SndBasei = .text:0x800F2F64; // type:function size:0x8 scope:global -AttachController__7SndBaseP6SFXCTL = .text:0x800F2F6C; // type:function size:0x4 scope:global -SetupLoadData__7SndBase = .text:0x800F2F70; // type:function size:0x34 scope:global -InitSFX__7SndBase = .text:0x800F2FA4; // type:function size:0x18 scope:global -Destroy__7SndBase = .text:0x800F2FBC; // type:function size:0x4 scope:global -UpdateParams__7SndBasef = .text:0x800F2FC0; // type:function size:0x4 scope:global -ProcessUpdate__7SndBase = .text:0x800F2FC4; // type:function size:0x4 scope:global -Detach__7SndBase = .text:0x800F2FC8; // type:function size:0x4 scope:global -UpdateMixerOutputs__7SndBase = .text:0x800F2FCC; // type:function size:0x4 scope:global -_._8SFX_Base = .text:0x800F2FD0; // type:function size:0x58 scope:global -Debug__17CARSFX_EngineBase = .text:0x800F3028; // type:function size:0x4 scope:global -ClassKey__Q36Attrib3Gen8turbosfx = .text:0x800F302C; // type:function size:0xC scope:global -PreLoadAssets__6EAXCar = .text:0x800F3038; // type:function size:0x4 scope:global -ProcessSoundSphere__6EAXCarUiiP8bVector3f = .text:0x800F303C; // type:function size:0x4 scope:global -UpdateCarPhysics__6EAXCar = .text:0x800F3040; // type:function size:0x4 scope:global -StartHonkHorn__6EAXCar = .text:0x800F3044; // type:function size:0x4 scope:global -StopHonkHorn__6EAXCar = .text:0x800F3048; // type:function size:0x4 scope:global -IsHonking__6EAXCar = .text:0x800F304C; // type:function size:0x8 scope:global -GetEngineUpgradeLevel__6EAXCar = .text:0x800F3054; // type:function size:0x8 scope:global -_._14ISndAttachable = .text:0x800F305C; // type:function size:0x140 scope:global -__14ISndAttachable = .text:0x800F319C; // type:function size:0x170 scope:global -_._21SFXCTL_3DLeftWheelPos = .text:0x800F330C; // type:function size:0x58 scope:global -_._22SFXCTL_3DRightWheelPos = .text:0x800F3364; // type:function size:0x58 scope:global -_._21SFXCTL_3DRightWindPos = .text:0x800F33BC; // type:function size:0x58 scope:global -_._20SFXCTL_3DLeftWindPos = .text:0x800F3414; // type:function size:0x58 scope:global -_._19SFXCTL_3DTrafficPos = .text:0x800F346C; // type:function size:0x4C scope:global -_._16CARSFX_TruckHorn = .text:0x800F34B8; // type:function size:0x4C scope:global -GetController__16CARSFX_TruckHorni = .text:0x800F3504; // type:function size:0x8 scope:global -_._20SFXCTL_3DFountainPos = .text:0x800F350C; // type:function size:0x58 scope:global -_._17SFXCTL_3DWooshPos = .text:0x800F3564; // type:function size:0x58 scope:global -GetController__16SFXObj_NISStreami = .text:0x800F35BC; // type:function size:0x8 scope:global -AttachController__16SFXObj_NISStreamP6SFXCTL = .text:0x800F35C4; // type:function size:0x4 scope:global -ProcessUpdate__16SFXObj_NISStream = .text:0x800F35C8; // type:function size:0x4 scope:global -_._18SFXCTL_3DMomentPos = .text:0x800F35CC; // type:function size:0x4C scope:global -Clear__Q213SFXObj_Reverb15ReverbStructure = .text:0x800F3618; // type:function size:0x10 scope:global -_._19SFXCTL_3DTrailerPos = .text:0x800F3628; // type:function size:0x4C scope:global -GetController__15SFXObj_Ambiencei = .text:0x800F3674; // type:function size:0x8 scope:global -AttachController__15SFXObj_AmbienceP6SFXCTL = .text:0x800F367C; // type:function size:0x4 scope:global -ProcessUpdate__15SFXObj_Ambience = .text:0x800F3680; // type:function size:0x4 scope:global -InitSFX__10SFX_Common = .text:0x800F3684; // type:function size:0x4 scope:global -ProcessUpdate__13SFXObj_Speech = .text:0x800F3688; // type:function size:0x4 scope:global -_._22SFXCTL_3DVoiceActorPos = .text:0x800F368C; // type:function size:0x4C scope:global -GetController__12SFXObj_FEHUDi = .text:0x800F36D8; // type:function size:0x8 scope:global -AttachController__12SFXObj_FEHUDP6SFXCTL = .text:0x800F36E0; // type:function size:0x4 scope:global -_._17SFXObj_Pathfinder = .text:0x800F36E4; // type:function size:0x58 scope:global -push_back__Q23UTLt6Vector2ZP14ISndAttachablei16RCP14ISndAttachable = .text:0x800F373C; // type:function size:0x154 scope:global -GetPosition__11WorldObject = .text:0x800F3890; // type:function size:0x8 scope:global -GetType__11WorldObject = .text:0x800F3898; // type:function size:0x8 scope:global -_._16SFXCTL_3DRearPos = .text:0x800F38A0; // type:function size:0x58 scope:global -_._Q23UTLt11FixedVector3ZUii8i16 = .text:0x800F38F8; // type:function size:0xB4 scope:global -push_back__Q23UTLt6Vector2ZUii16RCUi = .text:0x800F39AC; // type:function size:0x154 scope:global -push_back__Q23UTLt6Vector2ZQ218CSTATEMGR_CarState14EngToCarStructi16RCQ218CSTATEMGR_CarState14EngToCarStruct = .text:0x800F3B00; // type:function size:0x158 scope:global -push_back__Q23UTLt6Vector2Z17EngineMappingPairi16RC17EngineMappingPair = .text:0x800F3C58; // type:function size:0x158 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z10MMiscSoundZ10SFX_CommonZ10SFX_CommonPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800F3DB0; // type:function size:0x88 scope:global -_._14GinsuSynthData = .text:0x800F3E38; // type:function size:0x44 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z16MAudioReflectionZ18CARSFX_PreColWooshZ18CARSFX_PreColWooshPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800F3E7C; // type:function size:0x88 scope:global -ClassKey__Q36Attrib3Gen15aud_moment_strm = .text:0x800F3F04; // type:function size:0xC scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z18MControlPathfinderZ15SFXObj_PFEATraxZ15SFXObj_PFEATraxPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800F3F10; // type:function size:0x88 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z11MPerpBustedZ15SFXObj_PFEATraxZ15SFXObj_PFEATraxPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800F3F98; // type:function size:0x88 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z15MGamePlayMomentZ17SFXObj_MomentStrmZ17SFXObj_MomentStrmPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800F4020; // type:function size:0x88 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z15MPursuitBreakerZ17SFXObj_MomentStrmZ17SFXObj_MomentStrmPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800F40A8; // type:function size:0x88 scope:global -_._Q23UTLt6Vector2ZQ217SFXObj_MomentStrm18stMomentDecriptioni16 = .text:0x800F4130; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZQ217SFXObj_MomentStrm18stMomentDecriptioni64i16 = .text:0x800F4164; // type:function size:0xB4 scope:global -GetGrowSize__CQ23UTLt6Vector2ZQ217SFXObj_MomentStrm18stMomentDecriptioni16Ui = .text:0x800F4218; // type:function size:0x20 scope:global -OnGrowRequest__Q23UTLt6Vector2ZQ217SFXObj_MomentStrm18stMomentDecriptioni16Ui = .text:0x800F4238; // type:function size:0x4 scope:global -push_back__Q23UTLt6Vector2ZQ217SFXObj_MomentStrm18stMomentDecriptioni16RCQ217SFXObj_MomentStrm18stMomentDecription = .text:0x800F423C; // type:function size:0x170 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZUii8i16UiUi = .text:0x800F43AC; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZUii8i16PUiUi = .text:0x800F43B4; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZUii8i16Ui = .text:0x800F43B8; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZUii8i16 = .text:0x800F43C0; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZQ217SFXObj_MomentStrm18stMomentDecriptioni64i16UiUi = .text:0x800F43C8; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZQ217SFXObj_MomentStrm18stMomentDecriptioni64i16PQ217SFXObj_MomentStrm18stMomentDecriptionUi = .text:0x800F43D0; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZQ217SFXObj_MomentStrm18stMomentDecriptioni64i16Ui = .text:0x800F43D4; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZQ217SFXObj_MomentStrm18stMomentDecriptioni64i16 = .text:0x800F43DC; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZQ217SFXObj_MomentStrm18stMomentDecriptioni16 = .text:0x800F43E4; // type:function size:0xC scope:global -_._Q43UTL11Collectionst8Listable2Z14ISndAttachablei15_4List = .text:0x800F43F0; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP14ISndAttachablei16Ui = .text:0x800F44A4; // type:function size:0x4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZQ218CSTATEMGR_CarState14EngToCarStructi16Ui = .text:0x800F44A8; // type:function size:0x4 scope:global -OnGrowRequest__Q23UTLt6Vector2Z17EngineMappingPairi16Ui = .text:0x800F44AC; // type:function size:0x4 scope:global -_._Q23UTLt11FixedVector3ZQ218CSTATEMGR_CarState14EngToCarStructi24i16 = .text:0x800F44B0; // type:function size:0xB4 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZQ218CSTATEMGR_CarState14EngToCarStructi24i16UiUi = .text:0x800F4564; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZQ218CSTATEMGR_CarState14EngToCarStructi24i16PQ218CSTATEMGR_CarState14EngToCarStructUi = .text:0x800F456C; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZQ218CSTATEMGR_CarState14EngToCarStructi24i16Ui = .text:0x800F4570; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZQ218CSTATEMGR_CarState14EngToCarStructi24i16 = .text:0x800F4578; // type:function size:0x8 scope:global -_._Q23UTLt11FixedVector3Z17EngineMappingPairi24i16 = .text:0x800F4580; // type:function size:0xB4 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3Z17EngineMappingPairi24i16UiUi = .text:0x800F4634; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3Z17EngineMappingPairi24i16P17EngineMappingPairUi = .text:0x800F463C; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3Z17EngineMappingPairi24i16Ui = .text:0x800F4640; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3Z17EngineMappingPairi24i16 = .text:0x800F4648; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP14ISndAttachablei15i16UiUi = .text:0x800F4650; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP14ISndAttachablei15i16PP14ISndAttachableUi = .text:0x800F4658; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP14ISndAttachablei15i16Ui = .text:0x800F465C; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP14ISndAttachablei15i16 = .text:0x800F4664; // type:function size:0x8 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP14ISndAttachablei16Ui = .text:0x800F466C; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2ZQ218CSTATEMGR_CarState14EngToCarStructi16Ui = .text:0x800F468C; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2Z17EngineMappingPairi16Ui = .text:0x800F46AC; // type:function size:0x20 scope:global -_._Q23UTLt6Vector2ZP14ISndAttachablei16 = .text:0x800F46CC; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP14ISndAttachablei15i16 = .text:0x800F4700; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2Z17EngineMappingPairi16 = .text:0x800F47B4; // type:function size:0x34 scope:global -_._Q23UTLt6Vector2ZQ218CSTATEMGR_CarState14EngToCarStructi16 = .text:0x800F47E8; // type:function size:0x34 scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZQ218CSTATEMGR_CarState14EngToCarStructi16 = .text:0x800F481C; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2Z17EngineMappingPairi16 = .text:0x800F4828; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP14ISndAttachablei16 = .text:0x800F4834; // type:function size:0xC scope:global -_GLOBAL_.I._6EAXCar.g_ShiftInfo = .text:0x800F4840; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x800F486C; // type:label scope:local -eInitEngine__Fv = .text:0x800F486C; // type:function size:0x78 scope:global -ePreDisplay__Fv = .text:0x800F48E4; // type:function size:0xF0 scope:global -ePostDisplay__Fv = .text:0x800F49D4; // type:function size:0x38 scope:global -eNotifyTextureLoading__FP11TexturePackP11TextureInfob = .text:0x800F4A0C; // type:function size:0x3C scope:global -eFixUpTables__Fv = .text:0x800F4A48; // type:function size:0x6C scope:global -eAllocateFrameMallocBuffers__FUi = .text:0x800F4AB4; // type:function size:0x74 scope:global -eSwapFrameMallocBuffers__Fv = .text:0x800F4B28; // type:function size:0xD0 scope:global -SetupSceneryCullInfo__FP5eViewR15SceneryCullInfoi = .text:0x800F4BF8; // type:function size:0xD0 scope:global -eSwapDynamicFrameMemory__Fv = .text:0x800F4CC8; // type:function size:0x4 scope:global -eGetOtherEcstacyTexture__FUi = .text:0x800F4CCC; // type:function size:0x54 scope:global -eIsWidescreen__Fv = .text:0x800F4D20; // type:function size:0x8 scope:global -InitStreamingPacks__Fv = .text:0x800F4D28; // type:function size:0x60 scope:global -PrintStreamingPackMemoryWarning__FPCcii = .text:0x800F4D88; // type:function size:0x28 scope:global -ScanHashTableKey32__FUiPviii = .text:0x800F4DB0; // type:function size:0xB0 scope:global -ScanHashTableKey8__FUcPviii = .text:0x800F4E60; // type:function size:0xB0 scope:global -GetHeaderMemoryEntries__14eStreamingPackPPvi = .text:0x800F4F10; // type:function size:0x40 scope:global -__17eStreamPackLoaderiPFP6bChunkP15eStreamingEntryP14eStreamingPack_vT2PFP37eStreamingPackHeaderLoadingInfoPhase1_vPFP37eStreamingPackHeaderLoadingInfoPhase2_vPFP14eStreamingPack_v = .text:0x800F4F50; // type:function size:0x40 scope:global -GetMemoryEntries__17eStreamPackLoaderPUiiPPvi = .text:0x800F4F90; // type:function size:0x8C scope:global -GetLoadedStreamingPack__17eStreamPackLoaderPCc = .text:0x800F501C; // type:function size:0x88 scope:global -GetLoadedStreamingPack__17eStreamPackLoaderUi = .text:0x800F50A4; // type:function size:0x8C scope:global -GetStreamingEntry__17eStreamPackLoaderUiP14eStreamingPack = .text:0x800F5130; // type:function size:0x54 scope:global -GetStreamingEntry__17eStreamPackLoaderUi = .text:0x800F5184; // type:function size:0x60 scope:global -GetAlignedChunkDataPtr__17eStreamPackLoaderPUc = .text:0x800F51E4; // type:function size:0x14 scope:global -GetStreamPackLoadingTable__17eStreamPackLoader = .text:0x800F51F8; // type:function size:0x4C scope:global -InternalLoadedStreamingEntryCallback__17eStreamPackLoaderPviT1 = .text:0x800F5244; // type:function size:0x1F0 scope:global -InternalLoadStreamingEntry__17eStreamPackLoaderP23eStreamingPackLoadTableP14eStreamingPackP15eStreamingEntry = .text:0x800F5434; // type:function size:0x1B8 scope:global -eStreamPackLoaderSortLoadEntries__FP24eStreamPackLoadEntryInfoT0 = .text:0x800F55EC; // type:function size:0x40 scope:global -LoadStreamingEntry__17eStreamPackLoaderPUiiPFPv_vPvi = .text:0x800F562C; // type:function size:0x1C4 scope:global -InternalUnloadStreamingEntry__17eStreamPackLoaderP14eStreamingPackP15eStreamingEntry = .text:0x800F57F0; // type:function size:0xA0 scope:global -UnloadStreamingEntry__17eStreamPackLoaderUiP14eStreamingPack = .text:0x800F5890; // type:function size:0xA8 scope:global -UnloadStreamingEntry__17eStreamPackLoaderPUii = .text:0x800F5938; // type:function size:0x5C scope:global -UnloadAllStreamingEntries__17eStreamPackLoaderPCc = .text:0x800F5994; // type:function size:0x7C scope:global -IsLoading__17eStreamPackLoaderPCc = .text:0x800F5A10; // type:function size:0x90 scope:global -TestLoadStreamingEntry__17eStreamPackLoaderPUiiib = .text:0x800F5AA0; // type:function size:0x32C scope:global -DefragmentAllocation__17eStreamPackLoaderPv = .text:0x800F5DCC; // type:function size:0x108 scope:global -WaitForLoadingToFinish__17eStreamPackLoaderPCc = .text:0x800F5ED4; // type:function size:0x5C scope:global -CreateStreamingPack__17eStreamPackLoaderPCcPFPv_vPvi = .text:0x800F5F30; // type:function size:0x174 scope:global -InternalLoadingHeaderPhase1Callback__17eStreamPackLoaderPviT1 = .text:0x800F60A4; // type:function size:0x140 scope:global -InternalLoadingHeaderPhase2Callback__17eStreamPackLoaderPviT1 = .text:0x800F61E4; // type:function size:0x134 scope:global -InternalLoadingHeaderPhase3Callback__17eStreamPackLoaderPv = .text:0x800F6318; // type:function size:0x60 scope:global -DeleteStreamingPack__17eStreamPackLoaderPCc = .text:0x800F6378; // type:function size:0xD4 scope:global -AddReplacementTextureTableFixup__FP24eReplacementTextureTablei = .text:0x800F644C; // type:function size:0x80 scope:global -RemoveReplacementTextureTableFixup__FP24eReplacementTextureTable = .text:0x800F64CC; // type:function size:0x60 scope:global -eFixupReplacementTextureTables__Fv = .text:0x800F652C; // type:function size:0x9C scope:global -eFixupReplacementTexturesAfterUnloading__FP11TextureInfo = .text:0x800F65C8; // type:function size:0x74 scope:global -Init__6eModelUi = .text:0x800F663C; // type:function size:0x58 scope:global -UnInit__6eModel = .text:0x800F6694; // type:function size:0x74 scope:global -ReconnectSolid__6eModelP16eSolidListHeader = .text:0x800F6708; // type:function size:0x44 scope:global -ConnectSolid__6eModelP6eSolid = .text:0x800F674C; // type:function size:0x70 scope:global -AttachReplacementTextureTable__6eModelP24eReplacementTextureTableii = .text:0x800F67BC; // type:function size:0x54 scope:global -RestoreReplacementTextureTable__6eModelPPP11TextureInfo = .text:0x800F6810; // type:function size:0x68 scope:global -ApplyReplacementTextureTable__6eModelPPP11TextureInfo = .text:0x800F6878; // type:function size:0x130 scope:global -GetBoundingBox__6eModelP8bVector3T1 = .text:0x800F69A8; // type:function size:0x58 scope:global -GetPivotPosition__6eModel = .text:0x800F6A00; // type:function size:0x1C scope:global -GetPivotMatrix__6eModel = .text:0x800F6A1C; // type:function size:0x1C scope:global -ReplaceLightMaterial__6eModelUiP14eLightMaterial = .text:0x800F6A38; // type:function size:0x2C scope:global -GetPostionMarker__6eModelP15ePositionMarker = .text:0x800F6A64; // type:function size:0x34 scope:global -GetPostionMarker__6eModelUi = .text:0x800F6A98; // type:function size:0x34 scope:global -eInitModels__Fv = .text:0x800F6ACC; // type:function size:0x3C scope:global -NotifySolidLoader__FP16eSolidListHeader = .text:0x800F6B08; // type:function size:0x104 scope:global -NotifySolidUnloader__FP6eSolid = .text:0x800F6C0C; // type:function size:0x128 scope:global -eSmoothNormals__FPP6eModeli = .text:0x800F6D34; // type:function size:0xA8 scope:global -GetBoundingBox__6eSolidP8bVector3T1 = .text:0x800F6DDC; // type:function size:0x34 scope:global -FixTextureTable__6eSolid = .text:0x800F6E10; // type:function size:0x88 scope:global -FixLightMaterialTable__6eSolid = .text:0x800F6E98; // type:function size:0x60 scope:global -EmptySolidTextureFixupInfo__FP16eSolidListHeader = .text:0x800F6EF8; // type:function size:0x94 scope:global -RebuildSolidTextureFixupInfo__FP16eSolidListHeader = .text:0x800F6F8C; // type:function size:0x194 scope:global -eSolidNotifyTextureMoving__FP11TexturePackP11TextureInfo = .text:0x800F7120; // type:function size:0xFC scope:global -eSolidNotifyTextureLoading__FP11TexturePackP11TextureInfob = .text:0x800F721C; // type:function size:0x2A4 scope:global -NotifyTextureLoading__6eSolidP11TexturePack = .text:0x800F74C0; // type:function size:0xA0 scope:global -NotifyTextureUnloading__6eSolidP11TexturePack = .text:0x800F7560; // type:function size:0x9C scope:global -NotifyTextureMoving__6eSolidP11TexturePack = .text:0x800F75FC; // type:function size:0x58 scope:global -NotifyTextureMoving__6eSolidP11TexturePackP11TextureInfo = .text:0x800F7654; // type:function size:0x54 scope:global -ReplaceLightMaterial__6eSolidUiP14eLightMaterial = .text:0x800F76A8; // type:function size:0x44 scope:global -GetPostionMarker__6eSolidP15ePositionMarker = .text:0x800F76EC; // type:function size:0x5C scope:global -GetPostionMarker__6eSolidUi = .text:0x800F7748; // type:function size:0x58 scope:global -SmoothNormals__6eSolidPP13eSmoothVertexi = .text:0x800F77A0; // type:function size:0x290 scope:global -eSmoothNormals__FPP6eSolidi = .text:0x800F7A30; // type:function size:0x1B4 scope:global -InternalLoaderSolidHeaderChunks__FP6bChunk = .text:0x800F7BE4; // type:function size:0x1E0 scope:global -InternalLoaderSolidChunks__FP6bChunkP16eSolidListHeader = .text:0x800F7DC4; // type:function size:0x628 scope:global -InternalUnloaderSolidHeaderChunks__FP6bChunk = .text:0x800F83EC; // type:function size:0xF0 scope:global -InternalUnloaderSolidChunks__FP6bChunkP16eSolidListHeader = .text:0x800F84DC; // type:function size:0x1E4 scope:global -LoaderSolidList__FP6bChunk = .text:0x800F86C0; // type:function size:0xD4 scope:global -UnloaderSolidList__FP6bChunk = .text:0x800F8794; // type:function size:0xB4 scope:global -SolidLoadedStreamingEntryCallback__FP6bChunkP15eStreamingEntryP14eStreamingPack = .text:0x800F8848; // type:function size:0x6C scope:global -SolidUnloadedStreamingEntryCallback__FP6bChunkP15eStreamingEntryP14eStreamingPack = .text:0x800F88B4; // type:function size:0x48 scope:global -eLoadStreamingSolid__FPUiiPFPv_vPvi = .text:0x800F88FC; // type:function size:0x4C scope:global -eUnloadStreamingSolid__FPUii = .text:0x800F8948; // type:function size:0x30 scope:global -eWaitForStreamingSolidPackLoading__FPCc = .text:0x800F8978; // type:function size:0x2C scope:global -eLoadStreamingSolidPack__FPCcPFPv_vPvi = .text:0x800F89A4; // type:function size:0x50 scope:global -SolidLoadingStreamingPackPhase1__FP37eStreamingPackHeaderLoadingInfoPhase1 = .text:0x800F89F4; // type:function size:0x68 scope:global -SolidLoadingStreamingPackPhase2__FP37eStreamingPackHeaderLoadingInfoPhase2 = .text:0x800F8A5C; // type:function size:0x8C scope:global -eUnloadStreamingSolidPack__FPCc = .text:0x800F8AE8; // type:function size:0x2C scope:global -SolidUnloadingStreamingPack__FP14eStreamingPack = .text:0x800F8B14; // type:function size:0x24 scope:global -eInitSolids__Fv = .text:0x800F8B38; // type:function size:0x34 scope:global -GetSolidIndexEntry__FP16eSolidListHeaderUi = .text:0x800F8B6C; // type:function size:0x44 scope:global -eFindSolid__FUi = .text:0x800F8BB0; // type:function size:0x24 scope:global -eFindSolid__FUiP16eSolidListHeader = .text:0x800F8BD4; // type:function size:0x110 scope:global -LoaderLights__FP6bChunk = .text:0x800F8CE4; // type:function size:0x578 scope:global -UnloaderLights__FP6bChunk = .text:0x800F925C; // type:function size:0x1C0 scope:global -SetSelectCarLighting__Fifi = .text:0x800F941C; // type:function size:0x4 scope:global -SphericalToCartesian__FP8bVector3fff = .text:0x800F9420; // type:function size:0xF0 scope:global -CartesianToSpherical__FP8bVector3fff = .text:0x800F9510; // type:function size:0xFC scope:global -elRotateLightContext__FP20eDynamicLightContextT0P8bMatrix4 = .text:0x800F960C; // type:function size:0x1A4 scope:global -elSetupEnvMap__FP20eDynamicLightContextP8bMatrix4T1P8bVector4 = .text:0x800F97B0; // type:function size:0x214 scope:global -elResetLightContext__FP20eDynamicLightContext = .text:0x800F99C4; // type:function size:0x28 scope:global -elSetupLights__FP20eDynamicLightContextP15eShaperLightRigP8bVector3P8bMatrix4T3P5eView = .text:0x800F99EC; // type:function size:0x4E4 scope:global -elSetupLightContext__FP20eDynamicLightContextP15eShaperLightRigP8bMatrix4T2P8bVector4P5eView = .text:0x800F9ED0; // type:function size:0x94 scope:global -elCloneLightContext__FP20eDynamicLightContextP8bMatrix4T1P8bVector4P5eViewT0 = .text:0x800F9F64; // type:function size:0x58 scope:global -UpdateLightFlareParameters__Fv = .text:0x800F9FBC; // type:function size:0x20C scope:global -indep_fpow__Fff = .text:0x800FA1C8; // type:function size:0x20 scope:global -eGetNextLightFlareInPool__FUi = .text:0x800FA1E8; // type:function size:0x48 scope:global -eInitLightFlarePool__Fv = .text:0x800FA230; // type:function size:0x74 scope:global -eRenderLightFlarePool__FP5eView = .text:0x800FA2A4; // type:function size:0x1B8 scope:global -eResestLightFlarePool__Fv = .text:0x800FA45C; // type:function size:0xE4 scope:global -eLightUpdateTextures__Fv = .text:0x800FA540; // type:function size:0x5C scope:global -eRenderLightFlare__FP5eViewP11eLightFlareP8bMatrix4f19eLightReflexionType9flareTypefUif = .text:0x800FA59C; // type:function size:0xD1C scope:global -eRenderWorldLightFlares__FP5eView9flareType = .text:0x800FB2B8; // type:function size:0x128 scope:global -RestoreShaperRig__FP15eShaperLightRigUiT0 = .text:0x800FB3E0; // type:function size:0x88 scope:global -AddQuickDynamicLight__FP15eShaperLightRigUiffffP8bVector3 = .text:0x800FB468; // type:function size:0x64 scope:global -AdjustQuickDynamicLight__FP15eShaperLightRigP8bVector3 = .text:0x800FB4CC; // type:function size:0xC scope:global -BuildData__14eLightMaterial = .text:0x800FB4D8; // type:function size:0x20 scope:global -elGetLightMaterial__FUi = .text:0x800FB4F8; // type:function size:0x6C scope:global -elGetDefaultLightMaterial__Fv = .text:0x800FB564; // type:function size:0xC scope:global -elInit__Fv = .text:0x800FB570; // type:function size:0x38 scope:global -elBeginFrame__Fv = .text:0x800FB5A8; // type:function size:0x4 scope:global -__5eView = .text:0x800FB5AC; // type:function size:0x9C scope:global -GetVisibleState__5eViewPC8bVector3T1P8bMatrix4 = .text:0x800FB648; // type:function size:0x20 scope:global -GetVisibleState__5eViewP6eModelP8bMatrix4 = .text:0x800FB668; // type:function size:0x54 scope:global -GetPixelSize__5eViewff = .text:0x800FB6BC; // type:function size:0x48 scope:global -GetPixelSize__5eViewPC8bVector3f = .text:0x800FB704; // type:function size:0x10C scope:global -GetPixelSize__5eViewPC8bVector3T1 = .text:0x800FB810; // type:function size:0x190 scope:global -BiasMatrixForZSorting__5eViewP8bMatrix4f = .text:0x800FB9A0; // type:function size:0x124 scope:global -AttachCameraMover__5eViewP11CameraMover = .text:0x800FBAC4; // type:function size:0x38 scope:global -UnattachCameraMover__5eViewP11CameraMover = .text:0x800FBAFC; // type:function size:0x30 scope:global -eInitTextures__Fv = .text:0x800FBB2C; // type:function size:0x4C scope:global -SetDuplicateTextureWarning__Fi = .text:0x800FBB78; // type:function size:0xC scope:global -FindVRAMData__FUi = .text:0x800FBB84; // type:function size:0x34 scope:global -InternalLoadTexturePackHeaderChunks__FP6bChunk = .text:0x800FBBB8; // type:function size:0x300 scope:global -InternalUnloadTexturePackHeaderChunks__FP6bChunk = .text:0x800FBEB8; // type:function size:0x128 scope:global -InternalLoadVRAMDataChunks__FP6bChunk = .text:0x800FBFE0; // type:function size:0x8C scope:global -LoaderTexturePack__FP6bChunk = .text:0x800FC06C; // type:function size:0x274 scope:global -UnloaderTexturePack__FP6bChunk = .text:0x800FC2E0; // type:function size:0xD8 scope:global -__11TexturePackP17TexturePackHeaderiPCcT3 = .text:0x800FC3B8; // type:function size:0xCC scope:global -_._11TexturePack = .text:0x800FC484; // type:function size:0x64 scope:global -AttachTextureTable__11TexturePackP11TextureInfoP19TextureInfoPlatInfoi = .text:0x800FC4E8; // type:function size:0x74 scope:global -UnattachTextureTable__11TexturePackP11TextureInfoP19TextureInfoPlatInfoi = .text:0x800FC55C; // type:function size:0x74 scope:global -AttachTextureInfo__11TexturePackP11TextureInfoP19TextureInfoPlatInfoP17TextureIndexEntry = .text:0x800FC5D0; // type:function size:0xDC scope:global -UnattachTextureInfo__11TexturePackP11TextureInfoP19TextureInfoPlatInfoP17TextureIndexEntry = .text:0x800FC6AC; // type:function size:0x90 scope:global -AssignTextureData__11TexturePackPcii = .text:0x800FC73C; // type:function size:0x128 scope:global -UnAssignTextureData__11TexturePackii = .text:0x800FC864; // type:function size:0x144 scope:global -GetTextureIndexEntry__11TexturePackUi = .text:0x800FC9A8; // type:function size:0x54 scope:global -GetLoadedTexture__11TexturePackUi = .text:0x800FC9FC; // type:function size:0xA4 scope:global -GetTexture__11TexturePackUi = .text:0x800FCAA0; // type:function size:0x34 scope:global -eCreateTextureInfo__Fv = .text:0x800FCAD4; // type:function size:0x48 scope:global -eDestroyTextureInfo__FP11TextureInfo = .text:0x800FCB1C; // type:function size:0x48 scope:global -__15TextureAnimPackP11TexturePackP11TextureAnimP16TextureAnimEntryii = .text:0x800FCB64; // type:function size:0x74 scope:global -_._15TextureAnimPack = .text:0x800FCBD8; // type:function size:0xC0 scope:global -InitAnims__15TextureAnimPack = .text:0x800FCC98; // type:function size:0xC0 scope:global -UpdateTextureAnimations__Fv = .text:0x800FCD58; // type:function size:0x1D4 scope:global -TextureLoadedStreamingEntryCallback__FP6bChunkP15eStreamingEntryP14eStreamingPack = .text:0x800FCF2C; // type:function size:0x11C scope:global -TextureUnloadedStreamingEntryCallback__FP6bChunkP15eStreamingEntryP14eStreamingPack = .text:0x800FD048; // type:function size:0x124 scope:global -eLoadStreamingTexture__FPUiiPFPv_vPvi = .text:0x800FD16C; // type:function size:0x4C scope:global -eUnloadStreamingTexture__FPUii = .text:0x800FD1B8; // type:function size:0x30 scope:global -eWaitForStreamingTexturePackLoading__FPCc = .text:0x800FD1E8; // type:function size:0x2C scope:global -eUnloadAllStreamingTextures__FPCc = .text:0x800FD214; // type:function size:0x2C scope:global -eIsStreamingTexturePackLoaded__FPCc = .text:0x800FD240; // type:function size:0x3C scope:global -eLoadStreamingTexturePack__FPCcPFPv_vPvi = .text:0x800FD27C; // type:function size:0x50 scope:global -TextureLoadingStreamingPackPhase1__FP37eStreamingPackHeaderLoadingInfoPhase1 = .text:0x800FD2CC; // type:function size:0x68 scope:global -TextureLoadingStreamingPackPhase2__FP37eStreamingPackHeaderLoadingInfoPhase2 = .text:0x800FD334; // type:function size:0x74 scope:global -eUnloadStreamingTexturePack__FPCc = .text:0x800FD3A8; // type:function size:0x2C scope:global -TextureUnloadingStreamingPack__FP14eStreamingPack = .text:0x800FD3D4; // type:function size:0x24 scope:global -GetScroll__11TextureInfoffif = .text:0x800FD3F8; // type:function size:0xA4 scope:global -MaybePrintUnusedTextures__Fv = .text:0x800FD49C; // type:function size:0x4 scope:global -GetTextureInfo__FUiii = .text:0x800FD4A0; // type:function size:0x184 scope:global -FixupTextureInfo__FP11TextureInfoUiP11TexturePackb = .text:0x800FD624; // type:function size:0xBC scope:global -FixupTextureInfoNull__FP11TextureInfoUiP11TexturePackb = .text:0x800FD6E0; // type:function size:0x98 scope:global -LoaderSun__FP6bChunk = .text:0x800FD778; // type:function size:0x188 scope:global -SetCurrentSunInfo__FUi = .text:0x800FD900; // type:function size:0x13C scope:global -SetCurrentSunInfo__Fv = .text:0x800FDA3C; // type:function size:0x58 scope:global -UnloaderSun__FP6bChunk = .text:0x800FDA94; // type:function size:0x38 scope:global -SunTrackLoader__Fv = .text:0x800FDACC; // type:function size:0xA8 scope:global -SunTrackUnloader__Fv = .text:0x800FDB74; // type:function size:0x24 scope:global -RenderSunAsFlare__Fv = .text:0x800FDB98; // type:function size:0x28C scope:global -GetSunIntensity__FP5eView = .text:0x800FDE24; // type:function size:0x5C scope:global -GetSunPos__FP5eViewPfN21 = .text:0x800FDE80; // type:function size:0x98 scope:global -Add__11DefragFixerPvii = .text:0x800FDF18; // type:function size:0x84 scope:global -Fix__11DefragFixerPv = .text:0x800FDF9C; // type:function size:0x78 scope:global -IsRainDisabled__Fv = .text:0x800FE014; // type:function size:0x58 scope:global -SetParticleSystemStats__Fiiiiiiii = .text:0x800FE06C; // type:function size:0x3C scope:global -PrintParticleSystemStats__Fv = .text:0x800FE0A8; // type:function size:0x4 scope:global -cb_PreRetrace__FUl = .text:0x800FE0AC; // type:function size:0x4 scope:global -cb_PostRetrace__FUl = .text:0x800FE0B0; // type:function size:0x38 scope:global -eInitEnginePlat__Fv = .text:0x800FE0E8; // type:function size:0x48 scope:global -eSetDisplaySystem__Fi = .text:0x800FE130; // type:function size:0x68 scope:global -InitSlotPools__Fv = .text:0x800FE198; // type:function size:0x4C scope:global -epInitViews__Fv = .text:0x800FE1E4; // type:function size:0x204 scope:global -eGetCurrentViewMode__Fv = .text:0x800FE3E8; // type:function size:0xC scope:global -eUpdateViewMode__Fv = .text:0x800FE3F4; // type:function size:0x14C scope:global -MaybeChangeViewMode__Fv = .text:0x800FE540; // type:function size:0x4D4 scope:global -eFixUpTablesPlat__Fv = .text:0x800FEA14; // type:function size:0xD0 scope:global -EnvMapTextureLoadedCallback__Fi = .text:0x800FEAE4; // type:function size:0x80 scope:global -eInitFEEnvMapPlat__Fv = .text:0x800FEB64; // type:function size:0x90 scope:global -eRemoveFEEnvMapPlat__Fv = .text:0x800FEBF4; // type:function size:0x12C scope:global -SetupSceneryCullInfoPlat__FP5eViewR15SceneryCullInfo = .text:0x800FED20; // type:function size:0x40 scope:global -eClampTopLeft__Fbi = .text:0x800FED60; // type:function size:0x8 scope:global -__5ePoly = .text:0x800FED68; // type:function size:0xA4 scope:global -IsSunInFrustrum__FP5eView = .text:0x800FEE0C; // type:function size:0xFC scope:global -eDisplayFrame__Fv = .text:0x800FEF08; // type:function size:0xCE4 scope:global -eGetScreenWidth__Fv = .text:0x800FFBEC; // type:function size:0xC scope:global -eGetScreenHeight__Fv = .text:0x800FFBF8; // type:function size:0xC scope:global -GetTextureInfo__13eRenderTarget = .text:0x800FFC04; // type:function size:0x18 scope:global -eGetRenderTargetTextureInfo__Fi = .text:0x800FFC1C; // type:function size:0x54 scope:global -eGetCurrentRenderTarget__Fv = .text:0x800FFC70; // type:function size:0xC scope:global -eSetCurrentRenderTarget__FP13eRenderTarget = .text:0x800FFC7C; // type:function size:0x230 scope:global -eGetRenderTarget__Fi = .text:0x800FFEAC; // type:function size:0x14 scope:global -eWaitUntilRenderingDone__Fv = .text:0x800FFEC0; // type:function size:0x54 scope:global -CalculateH__FUs = .text:0x800FFF14; // type:function size:0x70 scope:global -CreateViewMatricies__FP5eViewfff = .text:0x800FFF84; // type:function size:0x688 scope:global -SetScreenBuffers__Fv = .text:0x8010060C; // type:function size:0x5C4 scope:global -epRenderStrips__FP5eViewP6eSolidP8bMatrix4P13eLightContextUiT2 = .text:0x80100BD0; // type:function size:0x470 scope:global -FEBeginBatchRender__18eViewPlatInterfacei = .text:0x80101040; // type:function size:0x10 scope:global -FEEndBatchRender__18eViewPlatInterface = .text:0x80101050; // type:function size:0x10 scope:global -Render__18eViewPlatInterfaceP6eModelP8bMatrix4P13eLightContextUiT2 = .text:0x80101060; // type:function size:0xBC scope:global -Render__18eViewPlatInterfaceP5ePolyP11TextureInfoP8bMatrix4if = .text:0x8010111C; // type:function size:0x74 scope:global -FERender__18eViewPlatInterfaceP5ePolyP11TextureInfoT2i = .text:0x80101190; // type:function size:0x20 scope:global -Render__18eViewPlatInterfaceP5ePolyP11TextureInfoT2i = .text:0x801011B0; // type:function size:0x54 scope:global -FERender__18eViewPlatInterfaceP5ePolyP11TextureInfoi = .text:0x80101204; // type:function size:0x20 scope:global -Render__18eViewPlatInterfaceP5ePolyP11TextureInfoi = .text:0x80101224; // type:function size:0x584 scope:global -DisplayRVMs__FP5eView = .text:0x801017A8; // type:function size:0x184 scope:global -eFacePixelate__FP5eView = .text:0x8010192C; // type:function size:0x38C scope:global -eDisplayLetterBoxes__Fv = .text:0x80101CB8; // type:function size:0x264 scope:global -eDisplaySafezone__Fv = .text:0x80101F1C; // type:function size:0xC scope:global -eInitGX__Fv = .text:0x80101F28; // type:function size:0xA4 scope:global -__InitRenderMode__Fv = .text:0x80101FCC; // type:function size:0x258 scope:global -__InitMem__Fv = .text:0x80102224; // type:function size:0x78 scope:global -__InitGXlite__Fv = .text:0x8010229C; // type:function size:0x154 scope:global -__InitGX__Fv = .text:0x801023F0; // type:function size:0x280 scope:global -__InitVI__Fv = .text:0x80102670; // type:function size:0x60 scope:global -__InitMatrices__Fv = .text:0x801026D0; // type:function size:0x1FC scope:global -eRecalculateOthographicProjection__Fif = .text:0x801028CC; // type:function size:0x2CC scope:global -eSetOrthographicScreenQuadProjection__FP13eRenderTarget = .text:0x80102B98; // type:function size:0xF8 scope:global -eSetOrthographicMatrixToHW__Fv = .text:0x80102C90; // type:function size:0x44 scope:global -eBeginScene__Fv = .text:0x80102CD4; // type:function size:0x26C scope:global -eEndScene__Fv = .text:0x80102F40; // type:function size:0x68 scope:global -VIAdvanceFrame__Fv = .text:0x80102FA8; // type:function size:0x84 scope:global -eCopyDisp__FUc = .text:0x8010302C; // type:function size:0x74 scope:global -eDLSaveContext__FUc = .text:0x801030A0; // type:function size:0x54 scope:global -eSetBackgroundColor__FG8_GXColor = .text:0x801030F4; // type:function size:0x34 scope:global -eSetPixelFormat__Fii = .text:0x80103128; // type:function size:0x7C scope:global -eSetScissor__Fiiii = .text:0x801031A4; // type:function size:0xA8 scope:global -eSetCopyFilter__F9FILTER_IDi = .text:0x8010324C; // type:function size:0x48 scope:global -eDrawStartup__Fv = .text:0x80103294; // type:function size:0x64 scope:global -eExStartup__Fv = .text:0x801032F8; // type:function size:0x194 scope:global -eWaitRetrace__FUi = .text:0x8010348C; // type:function size:0x60 scope:global -sync_cb__FUs = .text:0x801034EC; // type:function size:0xC scope:global -eEmitSync__FUc = .text:0x801034F8; // type:function size:0x50 scope:global -cb_DrawDone__Fv = .text:0x80103548; // type:function size:0x10 scope:global -eSendDrawDone__FUc = .text:0x80103558; // type:function size:0x44 scope:global -eIsDrawDone__Fv = .text:0x8010359C; // type:function size:0xC scope:global -IsSyncValid__Fv = .text:0x801035A8; // type:function size:0x58 scope:local -eWaitDrawDone__Fv = .text:0x80103600; // type:function size:0xCC scope:global -KeepAlive__Fv = .text:0x801036CC; // type:function size:0xBC scope:local -eStallWorkaround__FUc = .text:0x80103788; // type:function size:0x54 scope:global -eDiagnoseHang__Fv = .text:0x801037DC; // type:function size:0xF8 scope:global -eHangMetric__FUc = .text:0x801038D4; // type:function size:0xB8 scope:global -eScreenQuadReplace__FP5eViewi = .text:0x8010398C; // type:function size:0x3F0 scope:global -eMotionBlurEffect__FP5eView = .text:0x80103D7C; // type:function size:0x88C scope:global -eRenderSky__FP5eView = .text:0x80104608; // type:function size:0x254 scope:global -eEURGB60ModeCheck__Fv = .text:0x8010485C; // type:function size:0x1E8 scope:global -eProgressiveScanModeCheck__Fv = .text:0x80104A44; // type:function size:0x21C scope:global -eProgressiveScan_EURGB60SetMode__Fii = .text:0x80104C60; // type:function size:0xEC scope:global -eProgressiveScan_EURGB60Proceed__Fi = .text:0x80104D4C; // type:function size:0x394 scope:global -eNTSCInterlace_PALSetMode__Fii = .text:0x801050E0; // type:function size:0xE8 scope:global -eNTSCInterlace_PALProceed__Fi = .text:0x801051C8; // type:function size:0x3A4 scope:global -eProgressiveScan_EURGB60DialogBox__Fi = .text:0x8010556C; // type:function size:0x738 scope:global -eDEMOInitROMFont__Fv = .text:0x80105CA4; // type:function size:0xD4 scope:global -eDEMODeleteROMFont__Fv = .text:0x80105D78; // type:function size:0x50 scope:global -eDrawFontChar__Fiiiii = .text:0x80105DC8; // type:function size:0x108 scope:local -eLoadSheet__FPv11_GXTexMapID = .text:0x80105ED0; // type:function size:0x140 scope:local -eDEMORFPuts__FsssPc = .text:0x80106010; // type:function size:0x1A4 scope:global -eDEMORFPrintf__FsssPce = .text:0x801061B4; // type:function size:0xC0 scope:global -eDEMOBeforeRender__Fv = .text:0x80106274; // type:function size:0x88 scope:global -eDEMODoneRender__Fv = .text:0x801062FC; // type:function size:0x4C scope:global -eDEMOSetupScrnSpc__Fllf = .text:0x80106348; // type:function size:0xB0 scope:global -eDEMOInitCaption__Flll = .text:0x801063F8; // type:function size:0x84 scope:global -eSetCulling__F11_GXCullMode = .text:0x8010647C; // type:function size:0x40 scope:global -eResetZBuffering__Fv = .text:0x801064BC; // type:function size:0x40 scope:global -eSetZBuffering__FUcUc = .text:0x801064FC; // type:function size:0x68 scope:global -eSetZCompLoc__FUc = .text:0x80106564; // type:function size:0x50 scope:global -eSetColourUpdate__FUcUc = .text:0x801065B4; // type:function size:0x7C scope:global -_alphaTestFunc__Fv = .text:0x80106630; // type:function size:0x74 scope:local -eSetAlphaTest__FUc = .text:0x801066A4; // type:function size:0x34 scope:global -eSetBlendMode__FP11TextureInfoUc = .text:0x801066D8; // type:function size:0x198 scope:global -eResetBlendMode__Fv = .text:0x80106870; // type:function size:0x50 scope:global -eSetBlendModeSrcInvSrc__Fv = .text:0x801068C0; // type:function size:0x54 scope:global -eSetBlendModeSrcAlphaOne__Fv = .text:0x80106914; // type:function size:0x50 scope:global -eSetBlendModeNone__Fv = .text:0x80106964; // type:function size:0x54 scope:global -__14cCaptureBuffer = .text:0x801069B8; // type:function size:0x34 scope:global -_._14cCaptureBuffer = .text:0x801069EC; // type:function size:0x4C scope:global -Init__14cCaptureBufferiiiiii = .text:0x80106A38; // type:function size:0x13C scope:global -Destroy__14cCaptureBuffer = .text:0x80106B74; // type:function size:0x58 scope:global -CaptureEFB__14cCaptureBufferii9_GXTexFmt = .text:0x80106BCC; // type:function size:0xC4 scope:global -AddHorizonFogEntryPOS__Ffff = .text:0x80106C90; // type:function size:0xA8 scope:global -AddHorizonFogEntryCLR__FUi = .text:0x80106D38; // type:function size:0x34 scope:global -AddHorizonFogEntryUVS__Fff = .text:0x80106D6C; // type:function size:0xA4 scope:global -GenerateHorizonFogDisplayList__FPPvPUl9_GXVtxFmt = .text:0x80106E10; // type:function size:0x31C scope:global -eInitHorizonFogDisplayList__Fv = .text:0x8010712C; // type:function size:0x34 scope:global -__10cSphereMap = .text:0x80107160; // type:function size:0x13C scope:global -_._10cSphereMap = .text:0x8010729C; // type:function size:0x8C scope:global -Init__10cSphereMapiiiiii = .text:0x80107328; // type:function size:0x20C scope:global -Destroy__10cSphereMap = .text:0x80107534; // type:function size:0xA8 scope:global -BuildSphereMap__10cSphereMap = .text:0x801075DC; // type:function size:0x5C scope:global -genSphere__10cSphereMapPPvPUlUs9_GXVtxFmt = .text:0x80107638; // type:function size:0x49C scope:global -clrSphere__10cSphereMapPPvPUl = .text:0x80107AD4; // type:function size:0x4 scope:global -genSphereMap__10cSphereMapPP9_GXTexObjP9_GXTexObjPvUl = .text:0x80107AD8; // type:function size:0x800 scope:global -__12cSpecularMap = .text:0x801082D8; // type:function size:0x64 scope:global -_._12cSpecularMap = .text:0x8010833C; // type:function size:0x8C scope:global -Init__12cSpecularMap = .text:0x801083C8; // type:function size:0x60 scope:global -__15cQuarterSizeMap = .text:0x80108428; // type:function size:0x58 scope:global -_._15cQuarterSizeMap = .text:0x80108480; // type:function size:0x60 scope:global -Init__15cQuarterSizeMapiii = .text:0x801084E0; // type:function size:0x78 scope:global -eSetFogConstantZero__Fv = .text:0x80108558; // type:function size:0x64 scope:global -eSetFogConstantColour__Fv = .text:0x801085BC; // type:function size:0x154 scope:global -eSetupFog__FP5eView = .text:0x80108710; // type:function size:0x184 scope:global -eSetFogEnable__Fi = .text:0x80108894; // type:function size:0xC8 scope:global -eSetFogState__FP11TextureInfo12_GXBlendMode = .text:0x8010895C; // type:function size:0x80 scope:global -eSetFogEnableState__Fi = .text:0x801089DC; // type:function size:0xC scope:global -eSetFogBrightnessConstant__Ff = .text:0x801089E8; // type:function size:0xC scope:global -eLoadTevSwapTable__Fv = .text:0x801089F4; // type:function size:0x94 scope:global -eSetTevSwapStage__F13_GXTevStageIDii = .text:0x80108A88; // type:function size:0x40 scope:global -eResetTevSwapStages__Fv = .text:0x80108AC8; // type:function size:0x60 scope:global -eForceResetTevSwapStages__Fv = .text:0x80108B28; // type:function size:0xA8 scope:global -eResetIndirectTextureSetup__Fv = .text:0x80108BD0; // type:function size:0x54 scope:global -eFlushTextureBucketList__Fv = .text:0x80108C24; // type:function size:0xCC scope:global -eSubmitMesh__FP11eStripEntryUsP5eViewP6eSolidUiP11TextureInfoP8bMatrix4P13eLightContextP14eLightMaterialT6P18eDataRenderDynamic = .text:0x80108CF0; // type:function size:0x13C scope:global -InitSlotPoolsEx__Fv = .text:0x80108E2C; // type:function size:0x78 scope:global -gain__Fff = .text:0x80108EA4; // type:function size:0x50 scope:global -eResetContrastSurface__Fv = .text:0x80108EF4; // type:function size:0x368 scope:global -eInitContrastSurface__Fv = .text:0x8010925C; // type:function size:0xFC scope:global -epCalculateLocalDirectionalPOS16__FPUiT0iPUsPiPUciiP14eLightMaterialP13eLightContext = .text:0x80109358; // type:function size:0x818 scope:global -CreatePlatInfo__27eLightMaterialPlatInterface = .text:0x80109B70; // type:function size:0x48 scope:global -UpdatePlatInfo__27eLightMaterialPlatInterface = .text:0x80109BB8; // type:function size:0x7FC scope:global -elInitPlat__Fv = .text:0x8010A3B4; // type:function size:0x3C scope:global -GetLightID__Fi = .text:0x8010A3F0; // type:function size:0x8C scope:global -gx_LightColour__FRC8bVector4 = .text:0x8010A47C; // type:function size:0xBC scope:global -gx_LightAmbient__Fi = .text:0x8010A538; // type:function size:0x70 scope:global -gx_Lighting__Fv = .text:0x8010A5A8; // type:function size:0x104 scope:global -PlatConvertColor__FUi = .text:0x8010A6AC; // type:function size:0x20 scope:global -eInitEnvMap__Fv = .text:0x8010A6CC; // type:function size:0xBC scope:global -UpdateCameras__7eEnvMapP8bVector3T1 = .text:0x8010A788; // type:function size:0x2FC scope:global -eGetEnvMap__Fv = .text:0x8010AA84; // type:function size:0xC scope:global -eDisplayEnvRenderTargets__FP5eView = .text:0x8010AA90; // type:function size:0x24 scope:global -eMathInit__Fv = .text:0x8010AAB4; // type:function size:0x48 scope:global -eCopyMatrix__FP8bMatrix4T0 = .text:0x8010AAFC; // type:function size:0x2C scope:global -eMulMatrix__FP8bMatrix4N20 = .text:0x8010AB28; // type:function size:0x30 scope:global -eMulVector__FP8bVector4PC8bMatrix4PC8bVector4 = .text:0x8010AB58; // type:function size:0x74 scope:global -eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 = .text:0x8010ABCC; // type:function size:0x74 scope:global -eProject__FfffPA3_fPfN44 = .text:0x8010AC40; // type:function size:0x10C scope:global -eRotTransPers__FP8bVector3PC8bVector3P8bMatrix4T2ffffff = .text:0x8010AD4C; // type:function size:0xF8 scope:global -eCreateAxisRotationMatrix__FP8bMatrix4R8bVector3Us = .text:0x8010AE44; // type:function size:0xF4 scope:global -eCreateLookAtMatrix__FP8bMatrix4R8bVector3N21 = .text:0x8010AF38; // type:function size:0x1C4 scope:global -eSin__Ff = .text:0x8010B0FC; // type:function size:0xD4 scope:global -eCreateRotationZ__FP8bMatrix4Us = .text:0x8010B1D0; // type:function size:0xDC scope:global -eRotateX__FP8bMatrix4T0Us = .text:0x8010B2AC; // type:function size:0xF4 scope:global -eRotateY__FP8bMatrix4T0Us = .text:0x8010B3A0; // type:function size:0xF4 scope:global -eRotateZ__FP8bMatrix4T0Us = .text:0x8010B494; // type:function size:0x4C scope:global -eTranslate__FP8bMatrix4T0P8bVector3 = .text:0x8010B4E0; // type:function size:0x84 scope:global -eCreateTranslationMatrix__FP8bMatrix4R8bVector3 = .text:0x8010B564; // type:function size:0x60 scope:global -eInvertMatrix__FP8bMatrix4T0 = .text:0x8010B5C4; // type:function size:0x38 scope:global -eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 = .text:0x8010B5FC; // type:function size:0x108 scope:global -eInvertRotationMatrix__FP8bMatrix4T0 = .text:0x8010B704; // type:function size:0x54 scope:global -ePowf__Fff = .text:0x8010B758; // type:function size:0x20 scope:global -eConvertToGX34__FRA2_A3_fR8bMatrix4 = .text:0x8010B778; // type:function size:0x70 scope:global -eLoadPosMtxImm__FR8bMatrix412_GXPosNrmMtx = .text:0x8010B7E8; // type:function size:0x60 scope:global -psReset__F15PS_ResetOptions = .text:0x8010B848; // type:function size:0x38 scope:global -psGouraud__Fv = .text:0x8010B880; // type:function size:0x160 scope:global -psReplaceNoAlpha__Fv = .text:0x8010B9E0; // type:function size:0x120 scope:global -psModulate__Fv = .text:0x8010BB00; // type:function size:0x1C0 scope:global -psMotionBlur__Fv = .text:0x8010BCC0; // type:function size:0x130 scope:global -psGlowBloom__FUc = .text:0x8010BDF0; // type:function size:0x1B8 scope:global -psDepthTexture__Fv = .text:0x8010BFA8; // type:function size:0xE8 scope:global -psDepthOfField__FUc = .text:0x8010C090; // type:function size:0x19C scope:global -psIntensityReplacement__FG8_GXColor = .text:0x8010C22C; // type:function size:0x11C scope:global -psIntensityAccumulate__FG8_GXColor = .text:0x8010C348; // type:function size:0x11C scope:global -psTint__Fv = .text:0x8010C464; // type:function size:0x130 scope:global -psFEMultiTexture__Fv = .text:0x8010C594; // type:function size:0x270 scope:global -psMWScreenContrast__Fv = .text:0x8010C804; // type:function size:0x458 scope:global -psRVM__Fv = .text:0x8010CC5C; // type:function size:0x180 scope:global -ps_Lighting__Fiii = .text:0x8010CDDC; // type:function size:0xD0 scope:global -ps_Lighting2VertexChannels__Fi = .text:0x8010CEAC; // type:function size:0xDC scope:global -ps_NoLighting__Fii = .text:0x8010CF88; // type:function size:0xA8 scope:global -ps_Model__F19eModelPixelShaderIdP14eLightMateriali = .text:0x8010D030; // type:function size:0xA2C scope:global -vsReset__Fi = .text:0x8010DA5C; // type:function size:0x14 scope:global -vsResetTexGen__Fii = .text:0x8010DA70; // type:function size:0x3C scope:global -vsScreen__Fi = .text:0x8010DAAC; // type:function size:0xAC scope:global -vsModel__Fii = .text:0x8010DB58; // type:function size:0x7EC scope:global -vsScreenMultiTexture__Fi = .text:0x8010E344; // type:function size:0x60 scope:global -vsVtxAttrFmt__Fi = .text:0x8010E3A4; // type:function size:0x278 scope:global -eBeginStrip__FP11TextureInfoiP8bMatrix4 = .text:0x8010E61C; // type:function size:0x7C scope:global -eEndStrip__FP5eView = .text:0x8010E698; // type:function size:0x140 scope:global -rgbatoargb__FPUc = .text:0x8010E7D8; // type:function size:0x30 scope:local -eAddColour__FUi = .text:0x8010E808; // type:function size:0x4C scope:global -eAddUV__Fff = .text:0x8010E854; // type:function size:0x30 scope:global -eAddVertex__FRC8bVector3 = .text:0x8010E884; // type:function size:0x44 scope:global -exAddColour__FUi = .text:0x8010E8C8; // type:function size:0x20 scope:global -exAddUV__Fff = .text:0x8010E8E8; // type:function size:0x20 scope:global -exAddVertex__FRC8bVector3 = .text:0x8010E908; // type:function size:0x20 scope:global -exBeginStrip__FP11TextureInfoiP8bMatrix4 = .text:0x8010E928; // type:function size:0x20 scope:global -exEndStrip__FP5eView = .text:0x8010E948; // type:function size:0x20 scope:global -FixStripEntryTable__14eSolidPlatInfoP6eSolidPUcT2 = .text:0x8010E968; // type:function size:0x38 scope:global -LoaderPlatChunks__19eSolidPlatInterfaceP6bChunk = .text:0x8010E9A0; // type:function size:0x98 scope:global -UnloaderPlatChunks__19eSolidPlatInterfaceP6bChunk = .text:0x8010EA38; // type:function size:0x10 scope:global -FixPlatInfo__19eSolidPlatInterface = .text:0x8010EA48; // type:function size:0x34 scope:global -UnFixPlatInfo__19eSolidPlatInterface = .text:0x8010EA7C; // type:function size:0x34 scope:global -SetSmoothVertex__19eSolidPlatInterfaceUifff = .text:0x8010EAB0; // type:function size:0x4 scope:global -eLoadSolidListPlatChunks__FP6bChunk = .text:0x8010EAB4; // type:function size:0x34 scope:global -eUnloadSolidListPlatChunks__FP6bChunk = .text:0x8010EAE8; // type:function size:0x34 scope:global -GetPlaneState__FPC8bVector4PC8bVector3 = .text:0x8010EB1C; // type:function size:0x54 scope:global -TransformBound__FP8bMatrix4P8bVector3T1 = .text:0x8010EB70; // type:function size:0x110 scope:global -GetVisibleStateSB__18eViewPlatInterfacePC8bVector3T1P8bMatrix4 = .text:0x8010EC80; // type:function size:0x1C4 scope:global -GetVisibleStateSB__18eViewPlatInterfacePC8bVector3P8bMatrix4 = .text:0x8010EE44; // type:function size:0x64 scope:global -GetScreenPosition__18eViewPlatInterfaceP8bVector3PC8bVector3 = .text:0x8010EEA8; // type:function size:0x5C scope:global -CalculateViewMatricies__13eViewPlatInfoP5eViewfff = .text:0x8010EF04; // type:function size:0x54 scope:global -GetPixelWidth__18eViewPlatInterface = .text:0x8010EF58; // type:function size:0xC scope:global -GimmeMyViewPlatInfo__18eViewPlatInterfacei = .text:0x8010EF64; // type:function size:0x14 scope:global -Get__16IVisualTreatment = .text:0x8010EF78; // type:function size:0xC scope:global -__20IVisualTreatmentPlat = .text:0x8010EF84; // type:function size:0x30 scope:global -_._20IVisualTreatmentPlat = .text:0x8010EFB4; // type:function size:0x20 scope:global -OpenVisualTreatment__Fv = .text:0x8010EFD4; // type:function size:0x58 scope:global -CloseVisualTreatment__Fv = .text:0x8010F02C; // type:function size:0x44 scope:global -RenderMWVisualLook__20IVisualTreatmentPlatP5eView = .text:0x8010F070; // type:function size:0xEC scope:global -UpdateIndirectTexture__20IVisualTreatmentPlat = .text:0x8010F15C; // type:function size:0x26C scope:global -GetNumParticleTextures__Fv = .text:0x8010F3C8; // type:function size:0x8 scope:global -IsAShittyEffect__FUi = .text:0x8010F3D0; // type:function size:0x38 scope:global -ExpandVector__FPC9smVector3P8bVector3 = .text:0x8010F408; // type:function size:0xB8 scope:global -CompressVector__FPC8bVector3P9smVector3 = .text:0x8010F4C0; // type:function size:0xF8 scope:global -NotifyLibOfDeletion__FPvP12EmitterGroup = .text:0x8010F5B8; // type:function size:0xC scope:global -GetNumParticles__12EmitterGroup = .text:0x8010F5C4; // type:function size:0x38 scope:global -GetConstraintBasis__F24EffectParticleConstraintR8bVector4T1RUsP8bMatrix4 = .text:0x8010F5FC; // type:function size:0x348 scope:global -OrphanParticlesFromThisEmitter__13EmitterSystemP7Emitter = .text:0x8010F944; // type:function size:0x44 scope:global -KillParticlesFromThisEmitter__13EmitterSystemP7Emitter = .text:0x8010F988; // type:function size:0x54 scope:global -KillEverything__13EmitterSystem = .text:0x8010F9DC; // type:function size:0x8C scope:global -InitParticleSlotPool__Fv = .text:0x8010FA68; // type:function size:0x48 scope:global -InitEmitterSlotPool__Fv = .text:0x8010FAB0; // type:function size:0x48 scope:global -InitEmitterGroupSlotPool__Fv = .text:0x8010FAF8; // type:function size:0x48 scope:global -ServiceWorldEffects__13EmitterSystem = .text:0x8010FB40; // type:function size:0x154 scope:global -RefreshWorldEffects__13EmitterSystem = .text:0x8010FC94; // type:function size:0xE0 scope:global -ExpandFXSlotPools__Fv = .text:0x8010FD74; // type:function size:0x64 scope:global -CollapseFXSlotPools__Fv = .text:0x8010FDD8; // type:function size:0xF8 scope:global -EmitterSystem_OnStartNIS__Fv = .text:0x8010FED0; // type:function size:0x58 scope:global -EmitterSystem_OnEndNis__Fv = .text:0x8010FF28; // type:function size:0x58 scope:global -__24EmitterDataAttribWrapperPCQ26Attrib10Collection = .text:0x8010FF80; // type:function size:0x7C scope:global -__25EmitterGroupAttribWrapperPCQ26Attrib10Collection = .text:0x8010FFFC; // type:function size:0x50 scope:global -GetFloatColor__FUiR8bVector4 = .text:0x8011004C; // type:function size:0xAC scope:global -CalculateBases__24EmitterDataAttribWrapper = .text:0x801100F8; // type:function size:0x1A0 scope:global -__7EmitterPCQ26Attrib10CollectionP12EmitterGroup = .text:0x80110298; // type:function size:0xDC scope:global -_._7Emitter = .text:0x80110374; // type:function size:0xE8 scope:global -GetInitialParticleColorAndSize__C7EmitterPC8bMatrix4T1P15EmitterParticle = .text:0x8011045C; // type:function size:0x1C8 scope:global -GetDiscVelocity__C7EmitterRfN21RUi = .text:0x80110624; // type:function size:0x194 scope:global -GetConeVelocity__C7EmitterRfN21RUi = .text:0x801107B8; // type:function size:0x188 scope:global -CalcParticleListIndex__7Emitter = .text:0x80110940; // type:function size:0x18 scope:global -GetAnimatedUVs__F23EffectParticleAnimationiPUiT2 = .text:0x80110958; // type:function size:0x1D4 scope:global -GetStandardUVs__7EmitterPUiT1 = .text:0x80110B2C; // type:function size:0x14 scope:global -__12EmitterGroupPCQ26Attrib10CollectionUi = .text:0x80110B40; // type:function size:0xC8 scope:global -_._12EmitterGroup = .text:0x80110C08; // type:function size:0xB4 scope:global -SetEmitters__12EmitterGroupUi = .text:0x80110CBC; // type:function size:0x258 scope:global -UnloadEmitters__12EmitterGroupb = .text:0x80110F14; // type:function size:0xB4 scope:global -NumEmitters__C12EmitterGroup = .text:0x80110FC8; // type:function size:0x28 scope:global -GetAttributes__C7Emitter = .text:0x80110FF0; // type:function size:0x8 scope:global -MakeOneShot__12EmitterGroupb = .text:0x80110FF8; // type:function size:0xC8 scope:global -SetLocalWorld__12EmitterGroupPC8bMatrix4 = .text:0x801110C0; // type:function size:0x5C scope:global -SetInheritVelocity__12EmitterGroupPC8bVector3 = .text:0x8011111C; // type:function size:0x30 scope:global -Enable__12EmitterGroup = .text:0x8011114C; // type:function size:0x34 scope:global -Disable__12EmitterGroup = .text:0x80111180; // type:function size:0x34 scope:global -EndianSwap__14EmitterLibrary = .text:0x801111B4; // type:function size:0x40 scope:global -GetLibraryNumTriggers__20EmitterLibraryHeaderi = .text:0x801111F4; // type:function size:0x60 scope:global -GetLibraryTriggers__20EmitterLibraryHeaderi = .text:0x80111254; // type:function size:0x50 scope:global -GetLibrary__20EmitterLibraryHeaderi = .text:0x801112A4; // type:function size:0x4C scope:global -EndianSwap__20EmitterLibraryHeader = .text:0x801112F0; // type:function size:0xE8 scope:global -GetNewParticle__13EmitterSystemP7Emitter = .text:0x801113D8; // type:function size:0x1D0 scope:global -KillParticle__13EmitterSystemP7EmitterP15EmitterParticle = .text:0x801115A8; // type:function size:0x74 scope:global -CreateEmitterGroup__13EmitterSystemRCQ26Attrib9StringKeyUi = .text:0x8011161C; // type:function size:0x6C scope:global -CreateEmitterGroup__13EmitterSystemRCUiUi = .text:0x80111688; // type:function size:0x6C scope:global -CreateEmitterGroup__13EmitterSystemPCQ26Attrib10CollectionUi = .text:0x801116F4; // type:function size:0x35C scope:global -AddEmitterGroup__13EmitterSystemP12EmitterGroup = .text:0x80111A50; // type:function size:0x74 scope:global -RemoveEmitterGroup__13EmitterSystemP12EmitterGroup = .text:0x80111AC4; // type:function size:0x58 scope:global -UpdateInterestPoints__13EmitterSystem = .text:0x80111B1C; // type:function size:0x84 scope:global -UpdateParticles__13EmitterSystemf = .text:0x80111BA0; // type:function size:0x71C scope:global -FindLibrary__13EmitterSystemUi = .text:0x801122BC; // type:function size:0x7C scope:global -AddLibrary__13EmitterSystemP14EmitterLibrary = .text:0x80112338; // type:function size:0x2A0 scope:global -RemoveLibrary__13EmitterSystemP14EmitterLibrary = .text:0x801125D8; // type:function size:0xE0 scope:global -__13EmitterSystem = .text:0x801126B8; // type:function size:0xDC scope:global -PlatRotateScaleParticle__FP15EmitterParticleRQ25UMath7Vector3N41 = .text:0x80112794; // type:function size:0x154 scope:global -afxGetWorldViewMatrix__FP5eViewP8bMatrix4 = .text:0x801128E8; // type:function size:0x24 scope:global -Render__13EmitterSystemP5eView = .text:0x8011290C; // type:function size:0x2B8 scope:global -Init__13EmitterSystem = .text:0x80112BC4; // type:function size:0x28 scope:global -GetEmitterData__13EmitterSystemPCQ26Attrib10Collection = .text:0x80112BEC; // type:function size:0x194 scope:global -GetEmitterGroup__13EmitterSystemPCQ26Attrib10Collection = .text:0x80112D80; // type:function size:0x194 scope:global -IsCloseEnough__C13EmitterSystemPC8bVector3fif = .text:0x80112F14; // type:function size:0x18C scope:global -IsCloseEnough__C13EmitterSystemPC8bVector4fif = .text:0x801130A0; // type:function size:0x44 scope:global -IsCloseEnough__C13EmitterSystemP12EmitterGroupif = .text:0x801130E4; // type:function size:0x40 scope:global -UpdateTriggers__Fv = .text:0x80113124; // type:function size:0xB8 scope:global -GetEmitterGroupsToTrigger__FR8bVector3PP14EmitterLibrary = .text:0x801131DC; // type:function size:0x168 scope:global -Loader__13EmitterSystemP6bChunk = .text:0x80113344; // type:function size:0x1A0 scope:global -Unloader__13EmitterSystemP6bChunk = .text:0x801134E4; // type:function size:0x134 scope:global -TexturePageLoader__13EmitterSystemP6bChunk = .text:0x80113618; // type:function size:0xBC scope:global -TexturePageUnloader__13EmitterSystemP6bChunk = .text:0x801136D4; // type:function size:0x40 scope:global -SetTexturePageRanges__13EmitterSystemiP16TexturePageRange = .text:0x80113714; // type:function size:0x14 scope:global -HandleFXTriggers__Fv = .text:0x80113728; // type:function size:0x1C4 scope:global -KillEffectsMatchingFlag__13EmitterSystemUi = .text:0x801138EC; // type:function size:0x80 scope:global -CleanParticlesOnRaceRestart__Fv = .text:0x8011396C; // type:function size:0x2C scope:global -SubscribeToDeletion__12EmitterGroupPvPFPvP12EmitterGroup_v = .text:0x80113998; // type:function size:0xC scope:global -UnSubscribe__12EmitterGroup = .text:0x801139A4; // type:function size:0x10 scope:global -DeleteEmitters__12EmitterGroup = .text:0x801139B4; // type:function size:0x80 scope:global -Update__13EmitterSystemf = .text:0x80113A34; // type:function size:0x138 scope:global -Update__12EmitterGroupf = .text:0x80113B6C; // type:function size:0x1B0 scope:global -Update__14EmitterControlfP7EmitterRf = .text:0x80113D1C; // type:function size:0x3A8 scope:global -Update__7EmitterfRf = .text:0x801140C4; // type:function size:0x50 scope:global -SpawnParticles__7Emitterff = .text:0x80114114; // type:function size:0xADC scope:global -__lower_bound__H4ZPQ213EmitterSystem8LibEntryZQ213EmitterSystem8LibEntryZQ24_STLt4less1ZQ213EmitterSystem8LibEntryZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80114BF0; // type:function size:0x48 scope:global -__upper_bound__H4ZPQ213EmitterSystem8LibEntryZQ213EmitterSystem8LibEntryZQ24_STLt4less1ZQ213EmitterSystem8LibEntryZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80114C38; // type:function size:0x48 scope:global -reserve__Q24_STLt6vector2ZQ213EmitterSystem8LibEntryZQ33UTL3Stdt9Allocator2ZQ213EmitterSystem8LibEntryZ12_type_vectorUi = .text:0x80114C80; // type:function size:0x15C scope:global -_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP24EmitterDataAttribWrapperZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP24EmitterDataAttribWrapperZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP24EmitterDataAttribWrapperZ9_type_mapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZP24EmitterDataAttribWrapperT1 = .text:0x80114DDC; // type:function size:0x13C scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP24EmitterDataAttribWrapperZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP24EmitterDataAttribWrapperZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP24EmitterDataAttribWrapperZ9_type_mapRCQ24_STLt4pair2ZCUiZP24EmitterDataAttribWrapper = .text:0x80114F18; // type:function size:0x118 scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP24EmitterDataAttribWrapperZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP24EmitterDataAttribWrapperZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP24EmitterDataAttribWrapperZ9_type_mapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZP24EmitterDataAttribWrapperZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZP24EmitterDataAttribWrapperRCQ24_STLt4pair2ZCUiZP24EmitterDataAttribWrapper = .text:0x80115030; // type:function size:0x26C scope:global -_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP25EmitterGroupAttribWrapperZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP25EmitterGroupAttribWrapperZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP25EmitterGroupAttribWrapperZ9_type_mapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZP25EmitterGroupAttribWrapperT1 = .text:0x8011529C; // type:function size:0x13C scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP25EmitterGroupAttribWrapperZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP25EmitterGroupAttribWrapperZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP25EmitterGroupAttribWrapperZ9_type_mapRCQ24_STLt4pair2ZCUiZP25EmitterGroupAttribWrapper = .text:0x801153D8; // type:function size:0x118 scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP25EmitterGroupAttribWrapperZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP25EmitterGroupAttribWrapperZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP25EmitterGroupAttribWrapperZ9_type_mapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZP25EmitterGroupAttribWrapperZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZP25EmitterGroupAttribWrapperRCQ24_STLt4pair2ZCUiZP25EmitterGroupAttribWrapper = .text:0x801154F0; // type:function size:0x26C scope:global -__static_initialization_and_destruction_0 = .text:0x8011575C; // type:function size:0x11C0 scope:local -GetPtr__11LoadedTableUi = .text:0x8011691C; // type:function size:0x10 scope:global -Init__20GrandSceneryCullInfo = .text:0x8011692C; // type:function size:0xC scope:global -Init__11DefragFixer = .text:0x80116938; // type:function size:0x14 scope:global -ClassKey__Q36Attrib3Gen15light_flares_cg = .text:0x8011694C; // type:function size:0xC scope:global -__Q33UTL3Stdt3map3ZUiZP24EmitterDataAttribWrapperZ9_type_map = .text:0x80116958; // type:function size:0x74 scope:global -__Q33UTL3Stdt3map3ZUiZP25EmitterGroupAttribWrapperZ9_type_map = .text:0x801169CC; // type:function size:0x74 scope:global -Flush__14eTextureBucket = .text:0x80116A40; // type:function size:0x80 scope:global -Render__11eDataRenderP11TextureInfo = .text:0x80116AC0; // type:function size:0x175C scope:global -_GLOBAL_.I.ePolySlotPool = .text:0x8011821C; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x80118248; // type:label scope:local -__6UIMainP21ScreenConstructorData = .text:0x80118248; // type:function size:0x4C scope:global -NotificationMessage__6UIMainUlP8FEObjectUlUl = .text:0x80118294; // type:function size:0x264 scope:global -Setup__6UIMain = .text:0x801184F8; // type:function size:0x350 scope:global -UpdateProfileData__6UIMain = .text:0x80118848; // type:function size:0x244 scope:global -React__7OMAudioPCcUiP8FEObjectUiUi = .text:0x80118A8C; // type:function size:0x28 scope:global -React__7OMVideoPCcUiP8FEObjectUiUi = .text:0x80118AB4; // type:function size:0x28 scope:global -React__10OMGameplayPCcUiP8FEObjectUiUi = .text:0x80118ADC; // type:function size:0x28 scope:global -React__8OMPlayerPCcUiP8FEObjectUiUi = .text:0x80118B04; // type:function size:0x28 scope:global -React__12OMControllerPCcUiP8FEObjectUiUi = .text:0x80118B2C; // type:function size:0x28 scope:global -React__8OMEATraxPCcUiP8FEObjectUiUi = .text:0x80118B54; // type:function size:0x28 scope:global -React__9OMCreditsPCcUiP8FEObjectUiUi = .text:0x80118B7C; // type:function size:0x28 scope:global -Act__14AOSFXMasterVolPCcUi = .text:0x80118BA4; // type:function size:0x9C scope:global -Draw__14AOSFXMasterVol = .text:0x80118C40; // type:function size:0x5C scope:global -SetInitialValues__14AOSFXMasterVol = .text:0x80118C9C; // type:function size:0x54 scope:global -Act__22AOInteractiveMusicModePCcUi = .text:0x80118CF0; // type:function size:0xA0 scope:global -Draw__22AOInteractiveMusicMode = .text:0x80118D90; // type:function size:0x68 scope:global -Act__17AOEATraxMusicModePCcUi = .text:0x80118DF8; // type:function size:0xA0 scope:global -Draw__17AOEATraxMusicMode = .text:0x80118E98; // type:function size:0x68 scope:global -Act__8AOCarVolPCcUi = .text:0x80118F00; // type:function size:0x9C scope:global -Draw__8AOCarVol = .text:0x80118F9C; // type:function size:0x5C scope:global -SetInitialValues__8AOCarVol = .text:0x80118FF8; // type:function size:0x54 scope:global -Act__11AOSpeechVolPCcUi = .text:0x8011904C; // type:function size:0x9C scope:global -Draw__11AOSpeechVol = .text:0x801190E8; // type:function size:0x5C scope:global -SetInitialValues__11AOSpeechVol = .text:0x80119144; // type:function size:0x54 scope:global -Act__12AOFEMusicVolPCcUi = .text:0x80119198; // type:function size:0xBC scope:global -Draw__12AOFEMusicVol = .text:0x80119254; // type:function size:0x5C scope:global -SetInitialValues__12AOFEMusicVol = .text:0x801192B0; // type:function size:0x54 scope:global -Act__12AOIGMusicVolPCcUi = .text:0x80119304; // type:function size:0x9C scope:global -Draw__12AOIGMusicVol = .text:0x801193A0; // type:function size:0x5C scope:global -SetInitialValues__12AOIGMusicVol = .text:0x801193FC; // type:function size:0x54 scope:global -Act__11AOAudioModePCcUi = .text:0x80119450; // type:function size:0xF4 scope:global -Draw__11AOAudioMode = .text:0x80119544; // type:function size:0x98 scope:global -Act__12VOWideScreenPCcUi = .text:0x801195DC; // type:function size:0x9C scope:global -Draw__12VOWideScreen = .text:0x80119678; // type:function size:0x68 scope:global -Act__8GODamagePCcUi = .text:0x801196E0; // type:function size:0x9C scope:global -Draw__8GODamage = .text:0x8011977C; // type:function size:0x68 scope:global -Act__10GOAutoSavePCcUi = .text:0x801197E4; // type:function size:0xD0 scope:global -Draw__10GOAutoSave = .text:0x801198B4; // type:function size:0x68 scope:global -Act__10GOJumpCamsPCcUi = .text:0x8011991C; // type:function size:0x9C scope:global -Draw__10GOJumpCams = .text:0x801199B8; // type:function size:0x68 scope:global -Act__10GORearviewPCcUi = .text:0x80119A20; // type:function size:0x9C scope:global -Draw__10GORearview = .text:0x80119ABC; // type:function size:0x68 scope:global -Act__13GOSpeedoUnitsPCcUi = .text:0x80119B24; // type:function size:0xB4 scope:global -Draw__13GOSpeedoUnits = .text:0x80119BD8; // type:function size:0x68 scope:global -Act__15GORacingMiniMapPCcUi = .text:0x80119C40; // type:function size:0xC4 scope:global -Draw__15GORacingMiniMap = .text:0x80119D04; // type:function size:0x98 scope:global -Act__18GOExploringMiniMapPCcUi = .text:0x80119D9C; // type:function size:0xC4 scope:global -Draw__18GOExploringMiniMap = .text:0x80119E60; // type:function size:0x98 scope:global -Act__14POTransmissionPCcUi = .text:0x80119EF8; // type:function size:0xDC scope:global -Draw__14POTransmission = .text:0x80119FD4; // type:function size:0x8C scope:global -Act__10PODriveCamPCcUi = .text:0x8011A060; // type:function size:0x108 scope:global -Draw__10PODriveCam = .text:0x8011A168; // type:function size:0xD0 scope:global -Act__8POGaugesPCcUi = .text:0x8011A238; // type:function size:0xC4 scope:global -Draw__8POGauges = .text:0x8011A2FC; // type:function size:0x74 scope:global -Act__10POPositionPCcUi = .text:0x8011A370; // type:function size:0xC4 scope:global -Draw__10POPosition = .text:0x8011A434; // type:function size:0x74 scope:global -Act__7POScorePCcUi = .text:0x8011A4A8; // type:function size:0xC4 scope:global -Draw__7POScore = .text:0x8011A56C; // type:function size:0x74 scope:global -Act__11POSplitTimePCcUi = .text:0x8011A5E0; // type:function size:0xC8 scope:global -Draw__11POSplitTime = .text:0x8011A6A8; // type:function size:0xD0 scope:global -Act__13POLeaderBoardPCcUi = .text:0x8011A778; // type:function size:0xC4 scope:global -Draw__13POLeaderBoard = .text:0x8011A83C; // type:function size:0x74 scope:global -Act__11COVibrationPCcUi = .text:0x8011A8B0; // type:function size:0x228 scope:global -Draw__11COVibration = .text:0x8011AAD8; // type:function size:0x78 scope:global -UnsetFocus__11COVibration = .text:0x8011AB50; // type:function size:0x98 scope:global -SetFocus__11COVibrationPCc = .text:0x8011ABE8; // type:function size:0xD0 scope:global -Act__8COConfigPCcUi = .text:0x8011ACB8; // type:function size:0x154 scope:global -Draw__8COConfig = .text:0x8011AE0C; // type:function size:0x94 scope:global -__13UIOptionsMainP21ScreenConstructorData = .text:0x8011AEA0; // type:function size:0x8C scope:global -NotificationMessage__13UIOptionsMainUlP8FEObjectUlUl = .text:0x8011AF2C; // type:function size:0x374 scope:global -Setup__13UIOptionsMain = .text:0x8011B2A0; // type:function size:0x284 scope:global -ExitOptions__13UIOptionsMainPCc = .text:0x8011B524; // type:function size:0x7C scope:global -GetPlayerToEditForOptions__Fv = .text:0x8011B5A0; // type:function size:0xC scope:global -SetPlayerToEditForOptions__Fi = .text:0x8011B5AC; // type:function size:0xC scope:global -__15UIOptionsScreenP21ScreenConstructorData = .text:0x8011B5B8; // type:function size:0xFC scope:global -_._15UIOptionsScreen = .text:0x8011B6B4; // type:function size:0xB8 scope:global -NotificationMessage__15UIOptionsScreenUlP8FEObjectUlUl = .text:0x8011B76C; // type:function size:0x580 scope:global -Setup__15UIOptionsScreen = .text:0x8011BCEC; // type:function size:0x158 scope:global -SetupAudio__15UIOptionsScreen = .text:0x8011BE44; // type:function size:0x284 scope:global -SetupVideo__15UIOptionsScreen = .text:0x8011C0C8; // type:function size:0x114 scope:global -SetupGameplay__15UIOptionsScreen = .text:0x8011C1DC; // type:function size:0x2B8 scope:global -SetupPlayer__15UIOptionsScreen = .text:0x8011C494; // type:function size:0x3B4 scope:global -SetupOnline__15UIOptionsScreen = .text:0x8011C848; // type:function size:0x5C scope:global -RestoreDefaults__15UIOptionsScreen = .text:0x8011C8A4; // type:function size:0x10C scope:global -OptionsDidNotChange__15UIOptionsScreen = .text:0x8011C9B0; // type:function size:0xBC scope:global -RestoreOriginals__15UIOptionsScreen = .text:0x8011CA6C; // type:function size:0x1D0 scope:global -TogglePlayer__15UIOptionsScreenb = .text:0x8011CC3C; // type:function size:0x15C scope:global -ShouldShowAutoSave__15UIOptionsScreen = .text:0x8011CD98; // type:function size:0xB4 scope:global -__17UIOptionsTrailersP21ScreenConstructorData = .text:0x8011CE4C; // type:function size:0x44 scope:global -NotificationMessage__17UIOptionsTrailersUlP8FEObjectUlUl = .text:0x8011CE90; // type:function size:0x1B4 scope:global -Setup__17UIOptionsTrailers = .text:0x8011D044; // type:function size:0xA4 scope:global -__19UIOptionsControllerP21ScreenConstructorData = .text:0x8011D0E8; // type:function size:0x178 scope:global -_._19UIOptionsController = .text:0x8011D260; // type:function size:0x9C scope:global -OptionsDidNotChange__19UIOptionsController = .text:0x8011D2FC; // type:function size:0xB0 scope:global -NotificationMessage__19UIOptionsControllerUlP8FEObjectUlUl = .text:0x8011D3AC; // type:function size:0x3E8 scope:global -Setup__19UIOptionsController = .text:0x8011D794; // type:function size:0x168 scope:global -SetupControllerConfig__19UIOptionsController = .text:0x8011D8FC; // type:function size:0x230 scope:global -DetectControllers__19UIOptionsController = .text:0x8011DB2C; // type:function size:0x48 scope:global -ClearLoadedControllerTexture__19UIOptionsController = .text:0x8011DB74; // type:function size:0x38 scope:global -FinishLoadingTexCallback__19UIOptionsController = .text:0x8011DBAC; // type:function size:0x3C scope:global -MyFinishLoadingControllerTextureCallbackBridge__FUi = .text:0x8011DBE8; // type:function size:0x20 scope:global -CalcControllerTextureToLoad__19UIOptionsController = .text:0x8011DC08; // type:function size:0x90 scope:global -PrepToShowControllerConfig__19UIOptionsController = .text:0x8011DC98; // type:function size:0xE4 scope:global -ShowControllerConfig__19UIOptionsController = .text:0x8011DD7C; // type:function size:0x30 scope:global -HideControllerConfig__19UIOptionsController = .text:0x8011DDAC; // type:function size:0x44 scope:global -RestoreOriginals__19UIOptionsController = .text:0x8011DDF0; // type:function size:0x80 scope:global -TogglePlayer__19UIOptionsController = .text:0x8011DE70; // type:function size:0x110 scope:global -__9PauseMenuP21ScreenConstructorData = .text:0x8011DF80; // type:function size:0x88 scope:global -_._9PauseMenu = .text:0x8011E008; // type:function size:0x98 scope:global -NotifySoundMessage__9PauseMenuUl18eMenuSoundTriggers = .text:0x8011E0A0; // type:function size:0x28 scope:global -NotificationMessage__9PauseMenuUlP8FEObjectUlUl = .text:0x8011E0C8; // type:function size:0x4B4 scope:global -IsTuningAvailable__9PauseMenu = .text:0x8011E57C; // type:function size:0xCC scope:global -Setup__9PauseMenu = .text:0x8011E648; // type:function size:0xE8 scope:global -SetupOptions__9PauseMenu = .text:0x8011E730; // type:function size:0xD84 scope:global -SetupOnlineOptions__9PauseMenu = .text:0x8011F4B4; // type:function size:0x6C scope:global -__18UITrackMapStreamer = .text:0x8011F520; // type:function size:0x1D4 scope:global -_._18UITrackMapStreamer = .text:0x8011F6F4; // type:function size:0xCC scope:global -MakeSpaceInPoolCallback__18UITrackMapStreamer = .text:0x8011F7C0; // type:function size:0x40 scope:global -Init__18UITrackMapStreamerP15GRaceParametersP12FEMultiImageii = .text:0x8011F800; // type:function size:0xAC scope:global -MapPackLoadCallback__18UITrackMapStreamerUi = .text:0x8011F8AC; // type:function size:0x20 scope:global -MapLoadCallback__18UITrackMapStreamerUi = .text:0x8011F8CC; // type:function size:0x2C scope:global -CalcMapTextureHash__18UITrackMapStreamer = .text:0x8011F8F8; // type:function size:0x64 scope:global -SetMapPackLoaded__18UITrackMapStreamer = .text:0x8011F95C; // type:function size:0x78 scope:global -SetMapLoaded__18UITrackMapStreamerUi = .text:0x8011F9D4; // type:function size:0xB8 scope:global -UpdateMap__18UITrackMapStreamer = .text:0x8011FA8C; // type:function size:0x160 scope:global -CalcBoundsForRace__18UITrackMapStreamerR8bVector2T1 = .text:0x8011FBEC; // type:function size:0x84 scope:global -UpdateAnimation__18UITrackMapStreamer = .text:0x8011FC70; // type:function size:0x4C scope:global -GetZoomFactor__18UITrackMapStreamer = .text:0x8011FCBC; // type:function size:0x54 scope:global -GetPan__18UITrackMapStreamerR8bVector2 = .text:0x8011FD10; // type:function size:0x64 scope:global -ZoomTo__18UITrackMapStreamerRC8bVector2 = .text:0x8011FD74; // type:function size:0x24 scope:global -PanTo__18UITrackMapStreamerRC8bVector2 = .text:0x8011FD98; // type:function size:0x24 scope:global -ZoomToTrack__18UITrackMapStreamer = .text:0x8011FDBC; // type:function size:0x94 scope:global -PanToTrack__18UITrackMapStreamer = .text:0x8011FE50; // type:function size:0xA4 scope:global -SetZoom__18UITrackMapStreamerRC8bVector2 = .text:0x8011FEF4; // type:function size:0x58 scope:global -SetPan__18UITrackMapStreamerRC8bVector2 = .text:0x8011FF4C; // type:function size:0x58 scope:global -SetZoomSpeed__18UITrackMapStreamerf = .text:0x8011FFA4; // type:function size:0xC scope:global -SetPanSpeed__18UITrackMapStreamerf = .text:0x8011FFB0; // type:function size:0xC scope:global -ResetZoom__18UITrackMapStreamerb = .text:0x8011FFBC; // type:function size:0x88 scope:global -ResetPan__18UITrackMapStreamerb = .text:0x80120044; // type:function size:0x88 scope:global -AddTrackSlot__14UIEATraxScreenP12ScrollerSlotUii = .text:0x801200CC; // type:function size:0x68 scope:global -__14UIEATraxScreenP21ScreenConstructorData = .text:0x80120134; // type:function size:0x100 scope:global -_._14UIEATraxScreen = .text:0x80120234; // type:function size:0xF4 scope:global -RefreshHeader__14UIEATraxScreen = .text:0x80120328; // type:function size:0x48 scope:global -GetPlaybilityString__14UIEATraxScreenUc = .text:0x80120370; // type:function size:0x64 scope:global -GetStateString__14UIEATraxScreenUc = .text:0x801203D4; // type:function size:0x34 scope:global -SetupSongList__14UIEATraxScreen = .text:0x80120408; // type:function size:0x3A0 scope:global -ScrollOrderState__14UIEATraxScreenUl = .text:0x801207A8; // type:function size:0xA8 scope:global -ScrollTracks__14UIEATraxScreenUl = .text:0x80120850; // type:function size:0x68 scope:global -ScrollTrackPlayability__14UIEATraxScreenUl = .text:0x801208B8; // type:function size:0x164 scope:global -MoveTrack__14UIEATraxScreenUl = .text:0x80120A1C; // type:function size:0xE0 scope:global -PreviewSong__14UIEATraxScreen = .text:0x80120AFC; // type:function size:0x9C scope:global -ReInsertSong__14UIEATraxScreen = .text:0x80120B98; // type:function size:0xD0 scope:global -NotificationMessage__14UIEATraxScreenUlP8FEObjectUlUl = .text:0x80120C68; // type:function size:0x364 scope:global -OptionsDidNotChange__14UIEATraxScreen = .text:0x80120FCC; // type:function size:0x6C scope:global -RestoreOriginals__14UIEATraxScreen = .text:0x80121038; // type:function size:0x58 scope:global -__15uiRapSheetLoginP21ScreenConstructorData = .text:0x80121090; // type:function size:0x58 scope:global -NotificationMessage__15uiRapSheetLoginUlP8FEObjectUlUl = .text:0x801210E8; // type:function size:0x160 scope:global -Setup__15uiRapSheetLogin = .text:0x80121248; // type:function size:0x68 scope:global -__14uiRapSheetMainP21ScreenConstructorData = .text:0x801212B0; // type:function size:0x4C scope:global -NotificationMessage__14uiRapSheetMainUlP8FEObjectUlUl = .text:0x801212FC; // type:function size:0x24C scope:global -RefreshHeader__14uiRapSheetMain = .text:0x80121548; // type:function size:0x230 scope:global -__12uiRapSheetRSP21ScreenConstructorData = .text:0x80121778; // type:function size:0x44 scope:global -NotificationMessage__12uiRapSheetRSUlP8FEObjectUlUl = .text:0x801217BC; // type:function size:0x4C scope:global -RefreshHeader__12uiRapSheetRS = .text:0x80121808; // type:function size:0x49C scope:global -Update__19RapSheetUSArraySlotP10ArrayDatumb = .text:0x80121CA4; // type:function size:0x74 scope:global -__12uiRapSheetUSP21ScreenConstructorData = .text:0x80121D18; // type:function size:0x134 scope:global -NotificationMessage__12uiRapSheetUSUlP8FEObjectUlUl = .text:0x80121E4C; // type:function size:0x80 scope:global -Setup__12uiRapSheetUS = .text:0x80121ECC; // type:function size:0x3F0 scope:global -RefreshHeader__12uiRapSheetUS = .text:0x801222BC; // type:function size:0x224 scope:global -ToggleView__12uiRapSheetUS = .text:0x801224E0; // type:function size:0x30 scope:global -Update__19RapSheetVDArraySlotP10ArrayDatumb = .text:0x80122510; // type:function size:0x120 scope:global -__12uiRapSheetVDP21ScreenConstructorData = .text:0x80122630; // type:function size:0x1DC scope:global -NotificationMessage__12uiRapSheetVDUlP8FEObjectUlUl = .text:0x8012280C; // type:function size:0x5C scope:global -Setup__12uiRapSheetVD = .text:0x80122868; // type:function size:0x30C scope:global -RefreshHeader__12uiRapSheetVD = .text:0x80122B74; // type:function size:0x1FC scope:global -Update__20RapSheetCTSArraySlotP10ArrayDatumb = .text:0x80122D70; // type:function size:0x74 scope:global -__13uiRapSheetCTSP21ScreenConstructorData = .text:0x80122DE4; // type:function size:0x12C scope:global -NotificationMessage__13uiRapSheetCTSUlP8FEObjectUlUl = .text:0x80122F10; // type:function size:0x5C scope:global -Setup__13uiRapSheetCTS = .text:0x80122F6C; // type:function size:0x394 scope:global -RefreshHeader__13uiRapSheetCTS = .text:0x80123300; // type:function size:0x11C scope:global -__13uiRapSheetTEPP21ScreenConstructorData = .text:0x8012341C; // type:function size:0x50 scope:global -NotificationMessage__13uiRapSheetTEPUlP8FEObjectUlUl = .text:0x8012346C; // type:function size:0x27C scope:global -Setup__13uiRapSheetTEP = .text:0x801236E8; // type:function size:0x36C scope:global -__12uiRapSheetPDP21ScreenConstructorData = .text:0x80123A54; // type:function size:0x50 scope:global -NotificationMessage__12uiRapSheetPDUlP8FEObjectUlUl = .text:0x80123AA4; // type:function size:0x4C scope:global -Setup__12uiRapSheetPD = .text:0x80123AF0; // type:function size:0x214 scope:global -__18uiRapSheetRankingsP21ScreenConstructorData = .text:0x80123D04; // type:function size:0x50 scope:global -NotificationMessage__18uiRapSheetRankingsUlP8FEObjectUlUl = .text:0x80123D54; // type:function size:0x240 scope:global -RefreshHeader__18uiRapSheetRankings = .text:0x80123F94; // type:function size:0x120 scope:global -Setup__18uiRapSheetRankings = .text:0x801240B4; // type:function size:0x144 scope:global -PrintRanking__18uiRapSheetRankingsUiUi19ePursuitDetailTypes = .text:0x801241F8; // type:function size:0xC8 scope:global -Update__25RapSheetRankingsArraySlotP10ArrayDatumb = .text:0x801242C0; // type:function size:0xF8 scope:global -Update__30RapSheetRankingsTimerArraySlotP10ArrayDatumb = .text:0x801243B8; // type:function size:0x118 scope:global -__24uiRapSheetRankingsDetailP21ScreenConstructorData = .text:0x801244D0; // type:function size:0x1C4 scope:global -NotificationMessage__24uiRapSheetRankingsDetailUlP8FEObjectUlUl = .text:0x80124694; // type:function size:0xE8 scope:global -Setup__24uiRapSheetRankingsDetail = .text:0x8012477C; // type:function size:0x664 scope:global -RefreshHeader__24uiRapSheetRankingsDetail = .text:0x80124DE0; // type:function size:0xF0 scope:global -UpdateHighlight__24uiRapSheetRankingsDetail = .text:0x80124ED0; // type:function size:0x98 scope:global -React__12RepSheetIconPCcUiP8FEObjectUiUi = .text:0x80124F68; // type:function size:0x20 scope:global -__14uiRepSheetMainP21ScreenConstructorData = .text:0x80124F88; // type:function size:0x108 scope:global -_._14uiRepSheetMain = .text:0x80125090; // type:function size:0xC8 scope:global -NotifySoundMessage__14uiRepSheetMainUl18eMenuSoundTriggers = .text:0x80125158; // type:function size:0x28 scope:global -NotificationMessage__14uiRepSheetMainUlP8FEObjectUlUl = .text:0x80125180; // type:function size:0x268 scope:global -Setup__14uiRepSheetMain = .text:0x801253E8; // type:function size:0x298 scope:global -NotifyTextureLoaded__14uiRepSheetMain = .text:0x80125680; // type:function size:0x30 scope:global -GetDefeatedTexture__14uiRepSheetMain = .text:0x801256B0; // type:function size:0x138 scope:global -UpdateInfo__14uiRepSheetMain = .text:0x801257E8; // type:function size:0x538 scope:global -ScrollRival__14uiRepSheetMain10eScrollDir = .text:0x80125D20; // type:function size:0x114 scope:global -NotificationMessage__9RaceDatumUlP8FEObjectUlUl = .text:0x80125E34; // type:function size:0x2C scope:global -__20UISafehouseRaceSheetP21ScreenConstructorData = .text:0x80125E60; // type:function size:0x17C scope:global -_._20UISafehouseRaceSheet = .text:0x80125FDC; // type:function size:0x114 scope:global -NotifySoundMessage__20UISafehouseRaceSheetUl18eMenuSoundTriggers = .text:0x801260F0; // type:function size:0x58 scope:global -NotificationMessage__20UISafehouseRaceSheetUlP8FEObjectUlUl = .text:0x80126148; // type:function size:0x2B4 scope:global -RefreshHeader__20UISafehouseRaceSheet = .text:0x801263FC; // type:function size:0x6F0 scope:global -AddRace__20UISafehouseRaceSheetP15GRaceParameters = .text:0x80126AEC; // type:function size:0xC0 scope:global -Setup__20UISafehouseRaceSheet = .text:0x80126BAC; // type:function size:0x218 scope:global -ToggleList__20UISafehouseRaceSheet = .text:0x80126DC4; // type:function size:0x4 scope:global -__15uiRepSheetRivalP21ScreenConstructorData = .text:0x80126DC8; // type:function size:0xC4 scope:global -_._15uiRepSheetRival = .text:0x80126E8C; // type:function size:0x70 scope:global -NotifySoundMessage__15uiRepSheetRivalUl18eMenuSoundTriggers = .text:0x80126EFC; // type:function size:0x28 scope:global -NotificationMessage__15uiRepSheetRivalUlP8FEObjectUlUl = .text:0x80126F24; // type:function size:0x1EC scope:global -Setup__15uiRepSheetRival = .text:0x80127110; // type:function size:0x1B8 scope:global -NotifyTextureLoaded__15uiRepSheetRival = .text:0x801272C8; // type:function size:0x38 scope:global -GetDefeatedTexture__15uiRepSheetRival = .text:0x80127300; // type:function size:0xFC scope:global -RefreshHeader__15uiRepSheetRival = .text:0x801273FC; // type:function size:0x210 scope:global -SetupRace__15uiRepSheetRivalUiP15GRaceParameters = .text:0x8012760C; // type:function size:0x154 scope:global -__18uiRepSheetRivalBioP21ScreenConstructorData = .text:0x80127760; // type:function size:0x118 scope:global -NotificationMessage__18uiRepSheetRivalBioUlP8FEObjectUlUl = .text:0x80127878; // type:function size:0x264 scope:global -RefreshHeader__18uiRepSheetRivalBio = .text:0x80127ADC; // type:function size:0x188 scope:global -Setup__18uiRepSheetRivalBio = .text:0x80127C64; // type:function size:0x8C scope:global -NotificationMessage__14MilestoneDatumUlP8FEObjectUlUl = .text:0x80127CF0; // type:function size:0x38 scope:global -__20uiRepSheetMilestonesP21ScreenConstructorData = .text:0x80127D28; // type:function size:0x16C scope:global -NotifySoundMessage__20uiRepSheetMilestonesUl18eMenuSoundTriggers = .text:0x80127E94; // type:function size:0x58 scope:global -NotificationMessage__20uiRepSheetMilestonesUlP8FEObjectUlUl = .text:0x80127EEC; // type:function size:0x504 scope:global -Setup__20uiRepSheetMilestones = .text:0x801283F0; // type:function size:0x1C0 scope:global -RefreshTrack__20uiRepSheetMilestones = .text:0x801285B0; // type:function size:0x114 scope:global -AddMilestone__20uiRepSheetMilestonesP10GMilestone = .text:0x801286C4; // type:function size:0x94 scope:global -AddSpeedtrap__20uiRepSheetMilestonesP10GSpeedTrap = .text:0x80128758; // type:function size:0x80 scope:global -RefreshHeader__20uiRepSheetMilestones = .text:0x801287D8; // type:function size:0x498 scope:global -NotificationMessage__11BountyDatumUlP8FEObjectUlUl = .text:0x80128C70; // type:function size:0x44 scope:global -__16uiRepSheetBountyP21ScreenConstructorData = .text:0x80128CB4; // type:function size:0x16C scope:global -NotifySoundMessage__16uiRepSheetBountyUl18eMenuSoundTriggers = .text:0x80128E20; // type:function size:0x40 scope:global -NotificationMessage__16uiRepSheetBountyUlP8FEObjectUlUl = .text:0x80128E60; // type:function size:0x480 scope:global -Setup__16uiRepSheetBounty = .text:0x801292E0; // type:function size:0x1A0 scope:global -RefreshTrack__16uiRepSheetBounty = .text:0x80129480; // type:function size:0xE4 scope:global -RefreshHeader__16uiRepSheetBounty = .text:0x80129564; // type:function size:0x284 scope:global -__23uiRepSheetRivalStreamerPCcb = .text:0x801297E8; // type:function size:0xC0 scope:global -_._23uiRepSheetRivalStreamer = .text:0x801298A8; // type:function size:0xA0 scope:global -MakeSpaceInPoolCallback__23uiRepSheetRivalStreamer = .text:0x80129948; // type:function size:0x40 scope:global -TexturePackLoadedCallback__23uiRepSheetRivalStreamer = .text:0x80129988; // type:function size:0x28 scope:global -Init__23uiRepSheetRivalStreamerUiP7FEImageN22 = .text:0x801299B0; // type:function size:0x64 scope:global -LoadTextures__23uiRepSheetRivalStreamer = .text:0x80129A14; // type:function size:0x8C scope:global -UnloadTextures__23uiRepSheetRivalStreamer = .text:0x80129AA0; // type:function size:0x44 scope:global -CalcTexturesToLoad__23uiRepSheetRivalStreamerPUii = .text:0x80129AE4; // type:function size:0x10C scope:global -TexturesLoadedCallback__23uiRepSheetRivalStreamer = .text:0x80129BF0; // type:function size:0x128 scope:global -__23uiSafehouseRegionUnlockP21ScreenConstructorData = .text:0x80129D18; // type:function size:0x58 scope:global -_._23uiSafehouseRegionUnlock = .text:0x80129D70; // type:function size:0x50 scope:global -NotificationMessage__23uiSafehouseRegionUnlockUlP8FEObjectUlUl = .text:0x80129DC0; // type:function size:0x34 scope:global -Setup__23uiSafehouseRegionUnlock = .text:0x80129DF4; // type:function size:0xE4 scope:global -Init__19uiRepSheetRivalFlow = .text:0x80129ED8; // type:function size:0x38 scope:global -Get__19uiRepSheetRivalFlow = .text:0x80129F10; // type:function size:0xC scope:global -__19uiRepSheetRivalFlow = .text:0x80129F1C; // type:function size:0x1C scope:global -StartFlow__19uiRepSheetRivalFlowi = .text:0x80129F38; // type:function size:0x28 scope:global -Next__19uiRepSheetRivalFlow = .text:0x80129F60; // type:function size:0x2B8 scope:global -Draw__7CopItem = .text:0x8012A218; // type:function size:0x88 scope:global -Draw__8HeliItem = .text:0x8012A2A0; // type:function size:0xC4 scope:global -Act__14ItemTypeTogglePCcUi = .text:0x8012A364; // type:function size:0x88 scope:global -CheckMouse__14ItemTypeTogglePCcff = .text:0x8012A3EC; // type:function size:0x54 scope:global -Draw__14ItemTypeToggle = .text:0x8012A440; // type:function size:0xC4 scope:global -Position__14ItemTypeToggle = .text:0x8012A504; // type:function size:0x54 scope:global -UnsetFocus__14ItemTypeToggle = .text:0x8012A558; // type:function size:0xA4 scope:global -SetIcon__14ItemTypeToggleP7FEImageUiUi = .text:0x8012A5FC; // type:function size:0xA0 scope:global -Show__14ItemTypeToggle = .text:0x8012A69C; // type:function size:0x34 scope:global -Hide__14ItemTypeToggle = .text:0x8012A6D0; // type:function size:0x34 scope:global -SetGPSing__8WorldMapP5GIcon = .text:0x8012A704; // type:function size:0x38 scope:global -ClearGPSing__8WorldMap = .text:0x8012A73C; // type:function size:0x44 scope:global -__8WorldMapP21ScreenConstructorData = .text:0x8012A780; // type:function size:0x120 scope:global -_._8WorldMap = .text:0x8012A8A0; // type:function size:0x164 scope:global -NotificationMessage__8WorldMapUlP8FEObjectUlUl = .text:0x8012AA04; // type:function size:0x87C scope:global -ScrollZoom__8WorldMap10eScrollDir = .text:0x8012B280; // type:function size:0x100 scope:global -GetZoomFactor__8WorldMap19eWorldMapZoomLevels = .text:0x8012B380; // type:function size:0x50 scope:global -UpdateIconVisibility__8WorldMap17eWorldMapItemTypeb = .text:0x8012B3D0; // type:function size:0xA8 scope:global -ClearItems__8WorldMap = .text:0x8012B478; // type:function size:0xE0 scope:global -ClampToMapBounds__8WorldMapRfT1 = .text:0x8012B558; // type:function size:0xD8 scope:global -UpdateAnalogInput__8WorldMap = .text:0x8012B630; // type:function size:0x13C scope:global -UpdateCursor__8WorldMapb = .text:0x8012B76C; // type:function size:0x358 scope:global -MoveCursor__8WorldMapff = .text:0x8012BAC4; // type:function size:0x31C scope:global -SnapCursor__8WorldMap = .text:0x8012BDE0; // type:function size:0x1B4 scope:global -PanToCursor__8WorldMapf = .text:0x8012BF94; // type:function size:0x1A0 scope:global -PanToPlayer__8WorldMap = .text:0x8012C134; // type:function size:0x104 scope:global -Setup__8WorldMap = .text:0x8012C238; // type:function size:0x2FC scope:global -AddMapItemOption__8WorldMapUi17eWorldMapItemType = .text:0x8012C534; // type:function size:0x15C scope:global -AddPlayerCar__8WorldMap = .text:0x8012C690; // type:function size:0x180 scope:global -AddCops__8WorldMap = .text:0x8012C810; // type:function size:0x3C8 scope:global -AddRoadBlocks__8WorldMap = .text:0x8012CBD8; // type:function size:0x250 scope:global -AddIcon__8WorldMap17eWorldMapItemTypeUiP5GIcon = .text:0x8012CE28; // type:function size:0x160 scope:global -AddIcons__8WorldMapQ25GIcon4Type = .text:0x8012CF88; // type:function size:0xF0 scope:global -SetupNavigation__8WorldMap = .text:0x8012D078; // type:function size:0x54 scope:global -SetupEvent__8WorldMap = .text:0x8012D0CC; // type:function size:0x9C scope:global -SetupPursuit__8WorldMap = .text:0x8012D168; // type:function size:0x84 scope:global -ConvertPos__8WorldMapR8bVector2 = .text:0x8012D1EC; // type:function size:0x68 scope:global -ConvertRot__8WorldMapR8bVector2 = .text:0x8012D254; // type:function size:0x54 scope:global -DrawItemType__8WorldMap = .text:0x8012D2A8; // type:function size:0xB8 scope:global -DrawItemStats__8WorldMap = .text:0x8012D360; // type:function size:0x268 scope:global -RefreshHeader__8WorldMap = .text:0x8012D5C8; // type:function size:0x314 scope:global -NotificationMessage__8SMSDatumUlP8FEObjectUlUl = .text:0x8012D8DC; // type:function size:0x20 scope:global -Update__7SMSSlotP10ArrayDatumb = .text:0x8012D8FC; // type:function size:0x80 scope:global -__5uiSMSP21ScreenConstructorData = .text:0x8012D97C; // type:function size:0x1D4 scope:global -SortSMS__FP11SMSSortNodeT0 = .text:0x8012DB50; // type:function size:0x20 scope:global -Setup__5uiSMS = .text:0x8012DB70; // type:function size:0x35C scope:global -AddSMSDatum__5uiSMSP10SMSMessage = .text:0x8012DECC; // type:function size:0xC8 scope:global -AddSMSSlot__5uiSMSUi = .text:0x8012DF94; // type:function size:0xD8 scope:global -RefreshHeader__5uiSMS = .text:0x8012E06C; // type:function size:0x114 scope:global -NotificationMessage__5uiSMSUlP8FEObjectUlUl = .text:0x8012E180; // type:function size:0x43C scope:global -NotifySoundMessage__5uiSMSUl18eMenuSoundTriggers = .text:0x8012E5BC; // type:function size:0x68 scope:global -ScrollBoxes__5uiSMS10eScrollDir = .text:0x8012E624; // type:function size:0x30 scope:global -__12uiSMSMessageP21ScreenConstructorData = .text:0x8012E654; // type:function size:0xC0 scope:global -_._12uiSMSMessage = .text:0x8012E714; // type:function size:0x98 scope:global -Setup__12uiSMSMessage = .text:0x8012E7AC; // type:function size:0x114 scope:global -RefreshHeader__12uiSMSMessage = .text:0x8012E8C0; // type:function size:0x88 scope:global -NotifySoundMessage__12uiSMSMessageUl18eMenuSoundTriggers = .text:0x8012E948; // type:function size:0x50 scope:global -NotificationMessage__12uiSMSMessageUlP8FEObjectUlUl = .text:0x8012E998; // type:function size:0x20C scope:global -__12uiCareerCribP21ScreenConstructorData = .text:0x8012EBA4; // type:function size:0x44 scope:global -NotificationMessage__12uiCareerCribUlP8FEObjectUlUl = .text:0x8012EBE8; // type:function size:0x200 scope:global -Setup__12uiCareerCrib = .text:0x8012EDE8; // type:function size:0x340 scope:global -__15uiCareerManagerP21ScreenConstructorData = .text:0x8012F128; // type:function size:0x44 scope:global -NotificationMessage__15uiCareerManagerUlP8FEObjectUlUl = .text:0x8012F16C; // type:function size:0xF8 scope:global -Setup__15uiCareerManager = .text:0x8012F264; // type:function size:0x2A8 scope:global -__15FEGameWonScreenP21ScreenConstructorData = .text:0x8012F50C; // type:function size:0x2D8 scope:global -_._15FEGameWonScreen = .text:0x8012F7E4; // type:function size:0x30 scope:global -NotificationMessage__15FEGameWonScreenUlP8FEObjectUlUl = .text:0x8012F814; // type:function size:0x30 scope:global -QueuePackageSwitchForNextScreen__15FEGameWonScreen = .text:0x8012F844; // type:function size:0xE0 scope:global -Initialize__15FEGameWonScreen = .text:0x8012F924; // type:function size:0x10 scope:global -__11UnicodeFile = .text:0x8012F934; // type:function size:0x18 scope:global -_._11UnicodeFile = .text:0x8012F94C; // type:function size:0x40 scope:global -Load__11UnicodeFilePCc = .text:0x8012F98C; // type:function size:0x9C scope:global -Unload__11UnicodeFile = .text:0x8012FA28; // type:function size:0x40 scope:global -First__11UnicodeFile = .text:0x8012FA68; // type:function size:0x34 scope:global -Next__11UnicodeFile = .text:0x8012FA9C; // type:function size:0xB4 scope:global -FixEndian__11UnicodeFile = .text:0x8012FB50; // type:function size:0x48 scope:global -FixEOLs__11UnicodeFile = .text:0x8012FB98; // type:function size:0x40 scope:global -LineWrap__11UnicodeFilei = .text:0x8012FBD8; // type:function size:0xD0 scope:global -__9uiCreditsP21ScreenConstructorData = .text:0x8012FCA8; // type:function size:0xCC scope:global -NotificationMessage__9uiCreditsUlP8FEObjectUlUl = .text:0x8012FD74; // type:function size:0x3E4 scope:global -__19ControllerUnpluggedP21ScreenConstructorData = .text:0x80130158; // type:function size:0x50 scope:global -_._19ControllerUnplugged = .text:0x801301A8; // type:function size:0x30 scope:global -NotificationMessage__19ControllerUnpluggedUlP8FEObjectUlUl = .text:0x801301D8; // type:function size:0xAC scope:global -Setup__19ControllerUnplugged = .text:0x80130284; // type:function size:0x58 scope:global -__13cFEngJoyInput = .text:0x801302DC; // type:function size:0x88 scope:global -FlushActions__13cFEngJoyInput = .text:0x80130364; // type:function size:0x7C scope:global -JoyDisable__13cFEngJoyInput12JoystickPortb = .text:0x801303E0; // type:function size:0x98 scope:global -IsJoyPluggedIn__13cFEngJoyInput12JoystickPort = .text:0x80130478; // type:function size:0x28 scope:global -JoyEnable__13cFEngJoyInput12JoystickPortb = .text:0x801304A0; // type:function size:0xC0 scope:global -IsJoyEnabled__13cFEngJoyInput12JoystickPort = .text:0x80130560; // type:function size:0x7C scope:global -SetRequiredJoy__13cFEngJoyInput12JoystickPortb = .text:0x801305DC; // type:function size:0x38 scope:global -CheckUnplugged__13cFEngJoyInput = .text:0x80130614; // type:function size:0x1CC scope:global -HandleJoy__13cFEngJoyInput = .text:0x801307E0; // type:function size:0x300 scope:global -GetJoyPadMask__13cFEngJoyInputUc = .text:0x80130AE0; // type:function size:0x44 scope:global -FEngFindObject__FPCcUi = .text:0x80130B24; // type:function size:0x5C scope:global -FEngFindGroup__FPCcUi = .text:0x80130B80; // type:function size:0x38 scope:global -FEngSetInvisible__FP8FEObject = .text:0x80130BB8; // type:function size:0x74 scope:global -FEngSetVisible__FP8FEObject = .text:0x80130C2C; // type:function size:0x7C scope:global -FEngSetAllObjectsInPackageVisibility__FPCcb = .text:0x80130CA8; // type:function size:0x68 scope:global -FEngSetScript__FP8FEObjectUib = .text:0x80130D10; // type:function size:0x60 scope:global -FEngSetScript__FPCcUiUib = .text:0x80130D70; // type:function size:0x3C scope:global -FEngGetScript__FP8FEObjectUi = .text:0x80130DAC; // type:function size:0x30 scope:global -FEngGetScript__FPCcUiUi = .text:0x80130DDC; // type:function size:0x34 scope:global -FEngIsScriptSet__FPCcUiUi = .text:0x80130E10; // type:function size:0x34 scope:global -FEngIsScriptSet__FP8FEObjectUi = .text:0x80130E44; // type:function size:0x30 scope:global -FEngIsScriptRunning__FPCcUiUi = .text:0x80130E74; // type:function size:0x34 scope:global -FEngIsScriptRunning__FP8FEObjectUi = .text:0x80130EA8; // type:function size:0x3C scope:global -FEngSetRotationZ__FP8FEObjectf = .text:0x80130EE4; // type:function size:0xC0 scope:global -FEngSetMultiImageRot__FP12FEMultiImagef = .text:0x80130FA4; // type:function size:0x20 scope:global -FEngSetMultiImageBottomRightUVs__FP12FEMultiImageR9FEVector2i = .text:0x80130FC4; // type:function size:0x9C scope:global -FEngGetTopLeft__FP8FEObjectRfT1 = .text:0x80131060; // type:function size:0x1A4 scope:global -FEngSetTopLeft__FP8FEObjectff = .text:0x80131204; // type:function size:0x174 scope:global -FEngGetBottomRight__FP8FEObjectRfT1 = .text:0x80131378; // type:function size:0x1A4 scope:global -FEngSetBottomRight__FP8FEObjectff = .text:0x8013151C; // type:function size:0xE4 scope:global -FEngGetCenter__FP8FEObjectRfT1 = .text:0x80131600; // type:function size:0x190 scope:global -FEngSetCenter__FP8FEObjectff = .text:0x80131790; // type:function size:0x158 scope:global -FEngGetScaleX__FP8FEObject = .text:0x801318E8; // type:function size:0xC4 scope:global -FEngGetScaleY__FP8FEObject = .text:0x801319AC; // type:function size:0xC4 scope:global -FEngSetScaleX__FP8FEObjectf = .text:0x80131A70; // type:function size:0x100 scope:global -FEngSetScaleY__FP8FEObjectf = .text:0x80131B70; // type:function size:0x100 scope:global -FEngGetSize__FP8FEObjectRfT1 = .text:0x80131C70; // type:function size:0xF8 scope:global -FEngSetSize__FP8FEObjectff = .text:0x80131D68; // type:function size:0x6C scope:global -FEngGetBottomRightUV__FP7FEImageRfT1 = .text:0x80131DD4; // type:function size:0xAC scope:global -FEngSetBottomRightUV__FP7FEImageff = .text:0x80131E80; // type:function size:0xC0 scope:global -FEngSetColor__FP8FEObjectUi = .text:0x80131F40; // type:function size:0x44 scope:global -FEngGetObjectColor__FP8FEObject = .text:0x80131F84; // type:function size:0x68 scope:global -FixInvertedRect__FR6FERect = .text:0x80131FEC; // type:function size:0x3C scope:global -FEngTestForIntersection__FffP8FEObject = .text:0x80132028; // type:function size:0xC8 scope:global -FEngGet2DExtentsForMouse__FP8FEObjectR6FERectG9FEVector2 = .text:0x801320F0; // type:function size:0x200 scope:global -FEngFindImage__FPCci = .text:0x801322F0; // type:function size:0x38 scope:global -FEngGetTextureHash__FP7FEImage = .text:0x80132328; // type:function size:0x18 scope:global -FEngSetTextureHash__FP7FEImageUi = .text:0x80132340; // type:function size:0x28 scope:global -FEngSetButtonTexture__FP7FEImageUi = .text:0x80132368; // type:function size:0x28 scope:global -FEngFindString__FPCci = .text:0x80132390; // type:function size:0x38 scope:global -FEngSetLanguageHash__FP8FEStringUi = .text:0x801323C8; // type:function size:0x78 scope:global -FEngSetLanguageHash__FPCcUiUi = .text:0x80132440; // type:function size:0x98 scope:global -FESetString__FP8FEStringPCs = .text:0x801324D8; // type:function size:0x50 scope:global -DoFEngPrintf__FP8FEStringPci = .text:0x80132528; // type:function size:0x6C scope:local -DoFEngPrintf__FP8FEStringPCcP13__va_list_tag = .text:0x80132594; // type:function size:0x54 scope:local -FEPrintf__FP8FEStringPCce = .text:0x801325E8; // type:function size:0xAC scope:global -FEPrintf__FPCciT0e = .text:0x80132694; // type:function size:0x148 scope:global -FEPrintf__FPCcP8FEObjectT0e = .text:0x801327DC; // type:function size:0x138 scope:global -FEngSNPrintf__FPciPCce = .text:0x80132914; // type:function size:0x94 scope:global -FEngSetMovieName__FP7FEMoviePCc = .text:0x801329A8; // type:function size:0x44 scope:global -FEngSetCurrentButton__FPCcUi = .text:0x801329EC; // type:function size:0x8C scope:global -FEngGetCurrentButton__FPCc = .text:0x80132A78; // type:function size:0x48 scope:global -FEngSetButtonState__FPCcUib = .text:0x80132AC0; // type:function size:0xA8 scope:global -GetMovieNameEnum__FPCc = .text:0x80132B68; // type:function size:0x68 scope:local -CalculateMovieFilename__FPciPCc10eLanguages = .text:0x80132BD0; // type:function size:0xB0 scope:local -Callback__16FEngMovieStarterP8FEObject = .text:0x80132C80; // type:function size:0x174 scope:global -Callback__16FEngMovieStopperP8FEObject = .text:0x80132DF4; // type:function size:0x4C scope:global -Callback__17FEngHidePCObjectsP8FEObject = .text:0x80132E40; // type:function size:0x60 scope:global -Callback__27FEngTransferFlagsToChildrenP8FEObject = .text:0x80132EA0; // type:function size:0x98 scope:global -Callback__22RenderObjectDisconnectP8FEObject = .text:0x80132F38; // type:function size:0x2C scope:global -Callback__17ObjectDirtySetterP8FEObject = .text:0x80132F64; // type:function size:0x40 scope:global -Callback__22ObjectVisibilitySetterP8FEObject = .text:0x80132FA4; // type:function size:0x3C scope:global -GetBaseName__FPcPCc = .text:0x80132FE0; // type:function size:0xAC scope:local -__18cFEngGameInterface = .text:0x8013308C; // type:function size:0x24 scope:global -_._18cFEngGameInterface = .text:0x801330B0; // type:function size:0x34 scope:global -LoadResources__18cFEngGameInterfaceP9FEPackagelP17FEResourceRequest = .text:0x801330E4; // type:function size:0xF0 scope:global -UnloadResources__18cFEngGameInterfaceP9FEPackagelP17FEResourceRequest = .text:0x801331D4; // type:function size:0x64 scope:global -NotificationMessage__18cFEngGameInterfaceUlP8FEObjectUlUl = .text:0x80133238; // type:function size:0x6C scope:global -NotifySoundMessage__18cFEngGameInterfaceUlP8FEObjectUlUl = .text:0x801332A4; // type:function size:0x4C scope:global -GenerateRenderContext__18cFEngGameInterfaceUsP8FEObject = .text:0x801332F0; // type:function size:0x28 scope:global -GetContextTransform__18cFEngGameInterfaceUsR9FEMatrix4 = .text:0x80133318; // type:function size:0xD8 scope:global -RenderObject__18cFEngGameInterfaceP8FEObject = .text:0x801333F0; // type:function size:0xC4 scope:global -GetViewTransformation__18cFEngGameInterfaceP9FEMatrix4 = .text:0x801334B4; // type:function size:0x24 scope:global -BeginPackageRendering__18cFEngGameInterfaceP9FEPackage = .text:0x801334D8; // type:function size:0xB0 scope:global -EndPackageRendering__18cFEngGameInterfaceP9FEPackage = .text:0x80133588; // type:function size:0x28 scope:global -PackageWasLoaded__18cFEngGameInterfaceP9FEPackage = .text:0x801335B0; // type:function size:0x124 scope:global -PackageWillUnload__18cFEngGameInterfaceP9FEPackage = .text:0x801336D4; // type:function size:0x90 scope:global -HackClearCache__FP9FEPackage = .text:0x80133764; // type:function size:0x60 scope:global -GetPackageData__18cFEngGameInterfacePCcPPUcRb = .text:0x801337C4; // type:function size:0x3C scope:global -GetJoyPadMask__18cFEngGameInterfaceUc = .text:0x80133800; // type:function size:0x28 scope:global -GetMouseInfo__18cFEngGameInterfaceR11FEMouseInfo = .text:0x80133828; // type:function size:0x4 scope:global -DoesPointTouchObject__18cFEngGameInterfaceffP8FEObject = .text:0x8013382C; // type:function size:0x24 scope:global -OutputWarning__18cFEngGameInterfacePCc17FEng_WarningLevel = .text:0x80133850; // type:function size:0x4 scope:global -Init__5cFEng = .text:0x80133854; // type:function size:0x4C scope:global -__5cFEng = .text:0x801338A0; // type:function size:0x70 scope:global -PushErrorPackage__5cFEngPCciUl = .text:0x80133910; // type:function size:0x14C scope:global -PopErrorPackage__5cFEng = .text:0x80133A5C; // type:function size:0xD0 scope:global -PopErrorPackage__5cFEngi = .text:0x80133B2C; // type:function size:0xB0 scope:global -PauseAllSystems__5cFEng = .text:0x80133BDC; // type:function size:0x64 scope:global -ResumeAllSystems__5cFEngb = .text:0x80133C40; // type:function size:0x84 scope:global -QueuePackagePush__5cFEngPCciUlb = .text:0x80133CC4; // type:function size:0xF4 scope:global -QueuePackagePop__5cFEngi = .text:0x80133DB8; // type:function size:0xE8 scope:global -QueuePackageSwitch__5cFEngPCciUlb = .text:0x80133EA0; // type:function size:0xFC scope:global -PushNoControlPackage__5cFEngPCc19FE_PACKAGE_PRIORITY = .text:0x80133F9C; // type:function size:0x2C scope:global -PopNoControlPackage__5cFEngPCc = .text:0x80133FC8; // type:function size:0x44 scope:global -Service__5cFEng = .text:0x8013400C; // type:function size:0x74 scope:global -ServiceFengOnly__5cFEng = .text:0x80134080; // type:function size:0x2C scope:global -DrawForeground__5cFEng = .text:0x801340AC; // type:function size:0x24 scope:global -FindPackageWithControl__5cFEng = .text:0x801340D0; // type:function size:0x38 scope:global -FindPackageAtBase__5cFEng = .text:0x80134108; // type:function size:0x1C scope:global -FindPackageActive__5cFEngPCc = .text:0x80134124; // type:function size:0x28 scope:global -FindPackageIdle__5cFEngPCc = .text:0x8013414C; // type:function size:0x24 scope:global -FindPackage__5cFEngPCc = .text:0x80134170; // type:function size:0x9C scope:global -IsPackagePushed__5cFEngPCc = .text:0x8013420C; // type:function size:0x70 scope:global -IsPackageInControl__5cFEngPCc = .text:0x8013427C; // type:function size:0x50 scope:global -PrintLoadedPackages__5cFEng = .text:0x801342CC; // type:function size:0x4 scope:global -QueueMessage__5cFEngUiPCcP8FEObjectUi = .text:0x801342D0; // type:function size:0xA4 scope:global -QueueGameMessage__5cFEngUiPCcUi = .text:0x80134374; // type:function size:0x28 scope:global -QueueGameMessagePkg__5cFEngUiP9FEPackage = .text:0x8013439C; // type:function size:0x34 scope:global -QueuePackageMessage__5cFEngUiPCcP8FEObject = .text:0x801343D0; // type:function size:0x3C scope:global -QueueSoundMessage__5cFEngUiPCc = .text:0x8013440C; // type:function size:0x54 scope:global -MakeLoadedPackagesDirty__5cFEng = .text:0x80134460; // type:function size:0x78 scope:global -__9FEManager = .text:0x801344D8; // type:function size:0x5C scope:global -Init__9FEManager = .text:0x80134534; // type:function size:0x98 scope:global -InitInput__9FEManager = .text:0x801345CC; // type:function size:0x38 scope:global -Get__9FEManager = .text:0x80134604; // type:function size:0xC scope:global -GetGarageType__9FEManager = .text:0x80134610; // type:function size:0x8 scope:global -SetGarageType__9FEManager11eGarageType = .text:0x80134618; // type:function size:0x38 scope:global -GetGarageNameFromType__9FEManager = .text:0x80134650; // type:function size:0x90 scope:global -GetGaragePrefixFromType__9FEManager11eGarageType = .text:0x801346E0; // type:function size:0x7C scope:global -IsOkayToRequestPauseSimulation__9FEManageribT2 = .text:0x8013475C; // type:function size:0x2F0 scope:global -ShouldPauseSimulation__9FEManagerb = .text:0x80134A4C; // type:function size:0x90 scope:global -RequestPauseSimulation__9FEManagerPCc = .text:0x80134ADC; // type:function size:0x24 scope:global -RequestUnPauseSimulation__9FEManagerPCc = .text:0x80134B00; // type:function size:0x14 scope:global -WantControllerError__9FEManageri = .text:0x80134B14; // type:function size:0x190 scope:global -WaitingForControllerError__9FEManager = .text:0x80134CA4; // type:function size:0x34 scope:global -StartFE__9FEManager = .text:0x80134CD8; // type:function size:0x108 scope:global -StopFE__9FEManager = .text:0x80134DE0; // type:function size:0x54 scope:global -Render__9FEManager = .text:0x80134E34; // type:function size:0x38 scope:global -SteeringWheels_StopAllForces__Fv = .text:0x80134E6C; // type:function size:0xB0 scope:global -GetPortsPlayer__Fi = .text:0x80134F1C; // type:function size:0x54 scope:global -Update__9FEManager = .text:0x80134F70; // type:function size:0x36C scope:global -SetEATraxSecondButton__9FEManager = .text:0x801352DC; // type:function size:0xCC scope:global -__16FEAnyMovieScreenP21ScreenConstructorData = .text:0x801353A8; // type:function size:0xF8 scope:global -_._16FEAnyMovieScreen = .text:0x801354A0; // type:function size:0xA8 scope:global -Create__16FEAnyMovieScreenP21ScreenConstructorData = .text:0x80135548; // type:function size:0x38 scope:global -NotificationMessage__16FEAnyMovieScreenUlP8FEObjectUlUl = .text:0x80135580; // type:function size:0xB0 scope:global -LaunchMovie__16FEAnyMovieScreenPCcT1 = .text:0x80135630; // type:function size:0x68 scope:global -PlaySafehouseIntroMovie__16FEAnyMovieScreen = .text:0x80135698; // type:function size:0x40 scope:global -DismissMovie__16FEAnyMovieScreen = .text:0x801356D8; // type:function size:0x8C scope:global -SetMovieName__16FEAnyMovieScreenPCc = .text:0x80135764; // type:function size:0x30 scope:global -GetFEngPackageName__16FEAnyMovieScreen = .text:0x80135794; // type:function size:0x3C scope:global -__19FEAnyTutorialScreenP21ScreenConstructorData = .text:0x801357D0; // type:function size:0x2BC scope:global -Create__19FEAnyTutorialScreenP21ScreenConstructorData = .text:0x80135A8C; // type:function size:0x38 scope:global -_._19FEAnyTutorialScreen = .text:0x80135AC4; // type:function size:0x58 scope:global -NotificationMessage__19FEAnyTutorialScreenUlP8FEObjectUlUl = .text:0x80135B1C; // type:function size:0x94 scope:global -LaunchMovie__19FEAnyTutorialScreenPCcT1 = .text:0x80135BB0; // type:function size:0x68 scope:global -DismissMovie__19FEAnyTutorialScreenb = .text:0x80135C18; // type:function size:0x5C scope:global -SetMovieName__19FEAnyTutorialScreenPCc = .text:0x80135C74; // type:function size:0x30 scope:global -SetPackageName__19FEAnyTutorialScreenPCc = .text:0x80135CA4; // type:function size:0x3C scope:global -GamecubeMaybeAllocateFromCarLoader__FiPCci = .text:0x80135CE0; // type:function size:0xA0 scope:global -MoviePlayer_Bypass__Fv = .text:0x80135D80; // type:function size:0x3C scope:global -MoviePlayer_Play__Fv = .text:0x80135DBC; // type:function size:0x48 scope:global -Alloc__20ShapeMemoryAllocatorUiRCQ22EA12TagValuePair = .text:0x80135E04; // type:function size:0x10C scope:global -Free__20ShapeMemoryAllocatorPvUi = .text:0x80135F10; // type:function size:0x80 scope:global -AddRef__20ShapeMemoryAllocator = .text:0x80135F90; // type:function size:0x14 scope:global -Release__20ShapeMemoryAllocator = .text:0x80135FA4; // type:function size:0x5C scope:global -RCMP_PlayerAllocAlign__FPCciiii = .text:0x80136000; // type:function size:0xC8 scope:global -RCMP_PlayerFree__FPv = .text:0x801360C8; // type:function size:0x80 scope:global -MoviePlayer_StartUp__Fv = .text:0x80136148; // type:function size:0x48 scope:global -MoviePlayer_ShutDown__Fv = .text:0x80136190; // type:function size:0x5C scope:global -__11MoviePlayeri = .text:0x801361EC; // type:function size:0xF0 scope:global -_._11MoviePlayer = .text:0x801362DC; // type:function size:0x6C scope:global -Init__11MoviePlayerRQ211MoviePlayer8Settings = .text:0x80136348; // type:function size:0xA0 scope:global -ResetTimer__11MoviePlayer = .text:0x801363E8; // type:function size:0x34 scope:global -Play__11MoviePlayer = .text:0x8013641C; // type:function size:0x154 scope:global -Stop__11MoviePlayer = .text:0x80136570; // type:function size:0x30 scope:global -GetMovieCategoryVolume__11MoviePlayer = .text:0x801365A0; // type:function size:0xB4 scope:global -GetFirstFrame__11MoviePlayer = .text:0x80136654; // type:function size:0x50 scope:global -Update__11MoviePlayer = .text:0x801366A4; // type:function size:0x12C scope:global -UpdateFunction__11MoviePlayer = .text:0x801367D0; // type:function size:0xFC scope:global -GetMillisecondsPerFrame__11MoviePlayer = .text:0x801368CC; // type:function size:0x30 scope:global -HandleFatalError__11MoviePlayer = .text:0x801368FC; // type:function size:0x4 scope:global -GiveTheMoviePlayerBandwidth__Fv = .text:0x80136900; // type:function size:0x2C scope:global -__9SubTitler = .text:0x8013692C; // type:function size:0x3C scope:global -_._9SubTitler = .text:0x80136968; // type:function size:0x4C scope:global -ShouldShowSubTitles__9SubTitlerPCc = .text:0x801369B4; // type:function size:0x48 scope:global -BeginningMovie__9SubTitlerPCcT1 = .text:0x801369FC; // type:function size:0x58 scope:global -Load__9SubTitlerPCcT1 = .text:0x80136A54; // type:function size:0x190 scope:global -Unload__9SubTitler = .text:0x80136BE4; // type:function size:0x40 scope:global -GetElapsedTime__9SubTitler = .text:0x80136C24; // type:function size:0x74 scope:global -Update__9SubTitlerUi = .text:0x80136C98; // type:function size:0x130 scope:global -Start__9SubTitler = .text:0x80136DC8; // type:function size:0x30 scope:global -NotifyFirstFrame__9SubTitler = .text:0x80136DF8; // type:function size:0x30 scope:global -RefreshText__9SubTitler = .text:0x80136E28; // type:function size:0x228 scope:global -SetIsTutorialMovie__9SubTitlerPCc = .text:0x80137050; // type:function size:0xB4 scope:global -CreateUIProfileManager__FP21ScreenConstructorData = .text:0x80137104; // type:function size:0x38 scope:global -__16UIProfileManagerP21ScreenConstructorData = .text:0x8013713C; // type:function size:0x6C scope:global -Refresh__16UIProfileManager = .text:0x801371A8; // type:function size:0x100 scope:global -NotificationMessage__16UIProfileManagerUlP8FEObjectUlUl = .text:0x801372A8; // type:function size:0xB0 scope:global -Setup__16UIProfileManager = .text:0x80137358; // type:function size:0x174 scope:global -CreateUIDeleteProfile__FP21ScreenConstructorData = .text:0x801374CC; // type:function size:0x38 scope:global -__15UIDeleteProfileP21ScreenConstructorData = .text:0x80137504; // type:function size:0x6C scope:global -Setup__15UIDeleteProfile = .text:0x80137570; // type:function size:0xF0 scope:global -Refresh__15UIDeleteProfile = .text:0x80137660; // type:function size:0xD0 scope:global -NotificationMessage__15UIDeleteProfileUlP8FEObjectUlUl = .text:0x80137730; // type:function size:0x7C scope:global -CaptureJoyOp__F27MemoryCardJoyLoggableEvents = .text:0x801377AC; // type:function size:0x28 scope:global -ReplayJoyOp__Fv = .text:0x801377D4; // type:function size:0x3C scope:global -Delete__Q211RealmcIface16MemcardInterfacePCcPCw = .text:0x80137810; // type:function size:0x20 scope:global -__Q211RealmcIface8GameInfoPCwUibT3 = .text:0x80137830; // type:function size:0x20 scope:global -Load__Q211RealmcIface16MemcardInterfacePCcPcT2PCwPCQ211RealmcIface9TitleInfo = .text:0x80137850; // type:function size:0x20 scope:global -InitMemoryCard__Fv = .text:0x80137870; // type:function size:0x8C scope:global -__17MemoryCardMessagePCwUiPPCw = .text:0x801378FC; // type:function size:0x6C scope:global -__10MemoryCard = .text:0x80137968; // type:function size:0x14C scope:global -IsCardAvailable__10MemoryCard = .text:0x80137AB4; // type:function size:0x3C scope:global -SetExtraParam__10MemoryCardQ210MemoryCard8SaveTypePCcPvUi = .text:0x80137AF0; // type:function size:0x24 scope:global -InitCommand__10MemoryCardi = .text:0x80137B14; // type:function size:0x18 scope:global -RequestTask__10MemoryCardiPCc = .text:0x80137B2C; // type:function size:0xC scope:global -ProcessTask__10MemoryCard = .text:0x80137B38; // type:function size:0x94 scope:global -IsCardBusy__10MemoryCard = .text:0x80137BCC; // type:function size:0x7C scope:global -Init__10MemoryCard = .text:0x80137C48; // type:function size:0x1D0 scope:global -StartBootSequence__10MemoryCard = .text:0x80137E18; // type:function size:0x40 scope:global -EndBootSequence__10MemoryCard = .text:0x80137E58; // type:function size:0x38 scope:global -LoadLocale__10MemoryCard10eLanguages = .text:0x80137E90; // type:function size:0x140 scope:global -GetPrefixLength__10MemoryCard = .text:0x80137FD0; // type:function size:0x28 scope:global -GetPrefix__10MemoryCard = .text:0x80137FF8; // type:function size:0x24 scope:global -GetLocaleString__10MemoryCardi = .text:0x8013801C; // type:function size:0x30 scope:global -SetMessageMode__10MemoryCardUib = .text:0x8013804C; // type:function size:0x40 scope:global -Tick__10MemoryCardi = .text:0x8013808C; // type:function size:0x1F8 scope:global -MessageDone__10MemoryCardQ211RealmcIface14MessageChoices = .text:0x80138284; // type:function size:0x44 scope:global -BootupCheck__10MemoryCardPCc = .text:0x801382C8; // type:function size:0xB0 scope:global -ShouldDoAutoSave__10MemoryCardb = .text:0x80138378; // type:function size:0xE8 scope:global -StartAutoSave__10MemoryCardb = .text:0x80138460; // type:function size:0xB0 scope:global -DoAutoSave__10MemoryCard = .text:0x80138510; // type:function size:0x84 scope:global -EndAutoSave__10MemoryCard = .text:0x80138594; // type:function size:0x64 scope:global -StartListingOldSaveFiles__10MemoryCard = .text:0x801385F8; // type:function size:0x28 scope:global -EndListingOldSaveFiles__10MemoryCard = .text:0x80138620; // type:function size:0xA0 scope:global -SetMonitor__10MemoryCardb = .text:0x801386C0; // type:function size:0x70 scope:global -SetAutoSaveEnabled__10MemoryCardb = .text:0x80138730; // type:function size:0x17C scope:global -ShowOnlyAutoSaveMessages__10MemoryCard = .text:0x801388AC; // type:function size:0x124 scope:global -ShowMessages__10MemoryCardb = .text:0x801389D0; // type:function size:0x3C scope:global -CheckCard__10MemoryCardi = .text:0x80138A0C; // type:function size:0x48 scope:global -Save__10MemoryCardPCc = .text:0x80138A54; // type:function size:0x110 scope:global -List__10MemoryCardPCcPQ211RealmcIface9TitleInfo = .text:0x80138B64; // type:function size:0xA4 scope:global -Load__10MemoryCardPCc = .text:0x80138C08; // type:function size:0x100 scope:global -Delete__10MemoryCardPCc = .text:0x80138D08; // type:function size:0x8C scope:global -ListOldSaveFilesNGC__10MemoryCard = .text:0x80138D94; // type:function size:0x64 scope:global -ReleasePendingMessage__10MemoryCard = .text:0x80138DF8; // type:function size:0x40 scope:global -HandleAutoSaveError__10MemoryCard = .text:0x80138E38; // type:function size:0x64 scope:global -HandleAutoSaveOverwriteMessage__10MemoryCard = .text:0x80138E9C; // type:function size:0x64 scope:global -ShowAutoSaveIcon__10MemoryCard = .text:0x80138F00; // type:function size:0x1A4 scope:global -HideAutoSaveIcon__10MemoryCard = .text:0x801390A4; // type:function size:0x8C scope:global -IsAutoSaveIconVisible__10MemoryCard = .text:0x80139130; // type:function size:0xAC scope:global -DisplayStatus__Fi = .text:0x801391DC; // type:function size:0x4 scope:global -GetMemcard__16MemcardCallbacks = .text:0x801391E0; // type:function size:0xC scope:global -GetScreen__16MemcardCallbacks = .text:0x801391EC; // type:function size:0x10 scope:global -ShowMessage__16MemcardCallbacksPCwUiPPCw = .text:0x801391FC; // type:function size:0x1EC scope:global -ClearMessage__16MemcardCallbacks = .text:0x801393E8; // type:function size:0x88 scope:global -BootupCheckDone__16MemcardCallbacksQ211RealmcIface10CardStatusGQ211RealmcIface18BootupCheckResults = .text:0x80139470; // type:function size:0x1C8 scope:global -SaveCheckDone__16MemcardCallbacksQ211RealmcIface10TaskResultQ211RealmcIface10CardStatus = .text:0x80139638; // type:function size:0x38 scope:global -SaveDone__16MemcardCallbacksPCc = .text:0x80139670; // type:function size:0x21C scope:global -CheckLoadedData__16MemcardCallbacksPCc = .text:0x8013988C; // type:function size:0x3C scope:global -LoadDone__16MemcardCallbacksPCc = .text:0x801398C8; // type:function size:0x32C scope:global -DeleteDone__16MemcardCallbacksPCc = .text:0x80139BF4; // type:function size:0xD0 scope:global -ClearEntries__16MemcardCallbacks = .text:0x80139CC4; // type:function size:0x38 scope:global -FoundEntry__16MemcardCallbacksPCQ211RealmcIface9EntryInfo = .text:0x80139CFC; // type:function size:0x200 scope:global -FindEntriesDone__16MemcardCallbacksQ211RealmcIface10CardStatus = .text:0x80139EFC; // type:function size:0x140 scope:global -Retry__16MemcardCallbacksQ211RealmcIface10CardStatus = .text:0x8013A03C; // type:function size:0x94 scope:global -Failed__16MemcardCallbacksQ211RealmcIface10TaskResultQ211RealmcIface10CardStatus = .text:0x8013A0D0; // type:function size:0x47C scope:global -CardChanged__16MemcardCallbacksQ211RealmcIface10TaskResultQ211RealmcIface10CardStatus = .text:0x8013A54C; // type:function size:0x78 scope:global -CardChecked__16MemcardCallbacksPCQ211RealmcIface8CardInfo = .text:0x8013A5C4; // type:function size:0x29C scope:global -CardRemoved__16MemcardCallbacks = .text:0x8013A860; // type:function size:0x118 scope:global -SetAutosaveDone__16MemcardCallbacksQ211RealmcIface10TaskResultQ211RealmcIface10CardStatusQ211RealmcIface13AutosaveState = .text:0x8013A978; // type:function size:0x2A0 scope:global -SetMonitorDone__16MemcardCallbacksQ211RealmcIface10CardStatusQ211RealmcIface12MonitorState = .text:0x8013AC18; // type:function size:0x120 scope:global -LoadReady__16MemcardCallbacksPCcUiUiRPcT4 = .text:0x8013AD38; // type:function size:0xD4 scope:global -EmulateMemoryCardLibrary__10IJoyHelperi = .text:0x8013AE0C; // type:function size:0x2DC scope:global -DisplayUnicode__FPCw = .text:0x8013B0E8; // type:function size:0x1C scope:global -DisplayMessage__FPCwUiPPCw = .text:0x8013B104; // type:function size:0x5C scope:global -NotificationMessage__13UIMemcardBootUlP8FEObjectUlUl = .text:0x8013B160; // type:function size:0x110 scope:global -NotifySoundMessage__13UIMemcardBootUl18eMenuSoundTriggers = .text:0x8013B270; // type:function size:0x8 scope:global -CreateMemCardBootScreen__FP21ScreenConstructorData = .text:0x8013B278; // type:function size:0x80 scope:global -CreateMemcardMainMenu__FP21ScreenConstructorData = .text:0x8013B2F8; // type:function size:0x58 scope:global -__13UIMemcardMainP21ScreenConstructorData = .text:0x8013B350; // type:function size:0x5C scope:global -DoSelect__13UIMemcardMainPCc = .text:0x8013B3AC; // type:function size:0x94 scope:global -ListDone__13UIMemcardMain = .text:0x8013B440; // type:function size:0x1DC scope:global -NotificationMessage__13UIMemcardMainUlP8FEObjectUlUl = .text:0x8013B61C; // type:function size:0x42C scope:global -__17UIMemcardKeyboardP21ScreenConstructorData = .text:0x8013BA48; // type:function size:0xAC scope:global -Setup__17UIMemcardKeyboard = .text:0x8013BAF4; // type:function size:0x94 scope:global -ShowKeyboard__17UIMemcardKeyboard = .text:0x8013BB88; // type:function size:0x8C scope:global -NotificationMessage__17UIMemcardKeyboardUlP8FEObjectUlUl = .text:0x8013BC14; // type:function size:0x48 scope:global -__13UIMemcardBaseP21ScreenConstructorData = .text:0x8013BC5C; // type:function size:0x74 scope:global -_._13UIMemcardBase = .text:0x8013BCD0; // type:function size:0xF4 scope:global -Abort__13UIMemcardBase = .text:0x8013BDC4; // type:function size:0x38 scope:global -AddItem__13UIMemcardBasePCcT1ii = .text:0x8013BDFC; // type:function size:0x8C scope:global -IsProfile__13UIMemcardBasePCc = .text:0x8013BE88; // type:function size:0x34 scope:global -EmptyFileList__13UIMemcardBase = .text:0x8013BEBC; // type:function size:0x54 scope:global -InitCompleteDoList__13UIMemcardBase = .text:0x8013BF10; // type:function size:0x9C scope:global -InitComplete__13UIMemcardBase = .text:0x8013BFAC; // type:function size:0x3D0 scope:global -ExitComplete__13UIMemcardBase = .text:0x8013C37C; // type:function size:0x454 scope:global -NotifySoundMessage__13UIMemcardBaseUl18eMenuSoundTriggers = .text:0x8013C7D0; // type:function size:0x38 scope:global -NotificationMessage__13UIMemcardBaseUlP8FEObjectUlUl = .text:0x8013C808; // type:function size:0x2DC scope:global -HandleButtonPressed__13UIMemcardBaseUlP8FEObjectUlUlb = .text:0x8013CAE4; // type:function size:0x484 scope:global -HideAllButtons__13UIMemcardBase = .text:0x8013CF68; // type:function size:0x70 scope:global -ShowButton__13UIMemcardBaseibPs = .text:0x8013CFD8; // type:function size:0x108 scope:global -SetButtonText__13UIMemcardBasePsN21 = .text:0x8013D0E0; // type:function size:0x154 scope:global -SetMessage__13UIMemcardBasePs = .text:0x8013D234; // type:function size:0x7C scope:global -ShowOK__13UIMemcardBaseUiUi = .text:0x8013D2B0; // type:function size:0xF4 scope:global -ShowYesNo__13UIMemcardBaseUiUi = .text:0x8013D3A4; // type:function size:0x10C scope:global -SetScreenVisible__13UIMemcardBasebi = .text:0x8013D4B0; // type:function size:0xF0 scope:global -SetIcon__13UIMemcardBaseUi = .text:0x8013D5A0; // type:function size:0x5C scope:global -TranslateButton__13UIMemcardBaseP8FEObject = .text:0x8013D5FC; // type:function size:0x9C scope:global -SetupPromptNoProfileFound__13UIMemcardBase = .text:0x8013D698; // type:function size:0x2C scope:global -SetupPromptSaveConfirm__13UIMemcardBase = .text:0x8013D6C4; // type:function size:0xB0 scope:global -SetupAutoSaveConfirmPrompt__13UIMemcardBase = .text:0x8013D774; // type:function size:0x190 scope:global -SetupPromptForSave__13UIMemcardBase = .text:0x8013D904; // type:function size:0x80 scope:global -SetupPromptCorruptProfile__13UIMemcardBase = .text:0x8013D984; // type:function size:0x64 scope:global -SetupPromptAutoSaveEnableFailedNoCard__13UIMemcardBase = .text:0x8013D9E8; // type:function size:0x2C scope:global -Setup__13UIMemcardBase = .text:0x8013DA14; // type:function size:0x6C scope:global -SetStringCheckingCard__13UIMemcardBase = .text:0x8013DA80; // type:function size:0x7C scope:global -ShowKeyboard__13UIMemcardBase = .text:0x8013DAFC; // type:function size:0x44 scope:global -DoSaveFlow__13UIMemcardBasei = .text:0x8013DB40; // type:function size:0x220 scope:global -SetMessageBlurbText__13UIMemcardBasePs = .text:0x8013DD60; // type:function size:0x54 scope:global -SetMessageBlurbText__13UIMemcardBasePc = .text:0x8013DDB4; // type:function size:0x68 scope:global -SetMessageBlurbText__13UIMemcardBaseUi = .text:0x8013DE1C; // type:function size:0x68 scope:global -FindScreenSize__13UIMemcardBasePCw = .text:0x8013DE84; // type:function size:0xF0 scope:global -GetAutoSaveWarning__13UIMemcardBase = .text:0x8013DF74; // type:function size:0xC scope:global -GetAutoSaveWarning2__13UIMemcardBase = .text:0x8013DF80; // type:function size:0xC scope:global -ShowMessage__13UIMemcardBaseP17MemoryCardMessage = .text:0x8013DF8C; // type:function size:0x3C scope:global -ShowMessage__13UIMemcardBasePCwUiT1N21 = .text:0x8013DFC8; // type:function size:0x13C scope:global -ActivateChild__13UIMemcardBase = .text:0x8013E104; // type:function size:0x2C scope:global -PopChild__13UIMemcardBase = .text:0x8013E130; // type:function size:0x64 scope:global -HandleAutoSaveError__13UIMemcardBase = .text:0x8013E194; // type:function size:0x114 scope:global -HandleAutoSaveOverwriteMessage__13UIMemcardBase = .text:0x8013E2A8; // type:function size:0x98 scope:global -__13UIMemcardListP21ScreenConstructorData = .text:0x8013E340; // type:function size:0x26C scope:global -_._13UIMemcardList = .text:0x8013E5AC; // type:function size:0xE4 scope:global -CreateMemcardListFiles__FP21ScreenConstructorData = .text:0x8013E690; // type:function size:0x4C scope:global -NotificationMessage__13UIMemcardListUlP8FEObjectUlUl = .text:0x8013E6DC; // type:function size:0x328 scope:global -AddItem__13UIMemcardListPCcT1ii = .text:0x8013EA04; // type:function size:0x11C scope:global -MemcardEnter__FPCcT0UiPFPv_vPvUiUi = .text:0x8013EB20; // type:function size:0x120 scope:global -MemcardExit__FUi = .text:0x8013EC40; // type:function size:0xB0 scope:global -MemcardGetCurrentUIOperation__Fv = .text:0x8013ECF0; // type:function size:0x10 scope:global -__static_initialization_and_destruction_0 = .text:0x8013ED00; // type:function size:0xDC scope:local -__as__9FEVector2RC9FEVector2 = .text:0x8013EDDC; // type:function size:0x18 scope:global -__as__9FEVector3RC9FEVector3 = .text:0x8013EDF4; // type:function size:0x20 scope:global -SetTime__5Timerf = .text:0x8013EE14; // type:function size:0x30 scope:global -_._16FEObjectCallback = .text:0x8013EE44; // type:function size:0x34 scope:global -UnloadUnreferencedLibrary__15FEGameInterfaceP9FEPackage = .text:0x8013EE78; // type:function size:0x8 scope:global -RenderObjectList__15FEGameInterfaceP17FEObjectListEntryUl = .text:0x8013EE80; // type:function size:0x60 scope:global -DrawMousePointer__15FEGameInterfaceR7FEMouse = .text:0x8013EEE0; // type:function size:0x4 scope:global -SetCellData__15FEGameInterfaceP13FECodeListBoxUlUl = .text:0x8013EEE4; // type:function size:0x8 scope:global -DebugMessageQueued__15FEGameInterfaceUlP8FEObjectP9FEPackageT2Ul = .text:0x8013EEEC; // type:function size:0x4 scope:global -DebugMessageProcessed__15FEGameInterfaceUlP8FEObjectT2P9FEPackageUl = .text:0x8013EEF0; // type:function size:0x4 scope:global -DebugMessageBeginUpdate__15FEGameInterface = .text:0x8013EEF4; // type:function size:0x4 scope:global -DebugMessageEndUpdate__15FEGameInterface = .text:0x8013EEF8; // type:function size:0x4 scope:global -Enable__8FEWidget = .text:0x8013EEFC; // type:function size:0xC scope:global -Disable__8FEWidget = .text:0x8013EF08; // type:function size:0xC scope:global -SetPosX__8FEWidgetf = .text:0x8013EF14; // type:function size:0x20 scope:global -SetPosY__8FEWidgetf = .text:0x8013EF34; // type:function size:0x20 scope:global -_._6UIMain = .text:0x8013EF54; // type:function size:0x98 scope:global -_._7OMAudio = .text:0x8013EFEC; // type:function size:0x34 scope:global -_._7OMVideo = .text:0x8013F020; // type:function size:0x34 scope:global -_._10OMGameplay = .text:0x8013F054; // type:function size:0x34 scope:global -_._8OMPlayer = .text:0x8013F088; // type:function size:0x34 scope:global -_._12OMController = .text:0x8013F0BC; // type:function size:0x34 scope:global -_._8OMEATrax = .text:0x8013F0F0; // type:function size:0x34 scope:global -_._9OMCredits = .text:0x8013F124; // type:function size:0x34 scope:global -_._14AOSFXMasterVol = .text:0x8013F158; // type:function size:0x40 scope:global -_._22AOInteractiveMusicMode = .text:0x8013F198; // type:function size:0x34 scope:global -_._17AOEATraxMusicMode = .text:0x8013F1CC; // type:function size:0x34 scope:global -_._8AOCarVol = .text:0x8013F200; // type:function size:0x40 scope:global -_._11AOSpeechVol = .text:0x8013F240; // type:function size:0x40 scope:global -_._12AOFEMusicVol = .text:0x8013F280; // type:function size:0x40 scope:global -_._12AOIGMusicVol = .text:0x8013F2C0; // type:function size:0x40 scope:global -_._11AOAudioMode = .text:0x8013F300; // type:function size:0x34 scope:global -_._12VOWideScreen = .text:0x8013F334; // type:function size:0x34 scope:global -_._8GODamage = .text:0x8013F368; // type:function size:0x34 scope:global -_._10GOAutoSave = .text:0x8013F39C; // type:function size:0x34 scope:global -_._10GOJumpCams = .text:0x8013F3D0; // type:function size:0x34 scope:global -_._10GORearview = .text:0x8013F404; // type:function size:0x34 scope:global -_._13GOSpeedoUnits = .text:0x8013F438; // type:function size:0x34 scope:global -_._15GORacingMiniMap = .text:0x8013F46C; // type:function size:0x34 scope:global -_._18GOExploringMiniMap = .text:0x8013F4A0; // type:function size:0x34 scope:global -_._14POTransmission = .text:0x8013F4D4; // type:function size:0x34 scope:global -_._10PODriveCam = .text:0x8013F508; // type:function size:0x34 scope:global -_._8POGauges = .text:0x8013F53C; // type:function size:0x34 scope:global -_._10POPosition = .text:0x8013F570; // type:function size:0x34 scope:global -_._7POScore = .text:0x8013F5A4; // type:function size:0x34 scope:global -_._11POSplitTime = .text:0x8013F5D8; // type:function size:0x34 scope:global -_._13POLeaderBoard = .text:0x8013F60C; // type:function size:0x34 scope:global -_._11COVibration = .text:0x8013F640; // type:function size:0x34 scope:global -_._8COConfig = .text:0x8013F674; // type:function size:0x34 scope:global -_._13UIOptionsMain = .text:0x8013F6A8; // type:function size:0x98 scope:global -SetFlag__5GIconUi = .text:0x8013F740; // type:function size:0x10 scope:global -ClearFlag__5GIconUi = .text:0x8013F750; // type:function size:0x10 scope:global -Clear__15MemoryCardSetup = .text:0x8013F760; // type:function size:0x38 scope:global -Clear__Q26Realmc15SystemInterface = .text:0x8013F798; // type:function size:0x18 scope:global -_._10MainCareer = .text:0x8013F7B0; // type:function size:0x34 scope:global -React__10MainCareerPCcUiP8FEObjectUiUi = .text:0x8013F7E4; // type:function size:0x50 scope:global -_._9Challenge = .text:0x8013F834; // type:function size:0x34 scope:global -React__9ChallengePCcUiP8FEObjectUiUi = .text:0x8013F868; // type:function size:0xB4 scope:global -_._13MainQuickRace = .text:0x8013F91C; // type:function size:0x34 scope:global -React__13MainQuickRacePCcUiP8FEObjectUiUi = .text:0x8013F950; // type:function size:0x28 scope:global -_._13MainCustomize = .text:0x8013F978; // type:function size:0x34 scope:global -React__13MainCustomizePCcUiP8FEObjectUiUi = .text:0x8013F9AC; // type:function size:0x28 scope:global -_._18MainProfileManager = .text:0x8013F9D4; // type:function size:0x34 scope:global -React__18MainProfileManagerPCcUiP8FEObjectUiUi = .text:0x8013FA08; // type:function size:0x28 scope:global -_._11MainOptions = .text:0x8013FA30; // type:function size:0x34 scope:global -React__11MainOptionsPCcUiP8FEObjectUiUi = .text:0x8013FA64; // type:function size:0x28 scope:global -_._17UIOptionsTrailers = .text:0x8013FA8C; // type:function size:0x98 scope:global -_._12ArrayScripts = .text:0x8013FB24; // type:function size:0x34 scope:global -_GetKind__20MNotifyRaceAbandoned = .text:0x8013FB58; // type:function size:0x64 scope:global -_._13pm_ResumeRace = .text:0x8013FBBC; // type:function size:0x34 scope:global -React__13pm_ResumeRacePCcUiP8FEObjectUiUi = .text:0x8013FBF0; // type:function size:0x58 scope:global -_._17pm_ResumeFreeRoam = .text:0x8013FC48; // type:function size:0x34 scope:global -React__17pm_ResumeFreeRoamPCcUiP8FEObjectUiUi = .text:0x8013FC7C; // type:function size:0x58 scope:global -_._14pm_RestartRace = .text:0x8013FCD4; // type:function size:0x34 scope:global -React__14pm_RestartRacePCcUiP8FEObjectUiUi = .text:0x8013FD08; // type:function size:0x98 scope:global -_._18pm_SwitchToOptions = .text:0x8013FDA0; // type:function size:0x34 scope:global -React__18pm_SwitchToOptionsPCcUiP8FEObjectUiUi = .text:0x8013FDD4; // type:function size:0x58 scope:global -_._17pm_SwitchToTuning = .text:0x8013FE2C; // type:function size:0x34 scope:global -React__17pm_SwitchToTuningPCcUiP8FEObjectUiUi = .text:0x8013FE60; // type:function size:0xA4 scope:global -_._15pm_QuitMainMenu = .text:0x8013FF04; // type:function size:0x34 scope:global -React__15pm_QuitMainMenuPCcUiP8FEObjectUiUi = .text:0x8013FF38; // type:function size:0x98 scope:global -_._16pm_QuitQuickRace = .text:0x8013FFD0; // type:function size:0x34 scope:global -React__16pm_QuitQuickRacePCcUiP8FEObjectUiUi = .text:0x80140004; // type:function size:0x98 scope:global -_._21pm_QuitRaceToFreeRoam = .text:0x8014009C; // type:function size:0x34 scope:global -React__21pm_QuitRaceToFreeRoamPCcUiP8FEObjectUiUi = .text:0x801400D0; // type:function size:0x98 scope:global -_._15pm_QuitRaceToFE = .text:0x80140168; // type:function size:0x34 scope:global -React__15pm_QuitRaceToFEPCcUiP8FEObjectUiUi = .text:0x8014019C; // type:function size:0x12C scope:global -MakeSpaceInPoolCallbackBridge__18UITrackMapStreameri = .text:0x801402C8; // type:function size:0x20 scope:global -_._17ScrollerDatumNode = .text:0x801402E8; // type:function size:0x34 scope:global -_._16ScrollerSlotNode = .text:0x8014031C; // type:function size:0x34 scope:global -_._12ScrollerSlot = .text:0x80140350; // type:function size:0x90 scope:global -_._20JukeBoxScrollerDatum = .text:0x801403E0; // type:function size:0x90 scope:global -_._19JukeBoxScrollerSlot = .text:0x80140470; // type:function size:0x90 scope:global -_._15uiRapSheetLogin = .text:0x80140500; // type:function size:0x30 scope:global -_._14uiRapSheetMain = .text:0x80140530; // type:function size:0x8C scope:global -_._12uiRapSheetRS = .text:0x801405BC; // type:function size:0x30 scope:global -ClassKey__Q36Attrib3Gen8frontend = .text:0x801405EC; // type:function size:0xC scope:global -_._15RapSheetUSDatum = .text:0x801405F8; // type:function size:0x34 scope:global -NotificationMessage__15RapSheetUSDatumUlP8FEObjectUlUl = .text:0x8014062C; // type:function size:0x4 scope:global -_._19RapSheetUSArraySlot = .text:0x80140630; // type:function size:0x34 scope:global -_._12uiRapSheetUS = .text:0x80140664; // type:function size:0xF0 scope:global -_._15RapSheetVDDatum = .text:0x80140754; // type:function size:0x34 scope:global -NotificationMessage__15RapSheetVDDatumUlP8FEObjectUlUl = .text:0x80140788; // type:function size:0x4 scope:global -_._19RapSheetVDArraySlot = .text:0x8014078C; // type:function size:0x34 scope:global -_._12uiRapSheetVD = .text:0x801407C0; // type:function size:0xF0 scope:global -_._16RapSheetCTSDatum = .text:0x801408B0; // type:function size:0x34 scope:global -NotificationMessage__16RapSheetCTSDatumUlP8FEObjectUlUl = .text:0x801408E4; // type:function size:0x4 scope:global -_._20RapSheetCTSArraySlot = .text:0x801408E8; // type:function size:0x34 scope:global -_._13uiRapSheetCTS = .text:0x8014091C; // type:function size:0xF0 scope:global -_._13uiRapSheetTEP = .text:0x80140A0C; // type:function size:0x8C scope:global -_._12uiRapSheetPD = .text:0x80140A98; // type:function size:0x30 scope:global -_._18uiRapSheetRankings = .text:0x80140AC8; // type:function size:0x30 scope:global -_._21RapSheetRankingsDatum = .text:0x80140AF8; // type:function size:0x34 scope:global -NotificationMessage__21RapSheetRankingsDatumUlP8FEObjectUlUl = .text:0x80140B2C; // type:function size:0x4 scope:global -_._25RapSheetRankingsArraySlot = .text:0x80140B30; // type:function size:0x34 scope:global -_._30RapSheetRankingsTimerArraySlot = .text:0x80140B64; // type:function size:0x34 scope:global -_._24uiRapSheetRankingsDetail = .text:0x80140B98; // type:function size:0xF0 scope:global -MakeSpaceInPoolCallbackBridge__23uiRepSheetRivalStreameri = .text:0x80140C88; // type:function size:0x20 scope:global -TexturePackLoadedCallbackBridge__23uiRepSheetRivalStreamerPv = .text:0x80140CA8; // type:function size:0x20 scope:global -TexturesLoadedCallbackBridge__23uiRepSheetRivalStreamerPv = .text:0x80140CC8; // type:function size:0x20 scope:global -_._12RepSheetIcon = .text:0x80140CE8; // type:function size:0x34 scope:global -TextureLoadedCallback__14uiRepSheetMainUi = .text:0x80140D1C; // type:function size:0x20 scope:global -TextureLoadedCallback__15uiRepSheetRivalUi = .text:0x80140D3C; // type:function size:0x20 scope:global -_._9RaceDatum = .text:0x80140D5C; // type:function size:0x34 scope:global -_._7MapItem = .text:0x80140D90; // type:function size:0x34 scope:global -UpdatePos__7MapItemR8bVector2 = .text:0x80140DC4; // type:function size:0x2C scope:global -UpdateScale__7MapItemf = .text:0x80140DF0; // type:function size:0x38 scope:global -Draw__7MapItem = .text:0x80140E28; // type:function size:0x4 scope:global -Show__7MapItem = .text:0x80140E2C; // type:function size:0x24 scope:global -Hide__7MapItem = .text:0x80140E50; // type:function size:0x24 scope:global -ResetSize__7MapItem = .text:0x80140E74; // type:function size:0x30 scope:global -_._7CopItem = .text:0x80140EA4; // type:function size:0x34 scope:global -_._8HeliItem = .text:0x80140ED8; // type:function size:0x34 scope:global -UpdatePos__8HeliItemR8bVector2 = .text:0x80140F0C; // type:function size:0x4C scope:global -UpdateScale__8HeliItemf = .text:0x80140F58; // type:function size:0x54 scope:global -Show__8HeliItem = .text:0x80140FAC; // type:function size:0x38 scope:global -Hide__8HeliItem = .text:0x80140FE4; // type:function size:0x38 scope:global -ResetSize__8HeliItem = .text:0x8014101C; // type:function size:0x40 scope:global -_._14ItemTypeToggle = .text:0x8014105C; // type:function size:0x34 scope:global -GetScale__t10FixedPoint3ZUsi10Ui2 = .text:0x80141090; // type:function size:0x58 scope:global -_._19uiRepSheetRivalFlow = .text:0x801410E8; // type:function size:0x34 scope:global -_GetKind__18MFlowReadyForOutro = .text:0x8014111C; // type:function size:0x64 scope:global -_._18uiRepSheetRivalBio = .text:0x80141180; // type:function size:0x50 scope:global -IsFlagSet__C10GSpeedTrapUi = .text:0x801411D0; // type:function size:0x18 scope:global -IsFlagClear__C10GSpeedTrapUi = .text:0x801411E8; // type:function size:0x14 scope:global -_._14MilestoneDatum = .text:0x801411FC; // type:function size:0x34 scope:global -GetType__14MilestoneDatum = .text:0x80141230; // type:function size:0x8 scope:global -_._14SpeedTrapDatum = .text:0x80141238; // type:function size:0x34 scope:global -GetType__14SpeedTrapDatum = .text:0x8014126C; // type:function size:0x8 scope:global -_._20uiRepSheetMilestones = .text:0x80141274; // type:function size:0x12C scope:global -_._11BountyDatum = .text:0x801413A0; // type:function size:0x34 scope:global -_._16uiRepSheetBounty = .text:0x801413D4; // type:function size:0x12C scope:global -_._8SMSDatum = .text:0x80141500; // type:function size:0x34 scope:global -_._7SMSSlot = .text:0x80141534; // type:function size:0x34 scope:global -_._5uiSMS = .text:0x80141568; // type:function size:0xF0 scope:global -_._12uiCareerCrib = .text:0x80141658; // type:function size:0x98 scope:global -_._15CResumeFreeRoam = .text:0x801416F0; // type:function size:0x34 scope:global -React__15CResumeFreeRoamPCcUiP8FEObjectUiUi = .text:0x80141724; // type:function size:0xB0 scope:global -_._10CCarSelect = .text:0x801417D4; // type:function size:0x34 scope:global -React__10CCarSelectPCcUiP8FEObjectUiUi = .text:0x80141808; // type:function size:0x4C scope:global -_._9CRapSheet = .text:0x80141854; // type:function size:0x34 scope:global -React__9CRapSheetPCcUiP8FEObjectUiUi = .text:0x80141888; // type:function size:0x60 scope:global -_._6CTop15 = .text:0x801418E8; // type:function size:0x34 scope:global -React__6CTop15PCcUiP8FEObjectUiUi = .text:0x8014191C; // type:function size:0x64 scope:global -_._5CSave = .text:0x80141980; // type:function size:0x34 scope:global -React__5CSavePCcUiP8FEObjectUiUi = .text:0x801419B4; // type:function size:0x48 scope:global -_._15uiCareerManager = .text:0x801419FC; // type:function size:0x98 scope:global -_._13CResumeCareer = .text:0x80141A94; // type:function size:0x34 scope:global -React__13CResumeCareerPCcUiP8FEObjectUiUi = .text:0x80141AC8; // type:function size:0x10C scope:global -_._15CStartNewCareer = .text:0x80141BD4; // type:function size:0x34 scope:global -React__15CStartNewCareerPCcUiP8FEObjectUiUi = .text:0x80141C08; // type:function size:0xC8 scope:global -_._11CLoadCareer = .text:0x80141CD0; // type:function size:0x34 scope:global -React__11CLoadCareerPCcUiP8FEObjectUiUi = .text:0x80141D04; // type:function size:0x80 scope:global -_._9uiCredits = .text:0x80141D84; // type:function size:0x50 scope:global -_._16FEngMovieStarter = .text:0x80141DD4; // type:function size:0x34 scope:global -_._16FEngMovieStopper = .text:0x80141E08; // type:function size:0x34 scope:global -_._17FEngHidePCObjects = .text:0x80141E3C; // type:function size:0x34 scope:global -_._27FEngTransferFlagsToChildren = .text:0x80141E70; // type:function size:0x34 scope:global -_._22RenderObjectDisconnect = .text:0x80141EA4; // type:function size:0x34 scope:global -_._17ObjectDirtySetter = .text:0x80141ED8; // type:function size:0x34 scope:global -_._22ObjectVisibilitySetter = .text:0x80141F0C; // type:function size:0x34 scope:global -_._24FEngSetGroupLanguageHash = .text:0x80141F40; // type:function size:0x34 scope:global -Callback__24FEngSetGroupLanguageHashP8FEObject = .text:0x80141F74; // type:function size:0x3C scope:global -_._17FEngGroupFEPrintf = .text:0x80141FB0; // type:function size:0x34 scope:global -Callback__17FEngGroupFEPrintfP8FEObject = .text:0x80141FE4; // type:function size:0x40 scope:global -_._20ShapeMemoryAllocator = .text:0x80142024; // type:function size:0x34 scope:global -_._6PMSave = .text:0x80142058; // type:function size:0x34 scope:global -React__6PMSavePCcUiP8FEObjectUiUi = .text:0x8014208C; // type:function size:0x48 scope:global -_._6PMLoad = .text:0x801420D4; // type:function size:0x34 scope:global -React__6PMLoadPCcUiP8FEObjectUiUi = .text:0x80142108; // type:function size:0x50 scope:global -_._8PMDelete = .text:0x80142158; // type:function size:0x34 scope:global -React__8PMDeletePCcUiP8FEObjectUiUi = .text:0x8014218C; // type:function size:0x48 scope:global -_._11PMCreateNew = .text:0x801421D4; // type:function size:0x34 scope:global -React__11PMCreateNewPCcUiP8FEObjectUiUi = .text:0x80142208; // type:function size:0x48 scope:global -_._16UIProfileManager = .text:0x80142250; // type:function size:0x98 scope:global -_._15UIDeleteProfile = .text:0x801422E8; // type:function size:0x98 scope:global -_._17UIMemcardKeyboard = .text:0x80142380; // type:function size:0x30 scope:global -Abort__17UIMemcardKeyboard = .text:0x801423B0; // type:function size:0x4 scope:global -DoSelect__13UIMemcardBasePCc = .text:0x801423B4; // type:function size:0x4 scope:global -_._13UIMemcardMain = .text:0x801423B8; // type:function size:0x30 scope:global -_._7MyMutex = .text:0x801423E8; // type:function size:0x50 scope:global -CreateInstance__7MyMutex = .text:0x80142438; // type:function size:0x78 scope:global -AddRef__7MyMutex = .text:0x801424B0; // type:function size:0x14 scope:global -Release__7MyMutex = .text:0x801424C4; // type:function size:0x5C scope:global -Lock__7MyMutex = .text:0x80142520; // type:function size:0x24 scope:global -Unlock__7MyMutex = .text:0x80142544; // type:function size:0x24 scope:global -_._8MyThread = .text:0x80142568; // type:function size:0x64 scope:global -CreateInstance__8MyThread = .text:0x801425CC; // type:function size:0x74 scope:global -AddRef__8MyThread = .text:0x80142640; // type:function size:0x14 scope:global -Release__8MyThread = .text:0x80142654; // type:function size:0x5C scope:global -SetStackSize__8MyThreadUi = .text:0x801426B0; // type:function size:0x8 scope:global -Begin__8MyThreadPFPv_i = .text:0x801426B8; // type:function size:0x60 scope:global -WaitForEnd__8MyThreadi = .text:0x80142718; // type:function size:0x4C scope:global -Sleep__8MyThreadi = .text:0x80142764; // type:function size:0x24 scope:global -SetPriority__8MyThreadi = .text:0x80142788; // type:function size:0x30 scope:global -_._13UIMemcardBoot = .text:0x801427B8; // type:function size:0x30 scope:global -_._11FEMemWidget = .text:0x801427E8; // type:function size:0x90 scope:global -_._8FEWidget = .text:0x80142878; // type:function size:0x34 scope:global -SetPos__8FEWidgetR8bVector2 = .text:0x801428AC; // type:function size:0x20 scope:global -SetTopLeftX__8FEWidgetf = .text:0x801428CC; // type:function size:0x8 scope:global -SetTopLeftY__8FEWidgetf = .text:0x801428D4; // type:function size:0x8 scope:global -_._10IconOption = .text:0x801428DC; // type:function size:0x34 scope:global -_._10ArrayDatum = .text:0x80142910; // type:function size:0x34 scope:global -NotificationMessage__10ArrayDatumUlP8FEObjectUlUl = .text:0x80142944; // type:function size:0x4 scope:global -_._13ScrollerDatum = .text:0x80142948; // type:function size:0x90 scope:global -RaiseToPower__H1i10_i_i = .text:0x801429D8; // type:function size:0x38 scope:global -EntryProc__8MyThreadPv = .text:0x80142A10; // type:function size:0x60 scope:global -SetTopLeft__8FEWidgetR8bVector2 = .text:0x80142A70; // type:function size:0x14 scope:global -GetEntryFunc__8MyThread = .text:0x80142A84; // type:function size:0x8 scope:global -IsActive__8MyThread = .text:0x80142A8C; // type:function size:0x8 scope:global -_GLOBAL_.I.gOnlineMainMenu = .text:0x80142A94; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x80142AC0; // type:label scope:local -__10HudElementPCcUx = .text:0x80142AC0; // type:function size:0x40 scope:global -RegisterString__10HudElementUi = .text:0x80142B00; // type:function size:0x58 scope:global -RegisterImage__10HudElementUi = .text:0x80142B58; // type:function size:0x58 scope:global -RegisterMultiImage__10HudElementUi = .text:0x80142BB0; // type:function size:0x58 scope:global -RegisterObject__10HudElementUi = .text:0x80142C08; // type:function size:0x58 scope:global -RegisterGroup__10HudElementUi = .text:0x80142C60; // type:function size:0x8C scope:global -Toggle__10HudElementUx = .text:0x80142CEC; // type:function size:0x8C scope:global -__12GetAwayMeterPQ33UTL3COM6ObjectPCci = .text:0x80142D78; // type:function size:0xDC scope:global -Update__12GetAwayMeterP7IPlayer = .text:0x80142E54; // type:function size:0x4 scope:global -__13RadarDetectorPQ33UTL3COM6ObjectPCci = .text:0x80142E58; // type:function size:0x14C scope:global -Update__13RadarDetectorP7IPlayer = .text:0x80142FA4; // type:function size:0x67C scope:global -__9HeatMeterPQ33UTL3COM6ObjectPCci = .text:0x80143620; // type:function size:0xF8 scope:global -Update__9HeatMeterP7IPlayer = .text:0x80143718; // type:function size:0x28C scope:global -SetVehicleHeat__9HeatMeterf = .text:0x801439A4; // type:function size:0x1C scope:global -SetPursuitHeat__9HeatMeterf = .text:0x801439C0; // type:function size:0x1C scope:global -__11CostToStatePQ33UTL3COM6ObjectPCci = .text:0x801439DC; // type:function size:0x104 scope:global -Update__11CostToStateP7IPlayer = .text:0x80143AE0; // type:function size:0x104 scope:global -SetCostToState__11CostToStatei = .text:0x80143BE4; // type:function size:0x38 scope:global -__10ReputationPQ33UTL3COM6ObjectPCci = .text:0x80143C1C; // type:function size:0xD8 scope:global -Update__10ReputationP7IPlayer = .text:0x80143CF4; // type:function size:0xCC scope:global -SetReputationCareer__10Reputationi = .text:0x80143DC0; // type:function size:0x1C scope:global -SetReputationPursuit__10Reputationi = .text:0x80143DDC; // type:function size:0x4 scope:global -Init__21ChoppedMiniMapManager = .text:0x80143DE0; // type:function size:0x48 scope:global -__21ChoppedMiniMapManageri = .text:0x80143E28; // type:function size:0x58 scope:global -Loader__21ChoppedMiniMapManagerP6bChunk = .text:0x80143E80; // type:function size:0x88 scope:global -Unloader__21ChoppedMiniMapManagerP6bChunk = .text:0x80143F08; // type:function size:0x70 scope:global -SetMapHeader__21ChoppedMiniMapManagerPc = .text:0x80143F78; // type:function size:0x30 scope:global -GetTextureName__21ChoppedMiniMapManagerPcii = .text:0x80143FA8; // type:function size:0x40 scope:global -UncompressMaps__21ChoppedMiniMapManagerPsi = .text:0x80143FE8; // type:function size:0x1B0 scope:global -GetVehicleVectors__FP8bVector2T0P8ISimable = .text:0x80144198; // type:function size:0xE8 scope:global -LoaderMiniMap__FP6bChunk = .text:0x80144280; // type:function size:0x2C scope:local -UnloaderMiniMap__FP6bChunk = .text:0x801442AC; // type:function size:0x2C scope:local -__7MinimapPCci = .text:0x801442D8; // type:function size:0x3E4 scope:global -_._7Minimap = .text:0x801446BC; // type:function size:0xD4 scope:global -SetupMinimap__7MinimapP7IPlayer = .text:0x80144790; // type:function size:0x684 scope:global -RefreshMapItems__7Minimap = .text:0x80144E14; // type:function size:0x8C scope:global -ConvertPos__7MinimapR8bVector2T1P9TrackInfo = .text:0x80144EA0; // type:function size:0x40 scope:global -Update__7MinimapP7IPlayer = .text:0x80144EE0; // type:function size:0x268 scope:global -UpdateTrackMapArt__7Minimap = .text:0x80145148; // type:function size:0x90 scope:global -UpdateElementArt__7MinimapP8bVector2T1P8FEObjectb = .text:0x801451D8; // type:function size:0x2B0 scope:global -UpdateCopElements__7MinimapP8IVehicle = .text:0x80145488; // type:function size:0x464 scope:global -UpdateAiRacerElements__7Minimap = .text:0x801458EC; // type:function size:0x100 scope:global -UpdatePlayer2Element__7Minimap = .text:0x801459EC; // type:function size:0x84 scope:global -UpdateIconElement__7MinimapP7FEImageP5GIcon = .text:0x80145A70; // type:function size:0xD4 scope:global -UpdateRaceElements__7Minimap = .text:0x80145B44; // type:function size:0x20 scope:global -AdjustForWidescreen__7Minimapb = .text:0x80145B64; // type:function size:0xB4 scope:global -UpdateMiniMapItems__7Minimap = .text:0x80145C18; // type:function size:0xB0 scope:global -InitStaticMiniMapItems__7Minimap = .text:0x80145CC8; // type:function size:0x4 scope:global -UpdateGameplayIcons__7MinimapP7IPlayer = .text:0x80145CCC; // type:function size:0x160 scope:global -__9CountdownPQ33UTL3COM6ObjectPCci = .text:0x80145E2C; // type:function size:0xE4 scope:global -Update__9CountdownP7IPlayer = .text:0x80145F10; // type:function size:0x3DC scope:global -BeginCountdown__9Countdown = .text:0x801462EC; // type:function size:0x38 scope:global -IsActive__9Countdown = .text:0x80146324; // type:function size:0x18 scope:global -GetSecondsBeforeRaceStart__9Countdown = .text:0x8014633C; // type:function size:0x98 scope:global -__14GenericMessagePQ33UTL3COM6ObjectPCci = .text:0x801463D4; // type:function size:0xD8 scope:global -Update__14GenericMessageP7IPlayer = .text:0x801464AC; // type:function size:0xDC scope:global -RequestGenericMessage__14GenericMessagePCcbUiUiUi23GenericMessage_Priority = .text:0x80146588; // type:function size:0x1BC scope:global -RequestGenericMessageZoomOut__14GenericMessageUi = .text:0x80146744; // type:function size:0x64 scope:global -IsGenericMessageShowing__14GenericMessage = .text:0x801467A8; // type:function size:0x18 scope:global -__15RaceOverMessagePQ33UTL3COM6ObjectPCci = .text:0x801467C0; // type:function size:0x88 scope:global -Update__15RaceOverMessageP7IPlayer = .text:0x80146848; // type:function size:0x11C scope:global -RequestRaceOverMessage__15RaceOverMessageP7IPlayer = .text:0x80146964; // type:function size:0x628 scope:global -DismissRaceOverMessage__15RaceOverMessage = .text:0x80146F8C; // type:function size:0x10 scope:global -__12NitrousGaugePQ33UTL3COM6ObjectPCci = .text:0x80146F9C; // type:function size:0xC4 scope:global -Update__12NitrousGaugeP7IPlayer = .text:0x80147060; // type:function size:0x90 scope:global -SetNos__12NitrousGaugef = .text:0x801470F0; // type:function size:0xDC scope:global -__17SpeedBreakerMeterPQ33UTL3COM6ObjectPCci = .text:0x801471CC; // type:function size:0x124 scope:global -Update__17SpeedBreakerMeterP7IPlayer = .text:0x801472F0; // type:function size:0x1D8 scope:global -SetPursuitLevel__17SpeedBreakerMeterf = .text:0x801474C8; // type:function size:0x1C scope:global -__15EngineTempGaugePQ33UTL3COM6ObjectPCci = .text:0x801474E4; // type:function size:0xE4 scope:global -Update__15EngineTempGaugeP7IPlayer = .text:0x801475C8; // type:function size:0x1D0 scope:global -SetEngineTemp__15EngineTempGaugef = .text:0x80147798; // type:function size:0x1C scope:global -__11SpeedometerPQ33UTL3COM6ObjectPCci = .text:0x801477B4; // type:function size:0x114 scope:global -Update__11SpeedometerP7IPlayer = .text:0x801478C8; // type:function size:0x1E8 scope:global -CalcAngleForRPM__Fff = .text:0x80147AB0; // type:function size:0xA4 scope:local -__10TachometerPQ33UTL3COM6ObjectPCci = .text:0x80147B54; // type:function size:0x180 scope:global -Update__10TachometerP7IPlayer = .text:0x80147CD4; // type:function size:0x280 scope:global -GetLetterForGear__10Tachometer6GearID = .text:0x80147F54; // type:function size:0x94 scope:global -__10WrongWIndiPQ33UTL3COM6ObjectPCci = .text:0x80147FE8; // type:function size:0xA8 scope:global -Update__10WrongWIndiP7IPlayer = .text:0x80148090; // type:function size:0x1D8 scope:global -SetWrongWay__10WrongWIndib = .text:0x80148268; // type:function size:0x44 scope:global -__15RaceInformationPQ33UTL3COM6ObjectPCci = .text:0x801482AC; // type:function size:0x1A0 scope:global -Update__15RaceInformationP7IPlayer = .text:0x8014844C; // type:function size:0x29C scope:global -__11LeaderBoardPQ33UTL3COM6ObjectPCci = .text:0x801486E8; // type:function size:0x254 scope:global -Update__11LeaderBoardP7IPlayer = .text:0x8014893C; // type:function size:0x550 scope:global -SetRacerName__11LeaderBoardiPCc = .text:0x80148E8C; // type:function size:0x3C scope:global -SetRacerNum__11LeaderBoardii = .text:0x80148EC8; // type:function size:0x18 scope:global -SetRacerTotalPoints__11LeaderBoardif = .text:0x80148EE0; // type:function size:0x18 scope:global -SetRacerNumLapsCompleted__11LeaderBoardiifP7IPlayer = .text:0x80148EF8; // type:function size:0x88 scope:global -SetRacerPercentComplete__11LeaderBoardiffP7IPlayer = .text:0x80148F80; // type:function size:0x1D4 scope:global -SetRacerHasHeadset__11LeaderBoardib = .text:0x80149154; // type:function size:0x18 scope:global -ShowSplitTime__11LeaderBoardP7IPlayer = .text:0x8014916C; // type:function size:0x2E4 scope:global -ShowLapTime__C11LeaderBoardP7IPlayer = .text:0x80149450; // type:function size:0x144 scope:global -__14MilestoneBoardPQ33UTL3COM6ObjectPCci = .text:0x80149594; // type:function size:0x1F4 scope:global -Update__14MilestoneBoardP7IPlayer = .text:0x80149788; // type:function size:0x55C scope:global -GetNumIncompleteMilestones__C14MilestoneBoard = .text:0x80149CE4; // type:function size:0x44 scope:global -GetNumCompleteMilestones__C14MilestoneBoard = .text:0x80149D28; // type:function size:0x44 scope:global -GetNextVisibleMilestone__C14MilestoneBoard = .text:0x80149D6C; // type:function size:0x84 scope:global -GetFirstIncompleteMilestone__C14MilestoneBoard = .text:0x80149DF0; // type:function size:0x40 scope:global -SetMilestoneComplete__14MilestoneBoardib = .text:0x80149E30; // type:function size:0x10 scope:global -SetMilestoneCurrValue__14MilestoneBoardif = .text:0x80149E40; // type:function size:0xDC scope:global -GetIsMilestoneComplete__C14MilestoneBoardi = .text:0x80149F1C; // type:function size:0x24 scope:global -__12PursuitBoardPQ33UTL3COM6ObjectPCci = .text:0x80149F40; // type:function size:0x2D8 scope:global -Update__12PursuitBoardP7IPlayer = .text:0x8014A218; // type:function size:0x91C scope:global -SetInPursuit__12PursuitBoardb = .text:0x8014AB34; // type:function size:0x14 scope:global -SetIsHiding__12PursuitBoardb = .text:0x8014AB48; // type:function size:0x14 scope:global -SetTimeUntilHidden__12PursuitBoardf = .text:0x8014AB5C; // type:function size:0x14 scope:global -SetTimeUntilBusted__12PursuitBoardfb = .text:0x8014AB70; // type:function size:0xFC scope:global -SetTimeUntilBackup__12PursuitBoardf = .text:0x8014AC6C; // type:function size:0x14 scope:global -SetIsInView__12PursuitBoardb = .text:0x8014AC80; // type:function size:0x14 scope:global -SetPursuitDuration__12PursuitBoardf = .text:0x8014AC94; // type:function size:0x2C scope:global -SetCooldownTimeRemaining__12PursuitBoardf = .text:0x8014ACC0; // type:function size:0x14 scope:global -SetCooldownTimeRequired__12PursuitBoardf = .text:0x8014ACD4; // type:function size:0x8 scope:global -SetNumCopsInPursuit__12PursuitBoardi = .text:0x8014ACDC; // type:function size:0x108 scope:global -SetNumCopsDestroyed__12PursuitBoardiG6UCrc32ii = .text:0x8014ADE4; // type:function size:0x2C4 scope:global -SetNumCopsDamaged__12PursuitBoardi = .text:0x8014B0A8; // type:function size:0x70 scope:global -SetTotalNumCopsInvolved__12PursuitBoardi = .text:0x8014B118; // type:function size:0x14 scope:global -SetHeliInvolvedInPursuit__12PursuitBoardb = .text:0x8014B12C; // type:function size:0x14 scope:global -SetPursuitRep__12PursuitBoardi = .text:0x8014B140; // type:function size:0x14 scope:global -__13TimeExtensionPQ33UTL3COM6ObjectPCci = .text:0x8014B154; // type:function size:0x9C scope:global -Update__13TimeExtensionP7IPlayer = .text:0x8014B1F0; // type:function size:0x59C scope:global -RequestTimeExtensionMessage__13TimeExtensionP7IPlayerf = .text:0x8014B78C; // type:function size:0xC0 scope:global -__11BustedMeterPQ33UTL3COM6ObjectPCci = .text:0x8014B84C; // type:function size:0x98 scope:global -Update__11BustedMeterP7IPlayer = .text:0x8014B8E4; // type:function size:0x4 scope:global -__10TurboMeterPQ33UTL3COM6ObjectPCci = .text:0x8014B8E8; // type:function size:0xEC scope:global -Update__10TurboMeterP7IPlayer = .text:0x8014B9D4; // type:function size:0xC0 scope:global -CalcNeedleAngle__10TurboMeterfff = .text:0x8014BA94; // type:function size:0x24 scope:global -SetInductionPsi__10TurboMeterf = .text:0x8014BAB8; // type:function size:0x1C scope:global -__15MenuZoneTriggerPQ33UTL3COM6ObjectPCci = .text:0x8014BAD4; // type:function size:0xE0 scope:global -Update__15MenuZoneTriggerP7IPlayer = .text:0x8014BBB4; // type:function size:0xFC scope:global -ShouldSeeMenuZoneCluster__15MenuZoneTrigger = .text:0x8014BCB0; // type:function size:0x18 scope:global -IsPlayerInsideTrigger__15MenuZoneTrigger = .text:0x8014BCC8; // type:function size:0x2C scope:global -EnterTrigger__15MenuZoneTriggerP16GRuntimeInstance = .text:0x8014BCF4; // type:function size:0x78 scope:global -EnterTrigger__15MenuZoneTriggerPCc = .text:0x8014BD6C; // type:function size:0x64 scope:global -ExitTrigger__15MenuZoneTrigger = .text:0x8014BDD0; // type:function size:0x34 scope:global -RequestEventInfoDialog__15MenuZoneTriggeri = .text:0x8014BE04; // type:function size:0x80 scope:global -RequestZoneInfoDialog__15MenuZoneTriggeri = .text:0x8014BE84; // type:function size:0xB8 scope:global -IsType__15MenuZoneTriggerPCc = .text:0x8014BF3C; // type:function size:0x2C scope:global -RequestDoAction__15MenuZoneTrigger = .text:0x8014BF68; // type:function size:0x100 scope:global -HideDPadButton__15MenuZoneTrigger = .text:0x8014C068; // type:function size:0x24C scope:global -PulseDPadButton__15MenuZoneTriggerQ215MenuZoneTrigger29ENGAGE_DPAD_ELEMENT_DIRECTIONP8FEObject = .text:0x8014C2B4; // type:function size:0x170 scope:global -__18HudResourceManager = .text:0x8014C424; // type:function size:0x20 scope:global -GetHudTexPackFilename__18HudResourceManager14ePlayerHudType = .text:0x8014C444; // type:function size:0x50 scope:global -GetCarPart__18HudResourceManager14ePlayerHudType11CAR_SLOT_ID = .text:0x8014C494; // type:function size:0xC8 scope:global -GetCustomHudColour__18HudResourceManager14ePlayerHudType11CAR_SLOT_ID = .text:0x8014C55C; // type:function size:0xB8 scope:global -GetCustomHudTexPackFilename__18HudResourceManager14ePlayerHudTypePc = .text:0x8014C614; // type:function size:0xAC scope:global -GetHudFengName__18HudResourceManager14ePlayerHudType = .text:0x8014C6C0; // type:function size:0x7C scope:global -ChooseMinimapTextureName__18HudResourceManager14ePlayerHudTypePcUiT2Ui = .text:0x8014C73C; // type:function size:0x190 scope:global -ChooseLoadableTextures__18HudResourceManager14ePlayerHudTypeRiRf = .text:0x8014C8CC; // type:function size:0x560 scope:global -LoadRequiredResources__18HudResourceManager14ePlayerHudTypePCc = .text:0x8014CE2C; // type:function size:0xD0 scope:global -LoadingCompleteCallback__18HudResourceManager = .text:0x8014CEFC; // type:function size:0x210 scope:global -LoadedCustomHudTexturePackCallback__18HudResourceManager = .text:0x8014D10C; // type:function size:0xC0 scope:global -LoadedCustomHudTexturesCallback__18HudResourceManager = .text:0x8014D1CC; // type:function size:0x14C scope:global -UnloadRequiredResources__18HudResourceManager14ePlayerHudType = .text:0x8014D318; // type:function size:0x178 scope:global -AreResourcesLoaded__18HudResourceManager14ePlayerHudType = .text:0x8014D490; // type:function size:0x68 scope:global -__7FEngHud14ePlayerHudTypePCcP7IPlayeri = .text:0x8014D4F8; // type:function size:0x64C scope:global -_._7FEngHud = .text:0x8014DB44; // type:function size:0x6A0 scope:global -Update__7FEngHudP7IPlayerf = .text:0x8014E1E4; // type:function size:0xA28 scope:global -FadeAll__7FEngHudb = .text:0x8014EC0C; // type:function size:0xB4 scope:global -SetInPursuit__7FEngHudb = .text:0x8014ECC0; // type:function size:0x14 scope:global -JoyDisable__7FEngHud = .text:0x8014ECD4; // type:function size:0x68 scope:global -JoyEnable__7FEngHud = .text:0x8014ED3C; // type:function size:0x78 scope:global -JoyHandle__7FEngHudP7IPlayer = .text:0x8014EDB4; // type:function size:0x4B4 scope:global -DetermineHudFeatures__7FEngHudP7IPlayer = .text:0x8014F268; // type:function size:0x6B0 scope:global -AreResourcesLoaded__7FEngHud = .text:0x8014F918; // type:function size:0x2C scope:global -SetHudFeatures__7FEngHudUx = .text:0x8014F944; // type:function size:0x45C scope:global -SetWideScreenMode__7FEngHud = .text:0x8014FDA0; // type:function size:0xB4 scope:global -HideEverySingleHud__Fv = .text:0x8014FE54; // type:function size:0x70 scope:global -RefreshMiniMapItems__7FEngHud = .text:0x8014FEC4; // type:function size:0x2C scope:global -ShouldRearViewMirrorBeVisible__7FEngHud8EVIEW_ID = .text:0x8014FEF0; // type:function size:0x170 scope:global -ChooseMaxRpmTextureNumber__7FEngHudf = .text:0x80150060; // type:function size:0x50 scope:global -__12ShiftUpdaterPQ33UTL3COM6ObjectPCci = .text:0x801500B0; // type:function size:0x134 scope:global -Update__12ShiftUpdaterP7IPlayer = .text:0x801501E4; // type:function size:0x294 scope:global -__14DragTachometerPQ33UTL3COM6ObjectPCci = .text:0x80150478; // type:function size:0x1FC scope:global -Update__14DragTachometerP7IPlayer = .text:0x80150674; // type:function size:0x200 scope:global -CalcAngleForRPMDrag__14DragTachometerff = .text:0x80150874; // type:function size:0x7C scope:global -__11InfractionsPQ33UTL3COM6ObjectPCci = .text:0x801508F0; // type:function size:0x118 scope:global -Update__11InfractionsP7IPlayer = .text:0x80150A08; // type:function size:0xB0 scope:global -RequestInfraction__11InfractionsPCc = .text:0x80150AB8; // type:function size:0xD0 scope:global -__28PostPursuitInfractionsScreenP21ScreenConstructorData = .text:0x80150B88; // type:function size:0x39C scope:global -_._28PostPursuitInfractionsScreen = .text:0x80150F24; // type:function size:0x5C scope:global -NotifyBustedTextureLoaded__28PostPursuitInfractionsScreen = .text:0x80150F80; // type:function size:0x30 scope:global -CalcBustedTexture__28PostPursuitInfractionsScreen = .text:0x80150FB0; // type:function size:0x134 scope:global -NotificationMessage__28PostPursuitInfractionsScreenUlP8FEObjectUlUl = .text:0x801510E4; // type:function size:0x314 scope:global -__10FadeScreenP21ScreenConstructorData = .text:0x801513F8; // type:function size:0x3C scope:global -_._10FadeScreen = .text:0x80151434; // type:function size:0x30 scope:global -NotificationMessage__10FadeScreenUlP8FEObjectUlUl = .text:0x80151464; // type:function size:0x54 scope:global -IsFadeScreenOn__10FadeScreen = .text:0x801514B8; // type:function size:0x48 scope:global -__19BustedOverlayScreenP21ScreenConstructorData = .text:0x80151500; // type:function size:0x310 scope:global -_._19BustedOverlayScreen = .text:0x80151810; // type:function size:0x30 scope:global -__6ChyronP21ScreenConstructorData = .text:0x80151840; // type:function size:0x44 scope:global -InitChyron__Fv = .text:0x80151884; // type:function size:0x30 scope:global -CreateChyronScreen__FP21ScreenConstructorData = .text:0x801518B4; // type:function size:0x2C scope:global -NotificationMessage__6ChyronUlP8FEObjectUlUl = .text:0x801518E0; // type:function size:0xAC scope:global -Start__6Chyron = .text:0x8015198C; // type:function size:0x328 scope:global -DismissChyron__Fv = .text:0x80151CB4; // type:function size:0x50 scope:global -SummonChyron__FPcN20 = .text:0x80151D04; // type:function size:0xC4 scope:global -CreateFEKeyboard__FP21ScreenConstructorData = .text:0x80151DC8; // type:function size:0x38 scope:global -__10FEKeyboardP21ScreenConstructorData = .text:0x80151E00; // type:function size:0x70 scope:global -Dispose__10FEKeyboardb = .text:0x80151E70; // type:function size:0xB0 scope:global -NotificationMessage__10FEKeyboardUlP8FEObjectUlUl = .text:0x80151F20; // type:function size:0x348 scope:global -Initialize__10FEKeyboard = .text:0x80152268; // type:function size:0x33C scope:global -GetCase__10FEKeyboard = .text:0x801525A4; // type:function size:0x34 scope:global -UpdateVisuals__10FEKeyboard = .text:0x801525D8; // type:function size:0x1A8 scope:global -UpdateStringVisual__10FEKeyboard = .text:0x80152780; // type:function size:0x1C8 scope:global -UpdateCursorPosition__10FEKeyboard = .text:0x80152948; // type:function size:0xD8 scope:global -MoveCursor__10FEKeyboardi = .text:0x80152A20; // type:function size:0x68 scope:global -SetString__10FEKeyboardPc = .text:0x80152A88; // type:function size:0x28 scope:global -SetMaxLength__10FEKeyboardi = .text:0x80152AB0; // type:function size:0x14 scope:global -IsKeyButton__10FEKeyboardP8FEObject = .text:0x80152AC4; // type:function size:0x2C scope:global -IsSymbol__10FEKeyboardc = .text:0x80152AF0; // type:function size:0x88 scope:global -IsNotOkForEmail__10FEKeyboardc = .text:0x80152B78; // type:function size:0x78 scope:global -IsNumericSymbol__10FEKeyboardc = .text:0x80152BF0; // type:function size:0x60 scope:global -IsEmailSymbol__10FEKeyboardc = .text:0x80152C50; // type:function size:0x68 scope:global -AppendLetter__10FEKeyboardi = .text:0x80152CB8; // type:function size:0x38 scope:global -GetLetterMap__10FEKeyboardi = .text:0x80152CF0; // type:function size:0x150 scope:global -AppendSpace__10FEKeyboard = .text:0x80152E40; // type:function size:0x30 scope:global -AppendBackspace__10FEKeyboard = .text:0x80152E70; // type:function size:0xB0 scope:global -AppendChar__10FEKeyboardc = .text:0x80152F20; // type:function size:0xEC scope:global -ToggleCapsLock__10FEKeyboard = .text:0x8015300C; // type:function size:0x5C scope:global -ToggleShift__10FEKeyboard = .text:0x80153068; // type:function size:0x4C scope:global -ToggleSpecialCharacters__10FEKeyboard = .text:0x801530B4; // type:function size:0x70 scope:global -__8RaceStatP8FEStringT1 = .text:0x80153124; // type:function size:0x50 scope:global -__10StatsPanel = .text:0x80153174; // type:function size:0x34 scope:global -Reset__10StatsPanel = .text:0x801531A8; // type:function size:0x74 scope:global -Draw__10StatsPanelUi = .text:0x8015321C; // type:function size:0x140 scope:global -AddStat__10StatsPanelP8RaceStat = .text:0x8015335C; // type:function size:0x7C scope:global -AddInfoStat__10StatsPanelUiUi = .text:0x801533D8; // type:function size:0x10C scope:global -AddGenericStat__10StatsPanelfUiUiPCc = .text:0x801534E4; // type:function size:0x124 scope:global -AddTimerStat__10StatsPanelfUi = .text:0x80153608; // type:function size:0x11C scope:global -__21PostRaceResultsScreenP21ScreenConstructorData = .text:0x80153724; // type:function size:0x208 scope:global -_._21PostRaceResultsScreen = .text:0x8015392C; // type:function size:0xD8 scope:global -Setup__21PostRaceResultsScreen = .text:0x80153A04; // type:function size:0x2C0 scope:global -SetupResults__21PostRaceResultsScreen = .text:0x80153CC4; // type:function size:0x440 scope:global -SetupStat_NosUsed__21PostRaceResultsScreen = .text:0x80154104; // type:function size:0xFC scope:global -SetupStat_TopSpeed__21PostRaceResultsScreen = .text:0x80154200; // type:function size:0x108 scope:global -SetupStat_AverageSpeed__21PostRaceResultsScreen = .text:0x80154308; // type:function size:0x108 scope:global -SetupStat_TimeBehind__21PostRaceResultsScreen = .text:0x80154410; // type:function size:0xC4 scope:global -SetupStat_LapVariance__21PostRaceResultsScreen = .text:0x801544D4; // type:function size:0xB0 scope:global -SetupStat_StageVariance__21PostRaceResultsScreen = .text:0x80154584; // type:function size:0x2C scope:global -SetupStat_TrafficCollisions__21PostRaceResultsScreen = .text:0x801545B0; // type:function size:0xD0 scope:global -SetupStat_ZeroToSixty__21PostRaceResultsScreen = .text:0x80154680; // type:function size:0xCC scope:global -SetupStat_QuarterMile__21PostRaceResultsScreen = .text:0x8015474C; // type:function size:0xCC scope:global -SetupStat_PerfectShifts__21PostRaceResultsScreen = .text:0x80154818; // type:function size:0xE0 scope:global -SetupStat_AccumulatedSpeed__21PostRaceResultsScreen = .text:0x801548F8; // type:function size:0xF4 scope:global -SetupStat_SpeedVariance__21PostRaceResultsScreen = .text:0x801549EC; // type:function size:0x10C scope:global -SetupStat_SpeedBehind__21PostRaceResultsScreen = .text:0x80154AF8; // type:function size:0xF0 scope:global -SetupRacerStats__21PostRaceResultsScreeniP10GRacerInfo = .text:0x80154BE8; // type:function size:0x250 scope:global -SetupLapStats__21PostRaceResultsScreeniP10GRacerInfo = .text:0x80154E38; // type:function size:0xAC4 scope:global -NotificationMessage__21PostRaceResultsScreenUlP8FEObjectUlUl = .text:0x801558FC; // type:function size:0x598 scope:global -NotifySoundMessage__21PostRaceResultsScreenUl18eMenuSoundTriggers = .text:0x80155E94; // type:function size:0xAC scope:global -PopulateData__11PursuitDataP8IPursuitP12IPerpetratori = .text:0x80155F40; // type:function size:0x1AC scope:global -AddMilestone__11PursuitDataP10GMilestone = .text:0x801560EC; // type:function size:0x30 scope:global -GetMilestone__C11PursuitDatai = .text:0x8015611C; // type:function size:0x20 scope:global -ClearData__11PursuitData = .text:0x8015613C; // type:function size:0x58 scope:global -__19PursuitResultsDatumQ219PursuitResultsDatum23PursuitResultsDatumTypeUiffQ219PursuitResultsDatum28PursuitResultsDatumCheckType = .text:0x80156194; // type:function size:0x94 scope:global -NotificationMessage__19PursuitResultsDatumUlP8FEObjectUlUl = .text:0x80156228; // type:function size:0x4 scope:global -__23PursuitResultsArraySlotP8FEObjectP8FEStringT2P7FEImageT4 = .text:0x8015622C; // type:function size:0x64 scope:global -Update__23PursuitResultsArraySlotP10ArrayDatumb = .text:0x80156290; // type:function size:0x3AC scope:global -__21PostRacePursuitScreenP21ScreenConstructorData = .text:0x8015663C; // type:function size:0x1CC scope:global -_._21PostRacePursuitScreen = .text:0x80156808; // type:function size:0x164 scope:global -Initialize__21PostRacePursuitScreen = .text:0x8015696C; // type:function size:0x1EC scope:global -SetupInfractions__21PostRacePursuitScreen = .text:0x80156B58; // type:function size:0x294 scope:global -SetupMilestones__21PostRacePursuitScreen = .text:0x80156DEC; // type:function size:0x254 scope:global -SetupPursuit__21PostRacePursuitScreen = .text:0x80157040; // type:function size:0x23C scope:global -NotificationMessage__21PostRacePursuitScreenUlP8FEObjectUlUl = .text:0x8015727C; // type:function size:0x1CC scope:global -__24PostRaceMilestonesScreenP21ScreenConstructorData = .text:0x80157448; // type:function size:0x70 scope:global -_._24PostRaceMilestonesScreen = .text:0x801574B8; // type:function size:0x30 scope:global -NotificationMessage__24PostRaceMilestonesScreenUlP8FEObjectUlUl = .text:0x801574E8; // type:function size:0x188 scope:global -StartMilestoneAnimations__24PostRaceMilestonesScreen = .text:0x80157670; // type:function size:0xF0 scope:global -StartChallengeAnimations__24PostRaceMilestonesScreen = .text:0x80157760; // type:function size:0x194 scope:global -StartBountyAnimations__24PostRaceMilestonesScreenb = .text:0x801578F4; // type:function size:0x120 scope:global -StartAnimations__24PostRaceMilestonesScreenbifPCc = .text:0x80157A14; // type:function size:0x150 scope:global -StartMilestoneDoneAnimations__24PostRaceMilestonesScreen = .text:0x80157B64; // type:function size:0xC4 scope:global -SetMilestoneAnimationScriptHash__24PostRaceMilestonesScreenbi = .text:0x80157C28; // type:function size:0x178 scope:global -__27SillyTextureStreamerManagerPCc = .text:0x80157DA0; // type:function size:0x80 scope:global -_._27SillyTextureStreamerManager = .text:0x80157E20; // type:function size:0xA4 scope:global -MakeSpaceInPoolCallback__27SillyTextureStreamerManager = .text:0x80157EC4; // type:function size:0x3C scope:global -LoadCallback__27SillyTextureStreamerManager = .text:0x80157F00; // type:function size:0xE4 scope:global -Load__27SillyTextureStreamerManagerUiP7FEImage = .text:0x80157FE4; // type:function size:0x78 scope:global -UnloadAll__27SillyTextureStreamerManager = .text:0x8015805C; // type:function size:0x6C scope:global -__17PhotoFinishScreenP21ScreenConstructorData = .text:0x801580C8; // type:function size:0x194 scope:global -_._17PhotoFinishScreen = .text:0x8015825C; // type:function size:0xCC scope:global -NotificationMessage__17PhotoFinishScreenUlP8FEObjectUlUl = .text:0x80158328; // type:function size:0x8B8 scope:global -Setup__17PhotoFinishScreen = .text:0x80158BE0; // type:function size:0x63C scope:global -Create__17PhotoFinishScreenP21ScreenConstructorData = .text:0x8015921C; // type:function size:0x38 scope:global -__12SixDaysLaterP21ScreenConstructorData = .text:0x80159254; // type:function size:0x98 scope:global -NotificationMessage__12SixDaysLaterUlP8FEObjectUlUl = .text:0x801592EC; // type:function size:0x108 scope:global -Init__15BootFlowManager = .text:0x801593F4; // type:function size:0x44 scope:global -Destroy__15BootFlowManager = .text:0x80159438; // type:function size:0x6C scope:global -Get__15BootFlowManager = .text:0x801594A4; // type:function size:0xC scope:global -__15BootFlowManager = .text:0x801594B0; // type:function size:0x290 scope:global -FindScreen__15BootFlowManagerPCc = .text:0x80159740; // type:function size:0x60 scope:global -FindScreenSubStr__15BootFlowManagerPCc = .text:0x801597A0; // type:function size:0x60 scope:global -JumpToHead__15BootFlowManager = .text:0x80159800; // type:function size:0x30 scope:global -JumpToScreen__15BootFlowManagerPCc = .text:0x80159830; // type:function size:0x84 scope:global -DoAttract__15BootFlowManager = .text:0x801598B4; // type:function size:0x50 scope:global -ChangeToNextBootFlowScreen__15BootFlowManageri = .text:0x80159904; // type:function size:0x64 scope:global -__12SplashScreenP21ScreenConstructorData = .text:0x80159968; // type:function size:0x25C scope:global -_._12SplashScreen = .text:0x80159BC4; // type:function size:0xAC scope:global -CalculateLastJoyEventTime__12SplashScreen = .text:0x80159C70; // type:function size:0xEC scope:global -NotificationMessage__12SplashScreenUlP8FEObjectUlUl = .text:0x80159D5C; // type:function size:0x274 scope:global -__11MovieScreenP21ScreenConstructorData = .text:0x80159FD0; // type:function size:0xF0 scope:global -NotificationMessage__11MovieScreenUlP8FEObjectUlUl = .text:0x8015A0C0; // type:function size:0x168 scope:global -LoadingTips_FinishLoadingTexBridge__FUi = .text:0x8015A228; // type:function size:0x44 scope:local -__11LoadingTipsP21ScreenConstructorData = .text:0x8015A26C; // type:function size:0xA0 scope:global -_._11LoadingTips = .text:0x8015A30C; // type:function size:0x54 scope:global -NotificationMessage__11LoadingTipsUlP8FEObjectUlUl = .text:0x8015A360; // type:function size:0x104 scope:global -StartLoadingTipImage__11LoadingTips = .text:0x8015A464; // type:function size:0x64 scope:global -ShowTipInfo__11LoadingTips = .text:0x8015A4C8; // type:function size:0xE4 scope:global -WhatTipScreenShouldIUseToday__11LoadingTipsQ213LoadingScreen18LoadingScreenTypes = .text:0x8015A5AC; // type:function size:0x68 scope:global -GetARandomTipScreen__11LoadingTipsQ213LoadingScreen18LoadingScreenTypes = .text:0x8015A614; // type:function size:0x130 scope:global -TipTestLastCarWithTwoStrikes__11LoadingTipsQ213LoadingScreen18LoadingScreenTypes = .text:0x8015A744; // type:function size:0x118 scope:global -TipTestFirstTimeOutOfSafeHouse__11LoadingTipsQ213LoadingScreen18LoadingScreenTypes = .text:0x8015A85C; // type:function size:0xB4 scope:global -TipTestFirstTimeIntoSafeHouse__11LoadingTipsQ213LoadingScreen18LoadingScreenTypes = .text:0x8015A910; // type:function size:0x40 scope:global -AllowInput__11LoadingTips = .text:0x8015A950; // type:function size:0x60 scope:global -GetGameTip__11LoadingTips9eGameTips = .text:0x8015A9B0; // type:function size:0x2C scope:global -InitLoadingTipsScreen__11LoadingTips = .text:0x8015A9DC; // type:function size:0x30 scope:global -FinishLoadingTexCallback__11LoadingTipsUi = .text:0x8015AA0C; // type:function size:0x20 scope:global -__13LoadingScreenP21ScreenConstructorData = .text:0x8015AA2C; // type:function size:0xF0 scope:global -_._13LoadingScreen = .text:0x8015AB1C; // type:function size:0x90 scope:global -InitLoadingScreen__13LoadingScreen = .text:0x8015ABAC; // type:function size:0x30 scope:global -__20LanguageSelectScreenP21ScreenConstructorData = .text:0x8015ABDC; // type:function size:0x8C scope:global -_._20LanguageSelectScreen = .text:0x8015AC68; // type:function size:0x98 scope:global -NotificationMessage__20LanguageSelectScreenUlP8FEObjectUlUl = .text:0x8015AD00; // type:function size:0x20 scope:global -__23LoadingControllerScreenP21ScreenConstructorData = .text:0x8015AD20; // type:function size:0x94 scope:global -_._23LoadingControllerScreen = .text:0x8015ADB4; // type:function size:0x44 scope:global -SetupControllerConfig__23LoadingControllerScreen = .text:0x8015ADF8; // type:function size:0x228 scope:global -ShowControllerConfig__23LoadingControllerScreen = .text:0x8015B020; // type:function size:0x38 scope:global -HideControllerConfig__23LoadingControllerScreen = .text:0x8015B058; // type:function size:0x4C scope:global -FinishLoadingControllerTextureCallback__23LoadingControllerScreenUi = .text:0x8015B0A4; // type:function size:0x20 scope:global -FinishLoadingControllerTextureCallbackBridge__FUi = .text:0x8015B0C4; // type:function size:0x2C scope:global -PrepToShowControllerConfig__23LoadingControllerScreen = .text:0x8015B0F0; // type:function size:0xC4 scope:global -ClearLoadedControllerTexture__23LoadingControllerScreen = .text:0x8015B1B4; // type:function size:0x38 scope:global -NotificationMessage__23LoadingControllerScreenUlP8FEObjectUlUl = .text:0x8015B1EC; // type:function size:0x4 scope:global -InitLoadingControllerScreen__23LoadingControllerScreen = .text:0x8015B1F0; // type:function size:0x30 scope:global -__Q219nsEngageEventDialog17EngageEventDialogP21ScreenConstructorData = .text:0x8015B220; // type:function size:0x4BC scope:global -_._Q219nsEngageEventDialog17EngageEventDialog = .text:0x8015B6DC; // type:function size:0x74 scope:global -NotifyTheGameAcceptEvent__Q219nsEngageEventDialog17EngageEventDialog = .text:0x8015B750; // type:function size:0x64 scope:global -NotifyTheGameDeclineEvent__Q219nsEngageEventDialog17EngageEventDialog = .text:0x8015B7B4; // type:function size:0x64 scope:global -NotificationMessage__Q219nsEngageEventDialog17EngageEventDialogUlP8FEObjectUlUl = .text:0x8015B818; // type:function size:0xBC scope:global -__20InGameAnyMovieScreenP21ScreenConstructorData = .text:0x8015B8D4; // type:function size:0xE8 scope:global -_._20InGameAnyMovieScreen = .text:0x8015B9BC; // type:function size:0x68 scope:global -Create__20InGameAnyMovieScreenP21ScreenConstructorData = .text:0x8015BA24; // type:function size:0x38 scope:global -NotificationMessage__20InGameAnyMovieScreenUlP8FEObjectUlUl = .text:0x8015BA5C; // type:function size:0xC0 scope:global -IsPlaying__20InGameAnyMovieScreen = .text:0x8015BB1C; // type:function size:0xC scope:global -LaunchMovie__20InGameAnyMovieScreenPCc = .text:0x8015BB28; // type:function size:0x98 scope:global -DismissMovie__20InGameAnyMovieScreen = .text:0x8015BBC0; // type:function size:0x8C scope:global -SetMovieName__20InGameAnyMovieScreenPCc = .text:0x8015BC4C; // type:function size:0x30 scope:global -GetFEngPackageName__20InGameAnyMovieScreen = .text:0x8015BC7C; // type:function size:0x3C scope:global -__23InGameAnyTutorialScreenP21ScreenConstructorData = .text:0x8015BCB8; // type:function size:0x2B4 scope:global -Create__23InGameAnyTutorialScreenP21ScreenConstructorData = .text:0x8015BF6C; // type:function size:0x38 scope:global -NotificationMessage__23InGameAnyTutorialScreenUlP8FEObjectUlUl = .text:0x8015BFA4; // type:function size:0x8C scope:global -_._23InGameAnyTutorialScreen = .text:0x8015C030; // type:function size:0x5C scope:global -LaunchMovie__23InGameAnyTutorialScreenPCcT1 = .text:0x8015C08C; // type:function size:0xB0 scope:global -DismissMovie__23InGameAnyTutorialScreen = .text:0x8015C13C; // type:function size:0xA8 scope:global -SetMovieName__23InGameAnyTutorialScreenPCc = .text:0x8015C1E4; // type:function size:0x30 scope:global -SetPackageName__23InGameAnyTutorialScreenPCc = .text:0x8015C214; // type:function size:0x3C scope:global -GetLanguageInfo__F10eLanguages = .text:0x8015C250; // type:function size:0x38 scope:global -GetLanguageName__F10eLanguages = .text:0x8015C288; // type:function size:0x38 scope:global -GetLocalizedPercentSign__Fv = .text:0x8015C2C0; // type:function size:0x64 scope:global -InitLocalization__Fv = .text:0x8015C324; // type:function size:0x140 scope:global -LanguageHasChanged__F10eLanguages = .text:0x8015C464; // type:function size:0x6C scope:global -LoadLanguageResources__FbN30 = .text:0x8015C4D0; // type:function size:0x268 scope:global -SetCurrentLanguage__F10eLanguages = .text:0x8015C738; // type:function size:0x118 scope:global -LoadCurrentLanguage__Fv = .text:0x8015C850; // type:function size:0x24 scope:global -GetCurrentLanguage__Fv = .text:0x8015C874; // type:function size:0xC scope:global -WideToCharString__FPcUiPCs = .text:0x8015C880; // type:function size:0x70 scope:global -PackedStringToWideString__FPUsiPCc = .text:0x8015C8F0; // type:function size:0x54 scope:global -WideStringToPackedString__FPciPCUs = .text:0x8015C944; // type:function size:0x3C scope:global -__as__12FEWideStringPCc = .text:0x8015C980; // type:function size:0x48 scope:global -SearchForString__FUi = .text:0x8015C9C8; // type:function size:0xB4 scope:local -DoesStringExist__FUi = .text:0x8015CA7C; // type:function size:0x30 scope:global -GetLocalizedString__FUi = .text:0x8015CAAC; // type:function size:0x34 scope:global -GetLocalizedString__FPcUiUi = .text:0x8015CAE0; // type:function size:0x44 scope:global -GetTranslatedString__Fi = .text:0x8015CB24; // type:function size:0x20 scope:global -GetLocalizedWideString__FPsiUi = .text:0x8015CB44; // type:function size:0x50 scope:global -LoaderLanguage__FP6bChunk = .text:0x8015CB94; // type:function size:0x11C scope:global -UnloaderLanguage__FP6bChunk = .text:0x8015CCB0; // type:function size:0x48 scope:global -PlatEndianSwap__17WideCharHistogram = .text:0x8015CCF8; // type:function size:0x54 scope:global -PackString__17WideCharHistogramPciPCUs = .text:0x8015CD4C; // type:function size:0x170 scope:global -UnpackString__17WideCharHistogramPUsiPCc = .text:0x8015CEBC; // type:function size:0xB4 scope:global -StartRace__11RaceStarter = .text:0x8015CF70; // type:function size:0x9C scope:global -SetControllerConfig__11RaceStarteri12JoystickPort = .text:0x8015D00C; // type:function size:0x4 scope:global -StartSkipFERace__11RaceStarter = .text:0x8015D010; // type:function size:0x1EC scope:global -StartCareerFreeRoam__11RaceStarter = .text:0x8015D1FC; // type:function size:0x3C scope:global -__14feDialogConfig = .text:0x8015D238; // type:function size:0x8C scope:global -NotifySoundMessage__14feDialogScreenUl18eMenuSoundTriggers = .text:0x8015D2C4; // type:function size:0xB8 scope:global -NotificationMessage__14feDialogScreenUlP8FEObjectUlUl = .text:0x8015D37C; // type:function size:0x36C scope:global -__14feDialogScreenP21ScreenConstructorData = .text:0x8015D6E8; // type:function size:0xCC scope:global -_._14feDialogScreen = .text:0x8015D7B4; // type:function size:0x68 scope:global -BuildFromConfig__14feDialogScreen = .text:0x8015D81C; // type:function size:0x4D8 scope:global -DialogCreater__FP21ScreenConstructorData = .text:0x8015DCF4; // type:function size:0x38 scope:global -DismissDialog__15DialogInterfacei = .text:0x8015DD2C; // type:function size:0xA0 scope:global -ShowDialog__15DialogInterfaceP14feDialogConfig = .text:0x8015DDCC; // type:function size:0x1D8 scope:global -FormatMessage__FPciPCcP13__va_list_tag = .text:0x8015DFA4; // type:function size:0x28 scope:local -ShowOk__15DialogInterfacePCcT112eDialogTitleT1P13__va_list_tag = .text:0x8015DFCC; // type:function size:0xA0 scope:global -ShowOk__15DialogInterfacePCcT112eDialogTitleUie = .text:0x8015E06C; // type:function size:0xC0 scope:global -ShowOneButton__15DialogInterfacePCcT112eDialogTitleUiUiUibT1P13__va_list_tag = .text:0x8015E12C; // type:function size:0x98 scope:global -ShowOneButton__15DialogInterfacePCcT112eDialogTitleUiUiUiUie = .text:0x8015E1C4; // type:function size:0xD4 scope:global -ShowOneButton__15DialogInterfacePCcT112eDialogTitleUiUiUie = .text:0x8015E298; // type:function size:0xD4 scope:global -ShowTwoButtons__15DialogInterfacePCcT112eDialogTitleUiUiUiUiUib19eDialogFirstButtonsT1P13__va_list_tag = .text:0x8015E36C; // type:function size:0xDC scope:global -ShowTwoButtons__15DialogInterfacePCcT112eDialogTitleUiUiUiUiUi19eDialogFirstButtonsT1e = .text:0x8015E448; // type:function size:0xB4 scope:global -ShowTwoButtons__15DialogInterfacePCcT112eDialogTitleUiUiUiUiUi19eDialogFirstButtonsUie = .text:0x8015E4FC; // type:function size:0xF0 scope:global -ShowTwoButtons__15DialogInterfacePCcT112eDialogTitleUiUiUiUi19eDialogFirstButtonsUie = .text:0x8015E5EC; // type:function size:0xEC scope:global -ShowThreeButtons__15DialogInterfacePCcT112eDialogTitleUiUiUiUiUiUiUi19eDialogFirstButtonsT1P13__va_list_tag = .text:0x8015E6D8; // type:function size:0xB8 scope:global -ShowThreeButtons__15DialogInterfacePCcT112eDialogTitleUiUiUiUiUiUiUi19eDialogFirstButtonsUie = .text:0x8015E790; // type:function size:0xF8 scope:global -__18KeyboardEditString = .text:0x8015E888; // type:function size:0x70 scope:global -SyncEditIntoPacked__18KeyboardEditString = .text:0x8015E8F8; // type:function size:0x2C scope:global -GetEditedString__18KeyboardEditString = .text:0x8015E924; // type:function size:0x30 scope:global -EndCapture__18KeyboardEditString = .text:0x8015E954; // type:function size:0x64 scope:global -GetStringForDisplay__18KeyboardEditStringPci = .text:0x8015E9B8; // type:function size:0x64 scope:global -RevertToOriginalString__18KeyboardEditString = .text:0x8015EA1C; // type:function size:0x40 scope:global -_._19FEngTextInputObject = .text:0x8015EA5C; // type:function size:0x48 scope:global -ReturnPressed__19FEngTextInputObject = .text:0x8015EAA4; // type:function size:0xA8 scope:global -EscapePressed__19FEngTextInputObject = .text:0x8015EB4C; // type:function size:0x84 scope:global -RedrawString__19FEngTextInputObjectb = .text:0x8015EBD0; // type:function size:0x144 scope:global -Notify__19FEngTextInputObjectUi = .text:0x8015ED14; // type:function size:0x4C scope:global -__7cSlider = .text:0x8015ED60; // type:function size:0x58 scope:global -Update__7cSliderUl = .text:0x8015EDB8; // type:function size:0xC0 scope:global -Init__7cSliderPCcT1fffff = .text:0x8015EE78; // type:function size:0xA8 scope:global -InitObjects__7cSliderPCcT1 = .text:0x8015EF20; // type:function size:0x114 scope:global -InitValues__7cSliderfffff = .text:0x8015F034; // type:function size:0x2C scope:global -Draw__7cSlider = .text:0x8015F060; // type:function size:0x17C scope:global -ToggleVisible__7cSliderb = .text:0x8015F1DC; // type:function size:0x74 scope:global -SetValue__7cSliderf = .text:0x8015F250; // type:function size:0x28 scope:global -Highlight__7cSlider = .text:0x8015F278; // type:function size:0x78 scope:global -UnHighlight__7cSlider = .text:0x8015F2F0; // type:function size:0x78 scope:global -SetPos__7cSliderff = .text:0x8015F368; // type:function size:0x58 scope:global -Init__14TwoStageSliderPCcT1ffffff = .text:0x8015F3C0; // type:function size:0xB8 scope:global -InitObjects__14TwoStageSliderPCcT1 = .text:0x8015F478; // type:function size:0x68 scope:global -InitValues__14TwoStageSliderffffff = .text:0x8015F4E0; // type:function size:0x68 scope:global -ToggleVisible__14TwoStageSliderb = .text:0x8015F548; // type:function size:0x4C scope:global -Draw__14TwoStageSlider = .text:0x8015F594; // type:function size:0x1C8 scope:global -SaveSomeData__FPvT0iT0 = .text:0x8015F75C; // type:function size:0x3C scope:global -LoadSomeData__FPvT0iT0 = .text:0x8015F798; // type:function size:0x38 scope:global -__18FEKeyboardSettings = .text:0x8015F7D0; // type:function size:0x38 scope:global -Default__14PlayerSettings = .text:0x8015F808; // type:function size:0x44 scope:global -__eq__C14PlayerSettingsRC14PlayerSettings = .text:0x8015F84C; // type:function size:0x2C scope:global -DefaultFromOptionsScreen__14PlayerSettings = .text:0x8015F878; // type:function size:0x44 scope:global -GetControllerAttribs__C14PlayerSettings18eControllerAttribsb = .text:0x8015F8BC; // type:function size:0x78 scope:global -ScrollDriveCam__14PlayerSettingsi = .text:0x8015F934; // type:function size:0x88 scope:global -Default__16GameplaySettings = .text:0x8015F9BC; // type:function size:0x84 scope:global -IsMapItemEnabled__16GameplaySettings17eWorldMapItemType = .text:0x8015FA40; // type:function size:0x18 scope:global -SetMapItem__16GameplaySettings17eWorldMapItemTypeb = .text:0x8015FA58; // type:function size:0x28 scope:global -__eq__C16GameplaySettingsRC16GameplaySettings = .text:0x8015FA80; // type:function size:0x2C scope:global -Default__13VideoSettings = .text:0x8015FAAC; // type:function size:0x28 scope:global -__eq__C13VideoSettingsRC13VideoSettings = .text:0x8015FAD4; // type:function size:0x2C scope:global -Default__13AudioSettings = .text:0x8015FB00; // type:function size:0x88 scope:global -__eq__C13AudioSettingsRC13AudioSettings = .text:0x8015FB88; // type:function size:0xF4 scope:global -Default__15OptionsSettings = .text:0x8015FC7C; // type:function size:0x58 scope:global -Default__14CareerSettings = .text:0x8015FCD4; // type:function size:0xA8 scope:global -GetSMSMessage__14CareerSettingsUi = .text:0x8015FD7C; // type:function size:0x24 scope:global -GetSMSSortOrder__14CareerSettings = .text:0x8015FDA0; // type:function size:0x14 scope:global -IsVoice__10SMSMessage = .text:0x8015FDB4; // type:function size:0x44 scope:global -SpendCash__14CareerSettingsi = .text:0x8015FDF8; // type:function size:0x24 scope:global -StartNewCareer__14CareerSettingsb = .text:0x8015FE1C; // type:function size:0x1E4 scope:global -TryAwardDemoMarker__14CareerSettings = .text:0x80160000; // type:function size:0x6C scope:global -ResumeCareer__14CareerSettings = .text:0x8016006C; // type:function size:0x234 scope:global -AwardOneTimeCashBonus__14CareerSettingsb = .text:0x801602A0; // type:function size:0x24 scope:global -SetPlayerHasBeatenTheGame__14CareerSettings = .text:0x801602C4; // type:function size:0x10 scope:global -GenerateCaseFileName__14CareerSettings = .text:0x801602D4; // type:function size:0x70 scope:global -SaveToBuffer__14CareerSettingsPvT1 = .text:0x80160344; // type:function size:0xE0 scope:global -LoadFromBuffer__14CareerSettingsPvT1 = .text:0x80160424; // type:function size:0x100 scope:global -GetSaveBufferSize__14CareerSettingsb = .text:0x80160524; // type:function size:0x14 scope:global -SaveRaceData__14CareerSettingsPvT1 = .text:0x80160538; // type:function size:0x108 scope:global -SaveUnlockData__14CareerSettingsPvT1 = .text:0x80160640; // type:function size:0x58 scope:global -SaveGameplayData__14CareerSettingsPvT1 = .text:0x80160698; // type:function size:0x6C scope:global -LoadRaceData__14CareerSettingsPvT1 = .text:0x80160704; // type:function size:0x134 scope:global -LoadUnlockData__14CareerSettingsPvT1 = .text:0x80160838; // type:function size:0x58 scope:global -LoadGameplayData__14CareerSettingsPvT1 = .text:0x80160890; // type:function size:0x58 scope:global -__11UserProfile = .text:0x801608E8; // type:function size:0x124 scope:global -_._11UserProfile = .text:0x80160A0C; // type:function size:0x68 scope:global -SetProfileName__11UserProfilePCcb = .text:0x80160A74; // type:function size:0xC8 scope:global -GetProfileName__11UserProfile = .text:0x80160B3C; // type:function size:0x4 scope:global -IsProfileNamed__11UserProfile = .text:0x80160B40; // type:function size:0x8 scope:global -Default__11UserProfileib = .text:0x80160B48; // type:function size:0x56C scope:global -CommitHighScoresPauseQuit__11UserProfile = .text:0x801610B4; // type:function size:0x28 scope:global -CommitPursuitInfo__11UserProfileP8IPursuitUiUiUi = .text:0x801610DC; // type:function size:0x28 scope:global -WriteProfileHash__11UserProfilePvT1iT1 = .text:0x80161104; // type:function size:0x84 scope:global -VerifyProfileHash__11UserProfilePvT1i = .text:0x80161188; // type:function size:0x80 scope:global -SaveToBuffer__11UserProfilePvi = .text:0x80161208; // type:function size:0x168 scope:global -LoadFromBuffer__11UserProfilePvibi = .text:0x80161370; // type:function size:0x1FC scope:global -GetSaveBufferSize__11UserProfileb = .text:0x8016156C; // type:function size:0x44 scope:global -__17cFrontendDatabase = .text:0x801615B0; // type:function size:0x120 scope:global -Default__17cFrontendDatabase = .text:0x801616D0; // type:function size:0x12C scope:global -DefaultProfile__17cFrontendDatabase = .text:0x801617FC; // type:function size:0xCC scope:global -DefaultRaceSettings__17cFrontendDatabase = .text:0x801618C8; // type:function size:0x80 scope:global -NotifyDeleteCar__17cFrontendDatabaseUi = .text:0x80161948; // type:function size:0x6C scope:global -SetPlayersJoystickPort__17cFrontendDatabaseiSc = .text:0x801619B4; // type:function size:0x64 scope:global -GetDefaultCar__17cFrontendDatabase = .text:0x80161A18; // type:function size:0x15C scope:global -CreateMultiplayerProfile__17cFrontendDatabasei = .text:0x80161B74; // type:function size:0x5C scope:global -DeleteMultiplayerProfile__17cFrontendDatabasei = .text:0x80161BD0; // type:function size:0xDC scope:global -AllocBackupDB__17cFrontendDatabaseb = .text:0x80161CAC; // type:function size:0x70 scope:global -DeallocBackupDB__17cFrontendDatabase = .text:0x80161D1C; // type:function size:0x40 scope:global -RestoreFromBackupDB__17cFrontendDatabase = .text:0x80161D5C; // type:function size:0x58 scope:global -BackupCarStable__17cFrontendDatabase = .text:0x80161DB4; // type:function size:0x70 scope:global -IsCarStableDirty__17cFrontendDatabase = .text:0x80161E24; // type:function size:0x80 scope:global -RefreshCurrentRide__17cFrontendDatabase = .text:0x80161EA4; // type:function size:0xAC scope:global -GetQuickRaceSettings__17cFrontendDatabaseQ25GRace4Type = .text:0x80161F50; // type:function size:0x30 scope:global -IsFinalEpicChase__17cFrontendDatabase = .text:0x80161F80; // type:function size:0x80 scope:global -GetRandomRaceOptions__17cFrontendDatabaseP12RaceSettingsQ25GRace4Type = .text:0x80162000; // type:function size:0x9C scope:global -FillCustomRace__17cFrontendDatabaseP11GRaceCustomP12RaceSettings = .text:0x8016209C; // type:function size:0xFC scope:global -BuildCurrentRideForPlayer__17cFrontendDatabaseiP8RideInfo = .text:0x80162198; // type:function size:0xA0 scope:global -NotifyExitRaceToFrontend__17cFrontendDatabase15eExitRacePlaces = .text:0x80162238; // type:function size:0x34 scope:global -GetUserProfileSaveSize__17cFrontendDatabaseb = .text:0x8016226C; // type:function size:0x24 scope:global -SaveUserProfileToBuffer__17cFrontendDatabasePvi = .text:0x80162290; // type:function size:0x24 scope:global -LoadUserProfileFromBuffer__17cFrontendDatabasePvii = .text:0x801622B4; // type:function size:0x7C scope:global -GetChallengeHeaderHash__17cFrontendDatabaseUi = .text:0x80162330; // type:function size:0x2C scope:global -GetChallengeDescHash__17cFrontendDatabaseUi = .text:0x8016235C; // type:function size:0x2C scope:global -GetBountyIconHash__17cFrontendDatabaseUi = .text:0x80162388; // type:function size:0x30 scope:global -GetBountyHeaderHash__17cFrontendDatabaseUi = .text:0x801623B8; // type:function size:0x2C scope:global -GetBountyDescHash__17cFrontendDatabaseUi = .text:0x801623E4; // type:function size:0x2C scope:global -GetMilestoneHeaderHash__17cFrontendDatabaseUi = .text:0x80162410; // type:function size:0x2C scope:global -GetMilestoneDescHash__17cFrontendDatabaseUi = .text:0x8016243C; // type:function size:0x2C scope:global -GetMilestoneIconHash__17cFrontendDatabaseUib = .text:0x80162468; // type:function size:0x2D4 scope:global -SetMilestoneDescriptionString__C17cFrontendDatabasePciffb = .text:0x8016273C; // type:function size:0x270 scope:global -IsMilestoneTimeFormat__C17cFrontendDatabasei = .text:0x801629AC; // type:function size:0x30 scope:global -GetRaceNameHash__17cFrontendDatabaseQ25GRace4Type = .text:0x801629DC; // type:function size:0x9C scope:global -GetRaceIconHash__17cFrontendDatabaseQ25GRace4Type = .text:0x80162A78; // type:function size:0x9C scope:global -GetSafehouseIconHash__17cFrontendDatabasePCc = .text:0x80162B14; // type:function size:0x98 scope:global -__19GameCompletionStats = .text:0x80162BAC; // type:function size:0x24 scope:global -GetGameCompletionStats__17cFrontendDatabase = .text:0x80162BD0; // type:function size:0x4A0 scope:global -InitFrontendDatabase__Fv = .text:0x80163070; // type:function size:0x44 scope:global -GetMikeMannBuild__Fv = .text:0x801630B4; // type:function size:0xC scope:global -GetIsCollectorsEdition__Fv = .text:0x801630C0; // type:function size:0xC scope:global -FixDot__FPci = .text:0x801630CC; // type:function size:0x30 scope:global -CalcLanguageHash__FPCcP15GRaceParameters = .text:0x801630FC; // type:function size:0x68 scope:global -Default__12RaceSettings = .text:0x80163164; // type:function size:0x64 scope:global -CommitHighScoresPauseQuit__18HighScoresDatabase = .text:0x801631C8; // type:function size:0x10 scope:global -CommitPursuitInfo__18HighScoresDatabaseP8IPursuitUiiUi = .text:0x801631D8; // type:function size:0x6E0 scope:global -CalcPursuitRank__18HighScoresDatabase19ePursuitDetailTypesb = .text:0x801638B8; // type:function size:0x398 scope:global -GetPreviouslyPursuedCarNameHash__C18HighScoresDatabase = .text:0x80163C50; // type:function size:0x24 scope:global -GetCareerCST__C18HighScoresDatabase12RAP_CTS_ITEMRiRUi = .text:0x80163C74; // type:function size:0x14C scope:global -Default__18HighScoresDatabase = .text:0x80163DC0; // type:function size:0x28 scope:global -GeneratePursuitID__22TopEvadedPursuitDetail = .text:0x80163DE8; // type:function size:0x88 scope:global -IncValue__19CareerPursuitScores19ePursuitDetailTypesi = .text:0x80163E70; // type:function size:0x2C scope:global -GetValue__C19CareerPursuitScores19ePursuitDetailTypes = .text:0x80163E9C; // type:function size:0x8C scope:global -GetPOVTypeFromPlayerCamera__F22ePlayerSettingsCameras = .text:0x80163F28; // type:function size:0x7C scope:global -IsPlayerCameraSelectable__F8POVTypes = .text:0x80163FA4; // type:function size:0x2C8 scope:global -GetPlayerCameraFromPOVType__F8POVTypes = .text:0x8016426C; // type:function size:0x7C scope:global -AdjustStableHeat_EvadePursuit__Fi = .text:0x801642E8; // type:function size:0x80 scope:global -AdjustStableHeat_EventWin__Fi = .text:0x80164368; // type:function size:0x80 scope:global -AdjustStableImpound_EventWin__Fi = .text:0x801643E8; // type:function size:0x9C scope:global -AdjustStableImpound_EvadePursuit__Fi = .text:0x80164484; // type:function size:0x84 scope:global -__13FEPlayerCarDB = .text:0x80164508; // type:function size:0xC8 scope:global -_._13FEPlayerCarDB = .text:0x801645D0; // type:function size:0x28 scope:global -GetCarRecordByHandle__13FEPlayerCarDBUi = .text:0x801645F8; // type:function size:0x30 scope:global -GetCarByIndex__13FEPlayerCarDBi = .text:0x80164628; // type:function size:0x1C scope:global -CreateNewCarRecord__13FEPlayerCarDB = .text:0x80164644; // type:function size:0x64 scope:global -CanCreateNewCarRecord__13FEPlayerCarDB = .text:0x801646A8; // type:function size:0x30 scope:global -CanCreateNewCustomizationRecord__13FEPlayerCarDB = .text:0x801646D8; // type:function size:0x34 scope:global -CreateNewCustomizationRecord__13FEPlayerCarDB = .text:0x8016470C; // type:function size:0x68 scope:global -CreateNewCareerRecord__13FEPlayerCarDB = .text:0x80164774; // type:function size:0x70 scope:global -GetNumInfraction__13FEPlayerCarDBQ218GInfractionManager14InfractionTypeb = .text:0x801647E4; // type:function size:0x88 scope:global -GetTotalNumInfractions__13FEPlayerCarDBb = .text:0x8016486C; // type:function size:0x78 scope:global -GetNumInfractionsOnCar__13FEPlayerCarDBUib = .text:0x801648E4; // type:function size:0x60 scope:global -GetTotalBounty__13FEPlayerCarDB = .text:0x80164944; // type:function size:0x54 scope:global -GetTotalEvadedPursuits__13FEPlayerCarDB = .text:0x80164998; // type:function size:0x54 scope:global -GetTotalBustedPursuits__13FEPlayerCarDB = .text:0x801649EC; // type:function size:0x54 scope:global -GetNumImpoundedCars__13FEPlayerCarDB = .text:0x80164A40; // type:function size:0x44 scope:global -GetTotalFines__13FEPlayerCarDBb = .text:0x80164A84; // type:function size:0x48 scope:global -GetNumCareerCarsWithARecord__13FEPlayerCarDB = .text:0x80164ACC; // type:function size:0x44 scope:global -ForAllCareerRecordsSum__13FEPlayerCarDBRCQ213FEPlayerCarDB10MyCallback = .text:0x80164B10; // type:function size:0xBC scope:global -BackupSoldCarHistory__13FEPlayerCarDBUc = .text:0x80164BCC; // type:function size:0x80 scope:global -GetPreferedCarName__13FEPlayerCarDB = .text:0x80164C4C; // type:function size:0xC0 scope:global -GetNumQuickRaceCars__13FEPlayerCarDB = .text:0x80164D0C; // type:function size:0x28 scope:global -GetNumCareerCars__13FEPlayerCarDB = .text:0x80164D34; // type:function size:0x28 scope:global -GetNumPurchasedCars__13FEPlayerCarDB = .text:0x80164D5C; // type:function size:0x8C scope:global -GetNumAvailableCareerCars__13FEPlayerCarDB = .text:0x80164DE8; // type:function size:0xA8 scope:global -GetNumCars__13FEPlayerCarDBUi = .text:0x80164E90; // type:function size:0x7C scope:global -CreateNewCustomCar__13FEPlayerCarDBUi = .text:0x80164F0C; // type:function size:0x50 scope:global -AwardRivalCar__13FEPlayerCarDBUi = .text:0x80164F5C; // type:function size:0x1BC scope:global -CreateNewCareerCar__13FEPlayerCarDBUi = .text:0x80165118; // type:function size:0x98 scope:global -CreateNewPresetCar__13FEPlayerCarDBPCc = .text:0x801651B0; // type:function size:0x1DC scope:global -CreateCar__13FEPlayerCarDBUii = .text:0x8016538C; // type:function size:0xF0 scope:global -DeleteCustomCar__13FEPlayerCarDBUi = .text:0x8016547C; // type:function size:0x28 scope:global -DeleteCareerCar__13FEPlayerCarDBUib = .text:0x801654A4; // type:function size:0x28 scope:global -DeleteCar__13FEPlayerCarDBUiUib = .text:0x801654CC; // type:function size:0xE4 scope:global -DeleteAllCars__13FEPlayerCarDB = .text:0x801655B0; // type:function size:0x20 scope:global -DeleteAllCustomizations__13FEPlayerCarDB = .text:0x801655D0; // type:function size:0x24 scope:global -DeleteAllCareerRecords__13FEPlayerCarDB = .text:0x801655F4; // type:function size:0x28 scope:global -IsBonusCar__13FEPlayerCarDBPCc = .text:0x8016561C; // type:function size:0xD8 scope:global -Default__13FEPlayerCarDB = .text:0x801656F4; // type:function size:0x36C scope:global -SaveToBuffer__13FEPlayerCarDBPci = .text:0x80165A60; // type:function size:0x44 scope:global -LoadFromBuffer__13FEPlayerCarDBPci = .text:0x80165AA4; // type:function size:0x3C scope:global -GetSaveBufferSize__13FEPlayerCarDB = .text:0x80165AE0; // type:function size:0xC scope:global -AwardBonusCars__13FEPlayerCarDB = .text:0x80165AEC; // type:function size:0x54 scope:global -SetCarToPreset__13FEPlayerCarDBUiP9PresetCar = .text:0x80165B40; // type:function size:0x68 scope:global -BuildRideForPlayer__13FEPlayerCarDBUiiP8RideInfo = .text:0x80165BA8; // type:function size:0x80 scope:global -GetCustomizationRecordByHandle__13FEPlayerCarDBUc = .text:0x80165C28; // type:function size:0x24 scope:global -GetCareerRecordByHandle__13FEPlayerCarDBUc = .text:0x80165C4C; // type:function size:0x3C scope:global -WriteRecordIntoPhysics__13FEPlayerCarDBUiRQ36Attrib3Gen8pvehicle = .text:0x80165C88; // type:function size:0x64 scope:global -__11FECarRecord = .text:0x80165CEC; // type:function size:0x2C scope:global -__as__11FECarRecordRC11FECarRecord = .text:0x80165D18; // type:function size:0x20 scope:global -Default__11FECarRecord = .text:0x80165D38; // type:function size:0x180 scope:global -GetType__11FECarRecord = .text:0x80165EB8; // type:function size:0xA8 scope:global -GetCost__11FECarRecord = .text:0x80165F60; // type:function size:0x7C scope:global -GetReleaseFromImpoundCost__11FECarRecord = .text:0x80165FDC; // type:function size:0x60 scope:global -GetNameHash__11FECarRecord = .text:0x8016603C; // type:function size:0xE4 scope:global -GetLogoHash__11FECarRecord = .text:0x80166120; // type:function size:0xE8 scope:global -GetManuLogoHash__11FECarRecord = .text:0x80166208; // type:function size:0x90 scope:global -GetManufacturerName__11FECarRecord = .text:0x80166298; // type:function size:0x308 scope:global -MatchesFilter__11FECarRecordi = .text:0x801665A0; // type:function size:0x4C scope:global -GetDebugName__11FECarRecord = .text:0x801665EC; // type:function size:0x7C scope:global -GetFECarNameHashFromFEKey__FUi = .text:0x80166668; // type:function size:0x44 scope:global -Default__21FECustomizationRecord = .text:0x801666AC; // type:function size:0x90 scope:global -WriteRecordIntoPhysics__C21FECustomizationRecordRQ36Attrib3Gen8pvehicle = .text:0x8016673C; // type:function size:0x3C scope:global -WritePhysicsIntoRecord__21FECustomizationRecordRCQ36Attrib3Gen8pvehicle = .text:0x80166778; // type:function size:0x2C scope:global -GetInstalledPart__C21FECustomizationRecord7CarTypei = .text:0x801667A4; // type:function size:0x30 scope:global -SetInstalledPart__21FECustomizationRecordiP7CarPart = .text:0x801667D4; // type:function size:0x6C scope:global -WriteRecordIntoRide__C21FECustomizationRecordP8RideInfo = .text:0x80166840; // type:function size:0x60 scope:global -WriteRideIntoRecord__21FECustomizationRecordPC8RideInfo = .text:0x801668A0; // type:function size:0x58 scope:global -__21FECustomizationRecord = .text:0x801668F8; // type:function size:0x74 scope:global -BecomePreset__21FECustomizationRecordP9PresetCar = .text:0x8016696C; // type:function size:0xB0 scope:global -__17FEInfractionsDataUi = .text:0x80166A1C; // type:function size:0x104 scope:global -NumInfractions__C17FEInfractionsData = .text:0x80166B20; // type:function size:0x44 scope:global -__apl__17FEInfractionsDataRC17FEInfractionsData = .text:0x80166B64; // type:function size:0x84 scope:global -GetValue__C17FEInfractionsDataQ218GInfractionManager14InfractionType = .text:0x80166BE8; // type:function size:0xA4 scope:global -GetFineValue__C17FEInfractionsData = .text:0x80166C8C; // type:function size:0x464 scope:global -Default__13FEImpoundData = .text:0x801670F0; // type:function size:0x2C scope:global -BecomeImpounded__13FEImpoundDataQ213FEImpoundData15eImpoundReasons = .text:0x8016711C; // type:function size:0x18 scope:global -NotifyPlayerPaidToRelease__13FEImpoundData = .text:0x80167134; // type:function size:0x14 scope:global -NotifyPlayerUsedMarkerToRelease__13FEImpoundData = .text:0x80167148; // type:function size:0x20 scope:global -NotifyWin__13FEImpoundData = .text:0x80167168; // type:function size:0x64 scope:global -NotifyBusted__13FEImpoundData = .text:0x801671CC; // type:function size:0x30 scope:global -NotifyEvade__13FEImpoundData = .text:0x801671FC; // type:function size:0x74 scope:global -CanAddMaxBusted__13FEImpoundData = .text:0x80167270; // type:function size:0x3C scope:global -AddMaxBusted__13FEImpoundData = .text:0x801672AC; // type:function size:0x30 scope:global -Default__14FECareerRecord = .text:0x801672DC; // type:function size:0xC0 scope:global -SetVehicleHeat__14FECareerRecordf = .text:0x8016739C; // type:function size:0x8 scope:global -GetVehicleHeat__14FECareerRecord = .text:0x801673A4; // type:function size:0x8 scope:global -AdjustHeatOnEventWin__14FECareerRecord = .text:0x801673AC; // type:function size:0x88 scope:global -AdjustHeatOnEvadePursuit__14FECareerRecord = .text:0x80167434; // type:function size:0x88 scope:global -AdjustHeatOnDecalApplied__14FECareerRecordf = .text:0x801674BC; // type:function size:0xA0 scope:global -AdjustHeatOnPaintApplied__14FECareerRecordf = .text:0x8016755C; // type:function size:0xA0 scope:global -AdjustHeatOnVinylApplied__14FECareerRecordf = .text:0x801675FC; // type:function size:0xA0 scope:global -AdjustHeatOnBodyKitApplied__14FECareerRecordf = .text:0x8016769C; // type:function size:0xA0 scope:global -AdjustHeatOnHoodApplied__14FECareerRecordf = .text:0x8016773C; // type:function size:0xA0 scope:global -AdjustHeatOnRimApplied__14FECareerRecordf = .text:0x801677DC; // type:function size:0xA0 scope:global -AdjustHeatOnRimPaintApplied__14FECareerRecordf = .text:0x8016787C; // type:function size:0xA0 scope:global -AdjustHeatOnRoofScoopApplied__14FECareerRecordf = .text:0x8016791C; // type:function size:0xA0 scope:global -AdjustHeatOnSpoilerApplied__14FECareerRecordf = .text:0x801679BC; // type:function size:0xA0 scope:global -AdjustHeatOnWindowTintApplied__14FECareerRecordf = .text:0x80167A5C; // type:function size:0xA0 scope:global -CommitPursuitCarData__14FECareerRecordUiUib = .text:0x80167AFC; // type:function size:0x78 scope:global -WaiveIncractions__14FECareerRecordUi = .text:0x80167B74; // type:function size:0xB0 scope:global -ServeAllIncractions__14FECareerRecord = .text:0x80167C24; // type:function size:0x6C scope:global -GetNumInfraction__C14FECareerRecordQ218GInfractionManager14InfractionTypeb = .text:0x80167C90; // type:function size:0x34 scope:global -Initialize__14FERenderObject = .text:0x80167CC4; // type:function size:0x5C scope:global -__14FERenderObjectP8FEObjectP11TextureInfo = .text:0x80167D20; // type:function size:0x58 scope:global -_._14FERenderObject = .text:0x80167D78; // type:function size:0x74 scope:global -SetTransform__14FERenderObjectP8bMatrix4 = .text:0x80167DEC; // type:function size:0x28 scope:global -__nw__13FERenderEPolyUi = .text:0x80167E14; // type:function size:0x84 scope:global -__dl__13FERenderEPolyPv = .text:0x80167E98; // type:function size:0x78 scope:global -AddPoly__14FERenderObjectfffffffffPUiP19FEPackageRenderInfo = .text:0x80167F10; // type:function size:0x1C0 scope:global -AddPoly__14FERenderObjectfffffffffPUiP11TextureInfoP19FEPackageRenderInfo = .text:0x801680D0; // type:function size:0x44 scope:global -AddPolyWithRotatedMask__14FERenderObjectfffffffffffffffffPUiP11TextureInfoT19_ = .text:0x80168114; // type:function size:0x244 scope:global -V4Mult__FRC8bVector4f = .text:0x80168358; // type:function size:0x38 scope:global -AddPoly__14FERenderObjectfffffffffPUiP10FEClipInfoP19FEPackageRenderInfo = .text:0x80168390; // type:function size:0x4A8 scope:global -Render__14FERenderObject = .text:0x80168838; // type:function size:0xB8 scope:global -Clear__14FERenderObjectP19FEPackageRenderInfo = .text:0x801688F0; // type:function size:0x70 scope:global -ClipGeneral__14FERenderObjectP10FEClipInfoP8bVector3P8bVector2P8bVector4T2T3T4 = .text:0x80168960; // type:function size:0x6F4 scope:global -ClipLeft__FP8bVector3P8bVector2P8bVector4T0T1T2Uif = .text:0x80169054; // type:function size:0x5B8 scope:global -ClipTop__FP8bVector3P8bVector2P8bVector4T0T1T2Uif = .text:0x8016960C; // type:function size:0x5B8 scope:global -ClipRight__FP8bVector3P8bVector2P8bVector4T0T1T2Uif = .text:0x80169BC4; // type:function size:0x5B8 scope:global -ClipBottom__FP8bVector3P8bVector2P8bVector4T0T1T2Uif = .text:0x8016A17C; // type:function size:0x5B8 scope:global -ClipAligned__14FERenderObjectP10FEClipInfoP8bVector3P8bVector2P8bVector4T2T3T4 = .text:0x8016A734; // type:function size:0xF4 scope:global -FEngColorToEpolyColor__FG7FEColor = .text:0x8016A828; // type:function size:0x50 scope:global -next_power_of_2__FUi = .text:0x8016A878; // type:function size:0x34 scope:global -MakeRenderMatrix__11cFEngRenderP9FEObjDataP8bMatrix4R7FEColorif = .text:0x8016A8AC; // type:function size:0x2FC scope:global -RenderMovie__11cFEngRenderP7FEMovieP14FERenderObjectP19FEPackageRenderInfo = .text:0x8016ABA8; // type:function size:0x3C scope:global -rotate_uvs__FP8bVector2fff = .text:0x8016ABE4; // type:function size:0x1C8 scope:local -RenderMultiImage__11cFEngRenderP12FEMultiImageP14FERenderObjectP19FEPackageRenderInfo = .text:0x8016ADAC; // type:function size:0x46C scope:global -RenderImage__11cFEngRenderP7FEImageP14FERenderObjectP19FEPackageRenderInfo = .text:0x8016B218; // type:function size:0x258 scope:global -RenderCBVImage__11cFEngRenderP14FEColoredImageP14FERenderObjectP19FEPackageRenderInfo = .text:0x8016B470; // type:function size:0x2D8 scope:global -RenderString__11cFEngRenderP8FEStringP14FERenderObjectP19FEPackageRenderInfo = .text:0x8016B748; // type:function size:0x21C scope:global -RenderModel__11cFEngRenderP7FEModelP14FERenderObject = .text:0x8016B964; // type:function size:0x4 scope:global -RenderObject__11cFEngRenderP8FEObjectP19FEPackageRenderInfo = .text:0x8016B968; // type:function size:0x140 scope:global -RemoveCachedRender__11cFEngRenderP8FEObjectP19FEPackageRenderInfo = .text:0x8016BAA8; // type:function size:0x58 scope:global -FindCachedRender__11cFEngRenderP8FEObject = .text:0x8016BB00; // type:function size:0x8 scope:global -CreateCachedRender__11cFEngRenderP8FEObjectP11TextureInfo = .text:0x8016BB08; // type:function size:0x48 scope:global -__11cFEngRender = .text:0x8016BB50; // type:function size:0x70 scope:global -GetRenderContext__11cFEngRenderUs = .text:0x8016BBC0; // type:function size:0x10 scope:global -GenerateRenderContext__11cFEngRenderUsP8FEObject = .text:0x8016BBD0; // type:function size:0x13C scope:global -PrepForPackage__11cFEngRenderP9FEPackage = .text:0x8016BD0C; // type:function size:0x1C scope:global -PackageFinished__11cFEngRenderP9FEPackage = .text:0x8016BD28; // type:function size:0x4 scope:global -AddToRenderList__11cFEngRenderP8FEObject = .text:0x8016BD2C; // type:function size:0xB0 scope:global -SetLoadingScreenPackageName__FPCc = .text:0x8016BDDC; // type:function size:0xC scope:global -GetLoadingScreenPackageName__Fv = .text:0x8016BDE8; // type:function size:0xC scope:global -CreateMainMenu__FP21ScreenConstructorData = .text:0x8016BDF4; // type:function size:0x38 scope:local -CreateSubMenu__FP21ScreenConstructorData = .text:0x8016BE2C; // type:function size:0xF4 scope:local -CreateCommonPauseMenu__FP21ScreenConstructorData = .text:0x8016BF20; // type:function size:0x60 scope:local -CreateOptionsScreen__FP21ScreenConstructorData = .text:0x8016BF80; // type:function size:0x38 scope:local -CreateQRBrief__FP21ScreenConstructorData = .text:0x8016BFB8; // type:function size:0x38 scope:local -CreateQRTrackSelect__FP21ScreenConstructorData = .text:0x8016BFF0; // type:function size:0x38 scope:local -CreateQRTrackOptions__FP21ScreenConstructorData = .text:0x8016C028; // type:function size:0x38 scope:local -CreateQRCarSelect__FP21ScreenConstructorData = .text:0x8016C060; // type:function size:0x38 scope:local -CreateQRPressStart__FP21ScreenConstructorData = .text:0x8016C098; // type:function size:0x38 scope:local -CreateQRChallengeSeries__FP21ScreenConstructorData = .text:0x8016C0D0; // type:function size:0x38 scope:local -CreateShowcase__FP21ScreenConstructorData = .text:0x8016C108; // type:function size:0x38 scope:local -CreateFadeScreen__FP21ScreenConstructorData = .text:0x8016C140; // type:function size:0x38 scope:local -CreateWorldMap__FP21ScreenConstructorData = .text:0x8016C178; // type:function size:0x38 scope:local -CreateSMS__FP21ScreenConstructorData = .text:0x8016C1B0; // type:function size:0x38 scope:local -CreateSMSMessage__FP21ScreenConstructorData = .text:0x8016C1E8; // type:function size:0x38 scope:local -CreateControllerUnplugged__FP21ScreenConstructorData = .text:0x8016C220; // type:function size:0x38 scope:local -CreateMovieScreen__FP21ScreenConstructorData = .text:0x8016C258; // type:function size:0x38 scope:local -CreateSplashScreen__FP21ScreenConstructorData = .text:0x8016C290; // type:function size:0x38 scope:local -CreateLoadingTipsScreen__FP21ScreenConstructorData = .text:0x8016C2C8; // type:function size:0x2C scope:local -CreateLanguageSelectScreen__FP21ScreenConstructorData = .text:0x8016C2F4; // type:function size:0x38 scope:local -CreateSixDaysLaterScreen__FP21ScreenConstructorData = .text:0x8016C32C; // type:function size:0x38 scope:local -CreateEngageEventDialog__FP21ScreenConstructorData = .text:0x8016C364; // type:function size:0x38 scope:local -CreateUISafeHouseRaceSheet__FP21ScreenConstructorData = .text:0x8016C39C; // type:function size:0x38 scope:local -CreateUIRapSheetLogin__FP21ScreenConstructorData = .text:0x8016C3D4; // type:function size:0x38 scope:local -CreateUIRapSheetMain__FP21ScreenConstructorData = .text:0x8016C40C; // type:function size:0x38 scope:local -CreateUIRapSheetRS__FP21ScreenConstructorData = .text:0x8016C444; // type:function size:0x38 scope:local -CreateUIRapSheetUS__FP21ScreenConstructorData = .text:0x8016C47C; // type:function size:0x38 scope:local -CreateUIRapSheetVD__FP21ScreenConstructorData = .text:0x8016C4B4; // type:function size:0x38 scope:local -CreateUIRapSheetCTS__FP21ScreenConstructorData = .text:0x8016C4EC; // type:function size:0x38 scope:local -CreateUIRapSheetTEP__FP21ScreenConstructorData = .text:0x8016C524; // type:function size:0x38 scope:local -CreateUIRapSheetPD__FP21ScreenConstructorData = .text:0x8016C55C; // type:function size:0x38 scope:local -CreateUIRapSheetRankings__FP21ScreenConstructorData = .text:0x8016C594; // type:function size:0x38 scope:local -CreateUIRapSheetRankingsDetail__FP21ScreenConstructorData = .text:0x8016C5CC; // type:function size:0x38 scope:local -CreateUISafeHouseRepSheetMain__FP21ScreenConstructorData = .text:0x8016C604; // type:function size:0x38 scope:local -CreateUISafeHouseRivalChallenge__FP21ScreenConstructorData = .text:0x8016C63C; // type:function size:0x38 scope:local -CreateUISafeHouseRivalBio__FP21ScreenConstructorData = .text:0x8016C674; // type:function size:0x38 scope:local -CreateUISafeHouseMilestones__FP21ScreenConstructorData = .text:0x8016C6AC; // type:function size:0x38 scope:local -CreateUISafeHouseRegionUnlock__FP21ScreenConstructorData = .text:0x8016C6E4; // type:function size:0x38 scope:local -CreateUISafeHouseBounty__FP21ScreenConstructorData = .text:0x8016C71C; // type:function size:0x38 scope:local -CreateUISafeHouseMarkers__FP21ScreenConstructorData = .text:0x8016C754; // type:function size:0x38 scope:local -CreateGameWonScreen__FP21ScreenConstructorData = .text:0x8016C78C; // type:function size:0x38 scope:local -CreateDebugCarCustomize__FP21ScreenConstructorData = .text:0x8016C7C4; // type:function size:0x38 scope:local -CreateMyCarsManager__FP21ScreenConstructorData = .text:0x8016C7FC; // type:function size:0x38 scope:local -CreateCustomizeMainScreen__FP21ScreenConstructorData = .text:0x8016C834; // type:function size:0x38 scope:local -CreateCustomizeSubScreen__FP21ScreenConstructorData = .text:0x8016C86C; // type:function size:0x38 scope:local -CreateCustomizeShoppingCartScreen__FP21ScreenConstructorData = .text:0x8016C8A4; // type:function size:0x38 scope:local -CreateCustomizePartsScreen__FP21ScreenConstructorData = .text:0x8016C8DC; // type:function size:0x38 scope:local -CreateCustomHUDColorScreen__FP21ScreenConstructorData = .text:0x8016C914; // type:function size:0x38 scope:local -CreateDecalsScreen__FP21ScreenConstructorData = .text:0x8016C94C; // type:function size:0x38 scope:local -CreateNumbersScreen__FP21ScreenConstructorData = .text:0x8016C984; // type:function size:0x38 scope:local -CreatePaintScreen__FP21ScreenConstructorData = .text:0x8016C9BC; // type:function size:0x38 scope:local -CreateRimmingScreen__FP21ScreenConstructorData = .text:0x8016C9F4; // type:function size:0x38 scope:local -CreateSpoilersScreen__FP21ScreenConstructorData = .text:0x8016CA2C; // type:function size:0x38 scope:local -CreateCustomizePerformanceScreen__FP21ScreenConstructorData = .text:0x8016CA64; // type:function size:0x38 scope:local -CreateCustomTuningScreen__FP21ScreenConstructorData = .text:0x8016CA9C; // type:function size:0x38 scope:local -CreatePostRaceResultsScreen__FP21ScreenConstructorData = .text:0x8016CAD4; // type:function size:0x38 scope:local -CreateBustedOverlayScreen__FP21ScreenConstructorData = .text:0x8016CB0C; // type:function size:0x38 scope:local -CreatePostRacePursuitScreen__FP21ScreenConstructorData = .text:0x8016CB44; // type:function size:0x38 scope:local -CreatePostRaceMilestonesScreen__FP21ScreenConstructorData = .text:0x8016CB7C; // type:function size:0x38 scope:local -CreateCreditsScreen__FP21ScreenConstructorData = .text:0x8016CBB4; // type:function size:0x38 scope:local -CreateUIEATraxScreen__FP21ScreenConstructorData = .text:0x8016CBEC; // type:function size:0x38 scope:local -CreateLoadingScreen__FP21ScreenConstructorData = .text:0x8016CC24; // type:function size:0x2C scope:local -CreateLoadingControllerScreen__FP21ScreenConstructorData = .text:0x8016CC50; // type:function size:0x2C scope:local -CreateOptionsControllerScreen__FP21ScreenConstructorData = .text:0x8016CC7C; // type:function size:0x38 scope:local -ScreenFactory__FUiP9FEPackagei = .text:0x8016CCB4; // type:function size:0xC8 scope:local -FindScreenCreateData__FUi = .text:0x8016CD7C; // type:function size:0x64 scope:local -FindScreenButtonDatum__FUi = .text:0x8016CDE0; // type:function size:0x78 scope:local -FindAvailableButtonDatum__Fv = .text:0x8016CE58; // type:function size:0x34 scope:local -FEngGetLastButton__FPCc = .text:0x8016CE8C; // type:function size:0x38 scope:global -FEngSetLastButton__FPCcUc = .text:0x8016CEC4; // type:function size:0x70 scope:global -FEngSetCreateCallback__FPCcPFP21ScreenConstructorData_P10MenuScreen = .text:0x8016CF34; // type:function size:0x64 scope:global -__13FEPackageDataP6bChunk = .text:0x8016CF98; // type:function size:0xB0 scope:global -_._13FEPackageData = .text:0x8016D048; // type:function size:0x80 scope:global -Activate__13FEPackageDataP9FEPackagei = .text:0x8016D0C8; // type:function size:0x70 scope:global -UnActivate__13FEPackageData = .text:0x8016D138; // type:function size:0x9C scope:global -Close__13FEPackageData = .text:0x8016D1D4; // type:function size:0x94 scope:global -GetDataChunk__13FEPackageData = .text:0x8016D268; // type:function size:0x88 scope:global -GetNameHash__13FEPackageData = .text:0x8016D2F0; // type:function size:0xF4 scope:global -NotificationMessage__13FEPackageDataUlP8FEObjectUlUl = .text:0x8016D3E4; // type:function size:0x2C scope:global -NotifySoundMessage__13FEPackageDataUlP8FEObjectUlUl = .text:0x8016D410; // type:function size:0x2C scope:global -Init__16FEPackageManager = .text:0x8016D43C; // type:function size:0x54 scope:global -Get__16FEPackageManager = .text:0x8016D490; // type:function size:0xC scope:global -BroadcastMessage__16FEPackageManagerUl = .text:0x8016D49C; // type:function size:0xE0 scope:global -GetActiveScreensChecksum__16FEPackageManager = .text:0x8016D57C; // type:function size:0x88 scope:global -FEngGetActiveScreensChecksum__Fv = .text:0x8016D604; // type:function size:0x24 scope:global -NotifySoundMessage__16FEPackageManagerUlP8FEObjectUlUl = .text:0x8016D628; // type:function size:0x88 scope:global -NotificationMessage__16FEPackageManagerUlP8FEObjectUlUl = .text:0x8016D6B0; // type:function size:0x88 scope:global -GetBasePkgName__16FEPackageManagerPCc = .text:0x8016D738; // type:function size:0x64 scope:global -FindPackage__16FEPackageManagerPCc = .text:0x8016D79C; // type:function size:0x34 scope:global -GetPackageData__16FEPackageManagerPCc = .text:0x8016D7D0; // type:function size:0x34 scope:global -CloseAllPackages__16FEPackageManageri = .text:0x8016D804; // type:function size:0x7C scope:global -GetVisibility__16FEPackageManagerPCc = .text:0x8016D880; // type:function size:0x44 scope:global -FindScreen__16FEPackageManagerPCc = .text:0x8016D8C4; // type:function size:0x34 scope:global -FindFEPackageData__16FEPackageManagerP6bChunk = .text:0x8016D8F8; // type:function size:0x2C scope:global -FindFEPackageData__16FEPackageManagerPCc = .text:0x8016D924; // type:function size:0x98 scope:global -SetPackageDataArg__16FEPackageManagerPCci = .text:0x8016D9BC; // type:function size:0x4C scope:global -PackageWasLoaded__16FEPackageManagerP9FEPackage = .text:0x8016DA08; // type:function size:0x44 scope:global -PackageWillBeUnloaded__16FEPackageManagerP9FEPackage = .text:0x8016DA4C; // type:function size:0x30 scope:global -Loader__16FEPackageManagerP6bChunkb = .text:0x8016DA7C; // type:function size:0x90 scope:global -UnLoader__16FEPackageManagerP6bChunkb = .text:0x8016DB0C; // type:function size:0x8C scope:global -ErrorTick__16FEPackageManager = .text:0x8016DB98; // type:function size:0x28 scope:global -Tick__16FEPackageManager = .text:0x8016DBC0; // type:function size:0x28 scope:global -HACK_FEPkgMgr_GetPackageRenderInfo__FP9FEPackage = .text:0x8016DBE8; // type:function size:0x1C scope:global -FEngFindScreen__FPCc = .text:0x8016DC04; // type:function size:0x34 scope:global -LoaderFEngPackage__FP6bChunk = .text:0x8016DC38; // type:function size:0x74 scope:global -UnloaderFEngPackage__FP6bChunk = .text:0x8016DCAC; // type:function size:0x74 scope:global -FindExtraFontData__FUi = .text:0x8016DD20; // type:function size:0x38 scope:global -FindFont__FUi = .text:0x8016DD58; // type:function size:0x70 scope:global -LoaderFEngFont__FP6bChunk = .text:0x8016DDC8; // type:function size:0x7C scope:global -UnloaderFEngFont__FP6bChunk = .text:0x8016DE44; // type:function size:0x6C scope:global -__8FEngFontP6bChunk = .text:0x8016DEB0; // type:function size:0x184 scope:global -_._8FEngFont = .text:0x8016E034; // type:function size:0x44 scope:global -NotifyTextureLoading__8FEngFontP11TexturePackb = .text:0x8016E078; // type:function size:0x50 scope:global -FEngFontNotifyTextureLoading__FP11TexturePackb = .text:0x8016E0C8; // type:function size:0x58 scope:global -IsJoyEventTexture__8FEngFontPCsUl = .text:0x8016E120; // type:function size:0x58 scope:global -SkipJoyEventTexture__8FEngFontPCsUl = .text:0x8016E178; // type:function size:0x50 scope:global -GetJoyEventTextureWidth__8FEngFontPCs = .text:0x8016E1C8; // type:function size:0x64 scope:global -GetJoyEventTextureInfo__8FEngFontPCs = .text:0x8016E22C; // type:function size:0xC4 scope:global -HandleJoyEventTexture__8FEngFontPCsffPUiP14FERenderObjectRfP19FEPackageRenderInfo = .text:0x8016E2F0; // type:function size:0x170 scope:global -RenderString__8FEngFontRC7FEColorPCsP8FEStringP8bMatrix4P14FERenderObjectP19FEPackageRenderInfo = .text:0x8016E460; // type:function size:0x624 scope:global -GetNextWordWidth__8FEngFontPCsUl = .text:0x8016EA84; // type:function size:0xA0 scope:global -GetCharacterWidth__8FEngFontssUl = .text:0x8016EB24; // type:function size:0x174 scope:global -GetLineWidth__8FEngFontPCsUlUlb = .text:0x8016EC98; // type:function size:0x158 scope:global -GetTextWidth__8FEngFontPCsUl = .text:0x8016EDF0; // type:function size:0xC8 scope:global -GetHeight__8FEngFont = .text:0x8016EEB8; // type:function size:0x8 scope:global -GetTextHeight__8FEngFontPCsiUlUlb = .text:0x8016EEC0; // type:function size:0x210 scope:global -ConvertCharacter__8FEngFontUs = .text:0x8016F0D0; // type:function size:0x48 scope:global -CalculateXOffset__8FEngFontUif = .text:0x8016F118; // type:function size:0x38 scope:global -CalculateYOffset__8FEngFontUif = .text:0x8016F150; // type:function size:0x38 scope:global -__10MenuScreenP21ScreenConstructorData = .text:0x8016F188; // type:function size:0x1D8 scope:global -_._10MenuScreen = .text:0x8016F360; // type:function size:0x178 scope:global -BaseNotify__10MenuScreenUlP8FEObjectUlUl = .text:0x8016F4D8; // type:function size:0x9C scope:global -FEngGetEditedString__10MenuScreen = .text:0x8016F574; // type:function size:0x10 scope:global -FEngEndTextInput__10MenuScreen = .text:0x8016F584; // type:function size:0x48 scope:global -FEngBeginTextInput__10MenuScreenUiUiPCcT3Ui = .text:0x8016F5CC; // type:function size:0x120 scope:global -CheckKeyboard__10MenuScreenUi = .text:0x8016F6EC; // type:function size:0xF8 scope:global -BaseNotifySound__10MenuScreenUlP8FEObjectUlUl = .text:0x8016F7E4; // type:function size:0xEC8 scope:global -FindButtonNameHashForFEString__Fii12JoystickPort = .text:0x801706AC; // type:function size:0x68 scope:global -FEngMapJoyParamToJoyport__Fi = .text:0x80170714; // type:function size:0x44 scope:global -FEngMapJoyportToJoyParam__Fi = .text:0x80170758; // type:function size:0x44 scope:global -FEngSNMakeHidden__FPciPCc = .text:0x8017079C; // type:function size:0x70 scope:global -FEngSNMakeHidden__FPciPUs = .text:0x8017080C; // type:function size:0x70 scope:global -FEngTickSinglePackage__FPCcUi = .text:0x8017087C; // type:function size:0x70 scope:global -FEngHashString__FPCce = .text:0x801708EC; // type:function size:0xB4 scope:global -SetScript__12ScrollerSlotUi = .text:0x801709A0; // type:function size:0x7C scope:global -FindSize__12ScrollerSlot = .text:0x80170A1C; // type:function size:0xD4 scope:global -Show__12ScrollerSlot = .text:0x80170AF0; // type:function size:0x60 scope:global -Hide__12ScrollerSlot = .text:0x80170B50; // type:function size:0x60 scope:global -__11ScrollerinaPCcN21bN34 = .text:0x80170BB0; // type:function size:0x13C scope:global -AddSlot__11ScrollerinaP12ScrollerSlot = .text:0x80170CEC; // type:function size:0x70 scope:global -AddData__11ScrollerinaP13ScrollerDatum = .text:0x80170D5C; // type:function size:0x58 scope:global -FindDatumInSlot__11ScrollerinaP12ScrollerSlot = .text:0x80170DB4; // type:function size:0x64 scope:global -FindSlotWithDatum__11ScrollerinaP13ScrollerDatum = .text:0x80170E18; // type:function size:0x6C scope:global -ScrollNext__11Scrollerina = .text:0x80170E84; // type:function size:0x84 scope:global -ScrollPrev__11Scrollerina = .text:0x80170F08; // type:function size:0x84 scope:global -Scroll__11Scrollerina10eScrollDir = .text:0x80170F8C; // type:function size:0x140 scope:global -ScrollWrapped__11Scrollerina10eScrollDir = .text:0x801710CC; // type:function size:0x16C scope:global -MoveSelected__11Scrollerina10eScrollDirb = .text:0x80171238; // type:function size:0x1D8 scope:global -ScrollSelection__11Scrollerina10eScrollDir = .text:0x80171410; // type:function size:0x110 scope:global -SyncViewToSelection__11Scrollerina = .text:0x80171520; // type:function size:0xD8 scope:global -SetDisabledScripts__11Scrollerina = .text:0x801715F8; // type:function size:0x74 scope:global -Print__11Scrollerina = .text:0x8017166C; // type:function size:0xD4 scope:global -DrawScrollBar__11Scrollerina = .text:0x80171740; // type:function size:0x64 scope:global -Update__11Scrollerinab = .text:0x801717A4; // type:function size:0x50 scope:global -Enable__11ScrollerinaP13ScrollerDatum = .text:0x801717F4; // type:function size:0x78 scope:global -CountListIndices__11Scrollerina = .text:0x8017186C; // type:function size:0x84 scope:global -GetNodeIndex__11ScrollerinaP13ScrollerDatum = .text:0x801718F0; // type:function size:0x30 scope:global -GetNodeIndex__11ScrollerinaP12ScrollerSlot = .text:0x80171920; // type:function size:0x34 scope:global -SetSelected__11ScrollerinaP12ScrollerSlot = .text:0x80171954; // type:function size:0x90 scope:global -FindSize__11Scrollerina = .text:0x801719E4; // type:function size:0x190 scope:global -__10IconOptionUiUiUi = .text:0x80171B74; // type:function size:0xAC scope:global -SetFEngObject__10IconOptionP8FEObject = .text:0x80171C20; // type:function size:0x5C scope:global -StartScale__10IconOptionff = .text:0x80171C7C; // type:function size:0x58 scope:global -__9IconPanelPCcN31b = .text:0x80171CD4; // type:function size:0xB4 scope:global -AddOption__9IconPanelP10IconOption = .text:0x80171D88; // type:function size:0xE4 scope:global -Act__9IconPanelUiP8FEObjectUiUi = .text:0x80171E6C; // type:function size:0x68 scope:global -GetOption__9IconPaneli = .text:0x80171ED4; // type:function size:0x40 scope:global -GetOptionIndex__9IconPanelP10IconOption = .text:0x80171F14; // type:function size:0x44 scope:global -SetSelection__9IconPanelP10IconOption = .text:0x80171F58; // type:function size:0x84 scope:global -SetInitialPos__9IconPanel = .text:0x80171FDC; // type:function size:0x18C scope:global -Scroll__9IconPanel10eScrollDir = .text:0x80172168; // type:function size:0xDC scope:global -ScrollWrapped__9IconPanel10eScrollDir = .text:0x80172244; // type:function size:0xD4 scope:global -Update__9IconPanel = .text:0x80172318; // type:function size:0x20 scope:global -AnimateList__9IconPanel = .text:0x80172338; // type:function size:0x38 scope:global -AnimateSelected__9IconPanelRfT1 = .text:0x80172370; // type:function size:0x1A0 scope:global -__12IconScrollerPCcN31f = .text:0x80172510; // type:function size:0x180 scope:global -Update__12IconScroller = .text:0x80172690; // type:function size:0x160 scope:global -AddInitialBookEnds__12IconScroller = .text:0x801727F0; // type:function size:0xBC scope:global -AddOption__12IconScrollerP10IconOption = .text:0x801728AC; // type:function size:0x158 scope:global -SetInitialPos__12IconScrolleri = .text:0x80172A04; // type:function size:0x200 scope:global -SetSelection__12IconScrollerP10IconOption = .text:0x80172C04; // type:function size:0xE4 scope:global -RemoveAll__12IconScroller = .text:0x80172CE8; // type:function size:0xB8 scope:global -GetOptionIndex__12IconScrollerP10IconOption = .text:0x80172DA0; // type:function size:0x54 scope:global -Scroll__12IconScroller10eScrollDir = .text:0x80172DF4; // type:function size:0xE0 scope:global -ScrollWrapped__12IconScroller10eScrollDir = .text:0x80172ED4; // type:function size:0xE8 scope:global -ClipEdges__12IconScrollerP10IconOptionf = .text:0x80172FBC; // type:function size:0x60 scope:global -Scale__12IconScrollerffff = .text:0x8017301C; // type:function size:0xA0 scope:global -PositionOption__12IconScrollerP10IconOption = .text:0x801730BC; // type:function size:0x20C scope:global -UpdateFade__12IconScrollerP10IconOptionf = .text:0x801732C8; // type:function size:0x284 scope:global -UpdateArrows__12IconScroller = .text:0x8017354C; // type:function size:0x84 scope:global -__16IconScrollerMenuP21ScreenConstructorData = .text:0x801735D0; // type:function size:0xD0 scope:global -NotificationMessage__16IconScrollerMenuUlP8FEObjectUlUl = .text:0x801736A0; // type:function size:0x4E0 scope:global -NotifySoundMessage__16IconScrollerMenuUl18eMenuSoundTriggers = .text:0x80173B80; // type:function size:0x38 scope:global -StorePrevNotification__16IconScrollerMenuUiP8FEObjectUiUi = .text:0x80173BB8; // type:function size:0x14 scope:global -RefreshHeader__16IconScrollerMenu = .text:0x80173BCC; // type:function size:0x168 scope:global -AddOption__16IconScrollerMenuP10IconOption = .text:0x80173D34; // type:function size:0x38 scope:global -__12ArrayScripts = .text:0x80173D6C; // type:function size:0x78 scope:global -__9ArraySlotP8FEObject = .text:0x80173DE4; // type:function size:0x20 scope:global -Update__9ArraySlotP10ArrayDatumb = .text:0x80173E04; // type:function size:0x124 scope:global -__14ImageArraySlotP7FEImage = .text:0x80173F28; // type:function size:0x3C scope:global -SetTexture__14ImageArraySlotUi = .text:0x80173F64; // type:function size:0x24 scope:global -Update__14ImageArraySlotP10ArrayDatumb = .text:0x80173F88; // type:function size:0x44 scope:global -__10ArrayDatumUiUi = .text:0x80173FCC; // type:function size:0x34 scope:global -__13ArrayScrollerPCciib = .text:0x80174000; // type:function size:0xE8 scope:global -RefreshHeader__13ArrayScroller = .text:0x801740E8; // type:function size:0xB8 scope:global -AddSlot__13ArrayScrollerP9ArraySlot = .text:0x801741A0; // type:function size:0x24 scope:global -AddDatum__13ArrayScrollerP10ArrayDatum = .text:0x801741C4; // type:function size:0x48 scope:global -SetSelection__13ArrayScrollerP10ArrayDatumi = .text:0x8017420C; // type:function size:0x7C scope:global -ForceSelectionOnScreen__13ArrayScrollerii = .text:0x80174288; // type:function size:0x40 scope:global -ScrollHor__13ArrayScroller10eScrollDir = .text:0x801742C8; // type:function size:0x1AC scope:global -ScrollVer__13ArrayScroller10eScrollDir = .text:0x80174474; // type:function size:0x26C scope:global -UpdateScrollbar__13ArrayScroller = .text:0x801746E0; // type:function size:0x88 scope:global -GetSlotAt__13ArrayScrolleri = .text:0x80174768; // type:function size:0x54 scope:global -GetDatumAt__13ArrayScrolleri = .text:0x801747BC; // type:function size:0x54 scope:global -SetInitialPosition__13ArrayScrolleri = .text:0x80174810; // type:function size:0xC8 scope:global -UpdateMouse__13ArrayScroller = .text:0x801748D8; // type:function size:0x4 scope:global -ClearData__13ArrayScroller = .text:0x801748DC; // type:function size:0x7C scope:global -NotificationMessage__13ArrayScrollerUlP8FEObjectUlUl = .text:0x80174958; // type:function size:0xF8 scope:global -__17ArrayScrollerMenuP21ScreenConstructorDataiib = .text:0x80174A50; // type:function size:0x70 scope:global -NotificationMessage__17ArrayScrollerMenuUlP8FEObjectUlUl = .text:0x80174AC0; // type:function size:0x24 scope:global -NotifySoundMessage__17ArrayScrollerMenuUl18eMenuSoundTriggers = .text:0x80174AE4; // type:function size:0xA0 scope:global -RefreshHeader__17ArrayScrollerMenu = .text:0x80174B84; // type:function size:0x24 scope:global -__12UIWidgetMenuP21ScreenConstructorData = .text:0x80174BA8; // type:function size:0x1EC scope:global -NotificationMessage__12UIWidgetMenuUlP8FEObjectUlUl = .text:0x80174D94; // type:function size:0x374 scope:global -NotifySoundMessage__12UIWidgetMenuUl18eMenuSoundTriggers = .text:0x80175108; // type:function size:0x44 scope:global -StorePrevNotification__12UIWidgetMenuUiP8FEObjectUiUi = .text:0x8017514C; // type:function size:0x14 scope:global -GetWidget__12UIWidgetMenuUi = .text:0x80175160; // type:function size:0x38 scope:global -Scroll__12UIWidgetMenu10eScrollDir = .text:0x80175198; // type:function size:0x218 scope:global -ScrollWrapped__12UIWidgetMenu10eScrollDir = .text:0x801753B0; // type:function size:0x298 scope:global -AddButtonOption__12UIWidgetMenuP14FEButtonWidget = .text:0x80175648; // type:function size:0x120 scope:global -AddToggleOption__12UIWidgetMenuP14FEToggleWidgetb = .text:0x80175768; // type:function size:0x1BC scope:global -AddSliderOption__12UIWidgetMenuP14FESliderWidgetb = .text:0x80175924; // type:function size:0x1E8 scope:global -GetCurrentFEString__12UIWidgetMenuPCc = .text:0x80175B0C; // type:function size:0x6C scope:global -GetCurrentFEImage__12UIWidgetMenuPCc = .text:0x80175B78; // type:function size:0x9C scope:global -GetCurrentFEObject__12UIWidgetMenuPCc = .text:0x80175C14; // type:function size:0x6C scope:global -ClearWidgets__12UIWidgetMenu = .text:0x80175C80; // type:function size:0xD8 scope:global -RefreshWidgets__12UIWidgetMenu = .text:0x80175D58; // type:function size:0x54 scope:global -SetInitialOption__12UIWidgetMenui = .text:0x80175DAC; // type:function size:0x1EC scope:global -SetOption__12UIWidgetMenuP8FEWidget = .text:0x80175F98; // type:function size:0x88 scope:global -SetInitialPositions__12UIWidgetMenu = .text:0x80176020; // type:function size:0x9C scope:global -Reposition__12UIWidgetMenu = .text:0x801760BC; // type:function size:0x128 scope:global -Reset__12UIWidgetMenu = .text:0x801761E4; // type:function size:0x58 scope:global -UpdateCursorPos__12UIWidgetMenu = .text:0x8017623C; // type:function size:0xC0 scope:global -IncrementStartPos__12UIWidgetMenu = .text:0x801762FC; // type:function size:0x20 scope:global -SyncViewToSelection__12UIWidgetMenu = .text:0x8017631C; // type:function size:0xD0 scope:global -GetWidgetIndex__12UIWidgetMenuP8FEWidget = .text:0x801763EC; // type:function size:0x30 scope:global -__8FEWidgetP8FEObjectbT2 = .text:0x8017641C; // type:function size:0x58 scope:global -__14FEButtonWidgetb = .text:0x80176474; // type:function size:0x60 scope:global -CheckMouse__14FEButtonWidgetPCcff = .text:0x801764D4; // type:function size:0x60 scope:global -Position__14FEButtonWidget = .text:0x80176534; // type:function size:0xD4 scope:global -Show__14FEButtonWidget = .text:0x80176608; // type:function size:0x40 scope:global -Hide__14FEButtonWidget = .text:0x80176648; // type:function size:0x40 scope:global -SetFocus__14FEButtonWidgetPCc = .text:0x80176688; // type:function size:0x68 scope:global -UnsetFocus__14FEButtonWidget = .text:0x801766F0; // type:function size:0x58 scope:global -__12FEStatWidgetb = .text:0x80176748; // type:function size:0x74 scope:global -Position__12FEStatWidget = .text:0x801767BC; // type:function size:0x16C scope:global -Show__12FEStatWidget = .text:0x80176928; // type:function size:0x48 scope:global -Hide__12FEStatWidget = .text:0x80176970; // type:function size:0x48 scope:global -SetPosX__12FEStatWidgetf = .text:0x801769B8; // type:function size:0x78 scope:global -SetPosY__12FEStatWidgetf = .text:0x80176A30; // type:function size:0x78 scope:global -__14FEToggleWidgetb = .text:0x80176AA8; // type:function size:0x60 scope:global -CheckMouse__14FEToggleWidgetPCcff = .text:0x80176B08; // type:function size:0x4 scope:global -Position__14FEToggleWidget = .text:0x80176B0C; // type:function size:0x94 scope:global -Enable__14FEToggleWidget = .text:0x80176BA0; // type:function size:0x4C scope:global -Disable__14FEToggleWidget = .text:0x80176BEC; // type:function size:0x50 scope:global -SetScript__14FEToggleWidgetUi = .text:0x80176C3C; // type:function size:0x80 scope:global -Show__14FEToggleWidget = .text:0x80176CBC; // type:function size:0x58 scope:global -Hide__14FEToggleWidget = .text:0x80176D14; // type:function size:0x58 scope:global -SetFocus__14FEToggleWidgetPCc = .text:0x80176D6C; // type:function size:0x48 scope:global -UnsetFocus__14FEToggleWidget = .text:0x80176DB4; // type:function size:0x28 scope:global -BlinkArrows__14FEToggleWidgetUi = .text:0x80176DDC; // type:function size:0x4 scope:global -__14FESliderWidgetb = .text:0x80176DE0; // type:function size:0x50 scope:global -Position__14FESliderWidget = .text:0x80176E30; // type:function size:0x18C scope:global -Show__14FESliderWidget = .text:0x80176FBC; // type:function size:0x5C scope:global -Hide__14FESliderWidget = .text:0x80177018; // type:function size:0x5C scope:global -Enable__14FESliderWidget = .text:0x80177074; // type:function size:0xC scope:global -Disable__14FESliderWidget = .text:0x80177080; // type:function size:0x20 scope:global -SetFocus__14FESliderWidgetPCc = .text:0x801770A0; // type:function size:0x70 scope:global -UnsetFocus__14FESliderWidget = .text:0x80177110; // type:function size:0x60 scope:global -UpdateSlider__14FESliderWidgetUi = .text:0x80177170; // type:function size:0x68 scope:global -__11FEScrollBarPCcT1bN23 = .text:0x801771D8; // type:function size:0x274 scope:global -SetGroupVisible__11FEScrollBarb = .text:0x8017744C; // type:function size:0xB4 scope:global -Update__11FEScrollBariiii = .text:0x80177500; // type:function size:0xB0 scope:global -SetPosResized__11FEScrollBariii = .text:0x801775B0; // type:function size:0x234 scope:global -SetArrowVisibility__11FEScrollBarib = .text:0x801777E4; // type:function size:0x70 scope:global -SetVisible__11FEScrollBarP8FEObject = .text:0x80177854; // type:function size:0x44 scope:global -SetInvisible__11FEScrollBarP8FEObject = .text:0x80177898; // type:function size:0x44 scope:global -SetArrow1Dim__11FEScrollBarb = .text:0x801778DC; // type:function size:0x44 scope:global -SetArrow2Dim__11FEScrollBarb = .text:0x80177920; // type:function size:0x44 scope:global -__13CTextScroller = .text:0x80177964; // type:function size:0x40 scope:global -_._13CTextScroller = .text:0x801779A4; // type:function size:0x4C scope:global -Initialise__13CTextScrollerP10MenuScreeniiPcP8FEngFont = .text:0x801779F0; // type:function size:0x4C scope:global -SetTextHash__13CTextScrollerUi = .text:0x80177A3C; // type:function size:0x78 scope:global -SetText__13CTextScrollerPs = .text:0x80177AB4; // type:function size:0x228 scope:global -Scroll__13CTextScrolleri = .text:0x80177CDC; // type:function size:0x64 scope:global -HandleNotificationMessage__13CTextScrollerUi = .text:0x80177D40; // type:function size:0x64 scope:global -Display__13CTextScrolleri = .text:0x80177DA4; // type:function size:0xEC scope:global -AddLine__13CTextScrollerPsi = .text:0x80177E90; // type:function size:0xAC scope:global -WordWrapCountLinesAndChars__13CTextScrollerPsT1RiT3 = .text:0x80177F3C; // type:function size:0x34 scope:global -WordWrapAddLines__13CTextScrollerPsT1bPi = .text:0x80177F70; // type:function size:0x210 scope:global -FindCR__13CTextScrollerPs = .text:0x80178180; // type:function size:0x50 scope:global -FindEND__13CTextScrollerPs = .text:0x801781D0; // type:function size:0x20 scope:global -UpdateScrollBar__13CTextScroller = .text:0x801781F0; // type:function size:0x44 scope:global -BeginCarCustomize__F20eCustomizeEntryPointP11FECarRecord = .text:0x80178234; // type:function size:0x7C scope:global -CustomizeIsInBackRoom__Fv = .text:0x801782B0; // type:function size:0xC scope:global -CustomizeSetInBackRoom__Fb = .text:0x801782BC; // type:function size:0xC scope:global -CustomizeIsInPerformance__Fv = .text:0x801782C8; // type:function size:0xC scope:global -CustomizeSetInPerformance__Fb = .text:0x801782D4; // type:function size:0xC scope:global -CustomizeIsInParts__Fv = .text:0x801782E0; // type:function size:0xC scope:global -CustomizeSetInParts__Fb = .text:0x801782EC; // type:function size:0xC scope:global -__12TuningSliderQ37Physics7Tunings4PathUiUib = .text:0x801782F8; // type:function size:0x94 scope:global -Act__12TuningSliderPCcUi = .text:0x8017838C; // type:function size:0xFC scope:global -CheckMouse__12TuningSliderPCcff = .text:0x80178488; // type:function size:0x4 scope:global -Draw__12TuningSlider = .text:0x8017848C; // type:function size:0xDC scope:global -Position__12TuningSlider = .text:0x80178568; // type:function size:0x4 scope:global -SetFocus__12TuningSliderPCc = .text:0x8017856C; // type:function size:0x6C scope:global -UnsetFocus__12TuningSlider = .text:0x801785D8; // type:function size:0x88 scope:global -SetSliderGroup__12TuningSliderPCcUi = .text:0x80178660; // type:function size:0x38 scope:global -InitSliderObjects__12TuningSliderPCcT1 = .text:0x80178698; // type:function size:0x88 scope:global -SetSliderValues__12TuningSliderffff = .text:0x80178720; // type:function size:0xA8 scope:global -__18CustomTuningScreenP21ScreenConstructorData = .text:0x801787C8; // type:function size:0x9C scope:global -NotificationMessage__18CustomTuningScreenUlP8FEObjectUlUl = .text:0x80178864; // type:function size:0x334 scope:global -ScrollTypes__18CustomTuningScreen10eScrollDir = .text:0x80178B98; // type:function size:0x70 scope:global -DrawSettingName__18CustomTuningScreenUi = .text:0x80178C08; // type:function size:0x88 scope:global -IsTuningAvailable__18CustomTuningScreenP13FEPlayerCarDBP11FECarRecordQ37Physics7Tunings4Path = .text:0x80178C90; // type:function size:0x168 scope:global -GetNameForPath__18CustomTuningScreenQ37Physics7Tunings4Pathb = .text:0x80178DF8; // type:function size:0xA8 scope:global -GetHelpForPath__18CustomTuningScreenQ37Physics7Tunings4PathbT2 = .text:0x80178EA0; // type:function size:0x150 scope:global -AddTuningSlider__18CustomTuningScreenP13FEPlayerCarDBP11FECarRecordQ37Physics7Tunings4Pathb = .text:0x80178FF0; // type:function size:0x1C8 scope:global -Setup__18CustomTuningScreen = .text:0x801791B8; // type:function size:0x220 scope:global -SetSlidersForType__18CustomTuningScreen = .text:0x801793D8; // type:function size:0xC0 scope:global -ShowHelpBlurb__18CustomTuningScreen = .text:0x80179498; // type:function size:0xF4 scope:global -HideHelpBlurb__18CustomTuningScreen = .text:0x8017958C; // type:function size:0x88 scope:global -StoreSettings__18CustomTuningScreen = .text:0x80179614; // type:function size:0xA4 scope:global -SettingsDidNotChange__18CustomTuningScreen = .text:0x801796B8; // type:function size:0x6C scope:global -DefaultUnlockData__Fv = .text:0x80179724; // type:function size:0xA0 scope:global -UnlockUnlockableThing__F17eUnlockableEntityUiiPCc = .text:0x801797C4; // type:function size:0x68 scope:global -MarkUnlockableThingSeen__F17eUnlockableEntityUi = .text:0x8017982C; // type:function size:0x8C scope:global -DoesCategoryHaveNewUnlock__F17eUnlockableEntity = .text:0x801798B8; // type:function size:0x3D0 scope:global -IsUnlockableUnlocked__17QuickRaceUnlocker14eUnlockFilters17eUnlockableEntityiib = .text:0x80179C88; // type:function size:0xD0 scope:global -IsCarPartUnlocked__17QuickRaceUnlocker14eUnlockFiltersiP7CarPartib = .text:0x80179D58; // type:function size:0xC8 scope:global -IsPerfPackageUnlocked__17QuickRaceUnlocker14eUnlockFiltersQ37Physics8Upgrades4Typeiib = .text:0x80179E20; // type:function size:0x8C scope:global -IsTrackUnlocked__17QuickRaceUnlocker14eUnlockFiltersii = .text:0x80179EAC; // type:function size:0x98 scope:global -IsCarUnlocked__17QuickRaceUnlocker14eUnlockFiltersUii = .text:0x80179F44; // type:function size:0x5D8 scope:global -IsBackroomAvailable__17QuickRaceUnlocker14eUnlockFilters17eUnlockableEntityii = .text:0x8017A51C; // type:function size:0x8 scope:global -IsUnlockableUnlocked__14OnlineUnlocker14eUnlockFilters17eUnlockableEntityib = .text:0x8017A524; // type:function size:0x34 scope:global -IsCarPartUnlocked__14OnlineUnlocker14eUnlockFiltersiP7CarPartb = .text:0x8017A558; // type:function size:0x34 scope:global -IsPerfPackageUnlocked__14OnlineUnlocker14eUnlockFiltersQ37Physics8Upgrades4Typeib = .text:0x8017A58C; // type:function size:0x34 scope:global -IsTrackUnlocked__14OnlineUnlocker14eUnlockFiltersi = .text:0x8017A5C0; // type:function size:0xB0 scope:global -IsCarUnlocked__14OnlineUnlocker14eUnlockFiltersUi = .text:0x8017A670; // type:function size:0x24 scope:global -IsBackroomAvailable__14OnlineUnlocker14eUnlockFilters17eUnlockableEntityi = .text:0x8017A694; // type:function size:0x24 scope:global -IsUnlockableUnlocked__14CareerUnlocker14eUnlockFilters17eUnlockableEntityib = .text:0x8017A6B8; // type:function size:0x17C scope:global -IsCarPartUnlocked__14CareerUnlocker14eUnlockFiltersiP7CarPartb = .text:0x8017A834; // type:function size:0xC4 scope:global -IsPerfPackageUnlocked__14CareerUnlocker14eUnlockFiltersQ37Physics8Upgrades4Typeib = .text:0x8017A8F8; // type:function size:0x88 scope:global -IsTrackUnlocked__14CareerUnlocker14eUnlockFiltersi = .text:0x8017A980; // type:function size:0x70 scope:global -IsCarUnlocked__14CareerUnlocker14eUnlockFiltersUi = .text:0x8017A9F0; // type:function size:0xF4 scope:global -IsBackroomAvailable__14CareerUnlocker14eUnlockFilters17eUnlockableEntityi = .text:0x8017AAE4; // type:function size:0x4D4 scope:global -IsUnlockableUnlocked__12UnlockSystem14eUnlockFilters17eUnlockableEntityiib = .text:0x8017AFB8; // type:function size:0x104 scope:global -IsCarPartUnlocked__12UnlockSystem14eUnlockFiltersiP7CarPartib = .text:0x8017B0BC; // type:function size:0x104 scope:global -IsPerfPackageUnlocked__12UnlockSystem14eUnlockFiltersQ37Physics8Upgrades4Typeiib = .text:0x8017B1C0; // type:function size:0x104 scope:global -IsTrackUnlocked__12UnlockSystem14eUnlockFiltersii = .text:0x8017B2C4; // type:function size:0xE4 scope:global -IsCarUnlocked__12UnlockSystem14eUnlockFiltersUii = .text:0x8017B3A8; // type:function size:0x114 scope:global -IsBackroomAvailable__12UnlockSystem14eUnlockFilters17eUnlockableEntityi = .text:0x8017B4BC; // type:function size:0xD4 scope:global -IsUnlockableNew__12UnlockSystem14eUnlockFilters17eUnlockableEntityi = .text:0x8017B590; // type:function size:0xB4 scope:global -ClearNewUnlock__12UnlockSystem17eUnlockableEntityUi = .text:0x8017B644; // type:function size:0x44 scope:global -MapCarPartToUnlockable__FiP7CarPart = .text:0x8017B688; // type:function size:0x14C scope:global -MapPerfPkgToUnlockable__FQ37Physics8Upgrades4Type = .text:0x8017B7D4; // type:function size:0x7C scope:global -LookupFEPartInfo__F17eUnlockableEntityi = .text:0x8017B850; // type:function size:0x218 scope:global -GetPerfPackageCost__12UnlockSystem14eUnlockFiltersQ37Physics8Upgrades4Typeii = .text:0x8017BA68; // type:function size:0x6C scope:global -GetCarPartCost__12UnlockSystem14eUnlockFiltersiP7CarParti = .text:0x8017BAD4; // type:function size:0x74 scope:global -IsEventAvailable__12UnlockSystemUi = .text:0x8017BB48; // type:function size:0xF8 scope:global -IsBonusCarCEOnly__12UnlockSystemUi = .text:0x8017BC40; // type:function size:0xC4 scope:global -IsUnlockableAvailable__12UnlockSystemUi = .text:0x8017BD04; // type:function size:0x58 scope:global -__15FEMarkerManager = .text:0x8017BD5C; // type:function size:0x30 scope:global -Default__15FEMarkerManager = .text:0x8017BD8C; // type:function size:0x4C scope:global -GetMarkerForLaterSelection__15FEMarkerManageriRQ215FEMarkerManager15ePossibleMarkerRi = .text:0x8017BDD8; // type:function size:0x20 scope:global -AddMarkerForLaterSelection__15FEMarkerManagerQ215FEMarkerManager15ePossibleMarkeri = .text:0x8017BDF8; // type:function size:0x44 scope:global -ClearMarkersForLaterSelection__15FEMarkerManager = .text:0x8017BE3C; // type:function size:0x3C scope:global -AddMarkerToInventory__15FEMarkerManagerQ215FEMarkerManager15ePossibleMarkeri = .text:0x8017BE78; // type:function size:0x40 scope:global -UtilizeMarker__15FEMarkerManagerQ215FEMarkerManager15ePossibleMarkeri = .text:0x8017BEB8; // type:function size:0x54 scope:global -UtilizeMarker__15FEMarkerManagerUi = .text:0x8017BF0C; // type:function size:0x13C scope:global -UtilizeMarker__15FEMarkerManagerQ37Physics8Upgrades4Type = .text:0x8017C048; // type:function size:0x9C scope:global -IsMarkerAvailable__15FEMarkerManagerQ215FEMarkerManager15ePossibleMarkeri = .text:0x8017C0E4; // type:function size:0x64 scope:global -GetNumCustomizeMarkers__15FEMarkerManager = .text:0x8017C148; // type:function size:0x54 scope:global -GetNumMarkers__15FEMarkerManagerQ215FEMarkerManager15ePossibleMarkeri = .text:0x8017C19C; // type:function size:0x64 scope:global -ConvertBigBangMarkerAward__15FEMarkerManagerPCcT1 = .text:0x8017C200; // type:function size:0x8C scope:global -AwardMarker__15FEMarkerManagerRQ36Attrib3Gen8gameplayb = .text:0x8017C28C; // type:function size:0x1C4 scope:global -SaveToBuffer__15FEMarkerManagerPc = .text:0x8017C450; // type:function size:0x3C scope:global -LoadFromBuffer__15FEMarkerManagerPc = .text:0x8017C48C; // type:function size:0x34 scope:global -ConvertBigBangUpgradeAward__FPCc = .text:0x8017C4C0; // type:function size:0x68 scope:global -AwardUnlockUpgrade__FRQ36Attrib3Gen8gameplay = .text:0x8017C528; // type:function size:0xFC scope:global -ClearAllNewStatus__Fv = .text:0x8017C624; // type:function size:0x4C scope:global -Last__Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi311ePlayerList = .text:0x8017C670; // type:function size:0x38 scope:global -reserve__Q24_STLt6vector2ZPQ25Sound10stSongInfoZQ24_STLt9allocator1ZPQ25Sound10stSongInfoUi = .text:0x8017C6A8; // type:function size:0x120 scope:global -__static_initialization_and_destruction_0 = .text:0x8017C7C8; // type:function size:0x1E0 scope:local -_._10HudElement = .text:0x8017C9A8; // type:function size:0x74 scope:global -Update__10HudElementP7IPlayer = .text:0x8017CA1C; // type:function size:0x4 scope:global -NotifySoundMessage__10MenuScreenUl18eMenuSoundTriggers = .text:0x8017CA20; // type:function size:0x8 scope:global -_IHandle__4IHud = .text:0x8017CA28; // type:function size:0xC scope:global -_._4IHud = .text:0x8017CA34; // type:function size:0x160 scope:global -push_back__Q23UTLt6Vector2ZP4IHudi16RCP4IHud = .text:0x8017CB94; // type:function size:0x154 scope:global -_IHandle__16IRaceOverMessage = .text:0x8017CCE8; // type:function size:0xC scope:global -_IHandle__15IGenericMessage = .text:0x8017CCF4; // type:function size:0xC scope:global -_IHandle__12ISpeedometer = .text:0x8017CD00; // type:function size:0xC scope:global -_IHandle__11ITachometer = .text:0x8017CD0C; // type:function size:0xC scope:global -_._11ITachometer = .text:0x8017CD18; // type:function size:0x54 scope:global -_IHandle__13IShiftUpdater = .text:0x8017CD6C; // type:function size:0xC scope:global -_IHandle__15ITachometerDrag = .text:0x8017CD78; // type:function size:0xC scope:global -_IHandle__11ITurbometer = .text:0x8017CD84; // type:function size:0xC scope:global -_IHandle__16IEngineTempGauge = .text:0x8017CD90; // type:function size:0xC scope:global -_IHandle__4INos = .text:0x8017CD9C; // type:function size:0xC scope:global -_IHandle__18ISpeedBreakerMeter = .text:0x8017CDA8; // type:function size:0xC scope:global -_IHandle__13IGetAwayMeter = .text:0x8017CDB4; // type:function size:0xC scope:global -_IHandle__13IPursuitBoard = .text:0x8017CDC0; // type:function size:0xC scope:global -_IHandle__15IMilestoneBoard = .text:0x8017CDCC; // type:function size:0xC scope:global -_IHandle__12IBustedMeter = .text:0x8017CDD8; // type:function size:0xC scope:global -_IHandle__14ITimeExtension = .text:0x8017CDE4; // type:function size:0xC scope:global -_IHandle__16IRaceInformation = .text:0x8017CDF0; // type:function size:0xC scope:global -_IHandle__12ILeaderBoard = .text:0x8017CDFC; // type:function size:0xC scope:global -_IHandle__12ICostToState = .text:0x8017CE08; // type:function size:0xC scope:global -_IHandle__9IWrongWay = .text:0x8017CE14; // type:function size:0xC scope:global -_IHandle__10IHeatMeter = .text:0x8017CE20; // type:function size:0xC scope:global -_IHandle__16IMenuZoneTrigger = .text:0x8017CE2C; // type:function size:0xC scope:global -_IHandle__14IRadarDetector = .text:0x8017CE38; // type:function size:0xC scope:global -_IHandle__12IInfractions = .text:0x8017CE44; // type:function size:0xC scope:global -_._12GetAwayMeter = .text:0x8017CE50; // type:function size:0x98 scope:global -SetGetAwayDistance__12GetAwayMeterf = .text:0x8017CEE8; // type:function size:0x8 scope:global -_._13RadarDetector = .text:0x8017CEF0; // type:function size:0x98 scope:global -SetTarget__13RadarDetectorQ214IRadarDetector11RadarTargetff = .text:0x8017CF88; // type:function size:0x18 scope:global -SetInPursuit__13RadarDetectorb = .text:0x8017CFA0; // type:function size:0x8 scope:global -SetIsCoolingDown__13RadarDetectorb = .text:0x8017CFA8; // type:function size:0x8 scope:global -Default__Q27Physics7Tunings = .text:0x8017CFB0; // type:function size:0x28 scope:global -_._Q213FEPlayerCarDB10MyCallback = .text:0x8017CFD8; // type:function size:0x34 scope:global -_._9HeatMeter = .text:0x8017D00C; // type:function size:0x98 scope:global -_._11CostToState = .text:0x8017D0A4; // type:function size:0x98 scope:global -SetInPursuit__11CostToStateb = .text:0x8017D13C; // type:function size:0x8 scope:global -_._10Reputation = .text:0x8017D144; // type:function size:0x98 scope:global -_._7cSlider = .text:0x8017D1DC; // type:function size:0x34 scope:global -_._14TwoStageSlider = .text:0x8017D210; // type:function size:0x34 scope:global -_._14FEButtonWidget = .text:0x8017D244; // type:function size:0x34 scope:global -SetPos__14FEButtonWidgetR8bVector2 = .text:0x8017D278; // type:function size:0x64 scope:global -_._12FEStatWidget = .text:0x8017D2DC; // type:function size:0x34 scope:global -Act__12FEStatWidgetPCcUi = .text:0x8017D310; // type:function size:0x4 scope:global -CheckMouse__12FEStatWidgetPCcff = .text:0x8017D314; // type:function size:0x4 scope:global -SetFocus__12FEStatWidgetPCc = .text:0x8017D318; // type:function size:0x4 scope:global -UnsetFocus__12FEStatWidget = .text:0x8017D31C; // type:function size:0x4 scope:global -SetPos__12FEStatWidgetR8bVector2 = .text:0x8017D320; // type:function size:0x64 scope:global -_._14FEToggleWidget = .text:0x8017D384; // type:function size:0x34 scope:global -_._14FESliderWidget = .text:0x8017D3B8; // type:function size:0x40 scope:global -_._9IconPanel = .text:0x8017D3F8; // type:function size:0x8C scope:global -RemoveAll__9IconPanel = .text:0x8017D484; // type:function size:0x74 scope:global -GetHead__9IconPanel = .text:0x8017D4F8; // type:function size:0x8 scope:global -IsHead__9IconPanelP10IconOption = .text:0x8017D500; // type:function size:0x14 scope:global -IsTail__9IconPanelP10IconOption = .text:0x8017D514; // type:function size:0x14 scope:global -IsEndOfList__9IconPanelP10IconOption = .text:0x8017D528; // type:function size:0x10 scope:global -_._16FEScrollyBookEnd = .text:0x8017D538; // type:function size:0x34 scope:global -React__16FEScrollyBookEndPCcUiP8FEObjectUiUi = .text:0x8017D56C; // type:function size:0x4 scope:global -_._12IconScroller = .text:0x8017D570; // type:function size:0x8C scope:global -GetHead__12IconScroller = .text:0x8017D5FC; // type:function size:0xC scope:global -IsHead__12IconScrollerP10IconOption = .text:0x8017D608; // type:function size:0x18 scope:global -IsTail__12IconScrollerP10IconOption = .text:0x8017D620; // type:function size:0x18 scope:global -IsEndOfList__12IconScrollerP10IconOption = .text:0x8017D638; // type:function size:0x28 scope:global -_._16IconScrollerMenu = .text:0x8017D660; // type:function size:0x98 scope:global -_._9ArraySlot = .text:0x8017D6F8; // type:function size:0x34 scope:global -_._14ImageArraySlot = .text:0x8017D72C; // type:function size:0x34 scope:global -_._13ArrayScroller = .text:0x8017D760; // type:function size:0xE4 scope:global -_._17ArrayScrollerMenu = .text:0x8017D844; // type:function size:0xF0 scope:global -_._12UIWidgetMenu = .text:0x8017D934; // type:function size:0x8C scope:global -Setup__12UIWidgetMenu = .text:0x8017D9C0; // type:function size:0x4 scope:global -Release__7FEngHud = .text:0x8017D9C4; // type:function size:0x44 scope:global -IsHudVisible__7FEngHud = .text:0x8017DA08; // type:function size:0x20 scope:global -HideAll__7FEngHud = .text:0x8017DA28; // type:function size:0x28 scope:global -SetHasTurbo__7FEngHudb = .text:0x8017DA50; // type:function size:0x8 scope:global -_._18HudResourceManager = .text:0x8017DA58; // type:function size:0x34 scope:global -LoadingCompleteCallbackBridge__18HudResourceManageri = .text:0x8017DA8C; // type:function size:0x20 scope:global -LoadingCompleteCallbackBridge__18HudResourceManagerUi = .text:0x8017DAAC; // type:function size:0x20 scope:global -LoadedCustomHudTexturePackCallbackBridge__18HudResourceManagerUi = .text:0x8017DACC; // type:function size:0x20 scope:global -LoadedCustomHudTexturesCallbackBridge__18HudResourceManagerUi = .text:0x8017DAEC; // type:function size:0x20 scope:global -IsFlagSet__C5GIconUi = .text:0x8017DB0C; // type:function size:0x18 scope:global -_._9Countdown = .text:0x8017DB24; // type:function size:0x98 scope:global -_._14GenericMessage = .text:0x8017DBBC; // type:function size:0x98 scope:global -GetCurrentGenericMessagePriority__14GenericMessage = .text:0x8017DC54; // type:function size:0x8 scope:global -_._15RaceOverMessage = .text:0x8017DC5C; // type:function size:0x98 scope:global -ShouldShowRaceOverMessage__15RaceOverMessage = .text:0x8017DCF4; // type:function size:0x8 scope:global -_._16FEPackageManager = .text:0x8017DCFC; // type:function size:0x8C scope:global -_._12NitrousGauge = .text:0x8017DD88; // type:function size:0x98 scope:global -_._17SpeedBreakerMeter = .text:0x8017DE20; // type:function size:0x98 scope:global -_._15EngineTempGauge = .text:0x8017DEB8; // type:function size:0x98 scope:global -_._11Speedometer = .text:0x8017DF50; // type:function size:0x98 scope:global -SetSpeed__11Speedometerf = .text:0x8017DFE8; // type:function size:0x8 scope:global -_._10Tachometer = .text:0x8017DFF0; // type:function size:0x98 scope:global -SetRpm__10Tachometerf = .text:0x8017E088; // type:function size:0x8 scope:global -SetRevLimiter__10Tachometerff = .text:0x8017E090; // type:function size:0xC scope:global -SetShifting__10Tachometerb = .text:0x8017E09C; // type:function size:0x8 scope:global -SetInPerfectLaunchRange__10Tachometerb = .text:0x8017E0A4; // type:function size:0x8 scope:global -SetGear__10Tachometer6GearID14ShiftPotentialb = .text:0x8017E0AC; // type:function size:0x34 scope:global -_._10WrongWIndi = .text:0x8017E0E0; // type:function size:0x98 scope:global -_._15RaceInformation = .text:0x8017E178; // type:function size:0x98 scope:global -SetNumRacers__15RaceInformationi = .text:0x8017E210; // type:function size:0x8 scope:global -SetNumLaps__15RaceInformationi = .text:0x8017E218; // type:function size:0x8 scope:global -SetPlayerPosition__15RaceInformationi = .text:0x8017E220; // type:function size:0x8 scope:global -SetPlayerLapNumber__15RaceInformationi = .text:0x8017E228; // type:function size:0x18 scope:global -SetPlayerLapTime__15RaceInformationf = .text:0x8017E240; // type:function size:0x8 scope:global -SetSuddenDeathMode__15RaceInformationb = .text:0x8017E248; // type:function size:0x8 scope:global -SetPlayerPercentComplete__15RaceInformationf = .text:0x8017E250; // type:function size:0x8 scope:global -SetPlayerTollboothsCrossed__15RaceInformationi = .text:0x8017E258; // type:function size:0x8 scope:global -SetNumTollbooths__15RaceInformationi = .text:0x8017E260; // type:function size:0x8 scope:global -_._11LeaderBoard = .text:0x8017E268; // type:function size:0x98 scope:global -SetNumRacers__11LeaderBoardi = .text:0x8017E300; // type:function size:0x8 scope:global -SetNumLaps__11LeaderBoardi = .text:0x8017E308; // type:function size:0x8 scope:global -SetPlayerIndex__11LeaderBoardi = .text:0x8017E310; // type:function size:0x8 scope:global -SetRacerIsBusted__11LeaderBoardib = .text:0x8017E318; // type:function size:0x10 scope:global -SetRacerIsKoed__11LeaderBoardib = .text:0x8017E328; // type:function size:0x10 scope:global -_._14MilestoneBoard = .text:0x8017E338; // type:function size:0x98 scope:global -SetInPursuit__14MilestoneBoardb = .text:0x8017E3D0; // type:function size:0x8 scope:global -SetChallengeSeries__14MilestoneBoardb = .text:0x8017E3D8; // type:function size:0x8 scope:global -SetNumberOfMilestones__14MilestoneBoardi = .text:0x8017E3E0; // type:function size:0x8 scope:global -SetMilestoneIconHash__14MilestoneBoardii = .text:0x8017E3E8; // type:function size:0x10 scope:global -SetMilestoneType__14MilestoneBoardiUi = .text:0x8017E3F8; // type:function size:0x10 scope:global -SetMilestoneGoal__14MilestoneBoardif = .text:0x8017E408; // type:function size:0x10 scope:global -SetMilestoneHeaderHash__14MilestoneBoardii = .text:0x8017E418; // type:function size:0x10 scope:global -MakeSpaceInPoolCallbackBridge__27SillyTextureStreamerManageri = .text:0x8017E428; // type:function size:0x20 scope:global -LoadCallbackBridge__27SillyTextureStreamerManagerUi = .text:0x8017E448; // type:function size:0x20 scope:global -_._8RaceStat = .text:0x8017E468; // type:function size:0x34 scope:global -_._8InfoStat = .text:0x8017E49C; // type:function size:0x34 scope:global -Draw__8InfoStat = .text:0x8017E4D0; // type:function size:0x40 scope:global -_._11GenericStat = .text:0x8017E510; // type:function size:0x34 scope:global -Draw__11GenericStat = .text:0x8017E544; // type:function size:0x9C scope:global -_._9TimerStat = .text:0x8017E5E0; // type:function size:0x34 scope:global -Draw__9TimerStat = .text:0x8017E614; // type:function size:0x5C scope:global -_._13GenericResult = .text:0x8017E670; // type:function size:0x34 scope:global -Draw__13GenericResult = .text:0x8017E6A4; // type:function size:0x13C scope:global -_._14RaceResultStat = .text:0x8017E7E0; // type:function size:0x34 scope:global -Draw__14RaceResultStat = .text:0x8017E814; // type:function size:0x120 scope:global -_._7LapStat = .text:0x8017E934; // type:function size:0x34 scope:global -Draw__7LapStat = .text:0x8017E968; // type:function size:0x138 scope:global -_._9StageStat = .text:0x8017EAA0; // type:function size:0x34 scope:global -Draw__9StageStat = .text:0x8017EAD4; // type:function size:0x108 scope:global -_._9SpeedStat = .text:0x8017EBDC; // type:function size:0x34 scope:global -Draw__9SpeedStat = .text:0x8017EC10; // type:function size:0xE0 scope:global -_._13TollboothStat = .text:0x8017ECF0; // type:function size:0x34 scope:global -Draw__13TollboothStat = .text:0x8017ED24; // type:function size:0x138 scope:global -_._10StatsPanel = .text:0x8017EE5C; // type:function size:0x8C scope:global -_._19PursuitResultsDatum = .text:0x8017EEE8; // type:function size:0x34 scope:global -_._23PursuitResultsArraySlot = .text:0x8017EF1C; // type:function size:0x34 scope:global -_._12PursuitBoard = .text:0x8017EF50; // type:function size:0x98 scope:global -_._13TimeExtension = .text:0x8017EFE8; // type:function size:0x98 scope:global -SetPlayerLapTime__13TimeExtensionf = .text:0x8017F080; // type:function size:0x8 scope:global -_._11BustedMeter = .text:0x8017F088; // type:function size:0x98 scope:global -SetInPursuit__11BustedMeterb = .text:0x8017F120; // type:function size:0x8 scope:global -SetIsHiding__11BustedMeterb = .text:0x8017F128; // type:function size:0x8 scope:global -SetTimeUntilBusted__11BustedMeterf = .text:0x8017F130; // type:function size:0x8 scope:global -SetIsBusted__11BustedMeterb = .text:0x8017F138; // type:function size:0x20 scope:global -_._10TurboMeter = .text:0x8017F158; // type:function size:0x98 scope:global -_._15MenuZoneTrigger = .text:0x8017F1F0; // type:function size:0x98 scope:global -RequestCingularLogo__15MenuZoneTrigger = .text:0x8017F288; // type:function size:0xC scope:global -_GetKind__15MEnterSafeHouse = .text:0x8017F294; // type:function size:0x64 scope:global -_._14DragTachometer = .text:0x8017F2F8; // type:function size:0xB8 scope:global -SetRpm__14DragTachometerf = .text:0x8017F3B0; // type:function size:0x8 scope:global -SetRevLimiter__14DragTachometerff = .text:0x8017F3B8; // type:function size:0xC scope:global -SetGear__14DragTachometer6GearID14ShiftPotentialb = .text:0x8017F3C4; // type:function size:0x14 scope:global -SetInPerfectLaunchRange__14DragTachometerb = .text:0x8017F3D8; // type:function size:0x8 scope:global -SetShifting__14DragTachometerb = .text:0x8017F3E0; // type:function size:0x8 scope:global -_._12ShiftUpdater = .text:0x8017F3E8; // type:function size:0x98 scope:global -SetGear__12ShiftUpdater6GearID11ShiftStatus14ShiftPotentialb = .text:0x8017F480; // type:function size:0x5C scope:global -SetEngineBlown__12ShiftUpdaterb = .text:0x8017F4DC; // type:function size:0x8 scope:global -SetEngineTemp__12ShiftUpdaterf = .text:0x8017F4E4; // type:function size:0x8 scope:global -_._11Infractions = .text:0x8017F4EC; // type:function size:0x98 scope:global -Create__28PostPursuitInfractionsScreenP21ScreenConstructorData = .text:0x8017F584; // type:function size:0x38 scope:global -TextureLoadedCallback__28PostPursuitInfractionsScreenUi = .text:0x8017F5BC; // type:function size:0x20 scope:global -NotificationMessage__19BustedOverlayScreenUlP8FEObjectUlUl = .text:0x8017F5DC; // type:function size:0x4 scope:global -_._6Chyron = .text:0x8017F5E0; // type:function size:0x34 scope:global -_._10FEKeyboard = .text:0x8017F614; // type:function size:0x30 scope:global -_._12SixDaysLater = .text:0x8017F644; // type:function size:0x30 scope:global -_GetKind__18MNotifyMessageDone = .text:0x8017F674; // type:function size:0x64 scope:global -_._14BootFlowScreen = .text:0x8017F6D8; // type:function size:0x34 scope:global -_._15BootFlowManager = .text:0x8017F70C; // type:function size:0x8C scope:global -NotifySoundMessage__12SplashScreenUl18eMenuSoundTriggers = .text:0x8017F798; // type:function size:0x18 scope:global -_._11MovieScreen = .text:0x8017F7B0; // type:function size:0x50 scope:global -NotificationMessage__13LoadingScreenUlP8FEObjectUlUl = .text:0x8017F800; // type:function size:0x4 scope:global -_._11Scrollerina = .text:0x8017F804; // type:function size:0xD8 scope:global -Setup__20LanguageSelectScreen = .text:0x8017F8DC; // type:function size:0x4 scope:global -_GetKind__23MAcceptEnterCareerEvent = .text:0x8017F8E0; // type:function size:0x64 scope:global -_GetKind__24MDeclineEnterCareerEvent = .text:0x8017F944; // type:function size:0x64 scope:global -_GetKind__20MNotifyMovieFinished = .text:0x8017F9A8; // type:function size:0x64 scope:global -_._3MD5 = .text:0x8017FA0C; // type:function size:0x34 scope:global -Reset__3MD5 = .text:0x8017FA40; // type:function size:0x40 scope:global -ClassKey__Q36Attrib3Gen10presetride = .text:0x8017FA80; // type:function size:0xC scope:global -ClassKey__Q36Attrib3Gen9fecooling = .text:0x8017FA8C; // type:function size:0xC scope:global -ClassKey__Q36Attrib3Gen11infractions = .text:0x8017FA98; // type:function size:0xC scope:global -_._Q313FEPlayerCarDB74GetNumInfraction__13FEPlayerCarDBQ218GInfractionManager14InfractionTypeb.0_13NumInfraction.35650 = .text:0x8017FAA4; // type:function size:0x34 scope:local -Callback__CQ313FEPlayerCarDB74GetNumInfraction__13FEPlayerCarDBQ218GInfractionManager14InfractionTypeb.0_13NumInfractionRC14FECareerRecord.35649 = .text:0x8017FAD8; // type:function size:0x30 scope:local -_._Q313FEPlayerCarDB42GetTotalNumInfractions__13FEPlayerCarDBb.0_19TotalNumInfractions.35670 = .text:0x8017FB08; // type:function size:0x34 scope:local -Callback__CQ313FEPlayerCarDB42GetTotalNumInfractions__13FEPlayerCarDBb.0_19TotalNumInfractionsRC14FECareerRecord.35669 = .text:0x8017FB3C; // type:function size:0x34 scope:local -_._Q313FEPlayerCarDB33GetTotalBounty__13FEPlayerCarDB.0_6Bounty.35689 = .text:0x8017FB70; // type:function size:0x34 scope:local -Callback__CQ313FEPlayerCarDB33GetTotalBounty__13FEPlayerCarDB.0_6BountyRC14FECareerRecord.35688 = .text:0x8017FBA4; // type:function size:0x8 scope:local -_._Q313FEPlayerCarDB41GetTotalEvadedPursuits__13FEPlayerCarDB.0_14EvadedPursuits.35706 = .text:0x8017FBAC; // type:function size:0x34 scope:local -Callback__CQ313FEPlayerCarDB41GetTotalEvadedPursuits__13FEPlayerCarDB.0_14EvadedPursuitsRC14FECareerRecord.35705 = .text:0x8017FBE0; // type:function size:0x8 scope:local -_._Q313FEPlayerCarDB41GetTotalBustedPursuits__13FEPlayerCarDB.0_14BustedPursuits.35723 = .text:0x8017FBE8; // type:function size:0x34 scope:local -Callback__CQ313FEPlayerCarDB41GetTotalBustedPursuits__13FEPlayerCarDB.0_14BustedPursuitsRC14FECareerRecord.35722 = .text:0x8017FC1C; // type:function size:0x8 scope:local -_._Q313FEPlayerCarDB38GetNumImpoundedCars__13FEPlayerCarDB.0_11IsImpounded.35740 = .text:0x8017FC24; // type:function size:0x34 scope:local -Callback__CQ313FEPlayerCarDB38GetNumImpoundedCars__13FEPlayerCarDB.0_11IsImpoundedRC14FECareerRecord.35739 = .text:0x8017FC58; // type:function size:0x18 scope:local -_._Q313FEPlayerCarDB33GetTotalFines__13FEPlayerCarDBb.0_5Fines.35758 = .text:0x8017FC70; // type:function size:0x34 scope:local -Callback__CQ313FEPlayerCarDB33GetTotalFines__13FEPlayerCarDBb.0_5FinesRC14FECareerRecord.35757 = .text:0x8017FCA4; // type:function size:0x34 scope:local -_._Q313FEPlayerCarDB46GetNumCareerCarsWithARecord__13FEPlayerCarDB.0_7NumCars.35774 = .text:0x8017FCD8; // type:function size:0x34 scope:local -Callback__CQ313FEPlayerCarDB46GetNumCareerCarsWithARecord__13FEPlayerCarDB.0_7NumCarsRC14FECareerRecord.35773 = .text:0x8017FD0C; // type:function size:0x8 scope:local -_._12TuningSlider = .text:0x8017FD14; // type:function size:0x44 scope:global -_._18CustomTuningScreen = .text:0x8017FD58; // type:function size:0xA8 scope:global -_GLOBAL_.I.__10HudElementPCcUx = .text:0x8017FE00; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x8017FE2C; // type:label scope:local -SetCount__11FEButtonMapUl = .text:0x8017FE2C; // type:function size:0x64 scope:global -GetButtonFrom__11FEButtonMapP8FEObjectlP15FEGameInterface16FEButtonWrapMode = .text:0x8017FE90; // type:function size:0x264 scope:global -ComputeButtonLocation__11FEButtonMapP8FEObjectP15FEGameInterfaceR9FEVector2 = .text:0x801800F4; // type:function size:0xC4 scope:global -__13FECodeListBox = .text:0x801801B8; // type:function size:0xD4 scope:global -__13FECodeListBoxRC13FECodeListBoxb = .text:0x8018028C; // type:function size:0xE8 scope:global -CopyProperties__13FECodeListBoxRC13FECodeListBox = .text:0x80180374; // type:function size:0x218 scope:global -_._13FECodeListBox = .text:0x8018058C; // type:function size:0x74 scope:global -Initialize__13FECodeListBoxUlUl = .text:0x80180600; // type:function size:0x224 scope:global -Clone__13FECodeListBoxb = .text:0x80180824; // type:function size:0x48 scope:global -FillAllCells__13FECodeListBox = .text:0x8018086C; // type:function size:0x248 scope:global -SetTotalNumColumns__13FECodeListBoxUl = .text:0x80180AB4; // type:function size:0x44 scope:global -SetTotalNumRows__13FECodeListBoxUl = .text:0x80180AF8; // type:function size:0x44 scope:global -AllocateStrings__13FECodeListBoxUlUl = .text:0x80180B3C; // type:function size:0x1D8 scope:global -ScrollSelection__13FECodeListBoxll = .text:0x80180D14; // type:function size:0x64 scope:global -Update__13FECodeListBoxf = .text:0x80180D78; // type:function size:0x88 scope:global -DefaultSelectCallback__13FECodeListBoxP13FECodeListBox = .text:0x80180E00; // type:function size:0x70 scope:global -AllocateString__13FECodeListBox = .text:0x80180E70; // type:function size:0x28 scope:global -DeallocateString__13FECodeListBoxPs = .text:0x80180E98; // type:function size:0x1C scope:global -GetRealColumn__C13FECodeListBoxl = .text:0x80180EB4; // type:function size:0x78 scope:global -GetRealRow__C13FECodeListBoxl = .text:0x80180F2C; // type:function size:0x78 scope:global -CheckMovement__13FECodeListBoxlllll = .text:0x80180FA4; // type:function size:0x11C scope:global -MakeMove__13FECodeListBoxlRUlT2UlUl = .text:0x801810C0; // type:function size:0x1B0 scope:global -ScrollSelection__13FECodeListBoxlRUlT2UlUlb = .text:0x80181270; // type:function size:0x984 scope:global -CalculateCurrentFromTarget__13FECodeListBoxUlUlUl = .text:0x80181BF4; // type:function size:0x70 scope:global -SetCellColor__13FECodeListBoxUlUlUlUlUl = .text:0x80181C64; // type:function size:0xA0 scope:global -SetCellScale__13FECodeListBoxUlUlRC7FEPointUlUl = .text:0x80181D04; // type:function size:0xB0 scope:global -SetCellJustification__13FECodeListBoxUlUlUlUlUl = .text:0x80181DB4; // type:function size:0xA4 scope:global -__as__11FEEventListR11FEEventList = .text:0x80181E58; // type:function size:0x48 scope:global -SetCount__11FEEventListl = .text:0x80181EA0; // type:function size:0xD4 scope:global -__7FEGroupRC7FEGroupbT2 = .text:0x80181F74; // type:function size:0xB4 scope:global -FindChildRecursive__C7FEGroupUl = .text:0x80182028; // type:function size:0x7C scope:global -__8FEJoyPad = .text:0x801820A4; // type:function size:0x30 scope:global -Reset__8FEJoyPad = .text:0x801820D4; // type:function size:0x30 scope:global -Update__8FEJoyPadUlUl = .text:0x80182104; // type:function size:0x60 scope:global -WasPressed__8FEJoyPadUl = .text:0x80182164; // type:function size:0x34 scope:global -WasHeld__8FEJoyPadUl = .text:0x80182198; // type:function size:0x30 scope:global -HeldFor__8FEJoyPadUl = .text:0x801821C8; // type:function size:0x44 scope:global -WasReleased__8FEJoyPadUl = .text:0x8018220C; // type:function size:0x30 scope:global -DecrementHold__8FEJoyPadUlUl = .text:0x8018223C; // type:function size:0x4C scope:global -FEKeyInterp__FP8FEScriptUclP8FEObject = .text:0x80182288; // type:function size:0x6C scope:global -FEKeyInterp__FP10FEKeyTracklPv = .text:0x801822F4; // type:function size:0x58 scope:global -FEKeyInterpFast__FP10FEKeyTracklPv = .text:0x8018234C; // type:function size:0x94 scope:global -FEInterpLinear__FP8FEScriptUclPv = .text:0x801823E0; // type:function size:0x40 scope:global -FEInterpLinear__FP10FEKeyTracklPv = .text:0x80182420; // type:function size:0x668 scope:global -FELerpInteger__FllfPlT3 = .text:0x80182A88; // type:function size:0x64 scope:global -FELerpFloat__FfffPfT3 = .text:0x80182AEC; // type:function size:0x18 scope:global -FELerpVector2__FR9FEVector2T0fP9FEVector2T3 = .text:0x80182B04; // type:function size:0x3C scope:global -FELerpVector3__FR9FEVector3T0fP9FEVector3T3 = .text:0x80182B40; // type:function size:0x58 scope:global -FELerpQuaternion__FR12FEQuaternionT0fP12FEQuaternionT3 = .text:0x80182B98; // type:function size:0x51C scope:global -FELerpColor__FR7FEColorT0fP7FEColorT3 = .text:0x801830B4; // type:function size:0x160 scope:global -FEInterpNone__FP8FEScriptUclPv = .text:0x80183214; // type:function size:0x40 scope:global -FEInterpNone__FP10FEKeyTracklPv = .text:0x80183254; // type:function size:0xC0 scope:global -__as__10FEKeyTrackR10FEKeyTrack = .text:0x80183314; // type:function size:0x154 scope:global -__nw__9FEKeyNodeUi = .text:0x80183468; // type:function size:0x12C scope:global -__dl__9FEKeyNodePv = .text:0x80183594; // type:function size:0xE4 scope:global -GetKeyAt__10FEKeyTrackl = .text:0x80183678; // type:function size:0x7C scope:global -GetDeltaKeyAt__10FEKeyTrackl = .text:0x801836F4; // type:function size:0x74 scope:global -FEUpperCase__Fc = .text:0x80183768; // type:function size:0x18 scope:global -FEStricmp__FPCcT0 = .text:0x80183780; // type:function size:0x64 scope:global -__6FENode = .text:0x801837E4; // type:function size:0x30 scope:global -_._6FENode = .text:0x80183814; // type:function size:0x64 scope:global -SetName__6FENodePCc = .text:0x80183878; // type:function size:0x8C scope:global -AddNode__9FEMinListP9FEMinNodeT1 = .text:0x80183904; // type:function size:0x6C scope:global -RemNode__9FEMinListP9FEMinNode = .text:0x80183970; // type:function size:0x7C scope:global -RemHead__9FEMinList = .text:0x801839EC; // type:function size:0x3C scope:global -FindNode__C9FEMinListUl = .text:0x80183A28; // type:function size:0x34 scope:global -FindNode__C6FEListPCcP6FENode = .text:0x80183A5C; // type:function size:0x9C scope:global -FindNode__C6FEListPCc = .text:0x80183AF8; // type:function size:0x24 scope:global -FEHash__FPCc = .text:0x80183B1C; // type:function size:0x38 scope:global -FEHashUpper__FPCc = .text:0x80183B54; // type:function size:0x64 scope:global -__9FEListBox = .text:0x80183BB8; // type:function size:0xB0 scope:global -_._9FEListBox = .text:0x80183C68; // type:function size:0x48 scope:global -Terminate__9FEListBox = .text:0x80183CB0; // type:function size:0x54 scope:global -SetNumColumns__9FEListBoxUl = .text:0x80183D04; // type:function size:0x1B8 scope:global -SetNumRows__9FEListBoxUl = .text:0x80183EBC; // type:function size:0x17C scope:global -SetCellType__9FEListBoxUl = .text:0x80184038; // type:function size:0x78 scope:global -SetCellString__9FEListBoxPCs = .text:0x801840B0; // type:function size:0x98 scope:global -IncrementCellByColumn__9FEListBox = .text:0x80184148; // type:function size:0x40 scope:global -ScrollSelection__9FEListBoxll = .text:0x80184188; // type:function size:0x450 scope:global -Update__9FEListBoxf = .text:0x801845D8; // type:function size:0x140 scope:global -SetAutoWrap__9FEListBoxb = .text:0x80184718; // type:function size:0x28 scope:global -InitializeListEntry__9FEListBoxP15FEListEntryDataUl = .text:0x80184740; // type:function size:0x28 scope:global -InitializeCell__9FEListBoxP13FEListBoxCellUl = .text:0x80184768; // type:function size:0x84 scope:global -CleanupColumns__9FEListBox = .text:0x801847EC; // type:function size:0x50 scope:global -CleanupRows__9FEListBox = .text:0x8018483C; // type:function size:0x50 scope:global -CleanupCells__9FEListBox = .text:0x8018488C; // type:function size:0xA0 scope:global -RecalculateCummulative__9FEListBox = .text:0x8018492C; // type:function size:0x7C scope:global -CompleteScroll__9FEListBox = .text:0x801849A8; // type:function size:0x68 scope:global -GetMatrix__12FEQuaternionP9FEMatrix4 = .text:0x80184A10; // type:function size:0xC4 scope:global -Identify__9FEMatrix4 = .text:0x80184AD4; // type:function size:0x54 scope:global -FEMultMatrix__FP9FEMatrix4PC9FEMatrix4T1 = .text:0x80184B28; // type:function size:0x280 scope:global -FEMultMatrix__FP9FEVector3PC9FEMatrix4PC9FEVector3 = .text:0x80184DA8; // type:function size:0x7C scope:global -_._10FEResponse = .text:0x80184E24; // type:function size:0x40 scope:global -__as__10FEResponseR10FEResponse = .text:0x80184E64; // type:function size:0x80 scope:global -SetParam__10FEResponsePCc = .text:0x80184EE4; // type:function size:0x60 scope:global -ReleaseParam__10FEResponse = .text:0x80184F44; // type:function size:0x68 scope:global -_._17FEMessageResponse = .text:0x80184FAC; // type:function size:0x58 scope:global -__nw__17FEMessageResponseUi = .text:0x80185004; // type:function size:0x150 scope:global -__dl__17FEMessageResponsePv = .text:0x80185154; // type:function size:0xE4 scope:global -PurgeResponses__17FEMessageResponse = .text:0x80185238; // type:function size:0x7C scope:global -SetCount__17FEMessageResponseUl = .text:0x801852B4; // type:function size:0x120 scope:global -FindResponse__C17FEMessageResponseUl = .text:0x801853D4; // type:function size:0x40 scope:global -FindConditionBranchTarget__C17FEMessageResponseUl = .text:0x80185414; // type:function size:0x90 scope:global -__7FEMouse = .text:0x801854A4; // type:function size:0x30 scope:global -Reset__7FEMouse = .text:0x801854D4; // type:function size:0x30 scope:global -Update__7FEMouseR11FEMouseInfoUl = .text:0x80185504; // type:function size:0xAC scope:global -IsDown__7FEMouseUs = .text:0x801855B0; // type:function size:0x18 scope:global -Allocate__15FEMsgTargetListUl = .text:0x801855C8; // type:function size:0xB8 scope:global -AppendTarget__15FEMsgTargetListP8FEObject = .text:0x80185680; // type:function size:0x5C scope:global -GetMessageTargets__9FEPackageUl = .text:0x801856DC; // type:function size:0x40 scope:global -__7FEngine = .text:0x8018571C; // type:function size:0x128 scope:global -SetNumJoyPads__7FEngineUc = .text:0x80185844; // type:function size:0xA0 scope:global -SetExecution__7FEngineb = .text:0x801858E4; // type:function size:0x28 scope:global -SetProcessInput__7FEngineP9FEPackageb = .text:0x8018590C; // type:function size:0x10 scope:global -SetInitialState__7FEngine = .text:0x8018591C; // type:function size:0x90 scope:global -LoadPackage__7FEnginePCvb = .text:0x801859AC; // type:function size:0x84 scope:global -UnloadPackage__7FEngineP9FEPackage = .text:0x80185A30; // type:function size:0x194 scope:global -UnloadLibraryPackage__7FEngineP9FEPackage = .text:0x80185BC4; // type:function size:0xC8 scope:global -PushPackage__7FEnginePCcUcUl = .text:0x80185C8C; // type:function size:0x1A4 scope:global -AddToIdleList__7FEngineP9FEPackage = .text:0x80185E30; // type:function size:0x2C scope:global -FindIdlePackage__C7FEnginePCc = .text:0x80185E5C; // type:function size:0x24 scope:global -GetFirstLibrary__C7FEngine = .text:0x80185E80; // type:function size:0x8 scope:global -AddToLibraryList__7FEngineP9FEPackage = .text:0x80185E88; // type:function size:0x2C scope:global -RemoveFromLibraryList__7FEngineP9FEPackage = .text:0x80185EB4; // type:function size:0x24 scope:global -FindLibraryPackage__C7FEngineUl = .text:0x80185ED8; // type:function size:0x60 scope:global -Update__7FEnginelUi = .text:0x80185F38; // type:function size:0x308 scope:global -ProcessPadsForPackage__7FEngineP9FEPackage = .text:0x80186240; // type:function size:0xC08 scope:global -UpdateMouseState__7FEngineP9FEPackageP18FEObjectMouseStateff = .text:0x80186E48; // type:function size:0x2D8 scope:global -ProcessMouseForPackage__7FEngineP9FEPackage = .text:0x80187120; // type:function size:0xE4 scope:global -Render__7FEngine = .text:0x80187204; // type:function size:0x1D0 scope:global -RenderGroup__7FEngineP7FEGroupR9FEMatrix4T2Us = .text:0x801873D4; // type:function size:0x1CC scope:global -RenderObject__7FEngineP8FEObjectR9FEMatrix4Us = .text:0x801875A0; // type:function size:0xF8 scope:global -ForAllObjects__7FEngineR16FEObjectCallback = .text:0x80187698; // type:function size:0x60 scope:global -QueueMessage__7FEngineUlP8FEObjectP9FEPackageT2Ul = .text:0x801876F8; // type:function size:0xCC scope:global -SendMessageToGame__7FEngineUlP8FEObjectP9FEPackageUl = .text:0x801877C4; // type:function size:0x44 scope:global -QueuePackageSwitch__7FEnginePCcUl = .text:0x80187808; // type:function size:0x28 scope:global -QueuePackagePush__7FEnginePCcUl = .text:0x80187830; // type:function size:0x28 scope:global -QueuePackagePop__7FEngine = .text:0x80187858; // type:function size:0x2C scope:global -QueuePackageCommand__7FEnginelUlPCc = .text:0x80187884; // type:function size:0x100 scope:global -QueuePackageUserTransfer__7FEngineP9FEPackagebUl = .text:0x80187984; // type:function size:0xA8 scope:global -ProcessMessageQueue__7FEngine = .text:0x80187A2C; // type:function size:0x368 scope:global -ProcessListBoxResponses__7FEngineP8FEObjectP9FEPackageUl = .text:0x80187D94; // type:function size:0xAC scope:global -ProcessCodeListBoxResponses__7FEngineP8FEObjectP9FEPackageUl = .text:0x80187E40; // type:function size:0xAC scope:global -ProcessObjectMessage__7FEngineP8FEObjectP9FEPackageUlUl = .text:0x80187EEC; // type:function size:0xA0 scope:global -ProcessGlobalMessage__7FEngineP9FEPackageUlUl = .text:0x80187F8C; // type:function size:0x58 scope:global -ProcessResponses__7FEngineP17FEMessageResponseP8FEObjectP9FEPackageUl = .text:0x80187FE4; // type:function size:0x494 scope:global -FindPackageWithControl__7FEngine = .text:0x80188478; // type:function size:0x2C scope:global -FindQueuedNodeWithControl__7FEngine = .text:0x801884A4; // type:function size:0x2C scope:global -ProcessPackageCommands__7FEngine = .text:0x801884D0; // type:function size:0x254 scope:global -GetNumPackagesBelowPriority__7FEngineUc = .text:0x80188724; // type:function size:0x84 scope:global -RecordLastPackageButton__7FEngineUlUl = .text:0x801887A8; // type:function size:0x74 scope:global -RecallLastPackageButton__7FEngineUl = .text:0x8018881C; // type:function size:0x38 scope:global -RecordPackageMarker__7FEnginePCc = .text:0x80188854; // type:function size:0x50 scope:global -RecallPackageMarker__7FEngine = .text:0x801888A4; // type:function size:0x30 scope:global -ClearPackageMarkers__7FEngine = .text:0x801888D4; // type:function size:0x2C scope:global -InitFEngMemoryPool__Fv = .text:0x80188900; // type:function size:0x9C scope:global -FEngMalloc__FUiPCci = .text:0x8018899C; // type:function size:0x60 scope:global -FEngMemCpy__FPvPCvi = .text:0x801889FC; // type:function size:0x20 scope:global -FEngMemSet__FPvii = .text:0x80188A1C; // type:function size:0x20 scope:global -FEngStrCpy__FPcPCc = .text:0x80188A3C; // type:function size:0x20 scope:global -FEngStrLen__FPCc = .text:0x80188A5C; // type:function size:0x20 scope:global -FEngStrICmp__FPCcT0 = .text:0x80188A7C; // type:function size:0x20 scope:global -FEngAbs__Ff = .text:0x80188A9C; // type:function size:0x8 scope:global -FEngSqrt__Ff = .text:0x80188AA4; // type:function size:0x60 scope:global -FEngSin__Ff = .text:0x80188B04; // type:function size:0x20 scope:global -FEngACos__Ff = .text:0x80188B24; // type:function size:0x54 scope:global -Close__Ffff = .text:0x80188B78; // type:function size:0x28 scope:local -Close__Flll = .text:0x80188BA0; // type:function size:0x2C scope:local -__8FEObject = .text:0x80188BCC; // type:function size:0x8C scope:global -__8FEObjectRC8FEObjectb = .text:0x80188C58; // type:function size:0x238 scope:global -_._8FEObject = .text:0x80188E90; // type:function size:0xC0 scope:global -SetDataSize__8FEObjectUl = .text:0x80188F50; // type:function size:0x5C scope:global -SetName__8FEObjectPCc = .text:0x80188FAC; // type:function size:0x88 scope:global -FindScript__C8FEObjectUl = .text:0x80189034; // type:function size:0x34 scope:global -SetupMoveToTracks__8FEObject = .text:0x80189068; // type:function size:0x330 scope:global -SetCurrentScript__8FEObjectP8FEScript = .text:0x80189398; // type:function size:0x2C scope:global -FindResponse__C8FEObjectUl = .text:0x801893C4; // type:function size:0x28 scope:global -SetTrackValue__8FEObject18FEKeyTrack_IndicesRC9FEVector3b = .text:0x801893EC; // type:function size:0x14C scope:global -SetTrackValue__8FEObject18FEKeyTrack_IndicesRC9FEVector2b = .text:0x80189538; // type:function size:0x138 scope:global -SetTrackValue__8FEObject18FEKeyTrack_IndicesRC7FEColorb = .text:0x80189670; // type:function size:0xE4 scope:global -SetPosition__8FEObjectRC9FEVector3b = .text:0x80189754; // type:function size:0x12C scope:global -SetRotation__8FEObjectRC12FEQuaternionb = .text:0x80189880; // type:function size:0x144 scope:global -SetColor__8FEObjectRC7FEColorb = .text:0x801899C4; // type:function size:0x154 scope:global -SetScript__8FEObjectUlb = .text:0x80189B18; // type:function size:0x40 scope:global -SetScript__8FEObjectP8FEScriptb = .text:0x80189B58; // type:function size:0x50 scope:global -GetDataOffset__8FEObject18FEKeyTrack_Indices = .text:0x80189BA8; // type:function size:0xD4 scope:global -Clone__8FEObjectb = .text:0x80189C7C; // type:function size:0x48 scope:global -Callback__18PackageInitStateCBP8FEObject = .text:0x80189CC4; // type:function size:0x60 scope:global -__9FEPackage = .text:0x80189D24; // type:function size:0xF4 scope:global -_._9FEPackage = .text:0x80189E18; // type:function size:0x1BC scope:global -SetFilename__9FEPackagePCc = .text:0x80189FD4; // type:function size:0x70 scope:global -Startup__9FEPackageP15FEGameInterface = .text:0x8018A044; // type:function size:0x74 scope:global -Shutdown__9FEPackageP15FEGameInterface = .text:0x8018A0B8; // type:function size:0x48 scope:global -InitializePackage__9FEPackage = .text:0x8018A100; // type:function size:0x44 scope:global -FindResponse__9FEPackageUl = .text:0x8018A144; // type:function size:0x28 scope:global -ForAllChildren__9FEPackageP7FEGroupR16FEObjectCallback = .text:0x8018A16C; // type:function size:0x98 scope:global -ForAllObjects__9FEPackageR16FEObjectCallback = .text:0x8018A204; // type:function size:0x98 scope:global -FindObjectByHash__9FEPackageUl = .text:0x8018A29C; // type:function size:0x54 scope:global -FindObjectByGUID__9FEPackageUl = .text:0x8018A2F0; // type:function size:0x54 scope:global -IssueScriptMessages__9FEPackageP7FEngineP8FEObjectP8FEScriptll = .text:0x8018A344; // type:function size:0x21C scope:global -UpdateGroup__9FEPackageP7FEGroupl = .text:0x8018A560; // type:function size:0x6C scope:global -UpdateObject__9FEPackageP8FEObjectl = .text:0x8018A5CC; // type:function size:0x4B4 scope:global -UpdateObjectTracks__9FEPackageP8FEObjectP8FEScript = .text:0x8018AA80; // type:function size:0x1DC scope:global -Update__9FEPackageP7FEnginel = .text:0x8018AC5C; // type:function size:0x98 scope:global -SetCurrentButton__9FEPackageP8FEObjectb = .text:0x8018ACF4; // type:function size:0xC8 scope:global -Callback__17ResourceConnectorP8FEObject = .text:0x8018ADBC; // type:function size:0x84 scope:global -ConnectListBoxResources__17ResourceConnectorP9FEListBox = .text:0x8018AE40; // type:function size:0x13C scope:global -ConnectObjectResources__9FEPackage = .text:0x8018AF7C; // type:function size:0x54 scope:global -__18FEObjectMouseState = .text:0x8018AFD0; // type:function size:0x24 scope:global -_._18FEObjectMouseState = .text:0x8018AFF4; // type:function size:0x28 scope:global -BuildMouseObjectStateList__9FEPackage = .text:0x8018B01C; // type:function size:0x130 scope:global -OffsetCalculatron__FUlP8FEObjectR7FEPoint = .text:0x8018B14C; // type:function size:0xE0 scope:global -AddMouseObjectState__9FEPackageP8FEObject = .text:0x8018B22C; // type:function size:0x12C scope:global -UpdateMouseObjectOffsets__9FEPackageP8FEObject = .text:0x8018B358; // type:function size:0x11C scope:global -SetNumLibraryRefs__9FEPackageUl = .text:0x8018B474; // type:function size:0xD4 scope:global -FindLibraryReference__C9FEPackageUl = .text:0x8018B548; // type:function size:0x40 scope:global -AddPackage__13FEPackageListP9FEPackage = .text:0x8018B588; // type:function size:0x48 scope:global -RemovePackage__13FEPackageListP9FEPackage = .text:0x8018B5D0; // type:function size:0x50 scope:global -ReplaceParentLinks__13FEPackageListPC9FEPackageT1 = .text:0x8018B620; // type:function size:0x2C scope:global -__15FEPackageReader = .text:0x8018B64C; // type:function size:0x30 scope:global -_._15FEPackageReader = .text:0x8018B67C; // type:function size:0x28 scope:global -Reset__15FEPackageReader = .text:0x8018B6A4; // type:function size:0x34 scope:global -Load__15FEPackageReaderPCvP15FEGameInterfaceP7FEnginebN24 = .text:0x8018B6D8; // type:function size:0x140 scope:global -FindChild__15FEPackageReaderP7FEChunkUl = .text:0x8018B818; // type:function size:0xB8 scope:global -GetTypeSize__15FEPackageReaderUl = .text:0x8018B8D0; // type:function size:0x80 scope:global -ReadTypeSizes__15FEPackageReader = .text:0x8018B950; // type:function size:0x7C scope:global -ReadHeaderChunk__15FEPackageReader = .text:0x8018B9CC; // type:function size:0x17C scope:global -ReadReferencedPackagesChunk__15FEPackageReader = .text:0x8018BB48; // type:function size:0x1B8 scope:global -ReadLibraryRefsChunk__15FEPackageReader = .text:0x8018BD00; // type:function size:0x140 scope:global -ReadResourceChunk__15FEPackageReader = .text:0x8018BE40; // type:function size:0x2FC scope:global -ReadPackageResponseChunk__15FEPackageReader = .text:0x8018C13C; // type:function size:0x74 scope:global -ReadObjectChunk__15FEPackageReader = .text:0x8018C1B0; // type:function size:0x3C4 scope:global -CreateObject__15FEPackageReaderUl = .text:0x8018C574; // type:function size:0x318 scope:global -ReadObjectTags__15FEPackageReaderP5FETagUl = .text:0x8018C88C; // type:function size:0x514 scope:global -ProcessStringTag__15FEPackageReaderP5FETag = .text:0x8018CDA0; // type:function size:0x1E8 scope:global -ProcessImageTag__15FEPackageReaderP5FETag = .text:0x8018CF88; // type:function size:0x44 scope:global -ProcessMultiImageTag__15FEPackageReaderP5FETag = .text:0x8018CFCC; // type:function size:0x148 scope:global -ProcessListBoxTag__15FEPackageReaderP5FETag = .text:0x8018D114; // type:function size:0x560 scope:global -ProcessCodeListBoxTag__15FEPackageReaderP5FETag = .text:0x8018D674; // type:function size:0x2A0 scope:global -ReadScriptTags__15FEPackageReaderP5FETagUl = .text:0x8018D914; // type:function size:0x8B0 scope:global -ReadMessageResponseTags__15FEPackageReaderP5FETagUlb = .text:0x8018E1C4; // type:function size:0x260 scope:global -ReadMessageTargetListChunk__15FEPackageReader = .text:0x8018E424; // type:function size:0x208 scope:global -FindReferencedObject__15FEPackageReaderUlPP8FEObjectPP9FEPackage = .text:0x8018E62C; // type:function size:0x90 scope:global -ReferenceList__9FERefListP9FERefList = .text:0x8018E6BC; // type:function size:0x88 scope:global -AddNode__9FERefListP9FEMinNodeT1 = .text:0x8018E744; // type:function size:0x60 scope:global -RemNode__9FERefListP9FEMinNode = .text:0x8018E7A4; // type:function size:0x70 scope:global -RemHead__9FERefList = .text:0x8018E814; // type:function size:0x3C scope:global -GetNumElements__9FERefList = .text:0x8018E850; // type:function size:0x5C scope:global -Init__8FEScript = .text:0x8018E8AC; // type:function size:0x24 scope:global -_._8FEScript = .text:0x8018E8D0; // type:function size:0xEC scope:global -__8FEScriptR8FEScriptb = .text:0x8018E9BC; // type:function size:0x220 scope:global -__nw__8FEScriptUi = .text:0x8018EBDC; // type:function size:0x14C scope:global -__dl__8FEScriptPv = .text:0x8018ED28; // type:function size:0xE4 scope:global -SetName__8FEScriptPCc = .text:0x8018EE0C; // type:function size:0x88 scope:global -SetTrackCount__8FEScriptl = .text:0x8018EE94; // type:function size:0x158 scope:global -FindTrack__C8FEScript18FEKeyTrack_Indices = .text:0x8018EFEC; // type:function size:0x54 scope:global -AllocBlock__10FESlotNode = .text:0x8018F040; // type:function size:0xAC scope:global -FreeBlock__10FESlotNodePUc = .text:0x8018F0EC; // type:function size:0x40 scope:global -Alloc__10FESlotPool = .text:0x8018F12C; // type:function size:0xD8 scope:global -Free__10FESlotPoolPUc = .text:0x8018F204; // type:function size:0xB4 scope:global -Alloc__11FEMultiPoolUl = .text:0x8018F2B8; // type:function size:0xCC scope:global -Free__11FEMultiPoolPUc = .text:0x8018F384; // type:function size:0xA0 scope:global -__8FEStringRC8FEStringb = .text:0x8018F424; // type:function size:0x88 scope:global -SetLabel__8FEStringPCc = .text:0x8018F4AC; // type:function size:0xB8 scope:global -CreateBaseObjectType__9FETypeLibPCc = .text:0x8018F564; // type:function size:0x1BC scope:global -CreateImageObjectType__9FETypeLibPCc = .text:0x8018F720; // type:function size:0xC8 scope:global -CreateMultiImageObjectType__9FETypeLibPCc = .text:0x8018F7E8; // type:function size:0x138 scope:global -Startup__9FETypeLib = .text:0x8018F920; // type:function size:0x31C scope:global -FindType__9FETypeLibUl = .text:0x8018FC3C; // type:function size:0x20 scope:global -SetDefault__11FEFieldNodePv = .text:0x8018FC5C; // type:function size:0x70 scope:global -AddField__10FETypeNodePCcl = .text:0x8018FCCC; // type:function size:0xA0 scope:global -UpdateOffsets__10FETypeNode = .text:0x8018FD6C; // type:function size:0x2C scope:global -GetField__10FETypeNodePCc = .text:0x8018FD98; // type:function size:0x58 scope:global -__7FEColorUl = .text:0x8018FDF0; // type:function size:0x28 scope:global -__opUl__C7FEColor = .text:0x8018FE18; // type:function size:0xB0 scope:global -__as__7FEColorRC7FEColor = .text:0x8018FEC8; // type:function size:0x28 scope:global -__apl__7FEColorRC7FEColor = .text:0x8018FEF0; // type:function size:0x48 scope:global -__mi__C7FEColorRC7FEColor = .text:0x8018FF38; // type:function size:0x78 scope:global -GetStringLength__FPCs = .text:0x8018FFB0; // type:function size:0x38 scope:global -__12FEWideString = .text:0x8018FFE8; // type:function size:0x40 scope:global -__12FEWideStringRC12FEWideString = .text:0x80190028; // type:function size:0x48 scope:global -_._12FEWideString = .text:0x80190070; // type:function size:0x4C scope:global -__as__12FEWideStringRC12FEWideString = .text:0x801900BC; // type:function size:0x58 scope:global -__as__12FEWideStringPCs = .text:0x80190114; // type:function size:0x58 scope:global -Length__C12FEWideString = .text:0x8019016C; // type:function size:0x24 scope:global -SetLength__12FEWideStringUl = .text:0x80190190; // type:function size:0x70 scope:global -AllocateString__12FEWideStringUl = .text:0x80190200; // type:function size:0x3C scope:global -GetTexture__12FEMultiImageUl = .text:0x8019023C; // type:function size:0x20 scope:global -SetUVs__12FEMultiImageUlG9FEVector2T2 = .text:0x8019025C; // type:function size:0x50 scope:global -GetUVs__12FEMultiImageUlR9FEVector2T2 = .text:0x801902AC; // type:function size:0x50 scope:global -CopyString__H1Zs_PsPCX01_v = .text:0x801902FC; // type:function size:0x3C scope:global -CopyString__H1Zs_PsPCX01Ul_v = .text:0x80190338; // type:function size:0x64 scope:global -SortObjects__t14FEObjectSorter1i1024 = .text:0x8019039C; // type:function size:0x13C scope:global -__11FEImageData = .text:0x801904D8; // type:function size:0x5C scope:global -__static_initialization_and_destruction_0 = .text:0x80190534; // type:function size:0x1BC scope:local -__ml__12FEQuaternionRC12FEQuaternion = .text:0x801906F0; // type:function size:0xD4 scope:global -_._9FEMinNode = .text:0x801907C4; // type:function size:0x34 scope:global -_._9FEMinList = .text:0x801907F8; // type:function size:0x4C scope:global -Purge__9FEMinList = .text:0x80190844; // type:function size:0x58 scope:global -_._6FEList = .text:0x8019089C; // type:function size:0x4C scope:global -_._9FERefList = .text:0x801908E8; // type:function size:0x58 scope:global -GetHead__C9FERefList = .text:0x80190940; // type:function size:0x38 scope:global -Purge__9FERefList = .text:0x80190978; // type:function size:0x58 scope:global -_._9FEKeyNode = .text:0x801909D0; // type:function size:0x34 scope:global -_._18PackageInitStateCB = .text:0x80190A04; // type:function size:0x34 scope:global -GetPCellData__9FEListBoxUlUl = .text:0x80190A38; // type:function size:0x1C scope:global -_._8FEString = .text:0x80190A54; // type:function size:0x60 scope:global -Clone__8FEStringb = .text:0x80190AB4; // type:function size:0x48 scope:global -_._7FEGroup = .text:0x80190AFC; // type:function size:0x4C scope:global -Clone__7FEGroupb = .text:0x80190B48; // type:function size:0x4C scope:global -_._t10FEPoolNode2Z9FEKeyNodei256 = .text:0x80190B94; // type:function size:0xC0 scope:global -_._t10FEPoolNode2Z17FEMessageResponsei64 = .text:0x80190C54; // type:function size:0xC0 scope:global -_._11FEFieldNode = .text:0x80190D14; // type:function size:0x54 scope:global -_._10FETypeNode = .text:0x80190D68; // type:function size:0x4C scope:global -_._16FEPackageCommand = .text:0x80190DB4; // type:function size:0x20 scope:global -_._13FEMessageNode = .text:0x80190DD4; // type:function size:0x34 scope:global -_._7FEImage = .text:0x80190E08; // type:function size:0x30 scope:global -Clone__7FEImageb = .text:0x80190E38; // type:function size:0x64 scope:global -_._12FEMultiImage = .text:0x80190E9C; // type:function size:0x30 scope:global -Clone__12FEMultiImageb = .text:0x80190ECC; // type:function size:0x70 scope:global -_._10FESlotNode = .text:0x80190F3C; // type:function size:0x64 scope:global -_._10FESlotPool = .text:0x80190FA0; // type:function size:0x5C scope:global -_._14FEColoredImage = .text:0x80190FFC; // type:function size:0x30 scope:global -Clone__14FEColoredImageb = .text:0x8019102C; // type:function size:0x70 scope:global -_._7FEMovie = .text:0x8019109C; // type:function size:0x30 scope:global -Clone__7FEMovieb = .text:0x801910CC; // type:function size:0x64 scope:global -_._12FEFindByHash = .text:0x80191130; // type:function size:0x34 scope:global -Callback__12FEFindByHashP8FEObject = .text:0x80191164; // type:function size:0x24 scope:global -_._12FEFindByGUID = .text:0x80191188; // type:function size:0x34 scope:global -Callback__12FEFindByGUIDP8FEObject = .text:0x801911BC; // type:function size:0x24 scope:global -_._28MouseStateArrayOffsetUpdater = .text:0x801911E0; // type:function size:0x34 scope:global -Callback__28MouseStateArrayOffsetUpdaterP8FEObject = .text:0x80191214; // type:function size:0x34 scope:global -_._17ResourceConnector = .text:0x80191248; // type:function size:0x34 scope:global -_._23MouseStateObjectCounter = .text:0x8019127C; // type:function size:0x34 scope:global -Callback__23MouseStateObjectCounterP8FEObject = .text:0x801912B0; // type:function size:0x20 scope:global -_._22MouseStateArrayBuilder = .text:0x801912D0; // type:function size:0x34 scope:global -Callback__22MouseStateArrayBuilderP8FEObject = .text:0x80191304; // type:function size:0x34 scope:global -_._11FEAnimImage = .text:0x80191338; // type:function size:0x30 scope:global -Clone__11FEAnimImageb = .text:0x80191368; // type:function size:0x70 scope:global -_._13FESimpleImage = .text:0x801913D8; // type:function size:0x30 scope:global -Clone__13FESimpleImageb = .text:0x80191408; // type:function size:0x5C scope:global -_._t10FEPoolNode2Z8FEScripti32 = .text:0x80191464; // type:function size:0xC0 scope:global -_GLOBAL_.I.FEDirection_Message = .text:0x80191524; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x80191550; // type:label scope:local -Evaluate__11UBezierLiteRCQ25UMath7Matrix4fRQ25UMath7Vector4 = .text:0x80191550; // type:function size:0x160 scope:global -rasin = .text:0x801916B0; // type:function size:0x2C scope:global -rsqrt = .text:0x801916DC; // type:function size:0x60 scope:global -v3length = .text:0x8019173C; // type:function size:0x38 scope:global -rsincos = .text:0x80191774; // type:function size:0x5C scope:global -v3crossprod = .text:0x801917D0; // type:function size:0x40 scope:global -v3unit = .text:0x80191810; // type:function size:0x90 scope:global -v3sub = .text:0x801918A0; // type:function size:0x4C scope:global -v3add = .text:0x801918EC; // type:function size:0x4C scope:global -MATRIX4_multxrot = .text:0x80191938; // type:function size:0x118 scope:global -MATRIX4_multyrot = .text:0x80191A50; // type:function size:0x118 scope:global -MATRIX4_multzrot = .text:0x80191B68; // type:function size:0x118 scope:global -UDataGroupEncodeTag__FUibPc = .text:0x80191C80; // type:function size:0xB4 scope:global -SearchTagArray__FRPC9TagStructUiUi = .text:0x80191D34; // type:function size:0xE8 scope:local -SearchTagArray__FRPC5UDataUiUi = .text:0x80191E1C; // type:function size:0x20 scope:local -SearchTagArray__FRPC6UGroupUiUi = .text:0x80191E3C; // type:function size:0x20 scope:local -ResolveOffsets__C5UDataRC18UGroupResolverData = .text:0x80191E5C; // type:function size:0xA4 scope:global -Deserialize__6UGroupPCvbUi = .text:0x80191F00; // type:function size:0x44 scope:global -Deserialize__6UGroupUiPCUiPPCvUi = .text:0x80191F44; // type:function size:0x4C scope:global -GroupCountType__C6UGroupUi = .text:0x80191F90; // type:function size:0x8C scope:global -GroupLocateFirst__C6UGroupUiUiUi = .text:0x8019201C; // type:function size:0xBC scope:global -GroupLocateTag__C6UGroupUi = .text:0x801920D8; // type:function size:0xB8 scope:global -DataCountType__C6UGroupUi = .text:0x80192190; // type:function size:0xA0 scope:global -DataLocateFirst__C6UGroupUiUiUi = .text:0x80192230; // type:function size:0xCC scope:global -DataLocateTag__C6UGroupUi = .text:0x801922FC; // type:function size:0xD8 scope:global -ProcessBreadthFirst__C6UGroupRQ26UGroup9Processor = .text:0x801923D4; // type:function size:0x120 scope:global -ResolveOffsets__C6UGroupRC18UGroupResolverData = .text:0x801924F4; // type:function size:0x160 scope:global -GetArray__C6UGroup = .text:0x80192654; // type:function size:0x24 scope:global -Ceil__5UMathf = .text:0x80192678; // type:function size:0x60 scope:global -Mod__5UMathff = .text:0x801926D8; // type:function size:0x20 scope:global -IsNaN__5UMathf = .text:0x801926F8; // type:function size:0x30 scope:global -BuildRotate__FRQ25UMath7Matrix4ffff = .text:0x80192728; // type:function size:0x194 scope:global -OrthoInverse__FRQ25UMath7Matrix4 = .text:0x801928BC; // type:function size:0x94 scope:global -__7FastMem = .text:0x80192950; // type:function size:0x4 scope:global -Init__7FastMem = .text:0x80192954; // type:function size:0xB8 scope:global -Alloc__7FastMemUiPCc = .text:0x80192A0C; // type:function size:0xC0 scope:global -Free__7FastMemPvUiPCc = .text:0x80192ACC; // type:function size:0x40 scope:global -CoreAlloc__7FastMemUiPCc = .text:0x80192B0C; // type:function size:0x28 scope:global -CoreFree__7FastMemPv = .text:0x80192B34; // type:function size:0x24 scope:global -SplitOrExpand__7FastMemUi = .text:0x80192B58; // type:function size:0x84 scope:global -AssignToFree__7FastMemUi = .text:0x80192BDC; // type:function size:0xC4 scope:global -CreateBlock__7FastMemUi = .text:0x80192CA0; // type:function size:0x10C scope:global -DumpRecord__7FastMem = .text:0x80192DAC; // type:function size:0x4 scope:global -compare_entry_string__FPCvT0 = .text:0x80192DB0; // type:function size:0x28 scope:local -compare_entry_number__FPCvT0 = .text:0x80192DD8; // type:function size:0x10 scope:local -__14StringToNumberP19StringToNumberEntry = .text:0x80192DE8; // type:function size:0x128 scope:global -ConvertNumberToString__14StringToNumberi = .text:0x80192F10; // type:function size:0x98 scope:global -BinarySearch__14StringToNumberi = .text:0x80192FA8; // type:function size:0x68 scope:global -VU0_v3crossprod__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 = .text:0x80193010; // type:function size:0x3C scope:global -VU0_v4crossprodxyz__FRCQ25UMath7Vector4T0RQ25UMath7Vector4 = .text:0x8019304C; // type:function size:0x3C scope:global -VU0_v3dotprod__FRCQ25UMath7Vector3T0 = .text:0x80193088; // type:function size:0x20 scope:global -VU0_v4dotprod__FRCQ25UMath7Vector4T0 = .text:0x801930A8; // type:function size:0x20 scope:global -VU0_v4dotprodxyz__FRCQ25UMath7Vector4T0 = .text:0x801930C8; // type:function size:0x20 scope:global -VU0_v3add__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 = .text:0x801930E8; // type:function size:0x24 scope:global -VU0_v4add__FRCQ25UMath7Vector4T0RQ25UMath7Vector4 = .text:0x8019310C; // type:function size:0x24 scope:global -VU0_v4addxyz__FRCQ25UMath7Vector4T0RQ25UMath7Vector4 = .text:0x80193130; // type:function size:0x24 scope:global -VU0_v3sub__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 = .text:0x80193154; // type:function size:0x24 scope:global -VU0_v4sub__FRCQ25UMath7Vector4T0RQ25UMath7Vector4 = .text:0x80193178; // type:function size:0x24 scope:global -VU0_v4subxyz__FRCQ25UMath7Vector4T0RQ25UMath7Vector4 = .text:0x8019319C; // type:function size:0x24 scope:global -VU0_v3scale__FRCQ25UMath7Vector3fRQ25UMath7Vector3 = .text:0x801931C0; // type:function size:0x1C scope:global -VU0_v3scale__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 = .text:0x801931DC; // type:function size:0x24 scope:global -VU0_v4scale__FRCQ25UMath7Vector4fRQ25UMath7Vector4 = .text:0x80193200; // type:function size:0x1C scope:global -VU0_v4scalexyz__FRCQ25UMath7Vector4fRQ25UMath7Vector4 = .text:0x8019321C; // type:function size:0x1C scope:global -VU0_v4scalexyz__FRCQ25UMath7Vector4T0RQ25UMath7Vector4 = .text:0x80193238; // type:function size:0x24 scope:global -VU0_v3addscale__FRCQ25UMath7Vector3T0fRQ25UMath7Vector3 = .text:0x8019325C; // type:function size:0x2C scope:global -VU0_v4addscale__FRCQ25UMath7Vector4T0fRQ25UMath7Vector4 = .text:0x80193288; // type:function size:0x2C scope:global -VU0_v4addscalexyz__FRCQ25UMath7Vector4T0fRQ25UMath7Vector4 = .text:0x801932B4; // type:function size:0x2C scope:global -VU0_v3scaleadd__FRCQ25UMath7Vector3fT0RQ25UMath7Vector3 = .text:0x801932E0; // type:function size:0x2C scope:global -VU0_v4scaleaddxyz__FRCQ25UMath7Vector4fT0RQ25UMath7Vector4 = .text:0x8019330C; // type:function size:0x2C scope:global -VU0_v4scaleadd__FRCQ25UMath7Vector4fT0RQ25UMath7Vector4 = .text:0x80193338; // type:function size:0x2C scope:global -VU0_v3distancesquare__FRCQ25UMath7Vector3T0 = .text:0x80193364; // type:function size:0x28 scope:global -VU0_v4distancesquarexyz__FRCQ25UMath7Vector4T0 = .text:0x8019338C; // type:function size:0x28 scope:global -VU0_v3distancesquarexz__FRCQ25UMath7Vector3T0 = .text:0x801933B4; // type:function size:0x24 scope:global -VU0_v3lengthsquare__FRCQ25UMath7Vector3 = .text:0x801933D8; // type:function size:0x18 scope:global -VU0_v4lengthsquare__FRCQ25UMath7Vector4 = .text:0x801933F0; // type:function size:0x18 scope:global -VU0_v4lengthsquarexyz__FRCQ25UMath7Vector4 = .text:0x80193408; // type:function size:0x18 scope:global -VU0_sqrt__Ff = .text:0x80193420; // type:function size:0x38 scope:global -VU0_rsqrt__Ff = .text:0x80193458; // type:function size:0x40 scope:global -VU0_MATRIX4_vect3mult__FRCQ25UMath7Vector3RCQ25UMath7Matrix4RQ25UMath7Vector3 = .text:0x80193498; // type:function size:0x54 scope:global -VU0_MATRIX4_vect4mult__FRCQ25UMath7Vector4RCQ25UMath7Matrix4RQ25UMath7Vector4 = .text:0x801934EC; // type:function size:0x54 scope:global -VU0_MATRIX4_vect4mult__FPCQ25UMath7Vector4RCQ25UMath7Matrix4PQ25UMath7Vector4i = .text:0x80193540; // type:function size:0x64 scope:global -VU0_MATRIX3x4_vect3mult__FRCQ25UMath7Vector3RCQ25UMath7Matrix4RQ25UMath7Vector3 = .text:0x801935A4; // type:function size:0x44 scope:global -VU0_MATRIX3x4_vect4mult__FRCQ25UMath7Vector4RCQ25UMath7Matrix4RQ25UMath7Vector4 = .text:0x801935E8; // type:function size:0x44 scope:global -VU0_v3quatrotate__FRCQ25UMath7Vector4RCQ25UMath7Vector3RQ25UMath7Vector3 = .text:0x8019362C; // type:function size:0xA0 scope:global -VU0_v3quatrotate_xlate__FRCQ25UMath7Vector4RCQ25UMath7Vector3T1RQ25UMath7Vector3 = .text:0x801936CC; // type:function size:0xB4 scope:global -VU0_MATRIX4setyrot__FRQ25UMath7Matrix4f = .text:0x80193780; // type:function size:0x94 scope:global -VU0_m4toquat__FRCQ25UMath7Matrix4RQ25UMath7Vector4 = .text:0x80193814; // type:function size:0x24C scope:global -VU0_Matrix4ToEuler__FRCQ25UMath7Matrix4RQ25UMath7Vector3 = .text:0x80193A60; // type:function size:0x154 scope:global -VU0_Atan2__Fff = .text:0x80193BB4; // type:function size:0xC0 scope:global -GetFoundationVideoMode__Fv = .text:0x80193C74; // type:function size:0xC scope:global -__7USpline = .text:0x80193C80; // type:function size:0x100 scope:global -_._7USpline = .text:0x80193D80; // type:function size:0x84 scope:global -GetBasisMatrix__7USplineQ27USpline10SplineType = .text:0x80193E04; // type:function size:0x28 scope:global -Get2ndBasisMatrix__7USplineQ27USpline10SplineType = .text:0x80193E2C; // type:function size:0x28 scope:global -GetTangentBasisMatrix__7USplineQ27USpline10SplineType = .text:0x80193E54; // type:function size:0x28 scope:global -BuildSplineEx__7USplineRCQ25UMath7Vector3N31 = .text:0x80193E7C; // type:function size:0xEC scope:global -EvaluateSpline__7USplinefRQ25UMath7Vector4 = .text:0x80193F68; // type:function size:0x180 scope:global -EvaluateTangent__7USplinefRQ25UMath7Vector4 = .text:0x801940E8; // type:function size:0x44 scope:global -EvaluateDerivative__7USplinefRQ25UMath7Vector4 = .text:0x8019412C; // type:function size:0x160 scope:global -Evaluate2ndDerivative__7USplinefRQ25UMath7Vector4 = .text:0x8019428C; // type:function size:0x160 scope:global -EvaluateCurvatureXZ__7USplinef = .text:0x801943EC; // type:function size:0xD4 scope:global -__Q43UTL3COM6Object6_IListUi = .text:0x801944C0; // type:function size:0x40 scope:global -_._Q43UTL3COM6Object6_IList = .text:0x80194500; // type:function size:0x84 scope:global -Add__Q43UTL3COM6Object6_IListPvPQ33UTL3COM8IUnknown = .text:0x80194584; // type:function size:0x288 scope:global -Find__Q43UTL3COM6Object6_IListPv = .text:0x8019480C; // type:function size:0x78 scope:global -Remove__Q43UTL3COM6Object6_IListPQ33UTL3COM8IUnknown = .text:0x80194884; // type:function size:0xDC scope:global -Search__Q33UTL11Collections10_KeyedNodePQ33UTL11Collections10_KeyedNodeT1Ui = .text:0x80194960; // type:function size:0x64 scope:global -EventSeqEngineResolver__4CARPPC5UDataPC6UGroup = .text:0x801949C4; // type:function size:0x98 scope:local -EventSeqSystemResolver__4CARPPC5UDataPC6UGroup = .text:0x80194A5C; // type:function size:0x84 scope:local -EventSeqStateResolver__4CARPPC5UDataPC6UGroup = .text:0x80194AE0; // type:function size:0x98 scope:local -EventSeqActionResolver__4CARPPC5UDataPC6UGroup = .text:0x80194B78; // type:function size:0x9C scope:local -EventListResolver__4CARPPC5UDataPC6UGroup = .text:0x80194C14; // type:function size:0x8C scope:local -StimulusFilterResolver__4CARPPC5UDataPC6UGroup = .text:0x80194CA0; // type:function size:0x9C scope:local -CollisionInstanceResolver__4CARPPC5UDataPC6UGroup = .text:0x80194D3C; // type:function size:0x78 scope:local -AddUDataTagResolver__4CARPUiPFPC5UDataPC6UGroup_v = .text:0x80194DB4; // type:function size:0x1D4 scope:global -ResolveData__4CARPPC6UGroupPC5UData = .text:0x80194F88; // type:function size:0xAC scope:global -InitResolvers__4CARPv = .text:0x80195034; // type:function size:0xF0 scope:global -ResolveTagReferences__4CARPPC6UGroupUi = .text:0x80195124; // type:function size:0xDC scope:global -__Q24CARP12TagReferencePC6UGroup = .text:0x80195200; // type:function size:0x200 scope:global -hash32__FPCUcUiUi = .text:0x80195400; // type:function size:0x2E8 scope:local -stringhash32__FPCc = .text:0x801956E8; // type:function size:0x5C scope:global -sinf__FGQ24CARP11ExprValType = .text:0x80195744; // type:function size:0x40 scope:local -cosf__FGQ24CARP11ExprValType = .text:0x80195784; // type:function size:0x40 scope:local -tanf__FGQ24CARP11ExprValType = .text:0x801957C4; // type:function size:0x40 scope:local -asinf__FGQ24CARP11ExprValType = .text:0x80195804; // type:function size:0x40 scope:local -acosf__FGQ24CARP11ExprValType = .text:0x80195844; // type:function size:0x40 scope:local -atanf__FGQ24CARP11ExprValType = .text:0x80195884; // type:function size:0x40 scope:local -atan2f__FGQ24CARP11ExprValTypeT0 = .text:0x801958C4; // type:function size:0x44 scope:local -sinhf__FGQ24CARP11ExprValType = .text:0x80195908; // type:function size:0x40 scope:local -coshf__FGQ24CARP11ExprValType = .text:0x80195948; // type:function size:0x40 scope:local -tanhf__FGQ24CARP11ExprValType = .text:0x80195988; // type:function size:0x40 scope:local -expf__FGQ24CARP11ExprValType = .text:0x801959C8; // type:function size:0x40 scope:local -logf__FGQ24CARP11ExprValType = .text:0x80195A08; // type:function size:0x40 scope:local -log10f__FGQ24CARP11ExprValType = .text:0x80195A48; // type:function size:0x40 scope:local -fmodf__FGQ24CARP11ExprValTypeT0 = .text:0x80195A88; // type:function size:0x44 scope:local -powf__FGQ24CARP11ExprValTypeT0 = .text:0x80195ACC; // type:function size:0x44 scope:local -sqrtf__FGQ24CARP11ExprValType = .text:0x80195B10; // type:function size:0x40 scope:local -ceilf__FGQ24CARP11ExprValType = .text:0x80195B50; // type:function size:0x40 scope:local -fabsf__FGQ24CARP11ExprValType = .text:0x80195B90; // type:function size:0x2C scope:local -floorf__FGQ24CARP11ExprValType = .text:0x80195BBC; // type:function size:0x40 scope:local -roundf__FGQ24CARP11ExprValType = .text:0x80195BFC; // type:function size:0x78 scope:local -hypotf__FGQ24CARP11ExprValTypeT0 = .text:0x80195C74; // type:function size:0x5C scope:local -hypot3d__FGQ24CARP11ExprValTypeN20 = .text:0x80195CD0; // type:function size:0x6C scope:local -InitializeTables__Fv = .text:0x80195D3C; // type:function size:0x26B4 scope:local -ExpressionEvaluator__4CARPPCQ24CARP10ExpressionPFUiUiPCvPCQ24CARP11ExprValType_Q24CARP11ExprValTypePCvPCQ24CARP11ExprValType = .text:0x801983F0; // type:function size:0x6F4 scope:global -__14StringRegistry = .text:0x80198AE4; // type:function size:0x30 scope:global -__10StringPool = .text:0x80198B14; // type:function size:0x14 scope:global -clear__Q24_STLt10_List_base2ZQ25UMath7Vector4ZQ24_STLt9allocator1ZQ25UMath7Vector4 = .text:0x80198B28; // type:function size:0x7C scope:global -reserve__Q24_STLt6vector2ZQ43UTL3COM6Object6_IPairZQ33UTL3Stdt9Allocator2ZQ43UTL3COM6Object6_IPairZ16_type_UComObjectUi = .text:0x80198BA4; // type:function size:0x15C scope:global -__upper_bound__H4ZPQ43UTL3COM6Object6_IPairZQ43UTL3COM6Object6_IPairZQ24_STLt4less1ZQ43UTL3COM6Object6_IPairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80198D00; // type:function size:0x48 scope:global -__lower_bound__H4ZPQ43UTL3COM6Object6_IPairZQ43UTL3COM6Object6_IPairZQ24_STLt4less1ZQ43UTL3COM6Object6_IPairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80198D48; // type:function size:0x48 scope:global -find_if__H2ZPQ43UTL3COM6Object6_IPairZQ53UTL3COM6Object6_IPair7_Finder_4_STLX01X01X11_X01 = .text:0x80198D90; // type:function size:0xB8 scope:global -__lower_bound__H4ZPQ33UTL11Collections10_KeyedNodeZQ33UTL11Collections10_KeyedNodeZQ24_STLt4less1ZQ33UTL11Collections10_KeyedNodeZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80198E48; // type:function size:0x48 scope:global -__lower_bound__H4ZPQ24CARP15TagResolverNodeZQ24CARP15TagResolverNodeZQ24_STLt4less1ZQ24CARP15TagResolverNodeZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80198E90; // type:function size:0x48 scope:global -reserve__Q24_STLt6vector2ZQ24CARP15TagResolverNodeZQ24_STLt9allocator1ZQ24CARP15TagResolverNodeUi = .text:0x80198ED8; // type:function size:0x160 scope:global -__less__H1ZQ24CARP15TagResolverNode_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x80199038; // type:function size:0xC scope:global -__adjust_heap__H4ZPQ24CARP15TagResolverNodeZiZQ24CARP15TagResolverNodeZQ24_STLt4less1ZQ24CARP15TagResolverNode_4_STLX01X11X11X21X31_v = .text:0x80199044; // type:function size:0x11C scope:global -make_heap__H2ZPQ24CARP15TagResolverNodeZQ24_STLt4less1ZQ24CARP15TagResolverNode_4_STLX01X01X11_v = .text:0x80199160; // type:function size:0x94 scope:global -pop_heap__H2ZPQ24CARP15TagResolverNodeZQ24_STLt4less1ZQ24CARP15TagResolverNode_4_STLX01X01X11_v = .text:0x801991F4; // type:function size:0x78 scope:global -__partial_sort__H3ZPQ24CARP15TagResolverNodeZQ24CARP15TagResolverNodeZQ24_STLt4less1ZQ24CARP15TagResolverNode_4_STLX01X01X01PX11X21_v = .text:0x8019926C; // type:function size:0xD8 scope:global -partial_sort__H2ZPQ24CARP15TagResolverNodeZQ24_STLt4less1ZQ24CARP15TagResolverNode_4_STLX01X01X01X11_v = .text:0x80199344; // type:function size:0x30 scope:global -__unguarded_partition__H3ZPQ24CARP15TagResolverNodeZQ24CARP15TagResolverNodeZQ24_STLt4less1ZQ24CARP15TagResolverNode_4_STLX01X01X11X21_X01 = .text:0x80199374; // type:function size:0x7C scope:global -__introsort_loop__H4ZPQ24CARP15TagResolverNodeZQ24CARP15TagResolverNodeZiZQ24_STLt4less1ZQ24CARP15TagResolverNode_4_STLX01X01PX11X21X31_v = .text:0x801993F0; // type:function size:0x134 scope:global -__unguarded_linear_insert__H3ZPQ24CARP15TagResolverNodeZQ24CARP15TagResolverNodeZQ24_STLt4less1ZQ24CARP15TagResolverNode_4_STLX01X11X21_v = .text:0x80199524; // type:function size:0x38 scope:global -__insertion_sort__H2ZPQ24CARP15TagResolverNodeZQ24_STLt4less1ZQ24CARP15TagResolverNode_4_STLX01X01X11_v = .text:0x8019955C; // type:function size:0xD0 scope:global -__unguarded_insertion_sort_aux__H3ZPQ24CARP15TagResolverNodeZQ24CARP15TagResolverNodeZQ24_STLt4less1ZQ24CARP15TagResolverNode_4_STLX01X01PX11X21_v = .text:0x8019962C; // type:function size:0x68 scope:global -__final_insertion_sort__H2ZPQ24CARP15TagResolverNodeZQ24_STLt4less1ZQ24CARP15TagResolverNode_4_STLX01X01X11_v = .text:0x80199694; // type:function size:0x7C scope:global -sort__H1ZPQ24CARP15TagResolverNode_4_STLX01X01_v = .text:0x80199710; // type:function size:0xA0 scope:global -__less__H1Z8FuncDesc_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x801997B0; // type:function size:0xC scope:global -__adjust_heap__H4ZP8FuncDescZiZ8FuncDescZQ24_STLt4less1Z8FuncDesc_4_STLX01X11X11X21X31_v = .text:0x801997BC; // type:function size:0x120 scope:global -make_heap__H2ZP8FuncDescZQ24_STLt4less1Z8FuncDesc_4_STLX01X01X11_v = .text:0x801998DC; // type:function size:0x94 scope:global -pop_heap__H2ZP8FuncDescZQ24_STLt4less1Z8FuncDesc_4_STLX01X01X11_v = .text:0x80199970; // type:function size:0x80 scope:global -__partial_sort__H3ZP8FuncDescZ8FuncDescZQ24_STLt4less1Z8FuncDesc_4_STLX01X01X01PX11X21_v = .text:0x801999F0; // type:function size:0xD8 scope:global -partial_sort__H2ZP8FuncDescZQ24_STLt4less1Z8FuncDesc_4_STLX01X01X01X11_v = .text:0x80199AC8; // type:function size:0x30 scope:global -__unguarded_partition__H3ZP8FuncDescZ8FuncDescZQ24_STLt4less1Z8FuncDesc_4_STLX01X01X11X21_X01 = .text:0x80199AF8; // type:function size:0x7C scope:global -__introsort_loop__H4ZP8FuncDescZ8FuncDescZiZQ24_STLt4less1Z8FuncDesc_4_STLX01X01PX11X21X31_v = .text:0x80199B74; // type:function size:0x134 scope:global -__unguarded_linear_insert__H3ZP8FuncDescZ8FuncDescZQ24_STLt4less1Z8FuncDesc_4_STLX01X11X21_v = .text:0x80199CA8; // type:function size:0x38 scope:global -__insertion_sort__H2ZP8FuncDescZQ24_STLt4less1Z8FuncDesc_4_STLX01X01X11_v = .text:0x80199CE0; // type:function size:0xD0 scope:global -__unguarded_insertion_sort_aux__H3ZP8FuncDescZ8FuncDescZQ24_STLt4less1Z8FuncDesc_4_STLX01X01PX11X21_v = .text:0x80199DB0; // type:function size:0x68 scope:global -__final_insertion_sort__H2ZP8FuncDescZQ24_STLt4less1Z8FuncDesc_4_STLX01X01X11_v = .text:0x80199E18; // type:function size:0x7C scope:global -sort__H1ZP8FuncDesc_4_STLX01X01_v = .text:0x80199E94; // type:function size:0xA0 scope:global -__lower_bound__H4ZP8FuncDescZ8FuncDescZQ24_STLt4less1Z8FuncDescZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80199F34; // type:function size:0x48 scope:global -__static_initialization_and_destruction_0 = .text:0x80199F7C; // type:function size:0x184 scope:local -StartGroup__Q26UGroup9ProcessorPC6UGroup = .text:0x8019A100; // type:function size:0x8 scope:global -ProcessData__Q26UGroup9ProcessorPC6UGroupPC5UData = .text:0x8019A108; // type:function size:0x8 scope:global -EndGroup__Q26UGroup9ProcessorPC6UGroup = .text:0x8019A110; // type:function size:0x4 scope:global -StartGroup__Q24CARP12CarpResolverPC6UGroup = .text:0x8019A114; // type:function size:0xB0 scope:global -_GLOBAL_.I.Evaluate__11UBezierLiteRCQ25UMath7Matrix4fRQ25UMath7Vector4 = .text:0x8019A1C4; // type:function size:0x2C scope:local -__static_initialization_and_destruction_0 = .text:0x8019A1F0; // type:function size:0x50 scope:local -_GLOBAL_.I.aEmotionalSummaryTypeStrings = .text:0x8019A240; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x8019A26C; // type:label scope:local -__16GRuntimeInstanceRCUi15GameplayObjType = .text:0x8019A26C; // type:function size:0xBC scope:global -_._16GRuntimeInstance = .text:0x8019A328; // type:function size:0x98 scope:global -SetConnectionBuffer__16GRuntimeInstancePQ216GRuntimeInstance17ConnectedInstanceUi = .text:0x8019A3C0; // type:function size:0x10 scope:global -AllocateConnectionBuffer__16GRuntimeInstanceUi = .text:0x8019A3D0; // type:function size:0x48 scope:global -ConnectToInstance__16GRuntimeInstanceRCUiiP16GRuntimeInstance = .text:0x8019A418; // type:function size:0x54 scope:global -LockConnections__16GRuntimeInstance = .text:0x8019A46C; // type:function size:0x48 scope:global -GetConnectedInstance__C16GRuntimeInstanceRCUii = .text:0x8019A4B4; // type:function size:0x8C scope:global -ResetConnections__16GRuntimeInstance = .text:0x8019A540; // type:function size:0x18 scope:global -DisconnectInstances__16GRuntimeInstance = .text:0x8019A558; // type:function size:0x68 scope:global -MakePackedKey__C16GRuntimeInstanceUii = .text:0x8019A5C0; // type:function size:0x20 scope:global -AddToTypeList__16GRuntimeInstance15GameplayObjType = .text:0x8019A5E0; // type:function size:0x48 scope:global -RemoveFromTypeList__16GRuntimeInstance = .text:0x8019A628; // type:function size:0x68 scope:global -GetConnectionCount__C16GRuntimeInstance = .text:0x8019A690; // type:function size:0x8 scope:global -GetConnectionAt__C16GRuntimeInstanceUi = .text:0x8019A698; // type:function size:0x14 scope:global -IsDerivedFromTemplate__C16GRuntimeInstanceUi = .text:0x8019A6AC; // type:function size:0xA4 scope:global -GetPosition__16GRuntimeInstanceRQ25UMath7Vector3 = .text:0x8019A750; // type:function size:0x94 scope:global -GetDirection__16GRuntimeInstanceRQ25UMath7Vector3 = .text:0x8019A7E4; // type:function size:0x8C scope:global -__14GCollectionKeyP16GRuntimeInstance = .text:0x8019A870; // type:function size:0x3C scope:global -__opP16GRuntimeInstance__C14GCollectionKey = .text:0x8019A8AC; // type:function size:0x2C scope:global -__8GTriggerRCUi = .text:0x8019A8D8; // type:function size:0x9F0 scope:global -_._8GTrigger = .text:0x8019B2C8; // type:function size:0x108 scope:global -GetTargetActivity__8GTrigger = .text:0x8019B3D0; // type:function size:0x34 scope:global -AddActivationReference__8GTrigger = .text:0x8019B404; // type:function size:0x3C scope:global -RemoveActivationReference__8GTrigger = .text:0x8019B440; // type:function size:0x40 scope:global -CreateParticleEffect__8GTriggerPCcRQ25UMath7Vector3 = .text:0x8019B480; // type:function size:0xE4 scope:global -CreateAllParticleEffects__8GTrigger = .text:0x8019B564; // type:function size:0x184 scope:global -ClearParticleEffects__8GTrigger = .text:0x8019B6E8; // type:function size:0x74 scope:global -EnableParticleEffects__8GTriggerb = .text:0x8019B75C; // type:function size:0x74 scope:global -RefreshParticleEffects__8GTrigger = .text:0x8019B7D0; // type:function size:0x40 scope:global -NotifyEmitterGroupDelete__8GTriggerPvP12EmitterGroup = .text:0x8019B810; // type:function size:0x30 scope:global -Enable__8GTriggerb = .text:0x8019B840; // type:function size:0x104 scope:global -GetPosition__8GTriggerRQ25UMath7Vector3 = .text:0x8019B944; // type:function size:0x20 scope:global -NotifySimableTrigger__8GTriggerP8ISimablei = .text:0x8019B964; // type:function size:0x1C4 scope:global -Reset__8GTrigger = .text:0x8019BB28; // type:function size:0x50 scope:global -ShowIcon__8GTrigger = .text:0x8019BB78; // type:function size:0x48 scope:global -HideIcon__8GTrigger = .text:0x8019BBC0; // type:function size:0x48 scope:global -MarkAsInside__8GTriggerP8ISimable = .text:0x8019BC08; // type:function size:0x170 scope:global -MarkAsOutside__8GTriggerP8ISimable = .text:0x8019BD78; // type:function size:0x78 scope:global -IsInside__8GTriggerP8ISimable = .text:0x8019BDF0; // type:function size:0x54 scope:global -__7GMarkerRCUi = .text:0x8019BE44; // type:function size:0x210 scope:global -_._7GMarker = .text:0x8019C054; // type:function size:0x68 scope:global -__9GActivityRCUi = .text:0x8019C0BC; // type:function size:0x64 scope:global -_._9GActivity = .text:0x8019C120; // type:function size:0x148 scope:global -GatherStatesAndHandlers__9GActivity = .text:0x8019C268; // type:function size:0x280 scope:global -StoreHandlers__9GActivityP6GStatePQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVector = .text:0x8019C4E8; // type:function size:0x1D0 scope:global -CollectionIsStateForActivity__9GActivityP6GState = .text:0x8019C6B8; // type:function size:0xE0 scope:global -CollectionIsHandlerForState__9GActivityP6GStateP8GHandler = .text:0x8019C798; // type:function size:0x1AC scope:global -RegisterMessageHandlers__9GActivityP6GState = .text:0x8019C944; // type:function size:0xE8 scope:global -UnregisterMessageHandlers__9GActivity = .text:0x8019CA2C; // type:function size:0xD8 scope:global -ActivateReferencedTriggers__9GActivitybP16GRuntimeInstance = .text:0x8019CB04; // type:function size:0x10C scope:global -Run__9GActivity = .text:0x8019CC10; // type:function size:0xB8 scope:global -Suspend__9GActivity = .text:0x8019CCC8; // type:function size:0x88 scope:global -Reset__9GActivity = .text:0x8019CD50; // type:function size:0x64 scope:global -GetStateByName__9GActivityPCc = .text:0x8019CDB4; // type:function size:0xB4 scope:global -EnterState__9GActivityP6GState = .text:0x8019CE68; // type:function size:0xAC scope:global -ChangeStateFromScript__9GActivityP9lua_State = .text:0x8019CF14; // type:function size:0x84 scope:global -HandleLocalMessage__9GActivityG6UCrc32 = .text:0x8019CF98; // type:function size:0xFC scope:global -PushActivityVars__9GActivityP9lua_State = .text:0x8019D094; // type:function size:0xB0 scope:global -ClearActivityVars__9GActivityP9lua_State = .text:0x8019D144; // type:function size:0x58 scope:global -BuildActivityTables__9GActivityP9lua_State = .text:0x8019D19C; // type:function size:0xA4 scope:global -HandleMessage__9GActivityP22LuaMessageDeliveryInfo = .text:0x8019D240; // type:function size:0x160 scope:global -SerializeVars__9GActivityb = .text:0x8019D3A0; // type:function size:0x290 scope:global -DeserializeVars__9GActivity = .text:0x8019D630; // type:function size:0x21C scope:global -__11GRaceStatus = .text:0x8019D84C; // type:function size:0x2D0 scope:global -_._11GRaceStatus = .text:0x8019DB1C; // type:function size:0x244 scope:global -Init__11GRaceStatus = .text:0x8019DD60; // type:function size:0x40 scope:global -Shutdown__11GRaceStatus = .text:0x8019DDA0; // type:function size:0x5C scope:global -EnableBinBarriers__11GRaceStatus = .text:0x8019DDFC; // type:function size:0x2C scope:global -RefreshBinWhileInGame__11GRaceStatus = .text:0x8019DE28; // type:function size:0xC scope:global -EnterBin__11GRaceStatusUi = .text:0x8019DE34; // type:function size:0xC0 scope:global -CalculateRankings__11GRaceStatus = .text:0x8019DEF4; // type:function size:0x1A0 scope:global -SortCheckPointRankings__11GRaceStatus = .text:0x8019E094; // type:function size:0x108 scope:global -Update__11GRaceStatusf = .text:0x8019E19C; // type:function size:0x538 scope:global -CanUnspawnRoamer__C11GRaceStatusPC8IVehicle = .text:0x8019E6D4; // type:function size:0x184 scope:global -OnQueryVehicleCache__C11GRaceStatusPC8IVehiclePC13IVehicleCache = .text:0x8019E858; // type:function size:0x1AC scope:global -OnRemovedVehicleCache__11GRaceStatusP8IVehicle = .text:0x8019EA04; // type:function size:0x4 scope:global -SetRaceContext__11GRaceStatusQ25GRace7Context = .text:0x8019EA08; // type:function size:0x8 scope:global -GetRacerInfo__11GRaceStatusi = .text:0x8019EA10; // type:function size:0x10 scope:global -GetRacerInfo__11GRaceStatusP8ISimable = .text:0x8019EA20; // type:function size:0xA8 scope:global -GetWinningPlayerInfo__11GRaceStatus = .text:0x8019EAC8; // type:function size:0xE0 scope:global -GetRacerCount__C11GRaceStatus = .text:0x8019EBA8; // type:function size:0x8 scope:global -StartMasterTimer__11GRaceStatus = .text:0x8019EBB0; // type:function size:0x58 scope:global -StopMasterTimer__11GRaceStatus = .text:0x8019EC08; // type:function size:0x24 scope:global -GetRaceTimeElapsed__C11GRaceStatus = .text:0x8019EC2C; // type:function size:0x3C scope:global -GetRaceTimeRemaining__C11GRaceStatus = .text:0x8019EC68; // type:function size:0x8C scope:global -ClearRacers__11GRaceStatus = .text:0x8019ECF4; // type:function size:0xBC scope:global -AddSimablePlayer__11GRaceStatusP8ISimable = .text:0x8019EDB0; // type:function size:0x2C4 scope:global -AddRacer__11GRaceStatusP16GRuntimeInstance = .text:0x8019F074; // type:function size:0x230 scope:global -SetRaceActivity__11GRaceStatusP9GActivity = .text:0x8019F2A4; // type:function size:0x38 scope:global -EnableBarriers__11GRaceStatus = .text:0x8019F2DC; // type:function size:0x90 scope:global -DisableBarriers__11GRaceStatus = .text:0x8019F36C; // type:function size:0x3C scope:global -SetRoaming__11GRaceStatus = .text:0x8019F3A8; // type:function size:0x2F4 scope:global -SetRacing__11GRaceStatus = .text:0x8019F69C; // type:function size:0x1AC scope:global -NotifyScriptWhenLoaded__11GRaceStatus = .text:0x8019F848; // type:function size:0x100 scope:global -AddAvailableEventToMap__11GRaceStatusP16GRuntimeInstanceT1 = .text:0x8019F948; // type:function size:0x4 scope:global -AddSpeedTrapToMap__11GRaceStatusP16GRuntimeInstance = .text:0x8019F94C; // type:function size:0x4 scope:global -AwardBonusTime__11GRaceStatusf = .text:0x8019F950; // type:function size:0x94 scope:global -ClearCheckpoints__11GRaceStatus = .text:0x8019F9E4; // type:function size:0x50 scope:global -AddCheckpoint__11GRaceStatusP16GRuntimeInstance = .text:0x8019FA34; // type:function size:0x150 scope:global -SetNextCheckpointPos__11GRaceStatusP16GRuntimeInstance = .text:0x8019FB84; // type:function size:0x180 scope:global -DetermineRaceSegmentLength__11GRaceStatusPCQ25UMath7Vector4T1ii = .text:0x8019FD04; // type:function size:0x5DC scope:global -DetermineRaceLength__11GRaceStatus = .text:0x801A02E0; // type:function size:0x394 scope:global -NotNumeric__Fc = .text:0x801A0674; // type:function size:0x50 scope:global -SplitChars__FPcPPPcPFc_i = .text:0x801A06C4; // type:function size:0x150 scope:global -ParseFloat__FPc = .text:0x801A0814; // type:function size:0xCC scope:global -ParseArray__FPCcPfi = .text:0x801A08E0; // type:function size:0x1D8 scope:global -ParseCatchUpData__11GRaceStatusPCcT1 = .text:0x801A0AB8; // type:function size:0x54 scope:global -GetAdaptiveDifficutly__C11GRaceStatus = .text:0x801A0B0C; // type:function size:0x20 scope:global -SyncronizeAdaptiveBonus__11GRaceStatus = .text:0x801A0B2C; // type:function size:0x70 scope:global -UpdateAdaptiveDifficulty__11GRaceStatusQ211GRaceStatus19eAdaptiveGainReasonP8ISimable = .text:0x801A0B9C; // type:function size:0x900 scope:global -ComputeCatchUpSkill__11GRaceStatusP10GRacerInfoP8PidErrorPfT3b = .text:0x801A149C; // type:function size:0x338 scope:global -MakeDefaultCatchUpData__11GRaceStatus = .text:0x801A17D4; // type:function size:0x48 scope:global -MakeCatchUpData__11GRaceStatus = .text:0x801A181C; // type:function size:0x7C scope:global -ClearTimes__11GRaceStatus = .text:0x801A1898; // type:function size:0xA8 scope:global -SetLapTime__11GRaceStatusiif = .text:0x801A1940; // type:function size:0x18 scope:global -GetLapTime__11GRaceStatusiib = .text:0x801A1958; // type:function size:0x74 scope:global -SetCheckpointTime__11GRaceStatusiiif = .text:0x801A19CC; // type:function size:0x20 scope:global -GetLapPosition__11GRaceStatusiib = .text:0x801A19EC; // type:function size:0xB4 scope:global -GetBestLapTime__11GRaceStatusi = .text:0x801A1AA0; // type:function size:0xA8 scope:global -GetWorstLapTime__11GRaceStatusi = .text:0x801A1B48; // type:function size:0xA8 scope:global -GetRaceSpeedTrapSpeed__11GRaceStatusii = .text:0x801A1BF0; // type:function size:0x3C scope:global -GetRaceSpeedTrapPosition__11GRaceStatusii = .text:0x801A1C2C; // type:function size:0x3C scope:global -GetBestSpeedTrapSpeed__11GRaceStatusi = .text:0x801A1C68; // type:function size:0x9C scope:global -GetWorstSpeedTrapSpeed__11GRaceStatusi = .text:0x801A1D04; // type:function size:0x9C scope:global -GetRaceTollboothTime__11GRaceStatusii = .text:0x801A1DA0; // type:function size:0x3C scope:global -RaceAbandoned__11GRaceStatus = .text:0x801A1DDC; // type:function size:0xB8 scope:global -FinalizeRaceStats__11GRaceStatus = .text:0x801A1E94; // type:function size:0x78 scope:global -CreateVehicle__10GRacerInfoUi = .text:0x801A1F0C; // type:function size:0x384 scope:global -IsBehind__C10GRacerInfoRC10GRacerInfo = .text:0x801A2290; // type:function size:0x19C scope:global -CalcAverageSpeed__C10GRacerInfo = .text:0x801A242C; // type:function size:0x50 scope:global -SetSimable__10GRacerInfoP8ISimable = .text:0x801A247C; // type:function size:0x1C scope:global -KnockOut__10GRacerInfo = .text:0x801A2498; // type:function size:0x60 scope:global -TotalVehicle__10GRacerInfo = .text:0x801A24F8; // type:function size:0x60 scope:global -Busted__10GRacerInfo = .text:0x801A2558; // type:function size:0x60 scope:global -ChallengeComplete__10GRacerInfo = .text:0x801A25B8; // type:function size:0xC scope:global -ForceStop__10GRacerInfo = .text:0x801A25C4; // type:function size:0xA4 scope:global -BlowEngine__10GRacerInfo = .text:0x801A2668; // type:function size:0x60 scope:global -SetName__10GRacerInfoPCc = .text:0x801A26C8; // type:function size:0x8 scope:global -SetRanking__10GRacerInfoi = .text:0x801A26D0; // type:function size:0x8 scope:global -AddToPointTotal__10GRacerInfof = .text:0x801A26D8; // type:function size:0x30 scope:global -SetIndex__10GRacerInfoi = .text:0x801A2708; // type:function size:0x8 scope:global -Update__10GRacerInfof = .text:0x801A2710; // type:function size:0x44C scope:global -GetHudPctRaceComplete__C10GRacerInfo = .text:0x801A2B5C; // type:function size:0x6C scope:global -UpdateSplits__10GRacerInfo = .text:0x801A2BC8; // type:function size:0x10C scope:global -IsAudioLoading__11GRaceStatus = .text:0x801A2CD4; // type:function size:0xEC scope:global -IsModelsLoading__11GRaceStatus = .text:0x801A2DC0; // type:function size:0xEC scope:global -IsLoading__11GRaceStatus = .text:0x801A2EAC; // type:function size:0x64 scope:global -GetSegmentLength__11GRaceStatusii = .text:0x801A2F10; // type:function size:0x30 scope:global -SaveStartPosition__10GRacerInfo = .text:0x801A2F40; // type:function size:0x1B4 scope:global -RestoreStartPosition__10GRacerInfo = .text:0x801A30F4; // type:function size:0x118 scope:global -ForceStartPosition__10GRacerInfoRCQ25UMath7Vector3T1 = .text:0x801A320C; // type:function size:0x3C scope:global -StartRace__10GRacerInfo = .text:0x801A3248; // type:function size:0x6C scope:global -StartLap__10GRacerInfoi = .text:0x801A32B4; // type:function size:0x60 scope:global -StartCheckpoint__10GRacerInfoi = .text:0x801A3314; // type:function size:0x74 scope:global -NotifySpeedTrapTriggered__10GRacerInfof = .text:0x801A3388; // type:function size:0x34 scope:global -FinishRace__10GRacerInfo = .text:0x801A33BC; // type:function size:0xA8 scope:global -AreStatsReady__C10GRacerInfo = .text:0x801A3464; // type:function size:0x48 scope:global -ChooseRandomName__10GRacerInfo = .text:0x801A34AC; // type:function size:0xE0 scope:global -ChooseBossName__10GRacerInfo = .text:0x801A358C; // type:function size:0xB4 scope:global -ChooseRacerName__10GRacerInfo = .text:0x801A3640; // type:function size:0x78 scope:global -FinalizeRaceStats__10GRacerInfo = .text:0x801A36B8; // type:function size:0x344 scope:global -__13GRaceDatabase = .text:0x801A39FC; // type:function size:0xB4 scope:global -Init__13GRaceDatabase = .text:0x801A3AB0; // type:function size:0x38 scope:global -BuildBinList__13GRaceDatabase = .text:0x801A3AE8; // type:function size:0x54 scope:global -StoreBinList__13GRaceDatabaseP8GRaceBin = .text:0x801A3B3C; // type:function size:0xE8 scope:global -SerializeBins__13GRaceDatabasePUc = .text:0x801A3C24; // type:function size:0x9C scope:global -DeserializeBins__13GRaceDatabasePUc = .text:0x801A3CC0; // type:function size:0x7C scope:global -RefreshBinProgress__13GRaceDatabase = .text:0x801A3D3C; // type:function size:0x50 scope:global -BuildRaceList__13GRaceDatabase = .text:0x801A3D8C; // type:function size:0x98 scope:global -StoreRaceList__13GRaceDatabaseP15GRaceParameters = .text:0x801A3E24; // type:function size:0x100 scope:global -CollectionIsRaceActivity__13GRaceDatabaseRQ36Attrib3Gen8gameplay = .text:0x801A3F24; // type:function size:0x158 scope:global -CollectionIsRaceBin__13GRaceDatabaseRQ36Attrib3Gen8gameplay = .text:0x801A407C; // type:function size:0x104 scope:global -NotifyVaultUnloading__13GRaceDatabaseP6GVault = .text:0x801A4180; // type:function size:0x8C scope:global -NotifyVaultLoaded__13GRaceDatabaseP6GVault = .text:0x801A420C; // type:function size:0x6C scope:global -GetRaceCount__13GRaceDatabase = .text:0x801A4278; // type:function size:0x10 scope:global -GetRaceParameters__13GRaceDatabaseUi = .text:0x801A4288; // type:function size:0x30 scope:global -GetRaceFromActivity__13GRaceDatabaseP9GActivity = .text:0x801A42B8; // type:function size:0x3C scope:global -GetRaceFromHash__13GRaceDatabaseUi = .text:0x801A42F4; // type:function size:0x70 scope:global -GetRaceFromKey__13GRaceDatabaseUi = .text:0x801A4364; // type:function size:0x70 scope:global -GetBinCount__13GRaceDatabase = .text:0x801A43D4; // type:function size:0x8 scope:global -GetBin__13GRaceDatabaseUi = .text:0x801A43DC; // type:function size:0x10 scope:global -GetBinNumber__13GRaceDatabasei = .text:0x801A43EC; // type:function size:0x70 scope:global -AllocCustomRace__13GRaceDatabaseP15GRaceParameters = .text:0x801A445C; // type:function size:0x74 scope:global -FreeCustomRace__13GRaceDatabaseP11GRaceCustom = .text:0x801A44D0; // type:function size:0x40 scope:global -DestroyCustomRace__13GRaceDatabaseP11GRaceCustom = .text:0x801A4510; // type:function size:0xAC scope:global -ClearStartupRace__13GRaceDatabase = .text:0x801A45BC; // type:function size:0x50 scope:global -SetStartupRace__13GRaceDatabaseP11GRaceCustomQ25GRace7Context = .text:0x801A460C; // type:function size:0x60 scope:global -GetStartupRace__13GRaceDatabase = .text:0x801A466C; // type:function size:0x8 scope:global -GetStartupRaceContext__13GRaceDatabase = .text:0x801A4674; // type:function size:0x8 scope:global -BuildScoreList__13GRaceDatabase = .text:0x801A467C; // type:function size:0x44 scope:global -UpdateRaceScore__13GRaceDatabaseb = .text:0x801A46C0; // type:function size:0x368 scope:global -ClearRaceScores__13GRaceDatabase = .text:0x801A4A28; // type:function size:0x124 scope:global -GetScoreInfo__13GRaceDatabaseUi = .text:0x801A4B4C; // type:function size:0x40 scope:global -CheckRaceScoreFlags__13GRaceDatabaseUiQ213GRaceDatabase10ScoreFlags = .text:0x801A4B8C; // type:function size:0x50 scope:global -ResetCareerCompleteFlag__13GRaceDatabaseUi = .text:0x801A4BDC; // type:function size:0x2C scope:global -LoadBestScores__13GRaceDatabaseP13GRaceSaveInfoUi = .text:0x801A4C08; // type:function size:0xA8 scope:global -GetNextDDayRace__13GRaceDatabase = .text:0x801A4CB0; // type:function size:0x84 scope:global -GetCollectionKey__C15GRaceParameters = .text:0x801A4D34; // type:function size:0x4C scope:global -GetRaceLengthMeters__C15GRaceParameters = .text:0x801A4D80; // type:function size:0x6C scope:global -GetReputation__C15GRaceParameters = .text:0x801A4DEC; // type:function size:0x150 scope:global -GetCashValue__C15GRaceParameters = .text:0x801A4F3C; // type:function size:0x144 scope:global -GetLocalizationTag__C15GRaceParameters = .text:0x801A5080; // type:function size:0x6C scope:global -GetNumLaps__C15GRaceParameters = .text:0x801A50EC; // type:function size:0x6C scope:global -GetEventID__C15GRaceParameters = .text:0x801A5158; // type:function size:0x68 scope:global -GetRivalBestTime__C15GRaceParameters = .text:0x801A51C0; // type:function size:0xB8 scope:global -GetChallengeGoal__C15GRaceParameters = .text:0x801A5278; // type:function size:0x144 scope:global -GetInitiallyUnlockedQuickRace__C15GRaceParameters = .text:0x801A53BC; // type:function size:0x70 scope:global -GetInitiallyUnlockedOnline__C15GRaceParameters = .text:0x801A542C; // type:function size:0x70 scope:global -GetInitiallyUnlockedChallenge__C15GRaceParameters = .text:0x801A549C; // type:function size:0x70 scope:global -GetIsDDayRace__C15GRaceParameters = .text:0x801A550C; // type:function size:0x70 scope:global -GetIsBossRace__C15GRaceParameters = .text:0x801A557C; // type:function size:0x70 scope:global -GetIsMarkerRace__C15GRaceParameters = .text:0x801A55EC; // type:function size:0x70 scope:global -GetIsPursuitRace__C15GRaceParameters = .text:0x801A565C; // type:function size:0x70 scope:global -GetIsLoopingRace__C15GRaceParameters = .text:0x801A56CC; // type:function size:0x70 scope:global -GetRankPlayersByPoints__C15GRaceParameters = .text:0x801A573C; // type:function size:0x70 scope:global -GetRankPlayersByDistance__C15GRaceParameters = .text:0x801A57AC; // type:function size:0x70 scope:global -GetCopsEnabled__C15GRaceParameters = .text:0x801A581C; // type:function size:0x70 scope:global -GetScriptedCopsInRace__C15GRaceParameters = .text:0x801A588C; // type:function size:0x70 scope:global -GetNeverInQuickRace__C15GRaceParameters = .text:0x801A58FC; // type:function size:0x70 scope:global -GetIsChallengeSeriesRace__C15GRaceParameters = .text:0x801A596C; // type:function size:0x70 scope:global -GetIsCollectorsEditionRace__C15GRaceParameters = .text:0x801A59DC; // type:function size:0x70 scope:global -GetTimeLimit__C15GRaceParameters = .text:0x801A5A4C; // type:function size:0x54 scope:global -GetMaxHeatLevel__C15GRaceParameters = .text:0x801A5AA0; // type:function size:0x54 scope:global -GetNoPostRaceScreen__C15GRaceParameters = .text:0x801A5AF4; // type:function size:0x54 scope:global -GetUseWorldHeatInRace__C15GRaceParameters = .text:0x801A5B48; // type:function size:0x54 scope:global -GetForceHeatLevel__C15GRaceParameters = .text:0x801A5B9C; // type:function size:0x78 scope:global -GetMaxRaceHeatLevel__C15GRaceParameters = .text:0x801A5C14; // type:function size:0x54 scope:global -GetInitialPlayerSpeed__C15GRaceParameters = .text:0x801A5C68; // type:function size:0x54 scope:global -GetIsRollingStart__C15GRaceParameters = .text:0x801A5CBC; // type:function size:0x54 scope:global -GetIsEpicPursuitRace__C15GRaceParameters = .text:0x801A5D10; // type:function size:0x54 scope:global -GetPlayerCarType__C15GRaceParameters = .text:0x801A5D64; // type:function size:0x54 scope:global -GetPlayerCarPerformance__C15GRaceParameters = .text:0x801A5DB8; // type:function size:0x54 scope:global -GetKnockoutsPerLap__C15GRaceParameters = .text:0x801A5E0C; // type:function size:0x54 scope:global -GetCatchUp__C15GRaceParameters = .text:0x801A5E60; // type:function size:0x54 scope:global -GetCatchUpOverride__C15GRaceParameters = .text:0x801A5EB4; // type:function size:0x54 scope:global -GetCatchUpSkill__C15GRaceParameters = .text:0x801A5F08; // type:function size:0x54 scope:global -GetCatchUpSpread__C15GRaceParameters = .text:0x801A5F5C; // type:function size:0x54 scope:global -GetCatchUpIntegral__C15GRaceParameters = .text:0x801A5FB0; // type:function size:0x54 scope:global -GetCatchUpDerivative__C15GRaceParameters = .text:0x801A6004; // type:function size:0x54 scope:global -GetNumCheckpoints__C15GRaceParameters = .text:0x801A6058; // type:function size:0x5C scope:global -GetCheckpointsVisible__C15GRaceParameters = .text:0x801A60B4; // type:function size:0x54 scope:global -GetNumShortcuts__C15GRaceParameters = .text:0x801A6108; // type:function size:0x5C scope:global -GetNumBarrierExemptions__C15GRaceParameters = .text:0x801A6164; // type:function size:0x5C scope:global -GetBarrierCount__C15GRaceParameters = .text:0x801A61C0; // type:function size:0x5C scope:global -GetTrafficPattern__C15GRaceParameters = .text:0x801A621C; // type:function size:0x54 scope:global -GetPhotoFinishCamera__C15GRaceParameters = .text:0x801A6270; // type:function size:0x54 scope:global -GetPhotoFinishTexture__C15GRaceParameters = .text:0x801A62C4; // type:function size:0x54 scope:global -GetTimeOfDay__C15GRaceParameters = .text:0x801A6318; // type:function size:0x54 scope:global -GetStartTime__C15GRaceParameters = .text:0x801A636C; // type:function size:0x54 scope:global -GetStartPercent__C15GRaceParameters = .text:0x801A63C0; // type:function size:0x54 scope:global -BlockUntilLoaded__15GRaceParameters = .text:0x801A6414; // type:function size:0x68 scope:global -GetIsLoaded__C15GRaceParameters = .text:0x801A647C; // type:function size:0x64 scope:global -__15GRaceParametersUiP14GRaceIndexData = .text:0x801A64E0; // type:function size:0x168 scope:global -_._15GRaceParameters = .text:0x801A6648; // type:function size:0xA8 scope:global -GenerateIndex__15GRaceParametersP14GRaceIndexData = .text:0x801A66F0; // type:function size:0x690 scope:global -NotifyParentVaultUnloading__15GRaceParameters = .text:0x801A6D80; // type:function size:0x80 scope:global -NotifyParentVaultLoaded__15GRaceParameters = .text:0x801A6E00; // type:function size:0xB0 scope:global -GetGameplayObj__C15GRaceParameters = .text:0x801A6EB0; // type:function size:0x8 scope:global -GetActivity__C15GRaceParameters = .text:0x801A6EB8; // type:function size:0x24 scope:global -GetChildVault__C15GRaceParameters = .text:0x801A6EDC; // type:function size:0x8 scope:global -GetParentVault__C15GRaceParameters = .text:0x801A6EE4; // type:function size:0x8 scope:global -GetBoundingBox__C15GRaceParametersRQ25UMath7Vector2T1 = .text:0x801A6EEC; // type:function size:0x370 scope:global -GetChallengeType__C15GRaceParameters = .text:0x801A725C; // type:function size:0xC4 scope:global -GetRaceType__C15GRaceParameters = .text:0x801A7320; // type:function size:0xE8 scope:global -GetRegion__C15GRaceParameters = .text:0x801A7408; // type:function size:0xE4 scope:global -ExtractPosition__C15GRaceParametersRQ36Attrib3Gen8gameplayRQ25UMath7Vector3 = .text:0x801A74EC; // type:function size:0x98 scope:global -ExtractDirection__C15GRaceParametersRQ36Attrib3Gen8gameplayRQ25UMath7Vector3f = .text:0x801A7584; // type:function size:0x18C scope:global -GetEventHash__C15GRaceParameters = .text:0x801A7710; // type:function size:0xA8 scope:global -GetIsAvailable__C15GRaceParametersQ25GRace7Context = .text:0x801A77B8; // type:function size:0x10C scope:global -GetIsSunsetRace__C15GRaceParameters = .text:0x801A78C4; // type:function size:0xA0 scope:global -GetIsMiddayRace__C15GRaceParameters = .text:0x801A7964; // type:function size:0xBC scope:global -SetupTimeOfDay__15GRaceParameters = .text:0x801A7A20; // type:function size:0x60 scope:global -GetTrafficDensity__C15GRaceParameters = .text:0x801A7A80; // type:function size:0x90 scope:global -GetDifficulty__C15GRaceParameters = .text:0x801A7B10; // type:function size:0xB0 scope:global -GetCopDensity__C15GRaceParameters = .text:0x801A7BC0; // type:function size:0xE8 scope:global -GetCanBeReversed__C15GRaceParameters = .text:0x801A7CA8; // type:function size:0x84 scope:global -GetOpponentChar__C15GRaceParametersUi = .text:0x801A7D2C; // type:function size:0xCC scope:global -GetNumOpponents__C15GRaceParameters = .text:0x801A7DF8; // type:function size:0x98 scope:global -GetStartPosition__C15GRaceParametersRQ25UMath7Vector3 = .text:0x801A7E90; // type:function size:0x134 scope:global -GetStartDirection__C15GRaceParametersRQ25UMath7Vector3 = .text:0x801A7FC4; // type:function size:0x13C scope:global -HasFinishLine__C15GRaceParameters = .text:0x801A8100; // type:function size:0xA0 scope:global -GetFinishPosition__C15GRaceParametersRQ25UMath7Vector3 = .text:0x801A81A0; // type:function size:0x134 scope:global -GetFinishDirection__C15GRaceParametersRQ25UMath7Vector3 = .text:0x801A82D4; // type:function size:0x13C scope:global -GetCheckpointPosition__C15GRaceParametersUiRQ25UMath7Vector3 = .text:0x801A8410; // type:function size:0x138 scope:global -GetCheckpointDirection__C15GRaceParametersUiRQ25UMath7Vector3 = .text:0x801A8548; // type:function size:0x140 scope:global -GetShortcut__C15GRaceParametersUi = .text:0x801A8688; // type:function size:0x98 scope:global -GetBarrierExemption__C15GRaceParametersUi = .text:0x801A8720; // type:function size:0x98 scope:global -GetBarrierName__C15GRaceParametersUi = .text:0x801A87B8; // type:function size:0xAC scope:global -GetBarrierIsFlipped__C15GRaceParametersUi = .text:0x801A8864; // type:function size:0xB4 scope:global -__11GRaceCustomRC15GRaceParameters = .text:0x801A8918; // type:function size:0x10C scope:global -_._11GRaceCustom = .text:0x801A8A24; // type:function size:0x9C scope:global -CreateRaceActivity__11GRaceCustom = .text:0x801A8AC0; // type:function size:0x670 scope:global -GetRaceActivity__C11GRaceCustom = .text:0x801A9130; // type:function size:0x8 scope:global -GetCheckpointPosition__C11GRaceCustomUiRQ25UMath7Vector3 = .text:0x801A9138; // type:function size:0x58 scope:global -GetCheckpointDirection__C11GRaceCustomUiRQ25UMath7Vector3 = .text:0x801A9190; // type:function size:0x130 scope:global -SetReversed__11GRaceCustomb = .text:0x801A92C0; // type:function size:0x8 scope:global -SetNumLaps__11GRaceCustomi = .text:0x801A92C8; // type:function size:0x34 scope:global -SetTrafficDensity__11GRaceCustomi = .text:0x801A92FC; // type:function size:0x54 scope:global -SetNumOpponents__11GRaceCustomi = .text:0x801A9350; // type:function size:0x8 scope:global -SetDifficulty__11GRaceCustomQ25GRace10Difficulty = .text:0x801A9358; // type:function size:0x74 scope:global -SetCatchUp__11GRaceCustomb = .text:0x801A93CC; // type:function size:0x34 scope:global -SetCopsEnabled__11GRaceCustomb = .text:0x801A9400; // type:function size:0x34 scope:global -SetForceHeatLevel__11GRaceCustomi = .text:0x801A9434; // type:function size:0x34 scope:global -__8GRaceBinUi = .text:0x801A9468; // type:function size:0xC8 scope:global -GetCollectionKey__C8GRaceBin = .text:0x801A9530; // type:function size:0x20 scope:global -GetChildVault__C8GRaceBin = .text:0x801A9550; // type:function size:0x8 scope:global -GetBinNumber__C8GRaceBin = .text:0x801A9558; // type:function size:0x40 scope:global -GetBaseOpenWorldHeat__C8GRaceBin = .text:0x801A9598; // type:function size:0x40 scope:global -GetMaxOpenWorldHeat__C8GRaceBin = .text:0x801A95D8; // type:function size:0x40 scope:global -GetScaleOpenWorldHeat__C8GRaceBin = .text:0x801A9618; // type:function size:0x40 scope:global -GetBossRaceCount__C8GRaceBin = .text:0x801A9658; // type:function size:0x54 scope:global -GetBossRaceHash__C8GRaceBinUi = .text:0x801A96AC; // type:function size:0x60 scope:global -GetWorldRaceCount__C8GRaceBin = .text:0x801A970C; // type:function size:0x54 scope:global -GetWorldRaceHash__C8GRaceBinUi = .text:0x801A9760; // type:function size:0x60 scope:global -GetBaselineUnlockCount__C8GRaceBin = .text:0x801A97C0; // type:function size:0x54 scope:global -GetBaselineUnlock__C8GRaceBinUi = .text:0x801A9814; // type:function size:0x40 scope:global -GetBarrierCount__C8GRaceBin = .text:0x801A9854; // type:function size:0x54 scope:global -GetBarrierName__C8GRaceBinUi = .text:0x801A98A8; // type:function size:0x58 scope:global -GetBarrierIsFlipped__C8GRaceBinUi = .text:0x801A9900; // type:function size:0x60 scope:global -EnableBarriers__8GRaceBin = .text:0x801A9960; // type:function size:0x84 scope:global -DisableBarriers__8GRaceBin = .text:0x801A99E4; // type:function size:0x3C scope:global -GetRequiredBounty__C8GRaceBin = .text:0x801A9A20; // type:function size:0x40 scope:global -GetRequiredChallenges__C8GRaceBin = .text:0x801A9A60; // type:function size:0x40 scope:global -GetRequiredRaceWins__C8GRaceBin = .text:0x801A9AA0; // type:function size:0x40 scope:global -GetCompletedChallenges__C8GRaceBin = .text:0x801A9AE0; // type:function size:0x8 scope:global -GetAwardedRaceWins__C8GRaceBin = .text:0x801A9AE8; // type:function size:0x8 scope:global -Serialize__8GRaceBinPUc = .text:0x801A9AF0; // type:function size:0x34 scope:global -Deserialize__8GRaceBinPUc = .text:0x801A9B24; // type:function size:0x2C scope:global -SetCompletedChallenges__8GRaceBini = .text:0x801A9B50; // type:function size:0x8 scope:global -SetRacesWon__8GRaceBini = .text:0x801A9B58; // type:function size:0x8 scope:global -RefreshProgress__8GRaceBin = .text:0x801A9B60; // type:function size:0x15C scope:global -SimulateDDayComplete__13GRaceDatabase = .text:0x801A9CBC; // type:function size:0x4 scope:global -__10GCharacterRCUi = .text:0x801A9CC0; // type:function size:0x158 scope:global -_._10GCharacter = .text:0x801A9E18; // type:function size:0xC8 scope:global -OnAttached__10GCharacterP11IAttachable = .text:0x801A9EE0; // type:function size:0x54 scope:global -OnDetached__10GCharacterP11IAttachable = .text:0x801A9F34; // type:function size:0x118 scope:global -Spawn__10GCharacterRCQ25UMath7Vector3T1P7GMarkerf = .text:0x801AA04C; // type:function size:0xF8 scope:global -SpawnPending__C10GCharacter = .text:0x801AA144; // type:function size:0x18 scope:global -IsSpawned__C10GCharacter = .text:0x801AA15C; // type:function size:0x18 scope:global -ReleaseVehicle__10GCharacter = .text:0x801AA174; // type:function size:0x9C scope:global -Unspawn__10GCharacter = .text:0x801AA210; // type:function size:0x7C scope:global -UnspawnWhenOffscreen__10GCharacter = .text:0x801AA28C; // type:function size:0x98 scope:global -IsNoLongerUseful__C10GCharacter = .text:0x801AA324; // type:function size:0x270 scope:global -AttemptSpawn__10GCharacter = .text:0x801AA594; // type:function size:0x4C0 scope:global -GetSpawnedVehicle__C10GCharacter = .text:0x801AAA54; // type:function size:0x8 scope:global -GetName__C10GCharacter = .text:0x801AAA5C; // type:function size:0x70 scope:global -__6GStateRCUi = .text:0x801AAACC; // type:function size:0x40 scope:global -_._6GState = .text:0x801AAB0C; // type:function size:0x68 scope:global -__8GHandlerRCUi = .text:0x801AAB74; // type:function size:0x48 scope:global -_._8GHandler = .text:0x801AABBC; // type:function size:0x7C scope:global -Attach__8GHandlerP9lua_State = .text:0x801AAC38; // type:function size:0x138 scope:global -Detach__8GHandlerP9lua_State = .text:0x801AAD70; // type:function size:0x64 scope:global -NotifyBytecodeFlushed__8GHandler = .text:0x801AADD4; // type:function size:0xC scope:global -MessagePassesFilters__8GHandlerP22LuaMessageDeliveryInfo = .text:0x801AADE0; // type:function size:0x1C4 scope:global -HandleMessage__8GHandlerP22LuaMessageDeliveryInfo = .text:0x801AAFA4; // type:function size:0x20 scope:global -ExecuteScriptedHandler__8GHandlerP22LuaMessageDeliveryInfo = .text:0x801AAFC4; // type:function size:0xA4 scope:global -Init__8GManagerPCc = .text:0x801AB068; // type:function size:0x44 scope:global -__8GManagerPCc = .text:0x801AB0AC; // type:function size:0x3A8 scope:global -_._8GManager = .text:0x801AB454; // type:function size:0x414 scope:global -InitializeVaults__8GManager = .text:0x801AB868; // type:function size:0x17C scope:global -InitializeRaceStreaming__8GManager = .text:0x801AB9E4; // type:function size:0x84 scope:global -BuildVaultTable__8GManagerP20AttribVaultPackImage = .text:0x801ABA68; // type:function size:0xB0 scope:global -FindVault__8GManagerPCc = .text:0x801ABB18; // type:function size:0x90 scope:global -FindVaultContaining__8GManagerUi = .text:0x801ABBA8; // type:function size:0xE4 scope:global -LoadVaultSync__8GManagerP6GVault = .text:0x801ABC8C; // type:function size:0x148 scope:global -GetAvailableBinSlot__8GManager = .text:0x801ABDD4; // type:function size:0x44 scope:global -GetAvailableRaceSlot__8GManager = .text:0x801ABE18; // type:function size:0x44 scope:global -LoadCoreVault__8GManagerP20AttribVaultPackImage = .text:0x801ABE5C; // type:function size:0x3C scope:global -PreloadTransientVaults__8GManagerP20AttribVaultPackImage = .text:0x801ABE98; // type:function size:0xC8 scope:global -FindKeyReductionShifts__8GManager = .text:0x801ABF60; // type:function size:0x1BC scope:global -FindUniqueKeyShift__8GManagerPUiUiUi = .text:0x801AC11C; // type:function size:0xF4 scope:global -AllocateIcons__8GManager = .text:0x801AC210; // type:function size:0x40 scope:global -ReleaseIcons__8GManager = .text:0x801AC250; // type:function size:0x48 scope:global -AllocateObjectStateStorage__8GManager = .text:0x801AC298; // type:function size:0x48 scope:global -ReleaseObjectStateStorage__8GManager = .text:0x801AC2E0; // type:function size:0xBC scope:global -DefragObjectStateStorage__8GManager = .text:0x801AC39C; // type:function size:0x2D0 scope:global -AllocObjectStateBlock__8GManagerUiUib = .text:0x801AC66C; // type:function size:0x220 scope:global -GetObjectStateBlock__8GManagerUi = .text:0x801AC88C; // type:function size:0xC8 scope:global -ClearObjectStateBlock__8GManagerUi = .text:0x801AC954; // type:function size:0x124 scope:global -ClearAllSessionData__8GManager = .text:0x801ACA78; // type:function size:0x6C scope:global -SaveGameplayData__8GManagerPUcUi = .text:0x801ACAE4; // type:function size:0x2BC scope:global -LoadGameplayData__8GManagerPUcUi = .text:0x801ACDA0; // type:function size:0x35C scope:global -ResetAllGameplayData__8GManager = .text:0x801AD0FC; // type:function size:0xF4 scope:global -AllocateStreamingBuffers__8GManager = .text:0x801AD1F0; // type:function size:0x1D4 scope:global -AllocateInstanceMap__8GManager = .text:0x801AD3C4; // type:function size:0x118 scope:global -ReleaseInstanceMap__8GManager = .text:0x801AD4DC; // type:function size:0x4C scope:global -UnloadCoreVault__8GManager = .text:0x801AD528; // type:function size:0x2C scope:global -UnloadTransientVaults__8GManager = .text:0x801AD554; // type:function size:0x88 scope:global -ReleaseStreamingBuffers__8GManager = .text:0x801AD5DC; // type:function size:0x70 scope:global -DestroyVaults__8GManager = .text:0x801AD64C; // type:function size:0x94 scope:global -BeginGameplay__8GManager = .text:0x801AD6E0; // type:function size:0x14C scope:global -EndGameplay__8GManager = .text:0x801AD82C; // type:function size:0xC8 scope:global -PreBeginGameplay__8GManager = .text:0x801AD8F4; // type:function size:0x74 scope:global -GetInGameplay__C8GManager = .text:0x801AD968; // type:function size:0x8 scope:global -Update__8GManagerf = .text:0x801AD970; // type:function size:0x7C scope:global -GetPlayerPursuitInterfaces__8GManagerRP8IPursuitRP12IPerpetrator = .text:0x801AD9EC; // type:function size:0xD8 scope:global -UpdatePursuit__8GManager = .text:0x801ADAC4; // type:function size:0x2D4 scope:global -UpdateTriggerAvailability__8GManager = .text:0x801ADD98; // type:function size:0xD4 scope:global -UpdateIconVisibility__8GManager = .text:0x801ADE6C; // type:function size:0x210 scope:global -NotifyWorldService__8GManager = .text:0x801AE07C; // type:function size:0x214 scope:global -NotifyCollisionPackLoaded__8GManagerib = .text:0x801AE290; // type:function size:0x5C scope:global -AttachCharacter__8GManagerP10GCharacter = .text:0x801AE2EC; // type:function size:0x170 scope:global -DetachCharacter__8GManagerP10GCharacter = .text:0x801AE45C; // type:function size:0x78 scope:global -UnspawnAllCharacters__8GManager = .text:0x801AE4D4; // type:function size:0x74 scope:global -TrackValue__8GManagerPCcf = .text:0x801AE548; // type:function size:0x1BC scope:global -IncValue__8GManagerPCc = .text:0x801AE704; // type:function size:0xD8 scope:global -GetValue__8GManagerPCc = .text:0x801AE7DC; // type:function size:0x94 scope:global -GetValue__8GManagerUi = .text:0x801AE870; // type:function size:0x70 scope:global -GetBestValue__8GManagerUi = .text:0x801AE8E0; // type:function size:0x70 scope:global -GetIsBiggerValueBetter__8GManagerUi = .text:0x801AE950; // type:function size:0x74 scope:global -OnQueryVehicleCache__C8GManagerPC8IVehiclePC13IVehicleCache = .text:0x801AE9C4; // type:function size:0x26C scope:global -OnRemovedVehicleCache__8GManagerP8IVehicle = .text:0x801AEC30; // type:function size:0x118 scope:global -RegisterInstance__8GManagerP16GRuntimeInstance = .text:0x801AED48; // type:function size:0xCC scope:global -UnregisterInstance__8GManagerP16GRuntimeInstance = .text:0x801AEE14; // type:function size:0x94 scope:global -FindInstance__C8GManagerUi = .text:0x801AEEA8; // type:function size:0x64 scope:global -ConnectRuntimeInstances__8GManager = .text:0x801AEF0C; // type:function size:0x10C scope:global -ConnectInstanceReferences__8GManagerP16GRuntimeInstanceRCQ36Attrib3Gen8gameplay = .text:0x801AF018; // type:function size:0x178 scope:global -ConnectChildren__8GManagerP16GRuntimeInstance = .text:0x801AF190; // type:function size:0xCC scope:global -GetStrippedNameKey__8GManagerPCc = .text:0x801AF25C; // type:function size:0x64 scope:global -ResetMilestoneTrackingInfo__8GManager = .text:0x801AF2C0; // type:function size:0x260 scope:global -LoadMilestoneInfo__8GManagerP17MilestoneTypeInfoUi = .text:0x801AF520; // type:function size:0xE8 scope:global -SaveMilestoneInfo__8GManagerP17MilestoneTypeInfo = .text:0x801AF608; // type:function size:0x98 scope:global -StartActivities__8GManager = .text:0x801AF6A0; // type:function size:0x104 scope:global -StartWorldActivities__8GManagerb = .text:0x801AF7A4; // type:function size:0xE0 scope:global -StartBinActivity__8GManagerP8GRaceBin = .text:0x801AF884; // type:function size:0x54 scope:global -SuspendAllBinActivities__8GManager = .text:0x801AF8D8; // type:function size:0x98 scope:global -StartRaceFromInGame__8GManagerUi = .text:0x801AF970; // type:function size:0xB0 scope:global -CalcMapCoordsForMarker__8GManagerUiR8bVector2Rf = .text:0x801AFA20; // type:function size:0x280 scope:global -WarpToMarker__8GManagerUib = .text:0x801AFCA0; // type:function size:0x148 scope:global -RefreshWorldParticleEffects__8GManager = .text:0x801AFDE8; // type:function size:0x94 scope:global -GetNumMilestones__8GManager = .text:0x801AFE7C; // type:function size:0x8 scope:global -GetMilestone__8GManagerUi = .text:0x801AFE84; // type:function size:0x10 scope:global -GetFirstMilestone__8GManagerbUi = .text:0x801AFE94; // type:function size:0x30 scope:global -GetNextMilestone__8GManagerP10GMilestonebUi = .text:0x801AFEC4; // type:function size:0x68 scope:global -EnableBinMilestones__8GManagerUi = .text:0x801AFF2C; // type:function size:0x64 scope:global -NotifyPursuitStarted__8GManager = .text:0x801AFF90; // type:function size:0x8C scope:global -NotifyPursuitEnded__8GManagerb = .text:0x801B001C; // type:function size:0x90 scope:global -GetNumSpeedTraps__8GManager = .text:0x801B00AC; // type:function size:0x8 scope:global -GetSpeedTrap__8GManagerUi = .text:0x801B00B4; // type:function size:0x10 scope:global -GetFirstSpeedTrap__8GManagerbUi = .text:0x801B00C4; // type:function size:0x30 scope:global -GetNextSpeedTrap__8GManagerP10GSpeedTrapbUi = .text:0x801B00F4; // type:function size:0xB0 scope:global -EnableBinSpeedTraps__8GManagerUi = .text:0x801B01A4; // type:function size:0x6C scope:global -RefreshSpeedTrapIcons__8GManager = .text:0x801B0210; // type:function size:0xA4 scope:global -GatherInstanceKeys__8GManagerRQ36Attrib3Gen8gameplayRQ33UTL3Stdt4list2ZUiZ22_type_ID_AttribKeyListUi = .text:0x801B02B4; // type:function size:0x1C0 scope:global -FindBountySpawnPoints__8GManager = .text:0x801B0474; // type:function size:0x144 scope:global -GetNumBountySpawnMarkers__C8GManager = .text:0x801B05B8; // type:function size:0x8 scope:global -GetBountySpawnMarker__C8GManagerUi = .text:0x801B05C0; // type:function size:0x24 scope:global -GetBountySpawnMarkerTag__C8GManagerUi = .text:0x801B05E4; // type:function size:0xA0 scope:global -NotifyGameZonesChanged__Fv = .text:0x801B0684; // type:function size:0x40 scope:global -NotifyTrackMarkersChanged__Fv = .text:0x801B06C4; // type:function size:0x40 scope:global -RefreshZoneIcons__8GManager = .text:0x801B0704; // type:function size:0xF4 scope:global -AddIconForTrackMarker__8GManagerP19TrackPositionMarkerUi = .text:0x801B07F8; // type:function size:0xA4 scope:global -RefreshTrackMarkerIcons__8GManager = .text:0x801B089C; // type:function size:0x68 scope:global -RefreshEngageTriggerIcons__8GManager = .text:0x801B0904; // type:function size:0xD8 scope:global -HidePursuitBreakerIcon__8GManagerRCQ25UMath7Vector3f = .text:0x801B09DC; // type:function size:0xB4 scope:global -RestorePursuitBreakerIcons__8GManageri = .text:0x801B0A90; // type:function size:0x9C scope:global -AllocIcon__8GManagerQ25GIcon4TypeRCQ25UMath7Vector3fb = .text:0x801B0B2C; // type:function size:0xAC scope:global -FreeDisposableIcons__8GManagerQ25GIcon4Type = .text:0x801B0BD8; // type:function size:0x88 scope:global -FreeIcon__8GManagerP5GIcon = .text:0x801B0C60; // type:function size:0x5C scope:global -FreeIconAt__8GManagerUi = .text:0x801B0CBC; // type:function size:0x11C scope:global -Compare__Q38GManager48GatherVisibleIcons__8GManagerPP5GIconP7IPlayer.0_8IconSortPCvT1.35326 = .text:0x801B0DD8; // type:function size:0x10 scope:local -GatherVisibleIcons__8GManagerPP5GIconP7IPlayer = .text:0x801B0DE8; // type:function size:0x1B8 scope:global -GetIsIconVisible__8GManagerP5GIcon = .text:0x801B0FA0; // type:function size:0x44 scope:global -SpawnAllLoadedSectionIcons__8GManager = .text:0x801B0FE4; // type:function size:0xC0 scope:global -SpawnSectionIcons__8GManageri = .text:0x801B10A4; // type:function size:0x8C scope:global -UnspawnSectionIcons__8GManageri = .text:0x801B1130; // type:function size:0x8C scope:global -UnspawnAllIcons__8GManager = .text:0x801B11BC; // type:function size:0x50 scope:global -FreeAllIcons__8GManager = .text:0x801B120C; // type:function size:0x44 scope:global -AllocateMilestones__8GManager = .text:0x801B1250; // type:function size:0x1AC scope:global -ReleaseMilestones__8GManager = .text:0x801B13FC; // type:function size:0x44 scope:global -ResetMilestones__8GManager = .text:0x801B1440; // type:function size:0x13C scope:global -SaveMilestones__8GManagerP10GMilestone = .text:0x801B157C; // type:function size:0x40 scope:global -LoadMilestones__8GManagerP10GMilestoneUi = .text:0x801B15BC; // type:function size:0x9C scope:global -AllocateSpeedTraps__8GManager = .text:0x801B1658; // type:function size:0x1AC scope:global -ReleaseSpeedTraps__8GManager = .text:0x801B1804; // type:function size:0x44 scope:global -ResetSpeedTraps__8GManager = .text:0x801B1848; // type:function size:0x13C scope:global -SaveSpeedTraps__8GManagerP10GSpeedTrap = .text:0x801B1984; // type:function size:0x40 scope:global -LoadSpeedTraps__8GManagerP10GSpeedTrapUi = .text:0x801B19C4; // type:function size:0x9C scope:global -ServicePendingCharacters__8GManager = .text:0x801B1A60; // type:function size:0x64 scope:global -UnspawnUselessCharacters__8GManager = .text:0x801B1AC4; // type:function size:0x5C scope:global -RecursivePreloadCharacterCars__8GManagerP16GRuntimeInstanceb = .text:0x801B1B20; // type:function size:0x184 scope:global -PreloadStockCarsForActivity__8GManagerP9GActivity = .text:0x801B1CA4; // type:function size:0xA8 scope:global -ReserveStockCar__8GManagerPCc = .text:0x801B1D4C; // type:function size:0x280 scope:global -StockCarsLoaded__8GManager = .text:0x801B1FCC; // type:function size:0xBC scope:global -ClearStockCars__8GManager = .text:0x801B2088; // type:function size:0xC4 scope:global -GetStockCar__8GManagerPCc = .text:0x801B214C; // type:function size:0x108 scope:global -GetRandomEmergencyStockCar__8GManager = .text:0x801B2254; // type:function size:0x360 scope:global -ReleaseStockCar__8GManagerP8ISimable = .text:0x801B25B4; // type:function size:0x158 scope:global -SetTimer__8GManagerPCcf = .text:0x801B270C; // type:function size:0xC8 scope:global -KillTimer__8GManagerPCc = .text:0x801B27D4; // type:function size:0x64 scope:global -ResetTimers__8GManager = .text:0x801B2838; // type:function size:0x48 scope:global -UpdateTimers__8GManagerf = .text:0x801B2880; // type:function size:0x58 scope:global -SaveTimerInfo__8GManagerP14SavedTimerInfo = .text:0x801B28D8; // type:function size:0x58 scope:global -LoadTimerInfo__8GManagerP14SavedTimerInfoUi = .text:0x801B2930; // type:function size:0x60 scope:global -SaveSMSInfo__8GManagerPi = .text:0x801B2990; // type:function size:0x90 scope:global -LoadSMSInfo__8GManagerPiUi = .text:0x801B2A20; // type:function size:0xA0 scope:global -GetHasPendingSMS__C8GManager = .text:0x801B2AC0; // type:function size:0x70 scope:global -CanPlaySMS__C8GManager = .text:0x801B2B30; // type:function size:0x208 scope:global -AddSMS__8GManageri = .text:0x801B2D38; // type:function size:0x124 scope:global -DispatchSMSMessage__8GManageri = .text:0x801B2E5C; // type:function size:0x7C scope:global -UpdatePendingSMS__8GManager = .text:0x801B2ED8; // type:function size:0x118 scope:global -PushSMSToInbox__8GManager = .text:0x801B2FF0; // type:function size:0x140 scope:global -GetRespawnMarker__8GManager = .text:0x801B3130; // type:function size:0x158 scope:global -GetRespawnLocation__8GManagerRQ25UMath7Vector3T1 = .text:0x801B3288; // type:function size:0x248 scope:global -__6GTimer = .text:0x801B34D0; // type:function size:0x38 scope:global -_._6GTimer = .text:0x801B3508; // type:function size:0x28 scope:global -Start__6GTimer = .text:0x801B3530; // type:function size:0x40 scope:global -Stop__6GTimer = .text:0x801B3570; // type:function size:0x38 scope:global -Reset__6GTimerf = .text:0x801B35A8; // type:function size:0x34 scope:global -GetTime__C6GTimer = .text:0x801B35DC; // type:function size:0x50 scope:global -SetTime__6GTimerf = .text:0x801B362C; // type:function size:0x10 scope:global -__11GEventTimer = .text:0x801B363C; // type:function size:0x30 scope:global -_._11GEventTimer = .text:0x801B366C; // type:function size:0x28 scope:global -Reset__11GEventTimer = .text:0x801B3694; // type:function size:0x2C scope:global -Start__11GEventTimer = .text:0x801B36C0; // type:function size:0x18 scope:global -Stop__11GEventTimer = .text:0x801B36D8; // type:function size:0x18 scope:global -SetInterval__11GEventTimerf = .text:0x801B36F0; // type:function size:0x14 scope:global -Update__11GEventTimerf = .text:0x801B3704; // type:function size:0xA4 scope:global -SetName__11GEventTimerPCc = .text:0x801B37A8; // type:function size:0x44 scope:global -Serialize__11GEventTimerP14SavedTimerInfo = .text:0x801B37EC; // type:function size:0x4C scope:global -Deserialize__11GEventTimerP14SavedTimerInfo = .text:0x801B3838; // type:function size:0x64 scope:global -__6GVaultP20AttribVaultPackEntryPCc = .text:0x801B389C; // type:function size:0x6C scope:global -_._6GVault = .text:0x801B3908; // type:function size:0x50 scope:global -LoadResident__6GVaultP20AttribVaultPackImage = .text:0x801B3958; // type:function size:0x11C scope:global -PreloadTransient__6GVaultP20AttribVaultPackImagei = .text:0x801B3A74; // type:function size:0x130 scope:global -InitTransient__6GVaultPUcT1 = .text:0x801B3BA4; // type:function size:0x158 scope:global -CreateGameplayObjects__6GVault = .text:0x801B3CFC; // type:function size:0x54 scope:global -DestroyGameplayObjects__6GVault = .text:0x801B3D50; // type:function size:0x3C scope:global -LoadSyncTransient__6GVault = .text:0x801B3D8C; // type:function size:0x2C scope:global -Unload__6GVault = .text:0x801B3DB8; // type:function size:0x1A0 scope:global -GetName__C6GVault = .text:0x801B3F58; // type:function size:0x8 scope:global -GetAttribVault__C6GVault = .text:0x801B3F60; // type:function size:0x8 scope:global -GetObjectCount__C6GVault = .text:0x801B3F68; // type:function size:0x8 scope:global -GetFootprint__C6GVault = .text:0x801B3F70; // type:function size:0x18 scope:global -GetDataOffset__C6GVault = .text:0x801B3F88; // type:function size:0x8 scope:global -GetDataSize__C6GVault = .text:0x801B3F90; // type:function size:0x8 scope:global -GetLoadDataOffset__C6GVault = .text:0x801B3F98; // type:function size:0x8 scope:global -GetLoadDataSize__C6GVault = .text:0x801B3FA0; // type:function size:0x8 scope:global -IsLoaded__C6GVault = .text:0x801B3FA8; // type:function size:0x18 scope:global -IsResident__C6GVault = .text:0x801B3FC0; // type:function size:0xC scope:global -IsTransient__C6GVault = .text:0x801B3FCC; // type:function size:0x10 scope:global -IsRaceBin__C6GVault = .text:0x801B3FDC; // type:function size:0xC scope:global -SetRaceBin__6GVault = .text:0x801B3FE8; // type:function size:0x10 scope:global -__12GObjectBlockP6GVaultPUc = .text:0x801B3FF8; // type:function size:0x3C scope:global -_._12GObjectBlock = .text:0x801B4034; // type:function size:0x98 scope:global -Initialize__12GObjectBlockUi = .text:0x801B40CC; // type:function size:0x9C scope:global -CalcSpaceRequired__12GObjectBlockP6GVaultPUi = .text:0x801B4168; // type:function size:0xD8 scope:global -CollectionIsInstanceOfTemplate__12GObjectBlockRQ36Attrib3Gen8gameplayT1 = .text:0x801B4240; // type:function size:0xFC scope:global -CalcNumConnections__12GObjectBlockUi = .text:0x801B433C; // type:function size:0x218 scope:global -__18GInfractionManager = .text:0x801B4554; // type:function size:0x20 scope:global -Init__18GInfractionManager = .text:0x801B4574; // type:function size:0x38 scope:global -PursuitStarted__18GInfractionManager = .text:0x801B45AC; // type:function size:0x1C scope:global -ReportInfraction__18GInfractionManagerQ218GInfractionManager14InfractionType = .text:0x801B45C8; // type:function size:0xFC scope:global -GetNumInfractions__18GInfractionManager = .text:0x801B46C4; // type:function size:0x28 scope:global -DidInfractionOccur__18GInfractionManagerQ218GInfractionManager14InfractionType = .text:0x801B46EC; // type:function size:0x18 scope:global -__10GMilestone = .text:0x801B4704; // type:function size:0x30 scope:global -GetCurrentValue__C10GMilestone = .text:0x801B4734; // type:function size:0x2C scope:global -GetBounty__C10GMilestone = .text:0x801B4760; // type:function size:0xFC scope:global -GetLocalizationTag__C10GMilestone = .text:0x801B485C; // type:function size:0xCC scope:global -GetJumpMarkerKey__C10GMilestone = .text:0x801B4928; // type:function size:0x9C scope:global -Init__10GMilestoneUi = .text:0x801B49C4; // type:function size:0x24 scope:global -Reset__10GMilestone = .text:0x801B49E8; // type:function size:0x134 scope:global -Unlock__10GMilestone = .text:0x801B4B1C; // type:function size:0x18 scope:global -ValueMeetsGoal__10GMilestonef = .text:0x801B4B34; // type:function size:0x38 scope:global -NotifyProgress__10GMilestonef = .text:0x801B4B6C; // type:function size:0x58 scope:global -NotifyPursuitOver__10GMilestoneb = .text:0x801B4BC4; // type:function size:0x1A4 scope:global -__10GSpeedTrap = .text:0x801B4D68; // type:function size:0x30 scope:global -GetBounty__C10GSpeedTrap = .text:0x801B4D98; // type:function size:0xFC scope:global -GetTrapTrigger__C10GSpeedTrap = .text:0x801B4E94; // type:function size:0x38 scope:global -GetJumpMarkerKey__C10GSpeedTrap = .text:0x801B4ECC; // type:function size:0x9C scope:global -Init__10GSpeedTrapUi = .text:0x801B4F68; // type:function size:0x24 scope:global -Reset__10GSpeedTrap = .text:0x801B4F8C; // type:function size:0x118 scope:global -Unlock__10GSpeedTrap = .text:0x801B50A4; // type:function size:0x10 scope:global -Activate__10GSpeedTrap = .text:0x801B50B4; // type:function size:0x10 scope:global -NotifyTriggered__10GSpeedTrapf = .text:0x801B50C4; // type:function size:0x78 scope:global -__5GIconQ25GIcon4TypeRCQ25UMath7Vector3f = .text:0x801B513C; // type:function size:0xC0 scope:global -_._5GIcon = .text:0x801B51FC; // type:function size:0xA0 scope:global -Spawn__5GIcon = .text:0x801B529C; // type:function size:0xE8 scope:global -Unspawn__5GIcon = .text:0x801B5384; // type:function size:0x70 scope:global -FindSection__5GIcon = .text:0x801B53F4; // type:function size:0x98 scope:global -SnapToGround__5GIcon = .text:0x801B548C; // type:function size:0xF4 scope:global -NotifyEmitterGroupDelete__5GIconPvP12EmitterGroup = .text:0x801B5580; // type:function size:0x18 scope:global -CreateParticleEffect__5GIconUi = .text:0x801B5598; // type:function size:0x84 scope:global -ReleaseParticleEffect__5GIcon = .text:0x801B561C; // type:function size:0x44 scope:global -RefreshEffects__5GIcon = .text:0x801B5660; // type:function size:0x5C scope:global -CreateGeometry__5GIconUi = .text:0x801B56BC; // type:function size:0x58 scope:global -ReleaseGeometry__5GIcon = .text:0x801B5714; // type:function size:0x44 scope:global -SetPosition__5GIcon = .text:0x801B5758; // type:function size:0x114 scope:global -Enable__5GIcon = .text:0x801B586C; // type:function size:0x84 scope:global -Disable__5GIcon = .text:0x801B58F0; // type:function size:0x58 scope:global -__less__H1ZQ216GRuntimeInstance17ConnectedInstance_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x801B5948; // type:function size:0xC scope:global -__adjust_heap__H4ZPQ216GRuntimeInstance17ConnectedInstanceZiZQ216GRuntimeInstance17ConnectedInstanceZQ24_STLt4less1ZQ216GRuntimeInstance17ConnectedInstance_4_STLX01X11X11X21X31_v = .text:0x801B5954; // type:function size:0x11C scope:global -make_heap__H2ZPQ216GRuntimeInstance17ConnectedInstanceZQ24_STLt4less1ZQ216GRuntimeInstance17ConnectedInstance_4_STLX01X01X11_v = .text:0x801B5A70; // type:function size:0x90 scope:global -pop_heap__H2ZPQ216GRuntimeInstance17ConnectedInstanceZQ24_STLt4less1ZQ216GRuntimeInstance17ConnectedInstance_4_STLX01X01X11_v = .text:0x801B5B00; // type:function size:0x60 scope:global -__partial_sort__H3ZPQ216GRuntimeInstance17ConnectedInstanceZQ216GRuntimeInstance17ConnectedInstanceZQ24_STLt4less1ZQ216GRuntimeInstance17ConnectedInstance_4_STLX01X01X01PX11X21_v = .text:0x801B5B60; // type:function size:0xD8 scope:global -partial_sort__H2ZPQ216GRuntimeInstance17ConnectedInstanceZQ24_STLt4less1ZQ216GRuntimeInstance17ConnectedInstance_4_STLX01X01X01X11_v = .text:0x801B5C38; // type:function size:0x30 scope:global -__unguarded_partition__H3ZPQ216GRuntimeInstance17ConnectedInstanceZQ216GRuntimeInstance17ConnectedInstanceZQ24_STLt4less1ZQ216GRuntimeInstance17ConnectedInstance_4_STLX01X01X11X21_X01 = .text:0x801B5C68; // type:function size:0x6C scope:global -__introsort_loop__H4ZPQ216GRuntimeInstance17ConnectedInstanceZQ216GRuntimeInstance17ConnectedInstanceZiZQ24_STLt4less1ZQ216GRuntimeInstance17ConnectedInstance_4_STLX01X01PX11X21X31_v = .text:0x801B5CD4; // type:function size:0x134 scope:global -__unguarded_linear_insert__H3ZPQ216GRuntimeInstance17ConnectedInstanceZQ216GRuntimeInstance17ConnectedInstanceZQ24_STLt4less1ZQ216GRuntimeInstance17ConnectedInstance_4_STLX01X11X21_v = .text:0x801B5E08; // type:function size:0x44 scope:global -__insertion_sort__H2ZPQ216GRuntimeInstance17ConnectedInstanceZQ24_STLt4less1ZQ216GRuntimeInstance17ConnectedInstance_4_STLX01X01X11_v = .text:0x801B5E4C; // type:function size:0xC0 scope:global -__unguarded_insertion_sort_aux__H3ZPQ216GRuntimeInstance17ConnectedInstanceZQ216GRuntimeInstance17ConnectedInstanceZQ24_STLt4less1ZQ216GRuntimeInstance17ConnectedInstance_4_STLX01X01PX11X21_v = .text:0x801B5F0C; // type:function size:0x68 scope:global -__final_insertion_sort__H2ZPQ216GRuntimeInstance17ConnectedInstanceZQ24_STLt4less1ZQ216GRuntimeInstance17ConnectedInstance_4_STLX01X01X11_v = .text:0x801B5F74; // type:function size:0x7C scope:global -sort__H1ZPQ216GRuntimeInstance17ConnectedInstance_4_STLX01X01_v = .text:0x801B5FF0; // type:function size:0xA0 scope:global -reserve__Q24_STLt6vector2ZP8ISimableZQ33UTL3Stdt9Allocator2ZP8ISimableZ19_type_ID_SimObjListUi = .text:0x801B6090; // type:function size:0x11C scope:global -_M_erase__Q24_STLt8_Rb_tree5ZP6GStateZQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZQ24_STLt4less1ZP6GStateZQ33UTL3Stdt9Allocator2ZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZ23_type_ID_StateToVectorsPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVector = .text:0x801B61AC; // type:function size:0x90 scope:global -Advance__t15GObjectIterator1Z6GState = .text:0x801B623C; // type:function size:0x44 scope:global -__t15GObjectIterator1Z6GStateUi = .text:0x801B6280; // type:function size:0x5C scope:global -_M_insert__Q24_STLt8_Rb_tree5ZP6GStateZQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZQ24_STLt4less1ZP6GStateZQ33UTL3Stdt9Allocator2ZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZ23_type_ID_StateToVectorsPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorT1 = .text:0x801B62DC; // type:function size:0x144 scope:global -insert_unique__Q24_STLt8_Rb_tree5ZP6GStateZQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZQ24_STLt4less1ZP6GStateZQ33UTL3Stdt9Allocator2ZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZ23_type_ID_StateToVectorsRCQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVector = .text:0x801B6420; // type:function size:0x118 scope:global -insert_unique__Q24_STLt8_Rb_tree5ZP6GStateZQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZQ24_STLt4less1ZP6GStateZQ33UTL3Stdt9Allocator2ZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZ23_type_ID_StateToVectorsGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorRCQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVector = .text:0x801B6538; // type:function size:0x26C scope:global -reserve__Q24_STLt6vector2ZP8GHandlerZQ33UTL3Stdt9Allocator2ZP8GHandlerZ23_type_ID_GHandlerVectorUi = .text:0x801B67A4; // type:function size:0x11C scope:global -Advance__t15GObjectIterator1Z8GHandler = .text:0x801B68C0; // type:function size:0x44 scope:global -__t15GObjectIterator1Z8GHandlerUi = .text:0x801B6904; // type:function size:0x5C scope:global -FindObject__H1Z8GTrigger_16GRuntimeInstanceUi_PX01 = .text:0x801B6960; // type:function size:0x70 scope:global -find__H2ZPCP7IPlayerZPC7IPlayer_4_STLX01X01RCX11_X01 = .text:0x801B69D0; // type:function size:0xB0 scope:global -Advance__t15GObjectIterator1Z8GTrigger = .text:0x801B6A80; // type:function size:0x44 scope:global -__t15GObjectIterator1Z8GTriggerUi = .text:0x801B6AC4; // type:function size:0x5C scope:global -_M_erase__Q24_STLt8_Rb_tree5Z11PathSegmentZ11PathSegmentZQ24_STLt9_Identity1Z11PathSegmentZQ24_STLt4less1Z11PathSegmentZQ33UTL3Stdt9Allocator2Z11PathSegmentZ17_type_ID_PATH_SETPQ24_STLt13_Rb_tree_node1Z11PathSegment = .text:0x801B6B20; // type:function size:0x74 scope:global -_M_erase__Q24_STLt8_Rb_tree5ZsZsZQ24_STLt9_Identity1ZsZQ24_STLt4less1ZsZQ33UTL3Stdt9Allocator2ZsZ17_type_ID_ROAD_SETPQ24_STLt13_Rb_tree_node1Zs = .text:0x801B6B94; // type:function size:0x68 scope:global -_M_insert__Q24_STLt8_Rb_tree5ZsZsZQ24_STLt9_Identity1ZsZQ24_STLt4less1ZsZQ33UTL3Stdt9Allocator2ZsZ17_type_ID_ROAD_SETPQ24_STL18_Rb_tree_node_baseT1RCsT1 = .text:0x801B6BFC; // type:function size:0x12C scope:global -insert_unique__Q24_STLt8_Rb_tree5ZsZsZQ24_STLt9_Identity1ZsZQ24_STLt4less1ZsZQ33UTL3Stdt9Allocator2ZsZ17_type_ID_ROAD_SETRCs = .text:0x801B6D28; // type:function size:0x118 scope:global -_M_copy__Q24_STLt8_Rb_tree5ZsZsZQ24_STLt9_Identity1ZsZQ24_STLt4less1ZsZQ33UTL3Stdt9Allocator2ZsZ17_type_ID_ROAD_SETPQ24_STLt13_Rb_tree_node1ZsT1 = .text:0x801B6E40; // type:function size:0x110 scope:global -__Q33UTL3Stdt3set2ZsZ17_type_ID_ROAD_SETRCQ33UTL3Stdt3set2ZsZ17_type_ID_ROAD_SET = .text:0x801B6F50; // type:function size:0xFC scope:global -_M_insert__Q24_STLt8_Rb_tree5Z11PathSegmentZ11PathSegmentZQ24_STLt9_Identity1Z11PathSegmentZQ24_STLt4less1Z11PathSegmentZQ33UTL3Stdt9Allocator2Z11PathSegmentZ17_type_ID_PATH_SETPQ24_STL18_Rb_tree_node_baseT1RC11PathSegmentT1 = .text:0x801B704C; // type:function size:0x148 scope:global -insert_unique__Q24_STLt8_Rb_tree5Z11PathSegmentZ11PathSegmentZQ24_STLt9_Identity1Z11PathSegmentZQ24_STLt4less1Z11PathSegmentZQ33UTL3Stdt9Allocator2Z11PathSegmentZ17_type_ID_PATH_SETRC11PathSegment = .text:0x801B7194; // type:function size:0x11C scope:global -__less__H1Zs_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x801B72B0; // type:function size:0xC scope:global -insert_unique__Q24_STLt8_Rb_tree5ZsZsZQ24_STLt9_Identity1ZsZQ24_STLt4less1ZsZQ33UTL3Stdt9Allocator2ZsZ17_type_ID_ROAD_SETGQ24_STLt17_Rb_tree_iterator2ZsZQ24_STLt16_Nonconst_traits1ZsRCs = .text:0x801B72BC; // type:function size:0x260 scope:global -__set_difference__H4ZQ24_STLt17_Rb_tree_iterator2ZsZQ24_STLt13_Const_traits1ZsZQ24_STLt17_Rb_tree_iterator2ZsZQ24_STLt13_Const_traits1ZsZQ24_STLt15insert_iterator1ZQ33UTL3Stdt3set2ZsZ17_type_ID_ROAD_SETZQ24_STLt4less1Zs_4_STLX01X01X11X11X21X31_X21 = .text:0x801B751C; // type:function size:0x19C scope:global -set_difference__H3ZQ24_STLt17_Rb_tree_iterator2ZsZQ24_STLt13_Const_traits1ZsZQ24_STLt17_Rb_tree_iterator2ZsZQ24_STLt13_Const_traits1ZsZQ24_STLt15insert_iterator1ZQ33UTL3Stdt3set2ZsZ17_type_ID_ROAD_SET_4_STLX01X01X11X11X21_X21 = .text:0x801B76B8; // type:function size:0x9C scope:global -FindObject__H1Z9GActivity_16GRuntimeInstanceUi_PX01 = .text:0x801B7754; // type:function size:0x6C scope:global -FindObject__H1Z10GCharacter_16GRuntimeInstanceUi_PX01 = .text:0x801B77C0; // type:function size:0x70 scope:global -FindObject__H1Z7GMarker_16GRuntimeInstanceUi_PX01 = .text:0x801B7830; // type:function size:0x70 scope:global -SetAttribute__H1Zi_11GRaceCustomUiRCX01Ui_v = .text:0x801B78A0; // type:function size:0xD8 scope:global -SetAttribute__H1Zb_11GRaceCustomUiRCX01Ui_v = .text:0x801B7978; // type:function size:0xD8 scope:global -_M_erase__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP8ISimableZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP8ISimableZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP8ISimableZ20_type_ID_StockCarMapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCUiZP8ISimable = .text:0x801B7A50; // type:function size:0x68 scope:global -_M_erase__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZ17MilestoneTypeInfoZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZ17MilestoneTypeInfoZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2Z17MilestoneTypeInfoZ25_type_ID_MilestoneInfoMapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCUiZ17MilestoneTypeInfo = .text:0x801B7AB8; // type:function size:0x68 scope:global -_M_erase__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeaderZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeaderZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP22ObjectStateBlockHeaderZ23_type_ID_ObjectStateMapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeader = .text:0x801B7B20; // type:function size:0x68 scope:global -clear__Q24_STLt10_List_base2ZiZQ33UTL3Stdt9Allocator2ZiZ23_type_ID_PendingSMSList = .text:0x801B7B88; // type:function size:0x78 scope:global -reserve__Q24_STLt6vector2ZP10GCharacterZQ33UTL3Stdt9Allocator2ZP10GCharacterZ23_type_ID_GCharacterListUi = .text:0x801B7C00; // type:function size:0x11C scope:global -__less__H1ZUi_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x801B7D1C; // type:function size:0xC scope:global -__adjust_heap__H4ZPUiZiZUiZQ24_STLt4less1ZUi_4_STLX01X11X11X21X31_v = .text:0x801B7D28; // type:function size:0xCC scope:global -make_heap__H2ZPUiZQ24_STLt4less1ZUi_4_STLX01X01X11_v = .text:0x801B7DF4; // type:function size:0x7C scope:global -pop_heap__H2ZPUiZQ24_STLt4less1ZUi_4_STLX01X01X11_v = .text:0x801B7E70; // type:function size:0x48 scope:global -__partial_sort__H3ZPUiZUiZQ24_STLt4less1ZUi_4_STLX01X01X01PX11X21_v = .text:0x801B7EB8; // type:function size:0xB8 scope:global -partial_sort__H2ZPUiZQ24_STLt4less1ZUi_4_STLX01X01X01X11_v = .text:0x801B7F70; // type:function size:0x30 scope:global -__unguarded_partition__H3ZPUiZUiZQ24_STLt4less1ZUi_4_STLX01X01X11X21_X01 = .text:0x801B7FA0; // type:function size:0x50 scope:global -__introsort_loop__H4ZPUiZUiZiZQ24_STLt4less1ZUi_4_STLX01X01PX11X21X31_v = .text:0x801B7FF0; // type:function size:0x124 scope:global -__unguarded_linear_insert__H3ZPUiZUiZQ24_STLt4less1ZUi_4_STLX01X11X21_v = .text:0x801B8114; // type:function size:0x28 scope:global -__insertion_sort__H2ZPUiZQ24_STLt4less1ZUi_4_STLX01X01X11_v = .text:0x801B813C; // type:function size:0x9C scope:global -__unguarded_insertion_sort_aux__H3ZPUiZUiZQ24_STLt4less1ZUi_4_STLX01X01PX11X21_v = .text:0x801B81D8; // type:function size:0x58 scope:global -__final_insertion_sort__H2ZPUiZQ24_STLt4less1ZUi_4_STLX01X01X11_v = .text:0x801B8230; // type:function size:0x7C scope:global -sort__H1ZPUi_4_STLX01X01_v = .text:0x801B82AC; // type:function size:0xA0 scope:global -__equal_to__H1ZUi_4_STLPX01_Q24_STLt8equal_to1ZX01 = .text:0x801B834C; // type:function size:0xC scope:global -unique_copy__H2ZPUiZPUi_4_STLX01X01X11_X11 = .text:0x801B8358; // type:function size:0x88 scope:global -__less__H1ZP22ObjectStateBlockHeader_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x801B83E0; // type:function size:0xC scope:global -__adjust_heap__H4ZPP22ObjectStateBlockHeaderZiZP22ObjectStateBlockHeaderZQ24_STLt4less1ZP22ObjectStateBlockHeader_4_STLX01X11X11X21X31_v = .text:0x801B83EC; // type:function size:0xCC scope:global -make_heap__H2ZPP22ObjectStateBlockHeaderZQ24_STLt4less1ZP22ObjectStateBlockHeader_4_STLX01X01X11_v = .text:0x801B84B8; // type:function size:0x7C scope:global -pop_heap__H2ZPP22ObjectStateBlockHeaderZQ24_STLt4less1ZP22ObjectStateBlockHeader_4_STLX01X01X11_v = .text:0x801B8534; // type:function size:0x48 scope:global -__partial_sort__H3ZPP22ObjectStateBlockHeaderZP22ObjectStateBlockHeaderZQ24_STLt4less1ZP22ObjectStateBlockHeader_4_STLX01X01X01PX11X21_v = .text:0x801B857C; // type:function size:0xB8 scope:global -partial_sort__H2ZPP22ObjectStateBlockHeaderZQ24_STLt4less1ZP22ObjectStateBlockHeader_4_STLX01X01X01X11_v = .text:0x801B8634; // type:function size:0x30 scope:global -__unguarded_partition__H3ZPP22ObjectStateBlockHeaderZP22ObjectStateBlockHeaderZQ24_STLt4less1ZP22ObjectStateBlockHeader_4_STLX01X01X11X21_X01 = .text:0x801B8664; // type:function size:0x50 scope:global -__introsort_loop__H4ZPP22ObjectStateBlockHeaderZP22ObjectStateBlockHeaderZiZQ24_STLt4less1ZP22ObjectStateBlockHeader_4_STLX01X01PX11X21X31_v = .text:0x801B86B4; // type:function size:0x124 scope:global -__unguarded_linear_insert__H3ZPP22ObjectStateBlockHeaderZP22ObjectStateBlockHeaderZQ24_STLt4less1ZP22ObjectStateBlockHeader_4_STLX01X11X21_v = .text:0x801B87D8; // type:function size:0x28 scope:global -__insertion_sort__H2ZPP22ObjectStateBlockHeaderZQ24_STLt4less1ZP22ObjectStateBlockHeader_4_STLX01X01X11_v = .text:0x801B8800; // type:function size:0x9C scope:global -__unguarded_insertion_sort_aux__H3ZPP22ObjectStateBlockHeaderZP22ObjectStateBlockHeaderZQ24_STLt4less1ZP22ObjectStateBlockHeader_4_STLX01X01PX11X21_v = .text:0x801B889C; // type:function size:0x58 scope:global -__final_insertion_sort__H2ZPP22ObjectStateBlockHeaderZQ24_STLt4less1ZP22ObjectStateBlockHeader_4_STLX01X01X11_v = .text:0x801B88F4; // type:function size:0x7C scope:global -sort__H1ZPP22ObjectStateBlockHeader_4_STLX01X01_v = .text:0x801B8970; // type:function size:0xA0 scope:global -_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeaderZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeaderZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP22ObjectStateBlockHeaderZ23_type_ID_ObjectStateMapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeaderT1 = .text:0x801B8A10; // type:function size:0x13C scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeaderZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeaderZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP22ObjectStateBlockHeaderZ23_type_ID_ObjectStateMapRCQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeader = .text:0x801B8B4C; // type:function size:0x118 scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeaderZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeaderZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP22ObjectStateBlockHeaderZ23_type_ID_ObjectStateMapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeaderZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeaderRCQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeader = .text:0x801B8C64; // type:function size:0x26C scope:global -_Rebalance_for_erase__Q24_STLt10_Rb_global1ZbPQ24_STL18_Rb_tree_node_baseRPQ24_STL18_Rb_tree_node_baseN22 = .text:0x801B8ED0; // type:function size:0x3F4 scope:global -Advance__t15GObjectIterator1Z9GActivity = .text:0x801B92C4; // type:function size:0x44 scope:global -__t15GObjectIterator1Z9GActivityUi = .text:0x801B9308; // type:function size:0x5C scope:global -find__H2ZPP10GCharacterZP10GCharacter_4_STLX01X01RCX11_X01 = .text:0x801B9364; // type:function size:0xB0 scope:global -Get__H1Z14GCollectionKey_CQ26Attrib9AttributeUi_RCX01 = .text:0x801B9414; // type:function size:0x50 scope:global -_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZ17MilestoneTypeInfoZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZ17MilestoneTypeInfoZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2Z17MilestoneTypeInfoZ25_type_ID_MilestoneInfoMapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZ17MilestoneTypeInfoT1 = .text:0x801B9464; // type:function size:0x17C scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZ17MilestoneTypeInfoZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZ17MilestoneTypeInfoZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2Z17MilestoneTypeInfoZ25_type_ID_MilestoneInfoMapRCQ24_STLt4pair2ZCUiZ17MilestoneTypeInfo = .text:0x801B95E0; // type:function size:0x118 scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZ17MilestoneTypeInfoZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZ17MilestoneTypeInfoZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2Z17MilestoneTypeInfoZ25_type_ID_MilestoneInfoMapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZ17MilestoneTypeInfoZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZ17MilestoneTypeInfoRCQ24_STLt4pair2ZCUiZ17MilestoneTypeInfo = .text:0x801B96F8; // type:function size:0x26C scope:global -clear__Q24_STLt10_List_base2ZUiZQ33UTL3Stdt9Allocator2ZUiZ22_type_ID_AttribKeyList = .text:0x801B9964; // type:function size:0x78 scope:global -_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP8ISimableZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP8ISimableZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP8ISimableZ20_type_ID_StockCarMapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZP8ISimableT1 = .text:0x801B99DC; // type:function size:0x13C scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP8ISimableZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP8ISimableZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP8ISimableZ20_type_ID_StockCarMapRCQ24_STLt4pair2ZCUiZP8ISimable = .text:0x801B9B18; // type:function size:0x118 scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP8ISimableZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP8ISimableZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP8ISimableZ20_type_ID_StockCarMapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZP8ISimableZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZP8ISimableRCQ24_STLt4pair2ZCUiZP8ISimable = .text:0x801B9C30; // type:function size:0x26C scope:global -reserve__Q24_STLt6vector2ZQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZP8ISimableZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZP8ISimableZQ33UTL3Stdt9Allocator2ZQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZP8ISimableZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZP8ISimableZ12_type_vectorUi = .text:0x801B9E9C; // type:function size:0x154 scope:global -GetPaddedObjectSize__H1Z8GTrigger_v_Ui = .text:0x801B9FF0; // type:function size:0x8 scope:local -DeleteObjects__H1Z8GTrigger_12GObjectBlock_v = .text:0x801B9FF8; // type:function size:0xA8 scope:global -GetPaddedObjectSize__H1Z7GMarker_v_Ui = .text:0x801BA0A0; // type:function size:0x8 scope:local -DeleteObjects__H1Z7GMarker_12GObjectBlock_v = .text:0x801BA0A8; // type:function size:0xA8 scope:global -GetPaddedObjectSize__H1Z10GCharacter_v_Ui = .text:0x801BA150; // type:function size:0x8 scope:local -DeleteObjects__H1Z10GCharacter_12GObjectBlock_v = .text:0x801BA158; // type:function size:0xA8 scope:global -GetPaddedObjectSize__H1Z9GActivity_v_Ui = .text:0x801BA200; // type:function size:0x8 scope:local -DeleteObjects__H1Z9GActivity_12GObjectBlock_v = .text:0x801BA208; // type:function size:0xA8 scope:global -GetPaddedObjectSize__H1Z6GState_v_Ui = .text:0x801BA2B0; // type:function size:0x8 scope:local -DeleteObjects__H1Z6GState_12GObjectBlock_v = .text:0x801BA2B8; // type:function size:0xA8 scope:global -GetPaddedObjectSize__H1Z8GHandler_v_Ui = .text:0x801BA360; // type:function size:0x8 scope:local -DeleteObjects__H1Z8GHandler_12GObjectBlock_v = .text:0x801BA368; // type:function size:0xA8 scope:global -FindInstances__H1Z8GHandler_P6GVaultPQ33UTL3Stdt4list2ZUiZ22_type_ID_AttribKeyListPUiT2_Ui = .text:0x801BA410; // type:function size:0x204 scope:local -CreateObjects__H1Z8GHandler_12GObjectBlockP6GVaultPUc_Ui = .text:0x801BA614; // type:function size:0x19C scope:global -FindInstances__H1Z6GState_P6GVaultPQ33UTL3Stdt4list2ZUiZ22_type_ID_AttribKeyListPUiT2_Ui = .text:0x801BA7B0; // type:function size:0x204 scope:local -CreateObjects__H1Z6GState_12GObjectBlockP6GVaultPUc_Ui = .text:0x801BA9B4; // type:function size:0x19C scope:global -FindInstances__H1Z9GActivity_P6GVaultPQ33UTL3Stdt4list2ZUiZ22_type_ID_AttribKeyListPUiT2_Ui = .text:0x801BAB50; // type:function size:0x204 scope:local -CreateObjects__H1Z9GActivity_12GObjectBlockP6GVaultPUc_Ui = .text:0x801BAD54; // type:function size:0x198 scope:global -FindInstances__H1Z10GCharacter_P6GVaultPQ33UTL3Stdt4list2ZUiZ22_type_ID_AttribKeyListPUiT2_Ui = .text:0x801BAEEC; // type:function size:0x204 scope:local -CreateObjects__H1Z10GCharacter_12GObjectBlockP6GVaultPUc_Ui = .text:0x801BB0F0; // type:function size:0x19C scope:global -FindInstances__H1Z7GMarker_P6GVaultPQ33UTL3Stdt4list2ZUiZ22_type_ID_AttribKeyListPUiT2_Ui = .text:0x801BB28C; // type:function size:0x204 scope:local -CreateObjects__H1Z7GMarker_12GObjectBlockP6GVaultPUc_Ui = .text:0x801BB490; // type:function size:0x19C scope:global -FindInstances__H1Z8GTrigger_P6GVaultPQ33UTL3Stdt4list2ZUiZ22_type_ID_AttribKeyListPUiT2_Ui = .text:0x801BB62C; // type:function size:0x204 scope:local -CreateObjects__H1Z8GTrigger_12GObjectBlockP6GVaultPUc_Ui = .text:0x801BB830; // type:function size:0x19C scope:global -__static_initialization_and_destruction_0 = .text:0x801BB9CC; // type:function size:0x12C scope:local -ClassKey__Q36Attrib3Gen8gameplay = .text:0x801BBAF8; // type:function size:0xC scope:global -ClassKey__Q36Attrib3Gen14milestonetypes = .text:0x801BBB04; // type:function size:0xC scope:global -__Q33UTL3Stdt3map3ZUiZP8ISimableZ20_type_ID_StockCarMap = .text:0x801BBB10; // type:function size:0x74 scope:global -__Q33UTL3Stdt3map3ZUiZ17MilestoneTypeInfoZ25_type_ID_MilestoneInfoMap = .text:0x801BBB84; // type:function size:0x74 scope:global -__Q33UTL3Stdt3map3ZUiZP22ObjectStateBlockHeaderZ23_type_ID_ObjectStateMap = .text:0x801BBBF8; // type:function size:0x74 scope:global -GetCacheName__C8GManager = .text:0x801BBC6C; // type:function size:0xC scope:global -GetType__C7GMarker = .text:0x801BBC78; // type:function size:0x8 scope:global -GetType__C8GTrigger = .text:0x801BBC80; // type:function size:0x8 scope:global -_IHandle__21IMessageFilterContext = .text:0x801BBC88; // type:function size:0xC scope:global -_._22LuaMessageDeliveryInfo = .text:0x801BBC94; // type:function size:0x90 scope:global -GetLuaState__C22LuaMessageDeliveryInfo = .text:0x801BBD24; // type:function size:0x8 scope:global -GetActivity__C22LuaMessageDeliveryInfo = .text:0x801BBD2C; // type:function size:0x8 scope:global -GetHandler__C22LuaMessageDeliveryInfo = .text:0x801BBD34; // type:function size:0x8 scope:global -GetMessage__C22LuaMessageDeliveryInfo = .text:0x801BBD3C; // type:function size:0x8 scope:global -_GetKind__13MTriggerEnter = .text:0x801BBD44; // type:function size:0x64 scope:global -_GetKind__12MTriggerExit = .text:0x801BBDA8; // type:function size:0x64 scope:global -_GetKind__14MTriggerInside = .text:0x801BBE0C; // type:function size:0x64 scope:global -__Q33UTL3Stdt3map3ZP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZ23_type_ID_StateToVectors = .text:0x801BBE70; // type:function size:0x74 scope:global -GetType__C9GActivity = .text:0x801BBEE4; // type:function size:0x8 scope:global -ClearAll__10GRacerInfo = .text:0x801BBEEC; // type:function size:0x1D8 scope:global -SetIsLoading__11GRaceStatusb = .text:0x801BC0C4; // type:function size:0x8 scope:global -EnterSuddenDeath__11GRaceStatus = .text:0x801BC0CC; // type:function size:0xC scope:global -SetTaskTime__11GRaceStatusf = .text:0x801BC0D8; // type:function size:0x8 scope:global -SetActivelyRacing__11GRaceStatusb = .text:0x801BC0E0; // type:function size:0x8 scope:global -SetHasBeenWon__11GRaceStatusb = .text:0x801BC0E8; // type:function size:0x8 scope:global -GetCacheName__C11GRaceStatus = .text:0x801BC0F0; // type:function size:0xC scope:global -GetType__C6GState = .text:0x801BC0FC; // type:function size:0x8 scope:global -_GetKind__11MStateEnter = .text:0x801BC104; // type:function size:0x64 scope:global -_GetKind__10MStateExit = .text:0x801BC168; // type:function size:0x64 scope:global -GetType__C8GHandler = .text:0x801BC1CC; // type:function size:0x8 scope:global -__Q33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorRCQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVector = .text:0x801BC1D4; // type:function size:0xAC scope:global -GetType__C10GCharacter = .text:0x801BC280; // type:function size:0x8 scope:global -Attach__10GCharacterPQ33UTL3COM8IUnknown = .text:0x801BC288; // type:function size:0x24 scope:global -Detach__10GCharacterPQ33UTL3COM8IUnknown = .text:0x801BC2AC; // type:function size:0x24 scope:global -IsAttached__C10GCharacterPCQ33UTL3COM8IUnknown = .text:0x801BC2D0; // type:function size:0x24 scope:global -GetAttachments__C10GCharacter = .text:0x801BC2F4; // type:function size:0x8 scope:global -IsFlagSet__C10GCharacterUs = .text:0x801BC2FC; // type:function size:0x18 scope:global -_GetKind__15MNotifyRaceTime = .text:0x801BC314; // type:function size:0x64 scope:global -_GetKind__22MNotifyRaceTimeSecTick = .text:0x801BC378; // type:function size:0x64 scope:global -_GetKind__22MNotifyRaceTimeExpired = .text:0x801BC3DC; // type:function size:0x64 scope:global -_GetKind__16MLoadingComplete = .text:0x801BC440; // type:function size:0x64 scope:global -_IHandle__8IAudible = .text:0x801BC4A4; // type:function size:0xC scope:global -__Q33UTL3Stdt3set2ZsZ17_type_ID_ROAD_SET = .text:0x801BC4B0; // type:function size:0x74 scope:global -_._11PathSegment = .text:0x801BC524; // type:function size:0x9C scope:global -__Q33UTL3Stdt3set2Z11PathSegmentZ17_type_ID_PATH_SET = .text:0x801BC5C0; // type:function size:0x74 scope:global -EnsureLoaded__C15GRaceParameters = .text:0x801BC634; // type:function size:0x68 scope:global -GetNormalizedLower__t13FloatingPoint5Zsi10i3i5i11 = .text:0x801BC69C; // type:function size:0x58 scope:global -GetNormalizedUpper__t13FloatingPoint5Zsi10i3i5i11 = .text:0x801BC6F4; // type:function size:0x58 scope:global -_GetKind__24MNotifyMilestoneProgress = .text:0x801BC74C; // type:function size:0x64 scope:global -_GetKind__17MEnteringGameplay = .text:0x801BC7B0; // type:function size:0x64 scope:global -_GetKind__12MNotifyTimer = .text:0x801BC814; // type:function size:0x64 scope:global -_._25PreloadingAttribAllocator = .text:0x801BC878; // type:function size:0x54 scope:global -Allocate__25PreloadingAttribAllocatorUiPCc = .text:0x801BC8CC; // type:function size:0x50 scope:global -Free__25PreloadingAttribAllocatorPvUiPCc = .text:0x801BC91C; // type:function size:0x48 scope:global -_._27BlockLoadingAttribAllocator = .text:0x801BC964; // type:function size:0x54 scope:global -Allocate__27BlockLoadingAttribAllocatorUiPCc = .text:0x801BC9B8; // type:function size:0x40 scope:global -Free__27BlockLoadingAttribAllocatorPvUiPCc = .text:0x801BC9F8; // type:function size:0x30 scope:global -_GetKind__23MNotifyMilestoneReached = .text:0x801BCA28; // type:function size:0x64 scope:global -_._22LoggingAttribAllocator = .text:0x801BCA8C; // type:function size:0x54 scope:global -_GLOBAL_.I._16GRuntimeInstance.sRingListHead = .text:0x801BCAE0; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x801BCB0C; // type:label scope:local -LuaRealloc = .text:0x801BCB0C; // type:function size:0x54 scope:global -LuaFree = .text:0x801BCB60; // type:function size:0x48 scope:global -LuaPanic = .text:0x801BCBA8; // type:function size:0x24 scope:global -__10LuaRuntimeUi = .text:0x801BCBCC; // type:function size:0xD0 scope:global -_._10LuaRuntime = .text:0x801BCC9C; // type:function size:0x138 scope:global -Init__10LuaRuntimeUi = .text:0x801BCDD4; // type:function size:0x44 scope:global -Shutdown__10LuaRuntime = .text:0x801BCE18; // type:function size:0x44 scope:global -CreateState__10LuaRuntime = .text:0x801BCE5C; // type:function size:0x90 scope:global -Alloc__10LuaRuntimeUi = .text:0x801BCEEC; // type:function size:0x2A4 scope:global -Free__10LuaRuntimePvUi = .text:0x801BD190; // type:function size:0x268 scope:global -TakeResetSnapshot__10LuaRuntime = .text:0x801BD3F8; // type:function size:0xF0 scope:global -FreeResetSnapshot__10LuaRuntime = .text:0x801BD4E8; // type:function size:0x48 scope:global -BeginDelivery__10LuaRuntime = .text:0x801BD530; // type:function size:0x10 scope:global -EndDelivery__10LuaRuntime = .text:0x801BD540; // type:function size:0x40 scope:global -Realloc__10LuaRuntimeP9lua_StatePvUiUi12LuaAllocType = .text:0x801BD580; // type:function size:0x8C scope:global -ResetHeap__10LuaRuntime = .text:0x801BD60C; // type:function size:0x148 scope:global -FreeEmergencyAllocations__10LuaRuntime = .text:0x801BD754; // type:function size:0x74 scope:global -PackIdentifier__10LuaRuntimePCcPUc = .text:0x801BD7C8; // type:function size:0xD0 scope:global -UnpackIdentifier__10LuaRuntimePCUcPc = .text:0x801BD898; // type:function size:0xA4 scope:global -SerializeTable__10LuaRuntimeP9lua_StatePUcb = .text:0x801BD93C; // type:function size:0x4A0 scope:global -DeserializeTable__10LuaRuntimeP9lua_StatePUcb = .text:0x801BDDDC; // type:function size:0x378 scope:global -DumpStack__10LuaRuntimeP9lua_State = .text:0x801BE154; // type:function size:0x1D8 scope:global -HandleGlobalIndex__10LuaRuntimeP9lua_State = .text:0x801BE32C; // type:function size:0xAC scope:global -__13LuaPostOffice = .text:0x801BE3D8; // type:function size:0x7C scope:global -_._13LuaPostOffice = .text:0x801BE454; // type:function size:0x158 scope:global -Init__13LuaPostOffice = .text:0x801BE5AC; // type:function size:0x38 scope:global -Shutdown__13LuaPostOffice = .text:0x801BE5E4; // type:function size:0x44 scope:global -RouteMessage__13LuaPostOfficeP22LuaMessageDeliveryInfo = .text:0x801BE628; // type:function size:0x34C scope:global -RegisterHandler__13LuaPostOfficeUiP9GActivity = .text:0x801BE974; // type:function size:0x294 scope:global -UnregisterHandler__13LuaPostOfficeUiP9GActivity = .text:0x801BEC08; // type:function size:0x1B0 scope:global -BuildMessageTable__22LuaMessageDeliveryInfo = .text:0x801BEDB8; // type:function size:0x64 scope:global -BindRawFunction__FP9lua_StatePCcPFP9lua_State_iT1 = .text:0x801BEE1C; // type:function size:0x64 scope:local -BindVoidFunction__FP9lua_StatePCcPFv_vT1 = .text:0x801BEE80; // type:function size:0x74 scope:local -__10LuaBindery = .text:0x801BEEF4; // type:function size:0x4 scope:global -_._10LuaBindery = .text:0x801BEEF8; // type:function size:0x28 scope:global -Init__10LuaBindery = .text:0x801BEF20; // type:function size:0x38 scope:global -Shutdown__10LuaBindery = .text:0x801BEF58; // type:function size:0x44 scope:global -LoadMetatable__10LuaBinderyP9lua_StatePCc = .text:0x801BEF9C; // type:function size:0x5C scope:global -AttachMetatable__10LuaBinderyP9lua_StatePCc = .text:0x801BEFF8; // type:function size:0x38 scope:global -GetGlobalTable__10LuaBinderyP9lua_StatePCc = .text:0x801BF030; // type:function size:0x90 scope:global -SetInGlobalTable__10LuaBinderyP9lua_StatePCc = .text:0x801BF0C0; // type:function size:0x54 scope:global -Table_Randomize__FP9lua_State = .text:0x801BF114; // type:function size:0xD4 scope:local -BindToGameCode__10LuaBinderyP9lua_State = .text:0x801BF1E8; // type:function size:0x119C scope:global -PushAttribValueFloat__FRC19LuaAttribAccessInfo = .text:0x801C0384; // type:function size:0x44 scope:local -PushAttribValueDouble__FRC19LuaAttribAccessInfo = .text:0x801C03C8; // type:function size:0x48 scope:local -PushAttribValueInt64__FRC19LuaAttribAccessInfo = .text:0x801C0410; // type:function size:0x50 scope:local -PushAttribValueInt32__FRC19LuaAttribAccessInfo = .text:0x801C0460; // type:function size:0x68 scope:local -PushAttribValueInt16__FRC19LuaAttribAccessInfo = .text:0x801C04C8; // type:function size:0x68 scope:local -PushAttribValueInt8__FRC19LuaAttribAccessInfo = .text:0x801C0530; // type:function size:0x6C scope:local -PushAttribValueUInt64__FRC19LuaAttribAccessInfo = .text:0x801C059C; // type:function size:0xA4 scope:local -PushAttribValueUInt32__FRC19LuaAttribAccessInfo = .text:0x801C0640; // type:function size:0x64 scope:local -PushAttribValueUInt16__FRC19LuaAttribAccessInfo = .text:0x801C06A4; // type:function size:0x64 scope:local -PushAttribValueUInt8__FRC19LuaAttribAccessInfo = .text:0x801C0708; // type:function size:0x64 scope:local -PushAttribValueBool__FRC19LuaAttribAccessInfo = .text:0x801C076C; // type:function size:0x50 scope:local -PushAttribValueStringKey__FRC19LuaAttribAccessInfo = .text:0x801C07BC; // type:function size:0x50 scope:local -PushAttribValueText__FRC19LuaAttribAccessInfo = .text:0x801C080C; // type:function size:0x44 scope:local -PushAttribValueChar__FRC19LuaAttribAccessInfo = .text:0x801C0850; // type:function size:0x4C scope:local -PushAttribValueRefSpec__FRC19LuaAttribAccessInfo = .text:0x801C089C; // type:function size:0x7C scope:local -IsSameInstance__FPC16GRuntimeInstanceT0 = .text:0x801C0918; // type:function size:0xAC scope:local -GRuntimeInstanceMeta__index__FP9lua_State = .text:0x801C09C4; // type:function size:0x108 scope:local -GRuntimeInstanceMeta__newindex__FP9lua_State = .text:0x801C0ACC; // type:function size:0xB8 scope:local -GRuntimeInstanceMeta__eq__FP9lua_State = .text:0x801C0B84; // type:function size:0xA8 scope:local -LuaAttribArrayInfoMeta__index__FP9lua_State = .text:0x801C0C2C; // type:function size:0x160 scope:local -LuaAttribArrayInfoMeta__newindex__FP9lua_State = .text:0x801C0D8C; // type:function size:0x8 scope:local -LuaAttribArrayInfoMeta__eq__FP9lua_State = .text:0x801C0D94; // type:function size:0xC8 scope:local -__13LuaAttributes = .text:0x801C0E5C; // type:function size:0x54 scope:global -_._13LuaAttributes = .text:0x801C0EB0; // type:function size:0x9C scope:global -Init__13LuaAttributes = .text:0x801C0F4C; // type:function size:0x38 scope:global -Shutdown__13LuaAttributes = .text:0x801C0F84; // type:function size:0x44 scope:global -BuildAttributeTypeTable__13LuaAttributes = .text:0x801C0FC8; // type:function size:0x174 scope:global -PushAttributeValue__13LuaAttributesRC19LuaAttribAccessInfob = .text:0x801C113C; // type:function size:0x164 scope:global -SetAttributeValue__13LuaAttributesRC19LuaAttribAccessInfo = .text:0x801C12A0; // type:function size:0xCC scope:global -BindAccessors__13LuaAttributesP9lua_State = .text:0x801C136C; // type:function size:0x180 scope:global -Activity_Run__FP16GRuntimeInstance = .text:0x801C14EC; // type:function size:0x54 scope:global -Activity_Suspend__FP16GRuntimeInstance = .text:0x801C1540; // type:function size:0x20 scope:global -Audio_SetFlag__FPCcb = .text:0x801C1560; // type:function size:0x18C scope:global -Audio_IsCopSpeechPlaying__Fv = .text:0x801C16EC; // type:function size:0x24 scope:global -Bin_GetNumChallengesPassed__Fi = .text:0x801C1710; // type:function size:0x40 scope:global -Bin_GetNumRacesWon__Fi = .text:0x801C1750; // type:function size:0x40 scope:global -Camera_SetGenericCamera__FPCcT0 = .text:0x801C1790; // type:function size:0x18C scope:global -MiniMap_AddEngagedRace__FP16GRuntimeInstance = .text:0x801C191C; // type:function size:0x3C scope:global -NIS_Play__FP16GRuntimeInstancePCcT1iT1T1 = .text:0x801C1958; // type:function size:0xD0 scope:global -Movie_PlayHackE3FMV__Fv = .text:0x801C1A28; // type:function size:0x4 scope:global -Debug_Print__FPCc = .text:0x801C1A2C; // type:function size:0xC scope:global -Debug_PrintInstance__FP16GRuntimeInstance = .text:0x801C1A38; // type:function size:0xC scope:global -Demo_SetRaceCompleteForFE__FP16GRuntimeInstance = .text:0x801C1A44; // type:function size:0x4 scope:global -Demo_StorePursuitRepForFE__FP16GRuntimeInstance = .text:0x801C1A48; // type:function size:0x4 scope:global -HUD_ShowMessage__FPCc = .text:0x801C1A4C; // type:function size:0x128 scope:global -HUD_ShowTimeExtension__Ff = .text:0x801C1B74; // type:function size:0x54 scope:global -Math_RandomInt__Fi = .text:0x801C1BC8; // type:function size:0x24 scope:global -Platform_IsNextGen__Fv = .text:0x801C1BEC; // type:function size:0x8 scope:global -Game_GetSimTime__Fv = .text:0x801C1BF4; // type:function size:0x20 scope:global -Game_AddPlayer__FP8IVehicle = .text:0x801C1C14; // type:function size:0x108 scope:local -Game_FindPerformanceCandidates__FRQ33UTL3Stdt4list2ZUiZ10_type_listUiRCQ37Physics4Info11Performance = .text:0x801C1D1C; // type:function size:0x5B0 scope:local -Game_MaxUniqueOpponents__Fv = .text:0x801C22CC; // type:function size:0x8 scope:global -Game_SetSplitGrid__Fv = .text:0x801C22D4; // type:function size:0x318 scope:global -Game_InitRacers__FP16GRuntimeInstance = .text:0x801C25EC; // type:function size:0x94C scope:global -Game_KnockoutRacer__FP8ISimable = .text:0x801C2F38; // type:function size:0x148 scope:global -Game_DetachCameraFromRacer__FP8ISimable = .text:0x801C3080; // type:function size:0x40 scope:global -Game_WarpPlayerToTrigger__FP16GRuntimeInstance = .text:0x801C30C0; // type:function size:0x100 scope:global -Game_SetPlayerStartPosition__FP16GRuntimeInstance = .text:0x801C31C0; // type:function size:0xBC scope:global -Game_ResetTrigger__FP16GRuntimeInstance = .text:0x801C327C; // type:function size:0x28 scope:global -Game_ShowTriggerIcon__FP16GRuntimeInstance = .text:0x801C32A4; // type:function size:0x28 scope:global -Game_HideTriggerIcon__FP16GRuntimeInstance = .text:0x801C32CC; // type:function size:0x28 scope:global -Game_SpawnCop__FP16GRuntimeInstancePCcbT2 = .text:0x801C32F4; // type:function size:0xC0 scope:global -Game_SpawnCharacter__FP16GRuntimeInstanceN20f = .text:0x801C33B4; // type:function size:0x8C scope:global -Game_UnspawnCharacter__FP16GRuntimeInstance = .text:0x801C3440; // type:function size:0x20 scope:global -Game_SendCharacterStimulus__FP16GRuntimeInstancePCc = .text:0x801C3460; // type:function size:0x11C scope:global -Game_SetRacerLapsLeft__Fii = .text:0x801C357C; // type:function size:0x2C scope:global -Game_SetRacerGoal__FiP16GRuntimeInstance = .text:0x801C35A8; // type:function size:0x158 scope:global -Game_NotifyCheckpointReached__FP8ISimablei = .text:0x801C3700; // type:function size:0x6C scope:global -Game_NotifyLapFinished__FP8ISimablei = .text:0x801C376C; // type:function size:0x1B8 scope:global -Game_NotifyRaceFinished__FP8ISimable = .text:0x801C3924; // type:function size:0x550 scope:global -Game_GetRacerIndex__FP8ISimable = .text:0x801C3E74; // type:function size:0xA4 scope:global -Game_RacerIsHuman__Fi = .text:0x801C3F18; // type:function size:0x70 scope:global -Game_PlayerIsLocal__FP8ISimable = .text:0x801C3F88; // type:function size:0x88 scope:global -Game_GetRacerElement__Fi = .text:0x801C4010; // type:function size:0x68 scope:global -Game_GetRacerCharacter__Fi = .text:0x801C4078; // type:function size:0x30 scope:global -Game_GetNumRacers__Fv = .text:0x801C40A8; // type:function size:0x28 scope:global -Game_GetSimableSpeedKmh__FP8ISimable = .text:0x801C40D0; // type:function size:0x74 scope:global -Game_IsActiveSpeedTrap__FP16GRuntimeInstance = .text:0x801C4144; // type:function size:0x128 scope:global -Game_IsActiveMenuGate__FP16GRuntimeInstance = .text:0x801C426C; // type:function size:0x98 scope:global -Game_NotifySpeedTrapTriggered__FP16GRuntimeInstanceT0P8ISimablef = .text:0x801C4304; // type:function size:0x2A4 scope:global -Game_NotifyRacePlacement__FP16GRuntimeInstanceP8ISimablei = .text:0x801C45A8; // type:function size:0x8C scope:global -Game_SaveStartPositions__Fv = .text:0x801C4634; // type:function size:0x54 scope:global -Game_RestoreStartPositions__Fv = .text:0x801C4688; // type:function size:0x1DC scope:global -Game_SetRaceActivity__FP16GRuntimeInstance = .text:0x801C4864; // type:function size:0x2C scope:global -Game_StartRace__FP16GRuntimeInstance = .text:0x801C4890; // type:function size:0x390 scope:global -Game_StartRaceTimers__Fv = .text:0x801C4C20; // type:function size:0x60 scope:global -Game_AbandonRace__Fv = .text:0x801C4C80; // type:function size:0x118 scope:global -Game_EnterPostRaceFlow__Fv = .text:0x801C4D98; // type:function size:0xE8 scope:global -Game_SetCopsEnabled__Fb = .text:0x801C4E80; // type:function size:0x70 scope:global -Game_NoNewPursuitsOrCops__Fv = .text:0x801C4EF0; // type:function size:0x44 scope:global -Game_ForcePursuitStart__Fi = .text:0x801C4F34; // type:function size:0x94 scope:global -Game_EnterEngagableTrigger__FP16GRuntimeInstance = .text:0x801C4FC8; // type:function size:0x38 scope:global -Game_ExitEngagableTrigger__FP16GRuntimeInstance = .text:0x801C5000; // type:function size:0x38 scope:global -Game_EnterGateZone__FP16GRuntimeInstancePCc = .text:0x801C5038; // type:function size:0x9C scope:global -Game_ExitGateZone__FP16GRuntimeInstancePCc = .text:0x801C50D4; // type:function size:0x8C scope:global -Game_DoZoneMenuAction__FP16GRuntimeInstance = .text:0x801C5160; // type:function size:0xFC scope:global -Game_ShowRaceOverSummary__Fv = .text:0x801C525C; // type:function size:0x50 scope:global -Game_HideRaceOverSummary__Fv = .text:0x801C52AC; // type:function size:0x4 scope:global -Game_SetAllStaging__Fb = .text:0x801C52B0; // type:function size:0x13C scope:global -Game_JackKnife__FP16GRuntimeInstance = .text:0x801C53EC; // type:function size:0xA8 scope:global -Game_SetTrafficSpeed__FP16GRuntimeInstanceff = .text:0x801C5494; // type:function size:0xD0 scope:global -Game_ShowPauseMenu__Fv = .text:0x801C5564; // type:function size:0x34 scope:global -Game_AwardCash__FP8ISimablef = .text:0x801C5598; // type:function size:0x20 scope:global -Game_AwardPoints__FP8ISimablef = .text:0x801C55B8; // type:function size:0xD8 scope:global -Game_ChallengeCompleted__Fv = .text:0x801C5690; // type:function size:0x6C scope:global -Game_UnlockRace__FP16GRuntimeInstance = .text:0x801C56FC; // type:function size:0xE8 scope:global -Game_IsRaceUnlocked__FP16GRuntimeInstance = .text:0x801C57E4; // type:function size:0x64 scope:global -Game_IsRaceCompleted__FP16GRuntimeInstance = .text:0x801C5848; // type:function size:0x64 scope:global -Game_AllRacersDone__Fv = .text:0x801C58AC; // type:function size:0x98 scope:global -Game_AllHumanPlayersDone__Fv = .text:0x801C5944; // type:function size:0x120 scope:global -Debug_ShowScreenMessage__FPCcf = .text:0x801C5A64; // type:function size:0xCC scope:global -Game_AwardPlayerBounty__Fi = .text:0x801C5B30; // type:function size:0x170 scope:global -Game_GetPlayerBounty__Fv = .text:0x801C5CA0; // type:function size:0xF4 scope:global -Game_NotifyCountdownDone__Fv = .text:0x801C5D94; // type:function size:0xD4 scope:global -Game_ResetCopsForRestart__Fv = .text:0x801C5E68; // type:function size:0x58 scope:global -Game_JumpToCarLot__Fv = .text:0x801C5EC0; // type:function size:0x40 scope:global -Game_JumpToSafeHouse__Fv = .text:0x801C5F00; // type:function size:0x34 scope:global -Game_GetPlayerElement__Fi = .text:0x801C5F34; // type:function size:0x64 scope:global -Game_BlowEngine__FP8ISimable = .text:0x801C5F98; // type:function size:0x64 scope:global -Game_ChallengeComplete__FP8ISimable = .text:0x801C5FFC; // type:function size:0x3C scope:global -Game_SabotageEngine__FP8ISimablef = .text:0x801C6038; // type:function size:0x74 scope:global -Game_ForceAIControl__Fi = .text:0x801C60AC; // type:function size:0x94 scope:global -Game_ClearAIControl__Fi = .text:0x801C6140; // type:function size:0x94 scope:global -Game_SetTimer__FPCcf = .text:0x801C61D4; // type:function size:0x2C scope:global -Game_KillTimer__FPCc = .text:0x801C6200; // type:function size:0x2C scope:global -Game_ShowGPS__Fb = .text:0x801C622C; // type:function size:0x2C scope:global -Game_NavigatePlayerTo__FP16GRuntimeInstanceT0fb = .text:0x801C6258; // type:function size:0x74 scope:global -Game_SimableDistance__FP8ISimableP16GRuntimeInstance = .text:0x801C62CC; // type:function size:0xA8 scope:global -Game_SimableAngle__FP8ISimableP16GRuntimeInstance = .text:0x801C6374; // type:function size:0x9C scope:global -Debug_Assert__FbPCc = .text:0x801C6410; // type:function size:0x4 scope:global -Game_NotifyFinished__FP16GRuntimeInstance = .text:0x801C6414; // type:function size:0x78 scope:global -Game_IsOnlineGame__Fv = .text:0x801C648C; // type:function size:0x14 scope:global -Game_IsLANGame__Fv = .text:0x801C64A0; // type:function size:0x14 scope:global -Game_SkipCareerIntro__Fv = .text:0x801C64B4; // type:function size:0x88 scope:global -Game_SetChanceOfRain__Ff = .text:0x801C653C; // type:function size:0x7C scope:global -Game_DoFade__Fv = .text:0x801C65B8; // type:function size:0x2C scope:global -Game_IntroduceRival__Fv = .text:0x801C65E4; // type:function size:0x4 scope:global -Game_PlayTutorial__Fv = .text:0x801C65E8; // type:function size:0x19C scope:global -Game_DoSafeHouseIntro__FP16GRuntimeInstance = .text:0x801C6784; // type:function size:0x8C scope:global -Game_IsCareerMode__Fv = .text:0x801C6810; // type:function size:0x38 scope:global -Game_IsSplitScreen__Fv = .text:0x801C6848; // type:function size:0x2C scope:global -Game_AllowEngageEvents__Fv = .text:0x801C6874; // type:function size:0x10 scope:global -Game_AllowMenuGates__Fv = .text:0x801C6884; // type:function size:0x10 scope:global -Game_AllowEngageSafehouse__Fv = .text:0x801C6894; // type:function size:0x10 scope:global -Game_SetHasRapSheet__Fv = .text:0x801C68A4; // type:function size:0x1C scope:global -Game_SetWorldHeat__Ff = .text:0x801C68C0; // type:function size:0x9C scope:global -FE_ShowLosingPostRaceScreen__Fv = .text:0x801C695C; // type:function size:0x24 scope:global -FE_ShowWinningPostRaceScreen__Fv = .text:0x801C6980; // type:function size:0x24 scope:global -FE_ShowPostRaceScreen__Fb = .text:0x801C69A4; // type:function size:0x220 scope:global -FE_ShowOnlinePostRaceScreen__Fv = .text:0x801C6BC4; // type:function size:0x8 scope:global -FE_ShowSpeedTrapScreen__Fff = .text:0x801C6BCC; // type:function size:0x84 scope:global -Game_SetTimeOfDay__FP16GRuntimeInstance = .text:0x801C6C50; // type:function size:0x80 scope:global -Game_ReloadWorld__FP16GRuntimeInstance = .text:0x801C6CD0; // type:function size:0x38 scope:global -Game_PreventPlayerBeingBusted__Fv = .text:0x801C6D08; // type:function size:0x54 scope:global -Game_DoSpecialSetup__FP16GRuntimeInstance = .text:0x801C6D5C; // type:function size:0x9C scope:global -Game_DoSpecialFinalization__FP16GRuntimeInstance = .text:0x801C6DF8; // type:function size:0x34 scope:global -Game_CalculateRanking__FP8ISimablei = .text:0x801C6E2C; // type:function size:0xE4 scope:global -Game_WarpToMarkerWhenRoaming__FP16GRuntimeInstance = .text:0x801C6F10; // type:function size:0x3C scope:global -negindex = .text:0x801C6F4C; // type:function size:0x6C scope:local -luaA_index = .text:0x801C6FB8; // type:function size:0x3C scope:local -luaA_indexAcceptable = .text:0x801C6FF4; // type:function size:0x50 scope:local -lua_atpanic = .text:0x801C7044; // type:function size:0x10 scope:global -lua_gettop = .text:0x801C7054; // type:function size:0x14 scope:global -lua_settop = .text:0x801C7068; // type:function size:0x70 scope:global -lua_insert = .text:0x801C70D8; // type:function size:0x68 scope:global -lua_pushvalue = .text:0x801C7140; // type:function size:0x4C scope:global -lua_type = .text:0x801C718C; // type:function size:0x34 scope:global -lua_isnumber = .text:0x801C71C0; // type:function size:0x58 scope:global -lua_isstring = .text:0x801C7218; // type:function size:0x30 scope:global -lua_tonumber = .text:0x801C7248; // type:function size:0x54 scope:global -lua_toboolean = .text:0x801C729C; // type:function size:0x54 scope:global -lua_tostring = .text:0x801C72F0; // type:function size:0x78 scope:global -lua_touserdata = .text:0x801C7368; // type:function size:0x54 scope:global -lua_userdatalen = .text:0x801C73BC; // type:function size:0x54 scope:global -lua_topointer = .text:0x801C7410; // type:function size:0x88 scope:global -lua_pushnil = .text:0x801C7498; // type:function size:0x1C scope:global -lua_pushnumber = .text:0x801C74B4; // type:function size:0x20 scope:global -lua_pushlstring = .text:0x801C74D4; // type:function size:0x48 scope:global -lua_pushstring = .text:0x801C751C; // type:function size:0x50 scope:global -lua_pushvfstring = .text:0x801C756C; // type:function size:0x20 scope:global -lua_pushfstring = .text:0x801C758C; // type:function size:0x94 scope:global -lua_pushcclosure = .text:0x801C7620; // type:function size:0xA4 scope:global -lua_pushboolean = .text:0x801C76C4; // type:function size:0x30 scope:global -lua_pushlightuserdata = .text:0x801C76F4; // type:function size:0x20 scope:global -lua_gettable = .text:0x801C7714; // type:function size:0x58 scope:global -lua_rawget = .text:0x801C776C; // type:function size:0x50 scope:global -lua_rawgeti = .text:0x801C77BC; // type:function size:0x5C scope:global -lua_newtable = .text:0x801C7818; // type:function size:0x50 scope:global -lua_getmetatable = .text:0x801C7868; // type:function size:0x94 scope:global -lua_settable = .text:0x801C78FC; // type:function size:0x50 scope:global -lua_rawset = .text:0x801C794C; // type:function size:0x5C scope:global -lua_rawseti = .text:0x801C79A8; // type:function size:0x60 scope:global -lua_setmetatable = .text:0x801C7A08; // type:function size:0x84 scope:global -lua_call = .text:0x801C7A8C; // type:function size:0x30 scope:global -f_call = .text:0x801C7ABC; // type:function size:0x28 scope:local -lua_pcall = .text:0x801C7AE4; // type:function size:0x84 scope:global -lua_load = .text:0x801C7B68; // type:function size:0x60 scope:global -lua_setgcthreshold = .text:0x801C7BC8; // type:function size:0x30 scope:global -lua_error = .text:0x801C7BF8; // type:function size:0x24 scope:global -lua_next = .text:0x801C7C1C; // type:function size:0x60 scope:global -lua_concat = .text:0x801C7C7C; // type:function size:0x98 scope:global -lua_newuserdata = .text:0x801C7D14; // type:function size:0x50 scope:global -currentpc = .text:0x801C7D64; // type:function size:0x4C scope:local -currentline = .text:0x801C7DB0; // type:function size:0x64 scope:local -luaG_inithooks = .text:0x801C7E14; // type:function size:0x50 scope:global -lua_getstack = .text:0x801C7E64; // type:function size:0xA0 scope:global -getluaproto = .text:0x801C7F04; // type:function size:0x28 scope:local -funcinfo = .text:0x801C7F2C; // type:function size:0xA0 scope:local -travglobals = .text:0x801C7FCC; // type:function size:0x84 scope:local -info_tailcall = .text:0x801C8050; // type:function size:0x80 scope:local -auxgetinfo = .text:0x801C80D0; // type:function size:0x160 scope:local -lua_getinfo = .text:0x801C8230; // type:function size:0x118 scope:global -precheck = .text:0x801C8348; // type:function size:0x54 scope:local -checkopenop = .text:0x801C839C; // type:function size:0x50 scope:local -checkRK = .text:0x801C83EC; // type:function size:0x34 scope:local -luaG_symbexec = .text:0x801C8420; // type:function size:0x434 scope:local -luaG_checkcode = .text:0x801C8854; // type:function size:0x28 scope:global -kname = .text:0x801C887C; // type:function size:0x38 scope:local -getobjname = .text:0x801C88B4; // type:function size:0x13C scope:local -getfuncname = .text:0x801C89F0; // type:function size:0x9C scope:local -isinstack = .text:0x801C8A8C; // type:function size:0x34 scope:local -luaG_typeerror = .text:0x801C8AC0; // type:function size:0xC8 scope:global -luaG_concaterror = .text:0x801C8B88; // type:function size:0x38 scope:global -luaG_aritherror = .text:0x801C8BC0; // type:function size:0x5C scope:global -luaG_ordererror = .text:0x801C8C1C; // type:function size:0x74 scope:global -addinfo = .text:0x801C8C90; // type:function size:0x88 scope:local -luaG_errormsg = .text:0x801C8D18; // type:function size:0xC0 scope:global -luaG_runerror = .text:0x801C8DD8; // type:function size:0xB8 scope:global -seterrorobj = .text:0x801C8E90; // type:function size:0xB4 scope:local -luaD_throw = .text:0x801C8F44; // type:function size:0x44 scope:global -luaD_rawrunprotected = .text:0x801C8F88; // type:function size:0x78 scope:global -restore_stack_limit = .text:0x801C9000; // type:function size:0x70 scope:local -correctstack = .text:0x801C9070; // type:function size:0x90 scope:local -luaD_reallocstack = .text:0x801C9100; // type:function size:0x70 scope:global -luaD_reallocCI = .text:0x801C9170; // type:function size:0x70 scope:global -luaD_growstack = .text:0x801C91E0; // type:function size:0x44 scope:global -luaD_growCI = .text:0x801C9224; // type:function size:0x6C scope:local -luaD_callhook = .text:0x801C9290; // type:function size:0xF4 scope:global -adjust_varargs = .text:0x801C9384; // type:function size:0x190 scope:local -tryfuncTM = .text:0x801C9514; // type:function size:0xD0 scope:local -luaD_precall = .text:0x801C95E4; // type:function size:0x1CC scope:global -callrethooks = .text:0x801C97B0; // type:function size:0x88 scope:local -luaD_poscall = .text:0x801C9838; // type:function size:0xD0 scope:global -luaD_call = .text:0x801C9908; // type:function size:0xB0 scope:global -luaD_pcall = .text:0x801C99B8; // type:function size:0xA4 scope:global -f_parser = .text:0x801C9A5C; // type:function size:0xAC scope:local -luaD_protectedparser = .text:0x801C9B08; // type:function size:0x9C scope:global -luaF_newCclosure = .text:0x801C9BA4; // type:function size:0x68 scope:global -luaF_newLclosure = .text:0x801C9C0C; // type:function size:0x7C scope:global -luaF_findupval = .text:0x801C9C88; // type:function size:0x98 scope:global -luaF_close = .text:0x801C9D20; // type:function size:0x78 scope:global -luaF_newproto = .text:0x801C9D98; // type:function size:0xA0 scope:global -luaF_getlocalname = .text:0x801C9E38; // type:function size:0x7C scope:global -luaM_setallocator = .text:0x801C9EB4; // type:function size:0x14 scope:global -luaM_realloc = .text:0x801C9EC8; // type:function size:0x108 scope:global -luaO_log2 = .text:0x801C9FD0; // type:function size:0xA4 scope:global -luaO_rawequalObj = .text:0x801CA074; // type:function size:0x94 scope:global -luaO_str2d = .text:0x801CA108; // type:function size:0x9C scope:global -pushstr = .text:0x801CA1A4; // type:function size:0x80 scope:local -luaO_pushvfstring = .text:0x801CA224; // type:function size:0x30C scope:global -luaO_pushfstring = .text:0x801CA530; // type:function size:0x94 scope:global -luaO_chunkid = .text:0x801CA5C4; // type:function size:0x138 scope:global -default_panic = .text:0x801CA6FC; // type:function size:0x8 scope:local -mallocstate = .text:0x801CA704; // type:function size:0x40 scope:local -freestate = .text:0x801CA744; // type:function size:0x2C scope:local -stack_init = .text:0x801CA770; // type:function size:0xCC scope:local -freestack = .text:0x801CA83C; // type:function size:0x60 scope:local -f_luaopen = .text:0x801CA89C; // type:function size:0x178 scope:local -preinit_state = .text:0x801CAA14; // type:function size:0x4C scope:local -close_state = .text:0x801CAA60; // type:function size:0xB8 scope:local -lua_open = .text:0x801CAB18; // type:function size:0x88 scope:global -callallgcTM = .text:0x801CABA0; // type:function size:0x20 scope:local -lua_close = .text:0x801CABC0; // type:function size:0x88 scope:global -luaS_freeall = .text:0x801CAC48; // type:function size:0x38 scope:global -luaS_resize = .text:0x801CAC80; // type:function size:0xEC scope:global -newlstr = .text:0x801CAD6C; // type:function size:0xE4 scope:local -luaS_newlstr = .text:0x801CAE50; // type:function size:0xE0 scope:global -luaS_newudata = .text:0x801CAF30; // type:function size:0x78 scope:global -hashnum = .text:0x801CAFA8; // type:function size:0x50 scope:local -luaH_mainposition = .text:0x801CAFF8; // type:function size:0xD8 scope:global -arrayindex = .text:0x801CB0D0; // type:function size:0x74 scope:local -luaH_index = .text:0x801CB144; // type:function size:0xBC scope:local -luaH_next = .text:0x801CB200; // type:function size:0x12C scope:global -computesizes = .text:0x801CB32C; // type:function size:0xC4 scope:local -numuse = .text:0x801CB3F0; // type:function size:0x170 scope:local -setarrayvector = .text:0x801CB560; // type:function size:0x74 scope:local -setnodevector = .text:0x801CB5D4; // type:function size:0xE0 scope:local -resize = .text:0x801CB6B4; // type:function size:0x1B4 scope:local -rehash = .text:0x801CB868; // type:function size:0x5C scope:local -luaH_new = .text:0x801CB8C4; // type:function size:0xA4 scope:global -newkey = .text:0x801CB968; // type:function size:0x130 scope:local -luaH_getany = .text:0x801CBA98; // type:function size:0x7C scope:local -luaH_getnum = .text:0x801CBB14; // type:function size:0xB4 scope:global -luaH_getstr = .text:0x801CBBC8; // type:function size:0x5C scope:global -luaH_get = .text:0x801CBC24; // type:function size:0x90 scope:global -luaH_set = .text:0x801CBCB4; // type:function size:0x84 scope:global -luaH_setnum = .text:0x801CBD38; // type:function size:0x90 scope:global -luaT_init = .text:0x801CBDC8; // type:function size:0x84 scope:global -luaT_gettm = .text:0x801CBE4C; // type:function size:0x58 scope:global -luaT_gettmbyobj = .text:0x801CBEA4; // type:function size:0x5C scope:global -unexpectedEOZ = .text:0x801CBF00; // type:function size:0x34 scope:local -ezgetc = .text:0x801CBF34; // type:function size:0x7C scope:local -ezread = .text:0x801CBFB0; // type:function size:0x40 scope:local -LoadBlock = .text:0x801CBFF0; // type:function size:0x70 scope:local -LoadVector = .text:0x801CC060; // type:function size:0x9C scope:local -LoadInt = .text:0x801CC0FC; // type:function size:0x5C scope:local -LoadSize = .text:0x801CC158; // type:function size:0x2C scope:local -LoadNumber = .text:0x801CC184; // type:function size:0x2C scope:local -LoadString = .text:0x801CC1B0; // type:function size:0x70 scope:local -LoadCode = .text:0x801CC220; // type:function size:0x6C scope:local -LoadLocals = .text:0x801CC28C; // type:function size:0xA8 scope:local -LoadLines = .text:0x801CC334; // type:function size:0x6C scope:local -LoadUpvalues = .text:0x801CC3A0; // type:function size:0xAC scope:local -LoadConstants = .text:0x801CC44C; // type:function size:0x14C scope:local -LoadFunction = .text:0x801CC598; // type:function size:0xF4 scope:local -LoadSignature = .text:0x801CC68C; // type:function size:0x7C scope:local -TestSize = .text:0x801CC708; // type:function size:0x60 scope:local -LoadHeader = .text:0x801CC768; // type:function size:0x1C8 scope:local -LoadChunk = .text:0x801CC930; // type:function size:0x38 scope:local -luaU_undump = .text:0x801CC968; // type:function size:0x6C scope:global -luaU_endianness = .text:0x801CC9D4; // type:function size:0x8 scope:global -luaV_tonumber = .text:0x801CC9DC; // type:function size:0x70 scope:global -luaV_tostring = .text:0x801CCA4C; // type:function size:0x80 scope:global -traceexec = .text:0x801CCACC; // type:function size:0x134 scope:local -callTMres = .text:0x801CCC00; // type:function size:0xA4 scope:local -callTM = .text:0x801CCCA4; // type:function size:0xAC scope:local -luaV_index = .text:0x801CCD50; // type:function size:0xB0 scope:local -luaV_getnotable = .text:0x801CCE00; // type:function size:0x9C scope:local -luaV_gettable = .text:0x801CCE9C; // type:function size:0x9C scope:global -luaV_settable = .text:0x801CCF38; // type:function size:0x130 scope:global -call_binTM = .text:0x801CD068; // type:function size:0xA8 scope:local -get_compTM = .text:0x801CD110; // type:function size:0xE0 scope:local -call_orderTM = .text:0x801CD1F0; // type:function size:0xBC scope:local -luaV_strcmp = .text:0x801CD2AC; // type:function size:0x90 scope:local -luaV_lessthan = .text:0x801CD33C; // type:function size:0xB4 scope:global -luaV_lessequal = .text:0x801CD3F0; // type:function size:0xF0 scope:local -luaV_equalval = .text:0x801CD4E0; // type:function size:0x138 scope:global -luaV_concat = .text:0x801CD618; // type:function size:0x1E0 scope:global -Arith = .text:0x801CD7F8; // type:function size:0x1A4 scope:local -luaV_execute = .text:0x801CD99C; // type:function size:0xFCC scope:global -luaZ_fill = .text:0x801CE968; // type:function size:0x74 scope:global -luaZ_lookahead = .text:0x801CE9DC; // type:function size:0x68 scope:global -luaZ_init = .text:0x801CEA44; // type:function size:0x1C scope:global -luaZ_read = .text:0x801CEA60; // type:function size:0xBC scope:global -luaZ_openspace = .text:0x801CEB1C; // type:function size:0x60 scope:global -luaL_argerror = .text:0x801CEB7C; // type:function size:0xC8 scope:global -luaL_where = .text:0x801CEC44; // type:function size:0x88 scope:global -luaL_error = .text:0x801CECCC; // type:function size:0xCC scope:global -luaL_newmetatable = .text:0x801CED98; // type:function size:0xB4 scope:global -luaL_getmetatable = .text:0x801CEE4C; // type:function size:0x38 scope:global -luaL_checkudata = .text:0x801CEE84; // type:function size:0x9C scope:global -checkint = .text:0x801CEF20; // type:function size:0x70 scope:local -getsizes = .text:0x801CEF90; // type:function size:0xC4 scope:local -luaL_getn = .text:0x801CF054; // type:function size:0x10C scope:global -getS = .text:0x801CF160; // type:function size:0x28 scope:local -luaL_loadbuffer = .text:0x801CF188; // type:function size:0x34 scope:global -callalert = .text:0x801CF1BC; // type:function size:0xB8 scope:local -aux_do = .text:0x801CF274; // type:function size:0x54 scope:local -lua_dobuffer = .text:0x801CF2C8; // type:function size:0x38 scope:global -luaX_init = .text:0x801CF300; // type:function size:0x4 scope:global -luaY_parser = .text:0x801CF304; // type:function size:0x8 scope:global -luaC_separateudata = .text:0x801CF30C; // type:function size:0x8 scope:global -luaC_callGCTM = .text:0x801CF314; // type:function size:0x4 scope:global -luaC_sweep = .text:0x801CF318; // type:function size:0x4 scope:global -luaC_link = .text:0x801CF31C; // type:function size:0x4 scope:global -_M_erase__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZPvZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZPvZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZPvZ23_type_LuaLargeFreeBlockPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCUiZPv = .text:0x801CF320; // type:function size:0x68 scope:global -clear__Q24_STLt10_List_base2ZPvZQ33UTL3Stdt9Allocator2ZPvZ23_type_LuaEmergencyAlloc = .text:0x801CF388; // type:function size:0x78 scope:global -_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZPvZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZPvZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZPvZ23_type_LuaLargeFreeBlockPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZPvT1 = .text:0x801CF400; // type:function size:0x13C scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZPvZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZPvZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZPvZ23_type_LuaLargeFreeBlockRCQ24_STLt4pair2ZCUiZPv = .text:0x801CF53C; // type:function size:0x118 scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZPvZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZPvZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZPvZ23_type_LuaLargeFreeBlockGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZPvZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZPvRCQ24_STLt4pair2ZCUiZPv = .text:0x801CF654; // type:function size:0x26C scope:global -_M_erase__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZ32_type_ID_LuaMessageSubscriberMapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityList = .text:0x801CF8C0; // type:function size:0x90 scope:global -_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZ32_type_ID_LuaMessageSubscriberMapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListT1 = .text:0x801CF950; // type:function size:0x144 scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZ32_type_ID_LuaMessageSubscriberMapRCQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityList = .text:0x801CFA94; // type:function size:0x118 scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZ32_type_ID_LuaMessageSubscriberMapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListRCQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityList = .text:0x801CFBAC; // type:function size:0x26C scope:global -reserve__Q24_STLt6vector2ZP9GActivityZQ33UTL3Stdt9Allocator2ZP9GActivityZ24_type_ID_LuaActivityListUi = .text:0x801CFE18; // type:function size:0x11C scope:global -find__H2ZPP9GActivityZP9GActivity_4_STLX01X01RCX11_X01 = .text:0x801CFF34; // type:function size:0xB0 scope:global -BindVoidFunction__H1ZP16GRuntimeInstance_P9lua_StatePCcPFX01_vT1_v = .text:0x801CFFE4; // type:function size:0x74 scope:local -VoidFunctionArg2Thunk__H2ZPCcZb_P9lua_State_i = .text:0x801D0058; // type:function size:0x70 scope:local -BindVoidFunction__H2ZPCcZb_P9lua_StatePCcPFX01X11_vT1_v = .text:0x801D00C8; // type:function size:0x74 scope:local -BindFunction__H1Zb_P9lua_StatePCcPFv_X01T1_v = .text:0x801D013C; // type:function size:0x74 scope:local -FunctionArg1Thunk__H2ZiZi_P9lua_State_i = .text:0x801D01B0; // type:function size:0x84 scope:local -BindFunction__H2ZiZi_P9lua_StatePCcPFX11_X01T1_v = .text:0x801D0234; // type:function size:0x74 scope:local -VoidFunctionArg2Thunk__H2ZPCcZPCc_P9lua_State_i = .text:0x801D02A8; // type:function size:0x64 scope:local -BindVoidFunction__H2ZPCcZPCc_P9lua_StatePCcPFX01X11_vT1_v = .text:0x801D030C; // type:function size:0x74 scope:local -VoidFunctionArg6Thunk__H6ZP16GRuntimeInstanceZPCcZPCcZiZPCcZPCc_P9lua_State_i = .text:0x801D0380; // type:function size:0xC8 scope:local -BindVoidFunction__H6ZP16GRuntimeInstanceZPCcZPCcZiZPCcZPCc_P9lua_StatePCcPFX01X11X21X31X41X51_vT1_v = .text:0x801D0448; // type:function size:0x74 scope:local -BindVoidFunction__H1ZPCc_P9lua_StatePCcPFX01_vT1_v = .text:0x801D04BC; // type:function size:0x74 scope:local -VoidFunctionArg2Thunk__H2ZPCcZf_P9lua_State_i = .text:0x801D0530; // type:function size:0x60 scope:local -BindVoidFunction__H2ZPCcZf_P9lua_StatePCcPFX01X11_vT1_v = .text:0x801D0590; // type:function size:0x74 scope:local -BindVoidFunction__H1Zf_P9lua_StatePCcPFX01_vT1_v = .text:0x801D0604; // type:function size:0x74 scope:local -VoidFunctionArg2Thunk__H2ZP8ISimableZf_P9lua_State_i = .text:0x801D0678; // type:function size:0xAC scope:local -BindVoidFunction__H2ZP8ISimableZf_P9lua_StatePCcPFX01X11_vT1_v = .text:0x801D0724; // type:function size:0x74 scope:local -BindVoidFunction__H1ZP8ISimable_P9lua_StatePCcPFX01_vT1_v = .text:0x801D0798; // type:function size:0x74 scope:local -BindVoidFunction__H1Zi_P9lua_StatePCcPFX01_vT1_v = .text:0x801D080C; // type:function size:0x74 scope:local -VoidFunctionArg2Thunk__H2ZiZP16GRuntimeInstance_P9lua_State_i = .text:0x801D0880; // type:function size:0x78 scope:local -BindVoidFunction__H2ZiZP16GRuntimeInstance_P9lua_StatePCcPFX01X11_vT1_v = .text:0x801D08F8; // type:function size:0x74 scope:local -VoidFunctionArg2Thunk__H2ZiZi_P9lua_State_i = .text:0x801D096C; // type:function size:0x74 scope:local -BindVoidFunction__H2ZiZi_P9lua_StatePCcPFX01X11_vT1_v = .text:0x801D09E0; // type:function size:0x74 scope:local -VoidFunctionArg3Thunk__H3ZP16GRuntimeInstanceZP8ISimableZi_P9lua_State_i = .text:0x801D0A54; // type:function size:0xD8 scope:local -BindVoidFunction__H3ZP16GRuntimeInstanceZP8ISimableZi_P9lua_StatePCcPFX01X11X21_vT1_v = .text:0x801D0B2C; // type:function size:0x74 scope:local -VoidFunctionArg4Thunk__H4ZP16GRuntimeInstanceZP16GRuntimeInstanceZP8ISimableZf_P9lua_State_i = .text:0x801D0BA0; // type:function size:0xEC scope:local -BindVoidFunction__H4ZP16GRuntimeInstanceZP16GRuntimeInstanceZP8ISimableZf_P9lua_StatePCcPFX01X11X21X31_vT1_v = .text:0x801D0C8C; // type:function size:0x74 scope:local -VoidFunctionArg2Thunk__H2ZP8ISimableZi_P9lua_State_i = .text:0x801D0D00; // type:function size:0xB8 scope:local -BindVoidFunction__H2ZP8ISimableZi_P9lua_StatePCcPFX01X11_vT1_v = .text:0x801D0DB8; // type:function size:0x74 scope:local -BindVoidFunction__H1Zb_P9lua_StatePCcPFX01_vT1_v = .text:0x801D0E2C; // type:function size:0x74 scope:local -VoidFunctionArg2Thunk__H2ZP16GRuntimeInstanceZPCc_P9lua_State_i = .text:0x801D0EA0; // type:function size:0x70 scope:local -BindVoidFunction__H2ZP16GRuntimeInstanceZPCc_P9lua_StatePCcPFX01X11_vT1_v = .text:0x801D0F10; // type:function size:0x74 scope:local -VoidFunctionArg3Thunk__H3ZP16GRuntimeInstanceZfZf_P9lua_State_i = .text:0x801D0F84; // type:function size:0x8C scope:local -BindVoidFunction__H3ZP16GRuntimeInstanceZfZf_P9lua_StatePCcPFX01X11X21_vT1_v = .text:0x801D1010; // type:function size:0x74 scope:local -VoidFunctionArg4Thunk__H4ZP16GRuntimeInstanceZPCcZbZb_P9lua_State_i = .text:0x801D1084; // type:function size:0xB0 scope:local -BindVoidFunction__H4ZP16GRuntimeInstanceZPCcZbZb_P9lua_StatePCcPFX01X11X21X31_vT1_v = .text:0x801D1134; // type:function size:0x74 scope:local -VoidFunctionArg4Thunk__H4ZP16GRuntimeInstanceZP16GRuntimeInstanceZP16GRuntimeInstanceZf_P9lua_State_i = .text:0x801D11A8; // type:function size:0xAC scope:local -BindVoidFunction__H4ZP16GRuntimeInstanceZP16GRuntimeInstanceZP16GRuntimeInstanceZf_P9lua_StatePCcPFX01X11X21X31_vT1_v = .text:0x801D1254; // type:function size:0x74 scope:local -FunctionArg1Thunk__H2ZbZP16GRuntimeInstance_P9lua_State_i = .text:0x801D12C8; // type:function size:0x6C scope:local -BindFunction__H2ZbZP16GRuntimeInstance_P9lua_StatePCcPFX11_X01T1_v = .text:0x801D1334; // type:function size:0x74 scope:local -BindFunction__H1Zf_P9lua_StatePCcPFv_X01T1_v = .text:0x801D13A8; // type:function size:0x74 scope:local -FunctionArg1Thunk__H2ZiZP8ISimable_P9lua_State_i = .text:0x801D141C; // type:function size:0xBC scope:local -BindFunction__H2ZiZP8ISimable_P9lua_StatePCcPFX11_X01T1_v = .text:0x801D14D8; // type:function size:0x74 scope:local -FunctionArg1Thunk__H2ZP8ISimableZi_P9lua_State_i = .text:0x801D154C; // type:function size:0x9C scope:local -BindFunction__H2ZP8ISimableZi_P9lua_StatePCcPFX11_X01T1_v = .text:0x801D15E8; // type:function size:0x74 scope:local -FunctionArg1Thunk__H2ZP16GRuntimeInstanceZi_P9lua_State_i = .text:0x801D165C; // type:function size:0x98 scope:local -BindFunction__H2ZP16GRuntimeInstanceZi_P9lua_StatePCcPFX11_X01T1_v = .text:0x801D16F4; // type:function size:0x74 scope:local -BindFunction__H1Zi_P9lua_StatePCcPFv_X01T1_v = .text:0x801D1768; // type:function size:0x74 scope:local -FunctionArg1Thunk__H2ZfZP8ISimable_P9lua_State_i = .text:0x801D17DC; // type:function size:0x98 scope:local -BindFunction__H2ZfZP8ISimable_P9lua_StatePCcPFX11_X01T1_v = .text:0x801D1874; // type:function size:0x74 scope:local -FunctionArg1Thunk__H2ZbZi_P9lua_State_i = .text:0x801D18E8; // type:function size:0x64 scope:local -BindFunction__H2ZbZi_P9lua_StatePCcPFX11_X01T1_v = .text:0x801D194C; // type:function size:0x74 scope:local -FunctionArg1Thunk__H2ZbZP8ISimable_P9lua_State_i = .text:0x801D19C0; // type:function size:0x9C scope:local -BindFunction__H2ZbZP8ISimable_P9lua_StatePCcPFX11_X01T1_v = .text:0x801D1A5C; // type:function size:0x74 scope:local -FunctionArg2Thunk__H3ZfZP8ISimableZP16GRuntimeInstance_P9lua_State_i = .text:0x801D1AD0; // type:function size:0xC4 scope:local -BindFunction__H3ZfZP8ISimableZP16GRuntimeInstance_P9lua_StatePCcPFX11X21_X01T1_v = .text:0x801D1B94; // type:function size:0x74 scope:local -BindSingleton__H1Z11GRaceStatus_P9lua_StatePCcPX01T1_v = .text:0x801D1C08; // type:function size:0x68 scope:local -BindVoidMethod__H1Z11GRaceStatus_P9lua_StatePCcT1PMX01FPX01_v_v = .text:0x801D1C70; // type:function size:0x84 scope:local -BindVoidMethod__H2Z11GRaceStatusZP16GRuntimeInstance_P9lua_StatePCcT1PMX01FPX01X11_v_v = .text:0x801D1CF4; // type:function size:0x84 scope:local -VoidMethodArg2Thunk__H3Z11GRaceStatusZP16GRuntimeInstanceZP16GRuntimeInstance_P9lua_State_i = .text:0x801D1D78; // type:function size:0xE8 scope:local -BindVoidMethod__H3Z11GRaceStatusZP16GRuntimeInstanceZP16GRuntimeInstance_P9lua_StatePCcT1PMX01FPX01X11X21_v_v = .text:0x801D1E60; // type:function size:0x84 scope:local -BindVoidMethod__H2Z11GRaceStatusZb_P9lua_StatePCcT1PMX01FPX01X11_v_v = .text:0x801D1EE4; // type:function size:0x84 scope:local -BindVoidMethod__H2Z11GRaceStatusZf_P9lua_StatePCcT1PMX01FPX01X11_v_v = .text:0x801D1F68; // type:function size:0x84 scope:local -BindMethod__H2ZbZ8ISimable_P9lua_StatePCcT1PMX11CFPCX11_X01_v = .text:0x801D1FEC; // type:function size:0x84 scope:local -VoidFunctionArg4Thunk__H4ZP16GRuntimeInstanceZP16GRuntimeInstanceZfZb_P9lua_State_i = .text:0x801D2070; // type:function size:0xB8 scope:local -BindVoidFunction__H4ZP16GRuntimeInstanceZP16GRuntimeInstanceZfZb_P9lua_StatePCcPFX01X11X21X31_vT1_v = .text:0x801D2128; // type:function size:0x74 scope:local -VoidFunctionArg2Thunk__H2ZbZPCc_P9lua_State_i = .text:0x801D219C; // type:function size:0x70 scope:local -BindVoidFunction__H2ZbZPCc_P9lua_StatePCcPFX01X11_vT1_v = .text:0x801D220C; // type:function size:0x74 scope:local -FunctionArg2Thunk__H3ZiZP8ISimableZi_P9lua_State_i = .text:0x801D2280; // type:function size:0xE4 scope:local -BindFunction__H3ZiZP8ISimableZi_P9lua_StatePCcPFX11X21_X01T1_v = .text:0x801D2364; // type:function size:0x74 scope:local -Get__H1Zf_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D23D8; // type:function size:0x50 scope:global -Get__H1Zd_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D2428; // type:function size:0x50 scope:global -Get__H1Zx_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D2478; // type:function size:0x50 scope:global -Get__H1Zi_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D24C8; // type:function size:0x50 scope:global -Get__H1Zs_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D2518; // type:function size:0x50 scope:global -Get__H1ZSc_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D2568; // type:function size:0x50 scope:global -Get__H1ZUx_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D25B8; // type:function size:0x50 scope:global -Get__H1ZUi_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D2608; // type:function size:0x50 scope:global -Get__H1ZUs_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D2658; // type:function size:0x50 scope:global -Get__H1ZUc_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D26A8; // type:function size:0x50 scope:global -Get__H1Zb_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D26F8; // type:function size:0x50 scope:global -Get__H1ZQ26Attrib9StringKey_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D2748; // type:function size:0x50 scope:global -Get__H1ZPCc_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D2798; // type:function size:0x50 scope:global -Get__H1Zc_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D27E8; // type:function size:0x50 scope:global -_M_erase__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZ18LuaAttribAccessorsZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZ18LuaAttribAccessorsZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2Z18LuaAttribAccessorsZ9_type_mapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCUiZ18LuaAttribAccessors = .text:0x801D2838; // type:function size:0x68 scope:global -_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZ18LuaAttribAccessorsZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZ18LuaAttribAccessorsZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2Z18LuaAttribAccessorsZ9_type_mapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZ18LuaAttribAccessorsT1 = .text:0x801D28A0; // type:function size:0x14C scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZ18LuaAttribAccessorsZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZ18LuaAttribAccessorsZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2Z18LuaAttribAccessorsZ9_type_mapRCQ24_STLt4pair2ZCUiZ18LuaAttribAccessors = .text:0x801D29EC; // type:function size:0x118 scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZ18LuaAttribAccessorsZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZ18LuaAttribAccessorsZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2Z18LuaAttribAccessorsZ9_type_mapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZ18LuaAttribAccessorsZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZ18LuaAttribAccessorsRCQ24_STLt4pair2ZCUiZ18LuaAttribAccessors = .text:0x801D2B04; // type:function size:0x26C scope:global -clear__Q24_STLt10_List_base2ZUiZQ33UTL3Stdt9Allocator2ZUiZ10_type_list = .text:0x801D2D70; // type:function size:0x78 scope:global -reserve__Q24_STLt6vector2ZUiZQ33UTL3Stdt9Allocator2ZUiZ19_type_ShuffleVectorUi = .text:0x801D2DE8; // type:function size:0x11C scope:global -__static_initialization_and_destruction_0 = .text:0x801D2F04; // type:function size:0x50 scope:local -__Q33UTL3Stdt3map3ZUiZPvZ23_type_LuaLargeFreeBlock = .text:0x801D2F54; // type:function size:0x74 scope:global -__Q33UTL3Stdt3map3ZUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZ32_type_ID_LuaMessageSubscriberMap = .text:0x801D2FC8; // type:function size:0x74 scope:global -__Q33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListRCQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityList = .text:0x801D303C; // type:function size:0xAC scope:global -_IHandle__13IOnlinePlayer = .text:0x801D30E8; // type:function size:0xC scope:global -__Q33UTL3Stdt3map3ZUiZ18LuaAttribAccessorsZ9_type_map = .text:0x801D30F4; // type:function size:0x74 scope:global -Thunk__10VoidBinderP9lua_State = .text:0x801D3168; // type:function size:0x30 scope:global -_IHandle__13IEngineDamage = .text:0x801D3198; // type:function size:0xC scope:global -_GetKind__12MNISComplete = .text:0x801D31A4; // type:function size:0x64 scope:global -_GetKind__16MNotifySpeedTrap = .text:0x801D3208; // type:function size:0x64 scope:global -_GetKind__20MNotifyRacePlacement = .text:0x801D326C; // type:function size:0x64 scope:global -_GetKind__17MNotifyKnockedOut = .text:0x801D32D0; // type:function size:0x64 scope:global -_GetKind__22MNotifyChallengePassed = .text:0x801D3334; // type:function size:0x64 scope:global -_GetKind__15MNotifyFinished = .text:0x801D3398; // type:function size:0x64 scope:global -Thunk__Q210VoidBindert4Arg11ZP16GRuntimeInstanceP9lua_State = .text:0x801D33FC; // type:function size:0x60 scope:global -Thunk__t6Binder1ZbP9lua_State = .text:0x801D345C; // type:function size:0x48 scope:global -Thunk__Q210VoidBindert4Arg11ZPCcP9lua_State = .text:0x801D34A4; // type:function size:0x4C scope:global -Thunk__Q210VoidBindert4Arg11ZfP9lua_State = .text:0x801D34F0; // type:function size:0x4C scope:global -Thunk__Q210VoidBindert4Arg11ZP8ISimableP9lua_State = .text:0x801D353C; // type:function size:0x90 scope:global -Thunk__Q210VoidBindert4Arg11ZiP9lua_State = .text:0x801D35CC; // type:function size:0x58 scope:global -Thunk__Q210VoidBindert4Arg11ZbP9lua_State = .text:0x801D3624; // type:function size:0x5C scope:global -Thunk__t6Binder1ZfP9lua_State = .text:0x801D3680; // type:function size:0x44 scope:global -Thunk__t6Binder1ZiP9lua_State = .text:0x801D36C4; // type:function size:0x68 scope:global -ThunkMethod__t16VoidMethodBinder1Z11GRaceStatusP9lua_State = .text:0x801D372C; // type:function size:0xAC scope:global -ThunkMethod__Q2t16VoidMethodBinder1Z11GRaceStatust4Arg11ZP16GRuntimeInstanceP9lua_State = .text:0x801D37D8; // type:function size:0xC8 scope:global -ThunkMethod__Q2t16VoidMethodBinder1Z11GRaceStatust4Arg11ZbP9lua_State = .text:0x801D38A0; // type:function size:0xC8 scope:global -ThunkMethod__Q2t16VoidMethodBinder1Z11GRaceStatust4Arg11ZfP9lua_State = .text:0x801D3968; // type:function size:0xB8 scope:global -ThunkMethod__t12MethodBinder2ZbZ8ISimableP9lua_State = .text:0x801D3A20; // type:function size:0xF8 scope:global -_GLOBAL_.I.LuaRealloc = .text:0x801D3B18; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x801D3B44; // type:label scope:local -__8E911Call = .text:0x801D3B44; // type:function size:0x1C scope:global -_._8E911Call = .text:0x801D3B60; // type:function size:0x38 scope:global -GetEventName__C8E911Call = .text:0x801D3B98; // type:function size:0xC scope:global -E911Call_MakeEvent_Callback__FPCv = .text:0x801D3BA4; // type:function size:0x28 scope:local -E911Call_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D3BCC; // type:function size:0x38 scope:local -E911Call_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D3C04; // type:function size:0x4 scope:local -__11EAcceleratefffiiiUiP8WTrigger = .text:0x801D3C08; // type:function size:0x3C scope:global -_._11EAccelerate = .text:0x801D3C44; // type:function size:0x284 scope:global -GetEventName__C11EAccelerate = .text:0x801D3EC8; // type:function size:0xC scope:global -EAccelerate_MakeEvent_Callback__FPCv = .text:0x801D3ED4; // type:function size:0x5C scope:local -EAccelerate_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D3F30; // type:function size:0x100 scope:local -EAccelerate_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D4030; // type:function size:0x4 scope:local -__7EAddSMSi = .text:0x801D4034; // type:function size:0x20 scope:global -_._7EAddSMS = .text:0x801D4054; // type:function size:0x84 scope:global -GetEventName__C7EAddSMS = .text:0x801D40D8; // type:function size:0xC scope:global -EAddSMS_MakeEvent_Callback__FPCv = .text:0x801D40E4; // type:function size:0x38 scope:local -EAddSMS_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D411C; // type:function size:0x64 scope:local -EAddSMS_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D4180; // type:function size:0x4 scope:local -__12EAIEngineRevUiUiUi = .text:0x801D4184; // type:function size:0x15C scope:global -_._12EAIEngineRev = .text:0x801D42E0; // type:function size:0x38 scope:global -GetEventName__C12EAIEngineRev = .text:0x801D4318; // type:function size:0xC scope:global -EAIEngineRev_MakeEvent_Callback__FPCv = .text:0x801D4324; // type:function size:0x44 scope:local -EAIEngineRev_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D4368; // type:function size:0xE4 scope:local -EAIEngineRev_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D444C; // type:function size:0x4 scope:local -__19EAudioRigidBodyTest = .text:0x801D4450; // type:function size:0x1C scope:global -_._19EAudioRigidBodyTest = .text:0x801D446C; // type:function size:0x38 scope:global -GetEventName__C19EAudioRigidBodyTest = .text:0x801D44A4; // type:function size:0xC scope:global -EAudioRigidBodyTest_MakeEvent_Callback__FPCv = .text:0x801D44B0; // type:function size:0x28 scope:local -__19EAudioSmackableTestf = .text:0x801D44D8; // type:function size:0x20 scope:global -_._19EAudioSmackableTest = .text:0x801D44F8; // type:function size:0x38 scope:global -GetEventName__C19EAudioSmackableTest = .text:0x801D4530; // type:function size:0xC scope:global -EAudioSmackableTest_MakeEvent_Callback__FPCv = .text:0x801D453C; // type:function size:0x38 scope:local -__15EAudioWorldTest = .text:0x801D4574; // type:function size:0x1C scope:global -_._15EAudioWorldTest = .text:0x801D4590; // type:function size:0x2B0 scope:global -GetEventName__C15EAudioWorldTest = .text:0x801D4840; // type:function size:0xC scope:global -EAudioWorldTest_MakeEvent_Callback__FPCv = .text:0x801D484C; // type:function size:0x28 scope:local -__9EAutoSave = .text:0x801D4874; // type:function size:0x1C scope:global -_._9EAutoSave = .text:0x801D4890; // type:function size:0x7C scope:global -GetEventName__C9EAutoSave = .text:0x801D490C; // type:function size:0xC scope:global -EAutoSave_MakeEvent_Callback__FPCv = .text:0x801D4918; // type:function size:0x28 scope:local -EAutoSave_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D4940; // type:function size:0x38 scope:local -EAutoSave_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D4978; // type:function size:0x4 scope:local -__13EAwardUpgradeUi = .text:0x801D497C; // type:function size:0x14C scope:global -_._13EAwardUpgrade = .text:0x801D4AC8; // type:function size:0x38 scope:global -GetEventName__C13EAwardUpgrade = .text:0x801D4B00; // type:function size:0xC scope:global -EAwardUpgrade_MakeEvent_Callback__FPCv = .text:0x801D4B0C; // type:function size:0x38 scope:local -__12EBailPursuitii = .text:0x801D4B44; // type:function size:0x24 scope:global -_._12EBailPursuit = .text:0x801D4B68; // type:function size:0xD4 scope:global -GetEventName__C12EBailPursuit = .text:0x801D4C3C; // type:function size:0xC scope:global -EBailPursuit_MakeEvent_Callback__FPCv = .text:0x801D4C48; // type:function size:0x3C scope:local -EBailPursuit_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D4C84; // type:function size:0x80 scope:local -EBailPursuit_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D4D04; // type:function size:0x4 scope:local -__12EBecomeAiCar = .text:0x801D4D08; // type:function size:0x1C scope:global -_._12EBecomeAiCar = .text:0x801D4D24; // type:function size:0x198 scope:global -GetEventName__C12EBecomeAiCar = .text:0x801D4EBC; // type:function size:0xC scope:global -EBecomeAiCar_MakeEvent_Callback__FPCv = .text:0x801D4EC8; // type:function size:0x28 scope:local -EBecomeAiCar_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D4EF0; // type:function size:0x38 scope:local -EBecomeAiCar_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D4F28; // type:function size:0x4 scope:local -__16EBecomePlayerCar = .text:0x801D4F2C; // type:function size:0x1C scope:global -_._16EBecomePlayerCar = .text:0x801D4F48; // type:function size:0x158 scope:global -GetEventName__C16EBecomePlayerCar = .text:0x801D50A0; // type:function size:0xC scope:global -EBecomePlayerCar_MakeEvent_Callback__FPCv = .text:0x801D50AC; // type:function size:0x28 scope:local -EBecomePlayerCar_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D50D4; // type:function size:0x38 scope:local -EBecomePlayerCar_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D510C; // type:function size:0x4 scope:local -__17EBecomePursuitCarUi = .text:0x801D5110; // type:function size:0x20 scope:global -_._17EBecomePursuitCar = .text:0x801D5130; // type:function size:0x118 scope:global -GetEventName__C17EBecomePursuitCar = .text:0x801D5248; // type:function size:0xC scope:global -EBecomePursuitCar_MakeEvent_Callback__FPCv = .text:0x801D5254; // type:function size:0x30 scope:local -EBecomePursuitCar_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D5284; // type:function size:0x40 scope:local -EBecomePursuitCar_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D52C4; // type:function size:0x4 scope:local -__16EBreakerStopCopsffGQ25UMath7Vector4 = .text:0x801D52C8; // type:function size:0x48 scope:global -_._16EBreakerStopCops = .text:0x801D5310; // type:function size:0x124 scope:global -GetEventName__C16EBreakerStopCops = .text:0x801D5434; // type:function size:0xC scope:global -EBreakerStopCops_MakeEvent_Callback__FPCv = .text:0x801D5440; // type:function size:0x6C scope:local -EBreakerStopCops_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D54AC; // type:function size:0xA8 scope:local -EBreakerStopCops_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D5554; // type:function size:0x4 scope:local -__18ECameraPhotoFinish = .text:0x801D5558; // type:function size:0x1C scope:global -_._18ECameraPhotoFinish = .text:0x801D5574; // type:function size:0xDC scope:global -GetEventName__C18ECameraPhotoFinish = .text:0x801D5650; // type:function size:0xC scope:global -ECameraPhotoFinish_MakeEvent_Callback__FPCv = .text:0x801D565C; // type:function size:0x28 scope:local -ECameraPhotoFinish_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D5684; // type:function size:0x38 scope:local -ECameraPhotoFinish_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D56BC; // type:function size:0x4 scope:local -__12ECameraShake = .text:0x801D56C0; // type:function size:0x1C scope:global -_._12ECameraShake = .text:0x801D56DC; // type:function size:0xAC scope:global -GetEventName__C12ECameraShake = .text:0x801D5788; // type:function size:0xC scope:global -ECameraShake_MakeEvent_Callback__FPCv = .text:0x801D5794; // type:function size:0x28 scope:local -ECameraShake_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D57BC; // type:function size:0x38 scope:local -ECameraShake_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D57F4; // type:function size:0x4 scope:local -__9ECellCalli = .text:0x801D57F8; // type:function size:0x20 scope:global -_._9ECellCall = .text:0x801D5818; // type:function size:0x188 scope:global -GetEventName__C9ECellCall = .text:0x801D59A0; // type:function size:0xC scope:global -ECellCall_MakeEvent_Callback__FPCv = .text:0x801D59AC; // type:function size:0x38 scope:local -ECellCall_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D59E4; // type:function size:0x64 scope:local -ECellCall_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D5A48; // type:function size:0x4 scope:local -__12EChangeStateUiUi = .text:0x801D5A4C; // type:function size:0x24 scope:global -_._12EChangeState = .text:0x801D5A70; // type:function size:0x94 scope:global -GetEventName__C12EChangeState = .text:0x801D5B04; // type:function size:0xC scope:global -EChangeState_MakeEvent_Callback__FPCv = .text:0x801D5B10; // type:function size:0x3C scope:local -__16ECinematicMomentPCcT1f = .text:0x801D5B4C; // type:function size:0x28 scope:global -_._16ECinematicMoment = .text:0x801D5B74; // type:function size:0x9C scope:global -GetEventName__C16ECinematicMoment = .text:0x801D5C10; // type:function size:0xC scope:global -ECinematicMoment_MakeEvent_Callback__FPCv = .text:0x801D5C1C; // type:function size:0x40 scope:local -ECinematicMoment_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D5C5C; // type:function size:0x80 scope:local -ECinematicMoment_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D5CDC; // type:function size:0x48 scope:local -__10ECollisionGQ33Sim9Collision4Info = .text:0x801D5D24; // type:function size:0x70 scope:global -_._10ECollision = .text:0x801D5D94; // type:function size:0x264 scope:global -GetEventName__C10ECollision = .text:0x801D5FF8; // type:function size:0xC scope:global -__18ECommitAudioAssets = .text:0x801D6004; // type:function size:0x1C scope:global -_._18ECommitAudioAssets = .text:0x801D6020; // type:function size:0x70 scope:global -GetEventName__C18ECommitAudioAssets = .text:0x801D6090; // type:function size:0xC scope:global -ECommitAudioAssets_MakeEvent_Callback__FPCv = .text:0x801D609C; // type:function size:0x28 scope:local -__19ECommitRenderAssets = .text:0x801D60C4; // type:function size:0x1C scope:global -_._19ECommitRenderAssets = .text:0x801D60E0; // type:function size:0x6C scope:global -GetEventName__C19ECommitRenderAssets = .text:0x801D614C; // type:function size:0xC scope:global -ECommitRenderAssets_MakeEvent_Callback__FPCv = .text:0x801D6158; // type:function size:0x28 scope:local -__13EDamageLightsG6UCrc32Ui = .text:0x801D6180; // type:function size:0x28 scope:global -_._13EDamageLights = .text:0x801D61A8; // type:function size:0x104 scope:global -GetEventName__C13EDamageLights = .text:0x801D62AC; // type:function size:0xC scope:global -EDamageLights_MakeEvent_Callback__FPCv = .text:0x801D62B8; // type:function size:0x48 scope:local -EDamageLights_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D6300; // type:function size:0x68 scope:local -EDamageLights_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D6368; // type:function size:0x4 scope:local -__11EDDaySpeech = .text:0x801D636C; // type:function size:0x1C scope:global -_._11EDDaySpeech = .text:0x801D6388; // type:function size:0x5C scope:global -GetEventName__C11EDDaySpeech = .text:0x801D63E4; // type:function size:0xC scope:global -EDDaySpeech_MakeEvent_Callback__FPCv = .text:0x801D63F0; // type:function size:0x28 scope:local -EDDaySpeech_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D6418; // type:function size:0x38 scope:local -EDDaySpeech_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D6450; // type:function size:0x4 scope:local -__11EDebugPrintPCc = .text:0x801D6454; // type:function size:0x48 scope:global -_._11EDebugPrint = .text:0x801D649C; // type:function size:0x38 scope:global -GetEventName__C11EDebugPrint = .text:0x801D64D4; // type:function size:0xC scope:global -EDebugPrint_MakeEvent_Callback__FPCv = .text:0x801D64E0; // type:function size:0x38 scope:local -EDebugPrint_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D6518; // type:function size:0x5C scope:local -EDebugPrint_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D6574; // type:function size:0x28 scope:local -__19EDebugScreenMessagePCcfii = .text:0x801D659C; // type:function size:0x68 scope:global -_._19EDebugScreenMessage = .text:0x801D6604; // type:function size:0x38 scope:global -GetEventName__C19EDebugScreenMessage = .text:0x801D663C; // type:function size:0xC scope:global -EDebugScreenMessage_MakeEvent_Callback__FPCv = .text:0x801D6648; // type:function size:0x44 scope:local -EDebugScreenMessage_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D668C; // type:function size:0xB0 scope:local -EDebugScreenMessage_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D673C; // type:function size:0x28 scope:local -__15EDeliverMessagePQ26Hermes7MessageG6UCrc32 = .text:0x801D6764; // type:function size:0x54 scope:global -_._15EDeliverMessage = .text:0x801D67B8; // type:function size:0x70 scope:global -GetEventName__C15EDeliverMessage = .text:0x801D6828; // type:function size:0xC scope:global -EDeliverMessage_MakeEvent_Callback__FPCv = .text:0x801D6834; // type:function size:0x48 scope:local -__15EDestroyVehicleUi = .text:0x801D687C; // type:function size:0x20 scope:global -_._15EDestroyVehicle = .text:0x801D689C; // type:function size:0xDC scope:global -GetEventName__C15EDestroyVehicle = .text:0x801D6978; // type:function size:0xC scope:global -EDestroyVehicle_MakeEvent_Callback__FPCv = .text:0x801D6984; // type:function size:0x30 scope:local -EDestroyVehicle_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D69B4; // type:function size:0x40 scope:local -EDestroyVehicle_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D69F4; // type:function size:0x4 scope:local -__22EDisablePursuitVehicleUi = .text:0x801D69F8; // type:function size:0x20 scope:global -_._22EDisablePursuitVehicle = .text:0x801D6A18; // type:function size:0xD8 scope:global -GetEventName__C22EDisablePursuitVehicle = .text:0x801D6AF0; // type:function size:0xC scope:global -EDisablePursuitVehicle_MakeEvent_Callback__FPCv = .text:0x801D6AFC; // type:function size:0x30 scope:local -EDisablePursuitVehicle_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D6B2C; // type:function size:0x40 scope:local -EDisablePursuitVehicle_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D6B6C; // type:function size:0x4 scope:local -__15EDisableTriggerPQ24CARP7Trigger = .text:0x801D6B70; // type:function size:0x20 scope:global -_._15EDisableTrigger = .text:0x801D6B90; // type:function size:0x80 scope:global -GetEventName__C15EDisableTrigger = .text:0x801D6C10; // type:function size:0xC scope:global -EDisableTrigger_MakeEvent_Callback__FPCv = .text:0x801D6C1C; // type:function size:0x38 scope:local -EDisableTrigger_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D6C54; // type:function size:0x5C scope:local -EDisableTrigger_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D6CB0; // type:function size:0x28 scope:local -__14EDispIntroRace = .text:0x801D6CD8; // type:function size:0x1C scope:global -_._14EDispIntroRace = .text:0x801D6CF4; // type:function size:0x5C scope:global -GetEventName__C14EDispIntroRace = .text:0x801D6D50; // type:function size:0xC scope:global -EDispIntroRace_MakeEvent_Callback__FPCv = .text:0x801D6D5C; // type:function size:0x28 scope:local -EDispIntroRace_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D6D84; // type:function size:0x38 scope:local -EDispIntroRace_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D6DBC; // type:function size:0x4 scope:local -__14EDynamicRegioniGQ25UMath7Vector4N22Ui = .text:0x801D6DC0; // type:function size:0xA0 scope:global -_._14EDynamicRegion = .text:0x801D6E60; // type:function size:0xC0 scope:global -GetEventName__C14EDynamicRegion = .text:0x801D6F20; // type:function size:0xC scope:global -EDynamicRegion_MakeEvent_Callback__FPCv = .text:0x801D6F2C; // type:function size:0xC4 scope:local -EDynamicRegion_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D6FF0; // type:function size:0xF0 scope:local -EDynamicRegion_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D70E0; // type:function size:0x4 scope:local -__16EEnableAIPhysicsUifUi = .text:0x801D70E4; // type:function size:0x28 scope:global -_._16EEnableAIPhysics = .text:0x801D710C; // type:function size:0x1DC scope:global -GetEventName__C16EEnableAIPhysics = .text:0x801D72E8; // type:function size:0xC scope:global -EEnableAIPhysics_MakeEvent_Callback__FPCv = .text:0x801D72F4; // type:function size:0x40 scope:local -__23EEnableCollisionElementiPQ24CARP15CollisionObject = .text:0x801D7334; // type:function size:0x24 scope:global -_._23EEnableCollisionElement = .text:0x801D7358; // type:function size:0x74 scope:global -GetEventName__C23EEnableCollisionElement = .text:0x801D73CC; // type:function size:0xC scope:global -EEnableCollisionElement_MakeEvent_Callback__FPCv = .text:0x801D73D8; // type:function size:0x3C scope:local -EEnableCollisionElement_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D7414; // type:function size:0x78 scope:local -EEnableCollisionElement_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D748C; // type:function size:0x28 scope:local -__15EEnableModelingiUi = .text:0x801D74B4; // type:function size:0x24 scope:global -_._15EEnableModeling = .text:0x801D74D8; // type:function size:0x104 scope:global -GetEventName__C15EEnableModeling = .text:0x801D75DC; // type:function size:0xC scope:global -EEnableModeling_MakeEvent_Callback__FPCv = .text:0x801D75E8; // type:function size:0x40 scope:local -EEnableModeling_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D7628; // type:function size:0x6C scope:local -EEnableModeling_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D7694; // type:function size:0x4 scope:local -__14EEnableTriggerPQ24CARP7Trigger = .text:0x801D7698; // type:function size:0x20 scope:global -_._14EEnableTrigger = .text:0x801D76B8; // type:function size:0x80 scope:global -GetEventName__C14EEnableTrigger = .text:0x801D7738; // type:function size:0xC scope:global -EEnableTrigger_MakeEvent_Callback__FPCv = .text:0x801D7744; // type:function size:0x38 scope:local -EEnableTrigger_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D777C; // type:function size:0x5C scope:local -EEnableTrigger_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D77D8; // type:function size:0x28 scope:local -__11EEndCarStopiUi = .text:0x801D7800; // type:function size:0x24 scope:global -_._11EEndCarStop = .text:0x801D7824; // type:function size:0xE8 scope:global -GetEventName__C11EEndCarStop = .text:0x801D790C; // type:function size:0xC scope:global -EEndCarStop_MakeEvent_Callback__FPCv = .text:0x801D7918; // type:function size:0x40 scope:local -EEndCarStop_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D7958; // type:function size:0x6C scope:local -EEndCarStop_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D79C4; // type:function size:0x4 scope:local -__12EEngineBlownP10HSIMABLE__ = .text:0x801D79C8; // type:function size:0x20 scope:global -_._12EEngineBlown = .text:0x801D79E8; // type:function size:0x20C scope:global -GetEventName__C12EEngineBlown = .text:0x801D7BF4; // type:function size:0xC scope:global -EEngineBlown_MakeEvent_Callback__FPCv = .text:0x801D7C00; // type:function size:0x38 scope:local -__9EEnterBini = .text:0x801D7C38; // type:function size:0x164 scope:global -_._9EEnterBin = .text:0x801D7D9C; // type:function size:0x38 scope:global -GetEventName__C9EEnterBin = .text:0x801D7DD4; // type:function size:0xC scope:global -EEnterBin_MakeEvent_Callback__FPCv = .text:0x801D7DE0; // type:function size:0x38 scope:local -EEnterBin_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D7E18; // type:function size:0x64 scope:local -EEnterBin_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D7E7C; // type:function size:0x4 scope:local -__22EEnterEngagableTriggerP16GRuntimeInstance = .text:0x801D7E80; // type:function size:0x20 scope:global -_._22EEnterEngagableTrigger = .text:0x801D7EA0; // type:function size:0xE4 scope:global -GetEventName__C22EEnterEngagableTrigger = .text:0x801D7F84; // type:function size:0xC scope:global -EEnterEngagableTrigger_MakeEvent_Callback__FPCv = .text:0x801D7F90; // type:function size:0x38 scope:local -EEnterEngagableTrigger_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D7FC8; // type:function size:0x5C scope:local -EEnterEngagableTrigger_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D8024; // type:function size:0x28 scope:local -__21EExitEngagableTriggerP16GRuntimeInstance = .text:0x801D804C; // type:function size:0x20 scope:global -_._21EExitEngagableTrigger = .text:0x801D806C; // type:function size:0xE0 scope:global -GetEventName__C21EExitEngagableTrigger = .text:0x801D814C; // type:function size:0xC scope:global -EExitEngagableTrigger_MakeEvent_Callback__FPCv = .text:0x801D8158; // type:function size:0x38 scope:local -EExitEngagableTrigger_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D8190; // type:function size:0x5C scope:local -EExitEngagableTrigger_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D81EC; // type:function size:0x28 scope:local -__26EFadeScreenNoLoadingBarOff = .text:0x801D8214; // type:function size:0x6C scope:global -_._26EFadeScreenNoLoadingBarOff = .text:0x801D8280; // type:function size:0x38 scope:global -GetEventName__C26EFadeScreenNoLoadingBarOff = .text:0x801D82B8; // type:function size:0xC scope:global -EFadeScreenNoLoadingBarOff_MakeEvent_Callback__FPCv = .text:0x801D82C4; // type:function size:0x28 scope:local -EFadeScreenNoLoadingBarOff_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D82EC; // type:function size:0x38 scope:local -EFadeScreenNoLoadingBarOff_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D8324; // type:function size:0x4 scope:local -__25EFadeScreenNoLoadingBarOn = .text:0x801D8328; // type:function size:0x7C scope:global -_._25EFadeScreenNoLoadingBarOn = .text:0x801D83A4; // type:function size:0x38 scope:global -GetEventName__C25EFadeScreenNoLoadingBarOn = .text:0x801D83DC; // type:function size:0xC scope:global -EFadeScreenNoLoadingBarOn_MakeEvent_Callback__FPCv = .text:0x801D83E8; // type:function size:0x28 scope:local -EFadeScreenNoLoadingBarOn_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D8410; // type:function size:0x38 scope:local -EFadeScreenNoLoadingBarOn_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D8448; // type:function size:0x4 scope:local -__14EFadeScreenOffi = .text:0x801D844C; // type:function size:0x4C scope:global -_._14EFadeScreenOff = .text:0x801D8498; // type:function size:0x1A0 scope:global -GetEventName__C14EFadeScreenOff = .text:0x801D8638; // type:function size:0xC scope:global -EFadeScreenOff_MakeEvent_Callback__FPCv = .text:0x801D8644; // type:function size:0x38 scope:local -__13EFadeScreenOnb = .text:0x801D867C; // type:function size:0x158 scope:global -_._13EFadeScreenOn = .text:0x801D87D4; // type:function size:0x38 scope:global -GetEventName__C13EFadeScreenOn = .text:0x801D880C; // type:function size:0xC scope:global -EFadeScreenOn_MakeEvent_Callback__FPCv = .text:0x801D8818; // type:function size:0x38 scope:local -__14EFireEventListPQ24CARP9EventListii = .text:0x801D8850; // type:function size:0x74 scope:global -_._14EFireEventList = .text:0x801D88C4; // type:function size:0xA0 scope:global -GetEventName__C14EFireEventList = .text:0x801D8964; // type:function size:0xC scope:global -EFireEventList_MakeEvent_Callback__FPCv = .text:0x801D8970; // type:function size:0x40 scope:local -EFireEventList_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D89B0; // type:function size:0x94 scope:local -EFireEventList_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D8A44; // type:function size:0x28 scope:local -__18EFireRandomTriggerPQ24CARP7TriggerfT1fT1fT1fUi = .text:0x801D8A6C; // type:function size:0x40 scope:global -_._18EFireRandomTrigger = .text:0x801D8AAC; // type:function size:0x120 scope:global -GetEventName__C18EFireRandomTrigger = .text:0x801D8BCC; // type:function size:0xC scope:global -EFireRandomTrigger_MakeEvent_Callback__FPCv = .text:0x801D8BD8; // type:function size:0x5C scope:local -EFireRandomTrigger_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D8C34; // type:function size:0x108 scope:local -EFireRandomTrigger_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D8D3C; // type:function size:0x68 scope:local -__26EFireTriggerSpeedConditionPQ24CARP7TriggerfiUi = .text:0x801D8DA4; // type:function size:0x2C scope:global -_._26EFireTriggerSpeedCondition = .text:0x801D8DD0; // type:function size:0x12C scope:global -GetEventName__C26EFireTriggerSpeedCondition = .text:0x801D8EFC; // type:function size:0xC scope:global -EFireTriggerSpeedCondition_MakeEvent_Callback__FPCv = .text:0x801D8F08; // type:function size:0x48 scope:local -EFireTriggerSpeedCondition_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D8F50; // type:function size:0x9C scope:local -EFireTriggerSpeedCondition_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D8FEC; // type:function size:0x28 scope:local -__13EForceCarStopiUi = .text:0x801D9014; // type:function size:0x24 scope:global -_._13EForceCarStop = .text:0x801D9038; // type:function size:0xF8 scope:global -GetEventName__C13EForceCarStop = .text:0x801D9130; // type:function size:0xC scope:global -EForceCarStop_MakeEvent_Callback__FPCv = .text:0x801D913C; // type:function size:0x40 scope:local -EForceCarStop_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D917C; // type:function size:0x6C scope:local -EForceCarStop_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D91E8; // type:function size:0x4 scope:local -__12EGPSFinished = .text:0x801D91EC; // type:function size:0x1C scope:global -_._12EGPSFinished = .text:0x801D9208; // type:function size:0x38 scope:global -GetEventName__C12EGPSFinished = .text:0x801D9240; // type:function size:0xC scope:global -EGPSFinished_MakeEvent_Callback__FPCv = .text:0x801D924C; // type:function size:0x28 scope:local -__8EGPSLost = .text:0x801D9274; // type:function size:0x1C scope:global -_._8EGPSLost = .text:0x801D9290; // type:function size:0x10C scope:global -GetEventName__C8EGPSLost = .text:0x801D939C; // type:function size:0xC scope:global -EGPSLost_MakeEvent_Callback__FPCv = .text:0x801D93A8; // type:function size:0x28 scope:local -__17EGTriggerInternalUiiUi = .text:0x801D93D0; // type:function size:0xD8 scope:global -_._17EGTriggerInternal = .text:0x801D94A8; // type:function size:0x38 scope:global -GetEventName__C17EGTriggerInternal = .text:0x801D94E0; // type:function size:0xC scope:global -EGTriggerInternal_MakeEvent_Callback__FPCv = .text:0x801D94EC; // type:function size:0x48 scope:local -__11EHideObjectUi = .text:0x801D9534; // type:function size:0x20 scope:global -_._11EHideObject = .text:0x801D9554; // type:function size:0xB4 scope:global -GetEventName__C11EHideObject = .text:0x801D9608; // type:function size:0xC scope:global -EHideObject_MakeEvent_Callback__FPCv = .text:0x801D9614; // type:function size:0x30 scope:local -EHideObject_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D9644; // type:function size:0x40 scope:local -EHideObject_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D9684; // type:function size:0x4 scope:local -__9EHidePartG6UCrc32Ui = .text:0x801D9688; // type:function size:0x28 scope:global -_._9EHidePart = .text:0x801D96B0; // type:function size:0xB8 scope:global -GetEventName__C9EHidePart = .text:0x801D9768; // type:function size:0xC scope:global -EHidePart_MakeEvent_Callback__FPCv = .text:0x801D9774; // type:function size:0x48 scope:local -EHidePart_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D97BC; // type:function size:0x68 scope:local -EHidePart_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D9824; // type:function size:0x4 scope:local -__20EHideRaceOverMessageP7IPlayer = .text:0x801D9828; // type:function size:0x9C scope:global -_._20EHideRaceOverMessage = .text:0x801D98C4; // type:function size:0x38 scope:global -GetEventName__C20EHideRaceOverMessage = .text:0x801D98FC; // type:function size:0xC scope:global -EHideRaceOverMessage_MakeEvent_Callback__FPCv = .text:0x801D9908; // type:function size:0x38 scope:local -EHideRaceOverMessage_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D9940; // type:function size:0x5C scope:local -EHideRaceOverMessage_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D999C; // type:function size:0x28 scope:local -__14EJointDetachedP10HSIMABLE__ = .text:0x801D99C4; // type:function size:0x20 scope:global -_._14EJointDetached = .text:0x801D99E4; // type:function size:0x15C scope:global -GetEventName__C14EJointDetached = .text:0x801D9B40; // type:function size:0xC scope:global -EJointDetached_MakeEvent_Callback__FPCv = .text:0x801D9B4C; // type:function size:0x38 scope:local -__19EJumpToStrategyFlow = .text:0x801D9B84; // type:function size:0x1C scope:global -_._19EJumpToStrategyFlow = .text:0x801D9BA0; // type:function size:0x5C scope:global -GetEventName__C19EJumpToStrategyFlow = .text:0x801D9BFC; // type:function size:0xC scope:global -EJumpToStrategyFlow_MakeEvent_Callback__FPCv = .text:0x801D9C08; // type:function size:0x28 scope:local -EJumpToStrategyFlow_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D9C30; // type:function size:0x38 scope:local -EJumpToStrategyFlow_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D9C68; // type:function size:0x4 scope:local -__10EKillJointUi = .text:0x801D9C6C; // type:function size:0x20 scope:global -_._10EKillJoint = .text:0x801D9C8C; // type:function size:0xD8 scope:global -GetEventName__C10EKillJoint = .text:0x801D9D64; // type:function size:0xC scope:global -EKillJoint_MakeEvent_Callback__FPCv = .text:0x801D9D70; // type:function size:0x30 scope:local -EKillJoint_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D9DA0; // type:function size:0x40 scope:local -EKillJoint_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D9DE0; // type:function size:0x4 scope:local -__11EKillObjectUiUi = .text:0x801D9DE4; // type:function size:0x24 scope:global -_._11EKillObject = .text:0x801D9E08; // type:function size:0xB4 scope:global -GetEventName__C11EKillObject = .text:0x801D9EBC; // type:function size:0xC scope:global -EKillObject_MakeEvent_Callback__FPCv = .text:0x801D9EC8; // type:function size:0x38 scope:local -EKillObject_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D9F00; // type:function size:0x48 scope:local -EKillObject_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D9F48; // type:function size:0x4 scope:local -__14EKnockoutRacerP10GRacerInfo = .text:0x801D9F4C; // type:function size:0x20 scope:global -_._14EKnockoutRacer = .text:0x801D9F6C; // type:function size:0x204 scope:global -GetEventName__C14EKnockoutRacer = .text:0x801DA170; // type:function size:0xC scope:global -EKnockoutRacer_MakeEvent_Callback__FPCv = .text:0x801DA17C; // type:function size:0x38 scope:local -__17ELoadingScreenOff = .text:0x801DA1B4; // type:function size:0x8C scope:global -_._17ELoadingScreenOff = .text:0x801DA240; // type:function size:0x7C scope:global -GetEventName__C17ELoadingScreenOff = .text:0x801DA2BC; // type:function size:0xC scope:global -ELoadingScreenOff_MakeEvent_Callback__FPCv = .text:0x801DA2C8; // type:function size:0x28 scope:local -__16ELoadingScreenOnQ213LoadingScreen18LoadingScreenTypes = .text:0x801DA2F0; // type:function size:0x16C scope:global -_._16ELoadingScreenOn = .text:0x801DA45C; // type:function size:0x38 scope:global -GetEventName__C16ELoadingScreenOn = .text:0x801DA494; // type:function size:0xC scope:global -ELoadingScreenOn_MakeEvent_Callback__FPCv = .text:0x801DA4A0; // type:function size:0x38 scope:local -__9ELoadLostUi = .text:0x801DA4D8; // type:function size:0x20 scope:global -_._9ELoadLost = .text:0x801DA4F8; // type:function size:0x1D8 scope:global -GetEventName__C9ELoadLost = .text:0x801DA6D0; // type:function size:0xC scope:global -ELoadLost_MakeEvent_Callback__FPCv = .text:0x801DA6DC; // type:function size:0x30 scope:local -ELoadLost_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DA70C; // type:function size:0x40 scope:local -ELoadLost_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DA74C; // type:function size:0x4 scope:local -__10EMissShiftP10HSIMABLE__f = .text:0x801DA750; // type:function size:0x24 scope:global -_._10EMissShift = .text:0x801DA774; // type:function size:0xE8 scope:global -GetEventName__C10EMissShift = .text:0x801DA85C; // type:function size:0xC scope:global -EMissShift_MakeEvent_Callback__FPCv = .text:0x801DA868; // type:function size:0x3C scope:local -__11EMomentStrmGQ25UMath7Vector4N21UiPCcUi = .text:0x801DA8A4; // type:function size:0xA4 scope:global -_._11EMomentStrm = .text:0x801DA948; // type:function size:0x1B4 scope:global -GetEventName__C11EMomentStrm = .text:0x801DAAFC; // type:function size:0xC scope:global -EMomentStrm_MakeEvent_Callback__FPCv = .text:0x801DAB08; // type:function size:0xC8 scope:local -EMomentStrm_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DABD0; // type:function size:0x100 scope:local -EMomentStrm_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DACD0; // type:function size:0x28 scope:local -__16ENISAeroDynamicsf = .text:0x801DACF8; // type:function size:0x24 scope:global -_._16ENISAeroDynamics = .text:0x801DAD1C; // type:function size:0x38 scope:global -GetEventName__C16ENISAeroDynamics = .text:0x801DAD54; // type:function size:0xC scope:global -ENISAeroDynamics_MakeEvent_Callback__FPCv = .text:0x801DAD60; // type:function size:0x38 scope:local -ENISAeroDynamics_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DAD98; // type:function size:0x58 scope:local -ENISAeroDynamics_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DADF0; // type:function size:0x4 scope:local -__13ENISBrakelockUiUiUi = .text:0x801DADF4; // type:function size:0xF8 scope:global -_._13ENISBrakelock = .text:0x801DAEEC; // type:function size:0x38 scope:global -GetEventName__C13ENISBrakelock = .text:0x801DAF24; // type:function size:0xC scope:global -ENISBrakelock_MakeEvent_Callback__FPCv = .text:0x801DAF30; // type:function size:0x44 scope:local -ENISBrakelock_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DAF74; // type:function size:0xE0 scope:local -ENISBrakelock_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DB054; // type:function size:0x4 scope:local -__11ENISBurnoutfUi = .text:0x801DB058; // type:function size:0xD0 scope:global -_._11ENISBurnout = .text:0x801DB128; // type:function size:0x38 scope:global -GetEventName__C11ENISBurnout = .text:0x801DB160; // type:function size:0xC scope:global -ENISBurnout_MakeEvent_Callback__FPCv = .text:0x801DB16C; // type:function size:0x40 scope:local -ENISBurnout_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DB1AC; // type:function size:0x60 scope:local -ENISBurnout_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DB20C; // type:function size:0x4 scope:local -__18ENISCarDamageResetUi = .text:0x801DB210; // type:function size:0xC8 scope:global -_._18ENISCarDamageReset = .text:0x801DB2D8; // type:function size:0x38 scope:global -GetEventName__C18ENISCarDamageReset = .text:0x801DB310; // type:function size:0xC scope:global -ENISCarDamageReset_MakeEvent_Callback__FPCv = .text:0x801DB31C; // type:function size:0x30 scope:local -ENISCarDamageReset_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DB34C; // type:function size:0x40 scope:local -ENISCarDamageReset_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DB38C; // type:function size:0x4 scope:local -__12ENISCarPitchffUi = .text:0x801DB390; // type:function size:0xD8 scope:global -_._12ENISCarPitch = .text:0x801DB468; // type:function size:0x38 scope:global -GetEventName__C12ENISCarPitch = .text:0x801DB4A0; // type:function size:0xC scope:global -ENISCarPitch_MakeEvent_Callback__FPCv = .text:0x801DB4AC; // type:function size:0x44 scope:local -ENISCarPitch_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DB4F0; // type:function size:0x80 scope:local -ENISCarPitch_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DB570; // type:function size:0x4 scope:local -__11ENISCarRollffUi = .text:0x801DB574; // type:function size:0xD8 scope:global -_._11ENISCarRoll = .text:0x801DB64C; // type:function size:0x38 scope:global -GetEventName__C11ENISCarRoll = .text:0x801DB684; // type:function size:0xC scope:global -ENISCarRoll_MakeEvent_Callback__FPCv = .text:0x801DB690; // type:function size:0x44 scope:local -ENISCarRoll_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DB6D4; // type:function size:0x80 scope:local -ENISCarRoll_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DB754; // type:function size:0x4 scope:local -__12ENISCarShakeffffUi = .text:0x801DB758; // type:function size:0xE8 scope:global -_._12ENISCarShake = .text:0x801DB840; // type:function size:0x38 scope:global -GetEventName__C12ENISCarShake = .text:0x801DB878; // type:function size:0xC scope:global -ENISCarShake_MakeEvent_Callback__FPCv = .text:0x801DB884; // type:function size:0x4C scope:local -ENISCarShake_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DB8D0; // type:function size:0xB8 scope:local -ENISCarShake_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DB988; // type:function size:0x4 scope:local -__14ENISConstraintfUi = .text:0x801DB98C; // type:function size:0xD0 scope:global -_._14ENISConstraint = .text:0x801DBA5C; // type:function size:0x38 scope:global -GetEventName__C14ENISConstraint = .text:0x801DBA94; // type:function size:0xC scope:global -ENISConstraint_MakeEvent_Callback__FPCv = .text:0x801DBAA0; // type:function size:0x40 scope:local -ENISConstraint_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DBAE0; // type:function size:0x60 scope:local -ENISConstraint_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DBB40; // type:function size:0x4 scope:local -__15ENISCopCarDoorsifff = .text:0x801DBB44; // type:function size:0x60 scope:global -_._15ENISCopCarDoors = .text:0x801DBBA4; // type:function size:0x38 scope:global -GetEventName__C15ENISCopCarDoors = .text:0x801DBBDC; // type:function size:0xC scope:global -ENISCopCarDoors_MakeEvent_Callback__FPCv = .text:0x801DBBE8; // type:function size:0x44 scope:local -ENISCopCarDoors_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DBC2C; // type:function size:0xB0 scope:local -ENISCopCarDoors_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DBCDC; // type:function size:0x4 scope:local -__13ENISCopLightsiffff = .text:0x801DBCE0; // type:function size:0x68 scope:global -_._13ENISCopLights = .text:0x801DBD48; // type:function size:0x38 scope:global -GetEventName__C13ENISCopLights = .text:0x801DBD80; // type:function size:0xC scope:global -ENISCopLights_MakeEvent_Callback__FPCv = .text:0x801DBD8C; // type:function size:0x48 scope:local -ENISCopLights_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DBDD4; // type:function size:0xCC scope:local -ENISCopLights_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DBEA0; // type:function size:0x4 scope:local -__10ENISDetachfUi = .text:0x801DBEA4; // type:function size:0x24 scope:global -_._10ENISDetach = .text:0x801DBEC8; // type:function size:0xE0 scope:global -GetEventName__C10ENISDetach = .text:0x801DBFA8; // type:function size:0xC scope:global -ENISDetach_MakeEvent_Callback__FPCv = .text:0x801DBFB4; // type:function size:0x40 scope:local -ENISDetach_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DBFF4; // type:function size:0x60 scope:local -ENISDetach_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DC054; // type:function size:0x4 scope:local -__10ENISDetaili = .text:0x801DC058; // type:function size:0x20 scope:global -_._10ENISDetail = .text:0x801DC078; // type:function size:0xB0 scope:global -GetEventName__C10ENISDetail = .text:0x801DC128; // type:function size:0xC scope:global -ENISDetail_MakeEvent_Callback__FPCv = .text:0x801DC134; // type:function size:0x38 scope:local -ENISDetail_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DC16C; // type:function size:0x64 scope:local -ENISDetail_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DC1D0; // type:function size:0x4 scope:local -__11ENISFakeFarf = .text:0x801DC1D4; // type:function size:0x20 scope:global -_._11ENISFakeFar = .text:0x801DC1F4; // type:function size:0x38 scope:global -GetEventName__C11ENISFakeFar = .text:0x801DC22C; // type:function size:0xC scope:global -ENISFakeFar_MakeEvent_Callback__FPCv = .text:0x801DC238; // type:function size:0x38 scope:local -ENISFakeFar_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DC270; // type:function size:0x58 scope:local -ENISFakeFar_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DC2C8; // type:function size:0x4 scope:local -__10ENISFreezei = .text:0x801DC2CC; // type:function size:0x90 scope:global -_._10ENISFreeze = .text:0x801DC35C; // type:function size:0x38 scope:global -GetEventName__C10ENISFreeze = .text:0x801DC394; // type:function size:0xC scope:global -ENISFreeze_MakeEvent_Callback__FPCv = .text:0x801DC3A0; // type:function size:0x38 scope:local -ENISFreeze_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DC3D8; // type:function size:0x64 scope:local -ENISFreeze_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DC43C; // type:function size:0x4 scope:local -__17ENISHideCharacterPCci = .text:0x801DC440; // type:function size:0x10C scope:global -_._17ENISHideCharacter = .text:0x801DC54C; // type:function size:0x38 scope:global -GetEventName__C17ENISHideCharacter = .text:0x801DC584; // type:function size:0xC scope:global -ENISHideCharacter_MakeEvent_Callback__FPCv = .text:0x801DC590; // type:function size:0x3C scope:local -ENISHideCharacter_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DC5CC; // type:function size:0x78 scope:local -ENISHideCharacter_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DC644; // type:function size:0x28 scope:local -__10ENISLightsUiUiUi = .text:0x801DC66C; // type:function size:0x148 scope:global -_._10ENISLights = .text:0x801DC7B4; // type:function size:0x38 scope:global -GetEventName__C10ENISLights = .text:0x801DC7EC; // type:function size:0xC scope:global -ENISLights_MakeEvent_Callback__FPCv = .text:0x801DC7F8; // type:function size:0x44 scope:local -ENISLights_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DC83C; // type:function size:0xE0 scope:local -ENISLights_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DC91C; // type:function size:0x4 scope:local -__14ENISMotionBluri = .text:0x801DC920; // type:function size:0x20 scope:global -_._14ENISMotionBlur = .text:0x801DC940; // type:function size:0x38 scope:global -GetEventName__C14ENISMotionBlur = .text:0x801DC978; // type:function size:0xC scope:global -ENISMotionBlur_MakeEvent_Callback__FPCv = .text:0x801DC984; // type:function size:0x38 scope:local -ENISMotionBlur_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DC9BC; // type:function size:0x64 scope:local -ENISMotionBlur_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DCA20; // type:function size:0x4 scope:local -__14ENISNeutralRevUiffUi = .text:0x801DCA24; // type:function size:0x114 scope:global -_._14ENISNeutralRev = .text:0x801DCB38; // type:function size:0x38 scope:global -GetEventName__C14ENISNeutralRev = .text:0x801DCB70; // type:function size:0xC scope:global -ENISNeutralRev_MakeEvent_Callback__FPCv = .text:0x801DCB7C; // type:function size:0x48 scope:local -ENISNeutralRev_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DCBC4; // type:function size:0xC8 scope:local -ENISNeutralRev_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DCC8C; // type:function size:0x4 scope:local -__9ENISNitroUiUi = .text:0x801DCC90; // type:function size:0xF8 scope:global -_._9ENISNitro = .text:0x801DCD88; // type:function size:0x38 scope:global -GetEventName__C9ENISNitro = .text:0x801DCDC0; // type:function size:0xC scope:global -ENISNitro_MakeEvent_Callback__FPCv = .text:0x801DCDCC; // type:function size:0x40 scope:local -ENISNitro_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DCE0C; // type:function size:0x98 scope:local -ENISNitro_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DCEA4; // type:function size:0x4 scope:local -__13ENISNukeSmackffff = .text:0x801DCEA8; // type:function size:0x2C scope:global -_._13ENISNukeSmack = .text:0x801DCED4; // type:function size:0xB4 scope:global -GetEventName__C13ENISNukeSmack = .text:0x801DCF88; // type:function size:0xC scope:global -ENISNukeSmack_MakeEvent_Callback__FPCv = .text:0x801DCF94; // type:function size:0x44 scope:local -ENISNukeSmack_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DCFD8; // type:function size:0xB0 scope:local -ENISNukeSmack_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DD088; // type:function size:0x4 scope:local -__18ENISOverlayMessagePCcT1 = .text:0x801DD08C; // type:function size:0xA4 scope:global -_._18ENISOverlayMessage = .text:0x801DD130; // type:function size:0x38 scope:global -GetEventName__C18ENISOverlayMessage = .text:0x801DD168; // type:function size:0xC scope:global -ENISOverlayMessage_MakeEvent_Callback__FPCv = .text:0x801DD174; // type:function size:0x3C scope:local -ENISOverlayMessage_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DD1B0; // type:function size:0x70 scope:local -ENISOverlayMessage_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DD220; // type:function size:0x48 scope:local -__12ENISPixelateiff = .text:0x801DD268; // type:function size:0x54 scope:global -_._12ENISPixelate = .text:0x801DD2BC; // type:function size:0x38 scope:global -GetEventName__C12ENISPixelate = .text:0x801DD2F4; // type:function size:0xC scope:global -ENISPixelate_MakeEvent_Callback__FPCv = .text:0x801DD300; // type:function size:0x40 scope:local -ENISPixelate_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DD340; // type:function size:0x94 scope:local -ENISPixelate_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DD3D4; // type:function size:0x4 scope:local -__14ENISPlayEffectPCcffffff = .text:0x801DD3D8; // type:function size:0x38 scope:global -_._14ENISPlayEffect = .text:0x801DD410; // type:function size:0x13C scope:global -GetEventName__C14ENISPlayEffect = .text:0x801DD54C; // type:function size:0xC scope:global -ENISPlayEffect_MakeEvent_Callback__FPCv = .text:0x801DD558; // type:function size:0x50 scope:local -ENISPlayEffect_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DD5A8; // type:function size:0xFC scope:local -ENISPlayEffect_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DD6A4; // type:function size:0x28 scope:local -__8ENISRainf = .text:0x801DD6CC; // type:function size:0x54 scope:global -_._8ENISRain = .text:0x801DD720; // type:function size:0x38 scope:global -GetEventName__C8ENISRain = .text:0x801DD758; // type:function size:0xC scope:global -ENISRain_MakeEvent_Callback__FPCv = .text:0x801DD764; // type:function size:0x38 scope:local -ENISRain_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DD79C; // type:function size:0x58 scope:local -ENISRain_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DD7F4; // type:function size:0x4 scope:local -__12ENISReattachiUi = .text:0x801DD7F8; // type:function size:0x24 scope:global -_._12ENISReattach = .text:0x801DD81C; // type:function size:0x134 scope:global -GetEventName__C12ENISReattach = .text:0x801DD950; // type:function size:0xC scope:global -ENISReattach_MakeEvent_Callback__FPCv = .text:0x801DD95C; // type:function size:0x40 scope:local -ENISReattach_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DD99C; // type:function size:0x6C scope:local -ENISReattach_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DDA08; // type:function size:0x4 scope:local -__13ENISRoadNoisei = .text:0x801DDA0C; // type:function size:0x24 scope:global -_._13ENISRoadNoise = .text:0x801DDA30; // type:function size:0x38 scope:global -GetEventName__C13ENISRoadNoise = .text:0x801DDA68; // type:function size:0xC scope:global -ENISRoadNoise_MakeEvent_Callback__FPCv = .text:0x801DDA74; // type:function size:0x38 scope:local -ENISRoadNoise_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DDAAC; // type:function size:0x64 scope:local -ENISRoadNoise_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DDB10; // type:function size:0x4 scope:local -__15ENISScreenFlashf = .text:0x801DDB14; // type:function size:0x58 scope:global -_._15ENISScreenFlash = .text:0x801DDB6C; // type:function size:0x38 scope:global -GetEventName__C15ENISScreenFlash = .text:0x801DDBA4; // type:function size:0xC scope:global -ENISScreenFlash_MakeEvent_Callback__FPCv = .text:0x801DDBB0; // type:function size:0x38 scope:local -ENISScreenFlash_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DDBE8; // type:function size:0x58 scope:local -ENISScreenFlash_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DDC40; // type:function size:0x4 scope:local -__12ENISSteeringffUi = .text:0x801DDC44; // type:function size:0xE4 scope:global -_._12ENISSteering = .text:0x801DDD28; // type:function size:0x38 scope:global -GetEventName__C12ENISSteering = .text:0x801DDD60; // type:function size:0xC scope:global -ENISSteering_MakeEvent_Callback__FPCv = .text:0x801DDD6C; // type:function size:0x44 scope:local -ENISSteering_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DDDB0; // type:function size:0x80 scope:local -ENISSteering_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DDE30; // type:function size:0x4 scope:local -__15ENISStopEffects = .text:0x801DDE34; // type:function size:0x58 scope:global -_._15ENISStopEffects = .text:0x801DDE8C; // type:function size:0x38 scope:global -GetEventName__C15ENISStopEffects = .text:0x801DDEC4; // type:function size:0xC scope:global -ENISStopEffects_MakeEvent_Callback__FPCv = .text:0x801DDED0; // type:function size:0x28 scope:local -ENISStopEffects_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DDEF8; // type:function size:0x38 scope:local -ENISStopEffects_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DDF30; // type:function size:0x4 scope:local -__13ENISTimeOfDayffff = .text:0x801DDF34; // type:function size:0x2C scope:global -_._13ENISTimeOfDay = .text:0x801DDF60; // type:function size:0x38 scope:global -GetEventName__C13ENISTimeOfDay = .text:0x801DDF98; // type:function size:0xC scope:global -ENISTimeOfDay_MakeEvent_Callback__FPCv = .text:0x801DDFA4; // type:function size:0x44 scope:local -ENISTimeOfDay_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DDFE8; // type:function size:0xB0 scope:local -ENISTimeOfDay_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DE098; // type:function size:0x4 scope:local -__14ENISVisualLookfffiff = .text:0x801DE09C; // type:function size:0x1A8 scope:global -_._14ENISVisualLook = .text:0x801DE244; // type:function size:0x38 scope:global -GetEventName__C14ENISVisualLook = .text:0x801DE27C; // type:function size:0xC scope:global -ENISVisualLook_MakeEvent_Callback__FPCv = .text:0x801DE288; // type:function size:0x4C scope:local -ENISVisualLook_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DE2D4; // type:function size:0xE8 scope:local -ENISVisualLook_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DE3BC; // type:function size:0x4 scope:local -__17ENISWolrdGeometryPCci = .text:0x801DE3C0; // type:function size:0x8C scope:global -_._17ENISWolrdGeometry = .text:0x801DE44C; // type:function size:0x38 scope:global -GetEventName__C17ENISWolrdGeometry = .text:0x801DE484; // type:function size:0xC scope:global -ENISWolrdGeometry_MakeEvent_Callback__FPCv = .text:0x801DE490; // type:function size:0x3C scope:local -ENISWolrdGeometry_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DE4CC; // type:function size:0x78 scope:local -ENISWolrdGeometry_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DE544; // type:function size:0x28 scope:local -__20ENISWorldAnimTriggerPCcfii = .text:0x801DE56C; // type:function size:0xFC scope:global -_._20ENISWorldAnimTrigger = .text:0x801DE668; // type:function size:0x38 scope:global -GetEventName__C20ENISWorldAnimTrigger = .text:0x801DE6A0; // type:function size:0xC scope:global -ENISWorldAnimTrigger_MakeEvent_Callback__FPCv = .text:0x801DE6AC; // type:function size:0x44 scope:local -ENISWorldAnimTrigger_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DE6F0; // type:function size:0xB0 scope:local -ENISWorldAnimTrigger_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DE7A0; // type:function size:0x28 scope:local -__6EPauseiii = .text:0x801DE7C8; // type:function size:0x28 scope:global -_._6EPause = .text:0x801DE7F0; // type:function size:0x14C scope:global -GetEventName__C6EPause = .text:0x801DE93C; // type:function size:0xC scope:global -EPause_MakeEvent_Callback__FPCv = .text:0x801DE948; // type:function size:0x40 scope:local -__14EPerfectLaunchP10HSIMABLE__f = .text:0x801DE988; // type:function size:0x24 scope:global -_._14EPerfectLaunch = .text:0x801DE9AC; // type:function size:0x18C scope:global -GetEventName__C14EPerfectLaunch = .text:0x801DEB38; // type:function size:0xC scope:global -EPerfectLaunch_MakeEvent_Callback__FPCv = .text:0x801DEB44; // type:function size:0x3C scope:local -__13EPerfectShiftP10HSIMABLE__f = .text:0x801DEB80; // type:function size:0x24 scope:global -_._13EPerfectShift = .text:0x801DEBA4; // type:function size:0x10C scope:global -GetEventName__C13EPerfectShift = .text:0x801DECB0; // type:function size:0xC scope:global -EPerfectShift_MakeEvent_Callback__FPCv = .text:0x801DECBC; // type:function size:0x3C scope:local -__11EPlayEndNISPCc = .text:0x801DECF8; // type:function size:0x48 scope:global -_._11EPlayEndNIS = .text:0x801DED40; // type:function size:0x88 scope:global -GetEventName__C11EPlayEndNIS = .text:0x801DEDC8; // type:function size:0xC scope:global -EPlayEndNIS_MakeEvent_Callback__FPCv = .text:0x801DEDD4; // type:function size:0x38 scope:local -EPlayEndNIS_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DEE0C; // type:function size:0x5C scope:local -EPlayEndNIS_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DEE68; // type:function size:0x28 scope:local -__15EPlayerAirborneP10HSIMABLE__ = .text:0x801DEE90; // type:function size:0x20 scope:global -_._15EPlayerAirborne = .text:0x801DEEB0; // type:function size:0xC4 scope:global -GetEventName__C15EPlayerAirborne = .text:0x801DEF74; // type:function size:0xC scope:global -EPlayerAirborne_MakeEvent_Callback__FPCv = .text:0x801DEF80; // type:function size:0x38 scope:local -__12EPlayerShiftP10HSIMABLE__11ShiftStatusb6GearIDT4 = .text:0x801DEFB8; // type:function size:0x30 scope:global -_._12EPlayerShift = .text:0x801DEFE8; // type:function size:0x10C scope:global -GetEventName__C12EPlayerShift = .text:0x801DF0F4; // type:function size:0xC scope:global -EPlayerShift_MakeEvent_Callback__FPCv = .text:0x801DF100; // type:function size:0x48 scope:local -__19EPlayerTriggeredNOSP10HSIMABLE__ = .text:0x801DF148; // type:function size:0x20 scope:global -_._19EPlayerTriggeredNOS = .text:0x801DF168; // type:function size:0x198 scope:global -GetEventName__C19EPlayerTriggeredNOS = .text:0x801DF300; // type:function size:0xC scope:global -EPlayerTriggeredNOS_MakeEvent_Callback__FPCv = .text:0x801DF30C; // type:function size:0x38 scope:local -__17EPlayObjectEffectPCcG6UCrc32fT2UiUiUiGQ25UMath7Vector4 = .text:0x801DF344; // type:function size:0x74 scope:global -_._17EPlayObjectEffect = .text:0x801DF3B8; // type:function size:0x524 scope:global -GetEventName__C17EPlayObjectEffect = .text:0x801DF8DC; // type:function size:0xC scope:global -EPlayObjectEffect_MakeEvent_Callback__FPCv = .text:0x801DF8E8; // type:function size:0x94 scope:local -EPlayObjectEffect_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DF97C; // type:function size:0x178 scope:local -EPlayObjectEffect_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DFAF4; // type:function size:0x28 scope:local -__14EPlayRaceMoviePCc = .text:0x801DFB1C; // type:function size:0xE8 scope:global -_._14EPlayRaceMovie = .text:0x801DFC04; // type:function size:0x38 scope:global -GetEventName__C14EPlayRaceMovie = .text:0x801DFC3C; // type:function size:0xC scope:global -EPlayRaceMovie_MakeEvent_Callback__FPCv = .text:0x801DFC48; // type:function size:0x38 scope:local -EPlayRaceMovie_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DFC80; // type:function size:0x5C scope:local -EPlayRaceMovie_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DFCDC; // type:function size:0x28 scope:local -__12EPlayRaceNISP7GMarkerPCcT2iiT2T2 = .text:0x801DFD04; // type:function size:0x880 scope:global -_._12EPlayRaceNIS = .text:0x801E0584; // type:function size:0x38 scope:global -GetEventName__C12EPlayRaceNIS = .text:0x801E05BC; // type:function size:0xC scope:global -EPlayRaceNIS_MakeEvent_Callback__FPCv = .text:0x801E05C8; // type:function size:0x50 scope:local -EPlayRaceNIS_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E0618; // type:function size:0xE4 scope:local -EPlayRaceNIS_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E06FC; // type:function size:0x78 scope:local -__20EProcessAreaStimulusG6UCrc32N21fGQ25UMath7Vector4 = .text:0x801E0774; // type:function size:0x5C scope:global -_._20EProcessAreaStimulus = .text:0x801E07D0; // type:function size:0x154 scope:global -GetEventName__C20EProcessAreaStimulus = .text:0x801E0924; // type:function size:0xC scope:global -EProcessAreaStimulus_MakeEvent_Callback__FPCv = .text:0x801E0930; // type:function size:0x90 scope:local -EProcessAreaStimulus_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E09C0; // type:function size:0xDC scope:local -EProcessAreaStimulus_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E0A9C; // type:function size:0x4 scope:local -__16EProcessStimulusG6UCrc32N21UiUi = .text:0x801E0AA0; // type:function size:0x3C scope:global -_._16EProcessStimulus = .text:0x801E0ADC; // type:function size:0x204 scope:global -GetEventName__C16EProcessStimulus = .text:0x801E0CE0; // type:function size:0xC scope:global -EProcessStimulus_MakeEvent_Callback__FPCv = .text:0x801E0CEC; // type:function size:0x6C scope:local -EProcessStimulus_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E0D58; // type:function size:0xA0 scope:local -EProcessStimulus_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E0DF8; // type:function size:0x4 scope:local -__15EPursuitBreakeri = .text:0x801E0DFC; // type:function size:0x1D4 scope:global -_._15EPursuitBreaker = .text:0x801E0FD0; // type:function size:0x38 scope:global -GetEventName__C15EPursuitBreaker = .text:0x801E1008; // type:function size:0xC scope:global -EPursuitBreaker_MakeEvent_Callback__FPCv = .text:0x801E1014; // type:function size:0x38 scope:local -__9EQuitDemo17DemoDiscEndReason = .text:0x801E104C; // type:function size:0xA8 scope:global -_._9EQuitDemo = .text:0x801E10F4; // type:function size:0x38 scope:global -GetEventName__C9EQuitDemo = .text:0x801E112C; // type:function size:0xC scope:global -EQuitDemo_MakeEvent_Callback__FPCv = .text:0x801E1138; // type:function size:0x38 scope:local -__9EQuitToFE11eGarageTypePCc = .text:0x801E1170; // type:function size:0x58 scope:global -_._9EQuitToFE = .text:0x801E11C8; // type:function size:0x43C scope:global -GetEventName__C9EQuitToFE = .text:0x801E1604; // type:function size:0xC scope:global -EQuitToFE_MakeEvent_Callback__FPCv = .text:0x801E1610; // type:function size:0x3C scope:local -__13ERaceSheetOff = .text:0x801E164C; // type:function size:0x1C scope:global -_._13ERaceSheetOff = .text:0x801E1668; // type:function size:0x68 scope:global -GetEventName__C13ERaceSheetOff = .text:0x801E16D0; // type:function size:0xC scope:global -ERaceSheetOff_MakeEvent_Callback__FPCv = .text:0x801E16DC; // type:function size:0x28 scope:local -__12ERaceSheetOni = .text:0x801E1704; // type:function size:0xE0 scope:global -_._12ERaceSheetOn = .text:0x801E17E4; // type:function size:0x38 scope:global -GetEventName__C12ERaceSheetOn = .text:0x801E181C; // type:function size:0xC scope:global -ERaceSheetOn_MakeEvent_Callback__FPCv = .text:0x801E1828; // type:function size:0x38 scope:local -__16ERandomEventListPQ24CARP9EventList = .text:0x801E1860; // type:function size:0x20 scope:global -_._16ERandomEventList = .text:0x801E1880; // type:function size:0xBC scope:global -GetEventName__C16ERandomEventList = .text:0x801E193C; // type:function size:0xC scope:global -ERandomEventList_MakeEvent_Callback__FPCv = .text:0x801E1948; // type:function size:0x38 scope:local -ERandomEventList_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E1980; // type:function size:0x5C scope:local -ERandomEventList_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E19DC; // type:function size:0x28 scope:local -__16ERandomExplosioniiP8WTrigger = .text:0x801E1A04; // type:function size:0x28 scope:global -_._16ERandomExplosion = .text:0x801E1A2C; // type:function size:0x38 scope:global -GetEventName__C16ERandomExplosion = .text:0x801E1A64; // type:function size:0xC scope:global -ERandomExplosion_MakeEvent_Callback__FPCv = .text:0x801E1A70; // type:function size:0x44 scope:local -ERandomExplosion_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E1AB4; // type:function size:0x88 scope:local -ERandomExplosion_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E1B3C; // type:function size:0x4 scope:local -__11EReloadGameP16GRuntimeInstance = .text:0x801E1B40; // type:function size:0x80 scope:global -_._11EReloadGame = .text:0x801E1BC0; // type:function size:0xA4 scope:global -GetEventName__C11EReloadGame = .text:0x801E1C64; // type:function size:0xC scope:global -EReloadGame_MakeEvent_Callback__FPCv = .text:0x801E1C70; // type:function size:0x38 scope:local -EReloadGame_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E1CA8; // type:function size:0x5C scope:local -EReloadGame_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E1D04; // type:function size:0x28 scope:local -__10EReloadHud = .text:0x801E1D2C; // type:function size:0x1C scope:global -_._10EReloadHud = .text:0x801E1D48; // type:function size:0x308 scope:global -GetEventName__C10EReloadHud = .text:0x801E2050; // type:function size:0xC scope:global -EReloadHud_MakeEvent_Callback__FPCv = .text:0x801E205C; // type:function size:0x28 scope:local -EReloadHud_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E2084; // type:function size:0x38 scope:local -EReloadHud_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E20BC; // type:function size:0x4 scope:local -__17EReportInfractionQ218GInfractionManager14InfractionType = .text:0x801E20C0; // type:function size:0x20 scope:global -_._17EReportInfraction = .text:0x801E20E0; // type:function size:0x1F4 scope:global -GetEventName__C17EReportInfraction = .text:0x801E22D4; // type:function size:0xC scope:global -EReportInfraction_MakeEvent_Callback__FPCv = .text:0x801E22E0; // type:function size:0x38 scope:local -__23EReportMilestoneAtStakeP10GMilestone = .text:0x801E2318; // type:function size:0x12C scope:global -_._23EReportMilestoneAtStake = .text:0x801E2444; // type:function size:0x38 scope:global -GetEventName__C23EReportMilestoneAtStake = .text:0x801E247C; // type:function size:0xC scope:global -EReportMilestoneAtStake_MakeEvent_Callback__FPCv = .text:0x801E2488; // type:function size:0x38 scope:local -EReportMilestoneAtStake_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E24C0; // type:function size:0x5C scope:local -EReportMilestoneAtStake_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E251C; // type:function size:0x28 scope:local -__23ERequestEventInfoDialogiP16GRuntimeInstance = .text:0x801E2544; // type:function size:0x24 scope:global -_._23ERequestEventInfoDialog = .text:0x801E2568; // type:function size:0x78 scope:global -GetEventName__C23ERequestEventInfoDialog = .text:0x801E25E0; // type:function size:0xC scope:global -ERequestEventInfoDialog_MakeEvent_Callback__FPCv = .text:0x801E25EC; // type:function size:0x3C scope:local -ERequestEventInfoDialog_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E2628; // type:function size:0x78 scope:local -ERequestEventInfoDialog_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E26A0; // type:function size:0x28 scope:local -__15EResetPlayerCar = .text:0x801E26C8; // type:function size:0x1C scope:global -_._15EResetPlayerCar = .text:0x801E26E4; // type:function size:0xAC scope:global -GetEventName__C15EResetPlayerCar = .text:0x801E2790; // type:function size:0xC scope:global -EResetPlayerCar_MakeEvent_Callback__FPCv = .text:0x801E279C; // type:function size:0x28 scope:local -EResetPlayerCar_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E27C4; // type:function size:0x38 scope:local -EResetPlayerCar_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E27FC; // type:function size:0x4 scope:local -__11EResetProps = .text:0x801E2800; // type:function size:0x1C scope:global -_._11EResetProps = .text:0x801E281C; // type:function size:0x5C scope:global -GetEventName__C11EResetProps = .text:0x801E2878; // type:function size:0xC scope:global -EResetProps_MakeEvent_Callback__FPCv = .text:0x801E2884; // type:function size:0x28 scope:local -EResetProps_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E28AC; // type:function size:0x38 scope:local -EResetProps_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E28E4; // type:function size:0x4 scope:local -__15EResetSequencerUi = .text:0x801E28E8; // type:function size:0x20 scope:global -_._15EResetSequencer = .text:0x801E2908; // type:function size:0xB8 scope:global -GetEventName__C15EResetSequencer = .text:0x801E29C0; // type:function size:0xC scope:global -EResetSequencer_MakeEvent_Callback__FPCv = .text:0x801E29CC; // type:function size:0x30 scope:local -EResetSequencer_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E29FC; // type:function size:0x40 scope:local -EResetSequencer_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E2A3C; // type:function size:0x4 scope:local -__12EResetSystemG6UCrc32UiUi = .text:0x801E2A40; // type:function size:0x2C scope:global -_._12EResetSystem = .text:0x801E2A6C; // type:function size:0x138 scope:global -GetEventName__C12EResetSystem = .text:0x801E2BA4; // type:function size:0xC scope:global -EResetSystem_MakeEvent_Callback__FPCv = .text:0x801E2BB0; // type:function size:0x50 scope:local -EResetSystem_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E2C00; // type:function size:0x70 scope:local -EResetSystem_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E2C70; // type:function size:0x4 scope:local -__12ERestartRace = .text:0x801E2C74; // type:function size:0x150 scope:global -_._12ERestartRace = .text:0x801E2DC4; // type:function size:0x10C scope:global -GetEventName__C12ERestartRace = .text:0x801E2ED0; // type:function size:0xC scope:global -ERestartRace_MakeEvent_Callback__FPCv = .text:0x801E2EDC; // type:function size:0x28 scope:local -__14EScheduleEventPQ24CARP9EventListf = .text:0x801E2F04; // type:function size:0x24 scope:global -_._14EScheduleEvent = .text:0x801E2F28; // type:function size:0xD0 scope:global -GetEventName__C14EScheduleEvent = .text:0x801E2FF8; // type:function size:0xC scope:global -EScheduleEvent_MakeEvent_Callback__FPCv = .text:0x801E3004; // type:function size:0x3C scope:local -EScheduleEvent_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E3040; // type:function size:0x6C scope:local -EScheduleEvent_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E30AC; // type:function size:0x28 scope:local -__20EScheduleEventUpdatePvPQ24CARP9EventListifi = .text:0x801E30D4; // type:function size:0x30 scope:global -_._20EScheduleEventUpdate = .text:0x801E3104; // type:function size:0x104 scope:global -GetEventName__C20EScheduleEventUpdate = .text:0x801E3208; // type:function size:0xC scope:global -EScheduleEventUpdate_MakeEvent_Callback__FPCv = .text:0x801E3214; // type:function size:0x48 scope:local -__20ESetCopAutoSpawnModei = .text:0x801E325C; // type:function size:0x20 scope:global -_._20ESetCopAutoSpawnMode = .text:0x801E327C; // type:function size:0xB8 scope:global -GetEventName__C20ESetCopAutoSpawnMode = .text:0x801E3334; // type:function size:0xC scope:global -ESetCopAutoSpawnMode_MakeEvent_Callback__FPCv = .text:0x801E3340; // type:function size:0x38 scope:local -ESetCopAutoSpawnMode_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E3378; // type:function size:0x64 scope:local -ESetCopAutoSpawnMode_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E33DC; // type:function size:0x4 scope:local -__18ESetPlayerCarResetiPQ24CARP7Trigger = .text:0x801E33E0; // type:function size:0x24 scope:global -_._18ESetPlayerCarReset = .text:0x801E3404; // type:function size:0x174 scope:global -GetEventName__C18ESetPlayerCarReset = .text:0x801E3578; // type:function size:0xC scope:global -ESetPlayerCarReset_MakeEvent_Callback__FPCv = .text:0x801E3584; // type:function size:0x3C scope:local -ESetPlayerCarReset_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E35C0; // type:function size:0x78 scope:local -ESetPlayerCarReset_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E3638; // type:function size:0x28 scope:local -__24ESetPlayerCollisionCachei = .text:0x801E3660; // type:function size:0x20 scope:global -_._24ESetPlayerCollisionCache = .text:0x801E3680; // type:function size:0x38 scope:global -GetEventName__C24ESetPlayerCollisionCache = .text:0x801E36B8; // type:function size:0xC scope:global -ESetPlayerCollisionCache_MakeEvent_Callback__FPCv = .text:0x801E36C4; // type:function size:0x30 scope:local -ESetPlayerCollisionCache_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E36F4; // type:function size:0x40 scope:local -ESetPlayerCollisionCache_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E3734; // type:function size:0x4 scope:local -__11ESetSimRateff = .text:0x801E3738; // type:function size:0x24 scope:global -_._11ESetSimRate = .text:0x801E375C; // type:function size:0x38 scope:global -GetEventName__C11ESetSimRate = .text:0x801E3794; // type:function size:0xC scope:global -ESetSimRate_MakeEvent_Callback__FPCv = .text:0x801E37A0; // type:function size:0x3C scope:local -ESetSimRate_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E37DC; // type:function size:0x78 scope:local -ESetSimRate_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E3854; // type:function size:0x4 scope:local -__12EShockObjectfUi = .text:0x801E3858; // type:function size:0x24 scope:global -_._12EShockObject = .text:0x801E387C; // type:function size:0xE0 scope:global -GetEventName__C12EShockObject = .text:0x801E395C; // type:function size:0xC scope:global -EShockObject_MakeEvent_Callback__FPCv = .text:0x801E3968; // type:function size:0x40 scope:local -EShockObject_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E39A8; // type:function size:0x60 scope:local -EShockObject_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E3A08; // type:function size:0x4 scope:local -__20EShowMarketingScreeni = .text:0x801E3A0C; // type:function size:0xA0 scope:global -_._20EShowMarketingScreen = .text:0x801E3AAC; // type:function size:0x38 scope:global -GetEventName__C20EShowMarketingScreen = .text:0x801E3AE4; // type:function size:0xC scope:global -EShowMarketingScreen_MakeEvent_Callback__FPCv = .text:0x801E3AF0; // type:function size:0x38 scope:local -EShowMarketingScreen_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E3B28; // type:function size:0x64 scope:local -EShowMarketingScreen_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E3B8C; // type:function size:0x4 scope:local -__18EShowMessageScreenUi = .text:0x801E3B90; // type:function size:0x50 scope:global -_._18EShowMessageScreen = .text:0x801E3BE0; // type:function size:0x78 scope:global -GetEventName__C18EShowMessageScreen = .text:0x801E3C58; // type:function size:0xC scope:global -EShowMessageScreen_MakeEvent_Callback__FPCv = .text:0x801E3C64; // type:function size:0x38 scope:local -EShowMessageScreen_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E3C9C; // type:function size:0x90 scope:local -EShowMessageScreen_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E3D2C; // type:function size:0x4 scope:local -__15EShowMilestonesi = .text:0x801E3D30; // type:function size:0x120 scope:global -_._15EShowMilestones = .text:0x801E3E50; // type:function size:0x38 scope:global -GetEventName__C15EShowMilestones = .text:0x801E3E88; // type:function size:0xC scope:global -EShowMilestones_MakeEvent_Callback__FPCv = .text:0x801E3E94; // type:function size:0x38 scope:local -__18EShowRaceCountdown = .text:0x801E3ECC; // type:function size:0x1C scope:global -_._18EShowRaceCountdown = .text:0x801E3EE8; // type:function size:0xE4 scope:global -GetEventName__C18EShowRaceCountdown = .text:0x801E3FCC; // type:function size:0xC scope:global -EShowRaceCountdown_MakeEvent_Callback__FPCv = .text:0x801E3FD8; // type:function size:0x28 scope:local -EShowRaceCountdown_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E4000; // type:function size:0x38 scope:local -EShowRaceCountdown_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E4038; // type:function size:0x4 scope:local -__20EShowRaceOverMessageP7IPlayer = .text:0x801E403C; // type:function size:0x20 scope:global -_._20EShowRaceOverMessage = .text:0x801E405C; // type:function size:0x108 scope:global -GetEventName__C20EShowRaceOverMessage = .text:0x801E4164; // type:function size:0xC scope:global -EShowRaceOverMessage_MakeEvent_Callback__FPCv = .text:0x801E4170; // type:function size:0x38 scope:local -EShowRaceOverMessage_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E41A8; // type:function size:0x5C scope:local -EShowRaceOverMessage_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E4204; // type:function size:0x28 scope:local -__12EShowResults12FERESULTTYPEb = .text:0x801E422C; // type:function size:0x204 scope:global -_._12EShowResults = .text:0x801E4430; // type:function size:0x38 scope:global -GetEventName__C12EShowResults = .text:0x801E4468; // type:function size:0xC scope:global -EShowResults_MakeEvent_Callback__FPCv = .text:0x801E4474; // type:function size:0x3C scope:local -__8EShowSMSi = .text:0x801E44B0; // type:function size:0x11C scope:global -_._8EShowSMS = .text:0x801E45CC; // type:function size:0x38 scope:global -GetEventName__C8EShowSMS = .text:0x801E4604; // type:function size:0xC scope:global -EShowSMS_MakeEvent_Callback__FPCv = .text:0x801E4610; // type:function size:0x38 scope:local -EShowSMS_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E4648; // type:function size:0x64 scope:local -EShowSMS_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E46AC; // type:function size:0x4 scope:local -__18EShowTimeExtensionP7IPlayerf = .text:0x801E46B0; // type:function size:0x24 scope:global -_._18EShowTimeExtension = .text:0x801E46D4; // type:function size:0xBC scope:global -GetEventName__C18EShowTimeExtension = .text:0x801E4790; // type:function size:0xC scope:global -EShowTimeExtension_MakeEvent_Callback__FPCv = .text:0x801E479C; // type:function size:0x3C scope:local -EShowTimeExtension_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E47D8; // type:function size:0x6C scope:local -EShowTimeExtension_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E4844; // type:function size:0x28 scope:local -__9ESimulatePQ33UTL3COM8IUnknown = .text:0x801E486C; // type:function size:0x20 scope:global -_._9ESimulate = .text:0x801E488C; // type:function size:0x5C scope:global -GetEventName__C9ESimulate = .text:0x801E48E8; // type:function size:0xC scope:global -ESimulate_MakeEvent_Callback__FPCv = .text:0x801E48F4; // type:function size:0x38 scope:local -__13ESndGameStateib = .text:0x801E492C; // type:function size:0x24 scope:global -_._13ESndGameState = .text:0x801E4950; // type:function size:0x6C scope:global -GetEventName__C13ESndGameState = .text:0x801E49BC; // type:function size:0xC scope:global -ESndGameState_MakeEvent_Callback__FPCv = .text:0x801E49C8; // type:function size:0x3C scope:local -ESndGameState_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E4A04; // type:function size:0x84 scope:local -ESndGameState_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E4A88; // type:function size:0x4 scope:local -__15ESpawnExplosionG6UCrc32fffUiUiUiUiUiUi = .text:0x801E4A8C; // type:function size:0x58 scope:global -_._15ESpawnExplosion = .text:0x801E4AE4; // type:function size:0x32C scope:global -GetEventName__C15ESpawnExplosion = .text:0x801E4E10; // type:function size:0xC scope:global -ESpawnExplosion_MakeEvent_Callback__FPCv = .text:0x801E4E1C; // type:function size:0x6C scope:local -ESpawnExplosion_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E4E88; // type:function size:0x228 scope:local -ESpawnExplosion_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E50B0; // type:function size:0x4 scope:local -__14ESpawnFragmentG6UCrc32N31UifUiUiUiUiUiUiGQ25UMath7Vector4T13_ = .text:0x801E50B4; // type:function size:0xCC scope:global -_._14ESpawnFragment = .text:0x801E5180; // type:function size:0x874 scope:global -GetEventName__C14ESpawnFragment = .text:0x801E59F4; // type:function size:0xC scope:global -ESpawnFragment_MakeEvent_Callback__FPCv = .text:0x801E5A00; // type:function size:0xF4 scope:local -ESpawnFragment_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E5AF4; // type:function size:0x2E8 scope:local -ESpawnFragment_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E5DDC; // type:function size:0x4 scope:local -__15ESpawnSmackableGQ25UMath7Vector3P8HMODEL__GQ25UMath7Vector4bP8WTriggerUi = .text:0x801E5DE0; // type:function size:0x160 scope:global -_._15ESpawnSmackable = .text:0x801E5F40; // type:function size:0x344 scope:global -GetEventName__C15ESpawnSmackable = .text:0x801E6284; // type:function size:0xC scope:global -ESpawnSmackable_MakeEvent_Callback__FPCv = .text:0x801E6290; // type:function size:0x9C scope:local -__17EStopObjectEffectG6UCrc32Ui = .text:0x801E632C; // type:function size:0x28 scope:global -_._17EStopObjectEffect = .text:0x801E6354; // type:function size:0xD4 scope:global -GetEventName__C17EStopObjectEffect = .text:0x801E6428; // type:function size:0xC scope:global -EStopObjectEffect_MakeEvent_Callback__FPCv = .text:0x801E6434; // type:function size:0x48 scope:local -EStopObjectEffect_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E647C; // type:function size:0x68 scope:local -EStopObjectEffect_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E64E4; // type:function size:0x4 scope:local -__18EStopObjectEffectsUi = .text:0x801E64E8; // type:function size:0x20 scope:global -_._18EStopObjectEffects = .text:0x801E6508; // type:function size:0xB4 scope:global -GetEventName__C18EStopObjectEffects = .text:0x801E65BC; // type:function size:0xC scope:global -EStopObjectEffects_MakeEvent_Callback__FPCv = .text:0x801E65C8; // type:function size:0x30 scope:local -EStopObjectEffects_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E65F8; // type:function size:0x40 scope:local -EStopObjectEffects_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E6638; // type:function size:0x4 scope:local -__15ETerminateMusic = .text:0x801E663C; // type:function size:0x1C scope:global -_._15ETerminateMusic = .text:0x801E6658; // type:function size:0xA4 scope:global -GetEventName__C15ETerminateMusic = .text:0x801E66FC; // type:function size:0xC scope:global -ETerminateMusic_MakeEvent_Callback__FPCv = .text:0x801E6708; // type:function size:0x28 scope:local -ETerminateMusic_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E6730; // type:function size:0x38 scope:local -ETerminateMusic_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E6768; // type:function size:0x4 scope:local -__5ETipsii = .text:0x801E676C; // type:function size:0x24 scope:global -_._5ETips = .text:0x801E6790; // type:function size:0x38 scope:global -GetEventName__C5ETips = .text:0x801E67C8; // type:function size:0xC scope:global -ETips_MakeEvent_Callback__FPCv = .text:0x801E67D4; // type:function size:0x3C scope:local -ETips_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E6810; // type:function size:0x80 scope:local -ETips_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E6890; // type:function size:0x4 scope:local -__10ETireBlownP10HSIMABLE__Ui = .text:0x801E6894; // type:function size:0x24 scope:global -_._10ETireBlown = .text:0x801E68B8; // type:function size:0x274 scope:global -GetEventName__C10ETireBlown = .text:0x801E6B2C; // type:function size:0xC scope:global -ETireBlown_MakeEvent_Callback__FPCv = .text:0x801E6B38; // type:function size:0x3C scope:local -__14ETirePuncturedP10HSIMABLE__Ui = .text:0x801E6B74; // type:function size:0x24 scope:global -_._14ETirePunctured = .text:0x801E6B98; // type:function size:0x270 scope:global -GetEventName__C14ETirePunctured = .text:0x801E6E08; // type:function size:0xC scope:global -ETirePunctured_MakeEvent_Callback__FPCv = .text:0x801E6E14; // type:function size:0x3C scope:local -__17ETriggerMomentNISPCcUi = .text:0x801E6E50; // type:function size:0x24 scope:global -_._17ETriggerMomentNIS = .text:0x801E6E74; // type:function size:0x14C scope:global -GetEventName__C17ETriggerMomentNIS = .text:0x801E6FC0; // type:function size:0xC scope:global -ETriggerMomentNIS_MakeEvent_Callback__FPCv = .text:0x801E6FCC; // type:function size:0x40 scope:local -ETriggerMomentNIS_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E700C; // type:function size:0x64 scope:local -ETriggerMomentNIS_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E7070; // type:function size:0x28 scope:local -__12ETuneVehicleUiPCQ27Physics7Tunings = .text:0x801E7098; // type:function size:0x24 scope:global -_._12ETuneVehicle = .text:0x801E70BC; // type:function size:0xE8 scope:global -GetEventName__C12ETuneVehicle = .text:0x801E71A4; // type:function size:0xC scope:global -ETuneVehicle_MakeEvent_Callback__FPCv = .text:0x801E71B0; // type:function size:0x3C scope:local -__8EUnPause = .text:0x801E71EC; // type:function size:0x1C scope:global -_._8EUnPause = .text:0x801E7208; // type:function size:0xC4 scope:global -GetEventName__C8EUnPause = .text:0x801E72CC; // type:function size:0xC scope:global -EUnPause_MakeEvent_Callback__FPCv = .text:0x801E72D8; // type:function size:0x28 scope:local -__17EVehicleDestroyedP10HSIMABLE__ = .text:0x801E7300; // type:function size:0x20 scope:global -_._17EVehicleDestroyed = .text:0x801E7320; // type:function size:0x228 scope:global -GetEventName__C17EVehicleDestroyed = .text:0x801E7548; // type:function size:0xC scope:global -EVehicleDestroyed_MakeEvent_Callback__FPCv = .text:0x801E7554; // type:function size:0x38 scope:local -__13EVehicleResetUiGQ25UMath7Vector3T2 = .text:0x801E758C; // type:function size:0x58 scope:global -_._13EVehicleReset = .text:0x801E75E4; // type:function size:0x11C scope:global -GetEventName__C13EVehicleReset = .text:0x801E7700; // type:function size:0xC scope:global -EVehicleReset_MakeEvent_Callback__FPCv = .text:0x801E770C; // type:function size:0x80 scope:local -__11EWakeObjectUi = .text:0x801E778C; // type:function size:0x20 scope:global -_._11EWakeObject = .text:0x801E77AC; // type:function size:0x158 scope:global -GetEventName__C11EWakeObject = .text:0x801E7904; // type:function size:0xC scope:global -EWakeObject_MakeEvent_Callback__FPCv = .text:0x801E7910; // type:function size:0x30 scope:local -EWakeObject_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E7940; // type:function size:0x40 scope:local -EWakeObject_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E7980; // type:function size:0x4 scope:local -__12EWorldMapOff = .text:0x801E7984; // type:function size:0x1C scope:global -_._12EWorldMapOff = .text:0x801E79A0; // type:function size:0x80 scope:global -GetEventName__C12EWorldMapOff = .text:0x801E7A20; // type:function size:0xC scope:global -EWorldMapOff_MakeEvent_Callback__FPCv = .text:0x801E7A2C; // type:function size:0x28 scope:local -__11EWorldMapOn = .text:0x801E7A54; // type:function size:0x8C scope:global -_._11EWorldMapOn = .text:0x801E7AE0; // type:function size:0x38 scope:global -GetEventName__C11EWorldMapOn = .text:0x801E7B18; // type:function size:0xC scope:global -EWorldMapOn_MakeEvent_Callback__FPCv = .text:0x801E7B24; // type:function size:0x28 scope:local -EWorldMapOn_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E7B4C; // type:function size:0x38 scope:local -EWorldMapOn_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E7B84; // type:function size:0x4 scope:local -LookupEvent__13RegisterEventUi = .text:0x801E7B88; // type:function size:0x50 scope:global -ResolveEvent__13RegisterEventUi = .text:0x801E7BD8; // type:function size:0x50 scope:global -GetLuaBinding__13RegisterEventUi = .text:0x801E7C28; // type:function size:0x50 scope:global -BindMessagesToLua__12EventManagerRQ33UTL3Stdt6vector2ZPQ26Hermes13_h_HHANDLER__ZQ26Hermes28_type_ID_HermesHandlerVector = .text:0x801E7C78; // type:function size:0x1E14 scope:global -QSimTime__5QueryPCQ33UTL3COM8IUnknownT1PCvUiPv = .text:0x801E9A8C; // type:function size:0x34 scope:global -QSimTime_Resolver__5QueryPvPC6UGroup = .text:0x801E9AC0; // type:function size:0x4 scope:local -QSimTime_ByteSwapper__5QueryPv = .text:0x801E9AC4; // type:function size:0x4 scope:local -Invoke__5QueryUiPCQ33UTL3COM8IUnknownT2PCvUiPv = .text:0x801E9AC8; // type:function size:0x80 scope:global -LookupQueryFunc__5QueryUi = .text:0x801E9B48; // type:function size:0x48 scope:global -ResolveStaticData__5QueryPCvPC6UGroup = .text:0x801E9B90; // type:function size:0x60 scope:global -ByteSwapStaticData__5QueryPCv = .text:0x801E9BF0; // type:function size:0x58 scope:global -DefaultDataArea__6AttribUi = .text:0x801E9C48; // type:function size:0xC scope:global -Lookup__Q26Attrib8TypeDescUi = .text:0x801E9C54; // type:function size:0x8C scope:global -NameToType__Q26Attrib8TypeDescPCc = .text:0x801E9CE0; // type:function size:0x20 scope:global -__9ActionRefP10ActionData = .text:0x801E9D00; // type:function size:0x8 scope:global -__10ActionDataifi = .text:0x801E9D08; // type:function size:0x14 scope:global -getActionIDString__F8ActionID = .text:0x801E9D1C; // type:function size:0x2C scope:global -__11ActionQueueb = .text:0x801E9D48; // type:function size:0x1FC scope:global -__11ActionQueueiUiPCcb = .text:0x801E9F44; // type:function size:0x210 scope:global -_._11ActionQueue = .text:0x801EA154; // type:function size:0x16C scope:global -IsConnected__C11ActionQueue = .text:0x801EA2C0; // type:function size:0x1C scope:global -IO_SetConnected__11ActionQueueb = .text:0x801EA2DC; // type:function size:0x8C scope:global -IO_Flush__11ActionQueue = .text:0x801EA368; // type:function size:0x54 scope:global -Init__11ActionQueueiUi = .text:0x801EA3BC; // type:function size:0xCC scope:global -SetPort__11ActionQueuei = .text:0x801EA488; // type:function size:0x24 scope:global -SetConfig__11ActionQueueUiPCc = .text:0x801EA4AC; // type:function size:0x2C scope:global -IsEnabled__C11ActionQueue = .text:0x801EA4D8; // type:function size:0x18 scope:global -Enable__11ActionQueueb = .text:0x801EA4F0; // type:function size:0x6C scope:global -FetchCurrentValues__11ActionQueueP11InputDevice = .text:0x801EA55C; // type:function size:0x1E8 scope:global -FindActionQueue__11ActionQueuei = .text:0x801EA744; // type:function size:0x44 scope:global -AssignUniqueID__11ActionQueue = .text:0x801EA788; // type:function size:0x44 scope:global -IO_UpdateFromDevice__11ActionQueue = .text:0x801EA7CC; // type:function size:0x2B0 scope:global -OnActivationChange__11ActionQueue = .text:0x801EAA7C; // type:function size:0xC0 scope:global -IsEmpty__11ActionQueue = .text:0x801EAB3C; // type:function size:0x10 scope:global -ReceiveAction__11ActionQueueR10ActionData = .text:0x801EAB4C; // type:function size:0x188 scope:global -PopAction__11ActionQueue = .text:0x801EACD4; // type:function size:0x40 scope:global -Flush__11ActionQueue = .text:0x801EAD14; // type:function size:0x80 scope:global -GetAction__11ActionQueue = .text:0x801EAD94; // type:function size:0x70 scope:global -BeginJoylogFrame__11ActionQueue = .text:0x801EAE04; // type:function size:0xA0 scope:global -EndJoylogFrame__11ActionQueue = .text:0x801EAEA4; // type:function size:0x44 scope:global -__12InputMappingP11InputDevicePCQ26Attrib10Collection = .text:0x801EAEE8; // type:function size:0x294 scope:global -_._12InputMapping = .text:0x801EB17C; // type:function size:0x78 scope:global -__12DeviceScalar = .text:0x801EB1F4; // type:function size:0x28 scope:global -InitializeDeviceScalar__12DeviceScalar16DeviceScalarTypePCcPfT3 = .text:0x801EB21C; // type:function size:0x4C scope:global -__11InputDevicei = .text:0x801EB268; // type:function size:0x54 scope:global -_._11InputDevice = .text:0x801EB2BC; // type:function size:0x68 scope:global -DeviceHasChanged__11InputDevice = .text:0x801EB324; // type:function size:0x94 scope:global -DeviceHasAnyActivity__11InputDevice = .text:0x801EB3B8; // type:function size:0x80 scope:global -SaveCurrentState__11InputDevice = .text:0x801EB438; // type:function size:0x8C scope:global -RestoreToState__11InputDevicePf = .text:0x801EB4C4; // type:function size:0x68 scope:global -__9SimRandom = .text:0x801EB52C; // type:function size:0x14 scope:global -_._9SimRandom = .text:0x801EB540; // type:function size:0x48 scope:global -Reset__9SimRandom = .text:0x801EB588; // type:function size:0x7C scope:global -SimRandom_Generate__9SimRandom = .text:0x801EB604; // type:function size:0x30 scope:global -Init__12EventManager = .text:0x801EB634; // type:function size:0x40 scope:global -Reset__12EventManager = .text:0x801EB674; // type:function size:0x28 scope:global -RunEvents__12EventManager = .text:0x801EB69C; // type:function size:0x88 scope:global -FireEventList__12EventManagerPCQ24CARP9EventListb = .text:0x801EB724; // type:function size:0x98 scope:global -FireOneEvent__12EventManagerPCQ24CARP9EventListUib = .text:0x801EB7BC; // type:function size:0x78 scope:global -ListHasEvent__12EventManagerPCQ24CARP9EventListUiPPCQ24CARP15EventStaticData = .text:0x801EB834; // type:function size:0x50 scope:global -EventsQueued__12EventManager = .text:0x801EB884; // type:function size:0x20 scope:global -GetEmbeddedObjectSize__H1ZCc_PX01_Ui = .text:0x801EB8A4; // type:function size:0x24 scope:local -GetEmbeddedObjectSize__H1ZQ26Hermes7Message_PX01_Ui = .text:0x801EB8C8; // type:function size:0x8 scope:local -__nw__5EventUi = .text:0x801EB8D0; // type:function size:0x1C scope:global -__dl__5EventPvUi = .text:0x801EB8EC; // type:function size:0x18 scope:global -StimulusFilterLookup__FUiUiPCvPCQ24CARP11ExprValType = .text:0x801EB904; // type:function size:0x8C scope:local -Init__14EventSequencerf = .text:0x801EB990; // type:function size:0x18 scope:global -Reset__14EventSequencerf = .text:0x801EB9A8; // type:function size:0xC scope:global -Update__14EventSequencerf = .text:0x801EB9B4; // type:function size:0x98 scope:global -UpdateDelta__14EventSequencerf = .text:0x801EBA4C; // type:function size:0x44 scope:global -RegisterEngines__14EventSequencerPC6UGroup = .text:0x801EBA90; // type:function size:0x144 scope:local -UnregisterEngines__14EventSequencerPC6UGroup = .text:0x801EBBD4; // type:function size:0x24C scope:local -FindEngineData__14EventSequencerG6UCrc32 = .text:0x801EBE20; // type:function size:0x9C scope:local -Create__14EventSequencerPQ33UTL3COM6ObjectPQ214EventSequencer8IContextPC5UDataff = .text:0x801EBEBC; // type:function size:0x310 scope:global -Create__14EventSequencerPQ33UTL3COM6ObjectPQ214EventSequencer8IContextG6UCrc32ff = .text:0x801EC1CC; // type:function size:0x74 scope:global -PrepareBinary__14EventSequencerPCv = .text:0x801EC240; // type:function size:0x40 scope:global -StringToID__14EventSequencerPCc = .text:0x801EC280; // type:function size:0x20 scope:global -EraseActiveSystem__14EventSequencerUi = .text:0x801EC2A0; // type:function size:0x80 scope:local -ID__CQ214EventSequencer6System = .text:0x801EC320; // type:function size:0x60 scope:global -GetContext__CQ214EventSequencer6System = .text:0x801EC380; // type:function size:0xC scope:global -SetState__Q214EventSequencer6SystemfUi = .text:0x801EC38C; // type:function size:0x158 scope:global -IsInAction__CQ214EventSequencer6System = .text:0x801EC4E4; // type:function size:0x18 scope:global -IsPaused__CQ214EventSequencer6System = .text:0x801EC4FC; // type:function size:0x20 scope:global -GetActionRate__CQ214EventSequencer6System = .text:0x801EC51C; // type:function size:0x8 scope:global -Flush__Q214EventSequencer6System = .text:0x801EC524; // type:function size:0x7C scope:global -Stop__Q214EventSequencer6SystemfbPQ214EventSequencer8IContext = .text:0x801EC5A0; // type:function size:0x64 scope:global -Complete__Q214EventSequencer6SystemfbPQ214EventSequencer8IContext = .text:0x801EC604; // type:function size:0x88 scope:global -Pause__Q214EventSequencer6SystemfPQ214EventSequencer8IContext = .text:0x801EC68C; // type:function size:0x5C scope:global -Resume__Q214EventSequencer6SystemfPQ214EventSequencer8IContext = .text:0x801EC6E8; // type:function size:0x78 scope:global -Reset__Q214EventSequencer6SystemffPQ214EventSequencer8IContext = .text:0x801EC760; // type:function size:0x58 scope:global -ProcessStimulus__Q214EventSequencer6SystemUifPQ214EventSequencer8IContextQ214EventSequencer9QueueMode = .text:0x801EC7B8; // type:function size:0x310 scope:global -FireEventTag__CQ214EventSequencer6SystemUiPQ214EventSequencer8IContext = .text:0x801ECAC8; // type:function size:0xD0 scope:global -__Q214EventSequencer6SystemPQ214EventSequencer6EnginePCQ24CARP14EventSeqSystemff = .text:0x801ECB98; // type:function size:0x40 scope:global -_._Q214EventSequencer6System = .text:0x801ECBD8; // type:function size:0x54 scope:global -Update__Q214EventSequencer6SystemUif = .text:0x801ECC2C; // type:function size:0xEC scope:global -TerminateAction__Q214EventSequencer6SystemUiUifbPQ214EventSequencer8IContext = .text:0x801ECD18; // type:function size:0x120 scope:global -InvokeStimulus__Q214EventSequencer6SystemUifPQ214EventSequencer8IContext = .text:0x801ECE38; // type:function size:0x134 scope:global -FireActionEventList__CQ214EventSequencer6SystembUiPQ214EventSequencer8IContext = .text:0x801ECF6C; // type:function size:0x118 scope:global -FireTimedEvents__CQ214EventSequencer6Systemff = .text:0x801ED084; // type:function size:0x11C scope:global -Relocate__Q214EventSequencer6SystemUi = .text:0x801ED1A0; // type:function size:0x40 scope:global -Unload__Q214EventSequencer6System = .text:0x801ED1E0; // type:function size:0x64 scope:global -InternalReset__Q214EventSequencer6Systemff = .text:0x801ED244; // type:function size:0x198 scope:global -GetActiveIndex__CQ214EventSequencer6System = .text:0x801ED3DC; // type:function size:0x4C scope:global -ExecuteFilter__CQ214EventSequencer6SystemPCQ24CARP13EventSeqStateUiPQ214EventSequencer8IContext = .text:0x801ED428; // type:function size:0x10C scope:global -LoaderEventSequence__FP6bChunk = .text:0x801ED534; // type:function size:0xF4 scope:global -UnloaderEventSequence__FP6bChunk = .text:0x801ED628; // type:function size:0xC0 scope:global -__9Schedulerf = .text:0x801ED6E8; // type:function size:0x17C scope:global -Init__9Schedulerf = .text:0x801ED864; // type:function size:0x54 scope:global -AddSchedule__9SchedulerP8Schedule = .text:0x801ED8B8; // type:function size:0x70 scope:global -RunNormalSpeed__9SchedulerUi = .text:0x801ED928; // type:function size:0x148 scope:global -GetTargetTimer__9Scheduler = .text:0x801EDA70; // type:function size:0x14 scope:global -Run__9Schedulerb = .text:0x801EDA84; // type:function size:0x1B8 scope:global -Synchronize__9SchedulerG5Timer = .text:0x801EDC3C; // type:function size:0x24 scope:global -__8Schedulei = .text:0x801EDC60; // type:function size:0xD0 scope:global -_._8Schedule = .text:0x801EDD30; // type:function size:0xD4 scope:global -AddTask__8ScheduleiPQ25Event10StaticDataUsbii = .text:0x801EDE04; // type:function size:0xE4 scope:global -RemoveTask__8Schedulei = .text:0x801EDEE8; // type:function size:0xD0 scope:global -EmptiestBucket__8Schedule = .text:0x801EDFB8; // type:function size:0xEC scope:global -RunTasks__8ScheduleiUs = .text:0x801EE0A4; // type:function size:0xF8 scope:global -Process__24Schedule_OncePerGameLoopiUs = .text:0x801EE19C; // type:function size:0x24 scope:global -Process__16Schedule_SimRateiUs = .text:0x801EE1C0; // type:function size:0x24 scope:global -Process__20Schedule_HalfSimRateiUs = .text:0x801EE1E4; // type:function size:0x24 scope:global -Process__23Schedule_QuarterSimRateiUs = .text:0x801EE208; // type:function size:0x24 scope:global -__13VirtualMemory = .text:0x801EE22C; // type:function size:0x4 scope:global -__tcf_0 = .text:0x801EE230; // type:function size:0x4 scope:local -GetIOModule__8IOModule = .text:0x801EE234; // type:function size:0x5C scope:global -EnableUpdating__8IOModuleb = .text:0x801EE290; // type:function size:0xC scope:global -__8IOModule = .text:0x801EE29C; // type:function size:0x28 scope:global -CheckUnplugged__8IOModule = .text:0x801EE2C4; // type:function size:0x2F8 scope:global -PollDevices__8IOModule = .text:0x801EE5BC; // type:function size:0x74 scope:global -Update__8IOModule = .text:0x801EE630; // type:function size:0x58 scope:global -CreateDevices__8IOModule = .text:0x801EE688; // type:function size:0x168 scope:global -UpdateAllDevices__8IOModule = .text:0x801EE7F0; // type:function size:0xD8 scope:global -HaveAnyDevicesChanged__8IOModule = .text:0x801EE8C8; // type:function size:0xA8 scope:global -Initialize__8IOModule = .text:0x801EE970; // type:function size:0x20 scope:global -IsJoystickTypeWheel__F12JoystickPort = .text:0x801EE990; // type:function size:0x7C scope:global -Run__16InputEffectStatef = .text:0x801EEA0C; // type:function size:0x70 scope:global -Push__16InputEffectStatePQ29RealInput6Effect = .text:0x801EEA7C; // type:function size:0x128 scope:global -MyEnumDeviceCallback__FPQ29RealInput6DeviceUiPQ29RealInput9Interface = .text:0x801EEBA4; // type:function size:0x38 scope:local -InitEffects__Fv = .text:0x801EEBDC; // type:function size:0x60 scope:local -InitPads__Fv = .text:0x801EEC3C; // type:function size:0x80 scope:local -UpdatePads__Ff = .text:0x801EECBC; // type:function size:0x404 scope:local -ReleasePads__Fv = .text:0x801EF0C0; // type:function size:0x3C scope:local -Initialize__10GameDevice = .text:0x801EF0FC; // type:function size:0x94 scope:global -IsConnected__10GameDevice = .text:0x801EF190; // type:function size:0x8C scope:global -StartVibration__10GameDevice = .text:0x801EF21C; // type:function size:0xC4 scope:global -StopVibration__10GameDevice = .text:0x801EF2E0; // type:function size:0x38 scope:global -PollDevice__10GameDevice = .text:0x801EF318; // type:function size:0x544 scope:global -GetNumDeviceScalar__10GameDevice = .text:0x801EF85C; // type:function size:0x8 scope:global -__10GameDevicei = .text:0x801EF864; // type:function size:0x150 scope:global -_._10GameDevice = .text:0x801EF9B4; // type:function size:0xB0 scope:global -PauseEffects__10GameDevice = .text:0x801EFA64; // type:function size:0x5C scope:global -ResumeEffects__10GameDevice = .text:0x801EFAC0; // type:function size:0x58 scope:global -ResetEffects__10GameDevice = .text:0x801EFB18; // type:function size:0xE8 scope:global -BeginUpdate__10GameDevice = .text:0x801EFC00; // type:function size:0x24 scope:global -EndUpdate__10GameDevice = .text:0x801EFC24; // type:function size:0x4 scope:global -UpdateRoadNoise__10GameDevicebRC10SimSurfacef = .text:0x801EFC28; // type:function size:0x4 scope:global -UpdateTireSkid__10GameDevicebRC10SimSurfacef = .text:0x801EFC2C; // type:function size:0x4 scope:global -UpdateTireSlip__10GameDevicebRC10SimSurfacef = .text:0x801EFC30; // type:function size:0x4 scope:global -UpdateRPM__10GameDevicefff = .text:0x801EFC34; // type:function size:0x4 scope:global -UpdateShiftPotential__10GameDevice14ShiftPotential = .text:0x801EFC38; // type:function size:0x4 scope:global -UpdateEngineBlown__10GameDeviceb = .text:0x801EFC3C; // type:function size:0x4 scope:global -UpdateNOS__10GameDevicebf = .text:0x801EFC40; // type:function size:0x4 scope:global -UpdateShifting__10GameDeviceb = .text:0x801EFC44; // type:function size:0x4 scope:global -ReportCollision__10GameDeviceRCQ33Sim9Collision4Infob = .text:0x801EFC48; // type:function size:0x538 scope:global -UpdateForces__19SteeringWheelDeviceP7IPlayer = .text:0x801F0180; // type:function size:0x85C scope:global -StopAllForces__19SteeringWheelDevice = .text:0x801F09DC; // type:function size:0xC0 scope:global -ReadInput__19SteeringWheelDevicePf = .text:0x801F0A9C; // type:function size:0x460 scope:global -InitWheelSupport__19SteeringWheelDevice = .text:0x801F0EFC; // type:function size:0x8C scope:global -PollWheels__19SteeringWheelDevice = .text:0x801F0F88; // type:function size:0x30 scope:global -ConvertWheelRotation__19SteeringWheelDevicei = .text:0x801F0FB8; // type:function size:0xAC scope:global -ScaledForceParam__19SteeringWheelDevicef = .text:0x801F1064; // type:function size:0x10 scope:global -IsConnected__19SteeringWheelDevice = .text:0x801F1074; // type:function size:0x40 scope:global -GetSteeringType__19SteeringWheelDevice = .text:0x801F10B4; // type:function size:0x48 scope:global -WheelConnected__19SteeringWheelDevicei = .text:0x801F10FC; // type:function size:0x2C scope:global -EmbedField__H1ZCc_12EventManagerP5EventPX01_PX01 = .text:0x801F1128; // type:function size:0x80 scope:global -EmbedField__H1ZQ26Hermes7Message_12EventManagerP5EventPX01_PX01 = .text:0x801F11A8; // type:function size:0x80 scope:global -SearchPackedBinaryTree__H2ZCUiZUi_UiPX01X11_Ui = .text:0x801F1228; // type:function size:0x54 scope:global -reserve__Q24_STLt6vector2ZPQ26Hermes13_h_HHANDLER__ZQ33UTL3Stdt9Allocator2ZPQ26Hermes13_h_HHANDLER__ZQ26Hermes28_type_ID_HermesHandlerVectorUi = .text:0x801F127C; // type:function size:0x11C scope:global -find__H2ZPP11ActionQueueZP11ActionQueue_4_STLX01X01RCX11_X01 = .text:0x801F1398; // type:function size:0xB0 scope:global -clear__Q24_STLt10_List_base2Z13InputMapEntryZQ33UTL3Stdt9Allocator2Z13InputMapEntryZ10_type_list = .text:0x801F1448; // type:function size:0x78 scope:global -Get__H1Z20ControllerDataRecord_CQ26Attrib9AttributeUi_RCX01 = .text:0x801F14C0; // type:function size:0x50 scope:global -SearchPackedBinaryTree__H2ZCQ24CARP9QueryDescZUi_UiPX01X11_Ui = .text:0x801F1510; // type:function size:0x58 scope:global -_M_insert__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataZQ24_STLt4less1Z6UCrc32ZQ24_STLt9allocator1ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZC6UCrc32ZPC5UDataT1 = .text:0x801F1568; // type:function size:0x144 scope:global -insert_unique__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataZQ24_STLt4less1Z6UCrc32ZQ24_STLt9allocator1ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataRCQ24_STLt4pair2ZC6UCrc32ZPC5UData = .text:0x801F16AC; // type:function size:0x118 scope:global -insert_unique__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataZQ24_STLt4less1Z6UCrc32ZQ24_STLt9allocator1ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataRCQ24_STLt4pair2ZC6UCrc32ZPC5UData = .text:0x801F17C4; // type:function size:0x26C scope:global -_M_erase__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataZQ24_STLt4less1Z6UCrc32ZQ24_STLt9allocator1ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZC6UCrc32ZPC5UData = .text:0x801F1A30; // type:function size:0x6C scope:global -clear__Q24_STLt10_List_base2Z10TaskRecordZQ33UTL3Stdt9Allocator2Z10TaskRecordZ10_type_list = .text:0x801F1A9C; // type:function size:0x78 scope:global -CreateInstance__Q33UTL3COMt7Factory3ZiZ11InputDeviceZ6UCrc32G6UCrc32i = .text:0x801F1B14; // type:function size:0x60 scope:global -__static_initialization_and_destruction_0 = .text:0x801F1B74; // type:function size:0x518 scope:local -_._5Event = .text:0x801F208C; // type:function size:0x38 scope:global -IsConnected__11InputDevice = .text:0x801F20C4; // type:function size:0x8 scope:global -IsWheel__11InputDevice = .text:0x801F20CC; // type:function size:0x8 scope:global -GetInterfaces__11InputDevice = .text:0x801F20D4; // type:function size:0x8 scope:global -GetSecondaryDevice__11InputDevice = .text:0x801F20DC; // type:function size:0x8 scope:global -_IHandle__7IPlayer = .text:0x801F20E4; // type:function size:0xC scope:global -_IHandle__Q23Sim13IStateManager = .text:0x801F20F0; // type:function size:0xC scope:global -_IHandle__10IResetable = .text:0x801F20FC; // type:function size:0xC scope:global -_._Q29WorldConn13Pkt_Body_Send = .text:0x801F2108; // type:function size:0x34 scope:global -ConnectionClass__Q29WorldConn13Pkt_Body_Send = .text:0x801F213C; // type:function size:0x64 scope:global -Size__Q29WorldConn13Pkt_Body_Send = .text:0x801F21A0; // type:function size:0x8 scope:global -Type__Q29WorldConn13Pkt_Body_Send = .text:0x801F21A8; // type:function size:0x20 scope:global -_IHandle__13INISCarEngine = .text:0x801F21C8; // type:function size:0xC scope:global -HandleMessage_LuaBinding__12MAIEngineRevRC12MAIEngineRev = .text:0x801F21D4; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__16MAudioReflectionRC16MAudioReflection = .text:0x801F22D0; // type:function size:0xFC scope:global -_IHandle__Q217CollisionGeometry10IBoundable = .text:0x801F23CC; // type:function size:0xC scope:global -HandleMessage_LuaBinding__16MBreakerStopCopsRC16MBreakerStopCops = .text:0x801F23D8; // type:function size:0xFC scope:global -_IHandle__Q214EventSequencer7IEngine = .text:0x801F24D4; // type:function size:0xC scope:global -_._Q214EventSequencer7IEngine = .text:0x801F24E0; // type:function size:0x10C scope:global -_IHandle__18IDamageableVehicle = .text:0x801F25EC; // type:function size:0xC scope:global -_IHandle__13ISceneryModel = .text:0x801F25F8; // type:function size:0xC scope:global -TypeName__15SmackableParams = .text:0x801F2604; // type:function size:0x64 scope:global -_GetKind__18MNotifyEngineBlown = .text:0x801F2668; // type:function size:0x64 scope:global -HandleMessage_LuaBinding__18MNotifyEngineBlownRC18MNotifyEngineBlown = .text:0x801F26CC; // type:function size:0xFC scope:global -_GetKind__18MEnterRaceOverFlow = .text:0x801F27C8; // type:function size:0x64 scope:global -HandleMessage_LuaBinding__18MEnterRaceOverFlowRC18MEnterRaceOverFlow = .text:0x801F282C; // type:function size:0xFC scope:global -_IHandle__9IFeedback = .text:0x801F2928; // type:function size:0xC scope:global -HandleMessage_LuaBinding__16MSetTrafficSpeedRC16MSetTrafficSpeed = .text:0x801F2934; // type:function size:0xFC scope:global -_IHandle__15IDynamicsEntity = .text:0x801F2A30; // type:function size:0xC scope:global -HandleMessage_LuaBinding__15MGamePlayMomentRC15MGamePlayMoment = .text:0x801F2A3C; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__20MNotifyMovieFinishedRC20MNotifyMovieFinished = .text:0x801F2B38; // type:function size:0xFC scope:global -TypeName__15ExplosionParams = .text:0x801F2C34; // type:function size:0x64 scope:global -HandleMessage_LuaBinding__10MMiscSoundRC10MMiscSound = .text:0x801F2C98; // type:function size:0xFC scope:global -_GetKind__12MRestartRace = .text:0x801F2D94; // type:function size:0x64 scope:global -HandleMessage_LuaBinding__12MRestartRaceRC12MRestartRace = .text:0x801F2DF8; // type:function size:0xFC scope:global -_._16Schedule_SimRate = .text:0x801F2EF4; // type:function size:0x5C scope:global -_._20Schedule_HalfSimRate = .text:0x801F2F50; // type:function size:0x5C scope:global -_._23Schedule_QuarterSimRate = .text:0x801F2FAC; // type:function size:0x5C scope:global -_._24Schedule_OncePerGameLoop = .text:0x801F3008; // type:function size:0x5C scope:global -HandleMessage_LuaBinding__20MSetCopAutoSpawnModeRC20MSetCopAutoSpawnMode = .text:0x801F3064; // type:function size:0xFC scope:global -_GetKind__14MEnterFreeRoam = .text:0x801F3160; // type:function size:0x64 scope:global -HandleMessage_LuaBinding__14MEnterFreeRoamRC14MEnterFreeRoam = .text:0x801F31C4; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__18MFlowReadyForOutroRC18MFlowReadyForOutro = .text:0x801F32C0; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__16MNotifyMusicFlowRC16MNotifyMusicFlow = .text:0x801F33BC; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__23MNotifyVehicleDestroyedRC23MNotifyVehicleDestroyed = .text:0x801F34B8; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__23MAcceptEnterCareerEventRC23MAcceptEnterCareerEvent = .text:0x801F35B4; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__18MControlPathfinderRC18MControlPathfinder = .text:0x801F36B0; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__14MCountdownDoneRC14MCountdownDone = .text:0x801F37AC; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__24MDeclineEnterCareerEventRC24MDeclineEnterCareerEvent = .text:0x801F38A8; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__17MEnteringGameplayRC17MEnteringGameplay = .text:0x801F39A4; // type:function size:0xFC scope:global -_GetKind__18MEnterPostRaceFlow = .text:0x801F3AA0; // type:function size:0x64 scope:global -HandleMessage_LuaBinding__18MEnterPostRaceFlowRC18MEnterPostRaceFlow = .text:0x801F3B04; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__15MEnterSafeHouseRC15MEnterSafeHouse = .text:0x801F3C00; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__18MForcePursuitStartRC18MForcePursuitStart = .text:0x801F3CFC; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__18MICECameraFinishedRC18MICECameraFinished = .text:0x801F3DF8; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__10MJackKnifeRC10MJackKnife = .text:0x801F3EF4; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__8MJumpCutRC8MJumpCut = .text:0x801F3FF0; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__16MLoadingCompleteRC16MLoadingComplete = .text:0x801F40EC; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__12MNISCompleteRC12MNISComplete = .text:0x801F41E8; // type:function size:0xFC scope:global -_GetKind__23MNotifyCellCallComplete = .text:0x801F42E4; // type:function size:0x64 scope:global -HandleMessage_LuaBinding__23MNotifyCellCallCompleteRC23MNotifyCellCallComplete = .text:0x801F4348; // type:function size:0xFC scope:global -_GetKind__22MNotifyCellCallStarted = .text:0x801F4444; // type:function size:0x64 scope:global -HandleMessage_LuaBinding__22MNotifyCellCallStartedRC22MNotifyCellCallStarted = .text:0x801F44A8; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__22MNotifyChallengePassedRC22MNotifyChallengePassed = .text:0x801F45A4; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__15MNotifyFinishedRC15MNotifyFinished = .text:0x801F46A0; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__17MNotifyKnockedOutRC17MNotifyKnockedOut = .text:0x801F479C; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__18MNotifyMessageDoneRC18MNotifyMessageDone = .text:0x801F4898; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__24MNotifyMilestoneProgressRC24MNotifyMilestoneProgress = .text:0x801F4994; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__23MNotifyMilestoneReachedRC23MNotifyMilestoneReached = .text:0x801F4A90; // type:function size:0xFC scope:global -_GetKind__21MNotifyOnlineRaceOver = .text:0x801F4B8C; // type:function size:0x64 scope:global -HandleMessage_LuaBinding__21MNotifyOnlineRaceOverRC21MNotifyOnlineRaceOver = .text:0x801F4BF0; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__16MNotifyPlayerRepRC16MNotifyPlayerRep = .text:0x801F4CEC; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__20MNotifyPursuitLengthRC20MNotifyPursuitLength = .text:0x801F4DE8; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__20MNotifyRaceAbandonedRC20MNotifyRaceAbandoned = .text:0x801F4EE4; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__20MNotifyRacePlacementRC20MNotifyRacePlacement = .text:0x801F4FE0; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__15MNotifyRaceTimeRC15MNotifyRaceTime = .text:0x801F50DC; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__22MNotifyRaceTimeExpiredRC22MNotifyRaceTimeExpired = .text:0x801F51D8; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__22MNotifyRaceTimeSecTickRC22MNotifyRaceTimeSecTick = .text:0x801F52D4; // type:function size:0xFC scope:global -_GetKind__14MNotifySimTick = .text:0x801F53D0; // type:function size:0x64 scope:global -HandleMessage_LuaBinding__14MNotifySimTickRC14MNotifySimTick = .text:0x801F5434; // type:function size:0xFC scope:global -_GetKind__19MNotifySpeechStatus = .text:0x801F5530; // type:function size:0x64 scope:global -HandleMessage_LuaBinding__19MNotifySpeechStatusRC19MNotifySpeechStatus = .text:0x801F5594; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__16MNotifySpeedTrapRC16MNotifySpeedTrap = .text:0x801F5690; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__12MNotifyTimerRC12MNotifyTimer = .text:0x801F578C; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__11MPerpBustedRC11MPerpBusted = .text:0x801F5888; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__12MPerpEscapedRC12MPerpEscaped = .text:0x801F5984; // type:function size:0xFC scope:global -_GetKind__19MPlayerEnterPursuit = .text:0x801F5A80; // type:function size:0x64 scope:global -HandleMessage_LuaBinding__19MPlayerEnterPursuitRC19MPlayerEnterPursuit = .text:0x801F5AE4; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__15MPursuitBreakerRC15MPursuitBreaker = .text:0x801F5BE0; // type:function size:0xFC scope:global -_GetKind__12MPursuitOver = .text:0x801F5CDC; // type:function size:0x64 scope:global -HandleMessage_LuaBinding__12MPursuitOverRC12MPursuitOver = .text:0x801F5D40; // type:function size:0xFC scope:global -_GetKind__15MQuitToFrontEnd = .text:0x801F5E3C; // type:function size:0x64 scope:global -HandleMessage_LuaBinding__15MQuitToFrontEndRC15MQuitToFrontEnd = .text:0x801F5EA0; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__10MReqBackupRC10MReqBackup = .text:0x801F5F9C; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__13MReqRoadBlockRC13MReqRoadBlock = .text:0x801F6098; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__15MSetCopsEnabledRC15MSetCopsEnabled = .text:0x801F6194; // type:function size:0xFC scope:global -_GetKind__9MSpawnCop = .text:0x801F6290; // type:function size:0x64 scope:global -HandleMessage_LuaBinding__9MSpawnCopRC9MSpawnCop = .text:0x801F62F4; // type:function size:0xFC scope:global -_GetKind__13MSpawnTraffic = .text:0x801F63F0; // type:function size:0x64 scope:global -HandleMessage_LuaBinding__13MSpawnTrafficRC13MSpawnTraffic = .text:0x801F6454; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__11MStateEnterRC11MStateEnter = .text:0x801F6550; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__10MStateExitRC10MStateExit = .text:0x801F664C; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__13MTriggerEnterRC13MTriggerEnter = .text:0x801F6748; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__12MTriggerExitRC12MTriggerExit = .text:0x801F6844; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__14MTriggerInsideRC14MTriggerInside = .text:0x801F6940; // type:function size:0xFC scope:global -HandleMessage_LuaBinding__11MUnspawnCopRC11MUnspawnCop = .text:0x801F6A3C; // type:function size:0xFC scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z14MEnterFreeRoamPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6B38; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z22MNotifyRaceTimeSecTickPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6B60; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z24MNotifyMilestoneProgressPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6B88; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z16MNotifyPlayerRepPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6BB0; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z23MNotifyMilestoneReachedPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6BD8; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z12MTriggerExitPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6C00; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z18MICECameraFinishedPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6C28; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z23MNotifyCellCallCompletePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6C50; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z17MEnteringGameplayPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6C78; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z18MNotifyEngineBlownPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6CA0; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z10MJackKnifePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6CC8; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z16MNotifyMusicFlowPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6CF0; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z14MTriggerInsidePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6D18; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z11MPerpBustedPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6D40; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z11MUnspawnCopPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6D68; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z15MNotifyFinishedPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6D90; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z22MNotifyChallengePassedPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6DB8; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z16MAudioReflectionPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6DE0; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z8MJumpCutPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6E08; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z18MFlowReadyForOutroPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6E30; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z22MNotifyCellCallStartedPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6E58; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z12MNISCompletePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6E80; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z15MQuitToFrontEndPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6EA8; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z20MNotifyMovieFinishedPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6ED0; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z15MNotifyRaceTimePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6EF8; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z23MAcceptEnterCareerEventPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6F20; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z20MNotifyRaceAbandonedPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6F48; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z15MSetCopsEnabledPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6F70; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z15MEnterSafeHousePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6F98; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z18MEnterRaceOverFlowPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6FC0; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z12MAIEngineRevPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6FE8; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z23MNotifyVehicleDestroyedPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7010; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z20MNotifyRacePlacementPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7038; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z19MNotifySpeechStatusPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7060; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z13MReqRoadBlockPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7088; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z14MNotifySimTickPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F70B0; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z16MLoadingCompletePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F70D8; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z16MBreakerStopCopsPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7100; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z13MSpawnTrafficPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7128; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z13MTriggerEnterPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7150; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z18MNotifyMessageDonePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7178; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z11MStateEnterPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F71A0; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z16MNotifySpeedTrapPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F71C8; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z18MEnterPostRaceFlowPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F71F0; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z12MRestartRacePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7218; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z16MSetTrafficSpeedPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7240; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z18MControlPathfinderPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7268; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z24MDeclineEnterCareerEventPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7290; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z12MPerpEscapedPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F72B8; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z12MPursuitOverPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F72E0; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z10MStateExitPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7308; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z22MNotifyRaceTimeExpiredPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7330; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z21MNotifyOnlineRaceOverPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7358; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z15MGamePlayMomentPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7380; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z19MPlayerEnterPursuitPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F73A8; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z15MPursuitBreakerPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F73D0; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z20MSetCopAutoSpawnModePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F73F8; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z10MMiscSoundPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7420; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z14MCountdownDonePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7448; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z20MNotifyPursuitLengthPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7470; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z18MForcePursuitStartPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7498; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z9MSpawnCopPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F74C0; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z10MReqBackupPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F74E8; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z12MNotifyTimerPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7510; // type:function size:0x28 scope:global -Call__Q36Hermes7Handlert13StaticHandler1Z17MNotifyKnockedOutPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7538; // type:function size:0x28 scope:global -push_back__Q23UTLt6Vector2ZP11ActionQueuei16RCP11ActionQueue = .text:0x801F7560; // type:function size:0x154 scope:global -_._Q214EventSequencer6Engine = .text:0x801F76B4; // type:function size:0x198 scope:global -Release__Q214EventSequencer6Engine = .text:0x801F784C; // type:function size:0x44 scope:global -Name__CQ214EventSequencer6Engine = .text:0x801F7890; // type:function size:0x1C scope:global -Relocate__Q214EventSequencer6EngineUi = .text:0x801F78AC; // type:function size:0x74 scope:global -Unload__Q214EventSequencer6Engine = .text:0x801F7920; // type:function size:0x6C scope:global -GetContext__CQ214EventSequencer6Engine = .text:0x801F798C; // type:function size:0x8 scope:global -SetContext__Q214EventSequencer6EnginePQ214EventSequencer8IContext = .text:0x801F7994; // type:function size:0x8 scope:global -NumSystems__CQ214EventSequencer6Engine = .text:0x801F799C; // type:function size:0x8 scope:global -GetSystemID__CQ214EventSequencer6EngineUi = .text:0x801F79A4; // type:function size:0x30 scope:global -GetSystemByIndex__CQ214EventSequencer6EngineUi = .text:0x801F79D4; // type:function size:0x24 scope:global -FindSystem__CQ214EventSequencer6EngineUi = .text:0x801F79F8; // type:function size:0xC4 scope:global -AnySystemInAction__CQ214EventSequencer6Engine = .text:0x801F7ABC; // type:function size:0x8C scope:global -SetAllSystemsState__Q214EventSequencer6EnginefUi = .text:0x801F7B48; // type:function size:0x70 scope:global -ProcessStimulus__Q214EventSequencer6EngineUiUifPQ214EventSequencer8IContextQ214EventSequencer9QueueMode = .text:0x801F7BB8; // type:function size:0x7C scope:global -ProcessStimulus__Q214EventSequencer6EngineUifPQ214EventSequencer8IContextQ214EventSequencer9QueueMode = .text:0x801F7C34; // type:function size:0x94 scope:global -Trigger__Q214EventSequencer6EnginefPQ214EventSequencer8IContextQ214EventSequencer9QueueMode = .text:0x801F7CC8; // type:function size:0x94 scope:global -FireEventTag__Q214EventSequencer6EngineUiPQ214EventSequencer8IContext = .text:0x801F7D5C; // type:function size:0x7C scope:global -Flush__Q214EventSequencer6Engine = .text:0x801F7DD8; // type:function size:0x50 scope:global -Stop__Q214EventSequencer6EnginefbPQ214EventSequencer8IContext = .text:0x801F7E28; // type:function size:0x78 scope:global -Complete__Q214EventSequencer6EnginefbPQ214EventSequencer8IContext = .text:0x801F7EA0; // type:function size:0x78 scope:global -Pause__Q214EventSequencer6EnginefPQ214EventSequencer8IContext = .text:0x801F7F18; // type:function size:0x70 scope:global -Resume__Q214EventSequencer6EnginefPQ214EventSequencer8IContext = .text:0x801F7F88; // type:function size:0x70 scope:global -Reset__Q214EventSequencer6Enginef = .text:0x801F7FF8; // type:function size:0xAC scope:global -SetVerbose__Q214EventSequencer6Engineb = .text:0x801F80A4; // type:function size:0x8 scope:global -_IHandle__14ISteeringWheel = .text:0x801F80AC; // type:function size:0xC scope:global -_._19SteeringWheelDevice = .text:0x801F80B8; // type:function size:0x60 scope:global -Construct__10GameDevicei = .text:0x801F8118; // type:function size:0x44 scope:global -IsWheel__10GameDevice = .text:0x801F815C; // type:function size:0x4C scope:global -GetInterfaces__10GameDevice = .text:0x801F81A8; // type:function size:0x8 scope:global -GetSecondaryDevice__10GameDevice = .text:0x801F81B0; // type:function size:0x18 scope:global -OnGrowRequest__Q23UTLt6Vector2ZQ33UTL11Collections10_KeyedNodei16Ui = .text:0x801F81C8; // type:function size:0x4 scope:global -SType__Q29WorldConn13Pkt_Body_Send = .text:0x801F81CC; // type:function size:0x58 scope:global -BuildMessageTable__12MAIEngineRevP9lua_StatePCQ26Hermes7Message = .text:0x801F8224; // type:function size:0x15C scope:global -BuildMessageTable__16MAudioReflectionP9lua_StatePCQ26Hermes7Message = .text:0x801F8380; // type:function size:0xCC scope:global -_._Q43UTL11Collectionst8Listable2Z11ActionQueuei20_4List = .text:0x801F844C; // type:function size:0xB4 scope:global -BuildMessageTable__16MBreakerStopCopsP9lua_StatePCQ26Hermes7Message = .text:0x801F8500; // type:function size:0xA4 scope:global -_._Q43UTL11Collectionst12Instanceable3ZPQ214EventSequencer9HENGINE__ZQ214EventSequencer7IEnginei434_5_List = .text:0x801F85A4; // type:function size:0xB4 scope:global -BuildMessageTable__18MNotifyEngineBlownP9lua_StatePCQ26Hermes7Message = .text:0x801F8658; // type:function size:0xC0 scope:global -BuildMessageTable__18MEnterRaceOverFlowP9lua_StatePCQ26Hermes7Message = .text:0x801F8718; // type:function size:0x20 scope:global -BuildMessageTable__16MSetTrafficSpeedP9lua_StatePCQ26Hermes7Message = .text:0x801F8738; // type:function size:0xC8 scope:global -BuildMessageTable__15MGamePlayMomentP9lua_StatePCQ26Hermes7Message = .text:0x801F8800; // type:function size:0x108 scope:global -BuildMessageTable__20MNotifyMovieFinishedP9lua_StatePCQ26Hermes7Message = .text:0x801F8908; // type:function size:0x20 scope:global -BuildMessageTable__10MMiscSoundP9lua_StatePCQ26Hermes7Message = .text:0x801F8928; // type:function size:0x7C scope:global -BuildMessageTable__12MRestartRaceP9lua_StatePCQ26Hermes7Message = .text:0x801F89A4; // type:function size:0x20 scope:global -BuildMessageTable__20MSetCopAutoSpawnModeP9lua_StatePCQ26Hermes7Message = .text:0x801F89C4; // type:function size:0x58 scope:global -BuildMessageTable__14MEnterFreeRoamP9lua_StatePCQ26Hermes7Message = .text:0x801F8A1C; // type:function size:0x20 scope:global -BuildMessageTable__18MFlowReadyForOutroP9lua_StatePCQ26Hermes7Message = .text:0x801F8A3C; // type:function size:0x20 scope:global -BuildMessageTable__16MNotifyMusicFlowP9lua_StatePCQ26Hermes7Message = .text:0x801F8A5C; // type:function size:0x7C scope:global -BuildMessageTable__23MNotifyVehicleDestroyedP9lua_StatePCQ26Hermes7Message = .text:0x801F8AD8; // type:function size:0xC0 scope:global -BuildMessageTable__23MAcceptEnterCareerEventP9lua_StatePCQ26Hermes7Message = .text:0x801F8B98; // type:function size:0x20 scope:global -BuildMessageTable__18MControlPathfinderP9lua_StatePCQ26Hermes7Message = .text:0x801F8BB8; // type:function size:0x120 scope:global -BuildMessageTable__14MCountdownDoneP9lua_StatePCQ26Hermes7Message = .text:0x801F8CD8; // type:function size:0x20 scope:global -BuildMessageTable__24MDeclineEnterCareerEventP9lua_StatePCQ26Hermes7Message = .text:0x801F8CF8; // type:function size:0x20 scope:global -BuildMessageTable__17MEnteringGameplayP9lua_StatePCQ26Hermes7Message = .text:0x801F8D18; // type:function size:0x20 scope:global -BuildMessageTable__18MEnterPostRaceFlowP9lua_StatePCQ26Hermes7Message = .text:0x801F8D38; // type:function size:0x20 scope:global -BuildMessageTable__15MEnterSafeHouseP9lua_StatePCQ26Hermes7Message = .text:0x801F8D58; // type:function size:0x58 scope:global -BuildMessageTable__18MForcePursuitStartP9lua_StatePCQ26Hermes7Message = .text:0x801F8DB0; // type:function size:0x7C scope:global -BuildMessageTable__18MICECameraFinishedP9lua_StatePCQ26Hermes7Message = .text:0x801F8E2C; // type:function size:0x20 scope:global -BuildMessageTable__10MJackKnifeP9lua_StatePCQ26Hermes7Message = .text:0x801F8E4C; // type:function size:0x20 scope:global -BuildMessageTable__8MJumpCutP9lua_StatePCQ26Hermes7Message = .text:0x801F8E6C; // type:function size:0x78 scope:global -BuildMessageTable__16MLoadingCompleteP9lua_StatePCQ26Hermes7Message = .text:0x801F8EE4; // type:function size:0x20 scope:global -BuildMessageTable__12MNISCompleteP9lua_StatePCQ26Hermes7Message = .text:0x801F8F04; // type:function size:0x58 scope:global -BuildMessageTable__23MNotifyCellCallCompleteP9lua_StatePCQ26Hermes7Message = .text:0x801F8F5C; // type:function size:0x20 scope:global -BuildMessageTable__22MNotifyCellCallStartedP9lua_StatePCQ26Hermes7Message = .text:0x801F8F7C; // type:function size:0x20 scope:global -BuildMessageTable__22MNotifyChallengePassedP9lua_StatePCQ26Hermes7Message = .text:0x801F8F9C; // type:function size:0x58 scope:global -BuildMessageTable__15MNotifyFinishedP9lua_StatePCQ26Hermes7Message = .text:0x801F8FF4; // type:function size:0x88 scope:global -BuildMessageTable__17MNotifyKnockedOutP9lua_StatePCQ26Hermes7Message = .text:0x801F907C; // type:function size:0xC0 scope:global -BuildMessageTable__18MNotifyMessageDoneP9lua_StatePCQ26Hermes7Message = .text:0x801F913C; // type:function size:0x20 scope:global -BuildMessageTable__24MNotifyMilestoneProgressP9lua_StatePCQ26Hermes7Message = .text:0x801F915C; // type:function size:0x80 scope:global -BuildMessageTable__23MNotifyMilestoneReachedP9lua_StatePCQ26Hermes7Message = .text:0x801F91DC; // type:function size:0x80 scope:global -BuildMessageTable__21MNotifyOnlineRaceOverP9lua_StatePCQ26Hermes7Message = .text:0x801F925C; // type:function size:0x58 scope:global -BuildMessageTable__16MNotifyPlayerRepP9lua_StatePCQ26Hermes7Message = .text:0x801F92B4; // type:function size:0x10C scope:global -BuildMessageTable__20MNotifyPursuitLengthP9lua_StatePCQ26Hermes7Message = .text:0x801F93C0; // type:function size:0xE8 scope:global -BuildMessageTable__20MNotifyRaceAbandonedP9lua_StatePCQ26Hermes7Message = .text:0x801F94A8; // type:function size:0x20 scope:global -BuildMessageTable__20MNotifyRacePlacementP9lua_StatePCQ26Hermes7Message = .text:0x801F94C8; // type:function size:0x164 scope:global -BuildMessageTable__15MNotifyRaceTimeP9lua_StatePCQ26Hermes7Message = .text:0x801F962C; // type:function size:0xA8 scope:global -BuildMessageTable__22MNotifyRaceTimeExpiredP9lua_StatePCQ26Hermes7Message = .text:0x801F96D4; // type:function size:0x20 scope:global -BuildMessageTable__22MNotifyRaceTimeSecTickP9lua_StatePCQ26Hermes7Message = .text:0x801F96F4; // type:function size:0x58 scope:global -BuildMessageTable__14MNotifySimTickP9lua_StatePCQ26Hermes7Message = .text:0x801F974C; // type:function size:0x80 scope:global -BuildMessageTable__19MNotifySpeechStatusP9lua_StatePCQ26Hermes7Message = .text:0x801F97CC; // type:function size:0x88 scope:global -BuildMessageTable__16MNotifySpeedTrapP9lua_StatePCQ26Hermes7Message = .text:0x801F9854; // type:function size:0x140 scope:global -BuildMessageTable__12MNotifyTimerP9lua_StatePCQ26Hermes7Message = .text:0x801F9994; // type:function size:0x58 scope:global -BuildMessageTable__11MPerpBustedP9lua_StatePCQ26Hermes7Message = .text:0x801F99EC; // type:function size:0xC0 scope:global -BuildMessageTable__12MPerpEscapedP9lua_StatePCQ26Hermes7Message = .text:0x801F9AAC; // type:function size:0xC0 scope:global -BuildMessageTable__19MPlayerEnterPursuitP9lua_StatePCQ26Hermes7Message = .text:0x801F9B6C; // type:function size:0x20 scope:global -BuildMessageTable__15MPursuitBreakerP9lua_StatePCQ26Hermes7Message = .text:0x801F9B8C; // type:function size:0x58 scope:global -BuildMessageTable__12MPursuitOverP9lua_StatePCQ26Hermes7Message = .text:0x801F9BE4; // type:function size:0xC0 scope:global -BuildMessageTable__15MQuitToFrontEndP9lua_StatePCQ26Hermes7Message = .text:0x801F9CA4; // type:function size:0x20 scope:global -BuildMessageTable__10MReqBackupP9lua_StatePCQ26Hermes7Message = .text:0x801F9CC4; // type:function size:0x7C scope:global -BuildMessageTable__13MReqRoadBlockP9lua_StatePCQ26Hermes7Message = .text:0x801F9D40; // type:function size:0x7C scope:global -BuildMessageTable__15MSetCopsEnabledP9lua_StatePCQ26Hermes7Message = .text:0x801F9DBC; // type:function size:0x58 scope:global -BuildMessageTable__9MSpawnCopP9lua_StatePCQ26Hermes7Message = .text:0x801F9E14; // type:function size:0xF0 scope:global -BuildMessageTable__13MSpawnTrafficP9lua_StatePCQ26Hermes7Message = .text:0x801F9F04; // type:function size:0xA0 scope:global -BuildMessageTable__11MStateEnterP9lua_StatePCQ26Hermes7Message = .text:0x801F9FA4; // type:function size:0x20 scope:global -BuildMessageTable__10MStateExitP9lua_StatePCQ26Hermes7Message = .text:0x801F9FC4; // type:function size:0x20 scope:global -BuildMessageTable__13MTriggerEnterP9lua_StatePCQ26Hermes7Message = .text:0x801F9FE4; // type:function size:0x118 scope:global -BuildMessageTable__12MTriggerExitP9lua_StatePCQ26Hermes7Message = .text:0x801FA0FC; // type:function size:0x118 scope:global -BuildMessageTable__14MTriggerInsideP9lua_StatePCQ26Hermes7Message = .text:0x801FA214; // type:function size:0x118 scope:global -BuildMessageTable__11MUnspawnCopP9lua_StatePCQ26Hermes7Message = .text:0x801FA32C; // type:function size:0x10C scope:global -Retain__Q26Attrib37AICollisionReactionRecord_TypeHandlerPv = .text:0x801FA438; // type:function size:0x8 scope:global -Clone__Q26Attrib37AICollisionReactionRecord_TypeHandlerPv = .text:0x801FA440; // type:function size:0x4C scope:global -Clean__Q26Attrib37AICollisionReactionRecord_TypeHandlerPv = .text:0x801FA48C; // type:function size:0x24 scope:global -Release__Q26Attrib37AICollisionReactionRecord_TypeHandlerPv = .text:0x801FA4B0; // type:function size:0x24 scope:global -Retain__Q26Attrib26Attrib_RefSpec_TypeHandlerPv = .text:0x801FA4D4; // type:function size:0x8 scope:global -Clone__Q26Attrib26Attrib_RefSpec_TypeHandlerPv = .text:0x801FA4DC; // type:function size:0x64 scope:global -Clean__Q26Attrib26Attrib_RefSpec_TypeHandlerPv = .text:0x801FA540; // type:function size:0x24 scope:global -Release__Q26Attrib26Attrib_RefSpec_TypeHandlerPv = .text:0x801FA564; // type:function size:0x24 scope:global -Retain__Q26Attrib27CollisionStream_TypeHandlerPv = .text:0x801FA588; // type:function size:0x8 scope:global -Clone__Q26Attrib27CollisionStream_TypeHandlerPv = .text:0x801FA590; // type:function size:0x48 scope:global -Clean__Q26Attrib27CollisionStream_TypeHandlerPv = .text:0x801FA5D8; // type:function size:0x24 scope:global -Release__Q26Attrib27CollisionStream_TypeHandlerPv = .text:0x801FA5FC; // type:function size:0x24 scope:global -Retain__Q26Attrib31EffectLinkageRecord_TypeHandlerPv = .text:0x801FA620; // type:function size:0x8 scope:global -Clone__Q26Attrib31EffectLinkageRecord_TypeHandlerPv = .text:0x801FA628; // type:function size:0x5C scope:global -Clean__Q26Attrib31EffectLinkageRecord_TypeHandlerPv = .text:0x801FA684; // type:function size:0x38 scope:global -Release__Q26Attrib31EffectLinkageRecord_TypeHandlerPv = .text:0x801FA6BC; // type:function size:0x38 scope:global -Retain__Q26Attrib28TireEffectRecord_TypeHandlerPv = .text:0x801FA6F4; // type:function size:0x8 scope:global -Clone__Q26Attrib28TireEffectRecord_TypeHandlerPv = .text:0x801FA6FC; // type:function size:0x50 scope:global -Clean__Q26Attrib28TireEffectRecord_TypeHandlerPv = .text:0x801FA74C; // type:function size:0x24 scope:global -Release__Q26Attrib28TireEffectRecord_TypeHandlerPv = .text:0x801FA770; // type:function size:0x24 scope:global -Retain__Q26Attrib32TrafficPatternRecord_TypeHandlerPv = .text:0x801FA794; // type:function size:0x8 scope:global -Clone__Q26Attrib32TrafficPatternRecord_TypeHandlerPv = .text:0x801FA79C; // type:function size:0x58 scope:global -Clean__Q26Attrib32TrafficPatternRecord_TypeHandlerPv = .text:0x801FA7F4; // type:function size:0x24 scope:global -Release__Q26Attrib32TrafficPatternRecord_TypeHandlerPv = .text:0x801FA818; // type:function size:0x24 scope:global -Retain__Q26Attrib24UpgradeSpecs_TypeHandlerPv = .text:0x801FA83C; // type:function size:0x8 scope:global -Clone__Q26Attrib24UpgradeSpecs_TypeHandlerPv = .text:0x801FA844; // type:function size:0x48 scope:global -Clean__Q26Attrib24UpgradeSpecs_TypeHandlerPv = .text:0x801FA88C; // type:function size:0x24 scope:global -Release__Q26Attrib24UpgradeSpecs_TypeHandlerPv = .text:0x801FA8B0; // type:function size:0x24 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP11ActionQueuei16Ui = .text:0x801FA8D4; // type:function size:0x4 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei434i16UiUi = .text:0x801FA8D8; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei434i16PQ33UTL11Collections10_KeyedNodeUi = .text:0x801FA8E0; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei434i16Ui = .text:0x801FA8E4; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei434i16 = .text:0x801FA8EC; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP11ActionQueuei20i16UiUi = .text:0x801FA8F4; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP11ActionQueuei20i16PP11ActionQueueUi = .text:0x801FA8FC; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP11ActionQueuei20i16Ui = .text:0x801FA900; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP11ActionQueuei20i16 = .text:0x801FA908; // type:function size:0x8 scope:global -GetGrowSize__CQ23UTLt6Vector2ZQ33UTL11Collections10_KeyedNodei16Ui = .text:0x801FA910; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP11ActionQueuei16Ui = .text:0x801FA930; // type:function size:0x20 scope:global -_._Q23UTLt6Vector2ZP11ActionQueuei16 = .text:0x801FA950; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP11ActionQueuei20i16 = .text:0x801FA984; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2ZQ33UTL11Collections10_KeyedNodei16 = .text:0x801FAA38; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei434i16 = .text:0x801FAA6C; // type:function size:0xB4 scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP11ActionQueuei16 = .text:0x801FAB20; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZQ33UTL11Collections10_KeyedNodei16 = .text:0x801FAB2C; // type:function size:0xC scope:global -_GLOBAL_.I.__8E911Call = .text:0x801FAB38; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x801FAB64; // type:label scope:local -InitBasisMatricies__Fv = .text:0x801FAB64; // type:function size:0x1B8 scope:global -FixupEndpoints__11QuickSpline = .text:0x801FAD1C; // type:function size:0x270 scope:global -MemoryImageLoad__11QuickSplineP8bVector4 = .text:0x801FAF8C; // type:function size:0x54 scope:global -HasKink__11QuickSpline = .text:0x801FAFE0; // type:function size:0x14C scope:global -LoaderQuickSpline__FP6bChunk = .text:0x801FB12C; // type:function size:0x138 scope:global -UnloadSpline__FP11QuickSpline = .text:0x801FB264; // type:function size:0x6C scope:global -UnloaderQuickSpline__FP6bChunk = .text:0x801FB2D0; // type:function size:0x7C scope:global -IsAmerica__11BuildRegionv = .text:0x801FB34C; // type:function size:0x8 scope:global -IsEurope__11BuildRegionv = .text:0x801FB354; // type:function size:0x8 scope:global -IsEuropeFr__11BuildRegionv = .text:0x801FB35C; // type:function size:0x8 scope:global -IsEuropeGer__11BuildRegionv = .text:0x801FB364; // type:function size:0x8 scope:global -IsJapan__11BuildRegionv = .text:0x801FB36C; // type:function size:0x8 scope:global -IsKorea__11BuildRegionv = .text:0x801FB374; // type:function size:0x8 scope:global -IsPal__11BuildRegionv = .text:0x801FB37C; // type:function size:0x20 scope:global -ShowLanguageSelect__11BuildRegionv = .text:0x801FB39C; // type:function size:0x8 scope:global -FastMemEmergencyInitialization__FRUiRPCcT0T0 = .text:0x801FB3A4; // type:function size:0x2C scope:global -SeedRandomNumber__Fv = .text:0x801FB3D0; // type:function size:0x70 scope:global -InitBigFiles__Fv = .text:0x801FB440; // type:function size:0x4C scope:global -Main_MyAssert__FPCce = .text:0x801FB48C; // type:function size:0x4C scope:local -InitializeEverything__FiPPc = .text:0x801FB4D8; // type:function size:0x19C scope:global -WriteFreekerBaseAddressBeacon__Fv = .text:0x801FB674; // type:function size:0x4 scope:global -DisplayDebugScreenPrints__Fv = .text:0x801FB678; // type:function size:0x4 scope:global -VerifyJoylogChecksum__Fv = .text:0x801FB67C; // type:function size:0x1E4 scope:global -Main_AnimateFrame__Ff = .text:0x801FB860; // type:function size:0x138 scope:local -Main_SkipFrame__Fi = .text:0x801FB998; // type:function size:0x20 scope:global -Main_DisplayFrame__Fv = .text:0x801FB9B8; // type:function size:0x94 scope:global -CheckTweakerTriggers__Fv = .text:0x801FBA4C; // type:function size:0x4 scope:global -MainLoopCheckForFatalDiscError__Fv = .text:0x801FBA50; // type:function size:0x4 scope:global -MiniMainLoop__Fv = .text:0x801FBA54; // type:function size:0xC8 scope:global -MainLoop__Ff = .text:0x801FBB1C; // type:function size:0x178 scope:global -main = .text:0x801FBC94; // type:function size:0x158 scope:global -LoaderStub__FP6bChunk = .text:0x801FBDEC; // type:function size:0x50 scope:local -CallChunkLoader__FP6bChunk = .text:0x801FBE3C; // type:function size:0x9C scope:global -CallChunkUnloader__FP6bChunk = .text:0x801FBED8; // type:function size:0x9C scope:global -LoadChunks__FP6bChunkiPCc = .text:0x801FBF74; // type:function size:0x64 scope:global -UnloadChunks__FP6bChunkiPCc = .text:0x801FBFD8; // type:function size:0x108 scope:global -ScratchPadMemCpy__FPvPCvUi = .text:0x801FC0E0; // type:function size:0x20 scope:global -MoveChunksRange__FP6bChunkiiPCc = .text:0x801FC100; // type:function size:0xB4 scope:global -MoveChunks__FP6bChunkT0iPCc = .text:0x801FC1B4; // type:function size:0x180 scope:global -LoadEmbeddedChunks__FP6bChunkiPCc = .text:0x801FC334; // type:function size:0x44 scope:global -EndianSwapChunkHeader__FP6bChunk = .text:0x801FC378; // type:function size:0x34 scope:global -EndianSwapChunkHeadersRecursive__FP6bChunki = .text:0x801FC3AC; // type:function size:0x24 scope:global -EndianSwapChunkHeadersRecursive__FP6bChunkT0 = .text:0x801FC3D0; // type:function size:0x8C scope:global -IsTempChunk__FP6bChunk = .text:0x801FC45C; // type:function size:0x8 scope:global -SplitPermTempChunks__FbP6bChunkiPUcii = .text:0x801FC464; // type:function size:0x168 scope:global -ClobberPermChunks__FP6bChunki = .text:0x801FC5CC; // type:function size:0x88 scope:global -LoadTempPermChunks__FPP6bChunkPiiPCc = .text:0x801FC654; // type:function size:0x124 scope:global -PostLoadFixup__Fv = .text:0x801FC778; // type:function size:0x48 scope:global -InitResourceLoader__Fv = .text:0x801FC7C0; // type:function size:0x3C scope:global -__12ResourceFilePCc16ResourceFileTypeiii = .text:0x801FC7FC; // type:function size:0xC8 scope:global -SetAllocationParams__12ResourceFileiPCc = .text:0x801FC8C4; // type:function size:0x38 scope:global -AllocateMemory__12ResourceFileb = .text:0x801FC8FC; // type:function size:0x98 scope:global -FreeMemory__12ResourceFile = .text:0x801FC994; // type:function size:0x4C scope:global -BeginLoading__12ResourceFilePFPv_vPv = .text:0x801FC9E0; // type:function size:0x90 scope:global -ManualUnload__12ResourceFile = .text:0x801FCA70; // type:function size:0x40 scope:global -ManualReload__12ResourceFileP6bChunk = .text:0x801FCAB0; // type:function size:0x38 scope:global -_._12ResourceFile = .text:0x801FCAE8; // type:function size:0x7C scope:global -LoadResourceIfFileTransferFinished__12ResourceFile = .text:0x801FCB64; // type:function size:0x118 scope:global -FileTransferCallback__12ResourceFilePvi = .text:0x801FCC7C; // type:function size:0x10 scope:global -CreateResourceFile__FPCc16ResourceFileTypeiii = .text:0x801FCC8C; // type:function size:0x7C scope:global -LoadResourceFile__FPCc16ResourceFileTypeiPFPv_vPvii = .text:0x801FCD08; // type:function size:0x4C scope:global -UnloadResourceFile__FP12ResourceFile = .text:0x801FCD54; // type:function size:0x64 scope:global -ServiceResourceLoading__Fv = .text:0x801FCDB8; // type:function size:0x110 scope:global -IsResourceLoadingComplete__Fv = .text:0x801FCEC8; // type:function size:0x28 scope:global -WaitForResourceLoadingComplete__Fv = .text:0x801FCEF0; // type:function size:0x48 scope:global -SetDelayedResourceCallback__FPFPv_vPv = .text:0x801FCF38; // type:function size:0x2C scope:global -FindResourceFile__F16ResourceFileType = .text:0x801FCF64; // type:function size:0x38 scope:global -IsCurrentlyHotChunking__Fv = .text:0x801FCF9C; // type:function size:0x1C scope:global -LoaderWCollisionPack__FP6bChunk = .text:0x801FCFB8; // type:function size:0x4C scope:global -UnloaderWCollisionPack__FP6bChunk = .text:0x801FD004; // type:function size:0x4C scope:global -LoaderColourCube__FP6bChunk = .text:0x801FD050; // type:function size:0x1C scope:global -UnloaderColourCube__FP6bChunk = .text:0x801FD06C; // type:function size:0x1C scope:global -__6VMFile = .text:0x801FD088; // type:function size:0x58 scope:global -GetVMFile__Fv = .text:0x801FD0E0; // type:function size:0x34 scope:global -MoveFileIntoVirtualMemoryThenLoadChunks__Fii = .text:0x801FD114; // type:function size:0x128 scope:global -UnloadFileFromVirtualMemory__FP6VMFile = .text:0x801FD23C; // type:function size:0x68 scope:global -LoadFileIntoVirtualMemory__FPCcbT1 = .text:0x801FD2A4; // type:function size:0xEC scope:global -AddDepFile__FPCcPvUi = .text:0x801FD390; // type:function size:0xF0 scope:global -RemoveDepFile__FPCc = .text:0x801FD480; // type:function size:0xF8 scope:global -AddVault__FPCcPvUi = .text:0x801FD578; // type:function size:0x384 scope:global -RemoveVault__FPCc = .text:0x801FD8FC; // type:function size:0x108 scope:global -OverrideAllocator__11AttribAllocP16IAttribAllocator = .text:0x801FDA04; // type:function size:0x40 scope:global -RenderTrackMarkers__FP5eView = .text:0x801FDA44; // type:function size:0x4 scope:global -CalculateSimMode__Fv = .text:0x801FDA48; // type:function size:0x64 scope:global -GetBuildVersionName__FPc = .text:0x801FDAAC; // type:function size:0x28 scope:global -CodeOverlayLoadedFrontendCallback__Fii = .text:0x801FDAD4; // type:function size:0x50 scope:global -CodeOverlayLoadingFrontend__FPFi_vi = .text:0x801FDB24; // type:function size:0x15C scope:global -CodeOverlayUnloadingFrontend__Fv = .text:0x801FDC80; // type:function size:0x4 scope:global -CodeOverlayLoadingGame__Fv = .text:0x801FDC84; // type:function size:0x138 scope:global -CodeOverlayUnloadingGame__Fv = .text:0x801FDDBC; // type:function size:0x70 scope:global -ActivateMemorySponge__Fv = .text:0x801FDE2C; // type:function size:0x3C scope:global -DeactivateMemorySponge__Fv = .text:0x801FDE68; // type:function size:0x18 scope:global -LoadMemoryFileCallback__Fii = .text:0x801FDE80; // type:function size:0x20 scope:global -LoadMemoryFile__FPCc = .text:0x801FDEA0; // type:function size:0x60 scope:global -BlockUntilMemoryFileLoaded__FPv = .text:0x801FDF00; // type:function size:0x4C scope:global -UnloadMemoryFile__FPv = .text:0x801FDF4C; // type:function size:0x3C scope:global -SetLeakDetector__Fv = .text:0x801FDF88; // type:function size:0x48 scope:global -CheckLeakDetector__FPCc = .text:0x801FDFD0; // type:function size:0x4 scope:global -MaybeDoMemoryProfile__Fv = .text:0x801FDFD4; // type:function size:0x4 scope:global -BeginGameFlowLoadRegion__Fv = .text:0x801FDFD8; // type:function size:0x28 scope:global -CheckForHolesInMemory__Fv = .text:0x801FE000; // type:function size:0x2C scope:global -BeginLoading__12RegionLoader = .text:0x801FE02C; // type:function size:0x134 scope:global -GetTODFilename__F10eTimeOfDayPCcPci = .text:0x801FE160; // type:function size:0x9C scope:global -LoadHandler__12RegionLoader = .text:0x801FE1FC; // type:function size:0x290 scope:global -FinishedLoading__12RegionLoader = .text:0x801FE48C; // type:function size:0xB8 scope:global -Unload__12RegionLoader = .text:0x801FE544; // type:function size:0x194 scope:global -BeginGameFlowLoadTrack__Fv = .text:0x801FE6D8; // type:function size:0x28 scope:global -BeginLoading__11TrackLoader = .text:0x801FE700; // type:function size:0x5C scope:global -LoadHandler__11TrackLoader = .text:0x801FE75C; // type:function size:0xA4 scope:global -FinishedLoading__11TrackLoader = .text:0x801FE800; // type:function size:0x3C scope:global -Unload__11TrackLoader = .text:0x801FE83C; // type:function size:0x170 scope:global -EnableBarrierSceneryGroup__FPCcb = .text:0x801FE9AC; // type:function size:0x70 scope:global -InitTopologyAndSceneryGroups__Fv = .text:0x801FEA1C; // type:function size:0x28 scope:global -InitTopologyAndSceneryGroups__11TrackLoader = .text:0x801FEA44; // type:function size:0x50 scope:global -CloseTopologyAndSceneryGroups__Fv = .text:0x801FEA94; // type:function size:0x28 scope:global -CloseTopologyAndSceneryGroups__11TrackLoader = .text:0x801FEABC; // type:function size:0x44 scope:global -RedoTopologyAndSceneryGroups__Fv = .text:0x801FEB00; // type:function size:0x54 scope:global -BeginGameFlowUnloadTrack__Fi = .text:0x801FEB54; // type:function size:0x74 scope:global -GameFlowClearFEngLoadingScreen__Fv = .text:0x801FEBC8; // type:function size:0x28 scope:global -FinishedGameLoading__Fv = .text:0x801FEBF0; // type:function size:0x16C scope:global -WaitForSimulation__Fv = .text:0x801FED5C; // type:function size:0x6C scope:global -BeginWorldLoad__Fv = .text:0x801FEDC8; // type:function size:0x18C scope:global -__15GameFlowManager = .text:0x801FEF54; // type:function size:0x2C scope:global -SetSingleFunction__15GameFlowManagerPFi_vPCci = .text:0x801FEF80; // type:function size:0x38 scope:global -SetWaitingForCallback__15GameFlowManagerPCci = .text:0x801FEFB8; // type:function size:0x3C scope:global -ClearWaitingForCallback__15GameFlowManager = .text:0x801FEFF4; // type:function size:0x18 scope:global -Service__15GameFlowManager = .text:0x801FF00C; // type:function size:0x84 scope:global -SetState__15GameFlowManager13GameFlowState = .text:0x801FF090; // type:function size:0x8 scope:global -InitializeSingleAttributeVault__FPvPCcPPUcUi = .text:0x801FF098; // type:function size:0x1A4 scope:global -LoadFrontEndVault__Fb = .text:0x801FF23C; // type:function size:0xE8 scope:global -LoadFrontend__15GameFlowManager = .text:0x801FF324; // type:function size:0x50 scope:global -UnloadFrontEndVault__Fv = .text:0x801FF374; // type:function size:0xE8 scope:global -UnloadFrontend__15GameFlowManager = .text:0x801FF45C; // type:function size:0x34 scope:global -LoadTrack__15GameFlowManager = .text:0x801FF490; // type:function size:0x34 scope:global -ReloadTrack__15GameFlowManager = .text:0x801FF4C4; // type:function size:0x24 scope:global -UnloadTrack__15GameFlowManager = .text:0x801FF4E8; // type:function size:0x24 scope:global -CheckForDemoDiscTimeout__15GameFlowManager = .text:0x801FF50C; // type:function size:0x4 scope:global -IsPaused__15GameFlowManager = .text:0x801FF510; // type:function size:0x2C scope:global -LoadGlobalAChunks__Fv = .text:0x801FF53C; // type:function size:0x64 scope:global -LoadGlobalChunks__Fv = .text:0x801FF5A0; // type:function size:0x3C4 scope:global -DelayWaitForLoadingScreen__Fv = .text:0x801FF964; // type:function size:0x70 scope:global -GameFlowLoadingFrontEndPart3__Fi = .text:0x801FF9D4; // type:function size:0x5C scope:global -GameFlowLoadingFrontEndPart2__Fi = .text:0x801FFA30; // type:function size:0x58 scope:global -GameFlowLoadGarageScreen__FPFi_vi = .text:0x801FFA88; // type:function size:0x8C scope:global -GameFlowLoadingFrontEndPart1__Fi = .text:0x801FFB14; // type:function size:0x58 scope:global -BeginGameFlowLoadingFrontEnd__Fv = .text:0x801FFB6C; // type:function size:0x15C scope:global -EndGameFlowLoadingFrontEnd__Fv = .text:0x801FFCC8; // type:function size:0x5C scope:global -BeginGameFlowUnloadingFrontEnd__Fv = .text:0x801FFD24; // type:function size:0x168 scope:global -HandleTrackStreamerLoadingBar__Fv = .text:0x801FFE8C; // type:function size:0xB4 scope:global -BootLoadingScreen__Fv = .text:0x801FFF40; // type:function size:0x84 scope:global -GetChunkName__Fi = .text:0x801FFFC4; // type:function size:0x98 scope:global -GetIndex__9tEnvelopef = .text:0x8020005C; // type:function size:0x58 scope:global -OutOfRange__9tEnvelopef = .text:0x802000B4; // type:function size:0x38 scope:global -GetSlope__9tEnvelopei = .text:0x802000EC; // type:function size:0x50 scope:global -GetValue__9tEnvelopef = .text:0x8020013C; // type:function size:0x84 scope:global -GetAmplitude__7tShaker = .text:0x802001C0; // type:function size:0x40 scope:global -StartShaking__7tShakerP8bVector3ff = .text:0x80200200; // type:function size:0x48 scope:global -Update__7tShakerf = .text:0x80200248; // type:function size:0x60 scope:global -GetValue__7tShakerP8bVector3 = .text:0x802002A8; // type:function size:0x90 scope:global -UpdateCameraShakers__Ff = .text:0x80200338; // type:function size:0x58 scope:global -ResetCameraShakers__Fv = .text:0x80200390; // type:function size:0x5C scope:global -GetShake__FiP8bVector3 = .text:0x802003EC; // type:function size:0x30 scope:global -ApplyCameraShake__FiP8bMatrix4 = .text:0x8020041C; // type:function size:0x148 scope:global -ForceCameraShake__FiP8bVector3 = .text:0x80200564; // type:function size:0x40 scope:global -MaybeCameraShake__FiP8bVector3 = .text:0x802005A4; // type:function size:0x180 scope:global -__12JoylogBufferPCci = .text:0x80200724; // type:function size:0x5C scope:global -SaveBuffer__12JoylogBuffer = .text:0x80200780; // type:function size:0x54 scope:global -LoadBuffer__12JoylogBufferi = .text:0x802007D4; // type:function size:0x90 scope:global -AddData__12JoylogBufferiii = .text:0x80200864; // type:function size:0x130 scope:global -GetData__12JoylogBufferii = .text:0x80200994; // type:function size:0x124 scope:global -AddEntry__12JoylogBufferP17JoylogBufferEntryi = .text:0x80200AB8; // type:function size:0x64 scope:global -GetEntry__12JoylogBufferP17JoylogBufferEntryi = .text:0x80200B1C; // type:function size:0x48 scope:global -GetEntry__12JoylogBufferP17JoylogBufferEntryPUc = .text:0x80200B64; // type:function size:0x64 scope:global -PrintNearbyJoylogEntries__12JoylogBufferi = .text:0x80200BC8; // type:function size:0x8C scope:global -StopReplaying__6Joylog = .text:0x80200C54; // type:function size:0x24 scope:global -LoadReadAheadBuffer__6Joylog = .text:0x80200C78; // type:function size:0x48 scope:global -ReadAheadFromChannel__6JoylogPvii = .text:0x80200CC0; // type:function size:0xDC scope:global -FreeReadAheadBuffer__6Joylog = .text:0x80200D9C; // type:function size:0x40 scope:global -GetData__6Joylogi13JoylogChannel = .text:0x80200DDC; // type:function size:0x74 scope:global -GetSignedData__6Joylogi13JoylogChannel = .text:0x80200E50; // type:function size:0x38 scope:global -GetData__6JoylogPvi13JoylogChannel = .text:0x80200E88; // type:function size:0x58 scope:global -AddData__6Joylogii13JoylogChannel = .text:0x80200EE0; // type:function size:0x48 scope:global -AddData__6JoylogPCvi13JoylogChannel = .text:0x80200F28; // type:function size:0x5C scope:global -AddOrGetData__6JoylogUii13JoylogChannel = .text:0x80200F84; // type:function size:0x6C scope:global -AddOrGetData__6Joylogf13JoylogChannel = .text:0x80200FF0; // type:function size:0x7C scope:global -AddOrGetData__6JoylogPc13JoylogChannel = .text:0x8020106C; // type:function size:0xC0 scope:global -AddOrGetData__6JoylogPUs13JoylogChannel = .text:0x8020112C; // type:function size:0xC8 scope:global -Init__6Joylog = .text:0x802011F4; // type:function size:0xFC scope:global -Save__6Joylog = .text:0x802012F0; // type:function size:0x30 scope:global -IsCapturing__6Joylog = .text:0x80201320; // type:function size:0xC scope:global -IsReplaying__6Joylog = .text:0x8020132C; // type:function size:0xC scope:global -JoylogPutStringFunction__FiPCc = .text:0x80201338; // type:function size:0x78 scope:global -DumpJoylogPrint__Fv = .text:0x802013B0; // type:function size:0x78 scope:global -WriteJoylogFileHeader__Fv = .text:0x80201428; // type:function size:0x164 scope:global -InitJoylog__Fv = .text:0x8020158C; // type:function size:0x50 scope:global -ServiceJoylog__Fv = .text:0x802015DC; // type:function size:0x44 scope:global -GetQueuedFileDebugTime__Fv = .text:0x80201620; // type:function size:0x2C scope:global -IsQueuedFileJoyloggable__FPCc = .text:0x8020164C; // type:function size:0x34 scope:global -SetQueuedFileMinPriority__Fi = .text:0x80201680; // type:function size:0xC scope:global -__10QueuedFilePvPCciiT1T1P16QueuedFileParams = .text:0x8020168C; // type:function size:0x16C scope:global -_._10QueuedFile = .text:0x802017F8; // type:function size:0x4C scope:global -BeginRead__10QueuedFile = .text:0x80201844; // type:function size:0x100 scope:global -ReadDoneCallback__10QueuedFile = .text:0x80201944; // type:function size:0x54 scope:global -TestAddQueuedFile__16QueuedFileBundleP10QueuedFile = .text:0x80201998; // type:function size:0x1B4 scope:global -BeginRead__16QueuedFileBundle = .text:0x80201B4C; // type:function size:0xA0 scope:global -ReadCallback__16QueuedFileBundlei = .text:0x80201BEC; // type:function size:0xCC scope:global -CheckQueuedFileCallbacks__Fv = .text:0x80201CB8; // type:function size:0x1B4 scope:global -StartQueuedFileReading__Fv = .text:0x80201E6C; // type:function size:0x220 scope:global -ServiceQueuedFiles__Fv = .text:0x8020208C; // type:function size:0x24 scope:global -IsQueuedFileBusy__Fv = .text:0x802020B0; // type:function size:0x30 scope:global -BlockWhileQueuedFileBusy__Fv = .text:0x802020E0; // type:function size:0x48 scope:global -InitQueuedFiles__Fv = .text:0x80202128; // type:function size:0x3C scope:global -GetQueuedFileSize__FPCc = .text:0x80202164; // type:function size:0x20 scope:global -AddQueuedFile__FPvPCciiPFPvi_vT0P16QueuedFileParams = .text:0x80202184; // type:function size:0xDC scope:global -AddQueuedFile2__FPvPCciiPFPviPv_vT0T0P16QueuedFileParams = .text:0x80202260; // type:function size:0x98 scope:global -bSyncTaskRun__Fv = .text:0x802022F8; // type:function size:0x20 scope:global -bThreadYield__Fi = .text:0x80202318; // type:function size:0x20 scope:global -bIsMainThread__Fv = .text:0x80202338; // type:function size:0x24 scope:global -bFileGetFilenameHash__FPCc = .text:0x8020235C; // type:function size:0x88 scope:global -ServiceFileStats__Fv = .text:0x802023E4; // type:function size:0x4 scope:global -GetRealFileOpenFlags__F13bFileOpenMode = .text:0x802023E8; // type:function size:0x2C scope:global -AddMemoryFile__FPv = .text:0x80202414; // type:function size:0xAC scope:global -RemoveMemoryFile__FPv = .text:0x802024C0; // type:function size:0x14 scope:global -FindMemoryFileEntry__FPCc = .text:0x802024D4; // type:function size:0x7C scope:global -AsyncCloseFileCallback__FiiPv = .text:0x80202550; // type:function size:0x20 scope:global -AsyncCloseFile__Fi = .text:0x80202570; // type:function size:0x34 scope:global -FindHandle__20CachedRealFileHandlePCc = .text:0x802025A4; // type:function size:0x88 scope:global -AddHandle__20CachedRealFileHandlePCcii = .text:0x8020262C; // type:function size:0xA4 scope:global -RemoveUnusedHandle__20CachedRealFileHandle = .text:0x802026D0; // type:function size:0x98 scope:global -FlushUnusedHandle__20CachedRealFileHandlePCc = .text:0x80202768; // type:function size:0x68 scope:global -FlushUnusedHandles__20CachedRealFileHandleb = .text:0x802027D0; // type:function size:0x28 scope:global -bFileFlushCachedFiles__Fv = .text:0x802027F8; // type:function size:0x24 scope:global -bFileFlushCacheFile__FPCc = .text:0x8020281C; // type:function size:0x20 scope:global -bInitDisculatorDriver__FPCcT0 = .text:0x8020283C; // type:function size:0x4C scope:global -Create__16DisculatorDriverPCcT1 = .text:0x80202888; // type:function size:0xB4 scope:global -Init__16DisculatorDriver = .text:0x8020293C; // type:function size:0x58 scope:global -Restore__16DisculatorDriver = .text:0x80202994; // type:function size:0x4 scope:global -Open__16DisculatorDriverPCciPi = .text:0x80202998; // type:function size:0x118 scope:global -Close__16DisculatorDriveri = .text:0x80202AB0; // type:function size:0x3C scope:global -Read__16DisculatorDriveriPvUiPQ28RealFile12DeviceDriveri = .text:0x80202AEC; // type:function size:0x174 scope:global -Write__16DisculatorDriveriPCvUiPQ28RealFile12DeviceDriveri = .text:0x80202C60; // type:function size:0x8 scope:global -Seek__16DisculatorDriveriUxiPQ28RealFile12DeviceDriveri = .text:0x80202C68; // type:function size:0x34 scope:global -Getsize__16DisculatorDriveri = .text:0x80202C9C; // type:function size:0xC scope:global -QueryLocation__16DisculatorDriveri = .text:0x80202CA8; // type:function size:0xC scope:global -LoadGiantFiles__16DisculatorDriverPCcT1 = .text:0x80202CB4; // type:function size:0x1C4 scope:global -FindDirectoryEntry__16DisculatorDriverPCc = .text:0x80202E78; // type:function size:0x13C scope:global -__5bFilePCc13bFileOpenMode = .text:0x80202FB4; // type:function size:0x15C scope:global -_._5bFile = .text:0x80203110; // type:function size:0xCC scope:global -OpenLowLevel__5bFile = .text:0x802031DC; // type:function size:0x10C scope:global -MaybeAddCachedHandle__5bFile = .text:0x802032E8; // type:function size:0x68 scope:global -Seek__5bFileii = .text:0x80203350; // type:function size:0x4C scope:global -ReadAsync__5bFilePviPFPv_vT1 = .text:0x8020339C; // type:function size:0x1CC scope:global -FlushWriteBuffer__5bFile = .text:0x80203568; // type:function size:0x58 scope:global -Write__5bFilePCvi = .text:0x802035C0; // type:function size:0xE4 scope:global -CallbackFunctionOpen__5bFileiiPv = .text:0x802036A4; // type:function size:0xCC scope:global -CallbackFunctionRead__5bFileiiPv = .text:0x80203770; // type:function size:0x8C scope:global -HandleCompletedCallbacks__5bFile = .text:0x802037FC; // type:function size:0x10C scope:global -bInitFileSystem__Fv = .text:0x80203908; // type:function size:0x5C scope:global -bServiceFileSystem__Fv = .text:0x80203964; // type:function size:0x34 scope:global -bWaitUntilAsyncDone__FP5bFile = .text:0x80203998; // type:function size:0x44 scope:global -bOpen__FPCcii = .text:0x802039DC; // type:function size:0x74 scope:global -bClose__FP5bFile = .text:0x80203A50; // type:function size:0x44 scope:global -bFileSize__FP5bFile = .text:0x80203A94; // type:function size:0x20 scope:global -bFileSize__FPCc = .text:0x80203AB4; // type:function size:0x54 scope:global -bFileExists__FPCc = .text:0x80203B08; // type:function size:0x58 scope:global -bReadAsync__FP5bFilePviPFPv_vT1 = .text:0x80203B60; // type:function size:0x34 scope:global -bRead__FP5bFilePvi = .text:0x80203B94; // type:function size:0x3C scope:global -bSeek__FP5bFileii = .text:0x80203BD0; // type:function size:0x28 scope:global -bIsAsyncDone__FP5bFile = .text:0x80203BF8; // type:function size:0x4C scope:global -bWrite__FP5bFilePCvi = .text:0x80203C44; // type:function size:0x20 scope:global -bGetFile__FPCcPii = .text:0x80203C64; // type:function size:0xDC scope:global -bFPrintf__FP5bFilePCce = .text:0x80203D40; // type:function size:0x114 scope:global -bAppendToFile__FPCcPvi = .text:0x80203E54; // type:function size:0x58 scope:global -bFileRunTimingTest__Fv = .text:0x80203EAC; // type:function size:0xC scope:global -Compare__FPUcT0i = .text:0x80203EB8; // type:function size:0x40 scope:local -ShortMove__FPUcT0i = .text:0x80203EF8; // type:function size:0x1C scope:local -__11JLZHashPooli = .text:0x80203F14; // type:function size:0x74 scope:global -_._11JLZHashPool = .text:0x80203F88; // type:function size:0x5C scope:global -GetTableHash__FPUc = .text:0x80203FE4; // type:function size:0x30 scope:local -Update__11JLZHashPoolPUci = .text:0x80204014; // type:function size:0xE4 scope:global -FindList__11JLZHashPoolPUc = .text:0x802040F8; // type:function size:0x3C scope:global -JLZCompress__FPUciT0 = .text:0x80204134; // type:function size:0x294 scope:global -JLZDecompress__FPUcT0 = .text:0x802043C8; // type:function size:0x158 scope:global -HUFF_decompress__FPUcT0 = .text:0x80204520; // type:function size:0xD40 scope:local -HUFF_decode__FPvPCv = .text:0x80205260; // type:function size:0x2C scope:global -HUFF_writebits__FP17HuffEncodeContextP13HUFFMemStructUiUi = .text:0x8020528C; // type:function size:0xDC scope:local -HUFF_treechase__FP17HuffEncodeContextUiUi = .text:0x80205368; // type:function size:0x70 scope:local -HUFF_maketree__FP17HuffEncodeContext = .text:0x802053D8; // type:function size:0x1C4 scope:local -HUFF_minrep__FP17HuffEncodeContextUiUi = .text:0x8020559C; // type:function size:0xE8 scope:local -HUFF_writenum__FP17HuffEncodeContextP13HUFFMemStructUi = .text:0x80205684; // type:function size:0x1A4 scope:local -HUFF_writeexp__FP17HuffEncodeContextP13HUFFMemStructUi = .text:0x80205828; // type:function size:0x70 scope:local -HUFF_writecode__FP17HuffEncodeContextP13HUFFMemStructUi = .text:0x80205898; // type:function size:0x48 scope:local -HUFF_init__FP17HuffEncodeContext = .text:0x802058E0; // type:function size:0x124 scope:local -HUFF_analysis__FP17HuffEncodeContextUiUi = .text:0x80205A04; // type:function size:0xAB4 scope:local -HUFF_pack__FP17HuffEncodeContextP13HUFFMemStructUi = .text:0x802064B8; // type:function size:0x438 scope:local -HUFF_packfile__FP17HuffEncodeContextP13HUFFMemStructT1i = .text:0x802068F0; // type:function size:0x1BC scope:local -HUFF_encode__FPvPCvi = .text:0x80206AAC; // type:function size:0x80 scope:global -HUFFDecompress__FPUcT0 = .text:0x80206B2C; // type:function size:0x60 scope:global -HUFFCompress__FPUciT0 = .text:0x80206B8C; // type:function size:0x6C scope:global -RAWDecompress__FPUcT0 = .text:0x80206BF8; // type:function size:0x68 scope:global -RAWCompress__FPUciT0 = .text:0x80206C60; // type:function size:0x74 scope:global -OldLZDecompress__FPUcT0 = .text:0x80206CD4; // type:function size:0x174 scope:global -LZGetMaxCompressedSize__FUi = .text:0x80206E48; // type:function size:0xC scope:global -LZByteSwapHeader__FP8LZHeader = .text:0x80206E54; // type:function size:0x44 scope:global -LZValidHeader__FP8LZHeader = .text:0x80206E98; // type:function size:0x84 scope:global -LZCompress__FPUcUiT0 = .text:0x80206F1C; // type:function size:0x80 scope:global -LZDecompress__FPUcT0 = .text:0x80206F9C; // type:function size:0xA4 scope:global -Update__3MD5PCvi = .text:0x80207040; // type:function size:0xD8 scope:global -GetRaw__3MD5 = .text:0x80207118; // type:function size:0x54 scope:global -_Transform__3MD5 = .text:0x8020716C; // type:function size:0x98C scope:global -_Final__3MD5 = .text:0x80207AF8; // type:function size:0x114 scope:global -Contains__5vAABBfff = .text:0x80207C0C; // type:function size:0x60 scope:global -SwapEndian__9vAABBTree = .text:0x80207C6C; // type:function size:0xD8 scope:global -QueryLeafHelper__9vAABBTreeP5vAABBfff = .text:0x80207D44; // type:function size:0xD8 scope:global -QueryLeaf__9vAABBTreefff = .text:0x80207E1C; // type:function size:0x9C scope:global -MakeCoeffs__8tCubic1D = .text:0x80207EB8; // type:function size:0x48 scope:global -GetVal__8tCubic1Df = .text:0x80207F00; // type:function size:0x20 scope:global -GetdVal__8tCubic1Df = .text:0x80207F20; // type:function size:0x28 scope:global -GetddVal__8tCubic1Df = .text:0x80207F48; // type:function size:0x20 scope:global -GetDerivative__8tCubic1Df = .text:0x80207F68; // type:function size:0x44 scope:global -GetSecondDerivative__8tCubic1Df = .text:0x80207FAC; // type:function size:0x48 scope:global -ClampDerivative__8tCubic1Df = .text:0x80207FF4; // type:function size:0x60 scope:global -ClampSecondDerivative__8tCubic1Df = .text:0x80208054; // type:function size:0xD4 scope:global -Update__8tCubic1Dfff = .text:0x80208128; // type:function size:0x144 scope:global -SetValDesired__8tCubic2DP8bVector2 = .text:0x8020826C; // type:function size:0x3C scope:global -GetVal__8tCubic2DP8bVector2 = .text:0x802082A8; // type:function size:0x14 scope:global -SetVal__8tCubic3DPC8bVector3 = .text:0x802082BC; // type:function size:0x58 scope:global -SetdVal__8tCubic3DP8bVector3 = .text:0x80208314; // type:function size:0x58 scope:global -SetValDesired__8tCubic3DP8bVector3 = .text:0x8020836C; // type:function size:0x58 scope:global -GetVal__8tCubic3DP8bVector3 = .text:0x802083C4; // type:function size:0x1C scope:global -GetValDesired__8tCubic3DP8bVector3 = .text:0x802083E0; // type:function size:0x1C scope:global -Update__8tCubic3Dfff = .text:0x802083FC; // type:function size:0x78 scope:global -SplineSeek__6cPointP8tCubic1Dfff = .text:0x80208474; // type:function size:0x120 scope:global -SplineSeek__6cPointP8tCubic2Df = .text:0x80208594; // type:function size:0x58 scope:global -__builtin_new = .text:0x802085EC; // type:function size:0x24 scope:global -__builtin_vec_new = .text:0x80208610; // type:function size:0x24 scope:global -__builtin_delete = .text:0x80208634; // type:function size:0x20 scope:global -__builtin_vec_delete = .text:0x80208654; // type:function size:0x20 scope:global -Clear__10StompEntryPv = .text:0x80208674; // type:function size:0x104 scope:global -ClearAll__10StompEntryPv = .text:0x80208778; // type:function size:0x50 scope:global -InitStomper__Fv = .text:0x802087C8; // type:function size:0x38 scope:global -__7Stomper = .text:0x80208800; // type:function size:0x48 scope:global -Clear__7Stomper = .text:0x80208848; // type:function size:0x58 scope:global -ResetRenderEggs__Fv = .text:0x802088A0; // type:function size:0x30 scope:global -ActivateAnyRenderEggs__Fv = .text:0x802088D0; // type:function size:0x4 scope:global -__10EasterEggs = .text:0x802088D4; // type:function size:0x40 scope:global -_._10EasterEggs = .text:0x80208914; // type:function size:0x34 scope:global -Activate__10EasterEggs = .text:0x80208948; // type:function size:0x94 scope:global -UnActivate__10EasterEggs = .text:0x802089DC; // type:function size:0x68 scope:global -ClearNonPersistent__10EasterEggs = .text:0x80208A44; // type:function size:0x40 scope:global -ActivateEasterEgg__10EasterEggsi = .text:0x80208A84; // type:function size:0x19C scope:global -HandleJoy__10EasterEggs = .text:0x80208C20; // type:function size:0x1D0 scope:global -ClearButtons__10EasterEggs = .text:0x80208DF0; // type:function size:0xC scope:global -IsEasterEggUnlocked__10EasterEggsUiUi = .text:0x80208DFC; // type:function size:0x54 scope:global -IsEasterEggUnlocked__10EasterEggs17EasterEggsSpecial = .text:0x80208E50; // type:function size:0x24 scope:global -ClearGroup__10EasterEggsUi = .text:0x80208E74; // type:function size:0x4C scope:global -TriggerSpecial__10EasterEggsUi = .text:0x80208EC0; // type:function size:0x4 scope:global -GetValue__5Tablef = .text:0x80208EC4; // type:function size:0xE0 scope:global -Blend__t6tTable1Z8bVector2P8bVector2N21f = .text:0x80208FA4; // type:function size:0x4C scope:global -Blend__t6tTable1Z8bVector4P8bVector4N21f = .text:0x80208FF0; // type:function size:0x6C scope:global -Blend__t6tTable1ZfPfN21f = .text:0x8020905C; // type:function size:0x24 scope:global -Blend__t6tGraph1ZfPfN21f = .text:0x80209080; // type:function size:0x24 scope:global -__5GraphP8bVector2i = .text:0x802090A4; // type:function size:0x10 scope:global -GetValue__5Graphf = .text:0x802090B4; // type:function size:0xDC scope:global -Allocate__11AverageBaseUiPCc = .text:0x80209190; // type:function size:0x30 scope:global -DeAllocate__11AverageBasePvUiPCc = .text:0x802091C0; // type:function size:0x3C scope:global -__11AverageBaseii = .text:0x802091FC; // type:function size:0x28 scope:global -__7Average = .text:0x80209224; // type:function size:0x5C scope:global -__7Averagei = .text:0x80209280; // type:function size:0x6C scope:global -Init__7Averagei = .text:0x802092EC; // type:function size:0x9C scope:global -_._7Average = .text:0x80209388; // type:function size:0x90 scope:global -Recalculate__7Average = .text:0x80209418; // type:function size:0x9C scope:global -Record__7Averagef = .text:0x802094B4; // type:function size:0xA4 scope:global -Reset__7Averagef = .text:0x80209558; // type:function size:0x70 scope:global -Flush__7Averagef = .text:0x802095C8; // type:function size:0x70 scope:global -GetLastRecordedValue__C7Average = .text:0x80209638; // type:function size:0x3C scope:global -__13AverageWindowff = .text:0x80209674; // type:function size:0xA0 scope:global -_._13AverageWindow = .text:0x80209714; // type:function size:0x80 scope:global -Reset__13AverageWindowf = .text:0x80209794; // type:function size:0x98 scope:global -Record__13AverageWindowff = .text:0x8020982C; // type:function size:0x1A0 scope:global -Record__8PidErrorffbT3 = .text:0x802099CC; // type:function size:0xA8 scope:global -GetVideoMode__Fv = .text:0x80209A74; // type:function size:0xC scope:global -SetVideoMode__F10VIDEO_MODE = .text:0x80209A80; // type:function size:0x14 scope:global -GetBuildRegionVideoMode__Fv = .text:0x80209A94; // type:function size:0x2C scope:global -GetRealTimeElapsedFromQuantized__Fi = .text:0x80209AC0; // type:function size:0x3C scope:global -GetQuantizedRealTimeElapsed__Ff = .text:0x80209AFC; // type:function size:0x2C scope:global -PrepareRealTimestep__Ff = .text:0x80209B28; // type:function size:0x36C scope:global -AdvanceRealTime__Fv = .text:0x80209E94; // type:function size:0xDC scope:global -ResetWorldTime__Fv = .text:0x80209F70; // type:function size:0xCC scope:global -PrepareWorldTimestep__Ff = .text:0x8020A03C; // type:function size:0x24 scope:global -AdvanceWorldTime__Fv = .text:0x8020A060; // type:function size:0x154 scope:global -GetDebugRealTime__Fv = .text:0x8020A1B4; // type:function size:0xEC scope:global -IntToString2__FPciib = .text:0x8020A2A0; // type:function size:0x88 scope:local -PrintToString__FPciiiii = .text:0x8020A328; // type:function size:0x51C scope:local -GetHoursMinsSeconds__5TimerPiN31 = .text:0x8020A844; // type:function size:0x9C scope:global -PrintToString__5TimerPci = .text:0x8020A8E0; // type:function size:0x114 scope:global -RegisterHandler__Q26Hermes11PortMessageRQ26Hermes7Handler = .text:0x8020A9F4; // type:function size:0x230 scope:global -UnregisterHandler__Q26Hermes11PortMessagePQ26Hermes13_h_HHANDLER__ = .text:0x8020AC24; // type:function size:0xD8 scope:global -SetIDFilter__Q26Hermes11PortMessagePQ26Hermes13_h_HHANDLER__b = .text:0x8020ACFC; // type:function size:0x30 scope:global -HandleMessage__Q26Hermes11PortMessagePQ26Hermes7Message = .text:0x8020AD2C; // type:function size:0x88 scope:global -Init__Q26Hermes6System = .text:0x8020ADB4; // type:function size:0x2F8 scope:global -CreateKey__Q26Hermes6SystemG6UCrc32T1 = .text:0x8020B0AC; // type:function size:0x19C scope:global -AddPortMessage__Q26Hermes6SystemUxPQ26Hermes11PortMessage = .text:0x8020B248; // type:function size:0x41C scope:global -RemovePortMessage__Q26Hermes6SystemUx = .text:0x8020B664; // type:function size:0x700 scope:global -FindPortMessage__Q26Hermes6SystemUx = .text:0x8020BD64; // type:function size:0x1C8 scope:global -GetPortKeyMap__Q26Hermes6System = .text:0x8020BF2C; // type:function size:0x8 scope:global -Post__Q26Hermes7MessageG6UCrc32 = .text:0x8020BF34; // type:function size:0x50 scope:global -Deliver__Q26Hermes7Message = .text:0x8020BF84; // type:function size:0x6C scope:global -_AddToPort__Q26Hermes7HandlerG6UCrc32 = .text:0x8020BFF0; // type:function size:0x1EC scope:global -Destroy__Q26Hermes7HandlerPQ26Hermes13_h_HHANDLER__ = .text:0x8020C1DC; // type:function size:0x1DC scope:global -SetIDFilter__Q26Hermes7HandlerPQ26Hermes13_h_HHANDLER__b = .text:0x8020C3B8; // type:function size:0xD0 scope:global -_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZ10FileRecordZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZ10FileRecordZQ24_STLt4less1ZUiZQ24_STLt9allocator1ZQ24_STLt4pair2ZCUiZ10FileRecordPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZ10FileRecordT1 = .text:0x8020C488; // type:function size:0x174 scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZ10FileRecordZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZ10FileRecordZQ24_STLt4less1ZUiZQ24_STLt9allocator1ZQ24_STLt4pair2ZCUiZ10FileRecordRCQ24_STLt4pair2ZCUiZ10FileRecord = .text:0x8020C5FC; // type:function size:0x118 scope:global -_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZPQ26Attrib5VaultZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZPQ26Attrib5VaultZQ24_STLt4less1ZUiZQ24_STLt9allocator1ZQ24_STLt4pair2ZCUiZPQ26Attrib5VaultPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZPQ26Attrib5VaultT1 = .text:0x8020C714; // type:function size:0x144 scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZPQ26Attrib5VaultZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZPQ26Attrib5VaultZQ24_STLt4less1ZUiZQ24_STLt9allocator1ZQ24_STLt4pair2ZCUiZPQ26Attrib5VaultRCQ24_STLt4pair2ZCUiZPQ26Attrib5Vault = .text:0x8020C858; // type:function size:0x118 scope:global -_M_insert__Q24_STLt8_Rb_tree5ZPQ26Hermes13_h_HHANDLER__ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt4less1ZPQ26Hermes13_h_HHANDLER__ZQ33UTL3Stdt9Allocator2ZQ26Hermes7PortKeyZ9_type_mapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyT1 = .text:0x8020C970; // type:function size:0x17C scope:global -insert_unique__Q24_STLt8_Rb_tree5ZPQ26Hermes13_h_HHANDLER__ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt4less1ZPQ26Hermes13_h_HHANDLER__ZQ33UTL3Stdt9Allocator2ZQ26Hermes7PortKeyZ9_type_mapRCQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKey = .text:0x8020CAEC; // type:function size:0x118 scope:global -insert_unique__Q24_STLt8_Rb_tree5ZPQ26Hermes13_h_HHANDLER__ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt4less1ZPQ26Hermes13_h_HHANDLER__ZQ33UTL3Stdt9Allocator2ZQ26Hermes7PortKeyZ9_type_mapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyRCQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKey = .text:0x8020CC04; // type:function size:0x26C scope:global -__8VaultMap = .text:0x8020CE70; // type:function size:0x78 scope:global -__7FileMap = .text:0x8020CEE8; // type:function size:0x78 scope:global -__static_initialization_and_destruction_0 = .text:0x8020CF60; // type:function size:0x5A4 scope:local -__Q33UTL3Stdt3map3ZPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZ9_type_map = .text:0x8020D504; // type:function size:0x74 scope:global -RebuildTable__t10VecHashMap5ZUxZQ26Hermes11PortMessageZt17TablePolicy_Fixed2PFUi_Pv26DefaultTableAllocFunc__FUiPFPvUi_v27DefaultTableFreeFunc__FPvUib0Ui16Ui = .text:0x8020D578; // type:function size:0x2C8 scope:global -LoadHandler__12RegionLoaderi = .text:0x8020D840; // type:function size:0x20 scope:global -Allocate__15HighAttribAllocUiPCc = .text:0x8020D860; // type:function size:0x40 scope:global -Free__15HighAttribAllocPvUiPCc = .text:0x8020D8A0; // type:function size:0x3C scope:global -Reset__7tShaker = .text:0x8020D8DC; // type:function size:0x3C scope:global -SortByPriority__10QueuedFileP10QueuedFileT1 = .text:0x8020D918; // type:function size:0x1C scope:global -ReadDoneCallback__10QueuedFilePv = .text:0x8020D934; // type:function size:0x20 scope:global -__dl__16QueuedFileBundlePv = .text:0x8020D954; // type:function size:0x2C scope:global -ReadCallbackBridge__16QueuedFileBundlePvi = .text:0x8020D980; // type:function size:0x4C scope:global -GetName__Q28RealFile12DeviceDriver = .text:0x8020D9CC; // type:function size:0x4 scope:global -GetOptimalReadSize__Q28RealFile12DeviceDriver = .text:0x8020D9D0; // type:function size:0x8 scope:global -__dl__20CachedRealFileHandlePv = .text:0x8020D9D8; // type:function size:0x2C scope:global -__dl__18OpenDisculatorFilePv = .text:0x8020DA04; // type:function size:0x2C scope:global -_._16DisculatorDriver = .text:0x8020DA30; // type:function size:0x34 scope:global -Remove__16DisculatorDriverPCc = .text:0x8020DA64; // type:function size:0x8 scope:global -Getspace__16DisculatorDriver = .text:0x8020DA6C; // type:function size:0xC scope:global -ReleaseData__20FileGarbageCollectorUiPvUi = .text:0x8020DA78; // type:function size:0x7C scope:global -ReleaseData__21VaultGarbageCollectorUiPvUi = .text:0x8020DAF4; // type:function size:0x44 scope:global -Allocate__22DefaultAttribAllocatorUiPCc = .text:0x8020DB38; // type:function size:0x28 scope:global -Free__22DefaultAttribAllocatorPvUiPCc = .text:0x8020DB60; // type:function size:0x28 scope:global -_._Q28RealFile12DeviceDriver = .text:0x8020DB88; // type:function size:0x34 scope:global -Init__Q28RealFile12DeviceDriver = .text:0x8020DBBC; // type:function size:0x8 scope:global -Restore__Q28RealFile12DeviceDriver = .text:0x8020DBC4; // type:function size:0x4 scope:global -Write__Q28RealFile12DeviceDriveriPCvUiPQ28RealFile12DeviceDriveri = .text:0x8020DBC8; // type:function size:0x8 scope:global -QueryLocation__Q28RealFile12DeviceDriveri = .text:0x8020DBD0; // type:function size:0xC scope:global -Remove__Q28RealFile12DeviceDriverPCc = .text:0x8020DBDC; // type:function size:0x8 scope:global -Getspace__Q28RealFile12DeviceDriver = .text:0x8020DBE4; // type:function size:0xC scope:global -_GLOBAL_.I.BasisMatrixInitDone = .text:0x8020DBF0; // type:function size:0x2C scope:local -InitConfig__Fv = .text:0x8020DC1C; // type:function size:0x1C scope:global -JoylogConfigItems__Fv = .text:0x8020DC38; // type:function size:0x220 scope:global -LoadConfigItems__Fv = .text:0x8020DE58; // type:function size:0x20 scope:global -SaveConfigItems__Fv = .text:0x8020DE78; // type:function size:0x20 scope:global -FirstBreakpoint__Fv = .text:0x8020DE98; // type:function size:0x4 scope:global -MainLoopBreakpoint__Fv = .text:0x8020DE9C; // type:function size:0x4 scope:global -__static_initialization_and_destruction_0 = .text:0x8020DEA0; // type:function size:0x50 scope:local -_GLOBAL_.I.SHAPE_clut = .text:0x8020DEF0; // type:function size:0x2C scope:local -__static_initialization_and_destruction_0 = .text:0x8020DF1C; // type:function size:0x50 scope:local -_GLOBAL_.I.DrawMissionComponents__Fv = .text:0x8020DF6C; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x8020DF98; // type:label scope:local -__16SmackableTriggerP8HMODEL__bRCQ25UMath7Matrix4RCQ25UMath7Vector3Ui = .text:0x8020DF98; // type:function size:0x160 scope:global -Fire__16SmackableTrigger = .text:0x8020E0F8; // type:function size:0x28 scope:global -Disable__16SmackableTrigger = .text:0x8020E120; // type:function size:0x38 scope:global -Enable__16SmackableTrigger = .text:0x8020E158; // type:function size:0x38 scope:global -IsEnabled__C16SmackableTrigger = .text:0x8020E190; // type:function size:0x1C scope:global -GetObjectMatrix__C16SmackableTriggerRQ25UMath7Matrix4 = .text:0x8020E1AC; // type:function size:0x17C scope:global -Move__16SmackableTriggerRCQ25UMath7Matrix4RCQ25UMath7Vector3b = .text:0x8020E328; // type:function size:0x74 scope:global -_._16SmackableTrigger = .text:0x8020E39C; // type:function size:0xAC scope:global -Construct__9ExplosionGQ23Sim5Param = .text:0x8020E448; // type:function size:0x134 scope:global -__9ExplosionRC15ExplosionParamsGQ23Sim5Param = .text:0x8020E57C; // type:function size:0x39C scope:global -_._9Explosion = .text:0x8020E918; // type:function size:0x1C4 scope:global -OnBehaviorChange__9ExplosionRC6UCrc32 = .text:0x8020EADC; // type:function size:0xA4 scope:global -OnCollide__9ExplosionP10IRigidBodyffRCQ38Dynamics9Collision8Geometry = .text:0x8020EB80; // type:function size:0x174 scope:global -GetRadius__C9Explosion = .text:0x8020ECF4; // type:function size:0x64 scope:global -TestCollisions__9Explosionf = .text:0x8020ED58; // type:function size:0x1F4 scope:global -OnTaskSimulate__9Explosionf = .text:0x8020EF4C; // type:function size:0xC4 scope:global -UpdateListing__8PVehicle = .text:0x8020F010; // type:function size:0x1208 scope:global -Launch__8PVehicle = .text:0x80210218; // type:function size:0x90 scope:global -GetPerfectLaunch__C8PVehicle = .text:0x802102A8; // type:function size:0x74 scope:global -SetStaging__8PVehicleb = .text:0x8021031C; // type:function size:0x58 scope:global -SetDriverStyle__8PVehicle11DriverStyle = .text:0x80210374; // type:function size:0x70 scope:global -SetDriverClass__8PVehicle11DriverClass = .text:0x802103E4; // type:function size:0x44 scope:global -OnTask__8PVehicleP10HSIMTASK__f = .text:0x80210428; // type:function size:0x38 scope:global -__Q28PVehicle8ResourceRCQ36Attrib3Gen8pvehiclebT2 = .text:0x80210460; // type:function size:0xE4 scope:global -CleanResources__8PVehicle = .text:0x80210544; // type:function size:0xBC scope:global -CanInstancesShareResourceCost__F7CarType = .text:0x80210600; // type:function size:0x34 scope:global -CountResources__8PVehicle = .text:0x80210634; // type:function size:0x1B4 scope:global -MakeRoom__8PVehicleP13IVehicleCacheRCQ33UTL3Stdt4list2ZQ28PVehicle8ResourceZ10_type_list = .text:0x802107E8; // type:function size:0xEF4 scope:global -Construct__8PVehicleGQ23Sim5Param = .text:0x802116DC; // type:function size:0x634 scope:global -__8PVehicle11DriverClassRCQ36Attrib3Gen8pvehicleRCQ25UMath7Vector3T3PCQ217CollisionGeometry6BoundsPC21FECustomizationRecordRCQ28PVehicle8ResourcePCQ37Physics4Info11PerformancePCc = .text:0x80211D10; // type:function size:0x6E4 scope:global -Kill__8PVehicle = .text:0x802123F4; // type:function size:0x6C scope:global -OnBehaviorChange__8PVehicleRC6UCrc32 = .text:0x80212460; // type:function size:0x358 scope:global -LookupBehaviorSignature__C8PVehicleRCQ26Attrib9StringKey = .text:0x802127B8; // type:function size:0x628 scope:global -LoadBehaviors__8PVehicleRCQ25UMath7Vector3RCQ25UMath7Matrix4 = .text:0x80212DE0; // type:function size:0x578 scope:global -_._8PVehicle = .text:0x80213358; // type:function size:0x350 scope:global -SetBehaviorOverride__8PVehicleG6UCrc32T1 = .text:0x802136A8; // type:function size:0x118 scope:global -RemoveBehaviorOverride__8PVehicleG6UCrc32 = .text:0x802137C0; // type:function size:0xF8 scope:global -Reset__8PVehicle = .text:0x802138B8; // type:function size:0x48 scope:global -SetVehicleOnGround__8PVehicleRCQ25UMath7Vector3T1 = .text:0x80213900; // type:function size:0x774 scope:global -OnAttributeChange__8PVehiclePCQ26Attrib10CollectionUi = .text:0x80214074; // type:function size:0x4 scope:global -OnEnableModeling__8PVehicle = .text:0x80214078; // type:function size:0x4 scope:global -OnDisableModeling__8PVehicle = .text:0x8021407C; // type:function size:0x5C scope:global -SetSpeed__8PVehiclef = .text:0x802140D8; // type:function size:0x170 scope:global -CommitBehaviorOverrides__8PVehicle = .text:0x80214248; // type:function size:0x38 scope:global -IsLoading__C8PVehicle = .text:0x80214280; // type:function size:0xD4 scope:global -DoDebug__8PVehiclef = .text:0x80214354; // type:function size:0x4 scope:global -UpdateLocalVelocities__8PVehicle = .text:0x80214358; // type:function size:0x198 scope:global -CheckOffWorld__8PVehicle = .text:0x802144F0; // type:function size:0x174 scope:global -DoStaging__8PVehiclef = .text:0x80214664; // type:function size:0x114 scope:global -OnTaskSimulate__8PVehiclef = .text:0x80214778; // type:function size:0x484 scope:global -OnExplosion__8PVehicleRCQ25UMath7Vector3T1fP10IExplosion = .text:0x80214BFC; // type:function size:0x2E0 scope:global -OnTaskFX__8PVehiclef = .text:0x80214EDC; // type:function size:0x1D4 scope:global -SetDynamicData__8PVehiclePCQ214EventSequencer6SystemP16EventDynamicData = .text:0x802150B0; // type:function size:0x2A4 scope:global -GlareOn__8PVehicleQ29VehicleFX2ID = .text:0x80215354; // type:function size:0x10 scope:global -GlareOff__8PVehicleQ29VehicleFX2ID = .text:0x80215364; // type:function size:0x10 scope:global -DebugObject__8PVehicle = .text:0x80215374; // type:function size:0x20 scope:global -ReloadBehaviors__8PVehicle = .text:0x80215394; // type:function size:0xC0 scope:global -SetAnimating__8PVehicleb = .text:0x80215454; // type:function size:0xC4 scope:global -Activate__8PVehicle = .text:0x80215518; // type:function size:0x48 scope:global -Deactivate__8PVehicle = .text:0x80215560; // type:function size:0x3C scope:global -SetPhysicsMode__8PVehicle11PhysicsMode = .text:0x8021559C; // type:function size:0x94 scope:global -OnBeginMode__8PVehicle11PhysicsMode = .text:0x80215630; // type:function size:0x2C8 scope:global -OnEndMode__8PVehicle11PhysicsMode = .text:0x802158F8; // type:function size:0x290 scope:global -GetTunings__C8PVehicle = .text:0x80215B88; // type:function size:0xE0 scope:global -SetTunings__8PVehicleRCQ27Physics7Tunings = .text:0x80215C68; // type:function size:0x40 scope:global -OnDebugDraw__8PVehicle = .text:0x80215CA8; // type:function size:0x4 scope:global -ComputeHeading__8PVehiclePQ25UMath7Vector3 = .text:0x80215CAC; // type:function size:0x160 scope:global -ForceStopOn__8PVehiclec = .text:0x80215E0C; // type:function size:0x4C scope:global -ForceStopOff__8PVehiclec = .text:0x80215E58; // type:function size:0x50 scope:global -Add__Q213PhysicsObject9BehaviorsP8Behavior = .text:0x80215EA8; // type:function size:0x110 scope:global -Remove__Q213PhysicsObject9BehaviorsP8Behavior = .text:0x80215FB8; // type:function size:0x11C scope:global -__13PhysicsObjectRCQ26Attrib8Instance11SimableTypeUiUi = .text:0x802160D4; // type:function size:0x584 scope:global -__13PhysicsObjectPCcT111SimableTypeP10HSIMABLE__Ui = .text:0x80216658; // type:function size:0x59C scope:global -_._13PhysicsObject = .text:0x80216BF4; // type:function size:0x598 scope:global -GetTransform__C13PhysicsObjectRQ25UMath7Matrix4 = .text:0x8021718C; // type:function size:0x148 scope:global -GetLinearVelocity__C13PhysicsObjectRQ25UMath7Vector3 = .text:0x802172D4; // type:function size:0x88 scope:global -GetAngularVelocity__C13PhysicsObjectRQ25UMath7Vector3 = .text:0x8021735C; // type:function size:0x88 scope:global -GetDimension__C13PhysicsObjectRQ25UMath7Vector3 = .text:0x802173E4; // type:function size:0x64 scope:global -GetCausalityTime__C13PhysicsObject = .text:0x80217448; // type:function size:0x64 scope:global -SetCausality__13PhysicsObjectP8HCAUSE__f = .text:0x802174AC; // type:function size:0x78 scope:global -GetCausality__C13PhysicsObject = .text:0x80217524; // type:function size:0x60 scope:global -OnAttached__13PhysicsObjectP11IAttachable = .text:0x80217584; // type:function size:0x84 scope:global -OnDetached__13PhysicsObjectP11IAttachable = .text:0x80217608; // type:function size:0x84 scope:global -OnService__13PhysicsObjectP13HSIMSERVICE__PQ23Sim6Packet = .text:0x8021768C; // type:function size:0x144 scope:global -OnTask__13PhysicsObjectP10HSIMTASK__f = .text:0x802177D0; // type:function size:0xD8 scope:global -Kill__13PhysicsObject = .text:0x802178A8; // type:function size:0x1D4 scope:global -SetOwnerObject__13PhysicsObjectP8ISimable = .text:0x80217A7C; // type:function size:0x1C scope:global -IsOwnedByPlayer__C13PhysicsObject = .text:0x80217A98; // type:function size:0x138 scope:global -IsOwnedBy__C13PhysicsObjectP8ISimable = .text:0x80217BD0; // type:function size:0xE8 scope:global -DebugObject__13PhysicsObject = .text:0x80217CB8; // type:function size:0x50 scope:global -OnBehaviorChange__13PhysicsObjectRC6UCrc32 = .text:0x80217D08; // type:function size:0x1CC scope:global -IsBehaviorActive__C13PhysicsObjectRC6UCrc32 = .text:0x80217ED4; // type:function size:0x98 scope:global -PauseBehavior__13PhysicsObjectRC6UCrc32b = .text:0x80217F6C; // type:function size:0x15C scope:global -ResetBehavior__13PhysicsObjectRC6UCrc32 = .text:0x802180C8; // type:function size:0x16C scope:global -ReleaseBehaviors__13PhysicsObject = .text:0x80218234; // type:function size:0x198 scope:global -ReleaseBehavior__13PhysicsObjectRC6UCrc32 = .text:0x802183CC; // type:function size:0x30C scope:global -FindBehavior__13PhysicsObjectRC6UCrc32 = .text:0x802186D8; // type:function size:0x160 scope:global -LoadBehavior__13PhysicsObjectRC6UCrc32T1GQ23Sim5Param = .text:0x80218838; // type:function size:0x1F0 scope:global -Attach__13PhysicsObjectPQ33UTL3COM8IUnknown = .text:0x80218A28; // type:function size:0x108 scope:global -DetachAll__13PhysicsObject = .text:0x80218B30; // type:function size:0x74 scope:global -Detach__13PhysicsObjectPQ33UTL3COM8IUnknown = .text:0x80218BA4; // type:function size:0x8C scope:global -DetachEntity__13PhysicsObject = .text:0x80218C30; // type:function size:0x5C scope:global -AttachEntity__13PhysicsObjectPQ23Sim7IEntity = .text:0x80218C8C; // type:function size:0x60 scope:global -ProcessStimulus__13PhysicsObjectUi = .text:0x80218CEC; // type:function size:0x98 scope:global -GetDropTimer__FRCQ36Attrib3Gen9smackable = .text:0x80218D84; // type:function size:0xB0 scope:local -Simplify__9Smackable = .text:0x80218E34; // type:function size:0x298 scope:global -TrySimplify__9Smackable = .text:0x802190CC; // type:function size:0x70 scope:global -Construct__9SmackableGQ23Sim5Param = .text:0x8021913C; // type:function size:0x3E8 scope:global -__9SmackableRCQ25UMath7Matrix4RCQ36Attrib3Gen9smackablePCQ217CollisionGeometry6BoundsbP6IModelT4T4 = .text:0x80219524; // type:function size:0xC30 scope:global -SetDynamicData__9SmackablePCQ214EventSequencer6SystemP16EventDynamicData = .text:0x8021A154; // type:function size:0x2C scope:global -OnExplosion__9SmackableRCQ25UMath7Vector3T1fP10IExplosion = .text:0x8021A180; // type:function size:0x2D8 scope:global -OnBehaviorChange__9SmackableRC6UCrc32 = .text:0x8021A458; // type:function size:0x224 scope:global -_._9Smackable = .text:0x8021A67C; // type:function size:0x3EC scope:global -DoImpactStimulus__9SmackableUif = .text:0x8021AA68; // type:function size:0x154 scope:global -OnImpact__9SmackableffQ43Sim9Collision4Info13CollisionTypeP8ISimable = .text:0x8021ABBC; // type:function size:0x17C scope:global -OnCollision__9SmackableRCQ33Sim9Collision4Info = .text:0x8021AD38; // type:function size:0x22C scope:global -InView__C9Smackable = .text:0x8021AF64; // type:function size:0x48 scope:global -IsRenderable__C9Smackable = .text:0x8021AFAC; // type:function size:0x18 scope:global -DistanceToView__C9Smackable = .text:0x8021AFC4; // type:function size:0x4C scope:global -Kill__9Smackable = .text:0x8021B010; // type:function size:0xE8 scope:global -Dropout__9Smackable = .text:0x8021B0F8; // type:function size:0xB8 scope:global -ValidateWorld__9Smackable = .text:0x8021B1B0; // type:function size:0xE4 scope:global -ShouldDie__9Smackable = .text:0x8021B294; // type:function size:0xC0 scope:global -CanRetrigger__C9Smackable = .text:0x8021B354; // type:function size:0x88 scope:global -ProcessDeath__9Smackablef = .text:0x8021B3DC; // type:function size:0x1F4 scope:global -ProcessDropout__9Smackablef = .text:0x8021B5D0; // type:function size:0x10C scope:global -ProcessOffWorld__9Smackablef = .text:0x8021B6DC; // type:function size:0xF0 scope:global -OnTask__9SmackableP10HSIMTASK__f = .text:0x8021B7CC; // type:function size:0x38 scope:global -OnDetached__9SmackableP11IAttachable = .text:0x8021B804; // type:function size:0xAC scope:global -CalcSimplificationWeight__9Smackable = .text:0x8021B8B0; // type:function size:0x13C scope:global -Manage__9Smackablef = .text:0x8021B9EC; // type:function size:0x4C scope:global -OnTaskSimulate__9Smackablef = .text:0x8021BA38; // type:function size:0x128 scope:global -__Q29Smackable7Managerf = .text:0x8021BB60; // type:function size:0xAC scope:global -_._Q29Smackable7Manager = .text:0x8021BC0C; // type:function size:0xA4 scope:global -OnTask__Q29Smackable7ManagerP10HSIMTASK__f = .text:0x8021BCB0; // type:function size:0x6C scope:global -Construct__11RBSmackableRC14BehaviorParams = .text:0x8021BD1C; // type:function size:0x104 scope:global -__11RBSmackableRC14BehaviorParamsRC15RBComplexParams = .text:0x8021BE20; // type:function size:0x21C scope:global -ShouldSleep__C11RBSmackable = .text:0x8021C03C; // type:function size:0x44 scope:global -_._11RBSmackable = .text:0x8021C080; // type:function size:0xDC scope:global -OnTaskSimulate__11RBSmackablef = .text:0x8021C15C; // type:function size:0x38 scope:global -CanCollideWith__C11RBSmackableRC9RigidBody = .text:0x8021C194; // type:function size:0x50 scope:global -CanCollideWithGround__C11RBSmackable = .text:0x8021C1E4; // type:function size:0x58 scope:global -CanCollideWithWorld__C11RBSmackable = .text:0x8021C23C; // type:function size:0xE0 scope:global -__5WheelUi = .text:0x8021C31C; // type:function size:0x194 scope:global -UpdateTime__5Wheelf = .text:0x8021C4B0; // type:function size:0x40 scope:global -UpdateSurface__5WheelRC10SimSurface = .text:0x8021C4F0; // type:function size:0x6C scope:global -Reset__5Wheel = .text:0x8021C55C; // type:function size:0x1A4 scope:global -UpdatePosition__5WheelRCQ25UMath7Vector3T1RCQ25UMath7Matrix4T1ffbPC9WColliderf = .text:0x8021C700; // type:function size:0x1D0 scope:global -InitPosition__5WheelRC10IRigidBodyf = .text:0x8021C8D0; // type:function size:0x180 scope:global -__15VehicleBehaviorRC14BehaviorParamsUi = .text:0x8021CA50; // type:function size:0x68 scope:global -InitializeVehicleGlobals__13VehicleSystemv = .text:0x8021CAB8; // type:function size:0x4 scope:local -InitializeGlobals__13VehicleSystemv = .text:0x8021CABC; // type:function size:0x4 scope:local -Init__13VehicleSystemv = .text:0x8021CAC0; // type:function size:0x24 scope:local -Shutdown__13VehicleSystemv = .text:0x8021CAE4; // type:function size:0x4 scope:local -__8BehaviorRC14BehaviorParamsUi = .text:0x8021CAE8; // type:function size:0x140 scope:global -Pause__8Behaviorb = .text:0x8021CC28; // type:function size:0x6C scope:global -__Q217CollisionGeometry10BoundsPackP6bChunk = .text:0x8021CC94; // type:function size:0x3BC scope:global -Find__Q217CollisionGeometry11CollectionsPC6bChunk = .text:0x8021D050; // type:function size:0x2C scope:global -Find__Q217CollisionGeometry11CollectionsG6UCrc32 = .text:0x8021D07C; // type:function size:0x64 scope:global -CreateJoint__17CollisionGeometryPQ217CollisionGeometry10IBoundableG6UCrc32T1T2PQ25UMath7Vector3T5Ui = .text:0x8021D0E0; // type:function size:0xE7C scope:global -GetRoot__CQ217CollisionGeometry10Collection = .text:0x8021DF5C; // type:function size:0x1C scope:global -GetChild__CQ217CollisionGeometry10CollectionPCQ217CollisionGeometry6BoundsG6UCrc32 = .text:0x8021DF78; // type:function size:0x54 scope:global -GetChild__CQ217CollisionGeometry10CollectionPCQ217CollisionGeometry6BoundsUi = .text:0x8021DFCC; // type:function size:0x38 scope:global -GetPointCloud__CQ217CollisionGeometry10CollectionPCQ217CollisionGeometry6Bounds = .text:0x8021E004; // type:function size:0x6C scope:global -GetBounds__CQ217CollisionGeometry10CollectionG6UCrc32 = .text:0x8021E070; // type:function size:0x70 scope:global -Init__Q217CollisionGeometry10Collection = .text:0x8021E0E0; // type:function size:0x280 scope:global -AddTo__CQ217CollisionGeometry10CollectionPQ217CollisionGeometry10IBoundablePCQ217CollisionGeometry6BoundsRC10SimSurfaceb = .text:0x8021E360; // type:function size:0xD0 scope:global -AddNode__CQ217CollisionGeometry10CollectionPQ217CollisionGeometry10IBoundablePCQ217CollisionGeometry6BoundsRC10SimSurfaceb = .text:0x8021E430; // type:function size:0x630 scope:global -Lookup__17CollisionGeometryG6UCrc32 = .text:0x8021EA60; // type:function size:0x34 scope:global -LoaderBounds__FP6bChunk = .text:0x8021EA94; // type:function size:0x84 scope:global -UnloaderBounds__FP6bChunk = .text:0x8021EB18; // type:function size:0xE4 scope:global -FindOrAdd__17SmokeableSectionQi = .text:0x8021EBFC; // type:function size:0x268 scope:global -Find__17SmokeableSectionQi = .text:0x8021EE64; // type:function size:0x50 scope:global -ResetPropTimers__Fv = .text:0x8021EEB4; // type:function size:0x20 scope:global -__14HeirarchyModelG7bHash32PCQ217CollisionGeometry6BoundsG6UCrc32P14HeirarchyModelPCQ26Attrib10CollectionPC14ModelHeirarchyUib = .text:0x8021EED4; // type:function size:0x2F4 scope:global -SetCameraAvoidable__14HeirarchyModelb = .text:0x8021F1C8; // type:function size:0x98 scope:global -OnRemoveOffScreen__14HeirarchyModelf = .text:0x8021F260; // type:function size:0xCC scope:global -OnProcessFrame__14HeirarchyModelf = .text:0x8021F32C; // type:function size:0x64 scope:global -HidePart__14HeirarchyModelRC6UCrc32 = .text:0x8021F390; // type:function size:0x48 scope:global -ShowPart__14HeirarchyModelRC6UCrc32 = .text:0x8021F3D8; // type:function size:0x48 scope:global -IsPartVisible__C14HeirarchyModelRC6UCrc32 = .text:0x8021F420; // type:function size:0x58 scope:global -FindHeirarchyChild__C14HeirarchyModelRC6UCrc32 = .text:0x8021F478; // type:function size:0x78 scope:global -SpawnModel__14HeirarchyModelG6UCrc32N21 = .text:0x8021F4F0; // type:function size:0x150 scope:global -_._14HeirarchyModel = .text:0x8021F640; // type:function size:0x140 scope:global -OnBeginDraw__14HeirarchyModel = .text:0x8021F780; // type:function size:0x6C scope:global -OnEndDraw__14HeirarchyModel = .text:0x8021F7EC; // type:function size:0x54 scope:global -GetTransform__C14HeirarchyModelRQ25UMath7Matrix4 = .text:0x8021F840; // type:function size:0x110 scope:global -GetAngularVelocity__C14HeirarchyModelRQ25UMath7Vector3 = .text:0x8021F950; // type:function size:0xD4 scope:global -RemoveTrigger__14HeirarchyModel = .text:0x8021FA24; // type:function size:0x44 scope:global -DisableTrigger__14HeirarchyModel = .text:0x8021FA68; // type:function size:0x2C scope:global -SetTrigger__14HeirarchyModelRCQ25UMath7Matrix4b = .text:0x8021FA94; // type:function size:0x1A8 scope:global -OnUpdateAvoidable__14HeirarchyModelRQ25UMath7Vector3Rf = .text:0x8021FC3C; // type:function size:0x144 scope:global -PlaceTrigger__14HeirarchyModelRCQ25UMath7Matrix4b = .text:0x8021FD80; // type:function size:0x44 scope:global -OnEndSimulation__14HeirarchyModel = .text:0x8021FDC4; // type:function size:0x18 scope:global -OnBeginSimulation__14HeirarchyModel = .text:0x8021FDDC; // type:function size:0xF0 scope:global -OnDraw__14HeirarchyModelPQ23Sim6Packet = .text:0x8021FECC; // type:function size:0x24 scope:global -__16PlaceableSceneryG7bHash32PCQ217CollisionGeometry6BoundsPCQ26Attrib10CollectionPC14ModelHeirarchy = .text:0x8021FEF0; // type:function size:0xF8 scope:global -ReleaseModel__16PlaceableScenery = .text:0x8021FFE8; // type:function size:0x38 scope:global -Construct__16PlaceableSceneryPCcUi = .text:0x80220020; // type:function size:0x16C scope:global -PickUp__16PlaceableScenery = .text:0x8022018C; // type:function size:0x7C scope:global -Place__16PlaceableSceneryRCQ25UMath7Matrix4b = .text:0x80220208; // type:function size:0x258 scope:global -__18SmackableAvoidableP14HeirarchyModel = .text:0x80220460; // type:function size:0x70 scope:global -OnUpdateAvoidable__18SmackableAvoidableRQ25UMath7Vector3Rf = .text:0x802204D0; // type:function size:0x38 scope:global -__12SceneryModelP16SmokeableSpawnerPCQ217CollisionGeometry6BoundsPCQ26Attrib10Collectionb = .text:0x80220508; // type:function size:0x144 scope:global -_._12SceneryModel = .text:0x8022064C; // type:function size:0x10C scope:global -ShowInstance__12SceneryModelb = .text:0x80220758; // type:function size:0x5C scope:global -OnBeginDraw__12SceneryModel = .text:0x802207B4; // type:function size:0x34 scope:global -HideModel__12SceneryModel = .text:0x802207E8; // type:function size:0x34 scope:global -EndOverride__12SceneryModel = .text:0x8022081C; // type:function size:0x24 scope:global -StartOverride__12SceneryModel = .text:0x80220840; // type:function size:0x24 scope:global -GetTransform__C12SceneryModelRQ25UMath7Matrix4 = .text:0x80220864; // type:function size:0xD4 scope:global -InitScene__12SceneryModel = .text:0x80220938; // type:function size:0x180 scope:global -GetSceneryTransform__C12SceneryModelRQ25UMath7Matrix4 = .text:0x80220AB8; // type:function size:0x1EC scope:global -OnEndSimulation__12SceneryModel = .text:0x80220CA4; // type:function size:0x20 scope:global -Construct__12SceneryModelP16SmokeableSpawnerPCQ26Attrib10Collectionb = .text:0x80220CC4; // type:function size:0x158 scope:global -WakeUp__12SceneryModel = .text:0x80220E1C; // type:function size:0x78 scope:global -RestoreScene__12SceneryModel = .text:0x80220E94; // type:function size:0x20 scope:global -ReleaseModel__12SceneryModel = .text:0x80220EB4; // type:function size:0x58 scope:global -InitSystem__12SceneryModel = .text:0x80220F0C; // type:function size:0x20 scope:global -RestoreSystem__12SceneryModel = .text:0x80220F2C; // type:function size:0x20 scope:global -OnUnload__20SmokeableSpawnerPack = .text:0x80220F4C; // type:function size:0xCC scope:global -EndianSwap__20SmokeableSpawnerPack = .text:0x80221018; // type:function size:0x7C scope:global -OnMoved__20SmokeableSpawnerPack = .text:0x80221094; // type:function size:0x50 scope:global -OnLoad__20SmokeableSpawnerPackUi = .text:0x802210E4; // type:function size:0x184 scope:global -FindAttributes__16SmokeableSpawnerG6UCrc32 = .text:0x80221268; // type:function size:0x2C scope:global -Init__16SmokeableSpawner = .text:0x80221294; // type:function size:0x38 scope:global -EndianSwap__16SmokeableSpawner = .text:0x802212CC; // type:function size:0xD0 scope:global -OnUnload__16SmokeableSpawner = .text:0x8022139C; // type:function size:0x5C scope:global -GetRenderHeirarchy__C16SmokeableSpawner = .text:0x802213F8; // type:function size:0x78 scope:global -GetRenderMesh__C16SmokeableSpawner = .text:0x80221470; // type:function size:0xA4 scope:global -ShowInstance__C16SmokeableSpawner = .text:0x80221514; // type:function size:0x40 scope:global -IsInstanceVisible__C16SmokeableSpawner = .text:0x80221554; // type:function size:0x40 scope:global -HideInstance__C16SmokeableSpawner = .text:0x80221594; // type:function size:0x40 scope:global -OnMoved__16SmokeableSpawner = .text:0x802215D4; // type:function size:0x14 scope:global -OnLoad__16SmokeableSpawnerUib = .text:0x802215E8; // type:function size:0x7C scope:global -Loader__20SmokeableSpawnerPackP6bChunk = .text:0x80221664; // type:function size:0xD4 scope:global -Unloader__20SmokeableSpawnerPackP6bChunk = .text:0x80221738; // type:function size:0x80 scope:global -CreateInstance__17IPlaceableSceneryPCcUi = .text:0x802217B8; // type:function size:0x34 scope:global -FindPartMap__FQ37Physics8Upgrades4Type = .text:0x802217EC; // type:function size:0x4C scope:global -DownGradeInternal__FRQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Type = .text:0x80221838; // type:function size:0x168 scope:local -BlendParts__H1Z8AxlePair_RCQ26Attrib9AttributeT0UifRQ26Attrib9Attribute_v = .text:0x802219A0; // type:function size:0x174 scope:global -ScalePart__H1Z8AxlePair_RQ26Attrib9AttributeUif_v = .text:0x80221B14; // type:function size:0x104 scope:global -__10PUJunkNodeRCQ26Attrib7RefSpecRCQ36Attrib3Gen7junkmanUi = .text:0x80221C18; // type:function size:0x23C scope:global -__10PUPartNodeRCQ26Attrib7RefSpecT1f = .text:0x80221E54; // type:function size:0x2E0 scope:global -GetPercent__Q27Physics8UpgradesRCQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Type = .text:0x80222134; // type:function size:0xA8 scope:global -GetLevel__Q27Physics8UpgradesRCQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Type = .text:0x802221DC; // type:function size:0x90 scope:global -GetPackage__Q27Physics8UpgradesRCQ36Attrib3Gen8pvehicleRQ37Physics8Upgrades7Package = .text:0x8022226C; // type:function size:0x90 scope:global -SetPackage__Q27Physics8UpgradesRQ36Attrib3Gen8pvehicleRCQ37Physics8Upgrades7Package = .text:0x802222FC; // type:function size:0x114 scope:global -GetJunkman__Q27Physics8UpgradesRCQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Type = .text:0x80222410; // type:function size:0x60 scope:global -CanInstallJunkman__Q27Physics8UpgradesRCQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Type = .text:0x80222470; // type:function size:0x14C scope:global -SetJunkman__Q27Physics8UpgradesRQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Type = .text:0x802225BC; // type:function size:0x4C4 scope:global -ApplyPreset__Q27Physics8UpgradesRQ36Attrib3Gen8pvehicleRCQ36Attrib3Gen10presetride = .text:0x80222A80; // type:function size:0x1D8 scope:global -RemovePart__Q27Physics8UpgradesRQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Type = .text:0x80222C58; // type:function size:0x90 scope:global -RemoveJunkman__Q27Physics8UpgradesRQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Type = .text:0x80222CE8; // type:function size:0x9C scope:global -Validate__Q27Physics8UpgradesRCQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Type = .text:0x80222D84; // type:function size:0x144 scope:global -Validate__Q27Physics8UpgradesRCQ36Attrib3Gen8pvehicle = .text:0x80222EC8; // type:function size:0x58 scope:global -GetMaxLevel__Q27Physics8UpgradesRCQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Type = .text:0x80222F20; // type:function size:0x90 scope:global -SetMaximum__Q27Physics8UpgradesRQ36Attrib3Gen8pvehicle = .text:0x80222FB0; // type:function size:0x74 scope:global -UpgradeInternal__FRQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Typeif = .text:0x80223024; // type:function size:0x598 scope:local -SetLevel__Q27Physics8UpgradesRQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Typei = .text:0x802235BC; // type:function size:0x12C scope:global -Clear__Q27Physics8UpgradesRQ36Attrib3Gen8pvehicle = .text:0x802236E8; // type:function size:0x2C scope:global -MatchPerformance__Q27Physics8UpgradesRQ36Attrib3Gen8pvehicleRCQ37Physics4Info11Performance = .text:0x80223714; // type:function size:0x3A0 scope:global -Flush__Q27Physics8Upgradesv = .text:0x80223AB4; // type:function size:0x28 scope:global -AerodynamicDownforce__Q27Physics4InfoRCQ36Attrib3Gen7chassisf = .text:0x80223ADC; // type:function size:0x20 scope:global -EngineInertia__Q27Physics4InfoRCQ36Attrib3Gen6engineb = .text:0x80223AFC; // type:function size:0x40 scope:global -InductionType__Q27Physics4InfoRCQ36Attrib3Gen8pvehicle = .text:0x80223B3C; // type:function size:0x90 scope:global -InductionType__Q27Physics4InfoRCQ36Attrib3Gen9induction = .text:0x80223BCC; // type:function size:0x48 scope:global -HasNos__Q27Physics4InfoRCQ36Attrib3Gen8pvehicle = .text:0x80223C14; // type:function size:0xB4 scope:global -HasRunflatTires__Q27Physics4InfoRCQ36Attrib3Gen8pvehicle = .text:0x80223CC8; // type:function size:0x8 scope:global -NosBoost__Q27Physics4InfoRCQ36Attrib3Gen3nosPCQ27Physics7Tunings = .text:0x80223CD0; // type:function size:0x34 scope:global -NosCapacity__Q27Physics4InfoRCQ36Attrib3Gen3nosPCQ27Physics7Tunings = .text:0x80223D04; // type:function size:0x2C scope:global -InductionRPM__Q27Physics4InfoRCQ36Attrib3Gen6engineRCQ36Attrib3Gen9inductionPCQ27Physics7Tunings = .text:0x80223D30; // type:function size:0x78 scope:global -InductionBoost__Q27Physics4InfoRCQ36Attrib3Gen6engineRCQ36Attrib3Gen9inductionffPCQ27Physics7TuningsPf = .text:0x80223DA8; // type:function size:0x304 scope:global -Torque__Q27Physics4InfoRCQ36Attrib3Gen6enginef = .text:0x802240AC; // type:function size:0x1BC scope:global -WheelDiameter__Q27Physics4InfoRCQ36Attrib3Gen5tiresb = .text:0x80224268; // type:function size:0x58 scope:global -WheelDiameter__Q27Physics4InfoRCQ36Attrib3Gen8pvehicleb = .text:0x802242C0; // type:function size:0xA0 scope:global -MaxInductedPower__Q27Physics4InfoRCQ36Attrib3Gen8pvehiclePCQ27Physics7Tunings = .text:0x80224360; // type:function size:0x238 scope:global -AvgInductedTorque__Q27Physics4InfoRCQ36Attrib3Gen6engineRCQ36Attrib3Gen9inductionRCQ36Attrib3Gen12transmissionbPCQ27Physics7Tunings = .text:0x80224598; // type:function size:0x254 scope:global -MaxInductedTorque__Q27Physics4InfoRCQ36Attrib3Gen6engineRCQ36Attrib3Gen9inductionRfPCQ27Physics7Tunings = .text:0x802247EC; // type:function size:0x1A8 scope:global -MaxInductedTorque__Q27Physics4InfoRCQ36Attrib3Gen8pvehicleRfPCQ27Physics7Tunings = .text:0x80224994; // type:function size:0x110 scope:global -MaxTorque__Q27Physics4InfoRCQ36Attrib3Gen6engineRf = .text:0x80224AA4; // type:function size:0x170 scope:global -Redline__Q27Physics4InfoRCQ36Attrib3Gen6engine = .text:0x80224C14; // type:function size:0xC scope:global -Redline__Q27Physics4InfoRCQ36Attrib3Gen8pvehicle = .text:0x80224C20; // type:function size:0x98 scope:global -ShiftPoints__Q27Physics4InfoRCQ36Attrib3Gen12transmissionRCQ36Attrib3Gen6engineRCQ36Attrib3Gen9inductionPfT4Ui = .text:0x80224CB8; // type:function size:0x338 scope:global -Speedometer__Q27Physics4InfoRCQ36Attrib3Gen12transmissionRCQ36Attrib3Gen6engineRCQ36Attrib3Gen5tiresf6GearIDPCQ27Physics7Tunings = .text:0x80224FF0; // type:function size:0x1A4 scope:global -NumFowardGears__Q27Physics4InfoRCQ36Attrib3Gen12transmission = .text:0x80225194; // type:function size:0x38 scope:global -NumFowardGears__Q27Physics4InfoRCQ36Attrib3Gen8pvehicle = .text:0x802251CC; // type:function size:0x90 scope:global -Fetch__9PerfStatsRCQ36Attrib3Gen8pvehicleP8bVector2Pi = .text:0x8022525C; // type:function size:0x8A4 scope:global -Print__9PerfLevelPCc = .text:0x80225B00; // type:function size:0x4 scope:global -Rate__9PerfLevel = .text:0x80225B04; // type:function size:0x17C scope:global -Analyze__9PerfLevelRCQ36Attrib3Gen8pvehicle = .text:0x80225C80; // type:function size:0x58 scope:global -FindLimits__C15PerformanceMapsfR9PerfStats = .text:0x80225CD8; // type:function size:0x11C scope:global -Init__Q27Physics4Infov = .text:0x80225DF4; // type:function size:0x830 scope:global -HasPerformanceRatings__Q27Physics4InfoRCQ36Attrib3Gen8pvehicle = .text:0x80226624; // type:function size:0xA0 scope:global -ComputeAccelerationTable__Q27Physics4InfoRCQ36Attrib3Gen8pvehicleRfPfi = .text:0x802266C4; // type:function size:0x57C scope:global -EstimatePerformance__Q27Physics4InfoRCQ36Attrib3Gen8pvehicleRQ37Physics4Info11Performance = .text:0x80226C40; // type:function size:0x3BC scope:global -ComputePerformance__Q27Physics4InfoRCQ36Attrib3Gen8pvehicleRQ37Physics4Info11Performance = .text:0x80226FFC; // type:function size:0x128 scope:global -GetStockPerformance__Q27Physics4InfoRCQ36Attrib3Gen8pvehicleRQ37Physics4Info11Performance = .text:0x80227124; // type:function size:0xD0 scope:global -GetMaximumPerformance__Q27Physics4InfoRCQ36Attrib3Gen8pvehicleRQ37Physics4Info11Performance = .text:0x802271F4; // type:function size:0xD0 scope:global -FindPerformanceCandidates__Q27Physics4InfoRCQ37Physics4Info11PerformanceT1RQ33UTL3Stdt4list2ZUiZ10_type_list = .text:0x802272C4; // type:function size:0x124 scope:global -LowerLimit__Q27Physics7TuningsQ37Physics7Tunings4Path = .text:0x802273E8; // type:function size:0x14 scope:global -UpperLimit__Q27Physics7TuningsQ37Physics7Tunings4Path = .text:0x802273FC; // type:function size:0x18 scope:global -find__H2ZPP11IDisposableZP11IDisposable_4_STLX01X01RCX11_X01 = .text:0x80227414; // type:function size:0xB0 scope:global -find__H2ZPP10ISpikeableZP10ISpikeable_4_STLX01X01RCX11_X01 = .text:0x802274C4; // type:function size:0xB0 scope:global -clear__Q24_STLt10_List_base2ZQ28PVehicle8ResourceZQ33UTL3Stdt9Allocator2ZQ28PVehicle8ResourceZ10_type_list = .text:0x80227574; // type:function size:0x78 scope:global -__adjust_heap__H4ZPQ28PVehicle10ManageNodeZiZQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X11X11X21X31_v = .text:0x802275EC; // type:function size:0x20C scope:global -make_heap__H2ZPQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X01X11_v = .text:0x802277F8; // type:function size:0xB8 scope:global -pop_heap__H2ZPQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X01X11_v = .text:0x802278B0; // type:function size:0xCC scope:global -__partial_sort__H3ZPQ28PVehicle10ManageNodeZQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X01X01PX11X21_v = .text:0x8022797C; // type:function size:0x178 scope:global -partial_sort__H2ZPQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X01X01X11_v = .text:0x80227AF4; // type:function size:0x28 scope:global -__unguarded_partition__H3ZPQ28PVehicle10ManageNodeZQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X01X11X21_X01 = .text:0x80227B1C; // type:function size:0x104 scope:global -__introsort_loop__H4ZPQ28PVehicle10ManageNodeZQ28PVehicle10ManageNodeZiZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X01PX11X21X31_v = .text:0x80227C20; // type:function size:0x1AC scope:global -__unguarded_linear_insert__H3ZPQ28PVehicle10ManageNodeZQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X11X21_v = .text:0x80227DCC; // type:function size:0xB4 scope:global -__insertion_sort__H2ZPQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X01X11_v = .text:0x80227E80; // type:function size:0x170 scope:global -__unguarded_insertion_sort_aux__H3ZPQ28PVehicle10ManageNodeZQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X01PX11X21_v = .text:0x80227FF0; // type:function size:0x88 scope:global -__final_insertion_sort__H2ZPQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X01X11_v = .text:0x80228078; // type:function size:0x78 scope:global -sort__H2ZPQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X01X11_v = .text:0x802280F0; // type:function size:0x90 scope:global -find_if__H2ZPQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNode_b_4_STLX01X01X11_X01 = .text:0x80228180; // type:function size:0x134 scope:global -_M_erase__Q24_STLt8_Rb_tree5Z7CarTypeZQ24_STLt4pair2ZC7CarTypeZUiZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC7CarTypeZUiZQ24_STLt4less1Z7CarTypeZQ33UTL3Stdt9Allocator2ZUiZ9_type_mapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZC7CarTypeZUi = .text:0x802282B4; // type:function size:0x68 scope:global -_M_insert__Q24_STLt8_Rb_tree5Z7CarTypeZQ24_STLt4pair2ZC7CarTypeZUiZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC7CarTypeZUiZQ24_STLt4less1Z7CarTypeZQ33UTL3Stdt9Allocator2ZUiZ9_type_mapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZC7CarTypeZUiT1 = .text:0x8022831C; // type:function size:0x13C scope:global -insert_unique__Q24_STLt8_Rb_tree5Z7CarTypeZQ24_STLt4pair2ZC7CarTypeZUiZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC7CarTypeZUiZQ24_STLt4less1Z7CarTypeZQ33UTL3Stdt9Allocator2ZUiZ9_type_mapRCQ24_STLt4pair2ZC7CarTypeZUi = .text:0x80228458; // type:function size:0x118 scope:global -insert_unique__Q24_STLt8_Rb_tree5Z7CarTypeZQ24_STLt4pair2ZC7CarTypeZUiZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC7CarTypeZUiZQ24_STLt4less1Z7CarTypeZQ33UTL3Stdt9Allocator2ZUiZ9_type_mapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZC7CarTypeZUiZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZC7CarTypeZUiRCQ24_STLt4pair2ZC7CarTypeZUi = .text:0x80228570; // type:function size:0x268 scope:global -_M_erase__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32Z6UCrc32ZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32Z6UCrc32ZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2Z6UCrc32Z26_type_ID_PVehicleChangeReqPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZC6UCrc32Z6UCrc32 = .text:0x802287D8; // type:function size:0x68 scope:global -_M_insert__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32Z6UCrc32ZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32Z6UCrc32ZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2Z6UCrc32Z26_type_ID_PVehicleChangeReqPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZC6UCrc32Z6UCrc32T1 = .text:0x80228840; // type:function size:0x13C scope:global -insert_unique__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32Z6UCrc32ZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32Z6UCrc32ZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2Z6UCrc32Z26_type_ID_PVehicleChangeReqRCQ24_STLt4pair2ZC6UCrc32Z6UCrc32 = .text:0x8022897C; // type:function size:0x118 scope:global -insert_unique__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32Z6UCrc32ZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32Z6UCrc32ZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2Z6UCrc32Z26_type_ID_PVehicleChangeReqGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZC6UCrc32Z6UCrc32ZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZC6UCrc32Z6UCrc32RCQ24_STLt4pair2ZC6UCrc32Z6UCrc32 = .text:0x80228A94; // type:function size:0x26C scope:global -find__H2ZQ24_STLt14_List_iterator2ZP8BehaviorZQ24_STLt16_Nonconst_traits1ZP8BehaviorZP8Behavior_4_STLX01X01RCX11_X01 = .text:0x80228D00; // type:function size:0x60 scope:global -find__H2ZPQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_NodeZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Node_4_STLX01X01RCX11_X01 = .text:0x80228D60; // type:function size:0xB0 scope:global -clear__Q24_STLt10_List_base2ZP8BehaviorZQ33UTL3Stdt9Allocator2ZP8BehaviorZ16_type_UContainer = .text:0x80228E10; // type:function size:0x78 scope:global -_M_erase__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP8BehaviorZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP8BehaviorZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP8BehaviorZ20_type_ID_POMechanicsPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCUiZP8Behavior = .text:0x80228E88; // type:function size:0x68 scope:global -clear__Q24_STLt10_List_base2ZP8BehaviorZQ33UTL3Stdt9Allocator2ZP8BehaviorZ20_type_ID_POBehaviors = .text:0x80228EF0; // type:function size:0x78 scope:global -_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP8BehaviorZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP8BehaviorZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP8BehaviorZ20_type_ID_POMechanicsPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZP8BehaviorT1 = .text:0x80228F68; // type:function size:0x13C scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP8BehaviorZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP8BehaviorZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP8BehaviorZ20_type_ID_POMechanicsRCQ24_STLt4pair2ZCUiZP8Behavior = .text:0x802290A4; // type:function size:0x118 scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP8BehaviorZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP8BehaviorZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP8BehaviorZ20_type_ID_POMechanicsGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZP8BehaviorZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZP8BehaviorRCQ24_STLt4pair2ZCUiZP8Behavior = .text:0x802291BC; // type:function size:0x26C scope:global -CreateInstance__Q33UTL3COMt7Factory3ZRC14BehaviorParamsZ8BehaviorZ6UCrc32G6UCrc32RC14BehaviorParams = .text:0x80229428; // type:function size:0x60 scope:global -find__H2ZPP9SmackableZP9Smackable_4_STLX01X01RCX11_X01 = .text:0x80229488; // type:function size:0xB0 scope:global -__adjust_heap__H4ZPP9SmackableZiZP9SmackableZPFPC9SmackablePC9Smackable_b_4_STLX01X11X11X21X31_v = .text:0x80229538; // type:function size:0x118 scope:global -make_heap__H2ZPP9SmackableZPFPC9SmackablePC9Smackable_b_4_STLX01X01X11_v = .text:0x80229650; // type:function size:0x78 scope:global -pop_heap__H2ZPP9SmackableZPFPC9SmackablePC9Smackable_b_4_STLX01X01X11_v = .text:0x802296C8; // type:function size:0x40 scope:global -__partial_sort__H3ZPP9SmackableZP9SmackableZPFPC9SmackablePC9Smackable_b_4_STLX01X01X01PX11X21_v = .text:0x80229708; // type:function size:0xBC scope:global -partial_sort__H2ZPP9SmackableZPFPC9SmackablePC9Smackable_b_4_STLX01X01X01X11_v = .text:0x802297C4; // type:function size:0x28 scope:global -__unguarded_partition__H3ZPP9SmackableZP9SmackableZPFPC9SmackablePC9Smackable_b_4_STLX01X01X11X21_X01 = .text:0x802297EC; // type:function size:0x9C scope:global -__introsort_loop__H4ZPP9SmackableZP9SmackableZiZPFPC9SmackablePC9Smackable_b_4_STLX01X01PX11X21X31_v = .text:0x80229888; // type:function size:0x158 scope:global -__unguarded_linear_insert__H3ZPP9SmackableZP9SmackableZPFPC9SmackablePC9Smackable_b_4_STLX01X11X21_v = .text:0x802299E0; // type:function size:0x60 scope:global -__insertion_sort__H2ZPP9SmackableZPFPC9SmackablePC9Smackable_b_4_STLX01X01X11_v = .text:0x80229A40; // type:function size:0xA4 scope:global -__unguarded_insertion_sort_aux__H3ZPP9SmackableZP9SmackableZPFPC9SmackablePC9Smackable_b_4_STLX01X01PX11X21_v = .text:0x80229AE4; // type:function size:0x54 scope:global -__final_insertion_sort__H2ZPP9SmackableZPFPC9SmackablePC9Smackable_b_4_STLX01X01X11_v = .text:0x80229B38; // type:function size:0x6C scope:global -sort__H2ZPP9SmackableZPFPC9SmackablePC9Smackable_b_4_STLX01X01X11_v = .text:0x80229BA4; // type:function size:0x84 scope:global -__upper_bound__H4ZPQ317CollisionGeometry10BoundsPack4PairZQ317CollisionGeometry10BoundsPack4PairZQ24_STLt4less1ZQ317CollisionGeometry10BoundsPack4PairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80229C28; // type:function size:0x48 scope:global -__lower_bound__H4ZPQ317CollisionGeometry10BoundsPack4PairZQ317CollisionGeometry10BoundsPack4PairZQ24_STLt4less1ZQ317CollisionGeometry10BoundsPack4PairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80229C70; // type:function size:0x48 scope:global -reserve__Q24_STLt6vector2ZQ317CollisionGeometry10BoundsPack4PairZQ33UTL3Stdt9Allocator2ZQ317CollisionGeometry10BoundsPack4PairZ26_type_CollisionBoundsTableUi = .text:0x80229CB8; // type:function size:0x15C scope:global -ScalePart__H1Zf_RQ26Attrib9AttributeUif_v = .text:0x80229E14; // type:function size:0xD0 scope:global -ScalePart__H1Zi_RQ26Attrib9AttributeUif_v = .text:0x80229EE4; // type:function size:0x104 scope:global -BlendParts__H1Zf_RCQ26Attrib9AttributeT0UifRQ26Attrib9Attribute_v = .text:0x80229FE8; // type:function size:0x128 scope:global -BlendParts__H1Zi_RCQ26Attrib9AttributeT0UifRQ26Attrib9Attribute_v = .text:0x8022A110; // type:function size:0x178 scope:global -Get__H1ZQ26Attrib7RefSpec_CQ26Attrib9AttributeUi_RCX01 = .text:0x8022A288; // type:function size:0x50 scope:global -clear__Q24_STLt10_List_base2Z9PerfLevelZQ33UTL3Stdt9Allocator2Z9PerfLevelZ21_type_PerformanceMaps = .text:0x8022A2D8; // type:function size:0x78 scope:global -__static_initialization_and_destruction_0 = .text:0x8022A350; // type:function size:0x1F3C scope:local -_._16PlaceableScenery = .text:0x8022C28C; // type:function size:0xE8 scope:global -_._8ISimable = .text:0x8022C374; // type:function size:0x10C scope:global -_IHandle__Q23Sim7IEntity = .text:0x8022C480; // type:function size:0xC scope:global -_IHandle__17ITriggerableModel = .text:0x8022C48C; // type:function size:0xC scope:global -_._17ITriggerableModel = .text:0x8022C498; // type:function size:0x54 scope:global -push_back__Q23UTLt6Vector2ZP6IModeli16RCP6IModel = .text:0x8022C4EC; // type:function size:0x154 scope:global -_._11IRenderable = .text:0x8022C640; // type:function size:0x54 scope:global -_IHandle__12IExplodeable = .text:0x8022C694; // type:function size:0xC scope:global -_._12IExplodeable = .text:0x8022C6A0; // type:function size:0x54 scope:global -_IHandle__10IExplosion = .text:0x8022C6F4; // type:function size:0xC scope:global -_._10IExplosion = .text:0x8022C700; // type:function size:0x160 scope:global -push_back__Q23UTLt6Vector2ZP10IExplosioni16RCP10IExplosion = .text:0x8022C860; // type:function size:0x154 scope:global -__as__Q36Attrib3Gen8pvehicleRCQ26Attrib8Instance = .text:0x8022C9B4; // type:function size:0x30 scope:global -push_back__Q23UTLt6Vector2ZP12IInputPlayeri16RCP12IInputPlayer = .text:0x8022C9E4; // type:function size:0x154 scope:global -_IHandle__11IRaceEngine = .text:0x8022CB38; // type:function size:0xC scope:global -_._8IVehicle = .text:0x8022CB44; // type:function size:0x180 scope:global -push_back__Q23UTLt6Vector2ZP14ICollisionBodyi16RCP14ICollisionBody = .text:0x8022CCC4; // type:function size:0x154 scope:global -_._5IBody = .text:0x8022CE18; // type:function size:0x54 scope:global -_IHandle__11ISimpleBody = .text:0x8022CE6C; // type:function size:0xC scope:global -push_back__Q23UTLt6Vector2ZP11ISimpleBodyi16RCP11ISimpleBody = .text:0x8022CE78; // type:function size:0x154 scope:global -push_back__Q23UTLt6Vector2ZP10IRigidBodyi16RCP10IRigidBody = .text:0x8022CFCC; // type:function size:0x154 scope:global -_IHandle__11IDisposable = .text:0x8022D120; // type:function size:0xC scope:global -_._11IDisposable = .text:0x8022D12C; // type:function size:0x160 scope:global -push_back__Q23UTLt6Vector2ZP11IDisposablei16RCP11IDisposable = .text:0x8022D28C; // type:function size:0x154 scope:global -_IHandle__17IPlaceableScenery = .text:0x8022D3E0; // type:function size:0xC scope:global -push_back__Q23UTLt6Vector2ZP17IRecordablePlayeri16RCP17IRecordablePlayer = .text:0x8022D3EC; // type:function size:0x154 scope:global -push_back__Q23UTLt6Vector2ZP10ISpikeablei16RCP10ISpikeable = .text:0x8022D540; // type:function size:0x154 scope:global -_IHandle__Q214EventSequencer8IContext = .text:0x8022D694; // type:function size:0xC scope:global -_._Q214EventSequencer8IContext = .text:0x8022D6A0; // type:function size:0x54 scope:global -__Q33UTL3Stdt3map3ZUiZP8BehaviorZ20_type_ID_POMechanics = .text:0x8022D6F4; // type:function size:0x74 scope:global -Reset__13PhysicsObject = .text:0x8022D768; // type:function size:0x24 scope:global -GetEventSequencer__13PhysicsObject = .text:0x8022D78C; // type:function size:0x8 scope:global -GetEntity__C13PhysicsObject = .text:0x8022D794; // type:function size:0x8 scope:global -IsPlayer__C13PhysicsObject = .text:0x8022D79C; // type:function size:0x18 scope:global -GetPlayer__C13PhysicsObject = .text:0x8022D7B4; // type:function size:0x8 scope:global -GetSimableType__C13PhysicsObject = .text:0x8022D7BC; // type:function size:0x8 scope:global -GetAttributes__C13PhysicsObject = .text:0x8022D7C4; // type:function size:0x8 scope:global -IsRigidBodySimple__C13PhysicsObject = .text:0x8022D7CC; // type:function size:0x48 scope:global -IsRigidBodyComplex__C13PhysicsObject = .text:0x8022D814; // type:function size:0x3C scope:global -GetWPos__13PhysicsObject = .text:0x8022D850; // type:function size:0x8 scope:global -GetWPos__C13PhysicsObject = .text:0x8022D858; // type:function size:0x8 scope:global -GetOwnerHandle__C13PhysicsObject = .text:0x8022D860; // type:function size:0x8 scope:global -GetOwner__C13PhysicsObject = .text:0x8022D868; // type:function size:0x58 scope:global -GetRigidBody__13PhysicsObject = .text:0x8022D8C0; // type:function size:0x8 scope:global -GetRigidBody__C13PhysicsObject = .text:0x8022D8C8; // type:function size:0x8 scope:global -GetPosition__C13PhysicsObject = .text:0x8022D8D0; // type:function size:0x4C scope:global -GetWorldID__C13PhysicsObject = .text:0x8022D91C; // type:function size:0x8 scope:global -IsAttached__C13PhysicsObjectPCQ33UTL3COM8IUnknown = .text:0x8022D924; // type:function size:0x34 scope:global -GetAttachments__C13PhysicsObject = .text:0x8022D958; // type:function size:0x18 scope:global -Reset__Q213PhysicsObject9Behaviors = .text:0x8022D970; // type:function size:0x7C scope:global -TypeName__8AIParams = .text:0x8022D9EC; // type:function size:0x64 scope:global -TypeName__15RBComplexParams = .text:0x8022DA50; // type:function size:0x64 scope:global -TypeName__14RBSimpleParams = .text:0x8022DAB4; // type:function size:0x64 scope:global -TypeName__16SuspensionParams = .text:0x8022DB18; // type:function size:0x64 scope:global -TypeName__12EngineParams = .text:0x8022DB7C; // type:function size:0x64 scope:global -TypeName__12DamageParams = .text:0x8022DBE0; // type:function size:0x64 scope:global -_._15VehicleBehavior = .text:0x8022DC44; // type:function size:0x74 scope:global -GetSource__C9Explosion = .text:0x8022DCB8; // type:function size:0x8 scope:global -GetExpansionSpeed__C9Explosion = .text:0x8022DCC0; // type:function size:0x8 scope:global -GetMaximumRadius__C9Explosion = .text:0x8022DCC8; // type:function size:0x8 scope:global -GetOrigin__C9Explosion = .text:0x8022DCD0; // type:function size:0x4C scope:global -HasDamage__C9Explosion = .text:0x8022DD1C; // type:function size:0x8 scope:global -GetTargets__C9Explosion = .text:0x8022DD24; // type:function size:0x8 scope:global -SetCausality__9ExplosionP8HCAUSE__f = .text:0x8022DD2C; // type:function size:0xC scope:global -GetCausality__C9Explosion = .text:0x8022DD38; // type:function size:0x8 scope:global -GetCausalityTime__C9Explosion = .text:0x8022DD40; // type:function size:0x8 scope:global -GetModel__9Explosion = .text:0x8022DD48; // type:function size:0x8 scope:global -GetModel__C9Explosion = .text:0x8022DD50; // type:function size:0x8 scope:global -_IHandle__8IEffects = .text:0x8022DD58; // type:function size:0xC scope:global -_._Q29WorldConn13Pkt_Body_Open = .text:0x8022DD64; // type:function size:0x34 scope:global -ConnectionClass__Q29WorldConn13Pkt_Body_Open = .text:0x8022DD98; // type:function size:0x64 scope:global -Size__Q29WorldConn13Pkt_Body_Open = .text:0x8022DDFC; // type:function size:0x8 scope:global -Type__Q29WorldConn13Pkt_Body_Open = .text:0x8022DE04; // type:function size:0x20 scope:global -_._Q28PVehicle14ManagementList = .text:0x8022DE24; // type:function size:0xB4 scope:global -__Q33UTL3Stdt3map3Z6UCrc32Z6UCrc32Z26_type_ID_PVehicleChangeReq = .text:0x8022DED8; // type:function size:0x74 scope:global -sort_remove_resources__Q28PVehicle10ManageNodeRCQ28PVehicle10ManageNodeT1 = .text:0x8022DF4C; // type:function size:0x50 scope:global -sort_remove_instances__Q28PVehicle10ManageNodeRCQ28PVehicle10ManageNodeT1 = .text:0x8022DF9C; // type:function size:0x50 scope:global -sort_by_keep__Q28PVehicle10ManageNodeRCQ28PVehicle10ManageNodeT1 = .text:0x8022DFEC; // type:function size:0x44 scope:global -is_kept__Q28PVehicle10ManageNodeRCQ28PVehicle10ManageNode = .text:0x8022E030; // type:function size:0x10 scope:global -GetPosition__C8PVehicle = .text:0x8022E040; // type:function size:0x4C scope:global -GetSimable__C8PVehicle = .text:0x8022E08C; // type:function size:0x8 scope:global -GetSimable__8PVehicle = .text:0x8022E094; // type:function size:0x8 scope:global -GetVehicleAttributes__C8PVehicle = .text:0x8022E09C; // type:function size:0x8 scope:global -GetVehicleClass__C8PVehicle = .text:0x8022E0A4; // type:function size:0x8 scope:global -GetVehicleName__C8PVehicle = .text:0x8022E0AC; // type:function size:0xC scope:global -GetVehicleKey__C8PVehicle = .text:0x8022E0B8; // type:function size:0x24 scope:global -GetDriverClass__C8PVehicle = .text:0x8022E0DC; // type:function size:0x8 scope:global -GetDriverStyle__C8PVehicle = .text:0x8022E0E4; // type:function size:0x8 scope:global -GetForceStop__8PVehicle = .text:0x8022E0EC; // type:function size:0xC scope:global -IsOffWorld__C8PVehicle = .text:0x8022E0F8; // type:function size:0x8 scope:global -GetModelType__C8PVehicle = .text:0x8022E100; // type:function size:0x8 scope:global -IsSpooled__C8PVehicle = .text:0x8022E108; // type:function size:0xC scope:global -IsStaging__C8PVehicle = .text:0x8022E114; // type:function size:0x8 scope:global -GetOffscreenTime__C8PVehicle = .text:0x8022E11C; // type:function size:0x8 scope:global -GetOnScreenTime__C8PVehicle = .text:0x8022E124; // type:function size:0x8 scope:global -InShock__C8PVehicle = .text:0x8022E12C; // type:function size:0x5C scope:global -IsDestroyed__C8PVehicle = .text:0x8022E188; // type:function size:0x48 scope:global -GetAbsoluteSpeed__C8PVehicle = .text:0x8022E1D0; // type:function size:0x8 scope:global -GetSpeedometer__C8PVehicle = .text:0x8022E1D8; // type:function size:0x8 scope:global -GetSpeed__C8PVehicle = .text:0x8022E1E0; // type:function size:0x8 scope:global -IsGlareOn__8PVehicleQ29VehicleFX2ID = .text:0x8022E1E8; // type:function size:0x18 scope:global -IsCollidingWithSoftBarrier__8PVehicle = .text:0x8022E200; // type:function size:0x8 scope:global -IsAnimating__C8PVehicle = .text:0x8022E208; // type:function size:0x8 scope:global -IsActive__C8PVehicle = .text:0x8022E210; // type:function size:0x18 scope:global -GetPhysicsMode__C8PVehicle = .text:0x8022E228; // type:function size:0x8 scope:global -GetCacheName__C8PVehicle = .text:0x8022E230; // type:function size:0x8 scope:global -GetAIVehiclePtr__C8PVehicle = .text:0x8022E238; // type:function size:0x8 scope:global -GetSlipAngle__C8PVehicle = .text:0x8022E240; // type:function size:0x8 scope:global -GetLocalVelocity__C8PVehicle = .text:0x8022E248; // type:function size:0x8 scope:global -GetCustomizations__C8PVehicle = .text:0x8022E250; // type:function size:0x8 scope:global -GetPerformance__C8PVehicleRQ37Physics4Info11Performance = .text:0x8022E258; // type:function size:0x24 scope:global -GetEventSequencer__8PVehicle = .text:0x8022E27C; // type:function size:0x8 scope:global -GetModel__8PVehicle = .text:0x8022E284; // type:function size:0x48 scope:global -GetModel__C8PVehicle = .text:0x8022E2CC; // type:function size:0x48 scope:global -push_back__Q23UTLt6Vector2ZP8IVehiclei16RCP8IVehicle = .text:0x8022E314; // type:function size:0x154 scope:global -_._Q23UTLt6Vector2ZQ28PVehicle10ManageNodei16 = .text:0x8022E468; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZQ28PVehicle10ManageNodei10i16 = .text:0x8022E49C; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZQ28PVehicle10ManageNodei16Ui = .text:0x8022E550; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt6Vector2ZQ28PVehicle10ManageNodei16Ui = .text:0x8022E554; // type:function size:0x20 scope:global -reserve__Q23UTLt6Vector2ZQ28PVehicle10ManageNodei16Ui = .text:0x8022E574; // type:function size:0x174 scope:global -__Q33UTL3Stdt3map3Z7CarTypeZUiZ9_type_map = .text:0x8022E6E8; // type:function size:0x74 scope:global -push_back__Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei16RCQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Node = .text:0x8022E75C; // type:function size:0x158 scope:global -ClassKey__Q36Attrib3Gen9smackable = .text:0x8022E8B4; // type:function size:0xC scope:global -ClassKey__Q36Attrib3Gen14rigidbodyspecs = .text:0x8022E8C0; // type:function size:0xC scope:global -_._t16BehaviorSpecsPtr1ZQ36Attrib3Gen14rigidbodyspecs = .text:0x8022E8CC; // type:function size:0x7C scope:global -SimplifySort__9SmackablePC9SmackableT1 = .text:0x8022E948; // type:function size:0x40 scope:global -IsRequired__C9Smackable = .text:0x8022E988; // type:function size:0x8 scope:global -HidePart__9SmackableRC6UCrc32 = .text:0x8022E990; // type:function size:0x4 scope:global -ShowPart__9SmackableRC6UCrc32 = .text:0x8022E994; // type:function size:0x4 scope:global -IsPartVisible__C9SmackableRC6UCrc32 = .text:0x8022E998; // type:function size:0x8 scope:global -GetModelHandle__C9Smackable = .text:0x8022E9A0; // type:function size:0x18 scope:global -GetModel__C9Smackable = .text:0x8022E9B8; // type:function size:0x8 scope:global -GetModel__9Smackable = .text:0x8022E9C0; // type:function size:0x8 scope:global -GetEventSequencer__9Smackable = .text:0x8022E9C8; // type:function size:0x48 scope:global -push_back__Q23UTLt6Vector2ZP9Smackablei16RCP9Smackable = .text:0x8022EA10; // type:function size:0x154 scope:global -Find__Q317CollisionGeometry10BoundsPack5TableG6UCrc32 = .text:0x8022EB64; // type:function size:0x84 scope:global -_._Q210RenderConn18Pkt_Smackable_Open = .text:0x8022EBE8; // type:function size:0x34 scope:global -ConnectionClass__Q210RenderConn18Pkt_Smackable_Open = .text:0x8022EC1C; // type:function size:0x64 scope:global -Size__Q210RenderConn18Pkt_Smackable_Open = .text:0x8022EC80; // type:function size:0x8 scope:global -Type__Q210RenderConn18Pkt_Smackable_Open = .text:0x8022EC88; // type:function size:0x20 scope:global -_._18SmackableAvoidable = .text:0x8022ECA8; // type:function size:0x5C scope:global -GetDimension__C14HeirarchyModelRQ25UMath7Vector3 = .text:0x8022ED04; // type:function size:0xCC scope:global -GetAttributes__C14HeirarchyModel = .text:0x8022EDD0; // type:function size:0x8 scope:global -GetWorldID__C14HeirarchyModel = .text:0x8022EDD8; // type:function size:0x20 scope:global -GetLinearVelocity__C14HeirarchyModelRQ25UMath7Vector3 = .text:0x8022EDF8; // type:function size:0x20 scope:global -Destroy__16PlaceableScenery = .text:0x8022EE18; // type:function size:0x20 scope:global -OnRemoveOffScreen__16PlaceableSceneryf = .text:0x8022EE38; // type:function size:0x8 scope:global -IsHidden__C12SceneryModel = .text:0x8022EE40; // type:function size:0x48 scope:global -IsExcluded__C12SceneryModelUi = .text:0x8022EE88; // type:function size:0x28 scope:global -GetSpawnerID__C12SceneryModel = .text:0x8022EEB0; // type:function size:0x18 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZQ28PVehicle10ManageNodei10i16UiUi = .text:0x8022EEC8; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZQ28PVehicle10ManageNodei10i16PQ28PVehicle10ManageNodeUi = .text:0x8022EED0; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZQ28PVehicle10ManageNodei10i16Ui = .text:0x8022EED4; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZQ28PVehicle10ManageNodei10i16 = .text:0x8022EEDC; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZQ28PVehicle10ManageNodei16 = .text:0x8022EEE4; // type:function size:0xC scope:global -reserve__Q23UTLt6Vector2ZPQ23Sim7IEntityi16Ui = .text:0x8022EEF0; // type:function size:0x14C scope:global -reserve__Q23UTLt6Vector2ZP7IPlayeri16Ui = .text:0x8022F03C; // type:function size:0x14C scope:global -_._Q43UTL11Collectionst12Instanceable3ZP10HSIMABLE__Z8ISimablei160_5_List = .text:0x8022F188; // type:function size:0xB4 scope:global -_._Q43UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3_4List = .text:0x8022F23C; // type:function size:0xB4 scope:global -_._Q43UTL11Collectionst11ListableSet4ZQ23Sim7IEntityi8Z11eEntityListUi4_4List = .text:0x8022F2F0; // type:function size:0xB4 scope:global -_._Q43UTL11Collectionst12Instanceable3ZP11HACTIVITY__ZQ23Sim9IActivityi40_5_List = .text:0x8022F3A4; // type:function size:0xB4 scope:global -_._Q43UTL11Collectionst12Instanceable3ZP8HMODEL__Z6IModeli434_5_List = .text:0x8022F458; // type:function size:0xB4 scope:global -_._Q43UTL11Collectionst8Listable2Z6IModeli434_4List = .text:0x8022F50C; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP6IModeli16Ui = .text:0x8022F5C0; // type:function size:0x4 scope:global -_._Q43UTL11Collectionst8Listable2Z10IExplosioni96_4List = .text:0x8022F5C4; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP10IExplosioni16Ui = .text:0x8022F678; // type:function size:0x4 scope:global -_._Q43UTL11Collectionst8Listable2Z12IInputPlayeri8_4List = .text:0x8022F67C; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP12IInputPlayeri16Ui = .text:0x8022F730; // type:function size:0x4 scope:global -_._Q43UTL11Collectionst8Listable2Z13IVehicleCachei18_4List = .text:0x8022F734; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP13IVehicleCachei16Ui = .text:0x8022F7E8; // type:function size:0x4 scope:global -_._Q43UTL11Collectionst8Listable2Z14ICollisionBodyi160_4List = .text:0x8022F7EC; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP14ICollisionBodyi16Ui = .text:0x8022F8A0; // type:function size:0x4 scope:global -_._Q43UTL11Collectionst8Listable2Z11ISimpleBodyi96_4List = .text:0x8022F8A4; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP11ISimpleBodyi16Ui = .text:0x8022F958; // type:function size:0x4 scope:global -_._Q43UTL11Collectionst8Listable2Z10IRigidBodyi160_4List = .text:0x8022F95C; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP10IRigidBodyi16Ui = .text:0x8022FA10; // type:function size:0x4 scope:global -_._Q43UTL11Collectionst12Instanceable3ZP8HCAUSE__Z6ICausei10_5_List = .text:0x8022FA14; // type:function size:0xB4 scope:global -_._Q43UTL11Collectionst8Listable2Z8IPursuiti8_4List = .text:0x8022FAC8; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP8IPursuiti16Ui = .text:0x8022FB7C; // type:function size:0x4 scope:global -_._Q43UTL11Collectionst8Listable2Z10IRoadBlocki8_4List = .text:0x8022FB80; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP10IRoadBlocki16Ui = .text:0x8022FC34; // type:function size:0x4 scope:global -_._Q43UTL11Collectionst8Listable2Z14ITrafficCenteri8_4List = .text:0x8022FC38; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP14ITrafficCenteri16Ui = .text:0x8022FCEC; // type:function size:0x4 scope:global -_._Q43UTL11Collectionst8Listable2Z11IDisposablei160_4List = .text:0x8022FCF0; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP11IDisposablei16Ui = .text:0x8022FDA4; // type:function size:0x4 scope:global -_._17IPlaceableScenery = .text:0x8022FDA8; // type:function size:0x70 scope:global -_._Q43UTL11Collectionst8Listable2Z17IRecordablePlayeri8_4List = .text:0x8022FE18; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP17IRecordablePlayeri16Ui = .text:0x8022FECC; // type:function size:0x4 scope:global -_._Q43UTL11Collectionst8Listable2Z10ISpikeablei10_4List = .text:0x8022FED0; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP10ISpikeablei16Ui = .text:0x8022FF84; // type:function size:0x4 scope:global -_._Q43UTL11Collectionst8Listable2Z4IHudi2_4List = .text:0x8022FF88; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP4IHudi16Ui = .text:0x8023003C; // type:function size:0x4 scope:global -_._Q33UTL11Collectionst8_Storage2ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei160 = .text:0x80230040; // type:function size:0xB4 scope:global -SType__Q29WorldConn13Pkt_Body_Open = .text:0x802300F4; // type:function size:0x58 scope:global -OnGrowRequest__Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei16Ui = .text:0x8023014C; // type:function size:0x4 scope:global -_._Q43UTL11Collectionst8Listable2Z9Smackablei160_4List = .text:0x80230150; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP9Smackablei16Ui = .text:0x80230204; // type:function size:0x4 scope:global -SType__Q210RenderConn18Pkt_Smackable_Open = .text:0x80230208; // type:function size:0x58 scope:global -OnGrowRequest__Q23UTLt6Vector2ZPQ23Sim7IEntityi16Ui = .text:0x80230260; // type:function size:0x4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP7IPlayeri16Ui = .text:0x80230264; // type:function size:0x4 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP9Smackablei160i16UiUi = .text:0x80230268; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP9Smackablei160i16PP9SmackableUi = .text:0x80230270; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP9Smackablei160i16Ui = .text:0x80230274; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP9Smackablei160i16 = .text:0x8023027C; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei160i16UiUi = .text:0x80230284; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei160i16PQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_NodeUi = .text:0x8023028C; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei160i16Ui = .text:0x80230290; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei160i16 = .text:0x80230298; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP4IHudi2i16UiUi = .text:0x802302A0; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP4IHudi2i16PP4IHudUi = .text:0x802302A8; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP4IHudi2i16Ui = .text:0x802302AC; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP4IHudi2i16 = .text:0x802302B4; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP10ISpikeablei10i16UiUi = .text:0x802302BC; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP10ISpikeablei10i16PP10ISpikeableUi = .text:0x802302C4; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP10ISpikeablei10i16Ui = .text:0x802302C8; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP10ISpikeablei10i16 = .text:0x802302D0; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP17IRecordablePlayeri8i16UiUi = .text:0x802302D8; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP17IRecordablePlayeri8i16PP17IRecordablePlayerUi = .text:0x802302E0; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP17IRecordablePlayeri8i16Ui = .text:0x802302E4; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP17IRecordablePlayeri8i16 = .text:0x802302EC; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP11IDisposablei160i16UiUi = .text:0x802302F4; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP11IDisposablei160i16PP11IDisposableUi = .text:0x802302FC; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP11IDisposablei160i16Ui = .text:0x80230300; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP11IDisposablei160i16 = .text:0x80230308; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP14ITrafficCenteri8i16UiUi = .text:0x80230310; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP14ITrafficCenteri8i16PP14ITrafficCenterUi = .text:0x80230318; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP14ITrafficCenteri8i16Ui = .text:0x8023031C; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP14ITrafficCenteri8i16 = .text:0x80230324; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP10IRoadBlocki8i16UiUi = .text:0x8023032C; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP10IRoadBlocki8i16PP10IRoadBlockUi = .text:0x80230334; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP10IRoadBlocki8i16Ui = .text:0x80230338; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP10IRoadBlocki8i16 = .text:0x80230340; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP8IPursuiti8i16UiUi = .text:0x80230348; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP8IPursuiti8i16PP8IPursuitUi = .text:0x80230350; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP8IPursuiti8i16Ui = .text:0x80230354; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP8IPursuiti8i16 = .text:0x8023035C; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei10i16UiUi = .text:0x80230364; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei10i16PQ33UTL11Collections10_KeyedNodeUi = .text:0x8023036C; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei10i16Ui = .text:0x80230370; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei10i16 = .text:0x80230378; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP10IRigidBodyi160i16UiUi = .text:0x80230380; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP10IRigidBodyi160i16PP10IRigidBodyUi = .text:0x80230388; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP10IRigidBodyi160i16Ui = .text:0x8023038C; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP10IRigidBodyi160i16 = .text:0x80230394; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP11ISimpleBodyi96i16UiUi = .text:0x8023039C; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP11ISimpleBodyi96i16PP11ISimpleBodyUi = .text:0x802303A4; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP11ISimpleBodyi96i16Ui = .text:0x802303A8; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP11ISimpleBodyi96i16 = .text:0x802303B0; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP14ICollisionBodyi160i16UiUi = .text:0x802303B8; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP14ICollisionBodyi160i16PP14ICollisionBodyUi = .text:0x802303C0; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP14ICollisionBodyi160i16Ui = .text:0x802303C4; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP14ICollisionBodyi160i16 = .text:0x802303CC; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP13IVehicleCachei18i16UiUi = .text:0x802303D4; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP13IVehicleCachei18i16PP13IVehicleCacheUi = .text:0x802303DC; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP13IVehicleCachei18i16Ui = .text:0x802303E0; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP13IVehicleCachei18i16 = .text:0x802303E8; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP12IInputPlayeri8i16UiUi = .text:0x802303F0; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP12IInputPlayeri8i16PP12IInputPlayerUi = .text:0x802303F8; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP12IInputPlayeri8i16Ui = .text:0x802303FC; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP12IInputPlayeri8i16 = .text:0x80230404; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP10IExplosioni96i16UiUi = .text:0x8023040C; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP10IExplosioni96i16PP10IExplosionUi = .text:0x80230414; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP10IExplosioni96i16Ui = .text:0x80230418; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP10IExplosioni96i16 = .text:0x80230420; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP6IModeli434i16UiUi = .text:0x80230428; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP6IModeli434i16PP6IModelUi = .text:0x80230430; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP6IModeli434i16Ui = .text:0x80230434; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP6IModeli434i16 = .text:0x8023043C; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei40i16UiUi = .text:0x80230444; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei40i16PQ33UTL11Collections10_KeyedNodeUi = .text:0x8023044C; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei40i16Ui = .text:0x80230450; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei40i16 = .text:0x80230458; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZPQ23Sim7IEntityi8i16UiUi = .text:0x80230460; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZPQ23Sim7IEntityi8i16PPQ23Sim7IEntityUi = .text:0x80230468; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZPQ23Sim7IEntityi8i16Ui = .text:0x8023046C; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZPQ23Sim7IEntityi8i16 = .text:0x80230474; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP7IPlayeri8i16UiUi = .text:0x8023047C; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP7IPlayeri8i16PP7IPlayerUi = .text:0x80230484; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP7IPlayeri8i16Ui = .text:0x80230488; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP7IPlayeri8i16 = .text:0x80230490; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei160i16UiUi = .text:0x80230498; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei160i16PQ33UTL11Collections10_KeyedNodeUi = .text:0x802304A0; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei160i16Ui = .text:0x802304A4; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei160i16 = .text:0x802304AC; // type:function size:0x8 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP6IModeli16Ui = .text:0x802304B4; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP10IExplosioni16Ui = .text:0x802304D4; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP12IInputPlayeri16Ui = .text:0x802304F4; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP13IVehicleCachei16Ui = .text:0x80230514; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP14ICollisionBodyi16Ui = .text:0x80230534; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP11ISimpleBodyi16Ui = .text:0x80230554; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP10IRigidBodyi16Ui = .text:0x80230574; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP8IPursuiti16Ui = .text:0x80230594; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP10IRoadBlocki16Ui = .text:0x802305B4; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP14ITrafficCenteri16Ui = .text:0x802305D4; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP11IDisposablei16Ui = .text:0x802305F4; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP17IRecordablePlayeri16Ui = .text:0x80230614; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP10ISpikeablei16Ui = .text:0x80230634; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP4IHudi16Ui = .text:0x80230654; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei16Ui = .text:0x80230674; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP9Smackablei16Ui = .text:0x80230694; // type:function size:0x20 scope:global -_._Q23UTLt6Vector2ZP10IExplosioni16 = .text:0x802306B4; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP10IExplosioni96i16 = .text:0x802306E8; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2ZP11IDisposablei16 = .text:0x8023079C; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP11IDisposablei160i16 = .text:0x802307D0; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2ZP10IRigidBodyi16 = .text:0x80230884; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP10IRigidBodyi160i16 = .text:0x802308B8; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2ZP14ICollisionBodyi16 = .text:0x8023096C; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP14ICollisionBodyi160i16 = .text:0x802309A0; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2ZP11ISimpleBodyi16 = .text:0x80230A54; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP11ISimpleBodyi96i16 = .text:0x80230A88; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2ZPQ23Sim7IEntityi16 = .text:0x80230B3C; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZPQ23Sim7IEntityi8i16 = .text:0x80230B70; // type:function size:0xB4 scope:global -GetGrowSize__CQ23UTLt6Vector2ZPQ23Sim7IEntityi16Ui = .text:0x80230C24; // type:function size:0x20 scope:global -_._Q23UTLt6Vector2ZP7IPlayeri16 = .text:0x80230C44; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP7IPlayeri8i16 = .text:0x80230C78; // type:function size:0xB4 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP7IPlayeri16Ui = .text:0x80230D2C; // type:function size:0x20 scope:global -_._Q23UTLt6Vector2ZP17IRecordablePlayeri16 = .text:0x80230D4C; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP17IRecordablePlayeri8i16 = .text:0x80230D80; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2ZP12IInputPlayeri16 = .text:0x80230E34; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP12IInputPlayeri8i16 = .text:0x80230E68; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2ZP6IModeli16 = .text:0x80230F1C; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP6IModeli434i16 = .text:0x80230F50; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2ZP8IPursuiti16 = .text:0x80231004; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP8IPursuiti8i16 = .text:0x80231038; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2ZP10IRoadBlocki16 = .text:0x802310EC; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP10IRoadBlocki8i16 = .text:0x80231120; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2ZP4IHudi16 = .text:0x802311D4; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP4IHudi2i16 = .text:0x80231208; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2ZP13IVehicleCachei16 = .text:0x802312BC; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP13IVehicleCachei18i16 = .text:0x802312F0; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2ZP14ITrafficCenteri16 = .text:0x802313A4; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP14ITrafficCenteri8i16 = .text:0x802313D8; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2ZP10ISpikeablei16 = .text:0x8023148C; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP10ISpikeablei10i16 = .text:0x802314C0; // type:function size:0xB4 scope:global -_._Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei160i16 = .text:0x80231574; // type:function size:0xB4 scope:global -_._Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei40i16 = .text:0x80231628; // type:function size:0xB4 scope:global -_._Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei10i16 = .text:0x802316DC; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei16 = .text:0x80231790; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei160i16 = .text:0x802317C4; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2ZP9Smackablei16 = .text:0x80231878; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP9Smackablei160i16 = .text:0x802318AC; // type:function size:0xB4 scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP9Smackablei16 = .text:0x80231960; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei16 = .text:0x8023196C; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP4IHudi16 = .text:0x80231978; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP10ISpikeablei16 = .text:0x80231984; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP17IRecordablePlayeri16 = .text:0x80231990; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP11IDisposablei16 = .text:0x8023199C; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP14ITrafficCenteri16 = .text:0x802319A8; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP10IRoadBlocki16 = .text:0x802319B4; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP8IPursuiti16 = .text:0x802319C0; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP10IRigidBodyi16 = .text:0x802319CC; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP11ISimpleBodyi16 = .text:0x802319D8; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP14ICollisionBodyi16 = .text:0x802319E4; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP13IVehicleCachei16 = .text:0x802319F0; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP12IInputPlayeri16 = .text:0x802319FC; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP10IExplosioni16 = .text:0x80231A08; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP6IModeli16 = .text:0x80231A14; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZPQ23Sim7IEntityi16 = .text:0x80231A20; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP7IPlayeri16 = .text:0x80231A2C; // type:function size:0xC scope:global -_GLOBAL_.I.__16SmackableTriggerP8HMODEL__bRCQ25UMath7Matrix4RCQ25UMath7Vector3Ui = .text:0x80231A38; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x80231A64; // type:label scope:local -Construct__9RigidBodyRC14BehaviorParams = .text:0x80231A64; // type:function size:0x104 scope:global -__Q29RigidBody8Volatile = .text:0x80231B68; // type:function size:0x18 scope:global -__Q29RigidBody4MeshRC10SimSurfacePCQ25UMath7Vector4UiG6UCrc32b = .text:0x80231B80; // type:function size:0xA0 scope:global -_._Q29RigidBody4Mesh = .text:0x80231C20; // type:function size:0x80 scope:global -Enable__Q29RigidBody4Meshb = .text:0x80231CA0; // type:function size:0x28 scope:global -Create__Q29RigidBody8MeshListRC10SimSurfacePCQ25UMath7Vector4UiG6UCrc32b = .text:0x80231CC8; // type:function size:0xA4 scope:global -Create__Q29RigidBody8PrimListRCQ25UMath7Vector3T1RC10SimSurfaceQ48Dynamics9Collision8Geometry5ShapeRCQ25UMath7Vector4UiRC6UCrc32 = .text:0x80231D6C; // type:function size:0x180 scope:global -Enable__Q29RigidBody9Primitiveb = .text:0x80231EEC; // type:function size:0x28 scope:global -Prepare__Q29RigidBody9PrimitiveRCQ29RigidBody8Volatile = .text:0x80231F14; // type:function size:0x4C scope:global -SetCollision__CQ29RigidBody9PrimitiveRCQ29RigidBody8VolatileRQ38Dynamics9Collision8Geometry = .text:0x80231F60; // type:function size:0x230 scope:global -InitRigidBodySystem__9RigidBody = .text:0x80232190; // type:function size:0x4 scope:global -ShutdownRigidBodySystem__9RigidBody = .text:0x80232194; // type:function size:0x4 scope:global -Add__6RBGridUiR9RigidBodyRCQ25UMath7Vector3f = .text:0x80232198; // type:function size:0x5D0 scope:global -Remove__6RBGridP6RBGrid = .text:0x80232768; // type:function size:0x2C scope:global -__9RigidBodyRC14BehaviorParamsRC15RBComplexParams = .text:0x80232794; // type:function size:0xB40 scope:global -_._9RigidBody = .text:0x802332D4; // type:function size:0x4E4 scope:global -Reset__9RigidBody = .text:0x802337B8; // type:function size:0x38 scope:global -SetOrientation__9RigidBodyRCQ25UMath7Matrix4 = .text:0x802337F0; // type:function size:0x43C scope:global -SetOrientation__9RigidBodyRCQ25UMath7Vector4 = .text:0x80233C2C; // type:function size:0x498 scope:global -DistributeMass__9RigidBody = .text:0x802340C4; // type:function size:0xEC scope:global -EnableCollisionGeometries__9RigidBodyG6UCrc32b = .text:0x802341B0; // type:function size:0xB0 scope:global -SetPosition__9RigidBodyRCQ25UMath7Vector3 = .text:0x80234260; // type:function size:0x28 scope:global -SetLinearVelocity__9RigidBodyRCQ25UMath7Vector3 = .text:0x80234288; // type:function size:0x28 scope:global -SetAngularVelocity__9RigidBodyRCQ25UMath7Vector3 = .text:0x802342B0; // type:function size:0x28 scope:global -SetRadius__9RigidBodyf = .text:0x802342D8; // type:function size:0x10 scope:global -AttachedToWorld__9RigidBodybf = .text:0x802342E8; // type:function size:0x38 scope:global -Detach__9RigidBody = .text:0x80234320; // type:function size:0xBC scope:global -SetInertiaTensor__9RigidBodyRCQ25UMath7Vector3 = .text:0x802343DC; // type:function size:0x24 scope:global -SetMass__9RigidBodyf = .text:0x80234400; // type:function size:0x6C scope:global -AddCollisionPrimitive__9RigidBodyG6UCrc32RCQ25UMath7Vector3fT2RC10SimSurfaceRCQ25UMath7Vector4Q217CollisionGeometry10BoundFlags = .text:0x8023446C; // type:function size:0xB8 scope:global -AddCollisionMesh__9RigidBodyG6UCrc32PCQ25UMath7Vector4UiRC10SimSurfaceQ217CollisionGeometry10BoundFlagsb = .text:0x80234524; // type:function size:0x38 scope:global -CreateGeometries__9RigidBody = .text:0x8023455C; // type:function size:0x16C scope:global -PlaceObject__9RigidBodyRCQ25UMath7Matrix4RCQ25UMath7Vector3 = .text:0x802346C8; // type:function size:0xFC scope:global -GetOrientToGround__C9RigidBody = .text:0x802347C4; // type:function size:0x30 scope:global -GetPointVelocity__C9RigidBodyRCQ25UMath7Vector3RQ25UMath7Vector3 = .text:0x802347F4; // type:function size:0x88 scope:global -OnEndFrame__9RigidBodyf = .text:0x8023487C; // type:function size:0xE8 scope:global -DisableTriggering__9RigidBody = .text:0x80234964; // type:function size:0x18 scope:global -IsTriggering__C9RigidBody = .text:0x8023497C; // type:function size:0x24 scope:global -EnableTriggering__9RigidBody = .text:0x802349A0; // type:function size:0x18 scope:global -DisableModeling__9RigidBody = .text:0x802349B8; // type:function size:0x14 scope:global -EnableModeling__9RigidBody = .text:0x802349CC; // type:function size:0x78 scope:global -OnBeginFrame__9RigidBodyf = .text:0x80234A44; // type:function size:0xE4 scope:global -DoDrag__9RigidBody = .text:0x80234B28; // type:function size:0x37C scope:global -ConvertLocalToWorld__C9RigidBodyRQ25UMath7Vector3b = .text:0x80234EA4; // type:function size:0x68 scope:global -ConvertWorldToLocal__C9RigidBodyRQ25UMath7Vector3b = .text:0x80234F0C; // type:function size:0x124 scope:global -Resolve__9RigidBodyRCQ25UMath7Vector3T1 = .text:0x80235030; // type:function size:0x78 scope:global -ResolveTorque__9RigidBodyRCQ25UMath7Vector3 = .text:0x802350A8; // type:function size:0x64 scope:global -ResolveForce__9RigidBodyRCQ25UMath7Vector3 = .text:0x8023510C; // type:function size:0x64 scope:global -ResolveTorque__9RigidBodyRCQ25UMath7Vector3T1 = .text:0x80235170; // type:function size:0xB0 scope:global -ResolveForce__9RigidBodyRCQ25UMath7Vector3T1 = .text:0x80235220; // type:function size:0xC0 scope:global -Debug__9RigidBody = .text:0x802352E0; // type:function size:0x4 scope:global -DoIntegration__9RigidBodyf = .text:0x802352E4; // type:function size:0x7C4 scope:global -ResolveGroundCollision__9RigidBodyPC15CollisionPacketi = .text:0x80235AA8; // type:function size:0x550 scope:global -SetAnimating__9RigidBodyb = .text:0x80235FF8; // type:function size:0x38 scope:global -CanCollideWith__C9RigidBodyRC9RigidBody = .text:0x80236030; // type:function size:0x54 scope:global -CanCollideWithGround__C9RigidBody = .text:0x80236084; // type:function size:0x34 scope:global -DoInstanceCollision2d__9RigidBodyf = .text:0x802360B8; // type:function size:0x89C scope:global -ModifyCollision__9RigidBodyRC10SimSurfaceRCQ38Dynamics9Collision5PlaneRQ38Dynamics9Collision6Moment = .text:0x80236954; // type:function size:0x20 scope:global -IsImmobile__C9RigidBody = .text:0x80236974; // type:function size:0x44 scope:global -ModifyCollision__9RigidBodyRC9RigidBodyRCQ38Dynamics9Collision5PlaneRQ38Dynamics9Collision6Moment = .text:0x802369B8; // type:function size:0x110 scope:global -Separate__9RigidBodyR9RigidBodybT1T2RCQ25UMath7Vector3RQ25UMath7Vector3fT2 = .text:0x80236AC8; // type:function size:0x248 scope:global -ResolveObjectCollision__9RigidBodyR9RigidBodyT1RCQ29RigidBody9PrimitiveT3RCQ25UMath7Vector3T5fb = .text:0x80236D10; // type:function size:0xA5C scope:global -ResolveWorldOBBCollision__9RigidBodyRCQ25UMath7Vector3T1PQ33Sim9Collision4InfoPCQ38Dynamics9Collision8GeometryT1RC10SimSurfaceT6 = .text:0x8023776C; // type:function size:0x538 scope:global -ResolveWorldCollision__9RigidBodyRCQ25UMath7Vector3T1PQ33Sim9Collision4InfoPCQ26Attrib10CollectionRC10SimSurfaceRC8UVector3 = .text:0x80237CA4; // type:function size:0x450 scope:global -OnObjectOverlap__9RigidBodyR9RigidBodyT1f = .text:0x802380F4; // type:function size:0x1F8 scope:global -UpdateCollider__9RigidBody = .text:0x802382EC; // type:function size:0x98 scope:global -CanCollideWithWorld__C9RigidBody = .text:0x80238384; // type:function size:0x9C scope:global -OnWCollide__9RigidBodyRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv = .text:0x80238420; // type:function size:0x234 scope:global -DoWorldCollisions__9RigidBodyf = .text:0x80238654; // type:function size:0xAC scope:global -DoBarrierCollision__9RigidBodyf = .text:0x80238700; // type:function size:0x20C scope:global -DoInstanceCollision__9RigidBodyf = .text:0x8023890C; // type:function size:0x38 scope:global -DoInstanceCollision3d__9RigidBodyf = .text:0x80238944; // type:function size:0x13C scope:global -DoObbCollision__9RigidBodyf = .text:0x80238A80; // type:function size:0x39C scope:global -ShouldSleep__C9RigidBody = .text:0x80238E1C; // type:function size:0x9C scope:global -Accelerate__9RigidBodyRCQ25UMath7Vector3f = .text:0x80238EB8; // type:function size:0x40 scope:global -AddCollisionSphere__9RigidBodyfRCQ25UMath7Vector3RC10SimSurfaceUiRC6UCrc32 = .text:0x80238EF8; // type:function size:0x64 scope:global -AddCollisionBox__9RigidBodyRCQ25UMath7Vector3T1RC10SimSurfaceRCQ25UMath7Vector4UiRC6UCrc32 = .text:0x80238F5C; // type:function size:0xBC scope:global -CanCollideWithObjects__C9RigidBody = .text:0x80239018; // type:function size:0x4C scope:global -OnTaskSimulate__9RigidBodyf = .text:0x80239064; // type:function size:0x4 scope:global -OnDebugDraw__9RigidBody = .text:0x80239068; // type:function size:0x4 scope:global -GetTriggerFlags__C9RigidBody = .text:0x8023906C; // type:function size:0x70 scope:global -PushSP__9RigidBodyPv = .text:0x802390DC; // type:function size:0x2C scope:global -PopSP__9RigidBody = .text:0x80239108; // type:function size:0x2C scope:global -Update__9RigidBodyf = .text:0x80239134; // type:function size:0x564 scope:global -Damp__9RigidBodyf = .text:0x80239698; // type:function size:0x84 scope:global -UpdateGrid__9RigidBodyRiT1 = .text:0x8023971C; // type:function size:0x130 scope:global -Get__9RigidBodyUi = .text:0x8023984C; // type:function size:0x38 scope:global -AssignSlot__9RigidBody = .text:0x80239884; // type:function size:0x30 scope:global -Construct__15SimpleRigidBodyRC14BehaviorParams = .text:0x802398B4; // type:function size:0xE4 scope:global -__Q215SimpleRigidBody8Volatile = .text:0x80239998; // type:function size:0x4 scope:global -__15SimpleRigidBodyRC14BehaviorParamsRC14RBSimpleParams = .text:0x8023999C; // type:function size:0x4A4 scope:global -_._15SimpleRigidBody = .text:0x80239E40; // type:function size:0x38C scope:global -GetOwner__C15SimpleRigidBody = .text:0x8023A1CC; // type:function size:0x8 scope:global -RecalcOrientMat__C15SimpleRigidBodyRQ25UMath7Matrix4 = .text:0x8023A1D4; // type:function size:0xE4 scope:global -GetForwardVector__C15SimpleRigidBodyRQ25UMath7Vector3 = .text:0x8023A2B8; // type:function size:0x70 scope:global -GetRightVector__C15SimpleRigidBodyRQ25UMath7Vector3 = .text:0x8023A328; // type:function size:0x70 scope:global -GetUpVector__C15SimpleRigidBodyRQ25UMath7Vector3 = .text:0x8023A398; // type:function size:0x70 scope:global -SetOrientation__15SimpleRigidBodyRCQ25UMath7Matrix4 = .text:0x8023A408; // type:function size:0x2C scope:global -SetOrientation__15SimpleRigidBodyRCQ25UMath7Vector4 = .text:0x8023A434; // type:function size:0x2C scope:global -GetScalarVelocity__C15SimpleRigidBody = .text:0x8023A460; // type:function size:0x30 scope:global -Accelerate__15SimpleRigidBodyRCQ25UMath7Vector3f = .text:0x8023A490; // type:function size:0x40 scope:global -ApplyFriction__15SimpleRigidBody = .text:0x8023A4D0; // type:function size:0x60 scope:global -OnDebugDraw__15SimpleRigidBody = .text:0x8023A530; // type:function size:0x4 scope:global -DoIntegration__15SimpleRigidBodyf = .text:0x8023A534; // type:function size:0x194 scope:global -DoSRBCollisions__15SimpleRigidBodyP15SimpleRigidBody = .text:0x8023A6C8; // type:function size:0x5E4 scope:global -DoRBCollisions__15SimpleRigidBodyf = .text:0x8023ACAC; // type:function size:0x5E4 scope:global -GetPointVelocity__C15SimpleRigidBodyRCQ25UMath7Vector3RQ25UMath7Vector3 = .text:0x8023B290; // type:function size:0x64 scope:global -PlaceObject__15SimpleRigidBodyRCQ25UMath7Matrix4RCQ25UMath7Vector3 = .text:0x8023B2F4; // type:function size:0xA8 scope:global -ConvertLocalToWorld__C15SimpleRigidBodyRQ25UMath7Vector3b = .text:0x8023B39C; // type:function size:0x58 scope:global -ConvertWorldToLocal__C15SimpleRigidBodyRQ25UMath7Vector3b = .text:0x8023B3F4; // type:function size:0x88 scope:global -Resolve__15SimpleRigidBodyRCQ25UMath7Vector3T1 = .text:0x8023B47C; // type:function size:0x38 scope:global -ResolveForce__15SimpleRigidBodyRCQ25UMath7Vector3 = .text:0x8023B4B4; // type:function size:0xAC scope:global -ResolveForce__15SimpleRigidBodyRCQ25UMath7Vector3T1 = .text:0x8023B560; // type:function size:0x38 scope:global -ResolveTorque__15SimpleRigidBodyRCQ25UMath7Vector3 = .text:0x8023B598; // type:function size:0x4 scope:global -GetTriggerFlags__C15SimpleRigidBody = .text:0x8023B59C; // type:function size:0x120 scope:global -Update__15SimpleRigidBodyfPv = .text:0x8023B6BC; // type:function size:0x230 scope:global -Get__15SimpleRigidBodyUi = .text:0x8023B8EC; // type:function size:0x38 scope:global -AssignSlot__15SimpleRigidBody = .text:0x8023B924; // type:function size:0x30 scope:global -Construct__9RBVehicleRC14BehaviorParams = .text:0x8023B954; // type:function size:0x104 scope:global -__9RBVehicleRC14BehaviorParamsRC15RBComplexParams = .text:0x8023BA58; // type:function size:0x30C scope:global -GetNumContactPoints__C9RBVehicle = .text:0x8023BD64; // type:function size:0x60 scope:global -IsInGroundContact__C9RBVehicle = .text:0x8023BDC4; // type:function size:0x78 scope:global -CanCollideWith__C9RBVehicleRC9RigidBody = .text:0x8023BE3C; // type:function size:0x38 scope:global -OnBeginFrame__9RBVehiclef = .text:0x8023BE74; // type:function size:0x268 scope:global -OnTaskSimulate__9RBVehiclef = .text:0x8023C0DC; // type:function size:0x164 scope:global -PlaceObject__9RBVehicleRCQ25UMath7Matrix4RCQ25UMath7Vector3 = .text:0x8023C240; // type:function size:0x38 scope:global -ShouldSleep__C9RBVehicle = .text:0x8023C278; // type:function size:0xC4 scope:global -ModifyCollision__9RBVehicleRC10SimSurfaceRCQ38Dynamics9Collision5PlaneRQ38Dynamics9Collision6Moment = .text:0x8023C33C; // type:function size:0x21C scope:global -ChooseReaction__C9RBVehicleRCQ38Dynamics9Collision5Plane = .text:0x8023C558; // type:function size:0x14C scope:global -ModifyCollision__9RBVehicleRC9RigidBodyRCQ38Dynamics9Collision5PlaneRQ38Dynamics9Collision6Moment = .text:0x8023C6A4; // type:function size:0x4E8 scope:global -OnBehaviorChange__9RBVehicleRC6UCrc32 = .text:0x8023CB8C; // type:function size:0x70 scope:global -CanCollideWithGround__C9RBVehicle = .text:0x8023CBFC; // type:function size:0x104 scope:global -GetTriggerFlags__C9RBVehicle = .text:0x8023CD00; // type:function size:0xB4 scope:global -CanCollideWithWorld__C9RBVehicle = .text:0x8023CDB4; // type:function size:0x120 scope:global -Construct__9RBTractorRC14BehaviorParams = .text:0x8023CED4; // type:function size:0x104 scope:global -SetHitch__9RBTractorb = .text:0x8023CFD8; // type:function size:0x28C scope:global -ModifyCollision__9RBTractorRC9RigidBodyRCQ38Dynamics9Collision5PlaneRQ38Dynamics9Collision6Moment = .text:0x8023D264; // type:function size:0x68 scope:global -OnBehaviorChange__9RBTractorRC6UCrc32 = .text:0x8023D2CC; // type:function size:0x80 scope:global -OnQueryVehicleCache__C9RBTractorPC8IVehiclePC13IVehicleCache = .text:0x8023D34C; // type:function size:0x4C scope:global -OnRemovedVehicleCache__9RBTractorP8IVehicle = .text:0x8023D398; // type:function size:0x54 scope:global -OnOwnerDetached__9RBTractorP11IAttachable = .text:0x8023D3EC; // type:function size:0x9C scope:global -CanCollideWith__C9RBTractorRC9RigidBody = .text:0x8023D488; // type:function size:0x70 scope:global -UpdateTrailer__9RBTractorf = .text:0x8023D4F8; // type:function size:0x388 scope:global -OnTask__9RBTractorP10HSIMTASK__f = .text:0x8023D880; // type:function size:0x84 scope:global -PlaceObject__9RBTractorRCQ25UMath7Matrix4RCQ25UMath7Vector3 = .text:0x8023D904; // type:function size:0x70 scope:global -_._9RBTractor = .text:0x8023D974; // type:function size:0x29C scope:global -__9RBTractorRC14BehaviorParamsRC15RBComplexParams = .text:0x8023DC10; // type:function size:0x440 scope:global -Pose__9RBTractor = .text:0x8023E050; // type:function size:0x130 scope:global -__9RBTrailerRC14BehaviorParamsRC15RBComplexParams = .text:0x8023E180; // type:function size:0x9C scope:global -Construct__9RBTrailerRC14BehaviorParams = .text:0x8023E21C; // type:function size:0x104 scope:global -ModifyCollision__9RBTrailerRC9RigidBodyRCQ38Dynamics9Collision5PlaneRQ38Dynamics9Collision6Moment = .text:0x8023E320; // type:function size:0x68 scope:global -Construct__5RBCopRC14BehaviorParams = .text:0x8023E388; // type:function size:0x104 scope:global -__5RBCopRC14BehaviorParamsRC15RBComplexParams = .text:0x8023E48C; // type:function size:0x9C scope:global -_._5RBCop = .text:0x8023E528; // type:function size:0xC8 scope:global -ModifyCollision__5RBCopRC9RigidBodyRCQ38Dynamics9Collision5PlaneRQ38Dynamics9Collision6Moment = .text:0x8023E5F0; // type:function size:0x20 scope:global -ModifyCollision__5RBCopRC10SimSurfaceRCQ38Dynamics9Collision5PlaneRQ38Dynamics9Collision6Moment = .text:0x8023E610; // type:function size:0x20 scope:global -__7EffectsRC14BehaviorParams = .text:0x8023E630; // type:function size:0x154 scope:global -_._7Effects = .text:0x8023E784; // type:function size:0x108 scope:global -Reset__7Effects = .text:0x8023E88C; // type:function size:0x24 scope:global -OnPause__7Effects = .text:0x8023E8B0; // type:function size:0x24 scope:global -OnTaskSimulate__7Effectsf = .text:0x8023E8D4; // type:function size:0x38 scope:global -OnBehaviorChange__7EffectsRC6UCrc32 = .text:0x8023E90C; // type:function size:0x58 scope:global -DoScrape__7EffectsRC10SimSurfaceRCQ25UMath7Vector3N22UiP10HSIMABLE__ = .text:0x8023E964; // type:function size:0x3B4 scope:global -DoHit__7EffectsRC10SimSurfacefRCQ25UMath7Vector3N23UiP10HSIMABLE__ = .text:0x8023ED18; // type:function size:0x3CC scope:global -OnScrapeWorld__7EffectsRC10SimSurfaceRCQ25UMath7Vector3N22 = .text:0x8023F0E4; // type:function size:0x2C scope:global -OnHitWorld__7EffectsRC10SimSurfacefRCQ25UMath7Vector3N23 = .text:0x8023F110; // type:function size:0x2C scope:global -OnScrapeObject__7EffectsRC10SimSurfaceRCQ25UMath7Vector3N22P10HSIMABLE__ = .text:0x8023F13C; // type:function size:0x2C scope:global -OnHitObject__7EffectsRC10SimSurfacefRCQ25UMath7Vector3N23P10HSIMABLE__ = .text:0x8023F168; // type:function size:0x2C scope:global -OnScrapeGround__7EffectsRC10SimSurfaceRCQ25UMath7Vector3N22 = .text:0x8023F194; // type:function size:0x2C scope:global -OnHitGround__7EffectsRC10SimSurfacefRCQ25UMath7Vector3N23 = .text:0x8023F1C0; // type:function size:0x2C scope:global -OnCollision__7EffectsRCQ33Sim9Collision4Info = .text:0x8023F1EC; // type:function size:0x280 scope:global -__14EffectsVehicleRC14BehaviorParams = .text:0x8023F46C; // type:function size:0x54 scope:global -__10EffectsCarRC14BehaviorParams = .text:0x8023F4C0; // type:function size:0x6C scope:global -OnBehaviorChange__10EffectsCarRC6UCrc32 = .text:0x8023F52C; // type:function size:0x68 scope:global -OnHitGround__10EffectsCarRC10SimSurfacefRCQ25UMath7Vector3N23 = .text:0x8023F594; // type:function size:0x1D4 scope:global -OnScrapeGround__10EffectsCarRC10SimSurfaceRCQ25UMath7Vector3N22 = .text:0x8023F768; // type:function size:0x1B4 scope:global -__13EffectsPlayerRC14BehaviorParams = .text:0x8023F91C; // type:function size:0x54 scope:global -__16EffectsSmackableRC14BehaviorParams = .text:0x8023F970; // type:function size:0x54 scope:global -OnCollision__16EffectsSmackableRCQ33Sim9Collision4Info = .text:0x8023F9C4; // type:function size:0xEC scope:global -__15EffectsFragmentRC14BehaviorParams = .text:0x8023FAB0; // type:function size:0x54 scope:global -Construct__13DamageVehicleRC14BehaviorParams = .text:0x8023FB04; // type:function size:0xB4 scope:global -__13DamageVehicleRC14BehaviorParamsRC12DamageParams = .text:0x8023FBB8; // type:function size:0x344 scope:global -ResetParts__13DamageVehicle = .text:0x8023FEFC; // type:function size:0x80 scope:global -OnBehaviorChange__13DamageVehicleRC6UCrc32 = .text:0x8023FF7C; // type:function size:0xA4 scope:global -_._13DamageVehicle = .text:0x80240020; // type:function size:0x14C scope:global -OnCollision__13DamageVehicleRCQ33Sim9Collision4Info = .text:0x8024016C; // type:function size:0x2C8 scope:global -SetDynamicData__13DamageVehiclePCQ214EventSequencer6SystemP16EventDynamicData = .text:0x80240434; // type:function size:0x78 scope:global -GetDamageRecord__C13DamageVehicleQ210DamageZone2ID = .text:0x802404AC; // type:function size:0xEC scope:global -OnImpact__13DamageVehicleRCQ25UMath7Vector3T1ffRC10SimSurfaceP8ISimable = .text:0x80240598; // type:function size:0x684 scope:global -OnTaskSimulate__13DamageVehiclef = .text:0x80240C1C; // type:function size:0x64 scope:global -Reset__13DamageVehicle = .text:0x80240C80; // type:function size:0x10 scope:global -Destroy__13DamageVehicle = .text:0x80240C90; // type:function size:0xB8 scope:global -ResetDamage__13DamageVehicle = .text:0x80240D48; // type:function size:0x16C scope:global -SetShockForce__13DamageVehiclef = .text:0x80240EB4; // type:function size:0xC8 scope:global -SetInShock__13DamageVehiclef = .text:0x80240F7C; // type:function size:0x6C scope:global -Construct__11DamageRacerRC14BehaviorParams = .text:0x80240FE8; // type:function size:0xB4 scope:global -__11DamageRacerRC14BehaviorParamsRC12DamageParams = .text:0x8024109C; // type:function size:0x230 scope:global -_._11DamageRacer = .text:0x802412CC; // type:function size:0x1D0 scope:global -GetTireDamage__C11DamageRacerUi = .text:0x8024149C; // type:function size:0x1C scope:global -GetNumBlowouts__C11DamageRacer = .text:0x802414B8; // type:function size:0x2C scope:global -Puncture__11DamageRacerUi = .text:0x802414E4; // type:function size:0xB0 scope:global -IsLightDamaged__C11DamageRacerQ29VehicleFX2ID = .text:0x80241594; // type:function size:0x94 scope:global -GetZoneDamage__C11DamageRacer = .text:0x80241628; // type:function size:0x60 scope:global -CanDamageVisuals__C11DamageRacer = .text:0x80241688; // type:function size:0x2C scope:global -OnTaskSimulate__11DamageRacerf = .text:0x802416B4; // type:function size:0xC4 scope:global -OnBehaviorChange__11DamageRacerRC6UCrc32 = .text:0x80241778; // type:function size:0x60 scope:global -ResetDamage__11DamageRacer = .text:0x802417D8; // type:function size:0x4C scope:global -Construct__14DamageDragsterRC14BehaviorParams = .text:0x80241824; // type:function size:0xB4 scope:global -__14DamageDragsterRC14BehaviorParamsRC12DamageParams = .text:0x802418D8; // type:function size:0x84 scope:global -CheckTotaling__14DamageDragsterRCQ33Sim9Collision4Info = .text:0x8024195C; // type:function size:0x18C scope:global -OnCollision__14DamageDragsterRCQ33Sim9Collision4Info = .text:0x80241AE8; // type:function size:0x3C scope:global -Construct__10DamageHeliRC14BehaviorParams = .text:0x80241B24; // type:function size:0xB4 scope:global -__10DamageHeliRC14BehaviorParamsRC12DamageParams = .text:0x80241BD8; // type:function size:0x84 scope:global -_._10DamageHeli = .text:0x80241C5C; // type:function size:0xA4 scope:global -DoAutoDestruct__10DamageHeli = .text:0x80241D00; // type:function size:0x4 scope:global -Reset__10DamageHeli = .text:0x80241D04; // type:function size:0x30 scope:global -OnTaskSimulate__10DamageHelif = .text:0x80241D34; // type:function size:0x44 scope:global -Construct__12DamageCopCarRC14BehaviorParams = .text:0x80241D78; // type:function size:0xB4 scope:global -__12DamageCopCarRC14BehaviorParamsRC12DamageParams = .text:0x80241E2C; // type:function size:0xC0 scope:global -_._12DamageCopCar = .text:0x80241EEC; // type:function size:0xB0 scope:global -ResetDamage__12DamageCopCar = .text:0x80241F9C; // type:function size:0x38 scope:global -OnTask__12DamageCopCarP10HSIMTASK__f = .text:0x80241FD4; // type:function size:0xCC scope:global -CheckUpright__12DamageCopCarf = .text:0x802420A0; // type:function size:0x27C scope:global -OnImpact__12DamageCopCarRCQ25UMath7Vector3T1ffRC10SimSurfaceP8ISimable = .text:0x8024231C; // type:function size:0x130 scope:global -Construct__6PInputRC14BehaviorParams = .text:0x8024244C; // type:function size:0x44 scope:global -__6PInputRC14BehaviorParams = .text:0x80242490; // type:function size:0xB8 scope:global -_._6PInput = .text:0x80242548; // type:function size:0xA8 scope:global -OnTaskSimulate__6PInputf = .text:0x802425F0; // type:function size:0x4 scope:global -Reset__6PInput = .text:0x802425F4; // type:function size:0x38 scope:global -ClearInput__6PInput = .text:0x8024262C; // type:function size:0xB0 scope:global -Construct__11InputPlayerRC14BehaviorParams = .text:0x802426DC; // type:function size:0x44 scope:global -__11InputPlayerRC14BehaviorParams = .text:0x80242720; // type:function size:0x23C scope:global -OnBehaviorChange__11InputPlayerRC6UCrc32 = .text:0x8024295C; // type:function size:0x58 scope:global -_._11InputPlayer = .text:0x802429B4; // type:function size:0x1C4 scope:global -Reset__11InputPlayer = .text:0x80242B78; // type:function size:0x4C scope:global -ClearInput__11InputPlayer = .text:0x80242BC4; // type:function size:0x58 scope:global -FlushInput__11InputPlayer = .text:0x80242C1C; // type:function size:0x24 scope:global -OnTaskSimulate__11InputPlayerf = .text:0x80242C40; // type:function size:0x140 scope:global -BlockInput__11InputPlayerb = .text:0x80242D80; // type:function size:0x50 scope:global -FetchInput__11InputPlayer = .text:0x80242DD0; // type:function size:0x87C scope:global -DoAutoBraking__11InputPlayerff = .text:0x8024364C; // type:function size:0x1B0 scope:global -DoShifting__11InputPlayeri = .text:0x802437FC; // type:function size:0x19C scope:global -DoAutoReverse__11InputPlayerff = .text:0x80243998; // type:function size:0x1B4 scope:global -IsAutomaticShift__C11InputPlayer = .text:0x80243B4C; // type:function size:0xF0 scope:global -__15InputPlayerDragRC14BehaviorParams = .text:0x80243C3C; // type:function size:0x60 scope:global -FetchInput__15InputPlayerDrag = .text:0x80243C9C; // type:function size:0x20 scope:global -OnAction__15InputPlayerDragRC9ActionRef = .text:0x80243CBC; // type:function size:0xE0 scope:global -__8InputNISRC14BehaviorParams = .text:0x80243D9C; // type:function size:0x54 scope:global -__7ChassisRC14BehaviorParams = .text:0x80243DF0; // type:function size:0x2B4 scope:global -GuessCompression__C7ChassisUif = .text:0x802440A4; // type:function size:0x4C scope:global -GetRenderMotion__C7Chassis = .text:0x802440F0; // type:function size:0xC scope:global -GetRideHeight__C7ChassisUi = .text:0x802440FC; // type:function size:0x20 scope:global -CalculateUndersteerFactor__C7Chassis = .text:0x8024411C; // type:function size:0x19C scope:global -ComputeMaxSlip__C7ChassisRCQ27Chassis5State = .text:0x802442B8; // type:function size:0x78 scope:global -DoTireHeat__7ChassisRCQ27Chassis5State = .text:0x80244330; // type:function size:0x120 scope:global -CalculateOversteerFactor__C7Chassis = .text:0x80244450; // type:function size:0x13C scope:global -OnTaskSimulate__7Chassisf = .text:0x8024458C; // type:function size:0x4 scope:global -ComputeLateralGripScale__C7ChassisRCQ27Chassis5State = .text:0x80244590; // type:function size:0xA0 scope:global -ComputeTractionScale__C7ChassisRCQ27Chassis5State = .text:0x80244630; // type:function size:0xC0 scope:global -DoSleep__7ChassisRCQ27Chassis5State = .text:0x802446F0; // type:function size:0x40C scope:global -OnBehaviorChange__7ChassisRC6UCrc32 = .text:0x80244AFC; // type:function size:0x130 scope:global -ComputeAckerman__C7ChassisfRCQ27Chassis5StatePQ25UMath7Vector4T3 = .text:0x80244C2C; // type:function size:0x1EC scope:global -SetCOG__7Chassisff = .text:0x80244E18; // type:function size:0x174 scope:global -ComputeState__C7ChassisfRQ27Chassis5State = .text:0x80244F8C; // type:function size:0x654 scope:global -DoAerodynamics__7ChassisRCQ27Chassis5StateffffPCQ27Physics7Tunings = .text:0x802455E0; // type:function size:0x380 scope:global -DoJumpStabilizer__7ChassisRCQ27Chassis5State = .text:0x80245960; // type:function size:0x5B8 scope:global -__Q215SuspensionRacer4TirefiPCQ36Attrib3Gen5tiresPCQ36Attrib3Gen6brakes = .text:0x80245F18; // type:function size:0x118 scope:global -BeginFrame__Q215SuspensionRacer4Tireffff = .text:0x80246030; // type:function size:0x7C scope:global -EndFrame__Q215SuspensionRacer4Tiref = .text:0x802460AC; // type:function size:0x4 scope:global -ComputeLateralForce__Q215SuspensionRacer4Tireff = .text:0x802460B0; // type:function size:0x178 scope:global -GetPilotFactor__Q215SuspensionRacer4Tiref = .text:0x80246228; // type:function size:0xA8 scope:global -CheckForBrakeLock__Q215SuspensionRacer4Tiref = .text:0x802462D0; // type:function size:0xE0 scope:global -CheckSign__Q215SuspensionRacer4Tire = .text:0x802463B0; // type:function size:0x9C scope:global -UpdateFree__Q215SuspensionRacer4Tiref = .text:0x8024644C; // type:function size:0x134 scope:global -UpdateLoaded__Q215SuspensionRacer4Tirefffff = .text:0x80246580; // type:function size:0x780 scope:global -Construct__15SuspensionRacerRC14BehaviorParams = .text:0x80246D00; // type:function size:0xB4 scope:global -__15SuspensionRacerRC14BehaviorParamsRC16SuspensionParams = .text:0x80246DB4; // type:function size:0x754 scope:global -_._15SuspensionRacer = .text:0x80247508; // type:function size:0x134 scope:global -CreateTires__15SuspensionRacer = .text:0x8024763C; // type:function size:0x218 scope:global -OnBehaviorChange__15SuspensionRacerRC6UCrc32 = .text:0x80247854; // type:function size:0xD8 scope:global -OnAttributeChange__15SuspensionRacerPCQ26Attrib10CollectionUi = .text:0x8024792C; // type:function size:0x4 scope:global -GetRideHeight__C15SuspensionRacerUi = .text:0x80247930; // type:function size:0x70 scope:global -GetWheelAngularVelocity__C15SuspensionRaceri = .text:0x802479A0; // type:function size:0x6C scope:global -DoAerobatics__15SuspensionRacerRQ27Chassis5State = .text:0x80247A0C; // type:function size:0x20 scope:global -OnTaskSimulate__15SuspensionRacerf = .text:0x80247A2C; // type:function size:0x39C scope:global -MatchSpeed__15SuspensionRacerf = .text:0x80247DC8; // type:function size:0x90 scope:global -GetWheelCenterPos__C15SuspensionRacerUi = .text:0x80247E58; // type:function size:0xE0 scope:global -Reset__15SuspensionRacer = .text:0x80247F38; // type:function size:0x1F4 scope:global -OnCollision__15SuspensionRacerRCQ33Sim9Collision4Info = .text:0x8024812C; // type:function size:0x3CC scope:global -DoHumanSteering__15SuspensionRacerRQ27Chassis5State = .text:0x802484F8; // type:function size:0x1F4 scope:global -CalculateMaxSteering__15SuspensionRacerRQ27Chassis5StateQ214ISteeringWheel12SteeringType = .text:0x802486EC; // type:function size:0x298 scope:global -CalculateSteeringSpeed__15SuspensionRacerRQ27Chassis5State = .text:0x80248984; // type:function size:0xB0 scope:global -DoAISteering__15SuspensionRacerRQ27Chassis5State = .text:0x80248A34; // type:function size:0x44 scope:global -DoSteering__15SuspensionRacerRQ27Chassis5StateRQ25UMath7Vector3T2 = .text:0x80248A78; // type:function size:0xE4 scope:global -Update__Q215SuspensionRacer7Burnoutfffif = .text:0x80248B5C; // type:function size:0x2EC scope:global -DoWallSteer__15SuspensionRacerRQ27Chassis5State = .text:0x80248E48; // type:function size:0x1BC scope:global -YawFrictionBoost__Ffffff = .text:0x80249004; // type:function size:0xAC scope:global -CalcYawControlLimit__C15SuspensionRacerf = .text:0x802490B0; // type:function size:0x1F0 scope:global -DoDrifting__15SuspensionRacerRCQ27Chassis5State = .text:0x802492A0; // type:function size:0x614 scope:global -TuneWheelParams__15SuspensionRacerRQ27Chassis5State = .text:0x802498B4; // type:function size:0x5F0 scope:global -CalcSplit__Q215SuspensionRacer12Differentialb = .text:0x80249EA4; // type:function size:0x168 scope:global -DoDriveForces__15SuspensionRacerRQ27Chassis5State = .text:0x8024A00C; // type:function size:0x55C scope:global -DoWheelForces__15SuspensionRacerRQ27Chassis5State = .text:0x8024A568; // type:function size:0xC54 scope:global -OnDebugDraw__15SuspensionRacer = .text:0x8024B1BC; // type:function size:0x4 scope:global -__Q217SuspensionTraffic4TirefiPCQ36Attrib3Gen5tiresPCQ36Attrib3Gen6brakes = .text:0x8024B1C0; // type:function size:0xC0 scope:global -BeginFrame__Q217SuspensionTraffic4Tire = .text:0x8024B280; // type:function size:0x3C scope:global -EndFrame__Q217SuspensionTraffic4Tiref = .text:0x8024B2BC; // type:function size:0x4 scope:global -UpdateFree__Q217SuspensionTraffic4Tiref = .text:0x8024B2C0; // type:function size:0x50 scope:global -UpdateLoaded__Q217SuspensionTraffic4Tireffff = .text:0x8024B310; // type:function size:0x358 scope:global -Construct__17SuspensionTrafficRC14BehaviorParams = .text:0x8024B668; // type:function size:0xB4 scope:global -__17SuspensionTrafficRC14BehaviorParamsRC16SuspensionParams = .text:0x8024B71C; // type:function size:0x834 scope:global -_._17SuspensionTraffic = .text:0x8024BF50; // type:function size:0xFC scope:global -OnBehaviorChange__17SuspensionTrafficRC6UCrc32 = .text:0x8024C04C; // type:function size:0xD8 scope:global -OnTaskSimulate__17SuspensionTrafficf = .text:0x8024C124; // type:function size:0x150 scope:global -GetWheelCenterPos__C17SuspensionTrafficUi = .text:0x8024C274; // type:function size:0xE0 scope:global -MatchSpeed__17SuspensionTrafficf = .text:0x8024C354; // type:function size:0x2C scope:global -Reset__17SuspensionTraffic = .text:0x8024C380; // type:function size:0x104 scope:global -DoSimpleAero__17SuspensionTrafficRQ27Chassis5State = .text:0x8024C484; // type:function size:0x88 scope:global -DoHP2Steering__17SuspensionTrafficRQ27Chassis5State = .text:0x8024C50C; // type:function size:0x20 scope:global -DoSteering__17SuspensionTrafficRQ27Chassis5StateRQ25UMath7Vector3T2 = .text:0x8024C52C; // type:function size:0xA0 scope:global -DoDriveForces__17SuspensionTrafficRQ27Chassis5State = .text:0x8024C5CC; // type:function size:0xF0 scope:global -DoWheelForces__17SuspensionTrafficRQ27Chassis5State = .text:0x8024C6BC; // type:function size:0xAA4 scope:global -__Q216SuspensionSimple4TirefiPCQ36Attrib3Gen5tiresPCQ36Attrib3Gen6brakes = .text:0x8024D160; // type:function size:0xE4 scope:global -BeginFrame__Q216SuspensionSimple4Tirefff = .text:0x8024D244; // type:function size:0x50 scope:global -EndFrame__Q216SuspensionSimple4Tiref = .text:0x8024D294; // type:function size:0x4 scope:global -UpdateFree__Q216SuspensionSimple4Tiref = .text:0x8024D298; // type:function size:0x88 scope:global -UpdateLoaded__Q216SuspensionSimple4Tireffffff = .text:0x8024D320; // type:function size:0x7B4 scope:global -Construct__16SuspensionSimpleRC14BehaviorParams = .text:0x8024DAD4; // type:function size:0xB4 scope:global -__16SuspensionSimpleRC14BehaviorParamsRC16SuspensionParams = .text:0x8024DB88; // type:function size:0x74C scope:global -_._16SuspensionSimple = .text:0x8024E2D4; // type:function size:0x11C scope:global -OnAttributeChange__16SuspensionSimplePCQ26Attrib10CollectionUi = .text:0x8024E3F0; // type:function size:0x4 scope:global -CreateTires__16SuspensionSimple = .text:0x8024E3F4; // type:function size:0x21C scope:global -OnBehaviorChange__16SuspensionSimpleRC6UCrc32 = .text:0x8024E610; // type:function size:0x108 scope:global -MatchSpeed__16SuspensionSimplef = .text:0x8024E718; // type:function size:0x60 scope:global -DoAerobatics__16SuspensionSimpleRQ27Chassis5State = .text:0x8024E778; // type:function size:0x2C scope:global -OnTaskSimulate__16SuspensionSimplef = .text:0x8024E7A4; // type:function size:0x440 scope:global -GetWheelCenterPos__C16SuspensionSimpleUi = .text:0x8024EBE4; // type:function size:0xE0 scope:global -Reset__16SuspensionSimple = .text:0x8024ECC4; // type:function size:0x18C scope:global -OnCollision__16SuspensionSimpleRCQ33Sim9Collision4Info = .text:0x8024EE50; // type:function size:0x1C0 scope:global -DoSteering__16SuspensionSimpleRQ27Chassis5StateRQ25UMath7Vector3T2 = .text:0x8024F010; // type:function size:0x124 scope:global -DoWallSteer__16SuspensionSimpleRQ27Chassis5State = .text:0x8024F134; // type:function size:0x124 scope:global -DoDriveForces__16SuspensionSimpleRQ27Chassis5State = .text:0x8024F258; // type:function size:0x1DC scope:global -DoWheelForces__16SuspensionSimpleRQ27Chassis5State = .text:0x8024F434; // type:function size:0xB2C scope:global -__Q217SuspensionTrailer4TirefiPCQ36Attrib3Gen5tiresPCQ36Attrib3Gen6brakes = .text:0x8024FF60; // type:function size:0xC4 scope:global -BeginFrame__Q217SuspensionTrailer4Tire = .text:0x80250024; // type:function size:0x3C scope:global -EndFrame__Q217SuspensionTrailer4Tiref = .text:0x80250060; // type:function size:0x4 scope:global -UpdateFree__Q217SuspensionTrailer4Tiref = .text:0x80250064; // type:function size:0x4C scope:global -UpdateLoaded__Q217SuspensionTrailer4Tireffff = .text:0x802500B0; // type:function size:0x348 scope:global -Construct__17SuspensionTrailerRC14BehaviorParams = .text:0x802503F8; // type:function size:0xB4 scope:global -__17SuspensionTrailerRC14BehaviorParamsRC16SuspensionParams = .text:0x802504AC; // type:function size:0x71C scope:global -_._17SuspensionTrailer = .text:0x80250BC8; // type:function size:0xF0 scope:global -OnBehaviorChange__17SuspensionTrailerRC6UCrc32 = .text:0x80250CB8; // type:function size:0xC0 scope:global -MatchSpeed__17SuspensionTrailerf = .text:0x80250D78; // type:function size:0x2C scope:global -ComputeState__C17SuspensionTrailerfRQ27Chassis5State = .text:0x80250DA4; // type:function size:0x188 scope:global -OnTaskSimulate__17SuspensionTrailerf = .text:0x80250F2C; // type:function size:0x114 scope:global -GetWheelCenterPos__C17SuspensionTrailerUi = .text:0x80251040; // type:function size:0xE0 scope:global -Reset__17SuspensionTrailer = .text:0x80251120; // type:function size:0x114 scope:global -DoSimpleAero__17SuspensionTrailerRQ27Chassis5State = .text:0x80251234; // type:function size:0x88 scope:global -DoWheelForces__17SuspensionTrailerRQ27Chassis5State = .text:0x802512BC; // type:function size:0x878 scope:global -__Q216SuspensionSpline4Tiref = .text:0x80251B34; // type:function size:0x8C scope:global -BeginFrame__Q216SuspensionSpline4Tire = .text:0x80251BC0; // type:function size:0x34 scope:global -EndFrame__Q216SuspensionSpline4Tiref = .text:0x80251BF4; // type:function size:0x4 scope:global -UpdateFree__Q216SuspensionSpline4Tiref = .text:0x80251BF8; // type:function size:0x24 scope:global -UpdateLoaded__Q216SuspensionSpline4Tireffff = .text:0x80251C1C; // type:function size:0xA0 scope:global -Construct__16SuspensionSplineRC14BehaviorParams = .text:0x80251CBC; // type:function size:0xB4 scope:global -__16SuspensionSplineRC14BehaviorParamsRC16SuspensionParams = .text:0x80251D70; // type:function size:0x80C scope:global -_._16SuspensionSpline = .text:0x8025257C; // type:function size:0x114 scope:global -OnBehaviorChange__16SuspensionSplineRC6UCrc32 = .text:0x80252690; // type:function size:0xD8 scope:global -OnTaskSimulate__16SuspensionSplinef = .text:0x80252768; // type:function size:0x330 scope:global -RestoreState__16SuspensionSpline = .text:0x80252A98; // type:function size:0xB4 scope:global -GetWheelBase__16SuspensionSplinePfT1 = .text:0x80252B4C; // type:function size:0x84 scope:global -NISCarTweaks__16SuspensionSplinef = .text:0x80252BD0; // type:function size:0x2A4 scope:global -SetNISPosition__16SuspensionSplineRCQ25UMath7Matrix4bf = .text:0x80252E74; // type:function size:0x7AC scope:global -GetWheelCenterPos__C16SuspensionSplineUi = .text:0x80253620; // type:function size:0xE0 scope:global -MatchSpeed__16SuspensionSplinef = .text:0x80253700; // type:function size:0x4C scope:global -Reset__16SuspensionSpline = .text:0x8025374C; // type:function size:0x180 scope:global -DoSteering__16SuspensionSplineRQ27Chassis5StateRQ25UMath7Vector3T2 = .text:0x802538CC; // type:function size:0x190 scope:global -DoWheelForces__16SuspensionSplineRQ27Chassis5State = .text:0x80253A5C; // type:function size:0xB54 scope:global -Construct__11EngineRacerRC14BehaviorParams = .text:0x802545B0; // type:function size:0x44 scope:global -__11EngineRacerRC14BehaviorParams = .text:0x802545F4; // type:function size:0xA18 scope:global -_._11EngineRacer = .text:0x8025500C; // type:function size:0x1A0 scope:global -GetHorsePower__C11EngineRacer = .text:0x802551AC; // type:function size:0x6C scope:global -OnBehaviorChange__11EngineRacerRC6UCrc32 = .text:0x80255218; // type:function size:0xBC scope:global -Sabotage__11EngineRacerf = .text:0x802552D4; // type:function size:0x8C scope:global -Blow__11EngineRacer = .text:0x80255360; // type:function size:0x68 scope:global -OnAttributeChange__11EngineRacerPCQ26Attrib10CollectionUi = .text:0x802553C8; // type:function size:0x4 scope:global -Reset__11EngineRacer = .text:0x802553CC; // type:function size:0xA0 scope:global -GetEngineTorque__C11EngineRacerf = .text:0x8025546C; // type:function size:0x88 scope:global -GuessGear__C11EngineRacerf = .text:0x802554F4; // type:function size:0xD8 scope:global -GuessRPM__C11EngineRacerf6GearID = .text:0x802555CC; // type:function size:0x15C scope:global -MatchSpeed__11EngineRacerf = .text:0x80255728; // type:function size:0xC0 scope:global -GetBrakingTorque__C11EngineRacerff = .text:0x802557E8; // type:function size:0x224 scope:global -CalcShiftPoints__11EngineRacer = .text:0x80255A0C; // type:function size:0xC8 scope:global -AutoShift__11EngineRacer = .text:0x80255AD4; // type:function size:0x30C scope:global -FindShiftPotential__C11EngineRacer6GearIDf = .text:0x80255DE0; // type:function size:0x1A4 scope:global -UpdateShiftPotential__11EngineRacer6GearIDf = .text:0x80255F84; // type:function size:0x20 scope:global -SportShift__11EngineRacer6GearID = .text:0x80255FA4; // type:function size:0xD8 scope:global -OnGearChange__11EngineRacer6GearID = .text:0x8025607C; // type:function size:0x100 scope:global -DoGearChange__11EngineRacer6GearIDb = .text:0x8025617C; // type:function size:0xE0 scope:global -GetDifferentialAngularVelocity__C11EngineRacerb = .text:0x8025625C; // type:function size:0x228 scope:global -GetDriveWheelSlippage__C11EngineRacer = .text:0x80256484; // type:function size:0x13C scope:global -SetDifferentialAngularVelocity__11EngineRacerf = .text:0x802565C0; // type:function size:0x2E0 scope:global -CalcSpeedometer__C11EngineRacerfUi = .text:0x802568A0; // type:function size:0x70 scope:global -GetMaxSpeedometer__C11EngineRacer = .text:0x80256910; // type:function size:0xC0 scope:global -GetSpeedometer__C11EngineRacer = .text:0x802569D0; // type:function size:0x38 scope:global -LimitFreeWheels__11EngineRacerf = .text:0x80256A08; // type:function size:0x184 scope:global -Engine_SmoothRPM__Fb6GearIDffff = .text:0x80256B8C; // type:function size:0xAC scope:global -DoECU__11EngineRacer = .text:0x80256C38; // type:function size:0x164 scope:global -DoNos__11EngineRacerPCQ27Physics7Tuningsfb = .text:0x80256D9C; // type:function size:0x460 scope:global -DoInduction__11EngineRacerPCQ27Physics7Tuningsf = .text:0x802571FC; // type:function size:0x290 scope:global -DoThrottle__11EngineRacer = .text:0x8025748C; // type:function size:0x80 scope:global -DoShifting__11EngineRacerf = .text:0x8025750C; // type:function size:0x120 scope:global -OnTaskSimulate__11EngineRacerf = .text:0x8025762C; // type:function size:0xE7C scope:global -GetShiftPoint__C11EngineRacer6GearIDT1 = .text:0x802584A8; // type:function size:0x48 scope:global -__14EngineDragsterRC14BehaviorParams = .text:0x802584F0; // type:function size:0x148 scope:global -Construct__14EngineDragsterRC14BehaviorParams = .text:0x80258638; // type:function size:0x44 scope:global -Reset__14EngineDragster = .text:0x8025867C; // type:function size:0x44 scope:global -Repair__14EngineDragster = .text:0x802586C0; // type:function size:0x1C scope:global -Blow__14EngineDragster = .text:0x802586DC; // type:function size:0x4C scope:global -OnBehaviorChange__14EngineDragsterRC6UCrc32 = .text:0x80258728; // type:function size:0x60 scope:global -GetEngineTorque__C14EngineDragsterf = .text:0x80258788; // type:function size:0x100 scope:global -OnTaskSimulate__14EngineDragsterf = .text:0x80258888; // type:function size:0x16C scope:global -OnGearChange__14EngineDragster6GearID = .text:0x802589F4; // type:function size:0x194 scope:global -UpdateShiftPotential__14EngineDragster6GearIDf = .text:0x80258B88; // type:function size:0x238 scope:global -CalcPotentialShiftBonus__C14EngineDragsterf6GearIDT2 = .text:0x80258DC0; // type:function size:0x1C8 scope:global -ComputeEngineHeat__14EngineDragsterf = .text:0x80258F88; // type:function size:0x19C scope:global -Construct__12EngineSplineRC14BehaviorParams = .text:0x80259124; // type:function size:0x44 scope:global -__12EngineSplineRC14BehaviorParams = .text:0x80259168; // type:function size:0x968 scope:global -_._12EngineSpline = .text:0x80259AD0; // type:function size:0x140 scope:global -RestoreState__12EngineSpline = .text:0x80259C10; // type:function size:0x40 scope:global -GetHorsePower__C12EngineSpline = .text:0x80259C50; // type:function size:0x58 scope:global -OnBehaviorChange__12EngineSplineRC6UCrc32 = .text:0x80259CA8; // type:function size:0x8C scope:global -OnAttributeChange__12EngineSplinePCQ26Attrib10CollectionUi = .text:0x80259D34; // type:function size:0x4 scope:global -Reset__12EngineSpline = .text:0x80259D38; // type:function size:0x44 scope:global -GetTorquePoint__C12EngineSplinef = .text:0x80259D7C; // type:function size:0x84 scope:global -MatchSpeed__12EngineSplinef = .text:0x80259E00; // type:function size:0x240 scope:global -CalcShiftPoints__12EngineSpline = .text:0x8025A040; // type:function size:0x3C scope:global -GetShiftUpRPM__12EngineSplinei = .text:0x8025A07C; // type:function size:0x10 scope:global -GetShiftDownRPM__12EngineSplinei = .text:0x8025A08C; // type:function size:0x10 scope:global -AutoShift__12EngineSpline = .text:0x8025A09C; // type:function size:0x2C0 scope:global -Shift__12EngineSpline6GearID = .text:0x8025A35C; // type:function size:0xEC scope:global -GetDifferentialAngularVelocity__C12EngineSpline = .text:0x8025A448; // type:function size:0x140 scope:global -CalcSpeedometer__C12EngineSplinefUi = .text:0x8025A588; // type:function size:0x38 scope:global -GetMaxSpeedometer__C12EngineSpline = .text:0x8025A5C0; // type:function size:0xC0 scope:global -GetSpeedometer__C12EngineSpline = .text:0x8025A680; // type:function size:0x38 scope:global -OnTaskSimulate__12EngineSplinef = .text:0x8025A6B8; // type:function size:0x428 scope:global -GetShiftPoint__C12EngineSpline6GearIDT1 = .text:0x8025AAE0; // type:function size:0x48 scope:global -Construct__13SimpleChopperRC14BehaviorParams = .text:0x8025AB28; // type:function size:0xB4 scope:global -__13SimpleChopperRC14BehaviorParamsRC12EngineParams = .text:0x8025ABDC; // type:function size:0x410 scope:global -_._13SimpleChopper = .text:0x8025AFEC; // type:function size:0xD0 scope:global -Reset__13SimpleChopper = .text:0x8025B0BC; // type:function size:0x4 scope:global -OnBehaviorChange__13SimpleChopperRC6UCrc32 = .text:0x8025B0C0; // type:function size:0xA4 scope:global -SetTorqueToMatchPitchAndRoll__13SimpleChopperRQ25UMath7Vector3T1 = .text:0x8025B164; // type:function size:0x490 scope:global -OnTaskSimulate__13SimpleChopperf = .text:0x8025B5F4; // type:function size:0x5F4 scope:global -Construct__13EngineTrafficRC14BehaviorParams = .text:0x8025BBE8; // type:function size:0x44 scope:global -__13EngineTrafficRC14BehaviorParams = .text:0x8025BC2C; // type:function size:0x5B4 scope:global -_._13EngineTraffic = .text:0x8025C1E0; // type:function size:0x108 scope:global -GetMaxHorsePower__C13EngineTraffic = .text:0x8025C2E8; // type:function size:0x8 scope:global -GetHorsePower__C13EngineTraffic = .text:0x8025C2F0; // type:function size:0x58 scope:global -OnBehaviorChange__13EngineTrafficRC6UCrc32 = .text:0x8025C348; // type:function size:0x8C scope:global -OnAttributeChange__13EngineTrafficPCQ26Attrib10CollectionUi = .text:0x8025C3D4; // type:function size:0x4 scope:global -Reset__13EngineTraffic = .text:0x8025C3D8; // type:function size:0x64 scope:global -GetTorquePoint__C13EngineTrafficf = .text:0x8025C43C; // type:function size:0x30 scope:global -MatchSpeed__13EngineTrafficf = .text:0x8025C46C; // type:function size:0x1FC scope:global -GetBrakingTorque__C13EngineTrafficff = .text:0x8025C668; // type:function size:0x224 scope:global -CalcShiftPoints__13EngineTraffic = .text:0x8025C88C; // type:function size:0x108 scope:global -AutoShift__13EngineTraffic = .text:0x8025C994; // type:function size:0x228 scope:global -Shift__13EngineTraffic6GearID = .text:0x8025CBBC; // type:function size:0xEC scope:global -GetDifferentialAngularVelocity__C13EngineTraffic = .text:0x8025CCA8; // type:function size:0x1A8 scope:global -GetMaxSpeedometer__C13EngineTraffic = .text:0x8025CE50; // type:function size:0x94 scope:global -GetSpeedometer__C13EngineTraffic = .text:0x8025CEE4; // type:function size:0x58 scope:global -DoShifting__13EngineTrafficf = .text:0x8025CF3C; // type:function size:0x70 scope:global -OnTaskSimulate__13EngineTrafficf = .text:0x8025CFAC; // type:function size:0x5A4 scope:global -GetShiftPoint__C13EngineTraffic6GearIDT1 = .text:0x8025D550; // type:function size:0x48 scope:global -__Q211DrawVehicle4PartP6IModelUiPCQ217CollisionGeometry6BoundsPCQ26Attrib10CollectionG6UCrc32 = .text:0x8025D598; // type:function size:0x110 scope:global -_._Q211DrawVehicle4Part = .text:0x8025D6A8; // type:function size:0x104 scope:global -GetTransform__CQ211DrawVehicle4PartRQ25UMath7Matrix4 = .text:0x8025D7AC; // type:function size:0xF8 scope:global -OnProcessFrame__Q211DrawVehicle4Partf = .text:0x8025D8A4; // type:function size:0xEC scope:global -RemoveTrigger__Q211DrawVehicle4Part = .text:0x8025D990; // type:function size:0x44 scope:global -CreateTrigger__Q211DrawVehicle4PartRCQ25UMath7Matrix4 = .text:0x8025D9D4; // type:function size:0x154 scope:global -OnBeginSimulation__Q211DrawVehicle4Part = .text:0x8025DB28; // type:function size:0x158 scope:global -OnDraw__Q211DrawVehicle4PartPQ23Sim6Packet = .text:0x8025DC80; // type:function size:0x1C scope:global -OnBeginDraw__Q211DrawVehicle4Part = .text:0x8025DC9C; // type:function size:0x4 scope:global -OnEndDraw__Q211DrawVehicle4Part = .text:0x8025DCA0; // type:function size:0x64 scope:global -PlaceTrigger__Q211DrawVehicle4PartRCQ25UMath7Matrix4b = .text:0x8025DD04; // type:function size:0x48 scope:global -__11DrawVehicleRC14BehaviorParams = .text:0x8025DD4C; // type:function size:0x450 scope:global -_._11DrawVehicle = .text:0x8025E19C; // type:function size:0x384 scope:global -SetCausality__11DrawVehicleP8HCAUSE__f = .text:0x8025E520; // type:function size:0xC scope:global -GetCausality__C11DrawVehicle = .text:0x8025E52C; // type:function size:0x8 scope:global -EnumerateChildren__C11DrawVehiclePQ26IModel10Enumerator = .text:0x8025E534; // type:function size:0x130 scope:global -GetChildModel__C11DrawVehicleG6UCrc32 = .text:0x8025E664; // type:function size:0xF4 scope:global -SpawnModel__11DrawVehicleG6UCrc32N21 = .text:0x8025E758; // type:function size:0x114 scope:global -ReleaseModel__11DrawVehicle = .text:0x8025E86C; // type:function size:0x38 scope:global -ReleaseChildModels__11DrawVehicle = .text:0x8025E8A4; // type:function size:0xA8 scope:global -GetName__C11DrawVehicle = .text:0x8025E94C; // type:function size:0x54 scope:global -IsHidden__C11DrawVehicle = .text:0x8025E9A0; // type:function size:0x3C scope:global -HideModel__11DrawVehicle = .text:0x8025E9DC; // type:function size:0x38 scope:global -StopEffects__11DrawVehicle = .text:0x8025EA14; // type:function size:0xA8 scope:global -PlayEffect__11DrawVehicleG6UCrc32PCQ26Attrib10CollectionRCQ25UMath7Vector3T3b = .text:0x8025EABC; // type:function size:0x198 scope:global -StopEffect__11DrawVehicleG6UCrc32 = .text:0x8025EC54; // type:function size:0xE4 scope:global -Construct__8DrawHeliRC14BehaviorParams = .text:0x8025ED38; // type:function size:0x44 scope:global -__8DrawHeliRC14BehaviorParams = .text:0x8025ED7C; // type:function size:0x220 scope:global -OnBehaviorChange__8DrawHeliRC6UCrc32 = .text:0x8025EF9C; // type:function size:0x58 scope:global -_._8DrawHeli = .text:0x8025EFF4; // type:function size:0xF8 scope:global -OnTask__8DrawHeliP10HSIMTASK__f = .text:0x8025F0EC; // type:function size:0x24C scope:global -OnService__8DrawHeliRQ210RenderConn16Pkt_Heli_Service = .text:0x8025F338; // type:function size:0xB4 scope:global -OnService__8DrawHeliP13HSIMSERVICE__PQ23Sim6Packet = .text:0x8025F3EC; // type:function size:0x84 scope:global -__7DrawCarRC14BehaviorParams14CarRenderUsage = .text:0x8025F470; // type:function size:0x25C scope:global -IsHidden__C7DrawCar = .text:0x8025F6CC; // type:function size:0x58 scope:global -HideModel__7DrawCar = .text:0x8025F724; // type:function size:0x34 scope:global -ReleaseModel__7DrawCar = .text:0x8025F758; // type:function size:0x48 scope:global -ReleaseChildModels__7DrawCar = .text:0x8025F7A0; // type:function size:0x68 scope:global -IsPartVisible__C7DrawCarRC6UCrc32 = .text:0x8025F808; // type:function size:0x70 scope:global -HidePart__7DrawCarRC6UCrc32 = .text:0x8025F878; // type:function size:0x150 scope:global -ShowPart__7DrawCarRC6UCrc32 = .text:0x8025F9C8; // type:function size:0x10C scope:global -OnBehaviorChange__7DrawCarRC6UCrc32 = .text:0x8025FAD4; // type:function size:0x104 scope:global -_._7DrawCar = .text:0x8025FBD8; // type:function size:0x118 scope:global -OnService__7DrawCarRQ210RenderConn15Pkt_Car_Service = .text:0x8025FCF0; // type:function size:0x684 scope:global -OnService__7DrawCarP13HSIMSERVICE__PQ23Sim6Packet = .text:0x80260374; // type:function size:0x8C scope:global -Construct__11DrawTrafficRC14BehaviorParams = .text:0x80260400; // type:function size:0x44 scope:global -__11DrawTrafficRC14BehaviorParams = .text:0x80260444; // type:function size:0x70 scope:global -__18DrawPerformanceCarRC14BehaviorParams14CarRenderUsage = .text:0x802604B4; // type:function size:0x9C scope:global -OnBehaviorChange__18DrawPerformanceCarRC6UCrc32 = .text:0x80260550; // type:function size:0x80 scope:global -OnService__18DrawPerformanceCarRQ210RenderConn15Pkt_Car_Service = .text:0x802605D0; // type:function size:0x290 scope:global -Construct__10DrawNISCarRC14BehaviorParams = .text:0x80260860; // type:function size:0x44 scope:global -__10DrawNISCarRC14BehaviorParams = .text:0x802608A4; // type:function size:0x70 scope:global -Construct__10DrawCopCarRC14BehaviorParams = .text:0x80260914; // type:function size:0x44 scope:global -__10DrawCopCarRC14BehaviorParams = .text:0x80260958; // type:function size:0x70 scope:global -Construct__11DrawRaceCarRC14BehaviorParams = .text:0x802609C8; // type:function size:0xDC scope:global -__11DrawRaceCarRC14BehaviorParams14CarRenderUsage = .text:0x80260AA4; // type:function size:0x84 scope:global -OnBehaviorChange__11DrawRaceCarRC6UCrc32 = .text:0x80260B28; // type:function size:0x68 scope:global -OnService__11DrawRaceCarRQ210RenderConn15Pkt_Car_Service = .text:0x80260B90; // type:function size:0x58 scope:global -__8SoundCarRC14BehaviorParamsQ25Sound7Context = .text:0x80260BE8; // type:function size:0x3C0 scope:global -_._8SoundCar = .text:0x80260FA8; // type:function size:0xF8 scope:global -OnService__8SoundCarRQ29SoundConn15Pkt_Car_Service = .text:0x802610A0; // type:function size:0x700 scope:global -OnBehaviorChange__8SoundCarRC6UCrc32 = .text:0x802617A0; // type:function size:0x160 scope:global -OnService__8SoundCarP13HSIMSERVICE__PQ23Sim6Packet = .text:0x80261900; // type:function size:0x80 scope:global -__12SoundTrafficRC14BehaviorParamsQ25Sound7Context = .text:0x80261980; // type:function size:0x70 scope:global -Construct__12SoundTrafficRC14BehaviorParams = .text:0x802619F0; // type:function size:0xDC scope:global -LocateTrailer__12SoundTraffic = .text:0x80261ACC; // type:function size:0xB0 scope:global -OnBehaviorChange__12SoundTrafficRC6UCrc32 = .text:0x80261B7C; // type:function size:0x50 scope:global -OnService__12SoundTrafficRQ29SoundConn15Pkt_Car_Service = .text:0x80261BCC; // type:function size:0x38 scope:global -__8SoundCopRC14BehaviorParams = .text:0x80261C04; // type:function size:0x94 scope:global -Construct__8SoundCopRC14BehaviorParams = .text:0x80261C98; // type:function size:0x44 scope:global -OnBehaviorChange__8SoundCopRC6UCrc32 = .text:0x80261CDC; // type:function size:0x90 scope:global -OnService__8SoundCopRQ29SoundConn15Pkt_Car_Service = .text:0x80261D6C; // type:function size:0xDC scope:global -__10SoundRacerRC14BehaviorParamsQ25Sound7Context = .text:0x80261E48; // type:function size:0x90 scope:global -Construct__10SoundRacerRC14BehaviorParams = .text:0x80261ED8; // type:function size:0xB4 scope:global -OnServiceTire__10SoundRacerRQ29SoundConn15Pkt_Car_ServiceUiQ25Sound11WheelConfig = .text:0x80261F8C; // type:function size:0x5C scope:global -OnService__10SoundRacerRQ29SoundConn15Pkt_Car_Service = .text:0x80261FE8; // type:function size:0x90 scope:global -OnBehaviorChange__10SoundRacerRC6UCrc32 = .text:0x80262078; // type:function size:0x90 scope:global -Construct__8ResetCarRC14BehaviorParams = .text:0x80262108; // type:function size:0x44 scope:global -__8ResetCarRC14BehaviorParams = .text:0x8026214C; // type:function size:0x13C scope:global -_._8ResetCar = .text:0x80262288; // type:function size:0xF0 scope:global -OnBehaviorChange__8ResetCarRC6UCrc32 = .text:0x80262378; // type:function size:0xA4 scope:global -ValidTerrain__C8ResetCarUi = .text:0x8026241C; // type:function size:0x110 scope:global -CanRecord__C8ResetCar = .text:0x8026252C; // type:function size:0xF4 scope:global -ShouldReset__C8ResetCar = .text:0x80262620; // type:function size:0x90 scope:global -TrackState__8ResetCarf = .text:0x802626B0; // type:function size:0x13C scope:global -CheckZone__8ResetCar18eTrackPathZoneType = .text:0x802627EC; // type:function size:0x17C scope:global -Check__8ResetCarf = .text:0x80262968; // type:function size:0x190 scope:global -OnTask__8ResetCarP10HSIMTASK__f = .text:0x80262AF8; // type:function size:0x44 scope:global -Reset__8ResetCar = .text:0x80262B3C; // type:function size:0x74 scope:global -ResetTo__8ResetCarRCQ25UMath7Vector3T1b = .text:0x80262BB0; // type:function size:0x150 scope:global -FindNearestRoad__C8ResetCarP11ResetCookie = .text:0x80262D00; // type:function size:0x33C scope:global -ResetVehicle__8ResetCarb = .text:0x8026303C; // type:function size:0x204 scope:global -Construct__9SoundHeliRC14BehaviorParams = .text:0x80263240; // type:function size:0x44 scope:global -__9SoundHeliRC14BehaviorParams = .text:0x80263284; // type:function size:0x120 scope:global -_._9SoundHeli = .text:0x802633A4; // type:function size:0xCC scope:global -OnService__9SoundHeliRQ29SoundConn15Pkt_Car_Service = .text:0x80263470; // type:function size:0x4 scope:global -OnBehaviorChange__9SoundHeliRC6UCrc32 = .text:0x80263474; // type:function size:0x4 scope:global -OnService__9SoundHeliP13HSIMSERVICE__PQ23Sim6Packet = .text:0x80263478; // type:function size:0x48 scope:global -__10SpikeStripRC14BehaviorParams = .text:0x802634C0; // type:function size:0x84 scope:global -OnBehaviorChange__10SpikeStripRC6UCrc32 = .text:0x80263544; // type:function size:0x78 scope:global -SetupBody__10SpikeStrip = .text:0x802635BC; // type:function size:0x44 scope:global -OnCollide__10SpikeStripRCQ38Dynamics9Collision8GeometryP10IRigidBodyf = .text:0x80263600; // type:function size:0x1FC scope:global -OnTaskSimulate__10SpikeStripf = .text:0x802637FC; // type:function size:0x2E4 scope:global -_Alloc__t10ScratchPtr1ZQ29RigidBody8Volatile = .text:0x80263AE0; // type:function size:0x6C scope:global -__t10ScratchPtr1ZQ29RigidBody8Volatile = .text:0x80263B4C; // type:function size:0x4C scope:global -_._t10ScratchPtr1ZQ29RigidBody8Volatile = .text:0x80263B98; // type:function size:0x34 scope:global -__less__H1Z15CollisionPacket_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x80263BCC; // type:function size:0xC scope:global -__adjust_heap__H4ZP15CollisionPacketZiZ15CollisionPacketZQ24_STLt4less1Z15CollisionPacket_4_STLX01X11X11X21X31_v = .text:0x80263BD8; // type:function size:0x248 scope:global -make_heap__H2ZP15CollisionPacketZQ24_STLt4less1Z15CollisionPacket_4_STLX01X01X11_v = .text:0x80263E20; // type:function size:0xE8 scope:global -pop_heap__H2ZP15CollisionPacketZQ24_STLt4less1Z15CollisionPacket_4_STLX01X01X11_v = .text:0x80263F08; // type:function size:0x138 scope:global -__partial_sort__H3ZP15CollisionPacketZ15CollisionPacketZQ24_STLt4less1Z15CollisionPacket_4_STLX01X01X01PX11X21_v = .text:0x80264040; // type:function size:0x1D8 scope:global -partial_sort__H2ZP15CollisionPacketZQ24_STLt4less1Z15CollisionPacket_4_STLX01X01X01X11_v = .text:0x80264218; // type:function size:0x30 scope:global -__unguarded_partition__H3ZP15CollisionPacketZ15CollisionPacketZQ24_STLt4less1Z15CollisionPacket_4_STLX01X01X11X21_X01 = .text:0x80264248; // type:function size:0x144 scope:global -__introsort_loop__H4ZP15CollisionPacketZ15CollisionPacketZiZQ24_STLt4less1Z15CollisionPacket_4_STLX01X01PX11X21X31_v = .text:0x8026438C; // type:function size:0x1A0 scope:global -__unguarded_linear_insert__H3ZP15CollisionPacketZ15CollisionPacketZQ24_STLt4less1Z15CollisionPacket_4_STLX01X11X21_v = .text:0x8026452C; // type:function size:0xB0 scope:global -__insertion_sort__H2ZP15CollisionPacketZQ24_STLt4less1Z15CollisionPacket_4_STLX01X01X11_v = .text:0x802645DC; // type:function size:0x1E0 scope:global -__unguarded_insertion_sort_aux__H3ZP15CollisionPacketZ15CollisionPacketZQ24_STLt4less1Z15CollisionPacket_4_STLX01X01PX11X21_v = .text:0x802647BC; // type:function size:0xA4 scope:global -__final_insertion_sort__H2ZP15CollisionPacketZQ24_STLt4less1Z15CollisionPacket_4_STLX01X01X11_v = .text:0x80264860; // type:function size:0x88 scope:global -sort__H1ZP15CollisionPacket_4_STLX01X01_v = .text:0x802648E8; // type:function size:0xAC scope:global -Push__t10ScratchPtr1ZQ29RigidBody8VolatilePv = .text:0x80264994; // type:function size:0x4 scope:global -Pop__t10ScratchPtr1ZQ29RigidBody8Volatile = .text:0x80264998; // type:function size:0x4 scope:global -_Alloc__t10ScratchPtr1ZQ215SimpleRigidBody8Volatile = .text:0x8026499C; // type:function size:0x6C scope:global -__t10ScratchPtr1ZQ215SimpleRigidBody8Volatile = .text:0x80264A08; // type:function size:0x4C scope:global -_._t10ScratchPtr1ZQ215SimpleRigidBody8Volatile = .text:0x80264A54; // type:function size:0x34 scope:global -Push__t10ScratchPtr1ZQ215SimpleRigidBody8VolatilePv = .text:0x80264A88; // type:function size:0x4 scope:global -Pop__t10ScratchPtr1ZQ215SimpleRigidBody8Volatile = .text:0x80264A8C; // type:function size:0x4 scope:global -Get__H1Z19EffectLinkageRecord_CQ26Attrib9AttributeUi_RCX01 = .text:0x80264A90; // type:function size:0x50 scope:global -clear__Q24_STLt10_List_base2Z6UCrc32ZQ33UTL3Stdt9Allocator2Z6UCrc32Z10_type_list = .text:0x80264AE0; // type:function size:0x78 scope:global -clear__Q24_STLt10_List_base2ZPQ211DrawVehicle6EffectZQ33UTL3Stdt9Allocator2ZPQ211DrawVehicle6EffectZ10_type_list = .text:0x80264B58; // type:function size:0x78 scope:global -_M_erase__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZiZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZiZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2ZiZ9_type_mapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZC6UCrc32Zi = .text:0x80264BD0; // type:function size:0x68 scope:global -_M_insert__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZiZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZiZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2ZiZ9_type_mapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZC6UCrc32ZiT1 = .text:0x80264C38; // type:function size:0x13C scope:global -insert_unique__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZiZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZiZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2ZiZ9_type_mapRCQ24_STLt4pair2ZC6UCrc32Zi = .text:0x80264D74; // type:function size:0x118 scope:global -insert_unique__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZiZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZiZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2ZiZ9_type_mapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZC6UCrc32ZiZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZC6UCrc32ZiRCQ24_STLt4pair2ZC6UCrc32Zi = .text:0x80264E8C; // type:function size:0x26C scope:global -__static_initialization_and_destruction_0 = .text:0x802650F8; // type:function size:0x1170 scope:local -_._13EffectsPlayer = .text:0x80266268; // type:function size:0x80 scope:global -_._14EngineDragster = .text:0x802662E8; // type:function size:0x104 scope:global -_._12IInputPlayer = .text:0x802663EC; // type:function size:0x160 scope:global -_._13ITransmission = .text:0x8026654C; // type:function size:0x54 scope:global -_IHandle__17IDragTransmission = .text:0x802665A0; // type:function size:0xC scope:global -_IHandle__10ITiptronic = .text:0x802665AC; // type:function size:0xC scope:global -_._10ITiptronic = .text:0x802665B8; // type:function size:0x54 scope:global -_IHandle__11IInductable = .text:0x8026660C; // type:function size:0xC scope:global -_._11IInductable = .text:0x80266618; // type:function size:0x54 scope:global -_._7IEngine = .text:0x8026666C; // type:function size:0x54 scope:global -_IHandle__11IDragEngine = .text:0x802666C0; // type:function size:0xC scope:global -_._11IDragEngine = .text:0x802666CC; // type:function size:0x54 scope:global -_._11IRaceEngine = .text:0x80266720; // type:function size:0x54 scope:global -_._19IArticulatedVehicle = .text:0x80266774; // type:function size:0x54 scope:global -ClassKey__Q36Attrib3Gen12chopperspecs = .text:0x802667C8; // type:function size:0xC scope:global -ClassKey__Q36Attrib3Gen11damagespecs = .text:0x802667D4; // type:function size:0xC scope:global -ClassKey__Q36Attrib3Gen5tires = .text:0x802667E0; // type:function size:0xC scope:global -ClassKey__Q36Attrib3Gen7chassis = .text:0x802667EC; // type:function size:0xC scope:global -ClassKey__Q36Attrib3Gen6brakes = .text:0x802667F8; // type:function size:0xC scope:global -ClassKey__Q36Attrib3Gen6engine = .text:0x80266804; // type:function size:0xC scope:global -ClassKey__Q36Attrib3Gen12transmission = .text:0x80266810; // type:function size:0xC scope:global -ClassKey__Q36Attrib3Gen9induction = .text:0x8026681C; // type:function size:0xC scope:global -ClassKey__Q36Attrib3Gen3nos = .text:0x80266828; // type:function size:0xC scope:global -_._14ICollisionBody = .text:0x80266834; // type:function size:0x160 scope:global -_._11ISimpleBody = .text:0x80266994; // type:function size:0x160 scope:global -_._10IRigidBody = .text:0x80266AF4; // type:function size:0x160 scope:global -_._15IDynamicsEntity = .text:0x80266C54; // type:function size:0x60 scope:global -IsModeling__C9RigidBody = .text:0x80266CB4; // type:function size:0x20 scope:global -IsSleeping__C9RigidBody = .text:0x80266CD4; // type:function size:0x1C scope:global -GetWorldMomentScale__C9RigidBody = .text:0x80266CF0; // type:function size:0xC scope:global -GetGroundMomentScale__C9RigidBody = .text:0x80266CFC; // type:function size:0xC scope:global -SetCenterOfGravity__9RigidBodyRCQ25UMath7Vector3 = .text:0x80266D08; // type:function size:0x20 scope:global -GetCenterOfGravity__C9RigidBody = .text:0x80266D28; // type:function size:0x8 scope:global -HasHadCollision__C9RigidBody = .text:0x80266D30; // type:function size:0x2C scope:global -HasHadWorldCollision__C9RigidBody = .text:0x80266D5C; // type:function size:0x2C scope:global -HasHadObjectCollision__C9RigidBody = .text:0x80266D88; // type:function size:0x2C scope:global -IsAttachedToWorld__C9RigidBody = .text:0x80266DB4; // type:function size:0x2C scope:global -IsAnchored__C9RigidBody = .text:0x80266DE0; // type:function size:0x2C scope:global -SetAnchored__9RigidBodyb = .text:0x80266E0C; // type:function size:0x48 scope:global -GetInertiaTensor__C9RigidBody = .text:0x80266E54; // type:function size:0x10 scope:global -IsInGroundContact__C9RigidBody = .text:0x80266E64; // type:function size:0x20 scope:global -GetNumContactPoints__C9RigidBody = .text:0x80266E84; // type:function size:0x14 scope:global -GetGroundNormal__C9RigidBody = .text:0x80266E98; // type:function size:0x8 scope:global -SetForce__9RigidBodyRCQ25UMath7Vector3 = .text:0x80266EA0; // type:function size:0x28 scope:global -GetForce__C9RigidBody = .text:0x80266EC8; // type:function size:0x10 scope:global -GetTorque__C9RigidBody = .text:0x80266ED8; // type:function size:0x10 scope:global -SetTorque__9RigidBodyRCQ25UMath7Vector3 = .text:0x80266EE8; // type:function size:0x28 scope:global -GetGravity__C9RigidBody = .text:0x80266F10; // type:function size:0xC scope:global -GetRightVector__C9RigidBody = .text:0x80266F1C; // type:function size:0x10 scope:global -GetUpVector__C9RigidBody = .text:0x80266F2C; // type:function size:0x10 scope:global -GetForwardVector__C9RigidBody = .text:0x80266F3C; // type:function size:0x10 scope:global -GetMatrix4__C9RigidBody = .text:0x80266F4C; // type:function size:0x10 scope:global -GetRotation__C9RigidBody = .text:0x80266F5C; // type:function size:0x10 scope:global -SetRotation__9RigidBodyRCQ25UMath7Matrix4 = .text:0x80266F6C; // type:function size:0xCC scope:global -GetPrincipalInertia__C9RigidBody = .text:0x80267038; // type:function size:0x10 scope:global -GetGeometryNode__C9RigidBody = .text:0x80267048; // type:function size:0x8 scope:global -GetOwner__C9RigidBody = .text:0x80267050; // type:function size:0x8 scope:global -IsSimple__C9RigidBody = .text:0x80267058; // type:function size:0x8 scope:global -GetSimableType__C9RigidBody = .text:0x80267060; // type:function size:0x8 scope:global -GetIndex__C9RigidBody = .text:0x80267068; // type:function size:0x10 scope:global -GetRadius__C9RigidBody = .text:0x80267078; // type:function size:0x10 scope:global -GetMass__C9RigidBody = .text:0x80267088; // type:function size:0x10 scope:global -GetOOMass__C9RigidBody = .text:0x80267098; // type:function size:0x10 scope:global -GetPosition__C9RigidBody = .text:0x802670A8; // type:function size:0x10 scope:global -GetLinearVelocity__C9RigidBody = .text:0x802670B8; // type:function size:0x10 scope:global -GetAngularVelocity__C9RigidBody = .text:0x802670C8; // type:function size:0x10 scope:global -GetSpeed__C9RigidBody = .text:0x802670D8; // type:function size:0x30 scope:global -GetSpeedXZ__C9RigidBody = .text:0x80267108; // type:function size:0x38 scope:global -GetRightVector__C9RigidBodyRQ25UMath7Vector3 = .text:0x80267140; // type:function size:0x28 scope:global -GetUpVector__C9RigidBodyRQ25UMath7Vector3 = .text:0x80267168; // type:function size:0x28 scope:global -GetForwardVector__C9RigidBodyRQ25UMath7Vector3 = .text:0x80267190; // type:function size:0x28 scope:global -GetMatrix4__C9RigidBodyRQ25UMath7Matrix4 = .text:0x802671B8; // type:function size:0x74 scope:global -GetWCollider__C9RigidBody = .text:0x8026722C; // type:function size:0x8 scope:global -ModifyXPos__9RigidBodyf = .text:0x80267234; // type:function size:0x18 scope:global -ModifyYPos__9RigidBodyf = .text:0x8026724C; // type:function size:0x18 scope:global -ModifyZPos__9RigidBodyf = .text:0x80267264; // type:function size:0x18 scope:global -GetOrientation__C9RigidBody = .text:0x8026727C; // type:function size:0xC scope:global -GetDimension__C9RigidBodyRQ25UMath7Vector3 = .text:0x80267288; // type:function size:0x20 scope:global -GetDimension__C9RigidBody = .text:0x802672A8; // type:function size:0x24 scope:global -DoPenetration__9RigidBodyRC9RigidBody = .text:0x802672CC; // type:function size:0x8 scope:global -_._Q23SAPt4Grid1Z9RigidBody = .text:0x802672D4; // type:function size:0x164 scope:global -OnTaskSimulate__15SimpleRigidBodyf = .text:0x80267438; // type:function size:0x4 scope:global -Reset__15SimpleRigidBody = .text:0x8026743C; // type:function size:0x4 scope:global -ModifyFlags__15SimpleRigidBodyUiUi = .text:0x80267440; // type:function size:0x2C scope:global -CanCollideWithSRB__C15SimpleRigidBody = .text:0x8026746C; // type:function size:0x18 scope:global -CanCollideWithRB__C15SimpleRigidBody = .text:0x80267484; // type:function size:0x18 scope:global -CanHitTrigger__C15SimpleRigidBody = .text:0x8026749C; // type:function size:0x14 scope:global -GetCollisionMap__C15SimpleRigidBody = .text:0x802674B0; // type:function size:0x20 scope:global -GetCollisionMap__15SimpleRigidBody = .text:0x802674D0; // type:function size:0x20 scope:global -IsSimple__C15SimpleRigidBody = .text:0x802674F0; // type:function size:0x8 scope:global -GetSimableType__C15SimpleRigidBody = .text:0x802674F8; // type:function size:0x50 scope:global -GetIndex__C15SimpleRigidBody = .text:0x80267548; // type:function size:0x10 scope:global -GetRadius__C15SimpleRigidBody = .text:0x80267558; // type:function size:0x10 scope:global -GetMass__C15SimpleRigidBody = .text:0x80267568; // type:function size:0x10 scope:global -GetOOMass__C15SimpleRigidBody = .text:0x80267578; // type:function size:0x1C scope:global -GetPosition__C15SimpleRigidBody = .text:0x80267594; // type:function size:0x10 scope:global -GetLinearVelocity__C15SimpleRigidBody = .text:0x802675A4; // type:function size:0x10 scope:global -GetAngularVelocity__C15SimpleRigidBody = .text:0x802675B4; // type:function size:0x10 scope:global -GetSpeed__C15SimpleRigidBody = .text:0x802675C4; // type:function size:0x40 scope:global -GetSpeedXZ__C15SimpleRigidBody = .text:0x80267604; // type:function size:0x4C scope:global -GetWCollider__C15SimpleRigidBody = .text:0x80267650; // type:function size:0x8 scope:global -SetPosition__15SimpleRigidBodyRCQ25UMath7Vector3 = .text:0x80267658; // type:function size:0x28 scope:global -SetLinearVelocity__15SimpleRigidBodyRCQ25UMath7Vector3 = .text:0x80267680; // type:function size:0x28 scope:global -SetAngularVelocity__15SimpleRigidBodyRCQ25UMath7Vector3 = .text:0x802676A8; // type:function size:0x28 scope:global -SetRadius__15SimpleRigidBodyf = .text:0x802676D0; // type:function size:0x10 scope:global -SetMass__15SimpleRigidBodyf = .text:0x802676E0; // type:function size:0x10 scope:global -ModifyXPos__15SimpleRigidBodyf = .text:0x802676F0; // type:function size:0x18 scope:global -ModifyYPos__15SimpleRigidBodyf = .text:0x80267708; // type:function size:0x18 scope:global -ModifyZPos__15SimpleRigidBodyf = .text:0x80267720; // type:function size:0x18 scope:global -ResolveTorque__15SimpleRigidBodyRCQ25UMath7Vector3T1 = .text:0x80267738; // type:function size:0x4 scope:global -GetMatrix4__C15SimpleRigidBodyRQ25UMath7Matrix4 = .text:0x8026773C; // type:function size:0x20 scope:global -GetOrientation__C15SimpleRigidBody = .text:0x8026775C; // type:function size:0xC scope:global -GetDimension__C15SimpleRigidBodyRQ25UMath7Vector3 = .text:0x80267768; // type:function size:0x1C scope:global -GetDimension__C15SimpleRigidBody = .text:0x80267784; // type:function size:0x44 scope:global -HasHadCollision__C15SimpleRigidBody = .text:0x802677C8; // type:function size:0x8 scope:global -Debug__15SimpleRigidBody = .text:0x802677D0; // type:function size:0x4 scope:global -_._11IDamageable = .text:0x802677D4; // type:function size:0x54 scope:global -_._18IDamageableVehicle = .text:0x80267828; // type:function size:0x54 scope:global -_IHandle__6IModel = .text:0x8026787C; // type:function size:0xC scope:global -_._6IModel = .text:0x80267888; // type:function size:0x214 scope:global -_._9RBVehicle = .text:0x80267A9C; // type:function size:0x100 scope:global -SetCollisionMass__9RBVehiclef = .text:0x80267B9C; // type:function size:0x8 scope:global -SetCollisionCOG__9RBVehicleRCQ25UMath7Vector3 = .text:0x80267BA4; // type:function size:0x20 scope:global -SetPlayerReactions__9RBVehicleRCQ36Attrib3Gen18collisionreactions = .text:0x80267BC4; // type:function size:0x24 scope:global -GetPlayerReactions__C9RBVehicle = .text:0x80267BE8; // type:function size:0x8 scope:global -EnableObjectCollisions__9RBVehicleb = .text:0x80267BF0; // type:function size:0x8 scope:global -SetInvulnerability__9RBVehicle16eInvulnerablitiyf = .text:0x80267BF8; // type:function size:0xC scope:global -GetInvulnerability__C9RBVehicle = .text:0x80267C04; // type:function size:0x8 scope:global -DoPenetration__9RBVehicleRC9RigidBody = .text:0x80267C0C; // type:function size:0x48 scope:global -SetInvulnerability__9RBTractor16eInvulnerablitiyf = .text:0x80267C54; // type:function size:0xAC scope:global -GetTrailer__C9RBTractor = .text:0x80267D00; // type:function size:0x8 scope:global -IsHitched__C9RBTractor = .text:0x80267D08; // type:function size:0x8 scope:global -GetCacheName__C9RBTractor = .text:0x80267D10; // type:function size:0xC scope:global -_._9RBTrailer = .text:0x80267D1C; // type:function size:0xC8 scope:global -_._t16BehaviorSpecsPtr1ZQ36Attrib3Gen11damagespecs = .text:0x80267DE4; // type:function size:0x7C scope:global -IsLightDamaged__C13DamageVehicleQ29VehicleFX2ID = .text:0x80267E60; // type:function size:0x6C scope:global -DamageLight__13DamageVehicleQ29VehicleFX2IDb = .text:0x80267ECC; // type:function size:0x70 scope:global -GetHealth__C13DamageVehicle = .text:0x80267F3C; // type:function size:0x44 scope:global -GetZoneDamage__C13DamageVehicle = .text:0x80267F80; // type:function size:0x10 scope:global -InShock__C13DamageVehicle = .text:0x80267F90; // type:function size:0x8 scope:global -IsDestroyed__C13DamageVehicle = .text:0x80267F98; // type:function size:0x20 scope:global -CanDamageVisuals__C13DamageVehicle = .text:0x80267FB8; // type:function size:0x8 scope:global -Find__C12EffectLookupUiRCQ26Attrib9Attribute = .text:0x80267FC0; // type:function size:0x64 scope:global -_._14EffectsVehicle = .text:0x80268024; // type:function size:0x80 scope:global -Construct__14EffectsVehicleRC14BehaviorParams = .text:0x802680A4; // type:function size:0x44 scope:global -_._10EffectsCar = .text:0x802680E8; // type:function size:0x80 scope:global -Construct__10EffectsCarRC14BehaviorParams = .text:0x80268168; // type:function size:0x44 scope:global -Construct__13EffectsPlayerRC14BehaviorParams = .text:0x802681AC; // type:function size:0x44 scope:global -_._16EffectsSmackable = .text:0x802681F0; // type:function size:0x80 scope:global -Construct__16EffectsSmackableRC14BehaviorParams = .text:0x80268270; // type:function size:0x44 scope:global -_._15EffectsFragment = .text:0x802682B4; // type:function size:0x80 scope:global -Construct__15EffectsFragmentRC14BehaviorParams = .text:0x80268334; // type:function size:0x44 scope:global -_._Q210RenderConn12Pkt_Car_Open = .text:0x80268378; // type:function size:0x34 scope:global -ConnectionClass__Q210RenderConn12Pkt_Car_Open = .text:0x802683AC; // type:function size:0x64 scope:global -Size__Q210RenderConn12Pkt_Car_Open = .text:0x80268410; // type:function size:0x8 scope:global -Type__Q210RenderConn12Pkt_Car_Open = .text:0x80268418; // type:function size:0x20 scope:global -_._Q210RenderConn13Pkt_Heli_Open = .text:0x80268438; // type:function size:0x34 scope:global -ConnectionClass__Q210RenderConn13Pkt_Heli_Open = .text:0x8026846C; // type:function size:0x64 scope:global -Size__Q210RenderConn13Pkt_Heli_Open = .text:0x802684D0; // type:function size:0x8 scope:global -Type__Q210RenderConn13Pkt_Heli_Open = .text:0x802684D8; // type:function size:0x20 scope:global -_._Q210RenderConn24Pkt_VehicleFragment_Open = .text:0x802684F8; // type:function size:0x34 scope:global -ConnectionClass__Q210RenderConn24Pkt_VehicleFragment_Open = .text:0x8026852C; // type:function size:0x64 scope:global -Size__Q210RenderConn24Pkt_VehicleFragment_Open = .text:0x80268590; // type:function size:0x8 scope:global -Type__Q210RenderConn24Pkt_VehicleFragment_Open = .text:0x80268598; // type:function size:0x20 scope:global -_IHandle__10ISpikeable = .text:0x802685B8; // type:function size:0xC scope:global -_._10ISpikeable = .text:0x802685C4; // type:function size:0x160 scope:global -ClassKey__Q36Attrib3Gen7effects = .text:0x80268724; // type:function size:0xC scope:global -_._14DamageDragster = .text:0x80268730; // type:function size:0xB0 scope:global -SetControlSteering__6PInputf = .text:0x802687E0; // type:function size:0x8 scope:global -SetControlGas__6PInputf = .text:0x802687E8; // type:function size:0x8 scope:global -SetControlBrake__6PInputf = .text:0x802687F0; // type:function size:0x8 scope:global -GetControls__C6PInput = .text:0x802687F8; // type:function size:0x8 scope:global -SetControlHandBrake__6PInputf = .text:0x80268800; // type:function size:0x8 scope:global -GetControlHandBrake__C6PInput = .text:0x80268808; // type:function size:0x20 scope:global -SetControlActionButton__6PInputb = .text:0x80268828; // type:function size:0x8 scope:global -GetControlActionButton__C6PInput = .text:0x80268830; // type:function size:0x18 scope:global -SetControlSteeringVertical__6PInputf = .text:0x80268848; // type:function size:0x8 scope:global -SetControlBanking__6PInputf = .text:0x80268850; // type:function size:0x8 scope:global -GetControlBanking__6PInput = .text:0x80268858; // type:function size:0x8 scope:global -SetControlNOS__6PInputb = .text:0x80268860; // type:function size:0x8 scope:global -IsLookBackButtonPressed__C6PInput = .text:0x80268868; // type:function size:0x8 scope:global -IsPullBackButtonPressed__C6PInput = .text:0x80268870; // type:function size:0x8 scope:global -IsAutomaticShift__C6PInput = .text:0x80268878; // type:function size:0x8 scope:global -SetControlStrafeVertical__6PInputf = .text:0x80268880; // type:function size:0x8 scope:global -SetControlStrafeHorizontal__6PInputf = .text:0x80268888; // type:function size:0x8 scope:global -IsBlocked__C11InputPlayer = .text:0x80268890; // type:function size:0x8 scope:global -IsLookBackButtonPressed__C11InputPlayer = .text:0x80268898; // type:function size:0x1C scope:global -IsPullBackButtonPressed__C11InputPlayer = .text:0x802688B4; // type:function size:0x1C scope:global -OnAction__11InputPlayerRC9ActionRef = .text:0x802688D0; // type:function size:0x8 scope:global -_._15InputPlayerDrag = .text:0x802688D8; // type:function size:0x8C scope:global -Construct__15InputPlayerDragRC14BehaviorParams = .text:0x80268964; // type:function size:0x44 scope:global -_._8InputNIS = .text:0x802689A8; // type:function size:0x80 scope:global -Construct__8InputNISRC14BehaviorParams = .text:0x80268A28; // type:function size:0x44 scope:global -_._t16BehaviorSpecsPtr1ZQ36Attrib3Gen7chassis = .text:0x80268A6C; // type:function size:0x7C scope:global -_._7Chassis = .text:0x80268AE8; // type:function size:0xC4 scope:global -_._5Wheel = .text:0x80268BAC; // type:function size:0x60 scope:global -_._t16BehaviorSpecsPtr1ZQ36Attrib3Gen5tires = .text:0x80268C0C; // type:function size:0x7C scope:global -_._t16BehaviorSpecsPtr1ZQ36Attrib3Gen6brakes = .text:0x80268C88; // type:function size:0x7C scope:global -_._t16BehaviorSpecsPtr1ZQ36Attrib3Gen12transmission = .text:0x80268D04; // type:function size:0x7C scope:global -GetWheelTraction__C15SuspensionRacerUi = .text:0x80268D80; // type:function size:0x14 scope:global -GetWheelRadius__C15SuspensionRacerUi = .text:0x80268D94; // type:function size:0x14 scope:global -GetWheelSlip__C15SuspensionRacerUi = .text:0x80268DA8; // type:function size:0x14 scope:global -GetToleratedSlip__C15SuspensionRacerUi = .text:0x80268DBC; // type:function size:0x14 scope:global -GetWheelSkid__C15SuspensionRacerUi = .text:0x80268DD0; // type:function size:0x14 scope:global -GetWheelLoad__C15SuspensionRacerUi = .text:0x80268DE4; // type:function size:0x14 scope:global -SetWheelAngularVelocity__15SuspensionRacerif = .text:0x80268DF8; // type:function size:0x14 scope:global -GetNumWheels__C15SuspensionRacer = .text:0x80268E0C; // type:function size:0x8 scope:global -GetWheelPos__C15SuspensionRacerUi = .text:0x80268E14; // type:function size:0x14 scope:global -GetWheelLocalPos__C15SuspensionRacerUi = .text:0x80268E28; // type:function size:0x14 scope:global -ApplyVehicleEntryForces__15SuspensionRacerbRCQ25UMath7Vector3T1 = .text:0x80268E3C; // type:function size:0x4 scope:global -GetWheelRoadHeight__C15SuspensionRacerUi = .text:0x80268E40; // type:function size:0x14 scope:global -GetCompression__C15SuspensionRacerUi = .text:0x80268E54; // type:function size:0x14 scope:global -GetWheelRoadNormal__C15SuspensionRacerUi = .text:0x80268E68; // type:function size:0x14 scope:global -IsWheelOnGround__C15SuspensionRacerUi = .text:0x80268E7C; // type:function size:0x28 scope:global -GetWheelRoadSurface__C15SuspensionRacerUi = .text:0x80268EA4; // type:function size:0x14 scope:global -GetWheelVelocity__C15SuspensionRacerUi = .text:0x80268EB8; // type:function size:0x14 scope:global -GetNumWheelsOnGround__C15SuspensionRacer = .text:0x80268ECC; // type:function size:0x8 scope:global -GetWheelSteer__C15SuspensionRacerUi = .text:0x80268ED4; // type:function size:0x30 scope:global -GetMaxSteering__C15SuspensionRacer = .text:0x80268F04; // type:function size:0x14 scope:global -GetWheelSlipAngle__C15SuspensionRacerUi = .text:0x80268F18; // type:function size:0x14 scope:global -Reset__Q215SuspensionRacer8Steering = .text:0x80268F2C; // type:function size:0x88 scope:global -GetWheelAngularVelocity__C17SuspensionTraffici = .text:0x80268FB4; // type:function size:0x14 scope:global -GetWheelRadius__C17SuspensionTrafficUi = .text:0x80268FC8; // type:function size:0x14 scope:global -GetWheelSlip__C17SuspensionTrafficUi = .text:0x80268FDC; // type:function size:0x14 scope:global -GetToleratedSlip__C17SuspensionTrafficUi = .text:0x80268FF0; // type:function size:0xC scope:global -GetWheelSkid__C17SuspensionTrafficUi = .text:0x80268FFC; // type:function size:0x14 scope:global -GetWheelLoad__C17SuspensionTrafficUi = .text:0x80269010; // type:function size:0x14 scope:global -GetWheelTraction__C17SuspensionTrafficUi = .text:0x80269024; // type:function size:0x2C scope:global -SetWheelAngularVelocity__17SuspensionTrafficif = .text:0x80269050; // type:function size:0x4 scope:global -GetNumWheels__C17SuspensionTraffic = .text:0x80269054; // type:function size:0x8 scope:global -GetWheelPos__C17SuspensionTrafficUi = .text:0x8026905C; // type:function size:0x14 scope:global -GetWheelLocalPos__C17SuspensionTrafficUi = .text:0x80269070; // type:function size:0x14 scope:global -ApplyVehicleEntryForces__17SuspensionTrafficbRCQ25UMath7Vector3T1 = .text:0x80269084; // type:function size:0x4 scope:global -GetWheelRoadHeight__C17SuspensionTrafficUi = .text:0x80269088; // type:function size:0x14 scope:global -GetCompression__C17SuspensionTrafficUi = .text:0x8026909C; // type:function size:0x14 scope:global -GetWheelRoadNormal__C17SuspensionTrafficUi = .text:0x802690B0; // type:function size:0x14 scope:global -IsWheelOnGround__C17SuspensionTrafficUi = .text:0x802690C4; // type:function size:0x28 scope:global -GetWheelRoadSurface__C17SuspensionTrafficUi = .text:0x802690EC; // type:function size:0x14 scope:global -GetWheelVelocity__C17SuspensionTrafficUi = .text:0x80269100; // type:function size:0x14 scope:global -GetNumWheelsOnGround__C17SuspensionTraffic = .text:0x80269114; // type:function size:0x8 scope:global -GetWheelSteer__C17SuspensionTrafficUi = .text:0x8026911C; // type:function size:0x14 scope:global -GetMaxSteering__C17SuspensionTraffic = .text:0x80269130; // type:function size:0x14 scope:global -GetWheelSlipAngle__C17SuspensionTrafficUi = .text:0x80269144; // type:function size:0x14 scope:global -GetWheelTraction__C16SuspensionSimpleUi = .text:0x80269158; // type:function size:0x14 scope:global -GetWheelAngularVelocity__C16SuspensionSimplei = .text:0x8026916C; // type:function size:0x14 scope:global -GetWheelRadius__C16SuspensionSimpleUi = .text:0x80269180; // type:function size:0x14 scope:global -GetWheelSlip__C16SuspensionSimpleUi = .text:0x80269194; // type:function size:0x14 scope:global -GetToleratedSlip__C16SuspensionSimpleUi = .text:0x802691A8; // type:function size:0x14 scope:global -GetWheelLoad__C16SuspensionSimpleUi = .text:0x802691BC; // type:function size:0x14 scope:global -GetWheelSkid__C16SuspensionSimpleUi = .text:0x802691D0; // type:function size:0x14 scope:global -SetWheelAngularVelocity__16SuspensionSimpleif = .text:0x802691E4; // type:function size:0x14 scope:global -GetNumWheels__C16SuspensionSimple = .text:0x802691F8; // type:function size:0x8 scope:global -GetWheelPos__C16SuspensionSimpleUi = .text:0x80269200; // type:function size:0x14 scope:global -GetWheelLocalPos__C16SuspensionSimpleUi = .text:0x80269214; // type:function size:0x14 scope:global -ApplyVehicleEntryForces__16SuspensionSimplebRCQ25UMath7Vector3T1 = .text:0x80269228; // type:function size:0x4 scope:global -GetWheelRoadHeight__C16SuspensionSimpleUi = .text:0x8026922C; // type:function size:0x14 scope:global -GetCompression__C16SuspensionSimpleUi = .text:0x80269240; // type:function size:0x14 scope:global -GetWheelRoadNormal__C16SuspensionSimpleUi = .text:0x80269254; // type:function size:0x14 scope:global -IsWheelOnGround__C16SuspensionSimpleUi = .text:0x80269268; // type:function size:0x28 scope:global -GetWheelRoadSurface__C16SuspensionSimpleUi = .text:0x80269290; // type:function size:0x14 scope:global -GetWheelVelocity__C16SuspensionSimpleUi = .text:0x802692A4; // type:function size:0x14 scope:global -GetNumWheelsOnGround__C16SuspensionSimple = .text:0x802692B8; // type:function size:0x8 scope:global -GetWheelSteer__C16SuspensionSimpleUi = .text:0x802692C0; // type:function size:0x30 scope:global -GetMaxSteering__C16SuspensionSimple = .text:0x802692F0; // type:function size:0x14 scope:global -GetWheelSlipAngle__C16SuspensionSimpleUi = .text:0x80269304; // type:function size:0x14 scope:global -GetWheelAngularVelocity__C17SuspensionTraileri = .text:0x80269318; // type:function size:0x14 scope:global -GetWheelRadius__C17SuspensionTrailerUi = .text:0x8026932C; // type:function size:0x14 scope:global -GetWheelSlip__C17SuspensionTrailerUi = .text:0x80269340; // type:function size:0x14 scope:global -GetToleratedSlip__C17SuspensionTrailerUi = .text:0x80269354; // type:function size:0xC scope:global -GetWheelLoad__C17SuspensionTrailerUi = .text:0x80269360; // type:function size:0x14 scope:global -GetWheelSkid__C17SuspensionTrailerUi = .text:0x80269374; // type:function size:0x14 scope:global -GetWheelTraction__C17SuspensionTrailerUi = .text:0x80269388; // type:function size:0x2C scope:global -SetWheelAngularVelocity__17SuspensionTrailerif = .text:0x802693B4; // type:function size:0x4 scope:global -GetNumWheels__C17SuspensionTrailer = .text:0x802693B8; // type:function size:0x8 scope:global -GetWheelPos__C17SuspensionTrailerUi = .text:0x802693C0; // type:function size:0x14 scope:global -GetWheelLocalPos__C17SuspensionTrailerUi = .text:0x802693D4; // type:function size:0x14 scope:global -ApplyVehicleEntryForces__17SuspensionTrailerbRCQ25UMath7Vector3T1 = .text:0x802693E8; // type:function size:0x4 scope:global -GetWheelRoadHeight__C17SuspensionTrailerUi = .text:0x802693EC; // type:function size:0x14 scope:global -GetCompression__C17SuspensionTrailerUi = .text:0x80269400; // type:function size:0x14 scope:global -GetWheelRoadNormal__C17SuspensionTrailerUi = .text:0x80269414; // type:function size:0x14 scope:global -IsWheelOnGround__C17SuspensionTrailerUi = .text:0x80269428; // type:function size:0x28 scope:global -GetWheelRoadSurface__C17SuspensionTrailerUi = .text:0x80269450; // type:function size:0x14 scope:global -GetWheelVelocity__C17SuspensionTrailerUi = .text:0x80269464; // type:function size:0x14 scope:global -GetNumWheelsOnGround__C17SuspensionTrailer = .text:0x80269478; // type:function size:0x8 scope:global -GetWheelSteer__C17SuspensionTrailerUi = .text:0x80269480; // type:function size:0xC scope:global -GetMaxSteering__C17SuspensionTrailer = .text:0x8026948C; // type:function size:0xC scope:global -GetWheelSlipAngle__C17SuspensionTrailerUi = .text:0x80269498; // type:function size:0x38 scope:global -SetBurnout__16SuspensionSplinef = .text:0x802694D0; // type:function size:0x8 scope:global -GetBurnout__C16SuspensionSpline = .text:0x802694D8; // type:function size:0x8 scope:global -SetBrakeLock__16SuspensionSplinebT1 = .text:0x802694E0; // type:function size:0xC scope:global -SetConstraintAngle__16SuspensionSplinef = .text:0x802694EC; // type:function size:0x40 scope:global -SetSteering__16SuspensionSplineff = .text:0x8026952C; // type:function size:0x74 scope:global -SetAnimPitch__16SuspensionSplineff = .text:0x802695A0; // type:function size:0xFC scope:global -GetAnimPitch__C16SuspensionSpline = .text:0x8026969C; // type:function size:0x8 scope:global -SetAnimRoll__16SuspensionSplineff = .text:0x802696A4; // type:function size:0xFC scope:global -GetAnimRoll__C16SuspensionSpline = .text:0x802697A0; // type:function size:0x8 scope:global -SetAnimShake__16SuspensionSplineffff = .text:0x802697A8; // type:function size:0x104 scope:global -GetAnimShake__C16SuspensionSpline = .text:0x802698AC; // type:function size:0x8 scope:global -GetWheelAngularVelocity__C16SuspensionSplinei = .text:0x802698B4; // type:function size:0x14 scope:global -GetWheelRadius__C16SuspensionSplineUi = .text:0x802698C8; // type:function size:0x14 scope:global -GetWheelSlip__C16SuspensionSplineUi = .text:0x802698DC; // type:function size:0x14 scope:global -GetToleratedSlip__C16SuspensionSplineUi = .text:0x802698F0; // type:function size:0xC scope:global -GetWheelSkid__C16SuspensionSplineUi = .text:0x802698FC; // type:function size:0x14 scope:global -GetWheelLoad__C16SuspensionSplineUi = .text:0x80269910; // type:function size:0x14 scope:global -GetWheelTraction__C16SuspensionSplineUi = .text:0x80269924; // type:function size:0x30 scope:global -SetWheelAngularVelocity__16SuspensionSplineif = .text:0x80269954; // type:function size:0x4 scope:global -GetNumWheels__C16SuspensionSpline = .text:0x80269958; // type:function size:0x8 scope:global -GetWheelPos__C16SuspensionSplineUi = .text:0x80269960; // type:function size:0x14 scope:global -GetWheelLocalPos__C16SuspensionSplineUi = .text:0x80269974; // type:function size:0x14 scope:global -ApplyVehicleEntryForces__16SuspensionSplinebRCQ25UMath7Vector3T1 = .text:0x80269988; // type:function size:0x4 scope:global -GetWheelRoadHeight__C16SuspensionSplineUi = .text:0x8026998C; // type:function size:0x14 scope:global -GetCompression__C16SuspensionSplineUi = .text:0x802699A0; // type:function size:0x14 scope:global -GetWheelRoadNormal__C16SuspensionSplineUi = .text:0x802699B4; // type:function size:0x14 scope:global -IsWheelOnGround__C16SuspensionSplineUi = .text:0x802699C8; // type:function size:0x28 scope:global -GetWheelRoadSurface__C16SuspensionSplineUi = .text:0x802699F0; // type:function size:0x14 scope:global -GetWheelVelocity__C16SuspensionSplineUi = .text:0x80269A04; // type:function size:0x14 scope:global -GetNumWheelsOnGround__C16SuspensionSpline = .text:0x80269A18; // type:function size:0x8 scope:global -GetWheelSteer__C16SuspensionSplineUi = .text:0x80269A20; // type:function size:0x1C scope:global -GetMaxSteering__C16SuspensionSpline = .text:0x80269A3C; // type:function size:0x8 scope:global -GetWheelSlipAngle__C16SuspensionSplineUi = .text:0x80269A44; // type:function size:0x14 scope:global -_._t16BehaviorSpecsPtr1ZQ36Attrib3Gen3nos = .text:0x80269A58; // type:function size:0x7C scope:global -_._t16BehaviorSpecsPtr1ZQ36Attrib3Gen9induction = .text:0x80269AD4; // type:function size:0x7C scope:global -_._t16BehaviorSpecsPtr1ZQ36Attrib3Gen6engine = .text:0x80269B50; // type:function size:0x7C scope:global -GetPerfectLaunchRange__11EngineRacerRf = .text:0x80269BCC; // type:function size:0x74 scope:global -GetMaxHorsePower__C11EngineRacer = .text:0x80269C40; // type:function size:0x8 scope:global -GetMinHorsePower__C11EngineRacer = .text:0x80269C48; // type:function size:0x50 scope:global -GetRPM__C11EngineRacer = .text:0x80269C98; // type:function size:0x8 scope:global -GetMaxRPM__C11EngineRacer = .text:0x80269CA0; // type:function size:0xC scope:global -GetPeakTorqueRPM__C11EngineRacer = .text:0x80269CAC; // type:function size:0x8 scope:global -GetRedline__C11EngineRacer = .text:0x80269CB4; // type:function size:0xC scope:global -GetMinRPM__C11EngineRacer = .text:0x80269CC0; // type:function size:0xC scope:global -GetNOSCapacity__C11EngineRacer = .text:0x80269CCC; // type:function size:0x8 scope:global -GetNOSBoost__C11EngineRacer = .text:0x80269CD4; // type:function size:0x8 scope:global -IsNOSEngaged__C11EngineRacer = .text:0x80269CDC; // type:function size:0x20 scope:global -HasNOS__C11EngineRacer = .text:0x80269CFC; // type:function size:0x34 scope:global -GetNOSFlowRate__C11EngineRacer = .text:0x80269D30; // type:function size:0xC scope:global -ChargeNOS__11EngineRacerf = .text:0x80269D3C; // type:function size:0x9C scope:global -IsEngineBraking__11EngineRacer = .text:0x80269DD8; // type:function size:0x8 scope:global -IsShiftingGear__11EngineRacer = .text:0x80269DE0; // type:function size:0x1C scope:global -IsReversing__C11EngineRacer = .text:0x80269DFC; // type:function size:0x10 scope:global -InductionType__C11EngineRacer = .text:0x80269E0C; // type:function size:0x24 scope:global -GetInductionPSI__C11EngineRacer = .text:0x80269E30; // type:function size:0x8 scope:global -InductionSpool__C11EngineRacer = .text:0x80269E38; // type:function size:0x8 scope:global -GetMaxInductionPSI__C11EngineRacer = .text:0x80269E40; // type:function size:0xC scope:global -IsBlown__C11EngineRacer = .text:0x80269E4C; // type:function size:0x8 scope:global -Repair__11EngineRacer = .text:0x80269E54; // type:function size:0x18 scope:global -IsSabotaged__C11EngineRacer = .text:0x80269E6C; // type:function size:0x1C scope:global -GetDriveTorque__C11EngineRacer = .text:0x80269E88; // type:function size:0x8 scope:global -GetTopGear__C11EngineRacer = .text:0x80269E90; // type:function size:0x24 scope:global -GetGear__C11EngineRacer = .text:0x80269EB4; // type:function size:0x8 scope:global -IsGearChanging__C11EngineRacer = .text:0x80269EBC; // type:function size:0x1C scope:global -Shift__11EngineRacer6GearID = .text:0x80269ED8; // type:function size:0x24 scope:global -GetShiftStatus__C11EngineRacer = .text:0x80269EFC; // type:function size:0x8 scope:global -GetShiftPotential__C11EngineRacer = .text:0x80269F04; // type:function size:0x8 scope:global -UseRevLimiter__C11EngineRacer = .text:0x80269F0C; // type:function size:0x8 scope:global -GetNumGearRatios__C11EngineRacer = .text:0x80269F14; // type:function size:0x24 scope:global -SportShift__14EngineDragster6GearID = .text:0x80269F38; // type:function size:0x8 scope:global -GetShiftBoost__C14EngineDragster = .text:0x80269F40; // type:function size:0x8C scope:global -GetOverRev__C14EngineDragster = .text:0x80269FCC; // type:function size:0x8 scope:global -GetHeat__C14EngineDragster = .text:0x80269FD4; // type:function size:0x40 scope:global -UseRevLimiter__C14EngineDragster = .text:0x8026A014; // type:function size:0x48 scope:global -GetDriveTorque__C12EngineSpline = .text:0x8026A05C; // type:function size:0xC scope:global -GetMaxHorsePower__C12EngineSpline = .text:0x8026A068; // type:function size:0x8 scope:global -GetMinHorsePower__C12EngineSpline = .text:0x8026A070; // type:function size:0x50 scope:global -GetRPM__C12EngineSpline = .text:0x8026A0C0; // type:function size:0x8 scope:global -GetMaxRPM__C12EngineSpline = .text:0x8026A0C8; // type:function size:0xC scope:global -GetPeakTorqueRPM__C12EngineSpline = .text:0x8026A0D4; // type:function size:0x8 scope:global -GetRedline__C12EngineSpline = .text:0x8026A0DC; // type:function size:0xC scope:global -GetMinRPM__C12EngineSpline = .text:0x8026A0E8; // type:function size:0xC scope:global -GetNOSCapacity__C12EngineSpline = .text:0x8026A0F4; // type:function size:0x8 scope:global -IsNOSEngaged__C12EngineSpline = .text:0x8026A0FC; // type:function size:0x8 scope:global -HasNOS__C12EngineSpline = .text:0x8026A104; // type:function size:0x20 scope:global -GetNOSFlowRate__C12EngineSpline = .text:0x8026A124; // type:function size:0xC scope:global -ChargeNOS__12EngineSplinef = .text:0x8026A130; // type:function size:0x48 scope:global -GetNOSBoost__C12EngineSpline = .text:0x8026A178; // type:function size:0xC scope:global -IsEngineBraking__12EngineSpline = .text:0x8026A184; // type:function size:0x8 scope:global -IsShiftingGear__12EngineSpline = .text:0x8026A18C; // type:function size:0x1C scope:global -IsReversing__C12EngineSpline = .text:0x8026A1A8; // type:function size:0x10 scope:global -GetTopGear__C12EngineSpline = .text:0x8026A1B8; // type:function size:0x24 scope:global -GetGear__C12EngineSpline = .text:0x8026A1DC; // type:function size:0x8 scope:global -IsGearChanging__C12EngineSpline = .text:0x8026A1E4; // type:function size:0x1C scope:global -GetShiftStatus__C12EngineSpline = .text:0x8026A200; // type:function size:0x8 scope:global -GetShiftPotential__C12EngineSpline6GearIDf = .text:0x8026A208; // type:function size:0x8 scope:global -GetShiftPotential__C12EngineSpline = .text:0x8026A210; // type:function size:0x8 scope:global -SetNitro__12EngineSplineb = .text:0x8026A218; // type:function size:0x8 scope:global -SetNeutralRev__12EngineSplinebff = .text:0x8026A220; // type:function size:0x24 scope:global -GetNumGearRatios__C12EngineSpline = .text:0x8026A244; // type:function size:0x24 scope:global -_._t16BehaviorSpecsPtr1ZQ36Attrib3Gen12chopperspecs = .text:0x8026A268; // type:function size:0x7C scope:global -_._t16BehaviorSpecsPtr1ZQ36Attrib3Gen8pvehicle = .text:0x8026A2E4; // type:function size:0x7C scope:global -GetPower__C13SimpleChopper = .text:0x8026A360; // type:function size:0xC scope:global -GetRPM__C13SimpleChopper = .text:0x8026A36C; // type:function size:0xC scope:global -GetMaxRPM__C13SimpleChopper = .text:0x8026A378; // type:function size:0xC scope:global -GetRedline__C13SimpleChopper = .text:0x8026A384; // type:function size:0xC scope:global -GetMinRPM__C13SimpleChopper = .text:0x8026A390; // type:function size:0xC scope:global -GetMinGearRPM__C13SimpleChopperi = .text:0x8026A39C; // type:function size:0xC scope:global -MatchSpeed__13SimpleChopperf = .text:0x8026A3A8; // type:function size:0x4 scope:global -GetNOSCapacity__C13SimpleChopper = .text:0x8026A3AC; // type:function size:0xC scope:global -IsNOSEngaged__C13SimpleChopper = .text:0x8026A3B8; // type:function size:0x8 scope:global -HasNOS__C13SimpleChopper = .text:0x8026A3C0; // type:function size:0x8 scope:global -SetDesiredVelocity__13SimpleChopperRCQ25UMath7Vector3 = .text:0x8026A3C8; // type:function size:0x20 scope:global -GetDesiredVelocity__13SimpleChopperRQ25UMath7Vector3 = .text:0x8026A3E8; // type:function size:0x20 scope:global -MaxDeceleration__13SimpleChopperb = .text:0x8026A408; // type:function size:0x8 scope:global -SetDesiredFacingVector__13SimpleChopperRCQ25UMath7Vector3 = .text:0x8026A410; // type:function size:0x20 scope:global -GetDesiredFacingVector__13SimpleChopperRQ25UMath7Vector3 = .text:0x8026A430; // type:function size:0x20 scope:global -GetMinHorsePower__C13EngineTraffic = .text:0x8026A450; // type:function size:0x50 scope:global -GetRPM__C13EngineTraffic = .text:0x8026A4A0; // type:function size:0x8 scope:global -GetMaxRPM__C13EngineTraffic = .text:0x8026A4A8; // type:function size:0xC scope:global -GetPeakTorqueRPM__C13EngineTraffic = .text:0x8026A4B4; // type:function size:0x8 scope:global -GetRedline__C13EngineTraffic = .text:0x8026A4BC; // type:function size:0xC scope:global -GetMinRPM__C13EngineTraffic = .text:0x8026A4C8; // type:function size:0xC scope:global -GetNOSCapacity__C13EngineTraffic = .text:0x8026A4D4; // type:function size:0xC scope:global -IsNOSEngaged__C13EngineTraffic = .text:0x8026A4E0; // type:function size:0x8 scope:global -HasNOS__C13EngineTraffic = .text:0x8026A4E8; // type:function size:0x8 scope:global -GetNOSFlowRate__C13EngineTraffic = .text:0x8026A4F0; // type:function size:0xC scope:global -ChargeNOS__13EngineTrafficf = .text:0x8026A4FC; // type:function size:0x4 scope:global -GetNOSBoost__C13EngineTraffic = .text:0x8026A500; // type:function size:0xC scope:global -IsEngineBraking__13EngineTraffic = .text:0x8026A50C; // type:function size:0x8 scope:global -IsShiftingGear__13EngineTraffic = .text:0x8026A514; // type:function size:0x1C scope:global -IsReversing__C13EngineTraffic = .text:0x8026A530; // type:function size:0x10 scope:global -InductionType__C13EngineTraffic = .text:0x8026A540; // type:function size:0x8 scope:global -GetInductionPSI__C13EngineTraffic = .text:0x8026A548; // type:function size:0xC scope:global -InductionSpool__C13EngineTraffic = .text:0x8026A554; // type:function size:0xC scope:global -GetMaxInductionPSI__C13EngineTraffic = .text:0x8026A560; // type:function size:0xC scope:global -GetDriveTorque__C13EngineTraffic = .text:0x8026A56C; // type:function size:0x8 scope:global -GetTopGear__C13EngineTraffic = .text:0x8026A574; // type:function size:0x24 scope:global -GetGear__C13EngineTraffic = .text:0x8026A598; // type:function size:0x8 scope:global -IsGearChanging__C13EngineTraffic = .text:0x8026A5A0; // type:function size:0x1C scope:global -GetShiftStatus__C13EngineTraffic = .text:0x8026A5BC; // type:function size:0x8 scope:global -GetShiftPotential__C13EngineTraffic6GearIDf = .text:0x8026A5C4; // type:function size:0x8 scope:global -GetShiftPotential__C13EngineTraffic = .text:0x8026A5CC; // type:function size:0x8 scope:global -GetNumGearRatios__C13EngineTraffic = .text:0x8026A5D4; // type:function size:0x24 scope:global -_._Q211DrawVehicle6Effect = .text:0x8026A5F8; // type:function size:0x70 scope:global -GetModelHandle__C11DrawVehicle = .text:0x8026A668; // type:function size:0x8 scope:global -GetModel__C11DrawVehicle = .text:0x8026A670; // type:function size:0x8 scope:global -GetModel__11DrawVehicle = .text:0x8026A678; // type:function size:0x8 scope:global -OnProcessFrame__11DrawVehiclef = .text:0x8026A680; // type:function size:0x4 scope:global -GetLinearVelocity__C11DrawVehicleRQ25UMath7Vector3 = .text:0x8026A684; // type:function size:0x38 scope:global -GetAngularVelocity__C11DrawVehicleRQ25UMath7Vector3 = .text:0x8026A6BC; // type:function size:0x38 scope:global -GetTransform__C11DrawVehicleRQ25UMath7Matrix4 = .text:0x8026A6F4; // type:function size:0x38 scope:global -GetPartName__C11DrawVehicle = .text:0x8026A72C; // type:function size:0x14 scope:global -GetWorldID__C11DrawVehicle = .text:0x8026A740; // type:function size:0x38 scope:global -GetCollisionGeometry__C11DrawVehicle = .text:0x8026A778; // type:function size:0x8 scope:global -GetAttributes__C11DrawVehicle = .text:0x8026A780; // type:function size:0x38 scope:global -GetSimable__C11DrawVehicle = .text:0x8026A7B8; // type:function size:0x8 scope:global -GetRootModel__C11DrawVehicle = .text:0x8026A7C0; // type:function size:0x8 scope:global -GetParentModel__C11DrawVehicle = .text:0x8026A7C8; // type:function size:0x8 scope:global -IsRootModel__C11DrawVehicle = .text:0x8026A7D0; // type:function size:0x8 scope:global -GetEventSequencer__11DrawVehicle = .text:0x8026A7D8; // type:function size:0x38 scope:global -GetCausalityTime__C11DrawVehicle = .text:0x8026A810; // type:function size:0x8 scope:global -Attach__11DrawVehiclePQ33UTL3COM8IUnknown = .text:0x8026A818; // type:function size:0x24 scope:global -Detach__11DrawVehiclePQ33UTL3COM8IUnknown = .text:0x8026A83C; // type:function size:0x24 scope:global -IsAttached__C11DrawVehiclePCQ33UTL3COM8IUnknown = .text:0x8026A860; // type:function size:0x24 scope:global -OnAttached__11DrawVehicleP11IAttachable = .text:0x8026A884; // type:function size:0x4 scope:global -OnDetached__11DrawVehicleP11IAttachable = .text:0x8026A888; // type:function size:0x4 scope:global -GetAttachments__C11DrawVehicle = .text:0x8026A88C; // type:function size:0x8 scope:global -GetAttributes__CQ211DrawVehicle4Part = .text:0x8026A894; // type:function size:0x8 scope:global -HidePart__8DrawHeliRC6UCrc32 = .text:0x8026A89C; // type:function size:0x4 scope:global -ShowPart__8DrawHeliRC6UCrc32 = .text:0x8026A8A0; // type:function size:0x4 scope:global -IsPartVisible__C8DrawHeliRC6UCrc32 = .text:0x8026A8A4; // type:function size:0x8 scope:global -InView__C8DrawHeli = .text:0x8026A8AC; // type:function size:0x8 scope:global -IsRenderable__C8DrawHeli = .text:0x8026A8B4; // type:function size:0x30 scope:global -DistanceToView__C8DrawHeli = .text:0x8026A8E4; // type:function size:0x8 scope:global -Reset__8DrawHeli = .text:0x8026A8EC; // type:function size:0x4 scope:global -OnTaskSimulate__8DrawHelif = .text:0x8026A8F0; // type:function size:0x4 scope:global -__Q33UTL3Stdt3map3Z6UCrc32ZiZ9_type_map = .text:0x8026A8F4; // type:function size:0x74 scope:global -InView__C7DrawCar = .text:0x8026A968; // type:function size:0x8 scope:global -IsRenderable__C7DrawCar = .text:0x8026A970; // type:function size:0x30 scope:global -DistanceToView__C7DrawCar = .text:0x8026A9A0; // type:function size:0x8 scope:global -Reset__7DrawCar = .text:0x8026A9A8; // type:function size:0x4 scope:global -OnTaskSimulate__7DrawCarf = .text:0x8026A9AC; // type:function size:0x4 scope:global -_._11DrawTraffic = .text:0x8026A9B0; // type:function size:0x98 scope:global -_._18DrawPerformanceCar = .text:0x8026AA48; // type:function size:0x98 scope:global -_._10DrawNISCar = .text:0x8026AAE0; // type:function size:0x98 scope:global -_._10DrawCopCar = .text:0x8026AB78; // type:function size:0x98 scope:global -_._11DrawRaceCar = .text:0x8026AC10; // type:function size:0x98 scope:global -_._Q29SoundConn12Pkt_Car_Open = .text:0x8026ACA8; // type:function size:0x34 scope:global -ConnectionClass__Q29SoundConn12Pkt_Car_Open = .text:0x8026ACDC; // type:function size:0x64 scope:global -Size__Q29SoundConn12Pkt_Car_Open = .text:0x8026AD40; // type:function size:0x8 scope:global -Type__Q29SoundConn12Pkt_Car_Open = .text:0x8026AD48; // type:function size:0x20 scope:global -_._Q29SoundConn13Pkt_Heli_Open = .text:0x8026AD68; // type:function size:0x34 scope:global -ConnectionClass__Q29SoundConn13Pkt_Heli_Open = .text:0x8026AD9C; // type:function size:0x64 scope:global -Size__Q29SoundConn13Pkt_Heli_Open = .text:0x8026AE00; // type:function size:0x8 scope:global -Type__Q29SoundConn13Pkt_Heli_Open = .text:0x8026AE08; // type:function size:0x20 scope:global -_IHandle__9ICarAudio = .text:0x8026AE28; // type:function size:0xC scope:global -_._9ICarAudio = .text:0x8026AE34; // type:function size:0x54 scope:global -Reset__8SoundCar = .text:0x8026AE88; // type:function size:0x4 scope:global -OnTaskSimulate__8SoundCarf = .text:0x8026AE8C; // type:function size:0x4 scope:global -IsAudible__C8SoundCar = .text:0x8026AE90; // type:function size:0x30 scope:global -GetRPM__C8SoundCar = .text:0x8026AEC0; // type:function size:0x8 scope:global -OnServiceTire__8SoundCarRQ29SoundConn15Pkt_Car_ServiceUiQ25Sound11WheelConfig = .text:0x8026AEC8; // type:function size:0x4 scope:global -_._12SoundTraffic = .text:0x8026AECC; // type:function size:0x8C scope:global -_._8SoundCop = .text:0x8026AF58; // type:function size:0x8C scope:global -_._10SoundRacer = .text:0x8026AFE4; // type:function size:0x8C scope:global -HasResetPosition__8ResetCar = .text:0x8026B070; // type:function size:0x18 scope:global -SetResetPosition__8ResetCarRCQ25UMath7Vector3T1 = .text:0x8026B088; // type:function size:0x118 scope:global -ClearResetPosition__8ResetCar = .text:0x8026B1A0; // type:function size:0x14 scope:global -IsAudible__C9SoundHeli = .text:0x8026B1B4; // type:function size:0x30 scope:global -Reset__9SoundHeli = .text:0x8026B1E4; // type:function size:0x4 scope:global -OnTaskSimulate__9SoundHelif = .text:0x8026B1E8; // type:function size:0x4 scope:global -_._10SpikeStrip = .text:0x8026B1EC; // type:function size:0x74 scope:global -Reset__10SpikeStrip = .text:0x8026B260; // type:function size:0x4 scope:global -Construct__10SpikeStripRC14BehaviorParams = .text:0x8026B264; // type:function size:0x44 scope:global -SetStatus__Q29RigidBody8VolatileUi = .text:0x8026B2A8; // type:function size:0x10 scope:global -RemoveStatus__Q29RigidBody8VolatileUi = .text:0x8026B2B8; // type:function size:0x10 scope:global -GetStatus__CQ29RigidBody8VolatileUi = .text:0x8026B2C8; // type:function size:0x18 scope:global -__as__Q36Attrib3Gen18collisionreactionsRCQ26Attrib8Instance = .text:0x8026B2E0; // type:function size:0x30 scope:global -SType__Q210RenderConn12Pkt_Car_Open = .text:0x8026B310; // type:function size:0x58 scope:global -SType__Q210RenderConn13Pkt_Heli_Open = .text:0x8026B368; // type:function size:0x58 scope:global -SType__Q210RenderConn24Pkt_VehicleFragment_Open = .text:0x8026B3C0; // type:function size:0x58 scope:global -SType__Q29SoundConn12Pkt_Car_Open = .text:0x8026B418; // type:function size:0x58 scope:global -SType__Q29SoundConn13Pkt_Heli_Open = .text:0x8026B470; // type:function size:0x58 scope:global -_GLOBAL_.I._t10ScratchPtr1ZQ29RigidBody8Volatile.mWorkSpace = .text:0x8026B4C8; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x8026B4F4; // type:label scope:local -FlushCaches__Fv = .text:0x8026B4F4; // type:function size:0x20 scope:global -EnableInterrupts__Fv = .text:0x8026B514; // type:function size:0x20 scope:global -InitPlatform__Fv = .text:0x8026B534; // type:function size:0x140 scope:global -InitDisplaySystem__Fv = .text:0x8026B674; // type:function size:0x50 scope:global -bDoWithStack = .text:0x8026B6C4; // type:function size:0x8 scope:global -FinishedRenderingFEngLayer__Fv = .text:0x8026B6CC; // type:function size:0x4 scope:global -GC_GetOSLanguage__Fv = .text:0x8026B6D0; // type:function size:0x58 scope:global -CheckReset__Fi = .text:0x8026B728; // type:function size:0x64 scope:global -DVDValidErrorState__Fi = .text:0x8026B78C; // type:function size:0x64 scope:global -DVDErrorTask__FPvi = .text:0x8026B7F0; // type:function size:0x770 scope:global -ServicePlatform__Fv = .text:0x8026BF60; // type:function size:0x4 scope:global -eInitTexture__Fv = .text:0x8026BF64; // type:function size:0x4 scope:global -eSetTexture__FP11TextureInfoi = .text:0x8026BF68; // type:function size:0x94 scope:global -eUnSwizzle8bitPalette__FPUi = .text:0x8026BFFC; // type:function size:0x4 scope:global -eSwizzle8bitPalette__FPUi = .text:0x8026C000; // type:function size:0x4 scope:global -SetPlatInfo__24TextureInfoPlatInterfaceP19TextureInfoPlatInfo = .text:0x8026C004; // type:function size:0x8 scope:global -Init__24TextureInfoPlatInterface = .text:0x8026C00C; // type:function size:0x64 scope:global -Close__24TextureInfoPlatInterface = .text:0x8026C070; // type:function size:0x4 scope:global -LockImage__24TextureInfoPlatInterface15TextureLockType = .text:0x8026C074; // type:function size:0x8 scope:global -UnlockImage__24TextureInfoPlatInterfacePv = .text:0x8026C07C; // type:function size:0x4 scope:global -LockPalette__24TextureInfoPlatInterface15TextureLockType = .text:0x8026C080; // type:function size:0xB0 scope:global -UnlockPalette__24TextureInfoPlatInterfacePv = .text:0x8026C130; // type:function size:0xAC scope:global -CreateAnimData__24TextureInfoPlatInterface = .text:0x8026C1DC; // type:function size:0x48 scope:global -ReleaseAnimData__24TextureInfoPlatInterfacePv = .text:0x8026C224; // type:function size:0x28 scope:global -SetAnimData__24TextureInfoPlatInterfacePv = .text:0x8026C24C; // type:function size:0x40 scope:global -HasClut__19TextureInfoPlatInfo = .text:0x8026C28C; // type:function size:0x1C scope:global -SetImage__19TextureInfoPlatInfoiiiiPvT5ii = .text:0x8026C2A8; // type:function size:0x1DC scope:global -SetImage__19TextureInfoPlatInfoP11TextureInfo = .text:0x8026C484; // type:function size:0x70 scope:global -AutoCalibrateWheel__Fi = .text:0x8026C4F4; // type:function size:0x80 scope:global -ActualReadJoystickData__Fv = .text:0x8026C574; // type:function size:0x634 scope:global -PlatformInitJoystick__Fv = .text:0x8026CBA8; // type:function size:0x80 scope:global -ReadLGWheelDataForProgressiveMenu__Fv = .text:0x8026CC28; // type:function size:0x30 scope:global -ReadLGWheelButtonsForProgressiveMenu__Fi = .text:0x8026CC58; // type:function size:0x5C scope:global -IsWheelActiveForProgressiveMenu__Fi = .text:0x8026CCB4; // type:function size:0x40 scope:global -eBuildSunPoly__FP5ePolyP8SunLayerfff = .text:0x8026CCF4; // type:function size:0x230 scope:global -eBuildSunPolyFix__FP5ePolyP8SunLayerfff = .text:0x8026CF24; // type:function size:0x290 scope:global -eUpdateSunPolyFix__FP5ePolyP8SunLayerfff = .text:0x8026D1B4; // type:function size:0xDC scope:global -eCalcSunVisibility__FP5eViewff = .text:0x8026D290; // type:function size:0x168 scope:global -eRenderSun__FP5eView = .text:0x8026D3F8; // type:function size:0x274 scope:global -eInitSunPat__Fv = .text:0x8026D66C; // type:function size:0x78 scope:global -afxBeginBillboardedParticles__FP5eView = .text:0x8026D6E4; // type:function size:0xBC scope:global -afxBeginBillboardedParticleBatch__FP11TextureInfo = .text:0x8026D7A0; // type:function size:0x40 scope:global -afxEndBillboardedParticleBatch__FP11TextureInfofi = .text:0x8026D7E0; // type:function size:0x8 scope:global -afxEndBillboardedParticles__Fv = .text:0x8026D7E8; // type:function size:0x8 scope:global -PlatGetViewVectors__FP5eViewRQ25UMath7Vector3N21 = .text:0x8026D7F0; // type:function size:0x6C scope:global -PlatStartParticleRender__FP5eViewP11TextureInfoUi = .text:0x8026D85C; // type:function size:0x38 scope:global -PlatEndParticleRender__Fv = .text:0x8026D894; // type:function size:0x34 scope:global -PlatAddParticle__FRC15EmitterParticleRCQ25UMath7Vector3T1UiP8bVector4T4 = .text:0x8026D8C8; // type:function size:0x260 scope:global -__15DemoDiscManager = .text:0x8026DB28; // type:function size:0x18 scope:global -Init__15DemoDiscManageriPPc = .text:0x8026DB40; // type:function size:0x4 scope:global -SetEndReason__15DemoDiscManager17DemoDiscEndReason = .text:0x8026DB44; // type:function size:0x4 scope:global -FillInTextureInfo__11MoviePlayerPUiP11TextureInfoPQ29RealShape5Shape = .text:0x8026DB48; // type:function size:0x18 scope:global -GCDrawMovie__Fv = .text:0x8026DB60; // type:function size:0x30 scope:global -PlatSetFirstMovieFrame__FP11TextureInfoPQ29RealShape5Shapeb = .text:0x8026DB90; // type:function size:0x54 scope:global -RCMP_GetMaxFramesOutStanding__Fv = .text:0x8026DBE4; // type:function size:0x8 scope:global -PlatFinishMovie__Fv = .text:0x8026DBEC; // type:function size:0x44 scope:global -__7GCHW_VDPQ29RealShape5Shapeb = .text:0x8026DC30; // type:function size:0x198 scope:global -_._7GCHW_VD = .text:0x8026DDC8; // type:function size:0x44 scope:global -iDraw__7GCHW_VD = .text:0x8026DE0C; // type:function size:0x550 scope:global -__6Wheels = .text:0x8026E35C; // type:function size:0x68 scope:global -ReadAll__6Wheels = .text:0x8026E3C4; // type:function size:0x164 scope:global -ButtonIsPressed__6WheelslUl = .text:0x8026E528; // type:function size:0x20 scope:global -IsConnected__6Wheelsl = .text:0x8026E548; // type:function size:0x18 scope:global -PedalsConnected__6Wheelsl = .text:0x8026E560; // type:function size:0x14 scope:global -__4Ramp = .text:0x8026E574; // type:function size:0x30 scope:global -__8Periodic = .text:0x8026E5A4; // type:function size:0x30 scope:global -DownloadForce__8PeriodicllRUlUcUlUlUcUsUsUssUlUlUcUc = .text:0x8026E5D4; // type:function size:0x12C scope:global -UpdateForce__8PeriodicllUcUlUlUcUsUsUssUlUlUcUc = .text:0x8026E700; // type:function size:0xE4 scope:global -__8LGWheels = .text:0x8026E7E4; // type:function size:0x84 scope:global -InitVars__8LGWheelsl = .text:0x8026E868; // type:function size:0x98 scope:global -ReadAll__8LGWheels = .text:0x8026E900; // type:function size:0xB0 scope:global -StopForce__8LGWheelsll = .text:0x8026E9B0; // type:function size:0x40C scope:global -IsConnected__8LGWheelsl = .text:0x8026EDBC; // type:function size:0x24 scope:global -IsPlaying__8LGWheelsll = .text:0x8026EDE0; // type:function size:0x108 scope:global -ButtonIsPressed__8LGWheelslUl = .text:0x8026EEE8; // type:function size:0x24 scope:global -PedalsConnected__8LGWheelsl = .text:0x8026EF0C; // type:function size:0x24 scope:global -PlayAutoCalibAndSpringForce__8LGWheelsl = .text:0x8026EF30; // type:function size:0x12C scope:global -PlaySpringForce__8LGWheelslScUcs = .text:0x8026F05C; // type:function size:0x1E0 scope:global -StopSpringForce__8LGWheelsl = .text:0x8026F23C; // type:function size:0x24 scope:global -SameSpringForceParams__8LGWheelslScUcs = .text:0x8026F260; // type:function size:0x44 scope:global -PlayConstantForce__8LGWheelslsUs = .text:0x8026F2A4; // type:function size:0x1B0 scope:global -StopConstantForce__8LGWheelsl = .text:0x8026F454; // type:function size:0x24 scope:global -SameConstantForceParams__8LGWheelslsUs = .text:0x8026F478; // type:function size:0x34 scope:global -PlayDamperForce__8LGWheelsls = .text:0x8026F4AC; // type:function size:0x1D4 scope:global -StopDamperForce__8LGWheelsl = .text:0x8026F680; // type:function size:0x24 scope:global -SameDamperForceParams__8LGWheelsls = .text:0x8026F6A4; // type:function size:0x1C scope:global -PlayFrontalCollisionForce__8LGWheelslUc = .text:0x8026F6C0; // type:function size:0x1B8 scope:global -SameFrontalCollisionForceParams__8LGWheelsls = .text:0x8026F878; // type:function size:0x1C scope:global -PlayDirtRoadEffect__8LGWheelslUc = .text:0x8026F894; // type:function size:0x204 scope:global -StopDirtRoadEffect__8LGWheelsl = .text:0x8026FA98; // type:function size:0x24 scope:global -SameDirtRoadEffectParams__8LGWheelsls = .text:0x8026FABC; // type:function size:0x1C scope:global -PlayBumpyRoadEffect__8LGWheelslUc = .text:0x8026FAD8; // type:function size:0x204 scope:global -StopBumpyRoadEffect__8LGWheelsl = .text:0x8026FCDC; // type:function size:0x24 scope:global -SameBumpyRoadEffectParams__8LGWheelsls = .text:0x8026FD00; // type:function size:0x1C scope:global -PlaySlipperyRoadEffect__8LGWheelsls = .text:0x8026FD1C; // type:function size:0x258 scope:global -StopSlipperyRoadEffect__8LGWheelsl = .text:0x8026FF74; // type:function size:0x24 scope:global -SameSlipperyRoadEffectParams__8LGWheelsls = .text:0x8026FF98; // type:function size:0x1C scope:global -PlaySurfaceEffect__8LGWheelslUcUcUs = .text:0x8026FFB4; // type:function size:0x330 scope:global -StopSurfaceEffect__8LGWheelsl = .text:0x802702E4; // type:function size:0x24 scope:global -SameSurfaceEffectParams__8LGWheelslUcUcUs = .text:0x80270308; // type:function size:0x40 scope:global -PlayCarAirborne__8LGWheelsl = .text:0x80270348; // type:function size:0x1B4 scope:global -StopCarAirborne__8LGWheelsl = .text:0x802704FC; // type:function size:0x24 scope:global -__5Force = .text:0x80270520; // type:function size:0x30 scope:global -InitVars__5Force = .text:0x80270550; // type:function size:0x44 scope:global -Start__5Forcell = .text:0x80270594; // type:function size:0x94 scope:global -Stop__5Forcell = .text:0x80270628; // type:function size:0x94 scope:global -Destroy__5Forcell = .text:0x802706BC; // type:function size:0x9C scope:global -__8Constant = .text:0x80270758; // type:function size:0x30 scope:global -DownloadForce__8ConstantllRUlUlUlsUsUlUlUcUc = .text:0x80270788; // type:function size:0x110 scope:global -UpdateForce__8ConstantllUlUlsUsUlUlUcUc = .text:0x80270898; // type:function size:0xCC scope:global -__9Condition = .text:0x80270964; // type:function size:0x30 scope:global -DownloadForce__9ConditionllRUlUcUlUlScUcUcUcss = .text:0x80270994; // type:function size:0x124 scope:global -UpdateForce__9ConditionllUcUlUlScUcUcUcss = .text:0x80270AB8; // type:function size:0xDC scope:global -AddSpark__14XSpriteManagerRC10NGParticleP11TextureInfo = .text:0x80270B94; // type:function size:0x174 scope:global -RenderAll__14XSpriteManagerP5eView = .text:0x80270D08; // type:function size:0xF4 scope:global -__9CGEmitterPCQ26Attrib10CollectionRC14XenonEffectDef = .text:0x80270DFC; // type:function size:0x114 scope:global -GetNextParticle__12ParticleList = .text:0x80270F10; // type:function size:0x28 scope:global -GeneratePolys__12ParticleList = .text:0x80270F38; // type:function size:0xD0 scope:global -SpawnParticles__9CGEmitterff = .text:0x80271008; // type:function size:0x4FC scope:global -AgeParticles__12ParticleListf = .text:0x80271504; // type:function size:0x140 scope:global -__8NGEffectRC14XenonEffectDef = .text:0x80271644; // type:function size:0x118 scope:global -UpdateXenonEmitters__Ff = .text:0x8027175C; // type:function size:0x510 scope:global -DrawXenonEmitters__FP5eView = .text:0x80271C6C; // type:function size:0x4 scope:global -ClearXenonEmitters__Fv = .text:0x80271C70; // type:function size:0x5C scope:global -AddXenonEffect__FP12EmitterGroupPCQ26Attrib10CollectionPCQ25UMath7Matrix4PCQ25UMath7Vector4 = .text:0x80271CCC; // type:function size:0x4A4 scope:global -GetPrefix__13MemoryCardImp = .text:0x80272170; // type:function size:0xC scope:global -ConstructSaveInfo__13MemoryCardImpQ210MemoryCard8SaveTypePCci = .text:0x8027217C; // type:function size:0xD8 scope:global -DestructSaveInfo__13MemoryCardImp = .text:0x80272254; // type:function size:0x40 scope:global -GetMemcard__Fv = .text:0x80272294; // type:function size:0xC scope:global -BootupCheckDone__13MemoryCardImpQ211RealmcIface10CardStatusPQ211RealmcIface18BootupCheckResults = .text:0x802722A0; // type:function size:0xA0 scope:global -reserve__Q24_STLt6vector2Z14XenonEffectDefZQ33UTL3Stdt9Allocator2Z14XenonEffectDefZ20_type_XenonEffectDefUi = .text:0x80272340; // type:function size:0x1DC scope:global -__static_initialization_and_destruction_0 = .text:0x8027251C; // type:function size:0x154 scope:local -Init__7VMStats = .text:0x80272670; // type:function size:0x30 scope:global -Init__14VMStatsManagerPCc = .text:0x802726A0; // type:function size:0x80 scope:global -_._9CGEmitter = .text:0x80272720; // type:function size:0x6C scope:global -_GLOBAL_.I.snProfilerEnable = .text:0x8027278C; // type:function size:0x2C scope:local -InitServices__10RenderConnv = .text:0x802727B8; // type:function size:0x20 scope:global -RestoreServices__10RenderConnv = .text:0x802727D8; // type:function size:0x24 scope:global -UpdateLoading__10RenderConnv = .text:0x802727FC; // type:function size:0x20 scope:global -UpdateServices__10RenderConnf = .text:0x8027281C; // type:function size:0x54 scope:global -__static_initialization_and_destruction_0 = .text:0x80272870; // type:function size:0x50 scope:local -_GLOBAL_.I.ColourConvertXBoxToPS2__Fi = .text:0x802728C0; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x802728EC; // type:label scope:local -__3OBB = .text:0x802728EC; // type:function size:0x4 scope:global -_._3OBB = .text:0x802728F0; // type:function size:0x48 scope:global -Reset__3OBBRCQ25UMath7Matrix4RCQ25UMath7Vector3T2 = .text:0x80272938; // type:function size:0xE8 scope:global -CheckOBBOverlap__3OBBP3OBB = .text:0x80272A20; // type:function size:0x16C scope:global -BoxVsBox__3OBBP3OBBN21 = .text:0x80272B8C; // type:function size:0x280 scope:global -SphereVsBox__3OBBP3OBBN21 = .text:0x80272E0C; // type:function size:0x308 scope:global -SphereVsSphere__3OBBP3OBBN21 = .text:0x80273114; // type:function size:0x138 scope:global -CheckOBBOverlapAndFindIntersection__3OBBP3OBB = .text:0x8027324C; // type:function size:0xAC scope:global -ValidateHeap__Q23Sim9SubSystembT1 = .text:0x802732F8; // type:function size:0x4 scope:global -InitTimers__Q23Sim8Internalv = .text:0x802732FC; // type:function size:0x38 scope:global -__7SimTaskUifPQ23Sim9ITaskablefQ23Sim8TaskMode = .text:0x80273334; // type:function size:0xAC scope:global -Link__7SimTask = .text:0x802733E0; // type:function size:0x90 scope:global -UnLink__7SimTask = .text:0x80273470; // type:function size:0x44 scope:global -_._7SimTask = .text:0x802734B4; // type:function size:0x68 scope:global -Run__7SimTaskff = .text:0x8027351C; // type:function size:0x11C scope:global -UpdateAll__7SimTaskff = .text:0x80273638; // type:function size:0x68 scope:global -__9SimSystem = .text:0x802736A0; // type:function size:0x360 scope:global -_._9SimSystem = .text:0x80273A00; // type:function size:0x206C scope:global -DistanceToCamera__C9SimSystemRCQ25UMath7Vector3 = .text:0x80275A6C; // type:function size:0x8C scope:global -FetchCameras__9SimSystem = .text:0x80275AF8; // type:function size:0x1EC scope:global -OnTask__9SimSystemP10HSIMTASK__f = .text:0x80275CE4; // type:function size:0x154 scope:global -CollectGarbage__9SimSystem = .text:0x80275E38; // type:function size:0xC34 scope:global -RunAllTasks__9SimSystemf = .text:0x80276A6C; // type:function size:0x28 scope:global -UpdateFrame__9SimSystem = .text:0x80276A94; // type:function size:0x1F8 scope:global -PauseFFB__FP7IPlayer = .text:0x80276C8C; // type:function size:0x74 scope:local -ClearInput__FP7IPlayer = .text:0x80276D00; // type:function size:0xA4 scope:local -PauseInput__9SimSystemb = .text:0x80276DA4; // type:function size:0x174 scope:global -SetState__9SimSystemQ23Sim5State = .text:0x80276F18; // type:function size:0x14 scope:global -ModifyTask__9SimSystemP10HSIMTASK__f = .text:0x80276F2C; // type:function size:0x34 scope:global -AddTask__9SimSystemRC6UCrc32fPQ23Sim9ITaskablefQ23Sim8TaskMode = .text:0x80276F60; // type:function size:0x164 scope:global -RemoveTask__9SimSystemP10HSIMTASK__PQ23Sim9ITaskable = .text:0x802770C4; // type:function size:0x3C scope:global -Start__9SimSystemG6UCrc32 = .text:0x80277100; // type:function size:0x50 scope:global -GetRB__C15SimCollisionMapi = .text:0x80277150; // type:function size:0x24 scope:global -GetSRB__C15SimCollisionMapi = .text:0x80277174; // type:function size:0x24 scope:global -GetOrderedBody__C15SimCollisionMapi = .text:0x80277198; // type:function size:0x34 scope:global -AddListener__Q23Sim9CollisionPQ33Sim9Collision9IListenerP10HSIMABLE__PCc = .text:0x802771CC; // type:function size:0x3B0 scope:global -AddListener__Q23Sim9CollisionPQ33Sim9Collision9IListenerPCQ33UTL3COM8IUnknownPCc = .text:0x8027757C; // type:function size:0x3C4 scope:global -RemoveListener__Q23Sim9CollisionPQ33Sim9Collision9IListenerPCQ33UTL3COM8IUnknown = .text:0x80277940; // type:function size:0x188 scope:global -RemoveListener__Q23Sim9CollisionPQ33Sim9Collision9IListener = .text:0x80277AC8; // type:function size:0x180 scope:global -AddParticipant__Q23Sim9CollisionP10HSIMABLE__ = .text:0x80277C48; // type:function size:0x1E4 scope:global -RemoveParticipant__Q23Sim9CollisionP10HSIMABLE__ = .text:0x80277E2C; // type:function size:0x1CC scope:global -Respond__Q23Sim9CollisionRCQ33Sim9Collision4Info = .text:0x80277FF8; // type:function size:0x154 scope:global -__tcf_0 = .text:0x8027814C; // type:function size:0x2C scope:local -GetRandom__3Simv = .text:0x80278178; // type:function size:0x5C scope:global -Exists__3Simv = .text:0x802781D4; // type:function size:0x1C scope:global -GetState__3Simv = .text:0x802781F0; // type:function size:0x1C scope:global -Update__Q23Sim8Internalv = .text:0x8027820C; // type:function size:0x28 scope:global -Update__3Simv = .text:0x80278234; // type:function size:0x58 scope:global -GetFrameTimeElapsed__3Simv = .text:0x8027828C; // type:function size:0x28 scope:global -GetTimeStep__3Simv = .text:0x802782B4; // type:function size:0x24 scope:global -GetSpeed__3Simv = .text:0x802782D8; // type:function size:0x24 scope:global -GetTime__3Simv = .text:0x802782FC; // type:function size:0xC scope:global -Shutdown__3Simv = .text:0x80278308; // type:function size:0x138 scope:global -GetUserMode__3Simv = .text:0x80278440; // type:function size:0xC scope:global -CheckHeap__Q23Sim8Internalv = .text:0x8027844C; // type:function size:0x4 scope:global -Init__3SimG6UCrc32Q23Sim9eUserMode = .text:0x80278450; // type:function size:0xDC scope:global -CanSpawnRigidBody__3SimRCQ25UMath7Vector3b = .text:0x8027852C; // type:function size:0x1CC scope:global -CanSpawnSimpleRigidBody__3SimRCQ25UMath7Vector3b = .text:0x802786F8; // type:function size:0x130 scope:global -StartProfile__3Simv = .text:0x80278828; // type:function size:0x20 scope:global -Suspend__3Simv = .text:0x80278848; // type:function size:0x34 scope:global -SetStream__3SimRCQ25UMath7Vector3b = .text:0x8027887C; // type:function size:0xC8 scope:global -AddTask__3SimRC6UCrc32fPQ23Sim9ITaskablefQ23Sim8TaskMode = .text:0x80278944; // type:function size:0x3C scope:global -RemoveTask__3SimP10HSIMTASK__PQ23Sim9ITaskable = .text:0x80278980; // type:function size:0x34 scope:global -ModifyTask__3SimP10HSIMTASK__f = .text:0x802789B4; // type:function size:0x2C scope:global -DistanceToCamera__3SimRCQ25UMath7Vector3 = .text:0x802789E0; // type:function size:0x40 scope:global -ProfileTask__3SimP10HSIMTASK__PCc = .text:0x80278A20; // type:function size:0x4 scope:global -GetTick__3Simv = .text:0x80278A24; // type:function size:0xC scope:global -Util_GenerateMatrix__FRCQ25UMath7Vector3PCQ25UMath7Vector3 = .text:0x80278A30; // type:function size:0x190 scope:global -Util_GenerateCarTensor__FffffRCQ25UMath7Vector3 = .text:0x80278BC0; // type:function size:0xD8 scope:global -Lookup__10SimSurfaceRC6UCrc32 = .text:0x80278C98; // type:function size:0x3C scope:global -__10SimSurfaceRCUi = .text:0x80278CD4; // type:function size:0x94 scope:global -__10SimSurfacePCQ26Attrib10Collection = .text:0x80278D68; // type:function size:0x7C scope:global -GetParentSurface__C10SimSurface = .text:0x80278DE4; // type:function size:0x90 scope:global -UpdateSystem__10SimSurface = .text:0x80278E74; // type:function size:0x4 scope:global -InitSystem__10SimSurface = .text:0x80278E78; // type:function size:0x8C scope:global -__11LocalPlayerGQ23Sim5Param = .text:0x80278F04; // type:function size:0x528 scope:global -ReleaseHud__11LocalPlayer = .text:0x8027942C; // type:function size:0x54 scope:global -GetSettings__C11LocalPlayer = .text:0x80279480; // type:function size:0x30 scope:global -SetHud__11LocalPlayer14ePlayerHudType = .text:0x802794B0; // type:function size:0x98 scope:global -OnAttached__11LocalPlayerP11IAttachable = .text:0x80279548; // type:function size:0x8C scope:global -OnDetached__11LocalPlayerP11IAttachable = .text:0x802795D4; // type:function size:0xF0 scope:global -_._11LocalPlayer = .text:0x802796C4; // type:function size:0x274 scope:global -SetGameBreaker__11LocalPlayerb = .text:0x80279938; // type:function size:0x58 scope:global -CanDoGameBreaker__11LocalPlayer = .text:0x80279990; // type:function size:0x140 scope:global -ToggleGameBreaker__11LocalPlayer = .text:0x80279AD0; // type:function size:0x90 scope:global -CanRechargeNOS__C11LocalPlayer = .text:0x80279B60; // type:function size:0x10 scope:global -ResetGameBreaker__11LocalPlayerb = .text:0x80279B70; // type:function size:0x44 scope:global -DoGameBreaker__11LocalPlayerff = .text:0x80279BB4; // type:function size:0x190 scope:global -UpdateHud__11LocalPlayerf = .text:0x80279D44; // type:function size:0x1C08 scope:global -DoRadar__11LocalPlayerbT1 = .text:0x8027B94C; // type:function size:0x798 scope:global -UpdateNeighbourhood__11LocalPlayer = .text:0x8027C0E4; // type:function size:0x11C scope:global -CanDoFFB__C11LocalPlayer = .text:0x8027C200; // type:function size:0x178 scope:global -DoFFB__11LocalPlayer = .text:0x8027C378; // type:function size:0x6F4 scope:global -OnTask__11LocalPlayerP10HSIMTASK__f = .text:0x8027CA6C; // type:function size:0x9C scope:global -GetFFB__11LocalPlayer = .text:0x8027CB08; // type:function size:0x8 scope:global -GetSteeringDevice__11LocalPlayer = .text:0x8027CB10; // type:function size:0x8 scope:global -SetControllerPort__11LocalPlayeri = .text:0x8027CB18; // type:function size:0x130 scope:global -OnCollision__11LocalPlayerRCQ33Sim9Collision4Info = .text:0x8027CC48; // type:function size:0x178 scope:global -__Q23Sim8ActivityUi = .text:0x8027CDC0; // type:function size:0x3C4 scope:global -_._Q23Sim8Activity = .text:0x8027D184; // type:function size:0x3E4 scope:global -DetachAll__Q23Sim8Activity = .text:0x8027D568; // type:function size:0x58 scope:global -Release__Q23Sim8Activity = .text:0x8027D5C0; // type:function size:0x1B4 scope:global -__Q23Sim6ObjectUi = .text:0x8027D774; // type:function size:0xC0 scope:global -_._Q23Sim6Object = .text:0x8027D834; // type:function size:0xB0 scope:global -ModifyTask__Q23Sim6ObjectP10HSIMTASK__f = .text:0x8027D8E4; // type:function size:0x24 scope:global -AddTask__Q23Sim6ObjectRC6UCrc32ffQ23Sim8TaskMode = .text:0x8027D908; // type:function size:0x48 scope:global -RemoveTask__Q23Sim6ObjectP10HSIMTASK__ = .text:0x8027D950; // type:function size:0x3C scope:global -CheckService__CQ23Sim6ObjectP13HSIMSERVICE__ = .text:0x8027D98C; // type:function size:0x24 scope:global -OpenService__Q23Sim6ObjectG6UCrc32PQ23Sim6Packet = .text:0x8027D9B0; // type:function size:0x50 scope:global -CloseService__Q23Sim6ObjectP13HSIMSERVICE__ = .text:0x8027DA00; // type:function size:0x38 scope:global -__Q23Sim6Entity = .text:0x8027DA38; // type:function size:0x39C scope:global -_._Q23Sim6Entity = .text:0x8027DDD4; // type:function size:0x454 scope:global -Kill__Q23Sim6Entity = .text:0x8027E228; // type:function size:0x1B4 scope:global -OnDetached__Q23Sim6EntityP11IAttachable = .text:0x8027E3DC; // type:function size:0x54 scope:global -SetPosition__CQ23Sim6EntityRCQ25UMath7Vector3 = .text:0x8027E430; // type:function size:0x7C scope:global -Attach__Q23Sim6EntityPQ33UTL3COM8IUnknown = .text:0x8027E4AC; // type:function size:0xE4 scope:global -Detach__Q23Sim6EntityPQ33UTL3COM8IUnknown = .text:0x8027E590; // type:function size:0x74 scope:global -GetPosition__CQ23Sim6Entity = .text:0x8027E604; // type:function size:0x4C scope:global -AttachPhysics__Q23Sim6EntityP8ISimable = .text:0x8027E650; // type:function size:0x60 scope:global -DetachPhysics__Q23Sim6Entity = .text:0x8027E6B0; // type:function size:0x58 scope:global -__Q23Sim6EffectUiPCQ26Attrib10Collection = .text:0x8027E708; // type:function size:0xD0 scope:global -Fire__Q23Sim6EffectPCQ26Attrib10CollectionRCQ25UMath7Vector3T2UiT1T1Ui = .text:0x8027E7D8; // type:function size:0xB8 scope:global -Stop__Q23Sim6Effect = .text:0x8027E890; // type:function size:0x44 scope:global -OnService__Q23Sim6EffectP13HSIMSERVICE__PQ23Sim6Packet = .text:0x8027E8D4; // type:function size:0x74 scope:global -Set__Q23Sim6EffectPCQ26Attrib10CollectionRCQ25UMath7Vector3T2T1bUi = .text:0x8027E948; // type:function size:0x158 scope:global -__Q23Sim10ConnectionRCQ23Sim14ConnectionData = .text:0x8027EAA0; // type:function size:0x34 scope:global -_._Q23Sim10Connection = .text:0x8027EAD4; // type:function size:0x64 scope:global -DoStatusCheck__Q23Sim10Connection = .text:0x8027EB38; // type:function size:0x4C scope:global -Close__Q23Sim10Connection = .text:0x8027EB84; // type:function size:0x4C scope:global -Service__Q23Sim10ConnectionPQ23Sim6Packet = .text:0x8027EBD0; // type:function size:0x50 scope:global -OpenService__3SimG6UCrc32PQ23Sim12IServiceablePQ23Sim6Packet = .text:0x8027EC20; // type:function size:0x78 scope:global -SendService__3SimG6UCrc32PQ23Sim6Packet = .text:0x8027EC98; // type:function size:0x50 scope:global -CheckService__3SimP13HSIMSERVICE__ = .text:0x8027ECE8; // type:function size:0x30 scope:global -CloseService__3SimP13HSIMSERVICE__ = .text:0x8027ED18; // type:function size:0x28 scope:global -_._Q23Sim11Attachments = .text:0x8027ED40; // type:function size:0x8C scope:global -Attach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown = .text:0x8027EDCC; // type:function size:0x208 scope:global -Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown = .text:0x8027EFD4; // type:function size:0x194 scope:global -IsAttached__CQ23Sim11AttachmentsPCQ33UTL3COM8IUnknown = .text:0x8027F168; // type:function size:0x88 scope:global -DetachAll__Q23Sim11Attachments = .text:0x8027F1F0; // type:function size:0x4C scope:global -__Q23Sim5ModelP6IModelPCQ217CollisionGeometry6BoundsG6UCrc32Ui = .text:0x8027F23C; // type:function size:0x5AC scope:global -_._Q23Sim5Model = .text:0x8027F7E8; // type:function size:0x634 scope:global -GetLinearVelocity__CQ23Sim5ModelRQ25UMath7Vector3 = .text:0x8027FE1C; // type:function size:0x64 scope:global -GetAngularVelocity__CQ23Sim5ModelRQ25UMath7Vector3 = .text:0x8027FE80; // type:function size:0x64 scope:global -SetDynamicData__Q23Sim5ModelPCQ214EventSequencer6SystemP16EventDynamicData = .text:0x8027FEE4; // type:function size:0x10C scope:global -StartSequencer__Q23Sim5ModelG6UCrc32 = .text:0x8027FFF0; // type:function size:0x68 scope:global -ReleaseSequencer__Q23Sim5Model = .text:0x80280058; // type:function size:0x54 scope:global -BeginDraw__Q23Sim5ModelG6UCrc32PQ23Sim6Packet = .text:0x802800AC; // type:function size:0x60 scope:global -GetWorldID__CQ23Sim5Model = .text:0x8028010C; // type:function size:0xC scope:global -EndSimulation__Q23Sim5Model = .text:0x80280118; // type:function size:0x58 scope:global -EndDraw__Q23Sim5Model = .text:0x80280170; // type:function size:0x68 scope:global -Attach__Q23Sim5ModelPQ33UTL3COM8IUnknown = .text:0x802801D8; // type:function size:0x98 scope:global -Detach__Q23Sim5ModelPQ33UTL3COM8IUnknown = .text:0x80280270; // type:function size:0x34 scope:global -IsAttached__CQ23Sim5ModelPCQ33UTL3COM8IUnknown = .text:0x802802A4; // type:function size:0x34 scope:global -GetAttachments__CQ23Sim5Model = .text:0x802802D8; // type:function size:0x18 scope:global -OnAttached__Q23Sim5ModelP11IAttachable = .text:0x802802F0; // type:function size:0x22C scope:global -OnDetached__Q23Sim5ModelP11IAttachable = .text:0x8028051C; // type:function size:0x19C scope:global -ReleaseModel__Q23Sim5Model = .text:0x802806B8; // type:function size:0x1E4 scope:global -OnService__Q23Sim5ModelP13HSIMSERVICE__PQ23Sim6Packet = .text:0x8028089C; // type:function size:0x5C scope:global -ReleaseChildModels__Q23Sim5Model = .text:0x802808F8; // type:function size:0xC0 scope:global -GetChildModel__CQ23Sim5ModelG6UCrc32 = .text:0x802809B8; // type:function size:0x98 scope:global -EnumerateChildren__CQ23Sim5ModelPQ26IModel10Enumerator = .text:0x80280A50; // type:function size:0x6C scope:global -IsHidden__CQ23Sim5Model = .text:0x80280ABC; // type:function size:0x10 scope:global -HideModel__Q23Sim5Model = .text:0x80280ACC; // type:function size:0x34 scope:global -PlayEffect__Q23Sim5ModelG6UCrc32PCQ26Attrib10CollectionRCQ25UMath7Vector3T3b = .text:0x80280B00; // type:function size:0x174 scope:global -StopEffects__Q23Sim5Model = .text:0x80280C74; // type:function size:0x80 scope:global -StopEffect__Q23Sim5ModelG6UCrc32 = .text:0x80280CF4; // type:function size:0xC4 scope:global -__9QuickGameGQ23Sim5Param = .text:0x80280DB8; // type:function size:0x388 scope:global -_._9QuickGame = .text:0x80281140; // type:function size:0x268 scope:global -ShouldPauseInput__9QuickGame = .text:0x802813A8; // type:function size:0x58 scope:global -RaceReset__9QuickGame = .text:0x80281400; // type:function size:0x78 scope:global -OnUpdate__9QuickGamef = .text:0x80281478; // type:function size:0x4 scope:global -OnTask__9QuickGameP10HSIMTASK__f = .text:0x8028147C; // type:function size:0x3C scope:global -Construct__9QuickGameGQ23Sim5Param = .text:0x802814B8; // type:function size:0x74 scope:global -CreatePlayers__9QuickGame = .text:0x8028152C; // type:function size:0x1A4 scope:global -OnQueryVehicleCache__C9QuickGamePC8IVehiclePC13IVehicleCache = .text:0x802816D0; // type:function size:0xD4 scope:global -OnRemovedVehicleCache__9QuickGameP8IVehicle = .text:0x802817A4; // type:function size:0x4 scope:global -CreateCars__9QuickGameRCQ25UMath7Vector3 = .text:0x802817A8; // type:function size:0x774 scope:global -OnManageTime__9QuickGameff = .text:0x80281F1C; // type:function size:0x234 scope:global -OnBeginState__9QuickGame = .text:0x80282150; // type:function size:0x20C scope:global -IsStateDone__C9QuickGame = .text:0x8028235C; // type:function size:0x36C scope:global -CanSimulate__9QuickGame = .text:0x802826C8; // type:function size:0x128 scope:global -OnManageState__9QuickGameQ23Sim5State = .text:0x802827F0; // type:function size:0x7C scope:global -HandleSkipFEOptions__9QuickGame = .text:0x8028286C; // type:function size:0x164 scope:global -Construct__10CareerGameGQ23Sim5Param = .text:0x802829D0; // type:function size:0x74 scope:global -__10CareerGameGQ23Sim5Param = .text:0x80282A44; // type:function size:0xB4 scope:global -_._10CareerGame = .text:0x80282AF8; // type:function size:0xBC scope:global -__6NISCarG6UCrc32P8IVehicle = .text:0x80282BB4; // type:function size:0x14 scope:global -_._6NISCar = .text:0x80282BC8; // type:function size:0x5C scope:global -__11NISActivity = .text:0x80282C24; // type:function size:0x3CC scope:global -_._11NISActivity = .text:0x80282FF0; // type:function size:0x4FC scope:global -GetScene__C11NISActivity = .text:0x802834EC; // type:function size:0x4C scope:global -GetAnimScene__C11NISActivity = .text:0x80283538; // type:function size:0x6C scope:global -OnDetached__11NISActivityP11IAttachable = .text:0x802835A4; // type:function size:0x58 scope:global -OnQueryVehicleCache__C11NISActivityPC8IVehiclePC13IVehicleCache = .text:0x802835FC; // type:function size:0xC0 scope:global -OnRemovedVehicleCache__11NISActivityP8IVehicle = .text:0x802836BC; // type:function size:0x4 scope:global -RemoveCar__11NISActivityP8IVehicle = .text:0x802836C0; // type:function size:0x15C scope:global -AddCar__11NISActivityG6UCrc32P8IVehicle = .text:0x8028381C; // type:function size:0x204 scope:global -GetCar__11NISActivityG6UCrc32 = .text:0x80283A20; // type:function size:0x9C scope:global -StartLocation__11NISActivityRCQ25UMath7Vector3f = .text:0x80283ABC; // type:function size:0x80 scope:global -StartLocationInRenderCoords__11NISActivityRC8bVector3Us = .text:0x80283B3C; // type:function size:0x98 scope:global -GetStartLocation__11NISActivity = .text:0x80283BD4; // type:function size:0x8 scope:global -GetStartCameraLocation__11NISActivity = .text:0x80283BDC; // type:function size:0x98 scope:global -SetPreMovie__11NISActivityPCc = .text:0x80283C74; // type:function size:0x58 scope:global -SetPostMovie__11NISActivityPCc = .text:0x80283CCC; // type:function size:0x58 scope:global -GetNISStartLocation__11NISActivityRQ25UMath7Vector3 = .text:0x80283D24; // type:function size:0x110 scope:global -Load__11NISActivityQ212CAnimChooser5eTypePCcib = .text:0x80283E34; // type:function size:0x61C scope:global -Unload__11NISActivity = .text:0x80284450; // type:function size:0x90 scope:global -GetCustomCar__FPc = .text:0x802844E0; // type:function size:0x84 scope:global -PrepareVehicles__11NISActivityi = .text:0x80284564; // type:function size:0x690 scope:global -SetDynamicData__11NISActivityPCQ214EventSequencer6SystemP16EventDynamicData = .text:0x80284BF4; // type:function size:0x13C scope:global -UpdatePreloading__11NISActivity = .text:0x80284D30; // type:function size:0xA0 scope:global -NISStreamTimeCallback__11NISActivityUii = .text:0x80284DD0; // type:function size:0xC scope:global -IsAudioStreamQueued__11NISActivity = .text:0x80284DDC; // type:function size:0x28 scope:global -IsValidModelToNuke__FPC6IModel = .text:0x80284E04; // type:function size:0x1BC scope:local -NIS_NukeSmackablesWithinRange__FRCQ25UMath7Vector3f = .text:0x80284FC0; // type:function size:0xDC scope:global -IsCarListLoaded__11NISActivity = .text:0x8028509C; // type:function size:0x100 scope:global -UpdateLoading__11NISActivity = .text:0x8028519C; // type:function size:0x33C scope:global -OnMovieComplete__11NISActivityRC20MNotifyMovieFinished = .text:0x802854D8; // type:function size:0x68 scope:global -Play__11NISActivity = .text:0x80285540; // type:function size:0x1CC scope:global -StartEvents__11NISActivity = .text:0x8028570C; // type:function size:0x88 scope:global -FireEventTag__11NISActivityPCc = .text:0x80285794; // type:function size:0x5C scope:global -Pause__11NISActivity = .text:0x802857F0; // type:function size:0xC scope:global -UnPause__11NISActivity = .text:0x802857FC; // type:function size:0xC scope:global -UpdatePlaying__11NISActivityf = .text:0x80285808; // type:function size:0x264 scope:global -ResetEvents__11NISActivityf = .text:0x80285A6C; // type:function size:0x184 scope:global -ServiceLoads__11NISActivity = .text:0x80285BF0; // type:function size:0x40 scope:global -Release__11NISActivity = .text:0x80285C30; // type:function size:0x23C scope:global -JoyHandle__11NISActivityP7IPlayer = .text:0x80285E6C; // type:function size:0x15C scope:global -OnTask__11NISActivityP10HSIMTASK__f = .text:0x80285FC8; // type:function size:0x124 scope:global -SkipOverNIS__11NISActivity = .text:0x802860EC; // type:function size:0x140 scope:global -__16GameplayActivityGQ23Sim5Param = .text:0x8028622C; // type:function size:0x10C scope:global -_._16GameplayActivity = .text:0x80286338; // type:function size:0xBC scope:global -Construct__16GameplayActivityGQ23Sim5Param = .text:0x802863F4; // type:function size:0x74 scope:global -OnTask__16GameplayActivityP10HSIMTASK__f = .text:0x80286468; // type:function size:0xC0 scope:global -clear__Q24_STLt10_List_base2Z23WGridManagedDynamicElemZQ33UTL3Stdt9Allocator2Z23WGridManagedDynamicElemZ10_type_list = .text:0x80286528; // type:function size:0x78 scope:global -find_if__H2ZPQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_NodeZPFRCQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Node_b_4_STLX01X01X11_X01 = .text:0x802865A0; // type:function size:0x11C scope:global -find_if__H2ZPQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_NodeZPFRCQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Node_b_4_STLX01X01X11_X01 = .text:0x802866BC; // type:function size:0x11C scope:global -find_if__H2ZPQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_NodeZPFRCQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Node_b_4_STLX01X01X11_X01 = .text:0x802867D8; // type:function size:0x11C scope:global -find_if__H2ZPQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_NodeZPFRCQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Node_b_4_STLX01X01X11_X01 = .text:0x802868F4; // type:function size:0x11C scope:global -reserve__Q24_STLt6vector2ZP10HSIMABLE__ZQ33UTL3Stdt9Allocator2ZP10HSIMABLE__Z26_type_CollisionParticipantUi = .text:0x80286A10; // type:function size:0x11C scope:global -reserve__Q24_STLt6vector2ZQ43Sim8Internal11CDispatcher4NodeZQ33UTL3Stdt9Allocator2ZQ43Sim8Internal11CDispatcher4NodeZ23_type_CollisionListenerUi = .text:0x80286B2C; // type:function size:0x16C scope:global -__lower_bound__H4ZPQ43Sim8Internal11CDispatcher4NodeZQ43Sim8Internal11CDispatcher4NodeZQ24_STLt4less1ZQ43Sim8Internal11CDispatcher4NodeZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80286C98; // type:function size:0x48 scope:global -find_if__H2ZPCQ43Sim8Internal11CDispatcher4NodeZQ43Sim8Internal11CDispatcher6Finder_4_STLX01X01X11_X01 = .text:0x80286CE0; // type:function size:0x234 scope:global -__lower_bound__H4ZPP10HSIMABLE__ZP10HSIMABLE__ZQ24_STLt4less1ZP10HSIMABLE__Zi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80286F14; // type:function size:0x48 scope:global -__upper_bound__H4ZPQ43Sim8Internal11CDispatcher4NodeZQ43Sim8Internal11CDispatcher4NodeZQ24_STLt4less1ZQ43Sim8Internal11CDispatcher4NodeZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80286F5C; // type:function size:0x48 scope:global -find_if__H2ZPQ43Sim8Internal11CDispatcher4NodeZQ43Sim8Internal11CDispatcher6Finder_4_STLX01X01X11_X01 = .text:0x80286FA4; // type:function size:0x234 scope:global -__upper_bound__H4ZPP10HSIMABLE__ZP10HSIMABLE__ZQ24_STLt4less1ZP10HSIMABLE__Zi_4_STLX01X01RCX11X21PX31_X01 = .text:0x802871D8; // type:function size:0x48 scope:global -find__H2ZPQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_NodeZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Node_4_STLX01X01RCX11_X01 = .text:0x80287220; // type:function size:0xB0 scope:global -find__H2ZPQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_NodeZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Node_4_STLX01X01RCX11_X01 = .text:0x802872D0; // type:function size:0xB0 scope:global -CreateInstance__Q33UTL3COMt7Factory3ZRCQ23Sim14ConnectionDataZQ23Sim10ConnectionZ6UCrc32G6UCrc32RCQ23Sim14ConnectionData = .text:0x80287380; // type:function size:0x60 scope:global -CreateInstance__Q33UTL3COMt7Factory3ZPQ23Sim6PacketZiZ6UCrc32G6UCrc32PQ23Sim6Packet = .text:0x802873E0; // type:function size:0x60 scope:global -find__H2ZQ24_STLt14_List_iterator2ZP11IAttachableZQ24_STLt16_Nonconst_traits1ZP11IAttachableZP11IAttachable_4_STLX01X01RCX11_X01 = .text:0x80287440; // type:function size:0x60 scope:global -find__H2ZPQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_NodeZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Node_4_STLX01X01RCX11_X01 = .text:0x802874A0; // type:function size:0xB0 scope:global -reserve__Q24_STLt6vector2ZP6IModelZQ33UTL3Stdt9Allocator2ZP6IModelZ22_type_SimModelChildrenUi = .text:0x80287550; // type:function size:0x11C scope:global -CreateInstance__Q33UTL3COMt7Factory3ZQ23Sim5ParamZQ23Sim7IEntityZ6UCrc32G6UCrc32GQ23Sim5Param = .text:0x8028766C; // type:function size:0x7C scope:global -_M_erase__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZP6NISCarZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZP6NISCarZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2ZP6NISCarZ9_type_mapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZC6UCrc32ZP6NISCar = .text:0x802876E8; // type:function size:0x68 scope:global -_M_insert__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZP6NISCarZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZP6NISCarZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2ZP6NISCarZ9_type_mapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZC6UCrc32ZP6NISCarT1 = .text:0x80287750; // type:function size:0x13C scope:global -insert_unique__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZP6NISCarZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZP6NISCarZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2ZP6NISCarZ9_type_mapRCQ24_STLt4pair2ZC6UCrc32ZP6NISCar = .text:0x8028788C; // type:function size:0x118 scope:global -insert_unique__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZP6NISCarZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZP6NISCarZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2ZP6NISCarZ9_type_mapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZC6UCrc32ZP6NISCarZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZC6UCrc32ZP6NISCarRCQ24_STLt4pair2ZC6UCrc32ZP6NISCar = .text:0x802879A4; // type:function size:0x26C scope:global -__static_initialization_and_destruction_0 = .text:0x80287C10; // type:function size:0x7A4 scope:local -_._7IPlayer = .text:0x802883B4; // type:function size:0x180 scope:global -_._Q23Sim7IEntity = .text:0x80288534; // type:function size:0x180 scope:global -_IHandle__Q23Sim12IServiceable = .text:0x802886B4; // type:function size:0xC scope:global -_._Q23Sim12IServiceable = .text:0x802886C0; // type:function size:0x54 scope:global -_IHandle__Q23Sim9ITaskable = .text:0x80288714; // type:function size:0xC scope:global -_._Q23Sim9ITaskable = .text:0x80288720; // type:function size:0x54 scope:global -OnService__Q23Sim6ObjectP13HSIMSERVICE__PQ23Sim6Packet = .text:0x80288774; // type:function size:0x8 scope:global -OnTask__Q23Sim6ObjectP10HSIMTASK__f = .text:0x8028877C; // type:function size:0x8 scope:global -_._Q23Sim9IActivity = .text:0x80288784; // type:function size:0x10C scope:global -Attach__Q23Sim8ActivityPQ33UTL3COM8IUnknown = .text:0x80288890; // type:function size:0x34 scope:global -Detach__Q23Sim8ActivityPQ33UTL3COM8IUnknown = .text:0x802888C4; // type:function size:0x34 scope:global -IsAttached__CQ23Sim8ActivityPCQ33UTL3COM8IUnknown = .text:0x802888F8; // type:function size:0x34 scope:global -OnAttached__Q23Sim8ActivityP11IAttachable = .text:0x8028892C; // type:function size:0x4 scope:global -OnDetached__Q23Sim8ActivityP11IAttachable = .text:0x80288930; // type:function size:0x4 scope:global -GetAttachments__CQ23Sim8Activity = .text:0x80288934; // type:function size:0x18 scope:global -_IHandle__Q23Sim12ITimeManager = .text:0x8028894C; // type:function size:0xC scope:global -_._Q23Sim12ITimeManager = .text:0x80288958; // type:function size:0x54 scope:global -_._Q23Sim13IStateManager = .text:0x802889AC; // type:function size:0x54 scope:global -GetSimable__CQ23Sim6Entity = .text:0x80288A00; // type:function size:0x8 scope:global -IsAttached__CQ23Sim6EntityPCQ33UTL3COM8IUnknown = .text:0x80288A08; // type:function size:0x24 scope:global -OnAttached__Q23Sim6EntityP11IAttachable = .text:0x80288A2C; // type:function size:0x4 scope:global -GetAttachments__CQ23Sim6Entity = .text:0x80288A30; // type:function size:0x8 scope:global -_._Q23Sim6Effect = .text:0x80288A38; // type:function size:0x70 scope:global -__Q33UTL3Stdt6vector2ZP6IModelZ22_type_SimModelChildrenRCQ33UTL3Stdt6vector2ZP6IModelZ22_type_SimModelChildren = .text:0x80288AA8; // type:function size:0xAC scope:global -_._Q33Sim5Model6Effect = .text:0x80288B54; // type:function size:0x70 scope:global -SpawnModel__Q23Sim5ModelG6UCrc32N21 = .text:0x80288BC4; // type:function size:0x8 scope:global -GetEventSequencer__Q23Sim5Model = .text:0x80288BCC; // type:function size:0x8 scope:global -InView__CQ23Sim5Model = .text:0x80288BD4; // type:function size:0x8 scope:global -DistanceToView__CQ23Sim5Model = .text:0x80288BDC; // type:function size:0x8 scope:global -GetPartName__CQ23Sim5Model = .text:0x80288BE4; // type:function size:0x10 scope:global -GetRootModel__CQ23Sim5Model = .text:0x80288BF4; // type:function size:0x18 scope:global -GetParentModel__CQ23Sim5Model = .text:0x80288C0C; // type:function size:0x8 scope:global -GetCollisionGeometry__CQ23Sim5Model = .text:0x80288C14; // type:function size:0x8 scope:global -GetSimable__CQ23Sim5Model = .text:0x80288C1C; // type:function size:0x8 scope:global -IsRootModel__CQ23Sim5Model = .text:0x80288C24; // type:function size:0x8 scope:global -HidePart__Q23Sim5ModelRC6UCrc32 = .text:0x80288C2C; // type:function size:0x4 scope:global -ShowPart__Q23Sim5ModelRC6UCrc32 = .text:0x80288C30; // type:function size:0x4 scope:global -IsPartVisible__CQ23Sim5ModelRC6UCrc32 = .text:0x80288C34; // type:function size:0x8 scope:global -SetCausality__Q23Sim5ModelP8HCAUSE__f = .text:0x80288C3C; // type:function size:0xC scope:global -GetCausality__CQ23Sim5Model = .text:0x80288C48; // type:function size:0x8 scope:global -GetCausalityTime__CQ23Sim5Model = .text:0x80288C50; // type:function size:0x8 scope:global -OnBeginSimulation__Q23Sim5Model = .text:0x80288C58; // type:function size:0x4 scope:global -OnEndSimulation__Q23Sim5Model = .text:0x80288C5C; // type:function size:0x4 scope:global -OnBeginDraw__Q23Sim5Model = .text:0x80288C60; // type:function size:0x4 scope:global -OnEndDraw__Q23Sim5Model = .text:0x80288C64; // type:function size:0x4 scope:global -ClassKey__Q36Attrib3Gen6system = .text:0x80288C68; // type:function size:0xC scope:global -ClassKey__Q36Attrib3Gen10controller = .text:0x80288C74; // type:function size:0xC scope:global -_._Q29WorldConn15Pkt_Effect_Send = .text:0x80288C80; // type:function size:0x34 scope:global -ConnectionClass__Q29WorldConn15Pkt_Effect_Send = .text:0x80288CB4; // type:function size:0x64 scope:global -Size__Q29WorldConn15Pkt_Effect_Send = .text:0x80288D18; // type:function size:0x8 scope:global -Type__Q29WorldConn15Pkt_Effect_Send = .text:0x80288D20; // type:function size:0x20 scope:global -_._Q29WorldConn15Pkt_Effect_Open = .text:0x80288D40; // type:function size:0x34 scope:global -ConnectionClass__Q29WorldConn15Pkt_Effect_Open = .text:0x80288D74; // type:function size:0x64 scope:global -Size__Q29WorldConn15Pkt_Effect_Open = .text:0x80288DD8; // type:function size:0x8 scope:global -Type__Q29WorldConn15Pkt_Effect_Open = .text:0x80288DE0; // type:function size:0x20 scope:global -IsDirty__C7SimTask = .text:0x80288E00; // type:function size:0xC scope:global -DoFetchInput__9SimSystemP12IInputPlayer = .text:0x80288E0C; // type:function size:0x34 scope:global -is_dead__Q53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_NodeRCQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Node = .text:0x80288E40; // type:function size:0x10 scope:global -push_back__Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei16RCQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Node = .text:0x80288E50; // type:function size:0x158 scope:global -is_dead__Q53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_NodeRCQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Node = .text:0x80288FA8; // type:function size:0x10 scope:global -push_back__Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei16RCQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Node = .text:0x80288FB8; // type:function size:0x158 scope:global -is_dead__Q53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_NodeRCQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Node = .text:0x80289110; // type:function size:0x10 scope:global -is_dead__Q53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_NodeRCQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Node = .text:0x80289120; // type:function size:0x10 scope:global -push_back__Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei16RCQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Node = .text:0x80289130; // type:function size:0x158 scope:global -Construct__11LocalPlayerGQ23Sim5Param = .text:0x80289288; // type:function size:0x74 scope:global -SetRenderPort__11LocalPlayeri = .text:0x802892FC; // type:function size:0x8 scope:global -GetRenderPort__C11LocalPlayer = .text:0x80289304; // type:function size:0x8 scope:global -GetSettingsIndex__C11LocalPlayer = .text:0x8028930C; // type:function size:0x8 scope:global -SetSettings__11LocalPlayeri = .text:0x80289314; // type:function size:0x8 scope:global -GetHud__C11LocalPlayer = .text:0x8028931C; // type:function size:0x8 scope:global -GetControllerPort__C11LocalPlayer = .text:0x80289324; // type:function size:0x8 scope:global -GetSimable__C11LocalPlayer = .text:0x8028932C; // type:function size:0x8 scope:global -IsLocal__C11LocalPlayer = .text:0x80289334; // type:function size:0x8 scope:global -GetPosition__C11LocalPlayer = .text:0x8028933C; // type:function size:0x20 scope:global -SetPosition__11LocalPlayerRCQ25UMath7Vector3 = .text:0x8028935C; // type:function size:0x20 scope:global -InGameBreaker__C11LocalPlayer = .text:0x8028937C; // type:function size:0x8 scope:global -ChargeGameBreaker__11LocalPlayerf = .text:0x80289384; // type:function size:0x48 scope:global -_._4INIS = .text:0x802893CC; // type:function size:0x6C scope:global -_IHandle__10IGameState = .text:0x80289438; // type:function size:0xC scope:global -_._10IGameState = .text:0x80289444; // type:function size:0x6C scope:global -push_back__Q23UTLt6Vector2ZPQ23Sim7IEntityi16RCPQ23Sim7IEntity = .text:0x802894B0; // type:function size:0x154 scope:global -push_back__Q23UTLt6Vector2ZP7IPlayeri16RCP7IPlayer = .text:0x80289604; // type:function size:0x154 scope:global -InGameBreaker__C9QuickGame = .text:0x80289758; // type:function size:0x8 scope:global -GetCacheName__C9QuickGame = .text:0x80289760; // type:function size:0xC scope:global -Match__10CarBuilderRCQ37Physics4Info11Performance = .text:0x8028976C; // type:function size:0xB8 scope:global -_._16CAnimMomentScene = .text:0x80289824; // type:function size:0x34 scope:global -GetSceneHash__16CAnimMomentScene = .text:0x80289858; // type:function size:0x8 scope:global -GetCameraTrackNumber__16CAnimMomentScene = .text:0x80289860; // type:function size:0x8 scope:global -IsControllingCamera__16CAnimMomentScene = .text:0x80289868; // type:function size:0x8 scope:global -IsCameraFixingElevation__16CAnimMomentScene = .text:0x80289870; // type:function size:0x8 scope:global -SetTime__16CAnimMomentScenef = .text:0x80289878; // type:function size:0x4 scope:global -Pause__16CAnimMomentScene = .text:0x8028987C; // type:function size:0x8 scope:global -UnPause__16CAnimMomentScene = .text:0x80289884; // type:function size:0x8 scope:global -IsPlaying__16CAnimMomentScene = .text:0x8028988C; // type:function size:0x8 scope:global -GetTimeStart__16CAnimMomentScene = .text:0x80289894; // type:function size:0xC scope:global -GetTimeTotalLength__16CAnimMomentScene = .text:0x802898A0; // type:function size:0x8 scope:global -GetTimeElapsed__16CAnimMomentScene = .text:0x802898A8; // type:function size:0x8 scope:global -GetSceneRotationMatrix__16CAnimMomentScene = .text:0x802898B0; // type:function size:0x8 scope:global -GetSceneTransformMatrix__16CAnimMomentScene = .text:0x802898B8; // type:function size:0x8 scope:global -__Q33UTL3Stdt3map3Z6UCrc32ZP6NISCarZ9_type_map = .text:0x802898C0; // type:function size:0x74 scope:global -Construct__11NISActivityGQ23Sim5Param = .text:0x80289934; // type:function size:0x5C scope:global -GetType__11NISActivity = .text:0x80289990; // type:function size:0x8 scope:global -IsLoaded__C11NISActivity = .text:0x80289998; // type:function size:0x14 scope:global -IsPlaying__C11NISActivity = .text:0x802899AC; // type:function size:0x14 scope:global -InMovie__C11NISActivity = .text:0x802899C0; // type:function size:0x20 scope:global -StartPlayingNow__11NISActivity = .text:0x802899E0; // type:function size:0x60 scope:global -GetCacheName__C11NISActivity = .text:0x80289A40; // type:function size:0xC scope:global -IsWorldMomement__C11NISActivity = .text:0x80289A4C; // type:function size:0x14 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z20MNotifyMovieFinishedZ11NISActivityZ11NISActivityPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x80289A60; // type:function size:0x88 scope:global -_._Q33UTL11Collectionst8_Storage2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei40 = .text:0x80289AE8; // type:function size:0xB4 scope:global -_._Q33UTL11Collectionst8_Storage2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei8 = .text:0x80289B9C; // type:function size:0xB4 scope:global -_._Q33UTL11Collectionst8_Storage2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei434 = .text:0x80289C50; // type:function size:0xB4 scope:global -SType__Q29WorldConn15Pkt_Effect_Send = .text:0x80289D04; // type:function size:0x58 scope:global -SType__Q29WorldConn15Pkt_Effect_Open = .text:0x80289D5C; // type:function size:0x58 scope:global -OnGrowRequest__Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei16Ui = .text:0x80289DB4; // type:function size:0x4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei16Ui = .text:0x80289DB8; // type:function size:0x4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei16Ui = .text:0x80289DBC; // type:function size:0x4 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei434i16UiUi = .text:0x80289DC0; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei434i16PQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_NodeUi = .text:0x80289DC8; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei434i16Ui = .text:0x80289DCC; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei434i16 = .text:0x80289DD4; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei8i16UiUi = .text:0x80289DDC; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei8i16PQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_NodeUi = .text:0x80289DE4; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei8i16Ui = .text:0x80289DE8; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei8i16 = .text:0x80289DF0; // type:function size:0x8 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei40i16UiUi = .text:0x80289DF8; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei40i16PQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_NodeUi = .text:0x80289E00; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei40i16Ui = .text:0x80289E04; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei40i16 = .text:0x80289E0C; // type:function size:0x8 scope:global -GetGrowSize__CQ23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei16Ui = .text:0x80289E14; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei16Ui = .text:0x80289E34; // type:function size:0x20 scope:global -GetGrowSize__CQ23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei16Ui = .text:0x80289E54; // type:function size:0x20 scope:global -_._Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei16 = .text:0x80289E74; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei40i16 = .text:0x80289EA8; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei16 = .text:0x80289F5C; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei8i16 = .text:0x80289F90; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei16 = .text:0x8028A044; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei434i16 = .text:0x8028A078; // type:function size:0xB4 scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei16 = .text:0x8028A12C; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei16 = .text:0x8028A138; // type:function size:0xC scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei16 = .text:0x8028A144; // type:function size:0xC scope:global -_GLOBAL_.I.__3OBB = .text:0x8028A150; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x8028A17C; // type:label scope:local -CSISAllocatorMemAlloc__FUi = .text:0x8028A17C; // type:function size:0x28 scope:local -CSISAllocatorMemFree__FPv = .text:0x8028A1A4; // type:function size:0x2C scope:local -ScheduleSpeechPartII__Q26Speech7ManagerUiPvRQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter = .text:0x8028A1D0; // type:function size:0x5C0 scope:global -IndirectSpeechEvent__Q26Speech7ManagerPQ26Speech20ScheduledSpeechEventb = .text:0x8028A790; // type:function size:0x12C scope:global -Destroy__Q26Speech7Manager = .text:0x8028A8BC; // type:function size:0x1B4 scope:global -Init__Q26Speech7Manager11SPEECH_MODE = .text:0x8028AA70; // type:function size:0x354 scope:global -Init2__Q26Speech7Manager = .text:0x8028ADC4; // type:function size:0xFE0 scope:global -AttachSFXOBJ__Q26Speech7Manager17SpeechModuleIndexP8SFX_Base18eSFXOBJ_MAIN_TYPES = .text:0x8028BDA4; // type:function size:0x38 scope:global -GetSpeechModule__Q26Speech7Manageri = .text:0x8028BDDC; // type:function size:0x24 scope:global -IsPlaying__Q26Speech7Manager17SpeechModuleIndex = .text:0x8028BE00; // type:function size:0x4C scope:global -IsCopSpeechPlaying__Q26Speech7Manager18SPCHType_1_EventID = .text:0x8028BE4C; // type:function size:0x38 scope:global -IsCopSpeechBusy__Q26Speech7Manager = .text:0x8028BE84; // type:function size:0x74 scope:global -GetTimeSinceLastEvent__Q26Speech7Manager17SpeechModuleIndex = .text:0x8028BEF8; // type:function size:0x68 scope:global -SpchLibAbort__Q26Speech7ManagerPCce = .text:0x8028BF60; // type:function size:0xA0 scope:global -SampleRequestCallback__Q26Speech7ManagerP26SPCHType_SampleRequestData = .text:0x8028C000; // type:function size:0x570 scope:global -TestSentenceRuleCallback__Q26Speech7ManagerP9EventSpeciii = .text:0x8028C570; // type:function size:0x8 scope:global -ReparmCallback__Q26Speech7ManageriPUi = .text:0x8028C578; // type:function size:0x8 scope:global -SetSentenceRuleCallback__Q26Speech7ManagerP9EventSpeciii = .text:0x8028C580; // type:function size:0x4 scope:global -EventRuleCallback__Q26Speech7ManagerP9EventSpec = .text:0x8028C584; // type:function size:0x8 scope:global -LoadSpeechBank__Q26Speech7ManagerP17CLUMP_IDX_FILEtagRiT2PQ26Speech11SPEECH_BANK = .text:0x8028C58C; // type:function size:0x13C scope:global -AddHeaders__Q26Speech7ManagerPPcPQ26Speech11SPEECH_BANKiPQ26Speech6Module = .text:0x8028C6C8; // type:function size:0xE4 scope:global -GetTicker__Q26Speech7Manager = .text:0x8028C7AC; // type:function size:0x6C scope:global -Update__Q26Speech7Managerf = .text:0x8028C818; // type:function size:0x364 scope:global -PopulateHashMap__Q26Speech7Manager = .text:0x8028CB7C; // type:function size:0x114 scope:global -IsCacheable__Q26Speech7Manager18SPCHType_1_EventID = .text:0x8028CC90; // type:function size:0xB8 scope:global -HasBeenSaid__Q26Speech7Manager18SPCHType_1_EventID = .text:0x8028CD48; // type:function size:0x68 scope:global -InteruptedAndNotDelayed__6SpeechPQ26Speech20ScheduledSpeechEvent = .text:0x8028CDB0; // type:function size:0xF0 scope:local -ServiceInterruptEvents__Q26Speech7Manager = .text:0x8028CEA0; // type:function size:0x65C scope:global -ServiceFilteredEvents__Q26Speech7Manager = .text:0x8028D4FC; // type:function size:0x3C8 scope:global -Deduce__Q26Speech7Manager = .text:0x8028D8C4; // type:function size:0x900 scope:global -ClearPlayback__Q26Speech7Manager = .text:0x8028E1C4; // type:function size:0xD0 scope:global -RecallSpeechEvent__Q26Speech7Manager18SPCHType_1_EventID = .text:0x8028E294; // type:function size:0xEC scope:global -ResetGlobalHistory__Q26Speech7Manager = .text:0x8028E380; // type:function size:0x34 scope:global -Expire__Q26Speech7ManagerPQ26Speech20ScheduledSpeechEvent = .text:0x8028E3B4; // type:function size:0x84 scope:global -IsQueued__Q26Speech7Manager18SPCHType_1_EventIDi = .text:0x8028E438; // type:function size:0xA0 scope:global -IsEventDead__Q26Speech7ManagerPQ26Speech20ScheduledSpeechEvent = .text:0x8028E4D8; // type:function size:0x140 scope:global -NotifyEventCompletion__Q26Speech7ManagerPQ26Speech20ScheduledSpeechEventb = .text:0x8028E618; // type:function size:0x1F8 scope:global -GetNextEvent__Q26Speech7Manager = .text:0x8028E810; // type:function size:0x288 scope:global -PostValidate__Q26Speech7ManagerPQ26Speech20ScheduledSpeechEventUi = .text:0x8028EA98; // type:function size:0x8BC scope:global -PreValidate__Q26Speech7ManagerRQ26Speech20ScheduledSpeechEvent = .text:0x8028F354; // type:function size:0x1B0 scope:global -__tcf_0 = .text:0x8028F504; // type:function size:0x2C scope:local -CanPlayback__Q26Speech7ManagerRQ36Attrib3Gen6speech = .text:0x8028F530; // type:function size:0x12C scope:global -FlushSpeechForActor__Q26Speech7ManagerP12EAXCharacter = .text:0x8028F65C; // type:function size:0xF8 scope:global -CalcProbPlayback__Q26Speech7Manager = .text:0x8028F754; // type:function size:0x9C scope:global -__Q26Speech6Module = .text:0x8028F7F0; // type:function size:0x5C scope:global -_._Q26Speech6Module = .text:0x8028F84C; // type:function size:0x44 scope:global -GetBankOffset__Q26Speech6Modulei = .text:0x8028F890; // type:function size:0x48 scope:global -AttachSFXOBJ__Q26Speech6ModuleP8SFX_Base18eSFXOBJ_MAIN_TYPES = .text:0x8028F8D8; // type:function size:0x78 scope:global -DonePlaying__Q26Speech6Module = .text:0x8028F950; // type:function size:0x24 scope:global -PurgeSpeech__Q26Speech6Module = .text:0x8028F974; // type:function size:0x24 scope:global -PlayStream__Q26Speech6Modulei = .text:0x8028F998; // type:function size:0x8 scope:global -UnPause__Q26Speech6Module = .text:0x8028F9A0; // type:function size:0x24 scope:global -ReleaseResource__Q26Speech6Module = .text:0x8028F9C4; // type:function size:0x24 scope:global -__Q26Speech10GameSpeech = .text:0x8028F9E8; // type:function size:0x10C scope:global -_._Q26Speech10GameSpeech = .text:0x8028FAF4; // type:function size:0x25C scope:global -Init__Q26Speech10GameSpeechi = .text:0x8028FD50; // type:function size:0x3C0 scope:global -LoadingCallback__Q26Speech10GameSpeechii = .text:0x80290110; // type:function size:0x1A0 scope:global -LoadBanks__Q26Speech10GameSpeech = .text:0x802902B0; // type:function size:0xD0 scope:global -TestSentenceRuleCallback__Q26Speech10GameSpeechiii = .text:0x80290380; // type:function size:0x8 scope:global -SetSentenceRuleCallback__Q26Speech10GameSpeechiii = .text:0x80290388; // type:function size:0x8 scope:global -EventRuleCallback__Q26Speech10GameSpeechi = .text:0x80290390; // type:function size:0x8 scope:global -Unlocked__6SpeechPQ26Speech16SpeechSampleData = .text:0x80290398; // type:function size:0x4C scope:local -Update__Q26Speech10GameSpeech = .text:0x802903E4; // type:function size:0x53C scope:global -CheckNextEvent__Q26Speech10GameSpeech = .text:0x80290920; // type:function size:0xA8 scope:global -IssuePlayback__Q26Speech10GameSpeechPQ26Speech20ScheduledSpeechEvent = .text:0x802909C8; // type:function size:0x56C scope:global -ClearCompletedRequests__Q26Speech10GameSpeech = .text:0x80290F34; // type:function size:0x18C scope:global -ReleaseResource__Q26Speech10GameSpeech = .text:0x802910C0; // type:function size:0x34 scope:global -SampleRequestCallback__Q26Speech10GameSpeechP26SPCHType_SampleRequestData = .text:0x802910F4; // type:function size:0x24 scope:global -IssueSampleRequests__Q26Speech10GameSpeech = .text:0x80291118; // type:function size:0x1F0 scope:global -RadioChirp__Q26Speech10GameSpeechUc = .text:0x80291308; // type:function size:0xE8 scope:global -UpdateChirps__Q26Speech10GameSpeech = .text:0x802913F0; // type:function size:0x84 scope:global -GetVolForSpeaker__Q26Speech10GameSpeechi = .text:0x80291474; // type:function size:0x17C scope:global -__Q26Speech10SED_NISSFX = .text:0x802915F0; // type:function size:0xB8 scope:global -_._Q26Speech10SED_NISSFX = .text:0x802916A8; // type:function size:0x1F4 scope:global -Init__Q26Speech10SED_NISSFXi = .text:0x8029189C; // type:function size:0x408 scope:global -LoadingCallback__Q26Speech10SED_NISSFXii = .text:0x80291CA4; // type:function size:0xD8 scope:global -LoadBanks__Q26Speech10SED_NISSFX = .text:0x80291D7C; // type:function size:0xE4 scope:global -TestSentenceRuleCallback__Q26Speech10SED_NISSFXiii = .text:0x80291E60; // type:function size:0x8 scope:global -SetSentenceRuleCallback__Q26Speech10SED_NISSFXiii = .text:0x80291E68; // type:function size:0x8 scope:global -EventRuleCallback__Q26Speech10SED_NISSFXi = .text:0x80291E70; // type:function size:0x8 scope:global -QueStream__Q26Speech10SED_NISSFX12eNISSFX_TYPEPFv_vb = .text:0x80291E78; // type:function size:0xF0 scope:global -SampleRequestCallback__Q26Speech10SED_NISSFXP26SPCHType_SampleRequestData = .text:0x80291F68; // type:function size:0xE8 scope:global -PlayStream__Q26Speech10SED_NISSFXi = .text:0x80292050; // type:function size:0x70 scope:global -ClearStream__Q26Speech10SED_NISSFX = .text:0x802920C0; // type:function size:0x50 scope:global -Update__Q26Speech10SED_NISSFX = .text:0x80292110; // type:function size:0x244 scope:global -__Q26Speech5Cache = .text:0x80292354; // type:function size:0x50 scope:global -Init__Q26Speech5Cachei = .text:0x802923A4; // type:function size:0x35C scope:global -Dump__Q26Speech5Cache = .text:0x80292700; // type:function size:0x1FC scope:global -GetEventPool__Q26Speech5Cache = .text:0x802928FC; // type:function size:0x8 scope:global -_._Q26Speech5Cache = .text:0x80292904; // type:function size:0x70 scope:global -IsCached__Q26Speech5CacheP26SPCHType_SampleRequestDatab = .text:0x80292974; // type:function size:0x20C scope:global -CreateKey__Q26Speech5Cacheii = .text:0x80292B80; // type:function size:0x19C scope:global -GetUncached__Q26Speech5CachePQ26Speech6ModuleP26SPCHType_SampleRequestData = .text:0x80292D1C; // type:function size:0x618 scope:global -GetSample__Q26Speech5CachePQ26Speech6ModuleP26SPCHType_SampleRequestData = .text:0x80293334; // type:function size:0x224 scope:global -LoadSample__Q26Speech5CachePQ26Speech6ModuleP26SPCHType_SampleRequestData = .text:0x80293558; // type:function size:0x504 scope:global -LoadedSampleDataCB__Q26Speech5Cacheii = .text:0x80293A5C; // type:function size:0x50 scope:global -Alloc__Q26Speech5CacheiUi = .text:0x80293AAC; // type:function size:0x7C scope:global -Free__Q26Speech5CachePv = .text:0x80293B28; // type:function size:0x28 scope:global -MakeSpaceFor__Q26Speech5CacheP26SPCHType_SampleRequestDatab = .text:0x80293B50; // type:function size:0x208 scope:global -TossSample__Q26Speech5CachePQ26Speech16SpeechSampleData = .text:0x80293D58; // type:function size:0x7E0 scope:global -FlushUncached__Q26Speech5Cache = .text:0x80294538; // type:function size:0x798 scope:global -FlushLRU__Q26Speech5Cache = .text:0x80294CD0; // type:function size:0x74C scope:global -FlushAllUnlocked__Q26Speech5Cache = .text:0x8029541C; // type:function size:0x740 scope:global -FlushInactiveSpeakers__Q26Speech5Cache = .text:0x80295B5C; // type:function size:0x7B8 scope:global -DebugPrintAllocations__Q26Speech5Cache = .text:0x80296314; // type:function size:0x1A8 scope:global -Validate__Q26Speech5Cache = .text:0x802964BC; // type:function size:0x4 scope:global -DebugPrints__Q26Speech5Cache = .text:0x802964C0; // type:function size:0x4 scope:global -__12EAXCharacteriP10HSIMABLE__ii = .text:0x802964C4; // type:function size:0x84 scope:global -__nw__12EAXCharacterUi = .text:0x80296548; // type:function size:0x58 scope:global -__dl__12EAXCharacterPv = .text:0x802965A0; // type:function size:0x38 scope:global -Reset__12EAXCharacter = .text:0x802965D8; // type:function size:0x4C scope:global -_._12EAXCharacter = .text:0x80296624; // type:function size:0x34 scope:global -Update__12EAXCharacter = .text:0x80296658; // type:function size:0x17C scope:global -Ack__12EAXCharacter = .text:0x802967D4; // type:function size:0x60 scope:global -Deny__12EAXCharacter = .text:0x80296834; // type:function size:0x84 scope:global -InterruptStatic__12EAXCharacter = .text:0x802968B8; // type:function size:0x38 scope:global -InterruptExpletive__12EAXCharacter = .text:0x802968F0; // type:function size:0x40 scope:global -InterruptViolent__12EAXCharacter = .text:0x80296930; // type:function size:0x40 scope:global -InterruptComposedLow__12EAXCharacter = .text:0x80296970; // type:function size:0x4C scope:global -InterruptComposedHigh__12EAXCharacter = .text:0x802969BC; // type:function size:0x4C scope:global -DriverHistory__12EAXCharacter = .text:0x80296A08; // type:function size:0x4C scope:global -HeatJump__12EAXCharacterQ24Csis15Type_heat_level = .text:0x80296A54; // type:function size:0x5C scope:global -_._11EAXDispatch = .text:0x80296AB0; // type:function size:0x50 scope:global -Update__11EAXDispatch = .text:0x80296B00; // type:function size:0x34 scope:global -BackupReply__11EAXDispatchP6EAXCopii = .text:0x80296B34; // type:function size:0xC0 scope:global -ArrestReply__11EAXDispatch = .text:0x80296BF4; // type:function size:0x40 scope:global -PursuitUpdate__11EAXDispatchP6EAXCop = .text:0x80296C34; // type:function size:0x88 scope:global -PursuitEscalationGeneric__11EAXDispatch = .text:0x80296CBC; // type:function size:0x68 scope:global -PursuitEscalation__11EAXDispatch = .text:0x80296D24; // type:function size:0x228 scope:global -BackupUpdate__11EAXDispatchP6EAXCopi = .text:0x80296F4C; // type:function size:0x54 scope:global -BreakAway__11EAXDispatch = .text:0x80296FA0; // type:function size:0xFC scope:global -GoAhead__11EAXDispatch = .text:0x8029709C; // type:function size:0x40 scope:global -TimeExpired__11EAXDispatch = .text:0x802970DC; // type:function size:0x40 scope:global -Report911__11EAXDispatchQ24Csis17Type_pursuit_type = .text:0x8029711C; // type:function size:0x170 scope:global -RBUpdate__11EAXDispatchP6EAXCopSc = .text:0x8029728C; // type:function size:0xA4 scope:global -RBReply__11EAXDispatchP6EAXCopScUi = .text:0x80297330; // type:function size:0x108 scope:global -JurisShift__11EAXDispatchQ24Csis17Type_jurisdiction = .text:0x80297438; // type:function size:0x5C scope:global -BackupETA__11EAXDispatch = .text:0x80297494; // type:function size:0x190 scope:global -VehicleDescription__11EAXDispatch = .text:0x80297624; // type:function size:0x7C scope:global -NoVehicleDescription__11EAXDispatch = .text:0x802976A0; // type:function size:0x40 scope:global -SubRBReply__11EAXDispatch = .text:0x802976E0; // type:function size:0x40 scope:global -_._13EAXAirSupport = .text:0x80297720; // type:function size:0x50 scope:global -Update__13EAXAirSupport = .text:0x80297770; // type:function size:0x140 scope:global -GetCauseOfBailout__13EAXAirSupport = .text:0x802978B0; // type:function size:0x140 scope:global -SelfStrategy__13EAXAirSupporti = .text:0x802979F0; // type:function size:0x44 scope:global -JoinRB__13EAXAirSupport = .text:0x80297A34; // type:function size:0x4C scope:global -LostVisual__13EAXAirSupport = .text:0x80297A80; // type:function size:0x6C scope:global -IntentToBail__13EAXAirSupport = .text:0x80297AEC; // type:function size:0x58 scope:global -Bailout__13EAXAirSupport = .text:0x80297B44; // type:function size:0x58 scope:global -Swarming__13EAXAirSupport = .text:0x80297B9C; // type:function size:0x40 scope:global -Spotter__13EAXAirSupport = .text:0x80297BDC; // type:function size:0x40 scope:global -HazardAlert__13EAXAirSupportQ24Csis27Type_heli_hazard_alert_type = .text:0x80297C1C; // type:function size:0x44 scope:global -BullhornArrest__13EAXAirSupport = .text:0x80297C60; // type:function size:0x58 scope:global -QuadrantMoving__13EAXAirSupport = .text:0x80297CB8; // type:function size:0x40 scope:global -Quadrant__13EAXAirSupport = .text:0x80297CF8; // type:function size:0x40 scope:global -__6EAXCopiP10HSIMABLE__ii = .text:0x80297D38; // type:function size:0x160 scope:global -_._6EAXCop = .text:0x80297E98; // type:function size:0x58 scope:global -Update__6EAXCop = .text:0x80297EF0; // type:function size:0x4BC scope:global -SetRank__6EAXCopi = .text:0x802983AC; // type:function size:0x84 scope:global -SwapVoices__6EAXCopP6EAXCop = .text:0x80298430; // type:function size:0xE0 scope:global -SetActive__6EAXCopb = .text:0x80298510; // type:function size:0x354 scope:global -IsPrimary__6EAXCop = .text:0x80298864; // type:function size:0x28 scope:global -Reset__6EAXCop = .text:0x8029888C; // type:function size:0x58 scope:global -Collision__6EAXCopifP6EAXCop = .text:0x802988E4; // type:function size:0x180 scope:global -AttemptVehicleStop__6EAXCop = .text:0x80298A64; // type:function size:0x254 scope:global -Spotter__6EAXCop = .text:0x80298CB8; // type:function size:0x68 scope:global -SpotterReply__6EAXCop = .text:0x80298D20; // type:function size:0x68 scope:global -Reply911__6EAXCop = .text:0x80298D88; // type:function size:0x40 scope:global -ReinitiatePursuit__6EAXCop = .text:0x80298DC8; // type:function size:0x100 scope:global -VehicleReport__6EAXCop = .text:0x80298EC8; // type:function size:0x164 scope:global -InitiatePursuit__6EAXCop = .text:0x8029902C; // type:function size:0x68 scope:global -LocationReport__6EAXCop = .text:0x80299094; // type:function size:0xD8 scope:global -SelfStrategy__6EAXCopi = .text:0x8029916C; // type:function size:0x124 scope:global -CallforEV__6EAXCopUi = .text:0x80299290; // type:function size:0xE4 scope:global -InitialCallForBackup__6EAXCop = .text:0x80299374; // type:function size:0xAC scope:global -GetBackupTypeFromDispatch__6EAXCopi = .text:0x80299420; // type:function size:0x6C scope:global -CallForBackup__6EAXCopi = .text:0x8029948C; // type:function size:0x7C scope:global -BackupReminder__6EAXCopi = .text:0x80299508; // type:function size:0x7C scope:global -BackupArrives__6EAXCop = .text:0x80299584; // type:function size:0x84 scope:global -PrimaryEngage__6EAXCop = .text:0x80299608; // type:function size:0x84 scope:global -UnitBackupReply__6EAXCop = .text:0x8029968C; // type:function size:0x40 scope:global -NegativeBackupReply__6EAXCop = .text:0x802996CC; // type:function size:0x40 scope:global -InitiateStrategy__6EAXCopi = .text:0x8029970C; // type:function size:0xB8 scope:global -CallToPosition__6EAXCopP6EAXCop = .text:0x802997C4; // type:function size:0x114 scope:global -CallToPositionReminder__6EAXCop = .text:0x802998D8; // type:function size:0x6C scope:global -StrategyExecute__6EAXCop = .text:0x80299944; // type:function size:0x6C scope:global -IntentToRam__6EAXCop = .text:0x802999B0; // type:function size:0x6C scope:global -AnticipateSuccess__6EAXCop = .text:0x80299A1C; // type:function size:0x40 scope:global -AnticipateFail__6EAXCop = .text:0x80299A5C; // type:function size:0x40 scope:global -LostSuspect__6EAXCop = .text:0x80299A9C; // type:function size:0x6C scope:global -Arrest__6EAXCop = .text:0x80299B08; // type:function size:0x6C scope:global -LostVisual__6EAXCop = .text:0x80299B74; // type:function size:0x6C scope:global -RegainVisual__6EAXCop = .text:0x80299BE0; // type:function size:0x6C scope:global -OutcomeFail__6EAXCops = .text:0x80299C4C; // type:function size:0x84 scope:global -StrategyReset__6EAXCopb = .text:0x80299CD0; // type:function size:0x84 scope:global -SwarmingReply__6EAXCop = .text:0x80299D54; // type:function size:0x38 scope:global -Bullhorn__6EAXCop = .text:0x80299D8C; // type:function size:0x58 scope:global -PreBullhorn__6EAXCop = .text:0x80299DE4; // type:function size:0x40 scope:global -BullhornArrest__6EAXCop = .text:0x80299E24; // type:function size:0x84 scope:global -SuspectBehavior__6EAXCop = .text:0x80299EA8; // type:function size:0x68 scope:global -SuspectConfirmed__6EAXCop = .text:0x80299F10; // type:function size:0x68 scope:global -SuspectOutrun__6EAXCop = .text:0x80299F78; // type:function size:0x70 scope:global -SuspectUTurn__6EAXCop = .text:0x80299FE8; // type:function size:0x70 scope:global -FocusChange__6EAXCop = .text:0x8029A058; // type:function size:0x70 scope:global -Impact_Suspect_World__6EAXCop = .text:0x8029A0C8; // type:function size:0xB4 scope:global -Impact_Suspect_Semi__6EAXCop = .text:0x8029A17C; // type:function size:0x78 scope:global -Impact_Suspect_Train__6EAXCop = .text:0x8029A1F4; // type:function size:0x78 scope:global -Impact_Suspect_Guardrail__6EAXCop = .text:0x8029A26C; // type:function size:0x74 scope:global -Impact_Suspect_GasStation__6EAXCop = .text:0x8029A2E0; // type:function size:0x64 scope:global -Impact_Suspect_Spikebelt__6EAXCop = .text:0x8029A344; // type:function size:0xB0 scope:global -Impact_Suspect_Traffic__6EAXCopQ24Csis14Type_intensity = .text:0x8029A3F4; // type:function size:0x44 scope:global -SuspectRollover__6EAXCopQ24Csis14Type_intensity = .text:0x8029A438; // type:function size:0x44 scope:global -SuspectAirborne__6EAXCopQ24Csis14Type_intensity = .text:0x8029A47C; // type:function size:0x44 scope:global -SuspectSpunout__6EAXCopQ24Csis14Type_intensity = .text:0x8029A4C0; // type:function size:0x44 scope:global -SuspectBrake__6EAXCop = .text:0x8029A504; // type:function size:0x40 scope:global -UnitDisabled__6EAXCopi = .text:0x8029A544; // type:function size:0x80 scope:global -PursuitUpdateReply__6EAXCop = .text:0x8029A5C4; // type:function size:0x40 scope:global -Bailout__6EAXCop = .text:0x8029A604; // type:function size:0x6C scope:global -DenyBailout__6EAXCop = .text:0x8029A670; // type:function size:0x40 scope:global -LoBailout__6EAXCop = .text:0x8029A6B0; // type:function size:0x6C scope:global -HiBailout__6EAXCop = .text:0x8029A71C; // type:function size:0x6C scope:global -BailoutBadRoad__6EAXCop = .text:0x8029A788; // type:function size:0x6C scope:global -BailoutTraffic__6EAXCop = .text:0x8029A7F4; // type:function size:0x6C scope:global -CallForRB__6EAXCop = .text:0x8029A860; // type:function size:0x90 scope:global -CallForSubRB__6EAXCop = .text:0x8029A8F0; // type:function size:0x50 scope:global -RBReminder__6EAXCop = .text:0x8029A940; // type:function size:0x6C scope:global -NegRBReply__6EAXCop = .text:0x8029A9AC; // type:function size:0x6C scope:global -RBApproach__6EAXCop = .text:0x8029AA18; // type:function size:0x98 scope:global -RBEngage__6EAXCopb = .text:0x8029AAB0; // type:function size:0x80 scope:global -RBAverted__6EAXCop = .text:0x8029AB30; // type:function size:0x40 scope:global -PursuitApproaching__6EAXCop = .text:0x8029AB70; // type:function size:0x68 scope:global -HeadOn__6EAXCopQ24Csis14Type_intensity = .text:0x8029ABD8; // type:function size:0x44 scope:global -TBoned__6EAXCopQ24Csis14Type_intensity = .text:0x8029AC1C; // type:function size:0x44 scope:global -SideSwiped__6EAXCopQ24Csis14Type_intensity = .text:0x8029AC60; // type:function size:0x44 scope:global -RearEnded__6EAXCopQ24Csis14Type_intensity = .text:0x8029ACA4; // type:function size:0x44 scope:global -Spotted__6EAXCop = .text:0x8029ACE8; // type:function size:0x88 scope:global -DirectionChange__6EAXCop = .text:0x8029AD70; // type:function size:0x64 scope:global -CallForSwarming__6EAXCop = .text:0x8029ADD4; // type:function size:0x40 scope:global -SpotterWanted__6EAXCop = .text:0x8029AE14; // type:function size:0x40 scope:global -Offroad__6EAXCopUib = .text:0x8029AE54; // type:function size:0x58 scope:global -WeatherReport__6EAXCop = .text:0x8029AEAC; // type:function size:0x40 scope:global -__Q26Speech10SpeechFlow = .text:0x8029AEEC; // type:function size:0x28 scope:global -ChangeStateTo__Q26Speech10SpeechFlowi = .text:0x8029AF14; // type:function size:0x18 scope:global -_._Q26Speech10SpeechFlow = .text:0x8029AF2C; // type:function size:0x34 scope:global -OnCopRemoved__Q26Speech10SpeechFlowP6EAXCop = .text:0x8029AF60; // type:function size:0x4 scope:global -OnCopAdded__Q26Speech10SpeechFlowP6EAXCop = .text:0x8029AF64; // type:function size:0x4 scope:global -__Q26Speech11PursuitFlow = .text:0x8029AF68; // type:function size:0xE4 scope:global -_._Q26Speech11PursuitFlow = .text:0x8029B04C; // type:function size:0x54 scope:global -OnCopRemoved__Q26Speech11PursuitFlowP6EAXCop = .text:0x8029B0A0; // type:function size:0x7C scope:global -Update__Q26Speech11PursuitFlow = .text:0x8029B11C; // type:function size:0x1B8 scope:global -CullCheck__Q26Speech11PursuitFlow = .text:0x8029B2D4; // type:function size:0x50 scope:global -Reset__Q26Speech11PursuitFlow = .text:0x8029B324; // type:function size:0x5C scope:global -Reacquire__Q26Speech11PursuitFlow = .text:0x8029B380; // type:function size:0x60 scope:global -RequiresRestart__Q26Speech11PursuitFlow = .text:0x8029B3E0; // type:function size:0xA0 scope:global -CloseInCheck__Q26Speech11PursuitFlow = .text:0x8029B480; // type:function size:0x22C scope:global -PrimaryBranch__Q26Speech11PursuitFlow = .text:0x8029B6AC; // type:function size:0x3D4 scope:global -PlayerStopped__Q26Speech11PursuitFlow = .text:0x8029BA80; // type:function size:0x260 scope:global -SpotterBranch__Q26Speech11PursuitFlow = .text:0x8029BCE0; // type:function size:0x34C scope:global -ScriptedBranch__Q26Speech11PursuitFlow = .text:0x8029C02C; // type:function size:0xD8 scope:global -LostWhileSpotterWait__Q26Speech11PursuitFlow = .text:0x8029C104; // type:function size:0xE4 scope:global -SpotterWait__Q26Speech11PursuitFlow = .text:0x8029C1E8; // type:function size:0x260 scope:global -Bailout__Q26Speech11PursuitFlow = .text:0x8029C448; // type:function size:0x98 scope:global -ChangeTarget__Q26Speech11PursuitFlow = .text:0x8029C4E0; // type:function size:0xA4 scope:global -Terminal__Q26Speech11PursuitFlow = .text:0x8029C584; // type:function size:0x190 scope:global -IsTransitionable__Q26Speech11PursuitFlow = .text:0x8029C714; // type:function size:0x14 scope:global -MessageEventComplete__Q26Speech11PursuitFlowRC19MNotifySpeechStatus = .text:0x8029C728; // type:function size:0xD8 scope:global -__Q26Speech12StrategyFlow = .text:0x8029C800; // type:function size:0x1F8 scope:global -_._Q26Speech12StrategyFlow = .text:0x8029C9F8; // type:function size:0x74 scope:global -Reset__Q26Speech12StrategyFlow = .text:0x8029CA6C; // type:function size:0x64 scope:global -Update__Q26Speech12StrategyFlow = .text:0x8029CAD0; // type:function size:0x1A8 scope:global -CullCheck__Q26Speech12StrategyFlow = .text:0x8029CC78; // type:function size:0x58 scope:global -SoloCheck__Q26Speech12StrategyFlow = .text:0x8029CCD0; // type:function size:0x460 scope:global -CallToPos__Q26Speech12StrategyFlow = .text:0x8029D130; // type:function size:0x248 scope:global -ReqBackup__Q26Speech12StrategyFlow = .text:0x8029D378; // type:function size:0x6A8 scope:global -Waiting__Q26Speech12StrategyFlow = .text:0x8029DA20; // type:function size:0x770 scope:global -Outrun__Q26Speech12StrategyFlow = .text:0x8029E190; // type:function size:0x6F0 scope:global -Lost__Q26Speech12StrategyFlow = .text:0x8029E880; // type:function size:0x50 scope:global -Terminal__Q26Speech12StrategyFlow = .text:0x8029E8D0; // type:function size:0x7C scope:global -IsTransitionable__Q26Speech12StrategyFlow = .text:0x8029E94C; // type:function size:0x24 scope:global -Outcome__Q26Speech12StrategyFlow = .text:0x8029E970; // type:function size:0x1B4 scope:global -MessageReqBackup__Q26Speech12StrategyFlowRC10MReqBackup = .text:0x8029EB24; // type:function size:0x70 scope:global -MessageBackupDenied__Q26Speech12StrategyFlowRC10MReqBackup = .text:0x8029EB94; // type:function size:0x70 scope:global -MessageEventComplete__Q26Speech12StrategyFlowRC19MNotifySpeechStatus = .text:0x8029EC04; // type:function size:0x70 scope:global -__Q26Speech8Observer = .text:0x8029EC74; // type:function size:0x35C scope:global -_._Q26Speech8Observer = .text:0x8029EFD0; // type:function size:0xC4 scope:global -Update__Q26Speech8Observer = .text:0x8029F094; // type:function size:0x6C scope:global -CullCheck__Q26Speech8Observer = .text:0x8029F100; // type:function size:0x34 scope:global -IsTransitionable__Q26Speech8Observer = .text:0x8029F134; // type:function size:0x8 scope:global -Reset__Q26Speech8Observer = .text:0x8029F13C; // type:function size:0xF4 scope:global -Observe__Q26Speech8Observeriif = .text:0x8029F230; // type:function size:0x168 scope:global -Process__Q26Speech8Observer = .text:0x8029F398; // type:function size:0x220 scope:global -CalcFWVec_Road_Car__Q26Speech8Observer = .text:0x8029F5B8; // type:function size:0x14C scope:global -GasStationAftermath__Q26Speech8Observer = .text:0x8029F704; // type:function size:0x110 scope:global -AssessArrest__Q26Speech8Observer = .text:0x8029F814; // type:function size:0x2A8 scope:global -AssessLOS__Q26Speech8Observer = .text:0x8029FABC; // type:function size:0x30C scope:global -NotifyAirborne__Q26Speech8Observerff = .text:0x8029FDC8; // type:function size:0xA0 scope:global -AssessFlippage__Q26Speech8Observer = .text:0x8029FE68; // type:function size:0x16C scope:global -Assess180__Q26Speech8Observer = .text:0x8029FFD4; // type:function size:0x3EC scope:global -AssessOutcome__Q26Speech8Observer = .text:0x802A03C0; // type:function size:0x528 scope:global -AssessBraking__Q26Speech8Observer = .text:0x802A08E8; // type:function size:0x314 scope:global -AssessOutrun__Q26Speech8Observer = .text:0x802A0BFC; // type:function size:0x380 scope:global -AssessOffroad__Q26Speech8Observer = .text:0x802A0F7C; // type:function size:0xF8 scope:global -MessageEventComplete__Q26Speech8ObserverRC19MNotifySpeechStatus = .text:0x802A1074; // type:function size:0x358 scope:global -MessageBlewPastCop__Q26Speech8ObserverRC15MGamePlayMoment = .text:0x802A13CC; // type:function size:0x1DC scope:global -MessageTunnelUpdate__Q26Speech8ObserverRC10MMiscSound = .text:0x802A15A8; // type:function size:0xC4 scope:global -MessageGamePlayMoment__Q26Speech8ObserverRC15MGamePlayMoment = .text:0x802A166C; // type:function size:0x1F4 scope:global -__Q26Speech13RoadblockFlow = .text:0x802A1860; // type:function size:0x208 scope:global -_._Q26Speech13RoadblockFlow = .text:0x802A1A68; // type:function size:0x74 scope:global -NailedSomethingInRB__Q26Speech13RoadblockFlowUi = .text:0x802A1ADC; // type:function size:0x3C scope:global -MessageRoadBlockDodged__Q26Speech13RoadblockFlowRC13MReqRoadBlock = .text:0x802A1B18; // type:function size:0x38 scope:global -SyncRoadblock__Q26Speech13RoadblockFlow = .text:0x802A1B50; // type:function size:0x3F0 scope:global -Update__Q26Speech13RoadblockFlow = .text:0x802A1F40; // type:function size:0x34 scope:global -MessageReqHeliJoinRB__Q26Speech13RoadblockFlowRC13MReqRoadBlock = .text:0x802A1F74; // type:function size:0x60 scope:global -MessagePositionUpdate__Q26Speech13RoadblockFlowRC13MReqRoadBlock = .text:0x802A1FD4; // type:function size:0x1C scope:global -Request__Q26Speech13RoadblockFlow = .text:0x802A1FF0; // type:function size:0x258 scope:global -Setup__Q26Speech13RoadblockFlow = .text:0x802A2248; // type:function size:0x254 scope:global -Approach__Q26Speech13RoadblockFlow = .text:0x802A249C; // type:function size:0x64 scope:global -Effect__Q26Speech13RoadblockFlow = .text:0x802A2500; // type:function size:0x364 scope:global -Service__Q26Speech13RoadblockFlow = .text:0x802A2864; // type:function size:0xF4 scope:global -Terminal__Q26Speech13RoadblockFlow = .text:0x802A2958; // type:function size:0x24 scope:global -Reset__Q26Speech13RoadblockFlow = .text:0x802A297C; // type:function size:0x50 scope:global -IsTransitionable__Q26Speech13RoadblockFlow = .text:0x802A29CC; // type:function size:0x8 scope:global -__Q26Speech9MusicFlow = .text:0x802A29D4; // type:function size:0x334 scope:global -_._Q26Speech9MusicFlow = .text:0x802A2D08; // type:function size:0x94 scope:global -MessageNewPart__Q26Speech9MusicFlowRC16MNotifyMusicFlow = .text:0x802A2D9C; // type:function size:0xA8 scope:global -MessageInitFlow__Q26Speech9MusicFlowRC16MNotifyMusicFlow = .text:0x802A2E44; // type:function size:0xD4 scope:global -MessageTerminate__Q26Speech9MusicFlowRC16MNotifyMusicFlow = .text:0x802A2F18; // type:function size:0x38 scope:global -MessageDone__Q26Speech9MusicFlowRC16MNotifyMusicFlow = .text:0x802A2F50; // type:function size:0x34 scope:global -MessageX360UserTunes__Q26Speech9MusicFlowRC16MNotifyMusicFlow = .text:0x802A2F84; // type:function size:0x1C scope:global -Reacquire__Q26Speech9MusicFlow = .text:0x802A2FA0; // type:function size:0xC0 scope:global -Update__Q26Speech9MusicFlow = .text:0x802A3060; // type:function size:0x324 scope:global -UpdateIntensity__Q26Speech9MusicFlowf = .text:0x802A3384; // type:function size:0x44 scope:global -Waiting__Q26Speech9MusicFlow = .text:0x802A33C8; // type:function size:0xD0 scope:global -Neutral__Q26Speech9MusicFlow = .text:0x802A3498; // type:function size:0x448 scope:global -Lose__Q26Speech9MusicFlow = .text:0x802A38E0; // type:function size:0x3BC scope:global -Win__Q26Speech9MusicFlow = .text:0x802A3C9C; // type:function size:0x338 scope:global -Elude__Q26Speech9MusicFlow = .text:0x802A3FD4; // type:function size:0x158 scope:global -Terminal__Q26Speech9MusicFlow = .text:0x802A412C; // type:function size:0x4C scope:global -IsTransitionable__Q26Speech9MusicFlow = .text:0x802A4178; // type:function size:0x8 scope:global -ChangeStateTo__Q26Speech9MusicFlowi = .text:0x802A4180; // type:function size:0x178 scope:global -Reset__Q26Speech9MusicFlow = .text:0x802A42F8; // type:function size:0x40 scope:global -__7SoundAI = .text:0x802A4338; // type:function size:0xA2C scope:global -_._7SoundAI = .text:0x802A4D64; // type:function size:0x404 scope:global -MessagePerpBusted__7SoundAIRC11MPerpBusted = .text:0x802A5168; // type:function size:0xA4 scope:global -MessageAIPerpBusted__7SoundAIRC11MPerpBusted = .text:0x802A520C; // type:function size:0x50 scope:global -MessageInfraction__7SoundAIRC10MMiscSound = .text:0x802A525C; // type:function size:0xC scope:global -MessageRestart__7SoundAIRC12MRestartRace = .text:0x802A5268; // type:function size:0x50 scope:global -MessageUnspawnCop__7SoundAIRC11MUnspawnCop = .text:0x802A52B8; // type:function size:0x98 scope:global -MessageTireBlown__7SoundAIRC15MGamePlayMoment = .text:0x802A5350; // type:function size:0x94 scope:global -OnVehicleAdded__7SoundAIP8IVehicle = .text:0x802A53E4; // type:function size:0x2C scope:global -OnVehicleRemoved__7SoundAIP8IVehicle = .text:0x802A5410; // type:function size:0x98 scope:global -OnCollision__7SoundAIRCQ33Sim9Collision4Info = .text:0x802A54A8; // type:function size:0x1674 scope:global -GetCopInRB__7SoundAI = .text:0x802A6B1C; // type:function size:0xDC scope:global -GetRandomActiveCop__7SoundAIib = .text:0x802A6BF8; // type:function size:0x750 scope:global -GetRandomCop__7SoundAIi = .text:0x802A7348; // type:function size:0x520 scope:global -OnAttached__7SoundAIP11IAttachable = .text:0x802A7868; // type:function size:0x58 scope:global -OnDetached__7SoundAIP11IAttachable = .text:0x802A78C0; // type:function size:0x144 scope:global -Construct__7SoundAIGQ23Sim5Param = .text:0x802A7A04; // type:function size:0x94 scope:global -GetRoadblock__7SoundAI = .text:0x802A7A98; // type:function size:0xD0 scope:global -IsMusicActive__7SoundAI = .text:0x802A7B68; // type:function size:0x58 scope:global -OnTask__7SoundAIP10HSIMTASK__f = .text:0x802A7BC0; // type:function size:0x19C scope:global -DealWithDeadAir__7SoundAI = .text:0x802A7D5C; // type:function size:0x278 scope:global -UpdateStateMachines__7SoundAI = .text:0x802A7FD4; // type:function size:0x1D8 scope:global -AttemptReattachPursuit__7SoundAI = .text:0x802A81AC; // type:function size:0x2D4 scope:global -SyncPursuit__7SoundAI = .text:0x802A8480; // type:function size:0x76C scope:global -TerminatePursuit__7SoundAIQ27SoundAI11BailoutType = .text:0x802A8BEC; // type:function size:0x1B8 scope:global -ResetPursuit__7SoundAIb = .text:0x802A8DA4; // type:function size:0x1AC scope:global -ShuffleActors__7SoundAI = .text:0x802A8F50; // type:function size:0x7DC scope:global -IsHeadingValid__7SoundAI = .text:0x802A972C; // type:function size:0x28 scope:global -SyncPlayers__7SoundAI = .text:0x802A9754; // type:function size:0xA8C scope:global -Force911State__7SoundAI = .text:0x802AA1E0; // type:function size:0x110 scope:global -SyncCarsToActors__7SoundAI = .text:0x802AA2F0; // type:function size:0xD2C scope:global -SyncFormations__7SoundAI = .text:0x802AB01C; // type:function size:0x34C scope:global -FindFurthestCop__7SoundAIb = .text:0x802AB368; // type:function size:0x11C scope:global -FindClosestCop__7SoundAIbT1 = .text:0x802AB484; // type:function size:0x128 scope:global -RemoveCop__7SoundAIP10HSIMABLE__ = .text:0x802AB5AC; // type:function size:0x4C0 scope:global -AddNewHeli__7SoundAIP8IVehicle = .text:0x802ABA6C; // type:function size:0xEC scope:global -GetBattalionFromRoadID__7SoundAIi = .text:0x802ABB58; // type:function size:0x7C scope:global -GetBattalionFromKey__7SoundAIUi = .text:0x802ABBD4; // type:function size:0x88 scope:global -AddNewCop__7SoundAIP8IVehicle = .text:0x802ABC5C; // type:function size:0x5EC scope:global -MakeLeader__7SoundAIP6EAXCop = .text:0x802AC248; // type:function size:0x4D8 scope:global -GetCallsign__7SoundAIQ24Csis22Type_speaker_battalion = .text:0x802AC720; // type:function size:0x18C scope:global -RandomizeCallsign__7SoundAIRQ26Speech8voiceIDsQ24Csis25Type_speaker_call_sign_idT2 = .text:0x802AC8AC; // type:function size:0x1D0 scope:global -GetVoice__7SoundAIi = .text:0x802ACA7C; // type:function size:0x154 scope:global -GetCop__7SoundAIi = .text:0x802ACBD0; // type:function size:0x7C scope:global -RandomBailoutDeny__7SoundAIP6EAXCop = .text:0x802ACC4C; // type:function size:0x10C scope:global -CalcPlayerDirection__7SoundAIb = .text:0x802ACD58; // type:function size:0x124 scope:global -ForceGlobalVoiceChange__7SoundAI = .text:0x802ACE7C; // type:function size:0xF4 scope:global -Release__7SoundAI = .text:0x802ACF70; // type:function size:0x40 scope:global -GetCustomized__7SoundAIP8IVehicleRQ27SoundAI17CarCustomizations = .text:0x802ACFB0; // type:function size:0x3E8 scope:global -IsHighIntensity__7SoundAI = .text:0x802AD398; // type:function size:0x38 scope:global -GetTimeLastNailedCop__7SoundAI = .text:0x802AD3D0; // type:function size:0x2DC scope:global -SMSCellCall__10MiscSpeechi = .text:0x802AD6AC; // type:function size:0x54 scope:global -IsVehicleTypeOK__10MiscSpeech = .text:0x802AD700; // type:function size:0x128 scope:global -MapSMSToSPCHEnums__10MiscSpeechiRQ24Csis14CellCallStruct = .text:0x802AD828; // type:function size:0x1BC scope:global -GetSPAMLocation__10MiscSpeechiRQ24Csis22Type_offroad_moment_id = .text:0x802AD9E4; // type:function size:0x22C scope:global -GetLocation__10MiscSpeech9RoadNamesRQ24Csis20Type_location_regionRQ24Csis13Type_location = .text:0x802ADC10; // type:function size:0x744 scope:global -Bailout__10MiscSpeechi = .text:0x802AE354; // type:function size:0x9C scope:global -LostSuspect__10MiscSpeechi = .text:0x802AE3F0; // type:function size:0xB8 scope:global -Unit911Reply__10MiscSpeechi = .text:0x802AE4A8; // type:function size:0x74 scope:global -MoreDetails__10MiscSpeechi = .text:0x802AE51C; // type:function size:0x74 scope:global -RBWarning__10MiscSpeech = .text:0x802AE590; // type:function size:0x38 scope:global -RBPosition__10MiscSpeechi = .text:0x802AE5C8; // type:function size:0x5C scope:global -RBEngaged__10MiscSpeechb = .text:0x802AE624; // type:function size:0x74 scope:global -RBAverted__10MiscSpeech = .text:0x802AE698; // type:function size:0x80 scope:global -SwarmingReply__10MiscSpeech = .text:0x802AE718; // type:function size:0x38 scope:global -SwarmingReplyFollow__10MiscSpeech = .text:0x802AE750; // type:function size:0x38 scope:global -QuadrantForming__10MiscSpeech = .text:0x802AE788; // type:function size:0x38 scope:global -SuspectPossiblyGone__10MiscSpeech = .text:0x802AE7C0; // type:function size:0x38 scope:global -QuadrantMoving__10MiscSpeech = .text:0x802AE7F8; // type:function size:0x38 scope:global -OtherLead__10MiscSpeech = .text:0x802AE830; // type:function size:0x38 scope:global -PossibleSuspect__10MiscSpeech = .text:0x802AE868; // type:function size:0x38 scope:global -WrongSuspect__10MiscSpeech = .text:0x802AE8A0; // type:function size:0x38 scope:global -D_Day__10MiscSpeech = .text:0x802AE8D8; // type:function size:0x38 scope:global -DispIntroRace__10MiscSpeech = .text:0x802AE910; // type:function size:0x38 scope:global -clear__Q24_STLt10_List_base2Z18SPCHType_1_EventIDZQ33UTL3Stdt9Allocator2Z18SPCHType_1_EventIDZ10_type_list = .text:0x802AE948; // type:function size:0x78 scope:global -reserve__Q24_STLt6vector2ZQ26Speech17SPCHSampleRequestZQ33UTL3Stdt9Allocator2ZQ26Speech17SPCHSampleRequestZQ26Speech19_type_SampleReqListUi = .text:0x802AE9C0; // type:function size:0x1E4 scope:global -__less__H1ZPQ26Speech20ScheduledSpeechEvent_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x802AEBA4; // type:function size:0xC scope:global -__adjust_heap__H4ZPPQ26Speech20ScheduledSpeechEventZiZPQ26Speech20ScheduledSpeechEventZQ24_STLt4less1ZPQ26Speech20ScheduledSpeechEvent_4_STLX01X11X11X21X31_v = .text:0x802AEBB0; // type:function size:0xCC scope:global -make_heap__H2ZPPQ26Speech20ScheduledSpeechEventZQ24_STLt4less1ZPQ26Speech20ScheduledSpeechEvent_4_STLX01X01X11_v = .text:0x802AEC7C; // type:function size:0x7C scope:global -pop_heap__H2ZPPQ26Speech20ScheduledSpeechEventZQ24_STLt4less1ZPQ26Speech20ScheduledSpeechEvent_4_STLX01X01X11_v = .text:0x802AECF8; // type:function size:0x48 scope:global -__partial_sort__H3ZPPQ26Speech20ScheduledSpeechEventZPQ26Speech20ScheduledSpeechEventZQ24_STLt4less1ZPQ26Speech20ScheduledSpeechEvent_4_STLX01X01X01PX11X21_v = .text:0x802AED40; // type:function size:0xB8 scope:global -partial_sort__H2ZPPQ26Speech20ScheduledSpeechEventZQ24_STLt4less1ZPQ26Speech20ScheduledSpeechEvent_4_STLX01X01X01X11_v = .text:0x802AEDF8; // type:function size:0x30 scope:global -__unguarded_partition__H3ZPPQ26Speech20ScheduledSpeechEventZPQ26Speech20ScheduledSpeechEventZQ24_STLt4less1ZPQ26Speech20ScheduledSpeechEvent_4_STLX01X01X11X21_X01 = .text:0x802AEE28; // type:function size:0x50 scope:global -__introsort_loop__H4ZPPQ26Speech20ScheduledSpeechEventZPQ26Speech20ScheduledSpeechEventZiZQ24_STLt4less1ZPQ26Speech20ScheduledSpeechEvent_4_STLX01X01PX11X21X31_v = .text:0x802AEE78; // type:function size:0x124 scope:global -__unguarded_linear_insert__H3ZPPQ26Speech20ScheduledSpeechEventZPQ26Speech20ScheduledSpeechEventZQ24_STLt4less1ZPQ26Speech20ScheduledSpeechEvent_4_STLX01X11X21_v = .text:0x802AEF9C; // type:function size:0x28 scope:global -__insertion_sort__H2ZPPQ26Speech20ScheduledSpeechEventZQ24_STLt4less1ZPQ26Speech20ScheduledSpeechEvent_4_STLX01X01X11_v = .text:0x802AEFC4; // type:function size:0x9C scope:global -__unguarded_insertion_sort_aux__H3ZPPQ26Speech20ScheduledSpeechEventZPQ26Speech20ScheduledSpeechEventZQ24_STLt4less1ZPQ26Speech20ScheduledSpeechEvent_4_STLX01X01PX11X21_v = .text:0x802AF060; // type:function size:0x58 scope:global -__final_insertion_sort__H2ZPPQ26Speech20ScheduledSpeechEventZQ24_STLt4less1ZPQ26Speech20ScheduledSpeechEvent_4_STLX01X01X11_v = .text:0x802AF0B8; // type:function size:0x7C scope:global -sort__H1ZPPQ26Speech20ScheduledSpeechEvent_4_STLX01X01_v = .text:0x802AF134; // type:function size:0xA0 scope:global -__as__Q24_STLt6vector2ZPQ26Speech20ScheduledSpeechEventZQ33UTL3Stdt9Allocator2ZPQ26Speech20ScheduledSpeechEventZQ26Speech21_type_SchedSpchEventsRCQ24_STLt6vector2ZPQ26Speech20ScheduledSpeechEventZQ33UTL3Stdt9Allocator2ZPQ26Speech20ScheduledSpeechEventZQ26Speech21_type_SchedSpchEvents = .text:0x802AF1D4; // type:function size:0x164 scope:global -find_if__H2ZPPQ26Speech20ScheduledSpeechEventZPFPQ26Speech20ScheduledSpeechEvent_b_4_STLX01X01X11_X01 = .text:0x802AF338; // type:function size:0x110 scope:global -__adjust_heap__H4ZPPQ26Speech20ScheduledSpeechEventZiZPQ26Speech20ScheduledSpeechEventZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X11X11X21X31_v = .text:0x802AF448; // type:function size:0x118 scope:global -make_heap__H2ZPPQ26Speech20ScheduledSpeechEventZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X01X11_v = .text:0x802AF560; // type:function size:0x78 scope:global -pop_heap__H2ZPPQ26Speech20ScheduledSpeechEventZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X01X11_v = .text:0x802AF5D8; // type:function size:0x40 scope:global -__partial_sort__H3ZPPQ26Speech20ScheduledSpeechEventZPQ26Speech20ScheduledSpeechEventZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X01X01PX11X21_v = .text:0x802AF618; // type:function size:0xBC scope:global -partial_sort__H2ZPPQ26Speech20ScheduledSpeechEventZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X01X01X11_v = .text:0x802AF6D4; // type:function size:0x28 scope:global -__unguarded_partition__H3ZPPQ26Speech20ScheduledSpeechEventZPQ26Speech20ScheduledSpeechEventZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X01X11X21_X01 = .text:0x802AF6FC; // type:function size:0x9C scope:global -__introsort_loop__H4ZPPQ26Speech20ScheduledSpeechEventZPQ26Speech20ScheduledSpeechEventZiZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X01PX11X21X31_v = .text:0x802AF798; // type:function size:0x158 scope:global -__unguarded_linear_insert__H3ZPPQ26Speech20ScheduledSpeechEventZPQ26Speech20ScheduledSpeechEventZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X11X21_v = .text:0x802AF8F0; // type:function size:0x60 scope:global -__insertion_sort__H2ZPPQ26Speech20ScheduledSpeechEventZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X01X11_v = .text:0x802AF950; // type:function size:0xA4 scope:global -__unguarded_insertion_sort_aux__H3ZPPQ26Speech20ScheduledSpeechEventZPQ26Speech20ScheduledSpeechEventZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X01PX11X21_v = .text:0x802AF9F4; // type:function size:0x54 scope:global -__final_insertion_sort__H2ZPPQ26Speech20ScheduledSpeechEventZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X01X11_v = .text:0x802AFA48; // type:function size:0x6C scope:global -sort__H2ZPPQ26Speech20ScheduledSpeechEventZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X01X11_v = .text:0x802AFAB4; // type:function size:0x84 scope:global -_M_create_nodes__Q24_STLt11_Deque_base2ZiZQ24_STLt9allocator1ZiPPiT1 = .text:0x802AFB38; // type:function size:0x5C scope:global -_M_initialize_map__Q24_STLt11_Deque_base2ZiZQ24_STLt9allocator1ZiUi = .text:0x802AFB94; // type:function size:0xF4 scope:global -_M_destroy_nodes__Q24_STLt11_Deque_base2ZiZQ24_STLt9allocator1ZiPPiT1 = .text:0x802AFC88; // type:function size:0x64 scope:global -_._Q24_STLt11_Deque_base2ZiZQ24_STLt9allocator1Zi = .text:0x802AFCEC; // type:function size:0x80 scope:global -clear__Q24_STLt5deque2ZiZQ24_STLt9allocator1Zi = .text:0x802AFD6C; // type:function size:0xC8 scope:global -reserve__Q24_STLt6vector2ZPQ26Speech16SpeechSampleDataZQ33UTL3Stdt9Allocator2ZPQ26Speech16SpeechSampleDataZQ26Speech21_type_SpeechSampleVecUi = .text:0x802AFE34; // type:function size:0x11C scope:global -_M_reallocate_map__Q24_STLt5deque2ZiZQ24_STLt9allocator1ZiUib = .text:0x802AFF50; // type:function size:0x1C0 scope:global -_M_push_back_aux_v__Q24_STLt5deque2ZiZQ24_STLt9allocator1ZiRCi = .text:0x802B0110; // type:function size:0xA8 scope:global -_M_pop_front_aux__Q24_STLt5deque2ZiZQ24_STLt9allocator1Zi = .text:0x802B01B8; // type:function size:0x6C scope:global -find_if__H2ZPPQ26Speech16SpeechSampleDataZPFPQ26Speech16SpeechSampleData_b_4_STLX01X01X11_X01 = .text:0x802B0224; // type:function size:0x110 scope:global -__less__H1ZQ26Speech17SPCHSampleRequest_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x802B0334; // type:function size:0xC scope:global -__adjust_heap__H4ZPQ26Speech17SPCHSampleRequestZiZQ26Speech17SPCHSampleRequestZQ24_STLt4less1ZQ26Speech17SPCHSampleRequest_4_STLX01X11X11X21X31_v = .text:0x802B0340; // type:function size:0x324 scope:global -make_heap__H2ZPQ26Speech17SPCHSampleRequestZQ24_STLt4less1ZQ26Speech17SPCHSampleRequest_4_STLX01X01X11_v = .text:0x802B0664; // type:function size:0x110 scope:global -pop_heap__H2ZPQ26Speech17SPCHSampleRequestZQ24_STLt4less1ZQ26Speech17SPCHSampleRequest_4_STLX01X01X11_v = .text:0x802B0774; // type:function size:0x1B0 scope:global -__partial_sort__H3ZPQ26Speech17SPCHSampleRequestZQ26Speech17SPCHSampleRequestZQ24_STLt4less1ZQ26Speech17SPCHSampleRequest_4_STLX01X01X01PX11X21_v = .text:0x802B0924; // type:function size:0x24C scope:global -partial_sort__H2ZPQ26Speech17SPCHSampleRequestZQ24_STLt4less1ZQ26Speech17SPCHSampleRequest_4_STLX01X01X01X11_v = .text:0x802B0B70; // type:function size:0x30 scope:global -__unguarded_partition__H3ZPQ26Speech17SPCHSampleRequestZQ26Speech17SPCHSampleRequestZQ24_STLt4less1ZQ26Speech17SPCHSampleRequest_4_STLX01X01X11X21_X01 = .text:0x802B0BA0; // type:function size:0x1B4 scope:global -__introsort_loop__H4ZPQ26Speech17SPCHSampleRequestZQ26Speech17SPCHSampleRequestZiZQ24_STLt4less1ZQ26Speech17SPCHSampleRequest_4_STLX01X01PX11X21X31_v = .text:0x802B0D54; // type:function size:0x1B8 scope:global -__unguarded_linear_insert__H3ZPQ26Speech17SPCHSampleRequestZQ26Speech17SPCHSampleRequestZQ24_STLt4less1ZQ26Speech17SPCHSampleRequest_4_STLX01X11X21_v = .text:0x802B0F0C; // type:function size:0x104 scope:global -__insertion_sort__H2ZPQ26Speech17SPCHSampleRequestZQ24_STLt4less1ZQ26Speech17SPCHSampleRequest_4_STLX01X01X11_v = .text:0x802B1010; // type:function size:0x27C scope:global -__unguarded_insertion_sort_aux__H3ZPQ26Speech17SPCHSampleRequestZQ26Speech17SPCHSampleRequestZQ24_STLt4less1ZQ26Speech17SPCHSampleRequest_4_STLX01X01PX11X21_v = .text:0x802B128C; // type:function size:0xCC scope:global -__final_insertion_sort__H2ZPQ26Speech17SPCHSampleRequestZQ24_STLt4less1ZQ26Speech17SPCHSampleRequest_4_STLX01X01X11_v = .text:0x802B1358; // type:function size:0x88 scope:global -sort__H1ZPQ26Speech17SPCHSampleRequest_4_STLX01X01_v = .text:0x802B13E0; // type:function size:0xAC scope:global -clear__Q24_STLt10_List_base2ZiZQ33UTL3Stdt9Allocator2ZiZ10_type_list = .text:0x802B148C; // type:function size:0x78 scope:global -ScheduleSpeech__H1ZQ24Csis17AcknowledgeStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1504; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis32Interrupts_StaticInterruptStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1540; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis29Interrupts_InterruptRamStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B157C; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis33Interrupts_InterruptRamHighStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B15B8; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis26Interrupts_InterruptStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B15F4; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis33AnytimeEvents_DriverHistoryStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1630; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis28AnytimeEvents_HeatJumpStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B166C; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis28Backup_DispBackupReplyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B16A8; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis28Arrest_DispArrestReplyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B16E4; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis37AnytimeEvents_DispPursuitUpdateStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1720; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis34AnytimeEvents_DispPursEscGenStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B175C; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis41AnytimeEvents_DispPursuitEscalationStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1798; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis29Backup_DispBackupUpdateStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B17D4; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis33AnytimeEvents_DispBreakAwayStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1810; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis23Setup_DispGoAheadStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B184C; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis35AnytimeEvents_DispTimeExpiredStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1888; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis33AnytimeEvents_Disp911ReportStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B18C4; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis34StaticRoadblock_DispRBUpdateStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1900; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis33StaticRoadblock_DispRBReplyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B193C; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis34AnytimeEvents_DispJurisShiftStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1978; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis22Backup_DispBUETAStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B19B4; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis26Setup_DispVehDescripStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B19F0; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis28Setup_DispNoVehDescripStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1A2C; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis31StaticRoadblock_DispSubRBStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1A68; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis35HeliSpecific_HeliSelfStrategyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1AA4; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis33HeliSpecific_HeliLostVisualStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1AE0; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis35HeliSpecific_HeliIntentToBailStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1B1C; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis30HeliSpecific_HeliBailoutStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1B58; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis31HeliSpecific_HeliSwarmingStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1B94; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis30HeliSpecific_HeliSpotterStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1BD0; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis34HeliSpecific_HeliHazardAlertStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1C0C; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis37HeliSpecific_HeliBullhornArrestStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1C48; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis37HeliSpecific_HeliQuadrentMovingStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1C84; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis31HeliSpecific_HeliQuadrentStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1CC0; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis25Setup_PrimaryEngageStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1CFC; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis24Setup_AttmptVehStpStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1D38; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis19Setup_SpotterStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1D74; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis24Setup_SpotterReplyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1DB0; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis32AnytimeEvents_Unit911ReplyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1DEC; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis25Setup_ReInitPursuitStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1E28; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis25Setup_VehicleReportStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1E64; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis23Setup_InitPursuitStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1EA0; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis26Setup_LocationReportStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1EDC; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis24Setup_SelfStrategyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1F18; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis29AnytimeEvents_CallForEVStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1F54; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis31Setup_InitialCallForBU_MSStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1F90; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis28Setup_InitialCallForBUStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1FCC; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis22Backup_CallForBUStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2008; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis23Backup_BUReminderStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2044; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis22Backup_BUArrivesStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2080; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis24Backup_UnitBUReplyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B20BC; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis28Backup_NegativeBUReplyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B20F8; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis34RollingStrategy_InitStrategyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2134; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis36RollingStrategy_CallToPositionStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2170; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis39RollingStrategy_CallToPositionRemStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B21AC; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis37RollingStrategy_StrategyExecuteStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B21E8; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis31AnytimeEvents_IntentToRamStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2224; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis31Outcome_AnticipateSuccessStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2260; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis28Outcome_AnticipateFailStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B229C; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis31AnytimeEvents_LostSuspectStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B22D8; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis19Arrest_ArrestStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2314; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis30AnytimeEvents_LostVisualStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2350; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis32AnytimeEvents_RegainVisualStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B238C; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis25Outcome_OutcomeFailStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B23C8; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis27Outcome_StrategyResetStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2404; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis29ExtraCops_SwarmingReplyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2440; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis20Setup_BullhornStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B247C; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis26Setup_BullhornPrefixStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B24B8; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis27Arrest_BullhornArrestStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B24F4; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis36AnytimeEvents_SuspectBehaviourStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2530; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis28Setup_SuspectConfirmedStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B256C; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis33AnytimeEvents_SuspectOutrunStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B25A8; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis32AnytimeEvents_SuspectUTurnStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B25E4; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis31AnytimeEvents_FocusChangeStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2620; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis34AnytimeEvents_CollisionWorldStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B265C; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis34AnytimeEvents_CollWorld_CiviStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2698; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis34AnytimeEvents_CollWorld_FlipStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B26D4; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis33AnytimeEvents_CollWorld_AirStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2710; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis34AnytimeEvents_CollWorld_SpinStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B274C; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis32AnytimeEvents_SuspectBrakeStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2788; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis32AnytimeEvents_UnitDisabledStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B27C4; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis36AnytimeEvents_PursuitUpdateRepStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2800; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis27AnytimeEvents_BailoutStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B283C; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis31AnytimeEvents_BailoutDenyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2878; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis31StaticRoadblock_CallForRBStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B28B4; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis35StaticRoadblock_CallForRB_subStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B28F0; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis32StaticRoadblock_RBReminderStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B292C; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis37StaticRoadblock_NegativeRBReplyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2968; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis32StaticRoadblock_RBApproachStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B29A4; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis30StaticRoadblock_RBEngageStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B29E0; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis31StaticRoadblock_RBAvertedStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2A1C; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis40StaticRoadblock_PursuitApproachingStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2A58; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis32Interrupts_InterruptRam_HOStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2A94; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis32Interrupts_InterruptRam_TBStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2AD0; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis32Interrupts_InterruptRam_SSStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2B0C; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis32Interrupts_InterruptRam_REStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2B48; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis27AnytimeEvents_SpottedStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2B84; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis33AnytimeEvents_DirectionHighStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2BC0; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis28Backup_CallForSwarmingStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2BFC; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis25Setup_SpotterWantedStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2C38; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis33AnytimeEvents_OffroadMomentStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2C74; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis33AnytimeEvents_WeatherReportStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2CB0; // type:function size:0x3C scope:global -reserve__Q24_STLt6vector2ZP6EAXCopZQ33UTL3Stdt9Allocator2ZP6EAXCopZQ26Speech13_type_copListUi = .text:0x802B2CEC; // type:function size:0x11C scope:global -__less__H1ZP6EAXCop_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x802B2E08; // type:function size:0xC scope:global -__adjust_heap__H4ZPP6EAXCopZiZP6EAXCopZQ24_STLt4less1ZP6EAXCop_4_STLX01X11X11X21X31_v = .text:0x802B2E14; // type:function size:0xCC scope:global -make_heap__H2ZPP6EAXCopZQ24_STLt4less1ZP6EAXCop_4_STLX01X01X11_v = .text:0x802B2EE0; // type:function size:0x7C scope:global -pop_heap__H2ZPP6EAXCopZQ24_STLt4less1ZP6EAXCop_4_STLX01X01X11_v = .text:0x802B2F5C; // type:function size:0x48 scope:global -__partial_sort__H3ZPP6EAXCopZP6EAXCopZQ24_STLt4less1ZP6EAXCop_4_STLX01X01X01PX11X21_v = .text:0x802B2FA4; // type:function size:0xB8 scope:global -partial_sort__H2ZPP6EAXCopZQ24_STLt4less1ZP6EAXCop_4_STLX01X01X01X11_v = .text:0x802B305C; // type:function size:0x30 scope:global -__unguarded_partition__H3ZPP6EAXCopZP6EAXCopZQ24_STLt4less1ZP6EAXCop_4_STLX01X01X11X21_X01 = .text:0x802B308C; // type:function size:0x50 scope:global -__introsort_loop__H4ZPP6EAXCopZP6EAXCopZiZQ24_STLt4less1ZP6EAXCop_4_STLX01X01PX11X21X31_v = .text:0x802B30DC; // type:function size:0x124 scope:global -__unguarded_linear_insert__H3ZPP6EAXCopZP6EAXCopZQ24_STLt4less1ZP6EAXCop_4_STLX01X11X21_v = .text:0x802B3200; // type:function size:0x28 scope:global -__insertion_sort__H2ZPP6EAXCopZQ24_STLt4less1ZP6EAXCop_4_STLX01X01X11_v = .text:0x802B3228; // type:function size:0x9C scope:global -__unguarded_insertion_sort_aux__H3ZPP6EAXCopZP6EAXCopZQ24_STLt4less1ZP6EAXCop_4_STLX01X01PX11X21_v = .text:0x802B32C4; // type:function size:0x58 scope:global -__final_insertion_sort__H2ZPP6EAXCopZQ24_STLt4less1ZP6EAXCop_4_STLX01X01X11_v = .text:0x802B331C; // type:function size:0x7C scope:global -sort__H1ZPP6EAXCop_4_STLX01X01_v = .text:0x802B3398; // type:function size:0xA0 scope:global -clear__Q24_STLt10_List_base2ZQ26Speech17SpeechObservationZQ33UTL3Stdt9Allocator2ZQ26Speech17SpeechObservationZQ26Speech18_type_observations = .text:0x802B3438; // type:function size:0x78 scope:global -find_if__H2ZPP8IVehicleZQ26Speech13ComComparator_4_STLX01X01X11_X01 = .text:0x802B34B0; // type:function size:0x234 scope:global -reserve__Q24_STLt6vector2ZP6EAXCopZQ33UTL3Stdt9Allocator2ZP6EAXCopZ12_type_vectorUi = .text:0x802B36E4; // type:function size:0x11C scope:global -reserve__Q24_STLt6vector2ZP8IVehicleZQ33UTL3Stdt9Allocator2ZP8IVehicleZ18_type_IVehiclePtrsUi = .text:0x802B3800; // type:function size:0x11C scope:global -ScheduleSpeech__H1ZQ24Csis14CellCallStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B391C; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis23Setup_MoreDetailsStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3958; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis25ExtraCops_RBWarningStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3994; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis26ExtraCops_RBPositionStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B39D0; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis29ExtraCops_ExtraRBEngageStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3A0C; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis30ExtraCops_ExtraRBAvertedStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3A48; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis35ExtraCops_SwarmingReplyFollowStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3A84; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis31ExtraCops_QuadrentFormingStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3AC0; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis35ExtraCops_SuspectPossiblyGoneStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3AFC; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis30ExtraCops_QuadrentMovingStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3B38; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis25ExtraCops_OtherLeadStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3B74; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis31ExtraCops_PossibleSuspectStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3BB0; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis28ExtraCops_WrongSuspectStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3BEC; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis11D_DayStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3C28; // type:function size:0x3C scope:global -ScheduleSpeech__H1ZQ24Csis19DispIntroRaceStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3C64; // type:function size:0x3C scope:global -__static_initialization_and_destruction_0 = .text:0x802B3CA0; // type:function size:0x844 scope:local -_._Q26Speech15SpeechSampleVec = .text:0x802B44E4; // type:function size:0x80 scope:global -_._Q26Speech10VoiceUsage = .text:0x802B4564; // type:function size:0x170 scope:global -_._Q26Speech15SchedSpchEvents = .text:0x802B46D4; // type:function size:0x80 scope:global -_._Q26Speech7copList = .text:0x802B4754; // type:function size:0x80 scope:global -_._Q26Speech12observations = .text:0x802B47D4; // type:function size:0x74 scope:global -GetNumBanks__Q26Speech6Module = .text:0x802B4848; // type:function size:0x8 scope:global -GetFilename__Q26Speech6Module = .text:0x802B4850; // type:function size:0x18 scope:global -QueStream__Q26Speech6Module12eNISSFX_TYPEPFv_vb = .text:0x802B4868; // type:function size:0x8 scope:global -IsStreamQueued__Q26Speech6Module = .text:0x802B4870; // type:function size:0x8 scope:global -GetCSIptr__Q26Speech10GameSpeech = .text:0x802B4878; // type:function size:0xC scope:global -GetChannel__Q26Speech10GameSpeech = .text:0x802B4884; // type:function size:0xC scope:global -GetEventDat__Q26Speech10GameSpeech = .text:0x802B4890; // type:function size:0xC scope:global -IsDataLoaded__Q26Speech10GameSpeech = .text:0x802B489C; // type:function size:0x18 scope:global -GetState__Q26Speech10SpeechFlow = .text:0x802B48B4; // type:function size:0x8 scope:global -Reset__Q26Speech10SpeechFlow = .text:0x802B48BC; // type:function size:0x4C scope:global -IsBusy__Q26Speech10SpeechFlow = .text:0x802B4908; // type:function size:0x18 scope:global -ClassKey__Q36Attrib3Gen10speechtune = .text:0x802B4920; // type:function size:0xC scope:global -GetHandle__12EAXCharacter = .text:0x802B492C; // type:function size:0x8 scope:global -SetHandle__12EAXCharacterP10HSIMABLE__ = .text:0x802B4934; // type:function size:0x8 scope:global -GetSpeakerID__12EAXCharacter = .text:0x802B493C; // type:function size:0x8 scope:global -GetCallsign__12EAXCharacter = .text:0x802B4944; // type:function size:0x8 scope:global -GetUnitNumber__12EAXCharacter = .text:0x802B494C; // type:function size:0x8 scope:global -SetCallsign__12EAXCharacteri = .text:0x802B4954; // type:function size:0x8 scope:global -SetUnitNumber__12EAXCharacteri = .text:0x802B495C; // type:function size:0x8 scope:global -SetSpeakerID__12EAXCharacteri = .text:0x802B4964; // type:function size:0x8 scope:global -SetPosition__12EAXCharacterRCQ25UMath7Vector3 = .text:0x802B496C; // type:function size:0x20 scope:global -GetPosition__12EAXCharacter = .text:0x802B498C; // type:function size:0x24 scope:global -SetSpeed__12EAXCharacterf = .text:0x802B49B0; // type:function size:0x8 scope:global -GetDistance__12EAXCharacter = .text:0x802B49B8; // type:function size:0x8 scope:global -GetHealth__12EAXCharacter = .text:0x802B49C0; // type:function size:0x8 scope:global -IsActive__12EAXCharacter = .text:0x802B49C8; // type:function size:0x8 scope:global -SetActive__12EAXCharacterb = .text:0x802B49D0; // type:function size:0x8 scope:global -GetSpeed__12EAXCharacter = .text:0x802B49D8; // type:function size:0x8 scope:global -IsDead__12EAXCharacter = .text:0x802B49E0; // type:function size:0x8 scope:global -HasLOS__12EAXCharacter = .text:0x802B49E8; // type:function size:0x8 scope:global -SetLOS__12EAXCharacterb = .text:0x802B49F0; // type:function size:0x8 scope:global -GetRandomizedCode__12EAXCharacter = .text:0x802B49F8; // type:function size:0x8 scope:global -IsHeli__6EAXCop = .text:0x802B4A00; // type:function size:0x8 scope:global -IsCross__6EAXCop = .text:0x802B4A08; // type:function size:0x14 scope:global -SetInFormation__6EAXCopb = .text:0x802B4A1C; // type:function size:0x8 scope:global -GetInFormation__6EAXCop = .text:0x802B4A24; // type:function size:0x8 scope:global -SetInPosition__6EAXCopb = .text:0x802B4A2C; // type:function size:0x8 scope:global -GetInPosition__6EAXCop = .text:0x802B4A34; // type:function size:0x8 scope:global -SetTgtOffset__6EAXCopRCQ25UMath7Vector3 = .text:0x802B4A3C; // type:function size:0x20 scope:global -GetTgtOffset__6EAXCop = .text:0x802B4A5C; // type:function size:0x24 scope:global -GetRank__6EAXCop = .text:0x802B4A80; // type:function size:0x18 scope:global -JustHitTraffic__6EAXCop = .text:0x802B4A98; // type:function size:0x10 scope:global -WasRammed__6EAXCop = .text:0x802B4AA8; // type:function size:0x1C scope:global -GetTimesRammed__6EAXCop = .text:0x802B4AC4; // type:function size:0x8 scope:global -GetTimeLastSeen__6EAXCop = .text:0x802B4ACC; // type:function size:0x4C scope:global -GetTimeAirborne__6EAXCop = .text:0x802B4B18; // type:function size:0x4C scope:global -GetTimeLastRammed__6EAXCop = .text:0x802B4B64; // type:function size:0x4C scope:global -GetTimeLastClosing__6EAXCop = .text:0x802B4BB0; // type:function size:0x4C scope:global -IsAhead__6EAXCop = .text:0x802B4BFC; // type:function size:0x30 scope:global -SetAhead__6EAXCopb = .text:0x802B4C2C; // type:function size:0x8 scope:global -IsHeli__13EAXAirSupport = .text:0x802B4C34; // type:function size:0x8 scope:global -GetCSIptr__Q26Speech10SED_NISSFX = .text:0x802B4C3C; // type:function size:0xC scope:global -GetChannel__Q26Speech10SED_NISSFX = .text:0x802B4C48; // type:function size:0xC scope:global -GetEventDat__Q26Speech10SED_NISSFX = .text:0x802B4C54; // type:function size:0xC scope:global -IsDataLoaded__Q26Speech10SED_NISSFX = .text:0x802B4C60; // type:function size:0xC scope:global -_._t12VecHashMap644ZQ26Speech16SpeechSampleDataZQ26Speech22TablePolicy_FixedAudiob0Ui100 = .text:0x802B4C6C; // type:function size:0x74 scope:global -_._Q26Speech13SpchSampleMap = .text:0x802B4CE0; // type:function size:0x58 scope:global -RebuildTable__t10VecHashMap5ZUxZQ26Speech16SpeechSampleDataZQ26Speech22TablePolicy_FixedAudiob0Ui100Ui = .text:0x802B4D38; // type:function size:0x29C scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z19MNotifySpeechStatusZQ26Speech11PursuitFlowZQ26Speech11PursuitFlowPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B4FD4; // type:function size:0x88 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z10MReqBackupZQ26Speech12StrategyFlowZQ26Speech12StrategyFlowPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B505C; // type:function size:0x88 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z19MNotifySpeechStatusZQ26Speech12StrategyFlowZQ26Speech12StrategyFlowPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B50E4; // type:function size:0x88 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z15MGamePlayMomentZQ26Speech8ObserverZQ26Speech8ObserverPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B516C; // type:function size:0x88 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z19MNotifySpeechStatusZQ26Speech8ObserverZQ26Speech8ObserverPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B51F4; // type:function size:0x88 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z10MMiscSoundZQ26Speech8ObserverZQ26Speech8ObserverPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B527C; // type:function size:0x88 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z13MReqRoadBlockZQ26Speech13RoadblockFlowZQ26Speech13RoadblockFlowPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B5304; // type:function size:0x88 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z16MNotifyMusicFlowZQ26Speech9MusicFlowZQ26Speech9MusicFlowPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B538C; // type:function size:0x88 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z11MPerpBustedZ7SoundAIZ7SoundAIPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B5414; // type:function size:0x88 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z12MRestartRaceZ7SoundAIZ7SoundAIPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B549C; // type:function size:0x88 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z10MMiscSoundZ7SoundAIZ7SoundAIPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B5524; // type:function size:0x88 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z11MUnspawnCopZ7SoundAIZ7SoundAIPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B55AC; // type:function size:0x88 scope:global -Call__Q36Hermes7Handlert13MemberHandler3Z15MGamePlayMomentZ7SoundAIZ7SoundAIPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B5634; // type:function size:0x88 scope:global -_._Q26Speech15SpeechHashIDMap = .text:0x802B56BC; // type:function size:0xE0 scope:global -_._Q26Speech12EventHistory = .text:0x802B579C; // type:function size:0xE0 scope:global -_._Q26Speech13SPCHEventList = .text:0x802B587C; // type:function size:0x84 scope:global -_._Q26Speech13SampleReqList = .text:0x802B5900; // type:function size:0xB0 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZQ26Speech11HistoryPairi264i16UiUi = .text:0x802B59B0; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZQ26Speech11HistoryPairi264i16PQ26Speech11HistoryPairUi = .text:0x802B59B8; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZQ26Speech11HistoryPairi264i16Ui = .text:0x802B59BC; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZQ26Speech11HistoryPairi264i16 = .text:0x802B59C4; // type:function size:0x8 scope:global -OnGrowRequest__Q23UTLt6Vector2ZQ26Speech11HistoryPairi16Ui = .text:0x802B59CC; // type:function size:0x4 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZQ26Speech15SpeechEventPairi264i16UiUi = .text:0x802B59D0; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZQ26Speech15SpeechEventPairi264i16PQ26Speech15SpeechEventPairUi = .text:0x802B59D8; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZQ26Speech15SpeechEventPairi264i16Ui = .text:0x802B59DC; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZQ26Speech15SpeechEventPairi264i16 = .text:0x802B59E4; // type:function size:0x8 scope:global -OnGrowRequest__Q23UTLt6Vector2ZQ26Speech15SpeechEventPairi16Ui = .text:0x802B59EC; // type:function size:0x4 scope:global -_._Q23UTLt6Vector2ZQ26Speech15SpeechEventPairi16 = .text:0x802B59F0; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZQ26Speech15SpeechEventPairi264i16 = .text:0x802B5A24; // type:function size:0xB4 scope:global -_._Q23UTLt6Vector2ZQ26Speech11HistoryPairi16 = .text:0x802B5AD8; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZQ26Speech11HistoryPairi264i16 = .text:0x802B5B0C; // type:function size:0xB4 scope:global -GetGrowSize__CQ23UTLt6Vector2ZQ26Speech11HistoryPairi16Ui = .text:0x802B5BC0; // type:function size:0x20 scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZQ26Speech11HistoryPairi16 = .text:0x802B5BE0; // type:function size:0xC scope:global -GetGrowSize__CQ23UTLt6Vector2ZQ26Speech15SpeechEventPairi16Ui = .text:0x802B5BEC; // type:function size:0x20 scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZQ26Speech15SpeechEventPairi16 = .text:0x802B5C0C; // type:function size:0xC scope:global -_GLOBAL_.I.VALIDATE_SED_GENERATE = .text:0x802B5C18; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x802B5C44; // type:label scope:local -SetPoints__11SkidSegmentP8bVector3T1 = .text:0x802B5C44; // type:function size:0x7C scope:global -GetPoints__11SkidSegmentP8bVector3T1 = .text:0x802B5CC0; // type:function size:0xC8 scope:global -GetEndPoints__11SkidSegmentP8bVector3T1 = .text:0x802B5D88; // type:function size:0xD8 scope:global -__7SkidSetP9SkidMakerP8bVector3T2if = .text:0x802B5E60; // type:function size:0xDC scope:global -_._7SkidSet = .text:0x802B5F3C; // type:function size:0x74 scope:global -AddSegment__7SkidSetP8bVector3T1bf = .text:0x802B5FB0; // type:function size:0x2F0 scope:global -FinishedAddingSkids__7SkidSet = .text:0x802B62A0; // type:function size:0x24 scope:global -Render__7SkidSetP5eViewUc = .text:0x802B62C4; // type:function size:0x180 scope:global -CreateNewSkidSet__FP9SkidMakerP8bVector3T1if = .text:0x802B6444; // type:function size:0xC4 scope:global -MakeSkid__9SkidMakerP3CarP8bVector3T2if = .text:0x802B6508; // type:function size:0x160 scope:global -MakeNoSkid__9SkidMaker = .text:0x802B6668; // type:function size:0x2C scope:global -InitSkids__Fi = .text:0x802B6694; // type:function size:0xBC scope:global -CloseSkids__Fv = .text:0x802B6750; // type:function size:0x64 scope:global -DeleteThisSkid__FP7SkidSet = .text:0x802B67B4; // type:function size:0x3C scope:global -DeleteAllSkids__Fv = .text:0x802B67F0; // type:function size:0x60 scope:global -RenderSkids__FP5eViewP4Clan = .text:0x802B6850; // type:function size:0x158 scope:global -InitClans__Fv = .text:0x802B69A8; // type:function size:0x50 scope:global -FlushClans__Fv = .text:0x802B69F8; // type:function size:0x5C scope:global -CloseClans__Fv = .text:0x802B6A54; // type:function size:0x48 scope:global -GetClan__FP8bVector3 = .text:0x802B6A9C; // type:function size:0x154 scope:global -RenderClans__FP5eView = .text:0x802B6BF0; // type:function size:0xD4 scope:global -__4ClanP8bVector3Ui = .text:0x802B6CC4; // type:function size:0x68 scope:global -_._4Clan = .text:0x802B6D2C; // type:function size:0x8C scope:global -GetNumTrackOBBs__Fv = .text:0x802B6DB8; // type:function size:0xC scope:global -GetTrackOBB__Fi = .text:0x802B6DC4; // type:function size:0x14 scope:global -LoaderTrackOBB__FP6bChunk = .text:0x802B6DD8; // type:function size:0xC4 scope:global -UnloaderTrackOBB__FP6bChunk = .text:0x802B6E9C; // type:function size:0x38 scope:global -EstablishRemoteCaffeineConnection__Fv = .text:0x802B6ED4; // type:function size:0x4 scope:global -GetElevation__18TopologyCoordinatePC8bVector3P11TerrainTypeP8bVector3Pb = .text:0x802B6ED8; // type:function size:0x104 scope:global -HasTopology__18TopologyCoordinatePC8bVector2 = .text:0x802B6FDC; // type:function size:0x54 scope:global -LoaderTrackPositionMarkers__FP6bChunk = .text:0x802B7030; // type:function size:0xD4 scope:global -UnloaderTrackPositionMarkers__FP6bChunk = .text:0x802B7104; // type:function size:0x94 scope:global -GetNumTrackPositionMarkers__FiUi = .text:0x802B7198; // type:function size:0x50 scope:global -ForEachTrackPositionMarker__FPFP19TrackPositionMarkerUi_bUi = .text:0x802B71E8; // type:function size:0x60 scope:global -GetTrackPositionMarker__FiUii = .text:0x802B7248; // type:function size:0x58 scope:global -GetTrackPositionMarker__FUii = .text:0x802B72A0; // type:function size:0x48 scope:global -GetTrackInfo__9TrackInfoi = .text:0x802B72E8; // type:function size:0x54 scope:global -LoaderTrackInfo__9TrackInfoP6bChunk = .text:0x802B733C; // type:function size:0x1F8 scope:global -UnloaderTrackInfo__9TrackInfoP6bChunk = .text:0x802B7534; // type:function size:0x38 scope:global -DoLinesIntersect__FRC8bVector2N30 = .text:0x802B756C; // type:function size:0xA0 scope:global -Clear__16TrackPathManager = .text:0x802B760C; // type:function size:0x64 scope:global -Loader__16TrackPathManagerP6bChunk = .text:0x802B7670; // type:function size:0x1DC scope:global -Unloader__16TrackPathManagerP6bChunk = .text:0x802B784C; // type:function size:0x6C scope:global -DisableAllBarriers__16TrackPathManager = .text:0x802B78B8; // type:function size:0x38 scope:global -EnableBarriers__16TrackPathManagerPCc = .text:0x802B78F0; // type:function size:0xA0 scope:global -BuildZoneInfoTable__16TrackPathManager = .text:0x802B7990; // type:function size:0xA0 scope:global -FindZone__16TrackPathManagerPC8bVector218eTrackPathZoneTypeP13TrackPathZone = .text:0x802B7A30; // type:function size:0x298 scope:global -ResetZoneVisitInfos__16TrackPathManager = .text:0x802B7CC8; // type:function size:0x2C scope:global -IsPointInside__13TrackPathZonePC8bVector2 = .text:0x802B7CF4; // type:function size:0x30 scope:global -TrackPathInitRemoteCaffeineConnection__Fv = .text:0x802B7D24; // type:function size:0x4 scope:global -LoaderTrackPath__FP6bChunk = .text:0x802B7D28; // type:function size:0x2C scope:global -UnloaderTrackPath__FP6bChunk = .text:0x802B7D54; // type:function size:0x2C scope:global -GetSegmentNextTo__13TrackPathZoneP8bVector2N21 = .text:0x802B7D80; // type:function size:0x284 scope:global -__12TSMemoryPooliiPCci = .text:0x802B8004; // type:function size:0x208 scope:global -GetNewNode__12TSMemoryPooliibPCc = .text:0x802B820C; // type:function size:0x58 scope:global -RemoveNode__12TSMemoryPoolP12TSMemoryNode = .text:0x802B8264; // type:function size:0x1C scope:global -Malloc__12TSMemoryPooliPCcbT3i = .text:0x802B8280; // type:function size:0x384 scope:global -Free__12TSMemoryPoolPv = .text:0x802B8604; // type:function size:0x174 scope:global -GetAmountFree__12TSMemoryPool = .text:0x802B8778; // type:function size:0x20 scope:global -GetLargestFreeBlock__12TSMemoryPool = .text:0x802B8798; // type:function size:0x8C scope:global -GetNextNode__12TSMemoryPoolbP12TSMemoryNode = .text:0x802B8824; // type:function size:0x4C scope:global -GetNextFreeNode__12TSMemoryPoolbP12TSMemoryNode = .text:0x802B8870; // type:function size:0x58 scope:global -GetNextAllocatedNode__12TSMemoryPoolbP12TSMemoryNode = .text:0x802B88C8; // type:function size:0x58 scope:global -GetPoolChecksum__12TSMemoryPool = .text:0x802B8920; // type:function size:0x8 scope:global -DebugPrint__12TSMemoryPool = .text:0x802B8928; // type:function size:0x18 scope:global -LoaderTrackStreamer__FP6bChunk = .text:0x802B8940; // type:function size:0x2C scope:global -UnloaderTrackStreamer__FP6bChunk = .text:0x802B896C; // type:function size:0x2C scope:global -RefreshTrackStreamer__Fv = .text:0x802B8998; // type:function size:0x28 scope:global -__13TrackStreamer = .text:0x802B89C0; // type:function size:0x12C scope:global -Loader__13TrackStreamerP6bChunk = .text:0x802B8AEC; // type:function size:0x2B4 scope:global -Unloader__13TrackStreamerP6bChunk = .text:0x802B8DA0; // type:function size:0xC0 scope:global -ClearCurrentZones__13TrackStreamer = .text:0x802B8E60; // type:function size:0xC8 scope:global -InitMemoryPool__13TrackStreameri = .text:0x802B8F28; // type:function size:0x64 scope:global -GetMemoryPoolSize__13TrackStreamer = .text:0x802B8F8C; // type:function size:0x58 scope:global -CountUserAllocations__13TrackStreamerPPCc = .text:0x802B8FE4; // type:function size:0xE0 scope:global -FindSection__13TrackStreameri = .text:0x802B90C4; // type:function size:0x44 scope:global -FindSectionByAddress__13TrackStreameri = .text:0x802B9108; // type:function size:0x7C scope:global -GetCombinedSectionNumber__13TrackStreameri = .text:0x802B9184; // type:function size:0xC4 scope:global -InitRegion__13TrackStreamerPCcb = .text:0x802B9248; // type:function size:0x148 scope:global -HibernateStreamingSections__13TrackStreamer = .text:0x802B9390; // type:function size:0xC scope:global -FlushHibernatingSections__13TrackStreamer = .text:0x802B939C; // type:function size:0x58 scope:global -AllocateMemory__13TrackStreamerP21TrackStreamingSectioni = .text:0x802B93F4; // type:function size:0x40 scope:global -LoadDiscBundle__13TrackStreamerP17DiscBundleSection = .text:0x802B9434; // type:function size:0xA0 scope:global -DiscBundleLoadedCallback__13TrackStreamerii = .text:0x802B94D4; // type:function size:0x2C scope:global -DiscBundleLoadedCallback__13TrackStreamerP17DiscBundleSection = .text:0x802B9500; // type:function size:0x8C scope:global -LoadSection__13TrackStreamerP21TrackStreamingSection = .text:0x802B958C; // type:function size:0xD0 scope:global -ActivateSection__13TrackStreamerP21TrackStreamingSection = .text:0x802B965C; // type:function size:0xA8 scope:global -UnactivateSection__13TrackStreamerP21TrackStreamingSection = .text:0x802B9704; // type:function size:0x74 scope:global -WillUnloadBlock__13TrackStreamerP21TrackStreamingSection = .text:0x802B9778; // type:function size:0x34 scope:global -UnloadSection__13TrackStreamerP21TrackStreamingSection = .text:0x802B97AC; // type:function size:0xA8 scope:global -NeedsGameStateActivation__13TrackStreamerP21TrackStreamingSection = .text:0x802B9854; // type:function size:0x8 scope:global -SectionLoadedCallback__13TrackStreamerii = .text:0x802B985C; // type:function size:0x2C scope:global -SectionLoadedCallback__13TrackStreamerP21TrackStreamingSection = .text:0x802B9888; // type:function size:0xF8 scope:global -EmptyCaffeineLayers__13TrackStreamer = .text:0x802B9980; // type:function size:0x10 scope:global -SetLoadingPhase__13TrackStreamerQ213TrackStreamer13eLoadingPhase = .text:0x802B9990; // type:function size:0x48 scope:global -UnloadLeastRecentlyUsedSection__13TrackStreamer = .text:0x802B99D8; // type:function size:0xA8 scope:global -JettisonSection__13TrackStreamerP21TrackStreamingSection = .text:0x802B9A80; // type:function size:0xF8 scope:global -JettisonLeastImportantSection__13TrackStreamer = .text:0x802B9B78; // type:function size:0x44 scope:global -ChooseSectionToJettison__13TrackStreamer = .text:0x802B9BBC; // type:function size:0x280 scope:global -UnJettisonSections__13TrackStreamer = .text:0x802B9E3C; // type:function size:0x5C scope:global -BuildHoleMovements__13TrackStreamerP12HoleMovementiiiPii = .text:0x802B9E98; // type:function size:0x7C8 scope:global -DoHoleFilling__13TrackStreameri = .text:0x802BA660; // type:function size:0x260 scope:global -SetStreamingPosition__13TrackStreameriPC8bVector3 = .text:0x802BA8C0; // type:function size:0x60 scope:global -PredictStreamingPosition__13TrackStreameriPC8bVector3N22b = .text:0x802BA920; // type:function size:0x54 scope:global -GetPredictedZone__13TrackStreamerP22StreamingPositionEntry = .text:0x802BA974; // type:function size:0x294 scope:global -ClearStreamingPositions__13TrackStreamer = .text:0x802BAC08; // type:function size:0x2C scope:global -RemoveCurrentStreamingSections__13TrackStreamer = .text:0x802BAC34; // type:function size:0x70 scope:global -AddCurrentStreamingSections__13TrackStreamerPsii = .text:0x802BACA4; // type:function size:0x128 scope:global -DetermineStreamingSections__13TrackStreamer = .text:0x802BADCC; // type:function size:0x1A4 scope:global -AllocateSectionMemory__13TrackStreamerPi = .text:0x802BAF70; // type:function size:0x2FC scope:global -FreeSectionMemory__13TrackStreamer = .text:0x802BB26C; // type:function size:0x80 scope:global -HandleMemoryAllocation__13TrackStreamer = .text:0x802BB2EC; // type:function size:0x1F4 scope:global -AllocateUserMemory__13TrackStreameriPCci = .text:0x802BB4E0; // type:function size:0x5C scope:global -FreeUserMemory__13TrackStreamerPv = .text:0x802BB53C; // type:function size:0x44 scope:global -IsUserMemory__13TrackStreamerPv = .text:0x802BB580; // type:function size:0x34 scope:global -MakeSpaceInPool__13TrackStreamerib = .text:0x802BB5B4; // type:function size:0xAC scope:global -MakeSpaceInPool__13TrackStreameriPFi_vi = .text:0x802BB660; // type:function size:0x90 scope:global -ReadyToMakeSpaceInPool__13TrackStreamer = .text:0x802BB6F0; // type:function size:0x54 scope:global -DetermineCurrentZones__13TrackStreamerPs = .text:0x802BB744; // type:function size:0x108 scope:global -ServiceGameState__13TrackStreamer = .text:0x802BB84C; // type:function size:0xC4 scope:global -ServiceNonGameState__13TrackStreamer = .text:0x802BB910; // type:function size:0x38 scope:global -BlockUntilLoadingComplete__13TrackStreamer = .text:0x802BB948; // type:function size:0x34 scope:global -WaitForCurrentLoadingToComplete__13TrackStreamer = .text:0x802BB97C; // type:function size:0x80 scope:global -IsLoadingInProgress__13TrackStreamer = .text:0x802BB9FC; // type:function size:0x6C scope:global -AreAllSectionsActivated__13TrackStreamer = .text:0x802BBA68; // type:function size:0x38 scope:global -RefreshLoading__13TrackStreamer = .text:0x802BBAA0; // type:function size:0x48 scope:global -HandleZoneSwitching__13TrackStreamer = .text:0x802BBAE8; // type:function size:0x60 scope:global -SwitchZones__13TrackStreamerPs = .text:0x802BBB48; // type:function size:0x30C scope:global -HandleLoading__13TrackStreamer = .text:0x802BBE54; // type:function size:0x250 scope:global -GetLoadingPriority__13TrackStreamerP21TrackStreamingSectionP22StreamingPositionEntryb = .text:0x802BC0A4; // type:function size:0x2C4 scope:global -AssignLoadingPriority__13TrackStreamer = .text:0x802BC368; // type:function size:0xC0 scope:global -CalculateLoadingBacklog__13TrackStreamer = .text:0x802BC428; // type:function size:0xDC scope:global -StartLoadingSections__13TrackStreamer = .text:0x802BC504; // type:function size:0x118 scope:global -FinishedLoading__13TrackStreamer = .text:0x802BC61C; // type:function size:0xA4 scope:global -PlotLoadingMarker__13TrackStreamerP22StreamingPositionEntry = .text:0x802BC6C0; // type:function size:0xC scope:global -CheckLoadingBar__13TrackStreamer = .text:0x802BC6CC; // type:function size:0x32C scope:global -GetSectionToActivate__13TrackStreameri = .text:0x802BC9F8; // type:function size:0xAC scope:global -HandleSectionActivation__13TrackStreamer = .text:0x802BCAA4; // type:function size:0x8C scope:global -UnloadEverything__13TrackStreamer = .text:0x802BCB30; // type:function size:0x90 scope:global -BuildSceneryOverrideHashTable__Fv = .text:0x802BCBC0; // type:function size:0x68 scope:global -FindSceneryHeirarchyByName__FUi = .text:0x802BCC28; // type:function size:0x9C scope:global -GetSceneryOverrideInfo__Fi = .text:0x802BCCC4; // type:function size:0x14 scope:global -AssignOverrides__19SceneryOverrideInfoP20ScenerySectionHeader = .text:0x802BCCD8; // type:function size:0x368 scope:global -AssignOverrides__19SceneryOverrideInfo = .text:0x802BD040; // type:function size:0x40 scope:global -LoadPrecullerBooBooScript__FPCcb = .text:0x802BD080; // type:function size:0x188 scope:global -LoadPrecullerBooBooScripts__Fv = .text:0x802BD208; // type:function size:0x2C scope:global -LoaderSceneryGroup__FP6bChunk = .text:0x802BD234; // type:function size:0xD0 scope:global -UnloaderSceneryGroup__FP6bChunk = .text:0x802BD304; // type:function size:0x70 scope:global -FindSceneryGroup__FUi = .text:0x802BD374; // type:function size:0x34 scope:global -EnableSceneryGroup__FUib = .text:0x802BD3A8; // type:function size:0xE4 scope:global -DisableSceneryGroup__FUi = .text:0x802BD48C; // type:function size:0x80 scope:global -DisableAllSceneryGroups__Fv = .text:0x802BD50C; // type:function size:0xA0 scope:global -GetScenerySectionHeader__Fi = .text:0x802BD5AC; // type:function size:0x28 scope:global -LoaderScenery__FP6bChunk = .text:0x802BD5D4; // type:function size:0xA5C scope:global -UnloaderScenery__FP6bChunk = .text:0x802BE030; // type:function size:0x380 scope:global -FindSceneryInfo__FUi = .text:0x802BE3B0; // type:function size:0x6C scope:global -FindSceneryInstance__FUi = .text:0x802BE41C; // type:function size:0x7C scope:global -RenderVisibleSectionBoundary__FP22VisibleSectionBoundaryP5eView = .text:0x802BE498; // type:function size:0x378 scope:global -RenderVisibleZones__FP5eView = .text:0x802BE810; // type:function size:0x70 scope:global -InitVisibleZones__Fv = .text:0x802BE880; // type:function size:0x68 scope:global -CloseVisibleZones__Fv = .text:0x802BE8E8; // type:function size:0xB0 scope:global -IsInTable__FPsii = .text:0x802BE998; // type:function size:0x38 scope:global -ToggleIsInTable__FPsiii = .text:0x802BE9D0; // type:function size:0x70 scope:global -DrawAScenery__20ScenerySectionHeaderiP15SceneryCullInfoi = .text:0x802BEA40; // type:function size:0x830 scope:global -TreeCull__20ScenerySectionHeaderP15SceneryCullInfo = .text:0x802BF270; // type:function size:0x128 scope:global -WhatSectionsShouldWeDraw__20GrandSceneryCullInfoPsiP15SceneryCullInfo = .text:0x802BF398; // type:function size:0x268 scope:global -CullView__20GrandSceneryCullInfoP15SceneryCullInfo = .text:0x802BF600; // type:function size:0x88 scope:global -DoCulling__20GrandSceneryCullInfo = .text:0x802BF688; // type:function size:0x2CC scope:global -StuffScenery__20GrandSceneryCullInfoP5eViewi = .text:0x802BF954; // type:function size:0x27C scope:global -ServicePreculler__Fv = .text:0x802BFBD0; // type:function size:0x4 scope:global -Get2PlayerSectionNumber__FiPCc = .text:0x802BFBD4; // type:function size:0x104 scope:global -Get2PlayerSectionNumber__Fi = .text:0x802BFCD8; // type:function size:0x28 scope:global -Get1PlayerSectionNumber__FiPCc = .text:0x802BFD00; // type:function size:0xA8 scope:global -GetBoundarySectionNumber__FiPCc = .text:0x802BFDA8; // type:function size:0x70 scope:global -LoaderVisibleSections__FP6bChunk = .text:0x802BFE18; // type:function size:0x2C scope:global -UnloaderVisibleSections__FP6bChunk = .text:0x802BFE44; // type:function size:0x2C scope:global -GetScenerySectionName__FPci = .text:0x802BFE70; // type:function size:0x88 scope:global -GetScenerySectionName__Fi = .text:0x802BFEF8; // type:function size:0x44 scope:global -MyIsPointInPoly__FPC8bVector2T0i = .text:0x802BFF3C; // type:function size:0xBC scope:local -IsPointInside__22VisibleSectionBoundaryPC8bVector2 = .text:0x802BFFF8; // type:function size:0x68 scope:global -GetDistanceOutside__22VisibleSectionBoundaryPC8bVector2f = .text:0x802C0060; // type:function size:0xD8 scope:global -AddVisibleSection__22DrivableScenerySectioni = .text:0x802C0138; // type:function size:0x84 scope:global -IsSectionVisible__22DrivableScenerySectioni = .text:0x802C01BC; // type:function size:0x44 scope:global -RemoveVisibleSection__22DrivableScenerySectioni = .text:0x802C0200; // type:function size:0x98 scope:global -SortVisibleSections__22DrivableScenerySection = .text:0x802C0298; // type:function size:0x64 scope:global -FindLoadingSection__21VisibleSectionManageri = .text:0x802C02FC; // type:function size:0x6C scope:global -GetSectionsToLoad__21VisibleSectionManagerP14LoadingSectionPsi = .text:0x802C0368; // type:function size:0x240 scope:global -__21VisibleSectionManager = .text:0x802C05A8; // type:function size:0x11C scope:global -AllocateUserInfo__21VisibleSectionManageri = .text:0x802C06C4; // type:function size:0x80 scope:global -UnallocateUserInfo__21VisibleSectionManageri = .text:0x802C0744; // type:function size:0x54 scope:global -ActivateOverlay__21VisibleSectionManagerPCc = .text:0x802C0798; // type:function size:0xDC scope:global -ActivateOverlay__21VisibleSectionManagerP21VisibleSectionOverlayT1 = .text:0x802C0874; // type:function size:0x12C scope:global -UnactivateOverlay__21VisibleSectionManager = .text:0x802C09A0; // type:function size:0x68 scope:global -Loader__21VisibleSectionManagerP6bChunk = .text:0x802C0A08; // type:function size:0x424 scope:global -Unloader__21VisibleSectionManagerP6bChunk = .text:0x802C0E2C; // type:function size:0x84 scope:global -FindBoundary__21VisibleSectionManageri = .text:0x802C0EB0; // type:function size:0x50 scope:global -FindClosestBoundary__21VisibleSectionManagerPC8bVector2Pf = .text:0x802C0F00; // type:function size:0xEC scope:global -FindBoundary__21VisibleSectionManagerPC8bVector2 = .text:0x802C0FEC; // type:function size:0xA8 scope:global -FindDrivableSection__21VisibleSectionManagerPC8bVector2 = .text:0x802C1094; // type:function size:0xBC scope:global -FindDrivableSection__21VisibleSectionManageri = .text:0x802C1150; // type:function size:0x2C scope:global -GetGroupInfo__21VisibleSectionManagerPCc = .text:0x802C117C; // type:function size:0x78 scope:global -EnableGroup__21VisibleSectionManagerUi = .text:0x802C11F4; // type:function size:0x30 scope:global -LoaderWeatherMan__FP6bChunk = .text:0x802C1224; // type:function size:0x124 scope:global -UnloaderWeatherMan__FP6bChunk = .text:0x802C1348; // type:function size:0x84 scope:global -AddRegion__FP13GenericRegion = .text:0x802C13CC; // type:function size:0x74 scope:global -RemoveRegion__FP13GenericRegion = .text:0x802C1440; // type:function size:0x14 scope:global -DepthRegion__FP13GenericRegionT0 = .text:0x802C1454; // type:function size:0x1EC scope:global -CalculateRegionInfo__11RegionQueryP5eView10RegionTypei = .text:0x802C1640; // type:function size:0x4B8 scope:global -GetClosestRegionInView__FP5eViewP8bVector3Pf = .text:0x802C1AF8; // type:function size:0x25C scope:global -__14ScreenEffectDB = .text:0x802C1D54; // type:function size:0xCC scope:global -Update__14ScreenEffectDBf = .text:0x802C1E20; // type:function size:0x70 scope:global -AddScreenEffect__14ScreenEffectDB16ScreenEffectTypeffff = .text:0x802C1E90; // type:function size:0x44 scope:global -AddScreenEffect__14ScreenEffectDB16ScreenEffectTypeP15ScreenEffectDefUi19ScreenEffectControl = .text:0x802C1ED4; // type:function size:0x210 scope:global -AddPaletteEffect__14ScreenEffectDB19ScreenEffectPalette = .text:0x802C20E4; // type:function size:0x30 scope:global -AddPaletteEffect__14ScreenEffectDBP22ScreenEffectPaletteDef = .text:0x802C2114; // type:function size:0x78 scope:global -InitScreenEFX__Fv = .text:0x802C218C; // type:function size:0x4 scope:global -TickSFX__Fv = .text:0x802C2190; // type:function size:0x5C scope:global -UpdateAllScreenEFX__Fv = .text:0x802C21EC; // type:function size:0x84 scope:global -FlushAccumulationBuffer__Fv = .text:0x802C2270; // type:function size:0x10 scope:global -AccumulationBufferFlushed__Fv = .text:0x802C2280; // type:function size:0x10 scope:global -QueryFlushAccumulationBuffer__Fv = .text:0x802C2290; // type:function size:0xC scope:global -DoTinting__FP5eView = .text:0x802C229C; // type:function size:0x108 scope:global -DoTunnelBloom__FP5eView = .text:0x802C23A4; // type:function size:0x748 scope:global -emEventManagerInit__Fv = .text:0x802C2AEC; // type:function size:0x5C scope:global -LoaderEventManager__FP6bChunk = .text:0x802C2B48; // type:function size:0x230 scope:global -UnloaderEventManager__FP6bChunk = .text:0x802C2D78; // type:function size:0xC4 scope:global -emAddHandler__FPFP7emEvent_vUi = .text:0x802C2E3C; // type:function size:0xE8 scope:global -emRemoveHandler__FPFP7emEvent_v = .text:0x802C2F24; // type:function size:0x9C scope:global -emAddEvent__F8EVENT_ID = .text:0x802C2FC0; // type:function size:0x8C scope:global -emProcessAllEvents__Fv = .text:0x802C304C; // type:function size:0x22C scope:global -emTriggerEventsInSection__FP8bVector3i = .text:0x802C3278; // type:function size:0x158 scope:global -__less__H1Zi_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x802C33D0; // type:function size:0xC scope:global -__adjust_heap__H4ZPiZiZiZQ24_STLt4less1Zi_4_STLX01X11X11X21X31_v = .text:0x802C33DC; // type:function size:0xCC scope:global -make_heap__H2ZPiZQ24_STLt4less1Zi_4_STLX01X01X11_v = .text:0x802C34A8; // type:function size:0x7C scope:global -pop_heap__H2ZPiZQ24_STLt4less1Zi_4_STLX01X01X11_v = .text:0x802C3524; // type:function size:0x48 scope:global -__partial_sort__H3ZPiZiZQ24_STLt4less1Zi_4_STLX01X01X01PX11X21_v = .text:0x802C356C; // type:function size:0xB8 scope:global -partial_sort__H2ZPiZQ24_STLt4less1Zi_4_STLX01X01X01X11_v = .text:0x802C3624; // type:function size:0x30 scope:global -__unguarded_partition__H3ZPiZiZQ24_STLt4less1Zi_4_STLX01X01X11X21_X01 = .text:0x802C3654; // type:function size:0x50 scope:global -__introsort_loop__H4ZPiZiZiZQ24_STLt4less1Zi_4_STLX01X01PX11X21X31_v = .text:0x802C36A4; // type:function size:0x124 scope:global -__unguarded_linear_insert__H3ZPiZiZQ24_STLt4less1Zi_4_STLX01X11X21_v = .text:0x802C37C8; // type:function size:0x28 scope:global -__insertion_sort__H2ZPiZQ24_STLt4less1Zi_4_STLX01X01X11_v = .text:0x802C37F0; // type:function size:0x9C scope:global -__unguarded_insertion_sort_aux__H3ZPiZiZQ24_STLt4less1Zi_4_STLX01X01PX11X21_v = .text:0x802C388C; // type:function size:0x58 scope:global -__final_insertion_sort__H2ZPiZQ24_STLt4less1Zi_4_STLX01X01X11_v = .text:0x802C38E4; // type:function size:0x7C scope:global -sort__H1ZPi_4_STLX01X01_v = .text:0x802C3960; // type:function size:0xA0 scope:global -_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP14ModelHeirarchyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP14ModelHeirarchyZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP14ModelHeirarchyZ9_type_mapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZP14ModelHeirarchyT1 = .text:0x802C3A00; // type:function size:0x13C scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP14ModelHeirarchyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP14ModelHeirarchyZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP14ModelHeirarchyZ9_type_mapRCQ24_STLt4pair2ZCUiZP14ModelHeirarchy = .text:0x802C3B3C; // type:function size:0x118 scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP14ModelHeirarchyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP14ModelHeirarchyZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP14ModelHeirarchyZ9_type_mapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZP14ModelHeirarchyZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZP14ModelHeirarchyRCQ24_STLt4pair2ZCUiZP14ModelHeirarchy = .text:0x802C3C54; // type:function size:0x26C scope:global -__Q33UTL3Stdt3map3ZUiZP14ModelHeirarchyZ9_type_map = .text:0x802C3EC0; // type:function size:0x74 scope:global -__static_initialization_and_destruction_0 = .text:0x802C3F34; // type:function size:0x1440 scope:local -ClearTable__9bBitTable = .text:0x802C5374; // type:function size:0x30 scope:global -ReadyToMakeSpaceInPoolBridge__13TrackStreameri = .text:0x802C53A4; // type:function size:0x20 scope:global -OverrideMalloc__12TSMemoryPoolPviPCcii = .text:0x802C53C4; // type:function size:0x94 scope:global -OverrideFree__12TSMemoryPoolPvT1 = .text:0x802C5458; // type:function size:0x24 scope:global -OverrideGetAmountFree__12TSMemoryPoolPv = .text:0x802C547C; // type:function size:0x20 scope:global -OverrideGetLargestFreeBlock__12TSMemoryPoolPv = .text:0x802C549C; // type:function size:0x20 scope:global -GetSectionNumber__22PrecullerBooBooManagerR8bVector3 = .text:0x802C54BC; // type:function size:0x3C scope:global -GetByte__22PrecullerBooBooManageri = .text:0x802C54F8; // type:function size:0xC scope:global -GetBit__22PrecullerBooBooManageri = .text:0x802C5504; // type:function size:0x14 scope:global -_GLOBAL_.I.SetPoints__11SkidSegmentP8bVector3T1 = .text:0x802C5518; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x802C5544; // type:label scope:local -__5World = .text:0x802C5544; // type:function size:0xB4 scope:global -_._5World = .text:0x802C55F8; // type:function size:0xA0 scope:global -ResetTimeScale__5World = .text:0x802C5698; // type:function size:0x2C scope:global -World_DEBUGStartLocation__FRQ25UMath7Vector3T0 = .text:0x802C56C4; // type:function size:0x3A0 scope:global -HideNonRaceSmackable__FP6IModel = .text:0x802C5A64; // type:function size:0x8C scope:local -World_RestoreProps__Fv = .text:0x802C5AF0; // type:function size:0x198 scope:global -World_Service__Fv = .text:0x802C5C88; // type:function size:0xB4 scope:global -World_Init__Fv = .text:0x802C5D3C; // type:function size:0x94 scope:local -World_Shutdown__Fv = .text:0x802C5DD0; // type:function size:0x48 scope:local -GetPlayerByIndex__6Playeri = .text:0x802C5E18; // type:function size:0x8 scope:global -InitWithDefaults__14RaceParameters = .text:0x802C5E20; // type:function size:0x110 scope:global -Init__21DebugVehicleSelection = .text:0x802C5F30; // type:function size:0x44 scope:global -__21DebugVehicleSelection = .text:0x802C5F74; // type:function size:0x1F0 scope:global -_._21DebugVehicleSelection = .text:0x802C6164; // type:function size:0x1E4 scope:global -Service__21DebugVehicleSelection = .text:0x802C6348; // type:function size:0x78 scope:global -InitSelectionList__21DebugVehicleSelection = .text:0x802C63C0; // type:function size:0x228 scope:global -SwitchPlayerVehicle__21DebugVehicleSelectionPCc = .text:0x802C65E8; // type:function size:0x168 scope:global -Init__10DebugWorld = .text:0x802C6750; // type:function size:0x44 scope:global -__10DebugWorld = .text:0x802C6794; // type:function size:0x10 scope:global -Service__10DebugWorld = .text:0x802C67A4; // type:function size:0x34 scope:global -ReadHotPositionScript__FPCcP16SavedHotPositioni = .text:0x802C67D8; // type:function size:0x114 scope:global -SaveHotPositionScript__FPCcP16SavedHotPositioni = .text:0x802C68EC; // type:function size:0xAC scope:global -HandleSaveHotPosition__10DebugWorld = .text:0x802C6998; // type:function size:0x19C scope:global -HandleJumpToHotPosition__10DebugWorld = .text:0x802C6B34; // type:function size:0x15C scope:global -__19SmackableRenderConnRCQ23Sim14ConnectionData = .text:0x802C6C90; // type:function size:0x168 scope:global -_._19SmackableRenderConn = .text:0x802C6DF8; // type:function size:0xB4 scope:global -Update__19SmackableRenderConnf = .text:0x802C6EAC; // type:function size:0x1F8 scope:global -UpdateAll__19SmackableRenderConnf = .text:0x802C70A4; // type:function size:0xA0 scope:global -SmackableRender_Init__Fv = .text:0x802C7144; // type:function size:0x4 scope:global -SmackableRender_Shutdown__Fv = .text:0x802C7148; // type:function size:0x4 scope:global -SmackableRender_Service__Ff = .text:0x802C714C; // type:function size:0x20 scope:global -GetNumCarEffectMarkerHashes__F17CarEffectPositionRi = .text:0x802C716C; // type:function size:0x34 scope:global -GetCarEffectMarkerHashes__F17CarEffectPosition = .text:0x802C71A0; // type:function size:0x14 scope:global -InitPart__13CarPartCuller17eCullableCarPartsPC8bVector3 = .text:0x802C71B4; // type:function size:0x140 scope:global -CullParts__13CarPartCullerP8bVector3Us = .text:0x802C72F4; // type:function size:0x344 scope:global -SetNISRaceDriverVisible__Fi = .text:0x802C7638; // type:function size:0xC scope:global -InitCarRender__Fv = .text:0x802C7644; // type:function size:0x94 scope:global -InitCarEffects__Fv = .text:0x802C76D8; // type:function size:0xD0 scope:global -CloseCarEffects__Fv = .text:0x802C77A8; // type:function size:0x28 scope:global -InitStandardModels__Fv = .text:0x802C77D0; // type:function size:0x58 scope:global -__20FrontEndRenderingCarP8RideInfoi = .text:0x802C7828; // type:function size:0x13C scope:global -LookupWheelPosition__20FrontEndRenderingCarUiP8bVector4 = .text:0x802C7964; // type:function size:0xC0 scope:global -LookupWheelRadius__20FrontEndRenderingCarUiRf = .text:0x802C7A24; // type:function size:0x60 scope:global -ReInit__20FrontEndRenderingCarP8RideInfo = .text:0x802C7A84; // type:function size:0xD4 scope:global -_._20FrontEndRenderingCar = .text:0x802C7B58; // type:function size:0x98 scope:global -__13CarRenderInfoP8RideInfo = .text:0x802C7BF0; // type:function size:0x1318 scope:global -_._13CarRenderInfo = .text:0x802C8F08; // type:function size:0x1F0 scope:global -Init__13CarRenderInfo = .text:0x802C90F8; // type:function size:0x54 scope:global -Refresh__13CarRenderInfo = .text:0x802C914C; // type:function size:0xB8 scope:global -SetPlayerDamage__13CarRenderInfoRCQ210DamageZone4Info = .text:0x802C9204; // type:function size:0x2AC scope:global -SetCarDamageState__13CarRenderInfobUiUi = .text:0x802C94B0; // type:function size:0xB0 scope:global -SetCarGlassDamageState__13CarRenderInfobQ213CarRenderInfo19CarReplacementTexIDUiUi = .text:0x802C9560; // type:function size:0x58 scope:global -SetDamageInfo__13CarRenderInfoRCQ210DamageZone4Info = .text:0x802C95B8; // type:function size:0xA4 scope:global -FindCarPart__13CarRenderInfoi = .text:0x802C965C; // type:function size:0x38 scope:global -HideCarPart__13CarRenderInfoib = .text:0x802C9694; // type:function size:0x7C scope:global -UpdateCarParts__13CarRenderInfo = .text:0x802C9710; // type:function size:0x8A8 scope:global -UpdateWheelYRenderOffset__13CarRenderInfo = .text:0x802C9FB8; // type:function size:0x36C scope:global -SwitchSkin__13CarRenderInfoP8RideInfo = .text:0x802CA324; // type:function size:0x220 scope:global -UpdateDecalTextures__13CarRenderInfoP8RideInfo = .text:0x802CA544; // type:function size:0x428 scope:global -UpdateCarReplacementTextures__13CarRenderInfo = .text:0x802CA96C; // type:function size:0xD8 scope:global -UpdateLightStateTextures__13CarRenderInfo = .text:0x802CAA44; // type:function size:0x42C scope:global -CreateCarLightFlares__13CarRenderInfo = .text:0x802CAE70; // type:function size:0x2EC scope:global -RenderTextureHeadlights__13CarRenderInfoP5eViewP8bMatrix4Ui = .text:0x802CB15C; // type:function size:0x1E8 scope:global -coplightflicker__Ffi = .text:0x802CB344; // type:function size:0x94 scope:global -coplightflicker2__Ffii = .text:0x802CB3D8; // type:function size:0x144 scope:global -RenderFlaresOnCar__13CarRenderInfoP5eViewPC8bVector3PC8bMatrix4iii = .text:0x802CB51C; // type:function size:0xB5C scope:global -TireFace__FP8bMatrix4P5eView = .text:0x802CC078; // type:function size:0xE0 scope:global -Render__13CarRenderInfoP5eViewPC8bVector3PC8bMatrix4P8bMatrix4N24Uiiif11CARPART_LODT11_ = .text:0x802CC158; // type:function size:0x2B7C scope:global -cmpl__FPCvT0 = .text:0x802CECD4; // type:function size:0x6C scope:global -cmph__FPCvT0 = .text:0x802CED40; // type:function size:0x2C scope:global -make_chain__FPPfiPFPCvPCv_i = .text:0x802CED6C; // type:function size:0xE8 scope:global -ch2d__FPPfi = .text:0x802CEE54; // type:function size:0x68 scope:global -convex_hull__13CarRenderInfoP8bVector3PC9WColliderRiffi = .text:0x802CEEBC; // type:function size:0x364 scope:global -smooth_shadow_corners__Fi = .text:0x802CF220; // type:function size:0x2AC scope:global -sh_Setup__FP8bVector3 = .text:0x802CF4CC; // type:function size:0x254 scope:global -DrawKeithProjShadow__13CarRenderInfoP5eViewPC8bVector3P8bMatrix4N23i = .text:0x802CF720; // type:function size:0x69C scope:global -DrawAmbientShadow__13CarRenderInfoP5eViewPC8bVector3fP8bMatrix4N24 = .text:0x802CFDBC; // type:function size:0x9F4 scope:global -RenderPart__13CarRenderInfoP5eViewP12CarPartModelP8bMatrix4P20eDynamicLightContextUi = .text:0x802D07B0; // type:function size:0x74 scope:global -InitEmitterPositions__13CarRenderInfoP8bVector4 = .text:0x802D0824; // type:function size:0x548 scope:global -GetEmitterPositions__13CarRenderInfoRt6bSList1Z18CarEmitterPositionPCUii = .text:0x802D0D6C; // type:function size:0x108 scope:global -UpdateEnvironmentMapCameras__Fv = .text:0x802D0E74; // type:function size:0x228 scope:global -RefreshAllFrontEndCarRenderInfos__F7CarType = .text:0x802D109C; // type:function size:0x78 scope:global -RenderFrontEndCars__FP5eViewi = .text:0x802D1114; // type:function size:0x198 scope:global -RenderFEFlares__FP5eViewi = .text:0x802D12AC; // type:function size:0x4 scope:global -RenderVehicleFlares__FP5eViewii = .text:0x802D12B0; // type:function size:0x20 scope:global -DrawTestCars__FP5eViewi = .text:0x802D12D0; // type:function size:0x20 scope:global -CarRender_Service__Ff = .text:0x802D12F0; // type:function size:0x34 scope:global -__Q217VehicleRenderConn6EffectPC8bMatrix4 = .text:0x802D1324; // type:function size:0x44 scope:global -_._Q217VehicleRenderConn6Effect = .text:0x802D1368; // type:function size:0x80 scope:global -Stop__Q217VehicleRenderConn6Effect = .text:0x802D13E8; // type:function size:0x2C scope:global -HandleEmitterGroupDelete__FPvP12EmitterGroup = .text:0x802D1414; // type:function size:0x10 scope:global -Fire__CQ217VehicleRenderConn6EffectPC8bMatrix4UifPC8bVector3 = .text:0x802D1424; // type:function size:0x138 scope:global -Update__Q217VehicleRenderConn6EffectPC8bMatrix4UiffPC8bVector3 = .text:0x802D155C; // type:function size:0x1AC scope:global -__17VehicleRenderConnRCQ23Sim14ConnectionData7CarType = .text:0x802D1708; // type:function size:0x220 scope:global -OnClose__17VehicleRenderConn = .text:0x802D1928; // type:function size:0x40 scope:global -IsViewAnchor__C17VehicleRenderConnP5eView = .text:0x802D1968; // type:function size:0x88 scope:global -IsViewAnchor__C17VehicleRenderConn = .text:0x802D19F0; // type:function size:0x60 scope:global -CheckForRain__C17VehicleRenderConnP5eView = .text:0x802D1A50; // type:function size:0x168 scope:global -CheckForRain__C17VehicleRenderConn = .text:0x802D1BB8; // type:function size:0x60 scope:global -Find__17VehicleRenderConnUi = .text:0x802D1C18; // type:function size:0x44 scope:global -HandleEvent__17VehicleRenderConnQ217VehicleRenderConn7EventID = .text:0x802D1C5C; // type:function size:0x54 scope:global -FetchData__17VehicleRenderConnf = .text:0x802D1CB0; // type:function size:0x7C scope:global -UpdateLoading__17VehicleRenderConn = .text:0x802D1D2C; // type:function size:0xAC scope:global -_._17VehicleRenderConn = .text:0x802D1DD8; // type:function size:0x1BC scope:global -CanRender__C17VehicleRenderConn = .text:0x802D1F94; // type:function size:0x28 scope:global -FindPart__17VehicleRenderConn11CAR_PART_ID = .text:0x802D1FBC; // type:function size:0x48 scope:global -HidePart__17VehicleRenderConn11CAR_PART_ID = .text:0x802D2004; // type:function size:0x4C scope:global -ShowPart__17VehicleRenderConn11CAR_PART_ID = .text:0x802D2050; // type:function size:0x30 scope:global -CanUpdate__C17VehicleRenderConn = .text:0x802D2080; // type:function size:0x14 scope:global -Update__17VehicleRenderConnf = .text:0x802D2094; // type:function size:0x44 scope:global -SetupLoading__17VehicleRenderConnb = .text:0x802D20D8; // type:function size:0x6C scope:global -OnLoaded__17VehicleRenderConnP13CarRenderInfo = .text:0x802D2144; // type:function size:0x198 scope:global -RefreshRenderInfo__17VehicleRenderConn = .text:0x802D22DC; // type:function size:0x24 scope:global -SkinSlotToMask__Fi = .text:0x802D2300; // type:function size:0x10 scope:global -Load__17VehicleRenderConnUi14CarRenderUsagebPC21FECustomizationRecord = .text:0x802D2310; // type:function size:0x184 scope:global -Unload__17VehicleRenderConn = .text:0x802D2494; // type:function size:0xB0 scope:global -RenderAll__17VehicleRenderConnP5eViewi = .text:0x802D2544; // type:function size:0x80 scope:global -GetRenderMatrix__17VehicleRenderConnP8bMatrix4 = .text:0x802D25C4; // type:function size:0x98 scope:global -RenderFlares__17VehicleRenderConnP5eViewii = .text:0x802D265C; // type:function size:0x480 scope:global -RefreshAllRenderInfo__F7CarType = .text:0x802D2ADC; // type:function size:0x98 scope:global -NotifyTireStateEffectOfEmitterDelete__FPvP12EmitterGroup = .text:0x802D2B74; // type:function size:0x2C scope:global -KillSkidsOnRaceRestart__Fv = .text:0x802D2BA0; // type:function size:0x4C scope:global -FreeUpFX__Q29TireState6Effect = .text:0x802D2BEC; // type:function size:0x5C scope:global -LazyInit__Q29TireState6Effect = .text:0x802D2C48; // type:function size:0x11C scope:global -Set__Q29TireState6EffectRC16TireEffectRecord = .text:0x802D2D64; // type:function size:0x38 scope:global -Update__Q29TireState6EffectfPC8bVector3PC8bMatrix4fRC8bVector4 = .text:0x802D2D9C; // type:function size:0x1C0 scope:global -__9TireState = .text:0x802D2F5C; // type:function size:0x210 scope:global -_._9TireState = .text:0x802D316C; // type:function size:0xAC scope:global -bRotateVector__FP8bVector3PC8bMatrix4T0 = .text:0x802D3218; // type:function size:0x7C scope:global -KillSkids__9TireState = .text:0x802D3294; // type:function size:0x24 scope:global -DoSkids__9TireStatefPC8bVector3PC8bMatrix4T3f = .text:0x802D32B8; // type:function size:0x290 scope:global -DoFX__9TireStatefffPC8bVector3PC8bMatrix4f = .text:0x802D3548; // type:function size:0x174 scope:global -SetSurface__9TireStateRC10SimSurface = .text:0x802D36BC; // type:function size:0x1BC scope:global -UpdateWorld__9TireStatePC9WColliderbT2 = .text:0x802D3878; // type:function size:0xFC scope:global -HidePart__Q210RenderConn15Pkt_Car_ServiceRC6UCrc32 = .text:0x802D3974; // type:function size:0x64 scope:global -Construct__13CarRenderConnRCQ23Sim14ConnectionData = .text:0x802D39D8; // type:function size:0x7C scope:global -__13CarRenderConnRCQ23Sim14ConnectionData7CarTypePQ210RenderConn12Pkt_Car_Open = .text:0x802D3A54; // type:function size:0x478 scope:global -OnAttributeChange__13CarRenderConnPCQ26Attrib10CollectionUi = .text:0x802D3ECC; // type:function size:0x4 scope:global -_._13CarRenderConn = .text:0x802D3ED0; // type:function size:0x1A4 scope:global -TestVisibility__13CarRenderConnf = .text:0x802D4074; // type:function size:0xA4 scope:global -OnEvent__13CarRenderConnQ217VehicleRenderConn7EventID = .text:0x802D4118; // type:function size:0x54 scope:global -UpdateSteering__13CarRenderConnfRCQ210RenderConn15Pkt_Car_Service = .text:0x802D416C; // type:function size:0x180 scope:global -UpdateParts__13CarRenderConnfRCQ210RenderConn15Pkt_Car_Service = .text:0x802D42EC; // type:function size:0xE8 scope:global -AddRoadNoise__13CarRenderConnfUiRC15RoadNoiseRecord = .text:0x802D43D4; // type:function size:0x274 scope:global -UpdateRoadNoise__13CarRenderConnffRCQ210RenderConn15Pkt_Car_Service = .text:0x802D4648; // type:function size:0x210 scope:global -UpdateEngineAnimation__13CarRenderConnfRCQ210RenderConn15Pkt_Car_Service = .text:0x802D4858; // type:function size:0x640 scope:global -UpdateBodyAnimation__13CarRenderConnfRCQ210RenderConn15Pkt_Car_Service = .text:0x802D4E98; // type:function size:0x3CC scope:global -UpdateContrails__13CarRenderConnRCQ210RenderConn15Pkt_Car_Servicef = .text:0x802D5264; // type:function size:0xC8 scope:global -UpdateTires__13CarRenderConnffRCQ210RenderConn15Pkt_Car_Service = .text:0x802D532C; // type:function size:0x9AC scope:global -StopEffect__FPQ217VehicleRenderConn6Effect = .text:0x802D5CD8; // type:function size:0x20 scope:local -UpdateEffects__13CarRenderConnRCQ210RenderConn15Pkt_Car_Servicef = .text:0x802D5CF8; // type:function size:0x37C scope:global -Update__13CarRenderConnRCQ210RenderConn15Pkt_Car_Servicef = .text:0x802D6074; // type:function size:0x294 scope:global -BuildRenderMatrix__13CarRenderConnf = .text:0x802D6308; // type:function size:0x1BC scope:global -UpdateRenderMatrix__13CarRenderConnf = .text:0x802D64C4; // type:function size:0x3CC scope:global -Hide__13CarRenderConnb = .text:0x802D6890; // type:function size:0xD4 scope:global -OnFetch__13CarRenderConnf = .text:0x802D6964; // type:function size:0x1A4 scope:global -OnLoaded__13CarRenderConnP13CarRenderInfo = .text:0x802D6B08; // type:function size:0x23C scope:global -GetRenderMatrix__13CarRenderConnP8bMatrix4 = .text:0x802D6D44; // type:function size:0x24 scope:global -OnRender__13CarRenderConnP5eViewi = .text:0x802D6D68; // type:function size:0x548 scope:global -Construct__14HeliRenderConnRCQ23Sim14ConnectionData = .text:0x802D72B0; // type:function size:0x7C scope:global -__14HeliRenderConnRCQ23Sim14ConnectionData7CarTypePQ210RenderConn13Pkt_Heli_Open = .text:0x802D732C; // type:function size:0xB0 scope:global -Update__14HeliRenderConnRCQ210RenderConn16Pkt_Heli_Servicef = .text:0x802D73DC; // type:function size:0xD4 scope:global -OnFetch__14HeliRenderConnf = .text:0x802D74B0; // type:function size:0xAC scope:global -OnRender__14HeliRenderConnP5eViewi = .text:0x802D755C; // type:function size:0x260 scope:global -__19VehicleFragmentConnRCQ23Sim14ConnectionData = .text:0x802D77BC; // type:function size:0xC8 scope:global -UpdateModel__19VehicleFragmentConn = .text:0x802D7884; // type:function size:0x4A8 scope:global -_._19VehicleFragmentConn = .text:0x802D7D2C; // type:function size:0xC8 scope:global -Update__19VehicleFragmentConnf = .text:0x802D7DF4; // type:function size:0xC4 scope:global -FetchData__19VehicleFragmentConnf = .text:0x802D7EB8; // type:function size:0xD0 scope:global -SkyInitModel__FP6eModelP8bMatrix4Ui = .text:0x802D7F88; // type:function size:0x260 scope:global -RefreshCurrentSkyTextures__Fv = .text:0x802D81E8; // type:function size:0x5C scope:global -SkyLoadCallback__FUi = .text:0x802D8244; // type:function size:0x48 scope:global -InitSkyHash__FPFi_vi = .text:0x802D828C; // type:function size:0x130 scope:global -NotifySkyLoader__Fv = .text:0x802D83BC; // type:function size:0x90 scope:global -UnloadSkyTextures__Fv = .text:0x802D844C; // type:function size:0x4C scope:global -NotifySkyUnloader__Fv = .text:0x802D8498; // type:function size:0x4C scope:global -ReplaceSkyTextures__F9SKY_LAYER = .text:0x802D84E4; // type:function size:0xAC scope:global -StuffSkyLayer__FP5eView9SKY_LAYER = .text:0x802D8590; // type:function size:0x2B8 scope:global -StuffSpecular__FP5eView = .text:0x802D8848; // type:function size:0x2E8 scope:global -GetLayerMod__FP5eView9SKY_LAYERPfN32 = .text:0x802D8B30; // type:function size:0xE0 scope:global -__9SpaceNodeP9SpaceNode = .text:0x802D8C10; // type:function size:0xE0 scope:global -_._9SpaceNode = .text:0x802D8CF0; // type:function size:0xA4 scope:global -SetParent__9SpaceNodeP9SpaceNode = .text:0x802D8D94; // type:function size:0x50 scope:global -RemoveFromParent__9SpaceNode = .text:0x802D8DE4; // type:function size:0x30 scope:global -AddChild__9SpaceNodeP9SpaceNode = .text:0x802D8E14; // type:function size:0x40 scope:global -RemoveChild__9SpaceNodeP9SpaceNode = .text:0x802D8E54; // type:function size:0x38 scope:global -RemoveAllChildren__9SpaceNode = .text:0x802D8E8C; // type:function size:0x44 scope:global -Lock__9SpaceNode = .text:0x802D8ED0; // type:function size:0x10 scope:global -Unlock__9SpaceNode = .text:0x802D8EE0; // type:function size:0x5C scope:global -ReallySetDirty__9SpaceNode = .text:0x802D8F3C; // type:function size:0x58 scope:global -Update__9SpaceNode = .text:0x802D8F94; // type:function size:0x160 scope:global -CreateSpaceNode__FP9SpaceNode = .text:0x802D90F4; // type:function size:0x48 scope:global -DeleteSpaceNode__FP9SpaceNode = .text:0x802D913C; // type:function size:0x20 scope:global -ServiceSpaceNodes__Fv = .text:0x802D915C; // type:function size:0x70 scope:global -InitSpaceNodes__Fv = .text:0x802D91CC; // type:function size:0x4C scope:global -GetCarPartFromSlot__F11CAR_SLOT_ID = .text:0x802D9218; // type:function size:0x14 scope:global -ConvertVinylGroupNumberToVinylType__Fi = .text:0x802D922C; // type:function size:0xC4 scope:global -LoaderCarInfo__FP6bChunk = .text:0x802D92F0; // type:function size:0x790 scope:global -UnloaderCarInfo__FP6bChunk = .text:0x802D9A80; // type:function size:0x94 scope:global -GetAttribute__7CarPartUiP16CarPartAttribute = .text:0x802D9B14; // type:function size:0xC8 scope:global -GetFirstAppliedAttribute__7CarPartUi = .text:0x802D9BDC; // type:function size:0x24 scope:global -GetNextAppliedAttribute__7CarPartUiP16CarPartAttribute = .text:0x802D9C00; // type:function size:0x20 scope:global -HasAppliedAttribute__7CarPartUi = .text:0x802D9C20; // type:function size:0x30 scope:global -GetAppliedAttributeString__7CarPartUiPCc = .text:0x802D9C50; // type:function size:0x50 scope:global -GetAppliedAttributeIParam__7CarPartUii = .text:0x802D9CA0; // type:function size:0x40 scope:global -GetAppliedAttributeUParam__7CarPartUiUi = .text:0x802D9CE0; // type:function size:0x40 scope:global -GetModelNameHash__17CarPartModelTableUiii = .text:0x802D9D20; // type:function size:0xB8 scope:global -GetName__7CarPart = .text:0x802D9DD8; // type:function size:0x18 scope:global -GetCarTypeNameHash__7CarPart = .text:0x802D9DF0; // type:function size:0x18 scope:global -MapCarTypeNameHashToIndex__FUi = .text:0x802D9E08; // type:function size:0x4C scope:global -GetModelNameHash__7CarPartii = .text:0x802D9E54; // type:function size:0xA8 scope:global -GetPartIndex__15CarPartDatabaseP7CarPart = .text:0x802D9EFC; // type:function size:0x58 scope:global -GetCarPartByIndex__15CarPartDatabasei = .text:0x802D9F54; // type:function size:0x44 scope:global -NewGetNumCarParts__15CarPartDatabase7CarTypeiUii = .text:0x802D9F98; // type:function size:0x70 scope:global -NewGetCarPart__15CarPartDatabase7CarTypeiUiP7CarParti = .text:0x802DA008; // type:function size:0x1D4 scope:global -NewGetFirstCarPart__15CarPartDatabase7CarTypeiUii = .text:0x802DA1DC; // type:function size:0x28 scope:global -NewGetNextCarPart__15CarPartDatabaseP7CarPart7CarTypeiUii = .text:0x802DA204; // type:function size:0x34 scope:global -GetCarType__15CarPartDatabaseUi = .text:0x802DA238; // type:function size:0x64 scope:global -GetCarTypeName__F7CarType = .text:0x802DA29C; // type:function size:0x20 scope:global -GetCarTypeInfoFromHash__FUi = .text:0x802DA2BC; // type:function size:0x38 scope:global -GetTypesFromSlot__F11CAR_SLOT_ID7CarType = .text:0x802DA2F4; // type:function size:0xDC scope:global -Init__8RideInfo7CarType14CarRenderUsageii = .text:0x802DA3D0; // type:function size:0x188 scope:global -GetSpecialLODRangeForCarSlot__8RideInfoiP11CARPART_LODT2b = .text:0x802DA558; // type:function size:0x9C scope:global -FindPartWithLevel__F7CarType11CAR_SLOT_IDi = .text:0x802DA5F4; // type:function size:0x94 scope:global -SetUpgradePart__8RideInfo11CAR_SLOT_IDi = .text:0x802DA688; // type:function size:0x60 scope:global -SetStockParts__8RideInfo = .text:0x802DA6E8; // type:function size:0x278 scope:global -GenerateMissingCarParts__Fv = .text:0x802DA960; // type:function size:0xC scope:global -SetRandomParts__8RideInfo = .text:0x802DA96C; // type:function size:0x1D8 scope:global -SetRandomPart__8RideInfo11CAR_SLOT_IDi = .text:0x802DAB44; // type:function size:0x1DC scope:global -SetRandomPaint__8RideInfo = .text:0x802DAD20; // type:function size:0xC4 scope:global -GetPart__C8RideInfoi = .text:0x802DADE4; // type:function size:0x10 scope:global -SetPart__8RideInfoiP7CarPartb = .text:0x802DADF4; // type:function size:0x3A0 scope:global -UpdatePartsEnabled__8RideInfo = .text:0x802DB194; // type:function size:0xC8 scope:global -IsPartEnabled__8RideInfoi = .text:0x802DB25C; // type:function size:0x10 scope:global -GetSkinNameHash__8RideInfo = .text:0x802DB26C; // type:function size:0x68 scope:global -SetCompositeNameHash__8RideInfoi = .text:0x802DB2D4; // type:function size:0xDC scope:global -GetCompositeSkinNameHash__8RideInfo = .text:0x802DB3B0; // type:function size:0x8 scope:global -SetCompositeSkinNameHash__8RideInfoUi = .text:0x802DB3B8; // type:function size:0x34 scope:global -GetCompositeWheelNameHash__8RideInfo = .text:0x802DB3EC; // type:function size:0x8 scope:global -SetCompositeWheelNameHash__8RideInfoUi = .text:0x802DB3F4; // type:function size:0x8 scope:global -GetCompositeSpinnerNameHash__8RideInfo = .text:0x802DB3FC; // type:function size:0x8 scope:global -SetCompositeSpinnerNameHash__8RideInfoUi = .text:0x802DB404; // type:function size:0x8 scope:global -IsUsingCompositeSkin__8RideInfo = .text:0x802DB40C; // type:function size:0x30 scope:global -DumpForPreset__8RideInfoP11FECarRecord = .text:0x802DB43C; // type:function size:0x58 scope:global -LoaderFEPresetCars__FP6bChunk = .text:0x802DB494; // type:function size:0xEC scope:global -UnloaderFEPresetCars__FP6bChunk = .text:0x802DB580; // type:function size:0x4C scope:global -GetNumPresetCars__Fv = .text:0x802DB5CC; // type:function size:0x2C scope:global -GetPresetCarAt__Fi = .text:0x802DB5F8; // type:function size:0x2C scope:global -FindFEPresetCar__FUi = .text:0x802DB624; // type:function size:0x60 scope:global -FillWithPreset__8RideInfoUi = .text:0x802DB684; // type:function size:0xF0 scope:global -UsedCarTextureAddToTable__FPUiiiUi = .text:0x802DB774; // type:function size:0x58 scope:global -GetUsedCarTextureInfo__FP18UsedCarTextureInfoP8RideInfoi = .text:0x802DB7CC; // type:function size:0xDE8 scope:global -CarInfo_GetMaxCompositingBufferSize__Fv = .text:0x802DC5B4; // type:function size:0x8 scope:global -CarInfo_GetResourcePool__Fb = .text:0x802DC5BC; // type:function size:0x48 scope:global -CarInfo_GetResourceCost__F7CarTypebT1 = .text:0x802DC604; // type:function size:0x90 scope:global -CarInfo_IsSkinned__F7CarType = .text:0x802DC694; // type:function size:0xBC scope:global -GetNumCarPartIDNames__Fv = .text:0x802DC750; // type:function size:0x8 scope:global -GetCarPartNameFromID__Fi = .text:0x802DC758; // type:function size:0x8C scope:global -GetCarPartIDFromCrc__FG6UCrc32 = .text:0x802DC7E4; // type:function size:0xAC scope:global -GetNumCarSlotIDNames__Fv = .text:0x802DC890; // type:function size:0x8 scope:global -GetCarSlotNameFromID__Fi = .text:0x802DC898; // type:function size:0x8C scope:global -__17LoadedTexturePackPCci = .text:0x802DC924; // type:function size:0x70 scope:global -_._17LoadedTexturePack = .text:0x802DC994; // type:function size:0x4C scope:global -__15LoadedSolidPackPCc = .text:0x802DC9E0; // type:function size:0x50 scope:global -_._15LoadedSolidPack = .text:0x802DCA30; // type:function size:0x4C scope:global -__15LoadedSkinLayerUi = .text:0x802DCA7C; // type:function size:0x1C scope:global -__10LoadedSkinP8RideInfoii = .text:0x802DCA98; // type:function size:0x7C scope:global -GetTextureHashes__10LoadedSkinPUiii = .text:0x802DCB14; // type:function size:0x78 scope:global -__11LoadedWheelP8RideInfob = .text:0x802DCB8C; // type:function size:0x1AC scope:global -__9LoadedCarP8RideInfoii = .text:0x802DCD38; // type:function size:0x28 scope:global -GatherModelHashes__FP8RideInfoPUiiiii = .text:0x802DCD60; // type:function size:0x118 scope:global -GetModelHashes__9LoadedCarPUii = .text:0x802DCE78; // type:function size:0x244 scope:global -__14LoadedRideInfoP8RideInfoiii = .text:0x802DD0BC; // type:function size:0x154 scope:global -InitCarLoader__Fv = .text:0x802DD210; // type:function size:0x9C scope:global -__9CarLoader = .text:0x802DD2AC; // type:function size:0x9C scope:global -SetLoadingMode__9CarLoaderQ29CarLoader12eLoadingModei = .text:0x802DD348; // type:function size:0x18 scope:global -SetMemoryPoolSize__9CarLoaderi = .text:0x802DD360; // type:function size:0x130 scope:global -GetMemoryEntries__9CarLoaderP17LoadedTexturePackPPvi = .text:0x802DD490; // type:function size:0x3C scope:global -GetMemoryEntries__9CarLoaderP15LoadedSolidPackPPvi = .text:0x802DD4CC; // type:function size:0x68 scope:global -PrintMemoryUsage__9CarLoaderb = .text:0x802DD534; // type:function size:0x208 scope:global -AllocateSolidPack__9CarLoaderPCc = .text:0x802DD73C; // type:function size:0x78 scope:global -UnallocateSolidPack__9CarLoaderP15LoadedSolidPack = .text:0x802DD7B4; // type:function size:0x10 scope:global -LoadSolidPack__9CarLoaderP15LoadedSolidPacki = .text:0x802DD7C4; // type:function size:0x120 scope:global -LoadedSolidPackCallback__9CarLoaderP15LoadedSolidPack = .text:0x802DD8E4; // type:function size:0x28 scope:global -UnloadSolidPack__9CarLoaderP15LoadedSolidPack = .text:0x802DD90C; // type:function size:0x90 scope:global -AllocateTexturePack__9CarLoaderPCci = .text:0x802DD99C; // type:function size:0x80 scope:global -UnallocateTexturePack__9CarLoaderP17LoadedTexturePack = .text:0x802DDA1C; // type:function size:0x10 scope:global -LoadTexturePack__9CarLoaderP17LoadedTexturePacki = .text:0x802DDA2C; // type:function size:0x8C scope:global -LoadedTexturePackCallback__9CarLoaderP17LoadedTexturePack = .text:0x802DDAB8; // type:function size:0x28 scope:global -UnloadTexturePack__9CarLoaderP17LoadedTexturePack = .text:0x802DDAE0; // type:function size:0x84 scope:global -LoadCar__9CarLoaderP9LoadedCar = .text:0x802DDB64; // type:function size:0xE8 scope:global -LoadedCarCallback__9CarLoaderP9LoadedCar = .text:0x802DDC4C; // type:function size:0x28 scope:global -UnloadCar__9CarLoaderP9LoadedCar = .text:0x802DDC74; // type:function size:0xA8 scope:global -LoadAllWheelModels__9CarLoader = .text:0x802DDD1C; // type:function size:0x134 scope:global -LoadedWheelModelsCallback__9CarLoader = .text:0x802DDE50; // type:function size:0x50 scope:global -LoadAllWheelTextures__9CarLoader = .text:0x802DDEA0; // type:function size:0x134 scope:global -LoadedWheelTexturesCallback__9CarLoader = .text:0x802DDFD4; // type:function size:0x90 scope:global -UnloadWheel__9CarLoaderP11LoadedWheel = .text:0x802DE064; // type:function size:0x84 scope:global -GetMemoryEntries__9CarLoaderP11LoadedWheelPPvi = .text:0x802DE0E8; // type:function size:0xB0 scope:global -LoadAllTexturesFromPack__9CarLoaderPCci = .text:0x802DE198; // type:function size:0x170 scope:global -LoadedAllTexturesFromPackCallback__9CarLoader = .text:0x802DE308; // type:function size:0x84 scope:global -LoadSkin__9CarLoaderP10LoadedSkini = .text:0x802DE38C; // type:function size:0x140 scope:global -LoadedSkinCallback__9CarLoaderP10LoadedSkin = .text:0x802DE4CC; // type:function size:0x78 scope:global -CompositeSkin__9CarLoaderP10LoadedSkin = .text:0x802DE544; // type:function size:0xA8 scope:global -UnloadSkinTemporaries__9CarLoaderP10LoadedSkini = .text:0x802DE5EC; // type:function size:0xD0 scope:global -UnloadSkinPerms__9CarLoaderP10LoadedSkin = .text:0x802DE6BC; // type:function size:0x74 scope:global -UnloadSkin__9CarLoaderP10LoadedSkin = .text:0x802DE730; // type:function size:0x64 scope:global -GetMemoryEntries__9CarLoaderP10LoadedSkinPPvi = .text:0x802DE794; // type:function size:0xB0 scope:global -AllocateSkinLayers__9CarLoaderPUiiPP15LoadedSkinLayeriPCc = .text:0x802DE844; // type:function size:0x13C scope:global -UnallocateSkinLayers__9CarLoaderPP15LoadedSkinLayeri = .text:0x802DE980; // type:function size:0x38 scope:global -LoadSkinLayers__9CarLoaderPUiiPP15LoadedSkinLayeri = .text:0x802DE9B8; // type:function size:0x54 scope:global -LoadedSkinLayers__9CarLoaderPP15LoadedSkinLayeri = .text:0x802DEA0C; // type:function size:0x40 scope:global -UnloadSkinLayers__9CarLoaderPUiiPP15LoadedSkinLayeri = .text:0x802DEA4C; // type:function size:0xA8 scope:global -GetMemoryEntries__9CarLoaderP15LoadedSkinLayerPPvi = .text:0x802DEAF4; // type:function size:0x74 scope:global -FindLoadedSolidPack__9CarLoaderPCc = .text:0x802DEB68; // type:function size:0x60 scope:global -FindLoadedTexturePack__9CarLoaderPCc = .text:0x802DEBC8; // type:function size:0x60 scope:global -FindLoadedSkinLayer__9CarLoaderUi = .text:0x802DEC28; // type:function size:0x2C scope:global -FindLoadedRideInfo__9CarLoaderi = .text:0x802DEC54; // type:function size:0x2C scope:global -FindLoadedRideInfo__9CarLoaderP8RideInfo = .text:0x802DEC80; // type:function size:0x8 scope:global -Load__9CarLoaderP8RideInfo = .text:0x802DEC88; // type:function size:0xB8 scope:global -Unload__9CarLoaderi = .text:0x802DED40; // type:function size:0xA8 scope:global -IsLoaded__9CarLoaderi = .text:0x802DEDE8; // type:function size:0x50 scope:global -IsLoaded__9CarLoaderP14LoadedRideInfo = .text:0x802DEE38; // type:function size:0x7C scope:global -AllocateRideInfo__9CarLoaderP8RideInfoi = .text:0x802DEEB4; // type:function size:0x244 scope:global -UnallocateRideInfo__9CarLoaderP14LoadedRideInfo = .text:0x802DF0F8; // type:function size:0x34 scope:global -UnloadRideInfo__9CarLoaderP14LoadedRideInfoi = .text:0x802DF12C; // type:function size:0x114 scope:global -UnloadEverything__9CarLoader = .text:0x802DF240; // type:function size:0xB8 scope:global -UnloadOverflowedResources__9CarLoader = .text:0x802DF2F8; // type:function size:0x50 scope:global -UnloadUnallocatedRideInfos__9CarLoaderi = .text:0x802DF348; // type:function size:0x58 scope:global -UnloadAllSkinTemporaries__9CarLoader = .text:0x802DF3A0; // type:function size:0xA8 scope:global -GetMemoryEntries__9CarLoaderP9LoadedCarPPvi = .text:0x802DF448; // type:function size:0x64 scope:global -RemoveSomethingFromCarMemoryPool__9CarLoaderb = .text:0x802DF4AC; // type:function size:0x160 scope:global -MakeSpaceInPool__9CarLoaderi = .text:0x802DF60C; // type:function size:0x64 scope:global -MakeSpaceInCarMemoryPool__9CarLoaderiib = .text:0x802DF670; // type:function size:0x1B8 scope:global -MoveDefragmentAllocation__FPv = .text:0x802DF828; // type:function size:0x1A8 scope:global -DefragmentAllocation__9CarLoaderPv = .text:0x802DF9D0; // type:function size:0x140 scope:global -AllocateDefragmentStorage__9CarLoader = .text:0x802DFB10; // type:function size:0x130 scope:global -FreeDefragmentStorage__9CarLoader = .text:0x802DFC40; // type:function size:0x6C scope:global -DefragmentPool__9CarLoader = .text:0x802DFCAC; // type:function size:0x2AC scope:global -BeginLoading__9CarLoaderPFUi_vUi = .text:0x802DFF58; // type:function size:0x7C scope:global -ServiceLoading__9CarLoader = .text:0x802DFFD4; // type:function size:0x2E4 scope:global -CallUserCallback__9CarLoaderi = .text:0x802E02B8; // type:function size:0x50 scope:global -LoadingDoneCallback__9CarLoader = .text:0x802E0308; // type:function size:0x28 scope:global -LoadedSolidPackCallbackBridge__9CarLoaderUi = .text:0x802E0330; // type:function size:0x2C scope:global -LoadedSolidPackCallbackBridge__9CarLoaderi = .text:0x802E035C; // type:function size:0x2C scope:global -LoadedTexturePackCallbackBridge__9CarLoaderUi = .text:0x802E0388; // type:function size:0x2C scope:global -LoadedCarCallbackBridge__9CarLoaderUi = .text:0x802E03B4; // type:function size:0x2C scope:global -LoadedWheelModelsCallbackBridge__9CarLoaderUi = .text:0x802E03E0; // type:function size:0x28 scope:global -LoadedWheelTexturesCallbackBridge__9CarLoaderUi = .text:0x802E0408; // type:function size:0x28 scope:global -LoadedAllTexturesFromPackCallbackBridge__9CarLoaderUi = .text:0x802E0430; // type:function size:0x28 scope:global -LoadedSkinCallbackBridge__9CarLoaderUi = .text:0x802E0458; // type:function size:0x2C scope:global -GetSkinCompositeParams__FUi = .text:0x802E0484; // type:function size:0x88 scope:global -CompareCompositeParams__FP19SkinCompositeParamsT0 = .text:0x802E050C; // type:function size:0x108 scope:global -IsInSkinCompositeCache__FP19SkinCompositeParams = .text:0x802E0614; // type:function size:0x4C scope:global -UpdateSkinCompositeCache__FP19SkinCompositeParams = .text:0x802E0660; // type:function size:0x48 scope:global -FlushFromSkinCompositeCache__FUi = .text:0x802E06A8; // type:function size:0x34 scope:global -ScaleColours__FUiUi = .text:0x802E06DC; // type:function size:0x1B4 scope:global -GetBlendColour__FPUiPfib = .text:0x802E0890; // type:function size:0x1F4 scope:global -RemapColour__FUiPUi = .text:0x802E0A84; // type:function size:0xD0 scope:global -CompositeSkin32__FP19SkinCompositeParams = .text:0x802E0B54; // type:function size:0x370 scope:global -CompositeSkin__FP19SkinCompositeParams = .text:0x802E0EC4; // type:function size:0x850 scope:global -DumpPreComp__FP14VinylLayerInfoP11TextureInfo = .text:0x802E1714; // type:function size:0xD4 scope:global -GetHoodSpoilerHash__FP8RideInfo = .text:0x802E17E8; // type:function size:0x8 scope:global -GetHoodSpoilerMaskHash__FP8RideInfo = .text:0x802E17F0; // type:function size:0x8 scope:global -GetWheelTextureHash__FP8RideInfo = .text:0x802E17F8; // type:function size:0x60 scope:global -GetWheelTextureMaskHash__FP8RideInfo = .text:0x802E1858; // type:function size:0x60 scope:global -GetSpinnerTextureHash__FP8RideInfo = .text:0x802E18B8; // type:function size:0x58 scope:global -GetSpinnerTextureMaskHash__FP8RideInfo = .text:0x802E1910; // type:function size:0x70 scope:global -GetVinylLayerHash__FP8RideInfoi = .text:0x802E1980; // type:function size:0x50 scope:global -GetVinylLayerHash__FP7CarPart7CarTypei = .text:0x802E19D0; // type:function size:0xD0 scope:global -GetVinylLayerMaskHash__FP8RideInfoi = .text:0x802E1AA0; // type:function size:0xC4 scope:global -CompositeSkin__FP8RideInfo = .text:0x802E1B64; // type:function size:0x4D0 scope:global -GetTempCarSkinTextures__FPUiiiP8RideInfo = .text:0x802E2034; // type:function size:0x1BC scope:global -CompositeWheel8__FP11TextureInfoN20Ui = .text:0x802E21F0; // type:function size:0x24C scope:global -CompositeWheel32__FP11TextureInfoN20Ui = .text:0x802E243C; // type:function size:0x184 scope:global -CompositeWheel__FP8RideInfoUiUiUi11CAR_SLOT_ID = .text:0x802E25C0; // type:function size:0x1E8 scope:global -CompositeRim__FP8RideInfo = .text:0x802E27A8; // type:function size:0x5C scope:global -__10WorldModelUiP8bMatrix4b = .text:0x802E2804; // type:function size:0x80 scope:global -__10WorldModelP9SpaceNodePUib = .text:0x802E2884; // type:function size:0xB0 scope:global -__10WorldModelPC14ModelHeirarchyUib = .text:0x802E2934; // type:function size:0x50 scope:global -Construct__10WorldModelP9SpaceNodeP8bMatrix4PC14ModelHeirarchyUib = .text:0x802E2984; // type:function size:0x114 scope:global -_._10WorldModel = .text:0x802E2A98; // type:function size:0xAC scope:global -GetModel__10WorldModel = .text:0x802E2B44; // type:function size:0x3C scope:global -AttachReplacementTextureTable__10WorldModelP24eReplacementTextureTablei = .text:0x802E2B80; // type:function size:0x60 scope:global -GetLocalBoundingBox__10WorldModelP8bVector3T1 = .text:0x802E2BE0; // type:function size:0x7C scope:global -InitWorldModels__Fv = .text:0x802E2C5C; // type:function size:0x3C scope:global -CloseWorldModels__Fv = .text:0x802E2C98; // type:function size:0x74 scope:global -RenderNode__10WorldModelPC14ModelHeirarchyUiP5eViewiP8bMatrix4PC8bMatrix4 = .text:0x802E2D0C; // type:function size:0xF4 scope:global -RenderModel__10WorldModelP6eModelP5eViewiP8bMatrix4PC8bMatrix4 = .text:0x802E2E00; // type:function size:0x384 scope:global -Render__10WorldModelP5eViewi = .text:0x802E3184; // type:function size:0x2C8 scope:global -RenderWorldModels__FP5eViewi = .text:0x802E344C; // type:function size:0x1C4 scope:global -initnet__FPUciii = .text:0x802E3610; // type:function size:0x8C scope:global -unbiasnet__Fv = .text:0x802E369C; // type:function size:0x68 scope:global -inxbuild__Fv = .text:0x802E3704; // type:function size:0x1A4 scope:global -inxsearch__Fiiii = .text:0x802E38A8; // type:function size:0x1A4 scope:global -contest__Fiiii = .text:0x802E3A4C; // type:function size:0x13C scope:local -altersingle__Fiiiiii = .text:0x802E3B88; // type:function size:0x94 scope:local -alterneigh__Fiiiiii = .text:0x802E3C1C; // type:function size:0x1CC scope:local -learn__Fv = .text:0x802E3DE8; // type:function size:0x2BC scope:global -nqGetPaletteEntry__FiRUcN31 = .text:0x802E40A4; // type:function size:0x74 scope:global -TempInits__Fv = .text:0x802E4118; // type:function size:0x4 scope:global -SetRainBase__Fv = .text:0x802E411C; // type:function size:0x80 scope:global -__4RainP5eView8RainType = .text:0x802E419C; // type:function size:0x1D8 scope:global -Init__4Rain8RainTypef = .text:0x802E4374; // type:function size:0x178 scope:global -SetOverRideRainIntensity__Ff = .text:0x802E44EC; // type:function size:0xC scope:global -AttachRainCurtain__4Rainffffffffffff = .text:0x802E44F8; // type:function size:0x4 scope:global -CreateWindRotMatrix__FP5eViewP8bMatrix4iT1 = .text:0x802E44FC; // type:function size:0x1A4 scope:global -__12OnScreenRain = .text:0x802E46A0; // type:function size:0x4 scope:global -AmIinATunnel__FP5eViewi = .text:0x802E46A4; // type:function size:0x48 scope:global -SetLocation__14FacePixelationR8bVector3 = .text:0x802E46EC; // type:function size:0x24 scope:global -GetData__14FacePixelationPfN31 = .text:0x802E4710; // type:function size:0x2C scope:global -__14FacePixelationP5eView = .text:0x802E473C; // type:function size:0x1C scope:global -Render__14FacePixelation = .text:0x802E4758; // type:function size:0x6C scope:global -GetVertices__8HeliPolyP8bVector3 = .text:0x802E47C4; // type:function size:0xDC scope:global -EndianSwap__11HeliSection = .text:0x802E48A0; // type:function size:0xAC scope:global -GetElevation__19HeliSheetCoordinateRC8bVector2P8bVector3Pb = .text:0x802E494C; // type:function size:0x1C4 scope:global -__16HeliSheetManager = .text:0x802E4B10; // type:function size:0x10 scope:global -Loader__16HeliSheetManagerP6bChunk = .text:0x802E4B20; // type:function size:0x80 scope:global -Unloader__16HeliSheetManagerP6bChunk = .text:0x802E4BA0; // type:function size:0x3C scope:global -FindHeliPoly__16HeliSheetManagerRC8bVector2 = .text:0x802E4BDC; // type:function size:0x2A4 scope:global -LoaderHeliSheet__FP6bChunk = .text:0x802E4E80; // type:function size:0x2C scope:global -UnloaderHeliSheet__FP6bChunk = .text:0x802E4EAC; // type:function size:0x2C scope:global -Init__15SimpleModelAnimv = .text:0x802E4ED8; // type:function size:0x4C scope:global -Reset__15SimpleModelAnimv = .text:0x802E4F24; // type:function size:0x68 scope:global -Update__15SimpleModelAnimv = .text:0x802E4F8C; // type:function size:0x98 scope:global -Animate__15SimpleModelAnimP6eModelP6eSolidP8bMatrix4 = .text:0x802E5024; // type:function size:0x18C scope:global -__17ParameterMapLayer = .text:0x802E51B0; // type:function size:0x30 scope:global -_._17ParameterMapLayer = .text:0x802E51E0; // type:function size:0x88 scope:global -Load__17ParameterMapLayerPP6bChunk = .text:0x802E5268; // type:function size:0x3A4 scope:global -Unload__17ParameterMapLayer = .text:0x802E560C; // type:function size:0x54 scope:global -AddParameterAccessor__17ParameterMapLayerP17ParameterAccessor = .text:0x802E5660; // type:function size:0x1C scope:global -RemoveParameterAccessor__17ParameterMapLayerP17ParameterAccessor = .text:0x802E567C; // type:function size:0x14 scope:global -GetParameterData__17ParameterMapLayerff = .text:0x802E5690; // type:function size:0x6C scope:global -GetDataFloat__17ParameterMapLayeriPv = .text:0x802E56FC; // type:function size:0x2C scope:global -GetDataInt__17ParameterMapLayeriPv = .text:0x802E5728; // type:function size:0x24 scope:global -GetParameterSetIndexFromQuadData8__17ParameterMapLayerff = .text:0x802E574C; // type:function size:0xE8 scope:global -GetParameterSetIndexFromQuadData16__17ParameterMapLayerff = .text:0x802E5834; // type:function size:0xE8 scope:global -GetFieldPointer__17ParameterMapLayerii = .text:0x802E591C; // type:function size:0x88 scope:global -__tcf_0 = .text:0x802E59A4; // type:function size:0x2C scope:local -GetParameterMapsManager__Fv = .text:0x802E59D0; // type:function size:0x5C scope:global -__tcf_1 = .text:0x802E5A2C; // type:function size:0x70 scope:local -GetAutoParameterAccessors__Fv = .text:0x802E5A9C; // type:function size:0x58 scope:global -DumpAutoParameterAccessorsList__Fv = .text:0x802E5AF4; // type:function size:0x4 scope:global -__17ParameterAccessorPCc = .text:0x802E5AF8; // type:function size:0x8C scope:global -_._17ParameterAccessor = .text:0x802E5B84; // type:function size:0x74 scope:global -SetLayer__17ParameterAccessorP17ParameterMapLayer = .text:0x802E5BF8; // type:function size:0xB0 scope:global -ClearLayer__17ParameterAccessor = .text:0x802E5CA8; // type:function size:0x24 scope:global -CaptureData__17ParameterAccessorff = .text:0x802E5CCC; // type:function size:0x3C scope:global -ClearData__17ParameterAccessor = .text:0x802E5D08; // type:function size:0xC scope:global -GetDataFloat__17ParameterAccessori = .text:0x802E5D14; // type:function size:0x48 scope:global -GetDataInt__17ParameterAccessori = .text:0x802E5D5C; // type:function size:0x44 scope:global -SetUpForNewLayer__17ParameterAccessor = .text:0x802E5DA0; // type:function size:0x4 scope:global -__22ParameterAccessorBlendPCc = .text:0x802E5DA4; // type:function size:0x48 scope:global -_._22ParameterAccessorBlend = .text:0x802E5DEC; // type:function size:0x30 scope:global -CaptureData__22ParameterAccessorBlendfff = .text:0x802E5E1C; // type:function size:0x1B4 scope:global -ClearData__22ParameterAccessorBlend = .text:0x802E5FD0; // type:function size:0x50 scope:global -SetUpForNewLayer__22ParameterAccessorBlend = .text:0x802E6020; // type:function size:0x58 scope:global -CaptureData__22ParameterAccessorBlendff = .text:0x802E6078; // type:function size:0x4 scope:global -__32ParameterAccessorBlendByDistancePCc = .text:0x802E607C; // type:function size:0x54 scope:global -_._32ParameterAccessorBlendByDistance = .text:0x802E60D0; // type:function size:0x30 scope:global -CaptureData__32ParameterAccessorBlendByDistancefff = .text:0x802E6100; // type:function size:0xFC scope:global -SetUpForNewLayer__32ParameterAccessorBlendByDistance = .text:0x802E61FC; // type:function size:0x3C scope:global -CaptureData__32ParameterAccessorBlendByDistanceff = .text:0x802E6238; // type:function size:0x4 scope:global -__20ParameterMapsManager = .text:0x802E623C; // type:function size:0x10 scope:global -_._20ParameterMapsManager = .text:0x802E624C; // type:function size:0x9C scope:global -AddLayer__20ParameterMapsManagerP17ParameterMapLayer = .text:0x802E62E8; // type:function size:0x18 scope:global -UnloadAllLayers__20ParameterMapsManager = .text:0x802E6300; // type:function size:0x74 scope:global -GetDataForLayer__20ParameterMapsManagerUiP17ParameterAccessori = .text:0x802E6374; // type:function size:0x64 scope:global -LoaderParameterMaps__FP6bChunk = .text:0x802E63D8; // type:function size:0x124 scope:global -UnloaderParameterMaps__FP6bChunk = .text:0x802E64FC; // type:function size:0x4C scope:global -GetValueFromSpline__FfP8bMatrix4 = .text:0x802E6548; // type:function size:0x60 scope:global -SetMiddleGrayValue__Ff = .text:0x802E65A8; // type:function size:0x4 scope:global -__16IVisualTreatment = .text:0x802E65AC; // type:function size:0x500 scope:global -_._16IVisualTreatment = .text:0x802E6AAC; // type:function size:0x9C scope:global -Reset__16IVisualTreatment = .text:0x802E6B48; // type:function size:0x94 scope:global -TriggerPulse__16IVisualTreatmentf = .text:0x802E6BDC; // type:function size:0x88 scope:global -SetNosEngaged__16IVisualTreatmentb = .text:0x802E6C64; // type:function size:0x5C scope:global -SetPursuitBreakerTarget__16IVisualTreatmentf = .text:0x802E6CC0; // type:function size:0x24 scope:global -BlendVisualLookAttribute__16IVisualTreatmentR8bMatrix4ffPMQ36Attrib3Gen10visuallookCFPCQ36Attrib3Gen10visuallook_RCQ25UMath7Matrix4 = .text:0x802E6CE4; // type:function size:0x1C8 scope:global -BlendVisualLookAttribute__16IVisualTreatmentRfffPMQ36Attrib3Gen10visuallookCFPCQ36Attrib3Gen10visuallook_RCf = .text:0x802E6EAC; // type:function size:0xC8 scope:global -BlendVisualLookAttribute__16IVisualTreatmentR8bVector4ffPMQ36Attrib3Gen10visuallookCFPCQ36Attrib3Gen10visuallook_RCQ25UMath7Vector4 = .text:0x802E6F74; // type:function size:0x134 scope:global -UpdateVisualLook__16IVisualTreatment = .text:0x802E70A8; // type:function size:0x100 scope:global -TriggerUves__16IVisualTreatment = .text:0x802E71A8; // type:function size:0x148 scope:global -UpdateHeat__16IVisualTreatmentP5eViewfb = .text:0x802E72F0; // type:function size:0x58C scope:global -Update__16IVisualTreatmentP5eView = .text:0x802E787C; // type:function size:0x238 scope:global -GetMaps__9VehicleFXv = .text:0x802E7AB4; // type:function size:0xC scope:global -LookupID__9VehicleFXG6UCrc32 = .text:0x802E7AC0; // type:function size:0x60 scope:global -__26VehiclePartDamageBehaviourP13CarRenderInfo = .text:0x802E7B20; // type:function size:0xD8 scope:global -_._26VehiclePartDamageBehaviour = .text:0x802E7BF8; // type:function size:0xCC scope:global -Init__26VehiclePartDamageBehaviour = .text:0x802E7CC4; // type:function size:0xF8 scope:global -InitAnimationPivot__26VehiclePartDamageBehaviourUiPCc = .text:0x802E7DBC; // type:function size:0x5C scope:global -Reset__26VehiclePartDamageBehaviour = .text:0x802E7E18; // type:function size:0x90 scope:global -FindPositionMarker__26VehiclePartDamageBehaviourPCc = .text:0x802E7EA8; // type:function size:0x8 scope:global -DamageZone__26VehiclePartDamageBehaviourii = .text:0x802E7EB0; // type:function size:0xE0 scope:global -ApplyDamage__26VehiclePartDamageBehaviour = .text:0x802E7F90; // type:function size:0x4C scope:global -ManageGlassDamage__26VehiclePartDamageBehaviour = .text:0x802E7FDC; // type:function size:0xD0 scope:global -GetPartMatrix__26VehiclePartDamageBehaviourUi = .text:0x802E80AC; // type:function size:0x24 scope:global -IsPartHidden__26VehiclePartDamageBehaviourUi = .text:0x802E80D0; // type:function size:0x24 scope:global -HidePart__26VehiclePartDamageBehaviourUi = .text:0x802E80F4; // type:function size:0x20 scope:global -Pose__26VehiclePartDamageBehaviourP8bMatrix4 = .text:0x802E8114; // type:function size:0x50 scope:global -Update__26VehiclePartDamageBehaviourP8bMatrix4 = .text:0x802E8164; // type:function size:0x1B0 scope:global -CalcPartRotation__26VehiclePartDamageBehaviourP8bMatrix4ffff = .text:0x802E8314; // type:function size:0x338 scope:global -AnimatePart__26VehiclePartDamageBehaviourUiRC8bVector3P8bMatrix4 = .text:0x802E864C; // type:function size:0x230 scope:global -DamageVehicle__26VehiclePartDamageBehaviourRCQ210DamageZone4Info = .text:0x802E887C; // type:function size:0x74 scope:global -UnitTest__26VehiclePartDamageBehaviour = .text:0x802E88F0; // type:function size:0xA0 scope:global -__21VehiclePartDamageZoneiPQ221VehiclePartDamageZone25DamageZoneSlotMapDataType = .text:0x802E8990; // type:function size:0x1C8 scope:global -Reset__21VehiclePartDamageZone = .text:0x802E8B58; // type:function size:0xC scope:global -GetSlotNum__C21VehiclePartDamageZone = .text:0x802E8B64; // type:function size:0x14 scope:global -GetSlotID__C21VehiclePartDamageZonei = .text:0x802E8B78; // type:function size:0x10 scope:global -_._21VehiclePartDamageZone = .text:0x802E8B88; // type:function size:0x9C scope:global -SetDamageLevel__21VehiclePartDamageZoneUs = .text:0x802E8C24; // type:function size:0x8 scope:global -__17VehicleDamagePartP13CarRenderInfoi = .text:0x802E8C2C; // type:function size:0xD8 scope:global -_._17VehicleDamagePart = .text:0x802E8D04; // type:function size:0x54 scope:global -Reset__17VehicleDamagePart = .text:0x802E8D58; // type:function size:0x1C scope:global -InitVehicleDamage__Fv = .text:0x802E8D74; // type:function size:0x5C scope:global -reserve__Q24_STLt6vector2ZPCcZQ33UTL3Stdt9Allocator2ZPCcZ12_type_vectorUi = .text:0x802E8DD0; // type:function size:0x11C scope:global -find__H2ZPP17VehicleRenderConnZP17VehicleRenderConn_4_STLX01X01RCX11_X01 = .text:0x802E8EEC; // type:function size:0xB0 scope:global -reserve__Q24_STLt6vector2ZiZQ33UTL3Stdt9Allocator2ZiZ12_type_vectorUi = .text:0x802E8F9C; // type:function size:0x11C scope:global -__15CarPartDatabase = .text:0x802E90B8; // type:function size:0x1CC scope:global -__static_initialization_and_destruction_0 = .text:0x802E9284; // type:function size:0x2BA0 scope:local -InitQuantizers__13OnlineManager = .text:0x802EBE24; // type:function size:0x4 scope:global -OnQueryVehicleCache__C21DebugVehicleSelectionPC8IVehiclePC13IVehicleCache = .text:0x802EBE28; // type:function size:0x8 scope:global -GetCacheName__C21DebugVehicleSelection = .text:0x802EBE30; // type:function size:0xC scope:global -OnRemovedVehicleCache__21DebugVehicleSelectionP8IVehicle = .text:0x802EBE3C; // type:function size:0x4 scope:global -__20eDynamicLightContext = .text:0x802EBE40; // type:function size:0x4 scope:global -_._Q210RenderConn15Pkt_Car_Service = .text:0x802EBE44; // type:function size:0x34 scope:global -ConnectionClass__Q210RenderConn15Pkt_Car_Service = .text:0x802EBE78; // type:function size:0x64 scope:global -Size__Q210RenderConn15Pkt_Car_Service = .text:0x802EBEDC; // type:function size:0x8 scope:global -Type__Q210RenderConn15Pkt_Car_Service = .text:0x802EBEE4; // type:function size:0x20 scope:global -_._Q210RenderConn16Pkt_Heli_Service = .text:0x802EBF04; // type:function size:0x34 scope:global -ConnectionClass__Q210RenderConn16Pkt_Heli_Service = .text:0x802EBF38; // type:function size:0x64 scope:global -Size__Q210RenderConn16Pkt_Heli_Service = .text:0x802EBF9C; // type:function size:0x8 scope:global -Type__Q210RenderConn16Pkt_Heli_Service = .text:0x802EBFA4; // type:function size:0x20 scope:global -_._Q210RenderConn27Pkt_VehicleFragment_Service = .text:0x802EBFC4; // type:function size:0x34 scope:global -ConnectionClass__Q210RenderConn27Pkt_VehicleFragment_Service = .text:0x802EBFF8; // type:function size:0x64 scope:global -Size__Q210RenderConn27Pkt_VehicleFragment_Service = .text:0x802EC05C; // type:function size:0x8 scope:global -Type__Q210RenderConn27Pkt_VehicleFragment_Service = .text:0x802EC064; // type:function size:0x20 scope:global -_._Q210RenderConn21Pkt_Smackable_Service = .text:0x802EC084; // type:function size:0x34 scope:global -ConnectionClass__Q210RenderConn21Pkt_Smackable_Service = .text:0x802EC0B8; // type:function size:0x64 scope:global -Size__Q210RenderConn21Pkt_Smackable_Service = .text:0x802EC11C; // type:function size:0x8 scope:global -Type__Q210RenderConn21Pkt_Smackable_Service = .text:0x802EC124; // type:function size:0x20 scope:global -SetDirty__9SpaceNode = .text:0x802EC144; // type:function size:0x2C scope:global -OnClose__19SmackableRenderConn = .text:0x802EC170; // type:function size:0x40 scope:global -OnStatusCheck__19SmackableRenderConn = .text:0x802EC1B0; // type:function size:0x8 scope:global -Construct__19SmackableRenderConnRCQ23Sim14ConnectionData = .text:0x802EC1B8; // type:function size:0x44 scope:global -_._27IVehiclePartDamageBehaviour = .text:0x802EC1FC; // type:function size:0x34 scope:global -OnStatusCheck__17VehicleRenderConn = .text:0x802EC230; // type:function size:0x14 scope:global -OnEvent__17VehicleRenderConnQ217VehicleRenderConn7EventID = .text:0x802EC244; // type:function size:0x4 scope:global -__as__Q36Attrib3Gen5tiresRCQ26Attrib8Instance = .text:0x802EC248; // type:function size:0x30 scope:global -_._14HeliRenderConn = .text:0x802EC278; // type:function size:0x68 scope:global -OnClose__19VehicleFragmentConn = .text:0x802EC2E0; // type:function size:0x40 scope:global -OnStatusCheck__19VehicleFragmentConn = .text:0x802EC320; // type:function size:0x8 scope:global -Construct__19VehicleFragmentConnRCQ23Sim14ConnectionData = .text:0x802EC328; // type:function size:0x44 scope:global -ClassKey__Q36Attrib3Gen12emittergroup = .text:0x802EC36C; // type:function size:0xC scope:global -push_back__Q23UTLt6Vector2ZP17VehicleRenderConni16RCP17VehicleRenderConn = .text:0x802EC378; // type:function size:0x154 scope:global -ClassKey__Q36Attrib3Gen10visuallook = .text:0x802EC4CC; // type:function size:0xC scope:global -BlackBloomCurve__CQ36Attrib3Gen10visuallook = .text:0x802EC4D8; // type:function size:0xC scope:global -BlackBloomIntensity__CQ36Attrib3Gen10visuallook = .text:0x802EC4E4; // type:function size:0xC scope:global -ColourBloomCurve__CQ36Attrib3Gen10visuallook = .text:0x802EC4F0; // type:function size:0xC scope:global -ColourBloomIntensity__CQ36Attrib3Gen10visuallook = .text:0x802EC4FC; // type:function size:0xC scope:global -ColourBloomTint__CQ36Attrib3Gen10visuallook = .text:0x802EC508; // type:function size:0xC scope:global -Desaturation__CQ36Attrib3Gen10visuallook = .text:0x802EC514; // type:function size:0xC scope:global -DetailMapCurve__CQ36Attrib3Gen10visuallook = .text:0x802EC520; // type:function size:0x8 scope:global -DetailMapIntensity__CQ36Attrib3Gen10visuallook = .text:0x802EC528; // type:function size:0xC scope:global -ClassKey__Q36Attrib3Gen16visuallookeffect = .text:0x802EC534; // type:function size:0xC scope:global -IsActive__16VisualLookEffect = .text:0x802EC540; // type:function size:0x20 scope:global -UpdateActive__16VisualLookEffectf = .text:0x802EC560; // type:function size:0x12C scope:global -SType__Q210RenderConn15Pkt_Car_Service = .text:0x802EC68C; // type:function size:0x58 scope:global -SType__Q210RenderConn16Pkt_Heli_Service = .text:0x802EC6E4; // type:function size:0x58 scope:global -SType__Q210RenderConn27Pkt_VehicleFragment_Service = .text:0x802EC73C; // type:function size:0x58 scope:global -SType__Q210RenderConn21Pkt_Smackable_Service = .text:0x802EC794; // type:function size:0x58 scope:global -_._Q43UTL11Collectionst8Listable2Z17VehicleRenderConni10_4List = .text:0x802EC7EC; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP17VehicleRenderConni16Ui = .text:0x802EC8A0; // type:function size:0x4 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP17VehicleRenderConni10i16UiUi = .text:0x802EC8A4; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP17VehicleRenderConni10i16PP17VehicleRenderConnUi = .text:0x802EC8AC; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP17VehicleRenderConni10i16Ui = .text:0x802EC8B0; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP17VehicleRenderConni10i16 = .text:0x802EC8B8; // type:function size:0x8 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP17VehicleRenderConni16Ui = .text:0x802EC8C0; // type:function size:0x20 scope:global -_._Q23UTLt6Vector2ZP17VehicleRenderConni16 = .text:0x802EC8E0; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP17VehicleRenderConni10i16 = .text:0x802EC914; // type:function size:0xB4 scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP17VehicleRenderConni16 = .text:0x802EC9C8; // type:function size:0xC scope:global -_GLOBAL_.I.SuperEasyAIMode = .text:0x802EC9D4; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x802ECA00; // type:label scope:local -__9WColliderQ29WCollider14eColliderShapeUiUi = .text:0x802ECA00; // type:function size:0x234 scope:global -_._9WCollider = .text:0x802ECC34; // type:function size:0x240 scope:global -Get__9WColliderUi = .text:0x802ECE74; // type:function size:0xA8 scope:global -Create__9WColliderUiQ29WCollider14eColliderShapeUiUi = .text:0x802ECF1C; // type:function size:0x150 scope:global -Destroy__9WColliderP9WCollider = .text:0x802ED06C; // type:function size:0x134 scope:global -InvalidateIntersectingColliders__9WColliderRCQ25UMath7Vector4 = .text:0x802ED1A0; // type:function size:0x98 scope:global -CalcNewRegionSizeFromRequested__FbRCQ25UMath7Vector3fT1fT1RQ25UMath7Vector3Rf = .text:0x802ED238; // type:function size:0x14C scope:local -Refresh__9WColliderRCQ25UMath7Vector3fb = .text:0x802ED384; // type:function size:0x184 scope:global -PrepareRegion__9WColliderUi = .text:0x802ED508; // type:function size:0x120 scope:global -IsEmpty__C9WCollider = .text:0x802ED628; // type:function size:0x30 scope:global -Clear__9WCollider = .text:0x802ED658; // type:function size:0x44 scope:global -ClearLists__9WColliderUi = .text:0x802ED69C; // type:function size:0x244 scope:global -EmptyLists__9WColliderUi = .text:0x802ED8E0; // type:function size:0x2E4 scope:global -ReserveLists__9WColliderUi = .text:0x802EDBC4; // type:function size:0x74 scope:global -Validate__C9WCollider = .text:0x802EDC38; // type:function size:0x18 scope:global -GetUpdateMask__9WColliderRCQ25UMath7Vector3f = .text:0x802EDC50; // type:function size:0x74 scope:global -InRegion__C9WColliderRCQ25UMath7Vector3f = .text:0x802EDCC4; // type:function size:0x64 scope:global -InvalidateAllCachedData__9WCollider = .text:0x802EDD28; // type:function size:0x64 scope:global -MakeMatrix__C16WCollisionObjectRQ25UMath7Matrix4b = .text:0x802EDD8C; // type:function size:0xC0 scope:global -CalcSphericalRadius__C18WCollisionInstance = .text:0x802EDE4C; // type:function size:0x44 scope:global -CalcPosition__C18WCollisionInstanceRQ25UMath7Vector3 = .text:0x802EDE90; // type:function size:0xF4 scope:global -MakeMatrix__C18WCollisionInstanceRQ25UMath7Matrix4b = .text:0x802EDF84; // type:function size:0x114 scope:global -__16WCollisionAssets = .text:0x802EE098; // type:function size:0xDC scope:global -_._16WCollisionAssets = .text:0x802EE174; // type:function size:0x1D4 scope:global -Init__16WCollisionAssetsPC6UGroupPC5UData = .text:0x802EE348; // type:function size:0x18C scope:global -Shutdown__16WCollisionAssets = .text:0x802EE4D4; // type:function size:0x70 scope:global -SetExclusionFlags__16WCollisionAssetsP14WCollisionPack = .text:0x802EE544; // type:function size:0xE8 scope:global -SetExclusionFlags__16WCollisionAssets = .text:0x802EE62C; // type:function size:0x54 scope:global -AddPackLoadCallback__16WCollisionAssetsPFib_v = .text:0x802EE680; // type:function size:0x24 scope:global -RemovePackLoadCallback__16WCollisionAssetsPFib_v = .text:0x802EE6A4; // type:function size:0x6C scope:global -LoadCollisionPack__16WCollisionAssetsP6bChunk = .text:0x802EE710; // type:function size:0xEC scope:global -UnLoadCollisionPack__16WCollisionAssetsP6bChunk = .text:0x802EE7FC; // type:function size:0xC0 scope:global -Instance__C16WCollisionAssetsUi = .text:0x802EE8BC; // type:function size:0x50 scope:global -Object__C16WCollisionAssetsUi = .text:0x802EE90C; // type:function size:0x118 scope:global -AddObject__16WCollisionAssetsP16WCollisionObject = .text:0x802EEA24; // type:function size:0xE4 scope:global -CreateObject__16WCollisionAssetsRCQ25UMath7Vector3RCQ25UMath7Matrix4b = .text:0x802EEB08; // type:function size:0x2AC scope:global -Trigger__C16WCollisionAssetsUi = .text:0x802EEDB4; // type:function size:0x8 scope:global -AddTrigger__16WCollisionAssetsP8WTrigger = .text:0x802EEDBC; // type:function size:0x2C scope:global -RemoveTrigger__16WCollisionAssetsP8WTrigger = .text:0x802EEDE8; // type:function size:0x88 scope:global -__14WCollisionPackP6bChunk = .text:0x802EEE70; // type:function size:0x54 scope:global -_._14WCollisionPack = .text:0x802EEEC4; // type:function size:0x58 scope:global -Init__14WCollisionPackP6bChunk = .text:0x802EEF1C; // type:function size:0xC4 scope:global -DeInit__14WCollisionPack = .text:0x802EEFE0; // type:function size:0x1C scope:global -Resolve__17WCollisionArticle = .text:0x802EEFFC; // type:function size:0x88 scope:global -Resolve__14WCollisionPackPC6UGroupUi = .text:0x802EF084; // type:function size:0x1EC scope:global -Instance__C14WCollisionPackUs = .text:0x802EF270; // type:function size:0x10 scope:global -Object__C14WCollisionPackUs = .text:0x802EF280; // type:function size:0x10 scope:global -FindFaceInTriStrip__13WCollisionMgrRCQ25UMath7Vector3PC21WCollisionStripSpherePC15WCollisionStripR13WCollisionTri = .text:0x802EF290; // type:function size:0x8EC scope:global -CalcCollisionFaceNormal__FPQ25UMath7Vector3PQ25UMath7Vector4 = .text:0x802EFB7C; // type:function size:0x134 scope:local -FindFaceInTriStrip__13WCollisionMgrRCQ25UMath7Matrix4RCQ25UMath7Vector3PC21WCollisionStripSpherePC15WCollisionStripRfR13WCollisionTri = .text:0x802EFCB0; // type:function size:0x6B4 scope:global -FindFaceInCInst__13WCollisionMgrRCQ25UMath7Vector3RC18WCollisionInstanceR13WCollisionTriRf = .text:0x802F0364; // type:function size:0x4B4 scope:global -FindFaceInCInst__13WCollisionMgrRCQ25UMath7Matrix4RCQ25UMath7Vector3RC18WCollisionInstanceR13WCollisionTriRf = .text:0x802F0818; // type:function size:0x59C scope:global -GetWorldHeightAtPoint__13WCollisionMgrRCQ25UMath7Vector3RfPQ25UMath7Vector3 = .text:0x802F0DB4; // type:function size:0x228 scope:global -GetWorldHeightAtPointRigorous__13WCollisionMgrRCQ25UMath7Vector3RfPQ25UMath7Vector3 = .text:0x802F0FDC; // type:function size:0x1DC scope:global -__tcf_0 = .text:0x802F11B8; // type:function size:0x4 scope:local -CheckHitWorld__13WCollisionMgrPCQ25UMath7Vector4RQ213WCollisionMgr18WorldCollisionInfoUi = .text:0x802F11BC; // type:function size:0x644 scope:global -__tcf_1 = .text:0x802F1800; // type:function size:0x4 scope:local -GetWorldNormal__13WCollisionMgrPC27WCollisionInstanceCacheListPC21WCollisionBarrierListPCQ25UMath7Vector4RQ213WCollisionMgr18WorldCollisionInfo = .text:0x802F1804; // type:function size:0x404 scope:global -ClosestCollisionInfo__13WCollisionMgrPCQ25UMath7Vector4RCQ213WCollisionMgr18WorldCollisionInfoT2RQ213WCollisionMgr18WorldCollisionInfo = .text:0x802F1C08; // type:function size:0x1A8 scope:global -GetInstanceListGuts__13WCollisionMgrRCQ23UTLt6Vector2ZUii16R27WCollisionInstanceCacheListRCQ25UMath7Vector3fb = .text:0x802F1DB0; // type:function size:0x430 scope:global -GetInstanceList__13WCollisionMgrR27WCollisionInstanceCacheListRCQ25UMath7Vector3fb = .text:0x802F21E0; // type:function size:0x23C scope:global -GetInstanceListGuts__13WCollisionMgrRCQ23UTLt6Vector2ZUii16R27WCollisionInstanceCacheListPCQ25UMath7Vector4 = .text:0x802F241C; // type:function size:0x644 scope:global -GetInstanceList__13WCollisionMgrR27WCollisionInstanceCacheListPCQ25UMath7Vector4 = .text:0x802F2A60; // type:function size:0x220 scope:global -GetObjectListGuts__13WCollisionMgrRCQ23UTLt6Vector2ZUii16R20WCollisionObjectListRCQ25UMath7Vector3f = .text:0x802F2C80; // type:function size:0x3B0 scope:global -GetObjectList__13WCollisionMgrR20WCollisionObjectListRCQ25UMath7Vector3f = .text:0x802F3030; // type:function size:0x240 scope:global -BuildGeomFromWorldObb__13WCollisionMgrRC16WCollisionObjectfRQ38Dynamics9Collision8GeometryRQ25UMath7Vector3R8WSurface = .text:0x802F3270; // type:function size:0x11C scope:global -Collide__13WCollisionMgrPQ38Dynamics9Collision8GeometryPC21WCollisionBarrierListPQ213WCollisionMgr17ICollisionHandlerPvb = .text:0x802F338C; // type:function size:0x580 scope:global -Collide__13WCollisionMgrPQ38Dynamics9Collision8GeometryPC27WCollisionInstanceCacheListPQ213WCollisionMgr17ICollisionHandlerPv = .text:0x802F390C; // type:function size:0x3B0 scope:global -GetClosestIntersectingBarrier__13WCollisionMgrRC21WCollisionBarrierListPCQ25UMath7Vector4RQ213WCollisionMgr18WorldCollisionInfo = .text:0x802F3CBC; // type:function size:0x1B0 scope:global -GetBarrierNormal__13WCollisionMgrRC27WCollisionInstanceCacheListPCQ25UMath7Vector4RQ213WCollisionMgr18WorldCollisionInfo = .text:0x802F3E6C; // type:function size:0x3D0 scope:global -GetBarrierList__13WCollisionMgrR21WCollisionBarrierListRC27WCollisionInstanceCacheListRCQ25UMath7Vector3f = .text:0x802F423C; // type:function size:0x9A4 scope:global -GetBarrierNormal__13WCollisionMgrRC21WCollisionBarrierListPCQ25UMath7Vector4RQ213WCollisionMgr18WorldCollisionInfo = .text:0x802F4BE0; // type:function size:0xF0 scope:global -GetTriList__13WCollisionMgrRC27WCollisionInstanceCacheListRCQ25UMath7Vector3fR17WCollisionTriList = .text:0x802F4CD0; // type:function size:0xB94 scope:global -__5WGridRCQ25UMath7Vector4UiUif = .text:0x802F5864; // type:function size:0xB4 scope:global -_._5WGrid = .text:0x802F5918; // type:function size:0x44 scope:global -Init__5WGridPC6UGroup = .text:0x802F595C; // type:function size:0x230 scope:global -Shutdown__5WGrid = .text:0x802F5B8C; // type:function size:0x110 scope:global -FindNodes__C5WGridRCQ25UMath7Vector3fRQ23UTLt6Vector2ZUii16 = .text:0x802F5C9C; // type:function size:0x5C scope:global -FindNodesBox__C5WGridPCQ25UMath7Vector4RQ23UTLt6Vector2ZUii16 = .text:0x802F5CF8; // type:function size:0x300 scope:global -FindNodes__C5WGridPCQ25UMath7Vector4RQ23UTLt6Vector2ZUii16 = .text:0x802F5FF8; // type:function size:0xD80 scope:global -__23WGridManagedDynamicElemPQ25UMath7Vector4PCQ25UMath7Vector4RC13WGridNodeElem = .text:0x802F6D78; // type:function size:0x78 scope:global -Update__23WGridManagedDynamicElem = .text:0x802F6DF0; // type:function size:0x41C scope:global -AddElem__23WGridManagedDynamicElemPCQ25UMath7Vector4T118WGridNode_ElemTypeUi = .text:0x802F720C; // type:function size:0x4DC scope:global -UpdateElems__23WGridManagedDynamicElem = .text:0x802F76E8; // type:function size:0x74 scope:global -TotalSize__C9WGridNode = .text:0x802F775C; // type:function size:0x28 scope:global -__11AStarSearchP8WRoadNavPCQ25UMath7Vector3T2PCc = .text:0x802F7784; // type:function size:0x4E8 scope:global -_._11AStarSearch = .text:0x802F7C6C; // type:function size:0xC0 scope:global -IsGoal__11AStarSearchP9AStarNode = .text:0x802F7D2C; // type:function size:0x48 scope:global -FindOpenNode__11AStarSearchPC9WRoadNodei = .text:0x802F7D74; // type:function size:0x48 scope:global -FindClosedNode__11AStarSearchPC9WRoadNodei = .text:0x802F7DBC; // type:function size:0x48 scope:global -AStarCheckFlip__11AStarSearchP9AStarNodeT1 = .text:0x802F7E04; // type:function size:0xB4 scope:global -Admissible__11AStarSearchPC12WRoadSegmentbQ28WRoadNav9EPathType = .text:0x802F7EB8; // type:function size:0x1D0 scope:global -Service__11AStarSearchf = .text:0x802F8088; // type:function size:0x80C scope:global -__10PathFinder = .text:0x802F8894; // type:function size:0xF8 scope:global -_._10PathFinder = .text:0x802F898C; // type:function size:0x158 scope:global -Construct__10PathFinderGQ23Sim5Param = .text:0x802F8AE4; // type:function size:0x64 scope:global -Service__10PathFinderf = .text:0x802F8B48; // type:function size:0xC4 scope:global -ServiceAll__10PathFinder = .text:0x802F8C0C; // type:function size:0x4C scope:global -OnTask__10PathFinderP10HSIMTASK__f = .text:0x802F8C58; // type:function size:0x44 scope:global -Cancel__10PathFinderP8WRoadNav = .text:0x802F8C9C; // type:function size:0x80 scope:global -Pending__10PathFinderP8WRoadNav = .text:0x802F8D1C; // type:function size:0x2C scope:global -Submit__10PathFinderP8WRoadNavPCQ25UMath7Vector3T2PCc = .text:0x802F8D48; // type:function size:0xA4 scope:global -Init__12WRoadNetwork = .text:0x802F8DEC; // type:function size:0x380 scope:global -Shutdown__12WRoadNetwork = .text:0x802F916C; // type:function size:0x50 scope:global -SegmentCrossesBarrier__12WRoadNetworkP12WRoadSegmentP16TrackPathBarrier = .text:0x802F91BC; // type:function size:0x20C scope:global -ResetRaceSegments__12WRoadNetwork = .text:0x802F93C8; // type:function size:0x4C scope:global -FlagSegmentRaceDirection__12WRoadNetworkii = .text:0x802F9414; // type:function size:0x88 scope:global -AddRaceSegments__12WRoadNetworkP8WRoadNav = .text:0x802F949C; // type:function size:0xA4 scope:global -ResetShortcuts__12WRoadNetwork = .text:0x802F9540; // type:function size:0x84 scope:global -FirstShortcutInPath__8WRoadNav = .text:0x802F95C4; // type:function size:0x74 scope:global -ResolveShortcuts__12WRoadNetwork = .text:0x802F9638; // type:function size:0x16C scope:global -ResetBarriers__12WRoadNetwork = .text:0x802F97A4; // type:function size:0x44 scope:global -ResolveBarriers__12WRoadNetwork = .text:0x802F97E8; // type:function size:0x5D0 scope:global -GetSegmentNodes__12WRoadNetworkRC12WRoadSegmentPPC9WRoadNode = .text:0x802F9DB8; // type:function size:0x30 scope:global -GetSegmentProfile__12WRoadNetworkRC12WRoadSegmenti = .text:0x802F9DE8; // type:function size:0x48 scope:global -GetSegmentProfiles__12WRoadNetworkRC12WRoadSegmentPPC12WRoadProfile = .text:0x802F9E30; // type:function size:0x98 scope:global -GetSegmentTrafficLaneRightSide__12WRoadNetworkRC12WRoadSegmenti = .text:0x802F9EC8; // type:function size:0x50 scope:global -GetSegmentTrafficLaneInd__12WRoadNetworkRC12WRoadSegmenti = .text:0x802F9F18; // type:function size:0x90 scope:global -GetSegmentNumTrafficLanes__12WRoadNetworkRC12WRoadSegment = .text:0x802F9FA8; // type:function size:0xE0 scope:global -GetSegmentForwardVector__12WRoadNetworkiRQ25UMath7Vector3 = .text:0x802FA088; // type:function size:0x38 scope:global -GetSegmentForwardVector__12WRoadNetworkRC12WRoadSegmentRQ25UMath7Vector3 = .text:0x802FA0C0; // type:function size:0xB0 scope:global -GetSegmentEndPoints__12WRoadNetworkRC12WRoadSegmentRQ25UMath7Vector3T2 = .text:0x802FA170; // type:function size:0x78 scope:global -GetSegmentOppNode__12WRoadNetworkiPC9WRoadNode = .text:0x802FA1E8; // type:function size:0x38 scope:global -GetSegmentOppNode__12WRoadNetworkRC12WRoadSegmentPC9WRoadNode = .text:0x802FA220; // type:function size:0x4C scope:global -GetPointOnSegment__12WRoadNetworkRC12WRoadSegmentfRQ25UMath7Vector3 = .text:0x802FA26C; // type:function size:0xA8 scope:global -GetPointOnSegment__12WRoadNetworkRCQ25UMath7Vector3T1RC12WRoadSegmentfRQ25UMath7Vector3 = .text:0x802FA314; // type:function size:0x6C scope:global -BuildSegmentSpline__12WRoadNetworkRC12WRoadSegmentR7USpline = .text:0x802FA380; // type:function size:0x2B0 scope:global -__tcf_2 = .text:0x802FA630; // type:function size:0x2C scope:local -GetPointAndVecOnSegment__12WRoadNetworkRC12WRoadSegmentfRQ25UMath7Vector3T3 = .text:0x802FA65C; // type:function size:0xD8 scope:global -GetSegmentPointIntersect__12WRoadNetworkRC12WRoadSegmentRCQ25UMath7Vector3RQ25UMath7Vector3b = .text:0x802FA734; // type:function size:0x9C scope:global -GetLinePointIntersect__12WRoadNetworkRCQ25UMath7Vector3N21RQ25UMath7Vector3b = .text:0x802FA7D0; // type:function size:0x188 scope:global -__tcf_4 = .text:0x802FA958; // type:function size:0x2C scope:local -GetSegmentCurveStep__12WRoadNetworkRCQ25UMath7Vector3T1RC12WRoadSegmentfRQ25UMath7Vector3 = .text:0x802FA984; // type:function size:0x308 scope:global -__8WRoadNav = .text:0x802FAC8C; // type:function size:0x94 scope:global -_._8WRoadNav = .text:0x802FAD20; // type:function size:0xC0 scope:global -SetCookieTrail__8WRoadNavPt11CookieTrail2Z9NavCookiei32 = .text:0x802FADE0; // type:function size:0x1C scope:global -SetCookieTrail__8WRoadNavb = .text:0x802FADFC; // type:function size:0x60 scope:global -ClearCookieTrail__8WRoadNav = .text:0x802FAE5C; // type:function size:0x28 scope:global -ResetCookieTrail__8WRoadNav = .text:0x802FAE84; // type:function size:0x3C scope:global -MaybeAllocatePathSegments__8WRoadNav = .text:0x802FAEC0; // type:function size:0x40 scope:global -SetPathType__8WRoadNavQ28WRoadNav9EPathType = .text:0x802FAF00; // type:function size:0x8 scope:global -Reset__8WRoadNav = .text:0x802FAF08; // type:function size:0x214 scope:global -OnPath__C8WRoadNav = .text:0x802FB11C; // type:function size:0x13C scope:global -GetNextOffset__8WRoadNavRCQ25UMath7Vector3RfRcRb = .text:0x802FB258; // type:function size:0x6E4 scope:global -SnapToSelectableLane__8WRoadNav = .text:0x802FB93C; // type:function size:0x40 scope:global -SnapToSelectableLane__8WRoadNavf = .text:0x802FB97C; // type:function size:0x30 scope:global -SnapToSelectableLane__8WRoadNavfic = .text:0x802FB9AC; // type:function size:0x814 scope:global -Reverse__8WRoadNav = .text:0x802FC1C0; // type:function size:0xEC scope:global -GetNumTrafficLanes__C12WRoadProfileb = .text:0x802FC2AC; // type:function size:0xB8 scope:global -GetNthTrafficLane__C12WRoadProfileib = .text:0x802FC364; // type:function size:0x124 scope:global -GetNthTrafficLaneFromCurb__C12WRoadProfileib = .text:0x802FC488; // type:function size:0x11C scope:global -GetRightMostTrafficEntrance__12WRoadNetworkii = .text:0x802FC5A4; // type:function size:0x44C scope:global -PullOver__8WRoadNav = .text:0x802FC9F0; // type:function size:0x2E0 scope:global -GetNextTraffic__8WRoadNavRCQ25UMath7Vector3RfRcRb = .text:0x802FCCD0; // type:function size:0x974 scope:global -RebuildSplines__8WRoadNavPC12WRoadSegment = .text:0x802FD644; // type:function size:0x88 scope:global -EvaluateSplines__8WRoadNavPC12WRoadSegment = .text:0x802FD6CC; // type:function size:0x1A4 scope:global -UpdateCookieTrail__8WRoadNavf = .text:0x802FD870; // type:function size:0x420 scope:global -IncNavPosition__8WRoadNavfRCQ25UMath7Vector3f = .text:0x802FDC90; // type:function size:0x140 scope:global -PrivateIncNavPosition__8WRoadNavfRCQ25UMath7Vector3 = .text:0x802FDDD0; // type:function size:0x4FC scope:global -ClosestCookieAhead__8WRoadNavRCQ25UMath7Vector3P9NavCookie = .text:0x802FE2CC; // type:function size:0x30 scope:global -ClosestCookieAhead__8WRoadNavRCQ25UMath7Vector3P9NavCookieiT2 = .text:0x802FE2FC; // type:function size:0x174 scope:global -CookieCutter__8WRoadNavR9NavCookieRCQ25UMath7Vector3fbUi = .text:0x802FE470; // type:function size:0x140 scope:global -ClampCookieCentres__8WRoadNavP9NavCookiei = .text:0x802FE5B0; // type:function size:0x7C scope:global -TimeToClosestApproach__FRCQ25UMath7Vector3N30Pf = .text:0x802FE62C; // type:function size:0x160 scope:local -FetchAvoidables__C8WRoadNavPP5IBodyi = .text:0x802FE78C; // type:function size:0x324 scope:global -HolePunchAvoidables__8WRoadNavP9NavCookieiff = .text:0x802FEAB0; // type:function size:0xBA4 scope:global -UpdateOccludedPosition__8WRoadNavb = .text:0x802FF654; // type:function size:0x1110 scope:global -FindClosestOnSpline__8WRoadNavRCQ25UMath7Vector3RQ25UMath7Vector3Rffi = .text:0x80300764; // type:function size:0x1D4 scope:global -FindClosestSegmentInd__8WRoadNavRCQ25UMath7Vector3T1fRQ25UMath7Vector3Rf = .text:0x80300938; // type:function size:0x9C4 scope:global -InitFromOtherNav__8WRoadNavP8WRoadNavb = .text:0x803012FC; // type:function size:0xE4 scope:global -InitLaneOffset__8WRoadNavRCQ25UMath7Vector3 = .text:0x803013E0; // type:function size:0x45C scope:global -InitAtSegment__8WRoadNavscf = .text:0x8030183C; // type:function size:0x330 scope:global -InitAtSegment__8WRoadNavsfRCQ25UMath7Vector3T3b = .text:0x80301B6C; // type:function size:0x220 scope:global -InitAtSegment__8WRoadNavsRCQ25UMath7Vector3T2b = .text:0x80301D8C; // type:function size:0xE8 scope:global -IsWrongWay__C8WRoadNav = .text:0x80301E74; // type:function size:0xAC scope:global -FindClosestOnPath__C8WRoadNavRCQ25UMath7Vector3PQ25UMath7Vector3T2PUsPf = .text:0x80301F20; // type:function size:0x314 scope:global -InitAtPath__8WRoadNavRCQ25UMath7Vector3b = .text:0x80302234; // type:function size:0x80 scope:global -InitAtPoint__8WRoadNavRCQ25UMath7Vector3T1bf = .text:0x803022B4; // type:function size:0x7C scope:global -SetControlPos__8WRoadNavRC12WRoadSegmentb = .text:0x80302330; // type:function size:0x3E8 scope:global -SetStartEndControls__8WRoadNavRC12WRoadSegment = .text:0x80302718; // type:function size:0x44 scope:global -IsDrivable__C8WRoadNavi = .text:0x8030275C; // type:function size:0x20 scope:global -IsSelectable__C8WRoadNavi = .text:0x8030277C; // type:function size:0x20 scope:global -DetermineVehicleHalfWidth__8WRoadNav = .text:0x8030279C; // type:function size:0x150 scope:global -SetVehicle__8WRoadNavP9AIVehicle = .text:0x803028EC; // type:function size:0x24 scope:global -SetBoundPos__8WRoadNavRC12WRoadSegmentfb = .text:0x80302910; // type:function size:0x738 scope:global -SetStartEndPos__8WRoadNavRC12WRoadSegmentff = .text:0x80303048; // type:function size:0x58 scope:global -ChangeLanes__8WRoadNavff = .text:0x803030A0; // type:function size:0xF8 scope:global -ChangeDragDecision__8WRoadNavi = .text:0x80303198; // type:function size:0x684 scope:global -IncLane__8WRoadNavi = .text:0x8030381C; // type:function size:0x3D0 scope:global -ChangeDragLanes__8WRoadNavi = .text:0x80303BEC; // type:function size:0x50C scope:global -UpdateLaneChange__8WRoadNavf = .text:0x803040F8; // type:function size:0x74 scope:global -GetRoadSpeechId__8WRoadNav = .text:0x8030416C; // type:function size:0xA4 scope:global -GetShortcutNumber__8WRoadNav = .text:0x80304210; // type:function size:0xF0 scope:global -IsOnLegalRoad__8WRoadNav = .text:0x80304300; // type:function size:0x9C scope:global -GetSegmentShortcutNumber__12WRoadNetworkPC12WRoadSegment = .text:0x8030439C; // type:function size:0x38 scope:global -MakeShortcutDecision__8WRoadNaviPUiT2 = .text:0x803043D4; // type:function size:0x1E4 scope:global -CancelPathFinding__8WRoadNav = .text:0x803045B8; // type:function size:0x54 scope:global -FindPath__8WRoadNavPCQ25UMath7Vector3T1Pc = .text:0x8030460C; // type:function size:0x8C scope:global -FindPathNow__8WRoadNavPCQ25UMath7Vector3T1Pc = .text:0x80304698; // type:function size:0x68 scope:global -FindingPath__8WRoadNav = .text:0x80304700; // type:function size:0x50 scope:global -GetPathDistanceRemaining__8WRoadNav = .text:0x80304750; // type:function size:0x154 scope:global -CanTrafficSpawn__8WRoadNav = .text:0x803048A4; // type:function size:0x1CC scope:global -CookieTrailCurvature__8WRoadNavRCQ25UMath7Vector3T1 = .text:0x80304A70; // type:function size:0x504 scope:global -IsPointInCookieTrail__8WRoadNavRCQ25UMath7Vector3f = .text:0x80304F74; // type:function size:0x178 scope:global -IsSegmentInCookieTrail__8WRoadNavib = .text:0x803050EC; // type:function size:0x9C scope:global -IsSegmentInPath__8WRoadNavi = .text:0x80305188; // type:function size:0x4C scope:global -GetAttachedDirectionalSegment__FPC9WRoadNodes = .text:0x803051D4; // type:function size:0x60 scope:global -__8WTrigger = .text:0x80305234; // type:function size:0x38 scope:global -__8WTriggerRCQ25UMath7Matrix4RCQ25UMath7Vector3PQ24CARP9EventListUi = .text:0x8030526C; // type:function size:0x11C scope:global -_._8WTrigger = .text:0x80305388; // type:function size:0x9C scope:global -FireEvents__8WTriggerP10HSIMABLE__ = .text:0x80305424; // type:function size:0xDC scope:global -HasEvent__C8WTriggerUiPPCQ24CARP15EventStaticData = .text:0x80305500; // type:function size:0x34 scope:global -TestDirection__C8WTriggerRCQ25UMath7Vector3 = .text:0x80305534; // type:function size:0x3C scope:global -UpdateBox__8WTriggerRCQ25UMath7Matrix4RCQ25UMath7Vector3 = .text:0x80305570; // type:function size:0x19C scope:global -UpdatePos__8WTriggerRCQ25UMath7Vector3Ui = .text:0x8030570C; // type:function size:0x80 scope:global -__15WTriggerManager = .text:0x8030578C; // type:function size:0x5C scope:global -_._15WTriggerManager = .text:0x803057E8; // type:function size:0x68 scope:global -Init__15WTriggerManager = .text:0x80305850; // type:function size:0xBC scope:global -Restart__15WTriggerManager = .text:0x8030590C; // type:function size:0x78 scope:global -SubmitForFire__15WTriggerManagerR8WTriggerP10HSIMABLE__ = .text:0x80305984; // type:function size:0x104 scope:global -ProcessRB__15WTriggerManagerP10IRigidBodyf = .text:0x80305A88; // type:function size:0x534 scope:global -ProcessSRB__15WTriggerManagerP10IRigidBodyf = .text:0x80305FBC; // type:function size:0x590 scope:global -CheckCollideRB__C15WTriggerManagerPC10IRigidBodyPC8WTriggerf = .text:0x8030654C; // type:function size:0x3C8 scope:global -CheckCollideSRB__C15WTriggerManagerPC10IRigidBodyPC8WTriggerf = .text:0x80306914; // type:function size:0x414 scope:global -GetIntersectingTriggers__C15WTriggerManagerRCQ25UMath7Vector3fP12WTriggerList = .text:0x80306D28; // type:function size:0x570 scope:global -DeleteRefs__15WTriggerManagerPC8WTrigger = .text:0x80307298; // type:function size:0xE4 scope:global -ClearAllFireOnExit__15WTriggerManager = .text:0x8030737C; // type:function size:0x6C scope:global -Update__15WTriggerManagerf = .text:0x803073E8; // type:function size:0x230 scope:global -LoaderTrigger__FP6bChunk = .text:0x80307618; // type:function size:0x8 scope:global -UnloaderTrigger__FP6bChunk = .text:0x80307620; // type:function size:0x8 scope:global -__6WWorld = .text:0x80307628; // type:function size:0x60 scope:global -Init__6WWorld = .text:0x80307688; // type:function size:0x58 scope:global -Loader__6WWorldP6bChunk = .text:0x803076E0; // type:function size:0x64 scope:global -Unloader__6WWorldP6bChunk = .text:0x80307744; // type:function size:0x34 scope:global -LoaderCarpWGrid__FP6bChunk = .text:0x80307778; // type:function size:0x2C scope:global -UnloaderCarpWGrid__FP6bChunk = .text:0x803077A4; // type:function size:0x2C scope:global -Open__6WWorld = .text:0x803077D0; // type:function size:0xF4 scope:global -Close__6WWorld = .text:0x803078C4; // type:function size:0x20 scope:global -SegmentIntersect__10WWorldMathPCQ25UMath7Vector4T1PQ25UMath7Vector4 = .text:0x803078E4; // type:function size:0x11C scope:global -IntersectCircle__10WWorldMathfffffffRfT8 = .text:0x80307A00; // type:function size:0x18C scope:global -NearestPointLine2D__10WWorldMathRCQ25UMath7Vector4PCQ25UMath7Vector4RQ25UMath7Vector4 = .text:0x80307B8C; // type:function size:0xA0 scope:global -NearestPointLine2D3__10WWorldMathRCQ25UMath7Vector3N21RQ25UMath7Vector3 = .text:0x80307C2C; // type:function size:0x9C scope:global -GetPlaneY__10WWorldMathRCQ25UMath7Vector3N21 = .text:0x80307CC8; // type:function size:0x54 scope:global -IntersectSegPlane__10WWorldMathRCQ25UMath7Vector3N31RQ25UMath7Vector3Rf = .text:0x80307D1C; // type:function size:0xF0 scope:global -MakeSegSpaceMatrix__10WWorldMathRCQ25UMath7Vector3T1RQ25UMath7Matrix4 = .text:0x80307E0C; // type:function size:0x234 scope:global -InitSystem__8WSurface = .text:0x80308040; // type:function size:0x4 scope:global -FindClosestFace__9WWorldPosPC9WColliderRCQ25UMath7Vector3b = .text:0x80308044; // type:function size:0x3C scope:global -FindClosestFace__9WWorldPosRCQ25UMath7Vector3b = .text:0x80308080; // type:function size:0x2C scope:global -FindClosestFaceInternal__9WWorldPosPC27WCollisionInstanceCacheListRCQ25UMath7Vector3b = .text:0x803080AC; // type:function size:0x228 scope:global -FindClosestFaceInternal__9WWorldPosRC27WCollisionInstanceCacheListRCQ25UMath7Vector3 = .text:0x803082D4; // type:function size:0x28C scope:global -FindClosestFace__9WWorldPosRC17WCollisionTriListRCQ25UMath7Vector3b = .text:0x80308560; // type:function size:0x4CC scope:global -FindClosestFace__9WWorldPosRC27WCollisionInstanceCacheListRCQ25UMath7Vector3T2 = .text:0x80308A2C; // type:function size:0x160 scope:global -Update__9WWorldPosRCQ25UMath7Vector3RQ25UMath7Vector4bPC9WColliderT3 = .text:0x80308B8C; // type:function size:0x214 scope:global -HeightAtPoint__C9WWorldPosRCQ25UMath7Vector3 = .text:0x80308DA0; // type:function size:0x180 scope:global -FindSurface__9WWorldPosRC17WCollisionArticle = .text:0x80308F20; // type:function size:0x28 scope:global -__Q29WorldConn6Server = .text:0x80308F48; // type:function size:0x3C scope:global -_._Q29WorldConn6Server = .text:0x80308F84; // type:function size:0xB8 scope:global -LockID__Q29WorldConn6ServerUi = .text:0x8030903C; // type:function size:0x1B4 scope:global -UnlockID__Q29WorldConn6ServerUi = .text:0x803091F0; // type:function size:0x114 scope:global -__Q29WorldConn9ReferenceUi = .text:0x80309304; // type:function size:0x50 scope:global -_._Q29WorldConn9Reference = .text:0x80309354; // type:function size:0x50 scope:global -Set__Q29WorldConn9ReferenceUi = .text:0x803093A4; // type:function size:0x48 scope:global -Lock__Q29WorldConn9Reference = .text:0x803093EC; // type:function size:0x60 scope:global -Unlock__Q29WorldConn9Reference = .text:0x8030944C; // type:function size:0x5C scope:global -World_UpdateBody__FPQ23Sim6Packet = .text:0x803094A8; // type:function size:0x50 scope:global -Construct__13WorldBodyConnRCQ23Sim14ConnectionData = .text:0x803094F8; // type:function size:0x44 scope:global -__13WorldBodyConnRCQ23Sim14ConnectionData = .text:0x8030953C; // type:function size:0x94 scope:global -_._13WorldBodyConn = .text:0x803095D0; // type:function size:0x8C scope:global -Update__13WorldBodyConnf = .text:0x8030965C; // type:function size:0x1B8 scope:global -FetchData__13WorldBodyConnf = .text:0x80309814; // type:function size:0xA0 scope:global -ChooseAudioAttributes__FRCQ36Attrib3Gen7effectsPC8bMatrix4PC8bVector3 = .text:0x803098B4; // type:function size:0x1C4 scope:local -Construct__15WorldEffectConnRCQ23Sim14ConnectionData = .text:0x80309A78; // type:function size:0x4C scope:global -HandleWorldEffectEmitterGroupDelete__FPvP12EmitterGroup = .text:0x80309AC4; // type:function size:0xC scope:global -__15WorldEffectConnRCQ23Sim14ConnectionDataPCQ29WorldConn15Pkt_Effect_Open = .text:0x80309AD0; // type:function size:0x1C4 scope:global -_._15WorldEffectConn = .text:0x80309C94; // type:function size:0xE4 scope:global -Update__15WorldEffectConnf = .text:0x80309D78; // type:function size:0x850 scope:global -FetchData__15WorldEffectConnf = .text:0x8030A5C8; // type:function size:0xA0 scope:global -World_OneShotEffect__FPQ23Sim6Packet = .text:0x8030A668; // type:function size:0x920 scope:global -UpdateServices__9WorldConnf = .text:0x8030AF88; // type:function size:0x34 scope:global -InitServices__9WorldConnv = .text:0x8030AFBC; // type:function size:0x44 scope:global -RestoreServices__9WorldConnv = .text:0x8030B000; // type:function size:0x58 scope:global -GetSystemName__10DamageZoneQ210DamageZone2ID = .text:0x8030B058; // type:function size:0x38 scope:global -GetDamageStimulus__10DamageZoneUi = .text:0x8030B090; // type:function size:0x1C scope:global -GetImpactStimulus__10DamageZoneUi = .text:0x8030B0AC; // type:function size:0x1C scope:global -GetTimeOfDaySuffix__F10eTimeOfDay = .text:0x8030B0C8; // type:function size:0x34 scope:global -NeedsSeperateTODStreamingFile__FPCc = .text:0x8030B0FC; // type:function size:0x60 scope:global -GetCurrentTimeOfDay__Fv = .text:0x8030B15C; // type:function size:0xC scope:global -TickOverTimeOfday__Fv = .text:0x8030B168; // type:function size:0x4 scope:global -ApplyTimeOfDayTickOver__Fv = .text:0x8030B16C; // type:function size:0x30 scope:global -SetCurrentTimeOfDay__Ff = .text:0x8030B19C; // type:function size:0x4 scope:global -find__H2ZPP9WColliderZP9WCollider_4_STLX01X01RCX11_X01 = .text:0x8030B1A0; // type:function size:0xB0 scope:global -_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP9WColliderZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP9WColliderZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP9WColliderZ9_type_mapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZP9WColliderT1 = .text:0x8030B250; // type:function size:0x13C scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP9WColliderZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP9WColliderZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP9WColliderZ9_type_mapRCQ24_STLt4pair2ZCUiZP9WCollider = .text:0x8030B38C; // type:function size:0x118 scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP9WColliderZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP9WColliderZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP9WColliderZ9_type_mapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZP9WColliderZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZP9WColliderRCQ24_STLt4pair2ZCUiZP9WCollider = .text:0x8030B4A4; // type:function size:0x26C scope:global -reserve__Q24_STLt6vector2Z26WCollisionBarrierListEntryZQ33UTL3Stdt9Allocator2Z26WCollisionBarrierListEntryZ22_type_WCollisionVectorUi = .text:0x8030B710; // type:function size:0x1DC scope:global -_M_fill_insert__Q24_STLt6vector2ZPC18WCollisionInstanceZQ33UTL3Stdt9Allocator2ZPC18WCollisionInstanceZ26_type_WCollisionWarnVectorPPC18WCollisionInstanceUiRCPC18WCollisionInstance = .text:0x8030B8EC; // type:function size:0x270 scope:global -_M_fill_insert__Q24_STLt6vector2Z26WCollisionBarrierListEntryZQ33UTL3Stdt9Allocator2Z26WCollisionBarrierListEntryZ22_type_WCollisionVectorP26WCollisionBarrierListEntryUiRC26WCollisionBarrierListEntry = .text:0x8030BB5C; // type:function size:0x7AC scope:global -_M_fill_insert__Q24_STLt6vector2ZPC16WCollisionObjectZQ33UTL3Stdt9Allocator2ZPC16WCollisionObjectZ22_type_WCollisionVectorPPC16WCollisionObjectUiRCPC16WCollisionObject = .text:0x8030C308; // type:function size:0x270 scope:global -reserve__Q24_STLt6vector2ZPC18WCollisionInstanceZQ33UTL3Stdt9Allocator2ZPC18WCollisionInstanceZ26_type_WCollisionWarnVectorUi = .text:0x8030C578; // type:function size:0x11C scope:global -reserve__Q24_STLt6vector2ZPC16WCollisionObjectZQ33UTL3Stdt9Allocator2ZPC16WCollisionObjectZ22_type_WCollisionVectorUi = .text:0x8030C694; // type:function size:0x11C scope:global -_M_erase__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP24ManagedCollisionInstanceZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP24ManagedCollisionInstanceZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP24ManagedCollisionInstanceZ9_type_mapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCUiZP24ManagedCollisionInstance = .text:0x8030C7B0; // type:function size:0x68 scope:global -_M_erase__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP16WCollisionObjectZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP16WCollisionObjectZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP16WCollisionObjectZ9_type_mapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCUiZP16WCollisionObject = .text:0x8030C818; // type:function size:0x68 scope:global -_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP16WCollisionObjectZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP16WCollisionObjectZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP16WCollisionObjectZ9_type_mapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZP16WCollisionObjectT1 = .text:0x8030C880; // type:function size:0x13C scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP16WCollisionObjectZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP16WCollisionObjectZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP16WCollisionObjectZ9_type_mapRCQ24_STLt4pair2ZCUiZP16WCollisionObject = .text:0x8030C9BC; // type:function size:0x118 scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP16WCollisionObjectZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP16WCollisionObjectZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP16WCollisionObjectZ9_type_mapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZP16WCollisionObjectZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZP16WCollisionObjectRCQ24_STLt4pair2ZCUiZP16WCollisionObject = .text:0x8030CAD4; // type:function size:0x26C scope:global -__upper_bound__H4ZP26WCollisionBarrierListEntryZ26WCollisionBarrierListEntryZQ24_STLt4less1Z26WCollisionBarrierListEntryZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x8030CD40; // type:function size:0x58 scope:global -AddSorted__t6bTList1Z9AStarNodePFP9AStarNodeP9AStarNode_iP9AStarNode = .text:0x8030CD98; // type:function size:0x90 scope:global -_M_erase__Q24_STLt8_Rb_tree5ZUsZUsZQ24_STLt9_Identity1ZUsZQ24_STLt4less1ZUsZQ33UTL3Stdt9Allocator2ZUsZ9_type_setPQ24_STLt13_Rb_tree_node1ZUs = .text:0x8030CE28; // type:function size:0x68 scope:global -_M_insert__Q24_STLt8_Rb_tree5ZUsZUsZQ24_STLt9_Identity1ZUsZQ24_STLt4less1ZUsZQ33UTL3Stdt9Allocator2ZUsZ9_type_setPQ24_STL18_Rb_tree_node_baseT1RCUsT1 = .text:0x8030CE90; // type:function size:0x12C scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUsZUsZQ24_STLt9_Identity1ZUsZQ24_STLt4less1ZUsZQ33UTL3Stdt9Allocator2ZUsZ9_type_setRCUs = .text:0x8030CFBC; // type:function size:0x118 scope:global -_M_erase__Q24_STLt8_Rb_tree5Z13FireOnExitRecZ13FireOnExitRecZQ24_STLt9_Identity1Z13FireOnExitRecZQ24_STLt4less1Z13FireOnExitRecZQ24_STLt9allocator1Z13FireOnExitRecPQ24_STLt13_Rb_tree_node1Z13FireOnExitRec = .text:0x8030D0D4; // type:function size:0x6C scope:global -_M_insert__Q24_STLt8_Rb_tree5Z13FireOnExitRecZ13FireOnExitRecZQ24_STLt9_Identity1Z13FireOnExitRecZQ24_STLt4less1Z13FireOnExitRecZQ24_STLt9allocator1Z13FireOnExitRecPQ24_STL18_Rb_tree_node_baseT1RC13FireOnExitRecT1 = .text:0x8030D140; // type:function size:0x164 scope:global -insert_unique__Q24_STLt8_Rb_tree5Z13FireOnExitRecZ13FireOnExitRecZQ24_STLt9_Identity1Z13FireOnExitRecZQ24_STLt4less1Z13FireOnExitRecZQ24_STLt9allocator1Z13FireOnExitRecRC13FireOnExitRec = .text:0x8030D2A4; // type:function size:0x150 scope:global -_M_erase__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4BodyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4BodyZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZPQ39WorldConn6Server4BodyZ24_type_WorldConnServerMapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4Body = .text:0x8030D3F4; // type:function size:0x68 scope:global -_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4BodyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4BodyZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZPQ39WorldConn6Server4BodyZ24_type_WorldConnServerMapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4BodyT1 = .text:0x8030D45C; // type:function size:0x13C scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4BodyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4BodyZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZPQ39WorldConn6Server4BodyZ24_type_WorldConnServerMapRCQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4Body = .text:0x8030D598; // type:function size:0x118 scope:global -insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4BodyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4BodyZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZPQ39WorldConn6Server4BodyZ24_type_WorldConnServerMapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4BodyZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4BodyRCQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4Body = .text:0x8030D6B0; // type:function size:0x26C scope:global -__Q33UTL3Stdt3map3ZUiZP9WColliderZ9_type_map = .text:0x8030D91C; // type:function size:0x74 scope:global -__static_initialization_and_destruction_0 = .text:0x8030D990; // type:function size:0x5C0 scope:local -clear_all__17WCollisionTriList = .text:0x8030DF50; // type:function size:0x100 scope:global -ClassKey__Q36Attrib3Gen5world = .text:0x8030E050; // type:function size:0xC scope:global -push_back__Q23UTLt6Vector2ZP9WCollideri16RCP9WCollider = .text:0x8030E05C; // type:function size:0x154 scope:global -__Q33UTL3Stdt3map3ZUiZP24ManagedCollisionInstanceZ9_type_map = .text:0x8030E1B0; // type:function size:0x74 scope:global -__Q33UTL3Stdt3map3ZUiZP16WCollisionObjectZ9_type_map = .text:0x8030E224; // type:function size:0x74 scope:global -IsOccluded__C8WRoadNav = .text:0x8030E298; // type:function size:0x34 scope:global -__dl__9AStarNodePv = .text:0x8030E2CC; // type:function size:0x2C scope:global -_._Q24_STLt3set3ZUsZQ24_STLt4less1ZUsZQ33UTL3Stdt9Allocator2ZUsZ9_type_set = .text:0x8030E2F8; // type:function size:0x94 scope:global -__Q33UTL3Stdt3set2ZUsZ9_type_set = .text:0x8030E38C; // type:function size:0x74 scope:global -_._14FireOnExitList = .text:0x8030E400; // type:function size:0xB0 scope:global -__14FireOnExitList = .text:0x8030E4B0; // type:function size:0x78 scope:global -_._Q29WorldConn16Pkt_Body_Service = .text:0x8030E528; // type:function size:0x34 scope:global -ConnectionClass__Q29WorldConn16Pkt_Body_Service = .text:0x8030E55C; // type:function size:0x64 scope:global -Size__Q29WorldConn16Pkt_Body_Service = .text:0x8030E5C0; // type:function size:0x8 scope:global -Type__Q29WorldConn16Pkt_Body_Service = .text:0x8030E5C8; // type:function size:0x20 scope:global -_._Q29WorldConn18Pkt_Effect_Service = .text:0x8030E5E8; // type:function size:0x34 scope:global -ConnectionClass__Q29WorldConn18Pkt_Effect_Service = .text:0x8030E61C; // type:function size:0x64 scope:global -Size__Q29WorldConn18Pkt_Effect_Service = .text:0x8030E680; // type:function size:0x8 scope:global -Type__Q29WorldConn18Pkt_Effect_Service = .text:0x8030E688; // type:function size:0x20 scope:global -__Q33UTL3Stdt3map3ZUiZPQ39WorldConn6Server4BodyZ24_type_WorldConnServerMap = .text:0x8030E6A8; // type:function size:0x74 scope:global -GetFrame__CQ29WorldConn6Server = .text:0x8030E71C; // type:function size:0xC scope:global -OnClose__13WorldBodyConn = .text:0x8030E728; // type:function size:0x40 scope:global -OnStatusCheck__13WorldBodyConn = .text:0x8030E768; // type:function size:0x8 scope:global -OnClose__15WorldEffectConn = .text:0x8030E770; // type:function size:0x40 scope:global -OnStatusCheck__15WorldEffectConn = .text:0x8030E7B0; // type:function size:0x8 scope:global -_._Q43UTL11Collectionst8Listable2Z9WCollideri100_4List = .text:0x8030E7B8; // type:function size:0xB4 scope:global -OnGrowRequest__Q23UTLt6Vector2ZP9WCollideri16Ui = .text:0x8030E86C; // type:function size:0x4 scope:global -SType__Q29WorldConn16Pkt_Body_Service = .text:0x8030E870; // type:function size:0x58 scope:global -SType__Q29WorldConn18Pkt_Effect_Service = .text:0x8030E8C8; // type:function size:0x58 scope:global -AllocVectorSpace__Q23UTLt11FixedVector3ZP9WCollideri100i16UiUi = .text:0x8030E920; // type:function size:0x8 scope:global -FreeVectorSpace__Q23UTLt11FixedVector3ZP9WCollideri100i16PP9WColliderUi = .text:0x8030E928; // type:function size:0x4 scope:global -GetGrowSize__CQ23UTLt11FixedVector3ZP9WCollideri100i16Ui = .text:0x8030E92C; // type:function size:0x8 scope:global -GetMaxCapacity__CQ23UTLt11FixedVector3ZP9WCollideri100i16 = .text:0x8030E934; // type:function size:0x8 scope:global -GetGrowSize__CQ23UTLt6Vector2ZP9WCollideri16Ui = .text:0x8030E93C; // type:function size:0x20 scope:global -_._Q23UTLt6Vector2ZP9WCollideri16 = .text:0x8030E95C; // type:function size:0x34 scope:global -_._Q23UTLt11FixedVector3ZP9WCollideri100i16 = .text:0x8030E990; // type:function size:0xB4 scope:global -GetMaxCapacity__CQ23UTLt6Vector2ZP9WCollideri16 = .text:0x8030EA44; // type:function size:0xC scope:global -_GLOBAL_.I.Tweak_colliderDraws = .text:0x8030EA50; // type:function size:0x2C scope:local -DBcallback = .text:0x8030EB08; // type:label scope:local -EnableMetroTRKInterrupts = .text:0x8030EBF8; // type:label scope:global -SNDebugInit = .text:0x8030EC5C; // type:label scope:global -SNDebugBoot = .text:0x8030EEAC; // type:label scope:global -cmdNop = .text:0x8030EFD4; // type:label scope:global -cmdRecvMem = .text:0x8030F0A8; // type:label scope:global -cmdSendMem = .text:0x8030F144; // type:label scope:global -cmdThreadList = .text:0x8030F320; // type:label scope:local -cmdReset = .text:0x8030F444; // type:label scope:global -tunerprotocol = .text:0x8030F494; // type:label scope:global -cmdGo = .text:0x8030F614; // type:label scope:global -proviewtty = .text:0x8030F7C8; // type:label scope:global -checkexternal = .text:0x8031019C; // type:label scope:global -ISIentry = .text:0x80310370; // type:label scope:global -DSIentry = .text:0x80310388; // type:label scope:global -snIsSNTDEV = .text:0x803104B4; // type:label scope:global -snFileserver = .text:0x80310AF0; // type:label scope:global -cmdFS_ACK = .text:0x80310C04; // type:label scope:local -FS_Continue = .text:0x80310C24; // type:label scope:local -cmdFS_STOP = .text:0x80310C58; // type:label scope:local -cmdFS_HostDisconnect = .text:0x80310C6C; // type:label scope:local -snInitFileserver = .text:0x80310CF0; // type:label scope:global -PCinit = .text:0x80310DE0; // type:label scope:global -PCcreat = .text:0x80310DE8; // type:label scope:global -PCopen = .text:0x80310DF0; // type:label scope:global -PCclose = .text:0x80310DF8; // type:label scope:global -PCread = .text:0x80310E00; // type:label scope:global -PCwrite = .text:0x80310E08; // type:label scope:global -PClseek = .text:0x80310E10; // type:label scope:global -PCsync = .text:0x80310E18; // type:label scope:local -PCreadAsync = .text:0x80310E20; // type:label scope:global -PCwriteAsync = .text:0x80310E28; // type:label scope:global -PCreadAsync2 = .text:0x80310E30; // type:label scope:global -PCwriteAsync2 = .text:0x80310E38; // type:label scope:global -SNInitComm = .text:0x80310E40; // type:label scope:global -SNInitInterrupts = .text:0x80310F94; // type:label scope:global -SNQueryData = .text:0x80310FDC; // type:label scope:global -SNRead = .text:0x80311064; // type:label scope:global -SNWrite = .text:0x80311220; // type:label scope:global -SNOpen = .text:0x803113B8; // type:label scope:global -SNClose = .text:0x803113BC; // type:label scope:global -SNHandler = .text:0x803113C0; // type:label scope:local -SNSelect = .text:0x80311414; // type:label scope:local -SNDeselect = .text:0x8031142C; // type:label scope:local -SNWiggleSelect = .text:0x80311440; // type:label scope:local -SNSync = .text:0x80311468; // type:label scope:local -SNRead8 = .text:0x8031147C; // type:label scope:local -SNWrite8 = .text:0x803114BC; // type:label scope:local -SNRead32 = .text:0x803114F0; // type:label scope:local -SNWrite32 = .text:0x8031152C; // type:label scope:local -SNDVDRead_init = .text:0x8031155C; // type:label scope:global -SNDVDReadAsync_next = .text:0x803115AC; // type:label scope:global -SNDVDReadSync_next = .text:0x8031161C; // type:label scope:global -SNDVDWrite_init = .text:0x80311684; // type:label scope:global -SNDVDWriteAsync_next = .text:0x803116E8; // type:label scope:global -SNDVDWriteSync_next = .text:0x80311758; // type:label scope:global -SNDVDWriteNoDMA_next = .text:0x803117C0; // type:label scope:global -snProfInit = .text:0x80311870; // type:label scope:global -snProfile = .text:0x80311954; // type:label scope:global -snProfSetRange = .text:0x803119E8; // type:label scope:global -snProfSetFlagValue = .text:0x80311A00; // type:label scope:global -snProfSetFlags = .text:0x80311A10; // type:label scope:global -snProfClrFlags = .text:0x80311A28; // type:label scope:global -PPCMtdec = .text:0x80311BE4; // type:label scope:global -__cvt_fp2unsigned = .text:0x80311C50; // type:label scope:global -__shr2u = .text:0x80311C98; // type:label scope:global -__div2i = .text:0x80311C9C; // type:label scope:global -__shl2i = .text:0x80311CA0; // type:label scope:global -__mod2i = .text:0x80311CA4; // type:label scope:global -__shr2i = .text:0x80311CA8; // type:label scope:global -__div2u = .text:0x80311CAC; // type:label scope:global -__mod2u = .text:0x80311CB0; // type:label scope:global -__va_arg = .text:0x80311CB4; // type:label scope:global -gcc2_compiled. = .text:0x80311DA8; // type:label scope:local -PCwriteAsyncInit = .text:0x80311DA8; // type:function size:0x8 scope:global -DoFSReadHeader = .text:0x80311DB0; // type:function size:0x8C scope:local -InitReadCounts = .text:0x80311E3C; // type:function size:0x5C scope:local -PCreadAsyncNext = .text:0x80311E98; // type:function size:0x8C scope:local -PCreadAsyncInit = .text:0x80311F24; // type:function size:0xA4 scope:global -ReadSyncNext = .text:0x80311FC8; // type:function size:0xA0 scope:local -CompletePCreadAsync = .text:0x80312068; // type:function size:0x184 scope:local -PCrwAsyncFSACK = .text:0x803121EC; // type:function size:0xA8 scope:local -PCrwSyncFSACK = .text:0x80312294; // type:function size:0xD8 scope:local -CompleteAsync = .text:0x8031236C; // type:function size:0x54 scope:global -PCrwAsyncNextPh = .text:0x803123C0; // type:function size:0x74 scope:global -EXI2TCHandler = .text:0x80312434; // type:function size:0x13C scope:local -SNInitEXI2TCHandler = .text:0x80312570; // type:function size:0x70 scope:global -gcc2_compiled. = .text:0x803125E0; // type:label scope:local -DisDvdBP = .text:0x803125E0; // type:function size:0x20 scope:local -EnaDvdBP = .text:0x80312600; // type:function size:0x24 scope:local -ForceDvdTcIrq = .text:0x80312624; // type:function size:0x88 scope:local -ForceDvdDeIrq = .text:0x803126AC; // type:function size:0x44 scope:local -DvdCallback = .text:0x803126F0; // type:function size:0x80 scope:local -CheckSeekOffset = .text:0x80312770; // type:function size:0x20 scope:local -DSIExcHandler = .text:0x80312790; // type:function size:0xB4 scope:local -NotDvdDsi = .text:0x803127F0; // type:label scope:local -DSIHandler = .text:0x80312844; // type:function size:0x274 scope:local -SNDVDEmuInit = .text:0x80312AB8; // type:function size:0x20 scope:global -SNDVDEmuInitDSIHandler = .text:0x80312AD8; // type:function size:0x7C scope:global -SNDVDEmuControl = .text:0x80312B54; // type:function size:0xBC scope:global -gcc2_compiled. = .text:0x80312C10; // type:label scope:local -__errno = .text:0x80312C10; // type:function size:0x8 scope:global -gcc2_compiled. = .text:0x80312C18; // type:label scope:local -fclose = .text:0x80312C18; // type:function size:0xB8 scope:global -gcc2_compiled. = .text:0x80312CD0; // type:label scope:local -fflush = .text:0x80312CD0; // type:function size:0xF4 scope:global -gcc2_compiled. = .text:0x80312DC4; // type:label scope:local -snstd = .text:0x80312DC4; // type:function size:0x5C scope:local -_sn_sinit = .text:0x80312E20; // type:function size:0xB0 scope:global -_sn_sfp = .text:0x80312ED0; // type:function size:0x144 scope:global -_fopen_r = .text:0x80313014; // type:function size:0xEC scope:global -fopen = .text:0x80313100; // type:function size:0x30 scope:global -_cleanup_r = .text:0x80313130; // type:function size:0x28 scope:global -gcc2_compiled. = .text:0x80313158; // type:label scope:local -fprintf = .text:0x80313158; // type:function size:0x94 scope:global -gcc2_compiled. = .text:0x803131EC; // type:label scope:local -fseek = .text:0x803131EC; // type:function size:0x3E4 scope:global -gcc2_compiled. = .text:0x803135D0; // type:label scope:local -_fwalk = .text:0x803135D0; // type:function size:0x80 scope:global -gcc2_compiled. = .text:0x80313650; // type:label scope:local -__smakebuf = .text:0x80313650; // type:function size:0xD8 scope:global -printf = .text:0x80313728; // type:function size:0xAC scope:global -gcc2_compiled. = .text:0x803137D4; // type:label scope:local -lflush = .text:0x803137D4; // type:function size:0x20 scope:local -__srefill = .text:0x803137F4; // type:function size:0x174 scope:global -sprintf = .text:0x80313968; // type:function size:0xD8 scope:global -gcc2_compiled. = .text:0x80313A40; // type:label scope:local -__sread = .text:0x80313A40; // type:function size:0x64 scope:global -__swrite = .text:0x80313AA4; // type:function size:0x70 scope:global -__sseek = .text:0x80313B14; // type:function size:0x64 scope:global -__sclose = .text:0x80313B78; // type:function size:0x28 scope:global -gcc2_compiled. = .text:0x80313BA0; // type:label scope:local -vsprintf = .text:0x80313BA0; // type:function size:0x5C scope:global -vsnprintf = .text:0x80313BFC; // type:function size:0x74 scope:global -gcc2_compiled. = .text:0x80313C70; // type:label scope:local -atexit = .text:0x80313C70; // type:function size:0x98 scope:global -gcc2_compiled. = .text:0x80313D08; // type:label scope:local -qsort = .text:0x80313D08; // type:function size:0x98C scope:global -rand = .text:0x80314694; // type:function size:0x24 scope:global -gcc2_compiled. = .text:0x803146B8; // type:label scope:local -malloc = .text:0x803146B8; // type:function size:0x3C scope:global -free = .text:0x803146F4; // type:function size:0x3C scope:global -gcc2_compiled. = .text:0x80314730; // type:label scope:local -memcmp = .text:0x80314730; // type:function size:0x90 scope:global -gcc2_compiled. = .text:0x803147C0; // type:label scope:local -memcpy = .text:0x803147C0; // type:function size:0xA4 scope:global -gcc2_compiled. = .text:0x80314864; // type:label scope:local -memmove = .text:0x80314864; // type:function size:0xEC scope:global -gcc2_compiled. = .text:0x80314950; // type:label scope:local -memset = .text:0x80314950; // type:function size:0x94 scope:global -gcc2_compiled. = .text:0x803149E4; // type:label scope:local -strcasecmp = .text:0x803149E4; // type:function size:0x7C scope:global -gcc2_compiled. = .text:0x80314A60; // type:label scope:local -strcat = .text:0x80314A60; // type:function size:0x90 scope:global -gcc2_compiled. = .text:0x80314AF0; // type:label scope:local -strchr = .text:0x80314AF0; // type:function size:0x9C scope:global -gcc2_compiled. = .text:0x80314B8C; // type:label scope:local -strcmp = .text:0x80314B8C; // type:function size:0xA8 scope:global -gcc2_compiled. = .text:0x80314C34; // type:label scope:local -strcoll = .text:0x80314C34; // type:function size:0x20 scope:global -gcc2_compiled. = .text:0x80314C54; // type:label scope:local -strcpy = .text:0x80314C54; // type:function size:0x84 scope:global -gcc2_compiled. = .text:0x80314CD8; // type:label scope:local -strcspn = .text:0x80314CD8; // type:function size:0x70 scope:global -gcc2_compiled. = .text:0x80314D48; // type:label scope:local -strlen = .text:0x80314D48; // type:function size:0x6C scope:global -gcc2_compiled. = .text:0x80314DB4; // type:label scope:local -strncasecmp = .text:0x80314DB4; // type:function size:0xAC scope:global -gcc2_compiled. = .text:0x80314E60; // type:label scope:local -strncat = .text:0x80314E60; // type:function size:0xAC scope:global -gcc2_compiled. = .text:0x80314F0C; // type:label scope:local -strncmp = .text:0x80314F0C; // type:function size:0xE0 scope:global -gcc2_compiled. = .text:0x80314FEC; // type:label scope:local -strncpy = .text:0x80314FEC; // type:function size:0xCC scope:global -gcc2_compiled. = .text:0x803150B8; // type:label scope:local -strstr = .text:0x803150B8; // type:function size:0x68 scope:global -setjmp = .text:0x80315120; // type:function size:0xBC scope:global -longjmp = .text:0x803151DC; // type:function size:0xC4 scope:global -gcc2_compiled. = .text:0x803152A0; // type:label scope:local -strround = .text:0x803152A0; // type:function size:0x5C scope:global -strrev = .text:0x803152FC; // type:function size:0x4C scope:global -itoa = .text:0x80315348; // type:function size:0x7C scope:global -fftoa = .text:0x803153C4; // type:function size:0x4E8 scope:global -_vfwrite = .text:0x803158AC; // type:function size:0xD4 scope:local -vfprintf = .text:0x80315980; // type:function size:0xD8 scope:global -_vfprintf_r = .text:0x80315A58; // type:function size:0x17F0 scope:global -add_separators = .text:0x80317248; // type:function size:0x188 scope:global -gcc2_compiled. = .text:0x803173D0; // type:label scope:local -_vfwrite = .text:0x803173D0; // type:function size:0xD4 scope:local -_vfiprintf_r = .text:0x803174A4; // type:function size:0x1680 scope:global -gcc2_compiled. = .text:0x80318B24; // type:label scope:local -strtod = .text:0x80318B24; // type:function size:0x32C scope:global -gcc2_compiled. = .text:0x80318E50; // type:label scope:local -_tolower = .text:0x80318E50; // type:function size:0x1C scope:global -gcc2_compiled. = .text:0x80318E6C; // type:label scope:local -isdigit = .text:0x80318E6C; // type:function size:0x14 scope:global -gcc2_compiled. = .text:0x80318E80; // type:label scope:local -isspace = .text:0x80318E80; // type:function size:0x14 scope:global -_localeconv_r = .text:0x80318E94; // type:function size:0xC scope:global -localeconv = .text:0x80318EA0; // type:function size:0x24 scope:global -gcc2_compiled. = .text:0x80318EC4; // type:label scope:local -sn_floor = .text:0x80318EC4; // type:function size:0x174 scope:global -sn_fmod = .text:0x80319038; // type:function size:0x35C scope:global -sn_log = .text:0x80319394; // type:function size:0x2FC scope:global -sn_log10 = .text:0x80319690; // type:function size:0x148 scope:global -gcc2_compiled. = .text:0x803197D8; // type:label scope:local -_close_r = .text:0x803197D8; // type:function size:0x50 scope:global -gcc2_compiled. = .text:0x80319828; // type:label scope:local -_fstat_r = .text:0x80319828; // type:function size:0x58 scope:global -gcc2_compiled. = .text:0x80319880; // type:label scope:local -_lseek_r = .text:0x80319880; // type:function size:0x58 scope:global -gcc2_compiled. = .text:0x803198D8; // type:label scope:local -_open_r = .text:0x803198D8; // type:function size:0x5C scope:global -gcc2_compiled. = .text:0x80319934; // type:label scope:local -_read_r = .text:0x80319934; // type:function size:0x58 scope:global -gcc2_compiled. = .text:0x8031998C; // type:label scope:local -_write_r = .text:0x8031998C; // type:function size:0x58 scope:global -gcc2_compiled. = .text:0x803199E4; // type:label scope:local -__sflags = .text:0x803199E4; // type:function size:0x9C scope:global -gcc2_compiled. = .text:0x80319A80; // type:label scope:local -_mbtowc_r = .text:0x80319A80; // type:function size:0x31C scope:global -gcc2_compiled. = .text:0x80319D9C; // type:label scope:local -memchr = .text:0x80319D9C; // type:function size:0xC0 scope:global -__do_global_ctors = .text:0x80319E5C; // type:function size:0x90 scope:global -__main = .text:0x80319EEC; // type:function size:0x38 scope:global -gcc2_compiled. = .text:0x80319F24; // type:label scope:local -__ashldi3 = .text:0x80319F24; // type:function size:0x40 scope:global -gcc2_compiled. = .text:0x80319F64; // type:label scope:local -__ashrdi3 = .text:0x80319F64; // type:function size:0x40 scope:global -gcc2_compiled. = .text:0x80319FA4; // type:label scope:local -__cmpdi2 = .text:0x80319FA4; // type:function size:0x3C scope:global -gcc2_compiled. = .text:0x80319FE0; // type:label scope:local -__divdi3 = .text:0x80319FE0; // type:function size:0x57C scope:global -gcc2_compiled. = .text:0x8031A55C; // type:label scope:local -__floatdisf = .text:0x8031A55C; // type:function size:0xB0 scope:global -gcc2_compiled. = .text:0x8031A60C; // type:label scope:local -__lshrdi3 = .text:0x8031A60C; // type:function size:0x40 scope:global -gcc2_compiled. = .text:0x8031A64C; // type:label scope:local -__moddi3 = .text:0x8031A64C; // type:function size:0x534 scope:global -gcc2_compiled. = .text:0x8031AB80; // type:label scope:local -__pure_virtual = .text:0x8031AB80; // type:function size:0x20 scope:global -gcc2_compiled. = .text:0x8031ABA0; // type:label scope:local -__udivdi3 = .text:0x8031ABA0; // type:function size:0x4E4 scope:global -gcc2_compiled. = .text:0x8031B084; // type:label scope:local -__umoddi3 = .text:0x8031B084; // type:function size:0x498 scope:global -gcc2_compiled. = .text:0x8031B51C; // type:label scope:local -__default_terminate = .text:0x8031B51C; // type:function size:0x10 scope:global -__terminate = .text:0x8031B52C; // type:function size:0x2C scope:global -gcc2_compiled. = .text:0x8031B558; // type:label scope:local -pow = .text:0x8031B558; // type:function size:0x7D0 scope:global -gcc2_compiled. = .text:0x8031BD28; // type:label scope:local -sqrt = .text:0x8031BD28; // type:function size:0x214 scope:global -gcc2_compiled. = .text:0x8031BF3C; // type:label scope:local -fabs = .text:0x8031BF3C; // type:function size:0x3C scope:global -gcc2_compiled. = .text:0x8031BF78; // type:label scope:local -acosf = .text:0x8031BF78; // type:function size:0x24C scope:global -gcc2_compiled. = .text:0x8031C1C4; // type:label scope:local -asinf = .text:0x8031C1C4; // type:function size:0x22C scope:global -gcc2_compiled. = .text:0x8031C3F0; // type:label scope:local -atan2f = .text:0x8031C3F0; // type:function size:0x220 scope:global -gcc2_compiled. = .text:0x8031C610; // type:label scope:local -coshf = .text:0x8031C610; // type:function size:0x130 scope:global -gcc2_compiled. = .text:0x8031C740; // type:label scope:local -expf = .text:0x8031C740; // type:function size:0x22C scope:global -gcc2_compiled. = .text:0x8031C96C; // type:label scope:local -fmodf = .text:0x8031C96C; // type:function size:0x1C8 scope:global -gcc2_compiled. = .text:0x8031CB34; // type:label scope:local -logf = .text:0x8031CB34; // type:function size:0x280 scope:global -gcc2_compiled. = .text:0x8031CDB4; // type:label scope:local -log10f = .text:0x8031CDB4; // type:function size:0x10C scope:global -gcc2_compiled. = .text:0x8031CEC0; // type:label scope:local -powf = .text:0x8031CEC0; // type:function size:0x6F4 scope:global -gcc2_compiled. = .text:0x8031D5B4; // type:label scope:local -sinhf = .text:0x8031D5B4; // type:function size:0x150 scope:global -gcc2_compiled. = .text:0x8031D704; // type:label scope:local -sqrtf = .text:0x8031D704; // type:function size:0xF8 scope:global -gcc2_compiled. = .text:0x8031D7FC; // type:label scope:local -atanf = .text:0x8031D7FC; // type:function size:0x210 scope:global -gcc2_compiled. = .text:0x8031DA0C; // type:label scope:local -ceilf = .text:0x8031DA0C; // type:function size:0xC4 scope:global -gcc2_compiled. = .text:0x8031DAD0; // type:label scope:local -cosf = .text:0x8031DAD0; // type:function size:0xDC scope:global -gcc2_compiled. = .text:0x8031DBAC; // type:label scope:local -fabsf = .text:0x8031DBAC; // type:function size:0x24 scope:global -gcc2_compiled. = .text:0x8031DBD0; // type:label scope:local -floorf = .text:0x8031DBD0; // type:function size:0xC8 scope:global -gcc2_compiled. = .text:0x8031DC98; // type:label scope:local -isnanf = .text:0x8031DC98; // type:function size:0x24 scope:global -gcc2_compiled. = .text:0x8031DCBC; // type:label scope:local -sinf = .text:0x8031DCBC; // type:function size:0xDC scope:global -gcc2_compiled. = .text:0x8031DD98; // type:label scope:local -tanf = .text:0x8031DD98; // type:function size:0x80 scope:global -gcc2_compiled. = .text:0x8031DE18; // type:label scope:local -tanhf = .text:0x8031DE18; // type:function size:0x110 scope:global -gcc2_compiled. = .text:0x8031DF28; // type:label scope:local -scalbn = .text:0x8031DF28; // type:function size:0x154 scope:global -gcc2_compiled. = .text:0x8031E07C; // type:label scope:local -scalbnf = .text:0x8031E07C; // type:function size:0x11C scope:global -gcc2_compiled. = .text:0x8031E198; // type:label scope:local -expm1f = .text:0x8031E198; // type:function size:0x324 scope:global -gcc2_compiled. = .text:0x8031E4BC; // type:label scope:local -__kernel_cosf = .text:0x8031E4BC; // type:function size:0xEC scope:global -gcc2_compiled. = .text:0x8031E5A8; // type:label scope:local -__kernel_sinf = .text:0x8031E5A8; // type:function size:0xAC scope:global -gcc2_compiled. = .text:0x8031E654; // type:label scope:local -__kernel_tanf = .text:0x8031E654; // type:function size:0x214 scope:global -gcc2_compiled. = .text:0x8031E868; // type:label scope:local -__ieee754_rem_pio2f = .text:0x8031E868; // type:function size:0x350 scope:global -gcc2_compiled. = .text:0x8031EBB8; // type:label scope:local -copysign = .text:0x8031EBB8; // type:function size:0x50 scope:global -gcc2_compiled. = .text:0x8031EC08; // type:label scope:local -copysignf = .text:0x8031EC08; // type:function size:0x34 scope:global -gcc2_compiled. = .text:0x8031EC3C; // type:label scope:local -__kernel_rem_pio2f = .text:0x8031EC3C; // type:function size:0x884 scope:global -PPCMfmsr = .text:0x8031F4C0; // type:function size:0x8 scope:global -PPCMtmsr = .text:0x8031F4C8; // type:function size:0x8 scope:global -PPCMfhid0 = .text:0x8031F4D0; // type:function size:0x8 scope:global -PPCMthid0 = .text:0x8031F4D8; // type:function size:0x8 scope:global -PPCMfl2cr = .text:0x8031F4E0; // type:function size:0x8 scope:global -PPCMtl2cr = .text:0x8031F4E8; // type:function size:0x8 scope:global -PPCSync = .text:0x8031F4F0; // type:function size:0x8 scope:global -PPCHalt = .text:0x8031F4F8; // type:function size:0x14 scope:global -PPCMtmmcr0 = .text:0x8031F50C; // type:function size:0x8 scope:global -PPCMtmmcr1 = .text:0x8031F514; // type:function size:0x8 scope:global -PPCMtpmc1 = .text:0x8031F51C; // type:function size:0x8 scope:global -PPCMtpmc2 = .text:0x8031F524; // type:function size:0x8 scope:global -PPCMtpmc3 = .text:0x8031F52C; // type:function size:0x8 scope:global -PPCMtpmc4 = .text:0x8031F534; // type:function size:0x8 scope:global -PPCMffpscr = .text:0x8031F53C; // type:function size:0x20 scope:global -PPCMtfpscr = .text:0x8031F55C; // type:function size:0x28 scope:global -PPCMfhid2 = .text:0x8031F584; // type:function size:0x8 scope:global -PPCMthid2 = .text:0x8031F58C; // type:function size:0x8 scope:global -PPCMfwpar = .text:0x8031F594; // type:function size:0xC scope:global -PPCMtwpar = .text:0x8031F5A0; // type:function size:0x8 scope:global -PPCDisableSpeculation = .text:0x8031F5A8; // type:function size:0x28 scope:global -PPCSetFpNonIEEEMode = .text:0x8031F5D0; // type:function size:0x8 scope:global -SteeringResetCallback = .text:0x8031F5D8; // type:function size:0x24 scope:local -HandlePedals = .text:0x8031F5FC; // type:function size:0x200 scope:local -HandleTriggers = .text:0x8031F7FC; // type:function size:0x24C scope:local -CookValues = .text:0x8031FA48; // type:function size:0x104 scope:local -SteeringSamplingCallback = .text:0x8031FB4C; // type:function size:0xB4 scope:local -InitDevice = .text:0x8031FC00; // type:function size:0x140 scope:local -LGInit = .text:0x8031FD40; // type:function size:0x9C scope:global -LGOpen = .text:0x8031FDDC; // type:function size:0x15C scope:global -LGClose = .text:0x8031FF38; // type:function size:0x80 scope:global -LGRead = .text:0x8031FFB8; // type:function size:0xEC scope:global -LGDownloadForceEffect = .text:0x803200A4; // type:function size:0xCC scope:global -LGUpdateForceEffect = .text:0x80320170; // type:function size:0xD0 scope:global -LGStartForceEffect = .text:0x80320240; // type:function size:0xBC scope:global -LGStopForceEffect = .text:0x803202FC; // type:function size:0xBC scope:global -LGDestroyForceEffect = .text:0x803203B8; // type:function size:0xBC scope:global -VDevice_Init = .text:0x80320474; // type:function size:0x70 scope:local -VDevice_RecalcGammaTable = .text:0x803204E4; // type:function size:0xD8 scope:local -VDevice_DownloadEffect = .text:0x803205BC; // type:function size:0xBC scope:local -VDevice_UpdateEffect = .text:0x80320678; // type:function size:0x44 scope:local -VDevice_DestroyEffect = .text:0x803206BC; // type:function size:0x28 scope:local -VDevice_StartEffect = .text:0x803206E4; // type:function size:0x40 scope:local -VDevice_StopEffect = .text:0x80320724; // type:function size:0x40 scope:local -VDevice_Initialize = .text:0x80320764; // type:function size:0x34 scope:local -VDevice_Shutdown = .text:0x80320798; // type:function size:0x34 scope:local -VDevice_GetFreeEffect = .text:0x803207CC; // type:function size:0x74 scope:local -Effect_Init = .text:0x80320840; // type:function size:0x114 scope:local -Effect_UpdateEffect = .text:0x80320954; // type:function size:0x328 scope:local -Effect_StartEffect = .text:0x80320C7C; // type:function size:0x48 scope:local -Effect_StopEffect = .text:0x80320CC4; // type:function size:0x14 scope:local -Effect_Update = .text:0x80320CD8; // type:function size:0x3E0 scope:local -Effect_PerformEnvelope = .text:0x803210B8; // type:function size:0xC4 scope:local -Effect_PolarToRect = .text:0x8032117C; // type:function size:0xB4 scope:local -Effect_UpdateSpring = .text:0x80321230; // type:function size:0xA0 scope:local -Effect_UpdateDamper = .text:0x803212D0; // type:function size:0x60 scope:local -SimThread_Init = .text:0x80321330; // type:function size:0x144 scope:local -SimThread_Step = .text:0x80321474; // type:function size:0x39C scope:local -__OSFPRInit = .text:0x80321810; // type:function size:0x128 scope:global -OSGetConsoleType = .text:0x80321938; // type:function size:0x28 scope:global -InquiryCallback = .text:0x80321960; // type:function size:0x3C scope:local -OSInit = .text:0x8032199C; // type:function size:0x4E0 scope:global -OSExceptionInit = .text:0x80321E7C; // type:function size:0x280 scope:local -__OSDBIntegrator = .text:0x803220FC; // type:function size:0x24 scope:local -__OSDBINTSTART = .text:0x803220FC; // type:label scope:global -__OSDBJump = .text:0x80322120; // type:function size:0x4 scope:local -__OSDBINTEND = .text:0x80322120; // type:label scope:global -__OSDBJUMPSTART = .text:0x80322120; // type:label scope:global -__OSSetExceptionHandler = .text:0x80322124; // type:function size:0x1C scope:global -__OSDBJUMPEND = .text:0x80322124; // type:label scope:global -__OSGetExceptionHandler = .text:0x80322140; // type:function size:0x14 scope:global -OSExceptionVector = .text:0x80322154; // type:function size:0x9C scope:local -__OSEVStart = .text:0x80322154; // type:label scope:global -__DBVECTOR = .text:0x803221AC; // type:label scope:global -__OSEVSetNumber = .text:0x803221BC; // type:label scope:global -__OSEVEnd = .text:0x803221EC; // type:label scope:global -OSDefaultExceptionHandler = .text:0x803221F0; // type:function size:0x58 scope:global -__OSPSInit = .text:0x80322248; // type:function size:0x54 scope:global -__OSGetDIConfig = .text:0x8032229C; // type:function size:0x14 scope:global -OSRegisterVersion = .text:0x803222B0; // type:function size:0x2C scope:global -OSInitAlarm = .text:0x803222DC; // type:function size:0x58 scope:global -OSCreateAlarm = .text:0x80322334; // type:function size:0x10 scope:global -InsertAlarm = .text:0x80322344; // type:function size:0x250 scope:local -OSSetAlarm = .text:0x80322594; // type:function size:0x68 scope:global -OSSetPeriodicAlarm = .text:0x803225FC; // type:function size:0x7C scope:global -OSCancelAlarm = .text:0x80322678; // type:function size:0x11C scope:global -DecrementerExceptionCallback = .text:0x80322794; // type:function size:0x230 scope:local -DecrementerExceptionHandler = .text:0x803229C4; // type:function size:0x50 scope:local -OnReset = .text:0x80322A14; // type:function size:0xA0 scope:local -OSAllocFromHeap = .text:0x80322AB4; // type:function size:0xFC scope:global -OSSetCurrentHeap = .text:0x80322BB0; // type:function size:0x10 scope:global -OSInitAlloc = .text:0x80322BC0; // type:function size:0x70 scope:global -OSCreateHeap = .text:0x80322C30; // type:function size:0x6C scope:global -OSGetArenaHi = .text:0x80322C9C; // type:function size:0x8 scope:global -OSGetArenaLo = .text:0x80322CA4; // type:function size:0x8 scope:global -OSSetArenaHi = .text:0x80322CAC; // type:function size:0x8 scope:global -OSSetArenaLo = .text:0x80322CB4; // type:function size:0x8 scope:global -OSAllocFromArenaLo = .text:0x80322CBC; // type:function size:0x2C scope:global -__OSInitAudioSystem = .text:0x80322CE8; // type:function size:0x1BC scope:global -__OSStopAudioSystem = .text:0x80322EA4; // type:function size:0xD8 scope:global -DCEnable = .text:0x80322F7C; // type:function size:0x14 scope:global -DCInvalidateRange = .text:0x80322F90; // type:function size:0x2C scope:global -DCFlushRange = .text:0x80322FBC; // type:function size:0x30 scope:global -DCStoreRange = .text:0x80322FEC; // type:function size:0x30 scope:global -DCFlushRangeNoSync = .text:0x8032301C; // type:function size:0x2C scope:global -DCStoreRangeNoSync = .text:0x80323048; // type:function size:0x2C scope:global -ICInvalidateRange = .text:0x80323074; // type:function size:0x34 scope:global -ICFlashInvalidate = .text:0x803230A8; // type:function size:0x10 scope:global -ICEnable = .text:0x803230B8; // type:function size:0x14 scope:global -LCDisable = .text:0x803230CC; // type:function size:0x28 scope:global -L2GlobalInvalidate = .text:0x803230F4; // type:function size:0x98 scope:global -DMAErrorHandler = .text:0x8032318C; // type:function size:0x160 scope:global -__OSCacheInit = .text:0x803232EC; // type:function size:0xF4 scope:global -__OSLoadFPUContext = .text:0x803233E0; // type:function size:0x124 scope:local -__OSSaveFPUContext = .text:0x80323504; // type:function size:0x128 scope:local -OSSaveFPUContext = .text:0x8032362C; // type:function size:0x8 scope:global -OSSetCurrentContext = .text:0x80323634; // type:function size:0x5C scope:global -OSGetCurrentContext = .text:0x80323690; // type:function size:0xC scope:global -OSSaveContext = .text:0x8032369C; // type:function size:0x80 scope:global -OSLoadContext = .text:0x8032371C; // type:function size:0xD8 scope:global -OSGetStackPointer = .text:0x803237F4; // type:function size:0x8 scope:global -OSClearContext = .text:0x803237FC; // type:function size:0x24 scope:global -OSInitContext = .text:0x80323820; // type:function size:0xBC scope:global -OSDumpContext = .text:0x803238DC; // type:function size:0x2A8 scope:global -OSSwitchFPUContext = .text:0x80323B84; // type:function size:0x84 scope:local -__OSContextInit = .text:0x80323C08; // type:function size:0x48 scope:global -OSReport = .text:0x80323C50; // type:function size:0x80 scope:global -OSPanic = .text:0x80323CD0; // type:function size:0x12C scope:global -OSSetErrorHandler = .text:0x80323DFC; // type:function size:0x218 scope:global -__OSUnhandledException = .text:0x80324014; // type:function size:0x2E8 scope:global -PackArgs = .text:0x803242FC; // type:function size:0x188 scope:local -Run = .text:0x80324484; // type:function size:0x3C scope:local -ReadDisc = .text:0x803244C0; // type:function size:0x6C scope:local -Callback = .text:0x8032452C; // type:function size:0xC scope:local -__OSGetExecParams = .text:0x80324538; // type:function size:0x40 scope:global -GetApploaderPosition = .text:0x80324578; // type:function size:0xC4 scope:local -__OSBootDolSimple = .text:0x8032463C; // type:function size:0x484 scope:global -__OSBootDol = .text:0x80324AC0; // type:function size:0x19C scope:global -GetFontCode = .text:0x80324C5C; // type:function size:0x174 scope:local -Decode = .text:0x80324DD0; // type:function size:0x174 scope:local -OSGetFontEncode = .text:0x80324F44; // type:function size:0x64 scope:global -ReadFont = .text:0x80324FA8; // type:function size:0x324 scope:local -ParseStringS = .text:0x803252CC; // type:function size:0x13C scope:local -ExpandFontSheet = .text:0x80325408; // type:function size:0x3AC scope:local -OSInitFont = .text:0x803257B4; // type:function size:0x20C scope:global -OSGetFontTexture = .text:0x803259C0; // type:function size:0x170 scope:global -OSDisableInterrupts = .text:0x80325B30; // type:function size:0x14 scope:global -__RAS_OSDisableInterrupts_begin = .text:0x80325B30; // type:label scope:global -__RAS_OSDisableInterrupts_end = .text:0x80325B3C; // type:label scope:global -OSEnableInterrupts = .text:0x80325B44; // type:function size:0x14 scope:global -OSRestoreInterrupts = .text:0x80325B58; // type:function size:0x24 scope:global -__OSSetInterruptHandler = .text:0x80325B7C; // type:function size:0x1C scope:global -__OSGetInterruptHandler = .text:0x80325B98; // type:function size:0x14 scope:global -__OSInterruptInit = .text:0x80325BAC; // type:function size:0x74 scope:global -SetInterruptMask = .text:0x80325C20; // type:function size:0x2D8 scope:local -__OSMaskInterrupts = .text:0x80325EF8; // type:function size:0x88 scope:global -__OSUnmaskInterrupts = .text:0x80325F80; // type:function size:0x88 scope:global -__OSDispatchInterrupt = .text:0x80326008; // type:function size:0x344 scope:global -ExternalInterruptHandler = .text:0x8032634C; // type:function size:0x50 scope:local -__OSModuleInit = .text:0x8032639C; // type:function size:0x18 scope:global -OnReset = .text:0x803263B4; // type:function size:0x3C scope:local -MEMIntrruptHandler = .text:0x803263F0; // type:function size:0x6C scope:local -Config24MB = .text:0x8032645C; // type:function size:0x80 scope:local -Config48MB = .text:0x803264DC; // type:function size:0x80 scope:local -RealMode = .text:0x8032655C; // type:function size:0x18 scope:local -__OSInitMemoryProtection = .text:0x80326574; // type:function size:0x118 scope:global -OSInitMutex = .text:0x8032668C; // type:function size:0x38 scope:global -OSLockMutex = .text:0x803266C4; // type:function size:0xDC scope:global -OSUnlockMutex = .text:0x803267A0; // type:function size:0xC8 scope:global -__OSUnlockAllMutex = .text:0x80326868; // type:function size:0x70 scope:global -__OSReboot = .text:0x803268D8; // type:function size:0x70 scope:global -OSGetSaveRegion = .text:0x80326948; // type:function size:0x14 scope:global -OSRegisterResetFunction = .text:0x8032695C; // type:function size:0x84 scope:global -__OSCallResetFunctions = .text:0x803269E0; // type:function size:0xA8 scope:global -Reset = .text:0x80326A88; // type:function size:0x70 scope:local -KillThreads = .text:0x80326AF8; // type:function size:0x68 scope:local -__OSDoHotReset = .text:0x80326B60; // type:function size:0x48 scope:global -OSResetSystem = .text:0x80326BA8; // type:function size:0x200 scope:global -OSGetResetCode = .text:0x80326DA8; // type:function size:0x38 scope:global -__OSResetSWInterruptHandler = .text:0x80326DE0; // type:function size:0xF4 scope:global -OSGetResetButtonState = .text:0x80326ED4; // type:function size:0x298 scope:global -OSGetResetSwitchState = .text:0x8032716C; // type:function size:0x20 scope:global -WriteSramCallback = .text:0x8032718C; // type:function size:0x60 scope:local -WriteSram = .text:0x803271EC; // type:function size:0x118 scope:local -__OSInitSram = .text:0x80327304; // type:function size:0x13C scope:global -__OSLockSram = .text:0x80327440; // type:function size:0x5C scope:global -__OSLockSramEx = .text:0x8032749C; // type:function size:0x5C scope:global -UnlockSram = .text:0x803274F8; // type:function size:0x33C scope:local -__OSUnlockSram = .text:0x80327834; // type:function size:0x24 scope:global -__OSUnlockSramEx = .text:0x80327858; // type:function size:0x24 scope:global -__OSSyncSram = .text:0x8032787C; // type:function size:0x10 scope:global -__OSReadROM = .text:0x8032788C; // type:function size:0x124 scope:global -OSGetSoundMode = .text:0x803279B0; // type:function size:0x80 scope:global -OSSetSoundMode = .text:0x80327A30; // type:function size:0xA4 scope:global -OSGetProgressiveMode = .text:0x80327AD4; // type:function size:0x70 scope:global -OSSetProgressiveMode = .text:0x80327B44; // type:function size:0xA4 scope:global -OSGetEuRgb60Mode = .text:0x80327BE8; // type:function size:0x70 scope:global -OSSetEuRgb60Mode = .text:0x80327C58; // type:function size:0xA4 scope:global -OSGetWirelessID = .text:0x80327CFC; // type:function size:0x84 scope:global -OSSetWirelessID = .text:0x80327D80; // type:function size:0xAC scope:global -OSGetGbsMode = .text:0x80327E2C; // type:function size:0x70 scope:global -OSSetGbsMode = .text:0x80327E9C; // type:function size:0xB8 scope:global -SystemCallVector = .text:0x80327F54; // type:function size:0x20 scope:local -__OSSystemCallVectorStart = .text:0x80327F54; // type:label scope:global -__OSSystemCallVectorEnd = .text:0x80327F70; // type:label scope:global -__OSInitSystemCall = .text:0x80327F74; // type:function size:0x64 scope:global -DefaultSwitchThreadCallback = .text:0x80327FD8; // type:function size:0x4 scope:local -__OSThreadInit = .text:0x80327FDC; // type:function size:0x158 scope:global -OSInitThreadQueue = .text:0x80328134; // type:function size:0x10 scope:global -OSGetCurrentThread = .text:0x80328144; // type:function size:0xC scope:global -OSIsThreadTerminated = .text:0x80328150; // type:function size:0x34 scope:global -OSDisableScheduler = .text:0x80328184; // type:function size:0x40 scope:global -OSEnableScheduler = .text:0x803281C4; // type:function size:0x40 scope:global -UnsetRun = .text:0x80328204; // type:function size:0x68 scope:local -__OSGetEffectivePriority = .text:0x8032826C; // type:function size:0x3C scope:global -SetEffectivePriority = .text:0x803282A8; // type:function size:0x1C0 scope:local -__OSPromoteThread = .text:0x80328468; // type:function size:0x50 scope:global -SelectThread = .text:0x803284B8; // type:function size:0x228 scope:local -__OSReschedule = .text:0x803286E0; // type:function size:0x30 scope:global -OSYieldThread = .text:0x80328710; // type:function size:0x3C scope:global -OSCreateThread = .text:0x8032874C; // type:function size:0x1E8 scope:global -OSExitThread = .text:0x80328934; // type:function size:0xE4 scope:global -OSCancelThread = .text:0x80328A18; // type:function size:0x1BC scope:global -OSResumeThread = .text:0x80328BD4; // type:function size:0x288 scope:global -OSSuspendThread = .text:0x80328E5C; // type:function size:0x170 scope:global -OSSleepThread = .text:0x80328FCC; // type:function size:0xEC scope:global -OSWakeupThread = .text:0x803290B8; // type:function size:0x104 scope:global -OSSetThreadPriority = .text:0x803291BC; // type:function size:0xC0 scope:global -OSClearStack = .text:0x8032927C; // type:function size:0xAC scope:global -OSGetTime = .text:0x80329328; // type:function size:0x18 scope:global -OSGetTick = .text:0x80329340; // type:function size:0x8 scope:global -__OSGetSystemTime = .text:0x80329348; // type:function size:0x64 scope:global -__OSTimeToSystemTime = .text:0x803293AC; // type:function size:0x58 scope:global -__init_user = .text:0x80329404; // type:function size:0x20 scope:global -__init_cpp = .text:0x80329424; // type:function size:0x54 scope:local -abort = .text:0x80329478; // type:function size:0x20 scope:global -exit = .text:0x80329498; // type:function size:0x54 scope:global -_ExitProcess = .text:0x803294EC; // type:function size:0x20 scope:global -DBInit = .text:0x8032950C; // type:function size:0x28 scope:global -__DBExceptionDestinationAux = .text:0x80329534; // type:function size:0x48 scope:global -__DBExceptionDestination = .text:0x8032957C; // type:function size:0x10 scope:global -__DBIsExceptionMarked = .text:0x8032958C; // type:function size:0x1C scope:global -DBPrintf = .text:0x803295A8; // type:function size:0x50 scope:global -PSMTXIdentity = .text:0x803295F8; // type:function size:0x2C scope:global -PSMTXConcat = .text:0x80329624; // type:function size:0xCC scope:global -PSMTXInvXpose = .text:0x803296F0; // type:function size:0xC8 scope:global -PSMTXRotRad = .text:0x803297B8; // type:function size:0x70 scope:global -PSMTXRotTrig = .text:0x80329828; // type:function size:0xB0 scope:global -PSMTXTrans = .text:0x803298D8; // type:function size:0x34 scope:global -PSMTXTransApply = .text:0x8032990C; // type:function size:0x4C scope:global -PSMTXScale = .text:0x80329958; // type:function size:0x28 scope:global -C_MTXLookAt = .text:0x80329980; // type:function size:0x18C scope:global -C_MTXLightFrustum = .text:0x80329B0C; // type:function size:0x94 scope:global -C_MTXLightPerspective = .text:0x80329BA0; // type:function size:0xCC scope:global -PSMTXMultVec = .text:0x80329C6C; // type:function size:0x54 scope:global -C_MTXPerspective = .text:0x80329CC0; // type:function size:0xD0 scope:global -C_MTXOrtho = .text:0x80329D90; // type:function size:0x98 scope:global -PSMTX44Identity = .text:0x80329E28; // type:function size:0x34 scope:global -PSMTX44Copy = .text:0x80329E5C; // type:function size:0x44 scope:global -PSMTX44Concat = .text:0x80329EA0; // type:function size:0x104 scope:global -PSMTX44Transpose = .text:0x80329FA4; // type:function size:0x64 scope:global -C_MTX44Inverse = .text:0x8032A008; // type:function size:0x3F0 scope:global -PSVECNormalize = .text:0x8032A3F8; // type:function size:0x44 scope:global -PSVECCrossProduct = .text:0x8032A43C; // type:function size:0x3C scope:global -__DVDFSInit = .text:0x8032A478; // type:function size:0x38 scope:global -DVDConvertPathToEntrynum = .text:0x8032A4B0; // type:function size:0x2F4 scope:global -DVDFastOpen = .text:0x8032A7A4; // type:function size:0x74 scope:global -DVDClose = .text:0x8032A818; // type:function size:0x24 scope:global -DVDReadAsyncPrio = .text:0x8032A83C; // type:function size:0xC0 scope:global -cbForReadAsync = .text:0x8032A8FC; // type:function size:0x30 scope:local -defaultOptionalCommandChecker = .text:0x8032A92C; // type:function size:0x4 scope:local -DVDInit = .text:0x8032A930; // type:function size:0xD8 scope:global -stateReadingFST = .text:0x8032AA08; // type:function size:0x94 scope:local -cbForStateReadingFST = .text:0x8032AA9C; // type:function size:0x80 scope:local -cbForStateError = .text:0x8032AB1C; // type:function size:0xAC scope:local -stateTimeout = .text:0x8032ABC8; // type:function size:0x34 scope:local -stateGettingError = .text:0x8032ABFC; // type:function size:0x28 scope:local -CategorizeError = .text:0x8032AC24; // type:function size:0xB4 scope:local -cbForStateGettingError = .text:0x8032ACD8; // type:function size:0x264 scope:local -cbForUnrecoveredError = .text:0x8032AF3C; // type:function size:0x5C scope:local -cbForUnrecoveredErrorRetry = .text:0x8032AF98; // type:function size:0x80 scope:local -stateGoToRetry = .text:0x8032B018; // type:function size:0x28 scope:local -cbForStateGoToRetry = .text:0x8032B040; // type:function size:0x140 scope:local -stateCheckID = .text:0x8032B180; // type:function size:0xE0 scope:local -stateCheckID3 = .text:0x8032B260; // type:function size:0x34 scope:local -stateCheckID2a = .text:0x8032B294; // type:function size:0x34 scope:local -cbForStateCheckID2a = .text:0x8032B2C8; // type:function size:0x68 scope:local -stateCheckID2 = .text:0x8032B330; // type:function size:0x38 scope:local -cbForStateCheckID1 = .text:0x8032B368; // type:function size:0xFC scope:local -cbForStateCheckID2 = .text:0x8032B464; // type:function size:0xD8 scope:local -cbForStateCheckID3 = .text:0x8032B53C; // type:function size:0xF0 scope:local -AlarmHandler = .text:0x8032B62C; // type:function size:0x44 scope:local -stateCoverClosed = .text:0x8032B670; // type:function size:0xD4 scope:local -stateCoverClosed_CMD = .text:0x8032B744; // type:function size:0x30 scope:local -cbForStateCoverClosed = .text:0x8032B774; // type:function size:0x64 scope:local -stateMotorStopped = .text:0x8032B7D8; // type:function size:0x28 scope:local -cbForStateMotorStopped = .text:0x8032B800; // type:function size:0xEC scope:local -stateReady = .text:0x8032B8EC; // type:function size:0x2E8 scope:local -stateBusy = .text:0x8032BBD4; // type:function size:0x340 scope:local -cbForStateBusy = .text:0x8032BF14; // type:function size:0x658 scope:local -DVDReadAbsAsyncPrio = .text:0x8032C56C; // type:function size:0xDC scope:global -DVDReadAbsAsyncForBS = .text:0x8032C648; // type:function size:0xD0 scope:global -DVDReadDiskID = .text:0x8032C718; // type:function size:0xD4 scope:global -DVDCancelStreamAsync = .text:0x8032C7EC; // type:function size:0xBC scope:global -DVDInquiryAsync = .text:0x8032C8A8; // type:function size:0xD0 scope:global -DVDReset = .text:0x8032C978; // type:function size:0x44 scope:global -DVDGetCommandBlockStatus = .text:0x8032C9BC; // type:function size:0x4C scope:global -DVDGetDriveStatus = .text:0x8032CA08; // type:function size:0xAC scope:global -DVDSetAutoInvalidation = .text:0x8032CAB4; // type:function size:0x10 scope:global -DVDResume = .text:0x8032CAC4; // type:function size:0x50 scope:global -DVDCancelAsync = .text:0x8032CB14; // type:function size:0x27C scope:global -DVDCancel = .text:0x8032CD90; // type:function size:0xAC scope:global -cbForCancelSync = .text:0x8032CE3C; // type:function size:0x24 scope:local -DVDGetCurrentDiskID = .text:0x8032CE60; // type:function size:0x8 scope:global -DVDCheckDisk = .text:0x8032CE68; // type:function size:0xF8 scope:global -__DVDPrepareResetAsync = .text:0x8032CF60; // type:function size:0x11C scope:global -__DVDTestAlarm = .text:0x8032D07C; // type:function size:0x38 scope:global -__DVDClearWaitingQueue = .text:0x8032D0B4; // type:function size:0x38 scope:global -__DVDPushWaitingQueue = .text:0x8032D0EC; // type:function size:0x68 scope:global -__DVDPopWaitingQueue = .text:0x8032D154; // type:function size:0xA0 scope:global -__DVDCheckWaitingQueue = .text:0x8032D1F4; // type:function size:0x58 scope:global -__DVDDequeueWaitingQueue = .text:0x8032D24C; // type:function size:0x60 scope:global -ErrorCode2Num = .text:0x8032D2AC; // type:function size:0x11C scope:local -__DVDStoreErrorCode = .text:0x8032D3C8; // type:function size:0x7C scope:global -DVDCompareDiskID = .text:0x8032D444; // type:function size:0xF8 scope:global -__DVDPrintFatalMessage = .text:0x8032D53C; // type:function size:0x30 scope:global -cb = .text:0x8032D56C; // type:function size:0xD8 scope:local -__fstLoad = .text:0x8032D644; // type:function size:0x168 scope:global -__DVDInitWA = .text:0x8032D7AC; // type:function size:0x40 scope:global -__DVDInterruptHandler = .text:0x8032D7EC; // type:function size:0x2E0 scope:global -AlarmHandler = .text:0x8032DACC; // type:function size:0x84 scope:local -AlarmHandlerForTimeout = .text:0x8032DB50; // type:function size:0x70 scope:local -Read = .text:0x8032DBC0; // type:function size:0x110 scope:local -SeekTwiceBeforeRead = .text:0x8032DCD0; // type:function size:0x80 scope:local -DVDLowRead = .text:0x8032DD50; // type:function size:0x298 scope:global -DVDLowSeek = .text:0x8032DFE8; // type:function size:0x94 scope:global -DVDLowWaitCoverClose = .text:0x8032E07C; // type:function size:0x2C scope:global -DVDLowReadDiskID = .text:0x8032E0A8; // type:function size:0xA4 scope:global -DVDLowStopMotor = .text:0x8032E14C; // type:function size:0x8C scope:global -DVDLowRequestError = .text:0x8032E1D8; // type:function size:0x8C scope:global -DVDLowInquiry = .text:0x8032E264; // type:function size:0x9C scope:global -DVDLowAudioStream = .text:0x8032E300; // type:function size:0x98 scope:global -DVDLowRequestAudioStatus = .text:0x8032E398; // type:function size:0x8C scope:global -DVDLowAudioBufferConfig = .text:0x8032E424; // type:function size:0x9C scope:global -DVDLowReset = .text:0x8032E4C0; // type:function size:0xBC scope:global -DVDLowBreak = .text:0x8032E57C; // type:function size:0x14 scope:global -DVDLowClearCallback = .text:0x8032E590; // type:function size:0x1C scope:global -__DVDLowSetWAType = .text:0x8032E5AC; // type:function size:0x44 scope:global -__DVDLowTestAlarm = .text:0x8032E5F0; // type:function size:0x38 scope:global -__VIRetraceHandler = .text:0x8032E628; // type:function size:0x274 scope:local -VISetPreRetraceCallback = .text:0x8032E89C; // type:function size:0x44 scope:global -VISetPostRetraceCallback = .text:0x8032E8E0; // type:function size:0x44 scope:global -getTiming = .text:0x8032E924; // type:function size:0xA8 scope:local -__VIInit = .text:0x8032E9CC; // type:function size:0x204 scope:global -VIInit = .text:0x8032EBD0; // type:function size:0x4B0 scope:global -VIWaitForRetrace = .text:0x8032F080; // type:function size:0x54 scope:global -setFbbRegs = .text:0x8032F0D4; // type:function size:0x2D4 scope:local -setVerticalRegs = .text:0x8032F3A8; // type:function size:0x1A0 scope:local -VIConfigure = .text:0x8032F548; // type:function size:0x808 scope:global -VIFlush = .text:0x8032FD50; // type:function size:0x130 scope:global -VISetNextFrameBuffer = .text:0x8032FE80; // type:function size:0x6C scope:global -VISetBlack = .text:0x8032FEEC; // type:function size:0x7C scope:global -VIGetRetraceCount = .text:0x8032FF68; // type:function size:0x8 scope:global -GetCurrentDisplayPosition = .text:0x8032FF70; // type:function size:0x3C scope:local -getCurrentFieldEvenOdd = .text:0x8032FFAC; // type:function size:0x68 scope:local -VIGetNextField = .text:0x80330014; // type:function size:0x9C scope:global -VIGetCurrentLine = .text:0x803300B0; // type:function size:0x98 scope:global -VIGetTvFormat = .text:0x80330148; // type:function size:0x68 scope:global -VIGetDTVStatus = .text:0x803301B0; // type:function size:0x3C scope:global -__VIDisplayPositionToXY = .text:0x803301EC; // type:function size:0x21C scope:global -__VIGetCurrentPosition = .text:0x80330408; // type:function size:0x60 scope:global -ClampStick = .text:0x80330468; // type:function size:0x130 scope:local -PADClamp = .text:0x80330598; // type:function size:0x114 scope:global -UpdateOrigin = .text:0x803306AC; // type:function size:0x1A4 scope:local -PADOriginCallback = .text:0x80330850; // type:function size:0xC4 scope:local -PADOriginUpdateCallback = .text:0x80330914; // type:function size:0xCC scope:local -PADProbeCallback = .text:0x803309E0; // type:function size:0xD8 scope:local -PADTypeAndStatusCallback = .text:0x80330AB8; // type:function size:0x32C scope:local -PADReceiveCheckCallback = .text:0x80330DE4; // type:function size:0x140 scope:local -PADReset = .text:0x80330F24; // type:function size:0x110 scope:global -PADRecalibrate = .text:0x80331034; // type:function size:0x114 scope:global -PADInit = .text:0x80331148; // type:function size:0x150 scope:global -PADRead = .text:0x80331298; // type:function size:0x300 scope:global -PADControlAllMotors = .text:0x80331598; // type:function size:0xCC scope:global -PADControlMotor = .text:0x80331664; // type:function size:0xB8 scope:global -PADSetSpec = .text:0x8033171C; // type:function size:0x60 scope:global -SPEC0_MakeStatus = .text:0x8033177C; // type:function size:0x174 scope:local -SPEC1_MakeStatus = .text:0x803318F0; // type:function size:0x174 scope:local -SPEC2_MakeStatus = .text:0x80331A64; // type:function size:0x470 scope:local -PADSetAnalogMode = .text:0x80331ED4; // type:function size:0x74 scope:global -OnReset = .text:0x80331F48; // type:function size:0xBC scope:local -SamplingHandler = .text:0x80332004; // type:function size:0x60 scope:local -PADSetSamplingCallback = .text:0x80332064; // type:function size:0x54 scope:global -__PADDisableRecalibration = .text:0x803320B8; // type:function size:0x7C scope:global -AIRegisterDMACallback = .text:0x80332134; // type:function size:0x44 scope:global -AIInitDMA = .text:0x80332178; // type:function size:0x88 scope:global -AIStartDMA = .text:0x80332200; // type:function size:0x18 scope:global -AIStopDMA = .text:0x80332218; // type:function size:0x18 scope:global -AISetStreamPlayState = .text:0x80332230; // type:function size:0xD8 scope:global -AIGetStreamPlayState = .text:0x80332308; // type:function size:0x10 scope:global -AISetDSPSampleRate = .text:0x80332318; // type:function size:0xE0 scope:global -AIGetDSPSampleRate = .text:0x803323F8; // type:function size:0x14 scope:global -__AI_set_stream_sample_rate = .text:0x8033240C; // type:function size:0xD4 scope:local -AIGetStreamSampleRate = .text:0x803324E0; // type:function size:0x10 scope:global -AISetStreamVolLeft = .text:0x803324F0; // type:function size:0x1C scope:global -AIGetStreamVolLeft = .text:0x8033250C; // type:function size:0x10 scope:global -AISetStreamVolRight = .text:0x8033251C; // type:function size:0x1C scope:global -AIGetStreamVolRight = .text:0x80332538; // type:function size:0x10 scope:global -AIInit = .text:0x80332548; // type:function size:0x16C scope:global -__AISHandler = .text:0x803326B4; // type:function size:0x7C scope:local -__AIDHandler = .text:0x80332730; // type:function size:0xAC scope:local -__AICallbackStackSwitch = .text:0x803327DC; // type:function size:0x58 scope:local -__AI_SRC_INIT = .text:0x80332834; // type:function size:0x1E4 scope:local -ARRegisterDMACallback = .text:0x80332A18; // type:function size:0x44 scope:global -ARGetDMAStatus = .text:0x80332A5C; // type:function size:0x3C scope:global -ARStartDMA = .text:0x80332A98; // type:function size:0xF0 scope:global -ARInit = .text:0x80332B88; // type:function size:0xC4 scope:global -ARGetBaseAddress = .text:0x80332C4C; // type:function size:0x8 scope:global -__ARHandler = .text:0x80332C54; // type:function size:0x78 scope:local -__ARClearInterrupt = .text:0x80332CCC; // type:function size:0x20 scope:global -__ARGetInterruptStatus = .text:0x80332CEC; // type:function size:0x10 scope:global -__ARChecksize = .text:0x80332CFC; // type:function size:0x17F4 scope:local -IsCard = .text:0x803344F0; // type:function size:0xCC scope:local -CARDProbeEx = .text:0x803345BC; // type:function size:0x17C scope:global -DoMount = .text:0x80334738; // type:function size:0x454 scope:local -__CARDMountCallback = .text:0x80334B8C; // type:function size:0x138 scope:global -CARDMountAsync = .text:0x80334CC4; // type:function size:0x1A0 scope:global -CARDMount = .text:0x80334E64; // type:function size:0x48 scope:global -DoUnmount = .text:0x80334EAC; // type:function size:0x9C scope:local -CARDUnmount = .text:0x80334F48; // type:function size:0xAC scope:global -CARDSetAttributesAsync = .text:0x80334FF4; // type:function size:0xE4 scope:global -CARDSetAttributes = .text:0x803350D8; // type:function size:0x48 scope:global -__CARDDefaultApiCallback = .text:0x80335120; // type:function size:0x4 scope:global -__CARDSyncCallback = .text:0x80335124; // type:function size:0x34 scope:global -__CARDExtHandler = .text:0x80335158; // type:function size:0xD8 scope:global -__CARDExiHandler = .text:0x80335230; // type:function size:0x118 scope:global -__CARDTxHandler = .text:0x80335348; // type:function size:0xA8 scope:global -__CARDUnlockedHandler = .text:0x803353F0; // type:function size:0x84 scope:global -__CARDEnableInterrupt = .text:0x80335474; // type:function size:0xC0 scope:global -__CARDReadStatus = .text:0x80335534; // type:function size:0xF0 scope:global -__CARDReadVendorID = .text:0x80335624; // type:function size:0xF0 scope:global -__CARDClearStatus = .text:0x80335714; // type:function size:0xAC scope:global -TimeoutHandler = .text:0x803357C0; // type:function size:0xA4 scope:local -Retry = .text:0x80335864; // type:function size:0x2A0 scope:local -UnlockedCallback = .text:0x80335B04; // type:function size:0x110 scope:local -__CARDStart = .text:0x80335C14; // type:function size:0x224 scope:local -__CARDReadSegment = .text:0x80335E38; // type:function size:0x134 scope:global -__CARDWritePage = .text:0x80335F6C; // type:function size:0x13C scope:global -__CARDEraseSector = .text:0x803360A8; // type:function size:0x110 scope:global -CARDInit = .text:0x803361B8; // type:function size:0xAC scope:global -__CARDGetFontEncode = .text:0x80336264; // type:function size:0x8 scope:global -__CARDSetDiskID = .text:0x8033626C; // type:function size:0x38 scope:global -__CARDGetControlBlock = .text:0x803362A4; // type:function size:0xB8 scope:global -__CARDPutControlBlock = .text:0x8033635C; // type:function size:0x64 scope:global -CARDFreeBlocks = .text:0x803363C0; // type:function size:0x150 scope:global -CARDGetSectorSize = .text:0x80336510; // type:function size:0x84 scope:global -__CARDSync = .text:0x80336594; // type:function size:0x98 scope:global -OnReset = .text:0x8033662C; // type:function size:0x50 scope:local -CARDGetFastMode = .text:0x8033667C; // type:function size:0x1C scope:global -bitrev = .text:0x80336698; // type:function size:0x16C scope:local -ReadArrayUnlock = .text:0x80336804; // type:function size:0x144 scope:local -DummyLen = .text:0x80336948; // type:function size:0xC4 scope:local -__CARDUnlock = .text:0x80336A0C; // type:function size:0xB58 scope:global -InitCallback = .text:0x80337564; // type:function size:0x70 scope:local -DoneCallback = .text:0x803375D4; // type:function size:0x324 scope:local -BlockReadCallback = .text:0x803378F8; // type:function size:0xDC scope:local -__CARDRead = .text:0x803379D4; // type:function size:0x64 scope:global -BlockWriteCallback = .text:0x80337A38; // type:function size:0xE8 scope:local -__CARDWrite = .text:0x80337B20; // type:function size:0x68 scope:global -__CARDGetFatBlock = .text:0x80337B88; // type:function size:0x8 scope:global -WriteCallback = .text:0x80337B90; // type:function size:0xD4 scope:local -EraseCallback = .text:0x80337C64; // type:function size:0xC8 scope:local -__CARDAllocBlock = .text:0x80337D2C; // type:function size:0x118 scope:global -__CARDFreeBlock = .text:0x80337E44; // type:function size:0x9C scope:global -__CARDUpdateFatBlock = .text:0x80337EE0; // type:function size:0xAC scope:global -__CARDGetDirBlock = .text:0x80337F8C; // type:function size:0x8 scope:global -WriteCallback = .text:0x80337F94; // type:function size:0xD0 scope:local -EraseCallback = .text:0x80338064; // type:function size:0xC8 scope:local -__CARDUpdateDir = .text:0x8033812C; // type:function size:0xC4 scope:global -__CARDCheckSum = .text:0x803381F0; // type:function size:0x1B0 scope:global -VerifyID = .text:0x803383A0; // type:function size:0x284 scope:local -VerifyDir = .text:0x80338624; // type:function size:0x240 scope:local -VerifyFAT = .text:0x80338864; // type:function size:0x284 scope:local -__CARDVerify = .text:0x80338AE8; // type:function size:0x8C scope:global -CARDCheckExAsync = .text:0x80338B74; // type:function size:0x590 scope:global -CARDCheck = .text:0x80339104; // type:function size:0x54 scope:global -__CARDGetStatusEx = .text:0x80339158; // type:function size:0xA4 scope:global -__CARDSetStatusExAsync = .text:0x803391FC; // type:function size:0x29C scope:global -__CARDCompareFileName = .text:0x80339498; // type:function size:0x68 scope:global -__CARDAccess = .text:0x80339500; // type:function size:0x94 scope:global -__CARDIsWritable = .text:0x80339594; // type:function size:0x134 scope:global -__CARDIsReadable = .text:0x803396C8; // type:function size:0xF4 scope:global -__CARDGetFileNo = .text:0x803397BC; // type:function size:0x150 scope:global -CARDFastOpen = .text:0x8033990C; // type:function size:0x104 scope:global -CARDOpen = .text:0x80339A10; // type:function size:0x11C scope:global -CARDClose = .text:0x80339B2C; // type:function size:0x54 scope:global -__CARDIsOpened = .text:0x80339B80; // type:function size:0x8 scope:global -__GXDefaultTexRegionCallback = .text:0x80339B88; // type:function size:0xFC scope:local -__GXDefaultTlutRegionCallback = .text:0x80339C84; // type:function size:0x24 scope:local -__GXShutdown = .text:0x80339CA8; // type:function size:0x190 scope:local -__GXInitRevisionBits = .text:0x80339E38; // type:function size:0x1A4 scope:global -GXInit = .text:0x80339FDC; // type:function size:0x600 scope:global -__GXInitGX = .text:0x8033A5DC; // type:function size:0x938 scope:global -GXCPInterruptHandler = .text:0x8033AF14; // type:function size:0x134 scope:local -GXInitFifoBase = .text:0x8033B048; // type:function size:0x6C scope:global -GXInitFifoPtrs = .text:0x8033B0B4; // type:function size:0x70 scope:global -GXInitFifoLimits = .text:0x8033B124; // type:function size:0xC scope:global -GXSetCPUFifo = .text:0x8033B130; // type:function size:0x128 scope:global -GXSetGPFifo = .text:0x8033B258; // type:function size:0x1A0 scope:global -GXSaveCPUFifo = .text:0x8033B3F8; // type:function size:0x34 scope:global -__GXSaveCPUFifoAux = .text:0x8033B42C; // type:function size:0xC8 scope:global -GXGetGPStatus = .text:0x8033B4F4; // type:function size:0x50 scope:global -GXSetBreakPtCallback = .text:0x8033B544; // type:function size:0x44 scope:global -__GXFifoInit = .text:0x8033B588; // type:function size:0x4C scope:global -__GXFifoReadEnable = .text:0x8033B5D4; // type:function size:0x24 scope:local -__GXFifoReadDisable = .text:0x8033B5F8; // type:function size:0x24 scope:local -__GXFifoLink = .text:0x8033B61C; // type:function size:0x34 scope:local -__GXWriteFifoIntEnable = .text:0x8033B650; // type:function size:0x30 scope:local -__GXWriteFifoIntReset = .text:0x8033B680; // type:function size:0x30 scope:local -GXGetCPUFifo = .text:0x8033B6B0; // type:function size:0x8 scope:global -GXGetGPFifo = .text:0x8033B6B8; // type:function size:0x8 scope:global -GXSetVtxDesc = .text:0x8033B6C0; // type:function size:0x26C scope:global -GXSetVtxDescv = .text:0x8033B92C; // type:function size:0x288 scope:global -__GXSetVCD = .text:0x8033BBB4; // type:function size:0xBC scope:global -__GXCalculateVLim = .text:0x8033BC70; // type:function size:0x124 scope:global -GXGetVtxDesc = .text:0x8033BD94; // type:function size:0x1B4 scope:global -GXClearVtxDesc = .text:0x8033BF48; // type:function size:0x38 scope:global -GXSetVtxAttrFmt = .text:0x8033BF80; // type:function size:0x25C scope:global -GXSetVtxAttrFmtv = .text:0x8033C1DC; // type:function size:0x280 scope:global -__GXSetVAT = .text:0x8033C45C; // type:function size:0x88 scope:global -GXGetVtxAttrFmt = .text:0x8033C4E4; // type:function size:0x280 scope:global -GXSetArray = .text:0x8033C764; // type:function size:0x44 scope:global -GXInvalidateVtxCache = .text:0x8033C7A8; // type:function size:0x10 scope:global -GXSetTexCoordGen2 = .text:0x8033C7B8; // type:function size:0x280 scope:global -GXSetNumTexGens = .text:0x8033CA38; // type:function size:0x3C scope:global -GXSetMisc = .text:0x8033CA74; // type:function size:0x94 scope:global -GXFlush = .text:0x8033CB08; // type:function size:0x5C scope:global -GXResetWriteGatherPipe = .text:0x8033CB64; // type:function size:0x34 scope:global -__GXAbort = .text:0x8033CB98; // type:function size:0x16C scope:global -GXSetDrawSync = .text:0x8033CD04; // type:function size:0xB4 scope:global -GXReadDrawSync = .text:0x8033CDB8; // type:function size:0xC scope:global -GXSetDrawDone = .text:0x8033CDC4; // type:function size:0x98 scope:global -GXDrawDone = .text:0x8033CE5C; // type:function size:0x80 scope:global -GXPixModeSync = .text:0x8033CEDC; // type:function size:0x24 scope:global -GXPokeAlphaMode = .text:0x8033CF00; // type:function size:0x14 scope:global -GXPokeAlphaRead = .text:0x8033CF14; // type:function size:0x20 scope:global -GXPokeAlphaUpdate = .text:0x8033CF34; // type:function size:0x18 scope:global -GXPokeBlendMode = .text:0x8033CF4C; // type:function size:0x64 scope:global -GXPokeColorUpdate = .text:0x8033CFB0; // type:function size:0x18 scope:global -GXPokeDstAlpha = .text:0x8033CFC8; // type:function size:0x24 scope:global -GXPokeDither = .text:0x8033CFEC; // type:function size:0x18 scope:global -GXPokeZMode = .text:0x8033D004; // type:function size:0x20 scope:global -GXSetDrawSyncCallback = .text:0x8033D024; // type:function size:0x44 scope:global -GXTokenInterruptHandler = .text:0x8033D068; // type:function size:0x88 scope:local -GXSetDrawDoneCallback = .text:0x8033D0F0; // type:function size:0x44 scope:global -GXFinishInterruptHandler = .text:0x8033D134; // type:function size:0x80 scope:local -__GXPEInit = .text:0x8033D1B4; // type:function size:0x74 scope:global -__GXSetDirtyState = .text:0x8033D228; // type:function size:0x80 scope:global -GXBegin = .text:0x8033D2A8; // type:function size:0xD0 scope:global -__GXSendFlushPrim = .text:0x8033D378; // type:function size:0x88 scope:global -GXSetLineWidth = .text:0x8033D400; // type:function size:0x40 scope:global -GXSetPointSize = .text:0x8033D440; // type:function size:0x40 scope:global -GXEnableTexOffsets = .text:0x8033D480; // type:function size:0x48 scope:global -GXSetCullMode = .text:0x8033D4C8; // type:function size:0x28 scope:global -GXSetCoPlanar = .text:0x8033D4F0; // type:function size:0x34 scope:global -__GXSetGenMode = .text:0x8033D524; // type:function size:0x24 scope:global -GXAdjustForOverscan = .text:0x8033D548; // type:function size:0x144 scope:global -GXSetDispCopySrc = .text:0x8033D68C; // type:function size:0x7C scope:global -GXSetTexCopySrc = .text:0x8033D708; // type:function size:0x7C scope:global -GXSetDispCopyDst = .text:0x8033D784; // type:function size:0x34 scope:global -GXSetTexCopyDst = .text:0x8033D7B8; // type:function size:0x130 scope:global -GXSetDispCopyFrame2Field = .text:0x8033D8E8; // type:function size:0x24 scope:global -GXSetCopyClamp = .text:0x8033D90C; // type:function size:0x58 scope:global -GXSetDispCopyYScale = .text:0x8033D964; // type:function size:0xCC scope:global -GXSetCopyClear = .text:0x8033DA30; // type:function size:0x78 scope:global -GXSetCopyFilter = .text:0x8033DAA8; // type:function size:0x208 scope:global -GXSetDispCopyGamma = .text:0x8033DCB0; // type:function size:0x14 scope:global -GXCopyDisp = .text:0x8033DCC4; // type:function size:0x168 scope:global -GXCopyTex = .text:0x8033DE2C; // type:function size:0x18C scope:global -GXClearBoundingBox = .text:0x8033DFB8; // type:function size:0x38 scope:global -GXInitLightAttnA = .text:0x8033DFF0; // type:function size:0x10 scope:global -GXInitLightAttnK = .text:0x8033E000; // type:function size:0x10 scope:global -GXInitLightSpot = .text:0x8033E010; // type:function size:0x190 scope:global -GXInitLightPos = .text:0x8033E1A0; // type:function size:0x10 scope:global -GXInitLightDir = .text:0x8033E1B0; // type:function size:0x1C scope:global -GXInitLightColor = .text:0x8033E1CC; // type:function size:0xC scope:global -GXLoadLightObjImm = .text:0x8033E1D8; // type:function size:0x7C scope:global -GXSetChanAmbColor = .text:0x8033E254; // type:function size:0xE8 scope:global -GXSetChanMatColor = .text:0x8033E33C; // type:function size:0xE8 scope:global -GXSetNumChans = .text:0x8033E424; // type:function size:0x3C scope:global -GXSetChanCtrl = .text:0x8033E460; // type:function size:0xB0 scope:global -__GXGetTexTileShift = .text:0x8033E510; // type:function size:0x64 scope:local -GXGetTexBufferSize = .text:0x8033E574; // type:function size:0x15C scope:global -__GetImageTileCount = .text:0x8033E6D0; // type:function size:0xC8 scope:global -GXInitTexObj = .text:0x8033E798; // type:function size:0x24C scope:global -GXInitTexObjCI = .text:0x8033E9E4; // type:function size:0x48 scope:global -GXInitTexObjLOD = .text:0x8033EA2C; // type:function size:0x164 scope:global -GXGetTexObjData = .text:0x8033EB90; // type:function size:0xC scope:global -GXGetTexObjWidth = .text:0x8033EB9C; // type:function size:0x10 scope:global -GXGetTexObjHeight = .text:0x8033EBAC; // type:function size:0x10 scope:global -GXGetTexObjFmt = .text:0x8033EBBC; // type:function size:0x8 scope:global -GXGetTexObjMipMap = .text:0x8033EBC4; // type:function size:0x18 scope:global -GXLoadTexObjPreLoaded = .text:0x8033EBDC; // type:function size:0x17C scope:global -GXLoadTexObj = .text:0x8033ED58; // type:function size:0x54 scope:global -GXInitTlutObj = .text:0x8033EDAC; // type:function size:0x38 scope:global -GXLoadTlut = .text:0x8033EDE4; // type:function size:0x98 scope:global -GXInitTexCacheRegion = .text:0x8033EE7C; // type:function size:0xF4 scope:global -GXInitTlutRegion = .text:0x8033EF70; // type:function size:0x38 scope:global -GXInvalidateTexAll = .text:0x8033EFA8; // type:function size:0x48 scope:global -GXSetTexRegionCallback = .text:0x8033EFF0; // type:function size:0x14 scope:global -GXSetTlutRegionCallback = .text:0x8033F004; // type:function size:0x14 scope:global -__SetSURegs = .text:0x8033F018; // type:function size:0xA0 scope:local -__GXSetSUTexRegs = .text:0x8033F0B8; // type:function size:0x17C scope:global -__GXSetTmemConfig = .text:0x8033F234; // type:function size:0x354 scope:global -GXSetTevIndirect = .text:0x8033F588; // type:function size:0x6C scope:global -GXSetIndTexMtx = .text:0x8033F5F4; // type:function size:0x178 scope:global -GXSetIndTexCoordScale = .text:0x8033F76C; // type:function size:0x144 scope:global -GXSetIndTexOrder = .text:0x8033F8B0; // type:function size:0xEC scope:global -GXSetNumIndStages = .text:0x8033F99C; // type:function size:0x24 scope:global -GXSetTevDirect = .text:0x8033F9C0; // type:function size:0x48 scope:global -GXSetTevIndRepeat = .text:0x8033FA08; // type:function size:0x48 scope:global -__GXUpdateBPMask = .text:0x8033FA50; // type:function size:0x4 scope:global -__GXSetIndirectMask = .text:0x8033FA54; // type:function size:0x30 scope:global -__GXFlushTextureState = .text:0x8033FA84; // type:function size:0x24 scope:global -GXSetTevOp = .text:0x8033FAA8; // type:function size:0x8C scope:global -GXSetTevColorIn = .text:0x8033FB34; // type:function size:0x44 scope:global -GXSetTevAlphaIn = .text:0x8033FB78; // type:function size:0x44 scope:global -GXSetTevColorOp = .text:0x8033FBBC; // type:function size:0x68 scope:global -GXSetTevAlphaOp = .text:0x8033FC24; // type:function size:0x68 scope:global -GXSetTevKColor = .text:0x8033FC8C; // type:function size:0x64 scope:global -GXSetTevKColorSel = .text:0x8033FCF0; // type:function size:0x5C scope:global -GXSetTevKAlphaSel = .text:0x8033FD4C; // type:function size:0x5C scope:global -GXSetTevSwapMode = .text:0x8033FDA8; // type:function size:0x48 scope:global -GXSetTevSwapModeTable = .text:0x8033FDF0; // type:function size:0x80 scope:global -GXSetAlphaCompare = .text:0x8033FE70; // type:function size:0x44 scope:global -GXSetZTexture = .text:0x8033FEB4; // type:function size:0x8C scope:global -GXSetTevOrder = .text:0x8033FF40; // type:function size:0x19C scope:global -GXSetNumTevStages = .text:0x803400DC; // type:function size:0x28 scope:global -GXSetFog = .text:0x80340104; // type:function size:0x214 scope:global -GXSetFogRangeAdj = .text:0x80340318; // type:function size:0x124 scope:global -GXSetBlendMode = .text:0x8034043C; // type:function size:0x54 scope:global -GXSetColorUpdate = .text:0x80340490; // type:function size:0x2C scope:global -GXSetAlphaUpdate = .text:0x803404BC; // type:function size:0x2C scope:global -GXSetZMode = .text:0x803404E8; // type:function size:0x34 scope:global -GXSetZCompLoc = .text:0x8034051C; // type:function size:0x34 scope:global -GXSetPixelFmt = .text:0x80340550; // type:function size:0xD4 scope:global -GXSetDither = .text:0x80340624; // type:function size:0x2C scope:global -GXSetDstAlpha = .text:0x80340650; // type:function size:0x3C scope:global -GXSetFieldMask = .text:0x8034068C; // type:function size:0x38 scope:global -GXSetFieldMode = .text:0x803406C4; // type:function size:0x78 scope:global -GXBeginDisplayList = .text:0x8034073C; // type:function size:0xCC scope:global -GXEndDisplayList = .text:0x80340808; // type:function size:0xC4 scope:global -GXCallDisplayList = .text:0x803408CC; // type:function size:0x70 scope:global -GXSetProjection = .text:0x8034093C; // type:function size:0xA4 scope:global -GXSetProjectionv = .text:0x803409E0; // type:function size:0x8C scope:global -GXLoadPosMtxImm = .text:0x80340A6C; // type:function size:0x50 scope:global -GXLoadNrmMtxImm = .text:0x80340ABC; // type:function size:0x50 scope:global -GXSetCurrentMtx = .text:0x80340B0C; // type:function size:0x34 scope:global -GXLoadTexMtxImm = .text:0x80340B40; // type:function size:0xB4 scope:global -__GXSetViewport = .text:0x80340BF4; // type:function size:0x90 scope:global -GXSetViewportJitter = .text:0x80340C84; // type:function size:0x58 scope:global -GXSetViewport = .text:0x80340CDC; // type:function size:0x48 scope:global -GXSetScissor = .text:0x80340D24; // type:function size:0x78 scope:global -GXSetScissorBoxOffset = .text:0x80340D9C; // type:function size:0x40 scope:global -GXSetClipMode = .text:0x80340DDC; // type:function size:0x28 scope:global -__GXSetMatrixIndex = .text:0x80340E04; // type:function size:0x84 scope:global -GXSetGPMetric = .text:0x80340E88; // type:function size:0x848 scope:global -GXReadGPMetric = .text:0x803416D0; // type:function size:0x1A8 scope:global -GXClearGPMetric = .text:0x80341878; // type:function size:0x10 scope:global -GXReadPixMetric = .text:0x80341888; // type:function size:0x138 scope:global -GXClearPixMetric = .text:0x803419C0; // type:function size:0x30 scope:global -GXReadXfRasMetric = .text:0x803419F0; // type:function size:0xC4 scope:global -SetExiInterruptMask = .text:0x80341AB4; // type:function size:0xF4 scope:local -EXIImm = .text:0x80341BA8; // type:function size:0x25C scope:global -EXIImmEx = .text:0x80341E04; // type:function size:0xA0 scope:global -EXIDma = .text:0x80341EA4; // type:function size:0xEC scope:global -EXISync = .text:0x80341F90; // type:function size:0x24C scope:global -EXIClearInterrupts = .text:0x803421DC; // type:function size:0x48 scope:global -EXISetExiCallback = .text:0x80342224; // type:function size:0x7C scope:global -__EXIProbe = .text:0x803422A0; // type:function size:0x174 scope:local -EXIProbe = .text:0x80342414; // type:function size:0x80 scope:global -EXIProbeEx = .text:0x80342494; // type:function size:0xB4 scope:global -EXIAttach = .text:0x80342548; // type:function size:0x10C scope:global -EXIDetach = .text:0x80342654; // type:function size:0xBC scope:global -EXISelect = .text:0x80342710; // type:function size:0x12C scope:global -EXIDeselect = .text:0x8034283C; // type:function size:0x110 scope:global -EXIIntrruptHandler = .text:0x8034294C; // type:function size:0xC8 scope:local -TCIntrruptHandler = .text:0x80342A14; // type:function size:0x218 scope:local -EXTIntrruptHandler = .text:0x80342C2C; // type:function size:0xD0 scope:local -EXIInit = .text:0x80342CFC; // type:function size:0x1D4 scope:global -EXILock = .text:0x80342ED0; // type:function size:0xF4 scope:global -EXIUnlock = .text:0x80342FC4; // type:function size:0xDC scope:global -EXIGetState = .text:0x803430A0; // type:function size:0x18 scope:global -UnlockedHandler = .text:0x803430B8; // type:function size:0x28 scope:local -EXIGetID = .text:0x803430E0; // type:function size:0x3B0 scope:global -ProbeBarnacle = .text:0x80343490; // type:function size:0x18C scope:local -__OSEnableBarnacle = .text:0x8034361C; // type:function size:0x1BC scope:global -InitializeUART = .text:0x803437D8; // type:function size:0x70 scope:global -WriteUARTN = .text:0x80343848; // type:function size:0x200 scope:global -SIBusy = .text:0x80343A48; // type:function size:0x20 scope:global -SIIsChanBusy = .text:0x80343A68; // type:function size:0x3C scope:global -CompleteTransfer = .text:0x80343AA4; // type:function size:0x2FC scope:local -SIInterruptHandler = .text:0x80343DA0; // type:function size:0x344 scope:local -SIEnablePollingInterrupt = .text:0x803440E4; // type:function size:0x98 scope:local -SIRegisterPollingHandler = .text:0x8034417C; // type:function size:0xCC scope:global -SIUnregisterPollingHandler = .text:0x80344248; // type:function size:0xF4 scope:global -SIInit = .text:0x8034433C; // type:function size:0xB4 scope:global -__SITransfer = .text:0x803443F0; // type:function size:0x20C scope:local -SIGetStatus = .text:0x803445FC; // type:function size:0x7C scope:global -SISetCommand = .text:0x80344678; // type:function size:0x14 scope:global -SITransferCommands = .text:0x8034468C; // type:function size:0x10 scope:global -SISetXY = .text:0x8034469C; // type:function size:0x6C scope:global -SIEnablePolling = .text:0x80344708; // type:function size:0x9C scope:global -SIDisablePolling = .text:0x803447A4; // type:function size:0x6C scope:global -SIGetResponseRaw = .text:0x80344810; // type:function size:0xD4 scope:local -SIGetResponse = .text:0x803448E4; // type:function size:0xC4 scope:global -AlarmHandler = .text:0x803449A8; // type:function size:0x8C scope:local -SITransfer = .text:0x80344A34; // type:function size:0x16C scope:global -GetTypeCallback = .text:0x80344BA0; // type:function size:0x298 scope:local -SIGetType = .text:0x80344E38; // type:function size:0x1C4 scope:global -SIGetTypeAsync = .text:0x80344FFC; // type:function size:0x13C scope:global -SIDecodeType = .text:0x80345138; // type:function size:0x14C scope:global -SIProbe = .text:0x80345284; // type:function size:0x24 scope:global -SISetSamplingRate = .text:0x803452A8; // type:function size:0xE4 scope:global -SIRefreshSamplingRate = .text:0x8034538C; // type:function size:0x24 scope:global -DefaultCallback = .text:0x803453B0; // type:function size:0x4 scope:local -ResetProc = .text:0x803453B4; // type:function size:0x48 scope:local -SIResetSteeringAsync = .text:0x803453FC; // type:function size:0xB4 scope:global -OnReset = .text:0x803454B0; // type:function size:0xB4 scope:local -__SISteeringHandler = .text:0x80345564; // type:function size:0xF0 scope:local -TypeAndStatusCallback = .text:0x80345654; // type:function size:0x11C scope:local -__SISteeringTransfer = .text:0x80345770; // type:function size:0x74 scope:global -__SISteeringEnable = .text:0x803457E4; // type:function size:0x68 scope:global -__SISteeringDisable = .text:0x8034584C; // type:function size:0x40 scope:global -SIReadSteering = .text:0x8034588C; // type:function size:0x170 scope:global -SamplingHandler = .text:0x803459FC; // type:function size:0x60 scope:local -SISetSteeringSamplingCallback = .text:0x80345A5C; // type:function size:0x54 scope:global -SIControlSteering = .text:0x80345AB0; // type:function size:0xA0 scope:global -DBClose = .text:0x80345B50; // type:function size:0x4 scope:global -DBOpen = .text:0x80345B54; // type:function size:0x4 scope:global -DBWrite = .text:0x80345B58; // type:function size:0x260 scope:global -DBRead = .text:0x80345DB8; // type:function size:0x8C scope:global -DBQueryData = .text:0x80345E44; // type:function size:0x9C scope:global -DBInitInterrupts = .text:0x80345EE0; // type:function size:0x54 scope:global -DBInitComm = .text:0x80345F34; // type:function size:0x78 scope:global -DBGHandler = .text:0x80345FAC; // type:function size:0x40 scope:local -MWCallback = .text:0x80345FEC; // type:function size:0x3C scope:local -DBGReadStatus = .text:0x80346028; // type:function size:0xAC scope:local -DBGWrite = .text:0x803460D4; // type:function size:0xDC scope:local -DBGRead = .text:0x803461B0; // type:function size:0xDC scope:local -DBGReadMailbox = .text:0x8034628C; // type:function size:0xAC scope:local -DBGEXIImm = .text:0x80346338; // type:function size:0x298 scope:local -EXI2_CallBack = .text:0x803465D0; // type:function size:0x40 scope:local -EXI2_Init = .text:0x80346610; // type:function size:0xBC scope:global -EXI2_EnableInterrupts = .text:0x803466CC; // type:function size:0x2C scope:global -EXI2_Poll = .text:0x803466F8; // type:function size:0x108 scope:global -EXI2_ReadN = .text:0x80346800; // type:function size:0x2BC scope:global -EXI2_WriteN = .text:0x80346ABC; // type:function size:0x1B0 scope:global -EXI2_Reserve = .text:0x80346C6C; // type:function size:0x4 scope:global -EXI2_Unreserve = .text:0x80346C70; // type:function size:0x4 scope:global -AmcEXIImm = .text:0x80346C74; // type:function size:0x244 scope:global -AmcEXISync = .text:0x80346EB8; // type:function size:0x198 scope:global -AmcEXIClearInterrupts = .text:0x80347050; // type:function size:0x40 scope:global -AmcEXISetExiCallback = .text:0x80347090; // type:function size:0x6C scope:global -AmcEXISelect = .text:0x803470FC; // type:function size:0x80 scope:global -AmcEXIDeselect = .text:0x8034717C; // type:function size:0x68 scope:global -AmcDebugIntHandler = .text:0x803471E4; // type:function size:0x50 scope:local -AmcEXIEnableInterrupts = .text:0x80347234; // type:function size:0x40 scope:global -AmcEXIInit = .text:0x80347274; // type:function size:0x40 scope:global -gcc2_compiled. = .text:0x803472B4; // type:label scope:local -__Q24RCMP9AV_PLAYERPCciQ34RCMP9AV_PLAYER9LOAD_ENUMQ34RCMP9AV_PLAYER10SOUND_ENUM = .text:0x803472B4; // type:function size:0x98 scope:global -Init__Q24RCMP9AV_PLAYERPCciiiT1iiiQ34RCMP9AV_PLAYER9LOAD_ENUMQ34RCMP9AV_PLAYER10SOUND_ENUM = .text:0x8034734C; // type:function size:0x438 scope:global -_._Q24RCMP9AV_PLAYER = .text:0x80347784; // type:function size:0x1C8 scope:global -GetFirstFrame__Q24RCMP9AV_PLAYERUii = .text:0x8034794C; // type:function size:0x290 scope:global -GetFrame__Q24RCMP9AV_PLAYERf = .text:0x80347BDC; // type:function size:0x84 scope:global -IsTimeForDecode__Q24RCMP9AV_PLAYER = .text:0x80347C60; // type:function size:0x9C scope:global -IsAudioFinished__Q24RCMP9AV_PLAYER = .text:0x80347CFC; // type:function size:0x34 scope:global -SetSpeed__Q24RCMP9AV_PLAYERUi = .text:0x80347D30; // type:function size:0xFC scope:global -Pause__Q24RCMP9AV_PLAYER = .text:0x80347E2C; // type:function size:0x24 scope:global -UnPause__Q24RCMP9AV_PLAYER = .text:0x80347E50; // type:function size:0x24 scope:global -SetVol__Q24RCMP9AV_PLAYERUi = .text:0x80347E74; // type:function size:0x34 scope:global -SyncedAudioTime__Q24RCMP9AV_PLAYER = .text:0x80347EA8; // type:function size:0x128 scope:global -GetRCMPChunk__Q24RCMP9AV_PLAYERPQ24RCMP7DECODERPPQ24RCMP5CHUNK = .text:0x80347FD0; // type:function size:0x21C scope:global -StaticGetRCMPChunk__Q24RCMP9AV_PLAYERPQ24RCMP7DECODERPQ24RCMP8STREAMERPPQ24RCMP5CHUNK = .text:0x803481EC; // type:function size:0x2C scope:global -ReleaseRCMPChunk__Q24RCMP9AV_PLAYERPQ24RCMP5CHUNK = .text:0x80348218; // type:function size:0x28 scope:global -StaticReleaseRCMPChunk__Q24RCMP9AV_PLAYERPQ24RCMP7DECODERPQ24RCMP8STREAMERPQ24RCMP5CHUNK = .text:0x80348240; // type:function size:0x28 scope:global -Update__Q24RCMP11AV_MS_TIMER = .text:0x80348268; // type:function size:0xCC scope:global -gcc2_compiled. = .text:0x80348334; // type:label scope:local -__Q24RCMP12AUDIO_PLAYERii = .text:0x80348334; // type:function size:0xE8 scope:global -_._Q24RCMP12AUDIO_PLAYER = .text:0x8034841C; // type:function size:0x78 scope:global -SetSpeed__Q24RCMP12AUDIO_PLAYERUi = .text:0x80348494; // type:function size:0x5C scope:global -StartSound__Q24RCMP12AUDIO_PLAYER = .text:0x803484F0; // type:function size:0x58 scope:global -SetVol__Q24RCMP12AUDIO_PLAYERUi = .text:0x80348548; // type:function size:0x88 scope:global -IsAudioFinished__Q24RCMP12AUDIO_PLAYER = .text:0x803485D0; // type:function size:0x70 scope:global -gcc2_compiled. = .text:0x80348640; // type:label scope:local -DELETE_tBigYUVSwizzler__FP15tBigYUVSwizzler = .text:0x80348640; // type:function size:0x4C scope:global -NEW_tBigYUVSwizzlerTexture__FP9_GXTexObjN20 = .text:0x8034868C; // type:function size:0x1C8 scope:global -tBigYUVSwizzler_DrawSetup__FP15tBigYUVSwizzlerP9_GXTexObjN21 = .text:0x80348854; // type:function size:0x690 scope:global -gcc2_compiled. = .text:0x80348EE4; // type:label scope:local -CON_tTileSize2d__FP11tTileSize2dUlUlUlUl = .text:0x80348EE4; // type:function size:0x3C scope:local -CON_tPixAdr2d__FP9tPixAdr2dUlUlP11tTileSize2d = .text:0x80348F20; // type:function size:0x78 scope:local -GC_swizzleGetPixelOffset16__Fiii = .text:0x80348F98; // type:function size:0x30 scope:local -DELETE_tBigSwizzler__FP12tBigSwizzler = .text:0x80348FC8; // type:function size:0x60 scope:global -NEW_tBigSwizzlerTexture__FP9_GXTexObj = .text:0x80349028; // type:function size:0x374 scope:global -gcc2_compiled. = .text:0x8034939C; // type:label scope:local -__Q24RCMP11RCMP_SYSTEM = .text:0x8034939C; // type:function size:0x20 scope:global -__Q24RCMP7DECODERPCQ24RCMP11CODEC_IDATA = .text:0x803493BC; // type:function size:0x74 scope:global -_._Q24RCMP7DECODER = .text:0x80349430; // type:function size:0x58 scope:global -ChooseCodec__Q24RCMP7DECODERPQ24RCMP5CODECPQ24RCMP5CHUNK = .text:0x80349488; // type:function size:0x48 scope:global -FreeChosenCodec__Q24RCMP7DECODER = .text:0x803494D0; // type:function size:0x58 scope:global -GetCurrentFrameNumber__Q24RCMP7DECODER = .text:0x80349528; // type:function size:0x48 scope:global -GetFrameRate__Q24RCMP7DECODER = .text:0x80349570; // type:function size:0x4C scope:global -GetFrame__Q24RCMP7DECODERUi = .text:0x803495BC; // type:function size:0x8C scope:global -ReleaseFrame__Q24RCMP7DECODERPQ24RCMP5FRAME = .text:0x80349648; // type:function size:0x38 scope:global -GetChunk__Q24RCMP7DECODER = .text:0x80349680; // type:function size:0x58 scope:global -ReleaseChunk__Q24RCMP7DECODERPQ24RCMP5CHUNK = .text:0x803496D8; // type:function size:0x34 scope:global -__Q24RCMP5CHUNK = .text:0x8034970C; // type:function size:0x18 scope:global -__Q24RCMP11CODEC_IDATA = .text:0x80349724; // type:function size:0x20 scope:global -__Q24RCMP11CODEC_IDATAPQ24RCMP8STREAMERPFPQ24RCMP7DECODERPQ24RCMP8STREAMERPPQ24RCMP5CHUNK_vPFPQ24RCMP7DECODERPQ24RCMP8STREAMERPQ24RCMP5CHUNK_vUi = .text:0x80349744; // type:function size:0x18 scope:global -__static_initialization_and_destruction_0 = .text:0x8034975C; // type:function size:0x54 scope:local -_._Q24RCMP11RCMP_SYSTEM = .text:0x803497B0; // type:function size:0x34 scope:global -_GLOBAL_.I.__Q24RCMP11RCMP_SYSTEM = .text:0x803497E4; // type:function size:0x2C scope:local -_GLOBAL_.D.__Q24RCMP11RCMP_SYSTEM = .text:0x80349810; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x8034983C; // type:label scope:local -GetChunkType__FPQ24RCMP5CHUNK = .text:0x8034983C; // type:function size:0x20 scope:local -__9VP6_FRAMEUiUi = .text:0x8034985C; // type:function size:0x88 scope:global -_._9VP6_FRAME = .text:0x803498E4; // type:function size:0x6C scope:global -__18VP6_CODEC_INTERNAL = .text:0x80349950; // type:function size:0xBC scope:global -_._18VP6_CODEC_INTERNAL = .text:0x80349A0C; // type:function size:0x148 scope:global -Init__18VP6_CODEC_INTERNALPQ24RCMP7DECODERPQ24RCMP5CHUNK = .text:0x80349B54; // type:function size:0x18 scope:global -GetCurrentFrameNumber__18VP6_CODEC_INTERNAL = .text:0x80349B6C; // type:function size:0x8 scope:global -GetFrameRate__18VP6_CODEC_INTERNAL = .text:0x80349B74; // type:function size:0x8 scope:global -GetFrame__18VP6_CODEC_INTERNALUi = .text:0x80349B7C; // type:function size:0x2B4 scope:global -ReleaseFrame__18VP6_CODEC_INTERNALPQ24RCMP5FRAME = .text:0x80349E30; // type:function size:0x60 scope:global -DecodeChunk__18VP6_CODEC_INTERNALPQ24RCMP5CHUNK = .text:0x80349E90; // type:function size:0xEC scope:global -GetFrameFromList__18VP6_CODEC_INTERNAL = .text:0x80349F7C; // type:function size:0xA4 scope:global -GetNextChunk__18VP6_CODEC_INTERNALPPQ24RCMP5CHUNK = .text:0x8034A020; // type:function size:0x44 scope:global -ReleaseChunk__18VP6_CODEC_INTERNALPQ24RCMP5CHUNK = .text:0x8034A064; // type:function size:0x2C scope:global -VP6_CODEC_create__4RCMPv = .text:0x8034A090; // type:function size:0x4C scope:global -__static_initialization_and_destruction_0 = .text:0x8034A0DC; // type:function size:0x5C scope:local -_._Q24RCMP5CODEC = .text:0x8034A138; // type:function size:0x40 scope:global -Alloc__11MyAllocatorUiRCQ22EA12TagValuePair = .text:0x8034A178; // type:function size:0x88 scope:global -Free__11MyAllocatorPvUi = .text:0x8034A200; // type:function size:0x44 scope:global -AddRef__11MyAllocator = .text:0x8034A244; // type:function size:0x14 scope:global -Release__11MyAllocator = .text:0x8034A258; // type:function size:0x64 scope:global -_._11MyAllocator = .text:0x8034A2BC; // type:function size:0x34 scope:global -_GLOBAL_.I.__9VP6_FRAMEUiUi = .text:0x8034A2F0; // type:function size:0x2C scope:local -_GLOBAL_.D.__9VP6_FRAMEUiUi = .text:0x8034A31C; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x8034A348; // type:label scope:local -VP6_CODEC_is_head_chunk_for_codec__4RCMPUi = .text:0x8034A348; // type:function size:0x18 scope:global -VP6_CODEC_is_chunk_for_codec__4RCMPUi = .text:0x8034A360; // type:function size:0x30 scope:global -gcc2_compiled. = .text:0x8034A390; // type:label scope:local -GetChunkType__FPQ24RCMP5CHUNK = .text:0x8034A390; // type:function size:0x20 scope:local -__9MAD_FRAMEUiUi = .text:0x8034A3B0; // type:function size:0x84 scope:global -_._9MAD_FRAME = .text:0x8034A434; // type:function size:0x6C scope:global -__18MAD_CODEC_INTERNAL = .text:0x8034A4A0; // type:function size:0x58 scope:global -_._18MAD_CODEC_INTERNAL = .text:0x8034A4F8; // type:function size:0x138 scope:global -Init__18MAD_CODEC_INTERNALPQ24RCMP7DECODERPQ24RCMP5CHUNK = .text:0x8034A630; // type:function size:0x1C scope:global -GetCurrentFrameNumber__18MAD_CODEC_INTERNAL = .text:0x8034A64C; // type:function size:0x8 scope:global -GetFrameRate__18MAD_CODEC_INTERNAL = .text:0x8034A654; // type:function size:0x8 scope:global -GetNextChunk__18MAD_CODEC_INTERNALPPQ24RCMP5CHUNK = .text:0x8034A65C; // type:function size:0x44 scope:global -ReleaseChunk__18MAD_CODEC_INTERNALPQ24RCMP5CHUNK = .text:0x8034A6A0; // type:function size:0x2C scope:global -DecodeChunk__18MAD_CODEC_INTERNALPQ24RCMP5CHUNK = .text:0x8034A6CC; // type:function size:0x3C4 scope:global -GetFrame__18MAD_CODEC_INTERNALUi = .text:0x8034AA90; // type:function size:0x12C scope:global -CreateKorM__18MAD_CODEC_INTERNAL = .text:0x8034ABBC; // type:function size:0xA4 scope:global -CreateE__18MAD_CODEC_INTERNAL = .text:0x8034AC60; // type:function size:0xA4 scope:global -ReleaseFrame__18MAD_CODEC_INTERNALPQ24RCMP5FRAME = .text:0x8034AD04; // type:function size:0x60 scope:global -MAD_CODEC_create__4RCMPv = .text:0x8034AD64; // type:function size:0x4C scope:global -gcc2_compiled. = .text:0x8034ADB0; // type:label scope:local -MAD_CODEC_is_chunk_for_codec__4RCMPUi = .text:0x8034ADB0; // type:function size:0x34 scope:global -gcc2_compiled. = .text:0x8034ADE4; // type:label scope:local -madinit__Fv = .text:0x8034ADE4; // type:function size:0x2BC scope:local -discardbits__Fi = .text:0x8034B0A0; // type:function size:0x58 scope:local -getdelta__Fv = .text:0x8034B0F8; // type:function size:0x44 scope:local -dcblock__FPii = .text:0x8034B13C; // type:function size:0x5C scope:local -getluma__FPCUciPii = .text:0x8034B198; // type:function size:0x98 scope:local -getchroma__FPCUciPii = .text:0x8034B230; // type:function size:0x98 scope:local -setluma__FPCiPUci = .text:0x8034B2C8; // type:function size:0x120 scope:local -setchroma__FPCiPUci = .text:0x8034B3E8; // type:function size:0xA0 scope:local -MAD_initdecode__FPCUsii = .text:0x8034B488; // type:function size:0x140 scope:global -MAD_decodemacroblock__FPCUcN20PUcN23i = .text:0x8034B5C8; // type:function size:0x338 scope:global -gcc2_compiled. = .text:0x8034B900; // type:label scope:local -discardbits__Fi = .text:0x8034B900; // type:function size:0x58 scope:local -madvlcdecode = .text:0x8034B958; // type:function size:0x16C scope:global -gcc2_compiled. = .text:0x8034BAC4; // type:label scope:local -IdctColumn = .text:0x8034BAC4; // type:function size:0x278 scope:local -IdctRow = .text:0x8034BD3C; // type:function size:0x204 scope:local -idctcompute = .text:0x8034BF40; // type:function size:0x164 scope:global -gcc2_compiled. = .text:0x8034C0A4; // type:label scope:local -SetAllocator__3Vp6PQ32EA9Allocator10IAllocator = .text:0x8034C0A4; // type:function size:0x8 scope:global -Alloc__3Vp6i = .text:0x8034C0AC; // type:function size:0x64 scope:global -Free__3Vp6Pv = .text:0x8034C110; // type:function size:0x50 scope:global -gcc2_compiled. = .text:0x8034C160; // type:label scope:local -VP6_DeleteTmpBuffers = .text:0x8034C160; // type:function size:0xA4 scope:global -VP6_AllocateTmpBuffers = .text:0x8034C204; // type:function size:0xD0 scope:global -VP6_DeletePBInstance = .text:0x8034C2D4; // type:function size:0x60 scope:global -VP6_CreatePBInstance = .text:0x8034C334; // type:function size:0x12C scope:global -VP6_VPInitLibrary = .text:0x8034C460; // type:function size:0x80 scope:global -VP6_VPDeInitLibrary = .text:0x8034C4E0; // type:function size:0x4 scope:global -gcc2_compiled. = .text:0x8034C4E4; // type:label scope:local -InitPostProcessing = .text:0x8034C4E4; // type:function size:0xE8 scope:global -DeletePostProcBuffers = .text:0x8034C5CC; // type:function size:0xBC scope:global -AllocatePostProcBuffers = .text:0x8034C688; // type:function size:0x158 scope:global -ChangePostProcConfiguration = .text:0x8034C7E0; // type:function size:0xF8 scope:global -CreatePostProcInstance = .text:0x8034C8D8; // type:function size:0x68 scope:global -DeletePostProcInstance = .text:0x8034C940; // type:function size:0x48 scope:global -SetPPInterlacedMode = .text:0x8034C988; // type:function size:0x8 scope:global -SetDeInterlaceMode = .text:0x8034C990; // type:function size:0x8 scope:global -SetAddNoiseMode = .text:0x8034C998; // type:function size:0x8 scope:global -UpdateFragQIndex = .text:0x8034C9A0; // type:function size:0x54 scope:global -gaussian = .text:0x8034C9F4; // type:function size:0x70 scope:global -PlaneAddNoise_C = .text:0x8034CA64; // type:function size:0x26C scope:global -PostProcess = .text:0x8034CCD0; // type:function size:0x4D8 scope:global -gcc2_compiled. = .text:0x8034D1A8; // type:label scope:local -VP6_InitQTables = .text:0x8034D1A8; // type:function size:0x74 scope:global -VP6_BuildQuantIndex_Generic = .text:0x8034D21C; // type:function size:0x3C scope:global -VP6_init_dequantizer = .text:0x8034D258; // type:function size:0xD0 scope:global -VP6_UpdateQ = .text:0x8034D328; // type:function size:0x68 scope:global -DeleteQuantizerBuffers = .text:0x8034D390; // type:function size:0x5C scope:local -AllocateQuantizerBuffers = .text:0x8034D3EC; // type:function size:0x88 scope:local -VP6_DeleteQuantizer = .text:0x8034D474; // type:function size:0x48 scope:global -VP6_CreateQuantizer = .text:0x8034D4BC; // type:function size:0x6C scope:global -FilterHoriz_Simple_C = .text:0x8034D528; // type:function size:0xF0 scope:global -FilterVert_Simple_C = .text:0x8034D618; // type:function size:0x108 scope:global -SimpleDeblockFrame = .text:0x8034D720; // type:function size:0x21C scope:global -VP6_StartDecoder = .text:0x8034D93C; // type:function size:0xCC scope:global -VP6_SetPbParam = .text:0x8034DA08; // type:function size:0xFC scope:global -VP6_GetYUVConfig = .text:0x8034DB04; // type:function size:0x3C4 scope:global -VP6_DecodeFrameToYUV_internal = .text:0x8034DEC8; // type:function size:0x198 scope:local -VP6_DecodeFrameToYUV = .text:0x8034E060; // type:function size:0xBC scope:global -VP6_StopDecoder = .text:0x8034E11C; // type:function size:0x64 scope:global -gcc2_compiled. = .text:0x8034E180; // type:label scope:local -ClearSysState_C = .text:0x8034E180; // type:function size:0x4 scope:global -AverageBlock_C = .text:0x8034E184; // type:function size:0xBC scope:global -SubtractBlock_C = .text:0x8034E240; // type:function size:0x9C scope:global -CopyBlock_C = .text:0x8034E2DC; // type:function size:0x28 scope:global -Copy12x12_C = .text:0x8034E304; // type:function size:0x78 scope:global -InitVPUtil = .text:0x8034E37C; // type:function size:0x24 scope:global -FilterBlock1d = .text:0x8034E3A0; // type:function size:0xEC scope:global -FilterBlock2dFirstPass = .text:0x8034E48C; // type:function size:0xEC scope:global -FilterBlock2dSecondPass = .text:0x8034E578; // type:function size:0xF0 scope:global -FilterBlock2d = .text:0x8034E668; // type:function size:0x74 scope:global -FilterBlock2dBil_FirstPass = .text:0x8034E6DC; // type:function size:0x9C scope:global -FilterBlock1dBil_8 = .text:0x8034E778; // type:function size:0x90 scope:global -FilterBlock2dBil_SecondPass_8 = .text:0x8034E808; // type:function size:0x98 scope:global -FilterBlock2dBil_8 = .text:0x8034E8A0; // type:function size:0x68 scope:global -FilterBlockBil_8_C = .text:0x8034E908; // type:function size:0xEC scope:global -gcc2_compiled. = .text:0x8034E9F4; // type:label scope:local -PostProcMachineSpecificConfig = .text:0x8034E9F4; // type:function size:0x158 scope:global -gcc2_compiled. = .text:0x8034EB4C; // type:label scope:local -VP6_GetProcessorFrequency = .text:0x8034EB4C; // type:function size:0x8 scope:global -VP6_DMachineSpecificConfig = .text:0x8034EB54; // type:function size:0x10 scope:global -gcc2_compiled. = .text:0x8034EB64; // type:label scope:local -fillidctconstants = .text:0x8034EB64; // type:function size:0x4 scope:global -UtilMachineSpecificConfig = .text:0x8034EB68; // type:function size:0x168 scope:global -duck_malloc = .text:0x8034ECD0; // type:function size:0x20 scope:global -duck_free = .text:0x8034ECF0; // type:function size:0x20 scope:global -VP6_StartDecode = .text:0x8034ED10; // type:function size:0x58 scope:global -gcc2_compiled. = .text:0x8034ED68; // type:label scope:local -UpdateUMVBorder = .text:0x8034ED68; // type:function size:0x2C0 scope:global -CopyFrame = .text:0x8034F028; // type:function size:0x12C scope:global -gcc2_compiled. = .text:0x8034F154; // type:label scope:local -ClampLevels_C = .text:0x8034F154; // type:function size:0xC8 scope:global -gcc2_compiled. = .text:0x8034F21C; // type:label scope:local -SetupDeblockValueArray_Generic = .text:0x8034F21C; // type:function size:0xAC scope:global -SetupDeblocker = .text:0x8034F2C8; // type:function size:0x70 scope:global -DeblockVerticalEdgesInLoopFilteredBand = .text:0x8034F338; // type:function size:0x384 scope:global -DeblockLoopFilteredBand_C = .text:0x8034F6BC; // type:function size:0x828 scope:global -DeblockVerticalEdgesInNonFilteredBand = .text:0x8034FEE4; // type:function size:0x3E8 scope:global -DeblockVerticalEdgesInNonFilteredBandNewFilter = .text:0x803502CC; // type:function size:0x2B8 scope:global -DeblockNonFilteredBand_C = .text:0x80350584; // type:function size:0x8D0 scope:global -DeblockNonFilteredBandNewFilter_C = .text:0x80350E54; // type:function size:0x6E8 scope:global -DeblockPlane = .text:0x8035153C; // type:function size:0x1F8 scope:global -DeblockPlaneNew = .text:0x80351734; // type:function size:0x12C scope:global -DeblockFrame = .text:0x80351860; // type:function size:0x12C scope:global -DeblockFrameInterlaced = .text:0x8035198C; // type:function size:0x134 scope:global -gcc2_compiled. = .text:0x80351AC0; // type:label scope:local -BuildScanOrder = .text:0x80351AC0; // type:function size:0x98 scope:global -BoolTreeToHuffCodes = .text:0x80351B58; // type:function size:0x15C scope:global -ZerosBoolTreeToHuffCodes = .text:0x80351CB4; // type:function size:0x118 scope:global -ConvertBoolTrees = .text:0x80351DCC; // type:function size:0x258 scope:global -VP6_ConfigureEntropyDecoder = .text:0x80352024; // type:function size:0x2E0 scope:global -VP6_ResetLeftContext = .text:0x80352304; // type:function size:0xA0 scope:global -VP6_ResetAboveContext = .text:0x803523A4; // type:function size:0x194 scope:global -VP6_ReadTokensPredictA = .text:0x80352538; // type:function size:0x7E0 scope:global -VP6_DecodeFrameMbs = .text:0x80352D18; // type:function size:0x344 scope:global -gcc2_compiled. = .text:0x8035305C; // type:label scope:local -VP6_BuildModeTree = .text:0x8035305C; // type:function size:0x2B8 scope:global -VP6_decodeModeDiff = .text:0x80353314; // type:function size:0x100 scope:global -VP6_DecodeModeProbs = .text:0x80353414; // type:function size:0x150 scope:global -gcc2_compiled. = .text:0x80353564; // type:label scope:local -VP6_ConfigureMvEntropyDecoder = .text:0x80353564; // type:function size:0x1D0 scope:global -gcc2_compiled. = .text:0x80353734; // type:label scope:local -CFastDeInterlace = .text:0x80353734; // type:function size:0xC8 scope:global -gcc2_compiled. = .text:0x803537FC; // type:label scope:local -DeringBlockStrong_C = .text:0x803537FC; // type:function size:0x710 scope:global -DeringBlockWeak_C = .text:0x80353F0C; // type:function size:0x284 scope:global -DeringFrame = .text:0x80354190; // type:function size:0x610 scope:global -DeringFrameInterlaced = .text:0x803547A0; // type:function size:0x850 scope:global -gcc2_compiled. = .text:0x80354FF0; // type:label scope:local -InitHeaderBuffer = .text:0x80354FF0; // type:function size:0x44 scope:global -ReadHeaderBits = .text:0x80355034; // type:function size:0x88 scope:global -LoadFrameHeader = .text:0x803550BC; // type:function size:0x568 scope:local -VP6_LoadFrame = .text:0x80355624; // type:function size:0x3C scope:global -VP6_bitread = .text:0x80355660; // type:function size:0x50 scope:global -gcc2_compiled. = .text:0x803556B0; // type:label scope:local -VP6_DeleteFragmentInfo = .text:0x803556B0; // type:function size:0xEC scope:global -VP6_AllocateFragmentInfo = .text:0x8035579C; // type:function size:0x1A4 scope:global -VP6_DeleteFrameInfo = .text:0x80355940; // type:function size:0x88 scope:global -VP6_AllocateFrameInfo = .text:0x803559C8; // type:function size:0xBC scope:global -VP6_InitFrameDetails = .text:0x80355A84; // type:function size:0x214 scope:global -VP6_InitialiseConfiguration = .text:0x80355C98; // type:function size:0x10 scope:global -gcc2_compiled. = .text:0x80355CA8; // type:label scope:local -InsertSorted = .text:0x80355CA8; // type:function size:0x88 scope:local -VP6_BuildHuffTree = .text:0x80355D30; // type:function size:0x1A0 scope:global -VP6_BuildHuffLookupTable = .text:0x80355ED0; // type:function size:0x7C scope:global -VP6_CreateCodeArray = .text:0x80355F4C; // type:function size:0xDC scope:global -dequant_slow10 = .text:0x80356028; // type:function size:0x154 scope:global -IDct10 = .text:0x8035617C; // type:function size:0x2E0 scope:global -gcc2_compiled. = .text:0x8035645C; // type:label scope:local -SetupBoundingValueArray_Generic = .text:0x8035645C; // type:function size:0xAC scope:global -FilterHoriz_Generic = .text:0x80356508; // type:function size:0x70 scope:global -FilterVert_Generic = .text:0x80356578; // type:function size:0x98 scope:global -FilteringHoriz_8_C = .text:0x80356610; // type:function size:0xB0 scope:global -FilteringVert_8_C = .text:0x803566C0; // type:function size:0xD8 scope:global -FilteringHoriz_12_C = .text:0x80356798; // type:function size:0xB0 scope:global -FilteringVert_12_C = .text:0x80356848; // type:function size:0xD8 scope:global -gcc2_compiled. = .text:0x80356920; // type:label scope:local -SatUnsigned8 = .text:0x80356920; // type:function size:0x15C scope:global -ScalarReconInterHalfPixel2 = .text:0x80356A7C; // type:function size:0x134 scope:global -gcc2_compiled. = .text:0x80356BB0; // type:label scope:local -HorizontalLine_Copy = .text:0x80356BB0; // type:function size:0x38 scope:global -NullScale = .text:0x80356BE8; // type:function size:0x4 scope:global -HorizontalLine_4_5_Scale_C = .text:0x80356BEC; // type:function size:0xF8 scope:global -VerticalBand_4_5_Scale_C = .text:0x80356CE4; // type:function size:0xB4 scope:global -LastVerticalBand_4_5_Scale_C = .text:0x80356D98; // type:function size:0x88 scope:global -HorizontalLine_3_5_Scale_C = .text:0x80356E20; // type:function size:0xF8 scope:global -VerticalBand_3_5_Scale_C = .text:0x80356F18; // type:function size:0xB4 scope:global -LastVerticalBand_3_5_Scale_C = .text:0x80356FCC; // type:function size:0x98 scope:global -HorizontalLine_1_2_Scale_C = .text:0x80357064; // type:function size:0x4C scope:global -VerticalBand_1_2_Scale_C = .text:0x803570B0; // type:function size:0x3C scope:global -LastVerticalBand_1_2_Scale_C = .text:0x803570EC; // type:function size:0x28 scope:global -AnyRatio_2D_Scale = .text:0x80357114; // type:function size:0x280 scope:global -AnyRatioFrameScale = .text:0x80357394; // type:function size:0x270 scope:global -CenterImage = .text:0x80357604; // type:function size:0x1A8 scope:global -ScaleOrCenter = .text:0x803577AC; // type:function size:0xB8 scope:global -gcc2_compiled. = .text:0x80357864; // type:label scope:local -VP6_ConfigureContexts = .text:0x80357864; // type:function size:0xC4 scope:global -gcc2_compiled. = .text:0x80357928; // type:label scope:local -VP6_DecodeBool = .text:0x80357928; // type:function size:0xA4 scope:global -VP6_DecodeBool128 = .text:0x803579CC; // type:function size:0x7C scope:global -nDecodeBool = .text:0x80357A48; // type:function size:0x94 scope:global -VP6_DecodeBlock = .text:0x80357ADC; // type:function size:0x1278 scope:global -VP6_DecodeMacroBlock = .text:0x80358D54; // type:function size:0x2E0 scope:global -VP6_DecodeBlockMode = .text:0x80359034; // type:function size:0x84 scope:global -VP6_DecodeMode = .text:0x803590B8; // type:function size:0x12C scope:global -VP6_decodeModeAndMotionVector = .text:0x803591E4; // type:function size:0x370 scope:global -VP6_decodeMotionVector = .text:0x80359554; // type:function size:0x258 scope:global -VP6_FindNearestandNextNearest = .text:0x803597AC; // type:function size:0x150 scope:global -VP6_PredictFilteredBlock = .text:0x803598FC; // type:function size:0x2E4 scope:global -VP6_ReconstructBlock = .text:0x80359BE0; // type:function size:0xF0 scope:global -ScalarReconIntra_GC = .text:0x80359CD0; // type:function size:0x54 scope:global -intra_loop = .text:0x80359CE4; // type:label scope:local -ScalarReconInter_GC = .text:0x80359D24; // type:function size:0x5C scope:global -inter_loop = .text:0x80359D2C; // type:label scope:local -ReconBlock_GC = .text:0x80359D80; // type:function size:0x5C scope:global -block_loop = .text:0x80359D88; // type:label scope:local -IDct64_GC = .text:0x80359DDC; // type:function size:0x6CC scope:global -idctcolumn64 = .text:0x80359F5C; // type:label scope:local -idct64_resume = .text:0x80359FF0; // type:label scope:local -idct64_loop = .text:0x8035A3A4; // type:label scope:local -idct64_scale = .text:0x8035A41C; // type:label scope:local -IDct1_GC = .text:0x8035A4A8; // type:function size:0x40 scope:global -UnpackBlock_GC = .text:0x8035A4E8; // type:function size:0x38 scope:global -unpack_loop = .text:0x8035A4F0; // type:label scope:local -FilterBlock1dBil_GC = .text:0x8035A520; // type:function size:0x84 scope:global -filt1d_loop = .text:0x8035A540; // type:label scope:local -FilterBlock2dBil_GC = .text:0x8035A5A4; // type:function size:0x104 scope:global -filt2d_loop1 = .text:0x8035A5CC; // type:label scope:local -filt2d_loop2 = .text:0x8035A644; // type:label scope:local -FilterBlock_GC = .text:0x8035A6A8; // type:function size:0x188 scope:global -gcc2_compiled. = .text:0x8035A830; // type:label scope:local -Var16Point = .text:0x8035A830; // type:function size:0x70 scope:global -VP6_PredictFiltered = .text:0x8035A8A0; // type:function size:0x110 scope:global -gcc2_compiled. = .text:0x8035A9B0; // type:label scope:local -SND3dpos = .text:0x8035A9B0; // type:function size:0xCC scope:global -gcc2_compiled. = .text:0x8035AA7C; // type:label scope:local -SNDAEMSI_UpdateClassDestructor__FPQ27AemsDef20ClassDestructorState = .text:0x8035AA7C; // type:function size:0x14 scope:global -SNDAEMSI_UpdateClassData__FPQ27AemsDef14ClassDataState = .text:0x8035AA90; // type:function size:0x8 scope:global -SNDAEMSI_UpdateGlobalVariable__FPQ27AemsDef19GlobalVariableState = .text:0x8035AA98; // type:function size:0x8 scope:global -SNDAEMSI_updatecreate__FPQ27AemsDef11CREATESTATE = .text:0x8035AAA0; // type:function size:0x14 scope:global -SNDAEMSI_updatedestroy__FPQ27AemsDef12DESTROYSTATE = .text:0x8035AAB4; // type:function size:0x254 scope:global -UpdateCallFunction__FPQ27AemsDef17CallFunctionState = .text:0x8035AD08; // type:function size:0xBC scope:global -UpdateControlClass__FPQ27AemsDef17ControlClassState = .text:0x8035ADC4; // type:function size:0x1CC scope:global -UpdateSetGlobalVariable__FPQ27AemsDef22SetGlobalVariableState = .text:0x8035AF90; // type:function size:0x68 scope:global -SNDAEMSI_updatecounter__FPQ27AemsDef12COUNTERSTATE = .text:0x8035AFF8; // type:function size:0x7C scope:global -SNDAEMSI_updaterandom__FPQ27AemsDef11RANDOMSTATE = .text:0x8035B074; // type:function size:0x5C scope:global -SNDAEMSI_updaterandomshuffle__FPQ27AemsDef18RANDOMSHUFFLESTATE = .text:0x8035B0D0; // type:function size:0x10C scope:global -SNDAEMSI_updaterandomweighted__FPQ27AemsDef19RANDOMWEIGHTEDSTATE = .text:0x8035B1DC; // type:function size:0xB4 scope:global -SNDAEMSI_updaterangetrig__FPQ27AemsDef14RANGETRIGSTATE = .text:0x8035B290; // type:function size:0x74 scope:global -SNDAEMSI_updatedelaytrig__FPQ27AemsDef14DELAYTRIGSTATE = .text:0x8035B304; // type:function size:0xA4 scope:global -SNDAEMSI_updatestategen__FPQ27AemsDef13STATEGENSTATE = .text:0x8035B3A8; // type:function size:0x60 scope:global -SNDAEMSI_updatemerge__FPQ27AemsDef14MERGETRIGSTATE = .text:0x8035B408; // type:function size:0x44 scope:global -SNDAEMSI_envelopeprogramsegment__FPQ27AemsDef13ENVELOPESTATE = .text:0x8035B44C; // type:function size:0x3C scope:global -SNDAEMSI_updateenvelope__FPQ27AemsDef13ENVELOPESTATE = .text:0x8035B488; // type:function size:0x188 scope:global -SNDAEMSI_updatetable__FPQ27AemsDef10TABLESTATE = .text:0x8035B610; // type:function size:0x254 scope:global -SNDAEMSI_updatedelayline__FPQ27AemsDef14DELAYLINESTATE = .text:0x8035B864; // type:function size:0x114 scope:global -SNDAEMSI_updatemux__FPQ27AemsDef8MUXSTATE = .text:0x8035B978; // type:function size:0x30 scope:global -SNDAEMSI_updatedemux__FPQ27AemsDef10DEMUXSTATE = .text:0x8035B9A8; // type:function size:0x50 scope:global -SNDAEMSI_updatemin__FPQ27AemsDef8MINSTATE = .text:0x8035B9F8; // type:function size:0x44 scope:global -SNDAEMSI_updatemin2__FPQ27AemsDef9MIN2STATE = .text:0x8035BA3C; // type:function size:0x1C scope:global -SNDAEMSI_updatemax__FPQ27AemsDef8MAXSTATE = .text:0x8035BA58; // type:function size:0x44 scope:global -SNDAEMSI_updatemax2__FPQ27AemsDef9MAX2STATE = .text:0x8035BA9C; // type:function size:0x1C scope:global -SNDAEMSI_updatescale__FPQ27AemsDef10SCALESTATE = .text:0x8035BAB8; // type:function size:0xBC scope:global -SNDAEMSI_updatescale2__FPQ27AemsDef11SCALE2STATE = .text:0x8035BB74; // type:function size:0x9C scope:global -SNDAEMSI_updateadd__FPQ27AemsDef8ADDSTATE = .text:0x8035BC10; // type:function size:0x3C scope:global -SNDAEMSI_updateadd2__FPQ27AemsDef9ADD2STATE = .text:0x8035BC4C; // type:function size:0x10 scope:global -SNDAEMSI_updatesubtract__FPQ27AemsDef13SUBTRACTSTATE = .text:0x8035BC5C; // type:function size:0x10 scope:global -SNDAEMSI_updatemultiply__FPQ27AemsDef13MULTIPLYSTATE = .text:0x8035BC6C; // type:function size:0x10 scope:global -SNDAEMSI_updatedivide__FPQ27AemsDef11DIVIDESTATE = .text:0x8035BC7C; // type:function size:0x20 scope:global -SNDAEMSI_updatemodulo__FPQ27AemsDef11MODULOSTATE = .text:0x8035BC9C; // type:function size:0x28 scope:global -SNDAEMSI_bankinputstub__Fii = .text:0x8035BCC4; // type:function size:0x4 scope:global -SNDAEMSI_bankpitchmult__Fii = .text:0x8035BCC8; // type:function size:0x5C scope:global -SNDAEMSI_banktimemult__Fii = .text:0x8035BD24; // type:function size:0x58 scope:global -SNDAEMSI_bankvol__Fii = .text:0x8035BD7C; // type:function size:0xE8 scope:global -SNDAEMSI_bankazimuth__Fii = .text:0x8035BE64; // type:function size:0x40 scope:global -SNDAEMSI_bankfxwet0__Fii = .text:0x8035BEA4; // type:function size:0xA4 scope:global -SNDAEMSI_banklowpass__Fii = .text:0x8035BF48; // type:function size:0x48 scope:global -SNDAEMSI_bankhighpass__Fii = .text:0x8035BF90; // type:function size:0x48 scope:global -SNDAEMSI_bankdrylevel__Fii = .text:0x8035BFD8; // type:function size:0x9C scope:global -SNDAEMSI_optpitchmult__FP11SNDPLAYOPTSi = .text:0x8035C074; // type:function size:0x30 scope:global -SNDAEMSI_opttimemult__FP11SNDPLAYOPTSi = .text:0x8035C0A4; // type:function size:0x24 scope:global -SNDAEMSI_optvol__FP11SNDPLAYOPTSi = .text:0x8035C0C8; // type:function size:0x28 scope:global -SNDAEMSI_optazimuth__FP11SNDPLAYOPTSi = .text:0x8035C0F0; // type:function size:0x8 scope:global -SNDAEMSI_optfxwet0__FP11SNDPLAYOPTSi = .text:0x8035C0F8; // type:function size:0x28 scope:global -SNDAEMSI_optlowpass__FP11SNDPLAYOPTSi = .text:0x8035C120; // type:function size:0x30 scope:global -SNDAEMSI_opthighpass__FP11SNDPLAYOPTSi = .text:0x8035C150; // type:function size:0x30 scope:global -SNDAEMSI_optdrylevel__FP11SNDPLAYOPTSi = .text:0x8035C180; // type:function size:0x28 scope:global -SNDAEMSI_optstub__FP11SNDPLAYOPTSi = .text:0x8035C1A8; // type:function size:0x4 scope:global -SNDAEMSI_playerplaybank__FPQ27AemsDef11PLAYERSTATEPQ27AemsDef11SAMPLEENTRY = .text:0x8035C1AC; // type:function size:0xB0 scope:global -SNDAEMSI_playerstopbank__FPQ27AemsDef11PLAYERSTATE = .text:0x8035C25C; // type:function size:0x24 scope:global -SNDAEMSI_playerpausebank__FGQ27AemsDef12PLAYERHANDLE = .text:0x8035C280; // type:function size:0x40 scope:global -SNDAEMSI_playerunpausebank__FPQ27AemsDef11PLAYERSTATE = .text:0x8035C2C0; // type:function size:0xA8 scope:global -SNDAEMSI_playerresetoutputs__FPQ27AemsDef11PLAYERSTATE = .text:0x8035C368; // type:function size:0x38 scope:global -SNDAEMSI_playerupdatebank__FPQ27AemsDef11PLAYERSTATE = .text:0x8035C3A0; // type:function size:0x1E0 scope:global -SNDAEMSI_updateplayer__FPQ27AemsDef11PLAYERSTATE = .text:0x8035C580; // type:function size:0x1FC scope:global -SNDAEMSI_updateoscillator__FPQ27AemsDef15OSCILLATORSTATE = .text:0x8035C77C; // type:function size:0x220 scope:global -SNDAEMSI_updateramp__FPQ27AemsDef9RAMPSTATE = .text:0x8035C99C; // type:function size:0x1AC scope:global -SNDAEMSI_updateaddmax__FPQ27AemsDef11ADDMAXSTATE = .text:0x8035CB48; // type:function size:0x4C scope:global -SNDAEMSI_updatesubtractmin__FPQ27AemsDef16SUBTRACTMINSTATE = .text:0x8035CB94; // type:function size:0x24 scope:global -SNDAEMSI_updatemultiplymax__FPQ27AemsDef16MULTIPLYMAXSTATE = .text:0x8035CBB8; // type:function size:0x24 scope:global -UpdateFunction__FPQ27AemsDef13FunctionState = .text:0x8035CBDC; // type:function size:0x14 scope:global -SNDAEMSI_SetGlobalVariable__FPQ24Csis9ParameterPv = .text:0x8035CBF0; // type:function size:0xC scope:global -SNDAEMSI_SetClassDestructor__FPQ24Csis5ClassPv = .text:0x8035CBFC; // type:function size:0xC scope:global -SNDAEMSI_SetClassData__FPQ24Csis9ParameterPv = .text:0x8035CC08; // type:function size:0x34 scope:global -CsisFunctionCallback__FPQ24Csis9ParameterPv = .text:0x8035CC3C; // type:function size:0x3C scope:global -SNDAEMSI_CreateModuleInstance__FPQ24Csis5ClassPQ24Csis9ParameterPv = .text:0x8035CC78; // type:function size:0x1DC scope:global -SNDAEMSI_restore__Fv = .text:0x8035CE54; // type:function size:0x58 scope:global -SNDAEMS_removemodulebank = .text:0x8035CEAC; // type:function size:0x1CC scope:global -SNDAEMSI_stopmodulebanks__Fv = .text:0x8035D078; // type:function size:0xC4 scope:global -SNDAEMSI_createmodulebankhandle__Fv = .text:0x8035D13C; // type:function size:0x28 scope:global -SNDAEMSI_resolvemodulebank__FPQ27AemsDef10ModuleBankPQ27AemsDef15FUNCFIXUPHEADERPci = .text:0x8035D164; // type:function size:0x33C scope:global -gcc2_compiled. = .text:0x8035D4A0; // type:label scope:local -SNDAEMS_addmodulebank = .text:0x8035D4A0; // type:function size:0x1B8 scope:global -__static_initialization_and_destruction_0 = .text:0x8035D658; // type:function size:0x38 scope:local -_GLOBAL_.I.SNDAEMS_addmodulebank = .text:0x8035D690; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x8035D6BC; // type:label scope:local -SNDAEMSI_almbabortload__Fv = .text:0x8035D6BC; // type:function size:0x5C scope:global -SNDAEMSI_almbservice__Fv = .text:0x8035D718; // type:function size:0x3E8 scope:global -SNDAEMS_asyncloadmodulebank = .text:0x8035DB00; // type:function size:0x16C scope:global -SNDAEMS_asyncloadmodulebankdone = .text:0x8035DC6C; // type:function size:0x38 scope:global -gcc2_compiled. = .text:0x8035DCA4; // type:label scope:local -SNDAEMSI_almbmservice__Fv = .text:0x8035DCA4; // type:function size:0x20C scope:global -SNDAEMS_asyncloadmodulebankmem = .text:0x8035DEB0; // type:function size:0x120 scope:global -SNDAEMS_asyncloadmodulebankmemdone = .text:0x8035DFD0; // type:function size:0x14 scope:global -gcc2_compiled. = .text:0x8035DFE4; // type:label scope:local -SNDAEMSI_timerupdate__FPv = .text:0x8035DFE4; // type:function size:0x78 scope:global -gcc2_compiled. = .text:0x8035E05C; // type:label scope:local -SNDVOICEI_isreserved__Fii = .text:0x8035E05C; // type:function size:0x40 scope:global -SNDVOICEI_alloc__FiiPiii = .text:0x8035E09C; // type:function size:0x3C0 scope:global -SNDVOICEI_free__Fi = .text:0x8035E45C; // type:function size:0x1A0 scope:global -SNDVOICEI_get__Fi = .text:0x8035E5FC; // type:function size:0x54 scope:global -gcc2_compiled. = .text:0x8035E650; // type:label scope:local -SND_attrsetdef = .text:0x8035E650; // type:function size:0x98 scope:global -gcc2_compiled. = .text:0x8035E6E8; // type:label scope:local -SNDBANKI_userdatacallback__FP15SNDIPATCHHEADERii = .text:0x8035E6E8; // type:function size:0xD0 scope:global -SNDbankadd = .text:0x8035E7B8; // type:function size:0x214 scope:global -gcc2_compiled. = .text:0x8035E9CC; // type:label scope:local -SNDBANKI_alloc__Fv = .text:0x8035E9CC; // type:function size:0x44 scope:global -SNDBANKI_getppatch__FP8BANKVER5i = .text:0x8035EA10; // type:function size:0x40 scope:global -gcc2_compiled. = .text:0x8035EA50; // type:label scope:local -SNDBANKI_abortload__Fv = .text:0x8035EA50; // type:function size:0x118 scope:global -SNDBANKI_asyncresolve__Fv = .text:0x8035EB68; // type:function size:0xC4 scope:global -SNDBANKI_asynccompletereads__Fv = .text:0x8035EC2C; // type:function size:0xC8 scope:global -SNDBANKI_asyncissuereads__Fv = .text:0x8035ECF4; // type:function size:0x108 scope:global -SNDBANKI_asyncxferhdr__Fv = .text:0x8035EDFC; // type:function size:0x124 scope:global -SNDBANKI_asynccompletedownload__Fv = .text:0x8035EF20; // type:function size:0xAC scope:global -SNDBANKI_asyncissuedownloads__Fv = .text:0x8035EFCC; // type:function size:0x148 scope:global -SNDBANKI_asyncprocess__Fv = .text:0x8035F114; // type:function size:0x30 scope:global -SNDBANKI_asyncserver__Fv = .text:0x8035F144; // type:function size:0xB8 scope:global -SNDBANKI_asyncservice__Fv = .text:0x8035F1FC; // type:function size:0x1F0 scope:global -SNDBANK_asyncloadi__FPciPviPFi_Pvb = .text:0x8035F3EC; // type:function size:0x20C scope:global -SNDBANK_asyncload = .text:0x8035F5F8; // type:function size:0x24 scope:global -SNDBANK_asyncdone = .text:0x8035F61C; // type:function size:0x34 scope:global -gcc2_compiled. = .text:0x8035F650; // type:label scope:local -SNDBANKI_asyncloadmemresolve__Fv = .text:0x8035F650; // type:function size:0xB4 scope:global -SNDBANKI_asyncloadmem100hz__Fv = .text:0x8035F704; // type:function size:0xD4 scope:global -SNDBANK_asyncloadmem = .text:0x8035F7D8; // type:function size:0xFC scope:global -SNDBANK_asyncloadmemdone = .text:0x8035F8D4; // type:function size:0x14 scope:global -gcc2_compiled. = .text:0x8035F8E8; // type:label scope:local -SNDbankheadercopy = .text:0x8035F8E8; // type:function size:0x74 scope:global -gcc2_compiled. = .text:0x8035F95C; // type:label scope:local -SNDbankheadersize = .text:0x8035F95C; // type:function size:0x18 scope:global -gcc2_compiled. = .text:0x8035F974; // type:label scope:local -SNDBANK_play = .text:0x8035F974; // type:function size:0x98 scope:global -gcc2_compiled. = .text:0x8035FA0C; // type:label scope:local -SNDbankremove = .text:0x8035FA0C; // type:function size:0x194 scope:global -gcc2_compiled. = .text:0x8035FBA0; // type:label scope:local -SNDBANKI_valid__Fi = .text:0x8035FBA0; // type:function size:0x5C scope:global -gcc2_compiled. = .text:0x8035FBFC; // type:label scope:local -SNDI_checkplayopts__FP11SNDPLAYOPTS = .text:0x8035FBFC; // type:function size:0x2C scope:global -gcc2_compiled. = .text:0x8035FC28; // type:label scope:local -SNDSYS_add100hzclient = .text:0x8035FC28; // type:function size:0x38 scope:global -SNDSYS_remove100hzclient = .text:0x8035FC60; // type:function size:0xD4 scope:global -gcc2_compiled. = .text:0x8035FD34; // type:label scope:local -SNDCTRL_drylevel = .text:0x8035FD34; // type:function size:0xB8 scope:global -gcc2_compiled. = .text:0x8035FDEC; // type:label scope:local -gcc2_compiled. = .text:0x8035FDEC; // type:label scope:local -SNDfxlevel = .text:0x8035FDEC; // type:function size:0x104 scope:global -gcc2_compiled. = .text:0x8035FEF0; // type:label scope:local -SNDCTRL_lowpass = .text:0x8035FEF0; // type:function size:0x68 scope:global -gcc2_compiled. = .text:0x8035FF58; // type:label scope:local -MemCpy__Q23Snd4UtilPvPCvUi = .text:0x8035FF58; // type:function size:0x1F8 scope:global -gcc2_compiled. = .text:0x80360150; // type:label scope:local -SNDmemlimits = .text:0x80360150; // type:function size:0x48 scope:global -gcc2_compiled. = .text:0x80360198; // type:label scope:local -SNDmemlargestunused = .text:0x80360198; // type:function size:0x40 scope:global -gcc2_compiled. = .text:0x803601D8; // type:label scope:local -SNDMEMI_constrain__FPUiPi = .text:0x803601D8; // type:function size:0x2C scope:global -SNDMEMI_init__FPvi = .text:0x80360204; // type:function size:0x68 scope:global -SNDMEMI_restore__Fv = .text:0x8036026C; // type:function size:0x20 scope:global -SNDMEMI_allocz__Fi = .text:0x8036028C; // type:function size:0x204 scope:global -SNDMEMI_free__FPv = .text:0x80360490; // type:function size:0xC0 scope:global -_._Q23Snd17GlobalFxProcessor = .text:0x80360550; // type:function size:0x88 scope:global -CreateInstance__Q23Snd17GlobalFxProcessorQ23Snd6DeviceiPPQ23Snd17GlobalFxProcessor = .text:0x803605D8; // type:function size:0xAC scope:global -Release__Q23Snd17GlobalFxProcessor = .text:0x80360684; // type:function size:0x28 scope:global -SetCustom__Q23Snd17GlobalFxProcessorPv = .text:0x803606AC; // type:function size:0x58 scope:global -Reset__Q23Snd17GlobalFxProcessor = .text:0x80360704; // type:function size:0x5C scope:global -gcc2_compiled. = .text:0x80360760; // type:label scope:local -iSNDpatchkey__FiPi = .text:0x80360760; // type:function size:0xAC scope:global -gcc2_compiled. = .text:0x8036080C; // type:label scope:local -SNDpitchmult = .text:0x8036080C; // type:function size:0x94 scope:global -gcc2_compiled. = .text:0x803608A0; // type:label scope:local -SNDPKTPLAYI_gethighchannel__Fii = .text:0x803608A0; // type:function size:0x54 scope:global -SNDPKTPLAYI_overhead__Fi = .text:0x803608F4; // type:function size:0xC scope:global -SNDPKTPLAY_overhead = .text:0x80360900; // type:function size:0x34 scope:global -SNDPKTPLAY_create = .text:0x80360934; // type:function size:0xF4 scope:global -SNDPKTPLAY_start = .text:0x80360A28; // type:function size:0x458 scope:global -SNDPKTPLAY_submit = .text:0x80360E80; // type:function size:0x128 scope:global -SNDPKTPLAY_submitspace = .text:0x80360FA8; // type:function size:0x60 scope:global -SNDPKTPLAY_framesoutstanding = .text:0x80361008; // type:function size:0x24 scope:global -SNDPKTPLAY_purge = .text:0x8036102C; // type:function size:0x8 scope:global -SNDPKTPLAY_stop = .text:0x80361034; // type:function size:0xA0 scope:global -SNDPKTPLAY_destroy = .text:0x803610D4; // type:function size:0x54 scope:global -SNDPKTPLAYI_get__FiiPiT2 = .text:0x80361128; // type:function size:0x23C scope:global -SNDPKTPLAYI_freeframes__Fiii = .text:0x80361364; // type:function size:0x6C scope:global -SNDPKTPLAYI_flushcallbackdata__Fv = .text:0x803613D0; // type:function size:0xB0 scope:global -gcc2_compiled. = .text:0x80361480; // type:label scope:local -SNDplaysetdef = .text:0x80361480; // type:function size:0x58 scope:global -gcc2_compiled. = .text:0x803614D8; // type:label scope:local -SNDPROFILE_outputlatency = .text:0x803614D8; // type:function size:0x38 scope:global -gcc2_compiled. = .text:0x80361510; // type:label scope:local -SNDI_randomseed__FUi = .text:0x80361510; // type:function size:0x34 scope:global -iSNDrandom__Fv = .text:0x80361544; // type:function size:0x108 scope:global -gcc2_compiled. = .text:0x8036164C; // type:label scope:local -SNDI_validrendermode__FPiP15SNDIPATCHHEADER = .text:0x8036164C; // type:function size:0xBC scope:global -gcc2_compiled. = .text:0x80361708; // type:label scope:local -SNDBANKI_asyncresolvepatch__FiP11TAGGEDPATCHPcPi = .text:0x80361708; // type:function size:0x84 scope:global -gcc2_compiled. = .text:0x8036178C; // type:label scope:local -SNDSYSI_variabletimerservice__Fv = .text:0x8036178C; // type:function size:0x6C scope:global -SNDSYSI_100hzserver__Fv = .text:0x803617F8; // type:function size:0x260 scope:global -DefaultMutexLockFn__3Sndv = .text:0x80361A58; // type:function size:0x20 scope:global -DefaultMutexUnlockFn__3Sndv = .text:0x80361A78; // type:function size:0x20 scope:global -SNDSYS_entercritical = .text:0x80361A98; // type:function size:0x40 scope:global -SNDSYS_leavecritical = .text:0x80361AD8; // type:function size:0x40 scope:global -__static_initialization_and_destruction_0 = .text:0x80361B18; // type:function size:0x28 scope:local -_GLOBAL_.I.SNDSYSI_variabletimerservice__Fv = .text:0x80361B40; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x80361B6C; // type:label scope:local -iSNDsin__Fi = .text:0x80361B6C; // type:function size:0x80 scope:global -gcc2_compiled. = .text:0x80361BEC; // type:label scope:local -StreamRemoveFaders__3SndP16SNDSTREAMCHANNEL = .text:0x80361BEC; // type:function size:0x78 scope:global -SNDSTRMI_startstream__FP16SNDSTREAMCHANNEL = .text:0x80361C64; // type:function size:0x298 scope:global -SNDSTRMI_calcdatarate__FP15SNDSAMPLEFORMAT = .text:0x80361EFC; // type:function size:0x78 scope:global -SNDSTRMI_destroyall__Fv = .text:0x80361F74; // type:function size:0x5C scope:global -SNDSTRMI_getstreamptr__Fi = .text:0x80361FD0; // type:function size:0x34 scope:global -SNDSTRMI_removerequest__Fi = .text:0x80362004; // type:function size:0x68 scope:global -SNDSTRMI_releasecallback__FPvT0 = .text:0x8036206C; // type:function size:0x3C scope:global -SNDSTRMI_framescallback__FiiPv = .text:0x803620A8; // type:function size:0xA8 scope:global -SNDSTRMI_parseheader__FiP14STREAMCHUNKHDR = .text:0x80362150; // type:function size:0x23C scope:global -SNDSTRMI_parsedata__FP16SNDSTREAMCHANNELP14STREAMCHUNKHDR = .text:0x8036238C; // type:function size:0x118 scope:global -SNDSTRMI_parsechunk__FiP14STREAMCHUNKHDR = .text:0x803624A4; // type:function size:0x78 scope:global -SNDSTRMI_isheld__FP16SNDSTREAMCHANNEL = .text:0x8036251C; // type:function size:0xDC scope:global -SNDSTRMI_service__Fv = .text:0x803625F8; // type:function size:0x180 scope:global -SNDSTRMI_numcreated__Fv = .text:0x80362778; // type:function size:0x48 scope:global -SNDSTRMI_create__FP11SNDPLAYOPTSiiPviii = .text:0x803627C0; // type:function size:0x360 scope:global -SNDSTRMI_queue__FiiPcii = .text:0x80362B20; // type:function size:0x120 scope:global -SNDSTRM_create = .text:0x80362C40; // type:function size:0x28 scope:global -SNDSTRM_destroy = .text:0x80362C68; // type:function size:0xBC scope:global -SNDSTRM_queuefile = .text:0x80362D24; // type:function size:0x24 scope:global -SNDSTRM_purge = .text:0x80362D48; // type:function size:0x138 scope:global -gcc2_compiled. = .text:0x80362E80; // type:label scope:local -SNDSTRM_setazimuth = .text:0x80362E80; // type:function size:0x2B4 scope:global -gcc2_compiled. = .text:0x80363134; // type:label scope:local -StreamFader__3SndPv = .text:0x80363134; // type:function size:0x154 scope:global -SNDSTRM_autovol = .text:0x80363288; // type:function size:0x184 scope:global -gcc2_compiled. = .text:0x8036340C; // type:label scope:local -SNDSTRM_createtap = .text:0x8036340C; // type:function size:0x40 scope:global -gcc2_compiled. = .text:0x8036344C; // type:label scope:local -SNDSTRM_fxlevel = .text:0x8036344C; // type:function size:0xFC scope:global -gcc2_compiled. = .text:0x80363548; // type:label scope:local -SNDSTRMI_getrequestptr__Fi = .text:0x80363548; // type:function size:0x78 scope:global -gcc2_compiled. = .text:0x803635C0; // type:label scope:local -SNDSTRM_modifyhold = .text:0x803635C0; // type:function size:0x58 scope:global -gcc2_compiled. = .text:0x80363618; // type:label scope:local -SNDSTRM_lowpass = .text:0x80363618; // type:function size:0x50 scope:global -gcc2_compiled. = .text:0x80363668; // type:label scope:local -SNDstop = .text:0x80363668; // type:function size:0x60 scope:global -gcc2_compiled. = .text:0x803636C8; // type:label scope:local -SNDSTRM_overheadtap = .text:0x803636C8; // type:function size:0x48 scope:global -SNDSTRM_overhead = .text:0x80363710; // type:function size:0x44 scope:global -gcc2_compiled. = .text:0x80363754; // type:label scope:local -SNDSTRM_pitchmult = .text:0x80363754; // type:function size:0x5C scope:global -gcc2_compiled. = .text:0x803637B0; // type:label scope:local -SNDSTRM_queuemem = .text:0x803637B0; // type:function size:0x2C scope:global -gcc2_compiled. = .text:0x803637DC; // type:label scope:local -SNDSTRM_queuerequestid = .text:0x803637DC; // type:function size:0x2C scope:global -gcc2_compiled. = .text:0x80363808; // type:label scope:local -SNDSTRM_drylevel = .text:0x80363808; // type:function size:0x50 scope:global -gcc2_compiled. = .text:0x80363858; // type:label scope:local -SNDSTRM_requeststatus = .text:0x80363858; // type:function size:0x214 scope:global -gcc2_compiled. = .text:0x80363A6C; // type:label scope:local -SNDSTRM_setgreedylevel = .text:0x80363A6C; // type:function size:0x4C scope:global -gcc2_compiled. = .text:0x80363AB8; // type:label scope:local -SNDSTRM_status = .text:0x80363AB8; // type:function size:0xE0 scope:global -gcc2_compiled. = .text:0x80363B98; // type:label scope:local -SNDSTRM_timemult = .text:0x80363B98; // type:function size:0x6C scope:global -gcc2_compiled. = .text:0x80363C04; // type:label scope:local -SNDSTRM_setvol = .text:0x80363C04; // type:function size:0x24C scope:global -gcc2_compiled. = .text:0x80363E50; // type:label scope:local -SetMaxBanks__Q23Snd6Systemi = .text:0x80363E50; // type:function size:0x74 scope:global -CapOutputMode__Q23Snd6SystemQ23Snd10OutputModePb = .text:0x80363EC4; // type:function size:0xA4 scope:global -SetOutputMode__Q23Snd6SystemQ23Snd10OutputMode = .text:0x80363F68; // type:function size:0x78 scope:global -SetOutputSampleRate__Q23Snd6SystemQ23Snd6Devicei = .text:0x80363FE0; // type:function size:0xE0 scope:global -SetVoices__Q23Snd6SystemQ23Snd6Devicei = .text:0x803640C0; // type:function size:0x10C scope:global -SetSndInitsAram__Q23Snd6Systemb = .text:0x803641CC; // type:function size:0x74 scope:global -Init__Q23Snd6Systemi = .text:0x80364240; // type:function size:0x238 scope:global -ReInit__Q23Snd6System = .text:0x80364478; // type:function size:0x178 scope:global -IsInited__Q23Snd6System = .text:0x803645F0; // type:function size:0x18 scope:global -Restore__Q23Snd6System = .text:0x80364608; // type:function size:0x30 scope:global -SetHeap__Q23Snd6MemoryQ23Snd6DevicePvi = .text:0x80364638; // type:function size:0xB0 scope:global -SetHeapThreshold__Q23Snd6MemoryQ23Snd6Devicef = .text:0x803646E8; // type:function size:0xA8 scope:global -gcc2_compiled. = .text:0x80364790; // type:label scope:local -SNDSYS_getopts__FP10SNDSYSOPTS = .text:0x80364790; // type:function size:0x154 scope:global -SNDSYS_setopts__FP10SNDSYSOPTS = .text:0x803648E4; // type:function size:0x12C scope:global -SNDSYSI_init__FPvii = .text:0x80364A10; // type:function size:0x138 scope:global -SNDSYS_restore__Fv = .text:0x80364B48; // type:function size:0xF8 scope:global -SNDSYSI_chanpubinit__Fv = .text:0x80364C40; // type:function size:0x100 scope:global -SNDSYSI_updatesso__FP10SNDSYSOPTS = .text:0x80364D40; // type:function size:0xD4 scope:global -gcc2_compiled. = .text:0x80364E14; // type:label scope:local -iSNDserveraddclient__FPFv_v = .text:0x80364E14; // type:function size:0x2C scope:global -iSNDserverremoveclient__FPFv_v = .text:0x80364E40; // type:function size:0x9C scope:global -SNDSYS_service = .text:0x80364EDC; // type:function size:0x78 scope:global -gcc2_compiled. = .text:0x80364F54; // type:label scope:local -CsisMutexLock__3Sndv = .text:0x80364F54; // type:function size:0x20 scope:global -CsisMutexUnlock__3Sndv = .text:0x80364F74; // type:function size:0x20 scope:global -VectorToCsisMutex__Q23Snd6System = .text:0x80364F94; // type:function size:0x3C scope:global -gcc2_compiled. = .text:0x80364FD0; // type:label scope:local -SNDBANKI_findfreekey__Fv = .text:0x80364FD0; // type:function size:0x84 scope:global -SNDBANKI_playtimbre__FiiPvP11SNDPLAYOPTSP15SNDIPATCHHEADERiii = .text:0x80365054; // type:function size:0x640 scope:global -SNDBANKI_playpatch__FPvP11TAGGEDPATCHiiP11SNDPLAYOPTS = .text:0x80365694; // type:function size:0x260 scope:global -gcc2_compiled. = .text:0x803658F4; // type:label scope:local -SNDCTRL_timemult = .text:0x803658F4; // type:function size:0x98 scope:global -gcc2_compiled. = .text:0x8036598C; // type:label scope:local -SNDI_parsetimbre__FPPvP15SNDIPATCHHEADER = .text:0x8036598C; // type:function size:0x6A4 scope:global -gcc2_compiled. = .text:0x80366030; // type:label scope:local -SNDREAL6_systemtask__3SndPvi = .text:0x80366030; // type:function size:0x20 scope:local -SNDREAL6_abortmsg__3SndPc = .text:0x80366050; // type:function size:0x4 scope:global -VectorToReal6__Q23Snd6System = .text:0x80366054; // type:function size:0x74 scope:global -gcc2_compiled. = .text:0x803660C8; // type:label scope:local -SNDvol = .text:0x803660C8; // type:function size:0x11C scope:global -SetVol__Q23Snd3Hali = .text:0x803661E4; // type:function size:0x8C scope:global -__static_initialization_and_destruction_0 = .text:0x80366270; // type:function size:0x28 scope:local -_GLOBAL_.I._3Snd.MPEGuse_MMX = .text:0x80366298; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x803662C4; // type:label scope:local -SetCustomFx__Q23Snd3HalPvT1 = .text:0x803662C4; // type:function size:0x50 scope:global -Reset__Q23Snd3HalPv = .text:0x80366314; // type:function size:0x44 scope:global -SNDPLATFORM_setfxlevel__Fii = .text:0x80366358; // type:function size:0xC4 scope:global -gcc2_compiled. = .text:0x8036641C; // type:label scope:local -SNDDRV_DSPMixerResetChannel__FP16SNDDRVMIXCHANNEL = .text:0x8036641C; // type:function size:0x44 scope:global -SNDDRV_DSPMixerSetPan__FP6_AXVPBPfUsi = .text:0x80366460; // type:function size:0xD8 scope:global -SNDDRV_DSPMixerSetAuxBus__FP6_AXVPBUsi = .text:0x80366538; // type:function size:0x74 scope:global -SNDDRV_DSPMixerInit__Fi = .text:0x803665AC; // type:function size:0x54 scope:global -SNDDRV_DSPMixerInitChannel__FP6_AXVPBUliUsUsPfUsi = .text:0x80366600; // type:function size:0x1F4 scope:global -SNDDRV_DSPMixerReleaseChannel__FP6_AXVPB = .text:0x803667F4; // type:function size:0x1C scope:global -SNDDRV_DSPMixerSetVol__FP6_AXVPBi = .text:0x80366810; // type:function size:0x28 scope:global -SNDDRV_DSPMixerUpdate__Fv = .text:0x80366838; // type:function size:0x42C scope:global -gcc2_compiled. = .text:0x80366C64; // type:label scope:local -SNDDRV_freenextframe__Fv = .text:0x80366C64; // type:function size:0xA4 scope:global -SNDDRV_mixvoicefree__Fi = .text:0x80366D08; // type:function size:0x2C scope:global -SNDDRV_callbackdropvoice__FPv = .text:0x80366D34; // type:function size:0xE8 scope:global -SNDDRV_allocateaxvoice__Fi = .text:0x80366E1C; // type:function size:0x274 scope:global -SNDDRV_freeaxvoice__Fii = .text:0x80367090; // type:function size:0x114 scope:global -SNDDRV_dmaslotenter__Fi = .text:0x803671A4; // type:function size:0x8C scope:global -SNDDRV_dmcallback__FUl = .text:0x80367230; // type:function size:0x4C scope:global -SNDDRV_dmapost__FUlPvT1Uli = .text:0x8036727C; // type:function size:0x120 scope:global -SNDDRV_restoredma__Fi = .text:0x8036739C; // type:function size:0x98 scope:global -SNDDRV_audiocallback__FPvT0 = .text:0x80367434; // type:function size:0x190 scope:global -SNDDRV_initmixer__Fv = .text:0x803675C4; // type:function size:0xF0 scope:global -SNDDRV_restoremixer__Fv = .text:0x803676B4; // type:function size:0x8C scope:global -SNDDRV_fillbufwithpackets__FiP13SNDDRVPKTCHANP7CHANPUB = .text:0x80367740; // type:function size:0x224 scope:global -SNDDRV_thread__FPv = .text:0x80367964; // type:function size:0x13C scope:global -SNDPLATFORM_outputcaps__Fv = .text:0x80367AA0; // type:function size:0xB8 scope:global -SNDPLATFORM_outputset__Fv = .text:0x80367B58; // type:function size:0x1F0 scope:global -SNDPLATFORM_init__F9StartMode = .text:0x80367D48; // type:function size:0x318 scope:global -SNDPLATFORM_restore__F9StartMode = .text:0x80368060; // type:function size:0x98 scope:global -iSNDserve__Fv = .text:0x803680F8; // type:function size:0x384 scope:global -SNDPLATFORM_getvoicerange__FiPiT1 = .text:0x8036847C; // type:function size:0x44 scope:global -SNDPLATFORM_asyncresolvetimbre__FP15SNDIPATCHHEADERPcPi = .text:0x803684C0; // type:function size:0x38 scope:global -SNDPLATFORM_playtimbre__FP15SNDIPATCHHEADERPviiii = .text:0x803684F8; // type:function size:0x4D8 scope:global -SNDDRV_getmastervoice__Fi = .text:0x803689D0; // type:function size:0x30 scope:global -SNDDRV_getsamplechan__Fi = .text:0x80368A00; // type:function size:0x64 scope:global -SNDPLATFORM_packetoverhead__Fv = .text:0x80368A64; // type:function size:0x8 scope:global -SNDPLATFORM_packetplaycreate__FiPv = .text:0x80368A6C; // type:function size:0xC4 scope:global -SNDPLATFORM_packetplay__FiiiiiP15SNDSAMPLEFORMATP13SNDSAMPLEATTR = .text:0x80368B30; // type:function size:0x2E8 scope:global -SNDPLATFORM_packetplaydestroy__Fi = .text:0x80368E18; // type:function size:0x84 scope:global -SNDPLATFORM_outputlatency__Fv = .text:0x80368E9C; // type:function size:0x8 scope:global -SetVolInternal__Q23Snd3Hali = .text:0x80368EA4; // type:function size:0x14C scope:global -SetDry__Q23Snd3Hali = .text:0x80368FF0; // type:function size:0x3C scope:global -SetPan__Q23Snd3Hali = .text:0x8036902C; // type:function size:0x1F0 scope:global -SNDPLATFORM_setpitch__Fi = .text:0x8036921C; // type:function size:0x158 scope:global -SNDPLATFORM_timemult__Fii = .text:0x80369374; // type:function size:0x8C scope:global -SNDPLATFORM_lowpass__Fii = .text:0x80369400; // type:function size:0xF0 scope:global -SNDPLATFORM_highpass__Fii = .text:0x803694F0; // type:function size:0x88 scope:global -SNDPLATFORM_getcurframe__Fi = .text:0x80369578; // type:function size:0xB0 scope:global -SNDPLATFORM_stop__Fi = .text:0x80369628; // type:function size:0x15C scope:global -SNDPLATFORM_filteradd__FiP12SNDFILTERDEF = .text:0x80369784; // type:function size:0x98 scope:global -SNDPLATFORM_memalloc__Fii = .text:0x8036981C; // type:function size:0x44 scope:global -SNDPLATFORM_memfree__FiUi = .text:0x80369860; // type:function size:0x4C scope:global -SNDPLATFORM_memlimits__Fii = .text:0x803698AC; // type:function size:0x54 scope:global -SNDPLATFORM_memlargestunused__FPi = .text:0x80369900; // type:function size:0x38 scope:global -SNDPLATFORM_download__FiPvT1i = .text:0x80369938; // type:function size:0x54 scope:global -SNDPLATFORM_downloadcomplete__Fi = .text:0x8036998C; // type:function size:0xA8 scope:global -SNDI_mutexalloc__Fv = .text:0x80369A34; // type:function size:0x28 scope:global -SNDI_mutexfree__Fv = .text:0x80369A5C; // type:function size:0x4 scope:global -SNDI_mutexlock__Fv = .text:0x80369A60; // type:function size:0x28 scope:global -SNDI_mutexunlock__Fv = .text:0x80369A88; // type:function size:0x28 scope:global -SNDPLATFORM_ModeSetUp__FP10SNDSYSOPTSQ23Snd10OutputMode = .text:0x80369AB0; // type:function size:0x44 scope:global -gcc2_compiled. = .text:0x80369AF4; // type:label scope:local -MIX_getwetbuffer = .text:0x80369AF4; // type:function size:0x14 scope:global -remap__Fiii = .text:0x80369B08; // type:function size:0x28 scope:global -SNDMIXI_modlapifxadd = .text:0x80369B30; // type:function size:0x358 scope:global -SNDMIXI_restorefx2__FiP16BUSNODE_INSTANCE = .text:0x80369E88; // type:function size:0x13C scope:global -SNDMIXI_initfx__FiPviP16BUSNODE_INSTANCE = .text:0x80369FC4; // type:function size:0x50C scope:global -MIX_createFxglobals = .text:0x8036A4D0; // type:function size:0xA4 scope:global -MIX_destroyFxglobals = .text:0x8036A574; // type:function size:0xB4 scope:global -MIX_initreverb = .text:0x8036A628; // type:function size:0x20C scope:global -MIX_restorereverb = .text:0x8036A834; // type:function size:0x114 scope:global -gcc2_compiled. = .text:0x8036A948; // type:label scope:local -SNDSYS_linkmaincpumixer = .text:0x8036A948; // type:function size:0x84 scope:global -gcc2_compiled. = .text:0x8036A9CC; // type:label scope:local -MIXI_interpolateto0__FPfT0 = .text:0x8036A9CC; // type:function size:0x1A0 scope:global -MIXI_interpolatemix = .text:0x8036AB6C; // type:function size:0x1C8 scope:global -SNDMIX_setmasterlowpass = .text:0x8036AD34; // type:function size:0x4 scope:global -SNDMIXI_volramp__FP11SNDMIXVOICE = .text:0x8036AD38; // type:function size:0x230 scope:global -SNDI_New__FUi = .text:0x8036AF68; // type:function size:0x20 scope:global -SNDI_Delete__FPv = .text:0x8036AF88; // type:function size:0x20 scope:global -MIX_create = .text:0x8036AFA8; // type:function size:0x2C0 scope:global -MIX_destroy = .text:0x8036B268; // type:function size:0xD8 scope:global -MIX_reset = .text:0x8036B340; // type:function size:0x2C scope:global -MIX_playinit = .text:0x8036B36C; // type:function size:0x214 scope:global -MIX_play = .text:0x8036B580; // type:function size:0xA4 scope:global -MIXI_stop__Fi = .text:0x8036B624; // type:function size:0x40 scope:global -MIX_stop = .text:0x8036B664; // type:function size:0x100 scope:global -SNDMIX_setdrygain = .text:0x8036B764; // type:function size:0x34 scope:global -SNDMIX_setwetgain = .text:0x8036B798; // type:function size:0x34 scope:global -MIX_audioslice = .text:0x8036B7CC; // type:function size:0x3B8 scope:global -gcc2_compiled. = .text:0x8036BB84; // type:label scope:local -MIX_filteradd = .text:0x8036BB84; // type:function size:0x88 scope:global -gcc2_compiled. = .text:0x8036BC0C; // type:label scope:local -MIX_getframe = .text:0x8036BC0C; // type:function size:0x48 scope:global -gcc2_compiled. = .text:0x8036BC54; // type:label scope:local -MIX_sethighpass = .text:0x8036BC54; // type:function size:0xD0 scope:global -gcc2_compiled. = .text:0x8036BD24; // type:label scope:local -MIX_setlowpass = .text:0x8036BD24; // type:function size:0x14C scope:global -gcc2_compiled. = .text:0x8036BE70; // type:label scope:local -MIX_setpitch = .text:0x8036BE70; // type:function size:0xBC scope:global -gcc2_compiled. = .text:0x8036BF2C; // type:label scope:local -MIX_settimemult = .text:0x8036BF2C; // type:function size:0x3C scope:global -gcc2_compiled. = .text:0x8036BF68; // type:label scope:local -gcc2_compiled. = .text:0x8036BF68; // type:label scope:local -crossfade__FPfN20ii = .text:0x8036BF68; // type:function size:0x11C scope:local -determineaction__FifPPUcPf = .text:0x8036C084; // type:function size:0x14C scope:local -applyaction__FP16TIMESTRETCHSTATEPPfi = .text:0x8036C1D0; // type:function size:0x154 scope:local -transferframes__FP16TIMESTRETCHSTATEPiPPf = .text:0x8036C324; // type:function size:0x9C scope:local -stretchframesneeded__FPvi = .text:0x8036C3C0; // type:function size:0x124 scope:global -stretch__FPviPfT2 = .text:0x8036C4E4; // type:function size:0x148 scope:global -SFILTER_timestretchsetratio__FP16TIMESTRETCHSTATEi = .text:0x8036C62C; // type:function size:0x40 scope:global -SFILTER_timestretch__FPviT0T0i = .text:0x8036C66C; // type:function size:0x140 scope:global -SFILTER_timestretchrestore__FPv = .text:0x8036C7AC; // type:function size:0x44 scope:global -SFILTER_timestretchinit__FP16TIMESTRETCHSTATEPUci = .text:0x8036C7F0; // type:function size:0xC4 scope:global -gcc2_compiled. = .text:0x8036C8B4; // type:label scope:local -decode16x87 = .text:0x8036C8B4; // type:function size:0x58 scope:global -gcc2_compiled. = .text:0x8036C90C; // type:label scope:local -gcc2_compiled. = .text:0x8036C90C; // type:label scope:local -SNDI_equalpower__FP11SNDGAINPAIRfff = .text:0x8036C90C; // type:function size:0x6C scope:global -SNDI_precalcaztospkrvol__Fv = .text:0x8036C978; // type:function size:0x408 scope:global -SNDI_aztospkrvol__FiPf = .text:0x8036CD80; // type:function size:0x9C scope:global -SNDI_freespkrtable__Fv = .text:0x8036CE1C; // type:function size:0x40 scope:global -SNDI_spkrconfig__Fv = .text:0x8036CE5C; // type:function size:0x1B4 scope:global -gcc2_compiled. = .text:0x8036D010; // type:label scope:local -iSNDdetunetolinear__Fi = .text:0x8036D010; // type:function size:0x8C scope:global -iSNDcalcpitch__Fi = .text:0x8036D09C; // type:function size:0xD4 scope:global -gcc2_compiled. = .text:0x8036D170; // type:label scope:local -SNDCTRL_filteradd = .text:0x8036D170; // type:function size:0x68 scope:global -gcc2_compiled. = .text:0x8036D1D8; // type:label scope:local -SetDefaultAzimuths__Q23Snd4UtilP7CHANPUB = .text:0x8036D1D8; // type:function size:0x70 scope:global -gcc2_compiled. = .text:0x8036D248; // type:label scope:local -SNDREAL_exithandler__Fv = .text:0x8036D248; // type:function size:0x20 scope:global -gcc2_compiled. = .text:0x8036D268; // type:label scope:local -SNDI_getb__FPvi = .text:0x8036D268; // type:function size:0x80 scope:global -gcc2_compiled. = .text:0x8036D2E8; // type:label scope:local -SNDI_gettag__FP10SNDTAGINFO = .text:0x8036D2E8; // type:function size:0xEC scope:global -gcc2_compiled. = .text:0x8036D3D4; // type:label scope:local -iSNDcalcvol__Fi = .text:0x8036D3D4; // type:function size:0x168 scope:global -gcc2_compiled. = .text:0x8036D53C; // type:label scope:local -SNDLINKI_init__FP11SNDLINKLIST = .text:0x8036D53C; // type:function size:0x14 scope:global -SNDLINKI_push__FP11SNDLINKLISTP11SNDLINKNODE = .text:0x8036D550; // type:function size:0x3C scope:global -SNDLINKI_pushtail__FP11SNDLINKLISTP11SNDLINKNODE = .text:0x8036D58C; // type:function size:0x3C scope:global -SNDLINKI_pop__FP11SNDLINKLIST = .text:0x8036D5C8; // type:function size:0x40 scope:global -SNDLINKI_remove__FP11SNDLINKLISTP11SNDLINKNODE = .text:0x8036D608; // type:function size:0x60 scope:global -gcc2_compiled. = .text:0x8036D668; // type:label scope:local -SNDMEM_gethighwater = .text:0x8036D668; // type:function size:0x20 scope:global -gcc2_compiled. = .text:0x8036D688; // type:label scope:local -SNDI_cos__Ff = .text:0x8036D688; // type:function size:0x98 scope:global -gcc2_compiled. = .text:0x8036D720; // type:label scope:local -SNDI_sin__Ff = .text:0x8036D720; // type:function size:0x94 scope:global -gcc2_compiled. = .text:0x8036D7B4; // type:label scope:local -SNDover = .text:0x8036D7B4; // type:function size:0x24 scope:global -gcc2_compiled. = .text:0x8036D7D8; // type:label scope:local -SNDI_pantoazimuth__Fi = .text:0x8036D7D8; // type:function size:0x14 scope:global -gcc2_compiled. = .text:0x8036D7EC; // type:label scope:local -SNDI_patchtohdr__FPvP11TAGGEDPATCHP15SNDSAMPLEFORMATP13SNDSAMPLEATTRP13SNDSAMPLEDESCPUc = .text:0x8036D7EC; // type:function size:0x51C scope:global -gcc2_compiled. = .text:0x8036DD08; // type:label scope:local -SNDPKTPLAYI_voicetopackethandle__Fi = .text:0x8036DD08; // type:function size:0x88 scope:global -gcc2_compiled. = .text:0x8036DD90; // type:label scope:local -SNDPROFILEI_voicesinrange__Fi = .text:0x8036DD90; // type:function size:0x6C scope:global -SNDPROFILE_voices = .text:0x8036DDFC; // type:function size:0x58 scope:global -gcc2_compiled. = .text:0x8036DE54; // type:label scope:local -ReallocBuf__Q23Snd4UtilPPvPiii = .text:0x8036DE54; // type:function size:0x94 scope:global -gcc2_compiled. = .text:0x8036DEE8; // type:label scope:local -randrange__Fi = .text:0x8036DEE8; // type:function size:0x5C scope:global -gcc2_compiled. = .text:0x8036DF44; // type:label scope:local -CODASetNew__3SndPFUi_Pv = .text:0x8036DF44; // type:function size:0xC scope:global -CODASetDelete__3SndPFPv_v = .text:0x8036DF50; // type:function size:0xC scope:global -gcc2_compiled. = .text:0x8036DF5C; // type:label scope:local -SetMemCpy__Q33Snd4Coda6SystemPFPvPCvUi_Pv = .text:0x8036DF5C; // type:function size:0x10 scope:global -gcc2_compiled. = .text:0x8036DF6C; // type:label scope:local -SNDARAM_init__Fi = .text:0x8036DF6C; // type:function size:0x50 scope:global -SNDARAM_setpool__FUii = .text:0x8036DFBC; // type:function size:0x54 scope:global -SNDARAM_restore__Fv = .text:0x8036E010; // type:function size:0x50 scope:global -SNDARAM_constrain__FPUiPi = .text:0x8036E060; // type:function size:0x50 scope:global -SNDARAM_largestfree__FPUi = .text:0x8036E0B0; // type:function size:0x17C scope:global -SNDARAM_alloc__Fi = .text:0x8036E22C; // type:function size:0x1C4 scope:global -SNDARAM_free__FUi = .text:0x8036E3F0; // type:function size:0x9C scope:global -gcc2_compiled. = .text:0x8036E48C; // type:label scope:local -SFILTER_amplf__FPviT0T0i = .text:0x8036E48C; // type:function size:0x94 scope:global -SFILTER_createAMPLF__FP10AMPLFSTATE = .text:0x8036E520; // type:function size:0x40 scope:global -SFILTER_modifyAMPLF__FP10AMPLFSTATEPi = .text:0x8036E560; // type:function size:0x44 scope:global -gcc2_compiled. = .text:0x8036E5A4; // type:label scope:local -SFILTER_bpfFIR8__FPviT0T0i = .text:0x8036E5A4; // type:function size:0x80 scope:global -SFILTER_createBPFFIR8__FP8BPFSTATE = .text:0x8036E624; // type:function size:0x54 scope:global -SFILTER_modifyBPFFIR8__FP8BPFSTATEPi = .text:0x8036E678; // type:function size:0xB8 scope:global -gcc2_compiled. = .text:0x8036E730; // type:label scope:local -SFILTER_echo__FPviT0T0i = .text:0x8036E730; // type:function size:0x1C4 scope:global -SFILTER_echorestore__FPv = .text:0x8036E8F4; // type:function size:0x44 scope:global -SFILTER_createECHO__FP9ECHOSTATE = .text:0x8036E938; // type:function size:0x44 scope:global -SFILTER_modifyECHO__FP9ECHOSTATEPi = .text:0x8036E97C; // type:function size:0xC4 scope:global -gcc2_compiled. = .text:0x8036EA40; // type:label scope:local -SFILTER_ft24_32__FPviT0T0i = .text:0x8036EA40; // type:function size:0x60 scope:global -SFILTER_ft24_32init__FP12FT24_32STATE = .text:0x8036EAA0; // type:function size:0x18 scope:global -gcc2_compiled. = .text:0x8036EAB8; // type:label scope:local -SFILTER_hpfFIR8__FPviT0T0i = .text:0x8036EAB8; // type:function size:0x80 scope:global -SFILTER_createHPFFIR8__FP8HPFSTATE = .text:0x8036EB38; // type:function size:0x54 scope:global -SFILTER_modifyHPFFIR8__FP8HPFSTATEPi = .text:0x8036EB8C; // type:function size:0x84 scope:global -gcc2_compiled. = .text:0x8036EC10; // type:label scope:local -SFILTER_add = .text:0x8036EC10; // type:function size:0x68 scope:global -SFILTER_remove = .text:0x8036EC78; // type:function size:0x7C scope:global -SFILTER_connect = .text:0x8036ECF4; // type:function size:0xC8 scope:global -gcc2_compiled. = .text:0x8036EDBC; // type:label scope:local -calcFIRCoeffs__FP11SNDFIRSTATEi = .text:0x8036EDBC; // type:function size:0x3A8 scope:global -gcc2_compiled. = .text:0x8036F164; // type:label scope:local -SNDI_fir8init__FP11SNDFIRSTATE = .text:0x8036F164; // type:function size:0x2C scope:global -SNDI_fir8__FP11SNDFIRSTATEiPvT2 = .text:0x8036F190; // type:function size:0xC0 scope:global -gcc2_compiled. = .text:0x8036F250; // type:label scope:local -SFILTER_lpfRC__FPviT0T0i = .text:0x8036F250; // type:function size:0xA8 scope:global -SFILTER_createLPFRC__FP10LPFRCSTATE = .text:0x8036F2F8; // type:function size:0x40 scope:global -SFILTER_modifyLPFRC__FP10LPFRCSTATEPi = .text:0x8036F338; // type:function size:0xD0 scope:global -gcc2_compiled. = .text:0x8036F408; // type:label scope:local -SFILTER_lpfFIR8__FPviT0T0i = .text:0x8036F408; // type:function size:0x7C scope:global -SFILTER_createLPFFIR8__FP8LPFSTATE = .text:0x8036F484; // type:function size:0x54 scope:global -SFILTER_modifyLPFFIR8__FP8LPFSTATEPi = .text:0x8036F4D8; // type:function size:0x88 scope:global -gcc2_compiled. = .text:0x8036F560; // type:label scope:local -SFILTER_mixer__FPviT0T0i = .text:0x8036F560; // type:function size:0xEC scope:global -SFILTER_mixerrestore__FPv = .text:0x8036F64C; // type:function size:0x2C scope:global -SFILTER_createMIX__FP10MIXERSTATE = .text:0x8036F678; // type:function size:0x44 scope:global -gcc2_compiled. = .text:0x8036F6BC; // type:label scope:local -resonx87__FP10RESONSTATEiPvT2 = .text:0x8036F6BC; // type:function size:0x130 scope:global -SFILTER_reson__FPviT0T0i = .text:0x8036F7EC; // type:function size:0x80 scope:global -SFILTER_createRESON__FP10RESONSTATE = .text:0x8036F86C; // type:function size:0x48 scope:global -SFILTER_modifyRESON__FP10RESONSTATEPi = .text:0x8036F8B4; // type:function size:0x158 scope:global -gcc2_compiled. = .text:0x8036FA0C; // type:label scope:local -SFILTER_rsfsetpitch__FP8RSFSTATEi = .text:0x8036FA0C; // type:function size:0x8 scope:global -SFILTER_rsf__FPviT0T0i = .text:0x8036FA14; // type:function size:0x2D8 scope:global -SFILTER_rsfinit__FP8RSFSTATEii = .text:0x8036FCEC; // type:function size:0x5C scope:global -gcc2_compiled. = .text:0x8036FD48; // type:label scope:local -SFILTER_splitter__FPviT0T0i = .text:0x8036FD48; // type:function size:0x100 scope:global -SFILTER_splitrestore__FPv = .text:0x8036FE48; // type:function size:0x2C scope:global -SFILTER_createSPLIT__FP10SPLITSTATE = .text:0x8036FE74; // type:function size:0x50 scope:global -gcc2_compiled. = .text:0x8036FEC4; // type:label scope:local -SFILTER_src__FPviT0T0i = .text:0x8036FEC4; // type:function size:0x50 scope:global -SFILTER_initSOURCE__FP8SRCSTATEPv = .text:0x8036FF14; // type:function size:0x1C scope:global -SFILTER_createSOURCE__FP8SRCSTATE = .text:0x8036FF30; // type:function size:0x28 scope:global -gcc2_compiled. = .text:0x8036FF58; // type:label scope:local -MIXI_initunpack16 = .text:0x8036FF58; // type:function size:0x48 scope:global -gcc2_compiled. = .text:0x8036FFA0; // type:label scope:local -MIXI_initunpackmt = .text:0x8036FFA0; // type:function size:0x60 scope:global -gcc2_compiled. = .text:0x80370000; // type:label scope:local -MIXI_initunpackxa = .text:0x80370000; // type:function size:0x48 scope:global -gcc2_compiled. = .text:0x80370048; // type:label scope:local -mixc = .text:0x80370048; // type:function size:0x30 scope:global -gcc2_compiled. = .text:0x80370078; // type:label scope:local -SFILTER_unpackfgetframe__FPv = .text:0x80370078; // type:function size:0x8 scope:global -SFILTER_unpackf__FPviT0T0i = .text:0x80370080; // type:function size:0xD8 scope:global -SFILTER_unpackfinit__FPvP16UNPACKINITPARAMS = .text:0x80370158; // type:function size:0x40 scope:global -gcc2_compiled. = .text:0x80370198; // type:label scope:local -SFILTER_unpacklfgetframe__FPv = .text:0x80370198; // type:function size:0x8 scope:global -SFILTER_unpacklf__FPviT0T0i = .text:0x803701A0; // type:function size:0xBC scope:global -SFILTER_unpacklfinit__FPvP16UNPACKINITPARAMS = .text:0x8037025C; // type:function size:0x44 scope:global -gcc2_compiled. = .text:0x803702A0; // type:label scope:local -SFILTER_unpackgetframemtf__FPv = .text:0x803702A0; // type:function size:0x8 scope:global -SFILTER_unpackmtf__FPviT0T0i = .text:0x803702A8; // type:function size:0x90 scope:global -SFILTER_unpackmtfrestore__FPv = .text:0x80370338; // type:function size:0x2C scope:global -SFILTER_unpackmtfinit__FPvP16UNPACKINITPARAMS = .text:0x80370364; // type:function size:0x100 scope:global -gcc2_compiled. = .text:0x80370464; // type:label scope:local -SFILTER_unpackgetframemtlf__FPv = .text:0x80370464; // type:function size:0x8 scope:global -SFILTER_unpackmtlf__FPviT0T0i = .text:0x8037046C; // type:function size:0xC8 scope:global -SFILTER_unpackmtlfrestore__FPv = .text:0x80370534; // type:function size:0x2C scope:global -SFILTER_unpackmtlfinit__FPvP16UNPACKINITPARAMS = .text:0x80370560; // type:function size:0xE0 scope:global -gcc2_compiled. = .text:0x80370640; // type:label scope:local -SFILTER_unpackmtpf__FPviT0T0i = .text:0x80370640; // type:function size:0x258 scope:global -SFILTER_unpackmtpfrestore__FPv = .text:0x80370898; // type:function size:0x2C scope:global -SFILTER_unpackmtpfinit__FPvP16UNPACKINITPARAMS = .text:0x803708C4; // type:function size:0x90 scope:global -gcc2_compiled. = .text:0x80370954; // type:label scope:local -SFILTER_unpackpf__FPviT0T0i = .text:0x80370954; // type:function size:0x130 scope:global -SFILTER_unpackpfinit__FPvP16UNPACKINITPARAMS = .text:0x80370A84; // type:function size:0x74 scope:global -gcc2_compiled. = .text:0x80370AF8; // type:label scope:local -SFILTER_unpackxaf__FPviT0T0i = .text:0x80370AF8; // type:function size:0x94 scope:global -SFILTER_unpackgetframexaf__FPv = .text:0x80370B8C; // type:function size:0x8 scope:global -SFILTER_unpackxafrestore__FPv = .text:0x80370B94; // type:function size:0x2C scope:global -SFILTER_unpackxafinit__FPvP16UNPACKINITPARAMS = .text:0x80370BC0; // type:function size:0x90 scope:global -gcc2_compiled. = .text:0x80370C50; // type:label scope:local -SFILTER_unpackxalf__FPviT0T0i = .text:0x80370C50; // type:function size:0x288 scope:global -SFILTER_unpackgetframexalf__FPv = .text:0x80370ED8; // type:function size:0x8 scope:global -SFILTER_unpackxalfrestore__FPv = .text:0x80370EE0; // type:function size:0x2C scope:global -SFILTER_unpackxalfinit__FPvP16UNPACKINITPARAMS = .text:0x80370F0C; // type:function size:0xD8 scope:global -gcc2_compiled. = .text:0x80370FE4; // type:label scope:local -SFILTER_unpackxapf__FPviT0T0i = .text:0x80370FE4; // type:function size:0x1B8 scope:global -SFILTER_unpackxapfrestore__FPv = .text:0x8037119C; // type:function size:0x2C scope:global -SFILTER_unpackxapfinit__FPvP16UNPACKINITPARAMS = .text:0x803711C8; // type:function size:0x90 scope:global -gcc2_compiled. = .text:0x80371258; // type:label scope:local -SNDI_patchtohdrgen__FPvPQ29Sndgendef14GENTAGGEDPATCHP15SNDSAMPLEFORMATP13SNDSAMPLEATTRP13SNDSAMPLEDESC = .text:0x80371258; // type:function size:0x208 scope:global -gcc2_compiled. = .text:0x80371460; // type:label scope:local -SNDI_findmult16__Fii = .text:0x80371460; // type:function size:0x34 scope:global -gcc2_compiled. = .text:0x80371494; // type:label scope:local -SNDI_rootof1plusx__Ff = .text:0x80371494; // type:function size:0x90 scope:global -gcc2_compiled. = .text:0x80371524; // type:label scope:local -process_raw_block__3SndPQ23Snd10MXAPACKETF = .text:0x80371524; // type:function size:0x11C scope:global -decodexac__3SndPQ23Snd10MXAPACKETF = .text:0x80371640; // type:function size:0x150 scope:global -__nw__Q23Snd12CEAXABLKDecfUi = .text:0x80371790; // type:function size:0x2C scope:global -__dl__Q23Snd12CEAXABLKDecfPv = .text:0x803717BC; // type:function size:0x2C scope:global -__Q23Snd12CEAXABLKDecf = .text:0x803717E8; // type:function size:0x28 scope:global -Feed__Q23Snd12CEAXABLKDecfPvii = .text:0x80371810; // type:function size:0x3C scope:global -Decode__Q23Snd12CEAXABLKDecfPPfi = .text:0x8037184C; // type:function size:0x1B8 scope:global -GetState__Q23Snd12CEAXABLKDecf = .text:0x80371A04; // type:function size:0x30 scope:global -SetState__Q23Snd12CEAXABLKDecfPQ23Snd8XAFSTATE = .text:0x80371A34; // type:function size:0x14 scope:global -gcc2_compiled. = .text:0x80371A48; // type:label scope:local -__nw__Q23Snd10CMTBLKDecfUi = .text:0x80371A48; // type:function size:0x2C scope:global -__dl__Q23Snd10CMTBLKDecfPv = .text:0x80371A74; // type:function size:0x2C scope:global -getbits__3SndPQ23Snd15UTALKSTATE_CODAi = .text:0x80371AA0; // type:function size:0x60 scope:local -discardbits__3SndPQ23Snd15UTALKSTATE_CODAi = .text:0x80371B00; // type:function size:0x48 scope:global -readsamples__3SndPQ23Snd15UTALKSTATE_CODAiPfi = .text:0x80371B48; // type:function size:0x1F8 scope:global -interpolate__3SndPf = .text:0x80371D40; // type:function size:0x68 scope:local -reftolpc__3SndPfT1 = .text:0x80371DA8; // type:function size:0xF4 scope:local -filter__3SndPQ23Snd15UTALKSTATE_CODAii = .text:0x80371E9C; // type:function size:0x5C0 scope:local -initmut__Q23Snd10CMTBLKDecfPUcPQ23Snd15UTALKSTATE_CODAi = .text:0x8037245C; // type:function size:0x170 scope:global -decodemut__3SndPQ23Snd15UTALKSTATE_CODA = .text:0x803725CC; // type:function size:0x3F8 scope:global -__Q23Snd10CMTBLKDecf = .text:0x803729C4; // type:function size:0x30 scope:global -Feed__Q23Snd10CMTBLKDecfPvii = .text:0x803729F4; // type:function size:0x90 scope:global -Decode__Q23Snd10CMTBLKDecfPPfi = .text:0x80372A84; // type:function size:0x228 scope:global -GetState__Q23Snd10CMTBLKDecf = .text:0x80372CAC; // type:function size:0x40 scope:global -SetState__Q23Snd10CMTBLKDecfPQ23Snd8MTFSTATEi = .text:0x80372CEC; // type:function size:0x1C scope:global -SetCodecVersion__Q23Snd10CMTBLKDecfi = .text:0x80372D08; // type:function size:0x8 scope:global -gcc2_compiled. = .text:0x80372D10; // type:label scope:local -rsflc = .text:0x80372D10; // type:function size:0xC4 scope:global -gcc2_compiled. = .text:0x80372DD4; // type:label scope:local -SNDI_cheapsqrt__Fi = .text:0x80372DD4; // type:function size:0x38 scope:global -SNDI_findprime__Fii = .text:0x80372E0C; // type:function size:0xC4 scope:global -__Q24Csis14FunctionHandle = .text:0x80372ED0; // type:function size:0xC scope:global -Set__Q24Csis14FunctionHandlePCQ24Csis11InterfaceId = .text:0x80372EDC; // type:function size:0x48 scope:global -SetFast__Q24Csis14FunctionHandlePCQ24Csis11InterfaceId = .text:0x80372F24; // type:function size:0xEC scope:global -Valid__Q24Csis14FunctionHandle = .text:0x80373010; // type:function size:0x50 scope:global -__Q24Csis11ClassHandle = .text:0x80373060; // type:function size:0xC scope:global -Set__Q24Csis11ClassHandlePCQ24Csis11InterfaceId = .text:0x8037306C; // type:function size:0x48 scope:global -SetFast__Q24Csis11ClassHandlePCQ24Csis11InterfaceId = .text:0x803730B4; // type:function size:0xEC scope:global -Valid__Q24Csis11ClassHandle = .text:0x803731A0; // type:function size:0x50 scope:global -SetFast__Q24Csis20GlobalVariableHandlePCQ24Csis11InterfaceId = .text:0x803731F0; // type:function size:0xEC scope:global -Valid__Q24Csis20GlobalVariableHandle = .text:0x803732DC; // type:function size:0x50 scope:global -SendParameters__Q24Csis9ClassDataPQ24Csis9Parameter = .text:0x8037332C; // type:function size:0x54 scope:global -SetAllocator__Q24Csis6SystemPQ32EA9Allocator14ICoreAllocator = .text:0x80373380; // type:function size:0x48 scope:global -Alloc__Q24Csis6Systemi = .text:0x803733C8; // type:function size:0x40 scope:global -Free__Q24Csis6SystemPv = .text:0x80373408; // type:function size:0x38 scope:global -AllocFast__Q24Csis6Systemi = .text:0x80373440; // type:function size:0x4C scope:global -FreeFast__Q24Csis6SystemPv = .text:0x8037348C; // type:function size:0x44 scope:global -Init__Q24Csis6System = .text:0x803734D0; // type:function size:0x108 scope:global -Lock__Q24Csis6System = .text:0x803735D8; // type:function size:0x2C scope:global -Unlock__Q24Csis6System = .text:0x80373604; // type:function size:0x2C scope:global -Subscribe__Q24Csis6SystemPv = .text:0x80373630; // type:function size:0x188 scope:global -Unsubscribe__Q24Csis6SystemPv = .text:0x803737B8; // type:function size:0xE8 scope:global -Call__Q24Csis8FunctionPQ24Csis14FunctionHandlePv = .text:0x803738A0; // type:function size:0x48 scope:global -CallFast__Q24Csis8FunctionPQ24Csis14FunctionHandlePv = .text:0x803738E8; // type:function size:0x74 scope:global -Subscribe__Q24Csis8FunctionPQ24Csis14FunctionHandlePQ24Csis14FunctionClient = .text:0x8037395C; // type:function size:0x48 scope:global -SubscribeFast__Q24Csis8FunctionPQ24Csis14FunctionHandlePQ24Csis14FunctionClient = .text:0x803739A4; // type:function size:0x64 scope:global -UnsubscribeFast__Q24Csis8FunctionPQ24Csis14FunctionHandlePQ24Csis14FunctionClient = .text:0x80373A08; // type:function size:0x7C scope:global -CreateInstance__Q24Csis5ClassPQ24Csis11ClassHandlePvPPQ24Csis5Class = .text:0x80373A84; // type:function size:0x50 scope:global -CreateInstanceFast__Q24Csis5ClassPQ24Csis11ClassHandlePvPPQ24Csis5Class = .text:0x80373AD4; // type:function size:0xB8 scope:global -Release__Q24Csis5Class = .text:0x80373B8C; // type:function size:0x40 scope:global -ReleaseFast__Q24Csis5Class = .text:0x80373BCC; // type:function size:0xC8 scope:global -GetRefCount__Q24Csis5ClassPi = .text:0x80373C94; // type:function size:0x10 scope:global -SetMemberData__Q24Csis5ClassPv = .text:0x80373CA4; // type:function size:0x48 scope:global -SetMemberDataFast__Q24Csis5ClassPv = .text:0x80373CEC; // type:function size:0x24 scope:global -SubscribeConstructorFast__Q24Csis5ClassPQ24Csis11ClassHandlePQ24Csis22ClassConstructorClient = .text:0x80373D10; // type:function size:0x64 scope:global -UnsubscribeConstructor__Q24Csis5ClassPQ24Csis11ClassHandlePQ24Csis22ClassConstructorClient = .text:0x80373D74; // type:function size:0x48 scope:global -UnsubscribeConstructorFast__Q24Csis5ClassPQ24Csis11ClassHandlePQ24Csis22ClassConstructorClient = .text:0x80373DBC; // type:function size:0x7C scope:global -SubscribeDestructor__Q24Csis5ClassPQ24Csis21ClassDestructorClient = .text:0x80373E38; // type:function size:0x48 scope:global -SubscribeDestructorFast__Q24Csis5ClassPQ24Csis21ClassDestructorClient = .text:0x80373E80; // type:function size:0x3C scope:global -UnsubscribeDestructor__Q24Csis5ClassPQ24Csis21ClassDestructorClient = .text:0x80373EBC; // type:function size:0x48 scope:global -UnsubscribeDestructorFast__Q24Csis5ClassPQ24Csis21ClassDestructorClient = .text:0x80373F04; // type:function size:0xCC scope:global -SubscribeMemberData__Q24Csis5ClassPQ24Csis14FunctionClient = .text:0x80373FD0; // type:function size:0x48 scope:global -SubscribeMemberDataFast__Q24Csis5ClassPQ24Csis14FunctionClient = .text:0x80374018; // type:function size:0x3C scope:global -UnsubscribeMemberData__Q24Csis5ClassPQ24Csis14FunctionClient = .text:0x80374054; // type:function size:0x48 scope:global -UnsubscribeMemberDataFast__Q24Csis5ClassPQ24Csis14FunctionClient = .text:0x8037409C; // type:function size:0xCC scope:global -SetFast__Q24Csis14GlobalVariablePQ24Csis20GlobalVariableHandlePv = .text:0x80374168; // type:function size:0x88 scope:global -SubscribeFast__Q24Csis14GlobalVariablePQ24Csis20GlobalVariableHandlePQ24Csis14FunctionClient = .text:0x803741F0; // type:function size:0x78 scope:global -UnsubscribeFast__Q24Csis14GlobalVariablePQ24Csis20GlobalVariableHandlePQ24Csis14FunctionClient = .text:0x80374268; // type:function size:0x7C scope:global -__static_initialization_and_destruction_0 = .text:0x803742E4; // type:function size:0x28 scope:local -_._Q24Csis24IAllocatorToICoreAdaptor = .text:0x8037430C; // type:function size:0x10 scope:global -Release__Q24Csis24IAllocatorToICoreAdaptor = .text:0x8037431C; // type:function size:0x70 scope:global -Alloc__Q24Csis24IAllocatorToICoreAdaptorUiRCQ22EA12TagValuePair = .text:0x8037438C; // type:function size:0x48 scope:global -Free__Q24Csis24IAllocatorToICoreAdaptorPvUi = .text:0x803743D4; // type:function size:0x40 scope:global -AddRef__Q24Csis24IAllocatorToICoreAdaptor = .text:0x80374414; // type:function size:0x8 scope:global -Alloc__Q24Csis24ICoreToIAllocatorAdaptorUiPCcUi = .text:0x8037441C; // type:function size:0x54 scope:global -Alloc__Q24Csis24ICoreToIAllocatorAdaptorUiPCcUiUiUi = .text:0x80374470; // type:function size:0x54 scope:global -Free__Q24Csis24ICoreToIAllocatorAdaptorPvUi = .text:0x803744C4; // type:function size:0x40 scope:global -_GLOBAL_.I._4Csis.gIsAllocSet = .text:0x80374504; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x80374530; // type:label scope:local -PATH_control__FiUi = .text:0x80374530; // type:function size:0xC4 scope:global -PATH_pause__FiUc = .text:0x803745F4; // type:function size:0xEC scope:global -PATH_trackstatus__FUi = .text:0x803746E0; // type:function size:0x24 scope:global -PATH_status__FiP10PATHSTATUS = .text:0x80374704; // type:function size:0x78 scope:global -PATHI_status__FP9PATHTRACKP10PATHSTATUS = .text:0x8037477C; // type:function size:0x48 scope:global -PATH_stop__Fi = .text:0x803747C4; // type:function size:0xB4 scope:global -PATHI_stop__FP9PATHTRACK = .text:0x80374878; // type:function size:0x5C scope:global -gcc2_compiled. = .text:0x803748D4; // type:label scope:local -PATHI_addevent__FUiP9PATHEVENT = .text:0x803748D4; // type:function size:0x164 scope:global -PATH_event__FiUi = .text:0x80374A38; // type:function size:0x134 scope:global -PATH_clearallevents__Fi = .text:0x80374B6C; // type:function size:0xAC scope:global -PATHI_copyevent__FP9PATHEVENT = .text:0x80374C18; // type:function size:0xAC scope:global -PATHI_releaseevent__Fi15PATHEVENTRESULT = .text:0x80374CC4; // type:function size:0x134 scope:global -PATHI_removeevent__FP9PATHEVENT = .text:0x80374DF8; // type:function size:0xBC scope:global -PATHI_moveevent__FP9PATHEVENTT0 = .text:0x80374EB4; // type:function size:0x5C scope:global -PATHI_seteventfilter__FP9PATHEVENTi = .text:0x80374F10; // type:function size:0x70 scope:global -PATHI_clearalleventfilters__Fv = .text:0x80374F80; // type:function size:0x5C scope:global -PATHI_serviceevent__Fi = .text:0x80374FDC; // type:function size:0xB8 scope:global -PATHI_serviceeventqueue__Fv = .text:0x80375094; // type:function size:0x100 scope:global -PATHI_eventtakespriority__Fi = .text:0x80375194; // type:function size:0x118 scope:global -gcc2_compiled. = .text:0x803752AC; // type:label scope:local -PATHI_lock__Fv = .text:0x803752AC; // type:function size:0x4C scope:global -PATHI_unlock__Fv = .text:0x803752F8; // type:function size:0x30 scope:global -PATHI_init__Fv = .text:0x80375328; // type:function size:0xBC scope:global -PATH_shutdown__Fv = .text:0x803753E4; // type:function size:0xFC scope:global -PATHI_memalloc__Fi = .text:0x803754E0; // type:function size:0x3C scope:global -PATHI_memfree__FPv = .text:0x8037551C; // type:function size:0x30 scope:global -PATH_addmapfile__FPc = .text:0x8037554C; // type:function size:0x244 scope:global -PATH_callbacks__FPFii_vPFPv15PATHEVENTRESULT_vPFiii_v = .text:0x80375790; // type:function size:0x10 scope:global -PATH_destroy__Fi = .text:0x803757A0; // type:function size:0x12C scope:global -PATH_setnamedvalue__FiPci = .text:0x803758CC; // type:function size:0x154 scope:global -PATH_gettrackimp__Fi = .text:0x80375A20; // type:function size:0x34 scope:global -PATHI_bytesperms__Fi = .text:0x80375A54; // type:function size:0x174 scope:global -gcc2_compiled. = .text:0x80375BC8; // type:label scope:local -__10PathToReal = .text:0x80375BC8; // type:function size:0x24 scope:global -_._10PathToReal = .text:0x80375BEC; // type:function size:0x34 scope:global -Alloc__16PathToIAllocatori = .text:0x80375C20; // type:function size:0x54 scope:global -Free__16PathToIAllocatorPv = .text:0x80375C74; // type:function size:0x48 scope:global -PATH_setallocator__FPQ32EA9Allocator10IAllocatorRCQ22EA12TagValuePair = .text:0x80375CBC; // type:function size:0x40 scope:global -__static_initialization_and_destruction_0 = .text:0x80375CFC; // type:function size:0x34 scope:local -_._Q24Path11IPathToReal = .text:0x80375D30; // type:function size:0x34 scope:global -SetAbortMessageFunc__Q24Path11IPathToRealPFPCce_v = .text:0x80375D64; // type:function size:0x8 scope:global -SetDebugPrintFunc__Q24Path11IPathToRealPFPCce_i = .text:0x80375D6C; // type:function size:0x8 scope:global -SetLogPrintFunc__Q24Path11IPathToRealPFPCce_i = .text:0x80375D74; // type:function size:0x8 scope:global -SetSynchMode__Q24Path11IPathToRealQ24Path9SynchMode = .text:0x80375D7C; // type:function size:0x8 scope:global -GetSynchMode__Q24Path11IPathToReal = .text:0x80375D84; // type:function size:0x8 scope:global -_GLOBAL_.I._16PathToIAllocator.memimp = .text:0x80375D8C; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x80375DB8; // type:label scope:local -PATH_vectortoreal6__Fv = .text:0x80375DB8; // type:function size:0x54 scope:global -__nw__11PathToReal6Ui = .text:0x80375E0C; // type:function size:0x20 scope:global -__dl__11PathToReal6Pv = .text:0x80375E2C; // type:function size:0x20 scope:global -__11PathToReal6 = .text:0x80375E4C; // type:function size:0x74 scope:global -_._11PathToReal6 = .text:0x80375EC0; // type:function size:0x70 scope:global -TaskService__11PathToReal6Pvi = .text:0x80375F30; // type:function size:0x20 scope:global -GetMinStreamBufferSize__11PathToReal6i = .text:0x80375F50; // type:function size:0x30 scope:global -GetMilliseconds__11PathToReal6 = .text:0x80375F80; // type:function size:0xAC scope:global -FileExists__11PathToReal6PCc = .text:0x8037602C; // type:function size:0x24 scope:global -FileSize__11PathToReal6PCc = .text:0x80376050; // type:function size:0x24 scope:global -LoadFile__11PathToReal6PCcRii = .text:0x80376074; // type:function size:0xA0 scope:global -LoadFileSync__11PathToReal6PCci = .text:0x80376114; // type:function size:0x30 scope:global -LoadFileDone__11PathToReal6iRPc = .text:0x80376144; // type:function size:0x8 scope:global -gcc2_compiled. = .text:0x8037614C; // type:label scope:local -PATH_milliseconds__Fv = .text:0x8037614C; // type:function size:0x44 scope:global -PATHI_switchproject__Fii = .text:0x80376190; // type:function size:0x60 scope:global -PATHI_switchvoice__FUi = .text:0x803761F0; // type:function size:0x8C scope:global -PATHI_sortprojects__Fv = .text:0x8037627C; // type:function size:0x1BC scope:global -PATHI_serviceproject__Fv = .text:0x80376438; // type:function size:0x2B8 scope:global -PATHI_service__Fc = .text:0x803766F0; // type:function size:0x90 scope:global -PATHI_servicetask__Fv = .text:0x80376780; // type:function size:0x24 scope:global -PATHI_servicetimer__Fv = .text:0x803767A4; // type:function size:0x4C scope:global -gcc2_compiled. = .text:0x803767F0; // type:label scope:local -PATH_vectortosnd__Fv = .text:0x803767F0; // type:function size:0x54 scope:global -CreateStreamTrack__Q24Path9PathToSndPPQ24Path10IPathTrackifi = .text:0x80376844; // type:function size:0x194 scope:global -CreateBankTrack__Q24Path9PathToSndPPQ24Path10IPathTracki = .text:0x803769D8; // type:function size:0x44 scope:global -__nw__Q24Path9PathToSndUi = .text:0x80376A1C; // type:function size:0x20 scope:global -__dl__Q24Path9PathToSndPv = .text:0x80376A3C; // type:function size:0x20 scope:global -__Q24Path9PathToSnd = .text:0x80376A5C; // type:function size:0x44 scope:global -_._Q24Path9PathToSnd = .text:0x80376AA0; // type:function size:0x60 scope:global -GetDefaultPlayOpts__Q24Path9PathToSndPv = .text:0x80376B00; // type:function size:0x24 scope:global -__Q24Path12PathTrackSnd = .text:0x80376B24; // type:function size:0x8C scope:global -_._Q24Path12PathTrackSnd = .text:0x80376BB0; // type:function size:0x4C scope:global -GetPitchMult__Q24Path12PathTrackSnd = .text:0x80376BFC; // type:function size:0xC scope:global -GetStretchMult__Q24Path12PathTrackSnd = .text:0x80376C08; // type:function size:0xC scope:global -GetPathStatus__Q24Path12PathTrackSndP10PATHSTATUS = .text:0x80376C14; // type:function size:0x1C8 scope:global -ReadyForNewRequest__Q24Path12PathTrackSnd = .text:0x80376DDC; // type:function size:0x50 scope:global -TimeBuffered__Q24Path12PathTrackSnd = .text:0x80376E2C; // type:function size:0x8 scope:global -GetVolume__Q24Path12PathTrackSnd = .text:0x80376E34; // type:function size:0x8 scope:global -SetVolume__Q24Path12PathTrackSndi = .text:0x80376E3C; // type:function size:0x74 scope:global -SetDryLevel__Q24Path12PathTrackSndi = .text:0x80376EB0; // type:function size:0x8 scope:global -SetFXSendLevel__Q24Path12PathTrackSndii = .text:0x80376EB8; // type:function size:0x8 scope:global -SetPitchMult__Q24Path12PathTrackSndi = .text:0x80376EC0; // type:function size:0x74 scope:global -SetStretchMult__Q24Path12PathTrackSndi = .text:0x80376F34; // type:function size:0x78 scope:global -SetName__Q24Path12PathTrackSndPCc = .text:0x80376FAC; // type:function size:0x28 scope:global -Pause__Q24Path12PathTrackSndi = .text:0x80376FD4; // type:function size:0x84 scope:global -__nw__Q24Path16PathTrackSndBankUi = .text:0x80377058; // type:function size:0x20 scope:global -__dl__Q24Path16PathTrackSndBankPv = .text:0x80377078; // type:function size:0x20 scope:global -__Q24Path16PathTrackSndBanki = .text:0x80377098; // type:function size:0xA8 scope:global -_._Q24Path16PathTrackSndBank = .text:0x80377140; // type:function size:0x8C scope:global -AttachSubBank__Q24Path16PathTrackSndBankii = .text:0x803771CC; // type:function size:0xA0 scope:global -DetachSubBank__Q24Path16PathTrackSndBanki = .text:0x8037726C; // type:function size:0x78 scope:global -CheckStatus__Q24Path16PathTrackSndBank = .text:0x803772E4; // type:function size:0x20C scope:global -SetVolume__Q24Path16PathTrackSndBanki = .text:0x803774F0; // type:function size:0x64 scope:global -SetDryLevel__Q24Path16PathTrackSndBanki = .text:0x80377554; // type:function size:0x64 scope:global -SetFXSendLevel__Q24Path16PathTrackSndBankii = .text:0x803775B8; // type:function size:0x68 scope:global -SetPitchMult__Q24Path16PathTrackSndBanki = .text:0x80377620; // type:function size:0x64 scope:global -SetStretchMult__Q24Path16PathTrackSndBanki = .text:0x80377684; // type:function size:0x60 scope:global -TimeRemaining__Q24Path16PathTrackSndBanki = .text:0x803776E4; // type:function size:0x18 scope:global -Play__Q24Path16PathTrackSndBankiUiiiUi = .text:0x803776FC; // type:function size:0x114 scope:global -Stop__Q24Path16PathTrackSndBank = .text:0x80377810; // type:function size:0x6C scope:global -AddSubBank__Q24Path16PathTrackSndBankiPv = .text:0x8037787C; // type:function size:0x60 scope:global -AddSubBankDone__Q24Path16PathTrackSndBanki = .text:0x803778DC; // type:function size:0x54 scope:global -GetSubBankPtr__Q24Path16PathTrackSndBanki = .text:0x80377930; // type:function size:0x78 scope:global -GetAvailSubBankPtr__Q24Path16PathTrackSndBank = .text:0x803779A8; // type:function size:0x74 scope:global -RemoveSubBank__Q24Path16PathTrackSndBanki = .text:0x80377A1C; // type:function size:0x90 scope:global -DetachSubBankHeader__Q24Path16PathTrackSndBankii = .text:0x80377AAC; // type:function size:0x90 scope:global -__nw__Q24Path18PathTrackSndStreamUi = .text:0x80377B3C; // type:function size:0x20 scope:global -__dl__Q24Path18PathTrackSndStreamPv = .text:0x80377B5C; // type:function size:0x20 scope:global -__Q24Path18PathTrackSndStreami = .text:0x80377B7C; // type:function size:0xCC scope:global -_._Q24Path18PathTrackSndStream = .text:0x80377C48; // type:function size:0x7C scope:global -AttachStreamInstance__Q24Path18PathTrackSndStreamiPc = .text:0x80377CC4; // type:function size:0x30 scope:global -DetachStreamInstance__Q24Path18PathTrackSndStreamRPc = .text:0x80377CF4; // type:function size:0x34 scope:global -GetPathStatus__Q24Path18PathTrackSndStreamP10PATHSTATUS = .text:0x80377D28; // type:function size:0x47C scope:global -CheckStatus__Q24Path18PathTrackSndStream = .text:0x803781A4; // type:function size:0x2A0 scope:global -SetVolume__Q24Path18PathTrackSndStreami = .text:0x80378444; // type:function size:0x94 scope:global -SetDryLevel__Q24Path18PathTrackSndStreami = .text:0x803784D8; // type:function size:0x5C scope:global -SetFXSendLevel__Q24Path18PathTrackSndStreamii = .text:0x80378534; // type:function size:0x64 scope:global -ModifyHold__Q24Path18PathTrackSndStreami = .text:0x80378598; // type:function size:0x28 scope:global -SetPitchMult__Q24Path18PathTrackSndStreami = .text:0x803785C0; // type:function size:0x64 scope:global -SetStretchMult__Q24Path18PathTrackSndStreami = .text:0x80378624; // type:function size:0x60 scope:global -StreamCache__Q24Path18PathTrackSndStreamPci = .text:0x80378684; // type:function size:0xC scope:global -TimeRemaining__Q24Path18PathTrackSndStreami = .text:0x80378690; // type:function size:0x44 scope:global -Play__Q24Path18PathTrackSndStreamiUiiiUi = .text:0x803786D4; // type:function size:0x118 scope:global -Stop__Q24Path18PathTrackSndStream = .text:0x803787EC; // type:function size:0x60 scope:global -SetFilePath__Q24Path18PathTrackSndStreamPc = .text:0x8037884C; // type:function size:0x5C scope:global -_._Q24Path10IPathToSnd = .text:0x803788A8; // type:function size:0x34 scope:global -UpdateStatus__Q24Path12PathTrackSnd = .text:0x803788DC; // type:function size:0xC scope:global -StreamCache__Q24Path12PathTrackSndPci = .text:0x803788E8; // type:function size:0x4 scope:global -ModifyHold__Q24Path12PathTrackSndi = .text:0x803788EC; // type:function size:0x8 scope:global -gcc2_compiled. = .text:0x803788F4; // type:label scope:local -PATH_createstreamtrack__FiPci = .text:0x803788F4; // type:function size:0x7C scope:global -PATH_createstreamimp__Fiif = .text:0x80378970; // type:function size:0x1A8 scope:global -PATHI_createtrack__FiPc = .text:0x80378B18; // type:function size:0x74 scope:global -PATHI_inittrack__FiPc = .text:0x80378B8C; // type:function size:0x2A8 scope:global -PATHI_gettrackptr__FUi = .text:0x80378E34; // type:function size:0xA8 scope:global -PATHI_getmastertrack__Fv = .text:0x80378EDC; // type:function size:0xBC scope:global -PATH_numtracks__FUi = .text:0x80378F98; // type:function size:0x74 scope:global -PATHI_mainvoice__FP9PATHTRACKi = .text:0x8037900C; // type:function size:0x98 scope:global -PATHI_statusall__Fi = .text:0x803790A4; // type:function size:0xE4 scope:global -__Q24Path10IPathTrack = .text:0x80379188; // type:function size:0x58 scope:global -_._Q24Path10IPathTrack = .text:0x803791E0; // type:function size:0x34 scope:global -GetNumSubBanks__Q24Path10IPathTrack = .text:0x80379214; // type:function size:0x1C scope:global -GetMaxSubBanks__Q24Path10IPathTrack = .text:0x80379230; // type:function size:0x8 scope:global -GetSubBankPtr__Q24Path10IPathTracki = .text:0x80379238; // type:function size:0x8 scope:global -GetAvailSubBankPtr__Q24Path10IPathTrack = .text:0x80379240; // type:function size:0x8 scope:global -AddSubBank__Q24Path10IPathTrackiPv = .text:0x80379248; // type:function size:0x8 scope:global -AddSubBankDone__Q24Path10IPathTracki = .text:0x80379250; // type:function size:0x8 scope:global -DetachSubBankHeader__Q24Path10IPathTrackii = .text:0x80379258; // type:function size:0x8 scope:global -RemoveSubBank__Q24Path10IPathTracki = .text:0x80379260; // type:function size:0x8 scope:global -SetTrackInfo__Q24Path10IPathTrackP13PATHTRACKINFO = .text:0x80379268; // type:function size:0x8 scope:global -GetVolume__Q24Path10IPathTrack = .text:0x80379270; // type:function size:0x8 scope:global -GetDryLevel__Q24Path10IPathTrack = .text:0x80379278; // type:function size:0x8 scope:global -GetFXSendLevel__Q24Path10IPathTracki = .text:0x80379280; // type:function size:0x8 scope:global -GetHandle__Q24Path10IPathTrack = .text:0x80379288; // type:function size:0x8 scope:global -GetPlayOpts__Q24Path10IPathTrack = .text:0x80379290; // type:function size:0x8 scope:global -SetFilePath__Q24Path10IPathTrackPc = .text:0x80379298; // type:function size:0x4 scope:global -gcc2_compiled. = .text:0x8037929C; // type:label scope:local -PATH_volume__FiSc = .text:0x8037929C; // type:function size:0x128 scope:global -PATHI_volume__FP9PATHTRACKSc = .text:0x803793C4; // type:function size:0x84 scope:global -PATHI_fade__FP9PATHTRACKiii = .text:0x80379448; // type:function size:0xCC scope:global -PATHI_customsfxfade__FP9PATHTRACKiii = .text:0x80379514; // type:function size:0x68 scope:global -PATHI_customdrylevelfade__FP9PATHTRACKiii = .text:0x8037957C; // type:function size:0x64 scope:global -PATHI_custompitchfade__FP9PATHTRACKiii = .text:0x803795E0; // type:function size:0x88 scope:global -PATHI_customstretchfade__FP9PATHTRACKiii = .text:0x80379668; // type:function size:0x8C scope:global -PATHI_setfadevolume__FP9PATHTRACK = .text:0x803796F4; // type:function size:0x2A4 scope:global -PATHI_setsfxfadevolume__FP9PATHTRACK = .text:0x80379998; // type:function size:0x254 scope:global -PATHI_setdrylevelfadevolume__FP9PATHTRACK = .text:0x80379BEC; // type:function size:0x244 scope:global -PATHI_setpitchfadevolume__FP9PATHTRACK = .text:0x80379E30; // type:function size:0x244 scope:global -PATHI_setstretchfadevolume__FP9PATHTRACK = .text:0x8037A074; // type:function size:0x244 scope:global -gcc2_compiled. = .text:0x8037A2B8; // type:label scope:local -PATHI_serviceaction__FP9PATHEVENTP10PATHACTION = .text:0x8037A2B8; // type:function size:0xCB4 scope:global -PATHI_conditiondone__FP10PATHACTIONiT0 = .text:0x8037AF6C; // type:function size:0x88 scope:global -PATHI_restoretolastwhile__FP10PATHACTIONP9PATHEVENT = .text:0x8037AFF4; // type:function size:0x9C scope:global -PATHI_trackstatus__FP9PATHTRACK = .text:0x8037B090; // type:function size:0x11C scope:global -PATHI_getvalue__FiiP9PATHTRACKP9PATHEVENT = .text:0x8037B1AC; // type:function size:0x3D4 scope:global -PATHI_setvalue__FiiiP9PATHTRACKP9PATHEVENT = .text:0x8037B580; // type:function size:0x2C0 scope:global -PATHI_loadbank__FP9PATHTRACKi = .text:0x8037B840; // type:function size:0x334 scope:global -PATHI_subbankready__FP9PATHTRACKi = .text:0x8037BB74; // type:function size:0x184 scope:global -PATHI_loadbankdata__FP9PATHTRACKii = .text:0x8037BCF8; // type:function size:0x18C scope:global -PATHI_unloadbank__FP9PATHTRACKi = .text:0x8037BE84; // type:function size:0x168 scope:global -PATHI_unloadmostneglectedsubbank__FP9PATHTRACK = .text:0x8037BFEC; // type:function size:0xC0 scope:global -PATHI_printf__FPce = .text:0x8037C0AC; // type:function size:0x4C scope:global -gcc2_compiled. = .text:0x8037C0F8; // type:label scope:local -PATHI_sampleoffset__Fi = .text:0x8037C0F8; // type:function size:0x78 scope:global -PATHI_beatinfo__FP9PATHTRACKP12PATHBEATINFO = .text:0x8037C170; // type:function size:0xDC scope:global -PATHI_calcwaitbeat__FiiiP12PATHBEATINFO = .text:0x8037C24C; // type:function size:0x150 scope:global -PATHI_choosesynchtime__FiRC12PATHFINDNODERC12PATHBEATINFORUi = .text:0x8037C39C; // type:function size:0x2A8 scope:global -PATHI_timeremaining__FP9PATHTRACK = .text:0x8037C644; // type:function size:0x6C scope:global -PATHI_pickclosestbranch__FiiP14PATHFINDBRANCH = .text:0x8037C6B0; // type:function size:0x7C scope:global -PATHI_nextnode__Fiii = .text:0x8037C72C; // type:function size:0x134 scope:global -PATHI_enternode__Fiiii = .text:0x8037C860; // type:function size:0x2AC scope:global -PATHI_routenode__Fii = .text:0x8037CB0C; // type:function size:0xA4 scope:global -PATHI_seeknextnode__Fi = .text:0x8037CBB0; // type:function size:0x234 scope:global -PATHI_queuenode__FP9PATHTRACK = .text:0x8037CDE4; // type:function size:0x380 scope:global -gcc2_compiled. = .text:0x8037D164; // type:label scope:local -PATHI_random__Fv = .text:0x8037D164; // type:function size:0x108 scope:global -gcc2_compiled. = .text:0x8037D26C; // type:label scope:local -iSPCH_InitBanks__Fv = .text:0x8037D26C; // type:function size:0x28 scope:global -SPCH_GetBankPtrMemSize__Fi = .text:0x8037D294; // type:function size:0x8 scope:global -SPCH_InitBankMem__FiPc = .text:0x8037D29C; // type:function size:0x48 scope:global -iSPCH_FindInsertPosition__FP10VOXBANKHDR = .text:0x8037D2E4; // type:function size:0x18C scope:local -iSPCH_FindBank__FUsRi = .text:0x8037D470; // type:function size:0x98 scope:global -iSPCH_FindSubBank__FUsUsRi = .text:0x8037D508; // type:function size:0xCC scope:global -iSPCH_TestSubBankBounds__FiUi = .text:0x8037D5D4; // type:function size:0x50 scope:global -iSPCH_FindBankIndexFromHandle__Fi = .text:0x8037D624; // type:function size:0x4C scope:global -iSPCHBank_AddToQueue__FP10VOXBANKHDRi = .text:0x8037D670; // type:function size:0x88 scope:global -iSPCHBank_GetSampleTimeInQueue__FP10VOXBANKHDRi = .text:0x8037D6F8; // type:function size:0x9C scope:global -iSPCH_GetStartSample__FUiii = .text:0x8037D794; // type:function size:0x2C scope:global -iSPCH_SetCycleBits__FP10VOXBANKHDR = .text:0x8037D7C0; // type:function size:0xE0 scope:global -SPCH_AddBank__FPc = .text:0x8037D8A0; // type:function size:0xE8 scope:global -gcc2_compiled. = .text:0x8037D988; // type:label scope:local -gcc2_compiled. = .text:0x8037D988; // type:label scope:local -SPCH_MakeEventSpec__Fiii = .text:0x8037D988; // type:function size:0x1C scope:global -iSPCH_SearchEventDat__FP7VoxDatai = .text:0x8037D9A4; // type:function size:0x48 scope:local -iSPCH_FindEventDatInfo__FP9EventSpecPP12EventDatInfo = .text:0x8037D9EC; // type:function size:0x64 scope:global -iSPCH_FindEvent__FP9EventSpec = .text:0x8037DA50; // type:function size:0x54 scope:global -iSPCH_FindEventChannel__FP9EventSpecPUi = .text:0x8037DAA4; // type:function size:0x50 scope:global -iSPCH_GetDatID__FP9EventSpecPUi = .text:0x8037DAF4; // type:function size:0x54 scope:global -iSPCH_GetGlobalMatchParmsArray__FP9EventSpecPPUc = .text:0x8037DB48; // type:function size:0x68 scope:global -iSPCH_InitEventDat__Fv = .text:0x8037DBB0; // type:function size:0x30 scope:global -iSPCH_GetFilterLength__FP9EventSpec = .text:0x8037DBE0; // type:function size:0x48 scope:global -iSPCH_InitEventQueue__Fv = .text:0x8037DC28; // type:function size:0xCC scope:global -iSPCH_FindEventSlot__FUiUi = .text:0x8037DCF4; // type:function size:0x128 scope:local -iSPCH_CheckLastEventIndex__FUi = .text:0x8037DE1C; // type:function size:0x24 scope:local -iSPCH_AddEvent__FPUi = .text:0x8037DE40; // type:function size:0x180 scope:global -SPCH_AddEventV__Fiie = .text:0x8037DFC0; // type:function size:0x14C scope:global -iSPCH_InitFollowData__FP19SPCHType_FollowData = .text:0x8037E10C; // type:function size:0x10 scope:local -iSPCH_EventInFollowGroup__FUsP19SPCHType_FollowData = .text:0x8037E11C; // type:function size:0x50 scope:local -iSPCH_ChooseEventSearch__FP19SPCHType_FollowDataUi = .text:0x8037E16C; // type:function size:0x1C0 scope:local -iSPCH_ChooseEvent__FUi = .text:0x8037E32C; // type:function size:0x160 scope:local -iSPCH_ClearEvent__Fi = .text:0x8037E48C; // type:function size:0xA0 scope:global -iSPCH_ClearOldEvents__Fi = .text:0x8037E52C; // type:function size:0xC4 scope:local -iSPCH_Callback_EventRule__FP9EventSpec = .text:0x8037E5F0; // type:function size:0x40 scope:local -SPCH_PlayLastEvent__FUi = .text:0x8037E630; // type:function size:0xA0 scope:global -SPCH_Play__FUi = .text:0x8037E6D0; // type:function size:0x7C scope:global -SPCH_Choose__FUi = .text:0x8037E74C; // type:function size:0xC8 scope:global -gcc2_compiled. = .text:0x8037E814; // type:label scope:local -SPCH_SetMemCallbacks__FPFUi_PvPFPv_v = .text:0x8037E814; // type:function size:0x14 scope:global -iSPCH_MemAlloc__FUi = .text:0x8037E828; // type:function size:0x40 scope:global -iSPCH_MemFree__FPv = .text:0x8037E868; // type:function size:0x34 scope:global -iSPCH_InitInGame__Fv = .text:0x8037E89C; // type:function size:0x34 scope:global -SPCH_GetSampleDataRate__Fii15CompressionType = .text:0x8037E8D0; // type:function size:0x6C scope:global -SPCH_InitRuleCallbacks__FPFP9EventSpeciii_iPFP9EventSpeciii_v = .text:0x8037E93C; // type:function size:0x2C scope:global -iSPCH_InitCallbacks__Fv = .text:0x8037E968; // type:function size:0x24 scope:local -SPCH_InitReparmCallback__FPFiPUi_i = .text:0x8037E98C; // type:function size:0x24 scope:global -SPCH_InitEventRuleCallback__FPFP9EventSpec_24SPCHType_EventRuleResult = .text:0x8037E9B0; // type:function size:0x24 scope:global -SPCH_Init__FPFP26SPCHType_SampleRequestData_iUii = .text:0x8037E9D4; // type:function size:0xEC scope:global -gcc2_compiled. = .text:0x8037EAC0; // type:label scope:local -SPCH_GetEventDatInfo__FPcPiT1 = .text:0x8037EAC0; // type:function size:0x14 scope:global -iSPCH_PostMatchParmValue__FP11VoxSentenceP9VoxPhrasePUc = .text:0x8037EAD4; // type:function size:0x88 scope:local -iSPCH_HasMatchParmToPost__FP9VoxPhrase = .text:0x8037EB5C; // type:function size:0x54 scope:local -iSPCH_MatchSample__FP11VoxSentenceP9VoxPhrasePUiPUc = .text:0x8037EBB0; // type:function size:0x130 scope:local -iSPCH_GetPhraseBank__FP9VoxPhrasePUiP14PhrasePickInfo = .text:0x8037ECE0; // type:function size:0xF8 scope:local -iSPCH_ClearCycleBit__FP10VOXBANKHDRi = .text:0x8037EDD8; // type:function size:0x60 scope:local -iSPCH_TestBit__FPUci = .text:0x8037EE38; // type:function size:0x38 scope:local -iSPCH_CheckTemplateSample__FP14PhrasePickInfoP10VOXBANKHDRi = .text:0x8037EE70; // type:function size:0x98 scope:local -iSPCH_SampleExists__FP14PhrasePickInfoP10VOXBANKHDRi = .text:0x8037EF08; // type:function size:0xA8 scope:local -iSPCH_AddSampleToValidPicks__FP16SentencePickInfoi = .text:0x8037EFB0; // type:function size:0x30 scope:local -iSPCH_BankHasValidSamples__FP9VoxPhraseP10VOXBANKHDRPUi = .text:0x8037EFE0; // type:function size:0x8C scope:local -iSPCH_ChooseSamples__FP16SentencePickInfoP11VoxSentenceP14PhrasePickInfoP9VoxPhrasePUi = .text:0x8037F06C; // type:function size:0x19C scope:local -iSPCH_ConvertTime__Fi = .text:0x8037F208; // type:function size:0x24 scope:local -iSPCH_SentenceLength__FP11VoxSentenceP16SentencePickInfo = .text:0x8037F22C; // type:function size:0x98 scope:local -iSPCH_DecodeWeight__FUc = .text:0x8037F2C4; // type:function size:0x1C scope:global -iSPCH_OrderSentences__FP8VoxEventPc = .text:0x8037F2E0; // type:function size:0x134 scope:local -iSPCH_RepeatEvent__FP8VoxEventUi = .text:0x8037F414; // type:function size:0x48 scope:local -iSPCH_ShortRuleStatus__FP11VoxSentencei = .text:0x8037F45C; // type:function size:0x44 scope:local -iSPCH_InitMatchParmIO__FP11VoxSentence = .text:0x8037F4A0; // type:function size:0x54 scope:local -iSPCH_MatchParmInputsSet__FP11VoxSentenceP9VoxPhrase = .text:0x8037F4F4; // type:function size:0x9C scope:local -iSPCH_TestMatchParms__FP16SentencePickInfoP11VoxSentence = .text:0x8037F590; // type:function size:0x1B8 scope:local -iSPCH_SentenceGetChoices__FP16SentencePickInfoP11VoxSentencePUii = .text:0x8037F748; // type:function size:0x130 scope:local -iSPCH_RandomizeSentencePicks__FP11VoxSentenceP16SentencePickInfo = .text:0x8037F878; // type:function size:0x98 scope:local -iSPCH_IterateChoice__FP11VoxSentenceP16SentencePickInfo = .text:0x8037F910; // type:function size:0x80 scope:local -iSPCH_ChooseSentenceIteratively__FP11VoxSentenceP16SentencePickInfoi = .text:0x8037F990; // type:function size:0x104 scope:local -iSPCH_PickPhraseSample__FP14PhrasePickInfo = .text:0x8037FA94; // type:function size:0x44 scope:local -iSPCH_PostGlobalMatchParms__FP9EventSpecP16SentencePickInfoP11VoxSentence = .text:0x8037FAD8; // type:function size:0x104 scope:local -iSPCH_SentenceMakeChoice__FP9EventSpecP16SentencePickInfoP11VoxSentenceii = .text:0x8037FBDC; // type:function size:0xC8 scope:local -iSPCH_ConstantRuleSet__FP9EventSpecP8VoxEventP11VoxSentence = .text:0x8037FCA4; // type:function size:0x144 scope:local -iSPCH_MakeSampleRequests__FP8VoxEventP11VoxSentenceP9EventSpec = .text:0x8037FDE8; // type:function size:0x20C scope:local -iSPCH_InitSentencePickInfo__FP16SentencePickInfo = .text:0x8037FFF4; // type:function size:0x2C scope:local -iSPCH_ClearSentenceChoiceChannel__FUi = .text:0x80380020; // type:function size:0xB4 scope:global -iSPCH_InitSentenceChoice__Fv = .text:0x803800D4; // type:function size:0x88 scope:global -iSPCH_SaveChosenSentence__FP16SentencePickInfoUiP8VoxEventP11VoxSentenceiPUi = .text:0x8038015C; // type:function size:0x154 scope:local -iSPCH_OneChosen__FUi = .text:0x803802B0; // type:function size:0x18 scope:global -iSPCH_PlayChosen__FUi = .text:0x803802C8; // type:function size:0xF4 scope:global -iSPCH_TestValidParm__FUiUii = .text:0x803803BC; // type:function size:0x40 scope:local -iSPCH_SentenceIsContextMatch__FP8VoxEventP11VoxSentencePUi = .text:0x803803FC; // type:function size:0xF8 scope:local -iSPCH_CheckFrequency__FP11VoxSentence = .text:0x803804F4; // type:function size:0x44 scope:local -iSPCH_ChooseSentence__FPUi = .text:0x80380538; // type:function size:0x350 scope:global -iSPCH_ChooseSingleSentence__Fi = .text:0x80380888; // type:function size:0xC8 scope:global -SPCH_SetPreLoadTicks__Fi = .text:0x80380950; // type:function size:0xC scope:global -gcc2_compiled. = .text:0x8038095C; // type:label scope:local -iSPCH_EACrandom__Fv = .text:0x8038095C; // type:function size:0x108 scope:global -iSPCH_EACseedrandom__FUi = .text:0x80380A64; // type:function size:0x54 scope:local -iSPCH_FindRandInQueue__FUsiUs = .text:0x80380AB8; // type:function size:0xA8 scope:local -iSPCH_AddRandToQueue__FUsUs = .text:0x80380B60; // type:function size:0x40 scope:local -iSPCH_InitRandom__FUi = .text:0x80380BA0; // type:function size:0xB0 scope:global -iSPCH_Rand__Fii = .text:0x80380C50; // type:function size:0xE0 scope:global -gcc2_compiled. = .text:0x80380D30; // type:label scope:local -SPCH_ClearMatchParmSettings__FUl = .text:0x80380D30; // type:function size:0x9C scope:global -iSPCH_BindData__FPcUi = .text:0x80380DCC; // type:function size:0x100 scope:local -SPCH_AddEventDB__FPcUi = .text:0x80380ECC; // type:function size:0x48 scope:global -gcc2_compiled. = .text:0x80380F14; // type:label scope:local -iSPCH_SentenceUsesParm__FP11VoxSentencei = .text:0x80380F14; // type:function size:0xB8 scope:local -iSPCH_GetRuleID__FP8VoxEventi = .text:0x80380FCC; // type:function size:0x4C scope:global -iSPCH_RuleSet__FP9EventSpecP8VoxEventiPUi = .text:0x80381018; // type:function size:0x114 scope:global -iSPCH_GetRuleSettings__FP9EventSpecP8VoxEventPUiT2 = .text:0x8038112C; // type:function size:0x1BC scope:global -iSPCH_GetSentenceRuleSettings__FP8VoxEventiPUiT2 = .text:0x803812E8; // type:function size:0xA8 scope:local -iSPCH_CheckSentenceRules__FP8VoxEventiUiUi = .text:0x80381390; // type:function size:0x60 scope:global -gcc2_compiled. = .text:0x803813F0; // type:label scope:local -iSPCH_GetSampleParmAddr__FP10VOXBANKHDRi = .text:0x803813F0; // type:function size:0x30 scope:global -iSPCH_GetSampleSizeData__FP10VOXBANKHDRiPUiT2 = .text:0x80381420; // type:function size:0x88 scope:global -gcc2_compiled. = .text:0x803814A8; // type:label scope:local -SPCHEXT_gettick__Fv = .text:0x803814A8; // type:function size:0x38 scope:global -gcc2_compiled. = .text:0x803814E0; // type:label scope:local -SPCH_GetExtVecs__Fv = .text:0x803814E0; // type:function size:0xC scope:global -gcc2_compiled. = .text:0x803814EC; // type:label scope:local -iSPCH_CsisCb__FPQ24Csis9ParameterPv = .text:0x803814EC; // type:function size:0x8C scope:local -iSPCH_InitCsis__FPv = .text:0x80381578; // type:function size:0xDC scope:global -gcc2_compiled. = .text:0x80381654; // type:label scope:local -gcc2_compiled. = .text:0x80381654; // type:label scope:local -FILESYS_opstatus = .text:0x80381654; // type:function size:0x20 scope:global -FILESYS_completeop = .text:0x80381674; // type:function size:0x20 scope:global -FILESYS_open = .text:0x80381694; // type:function size:0x20 scope:global -FILESYS_close = .text:0x803816B4; // type:function size:0x20 scope:global -FILESYS_read = .text:0x803816D4; // type:function size:0x20 scope:global -STREAM_overhead = .text:0x803816F4; // type:function size:0x20 scope:global -STREAM_create = .text:0x80381714; // type:function size:0x20 scope:global -STREAM_destroy = .text:0x80381734; // type:function size:0x20 scope:global -STREAM_setgreedylevel = .text:0x80381754; // type:function size:0x20 scope:global -STREAM_queuefile = .text:0x80381774; // type:function size:0x20 scope:global -STREAM_queuemem = .text:0x80381794; // type:function size:0x20 scope:global -STREAM_kill = .text:0x803817B4; // type:function size:0x20 scope:global -STREAM_get = .text:0x803817D4; // type:function size:0x20 scope:global -STREAM_release = .text:0x803817F4; // type:function size:0x20 scope:global -STREAM_gettable = .text:0x80381814; // type:function size:0x20 scope:global -STREAM_state = .text:0x80381834; // type:function size:0x20 scope:global -STREAM_buffersize = .text:0x80381854; // type:function size:0x20 scope:global -gcc2_compiled. = .text:0x80381874; // type:label scope:local -_FILESYS_opstatus__Fi = .text:0x80381874; // type:function size:0x20 scope:global -_FILESYS_completeop__Fi = .text:0x80381894; // type:function size:0x20 scope:global -_FILESYS_open__FPCcUiiPv = .text:0x803818B4; // type:function size:0x20 scope:global -_FILESYS_close__FiiPv = .text:0x803818D4; // type:function size:0x20 scope:global -_FILESYS_read__FiiPviiT2 = .text:0x803818F4; // type:function size:0x20 scope:global -_STREAM_overhead__Fiii = .text:0x80381914; // type:function size:0x20 scope:global -_STREAM_create__FiiiPvi = .text:0x80381934; // type:function size:0x20 scope:global -_STREAM_destroy__Fi = .text:0x80381954; // type:function size:0x20 scope:global -_STREAM_setgreedylevel__Fii = .text:0x80381974; // type:function size:0x20 scope:global -_STREAM_queuefile__FiPCcii = .text:0x80381994; // type:function size:0x20 scope:global -_STREAM_queuemem__FiPvii = .text:0x803819B4; // type:function size:0x20 scope:global -_STREAM_kill__Fi = .text:0x803819D4; // type:function size:0x20 scope:global -_STREAM_get__Fi = .text:0x803819F4; // type:function size:0x20 scope:global -_STREAM_release__FiP14STREAMCHUNKHDR = .text:0x80381A14; // type:function size:0x20 scope:global -_STREAM_gettable__Fi = .text:0x80381A34; // type:function size:0x20 scope:global -_STREAM_state__Fi = .text:0x80381A54; // type:function size:0x20 scope:global -_STREAM_buffersize__Fi = .text:0x80381A74; // type:function size:0x20 scope:global -gcc2_compiled. = .text:0x80381A94; // type:label scope:local -__Q28RealFile12DeviceDriverPCc = .text:0x80381A94; // type:function size:0x3C scope:global -iDefaultFilesysCallbackFunc__FiiPv = .text:0x80381AD0; // type:function size:0x4 scope:local -GetDevice__13FILEOPERATIONi = .text:0x80381AD4; // type:function size:0x18 scope:global -Find__18FileOperationQueueib = .text:0x80381AEC; // type:function size:0xFC scope:global -iStartDevice__FP10FILEDEVICE = .text:0x80381BE8; // type:function size:0x174 scope:local -iGetNextOpId__13FILEOPERATIONP10FILEDEVICE = .text:0x80381D5C; // type:function size:0x88 scope:global -__13FILEOPERATIONiPvP10FILEDEVICE = .text:0x80381DE4; // type:function size:0xAC scope:global -__nw__13FILEOPERATIONUi = .text:0x80381E90; // type:function size:0x88 scope:global -SetName__13FILEOPERATIONPCc = .text:0x80381F18; // type:function size:0xE8 scope:global -Cancel__13FILEOPERATIONP10FILEDEVICE = .text:0x80382000; // type:function size:0x128 scope:global -iAllocateFileSysHandle__Fv = .text:0x80382128; // type:function size:0x90 scope:local -iFreeFileSysHandle__FP13FILESYSHANDLE = .text:0x803821B8; // type:function size:0x78 scope:local -iOpenFileSysHandle__FPCciP10FILEDEVICE = .text:0x80382230; // type:function size:0x1D8 scope:local -iCloseFileSysHandle__FP13FILESYSHANDLE = .text:0x80382408; // type:function size:0x54 scope:local -iGetOpFromHandle__FP10FILEDEVICEiPi = .text:0x8038245C; // type:function size:0xA4 scope:local -AddToQueue__13FILEOPERATION = .text:0x80382500; // type:function size:0xFC scope:global -iDeviceCommandProcessorThreadFunc__FPv = .text:0x803825FC; // type:function size:0x190 scope:local -FILE_init__FPvi = .text:0x8038278C; // type:function size:0x338 scope:global -FILE_overhead__Fv = .text:0x80382AC4; // type:function size:0x48 scope:global -FILE_restore__Fv = .text:0x80382B0C; // type:function size:0xC8 scope:global -FILESYS_opstatus__Fi = .text:0x80382BD4; // type:function size:0x90 scope:global -FILESYS_waitop__Fi = .text:0x80382C64; // type:function size:0xE4 scope:global -FILESYS_completeop64__Fi = .text:0x80382D48; // type:function size:0xD0 scope:global -FILESYS_completeop__Fi = .text:0x80382E18; // type:function size:0x24 scope:global -FILESYS_callbackop__FiPFiiPv_v = .text:0x80382E3C; // type:function size:0x80 scope:global -FILESYS_priorityop__Fii = .text:0x80382EBC; // type:function size:0x74 scope:global -FILESYS_exists__FPCciPv = .text:0x80382F30; // type:function size:0x7C scope:global -FILESYS_open__FPCcUiiPv = .text:0x80382FAC; // type:function size:0x90 scope:global -FILESYS_close__FiiPv = .text:0x8038303C; // type:function size:0x68 scope:global -FILESYS_read__FiiPviiT2 = .text:0x803830A4; // type:function size:0xA8 scope:global -FILESYS_readlarge__FiUxPvUxiT2 = .text:0x8038314C; // type:function size:0xA0 scope:global -FILESYS_write__FiiPviiT2 = .text:0x803831EC; // type:function size:0x98 scope:global -FILESYS_size__FiiPv = .text:0x80383284; // type:function size:0x68 scope:global -FILESYS_atomic__FPFiPv_iP10FILEDEVICEiPv = .text:0x803832EC; // type:function size:0x88 scope:global -GetInfoFastByName__8RealFilePCcUiRUxT3 = .text:0x80383374; // type:function size:0x94 scope:global -GetInfoFastByHandle__8RealFileiRUxT2 = .text:0x80383408; // type:function size:0x6C scope:global -FILE_nametodevice__FPCc = .text:0x80383474; // type:function size:0x13C scope:global -SetSearchPath__8RealFilePCc = .text:0x803835B0; // type:function size:0x110 scope:global -AddSearchLocation__8RealFilePCcb = .text:0x803836C0; // type:function size:0x130 scope:global -AddDevice__8RealFilePQ28RealFile12DeviceDriver = .text:0x803837F0; // type:function size:0xA4 scope:global -RemoveDevice__8RealFileUi = .text:0x80383894; // type:function size:0x1F8 scope:global -__static_initialization_and_destruction_0 = .text:0x80383A8C; // type:function size:0x74 scope:local -_._13FILEOPERATION = .text:0x80383B00; // type:function size:0x34 scope:global -_._11FILESYSINFO = .text:0x80383B34; // type:function size:0x174 scope:global -_._14ExistOperation = .text:0x80383CA8; // type:function size:0x34 scope:global -Exec__14ExistOperationP10FILEDEVICE = .text:0x80383CDC; // type:function size:0x64 scope:global -Complete__14ExistOperation = .text:0x80383D40; // type:function size:0x58 scope:global -_._13OpenOperation = .text:0x80383D98; // type:function size:0x34 scope:global -Exec__13OpenOperationP10FILEDEVICE = .text:0x80383DCC; // type:function size:0x50 scope:global -Complete__13OpenOperation = .text:0x80383E1C; // type:function size:0x90 scope:global -_._14CloseOperation = .text:0x80383EAC; // type:function size:0x34 scope:global -Exec__14CloseOperationP10FILEDEVICE = .text:0x80383EE0; // type:function size:0xC scope:global -Complete__14CloseOperation = .text:0x80383EEC; // type:function size:0x2C scope:global -Cancel__14CloseOperationP10FILEDEVICE = .text:0x80383F18; // type:function size:0x4 scope:global -_._13ReadOperation = .text:0x80383F1C; // type:function size:0x34 scope:global -Exec__13ReadOperationP10FILEDEVICE = .text:0x80383F50; // type:function size:0x180 scope:global -Complete__13ReadOperation = .text:0x803840D0; // type:function size:0xC scope:global -_._18ReadLargeOperation = .text:0x803840DC; // type:function size:0x34 scope:global -Exec__18ReadLargeOperationP10FILEDEVICE = .text:0x80384110; // type:function size:0x194 scope:global -Complete__18ReadLargeOperation = .text:0x803842A4; // type:function size:0xC scope:global -_._14WriteOperation = .text:0x803842B0; // type:function size:0x34 scope:global -Exec__14WriteOperationP10FILEDEVICE = .text:0x803842E4; // type:function size:0x104 scope:global -Complete__14WriteOperation = .text:0x803843E8; // type:function size:0xC scope:global -_._13SizeOperation = .text:0x803843F4; // type:function size:0x34 scope:global -Exec__13SizeOperationP10FILEDEVICE = .text:0x80384428; // type:function size:0x20 scope:global -Complete__13SizeOperation = .text:0x80384448; // type:function size:0xC scope:global -_._14NullFileDriver = .text:0x80384454; // type:function size:0x34 scope:global -Open__14NullFileDriverPCciPi = .text:0x80384488; // type:function size:0x8 scope:global -Close__14NullFileDriveri = .text:0x80384490; // type:function size:0x4 scope:global -Read__14NullFileDriveriPvUiPQ28RealFile12DeviceDriveri = .text:0x80384494; // type:function size:0x8 scope:global -Seek__14NullFileDriveriUxiPQ28RealFile12DeviceDriveri = .text:0x8038449C; // type:function size:0xC scope:global -Getsize__14NullFileDriveri = .text:0x803844A8; // type:function size:0xC scope:global -_GLOBAL_.I.__Q28RealFile12DeviceDriverPCc = .text:0x803844B4; // type:function size:0x2C scope:local -_GLOBAL_.D.__Q28RealFile12DeviceDriverPCc = .text:0x803844E0; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x8038450C; // type:label scope:local -FILE_getopts__FP11FILESYSOPTS = .text:0x8038450C; // type:function size:0x54 scope:global -FILE_setopts__FP11FILESYSOPTS = .text:0x80384560; // type:function size:0x68 scope:global -__static_initialization_and_destruction_0 = .text:0x803845C8; // type:function size:0x3C scope:local -_GLOBAL_.I.FILE_getopts__FP11FILESYSOPTS = .text:0x80384604; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x80384630; // type:label scope:local -queueadd__FP12REQUESTQUEUEP16REQUESTSTRUCTtag = .text:0x80384630; // type:function size:0x6C scope:local -queuefetch__FP12REQUESTQUEUE = .text:0x8038469C; // type:function size:0x5C scope:local -newrequestid__FP16REQUESTSTRUCTtag = .text:0x803846F8; // type:function size:0x30 scope:local -locaterequest__Fi = .text:0x80384728; // type:function size:0x48 scope:local -releaserequest__FP16REQUESTSTRUCTtag = .text:0x80384770; // type:function size:0x80 scope:local -finishrequest__FP16REQUESTSTRUCTtag = .text:0x803847F0; // type:function size:0x80 scope:local -loadfileclosecallback__FiiPv = .text:0x80384870; // type:function size:0x38 scope:local -loadfilereadcallback__FiiPv = .text:0x803848A8; // type:function size:0xFC scope:local -loadfilesizecallback__FiiPv = .text:0x803849A4; // type:function size:0x1A8 scope:local -loadfileopencallback__FiiPv = .text:0x80384B4C; // type:function size:0x120 scope:local -ASYNCFILE_init__Fii = .text:0x80384C6C; // type:function size:0x188 scope:global -ASYNCFILE_load__FPCci = .text:0x80384DF4; // type:function size:0xB0 scope:global -ASYNCFILE_release__FiPPvPi = .text:0x80384EA4; // type:function size:0x124 scope:global -__static_initialization_and_destruction_0 = .text:0x80384FC8; // type:function size:0x40 scope:local -_GLOBAL_.I.ASYNCFILE_init__Fii = .text:0x80385008; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x80385034; // type:label scope:local -FILE_exists__FPCc = .text:0x80385034; // type:function size:0x24 scope:global -filesizeatom__FiPv = .text:0x80385058; // type:function size:0x6C scope:local -FILE_size__FPCc = .text:0x803850C4; // type:function size:0x48 scope:global -gcc2_compiled. = .text:0x8038510C; // type:label scope:local -FILESYS_opensync__FPCcUii = .text:0x8038510C; // type:function size:0x3C scope:global -FILESYS_readsync__FiiPvii = .text:0x80385148; // type:function size:0x60 scope:global -FILESYS_writesync__FiiPvii = .text:0x803851A8; // type:function size:0x3C scope:global -FILESYS_closesync__Fii = .text:0x803851E4; // type:function size:0x4C scope:global -FILESYS_sizesync__Fii = .text:0x80385230; // type:function size:0x3C scope:global -FILESYS_existssync__FPCci = .text:0x8038526C; // type:function size:0x4C scope:global -gcc2_compiled. = .text:0x803852B8; // type:label scope:local -gcc2_compiled. = .text:0x803852B8; // type:label scope:local -QEndOp__Fv = .text:0x803852B8; // type:function size:0x34 scope:local -AyncDVDRead__FP11DVDFileInfo = .text:0x803852EC; // type:function size:0x1B4 scope:local -StartNonAlignedAyncRead__FP11DVDFileInfoPvll = .text:0x803854A0; // type:function size:0x1B8 scope:local -AyncDVDCallback__FlP11DVDFileInfo = .text:0x80385658; // type:function size:0x30 scope:local -_AllocateDvdFileHandle__21GcDvdFileDeviceDriver = .text:0x80385688; // type:function size:0x4C scope:global -_FreeDvdFileHandle__21GcDvdFileDeviceDriverP13DvdFileHandle = .text:0x803856D4; // type:function size:0x64 scope:global -Init__21GcDvdFileDeviceDriver = .text:0x80385738; // type:function size:0x114 scope:global -Restore__21GcDvdFileDeviceDriver = .text:0x8038584C; // type:function size:0x44 scope:global -Open__21GcDvdFileDeviceDriverPCciPi = .text:0x80385890; // type:function size:0xF4 scope:global -Close__21GcDvdFileDeviceDriveri = .text:0x80385984; // type:function size:0x40 scope:global -Read__21GcDvdFileDeviceDriveriPvUiPQ28RealFile12DeviceDriveri = .text:0x803859C4; // type:function size:0xF4 scope:global -Seek__21GcDvdFileDeviceDriveriUxiPQ28RealFile12DeviceDriveri = .text:0x80385AB8; // type:function size:0x9C scope:global -Getsize__21GcDvdFileDeviceDriveri = .text:0x80385B54; // type:function size:0x10 scope:global -QueryLocation__21GcDvdFileDeviceDriveri = .text:0x80385B64; // type:function size:0xC scope:global -__static_initialization_and_destruction_0 = .text:0x80385B70; // type:function size:0xEC scope:local -_._21GcDvdFileDeviceDriver = .text:0x80385C5C; // type:function size:0x94 scope:global -_GLOBAL_.I._AllocateDvdFileHandle__21GcDvdFileDeviceDriver = .text:0x80385CF0; // type:function size:0x2C scope:local -_GLOBAL_.D._AllocateDvdFileHandle__21GcDvdFileDeviceDriver = .text:0x80385D1C; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x80385D48; // type:label scope:local -Init__20GcHdFileDeviceDriver = .text:0x80385D48; // type:function size:0x24 scope:global -Open__20GcHdFileDeviceDriverPCciPi = .text:0x80385D6C; // type:function size:0xB8 scope:global -Close__20GcHdFileDeviceDriveri = .text:0x80385E24; // type:function size:0x24 scope:global -Read__20GcHdFileDeviceDriveriPvUiPQ28RealFile12DeviceDriveri = .text:0x80385E48; // type:function size:0x2C scope:global -Write__20GcHdFileDeviceDriveriPCvUiPQ28RealFile12DeviceDriveri = .text:0x80385E74; // type:function size:0x2C scope:global -Seek__20GcHdFileDeviceDriveriUxiPQ28RealFile12DeviceDriveri = .text:0x80385EA0; // type:function size:0x5C scope:global -Getsize__20GcHdFileDeviceDriveri = .text:0x80385EFC; // type:function size:0x70 scope:global -__static_initialization_and_destruction_0 = .text:0x80385F6C; // type:function size:0x74 scope:local -_._20GcHdFileDeviceDriver = .text:0x80385FE0; // type:function size:0x34 scope:global -Restore__20GcHdFileDeviceDriver = .text:0x80386014; // type:function size:0x4 scope:global -Getspace__20GcHdFileDeviceDriver = .text:0x80386018; // type:function size:0xC scope:global -_GLOBAL_.I.Init__20GcHdFileDeviceDriver = .text:0x80386024; // type:function size:0x2C scope:local -_GLOBAL_.D.Init__20GcHdFileDeviceDriver = .text:0x80386050; // type:function size:0x2C scope:local -TIMER_init__Fi = .text:0x8038607C; // type:function size:0x10C scope:global -TIMER_restore__Fv = .text:0x80386188; // type:function size:0x40 scope:global -ttDoTimerMsg__Fv = .text:0x803861C8; // type:function size:0x68 scope:global -AlarmHandler__FP7OSAlarmP9OSContext = .text:0x80386230; // type:function size:0x24 scope:local -gcc2_compiled. = .text:0x80386254; // type:label scope:local -SIGNAL_create__FP6SIGNAL = .text:0x80386254; // type:function size:0x30 scope:global -SIGNAL_set__FP6SIGNAL = .text:0x80386284; // type:function size:0x2C scope:global -SIGNAL_wait__FP6SIGNAL = .text:0x803862B0; // type:function size:0x2C scope:global -SIGNAL_destroy__FP6SIGNAL = .text:0x803862DC; // type:function size:0x2C scope:global -gcc2_compiled. = .text:0x80386308; // type:label scope:local -ThreadRealPriority2GCPriority__Fi = .text:0x80386308; // type:function size:0x78 scope:local -THREAD_init__Fv = .text:0x80386380; // type:function size:0x24 scope:global -THREAD_create__FP6THREADPFPv_iPvT2ii = .text:0x803863A4; // type:function size:0x7C scope:global -THREAD_destroy__FP6THREAD = .text:0x80386420; // type:function size:0x54 scope:global -AlarmHandler__FP7OSAlarmP9OSContext = .text:0x80386474; // type:function size:0x24 scope:local -THREAD_yield64__Fx = .text:0x80386498; // type:function size:0x80 scope:local -THREAD_yield__Fi = .text:0x80386518; // type:function size:0x60 scope:global -THREAD_iscurrent__FP6THREAD = .text:0x80386578; // type:function size:0x60 scope:global -THREAD_setpriority__FP6THREADi = .text:0x803865D8; // type:function size:0x60 scope:global -THREAD_testexit__FP6THREAD = .text:0x80386638; // type:function size:0x4C scope:global -THREAD_waitexit__FP6THREADi = .text:0x80386684; // type:function size:0x48 scope:global -gcc2_compiled. = .text:0x803866CC; // type:label scope:local -ttInit__Fv = .text:0x803866CC; // type:function size:0x88 scope:global -ttKill__Fv = .text:0x80386754; // type:function size:0x38 scope:global -ttMsg__F8TIMERMSG = .text:0x8038678C; // type:function size:0x30 scope:global -TimerThreadFunc__FPv = .text:0x803867BC; // type:function size:0x70 scope:local -SYSTEM_addexit__FPFv_v = .text:0x8038682C; // type:function size:0x6C scope:global -gcc2_compiled. = .text:0x80386898; // type:label scope:local -__Q210RealSystem5Mutex = .text:0x80386898; // type:function size:0x34 scope:global -Create__Q210RealSystem5Mutex = .text:0x803868CC; // type:function size:0x24 scope:global -Destroy__Q210RealSystem5Mutex = .text:0x803868F0; // type:function size:0x4 scope:global -Lock__Q210RealSystem5Mutex = .text:0x803868F4; // type:function size:0x24 scope:global -Unlock__Q210RealSystem5Mutex = .text:0x80386918; // type:function size:0x24 scope:global -gcc2_compiled. = .text:0x8038693C; // type:label scope:local -SYNCTASK_add__FPFPvi_viiPv = .text:0x8038693C; // type:function size:0xE0 scope:global -SYNCTASK_del__FPFPvi_v = .text:0x80386A1C; // type:function size:0x5C scope:global -SYNCTASK_run__Fv = .text:0x80386A78; // type:function size:0xC0 scope:global -gcc2_compiled. = .text:0x80386B38; // type:label scope:local -gcc2_compiled. = .text:0x80386B38; // type:label scope:local -TIMER_gettick__Fv = .text:0x80386B38; // type:function size:0x8 scope:global -ttDoVTimerMsg__Fv = .text:0x80386B40; // type:function size:0x5C scope:global -gcc2_compiled. = .text:0x80386B9C; // type:label scope:local -findkern16__11RealFontOldiPCQ211RealFontOld8FontKernUi = .text:0x80386B9C; // type:function size:0x40 scope:local -findkern12__11RealFontOldiPCQ211RealFontOld8FontKernUii = .text:0x80386BDC; // type:function size:0x44 scope:local -GetKern__CQ211RealFontOld4FontPCQ211RealFontOld5Glyphw = .text:0x80386C20; // type:function size:0x94 scope:global -gcc2_compiled. = .text:0x80386CB4; // type:label scope:local -BSearch__11RealFontOldwPCQ211RealFontOld5GlyphUii = .text:0x80386CB4; // type:function size:0x40 scope:global -gcc2_compiled. = .text:0x80386CF4; // type:label scope:local -Create__Q211RealFontOld4FontPv = .text:0x80386CF4; // type:function size:0x4C scope:global -Destroy__Q211RealFontOld4FontPQ211RealFontOld4Font = .text:0x80386D40; // type:function size:0x3C scope:global -gcc2_compiled. = .text:0x80386D7C; // type:label scope:local -Init__Q29RealShape12CreateStruct = .text:0x80386D7C; // type:function size:0xC8 scope:global -__Q29RealShape12CreateStruct = .text:0x80386E44; // type:function size:0x30 scope:global -GetNumberOfColours__9RealShapei = .text:0x80386E74; // type:function size:0x28 scope:local -GetCreateSize__Q29RealShape14TextureElementRCQ29RealShape12CreateStruct = .text:0x80386E9C; // type:function size:0x124 scope:global -GetCreateSize__Q29RealShape11ClutElementRCQ29RealShape12CreateStruct = .text:0x80386FC0; // type:function size:0x8C scope:global -GetCreateSize__Q29RealShape11ClipElementRCQ29RealShape12CreateStruct = .text:0x8038704C; // type:function size:0x8 scope:global -GetCreateSize__Q29RealShape14CommentElementRCQ29RealShape12CreateStruct = .text:0x80387054; // type:function size:0xC scope:global -GetCreateSize__Q29RealShape11EaglElementRCQ29RealShape12CreateStruct = .text:0x80387060; // type:function size:0xC scope:global -GetCreateSize__Q29RealShape15HotSpotsElementRCQ29RealShape12CreateStruct = .text:0x8038706C; // type:function size:0x18 scope:global -GetCreateSize__Q29RealShape5ShapeRCQ29RealShape12CreateStruct = .text:0x80387084; // type:function size:0x120 scope:global -CreateAt__Q29RealShape12ShapeElementRCQ29RealShape12CreateStruct = .text:0x803871A4; // type:function size:0xBC scope:global -CreateAt__Q29RealShape14TextureElementRCQ29RealShape12CreateStruct = .text:0x80387260; // type:function size:0x2C0 scope:global -CreateAt__Q29RealShape11ClutElementRCQ29RealShape12CreateStruct = .text:0x80387520; // type:function size:0xB8 scope:global -CreateAt__Q29RealShape11ClipElementRCQ29RealShape12CreateStruct = .text:0x803875D8; // type:function size:0x80 scope:global -CreateAt__Q29RealShape15HotSpotsElementRCQ29RealShape12CreateStruct = .text:0x80387658; // type:function size:0x80 scope:global -CreateAt__Q29RealShape11EaglElementRCQ29RealShape12CreateStruct = .text:0x803876D8; // type:function size:0x88 scope:global -CreateAt__Q29RealShape14CommentElementRCQ29RealShape12CreateStruct = .text:0x80387760; // type:function size:0x60 scope:global -Create__Q29RealShape5ShapeRCQ29RealShape12CreateStructi = .text:0x803877C0; // type:function size:0x88 scope:global -CreateAt__Q29RealShape5ShapePQ29RealShape5ShapeRCQ29RealShape12CreateStruct = .text:0x80387848; // type:function size:0x22C scope:global -gcc2_compiled. = .text:0x80387A74; // type:label scope:local -SetAllocator__Q29RealShape11GraphObjectPQ32EA9Allocator10IAllocator = .text:0x80387A74; // type:function size:0x8 scope:global -sAlloc__Q29RealShape9MemObjectPCcUiiiiPci = .text:0x80387A7C; // type:function size:0xD4 scope:global -sFree__Q29RealShape9MemObjectPv = .text:0x80387B50; // type:function size:0x40 scope:global -gcc2_compiled. = .text:0x80387B90; // type:label scope:local -Destroy__Q29RealShape12ShapeElementPQ29RealShape12ShapeElement = .text:0x80387B90; // type:function size:0xA0 scope:global -gcc2_compiled. = .text:0x80387C30; // type:label scope:local -GetElementType__CQ29RealShape12ShapeElement = .text:0x80387C30; // type:function size:0xCC scope:global -GetTexture__CQ29RealShape5Shape = .text:0x80387CFC; // type:function size:0x24 scope:global -GetElement__CQ29RealShape5Shapei = .text:0x80387D20; // type:function size:0x68 scope:global -gcc2_compiled. = .text:0x80387D88; // type:label scope:local -CreateInstance__Q211RealmcIface16MemcardInterfacePQ26Realmc15SystemInterfacePQ211RealmcIface14IGameInterfacePQ211RealmcIface8GameInfo = .text:0x80387D88; // type:function size:0x74 scope:global -__Q211RealmcIface16MemcardInterfacePQ26Realmc15SystemInterfacePQ211RealmcIface14IGameInterfacePQ211RealmcIface8GameInfo = .text:0x80387DFC; // type:function size:0x64 scope:global -BootupCheck__Q211RealmcIface16MemcardInterfacePCQ211RealmcIface17BootupCheckParamsUiPPCcPw = .text:0x80387E60; // type:function size:0x24 scope:global -Save__Q211RealmcIface16MemcardInterfacePCcN21PCQ211RealmcIface8SaveInfoPCQ211RealmcIface9TitleInfo = .text:0x80387E84; // type:function size:0x3C scope:global -Load__Q211RealmcIface16MemcardInterfacePCcPcT2PCUwPCQ211RealmcIface9TitleInfoT4 = .text:0x80387EC0; // type:function size:0x60 scope:global -Delete__Q211RealmcIface16MemcardInterfacePCcPCUw = .text:0x80387F20; // type:function size:0x24 scope:global -FindEntries__Q211RealmcIface16MemcardInterfacePCcPCQ211RealmcIface9TitleInfo = .text:0x80387F44; // type:function size:0x54 scope:global -MessageDone__Q211RealmcIface16MemcardInterfaceQ211RealmcIface14MessageChoices = .text:0x80387F98; // type:function size:0x24 scope:global -CheckCard__Q211RealmcIface16MemcardInterfaceQ211RealmcIface6CardId = .text:0x80387FBC; // type:function size:0x24 scope:global -SetAutosave__Q211RealmcIface16MemcardInterfaceQ211RealmcIface13AutosaveStateUiPPQ211RealmcIface7SaveReqPCcQ211RealmcIface6CardId = .text:0x80387FE0; // type:function size:0x24 scope:global -SetMonitor__Q211RealmcIface16MemcardInterfaceQ211RealmcIface12MonitorState = .text:0x80388004; // type:function size:0x24 scope:global -SetMessage__Q211RealmcIface16MemcardInterfaceQ211RealmcIface12MessageStateUi = .text:0x80388028; // type:function size:0x24 scope:global -Update__Q211RealmcIface16MemcardInterfaceUi = .text:0x8038804C; // type:function size:0x24 scope:global -IsResettable__Q211RealmcIface16MemcardInterface = .text:0x80388070; // type:function size:0xC scope:global -Clear__Q211RealmcIface17BootupCheckParams = .text:0x8038807C; // type:function size:0x1C scope:global -Clear__Q211RealmcIface18BootupCheckResults = .text:0x80388098; // type:function size:0x18 scope:global -__Q211RealmcIface8CardInfo = .text:0x803880B0; // type:function size:0x30 scope:global -Clear__Q211RealmcIface8CardInfo = .text:0x803880E0; // type:function size:0x28 scope:global -__Q211RealmcIface9EntryInfo = .text:0x80388108; // type:function size:0x3C scope:global -Clear__Q211RealmcIface9EntryInfo = .text:0x80388144; // type:function size:0x60 scope:global -__Q211RealmcIface8GameInfoPCUwUibT3 = .text:0x803881A4; // type:function size:0x70 scope:global -__Q211RealmcIface10GcSaveInfo = .text:0x80388214; // type:function size:0x30 scope:global -Clear__Q211RealmcIface10GcSaveInfo = .text:0x80388244; // type:function size:0x20 scope:global -__Q211RealmcIface11Ps2SaveInfo = .text:0x80388264; // type:function size:0x30 scope:global -Clear__Q211RealmcIface11Ps2SaveInfo = .text:0x80388294; // type:function size:0x34 scope:global -__Q211RealmcIface8SaveInfo = .text:0x803882C8; // type:function size:0x48 scope:global -Clear__Q211RealmcIface8SaveInfo = .text:0x80388310; // type:function size:0x50 scope:global -__Q211RealmcIface7SaveReq = .text:0x80388360; // type:function size:0x30 scope:global -Clear__Q211RealmcIface7SaveReq = .text:0x80388390; // type:function size:0x10 scope:global -__Q211RealmcIface8TimeInfo = .text:0x803883A0; // type:function size:0x30 scope:global -Clear__Q211RealmcIface8TimeInfo = .text:0x803883D0; // type:function size:0x14 scope:global -Clear__Q211RealmcIface9TitleInfo = .text:0x803883E4; // type:function size:0x18 scope:global -Init__Q211RealmcIface9TitleInfoQ211RealmcIface9TitleTypeUiQ211RealmcIface8NameTypeQ211RealmcIface10DataFormat = .text:0x803883FC; // type:function size:0x14 scope:global -__Q211RealmcIface12XboxSaveInfo = .text:0x80388410; // type:function size:0x30 scope:global -Clear__Q211RealmcIface12XboxSaveInfo = .text:0x80388440; // type:function size:0x10 scope:global -gcc2_compiled. = .text:0x80388450; // type:label scope:local -MessageDone__Q211RealmcIface20MemcardInterfaceImplQ211RealmcIface14MessageChoices = .text:0x80388450; // type:function size:0x98 scope:global -Update__Q211RealmcIface20MemcardInterfaceImplUi = .text:0x803884E8; // type:function size:0x15C scope:global -SetMessage__Q211RealmcIface20MemcardInterfaceImplQ211RealmcIface12MessageStateUi = .text:0x80388644; // type:function size:0x60 scope:global -_ShowGuidelinesMessage__Q211RealmcIface20MemcardInterfaceImplPCQ46Realmc7Message10DetailInfo3Trc = .text:0x803886A4; // type:function size:0xA0 scope:global -_ClearMessage__Q211RealmcIface20MemcardInterfaceImpl = .text:0x80388744; // type:function size:0x7C scope:global -_TranslateTaskResult__Q211RealmcIface20MemcardInterfaceImplQ26Realmc10TaskResult = .text:0x803887C0; // type:function size:0x50 scope:global -_TranslateCardStatus__Q211RealmcIface20MemcardInterfaceImplQ26Realmc10CardStatus = .text:0x80388810; // type:function size:0x15C scope:global -ClearTask__Q211RealmcIface20MemcardInterfaceImpl = .text:0x8038896C; // type:function size:0x50 scope:global -TaskManagerBootupCheck__Q211RealmcIface20MemcardInterfaceImplPCQ211RealmcIface17BootupCheckParamsUiPPCcPw = .text:0x803889BC; // type:function size:0x24 scope:global -TaskManagerFindEntries__Q211RealmcIface20MemcardInterfaceImplPCcPCQ211RealmcIface9TitleInfo = .text:0x803889E0; // type:function size:0x24 scope:global -TaskManagerLoad__Q211RealmcIface20MemcardInterfaceImplPCcPcT2PCUwT4PCQ211RealmcIface9TitleInfo = .text:0x80388A04; // type:function size:0x24 scope:global -TaskManagerSave__Q211RealmcIface20MemcardInterfaceImplPCcN21PCQ211RealmcIface8SaveInfoPCQ211RealmcIface9TitleInfo = .text:0x80388A28; // type:function size:0x24 scope:global -TaskManagerDelete__Q211RealmcIface20MemcardInterfaceImplPCcPCUw = .text:0x80388A4C; // type:function size:0x40 scope:global -TaskManagerCheckCard__Q211RealmcIface20MemcardInterfaceImplQ211RealmcIface6CardId = .text:0x80388A8C; // type:function size:0x24 scope:global -TaskManagerSetAutosave__Q211RealmcIface20MemcardInterfaceImplQ211RealmcIface13AutosaveStateUiPPQ211RealmcIface7SaveReqPCcQ211RealmcIface6CardId = .text:0x80388AB0; // type:function size:0x24 scope:global -TaskManagerSetMonitor__Q211RealmcIface20MemcardInterfaceImplQ211RealmcIface12MonitorState = .text:0x80388AD4; // type:function size:0x30 scope:global -gcc2_compiled. = .text:0x80388B04; // type:label scope:local -SetMemAllocator__6RealmcPQ32EA9Allocator10IAllocator = .text:0x80388B04; // type:function size:0x8 scope:global -AllocateMemSize__6RealmcPCciiii = .text:0x80388B0C; // type:function size:0x74 scope:global -FreeMemSize__6RealmcPvi = .text:0x80388B80; // type:function size:0x40 scope:global -gcc2_compiled. = .text:0x80388BC0; // type:label scope:local -__Q211RealmcIface11TaskManagerPQ211RealmcIface20MemcardInterfaceImplPQ211RealmcIface14IGameInterface = .text:0x80388BC0; // type:function size:0x74 scope:global -BootupCheck__Q211RealmcIface11TaskManagerPCQ211RealmcIface17BootupCheckParamsUiPPCcPw = .text:0x80388C34; // type:function size:0x174 scope:global -Load__Q211RealmcIface11TaskManagerPCcPcT2PCUwT4PCQ211RealmcIface9TitleInfo = .text:0x80388DA8; // type:function size:0x2A0 scope:global -FindEntries__Q211RealmcIface11TaskManagerPCcPCQ211RealmcIface9TitleInfo = .text:0x80389048; // type:function size:0x12C scope:global -Save__Q211RealmcIface11TaskManagerPCcN21PCQ211RealmcIface8SaveInfoPCQ211RealmcIface9TitleInfo = .text:0x80389174; // type:function size:0xB8 scope:global -Delete__Q211RealmcIface11TaskManagerUiPPCcPCUw = .text:0x8038922C; // type:function size:0xC8 scope:global -SetAutosave__Q211RealmcIface11TaskManagerQ211RealmcIface13AutosaveStateUiPPQ211RealmcIface7SaveReqPCcQ211RealmcIface6CardId = .text:0x803892F4; // type:function size:0xB8 scope:global -CheckCard__Q211RealmcIface11TaskManagerQ211RealmcIface6CardId = .text:0x803893AC; // type:function size:0x80 scope:global -SetMonitor__Q211RealmcIface11TaskManagerQ211RealmcIface12MonitorState = .text:0x8038942C; // type:function size:0xEC scope:global -FoundEntry__Q211RealmcIface11TaskManagerPQ211RealmcIface9EntryInfo = .text:0x80389518; // type:function size:0xAC scope:global -ClearEntries__Q211RealmcIface11TaskManager = .text:0x803895C4; // type:function size:0x44 scope:global -_StartTask__Q211RealmcIface11TaskManager = .text:0x80389608; // type:function size:0x2B8 scope:global -CompleteTask__Q211RealmcIface11TaskManagerQ211RealmcIface10TaskResultQ211RealmcIface10CardStatusPv = .text:0x803898C0; // type:function size:0xBC8 scope:global -_ClearOldMsgs__Q211RealmcIface11TaskManager = .text:0x8038A488; // type:function size:0x14 scope:global -_ClearTaskList__Q211RealmcIface11TaskManager = .text:0x8038A49C; // type:function size:0x8C scope:global -_InitTaskList__Q211RealmcIface11TaskManager = .text:0x8038A528; // type:function size:0x20 scope:global -_HasStatusChanged__Q211RealmcIface11TaskManagerQ211RealmcIface10CardStatus = .text:0x8038A548; // type:function size:0x58 scope:global -gcc2_compiled. = .text:0x8038A5A0; // type:label scope:local -_ChangeToRealmcCardId__11RealmcIfaceQ211RealmcIface6CardId = .text:0x8038A5A0; // type:function size:0x3C scope:global -_SplitPath__11RealmcIfacePCcPc = .text:0x8038A5DC; // type:function size:0x98 scope:global -__Q211RealmcIface20MemcardInterfaceImplPQ26Realmc15SystemInterfacePQ211RealmcIface14IGameInterfacePQ211RealmcIface8GameInfo = .text:0x8038A674; // type:function size:0x248 scope:global -BootupCheck__Q211RealmcIface20MemcardInterfaceImplPCQ211RealmcIface17BootupCheckParams = .text:0x8038A8BC; // type:function size:0x1C0 scope:global -SaveCheck__Q211RealmcIface20MemcardInterfaceImplPCcUiPPQ211RealmcIface7SaveReq = .text:0x8038AA7C; // type:function size:0x1A8 scope:global -Save__Q211RealmcIface20MemcardInterfaceImplPCcN21PCQ211RealmcIface8SaveInfo = .text:0x8038AC24; // type:function size:0x228 scope:global -Load__Q211RealmcIface20MemcardInterfaceImplPCcPcT2PCUwT4 = .text:0x8038AE4C; // type:function size:0x100 scope:global -LoadAlternate__Q211RealmcIface20MemcardInterfaceImplPCcPcT2PCUwT4PCQ211RealmcIface9TitleInfo = .text:0x8038AF4C; // type:function size:0x128 scope:global -Delete__Q211RealmcIface20MemcardInterfaceImplPCcPCUw = .text:0x8038B074; // type:function size:0xA4 scope:global -DeleteMultiple__Q211RealmcIface20MemcardInterfaceImplUiPPCcPCUw = .text:0x8038B118; // type:function size:0xD8 scope:global -FindEntries__Q211RealmcIface20MemcardInterfaceImplPCc = .text:0x8038B1F0; // type:function size:0xB4 scope:global -FindEntriesAlternate__Q211RealmcIface20MemcardInterfaceImplPCcPCQ211RealmcIface9TitleInfo = .text:0x8038B2A4; // type:function size:0xD4 scope:global -CheckCard__Q211RealmcIface20MemcardInterfaceImplQ211RealmcIface6CardId = .text:0x8038B378; // type:function size:0xA4 scope:global -SetActiveCard__Q211RealmcIface20MemcardInterfaceImplQ211RealmcIface6CardId = .text:0x8038B41C; // type:function size:0x60 scope:global -SetAutosave__Q211RealmcIface20MemcardInterfaceImplQ211RealmcIface13AutosaveStateUiPPQ211RealmcIface7SaveReqPCcQ211RealmcIface6CardId = .text:0x8038B47C; // type:function size:0x10C scope:global -_ProcessBootupCheck__Q211RealmcIface20MemcardInterfaceImplPCQ26Realmc7Message = .text:0x8038B588; // type:function size:0x180 scope:global -_ProcessCheckCard__Q211RealmcIface20MemcardInterfaceImplPCQ26Realmc7Message = .text:0x8038B708; // type:function size:0x10C scope:global -_ProcessSave__Q211RealmcIface20MemcardInterfaceImplPCQ26Realmc7Message = .text:0x8038B814; // type:function size:0x238 scope:global -_ProcessLoad__Q211RealmcIface20MemcardInterfaceImplPCQ26Realmc7Message = .text:0x8038BA4C; // type:function size:0x5C4 scope:global -_ProcessDelete__Q211RealmcIface20MemcardInterfaceImplPCQ26Realmc7Message = .text:0x8038C010; // type:function size:0x3E0 scope:global -_ProcessFindEntries__Q211RealmcIface20MemcardInterfaceImplPCQ26Realmc7Message = .text:0x8038C3F0; // type:function size:0x1CC scope:global -_ProcessSetAutosave__Q211RealmcIface20MemcardInterfaceImplPCQ26Realmc7Message = .text:0x8038C5BC; // type:function size:0x17C scope:global -_ProcessGuidelinesMessage__Q211RealmcIface20MemcardInterfaceImplPCQ26Realmc7Message = .text:0x8038C738; // type:function size:0x28C scope:global -_CheckForCardRemoval__Q211RealmcIface20MemcardInterfaceImpl = .text:0x8038C9C4; // type:function size:0x70 scope:global -_DisableAutosave__Q211RealmcIface20MemcardInterfaceImpl = .text:0x8038CA34; // type:function size:0x78 scope:global -_CalcSignature__Q211RealmcIface20MemcardInterfaceImplPCvUi = .text:0x8038CAAC; // type:function size:0x28 scope:global -CalcSaveSize__Q211RealmcIface20MemcardInterfaceImplPCQ211RealmcIface8SaveInfoQ211RealmcIface10DataFormat = .text:0x8038CAD4; // type:function size:0x158 scope:global -_MakeInsufficientSpaceMessage__Q211RealmcIface20MemcardInterfaceImplUiPPQ211RealmcIface7SaveReq = .text:0x8038CC2C; // type:function size:0x28C scope:global -_ReleaseInsufficientSpaceMessage__Q211RealmcIface20MemcardInterfaceImpl = .text:0x8038CEB8; // type:function size:0x5C scope:global -Clear__Q211RealmcIface10FileHeader = .text:0x8038CF14; // type:function size:0x6C scope:global -_._Q26Realmc9GCMessage = .text:0x8038CF80; // type:function size:0x34 scope:global -Init__Q26Realmc9GCMessage = .text:0x8038CFB4; // type:function size:0x20 scope:global -_SetMsgOptions__Q26Realmc9GCMessagei = .text:0x8038CFD4; // type:function size:0x78 scope:global -_LcGetSlotString__Q26Realmc9GCMessagei = .text:0x8038D04C; // type:function size:0x14 scope:global -Clear__Q26Realmc9GCMessage = .text:0x8038D060; // type:function size:0x28 scope:global -gcc2_compiled. = .text:0x8038D088; // type:label scope:local -FilterGuidelinesMessage__Q211RealmcIface11TaskManagerPCQ26Realmc7Message = .text:0x8038D088; // type:function size:0x130 scope:global -gcc2_compiled. = .text:0x8038D1B8; // type:label scope:local -SetLocaleGetStrCallback__Q26Realmc6LocalePFi_PCc = .text:0x8038D1B8; // type:function size:0x8 scope:global -GetString__Q26Realmc6LocaleiPce = .text:0x8038D1C0; // type:function size:0x434 scope:global -GetWstrLength__Q26Realmc6LocalePCUw = .text:0x8038D5F4; // type:function size:0x30 scope:global -Ascii2Unicode__11RealmcUtilsPwPCc = .text:0x8038D624; // type:function size:0xD4 scope:global -Crc32__11RealmcUtilsPCvi = .text:0x8038D6F8; // type:function size:0x7C scope:global -strrstr__11RealmcUtilsPcT1 = .text:0x8038D774; // type:function size:0x64 scope:local -Wildcard__11RealmcUtilsPcT1 = .text:0x8038D7D8; // type:function size:0x240 scope:global -gcc2_compiled. = .text:0x8038DA18; // type:label scope:local -__Q26Realmc8GCDriverPCQ26Realmc15SystemInterface = .text:0x8038DA18; // type:function size:0x204 scope:global -_._Q26Realmc8GCDriver = .text:0x8038DC1C; // type:function size:0xA0 scope:global -ConvertCardResult__Q26Realmc8GCDriveri = .text:0x8038DCBC; // type:function size:0x100 scope:global -FindFreeFileDescriptor__Q26Realmc8GCDriver = .text:0x8038DDBC; // type:function size:0x28 scope:global -ConvertFileHandleToDescriptor__Q26Realmc8GCDriverPQ26Realmc18OpenFileDescriptor = .text:0x8038DDE4; // type:function size:0x8 scope:global -CardExists__Q26Realmc8GCDriverRCQ26Realmc6CardID = .text:0x8038DDEC; // type:function size:0xA4 scope:global -GetFileBlocks__Q26Realmc8GCDriverRCQ26Realmc6CardIDPCQ26Realmc8FileInfoPUi = .text:0x8038DE90; // type:function size:0x88 scope:global -GetSectorSize__Q26Realmc8GCDriverRCQ26Realmc6CardID = .text:0x8038DF18; // type:function size:0x138 scope:global -CardRemovalCallback__Q26Realmc8GCDriverll = .text:0x8038E050; // type:function size:0xC scope:global -Mount__Q26Realmc8GCDriverRCQ26Realmc6CardID = .text:0x8038E05C; // type:function size:0x184 scope:global -Unmount__Q26Realmc8GCDriverRCQ26Realmc6CardID = .text:0x8038E1E0; // type:function size:0x94 scope:global -OpenFile__Q26Realmc8GCDriverRCQ26Realmc6CardIDPCQ26Realmc8FileInfoQ26Realmc12FileOpenModePPQ26Realmc18OpenFileDescriptor = .text:0x8038E274; // type:function size:0x2B4 scope:global -WriteHeaderData__Q26Realmc8GCDriverPQ26Realmc16GcFileDescriptor = .text:0x8038E528; // type:function size:0x1A8 scope:global -GetBannerSize__Q26Realmc8GCDriverPCQ26Realmc8FileInfo = .text:0x8038E6D0; // type:function size:0x1C scope:global -GetIconSize__Q26Realmc8GCDriverPCQ26Realmc8FileInfo = .text:0x8038E6EC; // type:function size:0x30 scope:global -WriteFile__Q26Realmc8GCDriverPQ26Realmc18OpenFileDescriptorPviPi = .text:0x8038E71C; // type:function size:0x208 scope:global -FlushWriteBuffer__Q26Realmc8GCDriverPQ26Realmc18OpenFileDescriptor = .text:0x8038E924; // type:function size:0x100 scope:global -SetHeaderInfo__Q26Realmc8GCDriverPQ26Realmc16GcFileDescriptor = .text:0x8038EA24; // type:function size:0x248 scope:global -ReadFile__Q26Realmc8GCDriverPQ26Realmc18OpenFileDescriptorPviPi = .text:0x8038EC6C; // type:function size:0x1D0 scope:global -CloseFile__Q26Realmc8GCDriverPQ26Realmc18OpenFileDescriptor = .text:0x8038EE3C; // type:function size:0x124 scope:global -GetOpenFileSize__Q26Realmc8GCDriverPQ26Realmc18OpenFileDescriptor = .text:0x8038EF60; // type:function size:0x24 scope:global -GetFreeCardSpace__Q26Realmc8GCDriverRCQ26Realmc6CardIDPiT2 = .text:0x8038EF84; // type:function size:0x78 scope:global -DeleteFile__Q26Realmc8GCDriverRCQ26Realmc6CardIDPCQ26Realmc8FileInfo = .text:0x8038EFFC; // type:function size:0xB4 scope:global -FormatCard__Q26Realmc8GCDriverRCQ26Realmc6CardID = .text:0x8038F0B0; // type:function size:0x6C scope:global -IsCardPresent__Q26Realmc8GCDriver = .text:0x8038F11C; // type:function size:0x8 scope:global -WasCardPresent__Q26Realmc8GCDriver = .text:0x8038F124; // type:function size:0x8 scope:global -ResetWasCardPresent__Q26Realmc8GCDriver = .text:0x8038F12C; // type:function size:0xC scope:global -IsOurFile__Q26Realmc8GCDriverPCcT1 = .text:0x8038F138; // type:function size:0x64 scope:global -FindFirst__Q26Realmc8GCDriverRCQ26Realmc6CardIDPQ26Realmc14FindInfoStruct = .text:0x8038F19C; // type:function size:0x80 scope:global -FindNext__Q26Realmc8GCDriver = .text:0x8038F21C; // type:function size:0x104 scope:global -Seek__Q26Realmc8GCDriverPQ26Realmc18OpenFileDescriptoriQ26Realmc8SeekFrom = .text:0x8038F320; // type:function size:0x11C scope:global -SetAttributes__Q26Realmc8GCDriverGQ26Realmc6CardIDPcQ26Realmc13FileAttribute = .text:0x8038F43C; // type:function size:0x70 scope:global -FindFileNumber__Q26Realmc8GCDriverPcPi = .text:0x8038F4AC; // type:function size:0xD8 scope:global -NGCSportsBioSeek__Q26Realmc8GCDriverPQ26Realmc16GcFileDescriptoriQ26Realmc8SeekFrom = .text:0x8038F584; // type:function size:0x50 scope:global -NGCSportsBioRead__Q26Realmc8GCDriverPQ26Realmc16GcFileDescriptorPviPi = .text:0x8038F5D4; // type:function size:0xC8 scope:global -NGCSportsBioWrite__Q26Realmc8GCDriverPQ26Realmc16GcFileDescriptorPviPi = .text:0x8038F69C; // type:function size:0xDC scope:global -NGCSportsBioClose__Q26Realmc8GCDriverPQ26Realmc16GcFileDescriptor = .text:0x8038F778; // type:function size:0x78 scope:global -NGCSportsBioCreate__Q26Realmc8GCDriverPQ26Realmc16GcFileDescriptor = .text:0x8038F7F0; // type:function size:0x11C scope:global -RecordIplDataChecksum__Q26Realmc8GCDriverPQ26Realmc16GcFileDescriptor = .text:0x8038F90C; // type:function size:0x108 scope:global -VerifyIplDataChecksum__Q26Realmc8GCDriverPQ26Realmc16GcFileDescriptor = .text:0x8038FA14; // type:function size:0xDC scope:global -_._Q26Realmc12DeviceDriver = .text:0x8038FAF0; // type:function size:0x38 scope:global -Clear__Q26Realmc17CmnFileDescriptor = .text:0x8038FB28; // type:function size:0x48 scope:global -Init__Q26Realmc17CmnFileDescriptorRCQ26Realmc6CardIDRCQ26Realmc8FileInfoQ26Realmc12FileOpenMode = .text:0x8038FB70; // type:function size:0x5C scope:global -Clear__Q26Realmc12GcFileHeader = .text:0x8038FBCC; // type:function size:0x18 scope:global -Clear__Q26Realmc16GcFileDescriptor = .text:0x8038FBE4; // type:function size:0x88 scope:global -Init__Q26Realmc16GcFileDescriptorRCQ26Realmc6CardIDRCQ26Realmc8FileInfoQ26Realmc12FileOpenMode = .text:0x8038FC6C; // type:function size:0xA4 scope:global -gcc2_compiled. = .text:0x8038FD10; // type:label scope:local -CreateInstance__Q26Realmc9InterfaceRCQ26Realmc15SystemInterface = .text:0x8038FD10; // type:function size:0x80 scope:global -__Q26Realmc11GCInterfaceRCQ26Realmc15SystemInterface = .text:0x8038FD90; // type:function size:0x18C scope:global -_._Q26Realmc11GCInterface = .text:0x8038FF1C; // type:function size:0x118 scope:global -TaskThread__Q26Realmc11GCInterfacePv = .text:0x80390034; // type:function size:0x2C0 scope:global -__tcf_0 = .text:0x803902F4; // type:function size:0x14 scope:local -GetMessage__Q26Realmc11GCInterfacei = .text:0x80390308; // type:function size:0x170 scope:global -SendMessage__Q26Realmc11GCInterfaceQ26Realmc11UserMessagei = .text:0x80390478; // type:function size:0x78 scope:global -ConvertUmsgToOption__Q26Realmc11GCInterfaceQ26Realmc11UserMessageiQ26Realmc6TaskID = .text:0x803904F0; // type:function size:0xD8 scope:global -CheckCard__Q26Realmc11GCInterfaceRCQ26Realmc6CardID = .text:0x803905C8; // type:function size:0x2C scope:global -ClearTask__Q26Realmc11GCInterface = .text:0x803905F4; // type:function size:0xCC scope:global -__static_initialization_and_destruction_0 = .text:0x803906C0; // type:function size:0x998 scope:local -Init__Q26Realmc6GcTaskb = .text:0x80391058; // type:function size:0x28 scope:global -Clear__Q26Realmc7TaskTrc = .text:0x80391080; // type:function size:0x14 scope:global -Clear__Q26Realmc16TaskTrcStartGame = .text:0x80391094; // type:function size:0x54 scope:global -Clear__Q26Realmc18TaskTrcGetCardInfo = .text:0x803910E8; // type:function size:0x40 scope:global -Clear__Q26Realmc15TaskTrcSaveFile = .text:0x80391128; // type:function size:0x5C scope:global -Clear__Q26Realmc16TaskTrcListFiles = .text:0x80391184; // type:function size:0x50 scope:global -Clear__Q26Realmc15TaskTrcLoadFile = .text:0x803911D4; // type:function size:0x50 scope:global -Clear__Q26Realmc17TaskTrcDeleteFile = .text:0x80391224; // type:function size:0x4C scope:global -IsBusy__Q26Realmc11GCInterface = .text:0x80391270; // type:function size:0x1C scope:global -GetBlockSize__Q26Realmc11GCInterfaceRCQ26Realmc6CardID = .text:0x8039128C; // type:function size:0x24 scope:global -GetBlockCalculator__Q26Realmc11GCInterface = .text:0x803912B0; // type:function size:0xC scope:global -CheckForAutosaveCardRemoval__Q26Realmc11GCInterface = .text:0x803912BC; // type:function size:0x50 scope:global -ResetAutosaveCardDetection__Q26Realmc11GCInterface = .text:0x8039130C; // type:function size:0x24 scope:global -_._Q26Realmc15BlockCalculator = .text:0x80391330; // type:function size:0x34 scope:global -StartTask__Q26Realmc11TaskManagerPQ26Realmc4Task = .text:0x80391364; // type:function size:0x90 scope:global -EndTask__Q26Realmc11TaskManagerPQ26Realmc4Task = .text:0x803913F4; // type:function size:0x70 scope:global -UpdateCurrentTask__Q26Realmc11TaskManager = .text:0x80391464; // type:function size:0x4 scope:global -Init__Q26Realmc7TaskTrcb = .text:0x80391468; // type:function size:0x68 scope:global -IsPublicTrcTask__Q26Realmc11TaskManagerPQ26Realmc4Task = .text:0x803914D0; // type:function size:0x34 scope:global -TrcSingletonAssert__Q26Realmc11TaskManagerPQ26Realmc4Task = .text:0x80391504; // type:function size:0x14 scope:global -_GLOBAL_.I._6Realmc.ROOT_DIRECTORY_NAME = .text:0x80391518; // type:function size:0x2C scope:local -_GLOBAL_.D._6Realmc.ROOT_DIRECTORY_NAME = .text:0x80391544; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x80391570; // type:label scope:local -TrcStartGame__Q26Realmc11GCInterfaceRCQ26Realmc13StartGameInfo = .text:0x80391570; // type:function size:0x170 scope:global -TrcCardExists__Q26Realmc11GCInterfaceRCQ26Realmc6CardID = .text:0x803916E0; // type:function size:0xEC scope:global -TrcGetCardInfo__Q26Realmc11GCInterfaceRCQ26Realmc6CardID = .text:0x803917CC; // type:function size:0x104 scope:global -TrcLoadFile__Q26Realmc11GCInterfaceRCQ26Realmc6CardIDRCQ26Realmc8FileInfo = .text:0x803918D0; // type:function size:0x13C scope:global -TrcSaveFile__Q26Realmc11GCInterfaceRCQ26Realmc6CardIDRCQ26Realmc8FileInfoQ26Realmc12SaveTaskTypeUiUi = .text:0x80391A0C; // type:function size:0x16C scope:global -TrcListFiles__Q26Realmc11GCInterfaceRCQ26Realmc6CardIDRCQ26Realmc8FileInfoQ26Realmc12ListTaskType = .text:0x80391B78; // type:function size:0x13C scope:global -TrcDeleteFile__Q26Realmc11GCInterfaceRCQ26Realmc6CardIDRCQ26Realmc8FileInfo = .text:0x80391CB4; // type:function size:0x13C scope:global -GetCardName__Q26Realmc11GCInterfaceRCQ26Realmc6CardID = .text:0x80391DF0; // type:function size:0x30 scope:global -GetCardName__Q26Realmc11GCInterfaceRCQ26Realmc6CardIDPwi = .text:0x80391E20; // type:function size:0xE4 scope:global -CardExists__Q26Realmc11GCInterfaceRCQ26Realmc6CardID = .text:0x80391F04; // type:function size:0xC0 scope:global -GetCardInfo__Q26Realmc11GCInterfaceRCQ26Realmc6CardID = .text:0x80391FC4; // type:function size:0xBC scope:global -Mount__Q26Realmc11GCInterfaceRCQ26Realmc6CardID = .text:0x80392080; // type:function size:0xBC scope:global -Unmount__Q26Realmc11GCInterfaceRCQ26Realmc6CardID = .text:0x8039213C; // type:function size:0xBC scope:global -OpenFile__Q26Realmc11GCInterfaceRCQ26Realmc6CardIDRCQ26Realmc8FileInfoQ26Realmc12FileOpenMode = .text:0x803921F8; // type:function size:0xCC scope:global -CloseFile__Q26Realmc11GCInterfacePQ26Realmc18OpenFileDescriptor = .text:0x803922C4; // type:function size:0xB8 scope:global -Read__Q26Realmc11GCInterfacePQ26Realmc18OpenFileDescriptorPvi = .text:0x8039237C; // type:function size:0xCC scope:global -Write__Q26Realmc11GCInterfacePQ26Realmc18OpenFileDescriptorPvi = .text:0x80392448; // type:function size:0xCC scope:global -Seek__Q26Realmc11GCInterfacePQ26Realmc18OpenFileDescriptoriQ26Realmc8SeekFrom = .text:0x80392514; // type:function size:0xC8 scope:global -Flush__Q26Realmc11GCInterfacePQ26Realmc18OpenFileDescriptor = .text:0x803925DC; // type:function size:0xB8 scope:global -DeleteFile__Q26Realmc11GCInterfaceRCQ26Realmc6CardIDPCcT2 = .text:0x80392694; // type:function size:0xD0 scope:global -SetFileAttribute__Q26Realmc11GCInterfaceRCQ26Realmc6CardIDPCcT2Q26Realmc13FileAttribute = .text:0x80392764; // type:function size:0xD8 scope:global -FindFile__Q26Realmc11GCInterfaceRCQ26Realmc6CardIDPCcT2 = .text:0x8039283C; // type:function size:0xD4 scope:global -gcc2_compiled. = .text:0x80392910; // type:label scope:local -UpdateTaskCardExists__Q26Realmc11GCInterface = .text:0x80392910; // type:function size:0x10C scope:global -UpdateTaskGetCardInfo__Q26Realmc11GCInterface = .text:0x80392A1C; // type:function size:0xD0 scope:global -UpdateTaskMount__Q26Realmc11GCInterface = .text:0x80392AEC; // type:function size:0x12C scope:global -UpdateTaskUnmount__Q26Realmc11GCInterface = .text:0x80392C18; // type:function size:0xE4 scope:global -UpdateTaskOpen__Q26Realmc11GCInterface = .text:0x80392CFC; // type:function size:0x140 scope:global -UpdateTaskClose__Q26Realmc11GCInterface = .text:0x80392E3C; // type:function size:0xF4 scope:global -UpdateTaskRead__Q26Realmc11GCInterface = .text:0x80392F30; // type:function size:0x170 scope:global -UpdateTaskWrite__Q26Realmc11GCInterface = .text:0x803930A0; // type:function size:0x164 scope:global -UpdateTaskSeek__Q26Realmc11GCInterface = .text:0x80393204; // type:function size:0xE0 scope:global -UpdateTaskFlush__Q26Realmc11GCInterface = .text:0x803932E4; // type:function size:0xC0 scope:global -UpdateTaskDelete__Q26Realmc11GCInterface = .text:0x803933A4; // type:function size:0x17C scope:global -UpdateTaskSetAttribute__Q26Realmc11GCInterface = .text:0x80393520; // type:function size:0x124 scope:global -UpdateTaskFindFile__Q26Realmc11GCInterface = .text:0x80393644; // type:function size:0x264 scope:global -Find__Q26Realmc11GCInterfaceRCQ26Realmc6CardIDPCcb = .text:0x803938A8; // type:function size:0x1B0 scope:global -Clear__Q26Realmc14FindInfoStruct = .text:0x80393A58; // type:function size:0x60 scope:global -gcc2_compiled. = .text:0x80393AB8; // type:label scope:local -UpdateTaskTrcStartGame__Q26Realmc11GCInterface = .text:0x80393AB8; // type:function size:0x7F0 scope:global -UpdateTaskTrcCardExists__Q26Realmc11GCInterface = .text:0x803942A8; // type:function size:0x32C scope:global -UpdateTaskTrcGetCardInfo__Q26Realmc11GCInterface = .text:0x803945D4; // type:function size:0x378 scope:global -UpdateTaskTrcLoadFile__Q26Realmc11GCInterface = .text:0x8039494C; // type:function size:0xEC4 scope:global -UpdateTaskTrcSaveCheck__Q26Realmc11GCInterface = .text:0x80395810; // type:function size:0x8DC scope:global -UpdateTaskTrcSaveFile__Q26Realmc11GCInterface = .text:0x803960EC; // type:function size:0xD94 scope:global -UpdateTaskTrcDeleteFile__Q26Realmc11GCInterface = .text:0x80396E80; // type:function size:0x7F8 scope:global -UpdateTaskTrcListFiles__Q26Realmc11GCInterface = .text:0x80397678; // type:function size:0x480 scope:global -UpdateTaskTrcMount__Q26Realmc11GCInterface = .text:0x80397AF8; // type:function size:0x214 scope:global -UpdateTaskTrcFormat__Q26Realmc11GCInterface = .text:0x80397D0C; // type:function size:0x4A8 scope:global -UpdateTaskShowCardStatusMessage__Q26Realmc11GCInterface = .text:0x803981B4; // type:function size:0x34C scope:global -UpdateTaskTrcCheckSpace__Q26Realmc11GCInterface = .text:0x80398500; // type:function size:0x488 scope:global -gcc2_compiled. = .text:0x80398988; // type:label scope:local -GetVersionNumber__6RealmcRPCs = .text:0x80398988; // type:function size:0x74 scope:local -CheckMessageCompatibility__Q26Realmc12InterfaceImp = .text:0x803989FC; // type:function size:0x88 scope:global -__Q26Realmc12InterfaceImpRCQ26Realmc15SystemInterface = .text:0x80398A84; // type:function size:0xE8 scope:global -_._Q26Realmc12InterfaceImp = .text:0x80398B6C; // type:function size:0xC8 scope:global -AddRef__Q26Realmc12InterfaceImp = .text:0x80398C34; // type:function size:0x14 scope:global -Release__Q26Realmc12InterfaceImp = .text:0x80398C48; // type:function size:0x8C scope:global -_._Q26Realmc13BaseInterface = .text:0x80398CD4; // type:function size:0x34 scope:global -gcc2_compiled. = .text:0x80398D08; // type:label scope:local -__Q26Realmc18BlockCalculatorImp = .text:0x80398D08; // type:function size:0x44 scope:global -Init__Q26Realmc18BlockCalculatorImpPQ26Realmc8GCDriverUi = .text:0x80398D4C; // type:function size:0x50 scope:global -Clear__Q26Realmc18BlockCalculatorImp = .text:0x80398D9C; // type:function size:0x14 scope:global -SetFileInfo__Q26Realmc18BlockCalculatorImpRCQ26Realmc6CardIDRCQ26Realmc8FileInfo = .text:0x80398DB0; // type:function size:0x54 scope:global -_._Q26Realmc18BlockCalculatorImp = .text:0x80398E04; // type:function size:0x34 scope:global -GetResult__Q26Realmc18BlockCalculatorImp = .text:0x80398E38; // type:function size:0x8 scope:global -gcc2_compiled. = .text:0x80398E40; // type:label scope:local -MEM_copy__FPvPCvi = .text:0x80398E40; // type:function size:0x1F8 scope:global -gcc2_compiled. = .text:0x80399038; // type:label scope:local -MEM_fill__FPvUii = .text:0x80399038; // type:function size:0x144 scope:global -gcc2_compiled. = .text:0x8039917C; // type:label scope:local -LOCALE_getstate__FPCv11LOCALESTATE = .text:0x8039917C; // type:function size:0xD8 scope:global -LOCALE_setstate__FPv11LOCALESTATEi = .text:0x80399254; // type:function size:0x18 scope:global -compare__FPCvT0 = .text:0x8039926C; // type:function size:0x1C scope:local -getstringidbyindex__FUsPC12LOCALE_INDEX = .text:0x80399288; // type:function size:0x88 scope:local -LOCALE_getstrA__FPCvi = .text:0x80399310; // type:function size:0x13C scope:global -LOCALE_create__FPvi = .text:0x8039944C; // type:function size:0x114 scope:global -gcc2_compiled. = .text:0x80399560; // type:label scope:local -MEM_clear__FPvi = .text:0x80399560; // type:function size:0x28 scope:global -gcc2_compiled. = .text:0x80399588; // type:label scope:local -REAL_abortmessage__FPCce = .text:0x80399588; // type:function size:0xD8 scope:global -SYSTEM_abortmessage__FPCce = .text:0x80399660; // type:function size:0xD8 scope:local -DEBUG_break__Fv = .text:0x80399738; // type:function size:0x34 scope:global -gcc2_compiled. = .text:0x8039976C; // type:label scope:local -PRINT_string__F12PRINTCHANNELPCce = .text:0x8039976C; // type:function size:0x94 scope:global -PRINT_vstring__F12PRINTCHANNELPCcP13__va_list_tag = .text:0x80399800; // type:function size:0x9C scope:global -gcc2_compiled. = .text:0x8039989C; // type:label scope:local -PRINT_console__F12PRINTCHANNELPCc = .text:0x8039989C; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x803998C8; // type:label scope:local -__Q39RealInput6Effect4Info = .text:0x803998C8; // type:function size:0xC scope:global -__Q29RealInput8GcEffect = .text:0x803998D4; // type:function size:0x4C scope:global -_._Q29RealInput8GcEffect = .text:0x80399920; // type:function size:0x68 scope:global -Init__Q29RealInput8GcEffectPQ29RealInput6DevicePQ39RealInput6Effect4Info = .text:0x80399988; // type:function size:0x6C scope:global -Release__Q29RealInput8GcEffect = .text:0x803999F4; // type:function size:0x20 scope:global -Start__Q29RealInput8GcEffect = .text:0x80399A14; // type:function size:0x3C scope:global -Stop__Q29RealInput8GcEffect = .text:0x80399A50; // type:function size:0x58 scope:global -GetStatus__Q29RealInput8GcEffect = .text:0x80399AA8; // type:function size:0x1C scope:global -SetInfo__Q29RealInput8GcEffectPQ39RealInput6Effect4Info = .text:0x80399AC4; // type:function size:0x64 scope:global -gcc2_compiled. = .text:0x80399B28; // type:label scope:local -__Q29RealInput9EffectImp = .text:0x80399B28; // type:function size:0x54 scope:global -Init__Q29RealInput9EffectImpPQ29RealInput6DevicePQ39RealInput6Effect4Info = .text:0x80399B7C; // type:function size:0x20 scope:global -Release__Q29RealInput9EffectImp = .text:0x80399B9C; // type:function size:0xC scope:global -_._Q29RealInput9EffectImp = .text:0x80399BA8; // type:function size:0x54 scope:global -Start__Q29RealInput9EffectImp = .text:0x80399BFC; // type:function size:0x4 scope:global -Stop__Q29RealInput9EffectImp = .text:0x80399C00; // type:function size:0x4 scope:global -GetStatus__Q29RealInput9EffectImp = .text:0x80399C04; // type:function size:0x8 scope:global -GetDevice__Q29RealInput9EffectImp = .text:0x80399C0C; // type:function size:0x8 scope:global -GetInfo__Q29RealInput9EffectImpPQ39RealInput6Effect4Info = .text:0x80399C14; // type:function size:0x34 scope:global -SetInfo__Q29RealInput9EffectImpPQ39RealInput6Effect4Info = .text:0x80399C48; // type:function size:0x4 scope:global -gcc2_compiled. = .text:0x80399C4C; // type:label scope:local -CreateInstance__Q29RealInput9InterfaceRCQ29RealInput13ConfigOptions = .text:0x80399C4C; // type:function size:0x64 scope:global -AddRef__Q29RealInput9Interface = .text:0x80399CB0; // type:function size:0x8 scope:global -Release__Q29RealInput9Interface = .text:0x80399CB8; // type:function size:0x8 scope:global -Update__Q29RealInput9Interface = .text:0x80399CC0; // type:function size:0x4 scope:global -GetPad__Q29RealInput9Interface = .text:0x80399CC4; // type:function size:0x8 scope:global -GetMouse__Q29RealInput9Interface = .text:0x80399CCC; // type:function size:0x8 scope:global -GetKeyboard__Q29RealInput9Interface = .text:0x80399CD4; // type:function size:0x8 scope:global -GetEvent__Q29RealInput9Interface = .text:0x80399CDC; // type:function size:0x8 scope:global -_._Q29RealInput9Interface = .text:0x80399CE4; // type:function size:0x34 scope:global -gcc2_compiled. = .text:0x80399D18; // type:label scope:local -ReleaseAllocator__9RealInputv = .text:0x80399D18; // type:function size:0x48 scope:global -SetAllocator__9RealInputPQ32EA9Allocator10IAllocator = .text:0x80399D60; // type:function size:0x48 scope:global -GetAllocator__9RealInputv = .text:0x80399DA8; // type:function size:0x8 scope:global -AllocateMemSize__9RealInputPCciiii = .text:0x80399DB0; // type:function size:0xBC scope:global -FreeMemSize__9RealInputPvi = .text:0x80399E6C; // type:function size:0x50 scope:global -gcc2_compiled. = .text:0x80399EBC; // type:label scope:local -__Q29RealInput8GcDeviceQ39RealInput6Device4TypePQ29RealInput11GcInterface = .text:0x80399EBC; // type:function size:0x4C scope:global -_._Q29RealInput8GcDevice = .text:0x80399F08; // type:function size:0x54 scope:global -GetPortNum__Q29RealInput8GcDevice = .text:0x80399F5C; // type:function size:0x8 scope:global -SetPortNum__Q29RealInput8GcDevicei = .text:0x80399F64; // type:function size:0x8 scope:global -_._Q29RealInput9DeviceImp = .text:0x80399F6C; // type:function size:0x54 scope:global -Acquire__Q29RealInput9DeviceImp = .text:0x80399FC0; // type:function size:0x8 scope:global -Release__Q29RealInput9DeviceImp = .text:0x80399FC8; // type:function size:0x8 scope:global -Update__Q29RealInput9DeviceImp = .text:0x80399FD0; // type:function size:0x8 scope:global -gcc2_compiled. = .text:0x80399FD8; // type:label scope:local -GCPADVBLUpdate__9RealInputv = .text:0x80399FD8; // type:function size:0x7C scope:local -__Q29RealInput11GcInterfaceRCQ29RealInput13ConfigOptions = .text:0x8039A054; // type:function size:0xDC scope:global -_._Q29RealInput11GcInterface = .text:0x8039A130; // type:function size:0xC0 scope:global -GetUnusedEffectSlot__Q29RealInput11GcInterface = .text:0x8039A1F0; // type:function size:0x4C scope:global -EnumerateDevices__Q29RealInput11GcInterface = .text:0x8039A23C; // type:function size:0x18C scope:global -gcc2_compiled. = .text:0x8039A3C8; // type:label scope:local -__Q29RealInput5GcPadPQ29RealInput11GcInterfaceUiPV9PADStatus = .text:0x8039A3C8; // type:function size:0xEC scope:global -_._Q29RealInput5GcPad = .text:0x8039A4B4; // type:function size:0x8C scope:global -Update__Q29RealInput5GcPad = .text:0x8039A540; // type:function size:0x434 scope:global -CreateEffect__Q29RealInput5GcPadPQ39RealInput6Effect4Info = .text:0x8039A974; // type:function size:0xA0 scope:global -GetEffect__Q29RealInput5GcPad = .text:0x8039AA14; // type:function size:0x8 scope:global -gcc2_compiled. = .text:0x8039AA1C; // type:label scope:local -__Q29RealInput12InterfaceImpRCQ29RealInput13ConfigOptions = .text:0x8039AA1C; // type:function size:0xD8 scope:global -_._Q29RealInput12InterfaceImp = .text:0x8039AAF4; // type:function size:0xA8 scope:global -AddRef__Q29RealInput12InterfaceImp = .text:0x8039AB9C; // type:function size:0x14 scope:global -Release__Q29RealInput12InterfaceImp = .text:0x8039ABB0; // type:function size:0x70 scope:global -Update__Q29RealInput12InterfaceImp = .text:0x8039AC20; // type:function size:0x84 scope:global -GetEvent__Q29RealInput12InterfaceImp = .text:0x8039ACA4; // type:function size:0x34 scope:global -RegisterDevice__Q29RealInput12InterfaceImpPQ29RealInput9DeviceImp = .text:0x8039ACD8; // type:function size:0x64 scope:global -UnRegisterDevice__Q29RealInput12InterfaceImpPQ29RealInput9DeviceImp = .text:0x8039AD3C; // type:function size:0xA4 scope:global -GetPad__Q29RealInput12InterfaceImp = .text:0x8039ADE0; // type:function size:0x8 scope:global -GetMouse__Q29RealInput12InterfaceImp = .text:0x8039ADE8; // type:function size:0x8 scope:global -GetKeyboard__Q29RealInput12InterfaceImp = .text:0x8039ADF0; // type:function size:0x8 scope:global -__Q29RealInput6DeviceQ29RealInput8PlatformQ39RealInput6Device4Type = .text:0x8039ADF8; // type:function size:0x4C scope:global -_._Q29RealInput6Device = .text:0x8039AE44; // type:function size:0x38 scope:global -InitData__Q29RealInput6Device = .text:0x8039AE7C; // type:function size:0x50 scope:global -GetData__Q29RealInput6Device = .text:0x8039AECC; // type:function size:0x8 scope:global -Acquire__Q29RealInput6Device = .text:0x8039AED4; // type:function size:0x8 scope:global -Release__Q29RealInput6Device = .text:0x8039AEDC; // type:function size:0x8 scope:global -Update__Q29RealInput6Device = .text:0x8039AEE4; // type:function size:0x8 scope:global -CreateEffect__Q29RealInput6DevicePQ39RealInput6Effect4Info = .text:0x8039AEEC; // type:function size:0x8 scope:global -GetEffect__Q29RealInput6Device = .text:0x8039AEF4; // type:function size:0x8 scope:global -GetKeyState__Q29RealInput6DeviceUi = .text:0x8039AEFC; // type:function size:0x8 scope:global -gcc2_compiled. = .text:0x8039AF04; // type:label scope:local -__Q29RealInput6Effect = .text:0x8039AF04; // type:function size:0x14 scope:global -_._Q29RealInput6Effect = .text:0x8039AF18; // type:function size:0x38 scope:global -Start__Q29RealInput6Effect = .text:0x8039AF50; // type:function size:0x4 scope:global -Stop__Q29RealInput6Effect = .text:0x8039AF54; // type:function size:0x4 scope:global -GetStatus__Q29RealInput6Effect = .text:0x8039AF58; // type:function size:0x8 scope:global -GetDevice__Q29RealInput6Effect = .text:0x8039AF60; // type:function size:0x8 scope:global -GetInfo__Q29RealInput6EffectPQ39RealInput6Effect4Info = .text:0x8039AF68; // type:function size:0x4 scope:global -SetInfo__Q29RealInput6EffectPQ39RealInput6Effect4Info = .text:0x8039AF6C; // type:function size:0x4 scope:global -gcc2_compiled. = .text:0x8039AF70; // type:label scope:local -__Q29RealInput5Event = .text:0x8039AF70; // type:function size:0x30 scope:global -_._Q29RealInput5Event = .text:0x8039AFA0; // type:function size:0x38 scope:global -gcc2_compiled. = .text:0x8039AFD8; // type:label scope:local -__Q29RealInput10EventQueueUi = .text:0x8039AFD8; // type:function size:0xE0 scope:global -_._Q29RealInput10EventQueue = .text:0x8039B0B8; // type:function size:0xA8 scope:global -Clear__Q29RealInput10EventQueue = .text:0x8039B160; // type:function size:0xC scope:global -AddEvent__Q29RealInput10EventQueuePQ29RealInput5Event = .text:0x8039B16C; // type:function size:0xA4 scope:global -GetEvent__Q29RealInput10EventQueue = .text:0x8039B210; // type:function size:0x28 scope:global -gcc2_compiled. = .text:0x8039B238; // type:label scope:local -GetTime__Q29RealInput6ITimer = .text:0x8039B238; // type:function size:0x20 scope:global -VMInit = .text:0x8039B258; // type:function size:0x9C scope:global -__VMGetNumPagesInMRAM = .text:0x8039B2F4; // type:function size:0x8 scope:global -VMGetARAMSize = .text:0x8039B2FC; // type:function size:0x8 scope:global -VMGetARAMBase = .text:0x8039B304; // type:function size:0x8 scope:global -__VMAllocMRAMSwapSpace = .text:0x8039B30C; // type:function size:0x30 scope:global -__VMSwapPageIn = .text:0x8039B33C; // type:function size:0x1FC scope:global -__VMGetPageToReplace = .text:0x8039B538; // type:function size:0x44 scope:global -__VMPageReplacementLRU = .text:0x8039B57C; // type:function size:0x1D0 scope:global -__VMPageReplacementRandom = .text:0x8039B74C; // type:function size:0x94 scope:global -__VMPageReplacementFIFO = .text:0x8039B7E0; // type:function size:0x6C scope:global -VMAlloc = .text:0x8039B84C; // type:function size:0x100 scope:global -__VMTranslateVMPageToARAMPage = .text:0x8039B94C; // type:function size:0x40 scope:global -__VMDoesMappingExist = .text:0x8039B98C; // type:function size:0x20 scope:global -__VMMappingErrorAlert = .text:0x8039B9AC; // type:function size:0x38 scope:global -__VMSetARAMPageAsDirty = .text:0x8039B9E4; // type:function size:0x18 scope:global -__VMIsARAMPageDirty = .text:0x8039B9FC; // type:function size:0x14 scope:global -__VMAllocVirtualToARAMLUT = .text:0x8039BA10; // type:function size:0xA8 scope:global -__VMAllocARAMToVirtualLUT = .text:0x8039BAB8; // type:function size:0xA0 scope:global -gcc2_compiled. = .text:0x8039BB58; // type:label scope:local -__sn_serialp = .text:0x8039BB58; // type:function size:0x5C scope:global -_write = .text:0x8039BBB4; // type:function size:0x50 scope:global -write = .text:0x8039BC04; // type:function size:0x20 scope:global -close = .text:0x8039BC24; // type:function size:0x20 scope:global -fstat = .text:0x8039BC44; // type:function size:0x10 scope:global -lseek = .text:0x8039BC54; // type:function size:0x20 scope:global -read = .text:0x8039BC74; // type:function size:0x20 scope:global -open = .text:0x8039BC94; // type:function size:0xA4 scope:global -gcc2_compiled. = .text:0x8039BD38; // type:label scope:local -tolower = .text:0x8039BD38; // type:function size:0x1C scope:global -gcc2_compiled. = .text:0x8039BD54; // type:label scope:local -vprintf = .text:0x8039BD54; // type:function size:0x34 scope:global -gcc2_compiled. = .text:0x8039BD88; // type:label scope:local -bsearch = .text:0x8039BD88; // type:function size:0x98 scope:global -gcc2_compiled. = .text:0x8039BE20; // type:label scope:local -strrchr = .text:0x8039BE20; // type:function size:0x4C scope:global -gcc2_compiled. = .text:0x8039BE6C; // type:label scope:local -wcscat = .text:0x8039BE6C; // type:function size:0x68 scope:global -gcc2_compiled. = .text:0x8039BED4; // type:label scope:local -wcscpy = .text:0x8039BED4; // type:function size:0x58 scope:global -gcc2_compiled. = .text:0x8039BF2C; // type:label scope:local -wcslen = .text:0x8039BF2C; // type:function size:0x28 scope:global -_savegpr_14 = .text:0x8039BF54; // type:function size:0x4C scope:global -_savegpr_15 = .text:0x8039BF58; // type:function size:0x48 scope:global -_savegpr_16 = .text:0x8039BF5C; // type:function size:0x44 scope:global -_savegpr_17 = .text:0x8039BF60; // type:function size:0x40 scope:global -_savegpr_18 = .text:0x8039BF64; // type:function size:0x3C scope:global -_savegpr_19 = .text:0x8039BF68; // type:function size:0x38 scope:global -_savegpr_20 = .text:0x8039BF6C; // type:function size:0x34 scope:global -_savegpr_21 = .text:0x8039BF70; // type:function size:0x30 scope:global -_savegpr_22 = .text:0x8039BF74; // type:function size:0x2C scope:global -_savegpr_23 = .text:0x8039BF78; // type:function size:0x28 scope:global -_savegpr_24 = .text:0x8039BF7C; // type:function size:0x24 scope:global -_savegpr_25 = .text:0x8039BF80; // type:function size:0x20 scope:global -_savegpr_26 = .text:0x8039BF84; // type:function size:0x1C scope:global -_savegpr_27 = .text:0x8039BF88; // type:function size:0x18 scope:global -_savegpr_28 = .text:0x8039BF8C; // type:function size:0x14 scope:global -_savegpr_29 = .text:0x8039BF90; // type:function size:0x10 scope:global -_savegpr_30 = .text:0x8039BF94; // type:function size:0xC scope:global -_savegpr_31 = .text:0x8039BF98; // type:function size:0x8 scope:global -_restgpr_14 = .text:0x8039BFA0; // type:function size:0x4C scope:global -_restgpr_15 = .text:0x8039BFA4; // type:function size:0x48 scope:global -_restgpr_16 = .text:0x8039BFA8; // type:function size:0x44 scope:global -_restgpr_17 = .text:0x8039BFAC; // type:function size:0x40 scope:global -_restgpr_18 = .text:0x8039BFB0; // type:function size:0x3C scope:global -_restgpr_19 = .text:0x8039BFB4; // type:function size:0x38 scope:global -_restgpr_20 = .text:0x8039BFB8; // type:function size:0x34 scope:global -_restgpr_21 = .text:0x8039BFBC; // type:function size:0x30 scope:global -_restgpr_22 = .text:0x8039BFC0; // type:function size:0x2C scope:global -_restgpr_23 = .text:0x8039BFC4; // type:function size:0x28 scope:global -_restgpr_24 = .text:0x8039BFC8; // type:function size:0x24 scope:global -_restgpr_25 = .text:0x8039BFCC; // type:function size:0x20 scope:global -_restgpr_26 = .text:0x8039BFD0; // type:function size:0x1C scope:global -_restgpr_27 = .text:0x8039BFD4; // type:function size:0x18 scope:global -_restgpr_28 = .text:0x8039BFD8; // type:function size:0x14 scope:global -_restgpr_29 = .text:0x8039BFDC; // type:function size:0x10 scope:global -_restgpr_30 = .text:0x8039BFE0; // type:function size:0xC scope:global -_restgpr_31 = .text:0x8039BFE4; // type:function size:0x8 scope:global -gcc2_compiled. = .text:0x8039BFEC; // type:label scope:local -exp = .text:0x8039BFEC; // type:function size:0x27C scope:global -gcc2_compiled. = .text:0x8039C268; // type:label scope:local -sin = .text:0x8039C268; // type:function size:0xE0 scope:global -gcc2_compiled. = .text:0x8039C348; // type:label scope:local -__kernel_cos = .text:0x8039C348; // type:function size:0xF4 scope:global -gcc2_compiled. = .text:0x8039C43C; // type:label scope:local -__kernel_sin = .text:0x8039C43C; // type:function size:0xAC scope:global -gcc2_compiled. = .text:0x8039C4E8; // type:label scope:local -__ieee754_rem_pio2 = .text:0x8039C4E8; // type:function size:0x364 scope:global -gcc2_compiled. = .text:0x8039C84C; // type:label scope:local -__kernel_rem_pio2 = .text:0x8039C84C; // type:function size:0x888 scope:global -gcc2_compiled. = .text:0x8039D0D4; // type:label scope:local -floor = .text:0x8039D0D4; // type:function size:0x15C scope:global -OSInitMessageQueue = .text:0x8039D230; // type:function size:0x60 scope:global -OSSendMessage = .text:0x8039D290; // type:function size:0xC8 scope:global -OSReceiveMessage = .text:0x8039D358; // type:function size:0xDC scope:global -__ARQServiceQueueLo = .text:0x8039D434; // type:function size:0x100 scope:global -__ARQCallbackHack = .text:0x8039D534; // type:function size:0x4 scope:global -__ARQInterruptServiceRoutine = .text:0x8039D538; // type:function size:0xCC scope:global -ARQInit = .text:0x8039D604; // type:function size:0x70 scope:global -ARQPostRequest = .text:0x8039D674; // type:function size:0x15C scope:global -ARQRemoveRequest = .text:0x8039D7D0; // type:function size:0xE8 scope:global -AXInit = .text:0x8039D8B8; // type:function size:0x24 scope:global -AXInitEx = .text:0x8039D8DC; // type:function size:0x4C scope:global -AXQuit = .text:0x8039D928; // type:function size:0x34 scope:global -__AXGetStackHead = .text:0x8039D95C; // type:function size:0x18 scope:global -__AXServiceCallbackStack = .text:0x8039D974; // type:function size:0x74 scope:global -__AXAllocInit = .text:0x8039D9E8; // type:function size:0xB4 scope:global -__AXAllocQuit = .text:0x8039DA9C; // type:function size:0xB4 scope:global -__AXPushFreeStack = .text:0x8039DB50; // type:function size:0x20 scope:global -__AXPushCallbackStack = .text:0x8039DB70; // type:function size:0x10 scope:global -__AXPopCallbackStack = .text:0x8039DB80; // type:function size:0x1C scope:global -__AXRemoveFromStack = .text:0x8039DB9C; // type:function size:0x94 scope:global -AXFreeVoice = .text:0x8039DC30; // type:function size:0x80 scope:global -AXAcquireVoice = .text:0x8039DCB0; // type:function size:0x174 scope:global -__AXAuxInit = .text:0x8039DE24; // type:function size:0xE4 scope:global -__AXAuxQuit = .text:0x8039DF08; // type:function size:0x10 scope:global -__AXGetAuxAInput = .text:0x8039DF18; // type:function size:0x34 scope:global -__AXGetAuxAInputDpl2 = .text:0x8039DF4C; // type:function size:0x20 scope:global -__AXGetAuxAOutput = .text:0x8039DF6C; // type:function size:0x1C scope:global -__AXGetAuxAOutputDpl2R = .text:0x8039DF88; // type:function size:0x20 scope:global -__AXGetAuxAOutputDpl2Ls = .text:0x8039DFA8; // type:function size:0x20 scope:global -__AXGetAuxAOutputDpl2Rs = .text:0x8039DFC8; // type:function size:0x20 scope:global -__AXGetAuxBInput = .text:0x8039DFE8; // type:function size:0x34 scope:global -__AXGetAuxBOutput = .text:0x8039E01C; // type:function size:0x1C scope:global -__AXGetAuxBForDPL2 = .text:0x8039E038; // type:function size:0x1C scope:global -__AXGetAuxBOutputDPL2 = .text:0x8039E054; // type:function size:0x1C scope:global -__AXProcessAux = .text:0x8039E070; // type:function size:0x23C scope:global -AXRegisterAuxACallback = .text:0x8039E2AC; // type:function size:0xC scope:global -__AXGetCommandListCycles = .text:0x8039E2B8; // type:function size:0x8 scope:global -__AXGetCommandListAddress = .text:0x8039E2C0; // type:function size:0x3C scope:global -__AXNextFrame = .text:0x8039E2FC; // type:function size:0x6B0 scope:global -__AXClInit = .text:0x8039E9AC; // type:function size:0x24 scope:global -__AXClQuit = .text:0x8039E9D0; // type:function size:0x4 scope:global -AXSetMode = .text:0x8039E9D4; // type:function size:0x14 scope:global -AXSetCompressor = .text:0x8039E9E8; // type:function size:0x8 scope:global -__AXOutNewFrame = .text:0x8039E9F0; // type:function size:0x1B8 scope:global -__AXOutAiCallback = .text:0x8039EBA8; // type:function size:0xBC scope:global -__AXDSPInitCallback = .text:0x8039EC64; // type:function size:0xC scope:local -__AXDSPResumeCallback = .text:0x8039EC70; // type:function size:0x58 scope:local -__AXDSPDoneCallback = .text:0x8039ECC8; // type:function size:0x2C scope:local -__AXOutInitDSP = .text:0x8039ECF4; // type:function size:0xCC scope:global -__AXOutInit = .text:0x8039EDC0; // type:function size:0x3A0 scope:global -__AXOutQuit = .text:0x8039F160; // type:function size:0x58 scope:global -__AXGetStudio = .text:0x8039F1B8; // type:function size:0xC scope:global -__AXPrintStudio = .text:0x8039F1C4; // type:function size:0x3F8 scope:global -__AXSPBInit = .text:0x8039F5BC; // type:function size:0x2C scope:global -__AXSPBQuit = .text:0x8039F5E8; // type:function size:0x4 scope:global -__AXDepopVoice = .text:0x8039F5EC; // type:function size:0x94 scope:global -__AXGetNumVoices = .text:0x8039F680; // type:function size:0x8 scope:global -__AXServiceVPB = .text:0x8039F688; // type:function size:0x74C scope:global -__AXSyncPBs = .text:0x8039FDD4; // type:function size:0x278 scope:global -__AXGetPBs = .text:0x803A004C; // type:function size:0xC scope:global -__AXSetPBDefault = .text:0x803A0058; // type:function size:0x44 scope:global -__AXVPBInit = .text:0x803A009C; // type:function size:0x204 scope:global -__AXVPBQuit = .text:0x803A02A0; // type:function size:0x4 scope:global -AXSetVoiceSrcType = .text:0x803A02A4; // type:function size:0xC4 scope:global -AXSetVoiceState = .text:0x803A0368; // type:function size:0x5C scope:global -AXSetVoiceAddr = .text:0x803A03C4; // type:function size:0x110 scope:global -AXSetVoiceAdpcm = .text:0x803A04D4; // type:function size:0xA4 scope:global -AXSetVoiceSrcRatio = .text:0x803A0578; // type:function size:0x98 scope:global -AXSetVoiceAdpcmLoop = .text:0x803A0610; // type:function size:0x6C scope:global -__AXGetCurrentProfile = .text:0x803A067C; // type:function size:0x48 scope:global -DSPCheckMailToDSP = .text:0x803A06C4; // type:function size:0x10 scope:global -DSPCheckMailFromDSP = .text:0x803A06D4; // type:function size:0x10 scope:global -DSPReadMailFromDSP = .text:0x803A06E4; // type:function size:0x18 scope:global -DSPSendMailToDSP = .text:0x803A06FC; // type:function size:0x14 scope:global -DSPInit = .text:0x803A0710; // type:function size:0xC4 scope:global -DSPCheckInit = .text:0x803A07D4; // type:function size:0x8 scope:global -DSPAddTask = .text:0x803A07DC; // type:function size:0x70 scope:global -DSPCancelTask = .text:0x803A084C; // type:function size:0x40 scope:global -DSPAssertTask = .text:0x803A088C; // type:function size:0xC8 scope:global -__DSP_debug_printf = .text:0x803A0954; // type:function size:0x50 scope:global -__DSPHandler = .text:0x803A09A4; // type:function size:0x424 scope:global -__DSP_exec_task = .text:0x803A0DC8; // type:function size:0x1A0 scope:global -__DSP_boot_task = .text:0x803A0F68; // type:function size:0x18C scope:global -__DSP_insert_task = .text:0x803A10F4; // type:function size:0xA0 scope:global -__DSP_remove_task = .text:0x803A1194; // type:function size:0x94 scope:global -FormatCallback = .text:0x803A1228; // type:function size:0x144 scope:local -__CARDFormatRegionAsync = .text:0x803A136C; // type:function size:0x658 scope:global -CARDFormat = .text:0x803A19C4; // type:function size:0x54 scope:global -CreateCallbackFat = .text:0x803A1A18; // type:function size:0x130 scope:local -CARDCreateAsync = .text:0x803A1B48; // type:function size:0x220 scope:global -CARDCreate = .text:0x803A1D68; // type:function size:0x48 scope:global -__CARDSeek = .text:0x803A1DB0; // type:function size:0x1B8 scope:global -ReadCallback = .text:0x803A1F68; // type:function size:0x130 scope:local -CARDReadAsync = .text:0x803A2098; // type:function size:0x144 scope:global -CARDRead = .text:0x803A21DC; // type:function size:0x48 scope:global -WriteCallback = .text:0x803A2224; // type:function size:0x170 scope:local -EraseCallback = .text:0x803A2394; // type:function size:0xB0 scope:local -CARDWriteAsync = .text:0x803A2444; // type:function size:0x114 scope:global -CARDWrite = .text:0x803A2558; // type:function size:0x48 scope:global -DeleteCallback = .text:0x803A25A0; // type:function size:0xA4 scope:local -CARDFastDeleteAsync = .text:0x803A2644; // type:function size:0x12C scope:global -CARDFastDelete = .text:0x803A2770; // type:function size:0x48 scope:global -CARDDeleteAsync = .text:0x803A27B8; // type:function size:0x110 scope:global -CARDDelete = .text:0x803A28C8; // type:function size:0x48 scope:global -UpdateIconOffsets = .text:0x803A2910; // type:function size:0x1F8 scope:local -CARDGetStatus = .text:0x803A2B08; // type:function size:0x114 scope:global -CARDSetStatusAsync = .text:0x803A2C1C; // type:function size:0x174 scope:global -CARDSetStatus = .text:0x803A2D90; // type:function size:0x48 scope:global -gcc2_compiled. = .text:0x803A2DD8; // type:label scope:local -__15EASemaphoreData = .text:0x803A2DD8; // type:function size:0x44 scope:global -__Q32EA6Thread19SemaphoreParametersibPCc = .text:0x803A2E1C; // type:function size:0x8 scope:global -__Q32EA6Thread9Semaphorei = .text:0x803A2E24; // type:function size:0x54 scope:global -_._Q32EA6Thread9Semaphore = .text:0x803A2E78; // type:function size:0x28 scope:global -Init__Q32EA6Thread9SemaphorePCQ32EA6Thread19SemaphoreParameters = .text:0x803A2EA0; // type:function size:0x38 scope:global -Wait__Q32EA6Thread9SemaphoreRCUi = .text:0x803A2ED8; // type:function size:0xC0 scope:global -Post__Q32EA6Thread9Semaphorei = .text:0x803A2F98; // type:function size:0x54 scope:global -ThreadSleep__Q22EA6ThreadRCUi = .text:0x803A2FEC; // type:function size:0x20 scope:global -GetThreadTime__Q22EA6Threadv = .text:0x803A300C; // type:function size:0x4C scope:global -__static_initialization_and_destruction_0 = .text:0x803A3058; // type:function size:0x28 scope:local -_GLOBAL_.I.AllocateThreadDynamicData__Q22EA6Threadv = .text:0x803A3080; // type:function size:0x2C scope:local -gcc2_compiled. = .text:0x803A30AC; // type:label scope:local -SNDBANK_patchinfo = .text:0x803A30AC; // type:function size:0xE4 scope:global -gcc2_compiled. = .text:0x803A3190; // type:label scope:local -SNDCTRL_getprogvol = .text:0x803A3190; // type:function size:0x94 scope:global -gcc2_compiled. = .text:0x803A3224; // type:label scope:local -SNDSTRM_getprogvol = .text:0x803A3224; // type:function size:0x98 scope:global -gcc2_compiled. = .text:0x803A32BC; // type:label scope:local -SNDtimeremaining = .text:0x803A32BC; // type:function size:0xDC scope:global -VMBASEInit = .text:0x803A3398; // type:function size:0xCC scope:global -VMBASESetPageTableEntry = .text:0x803A3464; // type:function size:0x94 scope:global -VMBASEClearPageTableEntry = .text:0x803A34F8; // type:function size:0x8C scope:global -VMBASEIsPageValid = .text:0x803A3584; // type:function size:0x28 scope:global -VMBASEIsPageReferenced = .text:0x803A35AC; // type:function size:0x28 scope:global -VMBASEIsPageDirty = .text:0x803A35D4; // type:function size:0x28 scope:global -VMBASESetPageReferenced = .text:0x803A35FC; // type:function size:0x90 scope:global -__VMBASEClearPageFromTLB = .text:0x803A368C; // type:function size:0x10 scope:global -VMBASEGetVirtualAddrFromPageInMRAM = .text:0x803A369C; // type:function size:0x10 scope:global -__VMBASESetVirtualAddressForPageInMRAM = .text:0x803A36AC; // type:function size:0x10 scope:global -VMBASEIsPageLocked = .text:0x803A36BC; // type:function size:0xC scope:global -VMBASESetPageLocked = .text:0x803A36C8; // type:function size:0x28 scope:global -__VMBASESetSwapPageCallback = .text:0x803A36F0; // type:function size:0x8 scope:global -__VMBASEInitPageTable = .text:0x803A36F8; // type:function size:0x3C scope:global -__VMBASEInitLockedPageTable = .text:0x803A3734; // type:function size:0x30 scope:global -__VMBASEInitReversePageTable = .text:0x803A3764; // type:function size:0x30 scope:global -__VMBASEInvalidatePageTable = .text:0x803A3794; // type:function size:0x158 scope:global -__VMBASEInvalidateLockedPageTable = .text:0x803A38EC; // type:function size:0xD8 scope:global -__VMBASEInvalidateReversePageTable = .text:0x803A39C4; // type:function size:0x78 scope:global -__VMBASEVirtualAddrToPageTableAddr = .text:0x803A3A3C; // type:function size:0x18 scope:global -__VMBASEInvalidateEntireTLB = .text:0x803A3A54; // type:function size:0x58 scope:global -__VMBASESetupVMRegisters = .text:0x803A3AAC; // type:function size:0x54 scope:global -__VMBASESetupSDR1 = .text:0x803A3B00; // type:function size:0x48 scope:local -__VMBASESetupVMRegisters_SetSDR1 = .text:0x803A3B18; // type:label scope:global -__VMBASESetupVMRegisters_End = .text:0x803A3B40; // type:label scope:global -__VMBASESetupExceptionHandlers = .text:0x803A3B48; // type:function size:0x17C scope:global -__VMBASEDSIExceptionHandler = .text:0x803A3CC4; // type:function size:0xF4 scope:local -__VMBASEDSIExceptionHandler_SetOriginalInstruction = .text:0x803A3DB0; // type:label scope:global -__VMBASEDSIExceptionHandler_SetBranchBack = .text:0x803A3DB4; // type:label scope:global -__VMBASEDSIServiceExceptionPrep = .text:0x803A3DB8; // type:function size:0x50 scope:global -__VMBASEDSIServiceException = .text:0x803A3E08; // type:function size:0x64 scope:global -__VMBASEISIExceptionHandler = .text:0x803A3E6C; // type:function size:0xF4 scope:local -__VMBASEISIExceptionHandler_SetOriginalInstruction = .text:0x803A3F58; // type:label scope:global -__VMBASEISIExceptionHandler_SetBranchBack = .text:0x803A3F5C; // type:label scope:global -__VMBASEISIServiceExceptionPrep = .text:0x803A3F60; // type:function size:0x4C scope:global -__VMBASEISIServiceException = .text:0x803A3FAC; // type:function size:0x58 scope:global -OSInitSemaphore = .text:0x803A4004; // type:function size:0x58 scope:global -OSWaitSemaphore = .text:0x803A405C; // type:function size:0x70 scope:global -OSTryWaitSemaphore = .text:0x803A40CC; // type:function size:0x54 scope:global -OSSignalSemaphore = .text:0x803A4120; // type:function size:0x60 scope:global -IsClutType__Q29RealShape15TexelTypeHelperQ29RealShape9TexelType = .text:0x803A4180; // type:function size:0x24 scope:global -GetDepth__Q29RealShape15TexelTypeHelperQ29RealShape9TexelType = .text:0x803A41A4; // type:function size:0x14 scope:global -gcc2_compiled. = .over:0x803A41B8; // type:label scope:local -__static_initialization_and_destruction_0 = .over:0x803A41B8; // type:function size:0x50 scope:local -_overlay_start = .over:0x803A41B8; // type:object scope:global -_GLOBAL_.I.__OSBusClock = .over:0x803A4208; // type:function size:0x2C scope:local -gcc2_compiled. = .over:0x803A4294; // type:label scope:local -FindScreenInfo__FPCci = .over:0x803A4294; // type:function size:0x330 scope:local -GetCurrentGarageName__Fv = .over:0x803A45C4; // type:function size:0xB0 scope:local -FindGarageCameraInfo__FPCc = .over:0x803A4674; // type:function size:0xCC scope:local -FindGarageEntryCameraInfo__Fv = .over:0x803A4740; // type:function size:0x28 scope:local -FindGarageFinalCameraInfo__Fv = .over:0x803A4768; // type:function size:0x28 scope:local -FindScreenCameraInfo__FUi = .over:0x803A4790; // type:function size:0xF0 scope:local -HaveAttributesChanged__FRQ36Attrib3Gen8frontend = .over:0x803A4880; // type:function size:0x8 scope:local -Init__16FEGeometryModelsPc = .over:0x803A4888; // type:function size:0x208 scope:global -UnInit__16FEGeometryModels = .over:0x803A4A90; // type:function size:0x80 scope:global -Render__16FEGeometryModelsP5eViewP8bMatrix4Ui = .over:0x803A4B10; // type:function size:0xF4 scope:global -__16GarageMainScreenP21ScreenConstructorDataiP8RideInfoi = .over:0x803A4C04; // type:function size:0x278 scope:global -_._16GarageMainScreen = .over:0x803A4E7C; // type:function size:0xD4 scope:global -GetInstance__16GarageMainScreen = .over:0x803A4F50; // type:function size:0x28 scope:global -EnableCarRendering__16GarageMainScreen = .over:0x803A4F78; // type:function size:0x18 scope:global -DisableCarRendering__16GarageMainScreen = .over:0x803A4F90; // type:function size:0x18 scope:global -IsCarRendering__16GarageMainScreen = .over:0x803A4FA8; // type:function size:0x24 scope:global -HandleTick__16GarageMainScreenUl = .over:0x803A4FCC; // type:function size:0x3E4 scope:global -SetRideInfo__16GarageMainScreenP8RideInfo19eSetRideInfoReasons = .over:0x803A53B0; // type:function size:0xCC scope:global -CancelCarLoad__16GarageMainScreen = .over:0x803A547C; // type:function size:0x30 scope:global -UpdateCurrentCameraView__16GarageMainScreenb = .over:0x803A54AC; // type:function size:0x18C scope:global -RefreshBackground__16GarageMainScreen = .over:0x803A5638; // type:function size:0xAC scope:global -BackgroundLoaded__16GarageMainScreeni = .over:0x803A56E4; // type:function size:0x90 scope:global -GetCarRotationX__16GarageMainScreen = .over:0x803A5774; // type:function size:0x54 scope:global -GetCarRotationY__16GarageMainScreen = .over:0x803A57C8; // type:function size:0x54 scope:global -GetCarRotationZ__16GarageMainScreen = .over:0x803A581C; // type:function size:0x54 scope:global -GetGeometryZAngle__16GarageMainScreen = .over:0x803A5870; // type:function size:0x64 scope:global -GetGeometryXPos__16GarageMainScreen = .over:0x803A58D4; // type:function size:0x44 scope:global -GetGeometryYPos__16GarageMainScreen = .over:0x803A5918; // type:function size:0x54 scope:global -GetGeometryZPos__16GarageMainScreen = .over:0x803A596C; // type:function size:0x44 scope:global -UpdateRenderingCarParameters__16GarageMainScreenP20FrontEndRenderingCar = .over:0x803A59B0; // type:function size:0x4A4 scope:global -HandleRender__16GarageMainScreenUi = .over:0x803A5E54; // type:function size:0x13C scope:global -HandleShowPackage__16GarageMainScreenUi = .over:0x803A5F90; // type:function size:0x78 scope:global -HandleHidePackage__16GarageMainScreenUi = .over:0x803A6008; // type:function size:0x10 scope:global -HandleJoyEvents__16GarageMainScreen = .over:0x803A6018; // type:function size:0x34C scope:global -NotificationMessage__16GarageMainScreenUlP8FEObjectUlUl = .over:0x803A6364; // type:function size:0xB0 scope:global -CreateGarageMainScreen__FP21ScreenConstructorData = .over:0x803A6414; // type:function size:0x48 scope:global -__15GarageCarLoader = .over:0x803A645C; // type:function size:0x78 scope:global -_._15GarageCarLoader = .over:0x803A64D4; // type:function size:0x40 scope:global -Init__15GarageCarLoader = .over:0x803A6514; // type:function size:0x18 scope:global -CleanUp__15GarageCarLoader = .over:0x803A652C; // type:function size:0x84 scope:global -CancelCarLoad__15GarageCarLoader = .over:0x803A65B0; // type:function size:0x38 scope:global -LoadRideInfo__15GarageCarLoaderP8RideInfo = .over:0x803A65E8; // type:function size:0x104 scope:global -GetCurrentRideInfo__15GarageCarLoader = .over:0x803A66EC; // type:function size:0x1C scope:global -Switch__15GarageCarLoader = .over:0x803A6708; // type:function size:0xC scope:global -Update__15GarageCarLoader = .over:0x803A6714; // type:function size:0x10C scope:global -__tcf_0 = .over:0x803A6820; // type:function size:0x2C scope:local -GetGarageCarLoader__Fv = .over:0x803A684C; // type:function size:0x5C scope:global -InitGarageCarLoaders__Fv = .over:0x803A68A8; // type:function size:0x24 scope:global -CleanUpGarageCarLoaders__Fv = .over:0x803A68CC; // type:function size:0x24 scope:global -UpdateGarageCarLoaders__Fv = .over:0x803A68F0; // type:function size:0x24 scope:global -FindWhichScreenToUpdate__9CarViewer18eCarViewerWhichCar = .over:0x803A6914; // type:function size:0x50 scope:global -SetRideInfo__9CarViewerP8RideInfo19eSetRideInfoReasons18eCarViewerWhichCar = .over:0x803A6964; // type:function size:0xCC scope:global -CancelCarLoad__9CarViewer18eCarViewerWhichCar = .over:0x803A6A30; // type:function size:0x24 scope:global -GetRideInfo__9CarViewer18eCarViewerWhichCar = .over:0x803A6A54; // type:function size:0xC scope:global -HideAllCars__9CarViewer = .over:0x803A6A60; // type:function size:0x3C scope:global -ShowAllCars__9CarViewer = .over:0x803A6A9C; // type:function size:0x3C scope:global -ShowCarScreen__9CarViewer = .over:0x803A6AD8; // type:function size:0x54 scope:global -__9UIQRBriefP21ScreenConstructorData = .over:0x803A6B2C; // type:function size:0x144 scope:global -RefreshHeader__9UIQRBrief = .over:0x803A6C70; // type:function size:0x408 scope:global -UpdateSliders__9UIQRBrief = .over:0x803A7078; // type:function size:0x18C scope:global -Setup__9UIQRBrief = .over:0x803A7204; // type:function size:0x298 scope:global -NotificationMessage__9UIQRBriefUlP8FEObjectUlUl = .over:0x803A749C; // type:function size:0x464 scope:global -GetRandomCar__9UIQRBrief = .over:0x803A7900; // type:function size:0x44 scope:global -GetRandomTrack__9UIQRBrief = .over:0x803A7944; // type:function size:0x44 scope:global -_SetQRMode__Fi = .over:0x803A7988; // type:function size:0xC scope:local -__12UIQRMainMenuP21ScreenConstructorData = .over:0x803A7994; // type:function size:0x4C scope:global -RefreshHeader__12UIQRMainMenu = .over:0x803A79E0; // type:function size:0x5C scope:global -Setup__12UIQRMainMenu = .over:0x803A7A3C; // type:function size:0x174 scope:global -NotificationMessage__12UIQRMainMenuUlP8FEObjectUlUl = .over:0x803A7BB0; // type:function size:0x154 scope:global -__14UIQRModeSelectP21ScreenConstructorData = .over:0x803A7D04; // type:function size:0x4C scope:global -RefreshHeader__14UIQRModeSelect = .over:0x803A7D50; // type:function size:0x98 scope:global -Setup__14UIQRModeSelect = .over:0x803A7DE8; // type:function size:0x308 scope:global -NotificationMessage__14UIQRModeSelectUlP8FEObjectUlUl = .over:0x803A80F0; // type:function size:0x130 scope:global -__15UIQRTrackSelectP21ScreenConstructorData = .over:0x803A8220; // type:function size:0x64 scope:global -_._15UIQRTrackSelect = .over:0x803A8284; // type:function size:0x80 scope:global -Setup__15UIQRTrackSelect = .over:0x803A8304; // type:function size:0x118 scope:global -NotificationMessage__15UIQRTrackSelectUlP8FEObjectUlUl = .over:0x803A841C; // type:function size:0x2DC scope:global -SetSelectedTrack__15UIQRTrackSelectP15GRaceParameters = .over:0x803A86F8; // type:function size:0x58 scope:global -IsRaceValidForMike__15UIQRTrackSelectP15GRaceParameters = .over:0x803A8750; // type:function size:0xB8 scope:global -TryToAddTrack__15UIQRTrackSelectP15GRaceParametersii = .over:0x803A8808; // type:function size:0x174 scope:global -BuildPresetTrackList__15UIQRTrackSelect = .over:0x803A897C; // type:function size:0x1D4 scope:global -RefreshHeader__15UIQRTrackSelect = .over:0x803A8B50; // type:function size:0x684 scope:global -ScrollTracks__15UIQRTrackSelect10eScrollDir = .over:0x803A91D4; // type:function size:0xB8 scope:global -ScrollRegions__15UIQRTrackSelect10eScrollDir = .over:0x803A928C; // type:function size:0xA4 scope:global -__16UIQRTrackOptionsP21ScreenConstructorData = .over:0x803A9330; // type:function size:0x84 scope:global -NotificationMessage__16UIQRTrackOptionsUlP8FEObjectUlUl = .over:0x803A93B4; // type:function size:0x280 scope:global -Setup__16UIQRTrackOptions = .over:0x803A9634; // type:function size:0x19C scope:global -BoilerPlateOnline__16UIQRTrackOptionsRCb = .over:0x803A97D0; // type:function size:0x4 scope:global -SetupCircuit__16UIQRTrackOptions = .over:0x803A97D4; // type:function size:0x1B4 scope:global -SetupSprint__16UIQRTrackOptions = .over:0x803A9988; // type:function size:0x184 scope:global -SetupDrag__16UIQRTrackOptions = .over:0x803A9B0C; // type:function size:0x128 scope:global -SetupKnockout__16UIQRTrackOptions = .over:0x803A9C34; // type:function size:0x270 scope:global -SetupSpeedTrap__16UIQRTrackOptions = .over:0x803A9EA4; // type:function size:0x1F4 scope:global -SetupTollbooth__16UIQRTrackOptions = .over:0x803AA098; // type:function size:0x138 scope:global -__24QRCarSelectBustedManagerPCci = .over:0x803AA1D0; // type:function size:0x30 scope:global -_._24QRCarSelectBustedManager = .over:0x803AA200; // type:function size:0x6C scope:global -IsImpoundInfoVisible__24QRCarSelectBustedManager = .over:0x803AA26C; // type:function size:0x28 scope:global -ShowImpoundedTexture__24QRCarSelectBustedManager = .over:0x803AA294; // type:function size:0x1C scope:global -NotificationMessage__24QRCarSelectBustedManagerUlP8FEObjectUlUl = .over:0x803AA2B0; // type:function size:0x204 scope:global -TextureLoadedCallback__24QRCarSelectBustedManager = .over:0x803AA4B4; // type:function size:0xDC scope:global -LoadImpoundTexture__24QRCarSelectBustedManager = .over:0x803AA590; // type:function size:0x16C scope:global -SetSelectedCar__24QRCarSelectBustedManagerP11FECarRecord = .over:0x803AA6FC; // type:function size:0xF0 scope:global -RefreshHeader__24QRCarSelectBustedManager = .over:0x803AA7EC; // type:function size:0x4AC scope:global -CalcGameOver__24QRCarSelectBustedManager = .over:0x803AAC98; // type:function size:0x78 scope:global -MaybeReleaseCar__24QRCarSelectBustedManager = .over:0x803AAD10; // type:function size:0x22C scope:global -MaybeAddImpoundBox__24QRCarSelectBustedManager = .over:0x803AAF3C; // type:function size:0x13C scope:global -__13UIQRCarSelectP21ScreenConstructorData = .over:0x803AB078; // type:function size:0x2DC scope:global -_._13UIQRCarSelect = .over:0x803AB354; // type:function size:0xA0 scope:global -IsCarImpounded__13UIQRCarSelectUi = .over:0x803AB3F4; // type:function size:0x6C scope:global -CommitChangeStartRace__13UIQRCarSelectb = .over:0x803AB460; // type:function size:0x44 scope:global -NotificationMessage__13UIQRCarSelectUlP8FEObjectUlUl = .over:0x803AB4A4; // type:function size:0x13E8 scope:global -NotifySoundMessage__13UIQRCarSelectUl18eMenuSoundTriggers = .over:0x803AC88C; // type:function size:0x70 scope:global -Setup__13UIQRCarSelect = .over:0x803AC8FC; // type:function size:0x2B0 scope:global -InitStatsSliders__13UIQRCarSelect = .over:0x803ACBAC; // type:function size:0xE0 scope:global -UpdateSliders__13UIQRCarSelect = .over:0x803ACC8C; // type:function size:0x2A4 scope:global -GetFilterType__13UIQRCarSelect = .over:0x803ACF30; // type:function size:0x88 scope:global -SetupForPlayer__13UIQRCarSelecti = .over:0x803ACFB8; // type:function size:0x144 scope:global -GetBonusUnlockText__13UIQRCarSelectP11FECarRecord = .over:0x803AD0FC; // type:function size:0xDC scope:global -GetBonusUnlockBinNumber__13UIQRCarSelectP11FECarRecord = .over:0x803AD1D8; // type:function size:0x174 scope:global -RefreshHeader__13UIQRCarSelect = .over:0x803AD34C; // type:function size:0xAFC scope:global -ChooseTransmission__13UIQRCarSelect = .over:0x803ADE48; // type:function size:0x90 scope:global -GetSelectedCarRecord__13UIQRCarSelect = .over:0x803ADED8; // type:function size:0x58 scope:global -SetSelectedCar__13UIQRCarSelectP13SelectableCari = .over:0x803ADF30; // type:function size:0x124 scope:global -SortCarsByUnlock__FP13SelectableCarT0 = .over:0x803AE054; // type:function size:0x124 scope:global -IsValidMikeMannCar__FP11FECarRecordUi = .over:0x803AE178; // type:function size:0xE0 scope:global -RefreshBonusCarList__13UIQRCarSelect = .over:0x803AE258; // type:function size:0x7C8 scope:global -RefreshCarList__13UIQRCarSelect = .over:0x803AEA20; // type:function size:0x1B0 scope:global -ClearCarList__13UIQRCarSelect = .over:0x803AEBD0; // type:function size:0x54 scope:global -ScrollCars__13UIQRCarSelect10eScrollDir = .over:0x803AEC24; // type:function size:0x88 scope:global -ScrollLists__13UIQRCarSelect10eScrollDir = .over:0x803AECAC; // type:function size:0xDC scope:global -OnlineActOnSelect__13UIQRCarSelect = .over:0x803AED88; // type:function size:0x74 scope:global -__14uiQRPressStartP21ScreenConstructorData = .over:0x803AEDFC; // type:function size:0x58 scope:global -_._14uiQRPressStart = .over:0x803AEE54; // type:function size:0x30 scope:global -NotificationMessage__14uiQRPressStartUlP8FEObjectUlUl = .over:0x803AEE84; // type:function size:0x204 scope:global -Setup__14uiQRPressStart = .over:0x803AF088; // type:function size:0x80 scope:global -NotificationMessage__14ChallengeDatumUlP8FEObjectUlUl = .over:0x803AF108; // type:function size:0x3C scope:global -__19UIQRChallengeSeriesP21ScreenConstructorData = .over:0x803AF144; // type:function size:0x108 scope:global -_._19UIQRChallengeSeries = .over:0x803AF24C; // type:function size:0x114 scope:global -NotifySoundMessage__19UIQRChallengeSeriesUl18eMenuSoundTriggers = .over:0x803AF360; // type:function size:0x48 scope:global -NotificationMessage__19UIQRChallengeSeriesUlP8FEObjectUlUl = .over:0x803AF3A8; // type:function size:0x2A4 scope:global -ChooseTransmission__19UIQRChallengeSeries = .over:0x803AF64C; // type:function size:0x84 scope:global -RefreshHeader__19UIQRChallengeSeries = .over:0x803AF6D0; // type:function size:0x554 scope:global -AddRace__19UIQRChallengeSeriesP15GRaceParameters = .over:0x803AFC24; // type:function size:0xB8 scope:global -IsRaceValidForMike__19UIQRChallengeSeriesP15GRaceParameters = .over:0x803AFCDC; // type:function size:0x118 scope:global -Setup__19UIQRChallengeSeries = .over:0x803AFDF4; // type:function size:0x188 scope:global -__8ShowcaseP21ScreenConstructorData = .over:0x803AFF7C; // type:function size:0x308 scope:global -_._8Showcase = .over:0x803B0284; // type:function size:0x50 scope:global -NotificationMessage__8ShowcaseUlP8FEObjectUlUl = .over:0x803B02D4; // type:function size:0x9C scope:global -TakeControl__19CarCustomizeManager20eCustomizeEntryPointP11FECarRecord = .over:0x803B0370; // type:function size:0x1AC scope:global -RelinquishControl__19CarCustomizeManager = .over:0x803B051C; // type:function size:0x7C scope:global -CanTradeIn__19CarCustomizeManagerP14SelectablePart = .over:0x803B0598; // type:function size:0x68 scope:global -AddToCart__19CarCustomizeManagerP14SelectablePart = .over:0x803B0600; // type:function size:0x240 scope:global -RemoveFromCart__19CarCustomizeManagerP16ShoppingCartItem = .over:0x803B0840; // type:function size:0x74 scope:global -IsPartTypeInCart__19CarCustomizeManagerP14SelectablePart = .over:0x803B08B4; // type:function size:0x68 scope:global -IsPartTypeInCart__19CarCustomizeManagerUi = .over:0x803B091C; // type:function size:0x6C scope:global -IsPartTypeInCart__19CarCustomizeManagerQ37Physics8Upgrades4Type = .over:0x803B0988; // type:function size:0x68 scope:global -IsPartInCart__19CarCustomizeManagerP14SelectablePart = .over:0x803B09F0; // type:function size:0x74 scope:global -GetActivePartFromSlot__19CarCustomizeManagerUi = .over:0x803B0A64; // type:function size:0x58 scope:global -GetCartTotal__19CarCustomizeManager20eCustomizeCartTotals = .over:0x803B0ABC; // type:function size:0x168 scope:global -Checkout__19CarCustomizeManager = .over:0x803B0C24; // type:function size:0x200 scope:global -DoesCartHaveActiveParts__19CarCustomizeManager = .over:0x803B0E24; // type:function size:0x70 scope:global -GetPartPrice__19CarCustomizeManagerP14SelectablePart = .over:0x803B0E94; // type:function size:0xD4 scope:global -SetTempColoredPart__19CarCustomizeManagerP14SelectablePart = .over:0x803B0F68; // type:function size:0x58 scope:global -ClearTempColoredPart__19CarCustomizeManager = .over:0x803B0FC0; // type:function size:0x58 scope:global -GetStockCarPart__19CarCustomizeManagerUi = .over:0x803B1018; // type:function size:0x80 scope:global -ResetToStockCarParts__19CarCustomizeManager = .over:0x803B1098; // type:function size:0x8C scope:global -ResetPreview__19CarCustomizeManager = .over:0x803B1124; // type:function size:0x12C scope:global -PreviewPart__19CarCustomizeManageriP7CarPart = .over:0x803B1250; // type:function size:0x90 scope:global -InstallPart__19CarCustomizeManageriP7CarPart = .over:0x803B12E0; // type:function size:0x68 scope:global -GetInstalledCarPart__19CarCustomizeManageri = .over:0x803B1348; // type:function size:0x64 scope:global -PreviewPerfPkg__19CarCustomizeManagerQ37Physics8Upgrades4Typei = .over:0x803B13AC; // type:function size:0x64 scope:global -InstallPerfPkg__19CarCustomizeManagerQ37Physics8Upgrades4Typei = .over:0x803B1410; // type:function size:0xE0 scope:global -IsJunkmanInstalled__19CarCustomizeManagerQ37Physics8Upgrades4Type = .over:0x803B14F0; // type:function size:0x60 scope:global -GetInstalledPerfPkg__19CarCustomizeManagerQ37Physics8Upgrades4Type = .over:0x803B1550; // type:function size:0x50 scope:global -GetMaxPackages__19CarCustomizeManagerQ37Physics8Upgrades4Type = .over:0x803B15A0; // type:function size:0x50 scope:global -GetNumPackages__19CarCustomizeManagerQ37Physics8Upgrades4Type = .over:0x803B15F0; // type:function size:0x24 scope:global -MaxOutPerformance__19CarCustomizeManager = .over:0x803B1614; // type:function size:0x234 scope:global -GetPerformanceRating__19CarCustomizeManager22ePerformanceRatingTypeb = .over:0x803B1848; // type:function size:0x114 scope:global -UpdateHeatOnVehicle__19CarCustomizeManagerP14SelectablePartP14FECareerRecord = .over:0x803B195C; // type:function size:0x1AC scope:global -GetUnlockFilter__19CarCustomizeManager = .over:0x803B1B08; // type:function size:0x5C scope:global -GetUnlockHash__19CarCustomizeManager18eCustomizeCategoryi = .over:0x803B1B64; // type:function size:0x280 scope:global -IsPartInstalled__19CarCustomizeManagerP14SelectablePart = .over:0x803B1DE4; // type:function size:0x88 scope:global -IsPartLocked__19CarCustomizeManagerP14SelectableParti = .over:0x803B1E6C; // type:function size:0x158 scope:global -IsPartNew__19CarCustomizeManagerP14SelectableParti = .over:0x803B1FC4; // type:function size:0x80 scope:global -IsCategoryNew__19CarCustomizeManagerUi = .over:0x803B2044; // type:function size:0x4E0 scope:global -IsCategoryLocked__19CarCustomizeManagerUib = .over:0x803B2524; // type:function size:0x518 scope:global -IsRimCategoryLocked__19CarCustomizeManagerUib = .over:0x803B2A3C; // type:function size:0x25C scope:global -IsVinylCategoryLocked__19CarCustomizeManagerUib = .over:0x803B2C98; // type:function size:0x1E8 scope:global -GetMinInnerRadius__19CarCustomizeManager = .over:0x803B2E80; // type:function size:0x40 scope:global -GetMaxInnerRadius__19CarCustomizeManager = .over:0x803B2EC0; // type:function size:0x40 scope:global -GetCarPartList__19CarCustomizeManageriRt6bTList1Z14SelectablePartUi = .over:0x803B2F00; // type:function size:0x478 scope:global -GetPerformancePartsList__19CarCustomizeManagerQ37Physics8Upgrades4TypeRt6bTList1Z14SelectablePart = .over:0x803B3378; // type:function size:0x164 scope:global -CanInstallJunkman__19CarCustomizeManagerQ37Physics8Upgrades4Type = .over:0x803B34DC; // type:function size:0x24 scope:global -IsCareerMode__19CarCustomizeManager = .over:0x803B3500; // type:function size:0x30 scope:global -IsTurbo__19CarCustomizeManager = .over:0x803B3530; // type:function size:0x9C scope:global -GetActualHeat__19CarCustomizeManager = .over:0x803B35CC; // type:function size:0x58 scope:global -GetPreviewHeat__19CarCustomizeManagerP14SelectablePart = .over:0x803B3624; // type:function size:0x154 scope:global -GetNumCustomizeMarkers__19CarCustomizeManager = .over:0x803B3778; // type:function size:0x40 scope:global -IsCastrolCar__19CarCustomizeManager = .over:0x803B37B8; // type:function size:0x40 scope:global -IsRotaryCar__19CarCustomizeManager = .over:0x803B37F8; // type:function size:0x40 scope:global -IsHeroCar__19CarCustomizeManager = .over:0x803B3838; // type:function size:0x30 scope:global -GetCartHeat__19CarCustomizeManager = .over:0x803B3868; // type:function size:0xEC scope:global -TranslateCustomizeCatToMarker__F18eCustomizeCategory = .over:0x803B3954; // type:function size:0x18C scope:global -GetMarkerNameFromCategory__F18eCustomizeCategory = .over:0x803B3AE0; // type:function size:0x240 scope:global -GetNumMarkersFromCategory__F18eCustomizeCategory = .over:0x803B3D20; // type:function size:0x124 scope:global -__14CustomizeMeter = .over:0x803B3E44; // type:function size:0x68 scope:global -Init__14CustomizeMeterPCcT1ffff = .over:0x803B3EAC; // type:function size:0xD0 scope:global -SetCurrent__14CustomizeMeterf = .over:0x803B3F7C; // type:function size:0x20 scope:global -SetPreview__14CustomizeMeterf = .over:0x803B3F9C; // type:function size:0x28 scope:global -Draw__14CustomizeMeter = .over:0x803B3FC4; // type:function size:0x184 scope:global -SetVisibility__14CustomizeMeterb = .over:0x803B4148; // type:function size:0x38 scope:global -Show__18FEShoppingCartItem = .over:0x803B4180; // type:function size:0x3C scope:global -Hide__18FEShoppingCartItem = .over:0x803B41BC; // type:function size:0x3C scope:global -Draw__18FEShoppingCartItem = .over:0x803B41F8; // type:function size:0x178 scope:global -Position__18FEShoppingCartItem = .over:0x803B4370; // type:function size:0x148 scope:global -SetFocus__18FEShoppingCartItemPCc = .over:0x803B44B8; // type:function size:0x98 scope:global -UnsetFocus__18FEShoppingCartItem = .over:0x803B4550; // type:function size:0x9C scope:global -SetCheckScripts__18FEShoppingCartItem = .over:0x803B45EC; // type:function size:0x58 scope:global -SetActiveScripts__18FEShoppingCartItem = .over:0x803B4644; // type:function size:0x40 scope:global -DrawPartName__18FEShoppingCartItem = .over:0x803B4684; // type:function size:0xC48 scope:global -GetPerfPkgCatHash__18FEShoppingCartItemQ37Physics8Upgrades4Type = .over:0x803B52CC; // type:function size:0xCC scope:global -GetPerfPkgLevelHash__18FEShoppingCartItemi = .over:0x803B5398; // type:function size:0x88 scope:global -GetCarPartCatHash__18FEShoppingCartItemUi = .over:0x803B5420; // type:function size:0x1B0 scope:global -__21CustomizeShoppingCartP21ScreenConstructorData = .over:0x803B55D0; // type:function size:0x74 scope:global -NotificationMessage__21CustomizeShoppingCartUlP8FEObjectUlUl = .over:0x803B5644; // type:function size:0x28C scope:global -ShowShoppingCart__21CustomizeShoppingCartPCc = .over:0x803B58D0; // type:function size:0x44 scope:global -ExitShoppingCart__21CustomizeShoppingCart = .over:0x803B5914; // type:function size:0x5C scope:global -IsSlotIDNumberDecal__21CustomizeShoppingCarti = .over:0x803B5970; // type:function size:0x2C scope:global -ToggleAllNumberDecals__21CustomizeShoppingCart = .over:0x803B599C; // type:function size:0x9C scope:global -ToggleChecked__21CustomizeShoppingCart = .over:0x803B5A38; // type:function size:0xA0 scope:global -CanCheckout__21CustomizeShoppingCart = .over:0x803B5AD8; // type:function size:0x80 scope:global -SetMarkerData__21CustomizeShoppingCartiP16ShoppingCartItemi = .over:0x803B5B58; // type:function size:0xD4 scope:global -GetNumMarkersSpending__21CustomizeShoppingCartUi = .over:0x803B5C2C; // type:function size:0x48 scope:global -SetMarkerAmounts__21CustomizeShoppingCart = .over:0x803B5C74; // type:function size:0x3C8 scope:global -RefreshHeader__21CustomizeShoppingCart = .over:0x803B603C; // type:function size:0x424 scope:global -AddItem__21CustomizeShoppingCartP16ShoppingCartItem = .over:0x803B6460; // type:function size:0x1A8 scope:global -ClearUncheckedItems__21CustomizeShoppingCart = .over:0x803B6608; // type:function size:0xDC scope:global -UncheckAllItems__21CustomizeShoppingCart = .over:0x803B66E4; // type:function size:0x98 scope:global -SetMarkerImages__21CustomizeShoppingCart = .over:0x803B677C; // type:function size:0x26C scope:global -Setup__21CustomizeShoppingCart = .over:0x803B69E8; // type:function size:0x148 scope:global -__23CustomizeCategoryScreenP21ScreenConstructorData = .over:0x803B6B30; // type:function size:0xE0 scope:global -_._23CustomizeCategoryScreen = .over:0x803B6C10; // type:function size:0xA4 scope:global -RefreshHeader__23CustomizeCategoryScreen = .over:0x803B6CB4; // type:function size:0x228 scope:global -AddCustomOption__23CustomizeCategoryScreenPCcUiUiUi = .over:0x803B6EDC; // type:function size:0x114 scope:global -NotificationMessage__23CustomizeCategoryScreenUlP8FEObjectUlUl = .over:0x803B6FF0; // type:function size:0x2B4 scope:global -React__18SetStockPartOptionPCcUiP8FEObjectUiUi = .over:0x803B72A4; // type:function size:0x5C scope:global -__12CustomizeSubP21ScreenConstructorData = .over:0x803B7300; // type:function size:0x60 scope:global -NotificationMessage__12CustomizeSubUlP8FEObjectUlUl = .over:0x803B7360; // type:function size:0x5BC scope:global -RefreshHeader__12CustomizeSub = .over:0x803B791C; // type:function size:0x208 scope:global -FindInCartOption__12CustomizeSub = .over:0x803B7B24; // type:function size:0x38 scope:global -Setup__12CustomizeSub = .over:0x803B7B5C; // type:function size:0xF4 scope:global -SetupParts__12CustomizeSub = .over:0x803B7C50; // type:function size:0x204 scope:global -SetupPerformance__12CustomizeSub = .over:0x803B7E54; // type:function size:0x2CC scope:global -SetupVisual__12CustomizeSub = .over:0x803B8120; // type:function size:0x238 scope:global -GetRimBrandIndex__12CustomizeSubUi = .over:0x803B8358; // type:function size:0x120 scope:global -SetupRimBrands__12CustomizeSub = .over:0x803B8478; // type:function size:0x3A0 scope:global -GetVinylGroupIndex__12CustomizeSubi = .over:0x803B8818; // type:function size:0x8C scope:global -SetupVinylGroups__12CustomizeSub = .over:0x803B88A4; // type:function size:0x3A4 scope:global -SetupDecalLocations__12CustomizeSub = .over:0x803B8C48; // type:function size:0x19C scope:global -SetupDecalPositions__12CustomizeSub = .over:0x803B8DE4; // type:function size:0x26C scope:global -__13CustomizeMainP21ScreenConstructorData = .over:0x803B9050; // type:function size:0xC4 scope:global -SwitchRooms__13CustomizeMain = .over:0x803B9114; // type:function size:0x148 scope:global -NotificationMessage__13CustomizeMainUlP8FEObjectUlUl = .over:0x803B925C; // type:function size:0x328 scope:global -SetScreenNames__13CustomizeMain = .over:0x803B9584; // type:function size:0x1B8 scope:global -RefreshHeader__13CustomizeMain = .over:0x803B973C; // type:function size:0xD0 scope:global -SetTitle__13CustomizeMainb = .over:0x803B980C; // type:function size:0x104 scope:global -Setup__13CustomizeMain = .over:0x803B9910; // type:function size:0xBC scope:global -BuildOptionsList__13CustomizeMain = .over:0x803B99CC; // type:function size:0x12C scope:global -__25CustomizationScreenHelperPCc = .over:0x803B9AF8; // type:function size:0xB0 scope:global -DrawTitle__25CustomizationScreenHelper = .over:0x803B9BA8; // type:function size:0xC8 scope:global -SetCareerStatusIcon__25CustomizationScreenHelper19eCustomizePartState = .over:0x803B9C70; // type:function size:0x140 scope:global -SetPlayerCarStatusIcon__25CustomizationScreenHelper19eCustomizePartState = .over:0x803B9DB0; // type:function size:0xC8 scope:global -SetCashVisibility__25CustomizationScreenHelperb = .over:0x803B9E78; // type:function size:0x50 scope:global -SetUnlockOverlayState__25CustomizationScreenHelperbUi = .over:0x803B9EC8; // type:function size:0x70 scope:global -SetCareerStuff__25CustomizationScreenHelperP14SelectablePartUiUi = .over:0x803B9F38; // type:function size:0x238 scope:global -SetPartStatus__25CustomizationScreenHelperP14SelectablePartUiii = .over:0x803BA170; // type:function size:0x148 scope:global -FlashStatusIcon__25CustomizationScreenHelper19eCustomizePartStateb = .over:0x803BA2B8; // type:function size:0x94 scope:global -__19CustomizationScreenP21ScreenConstructorData = .over:0x803BA34C; // type:function size:0xA0 scope:global -_._19CustomizationScreen = .over:0x803BA3EC; // type:function size:0xC8 scope:global -NotificationMessage__19CustomizationScreenUlP8FEObjectUlUl = .over:0x803BA4B4; // type:function size:0x470 scope:global -RefreshHeader__19CustomizationScreen = .over:0x803BA924; // type:function size:0x1C8 scope:global -AddPartOption__19CustomizationScreenP14SelectablePartUiUiUiUib = .over:0x803BAAEC; // type:function size:0x80 scope:global -FindInCartPart__19CustomizationScreen = .over:0x803BAB6C; // type:function size:0x5C scope:global -FindMatchingOption__19CustomizationScreenP14SelectablePart = .over:0x803BABC8; // type:function size:0x88 scope:global -UnLoadCustomHUDPacksAndTextures__Fv = .over:0x803BAC50; // type:function size:0xC8 scope:global -__14CustomizePartsP21ScreenConstructorData = .over:0x803BAD18; // type:function size:0x11C scope:global -_._14CustomizeParts = .over:0x803BAE34; // type:function size:0x64 scope:global -NotificationMessage__14CustomizePartsUlP8FEObjectUlUl = .over:0x803BAE98; // type:function size:0x430 scope:global -Setup__14CustomizeParts = .over:0x803BB2C8; // type:function size:0x6AC scope:global -LoadHudTextures__14CustomizeParts = .over:0x803BB974; // type:function size:0x28 scope:global -LoadNextHudTexturePack__14CustomizeParts = .over:0x803BB99C; // type:function size:0x7C scope:global -TexturePackLoadedCallback__14CustomizeParts = .over:0x803BBA18; // type:function size:0xEC scope:global -TextureLoadedCallback__14CustomizeParts = .over:0x803BBB04; // type:function size:0x90 scope:global -ShowHudObjects__14CustomizeParts = .over:0x803BBB94; // type:function size:0x58 scope:global -SetHUDTextures__14CustomizeParts = .over:0x803BBBEC; // type:function size:0x1B0 scope:global -SetHUDColors__14CustomizeParts = .over:0x803BBD9C; // type:function size:0x2F4 scope:global -RefreshHeader__14CustomizeParts = .over:0x803BC090; // type:function size:0x1EC scope:global -__16CustomizeSpoilerP21ScreenConstructorData = .over:0x803BC27C; // type:function size:0x6C scope:global -NotificationMessage__16CustomizeSpoilerUlP8FEObjectUlUl = .over:0x803BC2E8; // type:function size:0x1C8 scope:global -Setup__16CustomizeSpoiler = .over:0x803BC4B0; // type:function size:0xD4 scope:global -BuildPartOptionListFromFilter__16CustomizeSpoilerP7CarPart = .over:0x803BC584; // type:function size:0x2B8 scope:global -RefreshHeader__16CustomizeSpoiler = .over:0x803BC83C; // type:function size:0x1C0 scope:global -ScrollFilters__16CustomizeSpoiler10eScrollDir = .over:0x803BC9FC; // type:function size:0x90 scope:global -__14HUDLayerOptionUiUiUi = .over:0x803BCA8C; // type:function size:0x84 scope:global -__17CustomizeHUDColorP21ScreenConstructorData = .over:0x803BCB10; // type:function size:0x74 scope:global -_._17CustomizeHUDColor = .over:0x803BCB84; // type:function size:0xAC scope:global -NotificationMessage__17CustomizeHUDColorUlP8FEObjectUlUl = .over:0x803BCC30; // type:function size:0x2A0 scope:global -ScrollColors__17CustomizeHUDColor10eScrollDir = .over:0x803BCED0; // type:function size:0x138 scope:global -AddLayerOption__17CustomizeHUDColorUiUiUi = .over:0x803BD008; // type:function size:0x58 scope:global -Setup__17CustomizeHUDColor = .over:0x803BD060; // type:function size:0x138 scope:global -SetInitialColors__17CustomizeHUDColor = .over:0x803BD198; // type:function size:0x2B0 scope:global -SetHUDTextures__17CustomizeHUDColor = .over:0x803BD448; // type:function size:0x1EC scope:global -RefreshHeader__17CustomizeHUDColor = .over:0x803BD634; // type:function size:0x10C scope:global -BuildColorOptions__17CustomizeHUDColor = .over:0x803BD740; // type:function size:0x334 scope:global -__13CustomizeRimsP21ScreenConstructorData = .over:0x803BDA74; // type:function size:0x54 scope:global -NotificationMessage__13CustomizeRimsUlP8FEObjectUlUl = .over:0x803BDAC8; // type:function size:0x168 scope:global -ScrollRimSizes__13CustomizeRims10eScrollDir = .over:0x803BDC30; // type:function size:0xCC scope:global -Setup__13CustomizeRims = .over:0x803BDCFC; // type:function size:0xFC scope:global -BuildRimsList__13CustomizeRimsi = .over:0x803BDDF8; // type:function size:0x270 scope:global -RefreshHeader__13CustomizeRims = .over:0x803BE068; // type:function size:0x108 scope:global -GetCategoryBrandHash__13CustomizeRims = .over:0x803BE170; // type:function size:0xF8 scope:global -__14CustomizePaintP21ScreenConstructorData = .over:0x803BE268; // type:function size:0xC4 scope:global -NotifySoundMessage__14CustomizePaintUl18eMenuSoundTriggers = .over:0x803BE32C; // type:function size:0x84 scope:global -NotificationMessage__14CustomizePaintUlP8FEObjectUlUl = .over:0x803BE3B0; // type:function size:0x520 scope:global -FindInCartPart__14CustomizePaint = .over:0x803BE8D0; // type:function size:0x74 scope:global -FindMatchingOption__14CustomizePaintP14SelectablePart = .over:0x803BE944; // type:function size:0x9C scope:global -AddVinylAndColorsToCart__14CustomizePaint = .over:0x803BE9E0; // type:function size:0xBC scope:global -ScrollFilters__14CustomizePaint10eScrollDir = .over:0x803BEA9C; // type:function size:0x208 scope:global -Setup__14CustomizePaint = .over:0x803BECA4; // type:function size:0x1A4 scope:global -SetupBasePaint__14CustomizePaint = .over:0x803BEE48; // type:function size:0x24 scope:global -SetupRimPaint__14CustomizePaint = .over:0x803BEE6C; // type:function size:0x5C scope:global -SetupVinylColor__14CustomizePaint = .over:0x803BEEC8; // type:function size:0x18C scope:global -CalcBrandHash__14CustomizePaintP7CarPart = .over:0x803BF054; // type:function size:0xB0 scope:global -BuildSwatchList__14CustomizePaintUi = .over:0x803BF104; // type:function size:0x3F0 scope:global -RefreshHeader__14CustomizePaint = .over:0x803BF4F4; // type:function size:0x384 scope:global -__15CustomizeDecalsP21ScreenConstructorData = .over:0x803BF878; // type:function size:0x4C scope:global -NotificationMessage__15CustomizeDecalsUlP8FEObjectUlUl = .over:0x803BF8C4; // type:function size:0x1C4 scope:global -GetSlotIDFromCategory__15CustomizeDecals = .over:0x803BFA88; // type:function size:0x158 scope:global -RefreshHeader__15CustomizeDecals = .over:0x803BFBE0; // type:function size:0x17C scope:global -BuildDecalList__15CustomizeDecalsUi = .over:0x803BFD5C; // type:function size:0x384 scope:global -Setup__15CustomizeDecals = .over:0x803C00E0; // type:function size:0x248 scope:global -__16CustomizeNumbersP21ScreenConstructorData = .over:0x803C0328; // type:function size:0x9C scope:global -NotificationMessage__16CustomizeNumbersUlP8FEObjectUlUl = .over:0x803C03C4; // type:function size:0x7D8 scope:global -UnsetShoppingCart__16CustomizeNumbers = .over:0x803C0B9C; // type:function size:0x64 scope:global -ScrollNumbers__16CustomizeNumbers10eScrollDir = .over:0x803C0C00; // type:function size:0x1C0 scope:global -RefreshHeader__16CustomizeNumbers = .over:0x803C0DC0; // type:function size:0x334 scope:global -Setup__16CustomizeNumbers = .over:0x803C10F4; // type:function size:0x320 scope:global -__20CustomizePerformanceP21ScreenConstructorData = .over:0x803C1414; // type:function size:0x70 scope:global -NotifySoundMessage__20CustomizePerformanceUl18eMenuSoundTriggers = .over:0x803C1484; // type:function size:0x88 scope:global -NotificationMessage__20CustomizePerformanceUlP8FEObjectUlUl = .over:0x803C150C; // type:function size:0x118 scope:global -GetPerfPkgDesc__20CustomizePerformanceQ37Physics8Upgrades4Typeiib = .over:0x803C1624; // type:function size:0x22C scope:global -GetPerfPkgBrand__20CustomizePerformanceQ37Physics8Upgrades4Typeii = .over:0x803C1850; // type:function size:0x4F4 scope:global -RefreshHeader__20CustomizePerformance = .over:0x803C1D44; // type:function size:0x3A0 scope:global -Setup__20CustomizePerformance = .over:0x803C20E4; // type:function size:0x6D4 scope:global -NotificationMessage__8CarDatumUlP8FEObjectUlUl = .over:0x803C27B8; // type:function size:0xDC scope:global -__13MyCarsManagerP21ScreenConstructorData = .over:0x803C2894; // type:function size:0xA0 scope:global -NotifySoundMessage__13MyCarsManagerUl18eMenuSoundTriggers = .over:0x803C2934; // type:function size:0x48 scope:global -NotificationMessage__13MyCarsManagerUlP8FEObjectUlUl = .over:0x803C297C; // type:function size:0x430 scope:global -Setup__13MyCarsManager = .over:0x803C2DAC; // type:function size:0x14C scope:global -CanAddMoreCars__13MyCarsManager = .over:0x803C2EF8; // type:function size:0x80 scope:global -RefreshCarList__13MyCarsManager = .over:0x803C2F78; // type:function size:0x184 scope:global -RefreshHeader__13MyCarsManager = .over:0x803C30FC; // type:function size:0x1CC scope:global -UpdateSliders__13MyCarsManager = .over:0x803C32C8; // type:function size:0x198 scope:global -UpdateCar__13MyCarsManager = .over:0x803C3460; // type:function size:0xE0 scope:global -SortCarsByName__FP8DebugCarT0 = .over:0x803C3540; // type:function size:0x7C scope:global -__23DebugCarCustomizeScreenP21ScreenConstructorData = .over:0x803C35BC; // type:function size:0x154 scope:global -_._23DebugCarCustomizeScreen = .over:0x803C3710; // type:function size:0x170 scope:global -FindElement__23DebugCarCustomizeScreenRt6bTList1ZQ223DebugCarCustomizeScreen14DebugCarOptioni = .over:0x803C3880; // type:function size:0x28 scope:global -BuildOptionsLists__23DebugCarCustomizeScreen = .over:0x803C38A8; // type:function size:0x180 scope:global -LoadCurrentCar__23DebugCarCustomizeScreen = .over:0x803C3A28; // type:function size:0x100 scope:global -RebuildPartsList__23DebugCarCustomizeScreen = .over:0x803C3B28; // type:function size:0x17C scope:global -NewPreviewPart__23DebugCarCustomizeScreen = .over:0x803C3CA4; // type:function size:0x9C scope:global -InstallPreviewingPart__23DebugCarCustomizeScreen = .over:0x803C3D40; // type:function size:0x9C scope:global -DumpPresetRide__23DebugCarCustomizeScreen = .over:0x803C3DDC; // type:function size:0x70 scope:global -Redraw__23DebugCarCustomizeScreen = .over:0x803C3E4C; // type:function size:0x288 scope:global -NotificationMessage__23DebugCarCustomizeScreenUlP8FEObjectUlUl = .over:0x803C40D4; // type:function size:0x428 scope:global -__17FEMarkerSelectionP21ScreenConstructorData = .over:0x803C44FC; // type:function size:0x29C scope:global -SetUnlockIcon__17FEMarkerSelection17eUnlockableEntityUi = .over:0x803C4798; // type:function size:0x164 scope:global -NotificationMessage__17FEMarkerSelectionUlP8FEObjectUlUl = .over:0x803C48FC; // type:function size:0x2F4 scope:global -GetButtonIndex__17FEMarkerSelectionUi = .over:0x803C4BF0; // type:function size:0xA0 scope:global -GetSelectedButtonIndex__17FEMarkerSelection = .over:0x803C4C90; // type:function size:0x4C scope:global -GetMarkerSelectInfo__FQ215FEMarkerManager15ePossibleMarker = .over:0x803C4CDC; // type:function size:0x38 scope:global -GetIconHashForType__17FEMarkerSelectionQ215FEMarkerManager15ePossibleMarker = .over:0x803C4D14; // type:function size:0x28 scope:global -GetCategoryIconHashForType__17FEMarkerSelectionQ215FEMarkerManager15ePossibleMarker = .over:0x803C4D3C; // type:function size:0x28 scope:global -GetNameHashForType__17FEMarkerSelectionQ215FEMarkerManager15ePossibleMarker = .over:0x803C4D64; // type:function size:0x28 scope:global -GetCategoryNameHashForType__17FEMarkerSelectionQ215FEMarkerManager15ePossibleMarker = .over:0x803C4D8C; // type:function size:0x28 scope:global -GetBlurbHashForType__17FEMarkerSelectionQ215FEMarkerManager15ePossibleMarker = .over:0x803C4DB4; // type:function size:0x28 scope:global -GetCategoryBlurbHashForType__17FEMarkerSelectionQ215FEMarkerManager15ePossibleMarker = .over:0x803C4DDC; // type:function size:0x28 scope:global -GetNumSelected__17FEMarkerSelection = .over:0x803C4E04; // type:function size:0x54 scope:global -Redraw__17FEMarkerSelection = .over:0x803C4E58; // type:function size:0x29C scope:global -__static_initialization_and_destruction_0 = .over:0x803C50F4; // type:function size:0xD0 scope:local -GetCarTypeInfo__F7CarType = .over:0x803C51C4; // type:function size:0x14 scope:global -_._14SelectablePart = .over:0x803C51D8; // type:function size:0x34 scope:global -GetPart__14SelectablePart = .over:0x803C520C; // type:function size:0x8 scope:global -GetSlotID__14SelectablePart = .over:0x803C5214; // type:function size:0x8 scope:global -GetUpgradeLevel__14SelectablePart = .over:0x803C521C; // type:function size:0x8 scope:global -GetPhysicsType__14SelectablePart = .over:0x803C5224; // type:function size:0x8 scope:global -IsPerformancePkg__14SelectablePart = .over:0x803C522C; // type:function size:0x8 scope:global -GetPartState__14SelectablePart = .over:0x803C5234; // type:function size:0x8 scope:global -GetPrice__14SelectablePart = .over:0x803C523C; // type:function size:0x8 scope:global -IsJunkmanPart__14SelectablePart = .over:0x803C5244; // type:function size:0x8 scope:global -_._16ShoppingCartItem = .over:0x803C524C; // type:function size:0x98 scope:global -_._14CustomizeMeter = .over:0x803C52E4; // type:function size:0x34 scope:global -_._18FEShoppingCartItem = .over:0x803C5318; // type:function size:0x34 scope:global -_._21CustomizeShoppingCart = .over:0x803C534C; // type:function size:0x98 scope:global -_._19CustomizeMainOption = .over:0x803C53E4; // type:function size:0x34 scope:global -React__19CustomizeMainOptionPCcUiP8FEObjectUiUi = .over:0x803C5418; // type:function size:0x4C scope:global -IsStockOption__19CustomizeMainOption = .over:0x803C5464; // type:function size:0x8 scope:global -Setup__23CustomizeCategoryScreen = .over:0x803C546C; // type:function size:0x4 scope:global -_._18SetStockPartOption = .over:0x803C5470; // type:function size:0x7C scope:global -IsStockOption__18SetStockPartOption = .over:0x803C54EC; // type:function size:0x8 scope:global -_._12CustomizeSub = .over:0x803C54F4; // type:function size:0x30 scope:global -_._13CustomizeMain = .over:0x803C5524; // type:function size:0x30 scope:global -_._19CustomizePartOption = .over:0x803C5554; // type:function size:0x7C scope:global -React__19CustomizePartOptionPCcUiP8FEObjectUiUi = .over:0x803C55D0; // type:function size:0x4 scope:global -_._25CustomizationScreenHelper = .over:0x803C55D4; // type:function size:0x40 scope:global -GetSelectedPart__19CustomizationScreen = .over:0x803C5614; // type:function size:0xC scope:global -TexturePackLoadedCallbackAccessor__14CustomizePartsUi = .over:0x803C5620; // type:function size:0x20 scope:global -TextureLoadedCallbackAccessor__14CustomizePartsUi = .over:0x803C5640; // type:function size:0x20 scope:global -_._16CustomizeSpoiler = .over:0x803C5660; // type:function size:0x30 scope:global -_._14HUDLayerOption = .over:0x803C5690; // type:function size:0xD0 scope:global -React__14HUDLayerOptionPCcUiP8FEObjectUiUi = .over:0x803C5760; // type:function size:0x4 scope:global -_._14HUDColorOption = .over:0x803C5764; // type:function size:0x34 scope:global -React__14HUDColorOptionPCcUiP8FEObjectUiUi = .over:0x803C5798; // type:function size:0x4 scope:global -_._13CustomizeRims = .over:0x803C579C; // type:function size:0x30 scope:global -_._19CustomizePaintDatum = .over:0x803C57CC; // type:function size:0x7C scope:global -_._14CustomizePaint = .over:0x803C5848; // type:function size:0x140 scope:global -GetSelectedPart__14CustomizePaint = .over:0x803C5988; // type:function size:0xC scope:global -_._15CustomizeDecals = .over:0x803C5994; // type:function size:0x30 scope:global -_._16CustomizeNumbers = .over:0x803C59C4; // type:function size:0xEC scope:global -_._20CustomizePerformance = .over:0x803C5AB0; // type:function size:0x44 scope:global -TextureLoadedCallbackAccessor__24QRCarSelectBustedManagerUi = .over:0x803C5AF4; // type:function size:0x20 scope:global -_._9UIQRBrief = .over:0x803C5B14; // type:function size:0xB8 scope:global -_._12UIQRMainMenu = .over:0x803C5BCC; // type:function size:0x98 scope:global -_._9QuickPlay = .over:0x803C5C64; // type:function size:0x34 scope:global -React__9QuickPlayPCcUiP8FEObjectUiUi = .over:0x803C5C98; // type:function size:0x34 scope:global -_._10CustomRace = .over:0x803C5CCC; // type:function size:0x34 scope:global -React__10CustomRacePCcUiP8FEObjectUiUi = .over:0x803C5D00; // type:function size:0x34 scope:global -_._11SplitScreen = .over:0x803C5D34; // type:function size:0x34 scope:global -React__11SplitScreenPCcUiP8FEObjectUiUi = .over:0x803C5D68; // type:function size:0x34 scope:global -_._14UIQRModeSelect = .over:0x803C5D9C; // type:function size:0x98 scope:global -_._8MSOption = .over:0x803C5E34; // type:function size:0x34 scope:global -React__8MSOptionPCcUiP8FEObjectUiUi = .over:0x803C5E68; // type:function size:0x24 scope:global -_._16UIQRTrackOptions = .over:0x803C5E8C; // type:function size:0x8C scope:global -_._12NumOpponents = .over:0x803C5F18; // type:function size:0x34 scope:global -Act__12NumOpponentsPCcUi = .over:0x803C5F4C; // type:function size:0x114 scope:global -Draw__12NumOpponents = .over:0x803C6060; // type:function size:0x68 scope:global -_._7AISkill = .over:0x803C60C8; // type:function size:0x34 scope:global -Act__7AISkillPCcUi = .over:0x803C60FC; // type:function size:0xD0 scope:global -Draw__7AISkill = .over:0x803C61CC; // type:function size:0xA0 scope:global -_._7CatchUp = .over:0x803C626C; // type:function size:0x34 scope:global -Act__7CatchUpPCcUi = .over:0x803C62A0; // type:function size:0xB4 scope:global -Draw__7CatchUp = .over:0x803C6354; // type:function size:0x78 scope:global -_._12TrafficLevel = .over:0x803C63CC; // type:function size:0x34 scope:global -Act__12TrafficLevelPCcUi = .over:0x803C6400; // type:function size:0xD0 scope:global -Draw__12TrafficLevel = .over:0x803C64D0; // type:function size:0xB4 scope:global -_._7NumLaps = .over:0x803C6584; // type:function size:0x34 scope:global -Act__7NumLapsPCcUi = .over:0x803C65B8; // type:function size:0xD0 scope:global -Draw__7NumLaps = .over:0x803C6688; // type:function size:0x68 scope:global -_._14TrackDirection = .over:0x803C66F0; // type:function size:0x34 scope:global -Act__14TrackDirectionPCcUi = .over:0x803C6724; // type:function size:0xB8 scope:global -Draw__14TrackDirection = .over:0x803C67DC; // type:function size:0x78 scope:global -_._14ChallengeDatum = .over:0x803C6854; // type:function size:0x34 scope:global -_._8CarDatum = .over:0x803C6888; // type:function size:0x34 scope:global -_._13MyCarsManager = .over:0x803C68BC; // type:function size:0x104 scope:global -_._17FEMarkerSelection = .over:0x803C69C0; // type:function size:0x50 scope:global -_GLOBAL_.I.RenderLookAtPoint = .over:0x803C6A10; // type:function size:0x2C scope:local -_vt.17FEMarkerSelection = .over:0x803C7F80; // type:object size:0x28 scope:global -_vt.23DebugCarCustomizeScreen = .over:0x803C7FA8; // type:object size:0x28 scope:global -_vt.13MyCarsManager.13ArrayScroller = .over:0x803C7FD0; // type:object size:0x28 scope:global -_vt.13MyCarsManager = .over:0x803C7FF8; // type:object size:0x28 scope:global -_vt.8CarDatum = .over:0x803C8020; // type:object size:0x20 scope:global -_vt.19UIQRChallengeSeries.13ArrayScroller = .over:0x803C8040; // type:object size:0x28 scope:global -_vt.19UIQRChallengeSeries = .over:0x803C8068; // type:object size:0x28 scope:global -_vt.14ChallengeDatum = .over:0x803C8090; // type:object size:0x20 scope:global -_vt.14uiQRPressStart = .over:0x803C80B0; // type:object size:0x28 scope:global -_vt.8Showcase = .over:0x803C80D8; // type:object size:0x28 scope:global -_vt.14TrackDirection = .over:0x803C8100; // type:object size:0x88 scope:global -_vt.7NumLaps = .over:0x803C8188; // type:object size:0x88 scope:global -_vt.12TrafficLevel = .over:0x803C8210; // type:object size:0x88 scope:global -_vt.7CatchUp = .over:0x803C8298; // type:object size:0x88 scope:global -_vt.7AISkill = .over:0x803C8320; // type:object size:0x88 scope:global -_vt.12NumOpponents = .over:0x803C83A8; // type:object size:0x88 scope:global -_vt.16UIQRTrackOptions = .over:0x803C8430; // type:object size:0x30 scope:global -_vt.8MSOption = .over:0x803C8460; // type:object size:0x20 scope:global -_vt.14UIQRModeSelect = .over:0x803C8480; // type:object size:0x38 scope:global -_vt.11SplitScreen = .over:0x803C84B8; // type:object size:0x20 scope:global -_vt.10CustomRace = .over:0x803C84D8; // type:object size:0x20 scope:global -_vt.9QuickPlay = .over:0x803C84F8; // type:object size:0x20 scope:global -_vt.12UIQRMainMenu = .over:0x803C8518; // type:object size:0x38 scope:global -_vt.9UIQRBrief = .over:0x803C8550; // type:object size:0x28 scope:global -_vt.15UIQRTrackSelect = .over:0x803C8578; // type:object size:0x30 scope:global -_vt.13UIQRCarSelect = .over:0x803C85A8; // type:object size:0x28 scope:global -_vt.24QRCarSelectBustedManager = .over:0x803C85D0; // type:object size:0x18 scope:global -_vt.20CustomizePerformance = .over:0x803C85E8; // type:object size:0x50 scope:global -_vt.16CustomizeNumbers = .over:0x803C8638; // type:object size:0x28 scope:global -_vt.15CustomizeDecals = .over:0x803C8660; // type:object size:0x50 scope:global -_vt.14CustomizePaint = .over:0x803C86B0; // type:object size:0x50 scope:global -_vt.19CustomizePaintDatum = .over:0x803C8700; // type:object size:0x20 scope:global -_vt.13CustomizeRims = .over:0x803C8720; // type:object size:0x50 scope:global -_vt.17CustomizeHUDColor = .over:0x803C8770; // type:object size:0x50 scope:global -_vt.14HUDColorOption = .over:0x803C87C0; // type:object size:0x20 scope:global -_vt.14HUDLayerOption = .over:0x803C87E0; // type:object size:0x20 scope:global -_vt.16CustomizeSpoiler = .over:0x803C8800; // type:object size:0x50 scope:global -_vt.14CustomizeParts = .over:0x803C8850; // type:object size:0x50 scope:global -_vt.19CustomizationScreen = .over:0x803C88A0; // type:object size:0x50 scope:global -_vt.25CustomizationScreenHelper = .over:0x803C88F0; // type:object size:0x18 scope:global -_vt.19CustomizePartOption = .over:0x803C8908; // type:object size:0x20 scope:global -_vt.13CustomizeMain = .over:0x803C8928; // type:object size:0x38 scope:global -_vt.12CustomizeSub = .over:0x803C8960; // type:object size:0x38 scope:global -_vt.18SetStockPartOption = .over:0x803C8998; // type:object size:0x28 scope:global -_vt.23CustomizeCategoryScreen = .over:0x803C89C0; // type:object size:0x38 scope:global -_vt.19CustomizeMainOption = .over:0x803C89F8; // type:object size:0x28 scope:global -_vt.21CustomizeShoppingCart = .over:0x803C8A20; // type:object size:0x30 scope:global -_vt.18FEShoppingCartItem = .over:0x803C8A50; // type:object size:0x80 scope:global -_vt.14CustomizeMeter = .over:0x803C8AD0; // type:object size:0x18 scope:global -_vt.16ShoppingCartItem = .over:0x803C8AE8; // type:object size:0x18 scope:global -_vt.14SelectablePart = .over:0x803C8B00; // type:object size:0x18 scope:global -_vt.16GarageMainScreen = .over:0x803C8B18; // type:object size:0x28 scope:global -_overlay_end = .over:0x803C8B50; // type:object scope:global -__CTOR_LIST__ = .ctors:0x803C8B60; // type:object scope:global -__DTOR_LIST__ = .dtors:0x803C8C40; // type:object scope:global -base_pos.37555 = .rodata:0x803CA68C; // type:object size:0x30 scope:local -priority.37568 = .rodata:0x803CA6C4; // type:object size:0x14 scope:local -base_pos.37575 = .rodata:0x803CA6EC; // type:object size:0x3C scope:local -_vt.3Gps.11IAttachable = .rodata:0x803CAC20; // type:object size:0x48 scope:global -_vt.3Gps.Q23Sim9IActivity = .rodata:0x803CAC68; // type:object size:0x38 scope:global -_vt.3Gps.Q23Sim9ITaskable = .rodata:0x803CACA0; // type:object size:0x20 scope:global -_vt.3Gps = .rodata:0x803CACC0; // type:object size:0x20 scope:global -_vt.13HerdFormation = .rodata:0x803CACE0; // type:object size:0x38 scope:global -_vt.12PitFormation = .rodata:0x803CAD18; // type:object size:0x38 scope:global -_vt.22StaggerFollowFormation = .rodata:0x803CAD50; // type:object size:0x38 scope:global -_vt.15FollowFormation = .rodata:0x803CAD88; // type:object size:0x38 scope:global -_vt.21RollingBlockFormation = .rodata:0x803CADC0; // type:object size:0x38 scope:global -_vt.14BoxInFormation = .rodata:0x803CADF8; // type:object size:0x38 scope:global -_vt.16PursuitFormation = .rodata:0x803CAE30; // type:object size:0x38 scope:global -_vt.11AIGoalRacer = .rodata:0x803CAE68; // type:object size:0x30 scope:global -_vt.14AIGoalHeliExit = .rodata:0x803CAE98; // type:object size:0x30 scope:global -_vt.17AIGoalHeliPursuit = .rodata:0x803CAEC8; // type:object size:0x30 scope:global -_vt.17AIGoalFleePursuit = .rodata:0x803CAEF8; // type:object size:0x30 scope:global -_vt.21AIGoalStaticRoadBlock = .rodata:0x803CAF28; // type:object size:0x30 scope:global -_vt.15AIGoalHeadOnRam = .rodata:0x803CAF58; // type:object size:0x30 scope:global -_vt.9AIGoalPit = .rodata:0x803CAF88; // type:object size:0x30 scope:global -_vt.9AIGoalRam = .rodata:0x803CAFB8; // type:object size:0x30 scope:global -_vt.15AIGoalStopShort = .rodata:0x803CAFE8; // type:object size:0x30 scope:global -_vt.13AIGoalPursuit = .rodata:0x803CB018; // type:object size:0x30 scope:global -_vt.12AIGoalPatrol = .rodata:0x803CB048; // type:object size:0x30 scope:global -_vt.13AIGoalTraffic = .rodata:0x803CB078; // type:object size:0x30 scope:global -_vt.10AIGoalNone = .rodata:0x803CB0A8; // type:object size:0x30 scope:global -_vt.19AIVehicleHelicopter.13IAIHelicopter = .rodata:0x803CB0D8; // type:object size:0xA0 scope:global -_vt.19AIVehicleHelicopter.11AIAvoidable = .rodata:0x803CB178; // type:object size:0x20 scope:global -_vt.19AIVehicleHelicopter.10IVehicleAI = .rodata:0x803CB198; // type:object size:0x1C0 scope:global -_vt.19AIVehicleHelicopter.Q23Sim9ITaskable = .rodata:0x803CB358; // type:object size:0x20 scope:global -_vt.19AIVehicleHelicopter.10IPursuitAI = .rodata:0x803CB378; // type:object size:0x130 scope:global -_vt.19AIVehicleHelicopter = .rodata:0x803CB4A8; // type:object size:0xC0 scope:global -_vt.16AIVehicleTraffic.11AIAvoidable = .rodata:0x803CB568; // type:object size:0x20 scope:global -_vt.16AIVehicleTraffic.10IVehicleAI = .rodata:0x803CB588; // type:object size:0x1C0 scope:global -_vt.16AIVehicleTraffic.Q23Sim9ITaskable = .rodata:0x803CB748; // type:object size:0x20 scope:global -_vt.16AIVehicleTraffic.10ITrafficAI = .rodata:0x803CB768; // type:object size:0x20 scope:global -_vt.16AIVehicleTraffic = .rodata:0x803CB788; // type:object size:0xB0 scope:global -_vt.32AdaptivePIDControllerComplicated = .rodata:0x803CB838; // type:object size:0x20 scope:global -_vt.27AdaptivePIDControllerSimple = .rodata:0x803CB858; // type:object size:0x20 scope:global -_vt.25AdaptivePIDControllerBase = .rodata:0x803CB878; // type:object size:0x20 scope:global -_vt.Q23UTLt10FastVector2ZUii16 = .rodata:0x803CB8A8; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZUii16 = .rodata:0x803CB8E8; // type:object size:0x40 scope:global -_vt.14AIVehicleHuman.8IHumanAI = .rodata:0x803CB928; // type:object size:0x60 scope:global -_vt.14AIVehicleHuman.6IRacer = .rodata:0x803CB988; // type:object size:0x30 scope:global -_vt.14AIVehicleHuman.8ICheater = .rodata:0x803CB9B8; // type:object size:0x20 scope:global -_vt.14AIVehicleHuman.6ICause = .rodata:0x803CB9D8; // type:object size:0x28 scope:global -_vt.14AIVehicleHuman.12IPerpetrator = .rodata:0x803CBA00; // type:object size:0xD0 scope:global -_vt.14AIVehicleHuman.11AIAvoidable = .rodata:0x803CBAD0; // type:object size:0x20 scope:global -_vt.14AIVehicleHuman.10IVehicleAI = .rodata:0x803CBAF0; // type:object size:0x1C0 scope:global -_vt.14AIVehicleHuman.Q23Sim9ITaskable = .rodata:0x803CBCB0; // type:object size:0x20 scope:global -_vt.14AIVehicleHuman = .rodata:0x803CBCD0; // type:object size:0xB0 scope:global -_vt.14AIVehicleEmpty.11AIAvoidable = .rodata:0x803CBD80; // type:object size:0x20 scope:global -_vt.14AIVehicleEmpty.10IVehicleAI = .rodata:0x803CBDA0; // type:object size:0x1C0 scope:global -_vt.14AIVehicleEmpty.Q23Sim9ITaskable = .rodata:0x803CBF60; // type:object size:0x20 scope:global -_vt.14AIVehicleEmpty = .rodata:0x803CBF80; // type:object size:0xB0 scope:global -_vt.12AIActionRace.Q23Sim9ITaskable = .rodata:0x803CC030; // type:object size:0x20 scope:global -_vt.12AIActionRace = .rodata:0x803CC050; // type:object size:0x60 scope:global -_vt.23AIActionStaticRoadBlock.Q23Sim9ITaskable = .rodata:0x803CC0B0; // type:object size:0x20 scope:global -_vt.23AIActionStaticRoadBlock = .rodata:0x803CC0D0; // type:object size:0x60 scope:global -_vt.17AIActionJackKnife.Q23Sim9ITaskable = .rodata:0x803CC130; // type:object size:0x20 scope:global -_vt.17AIActionJackKnife = .rodata:0x803CC150; // type:object size:0x58 scope:global -_vt.16AIActionAirborne.Q23Sim9ITaskable = .rodata:0x803CC1A8; // type:object size:0x20 scope:global -_vt.16AIActionAirborne = .rodata:0x803CC1C8; // type:object size:0x58 scope:global -_vt.14AIActionStrafe.Q23Sim9ITaskable = .rodata:0x803CC220; // type:object size:0x20 scope:global -_vt.14AIActionStrafe = .rodata:0x803CC240; // type:object size:0x58 scope:global -_vt.14AIActionSpline.Q23Sim9ITaskable = .rodata:0x803CC298; // type:object size:0x20 scope:global -_vt.14AIActionSpline = .rodata:0x803CC2B8; // type:object size:0x58 scope:global -_vt.17AIActionStopShort.Q23Sim9ITaskable = .rodata:0x803CC310; // type:object size:0x20 scope:global -_vt.17AIActionStopShort = .rodata:0x803CC330; // type:object size:0x58 scope:global -_vt.11AIActionRam.Q23Sim9ITaskable = .rodata:0x803CC388; // type:object size:0x20 scope:global -_vt.11AIActionRam = .rodata:0x803CC3A8; // type:object size:0x60 scope:global -_vt.17AIActionHeadOnRam.Q23Sim9ITaskable = .rodata:0x803CC408; // type:object size:0x20 scope:global -_vt.17AIActionHeadOnRam = .rodata:0x803CC428; // type:object size:0x60 scope:global -_vt.16AIActionHeliExit.Q23Sim9ITaskable = .rodata:0x803CC488; // type:object size:0x20 scope:global -_vt.16AIActionHeliExit = .rodata:0x803CC4A8; // type:object size:0x60 scope:global -_vt.19AIActionHeliPursuit.Q33Sim9Collision9IListener = .rodata:0x803CC508; // type:object size:0x18 scope:global -_vt.19AIActionHeliPursuit.Q23Sim9ITaskable = .rodata:0x803CC520; // type:object size:0x20 scope:global -_vt.19AIActionHeliPursuit = .rodata:0x803CC540; // type:object size:0x60 scope:global -_vt.22AIActionPursuitOffRoad.Q23Sim9ITaskable = .rodata:0x803CC5A0; // type:object size:0x20 scope:global -_vt.22AIActionPursuitOffRoad = .rodata:0x803CC5C0; // type:object size:0x60 scope:global -_vt.15AIActionTraffic.Q33Sim9Collision9IListener = .rodata:0x803CC620; // type:object size:0x18 scope:global -_vt.15AIActionTraffic.Q23Sim9ITaskable = .rodata:0x803CC638; // type:object size:0x20 scope:global -_vt.15AIActionTraffic = .rodata:0x803CC658; // type:object size:0x60 scope:global -_vt.18AIActionGetUnstuck.Q23Sim9ITaskable = .rodata:0x803CC6B8; // type:object size:0x20 scope:global -_vt.18AIActionGetUnstuck = .rodata:0x803CC6D8; // type:object size:0x58 scope:global -_vt.18AIActionTooDamaged.Q23Sim9ITaskable = .rodata:0x803CC730; // type:object size:0x20 scope:global -_vt.18AIActionTooDamaged = .rodata:0x803CC750; // type:object size:0x60 scope:global -_vt.12AIActionNone.Q23Sim9ITaskable = .rodata:0x803CC7B0; // type:object size:0x20 scope:global -_vt.12AIActionNone = .rodata:0x803CC7D0; // type:object size:0x58 scope:global -_vt.16AvoidableManager.11IAttachable = .rodata:0x803CC828; // type:object size:0x48 scope:global -_vt.16AvoidableManager.Q23Sim9IActivity = .rodata:0x803CC870; // type:object size:0x38 scope:global -_vt.16AvoidableManager.Q23Sim9ITaskable = .rodata:0x803CC8A8; // type:object size:0x20 scope:global -_vt.16AvoidableManager = .rodata:0x803CC8C8; // type:object size:0x28 scope:global -_vt.12AICopManager.13IVehicleCache = .rodata:0x803CC8F0; // type:object size:0x30 scope:global -_vt.12AICopManager.7ICopMgr = .rodata:0x803CC920; // type:object size:0x88 scope:global -_vt.12AICopManager.14AISpawnManager = .rodata:0x803CC9A8; // type:object size:0x18 scope:global -_vt.12AICopManager.11IAttachable = .rodata:0x803CC9C0; // type:object size:0x48 scope:global -_vt.12AICopManager.Q23Sim9IActivity = .rodata:0x803CCA08; // type:object size:0x38 scope:global -_vt.12AICopManager.Q23Sim9ITaskable = .rodata:0x803CCA40; // type:object size:0x20 scope:global -_vt.12AICopManager = .rodata:0x803CCA60; // type:object size:0x28 scope:global -_vt.11AIRoadBlock.10IRoadBlock = .rodata:0x803CCA88; // type:object size:0xC8 scope:global -_vt.11AIRoadBlock.11IAttachable = .rodata:0x803CCB50; // type:object size:0x48 scope:global -_vt.11AIRoadBlock.Q23Sim9IActivity = .rodata:0x803CCB98; // type:object size:0x38 scope:global -_vt.11AIRoadBlock.Q23Sim9ITaskable = .rodata:0x803CCBD0; // type:object size:0x20 scope:global -_vt.11AIRoadBlock = .rodata:0x803CCBF0; // type:object size:0x20 scope:global -_vt.8AITarget = .rodata:0x803CCC10; // type:object size:0x18 scope:global -_vt.9AIPursuit.8IPursuit = .rodata:0x803CCC28; // type:object size:0x298 scope:global -_vt.9AIPursuit.11IAttachable = .rodata:0x803CCEC0; // type:object size:0x48 scope:global -_vt.9AIPursuit.Q23Sim9IActivity = .rodata:0x803CCF08; // type:object size:0x38 scope:global -_vt.9AIPursuit.Q23Sim9ITaskable = .rodata:0x803CCF40; // type:object size:0x20 scope:global -_vt.9AIPursuit = .rodata:0x803CCF60; // type:object size:0x28 scope:global -_vt.15AIVehicleCopCar.11AIAvoidable = .rodata:0x803CCF88; // type:object size:0x20 scope:global -_vt.15AIVehicleCopCar.Q23Sim9ITaskable = .rodata:0x803CCFA8; // type:object size:0x20 scope:global -_vt.15AIVehicleCopCar.10IVehicleAI = .rodata:0x803CCFC8; // type:object size:0x1C0 scope:global -_vt.15AIVehicleCopCar.10IPursuitAI = .rodata:0x803CD188; // type:object size:0x130 scope:global -_vt.15AIVehicleCopCar = .rodata:0x803CD2B8; // type:object size:0xB8 scope:global -_vt.16AIVehiclePursuit.11AIAvoidable = .rodata:0x803CD370; // type:object size:0x20 scope:global -_vt.16AIVehiclePursuit.10IVehicleAI = .rodata:0x803CD390; // type:object size:0x1C0 scope:global -_vt.16AIVehiclePursuit.Q23Sim9ITaskable = .rodata:0x803CD550; // type:object size:0x20 scope:global -_vt.16AIVehiclePursuit.10IPursuitAI = .rodata:0x803CD570; // type:object size:0x130 scope:global -_vt.16AIVehiclePursuit = .rodata:0x803CD6A0; // type:object size:0xB8 scope:global -_vt.16AIVehicleRacecar.8ICheater = .rodata:0x803CD758; // type:object size:0x20 scope:global -_vt.16AIVehicleRacecar.6ICause = .rodata:0x803CD778; // type:object size:0x28 scope:global -_vt.16AIVehicleRacecar.12IPerpetrator = .rodata:0x803CD7A0; // type:object size:0xD0 scope:global -_vt.16AIVehicleRacecar.11AIAvoidable = .rodata:0x803CD870; // type:object size:0x20 scope:global -_vt.16AIVehicleRacecar.10IVehicleAI = .rodata:0x803CD890; // type:object size:0x1C0 scope:global -_vt.16AIVehicleRacecar.Q23Sim9ITaskable = .rodata:0x803CDA50; // type:object size:0x20 scope:global -_vt.16AIVehicleRacecar = .rodata:0x803CDA70; // type:object size:0xB0 scope:global -_vt.16AIVehicleRacecar.6IRacer = .rodata:0x803CDB20; // type:object size:0x30 scope:global -_vt.13AIPerpVehicle.11AIAvoidable = .rodata:0x803CDB50; // type:object size:0x20 scope:global -_vt.13AIPerpVehicle.Q23Sim9ITaskable = .rodata:0x803CDB70; // type:object size:0x20 scope:global -_vt.13AIPerpVehicle.8ICheater = .rodata:0x803CDB90; // type:object size:0x20 scope:global -_vt.13AIPerpVehicle.10IVehicleAI = .rodata:0x803CDBB0; // type:object size:0x1C0 scope:global -_vt.13AIPerpVehicle.6ICause = .rodata:0x803CDD70; // type:object size:0x28 scope:global -_vt.13AIPerpVehicle.12IPerpetrator = .rodata:0x803CDD98; // type:object size:0xD0 scope:global -_vt.13AIPerpVehicle = .rodata:0x803CDE68; // type:object size:0xB0 scope:global -_vt.12AIVehiclePid.11AIAvoidable = .rodata:0x803CDF18; // type:object size:0x20 scope:global -_vt.12AIVehiclePid.10IVehicleAI = .rodata:0x803CDF38; // type:object size:0x1C0 scope:global -_vt.12AIVehiclePid.Q23Sim9ITaskable = .rodata:0x803CE0F8; // type:object size:0x20 scope:global -_vt.12AIVehiclePid = .rodata:0x803CE118; // type:object size:0xB0 scope:global -_vt.9AIVehicle.Q23Sim9ITaskable = .rodata:0x803CE1C8; // type:object size:0x20 scope:global -_vt.9AIVehicle.11AIAvoidable = .rodata:0x803CE1E8; // type:object size:0x20 scope:global -_vt.9AIVehicle.10IVehicleAI = .rodata:0x803CE208; // type:object size:0x1C0 scope:global -_vt.9AIVehicle = .rodata:0x803CE3C8; // type:object size:0xB0 scope:global -_vt.6AIGoal = .rodata:0x803CE478; // type:object size:0x30 scope:global -_vt.8AIAction.Q23Sim9ITaskable = .rodata:0x803CE4A8; // type:object size:0x20 scope:global -_vt.8AIAction = .rodata:0x803CE4C8; // type:object size:0x58 scope:global -_vt.6ICause = .rodata:0x803CE520; // type:object size:0x28 scope:global -_vt.11PartChecker = .rodata:0x803CE548; // type:object size:0x20 scope:global -_vt.16AITrafficManager.13IVehicleCache = .rodata:0x803CE568; // type:object size:0x30 scope:global -_vt.16AITrafficManager.11ITrafficMgr = .rodata:0x803CE598; // type:object size:0x20 scope:global -_vt.16AITrafficManager.11IAttachable = .rodata:0x803CE5B8; // type:object size:0x48 scope:global -_vt.16AITrafficManager.Q23Sim9IActivity = .rodata:0x803CE600; // type:object size:0x38 scope:global -_vt.16AITrafficManager.Q23Sim9ITaskable = .rodata:0x803CE638; // type:object size:0x20 scope:global -_vt.16AITrafficManager = .rodata:0x803CE658; // type:object size:0x28 scope:global -_vt.7ICopMgr = .rodata:0x803CE680; // type:object size:0x88 scope:global -_vt.19WRoadNavWithCookies = .rodata:0x803CE708; // type:object size:0x18 scope:global -_vt.Q43UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10_4List = .rodata:0x803CE720; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP8IVehiclei10i16 = .rodata:0x803CE760; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP8IVehiclei16 = .rodata:0x803CE7A0; // type:object size:0x40 scope:global -_vt.13IVehicleCache = .rodata:0x803CE7E0; // type:object size:0x30 scope:global -_vt.8Behavior.Q23Sim9ITaskable = .rodata:0x803CE810; // type:object size:0x20 scope:global -_vt.8Behavior = .rodata:0x803CE830; // type:object size:0x60 scope:global -_vt.14AISpawnManager = .rodata:0x803CE890; // type:object size:0x18 scope:global -_vt.11ITrafficMgr = .rodata:0x803CE8A8; // type:object size:0x20 scope:global -_vt.10IRoadBlock = .rodata:0x803CE8C8; // type:object size:0xC8 scope:global -_vt.8IPursuit = .rodata:0x803CE990; // type:object size:0x298 scope:global -_vt.12IPerpetrator = .rodata:0x803CEC28; // type:object size:0xD0 scope:global -_vt.10IVehicleAI = .rodata:0x803CECF8; // type:object size:0x1C0 scope:global -_vt.11AIAvoidable = .rodata:0x803CEEB8; // type:object size:0x20 scope:global -_vt.Q33UTL3COM8IUnknown = .rodata:0x803CEED8; // type:object size:0x18 scope:global -Tweak_TrafficOffScreenDistance = .rodata:0x803CF1D8; // type:object size:0x2C scope:local -Tweak_TrafficOffScreenTime = .rodata:0x803CF204; // type:object size:0x2C scope:local -Tweak_TrafficDensitySpawnRates = .rodata:0x803CF230; // type:object size:0x2C scope:local -Tweak_OffWorldAccel = .rodata:0x803CF25C; // type:object size:0x8 scope:local -Tweak_OffWorldSpeed = .rodata:0x803CF264; // type:object size:0x8 scope:local -Tweak_AdaptiveSkillUp = .rodata:0x803CF26C; // type:object size:0xC scope:local -Tweak_AdaptiveSkillDown = .rodata:0x803CF278; // type:object size:0xC scope:local -Tweak_QuickRaceSkills = .rodata:0x803CF284; // type:object size:0xC scope:local -Tweak_QuickRaceSkillsNoGlue = .rodata:0x803CF290; // type:object size:0xC scope:local -Tweak_CatchupGlueSkill = .rodata:0x803CF29C; // type:object size:0xC scope:local -Tweak_SlowDownGlueSkill = .rodata:0x803CF2A8; // type:object size:0xC scope:local -Tweak_CatchupCheatSkill = .rodata:0x803CF2B4; // type:object size:0xC scope:local -_vt.Q23UTLt11FixedVector3ZP8ISimablei10i16 = .rodata:0x803CF2C0; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP8ISimablei16 = .rodata:0x803CF308; // type:object size:0x40 scope:global -_vt.25GenericNISControlScenario = .rodata:0x803D0220; // type:object size:0x20 scope:global -_vt.15CAnimWorldScene = .rodata:0x803D0240; // type:object size:0x18 scope:global -_vt.20CWorldAnimEntityTree = .rodata:0x803D0258; // type:object size:0x18 scope:global -_vt.23WorldAnimEntityTreeInfo = .rodata:0x803D0270; // type:object size:0x18 scope:global -_vt.16CWorldAnimEntity = .rodata:0x803D0288; // type:object size:0x60 scope:global -_vt.10CAnimScene = .rodata:0x803D02E8; // type:object size:0x80 scope:global -_vt.14CAnimSceneData = .rodata:0x803D0368; // type:object size:0x18 scope:global -_vt.15CPropAnimEntity = .rodata:0x803D0380; // type:object size:0x60 scope:global -_vt.25CBasicCharacterAnimEntity = .rodata:0x803D03E0; // type:object size:0x60 scope:global -_vt.11IAnimEntity = .rodata:0x803D0440; // type:object size:0x58 scope:global -_vt.11CAnimPlayer = .rodata:0x803D0498; // type:object size:0x18 scope:global -_vt.19NISListenerActivity.12INISLISTENER = .rodata:0x803D04B0; // type:object size:0x20 scope:global -_vt.19NISListenerActivity.11IAttachable = .rodata:0x803D04D0; // type:object size:0x48 scope:global -_vt.19NISListenerActivity.Q23Sim9IActivity = .rodata:0x803D0518; // type:object size:0x38 scope:global -_vt.19NISListenerActivity.Q23Sim9ITaskable = .rodata:0x803D0550; // type:object size:0x20 scope:global -_vt.19NISListenerActivity = .rodata:0x803D0570; // type:object size:0x20 scope:global -_vt.12CAnimChooser = .rodata:0x803D0590; // type:object size:0x18 scope:global -_vt.12CNFSAnimBank = .rodata:0x803D05A8; // type:object size:0x18 scope:global -_vt.9CAnimBank = .rodata:0x803D05C0; // type:object size:0x18 scope:global -_vt.Q29EAGL4Anim17FnDefaultAnimBank = .rodata:0x803D05D8; // type:object size:0x50 scope:global -_vt.13CAnimProperty = .rodata:0x803D0628; // type:object size:0x18 scope:global -MarkerNameList = .rodata:0x803D0710; // type:object size:0x24C scope:local -_vt.16IControlScenario = .rodata:0x803D0960; // type:object size:0x20 scope:global -_vt.Q26Attrib22CollectionExportPolicy = .rodata:0x803D0D00; // type:object size:0x30 scope:global -_vt.Q26Attrib17ClassExportPolicy = .rodata:0x803D0D30; // type:object size:0x30 scope:global -_vt.Q26Attrib20DatabaseExportPolicy = .rodata:0x803D0D60; // type:object size:0x30 scope:global -_vt.Q26Attrib8Database = .rodata:0x803D0D90; // type:object size:0x18 scope:global -_vt.Q26Attrib15DatabasePrivate = .rodata:0x803D0E00; // type:object size:0x18 scope:global -_vt.16bMemoryAllocator = .rodata:0x803D1450; // type:object size:0x38 scope:global -bCrcTable = .rodata:0x803D1494; // type:object size:0x400 scope:local -statetable = .rodata:0x803D1894; // type:object size:0x5B scope:local -_vt.Q32EA9Allocator10IAllocator = .rodata:0x803D18F0; // type:object size:0x38 scope:global -_vt.t8tAverage1Z8bVector3 = .rodata:0x803D2D80; // type:object size:0x20 scope:global -_vt.21CDActionDebugWatchCar.14ITrafficCenter = .rodata:0x803D2DA0; // type:object size:0x20 scope:global -_vt.21CDActionDebugWatchCar.14IDebugWatchCar = .rodata:0x803D2DC0; // type:object size:0x20 scope:global -_vt.21CDActionDebugWatchCar = .rodata:0x803D2DE0; // type:object size:0x48 scope:global -_vt.11CDActionIce.11IAttachable = .rodata:0x803D2E28; // type:object size:0x48 scope:global -_vt.11CDActionIce = .rodata:0x803D2E70; // type:object size:0x48 scope:global -_vt.13CDActionDebug.14ITrafficCenter = .rodata:0x803D2EB8; // type:object size:0x20 scope:global -_vt.13CDActionDebug = .rodata:0x803D2ED8; // type:object size:0x48 scope:global -_vt.16CDActionShowcase.11IAttachable = .rodata:0x803D2F20; // type:object size:0x48 scope:global -_vt.16CDActionShowcase = .rodata:0x803D2F68; // type:object size:0x48 scope:global -_vt.16CDActionTrackCop.14ITrafficCenter = .rodata:0x803D2FB0; // type:object size:0x20 scope:global -_vt.16CDActionTrackCop.11IAttachable = .rodata:0x803D2FD0; // type:object size:0x48 scope:global -_vt.16CDActionTrackCop = .rodata:0x803D3018; // type:object size:0x48 scope:global -_vt.16CDActionTrackCar.14ITrafficCenter = .rodata:0x803D3060; // type:object size:0x20 scope:global -_vt.16CDActionTrackCar.11IAttachable = .rodata:0x803D3080; // type:object size:0x48 scope:global -_vt.16CDActionTrackCar = .rodata:0x803D30C8; // type:object size:0x48 scope:global -_vt.13CDActionDrive.Q33Sim9Collision9IListener = .rodata:0x803D3110; // type:object size:0x18 scope:global -_vt.13CDActionDrive.14ITrafficCenter = .rodata:0x803D3128; // type:object size:0x20 scope:global -_vt.13CDActionDrive.11IAttachable = .rodata:0x803D3148; // type:object size:0x48 scope:global -_vt.13CDActionDrive = .rodata:0x803D3190; // type:object size:0x48 scope:global -_vt.14ITrafficCenter = .rodata:0x803D31D8; // type:object size:0x20 scope:global -_vt.8ICEMover = .rodata:0x803D31F8; // type:object size:0xA0 scope:global -_vt.Q33Sim9Collision9IListener = .rodata:0x803D3298; // type:object size:0x18 scope:global -_vt.11IAttachable = .rodata:0x803D32B0; // type:object size:0x48 scope:global -_vt.19ShowcaseCameraMover = .rodata:0x803D32F8; // type:object size:0xA0 scope:global -_vt.16CubicCameraMover = .rodata:0x803D3398; // type:object size:0xA0 scope:global -_vt.20SelectCarCameraMover = .rodata:0x803D3438; // type:object size:0xA0 scope:global -_vt.19TrackCopCameraMover = .rodata:0x803D34D8; // type:object size:0xA0 scope:global -_vt.19TrackCarCameraMover = .rodata:0x803D3578; // type:object size:0xA0 scope:global -_vt.25RearViewMirrorCameraMover = .rodata:0x803D3618; // type:object size:0xA0 scope:global -_vt.21DebugWorldCameraMover = .rodata:0x803D36B8; // type:object size:0xA0 scope:global -_vt.11CameraMover = .rodata:0x803D3758; // type:object size:0xA0 scope:global -_vt.14IDebugWatchCar = .rodata:0x803D37F8; // type:object size:0x20 scope:global -_vt.Q28CameraAI6Action = .rodata:0x803D3818; // type:object size:0x48 scope:global -_vt.Q28CameraAI8Director = .rodata:0x803D3860; // type:object size:0x18 scope:global -_vt.Q43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4List = .rodata:0x803D3878; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16 = .rodata:0x803D38B8; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZPQ28CameraAI8Directori16 = .rodata:0x803D38F8; // type:object size:0x40 scope:global -RemoteCaffeinating = .rodata:0x803D3AE4; // type:object size:0x4 scope:local -Tweak_JumpCamHighestAirTresh = .rodata:0x803D3AEC; // type:object size:0x8 scope:local -Tweak_JumpCamLongestAirTresh = .rodata:0x803D3AF4; // type:object size:0x8 scope:local -Tweak_JumpCamPositionSpeedMult = .rodata:0x803D3AFC; // type:object size:0x10 scope:local -TrackCarIsoZoomDistance = .rodata:0x803D3B0C; // type:object size:0xC scope:local -TrackCarLookOffsetX = .rodata:0x803D3B18; // type:object size:0xC scope:local -TrackCarLookOffsetY = .rodata:0x803D3B24; // type:object size:0xC scope:local -TrackCarLookOffsetZ = .rodata:0x803D3B30; // type:object size:0xC scope:local -TrackCarEyeOffsetZ = .rodata:0x803D3B3C; // type:object size:0x10 scope:local -_vt.11AverageBase = .rodata:0x803D3B50; // type:object size:0x20 scope:global -_vt.Q43UTL11Collectionst8Listable2Z14IDebugWatchCari2_4List = .rodata:0x803D3B70; // type:object size:0x40 scope:global -_vt.Q33UTL11Collectionst8_Storage2ZPQ28CameraAI8Directori2 = .rodata:0x803D3BB0; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP14IDebugWatchCari2i16 = .rodata:0x803D3BF8; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP14IDebugWatchCari16 = .rodata:0x803D3C38; // type:object size:0x40 scope:global -algos.3467 = .rodata:0x803D3F50; // type:object size:0x24 scope:local -_vt.Q38Dynamics12Articulation5Joint = .rodata:0x803D3F80; // type:object size:0x18 scope:global -_vt.Q38Dynamics12Articulation10Constraint = .rodata:0x803D3F98; // type:object size:0x18 scope:global -_vt.Q38Dynamics12Articulation5Lever = .rodata:0x803D3FB0; // type:object size:0x18 scope:global -_Q25EAGL413DynamicLoader.AnimBankType = .rodata:0x803D428C; // type:object size:0xE scope:global -_Q25EAGL413DynamicLoader.SkeletonType = .rodata:0x803D42A4; // type:object size:0x9 scope:global -_vt.Q29EAGL4Anim14FnRawStateChan = .rodata:0x803D49F8; // type:object size:0xA8 scope:global -_vt.Q29EAGL4Anim7FnCycle = .rodata:0x803D4AA0; // type:object size:0x90 scope:global -_vt.Q29EAGL4Anim12FnPoseMirror = .rodata:0x803D4B30; // type:object size:0x90 scope:global -_vt.Q29EAGL4Anim7FnGraft = .rodata:0x803D4BC0; // type:object size:0x90 scope:global -_vt.Q29EAGL4Anim18FnRawLinearChannel = .rodata:0x803D4C50; // type:object size:0xA8 scope:global -_vt.Q29EAGL4Anim13FnTurnBlender = .rodata:0x803D4CF8; // type:object size:0x90 scope:global -_vt.Q29EAGL4Anim12FnRunBlender = .rodata:0x803D4D88; // type:object size:0x90 scope:global -_vt.Q29EAGL4Anim11FnPhaseChan = .rodata:0x803D4E18; // type:object size:0xA8 scope:global -_vt.Q29EAGL4Anim17FnRawEventChannel = .rodata:0x803D4EC0; // type:object size:0xA8 scope:global -_vt.Q29EAGL4Anim13FnPoseBlender = .rodata:0x803D4F68; // type:object size:0x90 scope:global -_vt.Q29EAGL4Anim16FnRawPoseChannel = .rodata:0x803D4FF8; // type:object size:0xA8 scope:global -_vt.Q29EAGL4Anim14FnEventBlender = .rodata:0x803D50A0; // type:object size:0x90 scope:global -_vt.Q29EAGL4Anim14FnDeltaSingleQ = .rodata:0x803D5130; // type:object size:0xB0 scope:global -_vt.Q29EAGL4Anim12FnDeltaQFast = .rodata:0x803D51E0; // type:object size:0xA8 scope:global -_vt.Q29EAGL4Anim8FnDeltaQ = .rodata:0x803D5288; // type:object size:0xB0 scope:global -_vt.Q29EAGL4Anim9FnDeltaF3 = .rodata:0x803D5338; // type:object size:0xA8 scope:global -_vt.Q29EAGL4Anim9FnDeltaF1 = .rodata:0x803D53E0; // type:object size:0xA8 scope:global -_vt.Q29EAGL4Anim18FnCsisEventChannel = .rodata:0x803D5488; // type:object size:0xA8 scope:global -_vt.Q29EAGL4Anim13FnKeyQuatChan = .rodata:0x803D5530; // type:object size:0xA8 scope:global -_vt.Q29EAGL4Anim13FnKeyLerpChan = .rodata:0x803D55D8; // type:object size:0xA8 scope:global -_vt.Q29EAGL4Anim14FnKeyDeltaChan = .rodata:0x803D5680; // type:object size:0xA8 scope:global -_vt.Q29EAGL4Anim15FnDeltaQuatChan = .rodata:0x803D5728; // type:object size:0xA8 scope:global -_vt.Q29EAGL4Anim15FnDeltaLerpChan = .rodata:0x803D57D0; // type:object size:0xA8 scope:global -_vt.Q29EAGL4Anim11FnDeltaChan = .rodata:0x803D5878; // type:object size:0xA8 scope:global -_vt.Q29EAGL4Anim10FnPoseAnim = .rodata:0x803D5920; // type:object size:0xA8 scope:global -_vt.Q29EAGL4Anim13FnStatelessF3 = .rodata:0x803D59C8; // type:object size:0xA8 scope:global -_vt.Q29EAGL4Anim12FnStatelessQ = .rodata:0x803D5A70; // type:object size:0xA8 scope:global -_vt.Q29EAGL4Anim17FnCompoundChannel = .rodata:0x803D5B18; // type:object size:0xA8 scope:global -_vt.Q29EAGL4Anim17MemoryPoolManager = .rodata:0x803D5BC0; // type:object size:0x80 scope:global -_vt.Q29EAGL4Anim15FnAnimMemoryMap = .rodata:0x803D5C40; // type:object size:0xA8 scope:global -_vt.Q29EAGL4Anim11FnAnimSuper = .rodata:0x803D5CE8; // type:object size:0x18 scope:global -gRuntimeAllocType = .rodata:0x803D5E28; // type:object size:0x10 scope:local -_14EAXAemsManager.m_SlotSizes = .rodata:0x803D6B78; // type:object size:0x20 scope:global -_vt.17SFXCTL_Helicopter = .rodata:0x803D7838; // type:object size:0x78 scope:global -_vt.16SFXCTL_3DHeliPos = .rodata:0x803D78B0; // type:object size:0x98 scope:global -_vt.18SFXCTL_3DScrapePos = .rodata:0x803D7948; // type:object size:0x98 scope:global -_vt.15SFXCTL_3DColPos = .rodata:0x803D79E0; // type:object size:0x98 scope:global -_vt.16SFXCTL_GameState = .rodata:0x803D7A78; // type:object size:0x78 scope:global -_vt.16SFXCTL_MasterVol = .rodata:0x803D7AF0; // type:object size:0x78 scope:global -_vt.13SFXCTL_Tunnel = .rodata:0x803D7B68; // type:object size:0x78 scope:global -_vt.18SFXCTL_HybridMotor = .rodata:0x803D7BE0; // type:object size:0x78 scope:global -_vt.17SFXCTL_AccelTrans = .rodata:0x803D7C58; // type:object size:0x78 scope:global -_vt.13SFXCTL_Engine = .rodata:0x803D7CD0; // type:object size:0xC0 scope:global -_vt.15SFXCTL_Shifting = .rodata:0x803D7D90; // type:object size:0x78 scope:global -_vt.12SFXCTL_Wheel = .rodata:0x803D7E08; // type:object size:0x78 scope:global -_vt.13HeliSoundConn = .rodata:0x803D7E80; // type:object size:0x30 scope:global -_vt.19SFXCTL_TruckPhysics = .rodata:0x803D7EB0; // type:object size:0x80 scope:global -_vt.16SFXCTL_AIPhysics = .rodata:0x803D7F30; // type:object size:0x80 scope:global -_vt.14SFXCTL_Physics = .rodata:0x803D7FB0; // type:object size:0x80 scope:global -_vt.Q29SoundConn16Pkt_Heli_Service = .rodata:0x803D8030; // type:object size:0x40 scope:global -_vt.Q29SoundConn15Pkt_Car_Service = .rodata:0x803D8070; // type:object size:0x40 scope:global -_vt.12CarSoundConn = .rodata:0x803D80B0; // type:object size:0x30 scope:global -_vt.17SFXCTL_Pathfinder = .rodata:0x803D80E0; // type:object size:0x78 scope:global -_vt.14NIS_RevManager = .rodata:0x803D8158; // type:object size:0x18 scope:global -_vt.15SFXCTL_3DCarPos = .rodata:0x803D8170; // type:object size:0x98 scope:global -_vt.15SFXCTL_3DObjPos = .rodata:0x803D8208; // type:object size:0x98 scope:global -_vt.6SFXCTL = .rodata:0x803D82A0; // type:object size:0x78 scope:global -_vt.15cSTICH_PlayBack = .rodata:0x803D8318; // type:object size:0x18 scope:global -_vt.13cStichWrapper = .rodata:0x803D8330; // type:object size:0x18 scope:global -_vt.8EAXTruck = .rodata:0x803D8348; // type:object size:0xB0 scope:global -_vt.9EAXCopCar = .rodata:0x803D83F8; // type:object size:0xB0 scope:global -_vt.13EAXAITunerCar = .rodata:0x803D84A8; // type:object size:0xB0 scope:global -_vt.17SndAIStateManager = .rodata:0x803D8558; // type:object size:0x18 scope:global -_vt.13EAXTrafficCar = .rodata:0x803D8570; // type:object size:0x68 scope:global -_vt.11EAXTunerCar = .rodata:0x803D85D8; // type:object size:0xB8 scope:global -_vt.14EAXAemsManager = .rodata:0x803D8690; // type:object size:0x18 scope:global -_vt.18EAXS_StreamChannel = .rodata:0x803D86A8; // type:object size:0x38 scope:global -_vt.18EAXS_StreamManager = .rodata:0x803D86E0; // type:object size:0x18 scope:global -_vt.9EAXCommon = .rodata:0x803D86F8; // type:object size:0x48 scope:global -_vt.11EAXFrontEnd = .rodata:0x803D8740; // type:object size:0x48 scope:global -_vt.14EAXSND8Wrapper = .rodata:0x803D8788; // type:object size:0x18 scope:global -_vt.8EAXSound = .rodata:0x803D87A0; // type:object size:0x18 scope:global -_vt.Q25Sound14CollisionEvent = .rodata:0x803D87B8; // type:object size:0x30 scope:global -_vt.Q25Sound10AudioEvent = .rodata:0x803D87E8; // type:object size:0x30 scope:global -_vt.12AudioMemBase = .rodata:0x803D8818; // type:object size:0x18 scope:global -_vt.Q23Sim6Packet = .rodata:0x803D8830; // type:object size:0x40 scope:global -TWK_SND_SteeringMonitor = .rodata:0x803D8A6C; // type:object size:0x18 scope:local -TWK_SND_AccelMonitor = .rodata:0x803D8A84; // type:object size:0x18 scope:local -TWK_SND_DeccelMonitor = .rodata:0x803D8A9C; // type:object size:0x18 scope:local -TWK_SND_ThrottleMonitor = .rodata:0x803D8AB4; // type:object size:0x18 scope:local -MIN_StateSustainTime = .rodata:0x803D8ACC; // type:object size:0x1C scope:local -UP_SHIFTING_TRQ_ATTACH_INITIAL_PERCENT = .rodata:0x803D8AE8; // type:object size:0x10 scope:local -UP_SHIFTING_TRQ_ATTACK_TIME = .rodata:0x803D8AF8; // type:object size:0x10 scope:local -REDLINE_ENG_FADE = .rodata:0x803D8B08; // type:object size:0x8 scope:local -REDLINE_REDSAMP_FADE = .rodata:0x803D8B10; // type:object size:0x8 scope:local -SND_AI_RPM_Lengths_FINE = .rodata:0x803D8B18; // type:object size:0x24 scope:local -SND_AI_SHORT_TRACK_RPM_Lengths_FINE = .rodata:0x803D8B3C; // type:object size:0x24 scope:local -SND_AI_DRIFT_RPM_Lengths_FINE = .rodata:0x803D8B60; // type:object size:0x24 scope:local -SND_AI_DOWNSHIFT_RPMS = .rodata:0x803D8B84; // type:object size:0x24 scope:local -_vt.12PF_Allocator = .rodata:0x803D8BA8; // type:object size:0x38 scope:global -_vt.Q43UTL11Collectionst8Listable2Z13HeliSoundConni10_4List = .rodata:0x803D8BE0; // type:object size:0x40 scope:global -_vt.Q43UTL11Collectionst8Listable2Z12CarSoundConni10_4List = .rodata:0x803D8C20; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3Z15SampleQueueItemi43i16 = .rodata:0x803D8C60; // type:object size:0x40 scope:global -_vt.Q43UTL11Collectionst11ListableSet4Z14cSampleWarpperi25Z10STICH_TYPEUi3_4List = .rodata:0x803D8CA0; // type:object size:0x40 scope:global -_vt.17CSISCoreAllocator = .rodata:0x803D8CE0; // type:object size:0x28 scope:global -_vt.Q43UTL11Collectionst8Listable2Z13EAX_HeliStatei10_4List = .rodata:0x803D8D08; // type:object size:0x40 scope:global -_vt.Q43UTL11Collectionst8Listable2Z12EAX_CarStatei10_4List = .rodata:0x803D8D48; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP13HeliSoundConni10i16 = .rodata:0x803D8D90; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP13HeliSoundConni16 = .rodata:0x803D8DD0; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP12CarSoundConni10i16 = .rodata:0x803D8E10; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP12CarSoundConni16 = .rodata:0x803D8E50; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2Z15SampleQueueItemi16 = .rodata:0x803D8E90; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP14cSampleWarpperi25i16 = .rodata:0x803D8ED0; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP14cSampleWarpperi16 = .rodata:0x803D8F10; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP13EAX_HeliStatei10i16 = .rodata:0x803D8F50; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP13EAX_HeliStatei16 = .rodata:0x803D8F90; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP12EAX_CarStatei10i16 = .rodata:0x803D8FD0; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP12EAX_CarStatei16 = .rodata:0x803D9010; // type:object size:0x40 scope:global -_vt.12NFSMixMaster = .rodata:0x803DB030; // type:object size:0x18 scope:global -_vt.9NFSMixMap = .rodata:0x803DB048; // type:object size:0x28 scope:global -_vt.14NFSMixMapState = .rodata:0x803DB070; // type:object size:0x20 scope:global -_vt.14GinsuSynthesis = .rodata:0x803DB090; // type:object size:0x18 scope:global -_vt.14GinsuSynthData = .rodata:0x803DB0A8; // type:object size:0x18 scope:global -_vt.16CSTATEMGR_CopCar = .rodata:0x803DB0C0; // type:object size:0x50 scope:global -_vt.15CSTATEMGR_Truck = .rodata:0x803DB110; // type:object size:0x50 scope:global -_vt.20CSTATEMGR_Helicopter = .rodata:0x803DB160; // type:object size:0x50 scope:global -_vt.15CSTATEMGR_Music = .rodata:0x803DB1B0; // type:object size:0x50 scope:global -_vt.17CSTATEMGR_DriveBy = .rodata:0x803DB200; // type:object size:0x50 scope:global -_vt.14CSTATEMGR_Main = .rodata:0x803DB250; // type:object size:0x50 scope:global -_vt.19CSTATEMGR_Collision = .rodata:0x803DB2A0; // type:object size:0x50 scope:global -_vt.15CSTATEMGR_AICar = .rodata:0x803DB2F0; // type:object size:0x50 scope:global -_vt.20CSTATEMGR_TrafficCar = .rodata:0x803DB340; // type:object size:0x50 scope:global -_vt.18CSTATEMGR_CarState = .rodata:0x803DB390; // type:object size:0x50 scope:global -_vt.Q23UTLt11FixedVector3ZUii8i16 = .rodata:0x803DB3E0; // type:object size:0x40 scope:global -_vt.16SFXCTL_3DRearPos = .rodata:0x803DB420; // type:object size:0x98 scope:global -_vt.19CSTATEMGR_PlayerCar = .rodata:0x803DB4B8; // type:object size:0x50 scope:global -_vt.16CSTATEMGR_Enviro = .rodata:0x803DB508; // type:object size:0x50 scope:global -_vt.18CSTATE_WorldObject = .rodata:0x803DB558; // type:object size:0x68 scope:global -_vt.11WorldObject = .rodata:0x803DB5C0; // type:object size:0x20 scope:global -_vt.14CSTATE_DriveBy = .rodata:0x803DB5E0; // type:object size:0x68 scope:global -_vt.17CSTATE_Helicopter = .rodata:0x803DB648; // type:object size:0x68 scope:global -_vt.12CSTATE_Music = .rodata:0x803DB6B0; // type:object size:0x68 scope:global -_vt.16CSTATE_Collision = .rodata:0x803DB718; // type:object size:0x68 scope:global -_vt.11CSTATE_Main = .rodata:0x803DB780; // type:object size:0x68 scope:global -_vt.15SFXObj_PFEATrax = .rodata:0x803DB7E8; // type:object size:0x98 scope:global -_vt.17SFXObj_Pathfinder = .rodata:0x803DB880; // type:object size:0x78 scope:global -_vt.12SFXObj_FEHUD = .rodata:0x803DB8F8; // type:object size:0x78 scope:global -_vt.22SFXCTL_3DVoiceActorPos = .rodata:0x803DB970; // type:object size:0x98 scope:global -_vt.13SFXObj_Speech = .rodata:0x803DBA08; // type:object size:0x78 scope:global -_vt.10SFX_Common = .rodata:0x803DBA80; // type:object size:0x78 scope:global -_vt.15SFXObj_Ambience = .rodata:0x803DBAF8; // type:object size:0x78 scope:global -_vt.16CARSFX_BottomOut = .rodata:0x803DBB70; // type:object size:0x78 scope:global -_vt.19SFXCTL_3DTrailerPos = .rodata:0x803DBBE8; // type:object size:0x98 scope:global -_vt.17CARSFX_TruckWoosh = .rodata:0x803DBC80; // type:object size:0x88 scope:global -_vt.14SFXObj_TruckFX = .rodata:0x803DBD08; // type:object size:0x78 scope:global -_vt.13SFXObj_Reverb = .rodata:0x803DBD80; // type:object size:0x78 scope:global -_vt.18SFXCTL_3DMomentPos = .rodata:0x803DBDF8; // type:object size:0x98 scope:global -_vt.17SFXObj_MomentStrm = .rodata:0x803DBE90; // type:object size:0x78 scope:global -_vt.Q23UTLt11FixedVector3ZQ217SFXObj_MomentStrm18stMomentDecriptioni64i16 = .rodata:0x803DBF08; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZQ217SFXObj_MomentStrm18stMomentDecriptioni16 = .rodata:0x803DBF48; // type:object size:0x40 scope:global -_vt.16SFXObj_NISStream = .rodata:0x803DBF88; // type:object size:0x78 scope:global -_vt.17SFXObj_Helicopter = .rodata:0x803DC000; // type:object size:0x78 scope:global -_vt.17SFXCTL_3DWooshPos = .rodata:0x803DC078; // type:object size:0x98 scope:global -_vt.12SFXObj_Woosh = .rodata:0x803DC110; // type:object size:0x78 scope:global -_vt.16SFXObj_Collision = .rodata:0x803DC188; // type:object size:0x78 scope:global -_vt.18SFXObj_WorldObject = .rodata:0x803DC200; // type:object size:0x78 scope:global -_vt.20SFXCTL_3DFountainPos = .rodata:0x803DC278; // type:object size:0x98 scope:global -_vt.19CARSFX_TrafficWoosh = .rodata:0x803DC310; // type:object size:0x88 scope:global -_vt.16CARSFX_TruckHorn = .rodata:0x803DC398; // type:object size:0x90 scope:global -_vt.18CARSFX_TrafficHorn = .rodata:0x803DC428; // type:object size:0x90 scope:global -_vt.19SFXCTL_3DTrafficPos = .rodata:0x803DC4B8; // type:object size:0x98 scope:global -_vt.20CARSFX_TrafficEngine = .rodata:0x803DC550; // type:object size:0x78 scope:global -_vt.14CARSFX_Nitrous = .rodata:0x803DC5C8; // type:object size:0x78 scope:global -_vt.12CARSFX_Siren = .rodata:0x803DC640; // type:object size:0x78 scope:global -_vt.18CARSFX_PreColWoosh = .rodata:0x803DC6B8; // type:object size:0x78 scope:global -_vt.11CARSFX_Rain = .rodata:0x803DC730; // type:object size:0x80 scope:global -_vt.18CARSFX_WindWeather = .rodata:0x803DC7B0; // type:object size:0x80 scope:global -_vt.16CARSFX_WindNoise = .rodata:0x803DC830; // type:object size:0x80 scope:global -_vt.20SFXCTL_3DLeftWindPos = .rodata:0x803DC8B0; // type:object size:0x98 scope:global -_vt.21SFXCTL_3DRightWindPos = .rodata:0x803DC948; // type:object size:0x98 scope:global -_vt.12CARSFX_Turbo = .rodata:0x803DC9E0; // type:object size:0x78 scope:global -_vt.19CARSFX_SparkChatter = .rodata:0x803DCA58; // type:object size:0x78 scope:global -_vt.12CARSFX_Shift = .rodata:0x803DCAD0; // type:object size:0x78 scope:global -_vt.16CARSFX_RoadNoise = .rodata:0x803DCB48; // type:object size:0x78 scope:global -_vt.19CARSFX_TrafficSkids = .rodata:0x803DCBC0; // type:object size:0x78 scope:global -_vt.12CARSFX_Skids = .rodata:0x803DCC38; // type:object size:0x78 scope:global -_vt.22SFXCTL_3DRightWheelPos = .rodata:0x803DCCB0; // type:object size:0x98 scope:global -_vt.21SFXCTL_3DLeftWheelPos = .rodata:0x803DCD48; // type:object size:0x98 scope:global -_vt.14CSTATEMGR_Base = .rodata:0x803DCDE0; // type:object size:0x50 scope:global -_vt.6EAXCar = .rodata:0x803DCE30; // type:object size:0xB0 scope:global -_vt.21CARSFX_SingleGinsuEng = .rodata:0x803DCEE0; // type:object size:0x98 scope:global -_vt.19CARSFX_DualGinsuEng = .rodata:0x803DCF78; // type:object size:0x98 scope:global -_vt.18CARSFX_GinsuEngine = .rodata:0x803DD010; // type:object size:0x98 scope:global -_vt.17CARSFX_AEMSEngine = .rodata:0x803DD0A8; // type:object size:0x90 scope:global -_vt.17CARSFX_EngineBase = .rodata:0x803DD138; // type:object size:0x90 scope:global -_vt.6CARSFX = .rodata:0x803DD1C8; // type:object size:0x78 scope:global -_vt.8SFX_Base = .rodata:0x803DD240; // type:object size:0x78 scope:global -_vt.7SndBase = .rodata:0x803DD2B8; // type:object size:0x78 scope:global -_vt.11CSTATE_Base = .rodata:0x803DD330; // type:object size:0x68 scope:global -V8CopEngines = .rodata:0x803DD468; // type:object size:0x10 scope:local -_vt.Q23UTLt11FixedVector3ZQ218CSTATEMGR_CarState14EngToCarStructi24i16 = .rodata:0x803DD478; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3Z17EngineMappingPairi24i16 = .rodata:0x803DD4B8; // type:object size:0x40 scope:global -_vt.14ISndAttachable = .rodata:0x803DD4F8; // type:object size:0x20 scope:global -_vt.Q43UTL11Collectionst8Listable2Z14ISndAttachablei15_4List = .rodata:0x803DD518; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZQ218CSTATEMGR_CarState14EngToCarStructi16 = .rodata:0x803DD558; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2Z17EngineMappingPairi16 = .rodata:0x803DD598; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP14ISndAttachablei15i16 = .rodata:0x803DD5D8; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP14ISndAttachablei16 = .rodata:0x803DD618; // type:object size:0x40 scope:global -_vt.15cQuarterSizeMap = .rodata:0x803DF3D8; // type:object size:0x18 scope:global -_vt.12cSpecularMap = .rodata:0x803DF3F0; // type:object size:0x18 scope:global -_vt.10cSphereMap = .rodata:0x803DF408; // type:object size:0x18 scope:global -_vt.14cCaptureBuffer = .rodata:0x803DF420; // type:object size:0x18 scope:global -PADMASKS = .rodata:0x803DF51C; // type:object size:0x10 scope:local -TweakSphereMapClr = .rodata:0x803DF52C; // type:object size:0x4 scope:local -_vt.11FEMemWidget = .rodata:0x803E2010; // type:object size:0x18 scope:global -_vt.13UIMemcardBoot = .rodata:0x803E2028; // type:object size:0x48 scope:global -_vt.16MemcardCallbacks = .rodata:0x803E2070; // type:object size:0xA8 scope:global -_vt.8MyThread = .rodata:0x803E2118; // type:object size:0x58 scope:global -_vt.7MyMutex = .rodata:0x803E2170; // type:object size:0x40 scope:global -_vt.13UIMemcardMain = .rodata:0x803E21B0; // type:object size:0x48 scope:global -_vt.13UIMemcardBase = .rodata:0x803E21F8; // type:object size:0x48 scope:global -_vt.17UIMemcardKeyboard = .rodata:0x803E2240; // type:object size:0x38 scope:global -_vt.13UIMemcardList = .rodata:0x803E2278; // type:object size:0x28 scope:global -_vt.15UIDeleteProfile = .rodata:0x803E22A0; // type:object size:0x38 scope:global -_vt.16UIProfileManager = .rodata:0x803E22D8; // type:object size:0x38 scope:global -_vt.11PMCreateNew = .rodata:0x803E2310; // type:object size:0x20 scope:global -_vt.8PMDelete = .rodata:0x803E2330; // type:object size:0x20 scope:global -_vt.6PMLoad = .rodata:0x803E2350; // type:object size:0x20 scope:global -_vt.6PMSave = .rodata:0x803E2370; // type:object size:0x20 scope:global -_vt.20ShapeMemoryAllocator = .rodata:0x803E2390; // type:object size:0x38 scope:global -_vt.18cFEngGameInterface = .rodata:0x803E23C8; // type:object size:0xE0 scope:global -_vt.17FEngGroupFEPrintf = .rodata:0x803E24A8; // type:object size:0x20 scope:global -_vt.24FEngSetGroupLanguageHash = .rodata:0x803E24C8; // type:object size:0x20 scope:global -_vt.22ObjectVisibilitySetter = .rodata:0x803E24E8; // type:object size:0x20 scope:global -_vt.17ObjectDirtySetter = .rodata:0x803E2508; // type:object size:0x20 scope:global -_vt.22RenderObjectDisconnect = .rodata:0x803E2528; // type:object size:0x20 scope:global -_vt.27FEngTransferFlagsToChildren = .rodata:0x803E2548; // type:object size:0x20 scope:global -_vt.17FEngHidePCObjects = .rodata:0x803E2568; // type:object size:0x20 scope:global -_vt.16FEngMovieStopper = .rodata:0x803E2588; // type:object size:0x20 scope:global -_vt.16FEngMovieStarter = .rodata:0x803E25A8; // type:object size:0x20 scope:global -_vt.19ControllerUnplugged = .rodata:0x803E25C8; // type:object size:0x28 scope:global -_vt.9uiCredits = .rodata:0x803E25F0; // type:object size:0x28 scope:global -_vt.11CLoadCareer = .rodata:0x803E2618; // type:object size:0x20 scope:global -_vt.15CStartNewCareer = .rodata:0x803E2638; // type:object size:0x20 scope:global -_vt.13CResumeCareer = .rodata:0x803E2658; // type:object size:0x20 scope:global -_vt.15uiCareerManager = .rodata:0x803E2678; // type:object size:0x38 scope:global -_vt.5CSave = .rodata:0x803E26B0; // type:object size:0x20 scope:global -_vt.6CTop15 = .rodata:0x803E26D0; // type:object size:0x20 scope:global -_vt.9CRapSheet = .rodata:0x803E26F0; // type:object size:0x20 scope:global -_vt.10CCarSelect = .rodata:0x803E2710; // type:object size:0x20 scope:global -_vt.15CResumeFreeRoam = .rodata:0x803E2730; // type:object size:0x20 scope:global -_vt.12uiCareerCrib = .rodata:0x803E2750; // type:object size:0x38 scope:global -_vt.12uiSMSMessage = .rodata:0x803E2788; // type:object size:0x28 scope:global -_vt.5uiSMS.13ArrayScroller = .rodata:0x803E27B0; // type:object size:0x28 scope:global -_vt.5uiSMS = .rodata:0x803E27D8; // type:object size:0x28 scope:global -_vt.7SMSSlot = .rodata:0x803E2800; // type:object size:0x20 scope:global -_vt.8SMSDatum = .rodata:0x803E2820; // type:object size:0x20 scope:global -_vt.23uiSafehouseRegionUnlock = .rodata:0x803E2840; // type:object size:0x28 scope:global -_vt.16uiRepSheetBounty.13ArrayScroller = .rodata:0x803E2868; // type:object size:0x28 scope:global -_vt.16uiRepSheetBounty = .rodata:0x803E2890; // type:object size:0x28 scope:global -_vt.11BountyDatum = .rodata:0x803E28B8; // type:object size:0x20 scope:global -_vt.19FEAnyTutorialScreen = .rodata:0x803E28D8; // type:object size:0x28 scope:global -_vt.20uiRepSheetMilestones.13ArrayScroller = .rodata:0x803E2900; // type:object size:0x28 scope:global -_vt.20uiRepSheetMilestones = .rodata:0x803E2928; // type:object size:0x28 scope:global -_vt.14SpeedTrapDatum = .rodata:0x803E2950; // type:object size:0x28 scope:global -_vt.14MilestoneDatum = .rodata:0x803E2978; // type:object size:0x28 scope:global -_vt.18uiRepSheetRivalBio = .rodata:0x803E29A0; // type:object size:0x28 scope:global -_vt.19uiRepSheetRivalFlow = .rodata:0x803E29C8; // type:object size:0x18 scope:global -_vt.8WorldMap = .rodata:0x803E29E0; // type:object size:0x30 scope:global -_vt.14ItemTypeToggle = .rodata:0x803E2A10; // type:object size:0x80 scope:global -_vt.8HeliItem = .rodata:0x803E2A90; // type:object size:0x48 scope:global -_vt.7CopItem = .rodata:0x803E2AD8; // type:object size:0x48 scope:global -_vt.7MapItem = .rodata:0x803E2B20; // type:object size:0x48 scope:global -_vt.20UISafehouseRaceSheet.13ArrayScroller = .rodata:0x803E2B68; // type:object size:0x28 scope:global -_vt.20UISafehouseRaceSheet = .rodata:0x803E2B90; // type:object size:0x28 scope:global -_vt.9RaceDatum = .rodata:0x803E2BB8; // type:object size:0x20 scope:global -_vt.15uiRepSheetRival = .rodata:0x803E2BD8; // type:object size:0x28 scope:global -_vt.14uiRepSheetMain = .rodata:0x803E2C00; // type:object size:0x38 scope:global -_vt.12RepSheetIcon = .rodata:0x803E2C38; // type:object size:0x20 scope:global -_vt.23uiRepSheetRivalStreamer = .rodata:0x803E2C58; // type:object size:0x18 scope:global -_vt.24uiRapSheetRankingsDetail.13ArrayScroller = .rodata:0x803E2C70; // type:object size:0x28 scope:global -_vt.24uiRapSheetRankingsDetail = .rodata:0x803E2C98; // type:object size:0x28 scope:global -_vt.30RapSheetRankingsTimerArraySlot = .rodata:0x803E2CC0; // type:object size:0x20 scope:global -_vt.25RapSheetRankingsArraySlot = .rodata:0x803E2CE0; // type:object size:0x20 scope:global -_vt.21RapSheetRankingsDatum = .rodata:0x803E2D00; // type:object size:0x20 scope:global -_vt.18uiRapSheetRankings = .rodata:0x803E2D20; // type:object size:0x28 scope:global -_vt.12uiRapSheetPD = .rodata:0x803E2D48; // type:object size:0x28 scope:global -_vt.13uiRapSheetTEP = .rodata:0x803E2D70; // type:object size:0x30 scope:global -_vt.13uiRapSheetCTS.13ArrayScroller = .rodata:0x803E2DA0; // type:object size:0x28 scope:global -_vt.13uiRapSheetCTS = .rodata:0x803E2DC8; // type:object size:0x28 scope:global -_vt.20RapSheetCTSArraySlot = .rodata:0x803E2DF0; // type:object size:0x20 scope:global -_vt.16RapSheetCTSDatum = .rodata:0x803E2E10; // type:object size:0x20 scope:global -_vt.12uiRapSheetVD.13ArrayScroller = .rodata:0x803E2E30; // type:object size:0x28 scope:global -_vt.12uiRapSheetVD = .rodata:0x803E2E58; // type:object size:0x28 scope:global -_vt.19RapSheetVDArraySlot = .rodata:0x803E2E80; // type:object size:0x20 scope:global -_vt.15RapSheetVDDatum = .rodata:0x803E2EA0; // type:object size:0x20 scope:global -_vt.12uiRapSheetUS.13ArrayScroller = .rodata:0x803E2EC0; // type:object size:0x28 scope:global -_vt.12uiRapSheetUS = .rodata:0x803E2EE8; // type:object size:0x28 scope:global -_vt.19RapSheetUSArraySlot = .rodata:0x803E2F10; // type:object size:0x20 scope:global -_vt.15RapSheetUSDatum = .rodata:0x803E2F30; // type:object size:0x20 scope:global -_vt.12uiRapSheetRS = .rodata:0x803E2F50; // type:object size:0x28 scope:global -_vt.14uiRapSheetMain = .rodata:0x803E2F78; // type:object size:0x30 scope:global -_vt.15uiRapSheetLogin = .rodata:0x803E2FA8; // type:object size:0x28 scope:global -_vt.14UIEATraxScreen = .rodata:0x803E2FD0; // type:object size:0x28 scope:global -_vt.19JukeBoxScrollerSlot = .rodata:0x803E2FF8; // type:object size:0x18 scope:global -_vt.20JukeBoxScrollerDatum = .rodata:0x803E3010; // type:object size:0x18 scope:global -_vt.12ScrollerSlot = .rodata:0x803E3028; // type:object size:0x18 scope:global -_vt.16ScrollerSlotNode = .rodata:0x803E3040; // type:object size:0x18 scope:global -_vt.17ScrollerDatumNode = .rodata:0x803E3058; // type:object size:0x18 scope:global -_vt.18UITrackMapStreamer = .rodata:0x803E3070; // type:object size:0x18 scope:global -_vt.15pm_QuitRaceToFE = .rodata:0x803E3088; // type:object size:0x20 scope:global -_vt.21pm_QuitRaceToFreeRoam = .rodata:0x803E30A8; // type:object size:0x20 scope:global -_vt.16pm_QuitQuickRace = .rodata:0x803E30C8; // type:object size:0x20 scope:global -_vt.15pm_QuitMainMenu = .rodata:0x803E30E8; // type:object size:0x20 scope:global -_vt.17pm_SwitchToTuning = .rodata:0x803E3108; // type:object size:0x20 scope:global -_vt.18pm_SwitchToOptions = .rodata:0x803E3128; // type:object size:0x20 scope:global -_vt.14pm_RestartRace = .rodata:0x803E3148; // type:object size:0x20 scope:global -_vt.17pm_ResumeFreeRoam = .rodata:0x803E3168; // type:object size:0x20 scope:global -_vt.13pm_ResumeRace = .rodata:0x803E3188; // type:object size:0x20 scope:global -_vt.12ArrayScripts = .rodata:0x803E31A8; // type:object size:0x18 scope:global -_vt.15FEGameWonScreen = .rodata:0x803E31C0; // type:object size:0x28 scope:global -_vt.9PauseMenu = .rodata:0x803E31E8; // type:object size:0x38 scope:global -_vt.16FEAnyMovieScreen = .rodata:0x803E3220; // type:object size:0x28 scope:global -_vt.17UIOptionsTrailers = .rodata:0x803E3248; // type:object size:0x38 scope:global -_vt.19UIOptionsController = .rodata:0x803E3280; // type:object size:0x30 scope:global -_vt.15UIOptionsScreen = .rodata:0x803E32B0; // type:object size:0x30 scope:global -_vt.11MainOptions = .rodata:0x803E32E0; // type:object size:0x20 scope:global -_vt.18MainProfileManager = .rodata:0x803E3300; // type:object size:0x20 scope:global -_vt.13MainCustomize = .rodata:0x803E3320; // type:object size:0x20 scope:global -_vt.13MainQuickRace = .rodata:0x803E3340; // type:object size:0x20 scope:global -_vt.9Challenge = .rodata:0x803E3360; // type:object size:0x20 scope:global -_vt.10MainCareer = .rodata:0x803E3380; // type:object size:0x20 scope:global -_vt.13UIOptionsMain = .rodata:0x803E33A0; // type:object size:0x38 scope:global -_vt.8COConfig = .rodata:0x803E33D8; // type:object size:0x88 scope:global -_vt.11COVibration = .rodata:0x803E3460; // type:object size:0x88 scope:global -_vt.13POLeaderBoard = .rodata:0x803E34E8; // type:object size:0x88 scope:global -_vt.11POSplitTime = .rodata:0x803E3570; // type:object size:0x88 scope:global -_vt.7POScore = .rodata:0x803E35F8; // type:object size:0x88 scope:global -_vt.10POPosition = .rodata:0x803E3680; // type:object size:0x88 scope:global -_vt.8POGauges = .rodata:0x803E3708; // type:object size:0x88 scope:global -_vt.10PODriveCam = .rodata:0x803E3790; // type:object size:0x88 scope:global -_vt.14POTransmission = .rodata:0x803E3818; // type:object size:0x88 scope:global -_vt.18GOExploringMiniMap = .rodata:0x803E38A0; // type:object size:0x88 scope:global -_vt.15GORacingMiniMap = .rodata:0x803E3928; // type:object size:0x88 scope:global -_vt.13GOSpeedoUnits = .rodata:0x803E39B0; // type:object size:0x88 scope:global -_vt.10GORearview = .rodata:0x803E3A38; // type:object size:0x88 scope:global -_vt.10GOJumpCams = .rodata:0x803E3AC0; // type:object size:0x88 scope:global -_vt.10GOAutoSave = .rodata:0x803E3B48; // type:object size:0x88 scope:global -_vt.8GODamage = .rodata:0x803E3BD0; // type:object size:0x88 scope:global -_vt.12VOWideScreen = .rodata:0x803E3C58; // type:object size:0x88 scope:global -_vt.11AOAudioMode = .rodata:0x803E3CE0; // type:object size:0x88 scope:global -_vt.12AOIGMusicVol = .rodata:0x803E3D68; // type:object size:0x90 scope:global -_vt.12AOFEMusicVol = .rodata:0x803E3DF8; // type:object size:0x90 scope:global -_vt.11AOSpeechVol = .rodata:0x803E3E88; // type:object size:0x90 scope:global -_vt.8AOCarVol = .rodata:0x803E3F18; // type:object size:0x90 scope:global -_vt.17AOEATraxMusicMode = .rodata:0x803E3FA8; // type:object size:0x88 scope:global -_vt.22AOInteractiveMusicMode = .rodata:0x803E4030; // type:object size:0x88 scope:global -_vt.14AOSFXMasterVol = .rodata:0x803E40B8; // type:object size:0x90 scope:global -_vt.9OMCredits = .rodata:0x803E4148; // type:object size:0x20 scope:global -_vt.8OMEATrax = .rodata:0x803E4168; // type:object size:0x20 scope:global -_vt.12OMController = .rodata:0x803E4188; // type:object size:0x20 scope:global -_vt.8OMPlayer = .rodata:0x803E41A8; // type:object size:0x20 scope:global -_vt.10OMGameplay = .rodata:0x803E41C8; // type:object size:0x20 scope:global -_vt.7OMVideo = .rodata:0x803E41E8; // type:object size:0x20 scope:global -_vt.7OMAudio = .rodata:0x803E4208; // type:object size:0x20 scope:global -_vt.6UIMain = .rodata:0x803E4228; // type:object size:0x38 scope:global -_vt.16FEObjectCallback = .rodata:0x803E4260; // type:object size:0x20 scope:global -gButtonIDs = .rodata:0x803E4290; // type:object size:0xC scope:local -gButtonTextIDs = .rodata:0x803E429C; // type:object size:0xC scope:local -_vt.13ScrollerDatum = .rodata:0x803E42A8; // type:object size:0x18 scope:global -_vt.10ArrayDatum = .rodata:0x803E42C0; // type:object size:0x20 scope:global -_vt.10IconOption = .rodata:0x803E42E0; // type:object size:0x20 scope:global -_vt.8FEWidget = .rodata:0x803E4300; // type:object size:0x80 scope:global -_10FEKeyboard.mLetterMap = .rodata:0x803E59E5; // type:object size:0x2D0 scope:global -gTradeInFactor = .rodata:0x803E89B0; // type:object size:0x4 scope:global -_vt.18CustomTuningScreen = .rodata:0x803E8BC0; // type:object size:0x30 scope:global -_vt.12TuningSlider = .rodata:0x803E8BF0; // type:object size:0x88 scope:global -_vt.Q313FEPlayerCarDB46GetNumCareerCarsWithARecord__13FEPlayerCarDB.0_7NumCars = .rodata:0x803E8C78; // type:object size:0x20 scope:global -_vt.Q313FEPlayerCarDB33GetTotalFines__13FEPlayerCarDBb.0_5Fines = .rodata:0x803E8C98; // type:object size:0x20 scope:global -_vt.Q313FEPlayerCarDB38GetNumImpoundedCars__13FEPlayerCarDB.0_11IsImpounded = .rodata:0x803E8CB8; // type:object size:0x20 scope:global -_vt.Q313FEPlayerCarDB41GetTotalBustedPursuits__13FEPlayerCarDB.0_14BustedPursuits = .rodata:0x803E8CD8; // type:object size:0x20 scope:global -_vt.Q313FEPlayerCarDB41GetTotalEvadedPursuits__13FEPlayerCarDB.0_14EvadedPursuits = .rodata:0x803E8CF8; // type:object size:0x20 scope:global -_vt.Q313FEPlayerCarDB33GetTotalBounty__13FEPlayerCarDB.0_6Bounty = .rodata:0x803E8D18; // type:object size:0x20 scope:global -_vt.Q313FEPlayerCarDB42GetTotalNumInfractions__13FEPlayerCarDBb.0_19TotalNumInfractions = .rodata:0x803E8D38; // type:object size:0x20 scope:global -_vt.Q313FEPlayerCarDB74GetNumInfraction__13FEPlayerCarDBQ218GInfractionManager14InfractionTypeb.0_13NumInfraction = .rodata:0x803E8D58; // type:object size:0x20 scope:global -_vt.3MD5 = .rodata:0x803E8D78; // type:object size:0x18 scope:global -_vt.23InGameAnyTutorialScreen = .rodata:0x803E8D90; // type:object size:0x28 scope:global -_vt.20InGameAnyMovieScreen = .rodata:0x803E8DB8; // type:object size:0x28 scope:global -_vt.Q219nsEngageEventDialog17EngageEventDialog = .rodata:0x803E8DE0; // type:object size:0x28 scope:global -_vt.23LoadingControllerScreen = .rodata:0x803E8E08; // type:object size:0x28 scope:global -_vt.20LanguageSelectScreen = .rodata:0x803E8E30; // type:object size:0x38 scope:global -_vt.11Scrollerina = .rodata:0x803E8E68; // type:object size:0x20 scope:global -_vt.11LoadingTips = .rodata:0x803E8E88; // type:object size:0x28 scope:global -_vt.13LoadingScreen = .rodata:0x803E8EB0; // type:object size:0x28 scope:global -_vt.11MovieScreen = .rodata:0x803E8ED8; // type:object size:0x28 scope:global -_vt.12SplashScreen = .rodata:0x803E8F00; // type:object size:0x28 scope:global -_vt.15BootFlowManager = .rodata:0x803E8F28; // type:object size:0x18 scope:global -_vt.14BootFlowScreen = .rodata:0x803E8F40; // type:object size:0x18 scope:global -_vt.12SixDaysLater = .rodata:0x803E8F58; // type:object size:0x28 scope:global -_vt.10FEKeyboard = .rodata:0x803E8F80; // type:object size:0x28 scope:global -_vt.6Chyron = .rodata:0x803E8FA8; // type:object size:0x28 scope:global -_vt.19BustedOverlayScreen = .rodata:0x803E8FD0; // type:object size:0x28 scope:global -_vt.14feDialogScreen = .rodata:0x803E8FF8; // type:object size:0x28 scope:global -_vt.28PostPursuitInfractionsScreen = .rodata:0x803E9020; // type:object size:0x28 scope:global -_vt.11Infractions.12IInfractions = .rodata:0x803E9048; // type:object size:0x20 scope:global -_vt.11Infractions = .rodata:0x803E9068; // type:object size:0x20 scope:global -_vt.12ShiftUpdater.13IShiftUpdater = .rodata:0x803E9088; // type:object size:0x30 scope:global -_vt.12ShiftUpdater = .rodata:0x803E90B8; // type:object size:0x20 scope:global -_vt.14DragTachometer.15ITachometerDrag = .rodata:0x803E90D8; // type:object size:0x18 scope:global -_vt.14DragTachometer.11ITachometer = .rodata:0x803E90F0; // type:object size:0x40 scope:global -_vt.14DragTachometer = .rodata:0x803E9130; // type:object size:0x20 scope:global -_vt.10FadeScreen = .rodata:0x803E9150; // type:object size:0x28 scope:global -_vt.15MenuZoneTrigger.16IMenuZoneTrigger = .rodata:0x803E9178; // type:object size:0x68 scope:global -_vt.15MenuZoneTrigger = .rodata:0x803E91E0; // type:object size:0x20 scope:global -_vt.10TurboMeter.11ITurbometer = .rodata:0x803E9200; // type:object size:0x20 scope:global -_vt.10TurboMeter = .rodata:0x803E9220; // type:object size:0x20 scope:global -_vt.11BustedMeter.12IBustedMeter = .rodata:0x803E9240; // type:object size:0x38 scope:global -_vt.11BustedMeter = .rodata:0x803E9278; // type:object size:0x20 scope:global -_vt.13TimeExtension.14ITimeExtension = .rodata:0x803E9298; // type:object size:0x28 scope:global -_vt.13TimeExtension = .rodata:0x803E92C0; // type:object size:0x20 scope:global -_vt.12PursuitBoard.13IPursuitBoard = .rodata:0x803E92E0; // type:object size:0x90 scope:global -_vt.12PursuitBoard = .rodata:0x803E9370; // type:object size:0x20 scope:global -_vt.24PostRaceMilestonesScreen = .rodata:0x803E9390; // type:object size:0x28 scope:global -_vt.21PostRacePursuitScreen.13ArrayScroller = .rodata:0x803E93B8; // type:object size:0x28 scope:global -_vt.21PostRacePursuitScreen = .rodata:0x803E93E0; // type:object size:0x28 scope:global -_vt.23PursuitResultsArraySlot = .rodata:0x803E9408; // type:object size:0x20 scope:global -_vt.19PursuitResultsDatum = .rodata:0x803E9428; // type:object size:0x20 scope:global -_vt.21PostRaceResultsScreen = .rodata:0x803E9448; // type:object size:0x28 scope:global -_vt.10StatsPanel = .rodata:0x803E9470; // type:object size:0x18 scope:global -_vt.13TollboothStat = .rodata:0x803E9488; // type:object size:0x80 scope:global -_vt.9SpeedStat = .rodata:0x803E9508; // type:object size:0x80 scope:global -_vt.9StageStat = .rodata:0x803E9588; // type:object size:0x80 scope:global -_vt.7LapStat = .rodata:0x803E9608; // type:object size:0x80 scope:global -_vt.14RaceResultStat = .rodata:0x803E9688; // type:object size:0x80 scope:global -_vt.13GenericResult = .rodata:0x803E9708; // type:object size:0x80 scope:global -_vt.9TimerStat = .rodata:0x803E9788; // type:object size:0x80 scope:global -_vt.11GenericStat = .rodata:0x803E9808; // type:object size:0x80 scope:global -_vt.8InfoStat = .rodata:0x803E9888; // type:object size:0x80 scope:global -_vt.8RaceStat = .rodata:0x803E9908; // type:object size:0x80 scope:global -_vt.17PhotoFinishScreen = .rodata:0x803E9988; // type:object size:0x28 scope:global -_vt.14MilestoneBoard.15IMilestoneBoard = .rodata:0x803E99B0; // type:object size:0x60 scope:global -_vt.14MilestoneBoard = .rodata:0x803E9A10; // type:object size:0x20 scope:global -_vt.11LeaderBoard.12ILeaderBoard = .rodata:0x803E9A30; // type:object size:0x70 scope:global -_vt.11LeaderBoard = .rodata:0x803E9AA0; // type:object size:0x20 scope:global -_vt.15RaceInformation.16IRaceInformation = .rodata:0x803E9AC0; // type:object size:0x60 scope:global -_vt.15RaceInformation = .rodata:0x803E9B20; // type:object size:0x20 scope:global -_vt.10WrongWIndi.9IWrongWay = .rodata:0x803E9B40; // type:object size:0x20 scope:global -_vt.10WrongWIndi = .rodata:0x803E9B60; // type:object size:0x20 scope:global -_vt.10Tachometer.11ITachometer = .rodata:0x803E9B80; // type:object size:0x40 scope:global -_vt.10Tachometer = .rodata:0x803E9BC0; // type:object size:0x20 scope:global -_vt.11Speedometer.12ISpeedometer = .rodata:0x803E9BE0; // type:object size:0x20 scope:global -_vt.11Speedometer = .rodata:0x803E9C00; // type:object size:0x20 scope:global -_vt.15EngineTempGauge.16IEngineTempGauge = .rodata:0x803E9C20; // type:object size:0x20 scope:global -_vt.15EngineTempGauge = .rodata:0x803E9C40; // type:object size:0x20 scope:global -_vt.17SpeedBreakerMeter.18ISpeedBreakerMeter = .rodata:0x803E9C60; // type:object size:0x20 scope:global -_vt.17SpeedBreakerMeter = .rodata:0x803E9C80; // type:object size:0x20 scope:global -_vt.12NitrousGauge.4INos = .rodata:0x803E9CA0; // type:object size:0x20 scope:global -_vt.12NitrousGauge = .rodata:0x803E9CC0; // type:object size:0x20 scope:global -_vt.16FEPackageManager = .rodata:0x803E9CE0; // type:object size:0x18 scope:global -_vt.13FEPackageData = .rodata:0x803E9CF8; // type:object size:0x18 scope:global -_vt.15RaceOverMessage.16IRaceOverMessage = .rodata:0x803E9D10; // type:object size:0x30 scope:global -_vt.15RaceOverMessage = .rodata:0x803E9D40; // type:object size:0x20 scope:global -_vt.14GenericMessage.15IGenericMessage = .rodata:0x803E9D60; // type:object size:0x38 scope:global -_vt.14GenericMessage = .rodata:0x803E9D98; // type:object size:0x20 scope:global -_vt.9Countdown.10ICountdown = .rodata:0x803E9DB8; // type:object size:0x30 scope:global -_vt.9Countdown = .rodata:0x803E9DE8; // type:object size:0x20 scope:global -_vt.7Minimap = .rodata:0x803E9E08; // type:object size:0x20 scope:global -_vt.18HudResourceManager = .rodata:0x803E9E28; // type:object size:0x18 scope:global -_vt.7FEngHud = .rodata:0x803E9E40; // type:object size:0x70 scope:global -_vt.12UIWidgetMenu = .rodata:0x803E9EB0; // type:object size:0x30 scope:global -_vt.17ArrayScrollerMenu.13ArrayScroller = .rodata:0x803E9EE0; // type:object size:0x28 scope:global -_vt.17ArrayScrollerMenu = .rodata:0x803E9F08; // type:object size:0x28 scope:global -_vt.13ArrayScroller = .rodata:0x803E9F30; // type:object size:0x28 scope:global -_vt.14ImageArraySlot = .rodata:0x803E9F58; // type:object size:0x20 scope:global -_vt.9ArraySlot = .rodata:0x803E9F78; // type:object size:0x20 scope:global -_vt.16IconScrollerMenu = .rodata:0x803E9F98; // type:object size:0x38 scope:global -_vt.12IconScroller = .rodata:0x803E9FD0; // type:object size:0x90 scope:global -_vt.16FEScrollyBookEnd = .rodata:0x803EA060; // type:object size:0x20 scope:global -_vt.9IconPanel = .rodata:0x803EA080; // type:object size:0x80 scope:global -_vt.14FESliderWidget = .rodata:0x803EA100; // type:object size:0x90 scope:global -_vt.14FEToggleWidget = .rodata:0x803EA190; // type:object size:0x88 scope:global -_vt.12FEStatWidget = .rodata:0x803EA218; // type:object size:0x80 scope:global -_vt.14FEButtonWidget = .rodata:0x803EA298; // type:object size:0x80 scope:global -_vt.14TwoStageSlider = .rodata:0x803EA318; // type:object size:0x70 scope:global -_vt.7cSlider = .rodata:0x803EA388; // type:object size:0x60 scope:global -_vt.10Reputation.11IReputation = .rodata:0x803EA3E8; // type:object size:0x28 scope:global -_vt.10Reputation = .rodata:0x803EA410; // type:object size:0x20 scope:global -_vt.11CostToState.12ICostToState = .rodata:0x803EA430; // type:object size:0x28 scope:global -_vt.11CostToState = .rodata:0x803EA458; // type:object size:0x20 scope:global -_vt.9HeatMeter.10IHeatMeter = .rodata:0x803EA478; // type:object size:0x28 scope:global -_vt.9HeatMeter = .rodata:0x803EA4A0; // type:object size:0x20 scope:global -_vt.Q213FEPlayerCarDB10MyCallback = .rodata:0x803EA4C0; // type:object size:0x20 scope:global -_vt.13RadarDetector.14IRadarDetector = .rodata:0x803EA4E0; // type:object size:0x30 scope:global -_vt.13RadarDetector = .rodata:0x803EA510; // type:object size:0x20 scope:global -_vt.12GetAwayMeter.13IGetAwayMeter = .rodata:0x803EA530; // type:object size:0x20 scope:global -_vt.12GetAwayMeter = .rodata:0x803EA550; // type:object size:0x20 scope:global -_vt.11ITachometer = .rodata:0x803EA570; // type:object size:0x40 scope:global -_vt.4IHud = .rodata:0x803EA5B0; // type:object size:0x70 scope:global -_vt.10MenuScreen = .rodata:0x803EA620; // type:object size:0x28 scope:global -_vt.10HudElement = .rodata:0x803EA648; // type:object size:0x20 scope:global -DriveConfigs = .rodata:0x803EA794; // type:object size:0x28 scope:local -HudConfigs = .rodata:0x803EA7BC; // type:object size:0x28 scope:local -FEKeyTypeSize = .rodata:0x803EA920; // type:object size:0x1C scope:global -FETrackOffsets = .rodata:0x803EAC10; // type:object size:0x2C scope:global -_vt.t10FEPoolNode2Z8FEScripti32 = .rodata:0x803EAE10; // type:object size:0x18 scope:global -_vt.13FESimpleImage = .rodata:0x803EAE28; // type:object size:0x20 scope:global -_vt.11FEAnimImage = .rodata:0x803EAE48; // type:object size:0x20 scope:global -_vt.22MouseStateArrayBuilder = .rodata:0x803EAE68; // type:object size:0x20 scope:global -_vt.23MouseStateObjectCounter = .rodata:0x803EAE88; // type:object size:0x20 scope:global -_vt.17ResourceConnector = .rodata:0x803EAEA8; // type:object size:0x20 scope:global -_vt.28MouseStateArrayOffsetUpdater = .rodata:0x803EAEC8; // type:object size:0x20 scope:global -_vt.12FEFindByGUID = .rodata:0x803EAEE8; // type:object size:0x20 scope:global -_vt.12FEFindByHash = .rodata:0x803EAF08; // type:object size:0x20 scope:global -_vt.7FEMovie = .rodata:0x803EAF28; // type:object size:0x20 scope:global -_vt.14FEColoredImage = .rodata:0x803EAF48; // type:object size:0x20 scope:global -_vt.10FESlotPool = .rodata:0x803EAF68; // type:object size:0x18 scope:global -_vt.10FESlotNode = .rodata:0x803EAF80; // type:object size:0x18 scope:global -_vt.12FEMultiImage = .rodata:0x803EAF98; // type:object size:0x20 scope:global -_vt.7FEImage = .rodata:0x803EAFB8; // type:object size:0x20 scope:global -_vt.13FEMessageNode = .rodata:0x803EAFD8; // type:object size:0x18 scope:global -_vt.16FEPackageCommand = .rodata:0x803EAFF0; // type:object size:0x18 scope:global -_vt.10FETypeNode = .rodata:0x803EB008; // type:object size:0x18 scope:global -_vt.11FEFieldNode = .rodata:0x803EB020; // type:object size:0x18 scope:global -_vt.t10FEPoolNode2Z17FEMessageResponsei64 = .rodata:0x803EB038; // type:object size:0x18 scope:global -_vt.t10FEPoolNode2Z9FEKeyNodei256 = .rodata:0x803EB050; // type:object size:0x18 scope:global -_vt.7FEGroup = .rodata:0x803EB068; // type:object size:0x20 scope:global -_vt.8FEString = .rodata:0x803EB088; // type:object size:0x20 scope:global -_vt.13FECodeListBox = .rodata:0x803EB0A8; // type:object size:0x20 scope:global -_vt.9FEListBox = .rodata:0x803EB0C8; // type:object size:0x20 scope:global -_vt.9FEPackage = .rodata:0x803EB0E8; // type:object size:0x18 scope:global -_vt.18PackageInitStateCB = .rodata:0x803EB100; // type:object size:0x20 scope:global -_vt.8FEObject = .rodata:0x803EB120; // type:object size:0x20 scope:global -_vt.17FEMessageResponse = .rodata:0x803EB140; // type:object size:0x18 scope:global -_vt.8FEScript = .rodata:0x803EB158; // type:object size:0x18 scope:global -_vt.9FEKeyNode = .rodata:0x803EB170; // type:object size:0x18 scope:global -_vt.9FERefList = .rodata:0x803EB188; // type:object size:0x18 scope:global -_vt.6FEList = .rodata:0x803EB1A0; // type:object size:0x18 scope:global -_vt.9FEMinList = .rodata:0x803EB1B8; // type:object size:0x18 scope:global -_vt.6FENode = .rodata:0x803EB1D0; // type:object size:0x18 scope:global -_vt.9FEMinNode = .rodata:0x803EB1E8; // type:object size:0x18 scope:global -_Q25UMath7Vector2.kZero = .rodata:0x803EB374; // type:object size:0x8 scope:global -_Q25UMath7Vector3.kZero = .rodata:0x803EB37C; // type:object size:0xC scope:global -_Q25UMath7Vector4.kZero = .rodata:0x803EB388; // type:object size:0x10 scope:global -_Q25UMath7Vector4.kIdentity = .rodata:0x803EB398; // type:object size:0x10 scope:global -_Q25UMath7Matrix4.kIdentity = .rodata:0x803EB3B0; // type:object size:0x40 scope:global -_vt.Q24CARP12CarpResolver = .rodata:0x803EB960; // type:object size:0x28 scope:global -_vt.Q26UGroup9Processor = .rodata:0x803EB988; // type:object size:0x28 scope:global -_Infinity_ = .rodata:0x803EB9B4; // type:object size:0x4 scope:local -fBezierBasisMat = .rodata:0x803EB9BC; // type:object size:0x40 scope:local -fCatRomBasisMat = .rodata:0x803EB9FC; // type:object size:0x40 scope:local -fBezierTanBasisMat = .rodata:0x803EBA3C; // type:object size:0x40 scope:local -fCatRomTanBasisMat = .rodata:0x803EBA7C; // type:object size:0x40 scope:local -fBezier2ndBasisMat = .rodata:0x803EBABC; // type:object size:0x40 scope:local -fCatRom2ndBasisMat = .rodata:0x803EBAFC; // type:object size:0x40 scope:local -_13GRaceDatabase.sDDayRaces = .rodata:0x803EC79C; // type:object size:0x28 scope:global -TWEAK_SpeedingLimit = .rodata:0x803ECF58; // type:object size:0x4 scope:global -TWEAK_RacingLimit = .rodata:0x803ECF5C; // type:object size:0x4 scope:global -TWEAK_RecklessDrivingLimit = .rodata:0x803ECF60; // type:object size:0x4 scope:global -_vt.27BlockLoadingAttribAllocator = .rodata:0x803ED020; // type:object size:0x28 scope:global -_vt.25PreloadingAttribAllocator = .rodata:0x803ED048; // type:object size:0x28 scope:global -_vt.10GCharacter.11IAttachable = .rodata:0x803ED070; // type:object size:0x48 scope:global -_vt.10GCharacter = .rodata:0x803ED0B8; // type:object size:0x20 scope:global -_vt.8GHandler = .rodata:0x803ED0D8; // type:object size:0x20 scope:global -_vt.6GState = .rodata:0x803ED0F8; // type:object size:0x20 scope:global -_vt.11GRaceStatus = .rodata:0x803ED118; // type:object size:0x30 scope:global -_vt.11GRaceCustom = .rodata:0x803ED148; // type:object size:0x28 scope:global -_vt.15GRaceParameters = .rodata:0x803ED170; // type:object size:0x28 scope:global -_vt.9GActivity = .rodata:0x803ED198; // type:object size:0x20 scope:global -_vt.22LuaMessageDeliveryInfo = .rodata:0x803ED1B8; // type:object size:0x38 scope:global -_vt.8GTrigger = .rodata:0x803ED1F0; // type:object size:0x20 scope:global -_vt.7GMarker = .rodata:0x803ED210; // type:object size:0x20 scope:global -_vt.8GManager = .rodata:0x803ED230; // type:object size:0x30 scope:global -_vt.16GRuntimeInstance = .rodata:0x803ED260; // type:object size:0x20 scope:global -Tweak_GlueSpreadData_Low = .rodata:0x803ED2AC; // type:object size:0x14 scope:local -Tweak_GlueSpreadData_High = .rodata:0x803ED2C0; // type:object size:0x14 scope:local -Tweak_GlueStrengthData_Low = .rodata:0x803ED2D4; // type:object size:0x14 scope:local -Tweak_GlueStrengthData_High = .rodata:0x803ED2E8; // type:object size:0x14 scope:local -Tweak_QuickRaceGlue = .rodata:0x803ED2FC; // type:object size:0xC scope:local -_vt.22LoggingAttribAllocator = .rodata:0x803ED308; // type:object size:0x28 scope:global -luaO_nilobject = .rodata:0x803EEF1C; // type:object size:0x8 scope:global -log_8.33993 = .rodata:0x803EEF24; // type:object size:0xFF scope:local -luaP_opmodes = .rodata:0x803EF048; // type:object size:0x23 scope:global -luaT_typenames = .rodata:0x803EF128; // type:object size:0x24 scope:global -luaT_eventname.34129 = .rodata:0x803EF1B0; // type:object size:0x3C scope:local -_vt.10GameDevice.9IFeedback = .rodata:0x803F2520; // type:object size:0x88 scope:global -_vt.10GameDevice = .rodata:0x803F25A8; // type:object size:0x80 scope:global -_vt.19SteeringWheelDevice = .rodata:0x803F2628; // type:object size:0x38 scope:global -_vt.Q214EventSequencer6Engine = .rodata:0x803F2660; // type:object size:0xD0 scope:global -_vt.11EWorldMapOn = .rodata:0x803F2730; // type:object size:0x20 scope:global -_vt.12EWorldMapOff = .rodata:0x803F2750; // type:object size:0x20 scope:global -_vt.11EWakeObject = .rodata:0x803F2770; // type:object size:0x20 scope:global -_vt.13EVehicleReset = .rodata:0x803F2790; // type:object size:0x20 scope:global -_vt.17EVehicleDestroyed = .rodata:0x803F27B0; // type:object size:0x20 scope:global -_vt.8EUnPause = .rodata:0x803F27D0; // type:object size:0x20 scope:global -_vt.12ETuneVehicle = .rodata:0x803F27F0; // type:object size:0x20 scope:global -_vt.17ETriggerMomentNIS = .rodata:0x803F2810; // type:object size:0x20 scope:global -_vt.14ETirePunctured = .rodata:0x803F2830; // type:object size:0x20 scope:global -_vt.10ETireBlown = .rodata:0x803F2850; // type:object size:0x20 scope:global -_vt.5ETips = .rodata:0x803F2870; // type:object size:0x20 scope:global -_vt.15ETerminateMusic = .rodata:0x803F2890; // type:object size:0x20 scope:global -_vt.18EStopObjectEffects = .rodata:0x803F28B0; // type:object size:0x20 scope:global -_vt.17EStopObjectEffect = .rodata:0x803F28D0; // type:object size:0x20 scope:global -_vt.15ESpawnSmackable = .rodata:0x803F28F0; // type:object size:0x20 scope:global -_vt.14ESpawnFragment = .rodata:0x803F2910; // type:object size:0x20 scope:global -_vt.15ESpawnExplosion = .rodata:0x803F2930; // type:object size:0x20 scope:global -_vt.9ESimulate = .rodata:0x803F2950; // type:object size:0x20 scope:global -_vt.18EShowTimeExtension = .rodata:0x803F2970; // type:object size:0x20 scope:global -_vt.8EShowSMS = .rodata:0x803F2990; // type:object size:0x20 scope:global -_vt.12EShowResults = .rodata:0x803F29B0; // type:object size:0x20 scope:global -_vt.18EShowRaceCountdown = .rodata:0x803F29D0; // type:object size:0x20 scope:global -_vt.15EShowMilestones = .rodata:0x803F29F0; // type:object size:0x20 scope:global -_vt.18EShowMessageScreen = .rodata:0x803F2A10; // type:object size:0x20 scope:global -_vt.20EShowMarketingScreen = .rodata:0x803F2A30; // type:object size:0x20 scope:global -_vt.12EShockObject = .rodata:0x803F2A50; // type:object size:0x20 scope:global -_vt.11ESetSimRate = .rodata:0x803F2A70; // type:object size:0x20 scope:global -_vt.24ESetPlayerCollisionCache = .rodata:0x803F2A90; // type:object size:0x20 scope:global -_vt.18ESetPlayerCarReset = .rodata:0x803F2AB0; // type:object size:0x20 scope:global -_vt.20ESetCopAutoSpawnMode = .rodata:0x803F2AD0; // type:object size:0x20 scope:global -_vt.14EScheduleEvent = .rodata:0x803F2AF0; // type:object size:0x20 scope:global -_vt.20EScheduleEventUpdate = .rodata:0x803F2B10; // type:object size:0x20 scope:global -_vt.24Schedule_OncePerGameLoop = .rodata:0x803F2B30; // type:object size:0x20 scope:global -_vt.23Schedule_QuarterSimRate = .rodata:0x803F2B50; // type:object size:0x20 scope:global -_vt.20Schedule_HalfSimRate = .rodata:0x803F2B70; // type:object size:0x20 scope:global -_vt.16Schedule_SimRate = .rodata:0x803F2B90; // type:object size:0x20 scope:global -_vt.8Schedule = .rodata:0x803F2BB0; // type:object size:0x20 scope:global -_vt.12ERestartRace = .rodata:0x803F2BD0; // type:object size:0x20 scope:global -_vt.12EResetSystem = .rodata:0x803F2BF0; // type:object size:0x20 scope:global -_vt.15EResetSequencer = .rodata:0x803F2C10; // type:object size:0x20 scope:global -_vt.11EResetProps = .rodata:0x803F2C30; // type:object size:0x20 scope:global -_vt.15EResetPlayerCar = .rodata:0x803F2C50; // type:object size:0x20 scope:global -_vt.23ERequestEventInfoDialog = .rodata:0x803F2C70; // type:object size:0x20 scope:global -_vt.23EReportMilestoneAtStake = .rodata:0x803F2C90; // type:object size:0x20 scope:global -_vt.17EReportInfraction = .rodata:0x803F2CB0; // type:object size:0x20 scope:global -_vt.10EReloadHud = .rodata:0x803F2CD0; // type:object size:0x20 scope:global -_vt.11EReloadGame = .rodata:0x803F2CF0; // type:object size:0x20 scope:global -_vt.16ERandomExplosion = .rodata:0x803F2D10; // type:object size:0x20 scope:global -_vt.16ERandomEventList = .rodata:0x803F2D30; // type:object size:0x20 scope:global -_vt.12ERaceSheetOn = .rodata:0x803F2D50; // type:object size:0x20 scope:global -_vt.13ERaceSheetOff = .rodata:0x803F2D70; // type:object size:0x20 scope:global -_vt.9EQuitDemo = .rodata:0x803F2D90; // type:object size:0x20 scope:global -_vt.9EQuitToFE = .rodata:0x803F2DB0; // type:object size:0x20 scope:global -_vt.15EPursuitBreaker = .rodata:0x803F2DD0; // type:object size:0x20 scope:global -_vt.20EProcessAreaStimulus = .rodata:0x803F2DF0; // type:object size:0x20 scope:global -_vt.16EProcessStimulus = .rodata:0x803F2E10; // type:object size:0x20 scope:global -_vt.14EPlayRaceMovie = .rodata:0x803F2E30; // type:object size:0x20 scope:global -_vt.17EPlayObjectEffect = .rodata:0x803F2E50; // type:object size:0x20 scope:global -_vt.19EPlayerTriggeredNOS = .rodata:0x803F2E70; // type:object size:0x20 scope:global -_vt.12EPlayerShift = .rodata:0x803F2E90; // type:object size:0x20 scope:global -_vt.15EPlayerAirborne = .rodata:0x803F2EB0; // type:object size:0x20 scope:global -_vt.11EPlayEndNIS = .rodata:0x803F2ED0; // type:object size:0x20 scope:global -_vt.12EPlayRaceNIS = .rodata:0x803F2EF0; // type:object size:0x20 scope:global -_vt.13EPerfectShift = .rodata:0x803F2F10; // type:object size:0x20 scope:global -_vt.14EPerfectLaunch = .rodata:0x803F2F30; // type:object size:0x20 scope:global -_vt.6EPause = .rodata:0x803F2F50; // type:object size:0x20 scope:global -_vt.20ENISWorldAnimTrigger = .rodata:0x803F2F70; // type:object size:0x20 scope:global -_vt.17ENISWolrdGeometry = .rodata:0x803F2F90; // type:object size:0x20 scope:global -_vt.14ENISVisualLook = .rodata:0x803F2FB0; // type:object size:0x20 scope:global -_vt.13ENISTimeOfDay = .rodata:0x803F2FD0; // type:object size:0x20 scope:global -_vt.15ENISStopEffects = .rodata:0x803F2FF0; // type:object size:0x20 scope:global -_vt.12ENISSteering = .rodata:0x803F3010; // type:object size:0x20 scope:global -_vt.15ENISScreenFlash = .rodata:0x803F3030; // type:object size:0x20 scope:global -_vt.13ENISRoadNoise = .rodata:0x803F3050; // type:object size:0x20 scope:global -_vt.12ENISReattach = .rodata:0x803F3070; // type:object size:0x20 scope:global -_vt.8ENISRain = .rodata:0x803F3090; // type:object size:0x20 scope:global -_vt.14ENISPlayEffect = .rodata:0x803F30B0; // type:object size:0x20 scope:global -_vt.12ENISPixelate = .rodata:0x803F30D0; // type:object size:0x20 scope:global -_vt.18ENISOverlayMessage = .rodata:0x803F30F0; // type:object size:0x20 scope:global -_vt.13ENISNukeSmack = .rodata:0x803F3110; // type:object size:0x20 scope:global -_vt.9ENISNitro = .rodata:0x803F3130; // type:object size:0x20 scope:global -_vt.14ENISNeutralRev = .rodata:0x803F3150; // type:object size:0x20 scope:global -_vt.14ENISMotionBlur = .rodata:0x803F3170; // type:object size:0x20 scope:global -_vt.10ENISLights = .rodata:0x803F3190; // type:object size:0x20 scope:global -_vt.17ENISHideCharacter = .rodata:0x803F31B0; // type:object size:0x20 scope:global -_vt.10ENISFreeze = .rodata:0x803F31D0; // type:object size:0x20 scope:global -_vt.11ENISFakeFar = .rodata:0x803F31F0; // type:object size:0x20 scope:global -_vt.10ENISDetail = .rodata:0x803F3210; // type:object size:0x20 scope:global -_vt.10ENISDetach = .rodata:0x803F3230; // type:object size:0x20 scope:global -_vt.13ENISCopLights = .rodata:0x803F3250; // type:object size:0x20 scope:global -_vt.15ENISCopCarDoors = .rodata:0x803F3270; // type:object size:0x20 scope:global -_vt.14ENISConstraint = .rodata:0x803F3290; // type:object size:0x20 scope:global -_vt.12ENISCarShake = .rodata:0x803F32B0; // type:object size:0x20 scope:global -_vt.11ENISCarRoll = .rodata:0x803F32D0; // type:object size:0x20 scope:global -_vt.12ENISCarPitch = .rodata:0x803F32F0; // type:object size:0x20 scope:global -_vt.18ENISCarDamageReset = .rodata:0x803F3310; // type:object size:0x20 scope:global -_vt.11ENISBurnout = .rodata:0x803F3330; // type:object size:0x20 scope:global -_vt.13ENISBrakelock = .rodata:0x803F3350; // type:object size:0x20 scope:global -_vt.16ENISAeroDynamics = .rodata:0x803F3370; // type:object size:0x20 scope:global -_vt.11EMomentStrm = .rodata:0x803F3390; // type:object size:0x20 scope:global -_vt.10EMissShift = .rodata:0x803F33B0; // type:object size:0x20 scope:global -_vt.9ELoadLost = .rodata:0x803F33D0; // type:object size:0x20 scope:global -_vt.16ELoadingScreenOn = .rodata:0x803F33F0; // type:object size:0x20 scope:global -_vt.17ELoadingScreenOff = .rodata:0x803F3410; // type:object size:0x20 scope:global -_vt.14EKnockoutRacer = .rodata:0x803F3430; // type:object size:0x20 scope:global -_vt.11EKillObject = .rodata:0x803F3450; // type:object size:0x20 scope:global -_vt.10EKillJoint = .rodata:0x803F3470; // type:object size:0x20 scope:global -_vt.19EJumpToStrategyFlow = .rodata:0x803F3490; // type:object size:0x20 scope:global -_vt.14EJointDetached = .rodata:0x803F34B0; // type:object size:0x20 scope:global -_vt.20EHideRaceOverMessage = .rodata:0x803F34D0; // type:object size:0x20 scope:global -_vt.9EHidePart = .rodata:0x803F34F0; // type:object size:0x20 scope:global -_vt.11EHideObject = .rodata:0x803F3510; // type:object size:0x20 scope:global -_vt.17EGTriggerInternal = .rodata:0x803F3530; // type:object size:0x20 scope:global -_vt.8EGPSLost = .rodata:0x803F3550; // type:object size:0x20 scope:global -_vt.12EGPSFinished = .rodata:0x803F3570; // type:object size:0x20 scope:global -_vt.13EForceCarStop = .rodata:0x803F3590; // type:object size:0x20 scope:global -_vt.26EFireTriggerSpeedCondition = .rodata:0x803F35B0; // type:object size:0x20 scope:global -_vt.18EFireRandomTrigger = .rodata:0x803F35D0; // type:object size:0x20 scope:global -_vt.14EFireEventList = .rodata:0x803F35F0; // type:object size:0x20 scope:global -_vt.13EFadeScreenOn = .rodata:0x803F3610; // type:object size:0x20 scope:global -_vt.14EFadeScreenOff = .rodata:0x803F3630; // type:object size:0x20 scope:global -_vt.25EFadeScreenNoLoadingBarOn = .rodata:0x803F3650; // type:object size:0x20 scope:global -_vt.26EFadeScreenNoLoadingBarOff = .rodata:0x803F3670; // type:object size:0x20 scope:global -_vt.21EExitEngagableTrigger = .rodata:0x803F3690; // type:object size:0x20 scope:global -_vt.22EEnterEngagableTrigger = .rodata:0x803F36B0; // type:object size:0x20 scope:global -_vt.9EEnterBin = .rodata:0x803F36D0; // type:object size:0x20 scope:global -_vt.12EEngineBlown = .rodata:0x803F36F0; // type:object size:0x20 scope:global -_vt.20EShowRaceOverMessage = .rodata:0x803F3710; // type:object size:0x20 scope:global -_vt.11EEndCarStop = .rodata:0x803F3730; // type:object size:0x20 scope:global -_vt.14EEnableTrigger = .rodata:0x803F3750; // type:object size:0x20 scope:global -_vt.15EEnableModeling = .rodata:0x803F3770; // type:object size:0x20 scope:global -_vt.23EEnableCollisionElement = .rodata:0x803F3790; // type:object size:0x20 scope:global -_vt.16EEnableAIPhysics = .rodata:0x803F37B0; // type:object size:0x20 scope:global -_vt.14EDynamicRegion = .rodata:0x803F37D0; // type:object size:0x20 scope:global -_vt.14EDispIntroRace = .rodata:0x803F37F0; // type:object size:0x20 scope:global -_vt.15EDisableTrigger = .rodata:0x803F3810; // type:object size:0x20 scope:global -_vt.22EDisablePursuitVehicle = .rodata:0x803F3830; // type:object size:0x20 scope:global -_vt.15EDestroyVehicle = .rodata:0x803F3850; // type:object size:0x20 scope:global -_vt.15EDeliverMessage = .rodata:0x803F3870; // type:object size:0x20 scope:global -_vt.19EDebugScreenMessage = .rodata:0x803F3890; // type:object size:0x20 scope:global -_vt.11EDebugPrint = .rodata:0x803F38B0; // type:object size:0x20 scope:global -_vt.11EDDaySpeech = .rodata:0x803F38D0; // type:object size:0x20 scope:global -_vt.13EDamageLights = .rodata:0x803F38F0; // type:object size:0x20 scope:global -_vt.19ECommitRenderAssets = .rodata:0x803F3910; // type:object size:0x20 scope:global -_vt.18ECommitAudioAssets = .rodata:0x803F3930; // type:object size:0x20 scope:global -_vt.10ECollision = .rodata:0x803F3950; // type:object size:0x20 scope:global -_vt.16ECinematicMoment = .rodata:0x803F3970; // type:object size:0x20 scope:global -_vt.12EChangeState = .rodata:0x803F3990; // type:object size:0x20 scope:global -_vt.Q214EventSequencer7IEngine = .rodata:0x803F39B0; // type:object size:0xD0 scope:global -_vt.9ECellCall = .rodata:0x803F3A80; // type:object size:0x20 scope:global -_vt.13ESndGameState = .rodata:0x803F3AA0; // type:object size:0x20 scope:global -_vt.12ECameraShake = .rodata:0x803F3AC0; // type:object size:0x20 scope:global -_vt.18ECameraPhotoFinish = .rodata:0x803F3AE0; // type:object size:0x20 scope:global -_vt.16EBreakerStopCops = .rodata:0x803F3B00; // type:object size:0x20 scope:global -_vt.17EBecomePursuitCar = .rodata:0x803F3B20; // type:object size:0x20 scope:global -_vt.16EBecomePlayerCar = .rodata:0x803F3B40; // type:object size:0x20 scope:global -_vt.12EBecomeAiCar = .rodata:0x803F3B60; // type:object size:0x20 scope:global -_vt.12EBailPursuit = .rodata:0x803F3B80; // type:object size:0x20 scope:global -_vt.13EAwardUpgrade = .rodata:0x803F3BA0; // type:object size:0x20 scope:global -_vt.9EAutoSave = .rodata:0x803F3BC0; // type:object size:0x20 scope:global -_vt.15EAudioWorldTest = .rodata:0x803F3BE0; // type:object size:0x20 scope:global -_vt.19EAudioSmackableTest = .rodata:0x803F3C00; // type:object size:0x20 scope:global -_vt.19EAudioRigidBodyTest = .rodata:0x803F3C20; // type:object size:0x20 scope:global -_vt.12EAIEngineRev = .rodata:0x803F3C40; // type:object size:0x20 scope:global -_vt.Q29WorldConn13Pkt_Body_Send = .rodata:0x803F3C60; // type:object size:0x40 scope:global -_vt.7EAddSMS = .rodata:0x803F3CA0; // type:object size:0x20 scope:global -_vt.11EAccelerate = .rodata:0x803F3CC0; // type:object size:0x20 scope:global -_vt.11InputDevice = .rodata:0x803F3CE0; // type:object size:0x80 scope:global -_vt.8E911Call = .rodata:0x803F3D60; // type:object size:0x20 scope:global -_vt.5Event = .rodata:0x803F3D80; // type:object size:0x20 scope:global -gEventKeyOrderTable = .rodata:0x803F3EB8; // type:object size:0x284 scope:local -device_infos = .rodata:0x803F424C; // type:object size:0x2E4 scope:local -_5Query.gQueryKeyOrderTable = .rodata:0x803F4530; // type:object size:0x4 scope:local -_vt.Q26Attrib24UpgradeSpecs_TypeHandler = .rodata:0x803F4538; // type:object size:0x30 scope:global -_vt.Q26Attrib32TrafficPatternRecord_TypeHandler = .rodata:0x803F4568; // type:object size:0x30 scope:global -_vt.Q26Attrib28TireEffectRecord_TypeHandler = .rodata:0x803F4598; // type:object size:0x30 scope:global -_vt.Q26Attrib31EffectLinkageRecord_TypeHandler = .rodata:0x803F45C8; // type:object size:0x30 scope:global -_vt.Q26Attrib27CollisionStream_TypeHandler = .rodata:0x803F45F8; // type:object size:0x30 scope:global -_vt.Q26Attrib26Attrib_RefSpec_TypeHandler = .rodata:0x803F4628; // type:object size:0x30 scope:global -_vt.Q26Attrib37AICollisionReactionRecord_TypeHandler = .rodata:0x803F4658; // type:object size:0x30 scope:global -_vt.Q43UTL11Collectionst12Instanceable3ZPQ214EventSequencer9HENGINE__ZQ214EventSequencer7IEnginei434_5_List = .rodata:0x803F4688; // type:object size:0x40 scope:global -_vt.Q43UTL11Collectionst8Listable2Z11ActionQueuei20_4List = .rodata:0x803F46C8; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei434i16 = .rodata:0x803F4778; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP11ActionQueuei20i16 = .rodata:0x803F47B8; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP11ActionQueuei16 = .rodata:0x803F47F8; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZQ33UTL11Collections10_KeyedNodei16 = .rodata:0x803F4838; // type:object size:0x40 scope:global -_vt.16DisculatorDriver = .rodata:0x803F64F0; // type:object size:0x80 scope:global -_vt.15HighAttribAlloc = .rodata:0x803F6570; // type:object size:0x20 scope:global -_vt.10EasterEggs = .rodata:0x803F6590; // type:object size:0x18 scope:global -_vt.13AverageWindow = .rodata:0x803F65A8; // type:object size:0x20 scope:global -_vt.7Average = .rodata:0x803F65C8; // type:object size:0x20 scope:global -fShakeIntensityCoeffs = .rodata:0x803F6638; // type:object size:0x18 scope:local -fCutiePetootieX = .rodata:0x803F6650; // type:object size:0x4 scope:local -fCutiePetootieY = .rodata:0x803F6654; // type:object size:0x4 scope:local -fCutiePetootieZ = .rodata:0x803F6658; // type:object size:0x4 scope:local -_vt.Q28RealFile12DeviceDriver = .rodata:0x803F6660; // type:object size:0x80 scope:global -_vt.22DefaultAttribAllocator = .rodata:0x803F66E0; // type:object size:0x20 scope:global -_vt.21VaultGarbageCollector = .rodata:0x803F6700; // type:object size:0x18 scope:global -_vt.20FileGarbageCollector = .rodata:0x803F6718; // type:object size:0x18 scope:global -_vt.12SceneryModel.13ISceneryModel = .rodata:0x803F7758; // type:object size:0x40 scope:global -_vt.12SceneryModel.17ITriggerableModel = .rodata:0x803F7798; // type:object size:0x20 scope:global -_vt.12SceneryModel.5IBody = .rodata:0x803F77B8; // type:object size:0x48 scope:global -_vt.12SceneryModel.Q214EventSequencer8IContext = .rodata:0x803F7800; // type:object size:0x20 scope:global -_vt.12SceneryModel.6IModel = .rodata:0x803F7820; // type:object size:0x110 scope:global -_vt.12SceneryModel.11IAttachable = .rodata:0x803F7930; // type:object size:0x48 scope:global -_vt.12SceneryModel.Q23Sim9ITaskable = .rodata:0x803F7978; // type:object size:0x20 scope:global -_vt.12SceneryModel = .rodata:0x803F7998; // type:object size:0x58 scope:global -_vt.16PlaceableScenery.17ITriggerableModel = .rodata:0x803F79F0; // type:object size:0x20 scope:global -_vt.16PlaceableScenery.5IBody = .rodata:0x803F7A10; // type:object size:0x48 scope:global -_vt.16PlaceableScenery.Q214EventSequencer8IContext = .rodata:0x803F7A58; // type:object size:0x20 scope:global -_vt.16PlaceableScenery.11IAttachable = .rodata:0x803F7A78; // type:object size:0x48 scope:global -_vt.16PlaceableScenery.Q23Sim9ITaskable = .rodata:0x803F7AC0; // type:object size:0x20 scope:global -_vt.16PlaceableScenery.6IModel = .rodata:0x803F7AE0; // type:object size:0x110 scope:global -_vt.16PlaceableScenery = .rodata:0x803F7BF0; // type:object size:0x58 scope:global -_vt.16PlaceableScenery.17IPlaceableScenery = .rodata:0x803F7C48; // type:object size:0x30 scope:global -_vt.14HeirarchyModel.17ITriggerableModel = .rodata:0x803F7C78; // type:object size:0x20 scope:global -_vt.14HeirarchyModel.5IBody = .rodata:0x803F7C98; // type:object size:0x48 scope:global -_vt.14HeirarchyModel.Q214EventSequencer8IContext = .rodata:0x803F7CE0; // type:object size:0x20 scope:global -_vt.14HeirarchyModel.6IModel = .rodata:0x803F7D00; // type:object size:0x110 scope:global -_vt.14HeirarchyModel.11IAttachable = .rodata:0x803F7E10; // type:object size:0x48 scope:global -_vt.14HeirarchyModel.Q23Sim9ITaskable = .rodata:0x803F7E58; // type:object size:0x20 scope:global -_vt.14HeirarchyModel = .rodata:0x803F7E78; // type:object size:0x58 scope:global -_vt.18SmackableAvoidable = .rodata:0x803F7ED0; // type:object size:0x20 scope:global -_vt.Q210RenderConn18Pkt_Smackable_Open = .rodata:0x803F7EF0; // type:object size:0x40 scope:global -_vt.11RBSmackable.Q217CollisionGeometry10IBoundable = .rodata:0x803F7F30; // type:object size:0x30 scope:global -_vt.11RBSmackable.15IDynamicsEntity = .rodata:0x803F7F60; // type:object size:0x18 scope:global -_vt.11RBSmackable.14ICollisionBody = .rodata:0x803F7F78; // type:object size:0x160 scope:global -_vt.11RBSmackable.10IRigidBody = .rodata:0x803F80D8; // type:object size:0x168 scope:global -_vt.11RBSmackable.Q23Sim9ITaskable = .rodata:0x803F8240; // type:object size:0x20 scope:global -_vt.11RBSmackable = .rodata:0x803F8260; // type:object size:0xC0 scope:global -_vt.9Smackable.5IBody = .rodata:0x803F8320; // type:object size:0x48 scope:global -_vt.9Smackable.11IAttachable = .rodata:0x803F8368; // type:object size:0x48 scope:global -_vt.9Smackable = .rodata:0x803F83B0; // type:object size:0x50 scope:global -_vt.9Smackable.Q23Sim9ITaskable = .rodata:0x803F8400; // type:object size:0x20 scope:global -_vt.9Smackable.12IExplodeable = .rodata:0x803F8420; // type:object size:0x20 scope:global -_vt.9Smackable.Q214EventSequencer8IContext = .rodata:0x803F8440; // type:object size:0x20 scope:global -_vt.9Smackable.8ISimable = .rodata:0x803F8460; // type:object size:0x130 scope:global -_vt.9Smackable.11IRenderable = .rodata:0x803F8590; // type:object size:0x48 scope:global -_vt.9Smackable.11IDisposable = .rodata:0x803F85D8; // type:object size:0x20 scope:global -_vt.9Smackable.Q33Sim9Collision9IListener = .rodata:0x803F85F8; // type:object size:0x18 scope:global -_vt.Q29Smackable7Manager.11IAttachable = .rodata:0x803F8610; // type:object size:0x48 scope:global -_vt.Q29Smackable7Manager.Q23Sim9IActivity = .rodata:0x803F8658; // type:object size:0x38 scope:global -_vt.Q29Smackable7Manager.Q23Sim9ITaskable = .rodata:0x803F8690; // type:object size:0x20 scope:global -_vt.Q29Smackable7Manager = .rodata:0x803F86B0; // type:object size:0x20 scope:global -_vt.8PVehicle.14IAttributeable = .rodata:0x803F86D0; // type:object size:0x18 scope:global -_vt.8PVehicle.12IExplodeable = .rodata:0x803F86E8; // type:object size:0x20 scope:global -_vt.8PVehicle.Q214EventSequencer8IContext = .rodata:0x803F8708; // type:object size:0x20 scope:global -_vt.8PVehicle.8IVehicle = .rodata:0x803F8728; // type:object size:0x1C8 scope:global -_vt.8PVehicle.11IAttachable = .rodata:0x803F88F0; // type:object size:0x48 scope:global -_vt.8PVehicle.5IBody = .rodata:0x803F8938; // type:object size:0x48 scope:global -_vt.8PVehicle.8ISimable = .rodata:0x803F8980; // type:object size:0x130 scope:global -_vt.8PVehicle.Q23Sim9ITaskable = .rodata:0x803F8AB0; // type:object size:0x20 scope:global -_vt.8PVehicle = .rodata:0x803F8AD0; // type:object size:0x40 scope:global -_vt.Q28PVehicle14ManagementList = .rodata:0x803F8B10; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZQ28PVehicle10ManageNodei10i16 = .rodata:0x803F8B50; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZQ28PVehicle10ManageNodei16 = .rodata:0x803F8B90; // type:object size:0x40 scope:global -_vt.Q29WorldConn13Pkt_Body_Open = .rodata:0x803F8BD0; // type:object size:0x40 scope:global -_vt.9Explosion.11IAttachable = .rodata:0x803F8C10; // type:object size:0x48 scope:global -_vt.9Explosion.5IBody = .rodata:0x803F8C58; // type:object size:0x48 scope:global -_vt.9Explosion.Q23Sim9ITaskable = .rodata:0x803F8CA0; // type:object size:0x20 scope:global -_vt.9Explosion = .rodata:0x803F8CC0; // type:object size:0x38 scope:global -_vt.9Explosion.8ISimable = .rodata:0x803F8CF8; // type:object size:0x130 scope:global -_vt.9Explosion.10IExplosion = .rodata:0x803F8E28; // type:object size:0x60 scope:global -_vt.15VehicleBehavior.Q23Sim9ITaskable = .rodata:0x803F8E88; // type:object size:0x20 scope:global -_vt.15VehicleBehavior = .rodata:0x803F8EA8; // type:object size:0x60 scope:global -_vt.13PhysicsObject.11IAttachable = .rodata:0x803F8F08; // type:object size:0x48 scope:global -_vt.13PhysicsObject.5IBody = .rodata:0x803F8F50; // type:object size:0x48 scope:global -_vt.13PhysicsObject.8ISimable = .rodata:0x803F8F98; // type:object size:0x130 scope:global -_vt.13PhysicsObject.Q23Sim9ITaskable = .rodata:0x803F90C8; // type:object size:0x20 scope:global -_vt.13PhysicsObject = .rodata:0x803F90E8; // type:object size:0x38 scope:global -_vt.Q214EventSequencer8IContext = .rodata:0x803F9120; // type:object size:0x20 scope:global -_vt.11IDisposable = .rodata:0x803F9140; // type:object size:0x20 scope:global -_vt.5IBody = .rodata:0x803F9160; // type:object size:0x48 scope:global -_vt.8IVehicle = .rodata:0x803F91A8; // type:object size:0x1C8 scope:global -_vt.10IExplosion = .rodata:0x803F9370; // type:object size:0x60 scope:global -_vt.12IExplodeable = .rodata:0x803F93D0; // type:object size:0x20 scope:global -_vt.11IRenderable = .rodata:0x803F93F0; // type:object size:0x48 scope:global -_vt.17ITriggerableModel = .rodata:0x803F9438; // type:object size:0x20 scope:global -_vt.8ISimable = .rodata:0x803F9458; // type:object size:0x130 scope:global -TuningLimits = .rodata:0x803F9804; // type:object size:0x38 scope:local -_vt.Q43UTL11Collectionst8Listable2Z9Smackablei160_4List = .rodata:0x803F9840; // type:object size:0x40 scope:global -_vt.Q33UTL11Collectionst8_Storage2ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei160 = .rodata:0x803F9880; // type:object size:0x40 scope:global -_vt.Q43UTL11Collectionst8Listable2Z4IHudi2_4List = .rodata:0x803F98C0; // type:object size:0x40 scope:global -_vt.Q43UTL11Collectionst8Listable2Z10ISpikeablei10_4List = .rodata:0x803F9900; // type:object size:0x40 scope:global -_vt.Q43UTL11Collectionst8Listable2Z17IRecordablePlayeri8_4List = .rodata:0x803F9940; // type:object size:0x40 scope:global -_vt.17IPlaceableScenery = .rodata:0x803F9980; // type:object size:0x30 scope:global -_vt.Q43UTL11Collectionst8Listable2Z11IDisposablei160_4List = .rodata:0x803F99B0; // type:object size:0x40 scope:global -_vt.Q43UTL11Collectionst8Listable2Z14ITrafficCenteri8_4List = .rodata:0x803F99F0; // type:object size:0x40 scope:global -_vt.Q43UTL11Collectionst8Listable2Z10IRoadBlocki8_4List = .rodata:0x803F9A30; // type:object size:0x40 scope:global -_vt.Q43UTL11Collectionst8Listable2Z8IPursuiti8_4List = .rodata:0x803F9A70; // type:object size:0x40 scope:global -_vt.Q43UTL11Collectionst12Instanceable3ZP8HCAUSE__Z6ICausei10_5_List = .rodata:0x803F9AB0; // type:object size:0x40 scope:global -_vt.Q43UTL11Collectionst8Listable2Z10IRigidBodyi160_4List = .rodata:0x803F9AF0; // type:object size:0x40 scope:global -_vt.Q43UTL11Collectionst8Listable2Z11ISimpleBodyi96_4List = .rodata:0x803F9B30; // type:object size:0x40 scope:global -_vt.Q43UTL11Collectionst8Listable2Z14ICollisionBodyi160_4List = .rodata:0x803F9B70; // type:object size:0x40 scope:global -_vt.Q43UTL11Collectionst8Listable2Z13IVehicleCachei18_4List = .rodata:0x803F9BB0; // type:object size:0x40 scope:global -_vt.Q43UTL11Collectionst8Listable2Z12IInputPlayeri8_4List = .rodata:0x803F9BF0; // type:object size:0x40 scope:global -_vt.Q43UTL11Collectionst8Listable2Z10IExplosioni96_4List = .rodata:0x803F9C30; // type:object size:0x40 scope:global -_vt.Q43UTL11Collectionst8Listable2Z6IModeli434_4List = .rodata:0x803F9C70; // type:object size:0x40 scope:global -_vt.Q43UTL11Collectionst12Instanceable3ZP8HMODEL__Z6IModeli434_5_List = .rodata:0x803F9CB0; // type:object size:0x40 scope:global -_vt.Q43UTL11Collectionst12Instanceable3ZP11HACTIVITY__ZQ23Sim9IActivityi40_5_List = .rodata:0x803F9CF0; // type:object size:0x40 scope:global -_vt.Q43UTL11Collectionst11ListableSet4ZQ23Sim7IEntityi8Z11eEntityListUi4_4List = .rodata:0x803F9D30; // type:object size:0x40 scope:global -_vt.Q43UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3_4List = .rodata:0x803F9D70; // type:object size:0x40 scope:global -_vt.Q43UTL11Collectionst12Instanceable3ZP10HSIMABLE__Z8ISimablei160_5_List = .rodata:0x803F9DB0; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP9Smackablei160i16 = .rodata:0x803F9DF0; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP9Smackablei16 = .rodata:0x803F9E30; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei160i16 = .rodata:0x803F9E70; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei16 = .rodata:0x803F9EB0; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP4IHudi2i16 = .rodata:0x803F9EF0; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP4IHudi16 = .rodata:0x803F9F30; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP10ISpikeablei10i16 = .rodata:0x803F9F70; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP10ISpikeablei16 = .rodata:0x803F9FB0; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP17IRecordablePlayeri8i16 = .rodata:0x803F9FF0; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP17IRecordablePlayeri16 = .rodata:0x803FA030; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP11IDisposablei160i16 = .rodata:0x803FA070; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP11IDisposablei16 = .rodata:0x803FA0B0; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP14ITrafficCenteri8i16 = .rodata:0x803FA0F0; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP14ITrafficCenteri16 = .rodata:0x803FA130; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP10IRoadBlocki8i16 = .rodata:0x803FA170; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP10IRoadBlocki16 = .rodata:0x803FA1B0; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP8IPursuiti8i16 = .rodata:0x803FA1F0; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP8IPursuiti16 = .rodata:0x803FA230; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei10i16 = .rodata:0x803FA270; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP10IRigidBodyi160i16 = .rodata:0x803FA2B0; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP10IRigidBodyi16 = .rodata:0x803FA2F0; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP11ISimpleBodyi96i16 = .rodata:0x803FA330; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP11ISimpleBodyi16 = .rodata:0x803FA370; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP14ICollisionBodyi160i16 = .rodata:0x803FA3B0; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP14ICollisionBodyi16 = .rodata:0x803FA3F0; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP13IVehicleCachei18i16 = .rodata:0x803FA430; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP13IVehicleCachei16 = .rodata:0x803FA470; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP12IInputPlayeri8i16 = .rodata:0x803FA4B0; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP12IInputPlayeri16 = .rodata:0x803FA4F0; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP10IExplosioni96i16 = .rodata:0x803FA530; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP10IExplosioni16 = .rodata:0x803FA570; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP6IModeli434i16 = .rodata:0x803FA5B0; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP6IModeli16 = .rodata:0x803FA5F0; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei40i16 = .rodata:0x803FA630; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZPQ23Sim7IEntityi8i16 = .rodata:0x803FA670; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZPQ23Sim7IEntityi16 = .rodata:0x803FA6B0; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP7IPlayeri8i16 = .rodata:0x803FA6F0; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP7IPlayeri16 = .rodata:0x803FA730; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei160i16 = .rodata:0x803FA770; // type:object size:0x40 scope:global -diagnols.14250 = .rodata:0x803FAB04; // type:object size:0x80 scope:local -_vt.10SpikeStrip.Q23Sim9ITaskable = .rodata:0x803FBEC8; // type:object size:0x20 scope:global -_vt.10SpikeStrip = .rodata:0x803FBEE8; // type:object size:0x60 scope:global -_vt.9SoundHeli.8IAudible = .rodata:0x803FBF48; // type:object size:0x20 scope:global -_vt.9SoundHeli.Q23Sim9ITaskable = .rodata:0x803FBF68; // type:object size:0x20 scope:global -_vt.9SoundHeli = .rodata:0x803FBF88; // type:object size:0x60 scope:global -_vt.8ResetCar.10IResetable = .rodata:0x803FBFE8; // type:object size:0x38 scope:global -_vt.8ResetCar.Q23Sim9ITaskable = .rodata:0x803FC020; // type:object size:0x20 scope:global -_vt.8ResetCar = .rodata:0x803FC040; // type:object size:0x60 scope:global -_vt.10SoundRacer.8IAudible = .rodata:0x803FC0A0; // type:object size:0x20 scope:global -_vt.10SoundRacer.9ICarAudio = .rodata:0x803FC0C0; // type:object size:0x20 scope:global -_vt.10SoundRacer.Q23Sim9ITaskable = .rodata:0x803FC0E0; // type:object size:0x20 scope:global -_vt.10SoundRacer = .rodata:0x803FC100; // type:object size:0x70 scope:global -_vt.8SoundCop.8IAudible = .rodata:0x803FC170; // type:object size:0x20 scope:global -_vt.8SoundCop.9ICarAudio = .rodata:0x803FC190; // type:object size:0x20 scope:global -_vt.8SoundCop.Q23Sim9ITaskable = .rodata:0x803FC1B0; // type:object size:0x20 scope:global -_vt.8SoundCop = .rodata:0x803FC1D0; // type:object size:0x70 scope:global -_vt.12SoundTraffic.8IAudible = .rodata:0x803FC240; // type:object size:0x20 scope:global -_vt.12SoundTraffic.9ICarAudio = .rodata:0x803FC260; // type:object size:0x20 scope:global -_vt.12SoundTraffic.Q23Sim9ITaskable = .rodata:0x803FC280; // type:object size:0x20 scope:global -_vt.12SoundTraffic = .rodata:0x803FC2A0; // type:object size:0x70 scope:global -_vt.8SoundCar.8IAudible = .rodata:0x803FC310; // type:object size:0x20 scope:global -_vt.8SoundCar.9ICarAudio = .rodata:0x803FC330; // type:object size:0x20 scope:global -_vt.8SoundCar.Q23Sim9ITaskable = .rodata:0x803FC350; // type:object size:0x20 scope:global -_vt.8SoundCar = .rodata:0x803FC370; // type:object size:0x70 scope:global -_vt.9ICarAudio = .rodata:0x803FC3E0; // type:object size:0x20 scope:global -_vt.Q29SoundConn13Pkt_Heli_Open = .rodata:0x803FC400; // type:object size:0x40 scope:global -_vt.Q29SoundConn12Pkt_Car_Open = .rodata:0x803FC440; // type:object size:0x40 scope:global -_vt.11DrawRaceCar.11IAttachable = .rodata:0x803FC480; // type:object size:0x48 scope:global -_vt.11DrawRaceCar.6IModel = .rodata:0x803FC4C8; // type:object size:0x110 scope:global -_vt.11DrawRaceCar.11IRenderable = .rodata:0x803FC5D8; // type:object size:0x48 scope:global -_vt.11DrawRaceCar.Q23Sim9ITaskable = .rodata:0x803FC620; // type:object size:0x20 scope:global -_vt.11DrawRaceCar = .rodata:0x803FC640; // type:object size:0x70 scope:global -_vt.10DrawCopCar.11IAttachable = .rodata:0x803FC6B0; // type:object size:0x48 scope:global -_vt.10DrawCopCar.6IModel = .rodata:0x803FC6F8; // type:object size:0x110 scope:global -_vt.10DrawCopCar.11IRenderable = .rodata:0x803FC808; // type:object size:0x48 scope:global -_vt.10DrawCopCar.Q23Sim9ITaskable = .rodata:0x803FC850; // type:object size:0x20 scope:global -_vt.10DrawCopCar = .rodata:0x803FC870; // type:object size:0x70 scope:global -_vt.10DrawNISCar.11IAttachable = .rodata:0x803FC8E0; // type:object size:0x48 scope:global -_vt.10DrawNISCar.6IModel = .rodata:0x803FC928; // type:object size:0x110 scope:global -_vt.10DrawNISCar.11IRenderable = .rodata:0x803FCA38; // type:object size:0x48 scope:global -_vt.10DrawNISCar.Q23Sim9ITaskable = .rodata:0x803FCA80; // type:object size:0x20 scope:global -_vt.10DrawNISCar = .rodata:0x803FCAA0; // type:object size:0x70 scope:global -_vt.18DrawPerformanceCar.11IAttachable = .rodata:0x803FCB10; // type:object size:0x48 scope:global -_vt.18DrawPerformanceCar.6IModel = .rodata:0x803FCB58; // type:object size:0x110 scope:global -_vt.18DrawPerformanceCar.11IRenderable = .rodata:0x803FCC68; // type:object size:0x48 scope:global -_vt.18DrawPerformanceCar.Q23Sim9ITaskable = .rodata:0x803FCCB0; // type:object size:0x20 scope:global -_vt.18DrawPerformanceCar = .rodata:0x803FCCD0; // type:object size:0x70 scope:global -_vt.11DrawTraffic.11IAttachable = .rodata:0x803FCD40; // type:object size:0x48 scope:global -_vt.11DrawTraffic.6IModel = .rodata:0x803FCD88; // type:object size:0x110 scope:global -_vt.11DrawTraffic.11IRenderable = .rodata:0x803FCE98; // type:object size:0x48 scope:global -_vt.11DrawTraffic.Q23Sim9ITaskable = .rodata:0x803FCEE0; // type:object size:0x20 scope:global -_vt.11DrawTraffic = .rodata:0x803FCF00; // type:object size:0x70 scope:global -_vt.7DrawCar.11IAttachable = .rodata:0x803FCF70; // type:object size:0x48 scope:global -_vt.7DrawCar.6IModel = .rodata:0x803FCFB8; // type:object size:0x110 scope:global -_vt.7DrawCar.11IRenderable = .rodata:0x803FD0C8; // type:object size:0x48 scope:global -_vt.7DrawCar.Q23Sim9ITaskable = .rodata:0x803FD110; // type:object size:0x20 scope:global -_vt.7DrawCar = .rodata:0x803FD130; // type:object size:0x70 scope:global -_vt.8DrawHeli.11IAttachable = .rodata:0x803FD1A0; // type:object size:0x48 scope:global -_vt.8DrawHeli.6IModel = .rodata:0x803FD1E8; // type:object size:0x110 scope:global -_vt.8DrawHeli.11IRenderable = .rodata:0x803FD2F8; // type:object size:0x48 scope:global -_vt.8DrawHeli.Q23Sim9ITaskable = .rodata:0x803FD340; // type:object size:0x20 scope:global -_vt.8DrawHeli = .rodata:0x803FD360; // type:object size:0x68 scope:global -_vt.11DrawVehicle.11IAttachable = .rodata:0x803FD3C8; // type:object size:0x48 scope:global -_vt.11DrawVehicle.6IModel = .rodata:0x803FD410; // type:object size:0x110 scope:global -_vt.11DrawVehicle.11IRenderable = .rodata:0x803FD520; // type:object size:0x48 scope:global -_vt.11DrawVehicle.Q23Sim9ITaskable = .rodata:0x803FD568; // type:object size:0x20 scope:global -_vt.11DrawVehicle = .rodata:0x803FD588; // type:object size:0x68 scope:global -_vt.Q211DrawVehicle6Effect = .rodata:0x803FD5F0; // type:object size:0x20 scope:global -_vt.Q211DrawVehicle4Part.17ITriggerableModel = .rodata:0x803FD610; // type:object size:0x20 scope:global -_vt.Q211DrawVehicle4Part.Q214EventSequencer8IContext = .rodata:0x803FD630; // type:object size:0x20 scope:global -_vt.Q211DrawVehicle4Part.6IModel = .rodata:0x803FD650; // type:object size:0x110 scope:global -_vt.Q211DrawVehicle4Part.11IAttachable = .rodata:0x803FD760; // type:object size:0x48 scope:global -_vt.Q211DrawVehicle4Part.Q23Sim9ITaskable = .rodata:0x803FD7A8; // type:object size:0x20 scope:global -_vt.Q211DrawVehicle4Part = .rodata:0x803FD7C8; // type:object size:0x48 scope:global -_vt.13EngineTraffic.Q23Sim9ITaskable = .rodata:0x803FD810; // type:object size:0x20 scope:global -_vt.13EngineTraffic = .rodata:0x803FD830; // type:object size:0x98 scope:global -_vt.13EngineTraffic.13ITransmission = .rodata:0x803FD8C8; // type:object size:0x70 scope:global -_vt.13EngineTraffic.7IEngine = .rodata:0x803FD938; // type:object size:0x90 scope:global -_vt.13EngineTraffic.14IAttributeable = .rodata:0x803FD9C8; // type:object size:0x18 scope:global -_vt.13SimpleChopper.Q23Sim9ITaskable = .rodata:0x803FD9E0; // type:object size:0x20 scope:global -_vt.13SimpleChopper.14ISimpleChopper = .rodata:0x803FDA00; // type:object size:0x40 scope:global -_vt.13SimpleChopper = .rodata:0x803FDA40; // type:object size:0xB0 scope:global -_vt.12EngineSpline.Q23Sim9ITaskable = .rodata:0x803FDAF0; // type:object size:0x20 scope:global -_vt.12EngineSpline = .rodata:0x803FDB10; // type:object size:0x78 scope:global -_vt.12EngineSpline.13INISCarEngine = .rodata:0x803FDB88; // type:object size:0x30 scope:global -_vt.12EngineSpline.7IEngine = .rodata:0x803FDBB8; // type:object size:0x90 scope:global -_vt.12EngineSpline.13ITransmission = .rodata:0x803FDC48; // type:object size:0x70 scope:global -_vt.12EngineSpline.14IAttributeable = .rodata:0x803FDCB8; // type:object size:0x18 scope:global -_vt.14EngineDragster.11IRaceEngine = .rodata:0x803FDCD0; // type:object size:0x20 scope:global -_vt.14EngineDragster.11IInductable = .rodata:0x803FDCF0; // type:object size:0x38 scope:global -_vt.14EngineDragster.7IEngine = .rodata:0x803FDD28; // type:object size:0x90 scope:global -_vt.14EngineDragster.13ITransmission = .rodata:0x803FDDB8; // type:object size:0x70 scope:global -_vt.14EngineDragster.Q23Sim9ITaskable = .rodata:0x803FDE28; // type:object size:0x20 scope:global -_vt.14EngineDragster.11IDragEngine = .rodata:0x803FDE48; // type:object size:0x28 scope:global -_vt.14EngineDragster.17IDragTransmission = .rodata:0x803FDE70; // type:object size:0x20 scope:global -_vt.14EngineDragster.10ITiptronic = .rodata:0x803FDE90; // type:object size:0x20 scope:global -_vt.14EngineDragster.13IEngineDamage = .rodata:0x803FDEB0; // type:object size:0x40 scope:global -_vt.14EngineDragster = .rodata:0x803FDEF0; // type:object size:0xB8 scope:global -_vt.11EngineRacer.Q23Sim9ITaskable = .rodata:0x803FDFA8; // type:object size:0x20 scope:global -_vt.11EngineRacer = .rodata:0x803FDFC8; // type:object size:0xB8 scope:global -_vt.11EngineRacer.10ITiptronic = .rodata:0x803FE080; // type:object size:0x20 scope:global -_vt.11EngineRacer.13IEngineDamage = .rodata:0x803FE0A0; // type:object size:0x40 scope:global -_vt.11EngineRacer.11IInductable = .rodata:0x803FE0E0; // type:object size:0x38 scope:global -_vt.11EngineRacer.13ITransmission = .rodata:0x803FE118; // type:object size:0x70 scope:global -_vt.11EngineRacer.7IEngine = .rodata:0x803FE188; // type:object size:0x90 scope:global -_vt.11EngineRacer.11IRaceEngine = .rodata:0x803FE218; // type:object size:0x20 scope:global -_vt.11EngineRacer.14IAttributeable = .rodata:0x803FE238; // type:object size:0x18 scope:global -_vt.16SuspensionSpline.14INISCarControl = .rodata:0x803FE250; // type:object size:0x80 scope:global -_vt.16SuspensionSpline.11ISuspension = .rodata:0x803FE2D0; // type:object size:0x100 scope:global -_vt.16SuspensionSpline.Q23Sim9ITaskable = .rodata:0x803FE3D0; // type:object size:0x20 scope:global -_vt.16SuspensionSpline = .rodata:0x803FE3F0; // type:object size:0x68 scope:global -_vt.17SuspensionTrailer.11ISuspension = .rodata:0x803FE458; // type:object size:0x100 scope:global -_vt.17SuspensionTrailer.Q23Sim9ITaskable = .rodata:0x803FE558; // type:object size:0x20 scope:global -_vt.17SuspensionTrailer = .rodata:0x803FE578; // type:object size:0x60 scope:global -_vt.16SuspensionSimple.Q33Sim9Collision9IListener = .rodata:0x803FE5D8; // type:object size:0x18 scope:global -_vt.16SuspensionSimple.14IAttributeable = .rodata:0x803FE5F0; // type:object size:0x18 scope:global -_vt.16SuspensionSimple.11ISuspension = .rodata:0x803FE608; // type:object size:0x100 scope:global -_vt.16SuspensionSimple.Q23Sim9ITaskable = .rodata:0x803FE708; // type:object size:0x20 scope:global -_vt.16SuspensionSimple = .rodata:0x803FE728; // type:object size:0x60 scope:global -_vt.17SuspensionTraffic.11ISuspension = .rodata:0x803FE788; // type:object size:0x100 scope:global -_vt.17SuspensionTraffic.Q23Sim9ITaskable = .rodata:0x803FE888; // type:object size:0x20 scope:global -_vt.17SuspensionTraffic = .rodata:0x803FE8A8; // type:object size:0x60 scope:global -_vt.15SuspensionRacer.Q33Sim9Collision9IListener = .rodata:0x803FE908; // type:object size:0x18 scope:global -_vt.15SuspensionRacer.14IAttributeable = .rodata:0x803FE920; // type:object size:0x18 scope:global -_vt.15SuspensionRacer.11ISuspension = .rodata:0x803FE938; // type:object size:0x100 scope:global -_vt.15SuspensionRacer.Q23Sim9ITaskable = .rodata:0x803FEA38; // type:object size:0x20 scope:global -_vt.15SuspensionRacer = .rodata:0x803FEA58; // type:object size:0x68 scope:global -_vt.14IAttributeable = .rodata:0x803FEAC0; // type:object size:0x18 scope:global -_vt.7Chassis.Q23Sim9ITaskable = .rodata:0x803FEAD8; // type:object size:0x20 scope:global -_vt.7Chassis.11ISuspension = .rodata:0x803FEAF8; // type:object size:0x100 scope:global -_vt.7Chassis = .rodata:0x803FEBF8; // type:object size:0x60 scope:global -_vt.8InputNIS.6IInput = .rodata:0x803FEC58; // type:object size:0x98 scope:global -_vt.8InputNIS.Q23Sim9ITaskable = .rodata:0x803FECF0; // type:object size:0x20 scope:global -_vt.8InputNIS = .rodata:0x803FED10; // type:object size:0x70 scope:global -_vt.15InputPlayerDrag.6IInput = .rodata:0x803FED80; // type:object size:0x98 scope:global -_vt.15InputPlayerDrag.Q23Sim9ITaskable = .rodata:0x803FEE18; // type:object size:0x20 scope:global -_vt.15InputPlayerDrag = .rodata:0x803FEE38; // type:object size:0x78 scope:global -_vt.15InputPlayerDrag.12IInputPlayer = .rodata:0x803FEEB0; // type:object size:0x40 scope:global -_vt.11InputPlayer.Q23Sim9ITaskable = .rodata:0x803FEEF0; // type:object size:0x20 scope:global -_vt.11InputPlayer = .rodata:0x803FEF10; // type:object size:0x78 scope:global -_vt.11InputPlayer.6IInput = .rodata:0x803FEF88; // type:object size:0x98 scope:global -_vt.11InputPlayer.12IInputPlayer = .rodata:0x803FF020; // type:object size:0x40 scope:global -_vt.6PInput.Q23Sim9ITaskable = .rodata:0x803FF060; // type:object size:0x20 scope:global -_vt.6PInput.6IInput = .rodata:0x803FF080; // type:object size:0x98 scope:global -_vt.6PInput = .rodata:0x803FF118; // type:object size:0x70 scope:global -_vt.12DamageCopCar.Q214EventSequencer8IContext = .rodata:0x803FF188; // type:object size:0x20 scope:global -_vt.12DamageCopCar.18IDamageableVehicle = .rodata:0x803FF1A8; // type:object size:0x28 scope:global -_vt.12DamageCopCar = .rodata:0x803FF1D0; // type:object size:0x70 scope:global -_vt.12DamageCopCar.11IDamageable = .rodata:0x803FF240; // type:object size:0x58 scope:global -_vt.12DamageCopCar.Q23Sim9ITaskable = .rodata:0x803FF298; // type:object size:0x20 scope:global -_vt.10DamageHeli.Q214EventSequencer8IContext = .rodata:0x803FF2B8; // type:object size:0x20 scope:global -_vt.10DamageHeli.18IDamageableVehicle = .rodata:0x803FF2D8; // type:object size:0x28 scope:global -_vt.10DamageHeli.11IDamageable = .rodata:0x803FF300; // type:object size:0x58 scope:global -_vt.10DamageHeli.Q23Sim9ITaskable = .rodata:0x803FF358; // type:object size:0x20 scope:global -_vt.10DamageHeli = .rodata:0x803FF378; // type:object size:0x70 scope:global -_vt.14DamageDragster.10ISpikeable = .rodata:0x803FF3E8; // type:object size:0x30 scope:global -_vt.14DamageDragster.Q214EventSequencer8IContext = .rodata:0x803FF418; // type:object size:0x20 scope:global -_vt.14DamageDragster.18IDamageableVehicle = .rodata:0x803FF438; // type:object size:0x28 scope:global -_vt.14DamageDragster.11IDamageable = .rodata:0x803FF460; // type:object size:0x58 scope:global -_vt.14DamageDragster.Q23Sim9ITaskable = .rodata:0x803FF4B8; // type:object size:0x20 scope:global -_vt.14DamageDragster = .rodata:0x803FF4D8; // type:object size:0x70 scope:global -_vt.14DamageDragster.Q33Sim9Collision9IListener = .rodata:0x803FF548; // type:object size:0x18 scope:global -_vt.11DamageRacer.Q214EventSequencer8IContext = .rodata:0x803FF560; // type:object size:0x20 scope:global -_vt.11DamageRacer.Q23Sim9ITaskable = .rodata:0x803FF580; // type:object size:0x20 scope:global -_vt.11DamageRacer.18IDamageableVehicle = .rodata:0x803FF5A0; // type:object size:0x28 scope:global -_vt.11DamageRacer.10ISpikeable = .rodata:0x803FF5C8; // type:object size:0x30 scope:global -_vt.11DamageRacer.11IDamageable = .rodata:0x803FF5F8; // type:object size:0x58 scope:global -_vt.11DamageRacer = .rodata:0x803FF650; // type:object size:0x70 scope:global -_vt.10ISpikeable = .rodata:0x803FF6C0; // type:object size:0x30 scope:global -_vt.Q210RenderConn24Pkt_VehicleFragment_Open = .rodata:0x803FF6F0; // type:object size:0x40 scope:global -_vt.Q210RenderConn13Pkt_Heli_Open = .rodata:0x803FF730; // type:object size:0x40 scope:global -_vt.Q210RenderConn12Pkt_Car_Open = .rodata:0x803FF770; // type:object size:0x40 scope:global -_vt.15EffectsFragment.Q23Sim9ITaskable = .rodata:0x803FF7B0; // type:object size:0x20 scope:global -_vt.15EffectsFragment = .rodata:0x803FF7D0; // type:object size:0x90 scope:global -_vt.16EffectsSmackable.Q23Sim9ITaskable = .rodata:0x803FF860; // type:object size:0x20 scope:global -_vt.16EffectsSmackable = .rodata:0x803FF880; // type:object size:0x90 scope:global -_vt.16EffectsSmackable.Q33Sim9Collision9IListener = .rodata:0x803FF910; // type:object size:0x18 scope:global -_vt.13EffectsPlayer.Q23Sim9ITaskable = .rodata:0x803FF928; // type:object size:0x20 scope:global -_vt.13EffectsPlayer = .rodata:0x803FF948; // type:object size:0x90 scope:global -_vt.10EffectsCar.Q23Sim9ITaskable = .rodata:0x803FF9D8; // type:object size:0x20 scope:global -_vt.10EffectsCar = .rodata:0x803FF9F8; // type:object size:0x90 scope:global -_vt.14EffectsVehicle.Q23Sim9ITaskable = .rodata:0x803FFA88; // type:object size:0x20 scope:global -_vt.14EffectsVehicle = .rodata:0x803FFAA8; // type:object size:0x90 scope:global -_vt.7Effects.Q23Sim9ITaskable = .rodata:0x803FFB38; // type:object size:0x20 scope:global -_vt.7Effects.Q33Sim9Collision9IListener = .rodata:0x803FFB58; // type:object size:0x18 scope:global -_vt.7Effects = .rodata:0x803FFB70; // type:object size:0x90 scope:global -_vt.13DamageVehicle.Q33Sim9Collision9IListener = .rodata:0x803FFC00; // type:object size:0x18 scope:global -_vt.13DamageVehicle.Q214EventSequencer8IContext = .rodata:0x803FFC18; // type:object size:0x20 scope:global -_vt.13DamageVehicle.18IDamageableVehicle = .rodata:0x803FFC38; // type:object size:0x28 scope:global -_vt.13DamageVehicle.11IDamageable = .rodata:0x803FFC60; // type:object size:0x58 scope:global -_vt.13DamageVehicle.Q23Sim9ITaskable = .rodata:0x803FFCB8; // type:object size:0x20 scope:global -_vt.13DamageVehicle = .rodata:0x803FFCD8; // type:object size:0x70 scope:global -_vt.5RBCop.10IRBVehicle = .rodata:0x803FFD48; // type:object size:0x50 scope:global -_vt.5RBCop.Q217CollisionGeometry10IBoundable = .rodata:0x803FFD98; // type:object size:0x30 scope:global -_vt.5RBCop.15IDynamicsEntity = .rodata:0x803FFDC8; // type:object size:0x18 scope:global -_vt.5RBCop.14ICollisionBody = .rodata:0x803FFDE0; // type:object size:0x160 scope:global -_vt.5RBCop.10IRigidBody = .rodata:0x803FFF40; // type:object size:0x168 scope:global -_vt.5RBCop.Q23Sim9ITaskable = .rodata:0x804000A8; // type:object size:0x20 scope:global -_vt.5RBCop = .rodata:0x804000C8; // type:object size:0xC0 scope:global -_vt.9RBTrailer.10IRBVehicle = .rodata:0x80400188; // type:object size:0x50 scope:global -_vt.9RBTrailer.Q217CollisionGeometry10IBoundable = .rodata:0x804001D8; // type:object size:0x30 scope:global -_vt.9RBTrailer.15IDynamicsEntity = .rodata:0x80400208; // type:object size:0x18 scope:global -_vt.9RBTrailer.14ICollisionBody = .rodata:0x80400220; // type:object size:0x160 scope:global -_vt.9RBTrailer.10IRigidBody = .rodata:0x80400380; // type:object size:0x168 scope:global -_vt.9RBTrailer.Q23Sim9ITaskable = .rodata:0x804004E8; // type:object size:0x20 scope:global -_vt.9RBTrailer = .rodata:0x80400508; // type:object size:0xC0 scope:global -_vt.9RBTractor.13IVehicleCache = .rodata:0x804005C8; // type:object size:0x30 scope:global -_vt.9RBTractor.19IArticulatedVehicle = .rodata:0x804005F8; // type:object size:0x38 scope:global -_vt.9RBTractor.10IRBVehicle = .rodata:0x80400630; // type:object size:0x50 scope:global -_vt.9RBTractor.Q217CollisionGeometry10IBoundable = .rodata:0x80400680; // type:object size:0x30 scope:global -_vt.9RBTractor.15IDynamicsEntity = .rodata:0x804006B0; // type:object size:0x18 scope:global -_vt.9RBTractor.14ICollisionBody = .rodata:0x804006C8; // type:object size:0x160 scope:global -_vt.9RBTractor.10IRigidBody = .rodata:0x80400828; // type:object size:0x168 scope:global -_vt.9RBTractor.Q23Sim9ITaskable = .rodata:0x80400990; // type:object size:0x20 scope:global -_vt.9RBTractor = .rodata:0x804009B0; // type:object size:0xC0 scope:global -_vt.9RBVehicle.Q217CollisionGeometry10IBoundable = .rodata:0x80400A70; // type:object size:0x30 scope:global -_vt.9RBVehicle.15IDynamicsEntity = .rodata:0x80400AA0; // type:object size:0x18 scope:global -_vt.9RBVehicle.Q23Sim9ITaskable = .rodata:0x80400AB8; // type:object size:0x20 scope:global -_vt.9RBVehicle = .rodata:0x80400AD8; // type:object size:0xC0 scope:global -_vt.9RBVehicle.10IRBVehicle = .rodata:0x80400B98; // type:object size:0x50 scope:global -_vt.9RBVehicle.14ICollisionBody = .rodata:0x80400BE8; // type:object size:0x160 scope:global -_vt.9RBVehicle.10IRigidBody = .rodata:0x80400D48; // type:object size:0x168 scope:global -_vt.6IModel = .rodata:0x80400EB0; // type:object size:0x110 scope:global -_vt.18IDamageableVehicle = .rodata:0x80400FC0; // type:object size:0x28 scope:global -_vt.11IDamageable = .rodata:0x80400FE8; // type:object size:0x58 scope:global -_vt.15SimpleRigidBody.Q23Sim9ITaskable = .rodata:0x80401040; // type:object size:0x20 scope:global -_vt.15SimpleRigidBody.11ISimpleBody = .rodata:0x80401060; // type:object size:0x48 scope:global -_vt.15SimpleRigidBody = .rodata:0x804010A8; // type:object size:0x70 scope:global -_vt.15SimpleRigidBody.10IRigidBody = .rodata:0x80401118; // type:object size:0x168 scope:global -_vt.9RigidBody.Q213WCollisionMgr17ICollisionHandler = .rodata:0x80401280; // type:object size:0x18 scope:global -_vt.9RigidBody.15IDynamicsEntity = .rodata:0x80401298; // type:object size:0x18 scope:global -_vt.9RigidBody.Q23Sim9ITaskable = .rodata:0x804012B0; // type:object size:0x20 scope:global -_vt.9RigidBody.10IRigidBody = .rodata:0x804012D0; // type:object size:0x168 scope:global -_vt.9RigidBody.Q217CollisionGeometry10IBoundable = .rodata:0x80401438; // type:object size:0x30 scope:global -_vt.9RigidBody.Q28Dynamics7IEntity = .rodata:0x80401468; // type:object size:0x80 scope:global -_vt.9RigidBody.14ICollisionBody = .rodata:0x804014E8; // type:object size:0x160 scope:global -_vt.9RigidBody = .rodata:0x80401648; // type:object size:0xC0 scope:global -_vt.15IDynamicsEntity = .rodata:0x80401708; // type:object size:0x18 scope:global -_vt.Q213WCollisionMgr17ICollisionHandler = .rodata:0x80401720; // type:object size:0x18 scope:global -_vt.10IRigidBody = .rodata:0x80401738; // type:object size:0x168 scope:global -_vt.11ISimpleBody = .rodata:0x804018A0; // type:object size:0x48 scope:global -_vt.14ICollisionBody = .rodata:0x804018E8; // type:object size:0x160 scope:global -_vt.19IArticulatedVehicle = .rodata:0x80401A48; // type:object size:0x38 scope:global -_vt.11IRaceEngine = .rodata:0x80401A80; // type:object size:0x20 scope:global -_vt.11IDragEngine = .rodata:0x80401AA0; // type:object size:0x28 scope:global -_vt.7IEngine = .rodata:0x80401AC8; // type:object size:0x90 scope:global -_vt.11IInductable = .rodata:0x80401B58; // type:object size:0x38 scope:global -_vt.10ITiptronic = .rodata:0x80401B90; // type:object size:0x20 scope:global -_vt.13ITransmission = .rodata:0x80401BB0; // type:object size:0x70 scope:global -_vt.12IInputPlayer = .rodata:0x80401C20; // type:object size:0x40 scope:global -_vt.Q28Dynamics7IEntity = .rodata:0x80401C60; // type:object size:0x80 scope:global -SmoothRPMDecel = .rodata:0x804020F4; // type:object size:0x8 scope:local -FEngDiscErrorPackage = .rodata:0x80403B1C; // type:object size:0xE scope:local -PADMASKS = .rodata:0x80403B2C; // type:object size:0x10 scope:local -_vt.16GameplayActivity.11IAttachable = .rodata:0x80404B70; // type:object size:0x48 scope:global -_vt.16GameplayActivity.Q23Sim9IActivity = .rodata:0x80404BB8; // type:object size:0x38 scope:global -_vt.16GameplayActivity.Q23Sim9ITaskable = .rodata:0x80404BF0; // type:object size:0x20 scope:global -_vt.16GameplayActivity = .rodata:0x80404C10; // type:object size:0x20 scope:global -_vt.11NISActivity.13IVehicleCache = .rodata:0x80404C30; // type:object size:0x30 scope:global -_vt.11NISActivity.Q214EventSequencer8IContext = .rodata:0x80404C60; // type:object size:0x20 scope:global -_vt.11NISActivity.4INIS = .rodata:0x80404C80; // type:object size:0xE0 scope:global -_vt.11NISActivity.11IAttachable = .rodata:0x80404D60; // type:object size:0x48 scope:global -_vt.11NISActivity.Q23Sim9IActivity = .rodata:0x80404DA8; // type:object size:0x38 scope:global -_vt.11NISActivity.Q23Sim9ITaskable = .rodata:0x80404DE0; // type:object size:0x20 scope:global -_vt.11NISActivity = .rodata:0x80404E00; // type:object size:0x20 scope:global -_vt.16CAnimMomentScene = .rodata:0x80404E20; // type:object size:0x80 scope:global -_vt.10CareerGame.10IGameState = .rodata:0x80404EA0; // type:object size:0x28 scope:global -_vt.10CareerGame.13IVehicleCache = .rodata:0x80404EC8; // type:object size:0x30 scope:global -_vt.10CareerGame.Q23Sim13IStateManager = .rodata:0x80404EF8; // type:object size:0x28 scope:global -_vt.10CareerGame.Q23Sim12ITimeManager = .rodata:0x80404F20; // type:object size:0x20 scope:global -_vt.10CareerGame.11IAttachable = .rodata:0x80404F40; // type:object size:0x48 scope:global -_vt.10CareerGame.Q23Sim9IActivity = .rodata:0x80404F88; // type:object size:0x38 scope:global -_vt.10CareerGame.Q23Sim9ITaskable = .rodata:0x80404FC0; // type:object size:0x20 scope:global -_vt.10CareerGame = .rodata:0x80404FE0; // type:object size:0x20 scope:global -_vt.9QuickGame.10IGameState = .rodata:0x80405000; // type:object size:0x28 scope:global -_vt.9QuickGame.13IVehicleCache = .rodata:0x80405028; // type:object size:0x30 scope:global -_vt.9QuickGame.Q23Sim13IStateManager = .rodata:0x80405058; // type:object size:0x28 scope:global -_vt.9QuickGame.Q23Sim12ITimeManager = .rodata:0x80405080; // type:object size:0x20 scope:global -_vt.9QuickGame.11IAttachable = .rodata:0x804050A0; // type:object size:0x48 scope:global -_vt.9QuickGame.Q23Sim9IActivity = .rodata:0x804050E8; // type:object size:0x38 scope:global -_vt.9QuickGame.Q23Sim9ITaskable = .rodata:0x80405120; // type:object size:0x20 scope:global -_vt.9QuickGame = .rodata:0x80405140; // type:object size:0x20 scope:global -_vt.10IGameState = .rodata:0x80405160; // type:object size:0x28 scope:global -_vt.4INIS = .rodata:0x80405188; // type:object size:0xE0 scope:global -_vt.11LocalPlayer = .rodata:0x80405268; // type:object size:0x28 scope:global -_vt.11LocalPlayer.Q23Sim9ITaskable = .rodata:0x80405290; // type:object size:0x20 scope:global -_vt.11LocalPlayer.Q33Sim9Collision9IListener = .rodata:0x804052B0; // type:object size:0x18 scope:global -_vt.11LocalPlayer.11IAttachable = .rodata:0x804052C8; // type:object size:0x48 scope:global -_vt.11LocalPlayer.Q23Sim7IEntity = .rodata:0x80405310; // type:object size:0x60 scope:global -_vt.11LocalPlayer.7IPlayer = .rodata:0x80405370; // type:object size:0xB8 scope:global -_vt.9SimSystem = .rodata:0x80405428; // type:object size:0x20 scope:global -_vt.Q29WorldConn15Pkt_Effect_Open = .rodata:0x80405448; // type:object size:0x40 scope:global -_vt.Q29WorldConn15Pkt_Effect_Send = .rodata:0x80405488; // type:object size:0x40 scope:global -_vt.Q23Sim5Model.Q214EventSequencer8IContext = .rodata:0x804054C8; // type:object size:0x20 scope:global -_vt.Q23Sim5Model.6IModel = .rodata:0x804054E8; // type:object size:0x110 scope:global -_vt.Q23Sim5Model.11IAttachable = .rodata:0x804055F8; // type:object size:0x48 scope:global -_vt.Q23Sim5Model.Q23Sim9ITaskable = .rodata:0x80405640; // type:object size:0x20 scope:global -_vt.Q23Sim5Model = .rodata:0x80405660; // type:object size:0x48 scope:global -_vt.Q33Sim5Model6Effect = .rodata:0x804056A8; // type:object size:0x20 scope:global -_vt.Q23Sim6Effect = .rodata:0x804056C8; // type:object size:0x20 scope:global -_vt.Q23Sim6Entity.11IAttachable = .rodata:0x804056E8; // type:object size:0x48 scope:global -_vt.Q23Sim6Entity.Q23Sim7IEntity = .rodata:0x80405730; // type:object size:0x60 scope:global -_vt.Q23Sim6Entity.Q23Sim9ITaskable = .rodata:0x80405790; // type:object size:0x20 scope:global -_vt.Q23Sim6Entity = .rodata:0x804057B0; // type:object size:0x28 scope:global -_vt.Q23Sim10Connection = .rodata:0x804057D8; // type:object size:0x28 scope:global -_vt.Q23Sim13IStateManager = .rodata:0x80405800; // type:object size:0x28 scope:global -_vt.Q23Sim12ITimeManager = .rodata:0x80405828; // type:object size:0x20 scope:global -_vt.Q23Sim8Activity.11IAttachable = .rodata:0x80405848; // type:object size:0x48 scope:global -_vt.Q23Sim8Activity.Q23Sim9IActivity = .rodata:0x80405890; // type:object size:0x38 scope:global -_vt.Q23Sim8Activity.Q23Sim9ITaskable = .rodata:0x804058C8; // type:object size:0x20 scope:global -_vt.Q23Sim8Activity = .rodata:0x804058E8; // type:object size:0x20 scope:global -_vt.Q23Sim9IActivity = .rodata:0x80405908; // type:object size:0x38 scope:global -_vt.Q23Sim6Object.Q23Sim9ITaskable = .rodata:0x80405940; // type:object size:0x20 scope:global -_vt.Q23Sim6Object = .rodata:0x80405960; // type:object size:0x20 scope:global -_vt.Q23Sim9ITaskable = .rodata:0x80405980; // type:object size:0x20 scope:global -_vt.Q23Sim12IServiceable = .rodata:0x804059A0; // type:object size:0x20 scope:global -_vt.Q23Sim7IEntity = .rodata:0x804059C0; // type:object size:0x60 scope:global -_vt.7IPlayer = .rodata:0x80405A20; // type:object size:0xB8 scope:global -_vt.Q23Sim11Attachments = .rodata:0x80405AD8; // type:object size:0x18 scope:global -_vt.Q33UTL11Collectionst8_Storage2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei434 = .rodata:0x80405BD0; // type:object size:0x40 scope:global -_vt.Q33UTL11Collectionst8_Storage2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei8 = .rodata:0x80405C10; // type:object size:0x40 scope:global -_vt.Q33UTL11Collectionst8_Storage2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei40 = .rodata:0x80405C50; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei434i16 = .rodata:0x80405C90; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei16 = .rodata:0x80405CD0; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei8i16 = .rodata:0x80405D10; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei16 = .rodata:0x80405D50; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei40i16 = .rodata:0x80405D90; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei16 = .rodata:0x80405DD0; // type:object size:0x40 scope:global -speed_test.28362 = .rodata:0x804074A4; // type:object size:0x2C scope:local -SPEECHFLOW_DISPLAY = .rodata:0x80407A7C; // type:object size:0x4 scope:global -_7SoundAI.heat_cutoffs = .rodata:0x80407A80; // type:object size:0x20 scope:global -_vt.Q26Speech9MusicFlow = .rodata:0x80407CD8; // type:object size:0x58 scope:global -_vt.Q26Speech13RoadblockFlow = .rodata:0x80407D30; // type:object size:0x58 scope:global -_vt.Q26Speech12StrategyFlow = .rodata:0x80407D88; // type:object size:0xA0 scope:global -_vt.Q26Speech11PursuitFlow = .rodata:0x80407E28; // type:object size:0x58 scope:global -_vt.Q26Speech5Cache = .rodata:0x80407E80; // type:object size:0x18 scope:global -_vt.Q26Speech13SpchSampleMap = .rodata:0x80407E98; // type:object size:0x18 scope:global -_vt.Q26Speech10SED_NISSFX = .rodata:0x80407EB0; // type:object size:0xA8 scope:global -_vt.13EAXAirSupport = .rodata:0x80407F58; // type:object size:0x450 scope:global -_vt.11EAXDispatch = .rodata:0x804083A8; // type:object size:0x110 scope:global -_vt.6EAXCop = .rodata:0x804084B8; // type:object size:0x420 scope:global -_vt.12EAXCharacter = .rodata:0x804088D8; // type:object size:0x110 scope:global -_vt.7SoundAI.Q33Sim9Collision9IListener = .rodata:0x804089E8; // type:object size:0x18 scope:global -_vt.7SoundAI.11IAttachable = .rodata:0x80408A00; // type:object size:0x48 scope:global -_vt.7SoundAI.Q23Sim9IActivity = .rodata:0x80408A48; // type:object size:0x38 scope:global -_vt.7SoundAI.Q23Sim9ITaskable = .rodata:0x80408A80; // type:object size:0x20 scope:global -_vt.7SoundAI = .rodata:0x80408AA0; // type:object size:0x20 scope:global -_vt.Q26Speech8Observer = .rodata:0x80408AC0; // type:object size:0x60 scope:global -_vt.Q26Speech10SpeechFlow = .rodata:0x80408B20; // type:object size:0x58 scope:global -_vt.Q26Speech10GameSpeech = .rodata:0x80408B78; // type:object size:0xA8 scope:global -_vt.Q26Speech6Module = .rodata:0x80408C20; // type:object size:0xA8 scope:global -_vt.Q26Speech12observations = .rodata:0x80408CC8; // type:object size:0x18 scope:global -_vt.Q26Speech7copList = .rodata:0x80408CE0; // type:object size:0x18 scope:global -_vt.Q26Speech15SchedSpchEvents = .rodata:0x80408CF8; // type:object size:0x18 scope:global -_vt.Q26Speech15SpeechSampleVec = .rodata:0x80408D10; // type:object size:0x18 scope:global -_vt.Q26Speech12EventHistory.12AudioMemBase = .rodata:0x80408DD8; // type:object size:0x18 scope:global -_vt.Q26Speech12EventHistory = .rodata:0x80408DF0; // type:object size:0x40 scope:global -_vt.Q26Speech13SampleReqList = .rodata:0x80408E30; // type:object size:0x18 scope:global -_vt.Q26Speech13SPCHEventList = .rodata:0x80408E48; // type:object size:0x18 scope:global -_vt.Q26Speech15SpeechHashIDMap.12AudioMemBase = .rodata:0x80408E60; // type:object size:0x18 scope:global -_vt.Q26Speech15SpeechHashIDMap = .rodata:0x80408E78; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZQ26Speech11HistoryPairi264i16 = .rodata:0x80408EB8; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZQ26Speech11HistoryPairi16 = .rodata:0x80408EF8; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZQ26Speech15SpeechEventPairi264i16 = .rodata:0x80408F38; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZQ26Speech15SpeechEventPairi16 = .rodata:0x80408F78; // type:object size:0x40 scope:global -_vt.32ParameterAccessorBlendByDistance = .rodata:0x8040D190; // type:object size:0x48 scope:global -_vt.22ParameterAccessorBlend = .rodata:0x8040D1D8; // type:object size:0x48 scope:global -_vt.17ParameterAccessor = .rodata:0x8040D220; // type:object size:0x40 scope:global -_vt.19VehicleFragmentConn = .rodata:0x8040D260; // type:object size:0x28 scope:global -_vt.14HeliRenderConn = .rodata:0x8040D288; // type:object size:0x50 scope:global -_vt.13CarRenderConn.14IAttributeable = .rodata:0x8040D2D8; // type:object size:0x18 scope:global -_vt.13CarRenderConn = .rodata:0x8040D2F0; // type:object size:0x50 scope:global -_vt.17VehicleRenderConn = .rodata:0x8040D340; // type:object size:0x50 scope:global -_vt.26VehiclePartDamageBehaviour = .rodata:0x8040D390; // type:object size:0x60 scope:global -_vt.27IVehiclePartDamageBehaviour = .rodata:0x8040D3F0; // type:object size:0x60 scope:global -_vt.19SmackableRenderConn = .rodata:0x8040D450; // type:object size:0x28 scope:global -_vt.9SpaceNode = .rodata:0x8040D478; // type:object size:0x18 scope:global -_vt.Q210RenderConn21Pkt_Smackable_Service = .rodata:0x8040D490; // type:object size:0x40 scope:global -_vt.Q210RenderConn27Pkt_VehicleFragment_Service = .rodata:0x8040D4D0; // type:object size:0x40 scope:global -_vt.Q210RenderConn16Pkt_Heli_Service = .rodata:0x8040D510; // type:object size:0x40 scope:global -_vt.Q210RenderConn15Pkt_Car_Service = .rodata:0x8040D550; // type:object size:0x40 scope:global -_vt.21DebugVehicleSelection = .rodata:0x8040D590; // type:object size:0x30 scope:global -FXMarkerNameHashMappings = .rodata:0x8040DCC4; // type:object size:0x230 scope:local -TweakBrakeMarkerY = .rodata:0x8040DEF4; // type:object size:0x8 scope:local -CarBodyLodSwapSize = .rodata:0x8040DEFC; // type:object size:0x14 scope:local -TrafficCarBodyLodSwapSize = .rodata:0x8040DF10; // type:object size:0x14 scope:local -_vt.Q43UTL11Collectionst8Listable2Z17VehicleRenderConni10_4List = .rodata:0x8040DF28; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP17VehicleRenderConni10i16 = .rodata:0x8040DF68; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP17VehicleRenderConni16 = .rodata:0x8040DFA8; // type:object size:0x40 scope:global -offsets.10648 = .rodata:0x8040E370; // type:object size:0x80 scope:local -up.24862 = .rodata:0x8040EDA0; // type:object size:0xC scope:local -up.24887 = .rodata:0x8040EDC0; // type:object size:0xC scope:local -_vt.15WorldEffectConn = .rodata:0x8040EE48; // type:object size:0x28 scope:global -_vt.13WorldBodyConn = .rodata:0x8040EE70; // type:object size:0x28 scope:global -_vt.Q29WorldConn6Server = .rodata:0x8040EE98; // type:object size:0x20 scope:global -_vt.Q29WorldConn18Pkt_Effect_Service = .rodata:0x8040EEB8; // type:object size:0x40 scope:global -_vt.Q29WorldConn16Pkt_Body_Service = .rodata:0x8040EEF8; // type:object size:0x40 scope:global -_vt.10PathFinder.11IAttachable = .rodata:0x8040EF38; // type:object size:0x48 scope:global -_vt.10PathFinder.Q23Sim9IActivity = .rodata:0x8040EF80; // type:object size:0x38 scope:global -_vt.10PathFinder.Q23Sim9ITaskable = .rodata:0x8040EFB8; // type:object size:0x20 scope:global -_vt.10PathFinder = .rodata:0x8040EFD8; // type:object size:0x20 scope:global -_vt.11AStarSearch = .rodata:0x8040EFF8; // type:object size:0x18 scope:global -_vt.8WRoadNav = .rodata:0x8040F010; // type:object size:0x18 scope:global -drivable_lanes = .rodata:0x8040F0B8; // type:object size:0x20 scope:local -selectable_lanes = .rodata:0x8040F0D8; // type:object size:0x20 scope:local -_vt.Q43UTL11Collectionst8Listable2Z9WCollideri100_4List = .rodata:0x8040F0F8; // type:object size:0x40 scope:global -_vt.Q23UTLt11FixedVector3ZP9WCollideri100i16 = .rodata:0x8040F138; // type:object size:0x40 scope:global -_vt.Q23UTLt6Vector2ZP9WCollideri16 = .rodata:0x8040F178; // type:object size:0x40 scope:global -_ctype_ = .rodata:0x8040F1D8; // type:object size:0x101 scope:global -blanks.29 = .rodata:0x8040FBB8; // type:object size:0x10 scope:local -zeroes.30 = .rodata:0x8040FBC8; // type:object size:0x10 scope:local -blanks.12 = .rodata:0x8040FC48; // type:object size:0x10 scope:local -zeroes.13 = .rodata:0x8040FC58; // type:object size:0x10 scope:local -lconv = .rodata:0x8040FCD8; // type:object size:0x30 scope:local -Zero = .rodata:0x8040FD40; // type:object size:0x10 scope:local -...rodata.0 = .rodata:0x8040FED0; // type:label scope:local -ClampRegion = .rodata:0x8040FED0; // type:object size:0xA scope:local -_vt.Q24RCMP7DECODER = .rodata:0x80410158; // type:object size:0x18 scope:global -_vt.Q24RCMP11RCMP_SYSTEM = .rodata:0x80410170; // type:object size:0x18 scope:global -_vt.18VP6_CODEC_INTERNAL = .rodata:0x80410230; // type:object size:0x40 scope:global -_vt.Q24RCMP5CODEC = .rodata:0x80410270; // type:object size:0x40 scope:global -_vt.11MyAllocator = .rodata:0x804102B0; // type:object size:0x38 scope:global -_vt.18MAD_CODEC_INTERNAL = .rodata:0x80410400; // type:object size:0x40 scope:global -_88_GLOBAL_.N.D__env_egami_rcmp_dev_source_decoder_cmn_rcmp_mad_codec_chunk_types.cppczaaaa.ChunkTypes = .rodata:0x8041045C; // type:object size:0xC scope:local -encodetbl1 = .rodata:0x80410468; // type:object size:0x5F0 scope:local -encodetbl2 = .rodata:0x80410A58; // type:object size:0x800 scope:local -quanttbl = .rodata:0x80411258; // type:object size:0x100 scope:local -zigzag = .rodata:0x80411358; // type:object size:0x100 scope:local -VP6_QThreshTable = .rodata:0x804114A8; // type:object size:0x100 scope:local -VP6_UvQThreshTable = .rodata:0x804115A8; // type:object size:0x100 scope:local -VP6_DcQuant = .rodata:0x804116A8; // type:object size:0x80 scope:global -VP6_UvDcQuant = .rodata:0x80411728; // type:object size:0x80 scope:local -dequant_index = .rodata:0x804117A8; // type:object size:0x100 scope:local -transIndexC = .rodata:0x804118A8; // type:object size:0x100 scope:local -DeblockLimitValuesV1 = .rodata:0x804119D0; // type:object size:0x100 scope:local -VP6_TokenExtraBits2 = .rodata:0x80411AF4; // type:object size:0xC0 scope:local -VP6_CoeffToBand = .rodata:0x80411BB4; // type:object size:0x104 scope:global -VP6_ModeVq = .rodata:0x80411CB8; // type:object size:0x3C0 scope:global -VP6_BaselineXmittedProbs = .rodata:0x80412078; // type:object size:0x50 scope:global -VP6_MvUpdateProbs = .rodata:0x804120C8; // type:object size:0x22 scope:global -DefaultMvShortProbs = .rodata:0x804120EA; // type:object size:0xE scope:global -DefaultMvLongProbs = .rodata:0x804120F8; // type:object size:0x10 scope:global -NearMacroBlocks = .rodata:0x80412108; // type:object size:0x60 scope:local -dequant_index = .rodata:0x80412168; // type:object size:0x100 scope:local -VP6_DcUpdateProbs = .rodata:0x80412268; // type:object size:0x16 scope:global -ScanBandUpdateProbs = .rodata:0x80412280; // type:object size:0x40 scope:global -ZrlUpdateProbs = .rodata:0x804122C0; // type:object size:0x1C scope:global -ZeroRunProbDefaults = .rodata:0x804122DC; // type:object size:0x1C scope:global -VP6_AcUpdateProbs = .rodata:0x804122F8; // type:object size:0x18C scope:global -VP6_DcNodeEqs = .rodata:0x80412484; // type:object size:0x78 scope:local -VP6_HuffTokenMinVal = .rodata:0x804124FC; // type:object size:0x30 scope:local -VP6_CoeffToHuffBand = .rodata:0x8041252C; // type:object size:0x104 scope:local -DefaultNonInterlacedScanBands = .rodata:0x80412630; // type:object size:0x40 scope:global -DefaultInterlacedScanBands = .rodata:0x80412670; // type:object size:0x40 scope:global -VP6_Mode2Frame = .rodata:0x804126B0; // type:object size:0x40 scope:global -loMaskTbl_VP60 = .rodata:0x804126F0; // type:object size:0x84 scope:local -_3Snd.gChannelToVoiceIndexLut = .rodata:0x80412908; // type:object size:0x24 scope:global -_3Snd.gAzimuthFoldDownLut = .rodata:0x80412CC8; // type:object size:0x90 scope:global -_3Snd.gAzimuthSpacingsLut = .rodata:0x80412D58; // type:object size:0x24 scope:global -_vt.Q24Csis24ICoreToIAllocatorAdaptor = .rodata:0x804130B0; // type:object size:0x28 scope:global -_vt.Q24Csis24IAllocatorToICoreAdaptor = .rodata:0x804130D8; // type:object size:0x38 scope:global -_vt.10PathToReal = .rodata:0x80413168; // type:object size:0x78 scope:global -_vt.Q24Path11IPathToReal = .rodata:0x804131E0; // type:object size:0x78 scope:global -_vt.11PathToReal6 = .rodata:0x80413278; // type:object size:0x78 scope:global -_vt.Q24Path16PathTrackSndBank = .rodata:0x80413370; // type:object size:0x138 scope:global -_vt.Q24Path18PathTrackSndStream = .rodata:0x804134A8; // type:object size:0x138 scope:global -_vt.Q24Path12PathTrackSnd = .rodata:0x804135E0; // type:object size:0x128 scope:global -_vt.Q24Path9PathToSnd = .rodata:0x80413708; // type:object size:0x30 scope:global -_vt.Q24Path10IPathToSnd = .rodata:0x80413738; // type:object size:0x30 scope:global -_vt.Q24Path10IPathTrack = .rodata:0x80413778; // type:object size:0x128 scope:global -_vt.13SizeOperation = .rodata:0x80413AE0; // type:object size:0x30 scope:global -_vt.14WriteOperation = .rodata:0x80413B10; // type:object size:0x30 scope:global -_vt.18ReadLargeOperation = .rodata:0x80413B40; // type:object size:0x30 scope:global -_vt.13ReadOperation = .rodata:0x80413B70; // type:object size:0x30 scope:global -_vt.14CloseOperation = .rodata:0x80413BA0; // type:object size:0x30 scope:global -_vt.13OpenOperation = .rodata:0x80413BD0; // type:object size:0x30 scope:global -_vt.14ExistOperation = .rodata:0x80413C00; // type:object size:0x30 scope:global -_vt.13FILEOPERATION = .rodata:0x80413C30; // type:object size:0x30 scope:global -_vt.14NullFileDriver = .rodata:0x80413C68; // type:object size:0x80 scope:global -_vt.21GcDvdFileDeviceDriver = .rodata:0x80413DB0; // type:object size:0x80 scope:global -_vt.20GcHdFileDeviceDriver = .rodata:0x80413E38; // type:object size:0x80 scope:global -_9RealShape.gTexelTypeToBpp = .rodata:0x80414010; // type:object size:0x100 scope:local -_vt.Q26Realmc9GCMessage = .rodata:0x804143E0; // type:object size:0x18 scope:global -_vt.Q26Realmc8GCDriver = .rodata:0x80414450; // type:object size:0x18 scope:global -_vt.Q26Realmc16GcFileDescriptor = .rodata:0x80414468; // type:object size:0x20 scope:global -_vt.Q26Realmc17CmnFileDescriptor = .rodata:0x80414488; // type:object size:0x20 scope:global -_vt.Q26Realmc12DeviceDriver = .rodata:0x804144A8; // type:object size:0x18 scope:global -_vt.Q26Realmc11GCInterface = .rodata:0x80414530; // type:object size:0x110 scope:global -_vt.Q26Realmc17TaskTrcDeleteFile = .rodata:0x80414640; // type:object size:0x20 scope:global -_vt.Q26Realmc15TaskTrcLoadFile = .rodata:0x80414660; // type:object size:0x20 scope:global -_vt.Q26Realmc16TaskTrcListFiles = .rodata:0x80414680; // type:object size:0x20 scope:global -_vt.Q26Realmc15TaskTrcSaveFile = .rodata:0x804146A0; // type:object size:0x20 scope:global -_vt.Q26Realmc18TaskTrcGetCardInfo = .rodata:0x804146C0; // type:object size:0x20 scope:global -_vt.Q26Realmc16TaskTrcStartGame = .rodata:0x804146E0; // type:object size:0x20 scope:global -_vt.Q26Realmc7TaskTrc = .rodata:0x80414700; // type:object size:0x20 scope:global -_vt.Q26Realmc6GcTask = .rodata:0x80414720; // type:object size:0x18 scope:global -_vt.Q26Realmc11TaskManager = .rodata:0x80414738; // type:object size:0x28 scope:global -_vt.Q26Realmc15BlockCalculator = .rodata:0x80414760; // type:object size:0x30 scope:global -_vt.Q26Realmc12InterfaceImp = .rodata:0x804147F0; // type:object size:0x110 scope:global -_vt.Q26Realmc13BaseInterface = .rodata:0x80414900; // type:object size:0xE8 scope:global -_vt.Q26Realmc18BlockCalculatorImp = .rodata:0x804149E8; // type:object size:0x30 scope:global -_vt.Q29RealInput8GcEffect = .rodata:0x80414B40; // type:object size:0x58 scope:global -_vt.Q29RealInput9EffectImp = .rodata:0x80414B98; // type:object size:0x58 scope:global -_vt.Q29RealInput9Interface = .rodata:0x80414BF0; // type:object size:0x50 scope:global -_vt.Q29RealInput8GcDevice = .rodata:0x80414C40; // type:object size:0x50 scope:global -_vt.Q29RealInput9DeviceImp = .rodata:0x80414C90; // type:object size:0x50 scope:global -_vt.Q29RealInput11GcInterface = .rodata:0x80414CE0; // type:object size:0x50 scope:global -_vt.Q29RealInput5GcPad = .rodata:0x80414D30; // type:object size:0x50 scope:global -_vt.Q29RealInput12InterfaceImp = .rodata:0x80414D80; // type:object size:0x50 scope:global -_vt.Q29RealInput6Device = .rodata:0x80414DD0; // type:object size:0x50 scope:global -_vt.Q29RealInput6Effect = .rodata:0x80414E20; // type:object size:0x48 scope:global -_vt.Q29RealInput5Event = .rodata:0x80414E68; // type:object size:0x18 scope:global -_vt.Q29RealInput10EventQueue = .rodata:0x80414E80; // type:object size:0x18 scope:global -RandomSortTCDir = .data:0x8041522C; // type:object size:0x4 scope:local -_7ICopMgr.mDisableCops = .data:0x8041525C; // type:object size:0x4 scope:global -_12AICopManager.mCopMinSpawnDist = .data:0x80415264; // type:object size:0x4 scope:global -_12AICopManager.mCopMaxSpawnDist = .data:0x80415268; // type:object size:0x4 scope:global -TheOneCopManager = .data:0x8041526C; // type:object size:0x4 scope:global -ebrakegoals = .data:0x80415270; // type:object size:0x4 scope:global -coebrakegoals = .data:0x80415274; // type:object size:0x8 scope:global -ramgoals = .data:0x8041527C; // type:object size:0x8 scope:global -hrblockgoals = .data:0x80415284; // type:object size:0x10 scope:global -crossfollowgoals = .data:0x80415294; // type:object size:0x4 scope:global -crossbrakegoals = .data:0x80415298; // type:object size:0x4 scope:global -crossvblockgoals = .data:0x8041529C; // type:object size:0xC scope:global -_Q23SAPt4Grid1Z11AIAvoidable.mRootX = .data:0x804152AC; // type:object size:0x4 scope:global -_Q23SAPt4Grid1Z11AIAvoidable.mRootZ = .data:0x804152B0; // type:object size:0x4 scope:global -aAIStoppingDist = .data:0x804152B4; // type:object size:0x8 scope:global -brakeLeft.32036 = .data:0x804152BC; // type:object size:0x4 scope:local -NeverIgnoreHeliSheet = .data:0x804152C4; // type:object size:0x4 scope:global -Exit_Height = .data:0x804152CC; // type:object size:0x4 scope:global -brakeLeft.32301 = .data:0x804152D0; // type:object size:0x4 scope:local -brakeLeft.32341 = .data:0x804152D4; // type:object size:0x4 scope:local -kActionJackKnifeSpeed = .data:0x804152D8; // type:object size:0x4 scope:global -aNosScaleData = .data:0x804152E4; // type:object size:0x8 scope:global -aSpeedScaleData = .data:0x804152EC; // type:object size:0x8 scope:global -aSpeedScaleDataDrag = .data:0x804152F4; // type:object size:0x8 scope:global -aAccelScaleData = .data:0x804152FC; // type:object size:0x8 scope:global -aAccelScaleDataDrag = .data:0x80415304; // type:object size:0x8 scope:global -AiCatchupAccelerationData = .data:0x8041530C; // type:object size:0x10 scope:global -aCorneringScaleData = .data:0x8041531C; // type:object size:0x8 scope:global -aAiNavLookAheadData = .data:0x80415324; // type:object size:0x8 scope:global -aAiDragNavLookAheadData = .data:0x8041532C; // type:object size:0x8 scope:global -aAiSeparationMin = .data:0x80415334; // type:object size:0x14 scope:global -aHumanNavLookAheadData = .data:0x80415354; // type:object size:0x8 scope:global -aHumanDragNavLookAheadData = .data:0x8041535C; // type:object size:0x8 scope:global -bToggleAiControl = .data:0x80415364; // type:object size:0x4 scope:global -TotalWalkPathTime = .data:0x80415368; // type:object size:0x4 scope:global -_13AIPerpVehicle.mStagger = .data:0x8041536C; // type:object size:0x4 scope:global -nThrottleIntegralTerms = .data:0x80415378; // type:object size:0x4 scope:global -nThrottleDerivativeTerms = .data:0x8041537C; // type:object size:0x4 scope:global -PidProportionalData = .data:0x80415380; // type:object size:0x28 scope:global -PidDerivativeData = .data:0x804153A8; // type:object size:0x28 scope:global -PidIntegralData = .data:0x804153D0; // type:object size:0x28 scope:global -_16AIVehicleTraffic.mStagger = .data:0x80415408; // type:object size:0x4 scope:global -_16AIVehiclePursuit.mStagger = .data:0x8041540C; // type:object size:0x4 scope:global -gHeliVehicle = .data:0x80415410; // type:object size:0x4 scope:global -kHeliVisualSphere = .data:0x80415418; // type:object size:0x4 scope:global -height.36345 = .data:0x80415424; // type:object size:0x4 scope:local -bIgnoreHeliSheet = .data:0x80415428; // type:object size:0x4 scope:global -_Q43UTL3COMt7Factory3ZP14AIActionParamsZ8AIActionZ6UCrc32_9Prototype.mHead = .data:0x8041542C; // type:object size:0x4 scope:global -_Q43UTL3COMt7Factory3ZP8ISimableZ6AIGoalZ6UCrc32_9Prototype.mHead = .data:0x80415430; // type:object size:0x4 scope:global -kBustedHUDTime = .data:0x80415434; // type:object size:0x4 scope:global -_14AISpawnManager.mMaxGatherDist = .data:0x8041547C; // type:object size:0x4 scope:global -_14AISpawnManager.mNumSpawnSegments = .data:0x80415480; // type:object size:0x4 scope:global -lastSpawnLane.38662 = .data:0x80415484; // type:object size:0x4 scope:local -currentSegmentIndex.38672 = .data:0x80415488; // type:object size:0x4 scope:local -spawnSegmentIndex.38673 = .data:0x8041548C; // type:object size:0x4 scope:local -currentSpawnIndex.38674 = .data:0x80415490; // type:object size:0x4 scope:local -_Q33UTL11Collectionst9Singleton1Z3Gps.mInstance = .data:0x80415494; // type:object size:0x4 scope:global -AnimBankSlotPool = .data:0x804154C0; // type:object size:0x4 scope:global -AnimBankSlotPoolInitialized = .data:0x804154C4; // type:object size:0x4 scope:global -SpecialCarList1 = .data:0x804154C8; // type:object size:0x20 scope:global -SpecialCarList2 = .data:0x804154E8; // type:object size:0x20 scope:global -SpecialCarList3 = .data:0x80415508; // type:object size:0x20 scope:global -SpecialCarList4 = .data:0x80415528; // type:object size:0x20 scope:global -SpecialCarList5 = .data:0x80415548; // type:object size:0x20 scope:global -SpecialCarList6 = .data:0x80415568; // type:object size:0x20 scope:global -SpecialCarList7 = .data:0x80415588; // type:object size:0x20 scope:global -SpecialCarList8 = .data:0x804155A8; // type:object size:0x20 scope:global -SpecialCarList9 = .data:0x804155C8; // type:object size:0x20 scope:global -TheAnimCandidateData = .data:0x804155EC; // type:object size:0x4 scope:global -AngleBonusValue = .data:0x804155F0; // type:object size:0x4 scope:global -g_TriggerMomentNISTime = .data:0x80415670; // type:object size:0x4 scope:global -Tweak_TriggerMomentAlways = .data:0x80415674; // type:object size:0x4 scope:global -AnimCtrlSlotPool = .data:0x80415680; // type:object size:0x4 scope:global -Anim_Apply_Trans = .data:0x80415688; // type:object size:0x4 scope:global -Anim_Apply_Rots = .data:0x8041568C; // type:object size:0x4 scope:global -Anim_Apply_Scales = .data:0x80415690; // type:object size:0x4 scope:global -TheAnimDirectory = .data:0x80415694; // type:object size:0x4 scope:global -RenderCharacterShadows = .data:0x80415698; // type:object size:0x4 scope:global -CharacterShadowTexture = .data:0x8041569C; // type:object size:0x4 scope:global -BoneMap = .data:0x804156A0; // type:object size:0x50 scope:global -DisableWorldAnimations = .data:0x804156F0; // type:object size:0x4 scope:global -NumWorldAnimEntities = .data:0x804156F4; // type:object size:0x4 scope:local -MaxNumWorldAnimEntities = .data:0x804156F8; // type:object size:0x4 scope:local -NumWorldAnimEntityTrees = .data:0x804156FC; // type:object size:0x4 scope:local -MaxNumWorldAnimEntityTrees = .data:0x80415700; // type:object size:0x4 scope:local -NumWorldAnimEntityTreeInfos = .data:0x80415704; // type:object size:0x4 scope:local -MaxNumWorldAnimEntityTreeInfos = .data:0x80415708; // type:object size:0x4 scope:local -gNISSceneAngle = .data:0x8041570C; // type:object size:0x2 scope:global -_11CAnimPlayer.m_audioQueued = .data:0x80415710; // type:object size:0x4 scope:global -_13CAnimSettings.mDebugPrintEnabled = .data:0x80415714; // type:object size:0x4 scope:global -_11CAnimMarker.mMarkerHash_StartCountdown = .data:0x80415718; // type:object size:0x4 scope:global -gAnimLoader_InProgress = .data:0x8041571C; // type:object size:0x4 scope:local -gAnimLoader_CurSharedFilePosition = .data:0x80415720; // type:object size:0x4 scope:local -gAnimLoader_CurSceneFilePosition = .data:0x80415724; // type:object size:0x4 scope:local -gAnimLoader_MemPointer = .data:0x80415728; // type:object size:0x4 scope:local -gAnimLoader_MovingPointer = .data:0x8041572C; // type:object size:0x4 scope:local -gAnimLoader_UsingMemoryPool = .data:0x80415730; // type:object size:0x4 scope:local -gAnimCfg_Small_NIS_Size = .data:0x80415734; // type:object size:0x4 scope:global -gCopCarDoorAnim_CurrentTime = .data:0x80415738; // type:object size:0x10 scope:global -gCopCarDoorAnim_AnimLength = .data:0x80415748; // type:object size:0x10 scope:global -gCopCarDoorAnim_StartPos = .data:0x80415758; // type:object size:0x10 scope:global -gCopCarDoorAnim_Delta = .data:0x80415768; // type:object size:0x10 scope:global -AnimPartSlotPool = .data:0x80415778; // type:object size:0x4 scope:global -bEnableNisTextDisplay = .data:0x80415784; // type:object size:0x4 scope:global -_26CAnimEntityCreationContext.mIsRaceStart = .data:0x80415788; // type:object size:0x4 scope:global -_10CAnimScene.mHandleCounter = .data:0x80415790; // type:object size:0x4 scope:global -Car_Name = .data:0x80415794; // type:object size:0x100 scope:global -AnimSkelSlotPool = .data:0x80415894; // type:object size:0x4 scope:global -AnimSkelSlotPoolInitialized = .data:0x80415898; // type:object size:0x4 scope:global -PrintWorldAnimationStuff = .data:0x8041589C; // type:object size:0x4 scope:global -NumWorldAnimCtrls = .data:0x804158A4; // type:object size:0x4 scope:local -MaxNumWorldAnimCtrls = .data:0x804158A8; // type:object size:0x4 scope:local -NumWorldAnimInstanceEntries = .data:0x804158AC; // type:object size:0x4 scope:local -MaxWorldAnimInstances = .data:0x804158B0; // type:object size:0x4 scope:local -_6Attrib.gSearchCacheLines = .data:0x804158D8; // type:object size:0x4 scope:local -_6Attrib.gTotalAttribNodes = .data:0x804158DC; // type:object size:0x4 scope:local -_6Attrib.gByValueBytes = .data:0x804158E0; // type:object size:0x4 scope:local -_6Attrib.gDatabaseSelfDestruct = .data:0x804158E8; // type:object size:0x4 scope:local -_Q26Attrib8Database.sThis = .data:0x804158EC; // type:object size:0x4 scope:global -_6Attrib.gDatabaseExportPolicy = .data:0x804158F0; // type:object size:0x4 scope:local -_6Attrib.gClassExportPolicy = .data:0x804158F4; // type:object size:0x4 scope:local -_6Attrib.gCollectionExportPolicy = .data:0x804158F8; // type:object size:0x4 scope:local -_6Attrib.gExportPolicies = .data:0x804158FC; // type:object size:0x4 scope:local -gGUKindexer.4751 = .data:0x80415900; // type:object size:0x4 scope:local -_6Attrib.gPeakMemory = .data:0x80415904; // type:object size:0x4 scope:local -_6Attrib.gCurrMemory = .data:0x80415908; // type:object size:0x4 scope:local -EnableReleasePrintf = .data:0x80415938; // type:object size:0x4 scope:global -UserPutStringFunction = .data:0x8041593C; // type:object size:0x4 scope:global -InUserPutStringFunction = .data:0x80415940; // type:object size:0x4 scope:global -bPNodeSlotPool = .data:0x8041594C; // type:object size:0x4 scope:global -bPListWantToClose = .data:0x80415950; // type:object size:0x4 scope:global -bDefaultSeed = .data:0x80415958; // type:object size:0x4 scope:global -bASinTable = .data:0x8041595C; // type:object size:0x688 scope:global -bFastATanTable = .data:0x80415FE4; // type:object size:0x204 scope:global -bFixATanTableLow = .data:0x804161EA; // type:object size:0x102 scope:global -bFixATanTableHigh = .data:0x804162EC; // type:object size:0x102 scope:global -_nan_table = .data:0x804163F0; // type:object size:0x10 scope:global -nullstr = .data:0x80416400; // type:object size:0x4 scope:local -badptr = .data:0x80416404; // type:object size:0x4 scope:local -g_locale = .data:0x80416408; // type:object size:0x3 scope:local -bPutCharBufferPos = .data:0x8041640C; // type:object size:0x4 scope:local -bVSPrintfTime = .data:0x80416410; // type:object size:0x4 scope:global -bVSPrintfCount = .data:0x80416414; // type:object size:0x4 scope:global -bMemoryAutomaticVerifyPoolIntegrity = .data:0x80416418; // type:object size:0x4 scope:global -bMemoryRandomFillPattern = .data:0x80416430; // type:object size:0x4 scope:global -bMemoryTracing = .data:0x80416438; // type:object size:0x4 scope:global -bMemoryBreakOnAllocationNumber = .data:0x8041643C; // type:object size:0x4 scope:global -bMemoryAllocationNumber = .data:0x80416440; // type:object size:0x4 scope:global -found_memory_stomp_once.3842 = .data:0x80416448; // type:object size:0x4 scope:local -pTraceDebugText = .data:0x80416450; // type:object size:0x4 scope:global -TraceDebugLine = .data:0x80416454; // type:object size:0x4 scope:global -MemoryInitialized = .data:0x80416458; // type:object size:0x4 scope:global -MemoryPoolZeroSize = .data:0x8041645C; // type:object size:0x4 scope:global -bMemoryPersistentPoolNumber = .data:0x80416460; // type:object size:0x4 scope:global -_6Camera.StopUpdating = .data:0x80416488; // type:object size:0x4 scope:global -cameralink.3469 = .data:0x8041648C; // type:object size:0x4 scope:local -bStreamingPositionFromICE = .data:0x804164C4; // type:object size:0x4 scope:global -JR2ServerExists = .data:0x804164CC; // type:object size:0x4 scope:global -WeHaveCheckedIfJR2ServerExists = .data:0x804164D0; // type:object size:0x4 scope:global -LastUpdateTimeCaffeine = .data:0x804164D4; // type:object size:0x4 scope:global -LastUpdateTimeJR2 = .data:0x804164D8; // type:object size:0x4 scope:global -CameraDebugWatchCar = .data:0x8041652C; // type:object size:0x4 scope:global -Tweak_EnableICEAuthoring = .data:0x80416530; // type:object size:0x4 scope:global -Tweak_ForceICEReplay = .data:0x80416534; // type:object size:0x4 scope:global -TheAvoidables = .data:0x80416550; // type:object size:0x4 scope:global -_Q43UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32_9Prototype.mHead = .data:0x80416554; // type:object size:0x4 scope:global -kCinematicMomementSeconds = .data:0x8041655C; // type:object size:0x4 scope:local -gCinematicMomementCamera = .data:0x80416560; // type:object size:0x4 scope:global -gGameBreakerCamera = .data:0x80416564; // type:object size:0x4 scope:global -gCamCloseToRoadBlock = .data:0x80416568; // type:object size:0x4 scope:global -old_pov.29797 = .data:0x8041656C; // type:object size:0x4 scope:local -mToggleCar = .data:0x80416570; // type:object size:0x4 scope:global -mToggleCarList = .data:0x80416574; // type:object size:0x4 scope:global -CubicBumper = .data:0x80416578; // type:object size:0x160 scope:global -CubicHood = .data:0x804166D8; // type:object size:0x160 scope:global -CubicOutsideNear = .data:0x80416838; // type:object size:0x160 scope:global -CubicOutsideFar = .data:0x80416998; // type:object size:0x160 scope:global -CubicSuperFar = .data:0x80416AF8; // type:object size:0x160 scope:global -CubicDrift = .data:0x80416C58; // type:object size:0x160 scope:global -CubicPursuit = .data:0x80416DB8; // type:object size:0x160 scope:global -PovHandheldNoiseScale = .data:0x80416F18; // type:object size:0x1C scope:global -PovHandheldChopperScale = .data:0x80416F34; // type:object size:0x1C scope:global -PovVelocityNoiseScale = .data:0x80416F50; // type:object size:0x1C scope:global -PovTerrainNoiseScale = .data:0x80416F6C; // type:object size:0x1C scope:global -CameraAccelerationCurve = .data:0x80416F88; // type:object size:0x14 scope:global -CameraGearChangingCurve = .data:0x80416F9C; // type:object size:0x24 scope:global -CameraImpcatCurveH = .data:0x80416FC0; // type:object size:0x14 scope:global -CameraImpcatCurveV = .data:0x80416FD4; // type:object size:0x14 scope:global -TrackCopCameraMover_IdleSim = .data:0x80416FF0; // type:object size:0x4 scope:global -gDebugCameraSetEye = .data:0x80416FF8; // type:object size:0x4 scope:global -gDebugCameraSetLook = .data:0x80416FFC; // type:object size:0x4 scope:global -_21DebugWorldCameraMover.TurboSpeed = .data:0x80417000; // type:object size:0x4 scope:global -_21DebugWorldCameraMover.SuperTurboSpeed = .data:0x80417004; // type:object size:0x4 scope:global -_21DebugWorldCameraMover.TurboOn = .data:0x8041700C; // type:object size:0x4 scope:global -_21DebugWorldCameraMover.SuperTurboOn = .data:0x80417010; // type:object size:0x4 scope:global -fDebugCameraInputData = .data:0x80417014; // type:object size:0x28 scope:global -RVMnearz = .data:0x8041703C; // type:object size:0x4 scope:global -RVMfarz = .data:0x80417040; // type:object size:0x4 scope:global -bMirrorICEData = .data:0x80417044; // type:object size:0x4 scope:global -bUseOldDutch = .data:0x80417048; // type:object size:0x4 scope:global -GenericCategoryNames = .data:0x8041704C; // type:object size:0x8 scope:local -gIceOverlays = .data:0x8041705C; // type:object size:0x28 scope:global -gOverlay = .data:0x80417084; // type:object size:0x1 scope:local -_Q38Dynamics12Articulation5Joint.mNextHandle = .data:0x804170C8; // type:object size:0x4 scope:global -_13EAGL4Internal.gEAGL4ANIM_Malloc = .data:0x804170F4; // type:object size:0x4 scope:global -_13EAGL4Internal.gEAGL4ANIM_Free = .data:0x804170F8; // type:object size:0x4 scope:global -_13EAGL4Internal.EAGL4Malloc = .data:0x804170FC; // type:object size:0x4 scope:global -_13EAGL4Internal.EAGL4Free = .data:0x80417100; // type:object size:0x4 scope:global -_5EAGL4.hashhead = .data:0x80417108; // type:object size:0x4 scope:local -_5EAGL4.INIT_TABLE_SIZE = .data:0x80417114; // type:object size:0x4 scope:global -_Q29EAGL4Anim6FnAnim.gReverseDeltaSumEnabled = .data:0x80417118; // type:object size:0x4 scope:global -_Q29EAGL4Anim13FnAnimFactory.mpFactory = .data:0x8041711C; // type:object size:0x4 scope:global -i.6840 = .data:0x80417120; // type:object size:0x4 scope:local -_Q29EAGL4Anim17MemoryPoolManager.gDefaultMemoryManager = .data:0x80417124; // type:object size:0x4 scope:global -_Q29EAGL4Anim17MemoryPoolManager.gMemoryManager = .data:0x80417128; // type:object size:0x4 scope:global -_Q29EAGL4Anim17MemoryPoolManager.gFreeListSize = .data:0x8041712C; // type:object size:0x32 scope:global -_9EAGL4Anim.MatrixMultiply = .data:0x80417160; // type:object size:0x4 scope:global -_Q29EAGL4Anim17MemoryPoolManager.gMemoryPool = .data:0x80417168; // type:object size:0x4 scope:global -_Q29EAGL4Anim17MemoryPoolManager.gMemoryPoolFree = .data:0x8041716C; // type:object size:0x4 scope:global -_Q29EAGL4Anim17MemoryPoolManager.gMemoryPoolSize = .data:0x80417170; // type:object size:0x4 scope:global -_Q29EAGL4Anim17MemoryPoolManager.gMaxIdx = .data:0x80417174; // type:object size:0x2 scope:global -_Q29EAGL4Anim17MemoryPoolManager.gFreeList = .data:0x80417178; // type:object size:0x68 scope:global -_Q29EAGL4Anim17MemoryPoolManager.gSizeFreeList = .data:0x804171E0; // type:object size:0x400 scope:global -PlayerUpgrade.14976 = .data:0x80417634; // type:object size:0x4 scope:local -AudioMemoryPool = .data:0x80417650; // type:object size:0x4 scope:global -gbHasStartNewGamePlayBeenProcessed = .data:0x80417690; // type:object size:0x4 scope:global -gnHasStartLoadFEBeenProcessed = .data:0x80417694; // type:object size:0x4 scope:global -gIsPauseForPause = .data:0x80417698; // type:object size:0x4 scope:global -g_pEAXSound = .data:0x8041769C; // type:object size:0x4 scope:global -g_pcsCSISAllocString = .data:0x804176A8; // type:object size:0x4 scope:global -NullPointer = .data:0x804176AC; // type:object size:0x4 scope:global -g_fMasterSFXVolume = .data:0x804176B0; // type:object size:0x4 scope:global -g_iMasterSFXVolume = .data:0x804176B4; // type:object size:0x4 scope:global -SoundRandomSeed = .data:0x804176DC; // type:object size:0x4 scope:global -gb_DORESTART_RACE = .data:0x804176E0; // type:object size:0x4 scope:global -gb_Is321 = .data:0x804176E4; // type:object size:0x4 scope:global -g_ActiveCtlStates = .data:0x804176E8; // type:object size:0x4 scope:global -g_PrevActiveCtlStates = .data:0x804176EC; // type:object size:0x4 scope:global -g_ActiveSFXStates = .data:0x804176F0; // type:object size:0x4 scope:global -g_PrevActiveSFXStates = .data:0x804176F4; // type:object size:0x4 scope:global -g_CtlStateActions = .data:0x804176F8; // type:object size:0x48 scope:global -g_SliderValue = .data:0x80417740; // type:object size:0x4 scope:global -bIsAnFEToIngameTransition = .data:0x80417744; // type:object size:0x4 scope:global -bHasStartNewGameOccured = .data:0x80417748; // type:object size:0x4 scope:global -bIsMapInQueuedFileLoad = .data:0x8041774C; // type:object size:0x4 scope:global -DisableSoundUpdate = .data:0x8041776C; // type:object size:0x4 scope:global -bStreamBlockState = .data:0x80417778; // type:object size:0x4 scope:global -bAudioInterrupt = .data:0x8041777C; // type:object size:0x4 scope:global -bStreamReadTiming = .data:0x80417780; // type:object size:0x4 scope:global -uStreamBlockTicks = .data:0x80417784; // type:object size:0x4 scope:global -uStreamReadTicks = .data:0x80417788; // type:object size:0x4 scope:global -uAudioInterruptTicks = .data:0x8041778C; // type:object size:0x4 scope:global -bHasDataLoadOccured = .data:0x804177B8; // type:object size:0x4 scope:global -RUN_SOUND_STATE = .data:0x804177C0; // type:object size:0x4 scope:global -DISABLE_SLOT_LOADING = .data:0x804177D4; // type:object size:0x4 scope:global -g_DataPaths = .data:0x804177D8; // type:object size:0x34 scope:global -StartBankLoadTicks = .data:0x8041780C; // type:object size:0x4 scope:global -Debug_Common_FE_OFF = .data:0x8041781C; // type:object size:0x4 scope:global -_13EAXAITunerCar.s_StateInfo = .data:0x80417830; // type:object size:0x10 scope:global -_9EAXCopCar.s_StateInfo = .data:0x80417844; // type:object size:0x10 scope:global -_8EAXTruck.s_StateInfo = .data:0x80417854; // type:object size:0x10 scope:global -_13EAXTrafficCar.s_StateInfo = .data:0x80417864; // type:object size:0x10 scope:global -_11EAXTunerCar.s_StateInfo = .data:0x80417874; // type:object size:0x10 scope:global -counter.33705 = .data:0x80417890; // type:object size:0x4 scope:local -MAIN_SAMPLERATE = .data:0x80417894; // type:object size:0x4 scope:global -RoadNoiseVolumes = .data:0x804178C0; // type:object size:0x24 scope:global -_15cSTICH_PlayBack.mSampleRefSlotPool = .data:0x804178E8; // type:object size:0x4 scope:global -_15cSTICH_PlayBack.mStitchSlotPool = .data:0x804178EC; // type:object size:0x4 scope:global -GlobalStichSizes = .data:0x804178F4; // type:object size:0x4 scope:global -_Q43UTL3COMt7Factory3ZRCQ25Sound16AudioEventParamsZQ25Sound10AudioEventZUi9Prototype.mHead = .data:0x804178FC; // type:object size:0x4 scope:global -btestprint = .data:0x80417900; // type:object size:0x4 scope:global -INCREASE_MUSICSTREAM_BLOCKS = .data:0x80417904; // type:object size:0x4 scope:global -INCREASE_NISSFXSTRM_BLOCKS = .data:0x80417908; // type:object size:0x4 scope:global -gpEAXS_StrmMgr = .data:0x8041790C; // type:object size:0x4 scope:global -utickreadcallback = .data:0x80417914; // type:object size:0x4 scope:global -uTicksSinceLastAudioReadBailed = .data:0x80417918; // type:object size:0x4 scope:global -_6SFXCTL.s_TypeInfo = .data:0x8041791C; // type:object size:0x10 scope:global -PRINT_SKID_FX_DEBUG = .data:0x8041792C; // type:object size:0x4 scope:global -_12SFXCTL_Wheel.s_TypeInfo = .data:0x80417930; // type:object size:0x10 scope:global -gfTireOffsetDist = .data:0x80417940; // type:object size:0x4 scope:global -gfTireFwdOffsetDist = .data:0x80417944; // type:object size:0x4 scope:global -gWheelSlipSensitivity = .data:0x80417948; // type:object size:0x8 scope:global -gWheelLoadThreshold = .data:0x80417950; // type:object size:0x8 scope:global -DOWN_SHIFTING_REV_PERCENT = .data:0x80417958; // type:object size:0x4 scope:global -DOWN_SHIFTING_REV_RAMP_TIME = .data:0x8041795C; // type:object size:0x4 scope:global -_15SFXCTL_Shifting.s_TypeInfo = .data:0x80417960; // type:object size:0x10 scope:global -_13SFXCTL_Engine.s_TypeInfo = .data:0x80417970; // type:object size:0x10 scope:global -g_pNISRevMgr = .data:0x80417998; // type:object size:0x4 scope:global -_17SFXCTL_AccelTrans.s_TypeInfo = .data:0x8041799C; // type:object size:0x10 scope:global -_18SFXCTL_HybridMotor.s_TypeInfo = .data:0x804179B8; // type:object size:0x10 scope:global -_14SFXCTL_Physics.s_TypeInfo = .data:0x804179C8; // type:object size:0x10 scope:global -_16SFXCTL_AIPhysics.s_TypeInfo = .data:0x804179D8; // type:object size:0x10 scope:global -_19SFXCTL_TruckPhysics.s_TypeInfo = .data:0x804179EC; // type:object size:0x10 scope:global -_13SFXCTL_Tunnel.m_PlayerZoneType = .data:0x80417A08; // type:object size:0x4 scope:global -TickerTimeStart = .data:0x80417A10; // type:object size:0x4 scope:global -TickerTimeAccum = .data:0x80417A14; // type:object size:0x4 scope:global -_13SFXCTL_Tunnel.s_TypeInfo = .data:0x80417A18; // type:object size:0x10 scope:global -TimeBetweenOcclusionTests = .data:0x80417A28; // type:object size:0x4 scope:global -MaxDistanceToOccludeTest = .data:0x80417A2C; // type:object size:0x4 scope:global -_16SFXCTL_MasterVol.s_TypeInfo = .data:0x80417A30; // type:object size:0x10 scope:global -_16SFXCTL_GameState.s_TypeInfo = .data:0x80417A44; // type:object size:0x10 scope:global -_15SFXCTL_3DColPos.s_TypeInfo = .data:0x80417A54; // type:object size:0x10 scope:global -_18SFXCTL_3DScrapePos.s_TypeInfo = .data:0x80417A64; // type:object size:0x10 scope:global -_15SFXCTL_3DCarPos.s_TypeInfo = .data:0x80417A74; // type:object size:0x10 scope:global -_15SFXCTL_3DObjPos.s_TypeInfo = .data:0x80417A84; // type:object size:0x10 scope:global -_15SFXCTL_3DObjPos.m_pv2AzimRefDir = .data:0x80417A94; // type:object size:0x4 scope:global -_15SFXCTL_3DObjPos.m_pv2AzimRefPos = .data:0x80417A98; // type:object size:0x4 scope:global -_15SFXCTL_3DObjPos.m_CameraAngle = .data:0x80417A9C; // type:object size:0x2 scope:global -POSMIXTYPE = .data:0x80417AB8; // type:object size:0x4 scope:global -_17SFXCTL_Pathfinder.m_pPFParms = .data:0x80417AC4; // type:object size:0x10 scope:global -_17SFXCTL_Pathfinder.s_TypeInfo = .data:0x80417AD4; // type:object size:0x10 scope:global -_17SFXCTL_Pathfinder.m_curinteractive = .data:0x80417AE4; // type:object size:0x4 scope:global -PFXMAP = .data:0x80417AE8; // type:object size:0x2A0 scope:global -_16SFXCTL_3DHeliPos.s_TypeInfo = .data:0x80417D88; // type:object size:0x10 scope:global -_17SFXCTL_Helicopter.s_TypeInfo = .data:0x80417D98; // type:object size:0x10 scope:global -_6EAXCar.g_ShiftInfo = .data:0x80417E2C; // type:object size:0x4 scope:global -_6EAXCar.g_TurboInfo = .data:0x80417E30; // type:object size:0x4 scope:global -_6EAXCar.s_StateInfo = .data:0x80417E34; // type:object size:0x10 scope:global -_9SndCamera.m_pCams = .data:0x80417E4C; // type:object size:0x8 scope:global -_9SndCamera.m_CurCamState = .data:0x80417E54; // type:object size:0x8 scope:global -_9SndCamera.m_PrevCamState = .data:0x80417E5C; // type:object size:0x8 scope:global -_9SndCamera.NumPlayers = .data:0x80417E68; // type:object size:0x4 scope:global -_9SndCamera.m_WorldCarVel = .data:0x80417E6C; // type:object size:0x8 scope:global -_9SndCamera.m_PLayerCars = .data:0x80417E74; // type:object size:0x8 scope:global -_7SndBase.s_TypeInfo = .data:0x80417EA0; // type:object size:0x10 scope:global -_7SndBase.m_fDeltaTime = .data:0x80417EB0; // type:object size:0x4 scope:global -_7SndBase.m_fRunningTime = .data:0x80417EB4; // type:object size:0x4 scope:global -_11CSTATE_Base.s_StateInfo = .data:0x80417EB8; // type:object size:0x10 scope:global -_16CSTATE_Collision.s_StateInfo = .data:0x80417ECC; // type:object size:0x10 scope:global -_11CSTATE_Main.s_StateInfo = .data:0x80417EDC; // type:object size:0x10 scope:global -_14CSTATE_DriveBy.s_StateInfo = .data:0x80417EEC; // type:object size:0x10 scope:global -_12CSTATE_Music.s_StateInfo = .data:0x80417EFC; // type:object size:0x10 scope:global -_17CSTATE_Helicopter.s_StateInfo = .data:0x80417F0C; // type:object size:0x10 scope:global -_19CSTATEMGR_PlayerCar.IsTruck = .data:0x80417F1C; // type:object size:0x4 scope:global -_16SFXCTL_3DRearPos.s_TypeInfo = .data:0x80417F20; // type:object size:0x10 scope:global -DEBUG_TRAFFIC_CAR_CONNECTIONS = .data:0x80417F30; // type:object size:0x4 scope:global -DEBUG_AI_CAR_CONNECTIONS = .data:0x80417F34; // type:object size:0x4 scope:global -_15CSTATEMGR_AICar.bUsingGinsu = .data:0x80417F38; // type:object size:0x4 scope:global -CAMERA_WOOSH_OFFSET = .data:0x80417F40; // type:object size:0x4 scope:global -_18CSTATE_WorldObject.s_StateInfo = .data:0x80417F44; // type:object size:0x10 scope:global -_18CSTATEMGR_CarState.CopsCanBeInGame = .data:0x80417F54; // type:object size:0x4 scope:global -DEBUG_CAR_BANK_TEST_CASE = .data:0x80417F58; // type:object size:0x4 scope:global -ForcePrintResolveInfo = .data:0x80417F5C; // type:object size:0x4 scope:global -LastV8Used.30949 = .data:0x80417F60; // type:object size:0x4 scope:local -_10SFX_Common.s_TypeInfo = .data:0x80417F64; // type:object size:0x10 scope:global -_12CARSFX_Shift.s_TypeInfo = .data:0x80417F78; // type:object size:0x10 scope:global -gnMemLeakTurboBLOWOFFCountTest = .data:0x80417F88; // type:object size:0x4 scope:global -gnMemLeakTurboSPOOLCountTest = .data:0x80417F8C; // type:object size:0x4 scope:global -MIN_TORQUE_FOR_BLOWOFF = .data:0x80417F90; // type:object size:0x4 scope:global -_12CARSFX_Turbo.s_TypeInfo = .data:0x80417F94; // type:object size:0x10 scope:global -_19CARSFX_SparkChatter.s_TypeInfo = .data:0x80417FA4; // type:object size:0x10 scope:global -_16CARSFX_RoadNoise.s_TypeInfo = .data:0x80417FB8; // type:object size:0x10 scope:global -_20SFXCTL_3DLeftWindPos.s_TypeInfo = .data:0x80417FCC; // type:object size:0x10 scope:global -_21SFXCTL_3DRightWindPos.s_TypeInfo = .data:0x80417FDC; // type:object size:0x10 scope:global -_16CARSFX_WindNoise.s_TypeInfo = .data:0x80417FEC; // type:object size:0x10 scope:global -_18CARSFX_WindWeather.s_TypeInfo = .data:0x80418008; // type:object size:0x10 scope:global -_12CARSFX_Skids.s_TypeInfo = .data:0x80418018; // type:object size:0x10 scope:global -_22SFXCTL_3DRightWheelPos.s_TypeInfo = .data:0x80418028; // type:object size:0x10 scope:global -_21SFXCTL_3DLeftWheelPos.s_TypeInfo = .data:0x80418038; // type:object size:0x10 scope:global -_19CARSFX_TrafficSkids.s_TypeInfo = .data:0x80418048; // type:object size:0x10 scope:global -ntestrefcount = .data:0x8041806C; // type:object size:0x4 scope:global -_17CARSFX_AEMSEngine.s_TypeInfo = .data:0x80418070; // type:object size:0x10 scope:global -AI_ENGINE_PITCH_OFFSET.31583 = .data:0x80418080; // type:object size:0x4 scope:local -_21CARSFX_SingleGinsuEng.s_TypeInfo = .data:0x8041808C; // type:object size:0x10 scope:global -_19CARSFX_DualGinsuEng.s_TypeInfo = .data:0x8041809C; // type:object size:0x10 scope:global -_18CARSFX_PreColWoosh.s_TypeInfo = .data:0x804180AC; // type:object size:0x10 scope:global -LastRandom.31722 = .data:0x804180BC; // type:object size:0x4 scope:local -_14CARSFX_Nitrous.s_TypeInfo = .data:0x804180C0; // type:object size:0x10 scope:global -_11CARSFX_Rain.s_TypeInfo = .data:0x804180D4; // type:object size:0x10 scope:global -_16SFXObj_Collision.s_TypeInfo = .data:0x804180E4; // type:object size:0x10 scope:global -_12SFXObj_Woosh.s_TypeInfo = .data:0x804180F4; // type:object size:0x10 scope:global -LastRandom.33304 = .data:0x80418104; // type:object size:0x4 scope:local -LastRandom.33305 = .data:0x80418108; // type:object size:0x4 scope:local -LastRandom.33306 = .data:0x8041810C; // type:object size:0x4 scope:local -LastRandom.33307 = .data:0x80418110; // type:object size:0x4 scope:local -LastRandom.33308 = .data:0x80418114; // type:object size:0x4 scope:local -LastRandom.33309 = .data:0x80418118; // type:object size:0x4 scope:local -LastRandom.33310 = .data:0x8041811C; // type:object size:0x4 scope:local -LastRandom.33311 = .data:0x80418120; // type:object size:0x4 scope:local -_17SFXCTL_3DWooshPos.s_TypeInfo = .data:0x80418124; // type:object size:0x10 scope:global -_15SFXObj_Ambience.s_TypeInfo = .data:0x80418134; // type:object size:0x10 scope:global -_13SFXObj_Speech.s_TypeInfo = .data:0x80418144; // type:object size:0x10 scope:global -_22SFXCTL_3DVoiceActorPos.s_TypeInfo = .data:0x80418154; // type:object size:0x10 scope:global -_12SFXObj_FEHUD.s_TypeInfo = .data:0x80418164; // type:object size:0x10 scope:global -g_LastTrafficHonkTime = .data:0x80418174; // type:object size:0x4 scope:global -_20CARSFX_TrafficEngine.s_TypeInfo = .data:0x80418178; // type:object size:0x10 scope:global -_19SFXCTL_3DTrafficPos.s_TypeInfo = .data:0x8041818C; // type:object size:0x10 scope:global -_18CARSFX_TrafficHorn.s_TypeInfo = .data:0x8041819C; // type:object size:0x10 scope:global -_16CARSFX_TruckHorn.s_TypeInfo = .data:0x804181AC; // type:object size:0x10 scope:global -HonkingCarCnt.33639 = .data:0x804181BC; // type:object size:0x4 scope:local -_19CARSFX_TrafficWoosh.s_TypeInfo = .data:0x804181C0; // type:object size:0x10 scope:global -LastRandom.33712 = .data:0x804181D0; // type:object size:0x4 scope:local -DOT_PROD_FOR_HEAVY_LEAN = .data:0x804181D4; // type:object size:0x4 scope:global -JumpLandingVolumes = .data:0x804181D8; // type:object size:0x10 scope:global -_16CARSFX_BottomOut.s_TypeInfo = .data:0x804181E8; // type:object size:0x10 scope:global -LastRandom.33749 = .data:0x804181F8; // type:object size:0x4 scope:local -LastRandom.33750 = .data:0x804181FC; // type:object size:0x4 scope:local -LastRandom.33754 = .data:0x80418200; // type:object size:0x4 scope:local -_13SFXObj_Reverb.s_TypeInfo = .data:0x80418204; // type:object size:0x10 scope:global -ReverbZoneCrossMap = .data:0x80418214; // type:object size:0x30 scope:global -csfxedit = .data:0x80418244; // type:object size:0x30 scope:global -_13SFXObj_Reverb.m_EchoBuffer = .data:0x80418274; // type:object size:0x4 scope:global -_12CARSFX_Siren.s_TypeInfo = .data:0x80418280; // type:object size:0x10 scope:global -PURSUIT_TO_LIC_DELAY = .data:0x804182A8; // type:object size:0x4 scope:global -_17SFXObj_Pathfinder.s_TypeInfo = .data:0x804182B0; // type:object size:0x10 scope:global -AmbientCrossMap = .data:0x804182C0; // type:object size:0x38 scope:global -_15SFXObj_PFEATrax.s_TypeInfo = .data:0x804182FC; // type:object size:0x10 scope:global -_17SFXObj_Helicopter.s_TypeInfo = .data:0x8041830C; // type:object size:0x10 scope:global -_16SFXObj_NISStream.m_bNISAudioStreamReady = .data:0x8041831C; // type:object size:0x4 scope:global -_16SFXObj_NISStream.m_bNISButtonThroughAnimationReady = .data:0x80418320; // type:object size:0x4 scope:global -_16SFXObj_NISStream.m_bNISButtonThroughReady = .data:0x80418324; // type:object size:0x4 scope:global -_16SFXObj_NISStream.m_bIsButtonThrough = .data:0x80418328; // type:object size:0x4 scope:global -_16SFXObj_NISStream.m_mstimeelapsed = .data:0x8041832C; // type:object size:0x4 scope:global -_16SFXObj_NISStream.m_mslengthofstream = .data:0x80418330; // type:object size:0x4 scope:global -g_laststartanimid = .data:0x80418334; // type:object size:0x4 scope:global -g_bWasLastNISaStart = .data:0x80418338; // type:object size:0x4 scope:global -_16SFXObj_NISStream.s_TypeInfo = .data:0x80418340; // type:object size:0x10 scope:global -_17SFXObj_MomentStrm.s_TypeInfo = .data:0x80418350; // type:object size:0x10 scope:global -_17SFXObj_MomentStrm.bHoldStream = .data:0x80418368; // type:object size:0x4 scope:global -_17SFXObj_MomentStrm.m_TimeBeforeRetrigger = .data:0x8041836C; // type:object size:0x4 scope:global -g_MomentStream = .data:0x80418370; // type:object size:0x4 scope:global -_18SFXCTL_3DMomentPos.s_TypeInfo = .data:0x80418374; // type:object size:0x10 scope:global -_20SFXCTL_3DFountainPos.s_TypeInfo = .data:0x80418384; // type:object size:0x10 scope:global -_18SFXObj_WorldObject.s_TypeInfo = .data:0x80418394; // type:object size:0x10 scope:global -_14SFXObj_TruckFX.s_TypeInfo = .data:0x804183A4; // type:object size:0x10 scope:global -_17CARSFX_TruckWoosh.s_TypeInfo = .data:0x804183B4; // type:object size:0x10 scope:global -_19SFXCTL_3DTrailerPos.s_TypeInfo = .data:0x804183C4; // type:object size:0x10 scope:global -xafilterf = .data:0x804183E0; // type:object size:0x20 scope:local -xatablef = .data:0x80418400; // type:object size:0x400 scope:local -_4Csis.SIRENId = .data:0x80418800; // type:object size:0x8 scope:global -_4Csis.SIREN_BEDId = .data:0x80418808; // type:object size:0x8 scope:global -_4Csis.Sputter_MessageId = .data:0x80418810; // type:object size:0x8 scope:global -_4Csis.CARId = .data:0x80418818; // type:object size:0x8 scope:global -_4Csis.CAR_SWTNId = .data:0x80418820; // type:object size:0x8 scope:global -_4Csis.CAR_WHINEId = .data:0x80418828; // type:object size:0x8 scope:global -_4Csis.CAR_TRANNYId = .data:0x80418830; // type:object size:0x8 scope:global -_4Csis.CAR_SputterId = .data:0x80418838; // type:object size:0x8 scope:global -_4Csis.CAR_SputOutputId = .data:0x80418840; // type:object size:0x8 scope:global -_4Csis.FX_ROADNOISEId = .data:0x80418848; // type:object size:0x8 scope:global -_4Csis.FX_ROADNOISE_TRANSId = .data:0x80418850; // type:object size:0x8 scope:global -_4Csis.ENV_STATICId = .data:0x80418858; // type:object size:0x8 scope:global -_4Csis.FX_MAIN_MEMId = .data:0x80418860; // type:object size:0x8 scope:global -_4Csis.FX_WINDId = .data:0x80418868; // type:object size:0x8 scope:global -_4Csis.FX_WIND_WeatherId = .data:0x80418870; // type:object size:0x8 scope:global -_4Csis.FX_TRAFFICId = .data:0x80418878; // type:object size:0x8 scope:global -_4Csis.FX_TRUCK_FXId = .data:0x80418880; // type:object size:0x8 scope:global -_4Csis.PlayCommonSampleId = .data:0x80418888; // type:object size:0x8 scope:global -_4Csis.PlayFrontEndSampleId = .data:0x80418890; // type:object size:0x8 scope:global -_4Csis.PlayFrontEndSample_RSId = .data:0x80418898; // type:object size:0x8 scope:global -_4Csis.FEDriveOnId = .data:0x804188A0; // type:object size:0x8 scope:global -_4Csis.FX_NITROUSId = .data:0x804188A8; // type:object size:0x8 scope:global -_4Csis.FX_PURGEId = .data:0x804188B0; // type:object size:0x8 scope:global -_4Csis.FX_SHIFTING_01Id = .data:0x804188B8; // type:object size:0x8 scope:global -_4Csis.FX_SPARKCHATTERId = .data:0x804188C0; // type:object size:0x8 scope:global -_4Csis.FX_SKIDId = .data:0x804188C8; // type:object size:0x8 scope:global -_4Csis.FX_HydraulicId = .data:0x804188D0; // type:object size:0x8 scope:global -_4Csis.FX_HelicopterId = .data:0x804188D8; // type:object size:0x8 scope:global -_4Csis.FX_Hydr_BounceId = .data:0x804188E0; // type:object size:0x8 scope:global -_4Csis.FX_WeatherId = .data:0x804188E8; // type:object size:0x8 scope:global -_4Csis.FX_CameraId = .data:0x804188F0; // type:object size:0x8 scope:global -_4Csis.FX_UVESId = .data:0x804188F8; // type:object size:0x8 scope:global -_4Csis.FX_RadarId = .data:0x80418900; // type:object size:0x8 scope:global -_4Csis.FX_ScrapeId = .data:0x80418908; // type:object size:0x8 scope:global -_4Csis.AEMS_StichCollisionId = .data:0x80418910; // type:object size:0x8 scope:global -_4Csis.AEMS_StichWooshId = .data:0x80418918; // type:object size:0x8 scope:global -_4Csis.AEMS_StichStaticId = .data:0x80418920; // type:object size:0x8 scope:global -_4Csis.FX_TURBO_01Id = .data:0x80418928; // type:object size:0x8 scope:global -_4Csis.NIS_Select_StartId = .data:0x80418930; // type:object size:0x8 scope:global -_4Csis.SoundFX_SelectId = .data:0x80418938; // type:object size:0x8 scope:global -_4Csis.NIS_Select_BlacklistId = .data:0x80418940; // type:object size:0x8 scope:global -_4Csis.NIS_Select_EndId = .data:0x80418948; // type:object size:0x8 scope:global -szMixMapFiles = .data:0x80418968; // type:object size:0x10 scope:global -g_DMIX_DummyOutputBlock = .data:0x80418990; // type:object size:0x40 scope:global -g_DMIX_DummyInputBlock = .data:0x804189D0; // type:object size:0x40 scope:global -_9NFSMixMap.mGetOutPtrCB = .data:0x80418A10; // type:object size:0x4 scope:global -_9NFSMixMap.mSetSFXOutCB = .data:0x80418A14; // type:object size:0x4 scope:global -_9NFSMixMap.mSetSFXInCB = .data:0x80418A18; // type:object size:0x4 scope:global -_9NFSMixMap.mGetStateRefCnt = .data:0x80418A1C; // type:object size:0x4 scope:global -_9NFSMixMap.mMapReadyCB = .data:0x80418A20; // type:object size:0x4 scope:global -DUMMYINPUT = .data:0x80418A24; // type:object size:0x4 scope:global -F_DT_FRAME_LOCK = .data:0x80418A28; // type:object size:0x4 scope:global -DOPPLER_SMOOTHING_FACTOR = .data:0x80418A2C; // type:object size:0x4 scope:global -g_dBToQ15XForm = .data:0x80418A34; // type:object size:0x968 scope:global -g_Q15todBXForm = .data:0x8041939C; // type:object size:0x800 scope:global -g_nArrayCosTable = .data:0x80419B9C; // type:object size:0x804 scope:global -g_fPitchSemitoneTable = .data:0x8041A3A0; // type:object size:0x30 scope:global -g_fPitchCentTable = .data:0x8041A3D0; // type:object size:0x190 scope:global -nDBreturn = .data:0x8041A564; // type:object size:0x4 scope:global -ndBShift = .data:0x8041A568; // type:object size:0x4 scope:global -ndBRem = .data:0x8041A56C; // type:object size:0x4 scope:global -ePolySlotPool = .data:0x8041A5A4; // type:object size:0x4 scope:global -WaitUntilRenderingDoneDisabled = .data:0x8041A5A8; // type:object size:0x4 scope:global -WaitForFrameBufferSwapDisabled = .data:0x8041A5AC; // type:object size:0x4 scope:global -renderModifier = .data:0x8041A5B0; // type:object size:0x4 scope:global -FrameMemoryBufferSize = .data:0x8041A5B4; // type:object size:0x4 scope:global -CurrentBufferStart = .data:0x8041A5B8; // type:object size:0x4 scope:global -CurrentBufferPos = .data:0x8041A5BC; // type:object size:0x4 scope:global -CurrentBufferEnd = .data:0x8041A5C0; // type:object size:0x4 scope:global -FrameMallocAllocNum = .data:0x8041A5C8; // type:object size:0x4 scope:global -FrameMallocFailed = .data:0x8041A5CC; // type:object size:0x4 scope:global -FrameMallocFailAmount = .data:0x8041A5D0; // type:object size:0x4 scope:global -FrameMallocMaxFailAmount = .data:0x8041A5D4; // type:object size:0x4 scope:global -Eframelargest = .data:0x8041A5D8; // type:object size:0x4 scope:global -Eframecurrent = .data:0x8041A5DC; // type:object size:0x4 scope:global -numOtherTex = .data:0x8041A5E0; // type:object size:0x4 scope:global -AllowCompressedStreamingTexturesInThisPoolNum = .data:0x8041A5E4; // type:object size:0x4 scope:global -eStreamingPackSlotPool = .data:0x8041A5E8; // type:object size:0x4 scope:global -eModelSlotPool = .data:0x8041A5EC; // type:object size:0x4 scope:global -NumReplacementTextureTableFixups = .data:0x8041A5F0; // type:object size:0x4 scope:global -MaxNotifyTimeLoad = .data:0x8041A5F4; // type:object size:0x4 scope:global -MaxNotifyTimeUnload = .data:0x8041A5F8; // type:object size:0x4 scope:global -TotalNotifyTimeLoad = .data:0x8041A5FC; // type:object size:0x4 scope:global -TotalNotifyTimeUnload = .data:0x8041A600; // type:object size:0x4 scope:global -TotalNotifyTime = .data:0x8041A604; // type:object size:0x4 scope:global -NumNotifyLoads = .data:0x8041A608; // type:object size:0x4 scope:global -NumNotifyUnloads = .data:0x8041A60C; // type:object size:0x4 scope:global -AllowDuplicateSolids = .data:0x8041A610; // type:object size:0x4 scope:global -eDisableFixUpTables = .data:0x8041A614; // type:object size:0x4 scope:global -eDirtySolids = .data:0x8041A618; // type:object size:0x4 scope:global -eDirtyTextures = .data:0x8041A61C; // type:object size:0x4 scope:global -eDirtyAnimations = .data:0x8041A620; // type:object size:0x4 scope:global -TotalFindSolidTime = .data:0x8041A628; // type:object size:0x4 scope:global -DefaultLightMaterial = .data:0x8041A63C; // type:object size:0x4 scope:global -reflectionStretch = .data:0x8041A640; // type:object size:0x4 scope:global -MINreflectionStretch = .data:0x8041A644; // type:object size:0x4 scope:global -MAXreflectionStretch = .data:0x8041A648; // type:object size:0x4 scope:global -TweakLightMaterial = .data:0x8041A658; // type:object size:0x4 scope:global -PrintLightQuery = .data:0x8041A66C; // type:object size:0x4 scope:global -WorldLightDirectionVector = .data:0x8041A678; // type:object size:0x10 scope:global -eLightFlareTextureNameHashes = .data:0x8041A69C; // type:object size:0xC scope:global -SingleLightFlareParameters = .data:0x8041A6B0; // type:object size:0x3C8 scope:global -LightFlareParametersNeedUpdating = .data:0x8041AA78; // type:object size:0x4 scope:global -LightFlareParameterIndicies = .data:0x8041AA7C; // type:object size:0xB0 scope:global -DrawLightFlares = .data:0x8041AB2C; // type:object size:0x4 scope:global -ActivePoolIndex = .data:0x8041AB30; // type:object size:0x4 scope:global -done.16761 = .data:0x8041AB34; // type:object size:0x4 scope:local -blink = .data:0x8041AB38; // type:object size:0x10 scope:global -time.16768 = .data:0x8041AB48; // type:object size:0xC scope:local -LightFlareEnvmapExpandSize = .data:0x8041AB54; // type:object size:0x4 scope:global -FlareRot = .data:0x8041AB64; // type:object size:0x4 scope:global -FlareSweep = .data:0x8041AB68; // type:object size:0x4 scope:global -RainInTheHeadlights = .data:0x8041AB6C; // type:object size:0x4 scope:global -DefaultTextureInfo = .data:0x8041AB74; // type:object size:0x4 scope:global -DuplicateTextureWarningEnabled = .data:0x8041AB78; // type:object size:0x4 scope:global -TexturePackSlotPool = .data:0x8041AB7C; // type:object size:0x4 scope:global -PrevLoadedTexturePack = .data:0x8041AB80; // type:object size:0x4 scope:global -SunInfoTable = .data:0x8041AB84; // type:object size:0x4 scope:global -NumSunInfo = .data:0x8041AB88; // type:object size:0x4 scope:global -SunInfo = .data:0x8041AB8C; // type:object size:0x4 scope:global -pVisualTreatmentPlat = .data:0x8041ABDC; // type:object size:0x4 scope:global -EnableRainIn2P = .data:0x8041ABE0; // type:object size:0x4 scope:global -IsPal50Mode = .data:0x8041ABEC; // type:object size:0x4 scope:global -xfbHcrt = .data:0x8041ABF0; // type:object size:0x4 scope:global -efbHcrt = .data:0x8041ABF4; // type:object size:0x4 scope:global -efbxfbRatio = .data:0x8041ABF8; // type:object size:0x4 scope:global -PALefbxfbFOVscl = .data:0x8041ABFC; // type:object size:0x4 scope:global -PALefbxfbAspect = .data:0x8041AC00; // type:object size:0x4 scope:global -eGXZFmt16 = .data:0x8041AC04; // type:object size:0x4 scope:global -eGXPixelFmt888 = .data:0x8041AC08; // type:object size:0x4 scope:global -eGXPixelFmt6666 = .data:0x8041AC0C; // type:object size:0x4 scope:global -eGXPixelFmt565AA = .data:0x8041AC10; // type:object size:0x4 scope:global -Global3DAspectRatio = .data:0x8041AC14; // type:object size:0x4 scope:global -WaitBufferSwapTime = .data:0x8041AC1C; // type:object size:0x4 scope:global -VifTime = .data:0x8041AC20; // type:object size:0x4 scope:global -dummy_vif_time = .data:0x8041AC24; // type:object size:0x4 scope:global -FastForwardEnabled = .data:0x8041AC28; // type:object size:0x4 scope:global -FastForwardRate = .data:0x8041AC2C; // type:object size:0x4 scope:global -EnableTexturing = .data:0x8041AC30; // type:object size:0x4 scope:global -DrawWireframe = .data:0x8041AC34; // type:object size:0x4 scope:global -eFrameCounter = .data:0x8041AC38; // type:object size:0x4 scope:global -eCurrentVideoMode = .data:0x8041AC3C; // type:object size:0x4 scope:global -pTextureInfoRVMInfo = .data:0x8041AC40; // type:object size:0x4 scope:global -pTextureInfoRVMMask = .data:0x8041AC44; // type:object size:0x4 scope:global -pTextureInfoCarSelectEnvMap = .data:0x8041AC48; // type:object size:0x4 scope:global -pTextureInfoRadialBlur = .data:0x8041AC4C; // type:object size:0x4 scope:global -pTextureInfoRadialMask = .data:0x8041AC50; // type:object size:0x4 scope:global -pTextureInfoWhite16x16 = .data:0x8041AC54; // type:object size:0x4 scope:global -pTextureInfoWhite16x16NoAlpha = .data:0x8041AC58; // type:object size:0x4 scope:global -ScreenWidth = .data:0x8041AC5C; // type:object size:0x4 scope:global -ScreenHeight = .data:0x8041AC60; // type:object size:0x4 scope:global -EnableLODZ = .data:0x8041AC64; // type:object size:0x4 scope:global -EnableMinimalEnvMap = .data:0x8041AC68; // type:object size:0x4 scope:global -EnableEnvMap = .data:0x8041AC6C; // type:object size:0x4 scope:global -EnvmapTargetNames = .data:0x8041AC78; // type:object size:0x1C scope:global -CurrentRenderTarget = .data:0x8041AC94; // type:object size:0x4 scope:global -CurrentViewMode = .data:0x8041ACA0; // type:object size:0x4 scope:global -RenderingViewMode = .data:0x8041ACA4; // type:object size:0x4 scope:global -TweakerViewMode = .data:0x8041ACA8; // type:object size:0x4 scope:global -g_original_amount_free = .data:0x8041ACD4; // type:object size:0x4 scope:global -g_original_largest_malloc = .data:0x8041ACD8; // type:object size:0x4 scope:global -do_dumpFastMem = .data:0x8041ACDC; // type:object size:0x4 scope:global -RenderCars_psReset = .data:0x8041ACE0; // type:object size:0x4 scope:global -PreFE_psReset = .data:0x8041ACE4; // type:object size:0x4 scope:global -epRenderStrips_psReset = .data:0x8041ACEC; // type:object size:0x4 scope:global -epRenderStrips_ps_NoLighting = .data:0x8041ACF0; // type:object size:0x4 scope:global -UpdateVTIndirectTexture = .data:0x8041ACF4; // type:object size:0x4 scope:global -lastactive.31181 = .data:0x8041AD00; // type:object size:0x4 scope:local -lastactive.31182 = .data:0x8041AD04; // type:object size:0x4 scope:local -__sync_token = .data:0x8041AD08; // type:object size:0x2 scope:global -EnableHarmonicClear = .data:0x8041AD0C; // type:object size:0x4 scope:global -DOF_color = .data:0x8041AD2C; // type:object size:0x4 scope:global -DOF_depth_curve = .data:0x8041AD30; // type:object size:0x4 scope:global -DOF_znear = .data:0x8041AD34; // type:object size:0x4 scope:global -DOF_zfar = .data:0x8041AD38; // type:object size:0x4 scope:global -DOF_startz = .data:0x8041AD3C; // type:object size:0x4 scope:global -DOF_endz = .data:0x8041AD40; // type:object size:0x4 scope:global -BLOOM_intensity_clip = .data:0x8041AD44; // type:object size:0x1 scope:global -BLOOM_intensity_sub = .data:0x8041AD45; // type:object size:0x4 scope:global -BLOOM_intensity_add = .data:0x8041AD49; // type:object size:0x4 scope:global -downSampledWidth.31276 = .data:0x8041AD50; // type:object size:0x4 scope:local -downSampledHeight.31277 = .data:0x8041AD54; // type:object size:0x4 scope:local -bProgressiveScan = .data:0x8041AD58; // type:object size:0x1 scope:global -bEURGB60 = .data:0x8041AD59; // type:object size:0x1 scope:global -_firstFrame = .data:0x8041AD5C; // type:object size:0x4 scope:global -_frameBuffer1 = .data:0x8041AD60; // type:object size:0x4 scope:global -_frameBuffer2 = .data:0x8041AD64; // type:object size:0x4 scope:global -_currentBuffer = .data:0x8041AD68; // type:object size:0x4 scope:global -_GxInitialized = .data:0x8041AD6C; // type:object size:0x4 scope:global -e_bDither = .data:0x8041AD70; // type:object size:0x1 scope:local -_defaultFIFO = .data:0x8041AD74; // type:object size:0x4 scope:global -_defaultFIFOObj = .data:0x8041AD78; // type:object size:0x4 scope:global -bHangDiagnose = .data:0x8041AD7C; // type:object size:0x1 scope:global -e_sync = .data:0x8041AD7E; // type:object size:0x2 scope:global -e_endsync = .data:0x8041AD80; // type:object size:0x2 scope:global -last_sync_token = .data:0x8041AD84; // type:object size:0x2 scope:global -e_resync = .data:0x8041AD88; // type:object size:0x4 scope:global -e_keepalive = .data:0x8041AD8C; // type:object size:0x4 scope:global -bStallWorkaround = .data:0x8041AD94; // type:object size:0x1 scope:global -bDLSaveContext = .data:0x8041AD95; // type:object size:0x1 scope:global -CopyFilter = .data:0x8041AD96; // type:object size:0x4D scope:global -bESyncError = .data:0x8041ADE3; // type:object size:0x1 scope:global -eMAX_ITERATIONS = .data:0x8041ADE4; // type:object size:0x4 scope:global -bNoWait = .data:0x8041ADF0; // type:object size:0x1 scope:global -bAlwaysCopyDisp = .data:0x8041ADF1; // type:object size:0x1 scope:global -e_retrace_count = .data:0x8041ADF4; // type:object size:0x4 scope:global -WasPal50.31308 = .data:0x8041ADF8; // type:object size:0x4 scope:local -WasWidescreen.31309 = .data:0x8041ADFC; // type:object size:0x4 scope:local -bFirstTime.31319 = .data:0x8041AE00; // type:object size:0x1 scope:local -_enabled.31332 = .data:0x8041AE01; // type:object size:0x1 scope:local -prevPFmt.31339 = .data:0x8041AE04; // type:object size:0x4 scope:local -_pformats.31340 = .data:0x8041AE08; // type:object size:0xC scope:local -prevZFmt.31341 = .data:0x8041AE14; // type:object size:0x4 scope:local -_zformats.31342 = .data:0x8041AE18; // type:object size:0x10 scope:local -_xOrig.31346 = .data:0x8041AE28; // type:object size:0x4 scope:local -_yOrig.31347 = .data:0x8041AE2C; // type:object size:0x4 scope:local -_wd.31348 = .data:0x8041AE30; // type:object size:0x4 scope:local -_ht.31349 = .data:0x8041AE34; // type:object size:0x4 scope:local -bDrawDoneEncountered = .data:0x8041AE38; // type:object size:0x1 scope:local -_enabled.31410 = .data:0x8041AE39; // type:object size:0x1 scope:local -DrawSmear = .data:0x8041AE54; // type:object size:0x4 scope:global -SmearInvert = .data:0x8041AE58; // type:object size:0x4 scope:global -NOStimer = .data:0x8041AE64; // type:object size:0x4 scope:global -SmearStage2 = .data:0x8041AE68; // type:object size:0x4 scope:global -num_smears = .data:0x8041AE6C; // type:object size:0x4 scope:global -SmearSubStageEnable = .data:0x8041AE70; // type:object size:0x18 scope:global -SmearDistances = .data:0x8041AE88; // type:object size:0x18 scope:global -SmearAlphas = .data:0x8041AEA0; // type:object size:0x18 scope:global -SmearRGBs = .data:0x8041AEB8; // type:object size:0x48 scope:global -SmearDistModNOS = .data:0x8041AF00; // type:object size:0x4 scope:global -SmearR = .data:0x8041AF04; // type:object size:0x4 scope:global -SmearG = .data:0x8041AF08; // type:object size:0x4 scope:global -SmearB = .data:0x8041AF0C; // type:object size:0x4 scope:global -Rsub = .data:0x8041AF10; // type:object size:0x4 scope:global -Gsub = .data:0x8041AF14; // type:object size:0x4 scope:global -Bsub = .data:0x8041AF18; // type:object size:0x4 scope:global -SmearMaxAlphaScale = .data:0x8041AF2C; // type:object size:0x4 scope:global -SmearMinSpeed = .data:0x8041AF30; // type:object size:0x4 scope:global -SmearMaxSpeed = .data:0x8041AF34; // type:object size:0x4 scope:global -SmearAlphaScale = .data:0x8041AF38; // type:object size:0x4 scope:global -SmearDistanceMultiplier = .data:0x8041AF3C; // type:object size:0x4 scope:global -SmearNOSAlphaBonus = .data:0x8041AF40; // type:object size:0x4 scope:global -useTweakablePoly = .data:0x8041AF44; // type:object size:0x4 scope:global -polyTweakDX = .data:0x8041AF48; // type:object size:0x4 scope:global -polyTweakDW = .data:0x8041AF4C; // type:object size:0x4 scope:global -polyTweakDY = .data:0x8041AF50; // type:object size:0x4 scope:global -polyTweakDH = .data:0x8041AF54; // type:object size:0x4 scope:global -polyTweakSX = .data:0x8041AF58; // type:object size:0x4 scope:global -polyTweakSW = .data:0x8041AF5C; // type:object size:0x4 scope:global -polyTweakSY = .data:0x8041AF60; // type:object size:0x4 scope:global -polyTweakSH = .data:0x8041AF64; // type:object size:0x4 scope:global -NOStime.31435 = .data:0x8041AF68; // type:object size:0x4 scope:local -NOSfade.31436 = .data:0x8041AF6C; // type:object size:0x4 scope:local -TweakDumpSkyLayerColors = .data:0x8041AF84; // type:object size:0x4 scope:global -FogCurrentBrightness = .data:0x8041AFA4; // type:object size:0x4 scope:local -prevMode.31506 = .data:0x8041AFA8; // type:object size:0x4 scope:local -prevTest = .data:0x8041AFAC; // type:object size:0x1 scope:global -prevWrite = .data:0x8041AFAD; // type:object size:0x1 scope:global -prev.31519 = .data:0x8041AFAE; // type:object size:0x1 scope:local -prevRGB.31523 = .data:0x8041AFAF; // type:object size:0x1 scope:local -prevAlpha.31524 = .data:0x8041AFB0; // type:object size:0x1 scope:local -_alphaOn = .data:0x8041AFB1; // type:object size:0x1 scope:local -_alphaRef = .data:0x8041AFB2; // type:object size:0x1 scope:local -prevMode = .data:0x8041AFB4; // type:object size:0x4 scope:local -prevSrc = .data:0x8041AFB8; // type:object size:0x4 scope:local -prevDst = .data:0x8041AFBC; // type:object size:0x4 scope:local -FogEnableState = .data:0x8041AFD0; // type:object size:0x4 scope:local -prevFogDistance = .data:0x8041AFD4; // type:object size:0x4 scope:local -prevFogColour = .data:0x8041AFD8; // type:object size:0x4 scope:local -fog_red = .data:0x8041AFDC; // type:object size:0x1 scope:global -fog_green = .data:0x8041AFDD; // type:object size:0x1 scope:global -fog_blue = .data:0x8041AFDE; // type:object size:0x1 scope:global -fog_enable.31705 = .data:0x8041AFE0; // type:object size:0x4 scope:local -eTevSwapModeTable = .data:0x8041AFE4; // type:object size:0x10 scope:local -eTevSwapColorChannelTable = .data:0x8041AFF4; // type:object size:0x10 scope:local -eTevSwapSelectionTable = .data:0x8041B004; // type:object size:0x10 scope:local -lastTevSwapStageID = .data:0x8041B01C; // type:object size:0x4 scope:local -eTextureBucketSlotPool = .data:0x8041B020; // type:object size:0x4 scope:global -eDataRenderSlotPool = .data:0x8041B024; // type:object size:0x4 scope:global -g_NumTextureBuckets = .data:0x8041B02C; // type:object size:0x4 scope:global -SphericalPS = .data:0x8041B030; // type:object size:0x4 scope:global -testl1 = .data:0x8041B04C; // type:object size:0x8 scope:global -testl2 = .data:0x8041B054; // type:object size:0x8 scope:global -testl3 = .data:0x8041B05C; // type:object size:0x8 scope:global -teste1 = .data:0x8041B064; // type:object size:0x8 scope:global -teste2 = .data:0x8041B06C; // type:object size:0x8 scope:global -teste3 = .data:0x8041B074; // type:object size:0x8 scope:global -testc0 = .data:0x8041B07C; // type:object size:0x8 scope:global -testc1 = .data:0x8041B084; // type:object size:0x8 scope:global -cBfW = .data:0x8041B08C; // type:object size:0x4 scope:local -PrintSolidViewLocalWorldTest = .data:0x8041B09C; // type:object size:0x4 scope:global -pPrevSolid.31826 = .data:0x8041B0A0; // type:object size:0x4 scope:local -pPrevView.31827 = .data:0x8041B0A4; // type:object size:0x4 scope:local -pPrevLocalWorld.31828 = .data:0x8041B0A8; // type:object size:0x4 scope:local -position_table.31830 = .data:0x8041B0B0; // type:object size:0x4 scope:local -position_table_16.31831 = .data:0x8041B0B4; // type:object size:0x4 scope:local -normal_table.31832 = .data:0x8041B0B8; // type:object size:0x4 scope:local -colour_table0.31833 = .data:0x8041B0BC; // type:object size:0x4 scope:local -colour_table1.31834 = .data:0x8041B0C0; // type:object size:0x4 scope:local -uv_table.31835 = .data:0x8041B0C4; // type:object size:0x4 scope:local -g_contrast_gain = .data:0x8041B0D0; // type:object size:0x10 scope:global -g_contrast_res = .data:0x8041B0E0; // type:object size:0x4 scope:global -b_alpha_shift = .data:0x8041B0E4; // type:object size:0x4 scope:global -b_red_shift = .data:0x8041B0E8; // type:object size:0x4 scope:global -b_green_shift = .data:0x8041B0EC; // type:object size:0x4 scope:global -b_blue_shift = .data:0x8041B0F0; // type:object size:0x4 scope:global -zero_red = .data:0x8041B0F8; // type:object size:0x4 scope:global -zero_blue = .data:0x8041B0FC; // type:object size:0x4 scope:global -zero_green = .data:0x8041B100; // type:object size:0x4 scope:global -zero_alpha = .data:0x8041B104; // type:object size:0x4 scope:global -arn_EnableDiffuse = .data:0x8041B108; // type:object size:0x4 scope:global -arn_EnableAlpha = .data:0x8041B10C; // type:object size:0x4 scope:global -arn_EnableSpec = .data:0x8041B110; // type:object size:0x4 scope:global -arn_EnableEnv = .data:0x8041B114; // type:object size:0x4 scope:global -hack_LightColourScale = .data:0x8041B11C; // type:object size:0x4 scope:global -hack_SpecScale = .data:0x8041B120; // type:object size:0x4 scope:global -arn_HackAlpha = .data:0x8041B124; // type:object size:0x4 scope:global -arn_AlphaMin = .data:0x8041B128; // type:object size:0x4 scope:global -arn_AlphaMax = .data:0x8041B12C; // type:object size:0x4 scope:global -hack_SpecScale_InGame = .data:0x8041B134; // type:object size:0x4 scope:global -eLightMaterialPlatInfoSlotPool = .data:0x8041B138; // type:object size:0x4 scope:global -arnMinA = .data:0x8041B144; // type:object size:0x4 scope:global -arnMaxA = .data:0x8041B148; // type:object size:0x4 scope:global -arnEnvMax = .data:0x8041B14C; // type:object size:0x4 scope:global -LARGE_NUMBER.31899 = .data:0x8041B150; // type:object size:0x4 scope:local -EnvMapScreenZ = .data:0x8041B154; // type:object size:0x4 scope:global -HackDirArray = .data:0x8041B158; // type:object size:0xC0 scope:global -HackDirArrayUp = .data:0x8041B218; // type:object size:0xC0 scope:global -EnableEnvMapFacesNum = .data:0x8041B2D8; // type:object size:0x8 scope:global -EnableEnvMapFaces = .data:0x8041B2E0; // type:object size:0x120 scope:global -ForceFERenderStates = .data:0x8041B408; // type:object size:0x4 scope:global -prevPShader = .data:0x8041B40C; // type:object size:0x4 scope:local -KColorOne = .data:0x8041B410; // type:object size:0x4 scope:local -KColorGrey = .data:0x8041B414; // type:object size:0x4 scope:local -KColorWorldSpecular = .data:0x8041B41C; // type:object size:0x4 scope:global -KColorSky = .data:0x8041B420; // type:object size:0x4 scope:global -GlowBloomEnhanceColor = .data:0x8041B424; // type:object size:0x4 scope:global -MiniMapClip = .data:0x8041B428; // type:object size:0x4 scope:global -MWDesaturation = .data:0x8041B42C; // type:object size:0x4 scope:global -MWPulseBrightness = .data:0x8041B430; // type:object size:0x4 scope:global -MWColourTint = .data:0x8041B434; // type:object size:0x4 scope:global -TEV2_BlackBloomIndirectMtx = .data:0x8041B438; // type:object size:0x18 scope:global -TEV3_ColourBloomIndirectMtx = .data:0x8041B450; // type:object size:0x18 scope:global -CurrentLightingMode = .data:0x8041B46C; // type:object size:0x4 scope:global -_lightMasks = .data:0x8041B470; // type:object size:0x14 scope:local -prevopt.32084 = .data:0x8041B484; // type:object size:0x4 scope:local -prevopt.32088 = .data:0x8041B488; // type:object size:0x4 scope:local -prevopt.32092 = .data:0x8041B48C; // type:object size:0x4 scope:local -TweakKColorSky = .data:0x8041B490; // type:object size:0x4 scope:global -KShadowRGBA = .data:0x8041B494; // type:object size:0x4 scope:global -prevVShader = .data:0x8041B498; // type:object size:0x4 scope:local -e_current_strip = .data:0x8041B4A0; // type:object size:0x4 scope:global -e_strip_texture_info = .data:0x8041B4A8; // type:object size:0x4 scope:global -e_current_strip_vert = .data:0x8041B4AC; // type:object size:0x4 scope:global -e_current_strip_uv = .data:0x8041B4B0; // type:object size:0x4 scope:global -e_current_strip_col = .data:0x8041B4B4; // type:object size:0x4 scope:global -TestMWPulseBrightness = .data:0x8041B4C0; // type:object size:0x4 scope:global -black_bloom_color_scale = .data:0x8041B4D0; // type:object size:0x4 scope:global -colour_bloom_color_scale = .data:0x8041B4D4; // type:object size:0x4 scope:global -CrappyStuffThatCantShip = .data:0x8041B4F0; // type:object size:0xC scope:global -_13EmitterSystem.mTextureRanges = .data:0x8041B4FC; // type:object size:0x4 scope:global -_13EmitterSystem.mNumTextureRanges = .data:0x8041B500; // type:object size:0x4 scope:global -EmitterRandomSeed = .data:0x8041B504; // type:object size:0x4 scope:global -ParticleSlotPool = .data:0x8041B508; // type:object size:0x4 scope:global -EmitterSlotPool = .data:0x8041B50C; // type:object size:0x4 scope:global -EmitterGroupSlotPool = .data:0x8041B510; // type:object size:0x4 scope:global -IsInNIS = .data:0x8041B514; // type:object size:0x4 scope:global -warn_once.33294 = .data:0x8041B518; // type:object size:0x4 scope:local -warn_once.33364 = .data:0x8041B51C; // type:object size:0x4 scope:local -random_seed.33848 = .data:0x8041B528; // type:object size:0x4 scope:local -aseed.33912 = .data:0x8041B52C; // type:object size:0x4 scope:local -gOnlineMainMenu = .data:0x8041B5CC; // type:object size:0x4 scope:global -_15UIOptionsScreen.PlayerToEdit = .data:0x8041B5D0; // type:object size:0x4 scope:global -_19UIOptionsController.PortToConfigure = .data:0x8041B5D4; // type:object size:0x4 scope:global -_19UIOptionsController.isWheelConfig = .data:0x8041B5D8; // type:object size:0x4 scope:global -_9PauseMenu.mSelectionHash = .data:0x8041B5E0; // type:object size:0x4 scope:global -pInstance = .data:0x8041B5E4; // type:object size:0x4 scope:local -_18uiRapSheetRankings.career_view = .data:0x8041B5E8; // type:object size:0x4 scope:global -_24uiRapSheetRankingsDetail.career_view = .data:0x8041B5EC; // type:object size:0x4 scope:global -selection = .data:0x8041B5F0; // type:object size:0x4 scope:local -iCurrentViewBin = .data:0x8041B5F4; // type:object size:0x4 scope:global -theRace = .data:0x8041B5F8; // type:object size:0x4 scope:global -theMilestone = .data:0x8041B60C; // type:object size:0x4 scope:global -gTUTORIAL_MOVIE_PURSUIT = .data:0x8041B610; // type:object size:0x4 scope:global -gTUTORIAL_MOVIE_BOUNTY = .data:0x8041B614; // type:object size:0x4 scope:global -_19uiRepSheetRivalFlow.mInstance = .data:0x8041B618; // type:object size:0x4 scope:global -ScreenNames = .data:0x8041B61C; // type:object size:0x20 scope:global -_8WorldMap.mGPSingIcon = .data:0x8041B640; // type:object size:0x4 scope:global -the_msg = .data:0x8041B644; // type:object size:0x4 scope:local -_15FEGameWonScreen.mCurrentScreen = .data:0x8041B64C; // type:object size:0x4 scope:global -MapJoyEventToFEPad = .data:0x8041B650; // type:object size:0x1C0 scope:local -_13cFEngJoyInput.mInstance = .data:0x8041B810; // type:object size:0x4 scope:global -sMovieNameMap = .data:0x8041B814; // type:object size:0x150 scope:local -_18cFEngGameInterface.pInstance = .data:0x8041B964; // type:object size:0x4 scope:global -FEngPleaseRenderSinglePackage = .data:0x8041B968; // type:object size:0x4 scope:global -_5cFEng.mInstance = .data:0x8041B96C; // type:object size:0x4 scope:global -_9FEManager.mInstance = .data:0x8041B970; // type:object size:0x4 scope:global -_9FEManager.mPauseRequest = .data:0x8041B974; // type:object size:0x4 scope:global -_9FEManager.mPauseReason = .data:0x8041B978; // type:object size:0x20 scope:global -DrawFEng = .data:0x8041B99C; // type:object size:0x4 scope:global -SummonChyronNow = .data:0x8041B9A0; // type:object size:0x4 scope:global -_16FEAnyMovieScreen.MovieFilename = .data:0x8041B9A4; // type:object size:0x40 scope:global -_19FEAnyTutorialScreen.MovieFilename = .data:0x8041B9E4; // type:object size:0x40 scope:global -_19FEAnyTutorialScreen.PackageFilename = .data:0x8041BA24; // type:object size:0x40 scope:global -_19FEAnyTutorialScreen.PackageSet = .data:0x8041BA64; // type:object size:0x4 scope:global -FEAnyTutorialScreenName = .data:0x8041BA68; // type:object size:0x4 scope:local -gMoviePlayer = .data:0x8041BA6C; // type:object size:0x4 scope:global -gMovieStartTime = .data:0x8041BA70; // type:object size:0x4 scope:global -IsMovieTimerPrintf = .data:0x8041BA78; // type:object size:0x4 scope:global -MovieVolumeArray = .data:0x8041BA7C; // type:object size:0x130 scope:global -RCMPDecodeBuffer = .data:0x8041BBAC; // type:object size:0x4 scope:global -recurse.35407 = .data:0x8041BBB0; // type:object size:0x4 scope:local -_9SubTitler.gCurrentSubtitler_ = .data:0x8041BBB4; // type:object size:0x4 scope:global -_13MemoryCardImp.gEntryType = .data:0x8041BBB8; // type:object size:0xC scope:global -_10MemoryCard.s_pThis = .data:0x8041BBC4; // type:object size:0x4 scope:global -pSystem.35755 = .data:0x8041BBC8; // type:object size:0x4 scope:local -sOpName.36228 = .data:0x8041BBD0; // type:object size:0x8 scope:local -TWK_RadarDetectorMinThreshold = .data:0x8041BC60; // type:object size:0x4 scope:global -_13RadarDetector.mStaticRange = .data:0x8041BC64; // type:object size:0x4 scope:global -gChoppedMiniMapManager = .data:0x8041BC68; // type:object size:0x4 scope:global -MinimapShowNonPursuitCops = .data:0x8041BC84; // type:object size:0x4 scope:global -MinimapShowPursuitCops = .data:0x8041BC88; // type:object size:0x4 scope:global -MinimapPivotX = .data:0x8041BC8C; // type:object size:0x4 scope:global -MinimapPivotY = .data:0x8041BC90; // type:object size:0x4 scope:global -MinimapDispX = .data:0x8041BC94; // type:object size:0x4 scope:global -MinimapMaxSpeed = .data:0x8041BC9C; // type:object size:0x4 scope:global -_7Minimap.kGameplayIconInfo = .data:0x8041BCA0; // type:object size:0x168 scope:global -RaceOverFinishStrings = .data:0x8041BE08; // type:object size:0x20 scope:local -warningPulseMinRpm = .data:0x8041BE28; // type:object size:0x4 scope:global -_18HudResourceManager.mPhase = .data:0x8041BE30; // type:object size:0x4 scope:global -_18HudResourceManager.mCustIndex = .data:0x8041BE34; // type:object size:0x4 scope:global -_18HudResourceManager.mTachLinesHash = .data:0x8041BE38; // type:object size:0x4 scope:global -_18HudResourceManager.pMiniMapTexture = .data:0x8041BE3C; // type:object size:0x4 scope:global -_18HudResourceManager.LoadingResourcesForHudType = .data:0x8041BE40; // type:object size:0x4 scope:global -_18HudResourceManager.mPackageName = .data:0x8041BE44; // type:object size:0x4 scope:global -_7FEngHud.bIsRestartingRace = .data:0x8041BE48; // type:object size:0x4 scope:global -ChyronScreenPtr = .data:0x8041BE4C; // type:object size:0x4 scope:local -_6Chyron.mTitle = .data:0x8041BE50; // type:object size:0x4 scope:global -_6Chyron.mArtist = .data:0x8041BE54; // type:object size:0x4 scope:global -_6Chyron.mAlbum = .data:0x8041BE58; // type:object size:0x4 scope:global -KeyboardActive = .data:0x8041BE60; // type:object size:0x4 scope:global -gFEKeyboard = .data:0x8041BE64; // type:object size:0x4 scope:global -_17PhotoFinishScreen.mSpeedtrapSpeed = .data:0x8041BE6C; // type:object size:0x4 scope:global -_17PhotoFinishScreen.mSpeedtrapBounty = .data:0x8041BE70; // type:object size:0x4 scope:global -_17PhotoFinishScreen.mRestartSelected = .data:0x8041BE74; // type:object size:0x4 scope:global -_17PhotoFinishScreen.mActive = .data:0x8041BE78; // type:object size:0x4 scope:global -sBootFlowNTSC = .data:0x8041BE80; // type:object size:0x1C scope:local -sBootFlowPAL = .data:0x8041BE9C; // type:object size:0x1C scope:local -sBootFlowWideScreen = .data:0x8041BEB8; // type:object size:0x1C scope:local -sBootFlowPALWidescreen = .data:0x8041BED4; // type:object size:0x1C scope:local -_15BootFlowManager.mInstance = .data:0x8041BEF0; // type:object size:0x4 scope:global -SplashScreenMovieTimeout = .data:0x8041BEF4; // type:object size:0x4 scope:global -SplashScreenTotalTimeout = .data:0x8041BEF8; // type:object size:0x4 scope:global -MovieData = .data:0x8041BEFC; // type:object size:0xC8 scope:global -IsDebugPlayMovie = .data:0x8041BFC4; // type:object size:0x4 scope:global -GameTipInfoTable = .data:0x8041BFC8; // type:object size:0x1C0 scope:local -_11LoadingTips.mLoadingTipsScreenPtr = .data:0x8041C188; // type:object size:0x4 scope:global -_11LoadingTips.mDoneShowingLoadingTips = .data:0x8041C18C; // type:object size:0x4 scope:global -_11LoadingTips.mDoneLoading = .data:0x8041C190; // type:object size:0x4 scope:global -_13LoadingScreen.mLoadingScreenPtr = .data:0x8041C194; // type:object size:0x4 scope:global -_23LoadingControllerScreen.mLoadingControllerScreenPtr = .data:0x8041C19C; // type:object size:0x4 scope:global -gInGameMoviePlaying = .data:0x8041C1A0; // type:object size:0x4 scope:global -_20InGameAnyMovieScreen.MovieFilename = .data:0x8041C1A4; // type:object size:0x40 scope:global -_23InGameAnyTutorialScreen.MovieFilename = .data:0x8041C1E4; // type:object size:0x40 scope:global -_23InGameAnyTutorialScreen.PackageFilename = .data:0x8041C224; // type:object size:0x40 scope:global -_23InGameAnyTutorialScreen.PackageSet = .data:0x8041C264; // type:object size:0x4 scope:global -InGameTutorialScreenName = .data:0x8041C268; // type:object size:0x4 scope:local -LanguageMemoryPoolNumber = .data:0x8041C26C; // type:object size:0x4 scope:global -pLanguageMemoryPoolMemory = .data:0x8041C270; // type:object size:0x4 scope:global -LanguageMemoryPoolSize = .data:0x8041C274; // type:object size:0x4 scope:global -FontSizeInfoTable = .data:0x8041C278; // type:object size:0x48 scope:global -EuropeanFontNameInfo = .data:0x8041C2C0; // type:object size:0x6C scope:global -EnglishLocaleInfo = .data:0x8041C32C; // type:object size:0x3 scope:global -FrenchLocaleInfo = .data:0x8041C32F; // type:object size:0x3 scope:global -GermanLocaleInfo = .data:0x8041C332; // type:object size:0x3 scope:global -ItalianLocaleInfo = .data:0x8041C335; // type:object size:0x3 scope:global -SpanishLocaleInfo = .data:0x8041C338; // type:object size:0x3 scope:global -DutchLocaleInfo = .data:0x8041C33B; // type:object size:0x3 scope:global -SwedishLocaleInfo = .data:0x8041C33E; // type:object size:0x3 scope:global -PolishLocaleInfo = .data:0x8041C341; // type:object size:0x3 scope:global -FinnishLocaleInfo = .data:0x8041C344; // type:object size:0x3 scope:global -DanishLocaleInfo = .data:0x8041C347; // type:object size:0x3 scope:global -LanguageInfoTable = .data:0x8041C34C; // type:object size:0xF0 scope:global -CurrentLanguage = .data:0x8041C43C; // type:object size:0x4 scope:global -pLanguageResourceFile = .data:0x8041C440; // type:object size:0x4 scope:global -pLanguageResourceFile_VM = .data:0x8041C444; // type:object size:0x4 scope:global -NumStringRecords = .data:0x8041C448; // type:object size:0x4 scope:global -PackedStringTable = .data:0x8041C44C; // type:object size:0x4 scope:global -RecordTable = .data:0x8041C450; // type:object size:0x4 scope:global -pWideCharHistogram = .data:0x8041C454; // type:object size:0x4 scope:global -DisableWideStringHistogram = .data:0x8041C460; // type:object size:0x4 scope:global -gDialogHandle = .data:0x8041C46C; // type:object size:0x4 scope:local -g_KBDelaySeconds = .data:0x8041C470; // type:object size:0x4 scope:global -g_MaxSongs = .data:0x8041C47C; // type:object size:0x4 scope:global -song_info_loaded.34751 = .data:0x8041C480; // type:object size:0x4 scope:local -FEDatabase = .data:0x8041C484; // type:object size:0x4 scope:global -prevModelNameHash.35592 = .data:0x8041C494; // type:object size:0x4 scope:local -modelNameKey.35593 = .data:0x8041C498; // type:object size:0x4 scope:local -g_fImpoundPercentageOfOriginalCost = .data:0x8041C49C; // type:object size:0x4 scope:global -g_MaximumMaximumTimesBusted = .data:0x8041C4A0; // type:object size:0x4 scope:global -mpobFERenderObjectSlotPool = .data:0x8041C4A4; // type:object size:0x4 scope:global -FERenderEPolySlotPool = .data:0x8041C4A8; // type:object size:0x4 scope:global -FERenderEPolySlotPoolOverflow = .data:0x8041C4AC; // type:object size:0x4 scope:global -_11cFEngRender.mInstance = .data:0x8041C4B0; // type:object size:0x4 scope:global -ObjectSortLastZ = .data:0x8041C4B4; // type:object size:0x4 scope:global -ObjectSortRenderingPackage = .data:0x8041C4B8; // type:object size:0x4 scope:global -gLoadinScreenPackageName = .data:0x8041C4BC; // type:object size:0x4 scope:global -ScreenFactoryData = .data:0x8041C4C0; // type:object size:0x448 scope:local -ScreenButtonData = .data:0x8041C908; // type:object size:0x258 scope:local -_13FEPackageData.mInScreenConstructor = .data:0x8041CB60; // type:object size:0x4 scope:global -_16FEPackageManager.mInstance = .data:0x8041CB64; // type:object size:0x4 scope:global -FontReplacementTable = .data:0x8041CB68; // type:object size:0x8 scope:global -ExtraFontDataTable = .data:0x8041CB70; // type:object size:0x30 scope:global -g_pOLCurrentScreen = .data:0x8041CBAC; // type:object size:0x4 scope:global -Button_Action_Hashes_GAMECUBE = .data:0x8041CBC0; // type:object size:0x154 scope:global -Button_Action_Hashes_GAMECUBE_Wheel = .data:0x8041CD14; // type:object size:0x154 scope:global -gTUTORIAL_MOVIE_DRAG = .data:0x8041CE6C; // type:object size:0x4 scope:local -gTUTORIAL_MOVIE_SPEEDTRAP = .data:0x8041CE70; // type:object size:0x4 scope:local -g_bCustomizeInBackRoom = .data:0x8041CE7C; // type:object size:0x4 scope:global -g_bCustomizeInPerformance = .data:0x8041CE80; // type:object size:0x4 scope:global -g_bCustomizeInParts = .data:0x8041CE84; // type:object size:0x4 scope:global -g_TheCustomizeEntryPoint = .data:0x8041CE88; // type:object size:0x4 scope:global -g_pCustomizeCarRecordToUse = .data:0x8041CE8C; // type:object size:0x4 scope:global -unlockType.38610 = .data:0x8041CE90; // type:object size:0xFC scope:local -unlockType.38626 = .data:0x8041CF8C; // type:object size:0x90 scope:local -FEDirection_Message = .data:0x8041D040; // type:object size:0x20 scope:global -PassWrapMode = .data:0x8041D060; // type:object size:0x14 scope:local -_13FECodeListBox.mpDefaultCallback = .data:0x8041D074; // type:object size:0x4 scope:global -_7FEngine.SysGUID = .data:0x8041D07C; // type:object size:0x4 scope:global -ImpulseDir = .data:0x8041D080; // type:object size:0x20 scope:local -PadButtonHash = .data:0x8041D0A0; // type:object size:0x4C scope:local -PadButtonHeldHash = .data:0x8041D0EC; // type:object size:0x8 scope:local -PadReleasedHash = .data:0x8041D0F4; // type:object size:0x4C scope:local -FEngMemoryPoolNumber = .data:0x8041D140; // type:object size:0x4 scope:global -pFEngMemoryPoolMemory = .data:0x8041D144; // type:object size:0x4 scope:global -FEngMemoryPoolSize = .data:0x8041D148; // type:object size:0x4 scope:global -FEngMemoryPoolTracingEnabled = .data:0x8041D150; // type:object size:0x4 scope:global -_8FEObject.pDestructorCallback = .data:0x8041D154; // type:object size:0x4 scope:global -_9FEPackage.uHoldDirtyFlags = .data:0x8041D158; // type:object size:0x4 scope:global -_8FEString.pLabelCallback = .data:0x8041D15C; // type:object size:0x4 scope:global -FEColor1Name = .data:0x8041D160; // type:object size:0x4 scope:local -FEColor2Name = .data:0x8041D164; // type:object size:0x4 scope:local -FEColor3Name = .data:0x8041D168; // type:object size:0x4 scope:local -FEColor4Name = .data:0x8041D16C; // type:object size:0x4 scope:local -FEFrameNumName = .data:0x8041D170; // type:object size:0x4 scope:local -SN_DSI = .data:0x8041D1C0; // type:object size:0x4 scope:global -SN_ISI = .data:0x8041D1C4; // type:object size:0x4 scope:global -SN_ALIGNMENT = .data:0x8041D1C8; // type:object size:0x4 scope:global -SN_FPE = .data:0x8041D1CC; // type:object size:0x4 scope:global -gMasterVideoMode = .data:0x8041D1DC; // type:object size:0x4 scope:local -UFoundation_AssertMessage = .data:0x8041D1E0; // type:object size:0x4 scope:global -_4CARP.gResolversSorted = .data:0x8041D1E8; // type:object size:0x4 scope:local -_4CARP.gHaveInitialized = .data:0x8041D1EC; // type:object size:0x4 scope:local -_4CARP.gDiagnosticFunc = .data:0x8041D1F4; // type:object size:0x4 scope:local -_4CARP.gResolving = .data:0x8041D1F8; // type:object size:0x4 scope:local -_4CARP.gDeltaAddress = .data:0x8041D1FC; // type:object size:0x4 scope:local -gInited = .data:0x8041D200; // type:object size:0x4 scope:local -_16GRuntimeInstance.sRingListHead = .data:0x8041D2B8; // type:object size:0x18 scope:global -_11GRaceStatus.fObj = .data:0x8041D30C; // type:object size:0x4 scope:global -_13GRaceDatabase.mObj = .data:0x8041D318; // type:object size:0x4 scope:global -typeTable.32142 = .data:0x8041D31C; // type:object size:0x58 scope:local -regionTable.32149 = .data:0x8041D374; // type:object size:0x18 scope:local -TWEAK_ShowGameplayMilestoneValues = .data:0x8041D394; // type:object size:0x4 scope:global -TWEAK_ShowAllGameplayIcons = .data:0x8041D398; // type:object size:0x4 scope:global -_8GManager.mObj = .data:0x8041D39C; // type:object size:0x4 scope:global -xLeft.34877 = .data:0x8041D3A4; // type:object size:0x4 scope:local -yTop.34878 = .data:0x8041D3A8; // type:object size:0x4 scope:local -line.34880 = .data:0x8041D3B0; // type:object size:0x4 scope:local -milestoneNames.34881 = .data:0x8041D3B4; // type:object size:0x24 scope:local -_18GInfractionManager.mObj = .data:0x8041D3D8; // type:object size:0x4 scope:global -_5GIcon.kEffectInfo = .data:0x8041D3DC; // type:object size:0xCC scope:global -sNumSpawned = .data:0x8041D4A8; // type:object size:0x4 scope:local -kObjectTemplateKey.37622 = .data:0x8041D4AC; // type:object size:0x18 scope:local -kObjectTemplateKey.37635 = .data:0x8041D4C4; // type:object size:0x18 scope:local -kObjectTemplateKey.37642 = .data:0x8041D4DC; // type:object size:0x18 scope:local -kObjectTemplateKey.37649 = .data:0x8041D4F4; // type:object size:0x18 scope:local -kObjectTemplateKey.37656 = .data:0x8041D50C; // type:object size:0x18 scope:local -kObjectTemplateKey.37663 = .data:0x8041D524; // type:object size:0x18 scope:local -_10LuaRuntime.mObj = .data:0x8041D580; // type:object size:0x4 scope:global -_13LuaPostOffice.fObj = .data:0x8041D590; // type:object size:0x4 scope:global -_10LuaBindery.fObj = .data:0x8041D59C; // type:object size:0x4 scope:global -_13LuaAttributes.fObj = .data:0x8041D5A0; // type:object size:0x4 scope:global -accessorTable.11371 = .data:0x8041D5A4; // type:object size:0xC0 scope:local -flagMapping.32877 = .data:0x8041D6D0; // type:object size:0x48 scope:local -kDisableNIS.32896 = .data:0x8041D718; // type:object size:0x4 scope:local -kPrintScriptMessages = .data:0x8041D71C; // type:object size:0x4 scope:local -sRealloc = .data:0x8041D724; // type:object size:0x4 scope:local -sFree = .data:0x8041D728; // type:object size:0x4 scope:local -fOverwroteDefaultsFacingScale.37496 = .data:0x8041D7EC; // type:object size:0x4 scope:local -fDefaultFacingScale.37497 = .data:0x8041D7F0; // type:object size:0x4 scope:local -fOverwroteDefaultsGrazingScale.37498 = .data:0x8041D7F4; // type:object size:0x4 scope:local -fDefaultGrazingScale.37499 = .data:0x8041D7F8; // type:object size:0x4 scope:local -wason.38444 = .data:0x8041D7FC; // type:object size:0x4 scope:local -prev_mode.38445 = .data:0x8041D800; // type:object size:0x4 scope:local -gMakeEventCallbacks = .data:0x8041D808; // type:object size:0x284 scope:local -gResolveEventCallbacks = .data:0x8041DA8C; // type:object size:0x284 scope:local -gEventLuaBindings = .data:0x8041DD10; // type:object size:0x284 scope:local -_5Query.gQueryFunctionTable = .data:0x8041DF94; // type:object size:0x4 scope:local -_5Query.gQueryResolverTable = .data:0x8041DF98; // type:object size:0x4 scope:local -_5Query.gQueryByteSwapperTable = .data:0x8041DF9C; // type:object size:0x4 scope:local -_6Attrib.kTypeHandlerCount = .data:0x8041DFA4; // type:object size:0x4 scope:local -_6Attrib.kTypeHandlerIds = .data:0x8041DFA8; // type:object size:0x20 scope:local -_6Attrib.kTypeHandlers = .data:0x8041DFC8; // type:object size:0x20 scope:local -GameActionToStringTable = .data:0x8041DFE8; // type:object size:0x458 scope:global -_11ActionQueue.sInJoylogFrame = .data:0x8041E440; // type:object size:0x4 scope:global -_Q43UTL3COMt7Factory3ZiZ11InputDeviceZ6UCrc32_9Prototype.mHead = .data:0x8041E444; // type:object size:0x4 scope:global -gMemoryBuffer = .data:0x8041E448; // type:object size:0x4 scope:local -gCreationPoint = .data:0x8041E44C; // type:object size:0x4 scope:local -gDeletionPoint = .data:0x8041E450; // type:object size:0x4 scope:local -gHighWaterMem = .data:0x8041E454; // type:object size:0x4 scope:local -_12EventManager.fgCurrentEvent = .data:0x8041E458; // type:object size:0x4 scope:global -_12EventManager.fgHaltCurrentList = .data:0x8041E45C; // type:object size:0x4 scope:global -_14EventSequencer.gNumActiveSystems = .data:0x8041E460; // type:object size:0x4 scope:local -_14EventSequencer.gLastUpdateTime = .data:0x8041E464; // type:object size:0x4 scope:local -LOCK_TO_30 = .data:0x8041E468; // type:object size:0x4 scope:global -_9Scheduler.fgScheduler = .data:0x8041E46C; // type:object size:0x4 scope:global -inputsys = .data:0x8041E47C; // type:object size:0x4 scope:global -input_buzz = .data:0x8041E480; // type:object size:0x20 scope:local -input_effects = .data:0x8041E4A0; // type:object size:0x10 scope:local -_10GameDevice.mCount = .data:0x8041E4B0; // type:object size:0x4 scope:global -gShowPortInfo = .data:0x8041E4B4; // type:object size:0x4 scope:global -pad_ticker = .data:0x8041E4B8; // type:object size:0x4 scope:local -pad_elapsed_ms = .data:0x8041E4BC; // type:object size:0x4 scope:local -_19SteeringWheelDevice.lgwheels = .data:0x8041E4C0; // type:object size:0x4 scope:global -previousVelocity.55375 = .data:0x8041E4C8; // type:object size:0x10 scope:local -timeAtCollision.55376 = .data:0x8041E4D8; // type:object size:0x10 scope:local -BasisMatrixInitDone = .data:0x8041E508; // type:object size:0x4 scope:global -ExitTheGameFlag = .data:0x8041E594; // type:object size:0x4 scope:global -last_frame_count = .data:0x8041E598; // type:object size:0x4 scope:local -g_discErrorNumber = .data:0x8041E59C; // type:object size:0x4 scope:global -g_discErrorOccured = .data:0x8041E5A0; // type:object size:0x4 scope:global -CurrentLoopCounter = .data:0x8041E5A8; // type:object size:0x4 scope:global -TimeDifferenceInMicroseconds = .data:0x8041E5B4; // type:object size:0x4 scope:global -TimeDifferenceInMiliseconds = .data:0x8041E5B8; // type:object size:0x4 scope:global -TimeDifferenceInSeconds = .data:0x8041E5BC; // type:object size:0x4 scope:global -MicrosecondsToMiliseconds = .data:0x8041E5C0; // type:object size:0x4 scope:global -MilisecondsToSeconds = .data:0x8041E5C4; // type:object size:0x4 scope:global -InitializeEverythingTicks = .data:0x8041E5C8; // type:object size:0x4 scope:global -RenderTimingStart = .data:0x8041E5F4; // type:object size:0x4 scope:global -RenderTimingEnd = .data:0x8041E5F8; // type:object size:0x4 scope:global -FrameTimingStartTime = .data:0x8041E5FC; // type:object size:0x4 scope:global -FrameTimingEndTime = .data:0x8041E600; // type:object size:0x4 scope:global -TweakerPauseCamera = .data:0x8041E61C; // type:object size:0x4 scope:global -camera_dt.28476 = .data:0x8041E620; // type:object size:0x4 scope:local -last_sim_tick_animated.28477 = .data:0x8041E624; // type:object size:0x4 scope:local -last_render_frame_animated.28478 = .data:0x8041E628; // type:object size:0x4 scope:local -gFramesToSkip = .data:0x8041E62C; // type:object size:0x4 scope:global -timeStep.28488 = .data:0x8041E630; // type:object size:0x4 scope:local -Tweak_FullSpeedMode = .data:0x8041E634; // type:object size:0x4 scope:global -twkDumpProfileMarks = .data:0x8041E638; // type:object size:0x4 scope:global -recursion_checker.28498 = .data:0x8041E63C; // type:object size:0x4 scope:local -previous_ticks.28499 = .data:0x8041E640; // type:object size:0x4 scope:local -PrintFreeMem.28503 = .data:0x8041E644; // type:object size:0x4 scope:local -NumResourcesBeingLoaded = .data:0x8041E648; // type:object size:0x4 scope:global -NumDelayedResourceCallbacks = .data:0x8041E64C; // type:object size:0x4 scope:global -ChunkMovementOffset = .data:0x8041E650; // type:object size:0x4 scope:global -LoaderTable = .data:0x8041E654; // type:object size:0x68 scope:global -UnloaderTable = .data:0x8041E6BC; // type:object size:0x68 scope:global -MoveChunkMemcpyTime = .data:0x8041E724; // type:object size:0x4 scope:global -MoveChunkMemcpyAmount = .data:0x8041E728; // type:object size:0x4 scope:global -PrintChunkLevel = .data:0x8041E730; // type:object size:0x4 scope:global -PostLoadFixupDisabled = .data:0x8041E734; // type:object size:0x4 scope:global -ResourceFileSlotPool = .data:0x8041E738; // type:object size:0x4 scope:global -CurrentlyHotChunking = .data:0x8041E73C; // type:object size:0x4 scope:global -_11AttribAlloc.mAllocator = .data:0x8041E740; // type:object size:0x4 scope:global -WheelsModelPackFilename = .data:0x8041E744; // type:object size:0x4 scope:global -SpoilerModelPackFilename = .data:0x8041E748; // type:object size:0x4 scope:global -SpoilerCarreraModelPackFilename = .data:0x8041E74C; // type:object size:0x4 scope:global -SpoilerHatchModelPackFilename = .data:0x8041E750; // type:object size:0x4 scope:global -SpoilerPorschesModelPackFilename = .data:0x8041E754; // type:object size:0x4 scope:global -RoofScoopModelPackFilename = .data:0x8041E758; // type:object size:0x4 scope:global -BrakesModelPackFilename = .data:0x8041E75C; // type:object size:0x4 scope:global -BrakesTexturePackFilename = .data:0x8041E760; // type:object size:0x4 scope:global -CarTexturePackFilename = .data:0x8041E764; // type:object size:0x4 scope:global -WheelsTexturePackFilename = .data:0x8041E768; // type:object size:0x4 scope:global -DynamicTexturePackFilename = .data:0x8041E76C; // type:object size:0x4 scope:global -HudDragTexturePackFilename = .data:0x8041E770; // type:object size:0x4 scope:global -HudSingleRaceTexturePackFilename = .data:0x8041E774; // type:object size:0x4 scope:global -HudSplitScreenTexturePackFilename = .data:0x8041E778; // type:object size:0x4 scope:global -HudDragSplitScreenTexturePackFilename = .data:0x8041E77C; // type:object size:0x4 scope:global -LoadingBootName = .data:0x8041E780; // type:object size:0x4 scope:global -LoadingControllerScreenPackageName = .data:0x8041E784; // type:object size:0x4 scope:global -pFrontEndVirtualMemBundle = .data:0x8041E788; // type:object size:0x4 scope:global -CarLoaderPoolSizes = .data:0x8041E78C; // type:object size:0x8 scope:global -CodeOverlayMemoryPoolNumber = .data:0x8041E794; // type:object size:0x4 scope:global -EnableCodeOverlayDebuggingOnly = .data:0x8041E798; // type:object size:0x4 scope:global -EnableCodeOverlay = .data:0x8041E79C; // type:object size:0x4 scope:global -CodeOverlayCallback = .data:0x8041E7A0; // type:object size:0x4 scope:global -CodeOverlayFirstTime = .data:0x8041E7A4; // type:object size:0x4 scope:global -FreeMemoryEnteringGame = .data:0x8041E7A8; // type:object size:0x4 scope:global -RealTimeFramesEnteringGame = .data:0x8041E7AC; // type:object size:0x4 scope:global -LeakDetectorFreeMemory = .data:0x8041E7B4; // type:object size:0x4 scope:global -LeakDetectorLargestAlloc = .data:0x8041E7B8; // type:object size:0x4 scope:global -LeakDetectorAllocationNumber = .data:0x8041E7BC; // type:object size:0x4 scope:global -InGameMemoryFile = .data:0x8041E7C4; // type:object size:0x4 scope:global -dummy.32338 = .data:0x8041E7C8; // type:object size:0x4 scope:local -gDatabaseVault = .data:0x8041E7CC; // type:object size:0x4 scope:local -sFrontEndVault = .data:0x8041E7D0; // type:object size:0x4 scope:local -sFrontEndVaultData = .data:0x8041E7D4; // type:object size:0x4 scope:local -sFrontEndVaultHigh = .data:0x8041E7D8; // type:object size:0x4 scope:local -GlobalMemoryFile = .data:0x8041E7E0; // type:object size:0x4 scope:global -FinishedLoadingGlobalSuccesful = .data:0x8041E7E8; // type:object size:0x4 scope:global -TrackStreamerLoadingBarUp = .data:0x8041E7EC; // type:object size:0x4 scope:global -ChunkNameTable = .data:0x8041E7F8; // type:object size:0x8 scope:global -buffer_num.32546 = .data:0x8041E800; // type:object size:0x4 scope:local -SmallRumblePoints = .data:0x8041E808; // type:object size:0x20 scope:global -BigRumblePoints = .data:0x8041E828; // type:object size:0x20 scope:global -ShockSwayRumblePoints = .data:0x8041E848; // type:object size:0x18 scope:global -RoadNoisePoints0 = .data:0x8041E860; // type:object size:0x18 scope:global -RoadNoisePoints1 = .data:0x8041E878; // type:object size:0x18 scope:global -BinaryRumblePoints = .data:0x8041E890; // type:object size:0x10 scope:global -SingleRoadBumpRumblePoints = .data:0x8041E8A0; // type:object size:0x10 scope:global -DoubleRoadBumpRumblePoints = .data:0x8041E8B0; // type:object size:0x20 scope:global -ShakeAmplitudePoints = .data:0x8041E8D0; // type:object size:0x28 scope:global -GearGrindPoints = .data:0x8041E8F8; // type:object size:0x18 scope:global -EngineHeatPoints = .data:0x8041E910; // type:object size:0x10 scope:global -EngineRevPoints = .data:0x8041E920; // type:object size:0x10 scope:global -NOSPoints = .data:0x8041E930; // type:object size:0x10 scope:global -DriftPoints = .data:0x8041E940; // type:object size:0x10 scope:global -BurnoutPoints = .data:0x8041E950; // type:object size:0x18 scope:global -EnableJoylog = .data:0x8041E968; // type:object size:0x4 scope:global -SaveJoylog = .data:0x8041E96C; // type:object size:0x4 scope:global -CurrentJoylogThrottleBuffer = .data:0x8041E970; // type:object size:0x4 scope:global -NFSJoylogChannelInfoTable = .data:0x8041E974; // type:object size:0xA8 scope:global -_6Joylog.ReplayingFlag = .data:0x8041EA1C; // type:object size:0x4 scope:global -_6Joylog.CapturingFlag = .data:0x8041EA20; // type:object size:0x4 scope:global -_6Joylog.pReplayingBuffer = .data:0x8041EA24; // type:object size:0x4 scope:global -_6Joylog.pCapturingBuffer = .data:0x8041EA28; // type:object size:0x4 scope:global -_6Joylog.ReadAheadBufferSize = .data:0x8041EA2C; // type:object size:0x4 scope:global -_6Joylog.ReadAheadBufferPos = .data:0x8041EA30; // type:object size:0x4 scope:global -_6Joylog.ReadAheadBuffer = .data:0x8041EA34; // type:object size:0x4 scope:global -total_captured.32815 = .data:0x8041EA3C; // type:object size:0x4 scope:local -QueuedFileDefaultPriority = .data:0x8041EA4C; // type:object size:0x4 scope:global -QueuedFileMinPriority = .data:0x8041EA50; // type:object size:0x4 scope:global -QueuedFileMinPriorityTimeoutCounter = .data:0x8041EA54; // type:object size:0x4 scope:global -QueuedFileJoylogEnabled = .data:0x8041EA58; // type:object size:0x4 scope:global -QueuedFileDebugTimeStart = .data:0x8041EA5C; // type:object size:0x4 scope:global -QueuedFileSlotPool = .data:0x8041EA60; // type:object size:0x4 scope:global -_10QueuedFile.CurrentHandle = .data:0x8041EA64; // type:object size:0x4 scope:global -_10QueuedFile.DecompressionTableBot = .data:0x8041EA68; // type:object size:0x4 scope:global -_10QueuedFile.DecompressionTableTop = .data:0x8041EA6C; // type:object size:0x4 scope:global -EnableQueuedFileBundle = .data:0x8041EA70; // type:object size:0x4 scope:global -QueuedFileNumReadsInProgress = .data:0x8041EA74; // type:object size:0x4 scope:global -bFileSlotPool = .data:0x8041EA78; // type:object size:0x4 scope:global -_20CachedRealFileHandle.NumInstances = .data:0x8041EA80; // type:object size:0x4 scope:global -OpenDisculatorFileSlotPool = .data:0x8041EA84; // type:object size:0x4 scope:global -_16DisculatorDriver.sDisculatorDriver = .data:0x8041EA88; // type:object size:0x4 scope:global -bFileNumInstances = .data:0x8041EA94; // type:object size:0x4 scope:global -_5bFile.TotalNumPendingCallbacks = .data:0x8041EA98; // type:object size:0x4 scope:global -ZERO = .data:0x8041EAA8; // type:object size:0x4 scope:local -hexChars.33689 = .data:0x8041EAAC; // type:object size:0x11 scope:local -bCartoonMode = .data:0x8041EAE8; // type:object size:0x4 scope:global -sWireFrame = .data:0x8041EAEC; // type:object size:0x24 scope:global -sPixelClamp = .data:0x8041EB10; // type:object size:0x18 scope:global -sFlatShaded = .data:0x8041EB28; // type:object size:0x18 scope:global -sFlatOrange = .data:0x8041EB40; // type:object size:0x18 scope:global -sWireOrange = .data:0x8041EB58; // type:object size:0x24 scope:global -sBigHead = .data:0x8041EB7C; // type:object size:0xC scope:global -sCartoonMode = .data:0x8041EB88; // type:object size:0x3C scope:global -sCoolFog = .data:0x8041EBC4; // type:object size:0x18 scope:global -sChromeCars = .data:0x8041EBDC; // type:object size:0x48 scope:global -StomperTable = .data:0x8041EC28; // type:object size:0x1C scope:global -pStomper = .data:0x8041EC44; // type:object size:0x4 scope:global -StaticEasterEggsTable.34218 = .data:0x8041EC48; // type:object size:0x78 scope:local -FrameCounter = .data:0x8041ECC0; // type:object size:0x4 scope:global -LastFrameCounterTick = .data:0x8041ECC4; // type:object size:0x4 scope:global -CurrentVideoMode = .data:0x8041ECC8; // type:object size:0x4 scope:global -RealTimeFrames = .data:0x8041ECCC; // type:object size:0x4 scope:global -RealTime = .data:0x8041ECD0; // type:object size:0x4 scope:global -RealTimeFramesElapsed = .data:0x8041ECD4; // type:object size:0x4 scope:global -RealTimeElapsedQuantized = .data:0x8041ECD8; // type:object size:0x4 scope:global -RealTimeElapsedFrame = .data:0x8041ECDC; // type:object size:0x4 scope:global -RealTimeElapsedError = .data:0x8041ECE0; // type:object size:0x4 scope:global -RealLoopCounter = .data:0x8041ECE4; // type:object size:0x4 scope:global -DefaultLimitMinimumVideoTimeElapsed = .data:0x8041ECE8; // type:object size:0x4 scope:global -MaxTicksPerTimestep = .data:0x8041ECEC; // type:object size:0x4 scope:global -SeenTimerProblem.34444 = .data:0x8041ECF0; // type:object size:0x4 scope:local -SavedTimeDifferenceInMicroseconds.34445 = .data:0x8041ECF4; // type:object size:0x4 scope:local -SavedTimeDifferenceInMiliseconds.34446 = .data:0x8041ECF8; // type:object size:0x4 scope:local -SavedTimeDifferenceInSeconds.34447 = .data:0x8041ECFC; // type:object size:0x4 scope:local -Saved_start_video_time_elapsed.34448 = .data:0x8041ED00; // type:object size:0x4 scope:local -Saved_high_nibble.34449 = .data:0x8041ED04; // type:object size:0x4 scope:local -HadBadTimeDifferenceInMiliseconds.34450 = .data:0x8041ED08; // type:object size:0x4 scope:local -HadBadTimeDifferenceInSeconds.34451 = .data:0x8041ED0C; // type:object size:0x4 scope:local -HadBad_start_video_time_elapsed.34452 = .data:0x8041ED10; // type:object size:0x4 scope:local -HadBad_video_time_elapsed.34453 = .data:0x8041ED14; // type:object size:0x4 scope:local -HadBad_MicrosecondsToMiliseconds.34454 = .data:0x8041ED18; // type:object size:0x4 scope:local -HadBad_MilisecondsToSeconds.34455 = .data:0x8041ED1C; // type:object size:0x4 scope:local -WorldTimeSeconds = .data:0x8041ED20; // type:object size:0x4 scope:global -WorldTime = .data:0x8041ED24; // type:object size:0x4 scope:global -WorldTimeFrames = .data:0x8041ED28; // type:object size:0x4 scope:global -WorldTimeFramesElapsed = .data:0x8041ED2C; // type:object size:0x4 scope:global -WorldTimeElapsed = .data:0x8041ED30; // type:object size:0x4 scope:global -WorldTimeElapsedFrame = .data:0x8041ED34; // type:object size:0x4 scope:global -WorldLoopCounter = .data:0x8041ED38; // type:object size:0x4 scope:global -NeedToPrepareWorldTimestep = .data:0x8041ED3C; // type:object size:0x4 scope:global -_Q26Hermes7Handler.mKeyNext = .data:0x8041ED48; // type:object size:0x4 scope:global -_Q26Hermes6System.mObj = .data:0x8041ED4C; // type:object size:0x4 scope:global -TotalNumHermesHandlers = .data:0x8041ED50; // type:object size:0x4 scope:global -BuildVersionChangelistName = .data:0x8041ED7C; // type:object size:0x4 scope:global -EmergencySaveMemory = .data:0x8041ED90; // type:object size:0x4 scope:global -SkipFE = .data:0x8041ED94; // type:object size:0x4 scope:global -SkipFETrackNumber = .data:0x8041ED98; // type:object size:0x4 scope:global -SkipFERaceID = .data:0x8041ED9C; // type:object size:0x10 scope:global -SkipFEPlayerCar = .data:0x8041EDAC; // type:object size:0x4 scope:global -SkipFEPlayer2Car = .data:0x8041EDB0; // type:object size:0x4 scope:global -SkipFEPlayerPerformance = .data:0x8041EDB4; // type:object size:0x4 scope:global -SkipFEOpponentPresetRide = .data:0x8041EDB8; // type:object size:0x4 scope:global -SkipFESplitScreen = .data:0x8041EDBC; // type:object size:0x4 scope:global -SkipFENumPlayerCars = .data:0x8041EDC4; // type:object size:0x4 scope:global -SkipFENumAICars = .data:0x8041EDC8; // type:object size:0x4 scope:global -SkipFENumLaps = .data:0x8041EDCC; // type:object size:0x4 scope:global -SkipFETrackDirection = .data:0x8041EDD0; // type:object size:0x4 scope:global -SkipFEMaxCops = .data:0x8041EDD4; // type:object size:0x4 scope:global -SkipFEDisableCops = .data:0x8041EDD8; // type:object size:0x4 scope:global -SkipFEHelicopter = .data:0x8041EDDC; // type:object size:0x4 scope:global -SkipFEPovType1 = .data:0x8041EDE0; // type:object size:0x4 scope:global -SkipFETrafficDensity = .data:0x8041EDE4; // type:object size:0x4 scope:global -SkipFEDisableTraffic = .data:0x8041EDE8; // type:object size:0x4 scope:global -SkipFETrafficOncoming = .data:0x8041EDEC; // type:object size:0x4 scope:global -SkipFERaceType = .data:0x8041EDF0; // type:object size:0x4 scope:global -SkipFEPoint2Point = .data:0x8041EDF4; // type:object size:0x4 scope:global -SkipFEDifficulty = .data:0x8041EDF8; // type:object size:0x4 scope:global -SkipFEDamageEnabled = .data:0x8041EDFC; // type:object size:0x4 scope:global -SkipFEOverrideStartPosition = .data:0x8041EE00; // type:object size:0x4 scope:global -SkipNISs = .data:0x8041EE08; // type:object size:0x4 scope:global -SkipFELanguage = .data:0x8041EE0C; // type:object size:0x4 scope:global -SkipFEControllerConfig1 = .data:0x8041EE10; // type:object size:0x4 scope:global -SkipFEControllerConfig2 = .data:0x8041EE14; // type:object size:0x4 scope:global -bRumbleEnabled = .data:0x8041EE20; // type:object size:0x4 scope:global -gVerboseTesterOutput = .data:0x8041EE2C; // type:object size:0x4 scope:global -PrecipitationEnable = .data:0x8041EE30; // type:object size:0x4 scope:global -TimeOfDaySwapEnable = .data:0x8041EE34; // type:object size:0x4 scope:global -EnableParticleSystem = .data:0x8041EE38; // type:object size:0x4 scope:global -DebugCameraNearPlane = .data:0x8041EE44; // type:object size:0x4 scope:global -IsSoundEnabled = .data:0x8041EE4C; // type:object size:0x4 scope:global -IsAudioStreamingEnabled = .data:0x8041EE50; // type:object size:0x4 scope:global -IsSpeechEnabled = .data:0x8041EE54; // type:object size:0x4 scope:global -IsNISAudioEnabled = .data:0x8041EE58; // type:object size:0x4 scope:global -ShutJosieUp = .data:0x8041EE5C; // type:object size:0x4 scope:global -IsMemcardEnabled = .data:0x8041EE60; // type:object size:0x4 scope:global -IsAutoSaveEnabled = .data:0x8041EE64; // type:object size:0x4 scope:global -AnimCfg_DisableAnimations = .data:0x8041EE6C; // type:object size:0x4 scope:global -AnimCfg_DebugOutput = .data:0x8041EE84; // type:object size:0x4 scope:global -AnimCfg_DisableWorldAnimations = .data:0x8041EE88; // type:object size:0x4 scope:global -OnlineEnabled = .data:0x8041EE9C; // type:object size:0x4 scope:global -DisableCommunication = .data:0x8041EEAC; // type:object size:0x4 scope:global -UnlockAllThings = .data:0x8041EEB0; // type:object size:0x4 scope:global -SkipCareerIntro = .data:0x8041EEB4; // type:object size:0x4 scope:global -SkipDDayRaces = .data:0x8041EEB8; // type:object size:0x4 scope:global -ShowAllCarsInFE = .data:0x8041EEBC; // type:object size:0x4 scope:global -ShowAllPresetsInFE = .data:0x8041EEC4; // type:object size:0x4 scope:global -MikeMannBuild = .data:0x8041EEC8; // type:object size:0x4 scope:global -IsCollectorsEdition = .data:0x8041EECC; // type:object size:0x4 scope:global -CarGuysCamera = .data:0x8041EED4; // type:object size:0x4 scope:global -DoScreenPrintf = .data:0x8041EEE8; // type:object size:0x4 scope:global -SkipMovies = .data:0x8041EEEC; // type:object size:0x4 scope:global -_Q33UTL11Collectionst9Singleton1Z7ICopMgr.mInstance = .data:0x8041EF88; // type:object size:0x4 scope:global -_Q33UTL11Collectionst9Singleton1Z10IGameState.mInstance = .data:0x8041EF8C; // type:object size:0x4 scope:global -_Q33UTL11Collectionst9Singleton1Z11ITrafficMgr.mInstance = .data:0x8041EF90; // type:object size:0x4 scope:global -_Q33UTL11Collectionst9Countable1Z17IPlaceableScenery._mCount = .data:0x8041EF94; // type:object size:0x4 scope:global -_Q43UTL3COMt7Factory3ZQ23Sim5ParamZ8ISimableZ6UCrc32_9Prototype.mHead = .data:0x8041EF98; // type:object size:0x4 scope:global -_Q43UTL3COMt7Factory3ZQ23Sim5ParamZQ23Sim9IActivityZ6UCrc32_9Prototype.mHead = .data:0x8041EF9C; // type:object size:0x4 scope:global -Tweak_TuningAero = .data:0x8041EFDC; // type:object size:0x4 scope:global -Tweak_UseTweakerTunings = .data:0x8041EFE0; // type:object size:0x4 scope:global -Smackable_RigidCount = .data:0x8041EFE8; // type:object size:0x4 scope:local -_Q33UTL11Collectionst9Singleton1ZQ29Smackable7Manager.mInstance = .data:0x8041EFEC; // type:object size:0x4 scope:global -_13VehicleSystem.ENABLE_ROLL_STOPS_THRESHOLD = .data:0x8041F008; // type:object size:0x4 scope:global -_13VehicleSystem.PAD_DEAD_ZONE = .data:0x8041F020; // type:object size:0x4 scope:global -_Q43UTL3COMt7Factory3ZRC14BehaviorParamsZ8BehaviorZ6UCrc32_9Prototype.mHead = .data:0x8041F054; // type:object size:0x4 scope:global -_12SceneryModel.mSceneryCount = .data:0x8041F078; // type:object size:0x4 scope:global -TheSmackableClass = .data:0x8041F07C; // type:object size:0x4 scope:local -put_maps = .data:0x8041F080; // type:object size:0xE0 scope:global -Physics_Info_initialized = .data:0x8041F164; // type:object size:0x4 scope:local -_t10ScratchPtr1ZQ29RigidBody8Volatile.mWorkSpace = .data:0x8041F1A4; // type:object size:0x4 scope:global -_9RigidBody.mCount = .data:0x8041F1A8; // type:object size:0x4 scope:global -_Q23SAPt4Grid1Z9RigidBody.mRootX = .data:0x8041F1AC; // type:object size:0x4 scope:global -_Q23SAPt4Grid1Z9RigidBody.mRootZ = .data:0x8041F1B0; // type:object size:0x4 scope:global -_9RigidBody.mOnSP = .data:0x8041F1B4; // type:object size:0x4 scope:global -_t10ScratchPtr1ZQ215SimpleRigidBody8Volatile.mWorkSpace = .data:0x8041F1B8; // type:object size:0x4 scope:global -_15SimpleRigidBody.mCount = .data:0x8041F1BC; // type:object size:0x4 scope:global -TractionVsSpeed = .data:0x8041F228; // type:object size:0x28 scope:global -GripVsSpeed = .data:0x8041F250; // type:object size:0x28 scope:global -AeroDropOff = .data:0x8041F278; // type:object size:0x4 scope:global -AeroDropOffMin = .data:0x8041F27C; // type:object size:0x4 scope:global -OffThrottleDragFactor = .data:0x8041F280; // type:object size:0x4 scope:global -OffThrottleDragCenterHeight = .data:0x8041F284; // type:object size:0x4 scope:global -ZeroDegreeTable = .data:0x8041F288; // type:object size:0x18 scope:global -TwoDegreeTable = .data:0x8041F2A0; // type:object size:0x18 scope:global -FourDegreeTable = .data:0x8041F2B8; // type:object size:0x18 scope:global -SixDegreeTable = .data:0x8041F2D0; // type:object size:0x18 scope:global -EightDegreeTable = .data:0x8041F2E8; // type:object size:0x18 scope:global -TenDegreeTable = .data:0x8041F300; // type:object size:0x18 scope:global -TwelveDegreeTable = .data:0x8041F318; // type:object size:0x18 scope:global -LoadSensitivityTable = .data:0x8041F330; // type:object size:0x1C scope:global -BrakingTorque = .data:0x8041F350; // type:object size:0x4 scope:global -EBrakingTorque = .data:0x8041F354; // type:object size:0x4 scope:global -StaticToDynamicBrakeForceRatio.32494 = .data:0x8041F358; // type:object size:0x4 scope:local -BrakeLockAngularVelocityFactor.32495 = .data:0x8041F35C; // type:object size:0x4 scope:local -RollingFriction = .data:0x8041F360; // type:object size:0x4 scope:global -WheelMomentOfInertia = .data:0x8041F364; // type:object size:0x4 scope:global -BrakeSteeringRangeMultiplier = .data:0x8041F368; // type:object size:0x4 scope:global -SteeringRangeData = .data:0x8041F374; // type:object size:0x28 scope:global -SteeringInputRangeData = .data:0x8041F39C; // type:object size:0x18 scope:global -SteeringSpeedData = .data:0x8041F3B4; // type:object size:0x28 scope:global -SteeringWheelRangeData = .data:0x8041F3DC; // type:object size:0x28 scope:global -SteeringInputSpeedData = .data:0x8041F404; // type:object size:0x18 scope:global -SteeringInputData = .data:0x8041F41C; // type:object size:0x18 scope:global -JoystickInputToSteerRemap1 = .data:0x8041F434; // type:object size:0x54 scope:global -JoystickInputToSteerRemap2 = .data:0x8041F488; // type:object size:0x54 scope:global -JoystickInputToSteerRemap3 = .data:0x8041F4DC; // type:object size:0x54 scope:global -JoystickInputToSteerRemapDrift = .data:0x8041F530; // type:object size:0x54 scope:global -BurnoutFrictionData = .data:0x8041F584; // type:object size:0x30 scope:global -BurnOutCancelSlipValue = .data:0x8041F5B4; // type:object size:0x4 scope:global -BurnOutYawCancel = .data:0x8041F5B8; // type:object size:0x4 scope:global -BurnOutAllowTime = .data:0x8041F5BC; // type:object size:0x4 scope:global -BurnOutMaxSpeed = .data:0x8041F5C0; // type:object size:0x4 scope:global -BurnOutFishTailTime = .data:0x8041F5C4; // type:object size:0x4 scope:global -BurnOutFishTails = .data:0x8041F5C8; // type:object size:0x4 scope:global -EBrakeYawControlMin = .data:0x8041F5CC; // type:object size:0x4 scope:global -EBrakeYawControlOnSpeed = .data:0x8041F5D0; // type:object size:0x4 scope:global -EBrakeYawControlOffSpeed = .data:0x8041F5D4; // type:object size:0x4 scope:global -EBrake180Yaw = .data:0x8041F5D8; // type:object size:0x4 scope:global -EBrake180Speed = .data:0x8041F5DC; // type:object size:0x4 scope:global -LowSpeedSpeed = .data:0x8041F5E0; // type:object size:0x4 scope:global -HighSpeedSpeed = .data:0x8041F5E4; // type:object size:0x4 scope:global -MaxYawBonus = .data:0x8041F5E8; // type:object size:0x4 scope:global -LowSpeedYawBoost = .data:0x8041F5EC; // type:object size:0x4 scope:global -HighSpeedYawBoost = .data:0x8041F5F0; // type:object size:0x4 scope:global -YawEBrakeThreshold = .data:0x8041F5F4; // type:object size:0x4 scope:global -YawAngleThreshold = .data:0x8041F5F8; // type:object size:0x4 scope:global -DriftRearFrictionData = .data:0x8041F608; // type:object size:0x28 scope:global -printit = .data:0x8041F630; // type:object size:0x4 scope:local -TrailerCorneringForceTable = .data:0x8041F634; // type:object size:0x1C scope:global -gNIS_AeroDynamics = .data:0x8041F650; // type:object size:0x4 scope:global -Tweak_InfiniteNOS = .data:0x8041F654; // type:object size:0x4 scope:global -ClutchStiffness = .data:0x8041F658; // type:object size:0x4 scope:global -ClutchPlayData = .data:0x8041F65C; // type:object size:0x28 scope:global -ClutchLimiter = .data:0x8041F684; // type:object size:0x4 scope:global -Max_Chopper_Accel = .data:0x8041F688; // type:object size:0x4 scope:global -Min_Chopper_Accel = .data:0x8041F68C; // type:object size:0x4 scope:global -Chopper_Ratio = .data:0x8041F690; // type:object size:0x4 scope:global -Vehicle_Part_Count = .data:0x8041F69C; // type:object size:0x4 scope:local -snProfilerEnable = .data:0x8041F728; // type:object size:0x4 scope:global -egAlphaA = .data:0x8041F738; // type:object size:0x4 scope:global -egAlphaB = .data:0x8041F73C; // type:object size:0x4 scope:global -egAlphaC = .data:0x8041F740; // type:object size:0x4 scope:global -egAlphaD = .data:0x8041F744; // type:object size:0x4 scope:global -egAlphaF = .data:0x8041F748; // type:object size:0x4 scope:global -s_OpenCover_ErrorText = .data:0x8041F74C; // type:object size:0xA8 scope:global -resetButtonPressed.25896 = .data:0x8041F7F4; // type:object size:0x4 scope:local -queuedSavingResetButtonPressed.25897 = .data:0x8041F7F8; // type:object size:0x4 scope:local -resetMode.25898 = .data:0x8041F7FC; // type:object size:0x4 scope:local -softwareResetCheckStarted.25899 = .data:0x8041F800; // type:object size:0x4 scope:local -num_queued_resets.25901 = .data:0x8041F804; // type:object size:0x4 scope:local -eAnimTextureSlotPool = .data:0x8041F808; // type:object size:0x4 scope:global -pTexPrev = .data:0x8041F80C; // type:object size:0x4 scope:global -stagePrev.26088 = .data:0x8041F810; // type:object size:0x4 scope:local -plat_lgwheels = .data:0x8041F814; // type:object size:0x4 scope:global -JoystickRingBufferTop = .data:0x8041F824; // type:object size:0x4 scope:global -JoystickRingBufferBottom = .data:0x8041F828; // type:object size:0x4 scope:global -JoystickInitialized = .data:0x8041F830; // type:object size:0x4 scope:global -SunPosX = .data:0x8041F840; // type:object size:0x4 scope:global -SunPosY = .data:0x8041F844; // type:object size:0x4 scope:global -SunVisibility = .data:0x8041F848; // type:object size:0x4 scope:global -DoSunVisibility = .data:0x8041F850; // type:object size:0x4 scope:global -SunMaxIntensity = .data:0x8041F854; // type:object size:0x4 scope:global -bin_globala_bun = .data:0x8041F8C4; // type:object size:0x15E74 scope:global -randomSeed = .data:0x80435738; // type:object size:0x4 scope:local -gComment1 = .data:0x80435740; // type:object size:0x4 scope:global -_7RRandom.fastRandom = .data:0x80435768; // type:object size:0x4 scope:global -_7RRandom.randSeed = .data:0x8043576C; // type:object size:0x4 scope:global -_Q23Sim8Internal.mRenderFrame = .data:0x80435814; // type:object size:0x4 scope:local -_Q23Sim8Internal.mFrameTime = .data:0x80435818; // type:object size:0x4 scope:local -_Q23Sim8Internal.mWorkspace = .data:0x8043581C; // type:object size:0x4 scope:local -_Q23Sim8Internal.mStackFrame = .data:0x80435820; // type:object size:0x4 scope:local -_Q33UTL11Collectionst9Countable1Z7SimTask._mCount = .data:0x80435828; // type:object size:0x4 scope:global -_7SimTask.mNextHandle = .data:0x8043582C; // type:object size:0x4 scope:global -_Q23Sim9SubSystem.mHead = .data:0x80435830; // type:object size:0x4 scope:global -_Q23Sim8Internal.mUserMode = .data:0x80435838; // type:object size:0x4 scope:local -_Q33UTL11Collectionst9Singleton1ZQ33Sim8Internal11CDispatcher.mInstance = .data:0x8043583C; // type:object size:0x4 scope:global -TheSurfaceClass = .data:0x80435848; // type:object size:0x4 scope:local -_10SimSurface.mUnknown = .data:0x80435850; // type:object size:0x4 scope:global -_10SimSurface.mNullSpec = .data:0x80435854; // type:object size:0x4 scope:global -Tweak_GameBreakerRechargeTime = .data:0x80435884; // type:object size:0x4 scope:global -Tweak_GameBreakerRechargeSpeed = .data:0x80435888; // type:object size:0x4 scope:global -Tweak_InfiniteRaceBreaker = .data:0x8043588C; // type:object size:0x4 scope:global -Tweak_GameBreakerCollisionMass = .data:0x80435890; // type:object size:0x4 scope:global -_Q33UTL11Collectionst9Countable1ZQ23Sim6Object._mCount = .data:0x80435894; // type:object size:0x4 scope:global -_Q43UTL3COMt7Factory3ZQ23Sim5ParamZQ23Sim7IEntityZ6UCrc32_9Prototype.mHead = .data:0x80435898; // type:object size:0x4 scope:global -_Q43UTL3COMt7Factory3ZRCQ23Sim14ConnectionDataZQ23Sim10ConnectionZ6UCrc32_9Prototype.mHead = .data:0x8043589C; // type:object size:0x4 scope:global -_Q43UTL3COMt7Factory3ZPQ23Sim6PacketZiZ6UCrc32_9Prototype.mHead = .data:0x804358A0; // type:object size:0x4 scope:global -_Q33UTL11Collectionst9Countable1ZQ23Sim10Connection._mCount = .data:0x804358A4; // type:object size:0x4 scope:global -bSawLoadingScreen = .data:0x804358AC; // type:object size:0x4 scope:global -Tweak_GameSpeed = .data:0x804358B4; // type:object size:0x4 scope:global -_Q33UTL11Collectionst9Singleton1Z4INIS.mInstance = .data:0x804358C4; // type:object size:0x4 scope:global -NisNamesToDisablePreculler = .data:0x804358C8; // type:object size:0x4 scope:global -_11NISActivity.mElapsedmsAudioTime = .data:0x804358CC; // type:object size:0x4 scope:global -Tweak_EnableNISMomements = .data:0x804358D0; // type:object size:0x4 scope:global -gSpeechSeed = .data:0x80435970; // type:object size:0x4 scope:local -SPEECH_DISPLAY_HISTORY = .data:0x80435978; // type:object size:0x4 scope:global -_Q26Speech7Manager.m_SpeechModule = .data:0x80435980; // type:object size:0x8 scope:global -_Q26Speech7Manager.m_speechMode = .data:0x80435988; // type:object size:0x4 scope:global -_Q26Speech7Manager.m_numberSpeechBanks = .data:0x8043598C; // type:object size:0x4 scope:global -_Q26Speech7Manager.m_SPEECH_initted = .data:0x80435990; // type:object size:0x4 scope:global -_Q26Speech7Manager.m_SPEECH_bankPtrMem = .data:0x80435994; // type:object size:0x4 scope:global -_Q26Speech7Manager.m_speechDisable = .data:0x80435998; // type:object size:0x4 scope:global -_Q26Speech7Manager.m_gameSpeechInitted = .data:0x8043599C; // type:object size:0x4 scope:global -_Q26Speech7Manager.m_NISAudioInitted = .data:0x804359A0; // type:object size:0x4 scope:global -_Q26Speech7Manager.m_clock_in_ms = .data:0x804359A4; // type:object size:0x4 scope:global -_Q26Speech7Manager.m_timestep = .data:0x804359A8; // type:object size:0x4 scope:global -_Q26Speech7Manager.m_deadair = .data:0x804359AC; // type:object size:0x4 scope:global -_Q26Speech7Manager.mCurrentEvent = .data:0x804359B0; // type:object size:0x4 scope:global -_Q26Speech7Manager.m_frameindex = .data:0x804359B4; // type:object size:0x2 scope:global -_Q26Speech7Manager.mProbPlayback = .data:0x804359B8; // type:object size:0x4 scope:global -_Q26Speech7Manager.mLastSpeakerID = .data:0x804359BC; // type:object size:0x2 scope:global -max_samplerequests.25590 = .data:0x804359C0; // type:object size:0x4 scope:local -TRACKSTREAMER_BACKLOG_THRESH = .data:0x804359D0; // type:object size:0x4 scope:global -_Q26Speech10GameSpeech.m_tempCharPtr = .data:0x804359D4; // type:object size:0x4 scope:global -_Q26Speech10GameSpeech.m_clumpIdx = .data:0x804359D8; // type:object size:0x4 scope:global -_Q26Speech10GameSpeech.m_csisData = .data:0x804359DC; // type:object size:0x4 scope:global -_Q26Speech10GameSpeech.m_channel = .data:0x804359E0; // type:object size:0x4 scope:global -_Q26Speech10GameSpeech.m_eventDat = .data:0x804359E4; // type:object size:0x4 scope:global -req_timer.26707 = .data:0x804359E8; // type:object size:0x4 scope:local -_Q26Speech10SED_NISSFX.m_tempCharPtr = .data:0x804359EC; // type:object size:0x4 scope:global -_Q26Speech10SED_NISSFX.m_clumpIdx = .data:0x804359F0; // type:object size:0x4 scope:global -_Q26Speech10SED_NISSFX.m_csisData = .data:0x804359F4; // type:object size:0x4 scope:global -_Q26Speech10SED_NISSFX.m_channel = .data:0x804359F8; // type:object size:0x4 scope:global -_Q26Speech10SED_NISSFX.m_eventDat = .data:0x804359FC; // type:object size:0x4 scope:global -_Q26Speech10SED_NISSFX.m_dataIsLoaded = .data:0x80435A00; // type:object size:0x4 scope:global -SpeechMemoryPool = .data:0x80435A04; // type:object size:0x4 scope:global -SPEECH_CACHE_STATS = .data:0x80435A08; // type:object size:0x4 scope:global -PRINT_SPEECH_CACHE_IO = .data:0x80435A0C; // type:object size:0x4 scope:global -flushcount_uncached = .data:0x80435A10; // type:object size:0x4 scope:local -flushcount_lru = .data:0x80435A14; // type:object size:0x4 scope:local -flushcount_inactive_spkrs = .data:0x80435A18; // type:object size:0x4 scope:local -flushcount_all = .data:0x80435A1C; // type:object size:0x4 scope:local -_4Csis.AcknowledgeId = .data:0x80435A20; // type:object size:0x8 scope:global -_4Csis.Setup_SpotterId = .data:0x80435A28; // type:object size:0x8 scope:global -_4Csis.Setup_SpotterWantedId = .data:0x80435A30; // type:object size:0x8 scope:global -_4Csis.Setup_SpotterReplyId = .data:0x80435A38; // type:object size:0x8 scope:global -_4Csis.Setup_AttmptVehStpId = .data:0x80435A40; // type:object size:0x8 scope:global -_4Csis.Setup_DispGoAheadId = .data:0x80435A48; // type:object size:0x8 scope:global -_4Csis.Setup_PrimaryEngageId = .data:0x80435A50; // type:object size:0x8 scope:global -_4Csis.Setup_InitPursuitId = .data:0x80435A58; // type:object size:0x8 scope:global -_4Csis.Setup_SuspectConfirmedId = .data:0x80435A60; // type:object size:0x8 scope:global -_4Csis.Setup_ReInitPursuitId = .data:0x80435A68; // type:object size:0x8 scope:global -_4Csis.Setup_VehicleReportId = .data:0x80435A70; // type:object size:0x8 scope:global -_4Csis.Setup_VehicleReportTagId = .data:0x80435A78; // type:object size:0x8 scope:global -_4Csis.Setup_DispVehDescripId = .data:0x80435A80; // type:object size:0x8 scope:global -_4Csis.Setup_DispVehDescripVinylsId = .data:0x80435A88; // type:object size:0x8 scope:global -_4Csis.Setup_DispNoVehDescripId = .data:0x80435A90; // type:object size:0x8 scope:global -_4Csis.Setup_DispCustPaintId = .data:0x80435A98; // type:object size:0x8 scope:global -_4Csis.Setup_MoreDetailsId = .data:0x80435AA0; // type:object size:0x8 scope:global -_4Csis.Setup_LocationReportId = .data:0x80435AA8; // type:object size:0x8 scope:global -_4Csis.Setup_BullhornPrefixId = .data:0x80435AB0; // type:object size:0x8 scope:global -_4Csis.Setup_BullhornId = .data:0x80435AB8; // type:object size:0x8 scope:global -_4Csis.Setup_SelfStrategyId = .data:0x80435AC0; // type:object size:0x8 scope:global -_4Csis.Setup_InitialCallForBUId = .data:0x80435AC8; // type:object size:0x8 scope:global -_4Csis.Setup_InitialCallForBU_MSId = .data:0x80435AD0; // type:object size:0x8 scope:global -_4Csis.Backup_CallForBUId = .data:0x80435AD8; // type:object size:0x8 scope:global -_4Csis.Backup_UnitBUReplyId = .data:0x80435AE0; // type:object size:0x8 scope:global -_4Csis.Backup_DispBackupReplyId = .data:0x80435AE8; // type:object size:0x8 scope:global -_4Csis.Backup_CallForSwarmingId = .data:0x80435AF0; // type:object size:0x8 scope:global -_4Csis.Backup_DispBUETAId = .data:0x80435AF8; // type:object size:0x8 scope:global -_4Csis.Backup_DispHeliBUETAId = .data:0x80435B00; // type:object size:0x8 scope:global -_4Csis.Backup_BUReminderId = .data:0x80435B08; // type:object size:0x8 scope:global -_4Csis.Backup_NegativeBUReplyId = .data:0x80435B10; // type:object size:0x8 scope:global -_4Csis.Backup_DispBackupUpdateId = .data:0x80435B18; // type:object size:0x8 scope:global -_4Csis.Backup_BUArrivesId = .data:0x80435B20; // type:object size:0x8 scope:global -_4Csis.StaticRoadblock_CallForRBId = .data:0x80435B28; // type:object size:0x8 scope:global -_4Csis.StaticRoadblock_RBReminderId = .data:0x80435B30; // type:object size:0x8 scope:global -_4Csis.StaticRoadblock_NegativeRBReplyId = .data:0x80435B38; // type:object size:0x8 scope:global -_4Csis.StaticRoadblock_DispRBReplyId = .data:0x80435B40; // type:object size:0x8 scope:global -_4Csis.StaticRoadblock_DispRBUpdateId = .data:0x80435B48; // type:object size:0x8 scope:global -_4Csis.StaticRoadblock_PursuitApproachingId = .data:0x80435B50; // type:object size:0x8 scope:global -_4Csis.StaticRoadblock_RBApproachId = .data:0x80435B58; // type:object size:0x8 scope:global -_4Csis.StaticRoadblock_RBEngageId = .data:0x80435B60; // type:object size:0x8 scope:global -_4Csis.StaticRoadblock_RBAvertedId = .data:0x80435B68; // type:object size:0x8 scope:global -_4Csis.StaticRoadblock_CallForRB_subId = .data:0x80435B70; // type:object size:0x8 scope:global -_4Csis.StaticRoadblock_DispSubRBId = .data:0x80435B78; // type:object size:0x8 scope:global -_4Csis.Projectile_CallForSafetyId = .data:0x80435B80; // type:object size:0x8 scope:global -_4Csis.Projectile_ProjectileLaunchId = .data:0x80435B88; // type:object size:0x8 scope:global -_4Csis.Projectile_ProjectileHitId = .data:0x80435B90; // type:object size:0x8 scope:global -_4Csis.Projectile_ProjectileMissId = .data:0x80435B98; // type:object size:0x8 scope:global -_4Csis.RollingStrategy_InitStrategyId = .data:0x80435BA0; // type:object size:0x8 scope:global -_4Csis.RollingStrategy_CallToPositionId = .data:0x80435BA8; // type:object size:0x8 scope:global -_4Csis.RollingStrategy_CallToPositionRemId = .data:0x80435BB0; // type:object size:0x8 scope:global -_4Csis.RollingStrategy_StrategyExecuteId = .data:0x80435BB8; // type:object size:0x8 scope:global -_4Csis.Outcome_AnticipateFailId = .data:0x80435BC0; // type:object size:0x8 scope:global -_4Csis.Outcome_AnticipateSuccessId = .data:0x80435BC8; // type:object size:0x8 scope:global -_4Csis.Outcome_OutcomeFailId = .data:0x80435BD0; // type:object size:0x8 scope:global -_4Csis.Outcome_StrategyResetId = .data:0x80435BD8; // type:object size:0x8 scope:global -_4Csis.Arrest_BullhornArrestId = .data:0x80435BE0; // type:object size:0x8 scope:global -_4Csis.Arrest_ArrestId = .data:0x80435BE8; // type:object size:0x8 scope:global -_4Csis.Arrest_DispArrestReplyId = .data:0x80435BF0; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_CollisionWorldId = .data:0x80435BF8; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_CollWorld_CiviId = .data:0x80435C00; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_CollWorld_SpinId = .data:0x80435C08; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_CollWorld_AirId = .data:0x80435C10; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_CollWorld_FlipId = .data:0x80435C18; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_DispPursuitUpdateId = .data:0x80435C20; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_PursuitUpdateRepId = .data:0x80435C28; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_Disp911ReportId = .data:0x80435C30; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_Disp911CsPntId = .data:0x80435C38; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_Disp911NoDescripId = .data:0x80435C40; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_Unit911ReplyId = .data:0x80435C48; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_SuspectUTurnId = .data:0x80435C50; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_SuspectOutrunId = .data:0x80435C58; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_LostVisualId = .data:0x80435C60; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_RegainVisualId = .data:0x80435C68; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_LostSuspectId = .data:0x80435C70; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_DispBreakAwayId = .data:0x80435C78; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_DispTimeExpiredId = .data:0x80435C80; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_DispPursuitEscalationId = .data:0x80435C88; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_DispPursEscGenId = .data:0x80435C90; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_UnitDisabledId = .data:0x80435C98; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_CallForEVId = .data:0x80435CA0; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_DispEVReplyId = .data:0x80435CA8; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_IntentToRamId = .data:0x80435CB0; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_BailoutId = .data:0x80435CB8; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_BailoutDenyId = .data:0x80435CC0; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_FocusChangeId = .data:0x80435CC8; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_SuspectBehaviourId = .data:0x80435CD0; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_DriverHistoryId = .data:0x80435CD8; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_OffroadMomentId = .data:0x80435CE0; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_SpottedId = .data:0x80435CE8; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_SuspectBrakeId = .data:0x80435CF0; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_WeatherReportId = .data:0x80435CF8; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_HeatJumpId = .data:0x80435D00; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_DirectionHighId = .data:0x80435D08; // type:object size:0x8 scope:global -_4Csis.AnytimeEvents_DispJurisShiftId = .data:0x80435D10; // type:object size:0x8 scope:global -_4Csis.HeliSpecific_HeliSelfStrategyId = .data:0x80435D18; // type:object size:0x8 scope:global -_4Csis.HeliSpecific_HeliLostVisualId = .data:0x80435D20; // type:object size:0x8 scope:global -_4Csis.HeliSpecific_HeliIntentToBailId = .data:0x80435D28; // type:object size:0x8 scope:global -_4Csis.HeliSpecific_HeliBailoutId = .data:0x80435D30; // type:object size:0x8 scope:global -_4Csis.HeliSpecific_HeliSwarmingId = .data:0x80435D38; // type:object size:0x8 scope:global -_4Csis.HeliSpecific_HeliSpotterId = .data:0x80435D40; // type:object size:0x8 scope:global -_4Csis.HeliSpecific_HeliHazardAlertId = .data:0x80435D48; // type:object size:0x8 scope:global -_4Csis.HeliSpecific_HeliQuadrentId = .data:0x80435D50; // type:object size:0x8 scope:global -_4Csis.HeliSpecific_HeliQuadrentMovingId = .data:0x80435D58; // type:object size:0x8 scope:global -_4Csis.HeliSpecific_HeliBullhornArrestId = .data:0x80435D60; // type:object size:0x8 scope:global -_4Csis.E3_Events_E3_SetupId = .data:0x80435D68; // type:object size:0x8 scope:global -_4Csis.Interrupts_InterruptId = .data:0x80435D70; // type:object size:0x8 scope:global -_4Csis.Interrupts_InterruptRamId = .data:0x80435D78; // type:object size:0x8 scope:global -_4Csis.Interrupts_InterruptRam_REId = .data:0x80435D80; // type:object size:0x8 scope:global -_4Csis.Interrupts_InterruptRam_HOId = .data:0x80435D88; // type:object size:0x8 scope:global -_4Csis.Interrupts_InterruptRam_SSId = .data:0x80435D90; // type:object size:0x8 scope:global -_4Csis.Interrupts_InterruptRam_TBId = .data:0x80435D98; // type:object size:0x8 scope:global -_4Csis.Interrupts_InterruptRamHighId = .data:0x80435DA0; // type:object size:0x8 scope:global -_4Csis.Interrupts_StaticInterruptId = .data:0x80435DA8; // type:object size:0x8 scope:global -_4Csis.Interrupts_RegainVisualInterruptId = .data:0x80435DB0; // type:object size:0x8 scope:global -_4Csis.CellCallId = .data:0x80435DB8; // type:object size:0x8 scope:global -_4Csis.ExtraCops_SwarmingReplyId = .data:0x80435DC0; // type:object size:0x8 scope:global -_4Csis.ExtraCops_SuperPursuitReplyId = .data:0x80435DC8; // type:object size:0x8 scope:global -_4Csis.ExtraCops_SwarmingReplyFollowId = .data:0x80435DD0; // type:object size:0x8 scope:global -_4Csis.ExtraCops_QuadrentFormingId = .data:0x80435DD8; // type:object size:0x8 scope:global -_4Csis.ExtraCops_SuspectPossiblyGoneId = .data:0x80435DE0; // type:object size:0x8 scope:global -_4Csis.ExtraCops_QuadrentMovingId = .data:0x80435DE8; // type:object size:0x8 scope:global -_4Csis.ExtraCops_OtherLeadId = .data:0x80435DF0; // type:object size:0x8 scope:global -_4Csis.ExtraCops_PossibleSuspectId = .data:0x80435DF8; // type:object size:0x8 scope:global -_4Csis.ExtraCops_WrongSuspectId = .data:0x80435E00; // type:object size:0x8 scope:global -_4Csis.ExtraCops_SuspectGoneId = .data:0x80435E08; // type:object size:0x8 scope:global -_4Csis.ExtraCops_RBWarningId = .data:0x80435E10; // type:object size:0x8 scope:global -_4Csis.ExtraCops_RBPositionId = .data:0x80435E18; // type:object size:0x8 scope:global -_4Csis.ExtraCops_ExtraRBEngageId = .data:0x80435E20; // type:object size:0x8 scope:global -_4Csis.ExtraCops_ExtraRBAvertedId = .data:0x80435E28; // type:object size:0x8 scope:global -_4Csis.Cross_CrossBUReplyId = .data:0x80435E30; // type:object size:0x8 scope:global -_4Csis.Cross_CrossFailReplyId = .data:0x80435E38; // type:object size:0x8 scope:global -_4Csis.Cross_CrossRBFailReplyId = .data:0x80435E40; // type:object size:0x8 scope:global -_4Csis.Cross_CrossPursuitEscId = .data:0x80435E48; // type:object size:0x8 scope:global -_4Csis.Cross_CrossSelfStrategyId = .data:0x80435E50; // type:object size:0x8 scope:global -_4Csis.Cross_CrossMultiStrategyId = .data:0x80435E58; // type:object size:0x8 scope:global -_4Csis.Cross_CrossBailoutDeny_subId = .data:0x80435E60; // type:object size:0x8 scope:global -_4Csis.D_DayId = .data:0x80435E68; // type:object size:0x8 scope:global -_4Csis.DispIntroRaceId = .data:0x80435E70; // type:object size:0x8 scope:global -datapts.29390 = .data:0x80435E8C; // type:object size:0x1 scope:local -spkrID911.29413 = .data:0x80435E90; // type:object size:0x4 scope:local -gXMP_DOWNSTATE = .data:0x80435E94; // type:object size:0x4 scope:global -MUSICFLOW_DISPLAY = .data:0x80435E98; // type:object size:0x4 scope:global -_7SoundAI.mRefCount = .data:0x80435E9C; // type:object size:0x4 scope:global -_Q33UTL11Collectionst9Singleton1Z7SoundAI.mInstance = .data:0x80435EA0; // type:object size:0x4 scope:global -DESTROY_COPS_ON_INACTIVITY = .data:0x80435EA8; // type:object size:0x4 scope:local -FORCE_VOICE_RANDOMIZATION = .data:0x80435EAC; // type:object size:0x4 scope:global -prev_heat.30802 = .data:0x80435EB0; // type:object size:0x4 scope:local -dir_tracking.30959 = .data:0x80435EB4; // type:object size:0x4 scope:local -ColourHashToSoundColourMap = .data:0x80435EB8; // type:object size:0x68 scope:global -NumberOfColourHashToSoundColourMaps = .data:0x80435F20; // type:object size:0x4 scope:global -SkidSetSlotPool = .data:0x80435F48; // type:object size:0x4 scope:global -PlotSkidsInCaffeine = .data:0x80435F4C; // type:object size:0x4 scope:global -PlotSkidPointsInCaffeine = .data:0x80435F50; // type:object size:0x4 scope:global -ClanSlotPool = .data:0x80435F54; // type:object size:0x4 scope:global -NumTrackOBBs = .data:0x80435F58; // type:object size:0x4 scope:global -TrackOBBTable = .data:0x80435F5C; // type:object size:0x4 scope:global -_9TrackInfo.TrackInfoTable = .data:0x80435F68; // type:object size:0x4 scope:global -_9TrackInfo.NumTrackInfo = .data:0x80435F6C; // type:object size:0x4 scope:global -_9TrackInfo.LoadedTrackInfo = .data:0x80435F74; // type:object size:0x4 scope:global -zoneB = .data:0x80435F7C; // type:object size:0x8 scope:global -TrackStreamerRemoteCaffeinating = .data:0x80435FEC; // type:object size:0x4 scope:global -ForceHoleFillerMethod = .data:0x80435FF8; // type:object size:0x4 scope:global -prev_need_loading_bar.26275 = .data:0x80435FFC; // type:object size:0x4 scope:local -ForceAllSceneryDetailLevels = .data:0x80436000; // type:object size:0x4 scope:global -EnvMapShadowExtraHeight = .data:0x80436008; // type:object size:0x4 scope:global -CurrentZoneNumber = .data:0x8043600C; // type:object size:0x4 scope:global -ModelConnectionCallback = .data:0x80436010; // type:object size:0x4 scope:global -ModelDisconnectionCallback = .data:0x80436014; // type:object size:0x4 scope:global -SectionConnectionCallback = .data:0x80436018; // type:object size:0x4 scope:global -SectionDisconnectionCallback = .data:0x8043601C; // type:object size:0x4 scope:global -SeeulatorToolActive = .data:0x80436020; // type:object size:0x4 scope:global -ScenerySectionToBlink = .data:0x80436024; // type:object size:0x4 scope:global -ShowSectionBoarder = .data:0x80436028; // type:object size:0x4 scope:global -SeeulatorRefreshTrackStreamer = .data:0x8043602C; // type:object size:0x4 scope:global -LightTable = .data:0x80436034; // type:object size:0x4 scope:global -MaxSceneryLightContexts = .data:0x80436038; // type:object size:0x4 scope:global -SceneryLightContextTable = .data:0x8043603C; // type:object size:0x4 scope:global -SceneryOverrideInfoTable = .data:0x80436040; // type:object size:0x4 scope:global -NumSceneryOverrideInfos = .data:0x80436044; // type:object size:0x4 scope:global -SceneryGroupEnabledTable = .data:0x8043604C; // type:object size:0x1000 scope:global -pVisibleZoneBoundaryModel = .data:0x8043704C; // type:object size:0x4 scope:global -PrecullerMode = .data:0x80437050; // type:object size:0x4 scope:global -DisablePrecullerCounter = .data:0x80437054; // type:object size:0x4 scope:global -pDebugModel = .data:0x80437060; // type:object size:0x4 scope:global -ScenerySectionLODOffset = .data:0x80437068; // type:object size:0x4 scope:global -initialized.26964 = .data:0x8043706C; // type:object size:0x4 scope:local -counter.26985 = .data:0x80437070; // type:object size:0x4 scope:local -pSectionD9 = .data:0x80437074; // type:object size:0x4 scope:global -pSectionC14 = .data:0x80437078; // type:object size:0x4 scope:global -VisibleGroupInfoTable = .data:0x8043707C; // type:object size:0x28 scope:global -RegionCount = .data:0x804370A4; // type:object size:0x24 scope:global -WeatherUseCoolFogValues = .data:0x804370C8; // type:object size:0x4 scope:global -BaseFogFalloff = .data:0x804370CC; // type:object size:0x4 scope:global -BaseFogFalloffX = .data:0x804370D0; // type:object size:0x4 scope:global -BaseFogFalloffY = .data:0x804370D4; // type:object size:0x4 scope:global -BaseWeatherFog = .data:0x804370D8; // type:object size:0x4 scope:global -BaseWeatherFogStart = .data:0x804370DC; // type:object size:0x4 scope:global -BaseWeatherFogColourR = .data:0x804370E0; // type:object size:0x4 scope:global -BaseWeatherFogColourG = .data:0x804370E4; // type:object size:0x4 scope:global -BaseWeatherFogColourB = .data:0x804370E8; // type:object size:0x4 scope:global -oldDistFogColour.27397 = .data:0x80437100; // type:object size:0x4 scope:local -oldDistFogPower.27398 = .data:0x80437104; // type:object size:0x4 scope:local -oldDistFogStart.27399 = .data:0x80437108; // type:object size:0x4 scope:local -debugflash = .data:0x80437124; // type:object size:0x4 scope:global -ticS.27592 = .data:0x80437128; // type:object size:0x4 scope:local -FACflush = .data:0x80437134; // type:object size:0x4 scope:global -GlareFalloff = .data:0x8043713C; // type:object size:0x4 scope:global -GlareFallon = .data:0x80437140; // type:object size:0x4 scope:global -TUNHEIGHT = .data:0x80437150; // type:object size:0x4 scope:global -regionB.27617 = .data:0x80437154; // type:object size:0x8 scope:local -EventSlotPool = .data:0x8043715C; // type:object size:0x4 scope:global -EventHandlerSlotPool = .data:0x80437160; // type:object size:0x4 scope:global -CurrentEventQueue = .data:0x80437164; // type:object size:0x4 scope:global -CurrentlyHandlingEvent = .data:0x80437168; // type:object size:0x4 scope:global -UglyTimestepHack = .data:0x80437248; // type:object size:0x4 scope:global -pCurrentWorld = .data:0x80437250; // type:object size:0x4 scope:global -g_tweakIsBurnout = .data:0x80437288; // type:object size:0x4 scope:global -g_tweakIsDriftRace = .data:0x8043728C; // type:object size:0x4 scope:global -g_tweakIsDragRace = .data:0x80437290; // type:object size:0x4 scope:global -g_tweakIsShortTrackRace = .data:0x80437294; // type:object size:0x4 scope:global -_21DebugVehicleSelection.mThis = .data:0x804372A8; // type:object size:0x4 scope:global -_21DebugVehicleSelection.mOnOff = .data:0x804372AC; // type:object size:0x4 scope:global -ChangePlayerVehicle = .data:0x804372B0; // type:object size:0x4 scope:global -_10DebugWorld.mThis = .data:0x804372B4; // type:object size:0x4 scope:global -_10DebugWorld.mOnOff = .data:0x804372B8; // type:object size:0x4 scope:global -SaveHotPosition = .data:0x804372BC; // type:object size:0x4 scope:global -JumpToHotPosition = .data:0x804372C0; // type:object size:0x4 scope:global -culldiv = .data:0x804372C4; // type:object size:0x4 scope:global -pCurrentPartCullingPlaneInfo = .data:0x804372C8; // type:object size:0x4 scope:global -CarPartModelPool = .data:0x804372D8; // type:object size:0x4 scope:global -NISCopCarDriverVisible = .data:0x804372E0; // type:object size:0x4 scope:global -NISRaceDriverVisible = .data:0x804372E4; // type:object size:0x4 scope:global -AlphaWritesEnabled = .data:0x804372EC; // type:object size:0x4 scope:global -WheelPivotTranslationAmount = .data:0x804372F0; // type:object size:0x4 scope:global -WheelStandardWidth = .data:0x804372F4; // type:object size:0x4 scope:global -WheelStandardRadius = .data:0x804372F8; // type:object size:0x4 scope:global -DrawCars = .data:0x804372FC; // type:object size:0x4 scope:global -DrawCarsReflections = .data:0x80437300; // type:object size:0x4 scope:global -DrawCarShadow = .data:0x80437304; // type:object size:0x4 scope:global -ForceHeadlightsOn = .data:0x8043730C; // type:object size:0x4 scope:global -ForceBrakelightsOn = .data:0x80437310; // type:object size:0x4 scope:global -ForceReverselightsOn = .data:0x80437314; // type:object size:0x4 scope:global -PrintQueryLightMat = .data:0x80437320; // type:object size:0x4 scope:global -ForceCarLOD = .data:0x80437330; // type:object size:0x4 scope:global -ForceTireLOD = .data:0x80437334; // type:object size:0x4 scope:global -CarEffectParameters = .data:0x80437338; // type:object size:0xE8 scope:global -CarEmitterPositionSlotPool = .data:0x80437420; // type:object size:0x4 scope:global -TweakKitWheelOffsetFront = .data:0x8043743C; // type:object size:0x4 scope:global -TweakKitWheelOffsetRear = .data:0x80437440; // type:object size:0x4 scope:global -hOffX = .data:0x80437448; // type:object size:0x4 scope:global -hOffY = .data:0x8043744C; // type:object size:0x4 scope:global -hRad1x = .data:0x80437464; // type:object size:0x4 scope:global -hRad2x = .data:0x80437468; // type:object size:0x4 scope:global -hRad1y = .data:0x8043746C; // type:object size:0x4 scope:global -hRad2y = .data:0x80437470; // type:object size:0x4 scope:global -hRad0x = .data:0x80437474; // type:object size:0x4 scope:global -hRad3x = .data:0x80437478; // type:object size:0x4 scope:global -hRad0y = .data:0x8043747C; // type:object size:0x4 scope:global -hRad3y = .data:0x80437480; // type:object size:0x4 scope:global -hcL = .data:0x80437490; // type:object size:0x4 scope:global -cpr = .data:0x80437494; // type:object size:0x4 scope:global -cpb = .data:0x80437498; // type:object size:0x4 scope:global -cpw = .data:0x8043749C; // type:object size:0x4 scope:global -copm = .data:0x804374A0; // type:object size:0x4 scope:global -copt = .data:0x804374A4; // type:object size:0x4 scope:global -copModulo = .data:0x804374A8; // type:object size:0x4 scope:global -copWhitemul = .data:0x804374AC; // type:object size:0x4 scope:global -copoffsetr = .data:0x804374B0; // type:object size:0x4 scope:global -copoffsetb = .data:0x804374B4; // type:object size:0x4 scope:global -copoffsetw = .data:0x804374B8; // type:object size:0x4 scope:global -counter.31665 = .data:0x804374BC; // type:object size:0x4 scope:local -counter.31669 = .data:0x804374C0; // type:object size:0x4 scope:local -gTWEAKER_NISLightEnabled = .data:0x804374C4; // type:object size:0x4 scope:global -gTWEAKER_NISLightIntensity = .data:0x804374C8; // type:object size:0x4 scope:global -gTWEAKER_NISLightPosX = .data:0x804374CC; // type:object size:0x4 scope:global -gTWEAKER_NISLightPosY = .data:0x804374D0; // type:object size:0x4 scope:global -gTWEAKER_NISLightPosZ = .data:0x804374D4; // type:object size:0x4 scope:global -HackTime = .data:0x804374D8; // type:object size:0x4 scope:global -Lightslot = .data:0x804374DC; // type:object size:0x4 scope:global -enX = .data:0x804374E0; // type:object size:0x4 scope:global -enY = .data:0x804374E4; // type:object size:0x4 scope:global -enZ = .data:0x804374E8; // type:object size:0x4 scope:global -FaceCos = .data:0x804374EC; // type:object size:0x4 scope:global -TireFaceIt = .data:0x804374F0; // type:object size:0x4 scope:global -PointCloud = .data:0x804374F8; // type:object size:0x100 scope:global -FancyCarShadowEdgeMult = .data:0x804375F8; // type:object size:0x4 scope:global -car_elevation = .data:0x804375FC; // type:object size:0x4 scope:global -car_elevation_scale = .data:0x80437600; // type:object size:0x4 scope:global -dshad = .data:0x80437608; // type:object size:0x4 scope:global -heliScale = .data:0x8043760C; // type:object size:0x4 scope:global -_17VehicleRenderConn.mOpenSkinSlots = .data:0x80437620; // type:object size:0x4 scope:global -FlareDiv = .data:0x80437624; // type:object size:0x4 scope:global -Tweak_DisableRoadNoise = .data:0x80437628; // type:object size:0x4 scope:global -NumTimesRenderTestPlayerCar = .data:0x8043762C; // type:object size:0x4 scope:global -MainSkyScale = .data:0x80437634; // type:object size:0x4 scope:global -skylayer = .data:0x8043763C; // type:object size:0xA0 scope:global -DrawSky = .data:0x804376DC; // type:object size:0x4 scope:global -DrawSkyEnvMap = .data:0x804376E0; // type:object size:0x4 scope:global -UserSkyLoadCallback = .data:0x80437700; // type:object size:0x4 scope:global -bSkyTexturesLoaded = .data:0x80437704; // type:object size:0x4 scope:global -SpecularOffset = .data:0x80437708; // type:object size:0x2 scope:global -deblayer = .data:0x8043770C; // type:object size:0x14 scope:global -matAng.33578 = .data:0x80437720; // type:object size:0x2 scope:local -MinSkySpecular = .data:0x80437724; // type:object size:0x4 scope:global -MaxSkySpecular = .data:0x80437728; // type:object size:0x4 scope:global -SkyRenderForceOvercast = .data:0x8043772C; // type:object size:0x4 scope:global -SpaceNodeSlotPool = .data:0x80437730; // type:object size:0x4 scope:global -CarPartStringTable = .data:0x80437738; // type:object size:0x4 scope:global -CarPartStringTableSize = .data:0x8043773C; // type:object size:0x4 scope:global -CarPartTypeNameHashTable = .data:0x80437740; // type:object size:0x4 scope:global -CarPartTypeNameHashTableSize = .data:0x80437744; // type:object size:0x4 scope:global -CarPartPartsTable = .data:0x80437748; // type:object size:0x4 scope:global -CarPartModelsTable = .data:0x8043774C; // type:object size:0x4 scope:global -MasterCarPartPack = .data:0x80437750; // type:object size:0x4 scope:global -CarPartSlotMap = .data:0x80437754; // type:object size:0x22C scope:global -CarTypeInfoArray = .data:0x80437980; // type:object size:0x4 scope:global -CarTypeInfoArrayUpdated = .data:0x80437984; // type:object size:0x4 scope:global -CarSlotAnimHookupTable = .data:0x80437988; // type:object size:0x4 scope:global -CarSlotAnimHideOpenTable = .data:0x8043798C; // type:object size:0x4 scope:global -CarSlotAnimHideClosedTable = .data:0x80437990; // type:object size:0x4 scope:global -DefaultSlotTypeNameTable = .data:0x80437994; // type:object size:0x4 scope:global -SlotTypeOverrideTable = .data:0x80437998; // type:object size:0x4 scope:global -NumSlotTypeOverrides = .data:0x8043799C; // type:object size:0x4 scope:global -MissingCarPartTable = .data:0x804379A0; // type:object size:0xA50 scope:global -CarMemoryInfoTable = .data:0x804383F4; // type:object size:0x90 scope:global -CarSlotIDNames = .data:0x80438484; // type:object size:0x458 scope:global -CarLoaderMemoryPoolNumber = .data:0x804388DC; // type:object size:0x4 scope:global -UsePrecompositeVinyls = .data:0x804388E4; // type:object size:0x4 scope:global -LoadedTexturePackSlotPool = .data:0x804388E8; // type:object size:0x4 scope:global -LoadedSolidPackSlotPool = .data:0x804388EC; // type:object size:0x4 scope:global -LoadedSkinLayerSlotPool = .data:0x804388F0; // type:object size:0x4 scope:global -LoadedRideInfoSlotPool = .data:0x804388F4; // type:object size:0x4 scope:global -_14LoadedRideInfo.sNextID = .data:0x804388F8; // type:object size:0x4 scope:global -lastTime.35170 = .data:0x804388FC; // type:object size:0x4 scope:local -last_result_was_textures.35424 = .data:0x80438900; // type:object size:0x4 scope:local -loop_number.35434 = .data:0x80438904; // type:object size:0x4 scope:local -CarLoaderServiceLoadingDepth = .data:0x80438908; // type:object size:0x4 scope:global -swatch_offset_init = .data:0x80438918; // type:object size:0x4 scope:global -swatch_offset_count = .data:0x8043891C; // type:object size:0x10 scope:global -WorldModelSlotPool = .data:0x8043892C; // type:object size:0x4 scope:global -netsize = .data:0x80438930; // type:object size:0x4 scope:global -RAINX = .data:0x80438944; // type:object size:0x4 scope:global -RAINY = .data:0x80438948; // type:object size:0x4 scope:global -RAINZ = .data:0x8043894C; // type:object size:0x4 scope:global -RAINZconstant = .data:0x80438950; // type:object size:0x4 scope:global -RAINwindEffect = .data:0x804389AC; // type:object size:0x4 scope:global -RAINRadiusX = .data:0x804389BC; // type:object size:0x4 scope:global -RAINRadiusY = .data:0x804389C0; // type:object size:0x4 scope:global -RAINRadiusZ = .data:0x804389C4; // type:object size:0x4 scope:global -twkCloudsMinAmount = .data:0x804389F0; // type:object size:0x4 scope:global -rainOverrideIntensity = .data:0x80438A18; // type:object size:0x4 scope:global -windAng = .data:0x80438A28; // type:object size:0x4 scope:global -swayMax = .data:0x80438A2C; // type:object size:0x4 scope:global -FogControlOverRide = .data:0x80438AAC; // type:object size:0x4 scope:global -_14FacePixelation.mPixelationOn = .data:0x80438AB0; // type:object size:0x4 scope:global -_14FacePixelation.mWidth = .data:0x80438AB4; // type:object size:0x4 scope:global -_14FacePixelation.mHeight = .data:0x80438AB8; // type:object size:0x4 scope:global -gSimpleSolidHashList = .data:0x80438ABC; // type:object size:0x28 scope:global -VehicleDamagePartSlotPool = .data:0x80438AF0; // type:object size:0x4 scope:global -VehiclePartDamageZoneSlotPool = .data:0x80438AF4; // type:object size:0x4 scope:global -_26VehiclePartDamageBehaviour.mSlotZoneMapList = .data:0x80438AF8; // type:object size:0x3C0 scope:global -_26VehiclePartDamageBehaviour.mBreakableWindowInfoList = .data:0x80438EB8; // type:object size:0x50 scope:global -unitTestDelay = .data:0x80438F10; // type:object size:0x4 scope:local -uniTestLevel = .data:0x80438F14; // type:object size:0x4 scope:local -_16WCollisionAssets.sWCollisionAssets = .data:0x80438F58; // type:object size:0x4 scope:global -_16WCollisionAssets.sOriginalTriggerData = .data:0x80438F60; // type:object size:0x4 scope:global -_16WCollisionAssets.sSavedTriggerData = .data:0x80438F64; // type:object size:0x4 scope:global -_16WCollisionAssets.mCollisionPackList = .data:0x80438F68; // type:object size:0x4 scope:global -_13WCollisionMgr.fIterCount = .data:0x80438F70; // type:object size:0x2 scope:global -_5WGrid.fgGrid = .data:0x80438F74; // type:object size:0x4 scope:global -_5WGrid.fgMapGroup = .data:0x80438F78; // type:object size:0x4 scope:global -iMaxNumNodes.10751 = .data:0x80438F80; // type:object size:0x4 scope:local -_12WRoadNetwork.fgRoadNetwork = .data:0x80438FC8; // type:object size:0x4 scope:global -_12WRoadNetwork.fProfiles = .data:0x80438FCC; // type:object size:0x4 scope:global -_12WRoadNetwork.fNodes = .data:0x80438FD0; // type:object size:0x4 scope:global -_12WRoadNetwork.fSegments = .data:0x80438FD4; // type:object size:0x4 scope:global -_12WRoadNetwork.fRoads = .data:0x80438FDC; // type:object size:0x4 scope:global -_12WRoadNetwork.fSegmentStamp = .data:0x80438FE0; // type:object size:0x4 scope:global -_12WRoadNetwork.nRoadMemoryUsage = .data:0x80438FE4; // type:object size:0x4 scope:global -_12WRoadNetwork.nNodeMemoryUsage = .data:0x80438FE8; // type:object size:0x4 scope:global -_12WRoadNetwork.nProfileMemoryUsage = .data:0x80438FEC; // type:object size:0x4 scope:global -_12WRoadNetwork.nSegmentMemoryUsage = .data:0x80438FF0; // type:object size:0x4 scope:global -_12WRoadNetwork.nIntersectionMemoryUsage = .data:0x80438FF4; // type:object size:0x4 scope:global -_12WRoadNetwork.nTotalMemoryUsage = .data:0x80438FF8; // type:object size:0x4 scope:global -bPathFinderPrints = .data:0x80438FFC; // type:object size:0x4 scope:global -AStarNodeSlotPool = .data:0x80439004; // type:object size:0x4 scope:global -AStarSearchSlotPool = .data:0x80439008; // type:object size:0x4 scope:global -ASTAR_METRIC_SCALE = .data:0x80439014; // type:object size:0x4 scope:global -_10PathFinder.pInstance = .data:0x80439018; // type:object size:0x4 scope:global -bAiRandomTurns = .data:0x8043901C; // type:object size:0x4 scope:global -_15WTriggerManager.fgTriggerManager = .data:0x80439020; // type:object size:0x4 scope:global -_6WWorld.fgWorld = .data:0x80439024; // type:object size:0x4 scope:global -_9WorldConn.world_refcount = .data:0x8043902C; // type:object size:0x4 scope:local -gTheTimeOfDay = .data:0x80439030; // type:object size:0x4 scope:global -desiredTOD = .data:0x80439034; // type:object size:0x4 scope:local -carPosX = .data:0x804390E4; // type:object size:0x4 scope:global -carPosY = .data:0x804390E8; // type:object size:0x4 scope:global -CarSelectTireSteerAngle = .data:0x804390EC; // type:object size:0x4 scope:global -sNumTicksSinceUserMovedCamera = .data:0x804390F0; // type:object size:0x4 scope:local -sNumTicksBeforeCamMovesBackToScreenPosition = .data:0x804390F4; // type:object size:0x4 scope:local -CarRotateSpeed = .data:0x804390F8; // type:object size:0x4 scope:local -bPass1 = .data:0x804390FC; // type:object size:0x4 scope:local -bAutoMovement = .data:0x80439100; // type:object size:0x4 scope:local -cam_blur = .data:0x80439104; // type:object size:0x4 scope:local -zoomIn.27766 = .data:0x80439108; // type:object size:0x4 scope:local -zoomOut.27767 = .data:0x8043910C; // type:object size:0x4 scope:local -_9CarViewer.haveLoadedOnce = .data:0x80439110; // type:object size:0x4 scope:global -QRMode = .data:0x80439114; // type:object size:0x4 scope:global -ValidForMikeMann.29465 = .data:0x80439118; // type:object size:0x2C scope:local -goddamcrap.29466 = .data:0x80439144; // type:object size:0x8 scope:local -_13UIQRCarSelect.ForceCar = .data:0x8043914C; // type:object size:0x4 scope:global -_24QRCarSelectBustedManager.bPlayerJustGotBusted = .data:0x80439150; // type:object size:0x4 scope:global -CheatBustedCount = .data:0x80439158; // type:object size:0x4 scope:global -CheatMaxBusted = .data:0x8043915C; // type:object size:0x4 scope:global -CheatImpounded = .data:0x80439160; // type:object size:0x4 scope:global -CheatCanAddImpoundBox = .data:0x80439164; // type:object size:0x4 scope:global -CheatReleaseFromImpoundMarker = .data:0x80439168; // type:object size:0x4 scope:global -CheatReleasable = .data:0x8043916C; // type:object size:0x4 scope:global -theChallengeRace = .data:0x80439170; // type:object size:0x4 scope:global -gTUTORIAL_MOVIE_TOLLBOOTH = .data:0x80439174; // type:object size:0x4 scope:local -_8Showcase.FromPackage = .data:0x80439178; // type:object size:0x4 scope:global -_8Showcase.FromArgs = .data:0x8043917C; // type:object size:0x4 scope:global -_8Showcase.FromIndex = .data:0x80439180; // type:object size:0x4 scope:global -_8Showcase.BlackListNumber = .data:0x80439184; // type:object size:0x4 scope:global -_8Showcase.FromFilter = .data:0x80439188; // type:object size:0x4 scope:global -g_bCustomizeManagerHasControl = .data:0x8043918C; // type:object size:0x4 scope:global -g_bTestCareerCustomization = .data:0x80439190; // type:object size:0x4 scope:global -g_pCustomizeMainPkg = .data:0x80439194; // type:object size:0x4 scope:global -g_pCustomizeSubPkg = .data:0x80439198; // type:object size:0x4 scope:global -g_pCustomizeSubTopPkg = .data:0x8043919C; // type:object size:0x4 scope:global -g_pCustomizePartsPkg = .data:0x804391A0; // type:object size:0x4 scope:global -g_pCustomizePerfPkg = .data:0x804391A4; // type:object size:0x4 scope:global -g_pCustomizeDecalsPkg = .data:0x804391A8; // type:object size:0x4 scope:global -g_pCustomizePaintPkg = .data:0x804391AC; // type:object size:0x4 scope:global -g_pCustomizeRimsPkg = .data:0x804391B0; // type:object size:0x4 scope:global -g_pCustomizeHudPkg = .data:0x804391B4; // type:object size:0x4 scope:global -g_pCustomizeHudColorPkg = .data:0x804391B8; // type:object size:0x4 scope:global -g_pCustomizeSpoilerPkg = .data:0x804391BC; // type:object size:0x4 scope:global -g_pCustomizeShoppingCartPkg = .data:0x804391C0; // type:object size:0x4 scope:global -_21CustomizeShoppingCart.pParentPkg = .data:0x804391C4; // type:object size:0x4 scope:global -phys_type.30541 = .data:0x804391C8; // type:object size:0x1C scope:local -markers.30542 = .data:0x804391E4; // type:object size:0x1C scope:local -slot_id.30543 = .data:0x80439200; // type:object size:0x14 scope:local -markers.30544 = .data:0x80439214; // type:object size:0x14 scope:local -_14CustomizeParts.TexturePackLoaded = .data:0x80439228; // type:object size:0x4 scope:global -_15CustomizeDecals.CurrentDecalLocation = .data:0x8043922C; // type:object size:0x4 scope:global -_16CustomizeNumbers.bShowcaseOn = .data:0x80439230; // type:object size:0x4 scope:global -gLookupCarSlotID = .data:0x80439238; // type:object size:0x4 scope:local -MarkerSelectInfos = .data:0x80439240; // type:object size:0x24C scope:global -__SN_Libsn_version_59 = .data:0x804394D0; // type:label scope:local -__SN_Libsn_version = .data:0x804394D4; // type:label scope:global -LinkFiddle = .data:0x804394D8; // type:label scope:local -SN_BUFFERED_TTY = .data:0x804394F4; // type:label scope:global -bConnected = .data:0x804394FC; // type:label scope:global -snProfHdr = .data:0x80439790; // type:label scope:global -g_nRWasyncPhase = .data:0x804397D0; // type:object size:0x4 scope:global -g_FSCBFunc = .data:0x804397D4; // type:object size:0x4 scope:local -g_nEXI2TCCnt = .data:0x804397D8; // type:object size:0x4 scope:local -g_nDbgFsAsyncCnt = .data:0x804397DC; // type:object size:0x4 scope:global -g_hDVD = .data:0x804397E0; // type:object size:0x4 scope:local -impure_data = .data:0x804397E8; // type:object size:0x304 scope:local -_sn_IO_buf = .data:0x80439AEC; // type:object size:0x50 scope:local -lower.9 = .data:0x80439B3C; // type:object size:0x25 scope:local -powersOf10 = .data:0x80439B68; // type:object size:0x48 scope:local -JIS_state_table = .data:0x80439BB0; // type:object size:0x1B0 scope:local -JIS_action_table = .data:0x80439D60; // type:object size:0x1B0 scope:local -__terminate_func = .data:0x80439F10; // type:object size:0x4 scope:global -a$1517 = .data:0x80439F18; // type:object size:0x28 scope:local -...data.0 = .data:0x80439F40; // type:label scope:local -@1 = .data:0x80439F40; // type:object size:0x44 scope:local -@105 = .data:0x80439F84; // type:object size:0xD scope:local -@106 = .data:0x80439F94; // type:object size:0x16 scope:local -@107 = .data:0x80439FAC; // type:object size:0xC scope:local -@108 = .data:0x80439FB8; // type:object size:0x9 scope:local -@109 = .data:0x80439FC4; // type:object size:0x10 scope:local -@110 = .data:0x80439FD4; // type:object size:0xB scope:local -@111 = .data:0x80439FE0; // type:object size:0xE scope:local -@112 = .data:0x80439FF0; // type:object size:0xD scope:local -@113 = .data:0x8043A000; // type:object size:0xD scope:local -@114 = .data:0x8043A010; // type:object size:0xD scope:local -@115 = .data:0x8043A020; // type:object size:0x19 scope:local -@117 = .data:0x8043A03C; // type:object size:0xE scope:local -@118 = .data:0x8043A04C; // type:object size:0x15 scope:local -__OSExceptionLocations = .data:0x8043A064; // type:object size:0x3C scope:local -@152 = .data:0x8043A0A0; // type:object size:0x1B scope:local -@153 = .data:0x8043A0BC; // type:object size:0x2E scope:local -@154 = .data:0x8043A0EC; // type:object size:0x2F scope:local -@155 = .data:0x8043A11C; // type:object size:0x1B scope:local -...data.0 = .data:0x8043A138; // type:label scope:local -ResetFunctionInfo = .data:0x8043A138; // type:object size:0x10 scope:local -@50 = .data:0x8043A148; // type:object size:0x89 scope:local -@51 = .data:0x8043A1D4; // type:object size:0x59 scope:local -@52 = .data:0x8043A230; // type:object size:0x59 scope:local -@53 = .data:0x8043A28C; // type:object size:0x52 scope:local -@54 = .data:0x8043A2E0; // type:object size:0x50 scope:local -...data.0 = .data:0x8043A330; // type:label scope:local -@354 = .data:0x8043A330; // type:object size:0x24 scope:local -@355 = .data:0x8043A354; // type:object size:0x37 scope:local -@356 = .data:0x8043A38C; // type:object size:0x28 scope:local -@357 = .data:0x8043A3B4; // type:object size:0x4F scope:local -@358 = .data:0x8043A404; // type:object size:0x3E scope:local -@359 = .data:0x8043A444; // type:object size:0x37 scope:local -@360 = .data:0x8043A47C; // type:object size:0x49 scope:local -@361 = .data:0x8043A4C8; // type:object size:0x33 scope:local -@362 = .data:0x8043A4FC; // type:object size:0x3D scope:local -@363 = .data:0x8043A53C; // type:object size:0x39 scope:local -@364 = .data:0x8043A578; // type:object size:0x45 scope:local -@365 = .data:0x8043A5C0; // type:object size:0x5F scope:local -@366 = .data:0x8043A620; // type:object size:0x2C scope:local -@385 = .data:0x8043A64C; // type:object size:0x12 scope:local -@386 = .data:0x8043A660; // type:object size:0x12 scope:local -@387 = .data:0x8043A674; // type:object size:0x1A scope:local -@388 = .data:0x8043A690; // type:object size:0x13 scope:local -@389 = .data:0x8043A6A4; // type:object size:0x10 scope:local -@390 = .data:0x8043A6B4; // type:object size:0xE scope:local -DSPInitCode = .data:0x8043A6C8; // type:object size:0x80 scope:local -...data.0 = .data:0x8043A748; // type:label scope:local -@63 = .data:0x8043A748; // type:object size:0x29 scope:local -@84 = .data:0x8043A774; // type:object size:0x18 scope:local -@85 = .data:0x8043A78C; // type:object size:0x1B scope:local -@86 = .data:0x8043A7A8; // type:object size:0x30 scope:local -@87 = .data:0x8043A7D8; // type:object size:0x3C scope:local -@88 = .data:0x8043A814; // type:object size:0x37 scope:local -@89 = .data:0x8043A84C; // type:object size:0x3F scope:local -@90 = .data:0x8043A88C; // type:object size:0x29 scope:local -@91 = .data:0x8043A8B8; // type:object size:0x1D scope:local -@92 = .data:0x8043A8D8; // type:object size:0x19 scope:local -@104 = .data:0x8043A8F4; // type:object size:0x19 scope:local -@105 = .data:0x8043A910; // type:object size:0x19 scope:local -@106 = .data:0x8043A92C; // type:object size:0x16 scope:local -@107 = .data:0x8043A944; // type:object size:0x2E scope:local -...data.0 = .data:0x8043A978; // type:label scope:local -@61 = .data:0x8043A978; // type:object size:0x44 scope:local -@62 = .data:0x8043A9BC; // type:object size:0x30 scope:local -@63 = .data:0x8043A9EC; // type:object size:0x2F scope:local -@64 = .data:0x8043AA1C; // type:object size:0x2F scope:local -@65 = .data:0x8043AA4C; // type:object size:0x11 scope:local -@66 = .data:0x8043AA60; // type:object size:0x21 scope:local -@67 = .data:0x8043AA84; // type:object size:0x12 scope:local -@68 = .data:0x8043AA98; // type:object size:0x19 scope:local -@69 = .data:0x8043AAB4; // type:object size:0x12 scope:local -@70 = .data:0x8043AAC8; // type:object size:0x1D scope:local -@71 = .data:0x8043AAE8; // type:object size:0x26 scope:local -@72 = .data:0x8043AB10; // type:object size:0x1C scope:local -@76 = .data:0x8043AB2C; // type:object size:0x23 scope:local -...data.0 = .data:0x8043AB50; // type:label scope:local -@13 = .data:0x8043AB50; // type:object size:0x16 scope:local -@14 = .data:0x8043AB68; // type:object size:0x26 scope:local -@15 = .data:0x8043AB90; // type:object size:0x1C scope:local -@74 = .data:0x8043ABAC; // type:object size:0x1D scope:local -@75 = .data:0x8043ABCC; // type:object size:0x17 scope:local -@77 = .data:0x8043ABE4; // type:object size:0x31 scope:local -@78 = .data:0x8043AC18; // type:object size:0x10 scope:local -@79 = .data:0x8043AC28; // type:object size:0x60 scope:local -@80 = .data:0x8043AC88; // type:object size:0x4C scope:local -@81 = .data:0x8043ACD4; // type:object size:0x62 scope:local -@82 = .data:0x8043AD38; // type:object size:0x60 scope:local -@83 = .data:0x8043AD98; // type:object size:0x1F scope:local -@84 = .data:0x8043ADB8; // type:object size:0x1F scope:local -@85 = .data:0x8043ADD8; // type:object size:0x1B scope:local -@86 = .data:0x8043ADF4; // type:object size:0x35 scope:local -@87 = .data:0x8043AE2C; // type:object size:0x40 scope:local -@115 = .data:0x8043AE70; // type:object size:0xB scope:local -HankakuToCode = .data:0x8043AE80; // type:object size:0x180 scope:local -Zenkaku2Code = .data:0x8043B000; // type:object size:0x98A scope:local -InterruptPrioTable = .data:0x8043B990; // type:object size:0x2C scope:local -@62 = .data:0x8043B9C0; // type:object size:0x25 scope:local -@189 = .data:0x8043B9E8; // type:object size:0x27 scope:local -ResetFunctionInfo = .data:0x8043BA10; // type:object size:0x10 scope:local -@153 = .data:0x8043BA20; // type:object size:0x4E scope:local -...data.0 = .data:0x8043BA70; // type:label scope:local -@831 = .data:0x8043BA70; // type:object size:0x5F scope:local -@832 = .data:0x8043BAD0; // type:object size:0xB scope:local -@834 = .data:0x8043BADC; // type:object size:0x5F scope:local -@835 = .data:0x8043BB3C; // type:object size:0x46 scope:local -@836 = .data:0x8043BB84; // type:object size:0x7E scope:local -@837 = .data:0x8043BC04; // type:object size:0x7E scope:local -@838 = .data:0x8043BC84; // type:object size:0x7A scope:local -@839 = .data:0x8043BD00; // type:object size:0x7A scope:local -@840 = .data:0x8043BD7C; // type:object size:0x51 scope:local -@841 = .data:0x8043BDD0; // type:object size:0x71 scope:local -@842 = .data:0x8043BE44; // type:object size:0x39 scope:local -@843 = .data:0x8043BE80; // type:object size:0x49 scope:local -@844 = .data:0x8043BECC; // type:object size:0x51 scope:local -@845 = .data:0x8043BF20; // type:object size:0x52 scope:local -@846 = .data:0x8043BF74; // type:object size:0x59 scope:local -@847 = .data:0x8043BFD0; // type:object size:0x42 scope:local -@848 = .data:0x8043C014; // type:object size:0x3A scope:local -@849 = .data:0x8043C050; // type:object size:0x3A scope:local -@850 = .data:0x8043C08C; // type:object size:0x44 scope:local -@851 = .data:0x8043C0D0; // type:object size:0x44 scope:local -@852 = .data:0x8043C114; // type:object size:0x3B scope:local -@853 = .data:0x8043C150; // type:object size:0x3F scope:local -@854 = .data:0x8043C190; // type:object size:0x67 scope:local -@855 = .data:0x8043C1F8; // type:object size:0x45 scope:local -@856 = .data:0x8043C240; // type:object size:0x3D scope:local -YearDays = .data:0x8043C280; // type:object size:0x30 scope:local -LeapYearDays = .data:0x8043C2B0; // type:object size:0x30 scope:local -...data.0 = .data:0x8043C2E0; // type:label scope:local -UcsAnsiTable = .data:0x8043C2E0; // type:object size:0x40 scope:local -Ucs00 = .data:0x8043C320; // type:object size:0x200 scope:local -Ucs03 = .data:0x8043C520; // type:object size:0x200 scope:local -Ucs04 = .data:0x8043C720; // type:object size:0x200 scope:local -Ucs20 = .data:0x8043C920; // type:object size:0x200 scope:local -Ucs21 = .data:0x8043CB20; // type:object size:0x200 scope:local -Ucs22 = .data:0x8043CD20; // type:object size:0x200 scope:local -Ucs23 = .data:0x8043CF20; // type:object size:0x200 scope:local -Ucs25 = .data:0x8043D120; // type:object size:0x200 scope:local -Ucs26 = .data:0x8043D320; // type:object size:0x200 scope:local -Ucs30 = .data:0x8043D520; // type:object size:0x200 scope:local -Ucs4E = .data:0x8043D720; // type:object size:0x200 scope:local -Ucs4F = .data:0x8043D920; // type:object size:0x200 scope:local -Ucs50 = .data:0x8043DB20; // type:object size:0x200 scope:local -Ucs51 = .data:0x8043DD20; // type:object size:0x200 scope:local -Ucs52 = .data:0x8043DF20; // type:object size:0x200 scope:local -Ucs53 = .data:0x8043E120; // type:object size:0x200 scope:local -Ucs54 = .data:0x8043E320; // type:object size:0x200 scope:local -Ucs55 = .data:0x8043E520; // type:object size:0x200 scope:local -Ucs56 = .data:0x8043E720; // type:object size:0x200 scope:local -Ucs57 = .data:0x8043E920; // type:object size:0x200 scope:local -Ucs58 = .data:0x8043EB20; // type:object size:0x200 scope:local -Ucs59 = .data:0x8043ED20; // type:object size:0x200 scope:local -Ucs5A = .data:0x8043EF20; // type:object size:0x200 scope:local -Ucs5B = .data:0x8043F120; // type:object size:0x200 scope:local -Ucs5C = .data:0x8043F320; // type:object size:0x200 scope:local -Ucs5D = .data:0x8043F520; // type:object size:0x200 scope:local -Ucs5E = .data:0x8043F720; // type:object size:0x200 scope:local -Ucs5F = .data:0x8043F920; // type:object size:0x200 scope:local -Ucs60 = .data:0x8043FB20; // type:object size:0x200 scope:local -Ucs61 = .data:0x8043FD20; // type:object size:0x200 scope:local -Ucs62 = .data:0x8043FF20; // type:object size:0x200 scope:local -Ucs63 = .data:0x80440120; // type:object size:0x200 scope:local -Ucs64 = .data:0x80440320; // type:object size:0x200 scope:local -Ucs65 = .data:0x80440520; // type:object size:0x200 scope:local -Ucs66 = .data:0x80440720; // type:object size:0x200 scope:local -Ucs67 = .data:0x80440920; // type:object size:0x200 scope:local -Ucs68 = .data:0x80440B20; // type:object size:0x200 scope:local -Ucs69 = .data:0x80440D20; // type:object size:0x200 scope:local -Ucs6A = .data:0x80440F20; // type:object size:0x200 scope:local -Ucs6B = .data:0x80441120; // type:object size:0x200 scope:local -Ucs6C = .data:0x80441320; // type:object size:0x200 scope:local -Ucs6D = .data:0x80441520; // type:object size:0x200 scope:local -Ucs6E = .data:0x80441720; // type:object size:0x200 scope:local -Ucs6F = .data:0x80441920; // type:object size:0x200 scope:local -Ucs70 = .data:0x80441B20; // type:object size:0x200 scope:local -Ucs71 = .data:0x80441D20; // type:object size:0x200 scope:local -Ucs72 = .data:0x80441F20; // type:object size:0x200 scope:local -Ucs73 = .data:0x80442120; // type:object size:0x200 scope:local -Ucs74 = .data:0x80442320; // type:object size:0x200 scope:local -Ucs75 = .data:0x80442520; // type:object size:0x200 scope:local -Ucs76 = .data:0x80442720; // type:object size:0x200 scope:local -Ucs77 = .data:0x80442920; // type:object size:0x200 scope:local -Ucs78 = .data:0x80442B20; // type:object size:0x200 scope:local -Ucs79 = .data:0x80442D20; // type:object size:0x200 scope:local -Ucs7A = .data:0x80442F20; // type:object size:0x200 scope:local -Ucs7B = .data:0x80443120; // type:object size:0x200 scope:local -Ucs7C = .data:0x80443320; // type:object size:0x200 scope:local -Ucs7D = .data:0x80443520; // type:object size:0x200 scope:local -Ucs7E = .data:0x80443720; // type:object size:0x200 scope:local -Ucs7F = .data:0x80443920; // type:object size:0x200 scope:local -Ucs80 = .data:0x80443B20; // type:object size:0x200 scope:local -Ucs81 = .data:0x80443D20; // type:object size:0x200 scope:local -Ucs82 = .data:0x80443F20; // type:object size:0x200 scope:local -Ucs83 = .data:0x80444120; // type:object size:0x200 scope:local -Ucs84 = .data:0x80444320; // type:object size:0x200 scope:local -Ucs85 = .data:0x80444520; // type:object size:0x200 scope:local -Ucs86 = .data:0x80444720; // type:object size:0x200 scope:local -Ucs87 = .data:0x80444920; // type:object size:0x200 scope:local -Ucs88 = .data:0x80444B20; // type:object size:0x200 scope:local -Ucs89 = .data:0x80444D20; // type:object size:0x200 scope:local -Ucs8A = .data:0x80444F20; // type:object size:0x200 scope:local -Ucs8B = .data:0x80445120; // type:object size:0x200 scope:local -Ucs8C = .data:0x80445320; // type:object size:0x200 scope:local -Ucs8D = .data:0x80445520; // type:object size:0x200 scope:local -Ucs8E = .data:0x80445720; // type:object size:0x200 scope:local -Ucs8F = .data:0x80445920; // type:object size:0x200 scope:local -Ucs90 = .data:0x80445B20; // type:object size:0x200 scope:local -Ucs91 = .data:0x80445D20; // type:object size:0x200 scope:local -Ucs92 = .data:0x80445F20; // type:object size:0x200 scope:local -Ucs93 = .data:0x80446120; // type:object size:0x200 scope:local -Ucs94 = .data:0x80446320; // type:object size:0x200 scope:local -Ucs95 = .data:0x80446520; // type:object size:0x200 scope:local -Ucs96 = .data:0x80446720; // type:object size:0x200 scope:local -Ucs97 = .data:0x80446920; // type:object size:0x200 scope:local -Ucs98 = .data:0x80446B20; // type:object size:0x200 scope:local -Ucs99 = .data:0x80446D20; // type:object size:0x200 scope:local -Ucs9A = .data:0x80446F20; // type:object size:0x200 scope:local -Ucs9B = .data:0x80447120; // type:object size:0x200 scope:local -Ucs9C = .data:0x80447320; // type:object size:0x200 scope:local -Ucs9D = .data:0x80447520; // type:object size:0x200 scope:local -Ucs9E = .data:0x80447720; // type:object size:0x200 scope:local -Ucs9F = .data:0x80447920; // type:object size:0x200 scope:local -UcsFF = .data:0x80447B20; // type:object size:0x200 scope:local -UcsSjisTable = .data:0x80447D20; // type:object size:0x400 scope:local -Sjis00 = .data:0x80448120; // type:object size:0x200 scope:local -Sjis81 = .data:0x80448320; // type:object size:0x200 scope:local -Sjis82 = .data:0x80448520; // type:object size:0x200 scope:local -Sjis83 = .data:0x80448720; // type:object size:0x200 scope:local -Sjis84 = .data:0x80448920; // type:object size:0x200 scope:local -Sjis88 = .data:0x80448B20; // type:object size:0x200 scope:local -Sjis89 = .data:0x80448D20; // type:object size:0x200 scope:local -Sjis8A = .data:0x80448F20; // type:object size:0x200 scope:local -Sjis8B = .data:0x80449120; // type:object size:0x200 scope:local -Sjis8C = .data:0x80449320; // type:object size:0x200 scope:local -Sjis8D = .data:0x80449520; // type:object size:0x200 scope:local -Sjis8E = .data:0x80449720; // type:object size:0x200 scope:local -Sjis8F = .data:0x80449920; // type:object size:0x200 scope:local -Sjis90 = .data:0x80449B20; // type:object size:0x200 scope:local -Sjis91 = .data:0x80449D20; // type:object size:0x200 scope:local -Sjis92 = .data:0x80449F20; // type:object size:0x200 scope:local -Sjis93 = .data:0x8044A120; // type:object size:0x200 scope:local -Sjis94 = .data:0x8044A320; // type:object size:0x200 scope:local -Sjis95 = .data:0x8044A520; // type:object size:0x200 scope:local -Sjis96 = .data:0x8044A720; // type:object size:0x200 scope:local -Sjis97 = .data:0x8044A920; // type:object size:0x200 scope:local -Sjis98 = .data:0x8044AB20; // type:object size:0x200 scope:local -Sjis99 = .data:0x8044AD20; // type:object size:0x200 scope:local -Sjis9A = .data:0x8044AF20; // type:object size:0x200 scope:local -Sjis9B = .data:0x8044B120; // type:object size:0x200 scope:local -Sjis9C = .data:0x8044B320; // type:object size:0x200 scope:local -Sjis9D = .data:0x8044B520; // type:object size:0x200 scope:local -Sjis9E = .data:0x8044B720; // type:object size:0x200 scope:local -Sjis9F = .data:0x8044B920; // type:object size:0x200 scope:local -SjisE0 = .data:0x8044BB20; // type:object size:0x200 scope:local -SjisE1 = .data:0x8044BD20; // type:object size:0x200 scope:local -SjisE2 = .data:0x8044BF20; // type:object size:0x200 scope:local -SjisE3 = .data:0x8044C120; // type:object size:0x200 scope:local -SjisE4 = .data:0x8044C320; // type:object size:0x200 scope:local -SjisE5 = .data:0x8044C520; // type:object size:0x200 scope:local -SjisE6 = .data:0x8044C720; // type:object size:0x200 scope:local -SjisE7 = .data:0x8044C920; // type:object size:0x200 scope:local -SjisE8 = .data:0x8044CB20; // type:object size:0x200 scope:local -SjisE9 = .data:0x8044CD20; // type:object size:0x200 scope:local -SjisEA = .data:0x8044CF20; // type:object size:0x200 scope:local -SjisUcsTable = .data:0x8044D120; // type:object size:0x400 scope:local -@9 = .data:0x8044D520; // type:object size:0x18 scope:local -mtxUnit = .data:0x8044D538; // type:object size:0x10 scope:local -...data.0 = .data:0x8044D548; // type:label scope:local -@119 = .data:0x8044D548; // type:object size:0xC8 scope:local -@140 = .data:0x8044D610; // type:object size:0x37 scope:local -@239 = .data:0x8044D648; // type:object size:0x34 scope:local -@265 = .data:0x8044D67C; // type:object size:0x2F scope:local -@271 = .data:0x8044D6AC; // type:object size:0x27 scope:local -@311 = .data:0x8044D6D4; // type:object size:0x3A scope:local -@343 = .data:0x8044D710; // type:object size:0x66 scope:local -@344 = .data:0x8044D778; // type:object size:0x55 scope:local -@345 = .data:0x8044D7D0; // type:object size:0x5C scope:local -@376 = .data:0x8044D82C; // type:object size:0x61 scope:local -@377 = .data:0x8044D890; // type:object size:0x50 scope:local -@378 = .data:0x8044D8E0; // type:object size:0x57 scope:local -...data.0 = .data:0x8044D938; // type:label scope:local -@1 = .data:0x8044D938; // type:object size:0x45 scope:local -@18 = .data:0x8044D980; // type:object size:0xA scope:local -@24 = .data:0x8044D98C; // type:object size:0x34 scope:local -@359 = .data:0x8044D9C0; // type:object size:0x44 scope:local -ImmCommand = .data:0x8044DA04; // type:object size:0xC scope:local -@789 = .data:0x8044DA10; // type:object size:0x41 scope:local -@956 = .data:0x8044DA54; // type:object size:0x34 scope:local -@1060 = .data:0x8044DA88; // type:object size:0x34 scope:local -...data.0 = .data:0x8044DAC0; // type:label scope:local -@66 = .data:0x8044DAC0; // type:object size:0xC scope:local -@69 = .data:0x8044DACC; // type:object size:0xB scope:local -@70 = .data:0x8044DAD8; // type:object size:0xD scope:local -@71 = .data:0x8044DAE8; // type:object size:0x13 scope:local -@72 = .data:0x8044DAFC; // type:object size:0x14 scope:local -@73 = .data:0x8044DB10; // type:object size:0x12 scope:local -@74 = .data:0x8044DB24; // type:object size:0x13 scope:local -@75 = .data:0x8044DB38; // type:object size:0xF scope:local -@76 = .data:0x8044DB48; // type:object size:0x14 scope:local -@78 = .data:0x8044DB5C; // type:object size:0xF scope:local -CommandNames = .data:0x8044DB6C; // type:object size:0x40 scope:local -@97 = .data:0x8044DBAC; // type:object size:0x24 scope:local -@98 = .data:0x8044DBD0; // type:object size:0xF scope:local -@101 = .data:0x8044DBE0; // type:object size:0x15 scope:local -@102 = .data:0x8044DBF8; // type:object size:0x2B scope:local -ErrorTable = .data:0x8044DC28; // type:object size:0x48 scope:local -...data.0 = .data:0x8044DC70; // type:label scope:local -@4 = .data:0x8044DC70; // type:object size:0x6E scope:local -@5 = .data:0x8044DCE0; // type:object size:0x7E scope:local -@6 = .data:0x8044DD60; // type:object size:0x99 scope:local -@7 = .data:0x8044DDFC; // type:object size:0x8D scope:local -@8 = .data:0x8044DE8C; // type:object size:0x87 scope:local -@9 = .data:0x8044DF14; // type:object size:0x80 scope:local -@10 = .data:0x8044DF94; // type:object size:0x89 scope:local -...data.0 = .data:0x8044E020; // type:label scope:local -@38 = .data:0x8044E020; // type:object size:0x1A scope:local -@39 = .data:0x8044E03C; // type:object size:0x16 scope:local -@40 = .data:0x8044E054; // type:object size:0x14 scope:local -@41 = .data:0x8044E068; // type:object size:0x14 scope:local -@44 = .data:0x8044E07C; // type:object size:0x14 scope:local -...data.0 = .data:0x8044E090; // type:label scope:local -@1 = .data:0x8044E090; // type:object size:0x44 scope:local -timing = .data:0x8044E0D4; // type:object size:0x17C scope:local -taps = .data:0x8044E250; // type:object size:0x32 scope:local -@101 = .data:0x8044E284; // type:object size:0x7C scope:local -@355 = .data:0x8044E300; // type:object size:0x29 scope:local -@356 = .data:0x8044E32C; // type:object size:0x29 scope:local -@357 = .data:0x8044E358; // type:object size:0x29 scope:local -@358 = .data:0x8044E384; // type:object size:0x29 scope:local -@359 = .data:0x8044E3B0; // type:object size:0x29 scope:local -@360 = .data:0x8044E3DC; // type:object size:0x29 scope:local -@538 = .data:0x8044E408; // type:object size:0x4B scope:local -@740 = .data:0x8044E454; // type:object size:0x20 scope:local -PadChanMask = .data:0x8044E478; // type:object size:0x10 scope:local -...data.0 = .data:0x8044E488; // type:label scope:local -@1 = .data:0x8044E488; // type:object size:0x45 scope:local -ResetFunctionInfo = .data:0x8044E4D0; // type:object size:0x10 scope:local -...data.0 = .data:0x8044E4E0; // type:label scope:local -@1 = .data:0x8044E4E0; // type:object size:0x44 scope:local -...data.0 = .data:0x8044E528; // type:label scope:local -@1 = .data:0x8044E528; // type:object size:0x44 scope:local -SectorSizeTable = .data:0x8044E570; // type:object size:0x20 scope:local -LatencyTable = .data:0x8044E590; // type:object size:0x20 scope:local -...data.0 = .data:0x8044E5B0; // type:label scope:local -@1 = .data:0x8044E5B0; // type:object size:0x46 scope:local -ResetFunctionInfo = .data:0x8044E5F8; // type:object size:0x10 scope:local -CardData = .data:0x8044E620; // type:object size:0x160 scope:local -...data.0 = .data:0x8044E780; // type:label scope:local -@1 = .data:0x8044E780; // type:object size:0x44 scope:local -DefaultTexData = .data:0x8044E7E0; // type:object size:0x20 scope:local -GXDefaultVATList = .data:0x8044E800; // type:object size:0xD0 scope:local -GXDefaultProjData = .data:0x8044E8D0; // type:object size:0x1C scope:local -GXTexRegionAddrTable = .data:0x8044E8EC; // type:object size:0xC0 scope:local -GXResetFuncInfo = .data:0x8044E9AC; // type:object size:0x10 scope:local -@176 = .data:0x8044E9C0; // type:object size:0x68 scope:local -@223 = .data:0x8044EA28; // type:object size:0x68 scope:local -@282 = .data:0x8044EA90; // type:object size:0x68 scope:local -@476 = .data:0x8044EAF8; // type:object size:0x44 scope:local -@503 = .data:0x8044EB3C; // type:object size:0x44 scope:local -@545 = .data:0x8044EB80; // type:object size:0x44 scope:local -@740 = .data:0x8044EBC4; // type:object size:0x1C scope:local -@739 = .data:0x8044EBE0; // type:object size:0x54 scope:local -@431 = .data:0x8044EC38; // type:object size:0x9 scope:local -@432 = .data:0x8044EC44; // type:object size:0x21 scope:local -@451 = .data:0x8044EC68; // type:object size:0x23 scope:local -GXNtsc480IntDf = .data:0x8044ECA0; // type:object size:0x3C scope:global -GXNtsc480Prog = .data:0x8044ECE4; // type:object size:0x3C scope:global -GXMpal480IntDf = .data:0x8044ED38; // type:object size:0x3C scope:global -GXPal528IntDf = .data:0x8044ED8C; // type:object size:0x3C scope:global -GXEurgb60Hz480IntDf = .data:0x8044EDE0; // type:object size:0x3C scope:global -@145 = .data:0x8044EE28; // type:object size:0x1C scope:local -@46 = .data:0x8044EE48; // type:object size:0xF4 scope:local -@104 = .data:0x8044EF3C; // type:object size:0xF4 scope:local -@145 = .data:0x8044F030; // type:object size:0xF4 scope:local -@224 = .data:0x8044F124; // type:object size:0x3C scope:local -...data.0 = .data:0x8044F160; // type:label scope:local -TEVCOpTableST0 = .data:0x8044F160; // type:object size:0x14 scope:local -TEVCOpTableST1 = .data:0x8044F174; // type:object size:0x14 scope:local -TEVAOpTableST0 = .data:0x8044F188; // type:object size:0x14 scope:local -TEVAOpTableST1 = .data:0x8044F19C; // type:object size:0x14 scope:local -c2r$334 = .data:0x8044F1B0; // type:object size:0x24 scope:local -p2f$358 = .data:0x8044F1D8; // type:object size:0x20 scope:local -@182 = .data:0x8044F1F8; // type:object size:0x5C scope:local -@181 = .data:0x8044F254; // type:object size:0x90 scope:local -@288 = .data:0x8044F2E4; // type:object size:0x5C scope:local -...data.0 = .data:0x8044F340; // type:label scope:local -@1 = .data:0x8044F340; // type:object size:0x45 scope:local -@473 = .data:0x8044F388; // type:object size:0xF scope:local -@474 = .data:0x8044F398; // type:object size:0x10 scope:local -@475 = .data:0x8044F3A8; // type:object size:0x10 scope:local -@476 = .data:0x8044F3B8; // type:object size:0x10 scope:local -@477 = .data:0x8044F3C8; // type:object size:0x11 scope:local -@478 = .data:0x8044F3DC; // type:object size:0x11 scope:local -@479 = .data:0x8044F3F0; // type:object size:0xC scope:local -@485 = .data:0x8044F3FC; // type:object size:0x9 scope:local -@486 = .data:0x8044F408; // type:object size:0xD scope:local -@487 = .data:0x8044F418; // type:object size:0x12 scope:local -@489 = .data:0x8044F42C; // type:object size:0xE scope:local -@490 = .data:0x8044F43C; // type:object size:0xE scope:local -...data.0 = .data:0x8044F450; // type:label scope:local -@1 = .data:0x8044F450; // type:object size:0x44 scope:local -Si = .data:0x8044F494; // type:object size:0x14 scope:local -Type = .data:0x8044F4A8; // type:object size:0x10 scope:local -@457 = .data:0x8044F4B8; // type:object size:0xC scope:local -@459 = .data:0x8044F4C4; // type:object size:0xF scope:local -@460 = .data:0x8044F4D4; // type:object size:0xF scope:local -@461 = .data:0x8044F4E4; // type:object size:0xD scope:local -@462 = .data:0x8044F4F4; // type:object size:0xA scope:local -@463 = .data:0x8044F500; // type:object size:0x10 scope:local -@464 = .data:0x8044F510; // type:object size:0x14 scope:local -@465 = .data:0x8044F524; // type:object size:0x12 scope:local -@466 = .data:0x8044F538; // type:object size:0x14 scope:local -@467 = .data:0x8044F54C; // type:object size:0x9 scope:local -@468 = .data:0x8044F558; // type:object size:0x9 scope:local -...data.0 = .data:0x8044F568; // type:label scope:local -XYNTSC = .data:0x8044F568; // type:object size:0x30 scope:local -XYPAL = .data:0x8044F598; // type:object size:0x30 scope:local -@16 = .data:0x8044F5C8; // type:object size:0x33 scope:local -ResetFunctionInfo = .data:0x8044F600; // type:object size:0x10 scope:local -@28 = .data:0x8044F610; // type:object size:0x19 scope:local -idctprescale = .data:0x8044F62C; // type:object size:0x100 scope:global -VP6_ModeUsesMC = .data:0x8044F72C; // type:object size:0x28 scope:global -BilinearFilters = .data:0x8044F754; // type:object size:0x40 scope:local -DeblockLimitValuesVp4 = .data:0x8044F794; // type:object size:0x100 scope:global -DeblockLimitValuesVp5 = .data:0x8044F894; // type:object size:0x100 scope:global -DeblockLimitValuesVp6 = .data:0x8044F994; // type:object size:0x100 scope:global -DeringModifierV2 = .data:0x8044FA94; // type:object size:0x100 scope:global -DeringModifierV3 = .data:0x8044FB94; // type:object size:0x100 scope:global -SharpenModifier = .data:0x8044FC94; // type:object size:0x100 scope:global -LoopFilterLimitValuesVp4 = .data:0x8044FD94; // type:object size:0x100 scope:global -LoopFilterLimitValuesVp5 = .data:0x8044FE94; // type:object size:0x100 scope:global -LoopFilterLimitValuesVp6 = .data:0x8044FF94; // type:object size:0x100 scope:global -idctconstants = .data:0x80450094; // type:object size:0x20 scope:local -BicubicFilters = .data:0x804500B4; // type:object size:0x80 scope:local -BilinearFilters = .data:0x80450134; // type:object size:0x40 scope:local -playerinterfacefn = .data:0x80450174; // type:object size:0x30 scope:global -SNDAEMSoptfn = .data:0x804501A4; // type:object size:0x30 scope:global -SNDAEMSplayerplayfn = .data:0x804501D4; // type:object size:0x10 scope:global -SNDAEMSplayerstopfn = .data:0x804501E4; // type:object size:0x10 scope:global -SNDAEMSplayerpausefn = .data:0x804501F4; // type:object size:0x10 scope:global -SNDAEMSplayerunpausefn = .data:0x80450204; // type:object size:0x10 scope:global -SNDAEMSplayerupdatefn = .data:0x80450214; // type:object size:0x10 scope:global -sndaemsfuncs = .data:0x80450224; // type:object size:0xA0 scope:global -modulebankhandle.375 = .data:0x804502C4; // type:object size:0x4 scope:local -SNDAEMSalmbcurrentpriority = .data:0x804502C8; // type:object size:0x4 scope:global -lasthandle.129 = .data:0x804502CC; // type:object size:0x4 scope:local -sndbas = .data:0x804502D0; // type:object size:0xC scope:global -SNDIrandseedorig = .data:0x804502DC; // type:object size:0x18 scope:global -lastTick.126 = .data:0x804502F4; // type:object size:0x4 scope:local -_3Snd.gMutexLockFn = .data:0x804502F8; // type:object size:0x4 scope:global -_3Snd.gMutexUnlockFn = .data:0x804502FC; // type:object size:0x4 scope:global -sndsintbl = .data:0x80450300; // type:object size:0x202 scope:global -_3Snd.gVoiceIndexToChannelLut = .data:0x80450504; // type:object size:0x24 scope:global -_3Snd.pheap = .data:0x80450528; // type:object size:0x4 scope:global -_3Snd.outputmode = .data:0x8045052C; // type:object size:0x4 scope:global -_3Snd.gMasterVol = .data:0x80450530; // type:object size:0x4 scope:global -_3Snd.gMaxFxBuses = .data:0x80450534; // type:object size:0x4 scope:global -gotcaps = .data:0x80450538; // type:object size:0x4 scope:local -ret.126 = .data:0x8045053C; // type:object size:0x4 scope:local -freekey.126 = .data:0x80450540; // type:object size:0x1 scope:local -snddefaultenvelope = .data:0x80450544; // type:object size:0x8 scope:global -systaskadded.168 = .data:0x8045054C; // type:object size:0x4 scope:local -_3Snd.MPEGuse_MMX = .data:0x80450550; // type:object size:0x4 scope:global -SNDDRV_dolbypl2balances = .data:0x80450558; // type:object size:0x800 scope:global -everyother = .data:0x80450D58; // type:object size:0x4 scope:local -curTick.460 = .data:0x80450D5C; // type:object size:0x4 scope:local -araminited.470 = .data:0x80450D60; // type:object size:0x4 scope:local -tablecopyto = .data:0x80450D68; // type:object size:0x510 scope:global -mapchannel = .data:0x80451278; // type:object size:0xD8 scope:global -filtersizetable = .data:0x80451350; // type:object size:0x28 scope:global -filtermodsizetable = .data:0x80451378; // type:object size:0x28 scope:global -fxGlobalsCreated = .data:0x804513A0; // type:object size:0x4 scope:local -sndlibauthor = .data:0x804513A4; // type:object size:0x3D scope:global -sndcents = .data:0x804513E4; // type:object size:0x100 scope:global -sndpantoazimuthtab = .data:0x804514E4; // type:object size:0x100 scope:global -_Q23Snd4Coda.gpMemCpy = .data:0x804515E4; // type:object size:0x4 scope:global -_3Snd.xafilterf = .data:0x804515E8; // type:object size:0x20 scope:global -_3Snd.xatablef = .data:0x80451608; // type:object size:0x400 scope:global -_3Snd.bitmask = .data:0x80451A08; // type:object size:0x24 scope:local -_3Snd.coeff_table = .data:0x80451A2C; // type:object size:0x100 scope:local -_3Snd.index_table = .data:0x80451B2C; // type:object size:0x200 scope:local -_3Snd.decode_table = .data:0x80451D2C; // type:object size:0x15C scope:local -_4Csis.gIsAllocSet = .data:0x80451E88; // type:object size:0x4 scope:global -_4Csis.gpAllocator = .data:0x80451E8C; // type:object size:0x4 scope:global -_4Csis.gpCoreAllocator = .data:0x80451E90; // type:object size:0x4 scope:global -_4Csis.gIsAllocatorCreated = .data:0x80451E94; // type:object size:0x4 scope:global -_4Csis.gIsCoreAllocatorCreated = .data:0x80451E98; // type:object size:0x4 scope:global -_4Csis.gIsInited = .data:0x80451E9C; // type:object size:0x4 scope:global -_4Csis.gUniqueKeyId = .data:0x80451EA0; // type:object size:0x2 scope:local -_4Path.pfstates = .data:0x80451EA8; // type:object size:0x10 scope:global -seedPATH = .data:0x80451EB8; // type:object size:0x18 scope:global -gMemAlloc = .data:0x80451ED0; // type:object size:0x4 scope:global -gMemFree = .data:0x80451ED4; // type:object size:0x4 scope:global -gExtVecs = .data:0x80451ED8; // type:object size:0xC scope:global -gSPCH_Initialized = .data:0x80451EE4; // type:object size:0x4 scope:global -gVoxBanks = .data:0x80451EE8; // type:object size:0x4 scope:global -gUniqueBankHandle = .data:0x80451EEC; // type:object size:0x4 scope:global -gNumBanks = .data:0x80451EF0; // type:object size:0x4 scope:global -gBankCount = .data:0x80451EF4; // type:object size:0x4 scope:global -gSPCH_AddEvent = .data:0x80451EF8; // type:object size:0x4 scope:global -gClearCycle = .data:0x80451EFC; // type:object size:0x4 scope:global -gAddEventStatus = .data:0x80451F00; // type:object size:0x4 scope:local -gSPCHPlayStatus = .data:0x80451F04; // type:object size:0x4 scope:local -multiple = .data:0x80451F08; // type:object size:0x20 scope:local -seedX = .data:0x80451F28; // type:object size:0x18 scope:global -gRandArrayIndex = .data:0x80451F40; // type:object size:0x4 scope:global -spchlibauthor = .data:0x80451F44; // type:object size:0x3D scope:global -gFileSysOpts = .data:0x80451F84; // type:object size:0x38 scope:global -exitfunctions = .data:0x80451FBC; // type:object size:0x100 scope:local -vbltmrsub = .data:0x804520BC; // type:object size:0x20 scope:global -tmrsub = .data:0x804520DC; // type:object size:0x20 scope:global -_11RealmcUtils.crctab = .data:0x804520FC; // type:object size:0x400 scope:local -PRINTchannellist = .data:0x804524FC; // type:object size:0x300 scope:local -PRINTdevicelist = .data:0x804527FC; // type:object size:0x60 scope:global -@311 = .data:0x80452860; // type:object size:0x67 scope:local -first.183 = .data:0x804528C8; // type:object size:0x4 scope:local -_ctors = .data:0x804528D0; // type:object size:0x8 scope:global -_dtors = .data:0x804528D8; // type:object size:0x8 scope:global -...data.0 = .data:0x804528E0; // type:label scope:local -@1 = .data:0x804528E0; // type:object size:0x45 scope:local -...data.0 = .data:0x80452928; // type:label scope:local -@1 = .data:0x80452928; // type:object size:0x44 scope:local -...data.0 = .data:0x80452970; // type:label scope:local -__AXSrcCycles = .data:0x80452970; // type:object size:0x14 scope:local -__AXMainMixCycles = .data:0x80452984; // type:object size:0x40 scope:local -__AXAuxMixCycles = .data:0x804529C4; // type:object size:0x80 scope:local -__AXCompressorTable = .data:0x80452A60; // type:object size:0x1A40 scope:global -axDspSlave = .data:0x804544A0; // type:object size:0x1F00 scope:global -...data.0 = .data:0x804563A0; // type:label scope:local -@1 = .data:0x804563A0; // type:object size:0x45 scope:local -@19 = .data:0x804563E8; // type:object size:0x1E scope:local -@20 = .data:0x80456408; // type:object size:0xC scope:local -@21 = .data:0x80456414; // type:object size:0x9 scope:local -...data.0 = .data:0x80456420; // type:label scope:local -@266 = .data:0x80456420; // type:object size:0x1D scope:local -@267 = .data:0x80456440; // type:object size:0x2D scope:local -@268 = .data:0x80456470; // type:object size:0x2D scope:local -@269 = .data:0x804564A0; // type:object size:0x2D scope:local -@270 = .data:0x804564D0; // type:object size:0x2D scope:local -@271 = .data:0x80456500; // type:object size:0x2D scope:local -@294 = .data:0x80456530; // type:object size:0x2B scope:local -value.10688 = .bss:0x80456560; // type:label size:0x4 scope:local -_f_bss = .bss:0x80456560; // type:object scope:global -__bss_start = .bss:0x80456560; // type:object scope:global -_.tmp_0.10689 = .bss:0x80456564; // type:label size:0x4 scope:local -k.16707 = .bss:0x80456568; // type:label size:0x4 scope:local -_.tmp_3.16708 = .bss:0x8045656C; // type:label size:0x4 scope:local -k.18593 = .bss:0x80456570; // type:label size:0x4 scope:local -_.tmp_11.18594 = .bss:0x80456574; // type:label size:0x4 scope:local -k.18631 = .bss:0x80456578; // type:label size:0x4 scope:local -_.tmp_12.18632 = .bss:0x8045657C; // type:label size:0x4 scope:local -k.18663 = .bss:0x80456580; // type:label size:0x4 scope:local -_.tmp_13.18664 = .bss:0x80456584; // type:label size:0x4 scope:local -k.18695 = .bss:0x80456588; // type:label size:0x4 scope:local -_.tmp_14.18696 = .bss:0x8045658C; // type:label size:0x4 scope:local -k.18727 = .bss:0x80456590; // type:label size:0x4 scope:local -_.tmp_15.18728 = .bss:0x80456594; // type:label size:0x4 scope:local -k.18765 = .bss:0x80456598; // type:label size:0x4 scope:local -_.tmp_16.18766 = .bss:0x8045659C; // type:label size:0x4 scope:local -k.18797 = .bss:0x804565A0; // type:label size:0x4 scope:local -_.tmp_17.18798 = .bss:0x804565A4; // type:label size:0x4 scope:local -k.18829 = .bss:0x804565A8; // type:label size:0x4 scope:local -_.tmp_18.18830 = .bss:0x804565AC; // type:label size:0x4 scope:local -k.18873 = .bss:0x804565B0; // type:label size:0x4 scope:local -_.tmp_19.18874 = .bss:0x804565B4; // type:label size:0x4 scope:local -k.18905 = .bss:0x804565B8; // type:label size:0x4 scope:local -_.tmp_20.18906 = .bss:0x804565BC; // type:label size:0x4 scope:local -patrolgoal.31353 = .bss:0x804565C0; // type:label size:0x4 scope:local -_.tmp_34.31354 = .bss:0x804565C4; // type:label size:0x4 scope:local -k.32498 = .bss:0x804565C8; // type:label size:0x4 scope:local -_.tmp_35.32499 = .bss:0x804565CC; // type:label size:0x4 scope:local -k.35274 = .bss:0x804565D0; // type:label size:0x4 scope:local -_.tmp_37.35275 = .bss:0x804565D4; // type:label size:0x4 scope:local -car_hash.35783 = .bss:0x804565D8; // type:label size:0x4 scope:local -_.tmp_38.35784 = .bss:0x804565DC; // type:label size:0x4 scope:local -heli_hash.35785 = .bss:0x804565E0; // type:label size:0x4 scope:local -_.tmp_39.35786 = .bss:0x804565E4; // type:label size:0x4 scope:local -variation.36214 = .bss:0x804565E8; // type:label size:0x4 scope:local -_.tmp_40.36215 = .bss:0x804565EC; // type:label size:0x4 scope:local -k.37060 = .bss:0x804565F0; // type:label size:0x4 scope:local -_.tmp_41.37061 = .bss:0x804565F4; // type:label size:0x4 scope:local -kFloatScaleUp = .bss:0x804565F8; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x804565FC; // type:label size:0x4 scope:local -TrafficOffScreenDistance = .bss:0x80456600; // type:label size:0x14 scope:local -TrafficOffScreenTime = .bss:0x80456614; // type:label size:0x14 scope:local -TrafficDensitySpawnRates = .bss:0x80456628; // type:label size:0x14 scope:local -_AITrafficManager = .bss:0x8045663C; // type:label size:0xC scope:global -_AIPursuit = .bss:0x80456648; // type:label size:0xC scope:global -_AIRoadBlock = .bss:0x80456654; // type:label size:0xC scope:global -_AICopManager = .bss:0x80456660; // type:label size:0xC scope:global -_AvoidableManager = .bss:0x8045666C; // type:label size:0xC scope:global -_11AIAvoidable.mAll = .bss:0x80456678; // type:label size:0x8 scope:global -_AIActionNone = .bss:0x80456680; // type:label size:0xC scope:global -_AIActionTooDamaged = .bss:0x8045668C; // type:label size:0xC scope:global -_AIActionGetUnstuck = .bss:0x80456698; // type:label size:0xC scope:global -_AIActionTraffic = .bss:0x804566A4; // type:label size:0xC scope:global -aAIStoppingDistTable = .bss:0x804566B0; // type:label size:0x14 scope:global -_AIActionPursuitOffRoad = .bss:0x804566C4; // type:label size:0xC scope:global -_AIActionHeliPursuit = .bss:0x804566D0; // type:label size:0xC scope:global -_AIActionHeliExit = .bss:0x804566DC; // type:label size:0xC scope:global -_AIActionHeadOnRam = .bss:0x804566E8; // type:label size:0xC scope:global -_AIActionRam = .bss:0x804566F4; // type:label size:0xC scope:global -_AIActionStopShort = .bss:0x80456700; // type:label size:0xC scope:global -_AIActionSpline = .bss:0x8045670C; // type:label size:0xC scope:global -_AIActionStrafe = .bss:0x80456718; // type:label size:0xC scope:global -_AIActionAirborne = .bss:0x80456724; // type:label size:0xC scope:global -_AIActionJackKnife = .bss:0x80456730; // type:label size:0xC scope:global -_AIActionStaticRoadBlock = .bss:0x8045673C; // type:label size:0xC scope:global -AiNosScaleTable = .bss:0x80456748; // type:label size:0x14 scope:global -AiSpeedScaleTable = .bss:0x8045675C; // type:label size:0x14 scope:global -AiSpeedScaleTableDrag = .bss:0x80456770; // type:label size:0x14 scope:global -AiAccelScaleTable = .bss:0x80456784; // type:label size:0x14 scope:global -AiAccelScaleTableDrag = .bss:0x80456798; // type:label size:0x14 scope:global -AiCatchupAcceleration = .bss:0x804567AC; // type:label size:0x14 scope:global -AICorneringScaleTable = .bss:0x804567C0; // type:label size:0x14 scope:global -AiNavLookAheadTable = .bss:0x804567D4; // type:label size:0x14 scope:global -AiDragNavLookAheadTable = .bss:0x804567E8; // type:label size:0x14 scope:global -AiSeparationMinTable = .bss:0x804567FC; // type:label size:0x14 scope:global -AiSeparationMaxTable = .bss:0x80456810; // type:label size:0x14 scope:global -_AIActionRace = .bss:0x80456824; // type:label size:0xC scope:global -HumanNavLookAheadTable = .bss:0x80456830; // type:label size:0x14 scope:global -HumanDragNavLookAheadTable = .bss:0x80456844; // type:label size:0x14 scope:global -__AIVehicleEmpty = .bss:0x80456858; // type:label size:0xC scope:global -__AIVehicleHuman = .bss:0x80456864; // type:label size:0xC scope:global -__AIVehicle = .bss:0x80456870; // type:label size:0xC scope:global -AdaptiveSkillUpTable = .bss:0x8045687C; // type:label size:0x14 scope:global -AdaptiveSkillDownTable = .bss:0x80456890; // type:label size:0x14 scope:global -CatchupGlueTable = .bss:0x804568A4; // type:label size:0x14 scope:global -SlowDownGlueTable = .bss:0x804568B8; // type:label size:0x14 scope:global -CatchupCheatTable = .bss:0x804568CC; // type:label size:0x14 scope:global -__AIVehicleCopCar = .bss:0x804568E0; // type:label size:0xC scope:global -vHeadingErrorModelData = .bss:0x804568EC; // type:label size:0x50 scope:global -HeadingErrorModelGraph = .bss:0x8045693C; // type:label size:0x8 scope:global -vVelocityErrorModelData = .bss:0x80456944; // type:label size:0x48 scope:global -VelocityErrorModelGraph = .bss:0x8045698C; // type:label size:0x8 scope:global -PidProportionalTable = .bss:0x80456994; // type:label size:0x14 scope:global -PidDerivativeTable = .bss:0x804569A8; // type:label size:0x14 scope:global -PidIntegralTable = .bss:0x804569BC; // type:label size:0x14 scope:global -__AIVehicleRacecar = .bss:0x804569D0; // type:label size:0xC scope:global -__AIVehicleTraffic = .bss:0x804569DC; // type:label size:0xC scope:global -__AIVehicleHelicopter = .bss:0x804569E8; // type:label size:0xC scope:global -TheValidTargets = .bss:0x804569F4; // type:label size:0x38 scope:global -TheAITargets = .bss:0x80456A2C; // type:label size:0x8 scope:global -_AIGoalNone = .bss:0x80456A34; // type:label size:0xC scope:global -_AIGoalTraffic = .bss:0x80456A40; // type:label size:0xC scope:global -_AIGoalPatrol = .bss:0x80456A4C; // type:label size:0xC scope:global -_AIGoalPursuit = .bss:0x80456A58; // type:label size:0xC scope:global -_AIGoalStopShort = .bss:0x80456A64; // type:label size:0xC scope:global -_AIGoalRam = .bss:0x80456A70; // type:label size:0xC scope:global -_AIGoalPit = .bss:0x80456A7C; // type:label size:0xC scope:global -_AIGoalPullOver = .bss:0x80456A88; // type:label size:0xC scope:global -_AIGoalHeadOnRam = .bss:0x80456A94; // type:label size:0xC scope:global -_AIGoalStaticRoadBlock = .bss:0x80456AA0; // type:label size:0xC scope:global -_AIGoalFleePursuit = .bss:0x80456AAC; // type:label size:0xC scope:global -_AIGoalHeliPursuit = .bss:0x80456AB8; // type:label size:0xC scope:global -_AIGoalHeliExit = .bss:0x80456AC4; // type:label size:0xC scope:global -_AIGoalRacer = .bss:0x80456AD0; // type:label size:0xC scope:global -kPullOverGoal = .bss:0x80456ADC; // type:label size:0x4 scope:local -heliHash1 = .bss:0x80456AE0; // type:label size:0x4 scope:local -RoadblockCandidateList = .bss:0x80456AE4; // type:label size:0x680 scope:global -SPIKES_RoadblockCandidateList = .bss:0x80457164; // type:label size:0x410 scope:global -_Gps = .bss:0x80457574; // type:label size:0xC scope:global -Tweak_ForceGPSArrowTo = .bss:0x80457580; // type:label size:0x8 scope:local -kFloatScaleUp = .bss:0x80457588; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x8045758C; // type:label size:0x4 scope:local -g_loadedAnimBankList = .bss:0x80457590; // type:label size:0x8 scope:global -_NISListenerActivity = .bss:0x80457598; // type:label size:0xC scope:global -TheAnimChooser = .bss:0x804575A4; // type:label size:0x4 scope:global -WAM_START_TRIGGER = .bss:0x804575A8; // type:label size:0x4 scope:local -WAM_STOP_TRIGGER = .bss:0x804575AC; // type:label size:0x4 scope:local -WAM_FIRST_FRAME = .bss:0x804575B0; // type:label size:0x4 scope:local -WAM_LAST_FRAME = .bss:0x804575B4; // type:label size:0x4 scope:local -WAM_SOUND_TRIGGER_START = .bss:0x804575B8; // type:label size:0x4 scope:local -WAM_SOUND_TRIGGER_STOP = .bss:0x804575BC; // type:label size:0x4 scope:local -WAM_NIS_GENERIC_CONTROL_MSG = .bss:0x804575C0; // type:label size:0x4 scope:local -WAM_FWD_REV_TRACK_CONTROL_MSG = .bss:0x804575C4; // type:label size:0x4 scope:local -temp_loaded_world_anim_entity_chunks = .bss:0x804575C8; // type:label size:0x8 scope:global -gNISSceneOrigin = .bss:0x804575D0; // type:label size:0x10 scope:global -gPlayAnimStream = .bss:0x804575E0; // type:label size:0x4 scope:global -TheAnimPlayer = .bss:0x804575E4; // type:label size:0x10 scope:global -gAnimLoader_ResourceFileList = .bss:0x804575F4; // type:label size:0x8 scope:global -gAnimLoader_Info = .bss:0x804575FC; // type:label size:0x8 scope:global -skel_ROOT_hash = .bss:0x80457604; // type:label size:0x4 scope:global -g_loadedAnimSceneDataList = .bss:0x80457608; // type:label size:0x8 scope:global -gCarAnimationStates = .bss:0x80457610; // type:label size:0x100 scope:global -g_loadedSkeletonList = .bss:0x80457710; // type:label size:0x8 scope:global -TheWorldAnimInstanceDirectory = .bss:0x80457718; // type:label size:0x50 scope:global -kFloatScaleUp = .bss:0x80457778; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x8045777C; // type:label size:0x4 scope:local -_6Attrib.gDatabaseType = .bss:0x80457780; // type:label size:0x4 scope:local -_6Attrib.gClassType = .bss:0x80457784; // type:label size:0x4 scope:local -_6Attrib.gCollectionType = .bss:0x80457788; // type:label size:0x4 scope:local -_Q26Attrib12StringKeyPtr.gDefault = .bss:0x80457790; // type:label size:0x10 scope:global -text.4279 = .bss:0x804577A0; // type:label size:0x100 scope:local -kFloatScaleUp = .bss:0x804578A0; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x804578A4; // type:label size:0x4 scope:local -bFunkServerList = .bss:0x804578A8; // type:label size:0x8 scope:global -bChunkLoaderNull = .bss:0x804578B0; // type:label size:0x10 scope:global -bIdentityQuaternion = .bss:0x804578C0; // type:label size:0x10 scope:global -TheSlotPoolManager = .bss:0x804578D0; // type:label size:0xC scope:global -bUnitVector3 = .bss:0x804578DC; // type:label size:0x10 scope:global -bUnitVector4 = .bss:0x804578EC; // type:label size:0x10 scope:global -bVector3FLT_MAX = .bss:0x804578FC; // type:label size:0x10 scope:global -TheMemoryAllocator = .bss:0x8045790C; // type:label size:0xC scope:global -gMemoryAllocator = .bss:0x80457918; // type:label size:0x4 scope:global -TheMemoryPersistentAllocator = .bss:0x8045791C; // type:label size:0xC scope:global -gMemoryPersistentAllocator = .bss:0x80457928; // type:label size:0x4 scope:global -gSharedStringPool = .bss:0x8045792C; // type:label size:0x2840 scope:global -bPutCharBuffer = .bss:0x8045A16C; // type:label size:0xA0 scope:local -bBufferedTerminalChannel = .bss:0x8045A20C; // type:label size:0x1 scope:local -MemoryPoolMem = .bss:0x8045A20D; // type:label size:0x600 scope:global -MemoryPools = .bss:0x8045A810; // type:label size:0x40 scope:global -MemoryPoolInfoTable = .bss:0x8045A850; // type:label size:0x100 scope:global -eARAMMM = .bss:0x8045A950; // type:label size:0x18 scope:global -ret.17933 = .bss:0x8045A974; // type:label size:0x10 scope:local -_.tmp_2.17934 = .bss:0x8045A984; // type:label size:0x4 scope:local -prev_position.17968 = .bss:0x8045A988; // type:label size:0x10 scope:local -_.tmp_3.17969 = .bss:0x8045A998; // type:label size:0x4 scope:local -k.27577 = .bss:0x8045AA14; // type:label size:0x4 scope:local -_.tmp_19.27578 = .bss:0x8045AA18; // type:label size:0x4 scope:local -k.27633 = .bss:0x8045AA1C; // type:label size:0x4 scope:local -_.tmp_20.27634 = .bss:0x8045AA20; // type:label size:0x4 scope:local -k.27659 = .bss:0x8045AA24; // type:label size:0x4 scope:local -_.tmp_21.27660 = .bss:0x8045AA28; // type:label size:0x4 scope:local -k.29502 = .bss:0x8045AA2C; // type:label size:0x4 scope:local -_.tmp_22.29503 = .bss:0x8045AA30; // type:label size:0x4 scope:local -name.29723 = .bss:0x8045AA38; // type:label size:0x10 scope:local -_.tmp_23.29724 = .bss:0x8045AA48; // type:label size:0x4 scope:local -name.29825 = .bss:0x8045AA50; // type:label size:0x10 scope:local -_.tmp_24.29826 = .bss:0x8045AA60; // type:label size:0x4 scope:local -name.29881 = .bss:0x8045AA68; // type:label size:0x10 scope:local -_.tmp_25.29882 = .bss:0x8045AA78; // type:label size:0x4 scope:local -name.29937 = .bss:0x8045AA80; // type:label size:0x10 scope:local -_.tmp_26.29938 = .bss:0x8045AA90; // type:label size:0x4 scope:local -name.29993 = .bss:0x8045AA98; // type:label size:0x10 scope:local -_.tmp_27.29994 = .bss:0x8045AAA8; // type:label size:0x4 scope:local -name.30094 = .bss:0x8045AAB0; // type:label size:0x10 scope:local -_.tmp_28.30095 = .bss:0x8045AAC0; // type:label size:0x4 scope:local -name.30147 = .bss:0x8045AAC8; // type:label size:0x10 scope:local -_.tmp_29.30148 = .bss:0x8045AAD8; // type:label size:0x4 scope:local -kFloatScaleUp = .bss:0x8045AADC; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x8045AAE0; // type:label size:0x4 scope:local -_6Camera.JollyRancherResponse = .bss:0x8045AAE4; // type:label size:0x50 scope:global -aBaselineFovNoise = .bss:0x8045AB34; // type:label size:0x2 scope:local -CameraNoiseHandheldFrequency = .bss:0x8045AB38; // type:label size:0x10 scope:local -CameraNoiseHandheldAmplitude = .bss:0x8045AB48; // type:label size:0x10 scope:local -CameraNoiseChopperFrequency = .bss:0x8045AB58; // type:label size:0x10 scope:local -CameraNoiseChopperAmplitude = .bss:0x8045AB68; // type:label size:0x10 scope:local -CameraNoiseSpeedFrequency = .bss:0x8045AB78; // type:label size:0x10 scope:local -CameraNoiseSpeedAmplitude = .bss:0x8045AB88; // type:label size:0x10 scope:local -CameraNoiseTerrainFrequency = .bss:0x8045AB98; // type:label size:0x10 scope:local -CameraNoiseTerrainAmplitude = .bss:0x8045ABA8; // type:label size:0x10 scope:local -CameraNoiseSpeedData = .bss:0x8045ABB8; // type:label size:0x50 scope:global -_Physics_System_CameraAI = .bss:0x8045AC08; // type:label size:0x14 scope:global -_Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable = .bss:0x8045AC1C; // type:label size:0x18 scope:global -_CDActionDrive = .bss:0x8045AC34; // type:label size:0xC scope:global -_CDActionTrackCar = .bss:0x8045AC40; // type:label size:0xC scope:global -_CDActionTrackCop = .bss:0x8045AC4C; // type:label size:0xC scope:global -_CDActionShowcase = .bss:0x8045AC58; // type:label size:0xC scope:global -_CDActionDebug = .bss:0x8045AC64; // type:label size:0xC scope:global -_CDActionIce = .bss:0x8045AC70; // type:label size:0xC scope:global -_Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable = .bss:0x8045AC7C; // type:label size:0x18 scope:global -_CDActionDebugWatchCar = .bss:0x8045AC94; // type:label size:0xC scope:global -aDriftData = .bss:0x8045ACA0; // type:label size:0x10 scope:global -gDriftSpeed = .bss:0x8045ACB0; // type:label size:0x8 scope:global -aCubicPovTables = .bss:0x8045ACB8; // type:label size:0x8C scope:global -CameraSpeedHugData = .bss:0x8045AD44; // type:label size:0x28 scope:global -vCubicBirdsEyeOffset = .bss:0x8045AD6C; // type:label size:0x20 scope:local -SmokeShowEyeOffset = .bss:0x8045AD8C; // type:label size:0x10 scope:local -SmokeShowLookAngle = .bss:0x8045AD9C; // type:label size:0x2 scope:local -HydraulicsEyeOffset = .bss:0x8045ADA0; // type:label size:0x10 scope:local -HydraulicsLookAngle = .bss:0x8045ADB0; // type:label size:0x2 scope:local -NOSFovWidening = .bss:0x8045ADB2; // type:label size:0x2 scope:local -Demo1EyeOffset = .bss:0x8045ADB4; // type:label size:0x10 scope:local -Demo1LookOffset = .bss:0x8045ADC4; // type:label size:0x10 scope:local -Demo2EyeOffset = .bss:0x8045ADD4; // type:label size:0x10 scope:local -Demo2LookOffset = .bss:0x8045ADE4; // type:label size:0x10 scope:local -PreviousEye = .bss:0x8045ADF4; // type:label size:0x10 scope:local -vCopViewPivot = .bss:0x8045AE04; // type:label size:0x10 scope:local -vCopViewDistanceFovBand = .bss:0x8045AE14; // type:label size:0x20 scope:global -tCopViewDistanceFovBand = .bss:0x8045AE34; // type:label size:0x14 scope:global -vCopViewPoints = .bss:0x8045AE48; // type:label size:0x50 scope:global -vCopViewDistanceFov = .bss:0x8045AE98; // type:label size:0x10 scope:global -tCopViewPosition = .bss:0x8045AEA8; // type:label size:0x14 scope:global -tCopViewDistanceFov = .bss:0x8045AEBC; // type:label size:0x14 scope:global -gDebugCameraTweakableEye = .bss:0x8045AED0; // type:label size:0x10 scope:global -gDebugCameraTweakableLook = .bss:0x8045AEE0; // type:label size:0x10 scope:global -_21DebugWorldCameraMover.Eye = .bss:0x8045AEF0; // type:label size:0x10 scope:global -_21DebugWorldCameraMover.Look = .bss:0x8045AF00; // type:label size:0x10 scope:global -_21DebugWorldCameraMover.Up = .bss:0x8045AF10; // type:label size:0x10 scope:global -JumpToPosition = .bss:0x8045AF20; // type:label size:0x10 scope:global -spline_points = .bss:0x8045AF30; // type:label size:0x20 scope:global -gDebugCameraInputGraph = .bss:0x8045AF50; // type:label size:0x8 scope:global -RVMOffsetInCar = .bss:0x8045AF58; // type:label size:0x10 scope:local -gPhoto_CarPosBias = .bss:0x8045AF68; // type:label size:0x10 scope:local -StillEyeTweak = .bss:0x8045AF78; // type:label size:0x10 scope:local -StillLookTweak = .bss:0x8045AF88; // type:label size:0x10 scope:local -StillUpTweak = .bss:0x8045AF98; // type:label size:0x10 scope:local -vIceAccelLagMin = .bss:0x8045AFA8; // type:label size:0x10 scope:local -vIceAccelLagMax = .bss:0x8045AFB8; // type:label size:0x10 scope:local -vIceAccelLagScale = .bss:0x8045AFC8; // type:label size:0x10 scope:local -TheICEManager = .bss:0x8045AFD8; // type:label size:0x80 scope:global -_3ICE.ReplayCategoryTable = .bss:0x8045B058; // type:label size:0x90 scope:global -_9ICEReplay.nRecentlyUsedIndex = .bss:0x8045B0E8; // type:label size:0x4 scope:global -_9ICEReplay.RecentlyUsedTracks = .bss:0x8045B0EC; // type:label size:0xC scope:global -kFloatScaleUp = .bss:0x8045B0F8; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x8045B0FC; // type:label size:0x4 scope:local -kFloatScaleUp = .bss:0x8045B100; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x8045B104; // type:label size:0x4 scope:local -_Q28Dynamics12Articulation.Joints = .bss:0x8045B108; // type:label size:0x8 scope:local -kFloatScaleUp = .bss:0x8045B110; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x8045B114; // type:label size:0x4 scope:local -_Q29EAGL4Anim19AttributeDictionary.mReservedAttributeMetaData = .bss:0x8045B118; // type:label size:0x18 scope:global -_Q25EAGL413DynamicLoader.gSymbolPool = .bss:0x8045B130; // type:label size:0x14 scope:global -_Q25EAGL413DynamicLoader.gConsPool = .bss:0x8045B144; // type:label size:0x28 scope:global -_Q25EAGL413DynamicLoader.gRuntimeAllocConsPool = .bss:0x8045B16C; // type:label size:0x28 scope:global -_Q29EAGL4Anim19ScratchBufferHelper.mScratchBuffers = .bss:0x8045B194; // type:label size:0x24 scope:global -_9EAGL4Anim.qt0 = .bss:0x8045B1C0; // type:label size:0x1C scope:global -k.30900 = .bss:0x8045B268; // type:label size:0x4 scope:local -_.tmp_17.30901 = .bss:0x8045B26C; // type:label size:0x4 scope:local -hash.31037 = .bss:0x8045B288; // type:label size:0x4 scope:local -_.tmp_21.31038 = .bss:0x8045B28C; // type:label size:0x4 scope:local -hash.31045 = .bss:0x8045B290; // type:label size:0x4 scope:local -_.tmp_22.31046 = .bss:0x8045B294; // type:label size:0x4 scope:local -hash.31153 = .bss:0x8045B2A8; // type:label size:0x4 scope:local -_.tmp_25.31154 = .bss:0x8045B2AC; // type:label size:0x4 scope:local -hash.31161 = .bss:0x8045B2B0; // type:label size:0x4 scope:local -_.tmp_26.31162 = .bss:0x8045B2B4; // type:label size:0x4 scope:local -k.34411 = .bss:0x8045B2C8; // type:label size:0x4 scope:local -_.tmp_29.34412 = .bss:0x8045B2CC; // type:label size:0x4 scope:local -prevbrakestate.35478 = .bss:0x8045B2D0; // type:label size:0x4 scope:local -_.tmp_30.35479 = .bss:0x8045B2D4; // type:label size:0x4 scope:local -k.35630 = .bss:0x8045B2D8; // type:label size:0x4 scope:local -_.tmp_31.35631 = .bss:0x8045B2DC; // type:label size:0x4 scope:local -k.35662 = .bss:0x8045B2E0; // type:label size:0x4 scope:local -_.tmp_32.35663 = .bss:0x8045B2E4; // type:label size:0x4 scope:local -k.36612 = .bss:0x8045B2E8; // type:label size:0x4 scope:local -_.tmp_33.36613 = .bss:0x8045B2EC; // type:label size:0x4 scope:local -kFloatScaleUp = .bss:0x8045B2F0; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x8045B2F4; // type:label size:0x4 scope:local -gAudioMemoryManager = .bss:0x8045B2F8; // type:label size:0x14 scope:global -crcEngineAudio = .bss:0x8045B310; // type:label size:0x10 scope:global -crcAudioSystem = .bss:0x8045B320; // type:label size:0x10 scope:global -crcMostWanted = .bss:0x8045B330; // type:label size:0x10 scope:global -crcDrivetrain = .bss:0x8045B340; // type:label size:0x10 scope:global -crcSkidParams = .bss:0x8045B350; // type:label size:0x10 scope:global -crcTurboSFX = .bss:0x8045B360; // type:label size:0x10 scope:global -crcAccelTrans = .bss:0x8045B370; // type:label size:0x10 scope:global -crcShiftPattern = .bss:0x8045B380; // type:label size:0x10 scope:global -crcSweetener = .bss:0x8045B390; // type:label size:0x10 scope:global -crcEnglish = .bss:0x8045B3A0; // type:label size:0x10 scope:global -crcCarHitWall = .bss:0x8045B3B0; // type:label size:0x10 scope:global -crcLicensedMusic = .bss:0x8045B3C0; // type:label size:0x10 scope:global -crcMusic = .bss:0x8045B3D0; // type:label size:0x10 scope:global -gAEMSMgr = .bss:0x8045B3E0; // type:label size:0x130 scope:global -g_SndAssetList = .bss:0x8045B510; // type:label size:0x1380 scope:global -TablePitch = .bss:0x8045C890; // type:label size:0x1C scope:global -BreakingPitchVsSpeed = .bss:0x8045C8AC; // type:label size:0x1C scope:global -__audioscrape = .bss:0x8045C8C8; // type:label size:0xC scope:global -__audioimpact = .bss:0x8045C8D4; // type:label size:0xC scope:global -g_CSISCoreAllocator = .bss:0x8045C8E0; // type:label size:0x4 scope:global -_15cSTICH_PlayBack.mQueuedSampleList = .bss:0x8045C8E4; // type:label size:0x438 scope:global -_Q33UTL11Collectionst11ListableSet4Z14cSampleWarpperi25Z10STICH_TYPEUi3._mLists = .bss:0x8045CD1C; // type:label size:0x15C scope:global -_Q33UTL11Collectionst8Listable2Z12EAX_CarStatei10._mTable = .bss:0x8045CE78; // type:label size:0x38 scope:global -_Q33UTL11Collectionst8Listable2Z13EAX_HeliStatei10._mTable = .bss:0x8045CEB0; // type:label size:0x38 scope:global -_CarSoundConn = .bss:0x8045CEE8; // type:label size:0xC scope:global -_Q33UTL11Collectionst8Listable2Z12CarSoundConni10._mTable = .bss:0x8045CEF4; // type:label size:0x38 scope:global -_HeliSoundConn = .bss:0x8045CF2C; // type:label size:0xC scope:global -_Q33UTL11Collectionst8Listable2Z13HeliSoundConni10._mTable = .bss:0x8045CF38; // type:label size:0x38 scope:global -Songs = .bss:0x8045CF70; // type:label size:0x10 scope:global -g_WheelLoadSlope = .bss:0x8045CF80; // type:label size:0x1C scope:global -RedLineDelayPerGear = .bss:0x8045CF9C; // type:label size:0x1C scope:global -RevPat5 = .bss:0x8045CFB8; // type:label size:0x150 scope:global -RevPat6 = .bss:0x8045D108; // type:label size:0x114 scope:global -RevPat7 = .bss:0x8045D21C; // type:label size:0xF0 scope:global -RevPat8 = .bss:0x8045D30C; // type:label size:0x330 scope:global -RevPat9 = .bss:0x8045D63C; // type:label size:0x2AC scope:global -RevPat10 = .bss:0x8045D8E8; // type:label size:0x1A4 scope:global -RevPat11 = .bss:0x8045DA8C; // type:label size:0x174 scope:global -RevPat12 = .bss:0x8045DC00; // type:label size:0x168 scope:global -_15SFXCTL_3DObjPos.m_v2ObjPosCopy = .bss:0x8045DD68; // type:label size:0x8 scope:global -gPF_MemoryAllocator = .bss:0x8045DD70; // type:label size:0x8 scope:global -GameFlowSndState = .bss:0x8045DD78; // type:label size:0x3C scope:global -pCsisSlotPools = .bss:0x8045DDB4; // type:label size:0x4 scope:global -nCsisSlotPoolSizes = .bss:0x8045DDB8; // type:label size:0x4 scope:global -gbAudioInterruptsWorldDataRead = .bss:0x8045DDBC; // type:label size:0x4 scope:global -gbWorldDataBlocksAudioRead = .bss:0x8045DDC0; // type:label size:0x4 scope:global -bReadCallbackToggle = .bss:0x8045DDC4; // type:label size:0x4 scope:global -csCSISdebug = .bss:0x8045DDCC; // type:label size:0x20 scope:global -requestidcounter = .bss:0x8045DDEC; // type:label size:0x4 scope:local -g_pSFXCTL_Pathfinder = .bss:0x8045DDF0; // type:label size:0x4 scope:global -k.15950 = .bss:0x8045DE60; // type:label size:0x4 scope:local -_.tmp_13.15951 = .bss:0x8045DE64; // type:label size:0x4 scope:local -tmp_refCnt.31253 = .bss:0x8045DED8; // type:label size:0x4 scope:local -_.tmp_28.31254 = .bss:0x8045DEDC; // type:label size:0x4 scope:local -kFloatScaleUp = .bss:0x8045DEF8; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x8045DEFC; // type:label size:0x4 scope:local -_9SndCamera.m_CurCamPos = .bss:0x8045DF00; // type:label size:0x20 scope:global -_9SndCamera.m_CurCamDir = .bss:0x8045DF20; // type:label size:0x20 scope:global -_9SndCamera.m_CurCamTarget = .bss:0x8045DF40; // type:label size:0x20 scope:global -_9SndCamera.m_NormCamDir = .bss:0x8045DF60; // type:label size:0x10 scope:global -_9SndCamera.m_WorldCamPos = .bss:0x8045DF70; // type:label size:0x10 scope:global -_9SndCamera.m_WorldCarPos = .bss:0x8045DF80; // type:label size:0x10 scope:global -_9SndCamera.m_AvergeCamDir = .bss:0x8045DF90; // type:label size:0x10 scope:global -_9SndCamera.m_AveragedCamPos = .bss:0x8045DFA0; // type:label size:0x10 scope:global -_9SndCamera.m_CenteredCamPos = .bss:0x8045DFB0; // type:label size:0x10 scope:global -_9SndCamera.m_CenteredCarPos = .bss:0x8045DFC0; // type:label size:0x10 scope:global -_9SndCamera.m_AverageCarPos = .bss:0x8045DFD0; // type:label size:0x10 scope:global -_9SndCamera.m_NormCarDir = .bss:0x8045DFE0; // type:label size:0x10 scope:global -_9SndCamera.m_v3WorldCarVel = .bss:0x8045DFF0; // type:label size:0x20 scope:global -_9SndCamera.m_v3WorldCamVel = .bss:0x8045E010; // type:label size:0x20 scope:global -_9SndCamera.m_v3WorldCarPos = .bss:0x8045E030; // type:label size:0x20 scope:global -_9SndCamera.m_v3WorldCarDir = .bss:0x8045E050; // type:label size:0x20 scope:global -_9SndCamera.m_CamAction = .bss:0x8045E070; // type:label size:0x20 scope:global -_9SndCamera.m_NewCamAction = .bss:0x8045E090; // type:label size:0x20 scope:global -_14CSTATEMGR_Base.m_SFXCTRLClassList = .bss:0x8045E0B0; // type:label size:0x8 scope:global -_14CSTATEMGR_Base.m_SFXClassList = .bss:0x8045E0B8; // type:label size:0x8 scope:global -_14CSTATEMGR_Base.m_STATEClassList = .bss:0x8045E0C0; // type:label size:0x8 scope:global -_Q33UTL11Collectionst8Listable2Z14ISndAttachablei15._mTable = .bss:0x8045E0C8; // type:label size:0x4C scope:global -_18CSTATEMGR_CarState.FinalMapping = .bss:0x8045E114; // type:label size:0xD0 scope:global -_18CSTATEMGR_CarState.FinalEngines = .bss:0x8045E1E4; // type:label size:0x30 scope:global -_18CSTATEMGR_CarState.FinalCopV8Engines = .bss:0x8045E214; // type:label size:0x30 scope:global -_18CSTATEMGR_CarState.EngineToCarMapping = .bss:0x8045E244; // type:label size:0xD0 scope:global -ShiftingAttackVolSlope = .bss:0x8045E314; // type:label size:0x1C scope:global -RoadNoiseTransitionVolSlope = .bss:0x8045E330; // type:label size:0x1C scope:global -RoadNoiseTransitionPitchSlope = .bss:0x8045E34C; // type:label size:0x1C scope:global -RoadNoiseVolumeCurve = .bss:0x8045E368; // type:label size:0x28 scope:global -RoadNoiseVolGraph = .bss:0x8045E390; // type:label size:0x8 scope:global -RoadNoiseSpeedToPitch = .bss:0x8045E398; // type:label size:0x1C scope:global -WeatherWindVolSlope = .bss:0x8045E3B4; // type:label size:0x1C scope:global -g_CLASS1 = .bss:0x8045E3D0; // type:label size:0x130 scope:global -g_WooshVol_vs_Vel = .bss:0x8045E500; // type:label size:0x1C scope:global -SPAMAccessorSpeech = .bss:0x8045E51C; // type:label size:0x1C scope:global -v3NULL = .bss:0x8045E538; // type:label size:0x10 scope:global -JumpLandingIntensity = .bss:0x8045E548; // type:label size:0x1C scope:global -ReverbAccessor = .bss:0x8045E564; // type:label size:0x1C scope:global -_13SFXObj_Reverb.m_EchoAllocs = .bss:0x8045E580; // type:label size:0x20 scope:global -AmbientAccessor = .bss:0x8045E5A0; // type:label size:0x1C scope:global -_15SFXObj_PFEATrax.m_EATrax = .bss:0x8045E5BC; // type:label size:0x30 scope:global -g_MomentMappings = .bss:0x8045E5EC; // type:label size:0x78 scope:global -g_DOPPLER_PARAMS = .bss:0x8045E664; // type:label size:0x18 scope:global -g_REVERBFXMODULES = .bss:0x8045E67C; // type:label size:0x120 scope:global -_4Csis.gSIRENHandle = .bss:0x8045E79C; // type:label size:0x8 scope:global -_4Csis.gSIREN_BEDHandle = .bss:0x8045E7A4; // type:label size:0x8 scope:global -_4Csis.gSputter_MessageHandle = .bss:0x8045E7AC; // type:label size:0x8 scope:global -_4Csis.gCARHandle = .bss:0x8045E7B4; // type:label size:0x8 scope:global -_4Csis.gCAR_SWTNHandle = .bss:0x8045E7BC; // type:label size:0x8 scope:global -_4Csis.gCAR_WHINEHandle = .bss:0x8045E7C4; // type:label size:0x8 scope:global -_4Csis.gCAR_TRANNYHandle = .bss:0x8045E7CC; // type:label size:0x8 scope:global -_4Csis.gCAR_SputterHandle = .bss:0x8045E7D4; // type:label size:0x8 scope:global -_4Csis.gCAR_SputOutputHandle = .bss:0x8045E7DC; // type:label size:0x8 scope:global -_4Csis.gFX_ROADNOISEHandle = .bss:0x8045E7E4; // type:label size:0x8 scope:global -_4Csis.gFX_ROADNOISE_TRANSHandle = .bss:0x8045E7EC; // type:label size:0x8 scope:global -_4Csis.gENV_STATICHandle = .bss:0x8045E7F4; // type:label size:0x8 scope:global -_4Csis.gFX_MAIN_MEMHandle = .bss:0x8045E7FC; // type:label size:0x8 scope:global -_4Csis.gFX_WINDHandle = .bss:0x8045E804; // type:label size:0x8 scope:global -_4Csis.gFX_WIND_WeatherHandle = .bss:0x8045E80C; // type:label size:0x8 scope:global -_4Csis.gFX_TRAFFICHandle = .bss:0x8045E814; // type:label size:0x8 scope:global -_4Csis.gFX_TRUCK_FXHandle = .bss:0x8045E81C; // type:label size:0x8 scope:global -_4Csis.gPlayCommonSampleHandle = .bss:0x8045E824; // type:label size:0x8 scope:global -_4Csis.gPlayFrontEndSampleHandle = .bss:0x8045E82C; // type:label size:0x8 scope:global -_4Csis.gPlayFrontEndSample_RSHandle = .bss:0x8045E834; // type:label size:0x8 scope:global -_4Csis.gFEDriveOnHandle = .bss:0x8045E83C; // type:label size:0x8 scope:global -_4Csis.gFX_NITROUSHandle = .bss:0x8045E844; // type:label size:0x8 scope:global -_4Csis.gFX_PURGEHandle = .bss:0x8045E84C; // type:label size:0x8 scope:global -_4Csis.gFX_SHIFTING_01Handle = .bss:0x8045E854; // type:label size:0x8 scope:global -_4Csis.gFX_SPARKCHATTERHandle = .bss:0x8045E85C; // type:label size:0x8 scope:global -_4Csis.gFX_SKIDHandle = .bss:0x8045E864; // type:label size:0x8 scope:global -_4Csis.gFX_HydraulicHandle = .bss:0x8045E86C; // type:label size:0x8 scope:global -_4Csis.gFX_HelicopterHandle = .bss:0x8045E874; // type:label size:0x8 scope:global -_4Csis.gFX_Hydr_BounceHandle = .bss:0x8045E87C; // type:label size:0x8 scope:global -_4Csis.gFX_WeatherHandle = .bss:0x8045E884; // type:label size:0x8 scope:global -_4Csis.gFX_CameraHandle = .bss:0x8045E88C; // type:label size:0x8 scope:global -_4Csis.gFX_UVESHandle = .bss:0x8045E894; // type:label size:0x8 scope:global -_4Csis.gFX_RadarHandle = .bss:0x8045E89C; // type:label size:0x8 scope:global -_4Csis.gFX_ScrapeHandle = .bss:0x8045E8A4; // type:label size:0x8 scope:global -_4Csis.gAEMS_StichCollisionHandle = .bss:0x8045E8AC; // type:label size:0x8 scope:global -_4Csis.gAEMS_StichWooshHandle = .bss:0x8045E8B4; // type:label size:0x8 scope:global -_4Csis.gAEMS_StichStaticHandle = .bss:0x8045E8BC; // type:label size:0x8 scope:global -_4Csis.gFX_TURBO_01Handle = .bss:0x8045E8C4; // type:label size:0x8 scope:global -_4Csis.gNIS_Select_StartHandle = .bss:0x8045E8CC; // type:label size:0x8 scope:global -_4Csis.gSoundFX_SelectHandle = .bss:0x8045E8D4; // type:label size:0x8 scope:global -_4Csis.gNIS_Select_BlacklistHandle = .bss:0x8045E8DC; // type:label size:0x8 scope:global -_4Csis.gNIS_Select_EndHandle = .bss:0x8045E8E4; // type:label size:0x8 scope:global -uNIS_STRINGHASHMAP = .bss:0x8045E8EC; // type:label size:0x330 scope:global -mhL2V.32020 = .bss:0x8045ECB0; // type:label size:0x30 scope:local -prevVtxFmt.32111 = .bss:0x8045ECE0; // type:label size:0x4 scope:local -prevopt.32112 = .bss:0x8045ECE4; // type:label size:0x4 scope:local -prevVertexFormat.32116 = .bss:0x8045ECE8; // type:label size:0x4 scope:local -prevVertexDescription.32117 = .bss:0x8045ECEC; // type:label size:0x4 scope:local -kFloatScaleUp = .bss:0x8045ECF0; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x8045ECF4; // type:label size:0x4 scope:local -UnattachedModelList = .bss:0x8045ECF8; // type:label size:0x8 scope:global -MovedModelList = .bss:0x8045ED00; // type:label size:0x8 scope:global -SolidListHeaderList = .bss:0x8045ED08; // type:label size:0x8 scope:global -InvalidSolidList = .bss:0x8045ED10; // type:label size:0x8 scope:global -SolidList = .bss:0x8045ED18; // type:label size:0x8 scope:global -SolidLoadedTable = .bss:0x8045ED20; // type:label size:0x2004 scope:global -bChunkLoaderSolidList = .bss:0x80460D24; // type:label size:0x10 scope:global -StreamingSolidPackLoader = .bss:0x80460D34; // type:label size:0x38 scope:global -RunTimeLightFlarePackHeader = .bss:0x80460D6C; // type:label size:0x60 scope:global -LightFlarePackList = .bss:0x80460DCC; // type:label size:0x8 scope:global -LightPackList = .bss:0x80460DD4; // type:label size:0x8 scope:global -LightMaterialList = .bss:0x80460DDC; // type:label size:0x8 scope:global -DefaultLightMaterialData = .bss:0x80460DE4; // type:label size:0xA8 scope:global -LightPositionVFE0 = .bss:0x80460E8C; // type:label size:0x10 scope:global -LightPositionVFE1 = .bss:0x80460E9C; // type:label size:0x10 scope:global -LightPositionVFE2 = .bss:0x80460EAC; // type:label size:0x10 scope:global -LightPositionFE0 = .bss:0x80460EBC; // type:label size:0x10 scope:global -LightPositionFE1 = .bss:0x80460ECC; // type:label size:0x10 scope:global -LightPositionFE2 = .bss:0x80460EDC; // type:label size:0x10 scope:global -LightColourFE0 = .bss:0x80460EEC; // type:label size:0x10 scope:global -LightColourFE1 = .bss:0x80460EFC; // type:label size:0x10 scope:global -LightColourFE2 = .bss:0x80460F0C; // type:label size:0x10 scope:global -AmbientColourFE = .bss:0x80460F1C; // type:label size:0x10 scope:global -AmbientColourIG = .bss:0x80460F2C; // type:label size:0x10 scope:global -LightDirection0 = .bss:0x80460F3C; // type:label size:0x10 scope:global -LightColour0 = .bss:0x80460F4C; // type:label size:0x10 scope:global -bChunkLoaderLightMaterial = .bss:0x80460F5C; // type:label size:0x10 scope:global -bChunkLoaderLightFlares = .bss:0x80460F6C; // type:label size:0x10 scope:global -bChunkLoaderLights = .bss:0x80460F7C; // type:label size:0x10 scope:global -DynamicLightPackList = .bss:0x80460F8C; // type:label size:0x8 scope:global -ShaperLightsGCSpecial = .bss:0x80460F94; // type:label size:0x88 scope:global -ShaperLightsDefault = .bss:0x8046101C; // type:label size:0x88 scope:global -ShaperLightsBackRoom = .bss:0x804610A4; // type:label size:0x88 scope:global -ShaperLightsCarLot = .bss:0x8046112C; // type:label size:0x88 scope:global -ShaperLightsCShop = .bss:0x804611B4; // type:label size:0x88 scope:global -ShaperLightsQRace = .bss:0x8046123C; // type:label size:0x88 scope:global -ShaperLightsSafehouse = .bss:0x804612C4; // type:label size:0x88 scope:global -ShaperLightsCarsInGame = .bss:0x8046134C; // type:label size:0x88 scope:global -ShaperLightsCharacters = .bss:0x804613D4; // type:label size:0x88 scope:global -ShaperLightsCharactersBackup = .bss:0x8046145C; // type:label size:0x88 scope:global -ShaperLightsScenery = .bss:0x804614E4; // type:label size:0x88 scope:global -ShaperLightsWorldObjects = .bss:0x8046156C; // type:label size:0x88 scope:global -PoolLightFlareList = .bss:0x804615F4; // type:label size:0x960 scope:global -eViews = .bss:0x80461F5C; // type:label size:0x8F0 scope:global -TexturePackList = .bss:0x8046284C; // type:label size:0x8 scope:global -TextureAnimPackList = .bss:0x80462854; // type:label size:0x8 scope:global -TextureVRAMDataHeaderList = .bss:0x8046285C; // type:label size:0x8 scope:global -TextureLoadedTable = .bss:0x80462864; // type:label size:0x2004 scope:global -bChunkLoaderTexturePackList = .bss:0x80464868; // type:label size:0x10 scope:global -bChunkLoaderVramDataChunks = .bss:0x80464878; // type:label size:0x10 scope:global -bChunkLoaderTextureAnimPack = .bss:0x80464888; // type:label size:0x10 scope:global -StreamingTexturePackLoader = .bss:0x80464898; // type:label size:0x38 scope:global -SunPosition = .bss:0x804648D0; // type:label size:0x10 scope:global -gDefragFixer = .bss:0x804648E0; // type:label size:0x60C scope:global -PalNFS01IntDfScale = .bss:0x80464EEC; // type:label size:0x3C scope:global -g_ParticleStats = .bss:0x80464F28; // type:label size:0x20 scope:local -FlailerCamera = .bss:0x80464F48; // type:label size:0x290 scope:global -Player1Camera = .bss:0x804651D8; // type:label size:0x290 scope:global -Player2Camera = .bss:0x80465468; // type:label size:0x290 scope:global -Player1RVMCamera = .bss:0x804656F8; // type:label size:0x290 scope:global -RenderTargetTextureInfos = .bss:0x80465988; // type:label size:0x83C scope:global -aBaselineFovMip = .bss:0x804661C4; // type:label size:0x2 scope:local -aBaselineFovZ = .bss:0x804661C6; // type:label size:0x2 scope:local -SpecularMap = .bss:0x804661C8; // type:label size:0x4C scope:global -QSizeI8_Z8 = .bss:0x80466214; // type:label size:0x50 scope:global -QSizeScratchPad = .bss:0x80466264; // type:label size:0x50 scope:global -QSizeAccumulationI8 = .bss:0x804662B4; // type:label size:0x50 scope:global -SafezoneHeight_PAL = .bss:0x80466304; // type:label size:0x4 scope:local -g_TextureBucketList = .bss:0x80466308; // type:label size:0x80 scope:global -tP = .bss:0x80466388; // type:label size:0x600 scope:local -tPC = .bss:0x80466988; // type:label size:0x10 scope:local -tN = .bss:0x80466998; // type:label size:0x600 scope:local -MyLightPos = .bss:0x80466FA8; // type:label size:0x30 scope:global -eLamb = .bss:0x80466FD8; // type:label size:0x10 scope:global -eLdir = .bss:0x80466FE8; // type:label size:0x30 scope:global -eLpos = .bss:0x80467018; // type:label size:0x30 scope:global -eLdiff = .bss:0x80467058; // type:label size:0x30 scope:global -hack_man_matrix = .bss:0x80467088; // type:label size:0x40 scope:global -envmap_fakeup = .bss:0x804670C8; // type:label size:0x10 scope:global -TheOnlyEnvMap = .bss:0x804670D8; // type:label size:0xF78 scope:global -SphereMap = .bss:0x80468050; // type:label size:0x140 scope:global -eMathIdentityMatrix = .bss:0x80468190; // type:label size:0x40 scope:global -eMathZeroMatrix = .bss:0x804681D0; // type:label size:0x40 scope:global -e_strip_matrix = .bss:0x80468210; // type:label size:0x40 scope:global -ViewPlatInfoTable = .bss:0x80468250; // type:label size:0x1FF8 scope:global -SpriteManager = .bss:0x8046A248; // type:label size:0x1C scope:global -_13EmitterSystem.mLoader = .bss:0x8046A264; // type:label size:0x10 scope:global -_13EmitterSystem.mLibLoader = .bss:0x8046A274; // type:label size:0x10 scope:global -_13EmitterSystem.mTexPageLoader = .bss:0x8046A284; // type:label size:0x10 scope:global -gEmitterSystem = .bss:0x8046A294; // type:label size:0x3AC scope:global -SunTextures = .bss:0x8046A640; // type:label size:0x14 scope:global -numCopsActiveView = .bss:0x8046A654; // type:label size:0x4 scope:global -numCopsActiveTotal = .bss:0x8046A658; // type:label size:0x4 scope:global -numCopsActiveCherry = .bss:0x8046A65C; // type:label size:0x4 scope:global -FrameMemoryBuffer = .bss:0x8046A660; // type:label size:0x8 scope:global -FrameMemoryBufferAmountUsed = .bss:0x8046A668; // type:label size:0x8 scope:global -OtherEcstacyTextures = .bss:0x8046A670; // type:label size:0x78 scope:global -OtherEcstacyTextures_name_hash = .bss:0x8046A6E8; // type:label size:0x78 scope:global -QueuedLoadingTables = .bss:0x8046A770; // type:label size:0x400 scope:global -ReplacementTextureTableFixups = .bss:0x8046AB70; // type:label size:0x5B0 scope:global -LoadedSolidStats = .bss:0x8046B120; // type:label size:0x14 scope:global -eLightFlareTextureInfos = .bss:0x8046B134; // type:label size:0xC scope:global -PoolOfFlaresXcludeView = .bss:0x8046B140; // type:label size:0xC8 scope:global -intensity = .bss:0x8046B208; // type:label size:0x4 scope:global -TextureInfoCache = .bss:0x8046B20C; // type:label size:0x400 scope:global -TextureInfoCacheSafety = .bss:0x8046B60C; // type:label size:0x400 scope:global -g_ScreenPositionMatrix = .bss:0x8046BA14; // type:label size:0x30 scope:global -Player1SpecularProjection = .bss:0x8046BA44; // type:label size:0x40 scope:global -Player2SpecularProjection = .bss:0x8046BA84; // type:label size:0x40 scope:global -RenderTargets = .bss:0x8046BAC4; // type:label size:0x440 scope:global -_rmode = .bss:0x8046BF04; // type:label size:0x4 scope:global -_rmodeObj = .bss:0x8046BF08; // type:label size:0x3C scope:global -projMOrthographic = .bss:0x8046BF44; // type:label size:0x40 scope:global -viewMOrthographic = .bss:0x8046BF84; // type:label size:0x30 scope:global -projMOrthographicScreenQuad = .bss:0x8046BFB4; // type:label size:0x40 scope:global -viewMOrthographicScreenQuad = .bss:0x8046BFF4; // type:label size:0x30 scope:global -fbSize = .bss:0x8046C024; // type:label size:0x4 scope:local -scis_xOrig = .bss:0x8046C028; // type:label size:0x4 scope:global -scis_yOrig = .bss:0x8046C02C; // type:label size:0x4 scope:global -scis_wd = .bss:0x8046C030; // type:label size:0x4 scope:global -scis_ht = .bss:0x8046C034; // type:label size:0x4 scope:global -g_InitPad = .bss:0x8046C038; // type:label size:0x30 scope:global -g_LastInitPad = .bss:0x8046C068; // type:label size:0x30 scope:global -FontData = .bss:0x8046C098; // type:label size:0x4 scope:local -LastSheet = .bss:0x8046C09C; // type:label size:0x4 scope:local -FontSize = .bss:0x8046C0A0; // type:label size:0x2 scope:local -FontSpace = .bss:0x8046C0A2; // type:label size:0x2 scope:local -HORIZON_FOG_GRID_DISPLAY_LIST = .bss:0x8046C0C0; // type:label size:0x300 scope:global -HORIZON_FOG_GRID_POS_ARRAY = .bss:0x8046C3C0; // type:label size:0x600 scope:global -HORIZON_FOG_GRID_CLR_ARRAY = .bss:0x8046C9C0; // type:label size:0x380 scope:global -HORIZON_FOG_GRID_UVS_ARRAY = .bss:0x8046CD40; // type:label size:0x400 scope:global -DLHorizonFogGrid = .bss:0x8046D140; // type:label size:0x4 scope:global -DLHorizonFogGridSize = .bss:0x8046D144; // type:label size:0x4 scope:global -HorizonCurrentPOS = .bss:0x8046D148; // type:label size:0x1 scope:global -HorizonCurrentCLR = .bss:0x8046D149; // type:label size:0x1 scope:global -HorizonCurrentUVS = .bss:0x8046D14A; // type:label size:0x1 scope:global -ENV_MAP_DISPLAY_LIST = .bss:0x8046D160; // type:label size:0x5000 scope:global -g_FogParams = .bss:0x80472160; // type:label size:0x14 scope:global -pt = .bss:0x80472178; // type:label size:0x8 scope:global -tT = .bss:0x80472180; // type:label size:0x240 scope:local -g_contrast_current_gain = .bss:0x804723C0; // type:label size:0x10 scope:global -pContrastRampTextureInfo = .bss:0x804723D0; // type:label size:0x4 scope:global -pContrastRampPixels = .bss:0x804723D4; // type:label size:0x4 scope:global -pContrastLinearSource = .bss:0x804723D8; // type:label size:0x4 scope:global -eSTRIP = .bss:0x804723DC; // type:label size:0x604 scope:global -k.27406 = .bss:0x804729E0; // type:label size:0x4 scope:local -_.tmp_18.27407 = .bss:0x804729E4; // type:label size:0x4 scope:local -scale.29589 = .bss:0x804729E8; // type:label size:0x4 scope:local -_.tmp_19.29590 = .bss:0x804729EC; // type:label size:0x4 scope:local -k.29612 = .bss:0x804729F0; // type:label size:0x4 scope:local -_.tmp_20.29613 = .bss:0x804729F4; // type:label size:0x4 scope:local -iSystem.35753 = .bss:0x804729F8; // type:label size:0x10 scope:local -_.tmp_24.35754 = .bss:0x80472A08; // type:label size:0x4 scope:local -sMemcardImp.35756 = .bss:0x80472A0C; // type:label size:0xC scope:local -_.tmp_25.35757 = .bss:0x80472A18; // type:label size:0x4 scope:local -kFloatScaleUp = .bss:0x80472A1C; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x80472A20; // type:label size:0x4 scope:local -gNormal = .bss:0x80472A24; // type:label size:0x10 scope:local -gTint = .bss:0x80472A34; // type:label size:0x10 scope:local -gRapsheet = .bss:0x80472A44; // type:label size:0x10 scope:local -MessengerCreationTimer = .bss:0x80472A54; // type:label size:0x4 scope:global -MovieTextureInfo = .bss:0x80472A58; // type:label size:0x7C scope:global -gShapeMemoryAllocator = .bss:0x80472AD4; // type:label size:0x8 scope:global -gMemcardCallbacks = .bss:0x80472ADC; // type:label size:0x8 scope:global -gMemcardSetup = .bss:0x80472AE4; // type:label size:0x34 scope:global -theMarker = .bss:0x80472B18; // type:label size:0x4 scope:global -FEPrintf_Buffer = .bss:0x80472B1C; // type:label size:0x400 scope:local -gSaveType0 = .bss:0x80472F1C; // type:label size:0x40 scope:global -gSaveType1 = .bss:0x80472F5C; // type:label size:0x40 scope:global -gSaveType2 = .bss:0x80472F9C; // type:label size:0x20 scope:global -k.28785 = .bss:0x80472FBC; // type:label size:0x4 scope:local -_.tmp_17.28786 = .bss:0x80472FC0; // type:label size:0x4 scope:local -k.31452 = .bss:0x80472FC4; // type:label size:0x4 scope:local -_.tmp_24.31453 = .bss:0x80472FC8; // type:label size:0x4 scope:local -k.32656 = .bss:0x80472FCC; // type:label size:0x4 scope:local -_.tmp_26.32657 = .bss:0x80472FD0; // type:label size:0x4 scope:local -k.32682 = .bss:0x80472FD4; // type:label size:0x4 scope:local -_.tmp_27.32683 = .bss:0x80472FD8; // type:label size:0x4 scope:local -k.32737 = .bss:0x80472FDC; // type:label size:0x4 scope:local -_.tmp_29.32738 = .bss:0x80472FE0; // type:label size:0x4 scope:local -kFloatScaleUp = .bss:0x80472FE4; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x80472FE8; // type:label size:0x4 scope:local -bChunkLoaderMiniMap = .bss:0x80472FEC; // type:label size:0x10 scope:global -WAM_START_TRIGGER = .bss:0x80472FFC; // type:label size:0x4 scope:local -WAM_STOP_TRIGGER = .bss:0x80473000; // type:label size:0x4 scope:local -WAM_FIRST_FRAME = .bss:0x80473004; // type:label size:0x4 scope:local -WAM_LAST_FRAME = .bss:0x80473008; // type:label size:0x4 scope:local -WAM_SOUND_TRIGGER_START = .bss:0x8047300C; // type:label size:0x4 scope:local -WAM_SOUND_TRIGGER_STOP = .bss:0x80473010; // type:label size:0x4 scope:local -WAM_NIS_GENERIC_CONTROL_MSG = .bss:0x80473014; // type:label size:0x4 scope:local -WAM_FWD_REV_TRACK_CONTROL_MSG = .bss:0x80473018; // type:label size:0x4 scope:local -TheHudResourceManager = .bss:0x8047301C; // type:label size:0xC scope:global -_10FEKeyboard.ButtonHighlight = .bss:0x80473028; // type:label size:0x10 scope:global -_10FEKeyboard.LetterHighlight = .bss:0x80473038; // type:label size:0x10 scope:global -_10FEKeyboard.ButtonIdle = .bss:0x80473048; // type:label size:0x10 scope:global -_10FEKeyboard.LetterIdle = .bss:0x80473058; // type:label size:0x10 scope:global -KBCreationTimer = .bss:0x80473068; // type:label size:0x4 scope:global -_21PostRacePursuitScreen.mPursuitData = .bss:0x8047306C; // type:label size:0xAC scope:global -SecretDialogInfo = .bss:0x80473118; // type:label size:0x248 scope:local -gKeyboardManager = .bss:0x80473360; // type:label size:0x418 scope:global -gFEDatabase = .bss:0x80473778; // type:label size:0x4 scope:global -FEngFonts = .bss:0x8047377C; // type:label size:0x8 scope:global -TheFEMarkerManager = .bss:0x80473784; // type:label size:0x340 scope:global -TheUnlockData = .bss:0x80473AC4; // type:label size:0x1C8 scope:global -gMaxPartLevels = .bss:0x80473C8C; // type:label size:0x39 scope:global -kFloatScaleUp = .bss:0x80473CC8; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x80473CCC; // type:label size:0x4 scope:local -DirectionVectors = .bss:0x80473CD0; // type:label size:0x40 scope:local -PassOffsets = .bss:0x80473D10; // type:label size:0x28 scope:local -_9FEKeyNode.NodePool = .bss:0x80473D38; // type:label size:0x10 scope:global -_17FEMessageResponse.NodePool = .bss:0x80473D48; // type:label size:0x10 scope:global -ObjDataPool = .bss:0x80473D58; // type:label size:0x10 scope:local -MaximumObjData = .bss:0x80473D68; // type:label size:0x94 scope:local -_8FEScript.NodePool = .bss:0x80473DFC; // type:label size:0x10 scope:global -eFrameCounterOLD = .bss:0x80473E0C; // type:label size:0x4 scope:global -objCount = .bss:0x80473E10; // type:label size:0x4 scope:global -kFloatScaleUp = .bss:0x80473E14; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x80473E18; // type:label size:0x4 scope:local -_6UCrc32.kNull = .bss:0x80473E1C; // type:label size:0x4 scope:global -_5UMath.Infinity = .bss:0x80473E20; // type:label size:0x4 scope:global -_10UTransform.fgIdentityTransform = .bss:0x80473E24; // type:label size:0x40 scope:global -_7USphere.fgNullSphere = .bss:0x80473E64; // type:label size:0x10 scope:global -_4CARP.gDataResolverMap = .bss:0x80473E74; // type:label size:0x10 scope:local -gFunctions = .bss:0x80473E84; // type:label size:0x50 scope:local -_19StringStoreBlockPtr.sStringStoreBlockPtrCache = .bss:0x80473ED4; // type:label size:0x10 scope:global -_14StringRegistry.fgThis = .bss:0x80473EE4; // type:label size:0x14 scope:global -kFloatScaleUp = .bss:0x80473EF8; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x80473EFC; // type:label size:0x4 scope:local -k.13265 = .bss:0x80473F00; // type:label size:0x4 scope:local -_.tmp_1.13266 = .bss:0x80473F04; // type:label size:0x4 scope:local -k.13306 = .bss:0x80473F08; // type:label size:0x4 scope:local -_.tmp_2.13307 = .bss:0x80473F0C; // type:label size:0x4 scope:local -k.13344 = .bss:0x80473F10; // type:label size:0x4 scope:local -_.tmp_3.13345 = .bss:0x80473F14; // type:label size:0x4 scope:local -k.26869 = .bss:0x80473F18; // type:label size:0x4 scope:local -_.tmp_19.26870 = .bss:0x80473F1C; // type:label size:0x4 scope:local -k.26895 = .bss:0x80473F20; // type:label size:0x4 scope:local -_.tmp_20.26896 = .bss:0x80473F24; // type:label size:0x4 scope:local -k.27521 = .bss:0x80473F28; // type:label size:0x4 scope:local -_.tmp_21.27522 = .bss:0x80473F2C; // type:label size:0x4 scope:local -k.27565 = .bss:0x80473F30; // type:label size:0x4 scope:local -_.tmp_22.27566 = .bss:0x80473F34; // type:label size:0x4 scope:local -k.27597 = .bss:0x80473F38; // type:label size:0x4 scope:local -_.tmp_23.27598 = .bss:0x80473F3C; // type:label size:0x4 scope:local -k.27623 = .bss:0x80473F40; // type:label size:0x4 scope:local -_.tmp_24.27624 = .bss:0x80473F44; // type:label size:0x4 scope:local -quarterMileInMeters.31487 = .bss:0x80473F48; // type:label size:0x4 scope:local -_.tmp_25.31488 = .bss:0x80473F4C; // type:label size:0x4 scope:local -sixtyMphInMetersPerSec.31489 = .bss:0x80473F50; // type:label size:0x4 scope:local -_.tmp_26.31490 = .bss:0x80473F54; // type:label size:0x4 scope:local -lower.32099 = .bss:0x80473F58; // type:label size:0x4 scope:local -_.tmp_28.32100 = .bss:0x80473F5C; // type:label size:0x4 scope:local -upper.32104 = .bss:0x80473F60; // type:label size:0x4 scope:local -_.tmp_29.32105 = .bss:0x80473F64; // type:label size:0x4 scope:local -k.34061 = .bss:0x80473F68; // type:label size:0x4 scope:local -_.tmp_31.34062 = .bss:0x80473F6C; // type:label size:0x4 scope:local -k.34099 = .bss:0x80473F70; // type:label size:0x4 scope:local -_.tmp_32.34100 = .bss:0x80473F74; // type:label size:0x4 scope:local -k.35687 = .bss:0x80473F78; // type:label size:0x4 scope:local -_.tmp_34.35688 = .bss:0x80473F7C; // type:label size:0x4 scope:local -k.36003 = .bss:0x80473F80; // type:label size:0x4 scope:local -_.tmp_36.36004 = .bss:0x80473F84; // type:label size:0x4 scope:local -kFloatScaleUp = .bss:0x80473F88; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x80473F8C; // type:label size:0x4 scope:local -Tweak_GlueSpreadTable_Low = .bss:0x80473F90; // type:label size:0x14 scope:global -Tweak_GlueSpreadTable_High = .bss:0x80473FA4; // type:label size:0x14 scope:global -Tweak_GlueStrengthTable_Low = .bss:0x80473FB8; // type:label size:0x14 scope:global -Tweak_GlueStrengthTable_High = .bss:0x80473FCC; // type:label size:0x14 scope:global -k.29730 = .bss:0x80473FE0; // type:label size:0x4 scope:local -_.tmp_15.29731 = .bss:0x80473FE4; // type:label size:0x4 scope:local -k.29762 = .bss:0x80473FE8; // type:label size:0x4 scope:local -_.tmp_16.29763 = .bss:0x80473FEC; // type:label size:0x4 scope:local -k.29806 = .bss:0x80473FF0; // type:label size:0x4 scope:local -_.tmp_17.29807 = .bss:0x80473FF4; // type:label size:0x4 scope:local -k.29850 = .bss:0x80473FF8; // type:label size:0x4 scope:local -_.tmp_18.29851 = .bss:0x80473FFC; // type:label size:0x4 scope:local -k.30181 = .bss:0x80474000; // type:label size:0x4 scope:local -_.tmp_26.30182 = .bss:0x80474004; // type:label size:0x4 scope:local -k.30213 = .bss:0x80474008; // type:label size:0x4 scope:local -_.tmp_27.30214 = .bss:0x8047400C; // type:label size:0x4 scope:local -kFloatScaleUp = .bss:0x80474010; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x80474014; // type:label size:0x4 scope:local -gGPSDestination = .bss:0x80474018; // type:label size:0xC scope:local -hash.12646 = .bss:0x80474024; // type:label size:0x4 scope:local -_.tmp_5.12647 = .bss:0x80474028; // type:label size:0x4 scope:local -hash.12654 = .bss:0x8047402C; // type:label size:0x4 scope:local -_.tmp_6.12655 = .bss:0x80474030; // type:label size:0x4 scope:local -value.29117 = .bss:0x80474034; // type:label size:0x4 scope:local -_.tmp_23.29118 = .bss:0x80474038; // type:label size:0x4 scope:local -k.30964 = .bss:0x8047403C; // type:label size:0x4 scope:local -_.tmp_32.30965 = .bss:0x80474040; // type:label size:0x4 scope:local -k.30996 = .bss:0x80474044; // type:label size:0x4 scope:local -_.tmp_33.30997 = .bss:0x80474048; // type:label size:0x4 scope:local -value.39127 = .bss:0x8047404C; // type:label size:0x4 scope:local -_.tmp_37.39128 = .bss:0x80474050; // type:label size:0x4 scope:local -k.39647 = .bss:0x80474054; // type:label size:0x4 scope:local -_.tmp_39.39648 = .bss:0x80474058; // type:label size:0x4 scope:local -k.40339 = .bss:0x8047405C; // type:label size:0x4 scope:local -_.tmp_41.40340 = .bss:0x80474060; // type:label size:0x4 scope:local -k.41431 = .bss:0x80474064; // type:label size:0x4 scope:local -_.tmp_50.41432 = .bss:0x80474068; // type:label size:0x4 scope:local -k.41663 = .bss:0x8047406C; // type:label size:0x4 scope:local -_.tmp_58.41664 = .bss:0x80474070; // type:label size:0x4 scope:local -k.41689 = .bss:0x80474074; // type:label size:0x4 scope:local -_.tmp_59.41690 = .bss:0x80474078; // type:label size:0x4 scope:local -k.41913 = .bss:0x8047407C; // type:label size:0x4 scope:local -_.tmp_66.41914 = .bss:0x80474080; // type:label size:0x4 scope:local -k.42193 = .bss:0x80474084; // type:label size:0x4 scope:local -_.tmp_74.42194 = .bss:0x80474088; // type:label size:0x4 scope:local -k.42231 = .bss:0x8047408C; // type:label size:0x4 scope:local -_.tmp_75.42232 = .bss:0x80474090; // type:label size:0x4 scope:local -k.42403 = .bss:0x80474094; // type:label size:0x4 scope:local -_.tmp_80.42404 = .bss:0x80474098; // type:label size:0x4 scope:local -k.42461 = .bss:0x8047409C; // type:label size:0x4 scope:local -_.tmp_82.42462 = .bss:0x804740A0; // type:label size:0x4 scope:local -k.42493 = .bss:0x804740A4; // type:label size:0x4 scope:local -_.tmp_83.42494 = .bss:0x804740A8; // type:label size:0x4 scope:local -k.42615 = .bss:0x804740AC; // type:label size:0x4 scope:local -_.tmp_87.42616 = .bss:0x804740B0; // type:label size:0x4 scope:local -k.42671 = .bss:0x804740B4; // type:label size:0x4 scope:local -_.tmp_88.42672 = .bss:0x804740B8; // type:label size:0x4 scope:local -gDefaultDataArea.43405 = .bss:0x804740BC; // type:label size:0x800 scope:local -instance.54980 = .bss:0x804748BC; // type:label size:0x50 scope:local -_.tmp_95.54981 = .bss:0x8047490C; // type:label size:0x4 scope:local -kFloatScaleUp = .bss:0x80474910; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x80474914; // type:label size:0x4 scope:local -WAM_START_TRIGGER = .bss:0x80474918; // type:label size:0x4 scope:local -WAM_STOP_TRIGGER = .bss:0x8047491C; // type:label size:0x4 scope:local -WAM_FIRST_FRAME = .bss:0x80474920; // type:label size:0x4 scope:local -WAM_LAST_FRAME = .bss:0x80474924; // type:label size:0x4 scope:local -WAM_SOUND_TRIGGER_START = .bss:0x80474928; // type:label size:0x4 scope:local -WAM_SOUND_TRIGGER_STOP = .bss:0x8047492C; // type:label size:0x4 scope:local -WAM_NIS_GENERIC_CONTROL_MSG = .bss:0x80474930; // type:label size:0x4 scope:local -WAM_FWD_REV_TRACK_CONTROL_MSG = .bss:0x80474934; // type:label size:0x4 scope:local -_6Attrib.AICollisionReactionRecord_singleton = .bss:0x80474938; // type:label size:0x4 scope:local -_6Attrib.Attrib_RefSpec_singleton = .bss:0x8047493C; // type:label size:0x4 scope:local -_6Attrib.CollisionStream_singleton = .bss:0x80474940; // type:label size:0x4 scope:local -_6Attrib.EffectLinkageRecord_singleton = .bss:0x80474944; // type:label size:0x4 scope:local -_6Attrib.TireEffectRecord_singleton = .bss:0x80474948; // type:label size:0x4 scope:local -_6Attrib.TrafficPatternRecord_singleton = .bss:0x8047494C; // type:label size:0x4 scope:local -_6Attrib.UpgradeSpecs_singleton = .bss:0x80474950; // type:label size:0x4 scope:local -GameActionConverter = .bss:0x80474954; // type:label size:0x10 scope:global -_11ActionQueue.mLastAnyActionTime = .bss:0x80474964; // type:label size:0x4 scope:global -_Q33UTL11Collectionst8Listable2Z11ActionQueuei20._mTable = .bss:0x80474968; // type:label size:0x60 scope:global -_Q33UTL11Collectionst12Instanceable3ZPQ214EventSequencer9HENGINE__ZQ214EventSequencer7IEnginei434._mList = .bss:0x804749C8; // type:label size:0xDA0 scope:global -_14EventSequencer.gCreateStimulus = .bss:0x80475768; // type:label size:0x4 scope:local -_14EventSequencer.gTriggerStimulus = .bss:0x8047576C; // type:label size:0x4 scope:local -_14EventSequencer.gStartAction = .bss:0x80475770; // type:label size:0x4 scope:local -_14EventSequencer.gEndAction = .bss:0x80475774; // type:label size:0x4 scope:local -_14EventSequencer.gStopAction = .bss:0x80475778; // type:label size:0x4 scope:local -_14EventSequencer.gPauseAction = .bss:0x8047577C; // type:label size:0x4 scope:local -_14EventSequencer.gResumeAction = .bss:0x80475780; // type:label size:0x4 scope:local -_14EventSequencer.gUnloadAction = .bss:0x80475784; // type:label size:0x4 scope:local -_14EventSequencer.gStimulusParameter = .bss:0x80475788; // type:label size:0x4 scope:local -_14EventSequencer.gStimulusResult = .bss:0x8047578C; // type:label size:0x4 scope:local -_14EventSequencer.gEngineData = .bss:0x80475790; // type:label size:0x10 scope:local -bChunkLoaderEventSequence = .bss:0x804757A0; // type:label size:0x10 scope:global -bChunkLoaderEventSequenceTemp = .bss:0x804757B0; // type:label size:0x10 scope:global -kCurrentWeapon = .bss:0x804757C0; // type:label size:0x4 scope:local -kCurrentGadget = .bss:0x804757C4; // type:label size:0x4 scope:local -_13VirtualMemory.fgInstance = .bss:0x804757C8; // type:label size:0x901C scope:global -_GameDevice = .bss:0x8047E7E4; // type:label size:0xC scope:global -gEventDynamicData = .bss:0x8047E7F0; // type:label size:0x64 scope:global -input_devices = .bss:0x8047E854; // type:label size:0x10 scope:local -input_connected = .bss:0x8047E864; // type:label size:0x10 scope:local -effect_states = .bss:0x8047E874; // type:label size:0x50 scope:local -_14EventSequencer.gActiveSystemList = .bss:0x8047E8C4; // type:label size:0x1000 scope:local -sprint_buffer.32547 = .bss:0x8047F8C4; // type:label size:0x50 scope:local -kFloatScaleUp = .bss:0x8047F914; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x8047F918; // type:label size:0x4 scope:local -OverhauserBasisMatricies = .bss:0x8047F91C; // type:label size:0xC0 scope:global -LoadedSplineList = .bss:0x8047F9DC; // type:label size:0x8 scope:global -gFastMem = .bss:0x8047F9E4; // type:label size:0x32C scope:global -ResourceFileList = .bss:0x8047FD10; // type:label size:0x8 scope:global -queued_vm_files = .bss:0x8047FD18; // type:label size:0x17C scope:global -gVaults = .bss:0x8047FE94; // type:label size:0x10 scope:local -gFiles = .bss:0x8047FEA4; // type:label size:0x10 scope:local -gFileCollector = .bss:0x8047FEB4; // type:label size:0x4 scope:local -gVaultCollector = .bss:0x8047FEB8; // type:label size:0x4 scope:local -sDefaultAttribAlloc = .bss:0x8047FEBC; // type:label size:0x4 scope:local -TheRegionLoader = .bss:0x8047FEC0; // type:label size:0x20 scope:global -TheTrackLoader = .bss:0x8047FEE0; // type:label size:0x4 scope:global -TheGameFlowManager = .bss:0x8047FEE4; // type:label size:0x24 scope:global -last_any_joy = .bss:0x8047FF08; // type:label size:0x4 scope:local -vShakeTest = .bss:0x8047FF0C; // type:label size:0x10 scope:global -vShakeRotation = .bss:0x8047FF1C; // type:label size:0x10 scope:local -vShakeAccelBias = .bss:0x8047FF2C; // type:label size:0x10 scope:local -SmallRumbleEnvelope = .bss:0x8047FF3C; // type:label size:0x8 scope:global -BigRumbleEnvelope = .bss:0x8047FF44; // type:label size:0x8 scope:global -ShockSwayRumbleEnvelope = .bss:0x8047FF4C; // type:label size:0x8 scope:global -RoadNoiseRumbleEnvelope0 = .bss:0x8047FF54; // type:label size:0x8 scope:global -RoadNoiseRumbleEnvelope1 = .bss:0x8047FF5C; // type:label size:0x8 scope:global -BinaryRumbleEnvelope = .bss:0x8047FF64; // type:label size:0x8 scope:global -SingleRoadBumpRumbleEnvelope = .bss:0x8047FF6C; // type:label size:0x8 scope:global -DoubleRoadBumpRumbleEnvelope = .bss:0x8047FF74; // type:label size:0x8 scope:global -ShakeAmplitudeEnvelope = .bss:0x8047FF7C; // type:label size:0x8 scope:global -GearGrindEnvelope = .bss:0x8047FF84; // type:label size:0x8 scope:global -EngineHeatEnvelope = .bss:0x8047FF8C; // type:label size:0x8 scope:global -EngineRevEnvelope = .bss:0x8047FF94; // type:label size:0x8 scope:global -NOSEnvelope = .bss:0x8047FF9C; // type:label size:0x8 scope:global -DriftEnvelope = .bss:0x8047FFA4; // type:label size:0x8 scope:global -BurnoutEnvelope = .bss:0x8047FFAC; // type:label size:0x8 scope:global -CameraShakers = .bss:0x8047FFB4; // type:label size:0x40 scope:global -WaitingQueuedFileList = .bss:0x8047FFF4; // type:label size:0x8 scope:global -ReadingQueuedFileList = .bss:0x8047FFFC; // type:label size:0x8 scope:global -MemoryFileList = .bss:0x80480004; // type:label size:0x8 scope:global -_20CachedRealFileHandle.HandleList = .bss:0x8048000C; // type:label size:0x8 scope:global -bFileList = .bss:0x80480014; // type:label size:0x8 scope:global -_5bFile.PendingCallbackList = .bss:0x8048001C; // type:label size:0x8 scope:global -_5bFile.CompletedCallbackList = .bss:0x80480024; // type:label size:0x8 scope:global -sCutiePetootie = .bss:0x8048002C; // type:label size:0x3C scope:global -tRenderEggTimer = .bss:0x80480068; // type:label size:0x4 scope:global -gEasterEggs = .bss:0x8048006C; // type:label size:0x48 scope:global -RealTimer = .bss:0x804800B4; // type:label size:0x4 scope:global -RealTimeElapsed = .bss:0x804800B8; // type:label size:0x4 scope:global -LimitMinimumVideoTimeElapsed = .bss:0x804800BC; // type:label size:0x4 scope:global -WorldTimer = .bss:0x804800C0; // type:label size:0x4 scope:global -frames_elapsed = .bss:0x804800C8; // type:label size:0x4 scope:global -loop_ticker = .bss:0x804800CC; // type:label size:0x4 scope:global -DelayedResourceCallbacks = .bss:0x804800D0; // type:label size:0x40 scope:global -JoylogThrottleCounter = .bss:0x80480110; // type:label size:0x8 scope:global -JoylogThrottleTicks = .bss:0x80480118; // type:label size:0x8 scope:global -LastQueuedFilename = .bss:0x80480120; // type:label size:0x64 scope:global -bFileMutex = .bss:0x80480184; // type:label size:0x1C scope:global -kFloatScaleUp = .bss:0x804801A4; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x804801A8; // type:label size:0x4 scope:local -kFloatScaleUp = .bss:0x804801AC; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x804801B0; // type:label size:0x4 scope:local -value.13005 = .bss:0x804801D8; // type:label size:0x4 scope:local -_.tmp_4.13006 = .bss:0x804801DC; // type:label size:0x4 scope:local -value.13016 = .bss:0x804801E0; // type:label size:0x4 scope:local -_.tmp_5.13017 = .bss:0x804801E4; // type:label size:0x4 scope:local -value.13027 = .bss:0x804801E8; // type:label size:0x4 scope:local -_.tmp_6.13028 = .bss:0x804801EC; // type:label size:0x4 scope:local -value.13038 = .bss:0x804801F0; // type:label size:0x4 scope:local -_.tmp_7.13039 = .bss:0x804801F4; // type:label size:0x4 scope:local -value.13049 = .bss:0x804801F8; // type:label size:0x4 scope:local -_.tmp_8.13050 = .bss:0x804801FC; // type:label size:0x4 scope:local -value.13060 = .bss:0x80480200; // type:label size:0x4 scope:local -_.tmp_9.13061 = .bss:0x80480204; // type:label size:0x4 scope:local -hash.23295 = .bss:0x80480208; // type:label size:0x4 scope:local -_.tmp_10.23296 = .bss:0x8048020C; // type:label size:0x4 scope:local -hash.23303 = .bss:0x80480210; // type:label size:0x4 scope:local -_.tmp_11.23304 = .bss:0x80480214; // type:label size:0x4 scope:local -temp_record.28290 = .bss:0x80480278; // type:label size:0x198 scope:local -_.tmp_24.28291 = .bss:0x80480410; // type:label size:0x4 scope:local -tunings.28622 = .bss:0x80480414; // type:label size:0x1C scope:local -_.tmp_25.28623 = .bss:0x80480430; // type:label size:0x4 scope:local -fix.31644 = .bss:0x80480434; // type:label size:0x40 scope:local -hash.31919 = .bss:0x804804E4; // type:label size:0x4 scope:local -_.tmp_40.31920 = .bss:0x804804E8; // type:label size:0x4 scope:local -hash.31927 = .bss:0x804804EC; // type:label size:0x4 scope:local -_.tmp_41.31928 = .bss:0x804804F0; // type:label size:0x4 scope:local -kFloatScaleUp = .bss:0x80480504; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x80480508; // type:label size:0x4 scope:local -_Q33UTL11Collectionst8Listable2Z10IExplosioni96._mTable = .bss:0x8048050C; // type:label size:0x190 scope:global -_Q33UTL11Collectionst8Listable2Z11IDisposablei160._mTable = .bss:0x8048069C; // type:label size:0x290 scope:global -_Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists = .bss:0x8048092C; // type:label size:0x230 scope:global -_Q33UTL11Collectionst8Listable2Z10IRigidBodyi160._mTable = .bss:0x80480B5C; // type:label size:0x290 scope:global -_Q33UTL11Collectionst8Listable2Z14ICollisionBodyi160._mTable = .bss:0x80480DEC; // type:label size:0x290 scope:global -_Q33UTL11Collectionst8Listable2Z11ISimpleBodyi96._mTable = .bss:0x8048107C; // type:label size:0x190 scope:global -_Q33UTL11Collectionst11ListableSet4ZQ23Sim7IEntityi8Z11eEntityListUi4._mLists = .bss:0x8048120C; // type:label size:0xC0 scope:global -_Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists = .bss:0x804812CC; // type:label size:0x90 scope:global -_Q33UTL11Collectionst8Listable2Z17IRecordablePlayeri8._mTable = .bss:0x8048135C; // type:label size:0x30 scope:global -_Q33UTL11Collectionst8Listable2Z12IInputPlayeri8._mTable = .bss:0x8048138C; // type:label size:0x30 scope:global -_Q33UTL11Collectionst8Listable2Z6IModeli434._mTable = .bss:0x804813BC; // type:label size:0x6D8 scope:global -_Q33UTL11Collectionst8Listable2Z8IPursuiti8._mTable = .bss:0x80481A94; // type:label size:0x30 scope:global -_Q33UTL11Collectionst8Listable2Z10IRoadBlocki8._mTable = .bss:0x80481AC4; // type:label size:0x30 scope:global -_Q33UTL11Collectionst8Listable2Z4IHudi2._mTable = .bss:0x80481AF4; // type:label size:0x18 scope:global -_Q33UTL11Collectionst8Listable2Z13IVehicleCachei18._mTable = .bss:0x80481B0C; // type:label size:0x58 scope:global -_Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable = .bss:0x80481B64; // type:label size:0x30 scope:global -_Q33UTL11Collectionst8Listable2Z10ISpikeablei10._mTable = .bss:0x80481B94; // type:label size:0x38 scope:global -_Q33UTL11Collectionst12Instanceable3ZP10HSIMABLE__Z8ISimablei160._mList = .bss:0x80481BCC; // type:label size:0x510 scope:global -_Q33UTL11Collectionst12Instanceable3ZP11HACTIVITY__ZQ23Sim9IActivityi40._mList = .bss:0x804820DC; // type:label size:0x150 scope:global -_Q33UTL11Collectionst12Instanceable3ZP8HMODEL__Z6IModeli434._mList = .bss:0x8048222C; // type:label size:0xDA0 scope:global -_Q33UTL11Collectionst12Instanceable3ZP8HCAUSE__Z6ICausei10._mList = .bss:0x80482FCC; // type:label size:0x60 scope:global -_Explosion = .bss:0x8048302C; // type:label size:0xC scope:global -_12VehicleClass.CAR = .bss:0x80483038; // type:label size:0x4 scope:global -_12VehicleClass.SUBMARINE = .bss:0x8048303C; // type:label size:0x4 scope:global -_12VehicleClass.CHOPPER = .bss:0x80483040; // type:label size:0x4 scope:global -_12VehicleClass.BIKE = .bss:0x80483044; // type:label size:0x4 scope:global -_12VehicleClass.BOAT = .bss:0x80483048; // type:label size:0x4 scope:global -_12VehicleClass.SNOWMOBILE = .bss:0x8048304C; // type:label size:0x4 scope:global -_12VehicleClass.HOVER = .bss:0x80483050; // type:label size:0x4 scope:global -_12VehicleClass.PLANE = .bss:0x80483054; // type:label size:0x4 scope:global -_12VehicleClass.TANK = .bss:0x80483058; // type:label size:0x4 scope:global -_12VehicleClass.TRAILER = .bss:0x8048305C; // type:label size:0x4 scope:global -_12VehicleClass.TRAIN = .bss:0x80483060; // type:label size:0x4 scope:global -_12VehicleClass.TRANSPORT = .bss:0x80483064; // type:label size:0x4 scope:global -_12VehicleClass.RC = .bss:0x80483068; // type:label size:0x4 scope:global -_12VehicleClass.TRACTOR = .bss:0x8048306C; // type:label size:0x4 scope:global -_PVehicle = .bss:0x80483070; // type:label size:0xC scope:global -_8PVehicle.mInstances = .bss:0x8048307C; // type:label size:0x8 scope:global -ai_behaviors = .bss:0x80483084; // type:label size:0x6C scope:local -_Q33UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160._mCollector = .bss:0x804830F0; // type:label size:0xA24 scope:global -_9Smackable.CYLINDER = .bss:0x80483B18; // type:label size:0x10 scope:global -_9Smackable.TUBE = .bss:0x80483B28; // type:label size:0x10 scope:global -_9Smackable.CONE = .bss:0x80483B38; // type:label size:0x10 scope:global -_9Smackable.SPHERE = .bss:0x80483B48; // type:label size:0x10 scope:global -_Q33UTL11Collectionst8Listable2Z9Smackablei160._mTable = .bss:0x80483B58; // type:label size:0x290 scope:global -_Smackable = .bss:0x80483DE8; // type:label size:0xC scope:global -__RBSmackable = .bss:0x80483DF4; // type:label size:0xC scope:global -_Physics_System_VehicleSystem = .bss:0x80483E00; // type:label size:0x14 scope:global -BEHAVIOR_MECHANIC_AI = .bss:0x80483E18; // type:label size:0x10 scope:global -BEHAVIOR_MECHANIC_RIGIDBODY = .bss:0x80483E28; // type:label size:0x10 scope:global -BEHAVIOR_MECHANIC_INPUT = .bss:0x80483E38; // type:label size:0x10 scope:global -BEHAVIOR_MECHANIC_SUSPENSION = .bss:0x80483E48; // type:label size:0x10 scope:global -BEHAVIOR_MECHANIC_ENGINE = .bss:0x80483E58; // type:label size:0x10 scope:global -BEHAVIOR_MECHANIC_DAMAGE = .bss:0x80483E68; // type:label size:0x10 scope:global -BEHAVIOR_MECHANIC_DRAW = .bss:0x80483E78; // type:label size:0x10 scope:global -BEHAVIOR_MECHANIC_AUDIO = .bss:0x80483E88; // type:label size:0x10 scope:global -BEHAVIOR_MECHANIC_EFFECTS = .bss:0x80483E98; // type:label size:0x10 scope:global -BEHAVIOR_MECHANIC_RESET = .bss:0x80483EA8; // type:label size:0x10 scope:global -TheCollections = .bss:0x80483EB8; // type:label size:0x8 scope:local -TheSmokeableSections = .bss:0x80483EC0; // type:label size:0xF10 scope:global -_Physics_System_SceneryModel = .bss:0x80484DD0; // type:label size:0x14 scope:global -_20SmokeableSpawnerPack.mLoader = .bss:0x80484DE4; // type:label size:0x10 scope:global -PerformanceWeights = .bss:0x80484DF4; // type:label size:0x54 scope:local -top_stats = .bss:0x80484E48; // type:label size:0xC scope:local -bottom_stats = .bss:0x80484E54; // type:label size:0xC scope:local -TheStockCars = .bss:0x80484E60; // type:label size:0x8 scope:local -hash.18890 = .bss:0x80484EB8; // type:label size:0x4 scope:local -_.tmp_10.18891 = .bss:0x80484EBC; // type:label size:0x4 scope:local -hash.18898 = .bss:0x80484EC0; // type:label size:0x4 scope:local -_.tmp_11.18899 = .bss:0x80484EC4; // type:label size:0x4 scope:local -hash.19006 = .bss:0x80484ED8; // type:label size:0x4 scope:local -_.tmp_14.19007 = .bss:0x80484EDC; // type:label size:0x4 scope:local -hash.19014 = .bss:0x80484EE0; // type:label size:0x4 scope:local -_.tmp_15.19015 = .bss:0x80484EE4; // type:label size:0x4 scope:local -hash.19056 = .bss:0x80484EF8; // type:label size:0x4 scope:local -_.tmp_18.19057 = .bss:0x80484EFC; // type:label size:0x4 scope:local -hash.19064 = .bss:0x80484F00; // type:label size:0x4 scope:local -_.tmp_19.19065 = .bss:0x80484F04; // type:label size:0x4 scope:local -null_record.23326 = .bss:0x80484F58; // type:label size:0x8 scope:local -hash.37036 = .bss:0x80484FE0; // type:label size:0x4 scope:local -_.tmp_46.37037 = .bss:0x80484FE4; // type:label size:0x4 scope:local -hash.37044 = .bss:0x80484FE8; // type:label size:0x4 scope:local -_.tmp_47.37045 = .bss:0x80484FEC; // type:label size:0x4 scope:local -hash.37152 = .bss:0x80485000; // type:label size:0x4 scope:local -_.tmp_50.37153 = .bss:0x80485004; // type:label size:0x4 scope:local -hash.37160 = .bss:0x80485008; // type:label size:0x4 scope:local -_.tmp_51.37161 = .bss:0x8048500C; // type:label size:0x4 scope:local -kFloatScaleUp = .bss:0x80485020; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x80485024; // type:label size:0x4 scope:local -_t18AttributeStructPtr1ZQ36Attrib3Gen8pvehicle.mAttributeClass = .bss:0x80485028; // type:label size:0x4 scope:global -_t18AttributeStructPtr1ZQ36Attrib3Gen12chopperspecs.mAttributeClass = .bss:0x8048502C; // type:label size:0x4 scope:global -_t18AttributeStructPtr1ZQ36Attrib3Gen11damagespecs.mAttributeClass = .bss:0x80485030; // type:label size:0x4 scope:global -_t18AttributeStructPtr1ZQ36Attrib3Gen5tires.mAttributeClass = .bss:0x80485034; // type:label size:0x4 scope:global -_t18AttributeStructPtr1ZQ36Attrib3Gen7chassis.mAttributeClass = .bss:0x80485038; // type:label size:0x4 scope:global -_t18AttributeStructPtr1ZQ36Attrib3Gen6brakes.mAttributeClass = .bss:0x8048503C; // type:label size:0x4 scope:global -_t18AttributeStructPtr1ZQ36Attrib3Gen6engine.mAttributeClass = .bss:0x80485040; // type:label size:0x4 scope:global -_t18AttributeStructPtr1ZQ36Attrib3Gen12transmission.mAttributeClass = .bss:0x80485044; // type:label size:0x4 scope:global -_t18AttributeStructPtr1ZQ36Attrib3Gen9induction.mAttributeClass = .bss:0x80485048; // type:label size:0x4 scope:global -_t18AttributeStructPtr1ZQ36Attrib3Gen3nos.mAttributeClass = .bss:0x8048504C; // type:label size:0x4 scope:global -_Physics_System_RigidBody = .bss:0x80485050; // type:label size:0x14 scope:global -_t10ScratchPtr1ZQ29RigidBody8Volatile.mRAMBuffer = .bss:0x80485064; // type:label size:0x2C00 scope:global -_t18AttributeStructPtr1ZQ36Attrib3Gen14rigidbodyspecs.mAttributeClass = .bss:0x80487C64; // type:label size:0x4 scope:global -TheRigidBodies = .bss:0x80487C68; // type:label size:0x8 scope:global -__RigidBody = .bss:0x80487C70; // type:label size:0xC scope:global -__SimpleRigidBody = .bss:0x80487C7C; // type:label size:0xC scope:global -_t10ScratchPtr1ZQ215SimpleRigidBody8Volatile.mRAMBuffer = .bss:0x80487C88; // type:label size:0x1800 scope:global -TheSimpleBodies = .bss:0x80489488; // type:label size:0x8 scope:global -_15SimpleRigidBody.mCollisionMap = .bss:0x80489490; // type:label size:0x900 scope:global -__RBVehicle = .bss:0x80489D90; // type:label size:0xC scope:global -__RBTractor = .bss:0x80489D9C; // type:label size:0xC scope:global -__RBTrailer = .bss:0x80489DA8; // type:label size:0xC scope:global -__RBCop = .bss:0x80489DB4; // type:label size:0xC scope:global -__EffectsVehicle = .bss:0x80489DC0; // type:label size:0xC scope:global -__EffectsCar = .bss:0x80489DCC; // type:label size:0xC scope:global -__EffectsPlayer = .bss:0x80489DD8; // type:label size:0xC scope:global -__EffectsSmackable = .bss:0x80489DE4; // type:label size:0xC scope:global -__EffectsFragment = .bss:0x80489DF0; // type:label size:0xC scope:global -__DamageVehicle = .bss:0x80489DFC; // type:label size:0xC scope:global -__DamageRacer = .bss:0x80489E08; // type:label size:0xC scope:global -__DamageDragster = .bss:0x80489E14; // type:label size:0xC scope:global -__DamageHeli = .bss:0x80489E20; // type:label size:0xC scope:global -__DamageCopCar = .bss:0x80489E2C; // type:label size:0xC scope:global -__PInput = .bss:0x80489E38; // type:label size:0xC scope:global -__InputPlayer = .bss:0x80489E44; // type:label size:0xC scope:global -__InputPlayerDrag = .bss:0x80489E50; // type:label size:0xC scope:global -__InputNIS = .bss:0x80489E5C; // type:label size:0xC scope:global -TractionRangeTable = .bss:0x80489E68; // type:label size:0x14 scope:global -GripRangeTable = .bss:0x80489E7C; // type:label size:0x14 scope:global -JumpStabilizationGraph = .bss:0x80489E90; // type:label size:0x18 scope:global -JumpStabilization = .bss:0x80489EA8; // type:label size:0x8 scope:global -ZeroDegree = .bss:0x80489EB0; // type:label size:0x14 scope:global -TwoDegree = .bss:0x80489EC4; // type:label size:0x14 scope:global -FourDegree = .bss:0x80489ED8; // type:label size:0x14 scope:global -SixDegree = .bss:0x80489EEC; // type:label size:0x14 scope:global -EightDegree = .bss:0x80489F00; // type:label size:0x14 scope:global -TenDegree = .bss:0x80489F14; // type:label size:0x14 scope:global -TwelveDegree = .bss:0x80489F28; // type:label size:0x14 scope:global -kOneMPH = .bss:0x80489F3C; // type:label size:0x4 scope:local -__SuspensionRacer = .bss:0x80489F40; // type:label size:0xC scope:global -PostCollisionSteerReductionData = .bss:0x80489F4C; // type:label size:0x20 scope:global -PostCollisionSteerReductionTable = .bss:0x80489F6C; // type:label size:0x8 scope:global -CounterSteerOn = .bss:0x80489F74; // type:label size:0x4 scope:global -SteerInputRemapTables = .bss:0x80489F78; // type:label size:0x50 scope:global -SteeringRangeTable = .bss:0x80489FC8; // type:label size:0x14 scope:global -SteeringWheelRangeTable = .bss:0x80489FDC; // type:label size:0x14 scope:global -SteeringRangeCoeffTable = .bss:0x80489FF0; // type:label size:0x14 scope:global -SteeringSpeedTable = .bss:0x8048A004; // type:label size:0x14 scope:global -SteeringInputSpeedCoeffTable = .bss:0x8048A018; // type:label size:0x14 scope:global -SteeringInputCoeffTable = .bss:0x8048A02C; // type:label size:0x14 scope:global -BurnoutFrictionTable = .bss:0x8048A040; // type:label size:0x8 scope:global -DriftStabilizerData = .bss:0x8048A048; // type:label size:0x38 scope:global -DriftStabilizerTable = .bss:0x8048A080; // type:label size:0x8 scope:global -DriftRearFrictionTable = .bss:0x8048A088; // type:label size:0x14 scope:global -__SuspensionTraffic = .bss:0x8048A09C; // type:label size:0xC scope:global -__SuspensionSimple = .bss:0x8048A0A8; // type:label size:0xC scope:global -TrailerCorneringForce = .bss:0x8048A0B4; // type:label size:0x14 scope:global -__SuspensionTrailer = .bss:0x8048A0C8; // type:label size:0xC scope:global -__SuspensionSpline = .bss:0x8048A0D4; // type:label size:0xC scope:global -__EngineRacer = .bss:0x8048A0E0; // type:label size:0xC scope:global -ClutchPlayTable = .bss:0x8048A0EC; // type:label size:0x8 scope:global -__EngineDragster = .bss:0x8048A0F4; // type:label size:0xC scope:global -__EngineSpline = .bss:0x8048A100; // type:label size:0xC scope:global -__SimpleChopper = .bss:0x8048A10C; // type:label size:0xC scope:global -__EngineTraffic = .bss:0x8048A118; // type:label size:0xC scope:global -__DrawHeli = .bss:0x8048A124; // type:label size:0xC scope:global -__DrawTraffic = .bss:0x8048A130; // type:label size:0xC scope:global -__DrawNISCar = .bss:0x8048A13C; // type:label size:0xC scope:global -__DrawCopCar = .bss:0x8048A148; // type:label size:0xC scope:global -__DrawRaceCar = .bss:0x8048A154; // type:label size:0xC scope:global -__SoundTraffic = .bss:0x8048A160; // type:label size:0xC scope:global -__SoundCop = .bss:0x8048A16C; // type:label size:0xC scope:global -__SoundRacer = .bss:0x8048A178; // type:label size:0xC scope:global -__ResetCar = .bss:0x8048A184; // type:label size:0xC scope:global -__SoundHeli = .bss:0x8048A190; // type:label size:0xC scope:global -__SpikeStrip = .bss:0x8048A19C; // type:label size:0xC scope:global -RBGrid_Memory = .bss:0x8048A1A8; // type:label size:0x1B00 scope:local -profdata.25844 = .bss:0x8048BD18; // type:label size:0x2000 scope:local -softwareResetStartTick.25900 = .bss:0x8048DD18; // type:label size:0x4 scope:local -sDisplayName.29516 = .bss:0x8048DD1C; // type:label size:0x20 scope:local -kFloatScaleUp = .bss:0x8048DD3C; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x8048DD40; // type:label size:0x4 scope:local -gVMStatsManager_FE = .bss:0x8048DD48; // type:label size:0x58 scope:global -gVMStatsManager_LS = .bss:0x8048DDA0; // type:label size:0x58 scope:global -gVMStatsManager_IG = .bss:0x8048DDF8; // type:label size:0x58 scope:global -sun_vis_poly_fix = .bss:0x8048DE50; // type:label size:0x94 scope:global -sun_vis_poly_fix_ini = .bss:0x8048DEE4; // type:label size:0x40 scope:global -BillboardedParticleBasisX = .bss:0x8048DF24; // type:label size:0x10 scope:global -BillboardedParticleBasisY = .bss:0x8048DF34; // type:label size:0x10 scope:global -TheDemoDiscManager = .bss:0x8048DF44; // type:label size:0x28 scope:global -NGSpriteManager = .bss:0x8048DF6C; // type:label size:0x3394 scope:global -gNGEffectList = .bss:0x80491300; // type:label size:0x20 scope:global -g_GC_Disk_GameName = .bss:0x80491320; // type:label size:0x4 scope:global -arenaLo = .bss:0x80491324; // type:label size:0x4 scope:global -HardwarePadStatus = .bss:0x80491330; // type:label size:0x30 scope:global -PadRingData = .bss:0x80491360; // type:label size:0x1E00 scope:global -calibrationTimer = .bss:0x80493160; // type:label size:0x10 scope:global -lastCalibTime = .bss:0x80493170; // type:label size:0x10 scope:global -notYetCalibrating = .bss:0x80493180; // type:label size:0x4 scope:global -wasWheelConnected = .bss:0x80493184; // type:label size:0x4 scope:global -vis_layer_fix = .bss:0x8049318C; // type:label size:0x24 scope:global -crtVtxFmt = .bss:0x804931C8; // type:label size:0x4 scope:global -gGCVD = .bss:0x804931CC; // type:label size:0x4 scope:global -gParticleList = .bss:0x804931D0; // type:label size:0x3850 scope:global -kFloatScaleUp = .bss:0x80496A20; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x80496A24; // type:label size:0x4 scope:local -hash.19645 = .bss:0x80496A28; // type:label size:0x4 scope:local -_.tmp_13.19646 = .bss:0x80496A2C; // type:label size:0x4 scope:local -hash.19653 = .bss:0x80496A30; // type:label size:0x4 scope:local -_.tmp_14.19654 = .bss:0x80496A34; // type:label size:0x4 scope:local -hash.19664 = .bss:0x80496A38; // type:label size:0x4 scope:local -_.tmp_15.19665 = .bss:0x80496A3C; // type:label size:0x4 scope:local -hash.19672 = .bss:0x80496A40; // type:label size:0x4 scope:local -_.tmp_16.19673 = .bss:0x80496A44; // type:label size:0x4 scope:local -r.25453 = .bss:0x80496A48; // type:label size:0x10 scope:local -_.tmp_20.25454 = .bss:0x80496A58; // type:label size:0x4 scope:local -kFloatScaleUp = .bss:0x80496A5C; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x80496A60; // type:label size:0x4 scope:local -_10SimSurface.kNull = .bss:0x80496A64; // type:label size:0x14 scope:global -_LocalPlayer = .bss:0x80496A78; // type:label size:0xC scope:global -_Q33UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40._mCollector = .bss:0x80496A84; // type:label size:0x2A4 scope:global -_Q33UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8._mCollector = .bss:0x80496D28; // type:label size:0xA4 scope:global -_Q33UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434._mCollector = .bss:0x80496DCC; // type:label size:0x1B44 scope:global -_QuickGame = .bss:0x80498910; // type:label size:0xC scope:global -_CareerGame = .bss:0x8049891C; // type:label size:0xC scope:global -WAM_START_TRIGGER = .bss:0x80498928; // type:label size:0x4 scope:local -WAM_STOP_TRIGGER = .bss:0x8049892C; // type:label size:0x4 scope:local -WAM_FIRST_FRAME = .bss:0x80498930; // type:label size:0x4 scope:local -WAM_LAST_FRAME = .bss:0x80498934; // type:label size:0x4 scope:local -WAM_SOUND_TRIGGER_START = .bss:0x80498938; // type:label size:0x4 scope:local -WAM_SOUND_TRIGGER_STOP = .bss:0x8049893C; // type:label size:0x4 scope:local -WAM_NIS_GENERIC_CONTROL_MSG = .bss:0x80498940; // type:label size:0x4 scope:local -WAM_FWD_REV_TRACK_CONTROL_MSG = .bss:0x80498944; // type:label size:0x4 scope:local -_NISActivity = .bss:0x80498948; // type:label size:0xC scope:global -_GameplayActivity = .bss:0x80498954; // type:label size:0xC scope:global -_Q23Sim8Internal.mProfileTime = .bss:0x80498960; // type:label size:0x4 scope:local -_Q23Sim8Internal.mCallCount = .bss:0x80498964; // type:label size:0x4 scope:local -_Q23Sim8Internal.mTick = .bss:0x80498968; // type:label size:0x4 scope:local -_Q23Sim8Internal.mTime = .bss:0x8049896C; // type:label size:0x4 scope:local -_Q23Sim8Internal.mSystem = .bss:0x80498970; // type:label size:0x4 scope:local -msg.25523 = .bss:0x80498974; // type:label size:0x200 scope:local -tune.25789 = .bss:0x80498B74; // type:label size:0x14 scope:local -_.tmp_18.25790 = .bss:0x80498B88; // type:label size:0x4 scope:local -requests_in_queue.26705 = .bss:0x80498B8C; // type:label size:0x4 scope:local -_.tmp_19.26706 = .bss:0x80498B90; // type:label size:0x4 scope:local -fw0.29386 = .bss:0x80498B94; // type:label size:0xC scope:local -_.tmp_24.29387 = .bss:0x80498BA0; // type:label size:0x4 scope:local -startpos.29388 = .bss:0x80498BA4; // type:label size:0xC scope:local -_.tmp_25.29389 = .bss:0x80498BB0; // type:label size:0x4 scope:local -speed0.29400 = .bss:0x80498BB4; // type:label size:0x4 scope:local -_.tmp_26.29401 = .bss:0x80498BB8; // type:label size:0x4 scope:local -t_brake_start.29402 = .bss:0x80498BBC; // type:label size:0x4 scope:local -_.tmp_27.29403 = .bss:0x80498BC0; // type:label size:0x4 scope:local -t_currdir.30960 = .bss:0x80498BC4; // type:label size:0x4 scope:local -_.tmp_35.30961 = .bss:0x80498BC8; // type:label size:0x4 scope:local -kFloatScaleUp = .bss:0x80498BCC; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x80498BD0; // type:label size:0x4 scope:local -_Q26Speech7Manager.mEvents = .bss:0x80498BD4; // type:label size:0x50 scope:global -_Q26Speech7Manager.mEvtHistory = .bss:0x80498C24; // type:label size:0xC scope:global -_Q26Speech7Manager.mHashMap = .bss:0x80498C30; // type:label size:0x854 scope:global -_Q26Speech7Manager.mGlobalHistory = .bss:0x80499484; // type:label size:0xC74 scope:global -_Q26Speech7Manager.mSampleRequests = .bss:0x8049A0F8; // type:label size:0x14 scope:global -_Q26Speech7Manager.mSampleReqTimer = .bss:0x8049A10C; // type:label size:0x4 scope:global -gSpeechCache = .bss:0x8049A110; // type:label size:0x2C scope:global -_4Csis.gAcknowledgeHandle = .bss:0x8049A13C; // type:label size:0x8 scope:global -_4Csis.gSetup_SpotterHandle = .bss:0x8049A144; // type:label size:0x8 scope:global -_4Csis.gSetup_SpotterWantedHandle = .bss:0x8049A14C; // type:label size:0x8 scope:global -_4Csis.gSetup_SpotterReplyHandle = .bss:0x8049A154; // type:label size:0x8 scope:global -_4Csis.gSetup_AttmptVehStpHandle = .bss:0x8049A15C; // type:label size:0x8 scope:global -_4Csis.gSetup_DispGoAheadHandle = .bss:0x8049A164; // type:label size:0x8 scope:global -_4Csis.gSetup_PrimaryEngageHandle = .bss:0x8049A16C; // type:label size:0x8 scope:global -_4Csis.gSetup_InitPursuitHandle = .bss:0x8049A174; // type:label size:0x8 scope:global -_4Csis.gSetup_SuspectConfirmedHandle = .bss:0x8049A17C; // type:label size:0x8 scope:global -_4Csis.gSetup_ReInitPursuitHandle = .bss:0x8049A184; // type:label size:0x8 scope:global -_4Csis.gSetup_VehicleReportHandle = .bss:0x8049A18C; // type:label size:0x8 scope:global -_4Csis.gSetup_VehicleReportTagHandle = .bss:0x8049A194; // type:label size:0x8 scope:global -_4Csis.gSetup_DispVehDescripHandle = .bss:0x8049A19C; // type:label size:0x8 scope:global -_4Csis.gSetup_DispVehDescripVinylsHandle = .bss:0x8049A1A4; // type:label size:0x8 scope:global -_4Csis.gSetup_DispNoVehDescripHandle = .bss:0x8049A1AC; // type:label size:0x8 scope:global -_4Csis.gSetup_DispCustPaintHandle = .bss:0x8049A1B4; // type:label size:0x8 scope:global -_4Csis.gSetup_MoreDetailsHandle = .bss:0x8049A1BC; // type:label size:0x8 scope:global -_4Csis.gSetup_LocationReportHandle = .bss:0x8049A1C4; // type:label size:0x8 scope:global -_4Csis.gSetup_BullhornPrefixHandle = .bss:0x8049A1CC; // type:label size:0x8 scope:global -_4Csis.gSetup_BullhornHandle = .bss:0x8049A1D4; // type:label size:0x8 scope:global -_4Csis.gSetup_SelfStrategyHandle = .bss:0x8049A1DC; // type:label size:0x8 scope:global -_4Csis.gSetup_InitialCallForBUHandle = .bss:0x8049A1E4; // type:label size:0x8 scope:global -_4Csis.gSetup_InitialCallForBU_MSHandle = .bss:0x8049A1EC; // type:label size:0x8 scope:global -_4Csis.gBackup_CallForBUHandle = .bss:0x8049A1F4; // type:label size:0x8 scope:global -_4Csis.gBackup_UnitBUReplyHandle = .bss:0x8049A1FC; // type:label size:0x8 scope:global -_4Csis.gBackup_DispBackupReplyHandle = .bss:0x8049A204; // type:label size:0x8 scope:global -_4Csis.gBackup_CallForSwarmingHandle = .bss:0x8049A20C; // type:label size:0x8 scope:global -_4Csis.gBackup_DispBUETAHandle = .bss:0x8049A214; // type:label size:0x8 scope:global -_4Csis.gBackup_DispHeliBUETAHandle = .bss:0x8049A21C; // type:label size:0x8 scope:global -_4Csis.gBackup_BUReminderHandle = .bss:0x8049A224; // type:label size:0x8 scope:global -_4Csis.gBackup_NegativeBUReplyHandle = .bss:0x8049A22C; // type:label size:0x8 scope:global -_4Csis.gBackup_DispBackupUpdateHandle = .bss:0x8049A234; // type:label size:0x8 scope:global -_4Csis.gBackup_BUArrivesHandle = .bss:0x8049A23C; // type:label size:0x8 scope:global -_4Csis.gStaticRoadblock_CallForRBHandle = .bss:0x8049A244; // type:label size:0x8 scope:global -_4Csis.gStaticRoadblock_RBReminderHandle = .bss:0x8049A24C; // type:label size:0x8 scope:global -_4Csis.gStaticRoadblock_NegativeRBReplyHandle = .bss:0x8049A254; // type:label size:0x8 scope:global -_4Csis.gStaticRoadblock_DispRBReplyHandle = .bss:0x8049A25C; // type:label size:0x8 scope:global -_4Csis.gStaticRoadblock_DispRBUpdateHandle = .bss:0x8049A264; // type:label size:0x8 scope:global -_4Csis.gStaticRoadblock_PursuitApproachingHandle = .bss:0x8049A26C; // type:label size:0x8 scope:global -_4Csis.gStaticRoadblock_RBApproachHandle = .bss:0x8049A274; // type:label size:0x8 scope:global -_4Csis.gStaticRoadblock_RBEngageHandle = .bss:0x8049A27C; // type:label size:0x8 scope:global -_4Csis.gStaticRoadblock_RBAvertedHandle = .bss:0x8049A284; // type:label size:0x8 scope:global -_4Csis.gStaticRoadblock_CallForRB_subHandle = .bss:0x8049A28C; // type:label size:0x8 scope:global -_4Csis.gStaticRoadblock_DispSubRBHandle = .bss:0x8049A294; // type:label size:0x8 scope:global -_4Csis.gProjectile_CallForSafetyHandle = .bss:0x8049A29C; // type:label size:0x8 scope:global -_4Csis.gProjectile_ProjectileLaunchHandle = .bss:0x8049A2A4; // type:label size:0x8 scope:global -_4Csis.gProjectile_ProjectileHitHandle = .bss:0x8049A2AC; // type:label size:0x8 scope:global -_4Csis.gProjectile_ProjectileMissHandle = .bss:0x8049A2B4; // type:label size:0x8 scope:global -_4Csis.gRollingStrategy_InitStrategyHandle = .bss:0x8049A2BC; // type:label size:0x8 scope:global -_4Csis.gRollingStrategy_CallToPositionHandle = .bss:0x8049A2C4; // type:label size:0x8 scope:global -_4Csis.gRollingStrategy_CallToPositionRemHandle = .bss:0x8049A2CC; // type:label size:0x8 scope:global -_4Csis.gRollingStrategy_StrategyExecuteHandle = .bss:0x8049A2D4; // type:label size:0x8 scope:global -_4Csis.gOutcome_AnticipateFailHandle = .bss:0x8049A2DC; // type:label size:0x8 scope:global -_4Csis.gOutcome_AnticipateSuccessHandle = .bss:0x8049A2E4; // type:label size:0x8 scope:global -_4Csis.gOutcome_OutcomeFailHandle = .bss:0x8049A2EC; // type:label size:0x8 scope:global -_4Csis.gOutcome_StrategyResetHandle = .bss:0x8049A2F4; // type:label size:0x8 scope:global -_4Csis.gArrest_BullhornArrestHandle = .bss:0x8049A2FC; // type:label size:0x8 scope:global -_4Csis.gArrest_ArrestHandle = .bss:0x8049A304; // type:label size:0x8 scope:global -_4Csis.gArrest_DispArrestReplyHandle = .bss:0x8049A30C; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_CollisionWorldHandle = .bss:0x8049A314; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_CollWorld_CiviHandle = .bss:0x8049A31C; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_CollWorld_SpinHandle = .bss:0x8049A324; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_CollWorld_AirHandle = .bss:0x8049A32C; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_CollWorld_FlipHandle = .bss:0x8049A334; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_DispPursuitUpdateHandle = .bss:0x8049A33C; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_PursuitUpdateRepHandle = .bss:0x8049A344; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_Disp911ReportHandle = .bss:0x8049A34C; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_Disp911CsPntHandle = .bss:0x8049A354; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_Disp911NoDescripHandle = .bss:0x8049A35C; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_Unit911ReplyHandle = .bss:0x8049A364; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_SuspectUTurnHandle = .bss:0x8049A36C; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_SuspectOutrunHandle = .bss:0x8049A374; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_LostVisualHandle = .bss:0x8049A37C; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_RegainVisualHandle = .bss:0x8049A384; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_LostSuspectHandle = .bss:0x8049A38C; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_DispBreakAwayHandle = .bss:0x8049A394; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_DispTimeExpiredHandle = .bss:0x8049A39C; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_DispPursuitEscalationHandle = .bss:0x8049A3A4; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_DispPursEscGenHandle = .bss:0x8049A3AC; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_UnitDisabledHandle = .bss:0x8049A3B4; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_CallForEVHandle = .bss:0x8049A3BC; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_DispEVReplyHandle = .bss:0x8049A3C4; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_IntentToRamHandle = .bss:0x8049A3CC; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_BailoutHandle = .bss:0x8049A3D4; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_BailoutDenyHandle = .bss:0x8049A3DC; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_FocusChangeHandle = .bss:0x8049A3E4; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_SuspectBehaviourHandle = .bss:0x8049A3EC; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_DriverHistoryHandle = .bss:0x8049A3F4; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_OffroadMomentHandle = .bss:0x8049A3FC; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_SpottedHandle = .bss:0x8049A404; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_SuspectBrakeHandle = .bss:0x8049A40C; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_WeatherReportHandle = .bss:0x8049A414; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_HeatJumpHandle = .bss:0x8049A41C; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_DirectionHighHandle = .bss:0x8049A424; // type:label size:0x8 scope:global -_4Csis.gAnytimeEvents_DispJurisShiftHandle = .bss:0x8049A42C; // type:label size:0x8 scope:global -_4Csis.gHeliSpecific_HeliSelfStrategyHandle = .bss:0x8049A434; // type:label size:0x8 scope:global -_4Csis.gHeliSpecific_HeliLostVisualHandle = .bss:0x8049A43C; // type:label size:0x8 scope:global -_4Csis.gHeliSpecific_HeliIntentToBailHandle = .bss:0x8049A444; // type:label size:0x8 scope:global -_4Csis.gHeliSpecific_HeliBailoutHandle = .bss:0x8049A44C; // type:label size:0x8 scope:global -_4Csis.gHeliSpecific_HeliSwarmingHandle = .bss:0x8049A454; // type:label size:0x8 scope:global -_4Csis.gHeliSpecific_HeliSpotterHandle = .bss:0x8049A45C; // type:label size:0x8 scope:global -_4Csis.gHeliSpecific_HeliHazardAlertHandle = .bss:0x8049A464; // type:label size:0x8 scope:global -_4Csis.gHeliSpecific_HeliQuadrentHandle = .bss:0x8049A46C; // type:label size:0x8 scope:global -_4Csis.gHeliSpecific_HeliQuadrentMovingHandle = .bss:0x8049A474; // type:label size:0x8 scope:global -_4Csis.gHeliSpecific_HeliBullhornArrestHandle = .bss:0x8049A47C; // type:label size:0x8 scope:global -_4Csis.gE3_Events_E3_SetupHandle = .bss:0x8049A484; // type:label size:0x8 scope:global -_4Csis.gInterrupts_InterruptHandle = .bss:0x8049A48C; // type:label size:0x8 scope:global -_4Csis.gInterrupts_InterruptRamHandle = .bss:0x8049A494; // type:label size:0x8 scope:global -_4Csis.gInterrupts_InterruptRam_REHandle = .bss:0x8049A49C; // type:label size:0x8 scope:global -_4Csis.gInterrupts_InterruptRam_HOHandle = .bss:0x8049A4A4; // type:label size:0x8 scope:global -_4Csis.gInterrupts_InterruptRam_SSHandle = .bss:0x8049A4AC; // type:label size:0x8 scope:global -_4Csis.gInterrupts_InterruptRam_TBHandle = .bss:0x8049A4B4; // type:label size:0x8 scope:global -_4Csis.gInterrupts_InterruptRamHighHandle = .bss:0x8049A4BC; // type:label size:0x8 scope:global -_4Csis.gInterrupts_StaticInterruptHandle = .bss:0x8049A4C4; // type:label size:0x8 scope:global -_4Csis.gInterrupts_RegainVisualInterruptHandle = .bss:0x8049A4CC; // type:label size:0x8 scope:global -_4Csis.gCellCallHandle = .bss:0x8049A4D4; // type:label size:0x8 scope:global -_4Csis.gExtraCops_SwarmingReplyHandle = .bss:0x8049A4DC; // type:label size:0x8 scope:global -_4Csis.gExtraCops_SuperPursuitReplyHandle = .bss:0x8049A4E4; // type:label size:0x8 scope:global -_4Csis.gExtraCops_SwarmingReplyFollowHandle = .bss:0x8049A4EC; // type:label size:0x8 scope:global -_4Csis.gExtraCops_QuadrentFormingHandle = .bss:0x8049A4F4; // type:label size:0x8 scope:global -_4Csis.gExtraCops_SuspectPossiblyGoneHandle = .bss:0x8049A4FC; // type:label size:0x8 scope:global -_4Csis.gExtraCops_QuadrentMovingHandle = .bss:0x8049A504; // type:label size:0x8 scope:global -_4Csis.gExtraCops_OtherLeadHandle = .bss:0x8049A50C; // type:label size:0x8 scope:global -_4Csis.gExtraCops_PossibleSuspectHandle = .bss:0x8049A514; // type:label size:0x8 scope:global -_4Csis.gExtraCops_WrongSuspectHandle = .bss:0x8049A51C; // type:label size:0x8 scope:global -_4Csis.gExtraCops_SuspectGoneHandle = .bss:0x8049A524; // type:label size:0x8 scope:global -_4Csis.gExtraCops_RBWarningHandle = .bss:0x8049A52C; // type:label size:0x8 scope:global -_4Csis.gExtraCops_RBPositionHandle = .bss:0x8049A534; // type:label size:0x8 scope:global -_4Csis.gExtraCops_ExtraRBEngageHandle = .bss:0x8049A53C; // type:label size:0x8 scope:global -_4Csis.gExtraCops_ExtraRBAvertedHandle = .bss:0x8049A544; // type:label size:0x8 scope:global -_4Csis.gCross_CrossBUReplyHandle = .bss:0x8049A54C; // type:label size:0x8 scope:global -_4Csis.gCross_CrossFailReplyHandle = .bss:0x8049A554; // type:label size:0x8 scope:global -_4Csis.gCross_CrossRBFailReplyHandle = .bss:0x8049A55C; // type:label size:0x8 scope:global -_4Csis.gCross_CrossPursuitEscHandle = .bss:0x8049A564; // type:label size:0x8 scope:global -_4Csis.gCross_CrossSelfStrategyHandle = .bss:0x8049A56C; // type:label size:0x8 scope:global -_4Csis.gCross_CrossMultiStrategyHandle = .bss:0x8049A574; // type:label size:0x8 scope:global -_4Csis.gCross_CrossBailoutDeny_subHandle = .bss:0x8049A57C; // type:label size:0x8 scope:global -_4Csis.gD_DayHandle = .bss:0x8049A584; // type:label size:0x8 scope:global -_4Csis.gDispIntroRaceHandle = .bss:0x8049A58C; // type:label size:0x8 scope:global -_SoundAI = .bss:0x8049A594; // type:label size:0xC scope:global -CopMinClosingVelSq = .bss:0x8049A5A0; // type:label size:0x4 scope:local -last_jettison_print.26154 = .bss:0x8049A5A4; // type:label size:0x4 scope:local -map_table.26965 = .bss:0x8049A5A8; // type:label size:0x2BC0 scope:local -text.26984 = .bss:0x8049D168; // type:label size:0x40 scope:local -lcamPosInside.27614 = .bss:0x8049D1A8; // type:label size:0x20 scope:local -_.tmp_14.27615 = .bss:0x8049D1C8; // type:label size:0x4 scope:local -dataBackup.27616 = .bss:0x8049D1CC; // type:label size:0x60 scope:local -kFloatScaleUp = .bss:0x8049D22C; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x8049D230; // type:label size:0x4 scope:local -SkidSetList = .bss:0x8049D234; // type:label size:0x8 scope:global -ClanList = .bss:0x8049D23C; // type:label size:0x8 scope:global -bChunkLoaderTrackOBB = .bss:0x8049D244; // type:label size:0x10 scope:global -TrackPositionMarkerList = .bss:0x8049D254; // type:label size:0x8 scope:global -bChunkLoaderTrackPositionMarkers = .bss:0x8049D25C; // type:label size:0x10 scope:global -bChunkLoaderTrackInfo = .bss:0x8049D26C; // type:label size:0x10 scope:global -TheTrackPathManager = .bss:0x8049D27C; // type:label size:0x48C scope:global -bChunkLoaderTrackPath = .bss:0x8049D708; // type:label size:0x10 scope:global -bChunkLoaderTrackPathBarriers = .bss:0x8049D718; // type:label size:0x10 scope:global -TheTrackStreamer = .bss:0x8049D728; // type:label size:0x888 scope:global -bChunkLoaderTrackStreamingSection = .bss:0x8049DFB0; // type:label size:0x10 scope:global -bChunkLoaderTrackStreamingDiscBundle = .bss:0x8049DFC0; // type:label size:0x10 scope:global -bChunkLoaderTrackStreamingInfo = .bss:0x8049DFD0; // type:label size:0x10 scope:global -bChunkLoaderTrackStreamingBarriers = .bss:0x8049DFE0; // type:label size:0x10 scope:global -ScenerySectionHeaderList = .bss:0x8049DFF0; // type:label size:0x8 scope:global -HeirarchyMap = .bss:0x8049DFF8; // type:label size:0x10 scope:global -SceneryGroupList = .bss:0x8049E008; // type:label size:0x8 scope:global -bChunkLoaderSceneryGroup = .bss:0x8049E010; // type:label size:0x10 scope:global -bChunkLoaderScenerySection = .bss:0x8049E020; // type:label size:0x10 scope:global -bChunkLoaderOverrideInfos = .bss:0x8049E030; // type:label size:0x10 scope:global -bChunkLoaderSceneryHeirarchy = .bss:0x8049E040; // type:label size:0x10 scope:global -bChunkLoaderSceneryLighting = .bss:0x8049E050; // type:label size:0x10 scope:global -EnablePrecullingSpeed = .bss:0x8049E060; // type:label size:0x4 scope:local -SectionRemapperTable_Gamecube = .bss:0x8049E064; // type:label size:0x204 scope:global -SectionRemapperTable = .bss:0x8049E268; // type:label size:0x218 scope:global -TheVisibleSectionManager = .bss:0x8049E480; // type:label size:0x6830 scope:global -RegionLists = .bss:0x804A4CB0; // type:label size:0x48 scope:global -cPos = .bss:0x804A4CF8; // type:label size:0x10 scope:global -TintSunRiseAccessor = .bss:0x804A4D08; // type:label size:0x60 scope:global -TintMiddayAccessor = .bss:0x804A4D68; // type:label size:0x60 scope:global -EmptyEventTriggerPackList = .bss:0x804A4DC8; // type:label size:0x8 scope:global -EventTriggerPackList = .bss:0x804A4DD0; // type:label size:0x8 scope:global -EventHandlerList = .bss:0x804A4DD8; // type:label size:0x8 scope:global -MasterEventQueue = .bss:0x804A4DE0; // type:label size:0x8 scope:global -SkidTextureInfo = .bss:0x804A4DE8; // type:label size:0x74 scope:global -CurrentVisibleSectionTableMem = .bss:0x804A4E5C; // type:label size:0x15E scope:global -RegionInfo = .bss:0x804A4FBC; // type:label size:0x1C scope:global -SceneryOverrideHashTable = .bss:0x804A4FD8; // type:label size:0x202 scope:global -gPrecullerBooBooManager = .bss:0x804A51DA; // type:label size:0x800 scope:global -SE_PaletteFile = .bss:0x804A59DC; // type:label size:0x324 scope:global -EventManagerStats = .bss:0x804A5D00; // type:label size:0x14 scope:global -TriggerEventArray = .bss:0x804A5D14; // type:label size:0xA4 scope:global -hash.29913 = .bss:0x804A5E60; // type:label size:0x4 scope:local -_.tmp_21.29914 = .bss:0x804A5E64; // type:label size:0x4 scope:local -hash.29921 = .bss:0x804A5E68; // type:label size:0x4 scope:local -_.tmp_22.29922 = .bss:0x804A5E6C; // type:label size:0x4 scope:local -hash.30029 = .bss:0x804A5E80; // type:label size:0x4 scope:local -_.tmp_25.30030 = .bss:0x804A5E84; // type:label size:0x4 scope:local -hash.30037 = .bss:0x804A5E88; // type:label size:0x4 scope:local -_.tmp_26.30038 = .bss:0x804A5E8C; // type:label size:0x4 scope:local -hash.30079 = .bss:0x804A5EA0; // type:label size:0x4 scope:local -_.tmp_29.30080 = .bss:0x804A5EA4; // type:label size:0x4 scope:local -hash.30087 = .bss:0x804A5EA8; // type:label size:0x4 scope:local -_.tmp_30.30088 = .bss:0x804A5EAC; // type:label size:0x4 scope:local -hash.30142 = .bss:0x804A5ED0; // type:label size:0x4 scope:local -_.tmp_35.30143 = .bss:0x804A5ED4; // type:label size:0x4 scope:local -hash.30150 = .bss:0x804A5ED8; // type:label size:0x4 scope:local -_.tmp_36.30151 = .bss:0x804A5EDC; // type:label size:0x4 scope:local -sCarWorldPosition.31751 = .bss:0x804A5F20; // type:label size:0x10 scope:local -_.tmp_45.31752 = .bss:0x804A5F30; // type:label size:0x4 scope:local -TheParameterMapsManager.36151 = .bss:0x804A5F34; // type:label size:0x8 scope:local -_.tmp_46.36152 = .bss:0x804A5F3C; // type:label size:0x4 scope:local -AutoParameterAccessors.36159 = .bss:0x804A5F40; // type:label size:0x8 scope:local -_.tmp_47.36160 = .bss:0x804A5F48; // type:label size:0x4 scope:local -tCs.36848 = .bss:0x804A5F4C; // type:label size:0x4 scope:local -_.tmp_48.36849 = .bss:0x804A5F50; // type:label size:0x4 scope:local -tCd.36850 = .bss:0x804A5F54; // type:label size:0x4 scope:local -_.tmp_49.36851 = .bss:0x804A5F58; // type:label size:0x4 scope:local -tI.36852 = .bss:0x804A5F5C; // type:label size:0x4 scope:local -_.tmp_50.36853 = .bss:0x804A5F60; // type:label size:0x4 scope:local -kFloatScaleUp = .bss:0x804A5F64; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x804A5F68; // type:label size:0x4 scope:local -ZeroVector = .bss:0x804A5F6C; // type:label size:0x10 scope:global -_Physics_System_World = .bss:0x804A5F7C; // type:label size:0x14 scope:global -TheRaceParameters = .bss:0x804A5F90; // type:label size:0xA0 scope:global -TheOnlineManager = .bss:0x804A6030; // type:label size:0x1 scope:global -_19SmackableRenderConn.mList = .bss:0x804A6034; // type:label size:0x8 scope:global -_SmackableRenderConn = .bss:0x804A603C; // type:label size:0xC scope:global -CarPartCullingPlaneInfoTable = .bss:0x804A6048; // type:label size:0x344 scope:global -CarReplacementDecalHash = .bss:0x804A638C; // type:label size:0x68 scope:global -gTrunkAudioMarkerHash = .bss:0x804A63F4; // type:label size:0x30 scope:global -NISCopCarDoorOpenMarkers = .bss:0x804A6424; // type:label size:0x100 scope:global -NISCopCarDoorClosedMarkers = .bss:0x804A6524; // type:label size:0x100 scope:global -EnvMapEyeOffset = .bss:0x804A6624; // type:label size:0x10 scope:global -EnvMapCamOffset = .bss:0x804A6634; // type:label size:0x10 scope:global -CarScaleMatrix = .bss:0x804A6644; // type:label size:0x40 scope:global -TestSprite = .bss:0x804A6684; // type:label size:0x30 scope:global -LeftTireRotateZMatrix = .bss:0x804A66B4; // type:label size:0x40 scope:global -LeftTireMirrorMatrix = .bss:0x804A66F4; // type:label size:0x40 scope:global -StandardCubeModel = .bss:0x804A6734; // type:label size:0x18 scope:global -StandardDebugModel = .bss:0x804A674C; // type:label size:0x18 scope:global -FrontEndRenderingCarList = .bss:0x804A6764; // type:label size:0x8 scope:global -hull_Origin = .bss:0x804A676C; // type:label size:0x10 scope:local -hull_Normal = .bss:0x804A677C; // type:label size:0x10 scope:local -hullVertArray1 = .bss:0x804A678C; // type:label size:0x100 scope:local -hullVertArray2 = .bss:0x804A688C; // type:label size:0x100 scope:local -hullVertArray3 = .bss:0x804A698C; // type:label size:0x300 scope:local -cs_lightV = .bss:0x804A6C8C; // type:label size:0x10 scope:global -EPfe = .bss:0x804A6C9C; // type:label size:0x10 scope:local -feposoff = .bss:0x804A6CAC; // type:label size:0x10 scope:global -_Q33UTL11Collectionst8Listable2Z17VehicleRenderConni10._mTable = .bss:0x804A6CBC; // type:label size:0x38 scope:global -gTireStateList = .bss:0x804A6CF4; // type:label size:0x8 scope:global -_CarRenderConn = .bss:0x804A6CFC; // type:label size:0xC scope:global -Tweak_BlowOutNoise = .bss:0x804A6D08; // type:label size:0x10 scope:local -_HeliRenderConn = .bss:0x804A6D18; // type:label size:0xC scope:global -_VehicleFragmentConn = .bss:0x804A6D24; // type:label size:0xC scope:global -TheVehcileFrags = .bss:0x804A6D30; // type:label size:0x8 scope:global -SkydomeModel = .bss:0x804A6D38; // type:label size:0x18 scope:global -SkydomeLocalWorld = .bss:0x804A6D50; // type:label size:0x40 scope:global -SkydomeLocalReflectedWorld = .bss:0x804A6D90; // type:label size:0x40 scope:global -SkySpecularModel = .bss:0x804A6DD0; // type:label size:0x18 scope:global -SkySpecularLocalWorld = .bss:0x804A6DE8; // type:label size:0x40 scope:global -SKYtextable = .bss:0x804A6E28; // type:label size:0x18 scope:global -SPECtextable = .bss:0x804A6E40; // type:label size:0xC scope:global -SunPos = .bss:0x804A6E4C; // type:label size:0x10 scope:global -SpaceNodeTrashList = .bss:0x804A6E5C; // type:label size:0x8 scope:global -CarPartDB = .bss:0x804A6E64; // type:label size:0x11C scope:global -PresetCarList = .bss:0x804A6F80; // type:label size:0x8 scope:global -CarPartIDNames = .bss:0x804A6F88; // type:label size:0x414 scope:global -CarPartIDOldNames = .bss:0x804A739C; // type:label size:0xC scope:global -TheCarLoader = .bss:0x804A73A8; // type:label size:0x8B0 scope:global -WorldModelList = .bss:0x804A7C58; // type:label size:0x8 scope:global -RainAccessor = .bss:0x804A7C60; // type:label size:0x1C scope:global -CloudAccessor = .bss:0x804A7C7C; // type:label size:0x1C scope:global -windAxis = .bss:0x804A7C9C; // type:label size:0x10 scope:global -WindAccessor = .bss:0x804A7CAC; // type:label size:0x60 scope:global -FogAccessor = .bss:0x804A7D0C; // type:label size:0x60 scope:global -RainFogAccessor = .bss:0x804A7D6C; // type:label size:0x60 scope:global -FogBlendDistAccessor = .bss:0x804A7DCC; // type:label size:0x38 scope:global -_14FacePixelation.mWorldPos = .bss:0x804A7E04; // type:label size:0x10 scope:global -gHeliSheetManager = .bss:0x804A7E14; // type:label size:0x8 scope:global -bChunkLoaderHeliSheet = .bss:0x804A7E1C; // type:label size:0x10 scope:global -_9VehicleFX.vehicle_fx_maps = .bss:0x804A7E30; // type:label size:0x2C0 scope:local -NISCopCarDoorOpenAmount = .bss:0x804A80F4; // type:label size:0x10 scope:global -P = .bss:0x804A8108; // type:label size:0x44 scope:local -cs_OneOverZ = .bss:0x804A814C; // type:label size:0x4 scope:global -RVManchor = .bss:0x804A8150; // type:label size:0x4 scope:global -BaseSkyHash = .bss:0x804A8154; // type:label size:0x8 scope:global -SkyHash = .bss:0x804A8160; // type:label size:0x28 scope:global -CurrentSkyTextures = .bss:0x804A8188; // type:label size:0x28 scope:global -UserSkyLoadCallbackParam = .bss:0x804A81B0; // type:label size:0x4 scope:global -TempSlotTable = .bss:0x804A81B4; // type:label size:0x8 scope:global -DefragmentParams = .bss:0x804A81BC; // type:label size:0xD0 scope:global -SkinCompositeParameterCache = .bss:0x804A828C; // type:label size:0x140 scope:global -swatch_offset_cache = .bss:0x804A83CC; // type:label size:0x100 scope:global -alphadec = .bss:0x804A84CC; // type:label size:0x4 scope:global -thepicture = .bss:0x804A84D0; // type:label size:0x4 scope:local -lengthcount = .bss:0x804A84D4; // type:label size:0x4 scope:local -samplefac = .bss:0x804A84D8; // type:label size:0x4 scope:local -network = .bss:0x804A84DC; // type:label size:0x1400 scope:local -netindex = .bss:0x804A98DC; // type:label size:0x400 scope:local -bias = .bss:0x804A9CDC; // type:label size:0x400 scope:local -freq = .bss:0x804AA0DC; // type:label size:0x400 scope:local -radpower = .bss:0x804AA4DC; // type:label size:0x80 scope:local -wPos.10506 = .bss:0x804AA598; // type:label size:0x3C scope:local -_.tmp_7.10507 = .bss:0x804AA5D4; // type:label size:0x4 scope:local -wPos.10514 = .bss:0x804AA5D8; // type:label size:0x3C scope:local -_.tmp_8.10515 = .bss:0x804AA614; // type:label size:0x4 scope:local -roadSpline.21136 = .bss:0x804AA620; // type:label size:0x6C scope:local -_.tmp_10.21137 = .bss:0x804AA68C; // type:label size:0x4 scope:local -roadSpline.21173 = .bss:0x804AA698; // type:label size:0x6C scope:local -_.tmp_12.21174 = .bss:0x804AA704; // type:label size:0x4 scope:local -hash.22642 = .bss:0x804AA720; // type:label size:0x4 scope:local -_.tmp_16.22643 = .bss:0x804AA724; // type:label size:0x4 scope:local -hash.22650 = .bss:0x804AA728; // type:label size:0x4 scope:local -_.tmp_17.22651 = .bss:0x804AA72C; // type:label size:0x4 scope:local -hash.22724 = .bss:0x804AA760; // type:label size:0x4 scope:local -_.tmp_24.22725 = .bss:0x804AA764; // type:label size:0x4 scope:local -hash.22732 = .bss:0x804AA768; // type:label size:0x4 scope:local -_.tmp_25.22733 = .bss:0x804AA76C; // type:label size:0x4 scope:local -kFloatScaleUp = .bss:0x804AA770; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x804AA774; // type:label size:0x4 scope:local -_9WCollider.fWuidMap = .bss:0x804AA778; // type:label size:0x10 scope:global -_Q33UTL11Collectionst8Listable2Z9WCollideri100._mTable = .bss:0x804AA788; // type:label size:0x1A0 scope:global -_23WGridManagedDynamicElem.fgManagedDynamicElemList = .bss:0x804AA928; // type:label size:0x8 scope:global -_Physics_System_WRoadNetwork = .bss:0x804AA930; // type:label size:0x14 scope:global -_PathFinder = .bss:0x804AA944; // type:label size:0xC scope:global -bChunkLoaderWGrid = .bss:0x804AA950; // type:label size:0x10 scope:global -_8WSurface.kNull = .bss:0x804AA960; // type:label size:0x2 scope:global -_WorldBodyConn = .bss:0x804AA964; // type:label size:0xC scope:global -_13WorldBodyConn.mList = .bss:0x804AA970; // type:label size:0x8 scope:global -_WorldEffectConn = .bss:0x804AA978; // type:label size:0xC scope:global -_15WorldEffectConn.mList = .bss:0x804AA984; // type:label size:0x8 scope:global -_World_OneShotEffect = .bss:0x804AA98C; // type:label size:0xC scope:global -_World_UpdateBody = .bss:0x804AA998; // type:label size:0xC scope:global -DZSystemName = .bss:0x804AA9A8; // type:label size:0xA0 scope:local -DZDamageStimulus = .bss:0x804AAA48; // type:label size:0x1C scope:local -DZImpactStimulus = .bss:0x804AAA64; // type:label size:0x1C scope:local -_9WorldConn._Server = .bss:0x804AAA80; // type:label size:0x4 scope:local -kFloatScaleUp = .bss:0x804AAA88; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x804AAA8C; // type:label size:0x4 scope:local -TheGarageCarLoader.27807 = .bss:0x804AAA90; // type:label size:0x638 scope:local -_.tmp_15.27808 = .bss:0x804AB0C8; // type:label size:0x4 scope:local -kFloatScaleUp = .bss:0x804AB0CC; // type:label size:0x4 scope:local -kFloatScaleDown = .bss:0x804AB0D0; // type:label size:0x4 scope:local -TopOrFullScreenRide = .bss:0x804AB0D4; // type:label size:0x310 scope:global -gCarCustomizeManager = .bss:0x804AB3E4; // type:label size:0x1C4 scope:global -TopOrFullScreenLoadingReason = .bss:0x804AB5A8; // type:label size:0x4 scope:global -gPlayerNum = .bss:0x804AB5AC; // type:label size:0x4 scope:global -CustomizeHUDTexPackResources = .bss:0x804AB5B0; // type:label size:0x2C scope:global -CustomizeHUDTexTextureResources = .bss:0x804AB5DC; // type:label size:0xDC scope:global -NOA_ProgramExc = .bss:0x804B4DE8; // type:label scope:local -g_hHandle = .bss:0x804B4F40; // type:label size:0x4 scope:local -g_pBuffer = .bss:0x804B4F44; // type:label size:0x4 scope:local -g_nBlockCnt = .bss:0x804B4F48; // type:label size:0x4 scope:local -g_nRemainderCnt = .bss:0x804B4F4C; // type:label size:0x4 scope:local -g_nTotalBytesRemaining = .bss:0x804B4F50; // type:label size:0x4 scope:local -g_bDoFSACK = .bss:0x804B4F54; // type:label size:0x4 scope:local -g_nFSLastError = .bss:0x804B4F58; // type:label size:0x4 scope:local -g_FsResult = .bss:0x804B4F60; // type:label size:0xC scope:local -g_nDvdAudioCfg = .bss:0x804B4F80; // type:label size:0x4 scope:local -g_aBuffer = .bss:0x804B4FA0; // type:label size:0x20 scope:local -g_nDvdError = .bss:0x804B4FC0; // type:label size:0x4 scope:local -g_nDvdCurrOffset = .bss:0x804B4FC4; // type:label size:0x4 scope:local -g_nDvdReadLength = .bss:0x804B4FC8; // type:label size:0x4 scope:local -g_nBaseOffset = .bss:0x804B4FCC; // type:label size:0x4 scope:local -g_nEmuState = .bss:0x804B4FD0; // type:label size:0x1 scope:local -g_nLidState = .bss:0x804B4FD1; // type:label size:0x1 scope:local -_sn_iobf = .bss:0x804B4FE0; // type:label size:0x3C0 scope:local -_sn_stat_g = .bss:0x804B53A0; // type:label size:0xC scope:local -str.13 = .bss:0x804B53AC; // type:label size:0xA4 scope:local -pch.20 = .bss:0x804B5450; // type:label size:0x80 scope:local -pch.3 = .bss:0x804B54D0; // type:label size:0x80 scope:local -initialized.10 = .bss:0x804B5550; // type:label size:0x4 scope:local -g_lgDevices = .bss:0x804B5558; // type:object size:0x4920 scope:local -g_iGammaLookup = .bss:0x804B9E78; // type:object size:0x81 scope:local -g_iQuarterSineTable = .bss:0x804B9EFC; // type:object size:0x80 scope:local -g_iRampUpTable = .bss:0x804B9F7C; // type:object size:0x80 scope:local -ia$1518 = .bss:0x804B9FFC; // type:object size:0x28 scope:local -DriveInfo = .bss:0x804BA040; // type:object size:0x20 scope:local -...bss.0 = .bss:0x804BA040; // type:label scope:local -DriveBlock = .bss:0x804BA060; // type:object size:0x30 scope:local -__OSRebootParams = .bss:0x804BA090; // type:object size:0x1C scope:global -...bss.0 = .bss:0x804BA0B0; // type:label scope:local -__OSErrorTable = .bss:0x804BA0B0; // type:object size:0x44 scope:global -Scb = .bss:0x804BA100; // type:object size:0x54 scope:local -...bss.0 = .bss:0x804BA100; // type:label scope:local -RunQueue = .bss:0x804BA158; // type:object size:0x100 scope:local -...bss.0 = .bss:0x804BA158; // type:label scope:local -IdleThread = .bss:0x804BA258; // type:object size:0x318 scope:local -DefaultThread = .bss:0x804BA570; // type:object size:0x318 scope:local -IdleContext = .bss:0x804BA888; // type:object size:0x2C8 scope:local -BB2 = .bss:0x804BAB60; // type:object size:0x20 scope:local -...bss.0 = .bss:0x804BAB60; // type:label scope:local -CurrDiskID = .bss:0x804BAB80; // type:object size:0x20 scope:local -DummyCommandBlock = .bss:0x804BABA0; // type:object size:0x30 scope:local -ResetAlarm = .bss:0x804BABD0; // type:object size:0x28 scope:local -WaitingQueue = .bss:0x804BABF8; // type:object size:0x20 scope:local -...bss.0 = .bss:0x804BABF8; // type:label scope:local -bb2Buf = .bss:0x804BAC18; // type:object size:0x3F scope:local -block$18 = .bss:0x804BAC58; // type:object size:0x30 scope:local -CommandList = .bss:0x804BAC88; // type:object size:0x3C scope:local -...bss.0 = .bss:0x804BAC88; // type:label scope:local -AlarmForWA = .bss:0x804BACC8; // type:object size:0x28 scope:local -AlarmForTimeout = .bss:0x804BACF0; // type:object size:0x28 scope:local -AlarmForBreak = .bss:0x804BAD18; // type:object size:0x28 scope:local -Prev = .bss:0x804BAD40; // type:object size:0xC scope:local -Curr = .bss:0x804BAD4C; // type:object size:0xC scope:local -regs = .bss:0x804BAD58; // type:object size:0x76 scope:local -...bss.0 = .bss:0x804BAD58; // type:label scope:local -shdwRegs = .bss:0x804BADD0; // type:object size:0x76 scope:local -HorVer = .bss:0x804BAE48; // type:object size:0x58 scope:local -Pad = .bss:0x804BAEA0; // type:object size:0x30 scope:local -...bss.0 = .bss:0x804BAEA0; // type:label scope:local -Type = .bss:0x804BAED0; // type:object size:0x10 scope:local -...bss.0 = .bss:0x804BAED0; // type:label scope:local -Origin = .bss:0x804BAEE0; // type:object size:0x30 scope:local -CmdProbeDevice = .bss:0x804BAF10; // type:object size:0x10 scope:local -...bss.0 = .bss:0x804BAF20; // type:label scope:local -__CARDBlock = .bss:0x804BAF20; // type:object size:0x220 scope:global -__CARDDiskNone = .bss:0x804BB140; // type:object size:0x20 scope:global -FifoObj = .bss:0x804BB160; // type:object size:0x80 scope:local -...bss.0 = .bss:0x804BB160; // type:label scope:local -gxData = .bss:0x804BB1E0; // type:object size:0x5B0 scope:local -DisplayListFifo = .bss:0x804BB790; // type:object size:0x24 scope:local -...bss.0 = .bss:0x804BB790; // type:label scope:local -__savedGXdata = .bss:0x804BB7B4; // type:object size:0x5B0 scope:local -Ecb = .bss:0x804BBD68; // type:object size:0xC0 scope:local -Packet = .bss:0x804BBE28; // type:object size:0x80 scope:local -...bss.0 = .bss:0x804BBE28; // type:label scope:local -Alarm = .bss:0x804BBEA8; // type:object size:0xA0 scope:local -TypeTime = .bss:0x804BBF48; // type:object size:0x20 scope:local -XferTime = .bss:0x804BBF68; // type:object size:0x20 scope:local -TypeCallback = .bss:0x804BBF88; // type:object size:0x40 scope:local -RDSTHandler = .bss:0x804BBFC8; // type:object size:0x10 scope:local -InputBufferValid = .bss:0x804BBFD8; // type:object size:0x10 scope:local -InputBuffer = .bss:0x804BBFE8; // type:object size:0x20 scope:local -InputBufferVcount = .bss:0x804BC008; // type:object size:0x10 scope:local -cmdFixDevice$327 = .bss:0x804BC018; // type:object size:0x10 scope:local -__SISteering = .bss:0x804BC028; // type:object size:0xA0 scope:global -Ecb = .bss:0x804BC0C8; // type:object size:0x18 scope:local -...bss.0 = .bss:0x804BC0C8; // type:label scope:local -_4RCMP.rcmp_sys = .bss:0x804BC0E0; // type:label size:0x10 scope:global -myalloc = .bss:0x804BC0F0; // type:label size:0x14 scope:global -madvlctbl1 = .bss:0x804BC104; // type:label size:0x800 scope:global -madvlctbl2 = .bss:0x804BC904; // type:label size:0x400 scope:global -madvlctbl3 = .bss:0x804BCD04; // type:label size:0x400 scope:global -madvlctbl4 = .bss:0x804BD104; // type:label size:0x100 scope:global -madquant = .bss:0x804BD204; // type:label size:0x100 scope:global -luma = .bss:0x804BD304; // type:label size:0x400 scope:local -chroma = .bss:0x804BD704; // type:label size:0x200 scope:local -clipbiastbl = .bss:0x804BD904; // type:label size:0x200 scope:local -idctinput = .bss:0x804BDB04; // type:label size:0x100 scope:global -work = .bss:0x804BDC04; // type:label size:0x100 scope:local -VP6_DCQuantScaleP = .bss:0x804BDD04; // type:label size:0x100 scope:local -LimitVal_VP31 = .bss:0x804BDE04; // type:label size:0x300 scope:global -FData = .bss:0x804BE104; // type:label size:0x160 scope:local -idct = .bss:0x804BE264; // type:label size:0x104 scope:global -idctc = .bss:0x804BE368; // type:label size:0x104 scope:global -DeringModifierV1 = .bss:0x804BE46C; // type:label size:0x100 scope:global -FData.84 = .bss:0x804BE56C; // type:label size:0x90 scope:local -sndaems = .bss:0x804BE5FC; // type:label size:0x38 scope:global -SNDAEMSalmbpriority = .bss:0x804BE634; // type:label size:0x4 scope:global -SNDAEMSalmbfilename = .bss:0x804BE638; // type:label size:0x4 scope:global -SNDAEMSalmbfileoffset = .bss:0x804BE63C; // type:label size:0x4 scope:global -SNDAEMSalmbstreamfilename = .bss:0x804BE640; // type:label size:0x4 scope:global -SNDAEMSalmbstreamfileoffset = .bss:0x804BE644; // type:label size:0x4 scope:global -SNDAEMSalmbploadbuf = .bss:0x804BE648; // type:label size:0x4 scope:global -SNDAEMSalmbloadbufsize = .bss:0x804BE64C; // type:label size:0x4 scope:global -SNDAEMSalmbmalloccb = .bss:0x804BE650; // type:label size:0x4 scope:global -SNDAEMSalmbfhandle = .bss:0x804BE654; // type:label size:0x4 scope:global -SNDAEMSalmbpmb = .bss:0x804BE658; // type:label size:0x4 scope:global -SNDAEMSalmbmodulebankhandle = .bss:0x804BE65C; // type:label size:0x4 scope:global -SNDAEMSalmbpatchbankhandle = .bss:0x804BE660; // type:label size:0x4 scope:global -SNDAEMSalmbmidibankhandle = .bss:0x804BE664; // type:label size:0x4 scope:global -SNDAEMSalmbfileop = .bss:0x804BE668; // type:label size:0x4 scope:global -SNDAEMSalmbstage = .bss:0x804BE66C; // type:label size:0x1 scope:global -SNDAEMSalmblasterror = .bss:0x804BE66D; // type:label size:0x1 scope:global -SNDAEMSalmbmpmodulebank = .bss:0x804BE670; // type:label size:0x4 scope:global -SNDAEMSalmbmstreamfilename = .bss:0x804BE674; // type:label size:0x4 scope:global -SNDAEMSalmbmstreamfileoffset = .bss:0x804BE678; // type:label size:0x4 scope:global -SNDAEMSalmbmmalloccb = .bss:0x804BE67C; // type:label size:0x4 scope:global -SNDAEMSalmbmpmb = .bss:0x804BE680; // type:label size:0x4 scope:global -SNDAEMSalmbmpatchbankhandle = .bss:0x804BE684; // type:label size:0x4 scope:global -SNDAEMSalmbmmidibankhandle = .bss:0x804BE688; // type:label size:0x4 scope:global -SNDAEMSalmbmpatchloaded = .bss:0x804BE68C; // type:label size:0x1 scope:global -SNDAEMSalmbmmidiloaded = .bss:0x804BE68D; // type:label size:0x1 scope:global -sndvoicereserved = .bss:0x804BE690; // type:label size:0xC scope:global -sndbams = .bss:0x804BE69C; // type:label size:0x14 scope:global -sndgs = .bss:0x804BE6B0; // type:label size:0x244 scope:global -sndpps = .bss:0x804BE8F4; // type:label size:0x384 scope:global -SNDIrandseed = .bss:0x804BEC78; // type:label size:0x18 scope:global -_3Snd.gVariableTimerList = .bss:0x804BEC90; // type:label size:0x4 scope:global -_3Snd.gVariableTimerTick = .bss:0x804BEC94; // type:label size:0x4 scope:global -_3Snd.gVariableTimerPeriod = .bss:0x804BEC98; // type:label size:0x4 scope:global -sndss = .bss:0x804BEC9C; // type:label size:0x80 scope:global -_3Snd.gVoicesNext = .bss:0x804BED1C; // type:label size:0x20 scope:global -_3Snd.gOutputSampleRateNext = .bss:0x804BED3C; // type:label size:0x20 scope:global -_3Snd.gOutputModeNext = .bss:0x804BED5C; // type:label size:0x8 scope:global -_3Snd.heapsize = .bss:0x804BED64; // type:label size:0x4 scope:global -_3Snd.gSpeakerPositions = .bss:0x804BED68; // type:label size:0x14 scope:global -_3Snd.gTotalOutputChannels = .bss:0x804BED7C; // type:label size:0x1 scope:global -_3Snd.gFoldDownTarget = .bss:0x804BED80; // type:label size:0x4 scope:global -__MIXChannel = .bss:0x804BED88; // type:label size:0x1600 scope:local -numoutputchannels = .bss:0x804C0388; // type:label size:0x4 scope:local -ptr.447 = .bss:0x804C03A0; // type:label size:0x4 scope:local -snddrv = .bss:0x804C03C0; // type:label size:0xC0C0 scope:global -fxBusesLinkList = .bss:0x804CC480; // type:label size:0x4 scope:global -sndfx = .bss:0x804CC484; // type:label size:0x8 scope:global -modlist = .bss:0x804CC48C; // type:label size:0x4 scope:global -conlist = .bss:0x804CC490; // type:label size:0x4 scope:global -sndmix = .bss:0x804CC494; // type:label size:0x1E8 scope:global -sndmixwritelog = .bss:0x804CC67C; // type:label size:0x4 scope:global -MIXinitfn = .bss:0x804CC680; // type:label size:0x4 scope:global -MIXrestorefn = .bss:0x804CC684; // type:label size:0x4 scope:global -MIXaudioslicefn = .bss:0x804CC688; // type:label size:0x4 scope:global -MIXplayinitfn = .bss:0x804CC68C; // type:label size:0x4 scope:global -MIXplayfn = .bss:0x804CC690; // type:label size:0x4 scope:global -MIXstopfn = .bss:0x804CC694; // type:label size:0x4 scope:global -MIXsetpitchfn = .bss:0x804CC698; // type:label size:0x4 scope:global -sndaztospkr_buf = .bss:0x804CC69C; // type:label size:0x4 scope:global -sndaztospkr = .bss:0x804CC6A0; // type:label size:0x18 scope:global -_3Snd.CODANew = .bss:0x804CC6B8; // type:label size:0x4 scope:global -_3Snd.CODADelete = .bss:0x804CC6BC; // type:label size:0x4 scope:global -sndaram = .bss:0x804CC6C0; // type:label size:0x10 scope:global -_4Csis.gSystems = .bss:0x804CC6D0; // type:label size:0x4 scope:global -_4Csis.gMutexHandle = .bss:0x804CC6D4; // type:label size:0x18 scope:global -_16PathToIAllocator.memimptags = .bss:0x804CC6EC; // type:label size:0xC scope:global -gCallbacks = .bss:0x804CC6F8; // type:label size:0x14 scope:global -gEventDats = .bss:0x804CC70C; // type:label size:0x40 scope:global -gVoxEvents = .bss:0x804CC74C; // type:label size:0x140 scope:global -gVoxInGame = .bss:0x804CC88C; // type:label size:0x40 scope:global -gGameNum = .bss:0x804CC8CC; // type:label size:0x4 scope:global -gDataRate = .bss:0x804CC8D0; // type:label size:0x4 scope:global -gFilterSetting = .bss:0x804CC8D4; // type:label size:0x20 scope:global -gPreLoadTicks = .bss:0x804CC8F4; // type:label size:0x4 scope:global -gLastTick = .bss:0x804CC8F8; // type:label size:0x4 scope:global -gLastSubTick = .bss:0x804CC8FC; // type:label size:0x2 scope:global -gEventChoice = .bss:0x804CC900; // type:label size:0x500 scope:local -gRandArray = .bss:0x804CCE00; // type:label size:0x80 scope:global -nulldrv = .bss:0x804CCE80; // type:label size:0x14 scope:local -FileAlignTvp = .bss:0x804CCE94; // type:label size:0xC scope:global -mutex = .bss:0x804CCEA0; // type:label size:0x1C scope:local -GcDvd_fdd = .bss:0x804CCEC0; // type:label size:0x24 scope:global -ReadFileThreadMsgQ = .bss:0x804CCEE4; // type:label size:0x20 scope:local -ReadFileThreadMsgData = .bss:0x804CCF04; // type:label size:0x80 scope:local -gCurRead = .bss:0x804CCFA0; // type:label size:0x8060 scope:local -GcHd_fdd = .bss:0x804D5000; // type:label size:0x14 scope:global -Alarm = .bss:0x804D5018; // type:label size:0x28 scope:local -TimerThreadMsgQ = .bss:0x804D5040; // type:label size:0x20 scope:global -TimerThreadMsgData = .bss:0x804D5060; // type:label size:0x80 scope:global -TimerThread = .bss:0x804D50E0; // type:label size:0x318 scope:global -TimerThreadStack = .bss:0x804D53F8; // type:label size:0x1000 scope:global -systemtasksubs = .bss:0x804D63F8; // type:label size:0x140 scope:local -_Q26Realmc6Locale.gTrcMsgBuffer = .bss:0x804D6540; // type:label size:0x2800 scope:local -statInfo.695 = .bss:0x804D8D40; // type:label size:0x6C scope:local -sMsg.608 = .bss:0x804D8DAC; // type:label size:0x78 scope:local -_Q26Realmc11GCInterface.mMsgTimer = .bss:0x804D8E24; // type:label size:0x10 scope:global -_Q26Realmc11GCInterface.mBlockCalculator = .bss:0x804D8E34; // type:label size:0x18 scope:global -_Q26Realmc11GCInterface.mTaskManager = .bss:0x804D8E4C; // type:label size:0x50 scope:global -_Q26Realmc11GCInterface.mFindResult = .bss:0x804D8E9C; // type:label size:0x9C scope:global -_Q26Realmc11GCInterface.mTaskTrcStartGame = .bss:0x804D8F38; // type:label size:0x7C scope:global -_Q26Realmc11GCInterface.mTaskTrcCardExists = .bss:0x804D8FB4; // type:label size:0x30 scope:global -_Q26Realmc11GCInterface.mTaskTrcGetCardInfo = .bss:0x804D8FE4; // type:label size:0x3C scope:global -_Q26Realmc11GCInterface.mTaskTrcSaveFile = .bss:0x804D9020; // type:label size:0x74 scope:global -_Q26Realmc11GCInterface.mTaskTrcLoadFile = .bss:0x804D9094; // type:label size:0x64 scope:global -_Q26Realmc11GCInterface.mTaskTrcDeleteFile = .bss:0x804D90F8; // type:label size:0x64 scope:global -_Q26Realmc11GCInterface.mTaskTrcListFiles = .bss:0x804D915C; // type:label size:0x68 scope:global -_Q26Realmc11GCInterface.mTaskCardExists = .bss:0x804D91C4; // type:label size:0x28 scope:global -_Q26Realmc11GCInterface.mTaskGetCardInfo = .bss:0x804D91EC; // type:label size:0x24 scope:global -_Q26Realmc11GCInterface.mTaskMount = .bss:0x804D9210; // type:label size:0x24 scope:global -_Q26Realmc11GCInterface.mTaskUnmount = .bss:0x804D9234; // type:label size:0x24 scope:global -_Q26Realmc11GCInterface.mTaskOpen = .bss:0x804D9258; // type:label size:0x2C scope:global -_Q26Realmc11GCInterface.mTaskClose = .bss:0x804D9284; // type:label size:0x28 scope:global -_Q26Realmc11GCInterface.mTaskRead = .bss:0x804D92AC; // type:label size:0x34 scope:global -_Q26Realmc11GCInterface.mTaskWrite = .bss:0x804D92E0; // type:label size:0x34 scope:global -_Q26Realmc11GCInterface.mTaskSeek = .bss:0x804D9314; // type:label size:0x30 scope:global -_Q26Realmc11GCInterface.mTaskFlush = .bss:0x804D9344; // type:label size:0x28 scope:global -_Q26Realmc11GCInterface.mTaskDelete = .bss:0x804D936C; // type:label size:0x48 scope:global -_Q26Realmc11GCInterface.mTaskSetAttribute = .bss:0x804D93B4; // type:label size:0x4C scope:global -_Q26Realmc11GCInterface.mTaskFind = .bss:0x804D9400; // type:label size:0x4C scope:global -_Q26Realmc11GCInterface.mTaskTrcMount = .bss:0x804D944C; // type:label size:0x34 scope:global -_Q26Realmc11GCInterface.mTaskTrcFormat = .bss:0x804D9480; // type:label size:0x34 scope:global -_Q26Realmc11GCInterface.mTaskShowCardStatusMsg = .bss:0x804D94B4; // type:label size:0x34 scope:global -_Q26Realmc11GCInterface.mTaskTrcCheckSpace = .bss:0x804D94E8; // type:label size:0x88 scope:global -_Q26Realmc11GCInterface.mTaskMsg = .bss:0x804D9570; // type:label size:0x78 scope:global -_6Realmc.sCardName = .bss:0x804D95E8; // type:label size:0x60 scope:local -findFileInfo.635 = .bss:0x804D9648; // type:label size:0x20 scope:local -AbortMsgBuffer = .bss:0x804D9668; // type:label size:0x800 scope:local -SystemAbortBuffer = .bss:0x804D9E68; // type:label size:0x800 scope:local -_9RealInput.gPadstat = .bss:0x804DA668; // type:label size:0x30 scope:global -FatalParam = .bss:0x804DA698; // type:object size:0xC scope:local -...bss.0 = .bss:0x804DA698; // type:label scope:local -FatalContext = .bss:0x804DA6A8; // type:object size:0x2C8 scope:local -__AXStackHead = .bss:0x804DA970; // type:object size:0x80 scope:local -...bss.0 = .bss:0x804DA970; // type:label scope:local -__AXStackTail = .bss:0x804DA9F0; // type:object size:0x80 scope:local -__AXBufferAuxA = .bss:0x804DAA80; // type:object size:0x1680 scope:local -...bss.0 = .bss:0x804DAA80; // type:label scope:local -__AXBufferAuxB = .bss:0x804DC100; // type:object size:0x1680 scope:local -__AXCommandList = .bss:0x804DD780; // type:object size:0x600 scope:local -__AXOutBuffer = .bss:0x804DDD80; // type:object size:0x780 scope:local -...bss.0 = .bss:0x804DDD80; // type:label scope:local -__AXOutSBuffer = .bss:0x804DE500; // type:object size:0x280 scope:local -__AXDramImage = .bss:0x804DE780; // type:object size:0x4000 scope:local -__AXDSPTask = .bss:0x804E2780; // type:object size:0x50 scope:local -__AXStudio = .bss:0x804E2800; // type:object size:0x36 scope:local -...bss.0 = .bss:0x804E2800; // type:label scope:local -__AXPB = .bss:0x804E2840; // type:object size:0x3D00 scope:local -...bss.0 = .bss:0x804E2840; // type:label scope:local -__AXITD = .bss:0x804E6540; // type:object size:0x1000 scope:local -__AXUpdates = .bss:0x804E7540; // type:object size:0x4000 scope:local -__AXVPB = .bss:0x804EB540; // type:object size:0x8B00 scope:local -_14AISpawnManager.mSpawnSegment = .bss:0x804F4040; // type:object size:0xC8 scope:global -_12bChunkLoader.sLoaderTable = .bss:0x804F4108; // type:object size:0x100 scope:global -_12bChunkLoader.sNumLoaders = .bss:0x804F4208; // type:object size:0x40 scope:global -_12WRoadNetwork.fInvalidProfile = .bss:0x804F4248; // type:object size:0x40 scope:global -_8EAXSound.m_pStateMgr = .bss:0x804F4288; // type:object size:0x34 scope:global -_18HudResourceManager.mCustHudTexPackName = .bss:0x804F42BC; // type:object size:0x20 scope:global -_18HudResourceManager.mCustomizeHUDTexTextureResources = .bss:0x804F42DC; // type:object size:0x14 scope:global -_20GrandSceneryCullInfo.SceneryDrawInfoTable = .bss:0x804F42F0; // type:object size:0xA410 scope:global -_14EAXAemsManager.m_RequiredSlots = .bss:0x804FE700; // type:object size:0x10 scope:global -_13SFXObj_Reverb.m_pFXEditPatch = .bss:0x804FE710; // type:object size:0x30 scope:global -_16FEAnyMovieScreen.ReturnToPackageName = .bss:0x804FE740; // type:object size:0x40 scope:global -_13MemoryCardImp.gContentName = .bss:0x804FE780; // type:object size:0x40 scope:global -_8Showcase.FromColor = .bss:0x804FE7C0; // type:object size:0xC scope:global -_9RigidBody.mMaps = .bss:0x804FE7CC; // type:object size:0x100 scope:global -_t10ScratchPtr1ZQ29RigidBody8Volatile.mPointer = .bss:0x804FE8CC; // type:object size:0x100 scope:global -_10QueuedFile.DecompressionTable = .bss:0x804FE9CC; // type:object size:0x80 scope:global -_15SimpleRigidBody.mMaps = .bss:0x804FEA4C; // type:object size:0x180 scope:global -_t10ScratchPtr1ZQ215SimpleRigidBody8Volatile.mPointer = .bss:0x804FEBCC; // type:object size:0x180 scope:global -_Q26Realmc11GCInterface.mCardName = .bss:0x804FED4C; // type:object size:0x60 scope:global -__bss_end = .bss:0x804FEDAC; // type:object scope:global -_e_bss = .bss:0x804FEDAC; // type:object scope:global -__SDATA_START__ = .sdata:0x804FEDC0; // type:object scope:global -_impure_ptr = .sdata:0x804FEDC0; // type:object size:0x4 scope:global -_sn_IO_buf_ptr = .sdata:0x804FEDC4; // type:object size:0x4 scope:global -cumulative_written.21 = .sdata:0x804FEDD0; // type:object size:0x4 scope:local -pch_pointer.22 = .sdata:0x804FEDD4; // type:object size:0x4 scope:local -cumulative_written.4 = .sdata:0x804FEDD8; // type:object size:0x4 scope:local -pch_pointer.5 = .sdata:0x804FEDDC; // type:object size:0x4 scope:local -maxExponent = .sdata:0x804FEDE0; // type:object size:0x4 scope:local -__mb_cur_max = .sdata:0x804FEDE4; // type:object size:0x4 scope:global -__OSVersion = .sdata:0x804FF3B0; // type:object size:0x4 scope:global -@116 = .sdata:0x804FF3B4; // type:object size:0x6 scope:local -@163 = .sdata:0x804FF3BC; // type:object size:0x4 scope:local -__OSCurrHeap = .sdata:0x804FF3C0; // type:object size:0x4 scope:global -__OSArenaLo = .sdata:0x804FF3C8; // type:object size:0x4 scope:local -__OSFpscrEnableBits = .sdata:0x804FF3D0; // type:object size:0x4 scope:global -@76 = .sdata:0x804FF3D4; // type:object size:0x2 scope:local -@213 = .sdata:0x804FF3D8; // type:object size:0x3 scope:local -FontEncode = .sdata:0x804FF3E0; // type:object size:0x2 scope:local -SwitchThreadCallback = .sdata:0x804FF3E8; // type:object size:0x4 scope:local -@833 = .sdata:0x804FF3EC; // type:object size:0x1 scope:local -Unit01 = .sdata:0x804FF3F8; // type:object size:0x8 scope:local -@118 = .sdata:0x804FF400; // type:object size:0x8 scope:local -__DVDVersion = .sdata:0x804FF408; // type:object size:0x4 scope:global -autoInvalidation = .sdata:0x804FF40C; // type:object size:0x4 scope:local -checkOptionalCommand = .sdata:0x804FF410; // type:object size:0x4 scope:local -@23 = .sdata:0x804FF414; // type:object size:0x6 scope:local -DmaCommand = .sdata:0x804FF41C; // type:object size:0x4 scope:local -@790 = .sdata:0x804FF420; // type:object size:0x1 scope:local -@63 = .sdata:0x804FF428; // type:object size:0x1 scope:local -@64 = .sdata:0x804FF42C; // type:object size:0x5 scope:local -@65 = .sdata:0x804FF434; // type:object size:0x5 scope:local -@67 = .sdata:0x804FF43C; // type:object size:0x7 scope:local -@68 = .sdata:0x804FF444; // type:object size:0x7 scope:local -@77 = .sdata:0x804FF44C; // type:object size:0x8 scope:local -@99 = .sdata:0x804FF454; // type:object size:0x6 scope:local -@100 = .sdata:0x804FF45C; // type:object size:0x2 scope:local -@37 = .sdata:0x804FF468; // type:object size:0x2 scope:local -@42 = .sdata:0x804FF46C; // type:object size:0x4 scope:local -@43 = .sdata:0x804FF470; // type:object size:0x3 scope:local -FirstRead = .sdata:0x804FF478; // type:object size:0x4 scope:local -__VIVersion = .sdata:0x804FF480; // type:object size:0x4 scope:global -@537 = .sdata:0x804FF484; // type:object size:0x5 scope:local -__PADVersion = .sdata:0x804FF490; // type:object size:0x4 scope:global -ResettingChan = .sdata:0x804FF494; // type:object size:0x4 scope:local -XPatchBits = .sdata:0x804FF498; // type:object size:0x4 scope:local -AnalogMode = .sdata:0x804FF49C; // type:object size:0x4 scope:local -Spec = .sdata:0x804FF4A0; // type:object size:0x4 scope:local -MakeStatus = .sdata:0x804FF4A4; // type:object size:0x4 scope:local -CmdReadOrigin = .sdata:0x804FF4A8; // type:object size:0x4 scope:local -CmdCalibrate = .sdata:0x804FF4AC; // type:object size:0x4 scope:local -__AIVersion = .sdata:0x804FF4B0; // type:object size:0x4 scope:global -__ARVersion = .sdata:0x804FF4B8; // type:object size:0x4 scope:global -__CARDVendorID = .sdata:0x804FF4C0; // type:object size:0x2 scope:global -__CARDPermMask = .sdata:0x804FF4C2; // type:object size:0x1 scope:global -__CARDVersion = .sdata:0x804FF4C8; // type:object size:0x4 scope:global -next = .sdata:0x804FF4D0; // type:object size:0x4 scope:local -__GXVersion = .sdata:0x804FF4D8; // type:object size:0x4 scope:global -tbl1$241 = .sdata:0x804FF4E0; // type:object size:0x4 scope:local -tbl2$242 = .sdata:0x804FF4E4; // type:object size:0x4 scope:local -tbl3$243 = .sdata:0x804FF4E8; // type:object size:0x4 scope:local -GXTexMode0Ids = .sdata:0x804FF4F0; // type:object size:0x8 scope:local -GXTexMode1Ids = .sdata:0x804FF4F8; // type:object size:0x8 scope:local -GXTexImage0Ids = .sdata:0x804FF500; // type:object size:0x8 scope:local -GXTexImage1Ids = .sdata:0x804FF508; // type:object size:0x8 scope:local -GXTexImage2Ids = .sdata:0x804FF510; // type:object size:0x8 scope:local -GXTexImage3Ids = .sdata:0x804FF518; // type:object size:0x8 scope:local -GXTexTlutIds = .sdata:0x804FF520; // type:object size:0x8 scope:local -GX2HWFiltConv = .sdata:0x804FF528; // type:object size:0x6 scope:local -HW2GXFiltConv = .sdata:0x804FF530; // type:object size:0x8 scope:local -__EXIVersion = .sdata:0x804FF538; // type:object size:0x4 scope:global -@480 = .sdata:0x804FF53C; // type:object size:0x5 scope:local -@481 = .sdata:0x804FF544; // type:object size:0x6 scope:local -@482 = .sdata:0x804FF54C; // type:object size:0x7 scope:local -@483 = .sdata:0x804FF554; // type:object size:0x5 scope:local -@484 = .sdata:0x804FF55C; // type:object size:0x7 scope:local -@488 = .sdata:0x804FF564; // type:object size:0x4 scope:local -@491 = .sdata:0x804FF568; // type:object size:0x8 scope:local -__SIVersion = .sdata:0x804FF570; // type:object size:0x4 scope:global -@458 = .sdata:0x804FF574; // type:object size:0x5 scope:local -@469 = .sdata:0x804FF57C; // type:object size:0x8 scope:local -SendCount = .sdata:0x804FF588; // type:object size:0x1 scope:local -pucEXI2InputPending = .sdata:0x804FF590; // type:object size:0x4 scope:local -exi = .sdata:0x804FF598; // type:object size:0x4 scope:local -_3Vp6.gAllocator = .sdata:0x804FF5A0; // type:object size:0x4 scope:local -CurrentFrame = .sdata:0x804FF5A8; // type:object size:0x4 scope:global -f128 = .sdata:0x804FF5B0; // type:object size:0x4 scope:local -f64 = .sdata:0x804FF5B4; // type:object size:0x4 scope:local -_4Path.pfstate = .sdata:0x804FF5B8; // type:object size:0x4 scope:global -_4Path.songprogress = .sdata:0x804FF5BC; // type:object size:0x4 scope:global -_4Path.eventrelease = .sdata:0x804FF5C0; // type:object size:0x4 scope:global -_4Path.eventaction = .sdata:0x804FF5C4; // type:object size:0x4 scope:global -_4Path.inited = .sdata:0x804FF5C8; // type:object size:0x1 scope:global -_4Path.paused = .sdata:0x804FF5C9; // type:object size:0x1 scope:global -_4Path.volscale = .sdata:0x804FF5CA; // type:object size:0x1 scope:global -_4Path.bankservice = .sdata:0x804FF5CB; // type:object size:0x1 scope:global -_4Path.timercallsinarow = .sdata:0x804FF5CC; // type:object size:0x4 scope:global -_4Path.lasttimercb = .sdata:0x804FF5D0; // type:object size:0x4 scope:global -_4Path.milliseconds = .sdata:0x804FF5D4; // type:object size:0x4 scope:global -_4Path.debugchannels = .sdata:0x804FF5D8; // type:object size:0x4 scope:global -_4Path.defaultfxbus = .sdata:0x804FF5DC; // type:object size:0x4 scope:global -_4Path.memalloc = .sdata:0x804FF5E0; // type:object size:0x4 scope:global -_4Path.memfree = .sdata:0x804FF5E4; // type:object size:0x4 scope:global -_4Path.timercalls = .sdata:0x804FF5E8; // type:object size:0x4 scope:global -_4Path.timertimespent = .sdata:0x804FF5EC; // type:object size:0x4 scope:global -_4Path.taskcalls = .sdata:0x804FF5F0; // type:object size:0x4 scope:global -_4Path.tasktimespent = .sdata:0x804FF5F4; // type:object size:0x4 scope:global -_Q24Path11IPathToReal.realimp = .sdata:0x804FF5F8; // type:object size:0x4 scope:global -_Q24Path10IPathToSnd.sndimp = .sdata:0x804FF5FC; // type:object size:0x4 scope:global -pathsemaphore = .sdata:0x804FF600; // type:object size:0x4 scope:global -_16PathToIAllocator.memimp = .sdata:0x804FF604; // type:object size:0x4 scope:global -lastwhile.78 = .sdata:0x804FF608; // type:object size:0x4 scope:local -lastendif.79 = .sdata:0x804FF60C; // type:object size:0x4 scope:local -pDeviceMem = .sdata:0x804FF610; // type:object size:0x4 scope:local -bIsFileSysInitialized = .sdata:0x804FF618; // type:object size:0x4 scope:global -request = .sdata:0x804FF61C; // type:object size:0x4 scope:local -libdevice = .sdata:0x804FF620; // type:object size:0x8 scope:global -bIsTimerInited = .sdata:0x804FF629; // type:object size:0x1 scope:local -TimesInited = .sdata:0x804FF630; // type:object size:0x4 scope:global -reentry.39 = .sdata:0x804FF638; // type:object size:0x4 scope:local -lastsystemtask.46 = .sdata:0x804FF63C; // type:object size:0x4 scope:local -vblticks = .sdata:0x804FF640; // type:object size:0x4 scope:global -TIMERhz = .sdata:0x804FF644; // type:object size:0x4 scope:global -ticks = .sdata:0x804FF648; // type:object size:0x4 scope:global -libticks = .sdata:0x804FF64C; // type:object size:0x4 scope:global -_11RealFontOld.gFontDriver = .sdata:0x804FF658; // type:object size:0x4 scope:global -_Q29RealShape9MemObject.sAllocator = .sdata:0x804FF65C; // type:object size:0x4 scope:global -_11RealmcIface.gInstance = .sdata:0x804FF660; // type:object size:0x4 scope:local -_6Realmc.gAllocator = .sdata:0x804FF664; // type:object size:0x4 scope:local -slotA.384 = .sdata:0x804FF668; // type:object size:0x4 scope:local -slotB.385 = .sdata:0x804FF66C; // type:object size:0x4 scope:local -_11RealmcIface.ALL_ENTRIES = .sdata:0x804FF670; // type:object size:0x4 scope:global -_Q26Realmc6Locale.gTrcMsgBufferIndex = .sdata:0x804FF674; // type:object size:0x4 scope:local -_Q26Realmc6Locale.gLocaleCallback = .sdata:0x804FF678; // type:object size:0x4 scope:local -_Q26Realmc8GCDriver.MEMCARD_SECTOR_SIZE = .sdata:0x804FF67C; // type:object size:0x4 scope:global -_Q26Realmc8GCDriver.mMounted = .sdata:0x804FF680; // type:object size:0x4 scope:global -_Q26Realmc8GCDriver.mIsCardPresent = .sdata:0x804FF684; // type:object size:0x4 scope:global -_Q26Realmc8GCDriver.mWasCardPresent = .sdata:0x804FF688; // type:object size:0x4 scope:global -_6Realmc.FILENAME_ALL_FILES = .sdata:0x804FF68C; // type:object size:0x4 scope:global -_Q26Realmc11GCInterface.mpDriver = .sdata:0x804FF690; // type:object size:0x4 scope:global -_Q26Realmc11GCInterface.mUserMsg = .sdata:0x804FF694; // type:object size:0x4 scope:global -_6Realmc.gInterfaceThread = .sdata:0x804FF698; // type:object size:0x4 scope:global -_6Realmc.gInterfaceMutex = .sdata:0x804FF69C; // type:object size:0x4 scope:global -_Q26Realmc11GCInterface.mExitThread = .sdata:0x804FF6A0; // type:object size:0x4 scope:global -_Q26Realmc11GCInterface.mpNewTaskMsg = .sdata:0x804FF6A4; // type:object size:0x4 scope:global -_6Realmc.gInterface = .sdata:0x804FF6A8; // type:object size:0x4 scope:global -abort_handler_fn = .sdata:0x804FF6AC; // type:object size:0x4 scope:local -_9RealInput.gInterface = .sdata:0x804FF6B0; // type:object size:0x4 scope:global -_9RealInput.gAllocator = .sdata:0x804FF6B8; // type:object size:0x4 scope:global -_9RealInput.gPadUpdate = .sdata:0x804FF6C0; // type:object size:0x4 scope:global -_9RealInput.gResetBit = .sdata:0x804FF6C8; // type:object size:0x4 scope:global -g_vmBaseVMARAM = .sdata:0x804FF6D0; // type:object size:0x4 scope:local -g_vmFreePagesExist = .sdata:0x804FF6D8; // type:object size:0x4 scope:local -g_vmPageReplacementPolicy = .sdata:0x804FF6DC; // type:object size:0x4 scope:local -@252 = .sdata:0x804FF888; // type:object size:0x4 scope:local -__ARQVersion = .sdata:0x804FF890; // type:object size:0x4 scope:global -__AXVersion = .sdata:0x804FF898; // type:object size:0x4 scope:global -axDspSlaveLength = .sdata:0x804FF8A0; // type:object size:0x2 scope:global -__DSPVersion = .sdata:0x804FF8A8; // type:object size:0x4 scope:global -_SDA_BASE_ = .sdata:0x80506DC0; // type:object scope:global -_SDA2_BASE_ = .sdata:0x80516DC0; // type:object scope:global -g_lgInitialized = .sbss:0x804FF8C0; // type:object size:0x4 scope:local -_f_sbss = .sbss:0x804FF8C0; // type:object scope:global -__sbss_start = .sbss:0x804FF8C0; // type:object scope:global -g_bGammaInitialized = .sbss:0x804FF8C4; // type:object size:0x4 scope:local -jumbleeffectid$1040 = .sbss:0x804FF8C8; // type:object size:0x4 scope:local -createcount$1041 = .sbss:0x804FF8CC; // type:object size:0x4 scope:local -g_bWaveTablesInitialized = .sbss:0x804FF8D0; // type:object size:0x4 scope:local -BootInfo = .sbss:0x804FF8D8; // type:object size:0x4 scope:local -BI2DebugFlag = .sbss:0x804FF8DC; // type:object size:0x4 scope:local -BI2DebugFlagHolder = .sbss:0x804FF8E0; // type:object size:0x4 scope:local -__OSIsGcam = .sbss:0x804FF8E4; // type:object size:0x4 scope:global -ZeroF = .sbss:0x804FF8E8; // type:object size:0x8 scope:local -ZeroPS = .sbss:0x804FF8F0; // type:object size:0x8 scope:local -AreWeInitialized = .sbss:0x804FF8F8; // type:object size:0x4 scope:local -OSExceptionTable = .sbss:0x804FF8FC; // type:object size:0x4 scope:local -__OSInIPL = .sbss:0x804FF900; // type:object size:0x4 scope:global -__OSStartTime = .sbss:0x804FF908; // type:object size:0x8 scope:global -AlarmQueue = .sbss:0x804FF910; // type:object size:0x8 scope:local -HeapArray = .sbss:0x804FF918; // type:object size:0x4 scope:local -NumHeaps = .sbss:0x804FF91C; // type:object size:0x4 scope:local -ArenaStart = .sbss:0x804FF920; // type:object size:0x4 scope:local -ArenaEnd = .sbss:0x804FF924; // type:object size:0x4 scope:local -__OSArenaHi = .sbss:0x804FF928; // type:object size:0x4 scope:local -Prepared = .sbss:0x804FF930; // type:object size:0x4 scope:local -apploaderPosition$69 = .sbss:0x804FF934; // type:object size:0x4 scope:local -FontDataAnsi = .sbss:0x804FF938; // type:object size:0x4 scope:local -FontDataSjis = .sbss:0x804FF93C; // type:object size:0x4 scope:local -FixedPitch = .sbss:0x804FF940; // type:object size:0x4 scope:local -ParseString = .sbss:0x804FF944; // type:object size:0x4 scope:local -InterruptHandlerTable = .sbss:0x804FF948; // type:object size:0x4 scope:local -__OSLastInterruptSrr0 = .sbss:0x804FF94C; // type:object size:0x4 scope:global -__OSLastInterrupt = .sbss:0x804FF950; // type:object size:0x2 scope:global -__OSLastInterruptTime = .sbss:0x804FF958; // type:object size:0x8 scope:global -SaveStart = .sbss:0x804FF960; // type:object size:0x4 scope:local -SaveEnd = .sbss:0x804FF964; // type:object size:0x4 scope:local -ResetFunctionQueue = .sbss:0x804FF968; // type:object size:0x8 scope:local -bootThisDol = .sbss:0x804FF970; // type:object size:0x4 scope:local -ResetCallback = .sbss:0x804FF978; // type:object size:0x4 scope:local -Down = .sbss:0x804FF97C; // type:object size:0x4 scope:local -LastState = .sbss:0x804FF980; // type:object size:0x4 scope:local -HoldUp = .sbss:0x804FF988; // type:object size:0x8 scope:local -HoldDown = .sbss:0x804FF990; // type:object size:0x8 scope:local -RunQueueBits = .sbss:0x804FF998; // type:object size:0x4 scope:local -RunQueueHint = .sbss:0x804FF99C; // type:object size:0x4 scope:local -Reschedule = .sbss:0x804FF9A0; // type:object size:0x4 scope:local -__DBInterface = .sbss:0x804FF9A8; // type:object size:0x4 scope:global -DBVerbose = .sbss:0x804FF9AC; // type:object size:0x4 scope:global -BootInfo = .sbss:0x804FF9B0; // type:object size:0x4 scope:local -FstStart = .sbss:0x804FF9B4; // type:object size:0x4 scope:local -FstStringStart = .sbss:0x804FF9B8; // type:object size:0x4 scope:local -MaxEntryNum = .sbss:0x804FF9BC; // type:object size:0x4 scope:local -currentDirectory = .sbss:0x804FF9C0; // type:object size:0x4 scope:local -__DVDLongFileNameFlag = .sbss:0x804FF9C4; // type:object size:0x4 scope:global -__DVDThreadQueue = .sbss:0x804FF9C8; // type:object size:0x8 scope:global -executing = .sbss:0x804FF9D0; // type:object size:0x4 scope:local -IDShouldBe = .sbss:0x804FF9D4; // type:object size:0x4 scope:local -bootInfo = .sbss:0x804FF9D8; // type:object size:0x4 scope:local -PauseFlag = .sbss:0x804FF9DC; // type:object size:0x4 scope:local -PausingFlag = .sbss:0x804FF9E0; // type:object size:0x4 scope:local -AutoFinishing = .sbss:0x804FF9E4; // type:object size:0x4 scope:local -FatalErrorFlag = .sbss:0x804FF9E8; // type:object size:0x4 scope:local -CurrCommand = .sbss:0x804FF9EC; // type:object size:0x4 scope:local -Canceling = .sbss:0x804FF9F0; // type:object size:0x4 scope:local -CancelCallback = .sbss:0x804FF9F4; // type:object size:0x4 scope:local -ResumeFromHere = .sbss:0x804FF9F8; // type:object size:0x4 scope:local -CancelLastError = .sbss:0x804FF9FC; // type:object size:0x4 scope:local -LastError = .sbss:0x804FFA00; // type:object size:0x4 scope:local -NumInternalRetry = .sbss:0x804FFA04; // type:object size:0x4 scope:local -ResetRequired = .sbss:0x804FFA08; // type:object size:0x4 scope:local -CancelAllSyncComplete = .sbss:0x804FFA0C; // type:object size:0x4 scope:local -ResetCount = .sbss:0x804FFA10; // type:object size:0x4 scope:local -FirstTimeInBootrom = .sbss:0x804FFA14; // type:object size:0x4 scope:local -MotorState = .sbss:0x804FFA18; // type:object size:0x4 scope:local -DVDInitialized = .sbss:0x804FFA1C; // type:object size:0x4 scope:local -immCount$360 = .sbss:0x804FFA20; // type:object size:0x4 scope:local -dmaCount$362 = .sbss:0x804FFA24; // type:object size:0x4 scope:local -LastState = .sbss:0x804FFA28; // type:object size:0x4 scope:global -FatalFunc = .sbss:0x804FFA30; // type:object size:0x4 scope:local -status = .sbss:0x804FFA38; // type:object size:0x4 scope:local -bb2 = .sbss:0x804FFA3C; // type:object size:0x4 scope:local -idTmp = .sbss:0x804FFA40; // type:object size:0x4 scope:local -StopAtNextInt = .sbss:0x804FFA48; // type:object size:0x4 scope:local -LastLength = .sbss:0x804FFA4C; // type:object size:0x4 scope:local -Callback = .sbss:0x804FFA50; // type:object size:0x4 scope:local -ResetCoverCallback = .sbss:0x804FFA54; // type:object size:0x4 scope:local -LastResetEnd = .sbss:0x804FFA58; // type:object size:0x8 scope:local -ResetOccurred = .sbss:0x804FFA60; // type:object size:0x4 scope:local -WaitingCoverClose = .sbss:0x804FFA64; // type:object size:0x4 scope:local -Breaking = .sbss:0x804FFA68; // type:object size:0x4 scope:local -WorkAroundType = .sbss:0x804FFA6C; // type:object size:0x4 scope:local -WorkAroundSeekLocation = .sbss:0x804FFA70; // type:object size:0x4 scope:local -LastReadFinished = .sbss:0x804FFA78; // type:object size:0x8 scope:local -LastReadIssued = .sbss:0x804FFA80; // type:object size:0x8 scope:local -LastCommandWasRead = .sbss:0x804FFA88; // type:object size:0x4 scope:local -NextCommandNumber = .sbss:0x804FFA8C; // type:object size:0x4 scope:local -IsInitialized = .sbss:0x804FFA90; // type:object size:0x4 scope:local -retraceCount = .sbss:0x804FFA94; // type:object size:0x4 scope:local -flushFlag = .sbss:0x804FFA98; // type:object size:0x4 scope:local -retraceQueue = .sbss:0x804FFA9C; // type:object size:0x8 scope:local -PreCB = .sbss:0x804FFAA4; // type:object size:0x4 scope:local -PostCB = .sbss:0x804FFAA8; // type:object size:0x4 scope:local -PositionCallback = .sbss:0x804FFAAC; // type:object size:0x4 scope:local -encoderType = .sbss:0x804FFAB0; // type:object size:0x4 scope:local -displayOffsetH = .sbss:0x804FFAB4; // type:object size:0x2 scope:local -displayOffsetV = .sbss:0x804FFAB6; // type:object size:0x2 scope:local -changeMode = .sbss:0x804FFAB8; // type:object size:0x4 scope:local -changed = .sbss:0x804FFAC0; // type:object size:0x8 scope:local -shdwChangeMode = .sbss:0x804FFAC8; // type:object size:0x4 scope:local -shdwChanged = .sbss:0x804FFAD0; // type:object size:0x8 scope:local -CurrTiming = .sbss:0x804FFAD8; // type:object size:0x4 scope:local -CurrTvMode = .sbss:0x804FFADC; // type:object size:0x4 scope:local -NextBufAddr = .sbss:0x804FFAE0; // type:object size:0x4 scope:local -CurrBufAddr = .sbss:0x804FFAE4; // type:object size:0x4 scope:local -FBSet = .sbss:0x804FFAE8; // type:object size:0x4 scope:local -timingExtra = .sbss:0x804FFAEC; // type:object size:0x4 scope:local -message$351 = .sbss:0x804FFAF0; // type:object size:0x4 scope:local -Initialized = .sbss:0x804FFB00; // type:object size:0x4 scope:local -EnabledBits = .sbss:0x804FFB04; // type:object size:0x4 scope:local -ResettingBits = .sbss:0x804FFB08; // type:object size:0x4 scope:local -RecalibrateBits = .sbss:0x804FFB0C; // type:object size:0x4 scope:local -WaitingBits = .sbss:0x804FFB10; // type:object size:0x4 scope:local -CheckingBits = .sbss:0x804FFB14; // type:object size:0x4 scope:local -PendingBits = .sbss:0x804FFB18; // type:object size:0x4 scope:local -BarrelBits = .sbss:0x804FFB1C; // type:object size:0x4 scope:local -CmdTypeAndStatus = .sbss:0x804FFB20; // type:object size:0x4 scope:local -SamplingCallback = .sbss:0x804FFB24; // type:object size:0x4 scope:local -recalibrated$388 = .sbss:0x804FFB28; // type:object size:0x4 scope:local -__PADSpec = .sbss:0x804FFB2C; // type:object size:0x4 scope:global -__AIS_Callback = .sbss:0x804FFB30; // type:object size:0x4 scope:local -__AID_Callback = .sbss:0x804FFB34; // type:object size:0x4 scope:local -__CallbackStack = .sbss:0x804FFB38; // type:object size:0x4 scope:local -__OldStack = .sbss:0x804FFB3C; // type:object size:0x4 scope:local -__AI_init_flag = .sbss:0x804FFB40; // type:object size:0x4 scope:local -__AID_Active = .sbss:0x804FFB44; // type:object size:0x4 scope:local -bound_32KHz = .sbss:0x804FFB48; // type:object size:0x8 scope:local -bound_48KHz = .sbss:0x804FFB50; // type:object size:0x8 scope:local -min_wait = .sbss:0x804FFB58; // type:object size:0x8 scope:local -max_wait = .sbss:0x804FFB60; // type:object size:0x8 scope:local -buffer = .sbss:0x804FFB68; // type:object size:0x8 scope:local -__AR_Callback = .sbss:0x804FFB70; // type:object size:0x4 scope:local -__AR_Size = .sbss:0x804FFB74; // type:object size:0x4 scope:local -__AR_InternalSize = .sbss:0x804FFB78; // type:object size:0x4 scope:local -__AR_ExpansionSize = .sbss:0x804FFB7C; // type:object size:0x4 scope:local -__AR_StackPointer = .sbss:0x804FFB80; // type:object size:0x4 scope:local -__AR_FreeBlocks = .sbss:0x804FFB84; // type:object size:0x4 scope:local -__AR_BlockLength = .sbss:0x804FFB88; // type:object size:0x4 scope:local -__AR_init_flag = .sbss:0x804FFB8C; // type:object size:0x4 scope:local -__CARDEncode = .sbss:0x804FFB90; // type:object size:0x2 scope:local -__CARDFastMode = .sbss:0x804FFB92; // type:object size:0x2 scope:local -__piReg = .sbss:0x804FFB98; // type:object size:0x4 scope:global -__cpReg = .sbss:0x804FFB9C; // type:object size:0x4 scope:global -__peReg = .sbss:0x804FFBA0; // type:object size:0x4 scope:global -__memReg = .sbss:0x804FFBA4; // type:object size:0x4 scope:global -peCount$35 = .sbss:0x804FFBA8; // type:object size:0x4 scope:local -time$36 = .sbss:0x804FFBB0; // type:object size:0x8 scope:local -calledOnce$37 = .sbss:0x804FFBB8; // type:object size:0x4 scope:local -resetFuncRegistered$145 = .sbss:0x804FFBBC; // type:object size:0x4 scope:local -CPUFifo = .sbss:0x804FFBC0; // type:object size:0x4 scope:local -GPFifo = .sbss:0x804FFBC4; // type:object size:0x4 scope:local -__GXCurrentThread = .sbss:0x804FFBC8; // type:object size:0x4 scope:local -CPGPLinked = .sbss:0x804FFBCC; // type:object size:0x1 scope:local -GXOverflowSuspendInProgress = .sbss:0x804FFBD0; // type:object size:0x4 scope:local -BreakPointCB = .sbss:0x804FFBD4; // type:object size:0x4 scope:local -__GXOverflowCount = .sbss:0x804FFBD8; // type:object size:0x4 scope:local -TokenCB = .sbss:0x804FFBE0; // type:object size:0x4 scope:local -DrawDoneCB = .sbss:0x804FFBE4; // type:object size:0x4 scope:local -DrawDone = .sbss:0x804FFBE8; // type:object size:0x1 scope:local -FinishQueue = .sbss:0x804FFBEC; // type:object size:0x8 scope:local -OldCPUFifo = .sbss:0x804FFBF8; // type:object size:0x4 scope:local -IDSerialPort1 = .sbss:0x804FFC00; // type:object size:0x4 scope:local -Chan = .sbss:0x804FFC08; // type:object size:0x4 scope:local -Dev = .sbss:0x804FFC0C; // type:object size:0x4 scope:local -Enabled = .sbss:0x804FFC10; // type:object size:0x4 scope:local -BarnacleEnabled = .sbss:0x804FFC14; // type:object size:0x4 scope:local -cmdTypeAndStatus$78 = .sbss:0x804FFC18; // type:object size:0x4 scope:local -cmdTypeAndStatus$372 = .sbss:0x804FFC1C; // type:object size:0x4 scope:local -__PADFixBits = .sbss:0x804FFC20; // type:object size:0x4 scope:global -SamplingRate = .sbss:0x804FFC28; // type:object size:0x4 scope:local -initialized$3 = .sbss:0x804FFC30; // type:object size:0x4 scope:local -count$46 = .sbss:0x804FFC34; // type:object size:0x4 scope:local -__SIResetSteering = .sbss:0x804FFC38; // type:object size:0x4 scope:global -SamplingCallback = .sbss:0x804FFC40; // type:object size:0x4 scope:local -__SISteeringEnableBits = .sbss:0x804FFC44; // type:object size:0x4 scope:global -MTRCallback = .sbss:0x804FFC48; // type:object size:0x4 scope:local -DBGCallback = .sbss:0x804FFC4C; // type:object size:0x4 scope:local -SendMailData = .sbss:0x804FFC50; // type:object size:0x4 scope:local -RecvDataLeng = .sbss:0x804FFC54; // type:object size:0x4 scope:local -pEXIInputFlag = .sbss:0x804FFC58; // type:object size:0x4 scope:local -EXIInputFlag = .sbss:0x804FFC5C; // type:object size:0x1 scope:local -ucEXI2InputPending = .sbss:0x804FFC60; // type:object size:0x1 scope:local -fExi2Selected = .sbss:0x804FFC64; // type:object size:0x4 scope:local -TRK_Callback = .sbss:0x804FFC68; // type:object size:0x4 scope:local -RCMP_global_VP6_skipK = .sbss:0x804FFC6C; // type:label scope:global -RCMP_global_VP6_skipK_frameNo = .sbss:0x804FFC70; // type:label scope:global -maddataptr = .sbss:0x804FFC74; // type:label scope:global -madshiftreg = .sbss:0x804FFC78; // type:label scope:global -madbitcount = .sbss:0x804FFC7C; // type:label scope:global -initflag = .sbss:0x804FFC80; // type:label scope:local -motionframe = .sbss:0x804FFC84; // type:label scope:local -CPUFrequency = .sbss:0x804FFC88; // type:label size:0x4 scope:global -FilteringVert_12 = .sbss:0x804FFC8C; // type:label size:0x4 scope:global -FilteringHoriz_12 = .sbss:0x804FFC90; // type:label size:0x4 scope:global -FilteringVert_8 = .sbss:0x804FFC94; // type:label size:0x4 scope:global -FilteringHoriz_8 = .sbss:0x804FFC98; // type:label size:0x4 scope:global -VerticalBand_4_5_Scale = .sbss:0x804FFC9C; // type:label size:0x4 scope:global -LastVerticalBand_4_5_Scale = .sbss:0x804FFCA0; // type:label size:0x4 scope:global -VerticalBand_3_5_Scale = .sbss:0x804FFCA4; // type:label size:0x4 scope:global -LastVerticalBand_3_5_Scale = .sbss:0x804FFCA8; // type:label size:0x4 scope:global -HorizontalLine_1_2_Scale = .sbss:0x804FFCAC; // type:label size:0x4 scope:global -HorizontalLine_3_5_Scale = .sbss:0x804FFCB0; // type:label size:0x4 scope:global -HorizontalLine_4_5_Scale = .sbss:0x804FFCB4; // type:label size:0x4 scope:global -VerticalBand_1_2_Scale = .sbss:0x804FFCB8; // type:label size:0x4 scope:global -LastVerticalBand_1_2_Scale = .sbss:0x804FFCBC; // type:label size:0x4 scope:global -FilterHoriz_Simple = .sbss:0x804FFCC0; // type:label size:0x4 scope:global -FilterVert_Simple = .sbss:0x804FFCC4; // type:label size:0x4 scope:global -DeringBlockWeak = .sbss:0x804FFCC8; // type:label size:0x4 scope:global -DeringBlockStrong = .sbss:0x804FFCCC; // type:label size:0x4 scope:global -DeblockLoopFilteredBand = .sbss:0x804FFCD0; // type:label size:0x4 scope:global -DeblockNonFilteredBand = .sbss:0x804FFCD4; // type:label size:0x4 scope:global -DeblockNonFilteredBandNewFilter = .sbss:0x804FFCD8; // type:label size:0x4 scope:global -SetupBoundingValueArray = .sbss:0x804FFCDC; // type:label size:0x4 scope:global -SetupDeblockValueArray = .sbss:0x804FFCE0; // type:label size:0x4 scope:global -FilterHoriz = .sbss:0x804FFCE4; // type:label size:0x4 scope:global -FilterVert = .sbss:0x804FFCE8; // type:label size:0x4 scope:global -ClampLevels = .sbss:0x804FFCEC; // type:label size:0x4 scope:global -FastDeInterlace = .sbss:0x804FFCF0; // type:label size:0x4 scope:global -PlaneAddNoise = .sbss:0x804FFCF4; // type:label size:0x4 scope:global -VP6_BuildQuantIndex = .sbss:0x804FFCF8; // type:label size:0x4 scope:global -ReconIntra = .sbss:0x804FFCFC; // type:label size:0x4 scope:global -ReconInter = .sbss:0x804FFD00; // type:label size:0x4 scope:global -ReconInterHalfPixel2 = .sbss:0x804FFD04; // type:label size:0x4 scope:global -ClearSysState = .sbss:0x804FFD08; // type:label size:0x4 scope:global -ReconBlock = .sbss:0x804FFD0C; // type:label size:0x4 scope:global -SubtractBlock = .sbss:0x804FFD10; // type:label size:0x4 scope:global -UnpackBlock = .sbss:0x804FFD14; // type:label size:0x4 scope:global -AverageBlock = .sbss:0x804FFD18; // type:label size:0x4 scope:global -CopyBlock = .sbss:0x804FFD1C; // type:label size:0x4 scope:global -Copy12x12 = .sbss:0x804FFD20; // type:label size:0x4 scope:global -FilterBlockBil_8 = .sbss:0x804FFD24; // type:label size:0x4 scope:global -FilterBlock = .sbss:0x804FFD28; // type:label size:0x4 scope:global -DCQuantScaleV2 = .sbss:0x804FFD2C; // type:label size:0x4 scope:global -DCQuantScaleUV = .sbss:0x804FFD30; // type:label size:0x4 scope:global -DCQuantScaleV1 = .sbss:0x804FFD34; // type:label size:0x4 scope:global -DeblockLimitValuesV2 = .sbss:0x804FFD38; // type:label size:0x4 scope:global -LoopFilterLimitValuesV2 = .sbss:0x804FFD3C; // type:label size:0x4 scope:global -gpFileSysInfo = .sbss:0x804FFD40; // type:label size:0x4 scope:local -numrequests = .sbss:0x804FFD44; // type:label size:0x4 scope:local -freequeue = .sbss:0x804FFD48; // type:label size:0x8 scope:local -requestidcounter = .sbss:0x804FFD50; // type:label size:0x4 scope:local -g_thMain = .sbss:0x804FFD54; // type:label size:0x4 scope:global -_.tmp_0.609 = .sbss:0x804FFD58; // type:label size:0x4 scope:local -_.tmp_0.636 = .sbss:0x804FFD5C; // type:label size:0x4 scope:local -_9RealInput.sGcOriginalSamplingCallback = .sbss:0x804FFD60; // type:label size:0x4 scope:local -g_vmSizeVMMainMemory = .sbss:0x804FFD68; // type:object size:0x4 scope:local -g_vmBaseVMMainMemory = .sbss:0x804FFD6C; // type:object size:0x4 scope:local -g_vmSizeVMARAM = .sbss:0x804FFD70; // type:object size:0x4 scope:local -g_vmNumPagesInMRAM = .sbss:0x804FFD74; // type:object size:0x4 scope:local -g_cbLogStats = .sbss:0x804FFD78; // type:object size:0x4 scope:local -g_vmInitialized = .sbss:0x804FFD7C; // type:object size:0x4 scope:local -nextPageToCheck$357 = .sbss:0x804FFD80; // type:object size:0x4 scope:local -g_vmNextPageToSwap = .sbss:0x804FFD88; // type:object size:0x4 scope:local -g_baseARAMtoVM = .sbss:0x804FFD90; // type:object size:0x4 scope:local -g_baseVMtoARAM = .sbss:0x804FFD94; // type:object size:0x4 scope:local -g_totalAllocatedVM = .sbss:0x804FFD98; // type:object size:0x4 scope:local -g_nextARAMPageToCheck$233 = .sbss:0x804FFD9C; // type:object size:0x4 scope:local -__ARQRequestQueueHi = .sbss:0x804FFDA0; // type:object size:0x4 scope:local -__ARQRequestTailHi = .sbss:0x804FFDA4; // type:object size:0x4 scope:local -__ARQRequestQueueLo = .sbss:0x804FFDA8; // type:object size:0x4 scope:local -__ARQRequestTailLo = .sbss:0x804FFDAC; // type:object size:0x4 scope:local -__ARQRequestQueueTemp = .sbss:0x804FFDB0; // type:object size:0x4 scope:local -__ARQRequestTailTemp = .sbss:0x804FFDB4; // type:object size:0x4 scope:local -__ARQRequestPendingHi = .sbss:0x804FFDB8; // type:object size:0x4 scope:local -__ARQRequestPendingLo = .sbss:0x804FFDBC; // type:object size:0x4 scope:local -__ARQCallbackHi = .sbss:0x804FFDC0; // type:object size:0x4 scope:local -__ARQCallbackLo = .sbss:0x804FFDC4; // type:object size:0x4 scope:local -__ARQChunkSize = .sbss:0x804FFDC8; // type:object size:0x4 scope:local -__ARQ_init_flag = .sbss:0x804FFDCC; // type:object size:0x4 scope:local -__AXCallbackStack = .sbss:0x804FFDD0; // type:object size:0x4 scope:local -__AXCallbackAuxA = .sbss:0x804FFDD8; // type:object size:0x4 scope:local -__AXCallbackAuxB = .sbss:0x804FFDDC; // type:object size:0x4 scope:local -__AXContextAuxA = .sbss:0x804FFDE0; // type:object size:0x4 scope:local -__AXContextAuxB = .sbss:0x804FFDE4; // type:object size:0x4 scope:local -__AXAuxADspWrite = .sbss:0x804FFDE8; // type:object size:0x4 scope:local -__AXAuxADspRead = .sbss:0x804FFDEC; // type:object size:0x4 scope:local -__AXAuxBDspWrite = .sbss:0x804FFDF0; // type:object size:0x4 scope:local -__AXAuxBDspRead = .sbss:0x804FFDF4; // type:object size:0x4 scope:local -__AXAuxDspWritePosition = .sbss:0x804FFDF8; // type:object size:0x4 scope:local -__AXAuxDspReadPosition = .sbss:0x804FFDFC; // type:object size:0x4 scope:local -__AXAuxDspWritePositionDpl2 = .sbss:0x804FFE00; // type:object size:0x4 scope:local -__AXAuxDspReadPositionDpl2 = .sbss:0x804FFE04; // type:object size:0x4 scope:local -__AXAuxCpuReadWritePosition = .sbss:0x804FFE08; // type:object size:0x4 scope:local -__AXCommandListPosition = .sbss:0x804FFE10; // type:object size:0x4 scope:local -__AXClWrite = .sbss:0x804FFE14; // type:object size:0x4 scope:local -__AXCommandListCycles = .sbss:0x804FFE18; // type:object size:0x4 scope:local -__AXCompressor = .sbss:0x804FFE1C; // type:object size:0x4 scope:local -__AXClMode = .sbss:0x804FFE20; // type:object size:0x4 scope:global -__AXOutFrame = .sbss:0x804FFE28; // type:object size:0x4 scope:local -__AXAiDmaFrame = .sbss:0x804FFE2C; // type:object size:0x4 scope:local -__AXOutDspReady = .sbss:0x804FFE30; // type:object size:0x4 scope:local -__AXOsTime = .sbss:0x804FFE38; // type:object size:0x8 scope:local -__AXUserFrameCallback = .sbss:0x804FFE40; // type:object size:0x4 scope:local -__AXDSPInitFlag = .sbss:0x804FFE44; // type:object size:0x4 scope:local -__AXDSPDoneFlag = .sbss:0x804FFE48; // type:object size:0x4 scope:local -__AXDebugSteppingMode = .sbss:0x804FFE4C; // type:object size:0x4 scope:local -__AXOutThreadQueue = .sbss:0x804FFE50; // type:object size:0x8 scope:local -__AXOutputBufferMode = .sbss:0x804FFE58; // type:object size:0x4 scope:local -__AXSpbAL = .sbss:0x804FFE60; // type:object size:0x4 scope:local -__AXSpbAR = .sbss:0x804FFE64; // type:object size:0x4 scope:local -__AXSpbAS = .sbss:0x804FFE68; // type:object size:0x4 scope:local -__AXSpbAAL = .sbss:0x804FFE6C; // type:object size:0x4 scope:local -__AXSpbAAR = .sbss:0x804FFE70; // type:object size:0x4 scope:local -__AXSpbAAS = .sbss:0x804FFE74; // type:object size:0x4 scope:local -__AXSpbABL = .sbss:0x804FFE78; // type:object size:0x4 scope:local -__AXSpbABR = .sbss:0x804FFE7C; // type:object size:0x4 scope:local -__AXSpbABS = .sbss:0x804FFE80; // type:object size:0x4 scope:local -__AXMaxDspCycles = .sbss:0x804FFE88; // type:object size:0x4 scope:local -__AXRecDspCycles = .sbss:0x804FFE8C; // type:object size:0x4 scope:local -__AXNumVoices = .sbss:0x804FFE90; // type:object size:0x4 scope:local -__AXProfile = .sbss:0x804FFE98; // type:object size:0x4 scope:local -__AXMaxProfiles = .sbss:0x804FFE9C; // type:object size:0x4 scope:local -__AXCurrentProfile = .sbss:0x804FFEA0; // type:object size:0x4 scope:local -__AXProfileInitialized = .sbss:0x804FFEA4; // type:object size:0x4 scope:local -__DSP_init_flag = .sbss:0x804FFEA8; // type:object size:0x4 scope:local -t0 = .sbss:0x804FFEB0; // type:object size:0x4 scope:local -t1 = .sbss:0x804FFEB4; // type:object size:0x4 scope:local -t2 = .sbss:0x804FFEB8; // type:object size:0x4 scope:local -__DSP_rude_task_pending = .sbss:0x804FFEBC; // type:object size:0x4 scope:global -__DSP_rude_task = .sbss:0x804FFEC0; // type:object size:0x4 scope:global -__DSP_tmp_task = .sbss:0x804FFEC4; // type:object size:0x4 scope:global -__DSP_last_task = .sbss:0x804FFEC8; // type:object size:0x4 scope:global -__DSP_first_task = .sbss:0x804FFECC; // type:object size:0x4 scope:global -__DSP_curr_task = .sbss:0x804FFED0; // type:object size:0x4 scope:global -g_vmBasePageTable = .sbss:0x804FFED8; // type:object size:0x4 scope:local -g_vmBaseVMReversePageTable = .sbss:0x804FFEDC; // type:object size:0x4 scope:local -g_vmBaseLockedPageTable = .sbss:0x804FFEE0; // type:object size:0x4 scope:local -cbVMSwapPageIn = .sbss:0x804FFEE4; // type:object size:0x4 scope:local -g_baseInitialized = .sbss:0x804FFEE8; // type:object size:0x4 scope:local -g_originalSR7 = .sbss:0x804FFEEC; // type:object size:0x4 scope:local -g_originalSDR1 = .sbss:0x804FFEF0; // type:object size:0x4 scope:local -_12WRoadNetwork.fValidRaceFilter = .sbss:0x804FFEF4; // type:object size:0x4 scope:global -_12WRoadNetwork.fNumSegments = .sbss:0x804FFEF8; // type:object size:0x4 scope:global -_Q33UTL11Collectionst12Instanceable3ZP8HCAUSE__Z6ICausei10._mHNext = .sbss:0x804FFEFC; // type:object size:0x4 scope:global -_12WRoadNetwork.fValidTrafficRoads = .sbss:0x804FFF00; // type:object size:0x4 scope:global -_Q33UTL11Collectionst12Instanceable3ZP10HSIMABLE__Z8ISimablei160._mHNext = .sbss:0x804FFF04; // type:object size:0x4 scope:global -_Q33UTL11Collectionst12Instanceable3ZP11HACTIVITY__ZQ23Sim9IActivityi40._mHNext = .sbss:0x804FFF08; // type:object size:0x4 scope:global -_12WRoadNetwork.fNumRoads = .sbss:0x804FFF0C; // type:object size:0x4 scope:global -_12WRoadNetwork.fNumNodes = .sbss:0x804FFF10; // type:object size:0x4 scope:global -_12WRoadNetwork.fNumProfiles = .sbss:0x804FFF14; // type:object size:0x4 scope:global -_12WRoadNetwork.fNumIntersections = .sbss:0x804FFF18; // type:object size:0x4 scope:global -_12WRoadNetwork.fValid = .sbss:0x804FFF1C; // type:object size:0x4 scope:global -_Q33UTL11Collectionst12Instanceable3ZP8HMODEL__Z6IModeli434._mHNext = .sbss:0x804FFF20; // type:object size:0x4 scope:global -_Q33UTL11Collectionst12Instanceable3ZPQ214EventSequencer9HENGINE__ZQ214EventSequencer7IEnginei434._mHNext = .sbss:0x804FFF24; // type:object size:0x4 scope:global -_13SFXObj_Reverb.m_pFXEditModule = .sbss:0x804FFF28; // type:object size:0x8 scope:global -_7SimTask.mRoot = .sbss:0x804FFF30; // type:object size:0x4 scope:global -errno = .sbss:0x804FFF34; // type:object size:0x4 scope:global -__sbss_end = .sbss:0x804FFF38; // type:object scope:global -_e_sbss = .sbss:0x804FFF38; // type:object scope:global -__SBSS_END__ = .sbss:0x804FFF38; // type:object scope:global -__clz_tab = .sdata2:0x804FFF40; // type:object size:0x100 scope:local -__SDATA2_START__ = .sdata2:0x804FFF40; // type:object scope:global -__clz_tab = .sdata2:0x80500040; // type:object size:0x100 scope:local -__clz_tab = .sdata2:0x80500140; // type:object size:0x100 scope:local -__clz_tab = .sdata2:0x80500240; // type:object size:0x100 scope:local -bp = .sdata2:0x80500340; // type:object size:0x10 scope:local -dp_h = .sdata2:0x80500350; // type:object size:0x10 scope:local -dp_l = .sdata2:0x80500360; // type:object size:0x10 scope:local -halF = .sdata2:0x80500370; // type:object size:0x8 scope:local -ln2HI = .sdata2:0x80500378; // type:object size:0x8 scope:local -ln2LO = .sdata2:0x80500380; // type:object size:0x8 scope:local -Zero = .sdata2:0x80500388; // type:object size:0x8 scope:local -bp = .sdata2:0x80500390; // type:object size:0x8 scope:local -dp_h = .sdata2:0x80500398; // type:object size:0x8 scope:local -dp_l = .sdata2:0x805003A0; // type:object size:0x8 scope:local -atanhi = .sdata2:0x805003A8; // type:object size:0x10 scope:local -atanlo = .sdata2:0x805003B8; // type:object size:0x10 scope:local -aT = .sdata2:0x805003C8; // type:object size:0x2C scope:local -T = .sdata2:0x805003F8; // type:object size:0x34 scope:local -two_over_pi = .sdata2:0x8050042C; // type:object size:0x318 scope:local -npio2_hw = .sdata2:0x80500744; // type:object size:0x80 scope:local -init_jk = .sdata2:0x805007C4; // type:object size:0xC scope:local -PIo2 = .sdata2:0x805007D0; // type:object size:0x2C scope:local -@956 = .sdata2:0x80500800; // type:object size:0x4 scope:local -@957 = .sdata2:0x80500804; // type:object size:0x4 scope:local -@958 = .sdata2:0x80500808; // type:object size:0x4 scope:local -@959 = .sdata2:0x8050080C; // type:object size:0x4 scope:local -@961 = .sdata2:0x80500810; // type:object size:0x8 scope:local -@1129 = .sdata2:0x80500818; // type:object size:0x4 scope:local -@1130 = .sdata2:0x8050081C; // type:object size:0x4 scope:local -@1516 = .sdata2:0x80500820; // type:object size:0x4 scope:local -@1546 = .sdata2:0x80500824; // type:object size:0x4 scope:local -@130 = .sdata2:0x80500828; // type:object size:0x8 scope:local -@96 = .sdata2:0x80500830; // type:object size:0x4 scope:local -@97 = .sdata2:0x80500834; // type:object size:0x4 scope:local -@190 = .sdata2:0x80500838; // type:object size:0x4 scope:local -@191 = .sdata2:0x8050083C; // type:object size:0x4 scope:local -@206 = .sdata2:0x80500840; // type:object size:0x4 scope:local -@215 = .sdata2:0x80500844; // type:object size:0x4 scope:local -@227 = .sdata2:0x80500848; // type:object size:0x4 scope:local -@230 = .sdata2:0x8050084C; // type:object size:0x4 scope:local -@99 = .sdata2:0x80500850; // type:object size:0x4 scope:local -@100 = .sdata2:0x80500854; // type:object size:0x4 scope:local -@101 = .sdata2:0x80500858; // type:object size:0x4 scope:local -@102 = .sdata2:0x8050085C; // type:object size:0x4 scope:local -@105 = .sdata2:0x80500860; // type:object size:0x4 scope:local -@106 = .sdata2:0x80500864; // type:object size:0x4 scope:local -@205 = .sdata2:0x80500868; // type:object size:0x4 scope:local -@113 = .sdata2:0x80500870; // type:object size:0x4 scope:local -@114 = .sdata2:0x80500878; // type:object size:0x8 scope:local -@115 = .sdata2:0x80500880; // type:object size:0x8 scope:local -@116 = .sdata2:0x80500888; // type:object size:0x4 scope:local -@118 = .sdata2:0x8050088C; // type:object size:0x4 scope:local -@119 = .sdata2:0x80500890; // type:object size:0x4 scope:local -@161 = .sdata2:0x80500894; // type:object size:0x4 scope:local -@11 = .sdata2:0x80500898; // type:object size:0x4 scope:local -@12 = .sdata2:0x8050089C; // type:object size:0x4 scope:local -@160 = .sdata2:0x805008A0; // type:object size:0x4 scope:local -@161 = .sdata2:0x805008A8; // type:object size:0x8 scope:local -@162 = .sdata2:0x805008B0; // type:object size:0x8 scope:local -@164 = .sdata2:0x805008B8; // type:object size:0x8 scope:local -__GXData = .sdata2:0x805008C0; // type:object size:0x4 scope:global -@267 = .sdata2:0x805008C4; // type:object size:0x4 scope:local -@268 = .sdata2:0x805008C8; // type:object size:0x4 scope:local -@269 = .sdata2:0x805008CC; // type:object size:0x4 scope:local -@270 = .sdata2:0x805008D0; // type:object size:0x4 scope:local -@271 = .sdata2:0x805008D4; // type:object size:0x4 scope:local -@331 = .sdata2:0x805008D8; // type:object size:0x4 scope:local -@332 = .sdata2:0x805008DC; // type:object size:0x4 scope:local -@334 = .sdata2:0x805008E0; // type:object size:0x8 scope:local -@179 = .sdata2:0x805008E8; // type:object size:0x4 scope:local -@234 = .sdata2:0x805008F0; // type:object size:0x8 scope:local -@134 = .sdata2:0x805008F8; // type:object size:0x4 scope:local -@135 = .sdata2:0x805008FC; // type:object size:0x4 scope:local -@136 = .sdata2:0x80500900; // type:object size:0x4 scope:local -@137 = .sdata2:0x80500904; // type:object size:0x4 scope:local -@138 = .sdata2:0x80500908; // type:object size:0x4 scope:local -@139 = .sdata2:0x8050090C; // type:object size:0x4 scope:local -@140 = .sdata2:0x80500910; // type:object size:0x4 scope:local -@141 = .sdata2:0x80500914; // type:object size:0x4 scope:local -@142 = .sdata2:0x80500918; // type:object size:0x4 scope:local -@143 = .sdata2:0x8050091C; // type:object size:0x4 scope:local -@144 = .sdata2:0x80500920; // type:object size:0x4 scope:local -@160 = .sdata2:0x80500924; // type:object size:0x4 scope:local -@177 = .sdata2:0x80500928; // type:object size:0x8 scope:local -@178 = .sdata2:0x80500930; // type:object size:0x8 scope:local -@179 = .sdata2:0x80500938; // type:object size:0x4 scope:local -@220 = .sdata2:0x80500940; // type:object size:0x4 scope:local -@222 = .sdata2:0x80500948; // type:object size:0x8 scope:local -@288 = .sdata2:0x80500950; // type:object size:0x4 scope:local -@289 = .sdata2:0x80500954; // type:object size:0x4 scope:local -@290 = .sdata2:0x80500958; // type:object size:0x4 scope:local -@291 = .sdata2:0x8050095C; // type:object size:0x4 scope:local -@292 = .sdata2:0x80500960; // type:object size:0x4 scope:local -@293 = .sdata2:0x80500964; // type:object size:0x4 scope:local -@384 = .sdata2:0x80500968; // type:object size:0x4 scope:local -@385 = .sdata2:0x8050096C; // type:object size:0x4 scope:local -@389 = .sdata2:0x80500970; // type:object size:0x8 scope:local -@149 = .sdata2:0x80500978; // type:object size:0x4 scope:local -@282 = .sdata2:0x8050097C; // type:object size:0x4 scope:local -@283 = .sdata2:0x80500980; // type:object size:0x4 scope:local -@285 = .sdata2:0x80500988; // type:object size:0x8 scope:local -@211 = .sdata2:0x80500990; // type:object size:0x4 scope:local -@212 = .sdata2:0x80500994; // type:object size:0x4 scope:local -@213 = .sdata2:0x80500998; // type:object size:0x4 scope:local -@214 = .sdata2:0x805009A0; // type:object size:0x8 scope:local -@215 = .sdata2:0x805009A8; // type:object size:0x4 scope:local -@216 = .sdata2:0x805009B0; // type:object size:0x8 scope:local -@217 = .sdata2:0x805009B8; // type:object size:0x4 scope:local -@219 = .sdata2:0x805009C0; // type:object size:0x8 scope:local -@248 = .sdata2:0x805009C8; // type:object size:0x8 scope:local -@249 = .sdata2:0x805009D0; // type:object size:0x4 scope:local -@250 = .sdata2:0x805009D8; // type:object size:0x8 scope:local -@251 = .sdata2:0x805009E0; // type:object size:0x4 scope:local -@253 = .sdata2:0x805009E8; // type:object size:0x8 scope:local -@26 = .sdata2:0x805009F0; // type:object size:0x4 scope:local -@27 = .sdata2:0x805009F4; // type:object size:0x4 scope:local -@28 = .sdata2:0x805009F8; // type:object size:0x4 scope:local -@201 = .sdata2:0x805009FC; // type:object size:0x4 scope:local -@219 = .sdata2:0x80500A00; // type:object size:0x4 scope:local -VP6_QTableSelect = .sdata2:0x80500A04; // type:object size:0x6 scope:global -DefaultIsShortProbs = .sdata2:0x80500A0C; // type:object size:0x2 scope:global -DefaultSignProbs = .sdata2:0x80500A10; // type:object size:0x2 scope:global -_6Realmc.MAX_COMMENT_LENGTH = .sdata2:0x80500A14; // type:object size:0x4 scope:global -halF = .sdata2:0x80500A18; // type:object size:0x10 scope:local -ln2HI = .sdata2:0x80500A28; // type:object size:0x10 scope:local -ln2LO = .sdata2:0x80500A38; // type:object size:0x10 scope:local -two_over_pi = .sdata2:0x80500A48; // type:object size:0x108 scope:local -npio2_hw = .sdata2:0x80500B50; // type:object size:0x80 scope:local -init_jk = .sdata2:0x80500BD0; // type:object size:0x10 scope:local -PIo2 = .sdata2:0x80500BE0; // type:object size:0x40 scope:local -@121 = .sdata2:0x80500C20; // type:object size:0x4 scope:local -@122 = .sdata2:0x80500C24; // type:object size:0x4 scope:local -@123 = .sdata2:0x80500C28; // type:object size:0x4 scope:local -@124 = .sdata2:0x80500C2C; // type:object size:0x4 scope:local -@125 = .sdata2:0x80500C30; // type:object size:0x4 scope:local -@126 = .sdata2:0x80500C34; // type:object size:0x4 scope:local -@127 = .sdata2:0x80500C38; // type:object size:0x4 scope:local -@128 = .sdata2:0x80500C3C; // type:object size:0x4 scope:local -@129 = .sdata2:0x80500C40; // type:object size:0x4 scope:local -@130 = .sdata2:0x80500C44; // type:object size:0x4 scope:local -@131 = .sdata2:0x80500C48; // type:object size:0x4 scope:local -@132 = .sdata2:0x80500C4C; // type:object size:0x4 scope:local -@133 = .sdata2:0x80500C50; // type:object size:0x4 scope:local -@135 = .sdata2:0x80500C58; // type:object size:0x8 scope:local -@331 = .sdata2:0x80500C60; // type:object size:0x4 scope:local -@347 = .sdata2:0x80500C64; // type:object size:0x4 scope:local -@348 = .sdata2:0x80500C68; // type:object size:0x4 scope:local -@349 = .sdata2:0x80500C6C; // type:object size:0x4 scope:local -@350 = .sdata2:0x80500C70; // type:object size:0x4 scope:local -@351 = .sdata2:0x80500C74; // type:object size:0x4 scope:local -@352 = .sdata2:0x80500C78; // type:object size:0x8 scope:local -@353 = .sdata2:0x80500C80; // type:object size:0x8 scope:local -@354 = .sdata2:0x80500C88; // type:object size:0x4 scope:local -@356 = .sdata2:0x80500C90; // type:object size:0x8 scope:local diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp index 3891df20a..ae523cced 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp @@ -20,7 +20,7 @@ Attrib::StringKey CDActionDebug::GetNext() const { } CameraAI::Action *CDActionDebug::Construct(CameraAI::Director *director) { - return new ("CDActionDebug") CDActionDebug(director); + return new (static_cast(0)) CDActionDebug(director); } CDActionDebug::CDActionDebug(CameraAI::Director *director) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index 551b083aa..7381b7d39 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -280,12 +280,11 @@ void CDActionDrive::Update(float dT) { } bool CDActionDrive::GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) { - IBody *ibody = nullptr; + IBody *ibody; if (mVehicle == nullptr) { return false; } - mVehicle->QueryInterface(&ibody); - if (ibody == nullptr) { + if (!mVehicle->QueryInterface(&ibody)) { return false; } ibody->GetTransform(matrix); diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp index e44a63c9c..758eb1a44 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp @@ -111,10 +111,10 @@ CDActionShowcase::CDActionShowcase(CameraAI::Director *director, IPlayer *player CDActionShowcase::~CDActionShowcase() { if (mPlayer) { - Detach(mPlayer); + mAttachments->Detach(mPlayer); } if (mVehicle) { - Detach(mVehicle); + mAttachments->Detach(mVehicle); } delete mMover; delete mAnchor; diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp index 34421f03b..b0517b3c3 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp @@ -108,10 +108,10 @@ CDActionTrackCar::CDActionTrackCar(CameraAI::Director *director, IPlayer *player CDActionTrackCar::~CDActionTrackCar() { if (mPlayer) { - Detach(mPlayer); + mAttachments->Detach(mPlayer); } if (mVehicle) { - Detach(mVehicle); + mAttachments->Detach(mVehicle); } delete mMover; delete mAnchor; @@ -199,12 +199,11 @@ void CDActionTrackCar::Update(float dT) { } bool CDActionTrackCar::GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) { - IBody *ibody = nullptr; + IBody *ibody; if (mVehicle == nullptr) { return false; } - mVehicle->QueryInterface(&ibody); - if (ibody == nullptr) { + if (!mVehicle->QueryInterface(&ibody)) { return false; } ibody->GetTransform(matrix); diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp index fe4337247..a5971957a 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp @@ -116,10 +116,10 @@ CDActionTrackCop::CDActionTrackCop(CameraAI::Director *director, IPlayer *player CDActionTrackCop::~CDActionTrackCop() { if (mPlayer) { - Detach(mPlayer); + mAttachments->Detach(mPlayer); } if (mVehicle) { - Detach(mVehicle); + mAttachments->Detach(mVehicle); } delete mMover; delete mAnchor; @@ -207,12 +207,11 @@ void CDActionTrackCop::Update(float dT) { } bool CDActionTrackCop::GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) { - IBody *ibody = nullptr; + IBody *ibody; if (mVehicle == nullptr) { return false; } - mVehicle->QueryInterface(&ibody); - if (ibody == nullptr) { + if (!mVehicle->QueryInterface(&ibody)) { return false; } ibody->GetTransform(matrix); diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index 0c4626fb8..38095744d 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -2,12 +2,14 @@ #include "Speed/Indep/Src/Camera/CameraMover.hpp" #include "Speed/Indep/Src/Frontend/Database/FEDatabase.hpp" #include "Speed/Indep/Src/Frontend/FEManager.hpp" +#include "Speed/Indep/Src/Gameplay/GRaceStatus.h" #include "Speed/Indep/Src/Generated/Messages/MGamePlayMoment.h" #include "Speed/Indep/Src/Generated/Messages/MICECameraFinished.h" #include "Speed/Indep/Src/Generated/Messages/MMiscSound.h" #include "Speed/Indep/Src/Interfaces/IBody.h" #include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" #include "Speed/Indep/Src/Misc/GameFlow.hpp" +#include "Speed/Indep/Src/Sim/Simulation.h" #include @@ -60,9 +62,9 @@ void CameraAI::Director::ReleaseAction() { void CameraAI::Director::Reset() { mIsCinematicMomement = false; - mCinematicSlowdownSeconds = 0.0f; - mJumpTime = 0.0f; mPursuitStartTime = 0.0f; + mJumpTime = 0.0f; + mCinematicSlowdownSeconds = 0.0f; SetAction(Attrib::StringKey("DRIVE")); if (mAction != nullptr) { mAction->Reset(); @@ -88,10 +90,10 @@ void CameraAI::Director::EndPursuitStart() { } CameraMover *CameraAI::Director::GetMover() { - if (mAction == nullptr) { - return nullptr; + if (mAction != nullptr) { + return mAction->GetMover(); } - return mAction->GetMover(); + return nullptr; } void CameraAI::Director::Update(float dT) { @@ -233,7 +235,8 @@ void CameraAI::Director::SelectAction() { } void CameraAI::Director::TotaledStart() { - mDesiredMode = Attrib::StringKey("TOTALED"); + Attrib::StringKey key("TOTALED"); + mDesiredMode = key; mJumpTime = 0.0f; SetAction(mDesiredMode); } @@ -297,15 +300,17 @@ CameraAI::Director *FindDirector(unsigned int id) { } bool AreMomentCamerasEnabled() { + bool splitCheck = false; if (FEDatabase->IsSplitScreenMode()) { - if (FEDatabase->iNumPlayers == 2) { - return false; - } + splitCheck = (FEDatabase->iNumPlayers == 2); } - if (!FEDatabase->IsLANMode() && !FEDatabase->IsOnlineMode()) { - return FEDatabase->GetGameplaySettings()->JumpCam; + if (splitCheck) { + return false; } - return false; + if (FEDatabase->IsLANMode() || FEDatabase->IsOnlineMode()) { + return false; + } + return FEDatabase->GetGameplaySettings()->JumpCam; } // --- CameraAI namespace functions --- @@ -490,23 +495,90 @@ void CameraAI::Shutdown() { } void CameraAI::AddAvoidable(IBody *body) { - // TODO + Avoidables::iterator iter; + for (iter = TheAvoidables->begin(); iter != TheAvoidables->end(); ++iter) { + if (*iter == body) { + break; + } + } + if (iter == TheAvoidables->end()) { + TheAvoidables->push_back(body); + } } void CameraAI::RemoveAvoidable(IBody *body) { - // TODO + Avoidables::iterator iter; + for (iter = TheAvoidables->begin(); iter != TheAvoidables->end(); ++iter) { + if (*iter == body) { + break; + } + } + if (iter != TheAvoidables->end()) { + TheAvoidables->erase(iter); + } } void CameraAI::StartCinematicSlowdown(EVIEW_ID viewID, float seconds) { - // TODO + const Director::List &list = Director::GetList(); + for (Director *const *iter = list.begin(); iter != list.end(); ++iter) { + Director *cd = *iter; + if (cd->GetViewID() == viewID) { + Action *action = cd->GetAction(); + if (action != nullptr && action->GetName() == Attrib::StringKey("DRIVE")) { + cd->SetCinematicSlowdown(seconds); + } + } + } } void CameraAI::MaybeDoTotaledCam(IPlayer *iplayer) { - // TODO + if (Sim::GetUserMode() != Sim::USER_SINGLE) { + return; + } + const Director::List &list = Director::GetList(); + for (Director *const *iter = list.begin(); iter != list.end(); ++iter) { + Director *cd = *iter; + if (cd->GetViewID() == iplayer->GetControllerPort()) { + cd->TotaledStart(); + } + } } void CameraAI::MaybeDoPursuitCam(IVehicle *ivehicle) { - // TODO + if (TheICEManager.IsEditorOn()) { + return; + } + if (!AreMomentCamerasEnabled()) { + return; + } + INIS *nis = UTL::Collections::Singleton::Get(); + if (nis != nullptr) { + return; + } + GRaceParameters *parms = GRaceStatus::Get().GetRaceParameters(); + if (parms != nullptr) { + if (parms->GetIsPursuitRace()) { + return; + } + if (GRaceStatus::Get().GetRaceTimeElapsed() < 5.0f) { + return; + } + } + if (ivehicle->GetDriverStyle() == STYLE_DRAG) { + return; + } + ISimable *isimable = ivehicle->GetSimable(); + if (isimable == nullptr) { + return; + } + Director *cd = FindDirector(isimable->GetWorldID()); + if (cd == nullptr) { + return; + } + if (gGameBreakerCamera) { + return; + } + cd->PursuitStart(); } void CameraAI::MaybeDoJumpCam(ISimable *simable) { diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 16d06b931..6e7340463 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -849,8 +849,8 @@ bVector3 *CameraMover::DutchAroundCar(bVector3 *pCarPos, bVector3 *pCarVelocity) static bVector3 ret(0.0f, 0.0f, 0.0f); ret.x = 0.0f; - ret.y = 0.0f; ret.z = 0.0f; + ret.y = 0.0f; { _STL::list >::const_iterator iter; @@ -973,70 +973,58 @@ void CameraMover::FovCubicInit(tCubic1D *cubic) { cubic->SetdVal(fov_velocity); } -void CameraMover::EyeCubicInit(tCubic3D *eye, bMatrix4 *matrix, bVector3 *target) { - bVector3 value; - bVector4 dval; - bScaleAdd(&value, pCamera->GetPosition(), pCamera->GetVelocityPosition(), 1.0f / 30.0f); +void CameraMover::EyeCubicInit(tCubic3D *pEye, bMatrix4 *pMatrix, bVector3 *pVelocity) { + bVector3 vEye; + bScaleAdd(&vEye, pCamera->GetPosition(), pCamera->GetVelocityPosition(), 1.0f / 30.0f); - if (matrix != nullptr) { - bMulMatrix(&value, matrix, &value); + if (pMatrix != nullptr) { + bMulMatrix(&vEye, pMatrix, &vEye); } - eye->SetVal(&value); + pEye->SetVal(&vEye); - dval.x = pCamera->GetVelocityPosition()->x; - dval.y = pCamera->GetVelocityPosition()->y; - dval.z = pCamera->GetVelocityPosition()->z; + bVector3 vEyeRel(*pCamera->GetVelocityPosition()); - if (target != nullptr) { - dval.x -= target->x; - dval.y -= target->y; - dval.z -= target->z; + if (pVelocity != nullptr) { + bSub(&vEyeRel, &vEyeRel, pVelocity); } - dval.x *= eye->x.duration; - dval.y *= eye->x.duration; - dval.z *= eye->x.duration; - dval.w = 0.0f; + bVector4 vEyeVel; + bScale(reinterpret_cast(&vEyeVel), &vEyeRel, pEye->x.duration); + vEyeVel.w = 0.0f; - if (matrix != nullptr) { - bMulMatrix(&dval, matrix, &dval); + if (pMatrix != nullptr) { + bMulMatrix(&vEyeVel, pMatrix, &vEyeVel); } - eye->SetdVal(reinterpret_cast(&dval)); + pEye->SetdVal(reinterpret_cast(&vEyeVel)); } -void CameraMover::LookCubicInit(tCubic3D *look, bMatrix4 *matrix, bVector3 *target) { - bVector3 value; - bVector4 dval; - bScaleAdd(&value, pCamera->GetTarget(), pCamera->GetVelocityTarget(), 1.0f / 30.0f); +void CameraMover::LookCubicInit(tCubic3D *pLook, bMatrix4 *pMatrix, bVector3 *pVelocity) { + bVector3 vLook; + bScaleAdd(&vLook, pCamera->GetTarget(), pCamera->GetVelocityTarget(), 1.0f / 30.0f); - if (matrix != nullptr) { - bMulMatrix(&value, matrix, &value); + if (pMatrix != nullptr) { + bMulMatrix(&vLook, pMatrix, &vLook); } - look->SetVal(&value); + pLook->SetVal(&vLook); - dval.x = pCamera->GetVelocityTarget()->x; - dval.y = pCamera->GetVelocityTarget()->y; - dval.z = pCamera->GetVelocityTarget()->z; + bVector3 vLookRel(*pCamera->GetVelocityTarget()); - if (target != nullptr) { - dval.x -= target->x; - dval.y -= target->y; - dval.z -= target->z; + if (pVelocity != nullptr) { + bSub(&vLookRel, &vLookRel, pVelocity); } - dval.x *= look->x.duration; - dval.y *= look->x.duration; - dval.z *= look->x.duration; - dval.w = 0.0f; + bVector4 vLookVel; + bScale(reinterpret_cast(&vLookVel), &vLookRel, pLook->x.duration); + vLookVel.w = 0.0f; - if (matrix != nullptr) { - bMulMatrix(&dval, matrix, &dval); + if (pMatrix != nullptr) { + bMulMatrix(&vLookVel, pMatrix, &vLookVel); } - look->SetdVal(reinterpret_cast(&dval)); + pLook->SetdVal(reinterpret_cast(&vLookVel)); } void CameraMover::SetEyeLook(tCubic3D *eye, tCubic3D *look, tCubic1D *fov, bMatrix4 *matrix, bVector3 *target) { @@ -1312,8 +1300,8 @@ Bezier::Bezier() void Bezier::GetPoint(bVector3 *pPoint, float parameter) { if (pControlPoints != nullptr) { - bVector4 v; bVector4 basis; + bVector4 v; float t = 1.0f - parameter; float t2 = t * t; diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEData.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEData.cpp index 7d45ab24a..0d30977a8 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEData.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEData.cpp @@ -19,8 +19,8 @@ void ICEData::PlatEndianSwap() { bPlatEndianSwap(&fDutch[i]); bPlatEndianSwap(&fLens[i]); bPlatEndianSwap(&fNearClip[i]); - bPlatEndianSwap(&fNoiseAmplitude[i]); bPlatEndianSwap(&fFocalDistance[i]); + bPlatEndianSwap(&fNoiseAmplitude[i]); bPlatEndianSwap(&fNoiseFrequency[i]); } } diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp index ee4617898..30a3168a5 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp @@ -121,7 +121,7 @@ int ICETrack::GetKeyNumber(float f_param) { if (i < 1) { return i; } - if (!(f_param < parameters[i * 33])) { + if (parameters[i * 33] <= f_param) { return i; } @@ -211,10 +211,12 @@ ICEData *ICETrack::GetCameraData(float *p_start, float *p_end, float *p_current) } void ICEShakeData::PlatEndianSwap() { - for (int i = 0; i < 3; i++) { - bPlatEndianSwap(&q[i]); - bPlatEndianSwap(&p[i]); - } + bPlatEndianSwap(&q[0]); + bPlatEndianSwap(&q[1]); + bPlatEndianSwap(&q[2]); + bPlatEndianSwap(&p[0]); + bPlatEndianSwap(&p[1]); + bPlatEndianSwap(&p[2]); } void ICEShakeTrack::PlatEndianSwap() { @@ -330,13 +332,11 @@ ICEShakeTrack *ICEManager::GetShakeTrack(unsigned int shake_type) { } int ICEManager::GetCameraIndex(float f_param, ICETrack *track) { - int camera_index = 0; - if (track != 0) { - camera_index = track->GetKeyNumber(f_param); + return track->GetKeyNumber(f_param); } - return camera_index; + return 0; } float ICEManager::GetParameter() { @@ -417,8 +417,8 @@ void ICEManager::ChooseReplayCamera() { float ICEManager::GetAnimElevationFixup(ICE::Vector3 *position) { float elevation = GetGroundElevation(position); - if (elevation != 0.0f) { - return fAnimElevation - elevation; + if (0.0f < elevation) { + return elevation - fAnimElevation; } return 0.0f; } @@ -429,7 +429,8 @@ void ICEManager::FixAnimElevation(ICE::Vector3 *position) { void ICEManager::SetGenericCameraToPlay(const char *group_name, const char *track_name) { nPlayGenericGroupHash = Attrib::StringHash32(group_name); - bStrNCpy(nPlayGenericTrackName, track_name, 14); + bStrNCpy(nPlayGenericTrackName, track_name, 13); + nPlayGenericTrackName[13] = 0; } ICEData *ICEManager::GetCameraData(unsigned int scene_hash, int camTrack) { @@ -467,20 +468,20 @@ ICEGroup *ICEManager::GetCameraGroup(ICEContext context, unsigned int handle) { switch (context) { case eDCE_NIS: - num_groups = nNisCameras; groups = pNisCameras; + num_groups = nNisCameras; break; case eDCE_FMV: - num_groups = nFmvCameras; groups = pFmvCameras; + num_groups = nFmvCameras; break; case eDCE_REPLAY: - num_groups = nReplayCameras; groups = pReplayCameras; + num_groups = nReplayCameras; break; case eDCE_GENERIC: - num_groups = nGenericCameras; groups = pGenericCameras; + num_groups = nGenericCameras; break; default: break; @@ -685,8 +686,12 @@ void ICECompleteEventTags() { int key = TheICEManager.GetCameraIndex((fParameter0 + fParameter1) * 0.5f, p_track); if (p_track != 0) { int keyCount = p_track->GetNumKeys(); - while (++key < keyCount) { - ICE::FireEventTag(key); + key++; + if (key < keyCount) { + do { + ICE::FireEventTag(key); + key++; + } while (key < keyCount); } } } diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index 0ff62138f..46b8e6227 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -44,7 +44,7 @@ float ConvertLensDeltaToFovDelta(float f_lens_mm, float f_lens_slope) { } float ConvertApertureNumberToFStop(float aperture) { - static const float kFStops[] = { + const float kFStops[] = { 1.0f, 1.1224620f, 1.2599211f, @@ -260,13 +260,11 @@ float Cubic1D::GetVal(float t) const { } float Cubic1D::GetdVal(float t) const { - float value = Coeff[0] * (t * 3.0f) + Coeff[1]; - return (value + Coeff[1]) * t + Coeff[2]; + return (Coeff[0] * (t * 3.0f) + (Coeff[1] + Coeff[1])) * t + Coeff[2]; } float Cubic1D::GetddVal(float t) const { - float value = Coeff[0] * (t * 6.0f) + Coeff[1]; - return value + Coeff[1]; + return Coeff[0] * (t * 6.0f) + (Coeff[1] + Coeff[1]); } float Cubic1D::GetValDesired() const { @@ -317,24 +315,33 @@ void Cubic1D::ClampSecondDerivative(float fMag) { } void Cubic1D::Update(float fSeconds, float fDClamp, float fDDClamp) { - if (state == 2) { - time = 0.0f; + if (state == 1) { + goto update; + } + if (state <= 1) { + return; + } + if (state != 2) { + return; + } - if (flags == 0) { - state = 1; - } - if (0.0f < fDClamp) { - ClampDerivative(fDClamp); - } + time = 0.0f; + + if (flags == 0) { + state = 1; + } + if (0.0f < fDClamp) { + ClampDerivative(fDClamp); + } - MakeCoeffs(); + MakeCoeffs(); - if (0.0f < fDDClamp) { - ClampSecondDerivative(fDDClamp); - } + if (0.0f < fDDClamp) { + ClampSecondDerivative(fDDClamp); } - if (state == 1 || state == 2) { +update: + { float t = 1.0f; if (0.0f < duration) { @@ -755,6 +762,8 @@ float ICEMover::GetDutch(float f_param) { } unsigned short ICEMover::GetFOV(float f_param) { + float result; + if (pICEData == 0) { goto blend; } @@ -762,10 +771,14 @@ unsigned short ICEMover::GetFOV(float f_param) { goto blend; } - return static_cast(pFov->GetVal(f_param)); + result = pFov->GetVal(f_param); + goto done; blend: - return static_cast(pFov->GetVal() * (1.0f - f_param) + pFov->GetValDesired() * f_param); + result = pFov->GetVal() * (1.0f - f_param) + pFov->GetValDesired() * f_param; + +done: + return static_cast(result); } ICEMover::~ICEMover() { @@ -794,7 +807,18 @@ ICEMover::~ICEMover() { } void ICEMover::GetEye(ICE::Vector3 *vEye, float f_param) { - if (pICEData == 0 || pICEData->bCubicEye == 0) { + if (pICEData == 0) { + goto blend; + } + if (pICEData->bCubicEye == 0) { + goto blend; + } + + pEye->GetVal(vEye, f_param); + return; + +blend: + { ICE::Vector3 v0; ICE::Vector3 v1; pEye->GetVal(&v0); @@ -803,13 +827,22 @@ void ICEMover::GetEye(ICE::Vector3 *vEye, float f_param) { bScale(reinterpret_cast(vEye), reinterpret_cast(&v0), inv); bScaleAdd(reinterpret_cast(vEye), reinterpret_cast(vEye), reinterpret_cast(&v1), f_param); - } else { - pEye->GetVal(vEye, f_param); } } void ICEMover::GetLook(ICE::Vector3 *vLook, float f_param) { - if (pICEData == 0 || pICEData->bCubicLook == 0) { + if (pICEData == 0) { + goto blend; + } + if (pICEData->bCubicLook == 0) { + goto blend; + } + + pLook->GetVal(vLook, f_param); + return; + +blend: + { ICE::Vector3 v0; ICE::Vector3 v1; pLook->GetVal(&v0); @@ -818,8 +851,6 @@ void ICEMover::GetLook(ICE::Vector3 *vLook, float f_param) { bScale(reinterpret_cast(vLook), reinterpret_cast(&v0), inv); bScaleAdd(reinterpret_cast(vLook), reinterpret_cast(vLook), reinterpret_cast(&v1), f_param); - } else { - pLook->GetVal(vLook, f_param); } } diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEOverlays.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEOverlays.cpp index 6b299c82e..bf4612929 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEOverlays.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEOverlays.cpp @@ -2,6 +2,7 @@ struct cFEng { static cFEng *Get(); + static cFEng *mInstance; void PushNoControlPackage(const char *name, int priority); void PopNoControlPackage(const char *name); bool IsPackagePushed(const char *name); @@ -42,17 +43,17 @@ void ShowOverlay(unsigned char overlay) { if ((gOverlay & 0x7f) == 0 || (gOverlay & 0x80) != 0) { new ELoadingScreenOff(); gOverlay = overlay; - cFEng::Get()->PushNoControlPackage(GetOverlayName(overlay), 0x67); + cFEng::mInstance->PushNoControlPackage(GetOverlayName(overlay), 0x67); } } } void HideOverlay() { if ((gOverlay & 0x7f) != 0) { - if (!cFEng::Get()->IsPackagePushed(GetOverlayName(gOverlay & 0x7f))) { + if (!cFEng::mInstance->IsPackagePushed(GetOverlayName(gOverlay & 0x7f))) { gOverlay = gOverlay | 0x80; } else { - cFEng::Get()->PopNoControlPackage(GetOverlayName(gOverlay & 0x7f)); + cFEng::mInstance->PopNoControlPackage(GetOverlayName(gOverlay & 0x7f)); gOverlay = 0; } } diff --git a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp index 1a224341a..61da97a38 100644 --- a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp @@ -116,17 +116,46 @@ void SelectCarCameraMover::Update(float dT) { } void SelectCarCameraMover::SetCurrentOrientation(bVector3 &orbit, float roll, float fov, bVector3 &lookAt) { - // TODO + CurrentCameraData.OrbitVAngle = orbit.x; + CurrentCameraData.OrbitHAngle = orbit.y; + CurrentCameraData.Radius = orbit.z; + CurrentCameraData.RollAngle = roll; + CurrentCameraData.FOV = fov; + CurrentCameraData.LookAt = lookAt; } void SelectCarCameraMover::SetDesiredOrientation(bVector3 &orbit, float roll, float fov, bVector3 &lookAt, float animSpeed, float damping, int periods) { - // TODO + GoalAnimCameraData = CurrentCameraData; + ControlMode = 0; + StartAnimCameraData = CurrentCameraData; + GoalAnimCameraData.OrbitVAngle = orbit.x; + GoalAnimCameraData.OrbitHAngle = orbit.y; + GoalAnimCameraData.Radius = orbit.z; + GoalAnimCameraData.RollAngle = roll; + GoalAnimCameraData.FOV = fov; + GoalAnimCameraData.LookAt = lookAt; + Damping = damping; + Periods = periods; + GoalAnimCameraData.OrbitVAngle = FindBestAngleGoal(StartAnimCameraData.OrbitVAngle, GoalAnimCameraData.OrbitVAngle); + GoalAnimCameraData.OrbitHAngle = FindBestAngleGoal(StartAnimCameraData.OrbitHAngle, GoalAnimCameraData.OrbitHAngle); + GoalAnimCameraData.RollAngle = FindBestAngleGoal(StartAnimCameraData.RollAngle, GoalAnimCameraData.RollAngle); + TotalAnimationTime = animSpeed; + CurrentAnimationTime = 0.0f; } float SelectCarCameraMover::FindBestAngleGoal(float start, float goal) { - // TODO - return 0.0f; + float normal_h_diff = bAbs(start - goal); + float over_h_diff = bAbs(start - (goal + kSelectCarWrapAngle)); + float under_h_diff = bAbs(start - (goal - kSelectCarWrapAngle)); + + if (over_h_diff < normal_h_diff && over_h_diff < under_h_diff) { + return goal + kSelectCarWrapAngle; + } + if (under_h_diff < normal_h_diff && under_h_diff < over_h_diff) { + return goal - kSelectCarWrapAngle; + } + return goal; } void SelectCarCameraMover::CreateCameraMatrix(bMatrix4 *camera_matrix, SelectCarCameraData *camera_data) { diff --git a/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h b/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h index e295ac620..5ca7ada05 100644 --- a/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h +++ b/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h @@ -33,14 +33,9 @@ class IPlayer : public UTL::COM::IUnknown, public UTL::Collections::ListableSet< virtual ISimable *GetSimable() const; -#ifndef EA_BUILD_A124 - virtual bool IsLocal() const; -#endif - virtual const UMath::Vector3 &GetPosition() const; virtual bool SetPosition(const UMath::Vector3 &position); virtual PlayerSettings *GetSettings() const; - virtual void SetSettings(int fe_index); virtual int GetSettingsIndex() const; virtual IHud *GetHud() const; virtual void SetHud() const; // TODO fix params diff --git a/src/Speed/Indep/Tools/Inc/ConversionUtil.hpp b/src/Speed/Indep/Tools/Inc/ConversionUtil.hpp index 8b044fa4b..c4a746c31 100644 --- a/src/Speed/Indep/Tools/Inc/ConversionUtil.hpp +++ b/src/Speed/Indep/Tools/Inc/ConversionUtil.hpp @@ -102,7 +102,7 @@ inline Mps KPH2MPS(Kph x) { namespace ConversionUtil { template -inline void Copy4(T1 &out, const T2 &in) { +void Copy4(T1 &out, const T2 &in) { out.x = in.x; out.y = in.y; out.z = in.z; @@ -110,14 +110,14 @@ inline void Copy4(T1 &out, const T2 &in) { } template -inline void Scale3(T &v, float s) { +void Scale3(T &v, float s) { v.x *= s; v.y *= s; v.z *= s; } template -inline T Make4(float x, float y, float z, float w) { +T Make4(float x, float y, float z, float w) { T v; v.x = x; v.y = y; @@ -127,7 +127,7 @@ inline T Make4(float x, float y, float z, float w) { } template -inline T Make3(float x, float y, float z) { +T Make3(float x, float y, float z) { T v; v.x = x; v.y = y; @@ -136,7 +136,7 @@ inline T Make3(float x, float y, float z) { } template -inline void RightToLeftVector4(const T1 &in, T2 &out) { +void RightToLeftVector4(const T1 &in, T2 &out) { out.x = in.x; out.y = in.z; out.z = -in.y; @@ -144,14 +144,14 @@ inline void RightToLeftVector4(const T1 &in, T2 &out) { } template -inline void RightToLeftVector3(const T1 &in, T2 &out) { +void RightToLeftVector3(const T1 &in, T2 &out) { out.x = in.x; out.y = in.z; out.z = -in.y; } template -inline void RightToLeftMatrix4(const T1 &in, T2 &out) { +void RightToLeftMatrix4(const T1 &in, T2 &out) { T2 tmp; RightToLeftVector4(in[0], tmp[0]); RightToLeftVector4(in[1], tmp[1]); From 7039ff89feed670466bed84dee513158371b4b8d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 03:29:48 +0100 Subject: [PATCH 018/691] zCamera: fix ConversionUtil templates, FindPlayer, ICEManager ctor, Construct algorithms - Fix ConversionUtil::RightToLeftVector3/4 to use Make3/Make4 internally - Fix Copy4 template parameter order (T1=source, T2=dest) - Fix RightToLeftMatrix4 to use correct Copy4/Scale3/RightToLeftVector4 sequence - Fix FindPlayer to inline GetList calls (avoids reference offset issue) - Fix ICEManager::ICEManager float/bool assignment order for scheduling match - Fix all 4 CDAction Construct functions: use GetSettingsIndex/GetSimable/GetWorldID algorithm instead of GetSimable/QueryInterface(IVehicle)/GetWorldID - Add ICEShakeTrack::IsAllocated() inline method - Now at 54.8% (181/453 functions) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Src/Camera/Actions/CDActionDrive.cpp | 21 +++--- .../Src/Camera/Actions/CDActionShowcase.cpp | 21 +++--- .../Src/Camera/Actions/CDActionTrackCar.cpp | 21 +++--- .../Src/Camera/Actions/CDActionTrackCop.cpp | 21 +++--- src/Speed/Indep/Src/Camera/CameraAI.cpp | 28 +++----- src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp | 67 +++++++++---------- src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp | 1 + .../Indep/Src/Camera/ICE/ICEOverlays.cpp | 20 ++++-- .../Indep/Src/Camera/Movers/SelectCar.cpp | 34 +++++++++- .../Indep/Src/Camera/Movers/Showcase.cpp | 37 ++++++++-- src/Speed/Indep/Tools/Inc/ConversionUtil.hpp | 31 ++++----- 11 files changed, 166 insertions(+), 136 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index 7381b7d39..6acc4e388 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -52,11 +52,9 @@ const IAttachable::List *CDActionDrive::GetAttachments() const { CameraAI::Action *CDActionDrive::Construct(CameraAI::Director *director) { IPlayer *player = nullptr; - int player_idx; - ISimable *isimable; - const IPlayer::List &list = IPlayer::GetList(PLAYER_LOCAL); - for (IPlayer *const *iter = list.begin(); iter != list.end(); ++iter) { - IPlayer *ip = *iter; + IPlayer *ip; + for (IPlayer *const *iter = IPlayer::GetList(PLAYER_LOCAL).begin(); iter != IPlayer::GetList(PLAYER_LOCAL).end(); ++iter) { + ip = *iter; if (ip->GetControllerPort() == static_cast(director->GetViewID())) { player = ip; break; @@ -67,23 +65,20 @@ CameraAI::Action *CDActionDrive::Construct(CameraAI::Director *director) { return nullptr; } - isimable = player->GetSimable(); - if (isimable == nullptr) { + if (player->GetSettingsIndex() == 0) { return nullptr; } - IVehicle *ivehicle = nullptr; - isimable->QueryInterface(&ivehicle); - if (ivehicle == nullptr) { + ISimable *isimable = player->GetSimable(); + if (isimable == nullptr) { return nullptr; } - unsigned int world_id = isimable->GetWorldID(); - if (world_id == 0) { + if (isimable->GetWorldID() == 0) { return nullptr; } - return new ("CDActionDrive") CDActionDrive(director, player); + return new (static_cast(0)) CDActionDrive(director, player); } CDActionDrive::CDActionDrive(CameraAI::Director *director, IPlayer *player) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp index 758eb1a44..dbaeadef3 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp @@ -40,11 +40,9 @@ const IAttachable::List *CDActionShowcase::GetAttachments() const { CameraAI::Action *CDActionShowcase::Construct(CameraAI::Director *director) { IPlayer *player = nullptr; - int player_idx; - ISimable *isimable; - const IPlayer::List &list = IPlayer::GetList(PLAYER_LOCAL); - for (IPlayer *const *iter = list.begin(); iter != list.end(); ++iter) { - IPlayer *ip = *iter; + IPlayer *ip; + for (IPlayer *const *iter = IPlayer::GetList(PLAYER_LOCAL).begin(); iter != IPlayer::GetList(PLAYER_LOCAL).end(); ++iter) { + ip = *iter; if (ip->GetControllerPort() == static_cast(director->GetViewID())) { player = ip; break; @@ -55,23 +53,20 @@ CameraAI::Action *CDActionShowcase::Construct(CameraAI::Director *director) { return nullptr; } - isimable = player->GetSimable(); - if (isimable == nullptr) { + if (player->GetSettingsIndex() == 0) { return nullptr; } - IVehicle *ivehicle = nullptr; - isimable->QueryInterface(&ivehicle); - if (ivehicle == nullptr) { + ISimable *isimable = player->GetSimable(); + if (isimable == nullptr) { return nullptr; } - unsigned int world_id = isimable->GetWorldID(); - if (world_id == 0) { + if (isimable->GetWorldID() == 0) { return nullptr; } - return new ("CDActionShowcase") CDActionShowcase(director, player); + return new (static_cast(0)) CDActionShowcase(director, player); } CDActionShowcase::CDActionShowcase(CameraAI::Director *director, IPlayer *player) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp index b0517b3c3..c21c54e2d 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp @@ -37,11 +37,9 @@ const IAttachable::List *CDActionTrackCar::GetAttachments() const { CameraAI::Action *CDActionTrackCar::Construct(CameraAI::Director *director) { IPlayer *player = nullptr; - int player_idx; - ISimable *isimable; - const IPlayer::List &list = IPlayer::GetList(PLAYER_LOCAL); - for (IPlayer *const *iter = list.begin(); iter != list.end(); ++iter) { - IPlayer *ip = *iter; + IPlayer *ip; + for (IPlayer *const *iter = IPlayer::GetList(PLAYER_LOCAL).begin(); iter != IPlayer::GetList(PLAYER_LOCAL).end(); ++iter) { + ip = *iter; if (ip->GetControllerPort() == static_cast(director->GetViewID())) { player = ip; break; @@ -52,23 +50,20 @@ CameraAI::Action *CDActionTrackCar::Construct(CameraAI::Director *director) { return nullptr; } - isimable = player->GetSimable(); - if (isimable == nullptr) { + if (player->GetSettingsIndex() == 0) { return nullptr; } - IVehicle *ivehicle = nullptr; - isimable->QueryInterface(&ivehicle); - if (ivehicle == nullptr) { + ISimable *isimable = player->GetSimable(); + if (isimable == nullptr) { return nullptr; } - unsigned int world_id = isimable->GetWorldID(); - if (world_id == 0) { + if (isimable->GetWorldID() == 0) { return nullptr; } - return new ("CDActionTrackCar") CDActionTrackCar(director, player); + return new (static_cast(0)) CDActionTrackCar(director, player); } CDActionTrackCar::CDActionTrackCar(CameraAI::Director *director, IPlayer *player) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp index a5971957a..958afef9a 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp @@ -38,11 +38,9 @@ const IAttachable::List *CDActionTrackCop::GetAttachments() const { CameraAI::Action *CDActionTrackCop::Construct(CameraAI::Director *director) { IPlayer *player = nullptr; - int player_idx; - ISimable *isimable; - const IPlayer::List &list = IPlayer::GetList(PLAYER_LOCAL); - for (IPlayer *const *iter = list.begin(); iter != list.end(); ++iter) { - IPlayer *ip = *iter; + IPlayer *ip; + for (IPlayer *const *iter = IPlayer::GetList(PLAYER_LOCAL).begin(); iter != IPlayer::GetList(PLAYER_LOCAL).end(); ++iter) { + ip = *iter; if (ip->GetControllerPort() == static_cast(director->GetViewID())) { player = ip; break; @@ -53,23 +51,20 @@ CameraAI::Action *CDActionTrackCop::Construct(CameraAI::Director *director) { return nullptr; } - isimable = player->GetSimable(); - if (isimable == nullptr) { + if (player->GetSettingsIndex() == 0) { return nullptr; } - IVehicle *ivehicle = nullptr; - isimable->QueryInterface(&ivehicle); - if (ivehicle == nullptr) { + ISimable *isimable = player->GetSimable(); + if (isimable == nullptr) { return nullptr; } - unsigned int world_id = isimable->GetWorldID(); - if (world_id == 0) { + if (isimable->GetWorldID() == 0) { return nullptr; } - return new ("CDActionTrackCop") CDActionTrackCop(director, player); + return new (static_cast(0)) CDActionTrackCop(director, player); } CDActionTrackCop::CDActionTrackCop(CameraAI::Director *director, IPlayer *player) diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index 38095744d..65e9afafa 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -11,6 +11,7 @@ #include "Speed/Indep/Src/Misc/GameFlow.hpp" #include "Speed/Indep/Src/Sim/Simulation.h" +#include #include #include @@ -62,9 +63,9 @@ void CameraAI::Director::ReleaseAction() { void CameraAI::Director::Reset() { mIsCinematicMomement = false; - mPursuitStartTime = 0.0f; - mJumpTime = 0.0f; mCinematicSlowdownSeconds = 0.0f; + mJumpTime = 0.0f; + mPursuitStartTime = 0.0f; SetAction(Attrib::StringKey("DRIVE")); if (mAction != nullptr) { mAction->Reset(); @@ -235,8 +236,7 @@ void CameraAI::Director::SelectAction() { } void CameraAI::Director::TotaledStart() { - Attrib::StringKey key("TOTALED"); - mDesiredMode = key; + mDesiredMode = Attrib::StringKey("TOTALED"); mJumpTime = 0.0f; SetAction(mDesiredMode); } @@ -262,9 +262,7 @@ void CameraAI::Director::PursuitStart() { // --- Free functions --- IPlayer *FindPlayer(EVIEW_ID id) { - const UTL::Collections::ListableSet::List &list = - UTL::Collections::ListableSet::GetList(PLAYER_LOCAL); - for (IPlayer *const *iter = list.begin(); iter != list.end(); ++iter) { + for (IPlayer *const *iter = IPlayer::GetList(PLAYER_LOCAL).begin(); iter != IPlayer::GetList(PLAYER_LOCAL).end(); ++iter) { IPlayer *ip = *iter; if (ip->GetControllerPort() == static_cast(id)) { return ip; @@ -307,7 +305,7 @@ bool AreMomentCamerasEnabled() { if (splitCheck) { return false; } - if (FEDatabase->IsLANMode() || FEDatabase->IsOnlineMode()) { + if (FEDatabase->IsOnlineMode() || FEDatabase->IsLANMode()) { return false; } return FEDatabase->GetGameplaySettings()->JumpCam; @@ -495,24 +493,14 @@ void CameraAI::Shutdown() { } void CameraAI::AddAvoidable(IBody *body) { - Avoidables::iterator iter; - for (iter = TheAvoidables->begin(); iter != TheAvoidables->end(); ++iter) { - if (*iter == body) { - break; - } - } + Avoidables::iterator iter = _STL::find(TheAvoidables->begin(), TheAvoidables->end(), body); if (iter == TheAvoidables->end()) { TheAvoidables->push_back(body); } } void CameraAI::RemoveAvoidable(IBody *body) { - Avoidables::iterator iter; - for (iter = TheAvoidables->begin(); iter != TheAvoidables->end(); ++iter) { - if (*iter == body) { - break; - } - } + Avoidables::iterator iter = _STL::find(TheAvoidables->begin(), TheAvoidables->end(), body); if (iter != TheAvoidables->end()) { TheAvoidables->erase(iter); } diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp index 30a3168a5..db8f5cba2 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp @@ -36,7 +36,7 @@ void ICEGroup::FlushAllocatedTracks() { while (track != TrackList.EndOfList()) { ICETrack *next = track->GetNext(); - if (track->Allocated != 0) { + if (track->IsAllocated()) { TrackList.Remove(track); delete track; NumTracks--; @@ -76,7 +76,7 @@ void ICEShakeGroup::FlushAllocatedTracks() { while (track != TrackList.EndOfList()) { ICEShakeTrack *next = track->GetNext(); - if (track->Allocated != 0) { + if (track->IsAllocated()) { TrackList.Remove(track); delete track; NumTracks--; @@ -228,35 +228,36 @@ void ICEShakeTrack::PlatEndianSwap() { } ICEManager::ICEManager() { - pNisCameras = 0; - pFmvCameras = 0; - pReplayCameras = 0; - pGenericCameras = 0; - pShakeGroup = 0; - nNisCameras = 0; - nFmvCameras = 0; - nReplayCameras = 0; - nGenericCameras = 0; - pPlaybackTrack = 0; nState = 0; nTrack = 0; nHandle = 0; nOption = 0; nSetting = 0; + nSceneHash = 0; nExitConfirmOption = 0; nDeleteConfirmOption = 0; - nContext = 3; nCopyMode = 0; - nSceneHash = 0; + nNisCameras = 0; + nFmvCameras = 0; + nReplayCameras = 0; + nGenericCameras = 0; + pNisCameras = 0; + pFmvCameras = 0; + pReplayCameras = 0; + pGenericCameras = 0; + pShakeGroup = 0; + nContext = 3; fAnimElevation = 0.0f; fParameterStart = 0.0f; fParameterLength = 0.0f; fParameterLengthBackup = 0.0f; - nPlayGenericGroupHash = 0; + nPlayGenericGroupHash = bStringHash(""); + nPlayGenericTrackName[0] = 0; + pPlaybackTrack = 0; + ICEReplay::ClearRecentlyUsed(); bSmoothExit = false; nMarkerIndex = -1; bUseRealTime = false; - ICEReplay::ClearRecentlyUsed(); } float ICEManager::GetTimerSeconds() { @@ -351,15 +352,17 @@ float ICEManager::GetParameter() { } float ICEManager::GetParameter(int i, ICETrack *track) { - if (track != 0 && i > -1) { - if (track->NumKeys <= i) { - return 1.0f; - } - + if (track == 0) { + return 0.0f; + } + if (i < 0) { + return 0.0f; + } + if (i < track->NumKeys) { return track->Keys[i].fParameter; } - return 0.0f; + return 1.0f; } float ICEManager::GetIntervalSize(ICEData *data, ICETrack *track) { @@ -489,7 +492,7 @@ ICEGroup *ICEManager::GetCameraGroup(ICEContext context, unsigned int handle) { for (int i = 0; i < num_groups; i++) { ICEGroup *group = &groups[i]; - if (group->GetHandle() == handle) { + if (handle == group->GetHandle()) { return group; } } @@ -642,13 +645,11 @@ ICEScene *FindAnimScene() { } unsigned int GetSceneCount() { - AnimDirectory *directory = TheAnimDirectory; - - if (directory == 0) { + if (TheAnimDirectory == 0) { return 0; } - return directory->GetSceneCount(); + return TheAnimDirectory->GetSceneCount(); } unsigned int GetSceneHash(unsigned int slot) { @@ -679,19 +680,15 @@ void FireEventTag(int key) { } // namespace ICE void ICECompleteEventTags() { - ICETrack *p_track = 0; + ICETrack *p_track; float fParameter0; float fParameter1; TheICEManager.GetCameraData(&p_track, &fParameter0, &fParameter1); - int key = TheICEManager.GetCameraIndex((fParameter0 + fParameter1) * 0.5f, p_track); + int key = TheICEManager.GetCameraIndex((fParameter0 + fParameter1) * 0.5f, p_track) + 1; if (p_track != 0) { int keyCount = p_track->GetNumKeys(); - key++; - if (key < keyCount) { - do { - ICE::FireEventTag(key); - key++; - } while (key < keyCount); + for (; key < keyCount; key++) { + ICE::FireEventTag(key); } } } diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp index 42be69c07..50c94e2af 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp @@ -119,6 +119,7 @@ struct ICEShakeData { // total size: 0xB60 struct ICEShakeTrack : public bTNode { void PlatEndianSwap(); + bool IsAllocated() { return Allocated != 0; } ICEShakeGroup *Group; // offset 0x8, size 0x4 short NumKeys; // offset 0xC, size 0x2 diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEOverlays.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEOverlays.cpp index bf4612929..bf308b610 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEOverlays.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEOverlays.cpp @@ -1,5 +1,17 @@ // ICE Overlay system +#include + +class Event { + public: + void *operator new(std::size_t size); + void operator delete(void *ptr, std::size_t size); + virtual ~Event() {} + virtual const char *GetEventName(); + Event(std::size_t size) : fEventSize(size) {} + std::size_t fEventSize; +}; + struct cFEng { static cFEng *Get(); static cFEng *mInstance; @@ -8,7 +20,7 @@ struct cFEng { bool IsPackagePushed(const char *name); }; -struct ELoadingScreenOff { +struct ELoadingScreenOff : public Event { ELoadingScreenOff(); }; @@ -50,11 +62,11 @@ void ShowOverlay(unsigned char overlay) { void HideOverlay() { if ((gOverlay & 0x7f) != 0) { - if (!cFEng::mInstance->IsPackagePushed(GetOverlayName(gOverlay & 0x7f))) { - gOverlay = gOverlay | 0x80; - } else { + if (cFEng::mInstance->IsPackagePushed(GetOverlayName(gOverlay & 0x7f))) { cFEng::mInstance->PopNoControlPackage(GetOverlayName(gOverlay & 0x7f)); gOverlay = 0; + } else { + gOverlay = gOverlay | 0x80; } } } diff --git a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp index 61da97a38..61ed56b41 100644 --- a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp @@ -28,7 +28,23 @@ void SelectCarCameraMover::SetZoomSpeed(float f) { } SelectCarCameraMover::SelectCarCameraMover(int view_id) : CameraMover(view_id, CM_SELECT_CAR) { - // TODO + CurrentAnimationTime = 0.0f; + CurrentCameraData.OrbitVAngle = 0.0f; + CurrentCameraData.OrbitHAngle = 0.0f; + CurrentCameraData.Radius = 0.0f; + CurrentCameraData.RollAngle = 0.0f; + CurrentCameraData.FOV = 0.0f; + bFill(&CurrentCameraData.LookAt, 0.0f, 0.0f, 0.0f); + StartAnimCameraData = CurrentCameraData; + GoalAnimCameraData = CurrentCameraData; + RadiusSpeed = 0.0f; + OrbitVSpeed = 0.0f; + OrbitHSpeed = 0.0f; + ControlMode = 1; + LookingAtParts = 0; + TotalAnimationTime = 1.0f; + Periods = 2; + Damping = 5.0f; } void SelectCarCameraMover::Update(float dT) { @@ -159,5 +175,19 @@ float SelectCarCameraMover::FindBestAngleGoal(float start, float goal) { } void SelectCarCameraMover::CreateCameraMatrix(bMatrix4 *camera_matrix, SelectCarCameraData *camera_data) { - // TODO + bVector3 transpost(0.0f, 0.0f, camera_data->Radius); + bMatrix4 camera_to_world; + bVector3 eye; + bVector3 up; + + bIdentity(camera_matrix); + eRotateZ(camera_matrix, camera_matrix, bDegToAng(camera_data->OrbitHAngle)); + eRotateX(camera_matrix, camera_matrix, bDegToAng(camera_data->OrbitVAngle)); + eTranslate(camera_matrix, camera_matrix, &transpost); + eInvertTransformationMatrix(&camera_to_world, camera_matrix); + eye.x = camera_to_world.v3.x; + eye.y = camera_to_world.v3.y; + eye.z = camera_to_world.v3.z; + ComputeBankedUpVector(&up, &eye, &camera_data->LookAt, bDegToAng(camera_data->RollAngle)); + eCreateLookAtMatrix(camera_matrix, eye, camera_data->LookAt, up); } diff --git a/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp b/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp index 7d7474a65..ab48f362e 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp @@ -1,18 +1,37 @@ #include "Speed/Indep/Src/Camera/Movers/Showcase.hpp" +#include "Speed/Indep/Src/Camera/Camera.hpp" + +static float gPhoto_LatAng = 90.0f; +static float gPhoto_UpAng = 2.0f; +static float gPhoto_Dist = 5.0f; +static float gPhoto_DOF = 0.0f; +static bVector3 gPhoto_CarPosBias; ShowcaseCameraMover::~ShowcaseCameraMover() {} void ShowcaseCameraMover::ResetState() { - // TODO - accesses ICEData members through pCar + GetCamera()->ClearVelocity(); } ShowcaseCameraMover::ShowcaseCameraMover(int nView, CameraAnchor *p_car, bool flipSide) : CameraMover(nView, CM_SHOWCASE) { - // TODO + pCar = p_car; + GetCamera()->ClearVelocity(); + SetFromTweakables(); + if (flipSide) { + mLatAng = -mLatAng; + } + BuildPhotoCameraMatrix(); } void ShowcaseCameraMover::SetFromTweakables() { - // TODO + mLatAng = gPhoto_LatAng; + mUpAng = gPhoto_UpAng; + mDist = gPhoto_Dist; + mCarPosBias = gPhoto_CarPosBias; + mFOV = gPhoto_LatAng; + mFd = gPhoto_DOF; + mDOF = gPhoto_DOF; } void ShowcaseCameraMover::SetShowcaseCameraParams(float lat_ang, float up_ang, float dist, float carpos_bias_x, float carpos_bias_y, @@ -25,5 +44,15 @@ void ShowcaseCameraMover::BuildPhotoCameraMatrix() { } void ShowcaseCameraMover::Update(float dT) { - // TODO + BuildPhotoCameraMatrix(); + if (Camera::StopUpdating == 0) { + GetCamera()->SetFieldOfView(bDegToAng(mFOV)); + } + if (Camera::StopUpdating == 0) { + GetCamera()->SetDepthOfField(mDOF); + } + if (Camera::StopUpdating == 0) { + GetCamera()->SetFocalDistance(mFd); + } + GetCamera()->SetCameraMatrix(mCameraMatrix, dT); } diff --git a/src/Speed/Indep/Tools/Inc/ConversionUtil.hpp b/src/Speed/Indep/Tools/Inc/ConversionUtil.hpp index c4a746c31..d3d03d821 100644 --- a/src/Speed/Indep/Tools/Inc/ConversionUtil.hpp +++ b/src/Speed/Indep/Tools/Inc/ConversionUtil.hpp @@ -102,7 +102,7 @@ inline Mps KPH2MPS(Kph x) { namespace ConversionUtil { template -void Copy4(T1 &out, const T2 &in) { +void Copy4(T2 &out, const T1 &in) { out.x = in.x; out.y = in.y; out.z = in.z; @@ -137,33 +137,26 @@ T Make3(float x, float y, float z) { template void RightToLeftVector4(const T1 &in, T2 &out) { - out.x = in.x; - out.y = in.z; - out.z = -in.y; - out.w = in.w; + out = Make4(-in.y, in.z, in.x, in.w); } template void RightToLeftVector3(const T1 &in, T2 &out) { - out.x = in.x; - out.y = in.z; - out.z = -in.y; + out = Make3(-in.y, in.z, in.x); } template void RightToLeftMatrix4(const T1 &in, T2 &out) { T2 tmp; - RightToLeftVector4(in[0], tmp[0]); - RightToLeftVector4(in[1], tmp[1]); - RightToLeftVector4(in[2], tmp[2]); - RightToLeftVector4(in[3], tmp[3]); - out[0] = tmp[0]; - out[1] = tmp[2]; - out[2].x = -tmp[1].x; - out[2].y = -tmp[1].y; - out[2].z = -tmp[1].z; - out[2].w = -tmp[1].w; - out[3] = tmp[3]; + Copy4(tmp[0], in[0]); + Copy4(tmp[1], in[1]); + Copy4(tmp[2], in[2]); + Copy4(tmp[3], in[3]); + Scale3(tmp[0], -1.0f); + RightToLeftVector4(tmp[0], out[0]); + RightToLeftVector4(tmp[1], out[1]); + RightToLeftVector4(tmp[2], out[2]); + RightToLeftVector4(tmp[3], out[3]); } } // namespace ConversionUtil From e7456293134877b06e11f6a4b09fa244be5b1f50 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 03:39:34 +0100 Subject: [PATCH 019/691] zCamera: fix Director iterator patterns and CameraAI namespace functions - Apply inline GetList() pattern to Director iterations (two lis loads) - Fix CameraAI::Reset, SetAction, MaybeDoTotaledCam (all 100% match) - Fix FindDirector(EVIEW_ID) and FindDirector(unsigned int) (both 100%) - Fix Director::Reset float store order for scheduler - Fix CDActionDebugWatchCar::GetNext with CameraDebugWatchCar global check - Now at 54.9% (185/453 functions) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Camera/Actions/CDActionDebugWatchCar.cpp | 5 +++++ src/Speed/Indep/Src/Camera/CameraAI.cpp | 20 +++++++------------ src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp | 2 +- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp index f51f79f1b..8353b338d 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp @@ -7,6 +7,8 @@ extern int mToggleCar; extern eVehicleList mToggleCarList; +extern bool CameraDebugWatchCar; + static UTL::COM::Factory::Prototype _CDActionDebugWatchCar("DEBUGWATCHCAR", CDActionDebugWatchCar::Construct); const Attrib::StringKey &CDActionDebugWatchCar::GetName() const { @@ -15,6 +17,9 @@ const Attrib::StringKey &CDActionDebugWatchCar::GetName() const { } Attrib::StringKey CDActionDebugWatchCar::GetNext() const { + if (CameraDebugWatchCar) { + return Attrib::StringKey(""); + } return mPrev; } diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index 65e9afafa..d4baae74d 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -63,8 +63,8 @@ void CameraAI::Director::ReleaseAction() { void CameraAI::Director::Reset() { mIsCinematicMomement = false; - mCinematicSlowdownSeconds = 0.0f; mJumpTime = 0.0f; + mCinematicSlowdownSeconds = 0.0f; mPursuitStartTime = 0.0f; SetAction(Attrib::StringKey("DRIVE")); if (mAction != nullptr) { @@ -272,8 +272,7 @@ IPlayer *FindPlayer(EVIEW_ID id) { } CameraAI::Director *FindDirector(EVIEW_ID id) { - const CameraAI::Director::List &list = CameraAI::Director::GetList(); - for (CameraAI::Director *const *iter = list.begin(); iter != list.end(); ++iter) { + for (CameraAI::Director *const *iter = CameraAI::Director::GetList().begin(); iter != CameraAI::Director::GetList().end(); ++iter) { CameraAI::Director *cd = *iter; if (cd->GetViewID() == id) { return cd; @@ -283,8 +282,7 @@ CameraAI::Director *FindDirector(EVIEW_ID id) { } CameraAI::Director *FindDirector(unsigned int id) { - const CameraAI::Director::List &list = CameraAI::Director::GetList(); - for (CameraAI::Director *const *iter = list.begin(); iter != list.end(); ++iter) { + for (CameraAI::Director *const *iter = CameraAI::Director::GetList().begin(); iter != CameraAI::Director::GetList().end(); ++iter) { CameraAI::Director *cd = *iter; IPlayer *iplayer = FindPlayer(cd->GetViewID()); if (iplayer != nullptr) { @@ -335,16 +333,14 @@ void CameraAI::Update(float dT) { } void CameraAI::Reset() { - const Director::List &list = Director::GetList(); - for (Director *const *iter = list.begin(); iter != list.end(); ++iter) { + for (Director *const *iter = Director::GetList().begin(); iter != Director::GetList().end(); ++iter) { Director *cd = *iter; cd->Reset(); } } void CameraAI::SetAction(EVIEW_ID viewID, const char *desiredMode) { - const Director::List &list = Director::GetList(); - for (Director *const *iter = list.begin(); iter != list.end(); ++iter) { + for (Director *const *iter = Director::GetList().begin(); iter != Director::GetList().end(); ++iter) { Director *cd = *iter; if (cd->GetViewID() == viewID) { cd->SetAction(Attrib::StringKey(desiredMode)); @@ -507,8 +503,7 @@ void CameraAI::RemoveAvoidable(IBody *body) { } void CameraAI::StartCinematicSlowdown(EVIEW_ID viewID, float seconds) { - const Director::List &list = Director::GetList(); - for (Director *const *iter = list.begin(); iter != list.end(); ++iter) { + for (Director *const *iter = Director::GetList().begin(); iter != Director::GetList().end(); ++iter) { Director *cd = *iter; if (cd->GetViewID() == viewID) { Action *action = cd->GetAction(); @@ -523,8 +518,7 @@ void CameraAI::MaybeDoTotaledCam(IPlayer *iplayer) { if (Sim::GetUserMode() != Sim::USER_SINGLE) { return; } - const Director::List &list = Director::GetList(); - for (Director *const *iter = list.begin(); iter != list.end(); ++iter) { + for (Director *const *iter = Director::GetList().begin(); iter != Director::GetList().end(); ++iter) { Director *cd = *iter; if (cd->GetViewID() == iplayer->GetControllerPort()) { cd->TotaledStart(); diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp index db8f5cba2..886567789 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp @@ -645,7 +645,7 @@ ICEScene *FindAnimScene() { } unsigned int GetSceneCount() { - if (TheAnimDirectory == 0) { + if (TheAnimDirectory == nullptr) { return 0; } From 93d9cc108a7bea156d913428967716b7a939e782 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 04:10:21 +0100 Subject: [PATCH 020/691] ICE::Cubic1D/Cubic3D: match Update, SetVal, SetdVal, SetValDesired - ICE::Cubic1D::Update: 88.8% -> 100% match Restructure to assign time directly in if/else branches, cache time in local t for GetVal/GetdVal calls - ICE::Cubic3D::SetVal: 77.2% -> 100% match - ICE::Cubic3D::SetdVal: 77.2% -> 100% match - ICE::Cubic3D::SetValDesired: 77.2% -> 100% match Add inline overloads taking (float, float, float) to pre-load all three components before calling Cubic1D setters - ICE::Cubic1D::ClampSecondDerivative: rename locals to match DWARF (fAcc0, fAcc0Abs, fAcc1, fAcc1Abs, bNeedFix, fSign, fDurationSquared) Still 98.5% due to f30/f31 register allocation difference Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 74 +++++++++------------ src/Speed/Indep/Src/Camera/ICE/ICEMover.hpp | 24 +++++++ 2 files changed, 57 insertions(+), 41 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index 46b8e6227..a1fea393a 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -291,25 +291,27 @@ void Cubic1D::ClampDerivative(float fMag) { } void Cubic1D::ClampSecondDerivative(float fMag) { - float acc0 = GetSecondDerivative(0.0f); - float acc0_abs = bAbs(acc0); - float acc1 = GetSecondDerivative(duration); - float acc1_abs = bAbs(acc1); - bool need_fix = false; - - if (acc0_abs > fMag) { - acc0 = (acc0_abs / acc0) * fMag; - need_fix = true; - } - if (acc1_abs > fMag) { - acc1 = (acc1_abs / acc1) * fMag; - need_fix = true; - } - if (need_fix) { - float duration_squared = duration * duration; - float start = acc0 * duration_squared; - - Coeff[0] = (acc1 * duration_squared - start) * (1.0f / 6.0f); + float fAcc0 = GetSecondDerivative(0.0f); + float fAcc0Abs = bAbs(fAcc0); + float fAcc1 = GetSecondDerivative(duration); + float fAcc1Abs = bAbs(fAcc1); + bool bNeedFix = false; + + if (fAcc0Abs > fMag) { + float fSign = fAcc0Abs / fAcc0; + fAcc0 = fSign * fMag; + bNeedFix = true; + } + if (fAcc1Abs > fMag) { + float fSign = fAcc1Abs / fAcc1; + fAcc1 = fSign * fMag; + bNeedFix = true; + } + if (bNeedFix) { + float fDurationSquared = duration * duration; + float start = fAcc0 * fDurationSquared; + + Coeff[0] = (fAcc1 * fDurationSquared - start) * (1.0f / 6.0f); Coeff[1] = start * 0.5f; } } @@ -342,50 +344,40 @@ void Cubic1D::Update(float fSeconds, float fDClamp, float fDDClamp) { update: { - float t = 1.0f; + float t; if (0.0f < duration) { - t = time + fSeconds / duration; + float interval = fSeconds / duration; + time = time + interval; + } else { + time = 1.0f; } - time = t; - if (1.0f < time) { time = 1.0f; Snap(); } - Val = GetVal(time); - dVal = GetdVal(time); + t = time; + Val = GetVal(t); + dVal = GetdVal(t); } } void Cubic3D::SetVal(const Vector3 *pV) { - x.SetVal(pV->x); - y.SetVal(pV->y); - z.SetVal(pV->z); + SetVal(pV->x, pV->y, pV->z); } void Cubic3D::SetdVal(const Vector3 *pV) { - x.SetdVal(pV->x); - y.SetdVal(pV->y); - z.SetdVal(pV->z); + SetdVal(pV->x, pV->y, pV->z); } void Cubic3D::SetValDesired(const Vector3 *pV) { - x.SetValDesired(pV->x); - y.SetValDesired(pV->y); - z.SetValDesired(pV->z); + SetValDesired(pV->x, pV->y, pV->z); } void Cubic3D::SetdValDesired(const Vector3 *pV) { - float vx = pV->x; - float vy = pV->y; - float vz = pV->z; - - x.dValDesired = vx; - y.dValDesired = vy; - z.dValDesired = vz; + SetdValDesired(pV->x, pV->y, pV->z); } void Cubic3D::GetVal(Vector3 *pV) const { diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.hpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.hpp index eca743e95..793113210 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.hpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.hpp @@ -156,6 +156,30 @@ struct Cubic3D { z.MakeCoeffs(); } + void SetVal(float vx, float vy, float vz) { + x.SetVal(vx); + y.SetVal(vy); + z.SetVal(vz); + } + + void SetdVal(float vx, float vy, float vz) { + x.SetdVal(vx); + y.SetdVal(vy); + z.SetdVal(vz); + } + + void SetValDesired(float vx, float vy, float vz) { + x.SetValDesired(vx); + y.SetValDesired(vy); + z.SetValDesired(vz); + } + + void SetdValDesired(float vx, float vy, float vz) { + x.dValDesired = vx; + y.dValDesired = vy; + z.dValDesired = vz; + } + void SetVal(const Vector3 *pV); void SetdVal(const Vector3 *pV); void SetValDesired(const Vector3 *pV); From c48ee3fe7877be462a712a180598486cd7cf163d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 04:14:58 +0100 Subject: [PATCH 021/691] Fix CDAction constructor functions for matching CDActionDrive::CDActionDrive: 81.5% -> 98.0% CDActionTrackCar::CDActionTrackCar: 84.9% -> 100.0% CDActionTrackCop::CDActionTrackCop: 85.1% -> 100.0% CDActionShowcase::CDActionShowcase: 70.7% -> 100.0% Changes: - Move mTarget init to initializer list (mTarget(0)) instead of body assignment, avoiding temporary + copy + destructor sequence - Fix collision body check: use 'mVehicle != nullptr && mVehicle->QueryInterface(&irbc)' instead of separate QueryInterface call and null check on irbc - Fix eSwizzleWorldVector output: write to mat.v3 (matrix translation row) instead of back to cg - Use placement new operator(size, file, line) which routes through new char[size] (__builtin_vec_new) matching the original - Replace mMover->GetCamera()->SetRenderDash(0) with mMover->Enable() which is the correct virtual call the original makes - Inline IsRightSide() into ShowcaseCameraMover constructor call (no flipSide local in DWARF) - Add missing mAttachments->Attach(mPlayer) in CDActionShowcase - Remove unused pov_type local in CDActionDrive, inline player->GetSettings()->CurCam directly - Restructure CDActionDrive cinematic moment check to avoid storing IsCinematicMomement() result in smooth variable Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Src/Camera/Actions/CDActionDrive.cpp | 25 ++++++++----------- .../Src/Camera/Actions/CDActionShowcase.cpp | 17 ++++++------- .../Src/Camera/Actions/CDActionTrackCar.cpp | 15 ++++++----- .../Src/Camera/Actions/CDActionTrackCop.cpp | 15 ++++++----- 4 files changed, 32 insertions(+), 40 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index 6acc4e388..6325efe60 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -78,20 +78,18 @@ CameraAI::Action *CDActionDrive::Construct(CameraAI::Director *director) { return nullptr; } - return new (static_cast(0)) CDActionDrive(director, player); + return new CDActionDrive(director, player); } CDActionDrive::CDActionDrive(CameraAI::Director *director, IPlayer *player) : CameraAI::Action(), // IAttachable(this), // + mTarget(0), // mMaxCollisionTime(0.5f) { - mViewID = director->GetViewID(); - bool smooth = director->IsCinematicMomement(); - - mTarget = WorldConn::Reference(0); mPlayer = player; mVehicle = nullptr; mGameBreakerScale = 0.0f; + mViewID = director->GetViewID(); mCinematicMomementTimer = 0.0f; mDampCollisionTime = 0.0f; mGroundCollisionTime = 0.0f; @@ -102,7 +100,7 @@ CDActionDrive::CDActionDrive(CameraAI::Director *director, IPlayer *player) gCinematicMomementCamera = false; gGameBreakerCamera = false; - if (smooth) { + if (director->IsCinematicMomement()) { gCinematicMomementCamera = true; mCinematicMomementTimer = 1.0f; kCinematicMomementSeconds = mMaxCollisionTime; @@ -116,13 +114,13 @@ CDActionDrive::CDActionDrive(CameraAI::Director *director, IPlayer *player) mAttachments->Attach(mPlayer); + bool smooth = false; CameraMover *m = director->GetMover(); - smooth = false; if (m != nullptr && m->GetType() == CM_ICE) { smooth = TheICEManager.IsSmoothExit(); } - mAnchor = new CameraAnchor(0); + mAnchor = new (static_cast(0), 0) CameraAnchor(0); if (0.0f < mCinematicMomementTimer) { mAnchor->SetZoom(1.0f - mCinematicMomementTimer * 0.1f); @@ -134,22 +132,19 @@ CDActionDrive::CDActionDrive(CameraAI::Director *director, IPlayer *player) bMatrix4 mat(*mTarget.GetMatrix()); ICollisionBody *irbc = nullptr; - mVehicle->QueryInterface(&irbc); - if (irbc != nullptr) { + if (mVehicle != nullptr && mVehicle->QueryInterface(&irbc)) { IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); UVector3 cg(irbc->GetCenterOfGravity()); irb->ConvertLocalToWorld(cg, false); cg += irb->GetPosition(); - eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(cg)); + eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(mat.v3)); } mAnchor->Update(0.0f, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); } - int pov_type = player->GetSettings()->CurCam; - - mMover = new CubicCameraMover(static_cast(director->GetViewID()), mAnchor, pov_type, smooth, false, false, true); - mRearViewMirrorMover = new RearViewMirrorCameraMover(3, mAnchor); + mMover = new (static_cast(0), 0) CubicCameraMover(static_cast(director->GetViewID()), mAnchor, player->GetSettings()->CurCam, smooth, false, false, true); + mRearViewMirrorMover = new (static_cast(0), 0) RearViewMirrorCameraMover(3, mAnchor); } CDActionDrive::~CDActionDrive() { diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp index dbaeadef3..f3345921f 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp @@ -71,15 +71,16 @@ CameraAI::Action *CDActionShowcase::Construct(CameraAI::Director *director) { CDActionShowcase::CDActionShowcase(CameraAI::Director *director, IPlayer *player) : CameraAI::Action(), // - IAttachable(this) { - mTarget = WorldConn::Reference(0); + IAttachable(this), // + mTarget(0) { mPlayer = player; mVehicle = nullptr; mViewID = director->GetViewID(); mAttachments = new Sim::Attachments(static_cast(this)); + mAttachments->Attach(mPlayer); - mAnchor = new CameraAnchor(0); + mAnchor = new (static_cast(0), 0) CameraAnchor(0); AquireCar(); @@ -87,21 +88,19 @@ CDActionShowcase::CDActionShowcase(CameraAI::Director *director, IPlayer *player bMatrix4 mat(*mTarget.GetMatrix()); ICollisionBody *irbc = nullptr; - mVehicle->QueryInterface(&irbc); - if (irbc != nullptr) { + if (mVehicle != nullptr && mVehicle->QueryInterface(&irbc)) { IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); UVector3 cg(irbc->GetCenterOfGravity()); irb->ConvertLocalToWorld(cg, false); cg += irb->GetPosition(); - eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(cg)); + eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(mat.v3)); } mAnchor->Update(0.0f, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); } - bool flipSide = IsRightSide(); - mMover = new ShowcaseCameraMover(static_cast(director->GetViewID()), mAnchor, flipSide); - mMover->GetCamera()->SetRenderDash(0); + mMover = new (static_cast(0), 0) ShowcaseCameraMover(static_cast(director->GetViewID()), mAnchor, IsRightSide()); + mMover->Enable(); } CDActionShowcase::~CDActionShowcase() { diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp index c21c54e2d..6bccd50de 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp @@ -68,8 +68,8 @@ CameraAI::Action *CDActionTrackCar::Construct(CameraAI::Director *director) { CDActionTrackCar::CDActionTrackCar(CameraAI::Director *director, IPlayer *player) : CameraAI::Action(), // - IAttachable(this) { - mTarget = WorldConn::Reference(0); + IAttachable(this), // + mTarget(0) { mPlayer = player; mVehicle = nullptr; mViewID = director->GetViewID(); @@ -77,7 +77,7 @@ CDActionTrackCar::CDActionTrackCar(CameraAI::Director *director, IPlayer *player mAttachments = new Sim::Attachments(static_cast(this)); mAttachments->Attach(mPlayer); - mAnchor = new CameraAnchor(0); + mAnchor = new (static_cast(0), 0) CameraAnchor(0); AquireCar(); @@ -85,20 +85,19 @@ CDActionTrackCar::CDActionTrackCar(CameraAI::Director *director, IPlayer *player bMatrix4 mat(*mTarget.GetMatrix()); ICollisionBody *irbc = nullptr; - mVehicle->QueryInterface(&irbc); - if (irbc != nullptr) { + if (mVehicle != nullptr && mVehicle->QueryInterface(&irbc)) { IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); UVector3 cg(irbc->GetCenterOfGravity()); irb->ConvertLocalToWorld(cg, false); cg += irb->GetPosition(); - eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(cg)); + eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(mat.v3)); } mAnchor->Update(0.0f, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); } - mMover = new TrackCarCameraMover(static_cast(director->GetViewID()), mAnchor, true); - mMover->GetCamera()->SetRenderDash(0); + mMover = new (static_cast(0), 0) TrackCarCameraMover(static_cast(director->GetViewID()), mAnchor, true); + mMover->Enable(); } CDActionTrackCar::~CDActionTrackCar() { diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp index 958afef9a..fa099117b 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp @@ -69,8 +69,8 @@ CameraAI::Action *CDActionTrackCop::Construct(CameraAI::Director *director) { CDActionTrackCop::CDActionTrackCop(CameraAI::Director *director, IPlayer *player) : CameraAI::Action(), // - IAttachable(this) { - mTarget = WorldConn::Reference(0); + IAttachable(this), // + mTarget(0) { mPlayer = player; mVehicle = nullptr; bool renderCarPOV = true; @@ -84,7 +84,7 @@ CDActionTrackCop::CDActionTrackCop(CameraAI::Director *director, IPlayer *player renderCarPOV = m->RenderCarPOV(); } - mAnchor = new CameraAnchor(0); + mAnchor = new (static_cast(0), 0) CameraAnchor(0); AquireCar(); @@ -92,20 +92,19 @@ CDActionTrackCop::CDActionTrackCop(CameraAI::Director *director, IPlayer *player bMatrix4 mat(*mTarget.GetMatrix()); ICollisionBody *irbc = nullptr; - mVehicle->QueryInterface(&irbc); - if (irbc != nullptr) { + if (mVehicle != nullptr && mVehicle->QueryInterface(&irbc)) { IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); UVector3 cg(irbc->GetCenterOfGravity()); irb->ConvertLocalToWorld(cg, false); cg += irb->GetPosition(); - eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(cg)); + eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(mat.v3)); } mAnchor->Update(0.0f, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); } - mMover = new TrackCopCameraMover(static_cast(director->GetViewID()), mAnchor, false); - mMover->GetCamera()->SetRenderDash(0); + mMover = new (static_cast(0), 0) TrackCopCameraMover(static_cast(director->GetViewID()), mAnchor, false); + mMover->Enable(); static_cast(mMover)->SetRenderCarPOV(renderCarPOV); } From fb456f340cfedb11f6bb60cc40969c6d9033f6f5 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 05:12:06 +0100 Subject: [PATCH 022/691] Implement missing zCamera functions Emit 17 previously missing functions in the zCamera translation unit: - IAttachable::~IAttachable (100% match) - made Attach/Detach/etc pure virtual - ITrafficCenter::~ITrafficCenter (100% match) - made GetTrafficBasis pure virtual - AverageBase::~AverageBase (100% match) - emitted via tAverage vtable chain - AverageBase::Recalculate (100% match) - emitted via tAverage vtable chain - tAverage::~tAverage (84.5% nonmatching) - explicit template instantiation - tAverage::Recalculate (43.8% nonmatching) - implemented Recalculate body - Factory::CreateInstance (100% match) - defined out-of-line - ConversionUtil::Copy4 (100% match) - explicit instantiation - ConversionUtil::RightToLeftVector3 (100% match) - explicit instantiation - ConversionUtil::RightToLeftMatrix4 (93.7% nonmatching) - explicit instantiation - Attrib::Gen::ecar::ClassKey (100% match) - defined out-of-line in CameraMover.cpp - Attrib::Gen::camerainfo::ClassKey (100% match) - defined out-of-line in CameraMover.cpp - Listable::List::~List (100% match) - List() ctor body added - _Storage::~_Storage (100% match) - FixedVector copy ctor/assign - _Storage::_Storage copy ctor (71.2% nonmatching) - FixedVector copy ctor Also adds Vector::assign, resize, push_back(), Contains, FixedVector copy constructor and assignment operator, and ListableSet::Count definition. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Libs/Support/Utility/UCOM.h | 22 +++-- .../Indep/Libs/Support/Utility/UListable.h | 14 ++- .../Indep/Libs/Support/Utility/UTLVector.h | 91 ++++++++++++++++--- .../Src/Camera/Actions/CDActionDebug.cpp | 6 ++ src/Speed/Indep/Src/Camera/CameraMover.cpp | 8 ++ src/Speed/Indep/Src/Camera/Movers/Cubic.cpp | 4 +- .../Generated/AttribSys/Classes/camerainfo.h | 4 +- .../Src/Generated/AttribSys/Classes/ecar.h | 4 +- src/Speed/Indep/Src/Interfaces/IAttachable.h | 12 +-- .../Interfaces/SimActivities/ITrafficCenter.h | 2 +- src/Speed/Indep/Src/Misc/Table.hpp | 9 +- 11 files changed, 138 insertions(+), 38 deletions(-) diff --git a/src/Speed/Indep/Libs/Support/Utility/UCOM.h b/src/Speed/Indep/Libs/Support/Utility/UCOM.h index d55a5db69..74766ccc4 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UCOM.h +++ b/src/Speed/Indep/Libs/Support/Utility/UCOM.h @@ -167,18 +167,22 @@ template class Factory { ~Factory() {} static _PRODUCT CreateInstance(_PRODUCT_SIGNATURE sig, _BUILD_PARAMETERS params); - // TODO - // { - // for (const Prototype *f = Prototype::GetHead(); f != nullptr; f = f->GetNext()) { - // if (f->mSignature == sig) { - // return f->mConstructor(params); - // } - // } - // return nullptr; - // } }; } // namespace COM } // namespace UTL +template +typename UTL::COM::Factory::_PRODUCT +UTL::COM::Factory::CreateInstance( + typename UTL::COM::Factory::_PRODUCT_SIGNATURE sig, + typename UTL::COM::Factory::_BUILD_PARAMETERS params) { + for (const Prototype *f = Prototype::GetHead(); f != nullptr; f = f->GetNext()) { + if (f->mSignature == sig) { + return f->mConstructor(params); + } + } + return nullptr; +} + #endif diff --git a/src/Speed/Indep/Libs/Support/Utility/UListable.h b/src/Speed/Indep/Libs/Support/Utility/UListable.h index c307298c5..297a1b85c 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UListable.h +++ b/src/Speed/Indep/Libs/Support/Utility/UListable.h @@ -21,15 +21,15 @@ template class Listable { typedef value_type *pointer; typedef value_type const *const_pointer; - class List : public FixedVector { + class List : public _Storage { public: typedef T value_type; typedef value_type *pointer; typedef value_type const *const_pointer; // List(const List &); - List(); - virtual ~List(); + List() {} + virtual ~List() {} // List &operator=(List &); }; @@ -70,6 +70,9 @@ template class Listable { static List _mTable; }; +template +typename Listable::List Listable::_mTable; + template class ListableSet { public: typedef T value_type; @@ -148,6 +151,11 @@ template class Li static _ListSet _mLists; }; +template +int ListableSet::Count(Enum idx) { + return _mLists._buckets[idx].size(); +} + template class Countable { static int _mCount; diff --git a/src/Speed/Indep/Libs/Support/Utility/UTLVector.h b/src/Speed/Indep/Libs/Support/Utility/UTLVector.h index ac4f5ca69..27e4374c9 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UTLVector.h +++ b/src/Speed/Indep/Libs/Support/Utility/UTLVector.h @@ -9,7 +9,7 @@ #include namespace UTL { -template class Vector { +template class Vector { public: typedef T value_type; typedef value_type *pointer; @@ -67,6 +67,14 @@ template class Vector { return mBegin[idx]; } + void push_back() { + if (size() >= capacity()) { + reserve(GetGrowSize(size() + 1)); + } + new (&mBegin[size()]) T(); + mSize++; + } + void push_back(value_type const &val) { if (size() >= capacity()) { reserve(GetGrowSize(size() + 1)); @@ -79,6 +87,60 @@ template class Vector { mSize = size() - 1; } + void resize(size_type num) { + while (size() > num) { + pop_back(); + } + while (size() < num) { + reserve(GetGrowSize(size() + 1)); + push_back(); + } + } + + bool Contains(pointer p) { + size_type index = p - mBegin; + return index < capacity(); + } + + void assign(const Vector &src) { + assign(src.begin(), src.end()); + } + + void assign(const_iterator srcBeg, const_iterator srcEnd) { + size_type minSize = srcEnd - srcBeg; + const_iterator srcIt = srcBeg; + iterator destIt = begin(); + + resize(minSize); + + if (capacity() < minSize || !Contains(destIt)) { + make_empty(); + reserve(minSize); + } + + destIt = begin(); + srcIt = srcBeg; + + iterator endIt = end(); + while (destIt != endIt && srcIt != srcEnd) { + value_type &dest = *destIt; + const value_type &src = *srcIt; + dest = src; + ++destIt; + ++srcIt; + } + + while (end() != destIt) { + pop_back(); + } + + while (srcIt != srcEnd) { + const value_type &val = *srcIt; + push_back(val); + ++srcIt; + } + } + void reserve(size_type num) { if (num > capacity()) { OnGrowRequest(num); @@ -158,12 +220,12 @@ template class Vector { virtual void FreeVectorSpace(pointer buffer, size_type num) {} virtual size_type GetGrowSize(size_type minSize) const { - return UMath::Max(minSize, mCapacity + ((mCapacity + 1) >> 1)); // TODO is this right? + size_type grow = mCapacity + ((mCapacity + 1) >> 1); + return grow < minSize ? minSize : grow; } - // Unfinished virtual size_type GetMaxCapacity() const { - return 0; + return 0x7FFFFFFF; } virtual void OnGrowRequest(size_type newSize) {} @@ -175,10 +237,20 @@ template class Vector { size_type mSize; // offset 0x8, size 0x4 }; -template class FixedVector : public Vector { +template class FixedVector : public Vector { public: FixedVector() {} + FixedVector(const FixedVector &src) : Vector() { + Vector::Init(); + *this = src; + } + + FixedVector &operator=(const FixedVector &rhs) { + Vector::assign(rhs); + return *this; + } + ~FixedVector() override { // clang is being annoying Vector::clear(); @@ -187,21 +259,18 @@ template class Fixed // TODO also put the typedefs here according to the dwarf? protected: - // Unfinished virtual std::size_t GetGrowSize(std::size_t minSize) const { - return 0; + return Size; } - // Unfinished virtual typename Vector::pointer AllocVectorSpace(std::size_t num, unsigned int alignment) { - return nullptr; + return reinterpret_cast::pointer>(mVectorSpace); } virtual void FreeVectorSpace(typename Vector::pointer buffer, std::size_t) {} - // Unfinished virtual std::size_t GetMaxCapacity() const { - return 0; + return Size; } private: diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp index ae523cced..952ce0326 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp @@ -71,3 +71,9 @@ bool CDActionDebug::GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velo ConversionUtil::RightToLeftVector3(*mMover->GetCamera()->GetVelocityPosition(), velocity); return true; } + +namespace ConversionUtil { +template void Copy4(UMath::Vector4 &, const UMath::Vector4 &); +template void RightToLeftVector3(const UMath::Vector3 &, UMath::Vector3 &); +template void RightToLeftMatrix4(const UMath::Matrix4 &, UMath::Matrix4 &); +} // namespace ConversionUtil diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 6e7340463..a9f37ea0f 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -1,5 +1,13 @@ #include "CameraMover.hpp" #include "CameraAI.hpp" + +Attrib::Key Attrib::Gen::ecar::ClassKey() { + return 0xa5b543b7; +} + +Attrib::Key Attrib::Gen::camerainfo::ClassKey() { + return 0x93c171e4; +} #include "Speed/Indep/Src/Frontend/Database/FEDatabase.hpp" #include "Speed/Indep/Src/Frontend/FEManager.hpp" #include "Speed/Indep/Src/Interfaces/IBody.h" diff --git a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp index fc82718b3..07ba930c1 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp @@ -570,4 +570,6 @@ void CubicCameraMover::Update(float dT) { } GetCamera()->SetCameraMatrix(mWorldToCamera, dT); -} \ No newline at end of file +} + +template class tAverage; \ No newline at end of file diff --git a/src/Speed/Indep/Src/Generated/AttribSys/Classes/camerainfo.h b/src/Speed/Indep/Src/Generated/AttribSys/Classes/camerainfo.h index 3cc83a249..26baa2e17 100644 --- a/src/Speed/Indep/Src/Generated/AttribSys/Classes/camerainfo.h +++ b/src/Speed/Indep/Src/Generated/AttribSys/Classes/camerainfo.h @@ -72,9 +72,7 @@ struct camerainfo : Instance { Change(FindCollection(ClassKey(), collectionkey)); } - static Key ClassKey() { - return 0x93c171e4; - } + static Key ClassKey(); const float &STIFFNESS(unsigned int index) const { const _LayoutStruct *lp = reinterpret_cast<_LayoutStruct *>(this->GetLayoutPointer()); diff --git a/src/Speed/Indep/Src/Generated/AttribSys/Classes/ecar.h b/src/Speed/Indep/Src/Generated/AttribSys/Classes/ecar.h index 6094b012b..966095286 100644 --- a/src/Speed/Indep/Src/Generated/AttribSys/Classes/ecar.h +++ b/src/Speed/Indep/Src/Generated/AttribSys/Classes/ecar.h @@ -73,9 +73,7 @@ struct ecar : Instance { Change(FindCollection(ClassKey(), collectionkey)); } - static Key ClassKey() { - return 0xa5b543b7; - } + static Key ClassKey(); const RefSpec &CameraInfo_Close(unsigned int index) const { const RefSpec *resultptr = reinterpret_cast(this->GetAttributePointer(0x0c2da793, index)); diff --git a/src/Speed/Indep/Src/Interfaces/IAttachable.h b/src/Speed/Indep/Src/Interfaces/IAttachable.h index 16417c577..181bb0451 100644 --- a/src/Speed/Indep/Src/Interfaces/IAttachable.h +++ b/src/Speed/Indep/Src/Interfaces/IAttachable.h @@ -20,12 +20,12 @@ struct IAttachable : public UTL::COM::IUnknown { virtual ~IAttachable() {} - virtual bool Attach(IUnknown *pOther); - virtual bool Detach(IUnknown *pOther); - virtual bool IsAttached(const IUnknown *pOther) const; - virtual void OnAttached(IAttachable *pOther); - virtual void OnDetached(IAttachable *pOther); - virtual const List *GetAttachments() const; + virtual bool Attach(IUnknown *pOther) = 0; + virtual bool Detach(IUnknown *pOther) = 0; + virtual bool IsAttached(const IUnknown *pOther) const = 0; + virtual void OnAttached(IAttachable *pOther) = 0; + virtual void OnDetached(IAttachable *pOther) = 0; + virtual const List *GetAttachments() const = 0; }; #endif diff --git a/src/Speed/Indep/Src/Interfaces/SimActivities/ITrafficCenter.h b/src/Speed/Indep/Src/Interfaces/SimActivities/ITrafficCenter.h index 53199487c..ae0a36e3e 100644 --- a/src/Speed/Indep/Src/Interfaces/SimActivities/ITrafficCenter.h +++ b/src/Speed/Indep/Src/Interfaces/SimActivities/ITrafficCenter.h @@ -12,7 +12,7 @@ class ITrafficCenter : public UTL::Collections::Listable { public: ITrafficCenter() {} - virtual bool GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity); + virtual bool GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) = 0; virtual ~ITrafficCenter() {} }; diff --git a/src/Speed/Indep/Src/Misc/Table.hpp b/src/Speed/Indep/Src/Misc/Table.hpp index e74f07eac..9acd5f463 100644 --- a/src/Speed/Indep/Src/Misc/Table.hpp +++ b/src/Speed/Indep/Src/Misc/Table.hpp @@ -144,7 +144,14 @@ template class tAverage : public AverageBase { void Record(T *pValue); - virtual void Recalculate(); + virtual void Recalculate() { + Total *= 0.0f; + for (int i = 0; i < nSamples; i++) { + Total += pData[i]; + } + float fRecip = 1.0f / static_cast(bMax(1, static_cast(nSamples))); + Average = Total * fRecip; + } T *pData; // offset 0x8, size 0x4 T Total; // offset 0xC From 74559806e15e5c2434d131a93407f8d98f8a10f6 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 05:15:19 +0100 Subject: [PATCH 023/691] Fix CameraMover vtable layout: OnWCollide virtual, correct order ICollisionHandler::OnWCollide must be virtual and declared before the destructor to match the original vtable layout: - vtable[0]: OnWCollide (0x08) - vtable[1]: dtor (0x10) - vtable[2]: Update (0x18) - ... Also fix CDAction constructors to call ResetState() instead of Enable() on newly created movers, matching the original vtable call at offset 0x70. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Src/Camera/Actions/CDActionShowcase.cpp | 29 ++++++++++++------- .../Src/Camera/Actions/CDActionTrackCar.cpp | 29 ++++++++++++------- .../Src/Camera/Actions/CDActionTrackCop.cpp | 29 ++++++++++++------- src/Speed/Indep/Src/Camera/CameraMover.cpp | 12 ++++---- .../Indep/Src/Physics/Behaviors/RigidBody.h | 2 +- src/Speed/Indep/Src/World/WCollisionMgr.h | 2 +- 6 files changed, 62 insertions(+), 41 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp index f3345921f..c151de535 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp @@ -40,6 +40,7 @@ const IAttachable::List *CDActionShowcase::GetAttachments() const { CameraAI::Action *CDActionShowcase::Construct(CameraAI::Director *director) { IPlayer *player = nullptr; + int player_idx; IPlayer *ip; for (IPlayer *const *iter = IPlayer::GetList(PLAYER_LOCAL).begin(); iter != IPlayer::GetList(PLAYER_LOCAL).end(); ++iter) { ip = *iter; @@ -50,23 +51,29 @@ CameraAI::Action *CDActionShowcase::Construct(CameraAI::Director *director) { } if (player == nullptr) { - return nullptr; + goto null_return; } if (player->GetSettingsIndex() == 0) { - return nullptr; + goto null_return; } - ISimable *isimable = player->GetSimable(); - if (isimable == nullptr) { - return nullptr; - } + { + ISimable *isimable = player->GetSimable(); + if (isimable == nullptr) { + goto null_return; + } - if (isimable->GetWorldID() == 0) { - return nullptr; + unsigned int world_id = isimable->GetWorldID(); + CameraAI::Action *action = nullptr; + if (world_id != 0) { + action = new (static_cast(0)) CDActionShowcase(director, player); + } + return action; } - return new (static_cast(0)) CDActionShowcase(director, player); +null_return: + return nullptr; } CDActionShowcase::CDActionShowcase(CameraAI::Director *director, IPlayer *player) @@ -99,8 +106,8 @@ CDActionShowcase::CDActionShowcase(CameraAI::Director *director, IPlayer *player mAnchor->Update(0.0f, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); } - mMover = new (static_cast(0), 0) ShowcaseCameraMover(static_cast(director->GetViewID()), mAnchor, IsRightSide()); - mMover->Enable(); + mMover = new (static_cast(0), 0) ShowcaseCameraMover(static_cast(director->GetViewID()), mAnchor, IsRightSide()); + mMover->ResetState(); } CDActionShowcase::~CDActionShowcase() { diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp index 6bccd50de..a14e986ec 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp @@ -37,6 +37,7 @@ const IAttachable::List *CDActionTrackCar::GetAttachments() const { CameraAI::Action *CDActionTrackCar::Construct(CameraAI::Director *director) { IPlayer *player = nullptr; + int player_idx; IPlayer *ip; for (IPlayer *const *iter = IPlayer::GetList(PLAYER_LOCAL).begin(); iter != IPlayer::GetList(PLAYER_LOCAL).end(); ++iter) { ip = *iter; @@ -47,23 +48,29 @@ CameraAI::Action *CDActionTrackCar::Construct(CameraAI::Director *director) { } if (player == nullptr) { - return nullptr; + goto null_return; } if (player->GetSettingsIndex() == 0) { - return nullptr; + goto null_return; } - ISimable *isimable = player->GetSimable(); - if (isimable == nullptr) { - return nullptr; - } + { + ISimable *isimable = player->GetSimable(); + if (isimable == nullptr) { + goto null_return; + } - if (isimable->GetWorldID() == 0) { - return nullptr; + unsigned int world_id = isimable->GetWorldID(); + CameraAI::Action *action = nullptr; + if (world_id != 0) { + action = new (static_cast(0)) CDActionTrackCar(director, player); + } + return action; } - return new (static_cast(0)) CDActionTrackCar(director, player); +null_return: + return nullptr; } CDActionTrackCar::CDActionTrackCar(CameraAI::Director *director, IPlayer *player) @@ -96,8 +103,8 @@ CDActionTrackCar::CDActionTrackCar(CameraAI::Director *director, IPlayer *player mAnchor->Update(0.0f, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); } - mMover = new (static_cast(0), 0) TrackCarCameraMover(static_cast(director->GetViewID()), mAnchor, true); - mMover->Enable(); + mMover = new (static_cast(0), 0) TrackCarCameraMover(static_cast(director->GetViewID()), mAnchor, true); + mMover->ResetState(); } CDActionTrackCar::~CDActionTrackCar() { diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp index fa099117b..2918b6254 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp @@ -38,6 +38,7 @@ const IAttachable::List *CDActionTrackCop::GetAttachments() const { CameraAI::Action *CDActionTrackCop::Construct(CameraAI::Director *director) { IPlayer *player = nullptr; + int player_idx; IPlayer *ip; for (IPlayer *const *iter = IPlayer::GetList(PLAYER_LOCAL).begin(); iter != IPlayer::GetList(PLAYER_LOCAL).end(); ++iter) { ip = *iter; @@ -48,23 +49,29 @@ CameraAI::Action *CDActionTrackCop::Construct(CameraAI::Director *director) { } if (player == nullptr) { - return nullptr; + goto null_return; } if (player->GetSettingsIndex() == 0) { - return nullptr; + goto null_return; } - ISimable *isimable = player->GetSimable(); - if (isimable == nullptr) { - return nullptr; - } + { + ISimable *isimable = player->GetSimable(); + if (isimable == nullptr) { + goto null_return; + } - if (isimable->GetWorldID() == 0) { - return nullptr; + unsigned int world_id = isimable->GetWorldID(); + CameraAI::Action *action = nullptr; + if (world_id != 0) { + action = new (static_cast(0)) CDActionTrackCop(director, player); + } + return action; } - return new (static_cast(0)) CDActionTrackCop(director, player); +null_return: + return nullptr; } CDActionTrackCop::CDActionTrackCop(CameraAI::Director *director, IPlayer *player) @@ -103,8 +110,8 @@ CDActionTrackCop::CDActionTrackCop(CameraAI::Director *director, IPlayer *player mAnchor->Update(0.0f, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); } - mMover = new (static_cast(0), 0) TrackCopCameraMover(static_cast(director->GetViewID()), mAnchor, false); - mMover->Enable(); + mMover = new (static_cast(0), 0) TrackCopCameraMover(static_cast(director->GetViewID()), mAnchor, false); + mMover->ResetState(); static_cast(mMover)->SetRenderCarPOV(renderCarPOV); } diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index a9f37ea0f..fbebe1f61 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -160,13 +160,13 @@ bool RenderCarPovType(int pov_type, bool look_back) { return (static_cast(pov_type - 2) < 3) || (pov_type == 1 && !look_back) || pov_type == 6 || pov_type == 5; } -static void ResetCubic1DState(tCubic1D *cubic) { +static inline void ResetCubic1DState(tCubic1D *cubic) { cubic->Val = cubic->ValDesired; cubic->dVal = cubic->dValDesired; cubic->state = 0; } -static void ResetCubic3DState(tCubic3D *cubic) { +static inline void ResetCubic3DState(tCubic3D *cubic) { ResetCubic1DState(&cubic->x); ResetCubic1DState(&cubic->y); ResetCubic1DState(&cubic->z); @@ -1280,10 +1280,10 @@ void CubicCameraMover::ResetState() { ResetCubic3DState(pLook); ResetCubic3DState(pForward); GetCamera()->ClearVelocity(); - vSavedEye.x = 0.0f; - vSavedEye.y = 0.0f; - vSavedEye.z = 0.0f; - fIgnoreSetSnapNextTimer = 0.0f; + vCameraImpcat.x = 0.0f; + vCameraImpcat.y = 0.0f; + vCameraImpcatTimer.x = 0.0f; + vCameraImpcatTimer.y = 0.0f; } Bezier::Bezier() diff --git a/src/Speed/Indep/Src/Physics/Behaviors/RigidBody.h b/src/Speed/Indep/Src/Physics/Behaviors/RigidBody.h index 360072b1b..b2dc54975 100644 --- a/src/Speed/Indep/Src/Physics/Behaviors/RigidBody.h +++ b/src/Speed/Indep/Src/Physics/Behaviors/RigidBody.h @@ -308,7 +308,7 @@ class RigidBody : public Behavior, bool IsImmobile() const override; // ICollisionHandler - override bool OnWCollide(const WCollisionMgr::WorldCollisionInfo &cInfo, const UMath::Vector3 &cPoint, void *userdata); + bool OnWCollide(const WCollisionMgr::WorldCollisionInfo &cInfo, const UMath::Vector3 &cPoint, void *userdata) override; // Virtual methods virtual void OnDebugDraw(); diff --git a/src/Speed/Indep/Src/World/WCollisionMgr.h b/src/Speed/Indep/Src/World/WCollisionMgr.h index 9f44211f1..7dc1eb5d1 100644 --- a/src/Speed/Indep/Src/World/WCollisionMgr.h +++ b/src/Speed/Indep/Src/World/WCollisionMgr.h @@ -40,8 +40,8 @@ class WCollisionMgr { class ICollisionHandler { public: ICollisionHandler() {} - virtual bool OnWCollide(const WorldCollisionInfo &cInfo, const bVector3 &cPoint, void *userdata); + virtual ~ICollisionHandler() {} }; typedef UTL::Vector NodeIndexList; From dca9cc77dabef6f5058ab2fa2b3fe9652fbaa1fc Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 05:16:57 +0100 Subject: [PATCH 024/691] Add ICEManager, SelectCar, and utility function stubs Implement ICEShakeGroup, ICEShakeTrack structures, ICEManager::LoadCameraShakes, ICEManager helper functions, SelectCarCameraMover methods, bQuaternion::GetMatrix. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Indep/Src/Animation/AnimDirectory.hpp | 14 +- .../Camera/Actions/CDActionDebugWatchCar.cpp | 7 +- .../Src/Camera/Actions/CDActionDrive.cpp | 25 ++- src/Speed/Indep/Src/Camera/CameraAI.cpp | 5 +- src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp | 196 ++++++++++++++++-- src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp | 13 +- .../Indep/Src/Camera/Movers/SelectCar.cpp | 63 +++++- src/Speed/Indep/bWare/Inc/bMath.hpp | 24 +++ 8 files changed, 304 insertions(+), 43 deletions(-) diff --git a/src/Speed/Indep/Src/Animation/AnimDirectory.hpp b/src/Speed/Indep/Src/Animation/AnimDirectory.hpp index a201d8400..b60a8b6f3 100644 --- a/src/Speed/Indep/Src/Animation/AnimDirectory.hpp +++ b/src/Speed/Indep/Src/Animation/AnimDirectory.hpp @@ -34,15 +34,15 @@ class AnimDirectory { ~AnimDirectory() {} - unsigned int GetFileCount() {} + unsigned int GetFileCount() { return mAnimFileLoadInfo.mAnimFileCount; } - char *GetFileName(unsigned int file_slot_position) {} + char *GetFileName(unsigned int file_slot_position) { return mAnimFileLoadInfo.mAnimFileNameTable[file_slot_position]; } - unsigned int GetSceneCount() {} + unsigned int GetSceneCount() { return mAnimSceneCount; } - void GetSceneLoadInfo(unsigned int scene_slot_position, AnimSceneLoadInfo &info) {} + void GetSceneLoadInfo(unsigned int scene_slot_position, AnimSceneLoadInfo &info) { info = mAnimSceneLoadInfo[scene_slot_position]; } - AnimSceneLoadInfo *GetSceneLoadInfo(int slot) {} + AnimSceneLoadInfo *GetSceneLoadInfo(int slot) { return &mAnimSceneLoadInfo[slot]; } void GetNameOfSceneNumber(int scene_slot_position, char *buffer) {} @@ -52,9 +52,9 @@ class AnimDirectory { void SetFileName(unsigned int file_slot_position, char *file_name) {} - void SetSceneCount(unsigned int count) {} + void SetSceneCount(unsigned int count) { mAnimSceneCount = count; } - void SetSceneLoadInfo(unsigned int scene_slot_position, const AnimSceneLoadInfo &info) {} + void SetSceneLoadInfo(unsigned int scene_slot_position, const AnimSceneLoadInfo &info) { mAnimSceneLoadInfo[scene_slot_position] = info; } void EndianSwap() { bPlatEndianSwap(&mAnimSceneCount); diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp index 8353b338d..a49ec3ae9 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp @@ -18,7 +18,7 @@ const Attrib::StringKey &CDActionDebugWatchCar::GetName() const { Attrib::StringKey CDActionDebugWatchCar::GetNext() const { if (CameraDebugWatchCar) { - return Attrib::StringKey(""); + return Attrib::StringKey(); } return mPrev; } @@ -40,7 +40,7 @@ void CDActionDebugWatchCar::AquireTarget() { ReleaseTarget(); } - if (mToggleCar > -1 && mToggleCarList < VEHICLE_MAX && mToggleCarList > -1) { + if (mToggleCar >= 0 && mToggleCarList <= 9 && mToggleCarList >= 0) { int count = IVehicle::Count(mToggleCarList); if (count != 0) { IVehicle *ivehicle = IVehicle::GetList(mToggleCarList)[static_cast(mToggleCar % count)]; @@ -49,11 +49,12 @@ void CDActionDebugWatchCar::AquireTarget() { unsigned int world_id = ivehicle->GetSimable()->GetWorldID(); if (world_id != 0) { ReleaseTarget(); + CameraAnchor *anchor = mAnchor; const char *model_str = ivehicle->GetVehicleAttributes().MODEL().GetString(); if (model_str == nullptr) { model_str = ""; } - mAnchor->SetModel(bStringHash(model_str)); + anchor->SetModel(bStringHash(model_str)); mTarget.Set(world_id); mhSimable = ivehicle->GetSimable()->GetInstanceHandle(); } diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index 6325efe60..b9a015a79 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -52,6 +52,7 @@ const IAttachable::List *CDActionDrive::GetAttachments() const { CameraAI::Action *CDActionDrive::Construct(CameraAI::Director *director) { IPlayer *player = nullptr; + int player_idx; IPlayer *ip; for (IPlayer *const *iter = IPlayer::GetList(PLAYER_LOCAL).begin(); iter != IPlayer::GetList(PLAYER_LOCAL).end(); ++iter) { ip = *iter; @@ -62,23 +63,29 @@ CameraAI::Action *CDActionDrive::Construct(CameraAI::Director *director) { } if (player == nullptr) { - return nullptr; + goto null_return; } if (player->GetSettingsIndex() == 0) { - return nullptr; + goto null_return; } - ISimable *isimable = player->GetSimable(); - if (isimable == nullptr) { - return nullptr; - } + { + ISimable *isimable = player->GetSimable(); + if (isimable == nullptr) { + goto null_return; + } - if (isimable->GetWorldID() == 0) { - return nullptr; + unsigned int world_id = isimable->GetWorldID(); + CameraAI::Action *action = nullptr; + if (world_id != 0) { + action = new (static_cast(0)) CDActionDrive(director, player); + } + return action; } - return new CDActionDrive(director, player); +null_return: + return nullptr; } CDActionDrive::CDActionDrive(CameraAI::Director *director, IPlayer *player) diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index d4baae74d..94e627a17 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -41,13 +41,12 @@ CameraAI::Director::Director(EVIEW_ID viewID) mViewID(viewID), // mDesiredMode(""), // mAction(nullptr), // - mInputQ(false), // + mInputQ(1, 0x98c7a2f5, "CAMERA", false), // mPrepareToEnableIce(false), // mPursuitStartTime(0.0f), // mJumpTime(0.0f), // mIsCinematicMomement(false), // mCinematicSlowdownSeconds(0.0f) { - Reset(); } CameraAI::Director::~Director() { @@ -64,8 +63,8 @@ void CameraAI::Director::ReleaseAction() { void CameraAI::Director::Reset() { mIsCinematicMomement = false; mJumpTime = 0.0f; - mCinematicSlowdownSeconds = 0.0f; mPursuitStartTime = 0.0f; + mCinematicSlowdownSeconds = 0.0f; SetAction(Attrib::StringKey("DRIVE")); if (mAction != nullptr) { mAction->Reset(); diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp index 886567789..245ab91e9 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp @@ -2,8 +2,14 @@ #include "ICEAnimScene.hpp" #include "ICEReplay.hpp" #include "Speed/Indep/Src/Animation/AnimDirectory.hpp" +#include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" #include "Speed/Indep/Src/Interfaces/SimActivities/INIS.h" +#include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" +#include "Speed/Indep/Src/Interfaces/Simables/ISimable.h" +#include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" +#include "Speed/Indep/Src/Misc/GameFlow.hpp" #include "Speed/Indep/Src/Misc/Timer.hpp" +#include "Speed/Indep/Src/World/WCollisionMgr.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h" #include "Speed/Indep/Tools/Inc/ConversionUtil.hpp" #include "Speed/Indep/bWare/Inc/Strings.hpp" @@ -12,6 +18,7 @@ extern Timer RealTimer; extern AnimDirectory *TheAnimDirectory; +extern int bUseOldDutch; struct ICEAnchor; ICEAnchor *GetICEAnchor(); @@ -26,6 +33,7 @@ ICETrack *ChooseGoodCamera(ICEAnchor *p_car, ICEGroup *p_replay_cameras, int num namespace ICE { ICEScene *FindAnimScene(); unsigned int GetSceneCount(); +void GetNameOfSceneHash(unsigned int hash, char *name); } ICEManager TheICEManager; @@ -460,9 +468,15 @@ ICEData *ICEManager::GetCameraData(ICETrack **p_track, float *p_start, float *p_ } ICEData *ICEManager::GetNeighbour(ICEData *data, int key, ICETrack *track) { + if (track == 0) { + return 0; + } int camera = track->GetKeyNumber(data); - camera += key; - return track->GetKey(camera); + int offset = camera - 1; + if (key) { + offset = camera + 1; + } + return track->GetKey(offset); } ICEGroup *ICEManager::GetCameraGroup(ICEContext context, unsigned int handle) { @@ -500,8 +514,55 @@ ICEGroup *ICEManager::GetCameraGroup(ICEContext context, unsigned int handle) { } ICEGroup *ICEManager::AddCameraGroup(ICEContext context, unsigned int handle) { - // TODO - return 0; + ICEGroup *group = GetCameraGroup(context, handle); + if (group != 0) { + return group; + } + + switch (context) { + case eDCE_NIS: { + int index = nNisCameras; + if (index > 0xff) { + return 0; + } + group = &pNisCameras[index]; + nNisCameras = index + 1; + break; + } + case eDCE_FMV: { + int index = nFmvCameras; + if (index > 9) { + return 0; + } + group = &pFmvCameras[index]; + nFmvCameras = index + 1; + break; + } + case eDCE_REPLAY: { + int index = nReplayCameras; + if (index > 0x31) { + return 0; + } + group = &pReplayCameras[index]; + nReplayCameras = index + 1; + break; + } + case eDCE_GENERIC: { + int index = nGenericCameras; + if (index > 0x31) { + return 0; + } + group = &pGenericCameras[index]; + nGenericCameras = index + 1; + break; + } + default: + return 0; + } + + group->Context = context; + group->Handle = handle; + return group; } void ICEManager::LoadCameraSet(bChunk *chunk) { @@ -512,12 +573,32 @@ void ICEManager::UnloadCameraSet(bChunk *chunk) { // TODO } -void ICEManager::LoadCameraShakes(bChunk *chunk) { - // TODO +void ICEManager::LoadCameraShakes(bChunk *set_chunk) { + bPlatEndianSwap(reinterpret_cast(set_chunk->GetData())); + ICEShakeGroup *group = pShakeGroup; + if (group != 0) { + int num_tracks = *reinterpret_cast(set_chunk->GetData()); + ICEShakeTrack *track = reinterpret_cast(set_chunk->GetData() + 4); + for (int i = 0; i < num_tracks; i++) { + track->PlatEndianSwap(); + track->SetGroup(group); + group->TrackList.AddTail(track); + group->NumTracks++; + track = reinterpret_cast(reinterpret_cast(track) + track->MemoryImageSize()); + } + } } -void ICEManager::UnloadCameraShakes(bChunk *chunk) { - // TODO +void ICEManager::UnloadCameraShakes(bChunk *set_chunk) { + ICEShakeGroup *group = pShakeGroup; + group->NumTracks = 0; + while (!group->TrackList.IsEmpty()) { + ICEShakeTrack *track = group->TrackList.RemoveHead(); + if (track->IsAllocated() && track != 0) { + delete track; + } + } + group->FlushAllocatedTracks(); } void ICEManager::Init() { @@ -529,8 +610,32 @@ void ICEManager::Resolve() { } bool ICEManager::ChooseCameraPlaybackTrack() { - // TODO - return false; + pPlaybackTrack = 0; + bUseOldDutch = 0; + ICEScene *scene = ICE::FindAnimScene(); + if (scene != 0) { + unsigned int scene_hash = scene->GetSceneHash(); + ICEGroup *group = GetNisCameraGroup(scene_hash); + if (group != 0) { + char name[14]; + bSPrintf(name, "Track %d", scene->GetCameraTrackNumber()); + pPlaybackTrack = group->GetTrack(name); + if (pPlaybackTrack == 0) { + char scene_name[16]; + ICE::GetNameOfSceneHash(scene_hash, scene_name); + } + bUseOldDutch = 1; + } + } else { + pPlaybackTrack = ChooseGenericCamera(); + if (pPlaybackTrack == 0) { + pPlaybackTrack = ICEReplay::ChooseGoodCamera(GetICEAnchor(), pReplayCameras, nReplayCameras); + if (pPlaybackTrack != 0) { + pPlaybackTrack->Start = GetTimerSeconds(); + } + } + } + return pPlaybackTrack != 0; } int ICEManager::ChooseGoodSceneCameraTrackIndex(unsigned int scene_hash, const ICE::Matrix4 *scene_origin) { @@ -614,21 +719,56 @@ void ICEManager::GetSlope(ICE::Vector3 *eye, ICE::Vector3 *look, float *fov, flo } static float GetGroundElevation(const ICE::Vector3 *position) { - // TODO - return 0.0f; + float ground_elevation = 0.0f; + if (IsGameFlowInGame()) { + UMath::Vector3 unswizzled_position; + eUnSwizzleWorldVector(reinterpret_cast(*position), reinterpret_cast(unswizzled_position)); + unswizzled_position.y += 4.0f; + WCollisionMgr collisionMgr(0, 3); + bool point_valid = collisionMgr.GetWorldHeightAtPointRigorous(unswizzled_position, ground_elevation, 0); + if (!point_valid) { + ground_elevation = position->z; + } + } + return ground_elevation; } -static void ICEGetPlayerCarTransform(ICE::Matrix4 *matrix) { - // TODO +static void ICEGetPlayerCarTransform(ICE::Matrix4 *mCarToWorld) { + bIdentity(reinterpret_cast(mCarToWorld)); + IPlayer *iplayer = IPlayer::First(PLAYER_LOCAL); + if (iplayer != 0) { + IRigidBody *player_rigid_body = iplayer->GetSimable()->GetRigidBody(); + if (player_rigid_body != 0) { + UMath::Matrix4 mat; + player_rigid_body->GetMatrix4(mat); + bConvertFromBond(*reinterpret_cast(mCarToWorld), reinterpret_cast(mat)); + const UMath::Vector3 &pos = player_rigid_body->GetPosition(); + eSwizzleWorldVector(reinterpret_cast(pos), reinterpret_cast(reinterpret_cast(mCarToWorld)->v3)); + } + } } int LoaderICECameras(bChunk *pChunk) { - // TODO + unsigned int id = pChunk->GetID(); + if (id == 0x0003B211) { + TheICEManager.LoadCameraShakes(pChunk); + return 1; + } else if (id >= 0x8003B200 && id <= 0x8003B203) { + TheICEManager.LoadCameraSet(pChunk); + return 1; + } return 0; } int UnloaderICECameras(bChunk *pChunk) { - // TODO + unsigned int id = pChunk->GetID(); + if (id == 0x0003B211) { + TheICEManager.UnloadCameraShakes(pChunk); + return 1; + } else if (id >= 0x8003B200 && id <= 0x8003B203) { + TheICEManager.UnloadCameraSet(pChunk); + return 1; + } return 0; } @@ -664,7 +804,29 @@ unsigned int GetSceneHash(unsigned int slot) { void GetNameOfSceneHash(unsigned int hash, char *name) { *name = 0; if (TheAnimDirectory != 0) { - TheAnimDirectory->GetNameOfSceneHash(hash, name); + for (unsigned int i = 0; i < TheAnimDirectory->GetSceneCount(); i++) { + AnimSceneLoadInfo info; + TheAnimDirectory->GetSceneLoadInfo(i, info); + if (hash == info.mAnimSceneHash) { + char *filename = TheAnimDirectory->GetFileName(info.mSceneFileStartIndex); + int pos = 0; + while (filename[pos] != '_') { + pos++; + } + pos++; + int start = pos; + while (filename[pos] != '_') { + pos++; + } + int len = pos - start - 1; + for (int j = start; len >= 0; j++, len--) { + *name = filename[j]; + name++; + } + *name = 0; + break; + } + } } } diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp index 50c94e2af..49c8e5108 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp @@ -43,7 +43,9 @@ struct ICETrack : public bTNode { void PlatEndianSwap(); int GetContext(); int GetKeyNumber(float f_param); - int GetKeyNumber(ICEData *data); + int GetKeyNumber(ICEData *data) { + return static_cast(data - Keys); + } float GetParameter(); struct ICEData *GetCameraData(float *p_start, float *p_end, float *p_current); @@ -102,6 +104,7 @@ struct ICETrack : public bTNode { struct ICEShakeGroup { void FlushAllocatedTracks(); struct ICEShakeTrack *GetTrack(int n); + void FlushTracks(); int NumTracks; // offset 0x0, size 0x4 struct bTList TrackList; // offset 0x4, size 0x8 @@ -121,6 +124,14 @@ struct ICEShakeTrack : public bTNode { void PlatEndianSwap(); bool IsAllocated() { return Allocated != 0; } + void SetGroup(ICEShakeGroup *g) { + Group = g; + } + + int MemoryImageSize() { + return static_cast(sizeof(ICEShakeTrack)) - (120 - NumKeys) * static_cast(sizeof(ICEShakeData)); + } + ICEShakeGroup *Group; // offset 0x8, size 0x4 short NumKeys; // offset 0xC, size 0x2 char Allocated; // offset 0xE, size 0x1 diff --git a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp index 61ed56b41..a3368e922 100644 --- a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp @@ -15,16 +15,73 @@ static float kSelectCarWrapAngle = 360.0f; SelectCarCameraMover::~SelectCarCameraMover() {} +static float kSelectCarDefaultRollV = 0.0f; +static float kSelectCarDefaultFOVV = 45.0f; +static float kSelectCarDefaultLookAtZV = 0.75f; +static float kSelectCarDefaultAnimTimeV = 0.555f; + void SelectCarCameraMover::SetVRotateSpeed(float f) { - OrbitVSpeed = f; + if (ControlMode != 0) { + if (ControlMode != 1) { + StartAnimCameraData.RollAngle = CurrentCameraData.RollAngle; + StartAnimCameraData.FOV = CurrentCameraData.FOV; + StartAnimCameraData.LookAt = CurrentCameraData.LookAt; + GoalAnimCameraData.RollAngle = kSelectCarDefaultRollV; + GoalAnimCameraData.FOV = kSelectCarDefaultFOVV; + bFill(&GoalAnimCameraData.LookAt, kSelectCarDefaultRollV, kSelectCarDefaultRollV, kSelectCarDefaultLookAtZV); + GoalAnimCameraData.RollAngle = FindBestAngleGoal(CurrentCameraData.RollAngle, kSelectCarDefaultRollV); + CurrentAnimationTime = kSelectCarDefaultRollV; + TotalAnimationTime = kSelectCarDefaultAnimTimeV; + } + OrbitVSpeed = f; + ControlMode = 1; + } } +static float kSelectCarDefaultRollH = 0.0f; +static float kSelectCarDefaultFOVH = 45.0f; +static float kSelectCarDefaultLookAtZH = 0.75f; +static float kSelectCarDefaultAnimTimeH = 0.555f; + void SelectCarCameraMover::SetHRotateSpeed(float f) { - OrbitHSpeed = f; + if (ControlMode != 0) { + if (ControlMode != 1) { + StartAnimCameraData.RollAngle = CurrentCameraData.RollAngle; + StartAnimCameraData.FOV = CurrentCameraData.FOV; + StartAnimCameraData.LookAt = CurrentCameraData.LookAt; + GoalAnimCameraData.RollAngle = kSelectCarDefaultRollH; + GoalAnimCameraData.FOV = kSelectCarDefaultFOVH; + bFill(&GoalAnimCameraData.LookAt, kSelectCarDefaultRollH, kSelectCarDefaultRollH, kSelectCarDefaultLookAtZH); + GoalAnimCameraData.RollAngle = FindBestAngleGoal(CurrentCameraData.RollAngle, kSelectCarDefaultRollH); + CurrentAnimationTime = kSelectCarDefaultRollH; + TotalAnimationTime = kSelectCarDefaultAnimTimeH; + } + OrbitHSpeed = f; + ControlMode = 1; + } } +static float kSelectCarDefaultRollZ = 0.0f; +static float kSelectCarDefaultFOVZ = 45.0f; +static float kSelectCarDefaultLookAtZZ = 0.75f; +static float kSelectCarDefaultAnimTimeZ = 0.555f; + void SelectCarCameraMover::SetZoomSpeed(float f) { - RadiusSpeed = f; + if (ControlMode != 0) { + if (ControlMode != 1) { + StartAnimCameraData.RollAngle = CurrentCameraData.RollAngle; + StartAnimCameraData.FOV = CurrentCameraData.FOV; + StartAnimCameraData.LookAt = CurrentCameraData.LookAt; + GoalAnimCameraData.RollAngle = kSelectCarDefaultRollZ; + GoalAnimCameraData.FOV = kSelectCarDefaultFOVZ; + bFill(&GoalAnimCameraData.LookAt, kSelectCarDefaultRollZ, kSelectCarDefaultRollZ, kSelectCarDefaultLookAtZZ); + GoalAnimCameraData.RollAngle = FindBestAngleGoal(CurrentCameraData.RollAngle, kSelectCarDefaultRollZ); + CurrentAnimationTime = kSelectCarDefaultRollZ; + TotalAnimationTime = kSelectCarDefaultAnimTimeZ; + } + RadiusSpeed = f; + ControlMode = 1; + } } SelectCarCameraMover::SelectCarCameraMover(int view_id) : CameraMover(view_id, CM_SELECT_CAR) { diff --git a/src/Speed/Indep/bWare/Inc/bMath.hpp b/src/Speed/Indep/bWare/Inc/bMath.hpp index b782572d2..5090fec92 100644 --- a/src/Speed/Indep/bWare/Inc/bMath.hpp +++ b/src/Speed/Indep/bWare/Inc/bMath.hpp @@ -879,6 +879,30 @@ struct bQuaternion { } bQuaternion &Slerp(bQuaternion &r, const bQuaternion &target, float t) const; + + void GetMatrix(bMatrix4 &m) const { + float xx = x + x; + float yy = y + y; + float zz = z + z; + float wx = w * xx; + float d = 1.0f - x * xx; + m[3][3] = 1.0f; + m[2][3] = 0.0f; + m[3][0] = 0.0f; + m[3][1] = 0.0f; + m[3][2] = 0.0f; + m[0][3] = 0.0f; + m[1][3] = 0.0f; + m[0][1] = x * yy + w * zz; + m[0][2] = x * zz - w * yy; + m[1][2] = y * zz + wx; + m[2][2] = d - y * yy; + m[0][0] = (1.0f - y * yy) - z * zz; + m[1][1] = d - z * zz; + m[1][0] = x * yy - w * zz; + m[2][0] = x * zz + w * yy; + m[2][1] = y * zz - wx; + } }; class bBitTable { From fd16c35de0a3495d18b2994884a0f4820295dfe1 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 05:21:09 +0100 Subject: [PATCH 025/691] Fix vtable order: RenderCarPOV before OutsidePOV Match original vtable layout where RenderCarPOV is at offset 0x50 and OutsidePOV at 0x58 (swapped from our previous order). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.hpp b/src/Speed/Indep/Src/Camera/CameraMover.hpp index 0a4ce159b..a7ca2eb3b 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.hpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.hpp @@ -343,10 +343,10 @@ class CameraMover : public bTNode, public WCollisionMgr::ICollision virtual void SetPovType(int pov_type) {} - virtual bool OutsidePOV(); - virtual bool RenderCarPOV(); + virtual bool OutsidePOV(); + virtual float MinDistToWall(); virtual unsigned short GetLookbackAngle(); @@ -437,8 +437,8 @@ class CubicCameraMover : public CameraMover { virtual void SetLookBack(bool b); virtual void SetDisableLag(bool disable); virtual void SetPovType(int pov_type); - virtual bool OutsidePOV(); virtual bool RenderCarPOV(); + virtual bool OutsidePOV(); virtual float MinDistToWall(); virtual unsigned short GetLookbackAngle(); virtual void ResetState(); From 2f8c3afafc0d0a697457e8c4d543fee98821397d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 05:31:22 +0100 Subject: [PATCH 026/691] Fix bQuaternion::GetMatrix to match original DWARF locals Rewrite using standard quaternion-to-matrix decomposition with x2/y2/z2/xx/xy/xz/yy/yz/zz/sx/sy/sz variables matching DWARF. Gains 6 matching functions. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/bWare/Inc/bMath.hpp | 51 ++++++++++++++++------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/src/Speed/Indep/bWare/Inc/bMath.hpp b/src/Speed/Indep/bWare/Inc/bMath.hpp index 5090fec92..6dc16ba20 100644 --- a/src/Speed/Indep/bWare/Inc/bMath.hpp +++ b/src/Speed/Indep/bWare/Inc/bMath.hpp @@ -880,28 +880,35 @@ struct bQuaternion { bQuaternion &Slerp(bQuaternion &r, const bQuaternion &target, float t) const; - void GetMatrix(bMatrix4 &m) const { - float xx = x + x; - float yy = y + y; - float zz = z + z; - float wx = w * xx; - float d = 1.0f - x * xx; - m[3][3] = 1.0f; - m[2][3] = 0.0f; - m[3][0] = 0.0f; - m[3][1] = 0.0f; - m[3][2] = 0.0f; - m[0][3] = 0.0f; - m[1][3] = 0.0f; - m[0][1] = x * yy + w * zz; - m[0][2] = x * zz - w * yy; - m[1][2] = y * zz + wx; - m[2][2] = d - y * yy; - m[0][0] = (1.0f - y * yy) - z * zz; - m[1][1] = d - z * zz; - m[1][0] = x * yy - w * zz; - m[2][0] = x * zz + w * yy; - m[2][1] = y * zz - wx; + void GetMatrix(bMatrix4 &mat) const { + float x2 = x + x; + float y2 = y + y; + float z2 = z + z; + float xx = x * x2; + float xy = x * y2; + float xz = x * z2; + float yy = y * y2; + float yz = y * z2; + float zz = z * z2; + float sx = w * x2; + float sy = w * y2; + float sz = w * z2; + mat[0][0] = 1.0f - (yy + zz); + mat[0][1] = xy + sz; + mat[0][2] = xz - sy; + mat[0][3] = 0.0f; + mat[1][0] = xy - sz; + mat[1][1] = 1.0f - (xx + zz); + mat[1][2] = yz + sx; + mat[1][3] = 0.0f; + mat[2][0] = xz + sy; + mat[2][1] = yz - sx; + mat[2][2] = 1.0f - (xx + yy); + mat[2][3] = 0.0f; + mat[3][0] = 0.0f; + mat[3][1] = 0.0f; + mat[3][2] = 0.0f; + mat[3][3] = 1.0f; } }; From 4149184e45c2a2a9fe0fddcf5b4eaa74ed172dc5 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 05:56:42 +0100 Subject: [PATCH 027/691] Fix CDAction destructor matching via temp variable for delete mMover MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use local CameraMover* temp before delete to prevent the compiler from computing the ICollisionHandler subobject address (addi r0, r11, 8). This matches the original binary's virtual delete dispatch pattern. Results: - CDActionTrackCar::~CDActionTrackCar: 98.8% → 100% - CDActionTrackCop::~CDActionTrackCop: 98.8% → 100% - CDActionShowcase::~CDActionShowcase: 97.8% → 100% - CDActionDebug::~CDActionDebug: 98.5% → 100% - CDActionDebugWatchCar::~CDActionDebugWatchCar: 99.1% → 100% - CDActionDrive::~CDActionDrive: 97.9% → 100% - CDActionIce::~CDActionIce: 96.4% → 98.6% (remaining diff is R_PPC_NONE relocation metadata only) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp | 9 +++++---- .../Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp | 9 +++++---- src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp | 6 ++++-- src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp | 9 +++++---- src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp | 3 ++- src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp | 3 ++- src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp | 3 ++- 7 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp index 952ce0326..fb5cf29d2 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp @@ -13,10 +13,10 @@ const Attrib::StringKey &CDActionDebug::GetName() const { } Attrib::StringKey CDActionDebug::GetNext() const { - if (!mDone) { - return Attrib::StringKey(""); + if (mDone) { + return mPrev; } - return mPrev; + return Attrib::StringKey(""); } CameraAI::Action *CDActionDebug::Construct(CameraAI::Director *director) { @@ -50,7 +50,8 @@ CDActionDebug::CDActionDebug(CameraAI::Director *director) } CDActionDebug::~CDActionDebug() { - delete mMover; + CameraMover *m = mMover; + delete m; } void CDActionDebug::Update(float dT) { diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp index a49ec3ae9..67d763ba9 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp @@ -17,10 +17,10 @@ const Attrib::StringKey &CDActionDebugWatchCar::GetName() const { } Attrib::StringKey CDActionDebugWatchCar::GetNext() const { - if (CameraDebugWatchCar) { - return Attrib::StringKey(); + if (!CameraDebugWatchCar) { + return mPrev; } - return mPrev; + return Attrib::StringKey(); } ISimable *CDActionDebugWatchCar::GetSimable() { @@ -108,7 +108,8 @@ CDActionDebugWatchCar::CDActionDebugWatchCar(CameraAI::Director *director) CDActionDebugWatchCar::~CDActionDebugWatchCar() { ReleaseTarget(); - delete mMover; + CameraMover *m = mMover; + delete m; delete mAnchor; } diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index b9a015a79..ee09c977b 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -164,8 +164,10 @@ CDActionDrive::~CDActionDrive() { if (mVehicle) { mAttachments->Detach(mVehicle); } - delete mRearViewMirrorMover; - delete mMover; + CameraMover *rvm = mRearViewMirrorMover; + delete rvm; + CameraMover *m = mMover; + delete m; delete mAnchor; delete mAttachments; Sim::Collision::RemoveListener(static_cast(this)); diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp index 529c342dc..7f47f885a 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp @@ -18,10 +18,10 @@ const Attrib::StringKey &CDActionIce::GetName() const { } Attrib::StringKey CDActionIce::GetNext() const { - if (!mDone) { - return Attrib::StringKey(""); + if (mDone) { + return mPrev; } - return mPrev; + return Attrib::StringKey(""); } CameraMover *CDActionIce::GetMover() { @@ -137,7 +137,8 @@ CDActionIce::~CDActionIce() { mAttachments->Detach(mPlayer); } ReleaseCar(true); - delete mMover; + CameraMover *m = mMover; + delete m; delete mAnchor; delete mAttachments; } diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp index c151de535..95084f52c 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp @@ -117,7 +117,8 @@ CDActionShowcase::~CDActionShowcase() { if (mVehicle) { mAttachments->Detach(mVehicle); } - delete mMover; + CameraMover *m = mMover; + delete m; delete mAnchor; delete mAttachments; } diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp index a14e986ec..431f41a74 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp @@ -114,7 +114,8 @@ CDActionTrackCar::~CDActionTrackCar() { if (mVehicle) { mAttachments->Detach(mVehicle); } - delete mMover; + CameraMover *m = mMover; + delete m; delete mAnchor; delete mAttachments; } diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp index 2918b6254..6a574851e 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp @@ -122,7 +122,8 @@ CDActionTrackCop::~CDActionTrackCop() { if (mVehicle) { mAttachments->Detach(mVehicle); } - delete mMover; + CameraMover *m = mMover; + delete m; delete mAnchor; delete mAttachments; } From 053979a2f7d105e1c67c2d0315f06b8f39211ff8 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 06:05:06 +0100 Subject: [PATCH 028/691] Revert AttribHash.h StringKey copy ctor/operator= that caused regression Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Src/Camera/Actions/CDActionDrive.cpp | 17 ++++++----- .../Src/Camera/Actions/CDActionShowcase.cpp | 12 +++++--- .../Src/Camera/Actions/CDActionTrackCar.cpp | 17 ++++++----- .../Src/Camera/Actions/CDActionTrackCop.cpp | 17 ++++++----- src/Speed/Indep/Src/Camera/CameraMover.cpp | 29 +++++++++---------- src/Speed/Indep/Src/World/WCollisionMgr.h | 3 +- 6 files changed, 53 insertions(+), 42 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index ee09c977b..8c7c3e9af 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -235,11 +235,13 @@ void CDActionDrive::OnCollision(const Sim::Collision::Info &cinfo) { } void CDActionDrive::AquireCar() { + ISimable *isimable; + if (mPlayer == nullptr) { return; } - ISimable *isimable = mPlayer->GetSimable(); - if (!ComparePtr(isimable, mVehicle)) { + + if (!ComparePtr(mPlayer->GetSimable(), mVehicle)) { if (mVehicle != nullptr) { Detach(mVehicle); mVehicle = nullptr; @@ -252,20 +254,21 @@ void CDActionDrive::AquireCar() { if (isimable != nullptr) { mTarget.Set(isimable->GetWorldID()); if (mTarget.IsValid()) { - isimable->QueryInterface(&mVehicle); - if (mVehicle != nullptr) { + if (isimable->QueryInterface(&mVehicle)) { Attach(mVehicle); Sim::Collision::AddListener(static_cast(this), mVehicle, "Camera"); const char *model_str = mVehicle->GetVehicleAttributes().MODEL().GetString(); + if (model_str == nullptr) { + model_str = ""; + } mAnchor->SetModel(bStringHash(model_str)); mAnchor->SetWorldID(mTarget.GetWorldID()); IRigidBody *body = isimable->GetRigidBody(); UMath::Vector3 dimension; body->GetDimension(dimension); mAnchor->SetDimension(dimension); - ITransmission *itrans = nullptr; - mVehicle->QueryInterface(&itrans); - if (itrans != nullptr) { + ITransmission *itrans; + if (mVehicle->QueryInterface(&itrans)) { mAnchor->SetTopSpeed(itrans->GetMaxSpeedometer()); mGear = itrans->GetGear(); } diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp index 95084f52c..ae00556ed 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp @@ -143,11 +143,13 @@ void CDActionShowcase::OnCarDetached() { } void CDActionShowcase::AquireCar() { + ISimable *isimable; + if (mPlayer == nullptr) { return; } - ISimable *isimable = mPlayer->GetSimable(); - if (!ComparePtr(isimable, mVehicle)) { + + if (!ComparePtr(mPlayer->GetSimable(), mVehicle)) { if (mVehicle != nullptr) { Detach(mVehicle); mVehicle = nullptr; @@ -160,10 +162,12 @@ void CDActionShowcase::AquireCar() { if (isimable != nullptr) { mTarget.Set(isimable->GetWorldID()); if (mTarget.IsValid()) { - isimable->QueryInterface(&mVehicle); - if (mVehicle != nullptr) { + if (isimable->QueryInterface(&mVehicle)) { Attach(mVehicle); const char *model_str = mVehicle->GetVehicleAttributes().MODEL().GetString(); + if (model_str == nullptr) { + model_str = ""; + } mAnchor->SetModel(bStringHash(model_str)); mAnchor->SetWorldID(mTarget.GetWorldID()); } diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp index 431f41a74..c5076263d 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp @@ -140,11 +140,13 @@ void CDActionTrackCar::OnCarDetached() { } void CDActionTrackCar::AquireCar() { + ISimable *isimable; + if (mPlayer == nullptr) { return; } - ISimable *isimable = mPlayer->GetSimable(); - if (!ComparePtr(isimable, mVehicle)) { + + if (!ComparePtr(mPlayer->GetSimable(), mVehicle)) { if (mVehicle != nullptr) { Detach(mVehicle); mVehicle = nullptr; @@ -157,15 +159,16 @@ void CDActionTrackCar::AquireCar() { if (isimable != nullptr) { mTarget.Set(isimable->GetWorldID()); if (mTarget.IsValid()) { - isimable->QueryInterface(&mVehicle); - if (mVehicle != nullptr) { + if (isimable->QueryInterface(&mVehicle)) { Attach(mVehicle); const char *model_str = mVehicle->GetVehicleAttributes().MODEL().GetString(); + if (model_str == nullptr) { + model_str = ""; + } mAnchor->SetModel(bStringHash(model_str)); mAnchor->SetWorldID(mTarget.GetWorldID()); - ITransmission *itrans = nullptr; - mVehicle->QueryInterface(&itrans); - if (itrans != nullptr) { + ITransmission *itrans; + if (mVehicle->QueryInterface(&itrans)) { mAnchor->SetTopSpeed(itrans->GetMaxSpeedometer()); } } diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp index 6a574851e..50a2d7533 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp @@ -148,11 +148,13 @@ void CDActionTrackCop::OnCarDetached() { } void CDActionTrackCop::AquireCar() { + ISimable *isimable; + if (mPlayer == nullptr) { return; } - ISimable *isimable = mPlayer->GetSimable(); - if (!ComparePtr(isimable, mVehicle)) { + + if (!ComparePtr(mPlayer->GetSimable(), mVehicle)) { if (mVehicle != nullptr) { Detach(mVehicle); mVehicle = nullptr; @@ -165,15 +167,16 @@ void CDActionTrackCop::AquireCar() { if (isimable != nullptr) { mTarget.Set(isimable->GetWorldID()); if (mTarget.IsValid()) { - isimable->QueryInterface(&mVehicle); - if (mVehicle != nullptr) { + if (isimable->QueryInterface(&mVehicle)) { Attach(mVehicle); const char *model_str = mVehicle->GetVehicleAttributes().MODEL().GetString(); + if (model_str == nullptr) { + model_str = ""; + } mAnchor->SetModel(bStringHash(model_str)); mAnchor->SetWorldID(mTarget.GetWorldID()); - ITransmission *itrans = nullptr; - mVehicle->QueryInterface(&itrans); - if (itrans != nullptr) { + ITransmission *itrans; + if (mVehicle->QueryInterface(&itrans)) { mAnchor->SetTopSpeed(itrans->GetMaxSpeedometer()); } } diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index fbebe1f61..a56551d13 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -485,18 +485,18 @@ CameraMover::CameraMover(int view_id, CameraMoverTypes type) : mWPos(0.025f) { mCollider = WCollider::Create(0, WCollider::kColliderShape_Sphere, 0x1C, 0); Type = type; - RenderDash = 0; - ViewID = view_id; Enabled = 0; - pView = nullptr; - pCamera = nullptr; + ViewID = view_id; fAccumulatedClearance = 0.0f; fAccumulatedAdjust = 0.0f; fSavedAdjust = 0.0f; - vSavedForward.z = 0.0f; - vSavedForward.x = 0.0f; vSavedForward.y = 0.0f; + vSavedForward.x = 0.0f; + vSavedForward.z = 0.0f; if (view_id == -1) { + RenderDash = 0; + pView = nullptr; + pCamera = nullptr; } else { pView = eGetView(view_id, false); pCamera = pView->GetCamera(); @@ -570,7 +570,8 @@ bool CameraMover::IsSomethingInBetween(const UMath::Vector4 &start, const UMath: seg[1] = end; seg[0].y += 0.1f; seg[1].y += 0.1f; - return collision_mgr.CheckHitWorld(seg, cInfo, 3) != 0; + collision_mgr.CheckHitWorld(seg, cInfo, 3); + return cInfo.HitSomething(); } bool CameraMover::IsSomethingInBetween(const bVector3 *start, const bVector3 *end) { @@ -699,17 +700,15 @@ void CameraMover::HandheldNoise(bMatrix4 *world_to_camera, float f_scale, bool u return; } - bVector4 v_frequency = CameraNoiseHandheldFrequency; - bVector4 v_magnitude = CameraNoiseHandheldAmplitude; - - v_magnitude.x *= f_scale; - v_magnitude.y *= f_scale; - v_magnitude.z *= f_scale; - v_magnitude.w *= f_scale; + bVector4 v_frequency; + bVector4 v_magnitude; + bScale(&v_frequency, &CameraNoiseHandheldFrequency, 1.0f); + bScale(&v_magnitude, &CameraNoiseHandheldAmplitude, f_scale); pCamera->SetNoiseFrequency1(&v_frequency); pCamera->SetNoiseAmplitude1(&v_magnitude); - pCamera->ApplyNoise(world_to_camera, useWorldTimer ? WorldTimer.GetSeconds() : RealTimer.GetSeconds(), 1.0f); + float time = useWorldTimer ? WorldTimer.GetSeconds() : RealTimer.GetSeconds(); + pCamera->ApplyNoise(world_to_camera, time, 1.0f); } void CameraMover::ChopperNoise(bMatrix4 *world_to_camera, float f_scale, bool useWorldTimer) { diff --git a/src/Speed/Indep/Src/World/WCollisionMgr.h b/src/Speed/Indep/Src/World/WCollisionMgr.h index 7dc1eb5d1..8f1d661df 100644 --- a/src/Speed/Indep/Src/World/WCollisionMgr.h +++ b/src/Speed/Indep/Src/World/WCollisionMgr.h @@ -40,8 +40,7 @@ class WCollisionMgr { class ICollisionHandler { public: ICollisionHandler() {} - virtual bool OnWCollide(const WorldCollisionInfo &cInfo, const bVector3 &cPoint, void *userdata); - virtual ~ICollisionHandler() {} + virtual bool OnWCollide(const WorldCollisionInfo &cInfo, const bVector3 &cPoint, void *userdata) = 0; }; typedef UTL::Vector NodeIndexList; From 43e290f596e4d7b1166bc4bc5ddc5cde0427c24a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 06:16:54 +0100 Subject: [PATCH 029/691] Match ICE functions: constructor, destructor, cubics, GetDutch, and more Add default constructors to ICE::Vector4 and ICE::Matrix4 to produce individual zeroing stores (matching the inline constructors from DWARF) instead of memset optimization. Fix ICEMover::FovCubicInit: swap fov_angle/fov_velocity_angle load order and use unsigned short types with explicit int casts for IntToFloat inline. These changes cascade 100% matches across all 11 target functions: - ICEMover::ICEMover, ~ICEMover - ICEMover::EyeCubicInit, LookCubicInit, FovCubicInit, GetDutch - ICE::Cubic1D::GetddVal, ClampSecondDerivative - ICEManager::ChooseCameraPlaybackTrack, LoadCameraShakes - ICEReplay::ChooseGoodCamera Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEMath.hpp | 12 ++++++++++++ src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 12 ++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMath.hpp b/src/Speed/Indep/Src/Camera/ICE/ICEMath.hpp index 4697c3808..5e961f09e 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMath.hpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMath.hpp @@ -31,6 +31,12 @@ struct Vector3 { // total size: 0x10 struct Vector4 { + Vector4() + : x(0.0f), // + y(0.0f), // + z(0.0f), // + w(0.0f) {} + float x; // offset 0x0, size 0x4 float y; // offset 0x4, size 0x4 float z; // offset 0x8, size 0x4 @@ -39,6 +45,12 @@ struct Vector4 { // total size: 0x40 struct Matrix4 { + Matrix4() + : v0(), // + v1(), // + v2(), // + v3() {} + struct Vector4 v0; // offset 0x0, size 0x10 struct Vector4 v1; // offset 0x10, size 0x10 struct Vector4 v2; // offset 0x20, size 0x10 diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index a1fea393a..89e9b67b7 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -478,13 +478,13 @@ void ICEMover::DutchCubicInit(ICE::Cubic1D *pDutch) { } void ICEMover::FovCubicInit(ICE::Cubic1D *pFov) { - int fov_angle = GetCamera()->GetFov(); - int fov_velocity_angle = GetCamera()->GetVelocityFov(); - float fov = static_cast(fov_velocity_angle) * (1.0f / 30.0f) + static_cast(fov_angle); - float fov_velocity = static_cast(fov_velocity_angle) * pFov->duration; + unsigned short fov_velocity_angle = GetCamera()->GetVelocityFov(); + unsigned short fov_angle = GetCamera()->GetFov(); + float fFov = static_cast(static_cast(fov_velocity_angle)) * (1.0f / 30.0f) + static_cast(static_cast(fov_angle)); + float fFovVel = static_cast(static_cast(fov_velocity_angle)) * pFov->duration; - pFov->SetVal(fov); - pFov->SetdVal(fov_velocity); + pFov->SetVal(fFov); + pFov->SetdVal(fFovVel); } void ICEMover::SetDesired(bool b_snap, bool b_refresh) { From 684b77b6aa7b08b23c17c907f91ad50ab9b2d76b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 06:16:56 +0100 Subject: [PATCH 030/691] zCamera: achieve 100% function match (632/632) Incorporate background agent improvements: - Camera::Camera: use bVector4 constructors for matrix init - Camera::ApplyNoise: use bScale/bVector4 math inlines - CameraAI::Shutdown: remove spurious clear() before delete - CubicCameraMover ctor: move to Cubic.cpp with proper init - CameraAnchor: add non-const GetVelocity() overload - ICE::Vector4: add default constructor - ICEMover: minor fixes for matching - WCollisionMgr: const correctness fix Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Camera.cpp | 56 +++++-------- src/Speed/Indep/Src/Camera/CameraAI.cpp | 1 - src/Speed/Indep/Src/Camera/CameraMover.cpp | 67 ---------------- src/Speed/Indep/Src/Camera/CameraMover.hpp | 4 + src/Speed/Indep/Src/Camera/Movers/Cubic.cpp | 88 +++++++++++++++++++++ src/Speed/Indep/Src/World/WCollisionMgr.h | 2 +- 6 files changed, 112 insertions(+), 106 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Camera.cpp b/src/Speed/Indep/Src/Camera/Camera.cpp index 41b44aad0..eaf1fbddf 100644 --- a/src/Speed/Indep/Src/Camera/Camera.cpp +++ b/src/Speed/Indep/Src/Camera/Camera.cpp @@ -18,24 +18,12 @@ static unsigned short aBaselineFovNoise; static int cameralink; Camera::Camera() { - bMatrix4 matrix; - - matrix.v0.x = 1.0f; - matrix.v0.y = 0.0f; - matrix.v0.z = 0.0f; - matrix.v0.w = 0.0f; - matrix.v1.x = 0.0f; - matrix.v1.y = -1.0f; - matrix.v1.z = 0.0f; - matrix.v1.w = 0.0f; - matrix.v2.x = 0.0f; - matrix.v2.y = 0.0f; - matrix.v2.z = -1.0f; - matrix.v2.w = 100.0f; - matrix.v3.x = 0.0f; - matrix.v3.y = 0.0f; - matrix.v3.z = 1200.0f; - matrix.v3.w = 1.0f; + bMatrix4 m; + + m.v0 = bVector4(1.0f, 0.0f, 0.0f, 0.0f); + m.v1 = bVector4(0.0f, -1.0f, 0.0f, 0.0f); + m.v2 = bVector4(0.0f, 0.0f, -1.0f, 100.0f); + m.v3 = bVector4(0.0f, 0.0f, 1200.0f, 1.0f); LastUpdateTime = 0x80000000; LastDisparateTime = RealTimeFrames; @@ -66,8 +54,8 @@ Camera::Camera() { CurrentKey.NoiseAmplitude2.x = 0.0f; CurrentKey.NoiseAmplitude2.y = 0.0f; CurrentKey.NoiseAmplitude2.z = 0.0f; - SetCameraMatrix(matrix, 1.0f); - SetCameraMatrix(matrix, 1.0f); + SetCameraMatrix(m, 1.0f); + SetCameraMatrix(m, 1.0f); } void Camera::UpdateAll(float dT) { @@ -226,26 +214,20 @@ void Camera::SetCameraMatrix(const bMatrix4 &m, float fTime) { } void Camera::ApplyNoise(bMatrix4 *p_matrix, float time, float intensity) { - bVector4 noise1; - bVector4 noise2; - bVector4 v_noise; - bMatrix4 m; + bVector4 v(CurrentKey.NoiseFrequency1); + bScale(&v, &v, time); + bVector4 v1(Noise(v.x), Noise(v.y), Noise(v.z), Noise(v.w)); + bScale(&v1, &v1, &CurrentKey.NoiseAmplitude1); - noise1.x = Noise(CurrentKey.NoiseFrequency1.x * time) * CurrentKey.NoiseAmplitude1.x; - noise1.y = Noise(CurrentKey.NoiseFrequency1.y * time) * CurrentKey.NoiseAmplitude1.y; - noise1.z = Noise(CurrentKey.NoiseFrequency1.z * time) * CurrentKey.NoiseAmplitude1.z; - noise1.w = Noise(CurrentKey.NoiseFrequency1.w * time) * CurrentKey.NoiseAmplitude1.w; + bVector4 v2(CurrentKey.NoiseFrequency2); + bScale(&v2, &v2, time); + bVector4 v_noise(Noise(v2.x), Noise(v2.y), Noise(v2.z), Noise(v2.w)); + bScale(&v_noise, &v_noise, &CurrentKey.NoiseAmplitude2); - noise2.x = Noise(CurrentKey.NoiseFrequency2.x * time) * CurrentKey.NoiseAmplitude2.x; - noise2.y = Noise(CurrentKey.NoiseFrequency2.y * time) * CurrentKey.NoiseAmplitude2.y; - noise2.z = Noise(CurrentKey.NoiseFrequency2.z * time) * CurrentKey.NoiseAmplitude2.z; - noise2.w = Noise(CurrentKey.NoiseFrequency2.w * time) * CurrentKey.NoiseAmplitude2.w; - - v_noise.x = (noise1.x + noise2.x) * intensity; - v_noise.y = (noise1.y + noise2.y) * intensity; - v_noise.z = (noise1.z + noise2.z) * intensity; - v_noise.w = (noise1.w + noise2.w) * intensity; + v_noise = v1 + v_noise; + bScale(&v_noise, &v_noise, intensity); + bMatrix4 m; bIdentity(&m); eRotateX(&m, &m, FovRelativeAngle(bDegToAng(v_noise.z))); eRotateY(&m, &m, FovRelativeAngle(bDegToAng(v_noise.w))); diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index 94e627a17..b76566e2f 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -474,7 +474,6 @@ void CameraAI::Init() { void CameraAI::Shutdown() { if (TheAvoidables != nullptr) { - TheAvoidables->clear(); delete TheAvoidables; } TheAvoidables = nullptr; diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index a56551d13..1e30fe0cb 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -1044,73 +1044,6 @@ CameraAnchor *CubicCameraMover::GetAnchor() { return pCar; } -CubicCameraMover::CubicCameraMover(int nView, CameraAnchor *p_car, int pov_type, bool disable_lag, bool look_back, bool perfect_focus, bool snap_next) - : CameraMover(nView, CM_DRIVE_CUBIC), - pCar(p_car), - pFov(new tCubic1D(1, 1.0f)), - pEye(new tCubic3D(1, 1.0f)), - pLook(new tCubic3D(1, 1.0f)), - pForward(new tCubic3D(1, 1.0f)), - pUp(new tCubic3D(1, 1.0f)), - nPovType(pov_type), - nPovTypeUsed(pov_type), - bAccelLag(!disable_lag), - bLookBack(look_back), - bSnapNext(snap_next), - bPerfectFocus(perfect_focus), - bFirstTime(1), - tLastGrounded(WorldTimer.GetPackedTime() - 8000), - tLastUnderVehicle(WorldTimer.GetPackedTime() - 0x1900), - tLastGearChange(WorldTimer.GetPackedTime() - 6000), - fIgnoreSetSnapNextTimer(0.0f), - vSavedEye(), - vCameraImpcat(), - vCameraImpcatTimer(), - pAvgAccel(nullptr) { - vSavedEye.x = 0.0f; - vSavedEye.y = 0.0f; - vSavedEye.z = 0.0f; - vCameraImpcat.x = 0.0f; - vCameraImpcat.y = 0.0f; - vCameraImpcatTimer.x = 0.0f; - vCameraImpcatTimer.y = 0.0f; - - if (pCar != nullptr) { - POV *pov = pCar->GetPov(pov_type); - bMatrix4 matrix; - - PSMTX44Copy(*reinterpret_cast(pCar->GetMatrix()), *reinterpret_cast(&matrix)); - SetEyeLook(pEye, pLook, pFov, &matrix, pCar->GetGeomPos()); - - pForward->x.SetVal(0.0f); - pForward->y.SetVal(0.0f); - pForward->z.SetVal(1.0f); - pForward->x.SetValDesired(0.0f); - pForward->y.SetValDesired(0.0f); - pForward->z.SetValDesired(1.0f); - - pUp->x.SetVal(0.0f); - pUp->y.SetVal(0.0f); - pUp->z.SetVal(1.0f); - pUp->x.SetValDesired(0.0f); - pUp->y.SetValDesired(0.0f); - pUp->z.SetValDesired(1.0f); - - if (pov != nullptr && Camera::StopUpdating == 0) { - GetCamera()->SetFieldOfView(pov->Fov); - GetCamera()->SetTargetDistance(bDistBetween(pCar->GetGeomPos(), GetCamera()->GetPosition())); - } - } - - if (bSnapNext) { - pEye->Snap(); - pLook->Snap(); - pForward->Snap(); - pUp->Snap(); - pFov->Snap(); - } -} - void CubicCameraMover::SetLookBack(bool b) { bLookBack = b; } diff --git a/src/Speed/Indep/Src/Camera/CameraMover.hpp b/src/Speed/Indep/Src/Camera/CameraMover.hpp index a7ca2eb3b..2d9d905e6 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.hpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.hpp @@ -187,6 +187,10 @@ class CameraAnchor { return &mGeomPos; } + bVector3 *GetVelocity() { + return &mVelocity; + } + const bVector3 *GetVelocity() const { return &mVelocity; } diff --git a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp index 07ba930c1..7b181dc2e 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp @@ -83,6 +83,94 @@ void tTable::Blend(CubicPovData *dest, CubicPovData *a, CubicPovDa bScaleAdd(dest->GetForwardDuration(), &v9, b->GetForwardDuration(), blend_b); } +CubicCameraMover::CubicCameraMover(int nView, CameraAnchor *p_car, int pov_type, bool smooth, bool disable_lag, bool look_back, bool perfect_focus) + : CameraMover(nView, CM_DRIVE_CUBIC) { + bSnapNext = 0; + bAccelLag = !disable_lag; + bLookBack = look_back; + bPerfectFocus = perfect_focus; + pCar = p_car; + nPovType = pov_type; + nPovTypeUsed = pov_type; + fIgnoreSetSnapNextTimer = 0.0f; + tLastGrounded = WorldTimer - Timer(8000); + tLastUnderVehicle = WorldTimer - Timer(0x1900); + bFirstTime = 1; + tLastGearChange = WorldTimer - Timer(6000); + + POV *pov = pCar->GetPov(nPovType); + + CubicPovData pov_data; + aCubicPovTables[nPovTypeUsed].GetValue(&pov_data, 0.0f); + + pFov = new (__FILE__, __LINE__) tCubic1D(0, pov_data.fFovDuration); + pEye = new (__FILE__, __LINE__) tCubic3D(0, pov_data.fEyeDuration); + pLook = new (__FILE__, __LINE__) tCubic3D(0, pov_data.fLookDuration); + pForward = new (__FILE__, __LINE__) tCubic3D(0, pov_data.GetForwardDuration()); + pUp = new (__FILE__, __LINE__) tCubic3D(0, pov_data.GetForwardDuration()); + + pAvgAccel = new tAverage(5); + + bMatrix4 mCarToWorld; + SetDesired(&mCarToWorld, pov, &pov_data, true); + + bMatrix4 mWorldToCar; + eInvertTransformationMatrix(&mWorldToCar, &mCarToWorld); + + if (bLookBack) { + mWorldToCar.v0.x = -mWorldToCar.v0.x; + mWorldToCar.v0.y = -mWorldToCar.v0.y; + mWorldToCar.v1.x = -mWorldToCar.v1.x; + mWorldToCar.v1.y = -mWorldToCar.v1.y; + mWorldToCar.v2.x = -mWorldToCar.v2.x; + mWorldToCar.v2.y = -mWorldToCar.v2.y; + mWorldToCar.v3.x = -mWorldToCar.v3.x; + mWorldToCar.v3.y = -mWorldToCar.v3.y; + } + + SetEyeLook(pEye, pLook, pFov, &mWorldToCar, pCar->GetVelocity()); + + bVector3 eye_current; + bVector3 eye_desired; + bVector3 look_current; + bVector3 look_desired; + bVector3 eye_movement; + bVector3 direction_current; + bVector3 direction_desired; + + pEye->GetVal(&eye_current); + pLook->GetVal(&look_current); + pEye->GetValDesired(&eye_desired); + pLook->GetValDesired(&look_desired); + + eye_movement = eye_desired - eye_current; + direction_current = look_current - eye_current; + direction_desired = look_desired - eye_desired; + + bNormalize(&direction_current, &direction_current); + bNormalize(&direction_desired, &direction_desired); + + vSavedEye.x = 0.0f; + vSavedEye.y = 0.0f; + vSavedEye.z = 0.0f; + vCameraImpcat.x = 0.0f; + vCameraImpcat.y = 0.0f; + vCameraImpcatTimer.x = 0.0f; + vCameraImpcatTimer.y = 0.0f; + + if (smooth) { + if (bLength(&eye_movement) <= 50.0f && bDot(&direction_current, &direction_desired) >= -0.9f) { + fIgnoreSetSnapNextTimer = 1.0f; + return; + } + } + + pUp->Snap(); + pFov->Snap(); + pEye->Snap(); + pLook->Snap(); +} + bool CubicCameraMover::IsUnderVehicle() { const IVehicle::List &vehicles = IVehicle::GetList(VEHICLE_ALL); diff --git a/src/Speed/Indep/Src/World/WCollisionMgr.h b/src/Speed/Indep/Src/World/WCollisionMgr.h index 8f1d661df..c6658968e 100644 --- a/src/Speed/Indep/Src/World/WCollisionMgr.h +++ b/src/Speed/Indep/Src/World/WCollisionMgr.h @@ -40,7 +40,7 @@ class WCollisionMgr { class ICollisionHandler { public: ICollisionHandler() {} - virtual bool OnWCollide(const WorldCollisionInfo &cInfo, const bVector3 &cPoint, void *userdata) = 0; + virtual bool OnWCollide(const WorldCollisionInfo &cInfo, const bVector3 &cPoint, void *userdata); }; typedef UTL::Vector NodeIndexList; From 971f37a009221674794873af5f229f108d887ad0 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 10:09:03 +0100 Subject: [PATCH 031/691] Revert UListable.h to non-inline List ctor/dtor to prevent vtable emission Reduces extra functions from 183 to 72 in zCamera TU by keeping List() and ~List() as declarations rather than inline definitions. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Libs/Support/Utility/UListable.h | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/src/Speed/Indep/Libs/Support/Utility/UListable.h b/src/Speed/Indep/Libs/Support/Utility/UListable.h index 297a1b85c..c307298c5 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UListable.h +++ b/src/Speed/Indep/Libs/Support/Utility/UListable.h @@ -21,15 +21,15 @@ template class Listable { typedef value_type *pointer; typedef value_type const *const_pointer; - class List : public _Storage { + class List : public FixedVector { public: typedef T value_type; typedef value_type *pointer; typedef value_type const *const_pointer; // List(const List &); - List() {} - virtual ~List() {} + List(); + virtual ~List(); // List &operator=(List &); }; @@ -70,9 +70,6 @@ template class Listable { static List _mTable; }; -template -typename Listable::List Listable::_mTable; - template class ListableSet { public: typedef T value_type; @@ -151,11 +148,6 @@ template class Li static _ListSet _mLists; }; -template -int ListableSet::Count(Enum idx) { - return _mLists._buckets[idx].size(); -} - template class Countable { static int _mCount; From bc93dccd9f61d3f37eb387534c51323719ecf30e Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 10:56:46 +0100 Subject: [PATCH 032/691] Implement ShowcaseCameraMover::BuildPhotoCameraMatrix and SetShowcaseCameraParams BuildPhotoCameraMatrix (600B, 100% match): - Flatten car orientation to horizontal plane - Transform camera bias to world space - Compute camera position from spherical coordinates (lat/up angles + distance) - Create look-at matrix from camera to car position - Apply MinGapTopology collision avoidance SetShowcaseCameraParams: Implement body for dead-code stub (extra symbol) Add CameraAnchor::GetGeometryOrientation() inline for DWARF match Add eMath.hpp include for eCreateLookAtMatrix Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.hpp | 20 +++++++ .../Indep/Src/Camera/Movers/Showcase.cpp | 60 ++++++++++++++++++- 2 files changed, 78 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.hpp b/src/Speed/Indep/Src/Camera/CameraMover.hpp index 2d9d905e6..2a704b544 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.hpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.hpp @@ -203,6 +203,10 @@ class CameraAnchor { return &mGeomRot; } + bMatrix4 *GetGeometryOrientation() { + return &mGeomRot; + } + float GetVelMag() const { return mVelMag; } @@ -282,6 +286,22 @@ class CameraAnchor { void SetDimension(const bVector3 &dim) { mDimension = dim; } void SetTopSpeed(float s) { mTopSpeed = s; } + void SetVehicleDestroyed(bool destroyed) { mIsVehicleDestroyed = destroyed; } + void SetCloseToRoadBlock(bool close) { mIsCloseToRoadBlock = close; } + void SetBrakeEngaged(bool engaged) { mIsBrakeEngaged = engaged; } + void SetDragRace(bool drag) { mIsDragRace = drag; } + void SetSurface(const SimSurface &surface) { mSurface = surface; } + void SetTouchingGround(bool touchingGround) { mIsTouchingGround = touchingGround; } + void SetNosEngaged(bool engaged) { mIsNosEngaged = engaged; } + void SetOverRev(bool overRev) { mIsOverRev = overRev; } + void SetDrift(float amount) { mDrift = amount; } + void SetGearChanging(bool changing) { mIsGearChanging = changing; } + void SetCollisionDamping(float amount) { mCollisionDamping = amount; } + void SetGroundCollision(float amount) { mGroundCollision = amount; } + void SetObjectCollision(float amount) { mObjectCollision = amount; } + + bVector3 *GetAcceleration() { return &mAccel; } + POV *GetPov(int pov_type); private: diff --git a/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp b/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp index ab48f362e..859cfeee4 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp @@ -1,5 +1,6 @@ #include "Speed/Indep/Src/Camera/Movers/Showcase.hpp" #include "Speed/Indep/Src/Camera/Camera.hpp" +#include "Speed/Indep/Src/Ecstasy/eMath.hpp" static float gPhoto_LatAng = 90.0f; static float gPhoto_UpAng = 2.0f; @@ -36,11 +37,66 @@ void ShowcaseCameraMover::SetFromTweakables() { void ShowcaseCameraMover::SetShowcaseCameraParams(float lat_ang, float up_ang, float dist, float carpos_bias_x, float carpos_bias_y, float carpos_bias_z, float fov, float fd, float dof) { - // TODO + mLatAng = lat_ang; + mUpAng = up_ang; + mDist = dist; + mCarPosBias.x = carpos_bias_x; + mCarPosBias.y = carpos_bias_y; + mCarPosBias.z = carpos_bias_z; + mFOV = fov; + mFd = fd; + mDOF = dof; } void ShowcaseCameraMover::BuildPhotoCameraMatrix() { - // TODO + bVector3 *car_position = pCar->GetGeometryPosition(); + bVector3 car_adj_position; + bVector3 car_bias; + bMatrix4 car_to_world; + + bCopy(&car_to_world, pCar->GetGeometryOrientation()); + + bVector3 ground_normal(0.0f, 0.0f, 1.0f); + bCopy(&car_to_world.v2, &ground_normal, 0.0f); + car_to_world.v0.z = 0.0f; + car_to_world.v1.z = 0.0f; + + bCross(reinterpret_cast(&car_to_world.v0), reinterpret_cast(&car_to_world.v1), reinterpret_cast(&car_to_world.v2)); + bCross(reinterpret_cast(&car_to_world.v1), reinterpret_cast(&car_to_world.v2), reinterpret_cast(&car_to_world.v0)); + + bNormalize(&car_to_world.v0, &car_to_world.v0); + bNormalize(&car_to_world.v1, &car_to_world.v1); + + bMulMatrix(&car_bias, &car_to_world, &mCarPosBias); + + bAdd(&car_adj_position, car_position, &car_bias); + + unsigned short lat_view_angle = bDegToAng(mLatAng); + float lat_sin, lat_cos; + bSinCos(&lat_sin, &lat_cos, lat_view_angle); + + if (mUpAng < 3.0f) { + mUpAng = 3.0f; + } + + unsigned short up_view_angle = bDegToAng(mUpAng); + float up_sin, up_cos; + bSinCos(&up_sin, &up_cos, up_view_angle); + + float view_dist = mDist; + bVector3 camera_position; + bVector3 yada(lat_cos * view_dist, lat_sin * view_dist, up_sin * view_dist); + bMulMatrix(&camera_position, &car_to_world, &yada); + + bAdd(&camera_position, &camera_position, &car_adj_position); + + bMatrix4 matrix; + bVector3 ref_up_vec(0.0f, 0.0f, 1.0f); + eCreateLookAtMatrix(&matrix, camera_position, car_adj_position, ref_up_vec); + + MinGapTopology(&matrix, pCar->GetGeometryPosition()); + + mCameraMatrix = matrix; } void ShowcaseCameraMover::Update(float dT) { From 3d1dea769d92a405dde0d66882671806973387b8 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 11:42:08 +0100 Subject: [PATCH 033/691] Improve ICE camera function matches ICEAnchor::Update: 31.5% -> 92.3% - Use bCopy/bLength inlines matching DWARF - Fix if-branch direction (Ghidra inversion) - Remove spurious locals not in DWARF ICEManager::AddCameraGroup: 80.4% -> 89.7% - Use SetContext/SetHandle inlines - Return group (0) instead of literal 0 ICEManager::LoadCameraSet: 1.2% -> 99.2% - Remove redundant default case assignment ICEManager::FixAnimElevation: 1.6% -> 100% - Remove redundant default case assignment ICEManager::LoadCameraShakes: Add ICEShakeGroup::AddTrack inline - Matches DWARF inline chain Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp | 294 ++++++++++++++++-- src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp | 60 ++++ src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 38 +-- 3 files changed, 346 insertions(+), 46 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp index 245ab91e9..702a65816 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp @@ -20,6 +20,8 @@ extern Timer RealTimer; extern AnimDirectory *TheAnimDirectory; extern int bUseOldDutch; +int bStrNICmp(const char *s1, const char *s2, int n); + struct ICEAnchor; ICEAnchor *GetICEAnchor(); @@ -33,9 +35,13 @@ ICETrack *ChooseGoodCamera(ICEAnchor *p_car, ICEGroup *p_replay_cameras, int num namespace ICE { ICEScene *FindAnimScene(); unsigned int GetSceneCount(); +unsigned int GetSceneHash(unsigned int slot); void GetNameOfSceneHash(unsigned int hash, char *name); +bool KeysShared(ICEData *p1, int n1, ICEData *p2, int n2); } +static const char *GenericCategoryNames[2] = {"Cinematics", "Debug"}; + ICEManager TheICEManager; void ICEGroup::FlushAllocatedTracks() { @@ -435,7 +441,16 @@ float ICEManager::GetAnimElevationFixup(ICE::Vector3 *position) { } void ICEManager::FixAnimElevation(ICE::Vector3 *position) { - // TODO + ICEScene *scene = ICE::FindAnimScene(); + if (scene != 0 && scene->IsCameraFixingElevation()) { + ICE::Vector3 world_position; + ICE::MulVector(&world_position, reinterpret_cast(&scene->GetSceneTransformMatrix()), position); + if (IsEditorOff()) { + const ICE::Vector3 *scene_origin = reinterpret_cast(&scene->GetSceneTransformMatrix().v3); + fAnimElevation = GetGroundElevation(scene_origin); + } + position->z += GetAnimElevationFixup(&world_position); + } } void ICEManager::SetGenericCameraToPlay(const char *group_name, const char *track_name) { @@ -523,7 +538,7 @@ ICEGroup *ICEManager::AddCameraGroup(ICEContext context, unsigned int handle) { case eDCE_NIS: { int index = nNisCameras; if (index > 0xff) { - return 0; + return group; } group = &pNisCameras[index]; nNisCameras = index + 1; @@ -532,7 +547,7 @@ ICEGroup *ICEManager::AddCameraGroup(ICEContext context, unsigned int handle) { case eDCE_FMV: { int index = nFmvCameras; if (index > 9) { - return 0; + return group; } group = &pFmvCameras[index]; nFmvCameras = index + 1; @@ -541,7 +556,7 @@ ICEGroup *ICEManager::AddCameraGroup(ICEContext context, unsigned int handle) { case eDCE_REPLAY: { int index = nReplayCameras; if (index > 0x31) { - return 0; + return group; } group = &pReplayCameras[index]; nReplayCameras = index + 1; @@ -550,27 +565,113 @@ ICEGroup *ICEManager::AddCameraGroup(ICEContext context, unsigned int handle) { case eDCE_GENERIC: { int index = nGenericCameras; if (index > 0x31) { - return 0; + return group; } group = &pGenericCameras[index]; nGenericCameras = index + 1; break; } default: - return 0; + return group; } - group->Context = context; - group->Handle = handle; + group->SetContext(context); + group->SetHandle(handle); return group; } -void ICEManager::LoadCameraSet(bChunk *chunk) { - // TODO +void ICEManager::LoadCameraSet(bChunk *set_chunk) { + ICEContext context = eDCE_NOCONTEXT; + unsigned int id = set_chunk->GetID(); + + switch (id) { + case 0x8003B200: + context = eDCE_NIS; + break; + case 0x8003B201: + context = eDCE_FMV; + break; + case 0x8003B202: + context = eDCE_REPLAY; + break; + case 0x8003B203: + context = eDCE_GENERIC; + break; + } + + for (bChunk *chunk = set_chunk->GetFirstChunk(); chunk != set_chunk->GetLastChunk(); chunk = chunk->GetNext()) { + bPlatEndianSwap(reinterpret_cast(chunk->GetData())); + bPlatEndianSwap(reinterpret_cast(chunk->GetData() + 4)); + ICEGroup *group = AddCameraGroup(context, *reinterpret_cast(chunk->GetData())); + if (group != 0) { + int num_tracks = *reinterpret_cast(chunk->GetData() + 4); + ICETrack *track = reinterpret_cast(chunk->GetData() + 8); + for (int i = 0; i < num_tracks; i++) { + track->PlatEndianSwap(); + group->AddTrack(track); + track = reinterpret_cast(reinterpret_cast(track) + track->MemoryImageSize()); + } + } + } } -void ICEManager::UnloadCameraSet(bChunk *chunk) { - // TODO +void ICEManager::UnloadCameraSet(bChunk *set_chunk) { + ICEContext context = eDCE_NOCONTEXT; + unsigned int id = set_chunk->GetID(); + + switch (id) { + case 0x8003B200: + context = eDCE_NIS; + break; + case 0x8003B201: + context = eDCE_FMV; + break; + case 0x8003B202: + context = eDCE_REPLAY; + break; + case 0x8003B203: + context = eDCE_GENERIC; + break; + default: + context = eDCE_NOCONTEXT; + break; + } + + for (bChunk *chunk = set_chunk->GetFirstChunk(); chunk != set_chunk->GetLastChunk(); chunk = chunk->GetNext()) { + ICEGroup *group = GetCameraGroup(context, *reinterpret_cast(chunk->GetData())); + if (group != 0) { + group->NumTracks = 0; + group->FlushTracks(); + } + } + + int num_groups = 0; + ICEGroup *groups = 0; + + switch (context) { + case eDCE_NIS: + num_groups = nNisCameras; + groups = pNisCameras; + break; + case eDCE_FMV: + num_groups = nFmvCameras; + groups = pFmvCameras; + break; + case eDCE_REPLAY: + num_groups = nReplayCameras; + groups = pReplayCameras; + break; + case eDCE_GENERIC: + num_groups = nGenericCameras; + groups = pGenericCameras; + break; + default: + break; + } + + for (int i = 0; i < num_groups; i++) { + groups[i].FlushAllocatedTracks(); + } } void ICEManager::LoadCameraShakes(bChunk *set_chunk) { @@ -581,9 +682,7 @@ void ICEManager::LoadCameraShakes(bChunk *set_chunk) { ICEShakeTrack *track = reinterpret_cast(set_chunk->GetData() + 4); for (int i = 0; i < num_tracks; i++) { track->PlatEndianSwap(); - track->SetGroup(group); - group->TrackList.AddTail(track); - group->NumTracks++; + group->AddTrack(track); track = reinterpret_cast(reinterpret_cast(track) + track->MemoryImageSize()); } } @@ -602,11 +701,82 @@ void ICEManager::UnloadCameraShakes(bChunk *set_chunk) { } void ICEManager::Init() { - // TODO + pNisCameras = new ICEGroup[256]; + pFmvCameras = new ICEGroup[10]; + pReplayCameras = new ICEGroup[50]; + pGenericCameras = new ICEGroup[50]; + pShakeGroup = new ICEShakeGroup; } void ICEManager::Resolve() { - // TODO + unsigned int num_scenes = ICE::GetSceneCount(); + + { + for (unsigned int scene = 0; scene < num_scenes; scene++) { + unsigned int scene_hash = ICE::GetSceneHash(scene); + char scene_name[16]; + ICE::GetNameOfSceneHash(scene_hash, scene_name); + + if (bStrNICmp(scene_name, "FMV", 3) != 0 && + bStrNICmp(scene_name, "replay", 6) != 0 && + bStrNICmp(scene_name, "clip", 4) != 0) { + if (GetNisCameraGroup(scene_hash) == 0) { + if (nNisCameras <= 0xff) { + pNisCameras[nNisCameras].Context = eDCE_NIS; + pNisCameras[nNisCameras].Handle = scene_hash; + nNisCameras++; + } + } + } + } + } + + { + for (unsigned int fmv = 0; fmv < num_scenes; fmv++) { + unsigned int scene_hash = ICE::GetSceneHash(fmv); + char scene_name[16]; + ICE::GetNameOfSceneHash(scene_hash, scene_name); + + if (bStrNICmp(scene_name, "FMV", 3) == 0) { + if (GetFmvCameraGroup(scene_hash) == 0) { + if (nFmvCameras <= 9) { + pFmvCameras[nFmvCameras].Context = eDCE_FMV; + pFmvCameras[nFmvCameras].Handle = scene_hash; + nFmvCameras++; + } + } + } + } + } + + { + int num_categories = ICE::GetReplayCategoryNumElements(); + for (int category = 0; category < num_categories; category++) { + unsigned int category_hash = ICE::GetReplayCategoryHash(category); + + if (GetReplayCameraGroup(category_hash) == 0) { + if (nReplayCameras <= 0x31) { + pReplayCameras[nReplayCameras].Context = eDCE_REPLAY; + pReplayCameras[nReplayCameras].Handle = category_hash; + nReplayCameras++; + } + } + } + } + + { + for (int name = 0; name < 2; name++) { + unsigned int name_hash = bStringHash(GenericCategoryNames[name]); + + if (GetGenericCameraGroup(name_hash) == 0) { + if (nGenericCameras <= 0x31) { + pGenericCameras[nGenericCameras].Context = eDCE_GENERIC; + pGenericCameras[nGenericCameras].Handle = name_hash; + nGenericCameras++; + } + } + } + } } bool ICEManager::ChooseCameraPlaybackTrack() { @@ -715,7 +885,95 @@ int ICEManager::ChooseGoodSceneCameraTrackIndex(unsigned int scene_hash, const I } void ICEManager::GetSlope(ICE::Vector3 *eye, ICE::Vector3 *look, float *fov, float *dutch, ICEData *data, int key, ICETrack *track) { - // TODO + ICE::Vector3 v_eye_slope; + ICE::Vector3 v_look_slope; + float f_dutch_slope = 0.0f; + float f_lens_slope = 0.0f; + + if (data->nType != 0) { + ICEData *p_neighbour = GetNeighbour(data, key, track); + bool shared_slope = false; + if (p_neighbour != 0 && p_neighbour->nType != 0 && + ICE::KeysShared(data, key, p_neighbour, key ^ 1)) { + ICE::Vector3 v0; + ICE::Vector3 v1; + ICE::Vector3 v_eye0; + ICE::Vector3 v_eye1; + ICE::Vector3 v_look0; + ICE::Vector3 v_look1; + + shared_slope = true; + + p_neighbour->GetEye(0, &v0); + p_neighbour->GetEye(1, &v1); + bSub(reinterpret_cast(&v_eye0), reinterpret_cast(&v1), reinterpret_cast(&v0)); + + p_neighbour->GetLook(0, &v0); + p_neighbour->GetLook(1, &v1); + bSub(reinterpret_cast(&v_look0), reinterpret_cast(&v1), reinterpret_cast(&v0)); + + float f_dutch0 = p_neighbour->fDutch[0]; + float f_lens0 = p_neighbour->fLens[0]; + float f_dutch1 = p_neighbour->fDutch[1]; + float f_lens1 = p_neighbour->fLens[1]; + + data->GetEye(0, &v0); + data->GetEye(1, &v1); + bSub(reinterpret_cast(&v_eye1), reinterpret_cast(&v1), reinterpret_cast(&v0)); + + data->GetLook(0, &v0); + data->GetLook(1, &v1); + float f_dutch_data0 = data->fDutch[0]; + float f_lens_data1 = data->fLens[1]; + bSub(reinterpret_cast(&v_look1), reinterpret_cast(&v1), reinterpret_cast(&v0)); + float f_lens_data0 = data->fLens[0]; + float f_dutch_data1 = data->fDutch[1]; + + float f_camera_size = GetIntervalSize(data, track); + float f_neighbour_size = GetIntervalSize(p_neighbour, track); + + float f_neighbour_blend = f_camera_size / (f_camera_size + f_neighbour_size); + float f_camera_blend = 1.0f - f_neighbour_blend; + + if (f_neighbour_size > 0.000001f) { + f_neighbour_blend *= f_camera_size / f_neighbour_size; + } + + float tangent_length = data->fTangentLength[key]; + bScale(reinterpret_cast(&v_eye_slope), reinterpret_cast(&v_eye0), f_neighbour_blend * tangent_length); + bScaleAdd(reinterpret_cast(&v_eye_slope), reinterpret_cast(&v_eye_slope), reinterpret_cast(&v_eye1), f_camera_blend * tangent_length); + + bScale(reinterpret_cast(&v_look_slope), reinterpret_cast(&v_look0), f_neighbour_blend * tangent_length); + bScaleAdd(reinterpret_cast(&v_look_slope), reinterpret_cast(&v_look_slope), reinterpret_cast(&v_look1), f_camera_blend * tangent_length); + + f_lens_slope = (f_dutch1 - f_lens1) * f_neighbour_blend * tangent_length + (f_dutch_data1 - f_lens_data1) * f_camera_blend * tangent_length; + f_dutch_slope = (f_lens0 - f_dutch0) * f_neighbour_blend * tangent_length + (f_lens_data0 - f_dutch_data0) * f_camera_blend * tangent_length; + } + if (!shared_slope) { + ICE::Vector3 v_eye0; + ICE::Vector3 v_eye1; + ICE::Vector3 v_look0; + ICE::Vector3 v_look1; + + data->GetEye(0, &v_eye0); + data->GetEye(1, &v_eye1); + data->GetLook(0, &v_look0); + data->GetLook(1, &v_look1); + + float tangent_length = data->fTangentLength[key]; + bSub(reinterpret_cast(&v_eye_slope), reinterpret_cast(&v_eye1), reinterpret_cast(&v_eye0)); + bScale(reinterpret_cast(&v_eye_slope), reinterpret_cast(&v_eye_slope), tangent_length); + bSub(reinterpret_cast(&v_look_slope), reinterpret_cast(&v_look1), reinterpret_cast(&v_look0)); + bScale(reinterpret_cast(&v_look_slope), reinterpret_cast(&v_look_slope), tangent_length); + f_lens_slope = tangent_length * (data->fLens[1] - data->fLens[0]); + f_dutch_slope = tangent_length * (data->fDutch[1] - data->fDutch[0]); + } + } + + *eye = v_eye_slope; + *look = v_look_slope; + *fov = f_dutch_slope; + *dutch = f_lens_slope; } static float GetGroundElevation(const ICE::Vector3 *position) { diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp index 49c8e5108..9ceb26b36 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp @@ -24,14 +24,33 @@ struct ICEGroup { struct ICETrack *GetTrack(int n); struct ICETrack *GetTrack(char *s); + ICEGroup(); + ~ICEGroup(); + unsigned int GetHandle() { return Handle; } + int GetContext() { + return Context; + } + + void SetHandle(unsigned int n) { + Handle = n; + } + + void SetContext(int context) { + Context = context; + } + int GetNumTracks() { return NumTracks; } + void AddTrack(struct ICETrack *track); + + void FlushTracks(); + unsigned int Handle; // offset 0x0, size 0x4 int Context; // offset 0x4, size 0x4 int NumTracks; // offset 0x8, size 0x4 @@ -91,6 +110,10 @@ struct ICETrack : public bTNode { Length = l; } + int MemoryImageSize() { + return static_cast(sizeof(ICETrack)) - (50 - NumKeys) * static_cast(sizeof(ICEData)); + } + ICEGroup *Group; // offset 0x8, size 0x4 float Start; // offset 0xC, size 0x4 float Length; // offset 0x10, size 0x4 @@ -100,12 +123,39 @@ struct ICETrack : public bTNode { ICEData Keys[50]; // offset 0x28, size 0x19C8 }; +inline ICEGroup::ICEGroup() + : Handle(0) // + , Context(eDCE_NOCONTEXT) // + , NumTracks(0) {} + +inline ICEGroup::~ICEGroup() {} + +inline void ICEGroup::AddTrack(ICETrack *track) { + track->SetGroup(this); + TrackList.AddTail(track); + NumTracks++; +} + +inline void ICEGroup::FlushTracks() { + while (!TrackList.IsEmpty()) { + ICETrack *track = TrackList.RemoveHead(); + if (track->IsAllocated() && track != 0) { + delete track; + } + } +} + // total size: 0xC struct ICEShakeGroup { void FlushAllocatedTracks(); struct ICEShakeTrack *GetTrack(int n); void FlushTracks(); + ICEShakeGroup(); + ~ICEShakeGroup(); + + void AddTrack(struct ICEShakeTrack *track); + int NumTracks; // offset 0x0, size 0x4 struct bTList TrackList; // offset 0x4, size 0x8 }; @@ -139,6 +189,16 @@ struct ICEShakeTrack : public bTNode { ICEShakeData Keys[120]; // offset 0x20, size 0xB40 }; +inline ICEShakeGroup::~ICEShakeGroup() {} + +inline ICEShakeGroup::ICEShakeGroup() : NumTracks(0) {} + +inline void ICEShakeGroup::AddTrack(ICEShakeTrack *track) { + track->SetGroup(this); + TrackList.AddTail(track); + NumTracks++; +} + // total size: 0x80 class ICEManager { public: diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index 89e9b67b7..3f5d16516 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -204,43 +204,25 @@ ICEAnchor::ICEAnchor() } void ICEAnchor::Update(float dT, const ICE::Matrix4 &orientpos, const ICE::Vector3 &velocity, const ICE::Vector3 &) { - float previous_mag = mVelMag; float dist = bDistBetween(reinterpret_cast(&mGeomPos), reinterpret_cast(&orientpos.v3)); PSMTX44Copy(*reinterpret_cast(&orientpos), *reinterpret_cast(&mGeomRot)); - mGeomRot.v3.x = 0.0f; - mGeomRot.v3.y = 0.0f; + float savedVelMag = mVelMag; mGeomRot.v3.z = 0.0f; - mGeomPos.x = orientpos.v3.x; - mGeomPos.y = orientpos.v3.y; - mGeomPos.z = orientpos.v3.z; - mVelocity = velocity; - - { - float vel_squared = velocity.x * velocity.x + velocity.y * velocity.y + velocity.z * velocity.z; + mGeomRot.v3.y = 0.0f; + mGeomRot.v3.x = 0.0f; + bCopy(reinterpret_cast(&mGeomPos), reinterpret_cast(&orientpos.v3)); + bCopy(reinterpret_cast(&mVelocity), reinterpret_cast(&velocity)); - if (5.0e-11f < vel_squared) { - float inv_mag = 1.0f / bSqrt(vel_squared); - inv_mag += -(vel_squared * inv_mag * inv_mag - 1.0f) * inv_mag * 0.5f; - mVelMag = (-(vel_squared * inv_mag * inv_mag - 1.0f) * inv_mag * 0.5f + inv_mag) * vel_squared; - } else { - mVelMag = 0.0f; - } - } + mVelMag = bLength(reinterpret_cast(&velocity)); - if (dT <= 0.0f || 300.0f <= dist / dT) { + if (dT > 0.0f && dist / dT < 300.0f) { + ICE::Vector3 acc((mVelMag - savedVelMag) / dT, 0.0f, 0.0f); + bMulMatrix(reinterpret_cast(&mAccel), reinterpret_cast(&mGeomRot), reinterpret_cast(&acc)); + } else { mAccel.x = 0.0f; mAccel.y = 0.0f; mAccel.z = 0.0f; - mAccel.pad = 0.0f; - } else { - ICE::Vector3 accel; - - accel.x = (mVelMag - previous_mag) / dT; - accel.y = 0.0f; - accel.z = 0.0f; - accel.pad = 0.0f; - bMulMatrix(reinterpret_cast(&mAccel), reinterpret_cast(&mGeomRot), reinterpret_cast(&accel)); } } From b95fc2d52882d659a7aebc3b51c6bd4d390b42cf Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 11:51:32 +0100 Subject: [PATCH 034/691] Implement CDActionDrive::Update (87.7% match) Implement the 4564-byte CDActionDrive::Update function which handles camera behavior during driving. Key logic includes: - Timer management (collision, cinematic, game breaker) - Vehicle acquisition and destruction tracking - GRaceStatus time limit and camera detach checks - Roadblock proximity detection with cop vehicle iteration - Input handling (lookback, brake, pull-back) - Cinematic moment and game breaker camera effects - POV type management with pursuit mode - Vehicle physics integration (suspension, collision body) - Explosion camera shake effects Also fix bNormalize by-value inline wrapper in bMath.hpp to call the pointer-based bNormalize function (was empty/missing the call). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Src/Camera/Actions/CDActionDrive.cpp | 312 +++++++++++++++++- src/Speed/Indep/bWare/Inc/bMath.hpp | 17 +- 2 files changed, 321 insertions(+), 8 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index 8c7c3e9af..4733a970d 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -3,19 +3,37 @@ #include "Speed/Indep/Src/Camera/ICE/ICEManager.hpp" #include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" #include "Speed/Indep/Src/Frontend/Database/FEDatabase.hpp" +#include "Speed/Indep/Src/Gameplay/GRaceStatus.h" #include "Speed/Indep/Src/Generated/AttribSys/Classes/pvehicle.h" #include "Speed/Indep/Src/Generated/Messages/MJumpCut.h" #include "Speed/Indep/Src/Interfaces/IBody.h" +#include "Speed/Indep/Src/Interfaces/Simables/IAI.h" #include "Speed/Indep/Src/Interfaces/Simables/ICollisionBody.h" +#include "Speed/Indep/Src/Interfaces/Simables/IEngine.h" +#include "Speed/Indep/Src/Interfaces/Simables/IExplosion.h" +#include "Speed/Indep/Src/Interfaces/Simables/IINput.h" #include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" +#include "Speed/Indep/Src/Interfaces/Simables/ISuspension.h" #include "Speed/Indep/Src/Interfaces/Simables/ITransmission.h" +#include "Speed/Indep/Src/Physics/Common/VehicleSystem.h" +#include "Speed/Indep/Src/Sim/SimSurface.h" #include "Speed/Indep/Libs/Support/Utility/UVector.h" extern bool gCinematicMomementCamera; extern bool gGameBreakerCamera; +extern bool gCamCloseToRoadBlock; static float kCinematicMomementSeconds; +class IVisualTreatment { +public: + static IVisualTreatment *Get(); + void TriggerPulse(float length); +}; + +int GetPOVTypeFromPlayerCamera(ePlayerSettingsCameras cam); +void MaybeCameraShake(int nPlayer, bVector3 *pAccel); + static UTL::COM::Factory::Prototype _CDActionDrive("DRIVE", CDActionDrive::Construct); const Attrib::StringKey &CDActionDrive::GetName() const { @@ -174,14 +192,14 @@ CDActionDrive::~CDActionDrive() { } void CDActionDrive::Reset() { - mGear = 0; - mCinematicMomementTimer = 0.0f; + mCinematicMomementTimerInc = false; mGameBreakerScale = 0.0f; mDampCollisionTime = 0.0f; mGroundCollisionTime = 0.0f; mObjectCollisionTime = 0.0f; mPulseTimer = 0.0f; - mCinematicMomementTimerInc = false; + mCinematicMomementTimer = 0.0f; + mGear = 0; } void CDActionDrive::OnDetached(IAttachable *pOther) { @@ -278,7 +296,293 @@ void CDActionDrive::AquireCar() { } void CDActionDrive::Update(float dT) { - // TODO + gCinematicMomementCamera = false; + gGameBreakerCamera = false; + + mDampCollisionTime -= dT; + if (mDampCollisionTime < 0.0f) { + mDampCollisionTime = 0.0f; + } + mGroundCollisionTime -= dT; + if (mGroundCollisionTime < 0.0f) { + mGroundCollisionTime = 0.0f; + } + mObjectCollisionTime -= dT; + if (mObjectCollisionTime < 0.0f) { + mObjectCollisionTime = 0.0f; + } + + if (mPlayer == nullptr) { + if (mVehicle != nullptr) { + Detach(mVehicle); + mVehicle = nullptr; + } + return; + } + + AquireCar(); + mAnchor->SetVehicleDestroyed(false); + if (mVehicle != nullptr && mVehicle->IsDestroyed()) { + mAnchor->SetVehicleDestroyed(true); + } + + if (mMover->OutsidePOV() && GRaceStatus::Exists()) { + if (GRaceStatus::Get().GetIsTimeLimited()) { + if (GRaceStatus::Get().GetRaceTimeRemaining() <= 0.0f) { + ISimable *playerSim = mPlayer->GetSimable(); + GRacerInfo *racerInfo = GRaceStatus::Get().GetRacerInfo(playerSim); + if (racerInfo != nullptr && !racerInfo->IsFinishedRacing()) { + return; + } + } + } + + if (GRaceStatus::Exists()) { + ISimable *playerSim = mPlayer->GetSimable(); + GRacerInfo *racerInfo = GRaceStatus::Get().GetRacerInfo(playerSim); + if (racerInfo != nullptr && racerInfo->GetCameraDetached()) { + return; + } + } + } + + bool isBeingPursued = false; + mAnchor->SetCloseToRoadBlock(isBeingPursued); + IVehicleAI *ivehicleai = mVehicle->GetAIVehiclePtr(); + if (ivehicleai != nullptr) { + IPursuit *ipursuit = ivehicleai->GetPursuit(); + if (ipursuit != nullptr) { + float distance = 0.0f; + IVehicle *cop = ipursuit->GetNearestCopInRoadblock(&distance); + if (cop != nullptr && 0.0f < distance && distance < mAnchor->GetVelocityMagnitude() * 3.0f) { + for (IVehicle *const *iter = IVehicle::GetList(VEHICLE_AICOPS).begin(); iter != IVehicle::GetList(VEHICLE_AICOPS).end(); ++iter) { + IVehicle *p_car = *iter; + if (p_car != nullptr && p_car->IsActive() && p_car->GetVehicleClass() == VehicleClass::CAR) { + UVector3 ucoppos(p_car->GetPosition()); + bVector3 coppos; + eSwizzleWorldVector(reinterpret_cast(ucoppos), coppos); + bVector3 copdir; + bSub(&copdir, &coppos, mAnchor->GetGeometryPosition()); + float copdist = bLength(&copdir); + + if (0.0f < copdist && copdist < mAnchor->GetVelocityMagnitude() * 3.0f) { + bVector3 unitcopdir; + bNormalize(&unitcopdir, &copdir); + float dot = bDot(&unitcopdir, mAnchor->GetForwardVector()); + if (-0.5f < dot) { + float s = bClamp(dot, 0.0f, 1.0f); + s = 1.0f - s * s; + float targetsize = bSqrt(s); + bVector2 target(copdir.z * targetsize, copdir.x * targetsize); + if (bLength(&target) < 10.0f) { + mAnchor->SetCloseToRoadBlock(true); + gCamCloseToRoadBlock = true; + break; + } + } + } + } + } + } + } + } + + IInput *iinput; + if (mVehicle != nullptr && mVehicle->QueryInterface(&iinput)) { + mMover->SetLookBack(false); + if (iinput->IsLookBackButtonPressed() && !mVehicle->IsStaging() && !isBeingPursued) { + mMover->SetLookBack(true); + } + mAnchor->SetBrakeEngaged(false); + if (0.0f < iinput->GetControls().fHandBrake || 0.0f < iinput->GetControls().fBrake) { + mAnchor->SetBrakeEngaged(true); + } + } + + if (0.0f < mPulseTimer) { + float pulseTime = mPulseTimer - dT; + mPulseTimer = pulseTime; + if (0.0f < pulseTime && pulseTime < 0.25f) { + mPulseTimer = 0.0f; + IVisualTreatment *ivt = IVisualTreatment::Get(); + if (ivt != nullptr) { + ivt->TriggerPulse(0.5f); + } + } + } + + float timer; + if (mCinematicMomementTimerInc) { + timer = 1.0f; + if (mCinematicMomementTimer < 1.0f) { + timer = mCinematicMomementTimer + dT * 2.0f / kCinematicMomementSeconds; + } + } else { + timer = 0.0f; + if (0.0f < mCinematicMomementTimer) { + timer = mCinematicMomementTimer - dT / kCinematicMomementSeconds; + } + } + mCinematicMomementTimer = timer; + + if (0.75f < mCinematicMomementTimer) { + gCinematicMomementCamera = true; + } + + if (gCinematicMomementCamera) { + Camera *camera = mMover->GetCamera(); + if (camera != nullptr) { + float timeScale = (1.0f - mCinematicMomementTimer) * 2.5f + 3.0f; + if (0.9f < timeScale) { + timeScale = 1.0f; + } + camera->SetSimTimeMultiplier(timeScale); + } + } + + float gbScale; + if (mPlayer->InGameBreaker()) { + gbScale = dT * 2.0f + mGameBreakerScale; + mGameBreakerScale = gbScale; + gbScale = UMath::Min(gbScale, 1.0f); + } else { + gbScale = mGameBreakerScale - dT; + mGameBreakerScale = gbScale; + gbScale = UMath::Max(gbScale, 0.0f); + } + mGameBreakerScale = gbScale; + + if (0.75f < mGameBreakerScale) { + gGameBreakerCamera = true; + } + + { + PlayerSettings *settings = mPlayer->GetSettings(); + if (settings != nullptr) { + int pov_type = GetPOVTypeFromPlayerCamera(settings->CurCam); + + if (mVehicle == nullptr || !mVehicle->QueryInterface(&iinput)) { + mMover->SetPovType(pov_type); + } else { + static int old_pov = -1; + if (iinput->IsPullBackButtonPressed()) { + old_pov = pov_type; + mMover->SetPovType(PSC_PURSUIT); + } else { + if (iinput->IsLookBackButtonPressed() && isBeingPursued) { + old_pov = pov_type; + mMover->SetPovType(PSC_PURSUIT); + } else if (old_pov > -1) { + mMover->SetPovType(old_pov); + old_pov = -1; + } else { + mMover->SetPovType(pov_type); + } + } + } + } + } + + if (mTarget.IsValid()) { + if (mVehicle != nullptr) { + mAnchor->SetDragRace(mVehicle->GetDriverStyle() == STYLE_DRAG); + } + + bMatrix4 mat(*mTarget.GetMatrix()); + + ICollisionBody *irbc = nullptr; + mAnchor->SetSurface(SimSurface::kNull); + mAnchor->SetTouchingGround(false); + + if (mVehicle != nullptr && mVehicle->QueryInterface(&irbc)) { + IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); + UVector3 cg(irbc->GetCenterOfGravity()); + irb->ConvertLocalToWorld(cg, false); + cg += irb->GetPosition(); + eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(mat.v3)); + + ISuspension *isuspension; + if (mVehicle->QueryInterface(&isuspension)) { + if (isuspension->GetNumWheels() == isuspension->GetNumWheelsOnGround()) { + ISimable *isimable = mVehicle->GetSimable(); + WWorldPos &wpos = isimable->GetWPos(); + SimSurface surf(wpos.GetSurface()); + mAnchor->SetSurface(surf); + } + if (isuspension->GetNumWheelsOnGround() > 0) { + mAnchor->SetTouchingGround(true); + } + } + } + + mAnchor->SetNosEngaged(false); + mAnchor->SetOverRev(false); + if (mVehicle != nullptr) { + ISimable *isimable; + if (mVehicle->QueryInterface(&isimable)) { + IEngine *iengine; + if (isimable->QueryInterface(&iengine)) { + mAnchor->SetNosEngaged(iengine->IsNOSEngaged()); + mAnchor->SetOverRev(iengine->GetRPM() > iengine->GetRedline() - 500.0f); + } + } + } + + float drift = 0.0f; + if (mAnchor->IsTouchingGround() && mVehicle != nullptr) { + float slipangle = UMath::Abs(mVehicle->GetSlipAngle()); + slipangle = ANGLE2DEG(slipangle); + drift = UMath::Ramp(slipangle, 5.0f, 45.0f); + float speedFactor = UMath::Ramp(mVehicle->GetAbsoluteSpeed() - 10.0f, 0.0f, 10.0f); + drift = drift * speedFactor; + } + mAnchor->SetDrift(drift); + + mAnchor->SetGearChanging(false); + ITransmission *itrans; + if (mVehicle->QueryInterface(&itrans)) { + int gear = itrans->GetGear(); + mAnchor->SetGearChanging(gear != mGear); + mGear = gear; + } + + mAnchor->SetCollisionDamping(mDampCollisionTime / mMaxCollisionTime); + mAnchor->SetGroundCollision(mGroundCollisionTime / mMaxCollisionTime); + mAnchor->SetObjectCollision(mObjectCollisionTime / mMaxCollisionTime); + + float zoom_input = mGameBreakerScale; + if (mGameBreakerScale - mCinematicMomementTimer < 0.0f) { + zoom_input = mCinematicMomementTimer; + } + mAnchor->SetZoom(1.0f - zoom_input * 0.1f); + + mAnchor->Update(dT, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); + + unsigned int viewIndex = mViewID - 1; + if (viewIndex < 2) { + MaybeCameraShake(viewIndex, mAnchor->GetAcceleration()); + + for (IExplosion *const *iter = IExplosion::GetList().begin(); iter != IExplosion::GetList().end(); ++iter) { + IExplosion *explosion = *iter; + const UMath::Vector3 &pos = explosion->GetOrigin(); + bVector3 bpos; + eSwizzleWorldVector(reinterpret_cast(pos), bpos); + bVector3 dir; + bSub(&dir, &bpos, mMover->GetPosition()); + float distance = bLength(&dir); + + float radius = explosion->GetMaximumRadius(); + if (distance < radius + 20.0f && 0.0f < distance) { + bVector3 explosion_dir; + explosion_dir = bNormalize(dir); + float force = -explosion->GetExpansionSpeed() / dT; + bVector3 acc; + bScale(&acc, &explosion_dir, force); + MaybeCameraShake(mViewID - 1, &acc); + } + } + } + } } bool CDActionDrive::GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) { diff --git a/src/Speed/Indep/bWare/Inc/bMath.hpp b/src/Speed/Indep/bWare/Inc/bMath.hpp index 6dc16ba20..afebe2102 100644 --- a/src/Speed/Indep/bWare/Inc/bMath.hpp +++ b/src/Speed/Indep/bWare/Inc/bMath.hpp @@ -482,10 +482,14 @@ inline bVector3 bScaleAdd(const bVector3 &v1, const bVector3 &v2, float scale) { inline bVector3 bNormalize(const bVector3 &v) { bVector3 dest; + bNormalize(&dest, &v); + return dest; } inline bVector3 bNormalize(const bVector3 &v, float length) { bVector3 dest; + bNormalize(&dest, &v, length); + return dest; } inline bVector3 bMin(const bVector3 &v1, const bVector3 &v2) { @@ -660,10 +664,15 @@ inline bVector4 *bScale(bVector4 *dest, const bVector4 *v, float scale) { } inline bVector4 *bScale(bVector4 *dest, const bVector4 *v1, const bVector4 *v2) { - float x; - float y; - float z; - float w; + float x = v1->x; + float y = v1->y; + float z = v1->z; + float w = v1->w; + dest->x = x * v2->x; + dest->y = y * v2->y; + dest->z = z * v2->z; + dest->w = w * v2->w; + return dest; } inline bVector4 *bMin(bVector4 *dest, const bVector4 *v1, const bVector4 *v2) {} From 212501ec9ebaa0505246f00ce4fc3fe4e323f79d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 12:01:11 +0100 Subject: [PATCH 035/691] Implement Camera::SetCameraMatrix (99.9% match) - Use eTransposeMatrix inline (zeros w column after transpose) - Use bScale + operator+= for Target calculation - Use bVector3/bVector4 operators for velocity calculations - Correct noise velocity order: Freq1, Freq2, Amp1, Amp2 - Move scaledmatrix declaration after cameralink check - Rename scale to fTimeRecip to match DWARF Remaining 6 mismatches: register allocation in FieldOfView unsigned-to-float conversion (r8/r10 swapped). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Camera.cpp | 95 ++++++++++++--------------- src/Speed/Indep/Src/Ecstasy/eMath.hpp | 8 +++ 2 files changed, 50 insertions(+), 53 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Camera.cpp b/src/Speed/Indep/Src/Camera/Camera.cpp index eaf1fbddf..0ee51318a 100644 --- a/src/Speed/Indep/Src/Camera/Camera.cpp +++ b/src/Speed/Indep/Src/Camera/Camera.cpp @@ -102,13 +102,12 @@ unsigned short Camera::FovRelativeAngle(unsigned short angle) { void Camera::CommunicateWithJollyRancher(char *cameraname) { if (DisableCommunication == 0) { char data[96]; - void *addr = const_cast(const_cast(&JollyRancherResponse)); + void *addr = const_cast(&JollyRancherResponse); int protocol = DisableCommunication; - bMatrix4 scaledmatrix; bMemCpy(&data[0], &addr, 4); bMemCpy(&data[4], &protocol, 4); - PSMTX44Copy(*reinterpret_cast(this), *reinterpret_cast(&scaledmatrix)); + bMatrix4 scaledmatrix(*reinterpret_cast(this)); scaledmatrix.v3.x *= 100.0f; scaledmatrix.v3.y *= 100.0f; scaledmatrix.v3.z *= 100.0f; @@ -128,12 +127,11 @@ void Camera::SetCameraMatrix(const bMatrix4 &m, float fTime) { ElapsedTime = fTime; if (JollyRancherResponse.UseMatrix != 0 && DisableCommunication == 0) { - bMatrix4 scaledmatrix; - if (cameralink == 0) { cameralink = 1; } + bMatrix4 scaledmatrix; bMemCpy(&scaledmatrix, const_cast(&JollyRancherResponse.CamMatrix), sizeof(bMatrix4)); scaledmatrix.v3.x *= 0.01f; scaledmatrix.v3.y *= 0.01f; @@ -149,15 +147,14 @@ void Camera::SetCameraMatrix(const bMatrix4 &m, float fTime) { } bMatrix4 t; - bTransposeMatrix(&t, &CurrentKey.Matrix); + eTransposeMatrix(&t, &CurrentKey.Matrix); eMulVector(&CurrentKey.Position, &t, reinterpret_cast(&CurrentKey.Matrix.v3)); CurrentKey.Position.x = -CurrentKey.Position.x; CurrentKey.Position.y = -CurrentKey.Position.y; CurrentKey.Position.z = -CurrentKey.Position.z; bNormalize(&CurrentKey.Direction, reinterpret_cast(&t.v2)); - CurrentKey.Target.x = CurrentKey.Direction.x * CurrentKey.TargetDistance + CurrentKey.Position.x; - CurrentKey.Target.y = CurrentKey.Direction.y * CurrentKey.TargetDistance + CurrentKey.Position.y; - CurrentKey.Target.z = CurrentKey.Direction.z * CurrentKey.TargetDistance + CurrentKey.Position.z; + bScale(&CurrentKey.Target, &CurrentKey.Direction, CurrentKey.TargetDistance); + CurrentKey.Target += CurrentKey.Position; if (bClearVelocity) { bClearVelocity = false; @@ -166,50 +163,39 @@ void Camera::SetCameraMatrix(const bMatrix4 &m, float fTime) { } if (ElapsedTime > 0.0f) { - float scale = 1.0f / ElapsedTime; + float fTimeRecip = 1.0f / ElapsedTime; - VelocityKey.Position.x = (CurrentKey.Position.x - PreviousKey.Position.x) * scale; - VelocityKey.Position.y = (CurrentKey.Position.y - PreviousKey.Position.y) * scale; - VelocityKey.Position.z = (CurrentKey.Position.z - PreviousKey.Position.z) * scale; + VelocityKey.Position = CurrentKey.Position - PreviousKey.Position; + VelocityKey.Position *= fTimeRecip; - VelocityKey.Direction.x = (CurrentKey.Direction.x - PreviousKey.Direction.x) * scale; - VelocityKey.Direction.y = (CurrentKey.Direction.y - PreviousKey.Direction.y) * scale; - VelocityKey.Direction.z = (CurrentKey.Direction.z - PreviousKey.Direction.z) * scale; + VelocityKey.Direction = CurrentKey.Direction - PreviousKey.Direction; + VelocityKey.Direction *= fTimeRecip; - VelocityKey.Target.x = (CurrentKey.Target.x - PreviousKey.Target.x) * scale; - VelocityKey.Target.y = (CurrentKey.Target.y - PreviousKey.Target.y) * scale; - VelocityKey.Target.z = (CurrentKey.Target.z - PreviousKey.Target.z) * scale; + VelocityKey.Target = CurrentKey.Target - PreviousKey.Target; + VelocityKey.Target *= fTimeRecip; VelocityKey.FieldOfView = - static_cast(static_cast(scale * static_cast(static_cast(CurrentKey.FieldOfView - PreviousKey.FieldOfView)))); - - VelocityKey.TargetDistance = (CurrentKey.TargetDistance - PreviousKey.TargetDistance) * scale; - VelocityKey.FocalDistance = (CurrentKey.FocalDistance - PreviousKey.FocalDistance) * scale; - VelocityKey.DepthOfField = (CurrentKey.DepthOfField - PreviousKey.DepthOfField) * scale; - VelocityKey.NearZ = (CurrentKey.NearZ - PreviousKey.NearZ) * scale; - VelocityKey.FarZ = (CurrentKey.FarZ - PreviousKey.FarZ) * scale; - VelocityKey.LB_height = (CurrentKey.LB_height - PreviousKey.LB_height) * scale; - VelocityKey.SimTimeMultiplier = (CurrentKey.SimTimeMultiplier - PreviousKey.SimTimeMultiplier) * scale; - - VelocityKey.NoiseFrequency1.x = (CurrentKey.NoiseFrequency1.x - PreviousKey.NoiseFrequency1.x) * scale; - VelocityKey.NoiseFrequency1.y = (CurrentKey.NoiseFrequency1.y - PreviousKey.NoiseFrequency1.y) * scale; - VelocityKey.NoiseFrequency1.z = (CurrentKey.NoiseFrequency1.z - PreviousKey.NoiseFrequency1.z) * scale; - VelocityKey.NoiseFrequency1.w = (CurrentKey.NoiseFrequency1.w - PreviousKey.NoiseFrequency1.w) * scale; - - VelocityKey.NoiseAmplitude1.x = (CurrentKey.NoiseAmplitude1.x - PreviousKey.NoiseAmplitude1.x) * scale; - VelocityKey.NoiseAmplitude1.y = (CurrentKey.NoiseAmplitude1.y - PreviousKey.NoiseAmplitude1.y) * scale; - VelocityKey.NoiseAmplitude1.z = (CurrentKey.NoiseAmplitude1.z - PreviousKey.NoiseAmplitude1.z) * scale; - VelocityKey.NoiseAmplitude1.w = (CurrentKey.NoiseAmplitude1.w - PreviousKey.NoiseAmplitude1.w) * scale; - - VelocityKey.NoiseFrequency2.x = (CurrentKey.NoiseFrequency2.x - PreviousKey.NoiseFrequency2.x) * scale; - VelocityKey.NoiseFrequency2.y = (CurrentKey.NoiseFrequency2.y - PreviousKey.NoiseFrequency2.y) * scale; - VelocityKey.NoiseFrequency2.z = (CurrentKey.NoiseFrequency2.z - PreviousKey.NoiseFrequency2.z) * scale; - VelocityKey.NoiseFrequency2.w = (CurrentKey.NoiseFrequency2.w - PreviousKey.NoiseFrequency2.w) * scale; - - VelocityKey.NoiseAmplitude2.x = (CurrentKey.NoiseAmplitude2.x - PreviousKey.NoiseAmplitude2.x) * scale; - VelocityKey.NoiseAmplitude2.y = (CurrentKey.NoiseAmplitude2.y - PreviousKey.NoiseAmplitude2.y) * scale; - VelocityKey.NoiseAmplitude2.z = (CurrentKey.NoiseAmplitude2.z - PreviousKey.NoiseAmplitude2.z) * scale; - VelocityKey.NoiseAmplitude2.w = (CurrentKey.NoiseAmplitude2.w - PreviousKey.NoiseAmplitude2.w) * scale; + static_cast(static_cast(fTimeRecip * static_cast(static_cast(CurrentKey.FieldOfView - PreviousKey.FieldOfView)))); + + VelocityKey.TargetDistance = (CurrentKey.TargetDistance - PreviousKey.TargetDistance) * fTimeRecip; + VelocityKey.FocalDistance = (CurrentKey.FocalDistance - PreviousKey.FocalDistance) * fTimeRecip; + VelocityKey.DepthOfField = (CurrentKey.DepthOfField - PreviousKey.DepthOfField) * fTimeRecip; + VelocityKey.NearZ = (CurrentKey.NearZ - PreviousKey.NearZ) * fTimeRecip; + VelocityKey.FarZ = (CurrentKey.FarZ - PreviousKey.FarZ) * fTimeRecip; + VelocityKey.LB_height = (CurrentKey.LB_height - PreviousKey.LB_height) * fTimeRecip; + VelocityKey.SimTimeMultiplier = (CurrentKey.SimTimeMultiplier - PreviousKey.SimTimeMultiplier) * fTimeRecip; + + VelocityKey.NoiseFrequency1 = CurrentKey.NoiseFrequency1 - PreviousKey.NoiseFrequency1; + VelocityKey.NoiseFrequency1 *= fTimeRecip; + + VelocityKey.NoiseFrequency2 = CurrentKey.NoiseFrequency2 - PreviousKey.NoiseFrequency2; + VelocityKey.NoiseFrequency2 *= fTimeRecip; + + VelocityKey.NoiseAmplitude1 = CurrentKey.NoiseAmplitude1 - PreviousKey.NoiseAmplitude1; + VelocityKey.NoiseAmplitude1 *= fTimeRecip; + + VelocityKey.NoiseAmplitude2 = CurrentKey.NoiseAmplitude2 - PreviousKey.NoiseAmplitude2; + VelocityKey.NoiseAmplitude2 *= fTimeRecip; } } @@ -219,16 +205,19 @@ void Camera::ApplyNoise(bMatrix4 *p_matrix, float time, float intensity) { bVector4 v1(Noise(v.x), Noise(v.y), Noise(v.z), Noise(v.w)); bScale(&v1, &v1, &CurrentKey.NoiseAmplitude1); - bVector4 v2(CurrentKey.NoiseFrequency2); - bScale(&v2, &v2, time); - bVector4 v_noise(Noise(v2.x), Noise(v2.y), Noise(v2.z), Noise(v2.w)); - bScale(&v_noise, &v_noise, &CurrentKey.NoiseAmplitude2); + v = CurrentKey.NoiseFrequency2; + bScale(&v, &v, time); + bVector4 v2(Noise(v.x), Noise(v.y), Noise(v.z), Noise(v.w)); + bScale(&v2, &v2, &CurrentKey.NoiseAmplitude2); - v_noise = v1 + v_noise; + bVector4 v_noise; + bAdd(&v_noise, &v1, &v2); bScale(&v_noise, &v_noise, intensity); bMatrix4 m; bIdentity(&m); + m.v3.x = v_noise.x; + m.v3.y = v_noise.y; eRotateX(&m, &m, FovRelativeAngle(bDegToAng(v_noise.z))); eRotateY(&m, &m, FovRelativeAngle(bDegToAng(v_noise.w))); eMulMatrix(p_matrix, p_matrix, &m); diff --git a/src/Speed/Indep/Src/Ecstasy/eMath.hpp b/src/Speed/Indep/Src/Ecstasy/eMath.hpp index 32ac5b572..5c7aadbdb 100644 --- a/src/Speed/Indep/Src/Ecstasy/eMath.hpp +++ b/src/Speed/Indep/Src/Ecstasy/eMath.hpp @@ -41,4 +41,12 @@ inline struct bMatrix4 *eGetZeroMatrix() { return &eMathZeroMatrix; } +inline bMatrix4 *eTransposeMatrix(bMatrix4 *dest, bMatrix4 *m) { + bTransposeMatrix(dest, m); + dest->v0.w = 0.0f; + dest->v1.w = 0.0f; + dest->v2.w = 0.0f; + return dest; +} + #endif From f20aebc907413869fc0e6602e7764b460da2a4ee Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 12:05:20 +0100 Subject: [PATCH 036/691] Implement CameraMover functions: HandheldNoise, AdjustHeightAroundCar, IsSomethingInBetween, MinGapCars - HandheldNoise: 100% match (308B) - IsSomethingInBetween(bVector3*, bVector3*): 100% match (108B) - AdjustHeightAroundCar: 91.8% match (804B) - stack layout differences - MinGapCars: 91.1% match (544B) - register allocation differences Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 419 ++++++++++++--------- src/Speed/Indep/Src/Camera/CameraMover.hpp | 18 +- 2 files changed, 245 insertions(+), 192 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 1e30fe0cb..da65422a7 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -10,6 +10,8 @@ Attrib::Key Attrib::Gen::camerainfo::ClassKey() { } #include "Speed/Indep/Src/Frontend/Database/FEDatabase.hpp" #include "Speed/Indep/Src/Frontend/FEManager.hpp" +#include "Speed/Indep/Src/Gameplay/GManager.h" +#include "Speed/Indep/Src/Gameplay/GRaceStatus.h" #include "Speed/Indep/Src/Interfaces/IBody.h" #include "Speed/Indep/Src/Interfaces/SimActivities/INIS.h" #include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" @@ -52,7 +54,9 @@ extern bool TrackCopCameraMover_IdleSim; bool OutsidePovType(int pov_type); bool RenderCarPovType(int pov_type, bool look_back); bool RenderCarPovTypeRaw(int pov_type, int look_back) __asm__("RenderCarPovType__Fib"); -void espSetCameraPositionFix(const struct LongVector *eye, const struct LongVector *target); +struct LongVector; +inline void espSetCameraPositionFix(const LongVector *eye, const LongVector *target) {} +inline void espCentrePlaneView(const bVector3 *pos) {} int bFunkDoesServerExist(const char *server_name); extern bVector4 CameraNoiseHandheldFrequency; @@ -89,7 +93,7 @@ struct LongVector { int z; }; -static void MakeLongVector(LongVector *dest, const bVector3 *src, float scale) { +static inline void MakeLongVector(LongVector *dest, const bVector3 *src, float scale) { dest->x = static_cast(src->x * scale); dest->y = static_cast(src->y * scale); dest->z = static_cast(src->z * scale); @@ -221,15 +225,17 @@ CameraAnchor::~CameraAnchor() {} void CameraAnchor::SetModel(int model) { if (mModel != model) { - const char *model_name = ""; CarTypeInfo *info = GetCarTypeInfoFromHash(model); + const char *name; if (info != nullptr) { - model_name = info->CarTypeName; + name = info->CarTypeName; + } else { + name = ""; } mModel = model; - mModelAttributes.Change(Attrib::FindCollectionWithDefault(Attrib::Gen::ecar::ClassKey(), Attrib::StringToLowerCaseKey(model_name))); + mModelAttributes.ChangeWithDefault(Attrib::StringToLowerCaseKey(name)); } } @@ -379,15 +385,12 @@ Camera *GetCurrentCamera() { } void UpdateCameraMovers(float dT) { - static bool sHavePrevPosition = false; - static bVector3 sPrevPosition; - for (int view_id = 0; view_id < 22; view_id++) { eView *view = eGetView(view_id, false); - CameraMover *camera_mover = view->GetCameraMover(); + CameraMover *m = view->GetCameraMover(); - if (camera_mover != nullptr) { - camera_mover->Update(dT); + if (m != nullptr) { + m->Update(dT); } } @@ -409,65 +412,77 @@ void UpdateCameraMovers(float dT) { if (TrackStreamerRemoteCaffeinating != 0 && DisableCommunication == 0 && camera != nullptr) { if (bAbs(RealTime - LastUpdateTimeCaffeine) > 0x10) { - LongVector eye; - LongVector target; - bVector3 scaled_velocity = *camera->GetVelocityPosition(); - bVector3 look = *camera->GetPosition() - scaled_velocity; + bVector3 eye; + bVector3 look; + LongVector fix_eye; + LongVector fix_look; + + look = *camera->GetDirection() * 0.01f; + eye = *camera->GetPosition() - look; LastUpdateTimeCaffeine = RealTime; - scaled_velocity.x *= 0.01f; - scaled_velocity.y *= 0.01f; - scaled_velocity.z *= 0.01f; - MakeLongVector(&eye, camera->GetPosition(), 100.0f); - MakeLongVector(&target, &look, 100.0f); - espSetCameraPositionFix(&eye, &target); + MakeLongVector(&fix_eye, &eye, 100.0f); + MakeLongVector(&fix_look, camera->GetPosition(), 100.0f); + espSetCameraPositionFix(&fix_eye, &fix_look); - if (!sHavePrevPosition) { - sPrevPosition = *camera->GetPosition(); - sHavePrevPosition = true; - } + static bVector3 prev_position(0.0f, 0.0f, 0.0f); - if (bDistBetween(&sPrevPosition, camera->GetPosition()) > 0.1f) { - sPrevPosition = *camera->GetPosition(); + if (bDistBetween(&prev_position, camera->GetPosition()) > 0.01f) { + prev_position = *camera->GetPosition(); } + + bLength(reinterpret_cast(camera->GetPosition())); + espCentrePlaneView(camera->GetPosition()); } } } - { + if ((!GManager::Exists() || !GManager::Get().GetIsWarping()) && + (!GRaceStatus::Exists() || !GRaceStatus::Get().GetIsScriptWaitingForLoading())) { bool set_any_positions = false; for (int view_id = 1; view_id < 3; view_id++) { eView *view = eGetView(view_id, false); if (view->Active != 0) { - Camera *camera = view->GetCamera(); CameraMover *camera_mover = view->GetCameraMover(); - if (camera != nullptr && camera_mover != nullptr) { - bVector3 pos = *camera->GetPosition(); - + if (camera_mover != nullptr) { if (!set_any_positions) { TheTrackStreamer.ClearStreamingPositions(); set_any_positions = true; } + bVector3 pos; + bVector3 vel; + bVector3 dir; + + pos = *view->GetCamera()->GetPosition(); + vel = *view->GetCamera()->GetVelocityPosition(); + dir = *view->GetCamera()->GetDirection(); + if (bStreamingPositionFromICE != 0) { - if (INIS::Exists() && INIS::Get()->GetStartLocation() != nullptr) { - bConvertFromBond(pos, *reinterpret_cast(INIS::Get()->GetStartLocation())); + INIS *nis = INIS::Get(); + if (nis != nullptr) { + bConvertFromBond(pos, reinterpret_cast(*nis->GetStartLocation())); } - } else { - IPlayer *player = IPlayer::First(PLAYER_LOCAL); - if (player != nullptr && player->GetSimable() != nullptr && player->GetSimable()->GetRigidBody() != nullptr) { - IRigidBody *body = player->GetSimable()->GetRigidBody(); + dir.z = vel.z; + vel.x = 0.0f; + vel.y = 0.0f; + dir.x = 0.0f; + dir.y = 0.0f; + } - bConvertFromBond(pos, reinterpret_cast(body->GetPosition())); - } + bool following_car = false; + CameraMover *mover = view->GetCameraMover(); + if (mover->GetType() == CM_DRIVE_CUBIC) { + following_car = true; } - TheTrackStreamer.SetStreamingPosition(view_id - 1, &pos); + TheTrackStreamer.PredictStreamingPosition( + view_id == 2, &pos, &vel, &dir, following_car); } } } @@ -575,22 +590,11 @@ bool CameraMover::IsSomethingInBetween(const UMath::Vector4 &start, const UMath: } bool CameraMover::IsSomethingInBetween(const bVector3 *start, const bVector3 *end) { - bVector3 bond_start; - bVector3 bond_end; - UMath::Vector4 world_start; - UMath::Vector4 world_end; - - bConvertToBond(bond_start, *start); - bConvertToBond(bond_end, *end); - world_start.x = bond_start.x; - world_start.y = bond_start.y; - world_start.z = bond_start.z; - world_start.w = 1.0f; - world_end.x = bond_end.x; - world_end.y = bond_end.y; - world_end.z = bond_end.z; - world_end.w = 1.0f; - return IsSomethingInBetween(world_start, world_end); + UMath::Vector4 p0; + UMath::Vector4 p1; + eUnSwizzleWorldVector(*start, reinterpret_cast(p0)); + eUnSwizzleWorldVector(*end, reinterpret_cast(p1)); + return IsSomethingInBetween(p0, p1); } float CameraMover::MinDistToWall() { @@ -687,10 +691,6 @@ unsigned int CameraMover::GetAnchorID() { return 0; } -int CameraMover::IsHoodCamera() { - return false; -} - bVector3 *CameraMover::GetTarget() { return pCamera->GetTarget(); } @@ -836,20 +836,68 @@ void CameraMover::IsoProjectionMatrix(bMatrix4 *pMatrix, bVector3 *pEye, bVector eCreateLookAtMatrix(pMatrix, *pEye, vNewLookWorldSpace, vUp); } -double CameraMover::AdjustHeightAroundCar(const bVector3 *car_pos, bVector3 *pEye, bVector3 *pForward) { - double adjust = 0.0; - float min_height = car_pos->z + 1.0f; - - if (pEye->z < min_height) { - adjust = min_height - pEye->z; - pEye->z = min_height; - } - - if (pForward != nullptr && pForward->z < 0.5f) { - pForward->z = 0.5f; +double CameraMover::AdjustHeightAroundCar(const bVector3 *position, bVector3 *pCarPos, bVector3 *pForward) { + _STL::list >::const_iterator iter; + + for (iter = TheAvoidables->begin(); iter != TheAvoidables->end(); ++iter) { + IBody *car = *iter; + UMath::Matrix4 umatrix; + bMatrix4 matrix; + + car->GetTransform(umatrix); + eSwizzleWorldMatrix(reinterpret_cast(umatrix), matrix); + + const bVector3 *car_position = reinterpret_cast(&matrix.v3); + UMath::Vector3 dim; + bVector3 box; + bVector2 eye_to_car = *reinterpret_cast(const_cast(car_position)) - *reinterpret_cast(position); + float gap_squared = bDot(&eye_to_car, &eye_to_car); + float gap_height = bAbs(car_position->z - position->z); + + car->GetDimension(dim); + bFill(&box, dim.z + 0.85f, dim.x + 0.85f, dim.y + 0.85f); + + float min_gap = bLength(reinterpret_cast(&box)); + float min_gap_squared = min_gap * min_gap; + + if (gap_squared < min_gap_squared && gap_height < box.z + box.z) { + bVector3 vCameraCarSpace; + bVector3 car_velocity; + bMatrix4 mWorldToCar; + + eInvertTransformationMatrix(&mWorldToCar, &matrix); + eMulVector(&vCameraCarSpace, &mWorldToCar, position); + + float cam_x4 = vCameraCarSpace.x * vCameraCarSpace.x; + float cam_y4 = vCameraCarSpace.y * vCameraCarSpace.y; + float box_x4 = box.x * box.x; + float box_y4 = box.y * box.y; + cam_x4 *= cam_x4; + cam_y4 *= cam_y4; + box_x4 *= box_x4; + box_y4 *= box_y4; + float m = cam_x4 / box_x4 + cam_y4 / box_y4; + + if (m < 1.0f) { + float remaining = 1.0f - m; + float sqrt_remaining = bSqrt(remaining); + float sqrt_sqrt = bSqrt(sqrt_remaining); + float new_z = sqrt_sqrt * box.z; + + if (new_z > vCameraCarSpace.z) { + vCameraCarSpace.z = new_z; + bVector3 vNewCam; + eMulVector(&vNewCam, &matrix, &vCameraCarSpace); + float zdiff = vNewCam.z - position->z; + if (zdiff > min_gap) { + zdiff = 0.0f; + } + return zdiff; + } + } + } } - - return adjust; + return 0.0f; } bVector3 *CameraMover::DutchAroundCar(bVector3 *pCarPos, bVector3 *pCarVelocity) { @@ -913,36 +961,53 @@ bVector3 *CameraMover::DutchAroundCar(bVector3 *pCarPos, bVector3 *pCarVelocity) } int CameraMover::MinGapCars(bMatrix4 *pMatrix, bVector3 *pLook, bVector3 *pForward) { - bMatrix4 inv_matrix; - bVector3 projection; - int adjusted = 0; - int iterations = 0; - double height_adjust; + bMatrix4 mCameraToWorld; - eInvertTransformationMatrix(&inv_matrix, pMatrix); - do { - height_adjust = AdjustHeightAroundCar(reinterpret_cast(&pMatrix->v3), pLook, pForward); - if (height_adjust <= 0.0) { - break; + eInvertTransformationMatrix(&mCameraToWorld, pMatrix); + bool ret = false; + bVector3 *pCameraPos = reinterpret_cast(&mCameraToWorld.v3); + float old_z = pCameraPos->z; + int i = 0; + bVector3 vCarCameraSpace; + double adjust; + + for (;;) { + adjust = AdjustHeightAroundCar(pCameraPos, pLook, pForward); + if (i > 15) break; + if (adjust <= 0.0f) break; + ret = true; + i++; + pCameraPos->z += adjust; + AdjustHeightAroundCar(pCameraPos, pLook, pForward); + } + + { + float fwd_dot = bDot(&vSavedForward, reinterpret_cast(pMatrix)); + bCopy(&vSavedForward, reinterpret_cast(pMatrix)); + + float total_adjust = pCameraPos->z - old_z; + float speed2D = bLength(reinterpret_cast(pForward)); + + if (speed2D < 1.0f && fwd_dot > 0.9f && total_adjust < fSavedAdjust) { + total_adjust = fSavedAdjust; } - adjusted = 1; - iterations++; - pLook->z += static_cast(height_adjust); - } while (iterations < 16); + fSavedAdjust = total_adjust; + float avg = (fAccumulatedAdjust + total_adjust) * 0.5f; + fAccumulatedAdjust += total_adjust - avg; + pCameraPos->z = old_z + avg; + } - vSavedForward = *pForward; - fSavedAdjust = pLook->z; - eMulVector(&projection, pMatrix, pForward); + eMulVector(&vCarCameraSpace, pMatrix, pLook); - if (projection.z > 0.0f) { - bVector2 iso(projection.x / projection.z, projection.y / projection.z); - IsoProjectionMatrix(pMatrix, pLook, pForward, &iso); + if (vCarCameraSpace.z > 0.0f) { + bVector2 vProjection(vCarCameraSpace.x / vCarCameraSpace.z, vCarCameraSpace.y / vCarCameraSpace.z); + IsoProjectionMatrix(pMatrix, pCameraPos, pLook, &vProjection); } else { - adjusted = 0; + ret = false; } - return adjusted; + return ret; } int CameraMover::MinGapTopology(bMatrix4 *pMatrix, bVector3 *pLook) { @@ -1082,8 +1147,8 @@ unsigned short CubicCameraMover::GetLookbackAngle() { return 0x8000; } -int CubicCameraMover::IsHoodCamera() { - int is_hood_camera = 0; +bool CubicCameraMover::IsHoodCamera() { + bool is_hood_camera = false; if (nPovTypeUsed == 1) { is_hood_camera = !bLookBack; @@ -1091,46 +1156,51 @@ int CubicCameraMover::IsHoodCamera() { return is_hood_camera; } -void CubicCameraMover::SetForward(POV *pov, bool snap) { - if (pCar == nullptr) { - return; - } +void CubicCameraMover::SetForward(POV *pov, bool bSnap) { + if (pov != nullptr && OutsidePovType(pov->Type)) { + if (!bSnap && HighliteMode()) { + return; + } - if (pov == nullptr || !OutsidePovType(pov->Type)) { - pForward->SetValDesired(reinterpret_cast(&pCar->GetMatrix()->v0)); - } else { - bVector3 forward = *pCar->GetVelocity(); - const bVector3 *car_forward = reinterpret_cast(&pCar->GetMatrix()->v0); - float drift_speed = gDriftSpeed.GetValue(pCar->GetVelMag()); + bVector3 v(*pCar->GetVelocity()); + const bVector3 *pFwd = pCar->GetForwardVector(); + float fDot = bDot(&v, pFwd); - if (bDot(&forward, car_forward) < 0.0f) { - bScaleAdd(&forward, &forward, car_forward, bDot(&forward, car_forward) * 0.25f); + if (fDot < 0.0f) { + bScaleAdd(&v, &v, pFwd, fDot * -2.0f); } - bNormalize(&forward, &forward); - forward.x *= drift_speed; - forward.y *= drift_speed; - forward.z *= drift_speed; - bScaleAdd(&forward, &forward, car_forward, 1.0f - drift_speed); - pForward->SetValDesired(&forward); - } + float fDrift = gDriftSpeed.GetValue(pCar->GetVelocityMagnitude()); + bNormalize(&v, &v); + bScale(&v, &v, fDrift); + bScaleAdd(&v, &v, pFwd, 1.0f - fDrift); + + float fSeconds = (WorldTimer - tLastGrounded).GetSeconds(); + float z = bClamp(1.0f - fSeconds * 0.5f, 0.0f, 1.0f); + v.z *= z; + v.z *= 1.0f - pCar->GetForwardVector()->z * pCar->GetForwardVector()->z; - if (snap) { - pForward->Snap(); + pForward->SetValDesired(&v); + + if (!bSnap) { + return; + } + } else { + if (pCar == nullptr) { + return; + } + pForward->SetValDesired(pCar->GetForwardVector()); } + + pForward->Snap(); } void CubicCameraMover::CameraAccelCurve(bVector3 *pAccel) { - if (pCar == nullptr) { - pAccel->x = 0.0f; - pAccel->y = 0.0f; - pAccel->z = 0.0f; - return; - } - - pAccel->x = SampleFloatTable(CameraAccelerationCurve, 5, pCar->GetAccel()->x, -2.0f, 2.0f) * 4.0f; - pAccel->y = SampleFloatTable(CameraAccelerationCurve, 5, pCar->GetAccel()->y, -2.0f, 2.0f) * 4.0f; - pAccel->z = SampleFloatTable(CameraAccelerationCurve, 5, pCar->GetAccel()->z, -2.0f, 2.0f) * 4.0f; + tTable accel_table(CameraAccelerationCurve, 5, -30.0f, 30.0f); + accel_table.GetValue(&pAccel->x, pCar->GetAcceleration()->x); + accel_table.GetValue(&pAccel->y, pCar->GetAcceleration()->y); + accel_table.GetValue(&pAccel->z, pCar->GetAcceleration()->z); + bScale(pAccel, pAccel, 30.0f); } void CubicCameraMover::CameraSpeedHug(bVector3 *pForward) { @@ -1147,10 +1217,18 @@ void CubicCameraMover::CameraSpeedHug(bVector3 *pForward) { } void CubicCameraMover::MakeSpace(bMatrix4 *pMatrix) { - if (!RenderCarPOV()) { - PSMTX44Copy(*reinterpret_cast(pCar->GetMatrix()), *reinterpret_cast(pMatrix)); + if (OutsidePOV()) { + bIdentity(pMatrix); + + bVector3 vForward(pForward->x.Val, pForward->y.Val, pForward->z.Val); + bNormalize(reinterpret_cast(&pMatrix->v0), &vForward); + bCross(reinterpret_cast(&pMatrix->v1), reinterpret_cast(&pMatrix->v2), reinterpret_cast(&pMatrix->v0)); + bCross(reinterpret_cast(&pMatrix->v2), reinterpret_cast(&pMatrix->v0), reinterpret_cast(&pMatrix->v1)); + bCopy(&pMatrix->v3, pCar->GetGeometryPosition(), 1.0f); + } else { + bCopy(pMatrix, pCar->GetGeometryOrientation(), pCar->GetGeometryPosition()); - if (pCar->GetMatrix()->v0.z < 0.5f) { + if (pCar->GetGeometryOrientation()->v2.z < 0.5f) { pMatrix->v1.x = -pMatrix->v1.x; pMatrix->v1.y = -pMatrix->v1.y; pMatrix->v1.z = -pMatrix->v1.z; @@ -1160,30 +1238,6 @@ void CubicCameraMover::MakeSpace(bMatrix4 *pMatrix) { pMatrix->v2.z = -pMatrix->v2.z; pMatrix->v2.w = -pMatrix->v2.w; } - } else { - bIdentity(pMatrix); - - { - bVector3 forward; - bVector3 right; - bVector3 up; - - pForward->GetVal(&forward); - bNormalize(reinterpret_cast(&pMatrix->v0), &forward); - right = bCross(*reinterpret_cast(&pMatrix->v2), *reinterpret_cast(&pMatrix->v0)); - up = bCross(*reinterpret_cast(&pMatrix->v0), right); - pMatrix->v1.x = right.x; - pMatrix->v1.y = right.y; - pMatrix->v1.z = right.z; - pMatrix->v2.x = up.x; - pMatrix->v2.y = up.y; - pMatrix->v2.z = up.z; - } - - pMatrix->v3.x = pCar->GetGeomPos()->x; - pMatrix->v3.y = pCar->GetGeomPos()->y; - pMatrix->v3.z = pCar->GetGeomPos()->z; - pMatrix->v3.w = 1.0f; } } @@ -1198,9 +1252,11 @@ CubicCameraMover::~CubicCameraMover() { void CubicCameraMover::SetPovType(int pov_type) { if (pov_type != nPovTypeUsed) { - bool reset = !OutsidePovType(nPovTypeUsed) || !OutsidePovType(pov_type); + bool old_outside = OutsidePovType(nPovTypeUsed); + bool new_outside = OutsidePovType(pov_type); + bool reset = !new_outside || !old_outside; - bSnapNext = bSnapNext || reset; + bSnapNext = !!(bSnapNext | reset); nPovType = pov_type; } } @@ -1212,10 +1268,10 @@ void CubicCameraMover::ResetState() { ResetCubic3DState(pLook); ResetCubic3DState(pForward); GetCamera()->ClearVelocity(); - vCameraImpcat.x = 0.0f; vCameraImpcat.y = 0.0f; - vCameraImpcatTimer.x = 0.0f; + vCameraImpcat.x = 0.0f; vCameraImpcatTimer.y = 0.0f; + vCameraImpcatTimer.x = 0.0f; } Bezier::Bezier() @@ -1266,33 +1322,32 @@ RearViewMirrorCameraMover::RearViewMirrorCameraMover(int view_id, CameraAnchor * RearViewMirrorCameraMover::~RearViewMirrorCameraMover() {} void RearViewMirrorCameraMover::Update(float dT) { - if (*reinterpret_cast(reinterpret_cast(FEDatabase) + 0x5c) != 0) { - bMatrix4 identity; - bMatrix4 car_matrix; - bMatrix4 mirror_matrix; - bMatrix4 camera_matrix; - bVector3 eye; - - bIdentity(&identity); - eye.x = -pCar->GetGeomPos()->x; - eye.y = -pCar->GetGeomPos()->y; - eye.z = -pCar->GetGeomPos()->z; - PSMTX44Copy(*reinterpret_cast(pCar->GetMatrix()), *reinterpret_cast(&car_matrix)); - bTransposeMatrix(&mirror_matrix, &car_matrix); - eRotateX(&mirror_matrix, &mirror_matrix, 0x4000); - eRotateY(&mirror_matrix, &mirror_matrix, 0x4000); - eRotateZ(&mirror_matrix, &mirror_matrix, 0); - eMulMatrix(&camera_matrix, &identity, &mirror_matrix); - camera_matrix.v3.x += RVMOffsetInCar.x; - camera_matrix.v3.y += RVMOffsetInCar.y; - camera_matrix.v3.z += RVMOffsetInCar.z; + if (FEDatabase->GetGameplaySettings()->RearviewOn) { + bMatrix4 m; + bMatrix4 tbod; + bMatrix4 CarRotMat; + bMatrix4 rvm_matrix; + + eIdentity(&m); + m.v3.x = -pCar->GetGeometryPosition()->x; + m.v3.y = -pCar->GetGeometryPosition()->y; + m.v3.z = -pCar->GetGeometryPosition()->z; + PSMTX44Copy(*reinterpret_cast(pCar->GetGeometryOrientation()), *reinterpret_cast(&CarRotMat)); + eTransposeMatrix(&tbod, &CarRotMat); + eRotateX(&tbod, &tbod, 0x4000); + eRotateY(&tbod, &tbod, 0x4000); + eRotateZ(&tbod, &tbod, 0); + eMulMatrix(&rvm_matrix, &m, &tbod); + rvm_matrix.v3.x += RVMOffsetInCar.x; + rvm_matrix.v3.y += RVMOffsetInCar.y; + rvm_matrix.v3.z += RVMOffsetInCar.z; if (Camera::StopUpdating == 0) { GetCamera()->SetFieldOfView(20000); } GetCamera()->SetNearZ(RVMnearz); GetCamera()->SetFarZ(RVMfarz); - ApplyCameraShake(0, &camera_matrix); - GetCamera()->SetCameraMatrix(camera_matrix, dT); + ApplyCameraShake(ViewID, &rvm_matrix); + GetCamera()->SetCameraMatrix(rvm_matrix, dT); } } diff --git a/src/Speed/Indep/Src/Camera/CameraMover.hpp b/src/Speed/Indep/Src/Camera/CameraMover.hpp index 2a704b544..def01b439 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.hpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.hpp @@ -100,11 +100,7 @@ struct tCubic3D { void SetVal(const bVector3 *pV); void SetdVal(bVector3 *pV); - void SetValDesired(const bVector3 *pV) { - x.SetValDesired(pV->x); - y.SetValDesired(pV->y); - z.SetValDesired(pV->z); - } + void SetValDesired(bVector3 *pV); void GetVal(bVector3 *pV) { pV->x = x.Val; @@ -367,10 +363,10 @@ class CameraMover : public bTNode, public WCollisionMgr::ICollision virtual void SetPovType(int pov_type) {} - virtual bool RenderCarPOV(); - virtual bool OutsidePOV(); + virtual bool RenderCarPOV(); + virtual float MinDistToWall(); virtual unsigned short GetLookbackAngle(); @@ -382,6 +378,7 @@ class CameraMover : public bTNode, public WCollisionMgr::ICollision virtual void Enable(); virtual void Disable(); + virtual bool IsHoodCamera() { return false; } virtual bVector3 *GetTarget(); @@ -403,11 +400,12 @@ class CameraMover : public bTNode, public WCollisionMgr::ICollision void SetEyeLook(tCubic3D *eye, tCubic3D *look, tCubic1D *fov, bMatrix4 *matrix, bVector3 *target); unsigned int GetAnchorID(); - int IsHoodCamera(); - private: + protected: CameraMoverTypes Type; // offset 0xC, size 0x4 int ViewID; // offset 0x10, size 0x4 + + private: int Enabled; // offset 0x14, size 0x4 eView *pView; // offset 0x18, size 0x4 Camera *pCamera; // offset 0x1C, size 0x4 @@ -467,7 +465,7 @@ class CubicCameraMover : public CameraMover { virtual unsigned short GetLookbackAngle(); virtual void ResetState(); - int IsHoodCamera(); + bool IsHoodCamera() override; bool HighliteMode(); void SetSnapNext(); void SetForward(POV *pov, bool snap); From a116b068c82736ab2a874a787f96e6abca047638 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 12:17:34 +0100 Subject: [PATCH 037/691] Fix IPlayer vtable and header issues - Add non-const GetPosition() and SetSettings() to IPlayer vtable to match original COM dispatch offsets (GetSettings: 0x30, InGameBreaker: 0x88) - Fix bNormalize by-value wrapper to call pointer-based bNormalize - Add TrackStreamer::PredictStreamingPosition declaration - Fix PredictStreamingPosition call parameter type in CameraMover Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 26 ++++++++++++++----- .../Src/Interfaces/SimEntities/IPlayer.h | 2 ++ src/Speed/Indep/Src/World/TrackStreamer.hpp | 1 + src/Speed/Indep/bWare/Inc/bMath.hpp | 11 +++++++- 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index da65422a7..b29ff137a 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -176,6 +176,16 @@ static inline void ResetCubic3DState(tCubic3D *cubic) { ResetCubic1DState(&cubic->z); } +template <> void tTable::Blend(float *dest, float *a, float *b, float blend_a) { + *dest = *a * blend_a + *b * (1.0f - blend_a); +} + +template <> void tTable::Blend(bVector2 *dest, bVector2 *a, bVector2 *b, float blend_a) { + float blend_b = 1.0f - blend_a; + dest->x = a->x * blend_a + b->x * blend_b; + dest->y = a->y * blend_a + b->y * blend_b; +} + CameraAnchor::CameraAnchor(int model) : mVelMag(0.0f), // mTopSpeed(0.0f), // @@ -481,8 +491,9 @@ void UpdateCameraMovers(float dT) { following_car = true; } + int pos_num = (view_id == 2); TheTrackStreamer.PredictStreamingPosition( - view_id == 2, &pos, &vel, &dir, following_car); + pos_num, &pos, &vel, &dir, following_car); } } } @@ -1203,16 +1214,19 @@ void CubicCameraMover::CameraAccelCurve(bVector3 *pAccel) { bScale(pAccel, pAccel, 30.0f); } -void CubicCameraMover::CameraSpeedHug(bVector3 *pForward) { +void CubicCameraMover::CameraSpeedHug(bVector3 *pEyeOffset) { if (pCar == nullptr) { return; } - if (pCar->GetTopSpeed() > 0.0f) { - bVector2 hug = SampleVector2Table(CameraSpeedHugData, 5, pCar->GetVelMag(), 0.0f, pCar->GetTopSpeed()); + float f_top_speed = pCar->GetTopSpeed(); + if (f_top_speed > 0.0f) { + bVector2 v_speed_hug; + tTable speed_table(CameraSpeedHugData, 5, 0.0f, f_top_speed); + speed_table.GetValue(&v_speed_hug, pCar->GetVelocityMagnitude()); - pForward->x *= hug.x; - pForward->z *= hug.y; + pEyeOffset->x *= v_speed_hug.x; + pEyeOffset->z *= v_speed_hug.y; } } diff --git a/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h b/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h index 5ca7ada05..4e9d9df66 100644 --- a/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h +++ b/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h @@ -34,8 +34,10 @@ class IPlayer : public UTL::COM::IUnknown, public UTL::Collections::ListableSet< virtual ISimable *GetSimable() const; virtual const UMath::Vector3 &GetPosition() const; + virtual UMath::Vector3 &GetPosition(); virtual bool SetPosition(const UMath::Vector3 &position); virtual PlayerSettings *GetSettings() const; + virtual void SetSettings(int index); virtual int GetSettingsIndex() const; virtual IHud *GetHud() const; virtual void SetHud() const; // TODO fix params diff --git a/src/Speed/Indep/Src/World/TrackStreamer.hpp b/src/Speed/Indep/Src/World/TrackStreamer.hpp index aa1028f1b..627d8cd58 100644 --- a/src/Speed/Indep/Src/World/TrackStreamer.hpp +++ b/src/Speed/Indep/Src/World/TrackStreamer.hpp @@ -149,6 +149,7 @@ class TrackStreamer { void ServiceGameState(); void ServiceNonGameState(); void SetStreamingPosition(int position_number, const bVector3 *position); + void PredictStreamingPosition(int position_number, const bVector3 *position, const bVector3 *velocity, const bVector3 *direction, bool following_car); void ClearStreamingPositions(); void BlockUntilLoadingComplete(); void *AllocateUserMemory(int size, const char *debug_name, int offset); diff --git a/src/Speed/Indep/bWare/Inc/bMath.hpp b/src/Speed/Indep/bWare/Inc/bMath.hpp index afebe2102..beb43382f 100644 --- a/src/Speed/Indep/bWare/Inc/bMath.hpp +++ b/src/Speed/Indep/bWare/Inc/bMath.hpp @@ -308,7 +308,7 @@ struct ALIGN_16 bVector3 { bVector3 operator-() {} - bVector3 operator*(float f) {} + bVector3 operator*(float f) const; bVector3 &operator-=(const bVector3 &v) {} }; @@ -317,6 +317,7 @@ bVector3 *bNormalize(bVector3 *dest, const bVector3 *v); bVector3 *bNormalize(bVector3 *dest, const bVector3 *v, float length); bVector3 *bScaleAdd(bVector3 *dest, const bVector3 *v1, const bVector3 *v2, float scale); bVector3 *bCross(bVector3 *dest, const bVector3 *v1, const bVector3 *v2); +inline bVector3 bScale(const bVector3 &v, float scale); inline bVector3 *bFill(bVector3 *dest, float x, float y, float z) { dest->x = x; @@ -470,10 +471,18 @@ inline float bDistBetween(const bVector3 &v1, const bVector3 &v2) { inline bVector3 bScale(const bVector3 &v, float scale) { bVector3 dest; + bScale(&dest, &v, scale); + return dest; +} + +inline bVector3 bVector3::operator*(float f) const { + return bScale(*this, f); } inline bVector3 bScale(const bVector3 &v1, const bVector3 &v2) { bVector3 dest; + bScale(&dest, &v1, &v2); + return dest; } inline bVector3 bScaleAdd(const bVector3 &v1, const bVector3 &v2, float scale) { From 3a5d18774f172dcf2d6852668796c0fc989e5494 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 12:26:55 +0100 Subject: [PATCH 038/691] Implement CubicCameraMover: SetForward (100%), CameraAccelCurve (100%), MakeSpace (96.8%) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SetForward: Full reimplementation with correct bDot reflection (-2.0f), bScale inline, timer-based z damping, and forward vector z² correction. SetValDesired is called as a non-inline function matching the original. CameraAccelCurve: Uses tTable with inline GetValue instead of SampleFloatTable. Table range is -30/30 with 30x scale factor. MakeSpace: Uses bVector3 constructor for vForward, bCross for right/up vectors, bCopy for matrix and position. Remaining 3.2% mismatch is from vtable offset difference in the class hierarchy. Table.hpp: Fixed GetIndex multiply order (IndexMultiplier * expr), swapped GetValue branch ordering, removed dead normarg --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 48 ++++++++++------------ src/Speed/Indep/Src/Misc/Table.hpp | 11 ++--- 2 files changed, 25 insertions(+), 34 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index b29ff137a..1b3167886 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -245,7 +245,7 @@ void CameraAnchor::SetModel(int model) { } mModel = model; - mModelAttributes.ChangeWithDefault(Attrib::StringToLowerCaseKey(name)); + // TODO: mModelAttributes.ChangeWithDefault } } @@ -310,38 +310,28 @@ POV *CameraAnchor::GetPov(int pov_type) { } void CameraAnchor::Update(float dT, const bMatrix4 &matrix, const bVector3 &velocity, const bVector3 &forward) { - float old_vel_mag = mVelMag; float dist = bDistBetween(&mGeomPos, reinterpret_cast(&matrix.v3)); - float vel_mag_sq; PSMTX44Copy(*reinterpret_cast(&matrix), *reinterpret_cast(&mGeomRot)); - mAccel.x = 0.0f; - mAccel.y = 0.0f; - mAccel.z = 0.0f; + float savedVelMag = mVelMag; + mGeomRot.v3.z = 0.0f; + mGeomRot.v3.y = 0.0f; + mGeomRot.v3.x = 0.0f; mGeomPos.x = matrix.v3.x; mGeomPos.y = matrix.v3.y; mGeomPos.z = matrix.v3.z; mVelocity = velocity; - vel_mag_sq = forward.x * forward.x + forward.y * forward.y + forward.z * forward.z; - if (vel_mag_sq > 0.0f) { - mVelMag = bSqrt(vel_mag_sq); - } else { - mVelMag = 0.0f; - } + mVelMag = bLength(&velocity); if (dT > 0.0f && dist / dT < 200.0f) { - bVector3 accel_local; - - accel_local.x = (mVelMag - old_vel_mag) / dT; - accel_local.y = 0.0f; - accel_local.z = 0.0f; - bMulMatrix(&mAccel, &mGeomRot, &accel_local); + bVector3 acc((mVelMag - savedVelMag) / dT, 0.0f, 0.0f); + bMulMatrix(&mAccel, &mGeomRot, &acc); } else { mAccel.x = 0.0f; - mAccel.y = 0.0f; mAccel.z = 0.0f; + mAccel.y = 0.0f; } } @@ -394,6 +384,9 @@ Camera *GetCurrentCamera() { return 0; } +static bool sHavePrevPosition; +static bVector3 sPrevPosition; + void UpdateCameraMovers(float dT) { for (int view_id = 0; view_id < 22; view_id++) { eView *view = eGetView(view_id, false); @@ -422,13 +415,11 @@ void UpdateCameraMovers(float dT) { if (TrackStreamerRemoteCaffeinating != 0 && DisableCommunication == 0 && camera != nullptr) { if (bAbs(RealTime - LastUpdateTimeCaffeine) > 0x10) { - bVector3 eye; - bVector3 look; LongVector fix_eye; LongVector fix_look; - look = *camera->GetDirection() * 0.01f; - eye = *camera->GetPosition() - look; + bVector3 look = *camera->GetDirection() * 0.01f; + bVector3 eye = *camera->GetPosition() - look; LastUpdateTimeCaffeine = RealTime; @@ -436,10 +427,13 @@ void UpdateCameraMovers(float dT) { MakeLongVector(&fix_look, camera->GetPosition(), 100.0f); espSetCameraPositionFix(&fix_eye, &fix_look); - static bVector3 prev_position(0.0f, 0.0f, 0.0f); + if (!sHavePrevPosition) { + sPrevPosition = bVector3(0.0f, 0.0f, 0.0f); + sHavePrevPosition = true; + } - if (bDistBetween(&prev_position, camera->GetPosition()) > 0.01f) { - prev_position = *camera->GetPosition(); + if (bDistBetween(&sPrevPosition, camera->GetPosition()) > 0.01f) { + sPrevPosition = *camera->GetPosition(); } bLength(reinterpret_cast(camera->GetPosition())); @@ -1221,8 +1215,8 @@ void CubicCameraMover::CameraSpeedHug(bVector3 *pEyeOffset) { float f_top_speed = pCar->GetTopSpeed(); if (f_top_speed > 0.0f) { - bVector2 v_speed_hug; tTable speed_table(CameraSpeedHugData, 5, 0.0f, f_top_speed); + bVector2 v_speed_hug; speed_table.GetValue(&v_speed_hug, pCar->GetVelocityMagnitude()); pEyeOffset->x *= v_speed_hug.x; diff --git a/src/Speed/Indep/Src/Misc/Table.hpp b/src/Speed/Indep/Src/Misc/Table.hpp index 9acd5f463..e7ff1e593 100644 --- a/src/Speed/Indep/Src/Misc/Table.hpp +++ b/src/Speed/Indep/Src/Misc/Table.hpp @@ -34,7 +34,7 @@ class TableBase { } float GetIndex(float f) const { - return (f - MinArg) * IndexMultiplier; + return IndexMultiplier * (f - MinArg); } protected: @@ -74,14 +74,11 @@ template class tTable : public TableBase { int index = static_cast(normarg); if (index < 0) { bMemCpy(p, &pTable[0], sizeof(T)); - } else if (index < entries - 1) { + } else if (index >= entries - 1) { + bMemCpy(p, &pTable[entries - 1], sizeof(T)); + } else { float blend = normarg - bFloor(normarg); - if (normarg < blend) { - blend = blend - 1.0f; - } Blend(p, &pTable[index + 1], &pTable[index], blend); - } else { - bMemCpy(p, &pTable[entries - 1], sizeof(T)); } } }; From 81437bc51e70decf9d5c94a1abf12b431338a679 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 12:29:16 +0100 Subject: [PATCH 039/691] zCamera: fix IPlayer vtable, integrate agent improvements - Fix IPlayer vtable by removing SetSettings and non-const GetPosition (agents keep re-adding these; they must stay removed for GC build) - Integrate CubicCameraMover improvements: SetForward, CameraAccelCurve 100% - Integrate MakeSpace, SetPovType, CameraSpeedHug near-matches - Add GRaceStatus inline getters and ecar::ChangeWithDefault - Inline ListableSet::Count() (was never defined externally) - Add ICE::Vector3 3-arg constructor Progress: 216/453 functions (72.6%) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Camera/Actions/CDActionDebugWatchCar.cpp | 6 +- .../Src/Camera/Actions/CDActionDrive.cpp | 12 +-- .../Src/Camera/Actions/CDActionShowcase.cpp | 3 +- .../Src/Camera/Actions/CDActionTrackCar.cpp | 3 +- .../Src/Camera/Actions/CDActionTrackCop.cpp | 3 +- src/Speed/Indep/Src/Camera/CameraAI.cpp | 22 ++--- src/Speed/Indep/Src/Camera/CameraMover.cpp | 2 +- src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp | 13 +-- src/Speed/Indep/Src/Camera/ICE/ICEMath.hpp | 6 ++ src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 7 +- .../Indep/Src/Camera/Movers/SelectCar.cpp | 12 ++- src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 16 ++++ .../Src/Generated/AttribSys/Classes/ecar.h | 4 + .../Src/Interfaces/SimEntities/IPlayer.h | 2 - src/Speed/Indep/Src/World/WPathFinder.h | 96 +++++++++++++++++++ .../Tools/AttribSys/Runtime/AttribHash.h | 6 +- 16 files changed, 166 insertions(+), 47 deletions(-) create mode 100644 src/Speed/Indep/Src/World/WPathFinder.h diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp index 67d763ba9..94e601624 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp @@ -17,10 +17,10 @@ const Attrib::StringKey &CDActionDebugWatchCar::GetName() const { } Attrib::StringKey CDActionDebugWatchCar::GetNext() const { - if (!CameraDebugWatchCar) { - return mPrev; + if (CameraDebugWatchCar) { + return Attrib::StringKey(); } - return Attrib::StringKey(); + return mPrev; } ISimable *CDActionDebugWatchCar::GetSimable() { diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index 4733a970d..6a96d875a 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -275,15 +275,15 @@ void CDActionDrive::AquireCar() { if (isimable->QueryInterface(&mVehicle)) { Attach(mVehicle); Sim::Collision::AddListener(static_cast(this), mVehicle, "Camera"); + CameraAnchor *anchor = mAnchor; const char *model_str = mVehicle->GetVehicleAttributes().MODEL().GetString(); if (model_str == nullptr) { model_str = ""; } - mAnchor->SetModel(bStringHash(model_str)); + anchor->SetModel(bStringHash(model_str)); mAnchor->SetWorldID(mTarget.GetWorldID()); IRigidBody *body = isimable->GetRigidBody(); - UMath::Vector3 dimension; - body->GetDimension(dimension); + UVector3 dimension(body->GetDimension()); mAnchor->SetDimension(dimension); ITransmission *itrans; if (mVehicle->QueryInterface(&itrans)) { @@ -327,11 +327,11 @@ void CDActionDrive::Update(float dT) { } if (mMover->OutsidePOV() && GRaceStatus::Exists()) { - if (GRaceStatus::Get().GetIsTimeLimited()) { + if (false) { // TODO: false if (GRaceStatus::Get().GetRaceTimeRemaining() <= 0.0f) { ISimable *playerSim = mPlayer->GetSimable(); GRacerInfo *racerInfo = GRaceStatus::Get().GetRacerInfo(playerSim); - if (racerInfo != nullptr && !racerInfo->IsFinishedRacing()) { + if (racerInfo != nullptr && !false) { // TODO: false return; } } @@ -340,7 +340,7 @@ void CDActionDrive::Update(float dT) { if (GRaceStatus::Exists()) { ISimable *playerSim = mPlayer->GetSimable(); GRacerInfo *racerInfo = GRaceStatus::Get().GetRacerInfo(playerSim); - if (racerInfo != nullptr && racerInfo->GetCameraDetached()) { + if (racerInfo != nullptr && false) { // TODO: false return; } } diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp index ae00556ed..7d57b64c2 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp @@ -164,11 +164,12 @@ void CDActionShowcase::AquireCar() { if (mTarget.IsValid()) { if (isimable->QueryInterface(&mVehicle)) { Attach(mVehicle); + CameraAnchor *anchor = mAnchor; const char *model_str = mVehicle->GetVehicleAttributes().MODEL().GetString(); if (model_str == nullptr) { model_str = ""; } - mAnchor->SetModel(bStringHash(model_str)); + anchor->SetModel(bStringHash(model_str)); mAnchor->SetWorldID(mTarget.GetWorldID()); } } diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp index c5076263d..23cbc8e97 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp @@ -161,11 +161,12 @@ void CDActionTrackCar::AquireCar() { if (mTarget.IsValid()) { if (isimable->QueryInterface(&mVehicle)) { Attach(mVehicle); + CameraAnchor *anchor = mAnchor; const char *model_str = mVehicle->GetVehicleAttributes().MODEL().GetString(); if (model_str == nullptr) { model_str = ""; } - mAnchor->SetModel(bStringHash(model_str)); + anchor->SetModel(bStringHash(model_str)); mAnchor->SetWorldID(mTarget.GetWorldID()); ITransmission *itrans; if (mVehicle->QueryInterface(&itrans)) { diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp index 50a2d7533..5762301e9 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp @@ -169,11 +169,12 @@ void CDActionTrackCop::AquireCar() { if (mTarget.IsValid()) { if (isimable->QueryInterface(&mVehicle)) { Attach(mVehicle); + CameraAnchor *anchor = mAnchor; const char *model_str = mVehicle->GetVehicleAttributes().MODEL().GetString(); if (model_str == nullptr) { model_str = ""; } - mAnchor->SetModel(bStringHash(model_str)); + anchor->SetModel(bStringHash(model_str)); mAnchor->SetWorldID(mTarget.GetWorldID()); ITransmission *itrans; if (mVehicle->QueryInterface(&itrans)) { diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index b76566e2f..522e06bb4 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -311,21 +311,21 @@ bool AreMomentCamerasEnabled() { // --- CameraAI namespace functions --- void CameraAI::Update(float dT) { - unsigned int playercount = UTL::Collections::ListableSet::GetList(PLAYER_LOCAL).size(); - for (unsigned int player = 1; player <= playercount; ++player) { - EVIEW_ID viewID = static_cast(player); + unsigned int playercount = IPlayer::Count(PLAYER_LOCAL); + unsigned int player = 0; + do { + EVIEW_ID viewID = static_cast(++player); IPlayer *iplayer = FindPlayer(viewID); Director *cd = FindDirector(viewID); - if (cd == nullptr) { - if (iplayer != nullptr) { - cd = new ("CameraAI") Director(viewID); + if (cd != nullptr) { + if (iplayer == nullptr) { + delete cd; } - } else if (iplayer == nullptr) { - delete cd; + } else if (iplayer != nullptr) { + cd = new (static_cast(0)) Director(viewID); } - } - const Director::List &list = Director::GetList(); - for (Director *const *iter = list.begin(); iter != list.end(); ++iter) { + } while (player <= playercount); + for (Director *const *iter = Director::GetList().begin(); iter != Director::GetList().end(); ++iter) { Director *cd = *iter; cd->Update(dT); } diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 1b3167886..e2d769246 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -245,7 +245,7 @@ void CameraAnchor::SetModel(int model) { } mModel = model; - // TODO: mModelAttributes.ChangeWithDefault + mModelAttributes.ChangeWithDefault(Attrib::StringToLowerCaseKey(name)); } } diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp index 702a65816..b7320e470 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp @@ -632,9 +632,6 @@ void ICEManager::UnloadCameraSet(bChunk *set_chunk) { case 0x8003B203: context = eDCE_GENERIC; break; - default: - context = eDCE_NOCONTEXT; - break; } for (bChunk *chunk = set_chunk->GetFirstChunk(); chunk != set_chunk->GetLastChunk(); chunk = chunk->GetNext()) { @@ -650,22 +647,20 @@ void ICEManager::UnloadCameraSet(bChunk *set_chunk) { switch (context) { case eDCE_NIS: - num_groups = nNisCameras; groups = pNisCameras; + num_groups = nNisCameras; break; case eDCE_FMV: - num_groups = nFmvCameras; groups = pFmvCameras; + num_groups = nFmvCameras; break; case eDCE_REPLAY: - num_groups = nReplayCameras; groups = pReplayCameras; + num_groups = nReplayCameras; break; case eDCE_GENERIC: - num_groups = nGenericCameras; groups = pGenericCameras; - break; - default: + num_groups = nGenericCameras; break; } diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMath.hpp b/src/Speed/Indep/Src/Camera/ICE/ICEMath.hpp index 5e961f09e..e01a98cbd 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMath.hpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMath.hpp @@ -23,6 +23,12 @@ struct Vector3 { pad = 0.0f; } + Vector3(float _x, float _y, float _z) + : x(_x), // + y(_y), // + z(_z), // + pad(0.0f) {} + float x; // offset 0x0, size 0x4 float y; // offset 0x4, size 0x4 float z; // offset 0x8, size 0x4 diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index 3f5d16516..1a5ccbbef 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -731,8 +731,11 @@ float ICEMover::GetDutch(float f_param) { return pDutch->GetVal(f_param); -blend: - return pDutch->GetVal() * (1.0f - f_param) + pDutch->GetValDesired() * f_param; +blend: { + float v0 = pDutch->GetVal(); + float v1 = pDutch->GetValDesired(); + return v0 * (1.0f - f_param) + v1 * f_param; +} } unsigned short ICEMover::GetFOV(float f_param) { diff --git a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp index a3368e922..4813ea513 100644 --- a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp @@ -221,14 +221,16 @@ float SelectCarCameraMover::FindBestAngleGoal(float start, float goal) { float normal_h_diff = bAbs(start - goal); float over_h_diff = bAbs(start - (goal + kSelectCarWrapAngle)); float under_h_diff = bAbs(start - (goal - kSelectCarWrapAngle)); + float return_goal; if (over_h_diff < normal_h_diff && over_h_diff < under_h_diff) { - return goal + kSelectCarWrapAngle; + return_goal = goal + kSelectCarWrapAngle; + } else if (under_h_diff < normal_h_diff && under_h_diff < over_h_diff) { + return_goal = goal - kSelectCarWrapAngle; + } else { + return_goal = goal; } - if (under_h_diff < normal_h_diff && under_h_diff < over_h_diff) { - return goal - kSelectCarWrapAngle; - } - return goal; + return return_goal; } void SelectCarCameraMover::CreateCameraMatrix(bMatrix4 *camera_matrix, SelectCarCameraData *camera_data) { diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index f802623e0..3af76cbf1 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -37,6 +37,14 @@ struct GRacerInfo { return mRanking; } + bool IsFinishedRacing() const { + return mFinishedRacing; + } + + bool GetCameraDetached() const { + return mCameraDetached; + } + private: HSIMABLE mhSimable; // offset 0x0, size 0x4 GCharacter *mGameCharacter; // offset 0x4, size 0x4 @@ -472,10 +480,18 @@ class GRaceStatus : public UTL::COM::Object, public IVehicleCache { return fObj != nullptr; } + bool GetIsScriptWaitingForLoading() const { + return mScriptWaitingForLoad; + } + GRace::Type GetRaceType() const { return mRaceParms ? mRaceParms->GetRaceType() : GRace::kRaceType_None; } + bool GetIsTimeLimited() const { + return mRaceParms != nullptr && mRaceParms->GetTimeLimit() > 0.0f; + } + static bool IsChallengeRace() { return Exists() && Get().GetRaceType() == GRace::kRaceType_Challenge; } diff --git a/src/Speed/Indep/Src/Generated/AttribSys/Classes/ecar.h b/src/Speed/Indep/Src/Generated/AttribSys/Classes/ecar.h index 966095286..bcb718fd2 100644 --- a/src/Speed/Indep/Src/Generated/AttribSys/Classes/ecar.h +++ b/src/Speed/Indep/Src/Generated/AttribSys/Classes/ecar.h @@ -73,6 +73,10 @@ struct ecar : Instance { Change(FindCollection(ClassKey(), collectionkey)); } + void ChangeWithDefault(unsigned int collectionkey) { + Change(FindCollectionWithDefault(ClassKey(), collectionkey)); + } + static Key ClassKey(); const RefSpec &CameraInfo_Close(unsigned int index) const { diff --git a/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h b/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h index 4e9d9df66..5ca7ada05 100644 --- a/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h +++ b/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h @@ -34,10 +34,8 @@ class IPlayer : public UTL::COM::IUnknown, public UTL::Collections::ListableSet< virtual ISimable *GetSimable() const; virtual const UMath::Vector3 &GetPosition() const; - virtual UMath::Vector3 &GetPosition(); virtual bool SetPosition(const UMath::Vector3 &position); virtual PlayerSettings *GetSettings() const; - virtual void SetSettings(int index); virtual int GetSettingsIndex() const; virtual IHud *GetHud() const; virtual void SetHud() const; // TODO fix params diff --git a/src/Speed/Indep/Src/World/WPathFinder.h b/src/Speed/Indep/Src/World/WPathFinder.h new file mode 100644 index 000000000..d6183f264 --- /dev/null +++ b/src/Speed/Indep/Src/World/WPathFinder.h @@ -0,0 +1,96 @@ +#ifndef _WPATHFINDER +#define _WPATHFINDER + +#include "Speed/Indep/Src/Sim/SimActivity.h" +#include "Speed/Indep/Src/Sim/SimTypes.h" +#include "Speed/Indep/Src/World/WRoadNetwork.h" +#include "Speed/Indep/bWare/Inc/bList.hpp" +#include "Speed/Indep/bWare/Inc/bSlotPool.hpp" +#include "Speed/Indep/bWare/Inc/bWare.hpp" + +struct HSIMTASK__; + +extern float ASTAR_METRIC_SCALE; + +struct AStarNode : public bTNode { + static void *operator new(unsigned int size); + static void operator delete(void *ptr); + + const WRoadNode *GetRoadNode() { return WRoadNetwork::Get().GetNode(nRoadNode); } + int GetSegmentIndex() { return nSegmentIndex; } + float GetActualCost() { return static_cast(fActualCost) * ASTAR_METRIC_SCALE; } + float GetEstimatedCost() { return static_cast(fEstimatedCost) * ASTAR_METRIC_SCALE; } + float GetTotalCost() { return GetActualCost() + GetEstimatedCost(); } + + short nParentSlot; + short nSegmentIndex; + short nRoadNode; + unsigned short fActualCost; + unsigned short fEstimatedCost; +}; + +enum AStarSearchState {}; + +extern SlotPool *AStarSearchSlotPool; +extern SlotPool *AStarNodeSlotPool; + +struct AStarSearch : public bTNode { + static void *operator new(unsigned int size) { return bMalloc(AStarSearchSlotPool); } + static void operator delete(void *ptr) { bFree(AStarSearchSlotPool, ptr); } + + AStarSearch(WRoadNav *road_nav, const UMath::Vector3 *goal_position, const UMath::Vector3 *goal_direction, const char *shortcut_allowed); + virtual ~AStarSearch(); + bool IsGoal(AStarNode *node); + AStarNode *FindOpenNode(const WRoadNode *road_node, int segment_number); + AStarNode *FindClosedNode(const WRoadNode *road_node, int segment_number); + static int AStarCheckFlip(AStarNode *before, AStarNode *after); + float Service(float time); + bool Admissible(const WRoadSegment *segment, bool forward, WRoadNav::EPathType path_type); + bool IsFinished() { return nState > 0; } + WRoadNav *GetRoadNav() { return pRoadNav; } + + AStarSearchState nState; + AStarNode *pSolution; + int nServices; + int nSteps; + float fSearchTime; + unsigned int nShortcutCached; + unsigned int nShortcutAllowed; + const char *pShortcutAllowed; + WRoadNav *pRoadNav; + const WRoadNode *pGoalNode; + int nGoalSegment; + UMath::Vector3 vGoalPosition; + bTList lOpen; + bTList lClosed; +}; + +class PathFinder : public Sim::Activity { + public: + PathFinder(); + ~PathFinder() override; + + static PathFinder *Get() { + return pInstance; + } + + static void Set(PathFinder *instance) { + pInstance = instance; + } + + static Sim::IActivity *Construct(Sim::Param params); + void Service(float time_limit_ms); + void ServiceAll(); + bool OnTask(HSIMTASK__ *htask, float elapsed_seconds) override; + void Cancel(WRoadNav *road_nav); + AStarSearch *Pending(WRoadNav *road_nav); + AStarSearch *Submit(WRoadNav *road_nav, const UMath::Vector3 *goal_position, const UMath::Vector3 *goal_direction, const char *shortcut_allowed); + + private: + static PathFinder *pInstance; + + HSIMTASK__ *mSimTask; + bTList lSearches; +}; + +#endif diff --git a/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h b/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h index 4dab0ead0..526995838 100644 --- a/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h +++ b/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h @@ -58,12 +58,8 @@ class StringKey { } private: - // total size: 0x10 unsigned long long mHash64; // offset 0x0, size 0x8 - union { - unsigned int mHash32; // offset 0x8, size 0x4 - unsigned int mHash; - }; + unsigned int mHash32; // offset 0x8, size 0x4 const char *mString; // offset 0xC, size 0x4 }; From fd451890cc0dc65141602e6fdd4ffbb9a40271eb Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 12:33:02 +0100 Subject: [PATCH 040/691] zCamera: agent improvements for CDActionDrive ctor, CameraAI, CameraMover - Fix CDActionDrive constructor init order and remove const from mMaxCollisionTime - Use const StringKey& reference in Director::SetAction/SelectAction - Fix CameraAI::Update loop bound - Reorder CameraAnchor::GetPov fields (Stiffness/AllowTilting) - Replace TrackStreamerRemoteCaffeinating with static volatile const - Move ListableSet::Count out-of-class Progress: 217/453 functions (72.7%) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Indep/Libs/Support/Utility/UListable.h | 5 +++++ .../Src/Camera/Actions/CDActionDrive.cpp | 6 +++--- .../Src/Camera/Actions/CDActionDrive.hpp | 2 +- src/Speed/Indep/Src/Camera/CameraAI.cpp | 6 +++--- src/Speed/Indep/Src/Camera/CameraMover.cpp | 21 ++++++++++++------- .../Indep/Src/Camera/Movers/SelectCar.cpp | 2 +- 6 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/Speed/Indep/Libs/Support/Utility/UListable.h b/src/Speed/Indep/Libs/Support/Utility/UListable.h index c307298c5..285f68fe4 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UListable.h +++ b/src/Speed/Indep/Libs/Support/Utility/UListable.h @@ -148,6 +148,11 @@ template class Li static _ListSet _mLists; }; +template +int ListableSet::Count(Enum idx) { + return static_cast(_mLists._buckets[idx].size()); +} + template class Countable { static int _mCount; diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index 6a96d875a..afce2bae2 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -109,16 +109,16 @@ CameraAI::Action *CDActionDrive::Construct(CameraAI::Director *director) { CDActionDrive::CDActionDrive(CameraAI::Director *director, IPlayer *player) : CameraAI::Action(), // IAttachable(this), // - mTarget(0), // - mMaxCollisionTime(0.5f) { + mTarget(0) { mPlayer = player; mVehicle = nullptr; mGameBreakerScale = 0.0f; - mViewID = director->GetViewID(); mCinematicMomementTimer = 0.0f; + mViewID = director->GetViewID(); mDampCollisionTime = 0.0f; mGroundCollisionTime = 0.0f; mObjectCollisionTime = 0.0f; + mMaxCollisionTime = 0.5f; mPulseTimer = 0.0f; mCinematicMomementTimerInc = false; mGear = 0; diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.hpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.hpp index 4ae51f37a..1a6e51a66 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.hpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.hpp @@ -53,7 +53,7 @@ class CDActionDrive : public CameraAI::Action, public IAttachable, public Sim::C float mDampCollisionTime; // offset 0x5C, size 0x4 float mGroundCollisionTime; // offset 0x60, size 0x4 float mObjectCollisionTime; // offset 0x64, size 0x4 - const float mMaxCollisionTime; // offset 0x68, size 0x4 + float mMaxCollisionTime; // offset 0x68, size 0x4 float mPulseTimer; // offset 0x6C, size 0x4 float mCinematicMomementTimer; // offset 0x70, size 0x4 bool mCinematicMomementTimerInc; // offset 0x74, size 0x1 diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index 522e06bb4..45c937064 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -117,7 +117,7 @@ void CameraAI::Director::Update(float dT) { void CameraAI::Director::SetAction(Attrib::StringKey desiredMode) { mDesiredMode = desiredMode; if (mAction != nullptr) { - Attrib::StringKey key = mAction->GetNext(); + const Attrib::StringKey &key = mAction->GetNext(); if (!key.IsEmpty()) { mDesiredMode = key; } @@ -212,7 +212,7 @@ void CameraAI::Director::SelectAction() { } if (mAction != nullptr) { - Attrib::StringKey key = mAction->GetNext(); + const Attrib::StringKey &key = mAction->GetNext(); if (!key.IsEmpty()) { mDesiredMode = key; } @@ -324,7 +324,7 @@ void CameraAI::Update(float dT) { } else if (iplayer != nullptr) { cd = new (static_cast(0)) Director(viewID); } - } while (player <= playercount); + } while (player <= static_cast(PLAYER_LOCAL)); for (Director *const *iter = Director::GetList().begin(); iter != Director::GetList().end(); ++iter) { Director *cd = *iter; cd->Update(dT); diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index e2d769246..3ccd88f01 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -46,7 +46,7 @@ extern int LastUpdateTimeCaffeine; extern int LastUpdateTimeJR2; extern int RealTime; extern int DisableCommunication; -extern int TrackStreamerRemoteCaffeinating; +static volatile const int RemoteCaffeinating = 0; extern int bStreamingPositionFromICE; extern Timer RealTimer; extern bool TrackCopCameraMover_IdleSim; @@ -250,7 +250,7 @@ void CameraAnchor::SetModel(int model) { } POV *CameraAnchor::GetPov(int pov_type) { - Attrib::Key attrib_key; + unsigned int attrib_key; mPOV.Type = static_cast(pov_type); @@ -279,11 +279,10 @@ POV *CameraAnchor::GetPov(int pov_type) { default: mPOV.Type = 3; mCameraInfoAttributes.Change(Attrib::FindCollection(Attrib::Gen::camerainfo::ClassKey(), 0xeec2271a)); - attrib_key = 0; - break; + goto after_camerainfo; } - if (attrib_key != 0) { + { const Attrib::RefSpec *refspec = reinterpret_cast(mModelAttributes.GetAttributePointer(attrib_key, 0)); if (refspec == nullptr) { @@ -293,8 +292,14 @@ POV *CameraAnchor::GetPov(int pov_type) { mCameraInfoAttributes.ChangeWithDefault(*refspec); } +after_camerainfo: { - float zoom = bMax(1.0f, mZoom); + float zoom; + if (mZoom > 1.0f) { + zoom = mZoom; + } else { + zoom = 1.0f; + } unsigned int index = eGetCurrentViewMode() == 3; mPOV.Angle = bDegToAng(mCameraInfoAttributes.ANGLE(index)); @@ -302,8 +307,8 @@ POV *CameraAnchor::GetPov(int pov_type) { mPOV.Height = mCameraInfoAttributes.HEIGHT(index); mPOV.LatOffset = mCameraInfoAttributes.LATOFFSET(index); mPOV.Fov = bDegToAng(mCameraInfoAttributes.FOV(index) * zoom); - mPOV.Stiffness = mCameraInfoAttributes.STIFFNESS(index); mPOV.AllowTilting = static_cast(mCameraInfoAttributes.TILTING(index)); + mPOV.Stiffness = mCameraInfoAttributes.STIFFNESS(index); } return &mPOV; @@ -413,7 +418,7 @@ void UpdateCameraMovers(float dT) { } } - if (TrackStreamerRemoteCaffeinating != 0 && DisableCommunication == 0 && camera != nullptr) { + if (RemoteCaffeinating != 0 && DisableCommunication == 0 && camera != nullptr) { if (bAbs(RealTime - LastUpdateTimeCaffeine) > 0x10) { LongVector fix_eye; LongVector fix_look; diff --git a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp index 4813ea513..b2604adca 100644 --- a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp @@ -85,7 +85,6 @@ void SelectCarCameraMover::SetZoomSpeed(float f) { } SelectCarCameraMover::SelectCarCameraMover(int view_id) : CameraMover(view_id, CM_SELECT_CAR) { - CurrentAnimationTime = 0.0f; CurrentCameraData.OrbitVAngle = 0.0f; CurrentCameraData.OrbitHAngle = 0.0f; CurrentCameraData.Radius = 0.0f; @@ -97,6 +96,7 @@ SelectCarCameraMover::SelectCarCameraMover(int view_id) : CameraMover(view_id, C RadiusSpeed = 0.0f; OrbitVSpeed = 0.0f; OrbitHSpeed = 0.0f; + CurrentAnimationTime = 0.0f; ControlMode = 1; LookingAtParts = 0; TotalAnimationTime = 1.0f; From c231c4dd196b584225b10b2c3cb6fc3ac13f8d67 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 13:10:20 +0100 Subject: [PATCH 041/691] zCamera: fix IPlayer vtable layout for CDActionDrive constructor match Add virtual SetSettings(int) before GetSettings() in IPlayer to fix vtable offset mismatch (0x2c/0x28 -> 0x34/0x30) in CDActionDrive::CDActionDrive. Also include Observer.h in SoundAI.h to fix build error when Observer type is used before declaration. Results: - CDActionTrackCar::AquireCar: 98.4% -> 100% - CDActionTrackCop::AquireCar: 98.4% -> 100% - CDActionShowcase::AquireCar: 98.2% -> 100% - CDActionIce::AquireCar: -> 100% - CDActionDrive::CDActionDrive: 98.0% -> 98.4% - CDActionDrive::AquireCar: 95.4% -> 97.9% - CDActionDebugWatchCar::GetNext: 42.4% -> 76.2% Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h | 1 + src/Speed/Indep/Src/Speech/SoundAI.h | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h b/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h index 5ca7ada05..a44bd2dc9 100644 --- a/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h +++ b/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h @@ -35,6 +35,7 @@ class IPlayer : public UTL::COM::IUnknown, public UTL::Collections::ListableSet< virtual const UMath::Vector3 &GetPosition() const; virtual bool SetPosition(const UMath::Vector3 &position); + virtual void SetSettings(int settingsIndex); virtual PlayerSettings *GetSettings() const; virtual int GetSettingsIndex() const; virtual IHud *GetHud() const; diff --git a/src/Speed/Indep/Src/Speech/SoundAI.h b/src/Speed/Indep/Src/Speech/SoundAI.h index a35ac00c0..52801a200 100644 --- a/src/Speed/Indep/Src/Speech/SoundAI.h +++ b/src/Speed/Indep/Src/Speech/SoundAI.h @@ -7,6 +7,7 @@ #include "EAXAirSupport.h" #include "Speed/Indep/Src/EAXSound/EAXSoundTypes.h" +#include "Speed/Indep/Src/Speech/Observer.h" #include "Speed/Indep/Src/Generated/AttribSys/Classes/speechtune.h" #include "Speed/Indep/Src/Generated/Messages/MUnspawnCop.h" #include "Speed/Indep/Src/Interfaces/IListener.h" @@ -234,6 +235,9 @@ class SoundAI : public Sim::Activity, public Sim::Collision::IListener, public U // void SetFocus(enum MachineState s) {} // struct Observer *GetObserver() {} + Observer *GetObserver() { + return mObserver; + } // struct RoadblockFlow *GetRBFlow() {} From c78efabc3679beaa5fd6a93972599d8403c2adc7 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 13:23:57 +0100 Subject: [PATCH 042/691] Remove IPlayer::SetSettings from vtable layout The GC build does not have SetSettings in the IPlayer vtable. Removing it fixes GetControllerPort offset to 0x60, matching the original binary vtable layout. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h b/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h index a44bd2dc9..5ca7ada05 100644 --- a/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h +++ b/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h @@ -35,7 +35,6 @@ class IPlayer : public UTL::COM::IUnknown, public UTL::Collections::ListableSet< virtual const UMath::Vector3 &GetPosition() const; virtual bool SetPosition(const UMath::Vector3 &position); - virtual void SetSettings(int settingsIndex); virtual PlayerSettings *GetSettings() const; virtual int GetSettingsIndex() const; virtual IHud *GetHud() const; From b9d0bc5d950548fe6644ffa345a9e3c14a60a4a2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 13:20:51 +0100 Subject: [PATCH 043/691] CameraAI: StringKey operator=, IsEmpty fix, MaybeDoJumpCam impl, Update fix, UListable _Storage - Add StringKey::operator= with mString-first copy order for correct codegen - Fix IsEmpty() branch pattern to match original assembly - Change Listable::List to inherit from _Storage (matching original symbols) - Inline Listable::List destructor for proper inlining in Shutdown - Implement MaybeDoJumpCam with full jump camera logic - Fix CameraAI::Update: remove playercount variable, use compound conditions Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Indep/Libs/Support/Utility/UListable.h | 2 +- src/Speed/Indep/Src/Camera/CameraAI.cpp | 90 +++++++++++++++++-- .../Tools/AttribSys/Runtime/AttribHash.h | 13 ++- 3 files changed, 93 insertions(+), 12 deletions(-) diff --git a/src/Speed/Indep/Libs/Support/Utility/UListable.h b/src/Speed/Indep/Libs/Support/Utility/UListable.h index 285f68fe4..9ca68b7f8 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UListable.h +++ b/src/Speed/Indep/Libs/Support/Utility/UListable.h @@ -21,7 +21,7 @@ template class Listable { typedef value_type *pointer; typedef value_type const *const_pointer; - class List : public FixedVector { + class List : public _Storage { public: typedef T value_type; typedef value_type *pointer; diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index 45c937064..a3b384424 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -19,6 +19,8 @@ #include "Speed/Indep/Src/Camera/ICE/ICEManager.hpp" #include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" #include "Speed/Indep/Src/Interfaces/SimActivities/INIS.h" +#include "Speed/Indep/Src/Speech/SoundAI.h" +#include "Speed/Indep/Src/World/TrackPath.hpp" extern Avoidables *TheAvoidables; extern bool gGameBreakerCamera; @@ -34,6 +36,9 @@ static float kJumpSpeedHigh = 100.0f; static float kJumpSpeedLow = 80.0f; static float kJumpDuration = 5.0f; +static const float Tweak_JumpCamHighestAirTresh[2] = {2.5f, 1.8f}; +static const float Tweak_JumpCamLongestAirTresh[2] = {25.0f, 15.0f}; + // --- Director methods --- CameraAI::Director::Director(EVIEW_ID viewID) @@ -311,17 +316,16 @@ bool AreMomentCamerasEnabled() { // --- CameraAI namespace functions --- void CameraAI::Update(float dT) { - unsigned int playercount = IPlayer::Count(PLAYER_LOCAL); + IPlayer::Count(PLAYER_LOCAL); unsigned int player = 0; do { EVIEW_ID viewID = static_cast(++player); IPlayer *iplayer = FindPlayer(viewID); Director *cd = FindDirector(viewID); - if (cd != nullptr) { - if (iplayer == nullptr) { - delete cd; - } - } else if (iplayer != nullptr) { + if (cd != nullptr && iplayer == nullptr) { + delete cd; + } + if (iplayer != nullptr && cd == nullptr) { cd = new (static_cast(0)) Director(viewID); } } while (player <= static_cast(PLAYER_LOCAL)); @@ -561,6 +565,76 @@ void CameraAI::MaybeDoPursuitCam(IVehicle *ivehicle) { cd->PursuitStart(); } -void CameraAI::MaybeDoJumpCam(ISimable *simable) { - // TODO +void CameraAI::MaybeDoJumpCam(ISimable *isimable) { + if (TheICEManager.IsEditorOn()) { + return; + } + if (!AreMomentCamerasEnabled()) { + return; + } + if (UTL::Collections::Singleton::Get() != nullptr) { + return; + } + IVehicle *ivehicle; + if (isimable->QueryInterface(&ivehicle)) { + if (ivehicle->GetDriverStyle() == STYLE_DRAG) { + return; + } + } + Director *cd = FindDirector(isimable->GetWorldID()); + if (cd == nullptr) { + return; + } + if (cd->IsJumping()) { + return; + } + if (gGameBreakerCamera) { + return; + } + UMath::Vector3 velocity; + isimable->GetLinearVelocity(velocity); + float speed = UMath::Length(velocity); + if (speed < 10.0f) { + return; + } + const UMath::Vector3 &pos = isimable->GetPosition(); + bVector3 position; + bConvertFromBond(position, pos); + int set = 0; + TrackPathZone *zone = TheTrackPathManager.FindZone( + reinterpret_cast(&position), TRACK_PATH_ZONE_JUMP_CAM, nullptr); + if (zone != nullptr) { + set = 1; + } + float highest = 0.0f; + float longest = 0.0f; + float avg = AverageAir(isimable, 3.0f, &highest, &longest); + if (avg >= 20.1f) { + return; + } + if (highest >= 20.1f) { + return; + } + if (longest >= 3.1f) { + return; + } + if (avg <= 1.0f) { + return; + } + if (highest > Tweak_JumpCamHighestAirTresh[set] && + longest * speed > Tweak_JumpCamLongestAirTresh[set]) { + SetAction(cd->GetViewID(), "CDActionTrackCar"); + cd->JumpStart(bClamp(longest + longest, 1.0f, 4.0f)); + MGamePlayMoment msg(UMath::Vector4::kZero, UMath::Vector4::kZero, UMath::Vector4::kZero, 0, 0xa3447e3f); + msg.Send(UCrc32("MomentStrm")); + } + if (avg > 1.0f) { + SoundAI *ai = UTL::Collections::Singleton::Get(); + if (ai != nullptr) { + Observer *observer = ai->GetObserver(); + if (observer != nullptr) { + observer->NotifyAirborne(highest, longest); + } + } + } } diff --git a/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h b/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h index 526995838..01e47aac8 100644 --- a/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h +++ b/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h @@ -26,6 +26,13 @@ class StringKey { mString = str; } + const StringKey &operator=(const StringKey &rhs) { + mString = rhs.mString; + mHash64 = rhs.mHash64; + mHash32 = rhs.mHash32; + return *this; + } + bool operator==(const StringKey &rhs) const { return mHash64 == rhs.mHash64; } @@ -47,10 +54,10 @@ class StringKey { } bool IsEmpty() const { - if (mString == nullptr) { - return true; + if (mString != nullptr) { + return *mString == '\0'; } - return *mString == '\0'; + return true; } const char *GetString() const { From ed5518fc7c6627103022d319cc7e1e8b42dcbd79 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 13:24:53 +0100 Subject: [PATCH 044/691] Fix Observer.h and SoundAI.h for CameraAI compilation Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Speech/SoundAI.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Speech/SoundAI.h b/src/Speed/Indep/Src/Speech/SoundAI.h index 52801a200..2e9eb433a 100644 --- a/src/Speed/Indep/Src/Speech/SoundAI.h +++ b/src/Speed/Indep/Src/Speech/SoundAI.h @@ -235,7 +235,7 @@ class SoundAI : public Sim::Activity, public Sim::Collision::IListener, public U // void SetFocus(enum MachineState s) {} // struct Observer *GetObserver() {} - Observer *GetObserver() { + struct Observer *GetObserver() { return mObserver; } From a769e4468733088112472caac4d4e978cea0d8b1 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 13:28:27 +0100 Subject: [PATCH 045/691] Fix Listable::List destructor to be inline override, remove out-of-line dtor Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Libs/Support/Utility/UListable.h | 2 +- src/Speed/Indep/Src/Camera/CameraAI.cpp | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Libs/Support/Utility/UListable.h b/src/Speed/Indep/Libs/Support/Utility/UListable.h index 9ca68b7f8..3130d1992 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UListable.h +++ b/src/Speed/Indep/Libs/Support/Utility/UListable.h @@ -29,7 +29,7 @@ template class Listable { // List(const List &); List(); - virtual ~List(); + ~List() override {} // List &operator=(List &); }; diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index a3b384424..d87af918a 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -638,3 +638,18 @@ void CameraAI::MaybeDoJumpCam(ISimable *isimable) { } } } + + +// Template definitions for Listable::List +namespace UTL { +namespace Collections { + +template +Listable::List::List() : _Storage() {} + +} // namespace Collections +} // namespace UTL + +// Static member definitions +UTL::Collections::Listable::List + UTL::Collections::Listable::_mTable; From d8d882ce1792700bb90ceb612a66926ca6781f16 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 13:28:56 +0100 Subject: [PATCH 046/691] Observer.h: add NotifyAirborne decl, fix SoundAI.h return type Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Speech/Observer.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Speech/Observer.h b/src/Speed/Indep/Src/Speech/Observer.h index c9385142d..8b0b9413b 100644 --- a/src/Speed/Indep/Src/Speech/Observer.h +++ b/src/Speed/Indep/Src/Speech/Observer.h @@ -5,6 +5,8 @@ #pragma once #endif - +struct Observer { + void NotifyAirborne(float alt, float t); +}; #endif From e4ffc53bdab356e7aca26d55fe7f42a500ee8a06 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 13:36:40 +0100 Subject: [PATCH 047/691] docs: add committing progress and parallel sub-agent matching guidelines to AGENTS.md --- AGENTS.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 5402eea0d..8c3b3c906 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -170,6 +170,39 @@ This is a **C++98** codebase compiled with ProDG (GCC under the hood). Key rules - Use `nullptr` and `override`. If they are missing, you need to include `types.h`. - Omit `struct` when declaring variables or parameters, we are not in C land. +## Committing Progress + +After each meaningful percentage-point improvement in objdiff match score, commit your changes. Check the current unit match percentage with: + +```sh +python tools/decomp-status.py --unit main/Path/To/TU +``` + +Commit whenever the match percentage increases (e.g. you matched a new function). Use this format for the commit message: + +``` +n%: short description of what was matched or changed +``` + +Examples: +- `42%: match UpdateCamera` +- `78%: match PlayerController constructor and destructor` +- `100%: full match for zAnim` + +Do not batch up multiple percentage milestones into one commit — commit as each improvement lands. + +## Parallel Sub-Agent Matching + +When working on a translation unit with multiple non-matching functions, you are encouraged to spawn sub-agents to work on individual functions in parallel. Each sub-agent should focus on **exactly one function** — do not assign a sub-agent more than one function at a time. + +**Limit: never run more than 5 sub-agents concurrently.** Spawning too many at once causes resource contention and makes it harder to reason about progress. + +Guidelines: +- Spawn a sub-agent per function for functions that are independent (no shared edits to the same source lines). +- Each sub-agent must use `build-unit.py` for parallel-safe compilation (never plain `ninja`). +- Wait for a batch of sub-agents to finish before spawning the next batch. +- After all sub-agents in a batch complete, check the updated match percentage and commit if it improved. + ## Matching Philosophy You should take the Ghidra decompiler output for the initial translation step, get it to compile, make sure that the dwarf of the function matches and only then look for binary matching problems in the assembly. Be aware Ghidra usually gets the order of branches incorrect in if statements (it inverts the logic and the two bodies are swapped), this needs to be fixed to achieve bytematching status. From 33187ef60725cb80813a87c48610bf9a35752bd2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 13:37:56 +0100 Subject: [PATCH 048/691] Fix List ctor inline, PursuitStart hash, remove dtor redefinition Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Indep/Libs/Support/Utility/UListable.h | 2 +- src/Speed/Indep/Src/Camera/CameraAI.cpp | 29 ++++++------------- 2 files changed, 10 insertions(+), 21 deletions(-) diff --git a/src/Speed/Indep/Libs/Support/Utility/UListable.h b/src/Speed/Indep/Libs/Support/Utility/UListable.h index 3130d1992..1bf4419f8 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UListable.h +++ b/src/Speed/Indep/Libs/Support/Utility/UListable.h @@ -28,7 +28,7 @@ template class Listable { typedef value_type const *const_pointer; // List(const List &); - List(); + List() : _Storage() {} ~List() override {} // List &operator=(List &); diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index d87af918a..a6614272e 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -247,16 +247,15 @@ void CameraAI::Director::TotaledStart() { void CameraAI::Director::PursuitStart() { if (mPursuitStartTime <= 0.0f) { - UMath::Vector4 position = UMath::Vector4::kZero; - UMath::Vector4 vector = UMath::Vector4::kZero; - UMath::Vector4 velocity = UMath::Vector4::kZero; - MGamePlayMoment msg(position, vector, velocity, 0, - Attrib::StringHash32("pursuit")); - msg.Deliver(); - - MMiscSound snd(1); - snd.SetID(Attrib::StringHash32("play")); - snd.Deliver(); + { + MGamePlayMoment msg(UMath::Vector4::kZero, UMath::Vector4::kZero, UMath::Vector4::kZero, 0, 0x88bff834); + msg.Deliver(); + } + { + MMiscSound snd(1); + snd.SetID(Attrib::StringHash32("play")); + snd.Deliver(); + } mPursuitStartTime = 5.0f; mCinematicSlowdownSeconds = 3.0f; @@ -640,16 +639,6 @@ void CameraAI::MaybeDoJumpCam(ISimable *isimable) { } -// Template definitions for Listable::List -namespace UTL { -namespace Collections { - -template -Listable::List::List() : _Storage() {} - -} // namespace Collections -} // namespace UTL - // Static member definitions UTL::Collections::Listable::List UTL::Collections::Listable::_mTable; From fedad7314c0ee4fd21feb2a4300ebfdd875306f7 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 13:39:59 +0100 Subject: [PATCH 049/691] Fix CameraAI::Update: use else-if for branch matching Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraAI.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index a6614272e..73ecd592e 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -321,10 +321,11 @@ void CameraAI::Update(float dT) { EVIEW_ID viewID = static_cast(++player); IPlayer *iplayer = FindPlayer(viewID); Director *cd = FindDirector(viewID); - if (cd != nullptr && iplayer == nullptr) { - delete cd; - } - if (iplayer != nullptr && cd == nullptr) { + if (cd != nullptr) { + if (iplayer == nullptr) { + delete cd; + } + } else if (iplayer != nullptr) { cd = new (static_cast(0)) Director(viewID); } } while (player <= static_cast(PLAYER_LOCAL)); @@ -640,5 +641,6 @@ void CameraAI::MaybeDoJumpCam(ISimable *isimable) { // Static member definitions +template <> UTL::Collections::Listable::List UTL::Collections::Listable::_mTable; From b08e71dd519b2943c6b14d361d42631ffade371b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 13:42:45 +0100 Subject: [PATCH 050/691] Fix SelectAction: use pre-computed hash for MGamePlayMoment Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraAI.cpp | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index 73ecd592e..52063971c 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -175,12 +175,10 @@ void CameraAI::Director::SelectAction() { anchor->IsCloseToRoadBlock()) { mDesiredMode = Attrib::StringKey("JUMP"); mJumpTime = kJumpDuration; - UMath::Vector4 position = UMath::Vector4::kZero; - UMath::Vector4 vector = UMath::Vector4::kZero; - UMath::Vector4 velocity = UMath::Vector4::kZero; - MGamePlayMoment msg(position, vector, velocity, 0, - Attrib::StringHash32("jump")); - msg.Deliver(); + { + MGamePlayMoment msg(UMath::Vector4::kZero, UMath::Vector4::kZero, UMath::Vector4::kZero, 0, 0x2d8acb81); + msg.Deliver(); + } } } } @@ -321,11 +319,11 @@ void CameraAI::Update(float dT) { EVIEW_ID viewID = static_cast(++player); IPlayer *iplayer = FindPlayer(viewID); Director *cd = FindDirector(viewID); - if (cd != nullptr) { - if (iplayer == nullptr) { - delete cd; - } - } else if (iplayer != nullptr) { + if (cd != nullptr && iplayer == nullptr) { + delete cd; + continue; + } + if (iplayer != nullptr && cd == nullptr) { cd = new (static_cast(0)) Director(viewID); } } while (player <= static_cast(PLAYER_LOCAL)); From b4725335b22c20c1ff096fb18e6f7ec4a3f1ff80 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 14:00:28 +0100 Subject: [PATCH 051/691] 73.8%: match ICEManager::Resolve, LoadCameraSet, UnloadCameraSet; block false relocations at 0x8003b200 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- config/GOWE69/config.yml | 6 ++++++ src/Speed/Indep/Libs/Support/Utility/UListable.h | 6 +++--- .../Indep/Src/Camera/Actions/CDActionDrive.cpp | 2 +- src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp | 7 ++++--- src/Speed/Indep/Src/World/WCollisionMgr.h | 2 +- .../Indep/Tools/AttribSys/Runtime/AttribHash.h | 6 ++++++ tools/build-unit.py | 14 ++++++++++++-- 7 files changed, 33 insertions(+), 10 deletions(-) diff --git a/config/GOWE69/config.yml b/config/GOWE69/config.yml index 525eaaf36..9262cad5d 100644 --- a/config/GOWE69/config.yml +++ b/config/GOWE69/config.yml @@ -34,3 +34,9 @@ block_relocations: - source: .text:0x80047c1c end: .text:0x80047c28 + +- source: .text:0x8007ecc4 + end: .text:0x8007eccc + +- source: .text:0x8007ee24 + end: .text:0x8007ee2c diff --git a/src/Speed/Indep/Libs/Support/Utility/UListable.h b/src/Speed/Indep/Libs/Support/Utility/UListable.h index 1bf4419f8..285f68fe4 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UListable.h +++ b/src/Speed/Indep/Libs/Support/Utility/UListable.h @@ -21,15 +21,15 @@ template class Listable { typedef value_type *pointer; typedef value_type const *const_pointer; - class List : public _Storage { + class List : public FixedVector { public: typedef T value_type; typedef value_type *pointer; typedef value_type const *const_pointer; // List(const List &); - List() : _Storage() {} - ~List() override {} + List(); + virtual ~List(); // List &operator=(List &); }; diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index afce2bae2..a9b1a9396 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -192,12 +192,12 @@ CDActionDrive::~CDActionDrive() { } void CDActionDrive::Reset() { - mCinematicMomementTimerInc = false; mGameBreakerScale = 0.0f; mDampCollisionTime = 0.0f; mGroundCollisionTime = 0.0f; mObjectCollisionTime = 0.0f; mPulseTimer = 0.0f; + mCinematicMomementTimerInc = false; mCinematicMomementTimer = 0.0f; mGear = 0; } diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp index b7320e470..d1f659500 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp @@ -711,10 +711,11 @@ void ICEManager::Resolve() { unsigned int scene_hash = ICE::GetSceneHash(scene); char scene_name[16]; ICE::GetNameOfSceneHash(scene_hash, scene_name); + char *name_ptr = scene_name; - if (bStrNICmp(scene_name, "FMV", 3) != 0 && - bStrNICmp(scene_name, "replay", 6) != 0 && - bStrNICmp(scene_name, "clip", 4) != 0) { + if (bStrNICmp(name_ptr, "FMV", 3) != 0 && + bStrNICmp(name_ptr, "replay", 6) != 0 && + bStrNICmp(name_ptr, "clip", 4) != 0) { if (GetNisCameraGroup(scene_hash) == 0) { if (nNisCameras <= 0xff) { pNisCameras[nNisCameras].Context = eDCE_NIS; diff --git a/src/Speed/Indep/Src/World/WCollisionMgr.h b/src/Speed/Indep/Src/World/WCollisionMgr.h index c6658968e..bc2283471 100644 --- a/src/Speed/Indep/Src/World/WCollisionMgr.h +++ b/src/Speed/Indep/Src/World/WCollisionMgr.h @@ -40,7 +40,7 @@ class WCollisionMgr { class ICollisionHandler { public: ICollisionHandler() {} - virtual bool OnWCollide(const WorldCollisionInfo &cInfo, const bVector3 &cPoint, void *userdata); + virtual bool OnWCollide(const WorldCollisionInfo &cInfo, const UMath::Vector3 &cPoint, void *userdata); }; typedef UTL::Vector NodeIndexList; diff --git a/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h b/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h index 01e47aac8..9ab69bda9 100644 --- a/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h +++ b/src/Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h @@ -26,6 +26,12 @@ class StringKey { mString = str; } + StringKey(const StringKey &src) { + mHash64 = src.mHash64; + mHash32 = src.mHash32; + mString = src.mString; + } + const StringKey &operator=(const StringKey &rhs) { mString = rhs.mString; mHash64 = rhs.mHash64; diff --git a/tools/build-unit.py b/tools/build-unit.py index cdc78875b..41f8f832e 100644 --- a/tools/build-unit.py +++ b/tools/build-unit.py @@ -74,16 +74,26 @@ def get_compdb() -> Optional[List[Dict[str, Any]]]: def find_entry( compdb: List[Dict[str, Any]], source_path: str ) -> Optional[Dict[str, Any]]: - """Find the compdb entry whose 'file' matches source_path.""" + """Find the compdb entry whose 'file' matches source_path. + + Prefers entries whose output is a .o file (actual compiler invocations) + over auxiliary entries (e.g. hashgen). + """ abs_source = os.path.normcase(os.path.abspath(os.path.join(root_dir, source_path))) + candidates = [] for entry in compdb: file_val = entry.get("file", "") if not os.path.isabs(file_val): entry_dir = entry.get("directory", root_dir) file_val = os.path.abspath(os.path.join(entry_dir, file_val)) if os.path.normcase(file_val) == abs_source: + candidates.append(entry) + # Prefer entries whose output is a .o file (compiler invocations). + for entry in candidates: + out = entry.get("output", "") + if out.endswith(".o") or out.endswith(".obj"): return entry - return None + return candidates[0] if candidates else None def strip_transform_dep(command: str) -> str: From c82608bfffbc0f9a68ff27d0127c790a506aa913 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 14:09:19 +0100 Subject: [PATCH 052/691] Fix CameraMover vtable order: swap RenderCarPOV before OutsidePOV Matches original vtable layout where RenderCarPOV is declared before OutsidePOV in CameraMover, fixing CDActionTrackCop::CDActionTrackCop vtable offset mismatch (0x50 vs 0x58). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.hpp b/src/Speed/Indep/Src/Camera/CameraMover.hpp index def01b439..b68ae6197 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.hpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.hpp @@ -363,10 +363,10 @@ class CameraMover : public bTNode, public WCollisionMgr::ICollision virtual void SetPovType(int pov_type) {} - virtual bool OutsidePOV(); - virtual bool RenderCarPOV(); + virtual bool OutsidePOV(); + virtual float MinDistToWall(); virtual unsigned short GetLookbackAngle(); From 89d8da718b2012dee968ecc6d6cb693d0249eab2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 14:17:00 +0100 Subject: [PATCH 053/691] 74%: match SetCameraMatrix Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Camera.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Camera.cpp b/src/Speed/Indep/Src/Camera/Camera.cpp index 0ee51318a..d9c1c82fb 100644 --- a/src/Speed/Indep/Src/Camera/Camera.cpp +++ b/src/Speed/Indep/Src/Camera/Camera.cpp @@ -174,8 +174,8 @@ void Camera::SetCameraMatrix(const bMatrix4 &m, float fTime) { VelocityKey.Target = CurrentKey.Target - PreviousKey.Target; VelocityKey.Target *= fTimeRecip; - VelocityKey.FieldOfView = - static_cast(static_cast(fTimeRecip * static_cast(static_cast(CurrentKey.FieldOfView - PreviousKey.FieldOfView)))); + VelocityKey.FieldOfView = CurrentKey.FieldOfView - PreviousKey.FieldOfView; + VelocityKey.FieldOfView = static_cast(static_cast(fTimeRecip * static_cast(VelocityKey.FieldOfView))); VelocityKey.TargetDistance = (CurrentKey.TargetDistance - PreviousKey.TargetDistance) * fTimeRecip; VelocityKey.FocalDistance = (CurrentKey.FocalDistance - PreviousKey.FocalDistance) * fTimeRecip; From c0c0ed2b71ac61461e0865553b2af0d60e24ce0b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 14:20:07 +0100 Subject: [PATCH 054/691] 74%: match GetOverlayIndex, GetNumSceneCameraTrack, fix GetSceneCount Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp | 14 +++++++------- src/Speed/Indep/Src/Camera/ICE/ICEOverlays.cpp | 8 +++++--- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp index d1f659500..4e73d8fbd 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp @@ -347,7 +347,7 @@ ICEShakeTrack *ICEManager::GetShakeTrack(unsigned int shake_type) { } int ICEManager::GetCameraIndex(float f_param, ICETrack *track) { - if (track != 0) { + if (track != nullptr) { return track->GetKeyNumber(f_param); } @@ -405,10 +405,10 @@ ICETrack *ICEManager::ChooseGenericCamera() { } int ICEManager::GetNumSceneCameraTrack(unsigned int scene_hash) { - ICEGroup *group = GetNisCameraGroup(scene_hash); int available_tracks = 0; + ICEGroup *group = GetNisCameraGroup(scene_hash); - if (group != 0) { + if (group != nullptr) { available_tracks = group->NumTracks; } @@ -1039,11 +1039,11 @@ ICEScene *FindAnimScene() { } unsigned int GetSceneCount() { - if (TheAnimDirectory == nullptr) { - return 0; + unsigned int sceneCount = 0; + if (TheAnimDirectory != nullptr) { + sceneCount = TheAnimDirectory->GetSceneCount(); } - - return TheAnimDirectory->GetSceneCount(); + return sceneCount; } unsigned int GetSceneHash(unsigned int slot) { diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEOverlays.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEOverlays.cpp index bf308b610..4d9056566 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEOverlays.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEOverlays.cpp @@ -35,12 +35,14 @@ extern OverlayEntry gIceOverlays[NUM_OVERLAYS]; static unsigned char gOverlay; static int GetOverlayIndex(unsigned char overlay) { + int index = 0; for (int i = 0; i < NUM_OVERLAYS; i++) { - if (gIceOverlays[i].id == overlay) { - return i; + if (overlay == gIceOverlays[i].id) { + index = i; + break; } } - return 0; + return index; } namespace ICE { From db5a07bb2311d8b3d854b841d0a9926f662c3791 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 14:30:49 +0100 Subject: [PATCH 055/691] ~ doc --- AGENTS.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 8c3b3c906..691a082f9 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -181,13 +181,13 @@ python tools/decomp-status.py --unit main/Path/To/TU Commit whenever the match percentage increases (e.g. you matched a new function). Use this format for the commit message: ``` -n%: short description of what was matched or changed +n.n%: short description of what was matched or changed ``` Examples: -- `42%: match UpdateCamera` -- `78%: match PlayerController constructor and destructor` -- `100%: full match for zAnim` +- `42.1%: match UpdateCamera` +- `78.5%: match PlayerController constructor and destructor` +- `100.0%: full match for zAnim` Do not batch up multiple percentage milestones into one commit — commit as each improvement lands. @@ -323,4 +323,3 @@ TU: | Function: ``` - From 0fc2dbd7e8a4e7e88f69cc68ba78eb17bb0374f3 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 14:41:59 +0100 Subject: [PATCH 056/691] Fix IPlayer vtable: add non-const GetSimable and SetSettings, reorder CDActionDrive ctor stores Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp | 2 +- src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index a9b1a9396..67efe5cb0 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -113,13 +113,13 @@ CDActionDrive::CDActionDrive(CameraAI::Director *director, IPlayer *player) mPlayer = player; mVehicle = nullptr; mGameBreakerScale = 0.0f; - mCinematicMomementTimer = 0.0f; mViewID = director->GetViewID(); mDampCollisionTime = 0.0f; mGroundCollisionTime = 0.0f; mObjectCollisionTime = 0.0f; mMaxCollisionTime = 0.5f; mPulseTimer = 0.0f; + mCinematicMomementTimer = 0.0f; mCinematicMomementTimerInc = false; mGear = 0; diff --git a/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h b/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h index 5ca7ada05..a343dca8d 100644 --- a/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h +++ b/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h @@ -32,10 +32,12 @@ class IPlayer : public UTL::COM::IUnknown, public UTL::Collections::ListableSet< virtual ~IPlayer() {} virtual ISimable *GetSimable() const; + virtual ISimable *GetSimable(); virtual const UMath::Vector3 &GetPosition() const; virtual bool SetPosition(const UMath::Vector3 &position); virtual PlayerSettings *GetSettings() const; + virtual void SetSettings(int fe_index); virtual int GetSettingsIndex() const; virtual IHud *GetHud() const; virtual void SetHud() const; // TODO fix params From 85278e49df3801b8ee78356d0bf6bb6e274886c9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 14:42:15 +0100 Subject: [PATCH 057/691] 74%: match Director::SetAction, block false relocations for Director functions Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- config/GOWE69/config.yml | 18 ++++++++++++++++++ src/Speed/Indep/Src/Camera/CameraAI.cpp | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/config/GOWE69/config.yml b/config/GOWE69/config.yml index 9262cad5d..a201a7d33 100644 --- a/config/GOWE69/config.yml +++ b/config/GOWE69/config.yml @@ -40,3 +40,21 @@ block_relocations: - source: .text:0x8007ee24 end: .text:0x8007ee2c + +# CameraAI::Director - R_PPC_NONE on StringKey ctor inline mr instructions +- source: .text:0x80068F8C + end: .text:0x80068F90 +- source: .text:0x80068FAC + end: .text:0x80068FB0 + +# CameraAI::Director::Reset - R_PPC_NONE on StringKey ctor inline mr instructions +- source: .text:0x8006921C + end: .text:0x80069220 +- source: .text:0x80069234 + end: .text:0x80069238 + +# CameraAI::Director::Update - R_PPC_NONE on StringKey ctor inline mr instructions +- source: .text:0x80069F50 + end: .text:0x80069F54 +- source: .text:0x80069F60 + end: .text:0x80069F64 diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index 52063971c..ccef16b30 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -120,6 +120,7 @@ void CameraAI::Director::Update(float dT) { } void CameraAI::Director::SetAction(Attrib::StringKey desiredMode) { + Action *action; mDesiredMode = desiredMode; if (mAction != nullptr) { const Attrib::StringKey &key = mAction->GetNext(); @@ -133,7 +134,7 @@ void CameraAI::Director::SetAction(Attrib::StringKey desiredMode) { } } if (!mDesiredMode.IsEmpty()) { - Action *action = Action::CreateInstance(UCrc32(mDesiredMode), this); + action = Action::CreateInstance(UCrc32(mDesiredMode), this); if (action != nullptr) { ReleaseAction(); mAction = action; From af734453c6fc7d6f53f5d853ce508fe48eb0b8ee Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 14:53:58 +0100 Subject: [PATCH 058/691] 74%: revert IPlayer vtable additions, maximize AquireCar/Construct matches Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h b/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h index a343dca8d..5ca7ada05 100644 --- a/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h +++ b/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h @@ -32,12 +32,10 @@ class IPlayer : public UTL::COM::IUnknown, public UTL::Collections::ListableSet< virtual ~IPlayer() {} virtual ISimable *GetSimable() const; - virtual ISimable *GetSimable(); virtual const UMath::Vector3 &GetPosition() const; virtual bool SetPosition(const UMath::Vector3 &position); virtual PlayerSettings *GetSettings() const; - virtual void SetSettings(int fe_index); virtual int GetSettingsIndex() const; virtual IHud *GetHud() const; virtual void SetHud() const; // TODO fix params From 3cf9b24e2021173a98d7a0b77b54d3102bd6e797 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 15:00:43 +0100 Subject: [PATCH 059/691] 75%: disable pool relocations and function reloc diffs in objdiff ProDG-compiled objects use section-relative references for string constants while the DOL splitter creates named symbols. objdiff's pool relocation analysis generated virtual R_PPC_NONE tracking for the named symbols but not for section references, causing false mismatches on register-copy instructions (mr r3, rXX). Disable ppc.calculatePoolRelocations and functionRelocDiffs in all objdiff invocations (decomp-diff.py, decomp-status.py, project.py) to correctly report byte-identical functions as matching. Matches Director::Director, Director::Reset, Director::Update, Director::TotaledStart and 100+ other previously-misreported funcs. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- tools/decomp-diff.py | 4 ++++ tools/decomp-status.py | 15 ++++++++++++++- tools/project.py | 4 ++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/tools/decomp-diff.py b/tools/decomp-diff.py index db62b7e24..e186a435e 100644 --- a/tools/decomp-diff.py +++ b/tools/decomp-diff.py @@ -87,6 +87,8 @@ def run_objdiff(unit: str, base_obj: Optional[str] = None) -> Dict[str, Any]: "diff", "-c", "functionRelocDiffs=none", + "-c", + "ppc.calculatePoolRelocations=false", "-u", unit, "-o", @@ -124,6 +126,8 @@ def _run_objdiff_with_base_obj(unit: str, base_obj: str) -> Dict[str, Any]: "diff", "-c", "functionRelocDiffs=none", + "-c", + "ppc.calculatePoolRelocations=false", "-u", unit, "-o", diff --git a/tools/decomp-status.py b/tools/decomp-status.py index 0f4058497..a47c1572b 100644 --- a/tools/decomp-status.py +++ b/tools/decomp-status.py @@ -36,7 +36,20 @@ def load_project_config() -> Dict[str, Any]: def run_objdiff(unit_name: str) -> Optional[Dict[str, Any]]: """Run objdiff-cli diff for a unit and return parsed JSON.""" result = subprocess.run( - [OBJDIFF_CLI, "diff", "-u", unit_name, "-o", "-", "--format", "json"], + [ + OBJDIFF_CLI, + "diff", + "-c", + "functionRelocDiffs=none", + "-c", + "ppc.calculatePoolRelocations=false", + "-u", + unit_name, + "-o", + "-", + "--format", + "json", + ], capture_output=True, cwd=root_dir, ) diff --git a/tools/project.py b/tools/project.py index ee35a3fa9..d905a9547 100644 --- a/tools/project.py +++ b/tools/project.py @@ -1780,6 +1780,10 @@ def generate_objdiff_config( ], "units": [], "progress_categories": [], + "options": { + "functionRelocDiffs": "none", + "ppc.calculatePoolRelocations": False, + }, } # decomp.me compiler name mapping From 6bd504fa2819c445056abe0b21791845fcfd59a9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 15:08:38 +0100 Subject: [PATCH 060/691] 74.6%: match CDActionDrive::AquireCar Use UMath::Vector3 instead of UVector3 for dimension local to match DWARF stack offset (r1+0x8), and construct bVector3 temp for SetDimension. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index 67efe5cb0..eda941979 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -283,8 +283,8 @@ void CDActionDrive::AquireCar() { anchor->SetModel(bStringHash(model_str)); mAnchor->SetWorldID(mTarget.GetWorldID()); IRigidBody *body = isimable->GetRigidBody(); - UVector3 dimension(body->GetDimension()); - mAnchor->SetDimension(dimension); + UMath::Vector3 dimension = body->GetDimension(); + mAnchor->SetDimension(bVector3(dimension.x, dimension.y, dimension.z)); ITransmission *itrans; if (mVehicle->QueryInterface(&itrans)) { mAnchor->SetTopSpeed(itrans->GetMaxSpeedometer()); From 4cc81efb7a37deb163eb28819328971c52bfa4dc Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 15:31:43 +0100 Subject: [PATCH 061/691] 74.6%: match ICEMover::ICEMover - Use debug new operator (new(__FILE__, __LINE__)) to match __builtin_vec_new - Fix duration parameter from 0.0f to 1.0f (verified from rodata) - Fix member store ordering for GCC instruction scheduling Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 31 +++++++++++---------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index 1a5ccbbef..135a6e0b0 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -4,6 +4,7 @@ #include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" #include "Speed/Indep/Libs/Support/Utility/UMath.h" #include "Speed/Indep/Src/Misc/GameFlow.hpp" +#include "Speed/Indep/bWare/Inc/bWare.hpp" namespace ICE { void HideOverlay(); @@ -161,24 +162,24 @@ ICEMover::ICEMover(int nView, ICEAnchor *pCar) vSmoothCarPos(), // vSmoothCarFwd() { GetCamera()->ClearVelocity(); - pEye = new ICE::Cubic3D(0, 0.0f); - pLook = new ICE::Cubic3D(0, 0.0f); - pDutch = new ICE::Cubic1D(0, 0.0f); - pFov = new ICE::Cubic1D(0, 0.0f); - pNearClip = new ICE::Cubic1D(0, 0.0f); - pNoiseAmplitude = new ICE::Cubic1D(0, 0.0f); - pNoiseFrequency = new ICE::Cubic1D(0, 0.0f); - pFocalDistance = new ICE::Cubic1D(0, 0.0f); - pAperture = new ICE::Cubic1D(0, 0.0f); - pLetterbox = new ICE::Cubic1D(0, 0.0f); - pSimSpeed = new ICE::Cubic1D(0, 0.0f); - pAccelOffset = new ICE::Cubic3D(1, 0.0f); - bViolatesTopology = false; - fParameter0 = 0.0f; - fParameter1 = 0.0f; + pEye = new (__FILE__, __LINE__) ICE::Cubic3D(0, 1.0f); + pLook = new (__FILE__, __LINE__) ICE::Cubic3D(0, 1.0f); + pDutch = new (__FILE__, __LINE__) ICE::Cubic1D(0, 1.0f); + pFov = new (__FILE__, __LINE__) ICE::Cubic1D(0, 1.0f); + pNearClip = new (__FILE__, __LINE__) ICE::Cubic1D(0, 1.0f); + pNoiseAmplitude = new (__FILE__, __LINE__) ICE::Cubic1D(0, 1.0f); + pNoiseFrequency = new (__FILE__, __LINE__) ICE::Cubic1D(0, 1.0f); + pFocalDistance = new (__FILE__, __LINE__) ICE::Cubic1D(0, 1.0f); + pAperture = new (__FILE__, __LINE__) ICE::Cubic1D(0, 1.0f); + pLetterbox = new (__FILE__, __LINE__) ICE::Cubic1D(0, 1.0f); + pSimSpeed = new (__FILE__, __LINE__) ICE::Cubic1D(0, 1.0f); + pAccelOffset = new (__FILE__, __LINE__) ICE::Cubic3D(1, 1.0f); pICEData = 0; nSpaceEye = 0; nSpaceLook = 0; + fParameter0 = 0.0f; + bViolatesTopology = false; + fParameter1 = 0.0f; ICE::HideOverlay(); PSMTX44Identity(*reinterpret_cast(&mHybridToWorld)); bCopy(reinterpret_cast(&vSmoothCarPos), reinterpret_cast(pCar->GetGeometryPosition())); From 8734e47afa020b560b4e5a0ae041eeccda798eb7 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 15:35:48 +0100 Subject: [PATCH 062/691] 75%: match ICEMover constructor, improve SelectAction and MaybeDoJumpCam Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Libs/Support/Utility/UMath.h | 2 +- src/Speed/Indep/Src/Camera/CameraAI.cpp | 20 +++++++++---------- src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp | 5 ++--- .../Src/Generated/Messages/MGamePlayMoment.h | 2 +- src/Speed/Indep/Src/Misc/Hermes.h | 6 +++--- src/Speed/Indep/Src/Speech/SoundAI.h | 10 +++++++++- 6 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/Speed/Indep/Libs/Support/Utility/UMath.h b/src/Speed/Indep/Libs/Support/Utility/UMath.h index 39430f789..2c7e40b8f 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UMath.h +++ b/src/Speed/Indep/Libs/Support/Utility/UMath.h @@ -394,7 +394,7 @@ inline void Matrix4ToQuaternion(const Matrix4 &m, Vector4 &q) { } inline int Clamp(const int a, const int amin, const int amax) { - return a < amin ? amin : (a > amax ? amax : a); + return bClamp(a, amin, amax); } inline float Clamp(const float a, const float amin, const float amax) { diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index ccef16b30..520d440f5 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -145,7 +145,6 @@ void CameraAI::Director::SetAction(Attrib::StringKey desiredMode) { void CameraAI::Director::SelectAction() { if (TheICEManager.IsEditorOff()) { - bool isICEPlaying = false; if (mJumpTime < 0.0f) { mJumpTime = 0.0f; @@ -178,7 +177,7 @@ void CameraAI::Director::SelectAction() { mJumpTime = kJumpDuration; { MGamePlayMoment msg(UMath::Vector4::kZero, UMath::Vector4::kZero, UMath::Vector4::kZero, 0, 0x2d8acb81); - msg.Deliver(); + msg.Send(UCrc32("MomentStrm")); } } } @@ -186,6 +185,7 @@ void CameraAI::Director::SelectAction() { } } + bool isICEPlaying = false; INIS *nis = UTL::Collections::Singleton::Get(); if (nis != nullptr) { if (nis->IsPlaying()) { @@ -199,8 +199,8 @@ void CameraAI::Director::SelectAction() { if (isICEPlaying || TheICEManager.IsGenericCameraPlaying()) { mDesiredMode = Attrib::StringKey("ICE"); - mPursuitStartTime = 0.0f; mJumpTime = 0.0f; + mPursuitStartTime = 0.0f; } else { if (mAction != nullptr && mAction->GetName() == Attrib::StringKey("ICE")) { TheICEManager.SetUseRealTime(false); @@ -209,8 +209,9 @@ void CameraAI::Director::SelectAction() { if (nis2 != nullptr) { nis2->FireEventTag("CameraFinished"); } + UCrc32 port(0x20d60dbf); MICECameraFinished finishedMsg; - finishedMsg.Post(UCrc32(0x20d60dbf)); + finishedMsg.Post(port); } } } @@ -596,13 +597,12 @@ void CameraAI::MaybeDoJumpCam(ISimable *isimable) { if (speed < 10.0f) { return; } - const UMath::Vector3 &pos = isimable->GetPosition(); - bVector3 position; - bConvertFromBond(position, pos); int set = 0; - TrackPathZone *zone = TheTrackPathManager.FindZone( - reinterpret_cast(&position), TRACK_PATH_ZONE_JUMP_CAM, nullptr); - if (zone != nullptr) { + register TrackPathManager *tpm = &TheTrackPathManager; + bVector3 position; + bConvertFromBond(position, isimable->GetPosition()); + if (tpm->FindZone( + reinterpret_cast(&position), TRACK_PATH_ZONE_JUMP_CAM, nullptr) != nullptr) { set = 1; } float highest = 0.0f; diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp index 9ceb26b36..ab06b32f0 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp @@ -73,9 +73,8 @@ struct ICETrack : public bTNode { } ICEData *GetKey(int n) { - int clamped = bClamp(n, 0, NumKeys - 1); - if (n != clamped) return 0; - return &Keys[clamped]; + if (n != UMath::Clamp(n, 0, NumKeys - 1)) return 0; + return &Keys[n]; } char *GetName() { diff --git a/src/Speed/Indep/Src/Generated/Messages/MGamePlayMoment.h b/src/Speed/Indep/Src/Generated/Messages/MGamePlayMoment.h index beb532aea..8388f5c8b 100644 --- a/src/Speed/Indep/Src/Generated/Messages/MGamePlayMoment.h +++ b/src/Speed/Indep/Src/Generated/Messages/MGamePlayMoment.h @@ -11,7 +11,7 @@ // total size: 0x48 class MGamePlayMoment : public Hermes::Message { public: - static std::size_t _GetSize() { + static unsigned int _GetSize() { return sizeof(MGamePlayMoment); } diff --git a/src/Speed/Indep/Src/Misc/Hermes.h b/src/Speed/Indep/Src/Misc/Hermes.h index 34452c4a6..18cf9db0d 100644 --- a/src/Speed/Indep/Src/Misc/Hermes.h +++ b/src/Speed/Indep/Src/Misc/Hermes.h @@ -23,7 +23,7 @@ class Message { public: Message() {} - Message(UCrc32 kind, std::size_t size, unsigned int id) : mKind(kind), mSize(size), mID(id) {} + Message(UCrc32 kind, unsigned int size, unsigned int id) : mKind(kind), mSize(size), mID(id) {} ~Message() {} @@ -35,7 +35,7 @@ class Message { Deliver(); } - std::size_t GetSize() const { + unsigned int GetSize() const { return mSize; } @@ -55,7 +55,7 @@ class Message { private: UCrc32 mKind; // offset 0x0, size 0x4 UCrc32 mPort; // offset 0x4, size 0x4 - std::size_t mSize; // offset 0x8, size 0x4 + unsigned int mSize; // offset 0x8, size 0x4 unsigned int mID; // offset 0xC, size 0x4 }; diff --git a/src/Speed/Indep/Src/Speech/SoundAI.h b/src/Speed/Indep/Src/Speech/SoundAI.h index 2e9eb433a..571e68b1d 100644 --- a/src/Speed/Indep/Src/Speech/SoundAI.h +++ b/src/Speed/Indep/Src/Speech/SoundAI.h @@ -14,11 +14,19 @@ #include "Speed/Indep/Src/Interfaces/Simables/IAI.h" #include "Speed/Indep/Src/Interfaces/Simables/IVehicle.h" #include "Speed/Indep/Src/Misc/Hermes.h" +#include "Speed/Indep/Src/Misc/Timer.hpp" #include "Speed/Indep/Src/Sim/Collision.h" #include "Speed/Indep/Src/Sim/SimActivity.h" DECLARE_CONTAINER_TYPE(IVehiclePtrs); +// total size: 0xC +struct BlowByRecord { + float distance; // offset 0x0, size 0x4 + float speed; // offset 0x4, size 0x4 + Timer timestamp; // offset 0x8, size 0x4 +}; + // total size: 0x260 class SoundAI : public Sim::Activity, public Sim::Collision::IListener, public UTL::Collections::Singleton { public: @@ -350,7 +358,7 @@ class SoundAI : public Sim::Activity, public Sim::Collision::IListener, public U CarHeading mAILastKnown; // offset 0x1D4, size 0x8 PursuitState mPursuitState; // offset 0x1DC, size 0x4 QuadrantState mQuadrantState; // offset 0x1E0, size 0x4 - // BlowByRecord mRecentBlowby; // offset 0x1E4, size 0xC + BlowByRecord mRecentBlowby; // offset 0x1E4, size 0xC int mInfraction; // offset 0x1F0, size 0x4 int mNumCopsInWave; // offset 0x1F4, size 0x4 int mNumActiveCopCars; // offset 0x1F8, size 0x4 From 47dd0e1c620bfede6ab6e1914d9983d23d7ae5e5 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 15:45:14 +0100 Subject: [PATCH 063/691] doc: sub agent parallel work + only use sub agents for simple tasks --- AGENTS.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index fa020e417..7a64c0ddd 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -207,15 +207,17 @@ Do not batch up multiple percentage milestones into one commit — commit as eac ## Parallel Sub-Agent Matching -When working on a translation unit with multiple non-matching functions, you are encouraged to spawn sub-agents to work on individual functions in parallel. Each sub-agent should focus on **exactly one function** — do not assign a sub-agent more than one function at a time. +When working on a translation unit with multiple non-matching functions, use sub-agents selectively for **simple, small, isolated** functions. The main agent should keep ownership of the harder matching work instead of delegating it away. Each sub-agent should focus on **exactly one function** — do not assign a sub-agent more than one function at a time. **Limit: never run more than 5 sub-agents concurrently.** Spawning too many at once causes resource contention and makes it harder to reason about progress. Guidelines: -- Spawn a sub-agent per function for functions that are independent (no shared edits to the same source lines). +- Prefer solving difficult, high-risk, or cross-cutting functions yourself. Use sub-agents only for straightforward functions with small, well-bounded edits. +- Spawn a sub-agent per function only when the functions are independent (no shared edits to the same source lines). - Each sub-agent must use `build-unit.py` for parallel-safe compilation (never plain `ninja`). -- Wait for a batch of sub-agents to finish before spawning the next batch. -- After all sub-agents in a batch complete, check the updated match percentage and commit if it improved. +- Do **not** sit idle waiting for sub-agents to finish. While they run, continue investigating or implementing other independent work in parallel. +- Before applying a sub-agent's result, re-read the touched area and make sure it still fits the current state of the TU. +- After a useful sub-agent result lands, check the updated match percentage and commit if it improved. ## Matching Philosophy From 417001734091659045671f2b38e898a915aa7ff8 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 15:56:59 +0100 Subject: [PATCH 064/691] 75%: improve CDAction Update functions, AverageAir, CDActionDrive::Update - Restructure CDActionTrackCop/TrackCar/Showcase::Update: - Use early returns instead of if/else - Fix mVehicle null check with QueryInterface return value - Write eSwizzleWorldVector output to mat.v3 instead of cg - All three at 95.6% (up from 78.5%) - AverageAir restructured with early returns (from sub-agent) - CDActionDrive::Update improvements (from sub-agent) - Fix CameraMover vtable: keep RenderCarPOV before OutsidePOV - Add bLength(bVector2&) overload, fix bClamp int order - Fix WWorldPos::OnValidFace and WCollisionMgr::HitSomething Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Src/Camera/Actions/CDActionDrive.cpp | 25 +-- .../Src/Camera/Actions/CDActionShowcase.cpp | 35 +-- .../Src/Camera/Actions/CDActionTrackCar.cpp | 35 +-- .../Src/Camera/Actions/CDActionTrackCop.cpp | 35 +-- src/Speed/Indep/Src/Camera/CameraAI.cpp | 200 +++++++++--------- src/Speed/Indep/Src/World/WCollisionMgr.h | 2 +- src/Speed/Indep/Src/World/WWorldPos.h | 2 +- src/Speed/Indep/bWare/Inc/bMath.hpp | 7 +- 8 files changed, 174 insertions(+), 167 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index eda941979..74f723f1e 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -327,22 +327,22 @@ void CDActionDrive::Update(float dT) { } if (mMover->OutsidePOV() && GRaceStatus::Exists()) { - if (false) { // TODO: false + if (GRaceStatus::Get().GetIsTimeLimited()) { if (GRaceStatus::Get().GetRaceTimeRemaining() <= 0.0f) { ISimable *playerSim = mPlayer->GetSimable(); GRacerInfo *racerInfo = GRaceStatus::Get().GetRacerInfo(playerSim); - if (racerInfo != nullptr && !false) { // TODO: false + if (racerInfo != nullptr && !racerInfo->IsFinishedRacing()) { return; } } } + } - if (GRaceStatus::Exists()) { - ISimable *playerSim = mPlayer->GetSimable(); - GRacerInfo *racerInfo = GRaceStatus::Get().GetRacerInfo(playerSim); - if (racerInfo != nullptr && false) { // TODO: false - return; - } + if (GRaceStatus::Exists()) { + ISimable *playerSim = mPlayer->GetSimable(); + GRacerInfo *racerInfo = GRaceStatus::Get().GetRacerInfo(playerSim); + if (racerInfo != nullptr && racerInfo->GetCameraDetached()) { + return; } } @@ -374,7 +374,7 @@ void CDActionDrive::Update(float dT) { s = 1.0f - s * s; float targetsize = bSqrt(s); bVector2 target(copdir.z * targetsize, copdir.x * targetsize); - if (bLength(&target) < 10.0f) { + if (bLength(target) < 10.0f) { mAnchor->SetCloseToRoadBlock(true); gCamCloseToRoadBlock = true; break; @@ -550,10 +550,7 @@ void CDActionDrive::Update(float dT) { mAnchor->SetGroundCollision(mGroundCollisionTime / mMaxCollisionTime); mAnchor->SetObjectCollision(mObjectCollisionTime / mMaxCollisionTime); - float zoom_input = mGameBreakerScale; - if (mGameBreakerScale - mCinematicMomementTimer < 0.0f) { - zoom_input = mCinematicMomementTimer; - } + float zoom_input = bMax(mGameBreakerScale, mCinematicMomementTimer); mAnchor->SetZoom(1.0f - zoom_input * 0.1f); mAnchor->Update(dT, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); @@ -577,7 +574,7 @@ void CDActionDrive::Update(float dT) { explosion_dir = bNormalize(dir); float force = -explosion->GetExpansionSpeed() / dT; bVector3 acc; - bScale(&acc, &explosion_dir, force); + acc = bScale(explosion_dir, force); MaybeCameraShake(mViewID - 1, &acc); } } diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp index 7d57b64c2..4775f6e02 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp @@ -182,23 +182,26 @@ void CDActionShowcase::Update(float dT) { Detach(mVehicle); mVehicle = nullptr; } - } else { - AquireCar(); - if (mTarget.IsValid()) { - bMatrix4 mat(*mTarget.GetMatrix()); - - ICollisionBody *irbc = nullptr; - mVehicle->QueryInterface(&irbc); - if (irbc != nullptr) { - IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); - UVector3 cg(irbc->GetCenterOfGravity()); - irb->ConvertLocalToWorld(cg, false); - cg += irb->GetPosition(); - eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(cg)); - } + return; + } + + AquireCar(); + if (!mTarget.IsValid()) { + return; + } - mAnchor->Update(dT, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); + bMatrix4 mat(*mTarget.GetMatrix()); + + ICollisionBody *irbc; + if (mVehicle != nullptr) { + if (mVehicle->QueryInterface(&irbc)) { + IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); + UVector3 cg(irbc->GetCenterOfGravity()); + irb->ConvertLocalToWorld(cg, false); + cg += irb->GetPosition(); + eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(mat.v3)); } } - mMover->Update(dT); + + mAnchor->Update(dT, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); } diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp index 23cbc8e97..5b81e2100 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp @@ -183,25 +183,28 @@ void CDActionTrackCar::Update(float dT) { Detach(mVehicle); mVehicle = nullptr; } - } else { - AquireCar(); - if (mTarget.IsValid()) { - bMatrix4 mat(*mTarget.GetMatrix()); - - ICollisionBody *irbc = nullptr; - mVehicle->QueryInterface(&irbc); - if (irbc != nullptr) { - IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); - UVector3 cg(irbc->GetCenterOfGravity()); - irb->ConvertLocalToWorld(cg, false); - cg += irb->GetPosition(); - eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(cg)); - } + return; + } + + AquireCar(); + if (!mTarget.IsValid()) { + return; + } - mAnchor->Update(dT, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); + bMatrix4 mat(*mTarget.GetMatrix()); + + ICollisionBody *irbc; + if (mVehicle != nullptr) { + if (mVehicle->QueryInterface(&irbc)) { + IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); + UVector3 cg(irbc->GetCenterOfGravity()); + irb->ConvertLocalToWorld(cg, false); + cg += irb->GetPosition(); + eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(mat.v3)); } } - mMover->Update(dT); + + mAnchor->Update(dT, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); } bool CDActionTrackCar::GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) { diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp index 5762301e9..267062066 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp @@ -191,25 +191,28 @@ void CDActionTrackCop::Update(float dT) { Detach(mVehicle); mVehicle = nullptr; } - } else { - AquireCar(); - if (mTarget.IsValid()) { - bMatrix4 mat(*mTarget.GetMatrix()); - - ICollisionBody *irbc = nullptr; - mVehicle->QueryInterface(&irbc); - if (irbc != nullptr) { - IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); - UVector3 cg(irbc->GetCenterOfGravity()); - irb->ConvertLocalToWorld(cg, false); - cg += irb->GetPosition(); - eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(cg)); - } + return; + } + + AquireCar(); + if (!mTarget.IsValid()) { + return; + } - mAnchor->Update(dT, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); + bMatrix4 mat(*mTarget.GetMatrix()); + + ICollisionBody *irbc; + if (mVehicle != nullptr) { + if (mVehicle->QueryInterface(&irbc)) { + IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); + UVector3 cg(irbc->GetCenterOfGravity()); + irb->ConvertLocalToWorld(cg, false); + cg += irb->GetPosition(); + eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(mat.v3)); } } - mMover->Update(dT); + + mAnchor->Update(dT, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); } bool CDActionTrackCop::GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) { diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index 520d440f5..ff8429604 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -34,7 +34,7 @@ static float kEndPursuitThreshold = 0.0f; static float kEndPursuitValue = -1.0f; static float kJumpSpeedHigh = 100.0f; static float kJumpSpeedLow = 80.0f; -static float kJumpDuration = 5.0f; +static const float kJumpDuration = 5.0f; static const float Tweak_JumpCamHighestAirTresh[2] = {2.5f, 1.8f}; static const float Tweak_JumpCamLongestAirTresh[2] = {25.0f, 15.0f}; @@ -209,9 +209,7 @@ void CameraAI::Director::SelectAction() { if (nis2 != nullptr) { nis2->FireEventTag("CameraFinished"); } - UCrc32 port(0x20d60dbf); - MICECameraFinished finishedMsg; - finishedMsg.Post(port); + MICECameraFinished().Post(UCrc32(0x20d60dbf)); } } } @@ -360,109 +358,108 @@ void CameraAI::MaybeKillPursuitCam(unsigned int id) { static float AverageAir(ISimable *isimable, float fSeconds, float *pHighest, float *pLongest) { IRigidBody *irb = isimable->GetRigidBody(); - if (irb != nullptr) { - ICollisionBody *irbc; - if (isimable->QueryInterface(&irbc)) { - float fSpeed = irb->GetSpeed(); - if (fSpeed >= 1.0f) { - int nSteps = static_cast(fSpeed * fSeconds * 0.5f); - if (nSteps > 0) { - ISuspension *isuspension; - IVehicle *vehicle; - if (isimable->QueryInterface(&isuspension) && isimable->QueryInterface(&vehicle)) { - UMath::Vector3 p = UMath::Vector3::kZero; - - for (unsigned int j = 0; j < isuspension->GetNumWheels(); j++) { - UMath::Vector3 wp = isuspension->GetWheelPos(j); - const UMath::Vector3 &upVec = irbc->GetUpVector(); - float compression = isuspension->GetCompression(j); - UMath::ScaleAdd(upVec, -compression, wp, wp); - UMath::ScaleAdd(wp, 0.25f, p, p); - } + if (irb == nullptr) return 0.0f; - UMath::Vector4 vNormal = irbc->GetGroundNormal(); - WWorldPos pTopo = isimable->GetWPos(); - pTopo.SetTolerance(5.0f); + ICollisionBody *irbc; + if (!isimable->QueryInterface(&irbc)) return 0.0f; - float fElevation = pTopo.HeightAtPoint(p); - float fAirSum = 0.0f; - float fAirMax = bMax(0.0f, p.y - fElevation); - float fStep = fSeconds / static_cast(nSteps); - float fAirTime = 0.0f; - float fDeparture = 0.0f; + float fSpeed = irb->GetSpeed(); + if (fSpeed < 1.0f) return 0.0f; - if (0.0f < fAirMax) { - fDeparture = -fStep; - fAirTime = fStep; - } + int nSteps = static_cast(fSpeed * fSeconds * 0.5f); + if (nSteps <= 0) return 0.0f; - Attrib::Gen::pvehicle attributes(vehicle->GetVehicleAttributes()); - Attrib::Gen::chassis chassis(attributes.chassis(0), 0, nullptr); - - float fDownForce = Physics::Info::AerodynamicDownforce(chassis, fSpeed); - float gravity = irbc->GetGravity(); - float fDownAccel = gravity + (-fDownForce / irb->GetMass()); - - UMath::Vector3 a = UMath::Vector3Make(0.0f, fDownAccel, 0.0f); - - const UMath::Vector3 &linVel = irb->GetLinearVelocity(); - UMath::Vector3 v; - v.x = linVel.x; - v.y = linVel.y; - v.z = linVel.z; - - UMath::Vector3 pNew; - UMath::ScaleAdd(v, 0.5f, p, pNew); - - const float tbarr = 1.0f; - - UMath::Vector4 seg[2]; - seg[0] = UMath::Vector4Make(p, tbarr); - seg[1] = UMath::Vector4Make(pNew, tbarr); - - WCollisionMgr::WorldCollisionInfo cInfo; - WCollisionMgr collMgr(0, 3); - collMgr.CheckHitWorld(seg, cInfo, 2); - - if (!cInfo.HitSomething()) { - int i = 1; - bool bHighest = pHighest != nullptr; - bool bLongest = pLongest != nullptr; - float fFuture = fAirTime; - - if (nSteps > 1) { - for (i = 1; i < nSteps; i++) { - fFuture = fStep * static_cast(i) - fDeparture; - UMath::ScaleAdd(a, fFuture * 0.5f, v, pNew); - UMath::ScaleAdd(pNew, fFuture, p, pNew); - - if (pTopo.Update(pNew, vNormal, true, nullptr, true)) { - if (pTopo.OnValidFace() && 0.5f <= vNormal.y) { - float fElevation = pTopo.HeightAtPoint(pNew); - float fAir = pNew.y - fElevation; - if (fAir <= 0.0f) break; - fAirMax = bMax(fAirMax, fAir); - fAirSum += fAir; - } - } - } - } + ISuspension *isuspension; + if (!isimable->QueryInterface(&isuspension)) return 0.0f; - if (bHighest) { - *pHighest = fAirMax; - } - if (bLongest) { - *pLongest = fFuture; - } + IVehicle *vehicle; + if (!isimable->QueryInterface(&vehicle)) return 0.0f; - return fAirSum / static_cast(i); - } - } + UMath::Vector3 p = UMath::Vector3::kZero; + + for (unsigned int j = 0; j < isuspension->GetNumWheels(); j++) { + UMath::Vector3 wp = isuspension->GetWheelPos(j); + const UMath::Vector3 &upVec = irbc->GetUpVector(); + float compression = isuspension->GetCompression(j); + UMath::ScaleAdd(upVec, -compression, wp, wp); + UMath::ScaleAdd(wp, 0.25f, p, p); + } + + UMath::Vector4 vNormal = irbc->GetGroundNormal(); + WWorldPos pTopo = isimable->GetWPos(); + pTopo.SetTolerance(5.0f); + + float fElevation = pTopo.HeightAtPoint(p); + float fAirSum = 0.0f; + float fAirMax = bMax(0.0f, p.y - fElevation); + float fStep = fSeconds / static_cast(nSteps); + float fAirTime = 0.0f; + float fDeparture = 0.0f; + + if (0.0f < fAirMax) { + fDeparture = -fStep; + fAirTime = fStep; + } + + Attrib::Gen::pvehicle attributes(vehicle->GetVehicleAttributes()); + Attrib::Gen::chassis chassis(attributes.chassis(0), 0, nullptr); + + float fDownForce = -Physics::Info::AerodynamicDownforce(chassis, fSpeed); + float gravity = irbc->GetGravity(); + float fDownAccel = gravity + fDownForce / irb->GetMass(); + + UMath::Vector3 a = UMath::Vector3Make(0.0f, fDownAccel, 0.0f); + + UMath::Vector3 v = irb->GetLinearVelocity(); + + UMath::Vector3 pNew; + UMath::ScaleAdd(v, 0.5f, p, pNew); + + const float tbarr = 1.0f; + + UMath::Vector4 seg[2]; + seg[0] = UMath::Vector4Make(p, tbarr); + seg[1] = UMath::Vector4Make(pNew, tbarr); + + WCollisionMgr::WorldCollisionInfo cInfo; + WCollisionMgr collMgr(0, 3); + collMgr.CheckHitWorld(seg, cInfo, 2); + + if (cInfo.HitSomething()) { + return 0.0f; + } + + int i = 1; + bool bHighest = pHighest != nullptr; + bool bLongest = pLongest != nullptr; + float fFuture = fAirTime; + + if (nSteps > 1) { + for (i = 1; i < nSteps; i++) { + fFuture = fStep * static_cast(i) - fDeparture; + UMath::ScaleAdd(a, fFuture * 0.5f, v, pNew); + UMath::ScaleAdd(pNew, fFuture, p, pNew); + + if (pTopo.Update(pNew, vNormal, true, nullptr, true)) { + if (pTopo.OnValidFace() && 0.5f <= vNormal.y) { + float fElevation = pTopo.HeightAtPoint(pNew); + float fAir = pNew.y - fElevation; + if (fAir <= 0.0f) break; + fAirMax = bMax(fAirMax, fAir); + fAirSum += fAir; } } } } - return 0.0f; + + if (bHighest) { + *pHighest = fAirMax; + } + if (bLongest) { + *pLongest = fFuture; + } + + return fAirSum / static_cast(i); } void CameraAI::MaybeKillJumpCam(unsigned int id) { @@ -598,11 +595,12 @@ void CameraAI::MaybeDoJumpCam(ISimable *isimable) { return; } int set = 0; - register TrackPathManager *tpm = &TheTrackPathManager; bVector3 position; - bConvertFromBond(position, isimable->GetPosition()); - if (tpm->FindZone( - reinterpret_cast(&position), TRACK_PATH_ZONE_JUMP_CAM, nullptr) != nullptr) { + TrackPathZone *zone = TheTrackPathManager.FindZone( + reinterpret_cast( + &bConvertFromBond(position, isimable->GetPosition())), + TRACK_PATH_ZONE_JUMP_CAM, nullptr); + if (zone != nullptr) { set = 1; } float highest = 0.0f; diff --git a/src/Speed/Indep/Src/World/WCollisionMgr.h b/src/Speed/Indep/Src/World/WCollisionMgr.h index bc2283471..2b0d4af33 100644 --- a/src/Speed/Indep/Src/World/WCollisionMgr.h +++ b/src/Speed/Indep/Src/World/WCollisionMgr.h @@ -34,7 +34,7 @@ class WCollisionMgr { fPad(0), // fCInst(nullptr) {} - bool HitSomething() const {} + bool HitSomething() const { return fType; } }; class ICollisionHandler { diff --git a/src/Speed/Indep/Src/World/WWorldPos.h b/src/Speed/Indep/Src/World/WWorldPos.h index 543970009..0d334b1fd 100644 --- a/src/Speed/Indep/Src/World/WWorldPos.h +++ b/src/Speed/Indep/Src/World/WWorldPos.h @@ -44,7 +44,7 @@ class WWorldPos { // bool OffEdge() const {} - bool OnValidFace() { return true; } + bool OnValidFace() const { return fFaceValid; } void ForceFaceValidity() {} diff --git a/src/Speed/Indep/bWare/Inc/bMath.hpp b/src/Speed/Indep/bWare/Inc/bMath.hpp index beb43382f..bac858178 100644 --- a/src/Speed/Indep/bWare/Inc/bMath.hpp +++ b/src/Speed/Indep/bWare/Inc/bMath.hpp @@ -162,10 +162,9 @@ inline float bCeil(float a) { } inline int bClamp(int a, int MINIMUM, int MAXIMUM) { - return bMin(bMax(a, MINIMUM), MAXIMUM); + return bMin(MAXIMUM, bMax(a, MINIMUM)); } -// TODO is this order correct? inline float bClamp(float a, float MINIMUM, float MAXIMUM) { return bMin(MAXIMUM, bMax(a, MINIMUM)); } @@ -270,6 +269,10 @@ inline float bLength(const bVector2 *v) { return bSqrt(x * x + y * y); } +inline float bLength(const bVector2 &v) { + return bLength(&v); +} + inline bVector2 bNormalize(const bVector2 &v) { bVector2 dest; bNormalize(&dest, &v); From 93dfcc4e8e081627fba2b8b3205241e9d6e977e7 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 16:00:21 +0100 Subject: [PATCH 065/691] 75.2%: implement CDActionDrive::Update GRaceStatus block, fix vtable, zoom bMax, POV inversion Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp | 6 +++--- src/Speed/Indep/Src/Camera/CameraMover.hpp | 6 +++--- src/Speed/Indep/bWare/Inc/bMath.hpp | 3 ++- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index 74f723f1e..b1329e05d 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -461,9 +461,7 @@ void CDActionDrive::Update(float dT) { if (settings != nullptr) { int pov_type = GetPOVTypeFromPlayerCamera(settings->CurCam); - if (mVehicle == nullptr || !mVehicle->QueryInterface(&iinput)) { - mMover->SetPovType(pov_type); - } else { + if (mVehicle != nullptr && mVehicle->QueryInterface(&iinput)) { static int old_pov = -1; if (iinput->IsPullBackButtonPressed()) { old_pov = pov_type; @@ -479,6 +477,8 @@ void CDActionDrive::Update(float dT) { mMover->SetPovType(pov_type); } } + } else { + mMover->SetPovType(pov_type); } } } diff --git a/src/Speed/Indep/Src/Camera/CameraMover.hpp b/src/Speed/Indep/Src/Camera/CameraMover.hpp index b68ae6197..ea87e811d 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.hpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.hpp @@ -363,10 +363,10 @@ class CameraMover : public bTNode, public WCollisionMgr::ICollision virtual void SetPovType(int pov_type) {} - virtual bool RenderCarPOV(); - virtual bool OutsidePOV(); + virtual bool RenderCarPOV(); + virtual float MinDistToWall(); virtual unsigned short GetLookbackAngle(); @@ -459,8 +459,8 @@ class CubicCameraMover : public CameraMover { virtual void SetLookBack(bool b); virtual void SetDisableLag(bool disable); virtual void SetPovType(int pov_type); - virtual bool RenderCarPOV(); virtual bool OutsidePOV(); + virtual bool RenderCarPOV(); virtual float MinDistToWall(); virtual unsigned short GetLookbackAngle(); virtual void ResetState(); diff --git a/src/Speed/Indep/bWare/Inc/bMath.hpp b/src/Speed/Indep/bWare/Inc/bMath.hpp index bac858178..7c556a4b2 100644 --- a/src/Speed/Indep/bWare/Inc/bMath.hpp +++ b/src/Speed/Indep/bWare/Inc/bMath.hpp @@ -162,9 +162,10 @@ inline float bCeil(float a) { } inline int bClamp(int a, int MINIMUM, int MAXIMUM) { - return bMin(MAXIMUM, bMax(a, MINIMUM)); + return bMin(bMax(a, MINIMUM), MAXIMUM); } +// TODO is this order correct? inline float bClamp(float a, float MINIMUM, float MAXIMUM) { return bMin(MAXIMUM, bMax(a, MINIMUM)); } From b2faa519cfde48ac0ec95e81bab774c78455414c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 16:02:11 +0100 Subject: [PATCH 066/691] 75.2%: document MaybeDoJumpCam dead store offset mismatch CameraAI::MaybeDoJumpCam is at 100.0% instruction match (244/244) with perfect DWARF match, but has a single dead store offset mismatch: GCC reuses a Vector4 temp slot (r1+0x70) instead of the _GetKind return slot (r1+0xa0) for the UCrc32 port temp. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraAI.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index ff8429604..60a05b805 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -430,8 +430,6 @@ static float AverageAir(ISimable *isimable, float fSeconds, float *pHighest, flo } int i = 1; - bool bHighest = pHighest != nullptr; - bool bLongest = pLongest != nullptr; float fFuture = fAirTime; if (nSteps > 1) { @@ -452,10 +450,10 @@ static float AverageAir(ISimable *isimable, float fSeconds, float *pHighest, flo } } - if (bHighest) { + if (pHighest != nullptr) { *pHighest = fAirMax; } - if (bLongest) { + if (pLongest != nullptr) { *pLongest = fFuture; } @@ -562,6 +560,8 @@ void CameraAI::MaybeDoPursuitCam(IVehicle *ivehicle) { cd->PursuitStart(); } +// NON-MATCHING: dead store offset mismatch (stw r0, 0xa0(r1) vs 0x70(r1)) +// GCC internal stack slot reuse picks Vector4 temp slot instead of _GetKind return slot void CameraAI::MaybeDoJumpCam(ISimable *isimable) { if (TheICEManager.IsEditorOn()) { return; From 5ec0d9d68274222dd4f17849e9c9c3f413e86f2b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 16:10:21 +0100 Subject: [PATCH 067/691] 75.2%: fix IPlayer vtable layout (add SetSettings and IsLocal) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraAI.cpp | 7 ++++--- src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp | 4 ++-- src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h | 3 +++ src/Speed/Indep/bWare/Inc/bMath.hpp | 2 +- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index 60a05b805..4757de672 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -393,12 +393,13 @@ static float AverageAir(ISimable *isimable, float fSeconds, float *pHighest, flo float fAirSum = 0.0f; float fAirMax = bMax(0.0f, p.y - fElevation); float fStep = fSeconds / static_cast(nSteps); - float fAirTime = 0.0f; + float fAirTime = fStep; float fDeparture = 0.0f; - if (0.0f < fAirMax) { + if (fAirMax <= 0.0f) { + fAirTime = 0.0f; + } else { fDeparture = -fStep; - fAirTime = fStep; } Attrib::Gen::pvehicle attributes(vehicle->GetVehicleAttributes()); diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp index ab06b32f0..8ef8c510b 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp @@ -73,8 +73,8 @@ struct ICETrack : public bTNode { } ICEData *GetKey(int n) { - if (n != UMath::Clamp(n, 0, NumKeys - 1)) return 0; - return &Keys[n]; + if (n == UMath::Clamp(n, 0, NumKeys - 1)) return &Keys[n]; + return 0; } char *GetName() { diff --git a/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h b/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h index 5ca7ada05..7660a8334 100644 --- a/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h +++ b/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h @@ -33,9 +33,12 @@ class IPlayer : public UTL::COM::IUnknown, public UTL::Collections::ListableSet< virtual ISimable *GetSimable() const; + virtual bool IsLocal() const; // TODO: unknown virtual at vtable+0x18 + virtual const UMath::Vector3 &GetPosition() const; virtual bool SetPosition(const UMath::Vector3 &position); virtual PlayerSettings *GetSettings() const; + virtual void SetSettings(const Attrib::Collection *settings); virtual int GetSettingsIndex() const; virtual IHud *GetHud() const; virtual void SetHud() const; // TODO fix params diff --git a/src/Speed/Indep/bWare/Inc/bMath.hpp b/src/Speed/Indep/bWare/Inc/bMath.hpp index 7c556a4b2..3fadf0d5c 100644 --- a/src/Speed/Indep/bWare/Inc/bMath.hpp +++ b/src/Speed/Indep/bWare/Inc/bMath.hpp @@ -162,7 +162,7 @@ inline float bCeil(float a) { } inline int bClamp(int a, int MINIMUM, int MAXIMUM) { - return bMin(bMax(a, MINIMUM), MAXIMUM); + return bMin(MAXIMUM, bMax(a, MINIMUM)); } // TODO is this order correct? From 6b26a261b57eef4aa66af1e61c00ec123f18b197 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 16:22:56 +0100 Subject: [PATCH 068/691] 95.8%: improve AverageAir match (early returns, HitSomething, OnValidFace, fDownForce negate) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraAI.cpp | 26 ++++++++++++------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index 4757de672..6862a660d 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -433,20 +433,18 @@ static float AverageAir(ISimable *isimable, float fSeconds, float *pHighest, flo int i = 1; float fFuture = fAirTime; - if (nSteps > 1) { - for (i = 1; i < nSteps; i++) { - fFuture = fStep * static_cast(i) - fDeparture; - UMath::ScaleAdd(a, fFuture * 0.5f, v, pNew); - UMath::ScaleAdd(pNew, fFuture, p, pNew); - - if (pTopo.Update(pNew, vNormal, true, nullptr, true)) { - if (pTopo.OnValidFace() && 0.5f <= vNormal.y) { - float fElevation = pTopo.HeightAtPoint(pNew); - float fAir = pNew.y - fElevation; - if (fAir <= 0.0f) break; - fAirMax = bMax(fAirMax, fAir); - fAirSum += fAir; - } + for (i = 1; i < nSteps; i++) { + fFuture = fStep * static_cast(i) - fDeparture; + UMath::ScaleAdd(a, fFuture * 0.5f, v, pNew); + UMath::ScaleAdd(pNew, fFuture, p, pNew); + + if (pTopo.Update(pNew, vNormal, true, nullptr, true)) { + if (pTopo.OnValidFace() && 0.5f <= vNormal.y) { + float fElevation = pTopo.HeightAtPoint(pNew); + float fAir = pNew.y - fElevation; + if (fAir <= 0.0f) break; + fAirMax = bMax(fAirMax, fAir); + fAirSum += fAir; } } } From ab08f4c13170c9d1aab5556c4d6fd64043dafc8d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 16:25:09 +0100 Subject: [PATCH 069/691] 75.4%: revert IPlayer vtable changes (broke FindPlayer and others) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .DS_Store | Bin 0 -> 6148 bytes src/Speed/Indep/Src/Camera/CameraAI.cpp | 5 ++--- src/Speed/Indep/Src/Camera/CameraMover.cpp | 3 +-- src/Speed/Indep/Src/Camera/CameraMover.hpp | 13 ++----------- src/Speed/Indep/Src/Misc/Table.hpp | 4 +++- src/Speed/Indep/Tools/Inc/ConversionUtil.hpp | 6 +++--- src/Speed/Indep/bWare/Inc/bMath.hpp | 5 +++-- 7 files changed, 14 insertions(+), 22 deletions(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f93ad8857d0e223bfc5694936234d2e28cdd8166 GIT binary patch literal 6148 zcmeH~O^O0R4256(0bw>SUDn0}c!NTm6U+rf8$l3Ui2FLaFR5&7XFW8-3#48pRq3B^ z(bWN9`{%F&)&N#?S8RP4nK54CgeR`JVYm#B^XY!Sc^b3a>j9nDcwf(Di3o^*2#A0P zh`@vh#39b}|7$|eq(>0}5ts%6|2`DDYfWukw^_-6!carimx`BHhde!QONkD2v(qf=u$hqs>q27VN8=wVzhKB3ms)|DBWegp!8 J1`+sE0xx3T6K((i literal 0 HcmV?d00001 diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index 6862a660d..f864e1c7c 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -394,12 +394,11 @@ static float AverageAir(ISimable *isimable, float fSeconds, float *pHighest, flo float fAirMax = bMax(0.0f, p.y - fElevation); float fStep = fSeconds / static_cast(nSteps); float fAirTime = fStep; - float fDeparture = 0.0f; + float fDeparture = -fStep; if (fAirMax <= 0.0f) { fAirTime = 0.0f; - } else { - fDeparture = -fStep; + fDeparture = 0.0f; } Attrib::Gen::pvehicle attributes(vehicle->GetVehicleAttributes()); diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 3ccd88f01..5f1756cb7 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -1267,9 +1267,8 @@ void CubicCameraMover::SetPovType(int pov_type) { if (pov_type != nPovTypeUsed) { bool old_outside = OutsidePovType(nPovTypeUsed); bool new_outside = OutsidePovType(pov_type); - bool reset = !new_outside || !old_outside; - bSnapNext = !!(bSnapNext | reset); + bSnapNext = !!(bSnapNext | (!new_outside || !old_outside)); nPovType = pov_type; } } diff --git a/src/Speed/Indep/Src/Camera/CameraMover.hpp b/src/Speed/Indep/Src/Camera/CameraMover.hpp index ea87e811d..419c4464b 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.hpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.hpp @@ -102,17 +102,8 @@ struct tCubic3D { void SetdVal(bVector3 *pV); void SetValDesired(bVector3 *pV); - void GetVal(bVector3 *pV) { - pV->x = x.Val; - pV->y = y.Val; - pV->z = z.Val; - } - - void GetValDesired(bVector3 *pV) { - pV->x = x.ValDesired; - pV->y = y.ValDesired; - pV->z = z.ValDesired; - } + void GetVal(bVector3 *pV); + void GetValDesired(bVector3 *pV); void Snap() { x.Snap(); diff --git a/src/Speed/Indep/Src/Misc/Table.hpp b/src/Speed/Indep/Src/Misc/Table.hpp index e7ff1e593..3df07e6ee 100644 --- a/src/Speed/Indep/Src/Misc/Table.hpp +++ b/src/Speed/Indep/Src/Misc/Table.hpp @@ -128,7 +128,9 @@ class AverageBase { template class tAverage : public AverageBase { public: tAverage(int nSlots) : AverageBase(sizeof(T), nSlots) { - pData = static_cast(AverageBase::Allocate(sizeof(T) * nSlots, nullptr)); + pData = new (__FILE__, __LINE__) T[nSlots]; + Total = pData[0]; + Average = pData[0]; } virtual ~tAverage() { diff --git a/src/Speed/Indep/Tools/Inc/ConversionUtil.hpp b/src/Speed/Indep/Tools/Inc/ConversionUtil.hpp index d3d03d821..c1521fe9f 100644 --- a/src/Speed/Indep/Tools/Inc/ConversionUtil.hpp +++ b/src/Speed/Indep/Tools/Inc/ConversionUtil.hpp @@ -148,9 +148,9 @@ void RightToLeftVector3(const T1 &in, T2 &out) { template void RightToLeftMatrix4(const T1 &in, T2 &out) { T2 tmp; - Copy4(tmp[0], in[0]); - Copy4(tmp[1], in[1]); - Copy4(tmp[2], in[2]); + Copy4(tmp[0], in[1]); + Copy4(tmp[1], in[2]); + Copy4(tmp[2], in[0]); Copy4(tmp[3], in[3]); Scale3(tmp[0], -1.0f); RightToLeftVector4(tmp[0], out[0]); diff --git a/src/Speed/Indep/bWare/Inc/bMath.hpp b/src/Speed/Indep/bWare/Inc/bMath.hpp index 3fadf0d5c..74c1b771c 100644 --- a/src/Speed/Indep/bWare/Inc/bMath.hpp +++ b/src/Speed/Indep/bWare/Inc/bMath.hpp @@ -90,7 +90,8 @@ inline float bSqrt(float x) { } inline int bMin(int a, int b) { - return a > b ? b : a; + if (b - a < 0) return b; + return a; } inline float bMin(float a, float b) { @@ -162,7 +163,7 @@ inline float bCeil(float a) { } inline int bClamp(int a, int MINIMUM, int MAXIMUM) { - return bMin(MAXIMUM, bMax(a, MINIMUM)); + return bMin(bMax(a, MINIMUM), MAXIMUM); } // TODO is this order correct? From c0f4f76c8aa7979f33a5ed7e2064f88c3d20c1e2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 16:25:58 +0100 Subject: [PATCH 070/691] 76%: match SetPovType, fix RightToLeftMatrix4 row order, improve AverageAir/Update Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraAI.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index f864e1c7c..6862a660d 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -394,11 +394,12 @@ static float AverageAir(ISimable *isimable, float fSeconds, float *pHighest, flo float fAirMax = bMax(0.0f, p.y - fElevation); float fStep = fSeconds / static_cast(nSteps); float fAirTime = fStep; - float fDeparture = -fStep; + float fDeparture = 0.0f; if (fAirMax <= 0.0f) { fAirTime = 0.0f; - fDeparture = 0.0f; + } else { + fDeparture = -fStep; } Attrib::Gen::pvehicle attributes(vehicle->GetVehicleAttributes()); From ed4a6475d04452781aacb65a8a39bdb4daf7f1e7 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 16:26:54 +0100 Subject: [PATCH 071/691] chore: remove .DS_Store Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index f93ad8857d0e223bfc5694936234d2e28cdd8166..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~O^O0R4256(0bw>SUDn0}c!NTm6U+rf8$l3Ui2FLaFR5&7XFW8-3#48pRq3B^ z(bWN9`{%F&)&N#?S8RP4nK54CgeR`JVYm#B^XY!Sc^b3a>j9nDcwf(Di3o^*2#A0P zh`@vh#39b}|7$|eq(>0}5ts%6|2`DDYfWukw^_-6!carimx`BHhde!QONkD2v(qf=u$hqs>q27VN8=wVzhKB3ms)|DBWegp!8 J1`+sE0xx3T6K((i From 3fd1d1d8f84c819e7686c5449ec1cd54812b5f30 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 16:28:22 +0100 Subject: [PATCH 072/691] 75.4%: properly revert IPlayer vtable changes (restore FindPlayer and Construct) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .gitignore | 1 + src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 547d049c6..4144c1240 100644 --- a/.gitignore +++ b/.gitignore @@ -49,3 +49,4 @@ vc80.pdb undefined_funcs_auto.txt undefined_syms_auto.txt .splache +.DS_Store diff --git a/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h b/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h index 7660a8334..5ca7ada05 100644 --- a/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h +++ b/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h @@ -33,12 +33,9 @@ class IPlayer : public UTL::COM::IUnknown, public UTL::Collections::ListableSet< virtual ISimable *GetSimable() const; - virtual bool IsLocal() const; // TODO: unknown virtual at vtable+0x18 - virtual const UMath::Vector3 &GetPosition() const; virtual bool SetPosition(const UMath::Vector3 &position); virtual PlayerSettings *GetSettings() const; - virtual void SetSettings(const Attrib::Collection *settings); virtual int GetSettingsIndex() const; virtual IHud *GetHud() const; virtual void SetHud() const; // TODO fix params From f65873cc7ee26dd086d2388d5df099f971e7945c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 16:31:35 +0100 Subject: [PATCH 073/691] 76%: match ChooseGoodCamera, improve CubicCameraMover ctor Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Movers/Cubic.cpp | 22 ++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp index 7b181dc2e..7861ce0ad 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp @@ -84,7 +84,11 @@ void tTable::Blend(CubicPovData *dest, CubicPovData *a, CubicPovDa } CubicCameraMover::CubicCameraMover(int nView, CameraAnchor *p_car, int pov_type, bool smooth, bool disable_lag, bool look_back, bool perfect_focus) - : CameraMover(nView, CM_DRIVE_CUBIC) { + : CameraMover(nView, CM_DRIVE_CUBIC) // + , bFirstTime(1) // + , tLastGrounded(WorldTimer - Timer(8000)) // + , tLastUnderVehicle(WorldTimer - Timer(0x1900)) // + , tLastGearChange(WorldTimer - Timer(6000)) { bSnapNext = 0; bAccelLag = !disable_lag; bLookBack = look_back; @@ -93,21 +97,17 @@ CubicCameraMover::CubicCameraMover(int nView, CameraAnchor *p_car, int pov_type, nPovType = pov_type; nPovTypeUsed = pov_type; fIgnoreSetSnapNextTimer = 0.0f; - tLastGrounded = WorldTimer - Timer(8000); - tLastUnderVehicle = WorldTimer - Timer(0x1900); - bFirstTime = 1; - tLastGearChange = WorldTimer - Timer(6000); POV *pov = pCar->GetPov(nPovType); CubicPovData pov_data; - aCubicPovTables[nPovTypeUsed].GetValue(&pov_data, 0.0f); + aCubicPovTables[nPovType].GetValue(&pov_data, 0.0f); - pFov = new (__FILE__, __LINE__) tCubic1D(0, pov_data.fFovDuration); - pEye = new (__FILE__, __LINE__) tCubic3D(0, pov_data.fEyeDuration); - pLook = new (__FILE__, __LINE__) tCubic3D(0, pov_data.fLookDuration); - pForward = new (__FILE__, __LINE__) tCubic3D(0, pov_data.GetForwardDuration()); - pUp = new (__FILE__, __LINE__) tCubic3D(0, pov_data.GetForwardDuration()); + pFov = new (__FILE__, __LINE__) tCubic1D(1, pov_data.fFovDuration); + pEye = new (__FILE__, __LINE__) tCubic3D(1, pov_data.fEyeDuration); + pLook = new (__FILE__, __LINE__) tCubic3D(1, pov_data.fLookDuration); + pForward = new (__FILE__, __LINE__) tCubic3D(1, pov_data.GetForwardDuration()); + pUp = new (__FILE__, __LINE__) tCubic3D(1, pov_data.GetForwardDuration()); pAvgAccel = new tAverage(5); From 686a822971f3d19e0317b2a1b9dffe78999d419b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 16:37:32 +0100 Subject: [PATCH 074/691] 76%: match PursuitStart (use Send instead of Deliver) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Src/Camera/Actions/CDActionDrive.cpp | 2 +- src/Speed/Indep/Src/Camera/CameraAI.cpp | 5 +-- src/Speed/Indep/Src/Camera/CameraMover.hpp | 4 ++ src/Speed/Indep/Src/Camera/Movers/Cubic.cpp | 10 ++--- .../Indep/Src/Camera/Movers/DebugWorld.cpp | 38 +++++++++---------- .../Src/Interfaces/SimEntities/IPlayer.h | 4 +- src/Speed/Indep/Src/Misc/Timer.hpp | 4 +- src/Speed/Indep/Src/World/Track.hpp | 14 +++++++ 8 files changed, 49 insertions(+), 32 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index b1329e05d..de8f40e7a 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -84,7 +84,7 @@ CameraAI::Action *CDActionDrive::Construct(CameraAI::Director *director) { goto null_return; } - if (player->GetSettingsIndex() == 0) { + if (player->GetSettings() == nullptr) { goto null_return; } diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index 6862a660d..e30731fd1 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -247,12 +247,11 @@ void CameraAI::Director::PursuitStart() { if (mPursuitStartTime <= 0.0f) { { MGamePlayMoment msg(UMath::Vector4::kZero, UMath::Vector4::kZero, UMath::Vector4::kZero, 0, 0x88bff834); - msg.Deliver(); + msg.Send(UCrc32("MomentStrm")); } { MMiscSound snd(1); - snd.SetID(Attrib::StringHash32("play")); - snd.Deliver(); + snd.Send(UCrc32("play")); } mPursuitStartTime = 5.0f; diff --git a/src/Speed/Indep/Src/Camera/CameraMover.hpp b/src/Speed/Indep/Src/Camera/CameraMover.hpp index 419c4464b..9db41feef 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.hpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.hpp @@ -334,6 +334,10 @@ class CameraMover : public bTNode, public WCollisionMgr::ICollision return pCamera->GetPosition(); } + bVector3 *GetDirection() { + return pCamera->GetDirection(); + } + Camera *GetCamera() { return pCamera; } diff --git a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp index 7861ce0ad..d4f8c5f20 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp @@ -84,11 +84,7 @@ void tTable::Blend(CubicPovData *dest, CubicPovData *a, CubicPovDa } CubicCameraMover::CubicCameraMover(int nView, CameraAnchor *p_car, int pov_type, bool smooth, bool disable_lag, bool look_back, bool perfect_focus) - : CameraMover(nView, CM_DRIVE_CUBIC) // - , bFirstTime(1) // - , tLastGrounded(WorldTimer - Timer(8000)) // - , tLastUnderVehicle(WorldTimer - Timer(0x1900)) // - , tLastGearChange(WorldTimer - Timer(6000)) { + : CameraMover(nView, CM_DRIVE_CUBIC) { bSnapNext = 0; bAccelLag = !disable_lag; bLookBack = look_back; @@ -97,6 +93,10 @@ CubicCameraMover::CubicCameraMover(int nView, CameraAnchor *p_car, int pov_type, nPovType = pov_type; nPovTypeUsed = pov_type; fIgnoreSetSnapNextTimer = 0.0f; + tLastGrounded = WorldTimer - Timer(8000); + tLastUnderVehicle = WorldTimer - Timer(0x1900); + bFirstTime = 1; + tLastGearChange = WorldTimer - Timer(6000); POV *pov = pCar->GetPov(nPovType); diff --git a/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp b/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp index 43b1b5a5f..c551ac66a 100644 --- a/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp @@ -4,6 +4,7 @@ #include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" #include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" #include "Speed/Indep/Src/Misc/Table.hpp" +#include "Speed/Indep/Src/World/Track.hpp" #include "Speed/Indep/Src/World/WCollisionMgr.h" #include "Speed/Indep/bWare/Inc/bFunk.hpp" @@ -162,6 +163,7 @@ void DebugWorldCameraMover::JoyHandler() { void DebugWorldCameraMover::Update(float dT) { if (JumpToPosition.y != 0.0f) { + TopologyCoordinate topology_coordinate; JumpToPosition.z += 100.0f; bVector3 dir = Eye - Look; bVector3 eyelook; @@ -189,24 +191,19 @@ void DebugWorldCameraMover::Update(float dT) { unsigned short hAngle = bFixATan(static_cast(eyelook.x * 65536.0f), static_cast(eyelook.y * 65536.0f)); - if (TurnHInc != 0 || HeightInc != 0.0f) { - float xylen = eyelook.x * eyelook.x + eyelook.y * eyelook.y; + if (TurnHInc != 0 || TurnVInc != 0 || HeightInc != 0.0f) { + bVector2 *horiz = reinterpret_cast(&eyelook); + float xylen = bLength(horiz); hAngle = (hAngle + static_cast(static_cast(TurnHInc) * dT)) & 0xffff; - if (xylen > 0.0001f) { - float invlen = 1.0f / __builtin_sqrtf(xylen); - invlen = -(xylen * invlen * invlen - 3.0f) * invlen * 0.5f + invlen; - xylen = (-(xylen * invlen * invlen - 3.0f) * invlen * 0.5f + invlen) * xylen; - } - unsigned short pitch = bFixATan(static_cast(xylen * 65536.0f), static_cast(eyelook.z * 65536.0f)); pitch = (pitch + static_cast(static_cast(TurnVInc) * dT)) & 0xffff; - if (pitch - 0x3ff7 < 0x4009) { + if (static_cast(pitch - 0x3ff7) < 0x4009u) { pitch = 0x3ff6; } - if (((pitch - 0x8000) & 0xffff) < 0x400a) { + if ((static_cast(pitch - 0x8000) & 0xffffu) < 0x400au) { pitch = 0xc00a; } @@ -220,7 +217,7 @@ void DebugWorldCameraMover::Update(float dT) { } float hi = fi * dT; - Eye.z += hi; + Eye = Eye + bVector3(0.0f, 0.0f, hi); float dist = 100.0f; Look.x = bCos(pitch) * (bCos(hAngle) * dist) + Eye.x; @@ -237,8 +234,8 @@ void DebugWorldCameraMover::Update(float dT) { } else { fi = ForwardInc; } - float amount = fi * dT; - bVector3 forward = *GetCamera()->GetDirection() * amount; + fi *= dT; + bVector3 forward = *GetDirection() * fi; Eye += forward; Look += forward; } else if (ForwardAnalogInc != 0.0f) { @@ -250,8 +247,8 @@ void DebugWorldCameraMover::Update(float dT) { } else { fi = ForwardAnalogInc; } - float amount = fi * dT; - bVector3 forward = *GetCamera()->GetDirection() * amount; + fi *= dT; + bVector3 forward = *GetDirection() * fi; Eye += forward; Look += forward; } @@ -265,21 +262,24 @@ void DebugWorldCameraMover::Update(float dT) { } else { si = StrafeInc; } + si *= dT; unsigned short sAngle = (hAngle + 0x4000) & 0xffff; - float cval = bCos(sAngle) * (si * dT); - float sval = bSin(sAngle) * (si * dT); + float cval = bCos(sAngle) * si; + float sval = bSin(sAngle) * si; bVector3 rl(cval, sval, 0.0f); Eye += rl; Look += rl; } bVector3 up; - ComputeBankedUpVector(&up, &Eye, &Look, 0); + unsigned short bank = 0; + ComputeBankedUpVector(&up, &Eye, &Look, bank); bMatrix4 m; eCreateLookAtMatrix(&m, Eye, Look, up); if (Camera::StopUpdating == 0) { - GetCamera()->SetFieldOfView(0x32dc); + unsigned short fov = 0x32dc; + GetCamera()->SetFieldOfView(fov); } GetCamera()->SetCameraMatrix(m, dT); } diff --git a/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h b/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h index 5ca7ada05..780edb7e9 100644 --- a/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h +++ b/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h @@ -35,8 +35,8 @@ class IPlayer : public UTL::COM::IUnknown, public UTL::Collections::ListableSet< virtual const UMath::Vector3 &GetPosition() const; virtual bool SetPosition(const UMath::Vector3 &position); - virtual PlayerSettings *GetSettings() const; virtual int GetSettingsIndex() const; + virtual PlayerSettings *GetSettings() const; virtual IHud *GetHud() const; virtual void SetHud() const; // TODO fix params virtual void SetRenderPort(int renderport); @@ -45,6 +45,8 @@ class IPlayer : public UTL::COM::IUnknown, public UTL::Collections::ListableSet< virtual int GetControllerPort() const; virtual IFeedback *GetFFB(); virtual ISteeringWheel *GetSteeringDevice(); + virtual void Unknown_vtable_0x78(); // TODO: unknown virtual + virtual void Unknown_vtable_0x80(); // TODO: unknown virtual virtual bool InGameBreaker() const; virtual bool CanRechargeNOS() const; virtual void ResetGameBreaker(bool full); diff --git a/src/Speed/Indep/Src/Misc/Timer.hpp b/src/Speed/Indep/Src/Misc/Timer.hpp index 621ce9360..c0a790f6d 100644 --- a/src/Speed/Indep/Src/Misc/Timer.hpp +++ b/src/Speed/Indep/Src/Misc/Timer.hpp @@ -8,9 +8,7 @@ // total size: 0x4 class Timer { public: - Timer() { - this->PackedTime = 0; - } + Timer() {} Timer(float seconds) { this->PackedTime = static_cast(seconds * 4000); diff --git a/src/Speed/Indep/Src/World/Track.hpp b/src/Speed/Indep/Src/World/Track.hpp index 31877c32d..79a64f357 100644 --- a/src/Speed/Indep/Src/World/Track.hpp +++ b/src/Speed/Indep/Src/World/Track.hpp @@ -5,6 +5,20 @@ #pragma once #endif +#include "Speed/Indep/bWare/Inc/bList.hpp" +#include "Speed/Indep/bWare/Inc/bMath.hpp" + +// total size: 0x8 +struct TopologyCoordinate : public bTNode { + TopologyCoordinate() {} + + ~TopologyCoordinate() {} + + void SetInterestBBox(const bVector3 *position, float radius, const bVector3 *velocity) {} + + bool IsLoaded() { return false; } +}; + void EstablishRemoteCaffeineConnection(); #endif From 50785f83d87c430555bc4a5b279011d3624b6905 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 16:37:44 +0100 Subject: [PATCH 075/691] 75.4%: fix IPlayer vtable (swap GetSettings/GetSettingsIndex, add 2 stubs before InGameBreaker) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Misc/Table.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Misc/Table.hpp b/src/Speed/Indep/Src/Misc/Table.hpp index 3df07e6ee..cfb00f049 100644 --- a/src/Speed/Indep/Src/Misc/Table.hpp +++ b/src/Speed/Indep/Src/Misc/Table.hpp @@ -129,8 +129,9 @@ template class tAverage : public AverageBase { public: tAverage(int nSlots) : AverageBase(sizeof(T), nSlots) { pData = new (__FILE__, __LINE__) T[nSlots]; - Total = pData[0]; + bMemSet(pData, 0, sizeof(T) * nSlots); Average = pData[0]; + Total = pData[0]; } virtual ~tAverage() { From be36dc056cf682576028dc0bae6846b78677859a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 16:46:48 +0100 Subject: [PATCH 076/691] 98.4%: match AverageAir structure (temporary WCollisionMgr, inline gravity) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraAI.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index e30731fd1..23b07b4b6 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -405,8 +405,7 @@ static float AverageAir(ISimable *isimable, float fSeconds, float *pHighest, flo Attrib::Gen::chassis chassis(attributes.chassis(0), 0, nullptr); float fDownForce = -Physics::Info::AerodynamicDownforce(chassis, fSpeed); - float gravity = irbc->GetGravity(); - float fDownAccel = gravity + fDownForce / irb->GetMass(); + float fDownAccel = irbc->GetGravity() + fDownForce / irb->GetMass(); UMath::Vector3 a = UMath::Vector3Make(0.0f, fDownAccel, 0.0f); @@ -422,8 +421,7 @@ static float AverageAir(ISimable *isimable, float fSeconds, float *pHighest, flo seg[1] = UMath::Vector4Make(pNew, tbarr); WCollisionMgr::WorldCollisionInfo cInfo; - WCollisionMgr collMgr(0, 3); - collMgr.CheckHitWorld(seg, cInfo, 2); + WCollisionMgr(0, 3).CheckHitWorld(seg, cInfo, 2); if (cInfo.HitSomething()) { return 0.0f; From 890a638927ca2d0c002048ee749d475ef08aa6f1 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 16:47:13 +0100 Subject: [PATCH 077/691] 77%: match CDActionDrive constructor, fix IPlayer vtable layout, fix mMaxCollisionTime/mPulseTimer constants Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Src/Camera/Actions/CDActionDrive.cpp | 4 +-- src/Speed/Indep/Src/Camera/Movers/Cubic.cpp | 36 ++++++++----------- .../Indep/Src/Camera/Movers/DebugWorld.cpp | 9 ++--- 3 files changed, 22 insertions(+), 27 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index de8f40e7a..5644babd2 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -117,7 +117,7 @@ CDActionDrive::CDActionDrive(CameraAI::Director *director, IPlayer *player) mDampCollisionTime = 0.0f; mGroundCollisionTime = 0.0f; mObjectCollisionTime = 0.0f; - mMaxCollisionTime = 0.5f; + mMaxCollisionTime = 2.0f; mPulseTimer = 0.0f; mCinematicMomementTimer = 0.0f; mCinematicMomementTimerInc = false; @@ -129,7 +129,7 @@ CDActionDrive::CDActionDrive(CameraAI::Director *director, IPlayer *player) gCinematicMomementCamera = true; mCinematicMomementTimer = 1.0f; kCinematicMomementSeconds = mMaxCollisionTime; - mPulseTimer = 0.5f; + mPulseTimer = 0.3f; } mAttachments = new Sim::Attachments(static_cast(this)); diff --git a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp index d4f8c5f20..d289e91d9 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp @@ -92,9 +92,9 @@ CubicCameraMover::CubicCameraMover(int nView, CameraAnchor *p_car, int pov_type, pCar = p_car; nPovType = pov_type; nPovTypeUsed = pov_type; - fIgnoreSetSnapNextTimer = 0.0f; tLastGrounded = WorldTimer - Timer(8000); tLastUnderVehicle = WorldTimer - Timer(0x1900); + fIgnoreSetSnapNextTimer = 0.0f; bFirstTime = 1; tLastGearChange = WorldTimer - Timer(6000); @@ -134,41 +134,35 @@ CubicCameraMover::CubicCameraMover(int nView, CameraAnchor *p_car, int pov_type, bVector3 eye_desired; bVector3 look_current; bVector3 look_desired; - bVector3 eye_movement; - bVector3 direction_current; - bVector3 direction_desired; pEye->GetVal(&eye_current); pLook->GetVal(&look_current); pEye->GetValDesired(&eye_desired); pLook->GetValDesired(&look_desired); - eye_movement = eye_desired - eye_current; - direction_current = look_current - eye_current; - direction_desired = look_desired - eye_desired; + bVector3 eye_movement(eye_desired - eye_current); + bVector3 direction_current(look_current - eye_current); + bVector3 direction_desired(look_desired - eye_desired); bNormalize(&direction_current, &direction_current); bNormalize(&direction_desired, &direction_desired); - vSavedEye.x = 0.0f; - vSavedEye.y = 0.0f; vSavedEye.z = 0.0f; - vCameraImpcat.x = 0.0f; + vSavedEye.y = 0.0f; + vSavedEye.x = 0.0f; vCameraImpcat.y = 0.0f; - vCameraImpcatTimer.x = 0.0f; + vCameraImpcat.x = 0.0f; vCameraImpcatTimer.y = 0.0f; + vCameraImpcatTimer.x = 0.0f; - if (smooth) { - if (bLength(&eye_movement) <= 50.0f && bDot(&direction_current, &direction_desired) >= -0.9f) { - fIgnoreSetSnapNextTimer = 1.0f; - return; - } + if (smooth && bLength(&eye_movement) <= 50.0f && bDot(&direction_current, &direction_desired) >= -0.9f) { + fIgnoreSetSnapNextTimer = 1.0f; + } else { + pUp->Snap(); + pFov->Snap(); + pEye->Snap(); + pLook->Snap(); } - - pUp->Snap(); - pFov->Snap(); - pEye->Snap(); - pLook->Snap(); } bool CubicCameraMover::IsUnderVehicle() { diff --git a/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp b/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp index c551ac66a..a5579d851 100644 --- a/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp @@ -164,11 +164,12 @@ void DebugWorldCameraMover::JoyHandler() { void DebugWorldCameraMover::Update(float dT) { if (JumpToPosition.y != 0.0f) { TopologyCoordinate topology_coordinate; + topology_coordinate.SetInterestBBox(&Eye, 0.0f, &Look); + topology_coordinate.IsLoaded(); JumpToPosition.z += 100.0f; bVector3 dir = Eye - Look; - bVector3 eyelook; - bNormalize(&eyelook, &dir, 1.0f); - bVector3 newEye = JumpToPosition + eyelook; + bNormalize(&dir, &dir, 1.0f); + bVector3 newEye = JumpToPosition + dir; Eye = newEye; Look = JumpToPosition; bFill(&JumpToPosition, 0.0f, 0.0f, 0.0f); @@ -192,9 +193,9 @@ void DebugWorldCameraMover::Update(float dT) { static_cast(eyelook.y * 65536.0f)); if (TurnHInc != 0 || TurnVInc != 0 || HeightInc != 0.0f) { + hAngle = (hAngle + static_cast(static_cast(TurnHInc) * dT)) & 0xffff; bVector2 *horiz = reinterpret_cast(&eyelook); float xylen = bLength(horiz); - hAngle = (hAngle + static_cast(static_cast(TurnHInc) * dT)) & 0xffff; unsigned short pitch = bFixATan(static_cast(xylen * 65536.0f), static_cast(eyelook.z * 65536.0f)); From 0283887947df71480b6ec72f4409fce337d6cc82 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 16:49:44 +0100 Subject: [PATCH 078/691] 77%: fix cinematic timer threshold (0.75f -> 0.001f to match original) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .text | 36372 ++++++++++++++++ .../Src/Camera/Actions/CDActionDrive.cpp | 2 +- .../Indep/Src/Camera/Movers/DebugWorld.cpp | 9 +- 3 files changed, 36377 insertions(+), 6 deletions(-) create mode 100644 .text diff --git a/.text b/.text new file mode 100644 index 000000000..7f52af281 --- /dev/null +++ b/.text @@ -0,0 +1,36372 @@ +.include "macros.inc" +.file "zCamera.cpp" + +.comm _6Camera.StopUpdating, 0x4, 4 +.comm _21DebugWorldCameraMover.TurboOn, 0x4, 4 +.comm _21DebugWorldCameraMover.SuperTurboOn, 0x4, 4 + +# 0x00000000..0x0001D1EC | size: 0x1D1EC +.text +.balign 4 +# .text:0x0 | size: 0x0 +.sym gcc2_compiled., local + +# .text:0x0 | size: 0x17C +.fn __6Camera, global +/* 00000000 0000CD90 94 21 FF 90 */ stwu r1, -0x70(r1) +/* 00000004 0000CD94 7C 08 02 A6 */ mflr r0 +/* 00000008 0000CD98 F3 E1 00 68 */ psq_st f31, 0x68(r1), 0, qr0 +/* 0000000C 0000CD9C BF A1 00 5C */ stmw r29, 0x5c(r1) +/* 00000010 0000CDA0 90 01 00 74 */ stw r0, 0x74(r1) +/* 00000014 0000CDA4 3D 60 00 00 */ lis r11, .rodata+0x4@ha +/* 00000018 0000CDA8 3D 20 00 00 */ lis r9, .rodata+0x8@ha +/* 0000001C 0000CDAC C0 09 00 08 */ lfs f0, .rodata+0x8@l(r9) +/* 00000020 0000CDB0 3D 40 00 00 */ lis r10, .rodata+0xC@ha +/* 00000024 0000CDB4 C3 EB 00 04 */ lfs f31, .rodata+0x4@l(r11) +/* 00000028 0000CDB8 3D 00 00 00 */ lis r8, .rodata+0x10@ha +/* 0000002C 0000CDBC 3D 20 00 00 */ lis r9, .rodata+0x14@ha +/* 00000030 0000CDC0 D0 01 00 4C */ stfs f0, 0x4c(r1) +/* 00000034 0000CDC4 D0 01 00 50 */ stfs f0, 0x50(r1) +/* 00000038 0000CDC8 3B A1 00 08 */ addi r29, r1, 0x8 +/* 0000003C 0000CDCC D0 01 00 54 */ stfs f0, 0x54(r1) +/* 00000040 0000CDD0 3D 60 00 00 */ lis r11, RealTimeFrames@ha +/* 00000044 0000CDD4 D3 E1 00 48 */ stfs f31, 0x48(r1) +/* 00000048 0000CDD8 7C 7E 1B 78 */ mr r30, r3 +/* 0000004C 0000CDDC D0 01 00 0C */ stfs f0, 0xc(r1) +/* 00000050 0000CDE0 3C 00 80 00 */ lis r0, 0x8000 +/* 00000054 0000CDE4 D3 E1 00 08 */ stfs f31, 0x8(r1) +/* 00000058 0000CDE8 38 E0 00 00 */ li r7, 0x0 +/* 0000005C 0000CDEC C1 8A 00 0C */ lfs f12, .rodata+0xC@l(r10) +/* 00000060 0000CDF0 38 C0 36 FB */ li r6, 0x36fb +/* 00000064 0000CDF4 C1 49 00 14 */ lfs f10, .rodata+0x14@l(r9) +/* 00000068 0000CDF8 3D 40 00 00 */ lis r10, .rodata+0x18@ha +/* 0000006C 0000CDFC C1 A8 00 10 */ lfs f13, .rodata+0x10@l(r8) +/* 00000070 0000CE00 D0 1D 00 08 */ stfs f0, 0x8(r29) +/* 00000074 0000CE04 3D 00 00 00 */ lis r8, .rodata+0x1C@ha +/* 00000078 0000CE08 81 2B 00 00 */ lwz r9, RealTimeFrames@l(r11) +/* 0000007C 0000CE0C 7F A4 EB 78 */ mr r4, r29 +/* 00000080 0000CE10 D1 81 00 30 */ stfs f12, 0x30(r1) +/* 00000084 0000CE14 3D 60 00 00 */ lis r11, .rodata+0x20@ha +/* 00000088 0000CE18 D1 A1 00 34 */ stfs f13, 0x34(r1) +/* 0000008C 0000CE1C FC 20 F8 90 */ fmr f1, f31 +/* 00000090 0000CE20 D1 41 00 40 */ stfs f10, 0x40(r1) +/* 00000094 0000CE24 90 1E 02 84 */ stw r0, 0x284(r30) +/* 00000098 0000CE28 91 3E 02 88 */ stw r9, 0x288(r30) +/* 0000009C 0000CE2C D1 81 00 1C */ stfs f12, 0x1c(r1) +/* 000000A0 0000CE30 D0 01 00 14 */ stfs f0, 0x14(r1) +/* 000000A4 0000CE34 D0 01 00 18 */ stfs f0, 0x18(r1) +/* 000000A8 0000CE38 D0 01 00 20 */ stfs f0, 0x20(r1) +/* 000000AC 0000CE3C D0 01 00 24 */ stfs f0, 0x24(r1) +/* 000000B0 0000CE40 D0 01 00 28 */ stfs f0, 0x28(r1) +/* 000000B4 0000CE44 D0 01 00 2C */ stfs f0, 0x2c(r1) +/* 000000B8 0000CE48 D0 01 00 48 */ stfs f0, 0x48(r1) +/* 000000BC 0000CE4C D0 01 00 4C */ stfs f0, 0x4c(r1) +/* 000000C0 0000CE50 D1 41 00 50 */ stfs f10, 0x50(r1) +/* 000000C4 0000CE54 D0 01 00 38 */ stfs f0, 0x38(r1) +/* 000000C8 0000CE58 D0 01 00 3C */ stfs f0, 0x3c(r1) +/* 000000CC 0000CE5C 90 FE 02 8C */ stw r7, 0x28c(r30) +/* 000000D0 0000CE60 C1 6A 00 18 */ lfs f11, .rodata+0x18@l(r10) +/* 000000D4 0000CE64 D3 E1 00 54 */ stfs f31, 0x54(r1) +/* 000000D8 0000CE68 D3 E1 00 44 */ stfs f31, 0x44(r1) +/* 000000DC 0000CE6C D1 7E 00 B0 */ stfs f11, 0xb0(r30) +/* 000000E0 0000CE70 C1 A8 00 1C */ lfs f13, .rodata+0x1C@l(r8) +/* 000000E4 0000CE74 C1 8B 00 20 */ lfs f12, .rodata+0x20@l(r11) +/* 000000E8 0000CE78 D3 FE 02 80 */ stfs f31, 0x280(r30) +/* 000000EC 0000CE7C D3 FE 00 CC */ stfs f31, 0xcc(r30) +/* 000000F0 0000CE80 D3 FE 00 70 */ stfs f31, 0x70(r30) +/* 000000F4 0000CE84 D3 FE 00 74 */ stfs f31, 0x74(r30) +/* 000000F8 0000CE88 D3 FE 00 78 */ stfs f31, 0x78(r30) +/* 000000FC 0000CE8C D3 FE 00 7C */ stfs f31, 0x7c(r30) +/* 00000100 0000CE90 D3 FE 00 90 */ stfs f31, 0x90(r30) +/* 00000104 0000CE94 D3 FE 00 94 */ stfs f31, 0x94(r30) +/* 00000108 0000CE98 D3 FE 00 98 */ stfs f31, 0x98(r30) +/* 0000010C 0000CE9C D3 FE 00 9C */ stfs f31, 0x9c(r30) +/* 00000110 0000CEA0 D1 BE 00 BC */ stfs f13, 0xbc(r30) +/* 00000114 0000CEA4 90 FE 02 7C */ stw r7, 0x27c(r30) +.L_00000118: +/* 00000118 0000CEA8 D1 9E 00 C0 */ stfs f12, 0xc0(r30) +/* 0000011C 0000CEAC B0 DE 00 C4 */ sth r6, 0xc4(r30) +/* 00000120 0000CEB0 D0 1E 00 A8 */ stfs f0, 0xa8(r30) +/* 00000124 0000CEB4 D0 1E 00 B4 */ stfs f0, 0xb4(r30) +/* 00000128 0000CEB8 D0 1E 00 B8 */ stfs f0, 0xb8(r30) +/* 0000012C 0000CEBC D0 1E 00 AC */ stfs f0, 0xac(r30) +/* 00000130 0000CEC0 D0 1E 00 C8 */ stfs f0, 0xc8(r30) +/* 00000134 0000CEC4 D0 1E 00 80 */ stfs f0, 0x80(r30) +/* 00000138 0000CEC8 D0 1E 00 84 */ stfs f0, 0x84(r30) +/* 0000013C 0000CECC D0 1E 00 88 */ stfs f0, 0x88(r30) +/* 00000140 0000CED0 D0 1E 00 8C */ stfs f0, 0x8c(r30) +/* 00000144 0000CED4 D0 1E 00 A0 */ stfs f0, 0xa0(r30) +/* 00000148 0000CED8 D0 1E 00 A4 */ stfs f0, 0xa4(r30) +/* 0000014C 0000CEDC 48 00 04 ED */ bl .L_00000638 +/* 00000150 0000CEE0 7F C3 F3 78 */ mr r3, r30 +/* 00000154 0000CEE4 7F A4 EB 78 */ mr r4, r29 +/* 00000158 0000CEE8 FC 20 F8 90 */ fmr f1, f31 +/* 0000015C 0000CEEC 48 00 04 ED */ bl .L_00000648 +/* 00000160 0000CEF0 7F C3 F3 78 */ mr r3, r30 +/* 00000164 0000CEF4 80 01 00 74 */ lwz r0, 0x74(r1) +/* 00000168 0000CEF8 7C 08 03 A6 */ mtlr r0 +/* 0000016C 0000CEFC BB A1 00 5C */ lmw r29, 0x5c(r1) +/* 00000170 0000CF00 E3 E1 00 68 */ psq_l f31, 0x68(r1), 0, qr0 +/* 00000174 0000CF04 38 21 00 70 */ addi r1, r1, 0x70 +/* 00000178 0000CF08 4E 80 00 20 */ blr +.endfn __6Camera + +# .text:0x17C | size: 0x34 +.fn UpdateAll__6Cameraf, global +/* 0000017C 0000CF0C 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00000180 0000CF10 7C 08 02 A6 */ mflr r0 +/* 00000184 0000CF14 F3 E1 00 08 */ psq_st f31, 0x8(r1), 0, qr0 +/* 00000188 0000CF18 90 01 00 14 */ stw r0, 0x14(r1) +/* 0000018C 0000CF1C FF E0 08 90 */ fmr f31, f1 +/* 00000190 0000CF20 48 00 1A 15 */ bl .L_00001BA4 +/* 00000194 0000CF24 FC 20 F8 90 */ fmr f1, f31 +/* 00000198 0000CF28 48 00 00 01 */ bl UpdateCameraShakers__Ff +/* 0000019C 0000CF2C 80 01 00 14 */ lwz r0, 0x14(r1) +/* 000001A0 0000CF30 7C 08 03 A6 */ mtlr r0 +/* 000001A4 0000CF34 E3 E1 00 08 */ psq_l f31, 0x8(r1), 0, qr0 +/* 000001A8 0000CF38 38 21 00 10 */ addi r1, r1, 0x10 +/* 000001AC 0000CF3C 4E 80 00 20 */ blr +.endfn UpdateAll__6Cameraf + +# .text:0x1B0 | size: 0x70 +# NoiseBase(int) +.fn NoiseBase__Fi, global +/* 000001B0 0000CF40 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 000001B4 0000CF44 54 69 68 24 */ slwi r9, r3, 13 +/* 000001B8 0000CF48 7D 29 1A 78 */ xor r9, r9, r3 +/* 000001BC 0000CF4C 3C 00 43 30 */ lis r0, 0x4330 +/* 000001C0 0000CF50 7D 69 49 D6 */ mullw r11, r9, r9 +/* 000001C4 0000CF54 3D 40 00 00 */ lis r10, .rodata+0x28@ha +/* 000001C8 0000CF58 C8 0A 00 28 */ lfd f0, .rodata+0x28@l(r10) +/* 000001CC 0000CF5C 3D 00 00 00 */ lis r8, .rodata+0x30@ha +/* 000001D0 0000CF60 C1 88 00 30 */ lfs f12, .rodata+0x30@l(r8) +/* 000001D4 0000CF64 3D 40 00 00 */ lis r10, .rodata+0x34@ha +/* 000001D8 0000CF68 C1 AA 00 34 */ lfs f13, .rodata+0x34@l(r10) +/* 000001DC 0000CF6C 1D 6B 3D 73 */ mulli r11, r11, 0x3d73 +/* 000001E0 0000CF70 3D 6B 00 0C */ addis r11, r11, 0xc +/* 000001E4 0000CF74 39 6B 0A E5 */ addi r11, r11, 0xae5 +/* 000001E8 0000CF78 7D 29 59 D6 */ mullw r9, r9, r11 +/* 000001EC 0000CF7C 3D 29 52 09 */ addis r9, r9, 0x5209 +/* 000001F0 0000CF80 39 29 DD 0D */ subi r9, r9, 0x22f3 +.L_000001F4: +/* 000001F4 0000CF84 55 29 00 7E */ clrlwi r9, r9, 1 +/* 000001F8 0000CF88 6D 29 80 00 */ xoris r9, r9, 0x8000 +/* 000001FC 0000CF8C 91 21 00 0C */ stw r9, 0xc(r1) +.L_00000200: +/* 00000200 0000CF90 90 01 00 08 */ stw r0, 0x8(r1) +/* 00000204 0000CF94 C8 21 00 08 */ lfd f1, 0x8(r1) +/* 00000208 0000CF98 FC 21 00 28 */ fsub f1, f1, f0 +/* 0000020C 0000CF9C FC 20 08 18 */ frsp f1, f1 +.L_00000210: +/* 00000210 0000CFA0 EC 21 03 32 */ fmuls f1, f1, f12 +/* 00000214 0000CFA4 EC 2D 08 28 */ fsubs f1, f13, f1 +/* 00000218 0000CFA8 38 21 00 10 */ addi r1, r1, 0x10 +/* 0000021C 0000CFAC 4E 80 00 20 */ blr +.endfn NoiseBase__Fi + +# .text:0x220 | size: 0xE4 +# NoiseInterpolated(float) +.fn NoiseInterpolated__Ff, global +/* 00000220 0000CFB0 94 21 FF D0 */ stwu r1, -0x30(r1) +/* 00000224 0000CFB4 7C 08 02 A6 */ mflr r0 +/* 00000228 0000CFB8 F3 A1 00 18 */ psq_st f29, 0x18(r1), 0, qr0 +/* 0000022C 0000CFBC F3 C1 00 20 */ psq_st f30, 0x20(r1), 0, qr0 +/* 00000230 0000CFC0 F3 E1 00 28 */ psq_st f31, 0x28(r1), 0, qr0 +/* 00000234 0000CFC4 BF C1 00 10 */ stmw r30, 0x10(r1) +/* 00000238 0000CFC8 90 01 00 34 */ stw r0, 0x34(r1) +/* 0000023C 0000CFCC FF C0 08 90 */ fmr f30, f1 +/* 00000240 0000CFD0 FC 00 F0 90 */ fmr f0, f30 +/* 00000244 0000CFD4 7D 2A 4B 78 */ mr r10, r9 +/* 00000248 0000CFD8 FD A0 00 1E */ fctiwz f13, f0 +/* 0000024C 0000CFDC 3F E0 43 30 */ lis r31, 0x4330 +/* 00000250 0000CFE0 D9 A1 00 08 */ stfd f13, 0x8(r1) +/* 00000254 0000CFE4 3D 60 00 00 */ lis r11, .rodata+0x38@ha +.L_00000258: +/* 00000258 0000CFE8 CB AB 00 38 */ lfd f29, .rodata+0x38@l(r11) +/* 0000025C 0000CFEC 81 21 00 0C */ lwz r9, 0xc(r1) +/* 00000260 0000CFF0 6D 29 80 00 */ xoris r9, r9, 0x8000 +/* 00000264 0000CFF4 91 21 00 0C */ stw r9, 0xc(r1) +/* 00000268 0000CFF8 93 E1 00 08 */ stw r31, 0x8(r1) +/* 0000026C 0000CFFC C8 01 00 08 */ lfd f0, 0x8(r1) +/* 00000270 0000D000 FC 00 E8 28 */ fsub f0, f0, f29 +/* 00000274 0000D004 FD A0 00 18 */ frsp f13, f0 +/* 00000278 0000D008 FC 0D F0 00 */ fcmpu cr0, f13, f30 +.L_0000027C: +/* 0000027C 0000D00C 4C 62 03 82 */ cror un, eq, lt +/* 00000280 0000D010 41 83 02 90 */ bso .L_00000510 +/* 00000284 0000D014 3D 20 00 00 */ lis r9, .rodata+0x40@ha +/* 00000288 0000D018 C0 09 00 40 */ lfs f0, .rodata+0x40@l(r9) +/* 0000028C 0000D01C ED AD 00 28 */ fsubs f13, f13, f0 +.L_00000290: +/* 00000290 0000D020 FC 00 68 90 */ fmr f0, f13 +/* 00000294 0000D024 FD A0 00 1E */ fctiwz f13, f0 +/* 00000298 0000D028 D9 A1 00 08 */ stfd f13, 0x8(r1) +/* 0000029C 0000D02C 83 C1 00 0C */ lwz r30, 0xc(r1) +.L_000002A0: +/* 000002A0 0000D030 7F C3 F3 78 */ mr r3, r30 +/* 000002A4 0000D034 48 00 01 B1 */ bl .L_00000454 +/* 000002A8 0000D038 FF E0 08 90 */ fmr f31, f1 +/* 000002AC 0000D03C 38 7E 00 01 */ addi r3, r30, 0x1 +/* 000002B0 0000D040 48 00 01 B1 */ bl .L_00000460 +/* 000002B4 0000D044 6F DE 80 00 */ xoris r30, r30, 0x8000 +/* 000002B8 0000D048 93 C1 00 0C */ stw r30, 0xc(r1) +/* 000002BC 0000D04C 3D 20 00 00 */ lis r9, .rodata+0x40@ha +/* 000002C0 0000D050 C1 A9 00 40 */ lfs f13, .rodata+0x40@l(r9) +/* 000002C4 0000D054 93 E1 00 08 */ stw r31, 0x8(r1) +/* 000002C8 0000D058 C8 01 00 08 */ lfd f0, 0x8(r1) +/* 000002CC 0000D05C FC 00 E8 28 */ fsub f0, f0, f29 +/* 000002D0 0000D060 FC 00 00 18 */ frsp f0, f0 +/* 000002D4 0000D064 EC 1E 00 28 */ fsubs f0, f30, f0 +/* 000002D8 0000D068 ED AD 00 28 */ fsubs f13, f13, f0 +.L_000002DC: +/* 000002DC 0000D06C ED AD 07 F2 */ fmuls f13, f13, f31 +/* 000002E0 0000D070 EC 20 68 7A */ fmadds f1, f0, f1, f13 +/* 000002E4 0000D074 80 01 00 34 */ lwz r0, 0x34(r1) +/* 000002E8 0000D078 7C 08 03 A6 */ mtlr r0 +/* 000002EC 0000D07C BB C1 00 10 */ lmw r30, 0x10(r1) +/* 000002F0 0000D080 E3 A1 00 18 */ psq_l f29, 0x18(r1), 0, qr0 +/* 000002F4 0000D084 E3 C1 00 20 */ psq_l f30, 0x20(r1), 0, qr0 +/* 000002F8 0000D088 E3 E1 00 28 */ psq_l f31, 0x28(r1), 0, qr0 +/* 000002FC 0000D08C 38 21 00 30 */ addi r1, r1, 0x30 +/* 00000300 0000D090 4E 80 00 20 */ blr +.endfn NoiseInterpolated__Ff + +# .text:0x304 | size: 0x94 +# Noise(float) +.fn Noise__Ff, global +/* 00000304 0000D094 94 21 FF C8 */ stwu r1, -0x38(r1) +/* 00000308 0000D098 7C 08 02 A6 */ mflr r0 +/* 0000030C 0000D09C F3 61 00 10 */ psq_st f27, 0x10(r1), 0, qr0 +/* 00000310 0000D0A0 F3 81 00 18 */ psq_st f28, 0x18(r1), 0, qr0 +/* 00000314 0000D0A4 F3 A1 00 20 */ psq_st f29, 0x20(r1), 0, qr0 +/* 00000318 0000D0A8 F3 C1 00 28 */ psq_st f30, 0x28(r1), 0, qr0 +/* 0000031C 0000D0AC F3 E1 00 30 */ psq_st f31, 0x30(r1), 0, qr0 +/* 00000320 0000D0B0 93 E1 00 0C */ stw r31, 0xc(r1) +/* 00000324 0000D0B4 90 01 00 3C */ stw r0, 0x3c(r1) +/* 00000328 0000D0B8 3D 20 00 00 */ lis r9, .rodata+0x48@ha +/* 0000032C 0000D0BC 3D 40 00 00 */ lis r10, .rodata+0x44@ha +/* 00000330 0000D0C0 C3 C9 00 48 */ lfs f30, .rodata+0x48@l(r9) +/* 00000334 0000D0C4 3D 60 00 00 */ lis r11, .rodata+0x4C@ha +/* 00000338 0000D0C8 C3 6B 00 4C */ lfs f27, .rodata+0x4C@l(r11) +/* 0000033C 0000D0CC FF 80 08 90 */ fmr f28, f1 +/* 00000340 0000D0D0 C3 AA 00 44 */ lfs f29, .rodata+0x44@l(r10) +/* 00000344 0000D0D4 FF E0 F0 90 */ fmr f31, f30 +/* 00000348 0000D0D8 3B E0 00 00 */ li r31, 0x0 +/* 0000034C 0000D0DC EC 3C 07 F2 */ fmuls f1, f28, f31 +/* 00000350 0000D0E0 3B FF 00 01 */ addi r31, r31, 0x1 +/* 00000354 0000D0E4 48 00 02 21 */ bl .L_00000574 +/* 00000358 0000D0E8 EF FF F8 2A */ fadds f31, f31, f31 +/* 0000035C 0000D0EC EF BE E8 7A */ fmadds f29, f30, f1, f29 +/* 00000360 0000D0F0 2C 1F 00 05 */ cmpwi r31, 0x5 +/* 00000364 0000D0F4 EF DE 06 F2 */ fmuls f30, f30, f27 +/* 00000368 0000D0F8 40 81 03 4C */ ble .L_000006B4 +/* 0000036C 0000D0FC FC 20 E8 90 */ fmr f1, f29 +/* 00000370 0000D100 80 01 00 3C */ lwz r0, 0x3c(r1) +/* 00000374 0000D104 7C 08 03 A6 */ mtlr r0 +.L_00000378: +/* 00000378 0000D108 83 E1 00 0C */ lwz r31, 0xc(r1) +/* 0000037C 0000D10C E3 61 00 10 */ psq_l f27, 0x10(r1), 0, qr0 +/* 00000380 0000D110 E3 81 00 18 */ psq_l f28, 0x18(r1), 0, qr0 +/* 00000384 0000D114 E3 A1 00 20 */ psq_l f29, 0x20(r1), 0, qr0 +.L_00000388: +/* 00000388 0000D118 E3 C1 00 28 */ psq_l f30, 0x28(r1), 0, qr0 +/* 0000038C 0000D11C E3 E1 00 30 */ psq_l f31, 0x30(r1), 0, qr0 +/* 00000390 0000D120 38 21 00 38 */ addi r1, r1, 0x38 +.L_00000394: +/* 00000394 0000D124 4E 80 00 20 */ blr +.endfn Noise__Ff + +# .text:0x398 | size: 0x70 +.fn FovRelativeAngle__6CameraUs, global +/* 00000398 0000D128 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 0000039C 0000D12C 7C 08 02 A6 */ mflr r0 +.L_000003A0: +/* 000003A0 0000D130 F3 C1 00 10 */ psq_st f30, 0x10(r1), 0, qr0 +/* 000003A4 0000D134 F3 E1 00 18 */ psq_st f31, 0x18(r1), 0, qr0 +/* 000003A8 0000D138 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 000003AC 0000D13C 90 01 00 24 */ stw r0, 0x24(r1) +.L_000003B0: +/* 000003B0 0000D140 7C 7E 1B 78 */ mr r30, r3 +.L_000003B4: +/* 000003B4 0000D144 7C 83 23 78 */ mr r3, r4 +/* 000003B8 0000D148 48 00 00 01 */ bl bSin__FUs +/* 000003BC 0000D14C A0 7E 00 C4 */ lhz r3, 0xc4(r30) +/* 000003C0 0000D150 FF E0 08 90 */ fmr f31, f1 +/* 000003C4 0000D154 54 63 F8 7E */ srwi r3, r3, 1 +/* 000003C8 0000D158 48 00 00 01 */ bl bSin__FUs +/* 000003CC 0000D15C 3D 20 00 00 */ lis r9, aBaselineFovNoise@ha +/* 000003D0 0000D160 FF C0 08 90 */ fmr f30, f1 +/* 000003D4 0000D164 A0 69 00 00 */ lhz r3, aBaselineFovNoise@l(r9) +/* 000003D8 0000D168 54 63 F8 7E */ srwi r3, r3, 1 +/* 000003DC 0000D16C 48 00 00 01 */ bl bSin__FUs +/* 000003E0 0000D170 EF FF 07 B2 */ fmuls f31, f31, f30 +/* 000003E4 0000D174 EC 3F 08 24 */ fdivs f1, f31, f1 +/* 000003E8 0000D178 48 00 00 01 */ bl bASin__Ff +/* 000003EC 0000D17C 80 01 00 24 */ lwz r0, 0x24(r1) +/* 000003F0 0000D180 7C 08 03 A6 */ mtlr r0 +/* 000003F4 0000D184 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 000003F8 0000D188 E3 C1 00 10 */ psq_l f30, 0x10(r1), 0, qr0 +/* 000003FC 0000D18C E3 E1 00 18 */ psq_l f31, 0x18(r1), 0, qr0 +/* 00000400 0000D190 38 21 00 20 */ addi r1, r1, 0x20 +/* 00000404 0000D194 4E 80 00 20 */ blr +.endfn FovRelativeAngle__6CameraUs + +# .text:0x408 | size: 0xE4 +.fn CommunicateWithJollyRancher__6CameraPc, global +/* 00000408 0000D198 94 21 FF 48 */ stwu r1, -0xb8(r1) +/* 0000040C 0000D19C 7C 08 02 A6 */ mflr r0 +/* 00000410 0000D1A0 BF C1 00 B0 */ stmw r30, 0xb0(r1) +/* 00000414 0000D1A4 90 01 00 BC */ stw r0, 0xbc(r1) +/* 00000418 0000D1A8 3D 20 00 00 */ lis r9, DisableCommunication@ha +/* 0000041C 0000D1AC 7C 7F 1B 78 */ mr r31, r3 +/* 00000420 0000D1B0 80 09 00 00 */ lwz r0, DisableCommunication@l(r9) +/* 00000424 0000D1B4 7C 9E 23 78 */ mr r30, r4 +/* 00000428 0000D1B8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000042C 0000D1BC 40 82 04 D8 */ bne .L_00000904 +/* 00000430 0000D1C0 3D 20 00 00 */ lis r9, _6Camera.JollyRancherResponse@ha +/* 00000434 0000D1C4 38 61 00 08 */ addi r3, r1, 0x8 +/* 00000438 0000D1C8 39 29 00 00 */ addi r9, r9, _6Camera.JollyRancherResponse@l +/* 0000043C 0000D1CC 38 81 00 A8 */ addi r4, r1, 0xa8 +/* 00000440 0000D1D0 91 21 00 A8 */ stw r9, 0xa8(r1) +/* 00000444 0000D1D4 38 A0 00 04 */ li r5, 0x4 +/* 00000448 0000D1D8 90 01 00 AC */ stw r0, 0xac(r1) +/* 0000044C 0000D1DC 48 00 00 01 */ bl bMemCpy +/* 00000450 0000D1E0 38 61 00 0C */ addi r3, r1, 0xc +.L_00000454: +/* 00000454 0000D1E4 38 81 00 AC */ addi r4, r1, 0xac +/* 00000458 0000D1E8 38 A0 00 04 */ li r5, 0x4 +/* 0000045C 0000D1EC 48 00 00 01 */ bl bMemCpy +.L_00000460: +/* 00000460 0000D1F0 38 81 00 68 */ addi r4, r1, 0x68 +/* 00000464 0000D1F4 7F E3 FB 78 */ mr r3, r31 +/* 00000468 0000D1F8 48 00 00 01 */ bl PSMTX44Copy +/* 0000046C 0000D1FC 3D 20 00 00 */ lis r9, .rodata+0x5C@ha +/* 00000470 0000D200 C1 61 00 98 */ lfs f11, 0x98(r1) +/* 00000474 0000D204 C0 09 00 5C */ lfs f0, .rodata+0x5C@l(r9) +/* 00000478 0000D208 3D 60 00 00 */ lis r11, .rodata+0x60@ha +/* 0000047C 0000D20C C1 A1 00 9C */ lfs f13, 0x9c(r1) +/* 00000480 0000D210 38 A0 00 40 */ li r5, 0x40 +/* 00000484 0000D214 C1 81 00 A0 */ lfs f12, 0xa0(r1) +/* 00000488 0000D218 ED 6B 00 32 */ fmuls f11, f11, f0 +/* 0000048C 0000D21C C1 4B 00 60 */ lfs f10, .rodata+0x60@l(r11) +/* 00000490 0000D220 ED AD 00 32 */ fmuls f13, f13, f0 +/* 00000494 0000D224 ED 8C 00 32 */ fmuls f12, f12, f0 +/* 00000498 0000D228 38 61 00 10 */ addi r3, r1, 0x10 +/* 0000049C 0000D22C 38 81 00 68 */ addi r4, r1, 0x68 +/* 000004A0 0000D230 D1 61 00 98 */ stfs f11, 0x98(r1) +/* 000004A4 0000D234 D1 A1 00 9C */ stfs f13, 0x9c(r1) +/* 000004A8 0000D238 D1 81 00 A0 */ stfs f12, 0xa0(r1) +/* 000004AC 0000D23C D1 41 00 A4 */ stfs f10, 0xa4(r1) +/* 000004B0 0000D240 48 00 00 01 */ bl bMemCpy +/* 000004B4 0000D244 7F C4 F3 78 */ mr r4, r30 +/* 000004B8 0000D248 38 61 00 50 */ addi r3, r1, 0x50 +/* 000004BC 0000D24C 48 00 00 01 */ bl bStrCpy__FPcPCc +/* 000004C0 0000D250 3C 60 00 00 */ lis r3, .rodata+0x50@ha +/* 000004C4 0000D254 38 80 00 01 */ li r4, 0x1 +/* 000004C8 0000D258 38 63 00 50 */ addi r3, r3, .rodata+0x50@l +/* 000004CC 0000D25C 38 A1 00 08 */ addi r5, r1, 0x8 +/* 000004D0 0000D260 38 C0 00 60 */ li r6, 0x60 +/* 000004D4 0000D264 48 00 00 01 */ bl bFunkCallASync__FPCciPCvi +/* 000004D8 0000D268 80 01 00 BC */ lwz r0, 0xbc(r1) +/* 000004DC 0000D26C 7C 08 03 A6 */ mtlr r0 +/* 000004E0 0000D270 BB C1 00 B0 */ lmw r30, 0xb0(r1) +/* 000004E4 0000D274 38 21 00 B8 */ addi r1, r1, 0xb8 +/* 000004E8 0000D278 4E 80 00 20 */ blr +.endfn CommunicateWithJollyRancher__6CameraPc + +# .text:0x4EC | size: 0x574 +.fn SetCameraMatrix__6CameraRC8bMatrix4f, global +/* 000004EC 0000D27C 94 21 FF 50 */ stwu r1, -0xb0(r1) +/* 000004F0 0000D280 7C 08 02 A6 */ mflr r0 +/* 000004F4 0000D284 F3 41 00 80 */ psq_st f26, 0x80(r1), 0, qr0 +/* 000004F8 0000D288 F3 61 00 88 */ psq_st f27, 0x88(r1), 0, qr0 +/* 000004FC 0000D28C F3 81 00 90 */ psq_st f28, 0x90(r1), 0, qr0 +/* 00000500 0000D290 F3 A1 00 98 */ psq_st f29, 0x98(r1), 0, qr0 +/* 00000504 0000D294 F3 C1 00 A0 */ psq_st f30, 0xa0(r1), 0, qr0 +/* 00000508 0000D298 F3 E1 00 A8 */ psq_st f31, 0xa8(r1), 0, qr0 +/* 0000050C 0000D29C BF 81 00 70 */ stmw r28, 0x70(r1) +.L_00000510: +/* 00000510 0000D2A0 90 01 00 B4 */ stw r0, 0xb4(r1) +/* 00000514 0000D2A4 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha +/* 00000518 0000D2A8 7C 7F 1B 78 */ mr r31, r3 +/* 0000051C 0000D2AC 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) +/* 00000520 0000D2B0 7C 9E 23 78 */ mr r30, r4 +/* 00000524 0000D2B4 FF E0 08 90 */ fmr f31, f1 +/* 00000528 0000D2B8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000052C 0000D2BC 40 82 0A 34 */ bne .L_00000F60 +/* 00000530 0000D2C0 38 7F 00 D4 */ addi r3, r31, 0xd4 +/* 00000534 0000D2C4 7F E4 FB 78 */ mr r4, r31 +/* 00000538 0000D2C8 7C 7C 1B 78 */ mr r28, r3 +.L_0000053C: +/* 0000053C 0000D2CC 38 A0 00 D4 */ li r5, 0xd4 +/* 00000540 0000D2D0 48 00 00 01 */ bl bMemCpy +/* 00000544 0000D2D4 D3 FF 02 80 */ stfs f31, 0x280(r31) +/* 00000548 0000D2D8 3D 20 00 00 */ lis r9, _6Camera.JollyRancherResponse@ha +.L_0000054C: +/* 0000054C 0000D2DC 38 89 00 00 */ addi r4, r9, _6Camera.JollyRancherResponse@l +/* 00000550 0000D2E0 80 09 00 00 */ lwz r0, _6Camera.JollyRancherResponse@l(r9) +/* 00000554 0000D2E4 2C 00 00 00 */ cmpwi r0, 0x0 +.L_00000558: +/* 00000558 0000D2E8 41 82 05 E4 */ beq .L_00000B3C +/* 0000055C 0000D2EC 3D 20 00 00 */ lis r9, DisableCommunication@ha +/* 00000560 0000D2F0 80 09 00 00 */ lwz r0, DisableCommunication@l(r9) +/* 00000564 0000D2F4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00000568 0000D2F8 40 82 05 E4 */ bne .L_00000B4C +/* 0000056C 0000D2FC 3D 20 00 00 */ lis r9, cameralink@ha +/* 00000570 0000D300 80 09 00 00 */ lwz r0, cameralink@l(r9) +.L_00000574: +/* 00000574 0000D304 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00000578 0000D308 40 82 05 84 */ bne .L_00000AFC +/* 0000057C 0000D30C 38 00 00 01 */ li r0, 0x1 +/* 00000580 0000D310 90 09 00 00 */ stw r0, cameralink@l(r9) +/* 00000584 0000D314 3B C1 00 08 */ addi r30, r1, 0x8 +/* 00000588 0000D318 38 84 00 10 */ addi r4, r4, 0x10 +/* 0000058C 0000D31C 7F C3 F3 78 */ mr r3, r30 +/* 00000590 0000D320 38 A0 00 40 */ li r5, 0x40 +/* 00000594 0000D324 48 00 00 01 */ bl bMemCpy +/* 00000598 0000D328 7F DD F3 78 */ mr r29, r30 +/* 0000059C 0000D32C 3D 20 00 00 */ lis r9, .rodata+0x64@ha +/* 000005A0 0000D330 C1 61 00 38 */ lfs f11, 0x38(r1) +/* 000005A4 0000D334 C0 09 00 64 */ lfs f0, .rodata+0x64@l(r9) +/* 000005A8 0000D338 3D 60 00 00 */ lis r11, .rodata+0x68@ha +/* 000005AC 0000D33C C1 A1 00 3C */ lfs f13, 0x3c(r1) +/* 000005B0 0000D340 7F C3 F3 78 */ mr r3, r30 +/* 000005B4 0000D344 C1 81 00 40 */ lfs f12, 0x40(r1) +/* 000005B8 0000D348 ED 6B 00 32 */ fmuls f11, f11, f0 +/* 000005BC 0000D34C C1 4B 00 68 */ lfs f10, .rodata+0x68@l(r11) +/* 000005C0 0000D350 ED AD 00 32 */ fmuls f13, f13, f0 +/* 000005C4 0000D354 ED 8C 00 32 */ fmuls f12, f12, f0 +/* 000005C8 0000D358 D1 61 00 38 */ stfs f11, 0x38(r1) +/* 000005CC 0000D35C D1 A1 00 3C */ stfs f13, 0x3c(r1) +/* 000005D0 0000D360 7F E4 FB 78 */ mr r4, r31 +/* 000005D4 0000D364 D1 81 00 40 */ stfs f12, 0x40(r1) +/* 000005D8 0000D368 D1 41 00 44 */ stfs f10, 0x44(r1) +/* 000005DC 0000D36C 48 00 00 01 */ bl PSMTX44Copy +/* 000005E0 0000D370 48 00 06 0C */ b .L_00000BEC +/* 000005E4 0000D374 3D 20 00 00 */ lis r9, cameralink@ha +/* 000005E8 0000D378 80 09 00 00 */ lwz r0, cameralink@l(r9) +/* 000005EC 0000D37C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000005F0 0000D380 41 82 05 FC */ beq .L_00000BEC +/* 000005F4 0000D384 38 00 00 00 */ li r0, 0x0 +/* 000005F8 0000D388 90 09 00 00 */ stw r0, cameralink@l(r9) +/* 000005FC 0000D38C 7F C3 F3 78 */ mr r3, r30 +/* 00000600 0000D390 7F E4 FB 78 */ mr r4, r31 +/* 00000604 0000D394 48 00 00 01 */ bl PSMTX44Copy +/* 00000608 0000D398 3B A1 00 08 */ addi r29, r1, 0x8 +/* 0000060C 0000D39C 7F E4 FB 78 */ mr r4, r31 +/* 00000610 0000D3A0 7F A3 EB 78 */ mr r3, r29 +/* 00000614 0000D3A4 48 00 00 01 */ bl bTransposeMatrix__FP8bMatrix4PC8bMatrix4 +/* 00000618 0000D3A8 3D 20 00 00 */ lis r9, .rodata+0x6C@ha +.L_0000061C: +/* 0000061C 0000D3AC 7F A4 EB 78 */ mr r4, r29 +/* 00000620 0000D3B0 C3 E9 00 6C */ lfs f31, .rodata+0x6C@l(r9) +/* 00000624 0000D3B4 38 7F 00 40 */ addi r3, r31, 0x40 +/* 00000628 0000D3B8 38 BF 00 30 */ addi r5, r31, 0x30 +/* 0000062C 0000D3BC D3 E1 00 14 */ stfs f31, 0x14(r1) +/* 00000630 0000D3C0 D3 E1 00 24 */ stfs f31, 0x24(r1) +/* 00000634 0000D3C4 D3 E1 00 34 */ stfs f31, 0x34(r1) +.L_00000638: +/* 00000638 0000D3C8 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 +/* 0000063C 0000D3CC C1 BF 00 40 */ lfs f13, 0x40(r31) +/* 00000640 0000D3D0 38 7F 00 50 */ addi r3, r31, 0x50 +/* 00000644 0000D3D4 C1 9F 00 44 */ lfs f12, 0x44(r31) +.L_00000648: +/* 00000648 0000D3D8 38 81 00 28 */ addi r4, r1, 0x28 +/* 0000064C 0000D3DC C0 1F 00 48 */ lfs f0, 0x48(r31) +/* 00000650 0000D3E0 FD A0 68 50 */ fneg f13, f13 +/* 00000654 0000D3E4 FD 80 60 50 */ fneg f12, f12 +/* 00000658 0000D3E8 D1 BF 00 40 */ stfs f13, 0x40(r31) +/* 0000065C 0000D3EC FC 00 00 50 */ fneg f0, f0 +/* 00000660 0000D3F0 D1 9F 00 44 */ stfs f12, 0x44(r31) +/* 00000664 0000D3F4 D0 1F 00 48 */ stfs f0, 0x48(r31) +/* 00000668 0000D3F8 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +/* 0000066C 0000D3FC C0 1F 00 B0 */ lfs f0, 0xb0(r31) +/* 00000670 0000D400 C1 BF 00 50 */ lfs f13, 0x50(r31) +/* 00000674 0000D404 C1 9F 00 54 */ lfs f12, 0x54(r31) +/* 00000678 0000D408 C1 7F 00 58 */ lfs f11, 0x58(r31) +/* 0000067C 0000D40C C1 5F 00 40 */ lfs f10, 0x40(r31) +/* 00000680 0000D410 C1 3F 00 44 */ lfs f9, 0x44(r31) +/* 00000684 0000D414 C1 1F 00 48 */ lfs f8, 0x48(r31) +/* 00000688 0000D418 ED AD 50 3A */ fmadds f13, f13, f0, f10 +/* 0000068C 0000D41C 80 1F 02 7C */ lwz r0, 0x27c(r31) +/* 00000690 0000D420 ED 8C 48 3A */ fmadds f12, f12, f0, f9 +/* 00000694 0000D424 ED 6B 40 3A */ fmadds f11, f11, f0, f8 +/* 00000698 0000D428 D1 BF 00 60 */ stfs f13, 0x60(r31) +/* 0000069C 0000D42C D1 9F 00 64 */ stfs f12, 0x64(r31) +/* 000006A0 0000D430 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000006A4 0000D434 D1 7F 00 68 */ stfs f11, 0x68(r31) +/* 000006A8 0000D438 41 82 06 D0 */ beq .L_00000D78 +/* 000006AC 0000D43C 38 00 00 00 */ li r0, 0x0 +/* 000006B0 0000D440 7F 83 E3 78 */ mr r3, r28 +.L_000006B4: +/* 000006B4 0000D444 90 1F 02 7C */ stw r0, 0x27c(r31) +/* 000006B8 0000D448 7F E4 FB 78 */ mr r4, r31 +/* 000006BC 0000D44C 38 A0 00 D4 */ li r5, 0xd4 +/* 000006C0 0000D450 48 00 00 01 */ bl bMemCpy +/* 000006C4 0000D454 3D 20 00 00 */ lis r9, .rodata+0x68@ha +/* 000006C8 0000D458 C0 09 00 68 */ lfs f0, .rodata+0x68@l(r9) +/* 000006CC 0000D45C D0 1F 02 80 */ stfs f0, 0x280(r31) +/* 000006D0 0000D460 C0 1F 02 80 */ lfs f0, 0x280(r31) +/* 000006D4 0000D464 FC 00 F8 00 */ fcmpu cr0, f0, f31 +/* 000006D8 0000D468 4C 62 03 82 */ cror un, eq, lt +/* 000006DC 0000D46C 41 83 0A 34 */ bso .L_00001110 +/* 000006E0 0000D470 3D 20 00 00 */ lis r9, .rodata+0x68@ha +/* 000006E4 0000D474 C1 7F 01 14 */ lfs f11, 0x114(r31) +/* 000006E8 0000D478 C3 E9 00 68 */ lfs f31, .rodata+0x68@l(r9) +/* 000006EC 0000D47C 38 81 00 58 */ addi r4, r1, 0x58 +/* 000006F0 0000D480 C1 5F 01 18 */ lfs f10, 0x118(r31) +/* 000006F4 0000D484 38 61 00 48 */ addi r3, r1, 0x48 +/* 000006F8 0000D488 EF FF 00 24 */ fdivs f31, f31, f0 +/* 000006FC 0000D48C C1 3F 01 1C */ lfs f9, 0x11c(r31) +/* 00000700 0000D490 C1 9F 00 40 */ lfs f12, 0x40(r31) +/* 00000704 0000D494 C1 BF 00 44 */ lfs f13, 0x44(r31) +/* 00000708 0000D498 C0 1F 00 48 */ lfs f0, 0x48(r31) +/* 0000070C 0000D49C ED 8C 58 28 */ fsubs f12, f12, f11 +/* 00000710 0000D4A0 ED AD 50 28 */ fsubs f13, f13, f10 +/* 00000714 0000D4A4 D1 81 00 58 */ stfs f12, 0x58(r1) +/* 00000718 0000D4A8 EC 00 48 28 */ fsubs f0, f0, f9 +/* 0000071C 0000D4AC D1 A1 00 5C */ stfs f13, 0x5c(r1) +/* 00000720 0000D4B0 D0 01 00 60 */ stfs f0, 0x60(r1) +/* 00000724 0000D4B4 48 00 00 01 */ bl __8bVector3RC8bVector3 +/* 00000728 0000D4B8 C1 01 00 48 */ lfs f8, 0x48(r1) +/* 0000072C 0000D4BC 38 81 00 58 */ addi r4, r1, 0x58 +/* 00000730 0000D4C0 C0 E1 00 4C */ lfs f7, 0x4c(r1) +/* 00000734 0000D4C4 38 61 00 48 */ addi r3, r1, 0x48 +/* 00000738 0000D4C8 C1 21 00 50 */ lfs f9, 0x50(r1) +/* 0000073C 0000D4CC ED 08 07 F2 */ fmuls f8, f8, f31 +/* 00000740 0000D4D0 C1 BF 01 24 */ lfs f13, 0x124(r31) +/* 00000744 0000D4D4 EC E7 07 F2 */ fmuls f7, f7, f31 +/* 00000748 0000D4D8 C1 9F 01 28 */ lfs f12, 0x128(r31) +/* 0000074C 0000D4DC ED 29 07 F2 */ fmuls f9, f9, f31 +/* 00000750 0000D4E0 C0 DF 01 2C */ lfs f6, 0x12c(r31) +/* 00000754 0000D4E4 C1 5F 00 50 */ lfs f10, 0x50(r31) +/* 00000758 0000D4E8 C1 7F 00 54 */ lfs f11, 0x54(r31) +/* 0000075C 0000D4EC C0 1F 00 58 */ lfs f0, 0x58(r31) +/* 00000760 0000D4F0 ED 4A 68 28 */ fsubs f10, f10, f13 +/* 00000764 0000D4F4 D1 1F 01 E8 */ stfs f8, 0x1e8(r31) +/* 00000768 0000D4F8 ED 6B 60 28 */ fsubs f11, f11, f12 +/* 0000076C 0000D4FC D0 FF 01 EC */ stfs f7, 0x1ec(r31) +/* 00000770 0000D500 EC 00 30 28 */ fsubs f0, f0, f6 +/* 00000774 0000D504 D1 3F 01 F0 */ stfs f9, 0x1f0(r31) +/* 00000778 0000D508 D1 41 00 58 */ stfs f10, 0x58(r1) +/* 0000077C 0000D50C D1 61 00 5C */ stfs f11, 0x5c(r1) +/* 00000780 0000D510 D0 01 00 60 */ stfs f0, 0x60(r1) +/* 00000784 0000D514 48 00 00 01 */ bl __8bVector3RC8bVector3 +/* 00000788 0000D518 C1 01 00 48 */ lfs f8, 0x48(r1) +/* 0000078C 0000D51C 38 61 00 48 */ addi r3, r1, 0x48 +/* 00000790 0000D520 C0 E1 00 4C */ lfs f7, 0x4c(r1) +/* 00000794 0000D524 38 81 00 58 */ addi r4, r1, 0x58 +/* 00000798 0000D528 C1 21 00 50 */ lfs f9, 0x50(r1) +/* 0000079C 0000D52C ED 08 07 F2 */ fmuls f8, f8, f31 +/* 000007A0 0000D530 C1 BF 01 34 */ lfs f13, 0x134(r31) +/* 000007A4 0000D534 EC E7 07 F2 */ fmuls f7, f7, f31 +/* 000007A8 0000D538 C1 9F 01 38 */ lfs f12, 0x138(r31) +/* 000007AC 0000D53C ED 29 07 F2 */ fmuls f9, f9, f31 +/* 000007B0 0000D540 C0 DF 01 3C */ lfs f6, 0x13c(r31) +/* 000007B4 0000D544 C1 5F 00 60 */ lfs f10, 0x60(r31) +/* 000007B8 0000D548 C1 7F 00 64 */ lfs f11, 0x64(r31) +/* 000007BC 0000D54C C0 1F 00 68 */ lfs f0, 0x68(r31) +/* 000007C0 0000D550 ED 4A 68 28 */ fsubs f10, f10, f13 +/* 000007C4 0000D554 D1 1F 01 F8 */ stfs f8, 0x1f8(r31) +/* 000007C8 0000D558 ED 6B 60 28 */ fsubs f11, f11, f12 +/* 000007CC 0000D55C D0 FF 01 FC */ stfs f7, 0x1fc(r31) +/* 000007D0 0000D560 EC 00 30 28 */ fsubs f0, f0, f6 +/* 000007D4 0000D564 D1 3F 02 00 */ stfs f9, 0x200(r31) +/* 000007D8 0000D568 D1 41 00 58 */ stfs f10, 0x58(r1) +/* 000007DC 0000D56C D1 61 00 5C */ stfs f11, 0x5c(r1) +/* 000007E0 0000D570 D0 01 00 60 */ stfs f0, 0x60(r1) +/* 000007E4 0000D574 48 00 00 01 */ bl __8bVector3RC8bVector3 +/* 000007E8 0000D578 A0 1F 01 98 */ lhz r0, 0x198(r31) +/* 000007EC 0000D57C A1 1F 00 C4 */ lhz r8, 0xc4(r31) +/* 000007F0 0000D580 3D 40 43 30 */ lis r10, 0x4330 +/* 000007F4 0000D584 3D 20 00 00 */ lis r9, .rodata+0x70@ha +/* 000007F8 0000D588 C1 BF 01 84 */ lfs f13, 0x184(r31) +/* 000007FC 0000D58C 7D 00 40 50 */ subf r8, r0, r8 +/* 00000800 0000D590 C9 89 00 70 */ lfd f12, .rodata+0x70@l(r9) +/* 00000804 0000D594 55 00 04 3E */ clrlwi r0, r8, 16 +/* 00000808 0000D598 C0 7F 00 B0 */ lfs f3, 0xb0(r31) +/* 0000080C 0000D59C 90 01 00 6C */ stw r0, 0x6c(r1) +/* 00000810 0000D5A0 7D 69 5B 78 */ mr r9, r11 +/* 00000814 0000D5A4 EC 63 68 28 */ fsubs f3, f3, f13 +/* 00000818 0000D5A8 C1 3F 01 88 */ lfs f9, 0x188(r31) +/* 0000081C 0000D5AC 91 41 00 68 */ stw r10, 0x68(r1) +/* 00000820 0000D5B0 EC 63 07 F2 */ fmuls f3, f3, f31 +/* 00000824 0000D5B4 C0 9F 00 B4 */ lfs f4, 0xb4(r31) +/* 00000828 0000D5B8 C8 01 00 68 */ lfd f0, 0x68(r1) +/* 0000082C 0000D5BC C0 DF 00 BC */ lfs f6, 0xbc(r31) +/* 00000830 0000D5C0 EC 84 48 28 */ fsubs f4, f4, f9 +/* 00000834 0000D5C4 FC 00 60 28 */ fsub f0, f0, f12 +/* 00000838 0000D5C8 C0 FF 00 C0 */ lfs f7, 0xc0(r31) +/* 0000083C 0000D5CC FC 00 00 18 */ frsp f0, f0 +/* 00000840 0000D5D0 C1 9F 01 90 */ lfs f12, 0x190(r31) +/* 00000844 0000D5D4 EC 1F 00 32 */ fmuls f0, f31, f0 +/* 00000848 0000D5D8 C1 1F 00 C8 */ lfs f8, 0xc8(r31) +/* 0000084C 0000D5DC FD A0 00 90 */ fmr f13, f0 +/* 00000850 0000D5E0 C1 5F 01 8C */ lfs f10, 0x18c(r31) +/* 00000854 0000D5E4 FD 60 68 1E */ fctiwz f11, f13 +/* 00000858 0000D5E8 C0 1F 01 94 */ lfs f0, 0x194(r31) +/* 0000085C 0000D5EC C1 BF 01 9C */ lfs f13, 0x19c(r31) +/* 00000860 0000D5F0 EC C6 60 28 */ fsubs f6, f6, f12 +/* 00000864 0000D5F4 D9 61 00 68 */ stfd f11, 0x68(r1) +/* 00000868 0000D5F8 EC E7 00 28 */ fsubs f7, f7, f0 +/* 0000086C 0000D5FC C1 7F 01 A0 */ lfs f11, 0x1a0(r31) +/* 00000870 0000D600 ED 08 68 28 */ fsubs f8, f8, f13 +/* 00000874 0000D604 C0 BF 00 B8 */ lfs f5, 0xb8(r31) +/* 00000878 0000D608 EC 84 07 F2 */ fmuls f4, f4, f31 +/* 0000087C 0000D60C C1 3F 00 CC */ lfs f9, 0xcc(r31) +/* 00000880 0000D610 EC C6 07 F2 */ fmuls f6, f6, f31 +/* 00000884 0000D614 C0 01 00 48 */ lfs f0, 0x48(r1) +/* 00000888 0000D618 EC A5 50 28 */ fsubs f5, f5, f10 +/* 0000088C 0000D61C C1 A1 00 4C */ lfs f13, 0x4c(r1) +/* 00000890 0000D620 ED 29 58 28 */ fsubs f9, f9, f11 +/* 00000894 0000D624 C1 81 00 50 */ lfs f12, 0x50(r1) +/* 00000898 0000D628 EC 00 07 F2 */ fmuls f0, f0, f31 +/* 0000089C 0000D62C ED AD 07 F2 */ fmuls f13, f13, f31 +/* 000008A0 0000D630 C1 7F 01 44 */ lfs f11, 0x144(r31) +/* 000008A4 0000D634 ED 8C 07 F2 */ fmuls f12, f12, f31 +/* 000008A8 0000D638 C1 5F 00 70 */ lfs f10, 0x70(r31) +/* 000008AC 0000D63C D0 1F 02 08 */ stfs f0, 0x208(r31) +/* 000008B0 0000D640 EC A5 07 F2 */ fmuls f5, f5, f31 +/* 000008B4 0000D644 D1 BF 02 0C */ stfs f13, 0x20c(r31) +/* 000008B8 0000D648 EC E7 07 F2 */ fmuls f7, f7, f31 +/* 000008BC 0000D64C D1 9F 02 10 */ stfs f12, 0x210(r31) +/* 000008C0 0000D650 ED 08 07 F2 */ fmuls f8, f8, f31 +/* 000008C4 0000D654 81 21 00 6C */ lwz r9, 0x6c(r1) +/* 000008C8 0000D658 ED 29 07 F2 */ fmuls f9, f9, f31 +/* 000008CC 0000D65C C0 1F 01 48 */ lfs f0, 0x148(r31) +.L_000008D0: +/* 000008D0 0000D660 ED 4A 58 28 */ fsubs f10, f10, f11 +/* 000008D4 0000D664 C1 BF 01 4C */ lfs f13, 0x14c(r31) +/* 000008D8 0000D668 ED 4A 07 F2 */ fmuls f10, f10, f31 +/* 000008DC 0000D66C C1 9F 01 50 */ lfs f12, 0x150(r31) +/* 000008E0 0000D670 C3 9F 00 74 */ lfs f28, 0x74(r31) +/* 000008E4 0000D674 C3 7F 00 78 */ lfs f27, 0x78(r31) +/* 000008E8 0000D678 C3 5F 00 7C */ lfs f26, 0x7c(r31) +/* 000008EC 0000D67C EF 9C 00 28 */ fsubs f28, f28, f0 +/* 000008F0 0000D680 D0 7F 02 58 */ stfs f3, 0x258(r31) +.L_000008F4: +/* 000008F4 0000D684 EF 7B 68 28 */ fsubs f27, f27, f13 +/* 000008F8 0000D688 D0 9F 02 5C */ stfs f4, 0x25c(r31) +/* 000008FC 0000D68C EF 5A 60 28 */ fsubs f26, f26, f12 +/* 00000900 0000D690 D0 BF 02 60 */ stfs f5, 0x260(r31) +.L_00000904: +/* 00000904 0000D694 EF 9C 07 F2 */ fmuls f28, f28, f31 +/* 00000908 0000D698 D0 DF 02 64 */ stfs f6, 0x264(r31) +/* 0000090C 0000D69C EF 7B 07 F2 */ fmuls f27, f27, f31 +/* 00000910 0000D6A0 D0 FF 02 68 */ stfs f7, 0x268(r31) +/* 00000914 0000D6A4 EF 5A 07 F2 */ fmuls f26, f26, f31 +/* 00000918 0000D6A8 D1 1F 02 70 */ stfs f8, 0x270(r31) +/* 0000091C 0000D6AC D1 3F 02 74 */ stfs f9, 0x274(r31) +/* 00000920 0000D6B0 B1 3F 02 6C */ sth r9, 0x26c(r31) +/* 00000924 0000D6B4 D1 5F 02 18 */ stfs f10, 0x218(r31) +/* 00000928 0000D6B8 C0 1F 01 64 */ lfs f0, 0x164(r31) +/* 0000092C 0000D6BC C1 BF 01 68 */ lfs f13, 0x168(r31) +/* 00000930 0000D6C0 C1 9F 01 6C */ lfs f12, 0x16c(r31) +/* 00000934 0000D6C4 C1 7F 01 70 */ lfs f11, 0x170(r31) +/* 00000938 0000D6C8 C0 5F 00 90 */ lfs f2, 0x90(r31) +/* 0000093C 0000D6CC C0 3F 00 94 */ lfs f1, 0x94(r31) +/* 00000940 0000D6D0 C3 DF 00 98 */ lfs f30, 0x98(r31) +/* 00000944 0000D6D4 EC 42 00 28 */ fsubs f2, f2, f0 +/* 00000948 0000D6D8 C3 BF 00 9C */ lfs f29, 0x9c(r31) +/* 0000094C 0000D6DC EC 21 68 28 */ fsubs f1, f1, f13 +/* 00000950 0000D6E0 EF DE 60 28 */ fsubs f30, f30, f12 +/* 00000954 0000D6E4 C0 1F 01 5C */ lfs f0, 0x15c(r31) +/* 00000958 0000D6E8 EF BD 58 28 */ fsubs f29, f29, f11 +/* 0000095C 0000D6EC C1 9F 01 54 */ lfs f12, 0x154(r31) +/* 00000960 0000D6F0 C1 7F 01 58 */ lfs f11, 0x158(r31) +/* 00000964 0000D6F4 EC 42 07 F2 */ fmuls f2, f2, f31 +/* 00000968 0000D6F8 C1 BF 01 60 */ lfs f13, 0x160(r31) +/* 0000096C 0000D6FC EC 21 07 F2 */ fmuls f1, f1, f31 +/* 00000970 0000D700 C0 7F 00 80 */ lfs f3, 0x80(r31) +/* 00000974 0000D704 EF DE 07 F2 */ fmuls f30, f30, f31 +/* 00000978 0000D708 C0 9F 00 84 */ lfs f4, 0x84(r31) +/* 0000097C 0000D70C EF BD 07 F2 */ fmuls f29, f29, f31 +/* 00000980 0000D710 C0 BF 00 88 */ lfs f5, 0x88(r31) +/* 00000984 0000D714 EC 63 60 28 */ fsubs f3, f3, f12 +/* 00000988 0000D718 C1 1F 00 8C */ lfs f8, 0x8c(r31) +/* 0000098C 0000D71C EC 84 58 28 */ fsubs f4, f4, f11 +/* 00000990 0000D720 EC A5 00 28 */ fsubs f5, f5, f0 +/* 00000994 0000D724 C1 9F 01 74 */ lfs f12, 0x174(r31) +/* 00000998 0000D728 ED 08 68 28 */ fsubs f8, f8, f13 +.L_0000099C: +/* 0000099C 0000D72C C0 1F 01 7C */ lfs f0, 0x17c(r31) +/* 000009A0 0000D730 C1 BF 01 80 */ lfs f13, 0x180(r31) +/* 000009A4 0000D734 EC 63 07 F2 */ fmuls f3, f3, f31 +/* 000009A8 0000D738 C1 5F 00 A0 */ lfs f10, 0xa0(r31) +/* 000009AC 0000D73C EC 84 07 F2 */ fmuls f4, f4, f31 +/* 000009B0 0000D740 C0 FF 00 A4 */ lfs f7, 0xa4(r31) +/* 000009B4 0000D744 EC A5 07 F2 */ fmuls f5, f5, f31 +/* 000009B8 0000D748 C0 DF 00 A8 */ lfs f6, 0xa8(r31) +.L_000009BC: +/* 000009BC 0000D74C ED 4A 60 28 */ fsubs f10, f10, f12 +/* 000009C0 0000D750 C1 3F 00 AC */ lfs f9, 0xac(r31) +/* 000009C4 0000D754 ED 08 07 F2 */ fmuls f8, f8, f31 +/* 000009C8 0000D758 C1 7F 01 78 */ lfs f11, 0x178(r31) +/* 000009CC 0000D75C EC C6 00 28 */ fsubs f6, f6, f0 +/* 000009D0 0000D760 D3 9F 02 1C */ stfs f28, 0x21c(r31) +/* 000009D4 0000D764 ED 29 68 28 */ fsubs f9, f9, f13 +/* 000009D8 0000D768 D3 7F 02 20 */ stfs f27, 0x220(r31) +.L_000009DC: +/* 000009DC 0000D76C EC E7 58 28 */ fsubs f7, f7, f11 +/* 000009E0 0000D770 D3 5F 02 24 */ stfs f26, 0x224(r31) +/* 000009E4 0000D774 ED 89 07 F2 */ fmuls f12, f9, f31 +/* 000009E8 0000D778 D0 5F 02 38 */ stfs f2, 0x238(r31) +/* 000009EC 0000D77C ED AA 07 F2 */ fmuls f13, f10, f31 +/* 000009F0 0000D780 D0 3F 02 3C */ stfs f1, 0x23c(r31) +/* 000009F4 0000D784 EC 07 07 F2 */ fmuls f0, f7, f31 +/* 000009F8 0000D788 D3 DF 02 40 */ stfs f30, 0x240(r31) +/* 000009FC 0000D78C EF E6 07 F2 */ fmuls f31, f6, f31 +/* 00000A00 0000D790 D3 BF 02 44 */ stfs f29, 0x244(r31) +.L_00000A04: +/* 00000A04 0000D794 D0 7F 02 28 */ stfs f3, 0x228(r31) +/* 00000A08 0000D798 D0 9F 02 2C */ stfs f4, 0x22c(r31) +/* 00000A0C 0000D79C D0 BF 02 30 */ stfs f5, 0x230(r31) +/* 00000A10 0000D7A0 D1 1F 02 34 */ stfs f8, 0x234(r31) +/* 00000A14 0000D7A4 D1 41 00 48 */ stfs f10, 0x48(r1) +/* 00000A18 0000D7A8 D1 9F 02 54 */ stfs f12, 0x254(r31) +/* 00000A1C 0000D7AC D1 BF 02 48 */ stfs f13, 0x248(r31) +/* 00000A20 0000D7B0 D0 1F 02 4C */ stfs f0, 0x24c(r31) +/* 00000A24 0000D7B4 D3 FF 02 50 */ stfs f31, 0x250(r31) +/* 00000A28 0000D7B8 D0 E1 00 4C */ stfs f7, 0x4c(r1) +/* 00000A2C 0000D7BC D0 C1 00 50 */ stfs f6, 0x50(r1) +/* 00000A30 0000D7C0 D1 21 00 54 */ stfs f9, 0x54(r1) +/* 00000A34 0000D7C4 80 01 00 B4 */ lwz r0, 0xb4(r1) +/* 00000A38 0000D7C8 7C 08 03 A6 */ mtlr r0 +/* 00000A3C 0000D7CC BB 81 00 70 */ lmw r28, 0x70(r1) +/* 00000A40 0000D7D0 E3 41 00 80 */ psq_l f26, 0x80(r1), 0, qr0 +/* 00000A44 0000D7D4 E3 61 00 88 */ psq_l f27, 0x88(r1), 0, qr0 +/* 00000A48 0000D7D8 E3 81 00 90 */ psq_l f28, 0x90(r1), 0, qr0 +/* 00000A4C 0000D7DC E3 A1 00 98 */ psq_l f29, 0x98(r1), 0, qr0 +/* 00000A50 0000D7E0 E3 C1 00 A0 */ psq_l f30, 0xa0(r1), 0, qr0 +/* 00000A54 0000D7E4 E3 E1 00 A8 */ psq_l f31, 0xa8(r1), 0, qr0 +/* 00000A58 0000D7E8 38 21 00 B0 */ addi r1, r1, 0xb0 +/* 00000A5C 0000D7EC 4E 80 00 20 */ blr +.endfn SetCameraMatrix__6CameraRC8bMatrix4f + +# .text:0xA60 | size: 0x2B4 +.fn ApplyNoise__6CameraP8bMatrix4ff, global +/* 00000A60 0000D7F0 94 21 FF 30 */ stwu r1, -0xd0(r1) +/* 00000A64 0000D7F4 7C 08 02 A6 */ mflr r0 +/* 00000A68 0000D7F8 F3 61 00 A8 */ psq_st f27, 0xa8(r1), 0, qr0 +/* 00000A6C 0000D7FC F3 81 00 B0 */ psq_st f28, 0xb0(r1), 0, qr0 +/* 00000A70 0000D800 F3 A1 00 B8 */ psq_st f29, 0xb8(r1), 0, qr0 +/* 00000A74 0000D804 F3 C1 00 C0 */ psq_st f30, 0xc0(r1), 0, qr0 +/* 00000A78 0000D808 F3 E1 00 C8 */ psq_st f31, 0xc8(r1), 0, qr0 +/* 00000A7C 0000D80C BF 41 00 90 */ stmw r26, 0x90(r1) +/* 00000A80 0000D810 90 01 00 D4 */ stw r0, 0xd4(r1) +/* 00000A84 0000D814 7C 7E 1B 78 */ mr r30, r3 +/* 00000A88 0000D818 3B 81 00 08 */ addi r28, r1, 0x8 +/* 00000A8C 0000D81C C0 1E 00 70 */ lfs f0, 0x70(r30) +/* 00000A90 0000D820 FF C0 08 90 */ fmr f30, f1 +/* 00000A94 0000D824 C1 BE 00 74 */ lfs f13, 0x74(r30) +/* 00000A98 0000D828 3B 61 00 48 */ addi r27, r1, 0x48 +/* 00000A9C 0000D82C C1 9E 00 78 */ lfs f12, 0x78(r30) +/* 00000AA0 0000D830 FF 60 10 90 */ fmr f27, f2 +/* 00000AA4 0000D834 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 00000AA8 0000D838 7C 9A 23 78 */ mr r26, r4 +/* 00000AAC 0000D83C D1 A1 00 0C */ stfs f13, 0xc(r1) +/* 00000AB0 0000D840 3F A0 B6 0B */ lis r29, 0xb60b +/* 00000AB4 0000D844 63 BD 60 B7 */ ori r29, r29, 0x60b7 +/* 00000AB8 0000D848 C1 7E 00 7C */ lfs f11, 0x7c(r30) +/* 00000ABC 0000D84C D1 9C 00 08 */ stfs f12, 0x8(r28) +/* 00000AC0 0000D850 D1 61 00 14 */ stfs f11, 0x14(r1) +/* 00000AC4 0000D854 C0 01 00 08 */ lfs f0, 0x8(r1) +/* 00000AC8 0000D858 ED 6B 07 B2 */ fmuls f11, f11, f30 +/* 00000ACC 0000D85C C1 A1 00 0C */ lfs f13, 0xc(r1) +/* 00000AD0 0000D860 C1 9C 00 08 */ lfs f12, 0x8(r28) +/* 00000AD4 0000D864 EC 00 07 B2 */ fmuls f0, f0, f30 +/* 00000AD8 0000D868 ED AD 07 B2 */ fmuls f13, f13, f30 +/* 00000ADC 0000D86C D0 01 00 08 */ stfs f0, 0x8(r1) +/* 00000AE0 0000D870 D1 A1 00 0C */ stfs f13, 0xc(r1) +/* 00000AE4 0000D874 ED 8C 07 B2 */ fmuls f12, f12, f30 +/* 00000AE8 0000D878 D1 9C 00 08 */ stfs f12, 0x8(r28) +/* 00000AEC 0000D87C D1 61 00 14 */ stfs f11, 0x14(r1) +/* 00000AF0 0000D880 C0 21 00 08 */ lfs f1, 0x8(r1) +/* 00000AF4 0000D884 48 00 03 05 */ bl .L_00000DF8 +/* 00000AF8 0000D888 FF 80 08 90 */ fmr f28, f1 +.L_00000AFC: +/* 00000AFC 0000D88C C0 21 00 0C */ lfs f1, 0xc(r1) +/* 00000B00 0000D890 48 00 03 05 */ bl .L_00000E04 +/* 00000B04 0000D894 FF A0 08 90 */ fmr f29, f1 +/* 00000B08 0000D898 C0 21 00 10 */ lfs f1, 0x10(r1) +/* 00000B0C 0000D89C 48 00 03 05 */ bl .L_00000E10 +/* 00000B10 0000D8A0 FF E0 08 90 */ fmr f31, f1 +/* 00000B14 0000D8A4 C0 21 00 14 */ lfs f1, 0x14(r1) +/* 00000B18 0000D8A8 48 00 03 05 */ bl .L_00000E1C +/* 00000B1C 0000D8AC C0 1E 00 80 */ lfs f0, 0x80(r30) +/* 00000B20 0000D8B0 C1 BE 00 84 */ lfs f13, 0x84(r30) +/* 00000B24 0000D8B4 C1 9E 00 88 */ lfs f12, 0x88(r30) +/* 00000B28 0000D8B8 EF 9C 00 32 */ fmuls f28, f28, f0 +/* 00000B2C 0000D8BC C1 7E 00 8C */ lfs f11, 0x8c(r30) +/* 00000B30 0000D8C0 EF BD 03 72 */ fmuls f29, f29, f13 +/* 00000B34 0000D8C4 C1 5E 00 90 */ lfs f10, 0x90(r30) +/* 00000B38 0000D8C8 EF FF 03 32 */ fmuls f31, f31, f12 +.L_00000B3C: +/* 00000B3C 0000D8CC C0 1E 00 94 */ lfs f0, 0x94(r30) +/* 00000B40 0000D8D0 EC 21 02 F2 */ fmuls f1, f1, f11 +/* 00000B44 0000D8D4 C1 BE 00 98 */ lfs f13, 0x98(r30) +/* 00000B48 0000D8D8 D1 41 00 08 */ stfs f10, 0x8(r1) +.L_00000B4C: +/* 00000B4C 0000D8DC D0 01 00 0C */ stfs f0, 0xc(r1) +/* 00000B50 0000D8E0 D3 A1 00 1C */ stfs f29, 0x1c(r1) +/* 00000B54 0000D8E4 D3 E1 00 20 */ stfs f31, 0x20(r1) +/* 00000B58 0000D8E8 D0 21 00 24 */ stfs f1, 0x24(r1) +/* 00000B5C 0000D8EC D3 81 00 18 */ stfs f28, 0x18(r1) +/* 00000B60 0000D8F0 C1 7E 00 9C */ lfs f11, 0x9c(r30) +/* 00000B64 0000D8F4 D1 BC 00 08 */ stfs f13, 0x8(r28) +/* 00000B68 0000D8F8 D1 61 00 14 */ stfs f11, 0x14(r1) +/* 00000B6C 0000D8FC C0 01 00 08 */ lfs f0, 0x8(r1) +/* 00000B70 0000D900 ED 6B 07 B2 */ fmuls f11, f11, f30 +/* 00000B74 0000D904 C1 A1 00 0C */ lfs f13, 0xc(r1) +/* 00000B78 0000D908 C1 9C 00 08 */ lfs f12, 0x8(r28) +/* 00000B7C 0000D90C EC 00 07 B2 */ fmuls f0, f0, f30 +/* 00000B80 0000D910 ED AD 07 B2 */ fmuls f13, f13, f30 +/* 00000B84 0000D914 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 00000B88 0000D918 D1 A1 00 0C */ stfs f13, 0xc(r1) +/* 00000B8C 0000D91C ED 8C 07 B2 */ fmuls f12, f12, f30 +/* 00000B90 0000D920 D1 9C 00 08 */ stfs f12, 0x8(r28) +/* 00000B94 0000D924 D1 61 00 14 */ stfs f11, 0x14(r1) +/* 00000B98 0000D928 C0 21 00 08 */ lfs f1, 0x8(r1) +/* 00000B9C 0000D92C 48 00 03 05 */ bl .L_00000EA0 +/* 00000BA0 0000D930 FF A0 08 90 */ fmr f29, f1 +/* 00000BA4 0000D934 C0 21 00 0C */ lfs f1, 0xc(r1) +/* 00000BA8 0000D938 48 00 03 05 */ bl .L_00000EAC +/* 00000BAC 0000D93C FF C0 08 90 */ fmr f30, f1 +/* 00000BB0 0000D940 C0 21 00 10 */ lfs f1, 0x10(r1) +/* 00000BB4 0000D944 48 00 03 05 */ bl .L_00000EB8 +/* 00000BB8 0000D948 FF E0 08 90 */ fmr f31, f1 +/* 00000BBC 0000D94C C0 21 00 14 */ lfs f1, 0x14(r1) +/* 00000BC0 0000D950 48 00 03 05 */ bl .L_00000EC4 +/* 00000BC4 0000D954 C0 1E 00 A0 */ lfs f0, 0xa0(r30) +/* 00000BC8 0000D958 38 61 00 48 */ addi r3, r1, 0x48 +/* 00000BCC 0000D95C C1 BE 00 A4 */ lfs f13, 0xa4(r30) +/* 00000BD0 0000D960 C1 5E 00 A8 */ lfs f10, 0xa8(r30) +/* 00000BD4 0000D964 EF BD 00 32 */ fmuls f29, f29, f0 +/* 00000BD8 0000D968 C1 3E 00 AC */ lfs f9, 0xac(r30) +/* 00000BDC 0000D96C EF DE 03 72 */ fmuls f30, f30, f13 +/* 00000BE0 0000D970 C1 81 00 18 */ lfs f12, 0x18(r1) +/* 00000BE4 0000D974 EF FF 02 B2 */ fmuls f31, f31, f10 +/* 00000BE8 0000D978 C1 61 00 1C */ lfs f11, 0x1c(r1) +.L_00000BEC: +/* 00000BEC 0000D97C EC 21 02 72 */ fmuls f1, f1, f9 +/* 00000BF0 0000D980 C1 A1 00 20 */ lfs f13, 0x20(r1) +/* 00000BF4 0000D984 ED 8C E8 2A */ fadds f12, f12, f29 +/* 00000BF8 0000D988 C0 01 00 24 */ lfs f0, 0x24(r1) +/* 00000BFC 0000D98C ED 6B F0 2A */ fadds f11, f11, f30 +/* 00000C00 0000D990 ED AD F8 2A */ fadds f13, f13, f31 +/* 00000C04 0000D994 D3 E1 00 30 */ stfs f31, 0x30(r1) +/* 00000C08 0000D998 EC 00 08 2A */ fadds f0, f0, f1 +/* 00000C0C 0000D99C D3 A1 00 28 */ stfs f29, 0x28(r1) +/* 00000C10 0000D9A0 EC 00 06 F2 */ fmuls f0, f0, f27 +/* 00000C14 0000D9A4 D3 C1 00 2C */ stfs f30, 0x2c(r1) +/* 00000C18 0000D9A8 ED 8C 06 F2 */ fmuls f12, f12, f27 +/* 00000C1C 0000D9AC D0 01 00 44 */ stfs f0, 0x44(r1) +/* 00000C20 0000D9B0 ED 6B 06 F2 */ fmuls f11, f11, f27 +/* 00000C24 0000D9B4 D1 81 00 38 */ stfs f12, 0x38(r1) +/* 00000C28 0000D9B8 ED AD 06 F2 */ fmuls f13, f13, f27 +/* 00000C2C 0000D9BC D1 61 00 3C */ stfs f11, 0x3c(r1) +/* 00000C30 0000D9C0 D1 A1 00 40 */ stfs f13, 0x40(r1) +/* 00000C34 0000D9C4 D0 21 00 34 */ stfs f1, 0x34(r1) +/* 00000C38 0000D9C8 48 00 00 01 */ bl PSMTX44Identity +/* 00000C3C 0000D9CC 3D 20 00 00 */ lis r9, .rodata+0x78@ha +/* 00000C40 0000D9D0 C0 01 00 40 */ lfs f0, 0x40(r1) +/* 00000C44 0000D9D4 C3 E9 00 78 */ lfs f31, .rodata+0x78@l(r9) +/* 00000C48 0000D9D8 7F C3 F3 78 */ mr r3, r30 +/* 00000C4C 0000D9DC C1 81 00 38 */ lfs f12, 0x38(r1) +/* 00000C50 0000D9E0 EC 00 07 F2 */ fmuls f0, f0, f31 +/* 00000C54 0000D9E4 C1 61 00 3C */ lfs f11, 0x3c(r1) +/* 00000C58 0000D9E8 D1 81 00 78 */ stfs f12, 0x78(r1) +/* 00000C5C 0000D9EC FD A0 00 1E */ fctiwz f13, f0 +/* 00000C60 0000D9F0 D1 61 00 7C */ stfs f11, 0x7c(r1) +/* 00000C64 0000D9F4 D9 A1 00 88 */ stfd f13, 0x88(r1) +/* 00000C68 0000D9F8 81 21 00 8C */ lwz r9, 0x8c(r1) +/* 00000C6C 0000D9FC 7C 89 E8 96 */ mulhw r4, r9, r29 +.L_00000C70: +/* 00000C70 0000DA00 7D 20 FE 70 */ srawi r0, r9, 31 +/* 00000C74 0000DA04 7C 84 4A 14 */ add r4, r4, r9 +/* 00000C78 0000DA08 7C 84 46 70 */ srawi r4, r4, 8 +/* 00000C7C 0000DA0C 7C 80 20 50 */ subf r4, r0, r4 +/* 00000C80 0000DA10 54 84 04 3E */ clrlwi r4, r4, 16 +/* 00000C84 0000DA14 48 00 03 99 */ bl .L_0000101C +/* 00000C88 0000DA18 7C 65 1B 78 */ mr r5, r3 +/* 00000C8C 0000DA1C 7F 64 DB 78 */ mr r4, r27 +/* 00000C90 0000DA20 7F 63 DB 78 */ mr r3, r27 +/* 00000C94 0000DA24 48 00 00 01 */ bl eRotateX__FP8bMatrix4T0Us +/* 00000C98 0000DA28 C0 01 00 44 */ lfs f0, 0x44(r1) +.L_00000C9C: +/* 00000C9C 0000DA2C 7F C3 F3 78 */ mr r3, r30 +/* 00000CA0 0000DA30 EC 00 07 F2 */ fmuls f0, f0, f31 +/* 00000CA4 0000DA34 FD A0 00 1E */ fctiwz f13, f0 +/* 00000CA8 0000DA38 D9 A1 00 88 */ stfd f13, 0x88(r1) +/* 00000CAC 0000DA3C 81 21 00 8C */ lwz r9, 0x8c(r1) +/* 00000CB0 0000DA40 7F A9 E8 96 */ mulhw r29, r9, r29 +/* 00000CB4 0000DA44 7D 20 FE 70 */ srawi r0, r9, 31 +/* 00000CB8 0000DA48 7F BD 4A 14 */ add r29, r29, r9 +/* 00000CBC 0000DA4C 7F BD 46 70 */ srawi r29, r29, 8 +/* 00000CC0 0000DA50 7F A0 E8 50 */ subf r29, r0, r29 +/* 00000CC4 0000DA54 57 A4 04 3E */ clrlwi r4, r29, 16 +/* 00000CC8 0000DA58 48 00 03 99 */ bl .L_00001060 +/* 00000CCC 0000DA5C 7C 65 1B 78 */ mr r5, r3 +/* 00000CD0 0000DA60 7F 64 DB 78 */ mr r4, r27 +/* 00000CD4 0000DA64 7F 63 DB 78 */ mr r3, r27 +/* 00000CD8 0000DA68 48 00 00 01 */ bl eRotateY__FP8bMatrix4T0Us +/* 00000CDC 0000DA6C 7F 43 D3 78 */ mr r3, r26 +/* 00000CE0 0000DA70 7F 65 DB 78 */ mr r5, r27 +/* 00000CE4 0000DA74 7C 64 1B 78 */ mr r4, r3 +.L_00000CE8: +/* 00000CE8 0000DA78 48 00 00 01 */ bl eMulMatrix__FP8bMatrix4N20 +/* 00000CEC 0000DA7C 80 01 00 D4 */ lwz r0, 0xd4(r1) +/* 00000CF0 0000DA80 7C 08 03 A6 */ mtlr r0 +.L_00000CF4: +/* 00000CF4 0000DA84 BB 41 00 90 */ lmw r26, 0x90(r1) +/* 00000CF8 0000DA88 E3 61 00 A8 */ psq_l f27, 0xa8(r1), 0, qr0 +/* 00000CFC 0000DA8C E3 81 00 B0 */ psq_l f28, 0xb0(r1), 0, qr0 +/* 00000D00 0000DA90 E3 A1 00 B8 */ psq_l f29, 0xb8(r1), 0, qr0 +/* 00000D04 0000DA94 E3 C1 00 C0 */ psq_l f30, 0xc0(r1), 0, qr0 +/* 00000D08 0000DA98 E3 E1 00 C8 */ psq_l f31, 0xc8(r1), 0, qr0 +/* 00000D0C 0000DA9C 38 21 00 D0 */ addi r1, r1, 0xd0 +/* 00000D10 0000DAA0 4E 80 00 20 */ blr +.endfn ApplyNoise__6CameraP8bMatrix4ff + +# .text:0xD14 | size: 0xC +# Attrib::Gen::ecar::ClassKey +.fn ClassKey__Q36Attrib3Gen4ecar, global +/* 00000D14 0000DAA4 3C 60 A5 B5 */ lis r3, 0xa5b5 +/* 00000D18 0000DAA8 60 63 43 B7 */ ori r3, r3, 0x43b7 +/* 00000D1C 0000DAAC 4E 80 00 20 */ blr +.endfn ClassKey__Q36Attrib3Gen4ecar + +# .text:0xD20 | size: 0xC +# Attrib::Gen::camerainfo::ClassKey +.fn ClassKey__Q36Attrib3Gen10camerainfo, global +/* 00000D20 0000DAB0 3C 60 93 C1 */ lis r3, 0x93c1 +/* 00000D24 0000DAB4 60 63 71 E4 */ ori r3, r3, 0x71e4 +/* 00000D28 0000DAB8 4E 80 00 20 */ blr +.endfn ClassKey__Q36Attrib3Gen10camerainfo + +# .text:0xD2C | size: 0x128 +# SampleFloatTable(const float*, int, float, float, float) +.fn SampleFloatTable__FPCfifff, local +/* 00000D2C 0000DABC 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00000D30 0000DAC0 7C 84 23 79 */ mr. r4, r4 +/* 00000D34 0000DAC4 41 81 0D 44 */ bgt .L_00001A78 +/* 00000D38 0000DAC8 3D 20 00 00 */ lis r9, .rodata+0x424@ha +/* 00000D3C 0000DACC C0 29 04 24 */ lfs f1, .rodata+0x424@l(r9) +/* 00000D40 0000DAD0 48 00 0E 4C */ b .L_00001B8C +/* 00000D44 0000DAD4 FC 01 10 00 */ fcmpu cr0, f1, f2 +/* 00000D48 0000DAD8 41 81 0D 54 */ bgt .L_00001A9C +/* 00000D4C 0000DADC C0 23 00 00 */ lfs f1, 0x0(r3) +/* 00000D50 0000DAE0 48 00 0E 4C */ b .L_00001B9C +/* 00000D54 0000DAE4 FC 01 18 00 */ fcmpu cr0, f1, f3 +/* 00000D58 0000DAE8 41 80 0D 6C */ blt .L_00001AC4 +/* 00000D5C 0000DAEC 54 89 10 3A */ slwi r9, r4, 2 +/* 00000D60 0000DAF0 7D 29 1A 14 */ add r9, r9, r3 +/* 00000D64 0000DAF4 C0 29 FF FC */ lfs f1, -0x4(r9) +/* 00000D68 0000DAF8 48 00 0E 4C */ b .L_00001BB4 +/* 00000D6C 0000DAFC 38 E4 FF FF */ subi r7, r4, 0x1 +/* 00000D70 0000DB00 6C E0 80 00 */ xoris r0, r7, 0x8000 +/* 00000D74 0000DB04 3D 00 43 30 */ lis r8, 0x4330 +.L_00000D78: +/* 00000D78 0000DB08 90 01 00 0C */ stw r0, 0xc(r1) +/* 00000D7C 0000DB0C 3D 20 00 00 */ lis r9, .rodata+0x428@ha +/* 00000D80 0000DB10 C9 49 04 28 */ lfd f10, .rodata+0x428@l(r9) +.L_00000D84: +/* 00000D84 0000DB14 ED A3 10 28 */ fsubs f13, f3, f2 +/* 00000D88 0000DB18 91 01 00 08 */ stw r8, 0x8(r1) +/* 00000D8C 0000DB1C ED 61 10 28 */ fsubs f11, f1, f2 +/* 00000D90 0000DB20 7D 69 5B 78 */ mr r9, r11 +/* 00000D94 0000DB24 7D 6A 5B 78 */ mr r10, r11 +/* 00000D98 0000DB28 C8 01 00 08 */ lfd f0, 0x8(r1) +/* 00000D9C 0000DB2C FC 00 50 28 */ fsub f0, f0, f10 +/* 00000DA0 0000DB30 FC 00 00 18 */ frsp f0, f0 +/* 00000DA4 0000DB34 EC 00 68 24 */ fdivs f0, f0, f13 +/* 00000DA8 0000DB38 EC 2B 00 32 */ fmuls f1, f11, f0 +/* 00000DAC 0000DB3C FD A0 08 90 */ fmr f13, f1 +/* 00000DB0 0000DB40 FD 80 68 1E */ fctiwz f12, f13 +/* 00000DB4 0000DB44 D9 81 00 08 */ stfd f12, 0x8(r1) +/* 00000DB8 0000DB48 81 21 00 0C */ lwz r9, 0xc(r1) +/* 00000DBC 0000DB4C 6D 29 80 00 */ xoris r9, r9, 0x8000 +/* 00000DC0 0000DB50 91 21 00 0C */ stw r9, 0xc(r1) +/* 00000DC4 0000DB54 91 01 00 08 */ stw r8, 0x8(r1) +/* 00000DC8 0000DB58 C8 01 00 08 */ lfd f0, 0x8(r1) +/* 00000DCC 0000DB5C FC 00 50 28 */ fsub f0, f0, f10 +/* 00000DD0 0000DB60 FD A0 00 18 */ frsp f13, f0 +/* 00000DD4 0000DB64 FC 0D 08 00 */ fcmpu cr0, f13, f1 +/* 00000DD8 0000DB68 4C 62 03 82 */ cror un, eq, lt +/* 00000DDC 0000DB6C 41 83 0D EC */ bso .L_00001BC8 +/* 00000DE0 0000DB70 3D 20 00 00 */ lis r9, .rodata+0x430@ha +/* 00000DE4 0000DB74 C0 09 04 30 */ lfs f0, .rodata+0x430@l(r9) +/* 00000DE8 0000DB78 ED AD 00 28 */ fsubs f13, f13, f0 +/* 00000DEC 0000DB7C FC 00 68 90 */ fmr f0, f13 +/* 00000DF0 0000DB80 FD A0 00 1E */ fctiwz f13, f0 +/* 00000DF4 0000DB84 7D 69 5B 78 */ mr r9, r11 +.L_00000DF8: +/* 00000DF8 0000DB88 D9 A1 00 08 */ stfd f13, 0x8(r1) +/* 00000DFC 0000DB8C 81 61 00 0C */ lwz r11, 0xc(r1) +/* 00000E00 0000DB90 6D 60 80 00 */ xoris r0, r11, 0x8000 +.L_00000E04: +/* 00000E04 0000DB94 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00000E08 0000DB98 90 01 00 0C */ stw r0, 0xc(r1) +/* 00000E0C 0000DB9C 91 01 00 08 */ stw r8, 0x8(r1) +.L_00000E10: +/* 00000E10 0000DBA0 C8 01 00 08 */ lfd f0, 0x8(r1) +/* 00000E14 0000DBA4 FC 00 50 28 */ fsub f0, f0, f10 +/* 00000E18 0000DBA8 FC 00 00 18 */ frsp f0, f0 +.L_00000E1C: +/* 00000E1C 0000DBAC EC 41 00 28 */ fsubs f2, f1, f0 +/* 00000E20 0000DBB0 40 80 0E 28 */ bge .L_00001C48 +/* 00000E24 0000DBB4 39 60 00 00 */ li r11, 0x0 +/* 00000E28 0000DBB8 7C 0B 38 00 */ cmpw r11, r7 +/* 00000E2C 0000DBBC 41 80 0E 34 */ blt .L_00001C60 +/* 00000E30 0000DBC0 39 64 FF FE */ subi r11, r4, 0x2 +/* 00000E34 0000DBC4 55 60 10 3A */ slwi r0, r11, 2 +/* 00000E38 0000DBC8 7D 20 1A 14 */ add r9, r0, r3 +/* 00000E3C 0000DBCC 7C 03 04 2E */ lfsx f0, r3, r0 +/* 00000E40 0000DBD0 C0 29 00 04 */ lfs f1, 0x4(r9) +/* 00000E44 0000DBD4 EC 21 00 28 */ fsubs f1, f1, f0 +/* 00000E48 0000DBD8 EC 21 00 BA */ fmadds f1, f1, f2, f0 +/* 00000E4C 0000DBDC 38 21 00 10 */ addi r1, r1, 0x10 +/* 00000E50 0000DBE0 4E 80 00 20 */ blr +.endfn SampleFloatTable__FPCfifff + +# .text:0xE54 | size: 0x138 +# SampleVector2Table(const bVector2*, int, float, float, float) +.fn SampleVector2Table__FPC8bVector2ifff, local +/* 00000E54 0000DBE4 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 00000E58 0000DBE8 7C A5 2B 79 */ mr. r5, r5 +/* 00000E5C 0000DBEC 41 81 0E 74 */ bgt .L_00001CD0 +/* 00000E60 0000DBF0 3D 20 00 00 */ lis r9, .rodata+0x434@ha +/* 00000E64 0000DBF4 C0 09 04 34 */ lfs f0, .rodata+0x434@l(r9) +/* 00000E68 0000DBF8 D0 03 00 04 */ stfs f0, 0x4(r3) +/* 00000E6C 0000DBFC D0 03 00 00 */ stfs f0, 0x0(r3) +/* 00000E70 0000DC00 48 00 0F 84 */ b .L_00001DF4 +/* 00000E74 0000DC04 FC 01 10 00 */ fcmpu cr0, f1, f2 +/* 00000E78 0000DC08 4C 62 03 82 */ cror un, eq, lt +/* 00000E7C 0000DC0C 41 83 0F 84 */ bso .L_00001E00 +/* 00000E80 0000DC10 FC 01 18 00 */ fcmpu cr0, f1, f3 +/* 00000E84 0000DC14 4C 62 0B 82 */ cror un, eq, gt +/* 00000E88 0000DC18 41 83 0F 84 */ bso .L_00001E0C +/* 00000E8C 0000DC1C 38 E5 FF FF */ subi r7, r5, 0x1 +/* 00000E90 0000DC20 6C E0 80 00 */ xoris r0, r7, 0x8000 +/* 00000E94 0000DC24 3D 00 43 30 */ lis r8, 0x4330 +/* 00000E98 0000DC28 90 01 00 14 */ stw r0, 0x14(r1) +/* 00000E9C 0000DC2C 3D 20 00 00 */ lis r9, .rodata+0x438@ha +.L_00000EA0: +/* 00000EA0 0000DC30 C9 49 04 38 */ lfd f10, .rodata+0x438@l(r9) +/* 00000EA4 0000DC34 ED A3 10 28 */ fsubs f13, f3, f2 +/* 00000EA8 0000DC38 91 01 00 10 */ stw r8, 0x10(r1) +.L_00000EAC: +/* 00000EAC 0000DC3C ED 61 10 28 */ fsubs f11, f1, f2 +/* 00000EB0 0000DC40 7D 69 5B 78 */ mr r9, r11 +/* 00000EB4 0000DC44 7D 6A 5B 78 */ mr r10, r11 +.L_00000EB8: +/* 00000EB8 0000DC48 C8 01 00 10 */ lfd f0, 0x10(r1) +/* 00000EBC 0000DC4C FC 00 50 28 */ fsub f0, f0, f10 +/* 00000EC0 0000DC50 FC 00 00 18 */ frsp f0, f0 +.L_00000EC4: +/* 00000EC4 0000DC54 EC 00 68 24 */ fdivs f0, f0, f13 +/* 00000EC8 0000DC58 EC 2B 00 32 */ fmuls f1, f11, f0 +/* 00000ECC 0000DC5C FD A0 08 90 */ fmr f13, f1 +/* 00000ED0 0000DC60 FD 80 68 1E */ fctiwz f12, f13 +/* 00000ED4 0000DC64 D9 81 00 10 */ stfd f12, 0x10(r1) +/* 00000ED8 0000DC68 81 21 00 14 */ lwz r9, 0x14(r1) +/* 00000EDC 0000DC6C 6D 29 80 00 */ xoris r9, r9, 0x8000 +/* 00000EE0 0000DC70 91 21 00 14 */ stw r9, 0x14(r1) +/* 00000EE4 0000DC74 91 01 00 10 */ stw r8, 0x10(r1) +/* 00000EE8 0000DC78 C8 01 00 10 */ lfd f0, 0x10(r1) +/* 00000EEC 0000DC7C FC 00 50 28 */ fsub f0, f0, f10 +/* 00000EF0 0000DC80 FD A0 00 18 */ frsp f13, f0 +/* 00000EF4 0000DC84 FC 0D 08 00 */ fcmpu cr0, f13, f1 +/* 00000EF8 0000DC88 4C 62 03 82 */ cror un, eq, lt +/* 00000EFC 0000DC8C 41 83 0F 0C */ bso .L_00001E08 +/* 00000F00 0000DC90 3D 20 00 00 */ lis r9, .rodata+0x440@ha +/* 00000F04 0000DC94 C0 09 04 40 */ lfs f0, .rodata+0x440@l(r9) +/* 00000F08 0000DC98 ED AD 00 28 */ fsubs f13, f13, f0 +/* 00000F0C 0000DC9C FC 00 68 90 */ fmr f0, f13 +/* 00000F10 0000DCA0 FD A0 00 1E */ fctiwz f13, f0 +/* 00000F14 0000DCA4 7D 69 5B 78 */ mr r9, r11 +/* 00000F18 0000DCA8 D9 A1 00 10 */ stfd f13, 0x10(r1) +/* 00000F1C 0000DCAC 81 61 00 14 */ lwz r11, 0x14(r1) +/* 00000F20 0000DCB0 6D 60 80 00 */ xoris r0, r11, 0x8000 +/* 00000F24 0000DCB4 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00000F28 0000DCB8 90 01 00 14 */ stw r0, 0x14(r1) +.L_00000F2C: +/* 00000F2C 0000DCBC 91 01 00 10 */ stw r8, 0x10(r1) +/* 00000F30 0000DCC0 C8 01 00 10 */ lfd f0, 0x10(r1) +/* 00000F34 0000DCC4 FC 00 50 28 */ fsub f0, f0, f10 +/* 00000F38 0000DCC8 FC 00 00 18 */ frsp f0, f0 +/* 00000F3C 0000DCCC EC 21 00 28 */ fsubs f1, f1, f0 +/* 00000F40 0000DCD0 40 80 0F 48 */ bge .L_00001E88 +/* 00000F44 0000DCD4 39 60 00 00 */ li r11, 0x0 +/* 00000F48 0000DCD8 7C 0B 38 00 */ cmpw r11, r7 +/* 00000F4C 0000DCDC 41 80 0F 54 */ blt .L_00001EA0 +/* 00000F50 0000DCE0 39 65 FF FE */ subi r11, r5, 0x2 +/* 00000F54 0000DCE4 55 60 18 38 */ slwi r0, r11, 3 +/* 00000F58 0000DCE8 7D 20 22 14 */ add r9, r0, r4 +/* 00000F5C 0000DCEC 7D 64 04 2E */ lfsx f11, r4, r0 +.L_00000F60: +/* 00000F60 0000DCF0 C1 89 00 04 */ lfs f12, 0x4(r9) +/* 00000F64 0000DCF4 C1 A9 00 08 */ lfs f13, 0x8(r9) +/* 00000F68 0000DCF8 C0 09 00 0C */ lfs f0, 0xc(r9) +/* 00000F6C 0000DCFC ED AD 58 28 */ fsubs f13, f13, f11 +/* 00000F70 0000DD00 EC 00 60 28 */ fsubs f0, f0, f12 +/* 00000F74 0000DD04 EC 00 60 7A */ fmadds f0, f0, f1, f12 +/* 00000F78 0000DD08 ED AD 58 7A */ fmadds f13, f13, f1, f11 +/* 00000F7C 0000DD0C D0 01 00 0C */ stfs f0, 0xc(r1) +/* 00000F80 0000DD10 D1 A1 00 08 */ stfs f13, 0x8(r1) +/* 00000F84 0000DD14 38 21 00 18 */ addi r1, r1, 0x18 +/* 00000F88 0000DD18 4E 80 00 20 */ blr +.endfn SampleVector2Table__FPC8bVector2ifff + +# .text:0xF8C | size: 0x2C +# OutsidePovType(int) +.fn OutsidePovType__Fi, global +/* 00000F8C 0000DD1C 38 03 FF FE */ subi r0, r3, 0x2 +/* 00000F90 0000DD20 39 20 00 00 */ li r9, 0x0 +/* 00000F94 0000DD24 28 00 00 02 */ cmplwi r0, 0x2 +/* 00000F98 0000DD28 40 81 0F AC */ ble .L_00001F44 +/* 00000F9C 0000DD2C 2C 03 00 06 */ cmpwi r3, 0x6 +/* 00000FA0 0000DD30 41 82 0F AC */ beq .L_00001F4C +/* 00000FA4 0000DD34 2C 03 00 05 */ cmpwi r3, 0x5 +/* 00000FA8 0000DD38 40 82 0F B0 */ bne .L_00001F58 +/* 00000FAC 0000DD3C 39 20 00 01 */ li r9, 0x1 +/* 00000FB0 0000DD40 7D 23 4B 78 */ mr r3, r9 +/* 00000FB4 0000DD44 4E 80 00 20 */ blr +.endfn OutsidePovType__Fi + +# .text:0xFB8 | size: 0x3C +# RenderCarPovType(int, bool) +.fn RenderCarPovType__Fib, global +/* 00000FB8 0000DD48 38 03 FF FE */ subi r0, r3, 0x2 +/* 00000FBC 0000DD4C 39 20 00 00 */ li r9, 0x0 +/* 00000FC0 0000DD50 28 00 00 02 */ cmplwi r0, 0x2 +/* 00000FC4 0000DD54 40 81 0F E8 */ ble .L_00001FAC +/* 00000FC8 0000DD58 2C 03 00 01 */ cmpwi r3, 0x1 +/* 00000FCC 0000DD5C 40 82 0F D8 */ bne .L_00001FA4 +/* 00000FD0 0000DD60 2C 04 00 00 */ cmpwi r4, 0x0 +/* 00000FD4 0000DD64 41 82 0F E8 */ beq .L_00001FBC +/* 00000FD8 0000DD68 2C 03 00 06 */ cmpwi r3, 0x6 +/* 00000FDC 0000DD6C 41 82 0F E8 */ beq .L_00001FC4 +/* 00000FE0 0000DD70 2C 03 00 05 */ cmpwi r3, 0x5 +/* 00000FE4 0000DD74 40 82 0F EC */ bne .L_00001FD0 +/* 00000FE8 0000DD78 39 20 00 01 */ li r9, 0x1 +/* 00000FEC 0000DD7C 7D 23 4B 78 */ mr r3, r9 +/* 00000FF0 0000DD80 4E 80 00 20 */ blr +.endfn RenderCarPovType__Fib + +# .text:0xFF4 | size: 0x24 +.fn Blend__t6tTable1ZfPfN21f, global +/* 00000FF4 0000DD84 3D 20 00 00 */ lis r9, .rodata+0x444@ha +/* 00000FF8 0000DD88 C1 A6 00 00 */ lfs f13, 0x0(r6) +/* 00000FFC 0000DD8C C0 09 04 44 */ lfs f0, .rodata+0x444@l(r9) +/* 00001000 0000DD90 C1 85 00 00 */ lfs f12, 0x0(r5) +/* 00001004 0000DD94 EC 00 08 28 */ fsubs f0, f0, f1 +/* 00001008 0000DD98 ED AD 00 32 */ fmuls f13, f13, f0 +/* 0000100C 0000DD9C ED 8C 68 7A */ fmadds f12, f12, f1, f13 +/* 00001010 0000DDA0 D1 84 00 00 */ stfs f12, 0x0(r4) +/* 00001014 0000DDA4 4E 80 00 20 */ blr +.endfn Blend__t6tTable1ZfPfN21f + +# .text:0x1018 | size: 0x38 +.fn Blend__t6tTable1Z8bVector2P8bVector2N21f, global +/* 00001018 0000DDA8 3D 20 00 00 */ lis r9, .rodata+0x448@ha +.L_0000101C: +/* 0000101C 0000DDAC C0 06 00 00 */ lfs f0, 0x0(r6) +/* 00001020 0000DDB0 C1 89 04 48 */ lfs f12, .rodata+0x448@l(r9) +/* 00001024 0000DDB4 C1 A5 00 00 */ lfs f13, 0x0(r5) +/* 00001028 0000DDB8 ED 8C 08 28 */ fsubs f12, f12, f1 +/* 0000102C 0000DDBC EC 00 03 32 */ fmuls f0, f0, f12 +/* 00001030 0000DDC0 ED AD 00 7A */ fmadds f13, f13, f1, f0 +/* 00001034 0000DDC4 D1 A4 00 00 */ stfs f13, 0x0(r4) +/* 00001038 0000DDC8 C0 06 00 04 */ lfs f0, 0x4(r6) +/* 0000103C 0000DDCC C1 A5 00 04 */ lfs f13, 0x4(r5) +/* 00001040 0000DDD0 EC 00 03 32 */ fmuls f0, f0, f12 +/* 00001044 0000DDD4 ED AD 00 7A */ fmadds f13, f13, f1, f0 +/* 00001048 0000DDD8 D1 A4 00 04 */ stfs f13, 0x4(r4) +/* 0000104C 0000DDDC 4E 80 00 20 */ blr +.endfn Blend__t6tTable1Z8bVector2P8bVector2N21f + +# .text:0x1050 | size: 0x31C +.fn __12CameraAnchori, global +/* 00001050 0000DDE0 94 21 FF D8 */ stwu r1, -0x28(r1) +/* 00001054 0000DDE4 7C 08 02 A6 */ mflr r0 +/* 00001058 0000DDE8 F3 E1 00 20 */ psq_st f31, 0x20(r1), 0, qr0 +/* 0000105C 0000DDEC BF 81 00 10 */ stmw r28, 0x10(r1) +.L_00001060: +/* 00001060 0000DDF0 90 01 00 2C */ stw r0, 0x2c(r1) +/* 00001064 0000DDF4 3D 20 00 00 */ lis r9, .rodata+0x44C@ha +/* 00001068 0000DDF8 7C 7F 1B 78 */ mr r31, r3 +/* 0000106C 0000DDFC C3 E9 04 4C */ lfs f31, .rodata+0x44C@l(r9) +/* 00001070 0000DE00 3B C0 00 00 */ li r30, 0x0 +/* 00001074 0000DE04 7C 9C 23 78 */ mr r28, r4 +/* 00001078 0000DE08 93 DF 00 88 */ stw r30, 0x88(r31) +/* 0000107C 0000DE0C 80 9F 00 94 */ lwz r4, 0x94(r31) +/* 00001080 0000DE10 38 7F 00 90 */ addi r3, r31, 0x90 +/* 00001084 0000DE14 D3 FF 00 10 */ stfs f31, 0x10(r31) +/* 00001088 0000DE18 38 A0 00 00 */ li r5, 0x0 +/* 0000108C 0000DE1C D3 FF 00 14 */ stfs f31, 0x14(r31) +/* 00001090 0000DE20 38 C0 00 00 */ li r6, 0x0 +/* 00001094 0000DE24 93 DF 00 8C */ stw r30, 0x8c(r31) +/* 00001098 0000DE28 48 00 00 01 */ bl __Q26Attrib8InstancePCQ26Attrib10CollectionUiPQ33UTL3COM8IUnknown +/* 0000109C 0000DE2C 80 1F 00 98 */ lwz r0, 0x98(r31) +/* 000010A0 0000DE30 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000010A4 0000DE34 40 82 10 B4 */ bne .L_00002158 +/* 000010A8 0000DE38 38 60 00 FC */ li r3, 0xfc +/* 000010AC 0000DE3C 48 00 00 01 */ bl DefaultDataArea__6AttribUi +/* 000010B0 0000DE40 90 7F 00 98 */ stw r3, 0x98(r31) +/* 000010B4 0000DE44 3D 20 00 00 */ lis r9, .rodata+0x450@ha +/* 000010B8 0000DE48 D3 FF 00 A4 */ stfs f31, 0xa4(r31) +/* 000010BC 0000DE4C C0 09 04 50 */ lfs f0, .rodata+0x450@l(r9) +/* 000010C0 0000DE50 D3 FF 00 A8 */ stfs f31, 0xa8(r31) +/* 000010C4 0000DE54 D3 FF 00 AC */ stfs f31, 0xac(r31) +/* 000010C8 0000DE58 D3 FF 00 B0 */ stfs f31, 0xb0(r31) +/* 000010CC 0000DE5C 93 DF 00 B4 */ stw r30, 0xb4(r31) +/* 000010D0 0000DE60 93 DF 00 B8 */ stw r30, 0xb8(r31) +/* 000010D4 0000DE64 93 DF 00 BC */ stw r30, 0xbc(r31) +/* 000010D8 0000DE68 93 DF 00 C0 */ stw r30, 0xc0(r31) +/* 000010DC 0000DE6C 93 DF 00 C4 */ stw r30, 0xc4(r31) +/* 000010E0 0000DE70 93 DF 00 C8 */ stw r30, 0xc8(r31) +/* 000010E4 0000DE74 93 DF 00 CC */ stw r30, 0xcc(r31) +/* 000010E8 0000DE78 93 DF 00 D0 */ stw r30, 0xd0(r31) +/* 000010EC 0000DE7C D0 1F 00 D4 */ stfs f0, 0xd4(r31) +/* 000010F0 0000DE80 48 00 0D 15 */ bl .L_00001E04 +/* 000010F4 0000DE84 3C 80 EE C2 */ lis r4, 0xeec2 +/* 000010F8 0000DE88 60 84 27 1A */ ori r4, r4, 0x271a +/* 000010FC 0000DE8C 48 00 00 01 */ bl FindCollection__6AttribUiUi +/* 00001100 0000DE90 7C 64 1B 78 */ mr r4, r3 +/* 00001104 0000DE94 38 A0 00 00 */ li r5, 0x0 +/* 00001108 0000DE98 38 7F 00 FC */ addi r3, r31, 0xfc +/* 0000110C 0000DE9C 38 C0 00 00 */ li r6, 0x0 +.L_00001110: +/* 00001110 0000DEA0 48 00 00 01 */ bl __Q26Attrib8InstancePCQ26Attrib10CollectionUiPQ33UTL3COM8IUnknown +/* 00001114 0000DEA4 80 1F 01 04 */ lwz r0, 0x104(r31) +/* 00001118 0000DEA8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000111C 0000DEAC 40 82 11 2C */ bne .L_00002248 +/* 00001120 0000DEB0 38 60 01 20 */ li r3, 0x120 +/* 00001124 0000DEB4 48 00 00 01 */ bl DefaultDataArea__6AttribUi +/* 00001128 0000DEB8 90 7F 01 04 */ stw r3, 0x104(r31) +/* 0000112C 0000DEBC 48 00 0D 21 */ bl .L_00001E4C +/* 00001130 0000DEC0 3C 80 EE C2 */ lis r4, 0xeec2 +/* 00001134 0000DEC4 60 84 27 1A */ ori r4, r4, 0x271a +/* 00001138 0000DEC8 48 00 00 01 */ bl FindCollection__6AttribUiUi +/* 0000113C 0000DECC 7C 64 1B 78 */ mr r4, r3 +/* 00001140 0000DED0 38 A0 00 00 */ li r5, 0x0 +/* 00001144 0000DED4 38 7F 01 10 */ addi r3, r31, 0x110 +/* 00001148 0000DED8 38 C0 00 00 */ li r6, 0x0 +/* 0000114C 0000DEDC 48 00 00 01 */ bl __Q26Attrib8InstancePCQ26Attrib10CollectionUiPQ33UTL3COM8IUnknown +/* 00001150 0000DEE0 80 1F 01 18 */ lwz r0, 0x118(r31) +/* 00001154 0000DEE4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00001158 0000DEE8 40 82 11 68 */ bne .L_000022C0 +/* 0000115C 0000DEEC 38 60 00 84 */ li r3, 0x84 +.L_00001160: +/* 00001160 0000DEF0 48 00 00 01 */ bl DefaultDataArea__6AttribUi +/* 00001164 0000DEF4 90 7F 01 18 */ stw r3, 0x118(r31) +/* 00001168 0000DEF8 83 BF 01 18 */ lwz r29, 0x118(r31) +.L_0000116C: +/* 0000116C 0000DEFC 38 00 00 03 */ li r0, 0x3 +/* 00001170 0000DF00 D3 FF 00 40 */ stfs f31, 0x40(r31) +/* 00001174 0000DF04 D3 FF 00 00 */ stfs f31, 0x0(r31) +/* 00001178 0000DF08 38 7D 00 50 */ addi r3, r29, 0x50 +/* 0000117C 0000DF0C D3 FF 00 04 */ stfs f31, 0x4(r31) +/* 00001180 0000DF10 D3 FF 00 08 */ stfs f31, 0x8(r31) +/* 00001184 0000DF14 D3 FF 00 18 */ stfs f31, 0x18(r31) +/* 00001188 0000DF18 D3 FF 00 1C */ stfs f31, 0x1c(r31) +/* 0000118C 0000DF1C D3 FF 00 20 */ stfs f31, 0x20(r31) +/* 00001190 0000DF20 D3 FF 00 28 */ stfs f31, 0x28(r31) +/* 00001194 0000DF24 D3 FF 00 2C */ stfs f31, 0x2c(r31) +/* 00001198 0000DF28 D3 FF 00 30 */ stfs f31, 0x30(r31) +/* 0000119C 0000DF2C D3 FF 00 38 */ stfs f31, 0x38(r31) +/* 000011A0 0000DF30 D3 FF 00 3C */ stfs f31, 0x3c(r31) +/* 000011A4 0000DF34 B0 1F 00 D8 */ sth r0, 0xd8(r31) +/* 000011A8 0000DF38 48 00 00 01 */ bl GetLength__CQ26Attrib7Private +/* 000011AC 0000DF3C 7C 1E 18 40 */ cmplw r30, r3 +/* 000011B0 0000DF40 40 80 11 BC */ bge MinDistToWall__11CameraMover +/* 000011B4 0000DF44 38 7D 00 58 */ addi r3, r29, 0x58 +/* 000011B8 0000DF48 48 00 11 C4 */ b .L_0000237C +/* 000011BC 0000DF4C 38 60 00 04 */ li r3, 0x4 +/* 000011C0 0000DF50 48 00 00 01 */ bl DefaultDataArea__6AttribUi +/* 000011C4 0000DF54 3D 20 00 00 */ lis r9, .rodata+0x454@ha +/* 000011C8 0000DF58 C0 03 00 00 */ lfs f0, 0x0(r3) +/* 000011CC 0000DF5C C1 89 04 54 */ lfs f12, .rodata+0x454@l(r9) +/* 000011D0 0000DF60 3C 00 B6 0B */ lis r0, 0xb60b +/* 000011D4 0000DF64 60 00 60 B7 */ ori r0, r0, 0x60b7 +/* 000011D8 0000DF68 EC 00 03 32 */ fmuls f0, f0, f12 +/* 000011DC 0000DF6C 83 DF 01 18 */ lwz r30, 0x118(r31) +/* 000011E0 0000DF70 FD A0 00 1E */ fctiwz f13, f0 +/* 000011E4 0000DF74 38 7E 00 20 */ addi r3, r30, 0x20 +.L_000011E8: +/* 000011E8 0000DF78 D9 A1 00 08 */ stfd f13, 0x8(r1) +/* 000011EC 0000DF7C 81 21 00 0C */ lwz r9, 0xc(r1) +/* 000011F0 0000DF80 7C 09 00 96 */ mulhw r0, r9, r0 +/* 000011F4 0000DF84 7D 2B FE 70 */ srawi r11, r9, 31 +/* 000011F8 0000DF88 7C 00 4A 14 */ add r0, r0, r9 +/* 000011FC 0000DF8C 7C 00 46 70 */ srawi r0, r0, 8 +/* 00001200 0000DF90 7C 0B 00 50 */ subf r0, r11, r0 +/* 00001204 0000DF94 B0 1F 00 DA */ sth r0, 0xda(r31) +/* 00001208 0000DF98 48 00 00 01 */ bl GetLength__CQ26Attrib7Private +/* 0000120C 0000DF9C 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00001210 0000DFA0 41 82 12 1C */ beq .L_0000242C +/* 00001214 0000DFA4 38 7E 00 28 */ addi r3, r30, 0x28 +/* 00001218 0000DFA8 48 00 12 24 */ b .L_0000243C +/* 0000121C 0000DFAC 38 60 00 04 */ li r3, 0x4 +/* 00001220 0000DFB0 48 00 00 01 */ bl DefaultDataArea__6AttribUi +/* 00001224 0000DFB4 C0 03 00 00 */ lfs f0, 0x0(r3) +/* 00001228 0000DFB8 83 DF 01 18 */ lwz r30, 0x118(r31) +/* 0000122C 0000DFBC D0 1F 00 DC */ stfs f0, 0xdc(r31) +/* 00001230 0000DFC0 38 7E 00 40 */ addi r3, r30, 0x40 +/* 00001234 0000DFC4 48 00 00 01 */ bl GetLength__CQ26Attrib7Private +.L_00001238: +/* 00001238 0000DFC8 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000123C 0000DFCC 41 82 12 48 */ beq .L_00002484 +/* 00001240 0000DFD0 38 7E 00 48 */ addi r3, r30, 0x48 +/* 00001244 0000DFD4 48 00 12 50 */ b .L_00002494 +/* 00001248 0000DFD8 38 60 00 04 */ li r3, 0x4 +/* 0000124C 0000DFDC 48 00 00 01 */ bl DefaultDataArea__6AttribUi +/* 00001250 0000DFE0 C0 03 00 00 */ lfs f0, 0x0(r3) +/* 00001254 0000DFE4 83 DF 01 18 */ lwz r30, 0x118(r31) +/* 00001258 0000DFE8 D0 1F 00 E0 */ stfs f0, 0xe0(r31) +/* 0000125C 0000DFEC 38 7E 00 10 */ addi r3, r30, 0x10 +/* 00001260 0000DFF0 48 00 00 01 */ bl GetLength__CQ26Attrib7Private +/* 00001264 0000DFF4 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00001268 0000DFF8 41 82 12 74 */ beq .L_000024DC +/* 0000126C 0000DFFC 38 7E 00 18 */ addi r3, r30, 0x18 +/* 00001270 0000E000 48 00 12 7C */ b .L_000024EC +/* 00001274 0000E004 38 60 00 04 */ li r3, 0x4 +/* 00001278 0000E008 48 00 00 01 */ bl DefaultDataArea__6AttribUi +/* 0000127C 0000E00C C0 03 00 00 */ lfs f0, 0x0(r3) +/* 00001280 0000E010 83 DF 01 18 */ lwz r30, 0x118(r31) +/* 00001284 0000E014 D0 1F 00 E4 */ stfs f0, 0xe4(r31) +/* 00001288 0000E018 38 7E 00 30 */ addi r3, r30, 0x30 +/* 0000128C 0000E01C 48 00 00 01 */ bl GetLength__CQ26Attrib7Private +/* 00001290 0000E020 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00001294 0000E024 41 82 12 A0 */ beq .L_00002534 +/* 00001298 0000E028 38 7E 00 38 */ addi r3, r30, 0x38 +/* 0000129C 0000E02C 48 00 12 A8 */ b .L_00002544 +/* 000012A0 0000E030 38 60 00 04 */ li r3, 0x4 +/* 000012A4 0000E034 48 00 00 01 */ bl DefaultDataArea__6AttribUi +/* 000012A8 0000E038 3D 20 00 00 */ lis r9, .rodata+0x454@ha +/* 000012AC 0000E03C C0 03 00 00 */ lfs f0, 0x0(r3) +.L_000012B0: +/* 000012B0 0000E040 C1 89 04 54 */ lfs f12, .rodata+0x454@l(r9) +/* 000012B4 0000E044 3C 00 B6 0B */ lis r0, 0xb60b +/* 000012B8 0000E048 60 00 60 B7 */ ori r0, r0, 0x60b7 +/* 000012BC 0000E04C EC 00 03 32 */ fmuls f0, f0, f12 +/* 000012C0 0000E050 83 DF 01 18 */ lwz r30, 0x118(r31) +/* 000012C4 0000E054 FD A0 00 1E */ fctiwz f13, f0 +/* 000012C8 0000E058 7F C3 F3 78 */ mr r3, r30 +/* 000012CC 0000E05C D9 A1 00 08 */ stfd f13, 0x8(r1) +/* 000012D0 0000E060 81 21 00 0C */ lwz r9, 0xc(r1) +/* 000012D4 0000E064 7C 09 00 96 */ mulhw r0, r9, r0 +/* 000012D8 0000E068 7D 2B FE 70 */ srawi r11, r9, 31 +/* 000012DC 0000E06C 7C 00 4A 14 */ add r0, r0, r9 +/* 000012E0 0000E070 7C 00 46 70 */ srawi r0, r0, 8 +/* 000012E4 0000E074 7C 0B 00 50 */ subf r0, r11, r0 +/* 000012E8 0000E078 B0 1F 00 E8 */ sth r0, 0xe8(r31) +/* 000012EC 0000E07C 48 00 00 01 */ bl GetLength__CQ26Attrib7Private +/* 000012F0 0000E080 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000012F4 0000E084 41 82 13 00 */ beq .L_000025F4 +/* 000012F8 0000E088 38 7E 00 08 */ addi r3, r30, 0x8 +/* 000012FC 0000E08C 48 00 13 08 */ b .L_00002604 +/* 00001300 0000E090 38 60 00 04 */ li r3, 0x4 +/* 00001304 0000E094 48 00 00 01 */ bl DefaultDataArea__6AttribUi +/* 00001308 0000E098 C0 03 00 00 */ lfs f0, 0x0(r3) +/* 0000130C 0000E09C 83 DF 01 18 */ lwz r30, 0x118(r31) +/* 00001310 0000E0A0 D0 1F 00 EC */ stfs f0, 0xec(r31) +/* 00001314 0000E0A4 38 7E 00 64 */ addi r3, r30, 0x64 +/* 00001318 0000E0A8 48 00 00 01 */ bl GetLength__CQ26Attrib7Private +/* 0000131C 0000E0AC 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00001320 0000E0B0 41 82 13 2C */ beq .L_0000264C +/* 00001324 0000E0B4 38 7E 00 6C */ addi r3, r30, 0x6c +/* 00001328 0000E0B8 48 00 13 34 */ b .L_0000265C +/* 0000132C 0000E0BC 38 60 00 04 */ li r3, 0x4 +/* 00001330 0000E0C0 48 00 00 01 */ bl DefaultDataArea__6AttribUi +/* 00001334 0000E0C4 A0 03 00 02 */ lhz r0, 0x2(r3) +/* 00001338 0000E0C8 7F 84 E3 78 */ mr r4, r28 +/* 0000133C 0000E0CC 7F E3 FB 78 */ mr r3, r31 +/* 00001340 0000E0D0 B0 1F 00 F0 */ sth r0, 0xf0(r31) +/* 00001344 0000E0D4 48 00 13 CD */ bl .L_00002710 +/* 00001348 0000E0D8 38 7F 00 48 */ addi r3, r31, 0x48 +/* 0000134C 0000E0DC 48 00 00 01 */ bl PSMTX44Identity +/* 00001350 0000E0E0 7F E3 FB 78 */ mr r3, r31 +/* 00001354 0000E0E4 80 01 00 2C */ lwz r0, 0x2c(r1) +/* 00001358 0000E0E8 7C 08 03 A6 */ mtlr r0 +/* 0000135C 0000E0EC BB 81 00 10 */ lmw r28, 0x10(r1) +/* 00001360 0000E0F0 E3 E1 00 20 */ psq_l f31, 0x20(r1), 0, qr0 +/* 00001364 0000E0F4 38 21 00 28 */ addi r1, r1, 0x28 +/* 00001368 0000E0F8 4E 80 00 20 */ blr +.endfn __12CameraAnchori + +# .text:0x136C | size: 0x60 +.fn _._12CameraAnchor, global +/* 0000136C 0000E0FC 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00001370 0000E100 7C 08 02 A6 */ mflr r0 +.L_00001374: +/* 00001374 0000E104 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 00001378 0000E108 90 01 00 14 */ stw r0, 0x14(r1) +/* 0000137C 0000E10C 7C 7F 1B 78 */ mr r31, r3 +/* 00001380 0000E110 7C 9E 23 78 */ mr r30, r4 +/* 00001384 0000E114 38 7F 01 10 */ addi r3, r31, 0x110 +/* 00001388 0000E118 38 80 00 00 */ li r4, 0x0 +/* 0000138C 0000E11C 48 00 00 01 */ bl _._Q26Attrib8Instance +/* 00001390 0000E120 38 7F 00 FC */ addi r3, r31, 0xfc +.L_00001394: +/* 00001394 0000E124 38 80 00 00 */ li r4, 0x0 +/* 00001398 0000E128 48 00 00 01 */ bl _._Q26Attrib8Instance +/* 0000139C 0000E12C 38 7F 00 90 */ addi r3, r31, 0x90 +/* 000013A0 0000E130 38 80 00 00 */ li r4, 0x0 +/* 000013A4 0000E134 48 00 00 01 */ bl _._Q26Attrib8Instance +/* 000013A8 0000E138 73 C0 00 01 */ andi. r0, r30, 0x1 +/* 000013AC 0000E13C 41 82 13 B8 */ beq .L_00002764 +/* 000013B0 0000E140 7F E3 FB 78 */ mr r3, r31 +/* 000013B4 0000E144 48 00 00 01 */ bl __builtin_delete +/* 000013B8 0000E148 80 01 00 14 */ lwz r0, 0x14(r1) +/* 000013BC 0000E14C 7C 08 03 A6 */ mtlr r0 +/* 000013C0 0000E150 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 000013C4 0000E154 38 21 00 10 */ addi r1, r1, 0x10 +/* 000013C8 0000E158 4E 80 00 20 */ blr +.endfn _._12CameraAnchor + +# .text:0x13CC | size: 0x78 +.fn SetModel__12CameraAnchori, global +/* 000013CC 0000E15C 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 000013D0 0000E160 7C 08 02 A6 */ mflr r0 +/* 000013D4 0000E164 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 000013D8 0000E168 90 01 00 1C */ stw r0, 0x1c(r1) +/* 000013DC 0000E16C 7C 7E 1B 78 */ mr r30, r3 +/* 000013E0 0000E170 7C 9D 23 78 */ mr r29, r4 +/* 000013E4 0000E174 80 1E 00 88 */ lwz r0, 0x88(r30) +/* 000013E8 0000E178 7C 00 E8 00 */ cmpw r0, r29 +/* 000013EC 0000E17C 41 82 14 30 */ beq .L_0000281C +/* 000013F0 0000E180 7F A3 EB 78 */ mr r3, r29 +/* 000013F4 0000E184 48 00 00 01 */ bl GetCarTypeInfoFromHash__FUi +/* 000013F8 0000E188 7C 63 1B 79 */ mr. r3, r3 +/* 000013FC 0000E18C 40 82 14 08 */ bne .L_00002804 +/* 00001400 0000E190 3D 20 00 00 */ lis r9, .rodata@ha +/* 00001404 0000E194 38 69 00 00 */ addi r3, r9, .rodata@l +/* 00001408 0000E198 93 BE 00 88 */ stw r29, 0x88(r30) +/* 0000140C 0000E19C 3B DE 00 FC */ addi r30, r30, 0xfc +/* 00001410 0000E1A0 48 00 00 01 */ bl StringToLowerCaseKey__6AttribPCc +/* 00001414 0000E1A4 7C 7D 1B 78 */ mr r29, r3 +/* 00001418 0000E1A8 48 00 0D 15 */ bl .L_0000212C +/* 0000141C 0000E1AC 7F A4 EB 78 */ mr r4, r29 +/* 00001420 0000E1B0 48 00 00 01 */ bl FindCollectionWithDefault__6AttribUiUi +/* 00001424 0000E1B4 7C 64 1B 78 */ mr r4, r3 +/* 00001428 0000E1B8 7F C3 F3 78 */ mr r3, r30 +/* 0000142C 0000E1BC 48 00 00 01 */ bl Change__Q26Attrib8InstancePCQ26Attrib10Collection +/* 00001430 0000E1C0 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 00001434 0000E1C4 7C 08 03 A6 */ mtlr r0 +/* 00001438 0000E1C8 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 0000143C 0000E1CC 38 21 00 18 */ addi r1, r1, 0x18 +/* 00001440 0000E1D0 4E 80 00 20 */ blr +.endfn SetModel__12CameraAnchori + +# .text:0x1444 | size: 0x320 +.fn GetPov__12CameraAnchori, global +/* 00001444 0000E1D4 94 21 FF D0 */ stwu r1, -0x30(r1) +/* 00001448 0000E1D8 7C 08 02 A6 */ mflr r0 +/* 0000144C 0000E1DC F3 E1 00 28 */ psq_st f31, 0x28(r1), 0, qr0 +/* 00001450 0000E1E0 BF A1 00 1C */ stmw r29, 0x1c(r1) +/* 00001454 0000E1E4 90 01 00 34 */ stw r0, 0x34(r1) +/* 00001458 0000E1E8 7C 7F 1B 78 */ mr r31, r3 +/* 0000145C 0000E1EC 2C 04 00 03 */ cmpwi r4, 0x3 +/* 00001460 0000E1F0 B0 9F 00 D8 */ sth r4, 0xd8(r31) +/* 00001464 0000E1F4 41 82 14 C0 */ beq .L_00002924 +/* 00001468 0000E1F8 41 81 14 84 */ bgt .L_000028EC +/* 0000146C 0000E1FC 2C 04 00 01 */ cmpwi r4, 0x1 +/* 00001470 0000E200 41 82 14 A8 */ beq .L_00002918 +/* 00001474 0000E204 41 81 14 B4 */ bgt .L_00002928 +/* 00001478 0000E208 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0000147C 0000E20C 41 82 14 9C */ beq .L_00002918 +/* 00001480 0000E210 48 00 14 F0 */ b .L_00002970 +/* 00001484 0000E214 2C 04 00 05 */ cmpwi r4, 0x5 +/* 00001488 0000E218 41 82 14 D8 */ beq .L_00002960 +/* 0000148C 0000E21C 41 80 14 CC */ blt .L_00002958 +/* 00001490 0000E220 2C 04 00 06 */ cmpwi r4, 0x6 +/* 00001494 0000E224 41 82 14 E4 */ beq .L_00002978 +/* 00001498 0000E228 48 00 14 F0 */ b .L_00002988 +/* 0000149C 0000E22C 3C 80 58 55 */ lis r4, 0x5855 +/* 000014A0 0000E230 60 84 17 F3 */ ori r4, r4, 0x17f3 +/* 000014A4 0000E234 48 00 15 18 */ b .L_000029BC +/* 000014A8 0000E238 3C 80 D7 4C */ lis r4, 0xd74c +/* 000014AC 0000E23C 60 84 14 35 */ ori r4, r4, 0x1435 +/* 000014B0 0000E240 48 00 15 18 */ b .L_000029C8 +/* 000014B4 0000E244 3C 80 0C 2D */ lis r4, 0xc2d +/* 000014B8 0000E248 60 84 A7 93 */ ori r4, r4, 0xa793 +/* 000014BC 0000E24C 48 00 15 18 */ b .L_000029D4 +/* 000014C0 0000E250 3C 80 CC F0 */ lis r4, 0xccf0 +/* 000014C4 0000E254 60 84 3C B3 */ ori r4, r4, 0x3cb3 +/* 000014C8 0000E258 48 00 15 18 */ b .L_000029E0 +/* 000014CC 0000E25C 3C 80 10 20 */ lis r4, 0x1020 +/* 000014D0 0000E260 60 84 4A 90 */ ori r4, r4, 0x4a90 +/* 000014D4 0000E264 48 00 15 18 */ b .L_000029EC +/* 000014D8 0000E268 3C 80 4B 67 */ lis r4, 0x4b67 +/* 000014DC 0000E26C 60 84 5D C8 */ ori r4, r4, 0x5dc8 +/* 000014E0 0000E270 48 00 15 18 */ b .L_000029F8 +/* 000014E4 0000E274 3C 80 D7 6A */ lis r4, 0xd76a +/* 000014E8 0000E278 60 84 6F AD */ ori r4, r4, 0x6fad +/* 000014EC 0000E27C 48 00 15 18 */ b .L_00002A04 +/* 000014F0 0000E280 38 00 00 03 */ li r0, 0x3 +/* 000014F4 0000E284 B0 1F 00 D8 */ sth r0, 0xd8(r31) +/* 000014F8 0000E288 48 00 0D 21 */ bl .L_00002218 +/* 000014FC 0000E28C 3C 80 EE C2 */ lis r4, 0xeec2 +/* 00001500 0000E290 60 84 27 1A */ ori r4, r4, 0x271a +/* 00001504 0000E294 48 00 00 01 */ bl FindCollection__6AttribUiUi +/* 00001508 0000E298 7C 64 1B 78 */ mr r4, r3 +/* 0000150C 0000E29C 38 7F 01 10 */ addi r3, r31, 0x110 +/* 00001510 0000E2A0 48 00 00 01 */ bl Change__Q26Attrib8InstancePCQ26Attrib10Collection +/* 00001514 0000E2A4 48 00 15 40 */ b .L_00002A54 +/* 00001518 0000E2A8 38 7F 00 FC */ addi r3, r31, 0xfc +/* 0000151C 0000E2AC 38 A0 00 00 */ li r5, 0x0 +/* 00001520 0000E2B0 48 00 00 01 */ bl GetAttributePointer__CQ26Attrib8InstanceUiUi +/* 00001524 0000E2B4 7C 63 1B 79 */ mr. r3, r3 +/* 00001528 0000E2B8 40 82 15 34 */ bne .L_00002A5C +/* 0000152C 0000E2BC 38 60 00 0C */ li r3, 0xc +/* 00001530 0000E2C0 48 00 00 01 */ bl DefaultDataArea__6AttribUi +/* 00001534 0000E2C4 7C 64 1B 78 */ mr r4, r3 +/* 00001538 0000E2C8 38 7F 01 10 */ addi r3, r31, 0x110 +/* 0000153C 0000E2CC 48 00 00 01 */ bl ChangeWithDefault__Q26Attrib8InstanceRCQ26Attrib7RefSpec +/* 00001540 0000E2D0 3D 20 00 00 */ lis r9, .rodata+0x458@ha +/* 00001544 0000E2D4 C0 1F 00 D4 */ lfs f0, 0xd4(r31) +/* 00001548 0000E2D8 C1 A9 04 58 */ lfs f13, .rodata+0x458@l(r9) +/* 0000154C 0000E2DC FF E0 00 90 */ fmr f31, f0 +/* 00001550 0000E2E0 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00001554 0000E2E4 41 81 15 5C */ bgt .L_00002AB0 +/* 00001558 0000E2E8 FF E0 68 90 */ fmr f31, f13 +/* 0000155C 0000E2EC 48 00 00 01 */ bl eGetCurrentViewMode__Fv +/* 00001560 0000E2F0 83 DF 01 18 */ lwz r30, 0x118(r31) +/* 00001564 0000E2F4 68 7D 00 03 */ xori r29, r3, 0x3 +/* 00001568 0000E2F8 20 1D 00 00 */ subfic r0, r29, 0x0 +/* 0000156C 0000E2FC 7F A0 E9 14 */ adde r29, r0, r29 +/* 00001570 0000E300 38 7E 00 50 */ addi r3, r30, 0x50 +/* 00001574 0000E304 48 00 00 01 */ bl GetLength__CQ26Attrib7Private +/* 00001578 0000E308 7C 1D 18 40 */ cmplw r29, r3 +/* 0000157C 0000E30C 40 80 15 90 */ bge .L_00002B0C +/* 00001580 0000E310 57 A9 10 3A */ slwi r9, r29, 2 +/* 00001584 0000E314 39 29 00 58 */ addi r9, r9, 0x58 +/* 00001588 0000E318 7C 7E 4A 14 */ add r3, r30, r9 +/* 0000158C 0000E31C 48 00 15 98 */ b .L_00002B24 +/* 00001590 0000E320 38 60 00 04 */ li r3, 0x4 +/* 00001594 0000E324 48 00 00 01 */ bl DefaultDataArea__6AttribUi +/* 00001598 0000E328 3D 20 00 00 */ lis r9, .rodata+0x45C@ha +/* 0000159C 0000E32C C0 03 00 00 */ lfs f0, 0x0(r3) +/* 000015A0 0000E330 C1 89 04 5C */ lfs f12, .rodata+0x45C@l(r9) +/* 000015A4 0000E334 3C 00 B6 0B */ lis r0, 0xb60b +/* 000015A8 0000E338 60 00 60 B7 */ ori r0, r0, 0x60b7 +/* 000015AC 0000E33C EC 00 03 32 */ fmuls f0, f0, f12 +/* 000015B0 0000E340 83 DF 01 18 */ lwz r30, 0x118(r31) +/* 000015B4 0000E344 FD A0 00 1E */ fctiwz f13, f0 +/* 000015B8 0000E348 38 7E 00 20 */ addi r3, r30, 0x20 +/* 000015BC 0000E34C D9 A1 00 10 */ stfd f13, 0x10(r1) +/* 000015C0 0000E350 81 21 00 14 */ lwz r9, 0x14(r1) +/* 000015C4 0000E354 7C 09 00 96 */ mulhw r0, r9, r0 +/* 000015C8 0000E358 7D 2B FE 70 */ srawi r11, r9, 31 +/* 000015CC 0000E35C 7C 00 4A 14 */ add r0, r0, r9 +/* 000015D0 0000E360 7C 00 46 70 */ srawi r0, r0, 8 +/* 000015D4 0000E364 7C 0B 00 50 */ subf r0, r11, r0 +/* 000015D8 0000E368 B0 1F 00 DA */ sth r0, 0xda(r31) +/* 000015DC 0000E36C 48 00 00 01 */ bl GetLength__CQ26Attrib7Private +/* 000015E0 0000E370 7C 1D 18 40 */ cmplw r29, r3 +/* 000015E4 0000E374 40 80 15 F8 */ bge .L_00002BDC +/* 000015E8 0000E378 57 A9 10 3A */ slwi r9, r29, 2 +/* 000015EC 0000E37C 39 29 00 28 */ addi r9, r9, 0x28 +/* 000015F0 0000E380 7C 7E 4A 14 */ add r3, r30, r9 +/* 000015F4 0000E384 48 00 16 00 */ b .L_00002BF4 +/* 000015F8 0000E388 38 60 00 04 */ li r3, 0x4 +/* 000015FC 0000E38C 48 00 00 01 */ bl DefaultDataArea__6AttribUi +/* 00001600 0000E390 C0 03 00 00 */ lfs f0, 0x0(r3) +/* 00001604 0000E394 83 DF 01 18 */ lwz r30, 0x118(r31) +/* 00001608 0000E398 EC 00 F8 24 */ fdivs f0, f0, f31 +/* 0000160C 0000E39C 38 7E 00 40 */ addi r3, r30, 0x40 +/* 00001610 0000E3A0 D0 1F 00 DC */ stfs f0, 0xdc(r31) +/* 00001614 0000E3A4 48 00 00 01 */ bl GetLength__CQ26Attrib7Private +/* 00001618 0000E3A8 7C 1D 18 40 */ cmplw r29, r3 +/* 0000161C 0000E3AC 40 80 16 30 */ bge .L_00002C4C +/* 00001620 0000E3B0 57 A9 10 3A */ slwi r9, r29, 2 +/* 00001624 0000E3B4 39 29 00 48 */ addi r9, r9, 0x48 +/* 00001628 0000E3B8 7C 7E 4A 14 */ add r3, r30, r9 +/* 0000162C 0000E3BC 48 00 16 38 */ b TerrainVelocityNoise__11CameraMoverP8bMatrix4P12CameraAnchorff +/* 00001630 0000E3C0 38 60 00 04 */ li r3, 0x4 +/* 00001634 0000E3C4 48 00 00 01 */ bl DefaultDataArea__6AttribUi +/* 00001638 0000E3C8 C0 03 00 00 */ lfs f0, 0x0(r3) +/* 0000163C 0000E3CC 83 DF 01 18 */ lwz r30, 0x118(r31) +/* 00001640 0000E3D0 D0 1F 00 E0 */ stfs f0, 0xe0(r31) +/* 00001644 0000E3D4 38 7E 00 10 */ addi r3, r30, 0x10 +/* 00001648 0000E3D8 48 00 00 01 */ bl GetLength__CQ26Attrib7Private +/* 0000164C 0000E3DC 7C 1D 18 40 */ cmplw r29, r3 +/* 00001650 0000E3E0 40 80 16 64 */ bge .L_00002CB4 +/* 00001654 0000E3E4 57 A9 10 3A */ slwi r9, r29, 2 +/* 00001658 0000E3E8 39 29 00 18 */ addi r9, r9, 0x18 +/* 0000165C 0000E3EC 7C 7E 4A 14 */ add r3, r30, r9 +/* 00001660 0000E3F0 48 00 16 6C */ b .L_00002CCC +/* 00001664 0000E3F4 38 60 00 04 */ li r3, 0x4 +/* 00001668 0000E3F8 48 00 00 01 */ bl DefaultDataArea__6AttribUi +/* 0000166C 0000E3FC C0 03 00 00 */ lfs f0, 0x0(r3) +.L_00001670: +/* 00001670 0000E400 83 DF 01 18 */ lwz r30, 0x118(r31) +/* 00001674 0000E404 D0 1F 00 E4 */ stfs f0, 0xe4(r31) +/* 00001678 0000E408 38 7E 00 30 */ addi r3, r30, 0x30 +/* 0000167C 0000E40C 48 00 00 01 */ bl GetLength__CQ26Attrib7Private +/* 00001680 0000E410 7C 1D 18 40 */ cmplw r29, r3 +/* 00001684 0000E414 40 80 16 98 */ bge .L_00002D1C +/* 00001688 0000E418 57 A9 10 3A */ slwi r9, r29, 2 +/* 0000168C 0000E41C 39 29 00 38 */ addi r9, r9, 0x38 +/* 00001690 0000E420 7C 7E 4A 14 */ add r3, r30, r9 +.L_00001694: +/* 00001694 0000E424 48 00 16 A0 */ b .L_00002D34 +/* 00001698 0000E428 38 60 00 04 */ li r3, 0x4 +/* 0000169C 0000E42C 48 00 00 01 */ bl DefaultDataArea__6AttribUi +/* 000016A0 0000E430 C0 03 00 00 */ lfs f0, 0x0(r3) +/* 000016A4 0000E434 3D 20 00 00 */ lis r9, .rodata+0x45C@ha +/* 000016A8 0000E438 C1 89 04 5C */ lfs f12, .rodata+0x45C@l(r9) +/* 000016AC 0000E43C 3C 00 B6 0B */ lis r0, 0xb60b +/* 000016B0 0000E440 EC 00 07 F2 */ fmuls f0, f0, f31 +/* 000016B4 0000E444 EC 00 03 32 */ fmuls f0, f0, f12 +/* 000016B8 0000E448 60 00 60 B7 */ ori r0, r0, 0x60b7 +.L_000016BC: +/* 000016BC 0000E44C 83 DF 01 18 */ lwz r30, 0x118(r31) +/* 000016C0 0000E450 FD A0 00 1E */ fctiwz f13, f0 +/* 000016C4 0000E454 D9 A1 00 10 */ stfd f13, 0x10(r1) +/* 000016C8 0000E458 38 7E 00 64 */ addi r3, r30, 0x64 +/* 000016CC 0000E45C 81 21 00 14 */ lwz r9, 0x14(r1) +/* 000016D0 0000E460 7C 09 00 96 */ mulhw r0, r9, r0 +/* 000016D4 0000E464 7D 2B FE 70 */ srawi r11, r9, 31 +/* 000016D8 0000E468 7C 00 4A 14 */ add r0, r0, r9 +/* 000016DC 0000E46C 7C 00 46 70 */ srawi r0, r0, 8 +/* 000016E0 0000E470 7C 0B 00 50 */ subf r0, r11, r0 +/* 000016E4 0000E474 B0 1F 00 E8 */ sth r0, 0xe8(r31) +/* 000016E8 0000E478 48 00 00 01 */ bl GetLength__CQ26Attrib7Private +/* 000016EC 0000E47C 7C 1D 18 40 */ cmplw r29, r3 +/* 000016F0 0000E480 40 80 17 04 */ bge .L_00002DF4 +/* 000016F4 0000E484 57 A9 10 3A */ slwi r9, r29, 2 +.L_000016F8: +/* 000016F8 0000E488 39 29 00 6C */ addi r9, r9, 0x6c +/* 000016FC 0000E48C 7C 7E 4A 14 */ add r3, r30, r9 +/* 00001700 0000E490 48 00 17 0C */ b .L_00002E0C +/* 00001704 0000E494 38 60 00 04 */ li r3, 0x4 +/* 00001708 0000E498 48 00 00 01 */ bl DefaultDataArea__6AttribUi +/* 0000170C 0000E49C A0 03 00 02 */ lhz r0, 0x2(r3) +/* 00001710 0000E4A0 83 DF 01 18 */ lwz r30, 0x118(r31) +/* 00001714 0000E4A4 B0 1F 00 F0 */ sth r0, 0xf0(r31) +/* 00001718 0000E4A8 7F C3 F3 78 */ mr r3, r30 +/* 0000171C 0000E4AC 48 00 00 01 */ bl GetLength__CQ26Attrib7Private +/* 00001720 0000E4B0 7C 1D 18 40 */ cmplw r29, r3 +/* 00001724 0000E4B4 40 80 17 38 */ bge .L_00002E5C +/* 00001728 0000E4B8 57 A9 10 3A */ slwi r9, r29, 2 +/* 0000172C 0000E4BC 39 29 00 08 */ addi r9, r9, 0x8 +/* 00001730 0000E4C0 7C 7E 4A 14 */ add r3, r30, r9 +/* 00001734 0000E4C4 48 00 17 40 */ b .L_00002E74 +/* 00001738 0000E4C8 38 60 00 04 */ li r3, 0x4 +/* 0000173C 0000E4CC 48 00 00 01 */ bl DefaultDataArea__6AttribUi +/* 00001740 0000E4D0 C0 03 00 00 */ lfs f0, 0x0(r3) +/* 00001744 0000E4D4 38 7F 00 D8 */ addi r3, r31, 0xd8 +.L_00001748: +/* 00001748 0000E4D8 D0 1F 00 EC */ stfs f0, 0xec(r31) +/* 0000174C 0000E4DC 80 01 00 34 */ lwz r0, 0x34(r1) +/* 00001750 0000E4E0 7C 08 03 A6 */ mtlr r0 +/* 00001754 0000E4E4 BB A1 00 1C */ lmw r29, 0x1c(r1) +/* 00001758 0000E4E8 E3 E1 00 28 */ psq_l f31, 0x28(r1), 0, qr0 +/* 0000175C 0000E4EC 38 21 00 30 */ addi r1, r1, 0x30 +/* 00001760 0000E4F0 4E 80 00 20 */ blr +.endfn GetPov__12CameraAnchori + +# .text:0x1764 | size: 0x184 +.fn Update__12CameraAnchorfRC8bMatrix4RC8bVector3T3, global +/* 00001764 0000E4F4 94 21 FF C8 */ stwu r1, -0x38(r1) +/* 00001768 0000E4F8 7C 08 02 A6 */ mflr r0 +/* 0000176C 0000E4FC F3 C1 00 28 */ psq_st f30, 0x28(r1), 0, qr0 +/* 00001770 0000E500 F3 E1 00 30 */ psq_st f31, 0x30(r1), 0, qr0 +/* 00001774 0000E504 BF A1 00 1C */ stmw r29, 0x1c(r1) +/* 00001778 0000E508 90 01 00 3C */ stw r0, 0x3c(r1) +/* 0000177C 0000E50C 7C 7F 1B 78 */ mr r31, r3 +/* 00001780 0000E510 7C 9E 23 78 */ mr r30, r4 +.L_00001784: +/* 00001784 0000E514 7C BD 2B 78 */ mr r29, r5 +/* 00001788 0000E518 38 7F 00 18 */ addi r3, r31, 0x18 +/* 0000178C 0000E51C 38 9E 00 30 */ addi r4, r30, 0x30 +/* 00001790 0000E520 FF E0 08 90 */ fmr f31, f1 +/* 00001794 0000E524 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 +/* 00001798 0000E528 FF C0 08 90 */ fmr f30, f1 +/* 0000179C 0000E52C 7F C3 F3 78 */ mr r3, r30 +/* 000017A0 0000E530 38 9F 00 48 */ addi r4, r31, 0x48 +/* 000017A4 0000E534 48 00 00 01 */ bl PSMTX44Copy +/* 000017A8 0000E538 3D 20 00 00 */ lis r9, .rodata+0x460@ha +/* 000017AC 0000E53C 3D 40 00 00 */ lis r10, .rodata+0x464@ha +/* 000017B0 0000E540 C1 29 04 60 */ lfs f9, .rodata+0x460@l(r9) +/* 000017B4 0000E544 3D 60 00 00 */ lis r11, .rodata+0x46C@ha +/* 000017B8 0000E548 3D 20 00 00 */ lis r9, .rodata+0x468@ha +/* 000017BC 0000E54C C0 DF 00 10 */ lfs f6, 0x10(r31) +.L_000017C0: +/* 000017C0 0000E550 D1 3F 00 80 */ stfs f9, 0x80(r31) +/* 000017C4 0000E554 D1 3F 00 7C */ stfs f9, 0x7c(r31) +/* 000017C8 0000E558 D1 3F 00 78 */ stfs f9, 0x78(r31) +/* 000017CC 0000E55C C0 1E 00 30 */ lfs f0, 0x30(r30) +/* 000017D0 0000E560 D0 1F 00 18 */ stfs f0, 0x18(r31) +/* 000017D4 0000E564 C1 BE 00 34 */ lfs f13, 0x34(r30) +/* 000017D8 0000E568 D1 BF 00 1C */ stfs f13, 0x1c(r31) +/* 000017DC 0000E56C C0 1E 00 38 */ lfs f0, 0x38(r30) +/* 000017E0 0000E570 D0 1F 00 20 */ stfs f0, 0x20(r31) +/* 000017E4 0000E574 C1 BD 00 00 */ lfs f13, 0x0(r29) +/* 000017E8 0000E578 C0 1D 00 04 */ lfs f0, 0x4(r29) +/* 000017EC 0000E57C C1 9D 00 08 */ lfs f12, 0x8(r29) +/* 000017F0 0000E580 D1 BF 00 00 */ stfs f13, 0x0(r31) +/* 000017F4 0000E584 D0 1F 00 04 */ stfs f0, 0x4(r31) +/* 000017F8 0000E588 D1 9F 00 08 */ stfs f12, 0x8(r31) +/* 000017FC 0000E58C C0 1D 00 04 */ lfs f0, 0x4(r29) +/* 00001800 0000E590 C1 BD 00 00 */ lfs f13, 0x0(r29) +/* 00001804 0000E594 EC 00 00 32 */ fmuls f0, f0, f0 +/* 00001808 0000E598 C1 9D 00 08 */ lfs f12, 0x8(r29) +/* 0000180C 0000E59C ED AD 03 7A */ fmadds f13, f13, f13, f0 +/* 00001810 0000E5A0 C1 6A 04 64 */ lfs f11, .rodata+0x464@l(r10) +/* 00001814 0000E5A4 ED 4C 6B 3A */ fmadds f10, f12, f12, f13 +/* 00001818 0000E5A8 C1 09 04 68 */ lfs f8, .rodata+0x468@l(r9) +/* 0000181C 0000E5AC C0 EB 04 6C */ lfs f7, .rodata+0x46C@l(r11) +/* 00001820 0000E5B0 FC 0A 58 00 */ fcmpu cr0, f10, f11 +/* 00001824 0000E5B4 4C 62 03 82 */ cror un, eq, lt +/* 00001828 0000E5B8 41 83 18 58 */ bso .L_00003080 +/* 0000182C 0000E5BC FD 80 50 34 */ frsqrte f12, f10 +/* 00001830 0000E5C0 EC 0C 03 32 */ fmuls f0, f12, f12 +/* 00001834 0000E5C4 ED AC 02 32 */ fmuls f13, f12, f8 +/* 00001838 0000E5C8 EC 0A 38 3C */ fnmsubs f0, f10, f0, f7 +/* 0000183C 0000E5CC ED 80 63 7A */ fmadds f12, f0, f13, f12 +/* 00001840 0000E5D0 EC 0C 03 32 */ fmuls f0, f12, f12 +/* 00001844 0000E5D4 ED AC 02 32 */ fmuls f13, f12, f8 +/* 00001848 0000E5D8 EC 0A 38 3C */ fnmsubs f0, f10, f0, f7 +/* 0000184C 0000E5DC ED 80 63 7A */ fmadds f12, f0, f13, f12 +/* 00001850 0000E5E0 ED 8C 02 B2 */ fmuls f12, f12, f10 +/* 00001854 0000E5E4 48 00 18 5C */ b .L_000030B0 +/* 00001858 0000E5E8 FD 80 48 90 */ fmr f12, f9 +/* 0000185C 0000E5EC 3D 20 00 00 */ lis r9, .rodata+0x460@ha +/* 00001860 0000E5F0 D1 9F 00 10 */ stfs f12, 0x10(r31) +/* 00001864 0000E5F4 C1 69 04 60 */ lfs f11, .rodata+0x460@l(r9) +/* 00001868 0000E5F8 FC 1F 58 00 */ fcmpu cr0, f31, f11 +/* 0000186C 0000E5FC 4C 62 03 82 */ cror un, eq, lt +/* 00001870 0000E600 41 83 18 B8 */ bso .L_00003128 +/* 00001874 0000E604 EC 1E F8 24 */ fdivs f0, f30, f31 +/* 00001878 0000E608 3D 20 00 00 */ lis r9, .rodata+0x470@ha +/* 0000187C 0000E60C C1 A9 04 70 */ lfs f13, .rodata+0x470@l(r9) +/* 00001880 0000E610 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00001884 0000E614 4C 62 0B 82 */ cror un, eq, gt +/* 00001888 0000E618 41 83 18 B8 */ bso .L_00003140 +/* 0000188C 0000E61C EC 0C 30 28 */ fsubs f0, f12, f6 +.L_00001890: +/* 00001890 0000E620 39 21 00 08 */ addi r9, r1, 0x8 +/* 00001894 0000E624 EC 00 F8 24 */ fdivs f0, f0, f31 +/* 00001898 0000E628 D1 61 00 0C */ stfs f11, 0xc(r1) +/* 0000189C 0000E62C 38 9F 00 48 */ addi r4, r31, 0x48 +/* 000018A0 0000E630 7D 25 4B 78 */ mr r5, r9 +/* 000018A4 0000E634 38 7F 00 38 */ addi r3, r31, 0x38 +/* 000018A8 0000E638 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 000018AC 0000E63C D1 69 00 08 */ stfs f11, 0x8(r9) +/* 000018B0 0000E640 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 +/* 000018B4 0000E644 48 00 18 CC */ b .L_00003180 +/* 000018B8 0000E648 3D 20 00 00 */ lis r9, .rodata+0x460@ha +/* 000018BC 0000E64C C0 09 04 60 */ lfs f0, .rodata+0x460@l(r9) +/* 000018C0 0000E650 D0 1F 00 3C */ stfs f0, 0x3c(r31) +/* 000018C4 0000E654 D0 1F 00 38 */ stfs f0, 0x38(r31) +/* 000018C8 0000E658 D0 1F 00 40 */ stfs f0, 0x40(r31) +/* 000018CC 0000E65C 80 01 00 3C */ lwz r0, 0x3c(r1) +/* 000018D0 0000E660 7C 08 03 A6 */ mtlr r0 +/* 000018D4 0000E664 BB A1 00 1C */ lmw r29, 0x1c(r1) +/* 000018D8 0000E668 E3 C1 00 28 */ psq_l f30, 0x28(r1), 0, qr0 +/* 000018DC 0000E66C E3 E1 00 30 */ psq_l f31, 0x30(r1), 0, qr0 +.L_000018E0: +/* 000018E0 0000E670 38 21 00 38 */ addi r1, r1, 0x38 +.L_000018E4: +/* 000018E4 0000E674 4E 80 00 20 */ blr +.endfn Update__12CameraAnchorfRC8bMatrix4RC8bVector3T3 + +# .text:0x18E8 | size: 0x70 +# RenderCameraMovers(eView*) +.fn RenderCameraMovers__FP5eView, global +/* 000018E8 0000E678 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 000018EC 0000E67C 7C 08 02 A6 */ mflr r0 +/* 000018F0 0000E680 90 01 00 0C */ stw r0, 0xc(r1) +/* 000018F4 0000E684 81 23 00 3C */ lwz r9, 0x3c(r3) +/* 000018F8 0000E688 38 03 00 3C */ addi r0, r3, 0x3c +/* 000018FC 0000E68C 39 60 00 00 */ li r11, 0x0 +/* 00001900 0000E690 7D 20 02 78 */ xor r0, r9, r0 +/* 00001904 0000E694 21 40 00 00 */ subfic r10, r0, 0x0 +/* 00001908 0000E698 7C 0A 01 14 */ adde r0, r10, r0 +/* 0000190C 0000E69C 2F 80 00 00 */ cmpwi cr7, r0, 0x0 +/* 00001910 0000E6A0 40 9E 19 18 */ bne cr7, .L_00003228 +/* 00001914 0000E6A4 7D 2B 4B 78 */ mr r11, r9 +/* 00001918 0000E6A8 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000191C 0000E6AC 41 82 19 48 */ beq .L_00003264 +/* 00001920 0000E6B0 39 60 00 00 */ li r11, 0x0 +/* 00001924 0000E6B4 40 9E 19 2C */ bne cr7, .L_00003250 +/* 00001928 0000E6B8 7D 2B 4B 78 */ mr r11, r9 +/* 0000192C 0000E6BC 81 2B 00 08 */ lwz r9, 0x8(r11) +/* 00001930 0000E6C0 7C 64 1B 78 */ mr r4, r3 +/* 00001934 0000E6C4 A8 69 00 20 */ lha r3, 0x20(r9) +/* 00001938 0000E6C8 80 09 00 24 */ lwz r0, 0x24(r9) +/* 0000193C 0000E6CC 7C 6B 1A 14 */ add r3, r11, r3 +/* 00001940 0000E6D0 7C 08 03 A6 */ mtlr r0 +/* 00001944 0000E6D4 4E 80 00 21 */ blrl +/* 00001948 0000E6D8 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0000194C 0000E6DC 7C 08 03 A6 */ mtlr r0 +/* 00001950 0000E6E0 38 21 00 08 */ addi r1, r1, 0x8 +/* 00001954 0000E6E4 4E 80 00 20 */ blr +.endfn RenderCameraMovers__FP5eView + +# .text:0x1958 | size: 0x90 +# CameraMoverRestartRace() +.fn CameraMoverRestartRace__Fv, global +/* 00001958 0000E6E8 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 0000195C 0000E6EC 7C 08 02 A6 */ mflr r0 +/* 00001960 0000E6F0 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 00001964 0000E6F4 90 01 00 14 */ stw r0, 0x14(r1) +/* 00001968 0000E6F8 3D 20 00 00 */ lis r9, WeHaveCheckedIfJR2ServerExists@ha +/* 0000196C 0000E6FC 38 00 00 00 */ li r0, 0x0 +/* 00001970 0000E700 90 09 00 00 */ stw r0, WeHaveCheckedIfJR2ServerExists@l(r9) +/* 00001974 0000E704 3B E0 00 01 */ li r31, 0x1 +.L_00001978: +/* 00001978 0000E708 48 00 70 59 */ bl .L_000089D0 +/* 0000197C 0000E70C 3D 20 00 00 */ lis r9, eViews@ha +/* 00001980 0000E710 3B C9 00 00 */ addi r30, r9, eViews@l +/* 00001984 0000E714 1C 1F 00 68 */ mulli r0, r31, 0x68 +/* 00001988 0000E718 39 40 00 00 */ li r10, 0x0 +/* 0000198C 0000E71C 3B FF 00 01 */ addi r31, r31, 0x1 +/* 00001990 0000E720 7D 20 F2 15 */ add. r9, r0, r30 +/* 00001994 0000E724 39 69 00 3C */ addi r11, r9, 0x3c +/* 00001998 0000E728 41 82 19 CC */ beq .L_00003364 +/* 0000199C 0000E72C 80 09 00 3C */ lwz r0, 0x3c(r9) +/* 000019A0 0000E730 7C 00 58 00 */ cmpw r0, r11 +/* 000019A4 0000E734 41 82 19 AC */ beq .L_00003350 +/* 000019A8 0000E738 7C 0A 03 78 */ mr r10, r0 +/* 000019AC 0000E73C 2C 0A 00 00 */ cmpwi r10, 0x0 +/* 000019B0 0000E740 41 82 19 CC */ beq .L_0000337C +/* 000019B4 0000E744 81 2A 00 08 */ lwz r9, 0x8(r10) +.L_000019B8: +/* 000019B8 0000E748 A8 69 00 70 */ lha r3, 0x70(r9) +/* 000019BC 0000E74C 80 09 00 74 */ lwz r0, 0x74(r9) +/* 000019C0 0000E750 7C 6A 1A 14 */ add r3, r10, r3 +/* 000019C4 0000E754 7C 08 03 A6 */ mtlr r0 +/* 000019C8 0000E758 4E 80 00 21 */ blrl +/* 000019CC 0000E75C 2C 1F 00 03 */ cmpwi r31, 0x3 +/* 000019D0 0000E760 40 81 19 84 */ ble .L_00003354 +/* 000019D4 0000E764 80 01 00 14 */ lwz r0, 0x14(r1) +/* 000019D8 0000E768 7C 08 03 A6 */ mtlr r0 +/* 000019DC 0000E76C BB C1 00 08 */ lmw r30, 0x8(r1) +/* 000019E0 0000E770 38 21 00 10 */ addi r1, r1, 0x10 +/* 000019E4 0000E774 4E 80 00 20 */ blr +.endfn CameraMoverRestartRace__Fv + +# .text:0x19E8 | size: 0x2C +# GetCurrentCamera() +.fn GetCurrentCamera__Fv, global +/* 000019E8 0000E778 3D 20 00 00 */ lis r9, eViews+0x68@ha +/* 000019EC 0000E77C 38 00 00 00 */ li r0, 0x0 +/* 000019F0 0000E780 39 29 00 68 */ addi r9, r9, eViews+0x68@l +/* 000019F4 0000E784 2C 09 00 00 */ cmpwi r9, 0x0 +.L_000019F8: +/* 000019F8 0000E788 41 82 1A 00 */ beq .L_000033F8 +/* 000019FC 0000E78C 80 09 00 38 */ lwz r0, 0x38(r9) +/* 00001A00 0000E790 7C 03 03 78 */ mr r3, r0 +/* 00001A04 0000E794 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00001A08 0000E798 4C 82 00 20 */ bnelr +/* 00001A0C 0000E79C 38 60 00 00 */ li r3, 0x0 +/* 00001A10 0000E7A0 4E 80 00 20 */ blr +.endfn GetCurrentCamera__Fv + +# .text:0x1A14 | size: 0x4E8 +# UpdateCameraMovers(float) +.fn UpdateCameraMovers__Ff, global +/* 00001A14 0000E7A4 94 21 FF 70 */ stwu r1, -0x90(r1) +/* 00001A18 0000E7A8 7C 08 02 A6 */ mflr r0 +/* 00001A1C 0000E7AC F3 E1 00 88 */ psq_st f31, 0x88(r1), 0, qr0 +/* 00001A20 0000E7B0 BE C1 00 60 */ stmw r22, 0x60(r1) +/* 00001A24 0000E7B4 90 01 00 94 */ stw r0, 0x94(r1) +/* 00001A28 0000E7B8 3D 20 00 00 */ lis r9, eViews@ha +/* 00001A2C 0000E7BC FF E0 08 90 */ fmr f31, f1 +/* 00001A30 0000E7C0 3B C9 00 00 */ addi r30, r9, eViews@l +/* 00001A34 0000E7C4 3B E0 00 00 */ li r31, 0x0 +/* 00001A38 0000E7C8 1D 3F 00 68 */ mulli r9, r31, 0x68 +/* 00001A3C 0000E7CC 39 60 00 00 */ li r11, 0x0 +/* 00001A40 0000E7D0 7D 29 F2 14 */ add r9, r9, r30 +/* 00001A44 0000E7D4 80 09 00 3C */ lwz r0, 0x3c(r9) +/* 00001A48 0000E7D8 39 29 00 3C */ addi r9, r9, 0x3c +/* 00001A4C 0000E7DC 7C 00 48 00 */ cmpw r0, r9 +/* 00001A50 0000E7E0 41 82 1A 58 */ beq .L_000034A8 +/* 00001A54 0000E7E4 7C 0B 03 78 */ mr r11, r0 +/* 00001A58 0000E7E8 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00001A5C 0000E7EC 41 82 1A 7C */ beq .L_000034D8 +/* 00001A60 0000E7F0 81 2B 00 08 */ lwz r9, 0x8(r11) +/* 00001A64 0000E7F4 FC 20 F8 90 */ fmr f1, f31 +/* 00001A68 0000E7F8 A8 69 00 18 */ lha r3, 0x18(r9) +/* 00001A6C 0000E7FC 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 00001A70 0000E800 7C 6B 1A 14 */ add r3, r11, r3 +/* 00001A74 0000E804 7C 08 03 A6 */ mtlr r0 +.L_00001A78: +/* 00001A78 0000E808 4E 80 00 21 */ blrl +/* 00001A7C 0000E80C 3B FF 00 01 */ addi r31, r31, 0x1 +/* 00001A80 0000E810 2C 1F 00 15 */ cmpwi r31, 0x15 +/* 00001A84 0000E814 40 81 1A 38 */ ble .L_000034BC +/* 00001A88 0000E818 3D 20 00 00 */ lis r9, WeHaveCheckedIfJR2ServerExists@ha +/* 00001A8C 0000E81C 80 09 00 00 */ lwz r0, WeHaveCheckedIfJR2ServerExists@l(r9) +/* 00001A90 0000E820 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00001A94 0000E824 40 82 1A B8 */ bne .L_0000354C +/* 00001A98 0000E828 3C 60 00 00 */ lis r3, .rodata+0x50@ha +.L_00001A9C: +/* 00001A9C 0000E82C 38 63 00 50 */ addi r3, r3, .rodata+0x50@l +/* 00001AA0 0000E830 48 00 00 01 */ bl bFunkDoesServerExist__FPCc +/* 00001AA4 0000E834 3D 60 00 00 */ lis r11, JR2ServerExists@ha +/* 00001AA8 0000E838 38 00 00 01 */ li r0, 0x1 +/* 00001AAC 0000E83C 3D 20 00 00 */ lis r9, WeHaveCheckedIfJR2ServerExists@ha +/* 00001AB0 0000E840 90 6B 00 00 */ stw r3, JR2ServerExists@l(r11) +.L_00001AB4: +/* 00001AB4 0000E844 90 09 00 00 */ stw r0, WeHaveCheckedIfJR2ServerExists@l(r9) +/* 00001AB8 0000E848 3D 20 00 00 */ lis r9, JR2ServerExists@ha +.L_00001ABC: +/* 00001ABC 0000E84C 3D 60 00 00 */ lis r11, eViews+0xA0@ha +/* 00001AC0 0000E850 80 09 00 00 */ lwz r0, JR2ServerExists@l(r9) +.L_00001AC4: +/* 00001AC4 0000E854 83 EB 00 A0 */ lwz r31, eViews+0xA0@l(r11) +/* 00001AC8 0000E858 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00001ACC 0000E85C 41 82 1B 10 */ beq .L_000035DC +/* 00001AD0 0000E860 2C 1F 00 00 */ cmpwi r31, 0x0 +/* 00001AD4 0000E864 41 82 1B 10 */ beq .L_000035E4 +/* 00001AD8 0000E868 3D 20 00 00 */ lis r9, RealTime@ha +/* 00001ADC 0000E86C 3D 60 00 00 */ lis r11, LastUpdateTimeJR2@ha +/* 00001AE0 0000E870 81 29 00 00 */ lwz r9, RealTime@l(r9) +/* 00001AE4 0000E874 80 0B 00 00 */ lwz r0, LastUpdateTimeJR2@l(r11) +/* 00001AE8 0000E878 7C 00 48 51 */ subf. r0, r0, r9 +/* 00001AEC 0000E87C 40 80 1A F4 */ bge .L_000035E0 +/* 00001AF0 0000E880 7C 00 00 D0 */ neg r0, r0 +/* 00001AF4 0000E884 2C 00 00 10 */ cmpwi r0, 0x10 +/* 00001AF8 0000E888 40 81 1B 10 */ ble .L_00003608 +/* 00001AFC 0000E88C 3C 80 00 00 */ lis r4, .rodata+0x474@ha +/* 00001B00 0000E890 91 2B 00 00 */ stw r9, LastUpdateTimeJR2@l(r11) +/* 00001B04 0000E894 38 84 04 74 */ addi r4, r4, .rodata+0x474@l +/* 00001B08 0000E898 7F E3 FB 78 */ mr r3, r31 +/* 00001B0C 0000E89C 48 00 04 09 */ bl .L_00001F14 +/* 00001B10 0000E8A0 3D 20 00 00 */ lis r9, RemoteCaffeinating@ha +/* 00001B14 0000E8A4 80 09 00 00 */ lwz r0, RemoteCaffeinating@l(r9) +/* 00001B18 0000E8A8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00001B1C 0000E8AC 41 82 1D 10 */ beq .L_0000382C +/* 00001B20 0000E8B0 3D 20 00 00 */ lis r9, DisableCommunication@ha +/* 00001B24 0000E8B4 80 09 00 00 */ lwz r0, DisableCommunication@l(r9) +/* 00001B28 0000E8B8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00001B2C 0000E8BC 40 82 1D 10 */ bne .L_0000383C +/* 00001B30 0000E8C0 2C 1F 00 00 */ cmpwi r31, 0x0 +/* 00001B34 0000E8C4 41 82 1D 10 */ beq .L_00003844 +/* 00001B38 0000E8C8 3D 20 00 00 */ lis r9, RealTime@ha +/* 00001B3C 0000E8CC 3F 80 00 00 */ lis r28, LastUpdateTimeCaffeine@ha +/* 00001B40 0000E8D0 80 09 00 00 */ lwz r0, RealTime@l(r9) +/* 00001B44 0000E8D4 81 7C 00 00 */ lwz r11, LastUpdateTimeCaffeine@l(r28) +/* 00001B48 0000E8D8 7C 0B 00 51 */ subf. r0, r11, r0 +/* 00001B4C 0000E8DC 40 80 1B 54 */ bge .L_000036A0 +/* 00001B50 0000E8E0 7C 00 00 D0 */ neg r0, r0 +/* 00001B54 0000E8E4 2C 00 00 10 */ cmpwi r0, 0x10 +/* 00001B58 0000E8E8 40 81 1D 10 */ ble .L_00003868 +/* 00001B5C 0000E8EC 3D 20 00 00 */ lis r9, .rodata+0x484@ha +/* 00001B60 0000E8F0 C1 3F 00 50 */ lfs f9, 0x50(r31) +/* 00001B64 0000E8F4 C1 7F 00 54 */ lfs f11, 0x54(r31) +/* 00001B68 0000E8F8 38 61 00 38 */ addi r3, r1, 0x38 +/* 00001B6C 0000E8FC C1 5F 00 58 */ lfs f10, 0x58(r31) +/* 00001B70 0000E900 38 81 00 48 */ addi r4, r1, 0x48 +/* 00001B74 0000E904 C3 E9 04 84 */ lfs f31, .rodata+0x484@l(r9) +/* 00001B78 0000E908 3B DF 00 40 */ addi r30, r31, 0x40 +/* 00001B7C 0000E90C 3F A0 00 00 */ lis r29, sPrevPosition@ha +/* 00001B80 0000E910 ED 29 07 F2 */ fmuls f9, f9, f31 +/* 00001B84 0000E914 ED 6B 07 F2 */ fmuls f11, f11, f31 +/* 00001B88 0000E918 D1 21 00 38 */ stfs f9, 0x38(r1) +.L_00001B8C: +/* 00001B8C 0000E91C ED 4A 07 F2 */ fmuls f10, f10, f31 +/* 00001B90 0000E920 D1 61 00 3C */ stfs f11, 0x3c(r1) +/* 00001B94 0000E924 D1 41 00 40 */ stfs f10, 0x40(r1) +/* 00001B98 0000E928 D1 21 00 28 */ stfs f9, 0x28(r1) +.L_00001B9C: +/* 00001B9C 0000E92C D1 61 00 2C */ stfs f11, 0x2c(r1) +/* 00001BA0 0000E930 D1 41 00 30 */ stfs f10, 0x30(r1) +.L_00001BA4: +/* 00001BA4 0000E934 C0 1F 00 40 */ lfs f0, 0x40(r31) +/* 00001BA8 0000E938 C1 BF 00 44 */ lfs f13, 0x44(r31) +/* 00001BAC 0000E93C C1 9F 00 48 */ lfs f12, 0x48(r31) +/* 00001BB0 0000E940 EC 00 48 28 */ fsubs f0, f0, f9 +.L_00001BB4: +/* 00001BB4 0000E944 ED AD 58 28 */ fsubs f13, f13, f11 +/* 00001BB8 0000E948 D0 01 00 48 */ stfs f0, 0x48(r1) +.L_00001BBC: +/* 00001BBC 0000E94C ED 8C 50 28 */ fsubs f12, f12, f10 +/* 00001BC0 0000E950 D1 A1 00 4C */ stfs f13, 0x4c(r1) +/* 00001BC4 0000E954 D1 81 00 50 */ stfs f12, 0x50(r1) +.L_00001BC8: +/* 00001BC8 0000E958 48 00 00 01 */ bl __8bVector3RC8bVector3 +/* 00001BCC 0000E95C 3D 20 00 00 */ lis r9, .rodata+0x488@ha +/* 00001BD0 0000E960 C0 01 00 38 */ lfs f0, 0x38(r1) +/* 00001BD4 0000E964 C1 09 04 88 */ lfs f8, .rodata+0x488@l(r9) +/* 00001BD8 0000E968 C1 A1 00 3C */ lfs f13, 0x3c(r1) +/* 00001BDC 0000E96C 7D 49 53 78 */ mr r9, r10 +/* 00001BE0 0000E970 EC 00 02 32 */ fmuls f0, f0, f8 +/* 00001BE4 0000E974 7D 4B 53 78 */ mr r11, r10 +/* 00001BE8 0000E978 C1 81 00 40 */ lfs f12, 0x40(r1) +/* 00001BEC 0000E97C FD 60 00 1E */ fctiwz f11, f0 +/* 00001BF0 0000E980 3C C0 00 00 */ lis r6, sHavePrevPosition@ha +.L_00001BF4: +/* 00001BF4 0000E984 D9 61 00 58 */ stfd f11, 0x58(r1) +/* 00001BF8 0000E988 ED AD 02 32 */ fmuls f13, f13, f8 +/* 00001BFC 0000E98C 81 41 00 5C */ lwz r10, 0x5c(r1) +/* 00001C00 0000E990 FD 40 68 1E */ fctiwz f10, f13 +/* 00001C04 0000E994 D9 41 00 58 */ stfd f10, 0x58(r1) +/* 00001C08 0000E998 ED 8C 02 32 */ fmuls f12, f12, f8 +/* 00001C0C 0000E99C 91 41 00 08 */ stw r10, 0x8(r1) +/* 00001C10 0000E9A0 81 21 00 5C */ lwz r9, 0x5c(r1) +.L_00001C14: +/* 00001C14 0000E9A4 FD 20 60 1E */ fctiwz f9, f12 +/* 00001C18 0000E9A8 D9 21 00 58 */ stfd f9, 0x58(r1) +/* 00001C1C 0000E9AC 91 21 00 0C */ stw r9, 0xc(r1) +/* 00001C20 0000E9B0 7D 48 53 78 */ mr r8, r10 +/* 00001C24 0000E9B4 81 61 00 5C */ lwz r11, 0x5c(r1) +/* 00001C28 0000E9B8 7D 47 53 78 */ mr r7, r10 +/* 00001C2C 0000E9BC 3D 20 00 00 */ lis r9, RealTime@ha +/* 00001C30 0000E9C0 91 61 00 10 */ stw r11, 0x10(r1) +/* 00001C34 0000E9C4 80 09 00 00 */ lwz r0, RealTime@l(r9) +/* 00001C38 0000E9C8 C0 1F 00 40 */ lfs f0, 0x40(r31) +/* 00001C3C 0000E9CC 81 26 00 00 */ lwz r9, sHavePrevPosition@l(r6) +/* 00001C40 0000E9D0 EC 00 02 32 */ fmuls f0, f0, f8 +/* 00001C44 0000E9D4 90 1C 00 00 */ stw r0, LastUpdateTimeCaffeine@l(r28) +.L_00001C48: +/* 00001C48 0000E9D8 2C 09 00 00 */ cmpwi r9, 0x0 +.L_00001C4C: +/* 00001C4C 0000E9DC FD A0 00 1E */ fctiwz f13, f0 +/* 00001C50 0000E9E0 D9 A1 00 58 */ stfd f13, 0x58(r1) +.L_00001C54: +/* 00001C54 0000E9E4 81 41 00 5C */ lwz r10, 0x5c(r1) +/* 00001C58 0000E9E8 91 41 00 18 */ stw r10, 0x18(r1) +/* 00001C5C 0000E9EC C0 1F 00 44 */ lfs f0, 0x44(r31) +.L_00001C60: +/* 00001C60 0000E9F0 EC 00 02 32 */ fmuls f0, f0, f8 +/* 00001C64 0000E9F4 FD 80 00 1E */ fctiwz f12, f0 +/* 00001C68 0000E9F8 D9 81 00 58 */ stfd f12, 0x58(r1) +/* 00001C6C 0000E9FC 81 01 00 5C */ lwz r8, 0x5c(r1) +/* 00001C70 0000EA00 91 01 00 1C */ stw r8, 0x1c(r1) +/* 00001C74 0000EA04 C0 1F 00 48 */ lfs f0, 0x48(r31) +/* 00001C78 0000EA08 EC 00 02 32 */ fmuls f0, f0, f8 +/* 00001C7C 0000EA0C FD 60 00 1E */ fctiwz f11, f0 +/* 00001C80 0000EA10 D9 61 00 58 */ stfd f11, 0x58(r1) +.L_00001C84: +/* 00001C84 0000EA14 80 E1 00 5C */ lwz r7, 0x5c(r1) +/* 00001C88 0000EA18 90 E1 00 20 */ stw r7, 0x20(r1) +/* 00001C8C 0000EA1C 40 82 1C BC */ bne .L_00003948 +/* 00001C90 0000EA20 3D 20 00 00 */ lis r9, .rodata+0x48C@ha +/* 00001C94 0000EA24 38 00 00 01 */ li r0, 0x1 +/* 00001C98 0000EA28 C0 09 04 8C */ lfs f0, .rodata+0x48C@l(r9) +/* 00001C9C 0000EA2C 39 7D 00 00 */ addi r11, r29, sPrevPosition@l +.L_00001CA0: +/* 00001CA0 0000EA30 90 06 00 00 */ stw r0, sHavePrevPosition@l(r6) +/* 00001CA4 0000EA34 D0 01 00 48 */ stfs f0, 0x48(r1) +/* 00001CA8 0000EA38 D0 01 00 4C */ stfs f0, 0x4c(r1) +/* 00001CAC 0000EA3C D0 01 00 50 */ stfs f0, 0x50(r1) +/* 00001CB0 0000EA40 D0 0B 00 08 */ stfs f0, 0x8(r11) +/* 00001CB4 0000EA44 D0 1D 00 00 */ stfs f0, sPrevPosition@l(r29) +/* 00001CB8 0000EA48 D0 0B 00 04 */ stfs f0, 0x4(r11) +/* 00001CBC 0000EA4C 3D 20 00 00 */ lis r9, sPrevPosition@ha +/* 00001CC0 0000EA50 7F C4 F3 78 */ mr r4, r30 +/* 00001CC4 0000EA54 3B C9 00 00 */ addi r30, r9, sPrevPosition@l +/* 00001CC8 0000EA58 7F C3 F3 78 */ mr r3, r30 +/* 00001CCC 0000EA5C 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 +.L_00001CD0: +/* 00001CD0 0000EA60 FC 01 F8 00 */ fcmpu cr0, f1, f31 +/* 00001CD4 0000EA64 4C 62 03 82 */ cror un, eq, lt +/* 00001CD8 0000EA68 41 83 1C F4 */ bso .L_000039CC +/* 00001CDC 0000EA6C C0 1F 00 40 */ lfs f0, 0x40(r31) +/* 00001CE0 0000EA70 C1 9F 00 44 */ lfs f12, 0x44(r31) +/* 00001CE4 0000EA74 C1 BF 00 48 */ lfs f13, 0x48(r31) +/* 00001CE8 0000EA78 D0 1D 00 00 */ stfs f0, sPrevPosition@l(r29) +/* 00001CEC 0000EA7C D1 BE 00 08 */ stfs f13, 0x8(r30) +/* 00001CF0 0000EA80 D1 9E 00 04 */ stfs f12, 0x4(r30) +/* 00001CF4 0000EA84 C1 BF 00 44 */ lfs f13, 0x44(r31) +/* 00001CF8 0000EA88 3D 20 00 00 */ lis r9, .rodata+0x490@ha +/* 00001CFC 0000EA8C C0 1F 00 40 */ lfs f0, 0x40(r31) +/* 00001D00 0000EA90 ED AD 03 72 */ fmuls f13, f13, f13 +/* 00001D04 0000EA94 C1 89 04 90 */ lfs f12, .rodata+0x490@l(r9) +/* 00001D08 0000EA98 EC 00 68 3A */ fmadds f0, f0, f0, f13 +/* 00001D0C 0000EA9C FC 00 60 00 */ fcmpu cr0, f0, f12 +/* 00001D10 0000EAA0 3D 20 00 00 */ lis r9, _8GManager.mObj@ha +/* 00001D14 0000EAA4 38 00 00 01 */ li r0, 0x1 +/* 00001D18 0000EAA8 81 29 00 00 */ lwz r9, _8GManager.mObj@l(r9) +/* 00001D1C 0000EAAC 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00001D20 0000EAB0 40 82 1D 28 */ bne .L_00003A48 +/* 00001D24 0000EAB4 38 00 00 00 */ li r0, 0x0 +/* 00001D28 0000EAB8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00001D2C 0000EABC 41 82 1D 3C */ beq .L_00003A68 +.L_00001D30: +/* 00001D30 0000EAC0 80 09 02 C8 */ lwz r0, 0x2c8(r9) +/* 00001D34 0000EAC4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00001D38 0000EAC8 40 82 1E E4 */ bne .L_00003C1C +/* 00001D3C 0000EACC 3D 20 00 00 */ lis r9, _11GRaceStatus.fObj@ha +/* 00001D40 0000EAD0 38 00 00 01 */ li r0, 0x1 +/* 00001D44 0000EAD4 81 29 00 00 */ lwz r9, _11GRaceStatus.fObj@l(r9) +/* 00001D48 0000EAD8 2C 09 00 00 */ cmpwi r9, 0x0 +.L_00001D4C: +/* 00001D4C 0000EADC 40 82 1D 54 */ bne .L_00003AA0 +/* 00001D50 0000EAE0 38 00 00 00 */ li r0, 0x0 +/* 00001D54 0000EAE4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00001D58 0000EAE8 41 82 1D 68 */ beq .L_00003AC0 +/* 00001D5C 0000EAEC 80 09 1A F0 */ lwz r0, 0x1af0(r9) +/* 00001D60 0000EAF0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00001D64 0000EAF4 40 82 1E E4 */ bne .L_00003C48 +/* 00001D68 0000EAF8 3D 20 00 00 */ lis r9, .rodata+0x48C@ha +/* 00001D6C 0000EAFC 3D 60 00 00 */ lis r11, eViews@ha +/* 00001D70 0000EB00 C3 E9 04 8C */ lfs f31, .rodata+0x48C@l(r9) +.L_00001D74: +/* 00001D74 0000EB04 3A CB 00 00 */ addi r22, r11, eViews@l +/* 00001D78 0000EB08 3B 40 00 00 */ li r26, 0x0 +/* 00001D7C 0000EB0C 3B A0 00 01 */ li r29, 0x1 +/* 00001D80 0000EB10 3E E0 00 00 */ lis r23, TheTrackStreamer@ha +/* 00001D84 0000EB14 3F 00 00 00 */ lis r24, bStreamingPositionFromICE@ha +/* 00001D88 0000EB18 3F 20 00 00 */ lis r25, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@ha +/* 00001D8C 0000EB1C 1C 1D 00 68 */ mulli r0, r29, 0x68 +/* 00001D90 0000EB20 7F E0 B2 14 */ add r31, r0, r22 +/* 00001D94 0000EB24 89 3F 00 08 */ lbz r9, 0x8(r31) +/* 00001D98 0000EB28 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00001D9C 0000EB2C 41 82 1E D8 */ beq .L_00003C74 +/* 00001DA0 0000EB30 81 3F 00 3C */ lwz r9, 0x3c(r31) +/* 00001DA4 0000EB34 38 1F 00 3C */ addi r0, r31, 0x3c +/* 00001DA8 0000EB38 7C 1C 03 78 */ mr r28, r0 +/* 00001DAC 0000EB3C 39 60 00 00 */ li r11, 0x0 +/* 00001DB0 0000EB40 7C 09 00 00 */ cmpw r9, r0 +/* 00001DB4 0000EB44 41 82 1D BC */ beq .L_00003B70 +/* 00001DB8 0000EB48 7D 2B 4B 78 */ mr r11, r9 +/* 00001DBC 0000EB4C 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00001DC0 0000EB50 41 82 1E D8 */ beq .L_00003C98 +/* 00001DC4 0000EB54 2C 1A 00 00 */ cmpwi r26, 0x0 +/* 00001DC8 0000EB58 3F 60 00 00 */ lis r27, TheTrackStreamer@ha +/* 00001DCC 0000EB5C 40 82 1D DC */ bne .L_00003BA8 +/* 00001DD0 0000EB60 38 77 00 00 */ addi r3, r23, TheTrackStreamer@l +/* 00001DD4 0000EB64 3B 40 00 01 */ li r26, 0x1 +/* 00001DD8 0000EB68 48 00 00 01 */ bl ClearStreamingPositions__13TrackStreamer +/* 00001DDC 0000EB6C 81 3F 00 38 */ lwz r9, 0x38(r31) +/* 00001DE0 0000EB70 3B C1 00 08 */ addi r30, r1, 0x8 +/* 00001DE4 0000EB74 80 18 00 00 */ lwz r0, bStreamingPositionFromICE@l(r24) +/* 00001DE8 0000EB78 C1 A9 00 40 */ lfs f13, 0x40(r9) +/* 00001DEC 0000EB7C C1 89 00 44 */ lfs f12, 0x44(r9) +/* 00001DF0 0000EB80 2C 00 00 00 */ cmpwi r0, 0x0 +.L_00001DF4: +/* 00001DF4 0000EB84 C0 09 00 48 */ lfs f0, 0x48(r9) +/* 00001DF8 0000EB88 D1 A1 00 08 */ stfs f13, 0x8(r1) +/* 00001DFC 0000EB8C D1 81 00 0C */ stfs f12, 0xc(r1) +.L_00001E00: +/* 00001E00 0000EB90 D0 1E 00 08 */ stfs f0, 0x8(r30) +.L_00001E04: +/* 00001E04 0000EB94 C1 A9 01 E8 */ lfs f13, 0x1e8(r9) +.L_00001E08: +/* 00001E08 0000EB98 C0 09 01 EC */ lfs f0, 0x1ec(r9) +.L_00001E0C: +/* 00001E0C 0000EB9C C1 89 01 F0 */ lfs f12, 0x1f0(r9) +/* 00001E10 0000EBA0 D1 A1 00 18 */ stfs f13, 0x18(r1) +/* 00001E14 0000EBA4 D0 01 00 1C */ stfs f0, 0x1c(r1) +/* 00001E18 0000EBA8 D1 81 00 20 */ stfs f12, 0x20(r1) +/* 00001E1C 0000EBAC C1 69 00 58 */ lfs f11, 0x58(r9) +/* 00001E20 0000EBB0 C0 09 00 50 */ lfs f0, 0x50(r9) +/* 00001E24 0000EBB4 C1 A9 00 54 */ lfs f13, 0x54(r9) +/* 00001E28 0000EBB8 D0 01 00 28 */ stfs f0, 0x28(r1) +/* 00001E2C 0000EBBC D1 A1 00 2C */ stfs f13, 0x2c(r1) +.L_00001E30: +/* 00001E30 0000EBC0 D1 61 00 30 */ stfs f11, 0x30(r1) +/* 00001E34 0000EBC4 41 82 1E 90 */ beq .L_00003CC4 +/* 00001E38 0000EBC8 81 79 00 00 */ lwz r11, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@l(r25) +/* 00001E3C 0000EBCC 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00001E40 0000EBD0 41 82 1E 78 */ beq .L_00003CB8 +.L_00001E44: +/* 00001E44 0000EBD4 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 00001E48 0000EBD8 A8 69 00 30 */ lha r3, 0x30(r9) +.L_00001E4C: +/* 00001E4C 0000EBDC 80 09 00 34 */ lwz r0, 0x34(r9) +/* 00001E50 0000EBE0 7C 6B 1A 14 */ add r3, r11, r3 +/* 00001E54 0000EBE4 7C 08 03 A6 */ mtlr r0 +/* 00001E58 0000EBE8 4E 80 00 21 */ blrl +/* 00001E5C 0000EBEC C0 03 00 00 */ lfs f0, 0x0(r3) +/* 00001E60 0000EBF0 C1 A3 00 08 */ lfs f13, 0x8(r3) +/* 00001E64 0000EBF4 C1 83 00 04 */ lfs f12, 0x4(r3) +/* 00001E68 0000EBF8 FC 00 00 50 */ fneg f0, f0 +/* 00001E6C 0000EBFC D1 A1 00 08 */ stfs f13, 0x8(r1) +/* 00001E70 0000EC00 D0 01 00 0C */ stfs f0, 0xc(r1) +/* 00001E74 0000EC04 D1 9E 00 08 */ stfs f12, 0x8(r30) +/* 00001E78 0000EC08 C0 01 00 20 */ lfs f0, 0x20(r1) +/* 00001E7C 0000EC0C D3 E1 00 18 */ stfs f31, 0x18(r1) +/* 00001E80 0000EC10 D0 01 00 30 */ stfs f0, 0x30(r1) +/* 00001E84 0000EC14 D3 E1 00 1C */ stfs f31, 0x1c(r1) +.L_00001E88: +/* 00001E88 0000EC18 D3 E1 00 28 */ stfs f31, 0x28(r1) +/* 00001E8C 0000EC1C D3 E1 00 2C */ stfs f31, 0x2c(r1) +/* 00001E90 0000EC20 80 1F 00 3C */ lwz r0, 0x3c(r31) +/* 00001E94 0000EC24 39 00 00 00 */ li r8, 0x0 +/* 00001E98 0000EC28 39 20 00 00 */ li r9, 0x0 +/* 00001E9C 0000EC2C 7C 00 E0 00 */ cmpw r0, r28 +.L_00001EA0: +/* 00001EA0 0000EC30 41 82 1E A8 */ beq .L_00003D48 +/* 00001EA4 0000EC34 7C 09 03 78 */ mr r9, r0 +/* 00001EA8 0000EC38 80 09 00 0C */ lwz r0, 0xc(r9) +/* 00001EAC 0000EC3C 2C 00 00 01 */ cmpwi r0, 0x1 +/* 00001EB0 0000EC40 40 82 1E B8 */ bne .L_00003D68 +/* 00001EB4 0000EC44 39 00 00 01 */ li r8, 0x1 +/* 00001EB8 0000EC48 38 7B 00 00 */ addi r3, r27, TheTrackStreamer@l +/* 00001EBC 0000EC4C 38 A1 00 08 */ addi r5, r1, 0x8 +/* 00001EC0 0000EC50 38 C1 00 18 */ addi r6, r1, 0x18 +/* 00001EC4 0000EC54 38 E1 00 28 */ addi r7, r1, 0x28 +/* 00001EC8 0000EC58 6B A4 00 02 */ xori r4, r29, 0x2 +/* 00001ECC 0000EC5C 20 04 00 00 */ subfic r0, r4, 0x0 +.L_00001ED0: +/* 00001ED0 0000EC60 7C 80 21 14 */ adde r4, r0, r4 +/* 00001ED4 0000EC64 48 00 00 01 */ bl PredictStreamingPosition__13TrackStreameriPC8bVector3N22b +/* 00001ED8 0000EC68 3B BD 00 01 */ addi r29, r29, 0x1 +/* 00001EDC 0000EC6C 2C 1D 00 02 */ cmpwi r29, 0x2 +/* 00001EE0 0000EC70 40 81 1D 8C */ ble .L_00003C6C +/* 00001EE4 0000EC74 80 01 00 94 */ lwz r0, 0x94(r1) +/* 00001EE8 0000EC78 7C 08 03 A6 */ mtlr r0 +/* 00001EEC 0000EC7C BA C1 00 60 */ lmw r22, 0x60(r1) +/* 00001EF0 0000EC80 E3 E1 00 88 */ psq_l f31, 0x88(r1), 0, qr0 +/* 00001EF4 0000EC84 38 21 00 90 */ addi r1, r1, 0x90 +/* 00001EF8 0000EC88 4E 80 00 20 */ blr +.endfn UpdateCameraMovers__Ff + +# .text:0x1EFC | size: 0x20 +# DoesCameraTypeDisablePreculler(CameraMoverTypes) +.fn DoesCameraTypeDisablePreculler__F16CameraMoverTypes, global +/* 00001EFC 0000EC8C 2C 03 00 02 */ cmpwi r3, 0x2 +/* 00001F00 0000EC90 41 82 1F 14 */ beq .L_00003E14 +/* 00001F04 0000EC94 68 63 00 06 */ xori r3, r3, 0x6 +/* 00001F08 0000EC98 20 03 00 00 */ subfic r0, r3, 0x0 +/* 00001F0C 0000EC9C 7C 60 19 14 */ adde r3, r0, r3 +.L_00001F10: +/* 00001F10 0000ECA0 4E 80 00 20 */ blr +.L_00001F14: +/* 00001F14 0000ECA4 38 60 00 01 */ li r3, 0x1 +/* 00001F18 0000ECA8 4E 80 00 20 */ blr +.endfn DoesCameraTypeDisablePreculler__F16CameraMoverTypes + +# .text:0x1F1C | size: 0x118 +.fn __11CameraMoveri16CameraMoverTypes, global +/* 00001F1C 0000ECAC 94 21 FF E8 */ stwu r1, -0x18(r1) +.L_00001F20: +/* 00001F20 0000ECB0 7C 08 02 A6 */ mflr r0 +/* 00001F24 0000ECB4 BF 81 00 08 */ stmw r28, 0x8(r1) +/* 00001F28 0000ECB8 90 01 00 1C */ stw r0, 0x1c(r1) +/* 00001F2C 0000ECBC 7C 7F 1B 78 */ mr r31, r3 +/* 00001F30 0000ECC0 3D 60 00 00 */ lis r11, .rodata+0x494@ha +/* 00001F34 0000ECC4 A0 1F 00 5A */ lhz r0, 0x5a(r31) +/* 00001F38 0000ECC8 3B A0 00 00 */ li r29, 0x0 +/* 00001F3C 0000ECCC C0 0B 04 94 */ lfs f0, .rodata+0x494@l(r11) +/* 00001F40 0000ECD0 3D 20 00 00 */ lis r9, _vt.11CameraMover@ha +.L_00001F44: +/* 00001F44 0000ECD4 90 1F 00 58 */ stw r0, 0x58(r31) +/* 00001F48 0000ECD8 7C 9C 23 78 */ mr r28, r4 +.L_00001F4C: +/* 00001F4C 0000ECDC 39 29 00 00 */ addi r9, r9, _vt.11CameraMover@l +/* 00001F50 0000ECE0 7C BE 2B 78 */ mr r30, r5 +/* 00001F54 0000ECE4 B3 BF 00 5A */ sth r29, 0x5a(r31) +.L_00001F58: +/* 00001F58 0000ECE8 38 60 00 00 */ li r3, 0x0 +/* 00001F5C 0000ECEC 93 BF 00 60 */ stw r29, 0x60(r31) +/* 00001F60 0000ECF0 38 80 00 00 */ li r4, 0x0 +/* 00001F64 0000ECF4 91 3F 00 08 */ stw r9, 0x8(r31) +/* 00001F68 0000ECF8 38 A0 00 1C */ li r5, 0x1c +/* 00001F6C 0000ECFC D0 1F 00 5C */ stfs f0, 0x5c(r31) +/* 00001F70 0000ED00 38 C0 00 00 */ li r6, 0x0 +/* 00001F74 0000ED04 48 00 00 01 */ bl Create__9WColliderUiQ29WCollider14eColliderShapeUiUi +/* 00001F78 0000ED08 3D 20 00 00 */ lis r9, .rodata+0x498@ha +/* 00001F7C 0000ED0C 90 7F 00 24 */ stw r3, 0x24(r31) +/* 00001F80 0000ED10 C0 09 04 98 */ lfs f0, .rodata+0x498@l(r9) +/* 00001F84 0000ED14 2C 1C FF FF */ cmpwi r28, -0x1 +/* 00001F88 0000ED18 93 DF 00 0C */ stw r30, 0xc(r31) +/* 00001F8C 0000ED1C D0 1F 00 78 */ stfs f0, 0x78(r31) +/* 00001F90 0000ED20 93 BF 00 14 */ stw r29, 0x14(r31) +/* 00001F94 0000ED24 93 9F 00 10 */ stw r28, 0x10(r31) +/* 00001F98 0000ED28 D0 1F 00 64 */ stfs f0, 0x64(r31) +.L_00001F9C: +/* 00001F9C 0000ED2C D0 1F 00 68 */ stfs f0, 0x68(r31) +.L_00001FA0: +/* 00001FA0 0000ED30 D0 1F 00 6C */ stfs f0, 0x6c(r31) +.L_00001FA4: +/* 00001FA4 0000ED34 D0 1F 00 74 */ stfs f0, 0x74(r31) +/* 00001FA8 0000ED38 D0 1F 00 70 */ stfs f0, 0x70(r31) +.L_00001FAC: +/* 00001FAC 0000ED3C 40 82 1F C0 */ bne .L_00003F6C +/* 00001FB0 0000ED40 93 BF 00 1C */ stw r29, 0x1c(r31) +/* 00001FB4 0000ED44 93 BF 00 20 */ stw r29, 0x20(r31) +/* 00001FB8 0000ED48 93 BF 00 18 */ stw r29, 0x18(r31) +.L_00001FBC: +/* 00001FBC 0000ED4C 48 00 1F FC */ b .L_00003FB8 +/* 00001FC0 0000ED50 1D 5C 00 68 */ mulli r10, r28, 0x68 +.L_00001FC4: +/* 00001FC4 0000ED54 3D 20 00 00 */ lis r9, eViews@ha +/* 00001FC8 0000ED58 39 29 00 00 */ addi r9, r9, eViews@l +/* 00001FCC 0000ED5C 3D 60 00 00 */ lis r11, .rodata+0x49C@ha +.L_00001FD0: +/* 00001FD0 0000ED60 7F E3 FB 78 */ mr r3, r31 +/* 00001FD4 0000ED64 C0 0B 04 9C */ lfs f0, .rodata+0x49C@l(r11) +/* 00001FD8 0000ED68 7D 4A 4A 14 */ add r10, r10, r9 +/* 00001FDC 0000ED6C 91 5F 00 18 */ stw r10, 0x18(r31) +.L_00001FE0: +/* 00001FE0 0000ED70 81 6A 00 38 */ lwz r11, 0x38(r10) +/* 00001FE4 0000ED74 91 7F 00 1C */ stw r11, 0x1c(r31) +/* 00001FE8 0000ED78 D0 0B 00 C0 */ stfs f0, 0xc0(r11) +/* 00001FEC 0000ED7C 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 00001FF0 0000ED80 80 09 02 8C */ lwz r0, 0x28c(r9) +/* 00001FF4 0000ED84 90 1F 00 20 */ stw r0, 0x20(r31) +/* 00001FF8 0000ED88 48 00 20 CD */ bl .L_000040C4 +/* 00001FFC 0000ED8C 80 7F 00 0C */ lwz r3, 0xc(r31) +/* 00002000 0000ED90 48 00 1E FD */ bl .L_00003EFC +.L_00002004: +/* 00002004 0000ED94 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00002008 0000ED98 41 82 20 1C */ beq .L_00004024 +/* 0000200C 0000ED9C 3D 60 00 00 */ lis r11, DisablePrecullerCounter@ha +/* 00002010 0000EDA0 81 2B 00 00 */ lwz r9, DisablePrecullerCounter@l(r11) +/* 00002014 0000EDA4 39 29 00 01 */ addi r9, r9, 0x1 +/* 00002018 0000EDA8 91 2B 00 00 */ stw r9, DisablePrecullerCounter@l(r11) +/* 0000201C 0000EDAC 7F E3 FB 78 */ mr r3, r31 +/* 00002020 0000EDB0 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 00002024 0000EDB4 7C 08 03 A6 */ mtlr r0 +/* 00002028 0000EDB8 BB 81 00 08 */ lmw r28, 0x8(r1) +/* 0000202C 0000EDBC 38 21 00 18 */ addi r1, r1, 0x18 +/* 00002030 0000EDC0 4E 80 00 20 */ blr +.endfn __11CameraMoveri16CameraMoverTypes + +# .text:0x2034 | size: 0x78 +.fn _._11CameraMover, global +/* 00002034 0000EDC4 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00002038 0000EDC8 7C 08 02 A6 */ mflr r0 +/* 0000203C 0000EDCC BF C1 00 08 */ stmw r30, 0x8(r1) +/* 00002040 0000EDD0 90 01 00 14 */ stw r0, 0x14(r1) +/* 00002044 0000EDD4 7C 7F 1B 78 */ mr r31, r3 +/* 00002048 0000EDD8 3D 20 00 00 */ lis r9, _vt.11CameraMover@ha +/* 0000204C 0000EDDC 39 29 00 00 */ addi r9, r9, _vt.11CameraMover@l +/* 00002050 0000EDE0 80 7F 00 24 */ lwz r3, 0x24(r31) +/* 00002054 0000EDE4 7C 9E 23 78 */ mr r30, r4 +/* 00002058 0000EDE8 91 3F 00 08 */ stw r9, 0x8(r31) +/* 0000205C 0000EDEC 48 00 00 01 */ bl Destroy__9WColliderP9WCollider +/* 00002060 0000EDF0 80 7F 00 0C */ lwz r3, 0xc(r31) +/* 00002064 0000EDF4 48 00 1E FD */ bl RenderCarPOV__16CubicCameraMover +/* 00002068 0000EDF8 2C 03 00 00 */ cmpwi r3, 0x0 +.L_0000206C: +/* 0000206C 0000EDFC 41 82 20 80 */ beq .L_000040EC +.L_00002070: +/* 00002070 0000EE00 3D 60 00 00 */ lis r11, DisablePrecullerCounter@ha +/* 00002074 0000EE04 81 2B 00 00 */ lwz r9, DisablePrecullerCounter@l(r11) +/* 00002078 0000EE08 39 29 FF FF */ subi r9, r9, 0x1 +/* 0000207C 0000EE0C 91 2B 00 00 */ stw r9, DisablePrecullerCounter@l(r11) +/* 00002080 0000EE10 7F E3 FB 78 */ mr r3, r31 +/* 00002084 0000EE14 48 00 21 41 */ bl .L_000041C4 +/* 00002088 0000EE18 73 C0 00 01 */ andi. r0, r30, 0x1 +/* 0000208C 0000EE1C 41 82 20 98 */ beq .L_00004124 +/* 00002090 0000EE20 7F E3 FB 78 */ mr r3, r31 +/* 00002094 0000EE24 48 00 00 01 */ bl __builtin_delete +/* 00002098 0000EE28 80 01 00 14 */ lwz r0, 0x14(r1) +/* 0000209C 0000EE2C 7C 08 03 A6 */ mtlr r0 +/* 000020A0 0000EE30 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 000020A4 0000EE34 38 21 00 10 */ addi r1, r1, 0x10 +/* 000020A8 0000EE38 4E 80 00 20 */ blr +.endfn _._11CameraMover + +# .text:0x20AC | size: 0x4 +.fn Update__11CameraMoverf, global +/* 000020AC 0000EE3C 4E 80 00 20 */ blr +.endfn Update__11CameraMoverf + +# .text:0x20B0 | size: 0x4 +.fn Render__11CameraMoverP5eView, global +/* 000020B0 0000EE40 4E 80 00 20 */ blr +.endfn Render__11CameraMoverP5eView + +# .text:0x20B4 | size: 0x8 +# CameraMover::GetAnchor +.fn GetAnchor__11CameraMover, global +/* 000020B4 0000EE44 38 60 00 00 */ li r3, 0x0 +/* 000020B8 0000EE48 4E 80 00 20 */ blr +.endfn GetAnchor__11CameraMover + +# .text:0x20BC | size: 0x8 +# CameraMover::OutsidePOV +.fn OutsidePOV__11CameraMover, global +/* 000020BC 0000EE4C 38 60 00 01 */ li r3, 0x1 +/* 000020C0 0000EE50 4E 80 00 20 */ blr +.endfn OutsidePOV__11CameraMover + +# .text:0x20C4 | size: 0x8 +# CameraMover::RenderCarPOV +.fn RenderCarPOV__11CameraMover, global +/* 000020C4 0000EE54 38 60 00 01 */ li r3, 0x1 +/* 000020C8 0000EE58 4E 80 00 20 */ blr +.endfn RenderCarPOV__11CameraMover + +# .text:0x20CC | size: 0x74 +# CameraMover::Enable +.fn Enable__11CameraMover, global +/* 000020CC 0000EE5C 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 000020D0 0000EE60 7C 08 02 A6 */ mflr r0 +/* 000020D4 0000EE64 93 E1 00 0C */ stw r31, 0xc(r1) +/* 000020D8 0000EE68 90 01 00 14 */ stw r0, 0x14(r1) +/* 000020DC 0000EE6C 7C 7F 1B 78 */ mr r31, r3 +/* 000020E0 0000EE70 80 1F 00 14 */ lwz r0, 0x14(r31) +/* 000020E4 0000EE74 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000020E8 0000EE78 40 82 21 2C */ bne .L_00004214 +/* 000020EC 0000EE7C 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha +/* 000020F0 0000EE80 38 00 00 01 */ li r0, 0x1 +/* 000020F4 0000EE84 81 69 00 00 */ lwz r11, _6Camera.StopUpdating@l(r9) +/* 000020F8 0000EE88 90 1F 00 14 */ stw r0, 0x14(r31) +/* 000020FC 0000EE8C 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00002100 0000EE90 40 82 21 10 */ bne .L_00004210 +/* 00002104 0000EE94 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 00002108 0000EE98 80 1F 00 20 */ lwz r0, 0x20(r31) +/* 0000210C 0000EE9C 90 09 02 8C */ stw r0, 0x28c(r9) +/* 00002110 0000EEA0 80 7F 00 18 */ lwz r3, 0x18(r31) +/* 00002114 0000EEA4 7F E4 FB 78 */ mr r4, r31 +/* 00002118 0000EEA8 48 00 00 01 */ bl AttachCameraMover__5eViewP11CameraMover +/* 0000211C 0000EEAC 3D 20 00 00 */ lis r9, .rodata+0x4A0@ha +/* 00002120 0000EEB0 81 7F 00 1C */ lwz r11, 0x1c(r31) +/* 00002124 0000EEB4 C0 09 04 A0 */ lfs f0, .rodata+0x4A0@l(r9) +/* 00002128 0000EEB8 D0 0B 00 BC */ stfs f0, 0xbc(r11) +.L_0000212C: +/* 0000212C 0000EEBC 80 01 00 14 */ lwz r0, 0x14(r1) +/* 00002130 0000EEC0 7C 08 03 A6 */ mtlr r0 +/* 00002134 0000EEC4 83 E1 00 0C */ lwz r31, 0xc(r1) +/* 00002138 0000EEC8 38 21 00 10 */ addi r1, r1, 0x10 +/* 0000213C 0000EECC 4E 80 00 20 */ blr +.endfn Enable__11CameraMover + +# .text:0x2140 | size: 0x4C +# CameraMover::Disable +.fn Disable__11CameraMover, global +/* 00002140 0000EED0 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 00002144 0000EED4 7C 08 02 A6 */ mflr r0 +/* 00002148 0000EED8 90 01 00 0C */ stw r0, 0xc(r1) +/* 0000214C 0000EEDC 7C 6B 1B 78 */ mr r11, r3 +/* 00002150 0000EEE0 80 0B 00 14 */ lwz r0, 0x14(r11) +/* 00002154 0000EEE4 2C 00 00 00 */ cmpwi r0, 0x0 +.L_00002158: +/* 00002158 0000EEE8 41 82 21 7C */ beq .L_000042D4 +/* 0000215C 0000EEEC 38 00 00 00 */ li r0, 0x0 +/* 00002160 0000EEF0 81 2B 00 1C */ lwz r9, 0x1c(r11) +/* 00002164 0000EEF4 90 0B 00 14 */ stw r0, 0x14(r11) +/* 00002168 0000EEF8 7D 64 5B 78 */ mr r4, r11 +/* 0000216C 0000EEFC 80 6B 00 18 */ lwz r3, 0x18(r11) +/* 00002170 0000EF00 80 09 02 8C */ lwz r0, 0x28c(r9) +/* 00002174 0000EF04 90 0B 00 20 */ stw r0, 0x20(r11) +/* 00002178 0000EF08 48 00 00 01 */ bl UnattachCameraMover__5eViewP11CameraMover +/* 0000217C 0000EF0C 80 01 00 0C */ lwz r0, 0xc(r1) +/* 00002180 0000EF10 7C 08 03 A6 */ mtlr r0 +/* 00002184 0000EF14 38 21 00 08 */ addi r1, r1, 0x8 +/* 00002188 0000EF18 4E 80 00 20 */ blr +.endfn Disable__11CameraMover + +# .text:0x218C | size: 0x34 +.fn OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv, global +/* 0000218C 0000EF1C 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 00002190 0000EF20 2C 06 00 00 */ cmpwi r6, 0x0 +.L_00002194: +/* 00002194 0000EF24 41 82 21 B4 */ beq .L_00004348 +/* 00002198 0000EF28 C0 05 00 00 */ lfs f0, 0x0(r5) +/* 0000219C 0000EF2C C1 85 00 04 */ lfs f12, 0x4(r5) +/* 000021A0 0000EF30 C1 A5 00 08 */ lfs f13, 0x8(r5) +/* 000021A4 0000EF34 FC 00 00 50 */ fneg f0, f0 +/* 000021A8 0000EF38 D0 01 00 0C */ stfs f0, 0xc(r1) +/* 000021AC 0000EF3C D1 A1 00 08 */ stfs f13, 0x8(r1) +/* 000021B0 0000EF40 D1 81 00 10 */ stfs f12, 0x10(r1) +/* 000021B4 0000EF44 38 60 00 01 */ li r3, 0x1 +/* 000021B8 0000EF48 38 21 00 18 */ addi r1, r1, 0x18 +/* 000021BC 0000EF4C 4E 80 00 20 */ blr +.endfn OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv + +# .text:0x21C0 | size: 0x140 +.fn IsSomethingInBetween__11CameraMoverRCQ25UMath7Vector4T1, global +/* 000021C0 0000EF50 94 21 FF 60 */ stwu r1, -0xa0(r1) +/* 000021C4 0000EF54 7C 08 02 A6 */ mflr r0 +/* 000021C8 0000EF58 BF 61 00 8C */ stmw r27, 0x8c(r1) +.L_000021CC: +/* 000021CC 0000EF5C 90 01 00 A4 */ stw r0, 0xa4(r1) +/* 000021D0 0000EF60 3D 60 00 00 */ lis r11, _Q25UMath7Vector4.kIdentity@ha +/* 000021D4 0000EF64 7C 9E 23 78 */ mr r30, r4 +/* 000021D8 0000EF68 39 2B 00 00 */ addi r9, r11, _Q25UMath7Vector4.kIdentity@l +/* 000021DC 0000EF6C 81 4B 00 00 */ lwz r10, _Q25UMath7Vector4.kIdentity@l(r11) +/* 000021E0 0000EF70 81 09 00 0C */ lwz r8, 0xc(r9) +/* 000021E4 0000EF74 7C BD 2B 78 */ mr r29, r5 +/* 000021E8 0000EF78 81 69 00 04 */ lwz r11, 0x4(r9) +/* 000021EC 0000EF7C 38 80 00 00 */ li r4, 0x0 +/* 000021F0 0000EF80 80 09 00 08 */ lwz r0, 0x8(r9) +/* 000021F4 0000EF84 38 A0 00 20 */ li r5, 0x20 +/* 000021F8 0000EF88 91 41 00 38 */ stw r10, 0x38(r1) +/* 000021FC 0000EF8C 38 61 00 48 */ addi r3, r1, 0x48 +/* 00002200 0000EF90 91 61 00 3C */ stw r11, 0x3c(r1) +/* 00002204 0000EF94 90 01 00 40 */ stw r0, 0x40(r1) +/* 00002208 0000EF98 91 01 00 44 */ stw r8, 0x44(r1) +/* 0000220C 0000EF9C 91 41 00 28 */ stw r10, 0x28(r1) +/* 00002210 0000EFA0 91 61 00 2C */ stw r11, 0x2c(r1) +/* 00002214 0000EFA4 90 01 00 30 */ stw r0, 0x30(r1) +.L_00002218: +/* 00002218 0000EFA8 91 01 00 34 */ stw r8, 0x34(r1) +/* 0000221C 0000EFAC 4C C6 31 82 */ crclr cr1eq +/* 00002220 0000EFB0 48 00 00 01 */ bl memset +/* 00002224 0000EFB4 3D 20 00 00 */ lis r9, .rodata+0x4A4@ha +/* 00002228 0000EFB8 81 1E 00 00 */ lwz r8, 0x0(r30) +/* 0000222C 0000EFBC C0 09 04 A4 */ lfs f0, .rodata+0x4A4@l(r9) +.L_00002230: +/* 00002230 0000EFC0 38 00 00 00 */ li r0, 0x0 +/* 00002234 0000EFC4 83 7E 00 0C */ lwz r27, 0xc(r30) +/* 00002238 0000EFC8 39 60 00 03 */ li r11, 0x3 +/* 0000223C 0000EFCC 83 9E 00 04 */ lwz r28, 0x4(r30) +/* 00002240 0000EFD0 39 21 00 08 */ addi r9, r1, 0x8 +/* 00002244 0000EFD4 80 FE 00 08 */ lwz r7, 0x8(r30) +.L_00002248: +/* 00002248 0000EFD8 7D 24 4B 78 */ mr r4, r9 +/* 0000224C 0000EFDC D0 01 00 74 */ stfs f0, 0x74(r1) +/* 00002250 0000EFE0 39 41 00 18 */ addi r10, r1, 0x18 +/* 00002254 0000EFE4 D0 01 00 6C */ stfs f0, 0x6c(r1) +/* 00002258 0000EFE8 3F C0 00 00 */ lis r30, .rodata+0x4A8@ha +/* 0000225C 0000EFEC 90 01 00 80 */ stw r0, 0x80(r1) +/* 00002260 0000EFF0 38 61 00 80 */ addi r3, r1, 0x80 +/* 00002264 0000EFF4 91 61 00 84 */ stw r11, 0x84(r1) +/* 00002268 0000EFF8 38 A1 00 28 */ addi r5, r1, 0x28 +/* 0000226C 0000EFFC 90 01 00 68 */ stw r0, 0x68(r1) +/* 00002270 0000F000 38 C0 00 03 */ li r6, 0x3 +/* 00002274 0000F004 90 01 00 70 */ stw r0, 0x70(r1) +/* 00002278 0000F008 98 01 00 78 */ stb r0, 0x78(r1) +/* 0000227C 0000F00C 98 01 00 79 */ stb r0, 0x79(r1) +/* 00002280 0000F010 B0 01 00 7A */ sth r0, 0x7a(r1) +/* 00002284 0000F014 90 01 00 7C */ stw r0, 0x7c(r1) +/* 00002288 0000F018 91 01 00 08 */ stw r8, 0x8(r1) +/* 0000228C 0000F01C 81 1D 00 00 */ lwz r8, 0x0(r29) +/* 00002290 0000F020 93 89 00 04 */ stw r28, 0x4(r9) +/* 00002294 0000F024 90 E9 00 08 */ stw r7, 0x8(r9) +/* 00002298 0000F028 93 69 00 0C */ stw r27, 0xc(r9) +/* 0000229C 0000F02C 81 3D 00 04 */ lwz r9, 0x4(r29) +/* 000022A0 0000F030 80 1D 00 0C */ lwz r0, 0xc(r29) +/* 000022A4 0000F034 81 7D 00 08 */ lwz r11, 0x8(r29) +/* 000022A8 0000F038 91 01 00 18 */ stw r8, 0x18(r1) +/* 000022AC 0000F03C 90 0A 00 0C */ stw r0, 0xc(r10) +/* 000022B0 0000F040 91 2A 00 04 */ stw r9, 0x4(r10) +/* 000022B4 0000F044 91 6A 00 08 */ stw r11, 0x8(r10) +/* 000022B8 0000F048 C1 9E 04 A8 */ lfs f12, .rodata+0x4A8@l(r30) +/* 000022BC 0000F04C C0 01 00 0C */ lfs f0, 0xc(r1) +.L_000022C0: +/* 000022C0 0000F050 C1 A1 00 1C */ lfs f13, 0x1c(r1) +/* 000022C4 0000F054 EC 00 60 2A */ fadds f0, f0, f12 +/* 000022C8 0000F058 ED AD 60 2A */ fadds f13, f13, f12 +/* 000022CC 0000F05C D0 01 00 0C */ stfs f0, 0xc(r1) +/* 000022D0 0000F060 D1 A1 00 1C */ stfs f13, 0x1c(r1) +/* 000022D4 0000F064 48 00 00 01 */ bl CheckHitWorld__13WCollisionMgrPCQ25UMath7Vector4RQ213WCollisionMgr18WorldCollisionInfoUi +/* 000022D8 0000F068 88 01 00 79 */ lbz r0, 0x79(r1) +/* 000022DC 0000F06C 38 60 00 01 */ li r3, 0x1 +/* 000022E0 0000F070 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000022E4 0000F074 40 82 22 EC */ bne .L_000045D0 +/* 000022E8 0000F078 38 60 00 00 */ li r3, 0x0 +/* 000022EC 0000F07C 80 01 00 A4 */ lwz r0, 0xa4(r1) +/* 000022F0 0000F080 7C 08 03 A6 */ mtlr r0 +/* 000022F4 0000F084 BB 61 00 8C */ lmw r27, 0x8c(r1) +/* 000022F8 0000F088 38 21 00 A0 */ addi r1, r1, 0xa0 +/* 000022FC 0000F08C 4E 80 00 20 */ blr +.endfn IsSomethingInBetween__11CameraMoverRCQ25UMath7Vector4T1 + +# .text:0x2300 | size: 0x6C +.fn IsSomethingInBetween__11CameraMoverPC8bVector3T1, global +/* 00002300 0000F090 94 21 FF D8 */ stwu r1, -0x28(r1) +/* 00002304 0000F094 7C 08 02 A6 */ mflr r0 +/* 00002308 0000F098 90 01 00 2C */ stw r0, 0x2c(r1) +/* 0000230C 0000F09C 7C 89 23 78 */ mr r9, r4 +/* 00002310 0000F0A0 7C AB 2B 78 */ mr r11, r5 +/* 00002314 0000F0A4 C0 09 00 04 */ lfs f0, 0x4(r9) +.L_00002318: +/* 00002318 0000F0A8 39 41 00 08 */ addi r10, r1, 0x8 +/* 0000231C 0000F0AC C1 89 00 08 */ lfs f12, 0x8(r9) +/* 00002320 0000F0B0 7D 44 53 78 */ mr r4, r10 +/* 00002324 0000F0B4 C1 AB 00 04 */ lfs f13, 0x4(r11) +/* 00002328 0000F0B8 FC 00 00 50 */ fneg f0, f0 +/* 0000232C 0000F0BC C1 69 00 00 */ lfs f11, 0x0(r9) +/* 00002330 0000F0C0 38 A1 00 18 */ addi r5, r1, 0x18 +/* 00002334 0000F0C4 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 00002338 0000F0C8 FD A0 68 50 */ fneg f13, f13 +/* 0000233C 0000F0CC D1 81 00 0C */ stfs f12, 0xc(r1) +/* 00002340 0000F0D0 C1 8B 00 00 */ lfs f12, 0x0(r11) +/* 00002344 0000F0D4 C0 0B 00 08 */ lfs f0, 0x8(r11) +/* 00002348 0000F0D8 D1 6A 00 08 */ stfs f11, 0x8(r10) +/* 0000234C 0000F0DC D1 A1 00 18 */ stfs f13, 0x18(r1) +/* 00002350 0000F0E0 D0 01 00 1C */ stfs f0, 0x1c(r1) +/* 00002354 0000F0E4 D1 81 00 20 */ stfs f12, 0x20(r1) +/* 00002358 0000F0E8 48 00 21 C1 */ bl .L_00004518 +/* 0000235C 0000F0EC 80 01 00 2C */ lwz r0, 0x2c(r1) +/* 00002360 0000F0F0 7C 08 03 A6 */ mtlr r0 +/* 00002364 0000F0F4 38 21 00 28 */ addi r1, r1, 0x28 +/* 00002368 0000F0F8 4E 80 00 20 */ blr +.endfn IsSomethingInBetween__11CameraMoverPC8bVector3T1 + +# .text:0x236C | size: 0xC +# CameraMover::MinDistToWall +.fn MinDistToWall__11CameraMover, global +/* 0000236C 0000F0FC 3D 20 00 00 */ lis r9, .rodata+0x4AC@ha +.L_00002370: +/* 00002370 0000F100 C0 29 04 AC */ lfs f1, .rodata+0x4AC@l(r9) +/* 00002374 0000F104 4E 80 00 20 */ blr +.endfn MinDistToWall__11CameraMover + +# .text:0x2378 | size: 0x470 +.fn EnforceMinGapToWalls__11CameraMoverP9WColliderP8bVector3T2P8bVector4, global +/* 00002378 0000F108 94 21 FE 50 */ stwu r1, -0x1b0(r1) +.L_0000237C: +/* 0000237C 0000F10C 7C 08 02 A6 */ mflr r0 +/* 00002380 0000F110 F3 61 01 88 */ psq_st f27, 0x188(r1), 0, qr0 +/* 00002384 0000F114 F3 81 01 90 */ psq_st f28, 0x190(r1), 0, qr0 +/* 00002388 0000F118 F3 A1 01 98 */ psq_st f29, 0x198(r1), 0, qr0 +/* 0000238C 0000F11C F3 C1 01 A0 */ psq_st f30, 0x1a0(r1), 0, qr0 +/* 00002390 0000F120 F3 E1 01 A8 */ psq_st f31, 0x1a8(r1), 0, qr0 +/* 00002394 0000F124 BD C1 01 40 */ stmw r14, 0x140(r1) +/* 00002398 0000F128 90 01 01 B4 */ stw r0, 0x1b4(r1) +/* 0000239C 0000F12C 3D 20 00 00 */ lis r9, .rodata+0x4B0@ha +/* 000023A0 0000F130 7C 72 1B 78 */ mr r18, r3 +.L_000023A4: +/* 000023A4 0000F134 C3 A9 04 B0 */ lfs f29, .rodata+0x4B0@l(r9) +/* 000023A8 0000F138 80 92 00 1C */ lwz r4, 0x1c(r18) +/* 000023AC 0000F13C 3F C0 43 30 */ lis r30, 0x4330 +/* 000023B0 0000F140 D3 A1 00 08 */ stfs f29, 0x8(r1) +/* 000023B4 0000F144 3D 20 00 00 */ lis r9, .rodata+0x4B8@ha +/* 000023B8 0000F148 D3 A1 00 0C */ stfs f29, 0xc(r1) +/* 000023BC 0000F14C 3D 40 00 00 */ lis r10, .rodata+0x4C0@ha +/* 000023C0 0000F150 D3 A1 00 10 */ stfs f29, 0x10(r1) +/* 000023C4 0000F154 3D 00 00 00 */ lis r8, .rodata+0x4C4@ha +/* 000023C8 0000F158 C9 69 04 B8 */ lfd f11, .rodata+0x4B8@l(r9) +/* 000023CC 0000F15C 7C BF 2B 78 */ mr r31, r5 +/* 000023D0 0000F160 A0 04 00 C4 */ lhz r0, 0xc4(r4) +/* 000023D4 0000F164 7C D7 33 78 */ mr r23, r6 +/* 000023D8 0000F168 C1 4A 04 C0 */ lfs f10, .rodata+0x4C0@l(r10) +/* 000023DC 0000F16C 3D 20 00 00 */ lis r9, .rodata+0x4C8@ha +/* 000023E0 0000F170 90 01 01 3C */ stw r0, 0x13c(r1) +/* 000023E4 0000F174 7C F5 3B 78 */ mr r21, r7 +/* 000023E8 0000F178 C1 28 04 C4 */ lfs f9, .rodata+0x4C4@l(r8) +/* 000023EC 0000F17C 38 61 00 18 */ addi r3, r1, 0x18 +/* 000023F0 0000F180 93 C1 01 38 */ stw r30, 0x138(r1) +/* 000023F4 0000F184 38 81 00 28 */ addi r4, r1, 0x28 +/* 000023F8 0000F188 C1 BF 00 00 */ lfs f13, 0x0(r31) +/* 000023FC 0000F18C 39 C0 00 00 */ li r14, 0x0 +/* 00002400 0000F190 C8 01 01 38 */ lfd f0, 0x138(r1) +/* 00002404 0000F194 C1 17 00 00 */ lfs f8, 0x0(r23) +/* 00002408 0000F198 FC 00 58 28 */ fsub f0, f0, f11 +/* 0000240C 0000F19C C1 9F 00 04 */ lfs f12, 0x4(r31) +/* 00002410 0000F1A0 FC 00 00 18 */ frsp f0, f0 +/* 00002414 0000F1A4 C1 7F 00 08 */ lfs f11, 0x8(r31) +/* 00002418 0000F1A8 EC 00 02 B2 */ fmuls f0, f0, f10 +/* 0000241C 0000F1AC C3 C9 04 C8 */ lfs f30, .rodata+0x4C8@l(r9) +/* 00002420 0000F1B0 EC 00 02 72 */ fmuls f0, f0, f9 +/* 00002424 0000F1B4 C1 57 00 04 */ lfs f10, 0x4(r23) +/* 00002428 0000F1B8 C1 37 00 08 */ lfs f9, 0x8(r23) +.L_0000242C: +/* 0000242C 0000F1BC ED AD 40 28 */ fsubs f13, f13, f8 +/* 00002430 0000F1C0 EC 00 00 2A */ fadds f0, f0, f0 +/* 00002434 0000F1C4 D1 A1 00 28 */ stfs f13, 0x28(r1) +/* 00002438 0000F1C8 FC 00 E8 2E */ fsel f0, f0, f0, f29 +.L_0000243C: +/* 0000243C 0000F1CC ED 8C 50 28 */ fsubs f12, f12, f10 +.L_00002440: +/* 00002440 0000F1D0 ED BE 00 28 */ fsubs f13, f30, f0 +/* 00002444 0000F1D4 D1 81 00 2C */ stfs f12, 0x2c(r1) +/* 00002448 0000F1D8 ED 6B 48 28 */ fsubs f11, f11, f9 +/* 0000244C 0000F1DC FF 8D F0 2E */ fsel f28, f13, f0, f30 +/* 00002450 0000F1E0 D1 61 00 30 */ stfs f11, 0x30(r1) +.L_00002454: +/* 00002454 0000F1E4 48 00 00 01 */ bl __8bVector3RC8bVector3 +/* 00002458 0000F1E8 C0 01 00 1C */ lfs f0, 0x1c(r1) +/* 0000245C 0000F1EC 3D 20 00 00 */ lis r9, .rodata+0x4CC@ha +/* 00002460 0000F1F0 C1 A1 00 18 */ lfs f13, 0x18(r1) +.L_00002464: +/* 00002464 0000F1F4 3D 60 00 00 */ lis r11, .rodata+0x4D0@ha +/* 00002468 0000F1F8 EC 00 00 32 */ fmuls f0, f0, f0 +/* 0000246C 0000F1FC C1 81 00 20 */ lfs f12, 0x20(r1) +/* 00002470 0000F200 ED AD 03 7A */ fmadds f13, f13, f13, f0 +/* 00002474 0000F204 C1 69 04 CC */ lfs f11, .rodata+0x4CC@l(r9) +/* 00002478 0000F208 ED 8C 6B 3A */ fmadds f12, f12, f12, f13 +/* 0000247C 0000F20C C1 4B 04 D0 */ lfs f10, .rodata+0x4D0@l(r11) +/* 00002480 0000F210 FC 0C 58 00 */ fcmpu cr0, f12, f11 +.L_00002484: +/* 00002484 0000F214 4C 62 03 82 */ cror un, eq, lt +/* 00002488 0000F218 41 83 24 B8 */ bso .L_00004940 +/* 0000248C 0000F21C FF E0 60 34 */ frsqrte f31, f12 +/* 00002490 0000F220 EC 1F 07 F2 */ fmuls f0, f31, f31 +.L_00002494: +/* 00002494 0000F224 ED BF 02 B2 */ fmuls f13, f31, f10 +/* 00002498 0000F228 EC 0C F0 3C */ fnmsubs f0, f12, f0, f30 +/* 0000249C 0000F22C EF E0 FB 7A */ fmadds f31, f0, f13, f31 +/* 000024A0 0000F230 EC 1F 07 F2 */ fmuls f0, f31, f31 +/* 000024A4 0000F234 ED BF 02 B2 */ fmuls f13, f31, f10 +.L_000024A8: +/* 000024A8 0000F238 EC 0C F0 3C */ fnmsubs f0, f12, f0, f30 +/* 000024AC 0000F23C EF E0 FB 7A */ fmadds f31, f0, f13, f31 +/* 000024B0 0000F240 EF FF 03 32 */ fmuls f31, f31, f12 +/* 000024B4 0000F244 48 00 24 BC */ b .L_00004970 +/* 000024B8 0000F248 FF E0 E8 90 */ fmr f31, f29 +/* 000024BC 0000F24C 3D 20 00 00 */ lis r9, .rodata+0x4D4@ha +/* 000024C0 0000F250 C0 09 04 D4 */ lfs f0, .rodata+0x4D4@l(r9) +/* 000024C4 0000F254 FC 1F 00 00 */ fcmpu cr0, f31, f0 +/* 000024C8 0000F258 41 80 27 BC */ blt .L_00004C84 +/* 000024CC 0000F25C 38 81 00 18 */ addi r4, r1, 0x18 +/* 000024D0 0000F260 38 61 00 38 */ addi r3, r1, 0x38 +.L_000024D4: +/* 000024D4 0000F264 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +/* 000024D8 0000F268 3D 20 00 00 */ lis r9, .rodata+0x4B0@ha +.L_000024DC: +/* 000024DC 0000F26C 3D 60 00 00 */ lis r11, .rodata+0x4C8@ha +/* 000024E0 0000F270 C1 69 04 B0 */ lfs f11, .rodata+0x4B0@l(r9) +/* 000024E4 0000F274 38 61 00 48 */ addi r3, r1, 0x48 +/* 000024E8 0000F278 C0 01 00 38 */ lfs f0, 0x38(r1) +.L_000024EC: +/* 000024EC 0000F27C 7C 73 1B 78 */ mr r19, r3 +/* 000024F0 0000F280 C1 A1 00 3C */ lfs f13, 0x3c(r1) +/* 000024F4 0000F284 38 81 00 38 */ addi r4, r1, 0x38 +/* 000024F8 0000F288 C1 81 00 40 */ lfs f12, 0x40(r1) +/* 000024FC 0000F28C 38 A1 00 28 */ addi r5, r1, 0x28 +/* 00002500 0000F290 C1 4B 04 C8 */ lfs f10, .rodata+0x4C8@l(r11) +/* 00002504 0000F294 3B 01 00 58 */ addi r24, r1, 0x58 +/* 00002508 0000F298 D0 01 00 28 */ stfs f0, 0x28(r1) +/* 0000250C 0000F29C 3A C1 00 18 */ addi r22, r1, 0x18 +/* 00002510 0000F2A0 D1 A1 00 2C */ stfs f13, 0x2c(r1) +/* 00002514 0000F2A4 3B 41 00 68 */ addi r26, r1, 0x68 +/* 00002518 0000F2A8 D1 81 00 30 */ stfs f12, 0x30(r1) +/* 0000251C 0000F2AC 3B C1 00 78 */ addi r30, r1, 0x78 +/* 00002520 0000F2B0 D1 41 00 3C */ stfs f10, 0x3c(r1) +/* 00002524 0000F2B4 3B 61 00 88 */ addi r27, r1, 0x88 +/* 00002528 0000F2B8 D1 61 00 40 */ stfs f11, 0x40(r1) +/* 0000252C 0000F2BC 39 E1 01 10 */ addi r15, r1, 0x110 +/* 00002530 0000F2C0 D1 61 00 38 */ stfs f11, 0x38(r1) +.L_00002534: +/* 00002534 0000F2C4 48 00 00 01 */ bl bCross__FP8bVector3PC8bVector3T1 +/* 00002538 0000F2C8 3A 01 00 98 */ addi r16, r1, 0x98 +/* 0000253C 0000F2CC EC 1C 07 F2 */ fmuls f0, f28, f31 +/* 00002540 0000F2D0 39 20 00 01 */ li r9, 0x1 +.L_00002544: +/* 00002544 0000F2D4 3A 21 00 B8 */ addi r17, r1, 0xb8 +/* 00002548 0000F2D8 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0000254C 0000F2DC 39 29 FF FF */ subi r9, r9, 0x1 +/* 00002550 0000F2E0 40 82 25 48 */ bne .L_00004A98 +/* 00002554 0000F2E4 3D 20 00 00 */ lis r9, .rodata+0x4D8@ha +/* 00002558 0000F2E8 7E C4 B3 78 */ mr r4, r22 +/* 0000255C 0000F2EC C3 E9 04 D8 */ lfs f31, .rodata+0x4D8@l(r9) +/* 00002560 0000F2F0 7E 65 9B 78 */ mr r5, r19 +/* 00002564 0000F2F4 7F 03 C3 78 */ mr r3, r24 +/* 00002568 0000F2F8 3E 80 00 00 */ lis r20, _Q25UMath7Vector4.kIdentity@ha +/* 0000256C 0000F2FC EF E0 07 F2 */ fmuls f31, f0, f31 +/* 00002570 0000F300 7F DC F3 78 */ mr r28, r30 +/* 00002574 0000F304 FC 20 F8 90 */ fmr f1, f31 +/* 00002578 0000F308 3B 34 00 00 */ addi r25, r20, _Q25UMath7Vector4.kIdentity@l +/* 0000257C 0000F30C 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +/* 00002580 0000F310 3B A0 00 00 */ li r29, 0x0 +/* 00002584 0000F314 7F 43 D3 78 */ mr r3, r26 +/* 00002588 0000F318 7E C4 B3 78 */ mr r4, r22 +/* 0000258C 0000F31C 7E 65 9B 78 */ mr r5, r19 +/* 00002590 0000F320 FC 20 F8 50 */ fneg f1, f31 +/* 00002594 0000F324 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +.L_00002598: +/* 00002598 0000F328 3B C0 00 00 */ li r30, 0x0 +/* 0000259C 0000F32C 3D 20 00 00 */ lis r9, .rodata+0x4B0@ha +/* 000025A0 0000F330 3D 60 00 00 */ lis r11, .rodata+0x4C8@ha +/* 000025A4 0000F334 C3 89 04 B0 */ lfs f28, .rodata+0x4B0@l(r9) +/* 000025A8 0000F338 3B 40 00 03 */ li r26, 0x3 +/* 000025AC 0000F33C C3 6B 04 C8 */ lfs f27, .rodata+0x4C8@l(r11) +/* 000025B0 0000F340 FF A0 E0 90 */ fmr f29, f28 +/* 000025B4 0000F344 57 A4 20 36 */ slwi r4, r29, 4 +/* 000025B8 0000F348 7F 83 E3 78 */ mr r3, r28 +/* 000025BC 0000F34C 7C 98 22 14 */ add r4, r24, r4 +/* 000025C0 0000F350 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +/* 000025C4 0000F354 3D 20 00 00 */ lis r9, .rodata+0x4DC@ha +/* 000025C8 0000F358 7E E4 BB 78 */ mr r4, r23 +/* 000025CC 0000F35C C0 29 04 DC */ lfs f1, .rodata+0x4DC@l(r9) +/* 000025D0 0000F360 7F 85 E3 78 */ mr r5, r28 +/* 000025D4 0000F364 7F 63 DB 78 */ mr r3, r27 +/* 000025D8 0000F368 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +/* 000025DC 0000F36C C0 1F 00 04 */ lfs f0, 0x4(r31) +/* 000025E0 0000F370 38 80 00 00 */ li r4, 0x0 +/* 000025E4 0000F374 C1 61 00 8C */ lfs f11, 0x8c(r1) +.L_000025E8: +/* 000025E8 0000F378 38 A0 00 20 */ li r5, 0x20 +/* 000025EC 0000F37C C1 BF 00 08 */ lfs f13, 0x8(r31) +/* 000025F0 0000F380 FC 00 00 50 */ fneg f0, f0 +.L_000025F4: +/* 000025F4 0000F384 C1 9F 00 00 */ lfs f12, 0x0(r31) +/* 000025F8 0000F388 FD 60 58 50 */ fneg f11, f11 +/* 000025FC 0000F38C 81 54 00 00 */ lwz r10, _Q25UMath7Vector4.kIdentity@l(r20) +/* 00002600 0000F390 38 61 00 D8 */ addi r3, r1, 0xd8 +.L_00002604: +/* 00002604 0000F394 81 79 00 04 */ lwz r11, 0x4(r25) +/* 00002608 0000F398 81 39 00 08 */ lwz r9, 0x8(r25) +/* 0000260C 0000F39C 80 19 00 0C */ lwz r0, 0xc(r25) +/* 00002610 0000F3A0 C1 41 00 90 */ lfs f10, 0x90(r1) +/* 00002614 0000F3A4 C1 21 00 88 */ lfs f9, 0x88(r1) +/* 00002618 0000F3A8 D0 01 00 98 */ stfs f0, 0x98(r1) +/* 0000261C 0000F3AC D1 A1 00 9C */ stfs f13, 0x9c(r1) +/* 00002620 0000F3B0 D1 81 00 A0 */ stfs f12, 0xa0(r1) +/* 00002624 0000F3B4 D1 61 00 A8 */ stfs f11, 0xa8(r1) +/* 00002628 0000F3B8 D1 41 00 AC */ stfs f10, 0xac(r1) +/* 0000262C 0000F3BC D1 21 00 B0 */ stfs f9, 0xb0(r1) +/* 00002630 0000F3C0 91 41 00 C8 */ stw r10, 0xc8(r1) +/* 00002634 0000F3C4 91 61 00 CC */ stw r11, 0xcc(r1) +/* 00002638 0000F3C8 91 21 00 D0 */ stw r9, 0xd0(r1) +/* 0000263C 0000F3CC 90 01 00 D4 */ stw r0, 0xd4(r1) +/* 00002640 0000F3D0 D3 A1 00 A4 */ stfs f29, 0xa4(r1) +/* 00002644 0000F3D4 D3 A1 00 B4 */ stfs f29, 0xb4(r1) +/* 00002648 0000F3D8 91 41 00 B8 */ stw r10, 0xb8(r1) +.L_0000264C: +/* 0000264C 0000F3DC 91 61 00 BC */ stw r11, 0xbc(r1) +/* 00002650 0000F3E0 91 21 00 C0 */ stw r9, 0xc0(r1) +/* 00002654 0000F3E4 90 01 00 C4 */ stw r0, 0xc4(r1) +/* 00002658 0000F3E8 4C C6 31 82 */ crclr cr1eq +.L_0000265C: +/* 0000265C 0000F3EC 48 00 00 01 */ bl memset +/* 00002660 0000F3F0 93 C1 00 F8 */ stw r30, 0xf8(r1) +/* 00002664 0000F3F4 7D E3 7B 78 */ mr r3, r15 +/* 00002668 0000F3F8 D3 A1 00 FC */ stfs f29, 0xfc(r1) +/* 0000266C 0000F3FC 7E 04 83 78 */ mr r4, r16 +/* 00002670 0000F400 93 C1 01 00 */ stw r30, 0x100(r1) +/* 00002674 0000F404 7E 25 8B 78 */ mr r5, r17 +/* 00002678 0000F408 D3 A1 01 04 */ stfs f29, 0x104(r1) +/* 0000267C 0000F40C 38 C0 00 02 */ li r6, 0x2 +/* 00002680 0000F410 9B C1 01 08 */ stb r30, 0x108(r1) +/* 00002684 0000F414 9B C1 01 09 */ stb r30, 0x109(r1) +/* 00002688 0000F418 B3 C1 01 0A */ sth r30, 0x10a(r1) +/* 0000268C 0000F41C 93 C1 01 0C */ stw r30, 0x10c(r1) +/* 00002690 0000F420 93 C1 01 10 */ stw r30, 0x110(r1) +/* 00002694 0000F424 93 41 01 14 */ stw r26, 0x114(r1) +/* 00002698 0000F428 48 00 00 01 */ bl CheckHitWorld__13WCollisionMgrPCQ25UMath7Vector4RQ213WCollisionMgr18WorldCollisionInfoUi +/* 0000269C 0000F42C 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000026A0 0000F430 41 82 27 3C */ beq .L_00004DDC +/* 000026A4 0000F434 C1 61 00 C8 */ lfs f11, 0xc8(r1) +/* 000026A8 0000F438 7F E3 FB 78 */ mr r3, r31 +/* 000026AC 0000F43C C1 A1 00 1C */ lfs f13, 0x1c(r1) +/* 000026B0 0000F440 7F 64 DB 78 */ mr r4, r27 +/* 000026B4 0000F444 FD 60 58 50 */ fneg f11, f11 +/* 000026B8 0000F448 C1 21 00 D0 */ lfs f9, 0xd0(r1) +/* 000026BC 0000F44C C0 01 00 18 */ lfs f0, 0x18(r1) +/* 000026C0 0000F450 ED AD 02 F2 */ fmuls f13, f13, f11 +/* 000026C4 0000F454 C1 41 00 CC */ lfs f10, 0xcc(r1) +/* 000026C8 0000F458 39 C0 00 01 */ li r14, 0x1 +/* 000026CC 0000F45C C3 C1 00 20 */ lfs f30, 0x20(r1) +/* 000026D0 0000F460 EC 00 6A 7A */ fmadds f0, f0, f9, f13 +/* 000026D4 0000F464 C1 81 00 B8 */ lfs f12, 0xb8(r1) +/* 000026D8 0000F468 EF DE 02 BA */ fmadds f30, f30, f10, f0 +/* 000026DC 0000F46C C1 A1 00 C0 */ lfs f13, 0xc0(r1) +/* 000026E0 0000F470 FF C0 F2 10 */ fabs f30, f30 +/* 000026E4 0000F474 C0 01 00 BC */ lfs f0, 0xbc(r1) +/* 000026E8 0000F478 EF DB F0 28 */ fsubs f30, f27, f30 +/* 000026EC 0000F47C D1 A1 01 18 */ stfs f13, 0x118(r1) +/* 000026F0 0000F480 FD 80 60 50 */ fneg f12, f12 +/* 000026F4 0000F484 D0 01 01 20 */ stfs f0, 0x120(r1) +/* 000026F8 0000F488 EF DE F0 2A */ fadds f30, f30, f30 +/* 000026FC 0000F48C D1 81 01 1C */ stfs f12, 0x11c(r1) +/* 00002700 0000F490 EF DE D8 2A */ fadds f30, f30, f27 +/* 00002704 0000F494 D1 21 01 28 */ stfs f9, 0x128(r1) +/* 00002708 0000F498 D1 61 01 2C */ stfs f11, 0x12c(r1) +/* 0000270C 0000F49C D1 41 01 30 */ stfs f10, 0x130(r1) +.L_00002710: +/* 00002710 0000F4A0 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 +/* 00002714 0000F4A4 FF E0 08 90 */ fmr f31, f1 +/* 00002718 0000F4A8 7F E3 FB 78 */ mr r3, r31 +/* 0000271C 0000F4AC 38 81 01 18 */ addi r4, r1, 0x118 +.L_00002720: +/* 00002720 0000F4B0 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 +/* 00002724 0000F4B4 EF FF 08 28 */ fsubs f31, f31, f1 +/* 00002728 0000F4B8 EF FF 07 B2 */ fmuls f31, f31, f30 +/* 0000272C 0000F4BC FC 1C F8 00 */ fcmpu cr0, f28, f31 +/* 00002730 0000F4C0 4C 62 0B 82 */ cror un, eq, gt +/* 00002734 0000F4C4 41 83 27 3C */ bso Init__19TrackCarCameraMover +/* 00002738 0000F4C8 FF 80 F8 90 */ fmr f28, f31 +/* 0000273C 0000F4CC 3B BD 00 01 */ addi r29, r29, 0x1 +/* 00002740 0000F4D0 2C 1D 00 01 */ cmpwi r29, 0x1 +/* 00002744 0000F4D4 40 81 25 B4 */ ble .L_00004CF8 +/* 00002748 0000F4D8 C1 B2 00 64 */ lfs f13, 0x64(r18) +/* 0000274C 0000F4DC 3D 20 00 00 */ lis r9, .rodata+0x4D0@ha +/* 00002750 0000F4E0 C1 69 04 D0 */ lfs f11, .rodata+0x4D0@l(r9) +/* 00002754 0000F4E4 3D 60 00 00 */ lis r11, .rodata+0x4B0@ha +.L_00002758: +/* 00002758 0000F4E8 ED 8D E0 2A */ fadds f12, f13, f28 +/* 0000275C 0000F4EC C1 4B 04 B0 */ lfs f10, .rodata+0x4B0@l(r11) +/* 00002760 0000F4F0 ED 6C 02 F2 */ fmuls f11, f12, f11 +.L_00002764: +/* 00002764 0000F4F4 EC 1C 58 28 */ fsubs f0, f28, f11 +/* 00002768 0000F4F8 ED AD 00 2A */ fadds f13, f13, f0 +/* 0000276C 0000F4FC D1 B2 00 64 */ stfs f13, 0x64(r18) +/* 00002770 0000F500 FC 0B 50 00 */ fcmpu cr0, f11, f10 +/* 00002774 0000F504 4C 62 03 82 */ cror un, eq, lt +/* 00002778 0000F508 41 83 27 A0 */ bso .L_00004F18 +/* 0000277C 0000F50C C0 01 00 28 */ lfs f0, 0x28(r1) +/* 00002780 0000F510 C1 A1 00 2C */ lfs f13, 0x2c(r1) +/* 00002784 0000F514 C1 81 00 30 */ lfs f12, 0x30(r1) +/* 00002788 0000F518 EC 00 02 F2 */ fmuls f0, f0, f11 +/* 0000278C 0000F51C ED AD 02 F2 */ fmuls f13, f13, f11 +.L_00002790: +/* 00002790 0000F520 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 00002794 0000F524 ED 8C 02 F2 */ fmuls f12, f12, f11 +/* 00002798 0000F528 D1 A1 00 0C */ stfs f13, 0xc(r1) +/* 0000279C 0000F52C D1 81 00 10 */ stfs f12, 0x10(r1) +/* 000027A0 0000F530 C0 01 00 08 */ lfs f0, 0x8(r1) +/* 000027A4 0000F534 C1 81 00 0C */ lfs f12, 0xc(r1) +/* 000027A8 0000F538 C1 A1 00 10 */ lfs f13, 0x10(r1) +/* 000027AC 0000F53C D1 55 00 0C */ stfs f10, 0xc(r21) +/* 000027B0 0000F540 D1 B5 00 08 */ stfs f13, 0x8(r21) +/* 000027B4 0000F544 D0 15 00 00 */ stfs f0, 0x0(r21) +/* 000027B8 0000F548 D1 95 00 04 */ stfs f12, 0x4(r21) +/* 000027BC 0000F54C 7D C3 73 78 */ mr r3, r14 +/* 000027C0 0000F550 80 01 01 B4 */ lwz r0, 0x1b4(r1) +/* 000027C4 0000F554 7C 08 03 A6 */ mtlr r0 +/* 000027C8 0000F558 B9 C1 01 40 */ lmw r14, 0x140(r1) +/* 000027CC 0000F55C E3 61 01 88 */ psq_l f27, 0x188(r1), 0, qr0 +/* 000027D0 0000F560 E3 81 01 90 */ psq_l f28, 0x190(r1), 0, qr0 +/* 000027D4 0000F564 E3 A1 01 98 */ psq_l f29, 0x198(r1), 0, qr0 +/* 000027D8 0000F568 E3 C1 01 A0 */ psq_l f30, 0x1a0(r1), 0, qr0 +/* 000027DC 0000F56C E3 E1 01 A8 */ psq_l f31, 0x1a8(r1), 0, qr0 +/* 000027E0 0000F570 38 21 01 B0 */ addi r1, r1, 0x1b0 +/* 000027E4 0000F574 4E 80 00 20 */ blr +.endfn EnforceMinGapToWalls__11CameraMoverP9WColliderP8bVector3T2P8bVector4 + +# .text:0x27E8 | size: 0x8 +# CameraMover::GetLookbackAngle +.fn GetLookbackAngle__11CameraMover, global +/* 000027E8 0000F578 38 60 00 00 */ li r3, 0x0 +/* 000027EC 0000F57C 4E 80 00 20 */ blr +.endfn GetLookbackAngle__11CameraMover + +# .text:0x27F0 | size: 0x4 +# CameraMover::ResetState +.fn ResetState__11CameraMover, global +/* 000027F0 0000F580 4E 80 00 20 */ blr +.endfn ResetState__11CameraMover + +# .text:0x27F4 | size: 0x48 +# CameraMover::GetAnchorID +.fn GetAnchorID__11CameraMover, global +/* 000027F4 0000F584 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 000027F8 0000F588 7C 08 02 A6 */ mflr r0 +/* 000027FC 0000F58C 90 01 00 0C */ stw r0, 0xc(r1) +/* 00002800 0000F590 81 23 00 08 */ lwz r9, 0x8(r3) +.L_00002804: +/* 00002804 0000F594 A8 09 00 28 */ lha r0, 0x28(r9) +/* 00002808 0000F598 81 29 00 2C */ lwz r9, 0x2c(r9) +/* 0000280C 0000F59C 7C 63 02 14 */ add r3, r3, r0 +/* 00002810 0000F5A0 7D 28 03 A6 */ mtlr r9 +/* 00002814 0000F5A4 4E 80 00 21 */ blrl +/* 00002818 0000F5A8 7C 63 1B 79 */ mr. r3, r3 +.L_0000281C: +/* 0000281C 0000F5AC 40 82 28 28 */ bne .L_00005044 +/* 00002820 0000F5B0 38 60 00 00 */ li r3, 0x0 +/* 00002824 0000F5B4 48 00 28 2C */ b .L_00005050 +/* 00002828 0000F5B8 80 63 00 8C */ lwz r3, 0x8c(r3) +/* 0000282C 0000F5BC 80 01 00 0C */ lwz r0, 0xc(r1) +/* 00002830 0000F5C0 7C 08 03 A6 */ mtlr r0 +/* 00002834 0000F5C4 38 21 00 08 */ addi r1, r1, 0x8 +/* 00002838 0000F5C8 4E 80 00 20 */ blr +.endfn GetAnchorID__11CameraMover + +# .text:0x283C | size: 0xC +# CameraMover::GetTarget +.fn GetTarget__11CameraMover, global +/* 0000283C 0000F5CC 80 63 00 1C */ lwz r3, 0x1c(r3) +/* 00002840 0000F5D0 38 63 00 60 */ addi r3, r3, 0x60 +/* 00002844 0000F5D4 4E 80 00 20 */ blr +.endfn GetTarget__11CameraMover + +# .text:0x2848 | size: 0x134 +.fn HandheldNoise__11CameraMoverP8bMatrix4fb, global +/* 00002848 0000F5D8 94 21 FF D0 */ stwu r1, -0x30(r1) +/* 0000284C 0000F5DC 7C 08 02 A6 */ mflr r0 +/* 00002850 0000F5E0 90 01 00 34 */ stw r0, 0x34(r1) +/* 00002854 0000F5E4 3D 20 00 00 */ lis r9, .rodata+0x4E0@ha +/* 00002858 0000F5E8 C0 09 04 E0 */ lfs f0, .rodata+0x4E0@l(r9) +/* 0000285C 0000F5EC FC 01 00 00 */ fcmpu cr0, f1, f0 +/* 00002860 0000F5F0 4C 62 03 82 */ cror un, eq, lt +/* 00002864 0000F5F4 41 83 29 6C */ bso .L_000051D0 +/* 00002868 0000F5F8 3D 20 00 00 */ lis r9, CameraNoiseHandheldFrequency@ha +/* 0000286C 0000F5FC 3D 60 00 00 */ lis r11, CameraNoiseHandheldAmplitude@ha +/* 00002870 0000F600 C1 49 00 00 */ lfs f10, CameraNoiseHandheldFrequency@l(r9) +/* 00002874 0000F604 39 49 00 00 */ addi r10, r9, CameraNoiseHandheldFrequency@l +/* 00002878 0000F608 C1 0A 00 04 */ lfs f8, 0x4(r10) +/* 0000287C 0000F60C 39 2B 00 00 */ addi r9, r11, CameraNoiseHandheldAmplitude@l +/* 00002880 0000F610 C1 69 00 0C */ lfs f11, 0xc(r9) +/* 00002884 0000F614 39 01 00 08 */ addi r8, r1, 0x8 +/* 00002888 0000F618 C1 A9 00 04 */ lfs f13, 0x4(r9) +/* 0000288C 0000F61C 2C 05 00 00 */ cmpwi r5, 0x0 +/* 00002890 0000F620 C0 09 00 08 */ lfs f0, 0x8(r9) +/* 00002894 0000F624 ED 6B 00 72 */ fmuls f11, f11, f1 +/* 00002898 0000F628 C1 2A 00 08 */ lfs f9, 0x8(r10) +/* 0000289C 0000F62C ED AD 00 72 */ fmuls f13, f13, f1 +.L_000028A0: +/* 000028A0 0000F630 D1 01 00 0C */ stfs f8, 0xc(r1) +/* 000028A4 0000F634 EC 00 00 72 */ fmuls f0, f0, f1 +/* 000028A8 0000F638 D1 41 00 08 */ stfs f10, 0x8(r1) +/* 000028AC 0000F63C C1 8B 00 00 */ lfs f12, CameraNoiseHandheldAmplitude@l(r11) +/* 000028B0 0000F640 C1 4A 00 0C */ lfs f10, 0xc(r10) +/* 000028B4 0000F644 D1 28 00 08 */ stfs f9, 0x8(r8) +/* 000028B8 0000F648 ED 8C 00 72 */ fmuls f12, f12, f1 +/* 000028BC 0000F64C D1 A1 00 1C */ stfs f13, 0x1c(r1) +.L_000028C0: +/* 000028C0 0000F650 D0 01 00 20 */ stfs f0, 0x20(r1) +/* 000028C4 0000F654 D1 61 00 24 */ stfs f11, 0x24(r1) +/* 000028C8 0000F658 D1 81 00 18 */ stfs f12, 0x18(r1) +/* 000028CC 0000F65C D1 41 00 14 */ stfs f10, 0x14(r1) +/* 000028D0 0000F660 C0 01 00 08 */ lfs f0, 0x8(r1) +/* 000028D4 0000F664 C1 88 00 08 */ lfs f12, 0x8(r8) +/* 000028D8 0000F668 C1 A1 00 0C */ lfs f13, 0xc(r1) +/* 000028DC 0000F66C 81 23 00 1C */ lwz r9, 0x1c(r3) +/* 000028E0 0000F670 D1 49 00 7C */ stfs f10, 0x7c(r9) +/* 000028E4 0000F674 D0 09 00 70 */ stfs f0, 0x70(r9) +/* 000028E8 0000F678 D1 A9 00 74 */ stfs f13, 0x74(r9) +.L_000028EC: +/* 000028EC 0000F67C D1 89 00 78 */ stfs f12, 0x78(r9) +/* 000028F0 0000F680 81 63 00 1C */ lwz r11, 0x1c(r3) +/* 000028F4 0000F684 C1 A1 00 18 */ lfs f13, 0x18(r1) +/* 000028F8 0000F688 C1 81 00 1C */ lfs f12, 0x1c(r1) +/* 000028FC 0000F68C C1 61 00 20 */ lfs f11, 0x20(r1) +/* 00002900 0000F690 C0 01 00 24 */ lfs f0, 0x24(r1) +/* 00002904 0000F694 D1 AB 00 80 */ stfs f13, 0x80(r11) +/* 00002908 0000F698 D0 0B 00 8C */ stfs f0, 0x8c(r11) +/* 0000290C 0000F69C D1 8B 00 84 */ stfs f12, 0x84(r11) +/* 00002910 0000F6A0 D1 6B 00 88 */ stfs f11, 0x88(r11) +/* 00002914 0000F6A4 41 82 29 24 */ beq .L_00005238 +.L_00002918: +/* 00002918 0000F6A8 3D 20 00 00 */ lis r9, WorldTimer@ha +/* 0000291C 0000F6AC 80 09 00 00 */ lwz r0, WorldTimer@l(r9) +/* 00002920 0000F6B0 48 00 29 2C */ b .L_0000524C +.L_00002924: +/* 00002924 0000F6B4 3D 20 00 00 */ lis r9, RealTimer@ha +.L_00002928: +/* 00002928 0000F6B8 80 09 00 00 */ lwz r0, RealTimer@l(r9) +/* 0000292C 0000F6BC 3D 00 43 30 */ lis r8, 0x4330 +/* 00002930 0000F6C0 3D 20 00 00 */ lis r9, .rodata+0x4E8@ha +/* 00002934 0000F6C4 3D 40 00 00 */ lis r10, .rodata+0x4F0@ha +/* 00002938 0000F6C8 6C 00 80 00 */ xoris r0, r0, 0x8000 +/* 0000293C 0000F6CC C9 A9 04 E8 */ lfd f13, .rodata+0x4E8@l(r9) +.L_00002940: +/* 00002940 0000F6D0 90 01 00 2C */ stw r0, 0x2c(r1) +/* 00002944 0000F6D4 C1 8A 04 F0 */ lfs f12, .rodata+0x4F0@l(r10) +/* 00002948 0000F6D8 91 01 00 28 */ stw r8, 0x28(r1) +/* 0000294C 0000F6DC C8 01 00 28 */ lfd f0, 0x28(r1) +/* 00002950 0000F6E0 FC 00 68 28 */ fsub f0, f0, f13 +/* 00002954 0000F6E4 FC 00 00 18 */ frsp f0, f0 +.L_00002958: +/* 00002958 0000F6E8 EC 20 03 32 */ fmuls f1, f0, f12 +/* 0000295C 0000F6EC 3D 20 00 00 */ lis r9, .rodata+0x4E4@ha +.L_00002960: +/* 00002960 0000F6F0 80 63 00 1C */ lwz r3, 0x1c(r3) +/* 00002964 0000F6F4 C0 49 04 E4 */ lfs f2, .rodata+0x4E4@l(r9) +/* 00002968 0000F6F8 48 00 0A 61 */ bl .L_000033C8 +/* 0000296C 0000F6FC 80 01 00 34 */ lwz r0, 0x34(r1) +.L_00002970: +/* 00002970 0000F700 7C 08 03 A6 */ mtlr r0 +/* 00002974 0000F704 38 21 00 30 */ addi r1, r1, 0x30 +.L_00002978: +/* 00002978 0000F708 4E 80 00 20 */ blr +.endfn HandheldNoise__11CameraMoverP8bMatrix4fb + +# .text:0x297C | size: 0x2E8 +.fn ChopperNoise__11CameraMoverP8bMatrix4fb, global +/* 0000297C 0000F70C 94 21 FF 30 */ stwu r1, -0xd0(r1) +/* 00002980 0000F710 7C 08 02 A6 */ mflr r0 +/* 00002984 0000F714 7D 80 00 26 */ mfcr r12 +.L_00002988: +/* 00002988 0000F718 F3 21 00 98 */ psq_st f25, 0x98(r1), 0, qr0 +.L_0000298C: +/* 0000298C 0000F71C F3 41 00 A0 */ psq_st f26, 0xa0(r1), 0, qr0 +/* 00002990 0000F720 F3 61 00 A8 */ psq_st f27, 0xa8(r1), 0, qr0 +/* 00002994 0000F724 F3 81 00 B0 */ psq_st f28, 0xb0(r1), 0, qr0 +/* 00002998 0000F728 F3 A1 00 B8 */ psq_st f29, 0xb8(r1), 0, qr0 +/* 0000299C 0000F72C F3 C1 00 C0 */ psq_st f30, 0xc0(r1), 0, qr0 +/* 000029A0 0000F730 F3 E1 00 C8 */ psq_st f31, 0xc8(r1), 0, qr0 +/* 000029A4 0000F734 BD E1 00 54 */ stmw r15, 0x54(r1) +/* 000029A8 0000F738 90 01 00 D4 */ stw r0, 0xd4(r1) +/* 000029AC 0000F73C 91 81 00 50 */ stw r12, 0x50(r1) +/* 000029B0 0000F740 3D 20 00 00 */ lis r9, .rodata+0x4F4@ha +/* 000029B4 0000F744 FF C0 08 90 */ fmr f30, f1 +/* 000029B8 0000F748 C0 09 04 F4 */ lfs f0, .rodata+0x4F4@l(r9) +.L_000029BC: +/* 000029BC 0000F74C 7C 7D 1B 78 */ mr r29, r3 +/* 000029C0 0000F750 7C 94 23 78 */ mr r20, r4 +/* 000029C4 0000F754 3D E0 00 00 */ lis r15, .rodata+0x4F4@ha +.L_000029C8: +/* 000029C8 0000F758 FC 1E 00 00 */ fcmpu cr0, f30, f0 +/* 000029CC 0000F75C 4C 62 03 82 */ cror un, eq, lt +/* 000029D0 0000F760 41 83 2C 2C */ bso .L_000055FC +.L_000029D4: +/* 000029D4 0000F764 3D 20 00 00 */ lis r9, .rodata+0x4F8@ha +.L_000029D8: +/* 000029D8 0000F768 3D 60 00 00 */ lis r11, .rodata+0x504@ha +/* 000029DC 0000F76C C3 29 04 F8 */ lfs f25, .rodata+0x4F8@l(r9) +.L_000029E0: +/* 000029E0 0000F770 3D 00 00 00 */ lis r8, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@ha +/* 000029E4 0000F774 C3 4B 05 04 */ lfs f26, .rodata+0x504@l(r11) +/* 000029E8 0000F778 3E C0 00 00 */ lis r22, .rodata+0x500@ha +.L_000029EC: +/* 000029EC 0000F77C 3D 40 00 00 */ lis r10, .rodata+0x508@ha +/* 000029F0 0000F780 3D 20 00 00 */ lis r9, .rodata+0x510@ha +/* 000029F4 0000F784 3D 60 00 00 */ lis r11, .rodata+0x518@ha +.L_000029F8: +/* 000029F8 0000F788 3E E0 00 00 */ lis r23, CameraNoiseChopperFrequency@ha +/* 000029FC 0000F78C 3F 00 00 00 */ lis r24, CameraNoiseChopperAmplitude@ha +/* 00002A00 0000F790 C3 6A 05 08 */ lfs f27, .rodata+0x508@l(r10) +.L_00002A04: +/* 00002A04 0000F794 CB E9 05 10 */ lfd f31, .rodata+0x510@l(r9) +.L_00002A08: +/* 00002A08 0000F798 3B 28 00 00 */ addi r25, r8, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@l +/* 00002A0C 0000F79C C3 AB 05 18 */ lfs f29, .rodata+0x518@l(r11) +/* 00002A10 0000F7A0 3B 77 00 00 */ addi r27, r23, CameraNoiseChopperFrequency@l +/* 00002A14 0000F7A4 C3 96 05 00 */ lfs f28, .rodata+0x500@l(r22) +/* 00002A18 0000F7A8 3B 98 00 00 */ addi r28, r24, CameraNoiseChopperAmplitude@l +/* 00002A1C 0000F7AC 83 C8 00 00 */ lwz r30, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@l(r8) +.L_00002A20: +/* 00002A20 0000F7B0 2E 05 00 00 */ cmpwi cr4, r5, 0x0 +/* 00002A24 0000F7B4 3E 00 00 00 */ lis r16, _12VehicleClass.CHOPPER@ha +/* 00002A28 0000F7B8 3A A1 00 08 */ addi r21, r1, 0x8 +/* 00002A2C 0000F7BC 3E 20 00 00 */ lis r17, .rodata+0x4FC@ha +/* 00002A30 0000F7C0 3E 40 00 00 */ lis r18, WorldTimer@ha +/* 00002A34 0000F7C4 3F 40 43 30 */ lis r26, 0x4330 +/* 00002A38 0000F7C8 3E 60 00 00 */ lis r19, RealTimer@ha +/* 00002A3C 0000F7CC 80 19 00 08 */ lwz r0, 0x8(r25) +/* 00002A40 0000F7D0 81 39 00 00 */ lwz r9, 0x0(r25) +/* 00002A44 0000F7D4 54 00 10 3A */ slwi r0, r0, 2 +/* 00002A48 0000F7D8 7D 29 02 14 */ add r9, r9, r0 +/* 00002A4C 0000F7DC 7C 1E 48 00 */ cmpw r30, r9 +.L_00002A50: +/* 00002A50 0000F7E0 41 82 2C 2C */ beq .L_0000567C +.L_00002A54: +/* 00002A54 0000F7E4 83 FE 00 00 */ lwz r31, 0x0(r30) +/* 00002A58 0000F7E8 2C 1F 00 00 */ cmpwi r31, 0x0 +.L_00002A5C: +/* 00002A5C 0000F7EC 41 82 2C 24 */ beq .L_00005680 +/* 00002A60 0000F7F0 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 00002A64 0000F7F4 80 09 00 94 */ lwz r0, 0x94(r9) +/* 00002A68 0000F7F8 A8 69 00 90 */ lha r3, 0x90(r9) +/* 00002A6C 0000F7FC 7C 08 03 A6 */ mtlr r0 +/* 00002A70 0000F800 7C 7F 1A 14 */ add r3, r31, r3 +/* 00002A74 0000F804 4E 80 00 21 */ blrl +/* 00002A78 0000F808 81 23 00 00 */ lwz r9, 0x0(r3) +/* 00002A7C 0000F80C 80 10 00 00 */ lwz r0, _12VehicleClass.CHOPPER@l(r16) +/* 00002A80 0000F810 7C 09 00 00 */ cmpw r9, r0 +/* 00002A84 0000F814 40 82 2C 24 */ bne .L_000056A8 +.L_00002A88: +/* 00002A88 0000F818 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 00002A8C 0000F81C A8 69 00 20 */ lha r3, 0x20(r9) +/* 00002A90 0000F820 80 09 00 24 */ lwz r0, 0x24(r9) +/* 00002A94 0000F824 7C 7F 1A 14 */ add r3, r31, r3 +/* 00002A98 0000F828 7C 08 03 A6 */ mtlr r0 +/* 00002A9C 0000F82C 4E 80 00 21 */ blrl +/* 00002AA0 0000F830 C0 03 00 00 */ lfs f0, 0x0(r3) +/* 00002AA4 0000F834 3D 40 00 00 */ lis r10, .rodata+0x500@ha +/* 00002AA8 0000F838 C1 A3 00 08 */ lfs f13, 0x8(r3) +/* 00002AAC 0000F83C C1 83 00 04 */ lfs f12, 0x4(r3) +.L_00002AB0: +/* 00002AB0 0000F840 FC 00 00 50 */ fneg f0, f0 +/* 00002AB4 0000F844 D1 A1 00 08 */ stfs f13, 0x8(r1) +/* 00002AB8 0000F848 D0 01 00 0C */ stfs f0, 0xc(r1) +/* 00002ABC 0000F84C D1 95 00 08 */ stfs f12, 0x8(r21) +/* 00002AC0 0000F850 C1 2F 04 F4 */ lfs f9, .rodata+0x4F4@l(r15) +/* 00002AC4 0000F854 81 3D 00 1C */ lwz r9, 0x1c(r29) +/* 00002AC8 0000F858 C0 01 00 0C */ lfs f0, 0xc(r1) +/* 00002ACC 0000F85C C1 89 00 44 */ lfs f12, 0x44(r9) +/* 00002AD0 0000F860 C1 49 00 40 */ lfs f10, 0x40(r9) +/* 00002AD4 0000F864 C1 A1 00 08 */ lfs f13, 0x8(r1) +.L_00002AD8: +/* 00002AD8 0000F868 EC 00 60 28 */ fsubs f0, f0, f12 +/* 00002ADC 0000F86C ED 60 00 32 */ fmuls f11, f0, f0 +/* 00002AE0 0000F870 C0 F1 04 FC */ lfs f7, .rodata+0x4FC@l(r17) +/* 00002AE4 0000F874 ED AD 50 28 */ fsubs f13, f13, f10 +/* 00002AE8 0000F878 C1 16 05 00 */ lfs f8, .rodata+0x500@l(r22) +/* 00002AEC 0000F87C ED 6D 5B 7A */ fmadds f11, f13, f13, f11 +/* 00002AF0 0000F880 D0 01 00 1C */ stfs f0, 0x1c(r1) +/* 00002AF4 0000F884 D1 21 00 20 */ stfs f9, 0x20(r1) +/* 00002AF8 0000F888 FC 0B C8 00 */ fcmpu cr0, f11, f25 +/* 00002AFC 0000F88C D1 A1 00 18 */ stfs f13, 0x18(r1) +/* 00002B00 0000F890 4C 62 03 82 */ cror un, eq, lt +/* 00002B04 0000F894 41 83 2B 34 */ bso .L_00005638 +.L_00002B08: +/* 00002B08 0000F898 FC 00 58 34 */ frsqrte f0, f11 +.L_00002B0C: +/* 00002B0C 0000F89C ED A0 00 32 */ fmuls f13, f0, f0 +/* 00002B10 0000F8A0 ED 80 01 F2 */ fmuls f12, f0, f7 +/* 00002B14 0000F8A4 ED AB 43 7C */ fnmsubs f13, f11, f13, f8 +/* 00002B18 0000F8A8 EC 0D 03 3A */ fmadds f0, f13, f12, f0 +/* 00002B1C 0000F8AC ED A0 00 32 */ fmuls f13, f0, f0 +/* 00002B20 0000F8B0 ED 80 01 F2 */ fmuls f12, f0, f7 +.L_00002B24: +/* 00002B24 0000F8B4 ED AB 43 7C */ fnmsubs f13, f11, f13, f8 +/* 00002B28 0000F8B8 EC 0D 03 3A */ fmadds f0, f13, f12, f0 +/* 00002B2C 0000F8BC EC 00 02 F2 */ fmuls f0, f0, f11 +/* 00002B30 0000F8C0 48 00 2B 38 */ b .L_00005668 +/* 00002B34 0000F8C4 FC 00 48 90 */ fmr f0, f9 +/* 00002B38 0000F8C8 FC 00 D0 00 */ fcmpu cr0, f0, f26 +/* 00002B3C 0000F8CC 4C 62 0B 82 */ cror un, eq, gt +/* 00002B40 0000F8D0 41 83 2C 24 */ bso .L_00005764 +/* 00002B44 0000F8D4 EC 00 06 F2 */ fmuls f0, f0, f27 +/* 00002B48 0000F8D8 C0 D7 00 00 */ lfs f6, CameraNoiseChopperFrequency@l(r23) +/* 00002B4C 0000F8DC C1 1B 00 04 */ lfs f8, 0x4(r27) +/* 00002B50 0000F8E0 EC 1C 00 28 */ fsubs f0, f28, f0 +/* 00002B54 0000F8E4 C0 FB 00 08 */ lfs f7, 0x8(r27) +/* 00002B58 0000F8E8 EC 1E 00 32 */ fmuls f0, f30, f0 +/* 00002B5C 0000F8EC C1 3B 00 0C */ lfs f9, 0xc(r27) +/* 00002B60 0000F8F0 EC C6 00 32 */ fmuls f6, f6, f0 +/* 00002B64 0000F8F4 C1 78 00 00 */ lfs f11, CameraNoiseChopperAmplitude@l(r24) +/* 00002B68 0000F8F8 ED 08 00 32 */ fmuls f8, f8, f0 +/* 00002B6C 0000F8FC C1 5C 00 04 */ lfs f10, 0x4(r28) +/* 00002B70 0000F900 EC E7 00 32 */ fmuls f7, f7, f0 +/* 00002B74 0000F904 C1 9C 00 08 */ lfs f12, 0x8(r28) +/* 00002B78 0000F908 ED 29 00 32 */ fmuls f9, f9, f0 +/* 00002B7C 0000F90C C1 BC 00 0C */ lfs f13, 0xc(r28) +/* 00002B80 0000F910 ED 6B 00 32 */ fmuls f11, f11, f0 +/* 00002B84 0000F914 81 7D 00 1C */ lwz r11, 0x1c(r29) +/* 00002B88 0000F918 ED 8C 00 32 */ fmuls f12, f12, f0 +/* 00002B8C 0000F91C ED AD 00 32 */ fmuls f13, f13, f0 +/* 00002B90 0000F920 D1 61 00 38 */ stfs f11, 0x38(r1) +/* 00002B94 0000F924 ED 4A 00 32 */ fmuls f10, f10, f0 +/* 00002B98 0000F928 D1 81 00 40 */ stfs f12, 0x40(r1) +/* 00002B9C 0000F92C D1 A1 00 44 */ stfs f13, 0x44(r1) +/* 00002BA0 0000F930 D1 41 00 3C */ stfs f10, 0x3c(r1) +/* 00002BA4 0000F934 D0 C1 00 28 */ stfs f6, 0x28(r1) +/* 00002BA8 0000F938 D1 01 00 2C */ stfs f8, 0x2c(r1) +/* 00002BAC 0000F93C D0 E1 00 30 */ stfs f7, 0x30(r1) +/* 00002BB0 0000F940 D1 21 00 34 */ stfs f9, 0x34(r1) +/* 00002BB4 0000F944 D1 2B 00 7C */ stfs f9, 0x7c(r11) +/* 00002BB8 0000F948 D0 CB 00 70 */ stfs f6, 0x70(r11) +/* 00002BBC 0000F94C D1 0B 00 74 */ stfs f8, 0x74(r11) +/* 00002BC0 0000F950 D0 EB 00 78 */ stfs f7, 0x78(r11) +/* 00002BC4 0000F954 81 3D 00 1C */ lwz r9, 0x1c(r29) +/* 00002BC8 0000F958 C1 A1 00 38 */ lfs f13, 0x38(r1) +/* 00002BCC 0000F95C C1 81 00 3C */ lfs f12, 0x3c(r1) +/* 00002BD0 0000F960 C1 61 00 40 */ lfs f11, 0x40(r1) +/* 00002BD4 0000F964 C0 01 00 44 */ lfs f0, 0x44(r1) +/* 00002BD8 0000F968 D1 A9 00 80 */ stfs f13, 0x80(r9) +.L_00002BDC: +/* 00002BDC 0000F96C D0 09 00 8C */ stfs f0, 0x8c(r9) +/* 00002BE0 0000F970 D1 89 00 84 */ stfs f12, 0x84(r9) +/* 00002BE4 0000F974 D1 69 00 88 */ stfs f11, 0x88(r9) +/* 00002BE8 0000F978 41 92 2B F4 */ beq cr4, .L_000057DC +/* 00002BEC 0000F97C 80 12 00 00 */ lwz r0, WorldTimer@l(r18) +/* 00002BF0 0000F980 48 00 2B F8 */ b .L_000057E8 +.L_00002BF4: +/* 00002BF4 0000F984 80 13 00 00 */ lwz r0, RealTimer@l(r19) +/* 00002BF8 0000F988 6C 00 80 00 */ xoris r0, r0, 0x8000 +/* 00002BFC 0000F98C 90 01 00 4C */ stw r0, 0x4c(r1) +/* 00002C00 0000F990 93 41 00 48 */ stw r26, 0x48(r1) +/* 00002C04 0000F994 C8 01 00 48 */ lfd f0, 0x48(r1) +/* 00002C08 0000F998 FC 00 F8 28 */ fsub f0, f0, f31 +/* 00002C0C 0000F99C FC 00 00 18 */ frsp f0, f0 +/* 00002C10 0000F9A0 EC 20 07 72 */ fmuls f1, f0, f29 +/* 00002C14 0000F9A4 C0 4A 05 00 */ lfs f2, .rodata+0x500@l(r10) +/* 00002C18 0000F9A8 7E 84 A3 78 */ mr r4, r20 +/* 00002C1C 0000F9AC 80 7D 00 1C */ lwz r3, 0x1c(r29) +/* 00002C20 0000F9B0 48 00 0A 61 */ bl .L_00003680 +/* 00002C24 0000F9B4 3B DE 00 04 */ addi r30, r30, 0x4 +/* 00002C28 0000F9B8 48 00 2A 3C */ b .L_00005664 +/* 00002C2C 0000F9BC 80 01 00 D4 */ lwz r0, 0xd4(r1) +/* 00002C30 0000F9C0 81 81 00 50 */ lwz r12, 0x50(r1) +/* 00002C34 0000F9C4 7C 08 03 A6 */ mtlr r0 +/* 00002C38 0000F9C8 B9 E1 00 54 */ lmw r15, 0x54(r1) +/* 00002C3C 0000F9CC E3 21 00 98 */ psq_l f25, 0x98(r1), 0, qr0 +/* 00002C40 0000F9D0 E3 41 00 A0 */ psq_l f26, 0xa0(r1), 0, qr0 +/* 00002C44 0000F9D4 E3 61 00 A8 */ psq_l f27, 0xa8(r1), 0, qr0 +/* 00002C48 0000F9D8 E3 81 00 B0 */ psq_l f28, 0xb0(r1), 0, qr0 +.L_00002C4C: +/* 00002C4C 0000F9DC E3 A1 00 B8 */ psq_l f29, 0xb8(r1), 0, qr0 +/* 00002C50 0000F9E0 E3 C1 00 C0 */ psq_l f30, 0xc0(r1), 0, qr0 +/* 00002C54 0000F9E4 E3 E1 00 C8 */ psq_l f31, 0xc8(r1), 0, qr0 +/* 00002C58 0000F9E8 7D 80 81 20 */ mtcrf 8, r12 +/* 00002C5C 0000F9EC 38 21 00 D0 */ addi r1, r1, 0xd0 +/* 00002C60 0000F9F0 4E 80 00 20 */ blr +.endfn ChopperNoise__11CameraMoverP8bMatrix4fb + +# .text:0x2C64 | size: 0x4AC +.fn TerrainVelocityNoise__11CameraMoverP8bMatrix4P12CameraAnchorff, global +/* 00002C64 0000F9F4 94 21 FF 50 */ stwu r1, -0xb0(r1) +/* 00002C68 0000F9F8 7C 08 02 A6 */ mflr r0 +/* 00002C6C 0000F9FC F3 41 00 80 */ psq_st f26, 0x80(r1), 0, qr0 +/* 00002C70 0000FA00 F3 61 00 88 */ psq_st f27, 0x88(r1), 0, qr0 +/* 00002C74 0000FA04 F3 81 00 90 */ psq_st f28, 0x90(r1), 0, qr0 +/* 00002C78 0000FA08 F3 A1 00 98 */ psq_st f29, 0x98(r1), 0, qr0 +/* 00002C7C 0000FA0C F3 C1 00 A0 */ psq_st f30, 0xa0(r1), 0, qr0 +/* 00002C80 0000FA10 F3 E1 00 A8 */ psq_st f31, 0xa8(r1), 0, qr0 +/* 00002C84 0000FA14 BF 81 00 70 */ stmw r28, 0x70(r1) +/* 00002C88 0000FA18 90 01 00 B4 */ stw r0, 0xb4(r1) +/* 00002C8C 0000FA1C 7C 7D 1B 78 */ mr r29, r3 +/* 00002C90 0000FA20 7C 9C 23 78 */ mr r28, r4 +/* 00002C94 0000FA24 FF E0 08 90 */ fmr f31, f1 +/* 00002C98 0000FA28 7C BF 2B 79 */ mr. r31, r5 +/* 00002C9C 0000FA2C FF C0 10 90 */ fmr f30, f2 +/* 00002CA0 0000FA30 41 82 30 E4 */ beq .L_00005D84 +/* 00002CA4 0000FA34 C0 1F 00 10 */ lfs f0, 0x10(r31) +/* 00002CA8 0000FA38 3B DF 00 90 */ addi r30, r31, 0x90 +/* 00002CAC 0000FA3C 3C 80 F0 C9 */ lis r4, 0xf0c9 +/* 00002CB0 0000FA40 7F C3 F3 78 */ mr r3, r30 +.L_00002CB4: +/* 00002CB4 0000FA44 EF 9F 00 32 */ fmuls f28, f31, f0 +/* 00002CB8 0000FA48 60 84 E4 98 */ ori r4, r4, 0xe498 +/* 00002CBC 0000FA4C 38 A0 00 00 */ li r5, 0x0 +/* 00002CC0 0000FA50 48 00 00 01 */ bl GetAttributePointer__CQ26Attrib8InstanceUiUi +/* 00002CC4 0000FA54 7C 63 1B 79 */ mr. r3, r3 +/* 00002CC8 0000FA58 40 82 2C D4 */ bne .L_0000599C +.L_00002CCC: +/* 00002CCC 0000FA5C 38 60 00 04 */ li r3, 0x4 +/* 00002CD0 0000FA60 48 00 00 01 */ bl DefaultDataArea__6AttribUi +/* 00002CD4 0000FA64 C0 03 00 00 */ lfs f0, 0x0(r3) +/* 00002CD8 0000FA68 3C 80 F0 C9 */ lis r4, 0xf0c9 +.L_00002CDC: +/* 00002CDC 0000FA6C 7F C3 F3 78 */ mr r3, r30 +/* 00002CE0 0000FA70 60 84 E4 98 */ ori r4, r4, 0xe498 +/* 00002CE4 0000FA74 EF 7E 00 32 */ fmuls f27, f30, f0 +/* 00002CE8 0000FA78 38 A0 00 01 */ li r5, 0x1 +/* 00002CEC 0000FA7C 48 00 00 01 */ bl GetAttributePointer__CQ26Attrib8InstanceUiUi +/* 00002CF0 0000FA80 7C 63 1B 79 */ mr. r3, r3 +/* 00002CF4 0000FA84 40 82 2D 00 */ bne .L_000059F4 +/* 00002CF8 0000FA88 38 60 00 04 */ li r3, 0x4 +/* 00002CFC 0000FA8C 48 00 00 01 */ bl DefaultDataArea__6AttribUi +/* 00002D00 0000FA90 C1 BF 00 3C */ lfs f13, 0x3c(r31) +/* 00002D04 0000FA94 3D 00 00 00 */ lis r8, CameraNoiseSpeedFrequency@ha +/* 00002D08 0000FA98 C1 9F 00 40 */ lfs f12, 0x40(r31) +/* 00002D0C 0000FA9C 39 28 00 00 */ addi r9, r8, CameraNoiseSpeedFrequency@l +/* 00002D10 0000FAA0 C0 1F 00 38 */ lfs f0, 0x38(r31) +/* 00002D14 0000FAA4 3C C0 00 00 */ lis r6, CameraNoiseSpeedAmplitude@ha +/* 00002D18 0000FAA8 C3 43 00 00 */ lfs f26, 0x0(r3) +.L_00002D1C: +/* 00002D1C 0000FAAC 3C A0 00 00 */ lis r5, CameraNoiseTerrainFrequency@ha +/* 00002D20 0000FAB0 D1 A1 00 0C */ stfs f13, 0xc(r1) +/* 00002D24 0000FAB4 39 66 00 00 */ addi r11, r6, CameraNoiseSpeedAmplitude@l +/* 00002D28 0000FAB8 D1 81 00 10 */ stfs f12, 0x10(r1) +/* 00002D2C 0000FABC 39 45 00 00 */ addi r10, r5, CameraNoiseTerrainFrequency@l +/* 00002D30 0000FAC0 D0 01 00 08 */ stfs f0, 0x8(r1) +.L_00002D34: +/* 00002D34 0000FAC4 3C 80 00 00 */ lis r4, CameraNoiseTerrainAmplitude@ha +/* 00002D38 0000FAC8 C0 09 00 04 */ lfs f0, 0x4(r9) +/* 00002D3C 0000FACC 38 E4 00 00 */ addi r7, r4, CameraNoiseTerrainAmplitude@l +/* 00002D40 0000FAD0 C0 FF 00 58 */ lfs f7, 0x58(r31) +/* 00002D44 0000FAD4 C1 09 00 0C */ lfs f8, 0xc(r9) +/* 00002D48 0000FAD8 C1 A9 00 08 */ lfs f13, 0x8(r9) +/* 00002D4C 0000FADC C1 8B 00 04 */ lfs f12, 0x4(r11) +/* 00002D50 0000FAE0 C1 6B 00 08 */ lfs f11, 0x8(r11) +/* 00002D54 0000FAE4 C0 BF 00 48 */ lfs f5, 0x48(r31) +/* 00002D58 0000FAE8 C0 9F 00 68 */ lfs f4, 0x68(r31) +/* 00002D5C 0000FAEC C0 4A 00 0C */ lfs f2, 0xc(r10) +/* 00002D60 0000FAF0 C0 CB 00 0C */ lfs f6, 0xc(r11) +/* 00002D64 0000FAF4 C1 48 00 00 */ lfs f10, CameraNoiseSpeedFrequency@l(r8) +/* 00002D68 0000FAF8 D0 01 00 1C */ stfs f0, 0x1c(r1) +/* 00002D6C 0000FAFC 3D 00 00 00 */ lis r8, .rodata+0x51C@ha +/* 00002D70 0000FB00 C1 26 00 00 */ lfs f9, CameraNoiseSpeedAmplitude@l(r6) +/* 00002D74 0000FB04 D1 A1 00 20 */ stfs f13, 0x20(r1) +/* 00002D78 0000FB08 C0 01 00 0C */ lfs f0, 0xc(r1) +/* 00002D7C 0000FB0C D1 21 00 28 */ stfs f9, 0x28(r1) +/* 00002D80 0000FB10 D1 81 00 2C */ stfs f12, 0x2c(r1) +/* 00002D84 0000FB14 EC 00 01 F2 */ fmuls f0, f0, f7 +/* 00002D88 0000FB18 D1 61 00 30 */ stfs f11, 0x30(r1) +/* 00002D8C 0000FB1C D1 41 00 18 */ stfs f10, 0x18(r1) +/* 00002D90 0000FB20 D1 01 00 24 */ stfs f8, 0x24(r1) +/* 00002D94 0000FB24 D0 C1 00 34 */ stfs f6, 0x34(r1) +/* 00002D98 0000FB28 C1 A1 00 08 */ lfs f13, 0x8(r1) +/* 00002D9C 0000FB2C C1 81 00 10 */ lfs f12, 0x10(r1) +/* 00002DA0 0000FB30 C0 65 00 00 */ lfs f3, CameraNoiseTerrainFrequency@l(r5) +/* 00002DA4 0000FB34 ED AD 01 7A */ fmadds f13, f13, f5, f0 +/* 00002DA8 0000FB38 C1 0A 00 04 */ lfs f8, 0x4(r10) +/* 00002DAC 0000FB3C EC EC 69 3A */ fmadds f7, f12, f4, f13 +/* 00002DB0 0000FB40 C1 4A 00 08 */ lfs f10, 0x8(r10) +/* 00002DB4 0000FB44 D0 61 00 38 */ stfs f3, 0x38(r1) +/* 00002DB8 0000FB48 C1 27 00 0C */ lfs f9, 0xc(r7) +/* 00002DBC 0000FB4C C1 A7 00 04 */ lfs f13, 0x4(r7) +/* 00002DC0 0000FB50 C1 87 00 08 */ lfs f12, 0x8(r7) +/* 00002DC4 0000FB54 C1 64 00 00 */ lfs f11, CameraNoiseTerrainAmplitude@l(r4) +/* 00002DC8 0000FB58 C0 08 05 1C */ lfs f0, .rodata+0x51C@l(r8) +/* 00002DCC 0000FB5C D1 01 00 3C */ stfs f8, 0x3c(r1) +/* 00002DD0 0000FB60 FC 1C 00 00 */ fcmpu cr0, f28, f0 +/* 00002DD4 0000FB64 D1 41 00 40 */ stfs f10, 0x40(r1) +/* 00002DD8 0000FB68 D0 41 00 44 */ stfs f2, 0x44(r1) +/* 00002DDC 0000FB6C D1 61 00 48 */ stfs f11, 0x48(r1) +/* 00002DE0 0000FB70 D1 A1 00 4C */ stfs f13, 0x4c(r1) +/* 00002DE4 0000FB74 D1 81 00 50 */ stfs f12, 0x50(r1) +/* 00002DE8 0000FB78 D1 21 00 54 */ stfs f9, 0x54(r1) +/* 00002DEC 0000FB7C 4C 62 03 82 */ cror un, eq, lt +/* 00002DF0 0000FB80 41 83 2E 80 */ bso .L_00005C70 +.L_00002DF4: +/* 00002DF4 0000FB84 3D 20 00 00 */ lis r9, .rodata+0x520@ha +/* 00002DF8 0000FB88 C0 09 05 20 */ lfs f0, .rodata+0x520@l(r9) +/* 00002DFC 0000FB8C 39 20 00 00 */ li r9, 0x0 +/* 00002E00 0000FB90 EC 1C 00 32 */ fmuls f0, f28, f0 +/* 00002E04 0000FB94 FD A0 00 1E */ fctiwz f13, f0 +/* 00002E08 0000FB98 D9 A1 00 68 */ stfd f13, 0x68(r1) +.L_00002E0C: +/* 00002E0C 0000FB9C 80 01 00 6C */ lwz r0, 0x6c(r1) +/* 00002E10 0000FBA0 7C 09 00 00 */ cmpw r9, r0 +/* 00002E14 0000FBA4 40 80 2E 1C */ bge .L_00005C30 +/* 00002E18 0000FBA8 7C 09 03 78 */ mr r9, r0 +/* 00002E1C 0000FBAC 20 09 00 04 */ subfic r0, r9, 0x4 +/* 00002E20 0000FBB0 7D 2B 4B 78 */ mr r11, r9 +/* 00002E24 0000FBB4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00002E28 0000FBB8 40 80 2E 30 */ bge .L_00005C58 +/* 00002E2C 0000FBBC 39 60 00 04 */ li r11, 0x4 +/* 00002E30 0000FBC0 3D 20 00 00 */ lis r9, CameraNoiseSpeedData@ha +/* 00002E34 0000FBC4 55 60 20 36 */ slwi r0, r11, 4 +/* 00002E38 0000FBC8 39 29 00 00 */ addi r9, r9, CameraNoiseSpeedData@l +/* 00002E3C 0000FBCC 3D 40 00 00 */ lis r10, .rodata+0x528@ha +/* 00002E40 0000FBD0 7D 29 04 2E */ lfsx f9, r9, r0 +/* 00002E44 0000FBD4 7D 60 4A 14 */ add r11, r0, r9 +/* 00002E48 0000FBD8 C1 0B 00 0C */ lfs f8, 0xc(r11) +/* 00002E4C 0000FBDC 3D 20 00 00 */ lis r9, .rodata+0x524@ha +/* 00002E50 0000FBE0 C1 8B 00 04 */ lfs f12, 0x4(r11) +/* 00002E54 0000FBE4 FD 40 3A 10 */ fabs f10, f7 +/* 00002E58 0000FBE8 C1 6B 00 08 */ lfs f11, 0x8(r11) +.L_00002E5C: +/* 00002E5C 0000FBEC C0 0A 05 28 */ lfs f0, .rodata+0x528@l(r10) +/* 00002E60 0000FBF0 C1 A9 05 24 */ lfs f13, .rodata+0x524@l(r9) +/* 00002E64 0000FBF4 EC 0A 00 32 */ fmuls f0, f10, f0 +/* 00002E68 0000FBF8 D1 81 00 5C */ stfs f12, 0x5c(r1) +/* 00002E6C 0000FBFC D1 61 00 60 */ stfs f11, 0x60(r1) +/* 00002E70 0000FC00 EF 89 07 FA */ fmadds f28, f9, f31, f0 +.L_00002E74: +/* 00002E74 0000FC04 D1 01 00 64 */ stfs f8, 0x64(r1) +/* 00002E78 0000FC08 EF 6A DB 7A */ fmadds f27, f10, f13, f27 +/* 00002E7C 0000FC0C D1 21 00 58 */ stfs f9, 0x58(r1) +/* 00002E80 0000FC10 80 1F 00 BC */ lwz r0, 0xbc(r31) +/* 00002E84 0000FC14 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00002E88 0000FC18 41 82 2E 98 */ beq .L_00005D20 +/* 00002E8C 0000FC1C 3D 20 00 00 */ lis r9, .rodata+0x52C@ha +/* 00002E90 0000FC20 C0 09 05 2C */ lfs f0, .rodata+0x52C@l(r9) +/* 00002E94 0000FC24 EF 9C 00 32 */ fmuls f28, f28, f0 +.L_00002E98: +/* 00002E98 0000FC28 80 1F 00 C0 */ lwz r0, 0xc0(r31) +/* 00002E9C 0000FC2C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00002EA0 0000FC30 41 82 2E BC */ beq .L_00005D5C +/* 00002EA4 0000FC34 3D 60 00 00 */ lis r11, .rodata+0x528@ha +/* 00002EA8 0000FC38 3D 20 00 00 */ lis r9, .rodata+0x530@ha +/* 00002EAC 0000FC3C C0 09 05 30 */ lfs f0, .rodata+0x530@l(r9) +/* 00002EB0 0000FC40 C1 AB 05 28 */ lfs f13, .rodata+0x528@l(r11) +/* 00002EB4 0000FC44 EF 9C 00 2A */ fadds f28, f28, f0 +.L_00002EB8: +/* 00002EB8 0000FC48 EF 7B 03 72 */ fmuls f27, f27, f13 +/* 00002EBC 0000FC4C 80 1F 00 B4 */ lwz r0, 0xb4(r31) +/* 00002EC0 0000FC50 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00002EC4 0000FC54 41 82 2E EC */ beq .L_00005DB0 +/* 00002EC8 0000FC58 3D 20 00 00 */ lis r9, .rodata+0x530@ha +/* 00002ECC 0000FC5C C0 1F 00 10 */ lfs f0, 0x10(r31) +/* 00002ED0 0000FC60 C1 A9 05 30 */ lfs f13, .rodata+0x530@l(r9) +/* 00002ED4 0000FC64 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00002ED8 0000FC68 4C 62 03 82 */ cror un, eq, lt +/* 00002EDC 0000FC6C 41 83 2E EC */ bso .L_00005DC8 +/* 00002EE0 0000FC70 3D 20 00 00 */ lis r9, .rodata+0x534@ha +/* 00002EE4 0000FC74 FF 60 68 90 */ fmr f27, f13 +.L_00002EE8: +/* 00002EE8 0000FC78 C3 89 05 34 */ lfs f28, .rodata+0x534@l(r9) +/* 00002EEC 0000FC7C 80 1F 00 B8 */ lwz r0, 0xb8(r31) +/* 00002EF0 0000FC80 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00002EF4 0000FC84 41 82 2F 20 */ beq .L_00005E14 +.L_00002EF8: +/* 00002EF8 0000FC88 3D 20 00 00 */ lis r9, .rodata+0x530@ha +/* 00002EFC 0000FC8C C1 BF 00 10 */ lfs f13, 0x10(r31) +/* 00002F00 0000FC90 C0 09 05 30 */ lfs f0, .rodata+0x530@l(r9) +/* 00002F04 0000FC94 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 00002F08 0000FC98 4C 62 03 82 */ cror un, eq, lt +/* 00002F0C 0000FC9C 41 83 2F 20 */ bso .L_00005E2C +/* 00002F10 0000FCA0 3D 20 00 00 */ lis r9, .rodata+0x534@ha +/* 00002F14 0000FCA4 3D 60 00 00 */ lis r11, .rodata+0x51C@ha +.L_00002F18: +/* 00002F18 0000FCA8 C3 89 05 34 */ lfs f28, .rodata+0x534@l(r9) +/* 00002F1C 0000FCAC C3 6B 05 1C */ lfs f27, .rodata+0x51C@l(r11) +.L_00002F20: +/* 00002F20 0000FCB0 81 3D 00 08 */ lwz r9, 0x8(r29) +/* 00002F24 0000FCB4 A8 69 00 58 */ lha r3, 0x58(r9) +/* 00002F28 0000FCB8 80 09 00 5C */ lwz r0, 0x5c(r9) +/* 00002F2C 0000FCBC 7C 7D 1A 14 */ add r3, r29, r3 +/* 00002F30 0000FCC0 7C 08 03 A6 */ mtlr r0 +/* 00002F34 0000FCC4 4E 80 00 21 */ blrl +/* 00002F38 0000FCC8 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00002F3C 0000FCCC 40 82 2F 50 */ bne .L_00005E8C +/* 00002F40 0000FCD0 3D 20 00 00 */ lis r9, .rodata+0x528@ha +/* 00002F44 0000FCD4 C0 09 05 28 */ lfs f0, .rodata+0x528@l(r9) +/* 00002F48 0000FCD8 EF 7B 00 32 */ fmuls f27, f27, f0 +/* 00002F4C 0000FCDC EF 9C 00 32 */ fmuls f28, f28, f0 +/* 00002F50 0000FCE0 EF 7B 06 B2 */ fmuls f27, f27, f26 +/* 00002F54 0000FCE4 C3 E1 00 18 */ lfs f31, 0x18(r1) +/* 00002F58 0000FCE8 ED 9E 06 F2 */ fmuls f12, f30, f27 +/* 00002F5C 0000FCEC C3 A1 00 1C */ lfs f29, 0x1c(r1) +/* 00002F60 0000FCF0 C3 C1 00 20 */ lfs f30, 0x20(r1) +/* 00002F64 0000FCF4 EF FF 06 F2 */ fmuls f31, f31, f27 +/* 00002F68 0000FCF8 C0 21 00 24 */ lfs f1, 0x24(r1) +.L_00002F6C: +/* 00002F6C 0000FCFC EF BD 06 F2 */ fmuls f29, f29, f27 +.L_00002F70: +/* 00002F70 0000FD00 C0 41 00 28 */ lfs f2, 0x28(r1) +/* 00002F74 0000FD04 EF DE 06 F2 */ fmuls f30, f30, f27 +/* 00002F78 0000FD08 C1 41 00 2C */ lfs f10, 0x2c(r1) +/* 00002F7C 0000FD0C EC 21 06 F2 */ fmuls f1, f1, f27 +/* 00002F80 0000FD10 C1 21 00 30 */ lfs f9, 0x30(r1) +/* 00002F84 0000FD14 EC 42 07 32 */ fmuls f2, f2, f28 +/* 00002F88 0000FD18 C1 01 00 34 */ lfs f8, 0x34(r1) +/* 00002F8C 0000FD1C ED 4A 07 32 */ fmuls f10, f10, f28 +.L_00002F90: +/* 00002F90 0000FD20 C0 E1 00 38 */ lfs f7, 0x38(r1) +/* 00002F94 0000FD24 ED 29 07 32 */ fmuls f9, f9, f28 +/* 00002F98 0000FD28 C0 C1 00 3C */ lfs f6, 0x3c(r1) +/* 00002F9C 0000FD2C ED 08 07 32 */ fmuls f8, f8, f28 +/* 00002FA0 0000FD30 C0 A1 00 40 */ lfs f5, 0x40(r1) +/* 00002FA4 0000FD34 EC E7 06 B2 */ fmuls f7, f7, f26 +/* 00002FA8 0000FD38 C0 81 00 44 */ lfs f4, 0x44(r1) +/* 00002FAC 0000FD3C EC C6 06 B2 */ fmuls f6, f6, f26 +/* 00002FB0 0000FD40 C0 61 00 48 */ lfs f3, 0x48(r1) +/* 00002FB4 0000FD44 EC A5 06 B2 */ fmuls f5, f5, f26 +.L_00002FB8: +/* 00002FB8 0000FD48 C1 61 00 4C */ lfs f11, 0x4c(r1) +/* 00002FBC 0000FD4C EC 84 06 B2 */ fmuls f4, f4, f26 +/* 00002FC0 0000FD50 C1 A1 00 50 */ lfs f13, 0x50(r1) +/* 00002FC4 0000FD54 EC 63 03 32 */ fmuls f3, f3, f12 +/* 00002FC8 0000FD58 C0 01 00 54 */ lfs f0, 0x54(r1) +/* 00002FCC 0000FD5C ED 6B 03 32 */ fmuls f11, f11, f12 +/* 00002FD0 0000FD60 81 3D 00 1C */ lwz r9, 0x1c(r29) +/* 00002FD4 0000FD64 ED AD 03 32 */ fmuls f13, f13, f12 +/* 00002FD8 0000FD68 EC 00 03 32 */ fmuls f0, f0, f12 +/* 00002FDC 0000FD6C D0 41 00 28 */ stfs f2, 0x28(r1) +/* 00002FE0 0000FD70 D1 61 00 4C */ stfs f11, 0x4c(r1) +/* 00002FE4 0000FD74 3D 60 00 00 */ lis r11, .rodata+0x530@ha +/* 00002FE8 0000FD78 D1 A1 00 50 */ stfs f13, 0x50(r1) +/* 00002FEC 0000FD7C 3C C0 00 00 */ lis r6, WorldTimer@ha +/* 00002FF0 0000FD80 D0 01 00 54 */ stfs f0, 0x54(r1) +/* 00002FF4 0000FD84 D0 21 00 24 */ stfs f1, 0x24(r1) +/* 00002FF8 0000FD88 3C A0 43 30 */ lis r5, 0x4330 +/* 00002FFC 0000FD8C D1 41 00 2C */ stfs f10, 0x2c(r1) +/* 00003000 0000FD90 3D 00 00 00 */ lis r8, .rodata+0x538@ha +/* 00003004 0000FD94 D1 21 00 30 */ stfs f9, 0x30(r1) +/* 00003008 0000FD98 3C E0 00 00 */ lis r7, .rodata+0x540@ha +/* 0000300C 0000FD9C D1 01 00 34 */ stfs f8, 0x34(r1) +/* 00003010 0000FDA0 7F 84 E3 78 */ mr r4, r28 +/* 00003014 0000FDA4 D0 E1 00 38 */ stfs f7, 0x38(r1) +/* 00003018 0000FDA8 D0 C1 00 3C */ stfs f6, 0x3c(r1) +/* 0000301C 0000FDAC D0 A1 00 40 */ stfs f5, 0x40(r1) +/* 00003020 0000FDB0 D0 81 00 44 */ stfs f4, 0x44(r1) +/* 00003024 0000FDB4 D0 61 00 48 */ stfs f3, 0x48(r1) +/* 00003028 0000FDB8 D3 E1 00 18 */ stfs f31, 0x18(r1) +/* 0000302C 0000FDBC D3 A1 00 1C */ stfs f29, 0x1c(r1) +/* 00003030 0000FDC0 D3 C1 00 20 */ stfs f30, 0x20(r1) +/* 00003034 0000FDC4 D3 E9 00 70 */ stfs f31, 0x70(r9) +/* 00003038 0000FDC8 D0 29 00 7C */ stfs f1, 0x7c(r9) +/* 0000303C 0000FDCC D3 A9 00 74 */ stfs f29, 0x74(r9) +/* 00003040 0000FDD0 D3 C9 00 78 */ stfs f30, 0x78(r9) +/* 00003044 0000FDD4 C0 4B 05 30 */ lfs f2, .rodata+0x530@l(r11) +/* 00003048 0000FDD8 81 3D 00 1C */ lwz r9, 0x1c(r29) +/* 0000304C 0000FDDC C1 A1 00 28 */ lfs f13, 0x28(r1) +/* 00003050 0000FDE0 C1 81 00 2C */ lfs f12, 0x2c(r1) +/* 00003054 0000FDE4 C1 61 00 30 */ lfs f11, 0x30(r1) +/* 00003058 0000FDE8 C0 01 00 34 */ lfs f0, 0x34(r1) +/* 0000305C 0000FDEC D1 A9 00 80 */ stfs f13, 0x80(r9) +/* 00003060 0000FDF0 D0 09 00 8C */ stfs f0, 0x8c(r9) +/* 00003064 0000FDF4 D1 89 00 84 */ stfs f12, 0x84(r9) +/* 00003068 0000FDF8 D1 69 00 88 */ stfs f11, 0x88(r9) +/* 0000306C 0000FDFC C1 A1 00 38 */ lfs f13, 0x38(r1) +/* 00003070 0000FE00 C1 81 00 3C */ lfs f12, 0x3c(r1) +/* 00003074 0000FE04 C1 61 00 40 */ lfs f11, 0x40(r1) +/* 00003078 0000FE08 C0 01 00 44 */ lfs f0, 0x44(r1) +/* 0000307C 0000FE0C 81 7D 00 1C */ lwz r11, 0x1c(r29) +.L_00003080: +/* 00003080 0000FE10 D1 AB 00 90 */ stfs f13, 0x90(r11) +/* 00003084 0000FE14 D0 0B 00 9C */ stfs f0, 0x9c(r11) +/* 00003088 0000FE18 D1 8B 00 94 */ stfs f12, 0x94(r11) +/* 0000308C 0000FE1C D1 6B 00 98 */ stfs f11, 0x98(r11) +.L_00003090: +/* 00003090 0000FE20 C1 A1 00 48 */ lfs f13, 0x48(r1) +/* 00003094 0000FE24 C0 01 00 54 */ lfs f0, 0x54(r1) +/* 00003098 0000FE28 81 3D 00 1C */ lwz r9, 0x1c(r29) +/* 0000309C 0000FE2C C1 81 00 4C */ lfs f12, 0x4c(r1) +.L_000030A0: +/* 000030A0 0000FE30 C1 61 00 50 */ lfs f11, 0x50(r1) +/* 000030A4 0000FE34 D1 A9 00 A0 */ stfs f13, 0xa0(r9) +.L_000030A8: +/* 000030A8 0000FE38 D0 09 00 AC */ stfs f0, 0xac(r9) +/* 000030AC 0000FE3C D1 89 00 A4 */ stfs f12, 0xa4(r9) +.L_000030B0: +/* 000030B0 0000FE40 D1 69 00 A8 */ stfs f11, 0xa8(r9) +/* 000030B4 0000FE44 80 06 00 00 */ lwz r0, WorldTimer@l(r6) +/* 000030B8 0000FE48 C8 08 05 38 */ lfd f0, .rodata+0x538@l(r8) +/* 000030BC 0000FE4C 6C 00 80 00 */ xoris r0, r0, 0x8000 +/* 000030C0 0000FE50 C1 A7 05 40 */ lfs f13, .rodata+0x540@l(r7) +/* 000030C4 0000FE54 90 01 00 6C */ stw r0, 0x6c(r1) +/* 000030C8 0000FE58 80 7D 00 1C */ lwz r3, 0x1c(r29) +/* 000030CC 0000FE5C 90 A1 00 68 */ stw r5, 0x68(r1) +/* 000030D0 0000FE60 C8 21 00 68 */ lfd f1, 0x68(r1) +/* 000030D4 0000FE64 FC 21 00 28 */ fsub f1, f1, f0 +/* 000030D8 0000FE68 FC 20 08 18 */ frsp f1, f1 +/* 000030DC 0000FE6C EC 21 03 72 */ fmuls f1, f1, f13 +/* 000030E0 0000FE70 48 00 0A 61 */ bl .L_00003B40 +/* 000030E4 0000FE74 80 01 00 B4 */ lwz r0, 0xb4(r1) +.L_000030E8: +/* 000030E8 0000FE78 7C 08 03 A6 */ mtlr r0 +/* 000030EC 0000FE7C BB 81 00 70 */ lmw r28, 0x70(r1) +/* 000030F0 0000FE80 E3 41 00 80 */ psq_l f26, 0x80(r1), 0, qr0 +/* 000030F4 0000FE84 E3 61 00 88 */ psq_l f27, 0x88(r1), 0, qr0 +/* 000030F8 0000FE88 E3 81 00 90 */ psq_l f28, 0x90(r1), 0, qr0 +/* 000030FC 0000FE8C E3 A1 00 98 */ psq_l f29, 0x98(r1), 0, qr0 +/* 00003100 0000FE90 E3 C1 00 A0 */ psq_l f30, 0xa0(r1), 0, qr0 +/* 00003104 0000FE94 E3 E1 00 A8 */ psq_l f31, 0xa8(r1), 0, qr0 +/* 00003108 0000FE98 38 21 00 B0 */ addi r1, r1, 0xb0 +/* 0000310C 0000FE9C 4E 80 00 20 */ blr +.endfn TerrainVelocityNoise__11CameraMoverP8bMatrix4P12CameraAnchorff + +# .text:0x3110 | size: 0xB0 +.fn ComputeBankedUpVector__11CameraMoverP8bVector3N21Us, global +/* 00003110 0000FEA0 94 21 FF 80 */ stwu r1, -0x80(r1) +/* 00003114 0000FEA4 7C 08 02 A6 */ mflr r0 +/* 00003118 0000FEA8 BF 41 00 68 */ stmw r26, 0x68(r1) +/* 0000311C 0000FEAC 90 01 00 84 */ stw r0, 0x84(r1) +/* 00003120 0000FEB0 C1 84 00 08 */ lfs f12, 0x8(r4) +/* 00003124 0000FEB4 3D 20 00 00 */ lis r9, .rodata+0x544@ha +.L_00003128: +/* 00003128 0000FEB8 C1 25 00 08 */ lfs f9, 0x8(r5) +/* 0000312C 0000FEBC 3D 60 00 00 */ lis r11, .rodata+0x548@ha +/* 00003130 0000FEC0 C1 64 00 00 */ lfs f11, 0x0(r4) +/* 00003134 0000FEC4 3B C1 00 48 */ addi r30, r1, 0x48 +/* 00003138 0000FEC8 C1 44 00 04 */ lfs f10, 0x4(r4) +/* 0000313C 0000FECC ED 29 60 28 */ fsubs f9, f9, f12 +.L_00003140: +/* 00003140 0000FED0 C0 05 00 00 */ lfs f0, 0x0(r5) +/* 00003144 0000FED4 7C 7A 1B 78 */ mr r26, r3 +/* 00003148 0000FED8 C1 A5 00 04 */ lfs f13, 0x4(r5) +/* 0000314C 0000FEDC 3B A1 00 08 */ addi r29, r1, 0x8 +/* 00003150 0000FEE0 C1 09 05 44 */ lfs f8, .rodata+0x544@l(r9) +/* 00003154 0000FEE4 EC 00 58 28 */ fsubs f0, f0, f11 +/* 00003158 0000FEE8 C1 8B 05 48 */ lfs f12, .rodata+0x548@l(r11) +/* 0000315C 0000FEEC ED AD 50 28 */ fsubs f13, f13, f10 +/* 00003160 0000FEF0 7C DB 33 78 */ mr r27, r6 +/* 00003164 0000FEF4 3B 81 00 58 */ addi r28, r1, 0x58 +.L_00003168: +/* 00003168 0000FEF8 D1 01 00 5C */ stfs f8, 0x5c(r1) +/* 0000316C 0000FEFC 7F C4 F3 78 */ mr r4, r30 +/* 00003170 0000FF00 D1 81 00 60 */ stfs f12, 0x60(r1) +/* 00003174 0000FF04 7F C3 F3 78 */ mr r3, r30 +/* 00003178 0000FF08 D0 01 00 48 */ stfs f0, 0x48(r1) +/* 0000317C 0000FF0C D1 A1 00 4C */ stfs f13, 0x4c(r1) +.L_00003180: +/* 00003180 0000FF10 D1 21 00 50 */ stfs f9, 0x50(r1) +/* 00003184 0000FF14 D1 01 00 58 */ stfs f8, 0x58(r1) +/* 00003188 0000FF18 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +/* 0000318C 0000FF1C 7F C4 F3 78 */ mr r4, r30 +/* 00003190 0000FF20 7F 65 DB 78 */ mr r5, r27 +/* 00003194 0000FF24 7F A3 EB 78 */ mr r3, r29 +/* 00003198 0000FF28 48 00 00 01 */ bl eCreateAxisRotationMatrix__FP8bMatrix4R8bVector3Us +/* 0000319C 0000FF2C 7F 43 D3 78 */ mr r3, r26 +/* 000031A0 0000FF30 7F A4 EB 78 */ mr r4, r29 +/* 000031A4 0000FF34 7F 85 E3 78 */ mr r5, r28 +/* 000031A8 0000FF38 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 +/* 000031AC 0000FF3C 80 01 00 84 */ lwz r0, 0x84(r1) +/* 000031B0 0000FF40 7C 08 03 A6 */ mtlr r0 +/* 000031B4 0000FF44 BB 41 00 68 */ lmw r26, 0x68(r1) +/* 000031B8 0000FF48 38 21 00 80 */ addi r1, r1, 0x80 +/* 000031BC 0000FF4C 4E 80 00 20 */ blr +.endfn ComputeBankedUpVector__11CameraMoverP8bVector3N21Us + +# .text:0x31C0 | size: 0xEC +.fn IsoProjectionMatrix__11CameraMoverP8bMatrix4P8bVector3T2P8bVector2, global +/* 000031C0 0000FF50 94 21 FF 20 */ stwu r1, -0xe0(r1) +/* 000031C4 0000FF54 7C 08 02 A6 */ mflr r0 +/* 000031C8 0000FF58 BE C1 00 B8 */ stmw r22, 0xb8(r1) +/* 000031CC 0000FF5C 90 01 00 E4 */ stw r0, 0xe4(r1) +/* 000031D0 0000FF60 7C 9B 23 78 */ mr r27, r4 +/* 000031D4 0000FF64 3B 41 00 08 */ addi r26, r1, 0x8 +/* 000031D8 0000FF68 C0 1B 00 04 */ lfs f0, 0x4(r27) +/* 000031DC 0000FF6C 3B C1 00 18 */ addi r30, r1, 0x18 +/* 000031E0 0000FF70 C1 BB 00 14 */ lfs f13, 0x14(r27) +/* 000031E4 0000FF74 7C B6 2B 78 */ mr r22, r5 +/* 000031E8 0000FF78 C1 9B 00 24 */ lfs f12, 0x24(r27) +/* 000031EC 0000FF7C FC 00 00 50 */ fneg f0, f0 +/* 000031F0 0000FF80 FD A0 68 50 */ fneg f13, f13 +/* 000031F4 0000FF84 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 000031F8 0000FF88 D1 A1 00 0C */ stfs f13, 0xc(r1) +/* 000031FC 0000FF8C FD 80 60 50 */ fneg f12, f12 +/* 00003200 0000FF90 7C D7 33 78 */ mr r23, r6 +/* 00003204 0000FF94 7C F9 3B 78 */ mr r25, r7 +/* 00003208 0000FF98 3B A1 00 58 */ addi r29, r1, 0x58 +/* 0000320C 0000FF9C 7F 46 D3 78 */ mr r6, r26 +/* 00003210 0000FFA0 D1 9A 00 08 */ stfs f12, 0x8(r26) +/* 00003214 0000FFA4 7E E5 BB 78 */ mr r5, r23 +/* 00003218 0000FFA8 7F C3 F3 78 */ mr r3, r30 +/* 0000321C 0000FFAC 7E C4 B3 78 */ mr r4, r22 +.L_00003220: +/* 00003220 0000FFB0 48 00 00 01 */ bl eCreateLookAtMatrix__FP8bMatrix4R8bVector3N21 +/* 00003224 0000FFB4 3B 81 00 98 */ addi r28, r1, 0x98 +.L_00003228: +/* 00003228 0000FFB8 7F C4 F3 78 */ mr r4, r30 +/* 0000322C 0000FFBC 7F A3 EB 78 */ mr r3, r29 +/* 00003230 0000FFC0 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 +/* 00003234 0000FFC4 3B 01 00 A8 */ addi r24, r1, 0xa8 +/* 00003238 0000FFC8 7F C4 F3 78 */ mr r4, r30 +/* 0000323C 0000FFCC 7E E5 BB 78 */ mr r5, r23 +/* 00003240 0000FFD0 7F 83 E3 78 */ mr r3, r28 +/* 00003244 0000FFD4 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 +/* 00003248 0000FFD8 C1 79 00 04 */ lfs f11, 0x4(r25) +/* 0000324C 0000FFDC 7F A4 EB 78 */ mr r4, r29 +.L_00003250: +/* 00003250 0000FFE0 C1 81 00 A0 */ lfs f12, 0xa0(r1) +/* 00003254 0000FFE4 7F 85 E3 78 */ mr r5, r28 +/* 00003258 0000FFE8 C1 59 00 00 */ lfs f10, 0x0(r25) +/* 0000325C 0000FFEC 7F 03 C3 78 */ mr r3, r24 +/* 00003260 0000FFF0 C1 A1 00 98 */ lfs f13, 0x98(r1) +.L_00003264: +/* 00003264 0000FFF4 ED 6C 02 F2 */ fmuls f11, f12, f11 +/* 00003268 0000FFF8 C0 01 00 9C */ lfs f0, 0x9c(r1) +/* 0000326C 0000FFFC ED 8C 02 B2 */ fmuls f12, f12, f10 +/* 00003270 00010000 ED AD 60 28 */ fsubs f13, f13, f12 +/* 00003274 00010004 EC 00 58 28 */ fsubs f0, f0, f11 +/* 00003278 00010008 D1 A1 00 98 */ stfs f13, 0x98(r1) +/* 0000327C 0001000C D0 01 00 9C */ stfs f0, 0x9c(r1) +/* 00003280 00010010 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 +/* 00003284 00010014 7F 63 DB 78 */ mr r3, r27 +/* 00003288 00010018 7E C4 B3 78 */ mr r4, r22 +/* 0000328C 0001001C 7F 05 C3 78 */ mr r5, r24 +/* 00003290 00010020 7F 46 D3 78 */ mr r6, r26 +/* 00003294 00010024 48 00 00 01 */ bl eCreateLookAtMatrix__FP8bMatrix4R8bVector3N21 +/* 00003298 00010028 80 01 00 E4 */ lwz r0, 0xe4(r1) +/* 0000329C 0001002C 7C 08 03 A6 */ mtlr r0 +/* 000032A0 00010030 BA C1 00 B8 */ lmw r22, 0xb8(r1) +/* 000032A4 00010034 38 21 00 E0 */ addi r1, r1, 0xe0 +/* 000032A8 00010038 4E 80 00 20 */ blr +.endfn IsoProjectionMatrix__11CameraMoverP8bMatrix4P8bVector3T2P8bVector2 + +# .text:0x32AC | size: 0x320 +.fn AdjustHeightAroundCar__11CameraMoverPC8bVector3P8bVector3T2, global +/* 000032AC 0001003C 94 21 FE 80 */ stwu r1, -0x180(r1) +/* 000032B0 00010040 7C 08 02 A6 */ mflr r0 +/* 000032B4 00010044 F3 61 01 58 */ psq_st f27, 0x158(r1), 0, qr0 +/* 000032B8 00010048 F3 81 01 60 */ psq_st f28, 0x160(r1), 0, qr0 +/* 000032BC 0001004C F3 A1 01 68 */ psq_st f29, 0x168(r1), 0, qr0 +/* 000032C0 00010050 F3 C1 01 70 */ psq_st f30, 0x170(r1), 0, qr0 +/* 000032C4 00010054 F3 E1 01 78 */ psq_st f31, 0x178(r1), 0, qr0 +/* 000032C8 00010058 BE A1 01 2C */ stmw r21, 0x12c(r1) +/* 000032CC 0001005C 90 01 01 84 */ stw r0, 0x184(r1) +/* 000032D0 00010060 3D 20 00 00 */ lis r9, TheAvoidables@ha +/* 000032D4 00010064 3D 60 00 00 */ lis r11, .rodata+0x54C@ha +/* 000032D8 00010068 81 49 00 00 */ lwz r10, TheAvoidables@l(r9) +/* 000032DC 0001006C 3D 00 00 00 */ lis r8, .rodata+0x550@ha +/* 000032E0 00010070 C3 6B 05 4C */ lfs f27, .rodata+0x54C@l(r11) +/* 000032E4 00010074 7C 9F 23 78 */ mr r31, r4 +/* 000032E8 00010078 81 2A 00 04 */ lwz r9, 0x4(r10) +/* 000032EC 0001007C 3E A0 00 00 */ lis r21, TheAvoidables@ha +/* 000032F0 00010080 C3 88 05 50 */ lfs f28, .rodata+0x550@l(r8) +/* 000032F4 00010084 3B 41 00 10 */ addi r26, r1, 0x10 +/* 000032F8 00010088 80 09 00 00 */ lwz r0, 0x0(r9) +.L_000032FC: +/* 000032FC 0001008C 3E E0 00 00 */ lis r23, .rodata+0x554@ha +.L_00003300: +/* 00003300 00010090 3E C0 00 00 */ lis r22, .rodata+0x558@ha +/* 00003304 00010094 3F 80 00 00 */ lis r28, .rodata+0x55C@ha +/* 00003308 00010098 90 01 00 08 */ stw r0, 0x8(r1) +/* 0000330C 0001009C 7C 1D 03 78 */ mr r29, r0 +/* 00003310 000100A0 3B 61 00 D8 */ addi r27, r1, 0xd8 +/* 00003314 000100A4 81 35 00 00 */ lwz r9, TheAvoidables@l(r21) +/* 00003318 000100A8 39 60 00 01 */ li r11, 0x1 +/* 0000331C 000100AC 80 09 00 04 */ lwz r0, 0x4(r9) +/* 00003320 000100B0 7C 1D 00 00 */ cmpw r29, r0 +.L_00003324: +/* 00003324 000100B4 90 01 00 08 */ stw r0, 0x8(r1) +/* 00003328 000100B8 40 82 33 30 */ bne .L_00006658 +.L_0000332C: +/* 0000332C 000100BC 39 60 00 00 */ li r11, 0x0 +/* 00003330 000100C0 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00003334 000100C4 41 82 35 9C */ beq .L_000068D0 +/* 00003338 000100C8 83 DD 00 08 */ lwz r30, 0x8(r29) +/* 0000333C 000100CC 7F 44 D3 78 */ mr r4, r26 +/* 00003340 000100D0 3F 20 00 00 */ lis r25, .rodata+0x554@ha +/* 00003344 000100D4 3F 00 00 00 */ lis r24, .rodata+0x558@ha +/* 00003348 000100D8 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000334C 000100DC 80 09 00 14 */ lwz r0, 0x14(r9) +.L_00003350: +/* 00003350 000100E0 A8 69 00 10 */ lha r3, 0x10(r9) +.L_00003354: +/* 00003354 000100E4 7C 08 03 A6 */ mtlr r0 +/* 00003358 000100E8 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000335C 000100EC 4E 80 00 21 */ blrl +/* 00003360 000100F0 38 61 00 50 */ addi r3, r1, 0x50 +.L_00003364: +/* 00003364 000100F4 7F 44 D3 78 */ mr r4, r26 +/* 00003368 000100F8 48 00 00 01 */ bl bConvertFromBond__FR8bMatrix4RC8bMatrix4 +/* 0000336C 000100FC C1 BF 00 00 */ lfs f13, 0x0(r31) +/* 00003370 00010100 38 81 00 90 */ addi r4, r1, 0x90 +/* 00003374 00010104 C1 7F 00 04 */ lfs f11, 0x4(r31) +/* 00003378 00010108 C1 81 00 80 */ lfs f12, 0x80(r1) +.L_0000337C: +/* 0000337C 0001010C C0 01 00 84 */ lfs f0, 0x84(r1) +/* 00003380 00010110 ED 8C 68 28 */ fsubs f12, f12, f13 +/* 00003384 00010114 C1 41 00 88 */ lfs f10, 0x88(r1) +/* 00003388 00010118 EC 00 58 28 */ fsubs f0, f0, f11 +/* 0000338C 0001011C D1 81 00 B0 */ stfs f12, 0xb0(r1) +/* 00003390 00010120 D0 01 00 B4 */ stfs f0, 0xb4(r1) +/* 00003394 00010124 EC 00 00 32 */ fmuls f0, f0, f0 +/* 00003398 00010128 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000339C 0001012C EF CC 03 3A */ fmadds f30, f12, f12, f0 +/* 000033A0 00010130 C1 BF 00 08 */ lfs f13, 0x8(r31) +/* 000033A4 00010134 A8 69 00 28 */ lha r3, 0x28(r9) +/* 000033A8 00010138 80 09 00 2C */ lwz r0, 0x2c(r9) +/* 000033AC 0001013C ED 4A 68 28 */ fsubs f10, f10, f13 +/* 000033B0 00010140 7C 7E 1A 14 */ add r3, r30, r3 +/* 000033B4 00010144 FF A0 52 10 */ fabs f29, f10 +/* 000033B8 00010148 7C 08 03 A6 */ mtlr r0 +/* 000033BC 0001014C 4E 80 00 21 */ blrl +/* 000033C0 00010150 C0 01 00 90 */ lfs f0, 0x90(r1) +/* 000033C4 00010154 C1 A1 00 98 */ lfs f13, 0x98(r1) +.L_000033C8: +/* 000033C8 00010158 EC 00 D8 2A */ fadds f0, f0, f27 +/* 000033CC 0001015C C1 81 00 94 */ lfs f12, 0x94(r1) +/* 000033D0 00010160 D0 01 00 A4 */ stfs f0, 0xa4(r1) +/* 000033D4 00010164 ED AD D8 2A */ fadds f13, f13, f27 +/* 000033D8 00010168 EC 00 00 32 */ fmuls f0, f0, f0 +/* 000033DC 0001016C C1 57 05 54 */ lfs f10, .rodata+0x554@l(r23) +/* 000033E0 00010170 ED 6D 03 7A */ fmadds f11, f13, f13, f0 +.L_000033E4: +/* 000033E4 00010174 C1 36 05 58 */ lfs f9, .rodata+0x558@l(r22) +/* 000033E8 00010178 ED 8C D8 2A */ fadds f12, f12, f27 +/* 000033EC 0001017C D1 A1 00 A0 */ stfs f13, 0xa0(r1) +/* 000033F0 00010180 D1 81 00 A8 */ stfs f12, 0xa8(r1) +/* 000033F4 00010184 FC 0B E0 00 */ fcmpu cr0, f11, f28 +.L_000033F8: +/* 000033F8 00010188 4C 62 03 82 */ cror un, eq, lt +/* 000033FC 0001018C 41 83 34 2C */ bso .L_00006828 +/* 00003400 00010190 FF E0 58 34 */ frsqrte f31, f11 +/* 00003404 00010194 EC 1F 07 F2 */ fmuls f0, f31, f31 +/* 00003408 00010198 ED BF 02 B2 */ fmuls f13, f31, f10 +/* 0000340C 0001019C EC 0B 48 3C */ fnmsubs f0, f11, f0, f9 +/* 00003410 000101A0 EF E0 FB 7A */ fmadds f31, f0, f13, f31 +/* 00003414 000101A4 EC 1F 07 F2 */ fmuls f0, f31, f31 +.L_00003418: +/* 00003418 000101A8 ED BF 02 B2 */ fmuls f13, f31, f10 +/* 0000341C 000101AC EC 0B 48 3C */ fnmsubs f0, f11, f0, f9 +/* 00003420 000101B0 EF E0 FB 7A */ fmadds f31, f0, f13, f31 +/* 00003424 000101B4 EF FF 02 F2 */ fmuls f31, f31, f11 +/* 00003428 000101B8 48 00 34 30 */ b .L_00006858 +/* 0000342C 000101BC C3 FC 05 5C */ lfs f31, .rodata+0x55C@l(r28) +/* 00003430 000101C0 EC 1F 07 F2 */ fmuls f0, f31, f31 +/* 00003434 000101C4 FC 1E 00 00 */ fcmpu cr0, f30, f0 +/* 00003438 000101C8 4C 62 0B 82 */ cror un, eq, gt +/* 0000343C 000101CC 41 83 35 94 */ bso .L_000069D0 +/* 00003440 000101D0 C0 01 00 A8 */ lfs f0, 0xa8(r1) +/* 00003444 000101D4 EC 00 00 2A */ fadds f0, f0, f0 +/* 00003448 000101D8 FC 1D 00 00 */ fcmpu cr0, f29, f0 +/* 0000344C 000101DC 4C 62 0B 82 */ cror un, eq, gt +/* 00003450 000101E0 41 83 35 94 */ bso .L_000069E4 +/* 00003454 000101E4 38 81 00 50 */ addi r4, r1, 0x50 +/* 00003458 000101E8 7F 63 DB 78 */ mr r3, r27 +/* 0000345C 000101EC 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 +/* 00003460 000101F0 7F 64 DB 78 */ mr r4, r27 +/* 00003464 000101F4 7F E5 FB 78 */ mr r5, r31 +/* 00003468 000101F8 38 61 00 B8 */ addi r3, r1, 0xb8 +/* 0000346C 000101FC 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 +/* 00003470 00010200 C1 61 00 B8 */ lfs f11, 0xb8(r1) +/* 00003474 00010204 38 81 00 50 */ addi r4, r1, 0x50 +/* 00003478 00010208 C1 81 00 BC */ lfs f12, 0xbc(r1) +/* 0000347C 0001020C 38 A1 00 B8 */ addi r5, r1, 0xb8 +/* 00003480 00010210 C1 A1 00 A0 */ lfs f13, 0xa0(r1) +/* 00003484 00010214 ED 6B 02 F2 */ fmuls f11, f11, f11 +/* 00003488 00010218 C0 01 00 A4 */ lfs f0, 0xa4(r1) +/* 0000348C 0001021C ED 8C 03 32 */ fmuls f12, f12, f12 +/* 00003490 00010220 ED AD 03 72 */ fmuls f13, f13, f13 +/* 00003494 00010224 C1 38 05 58 */ lfs f9, .rodata+0x558@l(r24) +.L_00003498: +/* 00003498 00010228 EC 00 00 32 */ fmuls f0, f0, f0 +/* 0000349C 0001022C ED 6B 02 F2 */ fmuls f11, f11, f11 +/* 000034A0 00010230 ED 8C 03 32 */ fmuls f12, f12, f12 +/* 000034A4 00010234 ED AD 03 72 */ fmuls f13, f13, f13 +.L_000034A8: +/* 000034A8 00010238 EC 00 00 32 */ fmuls f0, f0, f0 +.L_000034AC: +/* 000034AC 0001023C ED 6B 68 24 */ fdivs f11, f11, f13 +/* 000034B0 00010240 ED 8C 00 24 */ fdivs f12, f12, f0 +/* 000034B4 00010244 ED 6B 60 2A */ fadds f11, f11, f12 +/* 000034B8 00010248 FC 0B 48 00 */ fcmpu cr0, f11, f9 +.L_000034BC: +/* 000034BC 0001024C 4C 62 0B 82 */ cror un, eq, gt +.L_000034C0: +/* 000034C0 00010250 41 83 35 94 */ bso .L_00006A54 +/* 000034C4 00010254 ED 69 58 28 */ fsubs f11, f9, f11 +/* 000034C8 00010258 C1 59 05 54 */ lfs f10, .rodata+0x554@l(r25) +/* 000034CC 0001025C FC 0B E0 00 */ fcmpu cr0, f11, f28 +.L_000034D0: +/* 000034D0 00010260 4C 62 03 82 */ cror un, eq, lt +/* 000034D4 00010264 41 83 35 04 */ bso .L_000069D8 +.L_000034D8: +/* 000034D8 00010268 FC 00 58 34 */ frsqrte f0, f11 +/* 000034DC 0001026C ED A0 00 32 */ fmuls f13, f0, f0 +/* 000034E0 00010270 ED 80 02 B2 */ fmuls f12, f0, f10 +/* 000034E4 00010274 ED AB 4B 7C */ fnmsubs f13, f11, f13, f9 +/* 000034E8 00010278 EC 0D 03 3A */ fmadds f0, f13, f12, f0 +/* 000034EC 0001027C ED A0 00 32 */ fmuls f13, f0, f0 +/* 000034F0 00010280 ED 80 02 B2 */ fmuls f12, f0, f10 +/* 000034F4 00010284 ED AB 4B 7C */ fnmsubs f13, f11, f13, f9 +/* 000034F8 00010288 EC 0D 03 3A */ fmadds f0, f13, f12, f0 +/* 000034FC 0001028C EC 00 02 F2 */ fmuls f0, f0, f11 +/* 00003500 00010290 48 00 35 08 */ b .L_00006A08 +/* 00003504 00010294 C0 1C 05 5C */ lfs f0, .rodata+0x55C@l(r28) +/* 00003508 00010298 C1 39 05 54 */ lfs f9, .rodata+0x554@l(r25) +/* 0000350C 0001029C FC 00 E0 00 */ fcmpu cr0, f0, f28 +/* 00003510 000102A0 C1 58 05 58 */ lfs f10, .rodata+0x558@l(r24) +/* 00003514 000102A4 4C 62 03 82 */ cror un, eq, lt +/* 00003518 000102A8 41 83 35 48 */ bso .L_00006A60 +/* 0000351C 000102AC FD 80 00 34 */ frsqrte f12, f0 +/* 00003520 000102B0 ED AC 03 32 */ fmuls f13, f12, f12 +.L_00003524: +/* 00003524 000102B4 ED 6C 02 72 */ fmuls f11, f12, f9 +/* 00003528 000102B8 ED A0 53 7C */ fnmsubs f13, f0, f13, f10 +/* 0000352C 000102BC ED 8D 62 FA */ fmadds f12, f13, f11, f12 +/* 00003530 000102C0 ED AC 03 32 */ fmuls f13, f12, f12 +/* 00003534 000102C4 ED 6C 02 72 */ fmuls f11, f12, f9 +/* 00003538 000102C8 ED A0 53 7C */ fnmsubs f13, f0, f13, f10 +/* 0000353C 000102CC ED 8D 62 FA */ fmadds f12, f13, f11, f12 +/* 00003540 000102D0 ED 8C 00 32 */ fmuls f12, f12, f0 +/* 00003544 000102D4 48 00 35 4C */ b .L_00006A90 +/* 00003548 000102D8 C1 9C 05 5C */ lfs f12, .rodata+0x55C@l(r28) +.L_0000354C: +/* 0000354C 000102DC C0 01 00 A8 */ lfs f0, 0xa8(r1) +/* 00003550 000102E0 C1 A1 00 C0 */ lfs f13, 0xc0(r1) +/* 00003554 000102E4 EC 0C 00 32 */ fmuls f0, f12, f0 +/* 00003558 000102E8 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 0000355C 000102EC 4C 62 03 82 */ cror un, eq, lt +/* 00003560 000102F0 41 83 35 94 */ bso .L_00006AF4 +.L_00003564: +/* 00003564 000102F4 D0 01 00 C0 */ stfs f0, 0xc0(r1) +/* 00003568 000102F8 38 61 01 18 */ addi r3, r1, 0x118 +/* 0000356C 000102FC 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 +/* 00003570 00010300 C1 BF 00 08 */ lfs f13, 0x8(r31) +/* 00003574 00010304 C0 01 01 20 */ lfs f0, 0x120(r1) +/* 00003578 00010308 EC 00 68 28 */ fsubs f0, f0, f13 +/* 0000357C 0001030C FC 00 F8 00 */ fcmpu cr0, f0, f31 +/* 00003580 00010310 4C 62 03 82 */ cror un, eq, lt +/* 00003584 00010314 41 83 35 8C */ bso .L_00006B10 +/* 00003588 00010318 C0 1C 05 5C */ lfs f0, .rodata+0x55C@l(r28) +/* 0000358C 0001031C FC 20 00 90 */ fmr f1, f0 +/* 00003590 00010320 48 00 35 A4 */ b .L_00006B34 +.L_00003594: +/* 00003594 00010324 83 BD 00 00 */ lwz r29, 0x0(r29) +/* 00003598 00010328 48 00 33 14 */ b .L_000068AC +/* 0000359C 0001032C 3D 20 00 00 */ lis r9, .rodata+0x560@ha +/* 000035A0 00010330 C8 29 05 60 */ lfd f1, .rodata+0x560@l(r9) +/* 000035A4 00010334 80 01 01 84 */ lwz r0, 0x184(r1) +/* 000035A8 00010338 7C 08 03 A6 */ mtlr r0 +/* 000035AC 0001033C BA A1 01 2C */ lmw r21, 0x12c(r1) +/* 000035B0 00010340 E3 61 01 58 */ psq_l f27, 0x158(r1), 0, qr0 +/* 000035B4 00010344 E3 81 01 60 */ psq_l f28, 0x160(r1), 0, qr0 +/* 000035B8 00010348 E3 A1 01 68 */ psq_l f29, 0x168(r1), 0, qr0 +/* 000035BC 0001034C E3 C1 01 70 */ psq_l f30, 0x170(r1), 0, qr0 +/* 000035C0 00010350 E3 E1 01 78 */ psq_l f31, 0x178(r1), 0, qr0 +/* 000035C4 00010354 38 21 01 80 */ addi r1, r1, 0x180 +/* 000035C8 00010358 4E 80 00 20 */ blr +.endfn AdjustHeightAroundCar__11CameraMoverPC8bVector3P8bVector3T2 + +# .text:0x35CC | size: 0x304 +.fn DutchAroundCar__11CameraMoverP8bVector3T1, global +/* 000035CC 0001035C 94 21 FE A8 */ stwu r1, -0x158(r1) +/* 000035D0 00010360 7C 08 02 A6 */ mflr r0 +/* 000035D4 00010364 F2 C1 01 08 */ psq_st f22, 0x108(r1), 0, qr0 +/* 000035D8 00010368 F2 E1 01 10 */ psq_st f23, 0x110(r1), 0, qr0 +.L_000035DC: +/* 000035DC 0001036C F3 01 01 18 */ psq_st f24, 0x118(r1), 0, qr0 +.L_000035E0: +/* 000035E0 00010370 F3 21 01 20 */ psq_st f25, 0x120(r1), 0, qr0 +.L_000035E4: +/* 000035E4 00010374 F3 41 01 28 */ psq_st f26, 0x128(r1), 0, qr0 +/* 000035E8 00010378 F3 61 01 30 */ psq_st f27, 0x130(r1), 0, qr0 +/* 000035EC 0001037C F3 81 01 38 */ psq_st f28, 0x138(r1), 0, qr0 +/* 000035F0 00010380 F3 A1 01 40 */ psq_st f29, 0x140(r1), 0, qr0 +/* 000035F4 00010384 F3 C1 01 48 */ psq_st f30, 0x148(r1), 0, qr0 +/* 000035F8 00010388 F3 E1 01 50 */ psq_st f31, 0x150(r1), 0, qr0 +/* 000035FC 0001038C BE C1 00 E0 */ stmw r22, 0xe0(r1) +/* 00003600 00010390 90 01 01 5C */ stw r0, 0x15c(r1) +/* 00003604 00010394 3D 00 00 00 */ lis r8, _.tmp_1.9192@ha +.L_00003608: +/* 00003608 00010398 7C 9A 23 78 */ mr r26, r4 +/* 0000360C 0001039C 80 08 00 00 */ lwz r0, _.tmp_1.9192@l(r8) +/* 00003610 000103A0 7C BB 2B 78 */ mr r27, r5 +/* 00003614 000103A4 3D 40 00 00 */ lis r10, ret.9191@ha +/* 00003618 000103A8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000361C 000103AC 40 82 36 40 */ bne .L_00006C5C +/* 00003620 000103B0 3D 20 00 00 */ lis r9, .rodata+0x568@ha +/* 00003624 000103B4 39 6A 00 00 */ addi r11, r10, ret.9191@l +/* 00003628 000103B8 C0 09 05 68 */ lfs f0, .rodata+0x568@l(r9) +/* 0000362C 000103BC 38 00 00 01 */ li r0, 0x1 +/* 00003630 000103C0 D0 0B 00 08 */ stfs f0, 0x8(r11) +/* 00003634 000103C4 90 08 00 00 */ stw r0, _.tmp_1.9192@l(r8) +/* 00003638 000103C8 D0 0A 00 00 */ stfs f0, ret.9191@l(r10) +/* 0000363C 000103CC D0 0B 00 04 */ stfs f0, 0x4(r11) +/* 00003640 000103D0 3D 20 00 00 */ lis r9, .rodata+0x568@ha +/* 00003644 000103D4 3D 40 00 00 */ lis r10, ret.9191@ha +/* 00003648 000103D8 C0 09 05 68 */ lfs f0, .rodata+0x568@l(r9) +/* 0000364C 000103DC 39 6A 00 00 */ addi r11, r10, ret.9191@l +/* 00003650 000103E0 3D 20 00 00 */ lis r9, TheAvoidables@ha +/* 00003654 000103E4 3D 00 00 00 */ lis r8, .rodata+0x570@ha +.L_00003658: +/* 00003658 000103E8 D0 0A 00 00 */ stfs f0, ret.9191@l(r10) +/* 0000365C 000103EC 7D 77 5B 78 */ mr r23, r11 +/* 00003660 000103F0 80 E9 00 00 */ lwz r7, TheAvoidables@l(r9) +/* 00003664 000103F4 3D 40 00 00 */ lis r10, .rodata+0x56C@ha +.L_00003668: +/* 00003668 000103F8 D0 0B 00 08 */ stfs f0, 0x8(r11) +/* 0000366C 000103FC 3C C0 00 00 */ lis r6, .rodata+0x574@ha +/* 00003670 00010400 D0 0B 00 04 */ stfs f0, 0x4(r11) +/* 00003674 00010404 FF 80 00 90 */ fmr f28, f0 +/* 00003678 00010408 C2 CA 05 6C */ lfs f22, .rodata+0x56C@l(r10) +/* 0000367C 0001040C 3D 60 00 00 */ lis r11, .rodata+0x578@ha +.L_00003680: +/* 00003680 00010410 81 27 00 04 */ lwz r9, 0x4(r7) +/* 00003684 00010414 3D 40 00 00 */ lis r10, .rodata+0x57C@ha +/* 00003688 00010418 C2 E8 05 70 */ lfs f23, .rodata+0x570@l(r8) +/* 0000368C 0001041C 3C E0 00 00 */ lis r7, .rodata+0x580@ha +/* 00003690 00010420 80 09 00 00 */ lwz r0, 0x0(r9) +/* 00003694 00010424 3D 00 00 00 */ lis r8, .rodata+0x584@ha +.L_00003698: +/* 00003698 00010428 C3 06 05 74 */ lfs f24, .rodata+0x574@l(r6) +/* 0000369C 0001042C 3E C0 00 00 */ lis r22, TheAvoidables@ha +.L_000036A0: +/* 000036A0 00010430 C3 2B 05 78 */ lfs f25, .rodata+0x578@l(r11) +/* 000036A4 00010434 7C 1C 03 78 */ mr r28, r0 +/* 000036A8 00010438 C3 AA 05 7C */ lfs f29, .rodata+0x57C@l(r10) +/* 000036AC 0001043C 3B 01 00 10 */ addi r24, r1, 0x10 +/* 000036B0 00010440 C3 47 05 80 */ lfs f26, .rodata+0x580@l(r7) +/* 000036B4 00010444 3B 21 00 C0 */ addi r25, r1, 0xc0 +/* 000036B8 00010448 C3 68 05 84 */ lfs f27, .rodata+0x584@l(r8) +/* 000036BC 0001044C 90 01 00 08 */ stw r0, 0x8(r1) +/* 000036C0 00010450 81 36 00 00 */ lwz r9, TheAvoidables@l(r22) +/* 000036C4 00010454 39 60 00 01 */ li r11, 0x1 +/* 000036C8 00010458 80 09 00 04 */ lwz r0, 0x4(r9) +/* 000036CC 0001045C 7C 1C 00 00 */ cmpw r28, r0 +/* 000036D0 00010460 90 01 00 08 */ stw r0, 0x8(r1) +/* 000036D4 00010464 40 82 36 DC */ bne .L_00006DB0 +/* 000036D8 00010468 39 60 00 00 */ li r11, 0x0 +/* 000036DC 0001046C 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 000036E0 00010470 41 82 38 8C */ beq .L_00006F6C +/* 000036E4 00010474 83 FC 00 08 */ lwz r31, 0x8(r28) +/* 000036E8 00010478 7F 04 C3 78 */ mr r4, r24 +/* 000036EC 0001047C 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 000036F0 00010480 A8 69 00 10 */ lha r3, 0x10(r9) +/* 000036F4 00010484 80 09 00 14 */ lwz r0, 0x14(r9) +/* 000036F8 00010488 7C 7F 1A 14 */ add r3, r31, r3 +/* 000036FC 0001048C 7C 08 03 A6 */ mtlr r0 +/* 00003700 00010490 4E 80 00 21 */ blrl +/* 00003704 00010494 38 61 00 50 */ addi r3, r1, 0x50 +/* 00003708 00010498 7F 04 C3 78 */ mr r4, r24 +/* 0000370C 0001049C 48 00 00 01 */ bl bConvertFromBond__FR8bMatrix4RC8bMatrix4 +/* 00003710 000104A0 C1 9A 00 04 */ lfs f12, 0x4(r26) +/* 00003714 000104A4 C1 61 00 84 */ lfs f11, 0x84(r1) +.L_00003718: +/* 00003718 000104A8 C1 3A 00 00 */ lfs f9, 0x0(r26) +/* 0000371C 000104AC C0 01 00 80 */ lfs f0, 0x80(r1) +/* 00003720 000104B0 ED 6B 60 28 */ fsubs f11, f11, f12 +/* 00003724 000104B4 C1 5A 00 08 */ lfs f10, 0x8(r26) +/* 00003728 000104B8 ED 8B 02 F2 */ fmuls f12, f11, f11 +/* 0000372C 000104BC C1 A1 00 88 */ lfs f13, 0x88(r1) +/* 00003730 000104C0 EC 00 48 28 */ fsubs f0, f0, f9 +/* 00003734 000104C4 ED 80 60 3A */ fmadds f12, f0, f0, f12 +/* 00003738 000104C8 D0 01 00 90 */ stfs f0, 0x90(r1) +/* 0000373C 000104CC ED AD 50 28 */ fsubs f13, f13, f10 +/* 00003740 000104D0 D1 61 00 94 */ stfs f11, 0x94(r1) +/* 00003744 000104D4 EF ED 63 7A */ fmadds f31, f13, f13, f12 +/* 00003748 000104D8 D1 A1 00 98 */ stfs f13, 0x98(r1) +/* 0000374C 000104DC FC 1F B0 00 */ fcmpu cr0, f31, f22 +/* 00003750 000104E0 4C 62 03 82 */ cror un, eq, lt +/* 00003754 000104E4 41 83 38 84 */ bso .L_00006FD8 +/* 00003758 000104E8 FC 1F B8 00 */ fcmpu cr0, f31, f23 +/* 0000375C 000104EC 4C 62 0B 82 */ cror un, eq, gt +/* 00003760 000104F0 41 83 38 84 */ bso .L_00006FE4 +/* 00003764 000104F4 3B C1 00 90 */ addi r30, r1, 0x90 +.L_00003768: +/* 00003768 000104F8 3B A1 00 A0 */ addi r29, r1, 0xa0 +/* 0000376C 000104FC 7F C4 F3 78 */ mr r4, r30 +/* 00003770 00010500 7F C3 F3 78 */ mr r3, r30 +/* 00003774 00010504 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +/* 00003778 00010508 7F A3 EB 78 */ mr r3, r29 +/* 0000377C 0001050C 7F 64 DB 78 */ mr r4, r27 +/* 00003780 00010510 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +/* 00003784 00010514 C1 81 00 A4 */ lfs f12, 0xa4(r1) +/* 00003788 00010518 C1 61 00 94 */ lfs f11, 0x94(r1) +/* 0000378C 0001051C C1 A1 00 90 */ lfs f13, 0x90(r1) +.L_00003790: +/* 00003790 00010520 ED 6B 03 32 */ fmuls f11, f11, f12 +/* 00003794 00010524 C1 41 00 A0 */ lfs f10, 0xa0(r1) +/* 00003798 00010528 C0 01 00 98 */ lfs f0, 0x98(r1) +/* 0000379C 0001052C C1 81 00 A8 */ lfs f12, 0xa8(r1) +/* 000037A0 00010530 ED AD 5A BA */ fmadds f13, f13, f10, f11 +/* 000037A4 00010534 EC 00 6B 3A */ fmadds f0, f0, f12, f13 +/* 000037A8 00010538 FC 00 C0 00 */ fcmpu cr0, f0, f24 +/* 000037AC 0001053C 4C 62 03 82 */ cror un, eq, lt +/* 000037B0 00010540 41 83 38 84 */ bso .L_00007034 +/* 000037B4 00010544 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 000037B8 00010548 38 81 00 B0 */ addi r4, r1, 0xb0 +/* 000037BC 0001054C ED B9 F8 24 */ fdivs f13, f25, f31 +/* 000037C0 00010550 A8 69 00 18 */ lha r3, 0x18(r9) +/* 000037C4 00010554 FD AD E3 6E */ fsel f13, f13, f13, f28 +/* 000037C8 00010558 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 000037CC 0001055C 7C 7F 1A 14 */ add r3, r31, r3 +/* 000037D0 00010560 7C 08 03 A6 */ mtlr r0 +/* 000037D4 00010564 EC 1D 68 28 */ fsubs f0, f29, f13 +.L_000037D8: +/* 000037D8 00010568 FF C0 EB 6E */ fsel f30, f0, f13, f29 +/* 000037DC 0001056C 4E 80 00 21 */ blrl +/* 000037E0 00010570 C0 01 00 B0 */ lfs f0, 0xb0(r1) +/* 000037E4 00010574 7F 63 DB 78 */ mr r3, r27 +/* 000037E8 00010578 C1 A1 00 B8 */ lfs f13, 0xb8(r1) +/* 000037EC 0001057C 7F 24 CB 78 */ mr r4, r25 +/* 000037F0 00010580 C1 81 00 B4 */ lfs f12, 0xb4(r1) +/* 000037F4 00010584 FC 00 00 50 */ fneg f0, f0 +/* 000037F8 00010588 D1 A1 00 C0 */ stfs f13, 0xc0(r1) +/* 000037FC 0001058C D0 01 00 C4 */ stfs f0, 0xc4(r1) +/* 00003800 00010590 D1 81 00 C8 */ stfs f12, 0xc8(r1) +/* 00003804 00010594 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 +/* 00003808 00010598 EC 21 D0 28 */ fsubs f1, f1, f26 +/* 0000380C 0001059C 7F 24 CB 78 */ mr r4, r25 +/* 00003810 000105A0 EC 21 06 F2 */ fmuls f1, f1, f27 +/* 00003814 000105A4 38 61 00 D0 */ addi r3, r1, 0xd0 +/* 00003818 000105A8 FC 21 E0 6E */ fsel f1, f1, f1, f28 +/* 0000381C 000105AC EC 1D 08 28 */ fsubs f0, f29, f1 +/* 00003820 000105B0 FF E0 E8 6E */ fsel f31, f0, f1, f29 +/* 00003824 000105B4 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +/* 00003828 000105B8 7F A3 EB 78 */ mr r3, r29 +.L_0000382C: +/* 0000382C 000105BC 7F 64 DB 78 */ mr r4, r27 +/* 00003830 000105C0 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +/* 00003834 000105C4 C1 A1 00 D4 */ lfs f13, 0xd4(r1) +/* 00003838 000105C8 FC 20 E0 90 */ fmr f1, f28 +.L_0000383C: +/* 0000383C 000105CC C1 81 00 A4 */ lfs f12, 0xa4(r1) +/* 00003840 000105D0 C0 01 00 A0 */ lfs f0, 0xa0(r1) +.L_00003844: +/* 00003844 000105D4 ED 8C 03 72 */ fmuls f12, f12, f13 +/* 00003848 000105D8 C1 41 00 D0 */ lfs f10, 0xd0(r1) +/* 0000384C 000105DC C1 61 00 A8 */ lfs f11, 0xa8(r1) +/* 00003850 000105E0 C1 A1 00 D8 */ lfs f13, 0xd8(r1) +/* 00003854 000105E4 EC 00 62 BA */ fmadds f0, f0, f10, f12 +/* 00003858 000105E8 EC 0B 03 7A */ fmadds f0, f11, f13, f0 +/* 0000385C 000105EC FC 00 08 00 */ fcmpu cr0, f0, f1 +/* 00003860 000105F0 4C 62 0B 82 */ cror un, eq, gt +/* 00003864 000105F4 41 83 38 6C */ bso .L_000070D0 +.L_00003868: +/* 00003868 000105F8 FC 20 00 50 */ fneg f1, f0 +/* 0000386C 000105FC EC 3F 08 2A */ fadds f1, f31, f1 +.L_00003870: +/* 00003870 00010600 7F C5 F3 78 */ mr r5, r30 +/* 00003874 00010604 EC 3E 00 72 */ fmuls f1, f30, f1 +/* 00003878 00010608 7E E3 BB 78 */ mr r3, r23 +/* 0000387C 0001060C 7E E4 BB 78 */ mr r4, r23 +/* 00003880 00010610 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +/* 00003884 00010614 83 9C 00 00 */ lwz r28, 0x0(r28) +/* 00003888 00010618 48 00 36 C0 */ b .L_00006F48 +/* 0000388C 0001061C 3C 60 00 00 */ lis r3, ret.9191@ha +/* 00003890 00010620 38 63 00 00 */ addi r3, r3, ret.9191@l +/* 00003894 00010624 80 01 01 5C */ lwz r0, 0x15c(r1) +.L_00003898: +/* 00003898 00010628 7C 08 03 A6 */ mtlr r0 +/* 0000389C 0001062C BA C1 00 E0 */ lmw r22, 0xe0(r1) +/* 000038A0 00010630 E2 C1 01 08 */ psq_l f22, 0x108(r1), 0, qr0 +/* 000038A4 00010634 E2 E1 01 10 */ psq_l f23, 0x110(r1), 0, qr0 +/* 000038A8 00010638 E3 01 01 18 */ psq_l f24, 0x118(r1), 0, qr0 +/* 000038AC 0001063C E3 21 01 20 */ psq_l f25, 0x120(r1), 0, qr0 +/* 000038B0 00010640 E3 41 01 28 */ psq_l f26, 0x128(r1), 0, qr0 +/* 000038B4 00010644 E3 61 01 30 */ psq_l f27, 0x130(r1), 0, qr0 +/* 000038B8 00010648 E3 81 01 38 */ psq_l f28, 0x138(r1), 0, qr0 +/* 000038BC 0001064C E3 A1 01 40 */ psq_l f29, 0x140(r1), 0, qr0 +/* 000038C0 00010650 E3 C1 01 48 */ psq_l f30, 0x148(r1), 0, qr0 +/* 000038C4 00010654 E3 E1 01 50 */ psq_l f31, 0x150(r1), 0, qr0 +/* 000038C8 00010658 38 21 01 58 */ addi r1, r1, 0x158 +/* 000038CC 0001065C 4E 80 00 20 */ blr +.endfn DutchAroundCar__11CameraMoverP8bVector3T1 + +# .text:0x38D0 | size: 0x220 +.fn MinGapCars__11CameraMoverP8bMatrix4P8bVector3T2, global +/* 000038D0 00010660 94 21 FF 78 */ stwu r1, -0x88(r1) +/* 000038D4 00010664 7C 08 02 A6 */ mflr r0 +/* 000038D8 00010668 F3 E1 00 80 */ psq_st f31, 0x80(r1), 0, qr0 +/* 000038DC 0001066C BF 01 00 60 */ stmw r24, 0x60(r1) +/* 000038E0 00010670 90 01 00 8C */ stw r0, 0x8c(r1) +/* 000038E4 00010674 7C 7F 1B 78 */ mr r31, r3 +/* 000038E8 00010678 7C 9B 23 78 */ mr r27, r4 +/* 000038EC 0001067C 7C BA 2B 78 */ mr r26, r5 +/* 000038F0 00010680 7C DD 33 78 */ mr r29, r6 +/* 000038F4 00010684 38 61 00 08 */ addi r3, r1, 0x8 +/* 000038F8 00010688 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 +/* 000038FC 0001068C 3B 20 00 00 */ li r25, 0x0 +/* 00003900 00010690 C3 E1 00 40 */ lfs f31, 0x40(r1) +/* 00003904 00010694 3B C1 00 38 */ addi r30, r1, 0x38 +/* 00003908 00010698 3B 80 00 00 */ li r28, 0x0 +/* 0000390C 0001069C 3B 01 00 48 */ addi r24, r1, 0x48 +/* 00003910 000106A0 48 00 39 40 */ b .L_00007250 +.L_00003914: +/* 00003914 000106A4 C0 1E 00 08 */ lfs f0, 0x8(r30) +/* 00003918 000106A8 3B 20 00 01 */ li r25, 0x1 +/* 0000391C 000106AC 3B 9C 00 01 */ addi r28, r28, 0x1 +/* 00003920 000106B0 7F E3 FB 78 */ mr r3, r31 +/* 00003924 000106B4 7F C4 F3 78 */ mr r4, r30 +/* 00003928 000106B8 FC 00 08 2A */ fadd f0, f0, f1 +/* 0000392C 000106BC 7F 45 D3 78 */ mr r5, r26 +/* 00003930 000106C0 FC 00 00 18 */ frsp f0, f0 +/* 00003934 000106C4 7F A6 EB 78 */ mr r6, r29 +/* 00003938 000106C8 D0 1E 00 08 */ stfs f0, 0x8(r30) +/* 0000393C 000106CC 48 00 32 AD */ bl .L_00006BE8 +/* 00003940 000106D0 7F E3 FB 78 */ mr r3, r31 +/* 00003944 000106D4 7F C4 F3 78 */ mr r4, r30 +.L_00003948: +/* 00003948 000106D8 7F 45 D3 78 */ mr r5, r26 +/* 0000394C 000106DC 7F A6 EB 78 */ mr r6, r29 +/* 00003950 000106E0 48 00 32 AD */ bl .L_00006BFC +.L_00003954: +/* 00003954 000106E4 2C 1C 00 0F */ cmpwi r28, 0xf +/* 00003958 000106E8 41 81 39 6C */ bgt .L_000072C4 +.L_0000395C: +/* 0000395C 000106EC 3D 20 00 00 */ lis r9, .rodata+0x588@ha +.L_00003960: +/* 00003960 000106F0 C8 09 05 88 */ lfd f0, .rodata+0x588@l(r9) +/* 00003964 000106F4 FC 01 00 00 */ fcmpu cr0, f1, f0 +.L_00003968: +/* 00003968 000106F8 41 81 39 14 */ bgt .L_0000727C +/* 0000396C 000106FC C1 3B 00 00 */ lfs f9, 0x0(r27) +/* 00003970 00010700 3D 40 00 00 */ lis r10, .rodata+0x590@ha +/* 00003974 00010704 C1 5B 00 08 */ lfs f10, 0x8(r27) +/* 00003978 00010708 3D 60 00 00 */ lis r11, .rodata+0x594@ha +.L_0000397C: +/* 0000397C 0001070C C1 9B 00 04 */ lfs f12, 0x4(r27) +/* 00003980 00010710 3D 20 00 00 */ lis r9, .rodata+0x598@ha +/* 00003984 00010714 C1 BF 00 70 */ lfs f13, 0x70(r31) +/* 00003988 00010718 C0 1F 00 74 */ lfs f0, 0x74(r31) +/* 0000398C 0001071C C1 7F 00 78 */ lfs f11, 0x78(r31) +/* 00003990 00010720 D1 5F 00 78 */ stfs f10, 0x78(r31) +/* 00003994 00010724 EC 00 03 32 */ fmuls f0, f0, f12 +/* 00003998 00010728 D1 3F 00 70 */ stfs f9, 0x70(r31) +/* 0000399C 0001072C ED AD 02 7A */ fmadds f13, f13, f9, f0 +/* 000039A0 00010730 D1 9F 00 74 */ stfs f12, 0x74(r31) +/* 000039A4 00010734 EC EB 6A BA */ fmadds f7, f11, f10, f13 +/* 000039A8 00010738 C1 9E 00 08 */ lfs f12, 0x8(r30) +/* 000039AC 0001073C C0 1D 00 04 */ lfs f0, 0x4(r29) +/* 000039B0 00010740 ED 4C F8 28 */ fsubs f10, f12, f31 +/* 000039B4 00010744 C1 BD 00 00 */ lfs f13, 0x0(r29) +/* 000039B8 00010748 EC 00 00 32 */ fmuls f0, f0, f0 +.L_000039BC: +/* 000039BC 0001074C C1 8A 05 90 */ lfs f12, .rodata+0x590@l(r10) +/* 000039C0 00010750 ED AD 03 7A */ fmadds f13, f13, f13, f0 +/* 000039C4 00010754 C1 2B 05 94 */ lfs f9, .rodata+0x594@l(r11) +/* 000039C8 00010758 C1 09 05 98 */ lfs f8, .rodata+0x598@l(r9) +.L_000039CC: +/* 000039CC 0001075C FC 0D 60 00 */ fcmpu cr0, f13, f12 +/* 000039D0 00010760 4C 62 03 82 */ cror un, eq, lt +/* 000039D4 00010764 41 83 3A 04 */ bso .L_000073D8 +/* 000039D8 00010768 FD 80 68 34 */ frsqrte f12, f13 +.L_000039DC: +/* 000039DC 0001076C EC 0C 03 32 */ fmuls f0, f12, f12 +/* 000039E0 00010770 ED 6C 02 72 */ fmuls f11, f12, f9 +/* 000039E4 00010774 EC 0D 40 3C */ fnmsubs f0, f13, f0, f8 +/* 000039E8 00010778 ED 80 62 FA */ fmadds f12, f0, f11, f12 +/* 000039EC 0001077C EC 0C 03 32 */ fmuls f0, f12, f12 +/* 000039F0 00010780 ED 6C 02 72 */ fmuls f11, f12, f9 +/* 000039F4 00010784 EC 0D 40 3C */ fnmsubs f0, f13, f0, f8 +/* 000039F8 00010788 ED 80 62 FA */ fmadds f12, f0, f11, f12 +/* 000039FC 0001078C ED 8C 03 72 */ fmuls f12, f12, f13 +/* 00003A00 00010790 48 00 3A 0C */ b .L_0000740C +/* 00003A04 00010794 3D 20 00 00 */ lis r9, .rodata+0x59C@ha +/* 00003A08 00010798 C1 89 05 9C */ lfs f12, .rodata+0x59C@l(r9) +/* 00003A0C 0001079C 3D 20 00 00 */ lis r9, .rodata+0x598@ha +/* 00003A10 000107A0 C0 09 05 98 */ lfs f0, .rodata+0x598@l(r9) +/* 00003A14 000107A4 FC 0C 00 00 */ fcmpu cr0, f12, f0 +.L_00003A18: +/* 00003A18 000107A8 4C 62 0B 82 */ cror un, eq, gt +/* 00003A1C 000107AC 41 83 3A 48 */ bso .L_00007464 +/* 00003A20 000107B0 3D 20 00 00 */ lis r9, .rodata+0x5A0@ha +/* 00003A24 000107B4 C0 09 05 A0 */ lfs f0, .rodata+0x5A0@l(r9) +/* 00003A28 000107B8 FC 07 00 00 */ fcmpu cr0, f7, f0 +/* 00003A2C 000107BC 4C 62 03 82 */ cror un, eq, lt +/* 00003A30 000107C0 41 83 3A 48 */ bso .L_00007478 +/* 00003A34 000107C4 C0 1F 00 6C */ lfs f0, 0x6c(r31) +/* 00003A38 000107C8 FC 0A 00 00 */ fcmpu cr0, f10, f0 +/* 00003A3C 000107CC 4C 62 0B 82 */ cror un, eq, gt +/* 00003A40 000107D0 41 83 3A 48 */ bso .L_00007488 +/* 00003A44 000107D4 FD 40 00 90 */ fmr f10, f0 +.L_00003A48: +/* 00003A48 000107D8 C1 9F 00 68 */ lfs f12, 0x68(r31) +/* 00003A4C 000107DC 3D 20 00 00 */ lis r9, .rodata+0x594@ha +/* 00003A50 000107E0 C1 A9 05 94 */ lfs f13, .rodata+0x594@l(r9) +/* 00003A54 000107E4 7F 03 C3 78 */ mr r3, r24 +/* 00003A58 000107E8 EC 0C 50 2A */ fadds f0, f12, f10 +/* 00003A5C 000107EC D1 5F 00 6C */ stfs f10, 0x6c(r31) +/* 00003A60 000107F0 EC 00 03 72 */ fmuls f0, f0, f13 +/* 00003A64 000107F4 7F 64 DB 78 */ mr r4, r27 +.L_00003A68: +/* 00003A68 000107F8 ED AA 00 28 */ fsubs f13, f10, f0 +/* 00003A6C 000107FC 7F 45 D3 78 */ mr r5, r26 +/* 00003A70 00010800 ED 8C 68 2A */ fadds f12, f12, f13 +/* 00003A74 00010804 EC 1F 00 2A */ fadds f0, f31, f0 +/* 00003A78 00010808 D1 9F 00 68 */ stfs f12, 0x68(r31) +/* 00003A7C 0001080C D0 1E 00 08 */ stfs f0, 0x8(r30) +/* 00003A80 00010810 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 +/* 00003A84 00010814 3D 20 00 00 */ lis r9, .rodata+0x59C@ha +/* 00003A88 00010818 C1 81 00 50 */ lfs f12, 0x50(r1) +/* 00003A8C 0001081C C0 09 05 9C */ lfs f0, .rodata+0x59C@l(r9) +/* 00003A90 00010820 FC 0C 00 00 */ fcmpu cr0, f12, f0 +/* 00003A94 00010824 4C 62 03 82 */ cror un, eq, lt +/* 00003A98 00010828 41 83 3A D0 */ bso .L_00007568 +/* 00003A9C 0001082C C1 A1 00 48 */ lfs f13, 0x48(r1) +.L_00003AA0: +/* 00003AA0 00010830 7F E3 FB 78 */ mr r3, r31 +/* 00003AA4 00010834 C0 01 00 4C */ lfs f0, 0x4c(r1) +/* 00003AA8 00010838 7F 64 DB 78 */ mr r4, r27 +/* 00003AAC 0001083C ED AD 60 24 */ fdivs f13, f13, f12 +.L_00003AB0: +/* 00003AB0 00010840 7F C5 F3 78 */ mr r5, r30 +/* 00003AB4 00010844 7F 46 D3 78 */ mr r6, r26 +/* 00003AB8 00010848 38 E1 00 58 */ addi r7, r1, 0x58 +/* 00003ABC 0001084C EC 00 60 24 */ fdivs f0, f0, f12 +.L_00003AC0: +/* 00003AC0 00010850 D1 A1 00 58 */ stfs f13, 0x58(r1) +/* 00003AC4 00010854 D0 01 00 5C */ stfs f0, 0x5c(r1) +/* 00003AC8 00010858 48 00 31 C1 */ bl .L_00006C88 +/* 00003ACC 0001085C 48 00 3A D4 */ b .L_000075A0 +/* 00003AD0 00010860 3B 20 00 00 */ li r25, 0x0 +/* 00003AD4 00010864 7F 23 CB 78 */ mr r3, r25 +/* 00003AD8 00010868 80 01 00 8C */ lwz r0, 0x8c(r1) +/* 00003ADC 0001086C 7C 08 03 A6 */ mtlr r0 +/* 00003AE0 00010870 BB 01 00 60 */ lmw r24, 0x60(r1) +/* 00003AE4 00010874 E3 E1 00 80 */ psq_l f31, 0x80(r1), 0, qr0 +/* 00003AE8 00010878 38 21 00 88 */ addi r1, r1, 0x88 +/* 00003AEC 0001087C 4E 80 00 20 */ blr +.endfn MinGapCars__11CameraMoverP8bMatrix4P8bVector3T2 + +# .text:0x3AF0 | size: 0xD4 +.fn MinGapTopology__11CameraMoverP8bMatrix4P8bVector3, global +/* 00003AF0 00010880 94 21 FF 80 */ stwu r1, -0x80(r1) +/* 00003AF4 00010884 7C 08 02 A6 */ mflr r0 +/* 00003AF8 00010888 BF A1 00 74 */ stmw r29, 0x74(r1) +/* 00003AFC 0001088C 90 01 00 84 */ stw r0, 0x84(r1) +/* 00003B00 00010890 7C 9F 23 78 */ mr r31, r4 +/* 00003B04 00010894 7C 7D 1B 78 */ mr r29, r3 +.L_00003B08: +/* 00003B08 00010898 7C BE 2B 78 */ mr r30, r5 +/* 00003B0C 0001089C 38 61 00 08 */ addi r3, r1, 0x8 +/* 00003B10 000108A0 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 +/* 00003B14 000108A4 3D 20 00 00 */ lis r9, .rodata+0x5A4@ha +/* 00003B18 000108A8 C1 BE 00 08 */ lfs f13, 0x8(r30) +/* 00003B1C 000108AC C0 09 05 A4 */ lfs f0, .rodata+0x5A4@l(r9) +/* 00003B20 000108B0 C1 7F 00 38 */ lfs f11, 0x38(r31) +/* 00003B24 000108B4 ED AD 00 2A */ fadds f13, f13, f0 +/* 00003B28 000108B8 C1 9F 00 30 */ lfs f12, 0x30(r31) +/* 00003B2C 000108BC C0 1F 00 34 */ lfs f0, 0x34(r31) +/* 00003B30 000108C0 FC 0B 68 00 */ fcmpu cr0, f11, f13 +/* 00003B34 000108C4 D1 81 00 48 */ stfs f12, 0x48(r1) +/* 00003B38 000108C8 D0 01 00 4C */ stfs f0, 0x4c(r1) +/* 00003B3C 000108CC D1 61 00 50 */ stfs f11, 0x50(r1) +.L_00003B40: +/* 00003B40 000108D0 4C 62 0B 82 */ cror un, eq, gt +/* 00003B44 000108D4 41 83 3B 4C */ bso .L_00007690 +/* 00003B48 000108D8 D1 A1 00 50 */ stfs f13, 0x50(r1) +/* 00003B4C 000108DC 38 61 00 58 */ addi r3, r1, 0x58 +/* 00003B50 000108E0 7F E4 FB 78 */ mr r4, r31 +/* 00003B54 000108E4 7F C5 F3 78 */ mr r5, r30 +/* 00003B58 000108E8 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 +/* 00003B5C 000108EC 3D 20 00 00 */ lis r9, .rodata+0x5A8@ha +/* 00003B60 000108F0 C1 81 00 60 */ lfs f12, 0x60(r1) +/* 00003B64 000108F4 C0 09 05 A8 */ lfs f0, .rodata+0x5A8@l(r9) +/* 00003B68 000108F8 FC 0C 00 00 */ fcmpu cr0, f12, f0 +/* 00003B6C 000108FC 4C 62 03 82 */ cror un, eq, lt +.L_00003B70: +/* 00003B70 00010900 41 83 3B AC */ bso .L_0000771C +/* 00003B74 00010904 C1 A1 00 58 */ lfs f13, 0x58(r1) +/* 00003B78 00010908 7F A3 EB 78 */ mr r3, r29 +/* 00003B7C 0001090C C0 01 00 5C */ lfs f0, 0x5c(r1) +/* 00003B80 00010910 7F E4 FB 78 */ mr r4, r31 +/* 00003B84 00010914 ED AD 60 24 */ fdivs f13, f13, f12 +/* 00003B88 00010918 7F C6 F3 78 */ mr r6, r30 +/* 00003B8C 0001091C 38 A1 00 48 */ addi r5, r1, 0x48 +/* 00003B90 00010920 38 E1 00 68 */ addi r7, r1, 0x68 +/* 00003B94 00010924 EC 00 60 24 */ fdivs f0, f0, f12 +/* 00003B98 00010928 D1 A1 00 68 */ stfs f13, 0x68(r1) +/* 00003B9C 0001092C D0 01 00 6C */ stfs f0, 0x6c(r1) +/* 00003BA0 00010930 48 00 31 C1 */ bl .L_00006D60 +/* 00003BA4 00010934 38 60 00 01 */ li r3, 0x1 +.L_00003BA8: +/* 00003BA8 00010938 48 00 3B B0 */ b .L_00007758 +/* 00003BAC 0001093C 38 60 00 00 */ li r3, 0x0 +/* 00003BB0 00010940 80 01 00 84 */ lwz r0, 0x84(r1) +/* 00003BB4 00010944 7C 08 03 A6 */ mtlr r0 +/* 00003BB8 00010948 BB A1 00 74 */ lmw r29, 0x74(r1) +/* 00003BBC 0001094C 38 21 00 80 */ addi r1, r1, 0x80 +/* 00003BC0 00010950 4E 80 00 20 */ blr +.endfn MinGapTopology__11CameraMoverP8bMatrix4P8bVector3 + +# .text:0x3BC4 | size: 0xAC +.fn FovCubicInit__11CameraMoverP8tCubic1D, global +/* 00003BC4 00010954 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00003BC8 00010958 81 43 00 1C */ lwz r10, 0x1c(r3) +/* 00003BCC 0001095C 3C E0 43 30 */ lis r7, 0x4330 +/* 00003BD0 00010960 7D 68 5B 78 */ mr r8, r11 +/* 00003BD4 00010964 A0 0A 00 C4 */ lhz r0, 0xc4(r10) +/* 00003BD8 00010968 7D 66 5B 78 */ mr r6, r11 +/* 00003BDC 0001096C A0 AA 02 6C */ lhz r5, 0x26c(r10) +.L_00003BE0: +/* 00003BE0 00010970 3D 20 00 00 */ lis r9, .rodata+0x5B0@ha +/* 00003BE4 00010974 90 01 00 0C */ stw r0, 0xc(r1) +/* 00003BE8 00010978 3D 40 00 00 */ lis r10, .rodata+0x5B8@ha +/* 00003BEC 0001097C C9 69 05 B0 */ lfd f11, .rodata+0x5B0@l(r9) +/* 00003BF0 00010980 90 E1 00 08 */ stw r7, 0x8(r1) +/* 00003BF4 00010984 C1 2A 05 B8 */ lfs f9, .rodata+0x5B8@l(r10) +/* 00003BF8 00010988 C9 81 00 08 */ lfd f12, 0x8(r1) +/* 00003BFC 0001098C 90 A1 00 0C */ stw r5, 0xc(r1) +/* 00003C00 00010990 FD 8C 58 28 */ fsub f12, f12, f11 +/* 00003C04 00010994 C1 04 00 24 */ lfs f8, 0x24(r4) +/* 00003C08 00010998 90 E1 00 08 */ stw r7, 0x8(r1) +/* 00003C0C 0001099C FD 80 60 18 */ frsp f12, f12 +/* 00003C10 000109A0 C1 44 00 08 */ lfs f10, 0x8(r4) +/* 00003C14 000109A4 C8 01 00 08 */ lfd f0, 0x8(r1) +/* 00003C18 000109A8 90 A1 00 0C */ stw r5, 0xc(r1) +.L_00003C1C: +/* 00003C1C 000109AC FC 00 58 28 */ fsub f0, f0, f11 +/* 00003C20 000109B0 90 E1 00 08 */ stw r7, 0x8(r1) +/* 00003C24 000109B4 FC 00 00 18 */ frsp f0, f0 +/* 00003C28 000109B8 EC 00 62 7A */ fmadds f0, f0, f9, f12 +/* 00003C2C 000109BC C9 A1 00 08 */ lfd f13, 0x8(r1) +/* 00003C30 000109C0 FC 00 50 00 */ fcmpu cr0, f0, f10 +/* 00003C34 000109C4 D0 04 00 00 */ stfs f0, 0x0(r4) +/* 00003C38 000109C8 FD AD 58 28 */ fsub f13, f13, f11 +/* 00003C3C 000109CC FD A0 68 18 */ frsp f13, f13 +/* 00003C40 000109D0 ED AD 02 32 */ fmuls f13, f13, f8 +/* 00003C44 000109D4 41 82 3C 50 */ beq .L_00007894 +.L_00003C48: +/* 00003C48 000109D8 38 00 00 02 */ li r0, 0x2 +/* 00003C4C 000109DC B0 04 00 28 */ sth r0, 0x28(r4) +/* 00003C50 000109E0 C0 04 00 0C */ lfs f0, 0xc(r4) +/* 00003C54 000109E4 D1 A4 00 04 */ stfs f13, 0x4(r4) +/* 00003C58 000109E8 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 00003C5C 000109EC 41 82 3C 68 */ beq .L_000078C4 +/* 00003C60 000109F0 38 00 00 02 */ li r0, 0x2 +/* 00003C64 000109F4 B0 04 00 28 */ sth r0, 0x28(r4) +/* 00003C68 000109F8 38 21 00 10 */ addi r1, r1, 0x10 +.L_00003C6C: +/* 00003C6C 000109FC 4E 80 00 20 */ blr +.endfn FovCubicInit__11CameraMoverP8tCubic1D + +# .text:0x3C70 | size: 0x124 +.fn EyeCubicInit__11CameraMoverP8tCubic3DP8bMatrix4P8bVector3, global +/* 00003C70 00010A00 94 21 FF B0 */ stwu r1, -0x50(r1) +.L_00003C74: +/* 00003C74 00010A04 7C 08 02 A6 */ mflr r0 +/* 00003C78 00010A08 7D 80 00 26 */ mfcr r12 +/* 00003C7C 00010A0C BF 81 00 40 */ stmw r28, 0x40(r1) +/* 00003C80 00010A10 90 01 00 54 */ stw r0, 0x54(r1) +/* 00003C84 00010A14 91 81 00 3C */ stw r12, 0x3c(r1) +/* 00003C88 00010A18 7C 7C 1B 78 */ mr r28, r3 +/* 00003C8C 00010A1C 3D 20 00 00 */ lis r9, .rodata+0x5BC@ha +/* 00003C90 00010A20 81 7C 00 1C */ lwz r11, 0x1c(r28) +/* 00003C94 00010A24 7C BE 2B 78 */ mr r30, r5 +.L_00003C98: +/* 00003C98 00010A28 7C 9D 23 78 */ mr r29, r4 +/* 00003C9C 00010A2C C0 29 05 BC */ lfs f1, .rodata+0x5BC@l(r9) +/* 00003CA0 00010A30 2E 1E 00 00 */ cmpwi cr4, r30, 0x0 +/* 00003CA4 00010A34 7C DF 33 78 */ mr r31, r6 +/* 00003CA8 00010A38 38 AB 01 E8 */ addi r5, r11, 0x1e8 +/* 00003CAC 00010A3C 38 61 00 08 */ addi r3, r1, 0x8 +/* 00003CB0 00010A40 38 8B 00 40 */ addi r4, r11, 0x40 +/* 00003CB4 00010A44 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +.L_00003CB8: +/* 00003CB8 00010A48 41 92 3C CC */ beq cr4, .L_00007984 +/* 00003CBC 00010A4C 38 61 00 08 */ addi r3, r1, 0x8 +/* 00003CC0 00010A50 7F C4 F3 78 */ mr r4, r30 +.L_00003CC4: +/* 00003CC4 00010A54 7C 65 1B 78 */ mr r5, r3 +/* 00003CC8 00010A58 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 +/* 00003CCC 00010A5C 7F A3 EB 78 */ mr r3, r29 +/* 00003CD0 00010A60 38 81 00 08 */ addi r4, r1, 0x8 +/* 00003CD4 00010A64 48 00 00 01 */ bl SetVal__8tCubic3DPC8bVector3 +/* 00003CD8 00010A68 81 3C 00 1C */ lwz r9, 0x1c(r28) +/* 00003CDC 00010A6C 2C 1F 00 00 */ cmpwi r31, 0x0 +/* 00003CE0 00010A70 C1 49 01 F0 */ lfs f10, 0x1f0(r9) +/* 00003CE4 00010A74 C1 69 01 E8 */ lfs f11, 0x1e8(r9) +/* 00003CE8 00010A78 C1 29 01 EC */ lfs f9, 0x1ec(r9) +/* 00003CEC 00010A7C D1 61 00 18 */ stfs f11, 0x18(r1) +/* 00003CF0 00010A80 D1 21 00 1C */ stfs f9, 0x1c(r1) +/* 00003CF4 00010A84 D1 41 00 20 */ stfs f10, 0x20(r1) +/* 00003CF8 00010A88 41 82 3D 20 */ beq .L_00007A18 +/* 00003CFC 00010A8C C0 1F 00 08 */ lfs f0, 0x8(r31) +/* 00003D00 00010A90 C1 BF 00 00 */ lfs f13, 0x0(r31) +/* 00003D04 00010A94 C1 9F 00 04 */ lfs f12, 0x4(r31) +/* 00003D08 00010A98 EC 0A 00 28 */ fsubs f0, f10, f0 +/* 00003D0C 00010A9C ED AB 68 28 */ fsubs f13, f11, f13 +/* 00003D10 00010AA0 D0 01 00 20 */ stfs f0, 0x20(r1) +/* 00003D14 00010AA4 ED 89 60 28 */ fsubs f12, f9, f12 +/* 00003D18 00010AA8 D1 A1 00 18 */ stfs f13, 0x18(r1) +/* 00003D1C 00010AAC D1 81 00 1C */ stfs f12, 0x1c(r1) +/* 00003D20 00010AB0 C1 7D 00 24 */ lfs f11, 0x24(r29) +/* 00003D24 00010AB4 3D 20 00 00 */ lis r9, .rodata+0x5C0@ha +/* 00003D28 00010AB8 C1 81 00 18 */ lfs f12, 0x18(r1) +/* 00003D2C 00010ABC 3B E1 00 28 */ addi r31, r1, 0x28 +/* 00003D30 00010AC0 C0 01 00 1C */ lfs f0, 0x1c(r1) +/* 00003D34 00010AC4 C1 A1 00 20 */ lfs f13, 0x20(r1) +/* 00003D38 00010AC8 ED 8C 02 F2 */ fmuls f12, f12, f11 +/* 00003D3C 00010ACC C1 49 05 C0 */ lfs f10, .rodata+0x5C0@l(r9) +/* 00003D40 00010AD0 EC 00 02 F2 */ fmuls f0, f0, f11 +/* 00003D44 00010AD4 ED AD 02 F2 */ fmuls f13, f13, f11 +.L_00003D48: +/* 00003D48 00010AD8 D1 81 00 28 */ stfs f12, 0x28(r1) +/* 00003D4C 00010ADC D0 01 00 2C */ stfs f0, 0x2c(r1) +/* 00003D50 00010AE0 D1 A1 00 30 */ stfs f13, 0x30(r1) +/* 00003D54 00010AE4 D1 41 00 34 */ stfs f10, 0x34(r1) +/* 00003D58 00010AE8 41 92 3D 6C */ beq cr4, .L_00007AC4 +/* 00003D5C 00010AEC 7F C4 F3 78 */ mr r4, r30 +/* 00003D60 00010AF0 7F E3 FB 78 */ mr r3, r31 +/* 00003D64 00010AF4 7F E5 FB 78 */ mr r5, r31 +.L_00003D68: +/* 00003D68 00010AF8 48 00 00 01 */ bl bMulMatrix__FP8bVector4PC8bMatrix4PC8bVector4 +/* 00003D6C 00010AFC 7F A3 EB 78 */ mr r3, r29 +/* 00003D70 00010B00 7F E4 FB 78 */ mr r4, r31 +/* 00003D74 00010B04 48 00 00 01 */ bl SetdVal__8tCubic3DP8bVector3 +/* 00003D78 00010B08 80 01 00 54 */ lwz r0, 0x54(r1) +/* 00003D7C 00010B0C 81 81 00 3C */ lwz r12, 0x3c(r1) +/* 00003D80 00010B10 7C 08 03 A6 */ mtlr r0 +/* 00003D84 00010B14 BB 81 00 40 */ lmw r28, 0x40(r1) +/* 00003D88 00010B18 7D 80 81 20 */ mtcrf 8, r12 +/* 00003D8C 00010B1C 38 21 00 50 */ addi r1, r1, 0x50 +.L_00003D90: +/* 00003D90 00010B20 4E 80 00 20 */ blr +.endfn EyeCubicInit__11CameraMoverP8tCubic3DP8bMatrix4P8bVector3 + +# .text:0x3D94 | size: 0x124 +.fn LookCubicInit__11CameraMoverP8tCubic3DP8bMatrix4P8bVector3, global +/* 00003D94 00010B24 94 21 FF B0 */ stwu r1, -0x50(r1) +/* 00003D98 00010B28 7C 08 02 A6 */ mflr r0 +/* 00003D9C 00010B2C 7D 80 00 26 */ mfcr r12 +/* 00003DA0 00010B30 BF 81 00 40 */ stmw r28, 0x40(r1) +/* 00003DA4 00010B34 90 01 00 54 */ stw r0, 0x54(r1) +/* 00003DA8 00010B38 91 81 00 3C */ stw r12, 0x3c(r1) +/* 00003DAC 00010B3C 7C 7C 1B 78 */ mr r28, r3 +/* 00003DB0 00010B40 3D 20 00 00 */ lis r9, .rodata+0x5C4@ha +/* 00003DB4 00010B44 81 7C 00 1C */ lwz r11, 0x1c(r28) +.L_00003DB8: +/* 00003DB8 00010B48 7C BE 2B 78 */ mr r30, r5 +/* 00003DBC 00010B4C 7C 9D 23 78 */ mr r29, r4 +/* 00003DC0 00010B50 C0 29 05 C4 */ lfs f1, .rodata+0x5C4@l(r9) +/* 00003DC4 00010B54 2E 1E 00 00 */ cmpwi cr4, r30, 0x0 +/* 00003DC8 00010B58 7C DF 33 78 */ mr r31, r6 +/* 00003DCC 00010B5C 38 AB 02 08 */ addi r5, r11, 0x208 +/* 00003DD0 00010B60 38 61 00 08 */ addi r3, r1, 0x8 +/* 00003DD4 00010B64 38 8B 00 60 */ addi r4, r11, 0x60 +.L_00003DD8: +/* 00003DD8 00010B68 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +/* 00003DDC 00010B6C 41 92 3D F0 */ beq cr4, .L_00007BCC +/* 00003DE0 00010B70 38 61 00 08 */ addi r3, r1, 0x8 +/* 00003DE4 00010B74 7F C4 F3 78 */ mr r4, r30 +/* 00003DE8 00010B78 7C 65 1B 78 */ mr r5, r3 +/* 00003DEC 00010B7C 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 +/* 00003DF0 00010B80 7F A3 EB 78 */ mr r3, r29 +/* 00003DF4 00010B84 38 81 00 08 */ addi r4, r1, 0x8 +/* 00003DF8 00010B88 48 00 00 01 */ bl SetVal__8tCubic3DPC8bVector3 +/* 00003DFC 00010B8C 81 3C 00 1C */ lwz r9, 0x1c(r28) +/* 00003E00 00010B90 2C 1F 00 00 */ cmpwi r31, 0x0 +/* 00003E04 00010B94 C1 49 02 10 */ lfs f10, 0x210(r9) +/* 00003E08 00010B98 C1 69 02 08 */ lfs f11, 0x208(r9) +/* 00003E0C 00010B9C C1 29 02 0C */ lfs f9, 0x20c(r9) +/* 00003E10 00010BA0 D1 61 00 18 */ stfs f11, 0x18(r1) +.L_00003E14: +/* 00003E14 00010BA4 D1 21 00 1C */ stfs f9, 0x1c(r1) +/* 00003E18 00010BA8 D1 41 00 20 */ stfs f10, 0x20(r1) +/* 00003E1C 00010BAC 41 82 3E 44 */ beq StartCinematicSlowdown__8CameraAI8EVIEW_IDf +/* 00003E20 00010BB0 C0 1F 00 08 */ lfs f0, 0x8(r31) +/* 00003E24 00010BB4 C1 BF 00 00 */ lfs f13, 0x0(r31) +/* 00003E28 00010BB8 C1 9F 00 04 */ lfs f12, 0x4(r31) +/* 00003E2C 00010BBC EC 0A 00 28 */ fsubs f0, f10, f0 +/* 00003E30 00010BC0 ED AB 68 28 */ fsubs f13, f11, f13 +/* 00003E34 00010BC4 D0 01 00 20 */ stfs f0, 0x20(r1) +/* 00003E38 00010BC8 ED 89 60 28 */ fsubs f12, f9, f12 +/* 00003E3C 00010BCC D1 A1 00 18 */ stfs f13, 0x18(r1) +/* 00003E40 00010BD0 D1 81 00 1C */ stfs f12, 0x1c(r1) +/* 00003E44 00010BD4 C1 7D 00 24 */ lfs f11, 0x24(r29) +/* 00003E48 00010BD8 3D 20 00 00 */ lis r9, .rodata+0x5C8@ha +/* 00003E4C 00010BDC C1 81 00 18 */ lfs f12, 0x18(r1) +/* 00003E50 00010BE0 3B E1 00 28 */ addi r31, r1, 0x28 +/* 00003E54 00010BE4 C0 01 00 1C */ lfs f0, 0x1c(r1) +/* 00003E58 00010BE8 C1 A1 00 20 */ lfs f13, 0x20(r1) +/* 00003E5C 00010BEC ED 8C 02 F2 */ fmuls f12, f12, f11 +/* 00003E60 00010BF0 C1 49 05 C8 */ lfs f10, .rodata+0x5C8@l(r9) +/* 00003E64 00010BF4 EC 00 02 F2 */ fmuls f0, f0, f11 +/* 00003E68 00010BF8 ED AD 02 F2 */ fmuls f13, f13, f11 +/* 00003E6C 00010BFC D1 81 00 28 */ stfs f12, 0x28(r1) +/* 00003E70 00010C00 D0 01 00 2C */ stfs f0, 0x2c(r1) +/* 00003E74 00010C04 D1 A1 00 30 */ stfs f13, 0x30(r1) +/* 00003E78 00010C08 D1 41 00 34 */ stfs f10, 0x34(r1) +/* 00003E7C 00010C0C 41 92 3E 90 */ beq cr4, .L_00007D0C +/* 00003E80 00010C10 7F C4 F3 78 */ mr r4, r30 +/* 00003E84 00010C14 7F E3 FB 78 */ mr r3, r31 +/* 00003E88 00010C18 7F E5 FB 78 */ mr r5, r31 +/* 00003E8C 00010C1C 48 00 00 01 */ bl bMulMatrix__FP8bVector4PC8bMatrix4PC8bVector4 +/* 00003E90 00010C20 7F A3 EB 78 */ mr r3, r29 +/* 00003E94 00010C24 7F E4 FB 78 */ mr r4, r31 +/* 00003E98 00010C28 48 00 00 01 */ bl SetdVal__8tCubic3DP8bVector3 +/* 00003E9C 00010C2C 80 01 00 54 */ lwz r0, 0x54(r1) +/* 00003EA0 00010C30 81 81 00 3C */ lwz r12, 0x3c(r1) +/* 00003EA4 00010C34 7C 08 03 A6 */ mtlr r0 +/* 00003EA8 00010C38 BB 81 00 40 */ lmw r28, 0x40(r1) +/* 00003EAC 00010C3C 7D 80 81 20 */ mtcrf 8, r12 +/* 00003EB0 00010C40 38 21 00 50 */ addi r1, r1, 0x50 +.L_00003EB4: +/* 00003EB4 00010C44 4E 80 00 20 */ blr +.endfn LookCubicInit__11CameraMoverP8tCubic3DP8bMatrix4P8bVector3 + +# .text:0x3EB8 | size: 0x68 +.fn SetEyeLook__11CameraMoverP8tCubic3DT1P8tCubic1DP8bMatrix4P8bVector3, global +/* 00003EB8 00010C48 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 00003EBC 00010C4C 7C 08 02 A6 */ mflr r0 +/* 00003EC0 00010C50 BF 41 00 08 */ stmw r26, 0x8(r1) +.L_00003EC4: +/* 00003EC4 00010C54 90 01 00 24 */ stw r0, 0x24(r1) +/* 00003EC8 00010C58 7C 7E 1B 78 */ mr r30, r3 +/* 00003ECC 00010C5C 7C 9D 23 78 */ mr r29, r4 +/* 00003ED0 00010C60 7C FC 3B 78 */ mr r28, r7 +/* 00003ED4 00010C64 7D 1B 43 78 */ mr r27, r8 +/* 00003ED8 00010C68 7C BA 2B 78 */ mr r26, r5 +/* 00003EDC 00010C6C 7C C4 33 78 */ mr r4, r6 +/* 00003EE0 00010C70 48 00 3B C5 */ bl .L_00007AA4 +/* 00003EE4 00010C74 7F A4 EB 78 */ mr r4, r29 +/* 00003EE8 00010C78 7F C3 F3 78 */ mr r3, r30 +/* 00003EEC 00010C7C 7F 85 E3 78 */ mr r5, r28 +/* 00003EF0 00010C80 7F 66 DB 78 */ mr r6, r27 +/* 00003EF4 00010C84 48 00 3C 71 */ bl .L_00007B64 +/* 00003EF8 00010C88 7F C3 F3 78 */ mr r3, r30 +.L_00003EFC: +/* 00003EFC 00010C8C 7F 44 D3 78 */ mr r4, r26 +/* 00003F00 00010C90 7F 85 E3 78 */ mr r5, r28 +/* 00003F04 00010C94 7F 66 DB 78 */ mr r6, r27 +/* 00003F08 00010C98 48 00 3D 95 */ bl .L_00007C9C +/* 00003F0C 00010C9C 80 01 00 24 */ lwz r0, 0x24(r1) +/* 00003F10 00010CA0 7C 08 03 A6 */ mtlr r0 +/* 00003F14 00010CA4 BB 41 00 08 */ lmw r26, 0x8(r1) +/* 00003F18 00010CA8 38 21 00 20 */ addi r1, r1, 0x20 +/* 00003F1C 00010CAC 4E 80 00 20 */ blr +.endfn SetEyeLook__11CameraMoverP8tCubic3DT1P8tCubic1DP8bMatrix4P8bVector3 + +# .text:0x3F20 | size: 0x8 +# CubicCameraMover::GetAnchor +.fn GetAnchor__16CubicCameraMover, global +/* 00003F20 00010CB0 80 63 00 80 */ lwz r3, 0x80(r3) +/* 00003F24 00010CB4 4E 80 00 20 */ blr +.endfn GetAnchor__16CubicCameraMover + +# .text:0x3F28 | size: 0x8 +.fn SetLookBack__16CubicCameraMoverb, global +/* 00003F28 00010CB8 90 83 00 A4 */ stw r4, 0xa4(r3) +/* 00003F2C 00010CBC 4E 80 00 20 */ blr +.endfn SetLookBack__16CubicCameraMoverb + +# .text:0x3F30 | size: 0xC +.fn SetDisableLag__16CubicCameraMoverb, global +/* 00003F30 00010CC0 68 84 00 01 */ xori r4, r4, 0x1 +/* 00003F34 00010CC4 90 83 00 A0 */ stw r4, 0xa0(r3) +/* 00003F38 00010CC8 4E 80 00 20 */ blr +.endfn SetDisableLag__16CubicCameraMoverb + +# .text:0x3F3C | size: 0x24 +# CubicCameraMover::OutsidePOV +.fn OutsidePOV__16CubicCameraMover, global +/* 00003F3C 00010CCC 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 00003F40 00010CD0 7C 08 02 A6 */ mflr r0 +/* 00003F44 00010CD4 90 01 00 0C */ stw r0, 0xc(r1) +/* 00003F48 00010CD8 80 63 00 9C */ lwz r3, 0x9c(r3) +/* 00003F4C 00010CDC 48 00 0F 8D */ bl .L_00004ED8 +/* 00003F50 00010CE0 80 01 00 0C */ lwz r0, 0xc(r1) +/* 00003F54 00010CE4 7C 08 03 A6 */ mtlr r0 +/* 00003F58 00010CE8 38 21 00 08 */ addi r1, r1, 0x8 +/* 00003F5C 00010CEC 4E 80 00 20 */ blr +.endfn OutsidePOV__16CubicCameraMover + +# .text:0x3F60 | size: 0x28 +# CubicCameraMover::RenderCarPOV +.fn RenderCarPOV__16CubicCameraMover, global +/* 00003F60 00010CF0 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 00003F64 00010CF4 7C 08 02 A6 */ mflr r0 +/* 00003F68 00010CF8 90 01 00 0C */ stw r0, 0xc(r1) +.L_00003F6C: +/* 00003F6C 00010CFC 80 83 00 A4 */ lwz r4, 0xa4(r3) +.L_00003F70: +/* 00003F70 00010D00 80 63 00 9C */ lwz r3, 0x9c(r3) +/* 00003F74 00010D04 48 00 0F B9 */ bl .L_00004F2C +/* 00003F78 00010D08 80 01 00 0C */ lwz r0, 0xc(r1) +/* 00003F7C 00010D0C 7C 08 03 A6 */ mtlr r0 +/* 00003F80 00010D10 38 21 00 08 */ addi r1, r1, 0x8 +/* 00003F84 00010D14 4E 80 00 20 */ blr +.endfn RenderCarPOV__16CubicCameraMover + +# .text:0x3F88 | size: 0xC +# CubicCameraMover::MinDistToWall +.fn MinDistToWall__16CubicCameraMover, global +/* 00003F88 00010D18 3D 20 00 00 */ lis r9, .rodata+0x5CC@ha +/* 00003F8C 00010D1C C0 29 05 CC */ lfs f1, .rodata+0x5CC@l(r9) +/* 00003F90 00010D20 4E 80 00 20 */ blr +.endfn MinDistToWall__16CubicCameraMover + +# .text:0x3F94 | size: 0x8 +# CubicCameraMover::HighliteMode +.fn HighliteMode__16CubicCameraMover, global +/* 00003F94 00010D24 38 60 00 00 */ li r3, 0x0 +/* 00003F98 00010D28 4E 80 00 20 */ blr +.endfn HighliteMode__16CubicCameraMover + +# .text:0x3F9C | size: 0x20 +# CubicCameraMover::SetSnapNext +.fn SetSnapNext__16CubicCameraMover, global +/* 00003F9C 00010D2C 3D 20 00 00 */ lis r9, .rodata+0x5D0@ha +/* 00003FA0 00010D30 C0 03 00 C0 */ lfs f0, 0xc0(r3) +/* 00003FA4 00010D34 C1 A9 05 D0 */ lfs f13, .rodata+0x5D0@l(r9) +/* 00003FA8 00010D38 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00003FAC 00010D3C 4D 81 00 20 */ bgtlr +/* 00003FB0 00010D40 38 00 00 01 */ li r0, 0x1 +/* 00003FB4 00010D44 90 03 00 A8 */ stw r0, 0xa8(r3) +.L_00003FB8: +/* 00003FB8 00010D48 4E 80 00 20 */ blr +.endfn SetSnapNext__16CubicCameraMover + +# .text:0x3FBC | size: 0x18 +# CubicCameraMover::GetLookbackAngle +.fn GetLookbackAngle__16CubicCameraMover, global +/* 00003FBC 00010D4C 80 03 00 A4 */ lwz r0, 0xa4(r3) +/* 00003FC0 00010D50 38 60 00 00 */ li r3, 0x0 +/* 00003FC4 00010D54 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00003FC8 00010D58 4D 82 00 20 */ beqlr +/* 00003FCC 00010D5C 60 63 80 00 */ ori r3, r3, 0x8000 +/* 00003FD0 00010D60 4E 80 00 20 */ blr +.endfn GetLookbackAngle__16CubicCameraMover + +# .text:0x3FD4 | size: 0x24 +# CubicCameraMover::IsHoodCamera +.fn IsHoodCamera__16CubicCameraMover, global +/* 00003FD4 00010D64 80 03 00 9C */ lwz r0, 0x9c(r3) +/* 00003FD8 00010D68 39 20 00 00 */ li r9, 0x0 +/* 00003FDC 00010D6C 2C 00 00 01 */ cmpwi r0, 0x1 +/* 00003FE0 00010D70 40 82 3F F0 */ bne .L_00007FD0 +/* 00003FE4 00010D74 80 03 00 A4 */ lwz r0, 0xa4(r3) +/* 00003FE8 00010D78 21 60 00 00 */ subfic r11, r0, 0x0 +/* 00003FEC 00010D7C 7D 2B 01 14 */ adde r9, r11, r0 +/* 00003FF0 00010D80 7D 23 4B 78 */ mr r3, r9 +/* 00003FF4 00010D84 4E 80 00 20 */ blr +.endfn IsHoodCamera__16CubicCameraMover + +# .text:0x3FF8 | size: 0x24C +.fn SetForward__16CubicCameraMoverP3POVb, global +/* 00003FF8 00010D88 94 21 FF B8 */ stwu r1, -0x48(r1) +/* 00003FFC 00010D8C 7C 08 02 A6 */ mflr r0 +/* 00004000 00010D90 7D 80 00 26 */ mfcr r12 +/* 00004004 00010D94 F3 A1 00 30 */ psq_st f29, 0x30(r1), 0, qr0 +/* 00004008 00010D98 F3 C1 00 38 */ psq_st f30, 0x38(r1), 0, qr0 +/* 0000400C 00010D9C F3 E1 00 40 */ psq_st f31, 0x40(r1), 0, qr0 +/* 00004010 00010DA0 BF A1 00 24 */ stmw r29, 0x24(r1) +/* 00004014 00010DA4 90 01 00 4C */ stw r0, 0x4c(r1) +/* 00004018 00010DA8 91 81 00 20 */ stw r12, 0x20(r1) +/* 0000401C 00010DAC 7C 7E 1B 78 */ mr r30, r3 +/* 00004020 00010DB0 7C BF 2B 78 */ mr r31, r5 +.L_00004024: +/* 00004024 00010DB4 7C 84 23 79 */ mr. r4, r4 +/* 00004028 00010DB8 41 82 41 C0 */ beq .L_000081E8 +/* 0000402C 00010DBC A8 64 00 00 */ lha r3, 0x0(r4) +/* 00004030 00010DC0 48 00 0F 8D */ bl .L_00004FBC +/* 00004034 00010DC4 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00004038 00010DC8 41 82 41 C0 */ beq .L_000081F8 +/* 0000403C 00010DCC 2E 1F 00 00 */ cmpwi cr4, r31, 0x0 +/* 00004040 00010DD0 40 92 40 54 */ bne cr4, .L_00008094 +/* 00004044 00010DD4 7F C3 F3 78 */ mr r3, r30 +.L_00004048: +/* 00004048 00010DD8 48 00 3F 95 */ bl .L_00007FDC +/* 0000404C 00010DDC 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00004050 00010DE0 40 82 42 1C */ bne .L_0000826C +/* 00004054 00010DE4 81 3E 00 80 */ lwz r9, 0x80(r30) +/* 00004058 00010DE8 3B E1 00 08 */ addi r31, r1, 0x8 +/* 0000405C 00010DEC 3D 60 00 00 */ lis r11, .rodata+0x5D4@ha +/* 00004060 00010DF0 C0 09 00 00 */ lfs f0, 0x0(r9) +/* 00004064 00010DF4 3B A9 00 48 */ addi r29, r9, 0x48 +/* 00004068 00010DF8 C1 A9 00 04 */ lfs f13, 0x4(r9) +/* 0000406C 00010DFC C1 29 00 08 */ lfs f9, 0x8(r9) +/* 00004070 00010E00 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 00004074 00010E04 D1 A1 00 0C */ stfs f13, 0xc(r1) +/* 00004078 00010E08 D1 3F 00 08 */ stfs f9, 0x8(r31) +/* 0000407C 00010E0C C3 AB 05 D4 */ lfs f29, .rodata+0x5D4@l(r11) +.L_00004080: +/* 00004080 00010E10 C1 A1 00 0C */ lfs f13, 0xc(r1) +/* 00004084 00010E14 C1 69 00 4C */ lfs f11, 0x4c(r9) +/* 00004088 00010E18 C0 01 00 08 */ lfs f0, 0x8(r1) +/* 0000408C 00010E1C C1 49 00 48 */ lfs f10, 0x48(r9) +/* 00004090 00010E20 ED AD 02 F2 */ fmuls f13, f13, f11 +/* 00004094 00010E24 C1 89 00 50 */ lfs f12, 0x50(r9) +/* 00004098 00010E28 EC 00 6A BA */ fmadds f0, f0, f10, f13 +/* 0000409C 00010E2C EC 09 03 3A */ fmadds f0, f9, f12, f0 +/* 000040A0 00010E30 FC 00 E8 00 */ fcmpu cr0, f0, f29 +/* 000040A4 00010E34 4C 62 0B 82 */ cror un, eq, gt +.L_000040A8: +/* 000040A8 00010E38 41 83 40 C8 */ bso .L_00008170 +/* 000040AC 00010E3C 3D 20 00 00 */ lis r9, .rodata+0x5D8@ha +/* 000040B0 00010E40 7F E3 FB 78 */ mr r3, r31 +/* 000040B4 00010E44 C0 29 05 D8 */ lfs f1, .rodata+0x5D8@l(r9) +/* 000040B8 00010E48 7F E4 FB 78 */ mr r4, r31 +/* 000040BC 00010E4C 7F A5 EB 78 */ mr r5, r29 +/* 000040C0 00010E50 EC 20 00 72 */ fmuls f1, f0, f1 +.L_000040C4: +/* 000040C4 00010E54 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +/* 000040C8 00010E58 81 3E 00 80 */ lwz r9, 0x80(r30) +/* 000040CC 00010E5C 3C 60 00 00 */ lis r3, gDriftSpeed@ha +.L_000040D0: +/* 000040D0 00010E60 38 63 00 00 */ addi r3, r3, gDriftSpeed@l +/* 000040D4 00010E64 C0 29 00 10 */ lfs f1, 0x10(r9) +/* 000040D8 00010E68 48 00 00 01 */ bl GetValue__5Graphf +/* 000040DC 00010E6C FF E0 08 90 */ fmr f31, f1 +/* 000040E0 00010E70 7F E4 FB 78 */ mr r4, r31 +/* 000040E4 00010E74 7F E3 FB 78 */ mr r3, r31 +/* 000040E8 00010E78 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +.L_000040EC: +/* 000040EC 00010E7C C0 01 00 08 */ lfs f0, 0x8(r1) +/* 000040F0 00010E80 3D 20 00 00 */ lis r9, .rodata+0x5DC@ha +/* 000040F4 00010E84 C1 A1 00 0C */ lfs f13, 0xc(r1) +/* 000040F8 00010E88 7F E4 FB 78 */ mr r4, r31 +/* 000040FC 00010E8C C1 9F 00 08 */ lfs f12, 0x8(r31) +/* 00004100 00010E90 EC 00 07 F2 */ fmuls f0, f0, f31 +/* 00004104 00010E94 C3 C9 05 DC */ lfs f30, .rodata+0x5DC@l(r9) +/* 00004108 00010E98 ED AD 07 F2 */ fmuls f13, f13, f31 +/* 0000410C 00010E9C D0 01 00 08 */ stfs f0, 0x8(r1) +/* 00004110 00010EA0 ED 8C 07 F2 */ fmuls f12, f12, f31 +/* 00004114 00010EA4 D1 A1 00 0C */ stfs f13, 0xc(r1) +/* 00004118 00010EA8 EC 3E F8 28 */ fsubs f1, f30, f31 +/* 0000411C 00010EAC D1 9F 00 08 */ stfs f12, 0x8(r31) +/* 00004120 00010EB0 7F A5 EB 78 */ mr r5, r29 +.L_00004124: +/* 00004124 00010EB4 7F E3 FB 78 */ mr r3, r31 +/* 00004128 00010EB8 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +/* 0000412C 00010EBC 3D 20 00 00 */ lis r9, WorldTimer@ha +/* 00004130 00010EC0 81 5E 00 B4 */ lwz r10, 0xb4(r30) +/* 00004134 00010EC4 80 09 00 00 */ lwz r0, WorldTimer@l(r9) +/* 00004138 00010EC8 3D 00 43 30 */ lis r8, 0x4330 +/* 0000413C 00010ECC 3D 20 00 00 */ lis r9, .rodata+0x5E0@ha +/* 00004140 00010ED0 7C 0A 00 50 */ subf r0, r10, r0 +/* 00004144 00010ED4 C9 A9 05 E0 */ lfd f13, .rodata+0x5E0@l(r9) +/* 00004148 00010ED8 6C 00 80 00 */ xoris r0, r0, 0x8000 +/* 0000414C 00010EDC 3D 20 00 00 */ lis r9, .rodata+0x5E8@ha +/* 00004150 00010EE0 90 01 00 1C */ stw r0, 0x1c(r1) +/* 00004154 00010EE4 3D 40 00 00 */ lis r10, .rodata+0x5EC@ha +/* 00004158 00010EE8 C1 49 05 E8 */ lfs f10, .rodata+0x5E8@l(r9) +/* 0000415C 00010EEC 7F E4 FB 78 */ mr r4, r31 +/* 00004160 00010EF0 91 01 00 18 */ stw r8, 0x18(r1) +/* 00004164 00010EF4 C1 6A 05 EC */ lfs f11, .rodata+0x5EC@l(r10) +/* 00004168 00010EF8 C8 01 00 18 */ lfd f0, 0x18(r1) +/* 0000416C 00010EFC C1 81 00 10 */ lfs f12, 0x10(r1) +/* 00004170 00010F00 FC 00 68 28 */ fsub f0, f0, f13 +/* 00004174 00010F04 81 3E 00 80 */ lwz r9, 0x80(r30) +/* 00004178 00010F08 FC 00 00 18 */ frsp f0, f0 +/* 0000417C 00010F0C 80 7E 00 90 */ lwz r3, 0x90(r30) +/* 00004180 00010F10 EC 00 02 B2 */ fmuls f0, f0, f10 +/* 00004184 00010F14 EC 00 02 F2 */ fmuls f0, f0, f11 +/* 00004188 00010F18 EC 1E 00 28 */ fsubs f0, f30, f0 +/* 0000418C 00010F1C FC 00 E8 2E */ fsel f0, f0, f0, f29 +/* 00004190 00010F20 ED BE 00 28 */ fsubs f13, f30, f0 +/* 00004194 00010F24 FD AD F0 2E */ fsel f13, f13, f0, f30 +/* 00004198 00010F28 ED 8C 03 72 */ fmuls f12, f12, f13 +/* 0000419C 00010F2C D1 81 00 10 */ stfs f12, 0x10(r1) +/* 000041A0 00010F30 C0 09 00 50 */ lfs f0, 0x50(r9) +/* 000041A4 00010F34 EC 00 00 32 */ fmuls f0, f0, f0 +/* 000041A8 00010F38 EF DE 00 28 */ fsubs f30, f30, f0 +/* 000041AC 00010F3C ED 8C 07 B2 */ fmuls f12, f12, f30 +/* 000041B0 00010F40 D1 81 00 10 */ stfs f12, 0x10(r1) +/* 000041B4 00010F44 48 00 00 01 */ bl SetValDesired__8tCubic3DP8bVector3 +/* 000041B8 00010F48 41 92 42 1C */ beq cr4, .L_000083D4 +/* 000041BC 00010F4C 48 00 41 D8 */ b .L_00008394 +/* 000041C0 00010F50 80 9E 00 80 */ lwz r4, 0x80(r30) +.L_000041C4: +/* 000041C4 00010F54 2C 04 00 00 */ cmpwi r4, 0x0 +/* 000041C8 00010F58 41 82 42 1C */ beq IsAttached__C13CDActionDrivePCQ33UTL3COM8IUnknown +/* 000041CC 00010F5C 80 7E 00 90 */ lwz r3, 0x90(r30) +/* 000041D0 00010F60 38 84 00 48 */ addi r4, r4, 0x48 +/* 000041D4 00010F64 48 00 00 01 */ bl SetValDesired__8tCubic3DP8bVector3 +/* 000041D8 00010F68 81 3E 00 90 */ lwz r9, 0x90(r30) +/* 000041DC 00010F6C 38 00 00 00 */ li r0, 0x0 +/* 000041E0 00010F70 C0 09 00 08 */ lfs f0, 0x8(r9) +/* 000041E4 00010F74 C1 A9 00 0C */ lfs f13, 0xc(r9) +.L_000041E8: +/* 000041E8 00010F78 C1 89 00 34 */ lfs f12, 0x34(r9) +/* 000041EC 00010F7C C1 69 00 38 */ lfs f11, 0x38(r9) +.L_000041F0: +/* 000041F0 00010F80 C1 49 00 60 */ lfs f10, 0x60(r9) +/* 000041F4 00010F84 C1 29 00 64 */ lfs f9, 0x64(r9) +/* 000041F8 00010F88 B0 09 00 80 */ sth r0, 0x80(r9) +/* 000041FC 00010F8C D0 09 00 00 */ stfs f0, 0x0(r9) +/* 00004200 00010F90 D1 A9 00 04 */ stfs f13, 0x4(r9) +/* 00004204 00010F94 D1 89 00 2C */ stfs f12, 0x2c(r9) +/* 00004208 00010F98 D1 69 00 30 */ stfs f11, 0x30(r9) +/* 0000420C 00010F9C D1 49 00 58 */ stfs f10, 0x58(r9) +.L_00004210: +/* 00004210 00010FA0 D1 29 00 5C */ stfs f9, 0x5c(r9) +.L_00004214: +/* 00004214 00010FA4 B0 09 00 28 */ sth r0, 0x28(r9) +/* 00004218 00010FA8 B0 09 00 54 */ sth r0, 0x54(r9) +/* 0000421C 00010FAC 80 01 00 4C */ lwz r0, 0x4c(r1) +/* 00004220 00010FB0 81 81 00 20 */ lwz r12, 0x20(r1) +/* 00004224 00010FB4 7C 08 03 A6 */ mtlr r0 +/* 00004228 00010FB8 BB A1 00 24 */ lmw r29, 0x24(r1) +/* 0000422C 00010FBC E3 A1 00 30 */ psq_l f29, 0x30(r1), 0, qr0 +/* 00004230 00010FC0 E3 C1 00 38 */ psq_l f30, 0x38(r1), 0, qr0 +/* 00004234 00010FC4 E3 E1 00 40 */ psq_l f31, 0x40(r1), 0, qr0 +/* 00004238 00010FC8 7D 80 81 20 */ mtcrf 8, r12 +/* 0000423C 00010FCC 38 21 00 48 */ addi r1, r1, 0x48 +/* 00004240 00010FD0 4E 80 00 20 */ blr +.endfn SetForward__16CubicCameraMoverP3POVb + +# .text:0x4244 | size: 0x2F4 +.fn CameraAccelCurve__16CubicCameraMoverP8bVector3, global +/* 00004244 00010FD4 94 21 FF C8 */ stwu r1, -0x38(r1) +/* 00004248 00010FD8 7C 08 02 A6 */ mflr r0 +/* 0000424C 00010FDC BF 81 00 28 */ stmw r28, 0x28(r1) +/* 00004250 00010FE0 90 01 00 3C */ stw r0, 0x3c(r1) +/* 00004254 00010FE4 3D 20 00 00 */ lis r9, .rodata+0x5F0@ha +/* 00004258 00010FE8 3D 60 00 00 */ lis r11, .rodata+0x5F4@ha +/* 0000425C 00010FEC C0 29 05 F0 */ lfs f1, .rodata+0x5F0@l(r9) +.L_00004260: +/* 00004260 00010FF0 7C 7D 1B 78 */ mr r29, r3 +.L_00004264: +/* 00004264 00010FF4 3D 20 00 00 */ lis r9, CameraAccelerationCurve@ha +/* 00004268 00010FF8 C0 4B 05 F4 */ lfs f2, .rodata+0x5F4@l(r11) +/* 0000426C 00010FFC 38 61 00 08 */ addi r3, r1, 0x8 +.L_00004270: +/* 00004270 00011000 38 00 00 05 */ li r0, 0x5 +/* 00004274 00011004 3B C9 00 00 */ addi r30, r9, CameraAccelerationCurve@l +/* 00004278 00011008 7C 9F 23 78 */ mr r31, r4 +/* 0000427C 0001100C 7C 7C 1B 78 */ mr r28, r3 +/* 00004280 00011010 90 01 00 08 */ stw r0, 0x8(r1) +/* 00004284 00011014 48 00 00 01 */ bl SetMinMax__9TableBaseff +/* 00004288 00011018 93 C1 00 18 */ stw r30, 0x18(r1) +/* 0000428C 0001101C C0 01 00 0C */ lfs f0, 0xc(r1) +.L_00004290: +/* 00004290 00011020 81 3D 00 80 */ lwz r9, 0x80(r29) +/* 00004294 00011024 C1 81 00 14 */ lfs f12, 0x14(r1) +/* 00004298 00011028 C1 A9 00 38 */ lfs f13, 0x38(r9) +/* 0000429C 0001102C 80 81 00 08 */ lwz r4, 0x8(r1) +/* 000042A0 00011030 ED AD 00 28 */ fsubs f13, f13, f0 +/* 000042A4 00011034 EC 2C 03 72 */ fmuls f1, f12, f13 +/* 000042A8 00011038 FC 00 08 90 */ fmr f0, f1 +/* 000042AC 0001103C FD 60 00 1E */ fctiwz f11, f0 +/* 000042B0 00011040 D9 61 00 20 */ stfd f11, 0x20(r1) +/* 000042B4 00011044 80 C1 00 24 */ lwz r6, 0x24(r1) +/* 000042B8 00011048 2C 06 00 00 */ cmpwi r6, 0x0 +/* 000042BC 0001104C 40 80 42 D4 */ bge .L_00008590 +/* 000042C0 00011050 7F C4 F3 78 */ mr r4, r30 +/* 000042C4 00011054 7F E3 FB 78 */ mr r3, r31 +/* 000042C8 00011058 38 A0 00 04 */ li r5, 0x4 +/* 000042CC 0001105C 48 00 00 01 */ bl bMemCpy +/* 000042D0 00011060 48 00 43 58 */ b .L_00008628 +.L_000042D4: +/* 000042D4 00011064 38 04 FF FF */ subi r0, r4, 0x1 +/* 000042D8 00011068 7C 06 00 00 */ cmpw r6, r0 +/* 000042DC 0001106C 41 80 42 FC */ blt .L_000085D8 +/* 000042E0 00011070 54 84 10 3A */ slwi r4, r4, 2 +/* 000042E4 00011074 7F E3 FB 78 */ mr r3, r31 +/* 000042E8 00011078 38 84 FF FC */ subi r4, r4, 0x4 +/* 000042EC 0001107C 38 A0 00 04 */ li r5, 0x4 +/* 000042F0 00011080 7C 84 F2 14 */ add r4, r4, r30 +/* 000042F4 00011084 48 00 00 01 */ bl bMemCpy +/* 000042F8 00011088 48 00 43 58 */ b .L_00008650 +/* 000042FC 0001108C 6C C0 80 00 */ xoris r0, r6, 0x8000 +/* 00004300 00011090 90 01 00 24 */ stw r0, 0x24(r1) +/* 00004304 00011094 3D 60 43 30 */ lis r11, 0x4330 +/* 00004308 00011098 3D 40 00 00 */ lis r10, .rodata+0x5F8@ha +/* 0000430C 0001109C 91 61 00 20 */ stw r11, 0x20(r1) +/* 00004310 000110A0 C9 AA 05 F8 */ lfd f13, .rodata+0x5F8@l(r10) +/* 00004314 000110A4 C8 01 00 20 */ lfd f0, 0x20(r1) +.L_00004318: +/* 00004318 000110A8 FC 00 68 28 */ fsub f0, f0, f13 +/* 0000431C 000110AC FD A0 00 18 */ frsp f13, f0 +/* 00004320 000110B0 FC 0D 08 00 */ fcmpu cr0, f13, f1 +/* 00004324 000110B4 4C 62 03 82 */ cror un, eq, lt +/* 00004328 000110B8 41 83 43 38 */ bso .L_00008660 +/* 0000432C 000110BC 3D 20 00 00 */ lis r9, .rodata+0x600@ha +/* 00004330 000110C0 C0 09 06 00 */ lfs f0, .rodata+0x600@l(r9) +/* 00004334 000110C4 ED AD 00 28 */ fsubs f13, f13, f0 +/* 00004338 000110C8 54 C6 10 3A */ slwi r6, r6, 2 +/* 0000433C 000110CC EC 21 68 28 */ fsubs f1, f1, f13 +.L_00004340: +/* 00004340 000110D0 38 A6 00 04 */ addi r5, r6, 0x4 +/* 00004344 000110D4 7F 83 E3 78 */ mr r3, r28 +.L_00004348: +/* 00004348 000110D8 7C C6 F2 14 */ add r6, r6, r30 +/* 0000434C 000110DC 7C A5 F2 14 */ add r5, r5, r30 +/* 00004350 000110E0 7F E4 FB 78 */ mr r4, r31 +/* 00004354 000110E4 48 00 0F F5 */ bl .L_00005348 +/* 00004358 000110E8 81 3D 00 80 */ lwz r9, 0x80(r29) +/* 0000435C 000110EC C0 01 00 0C */ lfs f0, 0xc(r1) +/* 00004360 000110F0 38 7F 00 04 */ addi r3, r31, 0x4 +/* 00004364 000110F4 C1 A9 00 3C */ lfs f13, 0x3c(r9) +/* 00004368 000110F8 C1 81 00 14 */ lfs f12, 0x14(r1) +/* 0000436C 000110FC ED AD 00 28 */ fsubs f13, f13, f0 +/* 00004370 00011100 80 81 00 08 */ lwz r4, 0x8(r1) +/* 00004374 00011104 EC 2C 03 72 */ fmuls f1, f12, f13 +/* 00004378 00011108 FC 00 08 90 */ fmr f0, f1 +/* 0000437C 0001110C FD 60 00 1E */ fctiwz f11, f0 +/* 00004380 00011110 D9 61 00 20 */ stfd f11, 0x20(r1) +/* 00004384 00011114 80 C1 00 24 */ lwz r6, 0x24(r1) +/* 00004388 00011118 2C 06 00 00 */ cmpwi r6, 0x0 +/* 0000438C 0001111C 40 80 43 A0 */ bge .L_0000872C +/* 00004390 00011120 80 81 00 18 */ lwz r4, 0x18(r1) +/* 00004394 00011124 38 A0 00 04 */ li r5, 0x4 +/* 00004398 00011128 48 00 00 01 */ bl bMemCpy +/* 0000439C 0001112C 48 00 44 28 */ b .L_000087C4 +/* 000043A0 00011130 38 04 FF FF */ subi r0, r4, 0x1 +/* 000043A4 00011134 7C 06 00 00 */ cmpw r6, r0 +/* 000043A8 00011138 41 80 43 C8 */ blt .L_00008770 +/* 000043AC 0001113C 54 84 10 3A */ slwi r4, r4, 2 +/* 000043B0 00011140 80 01 00 18 */ lwz r0, 0x18(r1) +/* 000043B4 00011144 38 84 FF FC */ subi r4, r4, 0x4 +.L_000043B8: +/* 000043B8 00011148 38 A0 00 04 */ li r5, 0x4 +/* 000043BC 0001114C 7C 80 22 14 */ add r4, r0, r4 +/* 000043C0 00011150 48 00 00 01 */ bl bMemCpy +/* 000043C4 00011154 48 00 44 28 */ b .L_000087EC +/* 000043C8 00011158 6C C0 80 00 */ xoris r0, r6, 0x8000 +/* 000043CC 0001115C 90 01 00 24 */ stw r0, 0x24(r1) +/* 000043D0 00011160 3D 60 43 30 */ lis r11, 0x4330 +/* 000043D4 00011164 3D 40 00 00 */ lis r10, .rodata+0x5F8@ha +/* 000043D8 00011168 91 61 00 20 */ stw r11, 0x20(r1) +/* 000043DC 0001116C C9 AA 05 F8 */ lfd f13, .rodata+0x5F8@l(r10) +/* 000043E0 00011170 C8 01 00 20 */ lfd f0, 0x20(r1) +/* 000043E4 00011174 FC 00 68 28 */ fsub f0, f0, f13 +/* 000043E8 00011178 FD A0 00 18 */ frsp f13, f0 +/* 000043EC 0001117C FC 0D 08 00 */ fcmpu cr0, f13, f1 +/* 000043F0 00011180 4C 62 03 82 */ cror un, eq, lt +/* 000043F4 00011184 41 83 44 04 */ bso .L_000087F8 +/* 000043F8 00011188 3D 20 00 00 */ lis r9, .rodata+0x600@ha +/* 000043FC 0001118C C0 09 06 00 */ lfs f0, .rodata+0x600@l(r9) +/* 00004400 00011190 ED AD 00 28 */ fsubs f13, f13, f0 +.L_00004404: +/* 00004404 00011194 54 C6 10 3A */ slwi r6, r6, 2 +/* 00004408 00011198 80 01 00 18 */ lwz r0, 0x18(r1) +/* 0000440C 0001119C 38 A6 00 04 */ addi r5, r6, 0x4 +/* 00004410 000111A0 7C 64 1B 78 */ mr r4, r3 +/* 00004414 000111A4 EC 21 68 28 */ fsubs f1, f1, f13 +/* 00004418 000111A8 7C C0 32 14 */ add r6, r0, r6 +/* 0000441C 000111AC 7C A0 2A 14 */ add r5, r0, r5 +.L_00004420: +/* 00004420 000111B0 7F 83 E3 78 */ mr r3, r28 +/* 00004424 000111B4 48 00 0F F5 */ bl .L_00005418 +/* 00004428 000111B8 81 3D 00 80 */ lwz r9, 0x80(r29) +/* 0000442C 000111BC C0 01 00 0C */ lfs f0, 0xc(r1) +/* 00004430 000111C0 39 1F 00 08 */ addi r8, r31, 0x8 +/* 00004434 000111C4 C1 A9 00 40 */ lfs f13, 0x40(r9) +/* 00004438 000111C8 C1 81 00 14 */ lfs f12, 0x14(r1) +/* 0000443C 000111CC ED AD 00 28 */ fsubs f13, f13, f0 +/* 00004440 000111D0 80 81 00 08 */ lwz r4, 0x8(r1) +/* 00004444 000111D4 EC 2C 03 72 */ fmuls f1, f12, f13 +/* 00004448 000111D8 FC 00 08 90 */ fmr f0, f1 +/* 0000444C 000111DC FD 60 00 1E */ fctiwz f11, f0 +/* 00004450 000111E0 D9 61 00 20 */ stfd f11, 0x20(r1) +/* 00004454 000111E4 80 C1 00 24 */ lwz r6, 0x24(r1) +/* 00004458 000111E8 2C 06 00 00 */ cmpwi r6, 0x0 +/* 0000445C 000111EC 40 80 44 6C */ bge .L_000088C8 +/* 00004460 000111F0 80 81 00 18 */ lwz r4, 0x18(r1) +/* 00004464 000111F4 7D 03 43 78 */ mr r3, r8 +/* 00004468 000111F8 48 00 44 8C */ b .L_000088F4 +/* 0000446C 000111FC 38 04 FF FF */ subi r0, r4, 0x1 +/* 00004470 00011200 7C 06 00 00 */ cmpw r6, r0 +/* 00004474 00011204 41 80 44 98 */ blt .L_0000890C +/* 00004478 00011208 54 84 10 3A */ slwi r4, r4, 2 +/* 0000447C 0001120C 80 01 00 18 */ lwz r0, 0x18(r1) +/* 00004480 00011210 38 84 FF FC */ subi r4, r4, 0x4 +/* 00004484 00011214 7D 03 43 78 */ mr r3, r8 +/* 00004488 00011218 7C 80 22 14 */ add r4, r0, r4 +/* 0000448C 0001121C 38 A0 00 04 */ li r5, 0x4 +/* 00004490 00011220 48 00 00 01 */ bl bMemCpy +/* 00004494 00011224 48 00 44 F8 */ b .L_0000898C +/* 00004498 00011228 6C C0 80 00 */ xoris r0, r6, 0x8000 +/* 0000449C 0001122C 90 01 00 24 */ stw r0, 0x24(r1) +/* 000044A0 00011230 3D 60 43 30 */ lis r11, 0x4330 +/* 000044A4 00011234 3D 40 00 00 */ lis r10, .rodata+0x5F8@ha +/* 000044A8 00011238 91 61 00 20 */ stw r11, 0x20(r1) +/* 000044AC 0001123C C9 AA 05 F8 */ lfd f13, .rodata+0x5F8@l(r10) +/* 000044B0 00011240 C8 01 00 20 */ lfd f0, 0x20(r1) +/* 000044B4 00011244 FC 00 68 28 */ fsub f0, f0, f13 +/* 000044B8 00011248 FD A0 00 18 */ frsp f13, f0 +/* 000044BC 0001124C FC 0D 08 00 */ fcmpu cr0, f13, f1 +/* 000044C0 00011250 4C 62 03 82 */ cror un, eq, lt +/* 000044C4 00011254 41 83 44 D4 */ bso .L_00008998 +/* 000044C8 00011258 3D 20 00 00 */ lis r9, .rodata+0x600@ha +/* 000044CC 0001125C C0 09 06 00 */ lfs f0, .rodata+0x600@l(r9) +/* 000044D0 00011260 ED AD 00 28 */ fsubs f13, f13, f0 +/* 000044D4 00011264 54 C6 10 3A */ slwi r6, r6, 2 +/* 000044D8 00011268 80 01 00 18 */ lwz r0, 0x18(r1) +/* 000044DC 0001126C 38 A6 00 04 */ addi r5, r6, 0x4 +/* 000044E0 00011270 EC 21 68 28 */ fsubs f1, f1, f13 +/* 000044E4 00011274 7C C0 32 14 */ add r6, r0, r6 +/* 000044E8 00011278 7F 83 E3 78 */ mr r3, r28 +/* 000044EC 0001127C 7D 04 43 78 */ mr r4, r8 +/* 000044F0 00011280 7C A0 2A 14 */ add r5, r0, r5 +/* 000044F4 00011284 48 00 0F F5 */ bl .L_000054E8 +/* 000044F8 00011288 3D 20 00 00 */ lis r9, .rodata+0x5F4@ha +/* 000044FC 0001128C C0 1F 00 00 */ lfs f0, 0x0(r31) +/* 00004500 00011290 C1 A9 05 F4 */ lfs f13, .rodata+0x5F4@l(r9) +/* 00004504 00011294 C1 9F 00 04 */ lfs f12, 0x4(r31) +/* 00004508 00011298 C1 7F 00 08 */ lfs f11, 0x8(r31) +/* 0000450C 0001129C EC 00 03 72 */ fmuls f0, f0, f13 +/* 00004510 000112A0 ED 8C 03 72 */ fmuls f12, f12, f13 +/* 00004514 000112A4 D0 1F 00 00 */ stfs f0, 0x0(r31) +.L_00004518: +/* 00004518 000112A8 ED 6B 03 72 */ fmuls f11, f11, f13 +/* 0000451C 000112AC D1 9F 00 04 */ stfs f12, 0x4(r31) +/* 00004520 000112B0 D1 7F 00 08 */ stfs f11, 0x8(r31) +/* 00004524 000112B4 80 01 00 3C */ lwz r0, 0x3c(r1) +/* 00004528 000112B8 7C 08 03 A6 */ mtlr r0 +/* 0000452C 000112BC BB 81 00 28 */ lmw r28, 0x28(r1) +/* 00004530 000112C0 38 21 00 38 */ addi r1, r1, 0x38 +/* 00004534 000112C4 4E 80 00 20 */ blr +.endfn CameraAccelCurve__16CubicCameraMoverP8bVector3 + +# .text:0x4538 | size: 0x15C +.fn CameraSpeedHug__16CubicCameraMoverP8bVector3, global +/* 00004538 000112C8 94 21 FF C0 */ stwu r1, -0x40(r1) +/* 0000453C 000112CC 7C 08 02 A6 */ mflr r0 +/* 00004540 000112D0 BF 81 00 30 */ stmw r28, 0x30(r1) +/* 00004544 000112D4 90 01 00 44 */ stw r0, 0x44(r1) +/* 00004548 000112D8 7C 7F 1B 78 */ mr r31, r3 +/* 0000454C 000112DC 7C 9E 23 78 */ mr r30, r4 +/* 00004550 000112E0 81 7F 00 80 */ lwz r11, 0x80(r31) +/* 00004554 000112E4 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00004558 000112E8 41 82 46 80 */ beq .L_00008BD8 +/* 0000455C 000112EC 3D 20 00 00 */ lis r9, .rodata+0x604@ha +/* 00004560 000112F0 C0 4B 00 14 */ lfs f2, 0x14(r11) +/* 00004564 000112F4 C0 29 06 04 */ lfs f1, .rodata+0x604@l(r9) +/* 00004568 000112F8 FC 02 08 00 */ fcmpu cr0, f2, f1 +/* 0000456C 000112FC 4C 62 03 82 */ cror un, eq, lt +/* 00004570 00011300 41 83 46 80 */ bso .L_00008BF0 +/* 00004574 00011304 3D 20 00 00 */ lis r9, CameraSpeedHugData@ha +/* 00004578 00011308 3B 81 00 08 */ addi r28, r1, 0x8 +/* 0000457C 0001130C 38 00 00 05 */ li r0, 0x5 +/* 00004580 00011310 3B A9 00 00 */ addi r29, r9, CameraSpeedHugData@l +/* 00004584 00011314 90 01 00 08 */ stw r0, 0x8(r1) +/* 00004588 00011318 7F 83 E3 78 */ mr r3, r28 +/* 0000458C 0001131C 48 00 00 01 */ bl SetMinMax__9TableBaseff +/* 00004590 00011320 81 3F 00 80 */ lwz r9, 0x80(r31) +/* 00004594 00011324 93 A1 00 18 */ stw r29, 0x18(r1) +/* 00004598 00011328 C0 01 00 0C */ lfs f0, 0xc(r1) +/* 0000459C 0001132C C1 A9 00 10 */ lfs f13, 0x10(r9) +/* 000045A0 00011330 C1 81 00 14 */ lfs f12, 0x14(r1) +/* 000045A4 00011334 ED AD 00 28 */ fsubs f13, f13, f0 +/* 000045A8 00011338 80 81 00 08 */ lwz r4, 0x8(r1) +/* 000045AC 0001133C EC 2C 03 72 */ fmuls f1, f12, f13 +/* 000045B0 00011340 FC 00 08 90 */ fmr f0, f1 +/* 000045B4 00011344 FD 60 00 1E */ fctiwz f11, f0 +/* 000045B8 00011348 D9 61 00 28 */ stfd f11, 0x28(r1) +/* 000045BC 0001134C 80 C1 00 2C */ lwz r6, 0x2c(r1) +/* 000045C0 00011350 2C 06 00 00 */ cmpwi r6, 0x0 +/* 000045C4 00011354 40 80 45 DC */ bge .L_00008BA0 +/* 000045C8 00011358 7F A4 EB 78 */ mr r4, r29 +/* 000045CC 0001135C 38 61 00 20 */ addi r3, r1, 0x20 +.L_000045D0: +/* 000045D0 00011360 38 A0 00 08 */ li r5, 0x8 +/* 000045D4 00011364 48 00 00 01 */ bl bMemCpy +/* 000045D8 00011368 48 00 46 60 */ b .L_00008C38 +/* 000045DC 0001136C 38 04 FF FF */ subi r0, r4, 0x1 +/* 000045E0 00011370 7C 06 00 00 */ cmpw r6, r0 +/* 000045E4 00011374 41 80 46 04 */ blt .L_00008BE8 +/* 000045E8 00011378 54 84 18 38 */ slwi r4, r4, 3 +/* 000045EC 0001137C 38 61 00 20 */ addi r3, r1, 0x20 +/* 000045F0 00011380 38 84 FF F8 */ subi r4, r4, 0x8 +/* 000045F4 00011384 38 A0 00 08 */ li r5, 0x8 +/* 000045F8 00011388 7C 84 EA 14 */ add r4, r4, r29 +/* 000045FC 0001138C 48 00 00 01 */ bl bMemCpy +/* 00004600 00011390 48 00 46 60 */ b .L_00008C60 +/* 00004604 00011394 6C C0 80 00 */ xoris r0, r6, 0x8000 +/* 00004608 00011398 90 01 00 2C */ stw r0, 0x2c(r1) +/* 0000460C 0001139C 3D 60 43 30 */ lis r11, 0x4330 +/* 00004610 000113A0 3D 40 00 00 */ lis r10, .rodata+0x608@ha +/* 00004614 000113A4 91 61 00 28 */ stw r11, 0x28(r1) +/* 00004618 000113A8 C9 AA 06 08 */ lfd f13, .rodata+0x608@l(r10) +/* 0000461C 000113AC C8 01 00 28 */ lfd f0, 0x28(r1) +/* 00004620 000113B0 FC 00 68 28 */ fsub f0, f0, f13 +/* 00004624 000113B4 FD A0 00 18 */ frsp f13, f0 +/* 00004628 000113B8 FC 0D 08 00 */ fcmpu cr0, f13, f1 +/* 0000462C 000113BC 4C 62 03 82 */ cror un, eq, lt +/* 00004630 000113C0 41 83 46 40 */ bso .L_00008C70 +/* 00004634 000113C4 3D 20 00 00 */ lis r9, .rodata+0x610@ha +/* 00004638 000113C8 C0 09 06 10 */ lfs f0, .rodata+0x610@l(r9) +/* 0000463C 000113CC ED AD 00 28 */ fsubs f13, f13, f0 +/* 00004640 000113D0 54 C6 18 38 */ slwi r6, r6, 3 +/* 00004644 000113D4 EC 21 68 28 */ fsubs f1, f1, f13 +/* 00004648 000113D8 38 A6 00 08 */ addi r5, r6, 0x8 +/* 0000464C 000113DC 7F 83 E3 78 */ mr r3, r28 +/* 00004650 000113E0 7C C6 EA 14 */ add r6, r6, r29 +/* 00004654 000113E4 7C A5 EA 14 */ add r5, r5, r29 +/* 00004658 000113E8 38 81 00 20 */ addi r4, r1, 0x20 +/* 0000465C 000113EC 48 00 10 19 */ bl .L_00005674 +/* 00004660 000113F0 C1 81 00 20 */ lfs f12, 0x20(r1) +/* 00004664 000113F4 C1 61 00 24 */ lfs f11, 0x24(r1) +/* 00004668 000113F8 C0 1E 00 00 */ lfs f0, 0x0(r30) +/* 0000466C 000113FC C1 BE 00 08 */ lfs f13, 0x8(r30) +/* 00004670 00011400 EC 00 03 32 */ fmuls f0, f0, f12 +/* 00004674 00011404 ED AD 02 F2 */ fmuls f13, f13, f11 +/* 00004678 00011408 D0 1E 00 00 */ stfs f0, 0x0(r30) +/* 0000467C 0001140C D1 BE 00 08 */ stfs f13, 0x8(r30) +/* 00004680 00011410 80 01 00 44 */ lwz r0, 0x44(r1) +/* 00004684 00011414 7C 08 03 A6 */ mtlr r0 +/* 00004688 00011418 BB 81 00 30 */ lmw r28, 0x30(r1) +/* 0000468C 0001141C 38 21 00 40 */ addi r1, r1, 0x40 +/* 00004690 00011420 4E 80 00 20 */ blr +.endfn CameraSpeedHug__16CubicCameraMoverP8bVector3 + +# .text:0x4694 | size: 0x1B8 +.fn MakeSpace__16CubicCameraMoverP8bMatrix4, global +/* 00004694 00011424 94 21 FF D8 */ stwu r1, -0x28(r1) +/* 00004698 00011428 7C 08 02 A6 */ mflr r0 +/* 0000469C 0001142C BF 81 00 18 */ stmw r28, 0x18(r1) +/* 000046A0 00011430 90 01 00 2C */ stw r0, 0x2c(r1) +/* 000046A4 00011434 7C 7C 1B 78 */ mr r28, r3 +/* 000046A8 00011438 7C 9F 23 78 */ mr r31, r4 +/* 000046AC 0001143C 81 3C 00 08 */ lwz r9, 0x8(r28) +/* 000046B0 00011440 A8 69 00 50 */ lha r3, 0x50(r9) +/* 000046B4 00011444 80 09 00 54 */ lwz r0, 0x54(r9) +/* 000046B8 00011448 7C 7C 1A 14 */ add r3, r28, r3 +/* 000046BC 0001144C 7C 08 03 A6 */ mtlr r0 +/* 000046C0 00011450 4E 80 00 21 */ blrl +/* 000046C4 00011454 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000046C8 00011458 41 82 47 54 */ beq .L_00008E1C +/* 000046CC 0001145C 7F E3 FB 78 */ mr r3, r31 +/* 000046D0 00011460 3B BF 00 10 */ addi r29, r31, 0x10 +/* 000046D4 00011464 48 00 00 01 */ bl PSMTX44Identity +/* 000046D8 00011468 3B DF 00 20 */ addi r30, r31, 0x20 +/* 000046DC 0001146C 81 3C 00 90 */ lwz r9, 0x90(r28) +/* 000046E0 00011470 39 61 00 08 */ addi r11, r1, 0x8 +/* 000046E4 00011474 7D 64 5B 78 */ mr r4, r11 +/* 000046E8 00011478 7F E3 FB 78 */ mr r3, r31 +/* 000046EC 0001147C C0 09 00 00 */ lfs f0, 0x0(r9) +/* 000046F0 00011480 C1 A9 00 2C */ lfs f13, 0x2c(r9) +/* 000046F4 00011484 C1 89 00 58 */ lfs f12, 0x58(r9) +/* 000046F8 00011488 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 000046FC 0001148C D1 A1 00 0C */ stfs f13, 0xc(r1) +/* 00004700 00011490 D1 8B 00 08 */ stfs f12, 0x8(r11) +/* 00004704 00011494 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +/* 00004708 00011498 7F C4 F3 78 */ mr r4, r30 +/* 0000470C 0001149C 7F E5 FB 78 */ mr r5, r31 +/* 00004710 000114A0 7F A3 EB 78 */ mr r3, r29 +/* 00004714 000114A4 48 00 00 01 */ bl bCross__FP8bVector3PC8bVector3T1 +/* 00004718 000114A8 7F C3 F3 78 */ mr r3, r30 +/* 0000471C 000114AC 7F A5 EB 78 */ mr r5, r29 +/* 00004720 000114B0 7F E4 FB 78 */ mr r4, r31 +/* 00004724 000114B4 48 00 00 01 */ bl bCross__FP8bVector3PC8bVector3T1 +/* 00004728 000114B8 81 7C 00 80 */ lwz r11, 0x80(r28) +/* 0000472C 000114BC 3D 20 00 00 */ lis r9, .rodata+0x614@ha +/* 00004730 000114C0 C1 89 06 14 */ lfs f12, .rodata+0x614@l(r9) +/* 00004734 000114C4 C1 6B 00 20 */ lfs f11, 0x20(r11) +.L_00004738: +/* 00004738 000114C8 C0 0B 00 18 */ lfs f0, 0x18(r11) +/* 0000473C 000114CC C1 AB 00 1C */ lfs f13, 0x1c(r11) +.L_00004740: +/* 00004740 000114D0 D1 9F 00 3C */ stfs f12, 0x3c(r31) +/* 00004744 000114D4 D0 1F 00 30 */ stfs f0, 0x30(r31) +/* 00004748 000114D8 D1 BF 00 34 */ stfs f13, 0x34(r31) +/* 0000474C 000114DC D1 7F 00 38 */ stfs f11, 0x38(r31) +/* 00004750 000114E0 48 00 48 38 */ b .L_00008F88 +/* 00004754 000114E4 81 3C 00 80 */ lwz r9, 0x80(r28) +/* 00004758 000114E8 3D 40 00 00 */ lis r10, .rodata+0x614@ha +/* 0000475C 000114EC 3D 60 00 00 */ lis r11, .rodata+0x618@ha +/* 00004760 000114F0 C0 09 00 48 */ lfs f0, 0x48(r9) +/* 00004764 000114F4 C1 A9 00 4C */ lfs f13, 0x4c(r9) +/* 00004768 000114F8 C1 89 00 50 */ lfs f12, 0x50(r9) +/* 0000476C 000114FC C1 69 00 54 */ lfs f11, 0x54(r9) +/* 00004770 00011500 D0 1F 00 00 */ stfs f0, 0x0(r31) +/* 00004774 00011504 D1 BF 00 04 */ stfs f13, 0x4(r31) +/* 00004778 00011508 D1 9F 00 08 */ stfs f12, 0x8(r31) +/* 0000477C 0001150C D1 7F 00 0C */ stfs f11, 0xc(r31) +/* 00004780 00011510 C1 4B 06 18 */ lfs f10, .rodata+0x618@l(r11) +/* 00004784 00011514 C1 09 00 58 */ lfs f8, 0x58(r9) +/* 00004788 00011518 C0 E9 00 5C */ lfs f7, 0x5c(r9) +/* 0000478C 0001151C C0 A9 00 60 */ lfs f5, 0x60(r9) +.L_00004790: +/* 00004790 00011520 C0 69 00 64 */ lfs f3, 0x64(r9) +/* 00004794 00011524 D1 1F 00 10 */ stfs f8, 0x10(r31) +/* 00004798 00011528 D0 FF 00 14 */ stfs f7, 0x14(r31) +/* 0000479C 0001152C D0 BF 00 18 */ stfs f5, 0x18(r31) +/* 000047A0 00011530 D0 7F 00 1C */ stfs f3, 0x1c(r31) +/* 000047A4 00011534 C1 29 00 68 */ lfs f9, 0x68(r9) +/* 000047A8 00011538 C0 C9 00 6C */ lfs f6, 0x6c(r9) +/* 000047AC 0001153C C0 89 00 70 */ lfs f4, 0x70(r9) +/* 000047B0 00011540 C0 49 00 74 */ lfs f2, 0x74(r9) +/* 000047B4 00011544 D1 3F 00 20 */ stfs f9, 0x20(r31) +/* 000047B8 00011548 D0 DF 00 24 */ stfs f6, 0x24(r31) +/* 000047BC 0001154C D0 9F 00 28 */ stfs f4, 0x28(r31) +/* 000047C0 00011550 D0 5F 00 2C */ stfs f2, 0x2c(r31) +/* 000047C4 00011554 C0 09 00 18 */ lfs f0, 0x18(r9) +/* 000047C8 00011558 C1 89 00 20 */ lfs f12, 0x20(r9) +/* 000047CC 0001155C C1 A9 00 1C */ lfs f13, 0x1c(r9) +/* 000047D0 00011560 C1 6A 06 14 */ lfs f11, .rodata+0x614@l(r10) +/* 000047D4 00011564 D0 1F 00 30 */ stfs f0, 0x30(r31) +/* 000047D8 00011568 D1 BF 00 34 */ stfs f13, 0x34(r31) +/* 000047DC 0001156C D1 9F 00 38 */ stfs f12, 0x38(r31) +/* 000047E0 00011570 D1 7F 00 3C */ stfs f11, 0x3c(r31) +/* 000047E4 00011574 81 3C 00 80 */ lwz r9, 0x80(r28) +/* 000047E8 00011578 C0 09 00 70 */ lfs f0, 0x70(r9) +/* 000047EC 0001157C FC 00 50 00 */ fcmpu cr0, f0, f10 +/* 000047F0 00011580 4C 62 0B 82 */ cror un, eq, gt +/* 000047F4 00011584 41 83 48 38 */ bso .L_0000902C +/* 000047F8 00011588 FC 00 40 50 */ fneg f0, f8 +/* 000047FC 0001158C D0 1F 00 10 */ stfs f0, 0x10(r31) +/* 00004800 00011590 FD A0 38 50 */ fneg f13, f7 +/* 00004804 00011594 FD 80 28 50 */ fneg f12, f5 +/* 00004808 00011598 D1 BF 00 14 */ stfs f13, 0x14(r31) +/* 0000480C 0001159C FC 00 18 50 */ fneg f0, f3 +/* 00004810 000115A0 D1 9F 00 18 */ stfs f12, 0x18(r31) +/* 00004814 000115A4 D0 1F 00 1C */ stfs f0, 0x1c(r31) +/* 00004818 000115A8 FD A0 48 50 */ fneg f13, f9 +/* 0000481C 000115AC FD 80 30 50 */ fneg f12, f6 +/* 00004820 000115B0 D1 BF 00 20 */ stfs f13, 0x20(r31) +/* 00004824 000115B4 FD 60 20 50 */ fneg f11, f4 +/* 00004828 000115B8 D1 9F 00 24 */ stfs f12, 0x24(r31) +/* 0000482C 000115BC FC 00 10 50 */ fneg f0, f2 +/* 00004830 000115C0 D1 7F 00 28 */ stfs f11, 0x28(r31) +/* 00004834 000115C4 D0 1F 00 2C */ stfs f0, 0x2c(r31) +/* 00004838 000115C8 80 01 00 2C */ lwz r0, 0x2c(r1) +/* 0000483C 000115CC 7C 08 03 A6 */ mtlr r0 +/* 00004840 000115D0 BB 81 00 18 */ lmw r28, 0x18(r1) +/* 00004844 000115D4 38 21 00 28 */ addi r1, r1, 0x28 +/* 00004848 000115D8 4E 80 00 20 */ blr +.endfn MakeSpace__16CubicCameraMoverP8bMatrix4 + +# .text:0x484C | size: 0x94 +.fn _._16CubicCameraMover, global +/* 0000484C 000115DC 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00004850 000115E0 7C 08 02 A6 */ mflr r0 +/* 00004854 000115E4 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 00004858 000115E8 90 01 00 14 */ stw r0, 0x14(r1) +/* 0000485C 000115EC 7C 7F 1B 78 */ mr r31, r3 +/* 00004860 000115F0 3D 20 00 00 */ lis r9, _vt.16CubicCameraMover@ha +.L_00004864: +/* 00004864 000115F4 39 29 00 00 */ addi r9, r9, _vt.16CubicCameraMover@l +/* 00004868 000115F8 80 7F 00 94 */ lwz r3, 0x94(r31) +/* 0000486C 000115FC 7C 9E 23 78 */ mr r30, r4 +.L_00004870: +/* 00004870 00011600 91 3F 00 08 */ stw r9, 0x8(r31) +/* 00004874 00011604 48 00 00 01 */ bl __builtin_delete +/* 00004878 00011608 80 7F 00 84 */ lwz r3, 0x84(r31) +/* 0000487C 0001160C 48 00 00 01 */ bl __builtin_delete +/* 00004880 00011610 80 7F 00 88 */ lwz r3, 0x88(r31) +/* 00004884 00011614 48 00 00 01 */ bl __builtin_delete +/* 00004888 00011618 80 7F 00 8C */ lwz r3, 0x8c(r31) +/* 0000488C 0001161C 48 00 00 01 */ bl __builtin_delete +/* 00004890 00011620 80 7F 00 90 */ lwz r3, 0x90(r31) +/* 00004894 00011624 48 00 00 01 */ bl __builtin_delete +/* 00004898 00011628 81 7F 00 E4 */ lwz r11, 0xe4(r31) +/* 0000489C 0001162C 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 000048A0 00011630 41 82 48 C0 */ beq .L_00009160 +/* 000048A4 00011634 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 000048A8 00011638 38 80 00 03 */ li r4, 0x3 +/* 000048AC 0001163C A8 69 00 08 */ lha r3, 0x8(r9) +/* 000048B0 00011640 80 09 00 0C */ lwz r0, 0xc(r9) +/* 000048B4 00011644 7C 6B 1A 14 */ add r3, r11, r3 +/* 000048B8 00011648 7C 08 03 A6 */ mtlr r0 +/* 000048BC 0001164C 4E 80 00 21 */ blrl +/* 000048C0 00011650 7F E3 FB 78 */ mr r3, r31 +/* 000048C4 00011654 7F C4 F3 78 */ mr r4, r30 +/* 000048C8 00011658 48 00 20 35 */ bl .L_000068FC +/* 000048CC 0001165C 80 01 00 14 */ lwz r0, 0x14(r1) +/* 000048D0 00011660 7C 08 03 A6 */ mtlr r0 +/* 000048D4 00011664 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 000048D8 00011668 38 21 00 10 */ addi r1, r1, 0x10 +/* 000048DC 0001166C 4E 80 00 20 */ blr +.endfn _._16CubicCameraMover + +# .text:0x48E0 | size: 0x80 +.fn SetPovType__16CubicCameraMoveri, global +/* 000048E0 00011670 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 000048E4 00011674 7C 08 02 A6 */ mflr r0 +/* 000048E8 00011678 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 000048EC 0001167C 90 01 00 1C */ stw r0, 0x1c(r1) +/* 000048F0 00011680 7C 7E 1B 78 */ mr r30, r3 +/* 000048F4 00011684 7C 9F 23 78 */ mr r31, r4 +/* 000048F8 00011688 80 7E 00 9C */ lwz r3, 0x9c(r30) +/* 000048FC 0001168C 7C 1F 18 00 */ cmpw r31, r3 +/* 00004900 00011690 41 82 49 4C */ beq .L_0000924C +/* 00004904 00011694 48 00 0F 8D */ bl .L_00005890 +/* 00004908 00011698 7C 7D 1B 78 */ mr r29, r3 +/* 0000490C 0001169C 7F E3 FB 78 */ mr r3, r31 +/* 00004910 000116A0 48 00 0F 8D */ bl .L_0000589C +/* 00004914 000116A4 39 7E 00 A8 */ addi r11, r30, 0xa8 +/* 00004918 000116A8 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000491C 000116AC 39 40 00 00 */ li r10, 0x0 +/* 00004920 000116B0 41 82 49 2C */ beq .L_0000924C +/* 00004924 000116B4 2C 1D 00 00 */ cmpwi r29, 0x0 +/* 00004928 000116B8 40 82 49 30 */ bne .L_00009258 +/* 0000492C 000116BC 39 40 00 01 */ li r10, 0x1 +/* 00004930 000116C0 80 0B 00 00 */ lwz r0, 0x0(r11) +/* 00004934 000116C4 39 20 00 01 */ li r9, 0x1 +/* 00004938 000116C8 7C 08 53 79 */ or. r8, r0, r10 +/* 0000493C 000116CC 40 82 49 44 */ bne .L_00009280 +.L_00004940: +/* 00004940 000116D0 39 20 00 00 */ li r9, 0x0 +/* 00004944 000116D4 91 2B 00 00 */ stw r9, 0x0(r11) +/* 00004948 000116D8 93 FE 00 98 */ stw r31, 0x98(r30) +/* 0000494C 000116DC 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 00004950 000116E0 7C 08 03 A6 */ mtlr r0 +/* 00004954 000116E4 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 00004958 000116E8 38 21 00 18 */ addi r1, r1, 0x18 +/* 0000495C 000116EC 4E 80 00 20 */ blr +.endfn SetPovType__16CubicCameraMoveri + +# .text:0x4960 | size: 0x150 +# CubicCameraMover::ResetState +.fn ResetState__16CubicCameraMover, global +/* 00004960 000116F0 81 23 00 94 */ lwz r9, 0x94(r3) +/* 00004964 000116F4 39 40 00 00 */ li r10, 0x0 +/* 00004968 000116F8 3D 00 00 00 */ lis r8, RealTimeFrames@ha +/* 0000496C 000116FC 3C E0 00 00 */ lis r7, .rodata+0x61C@ha +.L_00004970: +/* 00004970 00011700 C0 09 00 08 */ lfs f0, 0x8(r9) +/* 00004974 00011704 38 C0 00 01 */ li r6, 0x1 +/* 00004978 00011708 C1 A9 00 0C */ lfs f13, 0xc(r9) +/* 0000497C 0001170C C1 89 00 34 */ lfs f12, 0x34(r9) +/* 00004980 00011710 C1 69 00 38 */ lfs f11, 0x38(r9) +/* 00004984 00011714 C1 49 00 60 */ lfs f10, 0x60(r9) +/* 00004988 00011718 C1 29 00 64 */ lfs f9, 0x64(r9) +/* 0000498C 0001171C D0 09 00 00 */ stfs f0, 0x0(r9) +/* 00004990 00011720 D1 29 00 5C */ stfs f9, 0x5c(r9) +/* 00004994 00011724 D1 A9 00 04 */ stfs f13, 0x4(r9) +/* 00004998 00011728 D1 89 00 2C */ stfs f12, 0x2c(r9) +/* 0000499C 0001172C D1 69 00 30 */ stfs f11, 0x30(r9) +/* 000049A0 00011730 D1 49 00 58 */ stfs f10, 0x58(r9) +/* 000049A4 00011734 B1 49 00 80 */ sth r10, 0x80(r9) +/* 000049A8 00011738 B1 49 00 28 */ sth r10, 0x28(r9) +/* 000049AC 0001173C B1 49 00 54 */ sth r10, 0x54(r9) +/* 000049B0 00011740 81 63 00 84 */ lwz r11, 0x84(r3) +/* 000049B4 00011744 C0 0B 00 08 */ lfs f0, 0x8(r11) +/* 000049B8 00011748 C1 AB 00 0C */ lfs f13, 0xc(r11) +/* 000049BC 0001174C D0 0B 00 00 */ stfs f0, 0x0(r11) +/* 000049C0 00011750 D1 AB 00 04 */ stfs f13, 0x4(r11) +/* 000049C4 00011754 B1 4B 00 28 */ sth r10, 0x28(r11) +/* 000049C8 00011758 81 23 00 88 */ lwz r9, 0x88(r3) +/* 000049CC 0001175C C0 09 00 08 */ lfs f0, 0x8(r9) +/* 000049D0 00011760 C1 A9 00 0C */ lfs f13, 0xc(r9) +/* 000049D4 00011764 C1 89 00 34 */ lfs f12, 0x34(r9) +/* 000049D8 00011768 C1 69 00 38 */ lfs f11, 0x38(r9) +/* 000049DC 0001176C C1 49 00 60 */ lfs f10, 0x60(r9) +/* 000049E0 00011770 D0 09 00 00 */ stfs f0, 0x0(r9) +/* 000049E4 00011774 D1 A9 00 04 */ stfs f13, 0x4(r9) +/* 000049E8 00011778 D1 89 00 2C */ stfs f12, 0x2c(r9) +/* 000049EC 0001177C D1 69 00 30 */ stfs f11, 0x30(r9) +/* 000049F0 00011780 B1 49 00 28 */ sth r10, 0x28(r9) +/* 000049F4 00011784 B1 49 00 54 */ sth r10, 0x54(r9) +.L_000049F8: +/* 000049F8 00011788 D1 49 00 58 */ stfs f10, 0x58(r9) +/* 000049FC 0001178C C0 09 00 64 */ lfs f0, 0x64(r9) +/* 00004A00 00011790 B1 49 00 80 */ sth r10, 0x80(r9) +/* 00004A04 00011794 D0 09 00 5C */ stfs f0, 0x5c(r9) +/* 00004A08 00011798 81 63 00 8C */ lwz r11, 0x8c(r3) +/* 00004A0C 0001179C C0 0B 00 08 */ lfs f0, 0x8(r11) +/* 00004A10 000117A0 C1 AB 00 0C */ lfs f13, 0xc(r11) +/* 00004A14 000117A4 C1 8B 00 34 */ lfs f12, 0x34(r11) +/* 00004A18 000117A8 C1 6B 00 38 */ lfs f11, 0x38(r11) +/* 00004A1C 000117AC C1 4B 00 60 */ lfs f10, 0x60(r11) +/* 00004A20 000117B0 C1 2B 00 64 */ lfs f9, 0x64(r11) +.L_00004A24: +/* 00004A24 000117B4 D0 0B 00 00 */ stfs f0, 0x0(r11) +/* 00004A28 000117B8 D1 AB 00 04 */ stfs f13, 0x4(r11) +/* 00004A2C 000117BC D1 8B 00 2C */ stfs f12, 0x2c(r11) +/* 00004A30 000117C0 D1 6B 00 30 */ stfs f11, 0x30(r11) +/* 00004A34 000117C4 D1 4B 00 58 */ stfs f10, 0x58(r11) +/* 00004A38 000117C8 D1 2B 00 5C */ stfs f9, 0x5c(r11) +/* 00004A3C 000117CC B1 4B 00 80 */ sth r10, 0x80(r11) +/* 00004A40 000117D0 B1 4B 00 28 */ sth r10, 0x28(r11) +/* 00004A44 000117D4 B1 4B 00 54 */ sth r10, 0x54(r11) +/* 00004A48 000117D8 81 23 00 90 */ lwz r9, 0x90(r3) +.L_00004A4C: +/* 00004A4C 000117DC C0 09 00 08 */ lfs f0, 0x8(r9) +/* 00004A50 000117E0 C1 A9 00 0C */ lfs f13, 0xc(r9) +/* 00004A54 000117E4 C1 89 00 34 */ lfs f12, 0x34(r9) +/* 00004A58 000117E8 C1 69 00 38 */ lfs f11, 0x38(r9) +/* 00004A5C 000117EC C1 49 00 60 */ lfs f10, 0x60(r9) +/* 00004A60 000117F0 D0 09 00 00 */ stfs f0, 0x0(r9) +/* 00004A64 000117F4 C1 29 00 64 */ lfs f9, 0x64(r9) +/* 00004A68 000117F8 D1 A9 00 04 */ stfs f13, 0x4(r9) +/* 00004A6C 000117FC D1 89 00 2C */ stfs f12, 0x2c(r9) +/* 00004A70 00011800 D1 69 00 30 */ stfs f11, 0x30(r9) +/* 00004A74 00011804 D1 49 00 58 */ stfs f10, 0x58(r9) +/* 00004A78 00011808 B1 49 00 28 */ sth r10, 0x28(r9) +/* 00004A7C 0001180C B1 49 00 54 */ sth r10, 0x54(r9) +/* 00004A80 00011810 D1 29 00 5C */ stfs f9, 0x5c(r9) +/* 00004A84 00011814 B1 49 00 80 */ sth r10, 0x80(r9) +/* 00004A88 00011818 80 08 00 00 */ lwz r0, RealTimeFrames@l(r8) +/* 00004A8C 0001181C 81 23 00 1C */ lwz r9, 0x1c(r3) +/* 00004A90 00011820 C0 07 06 1C */ lfs f0, .rodata+0x61C@l(r7) +/* 00004A94 00011824 90 09 02 88 */ stw r0, 0x288(r9) +.L_00004A98: +/* 00004A98 00011828 90 C9 02 7C */ stw r6, 0x27c(r9) +/* 00004A9C 0001182C D0 03 00 DC */ stfs f0, 0xdc(r3) +/* 00004AA0 00011830 D0 03 00 D8 */ stfs f0, 0xd8(r3) +/* 00004AA4 00011834 D0 03 00 D4 */ stfs f0, 0xd4(r3) +/* 00004AA8 00011838 D0 03 00 E0 */ stfs f0, 0xe0(r3) +/* 00004AAC 0001183C 4E 80 00 20 */ blr +.endfn ResetState__16CubicCameraMover + +# .text:0x4AB0 | size: 0x80 +.fn __6Bezier, global +/* 00004AB0 00011840 3C E0 00 00 */ lis r7, .rodata+0x620@ha +/* 00004AB4 00011844 3C A0 00 00 */ lis r5, .rodata+0x624@ha +/* 00004AB8 00011848 3D 40 00 00 */ lis r10, .rodata+0x628@ha +/* 00004ABC 0001184C 3C C0 00 00 */ lis r6, .rodata+0x62C@ha +/* 00004AC0 00011850 3D 60 00 00 */ lis r11, .rodata+0x630@ha +/* 00004AC4 00011854 3D 00 00 00 */ lis r8, .rodata+0x634@ha +/* 00004AC8 00011858 C1 8B 06 30 */ lfs f12, .rodata+0x630@l(r11) +/* 00004ACC 0001185C 7C 69 1B 78 */ mr r9, r3 +/* 00004AD0 00011860 C1 6A 06 28 */ lfs f11, .rodata+0x628@l(r10) +/* 00004AD4 00011864 38 00 00 00 */ li r0, 0x0 +/* 00004AD8 00011868 C1 27 06 20 */ lfs f9, .rodata+0x620@l(r7) +/* 00004ADC 0001186C C1 45 06 24 */ lfs f10, .rodata+0x624@l(r5) +/* 00004AE0 00011870 C0 06 06 2C */ lfs f0, .rodata+0x62C@l(r6) +/* 00004AE4 00011874 C1 A8 06 34 */ lfs f13, .rodata+0x634@l(r8) +/* 00004AE8 00011878 90 09 00 00 */ stw r0, 0x0(r9) +/* 00004AEC 0001187C D0 09 00 10 */ stfs f0, 0x10(r9) +/* 00004AF0 00011880 D1 A9 00 1C */ stfs f13, 0x1c(r9) +/* 00004AF4 00011884 D1 69 00 2C */ stfs f11, 0x2c(r9) +/* 00004AF8 00011888 D1 49 00 30 */ stfs f10, 0x30(r9) +/* 00004AFC 0001188C D1 89 00 3C */ stfs f12, 0x3c(r9) +/* 00004B00 00011890 D1 29 00 40 */ stfs f9, 0x40(r9) +.L_00004B04: +/* 00004B04 00011894 D1 29 00 04 */ stfs f9, 0x4(r9) +/* 00004B08 00011898 D1 49 00 08 */ stfs f10, 0x8(r9) +/* 00004B0C 0001189C D1 69 00 0C */ stfs f11, 0xc(r9) +/* 00004B10 000118A0 D1 89 00 14 */ stfs f12, 0x14(r9) +.L_00004B14: +/* 00004B14 000118A4 D1 69 00 18 */ stfs f11, 0x18(r9) +/* 00004B18 000118A8 D1 69 00 20 */ stfs f11, 0x20(r9) +/* 00004B1C 000118AC D1 89 00 24 */ stfs f12, 0x24(r9) +/* 00004B20 000118B0 D1 89 00 28 */ stfs f12, 0x28(r9) +/* 00004B24 000118B4 D1 89 00 34 */ stfs f12, 0x34(r9) +/* 00004B28 000118B8 D1 89 00 38 */ stfs f12, 0x38(r9) +/* 00004B2C 000118BC 4E 80 00 20 */ blr +.endfn __6Bezier + +# .text:0x4B30 | size: 0x80 +.fn GetPoint__6BezierP8bVector3f, global +/* 00004B30 000118C0 94 21 FF C8 */ stwu r1, -0x38(r1) +/* 00004B34 000118C4 7C 08 02 A6 */ mflr r0 +/* 00004B38 000118C8 BF A1 00 2C */ stmw r29, 0x2c(r1) +/* 00004B3C 000118CC 90 01 00 3C */ stw r0, 0x3c(r1) +/* 00004B40 000118D0 7C 7F 1B 78 */ mr r31, r3 +/* 00004B44 000118D4 7C 9D 23 78 */ mr r29, r4 +/* 00004B48 000118D8 80 1F 00 00 */ lwz r0, 0x0(r31) +/* 00004B4C 000118DC 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00004B50 000118E0 41 82 4B 9C */ beq .L_000096EC +/* 00004B54 000118E4 3D 20 00 00 */ lis r9, .rodata+0x638@ha +/* 00004B58 000118E8 3B C1 00 18 */ addi r30, r1, 0x18 +/* 00004B5C 000118EC C1 89 06 38 */ lfs f12, .rodata+0x638@l(r9) +/* 00004B60 000118F0 7F C3 F3 78 */ mr r3, r30 +/* 00004B64 000118F4 38 9F 00 04 */ addi r4, r31, 0x4 +/* 00004B68 000118F8 38 A1 00 08 */ addi r5, r1, 0x8 +/* 00004B6C 000118FC EC 0C 08 28 */ fsubs f0, f12, f1 +/* 00004B70 00011900 D1 81 00 14 */ stfs f12, 0x14(r1) +/* 00004B74 00011904 ED A0 00 32 */ fmuls f13, f0, f0 +/* 00004B78 00011908 D0 01 00 10 */ stfs f0, 0x10(r1) +/* 00004B7C 0001190C EC 00 03 72 */ fmuls f0, f0, f13 +/* 00004B80 00011910 D1 A1 00 0C */ stfs f13, 0xc(r1) +/* 00004B84 00011914 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 00004B88 00011918 48 00 00 01 */ bl bMulMatrix__FP8bVector4PC8bMatrix4PC8bVector4 +/* 00004B8C 0001191C 80 9F 00 00 */ lwz r4, 0x0(r31) +/* 00004B90 00011920 7F A3 EB 78 */ mr r3, r29 +/* 00004B94 00011924 7F C5 F3 78 */ mr r5, r30 +/* 00004B98 00011928 48 00 00 01 */ bl bMulMatrix__FP8bVector4PC8bMatrix4PC8bVector4 +/* 00004B9C 0001192C 80 01 00 3C */ lwz r0, 0x3c(r1) +/* 00004BA0 00011930 7C 08 03 A6 */ mtlr r0 +/* 00004BA4 00011934 BB A1 00 2C */ lmw r29, 0x2c(r1) +/* 00004BA8 00011938 38 21 00 38 */ addi r1, r1, 0x38 +/* 00004BAC 0001193C 4E 80 00 20 */ blr +.endfn GetPoint__6BezierP8bVector3f + +# .text:0x4BB0 | size: 0x60 +.fn __25RearViewMirrorCameraMoveriP12CameraAnchor, global +/* 00004BB0 00011940 94 21 FF F0 */ stwu r1, -0x10(r1) +.L_00004BB4: +/* 00004BB4 00011944 7C 08 02 A6 */ mflr r0 +/* 00004BB8 00011948 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 00004BBC 0001194C 90 01 00 14 */ stw r0, 0x14(r1) +/* 00004BC0 00011950 7C 7F 1B 78 */ mr r31, r3 +/* 00004BC4 00011954 7C BE 2B 78 */ mr r30, r5 +/* 00004BC8 00011958 38 A0 00 05 */ li r5, 0x5 +/* 00004BCC 0001195C 48 00 1F 1D */ bl .L_00006AE8 +/* 00004BD0 00011960 3D 60 00 00 */ lis r11, _6Camera.StopUpdating@ha +/* 00004BD4 00011964 3D 20 00 00 */ lis r9, _vt.25RearViewMirrorCameraMover@ha +/* 00004BD8 00011968 80 0B 00 00 */ lwz r0, _6Camera.StopUpdating@l(r11) +/* 00004BDC 0001196C 39 29 00 00 */ addi r9, r9, _vt.25RearViewMirrorCameraMover@l +/* 00004BE0 00011970 91 3F 00 08 */ stw r9, 0x8(r31) +/* 00004BE4 00011974 93 DF 00 80 */ stw r30, 0x80(r31) +/* 00004BE8 00011978 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00004BEC 0001197C 40 82 4B F8 */ bne .L_000097E4 +/* 00004BF0 00011980 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 00004BF4 00011984 90 09 02 8C */ stw r0, 0x28c(r9) +/* 00004BF8 00011988 7F E3 FB 78 */ mr r3, r31 +/* 00004BFC 0001198C 80 01 00 14 */ lwz r0, 0x14(r1) +/* 00004C00 00011990 7C 08 03 A6 */ mtlr r0 +/* 00004C04 00011994 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 00004C08 00011998 38 21 00 10 */ addi r1, r1, 0x10 +/* 00004C0C 0001199C 4E 80 00 20 */ blr +.endfn __25RearViewMirrorCameraMoveriP12CameraAnchor + +# .text:0x4C10 | size: 0x30 +.fn _._25RearViewMirrorCameraMover, global +/* 00004C10 000119A0 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 00004C14 000119A4 7C 08 02 A6 */ mflr r0 +/* 00004C18 000119A8 90 01 00 0C */ stw r0, 0xc(r1) +/* 00004C1C 000119AC 3D 20 00 00 */ lis r9, _vt.25RearViewMirrorCameraMover@ha +/* 00004C20 000119B0 7C 6B 1B 78 */ mr r11, r3 +/* 00004C24 000119B4 39 29 00 00 */ addi r9, r9, _vt.25RearViewMirrorCameraMover@l +/* 00004C28 000119B8 91 2B 00 08 */ stw r9, 0x8(r11) +/* 00004C2C 000119BC 48 00 20 35 */ bl .L_00006C60 +/* 00004C30 000119C0 80 01 00 0C */ lwz r0, 0xc(r1) +/* 00004C34 000119C4 7C 08 03 A6 */ mtlr r0 +/* 00004C38 000119C8 38 21 00 08 */ addi r1, r1, 0x8 +/* 00004C3C 000119CC 4E 80 00 20 */ blr +.endfn _._25RearViewMirrorCameraMover + +# .text:0x4C40 | size: 0x188 +.fn Update__25RearViewMirrorCameraMoverf, global +/* 00004C40 000119D0 94 21 FE D8 */ stwu r1, -0x128(r1) +/* 00004C44 000119D4 7C 08 02 A6 */ mflr r0 +/* 00004C48 000119D8 F3 E1 01 20 */ psq_st f31, 0x120(r1), 0, qr0 +/* 00004C4C 000119DC BF 61 01 0C */ stmw r27, 0x10c(r1) +/* 00004C50 000119E0 90 01 01 2C */ stw r0, 0x12c(r1) +/* 00004C54 000119E4 3D 20 00 00 */ lis r9, FEDatabase@ha +/* 00004C58 000119E8 7C 7F 1B 78 */ mr r31, r3 +/* 00004C5C 000119EC 81 69 00 00 */ lwz r11, FEDatabase@l(r9) +/* 00004C60 000119F0 FF E0 08 90 */ fmr f31, f1 +/* 00004C64 000119F4 81 2B 00 20 */ lwz r9, 0x20(r11) +/* 00004C68 000119F8 80 09 00 3C */ lwz r0, 0x3c(r9) +/* 00004C6C 000119FC 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00004C70 00011A00 41 82 4D B0 */ beq .L_00009A20 +/* 00004C74 00011A04 3B 81 00 08 */ addi r28, r1, 0x8 +/* 00004C78 00011A08 3B C1 00 48 */ addi r30, r1, 0x48 +/* 00004C7C 00011A0C 3B A1 00 88 */ addi r29, r1, 0x88 +/* 00004C80 00011A10 7F 83 E3 78 */ mr r3, r28 +.L_00004C84: +/* 00004C84 00011A14 48 00 00 01 */ bl PSMTX44Identity +/* 00004C88 00011A18 81 3F 00 80 */ lwz r9, 0x80(r31) +/* 00004C8C 00011A1C 3B 61 00 C8 */ addi r27, r1, 0xc8 +/* 00004C90 00011A20 7F A4 EB 78 */ mr r4, r29 +/* 00004C94 00011A24 C1 A9 00 18 */ lfs f13, 0x18(r9) +/* 00004C98 00011A28 38 69 00 48 */ addi r3, r9, 0x48 +/* 00004C9C 00011A2C FD A0 68 50 */ fneg f13, f13 +/* 00004CA0 00011A30 D1 A1 00 38 */ stfs f13, 0x38(r1) +/* 00004CA4 00011A34 C0 09 00 1C */ lfs f0, 0x1c(r9) +/* 00004CA8 00011A38 FC 00 00 50 */ fneg f0, f0 +/* 00004CAC 00011A3C D0 01 00 3C */ stfs f0, 0x3c(r1) +/* 00004CB0 00011A40 C1 A9 00 20 */ lfs f13, 0x20(r9) +/* 00004CB4 00011A44 FD A0 68 50 */ fneg f13, f13 +/* 00004CB8 00011A48 D1 A1 00 40 */ stfs f13, 0x40(r1) +/* 00004CBC 00011A4C 48 00 00 01 */ bl PSMTX44Copy +/* 00004CC0 00011A50 38 61 00 48 */ addi r3, r1, 0x48 +/* 00004CC4 00011A54 7F A4 EB 78 */ mr r4, r29 +/* 00004CC8 00011A58 48 00 00 01 */ bl bTransposeMatrix__FP8bMatrix4PC8bMatrix4 +/* 00004CCC 00011A5C 3D 20 00 00 */ lis r9, .rodata+0x63C@ha +/* 00004CD0 00011A60 7F C3 F3 78 */ mr r3, r30 +/* 00004CD4 00011A64 C0 09 06 3C */ lfs f0, .rodata+0x63C@l(r9) +/* 00004CD8 00011A68 7F C4 F3 78 */ mr r4, r30 +/* 00004CDC 00011A6C 38 A0 40 00 */ li r5, 0x4000 +/* 00004CE0 00011A70 D0 01 00 74 */ stfs f0, 0x74(r1) +/* 00004CE4 00011A74 D0 01 00 54 */ stfs f0, 0x54(r1) +/* 00004CE8 00011A78 D0 01 00 64 */ stfs f0, 0x64(r1) +/* 00004CEC 00011A7C 48 00 00 01 */ bl eRotateX__FP8bMatrix4T0Us +/* 00004CF0 00011A80 7F C3 F3 78 */ mr r3, r30 +/* 00004CF4 00011A84 7F C4 F3 78 */ mr r4, r30 +.L_00004CF8: +/* 00004CF8 00011A88 38 A0 40 00 */ li r5, 0x4000 +/* 00004CFC 00011A8C 48 00 00 01 */ bl eRotateY__FP8bMatrix4T0Us +/* 00004D00 00011A90 7F C3 F3 78 */ mr r3, r30 +/* 00004D04 00011A94 7F C4 F3 78 */ mr r4, r30 +/* 00004D08 00011A98 38 A0 00 00 */ li r5, 0x0 +/* 00004D0C 00011A9C 48 00 00 01 */ bl eRotateZ__FP8bMatrix4T0Us +/* 00004D10 00011AA0 7F 84 E3 78 */ mr r4, r28 +/* 00004D14 00011AA4 7F C5 F3 78 */ mr r5, r30 +/* 00004D18 00011AA8 7F 63 DB 78 */ mr r3, r27 +/* 00004D1C 00011AAC 48 00 00 01 */ bl eMulMatrix__FP8bMatrix4N20 +/* 00004D20 00011AB0 3D 20 00 00 */ lis r9, RVMOffsetInCar@ha +/* 00004D24 00011AB4 C1 81 00 F8 */ lfs f12, 0xf8(r1) +/* 00004D28 00011AB8 C1 69 00 00 */ lfs f11, RVMOffsetInCar@l(r9) +/* 00004D2C 00011ABC 39 69 00 00 */ addi r11, r9, RVMOffsetInCar@l +/* 00004D30 00011AC0 C1 4B 00 08 */ lfs f10, 0x8(r11) +/* 00004D34 00011AC4 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha +/* 00004D38 00011AC8 ED 8C 58 2A */ fadds f12, f12, f11 +/* 00004D3C 00011ACC C0 01 00 FC */ lfs f0, 0xfc(r1) +/* 00004D40 00011AD0 C1 6B 00 04 */ lfs f11, 0x4(r11) +/* 00004D44 00011AD4 C1 A1 01 00 */ lfs f13, 0x100(r1) +/* 00004D48 00011AD8 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) +/* 00004D4C 00011ADC EC 00 58 2A */ fadds f0, f0, f11 +/* 00004D50 00011AE0 ED AD 50 2A */ fadds f13, f13, f10 +/* 00004D54 00011AE4 D1 81 00 F8 */ stfs f12, 0xf8(r1) +/* 00004D58 00011AE8 D0 01 00 FC */ stfs f0, 0xfc(r1) +/* 00004D5C 00011AEC 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00004D60 00011AF0 D1 A1 01 00 */ stfs f13, 0x100(r1) +/* 00004D64 00011AF4 40 82 4D 74 */ bne .L_00009AD8 +/* 00004D68 00011AF8 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 00004D6C 00011AFC 38 00 4E 20 */ li r0, 0x4e20 +/* 00004D70 00011B00 B0 09 00 C4 */ sth r0, 0xc4(r9) +/* 00004D74 00011B04 3D 60 00 00 */ lis r11, RVMnearz@ha +/* 00004D78 00011B08 81 5F 00 1C */ lwz r10, 0x1c(r31) +/* 00004D7C 00011B0C C0 0B 00 00 */ lfs f0, RVMnearz@l(r11) +/* 00004D80 00011B10 3D 20 00 00 */ lis r9, RVMfarz@ha +/* 00004D84 00011B14 C1 A9 00 00 */ lfs f13, RVMfarz@l(r9) +/* 00004D88 00011B18 7F 64 DB 78 */ mr r4, r27 +/* 00004D8C 00011B1C D0 0A 00 BC */ stfs f0, 0xbc(r10) +/* 00004D90 00011B20 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 00004D94 00011B24 D1 A9 00 C0 */ stfs f13, 0xc0(r9) +/* 00004D98 00011B28 80 7F 00 10 */ lwz r3, 0x10(r31) +/* 00004D9C 00011B2C 48 00 00 01 */ bl ApplyCameraShake__FiP8bMatrix4 +/* 00004DA0 00011B30 80 7F 00 1C */ lwz r3, 0x1c(r31) +/* 00004DA4 00011B34 7F 64 DB 78 */ mr r4, r27 +/* 00004DA8 00011B38 FC 20 F8 90 */ fmr f1, f31 +/* 00004DAC 00011B3C 48 00 04 ED */ bl .L_00005298 +/* 00004DB0 00011B40 80 01 01 2C */ lwz r0, 0x12c(r1) +/* 00004DB4 00011B44 7C 08 03 A6 */ mtlr r0 +/* 00004DB8 00011B48 BB 61 01 0C */ lmw r27, 0x10c(r1) +/* 00004DBC 00011B4C E3 E1 01 20 */ psq_l f31, 0x120(r1), 0, qr0 +/* 00004DC0 00011B50 38 21 01 28 */ addi r1, r1, 0x128 +/* 00004DC4 00011B54 4E 80 00 20 */ blr +.endfn Update__25RearViewMirrorCameraMoverf + +# .text:0x4DC8 | size: 0xA8 +.fn __19TrackCarCameraMoveriP12CameraAnchorb, global +/* 00004DC8 00011B58 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 00004DCC 00011B5C 7C 08 02 A6 */ mflr r0 +/* 00004DD0 00011B60 BF 81 00 08 */ stmw r28, 0x8(r1) +/* 00004DD4 00011B64 90 01 00 1C */ stw r0, 0x1c(r1) +/* 00004DD8 00011B68 7C 7E 1B 78 */ mr r30, r3 +.L_00004DDC: +/* 00004DDC 00011B6C 7C BD 2B 78 */ mr r29, r5 +/* 00004DE0 00011B70 7C DC 33 78 */ mr r28, r6 +/* 00004DE4 00011B74 38 A0 00 06 */ li r5, 0x6 +/* 00004DE8 00011B78 48 00 1F 1D */ bl .L_00006D04 +/* 00004DEC 00011B7C 3D 20 00 00 */ lis r9, _vt.19TrackCarCameraMover@ha +/* 00004DF0 00011B80 93 BE 00 A0 */ stw r29, 0xa0(r30) +/* 00004DF4 00011B84 39 29 00 00 */ addi r9, r9, _vt.19TrackCarCameraMover@l +/* 00004DF8 00011B88 3D 60 00 00 */ lis r11, .rodata+0x640@ha +/* 00004DFC 00011B8C 91 3E 00 08 */ stw r9, 0x8(r30) +/* 00004E00 00011B90 3D 40 00 00 */ lis r10, .rodata+0x644@ha +/* 00004E04 00011B94 C1 AB 06 40 */ lfs f13, .rodata+0x640@l(r11) +/* 00004E08 00011B98 39 00 00 01 */ li r8, 0x1 +/* 00004E0C 00011B9C C0 0A 06 44 */ lfs f0, .rodata+0x644@l(r10) +/* 00004E10 00011BA0 38 00 00 00 */ li r0, 0x0 +/* 00004E14 00011BA4 39 20 00 00 */ li r9, 0x0 +.L_00004E18: +/* 00004E18 00011BA8 93 9E 00 D0 */ stw r28, 0xd0(r30) +/* 00004E1C 00011BAC 7F C3 F3 78 */ mr r3, r30 +/* 00004E20 00011BB0 D1 BE 00 C8 */ stfs f13, 0xc8(r30) +/* 00004E24 00011BB4 B0 1E 00 CC */ sth r0, 0xcc(r30) +/* 00004E28 00011BB8 B1 1E 00 CE */ sth r8, 0xce(r30) +/* 00004E2C 00011BBC D0 1E 00 C0 */ stfs f0, 0xc0(r30) +/* 00004E30 00011BC0 91 3E 00 D4 */ stw r9, 0xd4(r30) +/* 00004E34 00011BC4 D0 1E 00 A4 */ stfs f0, 0xa4(r30) +/* 00004E38 00011BC8 D0 1E 00 A8 */ stfs f0, 0xa8(r30) +.L_00004E3C: +/* 00004E3C 00011BCC D0 1E 00 AC */ stfs f0, 0xac(r30) +/* 00004E40 00011BD0 D0 1E 00 B0 */ stfs f0, 0xb0(r30) +/* 00004E44 00011BD4 D0 1E 00 C4 */ stfs f0, 0xc4(r30) +/* 00004E48 00011BD8 D0 1E 00 B4 */ stfs f0, 0xb4(r30) +/* 00004E4C 00011BDC D0 1E 00 B8 */ stfs f0, 0xb8(r30) +/* 00004E50 00011BE0 D0 1E 00 BC */ stfs f0, 0xbc(r30) +/* 00004E54 00011BE4 48 00 4E 71 */ bl .L_00009CC4 +/* 00004E58 00011BE8 7F C3 F3 78 */ mr r3, r30 +/* 00004E5C 00011BEC 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 00004E60 00011BF0 7C 08 03 A6 */ mtlr r0 +/* 00004E64 00011BF4 BB 81 00 08 */ lmw r28, 0x8(r1) +/* 00004E68 00011BF8 38 21 00 18 */ addi r1, r1, 0x18 +/* 00004E6C 00011BFC 4E 80 00 20 */ blr +.endfn __19TrackCarCameraMoveriP12CameraAnchorb + +# .text:0x4E70 | size: 0x134 +# TrackCarCameraMover::Init +.fn Init__19TrackCarCameraMover, global +/* 00004E70 00011C00 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 00004E74 00011C04 7C 08 02 A6 */ mflr r0 +/* 00004E78 00011C08 BF C1 00 18 */ stmw r30, 0x18(r1) +/* 00004E7C 00011C0C 90 01 00 24 */ stw r0, 0x24(r1) +/* 00004E80 00011C10 7C 7E 1B 78 */ mr r30, r3 +/* 00004E84 00011C14 38 00 00 00 */ li r0, 0x0 +/* 00004E88 00011C18 90 1E 00 D4 */ stw r0, 0xd4(r30) +/* 00004E8C 00011C1C 3D 60 00 00 */ lis r11, TrackCarIsoZoomDistance@ha +/* 00004E90 00011C20 81 3E 00 A0 */ lwz r9, 0xa0(r30) +/* 00004E94 00011C24 3D 00 00 00 */ lis r8, TrackCarLookOffsetX@ha +/* 00004E98 00011C28 3C E0 00 00 */ lis r7, TrackCarLookOffsetY@ha +/* 00004E9C 00011C2C 3D 40 00 00 */ lis r10, TrackCarLookOffsetZ@ha +/* 00004EA0 00011C30 C1 69 00 20 */ lfs f11, 0x20(r9) +/* 00004EA4 00011C34 38 61 00 08 */ addi r3, r1, 0x8 +/* 00004EA8 00011C38 C0 09 00 18 */ lfs f0, 0x18(r9) +/* 00004EAC 00011C3C 38 89 00 48 */ addi r4, r9, 0x48 +/* 00004EB0 00011C40 C1 A9 00 1C */ lfs f13, 0x1c(r9) +/* 00004EB4 00011C44 7C 65 1B 78 */ mr r5, r3 +/* 00004EB8 00011C48 D1 7E 00 88 */ stfs f11, 0x88(r30) +/* 00004EBC 00011C4C 3B FE 00 80 */ addi r31, r30, 0x80 +/* 00004EC0 00011C50 D0 1E 00 80 */ stfs f0, 0x80(r30) +/* 00004EC4 00011C54 D1 BE 00 84 */ stfs f13, 0x84(r30) +/* 00004EC8 00011C58 C0 09 00 18 */ lfs f0, 0x18(r9) +/* 00004ECC 00011C5C C1 A9 00 1C */ lfs f13, 0x1c(r9) +/* 00004ED0 00011C60 C1 89 00 20 */ lfs f12, 0x20(r9) +/* 00004ED4 00011C64 D0 1E 00 90 */ stfs f0, 0x90(r30) +.L_00004ED8: +/* 00004ED8 00011C68 D1 BE 00 94 */ stfs f13, 0x94(r30) +/* 00004EDC 00011C6C D1 9E 00 98 */ stfs f12, 0x98(r30) +/* 00004EE0 00011C70 C0 0B 00 00 */ lfs f0, TrackCarIsoZoomDistance@l(r11) +.L_00004EE4: +/* 00004EE4 00011C74 ED 6B 00 2A */ fadds f11, f11, f0 +/* 00004EE8 00011C78 D1 7E 00 88 */ stfs f11, 0x88(r30) +/* 00004EEC 00011C7C C0 08 00 00 */ lfs f0, TrackCarLookOffsetX@l(r8) +/* 00004EF0 00011C80 C1 A7 00 00 */ lfs f13, TrackCarLookOffsetY@l(r7) +/* 00004EF4 00011C84 C1 8A 00 00 */ lfs f12, TrackCarLookOffsetZ@l(r10) +/* 00004EF8 00011C88 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 00004EFC 00011C8C D1 A1 00 0C */ stfs f13, 0xc(r1) +/* 00004F00 00011C90 D1 81 00 10 */ stfs f12, 0x10(r1) +.L_00004F04: +/* 00004F04 00011C94 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 +/* 00004F08 00011C98 C1 81 00 08 */ lfs f12, 0x8(r1) +/* 00004F0C 00011C9C 3D 20 00 00 */ lis r9, .rodata+0x648@ha +/* 00004F10 00011CA0 C1 61 00 0C */ lfs f11, 0xc(r1) +/* 00004F14 00011CA4 3D 40 00 00 */ lis r10, RealTimeFrames@ha +.L_00004F18: +/* 00004F18 00011CA8 C1 41 00 10 */ lfs f10, 0x10(r1) +/* 00004F1C 00011CAC 3D 60 00 00 */ lis r11, _6Camera.StopUpdating@ha +/* 00004F20 00011CB0 C1 3E 00 90 */ lfs f9, 0x90(r30) +.L_00004F24: +/* 00004F24 00011CB4 38 E0 00 01 */ li r7, 0x1 +/* 00004F28 00011CB8 C1 1E 00 94 */ lfs f8, 0x94(r30) +.L_00004F2C: +/* 00004F2C 00011CBC C1 BE 00 98 */ lfs f13, 0x98(r30) +/* 00004F30 00011CC0 ED 29 60 2A */ fadds f9, f9, f12 +/* 00004F34 00011CC4 C0 09 06 48 */ lfs f0, .rodata+0x648@l(r9) +/* 00004F38 00011CC8 ED 08 58 2A */ fadds f8, f8, f11 +/* 00004F3C 00011CCC 80 0B 00 00 */ lwz r0, _6Camera.StopUpdating@l(r11) +/* 00004F40 00011CD0 ED AD 50 2A */ fadds f13, f13, f10 +/* 00004F44 00011CD4 81 0A 00 00 */ lwz r8, RealTimeFrames@l(r10) +/* 00004F48 00011CD8 81 3E 00 1C */ lwz r9, 0x1c(r30) +.L_00004F4C: +/* 00004F4C 00011CDC 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00004F50 00011CE0 D1 3E 00 90 */ stfs f9, 0x90(r30) +/* 00004F54 00011CE4 D1 1E 00 94 */ stfs f8, 0x94(r30) +/* 00004F58 00011CE8 D1 BE 00 98 */ stfs f13, 0x98(r30) +/* 00004F5C 00011CEC D0 1E 00 B0 */ stfs f0, 0xb0(r30) +/* 00004F60 00011CF0 D0 1E 00 A4 */ stfs f0, 0xa4(r30) +/* 00004F64 00011CF4 D0 1E 00 AC */ stfs f0, 0xac(r30) +/* 00004F68 00011CF8 D0 1E 00 A8 */ stfs f0, 0xa8(r30) +/* 00004F6C 00011CFC 91 09 02 88 */ stw r8, 0x288(r9) +/* 00004F70 00011D00 90 E9 02 7C */ stw r7, 0x27c(r9) +/* 00004F74 00011D04 40 82 4F 90 */ bne .L_00009F04 +/* 00004F78 00011D08 80 9E 00 A0 */ lwz r4, 0xa0(r30) +/* 00004F7C 00011D0C 7F E3 FB 78 */ mr r3, r31 +/* 00004F80 00011D10 83 DE 00 1C */ lwz r30, 0x1c(r30) +/* 00004F84 00011D14 38 84 00 18 */ addi r4, r4, 0x18 +/* 00004F88 00011D18 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 +/* 00004F8C 00011D1C D0 3E 00 B0 */ stfs f1, 0xb0(r30) +/* 00004F90 00011D20 80 01 00 24 */ lwz r0, 0x24(r1) +/* 00004F94 00011D24 7C 08 03 A6 */ mtlr r0 +/* 00004F98 00011D28 BB C1 00 18 */ lmw r30, 0x18(r1) +/* 00004F9C 00011D2C 38 21 00 20 */ addi r1, r1, 0x20 +/* 00004FA0 00011D30 4E 80 00 20 */ blr +.endfn Init__19TrackCarCameraMover + +# .text:0x4FA4 | size: 0x7C +.fn _._19TrackCarCameraMover, global +/* 00004FA4 00011D34 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 00004FA8 00011D38 7C 08 02 A6 */ mflr r0 +/* 00004FAC 00011D3C 90 01 00 0C */ stw r0, 0xc(r1) +/* 00004FB0 00011D40 3D 60 00 00 */ lis r11, .rodata+0x64C@ha +/* 00004FB4 00011D44 3D 20 00 00 */ lis r9, _vt.19TrackCarCameraMover@ha +/* 00004FB8 00011D48 C0 0B 06 4C */ lfs f0, .rodata+0x64C@l(r11) +.L_00004FBC: +/* 00004FBC 00011D4C 3D 40 00 00 */ lis r10, _6Camera.StopUpdating@ha +/* 00004FC0 00011D50 80 0A 00 00 */ lwz r0, _6Camera.StopUpdating@l(r10) +/* 00004FC4 00011D54 39 29 00 00 */ addi r9, r9, _vt.19TrackCarCameraMover@l +/* 00004FC8 00011D58 81 63 00 1C */ lwz r11, 0x1c(r3) +/* 00004FCC 00011D5C 91 23 00 08 */ stw r9, 0x8(r3) +/* 00004FD0 00011D60 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00004FD4 00011D64 D0 0B 00 CC */ stfs f0, 0xcc(r11) +/* 00004FD8 00011D68 40 82 4F F4 */ bne .L_00009FCC +/* 00004FDC 00011D6C 3D 20 00 00 */ lis r9, .rodata+0x650@ha +/* 00004FE0 00011D70 81 63 00 1C */ lwz r11, 0x1c(r3) +/* 00004FE4 00011D74 C0 09 06 50 */ lfs f0, .rodata+0x650@l(r9) +/* 00004FE8 00011D78 D0 0B 00 B4 */ stfs f0, 0xb4(r11) +/* 00004FEC 00011D7C 81 23 00 1C */ lwz r9, 0x1c(r3) +/* 00004FF0 00011D80 D0 09 00 B8 */ stfs f0, 0xb8(r9) +/* 00004FF4 00011D84 3D 20 00 00 */ lis r9, RealTimeFrames@ha +/* 00004FF8 00011D88 81 63 00 1C */ lwz r11, 0x1c(r3) +/* 00004FFC 00011D8C 81 49 00 00 */ lwz r10, RealTimeFrames@l(r9) +/* 00005000 00011D90 38 00 00 01 */ li r0, 0x1 +/* 00005004 00011D94 90 0B 02 7C */ stw r0, 0x27c(r11) +/* 00005008 00011D98 91 4B 02 88 */ stw r10, 0x288(r11) +/* 0000500C 00011D9C 48 00 20 35 */ bl .L_00007040 +/* 00005010 00011DA0 80 01 00 0C */ lwz r0, 0xc(r1) +/* 00005014 00011DA4 7C 08 03 A6 */ mtlr r0 +/* 00005018 00011DA8 38 21 00 08 */ addi r1, r1, 0x8 +/* 0000501C 00011DAC 4E 80 00 20 */ blr +.endfn _._19TrackCarCameraMover + +# .text:0x5020 | size: 0x36C +.fn Update__19TrackCarCameraMoverf, global +/* 00005020 00011DB0 94 21 FF 30 */ stwu r1, -0xd0(r1) +/* 00005024 00011DB4 7C 08 02 A6 */ mflr r0 +/* 00005028 00011DB8 F3 A1 00 B8 */ psq_st f29, 0xb8(r1), 0, qr0 +/* 0000502C 00011DBC F3 C1 00 C0 */ psq_st f30, 0xc0(r1), 0, qr0 +/* 00005030 00011DC0 F3 E1 00 C8 */ psq_st f31, 0xc8(r1), 0, qr0 +/* 00005034 00011DC4 BF 21 00 9C */ stmw r25, 0x9c(r1) +/* 00005038 00011DC8 90 01 00 D4 */ stw r0, 0xd4(r1) +/* 0000503C 00011DCC 7C 7F 1B 78 */ mr r31, r3 +/* 00005040 00011DD0 FF A0 08 90 */ fmr f29, f1 +.L_00005044: +/* 00005044 00011DD4 3C 60 00 00 */ lis r3, TheGameFlowManager@ha +/* 00005048 00011DD8 38 63 00 00 */ addi r3, r3, TheGameFlowManager@l +/* 0000504C 00011DDC 48 00 00 01 */ bl IsPaused__15GameFlowManager +.L_00005050: +/* 00005050 00011DE0 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00005054 00011DE4 40 82 53 6C */ bne .L_0000A3C0 +/* 00005058 00011DE8 3D 20 00 00 */ lis r9, .rodata+0x654@ha +/* 0000505C 00011DEC 3D 60 00 00 */ lis r11, .rodata+0x658@ha +/* 00005060 00011DF0 C0 29 06 54 */ lfs f1, .rodata+0x654@l(r9) +/* 00005064 00011DF4 39 41 00 08 */ addi r10, r1, 0x8 +/* 00005068 00011DF8 C1 2B 06 58 */ lfs f9, .rodata+0x658@l(r11) +/* 0000506C 00011DFC 3D 00 00 00 */ lis r8, .rodata+0x65C@ha +/* 00005070 00011E00 D0 21 00 08 */ stfs f1, 0x8(r1) +/* 00005074 00011E04 3D 60 00 00 */ lis r11, .rodata+0x660@ha +/* 00005078 00011E08 D0 21 00 0C */ stfs f1, 0xc(r1) +/* 0000507C 00011E0C 7D 59 53 78 */ mr r25, r10 +/* 00005080 00011E10 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 00005084 00011E14 D1 2A 00 08 */ stfs f9, 0x8(r10) +/* 00005088 00011E18 D1 29 00 CC */ stfs f9, 0xcc(r9) +/* 0000508C 00011E1C 81 3F 00 A0 */ lwz r9, 0xa0(r31) +/* 00005090 00011E20 C1 9F 00 80 */ lfs f12, 0x80(r31) +/* 00005094 00011E24 C1 A9 00 18 */ lfs f13, 0x18(r9) +/* 00005098 00011E28 C0 1F 00 84 */ lfs f0, 0x84(r31) +/* 0000509C 00011E2C C1 7F 00 88 */ lfs f11, 0x88(r31) +/* 000050A0 00011E30 ED 8C 68 28 */ fsubs f12, f12, f13 +/* 000050A4 00011E34 D1 81 00 18 */ stfs f12, 0x18(r1) +/* 000050A8 00011E38 C1 48 06 5C */ lfs f10, .rodata+0x65C@l(r8) +/* 000050AC 00011E3C C1 A9 00 1C */ lfs f13, 0x1c(r9) +/* 000050B0 00011E40 C1 0B 06 60 */ lfs f8, .rodata+0x660@l(r11) +/* 000050B4 00011E44 EC 00 68 28 */ fsubs f0, f0, f13 +/* 000050B8 00011E48 D0 01 00 1C */ stfs f0, 0x1c(r1) +/* 000050BC 00011E4C EC 00 00 32 */ fmuls f0, f0, f0 +/* 000050C0 00011E50 C1 A9 00 20 */ lfs f13, 0x20(r9) +/* 000050C4 00011E54 ED 8C 03 3A */ fmadds f12, f12, f12, f0 +/* 000050C8 00011E58 ED 6B 68 28 */ fsubs f11, f11, f13 +/* 000050CC 00011E5C ED 8B 62 FA */ fmadds f12, f11, f11, f12 +/* 000050D0 00011E60 D1 61 00 20 */ stfs f11, 0x20(r1) +/* 000050D4 00011E64 FC 0C 50 00 */ fcmpu cr0, f12, f10 +/* 000050D8 00011E68 4C 62 03 82 */ cror un, eq, lt +/* 000050DC 00011E6C 41 83 51 0C */ bso .L_0000A1E8 +/* 000050E0 00011E70 FF E0 60 34 */ frsqrte f31, f12 +/* 000050E4 00011E74 EC 1F 07 F2 */ fmuls f0, f31, f31 +/* 000050E8 00011E78 ED BF 02 32 */ fmuls f13, f31, f8 +/* 000050EC 00011E7C EC 0C 48 3C */ fnmsubs f0, f12, f0, f9 +/* 000050F0 00011E80 EF E0 FB 7A */ fmadds f31, f0, f13, f31 +/* 000050F4 00011E84 EC 1F 07 F2 */ fmuls f0, f31, f31 +/* 000050F8 00011E88 ED BF 02 32 */ fmuls f13, f31, f8 +/* 000050FC 00011E8C EC 0C 48 3C */ fnmsubs f0, f12, f0, f9 +/* 00005100 00011E90 EF E0 FB 7A */ fmadds f31, f0, f13, f31 +/* 00005104 00011E94 EF FF 03 32 */ fmuls f31, f31, f12 +/* 00005108 00011E98 48 00 51 10 */ b .L_0000A218 +/* 0000510C 00011E9C FF E0 08 90 */ fmr f31, f1 +/* 00005110 00011EA0 3D 20 00 00 */ lis r9, .rodata+0x654@ha +/* 00005114 00011EA4 3F 60 00 00 */ lis r27, _6Camera.StopUpdating@ha +/* 00005118 00011EA8 C0 09 06 54 */ lfs f0, .rodata+0x654@l(r9) +/* 0000511C 00011EAC FC 1F 00 00 */ fcmpu cr0, f31, f0 +/* 00005120 00011EB0 4C 62 03 82 */ cror un, eq, lt +/* 00005124 00011EB4 41 83 51 84 */ bso .L_0000A2A8 +/* 00005128 00011EB8 80 1F 00 D4 */ lwz r0, 0xd4(r31) +/* 0000512C 00011EBC 3D 20 00 00 */ lis r9, TrackCarIsoZoomDistance@ha +/* 00005130 00011EC0 39 29 00 00 */ addi r9, r9, TrackCarIsoZoomDistance@l +/* 00005134 00011EC4 FC 20 F8 90 */ fmr f1, f31 +/* 00005138 00011EC8 54 00 10 3A */ slwi r0, r0, 2 +/* 0000513C 00011ECC 7C 49 04 2E */ lfsx f2, r9, r0 +/* 00005140 00011ED0 48 00 00 01 */ bl bATan__Fff +/* 00005144 00011ED4 54 63 04 7E */ clrlwi r3, r3, 17 +/* 00005148 00011ED8 54 60 08 3C */ slwi r0, r3, 1 +/* 0000514C 00011EDC 2C 00 03 20 */ cmpwi r0, 0x320 +/* 00005150 00011EE0 40 80 51 58 */ bge .L_0000A2A8 +/* 00005154 00011EE4 38 00 03 20 */ li r0, 0x320 +/* 00005158 00011EE8 7C 0B 03 78 */ mr r11, r0 +/* 0000515C 00011EEC 28 0B 33 2C */ cmplwi r11, 0x332c +/* 00005160 00011EF0 40 81 51 68 */ ble .L_0000A2C8 +/* 00005164 00011EF4 39 60 33 2C */ li r11, 0x332c +/* 00005168 00011EF8 80 1B 00 00 */ lwz r0, _6Camera.StopUpdating@l(r27) +/* 0000516C 00011EFC 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00005170 00011F00 40 82 51 84 */ bne .L_0000A2F4 +/* 00005174 00011F04 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00005178 00011F08 41 82 51 84 */ beq .L_0000A2FC +/* 0000517C 00011F0C 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 00005180 00011F10 B1 69 00 C4 */ sth r11, 0xc4(r9) +/* 00005184 00011F14 80 9F 00 A0 */ lwz r4, 0xa0(r31) +/* 00005188 00011F18 3D 20 00 00 */ lis r9, .rodata+0x658@ha +/* 0000518C 00011F1C C3 C9 06 58 */ lfs f30, .rodata+0x658@l(r9) +/* 00005190 00011F20 3B 9F 00 90 */ addi r28, r31, 0x90 +/* 00005194 00011F24 C1 A4 00 18 */ lfs f13, 0x18(r4) +.L_00005198: +/* 00005198 00011F28 C1 84 00 1C */ lfs f12, 0x1c(r4) +/* 0000519C 00011F2C FD 60 F0 90 */ fmr f11, f30 +/* 000051A0 00011F30 C0 04 00 20 */ lfs f0, 0x20(r4) +/* 000051A4 00011F34 FC 1F F0 00 */ fcmpu cr0, f31, f30 +/* 000051A8 00011F38 D1 BF 00 90 */ stfs f13, 0x90(r31) +/* 000051AC 00011F3C D1 9F 00 94 */ stfs f12, 0x94(r31) +/* 000051B0 00011F40 D0 1F 00 98 */ stfs f0, 0x98(r31) +/* 000051B4 00011F44 4C 62 03 82 */ cror un, eq, lt +/* 000051B8 00011F48 41 83 51 C0 */ bso .L_0000A378 +/* 000051BC 00011F4C ED 7E F8 24 */ fdivs f11, f30, f31 +/* 000051C0 00011F50 80 1F 00 D4 */ lwz r0, 0xd4(r31) +.L_000051C4: +/* 000051C4 00011F54 3D 60 00 00 */ lis r11, TrackCarLookOffsetX@ha +/* 000051C8 00011F58 C1 A1 00 18 */ lfs f13, 0x18(r1) +/* 000051CC 00011F5C 3D 40 00 00 */ lis r10, TrackCarLookOffsetY@ha +.L_000051D0: +/* 000051D0 00011F60 C1 81 00 1C */ lfs f12, 0x1c(r1) +/* 000051D4 00011F64 3D 20 00 00 */ lis r9, TrackCarLookOffsetZ@ha +/* 000051D8 00011F68 C0 01 00 20 */ lfs f0, 0x20(r1) +/* 000051DC 00011F6C 54 00 10 3A */ slwi r0, r0, 2 +/* 000051E0 00011F70 C1 21 00 78 */ lfs f9, 0x78(r1) +/* 000051E4 00011F74 39 29 00 00 */ addi r9, r9, TrackCarLookOffsetZ@l +/* 000051E8 00011F78 C1 41 00 7C */ lfs f10, 0x7c(r1) +/* 000051EC 00011F7C 39 6B 00 00 */ addi r11, r11, TrackCarLookOffsetX@l +/* 000051F0 00011F80 39 4A 00 00 */ addi r10, r10, TrackCarLookOffsetY@l +/* 000051F4 00011F84 ED AD 02 F2 */ fmuls f13, f13, f11 +/* 000051F8 00011F88 ED 8C 02 F2 */ fmuls f12, f12, f11 +/* 000051FC 00011F8C 7C C9 04 2E */ lfsx f6, r9, r0 +/* 00005200 00011F90 EC 00 02 F2 */ fmuls f0, f0, f11 +/* 00005204 00011F94 7C EB 04 2E */ lfsx f7, r11, r0 +/* 00005208 00011F98 7D 0A 04 2E */ lfsx f8, r10, r0 +/* 0000520C 00011F9C 38 61 00 28 */ addi r3, r1, 0x28 +.L_00005210: +/* 00005210 00011FA0 C1 61 00 80 */ lfs f11, 0x80(r1) +/* 00005214 00011FA4 3B C1 00 38 */ addi r30, r1, 0x38 +/* 00005218 00011FA8 D1 A1 00 18 */ stfs f13, 0x18(r1) +.L_0000521C: +/* 0000521C 00011FAC 7C 65 1B 78 */ mr r5, r3 +/* 00005220 00011FB0 D1 81 00 1C */ stfs f12, 0x1c(r1) +/* 00005224 00011FB4 38 84 00 48 */ addi r4, r4, 0x48 +/* 00005228 00011FB8 D0 01 00 20 */ stfs f0, 0x20(r1) +/* 0000522C 00011FBC 3B BF 00 80 */ addi r29, r31, 0x80 +/* 00005230 00011FC0 D1 21 00 08 */ stfs f9, 0x8(r1) +/* 00005234 00011FC4 7F DA F3 78 */ mr r26, r30 +.L_00005238: +/* 00005238 00011FC8 D1 41 00 0C */ stfs f10, 0xc(r1) +/* 0000523C 00011FCC D1 79 00 08 */ stfs f11, 0x8(r25) +/* 00005240 00011FD0 D0 E1 00 28 */ stfs f7, 0x28(r1) +/* 00005244 00011FD4 D1 01 00 2C */ stfs f8, 0x2c(r1) +/* 00005248 00011FD8 D0 C1 00 30 */ stfs f6, 0x30(r1) +.L_0000524C: +/* 0000524C 00011FDC 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 +/* 00005250 00011FE0 C1 41 00 28 */ lfs f10, 0x28(r1) +.L_00005254: +/* 00005254 00011FE4 7F C3 F3 78 */ mr r3, r30 +/* 00005258 00011FE8 C1 61 00 2C */ lfs f11, 0x2c(r1) +/* 0000525C 00011FEC 7F 26 CB 78 */ mr r6, r25 +/* 00005260 00011FF0 C1 21 00 30 */ lfs f9, 0x30(r1) +/* 00005264 00011FF4 7F 85 E3 78 */ mr r5, r28 +/* 00005268 00011FF8 C0 1F 00 90 */ lfs f0, 0x90(r31) +/* 0000526C 00011FFC 7F A4 EB 78 */ mr r4, r29 +/* 00005270 00012000 C1 9F 00 94 */ lfs f12, 0x94(r31) +/* 00005274 00012004 C1 BF 00 98 */ lfs f13, 0x98(r31) +/* 00005278 00012008 EC 00 50 2A */ fadds f0, f0, f10 +/* 0000527C 0001200C ED 8C 58 2A */ fadds f12, f12, f11 +/* 00005280 00012010 D0 1F 00 90 */ stfs f0, 0x90(r31) +/* 00005284 00012014 ED AD 48 2A */ fadds f13, f13, f9 +/* 00005288 00012018 D1 9F 00 94 */ stfs f12, 0x94(r31) +/* 0000528C 0001201C D1 BF 00 98 */ stfs f13, 0x98(r31) +/* 00005290 00012020 48 00 00 01 */ bl eCreateLookAtMatrix__FP8bMatrix4R8bVector3N21 +/* 00005294 00012024 80 7F 00 A0 */ lwz r3, 0xa0(r31) +.L_00005298: +/* 00005298 00012028 7F A4 EB 78 */ mr r4, r29 +/* 0000529C 0001202C 38 63 00 18 */ addi r3, r3, 0x18 +/* 000052A0 00012030 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 +/* 000052A4 00012034 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha +/* 000052A8 00012038 FF E0 08 90 */ fmr f31, f1 +.L_000052AC: +/* 000052AC 0001203C 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) +/* 000052B0 00012040 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000052B4 00012044 40 82 52 C0 */ bne .L_0000A574 +/* 000052B8 00012048 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 000052BC 0001204C D3 E9 00 B0 */ stfs f31, 0xb0(r9) +/* 000052C0 00012050 3D 60 00 00 */ lis r11, .rodata+0x664@ha +/* 000052C4 00012054 C0 1F 00 A4 */ lfs f0, 0xa4(r31) +/* 000052C8 00012058 C1 AB 06 64 */ lfs f13, .rodata+0x664@l(r11) +/* 000052CC 0001205C 3D 20 00 00 */ lis r9, .rodata+0x654@ha +/* 000052D0 00012060 C0 49 06 54 */ lfs f2, .rodata+0x654@l(r9) +/* 000052D4 00012064 FC 20 E8 90 */ fmr f1, f29 +/* 000052D8 00012068 EC 00 03 72 */ fmuls f0, f0, f13 +/* 000052DC 0001206C 38 7F 00 A4 */ addi r3, r31, 0xa4 +/* 000052E0 00012070 D0 1F 00 A8 */ stfs f0, 0xa8(r31) +/* 000052E4 00012074 FC 60 10 90 */ fmr f3, f2 +/* 000052E8 00012078 48 00 00 01 */ bl SplineSeek__6cPointP8tCubic1Dfff +/* 000052EC 0001207C C0 3F 00 A4 */ lfs f1, 0xa4(r31) +/* 000052F0 00012080 80 1F 00 D0 */ lwz r0, 0xd0(r31) +/* 000052F4 00012084 EC 1F 08 2A */ fadds f0, f31, f1 +/* 000052F8 00012088 ED BE 00 28 */ fsubs f13, f30, f0 +/* 000052FC 0001208C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00005300 00012090 FF ED 07 AE */ fsel f31, f13, f30, f0 +/* 00005304 00012094 41 82 53 30 */ beq .L_0000A634 +/* 00005308 00012098 80 1B 00 00 */ lwz r0, _6Camera.StopUpdating@l(r27) +/* 0000530C 0001209C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00005310 000120A0 40 82 53 30 */ bne Attach__16CDActionTrackCarPQ33UTL3COM8IUnknown +/* 00005314 000120A4 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 00005318 000120A8 EC 1F 08 2A */ fadds f0, f31, f1 +/* 0000531C 000120AC 3D 60 00 00 */ lis r11, .rodata+0x668@ha +/* 00005320 000120B0 D0 09 00 B4 */ stfs f0, 0xb4(r9) +/* 00005324 000120B4 C1 AB 06 68 */ lfs f13, .rodata+0x668@l(r11) +/* 00005328 000120B8 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 0000532C 000120BC D1 A9 00 B8 */ stfs f13, 0xb8(r9) +/* 00005330 000120C0 80 7F 00 1C */ lwz r3, 0x1c(r31) +/* 00005334 000120C4 7F 44 D3 78 */ mr r4, r26 +/* 00005338 000120C8 FC 20 E8 90 */ fmr f1, f29 +/* 0000533C 000120CC 48 00 04 ED */ bl .L_00005828 +/* 00005340 000120D0 80 9F 00 1C */ lwz r4, 0x1c(r31) +/* 00005344 000120D4 7F E3 FB 78 */ mr r3, r31 +.L_00005348: +/* 00005348 000120D8 80 BF 00 A0 */ lwz r5, 0xa0(r31) +/* 0000534C 000120DC 38 84 00 40 */ addi r4, r4, 0x40 +/* 00005350 000120E0 38 A5 00 18 */ addi r5, r5, 0x18 +/* 00005354 000120E4 48 00 23 01 */ bl .L_00007654 +/* 00005358 000120E8 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000535C 000120EC 41 82 53 6C */ beq .L_0000A6C8 +/* 00005360 000120F0 81 3F 00 A0 */ lwz r9, 0xa0(r31) +/* 00005364 000120F4 80 69 00 8C */ lwz r3, 0x8c(r9) +/* 00005368 000120F8 48 00 79 71 */ bl .L_0000CCD8 +/* 0000536C 000120FC 80 01 00 D4 */ lwz r0, 0xd4(r1) +/* 00005370 00012100 7C 08 03 A6 */ mtlr r0 +/* 00005374 00012104 BB 21 00 9C */ lmw r25, 0x9c(r1) +/* 00005378 00012108 E3 A1 00 B8 */ psq_l f29, 0xb8(r1), 0, qr0 +/* 0000537C 0001210C E3 C1 00 C0 */ psq_l f30, 0xc0(r1), 0, qr0 +/* 00005380 00012110 E3 E1 00 C8 */ psq_l f31, 0xc8(r1), 0, qr0 +/* 00005384 00012114 38 21 00 D0 */ addi r1, r1, 0xd0 +/* 00005388 00012118 4E 80 00 20 */ blr +.endfn Update__19TrackCarCameraMoverf + +# .text:0x538C | size: 0xC8 +.fn __19TrackCopCameraMoveriP12CameraAnchorb, global +/* 0000538C 0001211C 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 00005390 00012120 7C 08 02 A6 */ mflr r0 +/* 00005394 00012124 BF 81 00 08 */ stmw r28, 0x8(r1) +/* 00005398 00012128 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0000539C 0001212C 7C 7E 1B 78 */ mr r30, r3 +/* 000053A0 00012130 7C BD 2B 78 */ mr r29, r5 +/* 000053A4 00012134 7C DC 33 78 */ mr r28, r6 +/* 000053A8 00012138 38 A0 00 07 */ li r5, 0x7 +/* 000053AC 0001213C 48 00 1F 1D */ bl .L_000072C8 +/* 000053B0 00012140 3D 20 00 00 */ lis r9, _vt.19TrackCopCameraMover@ha +/* 000053B4 00012144 38 7E 00 80 */ addi r3, r30, 0x80 +/* 000053B8 00012148 39 29 00 00 */ addi r9, r9, _vt.19TrackCopCameraMover@l +/* 000053BC 0001214C 91 3E 00 08 */ stw r9, 0x8(r30) +/* 000053C0 00012150 48 00 4A B1 */ bl .L_00009E70 +/* 000053C4 00012154 38 7E 01 08 */ addi r3, r30, 0x108 +/* 000053C8 00012158 48 00 4A B1 */ bl .L_00009E78 +/* 000053CC 0001215C 38 7E 01 90 */ addi r3, r30, 0x190 +/* 000053D0 00012160 48 00 4A B1 */ bl .L_00009E80 +/* 000053D4 00012164 93 BE 02 18 */ stw r29, 0x218(r30) +/* 000053D8 00012168 3D 20 00 00 */ lis r9, .rodata+0x66C@ha +/* 000053DC 0001216C 3D 60 00 00 */ lis r11, .rodata+0x670@ha +/* 000053E0 00012170 C1 A9 06 6C */ lfs f13, .rodata+0x66C@l(r9) +/* 000053E4 00012174 C0 0B 06 70 */ lfs f0, .rodata+0x670@l(r11) +/* 000053E8 00012178 39 20 00 01 */ li r9, 0x1 +/* 000053EC 0001217C 38 00 00 00 */ li r0, 0x0 +/* 000053F0 00012180 93 9E 02 48 */ stw r28, 0x248(r30) +/* 000053F4 00012184 7F C3 F3 78 */ mr r3, r30 +/* 000053F8 00012188 D1 BE 02 40 */ stfs f13, 0x240(r30) +/* 000053FC 0001218C B0 1E 02 44 */ sth r0, 0x244(r30) +/* 00005400 00012190 91 3E 02 4C */ stw r9, 0x24c(r30) +/* 00005404 00012194 D0 1E 02 14 */ stfs f0, 0x214(r30) +/* 00005408 00012198 D0 1E 02 1C */ stfs f0, 0x21c(r30) +/* 0000540C 0001219C D0 1E 02 20 */ stfs f0, 0x220(r30) +/* 00005410 000121A0 D0 1E 02 24 */ stfs f0, 0x224(r30) +/* 00005414 000121A4 D0 1E 02 28 */ stfs f0, 0x228(r30) +.L_00005418: +/* 00005418 000121A8 D0 1E 02 3C */ stfs f0, 0x23c(r30) +/* 0000541C 000121AC B1 3E 02 46 */ sth r9, 0x246(r30) +/* 00005420 000121B0 D0 1E 02 2C */ stfs f0, 0x22c(r30) +/* 00005424 000121B4 D0 1E 02 30 */ stfs f0, 0x230(r30) +/* 00005428 000121B8 D0 1E 02 34 */ stfs f0, 0x234(r30) +/* 0000542C 000121BC D0 1E 02 38 */ stfs f0, 0x238(r30) +/* 00005430 000121C0 D0 1E 01 04 */ stfs f0, 0x104(r30) +/* 00005434 000121C4 D0 1E 01 8C */ stfs f0, 0x18c(r30) +/* 00005438 000121C8 48 00 56 19 */ bl .L_0000AA50 +/* 0000543C 000121CC 7F C3 F3 78 */ mr r3, r30 +/* 00005440 000121D0 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 00005444 000121D4 7C 08 03 A6 */ mtlr r0 +/* 00005448 000121D8 BB 81 00 08 */ lmw r28, 0x8(r1) +/* 0000544C 000121DC 38 21 00 18 */ addi r1, r1, 0x18 +/* 00005450 000121E0 4E 80 00 20 */ blr +.endfn __19TrackCopCameraMoveriP12CameraAnchorb + +# .text:0x5454 | size: 0x88 +.fn _._19TrackCopCameraMover, global +/* 00005454 000121E4 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 00005458 000121E8 7C 08 02 A6 */ mflr r0 +/* 0000545C 000121EC 90 01 00 0C */ stw r0, 0xc(r1) +/* 00005460 000121F0 3D 20 00 00 */ lis r9, _vt.19TrackCopCameraMover@ha +/* 00005464 000121F4 3D 60 00 00 */ lis r11, .rodata+0x674@ha +/* 00005468 000121F8 39 29 00 00 */ addi r9, r9, _vt.19TrackCopCameraMover@l +/* 0000546C 000121FC C0 0B 06 74 */ lfs f0, .rodata+0x674@l(r11) +/* 00005470 00012200 91 23 00 08 */ stw r9, 0x8(r3) +/* 00005474 00012204 3D 40 00 00 */ lis r10, _6Camera.StopUpdating@ha +/* 00005478 00012208 81 6A 00 00 */ lwz r11, _6Camera.StopUpdating@l(r10) +/* 0000547C 0001220C 3D 00 00 00 */ lis r8, TrackCopCameraMover_IdleSim@ha +/* 00005480 00012210 81 23 00 1C */ lwz r9, 0x1c(r3) +/* 00005484 00012214 38 00 00 00 */ li r0, 0x0 +/* 00005488 00012218 90 08 00 00 */ stw r0, TrackCopCameraMover_IdleSim@l(r8) +/* 0000548C 0001221C 2C 0B 00 00 */ cmpwi r11, 0x0 +.L_00005490: +/* 00005490 00012220 D0 09 00 CC */ stfs f0, 0xcc(r9) +/* 00005494 00012224 40 82 54 B0 */ bne .L_0000A944 +/* 00005498 00012228 3D 20 00 00 */ lis r9, .rodata+0x678@ha +/* 0000549C 0001222C 81 63 00 1C */ lwz r11, 0x1c(r3) +/* 000054A0 00012230 C0 09 06 78 */ lfs f0, .rodata+0x678@l(r9) +/* 000054A4 00012234 D0 0B 00 B4 */ stfs f0, 0xb4(r11) +/* 000054A8 00012238 81 23 00 1C */ lwz r9, 0x1c(r3) +/* 000054AC 0001223C D0 09 00 B8 */ stfs f0, 0xb8(r9) +/* 000054B0 00012240 3D 20 00 00 */ lis r9, RealTimeFrames@ha +/* 000054B4 00012244 81 63 00 1C */ lwz r11, 0x1c(r3) +/* 000054B8 00012248 81 49 00 00 */ lwz r10, RealTimeFrames@l(r9) +/* 000054BC 0001224C 38 00 00 01 */ li r0, 0x1 +/* 000054C0 00012250 90 0B 02 7C */ stw r0, 0x27c(r11) +/* 000054C4 00012254 91 4B 02 88 */ stw r10, 0x288(r11) +/* 000054C8 00012258 48 00 20 35 */ bl .L_000074FC +/* 000054CC 0001225C 80 01 00 0C */ lwz r0, 0xc(r1) +/* 000054D0 00012260 7C 08 03 A6 */ mtlr r0 +/* 000054D4 00012264 38 21 00 08 */ addi r1, r1, 0x8 +/* 000054D8 00012268 4E 80 00 20 */ blr +.endfn _._19TrackCopCameraMover + +# .text:0x54DC | size: 0x13C +.fn FindPursuitVehiclePosition__19TrackCopCameraMoverP8bVector3, global +/* 000054DC 0001226C 94 21 FF C0 */ stwu r1, -0x40(r1) +/* 000054E0 00012270 7C 08 02 A6 */ mflr r0 +/* 000054E4 00012274 F3 E1 00 38 */ psq_st f31, 0x38(r1), 0, qr0 +.L_000054E8: +/* 000054E8 00012278 BF 01 00 18 */ stmw r24, 0x18(r1) +/* 000054EC 0001227C 90 01 00 44 */ stw r0, 0x44(r1) +/* 000054F0 00012280 3D 60 00 00 */ lis r11, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@ha +/* 000054F4 00012284 3D 20 00 00 */ lis r9, .rodata+0x67C@ha +/* 000054F8 00012288 C3 E9 06 7C */ lfs f31, .rodata+0x67C@l(r9) +/* 000054FC 0001228C 3B 4B 00 00 */ addi r26, r11, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@l +/* 00005500 00012290 83 AB 00 00 */ lwz r29, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@l(r11) +/* 00005504 00012294 7C 7B 1B 78 */ mr r27, r3 +.L_00005508: +/* 00005508 00012298 7C 9C 23 78 */ mr r28, r4 +/* 0000550C 0001229C 3B 20 00 00 */ li r25, 0x0 +/* 00005510 000122A0 3F 00 00 00 */ lis r24, _12VehicleClass.CAR@ha +/* 00005514 000122A4 80 1A 00 08 */ lwz r0, 0x8(r26) +/* 00005518 000122A8 81 3A 00 00 */ lwz r9, 0x0(r26) +/* 0000551C 000122AC 54 00 10 3A */ slwi r0, r0, 2 +/* 00005520 000122B0 7D 29 02 14 */ add r9, r9, r0 +/* 00005524 000122B4 7C 1D 48 00 */ cmpw r29, r9 +/* 00005528 000122B8 41 82 55 FC */ beq .L_0000AB24 +/* 0000552C 000122BC 83 FD 00 00 */ lwz r31, 0x0(r29) +/* 00005530 000122C0 2C 1F 00 00 */ cmpwi r31, 0x0 +/* 00005534 000122C4 41 82 55 F4 */ beq .L_0000AB28 +/* 00005538 000122C8 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 0000553C 000122CC 80 09 00 94 */ lwz r0, 0x94(r9) +/* 00005540 000122D0 A8 69 00 90 */ lha r3, 0x90(r9) +/* 00005544 000122D4 7C 08 03 A6 */ mtlr r0 +/* 00005548 000122D8 7C 7F 1A 14 */ add r3, r31, r3 +/* 0000554C 000122DC 4E 80 00 21 */ blrl +/* 00005550 000122E0 81 23 00 00 */ lwz r9, 0x0(r3) +/* 00005554 000122E4 80 18 00 00 */ lwz r0, _12VehicleClass.CAR@l(r24) +/* 00005558 000122E8 7C 09 00 00 */ cmpw r9, r0 +/* 0000555C 000122EC 40 82 55 F4 */ bne .L_0000AB50 +/* 00005560 000122F0 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 00005564 000122F4 3B C1 00 08 */ addi r30, r1, 0x8 +/* 00005568 000122F8 80 09 00 24 */ lwz r0, 0x24(r9) +/* 0000556C 000122FC A8 69 00 20 */ lha r3, 0x20(r9) +/* 00005570 00012300 7C 08 03 A6 */ mtlr r0 +/* 00005574 00012304 7C 7F 1A 14 */ add r3, r31, r3 +/* 00005578 00012308 4E 80 00 21 */ blrl +/* 0000557C 0001230C 7C 69 1B 78 */ mr r9, r3 +/* 00005580 00012310 80 9B 00 1C */ lwz r4, 0x1c(r27) +/* 00005584 00012314 C0 09 00 00 */ lfs f0, 0x0(r9) +/* 00005588 00012318 7F 63 DB 78 */ mr r3, r27 +/* 0000558C 0001231C C1 A9 00 08 */ lfs f13, 0x8(r9) +/* 00005590 00012320 38 84 00 40 */ addi r4, r4, 0x40 +/* 00005594 00012324 C1 89 00 04 */ lfs f12, 0x4(r9) +/* 00005598 00012328 FC 00 00 50 */ fneg f0, f0 +/* 0000559C 0001232C D1 A1 00 08 */ stfs f13, 0x8(r1) +/* 000055A0 00012330 7F C5 F3 78 */ mr r5, r30 +/* 000055A4 00012334 D0 01 00 0C */ stfs f0, 0xc(r1) +/* 000055A8 00012338 D1 9E 00 08 */ stfs f12, 0x8(r30) +/* 000055AC 0001233C 48 00 23 01 */ bl .L_000078AC +/* 000055B0 00012340 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000055B4 00012344 40 82 55 F4 */ bne .L_0000ABA8 +/* 000055B8 00012348 80 7B 02 18 */ lwz r3, 0x218(r27) +/* 000055BC 0001234C 7F C4 F3 78 */ mr r4, r30 +.L_000055C0: +/* 000055C0 00012350 38 63 00 18 */ addi r3, r3, 0x18 +/* 000055C4 00012354 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 +.L_000055C8: +/* 000055C8 00012358 FC 01 F8 00 */ fcmpu cr0, f1, f31 +/* 000055CC 0001235C 4C 62 0B 82 */ cror un, eq, gt +/* 000055D0 00012360 41 83 55 F4 */ bso .L_0000ABC4 +/* 000055D4 00012364 C1 9E 00 08 */ lfs f12, 0x8(r30) +/* 000055D8 00012368 FF E0 08 90 */ fmr f31, f1 +/* 000055DC 0001236C C1 A1 00 08 */ lfs f13, 0x8(r1) +/* 000055E0 00012370 3B 20 00 01 */ li r25, 0x1 +/* 000055E4 00012374 C0 01 00 0C */ lfs f0, 0xc(r1) +.L_000055E8: +/* 000055E8 00012378 D1 BC 00 00 */ stfs f13, 0x0(r28) +/* 000055EC 0001237C D0 1C 00 04 */ stfs f0, 0x4(r28) +/* 000055F0 00012380 D1 9C 00 08 */ stfs f12, 0x8(r28) +/* 000055F4 00012384 3B BD 00 04 */ addi r29, r29, 0x4 +/* 000055F8 00012388 48 00 55 14 */ b .L_0000AB0C +.L_000055FC: +/* 000055FC 0001238C 7F 23 CB 78 */ mr r3, r25 +/* 00005600 00012390 80 01 00 44 */ lwz r0, 0x44(r1) +/* 00005604 00012394 7C 08 03 A6 */ mtlr r0 +/* 00005608 00012398 BB 01 00 18 */ lmw r24, 0x18(r1) +/* 0000560C 0001239C E3 E1 00 38 */ psq_l f31, 0x38(r1), 0, qr0 +/* 00005610 000123A0 38 21 00 40 */ addi r1, r1, 0x40 +/* 00005614 000123A4 4E 80 00 20 */ blr +.endfn FindPursuitVehiclePosition__19TrackCopCameraMoverP8bVector3 + +# .text:0x5618 | size: 0x2C8 +# TrackCopCameraMover::Init +.fn Init__19TrackCopCameraMover, global +/* 00005618 000123A8 94 21 FF 90 */ stwu r1, -0x70(r1) +/* 0000561C 000123AC 7C 08 02 A6 */ mflr r0 +/* 00005620 000123B0 F3 E1 00 68 */ psq_st f31, 0x68(r1), 0, qr0 +/* 00005624 000123B4 BF C1 00 60 */ stmw r30, 0x60(r1) +/* 00005628 000123B8 90 01 00 74 */ stw r0, 0x74(r1) +/* 0000562C 000123BC 7C 7F 1B 78 */ mr r31, r3 +/* 00005630 000123C0 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 00005634 000123C4 3C E0 43 30 */ lis r7, 0x4330 +.L_00005638: +/* 00005638 000123C8 3D 40 00 00 */ lis r10, .rodata+0x680@ha +/* 0000563C 000123CC 3D 00 00 00 */ lis r8, TrackCopCameraMover_IdleSim@ha +/* 00005640 000123D0 C1 89 00 40 */ lfs f12, 0x40(r9) +/* 00005644 000123D4 3B C0 00 01 */ li r30, 0x1 +/* 00005648 000123D8 C0 09 00 44 */ lfs f0, 0x44(r9) +/* 0000564C 000123DC C1 A9 00 48 */ lfs f13, 0x48(r9) +/* 00005650 000123E0 D1 81 00 18 */ stfs f12, 0x18(r1) +/* 00005654 000123E4 D0 01 00 1C */ stfs f0, 0x1c(r1) +/* 00005658 000123E8 D1 A1 00 20 */ stfs f13, 0x20(r1) +/* 0000565C 000123EC C9 6A 06 80 */ lfd f11, .rodata+0x680@l(r10) +/* 00005660 000123F0 C0 09 00 60 */ lfs f0, 0x60(r9) +.L_00005664: +/* 00005664 000123F4 C1 A9 00 64 */ lfs f13, 0x64(r9) +.L_00005668: +/* 00005668 000123F8 C1 89 00 68 */ lfs f12, 0x68(r9) +/* 0000566C 000123FC D0 01 00 28 */ stfs f0, 0x28(r1) +/* 00005670 00012400 D1 A1 00 2C */ stfs f13, 0x2c(r1) +.L_00005674: +/* 00005674 00012404 D1 81 00 30 */ stfs f12, 0x30(r1) +/* 00005678 00012408 A0 09 00 C4 */ lhz r0, 0xc4(r9) +.L_0000567C: +/* 0000567C 0001240C 93 C8 00 00 */ stw r30, TrackCopCameraMover_IdleSim@l(r8) +.L_00005680: +/* 00005680 00012410 90 01 00 5C */ stw r0, 0x5c(r1) +/* 00005684 00012414 90 E1 00 58 */ stw r7, 0x58(r1) +/* 00005688 00012418 C8 01 00 58 */ lfd f0, 0x58(r1) +/* 0000568C 0001241C FC 00 58 28 */ fsub f0, f0, f11 +/* 00005690 00012420 FF E0 00 18 */ frsp f31, f0 +/* 00005694 00012424 48 00 00 01 */ bl HideEverySingleHud__Fv +/* 00005698 00012428 3D 60 00 00 */ lis r11, .rodata+0x688@ha +/* 0000569C 0001242C 3D 20 00 00 */ lis r9, .rodata+0x68C@ha +/* 000056A0 00012430 C1 41 00 18 */ lfs f10, 0x18(r1) +/* 000056A4 00012434 7F E3 FB 78 */ mr r3, r31 +.L_000056A8: +/* 000056A8 00012438 C1 21 00 1C */ lfs f9, 0x1c(r1) +/* 000056AC 0001243C 38 81 00 08 */ addi r4, r1, 0x8 +/* 000056B0 00012440 C1 01 00 20 */ lfs f8, 0x20(r1) +/* 000056B4 00012444 C1 A9 06 8C */ lfs f13, .rodata+0x68C@l(r9) +/* 000056B8 00012448 C0 0B 06 88 */ lfs f0, .rodata+0x688@l(r11) +/* 000056BC 0001244C D1 BF 00 D0 */ stfs f13, 0xd0(r31) +/* 000056C0 00012450 D0 1F 00 FC */ stfs f0, 0xfc(r31) +/* 000056C4 00012454 D0 1F 00 C8 */ stfs f0, 0xc8(r31) +/* 000056C8 00012458 D0 1F 00 CC */ stfs f0, 0xcc(r31) +/* 000056CC 0001245C D0 1F 00 D8 */ stfs f0, 0xd8(r31) +/* 000056D0 00012460 D0 1F 00 DC */ stfs f0, 0xdc(r31) +/* 000056D4 00012464 D0 1F 00 E8 */ stfs f0, 0xe8(r31) +/* 000056D8 00012468 D0 1F 00 EC */ stfs f0, 0xec(r31) +/* 000056DC 0001246C D0 1F 00 F8 */ stfs f0, 0xf8(r31) +/* 000056E0 00012470 D1 BF 00 E0 */ stfs f13, 0xe0(r31) +/* 000056E4 00012474 D1 BF 00 F0 */ stfs f13, 0xf0(r31) +/* 000056E8 00012478 D1 BF 01 00 */ stfs f13, 0x100(r31) +/* 000056EC 0001247C D1 5F 01 4C */ stfs f10, 0x14c(r31) +/* 000056F0 00012480 D1 3F 01 50 */ stfs f9, 0x150(r31) +/* 000056F4 00012484 D1 1F 01 54 */ stfs f8, 0x154(r31) +/* 000056F8 00012488 D1 BF 01 58 */ stfs f13, 0x158(r31) +/* 000056FC 0001248C D1 5F 01 5C */ stfs f10, 0x15c(r31) +/* 00005700 00012490 D1 3F 01 60 */ stfs f9, 0x160(r31) +/* 00005704 00012494 D1 1F 01 64 */ stfs f8, 0x164(r31) +/* 00005708 00012498 D1 BF 01 68 */ stfs f13, 0x168(r31) +/* 0000570C 0001249C D1 5F 01 6C */ stfs f10, 0x16c(r31) +/* 00005710 000124A0 D1 3F 01 70 */ stfs f9, 0x170(r31) +/* 00005714 000124A4 D1 1F 01 74 */ stfs f8, 0x174(r31) +/* 00005718 000124A8 93 DF 02 4C */ stw r30, 0x24c(r31) +/* 0000571C 000124AC D3 FF 00 C4 */ stfs f31, 0xc4(r31) +/* 00005720 000124B0 D3 FF 00 D4 */ stfs f31, 0xd4(r31) +/* 00005724 000124B4 D3 FF 00 E4 */ stfs f31, 0xe4(r31) +/* 00005728 000124B8 D3 FF 00 F4 */ stfs f31, 0xf4(r31) +/* 0000572C 000124BC D1 BF 01 78 */ stfs f13, 0x178(r31) +/* 00005730 000124C0 C0 01 00 28 */ lfs f0, 0x28(r1) +/* 00005734 000124C4 C1 81 00 2C */ lfs f12, 0x2c(r1) +/* 00005738 000124C8 C1 61 00 30 */ lfs f11, 0x30(r1) +/* 0000573C 000124CC D1 5F 01 7C */ stfs f10, 0x17c(r31) +/* 00005740 000124D0 D1 3F 01 80 */ stfs f9, 0x180(r31) +/* 00005744 000124D4 D1 1F 01 84 */ stfs f8, 0x184(r31) +/* 00005748 000124D8 D0 1F 02 04 */ stfs f0, 0x204(r31) +/* 0000574C 000124DC D1 9F 02 08 */ stfs f12, 0x208(r31) +/* 00005750 000124E0 D1 7F 02 0C */ stfs f11, 0x20c(r31) +/* 00005754 000124E4 D1 BF 02 10 */ stfs f13, 0x210(r31) +/* 00005758 000124E8 D1 BF 01 88 */ stfs f13, 0x188(r31) +/* 0000575C 000124EC D0 1F 01 D4 */ stfs f0, 0x1d4(r31) +/* 00005760 000124F0 D1 9F 01 D8 */ stfs f12, 0x1d8(r31) +.L_00005764: +/* 00005764 000124F4 D1 7F 01 DC */ stfs f11, 0x1dc(r31) +/* 00005768 000124F8 D1 BF 01 E0 */ stfs f13, 0x1e0(r31) +/* 0000576C 000124FC D0 1F 01 E4 */ stfs f0, 0x1e4(r31) +/* 00005770 00012500 D1 9F 01 E8 */ stfs f12, 0x1e8(r31) +/* 00005774 00012504 D1 7F 01 EC */ stfs f11, 0x1ec(r31) +/* 00005778 00012508 D1 BF 01 F0 */ stfs f13, 0x1f0(r31) +/* 0000577C 0001250C D0 1F 01 F4 */ stfs f0, 0x1f4(r31) +/* 00005780 00012510 D1 9F 01 F8 */ stfs f12, 0x1f8(r31) +/* 00005784 00012514 D1 7F 01 FC */ stfs f11, 0x1fc(r31) +/* 00005788 00012518 D1 BF 02 00 */ stfs f13, 0x200(r31) +/* 0000578C 0001251C 48 00 54 DD */ bl .L_0000AC68 +/* 00005790 00012520 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00005794 00012524 41 82 58 54 */ beq .L_0000AFE8 +/* 00005798 00012528 C0 01 00 10 */ lfs f0, 0x10(r1) +/* 0000579C 0001252C 3D 60 00 00 */ lis r11, .rodata+0x690@ha +/* 000057A0 00012530 C1 21 00 08 */ lfs f9, 0x8(r1) +/* 000057A4 00012534 38 00 00 00 */ li r0, 0x0 +/* 000057A8 00012538 C1 61 00 0C */ lfs f11, 0xc(r1) +/* 000057AC 0001253C D0 01 00 40 */ stfs f0, 0x40(r1) +/* 000057B0 00012540 D1 21 00 38 */ stfs f9, 0x38(r1) +/* 000057B4 00012544 D1 61 00 3C */ stfs f11, 0x3c(r1) +/* 000057B8 00012548 C1 AB 06 90 */ lfs f13, .rodata+0x690@l(r11) +/* 000057BC 0001254C 81 3F 02 18 */ lwz r9, 0x218(r31) +/* 000057C0 00012550 EC 00 68 2A */ fadds f0, f0, f13 +/* 000057C4 00012554 C0 FF 01 F0 */ lfs f7, 0x1f0(r31) +/* 000057C8 00012558 C1 BF 01 68 */ lfs f13, 0x168(r31) +/* 000057CC 0001255C C1 09 00 20 */ lfs f8, 0x20(r9) +/* 000057D0 00012560 C1 49 00 18 */ lfs f10, 0x18(r9) +/* 000057D4 00012564 C1 89 00 1C */ lfs f12, 0x1c(r9) +/* 000057D8 00012568 D1 3F 01 7C */ stfs f9, 0x17c(r31) +.L_000057DC: +/* 000057DC 0001256C D1 7F 01 80 */ stfs f11, 0x180(r31) +/* 000057E0 00012570 D0 1F 01 84 */ stfs f0, 0x184(r31) +/* 000057E4 00012574 D1 BF 01 88 */ stfs f13, 0x188(r31) +.L_000057E8: +/* 000057E8 00012578 D1 41 00 48 */ stfs f10, 0x48(r1) +/* 000057EC 0001257C D1 81 00 4C */ stfs f12, 0x4c(r1) +/* 000057F0 00012580 D1 01 00 50 */ stfs f8, 0x50(r1) +/* 000057F4 00012584 D0 01 00 40 */ stfs f0, 0x40(r1) +/* 000057F8 00012588 D1 3F 01 5C */ stfs f9, 0x15c(r31) +/* 000057FC 0001258C D1 7F 01 60 */ stfs f11, 0x160(r31) +/* 00005800 00012590 D0 1F 01 64 */ stfs f0, 0x164(r31) +/* 00005804 00012594 D1 3F 01 6C */ stfs f9, 0x16c(r31) +/* 00005808 00012598 D1 7F 01 70 */ stfs f11, 0x170(r31) +/* 0000580C 0001259C D0 1F 01 74 */ stfs f0, 0x174(r31) +/* 00005810 000125A0 D1 BF 01 78 */ stfs f13, 0x178(r31) +/* 00005814 000125A4 D1 5F 01 E4 */ stfs f10, 0x1e4(r31) +/* 00005818 000125A8 D1 9F 01 E8 */ stfs f12, 0x1e8(r31) +/* 0000581C 000125AC D1 1F 01 EC */ stfs f8, 0x1ec(r31) +/* 00005820 000125B0 D1 5F 01 F4 */ stfs f10, 0x1f4(r31) +/* 00005824 000125B4 D1 9F 01 F8 */ stfs f12, 0x1f8(r31) +.L_00005828: +/* 00005828 000125B8 D1 1F 01 FC */ stfs f8, 0x1fc(r31) +/* 0000582C 000125BC D1 5F 02 04 */ stfs f10, 0x204(r31) +/* 00005830 000125C0 D1 9F 02 08 */ stfs f12, 0x208(r31) +/* 00005834 000125C4 D1 1F 02 0C */ stfs f8, 0x20c(r31) +.L_00005838: +/* 00005838 000125C8 D0 FF 02 10 */ stfs f7, 0x210(r31) +/* 0000583C 000125CC D3 FF 00 F4 */ stfs f31, 0xf4(r31) +/* 00005840 000125D0 90 1F 02 4C */ stw r0, 0x24c(r31) +/* 00005844 000125D4 D0 FF 02 00 */ stfs f7, 0x200(r31) +/* 00005848 000125D8 D3 FF 00 D4 */ stfs f31, 0xd4(r31) +/* 0000584C 000125DC D3 FF 00 E4 */ stfs f31, 0xe4(r31) +/* 00005850 000125E0 48 00 58 60 */ b .L_0000B0B0 +/* 00005854 000125E4 81 3F 02 18 */ lwz r9, 0x218(r31) +/* 00005858 000125E8 80 69 00 8C */ lwz r3, 0x8c(r9) +/* 0000585C 000125EC 48 00 71 51 */ bl .L_0000C9AC +/* 00005860 000125F0 3D 20 00 00 */ lis r9, .rodata+0x688@ha +.L_00005864: +/* 00005864 000125F4 81 5F 02 48 */ lwz r10, 0x248(r31) +/* 00005868 000125F8 C0 09 06 88 */ lfs f0, .rodata+0x688@l(r9) +/* 0000586C 000125FC 38 1F 01 4C */ addi r0, r31, 0x14c +/* 00005870 00012600 39 3F 01 D4 */ addi r9, r31, 0x1d4 +/* 00005874 00012604 39 7F 00 C4 */ addi r11, r31, 0xc4 +/* 00005878 00012608 90 1F 01 08 */ stw r0, 0x108(r31) +/* 0000587C 0001260C 2C 0A 00 00 */ cmpwi r10, 0x0 +/* 00005880 00012610 91 3F 01 90 */ stw r9, 0x190(r31) +/* 00005884 00012614 91 7F 00 80 */ stw r11, 0x80(r31) +/* 00005888 00012618 D0 1F 01 8C */ stfs f0, 0x18c(r31) +/* 0000588C 0001261C D0 1F 02 14 */ stfs f0, 0x214(r31) +.L_00005890: +/* 00005890 00012620 D0 1F 01 04 */ stfs f0, 0x104(r31) +/* 00005894 00012624 D0 1F 02 1C */ stfs f0, 0x21c(r31) +/* 00005898 00012628 D0 1F 02 24 */ stfs f0, 0x224(r31) +.L_0000589C: +/* 0000589C 0001262C D0 1F 02 20 */ stfs f0, 0x220(r31) +.L_000058A0: +/* 000058A0 00012630 D0 1F 02 28 */ stfs f0, 0x228(r31) +/* 000058A4 00012634 40 82 58 C8 */ bne .L_0000B16C +/* 000058A8 00012638 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha +/* 000058AC 0001263C 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) +/* 000058B0 00012640 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000058B4 00012644 40 82 58 C8 */ bne .L_0000B17C +/* 000058B8 00012648 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 000058BC 0001264C D0 09 00 B4 */ stfs f0, 0xb4(r9) +/* 000058C0 00012650 81 7F 00 1C */ lwz r11, 0x1c(r31) +/* 000058C4 00012654 D0 0B 00 B8 */ stfs f0, 0xb8(r11) +/* 000058C8 00012658 80 01 00 74 */ lwz r0, 0x74(r1) +/* 000058CC 0001265C 7C 08 03 A6 */ mtlr r0 +/* 000058D0 00012660 BB C1 00 60 */ lmw r30, 0x60(r1) +/* 000058D4 00012664 E3 E1 00 68 */ psq_l f31, 0x68(r1), 0, qr0 +/* 000058D8 00012668 38 21 00 70 */ addi r1, r1, 0x70 +.L_000058DC: +/* 000058DC 0001266C 4E 80 00 20 */ blr +.endfn Init__19TrackCopCameraMover + +# .text:0x58E0 | size: 0x284 +.fn Update__19TrackCopCameraMoverf, global +/* 000058E0 00012670 94 21 FF 28 */ stwu r1, -0xd8(r1) +/* 000058E4 00012674 7C 08 02 A6 */ mflr r0 +/* 000058E8 00012678 F3 81 00 B8 */ psq_st f28, 0xb8(r1), 0, qr0 +/* 000058EC 0001267C F3 A1 00 C0 */ psq_st f29, 0xc0(r1), 0, qr0 +/* 000058F0 00012680 F3 C1 00 C8 */ psq_st f30, 0xc8(r1), 0, qr0 +/* 000058F4 00012684 F3 E1 00 D0 */ psq_st f31, 0xd0(r1), 0, qr0 +/* 000058F8 00012688 BF 21 00 9C */ stmw r25, 0x9c(r1) +/* 000058FC 0001268C 90 01 00 DC */ stw r0, 0xdc(r1) +/* 00005900 00012690 7C 7F 1B 78 */ mr r31, r3 +/* 00005904 00012694 FF 80 08 90 */ fmr f28, f1 +/* 00005908 00012698 48 00 00 01 */ bl Get__9FEManager +/* 0000590C 0001269C 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00005910 000126A0 41 82 59 24 */ beq .L_0000B234 +/* 00005914 000126A4 38 60 00 01 */ li r3, 0x1 +.L_00005918: +/* 00005918 000126A8 48 00 00 01 */ bl ShouldPauseSimulation__9FEManagerb +/* 0000591C 000126AC 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00005920 000126B0 40 82 5B 40 */ bne .L_0000B460 +/* 00005924 000126B4 3D 40 00 00 */ lis r10, .rodata+0x69C@ha +/* 00005928 000126B8 3D 20 00 00 */ lis r9, .rodata+0x694@ha +/* 0000592C 000126BC C3 A9 06 94 */ lfs f29, .rodata+0x694@l(r9) +/* 00005930 000126C0 3D 60 00 00 */ lis r11, .rodata+0x698@ha +/* 00005934 000126C4 C1 AA 06 9C */ lfs f13, .rodata+0x69C@l(r10) +/* 00005938 000126C8 3B 41 00 08 */ addi r26, r1, 0x8 +/* 0000593C 000126CC C0 1F 01 8C */ lfs f0, 0x18c(r31) +/* 00005940 000126D0 C3 CB 06 98 */ lfs f30, .rodata+0x698@l(r11) +/* 00005944 000126D4 EF FC 03 72 */ fmuls f31, f28, f13 +/* 00005948 000126D8 D3 A1 00 08 */ stfs f29, 0x8(r1) +/* 0000594C 000126DC EC 00 F8 2A */ fadds f0, f0, f31 +/* 00005950 000126E0 D3 A1 00 0C */ stfs f29, 0xc(r1) +/* 00005954 000126E4 FC 00 F0 00 */ fcmpu cr0, f0, f30 +/* 00005958 000126E8 D3 DA 00 08 */ stfs f30, 0x8(r26) +/* 0000595C 000126EC D0 1F 01 8C */ stfs f0, 0x18c(r31) +/* 00005960 000126F0 4C 62 03 82 */ cror un, eq, lt +/* 00005964 000126F4 41 83 59 6C */ bso .L_0000B2D0 +/* 00005968 000126F8 D3 DF 01 8C */ stfs f30, 0x18c(r31) +/* 0000596C 000126FC 3B A1 00 28 */ addi r29, r1, 0x28 +/* 00005970 00012700 C0 3F 01 8C */ lfs f1, 0x18c(r31) +/* 00005974 00012704 38 7F 01 08 */ addi r3, r31, 0x108 +/* 00005978 00012708 7F A4 EB 78 */ mr r4, r29 +/* 0000597C 0001270C 48 00 4B 31 */ bl .L_0000A4AC +/* 00005980 00012710 C0 1F 02 14 */ lfs f0, 0x214(r31) +/* 00005984 00012714 EC 00 F8 2A */ fadds f0, f0, f31 +/* 00005988 00012718 FC 00 F0 00 */ fcmpu cr0, f0, f30 +/* 0000598C 0001271C D0 1F 02 14 */ stfs f0, 0x214(r31) +/* 00005990 00012720 4C 62 03 82 */ cror un, eq, lt +/* 00005994 00012724 41 83 59 9C */ bso .L_0000B330 +/* 00005998 00012728 D3 DF 02 14 */ stfs f30, 0x214(r31) +.L_0000599C: +/* 0000599C 0001272C 3B 81 00 18 */ addi r28, r1, 0x18 +/* 000059A0 00012730 C0 3F 02 14 */ lfs f1, 0x214(r31) +/* 000059A4 00012734 38 7F 01 90 */ addi r3, r31, 0x190 +/* 000059A8 00012738 7F 84 E3 78 */ mr r4, r28 +/* 000059AC 0001273C 48 00 4B 31 */ bl .L_0000A4DC +/* 000059B0 00012740 C0 1F 01 04 */ lfs f0, 0x104(r31) +/* 000059B4 00012744 EC 00 F8 2A */ fadds f0, f0, f31 +/* 000059B8 00012748 FC 00 F0 00 */ fcmpu cr0, f0, f30 +/* 000059BC 0001274C D0 1F 01 04 */ stfs f0, 0x104(r31) +/* 000059C0 00012750 4C 62 03 82 */ cror un, eq, lt +/* 000059C4 00012754 41 83 59 CC */ bso .L_0000B390 +/* 000059C8 00012758 D3 DF 01 04 */ stfs f30, 0x104(r31) +/* 000059CC 0001275C 3B C1 00 38 */ addi r30, r1, 0x38 +/* 000059D0 00012760 C0 3F 01 04 */ lfs f1, 0x104(r31) +/* 000059D4 00012764 38 7F 00 80 */ addi r3, r31, 0x80 +.L_000059D8: +/* 000059D8 00012768 7F C4 F3 78 */ mr r4, r30 +/* 000059DC 0001276C 48 00 4B 31 */ bl .L_0000A50C +/* 000059E0 00012770 3F 60 00 00 */ lis r27, _6Camera.StopUpdating@ha +/* 000059E4 00012774 80 1B 00 00 */ lwz r0, _6Camera.StopUpdating@l(r27) +/* 000059E8 00012778 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000059EC 0001277C 40 82 5A 30 */ bne .L_0000B41C +/* 000059F0 00012780 3D 20 00 00 */ lis r9, .rodata+0x6A0@ha +.L_000059F4: +/* 000059F4 00012784 C0 01 00 38 */ lfs f0, 0x38(r1) +/* 000059F8 00012788 C1 89 06 A0 */ lfs f12, .rodata+0x6A0@l(r9) +/* 000059FC 0001278C 3C 00 B6 0B */ lis r0, 0xb60b +/* 00005A00 00012790 60 00 60 B7 */ ori r0, r0, 0x60b7 +/* 00005A04 00012794 EC 00 03 32 */ fmuls f0, f0, f12 +/* 00005A08 00012798 81 5F 00 1C */ lwz r10, 0x1c(r31) +/* 00005A0C 0001279C FD A0 00 1E */ fctiwz f13, f0 +/* 00005A10 000127A0 D9 A1 00 90 */ stfd f13, 0x90(r1) +/* 00005A14 000127A4 81 21 00 94 */ lwz r9, 0x94(r1) +/* 00005A18 000127A8 7C 09 00 96 */ mulhw r0, r9, r0 +/* 00005A1C 000127AC 7D 2B FE 70 */ srawi r11, r9, 31 +/* 00005A20 000127B0 7C 00 4A 14 */ add r0, r0, r9 +/* 00005A24 000127B4 7C 00 46 70 */ srawi r0, r0, 8 +.L_00005A28: +/* 00005A28 000127B8 7C 0B 00 50 */ subf r0, r11, r0 +.L_00005A2C: +/* 00005A2C 000127BC B0 0A 00 C4 */ sth r0, 0xc4(r10) +/* 00005A30 000127C0 80 9F 02 18 */ lwz r4, 0x218(r31) +/* 00005A34 000127C4 7F C3 F3 78 */ mr r3, r30 +/* 00005A38 000127C8 3B C1 00 48 */ addi r30, r1, 0x48 +/* 00005A3C 000127CC 7C 65 1B 78 */ mr r5, r3 +/* 00005A40 000127D0 D3 A1 00 38 */ stfs f29, 0x38(r1) +/* 00005A44 000127D4 38 84 00 48 */ addi r4, r4, 0x48 +/* 00005A48 000127D8 D3 A1 00 3C */ stfs f29, 0x3c(r1) +/* 00005A4C 000127DC 7F D9 F3 78 */ mr r25, r30 +/* 00005A50 000127E0 D3 A1 00 40 */ stfs f29, 0x40(r1) +/* 00005A54 000127E4 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 +/* 00005A58 000127E8 C0 01 00 18 */ lfs f0, 0x18(r1) +/* 00005A5C 000127EC 7F C3 F3 78 */ mr r3, r30 +/* 00005A60 000127F0 C1 81 00 1C */ lfs f12, 0x1c(r1) +/* 00005A64 000127F4 7F 46 D3 78 */ mr r6, r26 +/* 00005A68 000127F8 C1 A1 00 20 */ lfs f13, 0x20(r1) +/* 00005A6C 000127FC 7F 85 E3 78 */ mr r5, r28 +/* 00005A70 00012800 C1 41 00 38 */ lfs f10, 0x38(r1) +/* 00005A74 00012804 7F A4 EB 78 */ mr r4, r29 +/* 00005A78 00012808 C1 61 00 3C */ lfs f11, 0x3c(r1) +/* 00005A7C 0001280C C1 21 00 40 */ lfs f9, 0x40(r1) +/* 00005A80 00012810 EC 00 50 2A */ fadds f0, f0, f10 +/* 00005A84 00012814 ED 8C 58 2A */ fadds f12, f12, f11 +/* 00005A88 00012818 D0 01 00 18 */ stfs f0, 0x18(r1) +/* 00005A8C 0001281C ED AD 48 2A */ fadds f13, f13, f9 +/* 00005A90 00012820 D1 81 00 1C */ stfs f12, 0x1c(r1) +/* 00005A94 00012824 D1 A1 00 20 */ stfs f13, 0x20(r1) +/* 00005A98 00012828 48 00 00 01 */ bl eCreateLookAtMatrix__FP8bMatrix4R8bVector3N21 +/* 00005A9C 0001282C 80 7F 02 18 */ lwz r3, 0x218(r31) +/* 00005AA0 00012830 7F A4 EB 78 */ mr r4, r29 +/* 00005AA4 00012834 38 63 00 18 */ addi r3, r3, 0x18 +/* 00005AA8 00012838 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 +/* 00005AAC 0001283C 80 1B 00 00 */ lwz r0, _6Camera.StopUpdating@l(r27) +/* 00005AB0 00012840 FF E0 08 90 */ fmr f31, f1 +/* 00005AB4 00012844 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00005AB8 00012848 40 82 5A C4 */ bne .L_0000B57C +/* 00005ABC 0001284C 81 3F 00 1C */ lwz r9, 0x1c(r31) +.L_00005AC0: +/* 00005AC0 00012850 D3 E9 00 B0 */ stfs f31, 0xb0(r9) +/* 00005AC4 00012854 3D 20 00 00 */ lis r9, .rodata+0x6A4@ha +/* 00005AC8 00012858 C0 1F 02 1C */ lfs f0, 0x21c(r31) +/* 00005ACC 0001285C C1 A9 06 A4 */ lfs f13, .rodata+0x6A4@l(r9) +/* 00005AD0 00012860 FC 40 E8 90 */ fmr f2, f29 +/* 00005AD4 00012864 FC 20 E0 90 */ fmr f1, f28 +/* 00005AD8 00012868 38 7F 02 1C */ addi r3, r31, 0x21c +/* 00005ADC 0001286C EC 00 03 72 */ fmuls f0, f0, f13 +/* 00005AE0 00012870 D0 1F 02 20 */ stfs f0, 0x220(r31) +/* 00005AE4 00012874 FC 60 10 90 */ fmr f3, f2 +/* 00005AE8 00012878 48 00 00 01 */ bl SplineSeek__6cPointP8tCubic1Dfff +/* 00005AEC 0001287C C0 3F 02 1C */ lfs f1, 0x21c(r31) +/* 00005AF0 00012880 80 1F 02 48 */ lwz r0, 0x248(r31) +/* 00005AF4 00012884 EC 1F 08 2A */ fadds f0, f31, f1 +/* 00005AF8 00012888 ED BE 00 28 */ fsubs f13, f30, f0 +/* 00005AFC 0001288C 2C 00 00 00 */ cmpwi r0, 0x0 +.L_00005B00: +/* 00005B00 00012890 FF ED 07 AE */ fsel f31, f13, f30, f0 +/* 00005B04 00012894 41 82 5B 30 */ beq .L_0000B634 +/* 00005B08 00012898 80 1B 00 00 */ lwz r0, _6Camera.StopUpdating@l(r27) +/* 00005B0C 0001289C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00005B10 000128A0 40 82 5B 30 */ bne .L_0000B640 +/* 00005B14 000128A4 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 00005B18 000128A8 EC 1F 08 2A */ fadds f0, f31, f1 +/* 00005B1C 000128AC 3D 60 00 00 */ lis r11, .rodata+0x6A8@ha +/* 00005B20 000128B0 D0 09 00 B4 */ stfs f0, 0xb4(r9) +/* 00005B24 000128B4 C1 AB 06 A8 */ lfs f13, .rodata+0x6A8@l(r11) +/* 00005B28 000128B8 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 00005B2C 000128BC D1 A9 00 B8 */ stfs f13, 0xb8(r9) +.L_00005B30: +/* 00005B30 000128C0 80 7F 00 1C */ lwz r3, 0x1c(r31) +/* 00005B34 000128C4 7F 24 CB 78 */ mr r4, r25 +/* 00005B38 000128C8 FC 20 E0 90 */ fmr f1, f28 +/* 00005B3C 000128CC 48 00 04 ED */ bl .L_00006028 +.L_00005B40: +/* 00005B40 000128D0 80 01 00 DC */ lwz r0, 0xdc(r1) +/* 00005B44 000128D4 7C 08 03 A6 */ mtlr r0 +/* 00005B48 000128D8 BB 21 00 9C */ lmw r25, 0x9c(r1) +/* 00005B4C 000128DC E3 81 00 B8 */ psq_l f28, 0xb8(r1), 0, qr0 +/* 00005B50 000128E0 E3 A1 00 C0 */ psq_l f29, 0xc0(r1), 0, qr0 +/* 00005B54 000128E4 E3 C1 00 C8 */ psq_l f30, 0xc8(r1), 0, qr0 +/* 00005B58 000128E8 E3 E1 00 D0 */ psq_l f31, 0xd0(r1), 0, qr0 +/* 00005B5C 000128EC 38 21 00 D8 */ addi r1, r1, 0xd8 +/* 00005B60 000128F0 4E 80 00 20 */ blr +.endfn Update__19TrackCopCameraMoverf + +# .text:0x5B64 | size: 0x8 +# RearViewMirrorCameraMover::GetAnchor +.fn GetAnchor__25RearViewMirrorCameraMover, global +/* 00005B64 000128F4 80 63 00 80 */ lwz r3, 0x80(r3) +/* 00005B68 000128F8 4E 80 00 20 */ blr +.endfn GetAnchor__25RearViewMirrorCameraMover + +# .text:0x5B6C | size: 0x8 +# TrackCarCameraMover::GetAnchor +.fn GetAnchor__19TrackCarCameraMover, global +/* 00005B6C 000128FC 80 63 00 A0 */ lwz r3, 0xa0(r3) +/* 00005B70 00012900 4E 80 00 20 */ blr +.endfn GetAnchor__19TrackCarCameraMover + +# .text:0x5B74 | size: 0x24 +# TrackCarCameraMover::GetTarget +.fn GetTarget__19TrackCarCameraMover, global +/* 00005B74 00012904 7C 69 1B 78 */ mr r9, r3 +/* 00005B78 00012908 80 69 00 A0 */ lwz r3, 0xa0(r9) +/* 00005B7C 0001290C 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00005B80 00012910 40 82 5B 90 */ bne .L_0000B710 +/* 00005B84 00012914 80 69 00 1C */ lwz r3, 0x1c(r9) +/* 00005B88 00012918 38 63 00 60 */ addi r3, r3, 0x60 +/* 00005B8C 0001291C 4E 80 00 20 */ blr +/* 00005B90 00012920 38 63 00 18 */ addi r3, r3, 0x18 +/* 00005B94 00012924 4E 80 00 20 */ blr +.endfn GetTarget__19TrackCarCameraMover + +# .text:0x5B98 | size: 0x8 +# TrackCopCameraMover::GetAnchor +.fn GetAnchor__19TrackCopCameraMover, global +/* 00005B98 00012928 80 63 02 18 */ lwz r3, 0x218(r3) +/* 00005B9C 0001292C 4E 80 00 20 */ blr +.endfn GetAnchor__19TrackCopCameraMover + +# .text:0x5BA0 | size: 0x8 +# TrackCopCameraMover::RenderCarPOV +.fn RenderCarPOV__19TrackCopCameraMover, global +/* 00005BA0 00012930 80 63 02 4C */ lwz r3, 0x24c(r3) +/* 00005BA4 00012934 4E 80 00 20 */ blr +.endfn RenderCarPOV__19TrackCopCameraMover + +# .text:0x5BA8 | size: 0x24 +# TrackCopCameraMover::GetTarget +.fn GetTarget__19TrackCopCameraMover, global +/* 00005BA8 00012938 7C 69 1B 78 */ mr r9, r3 +/* 00005BAC 0001293C 80 69 02 18 */ lwz r3, 0x218(r9) +/* 00005BB0 00012940 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00005BB4 00012944 40 82 5B C4 */ bne .L_0000B778 +/* 00005BB8 00012948 80 69 00 1C */ lwz r3, 0x1c(r9) +/* 00005BBC 0001294C 38 63 00 60 */ addi r3, r3, 0x60 +/* 00005BC0 00012950 4E 80 00 20 */ blr +/* 00005BC4 00012954 38 63 00 18 */ addi r3, r3, 0x18 +/* 00005BC8 00012958 4E 80 00 20 */ blr +.endfn GetTarget__19TrackCopCameraMover + +# .text:0x5BCC | size: 0x1E8 +.fn __Q28CameraAI8Director8EVIEW_ID, global +/* 00005BCC 0001295C 94 21 FF C8 */ stwu r1, -0x38(r1) +/* 00005BD0 00012960 7C 08 02 A6 */ mflr r0 +/* 00005BD4 00012964 7D 80 00 26 */ mfcr r12 +/* 00005BD8 00012968 BE E1 00 14 */ stmw r23, 0x14(r1) +/* 00005BDC 0001296C 90 01 00 3C */ stw r0, 0x3c(r1) +/* 00005BE0 00012970 91 81 00 10 */ stw r12, 0x10(r1) +/* 00005BE4 00012974 3F 40 00 00 */ lis r26, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha +/* 00005BE8 00012978 7C 97 23 78 */ mr r23, r4 +/* 00005BEC 0001297C 3B BA 00 00 */ addi r29, r26, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l +/* 00005BF0 00012980 7C 7F 1B 78 */ mr r31, r3 +/* 00005BF4 00012984 80 9D 00 08 */ lwz r4, 0x8(r29) +/* 00005BF8 00012988 3B 01 00 08 */ addi r24, r1, 0x8 +.L_00005BFC: +/* 00005BFC 0001298C 80 1D 00 04 */ lwz r0, 0x4(r29) +/* 00005C00 00012990 93 E1 00 08 */ stw r31, 0x8(r1) +.L_00005C04: +/* 00005C04 00012994 7C 04 00 40 */ cmplw r4, r0 +/* 00005C08 00012998 41 80 5C E8 */ blt .L_0000B8F0 +/* 00005C0C 0001299C 81 3D 00 0C */ lwz r9, 0xc(r29) +/* 00005C10 000129A0 38 84 00 01 */ addi r4, r4, 0x1 +/* 00005C14 000129A4 80 09 00 24 */ lwz r0, 0x24(r9) +/* 00005C18 000129A8 A8 69 00 20 */ lha r3, 0x20(r9) +/* 00005C1C 000129AC 7C 08 03 A6 */ mtlr r0 +/* 00005C20 000129B0 7C 63 EA 14 */ add r3, r3, r29 +/* 00005C24 000129B4 4E 80 00 21 */ blrl +/* 00005C28 000129B8 80 1D 00 04 */ lwz r0, 0x4(r29) +/* 00005C2C 000129BC 7C 7E 1B 78 */ mr r30, r3 +.L_00005C30: +/* 00005C30 000129C0 7C 1E 00 40 */ cmplw r30, r0 +/* 00005C34 000129C4 40 81 5C E8 */ ble .L_0000B91C +/* 00005C38 000129C8 81 3D 00 0C */ lwz r9, 0xc(r29) +/* 00005C3C 000129CC 7F C4 F3 78 */ mr r4, r30 +/* 00005C40 000129D0 80 09 00 34 */ lwz r0, 0x34(r9) +/* 00005C44 000129D4 A8 69 00 30 */ lha r3, 0x30(r9) +/* 00005C48 000129D8 7C 08 03 A6 */ mtlr r0 +/* 00005C4C 000129DC 7C 63 EA 14 */ add r3, r3, r29 +/* 00005C50 000129E0 4E 80 00 21 */ blrl +/* 00005C54 000129E4 81 3D 00 0C */ lwz r9, 0xc(r29) +.L_00005C58: +/* 00005C58 000129E8 7F C4 F3 78 */ mr r4, r30 +/* 00005C5C 000129EC 38 A0 00 10 */ li r5, 0x10 +/* 00005C60 000129F0 83 9A 00 00 */ lwz r28, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r26) +/* 00005C64 000129F4 A8 69 00 10 */ lha r3, 0x10(r9) +/* 00005C68 000129F8 80 09 00 14 */ lwz r0, 0x14(r9) +/* 00005C6C 000129FC 7C 63 EA 14 */ add r3, r3, r29 +.L_00005C70: +/* 00005C70 00012A00 83 7D 00 08 */ lwz r27, 0x8(r29) +/* 00005C74 00012A04 7C 08 03 A6 */ mtlr r0 +/* 00005C78 00012A08 83 3D 00 04 */ lwz r25, 0x4(r29) +/* 00005C7C 00012A0C 4E 80 00 21 */ blrl +/* 00005C80 00012A10 93 DD 00 04 */ stw r30, 0x4(r29) +/* 00005C84 00012A14 7C 1C 18 00 */ cmpw r28, r3 +/* 00005C88 00012A18 90 7A 00 00 */ stw r3, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r26) +/* 00005C8C 00012A1C 41 82 5C E8 */ beq .L_0000B974 +/* 00005C90 00012A20 38 00 00 00 */ li r0, 0x0 +/* 00005C94 00012A24 3B C0 00 00 */ li r30, 0x0 +/* 00005C98 00012A28 90 1D 00 08 */ stw r0, 0x8(r29) +.L_00005C9C: +/* 00005C9C 00012A2C 7C 1E D8 00 */ cmpw r30, r27 +/* 00005CA0 00012A30 2E 1C 00 00 */ cmpwi cr4, r28, 0x0 +.L_00005CA4: +/* 00005CA4 00012A34 40 80 5C C4 */ bge .L_0000B968 +/* 00005CA8 00012A38 57 C4 10 3A */ slwi r4, r30, 2 +/* 00005CAC 00012A3C 7F A3 EB 78 */ mr r3, r29 +/* 00005CB0 00012A40 7C 9C 22 14 */ add r4, r28, r4 +/* 00005CB4 00012A44 3B DE 00 01 */ addi r30, r30, 0x1 +/* 00005CB8 00012A48 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZPQ28CameraAI8Directori16RCPQ28CameraAI8Director +/* 00005CBC 00012A4C 7C 1E D8 00 */ cmpw r30, r27 +/* 00005CC0 00012A50 41 80 5C A8 */ blt .L_0000B968 +/* 00005CC4 00012A54 41 92 5C E8 */ beq cr4, .L_0000B9AC +/* 00005CC8 00012A58 81 3D 00 0C */ lwz r9, 0xc(r29) +/* 00005CCC 00012A5C 7F 84 E3 78 */ mr r4, r28 +/* 00005CD0 00012A60 7F 25 CB 78 */ mr r5, r25 +/* 00005CD4 00012A64 A8 69 00 18 */ lha r3, 0x18(r9) +/* 00005CD8 00012A68 80 09 00 1C */ lwz r0, 0x1c(r9) +.L_00005CDC: +/* 00005CDC 00012A6C 7C 7D 1A 14 */ add r3, r29, r3 +/* 00005CE0 00012A70 7C 08 03 A6 */ mtlr r0 +/* 00005CE4 00012A74 4E 80 00 21 */ blrl +/* 00005CE8 00012A78 81 3D 00 08 */ lwz r9, 0x8(r29) +/* 00005CEC 00012A7C 81 7D 00 00 */ lwz r11, 0x0(r29) +/* 00005CF0 00012A80 55 29 10 3A */ slwi r9, r9, 2 +/* 00005CF4 00012A84 7C 09 5A 14 */ add r0, r9, r11 +/* 00005CF8 00012A88 2C 00 00 00 */ cmpwi r0, 0x0 +.L_00005CFC: +/* 00005CFC 00012A8C 41 82 5D 08 */ beq .L_0000BA04 +/* 00005D00 00012A90 80 18 00 00 */ lwz r0, 0x0(r24) +/* 00005D04 00012A94 7C 09 59 2E */ stwx r0, r9, r11 +/* 00005D08 00012A98 81 3D 00 08 */ lwz r9, 0x8(r29) +/* 00005D0C 00012A9C 3D 60 00 00 */ lis r11, _vt.Q28CameraAI8Director@ha +/* 00005D10 00012AA0 3F C0 00 00 */ lis r30, .rodata@ha +/* 00005D14 00012AA4 39 6B 00 00 */ addi r11, r11, _vt.Q28CameraAI8Director@l +/* 00005D18 00012AA8 39 29 00 01 */ addi r9, r9, 0x1 +/* 00005D1C 00012AAC 3B DE 00 00 */ addi r30, r30, .rodata@l +.L_00005D20: +/* 00005D20 00012AB0 91 3D 00 08 */ stw r9, 0x8(r29) +/* 00005D24 00012AB4 7F C3 F3 78 */ mr r3, r30 +/* 00005D28 00012AB8 92 FF 00 04 */ stw r23, 0x4(r31) +/* 00005D2C 00012ABC 3B 9F 00 08 */ addi r28, r31, 0x8 +/* 00005D30 00012AC0 91 7F 02 C4 */ stw r11, 0x2c4(r31) +.L_00005D34: +/* 00005D34 00012AC4 3B A0 00 00 */ li r29, 0x0 +/* 00005D38 00012AC8 48 00 00 01 */ bl StringHash64__6AttribPCc +.L_00005D3C: +/* 00005D3C 00012ACC 90 7F 00 08 */ stw r3, 0x8(r31) +/* 00005D40 00012AD0 90 9F 00 0C */ stw r4, 0xc(r31) +/* 00005D44 00012AD4 7F C3 F3 78 */ mr r3, r30 +/* 00005D48 00012AD8 48 00 00 01 */ bl StringHash32__6AttribPCc +/* 00005D4C 00012ADC 90 7C 00 08 */ stw r3, 0x8(r28) +/* 00005D50 00012AE0 3C C0 00 00 */ lis r6, .rodata+0x740@ha +/* 00005D54 00012AE4 93 DF 00 14 */ stw r30, 0x14(r31) +/* 00005D58 00012AE8 3C A0 98 C7 */ lis r5, 0x98c7 +.L_00005D5C: +/* 00005D5C 00012AEC 93 BF 00 18 */ stw r29, 0x18(r31) +/* 00005D60 00012AF0 38 C6 07 40 */ addi r6, r6, .rodata+0x740@l +/* 00005D64 00012AF4 38 7F 00 1C */ addi r3, r31, 0x1c +/* 00005D68 00012AF8 38 80 00 01 */ li r4, 0x1 +.L_00005D6C: +/* 00005D6C 00012AFC 60 A5 A2 F5 */ ori r5, r5, 0xa2f5 +/* 00005D70 00012B00 38 E0 00 00 */ li r7, 0x0 +/* 00005D74 00012B04 48 00 00 01 */ bl __11ActionQueueiUiPCcb +/* 00005D78 00012B08 3D 20 00 00 */ lis r9, .rodata+0x748@ha +/* 00005D7C 00012B0C 93 BF 02 BC */ stw r29, 0x2bc(r31) +/* 00005D80 00012B10 C0 09 07 48 */ lfs f0, .rodata+0x748@l(r9) +.L_00005D84: +/* 00005D84 00012B14 7F E3 FB 78 */ mr r3, r31 +.L_00005D88: +/* 00005D88 00012B18 93 BF 02 B0 */ stw r29, 0x2b0(r31) +/* 00005D8C 00012B1C D0 1F 02 C0 */ stfs f0, 0x2c0(r31) +/* 00005D90 00012B20 D0 1F 02 B4 */ stfs f0, 0x2b4(r31) +/* 00005D94 00012B24 D0 1F 02 B8 */ stfs f0, 0x2b8(r31) +/* 00005D98 00012B28 80 01 00 3C */ lwz r0, 0x3c(r1) +/* 00005D9C 00012B2C 81 81 00 10 */ lwz r12, 0x10(r1) +/* 00005DA0 00012B30 7C 08 03 A6 */ mtlr r0 +/* 00005DA4 00012B34 BA E1 00 14 */ lmw r23, 0x14(r1) +/* 00005DA8 00012B38 7D 80 81 20 */ mtcrf 8, r12 +/* 00005DAC 00012B3C 38 21 00 38 */ addi r1, r1, 0x38 +.L_00005DB0: +/* 00005DB0 00012B40 4E 80 00 20 */ blr +.endfn __Q28CameraAI8Director8EVIEW_ID + +# .text:0x5DB4 | size: 0x174 +.fn _._Q28CameraAI8Director, global +/* 00005DB4 00012B44 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 00005DB8 00012B48 7C 08 02 A6 */ mflr r0 +/* 00005DBC 00012B4C BF 81 00 10 */ stmw r28, 0x10(r1) +/* 00005DC0 00012B50 90 01 00 24 */ stw r0, 0x24(r1) +/* 00005DC4 00012B54 3D 20 00 00 */ lis r9, _vt.Q28CameraAI8Director@ha +.L_00005DC8: +/* 00005DC8 00012B58 7C 7D 1B 78 */ mr r29, r3 +/* 00005DCC 00012B5C 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI8Director@l +/* 00005DD0 00012B60 7C 9C 23 78 */ mr r28, r4 +/* 00005DD4 00012B64 91 3D 02 C4 */ stw r9, 0x2c4(r29) +/* 00005DD8 00012B68 48 00 5F 29 */ bl .L_0000BD00 +/* 00005DDC 00012B6C 3B C1 00 08 */ addi r30, r1, 0x8 +/* 00005DE0 00012B70 38 7D 00 1C */ addi r3, r29, 0x1c +/* 00005DE4 00012B74 38 80 00 02 */ li r4, 0x2 +/* 00005DE8 00012B78 48 00 00 01 */ bl _._11ActionQueue +/* 00005DEC 00012B7C 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha +/* 00005DF0 00012B80 93 A1 00 08 */ stw r29, 0x8(r1) +/* 00005DF4 00012B84 39 69 00 00 */ addi r11, r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l +/* 00005DF8 00012B88 81 49 00 00 */ lwz r10, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r9) +/* 00005DFC 00012B8C 80 0B 00 08 */ lwz r0, 0x8(r11) +.L_00005E00: +/* 00005E00 00012B90 7F C5 F3 78 */ mr r5, r30 +/* 00005E04 00012B94 7D 43 53 78 */ mr r3, r10 +/* 00005E08 00012B98 54 00 10 3A */ slwi r0, r0, 2 +/* 00005E0C 00012B9C 7F EA 02 14 */ add r31, r10, r0 +/* 00005E10 00012BA0 7F E4 FB 78 */ mr r4, r31 +.L_00005E14: +/* 00005E14 00012BA4 48 00 00 01 */ bl find__H2ZPPQ28CameraAI8DirectorZPQ28CameraAI8Director_4_STLX01X01RCX11_X01 +/* 00005E18 00012BA8 7C 03 F8 00 */ cmpw r3, r31 +.L_00005E1C: +/* 00005E1C 00012BAC 40 82 5E 28 */ bne .L_0000BC44 +/* 00005E20 00012BB0 7F E3 FB 78 */ mr r3, r31 +/* 00005E24 00012BB4 48 00 5E 58 */ b .L_0000BC7C +/* 00005E28 00012BB8 39 63 00 04 */ addi r11, r3, 0x4 +.L_00005E2C: +/* 00005E2C 00012BBC 7C 0B F8 00 */ cmpw r11, r31 +/* 00005E30 00012BC0 41 82 5E 58 */ beq .L_0000BC88 +/* 00005E34 00012BC4 81 2B 00 00 */ lwz r9, 0x0(r11) +/* 00005E38 00012BC8 80 1E 00 00 */ lwz r0, 0x0(r30) +/* 00005E3C 00012BCC 7C 09 00 00 */ cmpw r9, r0 +/* 00005E40 00012BD0 41 82 5E 4C */ beq .L_0000BC8C +.L_00005E44: +/* 00005E44 00012BD4 91 23 00 00 */ stw r9, 0x0(r3) +/* 00005E48 00012BD8 38 63 00 04 */ addi r3, r3, 0x4 +/* 00005E4C 00012BDC 39 6B 00 04 */ addi r11, r11, 0x4 +/* 00005E50 00012BE0 7C 0B F8 00 */ cmpw r11, r31 +/* 00005E54 00012BE4 40 82 5E 34 */ bne .L_0000BC88 +/* 00005E58 00012BE8 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha +/* 00005E5C 00012BEC 38 A9 00 00 */ addi r5, r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l +/* 00005E60 00012BF0 81 49 00 00 */ lwz r10, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r9) +/* 00005E64 00012BF4 81 05 00 08 */ lwz r8, 0x8(r5) +/* 00005E68 00012BF8 55 00 10 3A */ slwi r0, r8, 2 +/* 00005E6C 00012BFC 7D 6A 02 14 */ add r11, r10, r0 +/* 00005E70 00012C00 7C 03 58 00 */ cmpw r3, r11 +/* 00005E74 00012C04 41 82 5E EC */ beq .L_0000BD60 +/* 00005E78 00012C08 7D 23 58 50 */ subf r9, r3, r11 +/* 00005E7C 00012C0C 7C 0A 18 50 */ subf r0, r10, r3 +/* 00005E80 00012C10 7D 3F 16 70 */ srawi r31, r9, 2 +/* 00005E84 00012C14 7C 06 16 70 */ srawi r6, r0, 2 +/* 00005E88 00012C18 7D 09 43 78 */ mr r9, r8 +.L_00005E8C: +/* 00005E8C 00012C1C 38 63 00 04 */ addi r3, r3, 0x4 +/* 00005E90 00012C20 7C 03 58 00 */ cmpw r3, r11 +/* 00005E94 00012C24 40 82 5E 8C */ bne .L_0000BD20 +/* 00005E98 00012C28 7C E6 FA 14 */ add r7, r6, r31 +/* 00005E9C 00012C2C 39 00 00 00 */ li r8, 0x0 +/* 00005EA0 00012C30 7C E4 3B 78 */ mr r4, r7 +/* 00005EA4 00012C34 7C 04 48 50 */ subf r0, r4, r9 +/* 00005EA8 00012C38 7C 08 00 40 */ cmplw r8, r0 +/* 00005EAC 00012C3C 40 80 5E E4 */ bge .L_0000BD90 +/* 00005EB0 00012C40 7C 06 42 14 */ add r0, r6, r8 +/* 00005EB4 00012C44 81 65 00 00 */ lwz r11, 0x0(r5) +/* 00005EB8 00012C48 54 0A 10 3A */ slwi r10, r0, 2 +/* 00005EBC 00012C4C 7D 27 42 14 */ add r9, r7, r8 +/* 00005EC0 00012C50 7C 0A 5A 14 */ add r0, r10, r11 +/* 00005EC4 00012C54 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00005EC8 00012C58 41 82 5E D8 */ beq AquireCar__16CDActionTrackCop +/* 00005ECC 00012C5C 55 29 10 3A */ slwi r9, r9, 2 +/* 00005ED0 00012C60 7C 09 58 2E */ lwzx r0, r9, r11 +/* 00005ED4 00012C64 7C 0A 59 2E */ stwx r0, r10, r11 +/* 00005ED8 00012C68 39 08 00 01 */ addi r8, r8, 0x1 +/* 00005EDC 00012C6C 81 25 00 08 */ lwz r9, 0x8(r5) +/* 00005EE0 00012C70 48 00 5E A4 */ b .L_0000BD84 +/* 00005EE4 00012C74 7C 1F 48 50 */ subf r0, r31, r9 +/* 00005EE8 00012C78 90 05 00 08 */ stw r0, 0x8(r5) +/* 00005EEC 00012C7C 73 80 00 01 */ andi. r0, r28, 0x1 +/* 00005EF0 00012C80 41 82 5F 14 */ beq .L_0000BE04 +/* 00005EF4 00012C84 2C 1D 00 00 */ cmpwi r29, 0x0 +/* 00005EF8 00012C88 41 82 5F 14 */ beq .L_0000BE0C +/* 00005EFC 00012C8C 3C 60 00 00 */ lis r3, gFastMem@ha +/* 00005F00 00012C90 7F A4 EB 78 */ mr r4, r29 +/* 00005F04 00012C94 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 00005F08 00012C98 38 A0 02 C8 */ li r5, 0x2c8 +/* 00005F0C 00012C9C 38 C0 00 00 */ li r6, 0x0 +/* 00005F10 00012CA0 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 00005F14 00012CA4 80 01 00 24 */ lwz r0, 0x24(r1) +/* 00005F18 00012CA8 7C 08 03 A6 */ mtlr r0 +/* 00005F1C 00012CAC BB 81 00 10 */ lmw r28, 0x10(r1) +/* 00005F20 00012CB0 38 21 00 20 */ addi r1, r1, 0x20 +/* 00005F24 00012CB4 4E 80 00 20 */ blr +.endfn _._Q28CameraAI8Director + +# .text:0x5F28 | size: 0x58 +# CameraAI::Director::ReleaseAction +.fn ReleaseAction__Q28CameraAI8Director, global +/* 00005F28 00012CB8 94 21 FF F0 */ stwu r1, -0x10(r1) +.L_00005F2C: +/* 00005F2C 00012CBC 7C 08 02 A6 */ mflr r0 +/* 00005F30 00012CC0 93 E1 00 0C */ stw r31, 0xc(r1) +.L_00005F34: +/* 00005F34 00012CC4 90 01 00 14 */ stw r0, 0x14(r1) +/* 00005F38 00012CC8 7C 7F 1B 78 */ mr r31, r3 +/* 00005F3C 00012CCC 81 7F 00 18 */ lwz r11, 0x18(r31) +/* 00005F40 00012CD0 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00005F44 00012CD4 41 82 5F 6C */ beq .L_0000BEB0 +/* 00005F48 00012CD8 81 2B 00 14 */ lwz r9, 0x14(r11) +/* 00005F4C 00012CDC 38 80 00 03 */ li r4, 0x3 +/* 00005F50 00012CE0 80 09 00 0C */ lwz r0, 0xc(r9) +/* 00005F54 00012CE4 A8 69 00 08 */ lha r3, 0x8(r9) +/* 00005F58 00012CE8 7C 08 03 A6 */ mtlr r0 +/* 00005F5C 00012CEC 7C 6B 1A 14 */ add r3, r11, r3 +/* 00005F60 00012CF0 4E 80 00 21 */ blrl +/* 00005F64 00012CF4 38 00 00 00 */ li r0, 0x0 +/* 00005F68 00012CF8 90 1F 00 18 */ stw r0, 0x18(r31) +.L_00005F6C: +/* 00005F6C 00012CFC 80 01 00 14 */ lwz r0, 0x14(r1) +/* 00005F70 00012D00 7C 08 03 A6 */ mtlr r0 +/* 00005F74 00012D04 83 E1 00 0C */ lwz r31, 0xc(r1) +/* 00005F78 00012D08 38 21 00 10 */ addi r1, r1, 0x10 +/* 00005F7C 00012D0C 4E 80 00 20 */ blr +.endfn ReleaseAction__Q28CameraAI8Director + +# .text:0x5F80 | size: 0xA0 +# CameraAI::Director::Reset +.fn Reset__Q28CameraAI8Director, global +/* 00005F80 00012D10 94 21 FF D8 */ stwu r1, -0x28(r1) +/* 00005F84 00012D14 7C 08 02 A6 */ mflr r0 +/* 00005F88 00012D18 BF 81 00 18 */ stmw r28, 0x18(r1) +/* 00005F8C 00012D1C 90 01 00 2C */ stw r0, 0x2c(r1) +/* 00005F90 00012D20 3D 20 00 00 */ lis r9, .rodata+0x754@ha +/* 00005F94 00012D24 3F A0 00 00 */ lis r29, .rodata+0x74C@ha +/* 00005F98 00012D28 C0 09 07 54 */ lfs f0, .rodata+0x754@l(r9) +/* 00005F9C 00012D2C 7C 7E 1B 78 */ mr r30, r3 +/* 00005FA0 00012D30 3B BD 07 4C */ addi r29, r29, .rodata+0x74C@l +/* 00005FA4 00012D34 38 00 00 00 */ li r0, 0x0 +/* 00005FA8 00012D38 3B 81 00 08 */ addi r28, r1, 0x8 +/* 00005FAC 00012D3C 90 1E 02 BC */ stw r0, 0x2bc(r30) +/* 00005FB0 00012D40 D0 1E 02 C0 */ stfs f0, 0x2c0(r30) +/* 00005FB4 00012D44 7F A3 EB 78 */ mr r3, r29 +.L_00005FB8: +/* 00005FB8 00012D48 D0 1E 02 B8 */ stfs f0, 0x2b8(r30) +/* 00005FBC 00012D4C D0 1E 02 B4 */ stfs f0, 0x2b4(r30) +/* 00005FC0 00012D50 48 00 00 01 */ bl StringHash64__6AttribPCc +/* 00005FC4 00012D54 90 61 00 08 */ stw r3, 0x8(r1) +/* 00005FC8 00012D58 90 81 00 0C */ stw r4, 0xc(r1) +/* 00005FCC 00012D5C 7F A3 EB 78 */ mr r3, r29 +.L_00005FD0: +/* 00005FD0 00012D60 48 00 00 01 */ bl StringHash32__6AttribPCc +/* 00005FD4 00012D64 90 7C 00 08 */ stw r3, 0x8(r28) +/* 00005FD8 00012D68 7F 84 E3 78 */ mr r4, r28 +/* 00005FDC 00012D6C 93 A1 00 14 */ stw r29, 0x14(r1) +/* 00005FE0 00012D70 7F C3 F3 78 */ mr r3, r30 +/* 00005FE4 00012D74 48 00 62 39 */ bl .L_0000C21C +/* 00005FE8 00012D78 81 7E 00 18 */ lwz r11, 0x18(r30) +/* 00005FEC 00012D7C 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00005FF0 00012D80 41 82 60 0C */ beq .L_0000BFFC +/* 00005FF4 00012D84 81 2B 00 14 */ lwz r9, 0x14(r11) +/* 00005FF8 00012D88 A8 69 00 18 */ lha r3, 0x18(r9) +/* 00005FFC 00012D8C 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 00006000 00012D90 7C 6B 1A 14 */ add r3, r11, r3 +/* 00006004 00012D94 7C 08 03 A6 */ mtlr r0 +/* 00006008 00012D98 4E 80 00 21 */ blrl +/* 0000600C 00012D9C 80 01 00 2C */ lwz r0, 0x2c(r1) +/* 00006010 00012DA0 7C 08 03 A6 */ mtlr r0 +/* 00006014 00012DA4 BB 81 00 18 */ lmw r28, 0x18(r1) +/* 00006018 00012DA8 38 21 00 28 */ addi r1, r1, 0x28 +/* 0000601C 00012DAC 4E 80 00 20 */ blr +.endfn Reset__Q28CameraAI8Director + +# .text:0x6020 | size: 0x14 +.fn JumpStart__Q28CameraAI8Directorf, global +/* 00006020 00012DB0 3D 20 00 00 */ lis r9, kJumpTimeMultiplier@ha +/* 00006024 00012DB4 C0 09 00 00 */ lfs f0, kJumpTimeMultiplier@l(r9) +.L_00006028: +/* 00006028 00012DB8 EC 21 00 32 */ fmuls f1, f1, f0 +/* 0000602C 00012DBC D0 23 02 B8 */ stfs f1, 0x2b8(r3) +/* 00006030 00012DC0 4E 80 00 20 */ blr +.endfn JumpStart__Q28CameraAI8Directorf + +# .text:0x6034 | size: 0x28 +# CameraAI::Director::EndJumping +.fn EndJumping__Q28CameraAI8Director, global +/* 00006034 00012DC4 3D 20 00 00 */ lis r9, kEndJumpThreshold@ha +/* 00006038 00012DC8 C0 03 02 B8 */ lfs f0, 0x2b8(r3) +/* 0000603C 00012DCC C1 A9 00 00 */ lfs f13, kEndJumpThreshold@l(r9) +/* 00006040 00012DD0 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00006044 00012DD4 4C 62 0B 82 */ cror un, eq, gt +/* 00006048 00012DD8 4D 83 00 20 */ bsolr +/* 0000604C 00012DDC 3D 20 00 00 */ lis r9, kEndJumpValue@ha +/* 00006050 00012DE0 C0 09 00 00 */ lfs f0, kEndJumpValue@l(r9) +/* 00006054 00012DE4 D0 03 02 B8 */ stfs f0, 0x2b8(r3) +/* 00006058 00012DE8 4E 80 00 20 */ blr +.endfn EndJumping__Q28CameraAI8Director + +# .text:0x605C | size: 0x28 +# CameraAI::Director::EndPursuitStart +.fn EndPursuitStart__Q28CameraAI8Director, global +/* 0000605C 00012DEC 3D 20 00 00 */ lis r9, kEndPursuitThreshold@ha +/* 00006060 00012DF0 C0 03 02 B4 */ lfs f0, 0x2b4(r3) +/* 00006064 00012DF4 C1 A9 00 00 */ lfs f13, kEndPursuitThreshold@l(r9) +/* 00006068 00012DF8 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 0000606C 00012DFC 4C 62 0B 82 */ cror un, eq, gt +/* 00006070 00012E00 4D 83 00 20 */ bsolr +/* 00006074 00012E04 3D 20 00 00 */ lis r9, kEndPursuitValue@ha +/* 00006078 00012E08 C0 09 00 00 */ lfs f0, kEndPursuitValue@l(r9) +/* 0000607C 00012E0C D0 03 02 B4 */ stfs f0, 0x2b4(r3) +/* 00006080 00012E10 4E 80 00 20 */ blr +.endfn EndPursuitStart__Q28CameraAI8Director + +# .text:0x6084 | size: 0x48 +# CameraAI::Director::GetMover +.fn GetMover__Q28CameraAI8Director, global +/* 00006084 00012E14 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 00006088 00012E18 7C 08 02 A6 */ mflr r0 +/* 0000608C 00012E1C 90 01 00 0C */ stw r0, 0xc(r1) +/* 00006090 00012E20 81 63 00 18 */ lwz r11, 0x18(r3) +/* 00006094 00012E24 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00006098 00012E28 40 82 60 A4 */ bne .L_0000C13C +/* 0000609C 00012E2C 38 60 00 00 */ li r3, 0x0 +/* 000060A0 00012E30 48 00 60 BC */ b .L_0000C15C +/* 000060A4 00012E34 81 2B 00 14 */ lwz r9, 0x14(r11) +/* 000060A8 00012E38 A8 69 00 30 */ lha r3, 0x30(r9) +/* 000060AC 00012E3C 80 09 00 34 */ lwz r0, 0x34(r9) +/* 000060B0 00012E40 7C 6B 1A 14 */ add r3, r11, r3 +.L_000060B4: +/* 000060B4 00012E44 7C 08 03 A6 */ mtlr r0 +.L_000060B8: +/* 000060B8 00012E48 4E 80 00 21 */ blrl +/* 000060BC 00012E4C 80 01 00 0C */ lwz r0, 0xc(r1) +/* 000060C0 00012E50 7C 08 03 A6 */ mtlr r0 +/* 000060C4 00012E54 38 21 00 08 */ addi r1, r1, 0x8 +/* 000060C8 00012E58 4E 80 00 20 */ blr +.endfn GetMover__Q28CameraAI8Director + +# .text:0x60CC | size: 0x16C +.fn Update__Q28CameraAI8Directorf, global +/* 000060CC 00012E5C 94 21 FF D0 */ stwu r1, -0x30(r1) +/* 000060D0 00012E60 7C 08 02 A6 */ mflr r0 +/* 000060D4 00012E64 F3 E1 00 28 */ psq_st f31, 0x28(r1), 0, qr0 +/* 000060D8 00012E68 BF 81 00 18 */ stmw r28, 0x18(r1) +/* 000060DC 00012E6C 90 01 00 34 */ stw r0, 0x34(r1) +/* 000060E0 00012E70 7C 7F 1B 78 */ mr r31, r3 +/* 000060E4 00012E74 FF E0 08 90 */ fmr f31, f1 +/* 000060E8 00012E78 3C 60 00 00 */ lis r3, TheGameFlowManager@ha +/* 000060EC 00012E7C 38 63 00 00 */ addi r3, r3, TheGameFlowManager@l +/* 000060F0 00012E80 48 00 00 01 */ bl IsPaused__15GameFlowManager +/* 000060F4 00012E84 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000060F8 00012E88 40 82 61 1C */ bne .L_0000C214 +/* 000060FC 00012E8C 3D 20 00 00 */ lis r9, .rodata+0x758@ha +/* 00006100 00012E90 C1 BF 02 B8 */ lfs f13, 0x2b8(r31) +/* 00006104 00012E94 C0 09 07 58 */ lfs f0, .rodata+0x758@l(r9) +/* 00006108 00012E98 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 0000610C 00012E9C 4C 62 03 82 */ cror un, eq, lt +.L_00006110: +/* 00006110 00012EA0 41 83 61 1C */ bso .L_0000C22C +/* 00006114 00012EA4 EC 0D F8 28 */ fsubs f0, f13, f31 +/* 00006118 00012EA8 D0 1F 02 B8 */ stfs f0, 0x2b8(r31) +/* 0000611C 00012EAC 38 60 00 01 */ li r3, 0x1 +/* 00006120 00012EB0 48 00 00 01 */ bl ShouldPauseSimulation__9FEManagerb +/* 00006124 00012EB4 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00006128 00012EB8 40 82 61 4C */ bne .L_0000C274 +/* 0000612C 00012EBC 3D 20 00 00 */ lis r9, .rodata+0x758@ha +/* 00006130 00012EC0 C1 BF 02 B4 */ lfs f13, 0x2b4(r31) +/* 00006134 00012EC4 C0 09 07 58 */ lfs f0, .rodata+0x758@l(r9) +/* 00006138 00012EC8 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 0000613C 00012ECC 4C 62 03 82 */ cror un, eq, lt +/* 00006140 00012ED0 41 83 61 4C */ bso .L_0000C28C +/* 00006144 00012ED4 EC 0D F8 28 */ fsubs f0, f13, f31 +/* 00006148 00012ED8 D0 1F 02 B4 */ stfs f0, 0x2b4(r31) +/* 0000614C 00012EDC 7F E3 FB 78 */ mr r3, r31 +.L_00006150: +/* 00006150 00012EE0 48 00 63 D5 */ bl .L_0000C524 +/* 00006154 00012EE4 81 7F 00 18 */ lwz r11, 0x18(r31) +/* 00006158 00012EE8 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000615C 00012EEC 41 82 62 20 */ beq .L_0000C37C +/* 00006160 00012EF0 81 2B 00 14 */ lwz r9, 0x14(r11) +/* 00006164 00012EF4 3B A1 00 08 */ addi r29, r1, 0x8 +/* 00006168 00012EF8 80 09 00 24 */ lwz r0, 0x24(r9) +/* 0000616C 00012EFC A8 69 00 20 */ lha r3, 0x20(r9) +/* 00006170 00012F00 7C 08 03 A6 */ mtlr r0 +.L_00006174: +/* 00006174 00012F04 7C 6B 1A 14 */ add r3, r11, r3 +/* 00006178 00012F08 4E 80 00 21 */ blrl +/* 0000617C 00012F0C 3F C0 00 00 */ lis r30, .rodata+0x74C@ha +/* 00006180 00012F10 7C 7C 1B 78 */ mr r28, r3 +/* 00006184 00012F14 3B DE 07 4C */ addi r30, r30, .rodata+0x74C@l +/* 00006188 00012F18 7F C3 F3 78 */ mr r3, r30 +/* 0000618C 00012F1C 48 00 00 01 */ bl StringHash64__6AttribPCc +/* 00006190 00012F20 90 61 00 08 */ stw r3, 0x8(r1) +/* 00006194 00012F24 90 81 00 0C */ stw r4, 0xc(r1) +/* 00006198 00012F28 7F C3 F3 78 */ mr r3, r30 +/* 0000619C 00012F2C 48 00 00 01 */ bl StringHash32__6AttribPCc +/* 000061A0 00012F30 90 7D 00 08 */ stw r3, 0x8(r29) +/* 000061A4 00012F34 93 C1 00 14 */ stw r30, 0x14(r1) +/* 000061A8 00012F38 38 60 00 00 */ li r3, 0x0 +/* 000061AC 00012F3C 81 21 00 08 */ lwz r9, 0x8(r1) +/* 000061B0 00012F40 80 1C 00 00 */ lwz r0, 0x0(r28) +/* 000061B4 00012F44 7C 00 48 00 */ cmpw r0, r9 +.L_000061B8: +/* 000061B8 00012F48 40 82 61 D0 */ bne .L_0000C388 +/* 000061BC 00012F4C 81 3C 00 04 */ lwz r9, 0x4(r28) +/* 000061C0 00012F50 80 01 00 0C */ lwz r0, 0xc(r1) +/* 000061C4 00012F54 7D 23 02 78 */ xor r3, r9, r0 +/* 000061C8 00012F58 21 63 00 00 */ subfic r11, r3, 0x0 +.L_000061CC: +/* 000061CC 00012F5C 7C 6B 19 14 */ adde r3, r11, r3 +/* 000061D0 00012F60 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000061D4 00012F64 41 82 61 F8 */ beq .L_0000C3CC +/* 000061D8 00012F68 80 7F 00 18 */ lwz r3, 0x18(r31) +/* 000061DC 00012F6C C0 3F 02 C0 */ lfs f1, 0x2c0(r31) +/* 000061E0 00012F70 81 23 00 14 */ lwz r9, 0x14(r3) +.L_000061E4: +/* 000061E4 00012F74 A8 09 00 38 */ lha r0, 0x38(r9) +/* 000061E8 00012F78 81 29 00 3C */ lwz r9, 0x3c(r9) +/* 000061EC 00012F7C 7C 63 02 14 */ add r3, r3, r0 +/* 000061F0 00012F80 7D 28 03 A6 */ mtlr r9 +/* 000061F4 00012F84 4E 80 00 21 */ blrl +/* 000061F8 00012F88 81 7F 00 18 */ lwz r11, 0x18(r31) +/* 000061FC 00012F8C 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00006200 00012F90 41 82 62 20 */ beq .L_0000C420 +/* 00006204 00012F94 81 2B 00 14 */ lwz r9, 0x14(r11) +/* 00006208 00012F98 FC 20 F8 90 */ fmr f1, f31 +/* 0000620C 00012F9C A8 69 00 10 */ lha r3, 0x10(r9) +/* 00006210 00012FA0 80 09 00 14 */ lwz r0, 0x14(r9) +/* 00006214 00012FA4 7C 6B 1A 14 */ add r3, r11, r3 +/* 00006218 00012FA8 7C 08 03 A6 */ mtlr r0 +/* 0000621C 00012FAC 4E 80 00 21 */ blrl +/* 00006220 00012FB0 80 01 00 34 */ lwz r0, 0x34(r1) +/* 00006224 00012FB4 7C 08 03 A6 */ mtlr r0 +/* 00006228 00012FB8 BB 81 00 18 */ lmw r28, 0x18(r1) +/* 0000622C 00012FBC E3 E1 00 28 */ psq_l f31, 0x28(r1), 0, qr0 +/* 00006230 00012FC0 38 21 00 30 */ addi r1, r1, 0x30 +/* 00006234 00012FC4 4E 80 00 20 */ blr +.endfn Update__Q28CameraAI8Directorf + +# .text:0x6238 | size: 0x19C +.fn SetAction__Q28CameraAI8DirectorGQ26Attrib9StringKey, global +/* 00006238 00012FC8 94 21 FF D8 */ stwu r1, -0x28(r1) +/* 0000623C 00012FCC 7C 08 02 A6 */ mflr r0 +/* 00006240 00012FD0 BF 81 00 18 */ stmw r28, 0x18(r1) +/* 00006244 00012FD4 90 01 00 2C */ stw r0, 0x2c(r1) +/* 00006248 00012FD8 80 04 00 0C */ lwz r0, 0xc(r4) +/* 0000624C 00012FDC 7C 7F 1B 78 */ mr r31, r3 +.L_00006250: +/* 00006250 00012FE0 81 7F 00 18 */ lwz r11, 0x18(r31) +/* 00006254 00012FE4 90 1F 00 14 */ stw r0, 0x14(r31) +/* 00006258 00012FE8 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000625C 00012FEC 81 24 00 00 */ lwz r9, 0x0(r4) +/* 00006260 00012FF0 81 44 00 04 */ lwz r10, 0x4(r4) +/* 00006264 00012FF4 91 3F 00 08 */ stw r9, 0x8(r31) +/* 00006268 00012FF8 91 5F 00 0C */ stw r10, 0xc(r31) +/* 0000626C 00012FFC 80 04 00 08 */ lwz r0, 0x8(r4) +/* 00006270 00013000 90 1F 00 10 */ stw r0, 0x10(r31) +/* 00006274 00013004 41 82 63 38 */ beq .L_0000C5AC +/* 00006278 00013008 81 2B 00 14 */ lwz r9, 0x14(r11) +/* 0000627C 0001300C 38 61 00 08 */ addi r3, r1, 0x8 +/* 00006280 00013010 80 09 00 2C */ lwz r0, 0x2c(r9) +.L_00006284: +/* 00006284 00013014 A8 89 00 28 */ lha r4, 0x28(r9) +/* 00006288 00013018 7C 08 03 A6 */ mtlr r0 +/* 0000628C 0001301C 7C 8B 22 14 */ add r4, r11, r4 +/* 00006290 00013020 4E 80 00 21 */ blrl +/* 00006294 00013024 80 01 00 14 */ lwz r0, 0x14(r1) +/* 00006298 00013028 39 41 00 08 */ addi r10, r1, 0x8 +/* 0000629C 0001302C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000062A0 00013030 41 82 62 B8 */ beq .L_0000C558 +/* 000062A4 00013034 81 2A 00 0C */ lwz r9, 0xc(r10) +/* 000062A8 00013038 88 09 00 00 */ lbz r0, 0x0(r9) +/* 000062AC 0001303C 21 20 00 00 */ subfic r9, r0, 0x0 +/* 000062B0 00013040 7C 09 01 14 */ adde r0, r9, r0 +/* 000062B4 00013044 48 00 62 BC */ b .L_0000C570 +/* 000062B8 00013048 38 00 00 01 */ li r0, 0x1 +/* 000062BC 0001304C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000062C0 00013050 40 82 62 E4 */ bne .L_0000C5A4 +/* 000062C4 00013054 81 6A 00 08 */ lwz r11, 0x8(r10) +/* 000062C8 00013058 80 0A 00 0C */ lwz r0, 0xc(r10) +/* 000062CC 0001305C 81 2A 00 00 */ lwz r9, 0x0(r10) +/* 000062D0 00013060 81 4A 00 04 */ lwz r10, 0x4(r10) +/* 000062D4 00013064 90 1F 00 14 */ stw r0, 0x14(r31) +/* 000062D8 00013068 91 3F 00 08 */ stw r9, 0x8(r31) +/* 000062DC 0001306C 91 5F 00 0C */ stw r10, 0xc(r31) +/* 000062E0 00013070 91 7F 00 10 */ stw r11, 0x10(r31) +/* 000062E4 00013074 81 7F 00 18 */ lwz r11, 0x18(r31) +/* 000062E8 00013078 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 000062EC 0001307C 41 82 63 38 */ beq .L_0000C624 +/* 000062F0 00013080 81 2B 00 14 */ lwz r9, 0x14(r11) +/* 000062F4 00013084 80 09 00 24 */ lwz r0, 0x24(r9) +/* 000062F8 00013088 A8 69 00 20 */ lha r3, 0x20(r9) +/* 000062FC 0001308C 7C 08 03 A6 */ mtlr r0 +/* 00006300 00013090 7C 6B 1A 14 */ add r3, r11, r3 +/* 00006304 00013094 4E 80 00 21 */ blrl +/* 00006308 00013098 81 3F 00 08 */ lwz r9, 0x8(r31) +/* 0000630C 0001309C 39 60 00 00 */ li r11, 0x0 +/* 00006310 000130A0 80 03 00 00 */ lwz r0, 0x0(r3) +/* 00006314 000130A4 7C 00 48 00 */ cmpw r0, r9 +/* 00006318 000130A8 40 82 63 30 */ bne .L_0000C648 +/* 0000631C 000130AC 81 23 00 04 */ lwz r9, 0x4(r3) +/* 00006320 000130B0 80 1F 00 0C */ lwz r0, 0xc(r31) +/* 00006324 000130B4 7D 2B 02 78 */ xor r11, r9, r0 +/* 00006328 000130B8 21 4B 00 00 */ subfic r10, r11, 0x0 +/* 0000632C 000130BC 7D 6A 59 14 */ adde r11, r10, r11 +/* 00006330 000130C0 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00006334 000130C4 40 82 63 C0 */ bne .L_0000C6F4 +/* 00006338 000130C8 80 1F 00 14 */ lwz r0, 0x14(r31) +/* 0000633C 000130CC 3B 9F 00 08 */ addi r28, r31, 0x8 +/* 00006340 000130D0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00006344 000130D4 41 82 63 5C */ beq .L_0000C6A0 +/* 00006348 000130D8 81 3C 00 0C */ lwz r9, 0xc(r28) +.L_0000634C: +/* 0000634C 000130DC 88 09 00 00 */ lbz r0, 0x0(r9) +/* 00006350 000130E0 21 20 00 00 */ subfic r9, r0, 0x0 +/* 00006354 000130E4 7C 09 01 14 */ adde r0, r9, r0 +/* 00006358 000130E8 48 00 63 60 */ b .L_0000C6B8 +/* 0000635C 000130EC 38 00 00 01 */ li r0, 0x1 +/* 00006360 000130F0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00006364 000130F4 40 82 63 C0 */ bne .L_0000C724 +/* 00006368 000130F8 80 1C 00 08 */ lwz r0, 0x8(r28) +/* 0000636C 000130FC 3B C1 00 08 */ addi r30, r1, 0x8 +/* 00006370 00013100 7F C3 F3 78 */ mr r3, r30 +/* 00006374 00013104 7F E4 FB 78 */ mr r4, r31 +/* 00006378 00013108 90 01 00 08 */ stw r0, 0x8(r1) +/* 0000637C 0001310C 48 00 00 01 */ bl CreateInstance__Q33UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32G6UCrc32PQ28CameraAI8Director +/* 00006380 00013110 7C 7D 1B 79 */ mr. r29, r3 +/* 00006384 00013114 41 82 63 C0 */ beq .L_0000C744 +/* 00006388 00013118 7F E3 FB 78 */ mr r3, r31 +/* 0000638C 0001311C 48 00 5F 29 */ bl .L_0000C2B4 +/* 00006390 00013120 93 BF 00 18 */ stw r29, 0x18(r31) +/* 00006394 00013124 7F C3 F3 78 */ mr r3, r30 +/* 00006398 00013128 81 3F 00 08 */ lwz r9, 0x8(r31) +/* 0000639C 0001312C 81 5F 00 0C */ lwz r10, 0xc(r31) +/* 000063A0 00013130 80 1C 00 08 */ lwz r0, 0x8(r28) +/* 000063A4 00013134 91 21 00 08 */ stw r9, 0x8(r1) +/* 000063A8 00013138 91 41 00 0C */ stw r10, 0xc(r1) +/* 000063AC 0001313C 81 7F 00 14 */ lwz r11, 0x14(r31) +.L_000063B0: +/* 000063B0 00013140 90 1E 00 08 */ stw r0, 0x8(r30) +/* 000063B4 00013144 80 9F 00 04 */ lwz r4, 0x4(r31) +/* 000063B8 00013148 91 61 00 14 */ stw r11, 0x14(r1) +/* 000063BC 0001314C 48 00 00 01 */ bl SetNewSndCamAction__FGQ26Attrib9StringKey8EVIEW_ID +/* 000063C0 00013150 80 01 00 2C */ lwz r0, 0x2c(r1) +/* 000063C4 00013154 7C 08 03 A6 */ mtlr r0 +/* 000063C8 00013158 BB 81 00 18 */ lmw r28, 0x18(r1) +/* 000063CC 0001315C 38 21 00 28 */ addi r1, r1, 0x28 +/* 000063D0 00013160 4E 80 00 20 */ blr +.endfn SetAction__Q28CameraAI8DirectorGQ26Attrib9StringKey + +# .text:0x63D4 | size: 0x758 +# CameraAI::Director::SelectAction +.fn SelectAction__Q28CameraAI8Director, global +/* 000063D4 00013164 94 21 FF 50 */ stwu r1, -0xb0(r1) +/* 000063D8 00013168 7C 08 02 A6 */ mflr r0 +/* 000063DC 0001316C F3 E1 00 A8 */ psq_st f31, 0xa8(r1), 0, qr0 +/* 000063E0 00013170 BF 01 00 88 */ stmw r24, 0x88(r1) +/* 000063E4 00013174 90 01 00 B4 */ stw r0, 0xb4(r1) +/* 000063E8 00013178 3D 20 00 00 */ lis r9, TheICEManager+0x28@ha +/* 000063EC 0001317C 7C 7F 1B 78 */ mr r31, r3 +/* 000063F0 00013180 80 09 00 28 */ lwz r0, TheICEManager+0x28@l(r9) +/* 000063F4 00013184 39 20 00 01 */ li r9, 0x1 +/* 000063F8 00013188 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000063FC 0001318C 40 81 64 04 */ ble .L_0000C800 +/* 00006400 00013190 39 20 00 00 */ li r9, 0x0 +/* 00006404 00013194 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00006408 00013198 41 82 69 B0 */ beq .L_0000CDB8 +/* 0000640C 0001319C 3D 20 00 00 */ lis r9, .rodata+0x790@ha +/* 00006410 000131A0 C0 1F 02 B8 */ lfs f0, 0x2b8(r31) +/* 00006414 000131A4 C3 E9 07 90 */ lfs f31, .rodata+0x790@l(r9) +/* 00006418 000131A8 FC 00 F8 00 */ fcmpu cr0, f0, f31 +/* 0000641C 000131AC 4C 62 0B 82 */ cror un, eq, gt +/* 00006420 000131B0 41 83 64 78 */ bso .L_0000C898 +/* 00006424 000131B4 3F C0 00 00 */ lis r30, .rodata+0x74C@ha +.L_00006428: +/* 00006428 000131B8 D3 FF 02 B8 */ stfs f31, 0x2b8(r31) +/* 0000642C 000131BC 3B DE 07 4C */ addi r30, r30, .rodata+0x74C@l +/* 00006430 000131C0 3B A1 00 08 */ addi r29, r1, 0x8 +/* 00006434 000131C4 7F C3 F3 78 */ mr r3, r30 +/* 00006438 000131C8 48 00 00 01 */ bl StringHash64__6AttribPCc +/* 0000643C 000131CC 90 61 00 08 */ stw r3, 0x8(r1) +/* 00006440 000131D0 90 81 00 0C */ stw r4, 0xc(r1) +/* 00006444 000131D4 7F C3 F3 78 */ mr r3, r30 +/* 00006448 000131D8 48 00 00 01 */ bl StringHash32__6AttribPCc +/* 0000644C 000131DC 90 7D 00 08 */ stw r3, 0x8(r29) +/* 00006450 000131E0 39 60 00 01 */ li r11, 0x1 +/* 00006454 000131E4 93 C1 00 14 */ stw r30, 0x14(r1) +/* 00006458 000131E8 81 21 00 08 */ lwz r9, 0x8(r1) +/* 0000645C 000131EC 81 41 00 0C */ lwz r10, 0xc(r1) +/* 00006460 000131F0 80 1D 00 08 */ lwz r0, 0x8(r29) +/* 00006464 000131F4 93 DF 00 14 */ stw r30, 0x14(r31) +/* 00006468 000131F8 91 3F 00 08 */ stw r9, 0x8(r31) +/* 0000646C 000131FC 91 5F 00 0C */ stw r10, 0xc(r31) +/* 00006470 00013200 90 1F 00 10 */ stw r0, 0x10(r31) +/* 00006474 00013204 91 7F 02 BC */ stw r11, 0x2bc(r31) +/* 00006478 00013208 C0 1F 02 B4 */ lfs f0, 0x2b4(r31) +/* 0000647C 0001320C FC 00 F8 00 */ fcmpu cr0, f0, f31 +/* 00006480 00013210 4C 62 0B 82 */ cror un, eq, gt +/* 00006484 00013214 41 83 64 DC */ bso .L_0000C960 +/* 00006488 00013218 3F C0 00 00 */ lis r30, .rodata+0x74C@ha +/* 0000648C 0001321C D3 FF 02 B4 */ stfs f31, 0x2b4(r31) +/* 00006490 00013220 3B DE 07 4C */ addi r30, r30, .rodata+0x74C@l +/* 00006494 00013224 3B A1 00 08 */ addi r29, r1, 0x8 +/* 00006498 00013228 7F C3 F3 78 */ mr r3, r30 +/* 0000649C 0001322C 48 00 00 01 */ bl StringHash64__6AttribPCc +.L_000064A0: +/* 000064A0 00013230 90 61 00 08 */ stw r3, 0x8(r1) +/* 000064A4 00013234 90 81 00 0C */ stw r4, 0xc(r1) +/* 000064A8 00013238 7F C3 F3 78 */ mr r3, r30 +/* 000064AC 0001323C 48 00 00 01 */ bl StringHash32__6AttribPCc +/* 000064B0 00013240 90 7D 00 08 */ stw r3, 0x8(r29) +/* 000064B4 00013244 39 60 00 01 */ li r11, 0x1 +/* 000064B8 00013248 93 C1 00 14 */ stw r30, 0x14(r1) +/* 000064BC 0001324C 81 21 00 08 */ lwz r9, 0x8(r1) +/* 000064C0 00013250 81 41 00 0C */ lwz r10, 0xc(r1) +/* 000064C4 00013254 80 1D 00 08 */ lwz r0, 0x8(r29) +/* 000064C8 00013258 93 DF 00 14 */ stw r30, 0x14(r31) +/* 000064CC 0001325C 91 3F 00 08 */ stw r9, 0x8(r31) +/* 000064D0 00013260 91 5F 00 0C */ stw r10, 0xc(r31) +/* 000064D4 00013264 90 1F 00 10 */ stw r0, 0x10(r31) +/* 000064D8 00013268 91 7F 02 BC */ stw r11, 0x2bc(r31) +/* 000064DC 0001326C C1 BF 02 B4 */ lfs f13, 0x2b4(r31) +/* 000064E0 00013270 FC 0D F8 00 */ fcmpu cr0, f13, f31 +.L_000064E4: +/* 000064E4 00013274 4C 62 03 82 */ cror un, eq, lt +.L_000064E8: +/* 000064E8 00013278 41 83 65 48 */ bso .L_0000CA30 +/* 000064EC 0001327C 3D 20 00 00 */ lis r9, .rodata+0x794@ha +/* 000064F0 00013280 C0 09 07 94 */ lfs f0, .rodata+0x794@l(r9) +/* 000064F4 00013284 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 000064F8 00013288 4C 62 0B 82 */ cror un, eq, gt +/* 000064FC 0001328C 41 83 65 48 */ bso .L_0000CA44 +/* 00006500 00013290 3F C0 00 00 */ lis r30, .rodata+0x75C@ha +/* 00006504 00013294 3B A1 00 08 */ addi r29, r1, 0x8 +/* 00006508 00013298 3B DE 07 5C */ addi r30, r30, .rodata+0x75C@l +.L_0000650C: +/* 0000650C 0001329C 7F C3 F3 78 */ mr r3, r30 +/* 00006510 000132A0 48 00 00 01 */ bl StringHash64__6AttribPCc +/* 00006514 000132A4 90 61 00 08 */ stw r3, 0x8(r1) +/* 00006518 000132A8 90 81 00 0C */ stw r4, 0xc(r1) +/* 0000651C 000132AC 7F C3 F3 78 */ mr r3, r30 +/* 00006520 000132B0 48 00 00 01 */ bl StringHash32__6AttribPCc +/* 00006524 000132B4 90 7D 00 08 */ stw r3, 0x8(r29) +/* 00006528 000132B8 93 C1 00 14 */ stw r30, 0x14(r1) +/* 0000652C 000132BC 81 21 00 08 */ lwz r9, 0x8(r1) +/* 00006530 000132C0 81 41 00 0C */ lwz r10, 0xc(r1) +/* 00006534 000132C4 80 1D 00 08 */ lwz r0, 0x8(r29) +/* 00006538 000132C8 93 DF 00 14 */ stw r30, 0x14(r31) +/* 0000653C 000132CC 91 3F 00 08 */ stw r9, 0x8(r31) +/* 00006540 000132D0 91 5F 00 0C */ stw r10, 0xc(r31) +/* 00006544 000132D4 90 1F 00 10 */ stw r0, 0x10(r31) +/* 00006548 000132D8 3D 20 00 00 */ lis r9, gGameBreakerCamera@ha +/* 0000654C 000132DC 83 09 00 00 */ lwz r24, gGameBreakerCamera@l(r9) +/* 00006550 000132E0 2C 18 00 00 */ cmpwi r24, 0x0 +/* 00006554 000132E4 40 82 67 5C */ bne .L_0000CCB0 +/* 00006558 000132E8 80 1F 00 04 */ lwz r0, 0x4(r31) +/* 0000655C 000132EC 3D 20 00 00 */ lis r9, eViews@ha +/* 00006560 000132F0 39 29 00 00 */ addi r9, r9, eViews@l +/* 00006564 000132F4 1C 00 00 68 */ mulli r0, r0, 0x68 +/* 00006568 000132F8 7D 20 4A 15 */ add. r9, r0, r9 +/* 0000656C 000132FC 41 82 67 5C */ beq .L_0000CCC8 +/* 00006570 00013300 81 69 00 3C */ lwz r11, 0x3c(r9) +/* 00006574 00013304 38 09 00 3C */ addi r0, r9, 0x3c +/* 00006578 00013308 39 40 00 00 */ li r10, 0x0 +/* 0000657C 0001330C 7C 0B 00 00 */ cmpw r11, r0 +/* 00006580 00013310 41 82 65 88 */ beq .L_0000CB08 +/* 00006584 00013314 7D 6A 5B 78 */ mr r10, r11 +/* 00006588 00013318 2C 0A 00 00 */ cmpwi r10, 0x0 +/* 0000658C 0001331C 41 82 67 5C */ beq .L_0000CCE8 +/* 00006590 00013320 80 0A 00 0C */ lwz r0, 0xc(r10) +/* 00006594 00013324 2C 00 00 01 */ cmpwi r0, 0x1 +/* 00006598 00013328 40 82 67 5C */ bne GetName__C13CDActionDebug +/* 0000659C 0001332C 81 2A 00 08 */ lwz r9, 0x8(r10) +/* 000065A0 00013330 A8 69 00 28 */ lha r3, 0x28(r9) +/* 000065A4 00013334 80 09 00 2C */ lwz r0, 0x2c(r9) +/* 000065A8 00013338 7C 6A 1A 14 */ add r3, r10, r3 +/* 000065AC 0001333C 7C 08 03 A6 */ mtlr r0 +/* 000065B0 00013340 4E 80 00 21 */ blrl +/* 000065B4 00013344 7C 7E 1B 79 */ mr. r30, r3 +/* 000065B8 00013348 41 82 67 5C */ beq .L_0000CD14 +/* 000065BC 0001334C 48 00 6F 11 */ bl .L_0000D4CC +/* 000065C0 00013350 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000065C4 00013354 41 82 67 5C */ beq .L_0000CD20 +/* 000065C8 00013358 3D 20 00 00 */ lis r9, kJumpSpeedHigh@ha +/* 000065CC 0001335C C1 BE 00 10 */ lfs f13, 0x10(r30) +/* 000065D0 00013360 C0 09 00 00 */ lfs f0, kJumpSpeedHigh@l(r9) +/* 000065D4 00013364 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 000065D8 00013368 41 81 65 FC */ bgt .L_0000CBD4 +/* 000065DC 0001336C 3D 20 00 00 */ lis r9, kJumpSpeedLow@ha +/* 000065E0 00013370 C0 09 00 00 */ lfs f0, kJumpSpeedLow@l(r9) +/* 000065E4 00013374 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 000065E8 00013378 4C 62 03 82 */ cror un, eq, lt +/* 000065EC 0001337C 41 83 67 5C */ bso .L_0000CD48 +/* 000065F0 00013380 80 1E 00 C4 */ lwz r0, 0xc4(r30) +/* 000065F4 00013384 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000065F8 00013388 41 82 67 5C */ beq .L_0000CD54 +/* 000065FC 0001338C 80 1E 00 D0 */ lwz r0, 0xd0(r30) +/* 00006600 00013390 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00006604 00013394 41 82 67 5C */ beq .L_0000CD60 +/* 00006608 00013398 3F A0 00 00 */ lis r29, .rodata+0x768@ha +/* 0000660C 0001339C 3B C1 00 08 */ addi r30, r1, 0x8 +/* 00006610 000133A0 3B BD 07 68 */ addi r29, r29, .rodata+0x768@l +/* 00006614 000133A4 3F 20 2D 8A */ lis r25, 0x2d8a +/* 00006618 000133A8 7F A3 EB 78 */ mr r3, r29 +/* 0000661C 000133AC 63 39 CB 81 */ ori r25, r25, 0xcb81 +/* 00006620 000133B0 48 00 00 01 */ bl StringHash64__6AttribPCc +/* 00006624 000133B4 90 61 00 08 */ stw r3, 0x8(r1) +/* 00006628 000133B8 90 81 00 0C */ stw r4, 0xc(r1) +/* 0000662C 000133BC 7F A3 EB 78 */ mr r3, r29 +/* 00006630 000133C0 48 00 00 01 */ bl StringHash32__6AttribPCc +/* 00006634 000133C4 90 7E 00 08 */ stw r3, 0x8(r30) +/* 00006638 000133C8 3D 20 00 00 */ lis r9, _Q25UMath7Vector4.kZero@ha +/* 0000663C 000133CC 93 A1 00 14 */ stw r29, 0x14(r1) +/* 00006640 000133D0 39 69 00 00 */ addi r11, r9, _Q25UMath7Vector4.kZero@l +/* 00006644 000133D4 81 09 00 00 */ lwz r8, _Q25UMath7Vector4.kZero@l(r9) +/* 00006648 000133D8 39 41 00 60 */ addi r10, r1, 0x60 +/* 0000664C 000133DC 80 81 00 08 */ lwz r4, 0x8(r1) +/* 00006650 000133E0 80 A1 00 0C */ lwz r5, 0xc(r1) +/* 00006654 000133E4 3F 80 00 00 */ lis r28, .rodata+0x794@ha +.L_00006658: +/* 00006658 000133E8 83 7E 00 08 */ lwz r27, 0x8(r30) +/* 0000665C 000133EC 38 C1 00 70 */ addi r6, r1, 0x70 +/* 00006660 000133F0 80 EB 00 0C */ lwz r7, 0xc(r11) +/* 00006664 000133F4 38 61 00 80 */ addi r3, r1, 0x80 +/* 00006668 000133F8 80 0B 00 04 */ lwz r0, 0x4(r11) +/* 0000666C 000133FC 81 2B 00 08 */ lwz r9, 0x8(r11) +/* 00006670 00013400 91 01 00 08 */ stw r8, 0x8(r1) +/* 00006674 00013404 90 FE 00 0C */ stw r7, 0xc(r30) +/* 00006678 00013408 90 1E 00 04 */ stw r0, 0x4(r30) +/* 0000667C 0001340C 91 3E 00 08 */ stw r9, 0x8(r30) +/* 00006680 00013410 91 01 00 60 */ stw r8, 0x60(r1) +/* 00006684 00013414 90 EA 00 0C */ stw r7, 0xc(r10) +/* 00006688 00013418 90 0A 00 04 */ stw r0, 0x4(r10) +/* 0000668C 0001341C 91 2A 00 08 */ stw r9, 0x8(r10) +/* 00006690 00013420 91 01 00 70 */ stw r8, 0x70(r1) +/* 00006694 00013424 93 BF 00 14 */ stw r29, 0x14(r31) +/* 00006698 00013428 C0 1C 07 94 */ lfs f0, .rodata+0x794@l(r28) +/* 0000669C 0001342C 90 E6 00 0C */ stw r7, 0xc(r6) +/* 000066A0 00013430 90 9F 00 08 */ stw r4, 0x8(r31) +/* 000066A4 00013434 90 BF 00 0C */ stw r5, 0xc(r31) +/* 000066A8 00013438 93 7F 00 10 */ stw r27, 0x10(r31) +/* 000066AC 0001343C D0 1F 02 B8 */ stfs f0, 0x2b8(r31) +/* 000066B0 00013440 90 06 00 04 */ stw r0, 0x4(r6) +/* 000066B4 00013444 91 26 00 08 */ stw r9, 0x8(r6) +/* 000066B8 00013448 48 00 00 01 */ bl _GetKind__15MGamePlayMoment +/* 000066BC 0001344C 80 01 00 10 */ lwz r0, 0x10(r1) +.L_000066C0: +/* 000066C0 00013450 3B 60 00 48 */ li r27, 0x48 +/* 000066C4 00013454 83 81 00 80 */ lwz r28, 0x80(r1) +/* 000066C8 00013458 3C 60 00 00 */ lis r3, .rodata+0x770@ha +/* 000066CC 0001345C 83 41 00 08 */ lwz r26, 0x8(r1) +/* 000066D0 00013460 38 63 07 70 */ addi r3, r3, .rodata+0x770@l +/* 000066D4 00013464 83 A1 00 0C */ lwz r29, 0xc(r1) +/* 000066D8 00013468 81 21 00 14 */ lwz r9, 0x14(r1) +/* 000066DC 0001346C 81 61 00 60 */ lwz r11, 0x60(r1) +/* 000066E0 00013470 81 41 00 64 */ lwz r10, 0x64(r1) +/* 000066E4 00013474 81 01 00 68 */ lwz r8, 0x68(r1) +/* 000066E8 00013478 80 E1 00 6C */ lwz r7, 0x6c(r1) +.L_000066EC: +/* 000066EC 0001347C 80 C1 00 70 */ lwz r6, 0x70(r1) +/* 000066F0 00013480 80 A1 00 74 */ lwz r5, 0x74(r1) +/* 000066F4 00013484 80 81 00 78 */ lwz r4, 0x78(r1) +/* 000066F8 00013488 83 C1 00 7C */ lwz r30, 0x7c(r1) +/* 000066FC 0001348C 90 01 00 30 */ stw r0, 0x30(r1) +/* 00006700 00013490 93 81 00 18 */ stw r28, 0x18(r1) +/* 00006704 00013494 93 61 00 20 */ stw r27, 0x20(r1) +/* 00006708 00013498 93 41 00 28 */ stw r26, 0x28(r1) +/* 0000670C 0001349C 93 A1 00 2C */ stw r29, 0x2c(r1) +/* 00006710 000134A0 91 21 00 34 */ stw r9, 0x34(r1) +.L_00006714: +/* 00006714 000134A4 91 61 00 38 */ stw r11, 0x38(r1) +/* 00006718 000134A8 91 41 00 3C */ stw r10, 0x3c(r1) +/* 0000671C 000134AC 91 01 00 40 */ stw r8, 0x40(r1) +/* 00006720 000134B0 90 E1 00 44 */ stw r7, 0x44(r1) +/* 00006724 000134B4 90 C1 00 48 */ stw r6, 0x48(r1) +/* 00006728 000134B8 90 A1 00 4C */ stw r5, 0x4c(r1) +/* 0000672C 000134BC 90 81 00 50 */ stw r4, 0x50(r1) +/* 00006730 000134C0 93 C1 00 54 */ stw r30, 0x54(r1) +/* 00006734 000134C4 93 01 00 58 */ stw r24, 0x58(r1) +/* 00006738 000134C8 93 21 00 5C */ stw r25, 0x5c(r1) +/* 0000673C 000134CC 93 01 00 1C */ stw r24, 0x1c(r1) +/* 00006740 000134D0 93 01 00 24 */ stw r24, 0x24(r1) +/* 00006744 000134D4 48 00 00 01 */ bl stringhash32__FPCc +/* 00006748 000134D8 7C 60 1B 78 */ mr r0, r3 +/* 0000674C 000134DC 90 01 00 1C */ stw r0, 0x1c(r1) +/* 00006750 000134E0 38 61 00 18 */ addi r3, r1, 0x18 +/* 00006754 000134E4 90 01 00 08 */ stw r0, 0x8(r1) +/* 00006758 000134E8 48 00 00 01 */ bl Deliver__Q26Hermes7Message +/* 0000675C 000134EC 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@ha +/* 00006760 000134F0 3B A0 00 00 */ li r29, 0x0 +/* 00006764 000134F4 83 C9 00 00 */ lwz r30, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@l(r9) +/* 00006768 000134F8 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 0000676C 000134FC 41 82 67 E8 */ beq .L_0000CF54 +/* 00006770 00013500 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 00006774 00013504 A8 69 00 80 */ lha r3, 0x80(r9) +/* 00006778 00013508 80 09 00 84 */ lwz r0, 0x84(r9) +/* 0000677C 0001350C 7C 7E 1A 14 */ add r3, r30, r3 +/* 00006780 00013510 7C 08 03 A6 */ mtlr r0 +/* 00006784 00013514 4E 80 00 21 */ blrl +/* 00006788 00013518 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000678C 0001351C 41 82 67 E8 */ beq .L_0000CF74 +/* 00006790 00013520 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 00006794 00013524 A8 69 00 98 */ lha r3, 0x98(r9) +/* 00006798 00013528 80 09 00 9C */ lwz r0, 0x9c(r9) +/* 0000679C 0001352C 7C 7E 1A 14 */ add r3, r30, r3 +/* 000067A0 00013530 7C 08 03 A6 */ mtlr r0 +/* 000067A4 00013534 4E 80 00 21 */ blrl +/* 000067A8 00013538 7C 6B 1B 79 */ mr. r11, r3 +/* 000067AC 0001353C 41 82 67 E8 */ beq .L_0000CF94 +/* 000067B0 00013540 81 2B 00 00 */ lwz r9, 0x0(r11) +/* 000067B4 00013544 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 000067B8 00013548 A8 69 00 18 */ lha r3, 0x18(r9) +/* 000067BC 0001354C 7C 08 03 A6 */ mtlr r0 +/* 000067C0 00013550 7C 6B 1A 14 */ add r3, r11, r3 +/* 000067C4 00013554 4E 80 00 21 */ blrl +/* 000067C8 00013558 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 000067CC 0001355C 7C 7D 1B 78 */ mr r29, r3 +/* 000067D0 00013560 A8 69 00 D0 */ lha r3, 0xd0(r9) +/* 000067D4 00013564 80 09 00 D4 */ lwz r0, 0xd4(r9) +/* 000067D8 00013568 7C 7E 1A 14 */ add r3, r30, r3 +/* 000067DC 0001356C 7C 08 03 A6 */ mtlr r0 +/* 000067E0 00013570 4E 80 00 21 */ blrl +/* 000067E4 00013574 90 7F 02 BC */ stw r3, 0x2bc(r31) +/* 000067E8 00013578 2C 1D 00 00 */ cmpwi r29, 0x0 +/* 000067EC 0001357C 40 82 68 20 */ bne .L_0000D00C +/* 000067F0 00013580 3D 20 00 00 */ lis r9, TheICEManager@ha +/* 000067F4 00013584 3C 60 00 00 */ lis r3, .rodata@ha +/* 000067F8 00013588 3B 49 00 00 */ addi r26, r9, TheICEManager@l +.L_000067FC: +/* 000067FC 0001358C 38 63 00 00 */ addi r3, r3, .rodata@l +/* 00006800 00013590 48 00 00 01 */ bl bStringHash__FPCc +/* 00006804 00013594 3B 60 00 01 */ li r27, 0x1 +/* 00006808 00013598 80 1A 00 60 */ lwz r0, 0x60(r26) +/* 0000680C 0001359C 7C 00 18 00 */ cmpw r0, r3 +/* 00006810 000135A0 40 82 68 18 */ bne .L_0000D028 +/* 00006814 000135A4 3B 60 00 00 */ li r27, 0x0 +/* 00006818 000135A8 2C 1B 00 00 */ cmpwi r27, 0x0 +/* 0000681C 000135AC 41 82 68 7C */ beq .L_0000D098 +/* 00006820 000135B0 3F C0 00 00 */ lis r30, .rodata+0x77C@ha +/* 00006824 000135B4 3B A1 00 08 */ addi r29, r1, 0x8 +.L_00006828: +/* 00006828 000135B8 3B DE 07 7C */ addi r30, r30, .rodata+0x77C@l +/* 0000682C 000135BC 7F C3 F3 78 */ mr r3, r30 +/* 00006830 000135C0 48 00 00 01 */ bl StringHash64__6AttribPCc +/* 00006834 000135C4 90 61 00 08 */ stw r3, 0x8(r1) +/* 00006838 000135C8 90 81 00 0C */ stw r4, 0xc(r1) +/* 0000683C 000135CC 7F C3 F3 78 */ mr r3, r30 +/* 00006840 000135D0 48 00 00 01 */ bl StringHash32__6AttribPCc +/* 00006844 000135D4 90 7D 00 08 */ stw r3, 0x8(r29) +/* 00006848 000135D8 3D 20 00 00 */ lis r9, .rodata+0x790@ha +/* 0000684C 000135DC 93 C1 00 14 */ stw r30, 0x14(r1) +/* 00006850 000135E0 C0 09 07 90 */ lfs f0, .rodata+0x790@l(r9) +/* 00006854 000135E4 80 1D 00 08 */ lwz r0, 0x8(r29) +.L_00006858: +/* 00006858 000135E8 81 21 00 08 */ lwz r9, 0x8(r1) +/* 0000685C 000135EC 81 41 00 0C */ lwz r10, 0xc(r1) +/* 00006860 000135F0 93 DF 00 14 */ stw r30, 0x14(r31) +/* 00006864 000135F4 91 3F 00 08 */ stw r9, 0x8(r31) +/* 00006868 000135F8 91 5F 00 0C */ stw r10, 0xc(r31) +/* 0000686C 000135FC 90 1F 00 10 */ stw r0, 0x10(r31) +/* 00006870 00013600 D0 1F 02 B4 */ stfs f0, 0x2b4(r31) +/* 00006874 00013604 D0 1F 02 B8 */ stfs f0, 0x2b8(r31) +/* 00006878 00013608 48 00 69 B0 */ b .L_0000D228 +/* 0000687C 0001360C 81 7F 00 18 */ lwz r11, 0x18(r31) +/* 00006880 00013610 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00006884 00013614 41 82 6A 7C */ beq .L_0000D300 +/* 00006888 00013618 81 2B 00 14 */ lwz r9, 0x14(r11) +/* 0000688C 0001361C 3B A1 00 08 */ addi r29, r1, 0x8 +/* 00006890 00013620 80 09 00 24 */ lwz r0, 0x24(r9) +/* 00006894 00013624 A8 69 00 20 */ lha r3, 0x20(r9) +/* 00006898 00013628 7C 08 03 A6 */ mtlr r0 +/* 0000689C 0001362C 7C 6B 1A 14 */ add r3, r11, r3 +/* 000068A0 00013630 4E 80 00 21 */ blrl +/* 000068A4 00013634 3F C0 00 00 */ lis r30, .rodata+0x77C@ha +/* 000068A8 00013638 7C 7C 1B 78 */ mr r28, r3 +.L_000068AC: +/* 000068AC 0001363C 3B DE 07 7C */ addi r30, r30, .rodata+0x77C@l +/* 000068B0 00013640 7F C3 F3 78 */ mr r3, r30 +/* 000068B4 00013644 48 00 00 01 */ bl StringHash64__6AttribPCc +/* 000068B8 00013648 90 61 00 08 */ stw r3, 0x8(r1) +/* 000068BC 0001364C 90 81 00 0C */ stw r4, 0xc(r1) +/* 000068C0 00013650 7F C3 F3 78 */ mr r3, r30 +/* 000068C4 00013654 48 00 00 01 */ bl StringHash32__6AttribPCc +/* 000068C8 00013658 90 7D 00 08 */ stw r3, 0x8(r29) +/* 000068CC 0001365C 93 C1 00 14 */ stw r30, 0x14(r1) +.L_000068D0: +/* 000068D0 00013660 38 60 00 00 */ li r3, 0x0 +/* 000068D4 00013664 81 21 00 08 */ lwz r9, 0x8(r1) +/* 000068D8 00013668 80 1C 00 00 */ lwz r0, 0x0(r28) +/* 000068DC 0001366C 7C 00 48 00 */ cmpw r0, r9 +/* 000068E0 00013670 40 82 68 F8 */ bne .L_0000D1D8 +/* 000068E4 00013674 81 3C 00 04 */ lwz r9, 0x4(r28) +/* 000068E8 00013678 80 01 00 0C */ lwz r0, 0xc(r1) +/* 000068EC 0001367C 7D 23 02 78 */ xor r3, r9, r0 +/* 000068F0 00013680 21 43 00 00 */ subfic r10, r3, 0x0 +/* 000068F4 00013684 7C 6A 19 14 */ adde r3, r10, r3 +/* 000068F8 00013688 2C 03 00 00 */ cmpwi r3, 0x0 +.L_000068FC: +/* 000068FC 0001368C 41 82 69 B0 */ beq .L_0000D2AC +/* 00006900 00013690 3F C0 00 00 */ lis r30, .rodata+0x74C@ha +/* 00006904 00013694 93 7A 00 7C */ stw r27, 0x7c(r26) +/* 00006908 00013698 3B DE 07 4C */ addi r30, r30, .rodata+0x74C@l +/* 0000690C 0001369C 7F C3 F3 78 */ mr r3, r30 +/* 00006910 000136A0 48 00 00 01 */ bl StringHash64__6AttribPCc +/* 00006914 000136A4 90 61 00 18 */ stw r3, 0x18(r1) +/* 00006918 000136A8 90 81 00 1C */ stw r4, 0x1c(r1) +/* 0000691C 000136AC 7F C3 F3 78 */ mr r3, r30 +/* 00006920 000136B0 48 00 00 01 */ bl StringHash32__6AttribPCc +/* 00006924 000136B4 81 61 00 18 */ lwz r11, 0x18(r1) +/* 00006928 000136B8 81 81 00 1C */ lwz r12, 0x1c(r1) +/* 0000692C 000136BC 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@ha +/* 00006930 000136C0 81 49 00 00 */ lwz r10, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@l(r9) +/* 00006934 000136C4 93 DF 00 14 */ stw r30, 0x14(r31) +/* 00006938 000136C8 91 7F 00 08 */ stw r11, 0x8(r31) +/* 0000693C 000136CC 91 9F 00 0C */ stw r12, 0xc(r31) +/* 00006940 000136D0 2C 0A 00 00 */ cmpwi r10, 0x0 +/* 00006944 000136D4 90 7F 00 10 */ stw r3, 0x10(r31) +/* 00006948 000136D8 90 61 00 20 */ stw r3, 0x20(r1) +/* 0000694C 000136DC 93 C1 00 24 */ stw r30, 0x24(r1) +/* 00006950 000136E0 41 82 69 74 */ beq .L_0000D2C4 +/* 00006954 000136E4 81 2A 00 04 */ lwz r9, 0x4(r10) +/* 00006958 000136E8 3C 80 00 00 */ lis r4, .rodata+0x780@ha +/* 0000695C 000136EC 38 84 07 80 */ addi r4, r4, .rodata+0x780@l +/* 00006960 000136F0 A8 69 00 B8 */ lha r3, 0xb8(r9) +/* 00006964 000136F4 80 09 00 BC */ lwz r0, 0xbc(r9) +/* 00006968 000136F8 7C 6A 1A 14 */ add r3, r10, r3 +/* 0000696C 000136FC 7C 08 03 A6 */ mtlr r0 +/* 00006970 00013700 4E 80 00 21 */ blrl +/* 00006974 00013704 3C 00 20 D6 */ lis r0, 0x20d6 +/* 00006978 00013708 38 61 00 30 */ addi r3, r1, 0x30 +/* 0000697C 0001370C 60 00 0D BF */ ori r0, r0, 0xdbf +/* 00006980 00013710 3B C1 00 18 */ addi r30, r1, 0x18 +/* 00006984 00013714 90 01 00 18 */ stw r0, 0x18(r1) +/* 00006988 00013718 48 00 00 01 */ bl _GetKind__18MICECameraFinished +/* 0000698C 0001371C 81 21 00 30 */ lwz r9, 0x30(r1) +/* 00006990 00013720 38 00 00 10 */ li r0, 0x10 +/* 00006994 00013724 90 01 00 28 */ stw r0, 0x28(r1) +/* 00006998 00013728 7F C4 F3 78 */ mr r4, r30 +/* 0000699C 0001372C 91 21 00 20 */ stw r9, 0x20(r1) +/* 000069A0 00013730 38 61 00 20 */ addi r3, r1, 0x20 +/* 000069A4 00013734 93 61 00 2C */ stw r27, 0x2c(r1) +/* 000069A8 00013738 93 61 00 24 */ stw r27, 0x24(r1) +/* 000069AC 0001373C 48 00 00 01 */ bl Post__Q26Hermes7MessageG6UCrc32 +/* 000069B0 00013740 81 7F 00 18 */ lwz r11, 0x18(r31) +/* 000069B4 00013744 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 000069B8 00013748 41 82 6A 7C */ beq .L_0000D434 +/* 000069BC 0001374C 81 2B 00 14 */ lwz r9, 0x14(r11) +/* 000069C0 00013750 38 61 00 08 */ addi r3, r1, 0x8 +/* 000069C4 00013754 80 09 00 2C */ lwz r0, 0x2c(r9) +/* 000069C8 00013758 A8 89 00 28 */ lha r4, 0x28(r9) +/* 000069CC 0001375C 7C 08 03 A6 */ mtlr r0 +.L_000069D0: +/* 000069D0 00013760 7C 8B 22 14 */ add r4, r11, r4 +/* 000069D4 00013764 4E 80 00 21 */ blrl +.L_000069D8: +/* 000069D8 00013768 80 01 00 14 */ lwz r0, 0x14(r1) +/* 000069DC 0001376C 39 41 00 08 */ addi r10, r1, 0x8 +/* 000069E0 00013770 2C 00 00 00 */ cmpwi r0, 0x0 +.L_000069E4: +/* 000069E4 00013774 41 82 69 FC */ beq .L_0000D3E0 +/* 000069E8 00013778 81 2A 00 0C */ lwz r9, 0xc(r10) +/* 000069EC 0001377C 88 09 00 00 */ lbz r0, 0x0(r9) +/* 000069F0 00013780 21 20 00 00 */ subfic r9, r0, 0x0 +/* 000069F4 00013784 7C 09 01 14 */ adde r0, r9, r0 +/* 000069F8 00013788 48 00 6A 00 */ b .L_0000D3F8 +/* 000069FC 0001378C 38 00 00 01 */ li r0, 0x1 +/* 00006A00 00013790 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00006A04 00013794 40 82 6A 28 */ bne .L_0000D42C +.L_00006A08: +/* 00006A08 00013798 81 6A 00 08 */ lwz r11, 0x8(r10) +/* 00006A0C 0001379C 80 0A 00 0C */ lwz r0, 0xc(r10) +/* 00006A10 000137A0 81 2A 00 00 */ lwz r9, 0x0(r10) +/* 00006A14 000137A4 81 4A 00 04 */ lwz r10, 0x4(r10) +/* 00006A18 000137A8 90 1F 00 14 */ stw r0, 0x14(r31) +/* 00006A1C 000137AC 91 3F 00 08 */ stw r9, 0x8(r31) +/* 00006A20 000137B0 91 5F 00 0C */ stw r10, 0xc(r31) +/* 00006A24 000137B4 91 7F 00 10 */ stw r11, 0x10(r31) +/* 00006A28 000137B8 81 7F 00 18 */ lwz r11, 0x18(r31) +/* 00006A2C 000137BC 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00006A30 000137C0 41 82 6A 7C */ beq GetMover__11CDActionIce +/* 00006A34 000137C4 81 2B 00 14 */ lwz r9, 0x14(r11) +/* 00006A38 000137C8 80 09 00 24 */ lwz r0, 0x24(r9) +/* 00006A3C 000137CC A8 69 00 20 */ lha r3, 0x20(r9) +/* 00006A40 000137D0 7C 08 03 A6 */ mtlr r0 +/* 00006A44 000137D4 7C 6B 1A 14 */ add r3, r11, r3 +/* 00006A48 000137D8 4E 80 00 21 */ blrl +/* 00006A4C 000137DC 81 3F 00 08 */ lwz r9, 0x8(r31) +/* 00006A50 000137E0 39 60 00 00 */ li r11, 0x0 +.L_00006A54: +/* 00006A54 000137E4 80 03 00 00 */ lwz r0, 0x0(r3) +/* 00006A58 000137E8 7C 00 48 00 */ cmpw r0, r9 +/* 00006A5C 000137EC 40 82 6A 74 */ bne .L_0000D4D0 +.L_00006A60: +/* 00006A60 000137F0 81 23 00 04 */ lwz r9, 0x4(r3) +/* 00006A64 000137F4 80 1F 00 0C */ lwz r0, 0xc(r31) +/* 00006A68 000137F8 7D 2B 02 78 */ xor r11, r9, r0 +/* 00006A6C 000137FC 21 4B 00 00 */ subfic r10, r11, 0x0 +/* 00006A70 00013800 7D 6A 59 14 */ adde r11, r10, r11 +/* 00006A74 00013804 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00006A78 00013808 40 82 6B 14 */ bne .L_0000D58C +/* 00006A7C 0001380C 80 1F 00 14 */ lwz r0, 0x14(r31) +/* 00006A80 00013810 3B 9F 00 08 */ addi r28, r31, 0x8 +.L_00006A84: +/* 00006A84 00013814 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00006A88 00013818 41 82 6A A0 */ beq Construct__11CDActionIcePQ28CameraAI8Director +/* 00006A8C 0001381C 81 3C 00 0C */ lwz r9, 0xc(r28) +.L_00006A90: +/* 00006A90 00013820 88 09 00 00 */ lbz r0, 0x0(r9) +/* 00006A94 00013824 21 60 00 00 */ subfic r11, r0, 0x0 +/* 00006A98 00013828 7F CB 01 14 */ adde r30, r11, r0 +/* 00006A9C 0001382C 48 00 6A A4 */ b .L_0000D540 +/* 00006AA0 00013830 3B C0 00 01 */ li r30, 0x1 +/* 00006AA4 00013834 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 00006AA8 00013838 40 82 6B 14 */ bne .L_0000D5BC +/* 00006AAC 0001383C 80 1C 00 08 */ lwz r0, 0x8(r28) +/* 00006AB0 00013840 3B A1 00 08 */ addi r29, r1, 0x8 +/* 00006AB4 00013844 7F A3 EB 78 */ mr r3, r29 +/* 00006AB8 00013848 7F E4 FB 78 */ mr r4, r31 +/* 00006ABC 0001384C 90 01 00 08 */ stw r0, 0x8(r1) +/* 00006AC0 00013850 48 00 00 01 */ bl CreateInstance__Q33UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32G6UCrc32PQ28CameraAI8Director +/* 00006AC4 00013854 7C 7B 1B 79 */ mr. r27, r3 +/* 00006AC8 00013858 41 82 6B 14 */ beq .L_0000D5DC +/* 00006ACC 0001385C 3D 20 00 00 */ lis r9, .rodata+0x790@ha +/* 00006AD0 00013860 93 DF 02 BC */ stw r30, 0x2bc(r31) +/* 00006AD4 00013864 C0 09 07 90 */ lfs f0, .rodata+0x790@l(r9) +/* 00006AD8 00013868 7F E3 FB 78 */ mr r3, r31 +/* 00006ADC 0001386C D0 1F 02 C0 */ stfs f0, 0x2c0(r31) +/* 00006AE0 00013870 48 00 5F 29 */ bl .L_0000CA08 +/* 00006AE4 00013874 93 7F 00 18 */ stw r27, 0x18(r31) +.L_00006AE8: +/* 00006AE8 00013878 7F A3 EB 78 */ mr r3, r29 +/* 00006AEC 0001387C 81 3F 00 08 */ lwz r9, 0x8(r31) +/* 00006AF0 00013880 81 5F 00 0C */ lwz r10, 0xc(r31) +.L_00006AF4: +/* 00006AF4 00013884 80 1C 00 08 */ lwz r0, 0x8(r28) +/* 00006AF8 00013888 91 21 00 08 */ stw r9, 0x8(r1) +/* 00006AFC 0001388C 91 41 00 0C */ stw r10, 0xc(r1) +/* 00006B00 00013890 81 7F 00 14 */ lwz r11, 0x14(r31) +/* 00006B04 00013894 90 1D 00 08 */ stw r0, 0x8(r29) +/* 00006B08 00013898 80 9F 00 04 */ lwz r4, 0x4(r31) +/* 00006B0C 0001389C 91 61 00 14 */ stw r11, 0x14(r1) +.L_00006B10: +/* 00006B10 000138A0 48 00 00 01 */ bl SetNewSndCamAction__FGQ26Attrib9StringKey8EVIEW_ID +/* 00006B14 000138A4 80 01 00 B4 */ lwz r0, 0xb4(r1) +/* 00006B18 000138A8 7C 08 03 A6 */ mtlr r0 +/* 00006B1C 000138AC BB 01 00 88 */ lmw r24, 0x88(r1) +/* 00006B20 000138B0 E3 E1 00 A8 */ psq_l f31, 0xa8(r1), 0, qr0 +/* 00006B24 000138B4 38 21 00 B0 */ addi r1, r1, 0xb0 +/* 00006B28 000138B8 4E 80 00 20 */ blr +.endfn SelectAction__Q28CameraAI8Director + +# .text:0x6B2C | size: 0xAC +# CameraAI::Director::TotaledStart +.fn TotaledStart__Q28CameraAI8Director, global +/* 00006B2C 000138BC 94 21 FF D8 */ stwu r1, -0x28(r1) +/* 00006B30 000138C0 7C 08 02 A6 */ mflr r0 +.L_00006B34: +/* 00006B34 000138C4 BF 81 00 18 */ stmw r28, 0x18(r1) +/* 00006B38 000138C8 90 01 00 2C */ stw r0, 0x2c(r1) +/* 00006B3C 000138CC 3F A0 00 00 */ lis r29, .rodata+0x798@ha +/* 00006B40 000138D0 7C 7E 1B 78 */ mr r30, r3 +/* 00006B44 000138D4 3B BD 07 98 */ addi r29, r29, .rodata+0x798@l +/* 00006B48 000138D8 3B 81 00 08 */ addi r28, r1, 0x8 +.L_00006B4C: +/* 00006B4C 000138DC 7F A3 EB 78 */ mr r3, r29 +/* 00006B50 000138E0 48 00 00 01 */ bl StringHash64__6AttribPCc +/* 00006B54 000138E4 90 61 00 08 */ stw r3, 0x8(r1) +/* 00006B58 000138E8 90 81 00 0C */ stw r4, 0xc(r1) +/* 00006B5C 000138EC 7F A3 EB 78 */ mr r3, r29 +/* 00006B60 000138F0 48 00 00 01 */ bl StringHash32__6AttribPCc +/* 00006B64 000138F4 90 7C 00 08 */ stw r3, 0x8(r28) +/* 00006B68 000138F8 39 1E 00 08 */ addi r8, r30, 0x8 +.L_00006B6C: +/* 00006B6C 000138FC 93 A1 00 14 */ stw r29, 0x14(r1) +/* 00006B70 00013900 3D 60 00 00 */ lis r11, .rodata+0x7A0@ha +/* 00006B74 00013904 81 21 00 08 */ lwz r9, 0x8(r1) +/* 00006B78 00013908 81 41 00 0C */ lwz r10, 0xc(r1) +/* 00006B7C 0001390C 7F C3 F3 78 */ mr r3, r30 +/* 00006B80 00013910 80 1C 00 08 */ lwz r0, 0x8(r28) +/* 00006B84 00013914 7F 84 E3 78 */ mr r4, r28 +/* 00006B88 00013918 93 BE 00 14 */ stw r29, 0x14(r30) +/* 00006B8C 0001391C 91 3E 00 08 */ stw r9, 0x8(r30) +/* 00006B90 00013920 91 5E 00 0C */ stw r10, 0xc(r30) +.L_00006B94: +/* 00006B94 00013924 90 08 00 08 */ stw r0, 0x8(r8) +/* 00006B98 00013928 C0 0B 07 A0 */ lfs f0, .rodata+0x7A0@l(r11) +/* 00006B9C 0001392C 81 3E 00 08 */ lwz r9, 0x8(r30) +/* 00006BA0 00013930 81 5E 00 0C */ lwz r10, 0xc(r30) +/* 00006BA4 00013934 D0 1E 02 B8 */ stfs f0, 0x2b8(r30) +/* 00006BA8 00013938 91 21 00 08 */ stw r9, 0x8(r1) +/* 00006BAC 0001393C 91 41 00 0C */ stw r10, 0xc(r1) +/* 00006BB0 00013940 80 08 00 08 */ lwz r0, 0x8(r8) +/* 00006BB4 00013944 81 7E 00 14 */ lwz r11, 0x14(r30) +/* 00006BB8 00013948 90 1C 00 08 */ stw r0, 0x8(r28) +/* 00006BBC 0001394C 91 61 00 14 */ stw r11, 0x14(r1) +/* 00006BC0 00013950 48 00 62 39 */ bl .L_0000CDF8 +/* 00006BC4 00013954 80 01 00 2C */ lwz r0, 0x2c(r1) +/* 00006BC8 00013958 7C 08 03 A6 */ mtlr r0 +/* 00006BCC 0001395C BB 81 00 18 */ lmw r28, 0x18(r1) +/* 00006BD0 00013960 38 21 00 28 */ addi r1, r1, 0x28 +/* 00006BD4 00013964 4E 80 00 20 */ blr +.endfn TotaledStart__Q28CameraAI8Director + +# .text:0x6BD8 | size: 0x1B4 +# CameraAI::Director::PursuitStart +.fn PursuitStart__Q28CameraAI8Director, global +/* 00006BD8 00013968 94 21 FF 60 */ stwu r1, -0xa0(r1) +/* 00006BDC 0001396C 7C 08 02 A6 */ mflr r0 +/* 00006BE0 00013970 BF 61 00 8C */ stmw r27, 0x8c(r1) +/* 00006BE4 00013974 90 01 00 A4 */ stw r0, 0xa4(r1) +.L_00006BE8: +/* 00006BE8 00013978 7C 7F 1B 78 */ mr r31, r3 +/* 00006BEC 0001397C 3D 20 00 00 */ lis r9, .rodata+0x7AC@ha +/* 00006BF0 00013980 C1 A9 07 AC */ lfs f13, .rodata+0x7AC@l(r9) +/* 00006BF4 00013984 C0 1F 02 B4 */ lfs f0, 0x2b4(r31) +/* 00006BF8 00013988 FC 00 68 00 */ fcmpu cr0, f0, f13 +.L_00006BFC: +/* 00006BFC 0001398C 41 81 6D 78 */ bgt .L_0000D974 +/* 00006C00 00013990 3D 20 00 00 */ lis r9, _Q25UMath7Vector4.kZero@ha +/* 00006C04 00013994 39 61 00 50 */ addi r11, r1, 0x50 +/* 00006C08 00013998 80 A9 00 00 */ lwz r5, _Q25UMath7Vector4.kZero@l(r9) +/* 00006C0C 0001399C 39 41 00 60 */ addi r10, r1, 0x60 +/* 00006C10 000139A0 39 29 00 00 */ addi r9, r9, _Q25UMath7Vector4.kZero@l +/* 00006C14 000139A4 38 E1 00 70 */ addi r7, r1, 0x70 +/* 00006C18 000139A8 80 C9 00 0C */ lwz r6, 0xc(r9) +/* 00006C1C 000139AC 3B 81 00 08 */ addi r28, r1, 0x8 +/* 00006C20 000139B0 81 09 00 04 */ lwz r8, 0x4(r9) +/* 00006C24 000139B4 38 61 00 80 */ addi r3, r1, 0x80 +/* 00006C28 000139B8 80 09 00 08 */ lwz r0, 0x8(r9) +/* 00006C2C 000139BC 3B C0 00 00 */ li r30, 0x0 +/* 00006C30 000139C0 90 A1 00 50 */ stw r5, 0x50(r1) +/* 00006C34 000139C4 3F A0 88 BF */ lis r29, 0x88bf +/* 00006C38 000139C8 90 CB 00 0C */ stw r6, 0xc(r11) +/* 00006C3C 000139CC 63 BD F8 34 */ ori r29, r29, 0xf834 +/* 00006C40 000139D0 91 0B 00 04 */ stw r8, 0x4(r11) +/* 00006C44 000139D4 3B 60 00 01 */ li r27, 0x1 +/* 00006C48 000139D8 90 0B 00 08 */ stw r0, 0x8(r11) +/* 00006C4C 000139DC 90 A1 00 60 */ stw r5, 0x60(r1) +/* 00006C50 000139E0 90 CA 00 0C */ stw r6, 0xc(r10) +/* 00006C54 000139E4 91 0A 00 04 */ stw r8, 0x4(r10) +/* 00006C58 000139E8 90 0A 00 08 */ stw r0, 0x8(r10) +.L_00006C5C: +/* 00006C5C 000139EC 90 A1 00 70 */ stw r5, 0x70(r1) +.L_00006C60: +/* 00006C60 000139F0 90 C7 00 0C */ stw r6, 0xc(r7) +/* 00006C64 000139F4 91 07 00 04 */ stw r8, 0x4(r7) +/* 00006C68 000139F8 90 07 00 08 */ stw r0, 0x8(r7) +/* 00006C6C 000139FC 48 00 00 01 */ bl _GetKind__15MGamePlayMoment +/* 00006C70 00013A00 80 01 00 80 */ lwz r0, 0x80(r1) +/* 00006C74 00013A04 39 60 00 48 */ li r11, 0x48 +/* 00006C78 00013A08 93 C1 00 0C */ stw r30, 0xc(r1) +/* 00006C7C 00013A0C 39 21 00 18 */ addi r9, r1, 0x18 +/* 00006C80 00013A10 90 01 00 08 */ stw r0, 0x8(r1) +/* 00006C84 00013A14 38 E1 00 28 */ addi r7, r1, 0x28 +.L_00006C88: +/* 00006C88 00013A18 91 7C 00 08 */ stw r11, 0x8(r28) +/* 00006C8C 00013A1C 38 C1 00 38 */ addi r6, r1, 0x38 +/* 00006C90 00013A20 93 C1 00 14 */ stw r30, 0x14(r1) +/* 00006C94 00013A24 3C 60 00 00 */ lis r3, .rodata+0x770@ha +/* 00006C98 00013A28 81 61 00 50 */ lwz r11, 0x50(r1) +/* 00006C9C 00013A2C 38 63 07 70 */ addi r3, r3, .rodata+0x770@l +/* 00006CA0 00013A30 81 41 00 54 */ lwz r10, 0x54(r1) +/* 00006CA4 00013A34 80 01 00 5C */ lwz r0, 0x5c(r1) +/* 00006CA8 00013A38 81 01 00 58 */ lwz r8, 0x58(r1) +/* 00006CAC 00013A3C 91 61 00 18 */ stw r11, 0x18(r1) +/* 00006CB0 00013A40 91 09 00 08 */ stw r8, 0x8(r9) +/* 00006CB4 00013A44 90 09 00 0C */ stw r0, 0xc(r9) +/* 00006CB8 00013A48 91 49 00 04 */ stw r10, 0x4(r9) +/* 00006CBC 00013A4C 81 61 00 60 */ lwz r11, 0x60(r1) +/* 00006CC0 00013A50 81 21 00 64 */ lwz r9, 0x64(r1) +/* 00006CC4 00013A54 81 41 00 68 */ lwz r10, 0x68(r1) +/* 00006CC8 00013A58 80 01 00 6C */ lwz r0, 0x6c(r1) +/* 00006CCC 00013A5C 91 61 00 28 */ stw r11, 0x28(r1) +/* 00006CD0 00013A60 90 07 00 0C */ stw r0, 0xc(r7) +/* 00006CD4 00013A64 91 27 00 04 */ stw r9, 0x4(r7) +/* 00006CD8 00013A68 91 47 00 08 */ stw r10, 0x8(r7) +/* 00006CDC 00013A6C 81 21 00 70 */ lwz r9, 0x70(r1) +/* 00006CE0 00013A70 81 61 00 74 */ lwz r11, 0x74(r1) +/* 00006CE4 00013A74 80 01 00 7C */ lwz r0, 0x7c(r1) +/* 00006CE8 00013A78 81 41 00 78 */ lwz r10, 0x78(r1) +/* 00006CEC 00013A7C 91 21 00 38 */ stw r9, 0x38(r1) +/* 00006CF0 00013A80 90 06 00 0C */ stw r0, 0xc(r6) +/* 00006CF4 00013A84 91 66 00 04 */ stw r11, 0x4(r6) +/* 00006CF8 00013A88 91 46 00 08 */ stw r10, 0x8(r6) +/* 00006CFC 00013A8C 93 A1 00 4C */ stw r29, 0x4c(r1) +/* 00006D00 00013A90 93 C1 00 48 */ stw r30, 0x48(r1) +.L_00006D04: +/* 00006D04 00013A94 48 00 00 01 */ bl stringhash32__FPCc +/* 00006D08 00013A98 7C 60 1B 78 */ mr r0, r3 +/* 00006D0C 00013A9C 90 01 00 0C */ stw r0, 0xc(r1) +/* 00006D10 00013AA0 7F 83 E3 78 */ mr r3, r28 +/* 00006D14 00013AA4 90 01 00 50 */ stw r0, 0x50(r1) +/* 00006D18 00013AA8 48 00 00 01 */ bl Deliver__Q26Hermes7Message +/* 00006D1C 00013AAC 38 61 00 20 */ addi r3, r1, 0x20 +/* 00006D20 00013AB0 48 00 00 01 */ bl _GetKind__10MMiscSound +/* 00006D24 00013AB4 80 01 00 20 */ lwz r0, 0x20(r1) +/* 00006D28 00013AB8 39 20 00 14 */ li r9, 0x14 +/* 00006D2C 00013ABC 93 C1 00 0C */ stw r30, 0xc(r1) +/* 00006D30 00013AC0 3C 60 00 00 */ lis r3, .rodata+0x7A4@ha +/* 00006D34 00013AC4 90 01 00 08 */ stw r0, 0x8(r1) +/* 00006D38 00013AC8 38 63 07 A4 */ addi r3, r3, .rodata+0x7A4@l +/* 00006D3C 00013ACC 91 3C 00 08 */ stw r9, 0x8(r28) +/* 00006D40 00013AD0 93 C1 00 14 */ stw r30, 0x14(r1) +/* 00006D44 00013AD4 93 61 00 18 */ stw r27, 0x18(r1) +/* 00006D48 00013AD8 48 00 00 01 */ bl stringhash32__FPCc +/* 00006D4C 00013ADC 7C 60 1B 78 */ mr r0, r3 +/* 00006D50 00013AE0 90 01 00 0C */ stw r0, 0xc(r1) +/* 00006D54 00013AE4 7F 83 E3 78 */ mr r3, r28 +/* 00006D58 00013AE8 90 01 00 20 */ stw r0, 0x20(r1) +/* 00006D5C 00013AEC 48 00 00 01 */ bl Deliver__Q26Hermes7Message +.L_00006D60: +/* 00006D60 00013AF0 3D 20 00 00 */ lis r9, .rodata+0x7B0@ha +/* 00006D64 00013AF4 3D 60 00 00 */ lis r11, .rodata+0x7B4@ha +/* 00006D68 00013AF8 C0 09 07 B0 */ lfs f0, .rodata+0x7B0@l(r9) +/* 00006D6C 00013AFC C1 AB 07 B4 */ lfs f13, .rodata+0x7B4@l(r11) +/* 00006D70 00013B00 D0 1F 02 B4 */ stfs f0, 0x2b4(r31) +/* 00006D74 00013B04 D1 BF 02 C0 */ stfs f13, 0x2c0(r31) +/* 00006D78 00013B08 80 01 00 A4 */ lwz r0, 0xa4(r1) +/* 00006D7C 00013B0C 7C 08 03 A6 */ mtlr r0 +/* 00006D80 00013B10 BB 61 00 8C */ lmw r27, 0x8c(r1) +/* 00006D84 00013B14 38 21 00 A0 */ addi r1, r1, 0xa0 +/* 00006D88 00013B18 4E 80 00 20 */ blr +.endfn PursuitStart__Q28CameraAI8Director + +# .text:0x6D8C | size: 0x88 +# FindPlayer(EVIEW_ID) +.fn FindPlayer__F8EVIEW_ID, global +/* 00006D8C 00013B1C 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 00006D90 00013B20 7C 08 02 A6 */ mflr r0 +/* 00006D94 00013B24 BF 81 00 08 */ stmw r28, 0x8(r1) +/* 00006D98 00013B28 90 01 00 1C */ stw r0, 0x1c(r1) +/* 00006D9C 00013B2C 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@ha +/* 00006DA0 00013B30 7C 7C 1B 78 */ mr r28, r3 +/* 00006DA4 00013B34 39 29 00 00 */ addi r9, r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@l +/* 00006DA8 00013B38 83 C9 00 30 */ lwz r30, 0x30(r9) +/* 00006DAC 00013B3C 7D 3D 4B 78 */ mr r29, r9 +.L_00006DB0: +/* 00006DB0 00013B40 80 1D 00 38 */ lwz r0, 0x38(r29) +/* 00006DB4 00013B44 81 3D 00 30 */ lwz r9, 0x30(r29) +/* 00006DB8 00013B48 54 00 10 3A */ slwi r0, r0, 2 +/* 00006DBC 00013B4C 7D 29 02 14 */ add r9, r9, r0 +/* 00006DC0 00013B50 7C 1E 48 00 */ cmpw r30, r9 +/* 00006DC4 00013B54 41 82 6D FC */ beq .L_0000DBC0 +/* 00006DC8 00013B58 83 FE 00 00 */ lwz r31, 0x0(r30) +/* 00006DCC 00013B5C 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 00006DD0 00013B60 A8 69 00 60 */ lha r3, 0x60(r9) +/* 00006DD4 00013B64 80 09 00 64 */ lwz r0, 0x64(r9) +/* 00006DD8 00013B68 7C 7F 1A 14 */ add r3, r31, r3 +/* 00006DDC 00013B6C 7C 08 03 A6 */ mtlr r0 +.L_00006DE0: +/* 00006DE0 00013B70 4E 80 00 21 */ blrl +/* 00006DE4 00013B74 7C 03 E0 00 */ cmpw r3, r28 +/* 00006DE8 00013B78 40 82 6D F4 */ bne .L_0000DBDC +/* 00006DEC 00013B7C 7F E3 FB 78 */ mr r3, r31 +/* 00006DF0 00013B80 48 00 6E 00 */ b .L_0000DBF0 +/* 00006DF4 00013B84 3B DE 00 04 */ addi r30, r30, 0x4 +/* 00006DF8 00013B88 48 00 6D B0 */ b .L_0000DBA8 +/* 00006DFC 00013B8C 38 60 00 00 */ li r3, 0x0 +/* 00006E00 00013B90 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 00006E04 00013B94 7C 08 03 A6 */ mtlr r0 +/* 00006E08 00013B98 BB 81 00 08 */ lmw r28, 0x8(r1) +.L_00006E0C: +/* 00006E0C 00013B9C 38 21 00 18 */ addi r1, r1, 0x18 +/* 00006E10 00013BA0 4E 80 00 20 */ blr +.endfn FindPlayer__F8EVIEW_ID + +# .text:0x6E14 | size: 0x44 +# FindDirector(EVIEW_ID) +.fn FindDirector__F8EVIEW_ID, global +/* 00006E14 00013BA4 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha +/* 00006E18 00013BA8 7C 6A 1B 78 */ mr r10, r3 +/* 00006E1C 00013BAC 39 69 00 00 */ addi r11, r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l +/* 00006E20 00013BB0 80 0B 00 08 */ lwz r0, 0x8(r11) +/* 00006E24 00013BB4 81 29 00 00 */ lwz r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r9) +/* 00006E28 00013BB8 54 00 10 3A */ slwi r0, r0, 2 +/* 00006E2C 00013BBC 7D 69 02 14 */ add r11, r9, r0 +/* 00006E30 00013BC0 7C 09 58 00 */ cmpw r9, r11 +/* 00006E34 00013BC4 41 82 6E 50 */ beq .L_0000DC84 +/* 00006E38 00013BC8 80 69 00 00 */ lwz r3, 0x0(r9) +/* 00006E3C 00013BCC 80 03 00 04 */ lwz r0, 0x4(r3) +/* 00006E40 00013BD0 7C 00 50 00 */ cmpw r0, r10 +/* 00006E44 00013BD4 4D 82 00 20 */ beqlr +/* 00006E48 00013BD8 39 29 00 04 */ addi r9, r9, 0x4 +/* 00006E4C 00013BDC 48 00 6E 30 */ b .L_0000DC7C +/* 00006E50 00013BE0 38 60 00 00 */ li r3, 0x0 +/* 00006E54 00013BE4 4E 80 00 20 */ blr +.endfn FindDirector__F8EVIEW_ID + +# .text:0x6E58 | size: 0xB8 +# FindDirector(unsigned int) +.fn FindDirector__FUi, global +/* 00006E58 00013BE8 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 00006E5C 00013BEC 7C 08 02 A6 */ mflr r0 +/* 00006E60 00013BF0 BF 61 00 0C */ stmw r27, 0xc(r1) +.L_00006E64: +/* 00006E64 00013BF4 90 01 00 24 */ stw r0, 0x24(r1) +/* 00006E68 00013BF8 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha +/* 00006E6C 00013BFC 3F A0 00 00 */ lis r29, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha +/* 00006E70 00013C00 83 E9 00 00 */ lwz r31, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r9) +/* 00006E74 00013C04 3B 7D 00 00 */ addi r27, r29, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l +/* 00006E78 00013C08 7C 7C 1B 78 */ mr r28, r3 +/* 00006E7C 00013C0C 80 1B 00 08 */ lwz r0, 0x8(r27) +/* 00006E80 00013C10 81 3D 00 00 */ lwz r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r29) +/* 00006E84 00013C14 54 00 10 3A */ slwi r0, r0, 2 +/* 00006E88 00013C18 7D 29 02 14 */ add r9, r9, r0 +/* 00006E8C 00013C1C 7C 1F 48 00 */ cmpw r31, r9 +/* 00006E90 00013C20 41 82 6E F8 */ beq .L_0000DD88 +/* 00006E94 00013C24 83 DF 00 00 */ lwz r30, 0x0(r31) +/* 00006E98 00013C28 80 7E 00 04 */ lwz r3, 0x4(r30) +.L_00006E9C: +/* 00006E9C 00013C2C 48 00 6D 8D */ bl .L_0000DC28 +/* 00006EA0 00013C30 7C 6B 1B 79 */ mr. r11, r3 +/* 00006EA4 00013C34 41 82 6E F0 */ beq .L_0000DD94 +/* 00006EA8 00013C38 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 00006EAC 00013C3C A8 69 00 10 */ lha r3, 0x10(r9) +/* 00006EB0 00013C40 80 09 00 14 */ lwz r0, 0x14(r9) +/* 00006EB4 00013C44 7C 6B 1A 14 */ add r3, r11, r3 +/* 00006EB8 00013C48 7C 08 03 A6 */ mtlr r0 +/* 00006EBC 00013C4C 4E 80 00 21 */ blrl +/* 00006EC0 00013C50 7C 6B 1B 79 */ mr. r11, r3 +/* 00006EC4 00013C54 41 82 6E F0 */ beq .L_0000DDB4 +/* 00006EC8 00013C58 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 00006ECC 00013C5C A8 69 00 E8 */ lha r3, 0xe8(r9) +/* 00006ED0 00013C60 80 09 00 EC */ lwz r0, 0xec(r9) +/* 00006ED4 00013C64 7C 6B 1A 14 */ add r3, r11, r3 +/* 00006ED8 00013C68 7C 08 03 A6 */ mtlr r0 +/* 00006EDC 00013C6C 4E 80 00 21 */ blrl +/* 00006EE0 00013C70 7C 03 E0 00 */ cmpw r3, r28 +/* 00006EE4 00013C74 40 82 6E F0 */ bne .L_0000DDD4 +/* 00006EE8 00013C78 7F C3 F3 78 */ mr r3, r30 +/* 00006EEC 00013C7C 48 00 6E FC */ b .L_0000DDE8 +/* 00006EF0 00013C80 3B FF 00 04 */ addi r31, r31, 0x4 +.L_00006EF4: +/* 00006EF4 00013C84 48 00 6E 7C */ b .L_0000DD70 +/* 00006EF8 00013C88 38 60 00 00 */ li r3, 0x0 +/* 00006EFC 00013C8C 80 01 00 24 */ lwz r0, 0x24(r1) +/* 00006F00 00013C90 7C 08 03 A6 */ mtlr r0 +/* 00006F04 00013C94 BB 61 00 0C */ lmw r27, 0xc(r1) +/* 00006F08 00013C98 38 21 00 20 */ addi r1, r1, 0x20 +/* 00006F0C 00013C9C 4E 80 00 20 */ blr +.endfn FindDirector__FUi + +# .text:0x6F10 | size: 0x54 +# AreMomentCamerasEnabled() +.fn AreMomentCamerasEnabled__Fv, global +/* 00006F10 00013CA0 3D 20 00 00 */ lis r9, FEDatabase@ha +/* 00006F14 00013CA4 38 00 00 00 */ li r0, 0x0 +/* 00006F18 00013CA8 81 69 00 00 */ lwz r11, FEDatabase@l(r9) +/* 00006F1C 00013CAC 81 2B 01 C0 */ lwz r9, 0x1c0(r11) +/* 00006F20 00013CB0 71 2A 00 04 */ andi. r10, r9, 0x4 +/* 00006F24 00013CB4 41 82 6F 38 */ beq .L_0000DE5C +/* 00006F28 00013CB8 88 0B 00 00 */ lbz r0, 0x0(r11) +/* 00006F2C 00013CBC 68 00 00 02 */ xori r0, r0, 0x2 +/* 00006F30 00013CC0 21 40 00 00 */ subfic r10, r0, 0x0 +/* 00006F34 00013CC4 7C 0A 01 14 */ adde r0, r10, r0 +/* 00006F38 00013CC8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00006F3C 00013CCC 41 82 6F 48 */ beq .L_0000DE84 +/* 00006F40 00013CD0 38 60 00 00 */ li r3, 0x0 +/* 00006F44 00013CD4 4E 80 00 20 */ blr +.L_00006F48: +/* 00006F48 00013CD8 71 20 00 40 */ andi. r0, r9, 0x40 +/* 00006F4C 00013CDC 40 82 6F 40 */ bne .L_0000DE8C +/* 00006F50 00013CE0 71 2A 00 08 */ andi. r10, r9, 0x8 +/* 00006F54 00013CE4 40 82 6F 40 */ bne .L_0000DE94 +/* 00006F58 00013CE8 81 2B 00 20 */ lwz r9, 0x20(r11) +/* 00006F5C 00013CEC 80 69 00 50 */ lwz r3, 0x50(r9) +/* 00006F60 00013CF0 4E 80 00 20 */ blr +.endfn AreMomentCamerasEnabled__Fv + +# .text:0x6F64 | size: 0xF4 +.fn Update__8CameraAIf, global +/* 00006F64 00013CF4 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 00006F68 00013CF8 7C 08 02 A6 */ mflr r0 +.L_00006F6C: +/* 00006F6C 00013CFC F3 E1 00 18 */ psq_st f31, 0x18(r1), 0, qr0 +/* 00006F70 00013D00 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 00006F74 00013D04 90 01 00 24 */ stw r0, 0x24(r1) +/* 00006F78 00013D08 FF E0 08 90 */ fmr f31, f1 +/* 00006F7C 00013D0C 38 60 00 01 */ li r3, 0x1 +/* 00006F80 00013D10 48 00 00 01 */ bl Count__Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi311ePlayerList +/* 00006F84 00013D14 3B C0 00 00 */ li r30, 0x0 +/* 00006F88 00013D18 3F A0 00 00 */ lis r29, gFastMem@ha +/* 00006F8C 00013D1C 3B DE 00 01 */ addi r30, r30, 0x1 +/* 00006F90 00013D20 7F C3 F3 78 */ mr r3, r30 +/* 00006F94 00013D24 48 00 6D 8D */ bl .L_0000DD20 +/* 00006F98 00013D28 7C 7F 1B 78 */ mr r31, r3 +/* 00006F9C 00013D2C 7F C3 F3 78 */ mr r3, r30 +/* 00006FA0 00013D30 48 00 6E 15 */ bl .L_0000DDB4 +/* 00006FA4 00013D34 7C 6B 1B 79 */ mr. r11, r3 +/* 00006FA8 00013D38 41 82 6F D4 */ beq .L_0000DF7C +/* 00006FAC 00013D3C 2C 1F 00 00 */ cmpwi r31, 0x0 +/* 00006FB0 00013D40 40 82 6F DC */ bne .L_0000DF8C +/* 00006FB4 00013D44 81 2B 02 C4 */ lwz r9, 0x2c4(r11) +/* 00006FB8 00013D48 38 80 00 03 */ li r4, 0x3 +/* 00006FBC 00013D4C A8 69 00 08 */ lha r3, 0x8(r9) +/* 00006FC0 00013D50 80 09 00 0C */ lwz r0, 0xc(r9) +/* 00006FC4 00013D54 7C 6B 1A 14 */ add r3, r11, r3 +/* 00006FC8 00013D58 7C 08 03 A6 */ mtlr r0 +/* 00006FCC 00013D5C 4E 80 00 21 */ blrl +/* 00006FD0 00013D60 48 00 6F FC */ b .L_0000DFCC +/* 00006FD4 00013D64 2C 1F 00 00 */ cmpwi r31, 0x0 +.L_00006FD8: +/* 00006FD8 00013D68 41 82 6F FC */ beq .L_0000DFD4 +/* 00006FDC 00013D6C 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00006FE0 00013D70 40 82 6F FC */ bne .L_0000DFDC +.L_00006FE4: +/* 00006FE4 00013D74 38 80 02 C8 */ li r4, 0x2c8 +/* 00006FE8 00013D78 38 7D 00 00 */ addi r3, r29, gFastMem@l +/* 00006FEC 00013D7C 38 A0 00 00 */ li r5, 0x0 +/* 00006FF0 00013D80 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 00006FF4 00013D84 7F C4 F3 78 */ mr r4, r30 +/* 00006FF8 00013D88 48 00 5B CD */ bl .L_0000CBC4 +/* 00006FFC 00013D8C 28 1E 00 01 */ cmplwi r30, 0x1 +/* 00007000 00013D90 40 81 6F 8C */ ble .L_0000DF8C +/* 00007004 00013D94 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha +/* 00007008 00013D98 3F C0 00 00 */ lis r30, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha +/* 0000700C 00013D9C 83 E9 00 00 */ lwz r31, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r9) +/* 00007010 00013DA0 3B BE 00 00 */ addi r29, r30, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l +/* 00007014 00013DA4 80 1D 00 08 */ lwz r0, 0x8(r29) +/* 00007018 00013DA8 81 3E 00 00 */ lwz r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r30) +/* 0000701C 00013DAC 54 00 10 3A */ slwi r0, r0, 2 +/* 00007020 00013DB0 7D 29 02 14 */ add r9, r9, r0 +/* 00007024 00013DB4 7C 1F 48 00 */ cmpw r31, r9 +/* 00007028 00013DB8 41 82 70 40 */ beq .L_0000E068 +/* 0000702C 00013DBC 80 7F 00 00 */ lwz r3, 0x0(r31) +/* 00007030 00013DC0 FC 20 F8 90 */ fmr f1, f31 +.L_00007034: +/* 00007034 00013DC4 3B FF 00 04 */ addi r31, r31, 0x4 +/* 00007038 00013DC8 48 00 60 CD */ bl .L_0000D104 +/* 0000703C 00013DCC 48 00 70 14 */ b .L_0000E050 +.L_00007040: +/* 00007040 00013DD0 80 01 00 24 */ lwz r0, 0x24(r1) +/* 00007044 00013DD4 7C 08 03 A6 */ mtlr r0 +/* 00007048 00013DD8 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 0000704C 00013DDC E3 E1 00 18 */ psq_l f31, 0x18(r1), 0, qr0 +/* 00007050 00013DE0 38 21 00 20 */ addi r1, r1, 0x20 +/* 00007054 00013DE4 4E 80 00 20 */ blr +.endfn Update__8CameraAIf + +# .text:0x7058 | size: 0x5C +.fn Reset__8CameraAIv, global +/* 00007058 00013DE8 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0000705C 00013DEC 7C 08 02 A6 */ mflr r0 +/* 00007060 00013DF0 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 00007064 00013DF4 90 01 00 1C */ stw r0, 0x1c(r1) +/* 00007068 00013DF8 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha +/* 0000706C 00013DFC 3F C0 00 00 */ lis r30, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha +/* 00007070 00013E00 83 E9 00 00 */ lwz r31, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r9) +/* 00007074 00013E04 3B BE 00 00 */ addi r29, r30, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l +/* 00007078 00013E08 80 1D 00 08 */ lwz r0, 0x8(r29) +/* 0000707C 00013E0C 81 3E 00 00 */ lwz r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r30) +/* 00007080 00013E10 54 00 10 3A */ slwi r0, r0, 2 +/* 00007084 00013E14 7D 29 02 14 */ add r9, r9, r0 +/* 00007088 00013E18 7C 1F 48 00 */ cmpw r31, r9 +/* 0000708C 00013E1C 41 82 70 A0 */ beq .L_0000E12C +/* 00007090 00013E20 80 7F 00 00 */ lwz r3, 0x0(r31) +/* 00007094 00013E24 3B FF 00 04 */ addi r31, r31, 0x4 +/* 00007098 00013E28 48 00 5F 81 */ bl .L_0000D018 +/* 0000709C 00013E2C 48 00 70 78 */ b .L_0000E114 +/* 000070A0 00013E30 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 000070A4 00013E34 7C 08 03 A6 */ mtlr r0 +/* 000070A8 00013E38 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 000070AC 00013E3C 38 21 00 18 */ addi r1, r1, 0x18 +/* 000070B0 00013E40 4E 80 00 20 */ blr +.endfn Reset__8CameraAIv + +# .text:0x70B4 | size: 0x9C +.fn SetAction__8CameraAI8EVIEW_IDPCc, global +/* 000070B4 00013E44 94 21 FF C8 */ stwu r1, -0x38(r1) +/* 000070B8 00013E48 7C 08 02 A6 */ mflr r0 +/* 000070BC 00013E4C BF 21 00 1C */ stmw r25, 0x1c(r1) +.L_000070C0: +/* 000070C0 00013E50 90 01 00 3C */ stw r0, 0x3c(r1) +/* 000070C4 00013E54 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha +/* 000070C8 00013E58 3F 60 00 00 */ lis r27, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha +/* 000070CC 00013E5C 83 C9 00 00 */ lwz r30, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r9) +.L_000070D0: +/* 000070D0 00013E60 3B 3B 00 00 */ addi r25, r27, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l +/* 000070D4 00013E64 7C 7A 1B 78 */ mr r26, r3 +/* 000070D8 00013E68 7C 9D 23 78 */ mr r29, r4 +/* 000070DC 00013E6C 3B 81 00 08 */ addi r28, r1, 0x8 +/* 000070E0 00013E70 80 19 00 08 */ lwz r0, 0x8(r25) +/* 000070E4 00013E74 81 3B 00 00 */ lwz r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r27) +/* 000070E8 00013E78 54 00 10 3A */ slwi r0, r0, 2 +/* 000070EC 00013E7C 7D 29 02 14 */ add r9, r9, r0 +/* 000070F0 00013E80 7C 1E 48 00 */ cmpw r30, r9 +/* 000070F4 00013E84 41 82 71 3C */ beq .L_0000E230 +/* 000070F8 00013E88 83 FE 00 00 */ lwz r31, 0x0(r30) +/* 000070FC 00013E8C 80 1F 00 04 */ lwz r0, 0x4(r31) +/* 00007100 00013E90 7C 00 D0 00 */ cmpw r0, r26 +/* 00007104 00013E94 40 82 71 34 */ bne .L_0000E238 +/* 00007108 00013E98 7F A3 EB 78 */ mr r3, r29 +/* 0000710C 00013E9C 48 00 00 01 */ bl StringHash64__6AttribPCc +/* 00007110 00013EA0 90 61 00 08 */ stw r3, 0x8(r1) +/* 00007114 00013EA4 90 81 00 0C */ stw r4, 0xc(r1) +/* 00007118 00013EA8 7F A3 EB 78 */ mr r3, r29 +/* 0000711C 00013EAC 48 00 00 01 */ bl StringHash32__6AttribPCc +/* 00007120 00013EB0 90 7C 00 08 */ stw r3, 0x8(r28) +/* 00007124 00013EB4 7F 84 E3 78 */ mr r4, r28 +/* 00007128 00013EB8 7F E3 FB 78 */ mr r3, r31 +/* 0000712C 00013EBC 93 A1 00 14 */ stw r29, 0x14(r1) +/* 00007130 00013EC0 48 00 62 39 */ bl .L_0000D368 +/* 00007134 00013EC4 3B DE 00 04 */ addi r30, r30, 0x4 +.L_00007138: +/* 00007138 00013EC8 48 00 70 E0 */ b .L_0000E218 +/* 0000713C 00013ECC 80 01 00 3C */ lwz r0, 0x3c(r1) +/* 00007140 00013ED0 7C 08 03 A6 */ mtlr r0 +/* 00007144 00013ED4 BB 21 00 1C */ lmw r25, 0x1c(r1) +/* 00007148 00013ED8 38 21 00 38 */ addi r1, r1, 0x38 +/* 0000714C 00013EDC 4E 80 00 20 */ blr +.endfn SetAction__8CameraAI8EVIEW_IDPCc + +# .text:0x7150 | size: 0x2C +.fn MaybeKillPursuitCam__8CameraAIUi, global +/* 00007150 00013EE0 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 00007154 00013EE4 7C 08 02 A6 */ mflr r0 +/* 00007158 00013EE8 90 01 00 0C */ stw r0, 0xc(r1) +/* 0000715C 00013EEC 48 00 6E 59 */ bl .L_0000DFB4 +/* 00007160 00013EF0 7C 63 1B 79 */ mr. r3, r3 +/* 00007164 00013EF4 41 82 71 6C */ beq .L_0000E2D0 +/* 00007168 00013EF8 48 00 60 5D */ bl .L_0000D1C4 +/* 0000716C 00013EFC 80 01 00 0C */ lwz r0, 0xc(r1) +/* 00007170 00013F00 7C 08 03 A6 */ mtlr r0 +/* 00007174 00013F04 38 21 00 08 */ addi r1, r1, 0x8 +/* 00007178 00013F08 4E 80 00 20 */ blr +.endfn MaybeKillPursuitCam__8CameraAIUi + +# .text:0x717C | size: 0x7F4 +.fn AverageAir__FP8ISimablefPfT2, local +/* 0000717C 00013F0C 94 21 FD F0 */ stwu r1, -0x210(r1) +/* 00007180 00013F10 7C 08 02 A6 */ mflr r0 +/* 00007184 00013F14 F3 01 01 D0 */ psq_st f24, 0x1d0(r1), 0, qr0 +/* 00007188 00013F18 F3 21 01 D8 */ psq_st f25, 0x1d8(r1), 0, qr0 +/* 0000718C 00013F1C F3 41 01 E0 */ psq_st f26, 0x1e0(r1), 0, qr0 +/* 00007190 00013F20 F3 61 01 E8 */ psq_st f27, 0x1e8(r1), 0, qr0 +/* 00007194 00013F24 F3 81 01 F0 */ psq_st f28, 0x1f0(r1), 0, qr0 +/* 00007198 00013F28 F3 A1 01 F8 */ psq_st f29, 0x1f8(r1), 0, qr0 +/* 0000719C 00013F2C F3 C1 02 00 */ psq_st f30, 0x200(r1), 0, qr0 +/* 000071A0 00013F30 F3 E1 02 08 */ psq_st f31, 0x208(r1), 0, qr0 +/* 000071A4 00013F34 BD C1 01 88 */ stmw r14, 0x188(r1) +/* 000071A8 00013F38 90 01 02 14 */ stw r0, 0x214(r1) +/* 000071AC 00013F3C 7C 7B 1B 78 */ mr r27, r3 +.L_000071B0: +/* 000071B0 00013F40 FF C0 08 90 */ fmr f30, f1 +/* 000071B4 00013F44 81 3B 00 04 */ lwz r9, 0x4(r27) +/* 000071B8 00013F48 90 81 01 68 */ stw r4, 0x168(r1) +/* 000071BC 00013F4C 90 A1 01 6C */ stw r5, 0x16c(r1) +/* 000071C0 00013F50 A8 69 00 A8 */ lha r3, 0xa8(r9) +/* 000071C4 00013F54 80 09 00 AC */ lwz r0, 0xac(r9) +/* 000071C8 00013F58 7C 7B 1A 14 */ add r3, r27, r3 +/* 000071CC 00013F5C 7C 08 03 A6 */ mtlr r0 +/* 000071D0 00013F60 4E 80 00 21 */ blrl +/* 000071D4 00013F64 7C 76 1B 79 */ mr. r22, r3 +/* 000071D8 00013F68 41 82 72 A8 */ beq .L_0000E480 +/* 000071DC 00013F6C 3C 80 00 00 */ lis r4, _IHandle__14ICollisionBody@ha +/* 000071E0 00013F70 80 7B 00 00 */ lwz r3, 0x0(r27) +/* 000071E4 00013F74 38 84 00 00 */ addi r4, r4, _IHandle__14ICollisionBody@l +/* 000071E8 00013F78 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 000071EC 00013F7C 7C 7A 1B 79 */ mr. r26, r3 +/* 000071F0 00013F80 38 00 00 01 */ li r0, 0x1 +/* 000071F4 00013F84 40 82 71 FC */ bne .L_0000E3F0 +/* 000071F8 00013F88 38 00 00 00 */ li r0, 0x0 +/* 000071FC 00013F8C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00007200 00013F90 41 82 72 A8 */ beq .L_0000E4A8 +/* 00007204 00013F94 81 36 00 04 */ lwz r9, 0x4(r22) +/* 00007208 00013F98 A8 69 00 60 */ lha r3, 0x60(r9) +/* 0000720C 00013F9C 80 09 00 64 */ lwz r0, 0x64(r9) +/* 00007210 00013FA0 7C 76 1A 14 */ add r3, r22, r3 +/* 00007214 00013FA4 7C 08 03 A6 */ mtlr r0 +/* 00007218 00013FA8 4E 80 00 21 */ blrl +/* 0000721C 00013FAC 3D 20 00 00 */ lis r9, .rodata+0x7BC@ha +/* 00007220 00013FB0 FF E0 08 90 */ fmr f31, f1 +/* 00007224 00013FB4 C0 09 07 BC */ lfs f0, .rodata+0x7BC@l(r9) +/* 00007228 00013FB8 FC 1F 00 00 */ fcmpu cr0, f31, f0 +/* 0000722C 00013FBC 41 80 72 A8 */ blt .L_0000E4D4 +/* 00007230 00013FC0 3D 20 00 00 */ lis r9, .rodata+0x7C0@ha +/* 00007234 00013FC4 EC 1F 07 B2 */ fmuls f0, f31, f30 +/* 00007238 00013FC8 C1 89 07 C0 */ lfs f12, .rodata+0x7C0@l(r9) +/* 0000723C 00013FCC EC 00 03 32 */ fmuls f0, f0, f12 +/* 00007240 00013FD0 FD A0 00 1E */ fctiwz f13, f0 +/* 00007244 00013FD4 D9 A1 01 80 */ stfd f13, 0x180(r1) +/* 00007248 00013FD8 82 01 01 84 */ lwz r16, 0x184(r1) +/* 0000724C 00013FDC 2C 10 00 00 */ cmpwi r16, 0x0 +.L_00007250: +/* 00007250 00013FE0 40 81 72 A8 */ ble .L_0000E4F8 +/* 00007254 00013FE4 3C 80 00 00 */ lis r4, _IHandle__11ISuspension@ha +/* 00007258 00013FE8 80 7B 00 00 */ lwz r3, 0x0(r27) +/* 0000725C 00013FEC 38 84 00 00 */ addi r4, r4, _IHandle__11ISuspension@l +/* 00007260 00013FF0 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 00007264 00013FF4 7C 7F 1B 79 */ mr. r31, r3 +.L_00007268: +/* 00007268 00013FF8 38 00 00 01 */ li r0, 0x1 +/* 0000726C 00013FFC 40 82 72 74 */ bne .L_0000E4E0 +.L_00007270: +/* 00007270 00014000 38 00 00 00 */ li r0, 0x0 +/* 00007274 00014004 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00007278 00014008 41 82 72 A8 */ beq .L_0000E520 +.L_0000727C: +/* 0000727C 0001400C 3C 80 00 00 */ lis r4, _IHandle__8IVehicle@ha +/* 00007280 00014010 80 7B 00 00 */ lwz r3, 0x0(r27) +/* 00007284 00014014 38 84 00 00 */ addi r4, r4, _IHandle__8IVehicle@l +/* 00007288 00014018 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000728C 0001401C 7C 69 1B 79 */ mr. r9, r3 +.L_00007290: +/* 00007290 00014020 38 00 00 01 */ li r0, 0x1 +/* 00007294 00014024 91 21 01 70 */ stw r9, 0x170(r1) +/* 00007298 00014028 40 82 72 A0 */ bne .L_0000E538 +/* 0000729C 0001402C 38 00 00 00 */ li r0, 0x0 +/* 000072A0 00014030 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000072A4 00014034 40 82 72 B4 */ bne .L_0000E558 +/* 000072A8 00014038 3D 20 00 00 */ lis r9, .rodata+0x7B8@ha +/* 000072AC 0001403C C0 29 07 B8 */ lfs f1, .rodata+0x7B8@l(r9) +/* 000072B0 00014040 48 00 79 3C */ b .L_0000EBEC +/* 000072B4 00014044 3D 20 00 00 */ lis r9, _Q25UMath7Vector3.kZero@ha +/* 000072B8 00014048 39 61 00 08 */ addi r11, r1, 0x8 +/* 000072BC 0001404C 81 49 00 00 */ lwz r10, _Q25UMath7Vector3.kZero@l(r9) +/* 000072C0 00014050 3B 80 00 00 */ li r28, 0x0 +.L_000072C4: +/* 000072C4 00014054 39 29 00 00 */ addi r9, r9, _Q25UMath7Vector3.kZero@l +.L_000072C8: +/* 000072C8 00014058 81 09 00 08 */ lwz r8, 0x8(r9) +/* 000072CC 0001405C 80 09 00 04 */ lwz r0, 0x4(r9) +/* 000072D0 00014060 91 41 00 08 */ stw r10, 0x8(r1) +/* 000072D4 00014064 90 0B 00 04 */ stw r0, 0x4(r11) +/* 000072D8 00014068 91 0B 00 08 */ stw r8, 0x8(r11) +/* 000072DC 0001406C 7D 74 5B 78 */ mr r20, r11 +/* 000072E0 00014070 39 61 01 08 */ addi r11, r1, 0x108 +/* 000072E4 00014074 38 01 00 78 */ addi r0, r1, 0x78 +/* 000072E8 00014078 3A 61 00 28 */ addi r19, r1, 0x28 +/* 000072EC 0001407C 3B 01 00 38 */ addi r24, r1, 0x38 +/* 000072F0 00014080 39 C1 00 90 */ addi r14, r1, 0x90 +/* 000072F4 00014084 3A E1 00 A8 */ addi r23, r1, 0xa8 +/* 000072F8 00014088 3A 21 00 F8 */ addi r17, r1, 0xf8 +/* 000072FC 0001408C 3A A1 00 C8 */ addi r21, r1, 0xc8 +/* 00007300 00014090 3B 21 00 E8 */ addi r25, r1, 0xe8 +/* 00007304 00014094 3A 41 00 D8 */ addi r18, r1, 0xd8 +/* 00007308 00014098 39 E1 01 60 */ addi r15, r1, 0x160 +/* 0000730C 0001409C 91 61 01 74 */ stw r11, 0x174(r1) +/* 00007310 000140A0 90 01 01 78 */ stw r0, 0x178(r1) +/* 00007314 000140A4 48 00 73 B8 */ b .L_0000E6CC +/* 00007318 000140A8 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 0000731C 000140AC 7F 84 E3 78 */ mr r4, r28 +/* 00007320 000140B0 3B C1 00 18 */ addi r30, r1, 0x18 +/* 00007324 000140B4 80 09 00 24 */ lwz r0, 0x24(r9) +/* 00007328 000140B8 A8 69 00 20 */ lha r3, 0x20(r9) +/* 0000732C 000140BC 7C 08 03 A6 */ mtlr r0 +/* 00007330 000140C0 7C 7F 1A 14 */ add r3, r31, r3 +/* 00007334 000140C4 4E 80 00 21 */ blrl +/* 00007338 000140C8 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0000733C 000140CC 81 63 00 08 */ lwz r11, 0x8(r3) +/* 00007340 000140D0 80 03 00 04 */ lwz r0, 0x4(r3) +/* 00007344 000140D4 91 21 00 18 */ stw r9, 0x18(r1) +/* 00007348 000140D8 91 7E 00 08 */ stw r11, 0x8(r30) +/* 0000734C 000140DC 90 1E 00 04 */ stw r0, 0x4(r30) +/* 00007350 000140E0 81 3A 00 04 */ lwz r9, 0x4(r26) +/* 00007354 000140E4 80 09 01 4C */ lwz r0, 0x14c(r9) +/* 00007358 000140E8 A8 69 01 48 */ lha r3, 0x148(r9) +/* 0000735C 000140EC 7C 08 03 A6 */ mtlr r0 +/* 00007360 000140F0 7C 7A 1A 14 */ add r3, r26, r3 +/* 00007364 000140F4 4E 80 00 21 */ blrl +/* 00007368 000140F8 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 0000736C 000140FC 7C 7D 1B 78 */ mr r29, r3 +/* 00007370 00014100 7F 84 E3 78 */ mr r4, r28 +/* 00007374 00014104 A8 69 00 58 */ lha r3, 0x58(r9) +/* 00007378 00014108 3B 9C 00 01 */ addi r28, r28, 0x1 +/* 0000737C 0001410C 80 09 00 5C */ lwz r0, 0x5c(r9) +/* 00007380 00014110 7C 7F 1A 14 */ add r3, r31, r3 +/* 00007384 00014114 7C 08 03 A6 */ mtlr r0 +/* 00007388 00014118 4E 80 00 21 */ blrl +/* 0000738C 0001411C 7F A3 EB 78 */ mr r3, r29 +/* 00007390 00014120 FC 20 08 50 */ fneg f1, f1 +/* 00007394 00014124 7F C4 F3 78 */ mr r4, r30 +/* 00007398 00014128 7F C5 F3 78 */ mr r5, r30 +/* 0000739C 0001412C 48 00 00 01 */ bl VU0_v3scaleadd__FRCQ25UMath7Vector3fT0RQ25UMath7Vector3 +/* 000073A0 00014130 3D 20 00 00 */ lis r9, .rodata+0x7C4@ha +/* 000073A4 00014134 7F C3 F3 78 */ mr r3, r30 +/* 000073A8 00014138 C0 29 07 C4 */ lfs f1, .rodata+0x7C4@l(r9) +/* 000073AC 0001413C 7E 84 A3 78 */ mr r4, r20 +/* 000073B0 00014140 7E 85 A3 78 */ mr r5, r20 +/* 000073B4 00014144 48 00 00 01 */ bl VU0_v3scaleadd__FRCQ25UMath7Vector3fT0RQ25UMath7Vector3 +/* 000073B8 00014148 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 000073BC 0001414C A8 69 00 18 */ lha r3, 0x18(r9) +/* 000073C0 00014150 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 000073C4 00014154 7C 7F 1A 14 */ add r3, r31, r3 +/* 000073C8 00014158 7C 08 03 A6 */ mtlr r0 +/* 000073CC 0001415C 4E 80 00 21 */ blrl +/* 000073D0 00014160 7C 1C 18 40 */ cmplw r28, r3 +/* 000073D4 00014164 41 80 73 18 */ blt .L_0000E6EC +.L_000073D8: +/* 000073D8 00014168 81 3A 00 04 */ lwz r9, 0x4(r26) +/* 000073DC 0001416C 80 09 01 0C */ lwz r0, 0x10c(r9) +/* 000073E0 00014170 A8 69 01 08 */ lha r3, 0x108(r9) +/* 000073E4 00014174 7C 08 03 A6 */ mtlr r0 +/* 000073E8 00014178 7C 7A 1A 14 */ add r3, r26, r3 +/* 000073EC 0001417C 4E 80 00 21 */ blrl +/* 000073F0 00014180 81 63 00 00 */ lwz r11, 0x0(r3) +/* 000073F4 00014184 81 1B 00 04 */ lwz r8, 0x4(r27) +/* 000073F8 00014188 81 43 00 0C */ lwz r10, 0xc(r3) +/* 000073FC 0001418C 80 03 00 04 */ lwz r0, 0x4(r3) +/* 00007400 00014190 81 23 00 08 */ lwz r9, 0x8(r3) +/* 00007404 00014194 91 61 00 28 */ stw r11, 0x28(r1) +/* 00007408 00014198 91 33 00 08 */ stw r9, 0x8(r19) +.L_0000740C: +/* 0000740C 0001419C 91 53 00 0C */ stw r10, 0xc(r19) +/* 00007410 000141A0 90 13 00 04 */ stw r0, 0x4(r19) +/* 00007414 000141A4 A8 68 00 98 */ lha r3, 0x98(r8) +/* 00007418 000141A8 80 08 00 9C */ lwz r0, 0x9c(r8) +/* 0000741C 000141AC 7C 7B 1A 14 */ add r3, r27, r3 +/* 00007420 000141B0 7C 08 03 A6 */ mtlr r0 +/* 00007424 000141B4 4E 80 00 21 */ blrl +/* 00007428 000141B8 7C 6A 1B 78 */ mr r10, r3 +/* 0000742C 000141BC 7F 0B C3 78 */ mr r11, r24 +/* 00007430 000141C0 39 20 00 30 */ li r9, 0x30 +/* 00007434 000141C4 80 0A 00 00 */ lwz r0, 0x0(r10) +/* 00007438 000141C8 35 29 FF E8 */ subic. r9, r9, 0x18 +/* 0000743C 000141CC 90 0B 00 00 */ stw r0, 0x0(r11) +/* 00007440 000141D0 80 0A 00 04 */ lwz r0, 0x4(r10) +/* 00007444 000141D4 90 0B 00 04 */ stw r0, 0x4(r11) +/* 00007448 000141D8 80 0A 00 08 */ lwz r0, 0x8(r10) +/* 0000744C 000141DC 90 0B 00 08 */ stw r0, 0x8(r11) +/* 00007450 000141E0 80 0A 00 0C */ lwz r0, 0xc(r10) +/* 00007454 000141E4 90 0B 00 0C */ stw r0, 0xc(r11) +/* 00007458 000141E8 80 0A 00 10 */ lwz r0, 0x10(r10) +/* 0000745C 000141EC 90 0B 00 10 */ stw r0, 0x10(r11) +/* 00007460 000141F0 80 0A 00 14 */ lwz r0, 0x14(r10) +.L_00007464: +/* 00007464 000141F4 39 4A 00 18 */ addi r10, r10, 0x18 +/* 00007468 000141F8 90 0B 00 14 */ stw r0, 0x14(r11) +/* 0000746C 000141FC 39 6B 00 18 */ addi r11, r11, 0x18 +/* 00007470 00014200 40 82 74 34 */ bne .L_0000E8A4 +/* 00007474 00014204 80 0A 00 00 */ lwz r0, 0x0(r10) +.L_00007478: +/* 00007478 00014208 3D 20 00 00 */ lis r9, .rodata+0x7C8@ha +/* 0000747C 0001420C C0 09 07 C8 */ lfs f0, .rodata+0x7C8@l(r9) +/* 00007480 00014210 7F 03 C3 78 */ mr r3, r24 +/* 00007484 00014214 90 0B 00 00 */ stw r0, 0x0(r11) +.L_00007488: +/* 00007488 00014218 38 81 00 08 */ addi r4, r1, 0x8 +/* 0000748C 0001421C 80 0A 00 04 */ lwz r0, 0x4(r10) +/* 00007490 00014220 90 0B 00 04 */ stw r0, 0x4(r11) +/* 00007494 00014224 80 0A 00 08 */ lwz r0, 0x8(r10) +/* 00007498 00014228 90 0B 00 08 */ stw r0, 0x8(r11) +/* 0000749C 0001422C D0 01 00 6C */ stfs f0, 0x6c(r1) +/* 000074A0 00014230 48 00 00 01 */ bl HeightAtPoint__C9WWorldPosRCQ25UMath7Vector3 +/* 000074A4 00014234 6E 00 80 00 */ xoris r0, r16, 0x8000 +/* 000074A8 00014238 90 01 01 84 */ stw r0, 0x184(r1) +/* 000074AC 0001423C 3D 60 43 30 */ lis r11, 0x4330 +/* 000074B0 00014240 3D 40 00 00 */ lis r10, .rodata+0x7D0@ha +/* 000074B4 00014244 C1 A1 00 0C */ lfs f13, 0xc(r1) +/* 000074B8 00014248 91 61 01 80 */ stw r11, 0x180(r1) +/* 000074BC 0001424C 3D 00 00 00 */ lis r8, .rodata+0x7B8@ha +/* 000074C0 00014250 C9 8A 07 D0 */ lfd f12, .rodata+0x7D0@l(r10) +/* 000074C4 00014254 ED AD 08 28 */ fsubs f13, f13, f1 +/* 000074C8 00014258 C8 01 01 80 */ lfd f0, 0x180(r1) +/* 000074CC 0001425C FD 40 68 50 */ fneg f10, f13 +/* 000074D0 00014260 C1 68 07 B8 */ lfs f11, .rodata+0x7B8@l(r8) +/* 000074D4 00014264 FC 00 60 28 */ fsub f0, f0, f12 +/* 000074D8 00014268 FF 8A 6A EE */ fsel f28, f10, f11, f13 +/* 000074DC 0001426C FC 00 00 18 */ frsp f0, f0 +/* 000074E0 00014270 EF 3E 00 24 */ fdivs f25, f30, f0 +/* 000074E4 00014274 FF 00 58 90 */ fmr f24, f11 +/* 000074E8 00014278 FF A0 E0 90 */ fmr f29, f28 +/* 000074EC 0001427C FF 60 C8 90 */ fmr f27, f25 +.L_000074F0: +/* 000074F0 00014280 FC 1C C0 00 */ fcmpu cr0, f28, f24 +/* 000074F4 00014284 41 81 75 00 */ bgt .L_0000E9F4 +/* 000074F8 00014288 FF 60 C0 90 */ fmr f27, f24 +.L_000074FC: +/* 000074FC 0001428C 48 00 75 04 */ b .L_0000EA00 +/* 00007500 00014290 FF 00 C8 50 */ fneg f24, f25 +/* 00007504 00014294 81 61 01 70 */ lwz r11, 0x170(r1) +/* 00007508 00014298 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000750C 0001429C 80 09 00 9C */ lwz r0, 0x9c(r9) +/* 00007510 000142A0 A8 69 00 98 */ lha r3, 0x98(r9) +/* 00007514 000142A4 7C 08 03 A6 */ mtlr r0 +/* 00007518 000142A8 7C 6B 1A 14 */ add r3, r11, r3 +.L_0000751C: +/* 0000751C 000142AC 4E 80 00 21 */ blrl +/* 00007520 000142B0 7C 64 1B 78 */ mr r4, r3 +/* 00007524 000142B4 38 61 00 78 */ addi r3, r1, 0x78 +/* 00007528 000142B8 48 00 00 01 */ bl __Q26Attrib8InstanceRCQ26Attrib8Instance +/* 0000752C 000142BC 80 01 00 80 */ lwz r0, 0x80(r1) +/* 00007530 000142C0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00007534 000142C4 40 82 75 44 */ bne .L_0000EA78 +/* 00007538 000142C8 38 60 00 50 */ li r3, 0x50 +/* 0000753C 000142CC 48 00 00 01 */ bl DefaultDataArea__6AttribUi +/* 00007540 000142D0 90 61 00 80 */ stw r3, 0x80(r1) +/* 00007544 000142D4 3C 80 AF A2 */ lis r4, 0xafa2 +/* 00007548 000142D8 38 61 00 78 */ addi r3, r1, 0x78 +/* 0000754C 000142DC 60 84 10 F0 */ ori r4, r4, 0x10f0 +/* 00007550 000142E0 38 A0 00 00 */ li r5, 0x0 +/* 00007554 000142E4 48 00 00 01 */ bl GetAttributePointer__CQ26Attrib8InstanceUiUi +.L_00007558: +/* 00007558 000142E8 7C 63 1B 79 */ mr. r3, r3 +/* 0000755C 000142EC 40 82 75 68 */ bne .L_0000EAC4 +/* 00007560 000142F0 38 60 00 0C */ li r3, 0xc +/* 00007564 000142F4 48 00 00 01 */ bl DefaultDataArea__6AttribUi +.L_00007568: +/* 00007568 000142F8 7C 64 1B 78 */ mr r4, r3 +/* 0000756C 000142FC 38 A0 00 00 */ li r5, 0x0 +/* 00007570 00014300 38 61 00 90 */ addi r3, r1, 0x90 +/* 00007574 00014304 38 C0 00 00 */ li r6, 0x0 +/* 00007578 00014308 48 00 00 01 */ bl __Q26Attrib8InstanceRCQ26Attrib7RefSpecUiPQ33UTL3COM8IUnknown +/* 0000757C 0001430C 80 01 00 98 */ lwz r0, 0x98(r1) +/* 00007580 00014310 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00007584 00014314 40 82 75 94 */ bne .L_0000EB18 +/* 00007588 00014318 38 60 00 74 */ li r3, 0x74 +/* 0000758C 0001431C 48 00 00 01 */ bl DefaultDataArea__6AttribUi +/* 00007590 00014320 90 61 00 98 */ stw r3, 0x98(r1) +.L_00007594: +/* 00007594 00014324 7D C3 73 78 */ mr r3, r14 +/* 00007598 00014328 FC 20 F8 90 */ fmr f1, f31 +/* 0000759C 0001432C 48 00 00 01 */ bl AerodynamicDownforce__Q27Physics4InfoRCQ36Attrib3Gen7chassisf +.L_000075A0: +/* 000075A0 00014330 81 3A 00 04 */ lwz r9, 0x4(r26) +/* 000075A4 00014334 FF C0 08 50 */ fneg f30, f1 +/* 000075A8 00014338 80 09 01 34 */ lwz r0, 0x134(r9) +/* 000075AC 0001433C A8 69 01 30 */ lha r3, 0x130(r9) +/* 000075B0 00014340 7C 08 03 A6 */ mtlr r0 +/* 000075B4 00014344 7C 7A 1A 14 */ add r3, r26, r3 +/* 000075B8 00014348 4E 80 00 21 */ blrl +/* 000075BC 0001434C 81 36 00 04 */ lwz r9, 0x4(r22) +/* 000075C0 00014350 FF E0 08 90 */ fmr f31, f1 +/* 000075C4 00014354 80 09 00 3C */ lwz r0, 0x3c(r9) +/* 000075C8 00014358 A8 69 00 38 */ lha r3, 0x38(r9) +/* 000075CC 0001435C 7C 08 03 A6 */ mtlr r0 +.L_000075D0: +/* 000075D0 00014360 7C 76 1A 14 */ add r3, r22, r3 +/* 000075D4 00014364 4E 80 00 21 */ blrl +/* 000075D8 00014368 EF DE 08 24 */ fdivs f30, f30, f1 +/* 000075DC 0001436C 3D 20 00 00 */ lis r9, .rodata+0x7B8@ha +/* 000075E0 00014370 C3 49 07 B8 */ lfs f26, .rodata+0x7B8@l(r9) +/* 000075E4 00014374 D3 41 00 A8 */ stfs f26, 0xa8(r1) +/* 000075E8 00014378 EF FF F0 2A */ fadds f31, f31, f30 +/* 000075EC 0001437C D3 E1 00 AC */ stfs f31, 0xac(r1) +/* 000075F0 00014380 D3 57 00 08 */ stfs f26, 0x8(r23) +/* 000075F4 00014384 80 01 00 A8 */ lwz r0, 0xa8(r1) +/* 000075F8 00014388 81 21 00 AC */ lwz r9, 0xac(r1) +/* 000075FC 0001438C 81 61 00 B0 */ lwz r11, 0xb0(r1) +/* 00007600 00014390 90 01 00 18 */ stw r0, 0x18(r1) +/* 00007604 00014394 91 61 00 20 */ stw r11, 0x20(r1) +/* 00007608 00014398 91 21 00 1C */ stw r9, 0x1c(r1) +/* 0000760C 0001439C 81 36 00 04 */ lwz r9, 0x4(r22) +/* 00007610 000143A0 80 09 00 54 */ lwz r0, 0x54(r9) +/* 00007614 000143A4 A8 69 00 50 */ lha r3, 0x50(r9) +/* 00007618 000143A8 7C 08 03 A6 */ mtlr r0 +/* 0000761C 000143AC 7C 76 1A 14 */ add r3, r22, r3 +/* 00007620 000143B0 4E 80 00 21 */ blrl +/* 00007624 000143B4 3D 20 00 00 */ lis r9, .rodata+0x7C0@ha +/* 00007628 000143B8 7C 6B 1B 78 */ mr r11, r3 +/* 0000762C 000143BC C3 C9 07 C0 */ lfs f30, .rodata+0x7C0@l(r9) +/* 00007630 000143C0 38 A1 00 B8 */ addi r5, r1, 0xb8 +/* 00007634 000143C4 81 2B 00 00 */ lwz r9, 0x0(r11) +/* 00007638 000143C8 7E E3 BB 78 */ mr r3, r23 +/* 0000763C 000143CC 81 4B 00 08 */ lwz r10, 0x8(r11) +/* 00007640 000143D0 FC 20 F0 90 */ fmr f1, f30 +/* 00007644 000143D4 80 0B 00 04 */ lwz r0, 0x4(r11) +/* 00007648 000143D8 7E 84 A3 78 */ mr r4, r20 +/* 0000764C 000143DC 91 21 00 A8 */ stw r9, 0xa8(r1) +/* 00007650 000143E0 90 17 00 04 */ stw r0, 0x4(r23) +.L_00007654: +/* 00007654 000143E4 91 57 00 08 */ stw r10, 0x8(r23) +/* 00007658 000143E8 48 00 00 01 */ bl VU0_v3scaleadd__FRCQ25UMath7Vector3fT0RQ25UMath7Vector3 +/* 0000765C 000143EC C1 94 00 08 */ lfs f12, 0x8(r20) +/* 00007660 000143F0 3D 20 00 00 */ lis r9, .rodata+0x7BC@ha +/* 00007664 000143F4 C0 01 00 08 */ lfs f0, 0x8(r1) +/* 00007668 000143F8 3D 00 00 00 */ lis r8, _Q25UMath7Vector4.kIdentity@ha +/* 0000766C 000143FC C1 A1 00 0C */ lfs f13, 0xc(r1) +/* 00007670 00014400 3B A8 00 00 */ addi r29, r8, _Q25UMath7Vector4.kIdentity@l +/* 00007674 00014404 C1 69 07 BC */ lfs f11, .rodata+0x7BC@l(r9) +/* 00007678 00014408 38 80 00 00 */ li r4, 0x0 +/* 0000767C 0001440C D0 01 00 F8 */ stfs f0, 0xf8(r1) +/* 00007680 00014410 38 A0 00 20 */ li r5, 0x20 +/* 00007684 00014414 D1 A1 00 FC */ stfs f13, 0xfc(r1) +/* 00007688 00014418 38 61 01 28 */ addi r3, r1, 0x128 +/* 0000768C 0001441C D1 81 01 00 */ stfs f12, 0x100(r1) +.L_00007690: +/* 00007690 00014420 D1 71 00 0C */ stfs f11, 0xc(r17) +/* 00007694 00014424 81 41 00 F8 */ lwz r10, 0xf8(r1) +/* 00007698 00014428 80 01 00 FC */ lwz r0, 0xfc(r1) +/* 0000769C 0001442C 81 21 01 00 */ lwz r9, 0x100(r1) +/* 000076A0 00014430 81 61 01 04 */ lwz r11, 0x104(r1) +/* 000076A4 00014434 91 41 00 E8 */ stw r10, 0xe8(r1) +/* 000076A8 00014438 90 01 00 EC */ stw r0, 0xec(r1) +/* 000076AC 0001443C 91 21 00 F0 */ stw r9, 0xf0(r1) +/* 000076B0 00014440 91 61 00 F4 */ stw r11, 0xf4(r1) +/* 000076B4 00014444 80 19 00 04 */ lwz r0, 0x4(r25) +/* 000076B8 00014448 81 39 00 08 */ lwz r9, 0x8(r25) +/* 000076BC 0001444C 81 79 00 0C */ lwz r11, 0xc(r25) +/* 000076C0 00014450 91 41 00 C8 */ stw r10, 0xc8(r1) +/* 000076C4 00014454 90 15 00 04 */ stw r0, 0x4(r21) +/* 000076C8 00014458 91 35 00 08 */ stw r9, 0x8(r21) +/* 000076CC 0001445C 91 75 00 0C */ stw r11, 0xc(r21) +/* 000076D0 00014460 C0 01 00 B8 */ lfs f0, 0xb8(r1) +/* 000076D4 00014464 C1 A1 00 BC */ lfs f13, 0xbc(r1) +/* 000076D8 00014468 C1 81 00 C0 */ lfs f12, 0xc0(r1) +/* 000076DC 0001446C D0 01 00 F8 */ stfs f0, 0xf8(r1) +.L_000076E0: +/* 000076E0 00014470 D1 A1 00 FC */ stfs f13, 0xfc(r1) +.L_000076E4: +/* 000076E4 00014474 D1 81 01 00 */ stfs f12, 0x100(r1) +/* 000076E8 00014478 D1 71 00 0C */ stfs f11, 0xc(r17) +/* 000076EC 0001447C 80 E1 00 F8 */ lwz r7, 0xf8(r1) +/* 000076F0 00014480 80 01 00 FC */ lwz r0, 0xfc(r1) +/* 000076F4 00014484 81 21 01 00 */ lwz r9, 0x100(r1) +/* 000076F8 00014488 81 61 01 04 */ lwz r11, 0x104(r1) +/* 000076FC 0001448C 90 E1 00 E8 */ stw r7, 0xe8(r1) +/* 00007700 00014490 90 01 00 EC */ stw r0, 0xec(r1) +/* 00007704 00014494 91 21 00 F0 */ stw r9, 0xf0(r1) +/* 00007708 00014498 91 61 00 F4 */ stw r11, 0xf4(r1) +/* 0000770C 0001449C 83 C8 00 00 */ lwz r30, _Q25UMath7Vector4.kIdentity@l(r8) +/* 00007710 000144A0 81 79 00 0C */ lwz r11, 0xc(r25) +/* 00007714 000144A4 81 59 00 04 */ lwz r10, 0x4(r25) +/* 00007718 000144A8 81 19 00 08 */ lwz r8, 0x8(r25) +.L_0000771C: +/* 0000771C 000144AC 90 E1 00 D8 */ stw r7, 0xd8(r1) +/* 00007720 000144B0 80 DD 00 0C */ lwz r6, 0xc(r29) +/* 00007724 000144B4 80 1D 00 04 */ lwz r0, 0x4(r29) +/* 00007728 000144B8 81 3D 00 08 */ lwz r9, 0x8(r29) +/* 0000772C 000144BC 91 72 00 0C */ stw r11, 0xc(r18) +/* 00007730 000144C0 91 52 00 04 */ stw r10, 0x4(r18) +/* 00007734 000144C4 91 12 00 08 */ stw r8, 0x8(r18) +/* 00007738 000144C8 90 01 01 1C */ stw r0, 0x11c(r1) +/* 0000773C 000144CC 91 21 01 20 */ stw r9, 0x120(r1) +/* 00007740 000144D0 90 C1 01 24 */ stw r6, 0x124(r1) +/* 00007744 000144D4 90 01 01 0C */ stw r0, 0x10c(r1) +/* 00007748 000144D8 91 21 01 10 */ stw r9, 0x110(r1) +/* 0000774C 000144DC 90 C1 01 14 */ stw r6, 0x114(r1) +/* 00007750 000144E0 93 C1 01 18 */ stw r30, 0x118(r1) +/* 00007754 000144E4 93 C1 01 08 */ stw r30, 0x108(r1) +.L_00007758: +/* 00007758 000144E8 4C C6 31 82 */ crclr cr1eq +/* 0000775C 000144EC 48 00 00 01 */ bl memset +/* 00007760 000144F0 38 00 00 00 */ li r0, 0x0 +/* 00007764 000144F4 39 20 00 03 */ li r9, 0x3 +/* 00007768 000144F8 90 01 01 60 */ stw r0, 0x160(r1) +/* 0000776C 000144FC 7D E3 7B 78 */ mr r3, r15 +/* 00007770 00014500 90 01 01 48 */ stw r0, 0x148(r1) +/* 00007774 00014504 7E A4 AB 78 */ mr r4, r21 +.L_00007778: +/* 00007778 00014508 90 01 01 50 */ stw r0, 0x150(r1) +/* 0000777C 0001450C 38 C0 00 02 */ li r6, 0x2 +/* 00007780 00014510 98 01 01 58 */ stb r0, 0x158(r1) +/* 00007784 00014514 98 01 01 59 */ stb r0, 0x159(r1) +/* 00007788 00014518 B0 01 01 5A */ sth r0, 0x15a(r1) +/* 0000778C 0001451C 90 01 01 5C */ stw r0, 0x15c(r1) +/* 00007790 00014520 D3 41 01 4C */ stfs f26, 0x14c(r1) +/* 00007794 00014524 D3 41 01 54 */ stfs f26, 0x154(r1) +/* 00007798 00014528 80 A1 01 74 */ lwz r5, 0x174(r1) +/* 0000779C 0001452C 91 2F 00 04 */ stw r9, 0x4(r15) +/* 000077A0 00014530 48 00 00 01 */ bl CheckHitWorld__13WCollisionMgrPCQ25UMath7Vector4RQ213WCollisionMgr18WorldCollisionInfoUi +/* 000077A4 00014534 88 01 01 59 */ lbz r0, 0x159(r1) +/* 000077A8 00014538 39 20 00 01 */ li r9, 0x1 +/* 000077AC 0001453C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000077B0 00014540 40 82 77 B8 */ bne .L_0000EF68 +/* 000077B4 00014544 39 20 00 00 */ li r9, 0x0 +.L_000077B8: +/* 000077B8 00014548 2C 09 00 00 */ cmpwi r9, 0x0 +/* 000077BC 0001454C 41 82 77 E0 */ beq .L_0000EF9C +/* 000077C0 00014550 7D C3 73 78 */ mr r3, r14 +/* 000077C4 00014554 38 80 00 00 */ li r4, 0x0 +/* 000077C8 00014558 48 00 00 01 */ bl _._Q26Attrib8Instance +/* 000077CC 0001455C 80 61 01 78 */ lwz r3, 0x178(r1) +/* 000077D0 00014560 38 80 00 00 */ li r4, 0x0 +/* 000077D4 00014564 48 00 00 01 */ bl _._Q26Attrib8Instance +/* 000077D8 00014568 FC 20 D0 90 */ fmr f1, f26 +/* 000077DC 0001456C 48 00 79 3C */ b .L_0000F118 +/* 000077E0 00014570 81 21 01 68 */ lwz r9, 0x168(r1) +/* 000077E4 00014574 3B C0 00 01 */ li r30, 0x1 +.L_000077E8: +/* 000077E8 00014578 FF E0 D8 90 */ fmr f31, f27 +/* 000077EC 0001457C 7C 1E 80 00 */ cmpw r30, r16 +/* 000077F0 00014580 2F 89 00 00 */ cmpwi cr7, r9, 0x0 +/* 000077F4 00014584 81 21 01 6C */ lwz r9, 0x16c(r1) +.L_000077F8: +/* 000077F8 00014588 7F A0 00 26 */ mfcr r29 +/* 000077FC 0001458C 57 BD E0 06 */ slwi r29, r29, 28 +/* 00007800 00014590 2F 89 00 00 */ cmpwi cr7, r9, 0x0 +/* 00007804 00014594 7F 80 00 26 */ mfcr r28 +/* 00007808 00014598 57 9C E0 06 */ slwi r28, r28, 28 +/* 0000780C 0001459C 40 80 78 D8 */ bge .L_0000F0E4 +/* 00007810 000145A0 3D 20 00 00 */ lis r9, .rodata+0x7D0@ha +/* 00007814 000145A4 3F 60 43 30 */ lis r27, 0x4330 +/* 00007818 000145A8 CB 69 07 D0 */ lfd f27, .rodata+0x7D0@l(r9) +/* 0000781C 000145AC 3B E1 00 B8 */ addi r31, r1, 0xb8 +/* 00007820 000145B0 6F C0 80 00 */ xoris r0, r30, 0x8000 +/* 00007824 000145B4 90 01 01 84 */ stw r0, 0x184(r1) +/* 00007828 000145B8 38 61 00 18 */ addi r3, r1, 0x18 +/* 0000782C 000145BC 38 81 00 A8 */ addi r4, r1, 0xa8 +/* 00007830 000145C0 38 A1 00 B8 */ addi r5, r1, 0xb8 +/* 00007834 000145C4 93 61 01 80 */ stw r27, 0x180(r1) +/* 00007838 000145C8 C8 01 01 80 */ lfd f0, 0x180(r1) +/* 0000783C 000145CC FC 00 D8 28 */ fsub f0, f0, f27 +/* 00007840 000145D0 FC 00 00 18 */ frsp f0, f0 +/* 00007844 000145D4 EF F9 C0 38 */ fmsubs f31, f25, f0, f24 +/* 00007848 000145D8 EC 3F 07 B2 */ fmuls f1, f31, f30 +/* 0000784C 000145DC 48 00 00 01 */ bl VU0_v3scaleadd__FRCQ25UMath7Vector3fT0RQ25UMath7Vector3 +/* 00007850 000145E0 38 61 00 B8 */ addi r3, r1, 0xb8 +/* 00007854 000145E4 FC 20 F8 90 */ fmr f1, f31 +/* 00007858 000145E8 7C 65 1B 78 */ mr r5, r3 +/* 0000785C 000145EC 7E 84 A3 78 */ mr r4, r20 +/* 00007860 000145F0 48 00 00 01 */ bl VU0_v3scaleadd__FRCQ25UMath7Vector3fT0RQ25UMath7Vector3 +/* 00007864 000145F4 7F 03 C3 78 */ mr r3, r24 +/* 00007868 000145F8 7F E4 FB 78 */ mr r4, r31 +/* 0000786C 000145FC 7E 65 9B 78 */ mr r5, r19 +/* 00007870 00014600 38 C0 00 01 */ li r6, 0x1 +/* 00007874 00014604 38 E0 00 00 */ li r7, 0x0 +/* 00007878 00014608 39 00 00 01 */ li r8, 0x1 +/* 0000787C 0001460C 48 00 00 01 */ bl Update__9WWorldPosRCQ25UMath7Vector3RQ25UMath7Vector4bPC9WColliderT3 +/* 00007880 00014610 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00007884 00014614 41 82 78 CC */ beq .L_0000F150 +/* 00007888 00014618 80 01 00 68 */ lwz r0, 0x68(r1) +/* 0000788C 0001461C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00007890 00014620 40 80 78 CC */ bge .L_0000F15C +.L_00007894: +/* 00007894 00014624 C0 01 00 2C */ lfs f0, 0x2c(r1) +/* 00007898 00014628 FC 00 F0 00 */ fcmpu cr0, f0, f30 +/* 0000789C 0001462C 41 80 78 CC */ blt .L_0000F168 +/* 000078A0 00014630 7F 03 C3 78 */ mr r3, r24 +/* 000078A4 00014634 7F E4 FB 78 */ mr r4, r31 +/* 000078A8 00014638 48 00 00 01 */ bl HeightAtPoint__C9WWorldPosRCQ25UMath7Vector3 +.L_000078AC: +/* 000078AC 0001463C C0 01 00 BC */ lfs f0, 0xbc(r1) +/* 000078B0 00014640 ED A0 08 28 */ fsubs f13, f0, f1 +.L_000078B4: +/* 000078B4 00014644 FC 0D D0 00 */ fcmpu cr0, f13, f26 +/* 000078B8 00014648 4C 62 03 82 */ cror un, eq, lt +.L_000078BC: +/* 000078BC 0001464C 41 83 78 D8 */ bso .L_0000F194 +/* 000078C0 00014650 EC 1D 68 28 */ fsubs f0, f29, f13 +.L_000078C4: +/* 000078C4 00014654 FF A0 6F 6E */ fsel f29, f0, f29, f13 +/* 000078C8 00014658 EF 9C 68 2A */ fadds f28, f28, f13 +/* 000078CC 0001465C 3B DE 00 01 */ addi r30, r30, 0x1 +/* 000078D0 00014660 7C 1E 80 00 */ cmpw r30, r16 +/* 000078D4 00014664 41 80 78 20 */ blt .L_0000F0F4 +/* 000078D8 00014668 7F A8 01 20 */ mtcrf 128, r29 +/* 000078DC 0001466C 41 82 78 E8 */ beq .L_0000F1C4 +/* 000078E0 00014670 81 21 01 68 */ lwz r9, 0x168(r1) +/* 000078E4 00014674 D3 A9 00 00 */ stfs f29, 0x0(r9) +/* 000078E8 00014678 7F 88 01 20 */ mtcrf 128, r28 +/* 000078EC 0001467C 41 82 78 F8 */ beq .L_0000F1E4 +/* 000078F0 00014680 81 21 01 6C */ lwz r9, 0x16c(r1) +/* 000078F4 00014684 D3 E9 00 00 */ stfs f31, 0x0(r9) +/* 000078F8 00014688 6F C0 80 00 */ xoris r0, r30, 0x8000 +/* 000078FC 0001468C 90 01 01 84 */ stw r0, 0x184(r1) +/* 00007900 00014690 3D 60 43 30 */ lis r11, 0x4330 +/* 00007904 00014694 3D 40 00 00 */ lis r10, .rodata+0x7D0@ha +/* 00007908 00014698 7D C3 73 78 */ mr r3, r14 +/* 0000790C 0001469C 91 61 01 80 */ stw r11, 0x180(r1) +/* 00007910 000146A0 38 80 00 00 */ li r4, 0x0 +/* 00007914 000146A4 C8 0A 07 D0 */ lfd f0, .rodata+0x7D0@l(r10) +/* 00007918 000146A8 CB E1 01 80 */ lfd f31, 0x180(r1) +/* 0000791C 000146AC FF FF 00 28 */ fsub f31, f31, f0 +/* 00007920 000146B0 FF E0 F8 18 */ frsp f31, f31 +/* 00007924 000146B4 EF FC F8 24 */ fdivs f31, f28, f31 +/* 00007928 000146B8 48 00 00 01 */ bl _._Q26Attrib8Instance +/* 0000792C 000146BC 80 61 01 78 */ lwz r3, 0x178(r1) +/* 00007930 000146C0 38 80 00 00 */ li r4, 0x0 +/* 00007934 000146C4 48 00 00 01 */ bl _._Q26Attrib8Instance +/* 00007938 000146C8 FC 20 F8 90 */ fmr f1, f31 +/* 0000793C 000146CC 80 01 02 14 */ lwz r0, 0x214(r1) +/* 00007940 000146D0 7C 08 03 A6 */ mtlr r0 +/* 00007944 000146D4 B9 C1 01 88 */ lmw r14, 0x188(r1) +/* 00007948 000146D8 E3 01 01 D0 */ psq_l f24, 0x1d0(r1), 0, qr0 +/* 0000794C 000146DC E3 21 01 D8 */ psq_l f25, 0x1d8(r1), 0, qr0 +/* 00007950 000146E0 E3 41 01 E0 */ psq_l f26, 0x1e0(r1), 0, qr0 +.L_00007954: +/* 00007954 000146E4 E3 61 01 E8 */ psq_l f27, 0x1e8(r1), 0, qr0 +/* 00007958 000146E8 E3 81 01 F0 */ psq_l f28, 0x1f0(r1), 0, qr0 +.L_0000795C: +/* 0000795C 000146EC E3 A1 01 F8 */ psq_l f29, 0x1f8(r1), 0, qr0 +/* 00007960 000146F0 E3 C1 02 00 */ psq_l f30, 0x200(r1), 0, qr0 +/* 00007964 000146F4 E3 E1 02 08 */ psq_l f31, 0x208(r1), 0, qr0 +/* 00007968 000146F8 38 21 02 10 */ addi r1, r1, 0x210 +/* 0000796C 000146FC 4E 80 00 20 */ blr +.endfn AverageAir__FP8ISimablefPfT2 + +# .text:0x7970 | size: 0x2C +.fn MaybeKillJumpCam__8CameraAIUi, global +/* 00007970 00014700 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 00007974 00014704 7C 08 02 A6 */ mflr r0 +/* 00007978 00014708 90 01 00 0C */ stw r0, 0xc(r1) +/* 0000797C 0001470C 48 00 6E 59 */ bl .L_0000E7D4 +/* 00007980 00014710 7C 63 1B 79 */ mr. r3, r3 +.L_00007984: +/* 00007984 00014714 41 82 79 8C */ beq .L_0000F310 +/* 00007988 00014718 48 00 60 35 */ bl .L_0000D9BC +/* 0000798C 0001471C 80 01 00 0C */ lwz r0, 0xc(r1) +/* 00007990 00014720 7C 08 03 A6 */ mtlr r0 +.L_00007994: +/* 00007994 00014724 38 21 00 08 */ addi r1, r1, 0x8 +/* 00007998 00014728 4E 80 00 20 */ blr +.endfn MaybeKillJumpCam__8CameraAIUi + +# .text:0x799C | size: 0x6C +.fn Init__8CameraAIv, global +/* 0000799C 0001472C 94 21 FF D8 */ stwu r1, -0x28(r1) +/* 000079A0 00014730 7C 08 02 A6 */ mflr r0 +/* 000079A4 00014734 BF 81 00 18 */ stmw r28, 0x18(r1) +/* 000079A8 00014738 90 01 00 2C */ stw r0, 0x2c(r1) +/* 000079AC 0001473C 3F C0 00 00 */ lis r30, gFastMem@ha +/* 000079B0 00014740 38 80 00 08 */ li r4, 0x8 +.L_000079B4: +/* 000079B4 00014744 3B DE 00 00 */ addi r30, r30, gFastMem@l +/* 000079B8 00014748 38 A0 00 00 */ li r5, 0x0 +/* 000079BC 0001474C 7F C3 F3 78 */ mr r3, r30 +/* 000079C0 00014750 3F 80 00 00 */ lis r28, TheAvoidables@ha +/* 000079C4 00014754 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 000079C8 00014758 7C 7D 1B 78 */ mr r29, r3 +/* 000079CC 0001475C 38 00 00 00 */ li r0, 0x0 +/* 000079D0 00014760 90 1D 00 04 */ stw r0, 0x4(r29) +/* 000079D4 00014764 7F C3 F3 78 */ mr r3, r30 +/* 000079D8 00014768 38 80 00 0C */ li r4, 0xc +/* 000079DC 0001476C 38 A0 00 00 */ li r5, 0x0 +/* 000079E0 00014770 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 000079E4 00014774 90 63 00 00 */ stw r3, 0x0(r3) +/* 000079E8 00014778 90 63 00 04 */ stw r3, 0x4(r3) +.L_000079EC: +/* 000079EC 0001477C 90 7D 00 04 */ stw r3, 0x4(r29) +/* 000079F0 00014780 93 BC 00 00 */ stw r29, TheAvoidables@l(r28) +.L_000079F4: +/* 000079F4 00014784 80 01 00 2C */ lwz r0, 0x2c(r1) +/* 000079F8 00014788 7C 08 03 A6 */ mtlr r0 +/* 000079FC 0001478C BB 81 00 18 */ lmw r28, 0x18(r1) +/* 00007A00 00014790 38 21 00 28 */ addi r1, r1, 0x28 +/* 00007A04 00014794 4E 80 00 20 */ blr +.endfn Init__8CameraAIv + +# .text:0x7A08 | size: 0xEC +.fn Shutdown__8CameraAIv, global +/* 00007A08 00014798 94 21 FF D8 */ stwu r1, -0x28(r1) +/* 00007A0C 0001479C 7C 08 02 A6 */ mflr r0 +/* 00007A10 000147A0 BF C1 00 20 */ stmw r30, 0x20(r1) +/* 00007A14 000147A4 90 01 00 2C */ stw r0, 0x2c(r1) +.L_00007A18: +/* 00007A18 000147A8 3D 20 00 00 */ lis r9, TheAvoidables@ha +/* 00007A1C 000147AC 83 E9 00 00 */ lwz r31, TheAvoidables@l(r9) +/* 00007A20 000147B0 2C 1F 00 00 */ cmpwi r31, 0x0 +.L_00007A24: +/* 00007A24 000147B4 41 82 7A 68 */ beq .L_0000F48C +/* 00007A28 000147B8 7F E3 FB 78 */ mr r3, r31 +/* 00007A2C 000147BC 48 00 00 01 */ bl clear__Q24_STLt10_List_base2ZP5IBodyZQ33UTL3Stdt9Allocator2ZP5IBodyZ24_type_CameraAIAvoidables +/* 00007A30 000147C0 80 9F 00 04 */ lwz r4, 0x4(r31) +/* 00007A34 000147C4 2C 04 00 00 */ cmpwi r4, 0x0 +/* 00007A38 000147C8 41 82 7A 50 */ beq .L_0000F488 +/* 00007A3C 000147CC 3C 60 00 00 */ lis r3, gFastMem@ha +.L_00007A40: +/* 00007A40 000147D0 38 A0 00 0C */ li r5, 0xc +/* 00007A44 000147D4 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 00007A48 000147D8 38 C0 00 00 */ li r6, 0x0 +/* 00007A4C 000147DC 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 00007A50 000147E0 3C 60 00 00 */ lis r3, gFastMem@ha +/* 00007A54 000147E4 7F E4 FB 78 */ mr r4, r31 +/* 00007A58 000147E8 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 00007A5C 000147EC 38 A0 00 08 */ li r5, 0x8 +/* 00007A60 000147F0 38 C0 00 00 */ li r6, 0x0 +/* 00007A64 000147F4 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 00007A68 000147F8 3D 20 00 00 */ lis r9, TheAvoidables@ha +/* 00007A6C 000147FC 38 00 00 00 */ li r0, 0x0 +/* 00007A70 00014800 3C 80 00 00 */ lis r4, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha +/* 00007A74 00014804 90 09 00 00 */ stw r0, TheAvoidables@l(r9) +/* 00007A78 00014808 38 84 00 00 */ addi r4, r4, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l +/* 00007A7C 0001480C 38 61 00 08 */ addi r3, r1, 0x8 +/* 00007A80 00014810 48 00 00 01 */ bl __Q43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4ListRCQ43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4List +/* 00007A84 00014814 83 E1 00 08 */ lwz r31, 0x8(r1) +/* 00007A88 00014818 3B C1 00 08 */ addi r30, r1, 0x8 +/* 00007A8C 0001481C 80 1E 00 08 */ lwz r0, 0x8(r30) +/* 00007A90 00014820 81 21 00 08 */ lwz r9, 0x8(r1) +/* 00007A94 00014824 54 00 10 3A */ slwi r0, r0, 2 +/* 00007A98 00014828 7D 29 02 14 */ add r9, r9, r0 +/* 00007A9C 0001482C 7C 1F 48 00 */ cmpw r31, r9 +/* 00007AA0 00014830 41 82 7A D4 */ beq .L_0000F574 +.L_00007AA4: +/* 00007AA4 00014834 81 7F 00 00 */ lwz r11, 0x0(r31) +/* 00007AA8 00014838 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00007AAC 0001483C 41 82 7A CC */ beq .L_0000F578 +/* 00007AB0 00014840 81 2B 02 C4 */ lwz r9, 0x2c4(r11) +/* 00007AB4 00014844 38 80 00 03 */ li r4, 0x3 +.L_00007AB8: +/* 00007AB8 00014848 A8 69 00 08 */ lha r3, 0x8(r9) +/* 00007ABC 0001484C 80 09 00 0C */ lwz r0, 0xc(r9) +/* 00007AC0 00014850 7C 6B 1A 14 */ add r3, r11, r3 +.L_00007AC4: +/* 00007AC4 00014854 7C 08 03 A6 */ mtlr r0 +/* 00007AC8 00014858 4E 80 00 21 */ blrl +/* 00007ACC 0001485C 3B FF 00 04 */ addi r31, r31, 0x4 +/* 00007AD0 00014860 48 00 7A 8C */ b .L_0000F55C +.L_00007AD4: +/* 00007AD4 00014864 38 61 00 08 */ addi r3, r1, 0x8 +/* 00007AD8 00014868 38 80 00 02 */ li r4, 0x2 +/* 00007ADC 0001486C 48 00 00 01 */ bl _._Q43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4List +/* 00007AE0 00014870 80 01 00 2C */ lwz r0, 0x2c(r1) +/* 00007AE4 00014874 7C 08 03 A6 */ mtlr r0 +/* 00007AE8 00014878 BB C1 00 20 */ lmw r30, 0x20(r1) +/* 00007AEC 0001487C 38 21 00 28 */ addi r1, r1, 0x28 +/* 00007AF0 00014880 4E 80 00 20 */ blr +.endfn Shutdown__8CameraAIv + +# .text:0x7AF4 | size: 0xB8 +.fn AddAvoidable__8CameraAIP5IBody, global +/* 00007AF4 00014884 94 21 FF C0 */ stwu r1, -0x40(r1) +/* 00007AF8 00014888 7C 08 02 A6 */ mflr r0 +.L_00007AFC: +/* 00007AFC 0001488C BF C1 00 38 */ stmw r30, 0x38(r1) +/* 00007B00 00014890 90 01 00 44 */ stw r0, 0x44(r1) +/* 00007B04 00014894 3F C0 00 00 */ lis r30, TheAvoidables@ha +/* 00007B08 00014898 90 61 00 30 */ stw r3, 0x30(r1) +/* 00007B0C 0001489C 81 7E 00 00 */ lwz r11, TheAvoidables@l(r30) +/* 00007B10 000148A0 38 61 00 08 */ addi r3, r1, 0x8 +/* 00007B14 000148A4 38 81 00 10 */ addi r4, r1, 0x10 +/* 00007B18 000148A8 38 A1 00 18 */ addi r5, r1, 0x18 +/* 00007B1C 000148AC 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 00007B20 000148B0 38 C1 00 30 */ addi r6, r1, 0x30 +/* 00007B24 000148B4 80 09 00 00 */ lwz r0, 0x0(r9) +/* 00007B28 000148B8 90 01 00 10 */ stw r0, 0x10(r1) +/* 00007B2C 000148BC 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 00007B30 000148C0 91 21 00 18 */ stw r9, 0x18(r1) +/* 00007B34 000148C4 48 00 00 01 */ bl find__H2ZQ24_STLt14_List_iterator2ZP5IBodyZQ24_STLt16_Nonconst_traits1ZP5IBodyZP5IBody_4_STLX01X01RCX11_X01 +/* 00007B38 000148C8 81 7E 00 00 */ lwz r11, TheAvoidables@l(r30) +/* 00007B3C 000148CC 81 21 00 08 */ lwz r9, 0x8(r1) +/* 00007B40 000148D0 80 0B 00 04 */ lwz r0, 0x4(r11) +/* 00007B44 000148D4 7C 09 00 00 */ cmpw r9, r0 +/* 00007B48 000148D8 90 01 00 10 */ stw r0, 0x10(r1) +/* 00007B4C 000148DC 40 82 7B 98 */ bne .L_0000F6E4 +/* 00007B50 000148E0 80 0B 00 04 */ lwz r0, 0x4(r11) +/* 00007B54 000148E4 3C 60 00 00 */ lis r3, gFastMem@ha +/* 00007B58 000148E8 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 00007B5C 000148EC 38 80 00 0C */ li r4, 0xc +/* 00007B60 000148F0 90 01 00 28 */ stw r0, 0x28(r1) +.L_00007B64: +/* 00007B64 000148F4 38 A0 00 00 */ li r5, 0x0 +/* 00007B68 000148F8 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 00007B6C 000148FC 2C 03 FF F8 */ cmpwi r3, -0x8 +/* 00007B70 00014900 41 82 7B 7C */ beq .L_0000F6EC +/* 00007B74 00014904 80 01 00 30 */ lwz r0, 0x30(r1) +/* 00007B78 00014908 90 03 00 08 */ stw r0, 0x8(r3) +/* 00007B7C 0001490C 81 21 00 28 */ lwz r9, 0x28(r1) +/* 00007B80 00014910 81 69 00 04 */ lwz r11, 0x4(r9) +/* 00007B84 00014914 91 23 00 00 */ stw r9, 0x0(r3) +/* 00007B88 00014918 91 63 00 04 */ stw r11, 0x4(r3) +/* 00007B8C 0001491C 90 6B 00 00 */ stw r3, 0x0(r11) +/* 00007B90 00014920 90 69 00 04 */ stw r3, 0x4(r9) +/* 00007B94 00014924 90 61 00 20 */ stw r3, 0x20(r1) +/* 00007B98 00014928 80 01 00 44 */ lwz r0, 0x44(r1) +/* 00007B9C 0001492C 7C 08 03 A6 */ mtlr r0 +/* 00007BA0 00014930 BB C1 00 38 */ lmw r30, 0x38(r1) +/* 00007BA4 00014934 38 21 00 40 */ addi r1, r1, 0x40 +/* 00007BA8 00014938 4E 80 00 20 */ blr +.endfn AddAvoidable__8CameraAIP5IBody + +# .text:0x7BAC | size: 0xB4 +.fn RemoveAvoidable__8CameraAIP5IBody, global +/* 00007BAC 0001493C 94 21 FF C0 */ stwu r1, -0x40(r1) +/* 00007BB0 00014940 7C 08 02 A6 */ mflr r0 +/* 00007BB4 00014944 BF C1 00 38 */ stmw r30, 0x38(r1) +/* 00007BB8 00014948 90 01 00 44 */ stw r0, 0x44(r1) +/* 00007BBC 0001494C 3F C0 00 00 */ lis r30, TheAvoidables@ha +/* 00007BC0 00014950 90 61 00 30 */ stw r3, 0x30(r1) +/* 00007BC4 00014954 81 7E 00 00 */ lwz r11, TheAvoidables@l(r30) +/* 00007BC8 00014958 38 81 00 10 */ addi r4, r1, 0x10 +.L_00007BCC: +/* 00007BCC 0001495C 38 61 00 08 */ addi r3, r1, 0x8 +/* 00007BD0 00014960 38 A1 00 18 */ addi r5, r1, 0x18 +/* 00007BD4 00014964 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 00007BD8 00014968 38 C1 00 30 */ addi r6, r1, 0x30 +/* 00007BDC 0001496C 80 09 00 00 */ lwz r0, 0x0(r9) +/* 00007BE0 00014970 90 01 00 10 */ stw r0, 0x10(r1) +.L_00007BE4: +/* 00007BE4 00014974 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 00007BE8 00014978 91 21 00 18 */ stw r9, 0x18(r1) +.L_00007BEC: +/* 00007BEC 0001497C 48 00 00 01 */ bl find__H2ZQ24_STLt14_List_iterator2ZP5IBodyZQ24_STLt16_Nonconst_traits1ZP5IBodyZP5IBody_4_STLX01X01RCX11_X01 +/* 00007BF0 00014980 81 3E 00 00 */ lwz r9, TheAvoidables@l(r30) +/* 00007BF4 00014984 39 60 00 01 */ li r11, 0x1 +/* 00007BF8 00014988 80 81 00 08 */ lwz r4, 0x8(r1) +/* 00007BFC 0001498C 80 09 00 04 */ lwz r0, 0x4(r9) +/* 00007C00 00014990 7C 04 00 00 */ cmpw r4, r0 +/* 00007C04 00014994 90 01 00 10 */ stw r0, 0x10(r1) +/* 00007C08 00014998 40 82 7C 10 */ bne .L_0000F818 +/* 00007C0C 0001499C 39 60 00 00 */ li r11, 0x0 +/* 00007C10 000149A0 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00007C14 000149A4 41 82 7C 4C */ beq .L_0000F860 +/* 00007C18 000149A8 90 81 00 28 */ stw r4, 0x28(r1) +/* 00007C1C 000149AC 2C 04 00 00 */ cmpwi r4, 0x0 +/* 00007C20 000149B0 83 C4 00 00 */ lwz r30, 0x0(r4) +.L_00007C24: +/* 00007C24 000149B4 81 24 00 04 */ lwz r9, 0x4(r4) +/* 00007C28 000149B8 93 C9 00 00 */ stw r30, 0x0(r9) +/* 00007C2C 000149BC 91 3E 00 04 */ stw r9, 0x4(r30) +/* 00007C30 000149C0 41 82 7C 48 */ beq .L_0000F878 +/* 00007C34 000149C4 3C 60 00 00 */ lis r3, gFastMem@ha +/* 00007C38 000149C8 38 A0 00 0C */ li r5, 0xc +/* 00007C3C 000149CC 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 00007C40 000149D0 38 C0 00 00 */ li r6, 0x0 +/* 00007C44 000149D4 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 00007C48 000149D8 93 C1 00 20 */ stw r30, 0x20(r1) +/* 00007C4C 000149DC 80 01 00 44 */ lwz r0, 0x44(r1) +/* 00007C50 000149E0 7C 08 03 A6 */ mtlr r0 +/* 00007C54 000149E4 BB C1 00 38 */ lmw r30, 0x38(r1) +/* 00007C58 000149E8 38 21 00 40 */ addi r1, r1, 0x40 +/* 00007C5C 000149EC 4E 80 00 20 */ blr +.endfn RemoveAvoidable__8CameraAIP5IBody + +# .text:0x7C60 | size: 0xFC +.fn StartCinematicSlowdown__8CameraAI8EVIEW_IDf, global +/* 00007C60 000149F0 94 21 FF C0 */ stwu r1, -0x40(r1) +/* 00007C64 000149F4 7C 08 02 A6 */ mflr r0 +/* 00007C68 000149F8 F3 E1 00 38 */ psq_st f31, 0x38(r1), 0, qr0 +/* 00007C6C 000149FC BF 01 00 18 */ stmw r24, 0x18(r1) +.L_00007C70: +/* 00007C70 00014A00 90 01 00 44 */ stw r0, 0x44(r1) +/* 00007C74 00014A04 3D 60 00 00 */ lis r11, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha +/* 00007C78 00014A08 3F 60 00 00 */ lis r27, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha +/* 00007C7C 00014A0C 3D 20 00 00 */ lis r9, .rodata+0x74C@ha +/* 00007C80 00014A10 83 AB 00 00 */ lwz r29, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r11) +/* 00007C84 00014A14 3B 89 07 4C */ addi r28, r9, .rodata+0x74C@l +.L_00007C88: +/* 00007C88 00014A18 3B 1B 00 00 */ addi r24, r27, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l +/* 00007C8C 00014A1C 7C 79 1B 78 */ mr r25, r3 +/* 00007C90 00014A20 FF E0 08 90 */ fmr f31, f1 +/* 00007C94 00014A24 3B 41 00 08 */ addi r26, r1, 0x8 +/* 00007C98 00014A28 80 18 00 08 */ lwz r0, 0x8(r24) +.L_00007C9C: +/* 00007C9C 00014A2C 81 3B 00 00 */ lwz r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r27) +/* 00007CA0 00014A30 54 00 10 3A */ slwi r0, r0, 2 +/* 00007CA4 00014A34 7D 29 02 14 */ add r9, r9, r0 +/* 00007CA8 00014A38 7C 1D 48 00 */ cmpw r29, r9 +/* 00007CAC 00014A3C 41 82 7D 44 */ beq .L_0000F9F0 +/* 00007CB0 00014A40 83 DD 00 00 */ lwz r30, 0x0(r29) +/* 00007CB4 00014A44 80 1E 00 04 */ lwz r0, 0x4(r30) +/* 00007CB8 00014A48 7C 00 C8 00 */ cmpw r0, r25 +/* 00007CBC 00014A4C 40 82 7D 3C */ bne .L_0000F9F8 +/* 00007CC0 00014A50 81 7E 00 18 */ lwz r11, 0x18(r30) +/* 00007CC4 00014A54 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00007CC8 00014A58 41 82 7D 3C */ beq .L_0000FA04 +/* 00007CCC 00014A5C 81 2B 00 14 */ lwz r9, 0x14(r11) +/* 00007CD0 00014A60 80 09 00 24 */ lwz r0, 0x24(r9) +/* 00007CD4 00014A64 A8 69 00 20 */ lha r3, 0x20(r9) +/* 00007CD8 00014A68 7C 08 03 A6 */ mtlr r0 +/* 00007CDC 00014A6C 7C 6B 1A 14 */ add r3, r11, r3 +/* 00007CE0 00014A70 4E 80 00 21 */ blrl +/* 00007CE4 00014A74 7C 7F 1B 78 */ mr r31, r3 +/* 00007CE8 00014A78 7F 83 E3 78 */ mr r3, r28 +/* 00007CEC 00014A7C 48 00 00 01 */ bl StringHash64__6AttribPCc +/* 00007CF0 00014A80 90 61 00 08 */ stw r3, 0x8(r1) +/* 00007CF4 00014A84 90 81 00 0C */ stw r4, 0xc(r1) +/* 00007CF8 00014A88 7F 83 E3 78 */ mr r3, r28 +/* 00007CFC 00014A8C 48 00 00 01 */ bl StringHash32__6AttribPCc +/* 00007D00 00014A90 90 7A 00 08 */ stw r3, 0x8(r26) +/* 00007D04 00014A94 93 81 00 14 */ stw r28, 0x14(r1) +/* 00007D08 00014A98 38 60 00 00 */ li r3, 0x0 +.L_00007D0C: +/* 00007D0C 00014A9C 81 21 00 08 */ lwz r9, 0x8(r1) +/* 00007D10 00014AA0 80 1F 00 00 */ lwz r0, 0x0(r31) +/* 00007D14 00014AA4 7C 00 48 00 */ cmpw r0, r9 +/* 00007D18 00014AA8 40 82 7D 30 */ bne .L_0000FA48 +/* 00007D1C 00014AAC 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 00007D20 00014AB0 80 01 00 0C */ lwz r0, 0xc(r1) +/* 00007D24 00014AB4 7D 23 02 78 */ xor r3, r9, r0 +/* 00007D28 00014AB8 21 63 00 00 */ subfic r11, r3, 0x0 +/* 00007D2C 00014ABC 7C 6B 19 14 */ adde r3, r11, r3 +/* 00007D30 00014AC0 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00007D34 00014AC4 41 82 7D 3C */ beq .L_0000FA70 +/* 00007D38 00014AC8 D3 FE 02 C0 */ stfs f31, 0x2c0(r30) +/* 00007D3C 00014ACC 3B BD 00 04 */ addi r29, r29, 0x4 +/* 00007D40 00014AD0 48 00 7C 98 */ b .L_0000F9D8 +/* 00007D44 00014AD4 80 01 00 44 */ lwz r0, 0x44(r1) +/* 00007D48 00014AD8 7C 08 03 A6 */ mtlr r0 +/* 00007D4C 00014ADC BB 01 00 18 */ lmw r24, 0x18(r1) +/* 00007D50 00014AE0 E3 E1 00 38 */ psq_l f31, 0x38(r1), 0, qr0 +/* 00007D54 00014AE4 38 21 00 40 */ addi r1, r1, 0x40 +/* 00007D58 00014AE8 4E 80 00 20 */ blr +.endfn StartCinematicSlowdown__8CameraAI8EVIEW_IDf + +# .text:0x7D5C | size: 0x94 +.fn MaybeDoTotaledCam__8CameraAIP7IPlayer, global +/* 00007D5C 00014AEC 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 00007D60 00014AF0 7C 08 02 A6 */ mflr r0 +/* 00007D64 00014AF4 BF 41 00 08 */ stmw r26, 0x8(r1) +/* 00007D68 00014AF8 90 01 00 24 */ stw r0, 0x24(r1) +.L_00007D6C: +/* 00007D6C 00014AFC 7C 7C 1B 78 */ mr r28, r3 +.L_00007D70: +/* 00007D70 00014B00 48 00 00 01 */ bl GetUserMode__3Simv +/* 00007D74 00014B04 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00007D78 00014B08 40 82 7D DC */ bne .L_0000FB54 +/* 00007D7C 00014B0C 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha +/* 00007D80 00014B10 3F 60 00 00 */ lis r27, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha +/* 00007D84 00014B14 83 A9 00 00 */ lwz r29, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r9) +/* 00007D88 00014B18 3B 5B 00 00 */ addi r26, r27, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l +/* 00007D8C 00014B1C 80 1A 00 08 */ lwz r0, 0x8(r26) +/* 00007D90 00014B20 81 3B 00 00 */ lwz r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r27) +/* 00007D94 00014B24 54 00 10 3A */ slwi r0, r0, 2 +/* 00007D98 00014B28 7D 29 02 14 */ add r9, r9, r0 +/* 00007D9C 00014B2C 7C 1D 48 00 */ cmpw r29, r9 +/* 00007DA0 00014B30 41 82 7D DC */ beq .L_0000FB7C +/* 00007DA4 00014B34 81 3C 00 04 */ lwz r9, 0x4(r28) +/* 00007DA8 00014B38 83 FD 00 00 */ lwz r31, 0x0(r29) +/* 00007DAC 00014B3C A8 69 00 60 */ lha r3, 0x60(r9) +/* 00007DB0 00014B40 80 09 00 64 */ lwz r0, 0x64(r9) +/* 00007DB4 00014B44 7C 7C 1A 14 */ add r3, r28, r3 +/* 00007DB8 00014B48 83 DF 00 04 */ lwz r30, 0x4(r31) +/* 00007DBC 00014B4C 7C 08 03 A6 */ mtlr r0 +/* 00007DC0 00014B50 4E 80 00 21 */ blrl +/* 00007DC4 00014B54 7C 1E 18 00 */ cmpw r30, r3 +.L_00007DC8: +/* 00007DC8 00014B58 40 82 7D D4 */ bne .L_0000FB9C +/* 00007DCC 00014B5C 7F E3 FB 78 */ mr r3, r31 +/* 00007DD0 00014B60 48 00 6B 2D */ bl .L_0000E8FC +/* 00007DD4 00014B64 3B BD 00 04 */ addi r29, r29, 0x4 +/* 00007DD8 00014B68 48 00 7D 8C */ b .L_0000FB64 +/* 00007DDC 00014B6C 80 01 00 24 */ lwz r0, 0x24(r1) +/* 00007DE0 00014B70 7C 08 03 A6 */ mtlr r0 +/* 00007DE4 00014B74 BB 41 00 08 */ lmw r26, 0x8(r1) +/* 00007DE8 00014B78 38 21 00 20 */ addi r1, r1, 0x20 +/* 00007DEC 00014B7C 4E 80 00 20 */ blr +.endfn MaybeDoTotaledCam__8CameraAIP7IPlayer + +# .text:0x7DF0 | size: 0x114 +.fn MaybeDoPursuitCam__8CameraAIP8IVehicle, global +/* 00007DF0 00014B80 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00007DF4 00014B84 7C 08 02 A6 */ mflr r0 +/* 00007DF8 00014B88 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 00007DFC 00014B8C 90 01 00 14 */ stw r0, 0x14(r1) +/* 00007E00 00014B90 3D 20 00 00 */ lis r9, TheICEManager+0x28@ha +/* 00007E04 00014B94 7C 7F 1B 78 */ mr r31, r3 +.L_00007E08: +/* 00007E08 00014B98 80 09 00 28 */ lwz r0, TheICEManager+0x28@l(r9) +/* 00007E0C 00014B9C 39 20 00 01 */ li r9, 0x1 +/* 00007E10 00014BA0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00007E14 00014BA4 41 81 7E 1C */ bgt .L_0000FC30 +/* 00007E18 00014BA8 39 20 00 00 */ li r9, 0x0 +/* 00007E1C 00014BAC 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00007E20 00014BB0 40 82 7E F0 */ bne .L_0000FD10 +/* 00007E24 00014BB4 48 00 6F 11 */ bl .L_0000ED34 +/* 00007E28 00014BB8 2C 03 00 00 */ cmpwi r3, 0x0 +.L_00007E2C: +/* 00007E2C 00014BBC 41 82 7E F0 */ beq .L_0000FD1C +/* 00007E30 00014BC0 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@ha +/* 00007E34 00014BC4 80 09 00 00 */ lwz r0, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@l(r9) +/* 00007E38 00014BC8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00007E3C 00014BCC 40 82 7E F0 */ bne .L_0000FD2C +/* 00007E40 00014BD0 3F C0 00 00 */ lis r30, _11GRaceStatus.fObj@ha +/* 00007E44 00014BD4 81 3E 00 00 */ lwz r9, _11GRaceStatus.fObj@l(r30) +/* 00007E48 00014BD8 80 69 1A AC */ lwz r3, 0x1aac(r9) +/* 00007E4C 00014BDC 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00007E50 00014BE0 41 82 7E 78 */ beq .L_0000FCC8 +/* 00007E54 00014BE4 48 00 00 01 */ bl GetIsPursuitRace__C15GRaceParameters +/* 00007E58 00014BE8 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00007E5C 00014BEC 40 82 7E F0 */ bne .L_0000FD4C +/* 00007E60 00014BF0 80 7E 00 00 */ lwz r3, _11GRaceStatus.fObj@l(r30) +/* 00007E64 00014BF4 48 00 00 01 */ bl GetRaceTimeElapsed__C11GRaceStatus +/* 00007E68 00014BF8 3D 20 00 00 */ lis r9, .rodata+0x7D8@ha +/* 00007E6C 00014BFC C0 09 07 D8 */ lfs f0, .rodata+0x7D8@l(r9) +.L_00007E70: +/* 00007E70 00014C00 FC 01 00 00 */ fcmpu cr0, f1, f0 +/* 00007E74 00014C04 41 80 7E F0 */ blt .L_0000FD64 +/* 00007E78 00014C08 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 00007E7C 00014C0C A8 69 00 68 */ lha r3, 0x68(r9) +/* 00007E80 00014C10 80 09 00 6C */ lwz r0, 0x6c(r9) +.L_00007E84: +/* 00007E84 00014C14 7C 7F 1A 14 */ add r3, r31, r3 +/* 00007E88 00014C18 7C 08 03 A6 */ mtlr r0 +/* 00007E8C 00014C1C 4E 80 00 21 */ blrl +/* 00007E90 00014C20 2C 03 00 01 */ cmpwi r3, 0x1 +/* 00007E94 00014C24 41 82 7E F0 */ beq .L_0000FD84 +/* 00007E98 00014C28 81 3F 00 04 */ lwz r9, 0x4(r31) +.L_00007E9C: +/* 00007E9C 00014C2C A8 69 00 18 */ lha r3, 0x18(r9) +/* 00007EA0 00014C30 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 00007EA4 00014C34 7C 7F 1A 14 */ add r3, r31, r3 +/* 00007EA8 00014C38 7C 08 03 A6 */ mtlr r0 +/* 00007EAC 00014C3C 4E 80 00 21 */ blrl +/* 00007EB0 00014C40 7C 6B 1B 79 */ mr. r11, r3 +/* 00007EB4 00014C44 41 82 7E F0 */ beq .L_0000FDA4 +/* 00007EB8 00014C48 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 00007EBC 00014C4C A8 69 00 E8 */ lha r3, 0xe8(r9) +/* 00007EC0 00014C50 80 09 00 EC */ lwz r0, 0xec(r9) +/* 00007EC4 00014C54 7C 6B 1A 14 */ add r3, r11, r3 +/* 00007EC8 00014C58 7C 08 03 A6 */ mtlr r0 +/* 00007ECC 00014C5C 4E 80 00 21 */ blrl +/* 00007ED0 00014C60 48 00 6E 59 */ bl .L_0000ED28 +/* 00007ED4 00014C64 7C 63 1B 79 */ mr. r3, r3 +/* 00007ED8 00014C68 41 82 7E F0 */ beq .L_0000FDC8 +/* 00007EDC 00014C6C 3D 20 00 00 */ lis r9, gGameBreakerCamera@ha +/* 00007EE0 00014C70 80 09 00 00 */ lwz r0, gGameBreakerCamera@l(r9) +/* 00007EE4 00014C74 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00007EE8 00014C78 40 82 7E F0 */ bne .L_0000FDD8 +/* 00007EEC 00014C7C 48 00 6B D9 */ bl .L_0000EAC4 +/* 00007EF0 00014C80 80 01 00 14 */ lwz r0, 0x14(r1) +/* 00007EF4 00014C84 7C 08 03 A6 */ mtlr r0 +/* 00007EF8 00014C88 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 00007EFC 00014C8C 38 21 00 10 */ addi r1, r1, 0x10 +/* 00007F00 00014C90 4E 80 00 20 */ blr +.endfn MaybeDoPursuitCam__8CameraAIP8IVehicle + +# .text:0x7F04 | size: 0x3D0 +.fn MaybeDoJumpCam__8CameraAIP8ISimable, global +/* 00007F04 00014C94 94 21 FF 18 */ stwu r1, -0xe8(r1) +.L_00007F08: +/* 00007F08 00014C98 7C 08 02 A6 */ mflr r0 +/* 00007F0C 00014C9C F3 A1 00 D0 */ psq_st f29, 0xd0(r1), 0, qr0 +/* 00007F10 00014CA0 F3 C1 00 D8 */ psq_st f30, 0xd8(r1), 0, qr0 +/* 00007F14 00014CA4 F3 E1 00 E0 */ psq_st f31, 0xe0(r1), 0, qr0 +/* 00007F18 00014CA8 BF 21 00 B4 */ stmw r25, 0xb4(r1) +/* 00007F1C 00014CAC 90 01 00 EC */ stw r0, 0xec(r1) +/* 00007F20 00014CB0 3D 20 00 00 */ lis r9, TheICEManager+0x28@ha +/* 00007F24 00014CB4 7C 7D 1B 78 */ mr r29, r3 +/* 00007F28 00014CB8 80 09 00 28 */ lwz r0, TheICEManager+0x28@l(r9) +/* 00007F2C 00014CBC 39 20 00 01 */ li r9, 0x1 +/* 00007F30 00014CC0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00007F34 00014CC4 41 81 7F 3C */ bgt .L_0000FE70 +/* 00007F38 00014CC8 39 20 00 00 */ li r9, 0x0 +.L_00007F3C: +/* 00007F3C 00014CCC 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00007F40 00014CD0 40 82 82 B4 */ bne .L_000001F4 +/* 00007F44 00014CD4 48 00 6F 11 */ bl .L_0000EE54 +/* 00007F48 00014CD8 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00007F4C 00014CDC 41 82 82 B4 */ beq .L_00000200 +/* 00007F50 00014CE0 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@ha +/* 00007F54 00014CE4 80 09 00 00 */ lwz r0, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@l(r9) +/* 00007F58 00014CE8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00007F5C 00014CEC 40 82 82 B4 */ bne .L_00000210 +/* 00007F60 00014CF0 3C 80 00 00 */ lis r4, _IHandle__8IVehicle@ha +/* 00007F64 00014CF4 80 7D 00 00 */ lwz r3, 0x0(r29) +/* 00007F68 00014CF8 38 84 00 00 */ addi r4, r4, _IHandle__8IVehicle@l +/* 00007F6C 00014CFC 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 00007F70 00014D00 7C 6B 1B 79 */ mr. r11, r3 +/* 00007F74 00014D04 38 00 00 01 */ li r0, 0x1 +/* 00007F78 00014D08 40 82 7F 80 */ bne .L_0000FEF8 +/* 00007F7C 00014D0C 38 00 00 00 */ li r0, 0x0 +/* 00007F80 00014D10 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00007F84 00014D14 41 82 7F A8 */ beq .L_0000FF2C +/* 00007F88 00014D18 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 00007F8C 00014D1C A8 69 00 68 */ lha r3, 0x68(r9) +/* 00007F90 00014D20 80 09 00 6C */ lwz r0, 0x6c(r9) +/* 00007F94 00014D24 7C 6B 1A 14 */ add r3, r11, r3 +/* 00007F98 00014D28 7C 08 03 A6 */ mtlr r0 +/* 00007F9C 00014D2C 4E 80 00 21 */ blrl +/* 00007FA0 00014D30 2C 03 00 01 */ cmpwi r3, 0x1 +/* 00007FA4 00014D34 41 82 82 B4 */ beq .L_00000258 +/* 00007FA8 00014D38 81 3D 00 04 */ lwz r9, 0x4(r29) +/* 00007FAC 00014D3C A8 69 00 E8 */ lha r3, 0xe8(r9) +/* 00007FB0 00014D40 80 09 00 EC */ lwz r0, 0xec(r9) +/* 00007FB4 00014D44 7C 7D 1A 14 */ add r3, r29, r3 +/* 00007FB8 00014D48 7C 08 03 A6 */ mtlr r0 +/* 00007FBC 00014D4C 4E 80 00 21 */ blrl +/* 00007FC0 00014D50 48 00 6E 59 */ bl .L_0000EE18 +/* 00007FC4 00014D54 7C 7C 1B 79 */ mr. r28, r3 +/* 00007FC8 00014D58 41 82 82 B4 */ beq .L_0000027C +/* 00007FCC 00014D5C 3D 20 00 00 */ lis r9, .rodata+0x7F0@ha +.L_00007FD0: +/* 00007FD0 00014D60 C0 1C 02 B8 */ lfs f0, 0x2b8(r28) +/* 00007FD4 00014D64 C3 E9 07 F0 */ lfs f31, .rodata+0x7F0@l(r9) +/* 00007FD8 00014D68 FC 00 F8 00 */ fcmpu cr0, f0, f31 +.L_00007FDC: +/* 00007FDC 00014D6C 41 81 82 B4 */ bgt .L_00000290 +/* 00007FE0 00014D70 3D 20 00 00 */ lis r9, gGameBreakerCamera@ha +/* 00007FE4 00014D74 83 E9 00 00 */ lwz r31, gGameBreakerCamera@l(r9) +/* 00007FE8 00014D78 2C 1F 00 00 */ cmpwi r31, 0x0 +/* 00007FEC 00014D7C 40 82 82 B4 */ bne .L_000002A0 +/* 00007FF0 00014D80 81 3D 00 04 */ lwz r9, 0x4(r29) +/* 00007FF4 00014D84 38 81 00 08 */ addi r4, r1, 0x8 +/* 00007FF8 00014D88 A8 69 00 D8 */ lha r3, 0xd8(r9) +/* 00007FFC 00014D8C 80 09 00 DC */ lwz r0, 0xdc(r9) +/* 00008000 00014D90 7C 7D 1A 14 */ add r3, r29, r3 +.L_00008004: +/* 00008004 00014D94 7C 08 03 A6 */ mtlr r0 +/* 00008008 00014D98 4E 80 00 21 */ blrl +/* 0000800C 00014D9C 38 61 00 08 */ addi r3, r1, 0x8 +/* 00008010 00014DA0 48 00 00 01 */ bl VU0_v3lengthsquare__FRCQ25UMath7Vector3 +/* 00008014 00014DA4 48 00 00 01 */ bl VU0_sqrt__Ff +/* 00008018 00014DA8 3D 20 00 00 */ lis r9, .rodata+0x7F4@ha +/* 0000801C 00014DAC FF A0 08 90 */ fmr f29, f1 +/* 00008020 00014DB0 C0 09 07 F4 */ lfs f0, .rodata+0x7F4@l(r9) +/* 00008024 00014DB4 FC 1D 00 00 */ fcmpu cr0, f29, f0 +/* 00008028 00014DB8 41 80 82 B4 */ blt .L_000002DC +/* 0000802C 00014DBC 81 3D 00 04 */ lwz r9, 0x4(r29) +/* 00008030 00014DC0 3F C0 00 00 */ lis r30, TheTrackPathManager@ha +/* 00008034 00014DC4 3B DE 00 00 */ addi r30, r30, TheTrackPathManager@l +/* 00008038 00014DC8 3B 60 00 00 */ li r27, 0x0 +/* 0000803C 00014DCC 80 09 00 CC */ lwz r0, 0xcc(r9) +/* 00008040 00014DD0 A8 69 00 C8 */ lha r3, 0xc8(r9) +/* 00008044 00014DD4 7C 08 03 A6 */ mtlr r0 +/* 00008048 00014DD8 7C 7D 1A 14 */ add r3, r29, r3 +/* 0000804C 00014DDC 4E 80 00 21 */ blrl +/* 00008050 00014DE0 7C 69 1B 78 */ mr r9, r3 +/* 00008054 00014DE4 38 81 00 18 */ addi r4, r1, 0x18 +/* 00008058 00014DE8 C0 09 00 00 */ lfs f0, 0x0(r9) +/* 0000805C 00014DEC 7F C3 F3 78 */ mr r3, r30 +/* 00008060 00014DF0 C1 89 00 04 */ lfs f12, 0x4(r9) +/* 00008064 00014DF4 38 A0 00 0C */ li r5, 0xc +.L_00008068: +/* 00008068 00014DF8 C1 A9 00 08 */ lfs f13, 0x8(r9) +/* 0000806C 00014DFC FC 00 00 50 */ fneg f0, f0 +/* 00008070 00014E00 D0 01 00 1C */ stfs f0, 0x1c(r1) +/* 00008074 00014E04 38 C0 00 00 */ li r6, 0x0 +/* 00008078 00014E08 D1 A1 00 18 */ stfs f13, 0x18(r1) +/* 0000807C 00014E0C D1 81 00 20 */ stfs f12, 0x20(r1) +/* 00008080 00014E10 48 00 00 01 */ bl FindZone__16TrackPathManagerPC8bVector218eTrackPathZoneTypeP13TrackPathZone +/* 00008084 00014E14 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00008088 00014E18 41 82 80 90 */ beq .L_00000118 +/* 0000808C 00014E1C 3B 60 00 01 */ li r27, 0x1 +/* 00008090 00014E20 3D 20 00 00 */ lis r9, .rodata+0x7F8@ha +.L_00008094: +/* 00008094 00014E24 D3 E1 00 AC */ stfs f31, 0xac(r1) +/* 00008098 00014E28 C0 29 07 F8 */ lfs f1, .rodata+0x7F8@l(r9) +/* 0000809C 00014E2C 7F A3 EB 78 */ mr r3, r29 +/* 000080A0 00014E30 D3 E1 00 A8 */ stfs f31, 0xa8(r1) +/* 000080A4 00014E34 38 81 00 A8 */ addi r4, r1, 0xa8 +/* 000080A8 00014E38 38 A1 00 AC */ addi r5, r1, 0xac +/* 000080AC 00014E3C 48 00 71 7D */ bl .L_0000F228 +/* 000080B0 00014E40 3D 20 00 00 */ lis r9, .rodata+0x7FC@ha +/* 000080B4 00014E44 FF C0 08 90 */ fmr f30, f1 +/* 000080B8 00014E48 C0 09 07 FC */ lfs f0, .rodata+0x7FC@l(r9) +/* 000080BC 00014E4C FC 1E 00 00 */ fcmpu cr0, f30, f0 +/* 000080C0 00014E50 4C 62 0B 82 */ cror un, eq, gt +/* 000080C4 00014E54 41 83 82 B4 */ bso .L_00000378 +/* 000080C8 00014E58 C1 81 00 A8 */ lfs f12, 0xa8(r1) +/* 000080CC 00014E5C FC 0C 00 00 */ fcmpu cr0, f12, f0 +/* 000080D0 00014E60 4C 62 0B 82 */ cror un, eq, gt +/* 000080D4 00014E64 41 83 82 B4 */ bso .L_00000388 +/* 000080D8 00014E68 3D 20 00 00 */ lis r9, .rodata+0x800@ha +/* 000080DC 00014E6C C1 A1 00 AC */ lfs f13, 0xac(r1) +.L_000080E0: +/* 000080E0 00014E70 C0 09 08 00 */ lfs f0, .rodata+0x800@l(r9) +/* 000080E4 00014E74 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 000080E8 00014E78 4C 62 0B 82 */ cror un, eq, gt +/* 000080EC 00014E7C 41 83 82 B4 */ bso .L_000003A0 +/* 000080F0 00014E80 3D 20 00 00 */ lis r9, .rodata+0x804@ha +/* 000080F4 00014E84 C3 E9 08 04 */ lfs f31, .rodata+0x804@l(r9) +/* 000080F8 00014E88 FC 1E F8 00 */ fcmpu cr0, f30, f31 +/* 000080FC 00014E8C 4C 62 03 82 */ cror un, eq, lt +/* 00008100 00014E90 41 83 82 B4 */ bso .L_000003B4 +/* 00008104 00014E94 3D 20 00 00 */ lis r9, Tweak_JumpCamHighestAirTresh@ha +/* 00008108 00014E98 57 60 10 3A */ slwi r0, r27, 2 +/* 0000810C 00014E9C 39 29 00 00 */ addi r9, r9, Tweak_JumpCamHighestAirTresh@l +/* 00008110 00014EA0 7C 09 04 2E */ lfsx f0, r9, r0 +/* 00008114 00014EA4 FC 0C 00 00 */ fcmpu cr0, f12, f0 +/* 00008118 00014EA8 4C 62 03 82 */ cror un, eq, lt +/* 0000811C 00014EAC 41 83 82 78 */ bso .L_00000394 +/* 00008120 00014EB0 3D 20 00 00 */ lis r9, Tweak_JumpCamLongestAirTresh@ha +/* 00008124 00014EB4 ED AD 07 72 */ fmuls f13, f13, f29 +/* 00008128 00014EB8 39 29 00 00 */ addi r9, r9, Tweak_JumpCamLongestAirTresh@l +/* 0000812C 00014EBC 7C 09 04 2E */ lfsx f0, r9, r0 +/* 00008130 00014EC0 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 00008134 00014EC4 4C 62 03 82 */ cror un, eq, lt +/* 00008138 00014EC8 41 83 82 78 */ bso .L_000003B0 +/* 0000813C 00014ECC 80 7C 00 04 */ lwz r3, 0x4(r28) +/* 00008140 00014ED0 3C 80 00 00 */ lis r4, .rodata+0x7DC@ha +/* 00008144 00014ED4 38 84 07 DC */ addi r4, r4, .rodata+0x7DC@l +/* 00008148 00014ED8 3F 20 A3 44 */ lis r25, 0xa344 +/* 0000814C 00014EDC 48 00 70 B5 */ bl .L_0000F200 +/* 00008150 00014EE0 63 39 7E 3F */ ori r25, r25, 0x7e3f +/* 00008154 00014EE4 C0 01 00 AC */ lfs f0, 0xac(r1) +.L_00008158: +/* 00008158 00014EE8 3D 20 00 00 */ lis r9, .rodata+0x808@ha +/* 0000815C 00014EEC C1 89 08 08 */ lfs f12, .rodata+0x808@l(r9) +/* 00008160 00014EF0 7F 83 E3 78 */ mr r3, r28 +/* 00008164 00014EF4 EC 00 00 2A */ fadds f0, f0, f0 +/* 00008168 00014EF8 EC 20 F8 28 */ fsubs f1, f0, f31 +/* 0000816C 00014EFC FC 21 F8 2E */ fsel f1, f1, f0, f31 +.L_00008170: +/* 00008170 00014F00 ED AC 08 28 */ fsubs f13, f12, f1 +/* 00008174 00014F04 FC 2D 60 6E */ fsel f1, f13, f1, f12 +/* 00008178 00014F08 48 00 60 21 */ bl .L_0000E198 +/* 0000817C 00014F0C 3D 20 00 00 */ lis r9, _Q25UMath7Vector4.kZero@ha +/* 00008180 00014F10 39 61 00 70 */ addi r11, r1, 0x70 +/* 00008184 00014F14 80 A9 00 00 */ lwz r5, _Q25UMath7Vector4.kZero@l(r9) +/* 00008188 00014F18 39 41 00 80 */ addi r10, r1, 0x80 +/* 0000818C 00014F1C 39 29 00 00 */ addi r9, r9, _Q25UMath7Vector4.kZero@l +/* 00008190 00014F20 38 E1 00 90 */ addi r7, r1, 0x90 +/* 00008194 00014F24 80 C9 00 0C */ lwz r6, 0xc(r9) +/* 00008198 00014F28 38 61 00 A0 */ addi r3, r1, 0xa0 +.L_0000819C: +/* 0000819C 00014F2C 81 09 00 04 */ lwz r8, 0x4(r9) +.L_000081A0: +/* 000081A0 00014F30 80 09 00 08 */ lwz r0, 0x8(r9) +/* 000081A4 00014F34 90 A1 00 70 */ stw r5, 0x70(r1) +/* 000081A8 00014F38 90 CB 00 0C */ stw r6, 0xc(r11) +/* 000081AC 00014F3C 91 0B 00 04 */ stw r8, 0x4(r11) +/* 000081B0 00014F40 90 0B 00 08 */ stw r0, 0x8(r11) +/* 000081B4 00014F44 90 A1 00 80 */ stw r5, 0x80(r1) +/* 000081B8 00014F48 90 CA 00 0C */ stw r6, 0xc(r10) +/* 000081BC 00014F4C 91 0A 00 04 */ stw r8, 0x4(r10) +/* 000081C0 00014F50 90 0A 00 08 */ stw r0, 0x8(r10) +.L_000081C4: +/* 000081C4 00014F54 90 A1 00 90 */ stw r5, 0x90(r1) +/* 000081C8 00014F58 90 C7 00 0C */ stw r6, 0xc(r7) +/* 000081CC 00014F5C 91 07 00 04 */ stw r8, 0x4(r7) +/* 000081D0 00014F60 90 07 00 08 */ stw r0, 0x8(r7) +/* 000081D4 00014F64 48 00 00 01 */ bl _GetKind__15MGamePlayMoment +/* 000081D8 00014F68 80 01 00 78 */ lwz r0, 0x78(r1) +/* 000081DC 00014F6C 3B 60 00 48 */ li r27, 0x48 +/* 000081E0 00014F70 83 81 00 A0 */ lwz r28, 0xa0(r1) +/* 000081E4 00014F74 3C 60 00 00 */ lis r3, .rodata+0x770@ha +.L_000081E8: +/* 000081E8 00014F78 83 41 00 70 */ lwz r26, 0x70(r1) +/* 000081EC 00014F7C 38 63 07 70 */ addi r3, r3, .rodata+0x770@l +/* 000081F0 00014F80 83 A1 00 74 */ lwz r29, 0x74(r1) +/* 000081F4 00014F84 81 21 00 7C */ lwz r9, 0x7c(r1) +.L_000081F8: +/* 000081F8 00014F88 81 61 00 80 */ lwz r11, 0x80(r1) +/* 000081FC 00014F8C 81 41 00 84 */ lwz r10, 0x84(r1) +/* 00008200 00014F90 81 01 00 88 */ lwz r8, 0x88(r1) +/* 00008204 00014F94 80 E1 00 8C */ lwz r7, 0x8c(r1) +/* 00008208 00014F98 80 C1 00 90 */ lwz r6, 0x90(r1) +/* 0000820C 00014F9C 80 A1 00 94 */ lwz r5, 0x94(r1) +/* 00008210 00014FA0 80 81 00 98 */ lwz r4, 0x98(r1) +/* 00008214 00014FA4 83 C1 00 9C */ lwz r30, 0x9c(r1) +/* 00008218 00014FA8 90 01 00 40 */ stw r0, 0x40(r1) +/* 0000821C 00014FAC 93 81 00 28 */ stw r28, 0x28(r1) +/* 00008220 00014FB0 93 61 00 30 */ stw r27, 0x30(r1) +/* 00008224 00014FB4 93 41 00 38 */ stw r26, 0x38(r1) +/* 00008228 00014FB8 93 A1 00 3C */ stw r29, 0x3c(r1) +/* 0000822C 00014FBC 91 21 00 44 */ stw r9, 0x44(r1) +/* 00008230 00014FC0 91 61 00 48 */ stw r11, 0x48(r1) +/* 00008234 00014FC4 91 41 00 4C */ stw r10, 0x4c(r1) +/* 00008238 00014FC8 91 01 00 50 */ stw r8, 0x50(r1) +/* 0000823C 00014FCC 90 E1 00 54 */ stw r7, 0x54(r1) +/* 00008240 00014FD0 90 C1 00 58 */ stw r6, 0x58(r1) +/* 00008244 00014FD4 90 A1 00 5C */ stw r5, 0x5c(r1) +/* 00008248 00014FD8 90 81 00 60 */ stw r4, 0x60(r1) +/* 0000824C 00014FDC 93 C1 00 64 */ stw r30, 0x64(r1) +/* 00008250 00014FE0 93 E1 00 68 */ stw r31, 0x68(r1) +/* 00008254 00014FE4 93 21 00 6C */ stw r25, 0x6c(r1) +/* 00008258 00014FE8 93 E1 00 2C */ stw r31, 0x2c(r1) +/* 0000825C 00014FEC 93 E1 00 34 */ stw r31, 0x34(r1) +/* 00008260 00014FF0 48 00 00 01 */ bl stringhash32__FPCc +/* 00008264 00014FF4 7C 60 1B 78 */ mr r0, r3 +/* 00008268 00014FF8 90 01 00 2C */ stw r0, 0x2c(r1) +.L_0000826C: +/* 0000826C 00014FFC 38 61 00 28 */ addi r3, r1, 0x28 +/* 00008270 00015000 90 01 00 70 */ stw r0, 0x70(r1) +/* 00008274 00015004 48 00 00 01 */ bl Deliver__Q26Hermes7Message +/* 00008278 00015008 3D 20 00 00 */ lis r9, .rodata+0x804@ha +/* 0000827C 0001500C C0 09 08 04 */ lfs f0, .rodata+0x804@l(r9) +/* 00008280 00015010 FC 1E 00 00 */ fcmpu cr0, f30, f0 +/* 00008284 00015014 4C 62 03 82 */ cror un, eq, lt +/* 00008288 00015018 41 83 82 B4 */ bso .L_0000053C +/* 0000828C 0001501C 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst9Singleton1Z7SoundAI.mInstance@ha +/* 00008290 00015020 80 69 00 00 */ lwz r3, _Q33UTL11Collectionst9Singleton1Z7SoundAI.mInstance@l(r9) +/* 00008294 00015024 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00008298 00015028 41 82 82 B4 */ beq .L_0000054C +/* 0000829C 0001502C 80 63 02 0C */ lwz r3, 0x20c(r3) +/* 000082A0 00015030 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000082A4 00015034 41 82 82 B4 */ beq .L_00000558 +/* 000082A8 00015038 C0 21 00 A8 */ lfs f1, 0xa8(r1) +/* 000082AC 0001503C C0 41 00 AC */ lfs f2, 0xac(r1) +/* 000082B0 00015040 48 00 00 01 */ bl NotifyAirborne__8Observerff +/* 000082B4 00015044 80 01 00 EC */ lwz r0, 0xec(r1) +/* 000082B8 00015048 7C 08 03 A6 */ mtlr r0 +/* 000082BC 0001504C BB 21 00 B4 */ lmw r25, 0xb4(r1) +/* 000082C0 00015050 E3 A1 00 D0 */ psq_l f29, 0xd0(r1), 0, qr0 +/* 000082C4 00015054 E3 C1 00 D8 */ psq_l f30, 0xd8(r1), 0, qr0 +/* 000082C8 00015058 E3 E1 00 E0 */ psq_l f31, 0xe0(r1), 0, qr0 +/* 000082CC 0001505C 38 21 00 E8 */ addi r1, r1, 0xe8 +/* 000082D0 00015060 4E 80 00 20 */ blr +.endfn MaybeDoJumpCam__8CameraAIP8ISimable + +# .text:0x82D4 | size: 0x74 +.fn GetName__C13CDActionDrive, global +/* 000082D4 00015064 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 000082D8 00015068 7C 08 02 A6 */ mflr r0 +/* 000082DC 0001506C BF A1 00 0C */ stmw r29, 0xc(r1) +/* 000082E0 00015070 90 01 00 1C */ stw r0, 0x1c(r1) +/* 000082E4 00015074 3F E0 00 00 */ lis r31, _.tmp_7.10839@ha +/* 000082E8 00015078 80 1F 00 00 */ lwz r0, _.tmp_7.10839@l(r31) +/* 000082EC 0001507C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000082F0 00015080 40 82 83 2C */ bne .L_0000061C +/* 000082F4 00015084 3F C0 00 00 */ lis r30, .rodata+0x74C@ha +/* 000082F8 00015088 3F A0 00 00 */ lis r29, name.10838@ha +/* 000082FC 0001508C 3B DE 07 4C */ addi r30, r30, .rodata+0x74C@l +/* 00008300 00015090 3B BD 00 00 */ addi r29, r29, name.10838@l +/* 00008304 00015094 7F C3 F3 78 */ mr r3, r30 +/* 00008308 00015098 48 00 00 01 */ bl StringHash64__6AttribPCc +/* 0000830C 0001509C 90 7D 00 00 */ stw r3, 0x0(r29) +/* 00008310 000150A0 90 9D 00 04 */ stw r4, 0x4(r29) +/* 00008314 000150A4 7F C3 F3 78 */ mr r3, r30 +/* 00008318 000150A8 48 00 00 01 */ bl StringHash32__6AttribPCc +/* 0000831C 000150AC 38 00 00 01 */ li r0, 0x1 +/* 00008320 000150B0 93 DD 00 0C */ stw r30, 0xc(r29) +/* 00008324 000150B4 90 1F 00 00 */ stw r0, _.tmp_7.10839@l(r31) +/* 00008328 000150B8 90 7D 00 08 */ stw r3, 0x8(r29) +/* 0000832C 000150BC 3C 60 00 00 */ lis r3, name.10838@ha +/* 00008330 000150C0 38 63 00 00 */ addi r3, r3, name.10838@l +/* 00008334 000150C4 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 00008338 000150C8 7C 08 03 A6 */ mtlr r0 +/* 0000833C 000150CC BB A1 00 0C */ lmw r29, 0xc(r1) +/* 00008340 000150D0 38 21 00 18 */ addi r1, r1, 0x18 +/* 00008344 000150D4 4E 80 00 20 */ blr +.endfn GetName__C13CDActionDrive + +# .text:0x8348 | size: 0x2C +.fn GetNext__C13CDActionDrive, global +/* 00008348 000150D8 3D 00 00 00 */ lis r8, .rodata@ha +/* 0000834C 000150DC 39 20 00 00 */ li r9, 0x0 +/* 00008350 000150E0 7C 6B 1B 78 */ mr r11, r3 +/* 00008354 000150E4 39 08 00 00 */ addi r8, r8, .rodata@l +/* 00008358 000150E8 39 40 00 00 */ li r10, 0x0 +/* 0000835C 000150EC 38 00 00 00 */ li r0, 0x0 +/* 00008360 000150F0 91 2B 00 00 */ stw r9, 0x0(r11) +/* 00008364 000150F4 91 4B 00 04 */ stw r10, 0x4(r11) +/* 00008368 000150F8 90 0B 00 08 */ stw r0, 0x8(r11) +/* 0000836C 000150FC 91 0B 00 0C */ stw r8, 0xc(r11) +/* 00008370 00015100 4E 80 00 20 */ blr +.endfn GetNext__C13CDActionDrive + +# .text:0x8374 | size: 0x28 +.fn SetSpecial__13CDActionDrivef, global +/* 00008374 00015104 3D 20 00 00 */ lis r9, .rodata+0x818@ha +.L_00008378: +/* 00008378 00015108 C0 09 08 18 */ lfs f0, .rodata+0x818@l(r9) +/* 0000837C 0001510C FC 01 00 00 */ fcmpu cr0, f1, f0 +/* 00008380 00015110 4C 62 03 82 */ cror un, eq, lt +/* 00008384 00015114 4D 83 00 20 */ bsolr +/* 00008388 00015118 3D 20 00 00 */ lis r9, kCinematicMomementSeconds@ha +/* 0000838C 0001511C 38 00 00 01 */ li r0, 0x1 +/* 00008390 00015120 D0 29 00 00 */ stfs f1, kCinematicMomementSeconds@l(r9) +.L_00008394: +/* 00008394 00015124 90 03 00 74 */ stw r0, 0x74(r3) +/* 00008398 00015128 4E 80 00 20 */ blr +.endfn SetSpecial__13CDActionDrivef + +# .text:0x839C | size: 0x24 +.fn Attach__13CDActionDrivePQ33UTL3COM8IUnknown, global +/* 0000839C 0001512C 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 000083A0 00015130 7C 08 02 A6 */ mflr r0 +.L_000083A4: +/* 000083A4 00015134 90 01 00 0C */ stw r0, 0xc(r1) +/* 000083A8 00015138 80 63 00 4C */ lwz r3, 0x4c(r3) +/* 000083AC 0001513C 48 00 00 01 */ bl Attach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +/* 000083B0 00015140 80 01 00 0C */ lwz r0, 0xc(r1) +/* 000083B4 00015144 7C 08 03 A6 */ mtlr r0 +/* 000083B8 00015148 38 21 00 08 */ addi r1, r1, 0x8 +/* 000083BC 0001514C 4E 80 00 20 */ blr +.endfn Attach__13CDActionDrivePQ33UTL3COM8IUnknown + +# .text:0x83C0 | size: 0x24 +.fn Detach__13CDActionDrivePQ33UTL3COM8IUnknown, global +/* 000083C0 00015150 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 000083C4 00015154 7C 08 02 A6 */ mflr r0 +/* 000083C8 00015158 90 01 00 0C */ stw r0, 0xc(r1) +.L_000083CC: +/* 000083CC 0001515C 80 63 00 4C */ lwz r3, 0x4c(r3) +/* 000083D0 00015160 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +.L_000083D4: +/* 000083D4 00015164 80 01 00 0C */ lwz r0, 0xc(r1) +/* 000083D8 00015168 7C 08 03 A6 */ mtlr r0 +/* 000083DC 0001516C 38 21 00 08 */ addi r1, r1, 0x8 +/* 000083E0 00015170 4E 80 00 20 */ blr +.endfn Detach__13CDActionDrivePQ33UTL3COM8IUnknown + +# .text:0x83E4 | size: 0x24 +.fn IsAttached__C13CDActionDrivePCQ33UTL3COM8IUnknown, global +/* 000083E4 00015174 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 000083E8 00015178 7C 08 02 A6 */ mflr r0 +/* 000083EC 0001517C 90 01 00 0C */ stw r0, 0xc(r1) +/* 000083F0 00015180 80 63 00 4C */ lwz r3, 0x4c(r3) +/* 000083F4 00015184 48 00 00 01 */ bl IsAttached__CQ23Sim11AttachmentsPCQ33UTL3COM8IUnknown +/* 000083F8 00015188 80 01 00 0C */ lwz r0, 0xc(r1) +/* 000083FC 0001518C 7C 08 03 A6 */ mtlr r0 +/* 00008400 00015190 38 21 00 08 */ addi r1, r1, 0x8 +/* 00008404 00015194 4E 80 00 20 */ blr +.endfn IsAttached__C13CDActionDrivePCQ33UTL3COM8IUnknown + +# .text:0x8408 | size: 0x8 +.fn GetAttachments__C13CDActionDrive, global +/* 00008408 00015198 80 63 00 4C */ lwz r3, 0x4c(r3) +/* 0000840C 0001519C 4E 80 00 20 */ blr +.endfn GetAttachments__C13CDActionDrive + +# .text:0x8410 | size: 0x11C +.fn Construct__13CDActionDrivePQ28CameraAI8Director, global +/* 00008410 000151A0 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 00008414 000151A4 7C 08 02 A6 */ mflr r0 +/* 00008418 000151A8 BF 61 00 0C */ stmw r27, 0xc(r1) +/* 0000841C 000151AC 90 01 00 24 */ stw r0, 0x24(r1) +/* 00008420 000151B0 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@ha +/* 00008424 000151B4 7C 7B 1B 78 */ mr r27, r3 +/* 00008428 000151B8 39 29 00 00 */ addi r9, r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@l +/* 0000842C 000151BC 3B 80 00 00 */ li r28, 0x0 +/* 00008430 000151C0 83 E9 00 30 */ lwz r31, 0x30(r9) +/* 00008434 000151C4 7D 3D 4B 78 */ mr r29, r9 +/* 00008438 000151C8 80 1D 00 38 */ lwz r0, 0x38(r29) +/* 0000843C 000151CC 81 3D 00 30 */ lwz r9, 0x30(r29) +/* 00008440 000151D0 54 00 10 3A */ slwi r0, r0, 2 +/* 00008444 000151D4 7D 29 02 14 */ add r9, r9, r0 +/* 00008448 000151D8 7C 1F 48 00 */ cmpw r31, r9 +/* 0000844C 000151DC 41 82 84 84 */ beq .L_000008D0 +/* 00008450 000151E0 83 DF 00 00 */ lwz r30, 0x0(r31) +/* 00008454 000151E4 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 00008458 000151E8 80 09 00 64 */ lwz r0, 0x64(r9) +/* 0000845C 000151EC A8 69 00 60 */ lha r3, 0x60(r9) +/* 00008460 000151F0 7C 08 03 A6 */ mtlr r0 +/* 00008464 000151F4 7C 7E 1A 14 */ add r3, r30, r3 +/* 00008468 000151F8 4E 80 00 21 */ blrl +/* 0000846C 000151FC 80 1B 00 04 */ lwz r0, 0x4(r27) +/* 00008470 00015200 7C 03 00 00 */ cmpw r3, r0 +/* 00008474 00015204 41 82 84 80 */ beq .L_000008F4 +/* 00008478 00015208 3B FF 00 04 */ addi r31, r31, 0x4 +/* 0000847C 0001520C 48 00 84 38 */ b .L_000108B4 +/* 00008480 00015210 7F DC F3 78 */ mr r28, r30 +/* 00008484 00015214 2C 1C 00 00 */ cmpwi r28, 0x0 +/* 00008488 00015218 41 82 85 14 */ beq .L_0000099C +/* 0000848C 0001521C 81 3C 00 04 */ lwz r9, 0x4(r28) +/* 00008490 00015220 A8 69 00 30 */ lha r3, 0x30(r9) +/* 00008494 00015224 80 09 00 34 */ lwz r0, 0x34(r9) +/* 00008498 00015228 7C 7C 1A 14 */ add r3, r28, r3 +/* 0000849C 0001522C 7C 08 03 A6 */ mtlr r0 +/* 000084A0 00015230 4E 80 00 21 */ blrl +/* 000084A4 00015234 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000084A8 00015238 41 82 85 14 */ beq .L_000009BC +/* 000084AC 0001523C 81 3C 00 04 */ lwz r9, 0x4(r28) +/* 000084B0 00015240 A8 69 00 10 */ lha r3, 0x10(r9) +/* 000084B4 00015244 80 09 00 14 */ lwz r0, 0x14(r9) +/* 000084B8 00015248 7C 7C 1A 14 */ add r3, r28, r3 +/* 000084BC 0001524C 7C 08 03 A6 */ mtlr r0 +/* 000084C0 00015250 4E 80 00 21 */ blrl +.L_000084C4: +/* 000084C4 00015254 7C 6B 1B 79 */ mr. r11, r3 +/* 000084C8 00015258 41 82 85 14 */ beq .L_000009DC +/* 000084CC 0001525C 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 000084D0 00015260 A8 69 00 E8 */ lha r3, 0xe8(r9) +/* 000084D4 00015264 80 09 00 EC */ lwz r0, 0xec(r9) +/* 000084D8 00015268 7C 6B 1A 14 */ add r3, r11, r3 +/* 000084DC 0001526C 7C 08 03 A6 */ mtlr r0 +/* 000084E0 00015270 4E 80 00 21 */ blrl +/* 000084E4 00015274 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000084E8 00015278 38 60 00 00 */ li r3, 0x0 +/* 000084EC 0001527C 41 82 85 18 */ beq .L_00000A04 +/* 000084F0 00015280 3C 60 00 00 */ lis r3, gFastMem@ha +/* 000084F4 00015284 38 80 00 80 */ li r4, 0x80 +/* 000084F8 00015288 38 A0 00 00 */ li r5, 0x0 +/* 000084FC 0001528C 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 00008500 00015290 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 00008504 00015294 7F 64 DB 78 */ mr r4, r27 +/* 00008508 00015298 7F 85 E3 78 */ mr r5, r28 +/* 0000850C 0001529C 48 00 85 2D */ bl .L_00010A38 +/* 00008510 000152A0 48 00 85 18 */ b .L_00010A28 +/* 00008514 000152A4 38 60 00 00 */ li r3, 0x0 +/* 00008518 000152A8 80 01 00 24 */ lwz r0, 0x24(r1) +/* 0000851C 000152AC 7C 08 03 A6 */ mtlr r0 +/* 00008520 000152B0 BB 61 00 0C */ lmw r27, 0xc(r1) +/* 00008524 000152B4 38 21 00 20 */ addi r1, r1, 0x20 +/* 00008528 000152B8 4E 80 00 20 */ blr +.endfn Construct__13CDActionDrivePQ28CameraAI8Director + +# .text:0x852C | size: 0x5B0 +.fn __13CDActionDrivePQ28CameraAI8DirectorP7IPlayer, global +/* 0000852C 000152BC 94 21 FF 68 */ stwu r1, -0x98(r1) +/* 00008530 000152C0 7C 08 02 A6 */ mflr r0 +/* 00008534 000152C4 7D 80 00 26 */ mfcr r12 +/* 00008538 000152C8 BE 61 00 64 */ stmw r19, 0x64(r1) +/* 0000853C 000152CC 90 01 00 9C */ stw r0, 0x9c(r1) +/* 00008540 000152D0 91 81 00 60 */ stw r12, 0x60(r1) +/* 00008544 000152D4 7C 7F 1B 78 */ mr r31, r3 +/* 00008548 000152D8 7C 97 23 78 */ mr r23, r4 +/* 0000854C 000152DC 38 80 00 00 */ li r4, 0x0 +/* 00008550 000152E0 7C B4 2B 78 */ mr r20, r5 +/* 00008554 000152E4 3A DF 00 24 */ addi r22, r31, 0x24 +/* 00008558 000152E8 48 00 00 01 */ bl __Q43UTL3COM6Object6_IListUi +/* 0000855C 000152EC 3F 00 00 00 */ lis r24, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha +/* 00008560 000152F0 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha +/* 00008564 000152F4 3D 60 00 00 */ lis r11, _vt.Q33UTL3COM8IUnknown@ha +/* 00008568 000152F8 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l +/* 0000856C 000152FC 39 6B 00 00 */ addi r11, r11, _vt.Q33UTL3COM8IUnknown@l +/* 00008570 00015300 3C 80 00 00 */ lis r4, _IHandle__11IAttachable@ha +/* 00008574 00015304 93 FF 00 18 */ stw r31, 0x18(r31) +/* 00008578 00015308 91 3F 00 14 */ stw r9, 0x14(r31) +/* 0000857C 0001530C 38 84 00 00 */ addi r4, r4, _IHandle__11IAttachable@l +/* 00008580 00015310 91 7F 00 1C */ stw r11, 0x1c(r31) +/* 00008584 00015314 7F E3 FB 78 */ mr r3, r31 +/* 00008588 00015318 38 BF 00 18 */ addi r5, r31, 0x18 +/* 0000858C 0001531C 3B B8 00 00 */ addi r29, r24, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l +.L_00008590: +/* 00008590 00015320 48 00 00 01 */ bl Add__Q43UTL3COM6Object6_IListPvPQ33UTL3COM8IUnknown +/* 00008594 00015324 3E 60 00 00 */ lis r19, gCinematicMomementCamera@ha +/* 00008598 00015328 3D 20 00 00 */ lis r9, _vt.11IAttachable@ha +/* 0000859C 0001532C 3D 60 00 00 */ lis r11, _vt.Q33Sim9Collision9IListener@ha +/* 000085A0 00015330 39 29 00 00 */ addi r9, r9, _vt.11IAttachable@l +/* 000085A4 00015334 39 6B 00 00 */ addi r11, r11, _vt.Q33Sim9Collision9IListener@l +/* 000085A8 00015338 91 3F 00 1C */ stw r9, 0x1c(r31) +/* 000085AC 0001533C 3A A1 00 58 */ addi r21, r1, 0x58 +/* 000085B0 00015340 91 7F 00 20 */ stw r11, 0x20(r31) +/* 000085B4 00015344 3B 41 00 18 */ addi r26, r1, 0x18 +/* 000085B8 00015348 92 C1 00 58 */ stw r22, 0x58(r1) +/* 000085BC 0001534C 80 9D 00 08 */ lwz r4, 0x8(r29) +/* 000085C0 00015350 80 1D 00 04 */ lwz r0, 0x4(r29) +/* 000085C4 00015354 7C 04 00 40 */ cmplw r4, r0 +/* 000085C8 00015358 41 80 86 A8 */ blt .L_00000C70 +/* 000085CC 0001535C 81 3D 00 0C */ lwz r9, 0xc(r29) +/* 000085D0 00015360 38 84 00 01 */ addi r4, r4, 0x1 +/* 000085D4 00015364 80 09 00 24 */ lwz r0, 0x24(r9) +.L_000085D8: +/* 000085D8 00015368 A8 69 00 20 */ lha r3, 0x20(r9) +/* 000085DC 0001536C 7C 08 03 A6 */ mtlr r0 +/* 000085E0 00015370 7C 63 EA 14 */ add r3, r3, r29 +/* 000085E4 00015374 4E 80 00 21 */ blrl +/* 000085E8 00015378 80 1D 00 04 */ lwz r0, 0x4(r29) +/* 000085EC 0001537C 7C 7E 1B 78 */ mr r30, r3 +/* 000085F0 00015380 7C 1E 00 40 */ cmplw r30, r0 +/* 000085F4 00015384 40 81 86 A8 */ ble .L_00000C9C +/* 000085F8 00015388 81 3D 00 0C */ lwz r9, 0xc(r29) +/* 000085FC 0001538C 7F C4 F3 78 */ mr r4, r30 +/* 00008600 00015390 80 09 00 34 */ lwz r0, 0x34(r9) +/* 00008604 00015394 A8 69 00 30 */ lha r3, 0x30(r9) +/* 00008608 00015398 7C 08 03 A6 */ mtlr r0 +/* 0000860C 0001539C 7C 63 EA 14 */ add r3, r3, r29 +/* 00008610 000153A0 4E 80 00 21 */ blrl +/* 00008614 000153A4 81 3D 00 0C */ lwz r9, 0xc(r29) +/* 00008618 000153A8 7F C4 F3 78 */ mr r4, r30 +/* 0000861C 000153AC 38 A0 00 10 */ li r5, 0x10 +/* 00008620 000153B0 83 98 00 00 */ lwz r28, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r24) +/* 00008624 000153B4 A8 69 00 10 */ lha r3, 0x10(r9) +.L_00008628: +/* 00008628 000153B8 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000862C 000153BC 7C 63 EA 14 */ add r3, r3, r29 +/* 00008630 000153C0 83 7D 00 08 */ lwz r27, 0x8(r29) +/* 00008634 000153C4 7C 08 03 A6 */ mtlr r0 +/* 00008638 000153C8 83 3D 00 04 */ lwz r25, 0x4(r29) +/* 0000863C 000153CC 4E 80 00 21 */ blrl +/* 00008640 000153D0 93 DD 00 04 */ stw r30, 0x4(r29) +/* 00008644 000153D4 7C 1C 18 00 */ cmpw r28, r3 +/* 00008648 000153D8 90 78 00 00 */ stw r3, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r24) +/* 0000864C 000153DC 41 82 86 A8 */ beq .L_00000CF4 +.L_00008650: +/* 00008650 000153E0 38 00 00 00 */ li r0, 0x0 +/* 00008654 000153E4 3B C0 00 00 */ li r30, 0x0 +/* 00008658 000153E8 90 1D 00 08 */ stw r0, 0x8(r29) +/* 0000865C 000153EC 7C 1E D8 00 */ cmpw r30, r27 +.L_00008660: +/* 00008660 000153F0 2E 1C 00 00 */ cmpwi cr4, r28, 0x0 +/* 00008664 000153F4 40 80 86 84 */ bge .L_00000CE8 +/* 00008668 000153F8 57 C4 10 3A */ slwi r4, r30, 2 +/* 0000866C 000153FC 7F A3 EB 78 */ mr r3, r29 +/* 00008670 00015400 7C 9C 22 14 */ add r4, r28, r4 +/* 00008674 00015404 3B DE 00 01 */ addi r30, r30, 0x1 +/* 00008678 00015408 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZP14ITrafficCenteri16RCP14ITrafficCenter +/* 0000867C 0001540C 7C 1E D8 00 */ cmpw r30, r27 +/* 00008680 00015410 41 80 86 68 */ blt .L_00000CE8 +/* 00008684 00015414 41 92 86 A8 */ beq cr4, SampleFloatTable__FPCfifff +/* 00008688 00015418 81 3D 00 0C */ lwz r9, 0xc(r29) +/* 0000868C 0001541C 7F 84 E3 78 */ mr r4, r28 +/* 00008690 00015420 7F 25 CB 78 */ mr r5, r25 +/* 00008694 00015424 A8 69 00 18 */ lha r3, 0x18(r9) +/* 00008698 00015428 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0000869C 0001542C 7C 7D 1A 14 */ add r3, r29, r3 +/* 000086A0 00015430 7C 08 03 A6 */ mtlr r0 +/* 000086A4 00015434 4E 80 00 21 */ blrl +/* 000086A8 00015438 81 3D 00 08 */ lwz r9, 0x8(r29) +/* 000086AC 0001543C 81 7D 00 00 */ lwz r11, 0x0(r29) +/* 000086B0 00015440 55 29 10 3A */ slwi r9, r9, 2 +/* 000086B4 00015444 7C 09 5A 14 */ add r0, r9, r11 +/* 000086B8 00015448 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000086BC 0001544C 41 82 86 C8 */ beq .L_00000D84 +/* 000086C0 00015450 80 15 00 00 */ lwz r0, 0x0(r21) +/* 000086C4 00015454 7C 09 59 2E */ stwx r0, r9, r11 +/* 000086C8 00015458 81 3D 00 08 */ lwz r9, 0x8(r29) +/* 000086CC 0001545C 3D 60 00 00 */ lis r11, _vt.14ITrafficCenter@ha +/* 000086D0 00015460 39 6B 00 00 */ addi r11, r11, _vt.14ITrafficCenter@l +/* 000086D4 00015464 3D 40 00 00 */ lis r10, _vt.13CDActionDrive.11IAttachable@ha +/* 000086D8 00015468 39 29 00 01 */ addi r9, r9, 0x1 +/* 000086DC 0001546C 3D 00 00 00 */ lis r8, _vt.13CDActionDrive.Q33Sim9Collision9IListener@ha +/* 000086E0 00015470 91 3D 00 08 */ stw r9, 0x8(r29) +/* 000086E4 00015474 3C E0 00 00 */ lis r7, _vt.13CDActionDrive.14ITrafficCenter@ha +/* 000086E8 00015478 3D 20 00 00 */ lis r9, _vt.13CDActionDrive@ha +/* 000086EC 0001547C 91 76 00 04 */ stw r11, 0x4(r22) +/* 000086F0 00015480 39 4A 00 00 */ addi r10, r10, _vt.13CDActionDrive.11IAttachable@l +/* 000086F4 00015484 39 29 00 00 */ addi r9, r9, _vt.13CDActionDrive@l +/* 000086F8 00015488 39 08 00 00 */ addi r8, r8, _vt.13CDActionDrive.Q33Sim9Collision9IListener@l +/* 000086FC 0001548C 38 E7 00 00 */ addi r7, r7, _vt.13CDActionDrive.14ITrafficCenter@l +/* 00008700 00015490 91 5F 00 1C */ stw r10, 0x1c(r31) +/* 00008704 00015494 38 7F 00 38 */ addi r3, r31, 0x38 +/* 00008708 00015498 91 3F 00 14 */ stw r9, 0x14(r31) +/* 0000870C 0001549C 38 80 00 00 */ li r4, 0x0 +/* 00008710 000154A0 91 1F 00 20 */ stw r8, 0x20(r31) +/* 00008714 000154A4 3B 60 00 00 */ li r27, 0x0 +/* 00008718 000154A8 90 FF 00 28 */ stw r7, 0x28(r31) +/* 0000871C 000154AC 3B 9F 00 18 */ addi r28, r31, 0x18 +/* 00008720 000154B0 48 00 00 01 */ bl __Q29WorldConn9ReferenceUi +/* 00008724 000154B4 3D 20 00 00 */ lis r9, .rodata+0x82C@ha +.L_00008728: +/* 00008728 000154B8 92 9F 00 48 */ stw r20, 0x48(r31) +.L_0000872C: +/* 0000872C 000154BC C0 09 08 2C */ lfs f0, .rodata+0x82C@l(r9) +/* 00008730 000154C0 3D 60 00 00 */ lis r11, .rodata+0x830@ha +/* 00008734 000154C4 93 7F 00 50 */ stw r27, 0x50(r31) +/* 00008738 000154C8 3D 20 00 00 */ lis r9, gCinematicMomementCamera@ha +/* 0000873C 000154CC D0 1F 00 54 */ stfs f0, 0x54(r31) +/* 00008740 000154D0 3D 40 00 00 */ lis r10, gGameBreakerCamera@ha +/* 00008744 000154D4 C1 8B 08 30 */ lfs f12, .rodata+0x830@l(r11) +/* 00008748 000154D8 80 17 00 04 */ lwz r0, 0x4(r23) +.L_0000874C: +/* 0000874C 000154DC D0 1F 00 70 */ stfs f0, 0x70(r31) +/* 00008750 000154E0 90 1F 00 58 */ stw r0, 0x58(r31) +/* 00008754 000154E4 D0 1F 00 5C */ stfs f0, 0x5c(r31) +/* 00008758 000154E8 D0 1F 00 60 */ stfs f0, 0x60(r31) +/* 0000875C 000154EC D0 1F 00 64 */ stfs f0, 0x64(r31) +/* 00008760 000154F0 D1 9F 00 68 */ stfs f12, 0x68(r31) +/* 00008764 000154F4 D0 1F 00 6C */ stfs f0, 0x6c(r31) +/* 00008768 000154F8 93 7F 00 74 */ stw r27, 0x74(r31) +/* 0000876C 000154FC 93 7F 00 78 */ stw r27, 0x78(r31) +.L_00008770: +/* 00008770 00015500 93 69 00 00 */ stw r27, gCinematicMomementCamera@l(r9) +/* 00008774 00015504 80 17 02 BC */ lwz r0, 0x2bc(r23) +/* 00008778 00015508 93 6A 00 00 */ stw r27, gGameBreakerCamera@l(r10) +/* 0000877C 0001550C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00008780 00015510 41 82 87 AC */ beq .L_00000F2C +/* 00008784 00015514 3D 20 00 00 */ lis r9, .rodata+0x834@ha +/* 00008788 00015518 38 00 00 01 */ li r0, 0x1 +/* 0000878C 0001551C C1 A9 08 34 */ lfs f13, .rodata+0x834@l(r9) +/* 00008790 00015520 3D 60 00 00 */ lis r11, .rodata+0x838@ha +/* 00008794 00015524 90 13 00 00 */ stw r0, gCinematicMomementCamera@l(r19) +/* 00008798 00015528 3D 20 00 00 */ lis r9, kCinematicMomementSeconds@ha +/* 0000879C 0001552C D1 BF 00 70 */ stfs f13, 0x70(r31) +/* 000087A0 00015530 C0 0B 08 38 */ lfs f0, .rodata+0x838@l(r11) +/* 000087A4 00015534 D1 89 00 00 */ stfs f12, kCinematicMomementSeconds@l(r9) +/* 000087A8 00015538 D0 1F 00 6C */ stfs f0, 0x6c(r31) +/* 000087AC 0001553C 3F C0 00 00 */ lis r30, gFastMem@ha +/* 000087B0 00015540 38 80 00 10 */ li r4, 0x10 +/* 000087B4 00015544 3B DE 00 00 */ addi r30, r30, gFastMem@l +/* 000087B8 00015548 38 A0 00 00 */ li r5, 0x0 +/* 000087BC 0001554C 7F C3 F3 78 */ mr r3, r30 +/* 000087C0 00015550 3B 20 00 00 */ li r25, 0x0 +.L_000087C4: +/* 000087C4 00015554 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 000087C8 00015558 7C 7D 1B 78 */ mr r29, r3 +/* 000087CC 0001555C 3D 20 00 00 */ lis r9, _vt.Q23Sim11Attachments@ha +/* 000087D0 00015560 39 29 00 00 */ addi r9, r9, _vt.Q23Sim11Attachments@l +/* 000087D4 00015564 93 7D 00 04 */ stw r27, 0x4(r29) +/* 000087D8 00015568 91 3D 00 0C */ stw r9, 0xc(r29) +/* 000087DC 0001556C 38 80 00 0C */ li r4, 0xc +/* 000087E0 00015570 38 A0 00 00 */ li r5, 0x0 +/* 000087E4 00015574 7F C3 F3 78 */ mr r3, r30 +/* 000087E8 00015578 48 00 00 01 */ bl Alloc__7FastMemUiPCc +.L_000087EC: +/* 000087EC 0001557C 90 63 00 00 */ stw r3, 0x0(r3) +/* 000087F0 00015580 3D 20 00 00 */ lis r9, .rodata+0x824@ha +.L_000087F4: +/* 000087F4 00015584 90 63 00 04 */ stw r3, 0x4(r3) +.L_000087F8: +/* 000087F8 00015588 3F C0 00 00 */ lis r30, .rodata+0x81C@ha +/* 000087FC 0001558C 90 7D 00 04 */ stw r3, 0x4(r29) +/* 00008800 00015590 3B DE 08 1C */ addi r30, r30, .rodata+0x81C@l +/* 00008804 00015594 93 9D 00 08 */ stw r28, 0x8(r29) +/* 00008808 00015598 38 69 08 24 */ addi r3, r9, .rodata+0x824@l +/* 0000880C 0001559C 93 BF 00 4C */ stw r29, 0x4c(r31) +/* 00008810 000155A0 48 00 00 01 */ bl stringhash32__FPCc +.L_00008814: +/* 00008814 000155A4 90 61 00 08 */ stw r3, 0x8(r1) +/* 00008818 000155A8 38 A0 00 24 */ li r5, 0x24 +/* 0000881C 000155AC 93 61 00 2C */ stw r27, 0x2c(r1) +/* 00008820 000155B0 38 80 00 00 */ li r4, 0x0 +/* 00008824 000155B4 83 9E 00 00 */ lwz r28, 0x0(r30) +/* 00008828 000155B8 83 BE 00 04 */ lwz r29, 0x4(r30) +/* 0000882C 000155BC 7F 43 D3 78 */ mr r3, r26 +/* 00008830 000155C0 48 00 00 01 */ bl bMemSet +.L_00008834: +/* 00008834 000155C4 3D 20 00 00 */ lis r9, Call__Q36Hermes7Handlert13MemberHandler3Z8MJumpCutZ13CDActionDriveZ13CDActionDrivePCQ26Hermes7MessagePQ26Hermes7Handler@ha +/* 00008838 000155C8 38 61 00 40 */ addi r3, r1, 0x40 +/* 0000883C 000155CC 39 29 00 00 */ addi r9, r9, Call__Q36Hermes7Handlert13MemberHandler3Z8MJumpCutZ13CDActionDriveZ13CDActionDrivePCQ26Hermes7MessagePQ26Hermes7Handler@l +/* 00008840 000155D0 93 81 00 18 */ stw r28, 0x18(r1) +/* 00008844 000155D4 93 A1 00 1C */ stw r29, 0x1c(r1) +/* 00008848 000155D8 91 21 00 28 */ stw r9, 0x28(r1) +/* 0000884C 000155DC 93 E1 00 20 */ stw r31, 0x20(r1) +/* 00008850 000155E0 48 00 00 01 */ bl _GetKind__8MJumpCut +/* 00008854 000155E4 3D 60 00 00 */ lis r11, _Q26Hermes7Handler.mKeyNext@ha +/* 00008858 000155E8 80 01 00 40 */ lwz r0, 0x40(r1) +.L_0000885C: +/* 0000885C 000155EC 81 2B 00 00 */ lwz r9, _Q26Hermes7Handler.mKeyNext@l(r11) +/* 00008860 000155F0 38 81 00 40 */ addi r4, r1, 0x40 +/* 00008864 000155F4 90 01 00 2C */ stw r0, 0x2c(r1) +/* 00008868 000155F8 7F 43 D3 78 */ mr r3, r26 +/* 0000886C 000155FC 91 21 00 30 */ stw r9, 0x30(r1) +/* 00008870 00015600 39 29 00 01 */ addi r9, r9, 0x1 +/* 00008874 00015604 91 2B 00 00 */ stw r9, _Q26Hermes7Handler.mKeyNext@l(r11) +/* 00008878 00015608 93 7A 00 1C */ stw r27, 0x1c(r26) +/* 0000887C 0001560C 80 01 00 08 */ lwz r0, 0x8(r1) +/* 00008880 00015610 90 01 00 40 */ stw r0, 0x40(r1) +/* 00008884 00015614 48 00 00 01 */ bl _AddToPort__Q26Hermes7HandlerG6UCrc32 +/* 00008888 00015618 90 7F 00 7C */ stw r3, 0x7c(r31) +/* 0000888C 0001561C 80 9F 00 48 */ lwz r4, 0x48(r31) +/* 00008890 00015620 80 7F 00 4C */ lwz r3, 0x4c(r31) +/* 00008894 00015624 48 00 00 01 */ bl Attach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +/* 00008898 00015628 7E E3 BB 78 */ mr r3, r23 +/* 0000889C 0001562C 48 00 60 85 */ bl .L_0000E920 +/* 000088A0 00015630 7C 63 1B 79 */ mr. r3, r3 +/* 000088A4 00015634 41 82 88 BC */ beq .L_00001160 +/* 000088A8 00015638 80 03 00 0C */ lwz r0, 0xc(r3) +/* 000088AC 0001563C 2C 00 00 0E */ cmpwi r0, 0xe +/* 000088B0 00015640 40 82 88 BC */ bne .L_0000116C +/* 000088B4 00015644 3D 20 00 00 */ lis r9, TheICEManager+0x74@ha +/* 000088B8 00015648 83 29 00 74 */ lwz r25, TheICEManager+0x74@l(r9) +/* 000088BC 0001564C 38 60 01 24 */ li r3, 0x124 +/* 000088C0 00015650 48 00 00 01 */ bl __builtin_vec_new +/* 000088C4 00015654 38 80 00 00 */ li r4, 0x0 +.L_000088C8: +/* 000088C8 00015658 48 00 10 51 */ bl .L_00009918 +/* 000088CC 0001565C 3D 20 00 00 */ lis r9, .rodata+0x82C@ha +/* 000088D0 00015660 C1 9F 00 70 */ lfs f12, 0x70(r31) +/* 000088D4 00015664 C0 09 08 2C */ lfs f0, .rodata+0x82C@l(r9) +/* 000088D8 00015668 90 7F 00 34 */ stw r3, 0x34(r31) +/* 000088DC 0001566C FC 0C 00 00 */ fcmpu cr0, f12, f0 +/* 000088E0 00015670 4C 62 03 82 */ cror un, eq, lt +/* 000088E4 00015674 41 83 89 04 */ bso .L_000011E8 +/* 000088E8 00015678 3D 20 00 00 */ lis r9, .rodata+0x83C@ha +/* 000088EC 0001567C 3D 60 00 00 */ lis r11, .rodata+0x834@ha +/* 000088F0 00015680 C0 09 08 3C */ lfs f0, .rodata+0x83C@l(r9) +.L_000088F4: +/* 000088F4 00015684 C1 AB 08 34 */ lfs f13, .rodata+0x834@l(r11) +/* 000088F8 00015688 EC 0C 00 32 */ fmuls f0, f12, f0 +/* 000088FC 0001568C ED AD 00 28 */ fsubs f13, f13, f0 +/* 00008900 00015690 D1 A3 00 D4 */ stfs f13, 0xd4(r3) +/* 00008904 00015694 7F E3 FB 78 */ mr r3, r31 +/* 00008908 00015698 48 00 90 75 */ bl .L_0001197C +.L_0000890C: +/* 0000890C 0001569C 80 7F 00 3C */ lwz r3, 0x3c(r31) +/* 00008910 000156A0 38 00 00 01 */ li r0, 0x1 +/* 00008914 000156A4 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00008918 000156A8 40 82 89 20 */ bne .L_00001238 +/* 0000891C 000156AC 38 00 00 00 */ li r0, 0x0 +/* 00008920 000156B0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00008924 000156B4 41 82 8A 50 */ beq .L_00001374 +/* 00008928 000156B8 38 81 00 08 */ addi r4, r1, 0x8 +/* 0000892C 000156BC 48 00 00 01 */ bl PSMTX44Copy +/* 00008930 000156C0 80 7F 00 50 */ lwz r3, 0x50(r31) +/* 00008934 000156C4 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00008938 000156C8 41 82 8A 34 */ beq _._12CameraAnchor +/* 0000893C 000156CC 80 63 00 00 */ lwz r3, 0x0(r3) +/* 00008940 000156D0 3C 80 00 00 */ lis r4, _IHandle__14ICollisionBody@ha +/* 00008944 000156D4 38 84 00 00 */ addi r4, r4, _IHandle__14ICollisionBody@l +/* 00008948 000156D8 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000894C 000156DC 7C 7C 1B 79 */ mr. r28, r3 +/* 00008950 000156E0 38 00 00 01 */ li r0, 0x1 +/* 00008954 000156E4 40 82 89 5C */ bne .L_000012B0 +/* 00008958 000156E8 38 00 00 00 */ li r0, 0x0 +/* 0000895C 000156EC 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00008960 000156F0 41 82 8A 34 */ beq .L_00001394 +/* 00008964 000156F4 81 7F 00 50 */ lwz r11, 0x50(r31) +/* 00008968 000156F8 3B A1 00 48 */ addi r29, r1, 0x48 +/* 0000896C 000156FC 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 00008970 00015700 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 00008974 00015704 A8 69 00 18 */ lha r3, 0x18(r9) +/* 00008978 00015708 7C 08 03 A6 */ mtlr r0 +/* 0000897C 0001570C 7C 6B 1A 14 */ add r3, r11, r3 +/* 00008980 00015710 4E 80 00 21 */ blrl +/* 00008984 00015714 81 23 00 04 */ lwz r9, 0x4(r3) +/* 00008988 00015718 A8 09 00 A8 */ lha r0, 0xa8(r9) +.L_0000898C: +/* 0000898C 0001571C 81 29 00 AC */ lwz r9, 0xac(r9) +/* 00008990 00015720 7C 63 02 14 */ add r3, r3, r0 +/* 00008994 00015724 7D 28 03 A6 */ mtlr r9 +.L_00008998: +/* 00008998 00015728 4E 80 00 21 */ blrl +/* 0000899C 0001572C 81 3C 00 04 */ lwz r9, 0x4(r28) +/* 000089A0 00015730 7C 7E 1B 78 */ mr r30, r3 +/* 000089A4 00015734 80 09 00 84 */ lwz r0, 0x84(r9) +/* 000089A8 00015738 A8 69 00 80 */ lha r3, 0x80(r9) +/* 000089AC 0001573C 7C 08 03 A6 */ mtlr r0 +/* 000089B0 00015740 7C 7C 1A 14 */ add r3, r28, r3 +/* 000089B4 00015744 4E 80 00 21 */ blrl +/* 000089B8 00015748 C1 A3 00 00 */ lfs f13, 0x0(r3) +/* 000089BC 0001574C 7F A4 EB 78 */ mr r4, r29 +/* 000089C0 00015750 38 A0 00 00 */ li r5, 0x0 +/* 000089C4 00015754 D1 A1 00 48 */ stfs f13, 0x48(r1) +/* 000089C8 00015758 C0 03 00 04 */ lfs f0, 0x4(r3) +/* 000089CC 0001575C D0 01 00 4C */ stfs f0, 0x4c(r1) +.L_000089D0: +/* 000089D0 00015760 C1 A3 00 08 */ lfs f13, 0x8(r3) +/* 000089D4 00015764 D1 A1 00 50 */ stfs f13, 0x50(r1) +/* 000089D8 00015768 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 000089DC 0001576C 80 09 01 4C */ lwz r0, 0x14c(r9) +/* 000089E0 00015770 A8 69 01 48 */ lha r3, 0x148(r9) +/* 000089E4 00015774 7C 08 03 A6 */ mtlr r0 +/* 000089E8 00015778 7C 7E 1A 14 */ add r3, r30, r3 +/* 000089EC 0001577C 4E 80 00 21 */ blrl +/* 000089F0 00015780 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 000089F4 00015784 A8 69 00 48 */ lha r3, 0x48(r9) +/* 000089F8 00015788 80 09 00 4C */ lwz r0, 0x4c(r9) +/* 000089FC 0001578C 7C 7E 1A 14 */ add r3, r30, r3 +/* 00008A00 00015790 7C 08 03 A6 */ mtlr r0 +/* 00008A04 00015794 4E 80 00 21 */ blrl +/* 00008A08 00015798 7C 64 1B 78 */ mr r4, r3 +/* 00008A0C 0001579C 7F A3 EB 78 */ mr r3, r29 +/* 00008A10 000157A0 7C 65 1B 78 */ mr r5, r3 +/* 00008A14 000157A4 48 00 00 01 */ bl VU0_v3add__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 +/* 00008A18 000157A8 C0 01 00 48 */ lfs f0, 0x48(r1) +/* 00008A1C 000157AC C1 A1 00 50 */ lfs f13, 0x50(r1) +/* 00008A20 000157B0 C1 81 00 4C */ lfs f12, 0x4c(r1) +/* 00008A24 000157B4 FC 00 00 50 */ fneg f0, f0 +/* 00008A28 000157B8 D1 A1 00 38 */ stfs f13, 0x38(r1) +/* 00008A2C 000157BC D0 01 00 3C */ stfs f0, 0x3c(r1) +/* 00008A30 000157C0 D1 81 00 40 */ stfs f12, 0x40(r1) +/* 00008A34 000157C4 3D 20 00 00 */ lis r9, .rodata+0x82C@ha +/* 00008A38 000157C8 80 7F 00 34 */ lwz r3, 0x34(r31) +/* 00008A3C 000157CC C0 29 08 2C */ lfs f1, .rodata+0x82C@l(r9) +/* 00008A40 000157D0 38 81 00 08 */ addi r4, r1, 0x8 +/* 00008A44 000157D4 80 BF 00 40 */ lwz r5, 0x40(r31) +/* 00008A48 000157D8 80 DF 00 44 */ lwz r6, 0x44(r31) +/* 00008A4C 000157DC 48 00 17 65 */ bl .L_0000A1B0 +/* 00008A50 000157E0 38 60 00 E8 */ li r3, 0xe8 +/* 00008A54 000157E4 48 00 00 01 */ bl __builtin_vec_new +/* 00008A58 000157E8 81 34 00 04 */ lwz r9, 0x4(r20) +/* 00008A5C 000157EC 7C 7C 1B 78 */ mr r28, r3 +/* 00008A60 000157F0 83 B7 00 04 */ lwz r29, 0x4(r23) +/* 00008A64 000157F4 80 09 00 34 */ lwz r0, 0x34(r9) +/* 00008A68 000157F8 A8 69 00 30 */ lha r3, 0x30(r9) +/* 00008A6C 000157FC 7C 08 03 A6 */ mtlr r0 +/* 00008A70 00015800 83 DF 00 34 */ lwz r30, 0x34(r31) +/* 00008A74 00015804 7C 74 1A 14 */ add r3, r20, r3 +/* 00008A78 00015808 4E 80 00 21 */ blrl +/* 00008A7C 0001580C 80 C3 00 24 */ lwz r6, 0x24(r3) +/* 00008A80 00015810 7F 27 CB 78 */ mr r7, r25 +/* 00008A84 00015814 39 00 00 00 */ li r8, 0x0 +/* 00008A88 00015818 39 20 00 00 */ li r9, 0x0 +/* 00008A8C 0001581C 39 40 00 01 */ li r10, 0x1 +/* 00008A90 00015820 7F A4 EB 78 */ mr r4, r29 +/* 00008A94 00015824 7F C5 F3 78 */ mr r5, r30 +/* 00008A98 00015828 7F 83 E3 78 */ mr r3, r28 +/* 00008A9C 0001582C 48 00 F1 AD */ bl FlushAllocatedTracks__8ICEGroup +/* 00008AA0 00015830 90 7F 00 2C */ stw r3, 0x2c(r31) +/* 00008AA4 00015834 38 60 00 84 */ li r3, 0x84 +/* 00008AA8 00015838 48 00 00 01 */ bl __builtin_vec_new +/* 00008AAC 0001583C 80 BF 00 34 */ lwz r5, 0x34(r31) +/* 00008AB0 00015840 38 80 00 03 */ li r4, 0x3 +/* 00008AB4 00015844 48 00 4B B1 */ bl .L_0000D664 +/* 00008AB8 00015848 90 7F 00 30 */ stw r3, 0x30(r31) +/* 00008ABC 0001584C 7F E3 FB 78 */ mr r3, r31 +/* 00008AC0 00015850 80 01 00 9C */ lwz r0, 0x9c(r1) +/* 00008AC4 00015854 81 81 00 60 */ lwz r12, 0x60(r1) +/* 00008AC8 00015858 7C 08 03 A6 */ mtlr r0 +/* 00008ACC 0001585C BA 61 00 64 */ lmw r19, 0x64(r1) +/* 00008AD0 00015860 7D 80 81 20 */ mtcrf 8, r12 +/* 00008AD4 00015864 38 21 00 98 */ addi r1, r1, 0x98 +/* 00008AD8 00015868 4E 80 00 20 */ blr +.endfn __13CDActionDrivePQ28CameraAI8DirectorP7IPlayer + +# .text:0x8ADC | size: 0x2A4 +.fn _._13CDActionDrive, global +/* 00008ADC 0001586C 94 21 FF D8 */ stwu r1, -0x28(r1) +/* 00008AE0 00015870 7C 08 02 A6 */ mflr r0 +/* 00008AE4 00015874 BF 61 00 14 */ stmw r27, 0x14(r1) +/* 00008AE8 00015878 90 01 00 2C */ stw r0, 0x2c(r1) +/* 00008AEC 0001587C 7C 7E 1B 78 */ mr r30, r3 +.L_00008AF0: +/* 00008AF0 00015880 3D 00 00 00 */ lis r8, _vt.13CDActionDrive.11IAttachable@ha +/* 00008AF4 00015884 80 7E 00 7C */ lwz r3, 0x7c(r30) +/* 00008AF8 00015888 3D 20 00 00 */ lis r9, _vt.13CDActionDrive.Q33Sim9Collision9IListener@ha +/* 00008AFC 0001588C 3D 60 00 00 */ lis r11, _vt.13CDActionDrive.14ITrafficCenter@ha +/* 00008B00 00015890 3D 40 00 00 */ lis r10, _vt.13CDActionDrive@ha +/* 00008B04 00015894 39 08 00 00 */ addi r8, r8, _vt.13CDActionDrive.11IAttachable@l +/* 00008B08 00015898 39 29 00 00 */ addi r9, r9, _vt.13CDActionDrive.Q33Sim9Collision9IListener@l +/* 00008B0C 0001589C 39 6B 00 00 */ addi r11, r11, _vt.13CDActionDrive.14ITrafficCenter@l +/* 00008B10 000158A0 39 4A 00 00 */ addi r10, r10, _vt.13CDActionDrive@l +/* 00008B14 000158A4 3B FE 00 20 */ addi r31, r30, 0x20 +/* 00008B18 000158A8 3B 9E 00 24 */ addi r28, r30, 0x24 +/* 00008B1C 000158AC 7C 9B 23 78 */ mr r27, r4 +/* 00008B20 000158B0 91 1E 00 1C */ stw r8, 0x1c(r30) +/* 00008B24 000158B4 91 3E 00 20 */ stw r9, 0x20(r30) +/* 00008B28 000158B8 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00008B2C 000158BC 91 7E 00 28 */ stw r11, 0x28(r30) +/* 00008B30 000158C0 91 5E 00 14 */ stw r10, 0x14(r30) +/* 00008B34 000158C4 41 82 8B 3C */ beq .L_00001670 +/* 00008B38 000158C8 48 00 00 01 */ bl Destroy__Q26Hermes7HandlerPQ26Hermes13_h_HHANDLER__ +/* 00008B3C 000158CC 80 9E 00 48 */ lwz r4, 0x48(r30) +/* 00008B40 000158D0 2C 04 00 00 */ cmpwi r4, 0x0 +/* 00008B44 000158D4 41 82 8B 50 */ beq .L_00001694 +/* 00008B48 000158D8 80 7E 00 4C */ lwz r3, 0x4c(r30) +/* 00008B4C 000158DC 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +/* 00008B50 000158E0 80 9E 00 50 */ lwz r4, 0x50(r30) +/* 00008B54 000158E4 2C 04 00 00 */ cmpwi r4, 0x0 +/* 00008B58 000158E8 41 82 8B 64 */ beq .L_000016BC +/* 00008B5C 000158EC 80 7E 00 4C */ lwz r3, 0x4c(r30) +/* 00008B60 000158F0 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +/* 00008B64 000158F4 81 7E 00 30 */ lwz r11, 0x30(r30) +.L_00008B68: +/* 00008B68 000158F8 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00008B6C 000158FC 41 82 8B 8C */ beq .L_000016F8 +/* 00008B70 00015900 81 2B 00 08 */ lwz r9, 0x8(r11) +/* 00008B74 00015904 38 80 00 03 */ li r4, 0x3 +/* 00008B78 00015908 A8 69 00 10 */ lha r3, 0x10(r9) +/* 00008B7C 0001590C 80 09 00 14 */ lwz r0, 0x14(r9) +/* 00008B80 00015910 7C 6B 1A 14 */ add r3, r11, r3 +/* 00008B84 00015914 7C 08 03 A6 */ mtlr r0 +/* 00008B88 00015918 4E 80 00 21 */ blrl +/* 00008B8C 0001591C 81 7E 00 2C */ lwz r11, 0x2c(r30) +/* 00008B90 00015920 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00008B94 00015924 41 82 8B B4 */ beq .L_00001748 +/* 00008B98 00015928 81 2B 00 08 */ lwz r9, 0x8(r11) +/* 00008B9C 0001592C 38 80 00 03 */ li r4, 0x3 +.L_00008BA0: +/* 00008BA0 00015930 A8 69 00 10 */ lha r3, 0x10(r9) +/* 00008BA4 00015934 80 09 00 14 */ lwz r0, 0x14(r9) +/* 00008BA8 00015938 7C 6B 1A 14 */ add r3, r11, r3 +/* 00008BAC 0001593C 7C 08 03 A6 */ mtlr r0 +/* 00008BB0 00015940 4E 80 00 21 */ blrl +/* 00008BB4 00015944 80 7E 00 34 */ lwz r3, 0x34(r30) +/* 00008BB8 00015948 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00008BBC 0001594C 41 82 8B C8 */ beq .L_00001784 +/* 00008BC0 00015950 38 80 00 03 */ li r4, 0x3 +/* 00008BC4 00015954 48 00 13 6D */ bl .L_00009F30 +/* 00008BC8 00015958 81 7E 00 4C */ lwz r11, 0x4c(r30) +/* 00008BCC 0001595C 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00008BD0 00015960 41 82 8B F0 */ beq .L_000017C0 +/* 00008BD4 00015964 81 2B 00 0C */ lwz r9, 0xc(r11) +.L_00008BD8: +/* 00008BD8 00015968 38 80 00 03 */ li r4, 0x3 +/* 00008BDC 0001596C A8 69 00 08 */ lha r3, 0x8(r9) +/* 00008BE0 00015970 80 09 00 0C */ lwz r0, 0xc(r9) +/* 00008BE4 00015974 7C 6B 1A 14 */ add r3, r11, r3 +.L_00008BE8: +/* 00008BE8 00015978 7C 08 03 A6 */ mtlr r0 +/* 00008BEC 0001597C 4E 80 00 21 */ blrl +.L_00008BF0: +/* 00008BF0 00015980 3B A1 00 08 */ addi r29, r1, 0x8 +/* 00008BF4 00015984 7F E3 FB 78 */ mr r3, r31 +/* 00008BF8 00015988 48 00 00 01 */ bl RemoveListener__Q23Sim9CollisionPQ33Sim9Collision9IListener +/* 00008BFC 0001598C 38 7E 00 38 */ addi r3, r30, 0x38 +/* 00008C00 00015990 38 80 00 02 */ li r4, 0x2 +/* 00008C04 00015994 48 00 00 01 */ bl _._Q29WorldConn9Reference +/* 00008C08 00015998 3D 20 00 00 */ lis r9, _vt.14ITrafficCenter@ha +/* 00008C0C 0001599C 3D 40 00 00 */ lis r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha +/* 00008C10 000159A0 39 29 00 00 */ addi r9, r9, _vt.14ITrafficCenter@l +/* 00008C14 000159A4 39 6A 00 00 */ addi r11, r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l +/* 00008C18 000159A8 91 3E 00 28 */ stw r9, 0x28(r30) +/* 00008C1C 000159AC 7F A5 EB 78 */ mr r5, r29 +.L_00008C20: +/* 00008C20 000159B0 93 81 00 08 */ stw r28, 0x8(r1) +/* 00008C24 000159B4 80 6A 00 00 */ lwz r3, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r10) +.L_00008C28: +/* 00008C28 000159B8 80 0B 00 08 */ lwz r0, 0x8(r11) +/* 00008C2C 000159BC 54 00 10 3A */ slwi r0, r0, 2 +/* 00008C30 000159C0 7F E3 02 14 */ add r31, r3, r0 +/* 00008C34 000159C4 7F E4 FB 78 */ mr r4, r31 +.L_00008C38: +/* 00008C38 000159C8 48 00 00 01 */ bl find__H2ZPP14ITrafficCenterZP14ITrafficCenter_4_STLX01X01RCX11_X01 +/* 00008C3C 000159CC 7C 03 F8 00 */ cmpw r3, r31 +/* 00008C40 000159D0 40 82 8C 50 */ bne .L_00001890 +/* 00008C44 000159D4 7F E3 FB 78 */ mr r3, r31 +.L_00008C48: +/* 00008C48 000159D8 38 9E 00 18 */ addi r4, r30, 0x18 +/* 00008C4C 000159DC 48 00 8C 84 */ b .L_000118D0 +/* 00008C50 000159E0 39 63 00 04 */ addi r11, r3, 0x4 +/* 00008C54 000159E4 38 9E 00 18 */ addi r4, r30, 0x18 +/* 00008C58 000159E8 7C 0B F8 00 */ cmpw r11, r31 +/* 00008C5C 000159EC 41 82 8C 84 */ beq .L_000018E0 +.L_00008C60: +/* 00008C60 000159F0 81 2B 00 00 */ lwz r9, 0x0(r11) +/* 00008C64 000159F4 80 1D 00 00 */ lwz r0, 0x0(r29) +/* 00008C68 000159F8 7C 09 00 00 */ cmpw r9, r0 +/* 00008C6C 000159FC 41 82 8C 78 */ beq .L_000018E4 +.L_00008C70: +/* 00008C70 00015A00 91 23 00 00 */ stw r9, 0x0(r3) +/* 00008C74 00015A04 38 63 00 04 */ addi r3, r3, 0x4 +/* 00008C78 00015A08 39 6B 00 04 */ addi r11, r11, 0x4 +/* 00008C7C 00015A0C 7C 0B F8 00 */ cmpw r11, r31 +/* 00008C80 00015A10 40 82 8C 60 */ bne .L_000018E0 +/* 00008C84 00015A14 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha +/* 00008C88 00015A18 38 A9 00 00 */ addi r5, r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l +/* 00008C8C 00015A1C 81 49 00 00 */ lwz r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r9) +/* 00008C90 00015A20 81 05 00 08 */ lwz r8, 0x8(r5) +/* 00008C94 00015A24 55 00 10 3A */ slwi r0, r8, 2 +/* 00008C98 00015A28 7D 6A 02 14 */ add r11, r10, r0 +/* 00008C9C 00015A2C 7C 03 58 00 */ cmpw r3, r11 +/* 00008CA0 00015A30 41 82 8D 18 */ beq .L_000019B8 +/* 00008CA4 00015A34 7D 23 58 50 */ subf r9, r3, r11 +/* 00008CA8 00015A38 7C 0A 18 50 */ subf r0, r10, r3 +/* 00008CAC 00015A3C 7D 3F 16 70 */ srawi r31, r9, 2 +/* 00008CB0 00015A40 7C 06 16 70 */ srawi r6, r0, 2 +/* 00008CB4 00015A44 7D 09 43 78 */ mr r9, r8 +/* 00008CB8 00015A48 38 63 00 04 */ addi r3, r3, 0x4 +/* 00008CBC 00015A4C 7C 03 58 00 */ cmpw r3, r11 +/* 00008CC0 00015A50 40 82 8C B8 */ bne .L_00001978 +/* 00008CC4 00015A54 7C E6 FA 14 */ add r7, r6, r31 +/* 00008CC8 00015A58 39 00 00 00 */ li r8, 0x0 +/* 00008CCC 00015A5C 7C E3 3B 78 */ mr r3, r7 +/* 00008CD0 00015A60 7C 03 48 50 */ subf r0, r3, r9 +/* 00008CD4 00015A64 7C 08 00 40 */ cmplw r8, r0 +/* 00008CD8 00015A68 40 80 8D 10 */ bge GetCurrentCamera__Fv +/* 00008CDC 00015A6C 7C 06 42 14 */ add r0, r6, r8 +/* 00008CE0 00015A70 81 65 00 00 */ lwz r11, 0x0(r5) +/* 00008CE4 00015A74 54 0A 10 3A */ slwi r10, r0, 2 +/* 00008CE8 00015A78 7D 27 42 14 */ add r9, r7, r8 +/* 00008CEC 00015A7C 7C 0A 5A 14 */ add r0, r10, r11 +/* 00008CF0 00015A80 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00008CF4 00015A84 41 82 8D 04 */ beq .L_000019F8 +/* 00008CF8 00015A88 55 29 10 3A */ slwi r9, r9, 2 +/* 00008CFC 00015A8C 7C 09 58 2E */ lwzx r0, r9, r11 +/* 00008D00 00015A90 7C 0A 59 2E */ stwx r0, r10, r11 +/* 00008D04 00015A94 39 08 00 01 */ addi r8, r8, 0x1 +/* 00008D08 00015A98 81 25 00 08 */ lwz r9, 0x8(r5) +/* 00008D0C 00015A9C 48 00 8C D0 */ b .L_000119DC +/* 00008D10 00015AA0 7C 1F 48 50 */ subf r0, r31, r9 +/* 00008D14 00015AA4 90 05 00 08 */ stw r0, 0x8(r5) +/* 00008D18 00015AA8 3D 20 00 00 */ lis r9, _vt.Q33UTL3COM8IUnknown@ha +/* 00008D1C 00015AAC 80 7E 00 18 */ lwz r3, 0x18(r30) +/* 00008D20 00015AB0 39 29 00 00 */ addi r9, r9, _vt.Q33UTL3COM8IUnknown@l +/* 00008D24 00015AB4 91 3E 00 1C */ stw r9, 0x1c(r30) +/* 00008D28 00015AB8 48 00 00 01 */ bl Remove__Q43UTL3COM6Object6_IListPQ33UTL3COM8IUnknown +/* 00008D2C 00015ABC 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha +/* 00008D30 00015AC0 7F C3 F3 78 */ mr r3, r30 +/* 00008D34 00015AC4 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l +/* 00008D38 00015AC8 38 80 00 02 */ li r4, 0x2 +/* 00008D3C 00015ACC 91 3E 00 14 */ stw r9, 0x14(r30) +/* 00008D40 00015AD0 48 00 00 01 */ bl _._Q43UTL3COM6Object6_IList +/* 00008D44 00015AD4 73 60 00 01 */ andi. r0, r27, 0x1 +/* 00008D48 00015AD8 41 82 8D 6C */ beq .L_00001AB4 +/* 00008D4C 00015ADC 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 00008D50 00015AE0 41 82 8D 6C */ beq .L_00001ABC +/* 00008D54 00015AE4 3C 60 00 00 */ lis r3, gFastMem@ha +/* 00008D58 00015AE8 7F C4 F3 78 */ mr r4, r30 +/* 00008D5C 00015AEC 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 00008D60 00015AF0 38 A0 00 80 */ li r5, 0x80 +/* 00008D64 00015AF4 38 C0 00 00 */ li r6, 0x0 +/* 00008D68 00015AF8 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 00008D6C 00015AFC 80 01 00 2C */ lwz r0, 0x2c(r1) +/* 00008D70 00015B00 7C 08 03 A6 */ mtlr r0 +/* 00008D74 00015B04 BB 61 00 14 */ lmw r27, 0x14(r1) +/* 00008D78 00015B08 38 21 00 28 */ addi r1, r1, 0x28 +/* 00008D7C 00015B0C 4E 80 00 20 */ blr +.endfn _._13CDActionDrive + +# .text:0x8D80 | size: 0x30 +# CDActionDrive::Reset +.fn Reset__13CDActionDrive, global +/* 00008D80 00015B10 3D 20 00 00 */ lis r9, .rodata+0x840@ha +/* 00008D84 00015B14 38 00 00 00 */ li r0, 0x0 +/* 00008D88 00015B18 C0 09 08 40 */ lfs f0, .rodata+0x840@l(r9) +/* 00008D8C 00015B1C 90 03 00 78 */ stw r0, 0x78(r3) +/* 00008D90 00015B20 D0 03 00 70 */ stfs f0, 0x70(r3) +/* 00008D94 00015B24 D0 03 00 54 */ stfs f0, 0x54(r3) +/* 00008D98 00015B28 D0 03 00 5C */ stfs f0, 0x5c(r3) +/* 00008D9C 00015B2C D0 03 00 60 */ stfs f0, 0x60(r3) +/* 00008DA0 00015B30 D0 03 00 64 */ stfs f0, 0x64(r3) +/* 00008DA4 00015B34 D0 03 00 6C */ stfs f0, 0x6c(r3) +/* 00008DA8 00015B38 90 03 00 74 */ stw r0, 0x74(r3) +/* 00008DAC 00015B3C 4E 80 00 20 */ blr +.endfn Reset__13CDActionDrive + +# .text:0x8DB0 | size: 0xB4 +.fn OnDetached__13CDActionDriveP11IAttachable, global +/* 00008DB0 00015B40 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 00008DB4 00015B44 7C 08 02 A6 */ mflr r0 +/* 00008DB8 00015B48 90 01 00 0C */ stw r0, 0xc(r1) +/* 00008DBC 00015B4C 7C 84 23 79 */ mr. r4, r4 +/* 00008DC0 00015B50 81 23 00 48 */ lwz r9, 0x48(r3) +/* 00008DC4 00015B54 4F 80 00 00 */ mcrf cr7, cr0 +/* 00008DC8 00015B58 41 9E 8D EC */ beq cr7, .L_00001BB4 +/* 00008DCC 00015B5C 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00008DD0 00015B60 41 82 8D EC */ beq .L_00001BBC +/* 00008DD4 00015B64 81 29 00 00 */ lwz r9, 0x0(r9) +/* 00008DD8 00015B68 80 04 00 00 */ lwz r0, 0x0(r4) +/* 00008DDC 00015B6C 7C 00 4A 78 */ xor r0, r0, r9 +/* 00008DE0 00015B70 21 60 00 00 */ subfic r11, r0, 0x0 +/* 00008DE4 00015B74 7C 0B 01 14 */ adde r0, r11, r0 +/* 00008DE8 00015B78 48 00 8E 00 */ b .L_00011BE8 +/* 00008DEC 00015B7C 38 00 00 00 */ li r0, 0x0 +/* 00008DF0 00015B80 2F 84 00 00 */ cmpwi cr7, r4, 0x0 +/* 00008DF4 00015B84 40 9E 8E 00 */ bne cr7, .L_00001BF4 +/* 00008DF8 00015B88 21 69 00 00 */ subfic r11, r9, 0x0 +/* 00008DFC 00015B8C 7C 0B 49 14 */ adde r0, r11, r9 +/* 00008E00 00015B90 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00008E04 00015B94 41 82 8E 10 */ beq .L_00001C14 +/* 00008E08 00015B98 38 00 00 00 */ li r0, 0x0 +/* 00008E0C 00015B9C 90 03 00 48 */ stw r0, 0x48(r3) +/* 00008E10 00015BA0 81 63 00 50 */ lwz r11, 0x50(r3) +/* 00008E14 00015BA4 41 9E 8E 38 */ beq cr7, .L_00001C4C +/* 00008E18 00015BA8 2C 0B 00 00 */ cmpwi r11, 0x0 +.L_00008E1C: +/* 00008E1C 00015BAC 41 82 8E 38 */ beq .L_00001C54 +/* 00008E20 00015BB0 81 24 00 00 */ lwz r9, 0x0(r4) +/* 00008E24 00015BB4 80 0B 00 00 */ lwz r0, 0x0(r11) +/* 00008E28 00015BB8 7D 20 02 78 */ xor r0, r9, r0 +/* 00008E2C 00015BBC 21 60 00 00 */ subfic r11, r0, 0x0 +/* 00008E30 00015BC0 7C 0B 01 14 */ adde r0, r11, r0 +/* 00008E34 00015BC4 48 00 8E 48 */ b .L_00011C7C +/* 00008E38 00015BC8 38 00 00 00 */ li r0, 0x0 +/* 00008E3C 00015BCC 40 9E 8E 48 */ bne cr7, .L_00001C84 +/* 00008E40 00015BD0 21 2B 00 00 */ subfic r9, r11, 0x0 +/* 00008E44 00015BD4 7C 09 59 14 */ adde r0, r9, r11 +/* 00008E48 00015BD8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00008E4C 00015BDC 41 82 8E 54 */ beq .L_00001CA0 +/* 00008E50 00015BE0 48 00 8E 65 */ bl .L_00011CB4 +/* 00008E54 00015BE4 80 01 00 0C */ lwz r0, 0xc(r1) +/* 00008E58 00015BE8 7C 08 03 A6 */ mtlr r0 +/* 00008E5C 00015BEC 38 21 00 08 */ addi r1, r1, 0x8 +/* 00008E60 00015BF0 4E 80 00 20 */ blr +.endfn OnDetached__13CDActionDriveP11IAttachable + +# .text:0x8E64 | size: 0x78 +# CDActionDrive::OnCarDetached +.fn OnCarDetached__13CDActionDrive, global +/* 00008E64 00015BF4 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00008E68 00015BF8 7C 08 02 A6 */ mflr r0 +/* 00008E6C 00015BFC 93 E1 00 0C */ stw r31, 0xc(r1) +/* 00008E70 00015C00 90 01 00 14 */ stw r0, 0x14(r1) +/* 00008E74 00015C04 7C 7F 1B 78 */ mr r31, r3 +/* 00008E78 00015C08 80 9F 00 50 */ lwz r4, 0x50(r31) +/* 00008E7C 00015C0C 38 7F 00 20 */ addi r3, r31, 0x20 +/* 00008E80 00015C10 48 00 00 01 */ bl RemoveListener__Q23Sim9CollisionPQ33Sim9Collision9IListenerPCQ33UTL3COM8IUnknown +/* 00008E84 00015C14 80 1F 00 3C */ lwz r0, 0x3c(r31) +/* 00008E88 00015C18 38 7F 00 38 */ addi r3, r31, 0x38 +/* 00008E8C 00015C1C 39 20 00 01 */ li r9, 0x1 +/* 00008E90 00015C20 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00008E94 00015C24 40 82 8E 9C */ bne .L_00001D30 +.L_00008E98: +/* 00008E98 00015C28 39 20 00 00 */ li r9, 0x0 +/* 00008E9C 00015C2C 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00008EA0 00015C30 41 82 8E AC */ beq .L_00001D4C +/* 00008EA4 00015C34 38 80 00 00 */ li r4, 0x0 +/* 00008EA8 00015C38 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi +/* 00008EAC 00015C3C 81 3F 00 34 */ lwz r9, 0x34(r31) +/* 00008EB0 00015C40 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00008EB4 00015C44 41 82 8E C0 */ beq .L_00001D74 +/* 00008EB8 00015C48 38 00 00 00 */ li r0, 0x0 +/* 00008EBC 00015C4C 90 09 00 8C */ stw r0, 0x8c(r9) +/* 00008EC0 00015C50 38 00 00 00 */ li r0, 0x0 +.L_00008EC4: +/* 00008EC4 00015C54 90 1F 00 50 */ stw r0, 0x50(r31) +/* 00008EC8 00015C58 80 01 00 14 */ lwz r0, 0x14(r1) +/* 00008ECC 00015C5C 7C 08 03 A6 */ mtlr r0 +/* 00008ED0 00015C60 83 E1 00 0C */ lwz r31, 0xc(r1) +/* 00008ED4 00015C64 38 21 00 10 */ addi r1, r1, 0x10 +/* 00008ED8 00015C68 4E 80 00 20 */ blr +.endfn OnCarDetached__13CDActionDrive + +# .text:0x8EDC | size: 0x198 +.fn OnCollision__13CDActionDriveRCQ33Sim9Collision4Info, global +/* 00008EDC 00015C6C 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00008EE0 00015C70 7C 08 02 A6 */ mflr r0 +/* 00008EE4 00015C74 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 00008EE8 00015C78 90 01 00 14 */ stw r0, 0x14(r1) +/* 00008EEC 00015C7C 7C 9E 23 78 */ mr r30, r4 +/* 00008EF0 00015C80 7C 7F 1B 78 */ mr r31, r3 +/* 00008EF4 00015C84 38 7E 00 20 */ addi r3, r30, 0x20 +/* 00008EF8 00015C88 48 00 00 01 */ bl VU0_v3lengthsquare__FRCQ25UMath7Vector3 +/* 00008EFC 00015C8C 48 00 00 01 */ bl VU0_sqrt__Ff +.L_00008F00: +/* 00008F00 00015C90 80 1E 00 1C */ lwz r0, 0x1c(r30) +/* 00008F04 00015C94 7C 00 EE 70 */ srawi r0, r0, 29 +/* 00008F08 00015C98 2C 00 00 02 */ cmpwi r0, 0x2 +/* 00008F0C 00015C9C 41 82 8F 94 */ beq .L_00001EA0 +/* 00008F10 00015CA0 41 81 8F 20 */ bgt .L_00001E30 +/* 00008F14 00015CA4 2C 00 00 01 */ cmpwi r0, 0x1 +/* 00008F18 00015CA8 41 82 8F 2C */ beq .L_00001E44 +/* 00008F1C 00015CAC 48 00 90 60 */ b .L_00011F7C +/* 00008F20 00015CB0 2C 00 00 03 */ cmpwi r0, 0x3 +/* 00008F24 00015CB4 41 82 8F FC */ beq .L_00001F20 +/* 00008F28 00015CB8 48 00 90 60 */ b .L_00011F88 +/* 00008F2C 00015CBC 3D 20 00 00 */ lis r9, .rodata+0x844@ha +/* 00008F30 00015CC0 C0 09 08 44 */ lfs f0, .rodata+0x844@l(r9) +/* 00008F34 00015CC4 FC 01 00 00 */ fcmpu cr0, f1, f0 +/* 00008F38 00015CC8 4C 62 03 82 */ cror un, eq, lt +.L_00008F3C: +/* 00008F3C 00015CCC 41 83 90 60 */ bso .L_00001F9C +/* 00008F40 00015CD0 3D 20 00 00 */ lis r9, .rodata+0x848@ha +/* 00008F44 00015CD4 3D 60 00 00 */ lis r11, .rodata+0x84C@ha +/* 00008F48 00015CD8 C1 89 08 48 */ lfs f12, .rodata+0x848@l(r9) +/* 00008F4C 00015CDC EC 01 00 28 */ fsubs f0, f1, f0 +/* 00008F50 00015CE0 C1 AB 08 4C */ lfs f13, .rodata+0x84C@l(r11) +/* 00008F54 00015CE4 EC 00 03 32 */ fmuls f0, f0, f12 +/* 00008F58 00015CE8 FD 80 68 90 */ fmr f12, f13 +/* 00008F5C 00015CEC FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00008F60 00015CF0 4C 62 0B 82 */ cror un, eq, gt +/* 00008F64 00015CF4 41 83 8F 6C */ bso .L_00001ED0 +/* 00008F68 00015CF8 FD 80 00 90 */ fmr f12, f0 +/* 00008F6C 00015CFC C0 1F 00 68 */ lfs f0, 0x68(r31) +/* 00008F70 00015D00 C1 BF 00 64 */ lfs f13, 0x64(r31) +/* 00008F74 00015D04 EC 0C 00 32 */ fmuls f0, f12, f0 +.L_00008F78: +/* 00008F78 00015D08 FD 80 68 90 */ fmr f12, f13 +/* 00008F7C 00015D0C FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00008F80 00015D10 4C 62 03 82 */ cror un, eq, lt +/* 00008F84 00015D14 41 83 8F 8C */ bso .L_00001F10 +.L_00008F88: +/* 00008F88 00015D18 FD 80 00 90 */ fmr f12, f0 +/* 00008F8C 00015D1C D1 9F 00 64 */ stfs f12, 0x64(r31) +/* 00008F90 00015D20 48 00 90 60 */ b .L_00011FF0 +/* 00008F94 00015D24 3D 20 00 00 */ lis r9, .rodata+0x850@ha +/* 00008F98 00015D28 C0 09 08 50 */ lfs f0, .rodata+0x850@l(r9) +/* 00008F9C 00015D2C FC 01 00 00 */ fcmpu cr0, f1, f0 +/* 00008FA0 00015D30 4C 62 03 82 */ cror un, eq, lt +/* 00008FA4 00015D34 41 83 90 60 */ bso .L_00002004 +/* 00008FA8 00015D38 3D 20 00 00 */ lis r9, .rodata+0x854@ha +/* 00008FAC 00015D3C 3D 60 00 00 */ lis r11, .rodata+0x84C@ha +/* 00008FB0 00015D40 C1 89 08 54 */ lfs f12, .rodata+0x854@l(r9) +/* 00008FB4 00015D44 EC 01 00 28 */ fsubs f0, f1, f0 +/* 00008FB8 00015D48 C1 AB 08 4C */ lfs f13, .rodata+0x84C@l(r11) +/* 00008FBC 00015D4C EC 00 03 32 */ fmuls f0, f0, f12 +/* 00008FC0 00015D50 FD 80 68 90 */ fmr f12, f13 +/* 00008FC4 00015D54 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00008FC8 00015D58 4C 62 0B 82 */ cror un, eq, gt +/* 00008FCC 00015D5C 41 83 8F D4 */ bso .L_00001FA0 +/* 00008FD0 00015D60 FD 80 00 90 */ fmr f12, f0 +/* 00008FD4 00015D64 C0 1F 00 68 */ lfs f0, 0x68(r31) +/* 00008FD8 00015D68 C1 BF 00 5C */ lfs f13, 0x5c(r31) +/* 00008FDC 00015D6C EC 0C 00 32 */ fmuls f0, f12, f0 +/* 00008FE0 00015D70 FD 80 68 90 */ fmr f12, f13 +/* 00008FE4 00015D74 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00008FE8 00015D78 4C 62 03 82 */ cror un, eq, lt +/* 00008FEC 00015D7C 41 83 8F F4 */ bso .L_00001FE0 +/* 00008FF0 00015D80 FD 80 00 90 */ fmr f12, f0 +/* 00008FF4 00015D84 D1 9F 00 5C */ stfs f12, 0x5c(r31) +/* 00008FF8 00015D88 48 00 90 60 */ b .L_00012058 +/* 00008FFC 00015D8C 3D 20 00 00 */ lis r9, .rodata+0x858@ha +/* 00009000 00015D90 C0 09 08 58 */ lfs f0, .rodata+0x858@l(r9) +/* 00009004 00015D94 FC 01 00 00 */ fcmpu cr0, f1, f0 +/* 00009008 00015D98 4C 62 03 82 */ cror un, eq, lt +/* 0000900C 00015D9C 41 83 90 60 */ bso .L_0000206C +/* 00009010 00015DA0 3D 20 00 00 */ lis r9, .rodata+0x85C@ha +/* 00009014 00015DA4 3D 60 00 00 */ lis r11, .rodata+0x84C@ha +/* 00009018 00015DA8 C1 89 08 5C */ lfs f12, .rodata+0x85C@l(r9) +/* 0000901C 00015DAC EC 01 00 28 */ fsubs f0, f1, f0 +/* 00009020 00015DB0 C1 AB 08 4C */ lfs f13, .rodata+0x84C@l(r11) +/* 00009024 00015DB4 EC 00 03 32 */ fmuls f0, f0, f12 +/* 00009028 00015DB8 FD 80 68 90 */ fmr f12, f13 +.L_0000902C: +/* 0000902C 00015DBC FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00009030 00015DC0 4C 62 0B 82 */ cror un, eq, gt +/* 00009034 00015DC4 41 83 90 3C */ bso .L_00002070 +/* 00009038 00015DC8 FD 80 00 90 */ fmr f12, f0 +.L_0000903C: +/* 0000903C 00015DCC C0 1F 00 68 */ lfs f0, 0x68(r31) +/* 00009040 00015DD0 C1 BF 00 60 */ lfs f13, 0x60(r31) +.L_00009044: +/* 00009044 00015DD4 EC 0C 00 32 */ fmuls f0, f12, f0 +/* 00009048 00015DD8 FD 80 68 90 */ fmr f12, f13 +/* 0000904C 00015DDC FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00009050 00015DE0 4C 62 03 82 */ cror un, eq, lt +/* 00009054 00015DE4 41 83 90 5C */ bso Render__11CameraMoverP5eView +/* 00009058 00015DE8 FD 80 00 90 */ fmr f12, f0 +/* 0000905C 00015DEC D1 9F 00 60 */ stfs f12, 0x60(r31) +/* 00009060 00015DF0 80 01 00 14 */ lwz r0, 0x14(r1) +/* 00009064 00015DF4 7C 08 03 A6 */ mtlr r0 +/* 00009068 00015DF8 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 0000906C 00015DFC 38 21 00 10 */ addi r1, r1, 0x10 +/* 00009070 00015E00 4E 80 00 20 */ blr +.endfn OnCollision__13CDActionDriveRCQ33Sim9Collision4Info + +# .text:0x9074 | size: 0x2B4 +# CDActionDrive::AquireCar +.fn AquireCar__13CDActionDrive, global +/* 00009074 00015E04 94 21 FF C8 */ stwu r1, -0x38(r1) +/* 00009078 00015E08 7C 08 02 A6 */ mflr r0 +/* 0000907C 00015E0C BF A1 00 2C */ stmw r29, 0x2c(r1) +/* 00009080 00015E10 90 01 00 3C */ stw r0, 0x3c(r1) +/* 00009084 00015E14 7C 7F 1B 78 */ mr r31, r3 +/* 00009088 00015E18 81 7F 00 48 */ lwz r11, 0x48(r31) +/* 0000908C 00015E1C 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00009090 00015E20 41 82 93 14 */ beq .L_000023A4 +/* 00009094 00015E24 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 00009098 00015E28 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000909C 00015E2C 80 09 00 14 */ lwz r0, 0x14(r9) +/* 000090A0 00015E30 7C 6B 1A 14 */ add r3, r11, r3 +/* 000090A4 00015E34 7C 08 03 A6 */ mtlr r0 +/* 000090A8 00015E38 4E 80 00 21 */ blrl +/* 000090AC 00015E3C 81 7F 00 50 */ lwz r11, 0x50(r31) +/* 000090B0 00015E40 7C 63 1B 79 */ mr. r3, r3 +/* 000090B4 00015E44 41 82 90 D8 */ beq OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv +/* 000090B8 00015E48 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 000090BC 00015E4C 41 82 90 D8 */ beq .L_00002194 +/* 000090C0 00015E50 81 23 00 00 */ lwz r9, 0x0(r3) +/* 000090C4 00015E54 80 0B 00 00 */ lwz r0, 0x0(r11) +/* 000090C8 00015E58 7D 3E 02 78 */ xor r30, r9, r0 +/* 000090CC 00015E5C 21 7E 00 00 */ subfic r11, r30, 0x0 +/* 000090D0 00015E60 7F CB F1 14 */ adde r30, r11, r30 +/* 000090D4 00015E64 48 00 90 F0 */ b .L_000121C4 +/* 000090D8 00015E68 2C 03 00 00 */ cmpwi r3, 0x0 +.L_000090DC: +/* 000090DC 00015E6C 38 00 00 00 */ li r0, 0x0 +/* 000090E0 00015E70 40 82 90 EC */ bne .L_000021CC +.L_000090E4: +/* 000090E4 00015E74 21 2B 00 00 */ subfic r9, r11, 0x0 +/* 000090E8 00015E78 7C 09 59 14 */ adde r0, r9, r11 +/* 000090EC 00015E7C 7C 1E 03 78 */ mr r30, r0 +/* 000090F0 00015E80 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 000090F4 00015E84 40 82 91 24 */ bne .L_00002218 +/* 000090F8 00015E88 80 9F 00 50 */ lwz r4, 0x50(r31) +/* 000090FC 00015E8C 2C 04 00 00 */ cmpwi r4, 0x0 +/* 00009100 00015E90 41 82 91 30 */ beq .L_00002230 +/* 00009104 00015E94 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 00009108 00015E98 38 1F 00 18 */ addi r0, r31, 0x18 +/* 0000910C 00015E9C A8 69 00 18 */ lha r3, 0x18(r9) +/* 00009110 00015EA0 81 29 00 1C */ lwz r9, 0x1c(r9) +/* 00009114 00015EA4 7C 60 1A 14 */ add r3, r0, r3 +/* 00009118 00015EA8 7D 28 03 A6 */ mtlr r9 +.L_0000911C: +/* 0000911C 00015EAC 4E 80 00 21 */ blrl +/* 00009120 00015EB0 93 DF 00 50 */ stw r30, 0x50(r31) +/* 00009124 00015EB4 80 1F 00 50 */ lwz r0, 0x50(r31) +/* 00009128 00015EB8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000912C 00015EBC 40 82 93 14 */ bne .L_00002440 +/* 00009130 00015EC0 80 7F 00 48 */ lwz r3, 0x48(r31) +/* 00009134 00015EC4 81 23 00 04 */ lwz r9, 0x4(r3) +/* 00009138 00015EC8 A8 09 00 10 */ lha r0, 0x10(r9) +.L_0000913C: +/* 0000913C 00015ECC 81 29 00 14 */ lwz r9, 0x14(r9) +/* 00009140 00015ED0 7C 63 02 14 */ add r3, r3, r0 +/* 00009144 00015ED4 7D 28 03 A6 */ mtlr r9 +/* 00009148 00015ED8 4E 80 00 21 */ blrl +/* 0000914C 00015EDC 7C 7D 1B 79 */ mr. r29, r3 +/* 00009150 00015EE0 41 82 93 14 */ beq .L_00002464 +/* 00009154 00015EE4 81 3D 00 04 */ lwz r9, 0x4(r29) +/* 00009158 00015EE8 3B DF 00 38 */ addi r30, r31, 0x38 +/* 0000915C 00015EEC 80 09 00 EC */ lwz r0, 0xec(r9) +.L_00009160: +/* 00009160 00015EF0 A8 69 00 E8 */ lha r3, 0xe8(r9) +/* 00009164 00015EF4 7C 08 03 A6 */ mtlr r0 +/* 00009168 00015EF8 7C 7D 1A 14 */ add r3, r29, r3 +/* 0000916C 00015EFC 4E 80 00 21 */ blrl +/* 00009170 00015F00 7C 64 1B 78 */ mr r4, r3 +.L_00009174: +/* 00009174 00015F04 7F C3 F3 78 */ mr r3, r30 +/* 00009178 00015F08 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi +.L_0000917C: +/* 0000917C 00015F0C 80 1F 00 3C */ lwz r0, 0x3c(r31) +/* 00009180 00015F10 39 20 00 01 */ li r9, 0x1 +/* 00009184 00015F14 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00009188 00015F18 40 82 91 90 */ bne .L_00002318 +/* 0000918C 00015F1C 39 20 00 00 */ li r9, 0x0 +/* 00009190 00015F20 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00009194 00015F24 41 82 93 14 */ beq .L_000024A8 +/* 00009198 00015F28 3C 80 00 00 */ lis r4, _IHandle__8IVehicle@ha +/* 0000919C 00015F2C 80 7D 00 00 */ lwz r3, 0x0(r29) +/* 000091A0 00015F30 38 84 00 00 */ addi r4, r4, _IHandle__8IVehicle@l +/* 000091A4 00015F34 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 000091A8 00015F38 38 00 00 01 */ li r0, 0x1 +.L_000091AC: +/* 000091AC 00015F3C 90 7F 00 50 */ stw r3, 0x50(r31) +/* 000091B0 00015F40 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000091B4 00015F44 40 82 91 BC */ bne .L_00002370 +/* 000091B8 00015F48 38 00 00 00 */ li r0, 0x0 +/* 000091BC 00015F4C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000091C0 00015F50 41 82 93 14 */ beq .L_000024D4 +/* 000091C4 00015F54 81 3F 00 1C */ lwz r9, 0x1c(r31) +.L_000091C8: +/* 000091C8 00015F58 7C 64 1B 78 */ mr r4, r3 +/* 000091CC 00015F5C 38 1F 00 18 */ addi r0, r31, 0x18 +/* 000091D0 00015F60 A8 69 00 10 */ lha r3, 0x10(r9) +/* 000091D4 00015F64 81 29 00 14 */ lwz r9, 0x14(r9) +/* 000091D8 00015F68 7C 60 1A 14 */ add r3, r0, r3 +/* 000091DC 00015F6C 7D 28 03 A6 */ mtlr r9 +/* 000091E0 00015F70 4E 80 00 21 */ blrl +/* 000091E4 00015F74 80 9F 00 50 */ lwz r4, 0x50(r31) +/* 000091E8 00015F78 3C A0 00 00 */ lis r5, .rodata+0x824@ha +/* 000091EC 00015F7C 38 7F 00 20 */ addi r3, r31, 0x20 +/* 000091F0 00015F80 38 A5 08 24 */ addi r5, r5, .rodata+0x824@l +/* 000091F4 00015F84 48 00 00 01 */ bl AddListener__Q23Sim9CollisionPQ33Sim9Collision9IListenerPQ33UTL3COM8IUnknownPCc +/* 000091F8 00015F88 81 7F 00 50 */ lwz r11, 0x50(r31) +/* 000091FC 00015F8C 83 DF 00 34 */ lwz r30, 0x34(r31) +/* 00009200 00015F90 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 00009204 00015F94 A8 69 00 98 */ lha r3, 0x98(r9) +/* 00009208 00015F98 80 09 00 9C */ lwz r0, 0x9c(r9) +/* 0000920C 00015F9C 7C 6B 1A 14 */ add r3, r11, r3 +/* 00009210 00015FA0 7C 08 03 A6 */ mtlr r0 +/* 00009214 00015FA4 4E 80 00 21 */ blrl +/* 00009218 00015FA8 81 23 00 08 */ lwz r9, 0x8(r3) +/* 0000921C 00015FAC 80 69 00 1C */ lwz r3, 0x1c(r9) +/* 00009220 00015FB0 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00009224 00015FB4 40 82 92 30 */ bne .L_00002454 +/* 00009228 00015FB8 3D 20 00 00 */ lis r9, .rodata@ha +/* 0000922C 00015FBC 38 69 00 00 */ addi r3, r9, .rodata@l +/* 00009230 00015FC0 48 00 00 01 */ bl bStringHash__FPCc +/* 00009234 00015FC4 7C 64 1B 78 */ mr r4, r3 +/* 00009238 00015FC8 7F C3 F3 78 */ mr r3, r30 +/* 0000923C 00015FCC 48 00 13 CD */ bl .L_0000A608 +.L_00009240: +/* 00009240 00015FD0 80 1F 00 38 */ lwz r0, 0x38(r31) +/* 00009244 00015FD4 81 3F 00 34 */ lwz r9, 0x34(r31) +/* 00009248 00015FD8 90 09 00 8C */ stw r0, 0x8c(r9) +.L_0000924C: +/* 0000924C 00015FDC 81 7D 00 04 */ lwz r11, 0x4(r29) +/* 00009250 00015FE0 80 0B 00 AC */ lwz r0, 0xac(r11) +/* 00009254 00015FE4 A8 6B 00 A8 */ lha r3, 0xa8(r11) +.L_00009258: +/* 00009258 00015FE8 7C 08 03 A6 */ mtlr r0 +.L_0000925C: +/* 0000925C 00015FEC 7C 7D 1A 14 */ add r3, r29, r3 +/* 00009260 00015FF0 4E 80 00 21 */ blrl +/* 00009264 00015FF4 7C 64 1B 78 */ mr r4, r3 +/* 00009268 00015FF8 81 24 00 04 */ lwz r9, 0x4(r4) +/* 0000926C 00015FFC 38 61 00 08 */ addi r3, r1, 0x8 +/* 00009270 00016000 A8 09 00 A0 */ lha r0, 0xa0(r9) +/* 00009274 00016004 81 29 00 A4 */ lwz r9, 0xa4(r9) +/* 00009278 00016008 7C 84 02 14 */ add r4, r4, r0 +/* 0000927C 0001600C 7D 28 03 A6 */ mtlr r9 +.L_00009280: +/* 00009280 00016010 4E 80 00 21 */ blrl +.L_00009284: +/* 00009284 00016014 C1 81 00 08 */ lfs f12, 0x8(r1) +/* 00009288 00016018 3C 80 00 00 */ lis r4, _IHandle__13ITransmission@ha +/* 0000928C 0001601C C1 A1 00 0C */ lfs f13, 0xc(r1) +/* 00009290 00016020 38 84 00 00 */ addi r4, r4, _IHandle__13ITransmission@l +/* 00009294 00016024 C0 01 00 10 */ lfs f0, 0x10(r1) +/* 00009298 00016028 81 7F 00 34 */ lwz r11, 0x34(r31) +/* 0000929C 0001602C D1 81 00 18 */ stfs f12, 0x18(r1) +/* 000092A0 00016030 D1 A1 00 1C */ stfs f13, 0x1c(r1) +/* 000092A4 00016034 D0 01 00 20 */ stfs f0, 0x20(r1) +/* 000092A8 00016038 D0 0B 00 30 */ stfs f0, 0x30(r11) +/* 000092AC 0001603C D1 8B 00 28 */ stfs f12, 0x28(r11) +/* 000092B0 00016040 D1 AB 00 2C */ stfs f13, 0x2c(r11) +/* 000092B4 00016044 81 3F 00 50 */ lwz r9, 0x50(r31) +/* 000092B8 00016048 80 69 00 00 */ lwz r3, 0x0(r9) +/* 000092BC 0001604C 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 000092C0 00016050 7C 7E 1B 79 */ mr. r30, r3 +/* 000092C4 00016054 38 00 00 01 */ li r0, 0x1 +/* 000092C8 00016058 40 82 92 D0 */ bne .L_00002598 +/* 000092CC 0001605C 38 00 00 00 */ li r0, 0x0 +/* 000092D0 00016060 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000092D4 00016064 41 82 93 14 */ beq .L_000025E8 +/* 000092D8 00016068 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 000092DC 0001606C 80 09 00 44 */ lwz r0, 0x44(r9) +/* 000092E0 00016070 A8 69 00 40 */ lha r3, 0x40(r9) +/* 000092E4 00016074 7C 08 03 A6 */ mtlr r0 +/* 000092E8 00016078 7C 7E 1A 14 */ add r3, r30, r3 +/* 000092EC 0001607C 4E 80 00 21 */ blrl +/* 000092F0 00016080 81 3F 00 34 */ lwz r9, 0x34(r31) +/* 000092F4 00016084 D0 29 00 14 */ stfs f1, 0x14(r9) +/* 000092F8 00016088 81 7E 00 04 */ lwz r11, 0x4(r30) +/* 000092FC 0001608C A8 6B 00 10 */ lha r3, 0x10(r11) +/* 00009300 00016090 80 0B 00 14 */ lwz r0, 0x14(r11) +/* 00009304 00016094 7C 7E 1A 14 */ add r3, r30, r3 +/* 00009308 00016098 7C 08 03 A6 */ mtlr r0 +/* 0000930C 0001609C 4E 80 00 21 */ blrl +/* 00009310 000160A0 90 7F 00 78 */ stw r3, 0x78(r31) +/* 00009314 000160A4 80 01 00 3C */ lwz r0, 0x3c(r1) +/* 00009318 000160A8 7C 08 03 A6 */ mtlr r0 +/* 0000931C 000160AC BB A1 00 2C */ lmw r29, 0x2c(r1) +/* 00009320 000160B0 38 21 00 38 */ addi r1, r1, 0x38 +/* 00009324 000160B4 4E 80 00 20 */ blr +.endfn AquireCar__13CDActionDrive + +# .text:0x9328 | size: 0x1194 +.fn Update__13CDActionDrivef, global +/* 00009328 000160B8 94 21 FE E0 */ stwu r1, -0x120(r1) +/* 0000932C 000160BC 7C 08 02 A6 */ mflr r0 +/* 00009330 000160C0 F3 41 00 F0 */ psq_st f26, 0xf0(r1), 0, qr0 +/* 00009334 000160C4 F3 61 00 F8 */ psq_st f27, 0xf8(r1), 0, qr0 +/* 00009338 000160C8 F3 81 01 00 */ psq_st f28, 0x100(r1), 0, qr0 +/* 0000933C 000160CC F3 A1 01 08 */ psq_st f29, 0x108(r1), 0, qr0 +/* 00009340 000160D0 F3 C1 01 10 */ psq_st f30, 0x110(r1), 0, qr0 +/* 00009344 000160D4 F3 E1 01 18 */ psq_st f31, 0x118(r1), 0, qr0 +/* 00009348 000160D8 BE 81 00 C0 */ stmw r20, 0xc0(r1) +/* 0000934C 000160DC 90 01 01 24 */ stw r0, 0x124(r1) +/* 00009350 000160E0 7C 7F 1B 78 */ mr r31, r3 +/* 00009354 000160E4 3D 20 00 00 */ lis r9, .rodata+0x860@ha +/* 00009358 000160E8 C0 1F 00 5C */ lfs f0, 0x5c(r31) +/* 0000935C 000160EC 3B C0 00 00 */ li r30, 0x0 +/* 00009360 000160F0 C1 A9 08 60 */ lfs f13, .rodata+0x860@l(r9) +/* 00009364 000160F4 FF 80 08 90 */ fmr f28, f1 +/* 00009368 000160F8 3D 20 00 00 */ lis r9, gCinematicMomementCamera@ha +.L_0000936C: +/* 0000936C 000160FC 3D 60 00 00 */ lis r11, gGameBreakerCamera@ha +/* 00009370 00016100 EC 00 E0 28 */ fsubs f0, f0, f28 +.L_00009374: +/* 00009374 00016104 93 C9 00 00 */ stw r30, gCinematicMomementCamera@l(r9) +/* 00009378 00016108 93 CB 00 00 */ stw r30, gGameBreakerCamera@l(r11) +/* 0000937C 0001610C FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00009380 00016110 D0 1F 00 5C */ stfs f0, 0x5c(r31) +/* 00009384 00016114 3F 20 00 00 */ lis r25, .rodata+0x860@ha +/* 00009388 00016118 4C 62 0B 82 */ cror un, eq, gt +/* 0000938C 0001611C 41 83 93 94 */ bso .L_00002720 +/* 00009390 00016120 D1 BF 00 5C */ stfs f13, 0x5c(r31) +/* 00009394 00016124 C0 1F 00 60 */ lfs f0, 0x60(r31) +/* 00009398 00016128 EC 00 E0 28 */ fsubs f0, f0, f28 +/* 0000939C 0001612C FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 000093A0 00016130 D0 1F 00 60 */ stfs f0, 0x60(r31) +/* 000093A4 00016134 4C 62 0B 82 */ cror un, eq, gt +/* 000093A8 00016138 41 83 93 B0 */ bso .L_00002758 +.L_000093AC: +/* 000093AC 0001613C D1 BF 00 60 */ stfs f13, 0x60(r31) +/* 000093B0 00016140 C0 1F 00 64 */ lfs f0, 0x64(r31) +/* 000093B4 00016144 EC 00 E0 28 */ fsubs f0, f0, f28 +/* 000093B8 00016148 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 000093BC 0001614C D0 1F 00 64 */ stfs f0, 0x64(r31) +/* 000093C0 00016150 4C 62 0B 82 */ cror un, eq, gt +/* 000093C4 00016154 41 83 93 CC */ bso .L_00002790 +/* 000093C8 00016158 D1 BF 00 64 */ stfs f13, 0x64(r31) +/* 000093CC 0001615C 80 1F 00 48 */ lwz r0, 0x48(r31) +/* 000093D0 00016160 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000093D4 00016164 40 82 94 20 */ bne GetAnchorID__11CameraMover +/* 000093D8 00016168 80 9F 00 50 */ lwz r4, 0x50(r31) +/* 000093DC 0001616C 2C 04 00 00 */ cmpwi r4, 0x0 +/* 000093E0 00016170 41 82 A4 90 */ beq .L_00003870 +/* 000093E4 00016174 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 000093E8 00016178 38 1F 00 18 */ addi r0, r31, 0x18 +/* 000093EC 0001617C A8 69 00 18 */ lha r3, 0x18(r9) +/* 000093F0 00016180 81 29 00 1C */ lwz r9, 0x1c(r9) +/* 000093F4 00016184 7C 60 1A 14 */ add r3, r0, r3 +.L_000093F8: +/* 000093F8 00016188 7D 28 03 A6 */ mtlr r9 +/* 000093FC 0001618C 4E 80 00 21 */ blrl +/* 00009400 00016190 93 DF 00 50 */ stw r30, 0x50(r31) +/* 00009404 00016194 48 00 A4 90 */ b .L_00013894 +/* 00009408 00016198 81 3F 00 34 */ lwz r9, 0x34(r31) +/* 0000940C 0001619C 38 00 00 01 */ li r0, 0x1 +.L_00009410: +/* 00009410 000161A0 3D 60 00 00 */ lis r11, gCamCloseToRoadBlock@ha +/* 00009414 000161A4 90 09 00 D0 */ stw r0, 0xd0(r9) +/* 00009418 000161A8 90 0B 00 00 */ stw r0, gCamCloseToRoadBlock@l(r11) +/* 0000941C 000161AC 48 00 98 E0 */ b .L_00012CFC +/* 00009420 000161B0 7F E3 FB 78 */ mr r3, r31 +/* 00009424 000161B4 48 00 90 75 */ bl .L_00012498 +/* 00009428 000161B8 81 3F 00 34 */ lwz r9, 0x34(r31) +/* 0000942C 000161BC 93 C9 00 C8 */ stw r30, 0xc8(r9) +/* 00009430 000161C0 81 7F 00 50 */ lwz r11, 0x50(r31) +/* 00009434 000161C4 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00009438 000161C8 41 82 94 68 */ beq .L_000028A0 +/* 0000943C 000161CC 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 00009440 000161D0 A8 69 01 00 */ lha r3, 0x100(r9) +/* 00009444 000161D4 80 09 01 04 */ lwz r0, 0x104(r9) +/* 00009448 000161D8 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000944C 000161DC 7C 08 03 A6 */ mtlr r0 +/* 00009450 000161E0 4E 80 00 21 */ blrl +/* 00009454 000161E4 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00009458 000161E8 41 82 94 68 */ beq .L_000028C0 +/* 0000945C 000161EC 81 3F 00 34 */ lwz r9, 0x34(r31) +/* 00009460 000161F0 38 00 00 01 */ li r0, 0x1 +/* 00009464 000161F4 90 09 00 C8 */ stw r0, 0xc8(r9) +/* 00009468 000161F8 80 7F 00 2C */ lwz r3, 0x2c(r31) +/* 0000946C 000161FC 3F C0 00 00 */ lis r30, _11GRaceStatus.fObj@ha +/* 00009470 00016200 81 23 00 08 */ lwz r9, 0x8(r3) +/* 00009474 00016204 A8 09 00 50 */ lha r0, 0x50(r9) +/* 00009478 00016208 81 29 00 54 */ lwz r9, 0x54(r9) +/* 0000947C 0001620C 7C 63 02 14 */ add r3, r3, r0 +/* 00009480 00016210 7D 28 03 A6 */ mtlr r9 +/* 00009484 00016214 4E 80 00 21 */ blrl +/* 00009488 00016218 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000948C 0001621C 41 82 95 30 */ beq .L_000029BC +/* 00009490 00016220 80 7E 00 00 */ lwz r3, _11GRaceStatus.fObj@l(r30) +/* 00009494 00016224 38 00 00 01 */ li r0, 0x1 +/* 00009498 00016228 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000949C 0001622C 40 82 94 A4 */ bne .L_00002940 +/* 000094A0 00016230 38 00 00 00 */ li r0, 0x0 +/* 000094A4 00016234 2C 00 00 00 */ cmpwi r0, 0x0 +.L_000094A8: +/* 000094A8 00016238 41 82 95 30 */ beq .L_000029D8 +/* 000094AC 0001623C 80 63 1A AC */ lwz r3, 0x1aac(r3) +/* 000094B0 00016240 38 00 00 00 */ li r0, 0x0 +/* 000094B4 00016244 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000094B8 00016248 41 82 94 D4 */ beq .L_0000298C +/* 000094BC 0001624C 48 00 00 01 */ bl GetTimeLimit__C15GRaceParameters +/* 000094C0 00016250 3D 20 00 00 */ lis r9, .rodata+0x860@ha +/* 000094C4 00016254 C0 09 08 60 */ lfs f0, .rodata+0x860@l(r9) +/* 000094C8 00016258 FF 81 00 00 */ fcmpu cr7, f1, f0 +/* 000094CC 0001625C 7C 00 00 26 */ mfcr r0 +/* 000094D0 00016260 54 00 F7 FE */ extrwi r0, r0, 1, 29 +/* 000094D4 00016264 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000094D8 00016268 41 82 95 30 */ beq .L_00002A08 +/* 000094DC 0001626C 80 7E 00 00 */ lwz r3, _11GRaceStatus.fObj@l(r30) +/* 000094E0 00016270 48 00 00 01 */ bl GetRaceTimeRemaining__C11GRaceStatus +/* 000094E4 00016274 3D 20 00 00 */ lis r9, .rodata+0x860@ha +/* 000094E8 00016278 C0 09 08 60 */ lfs f0, .rodata+0x860@l(r9) +/* 000094EC 0001627C FC 01 00 00 */ fcmpu cr0, f1, f0 +/* 000094F0 00016280 41 81 95 30 */ bgt .L_00002A20 +/* 000094F4 00016284 81 7F 00 48 */ lwz r11, 0x48(r31) +.L_000094F8: +/* 000094F8 00016288 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 000094FC 0001628C A8 69 00 10 */ lha r3, 0x10(r9) +/* 00009500 00016290 80 09 00 14 */ lwz r0, 0x14(r9) +/* 00009504 00016294 7C 6B 1A 14 */ add r3, r11, r3 +/* 00009508 00016298 7C 08 03 A6 */ mtlr r0 +/* 0000950C 0001629C 4E 80 00 21 */ blrl +/* 00009510 000162A0 7C 64 1B 78 */ mr r4, r3 +/* 00009514 000162A4 80 7E 00 00 */ lwz r3, _11GRaceStatus.fObj@l(r30) +/* 00009518 000162A8 48 00 00 01 */ bl GetRacerInfo__11GRaceStatusP8ISimable +/* 0000951C 000162AC 7C 63 1B 79 */ mr. r3, r3 +/* 00009520 000162B0 41 82 95 30 */ beq .L_00002A50 +/* 00009524 000162B4 80 03 00 30 */ lwz r0, 0x30(r3) +/* 00009528 000162B8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000952C 000162BC 41 82 A4 90 */ beq .L_000039BC +/* 00009530 000162C0 3D 20 00 00 */ lis r9, _11GRaceStatus.fObj@ha +/* 00009534 000162C4 39 60 00 01 */ li r11, 0x1 +/* 00009538 000162C8 80 09 00 00 */ lwz r0, _11GRaceStatus.fObj@l(r9) +/* 0000953C 000162CC 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00009540 000162D0 40 82 95 48 */ bne .L_00002A88 +.L_00009544: +/* 00009544 000162D4 39 60 00 00 */ li r11, 0x0 +/* 00009548 000162D8 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000954C 000162DC 41 82 95 8C */ beq .L_00002AD8 +.L_00009550: +/* 00009550 000162E0 81 7F 00 48 */ lwz r11, 0x48(r31) +/* 00009554 000162E4 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 00009558 000162E8 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000955C 000162EC 80 09 00 14 */ lwz r0, 0x14(r9) +/* 00009560 000162F0 7C 6B 1A 14 */ add r3, r11, r3 +/* 00009564 000162F4 7C 08 03 A6 */ mtlr r0 +.L_00009568: +/* 00009568 000162F8 4E 80 00 21 */ blrl +/* 0000956C 000162FC 7C 64 1B 78 */ mr r4, r3 +/* 00009570 00016300 80 7E 00 00 */ lwz r3, _11GRaceStatus.fObj@l(r30) +/* 00009574 00016304 48 00 00 01 */ bl GetRacerInfo__11GRaceStatusP8ISimable +/* 00009578 00016308 7C 63 1B 79 */ mr. r3, r3 +/* 0000957C 0001630C 41 82 95 8C */ beq .L_00002B08 +/* 00009580 00016310 80 03 00 34 */ lwz r0, 0x34(r3) +/* 00009584 00016314 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00009588 00016318 40 82 A4 90 */ bne .L_00003A18 +/* 0000958C 0001631C 81 3F 00 34 */ lwz r9, 0x34(r31) +/* 00009590 00016320 3A A0 00 00 */ li r21, 0x0 +/* 00009594 00016324 92 A9 00 D0 */ stw r21, 0xd0(r9) +/* 00009598 00016328 81 7F 00 50 */ lwz r11, 0x50(r31) +/* 0000959C 0001632C 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 000095A0 00016330 A8 69 01 60 */ lha r3, 0x160(r9) +/* 000095A4 00016334 80 09 01 64 */ lwz r0, 0x164(r9) +/* 000095A8 00016338 7C 6B 1A 14 */ add r3, r11, r3 +.L_000095AC: +/* 000095AC 0001633C 7C 08 03 A6 */ mtlr r0 +/* 000095B0 00016340 4E 80 00 21 */ blrl +/* 000095B4 00016344 7C 6B 1B 79 */ mr. r11, r3 +/* 000095B8 00016348 41 82 98 E0 */ beq .L_00002E98 +/* 000095BC 0001634C 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 000095C0 00016350 A8 69 01 48 */ lha r3, 0x148(r9) +/* 000095C4 00016354 80 09 01 4C */ lwz r0, 0x14c(r9) +/* 000095C8 00016358 7C 6B 1A 14 */ add r3, r11, r3 +/* 000095CC 0001635C 7C 08 03 A6 */ mtlr r0 +/* 000095D0 00016360 4E 80 00 21 */ blrl +/* 000095D4 00016364 7C 6A 1B 79 */ mr. r10, r3 +.L_000095D8: +/* 000095D8 00016368 41 82 98 E0 */ beq .L_00002EB8 +/* 000095DC 0001636C 81 2A 00 04 */ lwz r9, 0x4(r10) +/* 000095E0 00016370 3D 60 00 00 */ lis r11, .rodata+0x860@ha +/* 000095E4 00016374 C3 EB 08 60 */ lfs f31, .rodata+0x860@l(r11) +/* 000095E8 00016378 38 81 00 B8 */ addi r4, r1, 0xb8 +/* 000095EC 0001637C A8 69 00 88 */ lha r3, 0x88(r9) +/* 000095F0 00016380 80 09 00 8C */ lwz r0, 0x8c(r9) +/* 000095F4 00016384 7C 6A 1A 14 */ add r3, r10, r3 +/* 000095F8 00016388 D3 E1 00 B8 */ stfs f31, 0xb8(r1) +/* 000095FC 0001638C 7C 08 03 A6 */ mtlr r0 +/* 00009600 00016390 4E 80 00 21 */ blrl +/* 00009604 00016394 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00009608 00016398 41 82 98 E0 */ beq .L_00002EE8 +.L_0000960C: +/* 0000960C 0001639C C1 A1 00 B8 */ lfs f13, 0xb8(r1) +/* 00009610 000163A0 FC 0D F8 00 */ fcmpu cr0, f13, f31 +/* 00009614 000163A4 4C 62 03 82 */ cror un, eq, lt +/* 00009618 000163A8 41 83 98 E0 */ bso .L_00002EF8 +/* 0000961C 000163AC 81 7F 00 34 */ lwz r11, 0x34(r31) +/* 00009620 000163B0 3D 20 00 00 */ lis r9, .rodata+0x864@ha +/* 00009624 000163B4 C1 89 08 64 */ lfs f12, .rodata+0x864@l(r9) +/* 00009628 000163B8 C0 0B 00 10 */ lfs f0, 0x10(r11) +/* 0000962C 000163BC EC 00 03 32 */ fmuls f0, f0, f12 +/* 00009630 000163C0 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 00009634 000163C4 4C 62 0B 82 */ cror un, eq, gt +/* 00009638 000163C8 41 83 98 E0 */ bso .L_00002F18 +/* 0000963C 000163CC 3D 20 00 00 */ lis r9, .rodata+0x868@ha +/* 00009640 000163D0 3D 40 00 00 */ lis r10, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@ha +/* 00009644 000163D4 C3 C9 08 68 */ lfs f30, .rodata+0x868@l(r9) +/* 00009648 000163D8 39 4A 00 00 */ addi r10, r10, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@l +/* 0000964C 000163DC 3D 20 00 00 */ lis r9, .rodata+0x874@ha +/* 00009650 000163E0 3D 60 00 00 */ lis r11, .rodata+0x878@ha +/* 00009654 000163E4 C3 49 08 74 */ lfs f26, .rodata+0x874@l(r9) +/* 00009658 000163E8 7D 5B 53 78 */ mr r27, r10 +/* 0000965C 000163EC C3 6B 08 78 */ lfs f27, .rodata+0x878@l(r11) +/* 00009660 000163F0 FF A0 60 90 */ fmr f29, f12 +/* 00009664 000163F4 83 AA 00 E0 */ lwz r29, 0xe0(r10) +/* 00009668 000163F8 3E C0 00 00 */ lis r22, _12VehicleClass.CAR@ha +/* 0000966C 000163FC 3B 41 00 08 */ addi r26, r1, 0x8 +/* 00009670 00016400 3E E0 00 00 */ lis r23, .rodata+0x86C@ha +/* 00009674 00016404 3F 00 00 00 */ lis r24, .rodata+0x870@ha +/* 00009678 00016408 80 1B 00 E8 */ lwz r0, 0xe8(r27) +/* 0000967C 0001640C 81 3B 00 E0 */ lwz r9, 0xe0(r27) +/* 00009680 00016410 54 00 10 3A */ slwi r0, r0, 2 +/* 00009684 00016414 7D 29 02 14 */ add r9, r9, r0 +/* 00009688 00016418 7C 1D 48 00 */ cmpw r29, r9 +/* 0000968C 0001641C 41 82 98 E0 */ beq .L_00002F6C +/* 00009690 00016420 83 DD 00 00 */ lwz r30, 0x0(r29) +/* 00009694 00016424 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 00009698 00016428 41 82 98 D8 */ beq .L_00002F70 +/* 0000969C 0001642C 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 000096A0 00016430 A8 69 01 18 */ lha r3, 0x118(r9) +/* 000096A4 00016434 80 09 01 1C */ lwz r0, 0x11c(r9) +/* 000096A8 00016438 7C 7E 1A 14 */ add r3, r30, r3 +/* 000096AC 0001643C 7C 08 03 A6 */ mtlr r0 +/* 000096B0 00016440 4E 80 00 21 */ blrl +/* 000096B4 00016444 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000096B8 00016448 41 82 98 D8 */ beq .L_00002F90 +/* 000096BC 0001644C 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 000096C0 00016450 80 09 00 94 */ lwz r0, 0x94(r9) +/* 000096C4 00016454 A8 69 00 90 */ lha r3, 0x90(r9) +/* 000096C8 00016458 7C 08 03 A6 */ mtlr r0 +/* 000096CC 0001645C 7C 7E 1A 14 */ add r3, r30, r3 +/* 000096D0 00016460 4E 80 00 21 */ blrl +/* 000096D4 00016464 81 23 00 00 */ lwz r9, 0x0(r3) +/* 000096D8 00016468 80 16 00 00 */ lwz r0, _12VehicleClass.CAR@l(r22) +/* 000096DC 0001646C 7C 09 00 00 */ cmpw r9, r0 +/* 000096E0 00016470 40 82 98 D8 */ bne .L_00002FB8 +/* 000096E4 00016474 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 000096E8 00016478 3F 80 00 00 */ lis r28, .rodata+0x86C@ha +.L_000096EC: +/* 000096EC 0001647C 3E 80 00 00 */ lis r20, .rodata+0x870@ha +/* 000096F0 00016480 A8 69 00 20 */ lha r3, 0x20(r9) +.L_000096F4: +/* 000096F4 00016484 80 09 00 24 */ lwz r0, 0x24(r9) +/* 000096F8 00016488 7C 7E 1A 14 */ add r3, r30, r3 +/* 000096FC 0001648C 7C 08 03 A6 */ mtlr r0 +/* 00009700 00016490 4E 80 00 21 */ blrl +/* 00009704 00016494 C1 A3 00 00 */ lfs f13, 0x0(r3) +/* 00009708 00016498 81 3F 00 34 */ lwz r9, 0x34(r31) +/* 0000970C 0001649C D1 A1 00 08 */ stfs f13, 0x8(r1) +/* 00009710 000164A0 C0 F7 08 6C */ lfs f7, .rodata+0x86C@l(r23) +/* 00009714 000164A4 C0 03 00 04 */ lfs f0, 0x4(r3) +/* 00009718 000164A8 C1 18 08 70 */ lfs f8, .rodata+0x870@l(r24) +/* 0000971C 000164AC D0 01 00 0C */ stfs f0, 0xc(r1) +/* 00009720 000164B0 C1 A3 00 08 */ lfs f13, 0x8(r3) +/* 00009724 000164B4 D1 BA 00 08 */ stfs f13, 0x8(r26) +/* 00009728 000164B8 D1 A1 00 18 */ stfs f13, 0x18(r1) +/* 0000972C 000164BC C0 01 00 08 */ lfs f0, 0x8(r1) +/* 00009730 000164C0 C1 61 00 0C */ lfs f11, 0xc(r1) +/* 00009734 000164C4 FC 00 00 50 */ fneg f0, f0 +/* 00009738 000164C8 D0 01 00 1C */ stfs f0, 0x1c(r1) +/* 0000973C 000164CC D1 61 00 20 */ stfs f11, 0x20(r1) +/* 00009740 000164D0 C1 89 00 1C */ lfs f12, 0x1c(r9) +/* 00009744 000164D4 C1 49 00 18 */ lfs f10, 0x18(r9) +/* 00009748 000164D8 C1 29 00 20 */ lfs f9, 0x20(r9) +/* 0000974C 000164DC EC 00 60 28 */ fsubs f0, f0, f12 +/* 00009750 000164E0 ED AD 50 28 */ fsubs f13, f13, f10 +/* 00009754 000164E4 D0 01 00 2C */ stfs f0, 0x2c(r1) +.L_00009758: +/* 00009758 000164E8 ED 6B 48 28 */ fsubs f11, f11, f9 +/* 0000975C 000164EC D1 A1 00 28 */ stfs f13, 0x28(r1) +/* 00009760 000164F0 EC 00 00 32 */ fmuls f0, f0, f0 +/* 00009764 000164F4 D1 61 00 30 */ stfs f11, 0x30(r1) +/* 00009768 000164F8 ED AD 03 7A */ fmadds f13, f13, f13, f0 +/* 0000976C 000164FC ED 6B 6A FA */ fmadds f11, f11, f11, f13 +/* 00009770 00016500 FC 0B F0 00 */ fcmpu cr0, f11, f30 +/* 00009774 00016504 4C 62 03 82 */ cror un, eq, lt +/* 00009778 00016508 41 83 97 A8 */ bso .L_00002F20 +/* 0000977C 0001650C FD A0 58 34 */ frsqrte f13, f11 +/* 00009780 00016510 EC 0D 03 72 */ fmuls f0, f13, f13 +/* 00009784 00016514 ED 8D 01 F2 */ fmuls f12, f13, f7 +/* 00009788 00016518 EC 0B 40 3C */ fnmsubs f0, f11, f0, f8 +/* 0000978C 0001651C ED A0 6B 3A */ fmadds f13, f0, f12, f13 +/* 00009790 00016520 EC 0D 03 72 */ fmuls f0, f13, f13 +/* 00009794 00016524 ED 8D 01 F2 */ fmuls f12, f13, f7 +/* 00009798 00016528 EC 0B 40 3C */ fnmsubs f0, f11, f0, f8 +/* 0000979C 0001652C ED A0 6B 3A */ fmadds f13, f0, f12, f13 +/* 000097A0 00016530 ED AD 02 F2 */ fmuls f13, f13, f11 +/* 000097A4 00016534 48 00 97 AC */ b .L_00012F50 +/* 000097A8 00016538 C1 B9 08 60 */ lfs f13, .rodata+0x860@l(r25) +/* 000097AC 0001653C C3 F9 08 60 */ lfs f31, .rodata+0x860@l(r25) +/* 000097B0 00016540 FC 0D F8 00 */ fcmpu cr0, f13, f31 +/* 000097B4 00016544 4C 62 03 82 */ cror un, eq, lt +/* 000097B8 00016548 41 83 98 D8 */ bso .L_00003090 +/* 000097BC 0001654C 81 3F 00 34 */ lwz r9, 0x34(r31) +/* 000097C0 00016550 C0 09 00 10 */ lfs f0, 0x10(r9) +/* 000097C4 00016554 EC 00 07 72 */ fmuls f0, f0, f29 +/* 000097C8 00016558 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 000097CC 0001655C 4C 62 0B 82 */ cror un, eq, gt +.L_000097D0: +/* 000097D0 00016560 41 83 98 D8 */ bso .L_000030A8 +/* 000097D4 00016564 38 61 00 38 */ addi r3, r1, 0x38 +/* 000097D8 00016568 38 81 00 28 */ addi r4, r1, 0x28 +/* 000097DC 0001656C 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +/* 000097E0 00016570 81 3F 00 34 */ lwz r9, 0x34(r31) +.L_000097E4: +/* 000097E4 00016574 C1 81 00 3C */ lfs f12, 0x3c(r1) +/* 000097E8 00016578 C1 A9 00 4C */ lfs f13, 0x4c(r9) +/* 000097EC 0001657C C0 01 00 38 */ lfs f0, 0x38(r1) +/* 000097F0 00016580 ED 8C 03 72 */ fmuls f12, f12, f13 +/* 000097F4 00016584 C1 49 00 48 */ lfs f10, 0x48(r9) +/* 000097F8 00016588 C1 69 00 50 */ lfs f11, 0x50(r9) +/* 000097FC 0001658C C1 A1 00 40 */ lfs f13, 0x40(r1) +/* 00009800 00016590 EC 00 62 BA */ fmadds f0, f0, f10, f12 +/* 00009804 00016594 EC 0D 02 FA */ fmadds f0, f13, f11, f0 +/* 00009808 00016598 FC 00 D0 00 */ fcmpu cr0, f0, f26 +/* 0000980C 0001659C 4C 62 03 82 */ cror un, eq, lt +/* 00009810 000165A0 41 83 98 D8 */ bso .L_000030E8 +/* 00009814 000165A4 C1 54 08 70 */ lfs f10, .rodata+0x870@l(r20) +/* 00009818 000165A8 FD A0 F8 2E */ fsel f13, f0, f0, f31 +/* 0000981C 000165AC C1 3C 08 6C */ lfs f9, .rodata+0x86C@l(r28) +/* 00009820 000165B0 EC 0A 68 28 */ fsubs f0, f10, f13 +/* 00009824 000165B4 FC 00 53 6E */ fsel f0, f0, f13, f10 +/* 00009828 000165B8 EC 00 00 32 */ fmuls f0, f0, f0 +/* 0000982C 000165BC ED 6A 00 28 */ fsubs f11, f10, f0 +/* 00009830 000165C0 FC 0B F0 00 */ fcmpu cr0, f11, f30 +/* 00009834 000165C4 4C 62 03 82 */ cror un, eq, lt +/* 00009838 000165C8 41 83 98 68 */ bso .L_000030A0 +/* 0000983C 000165CC FD 80 58 34 */ frsqrte f12, f11 +/* 00009840 000165D0 EC 0C 03 32 */ fmuls f0, f12, f12 +/* 00009844 000165D4 ED AC 02 72 */ fmuls f13, f12, f9 +.L_00009848: +/* 00009848 000165D8 EC 0B 50 3C */ fnmsubs f0, f11, f0, f10 +/* 0000984C 000165DC ED 80 63 7A */ fmadds f12, f0, f13, f12 +/* 00009850 000165E0 EC 0C 03 32 */ fmuls f0, f12, f12 +/* 00009854 000165E4 ED AC 02 72 */ fmuls f13, f12, f9 +/* 00009858 000165E8 EC 0B 50 3C */ fnmsubs f0, f11, f0, f10 +/* 0000985C 000165EC ED 80 63 7A */ fmadds f12, f0, f13, f12 +/* 00009860 000165F0 ED 8C 02 F2 */ fmuls f12, f12, f11 +/* 00009864 000165F4 48 00 98 6C */ b .L_000130D0 +/* 00009868 000165F8 FD 80 F8 90 */ fmr f12, f31 +/* 0000986C 000165FC C0 01 00 30 */ lfs f0, 0x30(r1) +/* 00009870 00016600 C1 A1 00 28 */ lfs f13, 0x28(r1) +/* 00009874 00016604 EC 00 03 32 */ fmuls f0, f0, f12 +/* 00009878 00016608 C1 3C 08 6C */ lfs f9, .rodata+0x86C@l(r28) +/* 0000987C 0001660C ED AD 03 32 */ fmuls f13, f13, f12 +/* 00009880 00016610 D0 01 00 48 */ stfs f0, 0x48(r1) +/* 00009884 00016614 ED 8D 03 72 */ fmuls f12, f13, f13 +/* 00009888 00016618 D1 A1 00 4C */ stfs f13, 0x4c(r1) +.L_0000988C: +/* 0000988C 0001661C ED 60 60 3A */ fmadds f11, f0, f0, f12 +.L_00009890: +/* 00009890 00016620 C1 54 08 70 */ lfs f10, .rodata+0x870@l(r20) +/* 00009894 00016624 FC 0B F0 00 */ fcmpu cr0, f11, f30 +/* 00009898 00016628 4C 62 03 82 */ cror un, eq, lt +/* 0000989C 0001662C 41 83 98 CC */ bso .L_00003168 +/* 000098A0 00016630 FC 00 58 34 */ frsqrte f0, f11 +/* 000098A4 00016634 ED A0 00 32 */ fmuls f13, f0, f0 +/* 000098A8 00016638 ED 80 02 72 */ fmuls f12, f0, f9 +/* 000098AC 0001663C ED AB 53 7C */ fnmsubs f13, f11, f13, f10 +/* 000098B0 00016640 EC 0D 03 3A */ fmadds f0, f13, f12, f0 +.L_000098B4: +/* 000098B4 00016644 ED A0 00 32 */ fmuls f13, f0, f0 +/* 000098B8 00016648 ED 80 02 72 */ fmuls f12, f0, f9 +/* 000098BC 0001664C ED AB 53 7C */ fnmsubs f13, f11, f13, f10 +/* 000098C0 00016650 EC 0D 03 3A */ fmadds f0, f13, f12, f0 +/* 000098C4 00016654 EC 00 02 F2 */ fmuls f0, f0, f11 +/* 000098C8 00016658 48 00 98 D0 */ b .L_00013198 +/* 000098CC 0001665C C0 19 08 60 */ lfs f0, .rodata+0x860@l(r25) +/* 000098D0 00016660 FC 00 D8 00 */ fcmpu cr0, f0, f27 +/* 000098D4 00016664 41 80 94 08 */ blt .L_00002CDC +/* 000098D8 00016668 3B BD 00 04 */ addi r29, r29, 0x4 +/* 000098DC 0001666C 48 00 96 78 */ b .L_00012F54 +/* 000098E0 00016670 80 7F 00 50 */ lwz r3, 0x50(r31) +/* 000098E4 00016674 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000098E8 00016678 41 82 9A 14 */ beq .L_000032FC +/* 000098EC 0001667C 80 63 00 00 */ lwz r3, 0x0(r3) +/* 000098F0 00016680 3C 80 00 00 */ lis r4, _IHandle__6IInput@ha +/* 000098F4 00016684 38 84 00 00 */ addi r4, r4, _IHandle__6IInput@l +/* 000098F8 00016688 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 000098FC 0001668C 7C 7E 1B 78 */ mr r30, r3 +/* 00009900 00016690 38 00 00 01 */ li r0, 0x1 +/* 00009904 00016694 7F DD F3 78 */ mr r29, r30 +/* 00009908 00016698 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 0000990C 0001669C 40 82 99 14 */ bne .L_00003220 +/* 00009910 000166A0 38 00 00 00 */ li r0, 0x0 +/* 00009914 000166A4 2C 00 00 00 */ cmpwi r0, 0x0 +.L_00009918: +/* 00009918 000166A8 41 82 9A 14 */ beq .L_0000332C +/* 0000991C 000166AC 81 7F 00 2C */ lwz r11, 0x2c(r31) +/* 00009920 000166B0 38 80 00 00 */ li r4, 0x0 +/* 00009924 000166B4 81 2B 00 08 */ lwz r9, 0x8(r11) +/* 00009928 000166B8 80 09 00 34 */ lwz r0, 0x34(r9) +/* 0000992C 000166BC A8 69 00 30 */ lha r3, 0x30(r9) +/* 00009930 000166C0 7C 08 03 A6 */ mtlr r0 +/* 00009934 000166C4 7C 6B 1A 14 */ add r3, r11, r3 +/* 00009938 000166C8 4E 80 00 21 */ blrl +/* 0000993C 000166CC 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 00009940 000166D0 A8 69 00 78 */ lha r3, 0x78(r9) +/* 00009944 000166D4 80 09 00 7C */ lwz r0, 0x7c(r9) +/* 00009948 000166D8 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000994C 000166DC 7C 08 03 A6 */ mtlr r0 +/* 00009950 000166E0 4E 80 00 21 */ blrl +/* 00009954 000166E4 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00009958 000166E8 41 82 99 A8 */ beq .L_00003300 +/* 0000995C 000166EC 80 7F 00 50 */ lwz r3, 0x50(r31) +/* 00009960 000166F0 81 23 00 04 */ lwz r9, 0x4(r3) +/* 00009964 000166F4 A8 09 00 48 */ lha r0, 0x48(r9) +/* 00009968 000166F8 81 29 00 4C */ lwz r9, 0x4c(r9) +/* 0000996C 000166FC 7C 63 02 14 */ add r3, r3, r0 +/* 00009970 00016700 7D 28 03 A6 */ mtlr r9 +/* 00009974 00016704 4E 80 00 21 */ blrl +/* 00009978 00016708 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000997C 0001670C 40 82 99 A8 */ bne .L_00003324 +/* 00009980 00016710 2C 15 00 00 */ cmpwi r21, 0x0 +/* 00009984 00016714 40 82 99 A8 */ bne .L_0000332C +/* 00009988 00016718 80 7F 00 2C */ lwz r3, 0x2c(r31) +/* 0000998C 0001671C 38 80 00 01 */ li r4, 0x1 +/* 00009990 00016720 81 23 00 08 */ lwz r9, 0x8(r3) +/* 00009994 00016724 A8 09 00 30 */ lha r0, 0x30(r9) +/* 00009998 00016728 81 29 00 34 */ lwz r9, 0x34(r9) +/* 0000999C 0001672C 7C 63 02 14 */ add r3, r3, r0 +/* 000099A0 00016730 7D 28 03 A6 */ mtlr r9 +/* 000099A4 00016734 4E 80 00 21 */ blrl +/* 000099A8 00016738 81 7F 00 34 */ lwz r11, 0x34(r31) +/* 000099AC 0001673C 38 00 00 00 */ li r0, 0x0 +/* 000099B0 00016740 90 0B 00 B8 */ stw r0, 0xb8(r11) +/* 000099B4 00016744 81 3D 00 04 */ lwz r9, 0x4(r29) +/* 000099B8 00016748 A8 69 00 18 */ lha r3, 0x18(r9) +/* 000099BC 0001674C 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 000099C0 00016750 7C 7D 1A 14 */ add r3, r29, r3 +/* 000099C4 00016754 7C 08 03 A6 */ mtlr r0 +/* 000099C8 00016758 4E 80 00 21 */ blrl +/* 000099CC 0001675C 3D 20 00 00 */ lis r9, .rodata+0x860@ha +/* 000099D0 00016760 C0 03 00 1C */ lfs f0, 0x1c(r3) +/* 000099D4 00016764 C3 E9 08 60 */ lfs f31, .rodata+0x860@l(r9) +/* 000099D8 00016768 FC 00 F8 00 */ fcmpu cr0, f0, f31 +/* 000099DC 0001676C 41 81 9A 08 */ bgt .L_000033E4 +/* 000099E0 00016770 81 3D 00 04 */ lwz r9, 0x4(r29) +/* 000099E4 00016774 A8 69 00 18 */ lha r3, 0x18(r9) +/* 000099E8 00016778 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 000099EC 0001677C 7C 7D 1A 14 */ add r3, r29, r3 +/* 000099F0 00016780 7C 08 03 A6 */ mtlr r0 +/* 000099F4 00016784 4E 80 00 21 */ blrl +/* 000099F8 00016788 C0 03 00 18 */ lfs f0, 0x18(r3) +/* 000099FC 0001678C FC 00 F8 00 */ fcmpu cr0, f0, f31 +/* 00009A00 00016790 4C 62 03 82 */ cror un, eq, lt +/* 00009A04 00016794 41 83 9A 14 */ bso .L_00003418 +/* 00009A08 00016798 81 3F 00 34 */ lwz r9, 0x34(r31) +/* 00009A0C 0001679C 38 00 00 01 */ li r0, 0x1 +/* 00009A10 000167A0 90 09 00 B8 */ stw r0, 0xb8(r9) +/* 00009A14 000167A4 3D 20 00 00 */ lis r9, .rodata+0x860@ha +/* 00009A18 000167A8 C0 1F 00 6C */ lfs f0, 0x6c(r31) +/* 00009A1C 000167AC C1 89 08 60 */ lfs f12, .rodata+0x860@l(r9) +.L_00009A20: +/* 00009A20 000167B0 FC 00 60 00 */ fcmpu cr0, f0, f12 +/* 00009A24 000167B4 4C 62 03 82 */ cror un, eq, lt +/* 00009A28 000167B8 41 83 9A 70 */ bso .L_00003498 +/* 00009A2C 000167BC ED A0 E0 28 */ fsubs f13, f0, f28 +/* 00009A30 000167C0 D1 BF 00 6C */ stfs f13, 0x6c(r31) +/* 00009A34 000167C4 FC 0D 60 00 */ fcmpu cr0, f13, f12 +/* 00009A38 000167C8 4C 62 03 82 */ cror un, eq, lt +/* 00009A3C 000167CC 41 83 9A 70 */ bso .L_000034AC +/* 00009A40 000167D0 3D 20 00 00 */ lis r9, .rodata+0x87C@ha +/* 00009A44 000167D4 C0 09 08 7C */ lfs f0, .rodata+0x87C@l(r9) +/* 00009A48 000167D8 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 00009A4C 000167DC 4C 62 0B 82 */ cror un, eq, gt +/* 00009A50 000167E0 41 83 9A 70 */ bso .L_000034C0 +/* 00009A54 000167E4 D1 9F 00 6C */ stfs f12, 0x6c(r31) +/* 00009A58 000167E8 48 00 00 01 */ bl Get__16IVisualTreatment +.L_00009A5C: +/* 00009A5C 000167EC 7C 63 1B 79 */ mr. r3, r3 +/* 00009A60 000167F0 41 82 9A 70 */ beq .L_000034D0 +/* 00009A64 000167F4 3D 20 00 00 */ lis r9, .rodata+0x86C@ha +/* 00009A68 000167F8 C0 29 08 6C */ lfs f1, .rodata+0x86C@l(r9) +/* 00009A6C 000167FC 48 00 00 01 */ bl TriggerPulse__16IVisualTreatmentf +/* 00009A70 00016800 80 1F 00 74 */ lwz r0, 0x74(r31) +/* 00009A74 00016804 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00009A78 00016808 41 82 9A AC */ beq .L_00003524 +/* 00009A7C 0001680C 3D 20 00 00 */ lis r9, .rodata+0x870@ha +/* 00009A80 00016810 C1 9F 00 70 */ lfs f12, 0x70(r31) +/* 00009A84 00016814 C1 A9 08 70 */ lfs f13, .rodata+0x870@l(r9) +/* 00009A88 00016818 FC 0C 68 00 */ fcmpu cr0, f12, f13 +/* 00009A8C 0001681C 4C 62 0B 82 */ cror un, eq, gt +/* 00009A90 00016820 41 83 9A D4 */ bso .L_00003564 +/* 00009A94 00016824 3D 20 00 00 */ lis r9, kCinematicMomementSeconds@ha +/* 00009A98 00016828 EC 1C E0 2A */ fadds f0, f28, f28 +/* 00009A9C 0001682C C1 A9 00 00 */ lfs f13, kCinematicMomementSeconds@l(r9) +/* 00009AA0 00016830 EC 00 68 24 */ fdivs f0, f0, f13 +/* 00009AA4 00016834 ED AC 00 2A */ fadds f13, f12, f0 +/* 00009AA8 00016838 48 00 9A D4 */ b .L_0001357C +/* 00009AAC 0001683C 3D 20 00 00 */ lis r9, .rodata+0x860@ha +/* 00009AB0 00016840 C1 9F 00 70 */ lfs f12, 0x70(r31) +/* 00009AB4 00016844 C1 A9 08 60 */ lfs f13, .rodata+0x860@l(r9) +/* 00009AB8 00016848 FC 0C 68 00 */ fcmpu cr0, f12, f13 +/* 00009ABC 0001684C 4C 62 03 82 */ cror un, eq, lt +/* 00009AC0 00016850 41 83 9A D4 */ bso .L_00003594 +/* 00009AC4 00016854 3D 20 00 00 */ lis r9, kCinematicMomementSeconds@ha +/* 00009AC8 00016858 C0 09 00 00 */ lfs f0, kCinematicMomementSeconds@l(r9) +/* 00009ACC 0001685C EC 1C 00 24 */ fdivs f0, f28, f0 +/* 00009AD0 00016860 ED AC 00 28 */ fsubs f13, f12, f0 +/* 00009AD4 00016864 3D 20 00 00 */ lis r9, .rodata+0x880@ha +.L_00009AD8: +/* 00009AD8 00016868 D1 BF 00 70 */ stfs f13, 0x70(r31) +/* 00009ADC 0001686C C0 09 08 80 */ lfs f0, .rodata+0x880@l(r9) +/* 00009AE0 00016870 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 00009AE4 00016874 4C 62 03 82 */ cror un, eq, lt +/* 00009AE8 00016878 41 83 9A F8 */ bso .L_000035E0 +/* 00009AEC 0001687C 3D 20 00 00 */ lis r9, gCinematicMomementCamera@ha +/* 00009AF0 00016880 38 00 00 01 */ li r0, 0x1 +/* 00009AF4 00016884 90 09 00 00 */ stw r0, gCinematicMomementCamera@l(r9) +/* 00009AF8 00016888 3D 20 00 00 */ lis r9, gCinematicMomementCamera@ha +/* 00009AFC 0001688C 80 09 00 00 */ lwz r0, gCinematicMomementCamera@l(r9) +/* 00009B00 00016890 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00009B04 00016894 41 82 9B 54 */ beq .L_00003658 +/* 00009B08 00016898 81 3F 00 2C */ lwz r9, 0x2c(r31) +/* 00009B0C 0001689C 81 09 00 1C */ lwz r8, 0x1c(r9) +/* 00009B10 000168A0 2C 08 00 00 */ cmpwi r8, 0x0 +/* 00009B14 000168A4 41 82 9B 54 */ beq .L_00003668 +/* 00009B18 000168A8 3D 20 00 00 */ lis r9, .rodata+0x870@ha +/* 00009B1C 000168AC 3D 60 00 00 */ lis r11, .rodata+0x884@ha +/* 00009B20 000168B0 C1 49 08 70 */ lfs f10, .rodata+0x870@l(r9) +/* 00009B24 000168B4 3D 40 00 00 */ lis r10, .rodata+0x864@ha +/* 00009B28 000168B8 C1 6B 08 84 */ lfs f11, .rodata+0x884@l(r11) +/* 00009B2C 000168BC 3D 20 00 00 */ lis r9, .rodata+0x888@ha +.L_00009B30: +/* 00009B30 000168C0 EC 0A 68 28 */ fsubs f0, f10, f13 +/* 00009B34 000168C4 C1 8A 08 64 */ lfs f12, .rodata+0x864@l(r10) +/* 00009B38 000168C8 C1 A9 08 88 */ lfs f13, .rodata+0x888@l(r9) +/* 00009B3C 000168CC EC 00 62 FA */ fmadds f0, f0, f11, f12 +/* 00009B40 000168D0 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00009B44 000168D4 4C 62 03 82 */ cror un, eq, lt +/* 00009B48 000168D8 41 83 9B 50 */ bso .L_00003698 +/* 00009B4C 000168DC FC 00 50 90 */ fmr f0, f10 +/* 00009B50 000168E0 D0 08 00 CC */ stfs f0, 0xcc(r8) +/* 00009B54 000168E4 80 7F 00 48 */ lwz r3, 0x48(r31) +/* 00009B58 000168E8 81 23 00 04 */ lwz r9, 0x4(r3) +/* 00009B5C 000168EC A8 09 00 88 */ lha r0, 0x88(r9) +/* 00009B60 000168F0 81 29 00 8C */ lwz r9, 0x8c(r9) +/* 00009B64 000168F4 7C 63 02 14 */ add r3, r3, r0 +/* 00009B68 000168F8 7D 28 03 A6 */ mtlr r9 +/* 00009B6C 000168FC 4E 80 00 21 */ blrl +/* 00009B70 00016900 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00009B74 00016904 41 82 9B A4 */ beq .L_00003718 +/* 00009B78 00016908 C1 9F 00 54 */ lfs f12, 0x54(r31) +/* 00009B7C 0001690C 3D 20 00 00 */ lis r9, .rodata+0x870@ha +/* 00009B80 00016910 C1 A9 08 70 */ lfs f13, .rodata+0x870@l(r9) +/* 00009B84 00016914 EC 1C E0 2A */ fadds f0, f28, f28 +/* 00009B88 00016918 ED 80 60 2A */ fadds f12, f0, f12 +/* 00009B8C 0001691C FC 00 68 90 */ fmr f0, f13 +/* 00009B90 00016920 D1 9F 00 54 */ stfs f12, 0x54(r31) +/* 00009B94 00016924 FC 0C 68 00 */ fcmpu cr0, f12, f13 +/* 00009B98 00016928 4C 62 0B 82 */ cror un, eq, gt +/* 00009B9C 0001692C 41 83 9B CC */ bso .L_00003768 +/* 00009BA0 00016930 48 00 9B C8 */ b .L_00013768 +/* 00009BA4 00016934 C0 1F 00 54 */ lfs f0, 0x54(r31) +/* 00009BA8 00016938 3D 20 00 00 */ lis r9, .rodata+0x860@ha +/* 00009BAC 0001693C C1 A9 08 60 */ lfs f13, .rodata+0x860@l(r9) +/* 00009BB0 00016940 ED 80 E0 28 */ fsubs f12, f0, f28 +/* 00009BB4 00016944 FC 00 68 90 */ fmr f0, f13 +/* 00009BB8 00016948 D1 9F 00 54 */ stfs f12, 0x54(r31) +/* 00009BBC 0001694C FC 0C 68 00 */ fcmpu cr0, f12, f13 +/* 00009BC0 00016950 4C 62 03 82 */ cror un, eq, lt +/* 00009BC4 00016954 41 83 9B CC */ bso .L_00003790 +/* 00009BC8 00016958 FC 00 60 90 */ fmr f0, f12 +/* 00009BCC 0001695C FD 80 00 90 */ fmr f12, f0 +/* 00009BD0 00016960 3D 20 00 00 */ lis r9, .rodata+0x88C@ha +/* 00009BD4 00016964 D1 9F 00 54 */ stfs f12, 0x54(r31) +/* 00009BD8 00016968 C0 09 08 8C */ lfs f0, .rodata+0x88C@l(r9) +/* 00009BDC 0001696C FC 0C 00 00 */ fcmpu cr0, f12, f0 +/* 00009BE0 00016970 4C 62 03 82 */ cror un, eq, lt +/* 00009BE4 00016974 41 83 9B F4 */ bso .L_000037D8 +/* 00009BE8 00016978 3D 20 00 00 */ lis r9, gGameBreakerCamera@ha +/* 00009BEC 0001697C 38 00 00 01 */ li r0, 0x1 +/* 00009BF0 00016980 90 09 00 00 */ stw r0, gGameBreakerCamera@l(r9) +/* 00009BF4 00016984 80 7F 00 48 */ lwz r3, 0x48(r31) +/* 00009BF8 00016988 81 23 00 04 */ lwz r9, 0x4(r3) +/* 00009BFC 0001698C A8 09 00 30 */ lha r0, 0x30(r9) +/* 00009C00 00016990 81 29 00 34 */ lwz r9, 0x34(r9) +/* 00009C04 00016994 7C 63 02 14 */ add r3, r3, r0 +/* 00009C08 00016998 7D 28 03 A6 */ mtlr r9 +/* 00009C0C 0001699C 4E 80 00 21 */ blrl +/* 00009C10 000169A0 7C 63 1B 79 */ mr. r3, r3 +/* 00009C14 000169A4 41 82 9D 48 */ beq .L_0000395C +/* 00009C18 000169A8 80 63 00 24 */ lwz r3, 0x24(r3) +/* 00009C1C 000169AC 48 00 00 01 */ bl GetPOVTypeFromPlayerCamera__F22ePlayerSettingsCameras +/* 00009C20 000169B0 7C 7D 1B 78 */ mr r29, r3 +/* 00009C24 000169B4 80 7F 00 50 */ lwz r3, 0x50(r31) +/* 00009C28 000169B8 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00009C2C 000169BC 41 82 9D 28 */ beq .L_00003954 +/* 00009C30 000169C0 80 63 00 00 */ lwz r3, 0x0(r3) +/* 00009C34 000169C4 3C 80 00 00 */ lis r4, _IHandle__6IInput@ha +/* 00009C38 000169C8 38 84 00 00 */ addi r4, r4, _IHandle__6IInput@l +/* 00009C3C 000169CC 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 00009C40 000169D0 7C 7E 1B 79 */ mr. r30, r3 +/* 00009C44 000169D4 38 00 00 01 */ li r0, 0x1 +/* 00009C48 000169D8 40 82 9C 50 */ bne .L_00003898 +/* 00009C4C 000169DC 38 00 00 00 */ li r0, 0x0 +/* 00009C50 000169E0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00009C54 000169E4 41 82 9D 28 */ beq .L_0000397C +/* 00009C58 000169E8 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 00009C5C 000169EC A8 69 00 80 */ lha r3, 0x80(r9) +/* 00009C60 000169F0 80 09 00 84 */ lwz r0, 0x84(r9) +/* 00009C64 000169F4 7C 7E 1A 14 */ add r3, r30, r3 +/* 00009C68 000169F8 7C 08 03 A6 */ mtlr r0 +/* 00009C6C 000169FC 4E 80 00 21 */ blrl +/* 00009C70 00016A00 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00009C74 00016A04 40 82 9C A0 */ bne .L_00003914 +/* 00009C78 00016A08 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 00009C7C 00016A0C A8 69 00 78 */ lha r3, 0x78(r9) +/* 00009C80 00016A10 80 09 00 7C */ lwz r0, 0x7c(r9) +/* 00009C84 00016A14 7C 7E 1A 14 */ add r3, r30, r3 +/* 00009C88 00016A18 7C 08 03 A6 */ mtlr r0 +/* 00009C8C 00016A1C 4E 80 00 21 */ blrl +/* 00009C90 00016A20 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00009C94 00016A24 41 82 9C CC */ beq .L_00003960 +/* 00009C98 00016A28 2C 15 00 00 */ cmpwi r21, 0x0 +/* 00009C9C 00016A2C 41 82 9C CC */ beq .L_00003968 +/* 00009CA0 00016A30 81 5F 00 2C */ lwz r10, 0x2c(r31) +/* 00009CA4 00016A34 38 80 00 06 */ li r4, 0x6 +/* 00009CA8 00016A38 3D 20 00 00 */ lis r9, old_pov.10900@ha +/* 00009CAC 00016A3C 81 6A 00 08 */ lwz r11, 0x8(r10) +/* 00009CB0 00016A40 93 A9 00 00 */ stw r29, old_pov.10900@l(r9) +/* 00009CB4 00016A44 A8 6B 00 48 */ lha r3, 0x48(r11) +/* 00009CB8 00016A48 80 0B 00 4C */ lwz r0, 0x4c(r11) +/* 00009CBC 00016A4C 7C 6A 1A 14 */ add r3, r10, r3 +/* 00009CC0 00016A50 7C 08 03 A6 */ mtlr r0 +.L_00009CC4: +/* 00009CC4 00016A54 4E 80 00 21 */ blrl +/* 00009CC8 00016A58 48 00 9D 48 */ b .L_00013A10 +/* 00009CCC 00016A5C 3F C0 00 00 */ lis r30, old_pov.10900@ha +/* 00009CD0 00016A60 80 9E 00 00 */ lwz r4, old_pov.10900@l(r30) +/* 00009CD4 00016A64 2C 04 FF FF */ cmpwi r4, -0x1 +/* 00009CD8 00016A68 40 81 9D 04 */ ble .L_000039DC +/* 00009CDC 00016A6C 81 7F 00 2C */ lwz r11, 0x2c(r31) +/* 00009CE0 00016A70 81 2B 00 08 */ lwz r9, 0x8(r11) +/* 00009CE4 00016A74 80 09 00 4C */ lwz r0, 0x4c(r9) +/* 00009CE8 00016A78 A8 69 00 48 */ lha r3, 0x48(r9) +/* 00009CEC 00016A7C 7C 08 03 A6 */ mtlr r0 +/* 00009CF0 00016A80 7C 6B 1A 14 */ add r3, r11, r3 +/* 00009CF4 00016A84 4E 80 00 21 */ blrl +/* 00009CF8 00016A88 38 00 FF FF */ li r0, -0x1 +/* 00009CFC 00016A8C 90 1E 00 00 */ stw r0, old_pov.10900@l(r30) +/* 00009D00 00016A90 48 00 9D 48 */ b .L_00013A48 +/* 00009D04 00016A94 80 7F 00 2C */ lwz r3, 0x2c(r31) +/* 00009D08 00016A98 7F A4 EB 78 */ mr r4, r29 +/* 00009D0C 00016A9C 81 23 00 08 */ lwz r9, 0x8(r3) +/* 00009D10 00016AA0 A8 09 00 48 */ lha r0, 0x48(r9) +/* 00009D14 00016AA4 81 29 00 4C */ lwz r9, 0x4c(r9) +/* 00009D18 00016AA8 7C 63 02 14 */ add r3, r3, r0 +/* 00009D1C 00016AAC 7D 28 03 A6 */ mtlr r9 +/* 00009D20 00016AB0 4E 80 00 21 */ blrl +/* 00009D24 00016AB4 48 00 9D 48 */ b .L_00013A6C +/* 00009D28 00016AB8 80 7F 00 2C */ lwz r3, 0x2c(r31) +/* 00009D2C 00016ABC 7F A4 EB 78 */ mr r4, r29 +/* 00009D30 00016AC0 81 23 00 08 */ lwz r9, 0x8(r3) +/* 00009D34 00016AC4 A8 09 00 48 */ lha r0, 0x48(r9) +/* 00009D38 00016AC8 81 29 00 4C */ lwz r9, 0x4c(r9) +/* 00009D3C 00016ACC 7C 63 02 14 */ add r3, r3, r0 +/* 00009D40 00016AD0 7D 28 03 A6 */ mtlr r9 +/* 00009D44 00016AD4 4E 80 00 21 */ blrl +/* 00009D48 00016AD8 80 1F 00 3C */ lwz r0, 0x3c(r31) +/* 00009D4C 00016ADC 39 20 00 01 */ li r9, 0x1 +/* 00009D50 00016AE0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00009D54 00016AE4 40 82 9D 5C */ bne .L_00003AB0 +/* 00009D58 00016AE8 39 20 00 00 */ li r9, 0x0 +/* 00009D5C 00016AEC 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00009D60 00016AF0 41 82 A4 90 */ beq .L_000041F0 +/* 00009D64 00016AF4 81 7F 00 50 */ lwz r11, 0x50(r31) +/* 00009D68 00016AF8 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00009D6C 00016AFC 41 82 9D 9C */ beq .L_00003B08 +/* 00009D70 00016B00 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 00009D74 00016B04 80 09 00 6C */ lwz r0, 0x6c(r9) +/* 00009D78 00016B08 A8 69 00 68 */ lha r3, 0x68(r9) +/* 00009D7C 00016B0C 7C 08 03 A6 */ mtlr r0 +/* 00009D80 00016B10 7C 6B 1A 14 */ add r3, r11, r3 +/* 00009D84 00016B14 4E 80 00 21 */ blrl +/* 00009D88 00016B18 81 3F 00 34 */ lwz r9, 0x34(r31) +/* 00009D8C 00016B1C 68 63 00 01 */ xori r3, r3, 0x1 +/* 00009D90 00016B20 20 03 00 00 */ subfic r0, r3, 0x0 +/* 00009D94 00016B24 7C 60 19 14 */ adde r3, r0, r3 +/* 00009D98 00016B28 90 69 00 BC */ stw r3, 0xbc(r9) +/* 00009D9C 00016B2C 80 7F 00 3C */ lwz r3, 0x3c(r31) +/* 00009DA0 00016B30 38 81 00 08 */ addi r4, r1, 0x8 +/* 00009DA4 00016B34 3B C0 00 00 */ li r30, 0x0 +/* 00009DA8 00016B38 48 00 00 01 */ bl PSMTX44Copy +/* 00009DAC 00016B3C 3D 20 00 00 */ lis r9, _10SimSurface.kNull+0x4@ha +/* 00009DB0 00016B40 80 7F 00 34 */ lwz r3, 0x34(r31) +/* 00009DB4 00016B44 80 89 00 04 */ lwz r4, _10SimSurface.kNull+0x4@l(r9) +/* 00009DB8 00016B48 38 63 00 90 */ addi r3, r3, 0x90 +/* 00009DBC 00016B4C 48 00 00 01 */ bl Change__Q26Attrib8InstancePCQ26Attrib10Collection +/* 00009DC0 00016B50 81 3F 00 34 */ lwz r9, 0x34(r31) +/* 00009DC4 00016B54 93 C9 00 C4 */ stw r30, 0xc4(r9) +/* 00009DC8 00016B58 80 7F 00 50 */ lwz r3, 0x50(r31) +/* 00009DCC 00016B5C 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00009DD0 00016B60 41 82 9F C0 */ beq .L_00003D90 +/* 00009DD4 00016B64 80 63 00 00 */ lwz r3, 0x0(r3) +/* 00009DD8 00016B68 3C 80 00 00 */ lis r4, _IHandle__14ICollisionBody@ha +/* 00009DDC 00016B6C 38 84 00 00 */ addi r4, r4, _IHandle__14ICollisionBody@l +/* 00009DE0 00016B70 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 00009DE4 00016B74 7C 7C 1B 79 */ mr. r28, r3 +/* 00009DE8 00016B78 38 00 00 01 */ li r0, 0x1 +/* 00009DEC 00016B7C 40 82 9D F4 */ bne .L_00003BE0 +.L_00009DF0: +/* 00009DF0 00016B80 38 00 00 00 */ li r0, 0x0 +/* 00009DF4 00016B84 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00009DF8 00016B88 41 82 9F C0 */ beq .L_00003DB8 +/* 00009DFC 00016B8C 81 7F 00 50 */ lwz r11, 0x50(r31) +/* 00009E00 00016B90 3B A1 00 50 */ addi r29, r1, 0x50 +/* 00009E04 00016B94 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 00009E08 00016B98 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 00009E0C 00016B9C A8 69 00 18 */ lha r3, 0x18(r9) +/* 00009E10 00016BA0 7C 08 03 A6 */ mtlr r0 +/* 00009E14 00016BA4 7C 6B 1A 14 */ add r3, r11, r3 +/* 00009E18 00016BA8 4E 80 00 21 */ blrl +.L_00009E1C: +/* 00009E1C 00016BAC 81 23 00 04 */ lwz r9, 0x4(r3) +/* 00009E20 00016BB0 A8 09 00 A8 */ lha r0, 0xa8(r9) +/* 00009E24 00016BB4 81 29 00 AC */ lwz r9, 0xac(r9) +/* 00009E28 00016BB8 7C 63 02 14 */ add r3, r3, r0 +/* 00009E2C 00016BBC 7D 28 03 A6 */ mtlr r9 +/* 00009E30 00016BC0 4E 80 00 21 */ blrl +/* 00009E34 00016BC4 81 3C 00 04 */ lwz r9, 0x4(r28) +/* 00009E38 00016BC8 7C 7E 1B 78 */ mr r30, r3 +/* 00009E3C 00016BCC 80 09 00 84 */ lwz r0, 0x84(r9) +/* 00009E40 00016BD0 A8 69 00 80 */ lha r3, 0x80(r9) +/* 00009E44 00016BD4 7C 08 03 A6 */ mtlr r0 +/* 00009E48 00016BD8 7C 7C 1A 14 */ add r3, r28, r3 +/* 00009E4C 00016BDC 4E 80 00 21 */ blrl +/* 00009E50 00016BE0 C1 A3 00 00 */ lfs f13, 0x0(r3) +/* 00009E54 00016BE4 7F A4 EB 78 */ mr r4, r29 +/* 00009E58 00016BE8 38 A0 00 00 */ li r5, 0x0 +/* 00009E5C 00016BEC D1 A1 00 50 */ stfs f13, 0x50(r1) +/* 00009E60 00016BF0 C0 03 00 04 */ lfs f0, 0x4(r3) +/* 00009E64 00016BF4 D0 01 00 54 */ stfs f0, 0x54(r1) +.L_00009E68: +/* 00009E68 00016BF8 C1 A3 00 08 */ lfs f13, 0x8(r3) +/* 00009E6C 00016BFC D1 A1 00 58 */ stfs f13, 0x58(r1) +.L_00009E70: +/* 00009E70 00016C00 81 3E 00 04 */ lwz r9, 0x4(r30) +.L_00009E74: +/* 00009E74 00016C04 80 09 01 4C */ lwz r0, 0x14c(r9) +.L_00009E78: +/* 00009E78 00016C08 A8 69 01 48 */ lha r3, 0x148(r9) +/* 00009E7C 00016C0C 7C 08 03 A6 */ mtlr r0 +.L_00009E80: +/* 00009E80 00016C10 7C 7E 1A 14 */ add r3, r30, r3 +/* 00009E84 00016C14 4E 80 00 21 */ blrl +/* 00009E88 00016C18 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 00009E8C 00016C1C 80 09 00 4C */ lwz r0, 0x4c(r9) +/* 00009E90 00016C20 A8 69 00 48 */ lha r3, 0x48(r9) +/* 00009E94 00016C24 7C 08 03 A6 */ mtlr r0 +/* 00009E98 00016C28 7C 7E 1A 14 */ add r3, r30, r3 +/* 00009E9C 00016C2C 4E 80 00 21 */ blrl +/* 00009EA0 00016C30 7C 64 1B 78 */ mr r4, r3 +/* 00009EA4 00016C34 7F A3 EB 78 */ mr r3, r29 +/* 00009EA8 00016C38 7C 65 1B 78 */ mr r5, r3 +.L_00009EAC: +/* 00009EAC 00016C3C 48 00 00 01 */ bl VU0_v3add__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 +/* 00009EB0 00016C40 C0 01 00 50 */ lfs f0, 0x50(r1) +/* 00009EB4 00016C44 3C 80 00 00 */ lis r4, _IHandle__11ISuspension@ha +/* 00009EB8 00016C48 C1 A1 00 58 */ lfs f13, 0x58(r1) +/* 00009EBC 00016C4C 38 84 00 00 */ addi r4, r4, _IHandle__11ISuspension@l +/* 00009EC0 00016C50 C1 81 00 54 */ lfs f12, 0x54(r1) +/* 00009EC4 00016C54 FC 00 00 50 */ fneg f0, f0 +/* 00009EC8 00016C58 D1 A1 00 38 */ stfs f13, 0x38(r1) +/* 00009ECC 00016C5C D0 01 00 3C */ stfs f0, 0x3c(r1) +/* 00009ED0 00016C60 D1 81 00 40 */ stfs f12, 0x40(r1) +/* 00009ED4 00016C64 81 3F 00 50 */ lwz r9, 0x50(r31) +/* 00009ED8 00016C68 80 69 00 00 */ lwz r3, 0x0(r9) +/* 00009EDC 00016C6C 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 00009EE0 00016C70 7C 7D 1B 79 */ mr. r29, r3 +/* 00009EE4 00016C74 38 00 00 01 */ li r0, 0x1 +/* 00009EE8 00016C78 40 82 9E F0 */ bne .L_00003DD8 +/* 00009EEC 00016C7C 38 00 00 00 */ li r0, 0x0 +/* 00009EF0 00016C80 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00009EF4 00016C84 41 82 9F C0 */ beq .L_00003EB4 +/* 00009EF8 00016C88 81 3D 00 04 */ lwz r9, 0x4(r29) +/* 00009EFC 00016C8C 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 00009F00 00016C90 A8 69 00 18 */ lha r3, 0x18(r9) +.L_00009F04: +/* 00009F04 00016C94 7C 08 03 A6 */ mtlr r0 +/* 00009F08 00016C98 7C 7D 1A 14 */ add r3, r29, r3 +/* 00009F0C 00016C9C 4E 80 00 21 */ blrl +/* 00009F10 00016CA0 81 3D 00 04 */ lwz r9, 0x4(r29) +/* 00009F14 00016CA4 7C 7E 1B 78 */ mr r30, r3 +/* 00009F18 00016CA8 A8 69 00 A0 */ lha r3, 0xa0(r9) +/* 00009F1C 00016CAC 80 09 00 A4 */ lwz r0, 0xa4(r9) +/* 00009F20 00016CB0 7C 7D 1A 14 */ add r3, r29, r3 +/* 00009F24 00016CB4 7C 08 03 A6 */ mtlr r0 +/* 00009F28 00016CB8 4E 80 00 21 */ blrl +/* 00009F2C 00016CBC 7C 1E 18 00 */ cmpw r30, r3 +.L_00009F30: +/* 00009F30 00016CC0 40 82 9F 94 */ bne .L_00003EC4 +/* 00009F34 00016CC4 81 7F 00 50 */ lwz r11, 0x50(r31) +/* 00009F38 00016CC8 3B C1 00 60 */ addi r30, r1, 0x60 +/* 00009F3C 00016CCC 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 00009F40 00016CD0 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 00009F44 00016CD4 A8 69 00 18 */ lha r3, 0x18(r9) +/* 00009F48 00016CD8 7C 08 03 A6 */ mtlr r0 +/* 00009F4C 00016CDC 7C 6B 1A 14 */ add r3, r11, r3 +/* 00009F50 00016CE0 4E 80 00 21 */ blrl +/* 00009F54 00016CE4 81 23 00 04 */ lwz r9, 0x4(r3) +/* 00009F58 00016CE8 A8 09 00 98 */ lha r0, 0x98(r9) +/* 00009F5C 00016CEC 81 29 00 9C */ lwz r9, 0x9c(r9) +/* 00009F60 00016CF0 7C 63 02 14 */ add r3, r3, r0 +/* 00009F64 00016CF4 7D 28 03 A6 */ mtlr r9 +/* 00009F68 00016CF8 4E 80 00 21 */ blrl +/* 00009F6C 00016CFC 80 83 00 38 */ lwz r4, 0x38(r3) +/* 00009F70 00016D00 7F C3 F3 78 */ mr r3, r30 +/* 00009F74 00016D04 48 00 00 01 */ bl __10SimSurfacePCQ26Attrib10Collection +/* 00009F78 00016D08 80 7F 00 34 */ lwz r3, 0x34(r31) +/* 00009F7C 00016D0C 80 81 00 64 */ lwz r4, 0x64(r1) +/* 00009F80 00016D10 38 63 00 90 */ addi r3, r3, 0x90 +/* 00009F84 00016D14 48 00 00 01 */ bl Change__Q26Attrib8InstancePCQ26Attrib10Collection +/* 00009F88 00016D18 7F C3 F3 78 */ mr r3, r30 +/* 00009F8C 00016D1C 38 80 00 00 */ li r4, 0x0 +/* 00009F90 00016D20 48 00 00 01 */ bl _._Q26Attrib8Instance +/* 00009F94 00016D24 81 3D 00 04 */ lwz r9, 0x4(r29) +/* 00009F98 00016D28 A8 69 00 A0 */ lha r3, 0xa0(r9) +/* 00009F9C 00016D2C 80 09 00 A4 */ lwz r0, 0xa4(r9) +/* 00009FA0 00016D30 7C 7D 1A 14 */ add r3, r29, r3 +/* 00009FA4 00016D34 7C 08 03 A6 */ mtlr r0 +/* 00009FA8 00016D38 4E 80 00 21 */ blrl +/* 00009FAC 00016D3C 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00009FB0 00016D40 40 81 9F C0 */ ble .L_00003F70 +/* 00009FB4 00016D44 81 3F 00 34 */ lwz r9, 0x34(r31) +/* 00009FB8 00016D48 38 00 00 01 */ li r0, 0x1 +/* 00009FBC 00016D4C 90 09 00 C4 */ stw r0, 0xc4(r9) +/* 00009FC0 00016D50 81 3F 00 34 */ lwz r9, 0x34(r31) +/* 00009FC4 00016D54 38 00 00 00 */ li r0, 0x0 +/* 00009FC8 00016D58 90 09 00 B4 */ stw r0, 0xb4(r9) +.L_00009FCC: +/* 00009FCC 00016D5C 81 7F 00 34 */ lwz r11, 0x34(r31) +/* 00009FD0 00016D60 90 0B 00 C0 */ stw r0, 0xc0(r11) +/* 00009FD4 00016D64 80 7F 00 50 */ lwz r3, 0x50(r31) +/* 00009FD8 00016D68 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00009FDC 00016D6C 41 82 A0 A4 */ beq .L_00004080 +/* 00009FE0 00016D70 80 63 00 00 */ lwz r3, 0x0(r3) +/* 00009FE4 00016D74 3C 80 00 00 */ lis r4, _IHandle__8ISimable@ha +/* 00009FE8 00016D78 38 84 00 00 */ addi r4, r4, _IHandle__8ISimable@l +/* 00009FEC 00016D7C 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 00009FF0 00016D80 7C 63 1B 79 */ mr. r3, r3 +/* 00009FF4 00016D84 38 00 00 01 */ li r0, 0x1 +/* 00009FF8 00016D88 40 82 A0 00 */ bne SetForward__16CubicCameraMoverP3POVb +/* 00009FFC 00016D8C 38 00 00 00 */ li r0, 0x0 +/* 0000A000 00016D90 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000A004 00016D94 41 82 A0 A4 */ beq .L_000040A8 +/* 0000A008 00016D98 80 63 00 00 */ lwz r3, 0x0(r3) +/* 0000A00C 00016D9C 3C 80 00 00 */ lis r4, _IHandle__7IEngine@ha +/* 0000A010 00016DA0 38 84 00 00 */ addi r4, r4, _IHandle__7IEngine@l +/* 0000A014 00016DA4 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000A018 00016DA8 7C 7E 1B 79 */ mr. r30, r3 +/* 0000A01C 00016DAC 38 00 00 01 */ li r0, 0x1 +/* 0000A020 00016DB0 40 82 A0 28 */ bne .L_00004048 +/* 0000A024 00016DB4 38 00 00 00 */ li r0, 0x0 +/* 0000A028 00016DB8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000A02C 00016DBC 41 82 A0 A4 */ beq .L_000040D0 +/* 0000A030 00016DC0 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000A034 00016DC4 80 09 00 4C */ lwz r0, 0x4c(r9) +/* 0000A038 00016DC8 A8 69 00 48 */ lha r3, 0x48(r9) +/* 0000A03C 00016DCC 7C 08 03 A6 */ mtlr r0 +/* 0000A040 00016DD0 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000A044 00016DD4 4E 80 00 21 */ blrl +/* 0000A048 00016DD8 81 3F 00 34 */ lwz r9, 0x34(r31) +/* 0000A04C 00016DDC 90 69 00 B4 */ stw r3, 0xb4(r9) +/* 0000A050 00016DE0 81 7E 00 04 */ lwz r11, 0x4(r30) +/* 0000A054 00016DE4 80 0B 00 14 */ lwz r0, 0x14(r11) +/* 0000A058 00016DE8 A8 6B 00 10 */ lha r3, 0x10(r11) +/* 0000A05C 00016DEC 7C 08 03 A6 */ mtlr r0 +/* 0000A060 00016DF0 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000A064 00016DF4 4E 80 00 21 */ blrl +/* 0000A068 00016DF8 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000A06C 00016DFC FF E0 08 90 */ fmr f31, f1 +/* 0000A070 00016E00 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0000A074 00016E04 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000A078 00016E08 7C 08 03 A6 */ mtlr r0 +/* 0000A07C 00016E0C 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000A080 00016E10 4E 80 00 21 */ blrl +/* 0000A084 00016E14 3D 20 00 00 */ lis r9, .rodata+0x890@ha +/* 0000A088 00016E18 81 7F 00 34 */ lwz r11, 0x34(r31) +/* 0000A08C 00016E1C C0 09 08 90 */ lfs f0, .rodata+0x890@l(r9) +/* 0000A090 00016E20 EC 21 00 28 */ fsubs f1, f1, f0 +/* 0000A094 00016E24 FF 9F 08 00 */ fcmpu cr7, f31, f1 +/* 0000A098 00016E28 7C 00 00 26 */ mfcr r0 +/* 0000A09C 00016E2C 54 00 F7 FE */ extrwi r0, r0, 1, 29 +/* 0000A0A0 00016E30 90 0B 00 C0 */ stw r0, 0xc0(r11) +/* 0000A0A4 00016E34 81 3F 00 34 */ lwz r9, 0x34(r31) +/* 0000A0A8 00016E38 3D 60 00 00 */ lis r11, .rodata+0x860@ha +/* 0000A0AC 00016E3C C3 EB 08 60 */ lfs f31, .rodata+0x860@l(r11) +/* 0000A0B0 00016E40 3E 80 00 00 */ lis r20, .rodata+0x870@ha +/* 0000A0B4 00016E44 80 09 00 C4 */ lwz r0, 0xc4(r9) +/* 0000A0B8 00016E48 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000A0BC 00016E4C 41 82 A1 A8 */ beq .L_00004264 +/* 0000A0C0 00016E50 81 7F 00 50 */ lwz r11, 0x50(r31) +/* 0000A0C4 00016E54 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000A0C8 00016E58 41 82 A1 A8 */ beq .L_00004270 +/* 0000A0CC 00016E5C 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000A0D0 00016E60 A8 69 01 68 */ lha r3, 0x168(r9) +/* 0000A0D4 00016E64 80 09 01 6C */ lwz r0, 0x16c(r9) +.L_0000A0D8: +/* 0000A0D8 00016E68 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000A0DC 00016E6C 7C 08 03 A6 */ mtlr r0 +/* 0000A0E0 00016E70 4E 80 00 21 */ blrl +/* 0000A0E4 00016E74 FD 60 08 90 */ fmr f11, f1 +/* 0000A0E8 00016E78 FC 01 F8 00 */ fcmpu cr0, f1, f31 +/* 0000A0EC 00016E7C 4C 62 0B 82 */ cror un, eq, gt +/* 0000A0F0 00016E80 41 83 A0 F8 */ bso .L_000041E8 +/* 0000A0F4 00016E84 FD 60 58 50 */ fneg f11, f11 +/* 0000A0F8 00016E88 3D 40 00 00 */ lis r10, .rodata+0x894@ha +/* 0000A0FC 00016E8C 3D 20 00 00 */ lis r9, .rodata+0x898@ha +/* 0000A100 00016E90 3D 60 00 00 */ lis r11, .rodata+0x89C@ha +/* 0000A104 00016E94 C1 89 08 98 */ lfs f12, .rodata+0x898@l(r9) +/* 0000A108 00016E98 C1 AA 08 94 */ lfs f13, .rodata+0x894@l(r10) +/* 0000A10C 00016E9C C0 0B 08 9C */ lfs f0, .rodata+0x89C@l(r11) +/* 0000A110 00016EA0 ED AB 63 78 */ fmsubs f13, f11, f13, f12 +/* 0000A114 00016EA4 C3 D4 08 70 */ lfs f30, .rodata+0x870@l(r20) +/* 0000A118 00016EA8 EC 00 60 28 */ fsubs f0, f0, f12 +/* 0000A11C 00016EAC EC 2D 00 24 */ fdivs f1, f13, f0 +/* 0000A120 00016EB0 FC 00 F0 90 */ fmr f0, f30 +/* 0000A124 00016EB4 FC 01 F0 00 */ fcmpu cr0, f1, f30 +/* 0000A128 00016EB8 4C 62 0B 82 */ cror un, eq, gt +/* 0000A12C 00016EBC 41 83 A1 34 */ bso .L_00004260 +/* 0000A130 00016EC0 FC 00 08 90 */ fmr f0, f1 +/* 0000A134 00016EC4 FD A0 00 90 */ fmr f13, f0 +/* 0000A138 00016EC8 FF A0 F8 90 */ fmr f29, f31 +/* 0000A13C 00016ECC FC 1F 00 00 */ fcmpu cr0, f31, f0 +/* 0000A140 00016ED0 4C 62 03 82 */ cror un, eq, lt +/* 0000A144 00016ED4 41 83 A1 4C */ bso .L_00004290 +/* 0000A148 00016ED8 FD A0 F8 90 */ fmr f13, f31 +/* 0000A14C 00016EDC 81 7F 00 50 */ lwz r11, 0x50(r31) +/* 0000A150 00016EE0 FF E0 68 90 */ fmr f31, f13 +/* 0000A154 00016EE4 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000A158 00016EE8 A8 69 01 38 */ lha r3, 0x138(r9) +/* 0000A15C 00016EEC 80 09 01 3C */ lwz r0, 0x13c(r9) +/* 0000A160 00016EF0 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000A164 00016EF4 7C 08 03 A6 */ mtlr r0 +/* 0000A168 00016EF8 4E 80 00 21 */ blrl +/* 0000A16C 00016EFC 3D 20 00 00 */ lis r9, .rodata+0x878@ha +/* 0000A170 00016F00 FD A0 F0 90 */ fmr f13, f30 +/* 0000A174 00016F04 C0 09 08 78 */ lfs f0, .rodata+0x878@l(r9) +/* 0000A178 00016F08 EC 21 00 28 */ fsubs f1, f1, f0 +/* 0000A17C 00016F0C EC 21 00 24 */ fdivs f1, f1, f0 +/* 0000A180 00016F10 FC 01 F0 00 */ fcmpu cr0, f1, f30 +/* 0000A184 00016F14 4C 62 0B 82 */ cror un, eq, gt +/* 0000A188 00016F18 41 83 A1 90 */ bso .L_00004318 +/* 0000A18C 00016F1C FD A0 08 90 */ fmr f13, f1 +/* 0000A190 00016F20 FC 00 68 90 */ fmr f0, f13 +/* 0000A194 00016F24 FC 1D 68 00 */ fcmpu cr0, f29, f13 +/* 0000A198 00016F28 4C 62 03 82 */ cror un, eq, lt +/* 0000A19C 00016F2C 41 83 A1 A4 */ bso .L_00004340 +/* 0000A1A0 00016F30 FC 00 E8 90 */ fmr f0, f29 +/* 0000A1A4 00016F34 EF FF 00 32 */ fmuls f31, f31, f0 +/* 0000A1A8 00016F38 81 3F 00 34 */ lwz r9, 0x34(r31) +/* 0000A1AC 00016F3C 38 00 00 00 */ li r0, 0x0 +.L_0000A1B0: +/* 0000A1B0 00016F40 3C 80 00 00 */ lis r4, _IHandle__13ITransmission@ha +/* 0000A1B4 00016F44 D3 E9 00 A8 */ stfs f31, 0xa8(r9) +/* 0000A1B8 00016F48 38 84 00 00 */ addi r4, r4, _IHandle__13ITransmission@l +/* 0000A1BC 00016F4C 81 3F 00 34 */ lwz r9, 0x34(r31) +/* 0000A1C0 00016F50 90 09 00 CC */ stw r0, 0xcc(r9) +/* 0000A1C4 00016F54 81 7F 00 50 */ lwz r11, 0x50(r31) +/* 0000A1C8 00016F58 80 6B 00 00 */ lwz r3, 0x0(r11) +/* 0000A1CC 00016F5C 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000A1D0 00016F60 7C 6B 1B 79 */ mr. r11, r3 +/* 0000A1D4 00016F64 38 00 00 01 */ li r0, 0x1 +/* 0000A1D8 00016F68 40 82 A1 E0 */ bne .L_000043B8 +/* 0000A1DC 00016F6C 38 00 00 00 */ li r0, 0x0 +/* 0000A1E0 00016F70 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000A1E4 00016F74 41 82 A2 20 */ beq .L_00004404 +.L_0000A1E8: +/* 0000A1E8 00016F78 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000A1EC 00016F7C 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000A1F0 00016F80 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000A1F4 00016F84 7C 08 03 A6 */ mtlr r0 +/* 0000A1F8 00016F88 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000A1FC 00016F8C 4E 80 00 21 */ blrl +/* 0000A200 00016F90 80 1F 00 78 */ lwz r0, 0x78(r31) +/* 0000A204 00016F94 39 60 00 01 */ li r11, 0x1 +/* 0000A208 00016F98 7C 03 00 00 */ cmpw r3, r0 +/* 0000A20C 00016F9C 40 82 A2 14 */ bne .L_00004420 +/* 0000A210 00016FA0 39 60 00 00 */ li r11, 0x0 +/* 0000A214 00016FA4 81 3F 00 34 */ lwz r9, 0x34(r31) +.L_0000A218: +/* 0000A218 00016FA8 91 69 00 CC */ stw r11, 0xcc(r9) +/* 0000A21C 00016FAC 90 7F 00 78 */ stw r3, 0x78(r31) +/* 0000A220 00016FB0 C0 1F 00 68 */ lfs f0, 0x68(r31) +/* 0000A224 00016FB4 3D 20 00 00 */ lis r9, .rodata+0x870@ha +/* 0000A228 00016FB8 C1 BF 00 5C */ lfs f13, 0x5c(r31) +/* 0000A22C 00016FBC 3D 60 00 00 */ lis r11, .rodata+0x8A0@ha +/* 0000A230 00016FC0 81 5F 00 34 */ lwz r10, 0x34(r31) +/* 0000A234 00016FC4 FC 20 E0 90 */ fmr f1, f28 +/* 0000A238 00016FC8 ED AD 00 24 */ fdivs f13, f13, f0 +/* 0000A23C 00016FCC C1 69 08 70 */ lfs f11, .rodata+0x870@l(r9) +/* 0000A240 00016FD0 C1 4B 08 A0 */ lfs f10, .rodata+0x8A0@l(r11) +/* 0000A244 00016FD4 38 81 00 08 */ addi r4, r1, 0x8 +/* 0000A248 00016FD8 D1 AA 00 A4 */ stfs f13, 0xa4(r10) +/* 0000A24C 00016FDC C1 BF 00 68 */ lfs f13, 0x68(r31) +/* 0000A250 00016FE0 C0 1F 00 60 */ lfs f0, 0x60(r31) +/* 0000A254 00016FE4 81 3F 00 34 */ lwz r9, 0x34(r31) +/* 0000A258 00016FE8 EC 00 68 24 */ fdivs f0, f0, f13 +/* 0000A25C 00016FEC D0 09 00 AC */ stfs f0, 0xac(r9) +/* 0000A260 00016FF0 C0 1F 00 68 */ lfs f0, 0x68(r31) +/* 0000A264 00016FF4 C1 BF 00 64 */ lfs f13, 0x64(r31) +/* 0000A268 00016FF8 81 3F 00 34 */ lwz r9, 0x34(r31) +/* 0000A26C 00016FFC ED AD 00 24 */ fdivs f13, f13, f0 +/* 0000A270 00017000 D1 A9 00 B0 */ stfs f13, 0xb0(r9) +/* 0000A274 00017004 C1 9F 00 54 */ lfs f12, 0x54(r31) +/* 0000A278 00017008 C1 BF 00 70 */ lfs f13, 0x70(r31) +/* 0000A27C 0001700C 81 3F 00 34 */ lwz r9, 0x34(r31) +/* 0000A280 00017010 EC 0C 68 28 */ fsubs f0, f12, f13 +/* 0000A284 00017014 FC 00 6B 2E */ fsel f0, f0, f12, f13 +.L_0000A288: +/* 0000A288 00017018 EC 00 02 B2 */ fmuls f0, f0, f10 +/* 0000A28C 0001701C ED 6B 00 28 */ fsubs f11, f11, f0 +/* 0000A290 00017020 D1 69 00 D4 */ stfs f11, 0xd4(r9) +/* 0000A294 00017024 80 7F 00 34 */ lwz r3, 0x34(r31) +/* 0000A298 00017028 80 BF 00 40 */ lwz r5, 0x40(r31) +/* 0000A29C 0001702C 80 DF 00 44 */ lwz r6, 0x44(r31) +/* 0000A2A0 00017030 48 00 17 65 */ bl .L_0000BA04 +/* 0000A2A4 00017034 81 3F 00 58 */ lwz r9, 0x58(r31) +.L_0000A2A8: +/* 0000A2A8 00017038 38 69 FF FF */ subi r3, r9, 0x1 +/* 0000A2AC 0001703C 28 03 00 01 */ cmplwi r3, 0x1 +/* 0000A2B0 00017040 41 81 A4 90 */ bgt .L_00004740 +/* 0000A2B4 00017044 80 9F 00 34 */ lwz r4, 0x34(r31) +/* 0000A2B8 00017048 3F 80 00 00 */ lis r28, _Q33UTL11Collectionst8Listable2Z10IExplosioni96._mTable@ha +/* 0000A2BC 0001704C 3F 40 00 00 */ lis r26, .rodata+0x86C@ha +/* 0000A2C0 00017050 3B 7C 00 00 */ addi r27, r28, _Q33UTL11Collectionst8Listable2Z10IExplosioni96._mTable@l +/* 0000A2C4 00017054 38 84 00 38 */ addi r4, r4, 0x38 +.L_0000A2C8: +/* 0000A2C8 00017058 48 00 00 01 */ bl MaybeCameraShake__FiP8bVector3 +/* 0000A2CC 0001705C 3D 20 00 00 */ lis r9, .rodata+0x868@ha +/* 0000A2D0 00017060 3D 40 00 00 */ lis r10, _Q33UTL11Collectionst8Listable2Z10IExplosioni96._mTable@ha +/* 0000A2D4 00017064 C3 69 08 68 */ lfs f27, .rodata+0x868@l(r9) +/* 0000A2D8 00017068 3D 60 00 00 */ lis r11, .rodata+0x8A4@ha +/* 0000A2DC 0001706C 3D 20 00 00 */ lis r9, .rodata+0x860@ha +/* 0000A2E0 00017070 C3 AB 08 A4 */ lfs f29, .rodata+0x8A4@l(r11) +/* 0000A2E4 00017074 C3 C9 08 60 */ lfs f30, .rodata+0x860@l(r9) +/* 0000A2E8 00017078 83 AA 00 00 */ lwz r29, _Q33UTL11Collectionst8Listable2Z10IExplosioni96._mTable@l(r10) +/* 0000A2EC 0001707C 80 1B 00 08 */ lwz r0, 0x8(r27) +/* 0000A2F0 00017080 81 3C 00 00 */ lwz r9, _Q33UTL11Collectionst8Listable2Z10IExplosioni96._mTable@l(r28) +.L_0000A2F4: +/* 0000A2F4 00017084 54 00 10 3A */ slwi r0, r0, 2 +/* 0000A2F8 00017088 7D 29 02 14 */ add r9, r9, r0 +.L_0000A2FC: +/* 0000A2FC 0001708C 7C 1D 48 00 */ cmpw r29, r9 +/* 0000A300 00017090 41 82 A4 90 */ beq .L_00004790 +/* 0000A304 00017094 83 DD 00 00 */ lwz r30, 0x0(r29) +/* 0000A308 00017098 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000A30C 0001709C A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000A310 000170A0 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000A314 000170A4 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000A318 000170A8 7C 08 03 A6 */ mtlr r0 +/* 0000A31C 000170AC 4E 80 00 21 */ blrl +/* 0000A320 000170B0 C0 03 00 00 */ lfs f0, 0x0(r3) +/* 0000A324 000170B4 C1 43 00 04 */ lfs f10, 0x4(r3) +/* 0000A328 000170B8 C1 A3 00 08 */ lfs f13, 0x8(r3) +/* 0000A32C 000170BC FC 00 00 50 */ fneg f0, f0 +/* 0000A330 000170C0 D0 01 00 54 */ stfs f0, 0x54(r1) +/* 0000A334 000170C4 D1 A1 00 50 */ stfs f13, 0x50(r1) +/* 0000A338 000170C8 D1 41 00 58 */ stfs f10, 0x58(r1) +/* 0000A33C 000170CC C1 1A 08 6C */ lfs f8, .rodata+0x86C@l(r26) +/* 0000A340 000170D0 81 3F 00 2C */ lwz r9, 0x2c(r31) +.L_0000A344: +/* 0000A344 000170D4 81 69 00 1C */ lwz r11, 0x1c(r9) +/* 0000A348 000170D8 C1 8B 00 44 */ lfs f12, 0x44(r11) +/* 0000A34C 000170DC C1 2B 00 40 */ lfs f9, 0x40(r11) +/* 0000A350 000170E0 C1 6B 00 48 */ lfs f11, 0x48(r11) +/* 0000A354 000170E4 EC 00 60 28 */ fsubs f0, f0, f12 +/* 0000A358 000170E8 D0 01 00 64 */ stfs f0, 0x64(r1) +/* 0000A35C 000170EC ED AD 48 28 */ fsubs f13, f13, f9 +/* 0000A360 000170F0 ED 4A 58 28 */ fsubs f10, f10, f11 +/* 0000A364 000170F4 D1 A1 00 60 */ stfs f13, 0x60(r1) +/* 0000A368 000170F8 EC 00 00 32 */ fmuls f0, f0, f0 +/* 0000A36C 000170FC D1 41 00 68 */ stfs f10, 0x68(r1) +/* 0000A370 00017100 ED AD 03 7A */ fmadds f13, f13, f13, f0 +/* 0000A374 00017104 ED 8A 6A BA */ fmadds f12, f10, f10, f13 +.L_0000A378: +/* 0000A378 00017108 C1 74 08 70 */ lfs f11, .rodata+0x870@l(r20) +/* 0000A37C 0001710C FC 0C D8 00 */ fcmpu cr0, f12, f27 +/* 0000A380 00017110 4C 62 03 82 */ cror un, eq, lt +/* 0000A384 00017114 41 83 A3 B4 */ bso .L_00004738 +.L_0000A388: +/* 0000A388 00017118 FF E0 60 34 */ frsqrte f31, f12 +.L_0000A38C: +/* 0000A38C 0001711C EC 1F 07 F2 */ fmuls f0, f31, f31 +/* 0000A390 00017120 ED BF 02 32 */ fmuls f13, f31, f8 +/* 0000A394 00017124 EC 0C 58 3C */ fnmsubs f0, f12, f0, f11 +/* 0000A398 00017128 EF E0 FB 7A */ fmadds f31, f0, f13, f31 +/* 0000A39C 0001712C EC 1F 07 F2 */ fmuls f0, f31, f31 +/* 0000A3A0 00017130 ED BF 02 32 */ fmuls f13, f31, f8 +/* 0000A3A4 00017134 EC 0C 58 3C */ fnmsubs f0, f12, f0, f11 +/* 0000A3A8 00017138 EF E0 FB 7A */ fmadds f31, f0, f13, f31 +/* 0000A3AC 0001713C EF FF 03 32 */ fmuls f31, f31, f12 +/* 0000A3B0 00017140 48 00 A3 B8 */ b .L_00014768 +/* 0000A3B4 00017144 C3 F9 08 60 */ lfs f31, .rodata+0x860@l(r25) +/* 0000A3B8 00017148 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000A3BC 0001714C A8 69 00 20 */ lha r3, 0x20(r9) +.L_0000A3C0: +/* 0000A3C0 00017150 80 09 00 24 */ lwz r0, 0x24(r9) +/* 0000A3C4 00017154 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000A3C8 00017158 7C 08 03 A6 */ mtlr r0 +/* 0000A3CC 0001715C 4E 80 00 21 */ blrl +/* 0000A3D0 00017160 EC 21 E8 2A */ fadds f1, f1, f29 +/* 0000A3D4 00017164 FC 1F 08 00 */ fcmpu cr0, f31, f1 +/* 0000A3D8 00017168 4C 62 0B 82 */ cror un, eq, gt +/* 0000A3DC 0001716C 41 83 A4 88 */ bso .L_00004864 +/* 0000A3E0 00017170 FC 1F F0 00 */ fcmpu cr0, f31, f30 +/* 0000A3E4 00017174 4C 62 03 82 */ cror un, eq, lt +/* 0000A3E8 00017178 41 83 A4 88 */ bso .L_00004870 +/* 0000A3EC 0001717C 38 81 00 60 */ addi r4, r1, 0x60 +/* 0000A3F0 00017180 38 61 00 98 */ addi r3, r1, 0x98 +/* 0000A3F4 00017184 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +/* 0000A3F8 00017188 C0 01 00 98 */ lfs f0, 0x98(r1) +/* 0000A3FC 0001718C C1 A1 00 9C */ lfs f13, 0x9c(r1) +/* 0000A400 00017190 C1 81 00 A0 */ lfs f12, 0xa0(r1) +/* 0000A404 00017194 D0 01 00 78 */ stfs f0, 0x78(r1) +/* 0000A408 00017198 D1 A1 00 7C */ stfs f13, 0x7c(r1) +/* 0000A40C 0001719C D1 81 00 80 */ stfs f12, 0x80(r1) +/* 0000A410 000171A0 D0 01 00 88 */ stfs f0, 0x88(r1) +/* 0000A414 000171A4 D1 A1 00 8C */ stfs f13, 0x8c(r1) +/* 0000A418 000171A8 D1 81 00 90 */ stfs f12, 0x90(r1) +/* 0000A41C 000171AC 81 3E 00 04 */ lwz r9, 0x4(r30) +.L_0000A420: +/* 0000A420 000171B0 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000A424 000171B4 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0000A428 000171B8 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000A42C 000171BC 7C 08 03 A6 */ mtlr r0 +/* 0000A430 000171C0 4E 80 00 21 */ blrl +/* 0000A434 000171C4 FC 20 08 50 */ fneg f1, f1 +/* 0000A438 000171C8 C1 81 00 78 */ lfs f12, 0x78(r1) +/* 0000A43C 000171CC EC 21 E0 24 */ fdivs f1, f1, f28 +/* 0000A440 000171D0 C0 01 00 7C */ lfs f0, 0x7c(r1) +/* 0000A444 000171D4 C1 A1 00 80 */ lfs f13, 0x80(r1) +/* 0000A448 000171D8 38 81 00 88 */ addi r4, r1, 0x88 +/* 0000A44C 000171DC 80 7F 00 58 */ lwz r3, 0x58(r31) +/* 0000A450 000171E0 38 63 FF FF */ subi r3, r3, 0x1 +/* 0000A454 000171E4 ED AD 00 72 */ fmuls f13, f13, f1 +/* 0000A458 000171E8 ED 8C 00 72 */ fmuls f12, f12, f1 +/* 0000A45C 000171EC D1 A1 00 90 */ stfs f13, 0x90(r1) +.L_0000A460: +/* 0000A460 000171F0 EC 00 00 72 */ fmuls f0, f0, f1 +/* 0000A464 000171F4 D1 81 00 88 */ stfs f12, 0x88(r1) +/* 0000A468 000171F8 D0 01 00 8C */ stfs f0, 0x8c(r1) +/* 0000A46C 000171FC D1 81 00 A8 */ stfs f12, 0xa8(r1) +/* 0000A470 00017200 D0 01 00 AC */ stfs f0, 0xac(r1) +/* 0000A474 00017204 D1 A1 00 B0 */ stfs f13, 0xb0(r1) +/* 0000A478 00017208 D1 81 00 98 */ stfs f12, 0x98(r1) +/* 0000A47C 0001720C D0 01 00 9C */ stfs f0, 0x9c(r1) +/* 0000A480 00017210 D1 A1 00 A0 */ stfs f13, 0xa0(r1) +/* 0000A484 00017214 48 00 00 01 */ bl MaybeCameraShake__FiP8bVector3 +/* 0000A488 00017218 3B BD 00 04 */ addi r29, r29, 0x4 +/* 0000A48C 0001721C 48 00 A2 EC */ b .L_00014778 +.L_0000A490: +/* 0000A490 00017220 80 01 01 24 */ lwz r0, 0x124(r1) +/* 0000A494 00017224 7C 08 03 A6 */ mtlr r0 +/* 0000A498 00017228 BA 81 00 C0 */ lmw r20, 0xc0(r1) +/* 0000A49C 0001722C E3 41 00 F0 */ psq_l f26, 0xf0(r1), 0, qr0 +.L_0000A4A0: +/* 0000A4A0 00017230 E3 61 00 F8 */ psq_l f27, 0xf8(r1), 0, qr0 +/* 0000A4A4 00017234 E3 81 01 00 */ psq_l f28, 0x100(r1), 0, qr0 +/* 0000A4A8 00017238 E3 A1 01 08 */ psq_l f29, 0x108(r1), 0, qr0 +.L_0000A4AC: +/* 0000A4AC 0001723C E3 C1 01 10 */ psq_l f30, 0x110(r1), 0, qr0 +/* 0000A4B0 00017240 E3 E1 01 18 */ psq_l f31, 0x118(r1), 0, qr0 +/* 0000A4B4 00017244 38 21 01 20 */ addi r1, r1, 0x120 +/* 0000A4B8 00017248 4E 80 00 20 */ blr +.endfn Update__13CDActionDrivef + +# .text:0xA4BC | size: 0xA4 +.fn GetTrafficBasis__13CDActionDriveRQ25UMath7Matrix4RQ25UMath7Vector3, global +/* 0000A4BC 0001724C 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0000A4C0 00017250 7C 08 02 A6 */ mflr r0 +/* 0000A4C4 00017254 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 0000A4C8 00017258 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0000A4CC 0001725C 80 63 00 50 */ lwz r3, 0x50(r3) +/* 0000A4D0 00017260 7C 9E 23 78 */ mr r30, r4 +/* 0000A4D4 00017264 7C BD 2B 78 */ mr r29, r5 +/* 0000A4D8 00017268 2C 03 00 00 */ cmpwi r3, 0x0 +.L_0000A4DC: +/* 0000A4DC 0001726C 41 82 A5 48 */ beq .L_00004A24 +/* 0000A4E0 00017270 80 63 00 00 */ lwz r3, 0x0(r3) +/* 0000A4E4 00017274 3C 80 00 00 */ lis r4, _IHandle__5IBody@ha +/* 0000A4E8 00017278 38 84 00 00 */ addi r4, r4, _IHandle__5IBody@l +/* 0000A4EC 0001727C 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000A4F0 00017280 7C 7F 1B 79 */ mr. r31, r3 +/* 0000A4F4 00017284 38 00 00 01 */ li r0, 0x1 +/* 0000A4F8 00017288 40 82 A5 00 */ bne .L_000049F8 +/* 0000A4FC 0001728C 38 00 00 00 */ li r0, 0x0 +/* 0000A500 00017290 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000A504 00017294 41 82 A5 48 */ beq .L_00004A4C +/* 0000A508 00017298 81 3F 00 04 */ lwz r9, 0x4(r31) +.L_0000A50C: +/* 0000A50C 0001729C 7F C4 F3 78 */ mr r4, r30 +/* 0000A510 000172A0 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000A514 000172A4 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000A518 000172A8 7C 08 03 A6 */ mtlr r0 +/* 0000A51C 000172AC 7C 7F 1A 14 */ add r3, r31, r3 +/* 0000A520 000172B0 4E 80 00 21 */ blrl +/* 0000A524 000172B4 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 0000A528 000172B8 7F A4 EB 78 */ mr r4, r29 +/* 0000A52C 000172BC A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000A530 000172C0 80 09 00 1C */ lwz r0, 0x1c(r9) +.L_0000A534: +/* 0000A534 000172C4 7C 7F 1A 14 */ add r3, r31, r3 +/* 0000A538 000172C8 7C 08 03 A6 */ mtlr r0 +.L_0000A53C: +/* 0000A53C 000172CC 4E 80 00 21 */ blrl +/* 0000A540 000172D0 38 60 00 01 */ li r3, 0x1 +/* 0000A544 000172D4 48 00 A5 4C */ b .L_00014A90 +/* 0000A548 000172D8 38 60 00 00 */ li r3, 0x0 +/* 0000A54C 000172DC 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0000A550 000172E0 7C 08 03 A6 */ mtlr r0 +/* 0000A554 000172E4 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 0000A558 000172E8 38 21 00 18 */ addi r1, r1, 0x18 +/* 0000A55C 000172EC 4E 80 00 20 */ blr +.endfn GetTrafficBasis__13CDActionDriveRQ25UMath7Matrix4RQ25UMath7Vector3 + +# .text:0xA560 | size: 0x40 +.fn MessageJumpCut__13CDActionDriveRC8MJumpCut, global +/* 0000A560 000172F0 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0000A564 000172F4 7C 08 02 A6 */ mflr r0 +/* 0000A568 000172F8 90 01 00 0C */ stw r0, 0xc(r1) +/* 0000A56C 000172FC 81 63 00 34 */ lwz r11, 0x34(r3) +/* 0000A570 00017300 2C 0B 00 00 */ cmpwi r11, 0x0 +.L_0000A574: +/* 0000A574 00017304 41 82 A5 90 */ beq .L_00004B04 +/* 0000A578 00017308 81 24 00 10 */ lwz r9, 0x10(r4) +/* 0000A57C 0001730C 80 0B 00 8C */ lwz r0, 0x8c(r11) +/* 0000A580 00017310 7C 09 00 00 */ cmpw r9, r0 +/* 0000A584 00017314 40 82 A5 90 */ bne .L_00004B14 +/* 0000A588 00017318 80 63 00 2C */ lwz r3, 0x2c(r3) +/* 0000A58C 0001731C 48 00 3F 9D */ bl .L_0000E528 +/* 0000A590 00017320 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0000A594 00017324 7C 08 03 A6 */ mtlr r0 +/* 0000A598 00017328 38 21 00 08 */ addi r1, r1, 0x8 +/* 0000A59C 0001732C 4E 80 00 20 */ blr +.endfn MessageJumpCut__13CDActionDriveRC8MJumpCut + +# .text:0xA5A0 | size: 0x74 +.fn GetName__C16CDActionTrackCar, global +/* 0000A5A0 00017330 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0000A5A4 00017334 7C 08 02 A6 */ mflr r0 +/* 0000A5A8 00017338 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 0000A5AC 0001733C 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0000A5B0 00017340 3F E0 00 00 */ lis r31, _.tmp_8.10941@ha +/* 0000A5B4 00017344 80 1F 00 00 */ lwz r0, _.tmp_8.10941@l(r31) +/* 0000A5B8 00017348 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000A5BC 0001734C 40 82 A5 F8 */ bne .L_00004BB4 +/* 0000A5C0 00017350 3F C0 00 00 */ lis r30, .rodata+0x8A8@ha +/* 0000A5C4 00017354 3F A0 00 00 */ lis r29, name.10940@ha +/* 0000A5C8 00017358 3B DE 08 A8 */ addi r30, r30, .rodata+0x8A8@l +/* 0000A5CC 0001735C 3B BD 00 00 */ addi r29, r29, name.10940@l +/* 0000A5D0 00017360 7F C3 F3 78 */ mr r3, r30 +/* 0000A5D4 00017364 48 00 00 01 */ bl StringHash64__6AttribPCc +/* 0000A5D8 00017368 90 7D 00 00 */ stw r3, 0x0(r29) +/* 0000A5DC 0001736C 90 9D 00 04 */ stw r4, 0x4(r29) +/* 0000A5E0 00017370 7F C3 F3 78 */ mr r3, r30 +/* 0000A5E4 00017374 48 00 00 01 */ bl StringHash32__6AttribPCc +/* 0000A5E8 00017378 38 00 00 01 */ li r0, 0x1 +/* 0000A5EC 0001737C 93 DD 00 0C */ stw r30, 0xc(r29) +/* 0000A5F0 00017380 90 1F 00 00 */ stw r0, _.tmp_8.10941@l(r31) +/* 0000A5F4 00017384 90 7D 00 08 */ stw r3, 0x8(r29) +/* 0000A5F8 00017388 3C 60 00 00 */ lis r3, name.10940@ha +/* 0000A5FC 0001738C 38 63 00 00 */ addi r3, r3, name.10940@l +.L_0000A600: +/* 0000A600 00017390 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0000A604 00017394 7C 08 03 A6 */ mtlr r0 +.L_0000A608: +/* 0000A608 00017398 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 0000A60C 0001739C 38 21 00 18 */ addi r1, r1, 0x18 +/* 0000A610 000173A0 4E 80 00 20 */ blr +.endfn GetName__C16CDActionTrackCar + +# .text:0xA614 | size: 0x2C +.fn GetNext__C16CDActionTrackCar, global +/* 0000A614 000173A4 3D 00 00 00 */ lis r8, .rodata@ha +.L_0000A618: +/* 0000A618 000173A8 39 20 00 00 */ li r9, 0x0 +/* 0000A61C 000173AC 7C 6B 1B 78 */ mr r11, r3 +/* 0000A620 000173B0 39 08 00 00 */ addi r8, r8, .rodata@l +.L_0000A624: +/* 0000A624 000173B4 39 40 00 00 */ li r10, 0x0 +/* 0000A628 000173B8 38 00 00 00 */ li r0, 0x0 +/* 0000A62C 000173BC 91 2B 00 00 */ stw r9, 0x0(r11) +.L_0000A630: +/* 0000A630 000173C0 91 4B 00 04 */ stw r10, 0x4(r11) +.L_0000A634: +/* 0000A634 000173C4 90 0B 00 08 */ stw r0, 0x8(r11) +/* 0000A638 000173C8 91 0B 00 0C */ stw r8, 0xc(r11) +/* 0000A63C 000173CC 4E 80 00 20 */ blr +.endfn GetNext__C16CDActionTrackCar + +# .text:0xA640 | size: 0x24 +.fn Attach__16CDActionTrackCarPQ33UTL3COM8IUnknown, global +/* 0000A640 000173D0 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0000A644 000173D4 7C 08 02 A6 */ mflr r0 +/* 0000A648 000173D8 90 01 00 0C */ stw r0, 0xc(r1) +/* 0000A64C 000173DC 80 63 00 44 */ lwz r3, 0x44(r3) +/* 0000A650 000173E0 48 00 00 01 */ bl Attach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +/* 0000A654 000173E4 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0000A658 000173E8 7C 08 03 A6 */ mtlr r0 +/* 0000A65C 000173EC 38 21 00 08 */ addi r1, r1, 0x8 +/* 0000A660 000173F0 4E 80 00 20 */ blr +.endfn Attach__16CDActionTrackCarPQ33UTL3COM8IUnknown + +# .text:0xA664 | size: 0x24 +.fn Detach__16CDActionTrackCarPQ33UTL3COM8IUnknown, global +/* 0000A664 000173F4 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0000A668 000173F8 7C 08 02 A6 */ mflr r0 +/* 0000A66C 000173FC 90 01 00 0C */ stw r0, 0xc(r1) +/* 0000A670 00017400 80 63 00 44 */ lwz r3, 0x44(r3) +/* 0000A674 00017404 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +/* 0000A678 00017408 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0000A67C 0001740C 7C 08 03 A6 */ mtlr r0 +/* 0000A680 00017410 38 21 00 08 */ addi r1, r1, 0x8 +/* 0000A684 00017414 4E 80 00 20 */ blr +.endfn Detach__16CDActionTrackCarPQ33UTL3COM8IUnknown + +# .text:0xA688 | size: 0x24 +.fn IsAttached__C16CDActionTrackCarPCQ33UTL3COM8IUnknown, global +/* 0000A688 00017418 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0000A68C 0001741C 7C 08 02 A6 */ mflr r0 +/* 0000A690 00017420 90 01 00 0C */ stw r0, 0xc(r1) +/* 0000A694 00017424 80 63 00 44 */ lwz r3, 0x44(r3) +/* 0000A698 00017428 48 00 00 01 */ bl IsAttached__CQ23Sim11AttachmentsPCQ33UTL3COM8IUnknown +/* 0000A69C 0001742C 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0000A6A0 00017430 7C 08 03 A6 */ mtlr r0 +/* 0000A6A4 00017434 38 21 00 08 */ addi r1, r1, 0x8 +/* 0000A6A8 00017438 4E 80 00 20 */ blr +.endfn IsAttached__C16CDActionTrackCarPCQ33UTL3COM8IUnknown + +# .text:0xA6AC | size: 0x8 +.fn GetAttachments__C16CDActionTrackCar, global +/* 0000A6AC 0001743C 80 63 00 44 */ lwz r3, 0x44(r3) +/* 0000A6B0 00017440 4E 80 00 20 */ blr +.endfn GetAttachments__C16CDActionTrackCar + +# .text:0xA6B4 | size: 0x11C +.fn Construct__16CDActionTrackCarPQ28CameraAI8Director, global +/* 0000A6B4 00017444 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 0000A6B8 00017448 7C 08 02 A6 */ mflr r0 +/* 0000A6BC 0001744C BF 61 00 0C */ stmw r27, 0xc(r1) +/* 0000A6C0 00017450 90 01 00 24 */ stw r0, 0x24(r1) +/* 0000A6C4 00017454 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@ha +.L_0000A6C8: +/* 0000A6C8 00017458 7C 7B 1B 78 */ mr r27, r3 +/* 0000A6CC 0001745C 39 29 00 00 */ addi r9, r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@l +/* 0000A6D0 00017460 3B 80 00 00 */ li r28, 0x0 +/* 0000A6D4 00017464 83 E9 00 30 */ lwz r31, 0x30(r9) +/* 0000A6D8 00017468 7D 3D 4B 78 */ mr r29, r9 +/* 0000A6DC 0001746C 80 1D 00 38 */ lwz r0, 0x38(r29) +/* 0000A6E0 00017470 81 3D 00 30 */ lwz r9, 0x30(r29) +/* 0000A6E4 00017474 54 00 10 3A */ slwi r0, r0, 2 +/* 0000A6E8 00017478 7D 29 02 14 */ add r9, r9, r0 +/* 0000A6EC 0001747C 7C 1F 48 00 */ cmpw r31, r9 +/* 0000A6F0 00017480 41 82 A7 28 */ beq .L_00004E18 +/* 0000A6F4 00017484 83 DF 00 00 */ lwz r30, 0x0(r31) +/* 0000A6F8 00017488 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000A6FC 0001748C 80 09 00 64 */ lwz r0, 0x64(r9) +/* 0000A700 00017490 A8 69 00 60 */ lha r3, 0x60(r9) +/* 0000A704 00017494 7C 08 03 A6 */ mtlr r0 +/* 0000A708 00017498 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000A70C 0001749C 4E 80 00 21 */ blrl +/* 0000A710 000174A0 80 1B 00 04 */ lwz r0, 0x4(r27) +/* 0000A714 000174A4 7C 03 00 00 */ cmpw r3, r0 +/* 0000A718 000174A8 41 82 A7 24 */ beq .L_00004E3C +/* 0000A71C 000174AC 3B FF 00 04 */ addi r31, r31, 0x4 +/* 0000A720 000174B0 48 00 A6 DC */ b .L_00014DFC +/* 0000A724 000174B4 7F DC F3 78 */ mr r28, r30 +/* 0000A728 000174B8 2C 1C 00 00 */ cmpwi r28, 0x0 +/* 0000A72C 000174BC 41 82 A7 B8 */ beq .L_00004EE4 +/* 0000A730 000174C0 81 3C 00 04 */ lwz r9, 0x4(r28) +/* 0000A734 000174C4 A8 69 00 28 */ lha r3, 0x28(r9) +/* 0000A738 000174C8 80 09 00 2C */ lwz r0, 0x2c(r9) +/* 0000A73C 000174CC 7C 7C 1A 14 */ add r3, r28, r3 +/* 0000A740 000174D0 7C 08 03 A6 */ mtlr r0 +/* 0000A744 000174D4 4E 80 00 21 */ blrl +/* 0000A748 000174D8 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000A74C 000174DC 41 82 A7 B8 */ beq .L_00004F04 +/* 0000A750 000174E0 81 3C 00 04 */ lwz r9, 0x4(r28) +/* 0000A754 000174E4 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000A758 000174E8 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000A75C 000174EC 7C 7C 1A 14 */ add r3, r28, r3 +/* 0000A760 000174F0 7C 08 03 A6 */ mtlr r0 +/* 0000A764 000174F4 4E 80 00 21 */ blrl +/* 0000A768 000174F8 7C 6B 1B 79 */ mr. r11, r3 +/* 0000A76C 000174FC 41 82 A7 B8 */ beq .L_00004F24 +/* 0000A770 00017500 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000A774 00017504 A8 69 00 E8 */ lha r3, 0xe8(r9) +/* 0000A778 00017508 80 09 00 EC */ lwz r0, 0xec(r9) +/* 0000A77C 0001750C 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000A780 00017510 7C 08 03 A6 */ mtlr r0 +/* 0000A784 00017514 4E 80 00 21 */ blrl +/* 0000A788 00017518 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000A78C 0001751C 38 60 00 00 */ li r3, 0x0 +/* 0000A790 00017520 41 82 A7 BC */ beq .L_00004F4C +/* 0000A794 00017524 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0000A798 00017528 38 80 00 50 */ li r4, 0x50 +/* 0000A79C 0001752C 38 A0 00 00 */ li r5, 0x0 +/* 0000A7A0 00017530 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0000A7A4 00017534 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 0000A7A8 00017538 7F 64 DB 78 */ mr r4, r27 +/* 0000A7AC 0001753C 7F 85 E3 78 */ mr r5, r28 +/* 0000A7B0 00017540 48 00 A7 D1 */ bl .L_00014F80 +/* 0000A7B4 00017544 48 00 A7 BC */ b .L_00014F70 +/* 0000A7B8 00017548 38 60 00 00 */ li r3, 0x0 +/* 0000A7BC 0001754C 80 01 00 24 */ lwz r0, 0x24(r1) +/* 0000A7C0 00017550 7C 08 03 A6 */ mtlr r0 +/* 0000A7C4 00017554 BB 61 00 0C */ lmw r27, 0xc(r1) +/* 0000A7C8 00017558 38 21 00 20 */ addi r1, r1, 0x20 +/* 0000A7CC 0001755C 4E 80 00 20 */ blr +.endfn Construct__16CDActionTrackCarPQ28CameraAI8Director + +# .text:0xA7D0 | size: 0x3FC +.fn __16CDActionTrackCarPQ28CameraAI8DirectorP7IPlayer, global +/* 0000A7D0 00017560 94 21 FF 68 */ stwu r1, -0x98(r1) +/* 0000A7D4 00017564 7C 08 02 A6 */ mflr r0 +/* 0000A7D8 00017568 7D 80 00 26 */ mfcr r12 +.L_0000A7DC: +/* 0000A7DC 0001756C BE 81 00 68 */ stmw r20, 0x68(r1) +/* 0000A7E0 00017570 90 01 00 9C */ stw r0, 0x9c(r1) +/* 0000A7E4 00017574 91 81 00 64 */ stw r12, 0x64(r1) +/* 0000A7E8 00017578 7C 7F 1B 78 */ mr r31, r3 +/* 0000A7EC 0001757C 7C 94 23 78 */ mr r20, r4 +/* 0000A7F0 00017580 38 80 00 00 */ li r4, 0x0 +/* 0000A7F4 00017584 7C B5 2B 78 */ mr r21, r5 +/* 0000A7F8 00017588 3A FF 00 20 */ addi r23, r31, 0x20 +/* 0000A7FC 0001758C 48 00 00 01 */ bl __Q43UTL3COM6Object6_IListUi +/* 0000A800 00017590 3F 20 00 00 */ lis r25, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha +/* 0000A804 00017594 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha +/* 0000A808 00017598 3D 60 00 00 */ lis r11, _vt.Q33UTL3COM8IUnknown@ha +/* 0000A80C 0001759C 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l +/* 0000A810 000175A0 39 6B 00 00 */ addi r11, r11, _vt.Q33UTL3COM8IUnknown@l +/* 0000A814 000175A4 3C 80 00 00 */ lis r4, _IHandle__11IAttachable@ha +/* 0000A818 000175A8 93 FF 00 18 */ stw r31, 0x18(r31) +/* 0000A81C 000175AC 91 3F 00 14 */ stw r9, 0x14(r31) +/* 0000A820 000175B0 38 84 00 00 */ addi r4, r4, _IHandle__11IAttachable@l +/* 0000A824 000175B4 91 7F 00 1C */ stw r11, 0x1c(r31) +/* 0000A828 000175B8 7F E3 FB 78 */ mr r3, r31 +/* 0000A82C 000175BC 38 BF 00 18 */ addi r5, r31, 0x18 +/* 0000A830 000175C0 3B B9 00 00 */ addi r29, r25, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l +/* 0000A834 000175C4 48 00 00 01 */ bl Add__Q43UTL3COM6Object6_IListPvPQ33UTL3COM8IUnknown +/* 0000A838 000175C8 3D 20 00 00 */ lis r9, _vt.11IAttachable@ha +/* 0000A83C 000175CC 92 E1 00 58 */ stw r23, 0x58(r1) +/* 0000A840 000175D0 39 29 00 00 */ addi r9, r9, _vt.11IAttachable@l +/* 0000A844 000175D4 3A C1 00 58 */ addi r22, r1, 0x58 +/* 0000A848 000175D8 91 3F 00 1C */ stw r9, 0x1c(r31) +/* 0000A84C 000175DC 3B 41 00 08 */ addi r26, r1, 0x8 +/* 0000A850 000175E0 80 9D 00 08 */ lwz r4, 0x8(r29) +/* 0000A854 000175E4 80 1D 00 04 */ lwz r0, 0x4(r29) +/* 0000A858 000175E8 7C 04 00 40 */ cmplw r4, r0 +/* 0000A85C 000175EC 41 80 A9 3C */ blt .L_00005198 +/* 0000A860 000175F0 81 3D 00 0C */ lwz r9, 0xc(r29) +/* 0000A864 000175F4 38 84 00 01 */ addi r4, r4, 0x1 +/* 0000A868 000175F8 80 09 00 24 */ lwz r0, 0x24(r9) +/* 0000A86C 000175FC A8 69 00 20 */ lha r3, 0x20(r9) +/* 0000A870 00017600 7C 08 03 A6 */ mtlr r0 +/* 0000A874 00017604 7C 63 EA 14 */ add r3, r3, r29 +/* 0000A878 00017608 4E 80 00 21 */ blrl +/* 0000A87C 0001760C 80 1D 00 04 */ lwz r0, 0x4(r29) +/* 0000A880 00017610 7C 7E 1B 78 */ mr r30, r3 +/* 0000A884 00017614 7C 1E 00 40 */ cmplw r30, r0 +/* 0000A888 00017618 40 81 A9 3C */ ble .L_000051C4 +/* 0000A88C 0001761C 81 3D 00 0C */ lwz r9, 0xc(r29) +/* 0000A890 00017620 7F C4 F3 78 */ mr r4, r30 +/* 0000A894 00017624 80 09 00 34 */ lwz r0, 0x34(r9) +/* 0000A898 00017628 A8 69 00 30 */ lha r3, 0x30(r9) +/* 0000A89C 0001762C 7C 08 03 A6 */ mtlr r0 +/* 0000A8A0 00017630 7C 63 EA 14 */ add r3, r3, r29 +/* 0000A8A4 00017634 4E 80 00 21 */ blrl +/* 0000A8A8 00017638 81 3D 00 0C */ lwz r9, 0xc(r29) +/* 0000A8AC 0001763C 7F C4 F3 78 */ mr r4, r30 +.L_0000A8B0: +/* 0000A8B0 00017640 38 A0 00 10 */ li r5, 0x10 +/* 0000A8B4 00017644 83 99 00 00 */ lwz r28, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r25) +/* 0000A8B8 00017648 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000A8BC 0001764C 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000A8C0 00017650 7C 63 EA 14 */ add r3, r3, r29 +/* 0000A8C4 00017654 83 7D 00 08 */ lwz r27, 0x8(r29) +/* 0000A8C8 00017658 7C 08 03 A6 */ mtlr r0 +/* 0000A8CC 0001765C 83 1D 00 04 */ lwz r24, 0x4(r29) +/* 0000A8D0 00017660 4E 80 00 21 */ blrl +/* 0000A8D4 00017664 93 DD 00 04 */ stw r30, 0x4(r29) +/* 0000A8D8 00017668 7C 1C 18 00 */ cmpw r28, r3 +/* 0000A8DC 0001766C 90 79 00 00 */ stw r3, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r25) +/* 0000A8E0 00017670 41 82 A9 3C */ beq .L_0000521C +/* 0000A8E4 00017674 38 00 00 00 */ li r0, 0x0 +/* 0000A8E8 00017678 3B C0 00 00 */ li r30, 0x0 +/* 0000A8EC 0001767C 90 1D 00 08 */ stw r0, 0x8(r29) +/* 0000A8F0 00017680 7C 1E D8 00 */ cmpw r30, r27 +/* 0000A8F4 00017684 2E 1C 00 00 */ cmpwi cr4, r28, 0x0 +/* 0000A8F8 00017688 40 80 A9 18 */ bge .L_00005210 +/* 0000A8FC 0001768C 57 C4 10 3A */ slwi r4, r30, 2 +/* 0000A900 00017690 7F A3 EB 78 */ mr r3, r29 +/* 0000A904 00017694 7C 9C 22 14 */ add r4, r28, r4 +/* 0000A908 00017698 3B DE 00 01 */ addi r30, r30, 0x1 +/* 0000A90C 0001769C 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZP14ITrafficCenteri16RCP14ITrafficCenter +/* 0000A910 000176A0 7C 1E D8 00 */ cmpw r30, r27 +/* 0000A914 000176A4 41 80 A8 FC */ blt .L_00005210 +/* 0000A918 000176A8 41 92 A9 3C */ beq cr4, .L_00005254 +/* 0000A91C 000176AC 81 3D 00 0C */ lwz r9, 0xc(r29) +/* 0000A920 000176B0 7F 84 E3 78 */ mr r4, r28 +/* 0000A924 000176B4 7F 05 C3 78 */ mr r5, r24 +/* 0000A928 000176B8 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000A92C 000176BC 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0000A930 000176C0 7C 7D 1A 14 */ add r3, r29, r3 +/* 0000A934 000176C4 7C 08 03 A6 */ mtlr r0 +/* 0000A938 000176C8 4E 80 00 21 */ blrl +/* 0000A93C 000176CC 81 3D 00 08 */ lwz r9, 0x8(r29) +/* 0000A940 000176D0 81 7D 00 00 */ lwz r11, 0x0(r29) +.L_0000A944: +/* 0000A944 000176D4 55 29 10 3A */ slwi r9, r9, 2 +/* 0000A948 000176D8 7C 09 5A 14 */ add r0, r9, r11 +/* 0000A94C 000176DC 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000A950 000176E0 41 82 A9 5C */ beq .L_000052AC +/* 0000A954 000176E4 80 16 00 00 */ lwz r0, 0x0(r22) +/* 0000A958 000176E8 7C 09 59 2E */ stwx r0, r9, r11 +/* 0000A95C 000176EC 81 3D 00 08 */ lwz r9, 0x8(r29) +/* 0000A960 000176F0 3D 60 00 00 */ lis r11, _vt.14ITrafficCenter@ha +/* 0000A964 000176F4 39 6B 00 00 */ addi r11, r11, _vt.14ITrafficCenter@l +/* 0000A968 000176F8 3D 40 00 00 */ lis r10, _vt.16CDActionTrackCar.11IAttachable@ha +/* 0000A96C 000176FC 39 29 00 01 */ addi r9, r9, 0x1 +/* 0000A970 00017700 3D 00 00 00 */ lis r8, _vt.16CDActionTrackCar.14ITrafficCenter@ha +/* 0000A974 00017704 91 3D 00 08 */ stw r9, 0x8(r29) +/* 0000A978 00017708 3C E0 00 00 */ lis r7, _vt.16CDActionTrackCar@ha +/* 0000A97C 0001770C 91 77 00 04 */ stw r11, 0x4(r23) +/* 0000A980 00017710 39 4A 00 00 */ addi r10, r10, _vt.16CDActionTrackCar.11IAttachable@l +/* 0000A984 00017714 39 08 00 00 */ addi r8, r8, _vt.16CDActionTrackCar.14ITrafficCenter@l +/* 0000A988 00017718 38 E7 00 00 */ addi r7, r7, _vt.16CDActionTrackCar@l +/* 0000A98C 0001771C 91 5F 00 1C */ stw r10, 0x1c(r31) +/* 0000A990 00017720 38 80 00 00 */ li r4, 0x0 +/* 0000A994 00017724 91 1F 00 24 */ stw r8, 0x24(r31) +/* 0000A998 00017728 38 7F 00 30 */ addi r3, r31, 0x30 +/* 0000A99C 0001772C 90 FF 00 14 */ stw r7, 0x14(r31) +/* 0000A9A0 00017730 3B 80 00 00 */ li r28, 0x0 +/* 0000A9A4 00017734 48 00 00 01 */ bl __Q29WorldConn9ReferenceUi +/* 0000A9A8 00017738 3B 7F 00 18 */ addi r27, r31, 0x18 +/* 0000A9AC 0001773C 92 BF 00 40 */ stw r21, 0x40(r31) +/* 0000A9B0 00017740 3F A0 00 00 */ lis r29, gFastMem@ha +/* 0000A9B4 00017744 93 9F 00 48 */ stw r28, 0x48(r31) +/* 0000A9B8 00017748 3B BD 00 00 */ addi r29, r29, gFastMem@l +/* 0000A9BC 0001774C 38 80 00 10 */ li r4, 0x10 +/* 0000A9C0 00017750 38 A0 00 00 */ li r5, 0x0 +/* 0000A9C4 00017754 80 14 00 04 */ lwz r0, 0x4(r20) +/* 0000A9C8 00017758 7F A3 EB 78 */ mr r3, r29 +/* 0000A9CC 0001775C 90 1F 00 4C */ stw r0, 0x4c(r31) +/* 0000A9D0 00017760 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 0000A9D4 00017764 7C 7E 1B 78 */ mr r30, r3 +/* 0000A9D8 00017768 3D 20 00 00 */ lis r9, _vt.Q23Sim11Attachments@ha +/* 0000A9DC 0001776C 39 29 00 00 */ addi r9, r9, _vt.Q23Sim11Attachments@l +/* 0000A9E0 00017770 93 9E 00 04 */ stw r28, 0x4(r30) +/* 0000A9E4 00017774 38 A0 00 00 */ li r5, 0x0 +/* 0000A9E8 00017778 91 3E 00 0C */ stw r9, 0xc(r30) +/* 0000A9EC 0001777C 38 80 00 0C */ li r4, 0xc +/* 0000A9F0 00017780 7F A3 EB 78 */ mr r3, r29 +/* 0000A9F4 00017784 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 0000A9F8 00017788 7C 69 1B 78 */ mr r9, r3 +/* 0000A9FC 0001778C 91 29 00 00 */ stw r9, 0x0(r9) +/* 0000AA00 00017790 7F C3 F3 78 */ mr r3, r30 +/* 0000AA04 00017794 91 29 00 04 */ stw r9, 0x4(r9) +/* 0000AA08 00017798 91 3E 00 04 */ stw r9, 0x4(r30) +/* 0000AA0C 0001779C 93 7E 00 08 */ stw r27, 0x8(r30) +/* 0000AA10 000177A0 93 DF 00 44 */ stw r30, 0x44(r31) +/* 0000AA14 000177A4 80 9F 00 40 */ lwz r4, 0x40(r31) +/* 0000AA18 000177A8 48 00 00 01 */ bl Attach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +/* 0000AA1C 000177AC 38 60 01 24 */ li r3, 0x124 +/* 0000AA20 000177B0 48 00 00 01 */ bl __builtin_vec_new +/* 0000AA24 000177B4 38 80 00 00 */ li r4, 0x0 +/* 0000AA28 000177B8 48 00 10 51 */ bl .L_0000BA78 +/* 0000AA2C 000177BC 90 7F 00 2C */ stw r3, 0x2c(r31) +/* 0000AA30 000177C0 7F E3 FB 78 */ mr r3, r31 +/* 0000AA34 000177C4 48 00 AF 45 */ bl .L_00015978 +/* 0000AA38 000177C8 80 7F 00 34 */ lwz r3, 0x34(r31) +/* 0000AA3C 000177CC 38 00 00 01 */ li r0, 0x1 +/* 0000AA40 000177D0 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000AA44 000177D4 40 82 AA 4C */ bne .L_00005490 +/* 0000AA48 000177D8 38 00 00 00 */ li r0, 0x0 +/* 0000AA4C 000177DC 2C 00 00 00 */ cmpwi r0, 0x0 +.L_0000AA50: +/* 0000AA50 000177E0 41 82 AB 78 */ beq .L_000055C8 +/* 0000AA54 000177E4 38 81 00 18 */ addi r4, r1, 0x18 +/* 0000AA58 000177E8 48 00 00 01 */ bl PSMTX44Copy +/* 0000AA5C 000177EC 80 7F 00 48 */ lwz r3, 0x48(r31) +/* 0000AA60 000177F0 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000AA64 000177F4 41 82 AB 5C */ beq .L_000055C0 +/* 0000AA68 000177F8 80 63 00 00 */ lwz r3, 0x0(r3) +/* 0000AA6C 000177FC 3C 80 00 00 */ lis r4, _IHandle__14ICollisionBody@ha +/* 0000AA70 00017800 38 84 00 00 */ addi r4, r4, _IHandle__14ICollisionBody@l +/* 0000AA74 00017804 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000AA78 00017808 7C 7D 1B 79 */ mr. r29, r3 +/* 0000AA7C 0001780C 38 00 00 01 */ li r0, 0x1 +/* 0000AA80 00017810 40 82 AA 88 */ bne .L_00005508 +/* 0000AA84 00017814 38 00 00 00 */ li r0, 0x0 +/* 0000AA88 00017818 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000AA8C 0001781C 41 82 AB 5C */ beq .L_000055E8 +/* 0000AA90 00017820 81 7F 00 48 */ lwz r11, 0x48(r31) +/* 0000AA94 00017824 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000AA98 00017828 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0000AA9C 0001782C A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000AAA0 00017830 7C 08 03 A6 */ mtlr r0 +/* 0000AAA4 00017834 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000AAA8 00017838 4E 80 00 21 */ blrl +/* 0000AAAC 0001783C 81 23 00 04 */ lwz r9, 0x4(r3) +/* 0000AAB0 00017840 A8 09 00 A8 */ lha r0, 0xa8(r9) +/* 0000AAB4 00017844 81 29 00 AC */ lwz r9, 0xac(r9) +/* 0000AAB8 00017848 7C 63 02 14 */ add r3, r3, r0 +/* 0000AABC 0001784C 7D 28 03 A6 */ mtlr r9 +/* 0000AAC0 00017850 4E 80 00 21 */ blrl +/* 0000AAC4 00017854 81 3D 00 04 */ lwz r9, 0x4(r29) +/* 0000AAC8 00017858 7C 7E 1B 78 */ mr r30, r3 +/* 0000AACC 0001785C 80 09 00 84 */ lwz r0, 0x84(r9) +/* 0000AAD0 00017860 A8 69 00 80 */ lha r3, 0x80(r9) +/* 0000AAD4 00017864 7C 08 03 A6 */ mtlr r0 +/* 0000AAD8 00017868 7C 7D 1A 14 */ add r3, r29, r3 +/* 0000AADC 0001786C 4E 80 00 21 */ blrl +/* 0000AAE0 00017870 C1 A3 00 00 */ lfs f13, 0x0(r3) +/* 0000AAE4 00017874 7F 44 D3 78 */ mr r4, r26 +/* 0000AAE8 00017878 38 A0 00 00 */ li r5, 0x0 +/* 0000AAEC 0001787C D1 A1 00 08 */ stfs f13, 0x8(r1) +/* 0000AAF0 00017880 C0 03 00 04 */ lfs f0, 0x4(r3) +/* 0000AAF4 00017884 D0 01 00 0C */ stfs f0, 0xc(r1) +/* 0000AAF8 00017888 C1 A3 00 08 */ lfs f13, 0x8(r3) +/* 0000AAFC 0001788C D1 BA 00 08 */ stfs f13, 0x8(r26) +.L_0000AB00: +/* 0000AB00 00017890 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000AB04 00017894 80 09 01 4C */ lwz r0, 0x14c(r9) +/* 0000AB08 00017898 A8 69 01 48 */ lha r3, 0x148(r9) +.L_0000AB0C: +/* 0000AB0C 0001789C 7C 08 03 A6 */ mtlr r0 +/* 0000AB10 000178A0 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000AB14 000178A4 4E 80 00 21 */ blrl +/* 0000AB18 000178A8 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000AB1C 000178AC A8 69 00 48 */ lha r3, 0x48(r9) +/* 0000AB20 000178B0 80 09 00 4C */ lwz r0, 0x4c(r9) +.L_0000AB24: +/* 0000AB24 000178B4 7C 7E 1A 14 */ add r3, r30, r3 +.L_0000AB28: +/* 0000AB28 000178B8 7C 08 03 A6 */ mtlr r0 +/* 0000AB2C 000178BC 4E 80 00 21 */ blrl +/* 0000AB30 000178C0 7C 64 1B 78 */ mr r4, r3 +/* 0000AB34 000178C4 7F 45 D3 78 */ mr r5, r26 +/* 0000AB38 000178C8 7F 43 D3 78 */ mr r3, r26 +/* 0000AB3C 000178CC 48 00 00 01 */ bl VU0_v3add__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 +/* 0000AB40 000178D0 C0 01 00 08 */ lfs f0, 0x8(r1) +/* 0000AB44 000178D4 C1 BA 00 08 */ lfs f13, 0x8(r26) +/* 0000AB48 000178D8 C1 81 00 0C */ lfs f12, 0xc(r1) +/* 0000AB4C 000178DC FC 00 00 50 */ fneg f0, f0 +.L_0000AB50: +/* 0000AB50 000178E0 D1 A1 00 48 */ stfs f13, 0x48(r1) +/* 0000AB54 000178E4 D0 01 00 4C */ stfs f0, 0x4c(r1) +/* 0000AB58 000178E8 D1 81 00 50 */ stfs f12, 0x50(r1) +/* 0000AB5C 000178EC 3D 20 00 00 */ lis r9, .rodata+0x8B4@ha +/* 0000AB60 000178F0 80 7F 00 2C */ lwz r3, 0x2c(r31) +/* 0000AB64 000178F4 C0 29 08 B4 */ lfs f1, .rodata+0x8B4@l(r9) +/* 0000AB68 000178F8 38 81 00 18 */ addi r4, r1, 0x18 +/* 0000AB6C 000178FC 80 BF 00 38 */ lwz r5, 0x38(r31) +/* 0000AB70 00017900 80 DF 00 3C */ lwz r6, 0x3c(r31) +/* 0000AB74 00017904 48 00 17 65 */ bl .L_0000C2D8 +/* 0000AB78 00017908 38 60 00 D8 */ li r3, 0xd8 +/* 0000AB7C 0001790C 48 00 00 01 */ bl __builtin_vec_new +/* 0000AB80 00017910 80 94 00 04 */ lwz r4, 0x4(r20) +/* 0000AB84 00017914 38 C0 00 01 */ li r6, 0x1 +/* 0000AB88 00017918 80 BF 00 2C */ lwz r5, 0x2c(r31) +/* 0000AB8C 0001791C 48 00 4D C9 */ bl .L_0000F954 +/* 0000AB90 00017920 90 7F 00 28 */ stw r3, 0x28(r31) +/* 0000AB94 00017924 81 23 00 08 */ lwz r9, 0x8(r3) +/* 0000AB98 00017928 A8 09 00 70 */ lha r0, 0x70(r9) +/* 0000AB9C 0001792C 81 29 00 74 */ lwz r9, 0x74(r9) +/* 0000ABA0 00017930 7C 63 02 14 */ add r3, r3, r0 +/* 0000ABA4 00017934 7D 28 03 A6 */ mtlr r9 +.L_0000ABA8: +/* 0000ABA8 00017938 4E 80 00 21 */ blrl +/* 0000ABAC 0001793C 7F E3 FB 78 */ mr r3, r31 +/* 0000ABB0 00017940 80 01 00 9C */ lwz r0, 0x9c(r1) +/* 0000ABB4 00017944 81 81 00 64 */ lwz r12, 0x64(r1) +/* 0000ABB8 00017948 7C 08 03 A6 */ mtlr r0 +/* 0000ABBC 0001794C BA 81 00 68 */ lmw r20, 0x68(r1) +.L_0000ABC0: +/* 0000ABC0 00017950 7D 80 81 20 */ mtcrf 8, r12 +.L_0000ABC4: +/* 0000ABC4 00017954 38 21 00 98 */ addi r1, r1, 0x98 +/* 0000ABC8 00017958 4E 80 00 20 */ blr +.endfn __16CDActionTrackCarPQ28CameraAI8DirectorP7IPlayer + +# .text:0xABCC | size: 0x258 +.fn _._16CDActionTrackCar, global +/* 0000ABCC 0001795C 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 0000ABD0 00017960 7C 08 02 A6 */ mflr r0 +/* 0000ABD4 00017964 BF 81 00 10 */ stmw r28, 0x10(r1) +/* 0000ABD8 00017968 90 01 00 24 */ stw r0, 0x24(r1) +/* 0000ABDC 0001796C 7C 7E 1B 78 */ mr r30, r3 +.L_0000ABE0: +/* 0000ABE0 00017970 3D 20 00 00 */ lis r9, _vt.16CDActionTrackCar.11IAttachable@ha +/* 0000ABE4 00017974 80 1E 00 40 */ lwz r0, 0x40(r30) +/* 0000ABE8 00017978 3D 60 00 00 */ lis r11, _vt.16CDActionTrackCar.14ITrafficCenter@ha +/* 0000ABEC 0001797C 3D 40 00 00 */ lis r10, _vt.16CDActionTrackCar@ha +/* 0000ABF0 00017980 39 29 00 00 */ addi r9, r9, _vt.16CDActionTrackCar.11IAttachable@l +/* 0000ABF4 00017984 39 6B 00 00 */ addi r11, r11, _vt.16CDActionTrackCar.14ITrafficCenter@l +.L_0000ABF8: +/* 0000ABF8 00017988 39 4A 00 00 */ addi r10, r10, _vt.16CDActionTrackCar@l +/* 0000ABFC 0001798C 3B FE 00 20 */ addi r31, r30, 0x20 +/* 0000AC00 00017990 7C 9C 23 78 */ mr r28, r4 +/* 0000AC04 00017994 91 3E 00 1C */ stw r9, 0x1c(r30) +/* 0000AC08 00017998 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000AC0C 0001799C 91 7E 00 24 */ stw r11, 0x24(r30) +/* 0000AC10 000179A0 91 5E 00 14 */ stw r10, 0x14(r30) +/* 0000AC14 000179A4 41 82 AC 24 */ beq .L_00005838 +.L_0000AC18: +/* 0000AC18 000179A8 80 7E 00 44 */ lwz r3, 0x44(r30) +/* 0000AC1C 000179AC 7C 04 03 78 */ mr r4, r0 +/* 0000AC20 000179B0 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +/* 0000AC24 000179B4 80 9E 00 48 */ lwz r4, 0x48(r30) +/* 0000AC28 000179B8 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0000AC2C 000179BC 41 82 AC 38 */ beq .L_00005864 +.L_0000AC30: +/* 0000AC30 000179C0 80 7E 00 44 */ lwz r3, 0x44(r30) +/* 0000AC34 000179C4 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +/* 0000AC38 000179C8 81 7E 00 28 */ lwz r11, 0x28(r30) +/* 0000AC3C 000179CC 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000AC40 000179D0 41 82 AC 60 */ beq .L_000058A0 +.L_0000AC44: +/* 0000AC44 000179D4 81 2B 00 08 */ lwz r9, 0x8(r11) +/* 0000AC48 000179D8 38 80 00 03 */ li r4, 0x3 +/* 0000AC4C 000179DC A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000AC50 000179E0 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000AC54 000179E4 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000AC58 000179E8 7C 08 03 A6 */ mtlr r0 +/* 0000AC5C 000179EC 4E 80 00 21 */ blrl +/* 0000AC60 000179F0 80 7E 00 2C */ lwz r3, 0x2c(r30) +/* 0000AC64 000179F4 2C 03 00 00 */ cmpwi r3, 0x0 +.L_0000AC68: +/* 0000AC68 000179F8 41 82 AC 74 */ beq .L_000058DC +/* 0000AC6C 000179FC 38 80 00 03 */ li r4, 0x3 +/* 0000AC70 00017A00 48 00 13 6D */ bl .L_0000BFDC +/* 0000AC74 00017A04 81 7E 00 44 */ lwz r11, 0x44(r30) +/* 0000AC78 00017A08 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000AC7C 00017A0C 41 82 AC 9C */ beq .L_00005918 +/* 0000AC80 00017A10 81 2B 00 0C */ lwz r9, 0xc(r11) +/* 0000AC84 00017A14 38 80 00 03 */ li r4, 0x3 +/* 0000AC88 00017A18 A8 69 00 08 */ lha r3, 0x8(r9) +/* 0000AC8C 00017A1C 80 09 00 0C */ lwz r0, 0xc(r9) +/* 0000AC90 00017A20 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000AC94 00017A24 7C 08 03 A6 */ mtlr r0 +/* 0000AC98 00017A28 4E 80 00 21 */ blrl +/* 0000AC9C 00017A2C 38 7E 00 30 */ addi r3, r30, 0x30 +/* 0000ACA0 00017A30 38 80 00 02 */ li r4, 0x2 +/* 0000ACA4 00017A34 48 00 00 01 */ bl _._Q29WorldConn9Reference +/* 0000ACA8 00017A38 3D 20 00 00 */ lis r9, _vt.14ITrafficCenter@ha +/* 0000ACAC 00017A3C 3D 40 00 00 */ lis r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha +/* 0000ACB0 00017A40 39 29 00 00 */ addi r9, r9, _vt.14ITrafficCenter@l +/* 0000ACB4 00017A44 39 6A 00 00 */ addi r11, r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l +/* 0000ACB8 00017A48 91 3E 00 24 */ stw r9, 0x24(r30) +/* 0000ACBC 00017A4C 3B A1 00 08 */ addi r29, r1, 0x8 +/* 0000ACC0 00017A50 93 E1 00 08 */ stw r31, 0x8(r1) +/* 0000ACC4 00017A54 7F A5 EB 78 */ mr r5, r29 +/* 0000ACC8 00017A58 80 6A 00 00 */ lwz r3, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r10) +/* 0000ACCC 00017A5C 80 0B 00 08 */ lwz r0, 0x8(r11) +/* 0000ACD0 00017A60 54 00 10 3A */ slwi r0, r0, 2 +/* 0000ACD4 00017A64 7F E3 02 14 */ add r31, r3, r0 +/* 0000ACD8 00017A68 7F E4 FB 78 */ mr r4, r31 +/* 0000ACDC 00017A6C 48 00 00 01 */ bl find__H2ZPP14ITrafficCenterZP14ITrafficCenter_4_STLX01X01RCX11_X01 +/* 0000ACE0 00017A70 7C 03 F8 00 */ cmpw r3, r31 +/* 0000ACE4 00017A74 40 82 AC F4 */ bne .L_000059D8 +/* 0000ACE8 00017A78 7F E3 FB 78 */ mr r3, r31 +/* 0000ACEC 00017A7C 38 9E 00 18 */ addi r4, r30, 0x18 +/* 0000ACF0 00017A80 48 00 AD 28 */ b .L_00015A18 +/* 0000ACF4 00017A84 39 63 00 04 */ addi r11, r3, 0x4 +/* 0000ACF8 00017A88 38 9E 00 18 */ addi r4, r30, 0x18 +/* 0000ACFC 00017A8C 7C 0B F8 00 */ cmpw r11, r31 +/* 0000AD00 00017A90 41 82 AD 28 */ beq .L_00005A28 +/* 0000AD04 00017A94 81 2B 00 00 */ lwz r9, 0x0(r11) +/* 0000AD08 00017A98 80 1D 00 00 */ lwz r0, 0x0(r29) +/* 0000AD0C 00017A9C 7C 09 00 00 */ cmpw r9, r0 +/* 0000AD10 00017AA0 41 82 AD 1C */ beq .L_00005A2C +/* 0000AD14 00017AA4 91 23 00 00 */ stw r9, 0x0(r3) +/* 0000AD18 00017AA8 38 63 00 04 */ addi r3, r3, 0x4 +/* 0000AD1C 00017AAC 39 6B 00 04 */ addi r11, r11, 0x4 +/* 0000AD20 00017AB0 7C 0B F8 00 */ cmpw r11, r31 +/* 0000AD24 00017AB4 40 82 AD 04 */ bne .L_00005A28 +/* 0000AD28 00017AB8 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha +/* 0000AD2C 00017ABC 38 A9 00 00 */ addi r5, r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l +/* 0000AD30 00017AC0 81 49 00 00 */ lwz r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r9) +/* 0000AD34 00017AC4 81 05 00 08 */ lwz r8, 0x8(r5) +/* 0000AD38 00017AC8 55 00 10 3A */ slwi r0, r8, 2 +/* 0000AD3C 00017ACC 7D 6A 02 14 */ add r11, r10, r0 +/* 0000AD40 00017AD0 7C 03 58 00 */ cmpw r3, r11 +/* 0000AD44 00017AD4 41 82 AD BC */ beq .L_00005B00 +/* 0000AD48 00017AD8 7D 23 58 50 */ subf r9, r3, r11 +/* 0000AD4C 00017ADC 7C 0A 18 50 */ subf r0, r10, r3 +/* 0000AD50 00017AE0 7D 3F 16 70 */ srawi r31, r9, 2 +/* 0000AD54 00017AE4 7C 06 16 70 */ srawi r6, r0, 2 +/* 0000AD58 00017AE8 7D 09 43 78 */ mr r9, r8 +/* 0000AD5C 00017AEC 38 63 00 04 */ addi r3, r3, 0x4 +/* 0000AD60 00017AF0 7C 03 58 00 */ cmpw r3, r11 +/* 0000AD64 00017AF4 40 82 AD 5C */ bne .L_00005AC0 +/* 0000AD68 00017AF8 7C E6 FA 14 */ add r7, r6, r31 +/* 0000AD6C 00017AFC 39 00 00 00 */ li r8, 0x0 +/* 0000AD70 00017B00 7C E3 3B 78 */ mr r3, r7 +/* 0000AD74 00017B04 7C 03 48 50 */ subf r0, r3, r9 +/* 0000AD78 00017B08 7C 08 00 40 */ cmplw r8, r0 +/* 0000AD7C 00017B0C 40 80 AD B4 */ bge .L_00005B30 +/* 0000AD80 00017B10 7C 06 42 14 */ add r0, r6, r8 +/* 0000AD84 00017B14 81 65 00 00 */ lwz r11, 0x0(r5) +/* 0000AD88 00017B18 54 0A 10 3A */ slwi r10, r0, 2 +/* 0000AD8C 00017B1C 7D 27 42 14 */ add r9, r7, r8 +/* 0000AD90 00017B20 7C 0A 5A 14 */ add r0, r10, r11 +/* 0000AD94 00017B24 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000AD98 00017B28 41 82 AD A8 */ beq .L_00005B40 +/* 0000AD9C 00017B2C 55 29 10 3A */ slwi r9, r9, 2 +/* 0000ADA0 00017B30 7C 09 58 2E */ lwzx r0, r9, r11 +/* 0000ADA4 00017B34 7C 0A 59 2E */ stwx r0, r10, r11 +/* 0000ADA8 00017B38 39 08 00 01 */ addi r8, r8, 0x1 +/* 0000ADAC 00017B3C 81 25 00 08 */ lwz r9, 0x8(r5) +/* 0000ADB0 00017B40 48 00 AD 74 */ b .L_00015B24 +/* 0000ADB4 00017B44 7C 1F 48 50 */ subf r0, r31, r9 +/* 0000ADB8 00017B48 90 05 00 08 */ stw r0, 0x8(r5) +/* 0000ADBC 00017B4C 3D 20 00 00 */ lis r9, _vt.Q33UTL3COM8IUnknown@ha +/* 0000ADC0 00017B50 80 7E 00 18 */ lwz r3, 0x18(r30) +/* 0000ADC4 00017B54 39 29 00 00 */ addi r9, r9, _vt.Q33UTL3COM8IUnknown@l +/* 0000ADC8 00017B58 91 3E 00 1C */ stw r9, 0x1c(r30) +/* 0000ADCC 00017B5C 48 00 00 01 */ bl Remove__Q43UTL3COM6Object6_IListPQ33UTL3COM8IUnknown +/* 0000ADD0 00017B60 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha +/* 0000ADD4 00017B64 7F C3 F3 78 */ mr r3, r30 +/* 0000ADD8 00017B68 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l +/* 0000ADDC 00017B6C 38 80 00 02 */ li r4, 0x2 +/* 0000ADE0 00017B70 91 3E 00 14 */ stw r9, 0x14(r30) +/* 0000ADE4 00017B74 48 00 00 01 */ bl _._Q43UTL3COM6Object6_IList +/* 0000ADE8 00017B78 73 80 00 01 */ andi. r0, r28, 0x1 +/* 0000ADEC 00017B7C 41 82 AE 10 */ beq .L_00005BFC +/* 0000ADF0 00017B80 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 0000ADF4 00017B84 41 82 AE 10 */ beq .L_00005C04 +/* 0000ADF8 00017B88 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0000ADFC 00017B8C 7F C4 F3 78 */ mr r4, r30 +/* 0000AE00 00017B90 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0000AE04 00017B94 38 A0 00 50 */ li r5, 0x50 +/* 0000AE08 00017B98 38 C0 00 00 */ li r6, 0x0 +/* 0000AE0C 00017B9C 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 0000AE10 00017BA0 80 01 00 24 */ lwz r0, 0x24(r1) +/* 0000AE14 00017BA4 7C 08 03 A6 */ mtlr r0 +/* 0000AE18 00017BA8 BB 81 00 10 */ lmw r28, 0x10(r1) +/* 0000AE1C 00017BAC 38 21 00 20 */ addi r1, r1, 0x20 +/* 0000AE20 00017BB0 4E 80 00 20 */ blr +.endfn _._16CDActionTrackCar + +# .text:0xAE24 | size: 0xB4 +.fn OnDetached__16CDActionTrackCarP11IAttachable, global +/* 0000AE24 00017BB4 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0000AE28 00017BB8 7C 08 02 A6 */ mflr r0 +/* 0000AE2C 00017BBC 90 01 00 0C */ stw r0, 0xc(r1) +/* 0000AE30 00017BC0 7C 84 23 79 */ mr. r4, r4 +/* 0000AE34 00017BC4 81 23 00 40 */ lwz r9, 0x40(r3) +/* 0000AE38 00017BC8 4F 80 00 00 */ mcrf cr7, cr0 +/* 0000AE3C 00017BCC 41 9E AE 60 */ beq cr7, .L_00005C9C +/* 0000AE40 00017BD0 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0000AE44 00017BD4 41 82 AE 60 */ beq .L_00005CA4 +/* 0000AE48 00017BD8 81 29 00 00 */ lwz r9, 0x0(r9) +/* 0000AE4C 00017BDC 80 04 00 00 */ lwz r0, 0x0(r4) +/* 0000AE50 00017BE0 7C 00 4A 78 */ xor r0, r0, r9 +/* 0000AE54 00017BE4 21 60 00 00 */ subfic r11, r0, 0x0 +/* 0000AE58 00017BE8 7C 0B 01 14 */ adde r0, r11, r0 +/* 0000AE5C 00017BEC 48 00 AE 74 */ b .L_00015CD0 +/* 0000AE60 00017BF0 38 00 00 00 */ li r0, 0x0 +/* 0000AE64 00017BF4 2F 84 00 00 */ cmpwi cr7, r4, 0x0 +/* 0000AE68 00017BF8 40 9E AE 74 */ bne cr7, .L_00005CDC +/* 0000AE6C 00017BFC 21 69 00 00 */ subfic r11, r9, 0x0 +/* 0000AE70 00017C00 7C 0B 49 14 */ adde r0, r11, r9 +/* 0000AE74 00017C04 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000AE78 00017C08 41 82 AE 84 */ beq .L_00005CFC +/* 0000AE7C 00017C0C 38 00 00 00 */ li r0, 0x0 +/* 0000AE80 00017C10 90 03 00 40 */ stw r0, 0x40(r3) +/* 0000AE84 00017C14 81 63 00 48 */ lwz r11, 0x48(r3) +/* 0000AE88 00017C18 41 9E AE AC */ beq cr7, .L_00005D34 +/* 0000AE8C 00017C1C 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000AE90 00017C20 41 82 AE AC */ beq .L_00005D3C +/* 0000AE94 00017C24 81 24 00 00 */ lwz r9, 0x0(r4) +/* 0000AE98 00017C28 80 0B 00 00 */ lwz r0, 0x0(r11) +/* 0000AE9C 00017C2C 7D 20 02 78 */ xor r0, r9, r0 +/* 0000AEA0 00017C30 21 60 00 00 */ subfic r11, r0, 0x0 +/* 0000AEA4 00017C34 7C 0B 01 14 */ adde r0, r11, r0 +/* 0000AEA8 00017C38 48 00 AE BC */ b .L_00015D64 +/* 0000AEAC 00017C3C 38 00 00 00 */ li r0, 0x0 +/* 0000AEB0 00017C40 40 9E AE BC */ bne cr7, .L_00005D6C +/* 0000AEB4 00017C44 21 2B 00 00 */ subfic r9, r11, 0x0 +/* 0000AEB8 00017C48 7C 09 59 14 */ adde r0, r9, r11 +/* 0000AEBC 00017C4C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000AEC0 00017C50 41 82 AE C8 */ beq .L_00005D88 +/* 0000AEC4 00017C54 48 00 AE D9 */ bl .L_00015D9C +/* 0000AEC8 00017C58 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0000AECC 00017C5C 7C 08 03 A6 */ mtlr r0 +/* 0000AED0 00017C60 38 21 00 08 */ addi r1, r1, 0x8 +/* 0000AED4 00017C64 4E 80 00 20 */ blr +.endfn OnDetached__16CDActionTrackCarP11IAttachable + +# .text:0xAED8 | size: 0x6C +# CDActionTrackCar::OnCarDetached +.fn OnCarDetached__16CDActionTrackCar, global +/* 0000AED8 00017C68 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 0000AEDC 00017C6C 7C 08 02 A6 */ mflr r0 +/* 0000AEE0 00017C70 93 E1 00 0C */ stw r31, 0xc(r1) +/* 0000AEE4 00017C74 90 01 00 14 */ stw r0, 0x14(r1) +/* 0000AEE8 00017C78 7C 7F 1B 78 */ mr r31, r3 +/* 0000AEEC 00017C7C 39 20 00 01 */ li r9, 0x1 +/* 0000AEF0 00017C80 80 1F 00 34 */ lwz r0, 0x34(r31) +/* 0000AEF4 00017C84 38 7F 00 30 */ addi r3, r31, 0x30 +/* 0000AEF8 00017C88 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000AEFC 00017C8C 40 82 AF 04 */ bne .L_00005E00 +/* 0000AF00 00017C90 39 20 00 00 */ li r9, 0x0 +/* 0000AF04 00017C94 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0000AF08 00017C98 41 82 AF 14 */ beq .L_00005E1C +/* 0000AF0C 00017C9C 38 80 00 00 */ li r4, 0x0 +/* 0000AF10 00017CA0 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi +/* 0000AF14 00017CA4 81 3F 00 2C */ lwz r9, 0x2c(r31) +/* 0000AF18 00017CA8 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0000AF1C 00017CAC 41 82 AF 28 */ beq .L_00005E44 +/* 0000AF20 00017CB0 38 00 00 00 */ li r0, 0x0 +/* 0000AF24 00017CB4 90 09 00 8C */ stw r0, 0x8c(r9) +/* 0000AF28 00017CB8 38 00 00 00 */ li r0, 0x0 +/* 0000AF2C 00017CBC 90 1F 00 48 */ stw r0, 0x48(r31) +/* 0000AF30 00017CC0 80 01 00 14 */ lwz r0, 0x14(r1) +/* 0000AF34 00017CC4 7C 08 03 A6 */ mtlr r0 +/* 0000AF38 00017CC8 83 E1 00 0C */ lwz r31, 0xc(r1) +/* 0000AF3C 00017CCC 38 21 00 10 */ addi r1, r1, 0x10 +/* 0000AF40 00017CD0 4E 80 00 20 */ blr +.endfn OnCarDetached__16CDActionTrackCar + +# .text:0xAF44 | size: 0x224 +# CDActionTrackCar::AquireCar +.fn AquireCar__16CDActionTrackCar, global +/* 0000AF44 00017CD4 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0000AF48 00017CD8 7C 08 02 A6 */ mflr r0 +/* 0000AF4C 00017CDC BF A1 00 0C */ stmw r29, 0xc(r1) +/* 0000AF50 00017CE0 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0000AF54 00017CE4 7C 7F 1B 78 */ mr r31, r3 +/* 0000AF58 00017CE8 81 7F 00 40 */ lwz r11, 0x40(r31) +/* 0000AF5C 00017CEC 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000AF60 00017CF0 41 82 B1 54 */ beq .L_000060B4 +/* 0000AF64 00017CF4 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000AF68 00017CF8 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000AF6C 00017CFC 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000AF70 00017D00 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000AF74 00017D04 7C 08 03 A6 */ mtlr r0 +/* 0000AF78 00017D08 4E 80 00 21 */ blrl +/* 0000AF7C 00017D0C 81 7F 00 48 */ lwz r11, 0x48(r31) +/* 0000AF80 00017D10 7C 63 1B 79 */ mr. r3, r3 +/* 0000AF84 00017D14 41 82 AF A8 */ beq .L_00005F2C +/* 0000AF88 00017D18 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000AF8C 00017D1C 41 82 AF A8 */ beq .L_00005F34 +/* 0000AF90 00017D20 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0000AF94 00017D24 80 0B 00 00 */ lwz r0, 0x0(r11) +/* 0000AF98 00017D28 7D 3E 02 78 */ xor r30, r9, r0 +/* 0000AF9C 00017D2C 21 7E 00 00 */ subfic r11, r30, 0x0 +/* 0000AFA0 00017D30 7F CB F1 14 */ adde r30, r11, r30 +/* 0000AFA4 00017D34 48 00 AF C0 */ b .L_00015F64 +/* 0000AFA8 00017D38 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000AFAC 00017D3C 38 00 00 00 */ li r0, 0x0 +/* 0000AFB0 00017D40 40 82 AF BC */ bne .L_00005F6C +/* 0000AFB4 00017D44 21 2B 00 00 */ subfic r9, r11, 0x0 +/* 0000AFB8 00017D48 7C 09 59 14 */ adde r0, r9, r11 +/* 0000AFBC 00017D4C 7C 1E 03 78 */ mr r30, r0 +/* 0000AFC0 00017D50 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 0000AFC4 00017D54 40 82 AF F4 */ bne .L_00005FB8 +/* 0000AFC8 00017D58 80 9F 00 48 */ lwz r4, 0x48(r31) +/* 0000AFCC 00017D5C 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0000AFD0 00017D60 41 82 B0 00 */ beq .L_00005FD0 +/* 0000AFD4 00017D64 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 0000AFD8 00017D68 38 1F 00 18 */ addi r0, r31, 0x18 +/* 0000AFDC 00017D6C A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000AFE0 00017D70 81 29 00 1C */ lwz r9, 0x1c(r9) +/* 0000AFE4 00017D74 7C 60 1A 14 */ add r3, r0, r3 +.L_0000AFE8: +/* 0000AFE8 00017D78 7D 28 03 A6 */ mtlr r9 +/* 0000AFEC 00017D7C 4E 80 00 21 */ blrl +/* 0000AFF0 00017D80 93 DF 00 48 */ stw r30, 0x48(r31) +/* 0000AFF4 00017D84 80 1F 00 48 */ lwz r0, 0x48(r31) +/* 0000AFF8 00017D88 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000AFFC 00017D8C 40 82 B1 54 */ bne .L_00006150 +/* 0000B000 00017D90 80 7F 00 40 */ lwz r3, 0x40(r31) +/* 0000B004 00017D94 81 23 00 04 */ lwz r9, 0x4(r3) +/* 0000B008 00017D98 A8 09 00 10 */ lha r0, 0x10(r9) +/* 0000B00C 00017D9C 81 29 00 14 */ lwz r9, 0x14(r9) +/* 0000B010 00017DA0 7C 63 02 14 */ add r3, r3, r0 +.L_0000B014: +/* 0000B014 00017DA4 7D 28 03 A6 */ mtlr r9 +/* 0000B018 00017DA8 4E 80 00 21 */ blrl +/* 0000B01C 00017DAC 7C 7D 1B 79 */ mr. r29, r3 +/* 0000B020 00017DB0 41 82 B1 54 */ beq .L_00006174 +/* 0000B024 00017DB4 81 3D 00 04 */ lwz r9, 0x4(r29) +/* 0000B028 00017DB8 3B DF 00 30 */ addi r30, r31, 0x30 +/* 0000B02C 00017DBC 80 09 00 EC */ lwz r0, 0xec(r9) +/* 0000B030 00017DC0 A8 69 00 E8 */ lha r3, 0xe8(r9) +/* 0000B034 00017DC4 7C 08 03 A6 */ mtlr r0 +/* 0000B038 00017DC8 7C 7D 1A 14 */ add r3, r29, r3 +/* 0000B03C 00017DCC 4E 80 00 21 */ blrl +/* 0000B040 00017DD0 7C 64 1B 78 */ mr r4, r3 +/* 0000B044 00017DD4 7F C3 F3 78 */ mr r3, r30 +/* 0000B048 00017DD8 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi +/* 0000B04C 00017DDC 80 1F 00 34 */ lwz r0, 0x34(r31) +/* 0000B050 00017DE0 39 20 00 01 */ li r9, 0x1 +/* 0000B054 00017DE4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000B058 00017DE8 40 82 B0 60 */ bne .L_000060B8 +/* 0000B05C 00017DEC 39 20 00 00 */ li r9, 0x0 +/* 0000B060 00017DF0 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0000B064 00017DF4 41 82 B1 54 */ beq .L_000061B8 +/* 0000B068 00017DF8 80 7D 00 00 */ lwz r3, 0x0(r29) +/* 0000B06C 00017DFC 3C 80 00 00 */ lis r4, _IHandle__8IVehicle@ha +/* 0000B070 00017E00 38 84 00 00 */ addi r4, r4, _IHandle__8IVehicle@l +/* 0000B074 00017E04 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000B078 00017E08 38 00 00 01 */ li r0, 0x1 +/* 0000B07C 00017E0C 90 7F 00 48 */ stw r3, 0x48(r31) +.L_0000B080: +/* 0000B080 00017E10 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000B084 00017E14 40 82 B0 8C */ bne .L_00006110 +/* 0000B088 00017E18 38 00 00 00 */ li r0, 0x0 +/* 0000B08C 00017E1C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000B090 00017E20 41 82 B1 54 */ beq .L_000061E4 +/* 0000B094 00017E24 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 0000B098 00017E28 7C 64 1B 78 */ mr r4, r3 +/* 0000B09C 00017E2C 38 1F 00 18 */ addi r0, r31, 0x18 +/* 0000B0A0 00017E30 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000B0A4 00017E34 81 29 00 14 */ lwz r9, 0x14(r9) +/* 0000B0A8 00017E38 7C 60 1A 14 */ add r3, r0, r3 +/* 0000B0AC 00017E3C 7D 28 03 A6 */ mtlr r9 +.L_0000B0B0: +/* 0000B0B0 00017E40 4E 80 00 21 */ blrl +/* 0000B0B4 00017E44 81 7F 00 48 */ lwz r11, 0x48(r31) +/* 0000B0B8 00017E48 83 DF 00 2C */ lwz r30, 0x2c(r31) +/* 0000B0BC 00017E4C 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000B0C0 00017E50 A8 69 00 98 */ lha r3, 0x98(r9) +/* 0000B0C4 00017E54 80 09 00 9C */ lwz r0, 0x9c(r9) +/* 0000B0C8 00017E58 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000B0CC 00017E5C 7C 08 03 A6 */ mtlr r0 +/* 0000B0D0 00017E60 4E 80 00 21 */ blrl +/* 0000B0D4 00017E64 81 23 00 08 */ lwz r9, 0x8(r3) +/* 0000B0D8 00017E68 80 69 00 1C */ lwz r3, 0x1c(r9) +/* 0000B0DC 00017E6C 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000B0E0 00017E70 40 82 B0 EC */ bne .L_000061CC +/* 0000B0E4 00017E74 3D 20 00 00 */ lis r9, .rodata@ha +/* 0000B0E8 00017E78 38 69 00 00 */ addi r3, r9, .rodata@l +/* 0000B0EC 00017E7C 48 00 00 01 */ bl bStringHash__FPCc +/* 0000B0F0 00017E80 7C 64 1B 78 */ mr r4, r3 +/* 0000B0F4 00017E84 7F C3 F3 78 */ mr r3, r30 +/* 0000B0F8 00017E88 48 00 13 CD */ bl .L_0000C4C4 +/* 0000B0FC 00017E8C 80 1F 00 30 */ lwz r0, 0x30(r31) +/* 0000B100 00017E90 3C 80 00 00 */ lis r4, _IHandle__13ITransmission@ha +/* 0000B104 00017E94 81 7F 00 2C */ lwz r11, 0x2c(r31) +/* 0000B108 00017E98 38 84 00 00 */ addi r4, r4, _IHandle__13ITransmission@l +/* 0000B10C 00017E9C 90 0B 00 8C */ stw r0, 0x8c(r11) +/* 0000B110 00017EA0 81 3F 00 48 */ lwz r9, 0x48(r31) +/* 0000B114 00017EA4 80 69 00 00 */ lwz r3, 0x0(r9) +/* 0000B118 00017EA8 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000B11C 00017EAC 7C 6B 1B 79 */ mr. r11, r3 +/* 0000B120 00017EB0 38 00 00 01 */ li r0, 0x1 +/* 0000B124 00017EB4 40 82 B1 2C */ bne .L_00006250 +/* 0000B128 00017EB8 38 00 00 00 */ li r0, 0x0 +/* 0000B12C 00017EBC 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000B130 00017EC0 41 82 B1 54 */ beq .L_00006284 +/* 0000B134 00017EC4 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000B138 00017EC8 A8 69 00 40 */ lha r3, 0x40(r9) +/* 0000B13C 00017ECC 80 09 00 44 */ lwz r0, 0x44(r9) +/* 0000B140 00017ED0 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000B144 00017ED4 7C 08 03 A6 */ mtlr r0 +/* 0000B148 00017ED8 4E 80 00 21 */ blrl +/* 0000B14C 00017EDC 81 3F 00 2C */ lwz r9, 0x2c(r31) +/* 0000B150 00017EE0 D0 29 00 14 */ stfs f1, 0x14(r9) +/* 0000B154 00017EE4 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0000B158 00017EE8 7C 08 03 A6 */ mtlr r0 +/* 0000B15C 00017EEC BB A1 00 0C */ lmw r29, 0xc(r1) +/* 0000B160 00017EF0 38 21 00 18 */ addi r1, r1, 0x18 +/* 0000B164 00017EF4 4E 80 00 20 */ blr +.endfn AquireCar__16CDActionTrackCar + +# .text:0xB168 | size: 0x1B8 +.fn Update__16CDActionTrackCarf, global +/* 0000B168 00017EF8 94 21 FF 90 */ stwu r1, -0x70(r1) +.L_0000B16C: +/* 0000B16C 00017EFC 7C 08 02 A6 */ mflr r0 +/* 0000B170 00017F00 F3 E1 00 68 */ psq_st f31, 0x68(r1), 0, qr0 +/* 0000B174 00017F04 BF 81 00 58 */ stmw r28, 0x58(r1) +/* 0000B178 00017F08 90 01 00 74 */ stw r0, 0x74(r1) +.L_0000B17C: +/* 0000B17C 00017F0C 7C 7F 1B 78 */ mr r31, r3 +/* 0000B180 00017F10 FF E0 08 90 */ fmr f31, f1 +/* 0000B184 00017F14 83 DF 00 40 */ lwz r30, 0x40(r31) +/* 0000B188 00017F18 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 0000B18C 00017F1C 40 82 B1 C0 */ bne .L_0000634C +/* 0000B190 00017F20 80 9F 00 48 */ lwz r4, 0x48(r31) +/* 0000B194 00017F24 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0000B198 00017F28 41 82 B3 08 */ beq .L_000064A0 +/* 0000B19C 00017F2C 81 3F 00 1C */ lwz r9, 0x1c(r31) +.L_0000B1A0: +/* 0000B1A0 00017F30 38 1F 00 18 */ addi r0, r31, 0x18 +/* 0000B1A4 00017F34 A8 69 00 18 */ lha r3, 0x18(r9) +.L_0000B1A8: +/* 0000B1A8 00017F38 81 29 00 1C */ lwz r9, 0x1c(r9) +/* 0000B1AC 00017F3C 7C 60 1A 14 */ add r3, r0, r3 +/* 0000B1B0 00017F40 7D 28 03 A6 */ mtlr r9 +/* 0000B1B4 00017F44 4E 80 00 21 */ blrl +/* 0000B1B8 00017F48 93 DF 00 48 */ stw r30, 0x48(r31) +/* 0000B1BC 00017F4C 48 00 B3 08 */ b .L_000164C4 +/* 0000B1C0 00017F50 7F E3 FB 78 */ mr r3, r31 +/* 0000B1C4 00017F54 48 00 AF 45 */ bl .L_00016108 +/* 0000B1C8 00017F58 80 7F 00 34 */ lwz r3, 0x34(r31) +/* 0000B1CC 00017F5C 38 00 00 01 */ li r0, 0x1 +/* 0000B1D0 00017F60 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000B1D4 00017F64 40 82 B1 DC */ bne .L_000063B0 +/* 0000B1D8 00017F68 38 00 00 00 */ li r0, 0x0 +/* 0000B1DC 00017F6C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000B1E0 00017F70 41 82 B3 08 */ beq .L_000064E8 +/* 0000B1E4 00017F74 38 81 00 08 */ addi r4, r1, 0x8 +/* 0000B1E8 00017F78 48 00 00 01 */ bl PSMTX44Copy +/* 0000B1EC 00017F7C 80 7F 00 48 */ lwz r3, 0x48(r31) +/* 0000B1F0 00017F80 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000B1F4 00017F84 41 82 B2 F0 */ beq .L_000064E4 +/* 0000B1F8 00017F88 80 63 00 00 */ lwz r3, 0x0(r3) +/* 0000B1FC 00017F8C 3C 80 00 00 */ lis r4, _IHandle__14ICollisionBody@ha +/* 0000B200 00017F90 38 84 00 00 */ addi r4, r4, _IHandle__14ICollisionBody@l +/* 0000B204 00017F94 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000B208 00017F98 7C 7C 1B 79 */ mr. r28, r3 +/* 0000B20C 00017F9C 38 00 00 01 */ li r0, 0x1 +/* 0000B210 00017FA0 40 82 B2 18 */ bne .L_00006428 +/* 0000B214 00017FA4 38 00 00 00 */ li r0, 0x0 +/* 0000B218 00017FA8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000B21C 00017FAC 41 82 B2 F0 */ beq .L_0000650C +/* 0000B220 00017FB0 81 7F 00 48 */ lwz r11, 0x48(r31) +/* 0000B224 00017FB4 3B A1 00 48 */ addi r29, r1, 0x48 +/* 0000B228 00017FB8 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000B22C 00017FBC 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0000B230 00017FC0 A8 69 00 18 */ lha r3, 0x18(r9) +.L_0000B234: +/* 0000B234 00017FC4 7C 08 03 A6 */ mtlr r0 +/* 0000B238 00017FC8 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000B23C 00017FCC 4E 80 00 21 */ blrl +/* 0000B240 00017FD0 81 23 00 04 */ lwz r9, 0x4(r3) +/* 0000B244 00017FD4 A8 09 00 A8 */ lha r0, 0xa8(r9) +/* 0000B248 00017FD8 81 29 00 AC */ lwz r9, 0xac(r9) +/* 0000B24C 00017FDC 7C 63 02 14 */ add r3, r3, r0 +/* 0000B250 00017FE0 7D 28 03 A6 */ mtlr r9 +/* 0000B254 00017FE4 4E 80 00 21 */ blrl +/* 0000B258 00017FE8 81 3C 00 04 */ lwz r9, 0x4(r28) +/* 0000B25C 00017FEC 7C 7E 1B 78 */ mr r30, r3 +/* 0000B260 00017FF0 80 09 00 84 */ lwz r0, 0x84(r9) +/* 0000B264 00017FF4 A8 69 00 80 */ lha r3, 0x80(r9) +/* 0000B268 00017FF8 7C 08 03 A6 */ mtlr r0 +/* 0000B26C 00017FFC 7C 7C 1A 14 */ add r3, r28, r3 +/* 0000B270 00018000 4E 80 00 21 */ blrl +/* 0000B274 00018004 C1 A3 00 00 */ lfs f13, 0x0(r3) +/* 0000B278 00018008 7F A4 EB 78 */ mr r4, r29 +/* 0000B27C 0001800C 38 A0 00 00 */ li r5, 0x0 +/* 0000B280 00018010 D1 A1 00 48 */ stfs f13, 0x48(r1) +/* 0000B284 00018014 C0 03 00 04 */ lfs f0, 0x4(r3) +/* 0000B288 00018018 D0 01 00 4C */ stfs f0, 0x4c(r1) +/* 0000B28C 0001801C C1 A3 00 08 */ lfs f13, 0x8(r3) +/* 0000B290 00018020 D1 A1 00 50 */ stfs f13, 0x50(r1) +/* 0000B294 00018024 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000B298 00018028 80 09 01 4C */ lwz r0, 0x14c(r9) +/* 0000B29C 0001802C A8 69 01 48 */ lha r3, 0x148(r9) +/* 0000B2A0 00018030 7C 08 03 A6 */ mtlr r0 +/* 0000B2A4 00018034 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000B2A8 00018038 4E 80 00 21 */ blrl +/* 0000B2AC 0001803C 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000B2B0 00018040 A8 69 00 48 */ lha r3, 0x48(r9) +/* 0000B2B4 00018044 80 09 00 4C */ lwz r0, 0x4c(r9) +/* 0000B2B8 00018048 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000B2BC 0001804C 7C 08 03 A6 */ mtlr r0 +/* 0000B2C0 00018050 4E 80 00 21 */ blrl +/* 0000B2C4 00018054 7C 64 1B 78 */ mr r4, r3 +/* 0000B2C8 00018058 7F A3 EB 78 */ mr r3, r29 +/* 0000B2CC 0001805C 7C 65 1B 78 */ mr r5, r3 +.L_0000B2D0: +/* 0000B2D0 00018060 48 00 00 01 */ bl VU0_v3add__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 +/* 0000B2D4 00018064 C0 01 00 48 */ lfs f0, 0x48(r1) +/* 0000B2D8 00018068 C1 A1 00 50 */ lfs f13, 0x50(r1) +/* 0000B2DC 0001806C C1 81 00 4C */ lfs f12, 0x4c(r1) +/* 0000B2E0 00018070 FC 00 00 50 */ fneg f0, f0 +/* 0000B2E4 00018074 D1 A1 00 38 */ stfs f13, 0x38(r1) +/* 0000B2E8 00018078 D0 01 00 3C */ stfs f0, 0x3c(r1) +/* 0000B2EC 0001807C D1 81 00 40 */ stfs f12, 0x40(r1) +/* 0000B2F0 00018080 80 DF 00 3C */ lwz r6, 0x3c(r31) +/* 0000B2F4 00018084 FC 20 F8 90 */ fmr f1, f31 +/* 0000B2F8 00018088 80 7F 00 2C */ lwz r3, 0x2c(r31) +/* 0000B2FC 0001808C 38 81 00 08 */ addi r4, r1, 0x8 +/* 0000B300 00018090 80 BF 00 38 */ lwz r5, 0x38(r31) +/* 0000B304 00018094 48 00 17 65 */ bl .L_0000CA68 +/* 0000B308 00018098 80 01 00 74 */ lwz r0, 0x74(r1) +/* 0000B30C 0001809C 7C 08 03 A6 */ mtlr r0 +/* 0000B310 000180A0 BB 81 00 58 */ lmw r28, 0x58(r1) +/* 0000B314 000180A4 E3 E1 00 68 */ psq_l f31, 0x68(r1), 0, qr0 +/* 0000B318 000180A8 38 21 00 70 */ addi r1, r1, 0x70 +/* 0000B31C 000180AC 4E 80 00 20 */ blr +.endfn Update__16CDActionTrackCarf + +# .text:0xB320 | size: 0xA4 +.fn GetTrafficBasis__16CDActionTrackCarRQ25UMath7Matrix4RQ25UMath7Vector3, global +/* 0000B320 000180B0 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0000B324 000180B4 7C 08 02 A6 */ mflr r0 +/* 0000B328 000180B8 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 0000B32C 000180BC 90 01 00 1C */ stw r0, 0x1c(r1) +.L_0000B330: +/* 0000B330 000180C0 80 63 00 48 */ lwz r3, 0x48(r3) +/* 0000B334 000180C4 7C 9E 23 78 */ mr r30, r4 +/* 0000B338 000180C8 7C BD 2B 78 */ mr r29, r5 +/* 0000B33C 000180CC 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000B340 000180D0 41 82 B3 AC */ beq .L_000066EC +/* 0000B344 000180D4 80 63 00 00 */ lwz r3, 0x0(r3) +/* 0000B348 000180D8 3C 80 00 00 */ lis r4, _IHandle__5IBody@ha +/* 0000B34C 000180DC 38 84 00 00 */ addi r4, r4, _IHandle__5IBody@l +/* 0000B350 000180E0 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000B354 000180E4 7C 7F 1B 79 */ mr. r31, r3 +/* 0000B358 000180E8 38 00 00 01 */ li r0, 0x1 +/* 0000B35C 000180EC 40 82 B3 64 */ bne .L_000066C0 +/* 0000B360 000180F0 38 00 00 00 */ li r0, 0x0 +/* 0000B364 000180F4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000B368 000180F8 41 82 B3 AC */ beq .L_00006714 +/* 0000B36C 000180FC 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 0000B370 00018100 7F C4 F3 78 */ mr r4, r30 +/* 0000B374 00018104 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000B378 00018108 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000B37C 0001810C 7C 08 03 A6 */ mtlr r0 +/* 0000B380 00018110 7C 7F 1A 14 */ add r3, r31, r3 +/* 0000B384 00018114 4E 80 00 21 */ blrl +/* 0000B388 00018118 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 0000B38C 0001811C 7F A4 EB 78 */ mr r4, r29 +.L_0000B390: +/* 0000B390 00018120 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000B394 00018124 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0000B398 00018128 7C 7F 1A 14 */ add r3, r31, r3 +/* 0000B39C 0001812C 7C 08 03 A6 */ mtlr r0 +/* 0000B3A0 00018130 4E 80 00 21 */ blrl +/* 0000B3A4 00018134 38 60 00 01 */ li r3, 0x1 +/* 0000B3A8 00018138 48 00 B3 B0 */ b .L_00016758 +/* 0000B3AC 0001813C 38 60 00 00 */ li r3, 0x0 +/* 0000B3B0 00018140 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0000B3B4 00018144 7C 08 03 A6 */ mtlr r0 +/* 0000B3B8 00018148 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 0000B3BC 0001814C 38 21 00 18 */ addi r1, r1, 0x18 +/* 0000B3C0 00018150 4E 80 00 20 */ blr +.endfn GetTrafficBasis__16CDActionTrackCarRQ25UMath7Matrix4RQ25UMath7Vector3 + +# .text:0xB3C4 | size: 0x74 +.fn GetName__C16CDActionTrackCop, global +/* 0000B3C4 00018154 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0000B3C8 00018158 7C 08 02 A6 */ mflr r0 +.L_0000B3CC: +/* 0000B3CC 0001815C BF A1 00 0C */ stmw r29, 0xc(r1) +/* 0000B3D0 00018160 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0000B3D4 00018164 3F E0 00 00 */ lis r31, _.tmp_9.10997@ha +/* 0000B3D8 00018168 80 1F 00 00 */ lwz r0, _.tmp_9.10997@l(r31) +/* 0000B3DC 0001816C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000B3E0 00018170 40 82 B4 1C */ bne .L_000067FC +/* 0000B3E4 00018174 3F C0 00 00 */ lis r30, .rodata+0x8B8@ha +/* 0000B3E8 00018178 3F A0 00 00 */ lis r29, name.10996@ha +/* 0000B3EC 0001817C 3B DE 08 B8 */ addi r30, r30, .rodata+0x8B8@l +/* 0000B3F0 00018180 3B BD 00 00 */ addi r29, r29, name.10996@l +/* 0000B3F4 00018184 7F C3 F3 78 */ mr r3, r30 +/* 0000B3F8 00018188 48 00 00 01 */ bl StringHash64__6AttribPCc +/* 0000B3FC 0001818C 90 7D 00 00 */ stw r3, 0x0(r29) +/* 0000B400 00018190 90 9D 00 04 */ stw r4, 0x4(r29) +/* 0000B404 00018194 7F C3 F3 78 */ mr r3, r30 +/* 0000B408 00018198 48 00 00 01 */ bl StringHash32__6AttribPCc +/* 0000B40C 0001819C 38 00 00 01 */ li r0, 0x1 +/* 0000B410 000181A0 93 DD 00 0C */ stw r30, 0xc(r29) +/* 0000B414 000181A4 90 1F 00 00 */ stw r0, _.tmp_9.10997@l(r31) +/* 0000B418 000181A8 90 7D 00 08 */ stw r3, 0x8(r29) +.L_0000B41C: +/* 0000B41C 000181AC 3C 60 00 00 */ lis r3, name.10996@ha +.L_0000B420: +/* 0000B420 000181B0 38 63 00 00 */ addi r3, r3, name.10996@l +/* 0000B424 000181B4 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0000B428 000181B8 7C 08 03 A6 */ mtlr r0 +/* 0000B42C 000181BC BB A1 00 0C */ lmw r29, 0xc(r1) +/* 0000B430 000181C0 38 21 00 18 */ addi r1, r1, 0x18 +/* 0000B434 000181C4 4E 80 00 20 */ blr +.endfn GetName__C16CDActionTrackCop + +# .text:0xB438 | size: 0x2C +.fn GetNext__C16CDActionTrackCop, global +/* 0000B438 000181C8 3D 00 00 00 */ lis r8, .rodata@ha +/* 0000B43C 000181CC 39 20 00 00 */ li r9, 0x0 +/* 0000B440 000181D0 7C 6B 1B 78 */ mr r11, r3 +/* 0000B444 000181D4 39 08 00 00 */ addi r8, r8, .rodata@l +/* 0000B448 000181D8 39 40 00 00 */ li r10, 0x0 +/* 0000B44C 000181DC 38 00 00 00 */ li r0, 0x0 +/* 0000B450 000181E0 91 2B 00 00 */ stw r9, 0x0(r11) +/* 0000B454 000181E4 91 4B 00 04 */ stw r10, 0x4(r11) +/* 0000B458 000181E8 90 0B 00 08 */ stw r0, 0x8(r11) +/* 0000B45C 000181EC 91 0B 00 0C */ stw r8, 0xc(r11) +.L_0000B460: +/* 0000B460 000181F0 4E 80 00 20 */ blr +.endfn GetNext__C16CDActionTrackCop + +# .text:0xB464 | size: 0x24 +.fn Attach__16CDActionTrackCopPQ33UTL3COM8IUnknown, global +/* 0000B464 000181F4 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0000B468 000181F8 7C 08 02 A6 */ mflr r0 +/* 0000B46C 000181FC 90 01 00 0C */ stw r0, 0xc(r1) +/* 0000B470 00018200 80 63 00 44 */ lwz r3, 0x44(r3) +/* 0000B474 00018204 48 00 00 01 */ bl Attach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +/* 0000B478 00018208 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0000B47C 0001820C 7C 08 03 A6 */ mtlr r0 +.L_0000B480: +/* 0000B480 00018210 38 21 00 08 */ addi r1, r1, 0x8 +/* 0000B484 00018214 4E 80 00 20 */ blr +.endfn Attach__16CDActionTrackCopPQ33UTL3COM8IUnknown + +# .text:0xB488 | size: 0x24 +.fn Detach__16CDActionTrackCopPQ33UTL3COM8IUnknown, global +/* 0000B488 00018218 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0000B48C 0001821C 7C 08 02 A6 */ mflr r0 +/* 0000B490 00018220 90 01 00 0C */ stw r0, 0xc(r1) +/* 0000B494 00018224 80 63 00 44 */ lwz r3, 0x44(r3) +/* 0000B498 00018228 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +/* 0000B49C 0001822C 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0000B4A0 00018230 7C 08 03 A6 */ mtlr r0 +/* 0000B4A4 00018234 38 21 00 08 */ addi r1, r1, 0x8 +/* 0000B4A8 00018238 4E 80 00 20 */ blr +.endfn Detach__16CDActionTrackCopPQ33UTL3COM8IUnknown + +# .text:0xB4AC | size: 0x24 +.fn IsAttached__C16CDActionTrackCopPCQ33UTL3COM8IUnknown, global +/* 0000B4AC 0001823C 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0000B4B0 00018240 7C 08 02 A6 */ mflr r0 +/* 0000B4B4 00018244 90 01 00 0C */ stw r0, 0xc(r1) +/* 0000B4B8 00018248 80 63 00 44 */ lwz r3, 0x44(r3) +/* 0000B4BC 0001824C 48 00 00 01 */ bl IsAttached__CQ23Sim11AttachmentsPCQ33UTL3COM8IUnknown +/* 0000B4C0 00018250 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0000B4C4 00018254 7C 08 03 A6 */ mtlr r0 +/* 0000B4C8 00018258 38 21 00 08 */ addi r1, r1, 0x8 +/* 0000B4CC 0001825C 4E 80 00 20 */ blr +.endfn IsAttached__C16CDActionTrackCopPCQ33UTL3COM8IUnknown + +# .text:0xB4D0 | size: 0x8 +.fn GetAttachments__C16CDActionTrackCop, global +/* 0000B4D0 00018260 80 63 00 44 */ lwz r3, 0x44(r3) +/* 0000B4D4 00018264 4E 80 00 20 */ blr +.endfn GetAttachments__C16CDActionTrackCop + +# .text:0xB4D8 | size: 0x11C +.fn Construct__16CDActionTrackCopPQ28CameraAI8Director, global +/* 0000B4D8 00018268 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 0000B4DC 0001826C 7C 08 02 A6 */ mflr r0 +/* 0000B4E0 00018270 BF 61 00 0C */ stmw r27, 0xc(r1) +/* 0000B4E4 00018274 90 01 00 24 */ stw r0, 0x24(r1) +/* 0000B4E8 00018278 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@ha +/* 0000B4EC 0001827C 7C 7B 1B 78 */ mr r27, r3 +/* 0000B4F0 00018280 39 29 00 00 */ addi r9, r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@l +/* 0000B4F4 00018284 3B 80 00 00 */ li r28, 0x0 +/* 0000B4F8 00018288 83 E9 00 30 */ lwz r31, 0x30(r9) +/* 0000B4FC 0001828C 7D 3D 4B 78 */ mr r29, r9 +/* 0000B500 00018290 80 1D 00 38 */ lwz r0, 0x38(r29) +/* 0000B504 00018294 81 3D 00 30 */ lwz r9, 0x30(r29) +/* 0000B508 00018298 54 00 10 3A */ slwi r0, r0, 2 +/* 0000B50C 0001829C 7D 29 02 14 */ add r9, r9, r0 +/* 0000B510 000182A0 7C 1F 48 00 */ cmpw r31, r9 +/* 0000B514 000182A4 41 82 B5 4C */ beq .L_00006A60 +/* 0000B518 000182A8 83 DF 00 00 */ lwz r30, 0x0(r31) +/* 0000B51C 000182AC 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000B520 000182B0 80 09 00 64 */ lwz r0, 0x64(r9) +/* 0000B524 000182B4 A8 69 00 60 */ lha r3, 0x60(r9) +/* 0000B528 000182B8 7C 08 03 A6 */ mtlr r0 +/* 0000B52C 000182BC 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000B530 000182C0 4E 80 00 21 */ blrl +/* 0000B534 000182C4 80 1B 00 04 */ lwz r0, 0x4(r27) +/* 0000B538 000182C8 7C 03 00 00 */ cmpw r3, r0 +/* 0000B53C 000182CC 41 82 B5 48 */ beq .L_00006A84 +/* 0000B540 000182D0 3B FF 00 04 */ addi r31, r31, 0x4 +/* 0000B544 000182D4 48 00 B5 00 */ b .L_00016A44 +/* 0000B548 000182D8 7F DC F3 78 */ mr r28, r30 +/* 0000B54C 000182DC 2C 1C 00 00 */ cmpwi r28, 0x0 +/* 0000B550 000182E0 41 82 B5 DC */ beq TotaledStart__Q28CameraAI8Director +/* 0000B554 000182E4 81 3C 00 04 */ lwz r9, 0x4(r28) +/* 0000B558 000182E8 A8 69 00 28 */ lha r3, 0x28(r9) +.L_0000B55C: +/* 0000B55C 000182EC 80 09 00 2C */ lwz r0, 0x2c(r9) +/* 0000B560 000182F0 7C 7C 1A 14 */ add r3, r28, r3 +.L_0000B564: +/* 0000B564 000182F4 7C 08 03 A6 */ mtlr r0 +/* 0000B568 000182F8 4E 80 00 21 */ blrl +/* 0000B56C 000182FC 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000B570 00018300 41 82 B5 DC */ beq .L_00006B4C +/* 0000B574 00018304 81 3C 00 04 */ lwz r9, 0x4(r28) +/* 0000B578 00018308 A8 69 00 10 */ lha r3, 0x10(r9) +.L_0000B57C: +/* 0000B57C 0001830C 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000B580 00018310 7C 7C 1A 14 */ add r3, r28, r3 +/* 0000B584 00018314 7C 08 03 A6 */ mtlr r0 +/* 0000B588 00018318 4E 80 00 21 */ blrl +/* 0000B58C 0001831C 7C 6B 1B 79 */ mr. r11, r3 +/* 0000B590 00018320 41 82 B5 DC */ beq .L_00006B6C +/* 0000B594 00018324 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000B598 00018328 A8 69 00 E8 */ lha r3, 0xe8(r9) +/* 0000B59C 0001832C 80 09 00 EC */ lwz r0, 0xec(r9) +/* 0000B5A0 00018330 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000B5A4 00018334 7C 08 03 A6 */ mtlr r0 +/* 0000B5A8 00018338 4E 80 00 21 */ blrl +/* 0000B5AC 0001833C 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000B5B0 00018340 38 60 00 00 */ li r3, 0x0 +/* 0000B5B4 00018344 41 82 B5 E0 */ beq .L_00006B94 +/* 0000B5B8 00018348 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0000B5BC 0001834C 38 80 00 50 */ li r4, 0x50 +/* 0000B5C0 00018350 38 A0 00 00 */ li r5, 0x0 +/* 0000B5C4 00018354 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0000B5C8 00018358 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 0000B5CC 0001835C 7F 64 DB 78 */ mr r4, r27 +/* 0000B5D0 00018360 7F 85 E3 78 */ mr r5, r28 +/* 0000B5D4 00018364 48 00 B5 F5 */ bl .L_00016BC8 +/* 0000B5D8 00018368 48 00 B5 E0 */ b .L_00016BB8 +/* 0000B5DC 0001836C 38 60 00 00 */ li r3, 0x0 +/* 0000B5E0 00018370 80 01 00 24 */ lwz r0, 0x24(r1) +/* 0000B5E4 00018374 7C 08 03 A6 */ mtlr r0 +/* 0000B5E8 00018378 BB 61 00 0C */ lmw r27, 0xc(r1) +/* 0000B5EC 0001837C 38 21 00 20 */ addi r1, r1, 0x20 +/* 0000B5F0 00018380 4E 80 00 20 */ blr +.endfn Construct__16CDActionTrackCopPQ28CameraAI8Director + +# .text:0xB5F4 | size: 0x434 +.fn __16CDActionTrackCopPQ28CameraAI8DirectorP7IPlayer, global +/* 0000B5F4 00018384 94 21 FF 68 */ stwu r1, -0x98(r1) +/* 0000B5F8 00018388 7C 08 02 A6 */ mflr r0 +.L_0000B5FC: +/* 0000B5FC 0001838C 7D 80 00 26 */ mfcr r12 +/* 0000B600 00018390 BE 81 00 68 */ stmw r20, 0x68(r1) +.L_0000B604: +/* 0000B604 00018394 90 01 00 9C */ stw r0, 0x9c(r1) +/* 0000B608 00018398 91 81 00 64 */ stw r12, 0x64(r1) +/* 0000B60C 0001839C 7C 7F 1B 78 */ mr r31, r3 +/* 0000B610 000183A0 7C 97 23 78 */ mr r23, r4 +/* 0000B614 000183A4 38 80 00 00 */ li r4, 0x0 +/* 0000B618 000183A8 7C B4 2B 78 */ mr r20, r5 +/* 0000B61C 000183AC 3A DF 00 20 */ addi r22, r31, 0x20 +/* 0000B620 000183B0 48 00 00 01 */ bl __Q43UTL3COM6Object6_IListUi +/* 0000B624 000183B4 3F 20 00 00 */ lis r25, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha +/* 0000B628 000183B8 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha +/* 0000B62C 000183BC 3D 60 00 00 */ lis r11, _vt.Q33UTL3COM8IUnknown@ha +/* 0000B630 000183C0 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l +.L_0000B634: +/* 0000B634 000183C4 39 6B 00 00 */ addi r11, r11, _vt.Q33UTL3COM8IUnknown@l +/* 0000B638 000183C8 3C 80 00 00 */ lis r4, _IHandle__11IAttachable@ha +.L_0000B63C: +/* 0000B63C 000183CC 93 FF 00 18 */ stw r31, 0x18(r31) +.L_0000B640: +/* 0000B640 000183D0 91 3F 00 14 */ stw r9, 0x14(r31) +/* 0000B644 000183D4 38 84 00 00 */ addi r4, r4, _IHandle__11IAttachable@l +/* 0000B648 000183D8 91 7F 00 1C */ stw r11, 0x1c(r31) +/* 0000B64C 000183DC 7F E3 FB 78 */ mr r3, r31 +/* 0000B650 000183E0 38 BF 00 18 */ addi r5, r31, 0x18 +/* 0000B654 000183E4 3B B9 00 00 */ addi r29, r25, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l +/* 0000B658 000183E8 48 00 00 01 */ bl Add__Q43UTL3COM6Object6_IListPvPQ33UTL3COM8IUnknown +.L_0000B65C: +/* 0000B65C 000183EC 3D 20 00 00 */ lis r9, _vt.11IAttachable@ha +/* 0000B660 000183F0 92 C1 00 58 */ stw r22, 0x58(r1) +/* 0000B664 000183F4 39 29 00 00 */ addi r9, r9, _vt.11IAttachable@l +/* 0000B668 000183F8 3A A1 00 58 */ addi r21, r1, 0x58 +/* 0000B66C 000183FC 91 3F 00 1C */ stw r9, 0x1c(r31) +/* 0000B670 00018400 3B 41 00 08 */ addi r26, r1, 0x8 +/* 0000B674 00018404 80 9D 00 08 */ lwz r4, 0x8(r29) +/* 0000B678 00018408 80 1D 00 04 */ lwz r0, 0x4(r29) +/* 0000B67C 0001840C 7C 04 00 40 */ cmplw r4, r0 +/* 0000B680 00018410 41 80 B7 60 */ blt .L_00006DE0 +/* 0000B684 00018414 81 3D 00 0C */ lwz r9, 0xc(r29) +/* 0000B688 00018418 38 84 00 01 */ addi r4, r4, 0x1 +/* 0000B68C 0001841C 80 09 00 24 */ lwz r0, 0x24(r9) +/* 0000B690 00018420 A8 69 00 20 */ lha r3, 0x20(r9) +.L_0000B694: +/* 0000B694 00018424 7C 08 03 A6 */ mtlr r0 +/* 0000B698 00018428 7C 63 EA 14 */ add r3, r3, r29 +.L_0000B69C: +/* 0000B69C 0001842C 4E 80 00 21 */ blrl +/* 0000B6A0 00018430 80 1D 00 04 */ lwz r0, 0x4(r29) +/* 0000B6A4 00018434 7C 7E 1B 78 */ mr r30, r3 +/* 0000B6A8 00018438 7C 1E 00 40 */ cmplw r30, r0 +/* 0000B6AC 0001843C 40 81 B7 60 */ ble .L_00006E0C +/* 0000B6B0 00018440 81 3D 00 0C */ lwz r9, 0xc(r29) +/* 0000B6B4 00018444 7F C4 F3 78 */ mr r4, r30 +/* 0000B6B8 00018448 80 09 00 34 */ lwz r0, 0x34(r9) +/* 0000B6BC 0001844C A8 69 00 30 */ lha r3, 0x30(r9) +/* 0000B6C0 00018450 7C 08 03 A6 */ mtlr r0 +/* 0000B6C4 00018454 7C 63 EA 14 */ add r3, r3, r29 +/* 0000B6C8 00018458 4E 80 00 21 */ blrl +.L_0000B6CC: +/* 0000B6CC 0001845C 81 3D 00 0C */ lwz r9, 0xc(r29) +/* 0000B6D0 00018460 7F C4 F3 78 */ mr r4, r30 +/* 0000B6D4 00018464 38 A0 00 10 */ li r5, 0x10 +/* 0000B6D8 00018468 83 99 00 00 */ lwz r28, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r25) +/* 0000B6DC 0001846C A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000B6E0 00018470 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000B6E4 00018474 7C 63 EA 14 */ add r3, r3, r29 +/* 0000B6E8 00018478 83 7D 00 08 */ lwz r27, 0x8(r29) +.L_0000B6EC: +/* 0000B6EC 0001847C 7C 08 03 A6 */ mtlr r0 +/* 0000B6F0 00018480 83 1D 00 04 */ lwz r24, 0x4(r29) +/* 0000B6F4 00018484 4E 80 00 21 */ blrl +/* 0000B6F8 00018488 93 DD 00 04 */ stw r30, 0x4(r29) +/* 0000B6FC 0001848C 7C 1C 18 00 */ cmpw r28, r3 +/* 0000B700 00018490 90 79 00 00 */ stw r3, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r25) +/* 0000B704 00018494 41 82 B7 60 */ beq .L_00006E64 +/* 0000B708 00018498 38 00 00 00 */ li r0, 0x0 +/* 0000B70C 0001849C 3B C0 00 00 */ li r30, 0x0 +.L_0000B710: +/* 0000B710 000184A0 90 1D 00 08 */ stw r0, 0x8(r29) +/* 0000B714 000184A4 7C 1E D8 00 */ cmpw r30, r27 +/* 0000B718 000184A8 2E 1C 00 00 */ cmpwi cr4, r28, 0x0 +/* 0000B71C 000184AC 40 80 B7 3C */ bge FindDirector__FUi +/* 0000B720 000184B0 57 C4 10 3A */ slwi r4, r30, 2 +/* 0000B724 000184B4 7F A3 EB 78 */ mr r3, r29 +/* 0000B728 000184B8 7C 9C 22 14 */ add r4, r28, r4 +/* 0000B72C 000184BC 3B DE 00 01 */ addi r30, r30, 0x1 +/* 0000B730 000184C0 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZP14ITrafficCenteri16RCP14ITrafficCenter +/* 0000B734 000184C4 7C 1E D8 00 */ cmpw r30, r27 +/* 0000B738 000184C8 41 80 B7 20 */ blt FindDirector__FUi +/* 0000B73C 000184CC 41 92 B7 60 */ beq cr4, .L_00006E9C +/* 0000B740 000184D0 81 3D 00 0C */ lwz r9, 0xc(r29) +/* 0000B744 000184D4 7F 84 E3 78 */ mr r4, r28 +/* 0000B748 000184D8 7F 05 C3 78 */ mr r5, r24 +/* 0000B74C 000184DC A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000B750 000184E0 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0000B754 000184E4 7C 7D 1A 14 */ add r3, r29, r3 +/* 0000B758 000184E8 7C 08 03 A6 */ mtlr r0 +/* 0000B75C 000184EC 4E 80 00 21 */ blrl +/* 0000B760 000184F0 81 3D 00 08 */ lwz r9, 0x8(r29) +/* 0000B764 000184F4 81 7D 00 00 */ lwz r11, 0x0(r29) +/* 0000B768 000184F8 55 29 10 3A */ slwi r9, r9, 2 +/* 0000B76C 000184FC 7C 09 5A 14 */ add r0, r9, r11 +/* 0000B770 00018500 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000B774 00018504 41 82 B7 80 */ beq .L_00006EF4 +.L_0000B778: +/* 0000B778 00018508 80 15 00 00 */ lwz r0, 0x0(r21) +/* 0000B77C 0001850C 7C 09 59 2E */ stwx r0, r9, r11 +/* 0000B780 00018510 81 3D 00 08 */ lwz r9, 0x8(r29) +.L_0000B784: +/* 0000B784 00018514 3D 60 00 00 */ lis r11, _vt.14ITrafficCenter@ha +/* 0000B788 00018518 39 6B 00 00 */ addi r11, r11, _vt.14ITrafficCenter@l +/* 0000B78C 0001851C 3D 40 00 00 */ lis r10, _vt.16CDActionTrackCop.11IAttachable@ha +/* 0000B790 00018520 39 29 00 01 */ addi r9, r9, 0x1 +/* 0000B794 00018524 3D 00 00 00 */ lis r8, _vt.16CDActionTrackCop.14ITrafficCenter@ha +/* 0000B798 00018528 91 3D 00 08 */ stw r9, 0x8(r29) +/* 0000B79C 0001852C 3C E0 00 00 */ lis r7, _vt.16CDActionTrackCop@ha +/* 0000B7A0 00018530 91 76 00 04 */ stw r11, 0x4(r22) +/* 0000B7A4 00018534 39 4A 00 00 */ addi r10, r10, _vt.16CDActionTrackCop.11IAttachable@l +/* 0000B7A8 00018538 39 08 00 00 */ addi r8, r8, _vt.16CDActionTrackCop.14ITrafficCenter@l +/* 0000B7AC 0001853C 38 E7 00 00 */ addi r7, r7, _vt.16CDActionTrackCop@l +/* 0000B7B0 00018540 91 5F 00 1C */ stw r10, 0x1c(r31) +/* 0000B7B4 00018544 38 80 00 00 */ li r4, 0x0 +/* 0000B7B8 00018548 91 1F 00 24 */ stw r8, 0x24(r31) +/* 0000B7BC 0001854C 38 7F 00 30 */ addi r3, r31, 0x30 +/* 0000B7C0 00018550 90 FF 00 14 */ stw r7, 0x14(r31) +/* 0000B7C4 00018554 3B 80 00 00 */ li r28, 0x0 +/* 0000B7C8 00018558 48 00 00 01 */ bl __Q29WorldConn9ReferenceUi +/* 0000B7CC 0001855C 3B 7F 00 18 */ addi r27, r31, 0x18 +/* 0000B7D0 00018560 92 9F 00 40 */ stw r20, 0x40(r31) +/* 0000B7D4 00018564 3F A0 00 00 */ lis r29, gFastMem@ha +/* 0000B7D8 00018568 93 9F 00 48 */ stw r28, 0x48(r31) +/* 0000B7DC 0001856C 3B BD 00 00 */ addi r29, r29, gFastMem@l +/* 0000B7E0 00018570 38 80 00 10 */ li r4, 0x10 +/* 0000B7E4 00018574 38 A0 00 00 */ li r5, 0x0 +/* 0000B7E8 00018578 80 17 00 04 */ lwz r0, 0x4(r23) +/* 0000B7EC 0001857C 7F A3 EB 78 */ mr r3, r29 +/* 0000B7F0 00018580 3B 20 00 01 */ li r25, 0x1 +/* 0000B7F4 00018584 90 1F 00 4C */ stw r0, 0x4c(r31) +/* 0000B7F8 00018588 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 0000B7FC 0001858C 7C 7E 1B 78 */ mr r30, r3 +/* 0000B800 00018590 3D 20 00 00 */ lis r9, _vt.Q23Sim11Attachments@ha +/* 0000B804 00018594 39 29 00 00 */ addi r9, r9, _vt.Q23Sim11Attachments@l +/* 0000B808 00018598 93 9E 00 04 */ stw r28, 0x4(r30) +/* 0000B80C 0001859C 38 A0 00 00 */ li r5, 0x0 +/* 0000B810 000185A0 91 3E 00 0C */ stw r9, 0xc(r30) +/* 0000B814 000185A4 38 80 00 0C */ li r4, 0xc +/* 0000B818 000185A8 7F A3 EB 78 */ mr r3, r29 +/* 0000B81C 000185AC 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 0000B820 000185B0 7C 69 1B 78 */ mr r9, r3 +/* 0000B824 000185B4 91 29 00 00 */ stw r9, 0x0(r9) +/* 0000B828 000185B8 7F C3 F3 78 */ mr r3, r30 +/* 0000B82C 000185BC 91 29 00 04 */ stw r9, 0x4(r9) +/* 0000B830 000185C0 91 3E 00 04 */ stw r9, 0x4(r30) +/* 0000B834 000185C4 93 7E 00 08 */ stw r27, 0x8(r30) +/* 0000B838 000185C8 93 DF 00 44 */ stw r30, 0x44(r31) +/* 0000B83C 000185CC 80 9F 00 40 */ lwz r4, 0x40(r31) +/* 0000B840 000185D0 48 00 00 01 */ bl Attach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +/* 0000B844 000185D4 7E E3 BB 78 */ mr r3, r23 +/* 0000B848 000185D8 48 00 60 85 */ bl .L_000118CC +/* 0000B84C 000185DC 7C 6B 1B 79 */ mr. r11, r3 +/* 0000B850 000185E0 41 82 B8 70 */ beq .L_000070C0 +/* 0000B854 000185E4 81 2B 00 08 */ lwz r9, 0x8(r11) +/* 0000B858 000185E8 A8 69 00 58 */ lha r3, 0x58(r9) +/* 0000B85C 000185EC 80 09 00 5C */ lwz r0, 0x5c(r9) +/* 0000B860 000185F0 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000B864 000185F4 7C 08 03 A6 */ mtlr r0 +/* 0000B868 000185F8 4E 80 00 21 */ blrl +/* 0000B86C 000185FC 7C 79 1B 78 */ mr r25, r3 +/* 0000B870 00018600 38 60 01 24 */ li r3, 0x124 +/* 0000B874 00018604 48 00 00 01 */ bl __builtin_vec_new +/* 0000B878 00018608 38 80 00 00 */ li r4, 0x0 +/* 0000B87C 0001860C 48 00 10 51 */ bl .L_0000C8CC +/* 0000B880 00018610 90 7F 00 2C */ stw r3, 0x2c(r31) +/* 0000B884 00018614 7F E3 FB 78 */ mr r3, r31 +/* 0000B888 00018618 48 00 BD A1 */ bl .L_00017628 +/* 0000B88C 0001861C 80 7F 00 34 */ lwz r3, 0x34(r31) +/* 0000B890 00018620 38 00 00 01 */ li r0, 0x1 +/* 0000B894 00018624 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000B898 00018628 40 82 B8 A0 */ bne .L_00007138 +.L_0000B89C: +/* 0000B89C 0001862C 38 00 00 00 */ li r0, 0x0 +/* 0000B8A0 00018630 2C 00 00 00 */ cmpwi r0, 0x0 +.L_0000B8A4: +/* 0000B8A4 00018634 41 82 B9 CC */ beq .L_00007270 +/* 0000B8A8 00018638 38 81 00 18 */ addi r4, r1, 0x18 +/* 0000B8AC 0001863C 48 00 00 01 */ bl PSMTX44Copy +/* 0000B8B0 00018640 80 7F 00 48 */ lwz r3, 0x48(r31) +/* 0000B8B4 00018644 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000B8B8 00018648 41 82 B9 B0 */ beq .L_00007268 +/* 0000B8BC 0001864C 80 63 00 00 */ lwz r3, 0x0(r3) +/* 0000B8C0 00018650 3C 80 00 00 */ lis r4, _IHandle__14ICollisionBody@ha +/* 0000B8C4 00018654 38 84 00 00 */ addi r4, r4, _IHandle__14ICollisionBody@l +/* 0000B8C8 00018658 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000B8CC 0001865C 7C 7D 1B 79 */ mr. r29, r3 +/* 0000B8D0 00018660 38 00 00 01 */ li r0, 0x1 +/* 0000B8D4 00018664 40 82 B8 DC */ bne .L_000071B0 +/* 0000B8D8 00018668 38 00 00 00 */ li r0, 0x0 +.L_0000B8DC: +/* 0000B8DC 0001866C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000B8E0 00018670 41 82 B9 B0 */ beq .L_00007290 +/* 0000B8E4 00018674 81 7F 00 48 */ lwz r11, 0x48(r31) +/* 0000B8E8 00018678 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000B8EC 0001867C 80 09 00 1C */ lwz r0, 0x1c(r9) +.L_0000B8F0: +/* 0000B8F0 00018680 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000B8F4 00018684 7C 08 03 A6 */ mtlr r0 +/* 0000B8F8 00018688 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000B8FC 0001868C 4E 80 00 21 */ blrl +.L_0000B900: +/* 0000B900 00018690 81 23 00 04 */ lwz r9, 0x4(r3) +/* 0000B904 00018694 A8 09 00 A8 */ lha r0, 0xa8(r9) +/* 0000B908 00018698 81 29 00 AC */ lwz r9, 0xac(r9) +/* 0000B90C 0001869C 7C 63 02 14 */ add r3, r3, r0 +/* 0000B910 000186A0 7D 28 03 A6 */ mtlr r9 +/* 0000B914 000186A4 4E 80 00 21 */ blrl +/* 0000B918 000186A8 81 3D 00 04 */ lwz r9, 0x4(r29) +.L_0000B91C: +/* 0000B91C 000186AC 7C 7E 1B 78 */ mr r30, r3 +/* 0000B920 000186B0 80 09 00 84 */ lwz r0, 0x84(r9) +/* 0000B924 000186B4 A8 69 00 80 */ lha r3, 0x80(r9) +/* 0000B928 000186B8 7C 08 03 A6 */ mtlr r0 +/* 0000B92C 000186BC 7C 7D 1A 14 */ add r3, r29, r3 +/* 0000B930 000186C0 4E 80 00 21 */ blrl +/* 0000B934 000186C4 C1 A3 00 00 */ lfs f13, 0x0(r3) +/* 0000B938 000186C8 7F 44 D3 78 */ mr r4, r26 +/* 0000B93C 000186CC 38 A0 00 00 */ li r5, 0x0 +/* 0000B940 000186D0 D1 A1 00 08 */ stfs f13, 0x8(r1) +/* 0000B944 000186D4 C0 03 00 04 */ lfs f0, 0x4(r3) +/* 0000B948 000186D8 D0 01 00 0C */ stfs f0, 0xc(r1) +/* 0000B94C 000186DC C1 A3 00 08 */ lfs f13, 0x8(r3) +/* 0000B950 000186E0 D1 BA 00 08 */ stfs f13, 0x8(r26) +/* 0000B954 000186E4 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000B958 000186E8 80 09 01 4C */ lwz r0, 0x14c(r9) +/* 0000B95C 000186EC A8 69 01 48 */ lha r3, 0x148(r9) +/* 0000B960 000186F0 7C 08 03 A6 */ mtlr r0 +/* 0000B964 000186F4 7C 7E 1A 14 */ add r3, r30, r3 +.L_0000B968: +/* 0000B968 000186F8 4E 80 00 21 */ blrl +/* 0000B96C 000186FC 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000B970 00018700 A8 69 00 48 */ lha r3, 0x48(r9) +.L_0000B974: +/* 0000B974 00018704 80 09 00 4C */ lwz r0, 0x4c(r9) +/* 0000B978 00018708 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000B97C 0001870C 7C 08 03 A6 */ mtlr r0 +/* 0000B980 00018710 4E 80 00 21 */ blrl +/* 0000B984 00018714 7C 64 1B 78 */ mr r4, r3 +/* 0000B988 00018718 7F 45 D3 78 */ mr r5, r26 +/* 0000B98C 0001871C 7F 43 D3 78 */ mr r3, r26 +/* 0000B990 00018720 48 00 00 01 */ bl VU0_v3add__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 +/* 0000B994 00018724 C0 01 00 08 */ lfs f0, 0x8(r1) +/* 0000B998 00018728 C1 BA 00 08 */ lfs f13, 0x8(r26) +/* 0000B99C 0001872C C1 81 00 0C */ lfs f12, 0xc(r1) +/* 0000B9A0 00018730 FC 00 00 50 */ fneg f0, f0 +/* 0000B9A4 00018734 D1 A1 00 48 */ stfs f13, 0x48(r1) +/* 0000B9A8 00018738 D0 01 00 4C */ stfs f0, 0x4c(r1) +.L_0000B9AC: +/* 0000B9AC 0001873C D1 81 00 50 */ stfs f12, 0x50(r1) +/* 0000B9B0 00018740 3D 20 00 00 */ lis r9, .rodata+0x8C4@ha +/* 0000B9B4 00018744 80 7F 00 2C */ lwz r3, 0x2c(r31) +/* 0000B9B8 00018748 C0 29 08 C4 */ lfs f1, .rodata+0x8C4@l(r9) +/* 0000B9BC 0001874C 38 81 00 18 */ addi r4, r1, 0x18 +/* 0000B9C0 00018750 80 BF 00 38 */ lwz r5, 0x38(r31) +/* 0000B9C4 00018754 80 DF 00 3C */ lwz r6, 0x3c(r31) +/* 0000B9C8 00018758 48 00 17 65 */ bl .L_0000D12C +/* 0000B9CC 0001875C 38 60 02 50 */ li r3, 0x250 +/* 0000B9D0 00018760 48 00 00 01 */ bl __builtin_vec_new +/* 0000B9D4 00018764 80 97 00 04 */ lwz r4, 0x4(r23) +/* 0000B9D8 00018768 38 C0 00 00 */ li r6, 0x0 +/* 0000B9DC 0001876C 80 BF 00 2C */ lwz r5, 0x2c(r31) +.L_0000B9E0: +/* 0000B9E0 00018770 48 00 53 8D */ bl .L_00010D6C +/* 0000B9E4 00018774 90 7F 00 28 */ stw r3, 0x28(r31) +/* 0000B9E8 00018778 81 23 00 08 */ lwz r9, 0x8(r3) +/* 0000B9EC 0001877C A8 09 00 70 */ lha r0, 0x70(r9) +/* 0000B9F0 00018780 81 29 00 74 */ lwz r9, 0x74(r9) +/* 0000B9F4 00018784 7C 63 02 14 */ add r3, r3, r0 +/* 0000B9F8 00018788 7D 28 03 A6 */ mtlr r9 +/* 0000B9FC 0001878C 4E 80 00 21 */ blrl +/* 0000BA00 00018790 81 3F 00 28 */ lwz r9, 0x28(r31) +.L_0000BA04: +/* 0000BA04 00018794 7F E3 FB 78 */ mr r3, r31 +.L_0000BA08: +/* 0000BA08 00018798 93 29 02 4C */ stw r25, 0x24c(r9) +/* 0000BA0C 0001879C 80 01 00 9C */ lwz r0, 0x9c(r1) +/* 0000BA10 000187A0 81 81 00 64 */ lwz r12, 0x64(r1) +/* 0000BA14 000187A4 7C 08 03 A6 */ mtlr r0 +/* 0000BA18 000187A8 BA 81 00 68 */ lmw r20, 0x68(r1) +/* 0000BA1C 000187AC 7D 80 81 20 */ mtcrf 8, r12 +/* 0000BA20 000187B0 38 21 00 98 */ addi r1, r1, 0x98 +/* 0000BA24 000187B4 4E 80 00 20 */ blr +.endfn __16CDActionTrackCopPQ28CameraAI8DirectorP7IPlayer + +# .text:0xBA28 | size: 0x258 +.fn _._16CDActionTrackCop, global +/* 0000BA28 000187B8 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 0000BA2C 000187BC 7C 08 02 A6 */ mflr r0 +/* 0000BA30 000187C0 BF 81 00 10 */ stmw r28, 0x10(r1) +/* 0000BA34 000187C4 90 01 00 24 */ stw r0, 0x24(r1) +.L_0000BA38: +/* 0000BA38 000187C8 7C 7E 1B 78 */ mr r30, r3 +/* 0000BA3C 000187CC 3D 20 00 00 */ lis r9, _vt.16CDActionTrackCop.11IAttachable@ha +/* 0000BA40 000187D0 80 1E 00 40 */ lwz r0, 0x40(r30) +/* 0000BA44 000187D4 3D 60 00 00 */ lis r11, _vt.16CDActionTrackCop.14ITrafficCenter@ha +/* 0000BA48 000187D8 3D 40 00 00 */ lis r10, _vt.16CDActionTrackCop@ha +/* 0000BA4C 000187DC 39 29 00 00 */ addi r9, r9, _vt.16CDActionTrackCop.11IAttachable@l +/* 0000BA50 000187E0 39 6B 00 00 */ addi r11, r11, _vt.16CDActionTrackCop.14ITrafficCenter@l +/* 0000BA54 000187E4 39 4A 00 00 */ addi r10, r10, _vt.16CDActionTrackCop@l +/* 0000BA58 000187E8 3B FE 00 20 */ addi r31, r30, 0x20 +/* 0000BA5C 000187EC 7C 9C 23 78 */ mr r28, r4 +/* 0000BA60 000187F0 91 3E 00 1C */ stw r9, 0x1c(r30) +/* 0000BA64 000187F4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000BA68 000187F8 91 7E 00 24 */ stw r11, 0x24(r30) +/* 0000BA6C 000187FC 91 5E 00 14 */ stw r10, 0x14(r30) +/* 0000BA70 00018800 41 82 BA 80 */ beq .L_000074F0 +/* 0000BA74 00018804 80 7E 00 44 */ lwz r3, 0x44(r30) +.L_0000BA78: +/* 0000BA78 00018808 7C 04 03 78 */ mr r4, r0 +/* 0000BA7C 0001880C 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +.L_0000BA80: +/* 0000BA80 00018810 80 9E 00 48 */ lwz r4, 0x48(r30) +/* 0000BA84 00018814 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0000BA88 00018818 41 82 BA 94 */ beq .L_0000751C +/* 0000BA8C 0001881C 80 7E 00 44 */ lwz r3, 0x44(r30) +/* 0000BA90 00018820 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +/* 0000BA94 00018824 81 7E 00 28 */ lwz r11, 0x28(r30) +/* 0000BA98 00018828 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000BA9C 0001882C 41 82 BA BC */ beq .L_00007558 +/* 0000BAA0 00018830 81 2B 00 08 */ lwz r9, 0x8(r11) +.L_0000BAA4: +/* 0000BAA4 00018834 38 80 00 03 */ li r4, 0x3 +/* 0000BAA8 00018838 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000BAAC 0001883C 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000BAB0 00018840 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000BAB4 00018844 7C 08 03 A6 */ mtlr r0 +/* 0000BAB8 00018848 4E 80 00 21 */ blrl +/* 0000BABC 0001884C 80 7E 00 2C */ lwz r3, 0x2c(r30) +/* 0000BAC0 00018850 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000BAC4 00018854 41 82 BA D0 */ beq .L_00007594 +/* 0000BAC8 00018858 38 80 00 03 */ li r4, 0x3 +/* 0000BACC 0001885C 48 00 13 6D */ bl .L_0000CE38 +.L_0000BAD0: +/* 0000BAD0 00018860 81 7E 00 44 */ lwz r11, 0x44(r30) +/* 0000BAD4 00018864 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000BAD8 00018868 41 82 BA F8 */ beq .L_000075D0 +/* 0000BADC 0001886C 81 2B 00 0C */ lwz r9, 0xc(r11) +/* 0000BAE0 00018870 38 80 00 03 */ li r4, 0x3 +/* 0000BAE4 00018874 A8 69 00 08 */ lha r3, 0x8(r9) +.L_0000BAE8: +/* 0000BAE8 00018878 80 09 00 0C */ lwz r0, 0xc(r9) +/* 0000BAEC 0001887C 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000BAF0 00018880 7C 08 03 A6 */ mtlr r0 +/* 0000BAF4 00018884 4E 80 00 21 */ blrl +/* 0000BAF8 00018888 38 7E 00 30 */ addi r3, r30, 0x30 +/* 0000BAFC 0001888C 38 80 00 02 */ li r4, 0x2 +/* 0000BB00 00018890 48 00 00 01 */ bl _._Q29WorldConn9Reference +.L_0000BB04: +/* 0000BB04 00018894 3D 20 00 00 */ lis r9, _vt.14ITrafficCenter@ha +/* 0000BB08 00018898 3D 40 00 00 */ lis r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha +/* 0000BB0C 0001889C 39 29 00 00 */ addi r9, r9, _vt.14ITrafficCenter@l +/* 0000BB10 000188A0 39 6A 00 00 */ addi r11, r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l +.L_0000BB14: +/* 0000BB14 000188A4 91 3E 00 24 */ stw r9, 0x24(r30) +/* 0000BB18 000188A8 3B A1 00 08 */ addi r29, r1, 0x8 +/* 0000BB1C 000188AC 93 E1 00 08 */ stw r31, 0x8(r1) +/* 0000BB20 000188B0 7F A5 EB 78 */ mr r5, r29 +/* 0000BB24 000188B4 80 6A 00 00 */ lwz r3, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r10) +/* 0000BB28 000188B8 80 0B 00 08 */ lwz r0, 0x8(r11) +/* 0000BB2C 000188BC 54 00 10 3A */ slwi r0, r0, 2 +/* 0000BB30 000188C0 7F E3 02 14 */ add r31, r3, r0 +/* 0000BB34 000188C4 7F E4 FB 78 */ mr r4, r31 +/* 0000BB38 000188C8 48 00 00 01 */ bl find__H2ZPP14ITrafficCenterZP14ITrafficCenter_4_STLX01X01RCX11_X01 +/* 0000BB3C 000188CC 7C 03 F8 00 */ cmpw r3, r31 +/* 0000BB40 000188D0 40 82 BB 50 */ bne .L_00007690 +/* 0000BB44 000188D4 7F E3 FB 78 */ mr r3, r31 +/* 0000BB48 000188D8 38 9E 00 18 */ addi r4, r30, 0x18 +/* 0000BB4C 000188DC 48 00 BB 84 */ b .L_000176D0 +/* 0000BB50 000188E0 39 63 00 04 */ addi r11, r3, 0x4 +/* 0000BB54 000188E4 38 9E 00 18 */ addi r4, r30, 0x18 +/* 0000BB58 000188E8 7C 0B F8 00 */ cmpw r11, r31 +/* 0000BB5C 000188EC 41 82 BB 84 */ beq .L_000076E0 +/* 0000BB60 000188F0 81 2B 00 00 */ lwz r9, 0x0(r11) +/* 0000BB64 000188F4 80 1D 00 00 */ lwz r0, 0x0(r29) +.L_0000BB68: +/* 0000BB68 000188F8 7C 09 00 00 */ cmpw r9, r0 +/* 0000BB6C 000188FC 41 82 BB 78 */ beq .L_000076E4 +/* 0000BB70 00018900 91 23 00 00 */ stw r9, 0x0(r3) +/* 0000BB74 00018904 38 63 00 04 */ addi r3, r3, 0x4 +/* 0000BB78 00018908 39 6B 00 04 */ addi r11, r11, 0x4 +/* 0000BB7C 0001890C 7C 0B F8 00 */ cmpw r11, r31 +/* 0000BB80 00018910 40 82 BB 60 */ bne .L_000076E0 +/* 0000BB84 00018914 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha +/* 0000BB88 00018918 38 A9 00 00 */ addi r5, r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l +/* 0000BB8C 0001891C 81 49 00 00 */ lwz r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r9) +/* 0000BB90 00018920 81 05 00 08 */ lwz r8, 0x8(r5) +/* 0000BB94 00018924 55 00 10 3A */ slwi r0, r8, 2 +/* 0000BB98 00018928 7D 6A 02 14 */ add r11, r10, r0 +/* 0000BB9C 0001892C 7C 03 58 00 */ cmpw r3, r11 +/* 0000BBA0 00018930 41 82 BC 18 */ beq .L_000077B8 +/* 0000BBA4 00018934 7D 23 58 50 */ subf r9, r3, r11 +/* 0000BBA8 00018938 7C 0A 18 50 */ subf r0, r10, r3 +.L_0000BBAC: +/* 0000BBAC 0001893C 7D 3F 16 70 */ srawi r31, r9, 2 +/* 0000BBB0 00018940 7C 06 16 70 */ srawi r6, r0, 2 +/* 0000BBB4 00018944 7D 09 43 78 */ mr r9, r8 +/* 0000BBB8 00018948 38 63 00 04 */ addi r3, r3, 0x4 +/* 0000BBBC 0001894C 7C 03 58 00 */ cmpw r3, r11 +/* 0000BBC0 00018950 40 82 BB B8 */ bne .L_00007778 +/* 0000BBC4 00018954 7C E6 FA 14 */ add r7, r6, r31 +.L_0000BBC8: +/* 0000BBC8 00018958 39 00 00 00 */ li r8, 0x0 +/* 0000BBCC 0001895C 7C E3 3B 78 */ mr r3, r7 +/* 0000BBD0 00018960 7C 03 48 50 */ subf r0, r3, r9 +/* 0000BBD4 00018964 7C 08 00 40 */ cmplw r8, r0 +/* 0000BBD8 00018968 40 80 BC 10 */ bge .L_000077E8 +/* 0000BBDC 0001896C 7C 06 42 14 */ add r0, r6, r8 +/* 0000BBE0 00018970 81 65 00 00 */ lwz r11, 0x0(r5) +/* 0000BBE4 00018974 54 0A 10 3A */ slwi r10, r0, 2 +/* 0000BBE8 00018978 7D 27 42 14 */ add r9, r7, r8 +/* 0000BBEC 0001897C 7C 0A 5A 14 */ add r0, r10, r11 +/* 0000BBF0 00018980 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000BBF4 00018984 41 82 BC 04 */ beq .L_000077F8 +/* 0000BBF8 00018988 55 29 10 3A */ slwi r9, r9, 2 +/* 0000BBFC 0001898C 7C 09 58 2E */ lwzx r0, r9, r11 +/* 0000BC00 00018990 7C 0A 59 2E */ stwx r0, r10, r11 +/* 0000BC04 00018994 39 08 00 01 */ addi r8, r8, 0x1 +/* 0000BC08 00018998 81 25 00 08 */ lwz r9, 0x8(r5) +/* 0000BC0C 0001899C 48 00 BB D0 */ b .L_000177DC +/* 0000BC10 000189A0 7C 1F 48 50 */ subf r0, r31, r9 +/* 0000BC14 000189A4 90 05 00 08 */ stw r0, 0x8(r5) +/* 0000BC18 000189A8 3D 20 00 00 */ lis r9, _vt.Q33UTL3COM8IUnknown@ha +/* 0000BC1C 000189AC 80 7E 00 18 */ lwz r3, 0x18(r30) +/* 0000BC20 000189B0 39 29 00 00 */ addi r9, r9, _vt.Q33UTL3COM8IUnknown@l +/* 0000BC24 000189B4 91 3E 00 1C */ stw r9, 0x1c(r30) +/* 0000BC28 000189B8 48 00 00 01 */ bl Remove__Q43UTL3COM6Object6_IListPQ33UTL3COM8IUnknown +/* 0000BC2C 000189BC 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha +/* 0000BC30 000189C0 7F C3 F3 78 */ mr r3, r30 +/* 0000BC34 000189C4 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l +/* 0000BC38 000189C8 38 80 00 02 */ li r4, 0x2 +/* 0000BC3C 000189CC 91 3E 00 14 */ stw r9, 0x14(r30) +/* 0000BC40 000189D0 48 00 00 01 */ bl _._Q43UTL3COM6Object6_IList +.L_0000BC44: +/* 0000BC44 000189D4 73 80 00 01 */ andi. r0, r28, 0x1 +/* 0000BC48 000189D8 41 82 BC 6C */ beq .L_000078B4 +/* 0000BC4C 000189DC 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 0000BC50 000189E0 41 82 BC 6C */ beq .L_000078BC +/* 0000BC54 000189E4 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0000BC58 000189E8 7F C4 F3 78 */ mr r4, r30 +/* 0000BC5C 000189EC 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0000BC60 000189F0 38 A0 00 50 */ li r5, 0x50 +/* 0000BC64 000189F4 38 C0 00 00 */ li r6, 0x0 +/* 0000BC68 000189F8 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 0000BC6C 000189FC 80 01 00 24 */ lwz r0, 0x24(r1) +/* 0000BC70 00018A00 7C 08 03 A6 */ mtlr r0 +/* 0000BC74 00018A04 BB 81 00 10 */ lmw r28, 0x10(r1) +/* 0000BC78 00018A08 38 21 00 20 */ addi r1, r1, 0x20 +.L_0000BC7C: +/* 0000BC7C 00018A0C 4E 80 00 20 */ blr +.endfn _._16CDActionTrackCop + +# .text:0xBC80 | size: 0xB4 +.fn OnDetached__16CDActionTrackCopP11IAttachable, global +/* 0000BC80 00018A10 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0000BC84 00018A14 7C 08 02 A6 */ mflr r0 +.L_0000BC88: +/* 0000BC88 00018A18 90 01 00 0C */ stw r0, 0xc(r1) +.L_0000BC8C: +/* 0000BC8C 00018A1C 7C 84 23 79 */ mr. r4, r4 +/* 0000BC90 00018A20 81 23 00 40 */ lwz r9, 0x40(r3) +/* 0000BC94 00018A24 4F 80 00 00 */ mcrf cr7, cr0 +/* 0000BC98 00018A28 41 9E BC BC */ beq cr7, .L_00007954 +/* 0000BC9C 00018A2C 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0000BCA0 00018A30 41 82 BC BC */ beq .L_0000795C +/* 0000BCA4 00018A34 81 29 00 00 */ lwz r9, 0x0(r9) +.L_0000BCA8: +/* 0000BCA8 00018A38 80 04 00 00 */ lwz r0, 0x0(r4) +/* 0000BCAC 00018A3C 7C 00 4A 78 */ xor r0, r0, r9 +/* 0000BCB0 00018A40 21 60 00 00 */ subfic r11, r0, 0x0 +/* 0000BCB4 00018A44 7C 0B 01 14 */ adde r0, r11, r0 +/* 0000BCB8 00018A48 48 00 BC D0 */ b .L_00017988 +/* 0000BCBC 00018A4C 38 00 00 00 */ li r0, 0x0 +.L_0000BCC0: +/* 0000BCC0 00018A50 2F 84 00 00 */ cmpwi cr7, r4, 0x0 +/* 0000BCC4 00018A54 40 9E BC D0 */ bne cr7, .L_00007994 +/* 0000BCC8 00018A58 21 69 00 00 */ subfic r11, r9, 0x0 +/* 0000BCCC 00018A5C 7C 0B 49 14 */ adde r0, r11, r9 +/* 0000BCD0 00018A60 2C 00 00 00 */ cmpwi r0, 0x0 +.L_0000BCD4: +/* 0000BCD4 00018A64 41 82 BC E0 */ beq .L_000079B4 +/* 0000BCD8 00018A68 38 00 00 00 */ li r0, 0x0 +/* 0000BCDC 00018A6C 90 03 00 40 */ stw r0, 0x40(r3) +/* 0000BCE0 00018A70 81 63 00 48 */ lwz r11, 0x48(r3) +.L_0000BCE4: +/* 0000BCE4 00018A74 41 9E BD 08 */ beq cr7, .L_000079EC +/* 0000BCE8 00018A78 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000BCEC 00018A7C 41 82 BD 08 */ beq .L_000079F4 +/* 0000BCF0 00018A80 81 24 00 00 */ lwz r9, 0x0(r4) +/* 0000BCF4 00018A84 80 0B 00 00 */ lwz r0, 0x0(r11) +/* 0000BCF8 00018A88 7D 20 02 78 */ xor r0, r9, r0 +/* 0000BCFC 00018A8C 21 60 00 00 */ subfic r11, r0, 0x0 +.L_0000BD00: +/* 0000BD00 00018A90 7C 0B 01 14 */ adde r0, r11, r0 +/* 0000BD04 00018A94 48 00 BD 18 */ b .L_00017A1C +/* 0000BD08 00018A98 38 00 00 00 */ li r0, 0x0 +/* 0000BD0C 00018A9C 40 9E BD 18 */ bne cr7, .L_00007A24 +/* 0000BD10 00018AA0 21 2B 00 00 */ subfic r9, r11, 0x0 +/* 0000BD14 00018AA4 7C 09 59 14 */ adde r0, r9, r11 +/* 0000BD18 00018AA8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000BD1C 00018AAC 41 82 BD 24 */ beq .L_00007A40 +.L_0000BD20: +/* 0000BD20 00018AB0 48 00 BD 35 */ bl .L_00017A54 +/* 0000BD24 00018AB4 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0000BD28 00018AB8 7C 08 03 A6 */ mtlr r0 +/* 0000BD2C 00018ABC 38 21 00 08 */ addi r1, r1, 0x8 +/* 0000BD30 00018AC0 4E 80 00 20 */ blr +.endfn OnDetached__16CDActionTrackCopP11IAttachable + +# .text:0xBD34 | size: 0x6C +# CDActionTrackCop::OnCarDetached +.fn OnCarDetached__16CDActionTrackCop, global +/* 0000BD34 00018AC4 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 0000BD38 00018AC8 7C 08 02 A6 */ mflr r0 +/* 0000BD3C 00018ACC 93 E1 00 0C */ stw r31, 0xc(r1) +/* 0000BD40 00018AD0 90 01 00 14 */ stw r0, 0x14(r1) +.L_0000BD44: +/* 0000BD44 00018AD4 7C 7F 1B 78 */ mr r31, r3 +/* 0000BD48 00018AD8 39 20 00 01 */ li r9, 0x1 +/* 0000BD4C 00018ADC 80 1F 00 34 */ lwz r0, 0x34(r31) +/* 0000BD50 00018AE0 38 7F 00 30 */ addi r3, r31, 0x30 +/* 0000BD54 00018AE4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000BD58 00018AE8 40 82 BD 60 */ bne .L_00007AB8 +/* 0000BD5C 00018AEC 39 20 00 00 */ li r9, 0x0 +.L_0000BD60: +/* 0000BD60 00018AF0 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0000BD64 00018AF4 41 82 BD 70 */ beq .L_00007AD4 +/* 0000BD68 00018AF8 38 80 00 00 */ li r4, 0x0 +/* 0000BD6C 00018AFC 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi +/* 0000BD70 00018B00 81 3F 00 2C */ lwz r9, 0x2c(r31) +/* 0000BD74 00018B04 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0000BD78 00018B08 41 82 BD 84 */ beq .L_00007AFC +/* 0000BD7C 00018B0C 38 00 00 00 */ li r0, 0x0 +/* 0000BD80 00018B10 90 09 00 8C */ stw r0, 0x8c(r9) +.L_0000BD84: +/* 0000BD84 00018B14 38 00 00 00 */ li r0, 0x0 +.L_0000BD88: +/* 0000BD88 00018B18 90 1F 00 48 */ stw r0, 0x48(r31) +/* 0000BD8C 00018B1C 80 01 00 14 */ lwz r0, 0x14(r1) +.L_0000BD90: +/* 0000BD90 00018B20 7C 08 03 A6 */ mtlr r0 +/* 0000BD94 00018B24 83 E1 00 0C */ lwz r31, 0xc(r1) +/* 0000BD98 00018B28 38 21 00 10 */ addi r1, r1, 0x10 +/* 0000BD9C 00018B2C 4E 80 00 20 */ blr +.endfn OnCarDetached__16CDActionTrackCop + +# .text:0xBDA0 | size: 0x224 +# CDActionTrackCop::AquireCar +.fn AquireCar__16CDActionTrackCop, global +/* 0000BDA0 00018B30 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0000BDA4 00018B34 7C 08 02 A6 */ mflr r0 +/* 0000BDA8 00018B38 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 0000BDAC 00018B3C 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0000BDB0 00018B40 7C 7F 1B 78 */ mr r31, r3 +/* 0000BDB4 00018B44 81 7F 00 40 */ lwz r11, 0x40(r31) +/* 0000BDB8 00018B48 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000BDBC 00018B4C 41 82 BF B0 */ beq .L_00007D6C +/* 0000BDC0 00018B50 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000BDC4 00018B54 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000BDC8 00018B58 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000BDCC 00018B5C 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000BDD0 00018B60 7C 08 03 A6 */ mtlr r0 +/* 0000BDD4 00018B64 4E 80 00 21 */ blrl +/* 0000BDD8 00018B68 81 7F 00 48 */ lwz r11, 0x48(r31) +/* 0000BDDC 00018B6C 7C 63 1B 79 */ mr. r3, r3 +/* 0000BDE0 00018B70 41 82 BE 04 */ beq .L_00007BE4 +/* 0000BDE4 00018B74 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000BDE8 00018B78 41 82 BE 04 */ beq .L_00007BEC +/* 0000BDEC 00018B7C 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0000BDF0 00018B80 80 0B 00 00 */ lwz r0, 0x0(r11) +/* 0000BDF4 00018B84 7D 3E 02 78 */ xor r30, r9, r0 +/* 0000BDF8 00018B88 21 7E 00 00 */ subfic r11, r30, 0x0 +/* 0000BDFC 00018B8C 7F CB F1 14 */ adde r30, r11, r30 +.L_0000BE00: +/* 0000BE00 00018B90 48 00 BE 1C */ b .L_00017C1C +.L_0000BE04: +/* 0000BE04 00018B94 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000BE08 00018B98 38 00 00 00 */ li r0, 0x0 +.L_0000BE0C: +/* 0000BE0C 00018B9C 40 82 BE 18 */ bne .L_00007C24 +/* 0000BE10 00018BA0 21 2B 00 00 */ subfic r9, r11, 0x0 +/* 0000BE14 00018BA4 7C 09 59 14 */ adde r0, r9, r11 +/* 0000BE18 00018BA8 7C 1E 03 78 */ mr r30, r0 +/* 0000BE1C 00018BAC 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 0000BE20 00018BB0 40 82 BE 50 */ bne .L_00007C70 +/* 0000BE24 00018BB4 80 9F 00 48 */ lwz r4, 0x48(r31) +/* 0000BE28 00018BB8 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0000BE2C 00018BBC 41 82 BE 5C */ beq .L_00007C88 +/* 0000BE30 00018BC0 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 0000BE34 00018BC4 38 1F 00 18 */ addi r0, r31, 0x18 +/* 0000BE38 00018BC8 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000BE3C 00018BCC 81 29 00 1C */ lwz r9, 0x1c(r9) +/* 0000BE40 00018BD0 7C 60 1A 14 */ add r3, r0, r3 +/* 0000BE44 00018BD4 7D 28 03 A6 */ mtlr r9 +/* 0000BE48 00018BD8 4E 80 00 21 */ blrl +/* 0000BE4C 00018BDC 93 DF 00 48 */ stw r30, 0x48(r31) +/* 0000BE50 00018BE0 80 1F 00 48 */ lwz r0, 0x48(r31) +/* 0000BE54 00018BE4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000BE58 00018BE8 40 82 BF B0 */ bne .L_00007E08 +/* 0000BE5C 00018BEC 80 7F 00 40 */ lwz r3, 0x40(r31) +/* 0000BE60 00018BF0 81 23 00 04 */ lwz r9, 0x4(r3) +/* 0000BE64 00018BF4 A8 09 00 10 */ lha r0, 0x10(r9) +/* 0000BE68 00018BF8 81 29 00 14 */ lwz r9, 0x14(r9) +/* 0000BE6C 00018BFC 7C 63 02 14 */ add r3, r3, r0 +/* 0000BE70 00018C00 7D 28 03 A6 */ mtlr r9 +/* 0000BE74 00018C04 4E 80 00 21 */ blrl +/* 0000BE78 00018C08 7C 7D 1B 79 */ mr. r29, r3 +/* 0000BE7C 00018C0C 41 82 BF B0 */ beq .L_00007E2C +/* 0000BE80 00018C10 81 3D 00 04 */ lwz r9, 0x4(r29) +/* 0000BE84 00018C14 3B DF 00 30 */ addi r30, r31, 0x30 +/* 0000BE88 00018C18 80 09 00 EC */ lwz r0, 0xec(r9) +/* 0000BE8C 00018C1C A8 69 00 E8 */ lha r3, 0xe8(r9) +/* 0000BE90 00018C20 7C 08 03 A6 */ mtlr r0 +/* 0000BE94 00018C24 7C 7D 1A 14 */ add r3, r29, r3 +/* 0000BE98 00018C28 4E 80 00 21 */ blrl +/* 0000BE9C 00018C2C 7C 64 1B 78 */ mr r4, r3 +/* 0000BEA0 00018C30 7F C3 F3 78 */ mr r3, r30 +/* 0000BEA4 00018C34 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi +/* 0000BEA8 00018C38 80 1F 00 34 */ lwz r0, 0x34(r31) +/* 0000BEAC 00018C3C 39 20 00 01 */ li r9, 0x1 +.L_0000BEB0: +/* 0000BEB0 00018C40 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000BEB4 00018C44 40 82 BE BC */ bne .L_00007D70 +/* 0000BEB8 00018C48 39 20 00 00 */ li r9, 0x0 +.L_0000BEBC: +/* 0000BEBC 00018C4C 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0000BEC0 00018C50 41 82 BF B0 */ beq .L_00007E70 +/* 0000BEC4 00018C54 80 7D 00 00 */ lwz r3, 0x0(r29) +/* 0000BEC8 00018C58 3C 80 00 00 */ lis r4, _IHandle__8IVehicle@ha +/* 0000BECC 00018C5C 38 84 00 00 */ addi r4, r4, _IHandle__8IVehicle@l +/* 0000BED0 00018C60 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000BED4 00018C64 38 00 00 01 */ li r0, 0x1 +/* 0000BED8 00018C68 90 7F 00 48 */ stw r3, 0x48(r31) +/* 0000BEDC 00018C6C 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000BEE0 00018C70 40 82 BE E8 */ bne .L_00007DC8 +.L_0000BEE4: +/* 0000BEE4 00018C74 38 00 00 00 */ li r0, 0x0 +/* 0000BEE8 00018C78 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000BEEC 00018C7C 41 82 BF B0 */ beq .L_00007E9C +/* 0000BEF0 00018C80 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 0000BEF4 00018C84 7C 64 1B 78 */ mr r4, r3 +/* 0000BEF8 00018C88 38 1F 00 18 */ addi r0, r31, 0x18 +/* 0000BEFC 00018C8C A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000BF00 00018C90 81 29 00 14 */ lwz r9, 0x14(r9) +/* 0000BF04 00018C94 7C 60 1A 14 */ add r3, r0, r3 +/* 0000BF08 00018C98 7D 28 03 A6 */ mtlr r9 +/* 0000BF0C 00018C9C 4E 80 00 21 */ blrl +/* 0000BF10 00018CA0 81 7F 00 48 */ lwz r11, 0x48(r31) +/* 0000BF14 00018CA4 83 DF 00 2C */ lwz r30, 0x2c(r31) +/* 0000BF18 00018CA8 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000BF1C 00018CAC A8 69 00 98 */ lha r3, 0x98(r9) +/* 0000BF20 00018CB0 80 09 00 9C */ lwz r0, 0x9c(r9) +/* 0000BF24 00018CB4 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000BF28 00018CB8 7C 08 03 A6 */ mtlr r0 +/* 0000BF2C 00018CBC 4E 80 00 21 */ blrl +/* 0000BF30 00018CC0 81 23 00 08 */ lwz r9, 0x8(r3) +/* 0000BF34 00018CC4 80 69 00 1C */ lwz r3, 0x1c(r9) +/* 0000BF38 00018CC8 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000BF3C 00018CCC 40 82 BF 48 */ bne .L_00007E84 +/* 0000BF40 00018CD0 3D 20 00 00 */ lis r9, .rodata@ha +/* 0000BF44 00018CD4 38 69 00 00 */ addi r3, r9, .rodata@l +/* 0000BF48 00018CD8 48 00 00 01 */ bl bStringHash__FPCc +/* 0000BF4C 00018CDC 7C 64 1B 78 */ mr r4, r3 +/* 0000BF50 00018CE0 7F C3 F3 78 */ mr r3, r30 +/* 0000BF54 00018CE4 48 00 13 CD */ bl .L_0000D320 +/* 0000BF58 00018CE8 80 1F 00 30 */ lwz r0, 0x30(r31) +/* 0000BF5C 00018CEC 3C 80 00 00 */ lis r4, _IHandle__13ITransmission@ha +/* 0000BF60 00018CF0 81 7F 00 2C */ lwz r11, 0x2c(r31) +/* 0000BF64 00018CF4 38 84 00 00 */ addi r4, r4, _IHandle__13ITransmission@l +/* 0000BF68 00018CF8 90 0B 00 8C */ stw r0, 0x8c(r11) +/* 0000BF6C 00018CFC 81 3F 00 48 */ lwz r9, 0x48(r31) +/* 0000BF70 00018D00 80 69 00 00 */ lwz r3, 0x0(r9) +/* 0000BF74 00018D04 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000BF78 00018D08 7C 6B 1B 79 */ mr. r11, r3 +/* 0000BF7C 00018D0C 38 00 00 01 */ li r0, 0x1 +/* 0000BF80 00018D10 40 82 BF 88 */ bne .L_00007F08 +/* 0000BF84 00018D14 38 00 00 00 */ li r0, 0x0 +/* 0000BF88 00018D18 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000BF8C 00018D1C 41 82 BF B0 */ beq .L_00007F3C +/* 0000BF90 00018D20 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000BF94 00018D24 A8 69 00 40 */ lha r3, 0x40(r9) +/* 0000BF98 00018D28 80 09 00 44 */ lwz r0, 0x44(r9) +/* 0000BF9C 00018D2C 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000BFA0 00018D30 7C 08 03 A6 */ mtlr r0 +/* 0000BFA4 00018D34 4E 80 00 21 */ blrl +/* 0000BFA8 00018D38 81 3F 00 2C */ lwz r9, 0x2c(r31) +/* 0000BFAC 00018D3C D0 29 00 14 */ stfs f1, 0x14(r9) +/* 0000BFB0 00018D40 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0000BFB4 00018D44 7C 08 03 A6 */ mtlr r0 +/* 0000BFB8 00018D48 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 0000BFBC 00018D4C 38 21 00 18 */ addi r1, r1, 0x18 +/* 0000BFC0 00018D50 4E 80 00 20 */ blr +.endfn AquireCar__16CDActionTrackCop + +# .text:0xBFC4 | size: 0x1B8 +.fn Update__16CDActionTrackCopf, global +/* 0000BFC4 00018D54 94 21 FF 90 */ stwu r1, -0x70(r1) +/* 0000BFC8 00018D58 7C 08 02 A6 */ mflr r0 +/* 0000BFCC 00018D5C F3 E1 00 68 */ psq_st f31, 0x68(r1), 0, qr0 +/* 0000BFD0 00018D60 BF 81 00 58 */ stmw r28, 0x58(r1) +/* 0000BFD4 00018D64 90 01 00 74 */ stw r0, 0x74(r1) +/* 0000BFD8 00018D68 7C 7F 1B 78 */ mr r31, r3 +.L_0000BFDC: +/* 0000BFDC 00018D6C FF E0 08 90 */ fmr f31, f1 +/* 0000BFE0 00018D70 83 DF 00 40 */ lwz r30, 0x40(r31) +/* 0000BFE4 00018D74 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 0000BFE8 00018D78 40 82 C0 1C */ bne .L_00008004 +/* 0000BFEC 00018D7C 80 9F 00 48 */ lwz r4, 0x48(r31) +/* 0000BFF0 00018D80 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0000BFF4 00018D84 41 82 C1 64 */ beq .L_00008158 +/* 0000BFF8 00018D88 81 3F 00 1C */ lwz r9, 0x1c(r31) +.L_0000BFFC: +/* 0000BFFC 00018D8C 38 1F 00 18 */ addi r0, r31, 0x18 +/* 0000C000 00018D90 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000C004 00018D94 81 29 00 1C */ lwz r9, 0x1c(r9) +/* 0000C008 00018D98 7C 60 1A 14 */ add r3, r0, r3 +.L_0000C00C: +/* 0000C00C 00018D9C 7D 28 03 A6 */ mtlr r9 +/* 0000C010 00018DA0 4E 80 00 21 */ blrl +/* 0000C014 00018DA4 93 DF 00 48 */ stw r30, 0x48(r31) +/* 0000C018 00018DA8 48 00 C1 64 */ b .L_0001817C +/* 0000C01C 00018DAC 7F E3 FB 78 */ mr r3, r31 +/* 0000C020 00018DB0 48 00 BD A1 */ bl .L_00017DC0 +/* 0000C024 00018DB4 80 7F 00 34 */ lwz r3, 0x34(r31) +/* 0000C028 00018DB8 38 00 00 01 */ li r0, 0x1 +/* 0000C02C 00018DBC 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000C030 00018DC0 40 82 C0 38 */ bne .L_00008068 +/* 0000C034 00018DC4 38 00 00 00 */ li r0, 0x0 +/* 0000C038 00018DC8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000C03C 00018DCC 41 82 C1 64 */ beq .L_000081A0 +/* 0000C040 00018DD0 38 81 00 08 */ addi r4, r1, 0x8 +/* 0000C044 00018DD4 48 00 00 01 */ bl PSMTX44Copy +/* 0000C048 00018DD8 80 7F 00 48 */ lwz r3, 0x48(r31) +/* 0000C04C 00018DDC 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000C050 00018DE0 41 82 C1 4C */ beq .L_0000819C +/* 0000C054 00018DE4 80 63 00 00 */ lwz r3, 0x0(r3) +/* 0000C058 00018DE8 3C 80 00 00 */ lis r4, _IHandle__14ICollisionBody@ha +/* 0000C05C 00018DEC 38 84 00 00 */ addi r4, r4, _IHandle__14ICollisionBody@l +/* 0000C060 00018DF0 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000C064 00018DF4 7C 7C 1B 79 */ mr. r28, r3 +/* 0000C068 00018DF8 38 00 00 01 */ li r0, 0x1 +/* 0000C06C 00018DFC 40 82 C0 74 */ bne .L_000080E0 +/* 0000C070 00018E00 38 00 00 00 */ li r0, 0x0 +/* 0000C074 00018E04 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000C078 00018E08 41 82 C1 4C */ beq .L_000081C4 +/* 0000C07C 00018E0C 81 7F 00 48 */ lwz r11, 0x48(r31) +/* 0000C080 00018E10 3B A1 00 48 */ addi r29, r1, 0x48 +/* 0000C084 00018E14 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000C088 00018E18 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0000C08C 00018E1C A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000C090 00018E20 7C 08 03 A6 */ mtlr r0 +/* 0000C094 00018E24 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000C098 00018E28 4E 80 00 21 */ blrl +/* 0000C09C 00018E2C 81 23 00 04 */ lwz r9, 0x4(r3) +/* 0000C0A0 00018E30 A8 09 00 A8 */ lha r0, 0xa8(r9) +/* 0000C0A4 00018E34 81 29 00 AC */ lwz r9, 0xac(r9) +/* 0000C0A8 00018E38 7C 63 02 14 */ add r3, r3, r0 +/* 0000C0AC 00018E3C 7D 28 03 A6 */ mtlr r9 +/* 0000C0B0 00018E40 4E 80 00 21 */ blrl +/* 0000C0B4 00018E44 81 3C 00 04 */ lwz r9, 0x4(r28) +.L_0000C0B8: +/* 0000C0B8 00018E48 7C 7E 1B 78 */ mr r30, r3 +/* 0000C0BC 00018E4C 80 09 00 84 */ lwz r0, 0x84(r9) +/* 0000C0C0 00018E50 A8 69 00 80 */ lha r3, 0x80(r9) +/* 0000C0C4 00018E54 7C 08 03 A6 */ mtlr r0 +/* 0000C0C8 00018E58 7C 7C 1A 14 */ add r3, r28, r3 +.L_0000C0CC: +/* 0000C0CC 00018E5C 4E 80 00 21 */ blrl +/* 0000C0D0 00018E60 C1 A3 00 00 */ lfs f13, 0x0(r3) +/* 0000C0D4 00018E64 7F A4 EB 78 */ mr r4, r29 +/* 0000C0D8 00018E68 38 A0 00 00 */ li r5, 0x0 +/* 0000C0DC 00018E6C D1 A1 00 48 */ stfs f13, 0x48(r1) +/* 0000C0E0 00018E70 C0 03 00 04 */ lfs f0, 0x4(r3) +/* 0000C0E4 00018E74 D0 01 00 4C */ stfs f0, 0x4c(r1) +/* 0000C0E8 00018E78 C1 A3 00 08 */ lfs f13, 0x8(r3) +/* 0000C0EC 00018E7C D1 A1 00 50 */ stfs f13, 0x50(r1) +/* 0000C0F0 00018E80 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000C0F4 00018E84 80 09 01 4C */ lwz r0, 0x14c(r9) +/* 0000C0F8 00018E88 A8 69 01 48 */ lha r3, 0x148(r9) +/* 0000C0FC 00018E8C 7C 08 03 A6 */ mtlr r0 +/* 0000C100 00018E90 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000C104 00018E94 4E 80 00 21 */ blrl +.L_0000C108: +/* 0000C108 00018E98 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000C10C 00018E9C A8 69 00 48 */ lha r3, 0x48(r9) +/* 0000C110 00018EA0 80 09 00 4C */ lwz r0, 0x4c(r9) +/* 0000C114 00018EA4 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000C118 00018EA8 7C 08 03 A6 */ mtlr r0 +/* 0000C11C 00018EAC 4E 80 00 21 */ blrl +/* 0000C120 00018EB0 7C 64 1B 78 */ mr r4, r3 +/* 0000C124 00018EB4 7F A3 EB 78 */ mr r3, r29 +/* 0000C128 00018EB8 7C 65 1B 78 */ mr r5, r3 +.L_0000C12C: +/* 0000C12C 00018EBC 48 00 00 01 */ bl VU0_v3add__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 +/* 0000C130 00018EC0 C0 01 00 48 */ lfs f0, 0x48(r1) +/* 0000C134 00018EC4 C1 A1 00 50 */ lfs f13, 0x50(r1) +/* 0000C138 00018EC8 C1 81 00 4C */ lfs f12, 0x4c(r1) +.L_0000C13C: +/* 0000C13C 00018ECC FC 00 00 50 */ fneg f0, f0 +/* 0000C140 00018ED0 D1 A1 00 38 */ stfs f13, 0x38(r1) +/* 0000C144 00018ED4 D0 01 00 3C */ stfs f0, 0x3c(r1) +/* 0000C148 00018ED8 D1 81 00 40 */ stfs f12, 0x40(r1) +/* 0000C14C 00018EDC 80 DF 00 3C */ lwz r6, 0x3c(r31) +/* 0000C150 00018EE0 FC 20 F8 90 */ fmr f1, f31 +.L_0000C154: +/* 0000C154 00018EE4 80 7F 00 2C */ lwz r3, 0x2c(r31) +/* 0000C158 00018EE8 38 81 00 08 */ addi r4, r1, 0x8 +.L_0000C15C: +/* 0000C15C 00018EEC 80 BF 00 38 */ lwz r5, 0x38(r31) +/* 0000C160 00018EF0 48 00 17 65 */ bl .L_0000D8C4 +/* 0000C164 00018EF4 80 01 00 74 */ lwz r0, 0x74(r1) +/* 0000C168 00018EF8 7C 08 03 A6 */ mtlr r0 +/* 0000C16C 00018EFC BB 81 00 58 */ lmw r28, 0x58(r1) +/* 0000C170 00018F00 E3 E1 00 68 */ psq_l f31, 0x68(r1), 0, qr0 +/* 0000C174 00018F04 38 21 00 70 */ addi r1, r1, 0x70 +/* 0000C178 00018F08 4E 80 00 20 */ blr +.endfn Update__16CDActionTrackCopf + +# .text:0xC17C | size: 0xA4 +.fn GetTrafficBasis__16CDActionTrackCopRQ25UMath7Matrix4RQ25UMath7Vector3, global +/* 0000C17C 00018F0C 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0000C180 00018F10 7C 08 02 A6 */ mflr r0 +/* 0000C184 00018F14 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 0000C188 00018F18 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0000C18C 00018F1C 80 63 00 48 */ lwz r3, 0x48(r3) +/* 0000C190 00018F20 7C 9E 23 78 */ mr r30, r4 +/* 0000C194 00018F24 7C BD 2B 78 */ mr r29, r5 +/* 0000C198 00018F28 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000C19C 00018F2C 41 82 C2 08 */ beq .L_000083A4 +/* 0000C1A0 00018F30 80 63 00 00 */ lwz r3, 0x0(r3) +/* 0000C1A4 00018F34 3C 80 00 00 */ lis r4, _IHandle__5IBody@ha +/* 0000C1A8 00018F38 38 84 00 00 */ addi r4, r4, _IHandle__5IBody@l +/* 0000C1AC 00018F3C 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000C1B0 00018F40 7C 7F 1B 79 */ mr. r31, r3 +/* 0000C1B4 00018F44 38 00 00 01 */ li r0, 0x1 +/* 0000C1B8 00018F48 40 82 C1 C0 */ bne .L_00008378 +/* 0000C1BC 00018F4C 38 00 00 00 */ li r0, 0x0 +/* 0000C1C0 00018F50 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000C1C4 00018F54 41 82 C2 08 */ beq .L_000083CC +/* 0000C1C8 00018F58 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 0000C1CC 00018F5C 7F C4 F3 78 */ mr r4, r30 +/* 0000C1D0 00018F60 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000C1D4 00018F64 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000C1D8 00018F68 7C 08 03 A6 */ mtlr r0 +/* 0000C1DC 00018F6C 7C 7F 1A 14 */ add r3, r31, r3 +/* 0000C1E0 00018F70 4E 80 00 21 */ blrl +/* 0000C1E4 00018F74 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 0000C1E8 00018F78 7F A4 EB 78 */ mr r4, r29 +/* 0000C1EC 00018F7C A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000C1F0 00018F80 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0000C1F4 00018F84 7C 7F 1A 14 */ add r3, r31, r3 +/* 0000C1F8 00018F88 7C 08 03 A6 */ mtlr r0 +/* 0000C1FC 00018F8C 4E 80 00 21 */ blrl +/* 0000C200 00018F90 38 60 00 01 */ li r3, 0x1 +/* 0000C204 00018F94 48 00 C2 0C */ b .L_00018410 +/* 0000C208 00018F98 38 60 00 00 */ li r3, 0x0 +/* 0000C20C 00018F9C 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0000C210 00018FA0 7C 08 03 A6 */ mtlr r0 +.L_0000C214: +/* 0000C214 00018FA4 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 0000C218 00018FA8 38 21 00 18 */ addi r1, r1, 0x18 +.L_0000C21C: +/* 0000C21C 00018FAC 4E 80 00 20 */ blr +.endfn GetTrafficBasis__16CDActionTrackCopRQ25UMath7Matrix4RQ25UMath7Vector3 + +# .text:0xC220 | size: 0x8 +# IsRightSide() +.fn IsRightSide__Fv, local +/* 0000C220 00018FB0 38 60 00 00 */ li r3, 0x0 +/* 0000C224 00018FB4 4E 80 00 20 */ blr +.endfn IsRightSide__Fv + +# .text:0xC228 | size: 0x74 +.fn GetName__C16CDActionShowcase, global +/* 0000C228 00018FB8 94 21 FF E8 */ stwu r1, -0x18(r1) +.L_0000C22C: +/* 0000C22C 00018FBC 7C 08 02 A6 */ mflr r0 +/* 0000C230 00018FC0 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 0000C234 00018FC4 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0000C238 00018FC8 3F E0 00 00 */ lis r31, _.tmp_10.11056@ha +/* 0000C23C 00018FCC 80 1F 00 00 */ lwz r0, _.tmp_10.11056@l(r31) +.L_0000C240: +/* 0000C240 00018FD0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000C244 00018FD4 40 82 C2 80 */ bne .L_000084C4 +/* 0000C248 00018FD8 3F C0 00 00 */ lis r30, .rodata+0x8C8@ha +/* 0000C24C 00018FDC 3F A0 00 00 */ lis r29, name.11055@ha +/* 0000C250 00018FE0 3B DE 08 C8 */ addi r30, r30, .rodata+0x8C8@l +/* 0000C254 00018FE4 3B BD 00 00 */ addi r29, r29, name.11055@l +/* 0000C258 00018FE8 7F C3 F3 78 */ mr r3, r30 +/* 0000C25C 00018FEC 48 00 00 01 */ bl StringHash64__6AttribPCc +/* 0000C260 00018FF0 90 7D 00 00 */ stw r3, 0x0(r29) +/* 0000C264 00018FF4 90 9D 00 04 */ stw r4, 0x4(r29) +/* 0000C268 00018FF8 7F C3 F3 78 */ mr r3, r30 +/* 0000C26C 00018FFC 48 00 00 01 */ bl StringHash32__6AttribPCc +/* 0000C270 00019000 38 00 00 01 */ li r0, 0x1 +.L_0000C274: +/* 0000C274 00019004 93 DD 00 0C */ stw r30, 0xc(r29) +/* 0000C278 00019008 90 1F 00 00 */ stw r0, _.tmp_10.11056@l(r31) +/* 0000C27C 0001900C 90 7D 00 08 */ stw r3, 0x8(r29) +/* 0000C280 00019010 3C 60 00 00 */ lis r3, name.11055@ha +/* 0000C284 00019014 38 63 00 00 */ addi r3, r3, name.11055@l +/* 0000C288 00019018 80 01 00 1C */ lwz r0, 0x1c(r1) +.L_0000C28C: +/* 0000C28C 0001901C 7C 08 03 A6 */ mtlr r0 +/* 0000C290 00019020 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 0000C294 00019024 38 21 00 18 */ addi r1, r1, 0x18 +/* 0000C298 00019028 4E 80 00 20 */ blr +.endfn GetName__C16CDActionShowcase + +# .text:0xC29C | size: 0x2C +.fn GetNext__C16CDActionShowcase, global +/* 0000C29C 0001902C 3D 00 00 00 */ lis r8, .rodata@ha +/* 0000C2A0 00019030 39 20 00 00 */ li r9, 0x0 +/* 0000C2A4 00019034 7C 6B 1B 78 */ mr r11, r3 +.L_0000C2A8: +/* 0000C2A8 00019038 39 08 00 00 */ addi r8, r8, .rodata@l +/* 0000C2AC 0001903C 39 40 00 00 */ li r10, 0x0 +/* 0000C2B0 00019040 38 00 00 00 */ li r0, 0x0 +.L_0000C2B4: +/* 0000C2B4 00019044 91 2B 00 00 */ stw r9, 0x0(r11) +/* 0000C2B8 00019048 91 4B 00 04 */ stw r10, 0x4(r11) +/* 0000C2BC 0001904C 90 0B 00 08 */ stw r0, 0x8(r11) +/* 0000C2C0 00019050 91 0B 00 0C */ stw r8, 0xc(r11) +/* 0000C2C4 00019054 4E 80 00 20 */ blr +.endfn GetNext__C16CDActionShowcase + +# .text:0xC2C8 | size: 0x24 +.fn Attach__16CDActionShowcasePQ33UTL3COM8IUnknown, global +/* 0000C2C8 00019058 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0000C2CC 0001905C 7C 08 02 A6 */ mflr r0 +.L_0000C2D0: +/* 0000C2D0 00019060 90 01 00 0C */ stw r0, 0xc(r1) +/* 0000C2D4 00019064 80 63 00 3C */ lwz r3, 0x3c(r3) +.L_0000C2D8: +/* 0000C2D8 00019068 48 00 00 01 */ bl Attach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +/* 0000C2DC 0001906C 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0000C2E0 00019070 7C 08 03 A6 */ mtlr r0 +.L_0000C2E4: +/* 0000C2E4 00019074 38 21 00 08 */ addi r1, r1, 0x8 +/* 0000C2E8 00019078 4E 80 00 20 */ blr +.endfn Attach__16CDActionShowcasePQ33UTL3COM8IUnknown + +# .text:0xC2EC | size: 0x24 +.fn Detach__16CDActionShowcasePQ33UTL3COM8IUnknown, global +/* 0000C2EC 0001907C 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0000C2F0 00019080 7C 08 02 A6 */ mflr r0 +/* 0000C2F4 00019084 90 01 00 0C */ stw r0, 0xc(r1) +/* 0000C2F8 00019088 80 63 00 3C */ lwz r3, 0x3c(r3) +/* 0000C2FC 0001908C 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +/* 0000C300 00019090 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0000C304 00019094 7C 08 03 A6 */ mtlr r0 +/* 0000C308 00019098 38 21 00 08 */ addi r1, r1, 0x8 +/* 0000C30C 0001909C 4E 80 00 20 */ blr +.endfn Detach__16CDActionShowcasePQ33UTL3COM8IUnknown + +# .text:0xC310 | size: 0x24 +.fn IsAttached__C16CDActionShowcasePCQ33UTL3COM8IUnknown, global +/* 0000C310 000190A0 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0000C314 000190A4 7C 08 02 A6 */ mflr r0 +/* 0000C318 000190A8 90 01 00 0C */ stw r0, 0xc(r1) +/* 0000C31C 000190AC 80 63 00 3C */ lwz r3, 0x3c(r3) +/* 0000C320 000190B0 48 00 00 01 */ bl IsAttached__CQ23Sim11AttachmentsPCQ33UTL3COM8IUnknown +/* 0000C324 000190B4 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0000C328 000190B8 7C 08 03 A6 */ mtlr r0 +/* 0000C32C 000190BC 38 21 00 08 */ addi r1, r1, 0x8 +/* 0000C330 000190C0 4E 80 00 20 */ blr +.endfn IsAttached__C16CDActionShowcasePCQ33UTL3COM8IUnknown + +# .text:0xC334 | size: 0x8 +.fn GetAttachments__C16CDActionShowcase, global +/* 0000C334 000190C4 80 63 00 3C */ lwz r3, 0x3c(r3) +/* 0000C338 000190C8 4E 80 00 20 */ blr +.endfn GetAttachments__C16CDActionShowcase + +# .text:0xC33C | size: 0x11C +.fn Construct__16CDActionShowcasePQ28CameraAI8Director, global +/* 0000C33C 000190CC 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 0000C340 000190D0 7C 08 02 A6 */ mflr r0 +/* 0000C344 000190D4 BF 61 00 0C */ stmw r27, 0xc(r1) +/* 0000C348 000190D8 90 01 00 24 */ stw r0, 0x24(r1) +/* 0000C34C 000190DC 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@ha +/* 0000C350 000190E0 7C 7B 1B 78 */ mr r27, r3 +/* 0000C354 000190E4 39 29 00 00 */ addi r9, r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@l +/* 0000C358 000190E8 3B 80 00 00 */ li r28, 0x0 +/* 0000C35C 000190EC 83 E9 00 30 */ lwz r31, 0x30(r9) +/* 0000C360 000190F0 7D 3D 4B 78 */ mr r29, r9 +/* 0000C364 000190F4 80 1D 00 38 */ lwz r0, 0x38(r29) +/* 0000C368 000190F8 81 3D 00 30 */ lwz r9, 0x30(r29) +/* 0000C36C 000190FC 54 00 10 3A */ slwi r0, r0, 2 +/* 0000C370 00019100 7D 29 02 14 */ add r9, r9, r0 +/* 0000C374 00019104 7C 1F 48 00 */ cmpw r31, r9 +/* 0000C378 00019108 41 82 C3 B0 */ beq .L_00008728 +.L_0000C37C: +/* 0000C37C 0001910C 83 DF 00 00 */ lwz r30, 0x0(r31) +/* 0000C380 00019110 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000C384 00019114 80 09 00 64 */ lwz r0, 0x64(r9) +.L_0000C388: +/* 0000C388 00019118 A8 69 00 60 */ lha r3, 0x60(r9) +/* 0000C38C 0001911C 7C 08 03 A6 */ mtlr r0 +/* 0000C390 00019120 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000C394 00019124 4E 80 00 21 */ blrl +/* 0000C398 00019128 80 1B 00 04 */ lwz r0, 0x4(r27) +/* 0000C39C 0001912C 7C 03 00 00 */ cmpw r3, r0 +/* 0000C3A0 00019130 41 82 C3 AC */ beq .L_0000874C +/* 0000C3A4 00019134 3B FF 00 04 */ addi r31, r31, 0x4 +/* 0000C3A8 00019138 48 00 C3 64 */ b .L_0001870C +/* 0000C3AC 0001913C 7F DC F3 78 */ mr r28, r30 +/* 0000C3B0 00019140 2C 1C 00 00 */ cmpwi r28, 0x0 +/* 0000C3B4 00019144 41 82 C4 40 */ beq .L_000087F4 +/* 0000C3B8 00019148 81 3C 00 04 */ lwz r9, 0x4(r28) +/* 0000C3BC 0001914C A8 69 00 28 */ lha r3, 0x28(r9) +.L_0000C3C0: +/* 0000C3C0 00019150 80 09 00 2C */ lwz r0, 0x2c(r9) +/* 0000C3C4 00019154 7C 7C 1A 14 */ add r3, r28, r3 +/* 0000C3C8 00019158 7C 08 03 A6 */ mtlr r0 +.L_0000C3CC: +/* 0000C3CC 0001915C 4E 80 00 21 */ blrl +/* 0000C3D0 00019160 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000C3D4 00019164 41 82 C4 40 */ beq .L_00008814 +/* 0000C3D8 00019168 81 3C 00 04 */ lwz r9, 0x4(r28) +/* 0000C3DC 0001916C A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000C3E0 00019170 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000C3E4 00019174 7C 7C 1A 14 */ add r3, r28, r3 +.L_0000C3E8: +/* 0000C3E8 00019178 7C 08 03 A6 */ mtlr r0 +/* 0000C3EC 0001917C 4E 80 00 21 */ blrl +/* 0000C3F0 00019180 7C 6B 1B 79 */ mr. r11, r3 +/* 0000C3F4 00019184 41 82 C4 40 */ beq .L_00008834 +.L_0000C3F8: +/* 0000C3F8 00019188 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000C3FC 0001918C A8 69 00 E8 */ lha r3, 0xe8(r9) +/* 0000C400 00019190 80 09 00 EC */ lwz r0, 0xec(r9) +/* 0000C404 00019194 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000C408 00019198 7C 08 03 A6 */ mtlr r0 +/* 0000C40C 0001919C 4E 80 00 21 */ blrl +/* 0000C410 000191A0 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000C414 000191A4 38 60 00 00 */ li r3, 0x0 +/* 0000C418 000191A8 41 82 C4 44 */ beq .L_0000885C +/* 0000C41C 000191AC 3C 60 00 00 */ lis r3, gFastMem@ha +.L_0000C420: +/* 0000C420 000191B0 38 80 00 48 */ li r4, 0x48 +/* 0000C424 000191B4 38 A0 00 00 */ li r5, 0x0 +/* 0000C428 000191B8 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0000C42C 000191BC 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 0000C430 000191C0 7F 64 DB 78 */ mr r4, r27 +/* 0000C434 000191C4 7F 85 E3 78 */ mr r5, r28 +/* 0000C438 000191C8 48 00 C4 59 */ bl .L_00018890 +/* 0000C43C 000191CC 48 00 C4 44 */ b .L_00018880 +/* 0000C440 000191D0 38 60 00 00 */ li r3, 0x0 +/* 0000C444 000191D4 80 01 00 24 */ lwz r0, 0x24(r1) +/* 0000C448 000191D8 7C 08 03 A6 */ mtlr r0 +/* 0000C44C 000191DC BB 61 00 0C */ lmw r27, 0xc(r1) +/* 0000C450 000191E0 38 21 00 20 */ addi r1, r1, 0x20 +/* 0000C454 000191E4 4E 80 00 20 */ blr +.endfn Construct__16CDActionShowcasePQ28CameraAI8Director + +# .text:0xC458 | size: 0x2B0 +.fn __16CDActionShowcasePQ28CameraAI8DirectorP7IPlayer, global +/* 0000C458 000191E8 94 21 FF 88 */ stwu r1, -0x78(r1) +/* 0000C45C 000191EC 7C 08 02 A6 */ mflr r0 +/* 0000C460 000191F0 BF 21 00 5C */ stmw r25, 0x5c(r1) +/* 0000C464 000191F4 90 01 00 7C */ stw r0, 0x7c(r1) +/* 0000C468 000191F8 7C 7F 1B 78 */ mr r31, r3 +/* 0000C46C 000191FC 7C 99 23 78 */ mr r25, r4 +/* 0000C470 00019200 7C BE 2B 78 */ mr r30, r5 +/* 0000C474 00019204 38 80 00 00 */ li r4, 0x0 +/* 0000C478 00019208 3B 7F 00 18 */ addi r27, r31, 0x18 +/* 0000C47C 0001920C 48 00 00 01 */ bl __Q43UTL3COM6Object6_IListUi +/* 0000C480 00019210 3B 80 00 00 */ li r28, 0x0 +/* 0000C484 00019214 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha +/* 0000C488 00019218 3D 60 00 00 */ lis r11, _vt.Q33UTL3COM8IUnknown@ha +/* 0000C48C 0001921C 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l +/* 0000C490 00019220 39 6B 00 00 */ addi r11, r11, _vt.Q33UTL3COM8IUnknown@l +/* 0000C494 00019224 3C 80 00 00 */ lis r4, _IHandle__11IAttachable@ha +/* 0000C498 00019228 93 FF 00 18 */ stw r31, 0x18(r31) +/* 0000C49C 0001922C 3B 41 00 08 */ addi r26, r1, 0x8 +/* 0000C4A0 00019230 7F 65 DB 78 */ mr r5, r27 +/* 0000C4A4 00019234 38 84 00 00 */ addi r4, r4, _IHandle__11IAttachable@l +/* 0000C4A8 00019238 91 3F 00 14 */ stw r9, 0x14(r31) +/* 0000C4AC 0001923C 91 7F 00 1C */ stw r11, 0x1c(r31) +/* 0000C4B0 00019240 7F E3 FB 78 */ mr r3, r31 +/* 0000C4B4 00019244 48 00 00 01 */ bl Add__Q43UTL3COM6Object6_IListPvPQ33UTL3COM8IUnknown +/* 0000C4B8 00019248 3D 20 00 00 */ lis r9, _vt.16CDActionShowcase.11IAttachable@ha +/* 0000C4BC 0001924C 3D 60 00 00 */ lis r11, _vt.16CDActionShowcase@ha +/* 0000C4C0 00019250 39 6B 00 00 */ addi r11, r11, _vt.16CDActionShowcase@l +.L_0000C4C4: +/* 0000C4C4 00019254 39 29 00 00 */ addi r9, r9, _vt.16CDActionShowcase.11IAttachable@l +/* 0000C4C8 00019258 91 7F 00 14 */ stw r11, 0x14(r31) +/* 0000C4CC 0001925C 38 80 00 00 */ li r4, 0x0 +/* 0000C4D0 00019260 91 3F 00 1C */ stw r9, 0x1c(r31) +/* 0000C4D4 00019264 38 7F 00 28 */ addi r3, r31, 0x28 +/* 0000C4D8 00019268 48 00 00 01 */ bl __Q29WorldConn9ReferenceUi +/* 0000C4DC 0001926C 93 DF 00 38 */ stw r30, 0x38(r31) +/* 0000C4E0 00019270 3F A0 00 00 */ lis r29, gFastMem@ha +/* 0000C4E4 00019274 93 9F 00 40 */ stw r28, 0x40(r31) +/* 0000C4E8 00019278 3B BD 00 00 */ addi r29, r29, gFastMem@l +/* 0000C4EC 0001927C 38 80 00 10 */ li r4, 0x10 +/* 0000C4F0 00019280 38 A0 00 00 */ li r5, 0x0 +/* 0000C4F4 00019284 80 19 00 04 */ lwz r0, 0x4(r25) +/* 0000C4F8 00019288 7F A3 EB 78 */ mr r3, r29 +/* 0000C4FC 0001928C 90 1F 00 44 */ stw r0, 0x44(r31) +/* 0000C500 00019290 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 0000C504 00019294 7C 7E 1B 78 */ mr r30, r3 +/* 0000C508 00019298 3D 20 00 00 */ lis r9, _vt.Q23Sim11Attachments@ha +/* 0000C50C 0001929C 39 29 00 00 */ addi r9, r9, _vt.Q23Sim11Attachments@l +/* 0000C510 000192A0 93 9E 00 04 */ stw r28, 0x4(r30) +/* 0000C514 000192A4 38 A0 00 00 */ li r5, 0x0 +/* 0000C518 000192A8 91 3E 00 0C */ stw r9, 0xc(r30) +/* 0000C51C 000192AC 38 80 00 0C */ li r4, 0xc +/* 0000C520 000192B0 7F A3 EB 78 */ mr r3, r29 +.L_0000C524: +/* 0000C524 000192B4 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 0000C528 000192B8 7C 69 1B 78 */ mr r9, r3 +/* 0000C52C 000192BC 91 29 00 00 */ stw r9, 0x0(r9) +/* 0000C530 000192C0 7F C3 F3 78 */ mr r3, r30 +/* 0000C534 000192C4 91 29 00 04 */ stw r9, 0x4(r9) +/* 0000C538 000192C8 91 3E 00 04 */ stw r9, 0x4(r30) +/* 0000C53C 000192CC 93 7E 00 08 */ stw r27, 0x8(r30) +/* 0000C540 000192D0 93 DF 00 3C */ stw r30, 0x3c(r31) +/* 0000C544 000192D4 80 9F 00 38 */ lwz r4, 0x38(r31) +/* 0000C548 000192D8 48 00 00 01 */ bl Attach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +/* 0000C54C 000192DC 38 60 01 24 */ li r3, 0x124 +/* 0000C550 000192E0 48 00 00 01 */ bl __builtin_vec_new +/* 0000C554 000192E4 38 80 00 00 */ li r4, 0x0 +.L_0000C558: +/* 0000C558 000192E8 48 00 10 51 */ bl .L_0000D5A8 +/* 0000C55C 000192EC 90 7F 00 24 */ stw r3, 0x24(r31) +/* 0000C560 000192F0 7F E3 FB 78 */ mr r3, r31 +/* 0000C564 000192F4 48 00 C9 65 */ bl .L_00018EC8 +/* 0000C568 000192F8 80 7F 00 2C */ lwz r3, 0x2c(r31) +/* 0000C56C 000192FC 38 00 00 01 */ li r0, 0x1 +.L_0000C570: +/* 0000C570 00019300 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000C574 00019304 40 82 C5 7C */ bne .L_00008AF0 +/* 0000C578 00019308 38 00 00 00 */ li r0, 0x0 +.L_0000C57C: +/* 0000C57C 0001930C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000C580 00019310 41 82 C6 A8 */ beq .L_00008C28 +/* 0000C584 00019314 38 81 00 18 */ addi r4, r1, 0x18 +/* 0000C588 00019318 48 00 00 01 */ bl PSMTX44Copy +/* 0000C58C 0001931C 80 7F 00 40 */ lwz r3, 0x40(r31) +/* 0000C590 00019320 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000C594 00019324 41 82 C6 8C */ beq .L_00008C20 +/* 0000C598 00019328 80 63 00 00 */ lwz r3, 0x0(r3) +/* 0000C59C 0001932C 3C 80 00 00 */ lis r4, _IHandle__14ICollisionBody@ha +/* 0000C5A0 00019330 38 84 00 00 */ addi r4, r4, _IHandle__14ICollisionBody@l +.L_0000C5A4: +/* 0000C5A4 00019334 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000C5A8 00019338 7C 7D 1B 79 */ mr. r29, r3 +.L_0000C5AC: +/* 0000C5AC 0001933C 38 00 00 01 */ li r0, 0x1 +/* 0000C5B0 00019340 40 82 C5 B8 */ bne .L_00008B68 +/* 0000C5B4 00019344 38 00 00 00 */ li r0, 0x0 +/* 0000C5B8 00019348 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000C5BC 0001934C 41 82 C6 8C */ beq .L_00008C48 +/* 0000C5C0 00019350 81 7F 00 40 */ lwz r11, 0x40(r31) +/* 0000C5C4 00019354 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000C5C8 00019358 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0000C5CC 0001935C A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000C5D0 00019360 7C 08 03 A6 */ mtlr r0 +/* 0000C5D4 00019364 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000C5D8 00019368 4E 80 00 21 */ blrl +/* 0000C5DC 0001936C 81 23 00 04 */ lwz r9, 0x4(r3) +/* 0000C5E0 00019370 A8 09 00 A8 */ lha r0, 0xa8(r9) +/* 0000C5E4 00019374 81 29 00 AC */ lwz r9, 0xac(r9) +/* 0000C5E8 00019378 7C 63 02 14 */ add r3, r3, r0 +/* 0000C5EC 0001937C 7D 28 03 A6 */ mtlr r9 +/* 0000C5F0 00019380 4E 80 00 21 */ blrl +/* 0000C5F4 00019384 81 3D 00 04 */ lwz r9, 0x4(r29) +/* 0000C5F8 00019388 7C 7E 1B 78 */ mr r30, r3 +/* 0000C5FC 0001938C 80 09 00 84 */ lwz r0, 0x84(r9) +/* 0000C600 00019390 A8 69 00 80 */ lha r3, 0x80(r9) +/* 0000C604 00019394 7C 08 03 A6 */ mtlr r0 +/* 0000C608 00019398 7C 7D 1A 14 */ add r3, r29, r3 +/* 0000C60C 0001939C 4E 80 00 21 */ blrl +/* 0000C610 000193A0 C1 A3 00 00 */ lfs f13, 0x0(r3) +/* 0000C614 000193A4 7F 44 D3 78 */ mr r4, r26 +/* 0000C618 000193A8 38 A0 00 00 */ li r5, 0x0 +/* 0000C61C 000193AC D1 A1 00 08 */ stfs f13, 0x8(r1) +/* 0000C620 000193B0 C0 03 00 04 */ lfs f0, 0x4(r3) +.L_0000C624: +/* 0000C624 000193B4 D0 01 00 0C */ stfs f0, 0xc(r1) +/* 0000C628 000193B8 C1 A3 00 08 */ lfs f13, 0x8(r3) +/* 0000C62C 000193BC D1 BA 00 08 */ stfs f13, 0x8(r26) +/* 0000C630 000193C0 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000C634 000193C4 80 09 01 4C */ lwz r0, 0x14c(r9) +/* 0000C638 000193C8 A8 69 01 48 */ lha r3, 0x148(r9) +/* 0000C63C 000193CC 7C 08 03 A6 */ mtlr r0 +/* 0000C640 000193D0 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000C644 000193D4 4E 80 00 21 */ blrl +.L_0000C648: +/* 0000C648 000193D8 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000C64C 000193DC A8 69 00 48 */ lha r3, 0x48(r9) +/* 0000C650 000193E0 80 09 00 4C */ lwz r0, 0x4c(r9) +/* 0000C654 000193E4 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000C658 000193E8 7C 08 03 A6 */ mtlr r0 +/* 0000C65C 000193EC 4E 80 00 21 */ blrl +/* 0000C660 000193F0 7C 64 1B 78 */ mr r4, r3 +/* 0000C664 000193F4 7F 45 D3 78 */ mr r5, r26 +/* 0000C668 000193F8 7F 43 D3 78 */ mr r3, r26 +.L_0000C66C: +/* 0000C66C 000193FC 48 00 00 01 */ bl VU0_v3add__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 +/* 0000C670 00019400 C0 01 00 08 */ lfs f0, 0x8(r1) +/* 0000C674 00019404 C1 BA 00 08 */ lfs f13, 0x8(r26) +/* 0000C678 00019408 C1 81 00 0C */ lfs f12, 0xc(r1) +/* 0000C67C 0001940C FC 00 00 50 */ fneg f0, f0 +/* 0000C680 00019410 D1 A1 00 48 */ stfs f13, 0x48(r1) +/* 0000C684 00019414 D0 01 00 4C */ stfs f0, 0x4c(r1) +/* 0000C688 00019418 D1 81 00 50 */ stfs f12, 0x50(r1) +/* 0000C68C 0001941C 3D 20 00 00 */ lis r9, .rodata+0x8D4@ha +/* 0000C690 00019420 80 7F 00 24 */ lwz r3, 0x24(r31) +/* 0000C694 00019424 C0 29 08 D4 */ lfs f1, .rodata+0x8D4@l(r9) +/* 0000C698 00019428 38 81 00 18 */ addi r4, r1, 0x18 +/* 0000C69C 0001942C 80 BF 00 30 */ lwz r5, 0x30(r31) +.L_0000C6A0: +/* 0000C6A0 00019430 80 DF 00 34 */ lwz r6, 0x34(r31) +/* 0000C6A4 00019434 48 00 17 65 */ bl .L_0000DE08 +/* 0000C6A8 00019438 38 60 00 EC */ li r3, 0xec +/* 0000C6AC 0001943C 48 00 00 01 */ bl __builtin_vec_new +/* 0000C6B0 00019440 7C 7C 1B 78 */ mr r28, r3 +/* 0000C6B4 00019444 83 D9 00 04 */ lwz r30, 0x4(r25) +.L_0000C6B8: +/* 0000C6B8 00019448 83 BF 00 24 */ lwz r29, 0x24(r31) +/* 0000C6BC 0001944C 48 00 C2 21 */ bl .L_000188DC +/* 0000C6C0 00019450 7C 66 1B 78 */ mr r6, r3 +/* 0000C6C4 00019454 7F C4 F3 78 */ mr r4, r30 +/* 0000C6C8 00019458 7F A5 EB 78 */ mr r5, r29 +/* 0000C6CC 0001945C 7F 83 E3 78 */ mr r3, r28 +/* 0000C6D0 00019460 48 01 24 45 */ bl .text+0x12444 +/* 0000C6D4 00019464 90 7F 00 20 */ stw r3, 0x20(r31) +/* 0000C6D8 00019468 81 23 00 08 */ lwz r9, 0x8(r3) +/* 0000C6DC 0001946C A8 09 00 70 */ lha r0, 0x70(r9) +/* 0000C6E0 00019470 81 29 00 74 */ lwz r9, 0x74(r9) +/* 0000C6E4 00019474 7C 63 02 14 */ add r3, r3, r0 +.L_0000C6E8: +/* 0000C6E8 00019478 7D 28 03 A6 */ mtlr r9 +/* 0000C6EC 0001947C 4E 80 00 21 */ blrl +/* 0000C6F0 00019480 7F E3 FB 78 */ mr r3, r31 +.L_0000C6F4: +/* 0000C6F4 00019484 80 01 00 7C */ lwz r0, 0x7c(r1) +/* 0000C6F8 00019488 7C 08 03 A6 */ mtlr r0 +/* 0000C6FC 0001948C BB 21 00 5C */ lmw r25, 0x5c(r1) +/* 0000C700 00019490 38 21 00 78 */ addi r1, r1, 0x78 +/* 0000C704 00019494 4E 80 00 20 */ blr +.endfn __16CDActionShowcasePQ28CameraAI8DirectorP7IPlayer + +# .text:0xC708 | size: 0x13C +.fn _._16CDActionShowcase, global +/* 0000C708 00019498 94 21 FF E8 */ stwu r1, -0x18(r1) +.L_0000C70C: +/* 0000C70C 0001949C 7C 08 02 A6 */ mflr r0 +/* 0000C710 000194A0 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 0000C714 000194A4 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0000C718 000194A8 7C 7F 1B 78 */ mr r31, r3 +/* 0000C71C 000194AC 3D 60 00 00 */ lis r11, _vt.16CDActionShowcase.11IAttachable@ha +/* 0000C720 000194B0 80 1F 00 38 */ lwz r0, 0x38(r31) +.L_0000C724: +/* 0000C724 000194B4 3D 20 00 00 */ lis r9, _vt.16CDActionShowcase@ha +/* 0000C728 000194B8 39 6B 00 00 */ addi r11, r11, _vt.16CDActionShowcase.11IAttachable@l +/* 0000C72C 000194BC 39 29 00 00 */ addi r9, r9, _vt.16CDActionShowcase@l +/* 0000C730 000194C0 3B DF 00 18 */ addi r30, r31, 0x18 +/* 0000C734 000194C4 7C 9D 23 78 */ mr r29, r4 +/* 0000C738 000194C8 91 7F 00 1C */ stw r11, 0x1c(r31) +/* 0000C73C 000194CC 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000C740 000194D0 91 3F 00 14 */ stw r9, 0x14(r31) +.L_0000C744: +/* 0000C744 000194D4 41 82 C7 54 */ beq .L_00008E98 +/* 0000C748 000194D8 80 7F 00 3C */ lwz r3, 0x3c(r31) +/* 0000C74C 000194DC 7C 04 03 78 */ mr r4, r0 +/* 0000C750 000194E0 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +/* 0000C754 000194E4 80 9F 00 40 */ lwz r4, 0x40(r31) +/* 0000C758 000194E8 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0000C75C 000194EC 41 82 C7 68 */ beq .L_00008EC4 +/* 0000C760 000194F0 80 7F 00 3C */ lwz r3, 0x3c(r31) +/* 0000C764 000194F4 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +/* 0000C768 000194F8 81 7F 00 20 */ lwz r11, 0x20(r31) +/* 0000C76C 000194FC 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000C770 00019500 41 82 C7 90 */ beq .L_00008F00 +/* 0000C774 00019504 81 2B 00 08 */ lwz r9, 0x8(r11) +/* 0000C778 00019508 38 80 00 03 */ li r4, 0x3 +/* 0000C77C 0001950C A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000C780 00019510 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000C784 00019514 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000C788 00019518 7C 08 03 A6 */ mtlr r0 +/* 0000C78C 0001951C 4E 80 00 21 */ blrl +/* 0000C790 00019520 80 7F 00 24 */ lwz r3, 0x24(r31) +/* 0000C794 00019524 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000C798 00019528 41 82 C7 A4 */ beq .L_00008F3C +/* 0000C79C 0001952C 38 80 00 03 */ li r4, 0x3 +/* 0000C7A0 00019530 48 00 13 6D */ bl .L_0000DB0C +/* 0000C7A4 00019534 81 7F 00 3C */ lwz r11, 0x3c(r31) +.L_0000C7A8: +/* 0000C7A8 00019538 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000C7AC 0001953C 41 82 C7 CC */ beq .L_00008F78 +/* 0000C7B0 00019540 81 2B 00 0C */ lwz r9, 0xc(r11) +/* 0000C7B4 00019544 38 80 00 03 */ li r4, 0x3 +/* 0000C7B8 00019548 A8 69 00 08 */ lha r3, 0x8(r9) +/* 0000C7BC 0001954C 80 09 00 0C */ lwz r0, 0xc(r9) +/* 0000C7C0 00019550 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000C7C4 00019554 7C 08 03 A6 */ mtlr r0 +/* 0000C7C8 00019558 4E 80 00 21 */ blrl +.L_0000C7CC: +/* 0000C7CC 0001955C 38 7F 00 28 */ addi r3, r31, 0x28 +/* 0000C7D0 00019560 38 80 00 02 */ li r4, 0x2 +/* 0000C7D4 00019564 48 00 00 01 */ bl _._Q29WorldConn9Reference +/* 0000C7D8 00019568 3D 20 00 00 */ lis r9, _vt.Q33UTL3COM8IUnknown@ha +/* 0000C7DC 0001956C 80 7F 00 18 */ lwz r3, 0x18(r31) +/* 0000C7E0 00019570 39 29 00 00 */ addi r9, r9, _vt.Q33UTL3COM8IUnknown@l +/* 0000C7E4 00019574 7F C4 F3 78 */ mr r4, r30 +/* 0000C7E8 00019578 91 3F 00 1C */ stw r9, 0x1c(r31) +/* 0000C7EC 0001957C 48 00 00 01 */ bl Remove__Q43UTL3COM6Object6_IListPQ33UTL3COM8IUnknown +/* 0000C7F0 00019580 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha +.L_0000C7F4: +/* 0000C7F4 00019584 7F E3 FB 78 */ mr r3, r31 +/* 0000C7F8 00019588 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l +/* 0000C7FC 0001958C 38 80 00 02 */ li r4, 0x2 +.L_0000C800: +/* 0000C800 00019590 91 3F 00 14 */ stw r9, 0x14(r31) +/* 0000C804 00019594 48 00 00 01 */ bl _._Q43UTL3COM6Object6_IList +/* 0000C808 00019598 73 A0 00 01 */ andi. r0, r29, 0x1 +/* 0000C80C 0001959C 41 82 C8 30 */ beq .L_0000903C +/* 0000C810 000195A0 2C 1F 00 00 */ cmpwi r31, 0x0 +/* 0000C814 000195A4 41 82 C8 30 */ beq .L_00009044 +/* 0000C818 000195A8 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0000C81C 000195AC 7F E4 FB 78 */ mr r4, r31 +/* 0000C820 000195B0 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0000C824 000195B4 38 A0 00 48 */ li r5, 0x48 +/* 0000C828 000195B8 38 C0 00 00 */ li r6, 0x0 +/* 0000C82C 000195BC 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 0000C830 000195C0 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0000C834 000195C4 7C 08 03 A6 */ mtlr r0 +/* 0000C838 000195C8 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 0000C83C 000195CC 38 21 00 18 */ addi r1, r1, 0x18 +/* 0000C840 000195D0 4E 80 00 20 */ blr +.endfn _._16CDActionShowcase + +# .text:0xC844 | size: 0xB4 +.fn OnDetached__16CDActionShowcaseP11IAttachable, global +/* 0000C844 000195D4 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0000C848 000195D8 7C 08 02 A6 */ mflr r0 +/* 0000C84C 000195DC 90 01 00 0C */ stw r0, 0xc(r1) +/* 0000C850 000195E0 7C 84 23 79 */ mr. r4, r4 +/* 0000C854 000195E4 81 23 00 38 */ lwz r9, 0x38(r3) +/* 0000C858 000195E8 4F 80 00 00 */ mcrf cr7, cr0 +/* 0000C85C 000195EC 41 9E C8 80 */ beq cr7, .L_000090DC +/* 0000C860 000195F0 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0000C864 000195F4 41 82 C8 80 */ beq .L_000090E4 +/* 0000C868 000195F8 81 29 00 00 */ lwz r9, 0x0(r9) +/* 0000C86C 000195FC 80 04 00 00 */ lwz r0, 0x0(r4) +/* 0000C870 00019600 7C 00 4A 78 */ xor r0, r0, r9 +/* 0000C874 00019604 21 60 00 00 */ subfic r11, r0, 0x0 +/* 0000C878 00019608 7C 0B 01 14 */ adde r0, r11, r0 +/* 0000C87C 0001960C 48 00 C8 94 */ b .L_00019110 +/* 0000C880 00019610 38 00 00 00 */ li r0, 0x0 +/* 0000C884 00019614 2F 84 00 00 */ cmpwi cr7, r4, 0x0 +/* 0000C888 00019618 40 9E C8 94 */ bne cr7, .L_0000911C +/* 0000C88C 0001961C 21 69 00 00 */ subfic r11, r9, 0x0 +/* 0000C890 00019620 7C 0B 49 14 */ adde r0, r11, r9 +/* 0000C894 00019624 2C 00 00 00 */ cmpwi r0, 0x0 +.L_0000C898: +/* 0000C898 00019628 41 82 C8 A4 */ beq .L_0000913C +/* 0000C89C 0001962C 38 00 00 00 */ li r0, 0x0 +/* 0000C8A0 00019630 90 03 00 38 */ stw r0, 0x38(r3) +/* 0000C8A4 00019634 81 63 00 40 */ lwz r11, 0x40(r3) +/* 0000C8A8 00019638 41 9E C8 CC */ beq cr7, .L_00009174 +/* 0000C8AC 0001963C 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000C8B0 00019640 41 82 C8 CC */ beq .L_0000917C +/* 0000C8B4 00019644 81 24 00 00 */ lwz r9, 0x0(r4) +/* 0000C8B8 00019648 80 0B 00 00 */ lwz r0, 0x0(r11) +/* 0000C8BC 0001964C 7D 20 02 78 */ xor r0, r9, r0 +/* 0000C8C0 00019650 21 60 00 00 */ subfic r11, r0, 0x0 +/* 0000C8C4 00019654 7C 0B 01 14 */ adde r0, r11, r0 +/* 0000C8C8 00019658 48 00 C8 DC */ b .L_000191A4 +.L_0000C8CC: +/* 0000C8CC 0001965C 38 00 00 00 */ li r0, 0x0 +/* 0000C8D0 00019660 40 9E C8 DC */ bne cr7, .L_000091AC +/* 0000C8D4 00019664 21 2B 00 00 */ subfic r9, r11, 0x0 +/* 0000C8D8 00019668 7C 09 59 14 */ adde r0, r9, r11 +/* 0000C8DC 0001966C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000C8E0 00019670 41 82 C8 E8 */ beq .L_000091C8 +/* 0000C8E4 00019674 48 00 C8 F9 */ bl .L_000191DC +/* 0000C8E8 00019678 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0000C8EC 0001967C 7C 08 03 A6 */ mtlr r0 +/* 0000C8F0 00019680 38 21 00 08 */ addi r1, r1, 0x8 +/* 0000C8F4 00019684 4E 80 00 20 */ blr +.endfn OnDetached__16CDActionShowcaseP11IAttachable + +# .text:0xC8F8 | size: 0x6C +# CDActionShowcase::OnCarDetached +.fn OnCarDetached__16CDActionShowcase, global +/* 0000C8F8 00019688 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 0000C8FC 0001968C 7C 08 02 A6 */ mflr r0 +/* 0000C900 00019690 93 E1 00 0C */ stw r31, 0xc(r1) +/* 0000C904 00019694 90 01 00 14 */ stw r0, 0x14(r1) +/* 0000C908 00019698 7C 7F 1B 78 */ mr r31, r3 +/* 0000C90C 0001969C 39 20 00 01 */ li r9, 0x1 +/* 0000C910 000196A0 80 1F 00 2C */ lwz r0, 0x2c(r31) +/* 0000C914 000196A4 38 7F 00 28 */ addi r3, r31, 0x28 +/* 0000C918 000196A8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000C91C 000196AC 40 82 C9 24 */ bne .L_00009240 +/* 0000C920 000196B0 39 20 00 00 */ li r9, 0x0 +/* 0000C924 000196B4 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0000C928 000196B8 41 82 C9 34 */ beq .L_0000925C +/* 0000C92C 000196BC 38 80 00 00 */ li r4, 0x0 +/* 0000C930 000196C0 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi +/* 0000C934 000196C4 81 3F 00 24 */ lwz r9, 0x24(r31) +/* 0000C938 000196C8 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0000C93C 000196CC 41 82 C9 48 */ beq .L_00009284 +/* 0000C940 000196D0 38 00 00 00 */ li r0, 0x0 +/* 0000C944 000196D4 90 09 00 8C */ stw r0, 0x8c(r9) +/* 0000C948 000196D8 38 00 00 00 */ li r0, 0x0 +.L_0000C94C: +/* 0000C94C 000196DC 90 1F 00 40 */ stw r0, 0x40(r31) +/* 0000C950 000196E0 80 01 00 14 */ lwz r0, 0x14(r1) +/* 0000C954 000196E4 7C 08 03 A6 */ mtlr r0 +/* 0000C958 000196E8 83 E1 00 0C */ lwz r31, 0xc(r1) +.L_0000C95C: +/* 0000C95C 000196EC 38 21 00 10 */ addi r1, r1, 0x10 +.L_0000C960: +/* 0000C960 000196F0 4E 80 00 20 */ blr +.endfn OnCarDetached__16CDActionShowcase + +# .text:0xC964 | size: 0x1D8 +# CDActionShowcase::AquireCar +.fn AquireCar__16CDActionShowcase, global +/* 0000C964 000196F4 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0000C968 000196F8 7C 08 02 A6 */ mflr r0 +/* 0000C96C 000196FC BF A1 00 0C */ stmw r29, 0xc(r1) +.L_0000C970: +/* 0000C970 00019700 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0000C974 00019704 7C 7F 1B 78 */ mr r31, r3 +/* 0000C978 00019708 81 7F 00 38 */ lwz r11, 0x38(r31) +/* 0000C97C 0001970C 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000C980 00019710 41 82 CB 28 */ beq .L_000094A8 +/* 0000C984 00019714 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000C988 00019718 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000C98C 0001971C 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000C990 00019720 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000C994 00019724 7C 08 03 A6 */ mtlr r0 +/* 0000C998 00019728 4E 80 00 21 */ blrl +/* 0000C99C 0001972C 81 7F 00 40 */ lwz r11, 0x40(r31) +/* 0000C9A0 00019730 7C 63 1B 79 */ mr. r3, r3 +.L_0000C9A4: +/* 0000C9A4 00019734 41 82 C9 C8 */ beq .L_0000936C +/* 0000C9A8 00019738 2C 0B 00 00 */ cmpwi r11, 0x0 +.L_0000C9AC: +/* 0000C9AC 0001973C 41 82 C9 C8 */ beq .L_00009374 +/* 0000C9B0 00019740 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0000C9B4 00019744 80 0B 00 00 */ lwz r0, 0x0(r11) +/* 0000C9B8 00019748 7D 3E 02 78 */ xor r30, r9, r0 +/* 0000C9BC 0001974C 21 7E 00 00 */ subfic r11, r30, 0x0 +/* 0000C9C0 00019750 7F CB F1 14 */ adde r30, r11, r30 +/* 0000C9C4 00019754 48 00 C9 E0 */ b .L_000193A4 +/* 0000C9C8 00019758 2C 03 00 00 */ cmpwi r3, 0x0 +.L_0000C9CC: +/* 0000C9CC 0001975C 38 00 00 00 */ li r0, 0x0 +/* 0000C9D0 00019760 40 82 C9 DC */ bne .L_000093AC +/* 0000C9D4 00019764 21 2B 00 00 */ subfic r9, r11, 0x0 +/* 0000C9D8 00019768 7C 09 59 14 */ adde r0, r9, r11 +/* 0000C9DC 0001976C 7C 1E 03 78 */ mr r30, r0 +/* 0000C9E0 00019770 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 0000C9E4 00019774 40 82 CA 14 */ bne .L_000093F8 +/* 0000C9E8 00019778 80 9F 00 40 */ lwz r4, 0x40(r31) +/* 0000C9EC 0001977C 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0000C9F0 00019780 41 82 CA 20 */ beq .L_00009410 +/* 0000C9F4 00019784 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 0000C9F8 00019788 38 1F 00 18 */ addi r0, r31, 0x18 +.L_0000C9FC: +/* 0000C9FC 0001978C A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000CA00 00019790 81 29 00 1C */ lwz r9, 0x1c(r9) +.L_0000CA04: +/* 0000CA04 00019794 7C 60 1A 14 */ add r3, r0, r3 +.L_0000CA08: +/* 0000CA08 00019798 7D 28 03 A6 */ mtlr r9 +/* 0000CA0C 0001979C 4E 80 00 21 */ blrl +/* 0000CA10 000197A0 93 DF 00 40 */ stw r30, 0x40(r31) +/* 0000CA14 000197A4 80 1F 00 40 */ lwz r0, 0x40(r31) +/* 0000CA18 000197A8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000CA1C 000197AC 40 82 CB 28 */ bne .L_00009544 +/* 0000CA20 000197B0 80 7F 00 38 */ lwz r3, 0x38(r31) +/* 0000CA24 000197B4 81 23 00 04 */ lwz r9, 0x4(r3) +/* 0000CA28 000197B8 A8 09 00 10 */ lha r0, 0x10(r9) +/* 0000CA2C 000197BC 81 29 00 14 */ lwz r9, 0x14(r9) +.L_0000CA30: +/* 0000CA30 000197C0 7C 63 02 14 */ add r3, r3, r0 +/* 0000CA34 000197C4 7D 28 03 A6 */ mtlr r9 +/* 0000CA38 000197C8 4E 80 00 21 */ blrl +/* 0000CA3C 000197CC 7C 7D 1B 79 */ mr. r29, r3 +/* 0000CA40 000197D0 41 82 CB 28 */ beq .L_00009568 +.L_0000CA44: +/* 0000CA44 000197D4 81 3D 00 04 */ lwz r9, 0x4(r29) +/* 0000CA48 000197D8 3B DF 00 28 */ addi r30, r31, 0x28 +/* 0000CA4C 000197DC 80 09 00 EC */ lwz r0, 0xec(r9) +/* 0000CA50 000197E0 A8 69 00 E8 */ lha r3, 0xe8(r9) +/* 0000CA54 000197E4 7C 08 03 A6 */ mtlr r0 +/* 0000CA58 000197E8 7C 7D 1A 14 */ add r3, r29, r3 +/* 0000CA5C 000197EC 4E 80 00 21 */ blrl +/* 0000CA60 000197F0 7C 64 1B 78 */ mr r4, r3 +/* 0000CA64 000197F4 7F C3 F3 78 */ mr r3, r30 +.L_0000CA68: +/* 0000CA68 000197F8 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi +/* 0000CA6C 000197FC 80 1F 00 2C */ lwz r0, 0x2c(r31) +/* 0000CA70 00019800 39 20 00 01 */ li r9, 0x1 +/* 0000CA74 00019804 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000CA78 00019808 40 82 CA 80 */ bne .L_000094F8 +/* 0000CA7C 0001980C 39 20 00 00 */ li r9, 0x0 +/* 0000CA80 00019810 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0000CA84 00019814 41 82 CB 28 */ beq .L_000095AC +/* 0000CA88 00019818 80 7D 00 00 */ lwz r3, 0x0(r29) +/* 0000CA8C 0001981C 3C 80 00 00 */ lis r4, _IHandle__8IVehicle@ha +/* 0000CA90 00019820 38 84 00 00 */ addi r4, r4, _IHandle__8IVehicle@l +/* 0000CA94 00019824 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000CA98 00019828 38 00 00 01 */ li r0, 0x1 +/* 0000CA9C 0001982C 90 7F 00 40 */ stw r3, 0x40(r31) +/* 0000CAA0 00019830 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000CAA4 00019834 40 82 CA AC */ bne .L_00009550 +/* 0000CAA8 00019838 38 00 00 00 */ li r0, 0x0 +/* 0000CAAC 0001983C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000CAB0 00019840 41 82 CB 28 */ beq .L_000095D8 +/* 0000CAB4 00019844 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 0000CAB8 00019848 7C 64 1B 78 */ mr r4, r3 +/* 0000CABC 0001984C 38 1F 00 18 */ addi r0, r31, 0x18 +/* 0000CAC0 00019850 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000CAC4 00019854 81 29 00 14 */ lwz r9, 0x14(r9) +/* 0000CAC8 00019858 7C 60 1A 14 */ add r3, r0, r3 +/* 0000CACC 0001985C 7D 28 03 A6 */ mtlr r9 +/* 0000CAD0 00019860 4E 80 00 21 */ blrl +/* 0000CAD4 00019864 81 7F 00 40 */ lwz r11, 0x40(r31) +/* 0000CAD8 00019868 83 DF 00 24 */ lwz r30, 0x24(r31) +/* 0000CADC 0001986C 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000CAE0 00019870 A8 69 00 98 */ lha r3, 0x98(r9) +/* 0000CAE4 00019874 80 09 00 9C */ lwz r0, 0x9c(r9) +/* 0000CAE8 00019878 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000CAEC 0001987C 7C 08 03 A6 */ mtlr r0 +/* 0000CAF0 00019880 4E 80 00 21 */ blrl +/* 0000CAF4 00019884 81 23 00 08 */ lwz r9, 0x8(r3) +/* 0000CAF8 00019888 80 69 00 1C */ lwz r3, 0x1c(r9) +/* 0000CAFC 0001988C 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000CB00 00019890 40 82 CB 0C */ bne .L_0000960C +.L_0000CB04: +/* 0000CB04 00019894 3D 20 00 00 */ lis r9, .rodata@ha +.L_0000CB08: +/* 0000CB08 00019898 38 69 00 00 */ addi r3, r9, .rodata@l +/* 0000CB0C 0001989C 48 00 00 01 */ bl bStringHash__FPCc +/* 0000CB10 000198A0 7C 64 1B 78 */ mr r4, r3 +/* 0000CB14 000198A4 7F C3 F3 78 */ mr r3, r30 +/* 0000CB18 000198A8 48 00 13 CD */ bl .L_0000DEE4 +/* 0000CB1C 000198AC 81 3F 00 24 */ lwz r9, 0x24(r31) +/* 0000CB20 000198B0 80 1F 00 28 */ lwz r0, 0x28(r31) +/* 0000CB24 000198B4 90 09 00 8C */ stw r0, 0x8c(r9) +/* 0000CB28 000198B8 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0000CB2C 000198BC 7C 08 03 A6 */ mtlr r0 +/* 0000CB30 000198C0 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 0000CB34 000198C4 38 21 00 18 */ addi r1, r1, 0x18 +/* 0000CB38 000198C8 4E 80 00 20 */ blr +.endfn AquireCar__16CDActionShowcase + +# .text:0xCB3C | size: 0x1B8 +.fn Update__16CDActionShowcasef, global +/* 0000CB3C 000198CC 94 21 FF 90 */ stwu r1, -0x70(r1) +/* 0000CB40 000198D0 7C 08 02 A6 */ mflr r0 +/* 0000CB44 000198D4 F3 E1 00 68 */ psq_st f31, 0x68(r1), 0, qr0 +/* 0000CB48 000198D8 BF 81 00 58 */ stmw r28, 0x58(r1) +/* 0000CB4C 000198DC 90 01 00 74 */ stw r0, 0x74(r1) +/* 0000CB50 000198E0 7C 7F 1B 78 */ mr r31, r3 +/* 0000CB54 000198E4 FF E0 08 90 */ fmr f31, f1 +/* 0000CB58 000198E8 83 DF 00 38 */ lwz r30, 0x38(r31) +/* 0000CB5C 000198EC 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 0000CB60 000198F0 40 82 CB 94 */ bne .L_000096F4 +/* 0000CB64 000198F4 80 9F 00 40 */ lwz r4, 0x40(r31) +/* 0000CB68 000198F8 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0000CB6C 000198FC 41 82 CC DC */ beq .L_00009848 +/* 0000CB70 00019900 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 0000CB74 00019904 38 1F 00 18 */ addi r0, r31, 0x18 +/* 0000CB78 00019908 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000CB7C 0001990C 81 29 00 1C */ lwz r9, 0x1c(r9) +/* 0000CB80 00019910 7C 60 1A 14 */ add r3, r0, r3 +/* 0000CB84 00019914 7D 28 03 A6 */ mtlr r9 +/* 0000CB88 00019918 4E 80 00 21 */ blrl +/* 0000CB8C 0001991C 93 DF 00 40 */ stw r30, 0x40(r31) +/* 0000CB90 00019920 48 00 CC DC */ b .L_0001986C +/* 0000CB94 00019924 7F E3 FB 78 */ mr r3, r31 +/* 0000CB98 00019928 48 00 C9 65 */ bl .L_000194FC +/* 0000CB9C 0001992C 80 7F 00 2C */ lwz r3, 0x2c(r31) +/* 0000CBA0 00019930 38 00 00 01 */ li r0, 0x1 +/* 0000CBA4 00019934 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000CBA8 00019938 40 82 CB B0 */ bne .L_00009758 +/* 0000CBAC 0001993C 38 00 00 00 */ li r0, 0x0 +/* 0000CBB0 00019940 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000CBB4 00019944 41 82 CC DC */ beq .L_00009890 +/* 0000CBB8 00019948 38 81 00 08 */ addi r4, r1, 0x8 +/* 0000CBBC 0001994C 48 00 00 01 */ bl PSMTX44Copy +/* 0000CBC0 00019950 80 7F 00 40 */ lwz r3, 0x40(r31) +.L_0000CBC4: +/* 0000CBC4 00019954 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000CBC8 00019958 41 82 CC C4 */ beq .L_0000988C +/* 0000CBCC 0001995C 80 63 00 00 */ lwz r3, 0x0(r3) +/* 0000CBD0 00019960 3C 80 00 00 */ lis r4, _IHandle__14ICollisionBody@ha +.L_0000CBD4: +/* 0000CBD4 00019964 38 84 00 00 */ addi r4, r4, _IHandle__14ICollisionBody@l +/* 0000CBD8 00019968 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000CBDC 0001996C 7C 7C 1B 79 */ mr. r28, r3 +/* 0000CBE0 00019970 38 00 00 01 */ li r0, 0x1 +/* 0000CBE4 00019974 40 82 CB EC */ bne .L_000097D0 +/* 0000CBE8 00019978 38 00 00 00 */ li r0, 0x0 +/* 0000CBEC 0001997C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000CBF0 00019980 41 82 CC C4 */ beq .L_000098B4 +/* 0000CBF4 00019984 81 7F 00 40 */ lwz r11, 0x40(r31) +/* 0000CBF8 00019988 3B A1 00 48 */ addi r29, r1, 0x48 +/* 0000CBFC 0001998C 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000CC00 00019990 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0000CC04 00019994 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000CC08 00019998 7C 08 03 A6 */ mtlr r0 +/* 0000CC0C 0001999C 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000CC10 000199A0 4E 80 00 21 */ blrl +/* 0000CC14 000199A4 81 23 00 04 */ lwz r9, 0x4(r3) +/* 0000CC18 000199A8 A8 09 00 A8 */ lha r0, 0xa8(r9) +/* 0000CC1C 000199AC 81 29 00 AC */ lwz r9, 0xac(r9) +/* 0000CC20 000199B0 7C 63 02 14 */ add r3, r3, r0 +/* 0000CC24 000199B4 7D 28 03 A6 */ mtlr r9 +/* 0000CC28 000199B8 4E 80 00 21 */ blrl +/* 0000CC2C 000199BC 81 3C 00 04 */ lwz r9, 0x4(r28) +/* 0000CC30 000199C0 7C 7E 1B 78 */ mr r30, r3 +/* 0000CC34 000199C4 80 09 00 84 */ lwz r0, 0x84(r9) +/* 0000CC38 000199C8 A8 69 00 80 */ lha r3, 0x80(r9) +/* 0000CC3C 000199CC 7C 08 03 A6 */ mtlr r0 +/* 0000CC40 000199D0 7C 7C 1A 14 */ add r3, r28, r3 +/* 0000CC44 000199D4 4E 80 00 21 */ blrl +/* 0000CC48 000199D8 C1 A3 00 00 */ lfs f13, 0x0(r3) +/* 0000CC4C 000199DC 7F A4 EB 78 */ mr r4, r29 +/* 0000CC50 000199E0 38 A0 00 00 */ li r5, 0x0 +/* 0000CC54 000199E4 D1 A1 00 48 */ stfs f13, 0x48(r1) +/* 0000CC58 000199E8 C0 03 00 04 */ lfs f0, 0x4(r3) +/* 0000CC5C 000199EC D0 01 00 4C */ stfs f0, 0x4c(r1) +/* 0000CC60 000199F0 C1 A3 00 08 */ lfs f13, 0x8(r3) +/* 0000CC64 000199F4 D1 A1 00 50 */ stfs f13, 0x50(r1) +/* 0000CC68 000199F8 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000CC6C 000199FC 80 09 01 4C */ lwz r0, 0x14c(r9) +/* 0000CC70 00019A00 A8 69 01 48 */ lha r3, 0x148(r9) +/* 0000CC74 00019A04 7C 08 03 A6 */ mtlr r0 +/* 0000CC78 00019A08 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000CC7C 00019A0C 4E 80 00 21 */ blrl +/* 0000CC80 00019A10 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000CC84 00019A14 A8 69 00 48 */ lha r3, 0x48(r9) +/* 0000CC88 00019A18 80 09 00 4C */ lwz r0, 0x4c(r9) +/* 0000CC8C 00019A1C 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000CC90 00019A20 7C 08 03 A6 */ mtlr r0 +/* 0000CC94 00019A24 4E 80 00 21 */ blrl +/* 0000CC98 00019A28 7C 64 1B 78 */ mr r4, r3 +/* 0000CC9C 00019A2C 7F A3 EB 78 */ mr r3, r29 +/* 0000CCA0 00019A30 7C 65 1B 78 */ mr r5, r3 +/* 0000CCA4 00019A34 48 00 00 01 */ bl VU0_v3add__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 +/* 0000CCA8 00019A38 C0 01 00 48 */ lfs f0, 0x48(r1) +/* 0000CCAC 00019A3C C1 A1 00 50 */ lfs f13, 0x50(r1) +.L_0000CCB0: +/* 0000CCB0 00019A40 C1 81 00 4C */ lfs f12, 0x4c(r1) +/* 0000CCB4 00019A44 FC 00 00 50 */ fneg f0, f0 +/* 0000CCB8 00019A48 D1 A1 00 38 */ stfs f13, 0x38(r1) +/* 0000CCBC 00019A4C D0 01 00 3C */ stfs f0, 0x3c(r1) +/* 0000CCC0 00019A50 D1 81 00 40 */ stfs f12, 0x40(r1) +/* 0000CCC4 00019A54 80 DF 00 34 */ lwz r6, 0x34(r31) +.L_0000CCC8: +/* 0000CCC8 00019A58 FC 20 F8 90 */ fmr f1, f31 +/* 0000CCCC 00019A5C 80 7F 00 24 */ lwz r3, 0x24(r31) +/* 0000CCD0 00019A60 38 81 00 08 */ addi r4, r1, 0x8 +/* 0000CCD4 00019A64 80 BF 00 30 */ lwz r5, 0x30(r31) +.L_0000CCD8: +/* 0000CCD8 00019A68 48 00 17 65 */ bl .L_0000E43C +/* 0000CCDC 00019A6C 80 01 00 74 */ lwz r0, 0x74(r1) +/* 0000CCE0 00019A70 7C 08 03 A6 */ mtlr r0 +/* 0000CCE4 00019A74 BB 81 00 58 */ lmw r28, 0x58(r1) +.L_0000CCE8: +/* 0000CCE8 00019A78 E3 E1 00 68 */ psq_l f31, 0x68(r1), 0, qr0 +/* 0000CCEC 00019A7C 38 21 00 70 */ addi r1, r1, 0x70 +/* 0000CCF0 00019A80 4E 80 00 20 */ blr +.endfn Update__16CDActionShowcasef + +# .text:0xCCF4 | size: 0x74 +.fn GetName__C13CDActionDebug, global +/* 0000CCF4 00019A84 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0000CCF8 00019A88 7C 08 02 A6 */ mflr r0 +/* 0000CCFC 00019A8C BF A1 00 0C */ stmw r29, 0xc(r1) +/* 0000CD00 00019A90 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0000CD04 00019A94 3F E0 00 00 */ lis r31, _.tmp_11.11106@ha +/* 0000CD08 00019A98 80 1F 00 00 */ lwz r0, _.tmp_11.11106@l(r31) +/* 0000CD0C 00019A9C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000CD10 00019AA0 40 82 CD 4C */ bne .L_00009A5C +.L_0000CD14: +/* 0000CD14 00019AA4 3F C0 00 00 */ lis r30, .rodata+0x8D8@ha +/* 0000CD18 00019AA8 3F A0 00 00 */ lis r29, name.11105@ha +/* 0000CD1C 00019AAC 3B DE 08 D8 */ addi r30, r30, .rodata+0x8D8@l +.L_0000CD20: +/* 0000CD20 00019AB0 3B BD 00 00 */ addi r29, r29, name.11105@l +/* 0000CD24 00019AB4 7F C3 F3 78 */ mr r3, r30 +/* 0000CD28 00019AB8 48 00 00 01 */ bl StringHash64__6AttribPCc +/* 0000CD2C 00019ABC 90 7D 00 00 */ stw r3, 0x0(r29) +/* 0000CD30 00019AC0 90 9D 00 04 */ stw r4, 0x4(r29) +/* 0000CD34 00019AC4 7F C3 F3 78 */ mr r3, r30 +/* 0000CD38 00019AC8 48 00 00 01 */ bl StringHash32__6AttribPCc +/* 0000CD3C 00019ACC 38 00 00 01 */ li r0, 0x1 +.L_0000CD40: +/* 0000CD40 00019AD0 93 DD 00 0C */ stw r30, 0xc(r29) +/* 0000CD44 00019AD4 90 1F 00 00 */ stw r0, _.tmp_11.11106@l(r31) +.L_0000CD48: +/* 0000CD48 00019AD8 90 7D 00 08 */ stw r3, 0x8(r29) +/* 0000CD4C 00019ADC 3C 60 00 00 */ lis r3, name.11105@ha +/* 0000CD50 00019AE0 38 63 00 00 */ addi r3, r3, name.11105@l +.L_0000CD54: +/* 0000CD54 00019AE4 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0000CD58 00019AE8 7C 08 03 A6 */ mtlr r0 +/* 0000CD5C 00019AEC BB A1 00 0C */ lmw r29, 0xc(r1) +.L_0000CD60: +/* 0000CD60 00019AF0 38 21 00 18 */ addi r1, r1, 0x18 +/* 0000CD64 00019AF4 4E 80 00 20 */ blr +.endfn GetName__C13CDActionDebug + +# .text:0xCD68 | size: 0x84 +.fn GetNext__C13CDActionDebug, global +/* 0000CD68 00019AF8 94 21 FF F0 */ stwu r1, -0x10(r1) +.L_0000CD6C: +/* 0000CD6C 00019AFC 7C 08 02 A6 */ mflr r0 +/* 0000CD70 00019B00 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 0000CD74 00019B04 90 01 00 14 */ stw r0, 0x14(r1) +/* 0000CD78 00019B08 80 04 02 C8 */ lwz r0, 0x2c8(r4) +/* 0000CD7C 00019B0C 7C 7F 1B 78 */ mr r31, r3 +/* 0000CD80 00019B10 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000CD84 00019B14 41 82 CD AC */ beq .L_00009B30 +/* 0000CD88 00019B18 81 24 02 B8 */ lwz r9, 0x2b8(r4) +/* 0000CD8C 00019B1C 81 44 02 BC */ lwz r10, 0x2bc(r4) +/* 0000CD90 00019B20 91 3F 00 00 */ stw r9, 0x0(r31) +/* 0000CD94 00019B24 91 5F 00 04 */ stw r10, 0x4(r31) +/* 0000CD98 00019B28 80 04 02 C0 */ lwz r0, 0x2c0(r4) +/* 0000CD9C 00019B2C 90 1F 00 08 */ stw r0, 0x8(r31) +/* 0000CDA0 00019B30 81 24 02 C4 */ lwz r9, 0x2c4(r4) +/* 0000CDA4 00019B34 91 3F 00 0C */ stw r9, 0xc(r31) +/* 0000CDA8 00019B38 48 00 CD D4 */ b .L_00019B7C +/* 0000CDAC 00019B3C 3F C0 00 00 */ lis r30, .rodata@ha +/* 0000CDB0 00019B40 3B DE 00 00 */ addi r30, r30, .rodata@l +/* 0000CDB4 00019B44 7F C3 F3 78 */ mr r3, r30 +.L_0000CDB8: +/* 0000CDB8 00019B48 48 00 00 01 */ bl StringHash64__6AttribPCc +/* 0000CDBC 00019B4C 90 7F 00 00 */ stw r3, 0x0(r31) +/* 0000CDC0 00019B50 90 9F 00 04 */ stw r4, 0x4(r31) +.L_0000CDC4: +/* 0000CDC4 00019B54 7F C3 F3 78 */ mr r3, r30 +/* 0000CDC8 00019B58 48 00 00 01 */ bl StringHash32__6AttribPCc +/* 0000CDCC 00019B5C 90 7F 00 08 */ stw r3, 0x8(r31) +/* 0000CDD0 00019B60 93 DF 00 0C */ stw r30, 0xc(r31) +/* 0000CDD4 00019B64 7F E3 FB 78 */ mr r3, r31 +/* 0000CDD8 00019B68 80 01 00 14 */ lwz r0, 0x14(r1) +/* 0000CDDC 00019B6C 7C 08 03 A6 */ mtlr r0 +/* 0000CDE0 00019B70 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 0000CDE4 00019B74 38 21 00 10 */ addi r1, r1, 0x10 +/* 0000CDE8 00019B78 4E 80 00 20 */ blr +.endfn GetNext__C13CDActionDebug + +# .text:0xCDEC | size: 0x44 +.fn Construct__13CDActionDebugPQ28CameraAI8Director, global +/* 0000CDEC 00019B7C 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 0000CDF0 00019B80 7C 08 02 A6 */ mflr r0 +/* 0000CDF4 00019B84 BF C1 00 08 */ stmw r30, 0x8(r1) +.L_0000CDF8: +/* 0000CDF8 00019B88 90 01 00 14 */ stw r0, 0x14(r1) +.L_0000CDFC: +/* 0000CDFC 00019B8C 7C 7E 1B 78 */ mr r30, r3 +/* 0000CE00 00019B90 38 80 02 D0 */ li r4, 0x2d0 +/* 0000CE04 00019B94 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0000CE08 00019B98 38 A0 00 00 */ li r5, 0x0 +/* 0000CE0C 00019B9C 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0000CE10 00019BA0 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 0000CE14 00019BA4 7F C4 F3 78 */ mr r4, r30 +/* 0000CE18 00019BA8 48 00 CE 31 */ bl .L_00019C48 +/* 0000CE1C 00019BAC 80 01 00 14 */ lwz r0, 0x14(r1) +/* 0000CE20 00019BB0 7C 08 03 A6 */ mtlr r0 +/* 0000CE24 00019BB4 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 0000CE28 00019BB8 38 21 00 10 */ addi r1, r1, 0x10 +/* 0000CE2C 00019BBC 4E 80 00 20 */ blr +.endfn Construct__13CDActionDebugPQ28CameraAI8Director + +# .text:0xCE30 | size: 0x2C8 +.fn __13CDActionDebugPQ28CameraAI8Director, global +/* 0000CE30 00019BC0 94 21 FF A0 */ stwu r1, -0x60(r1) +/* 0000CE34 00019BC4 7C 08 02 A6 */ mflr r0 +.L_0000CE38: +/* 0000CE38 00019BC8 7D 80 00 26 */ mfcr r12 +/* 0000CE3C 00019BCC BE A1 00 34 */ stmw r21, 0x34(r1) +/* 0000CE40 00019BD0 90 01 00 64 */ stw r0, 0x64(r1) +/* 0000CE44 00019BD4 91 81 00 30 */ stw r12, 0x30(r1) +/* 0000CE48 00019BD8 7C 7D 1B 78 */ mr r29, r3 +/* 0000CE4C 00019BDC 7C 97 23 78 */ mr r23, r4 +/* 0000CE50 00019BE0 38 80 00 00 */ li r4, 0x0 +.L_0000CE54: +/* 0000CE54 00019BE4 48 00 00 01 */ bl __Q43UTL3COM6Object6_IListUi +/* 0000CE58 00019BE8 3A DD 00 18 */ addi r22, r29, 0x18 +/* 0000CE5C 00019BEC 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha +/* 0000CE60 00019BF0 92 C1 00 28 */ stw r22, 0x28(r1) +/* 0000CE64 00019BF4 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l +/* 0000CE68 00019BF8 3F 20 00 00 */ lis r25, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha +/* 0000CE6C 00019BFC 91 3D 00 14 */ stw r9, 0x14(r29) +/* 0000CE70 00019C00 3B F9 00 00 */ addi r31, r25, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l +/* 0000CE74 00019C04 3A A1 00 28 */ addi r21, r1, 0x28 +/* 0000CE78 00019C08 3B 41 00 18 */ addi r26, r1, 0x18 +/* 0000CE7C 00019C0C 80 9F 00 08 */ lwz r4, 0x8(r31) +/* 0000CE80 00019C10 80 1F 00 04 */ lwz r0, 0x4(r31) +/* 0000CE84 00019C14 7C 04 00 40 */ cmplw r4, r0 +/* 0000CE88 00019C18 41 80 CF 68 */ blt .L_00009DF0 +/* 0000CE8C 00019C1C 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0000CE90 00019C20 38 84 00 01 */ addi r4, r4, 0x1 +/* 0000CE94 00019C24 80 09 00 24 */ lwz r0, 0x24(r9) +/* 0000CE98 00019C28 A8 69 00 20 */ lha r3, 0x20(r9) +/* 0000CE9C 00019C2C 7C 08 03 A6 */ mtlr r0 +/* 0000CEA0 00019C30 7C 63 FA 14 */ add r3, r3, r31 +/* 0000CEA4 00019C34 4E 80 00 21 */ blrl +/* 0000CEA8 00019C38 80 1F 00 04 */ lwz r0, 0x4(r31) +/* 0000CEAC 00019C3C 7C 7E 1B 78 */ mr r30, r3 +/* 0000CEB0 00019C40 7C 1E 00 40 */ cmplw r30, r0 +/* 0000CEB4 00019C44 40 81 CF 68 */ ble .L_00009E1C +/* 0000CEB8 00019C48 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0000CEBC 00019C4C 7F C4 F3 78 */ mr r4, r30 +/* 0000CEC0 00019C50 80 09 00 34 */ lwz r0, 0x34(r9) +/* 0000CEC4 00019C54 A8 69 00 30 */ lha r3, 0x30(r9) +/* 0000CEC8 00019C58 7C 08 03 A6 */ mtlr r0 +/* 0000CECC 00019C5C 7C 63 FA 14 */ add r3, r3, r31 +/* 0000CED0 00019C60 4E 80 00 21 */ blrl +/* 0000CED4 00019C64 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0000CED8 00019C68 7F C4 F3 78 */ mr r4, r30 +/* 0000CEDC 00019C6C 38 A0 00 10 */ li r5, 0x10 +/* 0000CEE0 00019C70 83 99 00 00 */ lwz r28, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r25) +/* 0000CEE4 00019C74 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000CEE8 00019C78 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000CEEC 00019C7C 7C 63 FA 14 */ add r3, r3, r31 +/* 0000CEF0 00019C80 83 7F 00 08 */ lwz r27, 0x8(r31) +/* 0000CEF4 00019C84 7C 08 03 A6 */ mtlr r0 +/* 0000CEF8 00019C88 83 1F 00 04 */ lwz r24, 0x4(r31) +/* 0000CEFC 00019C8C 4E 80 00 21 */ blrl +/* 0000CF00 00019C90 93 DF 00 04 */ stw r30, 0x4(r31) +/* 0000CF04 00019C94 7C 1C 18 00 */ cmpw r28, r3 +/* 0000CF08 00019C98 90 79 00 00 */ stw r3, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r25) +/* 0000CF0C 00019C9C 41 82 CF 68 */ beq .L_00009E74 +/* 0000CF10 00019CA0 38 00 00 00 */ li r0, 0x0 +/* 0000CF14 00019CA4 3B C0 00 00 */ li r30, 0x0 +/* 0000CF18 00019CA8 90 1F 00 08 */ stw r0, 0x8(r31) +/* 0000CF1C 00019CAC 7C 1E D8 00 */ cmpw r30, r27 +/* 0000CF20 00019CB0 2E 1C 00 00 */ cmpwi cr4, r28, 0x0 +/* 0000CF24 00019CB4 40 80 CF 44 */ bge .L_00009E68 +/* 0000CF28 00019CB8 57 C4 10 3A */ slwi r4, r30, 2 +/* 0000CF2C 00019CBC 7F E3 FB 78 */ mr r3, r31 +/* 0000CF30 00019CC0 7C 9C 22 14 */ add r4, r28, r4 +/* 0000CF34 00019CC4 3B DE 00 01 */ addi r30, r30, 0x1 +/* 0000CF38 00019CC8 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZP14ITrafficCenteri16RCP14ITrafficCenter +/* 0000CF3C 00019CCC 7C 1E D8 00 */ cmpw r30, r27 +/* 0000CF40 00019CD0 41 80 CF 28 */ blt .L_00009E68 +/* 0000CF44 00019CD4 41 92 CF 68 */ beq cr4, .L_00009EAC +/* 0000CF48 00019CD8 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0000CF4C 00019CDC 7F 84 E3 78 */ mr r4, r28 +/* 0000CF50 00019CE0 7F 05 C3 78 */ mr r5, r24 +.L_0000CF54: +/* 0000CF54 00019CE4 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000CF58 00019CE8 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0000CF5C 00019CEC 7C 7F 1A 14 */ add r3, r31, r3 +/* 0000CF60 00019CF0 7C 08 03 A6 */ mtlr r0 +/* 0000CF64 00019CF4 4E 80 00 21 */ blrl +/* 0000CF68 00019CF8 81 3F 00 08 */ lwz r9, 0x8(r31) +/* 0000CF6C 00019CFC 81 7F 00 00 */ lwz r11, 0x0(r31) +/* 0000CF70 00019D00 55 29 10 3A */ slwi r9, r9, 2 +.L_0000CF74: +/* 0000CF74 00019D04 7C 09 5A 14 */ add r0, r9, r11 +/* 0000CF78 00019D08 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000CF7C 00019D0C 41 82 CF 88 */ beq .L_00009F04 +/* 0000CF80 00019D10 80 15 00 00 */ lwz r0, 0x0(r21) +/* 0000CF84 00019D14 7C 09 59 2E */ stwx r0, r9, r11 +/* 0000CF88 00019D18 81 3F 00 08 */ lwz r9, 0x8(r31) +/* 0000CF8C 00019D1C 3D 60 00 00 */ lis r11, _vt.14ITrafficCenter@ha +/* 0000CF90 00019D20 39 6B 00 00 */ addi r11, r11, _vt.14ITrafficCenter@l +.L_0000CF94: +/* 0000CF94 00019D24 3D 00 00 00 */ lis r8, _vt.13CDActionDebug.14ITrafficCenter@ha +/* 0000CF98 00019D28 39 29 00 01 */ addi r9, r9, 0x1 +/* 0000CF9C 00019D2C 3D 40 00 00 */ lis r10, _vt.13CDActionDebug@ha +/* 0000CFA0 00019D30 91 3F 00 08 */ stw r9, 0x8(r31) +/* 0000CFA4 00019D34 39 08 00 00 */ addi r8, r8, _vt.13CDActionDebug.14ITrafficCenter@l +/* 0000CFA8 00019D38 91 76 00 04 */ stw r11, 0x4(r22) +/* 0000CFAC 00019D3C 39 4A 00 00 */ addi r10, r10, _vt.13CDActionDebug@l +.L_0000CFB0: +/* 0000CFB0 00019D40 3C C0 00 00 */ lis r6, .rodata+0x8E0@ha +/* 0000CFB4 00019D44 3C A0 98 C7 */ lis r5, 0x98c7 +/* 0000CFB8 00019D48 38 C6 08 E0 */ addi r6, r6, .rodata+0x8E0@l +/* 0000CFBC 00019D4C 91 1D 00 1C */ stw r8, 0x1c(r29) +/* 0000CFC0 00019D50 38 80 00 01 */ li r4, 0x1 +/* 0000CFC4 00019D54 60 A5 A2 F5 */ ori r5, r5, 0xa2f5 +/* 0000CFC8 00019D58 38 E0 00 00 */ li r7, 0x0 +/* 0000CFCC 00019D5C 91 5D 00 14 */ stw r10, 0x14(r29) +/* 0000CFD0 00019D60 38 7D 00 20 */ addi r3, r29, 0x20 +/* 0000CFD4 00019D64 48 00 00 01 */ bl __11ActionQueueiUiPCcb +/* 0000CFD8 00019D68 3D 60 00 00 */ lis r11, .rodata@ha +.L_0000CFDC: +/* 0000CFDC 00019D6C 39 20 00 00 */ li r9, 0x0 +/* 0000CFE0 00019D70 39 40 00 00 */ li r10, 0x0 +/* 0000CFE4 00019D74 38 00 00 00 */ li r0, 0x0 +/* 0000CFE8 00019D78 39 6B 00 00 */ addi r11, r11, .rodata@l +/* 0000CFEC 00019D7C 91 3D 02 B8 */ stw r9, 0x2b8(r29) +/* 0000CFF0 00019D80 91 5D 02 BC */ stw r10, 0x2bc(r29) +/* 0000CFF4 00019D84 91 7D 02 C4 */ stw r11, 0x2c4(r29) +/* 0000CFF8 00019D88 90 1D 02 C8 */ stw r0, 0x2c8(r29) +/* 0000CFFC 00019D8C 90 1D 02 C0 */ stw r0, 0x2c0(r29) +/* 0000D000 00019D90 81 77 00 18 */ lwz r11, 0x18(r23) +/* 0000D004 00019D94 81 2B 00 14 */ lwz r9, 0x14(r11) +/* 0000D008 00019D98 80 09 00 24 */ lwz r0, 0x24(r9) +.L_0000D00C: +/* 0000D00C 00019D9C A8 69 00 20 */ lha r3, 0x20(r9) +/* 0000D010 00019DA0 7C 08 03 A6 */ mtlr r0 +/* 0000D014 00019DA4 7C 6B 1A 14 */ add r3, r11, r3 +.L_0000D018: +/* 0000D018 00019DA8 4E 80 00 21 */ blrl +/* 0000D01C 00019DAC 7C 6B 1B 78 */ mr r11, r3 +/* 0000D020 00019DB0 80 0B 00 0C */ lwz r0, 0xc(r11) +/* 0000D024 00019DB4 7E E3 BB 78 */ mr r3, r23 +.L_0000D028: +/* 0000D028 00019DB8 90 1D 02 C4 */ stw r0, 0x2c4(r29) +/* 0000D02C 00019DBC 81 2B 00 00 */ lwz r9, 0x0(r11) +/* 0000D030 00019DC0 81 4B 00 04 */ lwz r10, 0x4(r11) +.L_0000D034: +/* 0000D034 00019DC4 91 3D 02 B8 */ stw r9, 0x2b8(r29) +/* 0000D038 00019DC8 91 5D 02 BC */ stw r10, 0x2bc(r29) +/* 0000D03C 00019DCC 80 0B 00 08 */ lwz r0, 0x8(r11) +/* 0000D040 00019DD0 90 1D 02 C0 */ stw r0, 0x2c0(r29) +/* 0000D044 00019DD4 48 00 60 85 */ bl .L_000130C8 +/* 0000D048 00019DD8 7C 63 1B 79 */ mr. r3, r3 +/* 0000D04C 00019DDC 41 82 D0 8C */ beq .L_0000A0D8 +/* 0000D050 00019DE0 81 23 00 1C */ lwz r9, 0x1c(r3) +/* 0000D054 00019DE4 C1 89 00 48 */ lfs f12, 0x48(r9) +/* 0000D058 00019DE8 C0 09 00 40 */ lfs f0, 0x40(r9) +/* 0000D05C 00019DEC C1 A9 00 44 */ lfs f13, 0x44(r9) +/* 0000D060 00019DF0 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 0000D064 00019DF4 D1 A1 00 0C */ stfs f13, 0xc(r1) +/* 0000D068 00019DF8 D1 81 00 10 */ stfs f12, 0x10(r1) +.L_0000D06C: +/* 0000D06C 00019DFC 81 23 00 1C */ lwz r9, 0x1c(r3) +/* 0000D070 00019E00 C1 89 00 58 */ lfs f12, 0x58(r9) +/* 0000D074 00019E04 C0 09 00 50 */ lfs f0, 0x50(r9) +/* 0000D078 00019E08 C1 A9 00 54 */ lfs f13, 0x54(r9) +/* 0000D07C 00019E0C D0 01 00 18 */ stfs f0, 0x18(r1) +/* 0000D080 00019E10 D1 A1 00 1C */ stfs f13, 0x1c(r1) +/* 0000D084 00019E14 D1 81 00 20 */ stfs f12, 0x20(r1) +/* 0000D088 00019E18 48 00 D0 B4 */ b .L_0001A13C +/* 0000D08C 00019E1C 3D 20 00 00 */ lis r9, .rodata+0x8EC@ha +/* 0000D090 00019E20 3D 60 00 00 */ lis r11, .rodata+0x8F0@ha +/* 0000D094 00019E24 C0 09 08 EC */ lfs f0, .rodata+0x8EC@l(r9) +.L_0000D098: +/* 0000D098 00019E28 C1 AB 08 F0 */ lfs f13, .rodata+0x8F0@l(r11) +/* 0000D09C 00019E2C D0 01 00 1C */ stfs f0, 0x1c(r1) +/* 0000D0A0 00019E30 D1 A1 00 20 */ stfs f13, 0x20(r1) +/* 0000D0A4 00019E34 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 0000D0A8 00019E38 D0 01 00 0C */ stfs f0, 0xc(r1) +/* 0000D0AC 00019E3C D0 01 00 10 */ stfs f0, 0x10(r1) +/* 0000D0B0 00019E40 D0 01 00 18 */ stfs f0, 0x18(r1) +/* 0000D0B4 00019E44 83 D7 00 04 */ lwz r30, 0x4(r23) +/* 0000D0B8 00019E48 38 60 00 A8 */ li r3, 0xa8 +/* 0000D0BC 00019E4C 48 00 00 01 */ bl __builtin_new +/* 0000D0C0 00019E50 7F C4 F3 78 */ mr r4, r30 +.L_0000D0C4: +/* 0000D0C4 00019E54 7F 46 D3 78 */ mr r6, r26 +/* 0000D0C8 00019E58 38 A1 00 08 */ addi r5, r1, 0x8 +/* 0000D0CC 00019E5C 7C 87 23 78 */ mr r7, r4 +/* 0000D0D0 00019E60 48 01 28 5D */ bl .text+0x1285C +/* 0000D0D4 00019E64 90 7D 02 B4 */ stw r3, 0x2b4(r29) +/* 0000D0D8 00019E68 7F A3 EB 78 */ mr r3, r29 +/* 0000D0DC 00019E6C 80 01 00 64 */ lwz r0, 0x64(r1) +/* 0000D0E0 00019E70 81 81 00 30 */ lwz r12, 0x30(r1) +/* 0000D0E4 00019E74 7C 08 03 A6 */ mtlr r0 +/* 0000D0E8 00019E78 BA A1 00 34 */ lmw r21, 0x34(r1) +/* 0000D0EC 00019E7C 7D 80 81 20 */ mtcrf 8, r12 +/* 0000D0F0 00019E80 38 21 00 60 */ addi r1, r1, 0x60 +/* 0000D0F4 00019E84 4E 80 00 20 */ blr +.endfn __13CDActionDebugPQ28CameraAI8Director + +# .text:0xD0F8 | size: 0x1C8 +.fn _._13CDActionDebug, global +/* 0000D0F8 00019E88 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 0000D0FC 00019E8C 7C 08 02 A6 */ mflr r0 +/* 0000D100 00019E90 BF 81 00 10 */ stmw r28, 0x10(r1) +.L_0000D104: +/* 0000D104 00019E94 90 01 00 24 */ stw r0, 0x24(r1) +/* 0000D108 00019E98 7C 7E 1B 78 */ mr r30, r3 +/* 0000D10C 00019E9C 3D 60 00 00 */ lis r11, _vt.13CDActionDebug.14ITrafficCenter@ha +/* 0000D110 00019EA0 81 5E 02 B4 */ lwz r10, 0x2b4(r30) +/* 0000D114 00019EA4 3D 20 00 00 */ lis r9, _vt.13CDActionDebug@ha +/* 0000D118 00019EA8 39 6B 00 00 */ addi r11, r11, _vt.13CDActionDebug.14ITrafficCenter@l +/* 0000D11C 00019EAC 39 29 00 00 */ addi r9, r9, _vt.13CDActionDebug@l +/* 0000D120 00019EB0 3B FE 00 18 */ addi r31, r30, 0x18 +/* 0000D124 00019EB4 7C 9C 23 78 */ mr r28, r4 +/* 0000D128 00019EB8 91 7E 00 1C */ stw r11, 0x1c(r30) +.L_0000D12C: +/* 0000D12C 00019EBC 2C 0A 00 00 */ cmpwi r10, 0x0 +/* 0000D130 00019EC0 91 3E 00 14 */ stw r9, 0x14(r30) +/* 0000D134 00019EC4 41 82 D1 54 */ beq .L_0000A288 +/* 0000D138 00019EC8 81 2A 00 08 */ lwz r9, 0x8(r10) +/* 0000D13C 00019ECC 38 80 00 03 */ li r4, 0x3 +/* 0000D140 00019ED0 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000D144 00019ED4 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000D148 00019ED8 7C 6A 1A 14 */ add r3, r10, r3 +/* 0000D14C 00019EDC 7C 08 03 A6 */ mtlr r0 +/* 0000D150 00019EE0 4E 80 00 21 */ blrl +/* 0000D154 00019EE4 38 7E 00 20 */ addi r3, r30, 0x20 +/* 0000D158 00019EE8 38 80 00 02 */ li r4, 0x2 +/* 0000D15C 00019EEC 48 00 00 01 */ bl _._11ActionQueue +/* 0000D160 00019EF0 3D 20 00 00 */ lis r9, _vt.14ITrafficCenter@ha +/* 0000D164 00019EF4 3D 40 00 00 */ lis r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha +/* 0000D168 00019EF8 39 29 00 00 */ addi r9, r9, _vt.14ITrafficCenter@l +/* 0000D16C 00019EFC 39 6A 00 00 */ addi r11, r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l +/* 0000D170 00019F00 91 3E 00 1C */ stw r9, 0x1c(r30) +/* 0000D174 00019F04 3B A1 00 08 */ addi r29, r1, 0x8 +/* 0000D178 00019F08 93 E1 00 08 */ stw r31, 0x8(r1) +/* 0000D17C 00019F0C 7F A5 EB 78 */ mr r5, r29 +/* 0000D180 00019F10 80 6A 00 00 */ lwz r3, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r10) +/* 0000D184 00019F14 80 0B 00 08 */ lwz r0, 0x8(r11) +/* 0000D188 00019F18 54 00 10 3A */ slwi r0, r0, 2 +/* 0000D18C 00019F1C 7F E3 02 14 */ add r31, r3, r0 +/* 0000D190 00019F20 7F E4 FB 78 */ mr r4, r31 +/* 0000D194 00019F24 48 00 00 01 */ bl find__H2ZPP14ITrafficCenterZP14ITrafficCenter_4_STLX01X01RCX11_X01 +/* 0000D198 00019F28 7C 03 F8 00 */ cmpw r3, r31 +/* 0000D19C 00019F2C 40 82 D1 A8 */ bne .L_0000A344 +/* 0000D1A0 00019F30 7F E3 FB 78 */ mr r3, r31 +/* 0000D1A4 00019F34 48 00 D1 D8 */ b .L_0001A37C +/* 0000D1A8 00019F38 39 63 00 04 */ addi r11, r3, 0x4 +/* 0000D1AC 00019F3C 7C 0B F8 00 */ cmpw r11, r31 +/* 0000D1B0 00019F40 41 82 D1 D8 */ beq .L_0000A388 +/* 0000D1B4 00019F44 81 2B 00 00 */ lwz r9, 0x0(r11) +/* 0000D1B8 00019F48 80 1D 00 00 */ lwz r0, 0x0(r29) +/* 0000D1BC 00019F4C 7C 09 00 00 */ cmpw r9, r0 +/* 0000D1C0 00019F50 41 82 D1 CC */ beq .L_0000A38C +.L_0000D1C4: +/* 0000D1C4 00019F54 91 23 00 00 */ stw r9, 0x0(r3) +/* 0000D1C8 00019F58 38 63 00 04 */ addi r3, r3, 0x4 +/* 0000D1CC 00019F5C 39 6B 00 04 */ addi r11, r11, 0x4 +/* 0000D1D0 00019F60 7C 0B F8 00 */ cmpw r11, r31 +/* 0000D1D4 00019F64 40 82 D1 B4 */ bne .L_0000A388 +.L_0000D1D8: +/* 0000D1D8 00019F68 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha +/* 0000D1DC 00019F6C 38 A9 00 00 */ addi r5, r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l +/* 0000D1E0 00019F70 81 49 00 00 */ lwz r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r9) +/* 0000D1E4 00019F74 81 05 00 08 */ lwz r8, 0x8(r5) +/* 0000D1E8 00019F78 55 00 10 3A */ slwi r0, r8, 2 +/* 0000D1EC 00019F7C 7D 6A 02 14 */ add r11, r10, r0 +/* 0000D1F0 00019F80 7C 03 58 00 */ cmpw r3, r11 +/* 0000D1F4 00019F84 41 82 D2 6C */ beq .L_0000A460 +/* 0000D1F8 00019F88 7D 23 58 50 */ subf r9, r3, r11 +/* 0000D1FC 00019F8C 7C 0A 18 50 */ subf r0, r10, r3 +/* 0000D200 00019F90 7D 3F 16 70 */ srawi r31, r9, 2 +/* 0000D204 00019F94 7C 06 16 70 */ srawi r6, r0, 2 +/* 0000D208 00019F98 7D 09 43 78 */ mr r9, r8 +/* 0000D20C 00019F9C 38 63 00 04 */ addi r3, r3, 0x4 +/* 0000D210 00019FA0 7C 03 58 00 */ cmpw r3, r11 +/* 0000D214 00019FA4 40 82 D2 0C */ bne .L_0000A420 +/* 0000D218 00019FA8 7C E6 FA 14 */ add r7, r6, r31 +/* 0000D21C 00019FAC 39 00 00 00 */ li r8, 0x0 +/* 0000D220 00019FB0 7C E4 3B 78 */ mr r4, r7 +/* 0000D224 00019FB4 7C 04 48 50 */ subf r0, r4, r9 +.L_0000D228: +/* 0000D228 00019FB8 7C 08 00 40 */ cmplw r8, r0 +/* 0000D22C 00019FBC 40 80 D2 64 */ bge .L_0000A490 +/* 0000D230 00019FC0 7C 06 42 14 */ add r0, r6, r8 +/* 0000D234 00019FC4 81 65 00 00 */ lwz r11, 0x0(r5) +/* 0000D238 00019FC8 54 0A 10 3A */ slwi r10, r0, 2 +/* 0000D23C 00019FCC 7D 27 42 14 */ add r9, r7, r8 +/* 0000D240 00019FD0 7C 0A 5A 14 */ add r0, r10, r11 +/* 0000D244 00019FD4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000D248 00019FD8 41 82 D2 58 */ beq .L_0000A4A0 +/* 0000D24C 00019FDC 55 29 10 3A */ slwi r9, r9, 2 +/* 0000D250 00019FE0 7C 09 58 2E */ lwzx r0, r9, r11 +/* 0000D254 00019FE4 7C 0A 59 2E */ stwx r0, r10, r11 +/* 0000D258 00019FE8 39 08 00 01 */ addi r8, r8, 0x1 +/* 0000D25C 00019FEC 81 25 00 08 */ lwz r9, 0x8(r5) +/* 0000D260 00019FF0 48 00 D2 24 */ b .L_0001A484 +/* 0000D264 00019FF4 7C 1F 48 50 */ subf r0, r31, r9 +/* 0000D268 00019FF8 90 05 00 08 */ stw r0, 0x8(r5) +/* 0000D26C 00019FFC 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha +/* 0000D270 0001A000 7F C3 F3 78 */ mr r3, r30 +/* 0000D274 0001A004 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l +/* 0000D278 0001A008 38 80 00 02 */ li r4, 0x2 +/* 0000D27C 0001A00C 91 3E 00 14 */ stw r9, 0x14(r30) +/* 0000D280 0001A010 48 00 00 01 */ bl _._Q43UTL3COM6Object6_IList +/* 0000D284 0001A014 73 80 00 01 */ andi. r0, r28, 0x1 +/* 0000D288 0001A018 41 82 D2 AC */ beq .L_0000A534 +/* 0000D28C 0001A01C 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 0000D290 0001A020 41 82 D2 AC */ beq .L_0000A53C +/* 0000D294 0001A024 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0000D298 0001A028 7F C4 F3 78 */ mr r4, r30 +/* 0000D29C 0001A02C 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0000D2A0 0001A030 38 A0 02 D0 */ li r5, 0x2d0 +/* 0000D2A4 0001A034 38 C0 00 00 */ li r6, 0x0 +/* 0000D2A8 0001A038 48 00 00 01 */ bl Free__7FastMemPvUiPCc +.L_0000D2AC: +/* 0000D2AC 0001A03C 80 01 00 24 */ lwz r0, 0x24(r1) +/* 0000D2B0 0001A040 7C 08 03 A6 */ mtlr r0 +/* 0000D2B4 0001A044 BB 81 00 10 */ lmw r28, 0x10(r1) +/* 0000D2B8 0001A048 38 21 00 20 */ addi r1, r1, 0x20 +/* 0000D2BC 0001A04C 4E 80 00 20 */ blr +.endfn _._13CDActionDebug + +# .text:0xD2C0 | size: 0x8C +.fn Update__13CDActionDebugf, global +/* 0000D2C0 0001A050 94 21 FF E0 */ stwu r1, -0x20(r1) +.L_0000D2C4: +/* 0000D2C4 0001A054 7C 08 02 A6 */ mflr r0 +/* 0000D2C8 0001A058 BF 81 00 10 */ stmw r28, 0x10(r1) +/* 0000D2CC 0001A05C 90 01 00 24 */ stw r0, 0x24(r1) +/* 0000D2D0 0001A060 7C 7F 1B 78 */ mr r31, r3 +/* 0000D2D4 0001A064 3F 80 00 00 */ lis r28, Tweak_EnableICEAuthoring@ha +/* 0000D2D8 0001A068 3B DF 00 20 */ addi r30, r31, 0x20 +/* 0000D2DC 0001A06C 3B A0 00 01 */ li r29, 0x1 +/* 0000D2E0 0001A070 48 00 D3 20 */ b .L_0001A600 +/* 0000D2E4 0001A074 4C C6 31 82 */ crclr cr1eq +/* 0000D2E8 0001A078 48 00 00 01 */ bl GetAction__11ActionQueue +/* 0000D2EC 0001A07C 81 21 00 08 */ lwz r9, 0x8(r1) +/* 0000D2F0 0001A080 38 00 00 00 */ li r0, 0x0 +/* 0000D2F4 0001A084 38 7F 00 20 */ addi r3, r31, 0x20 +/* 0000D2F8 0001A088 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0000D2FC 0001A08C 41 82 D3 04 */ beq .L_0000A600 +.L_0000D300: +/* 0000D300 0001A090 80 09 00 00 */ lwz r0, 0x0(r9) +/* 0000D304 0001A094 2C 00 00 15 */ cmpwi r0, 0x15 +/* 0000D308 0001A098 40 82 D3 1C */ bne .L_0000A624 +/* 0000D30C 0001A09C 80 1C 00 00 */ lwz r0, Tweak_EnableICEAuthoring@l(r28) +/* 0000D310 0001A0A0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000D314 0001A0A4 40 82 D3 1C */ bne .L_0000A630 +/* 0000D318 0001A0A8 93 BF 02 C8 */ stw r29, 0x2c8(r31) +/* 0000D31C 0001A0AC 48 00 00 01 */ bl PopAction__11ActionQueue +.L_0000D320: +/* 0000D320 0001A0B0 7F C3 F3 78 */ mr r3, r30 +/* 0000D324 0001A0B4 48 00 00 01 */ bl IsEmpty__11ActionQueue +/* 0000D328 0001A0B8 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000D32C 0001A0BC 7F C4 F3 78 */ mr r4, r30 +/* 0000D330 0001A0C0 38 61 00 08 */ addi r3, r1, 0x8 +/* 0000D334 0001A0C4 41 82 D2 E4 */ beq .L_0000A618 +/* 0000D338 0001A0C8 80 01 00 24 */ lwz r0, 0x24(r1) +/* 0000D33C 0001A0CC 7C 08 03 A6 */ mtlr r0 +/* 0000D340 0001A0D0 BB 81 00 10 */ lmw r28, 0x10(r1) +/* 0000D344 0001A0D4 38 21 00 20 */ addi r1, r1, 0x20 +/* 0000D348 0001A0D8 4E 80 00 20 */ blr +.endfn Update__13CDActionDebugf + +# .text:0xD34C | size: 0x68 +.fn GetTrafficBasis__13CDActionDebugRQ25UMath7Matrix4RQ25UMath7Vector3, global +/* 0000D34C 0001A0DC 94 21 FF A0 */ stwu r1, -0x60(r1) +/* 0000D350 0001A0E0 7C 08 02 A6 */ mflr r0 +/* 0000D354 0001A0E4 BF 61 00 4C */ stmw r27, 0x4c(r1) +/* 0000D358 0001A0E8 90 01 00 64 */ stw r0, 0x64(r1) +/* 0000D35C 0001A0EC 7C 7D 1B 78 */ mr r29, r3 +/* 0000D360 0001A0F0 7C 9C 23 78 */ mr r28, r4 +/* 0000D364 0001A0F4 81 3D 02 B4 */ lwz r9, 0x2b4(r29) +.L_0000D368: +/* 0000D368 0001A0F8 3B C1 00 08 */ addi r30, r1, 0x8 +/* 0000D36C 0001A0FC 7C BB 2B 78 */ mr r27, r5 +/* 0000D370 0001A100 7F C3 F3 78 */ mr r3, r30 +/* 0000D374 0001A104 80 89 00 1C */ lwz r4, 0x1c(r9) +/* 0000D378 0001A108 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 +/* 0000D37C 0001A10C 7F C3 F3 78 */ mr r3, r30 +/* 0000D380 0001A110 7F 84 E3 78 */ mr r4, r28 +/* 0000D384 0001A114 48 00 00 01 */ bl RightToLeftMatrix4__H2Z8bMatrix4ZQ25UMath7Matrix4__14ConversionUtilRCX01RX11_v +/* 0000D388 0001A118 81 3D 02 B4 */ lwz r9, 0x2b4(r29) +/* 0000D38C 0001A11C 7F 64 DB 78 */ mr r4, r27 +/* 0000D390 0001A120 80 69 00 1C */ lwz r3, 0x1c(r9) +/* 0000D394 0001A124 38 63 01 E8 */ addi r3, r3, 0x1e8 +/* 0000D398 0001A128 48 00 00 01 */ bl RightToLeftVector3__H2Z8bVector3ZQ25UMath7Vector3__14ConversionUtilRCX01RX11_v +/* 0000D39C 0001A12C 38 60 00 01 */ li r3, 0x1 +/* 0000D3A0 0001A130 80 01 00 64 */ lwz r0, 0x64(r1) +/* 0000D3A4 0001A134 7C 08 03 A6 */ mtlr r0 +/* 0000D3A8 0001A138 BB 61 00 4C */ lmw r27, 0x4c(r1) +/* 0000D3AC 0001A13C 38 21 00 60 */ addi r1, r1, 0x60 +/* 0000D3B0 0001A140 4E 80 00 20 */ blr +.endfn GetTrafficBasis__13CDActionDebugRQ25UMath7Matrix4RQ25UMath7Vector3 + +# .text:0xD3B4 | size: 0x74 +.fn GetName__C11CDActionIce, global +/* 0000D3B4 0001A144 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0000D3B8 0001A148 7C 08 02 A6 */ mflr r0 +/* 0000D3BC 0001A14C BF A1 00 0C */ stmw r29, 0xc(r1) +/* 0000D3C0 0001A150 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0000D3C4 0001A154 3F E0 00 00 */ lis r31, _.tmp_12.11291@ha +/* 0000D3C8 0001A158 80 1F 00 00 */ lwz r0, _.tmp_12.11291@l(r31) +/* 0000D3CC 0001A15C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000D3D0 0001A160 40 82 D4 0C */ bne .L_0000A7DC +/* 0000D3D4 0001A164 3F C0 00 00 */ lis r30, .rodata+0x77C@ha +/* 0000D3D8 0001A168 3F A0 00 00 */ lis r29, name.11290@ha +/* 0000D3DC 0001A16C 3B DE 07 7C */ addi r30, r30, .rodata+0x77C@l +.L_0000D3E0: +/* 0000D3E0 0001A170 3B BD 00 00 */ addi r29, r29, name.11290@l +/* 0000D3E4 0001A174 7F C3 F3 78 */ mr r3, r30 +.L_0000D3E8: +/* 0000D3E8 0001A178 48 00 00 01 */ bl StringHash64__6AttribPCc +/* 0000D3EC 0001A17C 90 7D 00 00 */ stw r3, 0x0(r29) +/* 0000D3F0 0001A180 90 9D 00 04 */ stw r4, 0x4(r29) +/* 0000D3F4 0001A184 7F C3 F3 78 */ mr r3, r30 +.L_0000D3F8: +/* 0000D3F8 0001A188 48 00 00 01 */ bl StringHash32__6AttribPCc +/* 0000D3FC 0001A18C 38 00 00 01 */ li r0, 0x1 +/* 0000D400 0001A190 93 DD 00 0C */ stw r30, 0xc(r29) +/* 0000D404 0001A194 90 1F 00 00 */ stw r0, _.tmp_12.11291@l(r31) +/* 0000D408 0001A198 90 7D 00 08 */ stw r3, 0x8(r29) +/* 0000D40C 0001A19C 3C 60 00 00 */ lis r3, name.11290@ha +/* 0000D410 0001A1A0 38 63 00 00 */ addi r3, r3, name.11290@l +/* 0000D414 0001A1A4 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0000D418 0001A1A8 7C 08 03 A6 */ mtlr r0 +/* 0000D41C 0001A1AC BB A1 00 0C */ lmw r29, 0xc(r1) +.L_0000D420: +/* 0000D420 0001A1B0 38 21 00 18 */ addi r1, r1, 0x18 +/* 0000D424 0001A1B4 4E 80 00 20 */ blr +.endfn GetName__C11CDActionIce + +# .text:0xD428 | size: 0x84 +.fn GetNext__C11CDActionIce, global +/* 0000D428 0001A1B8 94 21 FF F0 */ stwu r1, -0x10(r1) +.L_0000D42C: +/* 0000D42C 0001A1BC 7C 08 02 A6 */ mflr r0 +/* 0000D430 0001A1C0 BF C1 00 08 */ stmw r30, 0x8(r1) +.L_0000D434: +/* 0000D434 0001A1C4 90 01 00 14 */ stw r0, 0x14(r1) +/* 0000D438 0001A1C8 80 04 02 F0 */ lwz r0, 0x2f0(r4) +/* 0000D43C 0001A1CC 7C 7F 1B 78 */ mr r31, r3 +/* 0000D440 0001A1D0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000D444 0001A1D4 41 82 D4 6C */ beq .L_0000A8B0 +/* 0000D448 0001A1D8 81 24 02 B8 */ lwz r9, 0x2b8(r4) +/* 0000D44C 0001A1DC 81 44 02 BC */ lwz r10, 0x2bc(r4) +/* 0000D450 0001A1E0 91 3F 00 00 */ stw r9, 0x0(r31) +/* 0000D454 0001A1E4 91 5F 00 04 */ stw r10, 0x4(r31) +/* 0000D458 0001A1E8 80 04 02 C0 */ lwz r0, 0x2c0(r4) +/* 0000D45C 0001A1EC 90 1F 00 08 */ stw r0, 0x8(r31) +/* 0000D460 0001A1F0 81 24 02 C4 */ lwz r9, 0x2c4(r4) +/* 0000D464 0001A1F4 91 3F 00 0C */ stw r9, 0xc(r31) +/* 0000D468 0001A1F8 48 00 D4 94 */ b .L_0001A8FC +/* 0000D46C 0001A1FC 3F C0 00 00 */ lis r30, .rodata@ha +/* 0000D470 0001A200 3B DE 00 00 */ addi r30, r30, .rodata@l +/* 0000D474 0001A204 7F C3 F3 78 */ mr r3, r30 +/* 0000D478 0001A208 48 00 00 01 */ bl StringHash64__6AttribPCc +/* 0000D47C 0001A20C 90 7F 00 00 */ stw r3, 0x0(r31) +/* 0000D480 0001A210 90 9F 00 04 */ stw r4, 0x4(r31) +/* 0000D484 0001A214 7F C3 F3 78 */ mr r3, r30 +/* 0000D488 0001A218 48 00 00 01 */ bl StringHash32__6AttribPCc +/* 0000D48C 0001A21C 90 7F 00 08 */ stw r3, 0x8(r31) +/* 0000D490 0001A220 93 DF 00 0C */ stw r30, 0xc(r31) +/* 0000D494 0001A224 7F E3 FB 78 */ mr r3, r31 +/* 0000D498 0001A228 80 01 00 14 */ lwz r0, 0x14(r1) +/* 0000D49C 0001A22C 7C 08 03 A6 */ mtlr r0 +/* 0000D4A0 0001A230 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 0000D4A4 0001A234 38 21 00 10 */ addi r1, r1, 0x10 +/* 0000D4A8 0001A238 4E 80 00 20 */ blr +.endfn GetNext__C11CDActionIce + +# .text:0xD4AC | size: 0x8 +# CDActionIce::GetMover +.fn GetMover__11CDActionIce, global +/* 0000D4AC 0001A23C 80 63 02 CC */ lwz r3, 0x2cc(r3) +/* 0000D4B0 0001A240 4E 80 00 20 */ blr +.endfn GetMover__11CDActionIce + +# .text:0xD4B4 | size: 0x24 +.fn Attach__11CDActionIcePQ33UTL3COM8IUnknown, global +/* 0000D4B4 0001A244 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0000D4B8 0001A248 7C 08 02 A6 */ mflr r0 +/* 0000D4BC 0001A24C 90 01 00 0C */ stw r0, 0xc(r1) +/* 0000D4C0 0001A250 80 63 02 E4 */ lwz r3, 0x2e4(r3) +/* 0000D4C4 0001A254 48 00 00 01 */ bl Attach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +/* 0000D4C8 0001A258 80 01 00 0C */ lwz r0, 0xc(r1) +.L_0000D4CC: +/* 0000D4CC 0001A25C 7C 08 03 A6 */ mtlr r0 +.L_0000D4D0: +/* 0000D4D0 0001A260 38 21 00 08 */ addi r1, r1, 0x8 +/* 0000D4D4 0001A264 4E 80 00 20 */ blr +.endfn Attach__11CDActionIcePQ33UTL3COM8IUnknown + +# .text:0xD4D8 | size: 0x24 +.fn Detach__11CDActionIcePQ33UTL3COM8IUnknown, global +/* 0000D4D8 0001A268 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0000D4DC 0001A26C 7C 08 02 A6 */ mflr r0 +/* 0000D4E0 0001A270 90 01 00 0C */ stw r0, 0xc(r1) +/* 0000D4E4 0001A274 80 63 02 E4 */ lwz r3, 0x2e4(r3) +/* 0000D4E8 0001A278 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +/* 0000D4EC 0001A27C 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0000D4F0 0001A280 7C 08 03 A6 */ mtlr r0 +/* 0000D4F4 0001A284 38 21 00 08 */ addi r1, r1, 0x8 +/* 0000D4F8 0001A288 4E 80 00 20 */ blr +.endfn Detach__11CDActionIcePQ33UTL3COM8IUnknown + +# .text:0xD4FC | size: 0x24 +.fn IsAttached__C11CDActionIcePCQ33UTL3COM8IUnknown, global +/* 0000D4FC 0001A28C 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0000D500 0001A290 7C 08 02 A6 */ mflr r0 +/* 0000D504 0001A294 90 01 00 0C */ stw r0, 0xc(r1) +/* 0000D508 0001A298 80 63 02 E4 */ lwz r3, 0x2e4(r3) +/* 0000D50C 0001A29C 48 00 00 01 */ bl IsAttached__CQ23Sim11AttachmentsPCQ33UTL3COM8IUnknown +/* 0000D510 0001A2A0 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0000D514 0001A2A4 7C 08 03 A6 */ mtlr r0 +/* 0000D518 0001A2A8 38 21 00 08 */ addi r1, r1, 0x8 +/* 0000D51C 0001A2AC 4E 80 00 20 */ blr +.endfn IsAttached__C11CDActionIcePCQ33UTL3COM8IUnknown + +# .text:0xD520 | size: 0x8 +.fn GetAttachments__C11CDActionIce, global +/* 0000D520 0001A2B0 80 63 02 E4 */ lwz r3, 0x2e4(r3) +/* 0000D524 0001A2B4 4E 80 00 20 */ blr +.endfn GetAttachments__C11CDActionIce + +# .text:0xD528 | size: 0x138 +.fn Construct__11CDActionIcePQ28CameraAI8Director, global +/* 0000D528 0001A2B8 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 0000D52C 0001A2BC 7C 08 02 A6 */ mflr r0 +/* 0000D530 0001A2C0 BF 61 00 0C */ stmw r27, 0xc(r1) +/* 0000D534 0001A2C4 90 01 00 24 */ stw r0, 0x24(r1) +/* 0000D538 0001A2C8 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@ha +/* 0000D53C 0001A2CC 7C 7C 1B 78 */ mr r28, r3 +.L_0000D540: +/* 0000D540 0001A2D0 39 29 00 00 */ addi r9, r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@l +/* 0000D544 0001A2D4 3B 60 00 00 */ li r27, 0x0 +/* 0000D548 0001A2D8 83 E9 00 30 */ lwz r31, 0x30(r9) +/* 0000D54C 0001A2DC 3B A9 00 30 */ addi r29, r9, 0x30 +/* 0000D550 0001A2E0 80 1D 00 08 */ lwz r0, 0x8(r29) +/* 0000D554 0001A2E4 81 3D 00 00 */ lwz r9, 0x0(r29) +/* 0000D558 0001A2E8 54 00 10 3A */ slwi r0, r0, 2 +/* 0000D55C 0001A2EC 7D 29 02 14 */ add r9, r9, r0 +/* 0000D560 0001A2F0 7C 1F 48 00 */ cmpw r31, r9 +/* 0000D564 0001A2F4 41 82 D5 9C */ beq .L_0000AB00 +/* 0000D568 0001A2F8 83 DF 00 00 */ lwz r30, 0x0(r31) +/* 0000D56C 0001A2FC 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000D570 0001A300 80 09 00 64 */ lwz r0, 0x64(r9) +/* 0000D574 0001A304 A8 69 00 60 */ lha r3, 0x60(r9) +.L_0000D578: +/* 0000D578 0001A308 7C 08 03 A6 */ mtlr r0 +/* 0000D57C 0001A30C 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000D580 0001A310 4E 80 00 21 */ blrl +/* 0000D584 0001A314 80 1C 00 04 */ lwz r0, 0x4(r28) +/* 0000D588 0001A318 7C 03 00 00 */ cmpw r3, r0 +.L_0000D58C: +/* 0000D58C 0001A31C 41 82 D5 98 */ beq .L_0000AB24 +/* 0000D590 0001A320 3B FF 00 04 */ addi r31, r31, 0x4 +/* 0000D594 0001A324 48 00 D5 50 */ b .L_0001AAE4 +/* 0000D598 0001A328 7F DB F3 78 */ mr r27, r30 +/* 0000D59C 0001A32C 2C 1B 00 00 */ cmpwi r27, 0x0 +/* 0000D5A0 0001A330 41 82 D6 20 */ beq .L_0000ABC0 +/* 0000D5A4 0001A334 81 3B 00 04 */ lwz r9, 0x4(r27) +.L_0000D5A8: +/* 0000D5A8 0001A338 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000D5AC 0001A33C 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000D5B0 0001A340 7C 7B 1A 14 */ add r3, r27, r3 +.L_0000D5B4: +/* 0000D5B4 0001A344 7C 08 03 A6 */ mtlr r0 +/* 0000D5B8 0001A348 4E 80 00 21 */ blrl +.L_0000D5BC: +/* 0000D5BC 0001A34C 7C 7F 1B 79 */ mr. r31, r3 +/* 0000D5C0 0001A350 41 82 D6 20 */ beq .L_0000ABE0 +/* 0000D5C4 0001A354 3C 80 00 00 */ lis r4, _IHandle__8IVehicle@ha +/* 0000D5C8 0001A358 80 7F 00 00 */ lwz r3, 0x0(r31) +/* 0000D5CC 0001A35C 38 84 00 00 */ addi r4, r4, _IHandle__8IVehicle@l +/* 0000D5D0 0001A360 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000D5D4 0001A364 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000D5D8 0001A368 41 82 D6 20 */ beq .L_0000ABF8 +.L_0000D5DC: +/* 0000D5DC 0001A36C 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 0000D5E0 0001A370 A8 69 00 E8 */ lha r3, 0xe8(r9) +/* 0000D5E4 0001A374 80 09 00 EC */ lwz r0, 0xec(r9) +/* 0000D5E8 0001A378 7C 7F 1A 14 */ add r3, r31, r3 +/* 0000D5EC 0001A37C 7C 08 03 A6 */ mtlr r0 +/* 0000D5F0 0001A380 4E 80 00 21 */ blrl +/* 0000D5F4 0001A384 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000D5F8 0001A388 41 82 D6 20 */ beq .L_0000AC18 +/* 0000D5FC 0001A38C 3D 20 00 00 */ lis r9, Tweak_ForceICEReplay@ha +/* 0000D600 0001A390 80 09 00 00 */ lwz r0, Tweak_ForceICEReplay@l(r9) +/* 0000D604 0001A394 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000D608 0001A398 40 82 D6 28 */ bne .L_0000AC30 +/* 0000D60C 0001A39C 3C 60 00 00 */ lis r3, TheICEManager@ha +/* 0000D610 0001A3A0 38 63 00 00 */ addi r3, r3, TheICEManager@l +/* 0000D614 0001A3A4 48 01 94 1D */ bl .text+0x1941C +/* 0000D618 0001A3A8 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000D61C 0001A3AC 40 82 D6 28 */ bne .L_0000AC44 +/* 0000D620 0001A3B0 38 60 00 00 */ li r3, 0x0 +/* 0000D624 0001A3B4 48 00 D6 4C */ b .L_0001AC70 +/* 0000D628 0001A3B8 3C A0 00 00 */ lis r5, .rodata+0x8F4@ha +/* 0000D62C 0001A3BC 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0000D630 0001A3C0 38 A5 08 F4 */ addi r5, r5, .rodata+0x8F4@l +/* 0000D634 0001A3C4 38 80 02 F8 */ li r4, 0x2f8 +/* 0000D638 0001A3C8 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0000D63C 0001A3CC 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 0000D640 0001A3D0 7F 84 E3 78 */ mr r4, r28 +/* 0000D644 0001A3D4 7F 65 DB 78 */ mr r5, r27 +/* 0000D648 0001A3D8 48 00 D6 61 */ bl .L_0001ACA8 +/* 0000D64C 0001A3DC 80 01 00 24 */ lwz r0, 0x24(r1) +/* 0000D650 0001A3E0 7C 08 03 A6 */ mtlr r0 +/* 0000D654 0001A3E4 BB 61 00 0C */ lmw r27, 0xc(r1) +/* 0000D658 0001A3E8 38 21 00 20 */ addi r1, r1, 0x20 +/* 0000D65C 0001A3EC 4E 80 00 20 */ blr +.endfn Construct__11CDActionIcePQ28CameraAI8Director + +# .text:0xD660 | size: 0x328 +.fn __11CDActionIcePQ28CameraAI8DirectorP7IPlayer, global +/* 0000D660 0001A3F0 94 21 FF 88 */ stwu r1, -0x78(r1) +.L_0000D664: +/* 0000D664 0001A3F4 7C 08 02 A6 */ mflr r0 +/* 0000D668 0001A3F8 BF 01 00 58 */ stmw r24, 0x58(r1) +/* 0000D66C 0001A3FC 90 01 00 7C */ stw r0, 0x7c(r1) +/* 0000D670 0001A400 7C 7F 1B 78 */ mr r31, r3 +/* 0000D674 0001A404 7C 98 23 78 */ mr r24, r4 +/* 0000D678 0001A408 7C BA 2B 78 */ mr r26, r5 +/* 0000D67C 0001A40C 38 80 00 00 */ li r4, 0x0 +/* 0000D680 0001A410 3B 7F 00 18 */ addi r27, r31, 0x18 +/* 0000D684 0001A414 48 00 00 01 */ bl __Q43UTL3COM6Object6_IListUi +/* 0000D688 0001A418 3B 80 00 00 */ li r28, 0x0 +/* 0000D68C 0001A41C 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha +/* 0000D690 0001A420 3D 60 00 00 */ lis r11, _vt.Q33UTL3COM8IUnknown@ha +/* 0000D694 0001A424 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l +/* 0000D698 0001A428 39 6B 00 00 */ addi r11, r11, _vt.Q33UTL3COM8IUnknown@l +/* 0000D69C 0001A42C 3C 80 00 00 */ lis r4, _IHandle__11IAttachable@ha +/* 0000D6A0 0001A430 93 FF 00 18 */ stw r31, 0x18(r31) +/* 0000D6A4 0001A434 3B 21 00 08 */ addi r25, r1, 0x8 +/* 0000D6A8 0001A438 38 84 00 00 */ addi r4, r4, _IHandle__11IAttachable@l +/* 0000D6AC 0001A43C 91 3F 00 14 */ stw r9, 0x14(r31) +/* 0000D6B0 0001A440 7F E3 FB 78 */ mr r3, r31 +/* 0000D6B4 0001A444 91 7F 00 1C */ stw r11, 0x1c(r31) +/* 0000D6B8 0001A448 7F 65 DB 78 */ mr r5, r27 +/* 0000D6BC 0001A44C 48 00 00 01 */ bl Add__Q43UTL3COM6Object6_IListPvPQ33UTL3COM8IUnknown +.L_0000D6C0: +/* 0000D6C0 0001A450 3B DF 02 D0 */ addi r30, r31, 0x2d0 +.L_0000D6C4: +/* 0000D6C4 0001A454 3D 20 00 00 */ lis r9, _vt.11CDActionIce.11IAttachable@ha +/* 0000D6C8 0001A458 3D 60 00 00 */ lis r11, _vt.11CDActionIce@ha +/* 0000D6CC 0001A45C 39 29 00 00 */ addi r9, r9, _vt.11CDActionIce.11IAttachable@l +/* 0000D6D0 0001A460 39 6B 00 00 */ addi r11, r11, _vt.11CDActionIce@l +/* 0000D6D4 0001A464 3C C0 00 00 */ lis r6, .rodata+0x77C@ha +/* 0000D6D8 0001A468 3C A0 98 C7 */ lis r5, 0x98c7 +/* 0000D6DC 0001A46C 38 E0 00 00 */ li r7, 0x0 +/* 0000D6E0 0001A470 38 C6 07 7C */ addi r6, r6, .rodata+0x77C@l +/* 0000D6E4 0001A474 60 A5 A2 F5 */ ori r5, r5, 0xa2f5 +/* 0000D6E8 0001A478 91 3F 00 1C */ stw r9, 0x1c(r31) +/* 0000D6EC 0001A47C 91 7F 00 14 */ stw r11, 0x14(r31) +/* 0000D6F0 0001A480 38 80 00 01 */ li r4, 0x1 +/* 0000D6F4 0001A484 38 7F 00 20 */ addi r3, r31, 0x20 +/* 0000D6F8 0001A488 48 00 00 01 */ bl __11ActionQueueiUiPCcb +/* 0000D6FC 0001A48C 39 20 00 00 */ li r9, 0x0 +/* 0000D700 0001A490 3D 60 00 00 */ lis r11, .rodata@ha +/* 0000D704 0001A494 39 40 00 00 */ li r10, 0x0 +/* 0000D708 0001A498 39 6B 00 00 */ addi r11, r11, .rodata@l +/* 0000D70C 0001A49C 91 21 00 08 */ stw r9, 0x8(r1) +/* 0000D710 0001A4A0 91 41 00 0C */ stw r10, 0xc(r1) +/* 0000D714 0001A4A4 38 80 00 00 */ li r4, 0x0 +/* 0000D718 0001A4A8 93 99 00 08 */ stw r28, 0x8(r25) +/* 0000D71C 0001A4AC 7F 23 CB 78 */ mr r3, r25 +/* 0000D720 0001A4B0 91 61 00 14 */ stw r11, 0x14(r1) +/* 0000D724 0001A4B4 81 21 00 08 */ lwz r9, 0x8(r1) +/* 0000D728 0001A4B8 81 41 00 0C */ lwz r10, 0xc(r1) +/* 0000D72C 0001A4BC 80 19 00 08 */ lwz r0, 0x8(r25) +/* 0000D730 0001A4C0 93 9F 02 D0 */ stw r28, 0x2d0(r31) +/* 0000D734 0001A4C4 93 9F 02 D4 */ stw r28, 0x2d4(r31) +/* 0000D738 0001A4C8 93 9F 02 D8 */ stw r28, 0x2d8(r31) +/* 0000D73C 0001A4CC 93 9F 02 DC */ stw r28, 0x2dc(r31) +/* 0000D740 0001A4D0 93 9F 02 F0 */ stw r28, 0x2f0(r31) +/* 0000D744 0001A4D4 93 9F 02 EC */ stw r28, 0x2ec(r31) +/* 0000D748 0001A4D8 91 3F 02 B8 */ stw r9, 0x2b8(r31) +/* 0000D74C 0001A4DC 91 5F 02 BC */ stw r10, 0x2bc(r31) +/* 0000D750 0001A4E0 91 7F 02 C4 */ stw r11, 0x2c4(r31) +/* 0000D754 0001A4E4 90 1F 02 C0 */ stw r0, 0x2c0(r31) +.L_0000D758: +/* 0000D758 0001A4E8 48 00 00 01 */ bl __Q29WorldConn9ReferenceUi +/* 0000D75C 0001A4EC 81 61 00 08 */ lwz r11, 0x8(r1) +/* 0000D760 0001A4F0 7F 23 CB 78 */ mr r3, r25 +/* 0000D764 0001A4F4 81 59 00 04 */ lwz r10, 0x4(r25) +/* 0000D768 0001A4F8 38 80 00 02 */ li r4, 0x2 +/* 0000D76C 0001A4FC 80 19 00 0C */ lwz r0, 0xc(r25) +/* 0000D770 0001A500 81 39 00 08 */ lwz r9, 0x8(r25) +/* 0000D774 0001A504 91 7F 02 D0 */ stw r11, 0x2d0(r31) +/* 0000D778 0001A508 90 1E 00 0C */ stw r0, 0xc(r30) +/* 0000D77C 0001A50C 91 5E 00 04 */ stw r10, 0x4(r30) +/* 0000D780 0001A510 91 3E 00 08 */ stw r9, 0x8(r30) +/* 0000D784 0001A514 48 00 00 01 */ bl _._Q29WorldConn9Reference +/* 0000D788 0001A518 3F A0 00 00 */ lis r29, gFastMem@ha +/* 0000D78C 0001A51C 93 5F 02 E0 */ stw r26, 0x2e0(r31) +/* 0000D790 0001A520 3B BD 00 00 */ addi r29, r29, gFastMem@l +/* 0000D794 0001A524 93 9F 02 E8 */ stw r28, 0x2e8(r31) +.L_0000D798: +/* 0000D798 0001A528 38 80 00 10 */ li r4, 0x10 +/* 0000D79C 0001A52C 38 A0 00 00 */ li r5, 0x0 +/* 0000D7A0 0001A530 7F A3 EB 78 */ mr r3, r29 +/* 0000D7A4 0001A534 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 0000D7A8 0001A538 7C 7E 1B 78 */ mr r30, r3 +/* 0000D7AC 0001A53C 3D 20 00 00 */ lis r9, _vt.Q23Sim11Attachments@ha +/* 0000D7B0 0001A540 39 29 00 00 */ addi r9, r9, _vt.Q23Sim11Attachments@l +/* 0000D7B4 0001A544 93 9E 00 04 */ stw r28, 0x4(r30) +/* 0000D7B8 0001A548 38 A0 00 00 */ li r5, 0x0 +/* 0000D7BC 0001A54C 91 3E 00 0C */ stw r9, 0xc(r30) +/* 0000D7C0 0001A550 38 80 00 0C */ li r4, 0xc +/* 0000D7C4 0001A554 7F A3 EB 78 */ mr r3, r29 +.L_0000D7C8: +/* 0000D7C8 0001A558 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 0000D7CC 0001A55C 7C 69 1B 78 */ mr r9, r3 +/* 0000D7D0 0001A560 91 29 00 00 */ stw r9, 0x0(r9) +/* 0000D7D4 0001A564 7F C3 F3 78 */ mr r3, r30 +.L_0000D7D8: +/* 0000D7D8 0001A568 91 29 00 04 */ stw r9, 0x4(r9) +/* 0000D7DC 0001A56C 91 3E 00 04 */ stw r9, 0x4(r30) +/* 0000D7E0 0001A570 93 7E 00 08 */ stw r27, 0x8(r30) +/* 0000D7E4 0001A574 93 DF 02 E4 */ stw r30, 0x2e4(r31) +/* 0000D7E8 0001A578 80 9F 02 E0 */ lwz r4, 0x2e0(r31) +/* 0000D7EC 0001A57C 48 00 00 01 */ bl Attach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +/* 0000D7F0 0001A580 7F 03 C3 78 */ mr r3, r24 +/* 0000D7F4 0001A584 48 00 60 85 */ bl .L_00013878 +/* 0000D7F8 0001A588 7C 6B 1B 79 */ mr. r11, r3 +/* 0000D7FC 0001A58C 41 82 D8 18 */ beq .L_0000B014 +/* 0000D800 0001A590 81 2B 00 08 */ lwz r9, 0x8(r11) +/* 0000D804 0001A594 A8 69 00 28 */ lha r3, 0x28(r9) +/* 0000D808 0001A598 80 09 00 2C */ lwz r0, 0x2c(r9) +/* 0000D80C 0001A59C 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000D810 0001A5A0 7C 08 03 A6 */ mtlr r0 +/* 0000D814 0001A5A4 4E 80 00 21 */ blrl +/* 0000D818 0001A5A8 38 60 00 94 */ li r3, 0x94 +/* 0000D81C 0001A5AC 48 00 00 01 */ bl __builtin_new +/* 0000D820 0001A5B0 48 01 41 6D */ bl .text+0x1416C +/* 0000D824 0001A5B4 90 7F 02 C8 */ stw r3, 0x2c8(r31) +/* 0000D828 0001A5B8 7F E3 FB 78 */ mr r3, r31 +/* 0000D82C 0001A5BC 48 00 DB FD */ bl .L_0001B428 +/* 0000D830 0001A5C0 80 7F 02 D4 */ lwz r3, 0x2d4(r31) +/* 0000D834 0001A5C4 38 00 00 01 */ li r0, 0x1 +/* 0000D838 0001A5C8 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000D83C 0001A5CC 40 82 D8 44 */ bne .L_0000B080 +/* 0000D840 0001A5D0 38 00 00 00 */ li r0, 0x0 +/* 0000D844 0001A5D4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000D848 0001A5D8 41 82 D9 58 */ beq .L_0000B1A0 +/* 0000D84C 0001A5DC 38 81 00 18 */ addi r4, r1, 0x18 +/* 0000D850 0001A5E0 48 00 00 01 */ bl PSMTX44Copy +/* 0000D854 0001A5E4 81 3F 02 E8 */ lwz r9, 0x2e8(r31) +/* 0000D858 0001A5E8 3C 80 00 00 */ lis r4, _IHandle__14ICollisionBody@ha +/* 0000D85C 0001A5EC 38 84 00 00 */ addi r4, r4, _IHandle__14ICollisionBody@l +/* 0000D860 0001A5F0 80 69 00 00 */ lwz r3, 0x0(r9) +/* 0000D864 0001A5F4 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000D868 0001A5F8 7C 7D 1B 79 */ mr. r29, r3 +/* 0000D86C 0001A5FC 41 82 D9 3C */ beq .L_0000B1A8 +/* 0000D870 0001A600 81 7F 02 E8 */ lwz r11, 0x2e8(r31) +/* 0000D874 0001A604 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000D878 0001A608 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0000D87C 0001A60C A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000D880 0001A610 7C 08 03 A6 */ mtlr r0 +/* 0000D884 0001A614 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000D888 0001A618 4E 80 00 21 */ blrl +.L_0000D88C: +/* 0000D88C 0001A61C 81 23 00 04 */ lwz r9, 0x4(r3) +/* 0000D890 0001A620 A8 09 00 A8 */ lha r0, 0xa8(r9) +/* 0000D894 0001A624 81 29 00 AC */ lwz r9, 0xac(r9) +/* 0000D898 0001A628 7C 63 02 14 */ add r3, r3, r0 +/* 0000D89C 0001A62C 7D 28 03 A6 */ mtlr r9 +/* 0000D8A0 0001A630 4E 80 00 21 */ blrl +/* 0000D8A4 0001A634 81 3D 00 04 */ lwz r9, 0x4(r29) +/* 0000D8A8 0001A638 7C 7E 1B 78 */ mr r30, r3 +/* 0000D8AC 0001A63C 80 09 00 84 */ lwz r0, 0x84(r9) +/* 0000D8B0 0001A640 A8 69 00 80 */ lha r3, 0x80(r9) +/* 0000D8B4 0001A644 7C 08 03 A6 */ mtlr r0 +/* 0000D8B8 0001A648 7C 7D 1A 14 */ add r3, r29, r3 +/* 0000D8BC 0001A64C 4E 80 00 21 */ blrl +/* 0000D8C0 0001A650 C1 A3 00 00 */ lfs f13, 0x0(r3) +.L_0000D8C4: +/* 0000D8C4 0001A654 7F 24 CB 78 */ mr r4, r25 +/* 0000D8C8 0001A658 38 A0 00 00 */ li r5, 0x0 +/* 0000D8CC 0001A65C D1 A1 00 08 */ stfs f13, 0x8(r1) +.L_0000D8D0: +/* 0000D8D0 0001A660 C0 03 00 04 */ lfs f0, 0x4(r3) +.L_0000D8D4: +/* 0000D8D4 0001A664 D0 01 00 0C */ stfs f0, 0xc(r1) +/* 0000D8D8 0001A668 C1 A3 00 08 */ lfs f13, 0x8(r3) +/* 0000D8DC 0001A66C D1 B9 00 08 */ stfs f13, 0x8(r25) +/* 0000D8E0 0001A670 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000D8E4 0001A674 80 09 01 4C */ lwz r0, 0x14c(r9) +/* 0000D8E8 0001A678 A8 69 01 48 */ lha r3, 0x148(r9) +/* 0000D8EC 0001A67C 7C 08 03 A6 */ mtlr r0 +/* 0000D8F0 0001A680 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000D8F4 0001A684 4E 80 00 21 */ blrl +/* 0000D8F8 0001A688 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000D8FC 0001A68C A8 69 00 48 */ lha r3, 0x48(r9) +/* 0000D900 0001A690 80 09 00 4C */ lwz r0, 0x4c(r9) +/* 0000D904 0001A694 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000D908 0001A698 7C 08 03 A6 */ mtlr r0 +/* 0000D90C 0001A69C 4E 80 00 21 */ blrl +/* 0000D910 0001A6A0 7C 64 1B 78 */ mr r4, r3 +/* 0000D914 0001A6A4 7F 25 CB 78 */ mr r5, r25 +/* 0000D918 0001A6A8 7F 23 CB 78 */ mr r3, r25 +/* 0000D91C 0001A6AC 48 00 00 01 */ bl VU0_v3add__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 +/* 0000D920 0001A6B0 C0 01 00 08 */ lfs f0, 0x8(r1) +/* 0000D924 0001A6B4 C1 B9 00 08 */ lfs f13, 0x8(r25) +/* 0000D928 0001A6B8 C1 81 00 0C */ lfs f12, 0xc(r1) +/* 0000D92C 0001A6BC FC 00 00 50 */ fneg f0, f0 +/* 0000D930 0001A6C0 D1 A1 00 08 */ stfs f13, 0x8(r1) +/* 0000D934 0001A6C4 D0 01 00 0C */ stfs f0, 0xc(r1) +/* 0000D938 0001A6C8 D1 99 00 08 */ stfs f12, 0x8(r25) +/* 0000D93C 0001A6CC 3D 20 00 00 */ lis r9, .rodata+0x900@ha +/* 0000D940 0001A6D0 80 7F 02 C8 */ lwz r3, 0x2c8(r31) +/* 0000D944 0001A6D4 C0 29 09 00 */ lfs f1, .rodata+0x900@l(r9) +/* 0000D948 0001A6D8 80 9F 02 D4 */ lwz r4, 0x2d4(r31) +/* 0000D94C 0001A6DC 80 BF 02 D8 */ lwz r5, 0x2d8(r31) +/* 0000D950 0001A6E0 80 DF 02 DC */ lwz r6, 0x2dc(r31) +/* 0000D954 0001A6E4 48 01 42 49 */ bl .text+0x14248 +/* 0000D958 0001A6E8 38 60 01 2C */ li r3, 0x12c +/* 0000D95C 0001A6EC 48 00 00 01 */ bl __builtin_new +/* 0000D960 0001A6F0 80 98 00 04 */ lwz r4, 0x4(r24) +/* 0000D964 0001A6F4 80 BF 02 C8 */ lwz r5, 0x2c8(r31) +.L_0000D968: +/* 0000D968 0001A6F8 48 01 3C 09 */ bl .text+0x13C08 +/* 0000D96C 0001A6FC 90 7F 02 CC */ stw r3, 0x2cc(r31) +/* 0000D970 0001A700 7F E3 FB 78 */ mr r3, r31 +.L_0000D974: +/* 0000D974 0001A704 80 01 00 7C */ lwz r0, 0x7c(r1) +/* 0000D978 0001A708 7C 08 03 A6 */ mtlr r0 +/* 0000D97C 0001A70C BB 01 00 58 */ lmw r24, 0x58(r1) +/* 0000D980 0001A710 38 21 00 78 */ addi r1, r1, 0x78 +/* 0000D984 0001A714 4E 80 00 20 */ blr +.endfn __11CDActionIcePQ28CameraAI8DirectorP7IPlayer + +# .text:0xD988 | size: 0x14C +.fn _._11CDActionIce, global +/* 0000D988 0001A718 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0000D98C 0001A71C 7C 08 02 A6 */ mflr r0 +/* 0000D990 0001A720 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 0000D994 0001A724 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0000D998 0001A728 3D 20 00 00 */ lis r9, .rodata@ha +/* 0000D99C 0001A72C 7C 7F 1B 78 */ mr r31, r3 +/* 0000D9A0 0001A730 39 29 00 00 */ addi r9, r9, .rodata@l +/* 0000D9A4 0001A734 7C 9D 23 78 */ mr r29, r4 +.L_0000D9A8: +/* 0000D9A8 0001A738 3D 60 00 00 */ lis r11, _vt.11CDActionIce.11IAttachable@ha +/* 0000D9AC 0001A73C 3D 40 00 00 */ lis r10, _vt.11CDActionIce@ha +/* 0000D9B0 0001A740 7D 24 4B 78 */ mr r4, r9 +/* 0000D9B4 0001A744 39 6B 00 00 */ addi r11, r11, _vt.11CDActionIce.11IAttachable@l +/* 0000D9B8 0001A748 39 4A 00 00 */ addi r10, r10, _vt.11CDActionIce@l +.L_0000D9BC: +/* 0000D9BC 0001A74C 3C 60 00 00 */ lis r3, TheICEManager@ha +/* 0000D9C0 0001A750 7C 85 23 78 */ mr r5, r4 +/* 0000D9C4 0001A754 91 7F 00 1C */ stw r11, 0x1c(r31) +/* 0000D9C8 0001A758 91 5F 00 14 */ stw r10, 0x14(r31) +/* 0000D9CC 0001A75C 38 63 00 00 */ addi r3, r3, TheICEManager@l +/* 0000D9D0 0001A760 48 01 88 7D */ bl .text+0x1887C +/* 0000D9D4 0001A764 3B DF 00 18 */ addi r30, r31, 0x18 +.L_0000D9D8: +/* 0000D9D8 0001A768 80 9F 02 E0 */ lwz r4, 0x2e0(r31) +/* 0000D9DC 0001A76C 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0000D9E0 0001A770 41 82 D9 EC */ beq .L_0000B3CC +/* 0000D9E4 0001A774 80 7F 02 E4 */ lwz r3, 0x2e4(r31) +.L_0000D9E8: +/* 0000D9E8 0001A778 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown +/* 0000D9EC 0001A77C 7F E3 FB 78 */ mr r3, r31 +/* 0000D9F0 0001A780 38 80 00 01 */ li r4, 0x1 +/* 0000D9F4 0001A784 48 00 DB 8D */ bl .L_0001B580 +/* 0000D9F8 0001A788 81 7F 02 CC */ lwz r11, 0x2cc(r31) +/* 0000D9FC 0001A78C 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000DA00 0001A790 41 82 DA 20 */ beq .L_0000B420 +/* 0000DA04 0001A794 81 2B 00 08 */ lwz r9, 0x8(r11) +/* 0000DA08 0001A798 38 80 00 03 */ li r4, 0x3 +/* 0000DA0C 0001A79C A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000DA10 0001A7A0 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000DA14 0001A7A4 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000DA18 0001A7A8 7C 08 03 A6 */ mtlr r0 +/* 0000DA1C 0001A7AC 4E 80 00 21 */ blrl +/* 0000DA20 0001A7B0 80 7F 02 C8 */ lwz r3, 0x2c8(r31) +/* 0000DA24 0001A7B4 48 00 00 01 */ bl __builtin_delete +/* 0000DA28 0001A7B8 81 7F 02 E4 */ lwz r11, 0x2e4(r31) +/* 0000DA2C 0001A7BC 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000DA30 0001A7C0 41 82 DA 50 */ beq .L_0000B480 +/* 0000DA34 0001A7C4 81 2B 00 0C */ lwz r9, 0xc(r11) +/* 0000DA38 0001A7C8 38 80 00 03 */ li r4, 0x3 +/* 0000DA3C 0001A7CC A8 69 00 08 */ lha r3, 0x8(r9) +/* 0000DA40 0001A7D0 80 09 00 0C */ lwz r0, 0xc(r9) +/* 0000DA44 0001A7D4 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000DA48 0001A7D8 7C 08 03 A6 */ mtlr r0 +/* 0000DA4C 0001A7DC 4E 80 00 21 */ blrl +/* 0000DA50 0001A7E0 38 7F 02 D0 */ addi r3, r31, 0x2d0 +/* 0000DA54 0001A7E4 38 80 00 02 */ li r4, 0x2 +/* 0000DA58 0001A7E8 48 00 00 01 */ bl _._Q29WorldConn9Reference +/* 0000DA5C 0001A7EC 38 7F 00 20 */ addi r3, r31, 0x20 +/* 0000DA60 0001A7F0 38 80 00 02 */ li r4, 0x2 +/* 0000DA64 0001A7F4 48 00 00 01 */ bl _._11ActionQueue +/* 0000DA68 0001A7F8 3D 20 00 00 */ lis r9, _vt.Q33UTL3COM8IUnknown@ha +/* 0000DA6C 0001A7FC 80 7F 00 18 */ lwz r3, 0x18(r31) +/* 0000DA70 0001A800 39 29 00 00 */ addi r9, r9, _vt.Q33UTL3COM8IUnknown@l +/* 0000DA74 0001A804 7F C4 F3 78 */ mr r4, r30 +/* 0000DA78 0001A808 91 3F 00 1C */ stw r9, 0x1c(r31) +/* 0000DA7C 0001A80C 48 00 00 01 */ bl Remove__Q43UTL3COM6Object6_IListPQ33UTL3COM8IUnknown +/* 0000DA80 0001A810 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha +/* 0000DA84 0001A814 7F E3 FB 78 */ mr r3, r31 +/* 0000DA88 0001A818 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l +/* 0000DA8C 0001A81C 38 80 00 02 */ li r4, 0x2 +/* 0000DA90 0001A820 91 3F 00 14 */ stw r9, 0x14(r31) +/* 0000DA94 0001A824 48 00 00 01 */ bl _._Q43UTL3COM6Object6_IList +/* 0000DA98 0001A828 73 A0 00 01 */ andi. r0, r29, 0x1 +/* 0000DA9C 0001A82C 41 82 DA C0 */ beq .L_0000B55C +/* 0000DAA0 0001A830 2C 1F 00 00 */ cmpwi r31, 0x0 +/* 0000DAA4 0001A834 41 82 DA C0 */ beq .L_0000B564 +/* 0000DAA8 0001A838 3C 60 00 00 */ lis r3, gFastMem@ha +.L_0000DAAC: +/* 0000DAAC 0001A83C 7F E4 FB 78 */ mr r4, r31 +/* 0000DAB0 0001A840 38 63 00 00 */ addi r3, r3, gFastMem@l +.L_0000DAB4: +/* 0000DAB4 0001A844 38 A0 02 F8 */ li r5, 0x2f8 +/* 0000DAB8 0001A848 38 C0 00 00 */ li r6, 0x0 +/* 0000DABC 0001A84C 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 0000DAC0 0001A850 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0000DAC4 0001A854 7C 08 03 A6 */ mtlr r0 +/* 0000DAC8 0001A858 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 0000DACC 0001A85C 38 21 00 18 */ addi r1, r1, 0x18 +/* 0000DAD0 0001A860 4E 80 00 20 */ blr +.endfn _._11CDActionIce + +# .text:0xDAD4 | size: 0xB8 +.fn OnDetached__11CDActionIceP11IAttachable, global +/* 0000DAD4 0001A864 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0000DAD8 0001A868 7C 08 02 A6 */ mflr r0 +/* 0000DADC 0001A86C 90 01 00 0C */ stw r0, 0xc(r1) +/* 0000DAE0 0001A870 7C 84 23 79 */ mr. r4, r4 +/* 0000DAE4 0001A874 81 23 02 E0 */ lwz r9, 0x2e0(r3) +/* 0000DAE8 0001A878 4F 80 00 00 */ mcrf cr7, cr0 +/* 0000DAEC 0001A87C 41 9E DB 10 */ beq cr7, .L_0000B5FC +/* 0000DAF0 0001A880 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0000DAF4 0001A884 41 82 DB 10 */ beq .L_0000B604 +/* 0000DAF8 0001A888 81 29 00 00 */ lwz r9, 0x0(r9) +/* 0000DAFC 0001A88C 80 04 00 00 */ lwz r0, 0x0(r4) +/* 0000DB00 0001A890 7C 00 4A 78 */ xor r0, r0, r9 +/* 0000DB04 0001A894 21 60 00 00 */ subfic r11, r0, 0x0 +/* 0000DB08 0001A898 7C 0B 01 14 */ adde r0, r11, r0 +.L_0000DB0C: +/* 0000DB0C 0001A89C 48 00 DB 24 */ b .L_0001B630 +/* 0000DB10 0001A8A0 38 00 00 00 */ li r0, 0x0 +/* 0000DB14 0001A8A4 2F 84 00 00 */ cmpwi cr7, r4, 0x0 +/* 0000DB18 0001A8A8 40 9E DB 24 */ bne cr7, .L_0000B63C +/* 0000DB1C 0001A8AC 21 69 00 00 */ subfic r11, r9, 0x0 +/* 0000DB20 0001A8B0 7C 0B 49 14 */ adde r0, r11, r9 +/* 0000DB24 0001A8B4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000DB28 0001A8B8 41 82 DB 34 */ beq .L_0000B65C +/* 0000DB2C 0001A8BC 38 00 00 00 */ li r0, 0x0 +/* 0000DB30 0001A8C0 90 03 02 E0 */ stw r0, 0x2e0(r3) +/* 0000DB34 0001A8C4 81 63 02 E8 */ lwz r11, 0x2e8(r3) +/* 0000DB38 0001A8C8 41 9E DB 5C */ beq cr7, .L_0000B694 +/* 0000DB3C 0001A8CC 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000DB40 0001A8D0 41 82 DB 5C */ beq .L_0000B69C +/* 0000DB44 0001A8D4 81 24 00 00 */ lwz r9, 0x0(r4) +/* 0000DB48 0001A8D8 80 0B 00 00 */ lwz r0, 0x0(r11) +/* 0000DB4C 0001A8DC 7D 20 02 78 */ xor r0, r9, r0 +/* 0000DB50 0001A8E0 21 60 00 00 */ subfic r11, r0, 0x0 +/* 0000DB54 0001A8E4 7C 0B 01 14 */ adde r0, r11, r0 +.L_0000DB58: +/* 0000DB58 0001A8E8 48 00 DB 6C */ b .L_0001B6C4 +/* 0000DB5C 0001A8EC 38 00 00 00 */ li r0, 0x0 +/* 0000DB60 0001A8F0 40 9E DB 6C */ bne cr7, .L_0000B6CC +/* 0000DB64 0001A8F4 21 2B 00 00 */ subfic r9, r11, 0x0 +/* 0000DB68 0001A8F8 7C 09 59 14 */ adde r0, r9, r11 +/* 0000DB6C 0001A8FC 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000DB70 0001A900 41 82 DB 7C */ beq .L_0000B6EC +/* 0000DB74 0001A904 38 80 00 00 */ li r4, 0x0 +/* 0000DB78 0001A908 48 00 DB 8D */ bl .L_0001B704 +/* 0000DB7C 0001A90C 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0000DB80 0001A910 7C 08 03 A6 */ mtlr r0 +/* 0000DB84 0001A914 38 21 00 08 */ addi r1, r1, 0x8 +/* 0000DB88 0001A918 4E 80 00 20 */ blr +.endfn OnDetached__11CDActionIceP11IAttachable + +# .text:0xDB8C | size: 0x70 +.fn ReleaseCar__11CDActionIceb, global +/* 0000DB8C 0001A91C 94 21 FF F0 */ stwu r1, -0x10(r1) +.L_0000DB90: +/* 0000DB90 0001A920 7C 08 02 A6 */ mflr r0 +/* 0000DB94 0001A924 93 E1 00 0C */ stw r31, 0xc(r1) +/* 0000DB98 0001A928 90 01 00 14 */ stw r0, 0x14(r1) +/* 0000DB9C 0001A92C 7C 7F 1B 78 */ mr r31, r3 +/* 0000DBA0 0001A930 81 7F 02 E8 */ lwz r11, 0x2e8(r31) +/* 0000DBA4 0001A934 2C 0B 00 00 */ cmpwi r11, 0x0 +.L_0000DBA8: +/* 0000DBA8 0001A938 41 82 DB DC */ beq .L_0000B784 +/* 0000DBAC 0001A93C 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0000DBB0 0001A940 41 82 DB D4 */ beq .L_0000B784 +/* 0000DBB4 0001A944 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 0000DBB8 0001A948 38 1F 00 18 */ addi r0, r31, 0x18 +/* 0000DBBC 0001A94C 7D 64 5B 78 */ mr r4, r11 +.L_0000DBC0: +/* 0000DBC0 0001A950 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000DBC4 0001A954 81 29 00 1C */ lwz r9, 0x1c(r9) +/* 0000DBC8 0001A958 7C 60 1A 14 */ add r3, r0, r3 +/* 0000DBCC 0001A95C 7D 28 03 A6 */ mtlr r9 +/* 0000DBD0 0001A960 4E 80 00 21 */ blrl +/* 0000DBD4 0001A964 38 00 00 00 */ li r0, 0x0 +/* 0000DBD8 0001A968 90 1F 02 E8 */ stw r0, 0x2e8(r31) +.L_0000DBDC: +/* 0000DBDC 0001A96C 38 7F 02 D0 */ addi r3, r31, 0x2d0 +/* 0000DBE0 0001A970 38 80 00 00 */ li r4, 0x0 +/* 0000DBE4 0001A974 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi +/* 0000DBE8 0001A978 80 01 00 14 */ lwz r0, 0x14(r1) +/* 0000DBEC 0001A97C 7C 08 03 A6 */ mtlr r0 +.L_0000DBF0: +/* 0000DBF0 0001A980 83 E1 00 0C */ lwz r31, 0xc(r1) +/* 0000DBF4 0001A984 38 21 00 10 */ addi r1, r1, 0x10 +/* 0000DBF8 0001A988 4E 80 00 20 */ blr +.endfn ReleaseCar__11CDActionIceb + +# .text:0xDBFC | size: 0x208 +# CDActionIce::AquireCar +.fn AquireCar__11CDActionIce, global +/* 0000DBFC 0001A98C 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0000DC00 0001A990 7C 08 02 A6 */ mflr r0 +/* 0000DC04 0001A994 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 0000DC08 0001A998 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0000DC0C 0001A99C 7C 7D 1B 78 */ mr r29, r3 +/* 0000DC10 0001A9A0 81 7D 02 E0 */ lwz r11, 0x2e0(r29) +/* 0000DC14 0001A9A4 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000DC18 0001A9A8 41 82 DD F0 */ beq .L_0000BA08 +/* 0000DC1C 0001A9AC 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000DC20 0001A9B0 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000DC24 0001A9B4 80 09 00 14 */ lwz r0, 0x14(r9) +.L_0000DC28: +/* 0000DC28 0001A9B8 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000DC2C 0001A9BC 7C 08 03 A6 */ mtlr r0 +/* 0000DC30 0001A9C0 4E 80 00 21 */ blrl +/* 0000DC34 0001A9C4 81 7D 02 E8 */ lwz r11, 0x2e8(r29) +/* 0000DC38 0001A9C8 7C 63 1B 79 */ mr. r3, r3 +/* 0000DC3C 0001A9CC 41 82 DC 60 */ beq .L_0000B89C +/* 0000DC40 0001A9D0 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000DC44 0001A9D4 41 82 DC 60 */ beq .L_0000B8A4 +/* 0000DC48 0001A9D8 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0000DC4C 0001A9DC 80 0B 00 00 */ lwz r0, 0x0(r11) +/* 0000DC50 0001A9E0 7D 20 02 78 */ xor r0, r9, r0 +/* 0000DC54 0001A9E4 21 60 00 00 */ subfic r11, r0, 0x0 +/* 0000DC58 0001A9E8 7C 0B 01 14 */ adde r0, r11, r0 +/* 0000DC5C 0001A9EC 48 00 DC 74 */ b .L_0001B8D0 +/* 0000DC60 0001A9F0 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000DC64 0001A9F4 38 00 00 00 */ li r0, 0x0 +/* 0000DC68 0001A9F8 40 82 DC 74 */ bne .L_0000B8DC +/* 0000DC6C 0001A9FC 21 2B 00 00 */ subfic r9, r11, 0x0 +/* 0000DC70 0001AA00 7C 09 59 14 */ adde r0, r9, r11 +/* 0000DC74 0001AA04 2C 00 00 00 */ cmpwi r0, 0x0 +.L_0000DC78: +/* 0000DC78 0001AA08 40 82 DC 88 */ bne .L_0000B900 +.L_0000DC7C: +/* 0000DC7C 0001AA0C 7F A3 EB 78 */ mr r3, r29 +/* 0000DC80 0001AA10 38 80 00 01 */ li r4, 0x1 +.L_0000DC84: +/* 0000DC84 0001AA14 48 00 DB 8D */ bl .L_0001B810 +/* 0000DC88 0001AA18 80 1D 02 E8 */ lwz r0, 0x2e8(r29) +/* 0000DC8C 0001AA1C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000DC90 0001AA20 40 82 DD F0 */ bne .L_0000BA80 +/* 0000DC94 0001AA24 80 7D 02 E0 */ lwz r3, 0x2e0(r29) +/* 0000DC98 0001AA28 81 23 00 04 */ lwz r9, 0x4(r3) +.L_0000DC9C: +/* 0000DC9C 0001AA2C A8 09 00 10 */ lha r0, 0x10(r9) +/* 0000DCA0 0001AA30 81 29 00 14 */ lwz r9, 0x14(r9) +/* 0000DCA4 0001AA34 7C 63 02 14 */ add r3, r3, r0 +/* 0000DCA8 0001AA38 7D 28 03 A6 */ mtlr r9 +/* 0000DCAC 0001AA3C 4E 80 00 21 */ blrl +/* 0000DCB0 0001AA40 7C 7F 1B 79 */ mr. r31, r3 +/* 0000DCB4 0001AA44 41 82 DD F0 */ beq .L_0000BAA4 +/* 0000DCB8 0001AA48 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 0000DCBC 0001AA4C 3B DD 02 D0 */ addi r30, r29, 0x2d0 +/* 0000DCC0 0001AA50 80 09 00 EC */ lwz r0, 0xec(r9) +/* 0000DCC4 0001AA54 A8 69 00 E8 */ lha r3, 0xe8(r9) +/* 0000DCC8 0001AA58 7C 08 03 A6 */ mtlr r0 +/* 0000DCCC 0001AA5C 7C 7F 1A 14 */ add r3, r31, r3 +/* 0000DCD0 0001AA60 4E 80 00 21 */ blrl +/* 0000DCD4 0001AA64 7C 64 1B 78 */ mr r4, r3 +/* 0000DCD8 0001AA68 7F C3 F3 78 */ mr r3, r30 +/* 0000DCDC 0001AA6C 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi +/* 0000DCE0 0001AA70 80 1D 02 D4 */ lwz r0, 0x2d4(r29) +/* 0000DCE4 0001AA74 39 20 00 01 */ li r9, 0x1 +/* 0000DCE8 0001AA78 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000DCEC 0001AA7C 40 82 DC F4 */ bne .L_0000B9E0 +/* 0000DCF0 0001AA80 39 20 00 00 */ li r9, 0x0 +/* 0000DCF4 0001AA84 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0000DCF8 0001AA88 41 82 DD F0 */ beq .L_0000BAE8 +/* 0000DCFC 0001AA8C 80 7F 00 00 */ lwz r3, 0x0(r31) +/* 0000DD00 0001AA90 3C 80 00 00 */ lis r4, _IHandle__8IVehicle@ha +/* 0000DD04 0001AA94 38 84 00 00 */ addi r4, r4, _IHandle__8IVehicle@l +/* 0000DD08 0001AA98 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000DD0C 0001AA9C 38 00 00 01 */ li r0, 0x1 +/* 0000DD10 0001AAA0 90 7D 02 E8 */ stw r3, 0x2e8(r29) +/* 0000DD14 0001AAA4 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000DD18 0001AAA8 40 82 DD 20 */ bne .L_0000BA38 +/* 0000DD1C 0001AAAC 38 00 00 00 */ li r0, 0x0 +.L_0000DD20: +/* 0000DD20 0001AAB0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000DD24 0001AAB4 41 82 DD F0 */ beq .L_0000BB14 +/* 0000DD28 0001AAB8 81 3D 00 1C */ lwz r9, 0x1c(r29) +/* 0000DD2C 0001AABC 7C 64 1B 78 */ mr r4, r3 +/* 0000DD30 0001AAC0 38 1D 00 18 */ addi r0, r29, 0x18 +/* 0000DD34 0001AAC4 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000DD38 0001AAC8 81 29 00 14 */ lwz r9, 0x14(r9) +/* 0000DD3C 0001AACC 7C 60 1A 14 */ add r3, r0, r3 +/* 0000DD40 0001AAD0 7D 28 03 A6 */ mtlr r9 +/* 0000DD44 0001AAD4 4E 80 00 21 */ blrl +/* 0000DD48 0001AAD8 81 3D 02 E8 */ lwz r9, 0x2e8(r29) +/* 0000DD4C 0001AADC 3C 80 00 00 */ lis r4, _IHandle__13ITransmission@ha +/* 0000DD50 0001AAE0 38 84 00 00 */ addi r4, r4, _IHandle__13ITransmission@l +/* 0000DD54 0001AAE4 80 69 00 00 */ lwz r3, 0x0(r9) +/* 0000DD58 0001AAE8 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000DD5C 0001AAEC 7C 6B 1B 79 */ mr. r11, r3 +/* 0000DD60 0001AAF0 38 00 00 01 */ li r0, 0x1 +/* 0000DD64 0001AAF4 40 82 DD 6C */ bne .L_0000BAD0 +/* 0000DD68 0001AAF8 38 00 00 00 */ li r0, 0x0 +/* 0000DD6C 0001AAFC 2C 00 00 00 */ cmpwi r0, 0x0 +.L_0000DD70: +/* 0000DD70 0001AB00 41 82 DD 94 */ beq .L_0000BB04 +/* 0000DD74 0001AB04 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000DD78 0001AB08 A8 69 00 40 */ lha r3, 0x40(r9) +/* 0000DD7C 0001AB0C 80 09 00 44 */ lwz r0, 0x44(r9) +/* 0000DD80 0001AB10 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000DD84 0001AB14 7C 08 03 A6 */ mtlr r0 +.L_0000DD88: +/* 0000DD88 0001AB18 4E 80 00 21 */ blrl +/* 0000DD8C 0001AB1C 81 3D 02 C8 */ lwz r9, 0x2c8(r29) +/* 0000DD90 0001AB20 D0 29 00 74 */ stfs f1, 0x74(r9) +.L_0000DD94: +/* 0000DD94 0001AB24 81 3D 02 E8 */ lwz r9, 0x2e8(r29) +/* 0000DD98 0001AB28 3C 80 00 00 */ lis r4, _IHandle__11ISuspension@ha +/* 0000DD9C 0001AB2C 38 84 00 00 */ addi r4, r4, _IHandle__11ISuspension@l +/* 0000DDA0 0001AB30 80 69 00 00 */ lwz r3, 0x0(r9) +/* 0000DDA4 0001AB34 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000DDA8 0001AB38 7C 6B 1B 79 */ mr. r11, r3 +/* 0000DDAC 0001AB3C 38 00 00 01 */ li r0, 0x1 +/* 0000DDB0 0001AB40 40 82 DD B8 */ bne .L_0000BB68 +.L_0000DDB4: +/* 0000DDB4 0001AB44 38 00 00 00 */ li r0, 0x0 +/* 0000DDB8 0001AB48 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000DDBC 0001AB4C 41 82 DD F0 */ beq .L_0000BBAC +/* 0000DDC0 0001AB50 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000DDC4 0001AB54 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0000DDC8 0001AB58 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000DDCC 0001AB5C 7C 08 03 A6 */ mtlr r0 +/* 0000DDD0 0001AB60 7C 6B 1A 14 */ add r3, r11, r3 +.L_0000DDD4: +/* 0000DDD4 0001AB64 4E 80 00 21 */ blrl +/* 0000DDD8 0001AB68 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000DDDC 0001AB6C 38 00 00 01 */ li r0, 0x1 +/* 0000DDE0 0001AB70 40 82 DD E8 */ bne .L_0000BBC8 +/* 0000DDE4 0001AB74 38 00 00 00 */ li r0, 0x0 +.L_0000DDE8: +/* 0000DDE8 0001AB78 81 3D 02 C8 */ lwz r9, 0x2c8(r29) +/* 0000DDEC 0001AB7C 90 09 00 7C */ stw r0, 0x7c(r9) +/* 0000DDF0 0001AB80 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0000DDF4 0001AB84 7C 08 03 A6 */ mtlr r0 +/* 0000DDF8 0001AB88 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 0000DDFC 0001AB8C 38 21 00 18 */ addi r1, r1, 0x18 +/* 0000DE00 0001AB90 4E 80 00 20 */ blr +.endfn AquireCar__11CDActionIce + +# .text:0xDE04 | size: 0x424 +.fn Update__11CDActionIcef, global +/* 0000DE04 0001AB94 94 21 FF 80 */ stwu r1, -0x80(r1) +.L_0000DE08: +/* 0000DE08 0001AB98 7C 08 02 A6 */ mflr r0 +/* 0000DE0C 0001AB9C F3 C1 00 70 */ psq_st f30, 0x70(r1), 0, qr0 +/* 0000DE10 0001ABA0 F3 E1 00 78 */ psq_st f31, 0x78(r1), 0, qr0 +/* 0000DE14 0001ABA4 BF 81 00 60 */ stmw r28, 0x60(r1) +/* 0000DE18 0001ABA8 90 01 00 84 */ stw r0, 0x84(r1) +/* 0000DE1C 0001ABAC 7C 7F 1B 78 */ mr r31, r3 +/* 0000DE20 0001ABB0 FF C0 08 90 */ fmr f30, f1 +/* 0000DE24 0001ABB4 3B DF 00 20 */ addi r30, r31, 0x20 +/* 0000DE28 0001ABB8 3B 80 00 00 */ li r28, 0x0 +/* 0000DE2C 0001ABBC 3B A0 00 01 */ li r29, 0x1 +/* 0000DE30 0001ABC0 48 00 DE 80 */ b .L_0001BCB0 +/* 0000DE34 0001ABC4 38 61 00 58 */ addi r3, r1, 0x58 +/* 0000DE38 0001ABC8 7F C4 F3 78 */ mr r4, r30 +/* 0000DE3C 0001ABCC 4C C6 31 82 */ crclr cr1eq +/* 0000DE40 0001ABD0 48 00 00 01 */ bl GetAction__11ActionQueue +/* 0000DE44 0001ABD4 81 21 00 58 */ lwz r9, 0x58(r1) +/* 0000DE48 0001ABD8 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0000DE4C 0001ABDC 38 00 00 00 */ li r0, 0x0 +/* 0000DE50 0001ABE0 41 82 DE 58 */ beq .L_0000BCA8 +/* 0000DE54 0001ABE4 80 09 00 00 */ lwz r0, 0x0(r9) +/* 0000DE58 0001ABE8 2C 00 00 15 */ cmpwi r0, 0x15 +.L_0000DE5C: +/* 0000DE5C 0001ABEC 40 82 DE 78 */ bne .L_0000BCD4 +/* 0000DE60 0001ABF0 3D 20 00 00 */ lis r9, Tweak_EnableICEAuthoring@ha +/* 0000DE64 0001ABF4 80 09 00 00 */ lwz r0, Tweak_EnableICEAuthoring@l(r9) +/* 0000DE68 0001ABF8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000DE6C 0001ABFC 41 82 DE 78 */ beq .L_0000BCE4 +/* 0000DE70 0001AC00 93 89 00 00 */ stw r28, Tweak_EnableICEAuthoring@l(r9) +/* 0000DE74 0001AC04 93 BF 02 F0 */ stw r29, 0x2f0(r31) +/* 0000DE78 0001AC08 38 7F 00 20 */ addi r3, r31, 0x20 +/* 0000DE7C 0001AC0C 48 00 00 01 */ bl PopAction__11ActionQueue +/* 0000DE80 0001AC10 7F C3 F3 78 */ mr r3, r30 +.L_0000DE84: +/* 0000DE84 0001AC14 48 00 00 01 */ bl IsEmpty__11ActionQueue +/* 0000DE88 0001AC18 2C 03 00 00 */ cmpwi r3, 0x0 +.L_0000DE8C: +/* 0000DE8C 0001AC1C 41 82 DE 34 */ beq .L_0000BCC0 +/* 0000DE90 0001AC20 80 1F 02 E0 */ lwz r0, 0x2e0(r31) +.L_0000DE94: +/* 0000DE94 0001AC24 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000DE98 0001AC28 40 82 DE AC */ bne .L_0000BD44 +/* 0000DE9C 0001AC2C 7F E3 FB 78 */ mr r3, r31 +/* 0000DEA0 0001AC30 38 80 00 01 */ li r4, 0x1 +/* 0000DEA4 0001AC34 48 00 DB 8D */ bl .L_0001BA30 +/* 0000DEA8 0001AC38 48 00 E2 0C */ b .L_0001C0B4 +/* 0000DEAC 0001AC3C 7F E3 FB 78 */ mr r3, r31 +/* 0000DEB0 0001AC40 48 00 DB FD */ bl .L_0001BAAC +/* 0000DEB4 0001AC44 80 7F 02 D4 */ lwz r3, 0x2d4(r31) +/* 0000DEB8 0001AC48 38 00 00 01 */ li r0, 0x1 +/* 0000DEBC 0001AC4C 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000DEC0 0001AC50 40 82 DE C8 */ bne .L_0000BD88 +/* 0000DEC4 0001AC54 38 00 00 00 */ li r0, 0x0 +/* 0000DEC8 0001AC58 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000DECC 0001AC5C 41 82 E2 00 */ beq .L_0000C0CC +/* 0000DED0 0001AC60 38 81 00 08 */ addi r4, r1, 0x8 +/* 0000DED4 0001AC64 48 00 00 01 */ bl PSMTX44Copy +/* 0000DED8 0001AC68 80 7F 02 E8 */ lwz r3, 0x2e8(r31) +/* 0000DEDC 0001AC6C 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000DEE0 0001AC70 41 82 DF DC */ beq .L_0000BEBC +.L_0000DEE4: +/* 0000DEE4 0001AC74 80 63 00 00 */ lwz r3, 0x0(r3) +/* 0000DEE8 0001AC78 3C 80 00 00 */ lis r4, _IHandle__14ICollisionBody@ha +/* 0000DEEC 0001AC7C 38 84 00 00 */ addi r4, r4, _IHandle__14ICollisionBody@l +/* 0000DEF0 0001AC80 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000DEF4 0001AC84 7C 7C 1B 79 */ mr. r28, r3 +/* 0000DEF8 0001AC88 38 00 00 01 */ li r0, 0x1 +/* 0000DEFC 0001AC8C 40 82 DF 04 */ bne .L_0000BE00 +/* 0000DF00 0001AC90 38 00 00 00 */ li r0, 0x0 +/* 0000DF04 0001AC94 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000DF08 0001AC98 41 82 DF DC */ beq .L_0000BEE4 +/* 0000DF0C 0001AC9C 81 7F 02 E8 */ lwz r11, 0x2e8(r31) +/* 0000DF10 0001ACA0 3B A1 00 48 */ addi r29, r1, 0x48 +/* 0000DF14 0001ACA4 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000DF18 0001ACA8 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0000DF1C 0001ACAC A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000DF20 0001ACB0 7C 08 03 A6 */ mtlr r0 +/* 0000DF24 0001ACB4 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000DF28 0001ACB8 4E 80 00 21 */ blrl +/* 0000DF2C 0001ACBC 81 23 00 04 */ lwz r9, 0x4(r3) +/* 0000DF30 0001ACC0 A8 09 00 A8 */ lha r0, 0xa8(r9) +/* 0000DF34 0001ACC4 81 29 00 AC */ lwz r9, 0xac(r9) +/* 0000DF38 0001ACC8 7C 63 02 14 */ add r3, r3, r0 +/* 0000DF3C 0001ACCC 7D 28 03 A6 */ mtlr r9 +/* 0000DF40 0001ACD0 4E 80 00 21 */ blrl +/* 0000DF44 0001ACD4 81 3C 00 04 */ lwz r9, 0x4(r28) +/* 0000DF48 0001ACD8 7C 7E 1B 78 */ mr r30, r3 +/* 0000DF4C 0001ACDC 80 09 00 84 */ lwz r0, 0x84(r9) +/* 0000DF50 0001ACE0 A8 69 00 80 */ lha r3, 0x80(r9) +/* 0000DF54 0001ACE4 7C 08 03 A6 */ mtlr r0 +/* 0000DF58 0001ACE8 7C 7C 1A 14 */ add r3, r28, r3 +/* 0000DF5C 0001ACEC 4E 80 00 21 */ blrl +/* 0000DF60 0001ACF0 C1 A3 00 00 */ lfs f13, 0x0(r3) +/* 0000DF64 0001ACF4 7F A4 EB 78 */ mr r4, r29 +/* 0000DF68 0001ACF8 38 A0 00 00 */ li r5, 0x0 +/* 0000DF6C 0001ACFC D1 A1 00 48 */ stfs f13, 0x48(r1) +/* 0000DF70 0001AD00 C0 03 00 04 */ lfs f0, 0x4(r3) +/* 0000DF74 0001AD04 D0 01 00 4C */ stfs f0, 0x4c(r1) +/* 0000DF78 0001AD08 C1 A3 00 08 */ lfs f13, 0x8(r3) +.L_0000DF7C: +/* 0000DF7C 0001AD0C D1 A1 00 50 */ stfs f13, 0x50(r1) +/* 0000DF80 0001AD10 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000DF84 0001AD14 80 09 01 4C */ lwz r0, 0x14c(r9) +/* 0000DF88 0001AD18 A8 69 01 48 */ lha r3, 0x148(r9) +.L_0000DF8C: +/* 0000DF8C 0001AD1C 7C 08 03 A6 */ mtlr r0 +/* 0000DF90 0001AD20 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000DF94 0001AD24 4E 80 00 21 */ blrl +/* 0000DF98 0001AD28 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000DF9C 0001AD2C A8 69 00 48 */ lha r3, 0x48(r9) +/* 0000DFA0 0001AD30 80 09 00 4C */ lwz r0, 0x4c(r9) +/* 0000DFA4 0001AD34 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000DFA8 0001AD38 7C 08 03 A6 */ mtlr r0 +/* 0000DFAC 0001AD3C 4E 80 00 21 */ blrl +/* 0000DFB0 0001AD40 7C 64 1B 78 */ mr r4, r3 +.L_0000DFB4: +/* 0000DFB4 0001AD44 7F A3 EB 78 */ mr r3, r29 +/* 0000DFB8 0001AD48 7C 65 1B 78 */ mr r5, r3 +/* 0000DFBC 0001AD4C 48 00 00 01 */ bl VU0_v3add__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 +/* 0000DFC0 0001AD50 C0 01 00 48 */ lfs f0, 0x48(r1) +/* 0000DFC4 0001AD54 C1 A1 00 50 */ lfs f13, 0x50(r1) +/* 0000DFC8 0001AD58 C1 81 00 4C */ lfs f12, 0x4c(r1) +.L_0000DFCC: +/* 0000DFCC 0001AD5C FC 00 00 50 */ fneg f0, f0 +/* 0000DFD0 0001AD60 D1 A1 00 38 */ stfs f13, 0x38(r1) +.L_0000DFD4: +/* 0000DFD4 0001AD64 D0 01 00 3C */ stfs f0, 0x3c(r1) +/* 0000DFD8 0001AD68 D1 81 00 40 */ stfs f12, 0x40(r1) +.L_0000DFDC: +/* 0000DFDC 0001AD6C 3D 20 00 00 */ lis r9, .rodata+0x904@ha +/* 0000DFE0 0001AD70 81 7F 02 C8 */ lwz r11, 0x2c8(r31) +/* 0000DFE4 0001AD74 83 C9 09 04 */ lwz r30, .rodata+0x904@l(r9) +/* 0000DFE8 0001AD78 93 CB 00 84 */ stw r30, 0x84(r11) +/* 0000DFEC 0001AD7C 81 7F 02 E8 */ lwz r11, 0x2e8(r31) +/* 0000DFF0 0001AD80 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000DFF4 0001AD84 41 82 E0 18 */ beq .L_0000C00C +/* 0000DFF8 0001AD88 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0000DFFC 0001AD8C A8 69 01 68 */ lha r3, 0x168(r9) +/* 0000E000 0001AD90 80 09 01 6C */ lwz r0, 0x16c(r9) +/* 0000E004 0001AD94 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000E008 0001AD98 7C 08 03 A6 */ mtlr r0 +/* 0000E00C 0001AD9C 4E 80 00 21 */ blrl +/* 0000E010 0001ADA0 81 3F 02 C8 */ lwz r9, 0x2c8(r31) +/* 0000E014 0001ADA4 D0 29 00 84 */ stfs f1, 0x84(r9) +/* 0000E018 0001ADA8 81 7F 02 C8 */ lwz r11, 0x2c8(r31) +/* 0000E01C 0001ADAC 38 00 00 00 */ li r0, 0x0 +/* 0000E020 0001ADB0 93 CB 00 78 */ stw r30, 0x78(r11) +/* 0000E024 0001ADB4 81 3F 02 C8 */ lwz r9, 0x2c8(r31) +/* 0000E028 0001ADB8 90 09 00 8C */ stw r0, 0x8c(r9) +/* 0000E02C 0001ADBC 81 7F 02 C8 */ lwz r11, 0x2c8(r31) +/* 0000E030 0001ADC0 93 CB 00 90 */ stw r30, 0x90(r11) +/* 0000E034 0001ADC4 80 7F 02 E8 */ lwz r3, 0x2e8(r31) +/* 0000E038 0001ADC8 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000E03C 0001ADCC 41 82 E0 F0 */ beq .L_0000C12C +/* 0000E040 0001ADD0 80 63 00 00 */ lwz r3, 0x0(r3) +/* 0000E044 0001ADD4 3C 80 00 00 */ lis r4, _IHandle__8ISimable@ha +/* 0000E048 0001ADD8 38 84 00 00 */ addi r4, r4, _IHandle__8ISimable@l +/* 0000E04C 0001ADDC 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +.L_0000E050: +/* 0000E050 0001ADE0 7C 63 1B 79 */ mr. r3, r3 +/* 0000E054 0001ADE4 38 00 00 01 */ li r0, 0x1 +/* 0000E058 0001ADE8 40 82 E0 60 */ bne .L_0000C0B8 +/* 0000E05C 0001ADEC 38 00 00 00 */ li r0, 0x0 +/* 0000E060 0001ADF0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000E064 0001ADF4 41 82 E0 F0 */ beq .L_0000C154 +.L_0000E068: +/* 0000E068 0001ADF8 80 63 00 00 */ lwz r3, 0x0(r3) +/* 0000E06C 0001ADFC 3C 80 00 00 */ lis r4, _IHandle__7IEngine@ha +/* 0000E070 0001AE00 38 84 00 00 */ addi r4, r4, _IHandle__7IEngine@l +/* 0000E074 0001AE04 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 0000E078 0001AE08 7C 7E 1B 79 */ mr. r30, r3 +/* 0000E07C 0001AE0C 38 00 00 01 */ li r0, 0x1 +/* 0000E080 0001AE10 40 82 E0 88 */ bne .L_0000C108 +/* 0000E084 0001AE14 38 00 00 00 */ li r0, 0x0 +/* 0000E088 0001AE18 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000E08C 0001AE1C 41 82 E0 F0 */ beq GetTrafficBasis__16CDActionTrackCopRQ25UMath7Matrix4RQ25UMath7Vector3 +/* 0000E090 0001AE20 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000E094 0001AE24 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000E098 0001AE28 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000E09C 0001AE2C 7C 08 03 A6 */ mtlr r0 +/* 0000E0A0 0001AE30 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000E0A4 0001AE34 4E 80 00 21 */ blrl +/* 0000E0A8 0001AE38 81 3F 02 C8 */ lwz r9, 0x2c8(r31) +/* 0000E0AC 0001AE3C D0 29 00 78 */ stfs f1, 0x78(r9) +/* 0000E0B0 0001AE40 81 7E 00 04 */ lwz r11, 0x4(r30) +/* 0000E0B4 0001AE44 80 0B 00 4C */ lwz r0, 0x4c(r11) +/* 0000E0B8 0001AE48 A8 6B 00 48 */ lha r3, 0x48(r11) +/* 0000E0BC 0001AE4C 7C 08 03 A6 */ mtlr r0 +/* 0000E0C0 0001AE50 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000E0C4 0001AE54 4E 80 00 21 */ blrl +/* 0000E0C8 0001AE58 81 3F 02 C8 */ lwz r9, 0x2c8(r31) +/* 0000E0CC 0001AE5C 90 69 00 8C */ stw r3, 0x8c(r9) +/* 0000E0D0 0001AE60 81 7E 00 04 */ lwz r11, 0x4(r30) +/* 0000E0D4 0001AE64 A8 6B 00 40 */ lha r3, 0x40(r11) +/* 0000E0D8 0001AE68 80 0B 00 44 */ lwz r0, 0x44(r11) +/* 0000E0DC 0001AE6C 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000E0E0 0001AE70 7C 08 03 A6 */ mtlr r0 +/* 0000E0E4 0001AE74 4E 80 00 21 */ blrl +/* 0000E0E8 0001AE78 81 3F 02 C8 */ lwz r9, 0x2c8(r31) +/* 0000E0EC 0001AE7C D0 29 00 90 */ stfs f1, 0x90(r9) +/* 0000E0F0 0001AE80 80 7F 02 E8 */ lwz r3, 0x2e8(r31) +/* 0000E0F4 0001AE84 3D 20 00 00 */ lis r9, .rodata+0x904@ha +/* 0000E0F8 0001AE88 C3 E9 09 04 */ lfs f31, .rodata+0x904@l(r9) +/* 0000E0FC 0001AE8C 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000E100 0001AE90 41 82 E1 A8 */ beq .L_0000C2A8 +/* 0000E104 0001AE94 80 63 00 00 */ lwz r3, 0x0(r3) +/* 0000E108 0001AE98 3C 80 00 00 */ lis r4, _IHandle__11ISuspension@ha +/* 0000E10C 0001AE9C 38 84 00 00 */ addi r4, r4, _IHandle__11ISuspension@l +/* 0000E110 0001AEA0 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +.L_0000E114: +/* 0000E114 0001AEA4 7C 7E 1B 79 */ mr. r30, r3 +/* 0000E118 0001AEA8 38 00 00 01 */ li r0, 0x1 +/* 0000E11C 0001AEAC 40 82 E1 24 */ bne .L_0000C240 +/* 0000E120 0001AEB0 38 00 00 00 */ li r0, 0x0 +/* 0000E124 0001AEB4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000E128 0001AEB8 41 82 E1 A8 */ beq .L_0000C2D0 +.L_0000E12C: +/* 0000E12C 0001AEBC 3B A0 00 00 */ li r29, 0x0 +/* 0000E130 0001AEC0 48 00 E1 88 */ b .L_0001C2B8 +/* 0000E134 0001AEC4 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000E138 0001AEC8 7F A4 EB 78 */ mr r4, r29 +/* 0000E13C 0001AECC A8 69 00 68 */ lha r3, 0x68(r9) +/* 0000E140 0001AED0 80 09 00 6C */ lwz r0, 0x6c(r9) +/* 0000E144 0001AED4 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000E148 0001AED8 7C 08 03 A6 */ mtlr r0 +/* 0000E14C 0001AEDC 4E 80 00 21 */ blrl +/* 0000E150 0001AEE0 3D 20 00 00 */ lis r9, .rodata+0x904@ha +/* 0000E154 0001AEE4 C0 09 09 04 */ lfs f0, .rodata+0x904@l(r9) +/* 0000E158 0001AEE8 FC 01 00 00 */ fcmpu cr0, f1, f0 +/* 0000E15C 0001AEEC 4C 62 03 82 */ cror un, eq, lt +/* 0000E160 0001AEF0 41 83 E1 84 */ bso .L_0000C2E4 +/* 0000E164 0001AEF4 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000E168 0001AEF8 7F A4 EB 78 */ mr r4, r29 +/* 0000E16C 0001AEFC A8 69 00 68 */ lha r3, 0x68(r9) +/* 0000E170 0001AF00 80 09 00 6C */ lwz r0, 0x6c(r9) +/* 0000E174 0001AF04 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000E178 0001AF08 7C 08 03 A6 */ mtlr r0 +/* 0000E17C 0001AF0C 4E 80 00 21 */ blrl +/* 0000E180 0001AF10 EF FF 08 2A */ fadds f31, f31, f1 +/* 0000E184 0001AF14 3B BD 00 01 */ addi r29, r29, 0x1 +/* 0000E188 0001AF18 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000E18C 0001AF1C A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000E190 0001AF20 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0000E194 0001AF24 7C 7E 1A 14 */ add r3, r30, r3 +.L_0000E198: +/* 0000E198 0001AF28 7C 08 03 A6 */ mtlr r0 +/* 0000E19C 0001AF2C 4E 80 00 21 */ blrl +/* 0000E1A0 0001AF30 7C 1D 18 40 */ cmplw r29, r3 +/* 0000E1A4 0001AF34 41 80 E1 34 */ blt .L_0000C2D8 +/* 0000E1A8 0001AF38 81 3F 02 C8 */ lwz r9, 0x2c8(r31) +/* 0000E1AC 0001AF3C FC 20 F0 90 */ fmr f1, f30 +/* 0000E1B0 0001AF40 38 81 00 08 */ addi r4, r1, 0x8 +/* 0000E1B4 0001AF44 D3 E9 00 80 */ stfs f31, 0x80(r9) +/* 0000E1B8 0001AF48 80 7F 02 C8 */ lwz r3, 0x2c8(r31) +/* 0000E1BC 0001AF4C 80 DF 02 DC */ lwz r6, 0x2dc(r31) +/* 0000E1C0 0001AF50 80 BF 02 D8 */ lwz r5, 0x2d8(r31) +/* 0000E1C4 0001AF54 48 01 42 49 */ bl .text+0x14248 +/* 0000E1C8 0001AF58 3D 20 00 00 */ lis r9, TheICEManager@ha +/* 0000E1CC 0001AF5C 39 60 00 01 */ li r11, 0x1 +/* 0000E1D0 0001AF60 38 69 00 00 */ addi r3, r9, TheICEManager@l +/* 0000E1D4 0001AF64 80 03 00 28 */ lwz r0, 0x28(r3) +/* 0000E1D8 0001AF68 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000E1DC 0001AF6C 40 81 E1 E4 */ ble .L_0000C3C0 +/* 0000E1E0 0001AF70 39 60 00 00 */ li r11, 0x0 +/* 0000E1E4 0001AF74 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000E1E8 0001AF78 41 82 E2 00 */ beq .L_0000C3E8 +/* 0000E1EC 0001AF7C 3D 20 00 00 */ lis r9, Tweak_ForceICEReplay@ha +/* 0000E1F0 0001AF80 80 09 00 00 */ lwz r0, Tweak_ForceICEReplay@l(r9) +/* 0000E1F4 0001AF84 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000E1F8 0001AF88 41 82 E2 00 */ beq .L_0000C3F8 +/* 0000E1FC 0001AF8C 48 01 86 AD */ bl .text+0x186AC +/* 0000E200 0001AF90 3C 60 00 00 */ lis r3, TheICEManager@ha +/* 0000E204 0001AF94 38 63 00 00 */ addi r3, r3, TheICEManager@l +/* 0000E208 0001AF98 48 01 83 15 */ bl .text+0x18314 +/* 0000E20C 0001AF9C 80 01 00 84 */ lwz r0, 0x84(r1) +/* 0000E210 0001AFA0 7C 08 03 A6 */ mtlr r0 +/* 0000E214 0001AFA4 BB 81 00 60 */ lmw r28, 0x60(r1) +.L_0000E218: +/* 0000E218 0001AFA8 E3 C1 00 70 */ psq_l f30, 0x70(r1), 0, qr0 +/* 0000E21C 0001AFAC E3 E1 00 78 */ psq_l f31, 0x78(r1), 0, qr0 +/* 0000E220 0001AFB0 38 21 00 80 */ addi r1, r1, 0x80 +/* 0000E224 0001AFB4 4E 80 00 20 */ blr +.endfn Update__11CDActionIcef + +# .text:0xE228 | size: 0x74 +.fn GetName__C21CDActionDebugWatchCar, global +/* 0000E228 0001AFB8 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0000E22C 0001AFBC 7C 08 02 A6 */ mflr r0 +.L_0000E230: +/* 0000E230 0001AFC0 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 0000E234 0001AFC4 90 01 00 1C */ stw r0, 0x1c(r1) +.L_0000E238: +/* 0000E238 0001AFC8 3F E0 00 00 */ lis r31, _.tmp_13.11404@ha +/* 0000E23C 0001AFCC 80 1F 00 00 */ lwz r0, _.tmp_13.11404@l(r31) +/* 0000E240 0001AFD0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000E244 0001AFD4 40 82 E2 80 */ bne .L_0000C4C4 +/* 0000E248 0001AFD8 3F C0 00 00 */ lis r30, .rodata+0x908@ha +/* 0000E24C 0001AFDC 3F A0 00 00 */ lis r29, name.11403@ha +/* 0000E250 0001AFE0 3B DE 09 08 */ addi r30, r30, .rodata+0x908@l +/* 0000E254 0001AFE4 3B BD 00 00 */ addi r29, r29, name.11403@l +/* 0000E258 0001AFE8 7F C3 F3 78 */ mr r3, r30 +/* 0000E25C 0001AFEC 48 00 00 01 */ bl StringHash64__6AttribPCc +/* 0000E260 0001AFF0 90 7D 00 00 */ stw r3, 0x0(r29) +/* 0000E264 0001AFF4 90 9D 00 04 */ stw r4, 0x4(r29) +/* 0000E268 0001AFF8 7F C3 F3 78 */ mr r3, r30 +/* 0000E26C 0001AFFC 48 00 00 01 */ bl StringHash32__6AttribPCc +/* 0000E270 0001B000 38 00 00 01 */ li r0, 0x1 +/* 0000E274 0001B004 93 DD 00 0C */ stw r30, 0xc(r29) +/* 0000E278 0001B008 90 1F 00 00 */ stw r0, _.tmp_13.11404@l(r31) +/* 0000E27C 0001B00C 90 7D 00 08 */ stw r3, 0x8(r29) +/* 0000E280 0001B010 3C 60 00 00 */ lis r3, name.11403@ha +/* 0000E284 0001B014 38 63 00 00 */ addi r3, r3, name.11403@l +/* 0000E288 0001B018 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0000E28C 0001B01C 7C 08 03 A6 */ mtlr r0 +/* 0000E290 0001B020 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 0000E294 0001B024 38 21 00 18 */ addi r1, r1, 0x18 +/* 0000E298 0001B028 4E 80 00 20 */ blr +.endfn GetName__C21CDActionDebugWatchCar + +# .text:0xE29C | size: 0x5C +.fn GetNext__C21CDActionDebugWatchCar, global +/* 0000E29C 0001B02C 3D 20 00 00 */ lis r9, CameraDebugWatchCar@ha +/* 0000E2A0 0001B030 80 09 00 00 */ lwz r0, CameraDebugWatchCar@l(r9) +/* 0000E2A4 0001B034 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000E2A8 0001B038 41 82 E2 D4 */ beq .L_0000C57C +/* 0000E2AC 0001B03C 3D 20 00 00 */ lis r9, .rodata@ha +/* 0000E2B0 0001B040 39 60 00 00 */ li r11, 0x0 +/* 0000E2B4 0001B044 39 80 00 00 */ li r12, 0x0 +/* 0000E2B8 0001B048 39 29 00 00 */ addi r9, r9, .rodata@l +/* 0000E2BC 0001B04C 38 00 00 00 */ li r0, 0x0 +/* 0000E2C0 0001B050 91 63 00 00 */ stw r11, 0x0(r3) +/* 0000E2C4 0001B054 91 83 00 04 */ stw r12, 0x4(r3) +/* 0000E2C8 0001B058 90 03 00 08 */ stw r0, 0x8(r3) +/* 0000E2CC 0001B05C 91 23 00 0C */ stw r9, 0xc(r3) +.L_0000E2D0: +/* 0000E2D0 0001B060 4E 80 00 20 */ blr +/* 0000E2D4 0001B064 81 24 00 48 */ lwz r9, 0x48(r4) +/* 0000E2D8 0001B068 81 44 00 4C */ lwz r10, 0x4c(r4) +/* 0000E2DC 0001B06C 91 23 00 00 */ stw r9, 0x0(r3) +/* 0000E2E0 0001B070 91 43 00 04 */ stw r10, 0x4(r3) +/* 0000E2E4 0001B074 80 04 00 50 */ lwz r0, 0x50(r4) +/* 0000E2E8 0001B078 90 03 00 08 */ stw r0, 0x8(r3) +/* 0000E2EC 0001B07C 81 24 00 54 */ lwz r9, 0x54(r4) +/* 0000E2F0 0001B080 91 23 00 0C */ stw r9, 0xc(r3) +/* 0000E2F4 0001B084 4E 80 00 20 */ blr +.endfn GetNext__C21CDActionDebugWatchCar + +# .text:0xE2F8 | size: 0x58 +# CDActionDebugWatchCar::GetSimable +.fn GetSimable__21CDActionDebugWatchCar, global +/* 0000E2F8 0001B088 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0000E2FC 0001B08C 7C 08 02 A6 */ mflr r0 +/* 0000E300 0001B090 90 01 00 0C */ stw r0, 0xc(r1) +/* 0000E304 0001B094 80 A3 00 58 */ lwz r5, 0x58(r3) +/* 0000E308 0001B098 2C 05 00 00 */ cmpwi r5, 0x0 +/* 0000E30C 0001B09C 41 82 E3 3C */ beq .L_0000C648 +/* 0000E310 0001B0A0 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst12Instanceable3ZP10HSIMABLE__Z8ISimablei160._mList@ha +/* 0000E314 0001B0A4 39 69 00 00 */ addi r11, r9, _Q33UTL11Collectionst12Instanceable3ZP10HSIMABLE__Z8ISimablei160._mList@l +/* 0000E318 0001B0A8 80 69 00 00 */ lwz r3, _Q33UTL11Collectionst12Instanceable3ZP10HSIMABLE__Z8ISimablei160._mList@l(r9) +/* 0000E31C 0001B0AC 80 8B 00 08 */ lwz r4, 0x8(r11) +/* 0000E320 0001B0B0 54 84 18 38 */ slwi r4, r4, 3 +/* 0000E324 0001B0B4 7C 83 22 14 */ add r4, r3, r4 +/* 0000E328 0001B0B8 48 00 00 01 */ bl Search__Q33UTL11Collections10_KeyedNodePQ33UTL11Collections10_KeyedNodeT1Ui +/* 0000E32C 0001B0BC 7C 63 1B 79 */ mr. r3, r3 +/* 0000E330 0001B0C0 41 82 E3 3C */ beq .L_0000C66C +/* 0000E334 0001B0C4 80 63 00 04 */ lwz r3, 0x4(r3) +/* 0000E338 0001B0C8 48 00 E3 40 */ b .L_0001C678 +/* 0000E33C 0001B0CC 38 60 00 00 */ li r3, 0x0 +/* 0000E340 0001B0D0 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0000E344 0001B0D4 7C 08 03 A6 */ mtlr r0 +/* 0000E348 0001B0D8 38 21 00 08 */ addi r1, r1, 0x8 +/* 0000E34C 0001B0DC 4E 80 00 20 */ blr +.endfn GetSimable__21CDActionDebugWatchCar + +# .text:0xE350 | size: 0x50 +# CDActionDebugWatchCar::ReleaseTarget +.fn ReleaseTarget__21CDActionDebugWatchCar, global +/* 0000E350 0001B0E0 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0000E354 0001B0E4 7C 08 02 A6 */ mflr r0 +/* 0000E358 0001B0E8 90 01 00 0C */ stw r0, 0xc(r1) +/* 0000E35C 0001B0EC 7C 69 1B 78 */ mr r9, r3 +/* 0000E360 0001B0F0 39 60 00 01 */ li r11, 0x1 +/* 0000E364 0001B0F4 80 09 00 38 */ lwz r0, 0x38(r9) +/* 0000E368 0001B0F8 38 69 00 34 */ addi r3, r9, 0x34 +/* 0000E36C 0001B0FC 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000E370 0001B100 40 82 E3 78 */ bne .L_0000C6E8 +/* 0000E374 0001B104 39 60 00 00 */ li r11, 0x0 +/* 0000E378 0001B108 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000E37C 0001B10C 41 82 E3 90 */ beq .L_0000C70C +/* 0000E380 0001B110 38 00 00 00 */ li r0, 0x0 +/* 0000E384 0001B114 38 80 00 00 */ li r4, 0x0 +/* 0000E388 0001B118 90 09 00 58 */ stw r0, 0x58(r9) +/* 0000E38C 0001B11C 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi +/* 0000E390 0001B120 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0000E394 0001B124 7C 08 03 A6 */ mtlr r0 +/* 0000E398 0001B128 38 21 00 08 */ addi r1, r1, 0x8 +/* 0000E39C 0001B12C 4E 80 00 20 */ blr +.endfn ReleaseTarget__21CDActionDebugWatchCar + +# .text:0xE3A0 | size: 0x1B4 +# CDActionDebugWatchCar::AquireTarget +.fn AquireTarget__21CDActionDebugWatchCar, global +/* 0000E3A0 0001B130 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0000E3A4 0001B134 7C 08 02 A6 */ mflr r0 +/* 0000E3A8 0001B138 BF 81 00 08 */ stmw r28, 0x8(r1) +/* 0000E3AC 0001B13C 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0000E3B0 0001B140 7C 7E 1B 78 */ mr r30, r3 +/* 0000E3B4 0001B144 80 BE 00 58 */ lwz r5, 0x58(r30) +/* 0000E3B8 0001B148 2C 05 00 00 */ cmpwi r5, 0x0 +/* 0000E3BC 0001B14C 41 82 E3 EC */ beq .L_0000C7A8 +/* 0000E3C0 0001B150 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst12Instanceable3ZP10HSIMABLE__Z8ISimablei160._mList@ha +/* 0000E3C4 0001B154 39 69 00 00 */ addi r11, r9, _Q33UTL11Collectionst12Instanceable3ZP10HSIMABLE__Z8ISimablei160._mList@l +/* 0000E3C8 0001B158 80 69 00 00 */ lwz r3, _Q33UTL11Collectionst12Instanceable3ZP10HSIMABLE__Z8ISimablei160._mList@l(r9) +/* 0000E3CC 0001B15C 80 8B 00 08 */ lwz r4, 0x8(r11) +/* 0000E3D0 0001B160 54 84 18 38 */ slwi r4, r4, 3 +/* 0000E3D4 0001B164 7C 83 22 14 */ add r4, r3, r4 +/* 0000E3D8 0001B168 48 00 00 01 */ bl Search__Q33UTL11Collections10_KeyedNodePQ33UTL11Collections10_KeyedNodeT1Ui +/* 0000E3DC 0001B16C 7C 63 1B 79 */ mr. r3, r3 +/* 0000E3E0 0001B170 41 82 E3 EC */ beq .L_0000C7CC +/* 0000E3E4 0001B174 80 63 00 04 */ lwz r3, 0x4(r3) +/* 0000E3E8 0001B178 48 00 E3 F0 */ b .L_0001C7D8 +/* 0000E3EC 0001B17C 38 60 00 00 */ li r3, 0x0 +.L_0000E3F0: +/* 0000E3F0 0001B180 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000E3F4 0001B184 40 82 E4 00 */ bne .L_0000C7F4 +/* 0000E3F8 0001B188 7F C3 F3 78 */ mr r3, r30 +/* 0000E3FC 0001B18C 48 00 E3 51 */ bl .L_0001C74C +/* 0000E400 0001B190 3F A0 00 00 */ lis r29, mToggleCar@ha +/* 0000E404 0001B194 80 1D 00 00 */ lwz r0, mToggleCar@l(r29) +/* 0000E408 0001B198 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000E40C 0001B19C 41 80 E5 40 */ blt .L_0000C94C +/* 0000E410 0001B1A0 3F E0 00 00 */ lis r31, mToggleCarList@ha +/* 0000E414 0001B1A4 80 7F 00 00 */ lwz r3, mToggleCarList@l(r31) +/* 0000E418 0001B1A8 2C 03 00 09 */ cmpwi r3, 0x9 +/* 0000E41C 0001B1AC 41 81 E5 40 */ bgt .L_0000C95C +/* 0000E420 0001B1B0 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000E424 0001B1B4 41 80 E5 40 */ blt AquireCar__16CDActionShowcase +/* 0000E428 0001B1B8 48 00 00 01 */ bl Count__Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi1012eVehicleList +/* 0000E42C 0001B1BC 7C 63 1B 79 */ mr. r3, r3 +/* 0000E430 0001B1C0 41 82 E5 40 */ beq .L_0000C970 +/* 0000E434 0001B1C4 81 7D 00 00 */ lwz r11, mToggleCar@l(r29) +/* 0000E438 0001B1C8 3D 00 00 00 */ lis r8, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@ha +.L_0000E43C: +/* 0000E43C 0001B1CC 81 5F 00 00 */ lwz r10, mToggleCarList@l(r31) +/* 0000E440 0001B1D0 39 08 00 00 */ addi r8, r8, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@l +/* 0000E444 0001B1D4 7C 0B 1B D6 */ divw r0, r11, r3 +/* 0000E448 0001B1D8 1D 4A 00 38 */ mulli r10, r10, 0x38 +/* 0000E44C 0001B1DC 7C 00 19 D6 */ mullw r0, r0, r3 +/* 0000E450 0001B1E0 7D 2A 40 2E */ lwzx r9, r10, r8 +/* 0000E454 0001B1E4 7D 60 58 50 */ subf r11, r0, r11 +/* 0000E458 0001B1E8 55 6B 10 3A */ slwi r11, r11, 2 +/* 0000E45C 0001B1EC 7F E9 58 2E */ lwzx r31, r9, r11 +/* 0000E460 0001B1F0 2C 1F 00 00 */ cmpwi r31, 0x0 +/* 0000E464 0001B1F4 41 82 E5 40 */ beq .L_0000C9A4 +/* 0000E468 0001B1F8 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 0000E46C 0001B1FC 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0000E470 0001B200 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000E474 0001B204 7C 08 03 A6 */ mtlr r0 +/* 0000E478 0001B208 7C 7F 1A 14 */ add r3, r31, r3 +/* 0000E47C 0001B20C 4E 80 00 21 */ blrl +.L_0000E480: +/* 0000E480 0001B210 81 23 00 08 */ lwz r9, 0x8(r3) +/* 0000E484 0001B214 80 1E 00 58 */ lwz r0, 0x58(r30) +/* 0000E488 0001B218 7C 09 00 00 */ cmpw r9, r0 +/* 0000E48C 0001B21C 41 82 E5 40 */ beq .L_0000C9CC +/* 0000E490 0001B220 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 0000E494 0001B224 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0000E498 0001B228 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000E49C 0001B22C 7C 08 03 A6 */ mtlr r0 +/* 0000E4A0 0001B230 7C 7F 1A 14 */ add r3, r31, r3 +/* 0000E4A4 0001B234 4E 80 00 21 */ blrl +.L_0000E4A8: +/* 0000E4A8 0001B238 81 23 00 04 */ lwz r9, 0x4(r3) +/* 0000E4AC 0001B23C A8 09 00 E8 */ lha r0, 0xe8(r9) +/* 0000E4B0 0001B240 81 29 00 EC */ lwz r9, 0xec(r9) +/* 0000E4B4 0001B244 7C 63 02 14 */ add r3, r3, r0 +/* 0000E4B8 0001B248 7D 28 03 A6 */ mtlr r9 +/* 0000E4BC 0001B24C 4E 80 00 21 */ blrl +/* 0000E4C0 0001B250 7C 7C 1B 79 */ mr. r28, r3 +/* 0000E4C4 0001B254 41 82 E5 40 */ beq .L_0000CA04 +/* 0000E4C8 0001B258 7F C3 F3 78 */ mr r3, r30 +/* 0000E4CC 0001B25C 48 00 E3 51 */ bl .L_0001C81C +/* 0000E4D0 0001B260 81 3F 00 04 */ lwz r9, 0x4(r31) +.L_0000E4D4: +/* 0000E4D4 0001B264 83 BE 00 30 */ lwz r29, 0x30(r30) +/* 0000E4D8 0001B268 A8 69 00 98 */ lha r3, 0x98(r9) +/* 0000E4DC 0001B26C 80 09 00 9C */ lwz r0, 0x9c(r9) +.L_0000E4E0: +/* 0000E4E0 0001B270 7C 7F 1A 14 */ add r3, r31, r3 +/* 0000E4E4 0001B274 7C 08 03 A6 */ mtlr r0 +/* 0000E4E8 0001B278 4E 80 00 21 */ blrl +/* 0000E4EC 0001B27C 81 23 00 08 */ lwz r9, 0x8(r3) +/* 0000E4F0 0001B280 80 69 00 1C */ lwz r3, 0x1c(r9) +/* 0000E4F4 0001B284 2C 03 00 00 */ cmpwi r3, 0x0 +.L_0000E4F8: +/* 0000E4F8 0001B288 40 82 E5 04 */ bne .L_0000C9FC +/* 0000E4FC 0001B28C 3D 20 00 00 */ lis r9, .rodata@ha +/* 0000E500 0001B290 38 69 00 00 */ addi r3, r9, .rodata@l +/* 0000E504 0001B294 48 00 00 01 */ bl bStringHash__FPCc +/* 0000E508 0001B298 7C 64 1B 78 */ mr r4, r3 +/* 0000E50C 0001B29C 7F A3 EB 78 */ mr r3, r29 +/* 0000E510 0001B2A0 48 00 13 CD */ bl .L_0000F8DC +/* 0000E514 0001B2A4 38 7E 00 34 */ addi r3, r30, 0x34 +/* 0000E518 0001B2A8 7F 84 E3 78 */ mr r4, r28 +/* 0000E51C 0001B2AC 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi +.L_0000E520: +/* 0000E520 0001B2B0 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 0000E524 0001B2B4 80 09 00 1C */ lwz r0, 0x1c(r9) +.L_0000E528: +/* 0000E528 0001B2B8 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000E52C 0001B2BC 7C 08 03 A6 */ mtlr r0 +/* 0000E530 0001B2C0 7C 7F 1A 14 */ add r3, r31, r3 +/* 0000E534 0001B2C4 4E 80 00 21 */ blrl +.L_0000E538: +/* 0000E538 0001B2C8 80 03 00 08 */ lwz r0, 0x8(r3) +/* 0000E53C 0001B2CC 90 1E 00 58 */ stw r0, 0x58(r30) +/* 0000E540 0001B2D0 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0000E544 0001B2D4 7C 08 03 A6 */ mtlr r0 +/* 0000E548 0001B2D8 BB 81 00 08 */ lmw r28, 0x8(r1) +/* 0000E54C 0001B2DC 38 21 00 18 */ addi r1, r1, 0x18 +/* 0000E550 0001B2E0 4E 80 00 20 */ blr +.endfn AquireTarget__21CDActionDebugWatchCar + +# .text:0xE554 | size: 0x58 +.fn Construct__21CDActionDebugWatchCarPQ28CameraAI8Director, global +/* 0000E554 0001B2E4 94 21 FF F0 */ stwu r1, -0x10(r1) +.L_0000E558: +/* 0000E558 0001B2E8 7C 08 02 A6 */ mflr r0 +/* 0000E55C 0001B2EC 93 E1 00 0C */ stw r31, 0xc(r1) +.L_0000E560: +/* 0000E560 0001B2F0 90 01 00 14 */ stw r0, 0x14(r1) +/* 0000E564 0001B2F4 7C 7F 1B 78 */ mr r31, r3 +/* 0000E568 0001B2F8 80 1F 00 18 */ lwz r0, 0x18(r31) +/* 0000E56C 0001B2FC 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000E570 0001B300 41 82 E5 94 */ beq .L_0000CB04 +/* 0000E574 0001B304 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0000E578 0001B308 38 80 00 60 */ li r4, 0x60 +/* 0000E57C 0001B30C 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0000E580 0001B310 38 A0 00 00 */ li r5, 0x0 +/* 0000E584 0001B314 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 0000E588 0001B318 7F E4 FB 78 */ mr r4, r31 +/* 0000E58C 0001B31C 48 00 E5 AD */ bl .L_0001CB38 +/* 0000E590 0001B320 48 00 E5 98 */ b .L_0001CB28 +/* 0000E594 0001B324 38 60 00 00 */ li r3, 0x0 +/* 0000E598 0001B328 80 01 00 14 */ lwz r0, 0x14(r1) +/* 0000E59C 0001B32C 7C 08 03 A6 */ mtlr r0 +/* 0000E5A0 0001B330 83 E1 00 0C */ lwz r31, 0xc(r1) +/* 0000E5A4 0001B334 38 21 00 10 */ addi r1, r1, 0x10 +/* 0000E5A8 0001B338 4E 80 00 20 */ blr +.endfn Construct__21CDActionDebugWatchCarPQ28CameraAI8Director + +# .text:0xE5AC | size: 0x4B4 +.fn __21CDActionDebugWatchCarPQ28CameraAI8Director, global +/* 0000E5AC 0001B33C 94 21 FF 58 */ stwu r1, -0xa8(r1) +/* 0000E5B0 0001B340 7C 08 02 A6 */ mflr r0 +/* 0000E5B4 0001B344 7D 80 00 26 */ mfcr r12 +/* 0000E5B8 0001B348 BE 61 00 74 */ stmw r19, 0x74(r1) +/* 0000E5BC 0001B34C 90 01 00 AC */ stw r0, 0xac(r1) +/* 0000E5C0 0001B350 91 81 00 70 */ stw r12, 0x70(r1) +/* 0000E5C4 0001B354 7C 7F 1B 78 */ mr r31, r3 +/* 0000E5C8 0001B358 7C 95 23 78 */ mr r21, r4 +/* 0000E5CC 0001B35C 38 80 00 00 */ li r4, 0x0 +/* 0000E5D0 0001B360 48 00 00 01 */ bl __Q43UTL3COM6Object6_IListUi +/* 0000E5D4 0001B364 3B 1F 00 18 */ addi r24, r31, 0x18 +/* 0000E5D8 0001B368 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha +/* 0000E5DC 0001B36C 3D 60 00 00 */ lis r11, _vt.Q33UTL3COM8IUnknown@ha +/* 0000E5E0 0001B370 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l +/* 0000E5E4 0001B374 39 6B 00 00 */ addi r11, r11, _vt.Q33UTL3COM8IUnknown@l +/* 0000E5E8 0001B378 3C 80 00 00 */ lis r4, _IHandle__14IDebugWatchCar@ha +/* 0000E5EC 0001B37C 93 FF 00 18 */ stw r31, 0x18(r31) +/* 0000E5F0 0001B380 38 84 00 00 */ addi r4, r4, _IHandle__14IDebugWatchCar@l +/* 0000E5F4 0001B384 3E E0 00 00 */ lis r23, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@ha +/* 0000E5F8 0001B388 91 3F 00 14 */ stw r9, 0x14(r31) +/* 0000E5FC 0001B38C 7F E3 FB 78 */ mr r3, r31 +/* 0000E600 0001B390 91 7F 00 1C */ stw r11, 0x1c(r31) +/* 0000E604 0001B394 7F 05 C3 78 */ mr r5, r24 +/* 0000E608 0001B398 3A 81 00 68 */ addi r20, r1, 0x68 +/* 0000E60C 0001B39C 3B 97 00 00 */ addi r28, r23, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@l +/* 0000E610 0001B3A0 48 00 00 01 */ bl Add__Q43UTL3COM6Object6_IListPvPQ33UTL3COM8IUnknown +/* 0000E614 0001B3A4 3E 60 00 00 */ lis r19, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha +/* 0000E618 0001B3A8 80 9C 00 08 */ lwz r4, 0x8(r28) +/* 0000E61C 0001B3AC 3B 21 00 6C */ addi r25, r1, 0x6c +/* 0000E620 0001B3B0 80 1C 00 04 */ lwz r0, 0x4(r28) +/* 0000E624 0001B3B4 3B 41 00 08 */ addi r26, r1, 0x8 +/* 0000E628 0001B3B8 93 01 00 68 */ stw r24, 0x68(r1) +/* 0000E62C 0001B3BC 7C 04 00 40 */ cmplw r4, r0 +/* 0000E630 0001B3C0 41 80 E7 10 */ blt .L_0000CD40 +/* 0000E634 0001B3C4 81 3C 00 0C */ lwz r9, 0xc(r28) +.L_0000E638: +/* 0000E638 0001B3C8 38 84 00 01 */ addi r4, r4, 0x1 +/* 0000E63C 0001B3CC 80 09 00 24 */ lwz r0, 0x24(r9) +/* 0000E640 0001B3D0 A8 69 00 20 */ lha r3, 0x20(r9) +/* 0000E644 0001B3D4 7C 08 03 A6 */ mtlr r0 +/* 0000E648 0001B3D8 7C 63 E2 14 */ add r3, r3, r28 +/* 0000E64C 0001B3DC 4E 80 00 21 */ blrl +/* 0000E650 0001B3E0 80 1C 00 04 */ lwz r0, 0x4(r28) +/* 0000E654 0001B3E4 7C 7E 1B 78 */ mr r30, r3 +/* 0000E658 0001B3E8 7C 1E 00 40 */ cmplw r30, r0 +/* 0000E65C 0001B3EC 40 81 E7 10 */ ble .L_0000CD6C +/* 0000E660 0001B3F0 81 3C 00 0C */ lwz r9, 0xc(r28) +/* 0000E664 0001B3F4 7F C4 F3 78 */ mr r4, r30 +/* 0000E668 0001B3F8 80 09 00 34 */ lwz r0, 0x34(r9) +/* 0000E66C 0001B3FC A8 69 00 30 */ lha r3, 0x30(r9) +/* 0000E670 0001B400 7C 08 03 A6 */ mtlr r0 +/* 0000E674 0001B404 7C 63 E2 14 */ add r3, r3, r28 +/* 0000E678 0001B408 4E 80 00 21 */ blrl +/* 0000E67C 0001B40C 81 3C 00 0C */ lwz r9, 0xc(r28) +/* 0000E680 0001B410 7F C4 F3 78 */ mr r4, r30 +/* 0000E684 0001B414 38 A0 00 10 */ li r5, 0x10 +/* 0000E688 0001B418 83 B7 00 00 */ lwz r29, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@l(r23) +/* 0000E68C 0001B41C A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000E690 0001B420 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000E694 0001B424 7C 63 E2 14 */ add r3, r3, r28 +/* 0000E698 0001B428 83 7C 00 08 */ lwz r27, 0x8(r28) +/* 0000E69C 0001B42C 7C 08 03 A6 */ mtlr r0 +/* 0000E6A0 0001B430 82 DC 00 04 */ lwz r22, 0x4(r28) +/* 0000E6A4 0001B434 4E 80 00 21 */ blrl +/* 0000E6A8 0001B438 93 DC 00 04 */ stw r30, 0x4(r28) +/* 0000E6AC 0001B43C 7C 1D 18 00 */ cmpw r29, r3 +/* 0000E6B0 0001B440 90 77 00 00 */ stw r3, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@l(r23) +/* 0000E6B4 0001B444 41 82 E7 10 */ beq .L_0000CDC4 +/* 0000E6B8 0001B448 38 00 00 00 */ li r0, 0x0 +/* 0000E6BC 0001B44C 3B C0 00 00 */ li r30, 0x0 +/* 0000E6C0 0001B450 90 1C 00 08 */ stw r0, 0x8(r28) +/* 0000E6C4 0001B454 7C 1E D8 00 */ cmpw r30, r27 +/* 0000E6C8 0001B458 2E 1D 00 00 */ cmpwi cr4, r29, 0x0 +.L_0000E6CC: +/* 0000E6CC 0001B45C 40 80 E6 EC */ bge .L_0000CDB8 +/* 0000E6D0 0001B460 57 C4 10 3A */ slwi r4, r30, 2 +/* 0000E6D4 0001B464 7F 83 E3 78 */ mr r3, r28 +/* 0000E6D8 0001B468 7C 9D 22 14 */ add r4, r29, r4 +/* 0000E6DC 0001B46C 3B DE 00 01 */ addi r30, r30, 0x1 +/* 0000E6E0 0001B470 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZP14IDebugWatchCari16RCP14IDebugWatchCar +/* 0000E6E4 0001B474 7C 1E D8 00 */ cmpw r30, r27 +/* 0000E6E8 0001B478 41 80 E6 D0 */ blt .L_0000CDB8 +.L_0000E6EC: +/* 0000E6EC 0001B47C 41 92 E7 10 */ beq cr4, .L_0000CDFC +/* 0000E6F0 0001B480 81 3C 00 0C */ lwz r9, 0xc(r28) +/* 0000E6F4 0001B484 7F A4 EB 78 */ mr r4, r29 +/* 0000E6F8 0001B488 7E C5 B3 78 */ mr r5, r22 +/* 0000E6FC 0001B48C A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000E700 0001B490 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0000E704 0001B494 7C 7C 1A 14 */ add r3, r28, r3 +/* 0000E708 0001B498 7C 08 03 A6 */ mtlr r0 +/* 0000E70C 0001B49C 4E 80 00 21 */ blrl +/* 0000E710 0001B4A0 81 3C 00 08 */ lwz r9, 0x8(r28) +/* 0000E714 0001B4A4 81 7C 00 00 */ lwz r11, 0x0(r28) +/* 0000E718 0001B4A8 55 29 10 3A */ slwi r9, r9, 2 +/* 0000E71C 0001B4AC 7C 09 5A 14 */ add r0, r9, r11 +/* 0000E720 0001B4B0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000E724 0001B4B4 41 82 E7 30 */ beq .L_0000CE54 +/* 0000E728 0001B4B8 80 14 00 00 */ lwz r0, 0x0(r20) +/* 0000E72C 0001B4BC 7C 09 59 2E */ stwx r0, r9, r11 +/* 0000E730 0001B4C0 81 3C 00 08 */ lwz r9, 0x8(r28) +/* 0000E734 0001B4C4 3D 60 00 00 */ lis r11, _vt.14IDebugWatchCar@ha +/* 0000E738 0001B4C8 39 6B 00 00 */ addi r11, r11, _vt.14IDebugWatchCar@l +/* 0000E73C 0001B4CC 3A DF 00 24 */ addi r22, r31, 0x24 +/* 0000E740 0001B4D0 39 29 00 01 */ addi r9, r9, 0x1 +/* 0000E744 0001B4D4 3D 40 00 00 */ lis r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha +/* 0000E748 0001B4D8 91 3C 00 08 */ stw r9, 0x8(r28) +/* 0000E74C 0001B4DC 3B AA 00 00 */ addi r29, r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l +/* 0000E750 0001B4E0 91 78 00 04 */ stw r11, 0x4(r24) +/* 0000E754 0001B4E4 92 C1 00 6C */ stw r22, 0x6c(r1) +/* 0000E758 0001B4E8 3B 1F 00 34 */ addi r24, r31, 0x34 +/* 0000E75C 0001B4EC 80 9D 00 08 */ lwz r4, 0x8(r29) +/* 0000E760 0001B4F0 80 1D 00 04 */ lwz r0, 0x4(r29) +/* 0000E764 0001B4F4 7C 04 00 40 */ cmplw r4, r0 +/* 0000E768 0001B4F8 41 80 E8 48 */ blt .L_0000CFB0 +/* 0000E76C 0001B4FC 81 3D 00 0C */ lwz r9, 0xc(r29) +/* 0000E770 0001B500 38 84 00 01 */ addi r4, r4, 0x1 +/* 0000E774 0001B504 80 09 00 24 */ lwz r0, 0x24(r9) +/* 0000E778 0001B508 A8 69 00 20 */ lha r3, 0x20(r9) +/* 0000E77C 0001B50C 7C 08 03 A6 */ mtlr r0 +/* 0000E780 0001B510 7C 63 EA 14 */ add r3, r3, r29 +/* 0000E784 0001B514 4E 80 00 21 */ blrl +/* 0000E788 0001B518 80 1D 00 04 */ lwz r0, 0x4(r29) +/* 0000E78C 0001B51C 7C 7E 1B 78 */ mr r30, r3 +/* 0000E790 0001B520 7C 1E 00 40 */ cmplw r30, r0 +/* 0000E794 0001B524 40 81 E8 48 */ ble .L_0000CFDC +/* 0000E798 0001B528 81 3D 00 0C */ lwz r9, 0xc(r29) +/* 0000E79C 0001B52C 7F C4 F3 78 */ mr r4, r30 +/* 0000E7A0 0001B530 80 09 00 34 */ lwz r0, 0x34(r9) +/* 0000E7A4 0001B534 A8 69 00 30 */ lha r3, 0x30(r9) +/* 0000E7A8 0001B538 7C 08 03 A6 */ mtlr r0 +/* 0000E7AC 0001B53C 7C 63 EA 14 */ add r3, r3, r29 +/* 0000E7B0 0001B540 4E 80 00 21 */ blrl +/* 0000E7B4 0001B544 81 3D 00 0C */ lwz r9, 0xc(r29) +/* 0000E7B8 0001B548 7F C4 F3 78 */ mr r4, r30 +/* 0000E7BC 0001B54C 38 A0 00 10 */ li r5, 0x10 +/* 0000E7C0 0001B550 83 93 00 00 */ lwz r28, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r19) +/* 0000E7C4 0001B554 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000E7C8 0001B558 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000E7CC 0001B55C 7C 63 EA 14 */ add r3, r3, r29 +/* 0000E7D0 0001B560 83 7D 00 08 */ lwz r27, 0x8(r29) +.L_0000E7D4: +/* 0000E7D4 0001B564 7C 08 03 A6 */ mtlr r0 +/* 0000E7D8 0001B568 82 FD 00 04 */ lwz r23, 0x4(r29) +/* 0000E7DC 0001B56C 4E 80 00 21 */ blrl +/* 0000E7E0 0001B570 93 DD 00 04 */ stw r30, 0x4(r29) +/* 0000E7E4 0001B574 7C 1C 18 00 */ cmpw r28, r3 +/* 0000E7E8 0001B578 90 73 00 00 */ stw r3, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r19) +/* 0000E7EC 0001B57C 41 82 E8 48 */ beq .L_0000D034 +/* 0000E7F0 0001B580 38 00 00 00 */ li r0, 0x0 +/* 0000E7F4 0001B584 3B C0 00 00 */ li r30, 0x0 +/* 0000E7F8 0001B588 90 1D 00 08 */ stw r0, 0x8(r29) +/* 0000E7FC 0001B58C 7C 1E D8 00 */ cmpw r30, r27 +/* 0000E800 0001B590 2E 1C 00 00 */ cmpwi cr4, r28, 0x0 +/* 0000E804 0001B594 40 80 E8 24 */ bge .L_0000D028 +/* 0000E808 0001B598 57 C4 10 3A */ slwi r4, r30, 2 +/* 0000E80C 0001B59C 7F A3 EB 78 */ mr r3, r29 +/* 0000E810 0001B5A0 7C 9C 22 14 */ add r4, r28, r4 +/* 0000E814 0001B5A4 3B DE 00 01 */ addi r30, r30, 0x1 +/* 0000E818 0001B5A8 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZP14ITrafficCenteri16RCP14ITrafficCenter +/* 0000E81C 0001B5AC 7C 1E D8 00 */ cmpw r30, r27 +/* 0000E820 0001B5B0 41 80 E8 08 */ blt .L_0000D028 +/* 0000E824 0001B5B4 41 92 E8 48 */ beq cr4, .L_0000D06C +/* 0000E828 0001B5B8 81 3D 00 0C */ lwz r9, 0xc(r29) +/* 0000E82C 0001B5BC 7F 84 E3 78 */ mr r4, r28 +/* 0000E830 0001B5C0 7E E5 BB 78 */ mr r5, r23 +/* 0000E834 0001B5C4 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000E838 0001B5C8 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0000E83C 0001B5CC 7C 7D 1A 14 */ add r3, r29, r3 +/* 0000E840 0001B5D0 7C 08 03 A6 */ mtlr r0 +/* 0000E844 0001B5D4 4E 80 00 21 */ blrl +/* 0000E848 0001B5D8 81 3D 00 08 */ lwz r9, 0x8(r29) +/* 0000E84C 0001B5DC 81 7D 00 00 */ lwz r11, 0x0(r29) +/* 0000E850 0001B5E0 55 29 10 3A */ slwi r9, r9, 2 +/* 0000E854 0001B5E4 7C 09 5A 14 */ add r0, r9, r11 +/* 0000E858 0001B5E8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000E85C 0001B5EC 41 82 E8 68 */ beq .L_0000D0C4 +/* 0000E860 0001B5F0 80 19 00 00 */ lwz r0, 0x0(r25) +/* 0000E864 0001B5F4 7C 09 59 2E */ stwx r0, r9, r11 +/* 0000E868 0001B5F8 81 3D 00 08 */ lwz r9, 0x8(r29) +/* 0000E86C 0001B5FC 3D 60 00 00 */ lis r11, _vt.14ITrafficCenter@ha +/* 0000E870 0001B600 39 6B 00 00 */ addi r11, r11, _vt.14ITrafficCenter@l +/* 0000E874 0001B604 3B C0 00 00 */ li r30, 0x0 +/* 0000E878 0001B608 39 29 00 01 */ addi r9, r9, 0x1 +/* 0000E87C 0001B60C 3D 00 00 00 */ lis r8, _vt.21CDActionDebugWatchCar.14IDebugWatchCar@ha +/* 0000E880 0001B610 91 3D 00 08 */ stw r9, 0x8(r29) +/* 0000E884 0001B614 3D 40 00 00 */ lis r10, _vt.21CDActionDebugWatchCar.14ITrafficCenter@ha +/* 0000E888 0001B618 91 76 00 04 */ stw r11, 0x4(r22) +/* 0000E88C 0001B61C 3D 20 00 00 */ lis r9, _vt.21CDActionDebugWatchCar@ha +/* 0000E890 0001B620 3D 60 00 00 */ lis r11, .rodata@ha +/* 0000E894 0001B624 38 C0 00 00 */ li r6, 0x0 +/* 0000E898 0001B628 39 08 00 00 */ addi r8, r8, _vt.21CDActionDebugWatchCar.14IDebugWatchCar@l +/* 0000E89C 0001B62C 38 E0 00 00 */ li r7, 0x0 +/* 0000E8A0 0001B630 39 4A 00 00 */ addi r10, r10, _vt.21CDActionDebugWatchCar.14ITrafficCenter@l +.L_0000E8A4: +/* 0000E8A4 0001B634 39 29 00 00 */ addi r9, r9, _vt.21CDActionDebugWatchCar@l +/* 0000E8A8 0001B638 39 6B 00 00 */ addi r11, r11, .rodata@l +/* 0000E8AC 0001B63C 93 DF 00 34 */ stw r30, 0x34(r31) +/* 0000E8B0 0001B640 93 DF 00 38 */ stw r30, 0x38(r31) +/* 0000E8B4 0001B644 38 61 00 08 */ addi r3, r1, 0x8 +/* 0000E8B8 0001B648 93 DF 00 3C */ stw r30, 0x3c(r31) +/* 0000E8BC 0001B64C 38 80 00 00 */ li r4, 0x0 +/* 0000E8C0 0001B650 93 DF 00 40 */ stw r30, 0x40(r31) +/* 0000E8C4 0001B654 93 DF 00 50 */ stw r30, 0x50(r31) +/* 0000E8C8 0001B658 91 1F 00 1C */ stw r8, 0x1c(r31) +/* 0000E8CC 0001B65C 90 DF 00 48 */ stw r6, 0x48(r31) +/* 0000E8D0 0001B660 90 FF 00 4C */ stw r7, 0x4c(r31) +/* 0000E8D4 0001B664 91 5F 00 28 */ stw r10, 0x28(r31) +/* 0000E8D8 0001B668 91 3F 00 14 */ stw r9, 0x14(r31) +/* 0000E8DC 0001B66C 91 7F 00 54 */ stw r11, 0x54(r31) +/* 0000E8E0 0001B670 48 00 00 01 */ bl __Q29WorldConn9ReferenceUi +/* 0000E8E4 0001B674 81 61 00 08 */ lwz r11, 0x8(r1) +/* 0000E8E8 0001B678 38 80 00 02 */ li r4, 0x2 +/* 0000E8EC 0001B67C 81 5A 00 04 */ lwz r10, 0x4(r26) +/* 0000E8F0 0001B680 7F 43 D3 78 */ mr r3, r26 +/* 0000E8F4 0001B684 81 3A 00 08 */ lwz r9, 0x8(r26) +/* 0000E8F8 0001B688 80 1A 00 0C */ lwz r0, 0xc(r26) +.L_0000E8FC: +/* 0000E8FC 0001B68C 91 7F 00 34 */ stw r11, 0x34(r31) +/* 0000E900 0001B690 91 58 00 04 */ stw r10, 0x4(r24) +/* 0000E904 0001B694 90 18 00 0C */ stw r0, 0xc(r24) +/* 0000E908 0001B698 91 38 00 08 */ stw r9, 0x8(r24) +/* 0000E90C 0001B69C 48 00 00 01 */ bl _._Q29WorldConn9Reference +/* 0000E910 0001B6A0 93 DF 00 58 */ stw r30, 0x58(r31) +/* 0000E914 0001B6A4 81 75 00 18 */ lwz r11, 0x18(r21) +/* 0000E918 0001B6A8 81 2B 00 14 */ lwz r9, 0x14(r11) +/* 0000E91C 0001B6AC 80 09 00 24 */ lwz r0, 0x24(r9) +.L_0000E920: +/* 0000E920 0001B6B0 A8 69 00 20 */ lha r3, 0x20(r9) +/* 0000E924 0001B6B4 7C 08 03 A6 */ mtlr r0 +/* 0000E928 0001B6B8 7C 6B 1A 14 */ add r3, r11, r3 +/* 0000E92C 0001B6BC 4E 80 00 21 */ blrl +/* 0000E930 0001B6C0 7C 6B 1B 78 */ mr r11, r3 +/* 0000E934 0001B6C4 80 0B 00 0C */ lwz r0, 0xc(r11) +/* 0000E938 0001B6C8 7E A3 AB 78 */ mr r3, r21 +/* 0000E93C 0001B6CC 90 1F 00 54 */ stw r0, 0x54(r31) +/* 0000E940 0001B6D0 81 2B 00 00 */ lwz r9, 0x0(r11) +/* 0000E944 0001B6D4 81 4B 00 04 */ lwz r10, 0x4(r11) +/* 0000E948 0001B6D8 91 3F 00 48 */ stw r9, 0x48(r31) +/* 0000E94C 0001B6DC 91 5F 00 4C */ stw r10, 0x4c(r31) +/* 0000E950 0001B6E0 80 0B 00 08 */ lwz r0, 0x8(r11) +/* 0000E954 0001B6E4 90 1F 00 50 */ stw r0, 0x50(r31) +/* 0000E958 0001B6E8 48 00 60 85 */ bl .L_000149DC +/* 0000E95C 0001B6EC 7C 63 1B 79 */ mr. r3, r3 +/* 0000E960 0001B6F0 41 82 E9 A0 */ beq .L_0000D300 +/* 0000E964 0001B6F4 81 23 00 1C */ lwz r9, 0x1c(r3) +/* 0000E968 0001B6F8 C0 09 00 40 */ lfs f0, 0x40(r9) +/* 0000E96C 0001B6FC C1 A9 00 44 */ lfs f13, 0x44(r9) +/* 0000E970 0001B700 C1 89 00 48 */ lfs f12, 0x48(r9) +/* 0000E974 0001B704 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 0000E978 0001B708 D1 A1 00 0C */ stfs f13, 0xc(r1) +/* 0000E97C 0001B70C D1 9A 00 08 */ stfs f12, 0x8(r26) +/* 0000E980 0001B710 81 23 00 1C */ lwz r9, 0x1c(r3) +/* 0000E984 0001B714 C1 89 00 58 */ lfs f12, 0x58(r9) +/* 0000E988 0001B718 C0 09 00 50 */ lfs f0, 0x50(r9) +/* 0000E98C 0001B71C C1 A9 00 54 */ lfs f13, 0x54(r9) +/* 0000E990 0001B720 D0 01 00 18 */ stfs f0, 0x18(r1) +/* 0000E994 0001B724 D1 A1 00 1C */ stfs f13, 0x1c(r1) +/* 0000E998 0001B728 D1 81 00 20 */ stfs f12, 0x20(r1) +/* 0000E99C 0001B72C 48 00 E9 C8 */ b .text+0xE9C8 +/* 0000E9A0 0001B730 3D 20 00 00 */ lis r9, .rodata+0x918@ha +/* 0000E9A4 0001B734 3D 60 00 00 */ lis r11, .rodata+0x91C@ha +/* 0000E9A8 0001B738 C0 09 09 18 */ lfs f0, .rodata+0x918@l(r9) +/* 0000E9AC 0001B73C C1 AB 09 1C */ lfs f13, .rodata+0x91C@l(r11) +/* 0000E9B0 0001B740 D0 01 00 1C */ stfs f0, 0x1c(r1) +/* 0000E9B4 0001B744 D1 A1 00 20 */ stfs f13, 0x20(r1) +/* 0000E9B8 0001B748 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 0000E9BC 0001B74C D0 01 00 0C */ stfs f0, 0xc(r1) +/* 0000E9C0 0001B750 D0 01 00 10 */ stfs f0, 0x10(r1) +/* 0000E9C4 0001B754 D0 01 00 18 */ stfs f0, 0x18(r1) +/* 0000E9C8 0001B758 38 60 01 24 */ li r3, 0x124 +/* 0000E9CC 0001B75C 48 00 00 01 */ bl __builtin_new +/* 0000E9D0 0001B760 38 80 00 00 */ li r4, 0x0 +/* 0000E9D4 0001B764 48 00 10 51 */ bl .L_0000FA24 +/* 0000E9D8 0001B768 90 7F 00 30 */ stw r3, 0x30(r31) +/* 0000E9DC 0001B76C 7F E3 FB 78 */ mr r3, r31 +/* 0000E9E0 0001B770 48 00 E3 A1 */ bl .L_0001CD80 +/* 0000E9E4 0001B774 80 7F 00 38 */ lwz r3, 0x38(r31) +/* 0000E9E8 0001B778 38 00 00 01 */ li r0, 0x1 +/* 0000E9EC 0001B77C 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000E9F0 0001B780 40 82 E9 F8 */ bne .L_0000D3E8 +.L_0000E9F4: +/* 0000E9F4 0001B784 38 00 00 00 */ li r0, 0x0 +/* 0000E9F8 0001B788 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000E9FC 0001B78C 41 82 EA 24 */ beq .L_0000D420 +.L_0000EA00: +/* 0000EA00 0001B790 38 81 00 28 */ addi r4, r1, 0x28 +/* 0000EA04 0001B794 48 00 00 01 */ bl PSMTX44Copy +/* 0000EA08 0001B798 3D 20 00 00 */ lis r9, .rodata+0x918@ha +/* 0000EA0C 0001B79C 80 7F 00 30 */ lwz r3, 0x30(r31) +/* 0000EA10 0001B7A0 C0 29 09 18 */ lfs f1, .rodata+0x918@l(r9) +/* 0000EA14 0001B7A4 38 81 00 28 */ addi r4, r1, 0x28 +/* 0000EA18 0001B7A8 80 BF 00 3C */ lwz r5, 0x3c(r31) +/* 0000EA1C 0001B7AC 80 DF 00 40 */ lwz r6, 0x40(r31) +/* 0000EA20 0001B7B0 48 00 17 65 */ bl .L_00010184 +/* 0000EA24 0001B7B4 38 60 00 D8 */ li r3, 0xd8 +/* 0000EA28 0001B7B8 48 00 00 01 */ bl __builtin_new +/* 0000EA2C 0001B7BC 80 95 00 04 */ lwz r4, 0x4(r21) +/* 0000EA30 0001B7C0 38 C0 00 01 */ li r6, 0x1 +/* 0000EA34 0001B7C4 80 BF 00 30 */ lwz r5, 0x30(r31) +/* 0000EA38 0001B7C8 48 00 4D C9 */ bl .L_00013800 +/* 0000EA3C 0001B7CC 90 7F 00 2C */ stw r3, 0x2c(r31) +/* 0000EA40 0001B7D0 7F E3 FB 78 */ mr r3, r31 +/* 0000EA44 0001B7D4 80 01 00 AC */ lwz r0, 0xac(r1) +/* 0000EA48 0001B7D8 81 81 00 70 */ lwz r12, 0x70(r1) +/* 0000EA4C 0001B7DC 7C 08 03 A6 */ mtlr r0 +/* 0000EA50 0001B7E0 BA 61 00 74 */ lmw r19, 0x74(r1) +/* 0000EA54 0001B7E4 7D 80 81 20 */ mtcrf 8, r12 +/* 0000EA58 0001B7E8 38 21 00 A8 */ addi r1, r1, 0xa8 +/* 0000EA5C 0001B7EC 4E 80 00 20 */ blr +.endfn __21CDActionDebugWatchCarPQ28CameraAI8Director + +# .text:0xEA60 | size: 0x31C +.fn _._21CDActionDebugWatchCar, global +/* 0000EA60 0001B7F0 94 21 FF D8 */ stwu r1, -0x28(r1) +/* 0000EA64 0001B7F4 7C 08 02 A6 */ mflr r0 +/* 0000EA68 0001B7F8 BF 41 00 10 */ stmw r26, 0x10(r1) +/* 0000EA6C 0001B7FC 90 01 00 2C */ stw r0, 0x2c(r1) +/* 0000EA70 0001B800 3D 20 00 00 */ lis r9, _vt.21CDActionDebugWatchCar.14IDebugWatchCar@ha +/* 0000EA74 0001B804 3D 60 00 00 */ lis r11, _vt.21CDActionDebugWatchCar.14ITrafficCenter@ha +.L_0000EA78: +/* 0000EA78 0001B808 3D 40 00 00 */ lis r10, _vt.21CDActionDebugWatchCar@ha +/* 0000EA7C 0001B80C 7C 7E 1B 78 */ mr r30, r3 +/* 0000EA80 0001B810 39 6B 00 00 */ addi r11, r11, _vt.21CDActionDebugWatchCar.14ITrafficCenter@l +/* 0000EA84 0001B814 39 29 00 00 */ addi r9, r9, _vt.21CDActionDebugWatchCar.14IDebugWatchCar@l +/* 0000EA88 0001B818 39 4A 00 00 */ addi r10, r10, _vt.21CDActionDebugWatchCar@l +/* 0000EA8C 0001B81C 91 7E 00 28 */ stw r11, 0x28(r30) +/* 0000EA90 0001B820 7C 9A 23 78 */ mr r26, r4 +/* 0000EA94 0001B824 91 3E 00 1C */ stw r9, 0x1c(r30) +/* 0000EA98 0001B828 91 5E 00 14 */ stw r10, 0x14(r30) +/* 0000EA9C 0001B82C 48 00 E3 51 */ bl .L_0001CDEC +/* 0000EAA0 0001B830 3B FE 00 24 */ addi r31, r30, 0x24 +/* 0000EAA4 0001B834 81 7E 00 2C */ lwz r11, 0x2c(r30) +/* 0000EAA8 0001B838 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000EAAC 0001B83C 41 82 EA CC */ beq .L_0000D578 +/* 0000EAB0 0001B840 81 2B 00 08 */ lwz r9, 0x8(r11) +/* 0000EAB4 0001B844 38 80 00 03 */ li r4, 0x3 +/* 0000EAB8 0001B848 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0000EABC 0001B84C 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0000EAC0 0001B850 7C 6B 1A 14 */ add r3, r11, r3 +.L_0000EAC4: +/* 0000EAC4 0001B854 7C 08 03 A6 */ mtlr r0 +/* 0000EAC8 0001B858 4E 80 00 21 */ blrl +/* 0000EACC 0001B85C 80 7E 00 30 */ lwz r3, 0x30(r30) +/* 0000EAD0 0001B860 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000EAD4 0001B864 41 82 EA E0 */ beq .L_0000D5B4 +/* 0000EAD8 0001B868 38 80 00 03 */ li r4, 0x3 +/* 0000EADC 0001B86C 48 00 13 6D */ bl .L_0000FE48 +/* 0000EAE0 0001B870 38 7E 00 34 */ addi r3, r30, 0x34 +/* 0000EAE4 0001B874 38 80 00 02 */ li r4, 0x2 +/* 0000EAE8 0001B878 48 00 00 01 */ bl _._Q29WorldConn9Reference +/* 0000EAEC 0001B87C 3D 20 00 00 */ lis r9, _vt.14ITrafficCenter@ha +/* 0000EAF0 0001B880 3D 40 00 00 */ lis r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha +/* 0000EAF4 0001B884 39 29 00 00 */ addi r9, r9, _vt.14ITrafficCenter@l +/* 0000EAF8 0001B888 39 6A 00 00 */ addi r11, r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l +/* 0000EAFC 0001B88C 91 3E 00 28 */ stw r9, 0x28(r30) +/* 0000EB00 0001B890 3B A1 00 08 */ addi r29, r1, 0x8 +/* 0000EB04 0001B894 93 E1 00 08 */ stw r31, 0x8(r1) +/* 0000EB08 0001B898 7F A5 EB 78 */ mr r5, r29 +/* 0000EB0C 0001B89C 80 6A 00 00 */ lwz r3, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r10) +/* 0000EB10 0001B8A0 80 0B 00 08 */ lwz r0, 0x8(r11) +/* 0000EB14 0001B8A4 54 00 10 3A */ slwi r0, r0, 2 +.L_0000EB18: +/* 0000EB18 0001B8A8 7F E3 02 14 */ add r31, r3, r0 +/* 0000EB1C 0001B8AC 7F E4 FB 78 */ mr r4, r31 +/* 0000EB20 0001B8B0 48 00 00 01 */ bl find__H2ZPP14ITrafficCenterZP14ITrafficCenter_4_STLX01X01RCX11_X01 +/* 0000EB24 0001B8B4 7C 03 F8 00 */ cmpw r3, r31 +/* 0000EB28 0001B8B8 40 82 EB 3C */ bne .L_0000D664 +/* 0000EB2C 0001B8BC 7F E3 FB 78 */ mr r3, r31 +/* 0000EB30 0001B8C0 3B 7E 00 18 */ addi r27, r30, 0x18 +/* 0000EB34 0001B8C4 3B 81 00 0C */ addi r28, r1, 0xc +/* 0000EB38 0001B8C8 48 00 EB 74 */ b .text+0xEB74 +/* 0000EB3C 0001B8CC 39 63 00 04 */ addi r11, r3, 0x4 +/* 0000EB40 0001B8D0 3B 7E 00 18 */ addi r27, r30, 0x18 +/* 0000EB44 0001B8D4 7C 0B F8 00 */ cmpw r11, r31 +/* 0000EB48 0001B8D8 3B 81 00 0C */ addi r28, r1, 0xc +/* 0000EB4C 0001B8DC 41 82 EB 74 */ beq .L_0000D6C0 +/* 0000EB50 0001B8E0 81 2B 00 00 */ lwz r9, 0x0(r11) +/* 0000EB54 0001B8E4 80 1D 00 00 */ lwz r0, 0x0(r29) +/* 0000EB58 0001B8E8 7C 09 00 00 */ cmpw r9, r0 +/* 0000EB5C 0001B8EC 41 82 EB 68 */ beq .L_0000D6C4 +/* 0000EB60 0001B8F0 91 23 00 00 */ stw r9, 0x0(r3) +/* 0000EB64 0001B8F4 38 63 00 04 */ addi r3, r3, 0x4 +/* 0000EB68 0001B8F8 39 6B 00 04 */ addi r11, r11, 0x4 +/* 0000EB6C 0001B8FC 7C 0B F8 00 */ cmpw r11, r31 +/* 0000EB70 0001B900 40 82 EB 50 */ bne .L_0000D6C0 +/* 0000EB74 0001B904 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha +/* 0000EB78 0001B908 38 A9 00 00 */ addi r5, r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l +/* 0000EB7C 0001B90C 81 49 00 00 */ lwz r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r9) +/* 0000EB80 0001B910 81 05 00 08 */ lwz r8, 0x8(r5) +/* 0000EB84 0001B914 55 00 10 3A */ slwi r0, r8, 2 +/* 0000EB88 0001B918 7D 6A 02 14 */ add r11, r10, r0 +/* 0000EB8C 0001B91C 7C 03 58 00 */ cmpw r3, r11 +/* 0000EB90 0001B920 41 82 EC 08 */ beq .L_0000D798 +/* 0000EB94 0001B924 7D 23 58 50 */ subf r9, r3, r11 +/* 0000EB98 0001B928 7C 0A 18 50 */ subf r0, r10, r3 +/* 0000EB9C 0001B92C 7D 3F 16 70 */ srawi r31, r9, 2 +/* 0000EBA0 0001B930 7C 06 16 70 */ srawi r6, r0, 2 +/* 0000EBA4 0001B934 7D 09 43 78 */ mr r9, r8 +/* 0000EBA8 0001B938 38 63 00 04 */ addi r3, r3, 0x4 +/* 0000EBAC 0001B93C 7C 03 58 00 */ cmpw r3, r11 +/* 0000EBB0 0001B940 40 82 EB A8 */ bne .L_0000D758 +/* 0000EBB4 0001B944 7C E6 FA 14 */ add r7, r6, r31 +/* 0000EBB8 0001B948 39 00 00 00 */ li r8, 0x0 +/* 0000EBBC 0001B94C 7C E4 3B 78 */ mr r4, r7 +/* 0000EBC0 0001B950 7C 04 48 50 */ subf r0, r4, r9 +/* 0000EBC4 0001B954 7C 08 00 40 */ cmplw r8, r0 +/* 0000EBC8 0001B958 40 80 EC 00 */ bge .L_0000D7C8 +/* 0000EBCC 0001B95C 7C 06 42 14 */ add r0, r6, r8 +/* 0000EBD0 0001B960 81 65 00 00 */ lwz r11, 0x0(r5) +/* 0000EBD4 0001B964 54 0A 10 3A */ slwi r10, r0, 2 +/* 0000EBD8 0001B968 7D 27 42 14 */ add r9, r7, r8 +/* 0000EBDC 0001B96C 7C 0A 5A 14 */ add r0, r10, r11 +/* 0000EBE0 0001B970 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000EBE4 0001B974 41 82 EB F4 */ beq .L_0000D7D8 +/* 0000EBE8 0001B978 55 29 10 3A */ slwi r9, r9, 2 +.L_0000EBEC: +/* 0000EBEC 0001B97C 7C 09 58 2E */ lwzx r0, r9, r11 +/* 0000EBF0 0001B980 7C 0A 59 2E */ stwx r0, r10, r11 +/* 0000EBF4 0001B984 39 08 00 01 */ addi r8, r8, 0x1 +/* 0000EBF8 0001B988 81 25 00 08 */ lwz r9, 0x8(r5) +/* 0000EBFC 0001B98C 48 00 EB C0 */ b .text+0xEBC0 +/* 0000EC00 0001B990 7C 1F 48 50 */ subf r0, r31, r9 +/* 0000EC04 0001B994 90 05 00 08 */ stw r0, 0x8(r5) +/* 0000EC08 0001B998 3D 20 00 00 */ lis r9, _vt.14IDebugWatchCar@ha +/* 0000EC0C 0001B99C 3D 40 00 00 */ lis r10, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@ha +/* 0000EC10 0001B9A0 39 29 00 00 */ addi r9, r9, _vt.14IDebugWatchCar@l +/* 0000EC14 0001B9A4 39 6A 00 00 */ addi r11, r10, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@l +/* 0000EC18 0001B9A8 91 3E 00 1C */ stw r9, 0x1c(r30) +/* 0000EC1C 0001B9AC 7F 85 E3 78 */ mr r5, r28 +/* 0000EC20 0001B9B0 93 61 00 0C */ stw r27, 0xc(r1) +/* 0000EC24 0001B9B4 80 6A 00 00 */ lwz r3, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@l(r10) +/* 0000EC28 0001B9B8 80 0B 00 08 */ lwz r0, 0x8(r11) +/* 0000EC2C 0001B9BC 54 00 10 3A */ slwi r0, r0, 2 +/* 0000EC30 0001B9C0 7F E3 02 14 */ add r31, r3, r0 +/* 0000EC34 0001B9C4 7F E4 FB 78 */ mr r4, r31 +/* 0000EC38 0001B9C8 48 00 00 01 */ bl find__H2ZPP14IDebugWatchCarZP14IDebugWatchCar_4_STLX01X01RCX11_X01 +/* 0000EC3C 0001B9CC 7C 03 F8 00 */ cmpw r3, r31 +/* 0000EC40 0001B9D0 40 82 EC 4C */ bne .L_0000D88C +/* 0000EC44 0001B9D4 7F E3 FB 78 */ mr r3, r31 +/* 0000EC48 0001B9D8 48 00 EC 7C */ b .text+0xEC7C +/* 0000EC4C 0001B9DC 39 63 00 04 */ addi r11, r3, 0x4 +/* 0000EC50 0001B9E0 7C 0B F8 00 */ cmpw r11, r31 +/* 0000EC54 0001B9E4 41 82 EC 7C */ beq .L_0000D8D0 +/* 0000EC58 0001B9E8 81 2B 00 00 */ lwz r9, 0x0(r11) +/* 0000EC5C 0001B9EC 80 1C 00 00 */ lwz r0, 0x0(r28) +/* 0000EC60 0001B9F0 7C 09 00 00 */ cmpw r9, r0 +/* 0000EC64 0001B9F4 41 82 EC 70 */ beq .L_0000D8D4 +/* 0000EC68 0001B9F8 91 23 00 00 */ stw r9, 0x0(r3) +/* 0000EC6C 0001B9FC 38 63 00 04 */ addi r3, r3, 0x4 +/* 0000EC70 0001BA00 39 6B 00 04 */ addi r11, r11, 0x4 +/* 0000EC74 0001BA04 7C 0B F8 00 */ cmpw r11, r31 +/* 0000EC78 0001BA08 40 82 EC 58 */ bne .L_0000D8D0 +/* 0000EC7C 0001BA0C 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@ha +/* 0000EC80 0001BA10 38 A9 00 00 */ addi r5, r9, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@l +/* 0000EC84 0001BA14 81 49 00 00 */ lwz r10, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@l(r9) +/* 0000EC88 0001BA18 81 05 00 08 */ lwz r8, 0x8(r5) +/* 0000EC8C 0001BA1C 55 00 10 3A */ slwi r0, r8, 2 +/* 0000EC90 0001BA20 7D 6A 02 14 */ add r11, r10, r0 +/* 0000EC94 0001BA24 7C 03 58 00 */ cmpw r3, r11 +/* 0000EC98 0001BA28 41 82 ED 10 */ beq .L_0000D9A8 +/* 0000EC9C 0001BA2C 7D 23 58 50 */ subf r9, r3, r11 +/* 0000ECA0 0001BA30 7C 0A 18 50 */ subf r0, r10, r3 +/* 0000ECA4 0001BA34 7D 3F 16 70 */ srawi r31, r9, 2 +/* 0000ECA8 0001BA38 7C 06 16 70 */ srawi r6, r0, 2 +/* 0000ECAC 0001BA3C 7D 09 43 78 */ mr r9, r8 +/* 0000ECB0 0001BA40 38 63 00 04 */ addi r3, r3, 0x4 +/* 0000ECB4 0001BA44 7C 03 58 00 */ cmpw r3, r11 +/* 0000ECB8 0001BA48 40 82 EC B0 */ bne .L_0000D968 +/* 0000ECBC 0001BA4C 7C E6 FA 14 */ add r7, r6, r31 +/* 0000ECC0 0001BA50 39 00 00 00 */ li r8, 0x0 +/* 0000ECC4 0001BA54 7C E4 3B 78 */ mr r4, r7 +/* 0000ECC8 0001BA58 7C 04 48 50 */ subf r0, r4, r9 +/* 0000ECCC 0001BA5C 7C 08 00 40 */ cmplw r8, r0 +/* 0000ECD0 0001BA60 40 80 ED 08 */ bge .L_0000D9D8 +/* 0000ECD4 0001BA64 7C 06 42 14 */ add r0, r6, r8 +/* 0000ECD8 0001BA68 81 65 00 00 */ lwz r11, 0x0(r5) +/* 0000ECDC 0001BA6C 54 0A 10 3A */ slwi r10, r0, 2 +/* 0000ECE0 0001BA70 7D 27 42 14 */ add r9, r7, r8 +/* 0000ECE4 0001BA74 7C 0A 5A 14 */ add r0, r10, r11 +/* 0000ECE8 0001BA78 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000ECEC 0001BA7C 41 82 EC FC */ beq .L_0000D9E8 +/* 0000ECF0 0001BA80 55 29 10 3A */ slwi r9, r9, 2 +/* 0000ECF4 0001BA84 7C 09 58 2E */ lwzx r0, r9, r11 +/* 0000ECF8 0001BA88 7C 0A 59 2E */ stwx r0, r10, r11 +/* 0000ECFC 0001BA8C 39 08 00 01 */ addi r8, r8, 0x1 +/* 0000ED00 0001BA90 81 25 00 08 */ lwz r9, 0x8(r5) +/* 0000ED04 0001BA94 48 00 EC C8 */ b .text+0xECC8 +/* 0000ED08 0001BA98 7C 1F 48 50 */ subf r0, r31, r9 +/* 0000ED0C 0001BA9C 90 05 00 08 */ stw r0, 0x8(r5) +/* 0000ED10 0001BAA0 3D 20 00 00 */ lis r9, _vt.Q33UTL3COM8IUnknown@ha +/* 0000ED14 0001BAA4 80 7B 00 00 */ lwz r3, 0x0(r27) +/* 0000ED18 0001BAA8 39 29 00 00 */ addi r9, r9, _vt.Q33UTL3COM8IUnknown@l +/* 0000ED1C 0001BAAC 7F 64 DB 78 */ mr r4, r27 +/* 0000ED20 0001BAB0 91 3B 00 04 */ stw r9, 0x4(r27) +/* 0000ED24 0001BAB4 48 00 00 01 */ bl Remove__Q43UTL3COM6Object6_IListPQ33UTL3COM8IUnknown +.L_0000ED28: +/* 0000ED28 0001BAB8 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha +/* 0000ED2C 0001BABC 7F C3 F3 78 */ mr r3, r30 +/* 0000ED30 0001BAC0 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l +.L_0000ED34: +/* 0000ED34 0001BAC4 38 80 00 02 */ li r4, 0x2 +/* 0000ED38 0001BAC8 91 3E 00 14 */ stw r9, 0x14(r30) +/* 0000ED3C 0001BACC 48 00 00 01 */ bl _._Q43UTL3COM6Object6_IList +/* 0000ED40 0001BAD0 73 40 00 01 */ andi. r0, r26, 0x1 +/* 0000ED44 0001BAD4 41 82 ED 68 */ beq .L_0000DAAC +/* 0000ED48 0001BAD8 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 0000ED4C 0001BADC 41 82 ED 68 */ beq .L_0000DAB4 +.L_0000ED50: +/* 0000ED50 0001BAE0 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0000ED54 0001BAE4 7F C4 F3 78 */ mr r4, r30 +/* 0000ED58 0001BAE8 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0000ED5C 0001BAEC 38 A0 00 60 */ li r5, 0x60 +/* 0000ED60 0001BAF0 38 C0 00 00 */ li r6, 0x0 +/* 0000ED64 0001BAF4 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 0000ED68 0001BAF8 80 01 00 2C */ lwz r0, 0x2c(r1) +/* 0000ED6C 0001BAFC 7C 08 03 A6 */ mtlr r0 +/* 0000ED70 0001BB00 BB 41 00 10 */ lmw r26, 0x10(r1) +/* 0000ED74 0001BB04 38 21 00 28 */ addi r1, r1, 0x28 +/* 0000ED78 0001BB08 4E 80 00 20 */ blr +.endfn _._21CDActionDebugWatchCar + +# .text:0xED7C | size: 0x98 +.fn Update__21CDActionDebugWatchCarf, global +/* 0000ED7C 0001BB0C 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0000ED80 0001BB10 7C 08 02 A6 */ mflr r0 +/* 0000ED84 0001BB14 F3 E1 00 10 */ psq_st f31, 0x10(r1), 0, qr0 +/* 0000ED88 0001BB18 93 E1 00 0C */ stw r31, 0xc(r1) +/* 0000ED8C 0001BB1C 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0000ED90 0001BB20 7C 7F 1B 78 */ mr r31, r3 +/* 0000ED94 0001BB24 FF E0 08 90 */ fmr f31, f1 +/* 0000ED98 0001BB28 48 00 E3 A1 */ bl AllocVectorSpace__Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16UiUi +/* 0000ED9C 0001BB2C 80 1F 00 38 */ lwz r0, 0x38(r31) +/* 0000EDA0 0001BB30 39 20 00 01 */ li r9, 0x1 +/* 0000EDA4 0001BB34 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000EDA8 0001BB38 40 82 ED B0 */ bne .L_0000DB58 +/* 0000EDAC 0001BB3C 39 20 00 00 */ li r9, 0x0 +/* 0000EDB0 0001BB40 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0000EDB4 0001BB44 41 82 ED DC */ beq .L_0000DB90 +/* 0000EDB8 0001BB48 80 1F 00 34 */ lwz r0, 0x34(r31) +/* 0000EDBC 0001BB4C FC 20 F8 90 */ fmr f1, f31 +/* 0000EDC0 0001BB50 81 3F 00 30 */ lwz r9, 0x30(r31) +/* 0000EDC4 0001BB54 90 09 00 8C */ stw r0, 0x8c(r9) +/* 0000EDC8 0001BB58 80 7F 00 30 */ lwz r3, 0x30(r31) +/* 0000EDCC 0001BB5C 80 9F 00 38 */ lwz r4, 0x38(r31) +/* 0000EDD0 0001BB60 80 BF 00 3C */ lwz r5, 0x3c(r31) +/* 0000EDD4 0001BB64 80 DF 00 40 */ lwz r6, 0x40(r31) +/* 0000EDD8 0001BB68 48 00 17 65 */ bl .L_0001053C +/* 0000EDDC 0001BB6C 80 7F 00 2C */ lwz r3, 0x2c(r31) +/* 0000EDE0 0001BB70 FC 20 F8 90 */ fmr f1, f31 +/* 0000EDE4 0001BB74 81 23 00 08 */ lwz r9, 0x8(r3) +/* 0000EDE8 0001BB78 A8 09 00 18 */ lha r0, 0x18(r9) +/* 0000EDEC 0001BB7C 81 29 00 1C */ lwz r9, 0x1c(r9) +/* 0000EDF0 0001BB80 7C 63 02 14 */ add r3, r3, r0 +/* 0000EDF4 0001BB84 7D 28 03 A6 */ mtlr r9 +/* 0000EDF8 0001BB88 4E 80 00 21 */ blrl +/* 0000EDFC 0001BB8C 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0000EE00 0001BB90 7C 08 03 A6 */ mtlr r0 +/* 0000EE04 0001BB94 83 E1 00 0C */ lwz r31, 0xc(r1) +/* 0000EE08 0001BB98 E3 E1 00 10 */ psq_l f31, 0x10(r1), 0, qr0 +/* 0000EE0C 0001BB9C 38 21 00 18 */ addi r1, r1, 0x18 +/* 0000EE10 0001BBA0 4E 80 00 20 */ blr +.endfn Update__21CDActionDebugWatchCarf + +# .text:0xEE14 | size: 0x5C +.fn GetTrafficBasis__21CDActionDebugWatchCarRQ25UMath7Matrix4RQ25UMath7Vector3, global +/* 0000EE14 0001BBA4 94 21 FF E8 */ stwu r1, -0x18(r1) +.L_0000EE18: +/* 0000EE18 0001BBA8 7C 08 02 A6 */ mflr r0 +/* 0000EE1C 0001BBAC BF A1 00 0C */ stmw r29, 0xc(r1) +/* 0000EE20 0001BBB0 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0000EE24 0001BBB4 7C 7E 1B 78 */ mr r30, r3 +/* 0000EE28 0001BBB8 7C BD 2B 78 */ mr r29, r5 +/* 0000EE2C 0001BBBC 80 7E 00 38 */ lwz r3, 0x38(r30) +/* 0000EE30 0001BBC0 3B E0 00 01 */ li r31, 0x1 +/* 0000EE34 0001BBC4 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000EE38 0001BBC8 40 82 EE 40 */ bne .L_0000DC78 +/* 0000EE3C 0001BBCC 3B E0 00 00 */ li r31, 0x0 +/* 0000EE40 0001BBD0 2C 1F 00 00 */ cmpwi r31, 0x0 +/* 0000EE44 0001BBD4 41 82 EE 58 */ beq .L_0000DC9C +/* 0000EE48 0001BBD8 48 00 00 01 */ bl RightToLeftMatrix4__H2Z8bMatrix4ZQ25UMath7Matrix4__14ConversionUtilRCX01RX11_v +/* 0000EE4C 0001BBDC 80 7E 00 3C */ lwz r3, 0x3c(r30) +/* 0000EE50 0001BBE0 7F A4 EB 78 */ mr r4, r29 +.L_0000EE54: +/* 0000EE54 0001BBE4 48 00 00 01 */ bl RightToLeftVector3__H2Z8bVector3ZQ25UMath7Vector3__14ConversionUtilRCX01RX11_v +/* 0000EE58 0001BBE8 7F E3 FB 78 */ mr r3, r31 +/* 0000EE5C 0001BBEC 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0000EE60 0001BBF0 7C 08 03 A6 */ mtlr r0 +/* 0000EE64 0001BBF4 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 0000EE68 0001BBF8 38 21 00 18 */ addi r1, r1, 0x18 +/* 0000EE6C 0001BBFC 4E 80 00 20 */ blr +.endfn GetTrafficBasis__21CDActionDebugWatchCarRQ25UMath7Matrix4RQ25UMath7Vector3 + +# .text:0xEE70 | size: 0x68 +.fn bClamp__FP8bVector3PC8bVector3T1, global +/* 0000EE70 0001BC00 7C 69 1B 78 */ mr r9, r3 +/* 0000EE74 0001BC04 C0 64 00 08 */ lfs f3, 0x8(r4) +/* 0000EE78 0001BC08 C0 A4 00 00 */ lfs f5, 0x0(r4) +/* 0000EE7C 0001BC0C C0 C4 00 04 */ lfs f6, 0x4(r4) +/* 0000EE80 0001BC10 C0 09 00 00 */ lfs f0, 0x0(r9) +/* 0000EE84 0001BC14 C1 A9 00 04 */ lfs f13, 0x4(r9) +/* 0000EE88 0001BC18 C1 89 00 08 */ lfs f12, 0x8(r9) +/* 0000EE8C 0001BC1C ED 40 28 28 */ fsubs f10, f0, f5 +/* 0000EE90 0001BC20 C0 85 00 08 */ lfs f4, 0x8(r5) +/* 0000EE94 0001BC24 ED 2D 30 28 */ fsubs f9, f13, f6 +/* 0000EE98 0001BC28 C1 05 00 00 */ lfs f8, 0x0(r5) +/* 0000EE9C 0001BC2C ED 6C 18 28 */ fsubs f11, f12, f3 +/* 0000EEA0 0001BC30 C0 E5 00 04 */ lfs f7, 0x4(r5) +/* 0000EEA4 0001BC34 FD 4A 28 2E */ fsel f10, f10, f0, f5 +/* 0000EEA8 0001BC38 FD 29 33 6E */ fsel f9, f9, f13, f6 +/* 0000EEAC 0001BC3C FD 6B 1B 2E */ fsel f11, f11, f12, f3 +/* 0000EEB0 0001BC40 ED A8 50 28 */ fsubs f13, f8, f10 +.L_0000EEB4: +/* 0000EEB4 0001BC44 ED 87 48 28 */ fsubs f12, f7, f9 +/* 0000EEB8 0001BC48 FD AD 42 AE */ fsel f13, f13, f10, f8 +/* 0000EEBC 0001BC4C EC 04 58 28 */ fsubs f0, f4, f11 +/* 0000EEC0 0001BC50 FD 8C 3A 6E */ fsel f12, f12, f9, f7 +/* 0000EEC4 0001BC54 FC 00 22 EE */ fsel f0, f0, f11, f4 +/* 0000EEC8 0001BC58 D1 A9 00 00 */ stfs f13, 0x0(r9) +/* 0000EECC 0001BC5C D1 89 00 04 */ stfs f12, 0x4(r9) +/* 0000EED0 0001BC60 D0 09 00 08 */ stfs f0, 0x8(r9) +/* 0000EED4 0001BC64 4E 80 00 20 */ blr +.endfn bClamp__FP8bVector3PC8bVector3T1 + +# .text:0xEED8 | size: 0x2D4 +.fn Blend__t6tTable1Z12CubicPovDataP12CubicPovDataN21f, global +/* 0000EED8 0001BC68 94 21 FF 38 */ stwu r1, -0xc8(r1) +/* 0000EEDC 0001BC6C 7C 08 02 A6 */ mflr r0 +/* 0000EEE0 0001BC70 F3 C1 00 B8 */ psq_st f30, 0xb8(r1), 0, qr0 +/* 0000EEE4 0001BC74 F3 E1 00 C0 */ psq_st f31, 0xc0(r1), 0, qr0 +/* 0000EEE8 0001BC78 BF 81 00 A8 */ stmw r28, 0xa8(r1) +/* 0000EEEC 0001BC7C 90 01 00 CC */ stw r0, 0xcc(r1) +/* 0000EEF0 0001BC80 3D 20 00 00 */ lis r9, .rodata+0x920@ha +/* 0000EEF4 0001BC84 7C DC 33 78 */ mr r28, r6 +/* 0000EEF8 0001BC88 C3 C9 09 20 */ lfs f30, .rodata+0x920@l(r9) +/* 0000EEFC 0001BC8C FF E0 08 90 */ fmr f31, f1 +/* 0000EF00 0001BC90 7C BE 2B 78 */ mr r30, r5 +/* 0000EF04 0001BC94 C0 1C 00 00 */ lfs f0, 0x0(r28) +/* 0000EF08 0001BC98 EF DE F8 28 */ fsubs f30, f30, f31 +/* 0000EF0C 0001BC9C C1 BE 00 00 */ lfs f13, 0x0(r30) +/* 0000EF10 0001BCA0 EC 1E 00 32 */ fmuls f0, f30, f0 +/* 0000EF14 0001BCA4 7C 9D 23 78 */ mr r29, r4 +/* 0000EF18 0001BCA8 ED BF 03 7A */ fmadds f13, f31, f13, f0 +/* 0000EF1C 0001BCAC 39 21 00 08 */ addi r9, r1, 0x8 +/* 0000EF20 0001BCB0 D1 BD 00 00 */ stfs f13, 0x0(r29) +/* 0000EF24 0001BCB4 7D 24 4B 78 */ mr r4, r9 +/* 0000EF28 0001BCB8 38 BC 00 10 */ addi r5, r28, 0x10 +/* 0000EF2C 0001BCBC FC 20 F0 90 */ fmr f1, f30 +/* 0000EF30 0001BCC0 C1 BC 00 04 */ lfs f13, 0x4(r28) +/* 0000EF34 0001BCC4 38 7D 00 10 */ addi r3, r29, 0x10 +/* 0000EF38 0001BCC8 C0 1E 00 04 */ lfs f0, 0x4(r30) +/* 0000EF3C 0001BCCC ED BE 03 72 */ fmuls f13, f30, f13 +/* 0000EF40 0001BCD0 EC 1F 68 3A */ fmadds f0, f31, f0, f13 +/* 0000EF44 0001BCD4 D0 1D 00 04 */ stfs f0, 0x4(r29) +/* 0000EF48 0001BCD8 C1 BC 00 08 */ lfs f13, 0x8(r28) +/* 0000EF4C 0001BCDC C0 1E 00 08 */ lfs f0, 0x8(r30) +/* 0000EF50 0001BCE0 ED BE 03 72 */ fmuls f13, f30, f13 +/* 0000EF54 0001BCE4 EC 1F 68 3A */ fmadds f0, f31, f0, f13 +/* 0000EF58 0001BCE8 D0 1D 00 08 */ stfs f0, 0x8(r29) +/* 0000EF5C 0001BCEC C1 BC 00 0C */ lfs f13, 0xc(r28) +/* 0000EF60 0001BCF0 C0 1E 00 0C */ lfs f0, 0xc(r30) +/* 0000EF64 0001BCF4 ED BE 03 72 */ fmuls f13, f30, f13 +.L_0000EF68: +/* 0000EF68 0001BCF8 EC 1F 68 3A */ fmadds f0, f31, f0, f13 +/* 0000EF6C 0001BCFC D0 1D 00 0C */ stfs f0, 0xc(r29) +/* 0000EF70 0001BD00 C1 BE 00 10 */ lfs f13, 0x10(r30) +/* 0000EF74 0001BD04 C0 1E 00 14 */ lfs f0, 0x14(r30) +/* 0000EF78 0001BD08 C1 9E 00 18 */ lfs f12, 0x18(r30) +/* 0000EF7C 0001BD0C ED AD 07 F2 */ fmuls f13, f13, f31 +/* 0000EF80 0001BD10 EC 00 07 F2 */ fmuls f0, f0, f31 +/* 0000EF84 0001BD14 D1 A1 00 08 */ stfs f13, 0x8(r1) +/* 0000EF88 0001BD18 D0 01 00 0C */ stfs f0, 0xc(r1) +/* 0000EF8C 0001BD1C ED 8C 07 F2 */ fmuls f12, f12, f31 +/* 0000EF90 0001BD20 D1 89 00 08 */ stfs f12, 0x8(r9) +/* 0000EF94 0001BD24 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +/* 0000EF98 0001BD28 C1 BE 00 20 */ lfs f13, 0x20(r30) +.L_0000EF9C: +/* 0000EF9C 0001BD2C 38 81 00 18 */ addi r4, r1, 0x18 +/* 0000EFA0 0001BD30 C1 9E 00 24 */ lfs f12, 0x24(r30) +/* 0000EFA4 0001BD34 38 BC 00 20 */ addi r5, r28, 0x20 +/* 0000EFA8 0001BD38 C0 1E 00 28 */ lfs f0, 0x28(r30) +/* 0000EFAC 0001BD3C ED AD 07 F2 */ fmuls f13, f13, f31 +/* 0000EFB0 0001BD40 ED 8C 07 F2 */ fmuls f12, f12, f31 +/* 0000EFB4 0001BD44 D1 A1 00 18 */ stfs f13, 0x18(r1) +/* 0000EFB8 0001BD48 EC 00 07 F2 */ fmuls f0, f0, f31 +/* 0000EFBC 0001BD4C D1 81 00 1C */ stfs f12, 0x1c(r1) +/* 0000EFC0 0001BD50 D0 01 00 20 */ stfs f0, 0x20(r1) +/* 0000EFC4 0001BD54 FC 20 F0 90 */ fmr f1, f30 +/* 0000EFC8 0001BD58 38 7D 00 20 */ addi r3, r29, 0x20 +/* 0000EFCC 0001BD5C 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +/* 0000EFD0 0001BD60 C1 BE 00 30 */ lfs f13, 0x30(r30) +/* 0000EFD4 0001BD64 38 81 00 28 */ addi r4, r1, 0x28 +/* 0000EFD8 0001BD68 C1 9E 00 34 */ lfs f12, 0x34(r30) +/* 0000EFDC 0001BD6C 38 BC 00 30 */ addi r5, r28, 0x30 +/* 0000EFE0 0001BD70 C0 1E 00 38 */ lfs f0, 0x38(r30) +/* 0000EFE4 0001BD74 ED AD 07 F2 */ fmuls f13, f13, f31 +/* 0000EFE8 0001BD78 ED 8C 07 F2 */ fmuls f12, f12, f31 +/* 0000EFEC 0001BD7C D1 A1 00 28 */ stfs f13, 0x28(r1) +/* 0000EFF0 0001BD80 EC 00 07 F2 */ fmuls f0, f0, f31 +/* 0000EFF4 0001BD84 D1 81 00 2C */ stfs f12, 0x2c(r1) +/* 0000EFF8 0001BD88 D0 01 00 30 */ stfs f0, 0x30(r1) +/* 0000EFFC 0001BD8C FC 20 F0 90 */ fmr f1, f30 +/* 0000F000 0001BD90 38 7D 00 30 */ addi r3, r29, 0x30 +/* 0000F004 0001BD94 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +/* 0000F008 0001BD98 C1 BE 00 40 */ lfs f13, 0x40(r30) +/* 0000F00C 0001BD9C 38 81 00 38 */ addi r4, r1, 0x38 +/* 0000F010 0001BDA0 C1 9E 00 44 */ lfs f12, 0x44(r30) +/* 0000F014 0001BDA4 38 BC 00 40 */ addi r5, r28, 0x40 +/* 0000F018 0001BDA8 C0 1E 00 48 */ lfs f0, 0x48(r30) +/* 0000F01C 0001BDAC ED AD 07 F2 */ fmuls f13, f13, f31 +/* 0000F020 0001BDB0 ED 8C 07 F2 */ fmuls f12, f12, f31 +/* 0000F024 0001BDB4 D1 A1 00 38 */ stfs f13, 0x38(r1) +/* 0000F028 0001BDB8 EC 00 07 F2 */ fmuls f0, f0, f31 +/* 0000F02C 0001BDBC D1 81 00 3C */ stfs f12, 0x3c(r1) +/* 0000F030 0001BDC0 D0 01 00 40 */ stfs f0, 0x40(r1) +/* 0000F034 0001BDC4 FC 20 F0 90 */ fmr f1, f30 +/* 0000F038 0001BDC8 38 7D 00 40 */ addi r3, r29, 0x40 +/* 0000F03C 0001BDCC 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +/* 0000F040 0001BDD0 C1 BE 00 50 */ lfs f13, 0x50(r30) +/* 0000F044 0001BDD4 38 81 00 48 */ addi r4, r1, 0x48 +/* 0000F048 0001BDD8 C1 9E 00 54 */ lfs f12, 0x54(r30) +/* 0000F04C 0001BDDC 38 BC 00 50 */ addi r5, r28, 0x50 +/* 0000F050 0001BDE0 C0 1E 00 58 */ lfs f0, 0x58(r30) +/* 0000F054 0001BDE4 ED AD 07 F2 */ fmuls f13, f13, f31 +/* 0000F058 0001BDE8 ED 8C 07 F2 */ fmuls f12, f12, f31 +/* 0000F05C 0001BDEC D1 A1 00 48 */ stfs f13, 0x48(r1) +/* 0000F060 0001BDF0 EC 00 07 F2 */ fmuls f0, f0, f31 +/* 0000F064 0001BDF4 D1 81 00 4C */ stfs f12, 0x4c(r1) +/* 0000F068 0001BDF8 D0 01 00 50 */ stfs f0, 0x50(r1) +/* 0000F06C 0001BDFC FC 20 F0 90 */ fmr f1, f30 +/* 0000F070 0001BE00 38 7D 00 50 */ addi r3, r29, 0x50 +/* 0000F074 0001BE04 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +/* 0000F078 0001BE08 C1 BE 00 60 */ lfs f13, 0x60(r30) +/* 0000F07C 0001BE0C 38 81 00 58 */ addi r4, r1, 0x58 +/* 0000F080 0001BE10 C1 9E 00 64 */ lfs f12, 0x64(r30) +/* 0000F084 0001BE14 38 BC 00 60 */ addi r5, r28, 0x60 +/* 0000F088 0001BE18 C0 1E 00 68 */ lfs f0, 0x68(r30) +/* 0000F08C 0001BE1C ED AD 07 F2 */ fmuls f13, f13, f31 +/* 0000F090 0001BE20 ED 8C 07 F2 */ fmuls f12, f12, f31 +/* 0000F094 0001BE24 D1 A1 00 58 */ stfs f13, 0x58(r1) +/* 0000F098 0001BE28 EC 00 07 F2 */ fmuls f0, f0, f31 +/* 0000F09C 0001BE2C D1 81 00 5C */ stfs f12, 0x5c(r1) +/* 0000F0A0 0001BE30 D0 01 00 60 */ stfs f0, 0x60(r1) +/* 0000F0A4 0001BE34 FC 20 F0 90 */ fmr f1, f30 +/* 0000F0A8 0001BE38 38 7D 00 60 */ addi r3, r29, 0x60 +/* 0000F0AC 0001BE3C 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +/* 0000F0B0 0001BE40 C1 BE 00 70 */ lfs f13, 0x70(r30) +/* 0000F0B4 0001BE44 38 81 00 68 */ addi r4, r1, 0x68 +/* 0000F0B8 0001BE48 C1 9E 00 74 */ lfs f12, 0x74(r30) +/* 0000F0BC 0001BE4C 38 BC 00 70 */ addi r5, r28, 0x70 +/* 0000F0C0 0001BE50 C0 1E 00 78 */ lfs f0, 0x78(r30) +/* 0000F0C4 0001BE54 ED AD 07 F2 */ fmuls f13, f13, f31 +/* 0000F0C8 0001BE58 ED 8C 07 F2 */ fmuls f12, f12, f31 +/* 0000F0CC 0001BE5C D1 A1 00 68 */ stfs f13, 0x68(r1) +/* 0000F0D0 0001BE60 EC 00 07 F2 */ fmuls f0, f0, f31 +/* 0000F0D4 0001BE64 D1 81 00 6C */ stfs f12, 0x6c(r1) +/* 0000F0D8 0001BE68 D0 01 00 70 */ stfs f0, 0x70(r1) +/* 0000F0DC 0001BE6C FC 20 F0 90 */ fmr f1, f30 +/* 0000F0E0 0001BE70 38 7D 00 70 */ addi r3, r29, 0x70 +.L_0000F0E4: +/* 0000F0E4 0001BE74 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +/* 0000F0E8 0001BE78 C1 BE 00 80 */ lfs f13, 0x80(r30) +/* 0000F0EC 0001BE7C 38 81 00 78 */ addi r4, r1, 0x78 +/* 0000F0F0 0001BE80 C1 9E 00 84 */ lfs f12, 0x84(r30) +.L_0000F0F4: +/* 0000F0F4 0001BE84 38 BC 00 80 */ addi r5, r28, 0x80 +/* 0000F0F8 0001BE88 C0 1E 00 88 */ lfs f0, 0x88(r30) +/* 0000F0FC 0001BE8C ED AD 07 F2 */ fmuls f13, f13, f31 +/* 0000F100 0001BE90 ED 8C 07 F2 */ fmuls f12, f12, f31 +/* 0000F104 0001BE94 D1 A1 00 78 */ stfs f13, 0x78(r1) +/* 0000F108 0001BE98 EC 00 07 F2 */ fmuls f0, f0, f31 +/* 0000F10C 0001BE9C D1 81 00 7C */ stfs f12, 0x7c(r1) +/* 0000F110 0001BEA0 D0 01 00 80 */ stfs f0, 0x80(r1) +/* 0000F114 0001BEA4 FC 20 F0 90 */ fmr f1, f30 +.L_0000F118: +/* 0000F118 0001BEA8 38 7D 00 80 */ addi r3, r29, 0x80 +/* 0000F11C 0001BEAC 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +/* 0000F120 0001BEB0 C1 BE 00 90 */ lfs f13, 0x90(r30) +/* 0000F124 0001BEB4 38 81 00 88 */ addi r4, r1, 0x88 +/* 0000F128 0001BEB8 C1 9E 00 94 */ lfs f12, 0x94(r30) +/* 0000F12C 0001BEBC 38 BC 00 90 */ addi r5, r28, 0x90 +/* 0000F130 0001BEC0 C0 1E 00 98 */ lfs f0, 0x98(r30) +/* 0000F134 0001BEC4 ED AD 07 F2 */ fmuls f13, f13, f31 +/* 0000F138 0001BEC8 ED 8C 07 F2 */ fmuls f12, f12, f31 +/* 0000F13C 0001BECC D1 A1 00 88 */ stfs f13, 0x88(r1) +/* 0000F140 0001BED0 EC 00 07 F2 */ fmuls f0, f0, f31 +/* 0000F144 0001BED4 D1 81 00 8C */ stfs f12, 0x8c(r1) +/* 0000F148 0001BED8 D0 01 00 90 */ stfs f0, 0x90(r1) +/* 0000F14C 0001BEDC FC 20 F0 90 */ fmr f1, f30 +.L_0000F150: +/* 0000F150 0001BEE0 38 7D 00 90 */ addi r3, r29, 0x90 +/* 0000F154 0001BEE4 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +/* 0000F158 0001BEE8 C1 BE 00 A8 */ lfs f13, 0xa8(r30) +.L_0000F15C: +/* 0000F15C 0001BEEC 38 7D 00 A0 */ addi r3, r29, 0xa0 +/* 0000F160 0001BEF0 C1 9E 00 A0 */ lfs f12, 0xa0(r30) +/* 0000F164 0001BEF4 38 BC 00 A0 */ addi r5, r28, 0xa0 +.L_0000F168: +/* 0000F168 0001BEF8 C0 1E 00 A4 */ lfs f0, 0xa4(r30) +/* 0000F16C 0001BEFC ED AD 07 F2 */ fmuls f13, f13, f31 +/* 0000F170 0001BF00 ED 8C 07 F2 */ fmuls f12, f12, f31 +/* 0000F174 0001BF04 D1 A1 00 A0 */ stfs f13, 0xa0(r1) +/* 0000F178 0001BF08 EC 00 07 F2 */ fmuls f0, f0, f31 +/* 0000F17C 0001BF0C D1 81 00 98 */ stfs f12, 0x98(r1) +/* 0000F180 0001BF10 D0 01 00 9C */ stfs f0, 0x9c(r1) +/* 0000F184 0001BF14 FC 20 F0 90 */ fmr f1, f30 +/* 0000F188 0001BF18 38 81 00 98 */ addi r4, r1, 0x98 +/* 0000F18C 0001BF1C 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +/* 0000F190 0001BF20 80 01 00 CC */ lwz r0, 0xcc(r1) +.L_0000F194: +/* 0000F194 0001BF24 7C 08 03 A6 */ mtlr r0 +/* 0000F198 0001BF28 BB 81 00 A8 */ lmw r28, 0xa8(r1) +/* 0000F19C 0001BF2C E3 C1 00 B8 */ psq_l f30, 0xb8(r1), 0, qr0 +/* 0000F1A0 0001BF30 E3 E1 00 C0 */ psq_l f31, 0xc0(r1), 0, qr0 +/* 0000F1A4 0001BF34 38 21 00 C8 */ addi r1, r1, 0xc8 +/* 0000F1A8 0001BF38 4E 80 00 20 */ blr +.endfn Blend__t6tTable1Z12CubicPovDataP12CubicPovDataN21f + +# .text:0xF1AC | size: 0x8E0 +.fn __16CubicCameraMoveriP12CameraAnchoribN34, global +/* 0000F1AC 0001BF3C 94 21 FD F0 */ stwu r1, -0x210(r1) +/* 0000F1B0 0001BF40 7C 08 02 A6 */ mflr r0 +/* 0000F1B4 0001BF44 7D 80 00 26 */ mfcr r12 +/* 0000F1B8 0001BF48 F3 E1 02 08 */ psq_st f31, 0x208(r1), 0, qr0 +/* 0000F1BC 0001BF4C BE 41 01 D0 */ stmw r18, 0x1d0(r1) +/* 0000F1C0 0001BF50 90 01 02 14 */ stw r0, 0x214(r1) +.L_0000F1C4: +/* 0000F1C4 0001BF54 91 81 01 CC */ stw r12, 0x1cc(r1) +/* 0000F1C8 0001BF58 7C 7F 1B 78 */ mr r31, r3 +/* 0000F1CC 0001BF5C 7C BC 2B 78 */ mr r28, r5 +/* 0000F1D0 0001BF60 7C DD 33 78 */ mr r29, r6 +/* 0000F1D4 0001BF64 7D 1E 43 78 */ mr r30, r8 +/* 0000F1D8 0001BF68 7D 3B 4B 78 */ mr r27, r9 +/* 0000F1DC 0001BF6C 7D 5A 53 78 */ mr r26, r10 +/* 0000F1E0 0001BF70 7C F9 3B 78 */ mr r25, r7 +.L_0000F1E4: +/* 0000F1E4 0001BF74 38 A0 00 01 */ li r5, 0x1 +/* 0000F1E8 0001BF78 48 00 1F 1D */ bl .L_00011104 +/* 0000F1EC 0001BF7C 3D 20 00 00 */ lis r9, _vt.16CubicCameraMover@ha +/* 0000F1F0 0001BF80 38 00 00 00 */ li r0, 0x0 +/* 0000F1F4 0001BF84 39 29 00 00 */ addi r9, r9, _vt.16CubicCameraMover@l +/* 0000F1F8 0001BF88 6B DE 00 01 */ xori r30, r30, 0x1 +/* 0000F1FC 0001BF8C 90 1F 00 A8 */ stw r0, 0xa8(r31) +.L_0000F200: +/* 0000F200 0001BF90 3D 40 00 00 */ lis r10, WorldTimer@ha +/* 0000F204 0001BF94 91 3F 00 08 */ stw r9, 0x8(r31) +/* 0000F208 0001BF98 3D 60 00 00 */ lis r11, .rodata+0x974@ha +/* 0000F20C 0001BF9C 93 DF 00 A0 */ stw r30, 0xa0(r31) +/* 0000F210 0001BFA0 38 00 00 01 */ li r0, 0x1 +/* 0000F214 0001BFA4 93 7F 00 A4 */ stw r27, 0xa4(r31) +/* 0000F218 0001BFA8 7F A4 EB 78 */ mr r4, r29 +/* 0000F21C 0001BFAC 93 5F 00 AC */ stw r26, 0xac(r31) +/* 0000F220 0001BFB0 7F 83 E3 78 */ mr r3, r28 +/* 0000F224 0001BFB4 93 9F 00 80 */ stw r28, 0x80(r31) +.L_0000F228: +/* 0000F228 0001BFB8 93 BF 00 98 */ stw r29, 0x98(r31) +/* 0000F22C 0001BFBC 93 BF 00 9C */ stw r29, 0x9c(r31) +/* 0000F230 0001BFC0 C0 0B 09 74 */ lfs f0, .rodata+0x974@l(r11) +/* 0000F234 0001BFC4 81 2A 00 00 */ lwz r9, WorldTimer@l(r10) +.L_0000F238: +/* 0000F238 0001BFC8 39 29 E0 C0 */ subi r9, r9, 0x1f40 +/* 0000F23C 0001BFCC 91 3F 00 B4 */ stw r9, 0xb4(r31) +/* 0000F240 0001BFD0 81 6A 00 00 */ lwz r11, WorldTimer@l(r10) +/* 0000F244 0001BFD4 D0 1F 00 C0 */ stfs f0, 0xc0(r31) +/* 0000F248 0001BFD8 39 6B E7 00 */ subi r11, r11, 0x1900 +/* 0000F24C 0001BFDC 90 1F 00 B0 */ stw r0, 0xb0(r31) +/* 0000F250 0001BFE0 91 7F 00 B8 */ stw r11, 0xb8(r31) +.L_0000F254: +/* 0000F254 0001BFE4 81 2A 00 00 */ lwz r9, WorldTimer@l(r10) +/* 0000F258 0001BFE8 39 29 E8 90 */ subi r9, r9, 0x1770 +/* 0000F25C 0001BFEC 91 3F 00 BC */ stw r9, 0xbc(r31) +/* 0000F260 0001BFF0 48 00 14 45 */ bl .L_000106A4 +/* 0000F264 0001BFF4 80 1F 00 98 */ lwz r0, 0x98(r31) +/* 0000F268 0001BFF8 7C 74 1B 78 */ mr r20, r3 +/* 0000F26C 0001BFFC 3D 20 00 00 */ lis r9, aCubicPovTables@ha +/* 0000F270 0001C000 1C 60 00 14 */ mulli r3, r0, 0x14 +/* 0000F274 0001C004 39 29 00 00 */ addi r9, r9, aCubicPovTables@l +/* 0000F278 0001C008 39 01 00 08 */ addi r8, r1, 0x8 +/* 0000F27C 0001C00C 7C 83 48 6E */ lwzux r4, r3, r9 +/* 0000F280 0001C010 C1 A3 00 04 */ lfs f13, 0x4(r3) +/* 0000F284 0001C014 C1 83 00 0C */ lfs f12, 0xc(r3) +/* 0000F288 0001C018 FD A0 68 50 */ fneg f13, f13 +/* 0000F28C 0001C01C EC 2C 03 72 */ fmuls f1, f12, f13 +/* 0000F290 0001C020 FC 00 08 90 */ fmr f0, f1 +/* 0000F294 0001C024 FD 60 00 1E */ fctiwz f11, f0 +/* 0000F298 0001C028 D9 61 01 C0 */ stfd f11, 0x1c0(r1) +/* 0000F29C 0001C02C 80 C1 01 C4 */ lwz r6, 0x1c4(r1) +/* 0000F2A0 0001C030 2C 06 00 00 */ cmpwi r6, 0x0 +/* 0000F2A4 0001C034 40 80 F2 BC */ bge .L_0000E560 +/* 0000F2A8 0001C038 80 83 00 10 */ lwz r4, 0x10(r3) +/* 0000F2AC 0001C03C 38 A0 00 B0 */ li r5, 0xb0 +/* 0000F2B0 0001C040 7D 03 43 78 */ mr r3, r8 +/* 0000F2B4 0001C044 48 00 00 01 */ bl bMemCpy +/* 0000F2B8 0001C048 48 00 F3 44 */ b .text+0xF344 +/* 0000F2BC 0001C04C 38 04 FF FF */ subi r0, r4, 0x1 +/* 0000F2C0 0001C050 7C 06 00 00 */ cmpw r6, r0 +/* 0000F2C4 0001C054 41 80 F2 E8 */ blt __21CDActionDebugWatchCarPQ28CameraAI8Director +/* 0000F2C8 0001C058 1C 84 00 B0 */ mulli r4, r4, 0xb0 +/* 0000F2CC 0001C05C 80 03 00 10 */ lwz r0, 0x10(r3) +.L_0000F2D0: +/* 0000F2D0 0001C060 7D 03 43 78 */ mr r3, r8 +/* 0000F2D4 0001C064 38 A0 00 B0 */ li r5, 0xb0 +/* 0000F2D8 0001C068 38 84 FF 50 */ subi r4, r4, 0xb0 +/* 0000F2DC 0001C06C 7C 80 22 14 */ add r4, r0, r4 +/* 0000F2E0 0001C070 48 00 00 01 */ bl bMemCpy +/* 0000F2E4 0001C074 48 00 F3 44 */ b .text+0xF344 +/* 0000F2E8 0001C078 6C C0 80 00 */ xoris r0, r6, 0x8000 +/* 0000F2EC 0001C07C 90 01 01 C4 */ stw r0, 0x1c4(r1) +/* 0000F2F0 0001C080 3D 60 43 30 */ lis r11, 0x4330 +/* 0000F2F4 0001C084 3D 40 00 00 */ lis r10, .rodata+0x978@ha +/* 0000F2F8 0001C088 91 61 01 C0 */ stw r11, 0x1c0(r1) +/* 0000F2FC 0001C08C C9 AA 09 78 */ lfd f13, .rodata+0x978@l(r10) +/* 0000F300 0001C090 C8 01 01 C0 */ lfd f0, 0x1c0(r1) +.L_0000F304: +/* 0000F304 0001C094 FC 00 68 28 */ fsub f0, f0, f13 +/* 0000F308 0001C098 FD A0 00 18 */ frsp f13, f0 +/* 0000F30C 0001C09C FC 0D 08 00 */ fcmpu cr0, f13, f1 +.L_0000F310: +/* 0000F310 0001C0A0 4C 62 03 82 */ cror un, eq, lt +/* 0000F314 0001C0A4 41 83 F3 24 */ bso .L_0000E638 +/* 0000F318 0001C0A8 3D 20 00 00 */ lis r9, .rodata+0x980@ha +/* 0000F31C 0001C0AC C0 09 09 80 */ lfs f0, .rodata+0x980@l(r9) +/* 0000F320 0001C0B0 ED AD 00 28 */ fsubs f13, f13, f0 +/* 0000F324 0001C0B4 1C C6 00 B0 */ mulli r6, r6, 0xb0 +/* 0000F328 0001C0B8 80 03 00 10 */ lwz r0, 0x10(r3) +/* 0000F32C 0001C0BC EC 21 68 28 */ fsubs f1, f1, f13 +/* 0000F330 0001C0C0 7D 04 43 78 */ mr r4, r8 +/* 0000F334 0001C0C4 38 A6 00 B0 */ addi r5, r6, 0xb0 +/* 0000F338 0001C0C8 7C C0 32 14 */ add r6, r0, r6 +/* 0000F33C 0001C0CC 7C A0 2A 14 */ add r5, r0, r5 +/* 0000F340 0001C0D0 48 00 EE D9 */ bl .text+0xEED8 +/* 0000F344 0001C0D4 38 60 00 2C */ li r3, 0x2c +/* 0000F348 0001C0D8 3B A0 00 01 */ li r29, 0x1 +/* 0000F34C 0001C0DC 48 00 00 01 */ bl __builtin_vec_new +/* 0000F350 0001C0E0 3B C0 00 00 */ li r30, 0x0 +/* 0000F354 0001C0E4 C0 01 00 10 */ lfs f0, 0x10(r1) +/* 0000F358 0001C0E8 3D 60 00 00 */ lis r11, .rodata+0x974@ha +/* 0000F35C 0001C0EC C3 EB 09 74 */ lfs f31, .rodata+0x974@l(r11) +/* 0000F360 0001C0F0 7C 69 1B 78 */ mr r9, r3 +/* 0000F364 0001C0F4 D0 09 00 24 */ stfs f0, 0x24(r9) +/* 0000F368 0001C0F8 3B 81 00 A8 */ addi r28, r1, 0xa8 +/* 0000F36C 0001C0FC 91 3F 00 84 */ stw r9, 0x84(r31) +/* 0000F370 0001C100 3B 61 00 B8 */ addi r27, r1, 0xb8 +/* 0000F374 0001C104 3B 41 00 F8 */ addi r26, r1, 0xf8 +/* 0000F378 0001C108 3B 01 01 38 */ addi r24, r1, 0x138 +/* 0000F37C 0001C10C 3A C1 01 58 */ addi r22, r1, 0x158 +/* 0000F380 0001C110 3A E1 01 48 */ addi r23, r1, 0x148 +/* 0000F384 0001C114 3A A1 01 68 */ addi r21, r1, 0x168 +/* 0000F388 0001C118 3A 61 01 88 */ addi r19, r1, 0x188 +/* 0000F38C 0001C11C 3A 41 01 98 */ addi r18, r1, 0x198 +/* 0000F390 0001C120 B3 C9 00 28 */ sth r30, 0x28(r9) +/* 0000F394 0001C124 B3 A9 00 2A */ sth r29, 0x2a(r9) +/* 0000F398 0001C128 38 60 00 84 */ li r3, 0x84 +/* 0000F39C 0001C12C D3 E9 00 00 */ stfs f31, 0x0(r9) +/* 0000F3A0 0001C130 2E 19 00 00 */ cmpwi cr4, r25, 0x0 +/* 0000F3A4 0001C134 D3 E9 00 04 */ stfs f31, 0x4(r9) +/* 0000F3A8 0001C138 3B 3F 00 E4 */ addi r25, r31, 0xe4 +/* 0000F3AC 0001C13C D3 E9 00 08 */ stfs f31, 0x8(r9) +/* 0000F3B0 0001C140 D3 E9 00 0C */ stfs f31, 0xc(r9) +/* 0000F3B4 0001C144 D3 E9 00 20 */ stfs f31, 0x20(r9) +/* 0000F3B8 0001C148 D3 E9 00 10 */ stfs f31, 0x10(r9) +/* 0000F3BC 0001C14C D3 E9 00 14 */ stfs f31, 0x14(r9) +/* 0000F3C0 0001C150 D3 E9 00 18 */ stfs f31, 0x18(r9) +/* 0000F3C4 0001C154 D3 E9 00 1C */ stfs f31, 0x1c(r9) +/* 0000F3C8 0001C158 48 00 00 01 */ bl __builtin_vec_new +/* 0000F3CC 0001C15C C0 01 00 08 */ lfs f0, 0x8(r1) +/* 0000F3D0 0001C160 7C 69 1B 78 */ mr r9, r3 +/* 0000F3D4 0001C164 B3 C9 00 28 */ sth r30, 0x28(r9) +/* 0000F3D8 0001C168 38 60 00 84 */ li r3, 0x84 +/* 0000F3DC 0001C16C D0 09 00 7C */ stfs f0, 0x7c(r9) +/* 0000F3E0 0001C170 D0 09 00 24 */ stfs f0, 0x24(r9) +/* 0000F3E4 0001C174 B3 A9 00 2A */ sth r29, 0x2a(r9) +/* 0000F3E8 0001C178 D0 09 00 50 */ stfs f0, 0x50(r9) +/* 0000F3EC 0001C17C B3 C9 00 54 */ sth r30, 0x54(r9) +/* 0000F3F0 0001C180 B3 A9 00 56 */ sth r29, 0x56(r9) +/* 0000F3F4 0001C184 B3 C9 00 80 */ sth r30, 0x80(r9) +/* 0000F3F8 0001C188 B3 A9 00 82 */ sth r29, 0x82(r9) +/* 0000F3FC 0001C18C D3 E9 00 00 */ stfs f31, 0x0(r9) +/* 0000F400 0001C190 D3 E9 00 04 */ stfs f31, 0x4(r9) +/* 0000F404 0001C194 D3 E9 00 08 */ stfs f31, 0x8(r9) +/* 0000F408 0001C198 D3 E9 00 0C */ stfs f31, 0xc(r9) +/* 0000F40C 0001C19C D3 E9 00 20 */ stfs f31, 0x20(r9) +/* 0000F410 0001C1A0 D3 E9 00 10 */ stfs f31, 0x10(r9) +/* 0000F414 0001C1A4 D3 E9 00 14 */ stfs f31, 0x14(r9) +/* 0000F418 0001C1A8 D3 E9 00 18 */ stfs f31, 0x18(r9) +/* 0000F41C 0001C1AC D3 E9 00 1C */ stfs f31, 0x1c(r9) +/* 0000F420 0001C1B0 D3 E9 00 2C */ stfs f31, 0x2c(r9) +/* 0000F424 0001C1B4 D3 E9 00 30 */ stfs f31, 0x30(r9) +/* 0000F428 0001C1B8 D3 E9 00 34 */ stfs f31, 0x34(r9) +/* 0000F42C 0001C1BC D3 E9 00 38 */ stfs f31, 0x38(r9) +/* 0000F430 0001C1C0 D3 E9 00 4C */ stfs f31, 0x4c(r9) +/* 0000F434 0001C1C4 D3 E9 00 3C */ stfs f31, 0x3c(r9) +/* 0000F438 0001C1C8 D3 E9 00 40 */ stfs f31, 0x40(r9) +/* 0000F43C 0001C1CC D3 E9 00 44 */ stfs f31, 0x44(r9) +/* 0000F440 0001C1D0 D3 E9 00 48 */ stfs f31, 0x48(r9) +/* 0000F444 0001C1D4 D3 E9 00 58 */ stfs f31, 0x58(r9) +/* 0000F448 0001C1D8 D3 E9 00 5C */ stfs f31, 0x5c(r9) +/* 0000F44C 0001C1DC D3 E9 00 60 */ stfs f31, 0x60(r9) +/* 0000F450 0001C1E0 D3 E9 00 64 */ stfs f31, 0x64(r9) +/* 0000F454 0001C1E4 D3 E9 00 78 */ stfs f31, 0x78(r9) +/* 0000F458 0001C1E8 D3 E9 00 68 */ stfs f31, 0x68(r9) +/* 0000F45C 0001C1EC 91 3F 00 88 */ stw r9, 0x88(r31) +/* 0000F460 0001C1F0 D3 E9 00 6C */ stfs f31, 0x6c(r9) +/* 0000F464 0001C1F4 D3 E9 00 70 */ stfs f31, 0x70(r9) +/* 0000F468 0001C1F8 D3 E9 00 74 */ stfs f31, 0x74(r9) +/* 0000F46C 0001C1FC 48 00 00 01 */ bl __builtin_vec_new +/* 0000F470 0001C200 C0 01 00 0C */ lfs f0, 0xc(r1) +/* 0000F474 0001C204 7C 69 1B 78 */ mr r9, r3 +/* 0000F478 0001C208 B3 C9 00 28 */ sth r30, 0x28(r9) +/* 0000F47C 0001C20C 38 60 00 84 */ li r3, 0x84 +/* 0000F480 0001C210 D0 09 00 7C */ stfs f0, 0x7c(r9) +/* 0000F484 0001C214 D0 09 00 24 */ stfs f0, 0x24(r9) +.L_0000F488: +/* 0000F488 0001C218 B3 A9 00 2A */ sth r29, 0x2a(r9) +.L_0000F48C: +/* 0000F48C 0001C21C D0 09 00 50 */ stfs f0, 0x50(r9) +/* 0000F490 0001C220 B3 C9 00 54 */ sth r30, 0x54(r9) +/* 0000F494 0001C224 B3 A9 00 56 */ sth r29, 0x56(r9) +/* 0000F498 0001C228 B3 C9 00 80 */ sth r30, 0x80(r9) +/* 0000F49C 0001C22C B3 A9 00 82 */ sth r29, 0x82(r9) +/* 0000F4A0 0001C230 D3 E9 00 00 */ stfs f31, 0x0(r9) +/* 0000F4A4 0001C234 D3 E9 00 04 */ stfs f31, 0x4(r9) +/* 0000F4A8 0001C238 D3 E9 00 08 */ stfs f31, 0x8(r9) +/* 0000F4AC 0001C23C D3 E9 00 0C */ stfs f31, 0xc(r9) +/* 0000F4B0 0001C240 D3 E9 00 20 */ stfs f31, 0x20(r9) +/* 0000F4B4 0001C244 D3 E9 00 10 */ stfs f31, 0x10(r9) +/* 0000F4B8 0001C248 D3 E9 00 14 */ stfs f31, 0x14(r9) +/* 0000F4BC 0001C24C D3 E9 00 18 */ stfs f31, 0x18(r9) +/* 0000F4C0 0001C250 D3 E9 00 1C */ stfs f31, 0x1c(r9) +/* 0000F4C4 0001C254 D3 E9 00 2C */ stfs f31, 0x2c(r9) +/* 0000F4C8 0001C258 D3 E9 00 30 */ stfs f31, 0x30(r9) +/* 0000F4CC 0001C25C D3 E9 00 34 */ stfs f31, 0x34(r9) +/* 0000F4D0 0001C260 D3 E9 00 38 */ stfs f31, 0x38(r9) +/* 0000F4D4 0001C264 D3 E9 00 4C */ stfs f31, 0x4c(r9) +/* 0000F4D8 0001C268 D3 E9 00 3C */ stfs f31, 0x3c(r9) +/* 0000F4DC 0001C26C D3 E9 00 40 */ stfs f31, 0x40(r9) +/* 0000F4E0 0001C270 D3 E9 00 44 */ stfs f31, 0x44(r9) +/* 0000F4E4 0001C274 D3 E9 00 48 */ stfs f31, 0x48(r9) +/* 0000F4E8 0001C278 D3 E9 00 58 */ stfs f31, 0x58(r9) +/* 0000F4EC 0001C27C D3 E9 00 5C */ stfs f31, 0x5c(r9) +/* 0000F4F0 0001C280 D3 E9 00 60 */ stfs f31, 0x60(r9) +/* 0000F4F4 0001C284 D3 E9 00 64 */ stfs f31, 0x64(r9) +/* 0000F4F8 0001C288 D3 E9 00 78 */ stfs f31, 0x78(r9) +/* 0000F4FC 0001C28C D3 E9 00 68 */ stfs f31, 0x68(r9) +/* 0000F500 0001C290 91 3F 00 8C */ stw r9, 0x8c(r31) +/* 0000F504 0001C294 D3 E9 00 6C */ stfs f31, 0x6c(r9) +/* 0000F508 0001C298 D3 E9 00 70 */ stfs f31, 0x70(r9) +/* 0000F50C 0001C29C D3 E9 00 74 */ stfs f31, 0x74(r9) +/* 0000F510 0001C2A0 48 00 00 01 */ bl __builtin_vec_new +/* 0000F514 0001C2A4 C1 81 00 A8 */ lfs f12, 0xa8(r1) +/* 0000F518 0001C2A8 7C 69 1B 78 */ mr r9, r3 +/* 0000F51C 0001C2AC C1 BC 00 04 */ lfs f13, 0x4(r28) +/* 0000F520 0001C2B0 38 60 00 84 */ li r3, 0x84 +/* 0000F524 0001C2B4 C0 1C 00 08 */ lfs f0, 0x8(r28) +/* 0000F528 0001C2B8 D1 89 00 24 */ stfs f12, 0x24(r9) +/* 0000F52C 0001C2BC D1 A9 00 50 */ stfs f13, 0x50(r9) +/* 0000F530 0001C2C0 D0 09 00 7C */ stfs f0, 0x7c(r9) +/* 0000F534 0001C2C4 B3 C9 00 28 */ sth r30, 0x28(r9) +/* 0000F538 0001C2C8 B3 A9 00 2A */ sth r29, 0x2a(r9) +/* 0000F53C 0001C2CC B3 C9 00 54 */ sth r30, 0x54(r9) +/* 0000F540 0001C2D0 B3 A9 00 56 */ sth r29, 0x56(r9) +/* 0000F544 0001C2D4 D3 E9 00 00 */ stfs f31, 0x0(r9) +/* 0000F548 0001C2D8 D3 E9 00 04 */ stfs f31, 0x4(r9) +/* 0000F54C 0001C2DC D3 E9 00 08 */ stfs f31, 0x8(r9) +/* 0000F550 0001C2E0 D3 E9 00 0C */ stfs f31, 0xc(r9) +/* 0000F554 0001C2E4 D3 E9 00 20 */ stfs f31, 0x20(r9) +/* 0000F558 0001C2E8 D3 E9 00 10 */ stfs f31, 0x10(r9) +.L_0000F55C: +/* 0000F55C 0001C2EC D3 E9 00 14 */ stfs f31, 0x14(r9) +/* 0000F560 0001C2F0 D3 E9 00 18 */ stfs f31, 0x18(r9) +/* 0000F564 0001C2F4 D3 E9 00 1C */ stfs f31, 0x1c(r9) +/* 0000F568 0001C2F8 D3 E9 00 2C */ stfs f31, 0x2c(r9) +/* 0000F56C 0001C2FC D3 E9 00 30 */ stfs f31, 0x30(r9) +/* 0000F570 0001C300 D3 E9 00 34 */ stfs f31, 0x34(r9) +.L_0000F574: +/* 0000F574 0001C304 D3 E9 00 38 */ stfs f31, 0x38(r9) +.L_0000F578: +/* 0000F578 0001C308 D3 E9 00 4C */ stfs f31, 0x4c(r9) +/* 0000F57C 0001C30C D3 E9 00 3C */ stfs f31, 0x3c(r9) +/* 0000F580 0001C310 D3 E9 00 40 */ stfs f31, 0x40(r9) +/* 0000F584 0001C314 D3 E9 00 44 */ stfs f31, 0x44(r9) +/* 0000F588 0001C318 D3 E9 00 48 */ stfs f31, 0x48(r9) +/* 0000F58C 0001C31C D3 E9 00 58 */ stfs f31, 0x58(r9) +/* 0000F590 0001C320 D3 E9 00 5C */ stfs f31, 0x5c(r9) +/* 0000F594 0001C324 D3 E9 00 60 */ stfs f31, 0x60(r9) +/* 0000F598 0001C328 D3 E9 00 64 */ stfs f31, 0x64(r9) +/* 0000F59C 0001C32C D3 E9 00 78 */ stfs f31, 0x78(r9) +/* 0000F5A0 0001C330 B3 C9 00 80 */ sth r30, 0x80(r9) +/* 0000F5A4 0001C334 91 3F 00 90 */ stw r9, 0x90(r31) +/* 0000F5A8 0001C338 B3 A9 00 82 */ sth r29, 0x82(r9) +/* 0000F5AC 0001C33C D3 E9 00 68 */ stfs f31, 0x68(r9) +/* 0000F5B0 0001C340 D3 E9 00 6C */ stfs f31, 0x6c(r9) +/* 0000F5B4 0001C344 D3 E9 00 70 */ stfs f31, 0x70(r9) +/* 0000F5B8 0001C348 D3 E9 00 74 */ stfs f31, 0x74(r9) +/* 0000F5BC 0001C34C 48 00 00 01 */ bl __builtin_vec_new +/* 0000F5C0 0001C350 C1 9C 00 08 */ lfs f12, 0x8(r28) +/* 0000F5C4 0001C354 7C 69 1B 78 */ mr r9, r3 +/* 0000F5C8 0001C358 C0 01 00 A8 */ lfs f0, 0xa8(r1) +/* 0000F5CC 0001C35C 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0000F5D0 0001C360 C1 BC 00 04 */ lfs f13, 0x4(r28) +/* 0000F5D4 0001C364 38 80 00 2C */ li r4, 0x2c +/* 0000F5D8 0001C368 D0 09 00 24 */ stfs f0, 0x24(r9) +/* 0000F5DC 0001C36C 38 A0 00 00 */ li r5, 0x0 +/* 0000F5E0 0001C370 D1 A9 00 50 */ stfs f13, 0x50(r9) +/* 0000F5E4 0001C374 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0000F5E8 0001C378 D1 89 00 7C */ stfs f12, 0x7c(r9) +/* 0000F5EC 0001C37C B3 C9 00 28 */ sth r30, 0x28(r9) +/* 0000F5F0 0001C380 B3 A9 00 2A */ sth r29, 0x2a(r9) +/* 0000F5F4 0001C384 B3 C9 00 54 */ sth r30, 0x54(r9) +/* 0000F5F8 0001C388 B3 A9 00 56 */ sth r29, 0x56(r9) +/* 0000F5FC 0001C38C D3 E9 00 00 */ stfs f31, 0x0(r9) +/* 0000F600 0001C390 D3 E9 00 04 */ stfs f31, 0x4(r9) +/* 0000F604 0001C394 D3 E9 00 08 */ stfs f31, 0x8(r9) +/* 0000F608 0001C398 D3 E9 00 0C */ stfs f31, 0xc(r9) +/* 0000F60C 0001C39C D3 E9 00 20 */ stfs f31, 0x20(r9) +/* 0000F610 0001C3A0 D3 E9 00 10 */ stfs f31, 0x10(r9) +/* 0000F614 0001C3A4 D3 E9 00 14 */ stfs f31, 0x14(r9) +/* 0000F618 0001C3A8 D3 E9 00 18 */ stfs f31, 0x18(r9) +/* 0000F61C 0001C3AC D3 E9 00 1C */ stfs f31, 0x1c(r9) +/* 0000F620 0001C3B0 D3 E9 00 2C */ stfs f31, 0x2c(r9) +/* 0000F624 0001C3B4 D3 E9 00 30 */ stfs f31, 0x30(r9) +/* 0000F628 0001C3B8 D3 E9 00 34 */ stfs f31, 0x34(r9) +/* 0000F62C 0001C3BC D3 E9 00 38 */ stfs f31, 0x38(r9) +/* 0000F630 0001C3C0 D3 E9 00 4C */ stfs f31, 0x4c(r9) +/* 0000F634 0001C3C4 D3 E9 00 3C */ stfs f31, 0x3c(r9) +/* 0000F638 0001C3C8 D3 E9 00 40 */ stfs f31, 0x40(r9) +/* 0000F63C 0001C3CC D3 E9 00 44 */ stfs f31, 0x44(r9) +/* 0000F640 0001C3D0 D3 E9 00 48 */ stfs f31, 0x48(r9) +/* 0000F644 0001C3D4 D3 E9 00 58 */ stfs f31, 0x58(r9) +/* 0000F648 0001C3D8 D3 E9 00 5C */ stfs f31, 0x5c(r9) +/* 0000F64C 0001C3DC D3 E9 00 60 */ stfs f31, 0x60(r9) +/* 0000F650 0001C3E0 D3 E9 00 64 */ stfs f31, 0x64(r9) +/* 0000F654 0001C3E4 D3 E9 00 78 */ stfs f31, 0x78(r9) +/* 0000F658 0001C3E8 B3 C9 00 80 */ sth r30, 0x80(r9) +/* 0000F65C 0001C3EC B3 A9 00 82 */ sth r29, 0x82(r9) +/* 0000F660 0001C3F0 D3 E9 00 74 */ stfs f31, 0x74(r9) +/* 0000F664 0001C3F4 91 3F 00 94 */ stw r9, 0x94(r31) +/* 0000F668 0001C3F8 D3 E9 00 68 */ stfs f31, 0x68(r9) +/* 0000F66C 0001C3FC D3 E9 00 6C */ stfs f31, 0x6c(r9) +/* 0000F670 0001C400 D3 E9 00 70 */ stfs f31, 0x70(r9) +/* 0000F674 0001C404 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 0000F678 0001C408 7C 7E 1B 78 */ mr r30, r3 +/* 0000F67C 0001C40C 38 80 00 10 */ li r4, 0x10 +/* 0000F680 0001C410 38 A0 00 05 */ li r5, 0x5 +/* 0000F684 0001C414 48 00 00 01 */ bl __11AverageBaseii +/* 0000F688 0001C418 3B BE 00 08 */ addi r29, r30, 0x8 +/* 0000F68C 0001C41C 3D 20 00 00 */ lis r9, _vt.t8tAverage1Z8bVector3@ha +/* 0000F690 0001C420 38 60 00 50 */ li r3, 0x50 +/* 0000F694 0001C424 39 29 00 00 */ addi r9, r9, _vt.t8tAverage1Z8bVector3@l +/* 0000F698 0001C428 91 3E 00 04 */ stw r9, 0x4(r30) +/* 0000F69C 0001C42C 48 00 00 01 */ bl __builtin_vec_new +/* 0000F6A0 0001C430 39 20 00 04 */ li r9, 0x4 +/* 0000F6A4 0001C434 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0000F6A8 0001C438 39 29 FF FF */ subi r9, r9, 0x1 +/* 0000F6AC 0001C43C 40 82 F6 A4 */ bne .L_0000ED50 +/* 0000F6B0 0001C440 90 7D 00 00 */ stw r3, 0x0(r29) +/* 0000F6B4 0001C444 38 80 00 00 */ li r4, 0x0 +/* 0000F6B8 0001C448 38 A0 00 50 */ li r5, 0x50 +/* 0000F6BC 0001C44C 80 7E 00 08 */ lwz r3, 0x8(r30) +/* 0000F6C0 0001C450 48 00 00 01 */ bl bMemSet +/* 0000F6C4 0001C454 81 3E 00 08 */ lwz r9, 0x8(r30) +/* 0000F6C8 0001C458 7E 85 A3 78 */ mr r5, r20 +/* 0000F6CC 0001C45C 7F E3 FB 78 */ mr r3, r31 +/* 0000F6D0 0001C460 7F 64 DB 78 */ mr r4, r27 +/* 0000F6D4 0001C464 C1 89 00 00 */ lfs f12, 0x0(r9) +/* 0000F6D8 0001C468 38 C1 00 08 */ addi r6, r1, 0x8 +/* 0000F6DC 0001C46C C1 A9 00 04 */ lfs f13, 0x4(r9) +/* 0000F6E0 0001C470 38 E0 00 01 */ li r7, 0x1 +.L_0000F6E4: +/* 0000F6E4 0001C474 C0 09 00 08 */ lfs f0, 0x8(r9) +/* 0000F6E8 0001C478 D1 9E 00 1C */ stfs f12, 0x1c(r30) +.L_0000F6EC: +/* 0000F6EC 0001C47C D1 BE 00 20 */ stfs f13, 0x20(r30) +/* 0000F6F0 0001C480 D0 1E 00 24 */ stfs f0, 0x24(r30) +/* 0000F6F4 0001C484 C1 89 00 08 */ lfs f12, 0x8(r9) +/* 0000F6F8 0001C488 C0 09 00 00 */ lfs f0, 0x0(r9) +/* 0000F6FC 0001C48C C1 A9 00 04 */ lfs f13, 0x4(r9) +/* 0000F700 0001C490 D0 1E 00 0C */ stfs f0, 0xc(r30) +/* 0000F704 0001C494 D1 BE 00 10 */ stfs f13, 0x10(r30) +/* 0000F708 0001C498 D1 9E 00 14 */ stfs f12, 0x14(r30) +/* 0000F70C 0001C49C 93 D9 00 00 */ stw r30, 0x0(r25) +/* 0000F710 0001C4A0 48 00 FE B5 */ bl .text+0xFEB4 +/* 0000F714 0001C4A4 7F 64 DB 78 */ mr r4, r27 +/* 0000F718 0001C4A8 7F 43 D3 78 */ mr r3, r26 +/* 0000F71C 0001C4AC 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 +/* 0000F720 0001C4B0 80 1F 00 A4 */ lwz r0, 0xa4(r31) +/* 0000F724 0001C4B4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000F728 0001C4B8 41 82 F7 8C */ beq .L_0000EEB4 +/* 0000F72C 0001C4BC C1 41 00 F8 */ lfs f10, 0xf8(r1) +/* 0000F730 0001C4C0 C1 01 00 FC */ lfs f8, 0xfc(r1) +/* 0000F734 0001C4C4 C0 E1 01 08 */ lfs f7, 0x108(r1) +/* 0000F738 0001C4C8 FD 40 50 50 */ fneg f10, f10 +/* 0000F73C 0001C4CC C1 21 01 0C */ lfs f9, 0x10c(r1) +/* 0000F740 0001C4D0 FD 00 40 50 */ fneg f8, f8 +/* 0000F744 0001C4D4 C1 61 01 18 */ lfs f11, 0x118(r1) +/* 0000F748 0001C4D8 FC E0 38 50 */ fneg f7, f7 +/* 0000F74C 0001C4DC C1 81 01 1C */ lfs f12, 0x11c(r1) +/* 0000F750 0001C4E0 FD 20 48 50 */ fneg f9, f9 +/* 0000F754 0001C4E4 C1 A1 01 28 */ lfs f13, 0x128(r1) +/* 0000F758 0001C4E8 FD 60 58 50 */ fneg f11, f11 +/* 0000F75C 0001C4EC C0 01 01 2C */ lfs f0, 0x12c(r1) +/* 0000F760 0001C4F0 FD 80 60 50 */ fneg f12, f12 +/* 0000F764 0001C4F4 FD A0 68 50 */ fneg f13, f13 +/* 0000F768 0001C4F8 D1 41 00 F8 */ stfs f10, 0xf8(r1) +/* 0000F76C 0001C4FC FC 00 00 50 */ fneg f0, f0 +/* 0000F770 0001C500 D1 01 00 FC */ stfs f8, 0xfc(r1) +/* 0000F774 0001C504 D0 E1 01 08 */ stfs f7, 0x108(r1) +/* 0000F778 0001C508 D1 21 01 0C */ stfs f9, 0x10c(r1) +/* 0000F77C 0001C50C D1 61 01 18 */ stfs f11, 0x118(r1) +/* 0000F780 0001C510 D1 81 01 1C */ stfs f12, 0x11c(r1) +/* 0000F784 0001C514 D1 A1 01 28 */ stfs f13, 0x128(r1) +/* 0000F788 0001C518 D0 01 01 2C */ stfs f0, 0x12c(r1) +/* 0000F78C 0001C51C 80 BF 00 8C */ lwz r5, 0x8c(r31) +/* 0000F790 0001C520 7F 47 D3 78 */ mr r7, r26 +/* 0000F794 0001C524 80 DF 00 84 */ lwz r6, 0x84(r31) +/* 0000F798 0001C528 7F E3 FB 78 */ mr r3, r31 +/* 0000F79C 0001C52C 81 1F 00 80 */ lwz r8, 0x80(r31) +/* 0000F7A0 0001C530 80 9F 00 88 */ lwz r4, 0x88(r31) +/* 0000F7A4 0001C534 48 00 3E B9 */ bl .L_0001365C +/* 0000F7A8 0001C538 80 7F 00 88 */ lwz r3, 0x88(r31) +/* 0000F7AC 0001C53C 7F 04 C3 78 */ mr r4, r24 +/* 0000F7B0 0001C540 48 00 00 01 */ bl GetVal__8tCubic3DP8bVector3 +/* 0000F7B4 0001C544 80 7F 00 8C */ lwz r3, 0x8c(r31) +/* 0000F7B8 0001C548 7E C4 B3 78 */ mr r4, r22 +/* 0000F7BC 0001C54C 48 00 00 01 */ bl GetVal__8tCubic3DP8bVector3 +/* 0000F7C0 0001C550 80 7F 00 88 */ lwz r3, 0x88(r31) +/* 0000F7C4 0001C554 7E E4 BB 78 */ mr r4, r23 +/* 0000F7C8 0001C558 48 00 00 01 */ bl GetValDesired__8tCubic3DP8bVector3 +/* 0000F7CC 0001C55C 80 7F 00 8C */ lwz r3, 0x8c(r31) +/* 0000F7D0 0001C560 7E A4 AB 78 */ mr r4, r21 +/* 0000F7D4 0001C564 48 00 00 01 */ bl GetValDesired__8tCubic3DP8bVector3 +/* 0000F7D8 0001C568 C1 61 01 38 */ lfs f11, 0x138(r1) +/* 0000F7DC 0001C56C 38 81 01 88 */ addi r4, r1, 0x188 +/* 0000F7E0 0001C570 C1 41 01 3C */ lfs f10, 0x13c(r1) +/* 0000F7E4 0001C574 38 61 01 78 */ addi r3, r1, 0x178 +/* 0000F7E8 0001C578 C1 21 01 40 */ lfs f9, 0x140(r1) +/* 0000F7EC 0001C57C C1 A1 01 48 */ lfs f13, 0x148(r1) +/* 0000F7F0 0001C580 C1 81 01 4C */ lfs f12, 0x14c(r1) +/* 0000F7F4 0001C584 C0 01 01 50 */ lfs f0, 0x150(r1) +/* 0000F7F8 0001C588 ED AD 58 28 */ fsubs f13, f13, f11 +/* 0000F7FC 0001C58C ED 8C 50 28 */ fsubs f12, f12, f10 +/* 0000F800 0001C590 D1 A1 01 88 */ stfs f13, 0x188(r1) +/* 0000F804 0001C594 EC 00 48 28 */ fsubs f0, f0, f9 +/* 0000F808 0001C598 D1 81 01 8C */ stfs f12, 0x18c(r1) +/* 0000F80C 0001C59C D0 01 01 90 */ stfs f0, 0x190(r1) +/* 0000F810 0001C5A0 48 00 00 01 */ bl __8bVector3RC8bVector3 +/* 0000F814 0001C5A4 C1 61 01 38 */ lfs f11, 0x138(r1) +.L_0000F818: +/* 0000F818 0001C5A8 38 81 01 98 */ addi r4, r1, 0x198 +/* 0000F81C 0001C5AC C1 41 01 3C */ lfs f10, 0x13c(r1) +/* 0000F820 0001C5B0 38 61 01 88 */ addi r3, r1, 0x188 +/* 0000F824 0001C5B4 C1 21 01 40 */ lfs f9, 0x140(r1) +/* 0000F828 0001C5B8 C1 A1 01 58 */ lfs f13, 0x158(r1) +/* 0000F82C 0001C5BC C1 81 01 5C */ lfs f12, 0x15c(r1) +/* 0000F830 0001C5C0 C0 01 01 60 */ lfs f0, 0x160(r1) +/* 0000F834 0001C5C4 ED AD 58 28 */ fsubs f13, f13, f11 +/* 0000F838 0001C5C8 ED 8C 50 28 */ fsubs f12, f12, f10 +/* 0000F83C 0001C5CC D1 A1 01 98 */ stfs f13, 0x198(r1) +/* 0000F840 0001C5D0 EC 00 48 28 */ fsubs f0, f0, f9 +/* 0000F844 0001C5D4 D1 81 01 9C */ stfs f12, 0x19c(r1) +/* 0000F848 0001C5D8 D0 01 01 A0 */ stfs f0, 0x1a0(r1) +/* 0000F84C 0001C5DC 48 00 00 01 */ bl __8bVector3RC8bVector3 +/* 0000F850 0001C5E0 C1 21 01 50 */ lfs f9, 0x150(r1) +/* 0000F854 0001C5E4 38 81 01 A8 */ addi r4, r1, 0x1a8 +/* 0000F858 0001C5E8 C1 A1 01 68 */ lfs f13, 0x168(r1) +/* 0000F85C 0001C5EC 38 61 01 98 */ addi r3, r1, 0x198 +.L_0000F860: +/* 0000F860 0001C5F0 C1 81 01 6C */ lfs f12, 0x16c(r1) +/* 0000F864 0001C5F4 C0 01 01 70 */ lfs f0, 0x170(r1) +/* 0000F868 0001C5F8 C1 61 01 48 */ lfs f11, 0x148(r1) +/* 0000F86C 0001C5FC C1 41 01 4C */ lfs f10, 0x14c(r1) +/* 0000F870 0001C600 EC 00 48 28 */ fsubs f0, f0, f9 +/* 0000F874 0001C604 ED AD 58 28 */ fsubs f13, f13, f11 +.L_0000F878: +/* 0000F878 0001C608 D0 01 01 B0 */ stfs f0, 0x1b0(r1) +/* 0000F87C 0001C60C ED 8C 50 28 */ fsubs f12, f12, f10 +/* 0000F880 0001C610 D1 A1 01 A8 */ stfs f13, 0x1a8(r1) +/* 0000F884 0001C614 D1 81 01 AC */ stfs f12, 0x1ac(r1) +/* 0000F888 0001C618 48 00 00 01 */ bl __8bVector3RC8bVector3 +/* 0000F88C 0001C61C 7E 63 9B 78 */ mr r3, r19 +/* 0000F890 0001C620 7C 64 1B 78 */ mr r4, r3 +/* 0000F894 0001C624 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +/* 0000F898 0001C628 7E 43 93 78 */ mr r3, r18 +/* 0000F89C 0001C62C 7C 64 1B 78 */ mr r4, r3 +/* 0000F8A0 0001C630 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +/* 0000F8A4 0001C634 3D 20 00 00 */ lis r9, .rodata+0x974@ha +/* 0000F8A8 0001C638 C1 29 09 74 */ lfs f9, .rodata+0x974@l(r9) +.L_0000F8AC: +/* 0000F8AC 0001C63C D1 3F 00 CC */ stfs f9, 0xcc(r31) +/* 0000F8B0 0001C640 D1 3F 00 C8 */ stfs f9, 0xc8(r31) +/* 0000F8B4 0001C644 D1 3F 00 C4 */ stfs f9, 0xc4(r31) +/* 0000F8B8 0001C648 D1 3F 00 D8 */ stfs f9, 0xd8(r31) +/* 0000F8BC 0001C64C D1 3F 00 D4 */ stfs f9, 0xd4(r31) +/* 0000F8C0 0001C650 D1 3F 00 E0 */ stfs f9, 0xe0(r31) +/* 0000F8C4 0001C654 D1 3F 00 DC */ stfs f9, 0xdc(r31) +/* 0000F8C8 0001C658 41 92 F9 8C */ beq cr4, .L_0000F254 +/* 0000F8CC 0001C65C C0 01 01 7C */ lfs f0, 0x17c(r1) +/* 0000F8D0 0001C660 3D 20 00 00 */ lis r9, .rodata+0x984@ha +/* 0000F8D4 0001C664 C1 A1 01 78 */ lfs f13, 0x178(r1) +/* 0000F8D8 0001C668 3D 60 00 00 */ lis r11, .rodata+0x988@ha +.L_0000F8DC: +/* 0000F8DC 0001C66C EC 00 00 32 */ fmuls f0, f0, f0 +/* 0000F8E0 0001C670 C1 81 01 80 */ lfs f12, 0x180(r1) +.L_0000F8E4: +/* 0000F8E4 0001C674 C1 69 09 84 */ lfs f11, .rodata+0x984@l(r9) +/* 0000F8E8 0001C678 ED AD 03 7A */ fmadds f13, f13, f13, f0 +/* 0000F8EC 0001C67C ED 4C 6B 3A */ fmadds f10, f12, f12, f13 +/* 0000F8F0 0001C680 3D 20 00 00 */ lis r9, .rodata+0x980@ha +/* 0000F8F4 0001C684 FC 0A 58 00 */ fcmpu cr0, f10, f11 +/* 0000F8F8 0001C688 C1 0B 09 88 */ lfs f8, .rodata+0x988@l(r11) +/* 0000F8FC 0001C68C C1 69 09 80 */ lfs f11, .rodata+0x980@l(r9) +/* 0000F900 0001C690 4C 62 03 82 */ cror un, eq, lt +/* 0000F904 0001C694 41 83 F9 34 */ bso .L_0000F238 +/* 0000F908 0001C698 FD A0 50 34 */ frsqrte f13, f10 +.L_0000F90C: +/* 0000F90C 0001C69C EC 0D 03 72 */ fmuls f0, f13, f13 +/* 0000F910 0001C6A0 ED 8D 02 32 */ fmuls f12, f13, f8 +.L_0000F914: +/* 0000F914 0001C6A4 EC 0A 58 3C */ fnmsubs f0, f10, f0, f11 +/* 0000F918 0001C6A8 ED A0 6B 3A */ fmadds f13, f0, f12, f13 +/* 0000F91C 0001C6AC EC 0D 03 72 */ fmuls f0, f13, f13 +/* 0000F920 0001C6B0 ED 8D 02 32 */ fmuls f12, f13, f8 +/* 0000F924 0001C6B4 EC 0A 58 3C */ fnmsubs f0, f10, f0, f11 +/* 0000F928 0001C6B8 ED A0 6B 3A */ fmadds f13, f0, f12, f13 +/* 0000F92C 0001C6BC ED AD 02 B2 */ fmuls f13, f13, f10 +/* 0000F930 0001C6C0 48 00 F9 38 */ b .text+0xF938 +/* 0000F934 0001C6C4 FD A0 48 90 */ fmr f13, f9 +/* 0000F938 0001C6C8 3D 20 00 00 */ lis r9, .rodata+0x98C@ha +/* 0000F93C 0001C6CC C0 09 09 8C */ lfs f0, .rodata+0x98C@l(r9) +/* 0000F940 0001C6D0 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 0000F944 0001C6D4 41 81 F9 8C */ bgt .L_0000F2D0 +/* 0000F948 0001C6D8 C1 61 01 9C */ lfs f11, 0x19c(r1) +/* 0000F94C 0001C6DC 3D 20 00 00 */ lis r9, .rodata+0x990@ha +/* 0000F950 0001C6E0 C1 81 01 8C */ lfs f12, 0x18c(r1) +.L_0000F954: +/* 0000F954 0001C6E4 C1 A1 01 88 */ lfs f13, 0x188(r1) +/* 0000F958 0001C6E8 C1 21 01 98 */ lfs f9, 0x198(r1) +/* 0000F95C 0001C6EC ED 8C 02 F2 */ fmuls f12, f12, f11 +/* 0000F960 0001C6F0 C0 01 01 90 */ lfs f0, 0x190(r1) +.L_0000F964: +/* 0000F964 0001C6F4 C1 41 01 A0 */ lfs f10, 0x1a0(r1) +/* 0000F968 0001C6F8 ED AD 62 7A */ fmadds f13, f13, f9, f12 +/* 0000F96C 0001C6FC C1 69 09 90 */ lfs f11, .rodata+0x990@l(r9) +/* 0000F970 0001C700 EC 00 6A BA */ fmadds f0, f0, f10, f13 +/* 0000F974 0001C704 FC 00 58 00 */ fcmpu cr0, f0, f11 +/* 0000F978 0001C708 41 80 F9 8C */ blt .L_0000F304 +/* 0000F97C 0001C70C 3D 20 00 00 */ lis r9, .rodata+0x980@ha +.L_0000F980: +/* 0000F980 0001C710 C0 09 09 80 */ lfs f0, .rodata+0x980@l(r9) +/* 0000F984 0001C714 D0 1F 00 C0 */ stfs f0, 0xc0(r31) +/* 0000F988 0001C718 48 00 FA 68 */ b .text+0xFA68 +/* 0000F98C 0001C71C 81 3F 00 94 */ lwz r9, 0x94(r31) +/* 0000F990 0001C720 38 00 00 00 */ li r0, 0x0 +/* 0000F994 0001C724 C0 09 00 08 */ lfs f0, 0x8(r9) +/* 0000F998 0001C728 C1 A9 00 0C */ lfs f13, 0xc(r9) +/* 0000F99C 0001C72C C1 89 00 34 */ lfs f12, 0x34(r9) +.L_0000F9A0: +/* 0000F9A0 0001C730 C1 69 00 38 */ lfs f11, 0x38(r9) +.L_0000F9A4: +/* 0000F9A4 0001C734 C1 49 00 60 */ lfs f10, 0x60(r9) +/* 0000F9A8 0001C738 C1 29 00 64 */ lfs f9, 0x64(r9) +.L_0000F9AC: +/* 0000F9AC 0001C73C D0 09 00 00 */ stfs f0, 0x0(r9) +/* 0000F9B0 0001C740 D1 29 00 5C */ stfs f9, 0x5c(r9) +/* 0000F9B4 0001C744 D1 A9 00 04 */ stfs f13, 0x4(r9) +/* 0000F9B8 0001C748 D1 89 00 2C */ stfs f12, 0x2c(r9) +/* 0000F9BC 0001C74C D1 69 00 30 */ stfs f11, 0x30(r9) +.L_0000F9C0: +/* 0000F9C0 0001C750 D1 49 00 58 */ stfs f10, 0x58(r9) +/* 0000F9C4 0001C754 B0 09 00 80 */ sth r0, 0x80(r9) +/* 0000F9C8 0001C758 B0 09 00 28 */ sth r0, 0x28(r9) +/* 0000F9CC 0001C75C B0 09 00 54 */ sth r0, 0x54(r9) +/* 0000F9D0 0001C760 81 7F 00 84 */ lwz r11, 0x84(r31) +/* 0000F9D4 0001C764 C0 0B 00 08 */ lfs f0, 0x8(r11) +.L_0000F9D8: +/* 0000F9D8 0001C768 C1 AB 00 0C */ lfs f13, 0xc(r11) +/* 0000F9DC 0001C76C D0 0B 00 00 */ stfs f0, 0x0(r11) +.L_0000F9E0: +/* 0000F9E0 0001C770 D1 AB 00 04 */ stfs f13, 0x4(r11) +/* 0000F9E4 0001C774 B0 0B 00 28 */ sth r0, 0x28(r11) +/* 0000F9E8 0001C778 81 3F 00 88 */ lwz r9, 0x88(r31) +/* 0000F9EC 0001C77C C0 09 00 08 */ lfs f0, 0x8(r9) +.L_0000F9F0: +/* 0000F9F0 0001C780 C1 A9 00 0C */ lfs f13, 0xc(r9) +/* 0000F9F4 0001C784 C1 89 00 34 */ lfs f12, 0x34(r9) +.L_0000F9F8: +/* 0000F9F8 0001C788 C1 69 00 38 */ lfs f11, 0x38(r9) +/* 0000F9FC 0001C78C C1 49 00 60 */ lfs f10, 0x60(r9) +/* 0000FA00 0001C790 D0 09 00 00 */ stfs f0, 0x0(r9) +.L_0000FA04: +/* 0000FA04 0001C794 D1 A9 00 04 */ stfs f13, 0x4(r9) +.L_0000FA08: +/* 0000FA08 0001C798 D1 89 00 2C */ stfs f12, 0x2c(r9) +/* 0000FA0C 0001C79C D1 69 00 30 */ stfs f11, 0x30(r9) +/* 0000FA10 0001C7A0 B0 09 00 28 */ sth r0, 0x28(r9) +/* 0000FA14 0001C7A4 B0 09 00 54 */ sth r0, 0x54(r9) +/* 0000FA18 0001C7A8 D1 49 00 58 */ stfs f10, 0x58(r9) +/* 0000FA1C 0001C7AC C0 09 00 64 */ lfs f0, 0x64(r9) +/* 0000FA20 0001C7B0 B0 09 00 80 */ sth r0, 0x80(r9) +.L_0000FA24: +/* 0000FA24 0001C7B4 D0 09 00 5C */ stfs f0, 0x5c(r9) +.L_0000FA28: +/* 0000FA28 0001C7B8 81 7F 00 8C */ lwz r11, 0x8c(r31) +/* 0000FA2C 0001C7BC C0 0B 00 08 */ lfs f0, 0x8(r11) +/* 0000FA30 0001C7C0 C1 AB 00 0C */ lfs f13, 0xc(r11) +/* 0000FA34 0001C7C4 C1 8B 00 34 */ lfs f12, 0x34(r11) +/* 0000FA38 0001C7C8 C1 6B 00 38 */ lfs f11, 0x38(r11) +/* 0000FA3C 0001C7CC C1 4B 00 60 */ lfs f10, 0x60(r11) +/* 0000FA40 0001C7D0 C1 2B 00 64 */ lfs f9, 0x64(r11) +/* 0000FA44 0001C7D4 B0 0B 00 80 */ sth r0, 0x80(r11) +.L_0000FA48: +/* 0000FA48 0001C7D8 D0 0B 00 00 */ stfs f0, 0x0(r11) +/* 0000FA4C 0001C7DC D1 AB 00 04 */ stfs f13, 0x4(r11) +/* 0000FA50 0001C7E0 D1 8B 00 2C */ stfs f12, 0x2c(r11) +/* 0000FA54 0001C7E4 D1 6B 00 30 */ stfs f11, 0x30(r11) +/* 0000FA58 0001C7E8 D1 4B 00 58 */ stfs f10, 0x58(r11) +/* 0000FA5C 0001C7EC D1 2B 00 5C */ stfs f9, 0x5c(r11) +/* 0000FA60 0001C7F0 B0 0B 00 28 */ sth r0, 0x28(r11) +/* 0000FA64 0001C7F4 B0 0B 00 54 */ sth r0, 0x54(r11) +/* 0000FA68 0001C7F8 7F E3 FB 78 */ mr r3, r31 +/* 0000FA6C 0001C7FC 80 01 02 14 */ lwz r0, 0x214(r1) +.L_0000FA70: +/* 0000FA70 0001C800 81 81 01 CC */ lwz r12, 0x1cc(r1) +/* 0000FA74 0001C804 7C 08 03 A6 */ mtlr r0 +/* 0000FA78 0001C808 BA 41 01 D0 */ lmw r18, 0x1d0(r1) +/* 0000FA7C 0001C80C E3 E1 02 08 */ psq_l f31, 0x208(r1), 0, qr0 +/* 0000FA80 0001C810 7D 80 81 20 */ mtcrf 8, r12 +/* 0000FA84 0001C814 38 21 02 10 */ addi r1, r1, 0x210 +/* 0000FA88 0001C818 4E 80 00 20 */ blr +.endfn __16CubicCameraMoveriP12CameraAnchoribN34 + +# .text:0xFA8C | size: 0x428 +# CubicCameraMover::IsUnderVehicle +.fn IsUnderVehicle__16CubicCameraMover, global +/* 0000FA8C 0001C81C 94 21 FE A0 */ stwu r1, -0x160(r1) +/* 0000FA90 0001C820 7C 08 02 A6 */ mflr r0 +/* 0000FA94 0001C824 F3 A1 01 48 */ psq_st f29, 0x148(r1), 0, qr0 +/* 0000FA98 0001C828 F3 C1 01 50 */ psq_st f30, 0x150(r1), 0, qr0 +/* 0000FA9C 0001C82C F3 E1 01 58 */ psq_st f31, 0x158(r1), 0, qr0 +/* 0000FAA0 0001C830 BF 21 01 2C */ stmw r25, 0x12c(r1) +/* 0000FAA4 0001C834 90 01 01 64 */ stw r0, 0x164(r1) +/* 0000FAA8 0001C838 3D 60 00 00 */ lis r11, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@ha +/* 0000FAAC 0001C83C 3D 20 00 00 */ lis r9, .rodata+0x994@ha +/* 0000FAB0 0001C840 C3 A9 09 94 */ lfs f29, .rodata+0x994@l(r9) +/* 0000FAB4 0001C844 3B 2B 00 00 */ addi r25, r11, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@l +/* 0000FAB8 0001C848 83 AB 00 00 */ lwz r29, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@l(r11) +/* 0000FABC 0001C84C 7C 7C 1B 78 */ mr r28, r3 +/* 0000FAC0 0001C850 80 19 00 08 */ lwz r0, 0x8(r25) +/* 0000FAC4 0001C854 81 39 00 00 */ lwz r9, 0x0(r25) +/* 0000FAC8 0001C858 54 00 10 3A */ slwi r0, r0, 2 +/* 0000FACC 0001C85C 7D 29 02 14 */ add r9, r9, r0 +/* 0000FAD0 0001C860 7C 1D 48 00 */ cmpw r29, r9 +/* 0000FAD4 0001C864 41 82 FE 90 */ beq .L_0000F964 +/* 0000FAD8 0001C868 83 FD 00 00 */ lwz r31, 0x0(r29) +/* 0000FADC 0001C86C 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 0000FAE0 0001C870 A8 69 01 18 */ lha r3, 0x118(r9) +/* 0000FAE4 0001C874 80 09 01 1C */ lwz r0, 0x11c(r9) +/* 0000FAE8 0001C878 7C 7F 1A 14 */ add r3, r31, r3 +/* 0000FAEC 0001C87C 7C 08 03 A6 */ mtlr r0 +/* 0000FAF0 0001C880 4E 80 00 21 */ blrl +/* 0000FAF4 0001C884 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000FAF8 0001C888 41 82 FE 88 */ beq .L_0000F980 +/* 0000FAFC 0001C88C 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 0000FB00 0001C890 A8 69 01 00 */ lha r3, 0x100(r9) +/* 0000FB04 0001C894 80 09 01 04 */ lwz r0, 0x104(r9) +/* 0000FB08 0001C898 7C 7F 1A 14 */ add r3, r31, r3 +/* 0000FB0C 0001C89C 7C 08 03 A6 */ mtlr r0 +/* 0000FB10 0001C8A0 4E 80 00 21 */ blrl +/* 0000FB14 0001C8A4 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000FB18 0001C8A8 40 82 FE 88 */ bne .L_0000F9A0 +/* 0000FB1C 0001C8AC 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 0000FB20 0001C8B0 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000FB24 0001C8B4 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0000FB28 0001C8B8 7C 7F 1A 14 */ add r3, r31, r3 +/* 0000FB2C 0001C8BC 7C 08 03 A6 */ mtlr r0 +/* 0000FB30 0001C8C0 4E 80 00 21 */ blrl +/* 0000FB34 0001C8C4 7C 7F 1B 79 */ mr. r31, r3 +/* 0000FB38 0001C8C8 41 82 FE 88 */ beq .L_0000F9C0 +/* 0000FB3C 0001C8CC 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 0000FB40 0001C8D0 A8 69 00 A8 */ lha r3, 0xa8(r9) +/* 0000FB44 0001C8D4 80 09 00 AC */ lwz r0, 0xac(r9) +/* 0000FB48 0001C8D8 7C 7F 1A 14 */ add r3, r31, r3 +/* 0000FB4C 0001C8DC 7C 08 03 A6 */ mtlr r0 +/* 0000FB50 0001C8E0 4E 80 00 21 */ blrl +.L_0000FB54: +/* 0000FB54 0001C8E4 7C 7E 1B 79 */ mr. r30, r3 +/* 0000FB58 0001C8E8 41 82 FE 88 */ beq .L_0000F9E0 +/* 0000FB5C 0001C8EC 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 0000FB60 0001C8F0 80 09 00 EC */ lwz r0, 0xec(r9) +.L_0000FB64: +/* 0000FB64 0001C8F4 A8 69 00 E8 */ lha r3, 0xe8(r9) +/* 0000FB68 0001C8F8 7C 08 03 A6 */ mtlr r0 +/* 0000FB6C 0001C8FC 7C 7F 1A 14 */ add r3, r31, r3 +/* 0000FB70 0001C900 4E 80 00 21 */ blrl +/* 0000FB74 0001C904 81 3C 00 80 */ lwz r9, 0x80(r28) +/* 0000FB78 0001C908 80 09 00 8C */ lwz r0, 0x8c(r9) +.L_0000FB7C: +/* 0000FB7C 0001C90C 7C 03 00 00 */ cmpw r3, r0 +/* 0000FB80 0001C910 41 82 FE 88 */ beq .L_0000FA08 +/* 0000FB84 0001C914 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000FB88 0001C918 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0000FB8C 0001C91C 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0000FB90 0001C920 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000FB94 0001C924 7C 08 03 A6 */ mtlr r0 +/* 0000FB98 0001C928 4E 80 00 21 */ blrl +.L_0000FB9C: +/* 0000FB9C 0001C92C 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000FBA0 0001C930 41 82 FE 88 */ beq .L_0000FA28 +/* 0000FBA4 0001C934 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000FBA8 0001C938 3B E1 00 38 */ addi r31, r1, 0x38 +/* 0000FBAC 0001C93C 3F 40 00 00 */ lis r26, .rodata+0x994@ha +/* 0000FBB0 0001C940 80 09 00 4C */ lwz r0, 0x4c(r9) +/* 0000FBB4 0001C944 A8 69 00 48 */ lha r3, 0x48(r9) +/* 0000FBB8 0001C948 7C 08 03 A6 */ mtlr r0 +/* 0000FBBC 0001C94C 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000FBC0 0001C950 4E 80 00 21 */ blrl +/* 0000FBC4 0001C954 C1 83 00 00 */ lfs f12, 0x0(r3) +/* 0000FBC8 0001C958 38 81 00 28 */ addi r4, r1, 0x28 +/* 0000FBCC 0001C95C D1 81 00 08 */ stfs f12, 0x8(r1) +/* 0000FBD0 0001C960 C0 03 00 04 */ lfs f0, 0x4(r3) +/* 0000FBD4 0001C964 D0 01 00 0C */ stfs f0, 0xc(r1) +/* 0000FBD8 0001C968 C1 A3 00 08 */ lfs f13, 0x8(r3) +/* 0000FBDC 0001C96C D1 81 00 18 */ stfs f12, 0x18(r1) +.L_0000FBE0: +/* 0000FBE0 0001C970 D0 01 00 1C */ stfs f0, 0x1c(r1) +/* 0000FBE4 0001C974 D1 A1 00 20 */ stfs f13, 0x20(r1) +/* 0000FBE8 0001C978 D1 A1 00 10 */ stfs f13, 0x10(r1) +/* 0000FBEC 0001C97C D3 A1 00 14 */ stfs f29, 0x14(r1) +/* 0000FBF0 0001C980 D3 A1 00 24 */ stfs f29, 0x24(r1) +/* 0000FBF4 0001C984 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000FBF8 0001C988 80 09 00 9C */ lwz r0, 0x9c(r9) +/* 0000FBFC 0001C98C A8 69 00 98 */ lha r3, 0x98(r9) +/* 0000FC00 0001C990 7C 08 03 A6 */ mtlr r0 +/* 0000FC04 0001C994 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000FC08 0001C998 4E 80 00 21 */ blrl +/* 0000FC0C 0001C99C 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000FC10 0001C9A0 7F E4 FB 78 */ mr r4, r31 +/* 0000FC14 0001C9A4 A8 69 00 88 */ lha r3, 0x88(r9) +/* 0000FC18 0001C9A8 80 09 00 8C */ lwz r0, 0x8c(r9) +/* 0000FC1C 0001C9AC 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000FC20 0001C9B0 7C 08 03 A6 */ mtlr r0 +/* 0000FC24 0001C9B4 4E 80 00 21 */ blrl +/* 0000FC28 0001C9B8 38 C1 00 B8 */ addi r6, r1, 0xb8 +/* 0000FC2C 0001C9BC 38 A1 00 78 */ addi r5, r1, 0x78 +.L_0000FC30: +/* 0000FC30 0001C9C0 7C C3 33 78 */ mr r3, r6 +/* 0000FC34 0001C9C4 7C 1F 28 00 */ cmpw r31, r5 +/* 0000FC38 0001C9C8 40 82 FC AC */ bne .L_0000F8E4 +/* 0000FC3C 0001C9CC 7F E4 FB 78 */ mr r4, r31 +/* 0000FC40 0001C9D0 39 60 00 00 */ li r11, 0x0 +/* 0000FC44 0001C9D4 3F 60 00 00 */ lis r27, .rodata+0x998@ha +/* 0000FC48 0001C9D8 7C 6A 1B 78 */ mr r10, r3 +/* 0000FC4C 0001C9DC 55 60 10 3A */ slwi r0, r11, 2 +/* 0000FC50 0001C9E0 7C 04 04 2E */ lfsx f0, r4, r0 +/* 0000FC54 0001C9E4 39 6B 00 01 */ addi r11, r11, 0x1 +/* 0000FC58 0001C9E8 2C 0B 00 0F */ cmpwi r11, 0xf +/* 0000FC5C 0001C9EC 7C 0A 05 2E */ stfsx f0, r10, r0 +/* 0000FC60 0001C9F0 40 81 FC 4C */ ble .L_0000F8AC +/* 0000FC64 0001C9F4 39 60 00 00 */ li r11, 0x0 +/* 0000FC68 0001C9F8 55 60 20 36 */ slwi r0, r11, 4 +/* 0000FC6C 0001C9FC 55 67 10 3A */ slwi r7, r11, 2 +/* 0000FC70 0001CA00 7D 05 02 14 */ add r8, r5, r0 +/* 0000FC74 0001CA04 39 40 00 00 */ li r10, 0x0 +/* 0000FC78 0001CA08 38 0B 00 01 */ addi r0, r11, 0x1 +/* 0000FC7C 0001CA0C 55 49 20 36 */ slwi r9, r10, 4 +/* 0000FC80 0001CA10 55 4B 10 3A */ slwi r11, r10, 2 +/* 0000FC84 0001CA14 7D 26 4A 14 */ add r9, r6, r9 +/* 0000FC88 0001CA18 39 4A 00 01 */ addi r10, r10, 0x1 +/* 0000FC8C 0001CA1C 7C 09 3C 2E */ lfsx f0, r9, r7 +.L_0000FC90: +/* 0000FC90 0001CA20 2C 0A 00 03 */ cmpwi r10, 0x3 +/* 0000FC94 0001CA24 7C 08 5D 2E */ stfsx f0, r8, r11 +/* 0000FC98 0001CA28 40 81 FC 7C */ ble .L_0000F914 +/* 0000FC9C 0001CA2C 7C 0B 03 78 */ mr r11, r0 +/* 0000FCA0 0001CA30 2C 0B 00 03 */ cmpwi r11, 0x3 +/* 0000FCA4 0001CA34 40 81 FC 68 */ ble .L_0000F90C +/* 0000FCA8 0001CA38 48 00 FC F4 */ b .text+0xFCF4 +.L_0000FCAC: +/* 0000FCAC 0001CA3C 39 20 00 00 */ li r9, 0x0 +/* 0000FCB0 0001CA40 3F 60 00 00 */ lis r27, .rodata+0x998@ha +/* 0000FCB4 0001CA44 55 20 20 36 */ slwi r0, r9, 4 +/* 0000FCB8 0001CA48 55 27 10 3A */ slwi r7, r9, 2 +/* 0000FCBC 0001CA4C 7D 05 02 14 */ add r8, r5, r0 +/* 0000FCC0 0001CA50 39 40 00 00 */ li r10, 0x0 +/* 0000FCC4 0001CA54 38 09 00 01 */ addi r0, r9, 0x1 +.L_0000FCC8: +/* 0000FCC8 0001CA58 55 49 20 36 */ slwi r9, r10, 4 +/* 0000FCCC 0001CA5C 55 4B 10 3A */ slwi r11, r10, 2 +/* 0000FCD0 0001CA60 7D 3F 4A 14 */ add r9, r31, r9 +/* 0000FCD4 0001CA64 39 4A 00 01 */ addi r10, r10, 0x1 +.L_0000FCD8: +/* 0000FCD8 0001CA68 7C 09 3C 2E */ lfsx f0, r9, r7 +/* 0000FCDC 0001CA6C 2C 0A 00 03 */ cmpwi r10, 0x3 +.L_0000FCE0: +/* 0000FCE0 0001CA70 7C 08 5D 2E */ stfsx f0, r8, r11 +/* 0000FCE4 0001CA74 40 81 FC C8 */ ble .L_0000F9AC +/* 0000FCE8 0001CA78 7C 09 03 78 */ mr r9, r0 +/* 0000FCEC 0001CA7C 2C 09 00 03 */ cmpwi r9, 0x3 +/* 0000FCF0 0001CA80 40 81 FC B4 */ ble .L_0000F9A4 +/* 0000FCF4 0001CA84 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000FCF8 0001CA88 7C 64 1B 78 */ mr r4, r3 +/* 0000FCFC 0001CA8C A8 69 00 70 */ lha r3, 0x70(r9) +/* 0000FD00 0001CA90 80 09 00 74 */ lwz r0, 0x74(r9) +.L_0000FD04: +/* 0000FD04 0001CA94 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000FD08 0001CA98 7C 08 03 A6 */ mtlr r0 +/* 0000FD0C 0001CA9C 4E 80 00 21 */ blrl +.L_0000FD10: +/* 0000FD10 0001CAA0 C1 61 00 B8 */ lfs f11, 0xb8(r1) +/* 0000FD14 0001CAA4 C1 41 00 C0 */ lfs f10, 0xc0(r1) +/* 0000FD18 0001CAA8 C1 21 00 BC */ lfs f9, 0xbc(r1) +.L_0000FD1C: +/* 0000FD1C 0001CAAC FD 60 58 50 */ fneg f11, f11 +/* 0000FD20 0001CAB0 D1 41 00 C8 */ stfs f10, 0xc8(r1) +/* 0000FD24 0001CAB4 D1 61 00 CC */ stfs f11, 0xcc(r1) +/* 0000FD28 0001CAB8 D1 21 00 D0 */ stfs f9, 0xd0(r1) +.L_0000FD2C: +/* 0000FD2C 0001CABC C1 1B 09 98 */ lfs f8, .rodata+0x998@l(r27) +/* 0000FD30 0001CAC0 81 3C 00 1C */ lwz r9, 0x1c(r28) +/* 0000FD34 0001CAC4 C1 A9 00 54 */ lfs f13, 0x54(r9) +/* 0000FD38 0001CAC8 C1 89 00 50 */ lfs f12, 0x50(r9) +/* 0000FD3C 0001CACC ED AD 02 F2 */ fmuls f13, f13, f11 +/* 0000FD40 0001CAD0 C0 09 00 58 */ lfs f0, 0x58(r9) +/* 0000FD44 0001CAD4 ED 8C 6A BA */ fmadds f12, f12, f10, f13 +/* 0000FD48 0001CAD8 EC 00 62 7A */ fmadds f0, f0, f9, f12 +.L_0000FD4C: +/* 0000FD4C 0001CADC FC 00 02 10 */ fabs f0, f0 +/* 0000FD50 0001CAE0 FC 00 40 00 */ fcmpu cr0, f0, f8 +/* 0000FD54 0001CAE4 4C 62 0B 82 */ cror un, eq, gt +/* 0000FD58 0001CAE8 41 83 FE 88 */ bso .L_0000FBE0 +/* 0000FD5C 0001CAEC 81 3C 00 80 */ lwz r9, 0x80(r28) +/* 0000FD60 0001CAF0 38 81 01 08 */ addi r4, r1, 0x108 +.L_0000FD64: +/* 0000FD64 0001CAF4 38 61 00 F8 */ addi r3, r1, 0xf8 +/* 0000FD68 0001CAF8 C1 49 00 00 */ lfs f10, 0x0(r9) +/* 0000FD6C 0001CAFC C1 29 00 04 */ lfs f9, 0x4(r9) +/* 0000FD70 0001CB00 C1 69 00 08 */ lfs f11, 0x8(r9) +/* 0000FD74 0001CB04 ED 4A 02 32 */ fmuls f10, f10, f8 +/* 0000FD78 0001CB08 ED 29 02 32 */ fmuls f9, f9, f8 +/* 0000FD7C 0001CB0C D1 41 00 F8 */ stfs f10, 0xf8(r1) +/* 0000FD80 0001CB10 ED 6B 02 32 */ fmuls f11, f11, f8 +.L_0000FD84: +/* 0000FD84 0001CB14 D1 21 00 FC */ stfs f9, 0xfc(r1) +/* 0000FD88 0001CB18 D1 61 01 00 */ stfs f11, 0x100(r1) +/* 0000FD8C 0001CB1C D1 41 00 E8 */ stfs f10, 0xe8(r1) +/* 0000FD90 0001CB20 D1 21 00 EC */ stfs f9, 0xec(r1) +/* 0000FD94 0001CB24 D1 61 00 F0 */ stfs f11, 0xf0(r1) +/* 0000FD98 0001CB28 C0 09 00 20 */ lfs f0, 0x20(r9) +/* 0000FD9C 0001CB2C C1 A9 00 18 */ lfs f13, 0x18(r9) +/* 0000FDA0 0001CB30 C1 89 00 1C */ lfs f12, 0x1c(r9) +.L_0000FDA4: +/* 0000FDA4 0001CB34 EC 00 58 2A */ fadds f0, f0, f11 +/* 0000FDA8 0001CB38 ED AD 50 2A */ fadds f13, f13, f10 +/* 0000FDAC 0001CB3C D0 01 01 10 */ stfs f0, 0x110(r1) +/* 0000FDB0 0001CB40 ED 8C 48 2A */ fadds f12, f12, f9 +/* 0000FDB4 0001CB44 D1 A1 01 08 */ stfs f13, 0x108(r1) +/* 0000FDB8 0001CB48 D1 81 01 0C */ stfs f12, 0x10c(r1) +/* 0000FDBC 0001CB4C 48 00 00 01 */ bl __8bVector3RC8bVector3 +/* 0000FDC0 0001CB50 C0 01 00 FC */ lfs f0, 0xfc(r1) +/* 0000FDC4 0001CB54 38 61 00 18 */ addi r3, r1, 0x18 +.L_0000FDC8: +/* 0000FDC8 0001CB58 C1 81 01 00 */ lfs f12, 0x100(r1) +/* 0000FDCC 0001CB5C 38 81 00 08 */ addi r4, r1, 0x8 +/* 0000FDD0 0001CB60 C1 A1 00 F8 */ lfs f13, 0xf8(r1) +/* 0000FDD4 0001CB64 FC 00 00 50 */ fneg f0, f0 +.L_0000FDD8: +/* 0000FDD8 0001CB68 C3 DA 09 94 */ lfs f30, .rodata+0x994@l(r26) +/* 0000FDDC 0001CB6C 38 A1 01 08 */ addi r5, r1, 0x108 +/* 0000FDE0 0001CB70 D0 01 00 18 */ stfs f0, 0x18(r1) +/* 0000FDE4 0001CB74 D1 81 00 1C */ stfs f12, 0x1c(r1) +/* 0000FDE8 0001CB78 D1 A1 00 20 */ stfs f13, 0x20(r1) +/* 0000FDEC 0001CB7C D3 C1 00 24 */ stfs f30, 0x24(r1) +/* 0000FDF0 0001CB80 48 00 00 01 */ bl VU0_v4subxyz__FRCQ25UMath7Vector4T0RQ25UMath7Vector4 +/* 0000FDF4 0001CB84 38 61 01 08 */ addi r3, r1, 0x108 +/* 0000FDF8 0001CB88 48 00 00 01 */ bl VU0_v4lengthsquarexyz__FRCQ25UMath7Vector4 +/* 0000FDFC 0001CB8C 48 00 00 01 */ bl VU0_sqrt__Ff +/* 0000FE00 0001CB90 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0000FE04 0001CB94 FF E0 08 90 */ fmr f31, f1 +.L_0000FE08: +/* 0000FE08 0001CB98 A8 69 00 30 */ lha r3, 0x30(r9) +/* 0000FE0C 0001CB9C 80 09 00 34 */ lwz r0, 0x34(r9) +/* 0000FE10 0001CBA0 7C 7E 1A 14 */ add r3, r30, r3 +/* 0000FE14 0001CBA4 7C 08 03 A6 */ mtlr r0 +/* 0000FE18 0001CBA8 4E 80 00 21 */ blrl +/* 0000FE1C 0001CBAC FC 1F 08 00 */ fcmpu cr0, f31, f1 +/* 0000FE20 0001CBB0 4C 62 0B 82 */ cror un, eq, gt +/* 0000FE24 0001CBB4 41 83 FE 88 */ bso .L_0000FCAC +/* 0000FE28 0001CBB8 38 61 01 08 */ addi r3, r1, 0x108 +/* 0000FE2C 0001CBBC 38 81 00 78 */ addi r4, r1, 0x78 +/* 0000FE30 0001CBC0 38 A1 01 18 */ addi r5, r1, 0x118 +/* 0000FE34 0001CBC4 48 00 00 01 */ bl VU0_MATRIX3x4_vect3mult__FRCQ25UMath7Vector3RCQ25UMath7Matrix4RQ25UMath7Vector3 +/* 0000FE38 0001CBC8 C1 A1 01 18 */ lfs f13, 0x118(r1) +/* 0000FE3C 0001CBCC FC 0D F0 00 */ fcmpu cr0, f13, f30 +.L_0000FE40: +/* 0000FE40 0001CBD0 4C 62 0B 82 */ cror un, eq, gt +/* 0000FE44 0001CBD4 41 83 FE 4C */ bso .L_0000FC90 +.L_0000FE48: +/* 0000FE48 0001CBD8 FD A0 68 50 */ fneg f13, f13 +/* 0000FE4C 0001CBDC C0 01 00 28 */ lfs f0, 0x28(r1) +/* 0000FE50 0001CBE0 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 0000FE54 0001CBE4 4C 62 0B 82 */ cror un, eq, gt +/* 0000FE58 0001CBE8 41 83 FE 88 */ bso .L_0000FCE0 +/* 0000FE5C 0001CBEC C1 A1 01 20 */ lfs f13, 0x120(r1) +/* 0000FE60 0001CBF0 FC 0D F0 00 */ fcmpu cr0, f13, f30 +/* 0000FE64 0001CBF4 4C 62 0B 82 */ cror un, eq, gt +/* 0000FE68 0001CBF8 41 83 FE 70 */ bso .L_0000FCD8 +/* 0000FE6C 0001CBFC FD A0 68 50 */ fneg f13, f13 +.L_0000FE70: +/* 0000FE70 0001CC00 C0 01 00 30 */ lfs f0, 0x30(r1) +/* 0000FE74 0001CC04 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 0000FE78 0001CC08 4C 62 0B 82 */ cror un, eq, gt +/* 0000FE7C 0001CC0C 41 83 FE 88 */ bso .L_0000FD04 +/* 0000FE80 0001CC10 38 60 00 01 */ li r3, 0x1 +/* 0000FE84 0001CC14 48 00 FE 94 */ b .text+0xFE94 +/* 0000FE88 0001CC18 3B BD 00 04 */ addi r29, r29, 0x4 +/* 0000FE8C 0001CC1C 48 00 FA C0 */ b .text+0xFAC0 +/* 0000FE90 0001CC20 38 60 00 00 */ li r3, 0x0 +/* 0000FE94 0001CC24 80 01 01 64 */ lwz r0, 0x164(r1) +/* 0000FE98 0001CC28 7C 08 03 A6 */ mtlr r0 +/* 0000FE9C 0001CC2C BB 21 01 2C */ lmw r25, 0x12c(r1) +/* 0000FEA0 0001CC30 E3 A1 01 48 */ psq_l f29, 0x148(r1), 0, qr0 +/* 0000FEA4 0001CC34 E3 C1 01 50 */ psq_l f30, 0x150(r1), 0, qr0 +/* 0000FEA8 0001CC38 E3 E1 01 58 */ psq_l f31, 0x158(r1), 0, qr0 +/* 0000FEAC 0001CC3C 38 21 01 60 */ addi r1, r1, 0x160 +/* 0000FEB0 0001CC40 4E 80 00 20 */ blr +.endfn IsUnderVehicle__16CubicCameraMover + +# .text:0xFEB4 | size: 0x5EC +.fn SetDesired__16CubicCameraMoverP8bMatrix4P3POVP12CubicPovDatab, global +/* 0000FEB4 0001CC44 94 21 FE F0 */ stwu r1, -0x110(r1) +/* 0000FEB8 0001CC48 7C 08 02 A6 */ mflr r0 +/* 0000FEBC 0001CC4C 7D 80 00 26 */ mfcr r12 +/* 0000FEC0 0001CC50 F3 E1 01 08 */ psq_st f31, 0x108(r1), 0, qr0 +/* 0000FEC4 0001CC54 BF 41 00 F0 */ stmw r26, 0xf0(r1) +/* 0000FEC8 0001CC58 90 01 01 14 */ stw r0, 0x114(r1) +/* 0000FECC 0001CC5C 91 81 00 EC */ stw r12, 0xec(r1) +/* 0000FED0 0001CC60 7C 7F 1B 78 */ mr r31, r3 +/* 0000FED4 0001CC64 7C BB 2B 78 */ mr r27, r5 +/* 0000FED8 0001CC68 A8 7B 00 00 */ lha r3, 0x0(r27) +/* 0000FEDC 0001CC6C 7C 9C 23 78 */ mr r28, r4 +/* 0000FEE0 0001CC70 7C DD 33 78 */ mr r29, r6 +/* 0000FEE4 0001CC74 7C FE 3B 78 */ mr r30, r7 +/* 0000FEE8 0001CC78 48 00 0F 8D */ bl .L_00010E74 +/* 0000FEEC 0001CC7C 81 3F 00 80 */ lwz r9, 0x80(r31) +/* 0000FEF0 0001CC80 7C 7A 1B 78 */ mr r26, r3 +/* 0000FEF4 0001CC84 80 09 00 C4 */ lwz r0, 0xc4(r9) +.L_0000FEF8: +/* 0000FEF8 0001CC88 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000FEFC 0001CC8C 41 82 FF 0C */ beq .L_0000FE08 +/* 0000FF00 0001CC90 3D 20 00 00 */ lis r9, WorldTimer@ha +/* 0000FF04 0001CC94 80 09 00 00 */ lwz r0, WorldTimer@l(r9) +/* 0000FF08 0001CC98 90 1F 00 B4 */ stw r0, 0xb4(r31) +/* 0000FF0C 0001CC9C 7F E3 FB 78 */ mr r3, r31 +/* 0000FF10 0001CCA0 48 00 FA 8D */ bl .text+0xFA8C +/* 0000FF14 0001CCA4 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0000FF18 0001CCA8 41 82 FF 28 */ beq .L_0000FE40 +.L_0000FF1C: +/* 0000FF1C 0001CCAC 3D 20 00 00 */ lis r9, WorldTimer@ha +/* 0000FF20 0001CCB0 80 09 00 00 */ lwz r0, WorldTimer@l(r9) +/* 0000FF24 0001CCB4 90 1F 00 B8 */ stw r0, 0xb8(r31) +/* 0000FF28 0001CCB8 7F C5 F3 78 */ mr r5, r30 +.L_0000FF2C: +/* 0000FF2C 0001CCBC 7F E3 FB 78 */ mr r3, r31 +/* 0000FF30 0001CCC0 3B C1 00 08 */ addi r30, r1, 0x8 +/* 0000FF34 0001CCC4 7F 64 DB 78 */ mr r4, r27 +/* 0000FF38 0001CCC8 48 00 3F F9 */ bl .L_00013F30 +/* 0000FF3C 0001CCCC 7F E3 FB 78 */ mr r3, r31 +/* 0000FF40 0001CCD0 7F 84 E3 78 */ mr r4, r28 +/* 0000FF44 0001CCD4 48 00 46 95 */ bl .L_000145D8 +/* 0000FF48 0001CCD8 7F 84 E3 78 */ mr r4, r28 +/* 0000FF4C 0001CCDC 7F C3 F3 78 */ mr r3, r30 +/* 0000FF50 0001CCE0 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 +/* 0000FF54 0001CCE4 3D 20 00 00 */ lis r9, .rodata+0x99C@ha +/* 0000FF58 0001CCE8 80 1F 00 A0 */ lwz r0, 0xa0(r31) +/* 0000FF5C 0001CCEC C1 89 09 9C */ lfs f12, .rodata+0x99C@l(r9) +/* 0000FF60 0001CCF0 38 61 00 48 */ addi r3, r1, 0x48 +/* 0000FF64 0001CCF4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000FF68 0001CCF8 D1 81 00 48 */ stfs f12, 0x48(r1) +/* 0000FF6C 0001CCFC D1 81 00 4C */ stfs f12, 0x4c(r1) +/* 0000FF70 0001CD00 D1 81 00 50 */ stfs f12, 0x50(r1) +/* 0000FF74 0001CD04 D1 81 00 54 */ stfs f12, 0x54(r1) +/* 0000FF78 0001CD08 41 82 FF A4 */ beq .L_0000FF1C +/* 0000FF7C 0001CD0C 81 3F 00 E4 */ lwz r9, 0xe4(r31) +/* 0000FF80 0001CD10 7F C4 F3 78 */ mr r4, r30 +.L_0000FF84: +/* 0000FF84 0001CD14 7C 65 1B 78 */ mr r5, r3 +/* 0000FF88 0001CD18 C0 09 00 1C */ lfs f0, 0x1c(r9) +/* 0000FF8C 0001CD1C D0 01 00 48 */ stfs f0, 0x48(r1) +/* 0000FF90 0001CD20 C1 A9 00 20 */ lfs f13, 0x20(r9) +/* 0000FF94 0001CD24 D1 A1 00 4C */ stfs f13, 0x4c(r1) +.L_0000FF98: +/* 0000FF98 0001CD28 C0 09 00 24 */ lfs f0, 0x24(r9) +/* 0000FF9C 0001CD2C D0 01 00 50 */ stfs f0, 0x50(r1) +/* 0000FFA0 0001CD30 48 00 00 01 */ bl bMulMatrix__FP8bVector4PC8bMatrix4PC8bVector4 +/* 0000FFA4 0001CD34 3D 20 00 00 */ lis r9, theRaceParameters+0x50@ha +/* 0000FFA8 0001CD38 39 40 00 00 */ li r10, 0x0 +/* 0000FFAC 0001CD3C 80 09 00 50 */ lwz r0, theRaceParameters+0x50@l(r9) +.L_0000FFB0: +/* 0000FFB0 0001CD40 39 60 00 00 */ li r11, 0x0 +/* 0000FFB4 0001CD44 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000FFB8 0001CD48 40 82 FF CC */ bne .L_0000FF84 +/* 0000FFBC 0001CD4C 3D 20 00 00 */ lis r9, g_tweakIsBurnout@ha +/* 0000FFC0 0001CD50 80 09 00 00 */ lwz r0, g_tweakIsBurnout@l(r9) +/* 0000FFC4 0001CD54 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0000FFC8 0001CD58 41 82 FF D0 */ beq .L_0000FF98 +/* 0000FFCC 0001CD5C 39 60 00 01 */ li r11, 0x1 +/* 0000FFD0 0001CD60 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0000FFD4 0001CD64 41 82 FF DC */ beq .L_0000FFB0 +/* 0000FFD8 0001CD68 39 40 00 01 */ li r10, 0x1 +/* 0000FFDC 0001CD6C 2C 0A 00 00 */ cmpwi r10, 0x0 +/* 0000FFE0 0001CD70 41 82 00 08 */ beq .L_0000FFE8 +/* 0000FFE4 0001CD74 3D 60 00 00 */ lis r11, _SmokeShowEyeOffset@ha +.L_0000FFE8: +/* 0000FFE8 0001CD78 3D 20 00 00 */ lis r9, .rodata+0x99C@ha +/* 0000FFEC 0001CD7C C0 09 09 9C */ lfs f0, .rodata+0x99C@l(r9) +/* 0000FFF0 0001CD80 3D 40 00 00 */ lis r10, _SmokeShowLookAngle@ha +/* 0000FFF4 0001CD84 C1 AB 00 00 */ lfs f13, _SmokeShowEyeOffset@l(r11) +/* 0000FFF8 0001CD88 D0 01 00 60 */ stfs f0, 0x60(r1) +/* 0000FFFC 0001CD8C D1 A1 00 58 */ stfs f13, 0x58(r1) +/* 00010000 0001CD90 A3 CA 00 00 */ lhz r30, _SmokeShowLookAngle@l(r10) +/* 00010004 0001CD94 48 01 00 64 */ b .text+0x10064 +/* 00010008 0001CD98 7F E3 FB 78 */ mr r3, r31 +/* 0001000C 0001CD9C 48 00 3F 95 */ bl .L_00013FA0 +/* 00010010 0001CDA0 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00010014 0001CDA4 40 82 00 44 */ bne .L_00010058 +/* 00010018 0001CDA8 C1 9B 00 04 */ lfs f12, 0x4(r27) +/* 0001001C 0001CDAC 7F E3 FB 78 */ mr r3, r31 +/* 00010020 0001CDB0 C1 BB 00 0C */ lfs f13, 0xc(r27) +/* 00010024 0001CDB4 38 81 00 58 */ addi r4, r1, 0x58 +/* 00010028 0001CDB8 C0 1B 00 08 */ lfs f0, 0x8(r27) +/* 0001002C 0001CDBC D1 81 00 58 */ stfs f12, 0x58(r1) +/* 00010030 0001CDC0 D1 A1 00 5C */ stfs f13, 0x5c(r1) +/* 00010034 0001CDC4 D0 01 00 60 */ stfs f0, 0x60(r1) +/* 00010038 0001CDC8 48 00 45 39 */ bl ClampSecondDerivative__Q23ICE7Cubic1Df +/* 0001003C 0001CDCC A3 DB 00 02 */ lhz r30, 0x2(r27) +/* 00010040 0001CDD0 48 01 00 74 */ b .text+0x10074 +/* 00010044 0001CDD4 3D 60 00 00 */ lis r11, _HydraulicsEyeOffset@ha +/* 00010048 0001CDD8 3D 20 00 00 */ lis r9, .rodata+0x99C@ha +/* 0001004C 0001CDDC C0 09 09 9C */ lfs f0, .rodata+0x99C@l(r9) +/* 00010050 0001CDE0 3D 40 00 00 */ lis r10, _HydraulicsLookAngle@ha +/* 00010054 0001CDE4 C1 AB 00 00 */ lfs f13, _HydraulicsEyeOffset@l(r11) +.L_00010058: +/* 00010058 0001CDE8 D0 01 00 60 */ stfs f0, 0x60(r1) +/* 0001005C 0001CDEC D1 A1 00 58 */ stfs f13, 0x58(r1) +/* 00010060 0001CDF0 A3 CA 00 00 */ lhz r30, _HydraulicsLookAngle@l(r10) +/* 00010064 0001CDF4 D1 A1 00 68 */ stfs f13, 0x68(r1) +/* 00010068 0001CDF8 D0 01 00 6C */ stfs f0, 0x6c(r1) +/* 0001006C 0001CDFC D0 01 00 70 */ stfs f0, 0x70(r1) +/* 00010070 0001CE00 D0 01 00 5C */ stfs f0, 0x5c(r1) +/* 00010074 0001CE04 7F C3 F3 78 */ mr r3, r30 +/* 00010078 0001CE08 2E 1A 00 00 */ cmpwi cr4, r26, 0x0 +/* 0001007C 0001CE0C 48 00 00 01 */ bl bSin__FUs +/* 00010080 0001CE10 FF E0 08 90 */ fmr f31, f1 +/* 00010084 0001CE14 7F C3 F3 78 */ mr r3, r30 +/* 00010088 0001CE18 48 00 00 01 */ bl bCos__FUs +/* 0001008C 0001CE1C EF FF 08 24 */ fdivs f31, f31, f1 +/* 00010090 0001CE20 40 92 00 B8 */ bne cr4, .L_00010148 +/* 00010094 0001CE24 3D 20 00 00 */ lis r9, .rodata+0x9A0@ha +/* 00010098 0001CE28 C1 A1 00 58 */ lfs f13, 0x58(r1) +/* 0001009C 0001CE2C C1 89 09 A0 */ lfs f12, .rodata+0x9A0@l(r9) +/* 000100A0 0001CE30 C0 01 00 60 */ lfs f0, 0x60(r1) +/* 000100A4 0001CE34 ED AD 60 2A */ fadds f13, f13, f12 +/* 000100A8 0001CE38 EC 00 F8 28 */ fsubs f0, f0, f31 +/* 000100AC 0001CE3C D1 A1 00 68 */ stfs f13, 0x68(r1) +/* 000100B0 0001CE40 D0 01 00 70 */ stfs f0, 0x70(r1) +/* 000100B4 0001CE44 48 01 00 D4 */ b .text+0x100D4 +/* 000100B8 0001CE48 C0 01 00 58 */ lfs f0, 0x58(r1) +/* 000100BC 0001CE4C 3D 20 00 00 */ lis r9, .rodata+0x99C@ha +/* 000100C0 0001CE50 C1 A1 00 60 */ lfs f13, 0x60(r1) +/* 000100C4 0001CE54 C1 89 09 9C */ lfs f12, .rodata+0x99C@l(r9) +/* 000100C8 0001CE58 EC 1F 68 3A */ fmadds f0, f31, f0, f13 +/* 000100CC 0001CE5C D0 01 00 70 */ stfs f0, 0x70(r1) +/* 000100D0 0001CE60 D1 81 00 68 */ stfs f12, 0x68(r1) +/* 000100D4 0001CE64 C1 7D 00 40 */ lfs f11, 0x40(r29) +/* 000100D8 0001CE68 3D 20 00 00 */ lis r9, .rodata+0x99C@ha +/* 000100DC 0001CE6C C1 81 00 48 */ lfs f12, 0x48(r1) +/* 000100E0 0001CE70 3B C1 00 78 */ addi r30, r1, 0x78 +/* 000100E4 0001CE74 C1 BD 00 44 */ lfs f13, 0x44(r29) +/* 000100E8 0001CE78 38 9D 00 50 */ addi r4, r29, 0x50 +/* 000100EC 0001CE7C ED 6B 03 32 */ fmuls f11, f11, f12 +/* 000100F0 0001CE80 C0 1D 00 48 */ lfs f0, 0x48(r29) +/* 000100F4 0001CE84 C1 41 00 4C */ lfs f10, 0x4c(r1) +.L_000100F8: +/* 000100F8 0001CE88 38 BD 00 60 */ addi r5, r29, 0x60 +/* 000100FC 0001CE8C C1 81 00 50 */ lfs f12, 0x50(r1) +/* 00010100 0001CE90 7F C3 F3 78 */ mr r3, r30 +/* 00010104 0001CE94 C3 E9 09 9C */ lfs f31, .rodata+0x99C@l(r9) +/* 00010108 0001CE98 ED AD 02 B2 */ fmuls f13, f13, f10 +/* 0001010C 0001CE9C EC 00 03 32 */ fmuls f0, f0, f12 +/* 00010110 0001CEA0 D1 61 00 78 */ stfs f11, 0x78(r1) +/* 00010114 0001CEA4 D1 A1 00 7C */ stfs f13, 0x7c(r1) +/* 00010118 0001CEA8 D0 01 00 80 */ stfs f0, 0x80(r1) +/* 0001011C 0001CEAC D3 E1 00 6C */ stfs f31, 0x6c(r1) +/* 00010120 0001CEB0 48 00 EE 71 */ bl .text+0xEE70 +/* 00010124 0001CEB4 7F E3 FB 78 */ mr r3, r31 +/* 00010128 0001CEB8 48 00 3F 95 */ bl .L_000140BC +/* 0001012C 0001CEBC 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00010130 0001CEC0 41 82 01 60 */ beq .L_00010290 +.L_00010134: +/* 00010134 0001CEC4 3D 20 00 00 */ lis r9, .rodata+0x9A4@ha +/* 00010138 0001CEC8 C0 01 00 58 */ lfs f0, 0x58(r1) +.L_0001013C: +/* 0001013C 0001CECC C1 A9 09 A4 */ lfs f13, .rodata+0x9A4@l(r9) +/* 00010140 0001CED0 C1 81 00 5C */ lfs f12, 0x5c(r1) +/* 00010144 0001CED4 C1 61 00 60 */ lfs f11, 0x60(r1) +.L_00010148: +/* 00010148 0001CED8 EC 00 03 72 */ fmuls f0, f0, f13 +/* 0001014C 0001CEDC ED 8C 03 72 */ fmuls f12, f12, f13 +/* 00010150 0001CEE0 D0 01 00 58 */ stfs f0, 0x58(r1) +/* 00010154 0001CEE4 ED 6B 03 72 */ fmuls f11, f11, f13 +/* 00010158 0001CEE8 D1 81 00 5C */ stfs f12, 0x5c(r1) +/* 0001015C 0001CEEC D1 61 00 60 */ stfs f11, 0x60(r1) +/* 00010160 0001CEF0 C1 41 00 78 */ lfs f10, 0x78(r1) +.L_00010164: +/* 00010164 0001CEF4 7F C4 F3 78 */ mr r4, r30 +/* 00010168 0001CEF8 C1 A1 00 7C */ lfs f13, 0x7c(r1) +/* 0001016C 0001CEFC 3B C1 00 88 */ addi r30, r1, 0x88 +/* 00010170 0001CF00 C0 01 00 80 */ lfs f0, 0x80(r1) +.L_00010174: +/* 00010174 0001CF04 3B 81 00 98 */ addi r28, r1, 0x98 +/* 00010178 0001CF08 C1 81 00 58 */ lfs f12, 0x58(r1) +/* 0001017C 0001CF0C C1 61 00 5C */ lfs f11, 0x5c(r1) +/* 00010180 0001CF10 C1 21 00 60 */ lfs f9, 0x60(r1) +.L_00010184: +/* 00010184 0001CF14 ED 4A 60 2A */ fadds f10, f10, f12 +/* 00010188 0001CF18 80 7F 00 88 */ lwz r3, 0x88(r31) +/* 0001018C 0001CF1C ED AD 58 2A */ fadds f13, f13, f11 +/* 00010190 0001CF20 EC 00 48 2A */ fadds f0, f0, f9 +/* 00010194 0001CF24 D1 41 00 78 */ stfs f10, 0x78(r1) +.L_00010198: +/* 00010198 0001CF28 D1 A1 00 7C */ stfs f13, 0x7c(r1) +/* 0001019C 0001CF2C D0 01 00 80 */ stfs f0, 0x80(r1) +/* 000101A0 0001CF30 48 00 00 01 */ bl SetValDesired__8tCubic3DP8bVector3 +.L_000101A4: +/* 000101A4 0001CF34 C1 9D 00 70 */ lfs f12, 0x70(r29) +/* 000101A8 0001CF38 38 9D 00 80 */ addi r4, r29, 0x80 +/* 000101AC 0001CF3C C1 61 00 48 */ lfs f11, 0x48(r1) +.L_000101B0: +/* 000101B0 0001CF40 38 BD 00 90 */ addi r5, r29, 0x90 +/* 000101B4 0001CF44 C1 BD 00 74 */ lfs f13, 0x74(r29) +/* 000101B8 0001CF48 7F C3 F3 78 */ mr r3, r30 +/* 000101BC 0001CF4C ED 8C 02 F2 */ fmuls f12, f12, f11 +/* 000101C0 0001CF50 C0 1D 00 78 */ lfs f0, 0x78(r29) +/* 000101C4 0001CF54 C1 41 00 4C */ lfs f10, 0x4c(r1) +/* 000101C8 0001CF58 C1 61 00 50 */ lfs f11, 0x50(r1) +/* 000101CC 0001CF5C ED AD 02 B2 */ fmuls f13, f13, f10 +/* 000101D0 0001CF60 D1 81 00 88 */ stfs f12, 0x88(r1) +/* 000101D4 0001CF64 EC 00 02 F2 */ fmuls f0, f0, f11 +/* 000101D8 0001CF68 D1 A1 00 8C */ stfs f13, 0x8c(r1) +/* 000101DC 0001CF6C D0 01 00 90 */ stfs f0, 0x90(r1) +.L_000101E0: +/* 000101E0 0001CF70 48 00 EE 71 */ bl .text+0xEE70 +/* 000101E4 0001CF74 C1 81 00 88 */ lfs f12, 0x88(r1) +/* 000101E8 0001CF78 7F C4 F3 78 */ mr r4, r30 +/* 000101EC 0001CF7C C0 01 00 8C */ lfs f0, 0x8c(r1) +/* 000101F0 0001CF80 C1 A1 00 90 */ lfs f13, 0x90(r1) +/* 000101F4 0001CF84 C1 61 00 68 */ lfs f11, 0x68(r1) +/* 000101F8 0001CF88 C1 41 00 6C */ lfs f10, 0x6c(r1) +/* 000101FC 0001CF8C C1 21 00 70 */ lfs f9, 0x70(r1) +/* 00010200 0001CF90 ED 8C 58 2A */ fadds f12, f12, f11 +/* 00010204 0001CF94 80 7F 00 8C */ lwz r3, 0x8c(r31) +.L_00010208: +/* 00010208 0001CF98 EC 00 50 2A */ fadds f0, f0, f10 +/* 0001020C 0001CF9C ED AD 48 2A */ fadds f13, f13, f9 +/* 00010210 0001CFA0 D0 01 00 8C */ stfs f0, 0x8c(r1) +/* 00010214 0001CFA4 D1 81 00 88 */ stfs f12, 0x88(r1) +/* 00010218 0001CFA8 D1 A1 00 90 */ stfs f13, 0x90(r1) +/* 0001021C 0001CFAC 48 00 00 01 */ bl SetValDesired__8tCubic3DP8bVector3 +/* 00010220 0001CFB0 3D 20 00 00 */ lis r9, .rodata+0x9A0@ha +.L_00010224: +/* 00010224 0001CFB4 A8 1B 00 18 */ lha r0, 0x18(r27) +/* 00010228 0001CFB8 C0 09 09 A0 */ lfs f0, .rodata+0x9A0@l(r9) +/* 0001022C 0001CFBC 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00010230 0001CFC0 D3 E1 00 98 */ stfs f31, 0x98(r1) +/* 00010234 0001CFC4 D3 E1 00 9C */ stfs f31, 0x9c(r1) +/* 00010238 0001CFC8 D0 01 00 A0 */ stfs f0, 0xa0(r1) +/* 0001023C 0001CFCC 41 82 02 9C */ beq .L_000104D8 +/* 00010240 0001CFD0 C1 61 00 C0 */ lfs f11, 0xc0(r1) +/* 00010244 0001CFD4 38 81 00 C8 */ addi r4, r1, 0xc8 +/* 00010248 0001CFD8 C1 81 00 B8 */ lfs f12, 0xb8(r1) +/* 0001024C 0001CFDC 38 61 00 B8 */ addi r3, r1, 0xb8 +/* 00010250 0001CFE0 C1 A1 00 BC */ lfs f13, 0xbc(r1) +/* 00010254 0001CFE4 EC 0B 00 2A */ fadds f0, f11, f0 +/* 00010258 0001CFE8 D1 81 00 C8 */ stfs f12, 0xc8(r1) +/* 0001025C 0001CFEC D1 A1 00 CC */ stfs f13, 0xcc(r1) +/* 00010260 0001CFF0 D0 01 00 D0 */ stfs f0, 0xd0(r1) +/* 00010264 0001CFF4 D1 81 00 A8 */ stfs f12, 0xa8(r1) +/* 00010268 0001CFF8 D1 A1 00 AC */ stfs f13, 0xac(r1) +/* 0001026C 0001CFFC D1 61 00 B0 */ stfs f11, 0xb0(r1) +/* 00010270 0001D000 48 00 00 01 */ bl __8bVector3RC8bVector3 +/* 00010274 0001D004 C1 81 00 B8 */ lfs f12, 0xb8(r1) +/* 00010278 0001D008 38 BD 00 30 */ addi r5, r29, 0x30 +/* 0001027C 0001D00C C1 A1 00 BC */ lfs f13, 0xbc(r1) +/* 00010280 0001D010 7F 83 E3 78 */ mr r3, r28 +/* 00010284 0001D014 C0 01 00 C0 */ lfs f0, 0xc0(r1) +/* 00010288 0001D018 38 9D 00 20 */ addi r4, r29, 0x20 +/* 0001028C 0001D01C D1 81 00 98 */ stfs f12, 0x98(r1) +.L_00010290: +/* 00010290 0001D020 D1 A1 00 9C */ stfs f13, 0x9c(r1) +/* 00010294 0001D024 D0 01 00 A0 */ stfs f0, 0xa0(r1) +/* 00010298 0001D028 48 00 EE 71 */ bl .text+0xEE70 +/* 0001029C 0001D02C 80 9F 00 80 */ lwz r4, 0x80(r31) +/* 000102A0 0001D030 3D 20 00 00 */ lis r9, .rodata+0x9A8@ha +/* 000102A4 0001D034 C1 A9 09 A8 */ lfs f13, .rodata+0x9A8@l(r9) +/* 000102A8 0001D038 C0 04 00 10 */ lfs f0, 0x10(r4) +/* 000102AC 0001D03C FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 000102B0 0001D040 4C 62 03 82 */ cror un, eq, lt +/* 000102B4 0001D044 41 83 02 F8 */ bso .L_000105AC +/* 000102B8 0001D048 7C 85 23 78 */ mr r5, r4 +/* 000102BC 0001D04C 7F E3 FB 78 */ mr r3, r31 +/* 000102C0 0001D050 38 84 00 18 */ addi r4, r4, 0x18 +/* 000102C4 0001D054 48 00 35 CD */ bl .L_00013890 +/* 000102C8 0001D058 C1 23 00 08 */ lfs f9, 0x8(r3) +/* 000102CC 0001D05C C1 63 00 00 */ lfs f11, 0x0(r3) +/* 000102D0 0001D060 C1 43 00 04 */ lfs f10, 0x4(r3) +/* 000102D4 0001D064 C1 81 00 98 */ lfs f12, 0x98(r1) +/* 000102D8 0001D068 C1 A1 00 9C */ lfs f13, 0x9c(r1) +/* 000102DC 0001D06C C0 01 00 A0 */ lfs f0, 0xa0(r1) +/* 000102E0 0001D070 ED 8C 58 2A */ fadds f12, f12, f11 +/* 000102E4 0001D074 ED AD 50 2A */ fadds f13, f13, f10 +/* 000102E8 0001D078 D1 81 00 98 */ stfs f12, 0x98(r1) +/* 000102EC 0001D07C EC 00 48 2A */ fadds f0, f0, f9 +/* 000102F0 0001D080 D1 A1 00 9C */ stfs f13, 0x9c(r1) +/* 000102F4 0001D084 D0 01 00 A0 */ stfs f0, 0xa0(r1) +/* 000102F8 0001D088 7F 84 E3 78 */ mr r4, r28 +/* 000102FC 0001D08C 7F 83 E3 78 */ mr r3, r28 +/* 00010300 0001D090 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +/* 00010304 0001D094 80 7F 00 94 */ lwz r3, 0x94(r31) +/* 00010308 0001D098 7F 84 E3 78 */ mr r4, r28 +/* 0001030C 0001D09C 48 00 00 01 */ bl SetValDesired__8tCubic3DP8bVector3 +/* 00010310 0001D0A0 A0 9B 00 10 */ lhz r4, 0x10(r27) +/* 00010314 0001D0A4 41 92 03 48 */ beq cr4, .L_0001065C +/* 00010318 0001D0A8 81 3F 00 80 */ lwz r9, 0x80(r31) +/* 0001031C 0001D0AC 80 09 00 B4 */ lwz r0, 0xb4(r9) +/* 00010320 0001D0B0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00010324 0001D0B4 41 82 03 48 */ beq .L_0001066C +/* 00010328 0001D0B8 C0 09 00 10 */ lfs f0, 0x10(r9) +/* 0001032C 0001D0BC FC 00 F8 00 */ fcmpu cr0, f0, f31 +/* 00010330 0001D0C0 4C 62 03 82 */ cror un, eq, lt +/* 00010334 0001D0C4 41 83 03 48 */ bso .L_0001067C +/* 00010338 0001D0C8 3D 20 00 00 */ lis r9, _NOSFovWidening@ha +/* 0001033C 0001D0CC A0 09 00 00 */ lhz r0, _NOSFovWidening@l(r9) +/* 00010340 0001D0D0 7C 04 02 14 */ add r0, r4, r0 +/* 00010344 0001D0D4 54 04 04 3E */ clrlwi r4, r0, 16 +/* 00010348 0001D0D8 3C 00 43 30 */ lis r0, 0x4330 +/* 0001034C 0001D0DC 90 81 00 E4 */ stw r4, 0xe4(r1) +/* 00010350 0001D0E0 3D 20 00 00 */ lis r9, .rodata+0x9B0@ha +/* 00010354 0001D0E4 C9 A9 09 B0 */ lfd f13, .rodata+0x9B0@l(r9) +/* 00010358 0001D0E8 90 01 00 E0 */ stw r0, 0xe0(r1) +/* 0001035C 0001D0EC 81 3F 00 84 */ lwz r9, 0x84(r31) +/* 00010360 0001D0F0 C8 01 00 E0 */ lfd f0, 0xe0(r1) +/* 00010364 0001D0F4 C1 89 00 00 */ lfs f12, 0x0(r9) +/* 00010368 0001D0F8 FC 00 68 28 */ fsub f0, f0, f13 +/* 0001036C 0001D0FC FC 00 00 18 */ frsp f0, f0 +/* 00010370 0001D100 FC 00 60 00 */ fcmpu cr0, f0, f12 +/* 00010374 0001D104 D0 09 00 08 */ stfs f0, 0x8(r9) +/* 00010378 0001D108 41 82 03 84 */ beq .L_000106FC +/* 0001037C 0001D10C 38 00 00 02 */ li r0, 0x2 +/* 00010380 0001D110 B0 09 00 28 */ sth r0, 0x28(r9) +/* 00010384 0001D114 80 1F 00 A8 */ lwz r0, 0xa8(r31) +/* 00010388 0001D118 2C 00 00 00 */ cmpwi r0, 0x0 +.L_0001038C: +/* 0001038C 0001D11C 40 82 03 94 */ bne .L_00010720 +/* 00010390 0001D120 40 92 04 70 */ bne cr4, .L_00010800 +/* 00010394 0001D124 81 3F 00 94 */ lwz r9, 0x94(r31) +/* 00010398 0001D128 38 00 00 00 */ li r0, 0x0 +/* 0001039C 0001D12C C0 09 00 08 */ lfs f0, 0x8(r9) +/* 000103A0 0001D130 C1 A9 00 0C */ lfs f13, 0xc(r9) +/* 000103A4 0001D134 C1 89 00 34 */ lfs f12, 0x34(r9) +/* 000103A8 0001D138 C1 69 00 38 */ lfs f11, 0x38(r9) +/* 000103AC 0001D13C C1 49 00 60 */ lfs f10, 0x60(r9) +/* 000103B0 0001D140 C1 29 00 64 */ lfs f9, 0x64(r9) +/* 000103B4 0001D144 D0 09 00 00 */ stfs f0, 0x0(r9) +/* 000103B8 0001D148 D1 29 00 5C */ stfs f9, 0x5c(r9) +/* 000103BC 0001D14C D1 A9 00 04 */ stfs f13, 0x4(r9) +/* 000103C0 0001D150 D1 89 00 2C */ stfs f12, 0x2c(r9) +/* 000103C4 0001D154 D1 69 00 30 */ stfs f11, 0x30(r9) +/* 000103C8 0001D158 D1 49 00 58 */ stfs f10, 0x58(r9) +/* 000103CC 0001D15C B0 09 00 80 */ sth r0, 0x80(r9) +/* 000103D0 0001D160 B0 09 00 28 */ sth r0, 0x28(r9) +/* 000103D4 0001D164 B0 09 00 54 */ sth r0, 0x54(r9) +/* 000103D8 0001D168 81 7F 00 84 */ lwz r11, 0x84(r31) +/* 000103DC 0001D16C C0 0B 00 08 */ lfs f0, 0x8(r11) +/* 000103E0 0001D170 C1 AB 00 0C */ lfs f13, 0xc(r11) +/* 000103E4 0001D174 D0 0B 00 00 */ stfs f0, 0x0(r11) +/* 000103E8 0001D178 D1 AB 00 04 */ stfs f13, 0x4(r11) +/* 000103EC 0001D17C B0 0B 00 28 */ sth r0, 0x28(r11) +/* 000103F0 0001D180 81 3F 00 88 */ lwz r9, 0x88(r31) +/* 000103F4 0001D184 C0 09 00 08 */ lfs f0, 0x8(r9) +/* 000103F8 0001D188 C1 A9 00 0C */ lfs f13, 0xc(r9) +/* 000103FC 0001D18C C1 89 00 34 */ lfs f12, 0x34(r9) +/* 00010400 0001D190 C1 69 00 38 */ lfs f11, 0x38(r9) +/* 00010404 0001D194 C1 49 00 60 */ lfs f10, 0x60(r9) +/* 00010408 0001D198 D0 09 00 00 */ stfs f0, 0x0(r9) +/* 0001040C 0001D19C D1 A9 00 04 */ stfs f13, 0x4(r9) +/* 00010410 0001D1A0 D1 89 00 2C */ stfs f12, 0x2c(r9) +/* 00010414 0001D1A4 D1 69 00 30 */ stfs f11, 0x30(r9) +/* 00010418 0001D1A8 B0 09 00 28 */ sth r0, 0x28(r9) +/* 0001041C 0001D1AC B0 09 00 54 */ sth r0, 0x54(r9) +/* 00010420 0001D1B0 D1 49 00 58 */ stfs f10, 0x58(r9) +/* 00010424 0001D1B4 C0 09 00 64 */ lfs f0, 0x64(r9) +/* 00010428 0001D1B8 B0 09 00 80 */ sth r0, 0x80(r9) +/* 0001042C 0001D1BC D0 09 00 5C */ stfs f0, 0x5c(r9) +/* 00010430 0001D1C0 81 7F 00 8C */ lwz r11, 0x8c(r31) +/* 00010434 0001D1C4 C0 0B 00 08 */ lfs f0, 0x8(r11) +/* 00010438 0001D1C8 C1 AB 00 0C */ lfs f13, 0xc(r11) +/* 0001043C 0001D1CC C1 8B 00 34 */ lfs f12, 0x34(r11) +/* 00010440 0001D1D0 C1 6B 00 38 */ lfs f11, 0x38(r11) +/* 00010444 0001D1D4 C1 4B 00 60 */ lfs f10, 0x60(r11) +/* 00010448 0001D1D8 C1 2B 00 64 */ lfs f9, 0x64(r11) +/* 0001044C 0001D1DC B0 0B 00 80 */ sth r0, 0x80(r11) +/* 00010450 0001D1E0 D0 0B 00 00 */ stfs f0, 0x0(r11) +/* 00010454 0001D1E4 D1 AB 00 04 */ stfs f13, 0x4(r11) +/* 00010458 0001D1E8 D1 8B 00 2C */ stfs f12, 0x2c(r11) +/* 0001045C 0001D1EC D1 6B 00 30 */ stfs f11, 0x30(r11) +/* 00010460 0001D1F0 D1 4B 00 58 */ stfs f10, 0x58(r11) +/* 00010464 0001D1F4 D1 2B 00 5C */ stfs f9, 0x5c(r11) +/* 00010468 0001D1F8 B0 0B 00 28 */ sth r0, 0x28(r11) +/* 0001046C 0001D1FC B0 0B 00 54 */ sth r0, 0x54(r11) +/* 00010470 0001D200 80 1F 00 A8 */ lwz r0, 0xa8(r31) +/* 00010474 0001D204 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00010478 0001D208 41 82 04 80 */ beq .L_000108F8 +/* 0001047C 0001D20C 48 00 00 01 */ bl FlushAccumulationBuffer__Fv +/* 00010480 0001D210 80 01 01 14 */ lwz r0, 0x114(r1) +/* 00010484 0001D214 81 81 00 EC */ lwz r12, 0xec(r1) +/* 00010488 0001D218 7C 08 03 A6 */ mtlr r0 +/* 0001048C 0001D21C BB 41 00 F0 */ lmw r26, 0xf0(r1) +/* 00010490 0001D220 E3 E1 01 08 */ psq_l f31, 0x108(r1), 0, qr0 +/* 00010494 0001D224 7D 80 81 20 */ mtcrf 8, r12 +/* 00010498 0001D228 38 21 01 10 */ addi r1, r1, 0x110 +/* 0001049C 0001D22C 4E 80 00 20 */ blr +.endfn SetDesired__16CubicCameraMoverP8bMatrix4P3POVP12CubicPovDatab + +# .text:0x104A0 | size: 0x1018 +.fn Update__16CubicCameraMoverf, global +/* 000104A0 0001D230 94 21 FD D8 */ stwu r1, -0x228(r1) +/* 000104A4 0001D234 7C 08 02 A6 */ mflr r0 +/* 000104A8 0001D238 F3 01 01 E8 */ psq_st f24, 0x1e8(r1), 0, qr0 +/* 000104AC 0001D23C F3 21 01 F0 */ psq_st f25, 0x1f0(r1), 0, qr0 +/* 000104B0 0001D240 F3 41 01 F8 */ psq_st f26, 0x1f8(r1), 0, qr0 +/* 000104B4 0001D244 F3 61 02 00 */ psq_st f27, 0x200(r1), 0, qr0 +/* 000104B8 0001D248 F3 81 02 08 */ psq_st f28, 0x208(r1), 0, qr0 +/* 000104BC 0001D24C F3 A1 02 10 */ psq_st f29, 0x210(r1), 0, qr0 +/* 000104C0 0001D250 F3 C1 02 18 */ psq_st f30, 0x218(r1), 0, qr0 +/* 000104C4 0001D254 F3 E1 02 20 */ psq_st f31, 0x220(r1), 0, qr0 +/* 000104C8 0001D258 BF 01 01 C8 */ stmw r24, 0x1c8(r1) +/* 000104CC 0001D25C 90 01 02 2C */ stw r0, 0x22c(r1) +/* 000104D0 0001D260 7C 7F 1B 78 */ mr r31, r3 +/* 000104D4 0001D264 FF 60 08 90 */ fmr f27, f1 +.L_000104D8: +/* 000104D8 0001D268 3C 60 00 00 */ lis r3, TheGameFlowManager@ha +/* 000104DC 0001D26C 38 63 00 00 */ addi r3, r3, TheGameFlowManager@l +/* 000104E0 0001D270 48 00 00 01 */ bl IsPaused__15GameFlowManager +/* 000104E4 0001D274 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000104E8 0001D278 41 82 04 F8 */ beq .L_000109E0 +/* 000104EC 0001D27C 80 1F 00 B0 */ lwz r0, 0xb0(r31) +/* 000104F0 0001D280 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000104F4 0001D284 41 82 14 84 */ beq .L_00011978 +/* 000104F8 0001D288 3D 20 00 00 */ lis r9, .rodata+0x9B8@ha +/* 000104FC 0001D28C C0 1F 00 C0 */ lfs f0, 0xc0(r31) +/* 00010500 0001D290 C3 E9 09 B8 */ lfs f31, .rodata+0x9B8@l(r9) +/* 00010504 0001D294 38 00 00 00 */ li r0, 0x0 +/* 00010508 0001D298 90 1F 00 B0 */ stw r0, 0xb0(r31) +/* 0001050C 0001D29C FC 00 F8 00 */ fcmpu cr0, f0, f31 +/* 00010510 0001D2A0 4C 62 03 82 */ cror un, eq, lt +/* 00010514 0001D2A4 41 83 05 20 */ bso .L_00010A34 +/* 00010518 0001D2A8 EC 00 D8 28 */ fsubs f0, f0, f27 +/* 0001051C 0001D2AC D0 1F 00 C0 */ stfs f0, 0xc0(r31) +/* 00010520 0001D2B0 80 1F 00 98 */ lwz r0, 0x98(r31) +/* 00010524 0001D2B4 3F 00 00 00 */ lis r24, .rodata+0x9C0@ha +/* 00010528 0001D2B8 80 7F 00 80 */ lwz r3, 0x80(r31) +/* 0001052C 0001D2BC 7C 04 03 78 */ mr r4, r0 +/* 00010530 0001D2C0 90 1F 00 9C */ stw r0, 0x9c(r31) +/* 00010534 0001D2C4 48 00 14 45 */ bl .L_00011978 +/* 00010538 0001D2C8 80 1F 00 9C */ lwz r0, 0x9c(r31) +.L_0001053C: +/* 0001053C 0001D2CC 7C 7A 1B 78 */ mr r26, r3 +/* 00010540 0001D2D0 81 3F 00 80 */ lwz r9, 0x80(r31) +/* 00010544 0001D2D4 3D 40 00 00 */ lis r10, .rodata+0x9BC@ha +/* 00010548 0001D2D8 1C 60 00 14 */ mulli r3, r0, 0x14 +/* 0001054C 0001D2DC C1 AA 09 BC */ lfs f13, .rodata+0x9BC@l(r10) +/* 00010550 0001D2E0 C0 09 00 10 */ lfs f0, 0x10(r9) +/* 00010554 0001D2E4 3D 60 00 00 */ lis r11, aCubicPovTables@ha +/* 00010558 0001D2E8 39 6B 00 00 */ addi r11, r11, aCubicPovTables@l +/* 0001055C 0001D2EC 3D 40 00 00 */ lis r10, .rodata+0x9C0@ha +/* 00010560 0001D2F0 C1 2A 09 C0 */ lfs f9, .rodata+0x9C0@l(r10) +/* 00010564 0001D2F4 EC 00 03 72 */ fmuls f0, f0, f13 +/* 00010568 0001D2F8 7C 83 58 6E */ lwzux r4, r3, r11 +/* 0001056C 0001D2FC FC 00 F8 2E */ fsel f0, f0, f0, f31 +/* 00010570 0001D300 ED A9 00 28 */ fsubs f13, f9, f0 +/* 00010574 0001D304 C3 29 00 A4 */ lfs f25, 0xa4(r9) +/* 00010578 0001D308 C1 63 00 04 */ lfs f11, 0x4(r3) +/* 0001057C 0001D30C FD AD 48 2E */ fsel f13, f13, f0, f9 +/* 00010580 0001D310 C1 83 00 0C */ lfs f12, 0xc(r3) +/* 00010584 0001D314 39 01 00 08 */ addi r8, r1, 0x8 +.L_00010588: +/* 00010588 0001D318 ED AD 58 28 */ fsubs f13, f13, f11 +/* 0001058C 0001D31C C3 09 00 A8 */ lfs f24, 0xa8(r9) +/* 00010590 0001D320 EC 2C 03 72 */ fmuls f1, f12, f13 +/* 00010594 0001D324 FC 00 08 90 */ fmr f0, f1 +/* 00010598 0001D328 FD 40 00 1E */ fctiwz f10, f0 +/* 0001059C 0001D32C D9 41 01 C0 */ stfd f10, 0x1c0(r1) +/* 000105A0 0001D330 80 C1 01 C4 */ lwz r6, 0x1c4(r1) +/* 000105A4 0001D334 2C 06 00 00 */ cmpwi r6, 0x0 +/* 000105A8 0001D338 40 80 05 C0 */ bge .L_00010B68 +.L_000105AC: +/* 000105AC 0001D33C 80 83 00 10 */ lwz r4, 0x10(r3) +/* 000105B0 0001D340 38 A0 00 B0 */ li r5, 0xb0 +/* 000105B4 0001D344 7D 03 43 78 */ mr r3, r8 +/* 000105B8 0001D348 48 00 00 01 */ bl bMemCpy +/* 000105BC 0001D34C 48 01 06 40 */ b .text+0x10640 +/* 000105C0 0001D350 38 04 FF FF */ subi r0, r4, 0x1 +/* 000105C4 0001D354 7C 06 00 00 */ cmpw r6, r0 +/* 000105C8 0001D358 41 80 05 EC */ blt .L_00010BB4 +/* 000105CC 0001D35C 1C 84 00 B0 */ mulli r4, r4, 0xb0 +/* 000105D0 0001D360 80 03 00 10 */ lwz r0, 0x10(r3) +/* 000105D4 0001D364 7D 03 43 78 */ mr r3, r8 +/* 000105D8 0001D368 38 A0 00 B0 */ li r5, 0xb0 +/* 000105DC 0001D36C 38 84 FF 50 */ subi r4, r4, 0xb0 +/* 000105E0 0001D370 7C 80 22 14 */ add r4, r0, r4 +/* 000105E4 0001D374 48 00 00 01 */ bl bMemCpy +/* 000105E8 0001D378 48 01 06 40 */ b .text+0x10640 +/* 000105EC 0001D37C 6C C0 80 00 */ xoris r0, r6, 0x8000 +/* 000105F0 0001D380 90 01 01 C4 */ stw r0, 0x1c4(r1) +/* 000105F4 0001D384 3D 60 43 30 */ lis r11, 0x4330 +/* 000105F8 0001D388 3D 40 00 00 */ lis r10, .rodata+0x9C8@ha +/* 000105FC 0001D38C 91 61 01 C0 */ stw r11, 0x1c0(r1) +/* 00010600 0001D390 C9 AA 09 C8 */ lfd f13, .rodata+0x9C8@l(r10) +/* 00010604 0001D394 C8 01 01 C0 */ lfd f0, 0x1c0(r1) +/* 00010608 0001D398 FC 00 68 28 */ fsub f0, f0, f13 +/* 0001060C 0001D39C FC 00 00 18 */ frsp f0, f0 +/* 00010610 0001D3A0 FC 00 08 00 */ fcmpu cr0, f0, f1 +/* 00010614 0001D3A4 4C 62 03 82 */ cror un, eq, lt +/* 00010618 0001D3A8 41 83 06 20 */ bso .L_00010C38 +/* 0001061C 0001D3AC EC 00 48 28 */ fsubs f0, f0, f9 +/* 00010620 0001D3B0 1C C6 00 B0 */ mulli r6, r6, 0xb0 +/* 00010624 0001D3B4 80 03 00 10 */ lwz r0, 0x10(r3) +/* 00010628 0001D3B8 EC 21 00 28 */ fsubs f1, f1, f0 +/* 0001062C 0001D3BC 7D 04 43 78 */ mr r4, r8 +/* 00010630 0001D3C0 38 A6 00 B0 */ addi r5, r6, 0xb0 +/* 00010634 0001D3C4 7C C0 32 14 */ add r6, r0, r6 +/* 00010638 0001D3C8 7C A0 2A 14 */ add r5, r0, r5 +/* 0001063C 0001D3CC 48 00 EE D9 */ bl .text+0xEED8 +/* 00010640 0001D3D0 3D 20 00 00 */ lis r9, theRaceParameters+0x4C@ha +/* 00010644 0001D3D4 39 60 00 00 */ li r11, 0x0 +/* 00010648 0001D3D8 80 09 00 4C */ lwz r0, theRaceParameters+0x4C@l(r9) +/* 0001064C 0001D3DC 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00010650 0001D3E0 40 82 06 64 */ bne .L_00010CB4 +/* 00010654 0001D3E4 3D 20 00 00 */ lis r9, g_tweakIsDriftRace@ha +/* 00010658 0001D3E8 80 09 00 00 */ lwz r0, g_tweakIsDriftRace@l(r9) +.L_0001065C: +/* 0001065C 0001D3EC 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00010660 0001D3F0 41 82 06 68 */ beq .L_00010CC8 +/* 00010664 0001D3F4 39 60 00 01 */ li r11, 0x1 +/* 00010668 0001D3F8 2C 0B 00 00 */ cmpwi r11, 0x0 +.L_0001066C: +/* 0001066C 0001D3FC 40 82 06 A0 */ bne .L_00010D0C +/* 00010670 0001D400 3D 20 00 00 */ lis r9, theRaceParameters+0x50@ha +.L_00010674: +/* 00010674 0001D404 39 60 00 00 */ li r11, 0x0 +/* 00010678 0001D408 80 09 00 50 */ lwz r0, theRaceParameters+0x50@l(r9) +.L_0001067C: +/* 0001067C 0001D40C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00010680 0001D410 40 82 06 94 */ bne .L_00010D14 +/* 00010684 0001D414 3D 20 00 00 */ lis r9, g_tweakIsBurnout@ha +/* 00010688 0001D418 80 09 00 00 */ lwz r0, g_tweakIsBurnout@l(r9) +/* 0001068C 0001D41C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00010690 0001D420 41 82 06 98 */ beq .L_00010D28 +/* 00010694 0001D424 39 60 00 01 */ li r11, 0x1 +/* 00010698 0001D428 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0001069C 0001D42C 41 82 06 C0 */ beq .L_00010D5C +/* 000106A0 0001D430 3D 20 00 00 */ lis r9, .rodata+0x9B8@ha +.L_000106A4: +/* 000106A4 0001D434 C0 09 09 B8 */ lfs f0, .rodata+0x9B8@l(r9) +/* 000106A8 0001D438 D0 01 00 50 */ stfs f0, 0x50(r1) +/* 000106AC 0001D43C D0 01 00 B8 */ stfs f0, 0xb8(r1) +/* 000106B0 0001D440 D0 01 00 BC */ stfs f0, 0xbc(r1) +/* 000106B4 0001D444 D0 01 00 C0 */ stfs f0, 0xc0(r1) +/* 000106B8 0001D448 D0 01 00 48 */ stfs f0, 0x48(r1) +/* 000106BC 0001D44C D0 01 00 4C */ stfs f0, 0x4c(r1) +/* 000106C0 0001D450 3D 20 00 00 */ lis r9, .rodata+0x9B8@ha +/* 000106C4 0001D454 C0 1F 00 C0 */ lfs f0, 0xc0(r31) +/* 000106C8 0001D458 C3 E9 09 B8 */ lfs f31, .rodata+0x9B8@l(r9) +/* 000106CC 0001D45C 38 81 00 B8 */ addi r4, r1, 0xb8 +/* 000106D0 0001D460 FC 00 F8 00 */ fcmpu cr0, f0, f31 +/* 000106D4 0001D464 D3 E1 00 B8 */ stfs f31, 0xb8(r1) +/* 000106D8 0001D468 D3 E1 00 BC */ stfs f31, 0xbc(r1) +/* 000106DC 0001D46C D3 E1 00 C0 */ stfs f31, 0xc0(r1) +/* 000106E0 0001D470 41 81 06 EC */ bgt .L_00010DCC +/* 000106E4 0001D474 7F E3 FB 78 */ mr r3, r31 +/* 000106E8 0001D478 48 00 42 45 */ bl .L_0001492C +/* 000106EC 0001D47C 80 9F 00 E4 */ lwz r4, 0xe4(r31) +/* 000106F0 0001D480 89 24 00 02 */ lbz r9, 0x2(r4) +.L_000106F4: +/* 000106F4 0001D484 88 04 00 01 */ lbz r0, 0x1(r4) +/* 000106F8 0001D488 7C 09 00 40 */ cmplw r9, r0 +.L_000106FC: +/* 000106FC 0001D48C 40 80 07 08 */ bge .L_00010E04 +/* 00010700 0001D490 38 09 00 01 */ addi r0, r9, 0x1 +/* 00010704 0001D494 98 04 00 02 */ stb r0, 0x2(r4) +/* 00010708 0001D498 C1 A4 00 0C */ lfs f13, 0xc(r4) +/* 0001070C 0001D49C C1 84 00 10 */ lfs f12, 0x10(r4) +/* 00010710 0001D4A0 3C A0 43 30 */ lis r5, 0x4330 +/* 00010714 0001D4A4 C0 04 00 14 */ lfs f0, 0x14(r4) +/* 00010718 0001D4A8 3C E0 00 00 */ lis r7, .rodata+0x9C8@ha +/* 0001071C 0001D4AC C1 41 00 B8 */ lfs f10, 0xb8(r1) +.L_00010720: +/* 00010720 0001D4B0 3C C0 00 00 */ lis r6, .rodata+0x9C0@ha +/* 00010724 0001D4B4 C1 61 00 BC */ lfs f11, 0xbc(r1) +/* 00010728 0001D4B8 C1 21 00 C0 */ lfs f9, 0xc0(r1) +/* 0001072C 0001D4BC ED AD 50 2A */ fadds f13, f13, f10 +/* 00010730 0001D4C0 ED 8C 58 2A */ fadds f12, f12, f11 +/* 00010734 0001D4C4 D1 A4 00 0C */ stfs f13, 0xc(r4) +/* 00010738 0001D4C8 EC 00 48 2A */ fadds f0, f0, f9 +/* 0001073C 0001D4CC D1 84 00 10 */ stfs f12, 0x10(r4) +/* 00010740 0001D4D0 D0 04 00 14 */ stfs f0, 0x14(r4) +/* 00010744 0001D4D4 89 24 00 03 */ lbz r9, 0x3(r4) +/* 00010748 0001D4D8 81 44 00 08 */ lwz r10, 0x8(r4) +/* 0001074C 0001D4DC C1 A1 00 B8 */ lfs f13, 0xb8(r1) +/* 00010750 0001D4E0 55 29 20 36 */ slwi r9, r9, 4 +/* 00010754 0001D4E4 C1 81 00 BC */ lfs f12, 0xbc(r1) +/* 00010758 0001D4E8 7D 6A 4A 14 */ add r11, r10, r9 +/* 0001075C 0001D4EC C0 01 00 C0 */ lfs f0, 0xc0(r1) +/* 00010760 0001D4F0 7D AA 4D 2E */ stfsx f13, r10, r9 +/* 00010764 0001D4F4 D0 0B 00 08 */ stfs f0, 0x8(r11) +/* 00010768 0001D4F8 D1 8B 00 04 */ stfs f12, 0x4(r11) +/* 0001076C 0001D4FC C9 47 09 C8 */ lfd f10, .rodata+0x9C8@l(r7) +/* 00010770 0001D500 88 04 00 02 */ lbz r0, 0x2(r4) +.L_00010774: +/* 00010774 0001D504 C1 26 09 C0 */ lfs f9, .rodata+0x9C0@l(r6) +/* 00010778 0001D508 6C 00 80 00 */ xoris r0, r0, 0x8000 +.L_0001077C: +/* 0001077C 0001D50C C1 A4 00 0C */ lfs f13, 0xc(r4) +/* 00010780 0001D510 90 01 01 C4 */ stw r0, 0x1c4(r1) +/* 00010784 0001D514 C1 84 00 10 */ lfs f12, 0x10(r4) +/* 00010788 0001D518 90 A1 01 C0 */ stw r5, 0x1c0(r1) +/* 0001078C 0001D51C C1 64 00 14 */ lfs f11, 0x14(r4) +/* 00010790 0001D520 C8 01 01 C0 */ lfd f0, 0x1c0(r1) +/* 00010794 0001D524 FC 00 50 28 */ fsub f0, f0, f10 +/* 00010798 0001D528 FC 00 00 18 */ frsp f0, f0 +/* 0001079C 0001D52C EC 09 00 24 */ fdivs f0, f9, f0 +/* 000107A0 0001D530 ED 6B 00 32 */ fmuls f11, f11, f0 +/* 000107A4 0001D534 ED AD 00 32 */ fmuls f13, f13, f0 +/* 000107A8 0001D538 D1 61 00 E0 */ stfs f11, 0xe0(r1) +/* 000107AC 0001D53C ED 8C 00 32 */ fmuls f12, f12, f0 +/* 000107B0 0001D540 D1 A1 00 D8 */ stfs f13, 0xd8(r1) +/* 000107B4 0001D544 D1 81 00 DC */ stfs f12, 0xdc(r1) +/* 000107B8 0001D548 D1 A1 00 C8 */ stfs f13, 0xc8(r1) +/* 000107BC 0001D54C D1 81 00 CC */ stfs f12, 0xcc(r1) +/* 000107C0 0001D550 D1 61 00 D0 */ stfs f11, 0xd0(r1) +/* 000107C4 0001D554 D1 A4 00 1C */ stfs f13, 0x1c(r4) +/* 000107C8 0001D558 89 24 00 03 */ lbz r9, 0x3(r4) +/* 000107CC 0001D55C D1 84 00 20 */ stfs f12, 0x20(r4) +/* 000107D0 0001D560 39 29 00 01 */ addi r9, r9, 0x1 +/* 000107D4 0001D564 D1 64 00 24 */ stfs f11, 0x24(r4) +/* 000107D8 0001D568 99 24 00 03 */ stb r9, 0x3(r4) +/* 000107DC 0001D56C 88 04 00 01 */ lbz r0, 0x1(r4) +/* 000107E0 0001D570 55 29 06 3E */ clrlwi r9, r9, 24 +/* 000107E4 0001D574 7C 00 48 40 */ cmplw r0, r9 +/* 000107E8 0001D578 41 81 07 F4 */ bgt .L_00010FDC +/* 000107EC 0001D57C 38 00 00 00 */ li r0, 0x0 +/* 000107F0 0001D580 98 04 00 03 */ stb r0, 0x3(r4) +.L_000107F4: +/* 000107F4 0001D584 C0 01 00 B8 */ lfs f0, 0xb8(r1) +/* 000107F8 0001D588 C1 A1 00 BC */ lfs f13, 0xbc(r1) +.L_000107FC: +/* 000107FC 0001D58C FD 80 02 10 */ fabs f12, f0 +.L_00010800: +/* 00010800 0001D590 FD A0 6A 10 */ fabs f13, f13 +/* 00010804 0001D594 EC 0C 68 28 */ fsubs f0, f12, f13 +/* 00010808 0001D598 FC 00 F8 00 */ fcmpu cr0, f0, f31 +/* 0001080C 0001D59C 4C 62 0B 82 */ cror un, eq, gt +/* 00010810 0001D5A0 41 83 08 18 */ bso .L_00011028 +/* 00010814 0001D5A4 FD 80 68 90 */ fmr f12, f13 +/* 00010818 0001D5A8 3D 20 00 00 */ lis r9, .rodata+0x9D0@ha +/* 0001081C 0001D5AC C0 09 09 D0 */ lfs f0, .rodata+0x9D0@l(r9) +/* 00010820 0001D5B0 FC 0C 00 00 */ fcmpu cr0, f12, f0 +/* 00010824 0001D5B4 41 80 08 54 */ blt .L_00011078 +/* 00010828 0001D5B8 81 3F 00 80 */ lwz r9, 0x80(r31) +/* 0001082C 0001D5BC C1 A9 00 A4 */ lfs f13, 0xa4(r9) +/* 00010830 0001D5C0 FC 0D F8 00 */ fcmpu cr0, f13, f31 +/* 00010834 0001D5C4 4C 62 03 82 */ cror un, eq, lt +/* 00010838 0001D5C8 41 83 08 54 */ bso .L_0001108C +/* 0001083C 0001D5CC C0 1F 00 D4 */ lfs f0, 0xd4(r31) +/* 00010840 0001D5D0 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00010844 0001D5D4 4C 62 0B 82 */ cror un, eq, gt +/* 00010848 0001D5D8 41 83 08 54 */ bso .L_0001109C +/* 0001084C 0001D5DC D1 BF 00 D4 */ stfs f13, 0xd4(r31) +/* 00010850 0001D5E0 D1 3F 00 DC */ stfs f9, 0xdc(r31) +/* 00010854 0001D5E4 81 3F 00 94 */ lwz r9, 0x94(r31) +/* 00010858 0001D5E8 39 41 00 A8 */ addi r10, r1, 0xa8 +/* 0001085C 0001D5EC C3 C1 00 08 */ lfs f30, 0x8(r1) +/* 00010860 0001D5F0 3F 20 00 00 */ lis r25, _6Camera.StopUpdating@ha +/* 00010864 0001D5F4 D3 C9 00 7C */ stfs f30, 0x7c(r9) +/* 00010868 0001D5F8 D3 C9 00 24 */ stfs f30, 0x24(r9) +/* 0001086C 0001D5FC D3 C9 00 50 */ stfs f30, 0x50(r9) +/* 00010870 0001D600 81 7F 00 84 */ lwz r11, 0x84(r31) +/* 00010874 0001D604 D3 CB 00 24 */ stfs f30, 0x24(r11) +/* 00010878 0001D608 81 3F 00 8C */ lwz r9, 0x8c(r31) +/* 0001087C 0001D60C D3 C9 00 7C */ stfs f30, 0x7c(r9) +/* 00010880 0001D610 D3 C9 00 24 */ stfs f30, 0x24(r9) +/* 00010884 0001D614 D3 C9 00 50 */ stfs f30, 0x50(r9) +/* 00010888 0001D618 C1 8A 00 08 */ lfs f12, 0x8(r10) +/* 0001088C 0001D61C 81 7F 00 90 */ lwz r11, 0x90(r31) +/* 00010890 0001D620 C0 01 00 A8 */ lfs f0, 0xa8(r1) +/* 00010894 0001D624 C1 AA 00 04 */ lfs f13, 0x4(r10) +/* 00010898 0001D628 D1 8B 00 7C */ stfs f12, 0x7c(r11) +/* 0001089C 0001D62C D0 0B 00 24 */ stfs f0, 0x24(r11) +/* 000108A0 0001D630 D1 AB 00 50 */ stfs f13, 0x50(r11) +/* 000108A4 0001D634 81 3F 00 88 */ lwz r9, 0x88(r31) +/* 000108A8 0001D638 D3 C9 00 7C */ stfs f30, 0x7c(r9) +/* 000108AC 0001D63C D3 C9 00 24 */ stfs f30, 0x24(r9) +/* 000108B0 0001D640 D3 C9 00 50 */ stfs f30, 0x50(r9) +.L_000108B4: +/* 000108B4 0001D644 80 7F 00 1C */ lwz r3, 0x1c(r31) +/* 000108B8 0001D648 80 9F 00 80 */ lwz r4, 0x80(r31) +.L_000108BC: +/* 000108BC 0001D64C 38 63 00 40 */ addi r3, r3, 0x40 +/* 000108C0 0001D650 38 84 00 18 */ addi r4, r4, 0x18 +/* 000108C4 0001D654 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 +.L_000108C8: +/* 000108C8 0001D658 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha +/* 000108CC 0001D65C 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) +/* 000108D0 0001D660 2C 00 00 00 */ cmpwi r0, 0x0 +.L_000108D4: +/* 000108D4 0001D664 40 82 08 E0 */ bne .L_000111B4 +.L_000108D8: +/* 000108D8 0001D668 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 000108DC 0001D66C D0 29 00 B0 */ stfs f1, 0xb0(r9) +/* 000108E0 0001D670 80 1F 00 AC */ lwz r0, 0xac(r31) +.L_000108E4: +/* 000108E4 0001D674 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000108E8 0001D678 40 82 09 14 */ bne .L_000111FC +/* 000108EC 0001D67C 80 19 00 00 */ lwz r0, _6Camera.StopUpdating@l(r25) +/* 000108F0 0001D680 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000108F4 0001D684 40 82 09 08 */ bne .L_000111FC +.L_000108F8: +/* 000108F8 0001D688 3D 20 00 00 */ lis r9, .rodata+0x9D4@ha +/* 000108FC 0001D68C 81 7F 00 1C */ lwz r11, 0x1c(r31) +/* 00010900 0001D690 C0 09 09 D4 */ lfs f0, .rodata+0x9D4@l(r9) +/* 00010904 0001D694 D0 0B 00 B4 */ stfs f0, 0xb4(r11) +/* 00010908 0001D698 3D 20 00 00 */ lis r9, .rodata+0x9D8@ha +/* 0001090C 0001D69C C3 A9 09 D8 */ lfs f29, .rodata+0x9D8@l(r9) +/* 00010910 0001D6A0 48 01 09 30 */ b .text+0x10930 +/* 00010914 0001D6A4 80 19 00 00 */ lwz r0, _6Camera.StopUpdating@l(r25) +/* 00010918 0001D6A8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0001091C 0001D6AC 40 82 09 48 */ bne .L_00011264 +/* 00010920 0001D6B0 3D 20 00 00 */ lis r9, .rodata+0x9B8@ha +/* 00010924 0001D6B4 81 7F 00 1C */ lwz r11, 0x1c(r31) +/* 00010928 0001D6B8 C0 09 09 B8 */ lfs f0, .rodata+0x9B8@l(r9) +/* 0001092C 0001D6BC D0 0B 00 B4 */ stfs f0, 0xb4(r11) +/* 00010930 0001D6C0 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha +/* 00010934 0001D6C4 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) +/* 00010938 0001D6C8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0001093C 0001D6CC 40 82 09 48 */ bne .L_00011284 +/* 00010940 0001D6D0 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 00010944 0001D6D4 D3 A9 00 B8 */ stfs f29, 0xb8(r9) +/* 00010948 0001D6D8 80 1F 00 A8 */ lwz r0, 0xa8(r31) +/* 0001094C 0001D6DC 38 81 00 E8 */ addi r4, r1, 0xe8 +/* 00010950 0001D6E0 38 E0 00 01 */ li r7, 0x1 +/* 00010954 0001D6E4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00010958 0001D6E8 40 82 09 60 */ bne .L_000112B8 +/* 0001095C 0001D6EC 38 E0 00 00 */ li r7, 0x0 +/* 00010960 0001D6F0 7F E3 FB 78 */ mr r3, r31 +/* 00010964 0001D6F4 7F 45 D3 78 */ mr r5, r26 +/* 00010968 0001D6F8 38 C1 00 08 */ addi r6, r1, 0x8 +/* 0001096C 0001D6FC 48 00 FE B5 */ bl .text+0xFEB4 +/* 00010970 0001D700 80 1F 00 A4 */ lwz r0, 0xa4(r31) +/* 00010974 0001D704 39 20 00 00 */ li r9, 0x0 +/* 00010978 0001D708 3D 60 00 00 */ lis r11, .rodata+0x9C0@ha +.L_0001097C: +/* 0001097C 0001D70C 91 3F 00 A8 */ stw r9, 0xa8(r31) +/* 00010980 0001D710 C3 4B 09 C0 */ lfs f26, .rodata+0x9C0@l(r11) +/* 00010984 0001D714 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00010988 0001D718 41 82 09 94 */ beq .L_0001131C +/* 0001098C 0001D71C 3D 20 00 00 */ lis r9, .rodata+0x9DC@ha +/* 00010990 0001D720 C3 49 09 DC */ lfs f26, .rodata+0x9DC@l(r9) +/* 00010994 0001D724 A8 7A 00 00 */ lha r3, 0x0(r26) +/* 00010998 0001D728 48 00 0F 8D */ bl .L_00011924 +/* 0001099C 0001D72C 81 3F 00 94 */ lwz r9, 0x94(r31) +/* 000109A0 0001D730 7C 7B 1B 79 */ mr. r27, r3 +/* 000109A4 0001D734 C3 F8 09 C0 */ lfs f31, .rodata+0x9C0@l(r24) +/* 000109A8 0001D738 C0 09 00 00 */ lfs f0, 0x0(r9) +/* 000109AC 0001D73C D0 01 00 D8 */ stfs f0, 0xd8(r1) +/* 000109B0 0001D740 C1 A9 00 2C */ lfs f13, 0x2c(r9) +/* 000109B4 0001D744 D3 E1 00 E0 */ stfs f31, 0xe0(r1) +/* 000109B8 0001D748 D1 A1 00 DC */ stfs f13, 0xdc(r1) +/* 000109BC 0001D74C 40 82 09 DC */ bne .L_00011398 +/* 000109C0 0001D750 81 3F 00 80 */ lwz r9, 0x80(r31) +/* 000109C4 0001D754 C0 09 00 58 */ lfs f0, 0x58(r9) +/* 000109C8 0001D758 D0 01 00 D8 */ stfs f0, 0xd8(r1) +/* 000109CC 0001D75C C1 A9 00 5C */ lfs f13, 0x5c(r9) +/* 000109D0 0001D760 D1 A1 00 DC */ stfs f13, 0xdc(r1) +/* 000109D4 0001D764 C0 09 00 60 */ lfs f0, 0x60(r9) +/* 000109D8 0001D768 D0 01 00 E0 */ stfs f0, 0xe0(r1) +/* 000109DC 0001D76C 81 3F 00 88 */ lwz r9, 0x88(r31) +.L_000109E0: +/* 000109E0 0001D770 3D 40 00 00 */ lis r10, .rodata+0x9B8@ha +/* 000109E4 0001D774 81 7F 00 8C */ lwz r11, 0x8c(r31) +/* 000109E8 0001D778 C0 09 00 00 */ lfs f0, 0x0(r9) +/* 000109EC 0001D77C C1 A9 00 2C */ lfs f13, 0x2c(r9) +/* 000109F0 0001D780 C1 89 00 58 */ lfs f12, 0x58(r9) +/* 000109F4 0001D784 EC 1A 00 32 */ fmuls f0, f26, f0 +/* 000109F8 0001D788 ED BA 03 72 */ fmuls f13, f26, f13 +/* 000109FC 0001D78C D0 01 01 28 */ stfs f0, 0x128(r1) +/* 00010A00 0001D790 D1 A1 01 2C */ stfs f13, 0x12c(r1) +/* 00010A04 0001D794 D1 81 01 30 */ stfs f12, 0x130(r1) +/* 00010A08 0001D798 C1 9F 00 D4 */ lfs f12, 0xd4(r31) +/* 00010A0C 0001D79C C0 0B 00 00 */ lfs f0, 0x0(r11) +/* 00010A10 0001D7A0 C1 AB 00 2C */ lfs f13, 0x2c(r11) +/* 00010A14 0001D7A4 C1 6B 00 58 */ lfs f11, 0x58(r11) +/* 00010A18 0001D7A8 EC 1A 00 32 */ fmuls f0, f26, f0 +/* 00010A1C 0001D7AC C0 2A 09 B8 */ lfs f1, .rodata+0x9B8@l(r10) +/* 00010A20 0001D7B0 ED BA 03 72 */ fmuls f13, f26, f13 +/* 00010A24 0001D7B4 D0 01 01 38 */ stfs f0, 0x138(r1) +.L_00010A28: +/* 00010A28 0001D7B8 D1 A1 01 3C */ stfs f13, 0x13c(r1) +/* 00010A2C 0001D7BC FC 0C 08 00 */ fcmpu cr0, f12, f1 +/* 00010A30 0001D7C0 D1 61 01 40 */ stfs f11, 0x140(r1) +.L_00010A34: +/* 00010A34 0001D7C4 4C 62 03 82 */ cror un, eq, lt +.L_00010A38: +/* 00010A38 0001D7C8 41 83 0B A0 */ bso .L_000115D8 +/* 00010A3C 0001D7CC C0 1F 00 DC */ lfs f0, 0xdc(r31) +/* 00010A40 0001D7D0 FC 00 08 00 */ fcmpu cr0, f0, f1 +.L_00010A44: +/* 00010A44 0001D7D4 4C 62 03 82 */ cror un, eq, lt +/* 00010A48 0001D7D8 41 83 0B 94 */ bso .L_000115DC +/* 00010A4C 0001D7DC 3D 20 00 00 */ lis r9, CameraImpcatCurveH@ha +/* 00010A50 0001D7E0 3B A1 01 48 */ addi r29, r1, 0x148 +/* 00010A54 0001D7E4 38 00 00 05 */ li r0, 0x5 +/* 00010A58 0001D7E8 3B C9 00 00 */ addi r30, r9, CameraImpcatCurveH@l +/* 00010A5C 0001D7EC 90 01 01 48 */ stw r0, 0x148(r1) +/* 00010A60 0001D7F0 7F A3 EB 78 */ mr r3, r29 +/* 00010A64 0001D7F4 FC 40 F8 90 */ fmr f2, f31 +/* 00010A68 0001D7F8 48 00 00 01 */ bl SetMinMax__9TableBaseff +/* 00010A6C 0001D7FC C1 BF 00 DC */ lfs f13, 0xdc(r31) +/* 00010A70 0001D800 C0 01 01 4C */ lfs f0, 0x14c(r1) +/* 00010A74 0001D804 39 01 01 B0 */ addi r8, r1, 0x1b0 +/* 00010A78 0001D808 C1 81 01 54 */ lfs f12, 0x154(r1) +/* 00010A7C 0001D80C ED AD 00 28 */ fsubs f13, f13, f0 +/* 00010A80 0001D810 80 81 01 48 */ lwz r4, 0x148(r1) +/* 00010A84 0001D814 EC 2C 03 72 */ fmuls f1, f12, f13 +/* 00010A88 0001D818 93 C1 01 58 */ stw r30, 0x158(r1) +/* 00010A8C 0001D81C FC 00 08 90 */ fmr f0, f1 +/* 00010A90 0001D820 FD 60 00 1E */ fctiwz f11, f0 +/* 00010A94 0001D824 D9 61 01 C0 */ stfd f11, 0x1c0(r1) +/* 00010A98 0001D828 80 C1 01 C4 */ lwz r6, 0x1c4(r1) +/* 00010A9C 0001D82C 2C 06 00 00 */ cmpwi r6, 0x0 +/* 00010AA0 0001D830 40 80 0A B8 */ bge .L_00011558 +/* 00010AA4 0001D834 7D 03 43 78 */ mr r3, r8 +/* 00010AA8 0001D838 7F C4 F3 78 */ mr r4, r30 +/* 00010AAC 0001D83C 38 A0 00 04 */ li r5, 0x4 +/* 00010AB0 0001D840 48 00 00 01 */ bl bMemCpy +/* 00010AB4 0001D844 48 01 0B 34 */ b .text+0x10B34 +/* 00010AB8 0001D848 38 04 FF FF */ subi r0, r4, 0x1 +/* 00010ABC 0001D84C 7C 06 00 00 */ cmpw r6, r0 +.L_00010AC0: +/* 00010AC0 0001D850 41 80 0A E0 */ blt .L_000115A0 +/* 00010AC4 0001D854 54 84 10 3A */ slwi r4, r4, 2 +.L_00010AC8: +/* 00010AC8 0001D858 7D 03 43 78 */ mr r3, r8 +/* 00010ACC 0001D85C 38 84 FF FC */ subi r4, r4, 0x4 +/* 00010AD0 0001D860 38 A0 00 04 */ li r5, 0x4 +/* 00010AD4 0001D864 7C 84 F2 14 */ add r4, r4, r30 +/* 00010AD8 0001D868 48 00 00 01 */ bl bMemCpy +/* 00010ADC 0001D86C 48 01 0B 34 */ b .text+0x10B34 +/* 00010AE0 0001D870 6C C0 80 00 */ xoris r0, r6, 0x8000 +/* 00010AE4 0001D874 90 01 01 C4 */ stw r0, 0x1c4(r1) +/* 00010AE8 0001D878 3D 60 43 30 */ lis r11, 0x4330 +/* 00010AEC 0001D87C 3D 40 00 00 */ lis r10, .rodata+0x9C8@ha +/* 00010AF0 0001D880 91 61 01 C0 */ stw r11, 0x1c0(r1) +/* 00010AF4 0001D884 C9 AA 09 C8 */ lfd f13, .rodata+0x9C8@l(r10) +/* 00010AF8 0001D888 C8 01 01 C0 */ lfd f0, 0x1c0(r1) +/* 00010AFC 0001D88C FC 00 68 28 */ fsub f0, f0, f13 +.L_00010B00: +/* 00010B00 0001D890 FC 00 00 18 */ frsp f0, f0 +/* 00010B04 0001D894 FC 00 08 00 */ fcmpu cr0, f0, f1 +/* 00010B08 0001D898 4C 62 03 82 */ cror un, eq, lt +/* 00010B0C 0001D89C 41 83 0B 14 */ bso .L_00011620 +/* 00010B10 0001D8A0 EC 00 F8 28 */ fsubs f0, f0, f31 +/* 00010B14 0001D8A4 54 C6 10 3A */ slwi r6, r6, 2 +/* 00010B18 0001D8A8 EC 21 00 28 */ fsubs f1, f1, f0 +/* 00010B1C 0001D8AC 38 A6 00 04 */ addi r5, r6, 0x4 +/* 00010B20 0001D8B0 7F A3 EB 78 */ mr r3, r29 +/* 00010B24 0001D8B4 7C C6 F2 14 */ add r6, r6, r30 +/* 00010B28 0001D8B8 7D 04 43 78 */ mr r4, r8 +/* 00010B2C 0001D8BC 7C A5 F2 14 */ add r5, r5, r30 +/* 00010B30 0001D8C0 48 00 0F F5 */ bl .L_00011B24 +/* 00010B34 0001D8C4 C1 9F 00 D4 */ lfs f12, 0xd4(r31) +/* 00010B38 0001D8C8 3D 20 00 00 */ lis r9, .rodata+0x9E0@ha +/* 00010B3C 0001D8CC C1 A1 01 B0 */ lfs f13, 0x1b0(r1) +/* 00010B40 0001D8D0 3D 60 00 00 */ lis r11, .rodata+0x9C0@ha +/* 00010B44 0001D8D4 C1 69 09 E0 */ lfs f11, .rodata+0x9E0@l(r9) +/* 00010B48 0001D8D8 3D 40 00 00 */ lis r10, .rodata+0x9B8@ha +/* 00010B4C 0001D8DC ED AD 03 32 */ fmuls f13, f13, f12 +/* 00010B50 0001D8E0 C0 0B 09 C0 */ lfs f0, .rodata+0x9C0@l(r11) +/* 00010B54 0001D8E4 ED AD 02 F2 */ fmuls f13, f13, f11 +/* 00010B58 0001D8E8 C1 81 01 28 */ lfs f12, 0x128(r1) +/* 00010B5C 0001D8EC C1 41 01 38 */ lfs f10, 0x138(r1) +/* 00010B60 0001D8F0 ED 2D 00 2A */ fadds f9, f13, f0 +/* 00010B64 0001D8F4 C1 7F 00 DC */ lfs f11, 0xdc(r31) +.L_00010B68: +/* 00010B68 0001D8F8 EC 00 68 28 */ fsubs f0, f0, f13 +/* 00010B6C 0001D8FC C1 0A 09 B8 */ lfs f8, .rodata+0x9B8@l(r10) +/* 00010B70 0001D900 ED 8C 00 32 */ fmuls f12, f12, f0 +/* 00010B74 0001D904 ED 4A 02 72 */ fmuls f10, f10, f9 +/* 00010B78 0001D908 D1 81 01 28 */ stfs f12, 0x128(r1) +/* 00010B7C 0001D90C ED 6B D8 28 */ fsubs f11, f11, f27 +/* 00010B80 0001D910 D1 41 01 38 */ stfs f10, 0x138(r1) +/* 00010B84 0001D914 D1 A1 01 B0 */ stfs f13, 0x1b0(r1) +/* 00010B88 0001D918 FC 0B 40 00 */ fcmpu cr0, f11, f8 +.L_00010B8C: +/* 00010B8C 0001D91C D1 7F 00 DC */ stfs f11, 0xdc(r31) +/* 00010B90 0001D920 41 81 0B A0 */ bgt .L_00011730 +/* 00010B94 0001D924 3D 20 00 00 */ lis r9, .rodata+0x9B8@ha +/* 00010B98 0001D928 C0 09 09 B8 */ lfs f0, .rodata+0x9B8@l(r9) +/* 00010B9C 0001D92C D0 1F 00 D4 */ stfs f0, 0xd4(r31) +/* 00010BA0 0001D930 3D 20 00 00 */ lis r9, .rodata+0x9B8@ha +/* 00010BA4 0001D934 C0 1F 00 D8 */ lfs f0, 0xd8(r31) +/* 00010BA8 0001D938 C0 29 09 B8 */ lfs f1, .rodata+0x9B8@l(r9) +/* 00010BAC 0001D93C FC 00 08 00 */ fcmpu cr0, f0, f1 +/* 00010BB0 0001D940 4C 62 03 82 */ cror un, eq, lt +.L_00010BB4: +/* 00010BB4 0001D944 41 83 0D 10 */ bso .L_000118C4 +/* 00010BB8 0001D948 C0 1F 00 E0 */ lfs f0, 0xe0(r31) +/* 00010BBC 0001D94C FC 00 08 00 */ fcmpu cr0, f0, f1 +/* 00010BC0 0001D950 4C 62 03 82 */ cror un, eq, lt +/* 00010BC4 0001D954 41 83 0D 04 */ bso .L_000118C8 +/* 00010BC8 0001D958 3D 60 00 00 */ lis r11, .rodata+0x9C0@ha +/* 00010BCC 0001D95C 3D 20 00 00 */ lis r9, CameraImpcatCurveV@ha +/* 00010BD0 0001D960 C3 EB 09 C0 */ lfs f31, .rodata+0x9C0@l(r11) +/* 00010BD4 0001D964 3B A1 01 48 */ addi r29, r1, 0x148 +/* 00010BD8 0001D968 38 00 00 05 */ li r0, 0x5 +/* 00010BDC 0001D96C 3B C9 00 00 */ addi r30, r9, CameraImpcatCurveV@l +/* 00010BE0 0001D970 90 01 01 48 */ stw r0, 0x148(r1) +/* 00010BE4 0001D974 7F A3 EB 78 */ mr r3, r29 +/* 00010BE8 0001D978 FC 40 F8 90 */ fmr f2, f31 +/* 00010BEC 0001D97C 48 00 00 01 */ bl SetMinMax__9TableBaseff +/* 00010BF0 0001D980 C1 BF 00 E0 */ lfs f13, 0xe0(r31) +/* 00010BF4 0001D984 C0 01 01 4C */ lfs f0, 0x14c(r1) +/* 00010BF8 0001D988 39 01 01 B4 */ addi r8, r1, 0x1b4 +/* 00010BFC 0001D98C C1 81 01 54 */ lfs f12, 0x154(r1) +/* 00010C00 0001D990 ED AD 00 28 */ fsubs f13, f13, f0 +/* 00010C04 0001D994 80 81 01 48 */ lwz r4, 0x148(r1) +/* 00010C08 0001D998 EC 2C 03 72 */ fmuls f1, f12, f13 +/* 00010C0C 0001D99C 93 C1 01 58 */ stw r30, 0x158(r1) +/* 00010C10 0001D9A0 FC 00 08 90 */ fmr f0, f1 +/* 00010C14 0001D9A4 FD 60 00 1E */ fctiwz f11, f0 +/* 00010C18 0001D9A8 D9 61 01 C0 */ stfd f11, 0x1c0(r1) +/* 00010C1C 0001D9AC 80 C1 01 C4 */ lwz r6, 0x1c4(r1) +/* 00010C20 0001D9B0 2C 06 00 00 */ cmpwi r6, 0x0 +/* 00010C24 0001D9B4 40 80 0C 3C */ bge .L_00011860 +/* 00010C28 0001D9B8 7D 03 43 78 */ mr r3, r8 +/* 00010C2C 0001D9BC 7F C4 F3 78 */ mr r4, r30 +/* 00010C30 0001D9C0 38 A0 00 04 */ li r5, 0x4 +/* 00010C34 0001D9C4 48 00 00 01 */ bl bMemCpy +.L_00010C38: +/* 00010C38 0001D9C8 48 01 0C B8 */ b .text+0x10CB8 +/* 00010C3C 0001D9CC 38 04 FF FF */ subi r0, r4, 0x1 +/* 00010C40 0001D9D0 7C 06 00 00 */ cmpw r6, r0 +/* 00010C44 0001D9D4 41 80 0C 64 */ blt .L_000118A8 +/* 00010C48 0001D9D8 54 84 10 3A */ slwi r4, r4, 2 +/* 00010C4C 0001D9DC 7D 03 43 78 */ mr r3, r8 +/* 00010C50 0001D9E0 38 84 FF FC */ subi r4, r4, 0x4 +/* 00010C54 0001D9E4 38 A0 00 04 */ li r5, 0x4 +/* 00010C58 0001D9E8 7C 84 F2 14 */ add r4, r4, r30 +/* 00010C5C 0001D9EC 48 00 00 01 */ bl bMemCpy +/* 00010C60 0001D9F0 48 01 0C B8 */ b .text+0x10CB8 +/* 00010C64 0001D9F4 6C C0 80 00 */ xoris r0, r6, 0x8000 +/* 00010C68 0001D9F8 90 01 01 C4 */ stw r0, 0x1c4(r1) +/* 00010C6C 0001D9FC 3D 60 43 30 */ lis r11, 0x4330 +/* 00010C70 0001DA00 3D 40 00 00 */ lis r10, .rodata+0x9C8@ha +/* 00010C74 0001DA04 91 61 01 C0 */ stw r11, 0x1c0(r1) +/* 00010C78 0001DA08 C9 AA 09 C8 */ lfd f13, .rodata+0x9C8@l(r10) +/* 00010C7C 0001DA0C C8 01 01 C0 */ lfd f0, 0x1c0(r1) +/* 00010C80 0001DA10 FC 00 68 28 */ fsub f0, f0, f13 +/* 00010C84 0001DA14 FC 00 00 18 */ frsp f0, f0 +/* 00010C88 0001DA18 FC 00 08 00 */ fcmpu cr0, f0, f1 +/* 00010C8C 0001DA1C 4C 62 03 82 */ cror un, eq, lt +.L_00010C90: +/* 00010C90 0001DA20 41 83 0C 98 */ bso .L_00011928 +/* 00010C94 0001DA24 EC 00 F8 28 */ fsubs f0, f0, f31 +/* 00010C98 0001DA28 54 C6 10 3A */ slwi r6, r6, 2 +/* 00010C9C 0001DA2C EC 21 00 28 */ fsubs f1, f1, f0 +.L_00010CA0: +/* 00010CA0 0001DA30 38 A6 00 04 */ addi r5, r6, 0x4 +/* 00010CA4 0001DA34 7F A3 EB 78 */ mr r3, r29 +/* 00010CA8 0001DA38 7C C6 F2 14 */ add r6, r6, r30 +/* 00010CAC 0001DA3C 7D 04 43 78 */ mr r4, r8 +/* 00010CB0 0001DA40 7C A5 F2 14 */ add r5, r5, r30 +.L_00010CB4: +/* 00010CB4 0001DA44 48 00 0F F5 */ bl .L_00011CA8 +/* 00010CB8 0001DA48 C0 1F 00 D8 */ lfs f0, 0xd8(r31) +/* 00010CBC 0001DA4C 3D 20 00 00 */ lis r9, .rodata+0x9E0@ha +/* 00010CC0 0001DA50 C1 61 01 B4 */ lfs f11, 0x1b4(r1) +/* 00010CC4 0001DA54 3D 60 00 00 */ lis r11, .rodata+0x9C0@ha +.L_00010CC8: +/* 00010CC8 0001DA58 C1 49 09 E0 */ lfs f10, .rodata+0x9E0@l(r9) +/* 00010CCC 0001DA5C 3D 40 00 00 */ lis r10, .rodata+0x9B8@ha +/* 00010CD0 0001DA60 ED 6B 00 32 */ fmuls f11, f11, f0 +/* 00010CD4 0001DA64 C1 AB 09 C0 */ lfs f13, .rodata+0x9C0@l(r11) +/* 00010CD8 0001DA68 C1 81 01 30 */ lfs f12, 0x130(r1) +/* 00010CDC 0001DA6C ED 6B 02 B2 */ fmuls f11, f11, f10 +/* 00010CE0 0001DA70 C0 1F 00 E0 */ lfs f0, 0xe0(r31) +/* 00010CE4 0001DA74 ED AD 58 28 */ fsubs f13, f13, f11 +/* 00010CE8 0001DA78 C1 4A 09 B8 */ lfs f10, .rodata+0x9B8@l(r10) +/* 00010CEC 0001DA7C ED 8C 03 72 */ fmuls f12, f12, f13 +/* 00010CF0 0001DA80 EC 00 D8 28 */ fsubs f0, f0, f27 +/* 00010CF4 0001DA84 D1 81 01 30 */ stfs f12, 0x130(r1) +/* 00010CF8 0001DA88 FC 00 50 00 */ fcmpu cr0, f0, f10 +/* 00010CFC 0001DA8C D0 1F 00 E0 */ stfs f0, 0xe0(r31) +/* 00010D00 0001DA90 41 81 0D 10 */ bgt .L_00011A10 +/* 00010D04 0001DA94 3D 20 00 00 */ lis r9, .rodata+0x9B8@ha +/* 00010D08 0001DA98 C0 09 09 B8 */ lfs f0, .rodata+0x9B8@l(r9) +.L_00010D0C: +/* 00010D0C 0001DA9C D0 1F 00 D8 */ stfs f0, 0xd8(r31) +/* 00010D10 0001DAA0 2C 1B 00 00 */ cmpwi r27, 0x0 +.L_00010D14: +/* 00010D14 0001DAA4 40 82 0E D0 */ bne .L_00011BE4 +/* 00010D18 0001DAA8 3D 20 00 00 */ lis r9, WorldTimer@ha +/* 00010D1C 0001DAAC 80 1F 00 BC */ lwz r0, 0xbc(r31) +.L_00010D20: +/* 00010D20 0001DAB0 81 09 00 00 */ lwz r8, WorldTimer@l(r9) +/* 00010D24 0001DAB4 3F 80 43 30 */ lis r28, 0x4330 +.L_00010D28: +/* 00010D28 0001DAB8 3D 20 00 00 */ lis r9, .rodata+0x9C8@ha +/* 00010D2C 0001DABC 7C 00 40 50 */ subf r0, r0, r8 +/* 00010D30 0001DAC0 CB 89 09 C8 */ lfd f28, .rodata+0x9C8@l(r9) +/* 00010D34 0001DAC4 6C 00 80 00 */ xoris r0, r0, 0x8000 +/* 00010D38 0001DAC8 3D 20 00 00 */ lis r9, .rodata+0x9E4@ha +/* 00010D3C 0001DACC 90 01 01 C4 */ stw r0, 0x1c4(r1) +/* 00010D40 0001DAD0 3D 40 00 00 */ lis r10, .rodata+0x9C0@ha +/* 00010D44 0001DAD4 C1 A9 09 E4 */ lfs f13, .rodata+0x9E4@l(r9) +/* 00010D48 0001DAD8 93 81 01 C0 */ stw r28, 0x1c0(r1) +/* 00010D4C 0001DADC C3 AA 09 C0 */ lfs f29, .rodata+0x9C0@l(r10) +/* 00010D50 0001DAE0 C8 01 01 C0 */ lfd f0, 0x1c0(r1) +/* 00010D54 0001DAE4 FC 00 E0 28 */ fsub f0, f0, f28 +/* 00010D58 0001DAE8 FC 00 00 18 */ frsp f0, f0 +.L_00010D5C: +/* 00010D5C 0001DAEC EF E0 03 72 */ fmuls f31, f0, f13 +/* 00010D60 0001DAF0 FC 1F E8 00 */ fcmpu cr0, f31, f29 +/* 00010D64 0001DAF4 41 80 0D 98 */ blt .L_00011AFC +/* 00010D68 0001DAF8 81 7F 00 80 */ lwz r11, 0x80(r31) +.L_00010D6C: +/* 00010D6C 0001DAFC 3D 20 00 00 */ lis r9, .rodata+0x9E8@ha +/* 00010D70 0001DB00 C1 A9 09 E8 */ lfs f13, .rodata+0x9E8@l(r9) +/* 00010D74 0001DB04 C0 0B 00 10 */ lfs f0, 0x10(r11) +/* 00010D78 0001DB08 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00010D7C 0001DB0C 4C 62 03 82 */ cror un, eq, lt +/* 00010D80 0001DB10 41 83 0E D0 */ bso .L_00011C50 +/* 00010D84 0001DB14 80 0B 00 CC */ lwz r0, 0xcc(r11) +/* 00010D88 0001DB18 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00010D8C 0001DB1C 41 82 0E D0 */ beq .L_00011C5C +/* 00010D90 0001DB20 91 1F 00 BC */ stw r8, 0xbc(r31) +/* 00010D94 0001DB24 48 01 0E D0 */ b .text+0x10ED0 +/* 00010D98 0001DB28 3D 60 00 00 */ lis r11, .rodata+0x9B8@ha +/* 00010D9C 0001DB2C 3D 20 00 00 */ lis r9, CameraGearChangingCurve@ha +/* 00010DA0 0001DB30 C0 2B 09 B8 */ lfs f1, .rodata+0x9B8@l(r11) +/* 00010DA4 0001DB34 3B A1 01 48 */ addi r29, r1, 0x148 +/* 00010DA8 0001DB38 38 00 00 09 */ li r0, 0x9 +/* 00010DAC 0001DB3C 3B C9 00 00 */ addi r30, r9, CameraGearChangingCurve@l +/* 00010DB0 0001DB40 90 01 01 48 */ stw r0, 0x148(r1) +/* 00010DB4 0001DB44 7F A3 EB 78 */ mr r3, r29 +/* 00010DB8 0001DB48 FC 40 E8 90 */ fmr f2, f29 +.L_00010DBC: +/* 00010DBC 0001DB4C 48 00 00 01 */ bl SetMinMax__9TableBaseff +/* 00010DC0 0001DB50 C1 A1 01 4C */ lfs f13, 0x14c(r1) +/* 00010DC4 0001DB54 C1 61 01 54 */ lfs f11, 0x154(r1) +/* 00010DC8 0001DB58 39 61 01 B8 */ addi r11, r1, 0x1b8 +.L_00010DCC: +/* 00010DCC 0001DB5C ED BF 68 28 */ fsubs f13, f31, f13 +/* 00010DD0 0001DB60 80 81 01 48 */ lwz r4, 0x148(r1) +/* 00010DD4 0001DB64 EC 2B 03 72 */ fmuls f1, f11, f13 +/* 00010DD8 0001DB68 93 C1 01 58 */ stw r30, 0x158(r1) +/* 00010DDC 0001DB6C FC 00 08 90 */ fmr f0, f1 +/* 00010DE0 0001DB70 FD 80 00 1E */ fctiwz f12, f0 +/* 00010DE4 0001DB74 D9 81 01 C0 */ stfd f12, 0x1c0(r1) +/* 00010DE8 0001DB78 80 C1 01 C4 */ lwz r6, 0x1c4(r1) +/* 00010DEC 0001DB7C 2C 06 00 00 */ cmpwi r6, 0x0 +/* 00010DF0 0001DB80 40 80 0E 08 */ bge .L_00011BF8 +/* 00010DF4 0001DB84 7D 63 5B 78 */ mr r3, r11 +/* 00010DF8 0001DB88 7F C4 F3 78 */ mr r4, r30 +/* 00010DFC 0001DB8C 38 A0 00 04 */ li r5, 0x4 +/* 00010E00 0001DB90 48 00 00 01 */ bl bMemCpy +.L_00010E04: +/* 00010E04 0001DB94 48 01 0E 78 */ b .text+0x10E78 +/* 00010E08 0001DB98 38 04 FF FF */ subi r0, r4, 0x1 +/* 00010E0C 0001DB9C 7C 06 00 00 */ cmpw r6, r0 +/* 00010E10 0001DBA0 41 80 0E 30 */ blt .L_00011C40 +/* 00010E14 0001DBA4 54 84 10 3A */ slwi r4, r4, 2 +.L_00010E18: +/* 00010E18 0001DBA8 7D 63 5B 78 */ mr r3, r11 +/* 00010E1C 0001DBAC 38 84 FF FC */ subi r4, r4, 0x4 +/* 00010E20 0001DBB0 38 A0 00 04 */ li r5, 0x4 +/* 00010E24 0001DBB4 7C 84 F2 14 */ add r4, r4, r30 +/* 00010E28 0001DBB8 48 00 00 01 */ bl bMemCpy +/* 00010E2C 0001DBBC 48 01 0E 78 */ b .text+0x10E78 +.L_00010E30: +/* 00010E30 0001DBC0 6C C0 80 00 */ xoris r0, r6, 0x8000 +/* 00010E34 0001DBC4 90 01 01 C4 */ stw r0, 0x1c4(r1) +/* 00010E38 0001DBC8 93 81 01 C0 */ stw r28, 0x1c0(r1) +/* 00010E3C 0001DBCC C8 01 01 C0 */ lfd f0, 0x1c0(r1) +/* 00010E40 0001DBD0 FC 00 E0 28 */ fsub f0, f0, f28 +/* 00010E44 0001DBD4 FC 00 00 18 */ frsp f0, f0 +/* 00010E48 0001DBD8 FC 00 08 00 */ fcmpu cr0, f0, f1 +/* 00010E4C 0001DBDC 4C 62 03 82 */ cror un, eq, lt +/* 00010E50 0001DBE0 41 83 0E 58 */ bso .L_00011CA8 +/* 00010E54 0001DBE4 EC 00 E8 28 */ fsubs f0, f0, f29 +/* 00010E58 0001DBE8 54 C6 10 3A */ slwi r6, r6, 2 +/* 00010E5C 0001DBEC EC 21 00 28 */ fsubs f1, f1, f0 +/* 00010E60 0001DBF0 38 A6 00 04 */ addi r5, r6, 0x4 +/* 00010E64 0001DBF4 7F A3 EB 78 */ mr r3, r29 +/* 00010E68 0001DBF8 7C C6 F2 14 */ add r6, r6, r30 +/* 00010E6C 0001DBFC 7D 64 5B 78 */ mr r4, r11 +/* 00010E70 0001DC00 7C A5 F2 14 */ add r5, r5, r30 +.L_00010E74: +/* 00010E74 0001DC04 48 00 0F F5 */ bl .L_00011E68 +/* 00010E78 0001DC08 81 7F 00 80 */ lwz r11, 0x80(r31) +/* 00010E7C 0001DC0C 3D 20 00 00 */ lis r9, .rodata+0x9EC@ha +/* 00010E80 0001DC10 C1 89 09 EC */ lfs f12, .rodata+0x9EC@l(r9) +/* 00010E84 0001DC14 3D 40 00 00 */ lis r10, .rodata+0x9B8@ha +/* 00010E88 0001DC18 C0 0B 00 10 */ lfs f0, 0x10(r11) +/* 00010E8C 0001DC1C 3D 20 00 00 */ lis r9, .rodata+0x9C0@ha +/* 00010E90 0001DC20 C1 69 09 C0 */ lfs f11, .rodata+0x9C0@l(r9) +/* 00010E94 0001DC24 3D 60 00 00 */ lis r11, .rodata+0x9F0@ha +/* 00010E98 0001DC28 EC 00 03 32 */ fmuls f0, f0, f12 +/* 00010E9C 0001DC2C C1 AA 09 B8 */ lfs f13, .rodata+0x9B8@l(r10) +/* 00010EA0 0001DC30 FC 00 68 2E */ fsel f0, f0, f0, f13 +/* 00010EA4 0001DC34 C1 41 01 28 */ lfs f10, 0x128(r1) +/* 00010EA8 0001DC38 ED AB 00 28 */ fsubs f13, f11, f0 +/* 00010EAC 0001DC3C C1 2B 09 F0 */ lfs f9, .rodata+0x9F0@l(r11) +/* 00010EB0 0001DC40 FD AD 58 2E */ fsel f13, f13, f0, f11 +/* 00010EB4 0001DC44 C1 81 01 B8 */ lfs f12, 0x1b8(r1) +/* 00010EB8 0001DC48 ED 6B 68 28 */ fsubs f11, f11, f13 +/* 00010EBC 0001DC4C FC 00 52 10 */ fabs f0, f10 +/* 00010EC0 0001DC50 ED 8C 00 32 */ fmuls f12, f12, f0 +/* 00010EC4 0001DC54 ED 6B 02 72 */ fmuls f11, f11, f9 +/* 00010EC8 0001DC58 ED 8C 52 FA */ fmadds f12, f12, f11, f10 +/* 00010ECC 0001DC5C D1 81 01 28 */ stfs f12, 0x128(r1) +/* 00010ED0 0001DC60 2C 1B 00 00 */ cmpwi r27, 0x0 +/* 00010ED4 0001DC64 3B 80 00 00 */ li r28, 0x0 +/* 00010ED8 0001DC68 40 82 0F 8C */ bne .L_00011E64 +.L_00010EDC: +/* 00010EDC 0001DC6C 3D 20 00 00 */ lis r9, WorldTimer@ha +/* 00010EE0 0001DC70 81 5F 00 B8 */ lwz r10, 0xb8(r31) +/* 00010EE4 0001DC74 80 09 00 00 */ lwz r0, WorldTimer@l(r9) +/* 00010EE8 0001DC78 3C E0 43 30 */ lis r7, 0x4330 +/* 00010EEC 0001DC7C 3D 20 00 00 */ lis r9, .rodata+0x9C8@ha +/* 00010EF0 0001DC80 7C 0A 00 50 */ subf r0, r10, r0 +/* 00010EF4 0001DC84 C9 A9 09 C8 */ lfd f13, .rodata+0x9C8@l(r9) +/* 00010EF8 0001DC88 6C 00 80 00 */ xoris r0, r0, 0x8000 +/* 00010EFC 0001DC8C 3D 20 00 00 */ lis r9, .rodata+0x9E4@ha +/* 00010F00 0001DC90 90 01 01 C4 */ stw r0, 0x1c4(r1) +/* 00010F04 0001DC94 3D 40 00 00 */ lis r10, .rodata+0x9E0@ha +/* 00010F08 0001DC98 C1 29 09 E4 */ lfs f9, .rodata+0x9E4@l(r9) +/* 00010F0C 0001DC9C 3D 00 00 00 */ lis r8, .rodata+0x9B8@ha +/* 00010F10 0001DCA0 90 E1 01 C0 */ stw r7, 0x1c0(r1) +/* 00010F14 0001DCA4 3D 20 00 00 */ lis r9, .rodata+0x9F4@ha +/* 00010F18 0001DCA8 C1 4A 09 E0 */ lfs f10, .rodata+0x9E0@l(r10) +/* 00010F1C 0001DCAC 3C E0 00 00 */ lis r7, .rodata+0x9C0@ha +/* 00010F20 0001DCB0 C8 01 01 C0 */ lfd f0, 0x1c0(r1) +/* 00010F24 0001DCB4 C1 89 09 F4 */ lfs f12, .rodata+0x9F4@l(r9) +/* 00010F28 0001DCB8 FC 00 68 28 */ fsub f0, f0, f13 +/* 00010F2C 0001DCBC C1 08 09 B8 */ lfs f8, .rodata+0x9B8@l(r8) +/* 00010F30 0001DCC0 FC 00 00 18 */ frsp f0, f0 +/* 00010F34 0001DCC4 C1 67 09 C0 */ lfs f11, .rodata+0x9C0@l(r7) +/* 00010F38 0001DCC8 EC 00 02 72 */ fmuls f0, f0, f9 +/* 00010F3C 0001DCCC EC 00 02 B2 */ fmuls f0, f0, f10 +/* 00010F40 0001DCD0 FC 00 40 2E */ fsel f0, f0, f0, f8 +/* 00010F44 0001DCD4 ED AC 00 28 */ fsubs f13, f12, f0 +/* 00010F48 0001DCD8 FD AD 60 2E */ fsel f13, f13, f0, f12 +/* 00010F4C 0001DCDC ED 8C 68 28 */ fsubs f12, f12, f13 +/* 00010F50 0001DCE0 FC 0C 58 00 */ fcmpu cr0, f12, f11 +/* 00010F54 0001DCE4 4C 62 03 82 */ cror un, eq, lt +/* 00010F58 0001DCE8 41 83 0F 68 */ bso .L_00011EC0 +/* 00010F5C 0001DCEC 3D 20 00 00 */ lis r9, .rodata+0x9F8@ha +/* 00010F60 0001DCF0 C0 09 09 F8 */ lfs f0, .rodata+0x9F8@l(r9) +/* 00010F64 0001DCF4 ED 80 60 28 */ fsubs f12, f0, f12 +/* 00010F68 0001DCF8 3D 20 00 00 */ lis r9, .rodata+0x9FC@ha +/* 00010F6C 0001DCFC C1 A1 01 30 */ lfs f13, 0x130(r1) +/* 00010F70 0001DD00 C0 09 09 FC */ lfs f0, .rodata+0x9FC@l(r9) +/* 00010F74 0001DD04 FC 0C 40 00 */ fcmpu cr0, f12, f8 +/* 00010F78 0001DD08 EC 0C 68 3A */ fmadds f0, f12, f0, f13 +/* 00010F7C 0001DD0C D0 01 01 30 */ stfs f0, 0x130(r1) +/* 00010F80 0001DD10 4C 62 03 82 */ cror un, eq, lt +/* 00010F84 0001DD14 41 83 0F 8C */ bso .L_00011F10 +/* 00010F88 0001DD18 3B 80 00 01 */ li r28, 0x1 +/* 00010F8C 0001DD1C 3D 60 00 00 */ lis r11, .rodata+0x9B8@ha +/* 00010F90 0001DD20 81 3F 00 94 */ lwz r9, 0x94(r31) +/* 00010F94 0001DD24 C3 EB 09 B8 */ lfs f31, .rodata+0x9B8@l(r11) +/* 00010F98 0001DD28 EC 19 C0 2A */ fadds f0, f25, f24 +/* 00010F9C 0001DD2C 7F E3 FB 78 */ mr r3, r31 +/* 00010FA0 0001DD30 D3 E9 00 7C */ stfs f31, 0x7c(r9) +/* 00010FA4 0001DD34 D3 E9 00 24 */ stfs f31, 0x24(r9) +/* 00010FA8 0001DD38 D3 E9 00 50 */ stfs f31, 0x50(r9) +/* 00010FAC 0001DD3C 81 7F 00 84 */ lwz r11, 0x84(r31) +/* 00010FB0 0001DD40 D3 EB 00 24 */ stfs f31, 0x24(r11) +/* 00010FB4 0001DD44 81 3F 00 88 */ lwz r9, 0x88(r31) +/* 00010FB8 0001DD48 D3 E9 00 7C */ stfs f31, 0x7c(r9) +/* 00010FBC 0001DD4C D3 E9 00 24 */ stfs f31, 0x24(r9) +/* 00010FC0 0001DD50 D3 E9 00 50 */ stfs f31, 0x50(r9) +/* 00010FC4 0001DD54 81 7F 00 8C */ lwz r11, 0x8c(r31) +/* 00010FC8 0001DD58 D3 EB 00 7C */ stfs f31, 0x7c(r11) +/* 00010FCC 0001DD5C D3 EB 00 24 */ stfs f31, 0x24(r11) +/* 00010FD0 0001DD60 D3 EB 00 50 */ stfs f31, 0x50(r11) +/* 00010FD4 0001DD64 81 3F 00 90 */ lwz r9, 0x90(r31) +/* 00010FD8 0001DD68 D0 09 00 7C */ stfs f0, 0x7c(r9) +.L_00010FDC: +/* 00010FDC 0001DD6C D3 E9 00 24 */ stfs f31, 0x24(r9) +/* 00010FE0 0001DD70 D3 E9 00 50 */ stfs f31, 0x50(r9) +/* 00010FE4 0001DD74 48 00 3F 95 */ bl .L_00014F78 +/* 00010FE8 0001DD78 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00010FEC 0001DD7C 41 82 0F F8 */ beq .L_00011FE4 +/* 00010FF0 0001DD80 C0 01 00 08 */ lfs f0, 0x8(r1) +/* 00010FF4 0001DD84 EF C0 00 2A */ fadds f30, f0, f0 +/* 00010FF8 0001DD88 81 3F 00 88 */ lwz r9, 0x88(r31) +/* 00010FFC 0001DD8C FC 20 D8 90 */ fmr f1, f27 +/* 00011000 0001DD90 FC 40 F8 90 */ fmr f2, f31 +/* 00011004 0001DD94 D3 C9 00 7C */ stfs f30, 0x7c(r9) +/* 00011008 0001DD98 FC 60 F8 90 */ fmr f3, f31 +/* 0001100C 0001DD9C D3 C9 00 24 */ stfs f30, 0x24(r9) +.L_00011010: +/* 00011010 0001DDA0 D3 C9 00 50 */ stfs f30, 0x50(r9) +/* 00011014 0001DDA4 80 7F 00 94 */ lwz r3, 0x94(r31) +/* 00011018 0001DDA8 48 00 00 01 */ bl Update__8tCubic3Dfff +/* 0001101C 0001DDAC 80 7F 00 84 */ lwz r3, 0x84(r31) +/* 00011020 0001DDB0 FC 20 D8 90 */ fmr f1, f27 +/* 00011024 0001DDB4 FC 40 F8 90 */ fmr f2, f31 +.L_00011028: +/* 00011028 0001DDB8 FC 60 F8 90 */ fmr f3, f31 +/* 0001102C 0001DDBC 48 00 00 01 */ bl Update__8tCubic1Dfff +.L_00011030: +/* 00011030 0001DDC0 80 7F 00 88 */ lwz r3, 0x88(r31) +/* 00011034 0001DDC4 FC 20 D8 90 */ fmr f1, f27 +/* 00011038 0001DDC8 FC 40 F8 90 */ fmr f2, f31 +/* 0001103C 0001DDCC FC 60 F8 90 */ fmr f3, f31 +.L_00011040: +/* 00011040 0001DDD0 48 00 00 01 */ bl Update__8tCubic3Dfff +/* 00011044 0001DDD4 80 7F 00 8C */ lwz r3, 0x8c(r31) +/* 00011048 0001DDD8 FC 20 D8 90 */ fmr f1, f27 +/* 0001104C 0001DDDC FC 40 F8 90 */ fmr f2, f31 +/* 00011050 0001DDE0 FC 60 F8 90 */ fmr f3, f31 +/* 00011054 0001DDE4 48 00 00 01 */ bl Update__8tCubic3Dfff +/* 00011058 0001DDE8 80 7F 00 90 */ lwz r3, 0x90(r31) +/* 0001105C 0001DDEC FC 20 D8 90 */ fmr f1, f27 +/* 00011060 0001DDF0 FC 40 F8 90 */ fmr f2, f31 +/* 00011064 0001DDF4 FC 60 F8 90 */ fmr f3, f31 +/* 00011068 0001DDF8 48 00 00 01 */ bl Update__8tCubic3Dfff +/* 0001106C 0001DDFC A8 7A 00 00 */ lha r3, 0x0(r26) +/* 00011070 0001DE00 48 00 0F 8D */ bl .L_00011FFC +/* 00011074 0001DE04 81 3F 00 1C */ lwz r9, 0x1c(r31) +.L_00011078: +/* 00011078 0001DE08 7C 7B 1B 78 */ mr r27, r3 +/* 0001107C 0001DE0C 80 9F 00 80 */ lwz r4, 0x80(r31) +/* 00011080 0001DE10 38 69 00 40 */ addi r3, r9, 0x40 +/* 00011084 0001DE14 38 84 00 18 */ addi r4, r4, 0x18 +/* 00011088 0001DE18 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 +.L_0001108C: +/* 0001108C 0001DE1C 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha +/* 00011090 0001DE20 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) +/* 00011094 0001DE24 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00011098 0001DE28 40 82 10 A4 */ bne .L_0001213C +.L_0001109C: +/* 0001109C 0001DE2C 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 000110A0 0001DE30 D0 29 00 B0 */ stfs f1, 0xb0(r9) +/* 000110A4 0001DE34 80 1F 00 AC */ lwz r0, 0xac(r31) +/* 000110A8 0001DE38 FF A0 F8 90 */ fmr f29, f31 +/* 000110AC 0001DE3C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000110B0 0001DE40 40 82 10 DC */ bne .L_0001218C +/* 000110B4 0001DE44 80 19 00 00 */ lwz r0, _6Camera.StopUpdating@l(r25) +/* 000110B8 0001DE48 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000110BC 0001DE4C 40 82 10 D0 */ bne .L_0001218C +/* 000110C0 0001DE50 3D 20 00 00 */ lis r9, .rodata+0x9D4@ha +/* 000110C4 0001DE54 81 7F 00 1C */ lwz r11, 0x1c(r31) +/* 000110C8 0001DE58 C0 09 09 D4 */ lfs f0, .rodata+0x9D4@l(r9) +/* 000110CC 0001DE5C D0 0B 00 B4 */ stfs f0, 0xb4(r11) +/* 000110D0 0001DE60 3D 20 00 00 */ lis r9, .rodata+0x9D8@ha +/* 000110D4 0001DE64 C3 A9 09 D8 */ lfs f29, .rodata+0x9D8@l(r9) +/* 000110D8 0001DE68 48 01 10 F0 */ b .text+0x110F0 +/* 000110DC 0001DE6C 80 19 00 00 */ lwz r0, _6Camera.StopUpdating@l(r25) +/* 000110E0 0001DE70 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000110E4 0001DE74 40 82 11 08 */ bne .L_000121EC +/* 000110E8 0001DE78 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 000110EC 0001DE7C D3 A9 00 B4 */ stfs f29, 0xb4(r9) +/* 000110F0 0001DE80 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha +/* 000110F4 0001DE84 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) +/* 000110F8 0001DE88 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000110FC 0001DE8C 40 82 11 08 */ bne .L_00012204 +/* 00011100 0001DE90 81 3F 00 1C */ lwz r9, 0x1c(r31) +.L_00011104: +/* 00011104 0001DE94 D3 A9 00 B8 */ stfs f29, 0xb8(r9) +/* 00011108 0001DE98 3D 20 00 00 */ lis r9, _11GRaceStatus.fObj@ha +/* 0001110C 0001DE9C 38 00 00 01 */ li r0, 0x1 +/* 00011110 0001DEA0 80 69 00 00 */ lwz r3, _11GRaceStatus.fObj@l(r9) +/* 00011114 0001DEA4 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00011118 0001DEA8 40 82 11 20 */ bne .L_00012238 +/* 0001111C 0001DEAC 38 00 00 00 */ li r0, 0x0 +/* 00011120 0001DEB0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00011124 0001DEB4 41 82 12 30 */ beq .L_00012354 +/* 00011128 0001DEB8 81 3F 00 80 */ lwz r9, 0x80(r31) +/* 0001112C 0001DEBC 80 09 00 BC */ lwz r0, 0xbc(r9) +/* 00011130 0001DEC0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00011134 0001DEC4 41 82 12 30 */ beq .L_00012364 +/* 00011138 0001DEC8 48 00 00 01 */ bl GetRaceTimeElapsed__C11GRaceStatus +/* 0001113C 0001DECC 3D 20 00 00 */ lis r9, .rodata+0x9B8@ha +/* 00011140 0001DED0 C0 09 09 B8 */ lfs f0, .rodata+0x9B8@l(r9) +/* 00011144 0001DED4 FC 01 00 00 */ fcmpu cr0, f1, f0 +/* 00011148 0001DED8 4C 62 0B 82 */ cror un, eq, gt +/* 0001114C 0001DEDC 41 83 12 30 */ bso .L_0001237C +/* 00011150 0001DEE0 81 7F 00 80 */ lwz r11, 0x80(r31) +/* 00011154 0001DEE4 3D 20 00 00 */ lis r9, .rodata+0x9F0@ha +/* 00011158 0001DEE8 C1 69 09 F0 */ lfs f11, .rodata+0x9F0@l(r9) +/* 0001115C 0001DEEC FD 40 08 50 */ fneg f10, f1 +/* 00011160 0001DEF0 C0 0B 00 00 */ lfs f0, 0x0(r11) +/* 00011164 0001DEF4 38 81 01 A0 */ addi r4, r1, 0x1a0 +/* 00011168 0001DEF8 C1 AB 00 04 */ lfs f13, 0x4(r11) +/* 0001116C 0001DEFC ED 6A 02 F2 */ fmuls f11, f10, f11 +/* 00011170 0001DF00 C1 8B 00 08 */ lfs f12, 0x8(r11) +/* 00011174 0001DF04 ED 00 02 F2 */ fmuls f8, f0, f11 +/* 00011178 0001DF08 ED 2D 02 F2 */ fmuls f9, f13, f11 +/* 0001117C 0001DF0C D0 01 01 48 */ stfs f0, 0x148(r1) +/* 00011180 0001DF10 D1 A1 01 4C */ stfs f13, 0x14c(r1) +/* 00011184 0001DF14 ED 6C 02 F2 */ fmuls f11, f12, f11 +/* 00011188 0001DF18 D1 81 01 50 */ stfs f12, 0x150(r1) +/* 0001118C 0001DF1C 38 61 01 70 */ addi r3, r1, 0x170 +/* 00011190 0001DF20 C1 8B 00 60 */ lfs f12, 0x60(r11) +/* 00011194 0001DF24 C0 0B 00 58 */ lfs f0, 0x58(r11) +/* 00011198 0001DF28 C1 AB 00 5C */ lfs f13, 0x5c(r11) +/* 0001119C 0001DF2C ED 8C 02 B2 */ fmuls f12, f12, f10 +/* 000111A0 0001DF30 EC 00 02 B2 */ fmuls f0, f0, f10 +/* 000111A4 0001DF34 D1 81 01 88 */ stfs f12, 0x188(r1) +/* 000111A8 0001DF38 ED AD 02 B2 */ fmuls f13, f13, f10 +/* 000111AC 0001DF3C D0 01 01 80 */ stfs f0, 0x180(r1) +/* 000111B0 0001DF40 D1 A1 01 84 */ stfs f13, 0x184(r1) +.L_000111B4: +/* 000111B4 0001DF44 EC 00 40 2A */ fadds f0, f0, f8 +/* 000111B8 0001DF48 ED AD 48 2A */ fadds f13, f13, f9 +/* 000111BC 0001DF4C D0 01 01 A0 */ stfs f0, 0x1a0(r1) +/* 000111C0 0001DF50 ED 8C 58 2A */ fadds f12, f12, f11 +/* 000111C4 0001DF54 D1 A1 01 A4 */ stfs f13, 0x1a4(r1) +/* 000111C8 0001DF58 D1 81 01 A8 */ stfs f12, 0x1a8(r1) +/* 000111CC 0001DF5C D1 21 01 94 */ stfs f9, 0x194(r1) +/* 000111D0 0001DF60 D1 61 01 98 */ stfs f11, 0x198(r1) +/* 000111D4 0001DF64 D1 01 01 90 */ stfs f8, 0x190(r1) +/* 000111D8 0001DF68 48 00 00 01 */ bl __8bVector3RC8bVector3 +/* 000111DC 0001DF6C C1 A1 01 70 */ lfs f13, 0x170(r1) +/* 000111E0 0001DF70 38 61 01 60 */ addi r3, r1, 0x160 +/* 000111E4 0001DF74 C1 81 01 74 */ lfs f12, 0x174(r1) +/* 000111E8 0001DF78 38 81 01 A0 */ addi r4, r1, 0x1a0 +/* 000111EC 0001DF7C C0 01 01 78 */ lfs f0, 0x178(r1) +/* 000111F0 0001DF80 C1 61 01 28 */ lfs f11, 0x128(r1) +/* 000111F4 0001DF84 C1 41 01 2C */ lfs f10, 0x12c(r1) +/* 000111F8 0001DF88 C1 21 01 30 */ lfs f9, 0x130(r1) +.L_000111FC: +/* 000111FC 0001DF8C ED AD 58 2A */ fadds f13, f13, f11 +/* 00011200 0001DF90 ED 8C 50 2A */ fadds f12, f12, f10 +/* 00011204 0001DF94 D1 A1 01 A0 */ stfs f13, 0x1a0(r1) +/* 00011208 0001DF98 EC 00 48 2A */ fadds f0, f0, f9 +/* 0001120C 0001DF9C D1 81 01 A4 */ stfs f12, 0x1a4(r1) +/* 00011210 0001DFA0 D0 01 01 A8 */ stfs f0, 0x1a8(r1) +/* 00011214 0001DFA4 48 00 00 01 */ bl __8bVector3RC8bVector3 +/* 00011218 0001DFA8 C0 01 01 60 */ lfs f0, 0x160(r1) +/* 0001121C 0001DFAC C1 A1 01 64 */ lfs f13, 0x164(r1) +.L_00011220: +/* 00011220 0001DFB0 C1 81 01 68 */ lfs f12, 0x168(r1) +/* 00011224 0001DFB4 D0 01 01 28 */ stfs f0, 0x128(r1) +/* 00011228 0001DFB8 D1 A1 01 2C */ stfs f13, 0x12c(r1) +/* 0001122C 0001DFBC D1 81 01 30 */ stfs f12, 0x130(r1) +/* 00011230 0001DFC0 C1 61 01 38 */ lfs f11, 0x138(r1) +/* 00011234 0001DFC4 38 81 01 58 */ addi r4, r1, 0x158 +/* 00011238 0001DFC8 C1 41 01 3C */ lfs f10, 0x13c(r1) +/* 0001123C 0001DFCC 38 61 01 48 */ addi r3, r1, 0x148 +/* 00011240 0001DFD0 C1 21 01 40 */ lfs f9, 0x140(r1) +/* 00011244 0001DFD4 C1 A1 01 28 */ lfs f13, 0x128(r1) +/* 00011248 0001DFD8 C1 81 01 2C */ lfs f12, 0x12c(r1) +/* 0001124C 0001DFDC C0 01 01 30 */ lfs f0, 0x130(r1) +.L_00011250: +/* 00011250 0001DFE0 ED AD 58 28 */ fsubs f13, f13, f11 +/* 00011254 0001DFE4 ED 8C 50 28 */ fsubs f12, f12, f10 +/* 00011258 0001DFE8 D1 A1 01 58 */ stfs f13, 0x158(r1) +/* 0001125C 0001DFEC EC 00 48 28 */ fsubs f0, f0, f9 +/* 00011260 0001DFF0 D1 81 01 5C */ stfs f12, 0x15c(r1) +.L_00011264: +/* 00011264 0001DFF4 D0 01 01 60 */ stfs f0, 0x160(r1) +/* 00011268 0001DFF8 48 00 00 01 */ bl __8bVector3RC8bVector3 +/* 0001126C 0001DFFC C1 21 01 48 */ lfs f9, 0x148(r1) +/* 00011270 0001E000 38 81 01 68 */ addi r4, r1, 0x168 +/* 00011274 0001E004 C1 41 01 4C */ lfs f10, 0x14c(r1) +/* 00011278 0001E008 38 61 01 58 */ addi r3, r1, 0x158 +/* 0001127C 0001E00C C1 61 01 50 */ lfs f11, 0x150(r1) +/* 00011280 0001E010 ED 29 06 B2 */ fmuls f9, f9, f26 +.L_00011284: +/* 00011284 0001E014 C1 A1 01 38 */ lfs f13, 0x138(r1) +/* 00011288 0001E018 ED 4A 06 B2 */ fmuls f10, f10, f26 +/* 0001128C 0001E01C C1 81 01 3C */ lfs f12, 0x13c(r1) +/* 00011290 0001E020 ED 6B 06 B2 */ fmuls f11, f11, f26 +/* 00011294 0001E024 C0 01 01 40 */ lfs f0, 0x140(r1) +/* 00011298 0001E028 ED AD 48 2A */ fadds f13, f13, f9 +/* 0001129C 0001E02C ED 8C 50 2A */ fadds f12, f12, f10 +/* 000112A0 0001E030 D1 A1 01 68 */ stfs f13, 0x168(r1) +/* 000112A4 0001E034 EC 00 58 2A */ fadds f0, f0, f11 +/* 000112A8 0001E038 D1 81 01 6C */ stfs f12, 0x16c(r1) +/* 000112AC 0001E03C D0 01 01 70 */ stfs f0, 0x170(r1) +/* 000112B0 0001E040 D1 61 01 50 */ stfs f11, 0x150(r1) +/* 000112B4 0001E044 D1 21 01 48 */ stfs f9, 0x148(r1) +.L_000112B8: +/* 000112B8 0001E048 D1 41 01 4C */ stfs f10, 0x14c(r1) +/* 000112BC 0001E04C 48 00 00 01 */ bl __8bVector3RC8bVector3 +/* 000112C0 0001E050 C0 01 01 60 */ lfs f0, 0x160(r1) +.L_000112C4: +/* 000112C4 0001E054 C1 61 01 58 */ lfs f11, 0x158(r1) +/* 000112C8 0001E058 C1 A1 01 5C */ lfs f13, 0x15c(r1) +/* 000112CC 0001E05C D1 61 01 28 */ stfs f11, 0x128(r1) +/* 000112D0 0001E060 D1 A1 01 2C */ stfs f13, 0x12c(r1) +/* 000112D4 0001E064 D0 01 01 30 */ stfs f0, 0x130(r1) +/* 000112D8 0001E068 D1 61 01 38 */ stfs f11, 0x138(r1) +/* 000112DC 0001E06C D1 A1 01 3C */ stfs f13, 0x13c(r1) +/* 000112E0 0001E070 D0 01 01 40 */ stfs f0, 0x140(r1) +/* 000112E4 0001E074 81 3F 00 84 */ lwz r9, 0x84(r31) +/* 000112E8 0001E078 C0 09 00 00 */ lfs f0, 0x0(r9) +/* 000112EC 0001E07C FD 80 00 1E */ fctiwz f12, f0 +/* 000112F0 0001E080 D9 81 01 C0 */ stfd f12, 0x1c0(r1) +/* 000112F4 0001E084 83 C1 01 C4 */ lwz r30, 0x1c4(r1) +/* 000112F8 0001E088 57 DE FC 7E */ extrwi r30, r30, 15, 16 +/* 000112FC 0001E08C 7F C3 F3 78 */ mr r3, r30 +.L_00011300: +/* 00011300 0001E090 48 00 00 01 */ bl bSin__FUs +/* 00011304 0001E094 FF E0 08 90 */ fmr f31, f1 +/* 00011308 0001E098 7F C3 F3 78 */ mr r3, r30 +/* 0001130C 0001E09C 48 00 00 01 */ bl bCos__FUs +/* 00011310 0001E0A0 EF FF 08 24 */ fdivs f31, f31, f1 +/* 00011314 0001E0A4 3D 20 00 00 */ lis r9, .rodata+0x9C0@ha +/* 00011318 0001E0A8 C0 29 09 C0 */ lfs f1, .rodata+0x9C0@l(r9) +.L_0001131C: +/* 0001131C 0001E0AC FC 40 F8 90 */ fmr f2, f31 +/* 00011320 0001E0B0 48 00 00 01 */ bl bATan__Fff +/* 00011324 0001E0B4 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha +/* 00011328 0001E0B8 54 6B 0C 3C */ clrlslwi r11, r3, 17, 1 +/* 0001132C 0001E0BC 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) +/* 00011330 0001E0C0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00011334 0001E0C4 40 82 13 40 */ bne .L_00012674 +/* 00011338 0001E0C8 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 0001133C 0001E0CC B1 69 00 C4 */ sth r11, 0xc4(r9) +/* 00011340 0001E0D0 3B C1 01 58 */ addi r30, r1, 0x158 +/* 00011344 0001E0D4 38 A1 01 38 */ addi r5, r1, 0x138 +/* 00011348 0001E0D8 38 81 01 28 */ addi r4, r1, 0x128 +.L_0001134C: +/* 0001134C 0001E0DC 38 C1 00 D8 */ addi r6, r1, 0xd8 +/* 00011350 0001E0E0 7F C3 F3 78 */ mr r3, r30 +/* 00011354 0001E0E4 7F DD F3 78 */ mr r29, r30 +/* 00011358 0001E0E8 48 00 00 01 */ bl eCreateLookAtMatrix__FP8bMatrix4R8bVector3N21 +/* 0001135C 0001E0EC 38 60 00 00 */ li r3, 0x0 +/* 00011360 0001E0F0 7F C4 F3 78 */ mr r4, r30 +/* 00011364 0001E0F4 48 00 00 01 */ bl ApplyCameraShake__FiP8bMatrix4 +/* 00011368 0001E0F8 80 1F 00 9C */ lwz r0, 0x9c(r31) +/* 0001136C 0001E0FC 3D 20 00 00 */ lis r9, PovHandheldNoiseScale@ha +/* 00011370 0001E100 39 29 00 00 */ addi r9, r9, PovHandheldNoiseScale@l +/* 00011374 0001E104 7F E3 FB 78 */ mr r3, r31 +/* 00011378 0001E108 54 00 10 3A */ slwi r0, r0, 2 +/* 0001137C 0001E10C 7F C4 F3 78 */ mr r4, r30 +/* 00011380 0001E110 7C 29 04 2E */ lfsx f1, r9, r0 +/* 00011384 0001E114 38 A0 00 01 */ li r5, 0x1 +/* 00011388 0001E118 48 00 28 49 */ bl .L_00013BD0 +/* 0001138C 0001E11C 3C 60 00 00 */ lis r3, eViews@ha +/* 00011390 0001E120 38 80 00 01 */ li r4, 0x1 +/* 00011394 0001E124 38 63 00 00 */ addi r3, r3, eViews@l +.L_00011398: +/* 00011398 0001E128 48 00 00 01 */ bl AmIinATunnel__FP5eViewi +/* 0001139C 0001E12C 2C 03 00 00 */ cmpwi r3, 0x0 +.L_000113A0: +/* 000113A0 0001E130 40 82 14 08 */ bne .L_000127A8 +/* 000113A4 0001E134 81 7F 00 80 */ lwz r11, 0x80(r31) +/* 000113A8 0001E138 3D 20 00 00 */ lis r9, .rodata+0x9EC@ha +/* 000113AC 0001E13C C1 89 09 EC */ lfs f12, .rodata+0x9EC@l(r9) +/* 000113B0 0001E140 3D 40 00 00 */ lis r10, .rodata+0x9B8@ha +/* 000113B4 0001E144 C0 0B 00 10 */ lfs f0, 0x10(r11) +/* 000113B8 0001E148 3D 00 00 00 */ lis r8, .rodata+0x9F0@ha +/* 000113BC 0001E14C C0 38 09 C0 */ lfs f1, .rodata+0x9C0@l(r24) +/* 000113C0 0001E150 3D 20 00 00 */ lis r9, PovHandheldChopperScale@ha +/* 000113C4 0001E154 EC 00 03 32 */ fmuls f0, f0, f12 +/* 000113C8 0001E158 C1 AA 09 B8 */ lfs f13, .rodata+0x9B8@l(r10) +/* 000113CC 0001E15C FC 00 68 2E */ fsel f0, f0, f0, f13 +.L_000113D0: +/* 000113D0 0001E160 80 1F 00 9C */ lwz r0, 0x9c(r31) +/* 000113D4 0001E164 ED A1 00 28 */ fsubs f13, f1, f0 +/* 000113D8 0001E168 C1 88 09 F0 */ lfs f12, .rodata+0x9F0@l(r8) +/* 000113DC 0001E16C FD AD 08 2E */ fsel f13, f13, f0, f1 +/* 000113E0 0001E170 39 29 00 00 */ addi r9, r9, PovHandheldChopperScale@l +/* 000113E4 0001E174 54 00 10 3A */ slwi r0, r0, 2 +/* 000113E8 0001E178 ED AD 03 32 */ fmuls f13, f13, f12 +/* 000113EC 0001E17C 7C 09 04 2E */ lfsx f0, r9, r0 +.L_000113F0: +/* 000113F0 0001E180 EC 21 68 28 */ fsubs f1, f1, f13 +/* 000113F4 0001E184 7F E3 FB 78 */ mr r3, r31 +/* 000113F8 0001E188 7F A4 EB 78 */ mr r4, r29 +/* 000113FC 0001E18C EC 20 00 72 */ fmuls f1, f0, f1 +/* 00011400 0001E190 38 A0 00 01 */ li r5, 0x1 +/* 00011404 0001E194 48 00 29 7D */ bl .L_00013D80 +/* 00011408 0001E198 80 1F 00 9C */ lwz r0, 0x9c(r31) +/* 0001140C 0001E19C 3D 60 00 00 */ lis r11, PovVelocityNoiseScale@ha +/* 00011410 0001E1A0 3D 20 00 00 */ lis r9, PovTerrainNoiseScale@ha +.L_00011414: +/* 00011414 0001E1A4 39 6B 00 00 */ addi r11, r11, PovVelocityNoiseScale@l +/* 00011418 0001E1A8 54 00 10 3A */ slwi r0, r0, 2 +/* 0001141C 0001E1AC 39 29 00 00 */ addi r9, r9, PovTerrainNoiseScale@l +/* 00011420 0001E1B0 7C 49 04 2E */ lfsx f2, r9, r0 +/* 00011424 0001E1B4 7F E3 FB 78 */ mr r3, r31 +/* 00011428 0001E1B8 7C 2B 04 2E */ lfsx f1, r11, r0 +/* 0001142C 0001E1BC 7F A4 EB 78 */ mr r4, r29 +/* 00011430 0001E1C0 80 BF 00 80 */ lwz r5, 0x80(r31) +/* 00011434 0001E1C4 48 00 2C 65 */ bl .L_00014098 +/* 00011438 0001E1C8 2C 1B 00 00 */ cmpwi r27, 0x0 +/* 0001143C 0001E1CC 40 82 14 74 */ bne .L_000128B0 +/* 00011440 0001E1D0 80 BF 00 80 */ lwz r5, 0x80(r31) +/* 00011444 0001E1D4 7F E3 FB 78 */ mr r3, r31 +/* 00011448 0001E1D8 7F A4 EB 78 */ mr r4, r29 +/* 0001144C 0001E1DC 38 A5 00 18 */ addi r5, r5, 0x18 +/* 00011450 0001E1E0 48 00 3A F1 */ bl .L_00014F40 +/* 00011454 0001E1E4 2C 1C 00 00 */ cmpwi r28, 0x0 +/* 00011458 0001E1E8 40 82 14 74 */ bne .L_000128CC +/* 0001145C 0001E1EC 80 BF 00 80 */ lwz r5, 0x80(r31) +/* 00011460 0001E1F0 7F E3 FB 78 */ mr r3, r31 +/* 00011464 0001E1F4 7F A4 EB 78 */ mr r4, r29 +.L_00011468: +/* 00011468 0001E1F8 7C A6 2B 78 */ mr r6, r5 +/* 0001146C 0001E1FC 38 A5 00 18 */ addi r5, r5, 0x18 +/* 00011470 0001E200 48 00 38 D1 */ bl .L_00014D40 +/* 00011474 0001E204 80 7F 00 1C */ lwz r3, 0x1c(r31) +/* 00011478 0001E208 7F A4 EB 78 */ mr r4, r29 +/* 0001147C 0001E20C FC 20 D8 90 */ fmr f1, f27 +/* 00011480 0001E210 48 00 04 ED */ bl .L_0001196C +.L_00011484: +/* 00011484 0001E214 80 01 02 2C */ lwz r0, 0x22c(r1) +/* 00011488 0001E218 7C 08 03 A6 */ mtlr r0 +/* 0001148C 0001E21C BB 01 01 C8 */ lmw r24, 0x1c8(r1) +/* 00011490 0001E220 E3 01 01 E8 */ psq_l f24, 0x1e8(r1), 0, qr0 +/* 00011494 0001E224 E3 21 01 F0 */ psq_l f25, 0x1f0(r1), 0, qr0 +/* 00011498 0001E228 E3 41 01 F8 */ psq_l f26, 0x1f8(r1), 0, qr0 +/* 0001149C 0001E22C E3 61 02 00 */ psq_l f27, 0x200(r1), 0, qr0 +/* 000114A0 0001E230 E3 81 02 08 */ psq_l f28, 0x208(r1), 0, qr0 +/* 000114A4 0001E234 E3 A1 02 10 */ psq_l f29, 0x210(r1), 0, qr0 +.L_000114A8: +/* 000114A8 0001E238 E3 C1 02 18 */ psq_l f30, 0x218(r1), 0, qr0 +/* 000114AC 0001E23C E3 E1 02 20 */ psq_l f31, 0x220(r1), 0, qr0 +/* 000114B0 0001E240 38 21 02 28 */ addi r1, r1, 0x228 +/* 000114B4 0001E244 4E 80 00 20 */ blr +.endfn Update__16CubicCameraMoverf + +# .text:0x114B8 | size: 0x188 +# IsAnyCopNear(CameraAnchor*) +.fn IsAnyCopNear__FP12CameraAnchor, local +/* 000114B8 0001E248 94 21 FF 98 */ stwu r1, -0x68(r1) +.L_000114BC: +/* 000114BC 0001E24C 7C 08 02 A6 */ mflr r0 +/* 000114C0 0001E250 F3 C1 00 58 */ psq_st f30, 0x58(r1), 0, qr0 +/* 000114C4 0001E254 F3 E1 00 60 */ psq_st f31, 0x60(r1), 0, qr0 +/* 000114C8 0001E258 BF 01 00 38 */ stmw r24, 0x38(r1) +/* 000114CC 0001E25C 90 01 00 6C */ stw r0, 0x6c(r1) +/* 000114D0 0001E260 3D 60 00 00 */ lis r11, .rodata+0xA00@ha +/* 000114D4 0001E264 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@ha +/* 000114D8 0001E268 C3 CB 0A 00 */ lfs f30, .rodata+0xA00@l(r11) +/* 000114DC 0001E26C 39 29 00 00 */ addi r9, r9, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@l +/* 000114E0 0001E270 3D 60 00 00 */ lis r11, .rodata+0xA10@ha +/* 000114E4 0001E274 83 C9 00 E0 */ lwz r30, 0xe0(r9) +/* 000114E8 0001E278 C3 EB 0A 10 */ lfs f31, .rodata+0xA10@l(r11) +/* 000114EC 0001E27C 7D 3C 4B 78 */ mr r28, r9 +/* 000114F0 0001E280 7C 7D 1B 78 */ mr r29, r3 +/* 000114F4 0001E284 3B 61 00 08 */ addi r27, r1, 0x8 +/* 000114F8 0001E288 3F 00 00 00 */ lis r24, .rodata+0xA04@ha +/* 000114FC 0001E28C 3F 20 00 00 */ lis r25, .rodata+0xA08@ha +/* 00011500 0001E290 3F 40 00 00 */ lis r26, .rodata+0xA0C@ha +/* 00011504 0001E294 80 1C 00 E8 */ lwz r0, 0xe8(r28) +/* 00011508 0001E298 81 3C 00 E0 */ lwz r9, 0xe0(r28) +/* 0001150C 0001E29C 54 00 10 3A */ slwi r0, r0, 2 +/* 00011510 0001E2A0 7D 29 02 14 */ add r9, r9, r0 +/* 00011514 0001E2A4 7C 1E 48 00 */ cmpw r30, r9 +/* 00011518 0001E2A8 41 82 16 20 */ beq .L_00012B38 +/* 0001151C 0001E2AC 83 FE 00 00 */ lwz r31, 0x0(r30) +/* 00011520 0001E2B0 2C 1F 00 00 */ cmpwi r31, 0x0 +/* 00011524 0001E2B4 41 82 16 18 */ beq .L_00012B3C +/* 00011528 0001E2B8 81 3F 00 04 */ lwz r9, 0x4(r31) +.L_0001152C: +/* 0001152C 0001E2BC A8 69 01 18 */ lha r3, 0x118(r9) +/* 00011530 0001E2C0 80 09 01 1C */ lwz r0, 0x11c(r9) +/* 00011534 0001E2C4 7C 7F 1A 14 */ add r3, r31, r3 +/* 00011538 0001E2C8 7C 08 03 A6 */ mtlr r0 +/* 0001153C 0001E2CC 4E 80 00 21 */ blrl +/* 00011540 0001E2D0 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00011544 0001E2D4 41 82 16 18 */ beq .L_00012B5C +/* 00011548 0001E2D8 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 0001154C 0001E2DC A8 69 00 20 */ lha r3, 0x20(r9) +/* 00011550 0001E2E0 80 09 00 24 */ lwz r0, 0x24(r9) +/* 00011554 0001E2E4 7C 7F 1A 14 */ add r3, r31, r3 +.L_00011558: +/* 00011558 0001E2E8 7C 08 03 A6 */ mtlr r0 +/* 0001155C 0001E2EC 4E 80 00 21 */ blrl +/* 00011560 0001E2F0 C0 03 00 00 */ lfs f0, 0x0(r3) +/* 00011564 0001E2F4 C1 5D 00 1C */ lfs f10, 0x1c(r29) +/* 00011568 0001E2F8 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 0001156C 0001E2FC C0 F8 0A 04 */ lfs f7, .rodata+0xA04@l(r24) +/* 00011570 0001E300 C1 A3 00 04 */ lfs f13, 0x4(r3) +/* 00011574 0001E304 C1 9D 00 18 */ lfs f12, 0x18(r29) +/* 00011578 0001E308 C1 3D 00 20 */ lfs f9, 0x20(r29) +/* 0001157C 0001E30C D1 A1 00 0C */ stfs f13, 0xc(r1) +/* 00011580 0001E310 C1 19 0A 08 */ lfs f8, .rodata+0xA08@l(r25) +/* 00011584 0001E314 C0 03 00 08 */ lfs f0, 0x8(r3) +/* 00011588 0001E318 D0 1B 00 08 */ stfs f0, 0x8(r27) +/* 0001158C 0001E31C ED 80 60 28 */ fsubs f12, f0, f12 +/* 00011590 0001E320 D0 01 00 18 */ stfs f0, 0x18(r1) +/* 00011594 0001E324 C1 A1 00 08 */ lfs f13, 0x8(r1) +/* 00011598 0001E328 C0 01 00 0C */ lfs f0, 0xc(r1) +/* 0001159C 0001E32C FD A0 68 50 */ fneg f13, f13 +.L_000115A0: +/* 000115A0 0001E330 D1 81 00 28 */ stfs f12, 0x28(r1) +/* 000115A4 0001E334 ED 4D 50 28 */ fsubs f10, f13, f10 +/* 000115A8 0001E338 D0 01 00 20 */ stfs f0, 0x20(r1) +/* 000115AC 0001E33C ED 6A 02 B2 */ fmuls f11, f10, f10 +/* 000115B0 0001E340 D1 A1 00 1C */ stfs f13, 0x1c(r1) +.L_000115B4: +/* 000115B4 0001E344 EC 00 48 28 */ fsubs f0, f0, f9 +/* 000115B8 0001E348 D1 41 00 2C */ stfs f10, 0x2c(r1) +/* 000115BC 0001E34C ED 8C 5B 3A */ fmadds f12, f12, f12, f11 +/* 000115C0 0001E350 D0 01 00 30 */ stfs f0, 0x30(r1) +/* 000115C4 0001E354 ED 60 60 3A */ fmadds f11, f0, f0, f12 +/* 000115C8 0001E358 FC 0B F0 00 */ fcmpu cr0, f11, f30 +/* 000115CC 0001E35C 4C 62 03 82 */ cror un, eq, lt +/* 000115D0 0001E360 41 83 16 00 */ bso .L_00012BD0 +/* 000115D4 0001E364 FC 00 58 34 */ frsqrte f0, f11 +.L_000115D8: +/* 000115D8 0001E368 ED A0 00 32 */ fmuls f13, f0, f0 +.L_000115DC: +/* 000115DC 0001E36C ED 80 01 F2 */ fmuls f12, f0, f7 +.L_000115E0: +/* 000115E0 0001E370 ED AB 43 7C */ fnmsubs f13, f11, f13, f8 +/* 000115E4 0001E374 EC 0D 03 3A */ fmadds f0, f13, f12, f0 +/* 000115E8 0001E378 ED A0 00 32 */ fmuls f13, f0, f0 +/* 000115EC 0001E37C ED 80 01 F2 */ fmuls f12, f0, f7 +/* 000115F0 0001E380 ED AB 43 7C */ fnmsubs f13, f11, f13, f8 +/* 000115F4 0001E384 EC 0D 03 3A */ fmadds f0, f13, f12, f0 +/* 000115F8 0001E388 EC 00 02 F2 */ fmuls f0, f0, f11 +.L_000115FC: +/* 000115FC 0001E38C 48 01 16 04 */ b .text+0x11604 +/* 00011600 0001E390 C0 1A 0A 0C */ lfs f0, .rodata+0xA0C@l(r26) +/* 00011604 0001E394 FC 00 F8 00 */ fcmpu cr0, f0, f31 +/* 00011608 0001E398 4C 62 0B 82 */ cror un, eq, gt +/* 0001160C 0001E39C 41 83 16 18 */ bso .L_00012C24 +.L_00011610: +/* 00011610 0001E3A0 38 60 00 01 */ li r3, 0x1 +/* 00011614 0001E3A4 48 01 16 24 */ b .text+0x11624 +/* 00011618 0001E3A8 3B DE 00 04 */ addi r30, r30, 0x4 +/* 0001161C 0001E3AC 48 01 15 04 */ b .text+0x11504 +.L_00011620: +/* 00011620 0001E3B0 38 60 00 00 */ li r3, 0x0 +/* 00011624 0001E3B4 80 01 00 6C */ lwz r0, 0x6c(r1) +/* 00011628 0001E3B8 7C 08 03 A6 */ mtlr r0 +/* 0001162C 0001E3BC BB 01 00 38 */ lmw r24, 0x38(r1) +/* 00011630 0001E3C0 E3 C1 00 58 */ psq_l f30, 0x58(r1), 0, qr0 +/* 00011634 0001E3C4 E3 E1 00 60 */ psq_l f31, 0x60(r1), 0, qr0 +/* 00011638 0001E3C8 38 21 00 68 */ addi r1, r1, 0x68 +/* 0001163C 0001E3CC 4E 80 00 20 */ blr +.endfn IsAnyCopNear__FP12CameraAnchor + +# .text:0x11640 | size: 0xD8 +# IsBeingPursued(int) +.fn IsBeingPursued__Fi, local +/* 00011640 0001E3D0 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 00011644 0001E3D4 7C 08 02 A6 */ mflr r0 +.L_00011648: +/* 00011648 0001E3D8 BF 61 00 0C */ stmw r27, 0xc(r1) +/* 0001164C 0001E3DC 90 01 00 24 */ stw r0, 0x24(r1) +/* 00011650 0001E3E0 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@ha +/* 00011654 0001E3E4 7C 7C 1B 78 */ mr r28, r3 +/* 00011658 0001E3E8 83 C9 00 00 */ lwz r30, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@l(r9) +/* 0001165C 0001E3EC 3B A9 00 00 */ addi r29, r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@l +/* 00011660 0001E3F0 3F 60 00 00 */ lis r27, _IHandle__12IPerpetrator@ha +/* 00011664 0001E3F4 80 1D 00 08 */ lwz r0, 0x8(r29) +/* 00011668 0001E3F8 81 3D 00 00 */ lwz r9, 0x0(r29) +/* 0001166C 0001E3FC 54 00 10 3A */ slwi r0, r0, 2 +.L_00011670: +/* 00011670 0001E400 7D 29 02 14 */ add r9, r9, r0 +/* 00011674 0001E404 7C 1E 48 00 */ cmpw r30, r9 +/* 00011678 0001E408 41 82 17 00 */ beq .L_00012D78 +/* 0001167C 0001E40C 83 FE 00 00 */ lwz r31, 0x0(r30) +/* 00011680 0001E410 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 00011684 0001E414 A8 69 00 50 */ lha r3, 0x50(r9) +/* 00011688 0001E418 80 09 00 54 */ lwz r0, 0x54(r9) +.L_0001168C: +/* 0001168C 0001E41C 7C 7F 1A 14 */ add r3, r31, r3 +/* 00011690 0001E420 7C 08 03 A6 */ mtlr r0 +/* 00011694 0001E424 4E 80 00 21 */ blrl +/* 00011698 0001E428 7C 03 E0 00 */ cmpw r3, r28 +/* 0001169C 0001E42C 41 82 16 A8 */ beq .L_00012D44 +/* 000116A0 0001E430 3B DE 00 04 */ addi r30, r30, 0x4 +/* 000116A4 0001E434 48 01 16 64 */ b .text+0x11664 +/* 000116A8 0001E438 81 3F 00 04 */ lwz r9, 0x4(r31) +.L_000116AC: +/* 000116AC 0001E43C A8 69 00 10 */ lha r3, 0x10(r9) +/* 000116B0 0001E440 80 09 00 14 */ lwz r0, 0x14(r9) +/* 000116B4 0001E444 7C 7F 1A 14 */ add r3, r31, r3 +/* 000116B8 0001E448 7C 08 03 A6 */ mtlr r0 +/* 000116BC 0001E44C 4E 80 00 21 */ blrl +/* 000116C0 0001E450 7C 63 1B 79 */ mr. r3, r3 +/* 000116C4 0001E454 41 82 17 00 */ beq .L_00012DC4 +/* 000116C8 0001E458 80 63 00 00 */ lwz r3, 0x0(r3) +.L_000116CC: +/* 000116CC 0001E45C 38 9B 00 00 */ addi r4, r27, _IHandle__12IPerpetrator@l +/* 000116D0 0001E460 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv +/* 000116D4 0001E464 7C 6B 1B 79 */ mr. r11, r3 +/* 000116D8 0001E468 41 82 17 00 */ beq .L_00012DD8 +/* 000116DC 0001E46C 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 000116E0 0001E470 A8 69 00 58 */ lha r3, 0x58(r9) +/* 000116E4 0001E474 80 09 00 5C */ lwz r0, 0x5c(r9) +/* 000116E8 0001E478 7C 6B 1A 14 */ add r3, r11, r3 +/* 000116EC 0001E47C 7C 08 03 A6 */ mtlr r0 +/* 000116F0 0001E480 4E 80 00 21 */ blrl +.L_000116F4: +/* 000116F4 0001E484 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000116F8 0001E488 38 60 00 01 */ li r3, 0x1 +/* 000116FC 0001E48C 40 82 17 04 */ bne .L_00012E00 +/* 00011700 0001E490 38 60 00 00 */ li r3, 0x0 +/* 00011704 0001E494 80 01 00 24 */ lwz r0, 0x24(r1) +/* 00011708 0001E498 7C 08 03 A6 */ mtlr r0 +/* 0001170C 0001E49C BB 61 00 0C */ lmw r27, 0xc(r1) +/* 00011710 0001E4A0 38 21 00 20 */ addi r1, r1, 0x20 +/* 00011714 0001E4A4 4E 80 00 20 */ blr +.endfn IsBeingPursued__Fi + +# .text:0x11718 | size: 0xE8 +# FixWorldHeight(UMath::Vector3*, int) +.fn FixWorldHeight__FPQ25UMath7Vector3i, local +/* 00011718 0001E4A8 94 21 FF C8 */ stwu r1, -0x38(r1) +/* 0001171C 0001E4AC 7C 08 02 A6 */ mflr r0 +/* 00011720 0001E4B0 BF A1 00 2C */ stmw r29, 0x2c(r1) +/* 00011724 0001E4B4 90 01 00 3C */ stw r0, 0x3c(r1) +/* 00011728 0001E4B8 3D 20 00 00 */ lis r9, TheGameFlowManager+0x20@ha +/* 0001172C 0001E4BC 7C 7F 1B 78 */ mr r31, r3 +.L_00011730: +/* 00011730 0001E4C0 80 09 00 20 */ lwz r0, TheGameFlowManager+0x20@l(r9) +/* 00011734 0001E4C4 7C 9D 23 78 */ mr r29, r4 +/* 00011738 0001E4C8 2C 00 00 06 */ cmpwi r0, 0x6 +/* 0001173C 0001E4CC 40 82 17 EC */ bne .L_00012F28 +/* 00011740 0001E4D0 3D 20 00 00 */ lis r9, .rodata+0xA14@ha +/* 00011744 0001E4D4 81 5F 00 00 */ lwz r10, 0x0(r31) +/* 00011748 0001E4D8 C0 09 0A 14 */ lfs f0, .rodata+0xA14@l(r9) +/* 0001174C 0001E4DC 39 61 00 08 */ addi r11, r1, 0x8 +/* 00011750 0001E4E0 80 1F 00 04 */ lwz r0, 0x4(r31) +/* 00011754 0001E4E4 3D 00 00 00 */ lis r8, .rodata+0xA18@ha +/* 00011758 0001E4E8 81 3F 00 08 */ lwz r9, 0x8(r31) +/* 0001175C 0001E4EC 38 E0 00 00 */ li r7, 0x0 +/* 00011760 0001E4F0 D0 01 00 20 */ stfs f0, 0x20(r1) +/* 00011764 0001E4F4 3B C0 00 03 */ li r30, 0x3 +/* 00011768 0001E4F8 91 41 00 08 */ stw r10, 0x8(r1) +/* 0001176C 0001E4FC 7D 64 5B 78 */ mr r4, r11 +/* 00011770 0001E500 90 0B 00 04 */ stw r0, 0x4(r11) +/* 00011774 0001E504 38 61 00 18 */ addi r3, r1, 0x18 +/* 00011778 0001E508 91 2B 00 08 */ stw r9, 0x8(r11) +/* 0001177C 0001E50C 38 A1 00 20 */ addi r5, r1, 0x20 +/* 00011780 0001E510 C1 A8 0A 18 */ lfs f13, .rodata+0xA18@l(r8) +/* 00011784 0001E514 38 C0 00 00 */ li r6, 0x0 +/* 00011788 0001E518 C0 01 00 0C */ lfs f0, 0xc(r1) +/* 0001178C 0001E51C 90 E1 00 18 */ stw r7, 0x18(r1) +/* 00011790 0001E520 EC 00 68 2A */ fadds f0, f0, f13 +/* 00011794 0001E524 93 C1 00 1C */ stw r30, 0x1c(r1) +/* 00011798 0001E528 D0 01 00 0C */ stfs f0, 0xc(r1) +/* 0001179C 0001E52C 48 00 00 01 */ bl GetWorldHeightAtPointRigorous__13WCollisionMgrRCQ25UMath7Vector3RfPQ25UMath7Vector3 +/* 000117A0 0001E530 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000117A4 0001E534 41 82 17 B8 */ beq .L_00012F5C +/* 000117A8 0001E538 2C 1D 00 03 */ cmpwi r29, 0x3 +/* 000117AC 0001E53C 40 82 17 B8 */ bne .L_00012F64 +/* 000117B0 0001E540 C0 01 00 20 */ lfs f0, 0x20(r1) +/* 000117B4 0001E544 D0 1F 00 04 */ stfs f0, 0x4(r31) +/* 000117B8 0001E548 C1 A1 00 20 */ lfs f13, 0x20(r1) +/* 000117BC 0001E54C C0 1F 00 04 */ lfs f0, 0x4(r31) +/* 000117C0 0001E550 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 000117C4 0001E554 4C 62 03 82 */ cror un, eq, lt +/* 000117C8 0001E558 41 83 17 D0 */ bso .L_00012F98 +/* 000117CC 0001E55C D1 BF 00 04 */ stfs f13, 0x4(r31) +/* 000117D0 0001E560 3D 20 00 00 */ lis r9, TrackCarEyeOffsetZ@ha +/* 000117D4 0001E564 57 A0 10 3A */ slwi r0, r29, 2 +/* 000117D8 0001E568 39 29 00 00 */ addi r9, r9, TrackCarEyeOffsetZ@l +/* 000117DC 0001E56C C0 1F 00 04 */ lfs f0, 0x4(r31) +/* 000117E0 0001E570 7D A9 04 2E */ lfsx f13, r9, r0 +/* 000117E4 0001E574 EC 00 68 2A */ fadds f0, f0, f13 +.L_000117E8: +/* 000117E8 0001E578 D0 1F 00 04 */ stfs f0, 0x4(r31) +/* 000117EC 0001E57C 80 01 00 3C */ lwz r0, 0x3c(r1) +/* 000117F0 0001E580 7C 08 03 A6 */ mtlr r0 +/* 000117F4 0001E584 BB A1 00 2C */ lmw r29, 0x2c(r1) +/* 000117F8 0001E588 38 21 00 38 */ addi r1, r1, 0x38 +/* 000117FC 0001E58C 4E 80 00 20 */ blr +.endfn FixWorldHeight__FPQ25UMath7Vector3i + +# .text:0x11800 | size: 0x1C +.fn CrossXY__FPC8bVector3T0, local +/* 00011800 0001E590 C0 23 00 04 */ lfs f1, 0x4(r3) +/* 00011804 0001E594 C1 A4 00 00 */ lfs f13, 0x0(r4) +/* 00011808 0001E598 C1 83 00 00 */ lfs f12, 0x0(r3) +.L_0001180C: +/* 0001180C 0001E59C C0 04 00 04 */ lfs f0, 0x4(r4) +/* 00011810 0001E5A0 EC 21 03 72 */ fmuls f1, f1, f13 +/* 00011814 0001E5A4 EC 2C 08 38 */ fmsubs f1, f12, f0, f1 +/* 00011818 0001E5A8 4E 80 00 20 */ blr +.endfn CrossXY__FPC8bVector3T0 + +# .text:0x1181C | size: 0x30 +.fn _._20SelectCarCameraMover, global +/* 0001181C 0001E5AC 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 00011820 0001E5B0 7C 08 02 A6 */ mflr r0 +/* 00011824 0001E5B4 90 01 00 0C */ stw r0, 0xc(r1) +/* 00011828 0001E5B8 3D 20 00 00 */ lis r9, _vt.20SelectCarCameraMover@ha +/* 0001182C 0001E5BC 7C 6B 1B 78 */ mr r11, r3 +/* 00011830 0001E5C0 39 29 00 00 */ addi r9, r9, _vt.20SelectCarCameraMover@l +/* 00011834 0001E5C4 91 2B 00 08 */ stw r9, 0x8(r11) +/* 00011838 0001E5C8 48 00 20 35 */ bl .L_0001386C +/* 0001183C 0001E5CC 80 01 00 0C */ lwz r0, 0xc(r1) +.L_00011840: +/* 00011840 0001E5D0 7C 08 03 A6 */ mtlr r0 +/* 00011844 0001E5D4 38 21 00 08 */ addi r1, r1, 0x8 +/* 00011848 0001E5D8 4E 80 00 20 */ blr +.endfn _._20SelectCarCameraMover + +# .text:0x1184C | size: 0xCC +.fn SetVRotateSpeed__20SelectCarCameraMoverf, global +/* 0001184C 0001E5DC 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 00011850 0001E5E0 7C 08 02 A6 */ mflr r0 +/* 00011854 0001E5E4 F3 E1 00 10 */ psq_st f31, 0x10(r1), 0, qr0 +.L_00011858: +/* 00011858 0001E5E8 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 0001185C 0001E5EC 90 01 00 1C */ stw r0, 0x1c(r1) +.L_00011860: +/* 00011860 0001E5F0 7C 7F 1B 78 */ mr r31, r3 +/* 00011864 0001E5F4 FF E0 08 90 */ fmr f31, f1 +/* 00011868 0001E5F8 80 1F 00 80 */ lwz r0, 0x80(r31) +/* 0001186C 0001E5FC 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00011870 0001E600 41 82 19 00 */ beq .L_00013170 +/* 00011874 0001E604 2C 00 00 01 */ cmpwi r0, 0x1 +/* 00011878 0001E608 41 82 18 F4 */ beq .L_0001316C +/* 0001187C 0001E60C 3D 20 00 00 */ lis r9, kSelectCarDefaultFOVV@ha +/* 00011880 0001E610 3F C0 00 00 */ lis r30, kSelectCarDefaultRollV@ha +/* 00011884 0001E614 3D 60 00 00 */ lis r11, kSelectCarDefaultLookAtZV@ha +/* 00011888 0001E618 C0 1E 00 00 */ lfs f0, kSelectCarDefaultRollV@l(r30) +/* 0001188C 0001E61C C1 09 00 00 */ lfs f8, kSelectCarDefaultFOVV@l(r9) +/* 00011890 0001E620 C0 EB 00 00 */ lfs f7, kSelectCarDefaultLookAtZV@l(r11) +/* 00011894 0001E624 FC 40 00 90 */ fmr f2, f0 +/* 00011898 0001E628 C1 3F 00 98 */ lfs f9, 0x98(r31) +/* 0001189C 0001E62C C1 BF 00 A4 */ lfs f13, 0xa4(r31) +/* 000118A0 0001E630 C1 5F 00 9C */ lfs f10, 0x9c(r31) +/* 000118A4 0001E634 FC 20 48 90 */ fmr f1, f9 +.L_000118A8: +/* 000118A8 0001E638 C1 7F 00 A0 */ lfs f11, 0xa0(r31) +/* 000118AC 0001E63C C1 9F 00 A8 */ lfs f12, 0xa8(r31) +/* 000118B0 0001E640 D1 BF 00 C8 */ stfs f13, 0xc8(r31) +/* 000118B4 0001E644 D0 1F 00 E0 */ stfs f0, 0xe0(r31) +/* 000118B8 0001E648 D0 1F 00 E8 */ stfs f0, 0xe8(r31) +/* 000118BC 0001E64C D0 1F 00 EC */ stfs f0, 0xec(r31) +/* 000118C0 0001E650 D1 5F 00 C0 */ stfs f10, 0xc0(r31) +.L_000118C4: +/* 000118C4 0001E654 D1 7F 00 C4 */ stfs f11, 0xc4(r31) +.L_000118C8: +/* 000118C8 0001E658 D1 9F 00 CC */ stfs f12, 0xcc(r31) +.L_000118CC: +/* 000118CC 0001E65C D1 1F 00 E4 */ stfs f8, 0xe4(r31) +.L_000118D0: +/* 000118D0 0001E660 D0 FF 00 F0 */ stfs f7, 0xf0(r31) +/* 000118D4 0001E664 D1 3F 00 BC */ stfs f9, 0xbc(r31) +/* 000118D8 0001E668 48 01 22 1D */ bl .text+0x1221C +/* 000118DC 0001E66C 3D 20 00 00 */ lis r9, kSelectCarDefaultAnimTimeV@ha +/* 000118E0 0001E670 C0 1E 00 00 */ lfs f0, kSelectCarDefaultRollV@l(r30) +/* 000118E4 0001E674 C1 A9 00 00 */ lfs f13, kSelectCarDefaultAnimTimeV@l(r9) +/* 000118E8 0001E678 D0 3F 00 E0 */ stfs f1, 0xe0(r31) +/* 000118EC 0001E67C D0 1F 01 0C */ stfs f0, 0x10c(r31) +/* 000118F0 0001E680 D1 BF 01 10 */ stfs f13, 0x110(r31) +/* 000118F4 0001E684 38 00 00 01 */ li r0, 0x1 +/* 000118F8 0001E688 D3 FF 00 FC */ stfs f31, 0xfc(r31) +/* 000118FC 0001E68C 90 1F 00 80 */ stw r0, 0x80(r31) +/* 00011900 0001E690 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 00011904 0001E694 7C 08 03 A6 */ mtlr r0 +/* 00011908 0001E698 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 0001190C 0001E69C E3 E1 00 10 */ psq_l f31, 0x10(r1), 0, qr0 +/* 00011910 0001E6A0 38 21 00 18 */ addi r1, r1, 0x18 +/* 00011914 0001E6A4 4E 80 00 20 */ blr +.endfn SetVRotateSpeed__20SelectCarCameraMoverf + +# .text:0x11918 | size: 0xCC +.fn SetHRotateSpeed__20SelectCarCameraMoverf, global +/* 00011918 0001E6A8 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0001191C 0001E6AC 7C 08 02 A6 */ mflr r0 +/* 00011920 0001E6B0 F3 E1 00 10 */ psq_st f31, 0x10(r1), 0, qr0 +.L_00011924: +/* 00011924 0001E6B4 BF C1 00 08 */ stmw r30, 0x8(r1) +.L_00011928: +/* 00011928 0001E6B8 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0001192C 0001E6BC 7C 7F 1B 78 */ mr r31, r3 +/* 00011930 0001E6C0 FF E0 08 90 */ fmr f31, f1 +/* 00011934 0001E6C4 80 1F 00 80 */ lwz r0, 0x80(r31) +/* 00011938 0001E6C8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0001193C 0001E6CC 41 82 19 CC */ beq .L_00013308 +/* 00011940 0001E6D0 2C 00 00 01 */ cmpwi r0, 0x1 +/* 00011944 0001E6D4 41 82 19 C0 */ beq .L_00013304 +/* 00011948 0001E6D8 3D 20 00 00 */ lis r9, kSelectCarDefaultFOVH@ha +.L_0001194C: +/* 0001194C 0001E6DC 3F C0 00 00 */ lis r30, kSelectCarDefaultRollH@ha +/* 00011950 0001E6E0 3D 60 00 00 */ lis r11, kSelectCarDefaultLookAtZH@ha +/* 00011954 0001E6E4 C0 1E 00 00 */ lfs f0, kSelectCarDefaultRollH@l(r30) +/* 00011958 0001E6E8 C1 09 00 00 */ lfs f8, kSelectCarDefaultFOVH@l(r9) +/* 0001195C 0001E6EC C0 EB 00 00 */ lfs f7, kSelectCarDefaultLookAtZH@l(r11) +/* 00011960 0001E6F0 FC 40 00 90 */ fmr f2, f0 +/* 00011964 0001E6F4 C1 3F 00 98 */ lfs f9, 0x98(r31) +.L_00011968: +/* 00011968 0001E6F8 C1 BF 00 A4 */ lfs f13, 0xa4(r31) +.L_0001196C: +/* 0001196C 0001E6FC C1 5F 00 9C */ lfs f10, 0x9c(r31) +/* 00011970 0001E700 FC 20 48 90 */ fmr f1, f9 +/* 00011974 0001E704 C1 7F 00 A0 */ lfs f11, 0xa0(r31) +.L_00011978: +/* 00011978 0001E708 C1 9F 00 A8 */ lfs f12, 0xa8(r31) +.L_0001197C: +/* 0001197C 0001E70C D1 BF 00 C8 */ stfs f13, 0xc8(r31) +.L_00011980: +/* 00011980 0001E710 D0 1F 00 E0 */ stfs f0, 0xe0(r31) +/* 00011984 0001E714 D0 1F 00 E8 */ stfs f0, 0xe8(r31) +/* 00011988 0001E718 D0 1F 00 EC */ stfs f0, 0xec(r31) +/* 0001198C 0001E71C D1 5F 00 C0 */ stfs f10, 0xc0(r31) +/* 00011990 0001E720 D1 7F 00 C4 */ stfs f11, 0xc4(r31) +/* 00011994 0001E724 D1 9F 00 CC */ stfs f12, 0xcc(r31) +/* 00011998 0001E728 D1 1F 00 E4 */ stfs f8, 0xe4(r31) +/* 0001199C 0001E72C D0 FF 00 F0 */ stfs f7, 0xf0(r31) +/* 000119A0 0001E730 D1 3F 00 BC */ stfs f9, 0xbc(r31) +/* 000119A4 0001E734 48 01 22 1D */ bl .text+0x1221C +/* 000119A8 0001E738 3D 20 00 00 */ lis r9, kSelectCarDefaultAnimTimeH@ha +/* 000119AC 0001E73C C0 1E 00 00 */ lfs f0, kSelectCarDefaultRollH@l(r30) +/* 000119B0 0001E740 C1 A9 00 00 */ lfs f13, kSelectCarDefaultAnimTimeH@l(r9) +/* 000119B4 0001E744 D0 3F 00 E0 */ stfs f1, 0xe0(r31) +/* 000119B8 0001E748 D0 1F 01 0C */ stfs f0, 0x10c(r31) +/* 000119BC 0001E74C D1 BF 01 10 */ stfs f13, 0x110(r31) +/* 000119C0 0001E750 38 00 00 01 */ li r0, 0x1 +/* 000119C4 0001E754 D3 FF 01 00 */ stfs f31, 0x100(r31) +/* 000119C8 0001E758 90 1F 00 80 */ stw r0, 0x80(r31) +/* 000119CC 0001E75C 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 000119D0 0001E760 7C 08 03 A6 */ mtlr r0 +/* 000119D4 0001E764 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 000119D8 0001E768 E3 E1 00 10 */ psq_l f31, 0x10(r1), 0, qr0 +.L_000119DC: +/* 000119DC 0001E76C 38 21 00 18 */ addi r1, r1, 0x18 +/* 000119E0 0001E770 4E 80 00 20 */ blr +.endfn SetHRotateSpeed__20SelectCarCameraMoverf + +# .text:0x119E4 | size: 0xCC +.fn SetZoomSpeed__20SelectCarCameraMoverf, global +/* 000119E4 0001E774 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 000119E8 0001E778 7C 08 02 A6 */ mflr r0 +/* 000119EC 0001E77C F3 E1 00 10 */ psq_st f31, 0x10(r1), 0, qr0 +/* 000119F0 0001E780 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 000119F4 0001E784 90 01 00 1C */ stw r0, 0x1c(r1) +/* 000119F8 0001E788 7C 7F 1B 78 */ mr r31, r3 +/* 000119FC 0001E78C FF E0 08 90 */ fmr f31, f1 +/* 00011A00 0001E790 80 1F 00 80 */ lwz r0, 0x80(r31) +/* 00011A04 0001E794 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00011A08 0001E798 41 82 1A 98 */ beq .L_000134A0 +/* 00011A0C 0001E79C 2C 00 00 01 */ cmpwi r0, 0x1 +.L_00011A10: +/* 00011A10 0001E7A0 41 82 1A 8C */ beq .L_0001349C +/* 00011A14 0001E7A4 3D 20 00 00 */ lis r9, kSelectCarDefaultFOVZ@ha +/* 00011A18 0001E7A8 3F C0 00 00 */ lis r30, kSelectCarDefaultRollZ@ha +/* 00011A1C 0001E7AC 3D 60 00 00 */ lis r11, kSelectCarDefaultLookAtZZ@ha +/* 00011A20 0001E7B0 C0 1E 00 00 */ lfs f0, kSelectCarDefaultRollZ@l(r30) +/* 00011A24 0001E7B4 C1 09 00 00 */ lfs f8, kSelectCarDefaultFOVZ@l(r9) +/* 00011A28 0001E7B8 C0 EB 00 00 */ lfs f7, kSelectCarDefaultLookAtZZ@l(r11) +/* 00011A2C 0001E7BC FC 40 00 90 */ fmr f2, f0 +/* 00011A30 0001E7C0 C1 3F 00 98 */ lfs f9, 0x98(r31) +/* 00011A34 0001E7C4 C1 BF 00 A4 */ lfs f13, 0xa4(r31) +/* 00011A38 0001E7C8 C1 5F 00 9C */ lfs f10, 0x9c(r31) +/* 00011A3C 0001E7CC FC 20 48 90 */ fmr f1, f9 +/* 00011A40 0001E7D0 C1 7F 00 A0 */ lfs f11, 0xa0(r31) +/* 00011A44 0001E7D4 C1 9F 00 A8 */ lfs f12, 0xa8(r31) +/* 00011A48 0001E7D8 D1 BF 00 C8 */ stfs f13, 0xc8(r31) +/* 00011A4C 0001E7DC D0 1F 00 E0 */ stfs f0, 0xe0(r31) +/* 00011A50 0001E7E0 D0 1F 00 E8 */ stfs f0, 0xe8(r31) +/* 00011A54 0001E7E4 D0 1F 00 EC */ stfs f0, 0xec(r31) +/* 00011A58 0001E7E8 D1 5F 00 C0 */ stfs f10, 0xc0(r31) +/* 00011A5C 0001E7EC D1 7F 00 C4 */ stfs f11, 0xc4(r31) +/* 00011A60 0001E7F0 D1 9F 00 CC */ stfs f12, 0xcc(r31) +/* 00011A64 0001E7F4 D1 1F 00 E4 */ stfs f8, 0xe4(r31) +/* 00011A68 0001E7F8 D0 FF 00 F0 */ stfs f7, 0xf0(r31) +/* 00011A6C 0001E7FC D1 3F 00 BC */ stfs f9, 0xbc(r31) +/* 00011A70 0001E800 48 01 22 1D */ bl .text+0x1221C +/* 00011A74 0001E804 3D 20 00 00 */ lis r9, kSelectCarDefaultAnimTimeZ@ha +/* 00011A78 0001E808 C0 1E 00 00 */ lfs f0, kSelectCarDefaultRollZ@l(r30) +/* 00011A7C 0001E80C C1 A9 00 00 */ lfs f13, kSelectCarDefaultAnimTimeZ@l(r9) +/* 00011A80 0001E810 D0 3F 00 E0 */ stfs f1, 0xe0(r31) +/* 00011A84 0001E814 D0 1F 01 0C */ stfs f0, 0x10c(r31) +/* 00011A88 0001E818 D1 BF 01 10 */ stfs f13, 0x110(r31) +/* 00011A8C 0001E81C 38 00 00 01 */ li r0, 0x1 +/* 00011A90 0001E820 D3 FF 00 F8 */ stfs f31, 0xf8(r31) +/* 00011A94 0001E824 90 1F 00 80 */ stw r0, 0x80(r31) +/* 00011A98 0001E828 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 00011A9C 0001E82C 7C 08 03 A6 */ mtlr r0 +/* 00011AA0 0001E830 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 00011AA4 0001E834 E3 E1 00 10 */ psq_l f31, 0x10(r1), 0, qr0 +.L_00011AA8: +/* 00011AA8 0001E838 38 21 00 18 */ addi r1, r1, 0x18 +/* 00011AAC 0001E83C 4E 80 00 20 */ blr +.endfn SetZoomSpeed__20SelectCarCameraMoverf + +# .text:0x11AB0 | size: 0xE8 +.fn __20SelectCarCameraMoveri, global +/* 00011AB0 0001E840 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00011AB4 0001E844 7C 08 02 A6 */ mflr r0 +/* 00011AB8 0001E848 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 00011ABC 0001E84C 90 01 00 14 */ stw r0, 0x14(r1) +/* 00011AC0 0001E850 7C 7E 1B 78 */ mr r30, r3 +/* 00011AC4 0001E854 38 A0 00 09 */ li r5, 0x9 +/* 00011AC8 0001E858 48 00 1F 1D */ bl .L_000139E4 +.L_00011ACC: +/* 00011ACC 0001E85C 3D 60 00 00 */ lis r11, .rodata+0xA1C@ha +/* 00011AD0 0001E860 3D 40 00 00 */ lis r10, .rodata+0xA20@ha +/* 00011AD4 0001E864 C0 0B 0A 1C */ lfs f0, .rodata+0xA1C@l(r11) +/* 00011AD8 0001E868 3D 20 00 00 */ lis r9, _vt.20SelectCarCameraMover@ha +.L_00011ADC: +/* 00011ADC 0001E86C 39 29 00 00 */ addi r9, r9, _vt.20SelectCarCameraMover@l +/* 00011AE0 0001E870 C1 AA 0A 20 */ lfs f13, .rodata+0xA20@l(r10) +/* 00011AE4 0001E874 38 00 00 01 */ li r0, 0x1 +/* 00011AE8 0001E878 39 60 00 00 */ li r11, 0x0 +/* 00011AEC 0001E87C 91 3E 00 08 */ stw r9, 0x8(r30) +/* 00011AF0 0001E880 3D 40 00 00 */ lis r10, .rodata+0xA24@ha +/* 00011AF4 0001E884 D0 1E 01 0C */ stfs f0, 0x10c(r30) +/* 00011AF8 0001E888 39 20 00 02 */ li r9, 0x2 +.L_00011AFC: +/* 00011AFC 0001E88C D0 1E 00 8C */ stfs f0, 0x8c(r30) +.L_00011B00: +/* 00011B00 0001E890 7F C3 F3 78 */ mr r3, r30 +/* 00011B04 0001E894 D0 1E 00 90 */ stfs f0, 0x90(r30) +/* 00011B08 0001E898 D0 1E 00 94 */ stfs f0, 0x94(r30) +/* 00011B0C 0001E89C D0 1E 00 98 */ stfs f0, 0x98(r30) +/* 00011B10 0001E8A0 D0 1E 00 9C */ stfs f0, 0x9c(r30) +/* 00011B14 0001E8A4 D0 1E 00 A0 */ stfs f0, 0xa0(r30) +.L_00011B18: +/* 00011B18 0001E8A8 D0 1E 00 A4 */ stfs f0, 0xa4(r30) +/* 00011B1C 0001E8AC D0 1E 00 A8 */ stfs f0, 0xa8(r30) +/* 00011B20 0001E8B0 D0 1E 00 B0 */ stfs f0, 0xb0(r30) +.L_00011B24: +/* 00011B24 0001E8B4 D0 1E 00 B4 */ stfs f0, 0xb4(r30) +/* 00011B28 0001E8B8 D0 1E 00 B8 */ stfs f0, 0xb8(r30) +/* 00011B2C 0001E8BC D0 1E 00 BC */ stfs f0, 0xbc(r30) +/* 00011B30 0001E8C0 D0 1E 00 C0 */ stfs f0, 0xc0(r30) +/* 00011B34 0001E8C4 D0 1E 00 C4 */ stfs f0, 0xc4(r30) +/* 00011B38 0001E8C8 D0 1E 00 C8 */ stfs f0, 0xc8(r30) +/* 00011B3C 0001E8CC D0 1E 00 CC */ stfs f0, 0xcc(r30) +/* 00011B40 0001E8D0 D0 1E 00 D4 */ stfs f0, 0xd4(r30) +/* 00011B44 0001E8D4 D0 1E 00 D8 */ stfs f0, 0xd8(r30) +/* 00011B48 0001E8D8 D0 1E 00 DC */ stfs f0, 0xdc(r30) +/* 00011B4C 0001E8DC D0 1E 00 E0 */ stfs f0, 0xe0(r30) +/* 00011B50 0001E8E0 D0 1E 00 E4 */ stfs f0, 0xe4(r30) +/* 00011B54 0001E8E4 D0 1E 00 E8 */ stfs f0, 0xe8(r30) +/* 00011B58 0001E8E8 D0 1E 00 EC */ stfs f0, 0xec(r30) +/* 00011B5C 0001E8EC D0 1E 00 F0 */ stfs f0, 0xf0(r30) +/* 00011B60 0001E8F0 D0 1E 00 F8 */ stfs f0, 0xf8(r30) +/* 00011B64 0001E8F4 D0 1E 00 FC */ stfs f0, 0xfc(r30) +/* 00011B68 0001E8F8 D0 1E 01 00 */ stfs f0, 0x100(r30) +/* 00011B6C 0001E8FC 90 1E 00 80 */ stw r0, 0x80(r30) +/* 00011B70 0001E900 91 7E 00 88 */ stw r11, 0x88(r30) +/* 00011B74 0001E904 D1 BE 01 10 */ stfs f13, 0x110(r30) +/* 00011B78 0001E908 C0 0A 0A 24 */ lfs f0, .rodata+0xA24@l(r10) +/* 00011B7C 0001E90C 91 3E 01 08 */ stw r9, 0x108(r30) +/* 00011B80 0001E910 D0 1E 01 04 */ stfs f0, 0x104(r30) +/* 00011B84 0001E914 80 01 00 14 */ lwz r0, 0x14(r1) +/* 00011B88 0001E918 7C 08 03 A6 */ mtlr r0 +/* 00011B8C 0001E91C BB C1 00 08 */ lmw r30, 0x8(r1) +/* 00011B90 0001E920 38 21 00 10 */ addi r1, r1, 0x10 +/* 00011B94 0001E924 4E 80 00 20 */ blr +.endfn __20SelectCarCameraMoveri + +# .text:0x11B98 | size: 0x524 +.fn Update__20SelectCarCameraMoverf, global +/* 00011B98 0001E928 94 21 FF 48 */ stwu r1, -0xb8(r1) +/* 00011B9C 0001E92C 7C 08 02 A6 */ mflr r0 +/* 00011BA0 0001E930 F3 81 00 98 */ psq_st f28, 0x98(r1), 0, qr0 +/* 00011BA4 0001E934 F3 A1 00 A0 */ psq_st f29, 0xa0(r1), 0, qr0 +/* 00011BA8 0001E938 F3 C1 00 A8 */ psq_st f30, 0xa8(r1), 0, qr0 +/* 00011BAC 0001E93C F3 E1 00 B0 */ psq_st f31, 0xb0(r1), 0, qr0 +/* 00011BB0 0001E940 BF A1 00 8C */ stmw r29, 0x8c(r1) +/* 00011BB4 0001E944 90 01 00 BC */ stw r0, 0xbc(r1) +/* 00011BB8 0001E948 7C 7F 1B 78 */ mr r31, r3 +/* 00011BBC 0001E94C FF 80 08 90 */ fmr f28, f1 +/* 00011BC0 0001E950 80 1F 00 80 */ lwz r0, 0x80(r31) +/* 00011BC4 0001E954 3B DF 00 8C */ addi r30, r31, 0x8c +/* 00011BC8 0001E958 2C 00 00 02 */ cmpwi r0, 0x2 +/* 00011BCC 0001E95C 41 82 20 1C */ beq .L_00013BE8 +/* 00011BD0 0001E960 C0 1F 01 0C */ lfs f0, 0x10c(r31) +/* 00011BD4 0001E964 3D 20 00 00 */ lis r9, .rodata+0xA2C@ha +/* 00011BD8 0001E968 C1 A9 0A 2C */ lfs f13, .rodata+0xA2C@l(r9) +/* 00011BDC 0001E96C 3D 60 00 00 */ lis r11, .rodata+0xA28@ha +/* 00011BE0 0001E970 C1 9F 01 10 */ lfs f12, 0x110(r31) +.L_00011BE4: +/* 00011BE4 0001E974 EC 00 E0 2A */ fadds f0, f0, f28 +.L_00011BE8: +/* 00011BE8 0001E978 C3 AB 0A 28 */ lfs f29, .rodata+0xA28@l(r11) +/* 00011BEC 0001E97C FC 0C 68 00 */ fcmpu cr0, f12, f13 +/* 00011BF0 0001E980 D0 1F 01 0C */ stfs f0, 0x10c(r31) +.L_00011BF4: +/* 00011BF4 0001E984 4C 62 03 82 */ cror un, eq, lt +.L_00011BF8: +/* 00011BF8 0001E988 41 83 1C 0C */ bso .L_00013804 +.L_00011BFC: +/* 00011BFC 0001E98C FC 00 60 00 */ fcmpu cr0, f0, f12 +/* 00011C00 0001E990 4C 62 0B 82 */ cror un, eq, gt +/* 00011C04 0001E994 41 83 1C 0C */ bso .L_00013810 +/* 00011C08 0001E998 EF A0 60 24 */ fdivs f29, f0, f12 +/* 00011C0C 0001E99C C0 3F 01 04 */ lfs f1, 0x104(r31) +.L_00011C10: +/* 00011C10 0001E9A0 EF DD 07 72 */ fmuls f30, f29, f29 +/* 00011C14 0001E9A4 FC 20 08 50 */ fneg f1, f1 +.L_00011C18: +/* 00011C18 0001E9A8 EC 21 07 B2 */ fmuls f1, f1, f30 +/* 00011C1C 0001E9AC 48 00 00 01 */ bl expf +/* 00011C20 0001E9B0 80 1F 01 08 */ lwz r0, 0x108(r31) +/* 00011C24 0001E9B4 3D 00 43 30 */ lis r8, 0x4330 +/* 00011C28 0001E9B8 FF E0 08 90 */ fmr f31, f1 +/* 00011C2C 0001E9BC 6C 00 80 00 */ xoris r0, r0, 0x8000 +/* 00011C30 0001E9C0 3D 20 00 00 */ lis r9, .rodata+0xA30@ha +/* 00011C34 0001E9C4 90 01 00 84 */ stw r0, 0x84(r1) +/* 00011C38 0001E9C8 3D 40 00 00 */ lis r10, .rodata+0xA3C@ha +/* 00011C3C 0001E9CC C8 09 0A 30 */ lfd f0, .rodata+0xA30@l(r9) +.L_00011C40: +/* 00011C40 0001E9D0 91 01 00 80 */ stw r8, 0x80(r1) +/* 00011C44 0001E9D4 3D 20 00 00 */ lis r9, .rodata+0xA38@ha +/* 00011C48 0001E9D8 C1 89 0A 38 */ lfs f12, .rodata+0xA38@l(r9) +/* 00011C4C 0001E9DC C8 21 00 80 */ lfd f1, 0x80(r1) +.L_00011C50: +/* 00011C50 0001E9E0 C1 AA 0A 3C */ lfs f13, .rodata+0xA3C@l(r10) +/* 00011C54 0001E9E4 FC 21 00 28 */ fsub f1, f1, f0 +/* 00011C58 0001E9E8 FC 20 08 18 */ frsp f1, f1 +.L_00011C5C: +/* 00011C5C 0001E9EC EC 21 60 2A */ fadds f1, f1, f12 +/* 00011C60 0001E9F0 EC 21 07 B2 */ fmuls f1, f1, f30 +/* 00011C64 0001E9F4 EC 21 03 72 */ fmuls f1, f1, f13 +/* 00011C68 0001E9F8 48 00 00 01 */ bl cosf +/* 00011C6C 0001E9FC 3D 20 00 00 */ lis r9, .rodata+0xA28@ha +/* 00011C70 0001EA00 80 1F 00 80 */ lwz r0, 0x80(r31) +/* 00011C74 0001EA04 C3 C9 0A 28 */ lfs f30, .rodata+0xA28@l(r9) +/* 00011C78 0001EA08 EF FF 00 72 */ fmuls f31, f31, f1 +.L_00011C7C: +/* 00011C7C 0001EA0C 2C 00 00 01 */ cmpwi r0, 0x1 +/* 00011C80 0001EA10 EF FE F8 28 */ fsubs f31, f30, f31 +/* 00011C84 0001EA14 40 82 1E 68 */ bne .L_00013AEC +/* 00011C88 0001EA18 3D 20 00 00 */ lis r9, kSelectCarFrameRate@ha +/* 00011C8C 0001EA1C C0 1F 01 00 */ lfs f0, 0x100(r31) +/* 00011C90 0001EA20 C1 A9 00 00 */ lfs f13, kSelectCarFrameRate@l(r9) +/* 00011C94 0001EA24 3D 60 00 00 */ lis r11, CarGuysCamera@ha +.L_00011C98: +/* 00011C98 0001EA28 C1 9E 00 04 */ lfs f12, 0x4(r30) +/* 00011C9C 0001EA2C ED 7C 03 72 */ fmuls f11, f28, f13 +/* 00011CA0 0001EA30 80 0B 00 00 */ lwz r0, CarGuysCamera@l(r11) +/* 00011CA4 0001EA34 EC 00 62 FA */ fmadds f0, f0, f11, f12 +.L_00011CA8: +/* 00011CA8 0001EA38 C1 BE 00 00 */ lfs f13, 0x0(r30) +/* 00011CAC 0001EA3C D0 1E 00 04 */ stfs f0, 0x4(r30) +/* 00011CB0 0001EA40 2C 00 00 00 */ cmpwi r0, 0x0 +.L_00011CB4: +/* 00011CB4 0001EA44 C0 1F 00 FC */ lfs f0, 0xfc(r31) +/* 00011CB8 0001EA48 EC 00 6A FA */ fmadds f0, f0, f11, f13 +/* 00011CBC 0001EA4C 40 82 1C E8 */ bne .L_000139A4 +/* 00011CC0 0001EA50 3D 20 00 00 */ lis r9, kSelectCarUpperOrbitV@ha +/* 00011CC4 0001EA54 C1 A9 00 00 */ lfs f13, kSelectCarUpperOrbitV@l(r9) +/* 00011CC8 0001EA58 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00011CCC 0001EA5C 41 81 1C E4 */ bgt .L_000139B0 +/* 00011CD0 0001EA60 3D 20 00 00 */ lis r9, kSelectCarLowerOrbitV@ha +/* 00011CD4 0001EA64 C1 A9 00 00 */ lfs f13, kSelectCarLowerOrbitV@l(r9) +.L_00011CD8: +/* 00011CD8 0001EA68 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00011CDC 0001EA6C 4C 62 0B 82 */ cror un, eq, gt +/* 00011CE0 0001EA70 41 83 1C E8 */ bso .L_000139C8 +/* 00011CE4 0001EA74 FC 00 68 90 */ fmr f0, f13 +/* 00011CE8 0001EA78 D0 1E 00 00 */ stfs f0, 0x0(r30) +.L_00011CEC: +/* 00011CEC 0001EA7C 3D 20 00 00 */ lis r9, kSelectCarRadiusSpeedScale@ha +/* 00011CF0 0001EA80 C0 09 00 00 */ lfs f0, kSelectCarRadiusSpeedScale@l(r9) +/* 00011CF4 0001EA84 3D 60 00 00 */ lis r11, CarGuysCamera@ha +/* 00011CF8 0001EA88 80 0B 00 00 */ lwz r0, CarGuysCamera@l(r11) +/* 00011CFC 0001EA8C C1 9F 00 F8 */ lfs f12, 0xf8(r31) +/* 00011D00 0001EA90 EC 0B 00 32 */ fmuls f0, f11, f0 +/* 00011D04 0001EA94 C1 BE 00 08 */ lfs f13, 0x8(r30) +/* 00011D08 0001EA98 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00011D0C 0001EA9C EC 0C 68 3A */ fmadds f0, f12, f0, f13 +/* 00011D10 0001EAA0 40 82 1D 3C */ bne .L_00013A4C +/* 00011D14 0001EAA4 3D 20 00 00 */ lis r9, kSelectCarUpperRadius@ha +/* 00011D18 0001EAA8 C1 A9 00 00 */ lfs f13, kSelectCarUpperRadius@l(r9) +/* 00011D1C 0001EAAC FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00011D20 0001EAB0 41 81 1D 38 */ bgt .L_00013A58 +/* 00011D24 0001EAB4 3D 20 00 00 */ lis r9, kSelectCarLowerRadius@ha +/* 00011D28 0001EAB8 C1 A9 00 00 */ lfs f13, kSelectCarLowerRadius@l(r9) +/* 00011D2C 0001EABC FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00011D30 0001EAC0 4C 62 0B 82 */ cror un, eq, gt +/* 00011D34 0001EAC4 41 83 1D 3C */ bso .L_00013A70 +/* 00011D38 0001EAC8 FC 00 68 90 */ fmr f0, f13 +/* 00011D3C 0001EACC D0 1E 00 08 */ stfs f0, 0x8(r30) +/* 00011D40 0001EAD0 3D 20 00 00 */ lis r9, .rodata+0xA28@ha +/* 00011D44 0001EAD4 C1 89 0A 28 */ lfs f12, .rodata+0xA28@l(r9) +/* 00011D48 0001EAD8 38 81 00 18 */ addi r4, r1, 0x18 +/* 00011D4C 0001EADC C0 1F 00 E0 */ lfs f0, 0xe0(r31) +/* 00011D50 0001EAE0 38 61 00 08 */ addi r3, r1, 0x8 +.L_00011D54: +/* 00011D54 0001EAE4 C1 BF 00 BC */ lfs f13, 0xbc(r31) +/* 00011D58 0001EAE8 ED 8C F8 28 */ fsubs f12, f12, f31 +/* 00011D5C 0001EAEC EC 1F 00 32 */ fmuls f0, f31, f0 +/* 00011D60 0001EAF0 ED AC 03 7A */ fmadds f13, f12, f13, f0 +/* 00011D64 0001EAF4 D1 BE 00 0C */ stfs f13, 0xc(r30) +/* 00011D68 0001EAF8 C0 1F 00 E4 */ lfs f0, 0xe4(r31) +/* 00011D6C 0001EAFC C1 BF 00 C0 */ lfs f13, 0xc0(r31) +/* 00011D70 0001EB00 EC 1F 00 32 */ fmuls f0, f31, f0 +/* 00011D74 0001EB04 ED 8C 03 7A */ fmadds f12, f12, f13, f0 +/* 00011D78 0001EB08 D1 9E 00 10 */ stfs f12, 0x10(r30) +/* 00011D7C 0001EB0C C1 7F 00 C4 */ lfs f11, 0xc4(r31) +/* 00011D80 0001EB10 C1 5F 00 C8 */ lfs f10, 0xc8(r31) +/* 00011D84 0001EB14 C1 3F 00 CC */ lfs f9, 0xcc(r31) +/* 00011D88 0001EB18 C0 1F 00 E8 */ lfs f0, 0xe8(r31) +/* 00011D8C 0001EB1C C1 BF 00 EC */ lfs f13, 0xec(r31) +/* 00011D90 0001EB20 C1 9F 00 F0 */ lfs f12, 0xf0(r31) +/* 00011D94 0001EB24 EC 00 58 28 */ fsubs f0, f0, f11 +/* 00011D98 0001EB28 ED AD 50 28 */ fsubs f13, f13, f10 +/* 00011D9C 0001EB2C D0 01 00 18 */ stfs f0, 0x18(r1) +/* 00011DA0 0001EB30 ED 8C 48 28 */ fsubs f12, f12, f9 +/* 00011DA4 0001EB34 D1 A1 00 1C */ stfs f13, 0x1c(r1) +/* 00011DA8 0001EB38 D1 81 00 20 */ stfs f12, 0x20(r1) +/* 00011DAC 0001EB3C 48 00 00 01 */ bl __8bVector3RC8bVector3 +/* 00011DB0 0001EB40 39 21 00 08 */ addi r9, r1, 0x8 +/* 00011DB4 0001EB44 C1 41 00 08 */ lfs f10, 0x8(r1) +/* 00011DB8 0001EB48 C0 09 00 08 */ lfs f0, 0x8(r9) +/* 00011DBC 0001EB4C 38 61 00 18 */ addi r3, r1, 0x18 +/* 00011DC0 0001EB50 C1 21 00 0C */ lfs f9, 0xc(r1) +/* 00011DC4 0001EB54 ED 4A 07 F2 */ fmuls f10, f10, f31 +/* 00011DC8 0001EB58 C1 7F 00 C4 */ lfs f11, 0xc4(r31) +/* 00011DCC 0001EB5C EC 00 07 F2 */ fmuls f0, f0, f31 +/* 00011DD0 0001EB60 C1 BF 00 C8 */ lfs f13, 0xc8(r31) +/* 00011DD4 0001EB64 ED 29 07 F2 */ fmuls f9, f9, f31 +/* 00011DD8 0001EB68 C1 9F 00 CC */ lfs f12, 0xcc(r31) +/* 00011DDC 0001EB6C ED 6B 50 2A */ fadds f11, f11, f10 +/* 00011DE0 0001EB70 D0 09 00 08 */ stfs f0, 0x8(r9) +/* 00011DE4 0001EB74 ED AD 48 2A */ fadds f13, f13, f9 +/* 00011DE8 0001EB78 ED 8C 00 2A */ fadds f12, f12, f0 +/* 00011DEC 0001EB7C D1 61 00 28 */ stfs f11, 0x28(r1) +/* 00011DF0 0001EB80 D1 A1 00 2C */ stfs f13, 0x2c(r1) +/* 00011DF4 0001EB84 38 81 00 28 */ addi r4, r1, 0x28 +/* 00011DF8 0001EB88 D1 81 00 30 */ stfs f12, 0x30(r1) +/* 00011DFC 0001EB8C D1 41 00 08 */ stfs f10, 0x8(r1) +/* 00011E00 0001EB90 D1 21 00 0C */ stfs f9, 0xc(r1) +/* 00011E04 0001EB94 48 00 00 01 */ bl __8bVector3RC8bVector3 +/* 00011E08 0001EB98 3D 60 00 00 */ lis r11, kSelectCarWrapAngle@ha +/* 00011E0C 0001EB9C C1 A1 00 18 */ lfs f13, 0x18(r1) +/* 00011E10 0001EBA0 C1 6B 00 00 */ lfs f11, kSelectCarWrapAngle@l(r11) +/* 00011E14 0001EBA4 C1 81 00 1C */ lfs f12, 0x1c(r1) +/* 00011E18 0001EBA8 C0 01 00 20 */ lfs f0, 0x20(r1) +/* 00011E1C 0001EBAC C1 5E 00 04 */ lfs f10, 0x4(r30) +/* 00011E20 0001EBB0 D1 BE 00 14 */ stfs f13, 0x14(r30) +/* 00011E24 0001EBB4 FC 0B 50 00 */ fcmpu cr0, f11, f10 +/* 00011E28 0001EBB8 D1 9E 00 18 */ stfs f12, 0x18(r30) +/* 00011E2C 0001EBBC D0 1E 00 1C */ stfs f0, 0x1c(r30) +/* 00011E30 0001EBC0 4C 62 0B 82 */ cror un, eq, gt +/* 00011E34 0001EBC4 41 83 1E 40 */ bso .L_00013C74 +/* 00011E38 0001EBC8 EC 0A 58 28 */ fsubs f0, f10, f11 +/* 00011E3C 0001EBCC D0 1E 00 04 */ stfs f0, 0x4(r30) +/* 00011E40 0001EBD0 3D 20 00 00 */ lis r9, .rodata+0xA2C@ha +/* 00011E44 0001EBD4 C1 BE 00 04 */ lfs f13, 0x4(r30) +/* 00011E48 0001EBD8 C0 09 0A 2C */ lfs f0, .rodata+0xA2C@l(r9) +/* 00011E4C 0001EBDC FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 00011E50 0001EBE0 4C 62 0B 82 */ cror un, eq, gt +/* 00011E54 0001EBE4 41 83 20 1C */ bso .L_00013E70 +/* 00011E58 0001EBE8 C0 0B 00 00 */ lfs f0, kSelectCarWrapAngle@l(r11) +/* 00011E5C 0001EBEC EC 0D 00 2A */ fadds f0, f13, f0 +.L_00011E60: +/* 00011E60 0001EBF0 D0 1E 00 04 */ stfs f0, 0x4(r30) +.L_00011E64: +/* 00011E64 0001EBF4 48 01 20 1C */ b .text+0x1201C +.L_00011E68: +/* 00011E68 0001EBF8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00011E6C 0001EBFC 40 82 20 1C */ bne .L_00013E88 +/* 00011E70 0001EC00 C0 1F 00 D4 */ lfs f0, 0xd4(r31) +.L_00011E74: +/* 00011E74 0001EC04 ED 9E F8 28 */ fsubs f12, f30, f31 +.L_00011E78: +/* 00011E78 0001EC08 C1 BF 00 B0 */ lfs f13, 0xb0(r31) +/* 00011E7C 0001EC0C 38 81 00 18 */ addi r4, r1, 0x18 +/* 00011E80 0001EC10 EC 1F 00 32 */ fmuls f0, f31, f0 +/* 00011E84 0001EC14 38 61 00 08 */ addi r3, r1, 0x8 +/* 00011E88 0001EC18 ED AC 03 7A */ fmadds f13, f12, f13, f0 +/* 00011E8C 0001EC1C D1 BE 00 00 */ stfs f13, 0x0(r30) +/* 00011E90 0001EC20 C0 1F 00 D8 */ lfs f0, 0xd8(r31) +/* 00011E94 0001EC24 C1 BF 00 B4 */ lfs f13, 0xb4(r31) +/* 00011E98 0001EC28 EC 1F 00 32 */ fmuls f0, f31, f0 +/* 00011E9C 0001EC2C ED AC 03 7A */ fmadds f13, f12, f13, f0 +/* 00011EA0 0001EC30 D1 BE 00 04 */ stfs f13, 0x4(r30) +/* 00011EA4 0001EC34 C0 1F 00 DC */ lfs f0, 0xdc(r31) +/* 00011EA8 0001EC38 C1 BF 00 B8 */ lfs f13, 0xb8(r31) +/* 00011EAC 0001EC3C EC 1F 00 32 */ fmuls f0, f31, f0 +/* 00011EB0 0001EC40 ED AC 03 7A */ fmadds f13, f12, f13, f0 +/* 00011EB4 0001EC44 D1 BE 00 08 */ stfs f13, 0x8(r30) +/* 00011EB8 0001EC48 C0 1F 00 E0 */ lfs f0, 0xe0(r31) +/* 00011EBC 0001EC4C C1 BF 00 BC */ lfs f13, 0xbc(r31) +.L_00011EC0: +/* 00011EC0 0001EC50 EC 1F 00 32 */ fmuls f0, f31, f0 +/* 00011EC4 0001EC54 ED AC 03 7A */ fmadds f13, f12, f13, f0 +/* 00011EC8 0001EC58 D1 BE 00 0C */ stfs f13, 0xc(r30) +/* 00011ECC 0001EC5C C0 1F 00 E4 */ lfs f0, 0xe4(r31) +/* 00011ED0 0001EC60 C1 BF 00 C0 */ lfs f13, 0xc0(r31) +/* 00011ED4 0001EC64 EC 1F 00 32 */ fmuls f0, f31, f0 +/* 00011ED8 0001EC68 ED 8C 03 7A */ fmadds f12, f12, f13, f0 +/* 00011EDC 0001EC6C D1 9E 00 10 */ stfs f12, 0x10(r30) +/* 00011EE0 0001EC70 C1 7F 00 C4 */ lfs f11, 0xc4(r31) +/* 00011EE4 0001EC74 C1 5F 00 C8 */ lfs f10, 0xc8(r31) +/* 00011EE8 0001EC78 C1 3F 00 CC */ lfs f9, 0xcc(r31) +/* 00011EEC 0001EC7C C0 1F 00 E8 */ lfs f0, 0xe8(r31) +/* 00011EF0 0001EC80 C1 BF 00 EC */ lfs f13, 0xec(r31) +/* 00011EF4 0001EC84 C1 9F 00 F0 */ lfs f12, 0xf0(r31) +/* 00011EF8 0001EC88 EC 00 58 28 */ fsubs f0, f0, f11 +/* 00011EFC 0001EC8C ED AD 50 28 */ fsubs f13, f13, f10 +/* 00011F00 0001EC90 D0 01 00 18 */ stfs f0, 0x18(r1) +/* 00011F04 0001EC94 ED 8C 48 28 */ fsubs f12, f12, f9 +/* 00011F08 0001EC98 D1 A1 00 1C */ stfs f13, 0x1c(r1) +/* 00011F0C 0001EC9C D1 81 00 20 */ stfs f12, 0x20(r1) +.L_00011F10: +/* 00011F10 0001ECA0 48 00 00 01 */ bl __8bVector3RC8bVector3 +/* 00011F14 0001ECA4 39 21 00 08 */ addi r9, r1, 0x8 +/* 00011F18 0001ECA8 C1 41 00 08 */ lfs f10, 0x8(r1) +/* 00011F1C 0001ECAC C0 09 00 08 */ lfs f0, 0x8(r9) +/* 00011F20 0001ECB0 38 61 00 18 */ addi r3, r1, 0x18 +/* 00011F24 0001ECB4 C1 21 00 0C */ lfs f9, 0xc(r1) +/* 00011F28 0001ECB8 ED 4A 07 F2 */ fmuls f10, f10, f31 +/* 00011F2C 0001ECBC C1 7F 00 C4 */ lfs f11, 0xc4(r31) +/* 00011F30 0001ECC0 EC 00 07 F2 */ fmuls f0, f0, f31 +/* 00011F34 0001ECC4 C1 BF 00 C8 */ lfs f13, 0xc8(r31) +/* 00011F38 0001ECC8 ED 29 07 F2 */ fmuls f9, f9, f31 +/* 00011F3C 0001ECCC C1 9F 00 CC */ lfs f12, 0xcc(r31) +/* 00011F40 0001ECD0 ED 6B 50 2A */ fadds f11, f11, f10 +/* 00011F44 0001ECD4 D0 09 00 08 */ stfs f0, 0x8(r9) +/* 00011F48 0001ECD8 ED AD 48 2A */ fadds f13, f13, f9 +/* 00011F4C 0001ECDC ED 8C 00 2A */ fadds f12, f12, f0 +/* 00011F50 0001ECE0 D1 61 00 28 */ stfs f11, 0x28(r1) +/* 00011F54 0001ECE4 D1 A1 00 2C */ stfs f13, 0x2c(r1) +/* 00011F58 0001ECE8 38 81 00 28 */ addi r4, r1, 0x28 +/* 00011F5C 0001ECEC D1 81 00 30 */ stfs f12, 0x30(r1) +/* 00011F60 0001ECF0 D1 41 00 08 */ stfs f10, 0x8(r1) +.L_00011F64: +/* 00011F64 0001ECF4 D1 21 00 0C */ stfs f9, 0xc(r1) +/* 00011F68 0001ECF8 48 00 00 01 */ bl __8bVector3RC8bVector3 +.L_00011F6C: +/* 00011F6C 0001ECFC 3D 60 00 00 */ lis r11, kSelectCarWrapAngle@ha +/* 00011F70 0001ED00 C1 A1 00 18 */ lfs f13, 0x18(r1) +/* 00011F74 0001ED04 C1 6B 00 00 */ lfs f11, kSelectCarWrapAngle@l(r11) +/* 00011F78 0001ED08 C1 81 00 1C */ lfs f12, 0x1c(r1) +.L_00011F7C: +/* 00011F7C 0001ED0C C0 01 00 20 */ lfs f0, 0x20(r1) +.L_00011F80: +/* 00011F80 0001ED10 C1 5E 00 04 */ lfs f10, 0x4(r30) +/* 00011F84 0001ED14 D1 BE 00 14 */ stfs f13, 0x14(r30) +.L_00011F88: +/* 00011F88 0001ED18 FC 0B 50 00 */ fcmpu cr0, f11, f10 +/* 00011F8C 0001ED1C D1 9E 00 18 */ stfs f12, 0x18(r30) +/* 00011F90 0001ED20 D0 1E 00 1C */ stfs f0, 0x1c(r30) +/* 00011F94 0001ED24 4C 62 0B 82 */ cror un, eq, gt +/* 00011F98 0001ED28 41 83 1F A4 */ bso .L_00013F3C +/* 00011F9C 0001ED2C EC 0A 58 28 */ fsubs f0, f10, f11 +/* 00011FA0 0001ED30 D0 1E 00 04 */ stfs f0, 0x4(r30) +/* 00011FA4 0001ED34 3D 20 00 00 */ lis r9, .rodata+0xA2C@ha +/* 00011FA8 0001ED38 C1 BE 00 04 */ lfs f13, 0x4(r30) +/* 00011FAC 0001ED3C C1 89 0A 2C */ lfs f12, .rodata+0xA2C@l(r9) +/* 00011FB0 0001ED40 FC 0D 60 00 */ fcmpu cr0, f13, f12 +/* 00011FB4 0001ED44 4C 62 0B 82 */ cror un, eq, gt +/* 00011FB8 0001ED48 41 83 1F C8 */ bso .L_00013F80 +/* 00011FBC 0001ED4C C0 0B 00 00 */ lfs f0, kSelectCarWrapAngle@l(r11) +/* 00011FC0 0001ED50 EC 0D 00 2A */ fadds f0, f13, f0 +/* 00011FC4 0001ED54 D0 1E 00 04 */ stfs f0, 0x4(r30) +/* 00011FC8 0001ED58 C1 AB 00 00 */ lfs f13, kSelectCarWrapAngle@l(r11) +/* 00011FCC 0001ED5C C0 1E 00 0C */ lfs f0, 0xc(r30) +/* 00011FD0 0001ED60 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 00011FD4 0001ED64 4C 62 0B 82 */ cror un, eq, gt +/* 00011FD8 0001ED68 41 83 1F E4 */ bso .L_00013FBC +/* 00011FDC 0001ED6C EC 00 68 28 */ fsubs f0, f0, f13 +/* 00011FE0 0001ED70 D0 1E 00 0C */ stfs f0, 0xc(r30) +.L_00011FE4: +/* 00011FE4 0001ED74 C1 BE 00 0C */ lfs f13, 0xc(r30) +/* 00011FE8 0001ED78 FC 0D 60 00 */ fcmpu cr0, f13, f12 +/* 00011FEC 0001ED7C 4C 62 0B 82 */ cror un, eq, gt +.L_00011FF0: +/* 00011FF0 0001ED80 41 83 20 00 */ bso .L_00013FF0 +/* 00011FF4 0001ED84 C0 0B 00 00 */ lfs f0, kSelectCarWrapAngle@l(r11) +/* 00011FF8 0001ED88 EC 0D 00 2A */ fadds f0, f13, f0 +.L_00011FFC: +/* 00011FFC 0001ED8C D0 1E 00 0C */ stfs f0, 0xc(r30) +/* 00012000 0001ED90 80 1F 00 80 */ lwz r0, 0x80(r31) +/* 00012004 0001ED94 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00012008 0001ED98 40 82 20 1C */ bne .L_00014024 +/* 0001200C 0001ED9C FC 1D F0 00 */ fcmpu cr0, f29, f30 +/* 00012010 0001EDA0 41 80 20 1C */ blt .L_0001402C +/* 00012014 0001EDA4 38 00 00 02 */ li r0, 0x2 +/* 00012018 0001EDA8 90 1F 00 80 */ stw r0, 0x80(r31) +/* 0001201C 0001EDAC 3B A1 00 38 */ addi r29, r1, 0x38 +/* 00012020 0001EDB0 7F C4 F3 78 */ mr r4, r30 +/* 00012024 0001EDB4 7F A3 EB 78 */ mr r3, r29 +/* 00012028 0001EDB8 48 01 22 95 */ bl .text+0x12294 +/* 0001202C 0001EDBC 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha +/* 00012030 0001EDC0 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) +/* 00012034 0001EDC4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00012038 0001EDC8 40 82 20 88 */ bne .L_000140C0 +/* 0001203C 0001EDCC 3D 20 00 00 */ lis r9, .rodata+0xA40@ha +/* 00012040 0001EDD0 C0 1E 00 10 */ lfs f0, 0x10(r30) +/* 00012044 0001EDD4 C1 89 0A 40 */ lfs f12, .rodata+0xA40@l(r9) +/* 00012048 0001EDD8 3C 00 B6 0B */ lis r0, 0xb60b +/* 0001204C 0001EDDC 60 00 60 B7 */ ori r0, r0, 0x60b7 +/* 00012050 0001EDE0 EC 00 03 32 */ fmuls f0, f0, f12 +/* 00012054 0001EDE4 81 5F 00 1C */ lwz r10, 0x1c(r31) +.L_00012058: +/* 00012058 0001EDE8 FD A0 00 1E */ fctiwz f13, f0 +/* 0001205C 0001EDEC D9 A1 00 80 */ stfd f13, 0x80(r1) +/* 00012060 0001EDF0 81 21 00 84 */ lwz r9, 0x84(r1) +/* 00012064 0001EDF4 7C 09 00 96 */ mulhw r0, r9, r0 +/* 00012068 0001EDF8 7D 2B FE 70 */ srawi r11, r9, 31 +/* 0001206C 0001EDFC 7C 00 4A 14 */ add r0, r0, r9 +/* 00012070 0001EE00 7C 00 46 70 */ srawi r0, r0, 8 +/* 00012074 0001EE04 7C 0B 00 50 */ subf r0, r11, r0 +/* 00012078 0001EE08 B0 0A 00 C4 */ sth r0, 0xc4(r10) +/* 0001207C 0001EE0C C0 1E 00 08 */ lfs f0, 0x8(r30) +/* 00012080 0001EE10 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 00012084 0001EE14 D0 09 00 B0 */ stfs f0, 0xb0(r9) +/* 00012088 0001EE18 80 7F 00 1C */ lwz r3, 0x1c(r31) +.L_0001208C: +/* 0001208C 0001EE1C 7F A4 EB 78 */ mr r4, r29 +/* 00012090 0001EE20 FC 20 E0 90 */ fmr f1, f28 +/* 00012094 0001EE24 48 00 04 ED */ bl .L_00012580 +/* 00012098 0001EE28 80 01 00 BC */ lwz r0, 0xbc(r1) +/* 0001209C 0001EE2C 7C 08 03 A6 */ mtlr r0 +/* 000120A0 0001EE30 BB A1 00 8C */ lmw r29, 0x8c(r1) +/* 000120A4 0001EE34 E3 81 00 98 */ psq_l f28, 0x98(r1), 0, qr0 +/* 000120A8 0001EE38 E3 A1 00 A0 */ psq_l f29, 0xa0(r1), 0, qr0 +/* 000120AC 0001EE3C E3 C1 00 A8 */ psq_l f30, 0xa8(r1), 0, qr0 +/* 000120B0 0001EE40 E3 E1 00 B0 */ psq_l f31, 0xb0(r1), 0, qr0 +/* 000120B4 0001EE44 38 21 00 B8 */ addi r1, r1, 0xb8 +/* 000120B8 0001EE48 4E 80 00 20 */ blr +.endfn Update__20SelectCarCameraMoverf + +# .text:0x120BC | size: 0x3C +.fn SetCurrentOrientation__20SelectCarCameraMoverR8bVector3ffT1, global +/* 000120BC 0001EE4C C1 A4 00 00 */ lfs f13, 0x0(r4) +/* 000120C0 0001EE50 D1 A3 00 8C */ stfs f13, 0x8c(r3) +/* 000120C4 0001EE54 C0 04 00 04 */ lfs f0, 0x4(r4) +/* 000120C8 0001EE58 D0 03 00 90 */ stfs f0, 0x90(r3) +/* 000120CC 0001EE5C C1 A4 00 08 */ lfs f13, 0x8(r4) +/* 000120D0 0001EE60 D0 23 00 98 */ stfs f1, 0x98(r3) +/* 000120D4 0001EE64 D1 A3 00 94 */ stfs f13, 0x94(r3) +/* 000120D8 0001EE68 D0 43 00 9C */ stfs f2, 0x9c(r3) +/* 000120DC 0001EE6C C0 05 00 08 */ lfs f0, 0x8(r5) +/* 000120E0 0001EE70 C1 A5 00 00 */ lfs f13, 0x0(r5) +/* 000120E4 0001EE74 C1 85 00 04 */ lfs f12, 0x4(r5) +/* 000120E8 0001EE78 D0 03 00 A8 */ stfs f0, 0xa8(r3) +/* 000120EC 0001EE7C D1 A3 00 A0 */ stfs f13, 0xa0(r3) +/* 000120F0 0001EE80 D1 83 00 A4 */ stfs f12, 0xa4(r3) +/* 000120F4 0001EE84 4E 80 00 20 */ blr +.endfn SetCurrentOrientation__20SelectCarCameraMoverR8bVector3ffT1 + +# .text:0x120F8 | size: 0x124 +.fn SetDesiredOrientation__20SelectCarCameraMoverR8bVector3ffT1ffi, global +/* 000120F8 0001EE88 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 000120FC 0001EE8C 7C 08 02 A6 */ mflr r0 +/* 00012100 0001EE90 F3 E1 00 10 */ psq_st f31, 0x10(r1), 0, qr0 +/* 00012104 0001EE94 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 00012108 0001EE98 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0001210C 0001EE9C 7C 7E 1B 78 */ mr r30, r3 +/* 00012110 0001EEA0 38 00 00 00 */ li r0, 0x0 +/* 00012114 0001EEA4 C1 7E 00 8C */ lfs f11, 0x8c(r30) +/* 00012118 0001EEA8 FF E0 18 90 */ fmr f31, f3 +/* 0001211C 0001EEAC C0 FE 00 90 */ lfs f7, 0x90(r30) +/* 00012120 0001EEB0 C1 1E 00 94 */ lfs f8, 0x94(r30) +/* 00012124 0001EEB4 C1 3E 00 98 */ lfs f9, 0x98(r30) +/* 00012128 0001EEB8 C1 5E 00 A8 */ lfs f10, 0xa8(r30) +/* 0001212C 0001EEBC C0 1E 00 9C */ lfs f0, 0x9c(r30) +/* 00012130 0001EEC0 C1 BE 00 A0 */ lfs f13, 0xa0(r30) +/* 00012134 0001EEC4 C1 9E 00 A4 */ lfs f12, 0xa4(r30) +/* 00012138 0001EEC8 D1 7E 00 D4 */ stfs f11, 0xd4(r30) +.L_0001213C: +/* 0001213C 0001EECC D0 FE 00 D8 */ stfs f7, 0xd8(r30) +/* 00012140 0001EED0 D1 1E 00 DC */ stfs f8, 0xdc(r30) +.L_00012144: +/* 00012144 0001EED4 D1 3E 00 E0 */ stfs f9, 0xe0(r30) +/* 00012148 0001EED8 90 1E 00 80 */ stw r0, 0x80(r30) +/* 0001214C 0001EEDC D0 FE 00 B4 */ stfs f7, 0xb4(r30) +/* 00012150 0001EEE0 D1 1E 00 B8 */ stfs f8, 0xb8(r30) +/* 00012154 0001EEE4 D1 3E 00 BC */ stfs f9, 0xbc(r30) +/* 00012158 0001EEE8 D1 5E 00 CC */ stfs f10, 0xcc(r30) +/* 0001215C 0001EEEC D1 5E 00 F0 */ stfs f10, 0xf0(r30) +/* 00012160 0001EEF0 D1 7E 00 B0 */ stfs f11, 0xb0(r30) +/* 00012164 0001EEF4 D0 1E 00 E4 */ stfs f0, 0xe4(r30) +/* 00012168 0001EEF8 D0 1E 00 C0 */ stfs f0, 0xc0(r30) +/* 0001216C 0001EEFC D1 BE 00 C4 */ stfs f13, 0xc4(r30) +/* 00012170 0001EF00 D1 9E 00 C8 */ stfs f12, 0xc8(r30) +/* 00012174 0001EF04 D1 BE 00 E8 */ stfs f13, 0xe8(r30) +/* 00012178 0001EF08 D1 9E 00 EC */ stfs f12, 0xec(r30) +/* 0001217C 0001EF0C C1 84 00 00 */ lfs f12, 0x0(r4) +/* 00012180 0001EF10 D1 9E 00 D4 */ stfs f12, 0xd4(r30) +/* 00012184 0001EF14 C0 04 00 04 */ lfs f0, 0x4(r4) +/* 00012188 0001EF18 D0 1E 00 D8 */ stfs f0, 0xd8(r30) +.L_0001218C: +/* 0001218C 0001EF1C C1 A4 00 08 */ lfs f13, 0x8(r4) +/* 00012190 0001EF20 D0 3E 00 E0 */ stfs f1, 0xe0(r30) +/* 00012194 0001EF24 D1 BE 00 DC */ stfs f13, 0xdc(r30) +/* 00012198 0001EF28 FC 20 58 90 */ fmr f1, f11 +/* 0001219C 0001EF2C D0 5E 00 E4 */ stfs f2, 0xe4(r30) +/* 000121A0 0001EF30 FC 40 60 90 */ fmr f2, f12 +/* 000121A4 0001EF34 C0 05 00 00 */ lfs f0, 0x0(r5) +/* 000121A8 0001EF38 C1 85 00 08 */ lfs f12, 0x8(r5) +/* 000121AC 0001EF3C C1 A5 00 04 */ lfs f13, 0x4(r5) +/* 000121B0 0001EF40 D0 1E 00 E8 */ stfs f0, 0xe8(r30) +/* 000121B4 0001EF44 D0 9E 01 04 */ stfs f4, 0x104(r30) +/* 000121B8 0001EF48 90 DE 01 08 */ stw r6, 0x108(r30) +/* 000121BC 0001EF4C D1 BE 00 EC */ stfs f13, 0xec(r30) +/* 000121C0 0001EF50 D1 9E 00 F0 */ stfs f12, 0xf0(r30) +.L_000121C4: +/* 000121C4 0001EF54 48 01 22 1D */ bl .text+0x1221C +/* 000121C8 0001EF58 D0 3E 00 D4 */ stfs f1, 0xd4(r30) +/* 000121CC 0001EF5C 7F C3 F3 78 */ mr r3, r30 +/* 000121D0 0001EF60 C0 5E 00 D8 */ lfs f2, 0xd8(r30) +/* 000121D4 0001EF64 C0 3E 00 B4 */ lfs f1, 0xb4(r30) +/* 000121D8 0001EF68 48 01 22 1D */ bl .text+0x1221C +/* 000121DC 0001EF6C D0 3E 00 D8 */ stfs f1, 0xd8(r30) +/* 000121E0 0001EF70 7F C3 F3 78 */ mr r3, r30 +.L_000121E4: +/* 000121E4 0001EF74 C0 3E 00 BC */ lfs f1, 0xbc(r30) +/* 000121E8 0001EF78 C0 5E 00 E0 */ lfs f2, 0xe0(r30) +.L_000121EC: +/* 000121EC 0001EF7C 48 01 22 1D */ bl .text+0x1221C +/* 000121F0 0001EF80 3D 20 00 00 */ lis r9, .rodata+0xA44@ha +/* 000121F4 0001EF84 D0 3E 00 E0 */ stfs f1, 0xe0(r30) +/* 000121F8 0001EF88 C0 09 0A 44 */ lfs f0, .rodata+0xA44@l(r9) +/* 000121FC 0001EF8C D3 FE 01 10 */ stfs f31, 0x110(r30) +/* 00012200 0001EF90 D0 1E 01 0C */ stfs f0, 0x10c(r30) +.L_00012204: +/* 00012204 0001EF94 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 00012208 0001EF98 7C 08 03 A6 */ mtlr r0 +/* 0001220C 0001EF9C BB C1 00 08 */ lmw r30, 0x8(r1) +/* 00012210 0001EFA0 E3 E1 00 10 */ psq_l f31, 0x10(r1), 0, qr0 +/* 00012214 0001EFA4 38 21 00 18 */ addi r1, r1, 0x18 +/* 00012218 0001EFA8 4E 80 00 20 */ blr +.endfn SetDesiredOrientation__20SelectCarCameraMoverR8bVector3ffT1ffi + +# .text:0x1221C | size: 0x78 +.fn FindBestAngleGoal__20SelectCarCameraMoverff, global +/* 0001221C 0001EFAC 3D 20 00 00 */ lis r9, kSelectCarWrapAngle@ha +/* 00012220 0001EFB0 EC 01 10 28 */ fsubs f0, f1, f2 +/* 00012224 0001EFB4 C1 A9 00 00 */ lfs f13, kSelectCarWrapAngle@l(r9) +/* 00012228 0001EFB8 FD 60 02 10 */ fabs f11, f0 +/* 0001222C 0001EFBC ED 42 68 2A */ fadds f10, f2, f13 +/* 00012230 0001EFC0 EC 01 50 28 */ fsubs f0, f1, f10 +/* 00012234 0001EFC4 ED A2 68 28 */ fsubs f13, f2, f13 +.L_00012238: +/* 00012238 0001EFC8 FD 80 02 10 */ fabs f12, f0 +/* 0001223C 0001EFCC EC 21 68 28 */ fsubs f1, f1, f13 +/* 00012240 0001EFD0 FC 00 0A 10 */ fabs f0, f1 +/* 00012244 0001EFD4 FC 0C 58 00 */ fcmpu cr0, f12, f11 +/* 00012248 0001EFD8 4C 62 0B 82 */ cror un, eq, gt +/* 0001224C 0001EFDC 41 83 22 64 */ bso .L_000144B0 +/* 00012250 0001EFE0 FC 0C 00 00 */ fcmpu cr0, f12, f0 +/* 00012254 0001EFE4 4C 62 0B 82 */ cror un, eq, gt +/* 00012258 0001EFE8 41 83 22 64 */ bso .L_000144BC +/* 0001225C 0001EFEC FC 20 50 90 */ fmr f1, f10 +/* 00012260 0001EFF0 4E 80 00 20 */ blr +/* 00012264 0001EFF4 FC 00 58 00 */ fcmpu cr0, f0, f11 +/* 00012268 0001EFF8 4C 62 0B 82 */ cror un, eq, gt +/* 0001226C 0001EFFC 41 83 22 8C */ bso .L_000144F8 +/* 00012270 0001F000 FC 00 60 00 */ fcmpu cr0, f0, f12 +/* 00012274 0001F004 4C 62 0B 82 */ cror un, eq, gt +/* 00012278 0001F008 41 83 22 8C */ bso .L_00014504 +/* 0001227C 0001F00C 3D 20 00 00 */ lis r9, kSelectCarWrapAngle@ha +/* 00012280 0001F010 C0 09 00 00 */ lfs f0, kSelectCarWrapAngle@l(r9) +.L_00012284: +/* 00012284 0001F014 EC 22 00 28 */ fsubs f1, f2, f0 +/* 00012288 0001F018 4E 80 00 20 */ blr +/* 0001228C 0001F01C FC 20 10 90 */ fmr f1, f2 +/* 00012290 0001F020 4E 80 00 20 */ blr +.endfn FindBestAngleGoal__20SelectCarCameraMoverff + +# .text:0x12294 | size: 0x164 +.fn CreateCameraMatrix__20SelectCarCameraMoverP8bMatrix4P19SelectCarCameraData, global +/* 00012294 0001F024 94 21 FF 58 */ stwu r1, -0xa8(r1) +/* 00012298 0001F028 7C 08 02 A6 */ mflr r0 +/* 0001229C 0001F02C F3 E1 00 A0 */ psq_st f31, 0xa0(r1), 0, qr0 +/* 000122A0 0001F030 BF 01 00 80 */ stmw r24, 0x80(r1) +/* 000122A4 0001F034 90 01 00 AC */ stw r0, 0xac(r1) +/* 000122A8 0001F038 3D 20 00 00 */ lis r9, .rodata+0xA48@ha +/* 000122AC 0001F03C 7C 9C 23 78 */ mr r28, r4 +/* 000122B0 0001F040 C0 09 0A 48 */ lfs f0, .rodata+0xA48@l(r9) +/* 000122B4 0001F044 7C 7D 1B 78 */ mr r29, r3 +/* 000122B8 0001F048 C1 BC 00 08 */ lfs f13, 0x8(r28) +/* 000122BC 0001F04C 3B 61 00 08 */ addi r27, r1, 0x8 +/* 000122C0 0001F050 D0 01 00 0C */ stfs f0, 0xc(r1) +/* 000122C4 0001F054 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 000122C8 0001F058 3F C0 B6 0B */ lis r30, 0xb60b +/* 000122CC 0001F05C D1 BB 00 08 */ stfs f13, 0x8(r27) +/* 000122D0 0001F060 63 DE 60 B7 */ ori r30, r30, 0x60b7 +/* 000122D4 0001F064 48 00 00 01 */ bl PSMTX44Identity +/* 000122D8 0001F068 3B 5C 00 14 */ addi r26, r28, 0x14 +/* 000122DC 0001F06C 3D 20 00 00 */ lis r9, .rodata+0xA4C@ha +/* 000122E0 0001F070 C0 1C 00 04 */ lfs f0, 0x4(r28) +/* 000122E4 0001F074 C3 E9 0A 4C */ lfs f31, .rodata+0xA4C@l(r9) +/* 000122E8 0001F078 3B 01 00 68 */ addi r24, r1, 0x68 +/* 000122EC 0001F07C 3B 21 00 58 */ addi r25, r1, 0x58 +/* 000122F0 0001F080 EC 00 07 F2 */ fmuls f0, f0, f31 +/* 000122F4 0001F084 7F A3 EB 78 */ mr r3, r29 +/* 000122F8 0001F088 7F A4 EB 78 */ mr r4, r29 +/* 000122FC 0001F08C FD A0 00 1E */ fctiwz f13, f0 +/* 00012300 0001F090 D9 A1 00 78 */ stfd f13, 0x78(r1) +/* 00012304 0001F094 81 21 00 7C */ lwz r9, 0x7c(r1) +/* 00012308 0001F098 7C A9 F0 96 */ mulhw r5, r9, r30 +/* 0001230C 0001F09C 7D 20 FE 70 */ srawi r0, r9, 31 +/* 00012310 0001F0A0 7C A5 4A 14 */ add r5, r5, r9 +/* 00012314 0001F0A4 7C A5 46 70 */ srawi r5, r5, 8 +/* 00012318 0001F0A8 7C A0 28 50 */ subf r5, r0, r5 +/* 0001231C 0001F0AC 54 A5 04 3E */ clrlwi r5, r5, 16 +/* 00012320 0001F0B0 48 00 00 01 */ bl eRotateZ__FP8bMatrix4T0Us +/* 00012324 0001F0B4 C0 1C 00 00 */ lfs f0, 0x0(r28) +/* 00012328 0001F0B8 7F A3 EB 78 */ mr r3, r29 +/* 0001232C 0001F0BC 7F A4 EB 78 */ mr r4, r29 +/* 00012330 0001F0C0 EC 00 07 F2 */ fmuls f0, f0, f31 +/* 00012334 0001F0C4 FD A0 00 1E */ fctiwz f13, f0 +/* 00012338 0001F0C8 D9 A1 00 78 */ stfd f13, 0x78(r1) +/* 0001233C 0001F0CC 81 21 00 7C */ lwz r9, 0x7c(r1) +/* 00012340 0001F0D0 7C A9 F0 96 */ mulhw r5, r9, r30 +/* 00012344 0001F0D4 7D 20 FE 70 */ srawi r0, r9, 31 +/* 00012348 0001F0D8 7C A5 4A 14 */ add r5, r5, r9 +/* 0001234C 0001F0DC 7C A5 46 70 */ srawi r5, r5, 8 +/* 00012350 0001F0E0 7C A0 28 50 */ subf r5, r0, r5 +.L_00012354: +/* 00012354 0001F0E4 54 A5 04 3E */ clrlwi r5, r5, 16 +/* 00012358 0001F0E8 48 00 00 01 */ bl eRotateX__FP8bMatrix4T0Us +/* 0001235C 0001F0EC 7F 65 DB 78 */ mr r5, r27 +/* 00012360 0001F0F0 7F A3 EB 78 */ mr r3, r29 +.L_00012364: +/* 00012364 0001F0F4 7F A4 EB 78 */ mr r4, r29 +/* 00012368 0001F0F8 48 00 00 01 */ bl eTranslate__FP8bMatrix4T0P8bVector3 +/* 0001236C 0001F0FC 7F A4 EB 78 */ mr r4, r29 +/* 00012370 0001F100 38 61 00 18 */ addi r3, r1, 0x18 +/* 00012374 0001F104 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 +/* 00012378 0001F108 C0 1C 00 0C */ lfs f0, 0xc(r28) +.L_0001237C: +/* 0001237C 0001F10C C1 81 00 48 */ lfs f12, 0x48(r1) +/* 00012380 0001F110 7F 03 C3 78 */ mr r3, r24 +/* 00012384 0001F114 EC 00 07 F2 */ fmuls f0, f0, f31 +/* 00012388 0001F118 C1 61 00 4C */ lfs f11, 0x4c(r1) +/* 0001238C 0001F11C C1 41 00 50 */ lfs f10, 0x50(r1) +/* 00012390 0001F120 FD A0 00 1E */ fctiwz f13, f0 +/* 00012394 0001F124 7F 24 CB 78 */ mr r4, r25 +/* 00012398 0001F128 D9 A1 00 78 */ stfd f13, 0x78(r1) +/* 0001239C 0001F12C 7F 45 D3 78 */ mr r5, r26 +/* 000123A0 0001F130 D1 81 00 58 */ stfs f12, 0x58(r1) +/* 000123A4 0001F134 81 21 00 7C */ lwz r9, 0x7c(r1) +/* 000123A8 0001F138 D1 61 00 5C */ stfs f11, 0x5c(r1) +/* 000123AC 0001F13C 7F C9 F0 96 */ mulhw r30, r9, r30 +/* 000123B0 0001F140 7D 20 FE 70 */ srawi r0, r9, 31 +/* 000123B4 0001F144 D1 41 00 60 */ stfs f10, 0x60(r1) +/* 000123B8 0001F148 7F DE 4A 14 */ add r30, r30, r9 +/* 000123BC 0001F14C 7F DE 46 70 */ srawi r30, r30, 8 +/* 000123C0 0001F150 7F C0 F0 50 */ subf r30, r0, r30 +/* 000123C4 0001F154 57 C6 04 3E */ clrlwi r6, r30, 16 +/* 000123C8 0001F158 48 00 31 11 */ bl .L_000154D8 +/* 000123CC 0001F15C 7F A3 EB 78 */ mr r3, r29 +/* 000123D0 0001F160 7F 24 CB 78 */ mr r4, r25 +/* 000123D4 0001F164 7F 45 D3 78 */ mr r5, r26 +/* 000123D8 0001F168 7F 06 C3 78 */ mr r6, r24 +/* 000123DC 0001F16C 48 00 00 01 */ bl eCreateLookAtMatrix__FP8bMatrix4R8bVector3N21 +/* 000123E0 0001F170 80 01 00 AC */ lwz r0, 0xac(r1) +/* 000123E4 0001F174 7C 08 03 A6 */ mtlr r0 +/* 000123E8 0001F178 BB 01 00 80 */ lmw r24, 0x80(r1) +/* 000123EC 0001F17C E3 E1 00 A0 */ psq_l f31, 0xa0(r1), 0, qr0 +/* 000123F0 0001F180 38 21 00 A8 */ addi r1, r1, 0xa8 +/* 000123F4 0001F184 4E 80 00 20 */ blr +.endfn CreateCameraMatrix__20SelectCarCameraMoverP8bMatrix4P19SelectCarCameraData + +# .text:0x123F8 | size: 0x30 +.fn _._19ShowcaseCameraMover, global +/* 000123F8 0001F188 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 000123FC 0001F18C 7C 08 02 A6 */ mflr r0 +/* 00012400 0001F190 90 01 00 0C */ stw r0, 0xc(r1) +/* 00012404 0001F194 3D 20 00 00 */ lis r9, _vt.19ShowcaseCameraMover@ha +/* 00012408 0001F198 7C 6B 1B 78 */ mr r11, r3 +/* 0001240C 0001F19C 39 29 00 00 */ addi r9, r9, _vt.19ShowcaseCameraMover@l +/* 00012410 0001F1A0 91 2B 00 08 */ stw r9, 0x8(r11) +/* 00012414 0001F1A4 48 00 20 35 */ bl .L_00014448 +/* 00012418 0001F1A8 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0001241C 0001F1AC 7C 08 03 A6 */ mtlr r0 +/* 00012420 0001F1B0 38 21 00 08 */ addi r1, r1, 0x8 +/* 00012424 0001F1B4 4E 80 00 20 */ blr +.endfn _._19ShowcaseCameraMover + +# .text:0x12428 | size: 0x1C +# ShowcaseCameraMover::ResetState +.fn ResetState__19ShowcaseCameraMover, global +/* 00012428 0001F1B8 3D 20 00 00 */ lis r9, RealTimeFrames@ha +/* 0001242C 0001F1BC 81 63 00 1C */ lwz r11, 0x1c(r3) +.L_00012430: +/* 00012430 0001F1C0 81 49 00 00 */ lwz r10, RealTimeFrames@l(r9) +/* 00012434 0001F1C4 38 00 00 01 */ li r0, 0x1 +/* 00012438 0001F1C8 90 0B 02 7C */ stw r0, 0x27c(r11) +/* 0001243C 0001F1CC 91 4B 02 88 */ stw r10, 0x288(r11) +.L_00012440: +/* 00012440 0001F1D0 4E 80 00 20 */ blr +.endfn ResetState__19ShowcaseCameraMover + +# .text:0x12444 | size: 0x88 +.fn __19ShowcaseCameraMoveriP12CameraAnchorb, global +/* 00012444 0001F1D4 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 00012448 0001F1D8 7C 08 02 A6 */ mflr r0 +/* 0001244C 0001F1DC BF A1 00 0C */ stmw r29, 0xc(r1) +/* 00012450 0001F1E0 90 01 00 1C */ stw r0, 0x1c(r1) +/* 00012454 0001F1E4 7C 7F 1B 78 */ mr r31, r3 +/* 00012458 0001F1E8 7C BE 2B 78 */ mr r30, r5 +/* 0001245C 0001F1EC 7C DD 33 78 */ mr r29, r6 +/* 00012460 0001F1F0 38 A0 00 12 */ li r5, 0x12 +/* 00012464 0001F1F4 48 00 1F 1D */ bl .L_00014380 +/* 00012468 0001F1F8 3D 60 00 00 */ lis r11, RealTimeFrames@ha +/* 0001246C 0001F1FC 3D 20 00 00 */ lis r9, _vt.19ShowcaseCameraMover@ha +/* 00012470 0001F200 81 0B 00 00 */ lwz r8, RealTimeFrames@l(r11) +.L_00012474: +/* 00012474 0001F204 39 29 00 00 */ addi r9, r9, _vt.19ShowcaseCameraMover@l +/* 00012478 0001F208 81 5F 00 1C */ lwz r10, 0x1c(r31) +/* 0001247C 0001F20C 38 00 00 01 */ li r0, 0x1 +/* 00012480 0001F210 91 3F 00 08 */ stw r9, 0x8(r31) +/* 00012484 0001F214 7F E3 FB 78 */ mr r3, r31 +/* 00012488 0001F218 93 DF 00 80 */ stw r30, 0x80(r31) +.L_0001248C: +/* 0001248C 0001F21C 91 0A 02 88 */ stw r8, 0x288(r10) +/* 00012490 0001F220 90 0A 02 7C */ stw r0, 0x27c(r10) +/* 00012494 0001F224 48 01 24 CD */ bl .text+0x124CC +.L_00012498: +/* 00012498 0001F228 2C 1D 00 00 */ cmpwi r29, 0x0 +/* 0001249C 0001F22C 41 82 24 AC */ beq .L_00014948 +.L_000124A0: +/* 000124A0 0001F230 C0 1F 00 84 */ lfs f0, 0x84(r31) +/* 000124A4 0001F234 FC 00 00 50 */ fneg f0, f0 +/* 000124A8 0001F238 D0 1F 00 84 */ stfs f0, 0x84(r31) +.L_000124AC: +/* 000124AC 0001F23C 7F E3 FB 78 */ mr r3, r31 +/* 000124B0 0001F240 48 01 25 55 */ bl .text+0x12554 +/* 000124B4 0001F244 7F E3 FB 78 */ mr r3, r31 +/* 000124B8 0001F248 80 01 00 1C */ lwz r0, 0x1c(r1) +.L_000124BC: +/* 000124BC 0001F24C 7C 08 03 A6 */ mtlr r0 +/* 000124C0 0001F250 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 000124C4 0001F254 38 21 00 18 */ addi r1, r1, 0x18 +/* 000124C8 0001F258 4E 80 00 20 */ blr +.endfn __19ShowcaseCameraMoveriP12CameraAnchorb + +# .text:0x124CC | size: 0x5C +# ShowcaseCameraMover::SetFromTweakables +.fn SetFromTweakables__19ShowcaseCameraMover, global +/* 000124CC 0001F25C 3D 20 00 00 */ lis r9, gPhoto_LatAng@ha +/* 000124D0 0001F260 3D 60 00 00 */ lis r11, gPhoto_UpAng@ha +/* 000124D4 0001F264 3D 40 00 00 */ lis r10, gPhoto_Dist@ha +/* 000124D8 0001F268 C0 0B 00 00 */ lfs f0, gPhoto_UpAng@l(r11) +/* 000124DC 0001F26C C1 AA 00 00 */ lfs f13, gPhoto_Dist@l(r10) +/* 000124E0 0001F270 3D 60 00 00 */ lis r11, gPhoto_CarPosBias@ha +/* 000124E4 0001F274 C1 49 00 00 */ lfs f10, gPhoto_LatAng@l(r9) +/* 000124E8 0001F278 39 4B 00 00 */ addi r10, r11, gPhoto_CarPosBias@l +/* 000124EC 0001F27C D0 03 00 88 */ stfs f0, 0x88(r3) +/* 000124F0 0001F280 3D 20 00 00 */ lis r9, gPhoto_DOF@ha +/* 000124F4 0001F284 D1 A3 00 8C */ stfs f13, 0x8c(r3) +/* 000124F8 0001F288 D1 43 00 84 */ stfs f10, 0x84(r3) +/* 000124FC 0001F28C C1 69 00 00 */ lfs f11, gPhoto_DOF@l(r9) +/* 00012500 0001F290 C1 AB 00 00 */ lfs f13, gPhoto_CarPosBias@l(r11) +/* 00012504 0001F294 C1 8A 00 08 */ lfs f12, 0x8(r10) +/* 00012508 0001F298 C0 0A 00 04 */ lfs f0, 0x4(r10) +/* 0001250C 0001F29C D1 63 00 A8 */ stfs f11, 0xa8(r3) +/* 00012510 0001F2A0 D1 A3 00 90 */ stfs f13, 0x90(r3) +/* 00012514 0001F2A4 D0 03 00 94 */ stfs f0, 0x94(r3) +/* 00012518 0001F2A8 D1 83 00 98 */ stfs f12, 0x98(r3) +/* 0001251C 0001F2AC D1 43 00 A0 */ stfs f10, 0xa0(r3) +/* 00012520 0001F2B0 D1 63 00 A4 */ stfs f11, 0xa4(r3) +/* 00012524 0001F2B4 4E 80 00 20 */ blr +.endfn SetFromTweakables__19ShowcaseCameraMover + +# .text:0x12528 | size: 0x2C +.fn SetShowcaseCameraParams__19ShowcaseCameraMoverfffffffff, global +/* 00012528 0001F2B8 C0 01 00 08 */ lfs f0, 0x8(r1) +/* 0001252C 0001F2BC D0 23 00 84 */ stfs f1, 0x84(r3) +/* 00012530 0001F2C0 D0 03 00 A8 */ stfs f0, 0xa8(r3) +/* 00012534 0001F2C4 D0 43 00 88 */ stfs f2, 0x88(r3) +/* 00012538 0001F2C8 D0 63 00 8C */ stfs f3, 0x8c(r3) +/* 0001253C 0001F2CC D0 83 00 90 */ stfs f4, 0x90(r3) +/* 00012540 0001F2D0 D0 A3 00 94 */ stfs f5, 0x94(r3) +/* 00012544 0001F2D4 D0 C3 00 98 */ stfs f6, 0x98(r3) +/* 00012548 0001F2D8 D0 E3 00 A0 */ stfs f7, 0xa0(r3) +/* 0001254C 0001F2DC D1 03 00 A4 */ stfs f8, 0xa4(r3) +/* 00012550 0001F2E0 4E 80 00 20 */ blr +.endfn SetShowcaseCameraParams__19ShowcaseCameraMoverfffffffff + +# .text:0x12554 | size: 0x258 +# ShowcaseCameraMover::BuildPhotoCameraMatrix +.fn BuildPhotoCameraMatrix__19ShowcaseCameraMover, global +/* 00012554 0001F2E4 94 21 FE C0 */ stwu r1, -0x140(r1) +/* 00012558 0001F2E8 7C 08 02 A6 */ mflr r0 +/* 0001255C 0001F2EC F3 A1 01 28 */ psq_st f29, 0x128(r1), 0, qr0 +/* 00012560 0001F2F0 F3 C1 01 30 */ psq_st f30, 0x130(r1), 0, qr0 +/* 00012564 0001F2F4 F3 E1 01 38 */ psq_st f31, 0x138(r1), 0, qr0 +/* 00012568 0001F2F8 BF 21 01 0C */ stmw r25, 0x10c(r1) +/* 0001256C 0001F2FC 90 01 01 44 */ stw r0, 0x144(r1) +/* 00012570 0001F300 7C 7F 1B 78 */ mr r31, r3 +/* 00012574 0001F304 38 81 00 28 */ addi r4, r1, 0x28 +/* 00012578 0001F308 83 BF 00 80 */ lwz r29, 0x80(r31) +/* 0001257C 0001F30C 3B C1 00 38 */ addi r30, r1, 0x38 +.L_00012580: +/* 00012580 0001F310 3B 81 00 48 */ addi r28, r1, 0x48 +/* 00012584 0001F314 7C 99 23 78 */ mr r25, r4 +/* 00012588 0001F318 38 7D 00 48 */ addi r3, r29, 0x48 +/* 0001258C 0001F31C 3F 60 B6 0B */ lis r27, 0xb60b +/* 00012590 0001F320 48 00 00 01 */ bl PSMTX44Copy +/* 00012594 0001F324 63 7B 60 B7 */ ori r27, r27, 0x60b7 +.L_00012598: +/* 00012598 0001F328 3D 20 00 00 */ lis r9, .rodata+0xA50@ha +/* 0001259C 0001F32C 3D 60 00 00 */ lis r11, .rodata+0xA54@ha +.L_000125A0: +/* 000125A0 0001F330 C3 E9 0A 50 */ lfs f31, .rodata+0xA50@l(r9) +/* 000125A4 0001F334 3B 41 00 08 */ addi r26, r1, 0x8 +/* 000125A8 0001F338 C3 AB 0A 54 */ lfs f29, .rodata+0xA54@l(r11) +/* 000125AC 0001F33C 7F C4 F3 78 */ mr r4, r30 +/* 000125B0 0001F340 D3 E1 00 68 */ stfs f31, 0x68(r1) +/* 000125B4 0001F344 7F 85 E3 78 */ mr r5, r28 +/* 000125B8 0001F348 D3 E1 00 6C */ stfs f31, 0x6c(r1) +/* 000125BC 0001F34C 7F 23 CB 78 */ mr r3, r25 +/* 000125C0 0001F350 D3 A1 00 70 */ stfs f29, 0x70(r1) +/* 000125C4 0001F354 D3 E1 00 48 */ stfs f31, 0x48(r1) +/* 000125C8 0001F358 D3 E1 00 4C */ stfs f31, 0x4c(r1) +/* 000125CC 0001F35C D3 A1 00 50 */ stfs f29, 0x50(r1) +.L_000125D0: +/* 000125D0 0001F360 D3 E1 00 54 */ stfs f31, 0x54(r1) +/* 000125D4 0001F364 D3 E1 00 30 */ stfs f31, 0x30(r1) +/* 000125D8 0001F368 D3 E1 00 40 */ stfs f31, 0x40(r1) +.L_000125DC: +/* 000125DC 0001F36C 48 00 00 01 */ bl bCross__FP8bVector3PC8bVector3T1 +/* 000125E0 0001F370 7F 25 CB 78 */ mr r5, r25 +/* 000125E4 0001F374 7F 84 E3 78 */ mr r4, r28 +/* 000125E8 0001F378 7F C3 F3 78 */ mr r3, r30 +.L_000125EC: +/* 000125EC 0001F37C 48 00 00 01 */ bl bCross__FP8bVector3PC8bVector3T1 +/* 000125F0 0001F380 7F 24 CB 78 */ mr r4, r25 +/* 000125F4 0001F384 7F 23 CB 78 */ mr r3, r25 +/* 000125F8 0001F388 48 00 00 01 */ bl bNormalize__FP8bVector4PC8bVector4 +/* 000125FC 0001F38C 7F C3 F3 78 */ mr r3, r30 +/* 00012600 0001F390 7C 64 1B 78 */ mr r4, r3 +/* 00012604 0001F394 48 00 00 01 */ bl bNormalize__FP8bVector4PC8bVector4 +/* 00012608 0001F398 38 61 00 18 */ addi r3, r1, 0x18 +/* 0001260C 0001F39C 38 BF 00 90 */ addi r5, r31, 0x90 +/* 00012610 0001F3A0 7F 24 CB 78 */ mr r4, r25 +/* 00012614 0001F3A4 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 +/* 00012618 0001F3A8 3D 20 00 00 */ lis r9, .rodata+0xA58@ha +/* 0001261C 0001F3AC C0 1F 00 84 */ lfs f0, 0x84(r31) +/* 00012620 0001F3B0 C3 C9 0A 58 */ lfs f30, .rodata+0xA58@l(r9) +/* 00012624 0001F3B4 38 61 00 E8 */ addi r3, r1, 0xe8 +/* 00012628 0001F3B8 C1 3D 00 18 */ lfs f9, 0x18(r29) +/* 0001262C 0001F3BC EC 00 07 B2 */ fmuls f0, f0, f30 +/* 00012630 0001F3C0 C1 5D 00 1C */ lfs f10, 0x1c(r29) +/* 00012634 0001F3C4 C1 81 00 18 */ lfs f12, 0x18(r1) +/* 00012638 0001F3C8 FD A0 00 1E */ fctiwz f13, f0 +/* 0001263C 0001F3CC C1 61 00 1C */ lfs f11, 0x1c(r1) +/* 00012640 0001F3D0 D9 A1 01 00 */ stfd f13, 0x100(r1) +/* 00012644 0001F3D4 ED 29 60 2A */ fadds f9, f9, f12 +/* 00012648 0001F3D8 C0 1D 00 20 */ lfs f0, 0x20(r29) +/* 0001264C 0001F3DC ED 4A 58 2A */ fadds f10, f10, f11 +/* 00012650 0001F3E0 81 21 01 04 */ lwz r9, 0x104(r1) +/* 00012654 0001F3E4 38 81 00 EC */ addi r4, r1, 0xec +/* 00012658 0001F3E8 C1 A1 00 20 */ lfs f13, 0x20(r1) +/* 0001265C 0001F3EC 7C A9 D8 96 */ mulhw r5, r9, r27 +/* 00012660 0001F3F0 7D 20 FE 70 */ srawi r0, r9, 31 +/* 00012664 0001F3F4 EC 00 68 2A */ fadds f0, f0, f13 +/* 00012668 0001F3F8 D1 21 00 08 */ stfs f9, 0x8(r1) +/* 0001266C 0001F3FC D1 41 00 0C */ stfs f10, 0xc(r1) +/* 00012670 0001F400 D0 1A 00 08 */ stfs f0, 0x8(r26) +.L_00012674: +/* 00012674 0001F404 7C A5 4A 14 */ add r5, r5, r9 +/* 00012678 0001F408 7C A5 46 70 */ srawi r5, r5, 8 +/* 0001267C 0001F40C 7C A0 28 50 */ subf r5, r0, r5 +/* 00012680 0001F410 54 A5 04 3E */ clrlwi r5, r5, 16 +/* 00012684 0001F414 48 00 00 01 */ bl bSinCos__FPfT0Us +/* 00012688 0001F418 3D 20 00 00 */ lis r9, .rodata+0xA5C@ha +/* 0001268C 0001F41C C0 1F 00 88 */ lfs f0, 0x88(r31) +/* 00012690 0001F420 C1 A9 0A 5C */ lfs f13, .rodata+0xA5C@l(r9) +/* 00012694 0001F424 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00012698 0001F428 4C 62 0B 82 */ cror un, eq, gt +/* 0001269C 0001F42C 41 83 26 A4 */ bso .L_00014D40 +/* 000126A0 0001F430 D1 BF 00 88 */ stfs f13, 0x88(r31) +/* 000126A4 0001F434 C0 1F 00 88 */ lfs f0, 0x88(r31) +/* 000126A8 0001F438 3B C1 00 98 */ addi r30, r1, 0x98 +/* 000126AC 0001F43C 3B A1 00 78 */ addi r29, r1, 0x78 +/* 000126B0 0001F440 EC 00 07 B2 */ fmuls f0, f0, f30 +.L_000126B4: +/* 000126B4 0001F444 38 61 00 F0 */ addi r3, r1, 0xf0 +.L_000126B8: +/* 000126B8 0001F448 38 81 00 F4 */ addi r4, r1, 0xf4 +/* 000126BC 0001F44C FD A0 00 1E */ fctiwz f13, f0 +/* 000126C0 0001F450 D9 A1 01 00 */ stfd f13, 0x100(r1) +/* 000126C4 0001F454 81 21 01 04 */ lwz r9, 0x104(r1) +/* 000126C8 0001F458 7C A9 D8 96 */ mulhw r5, r9, r27 +/* 000126CC 0001F45C 7D 20 FE 70 */ srawi r0, r9, 31 +/* 000126D0 0001F460 7C A5 4A 14 */ add r5, r5, r9 +/* 000126D4 0001F464 7C A5 46 70 */ srawi r5, r5, 8 +/* 000126D8 0001F468 7C A0 28 50 */ subf r5, r0, r5 +.L_000126DC: +/* 000126DC 0001F46C 54 A5 04 3E */ clrlwi r5, r5, 16 +/* 000126E0 0001F470 48 00 00 01 */ bl bSinCos__FPfT0Us +/* 000126E4 0001F474 C1 7F 00 8C */ lfs f11, 0x8c(r31) +/* 000126E8 0001F478 38 A1 00 88 */ addi r5, r1, 0x88 +.L_000126EC: +/* 000126EC 0001F47C C1 A1 00 EC */ lfs f13, 0xec(r1) +/* 000126F0 0001F480 7F 24 CB 78 */ mr r4, r25 +/* 000126F4 0001F484 C1 81 00 E8 */ lfs f12, 0xe8(r1) +/* 000126F8 0001F488 7F A3 EB 78 */ mr r3, r29 +/* 000126FC 0001F48C C0 01 00 F0 */ lfs f0, 0xf0(r1) +/* 00012700 0001F490 ED AD 02 F2 */ fmuls f13, f13, f11 +/* 00012704 0001F494 ED 8C 02 F2 */ fmuls f12, f12, f11 +/* 00012708 0001F498 D1 A1 00 88 */ stfs f13, 0x88(r1) +/* 0001270C 0001F49C EC 00 02 F2 */ fmuls f0, f0, f11 +/* 00012710 0001F4A0 D1 81 00 8C */ stfs f12, 0x8c(r1) +/* 00012714 0001F4A4 D0 01 00 90 */ stfs f0, 0x90(r1) +/* 00012718 0001F4A8 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 +/* 0001271C 0001F4AC C1 3A 00 08 */ lfs f9, 0x8(r26) +/* 00012720 0001F4B0 7F 45 D3 78 */ mr r5, r26 +/* 00012724 0001F4B4 C1 81 00 78 */ lfs f12, 0x78(r1) +/* 00012728 0001F4B8 38 C1 00 D8 */ addi r6, r1, 0xd8 +/* 0001272C 0001F4BC C1 A1 00 7C */ lfs f13, 0x7c(r1) +/* 00012730 0001F4C0 7F A4 EB 78 */ mr r4, r29 +/* 00012734 0001F4C4 C0 01 00 80 */ lfs f0, 0x80(r1) +/* 00012738 0001F4C8 7F C3 F3 78 */ mr r3, r30 +/* 0001273C 0001F4CC C1 61 00 08 */ lfs f11, 0x8(r1) +/* 00012740 0001F4D0 C1 41 00 0C */ lfs f10, 0xc(r1) +/* 00012744 0001F4D4 EC 00 48 2A */ fadds f0, f0, f9 +/* 00012748 0001F4D8 ED 8C 58 2A */ fadds f12, f12, f11 +/* 0001274C 0001F4DC D0 01 00 80 */ stfs f0, 0x80(r1) +/* 00012750 0001F4E0 ED AD 50 2A */ fadds f13, f13, f10 +/* 00012754 0001F4E4 D1 81 00 78 */ stfs f12, 0x78(r1) +/* 00012758 0001F4E8 D1 A1 00 7C */ stfs f13, 0x7c(r1) +/* 0001275C 0001F4EC D3 E1 00 DC */ stfs f31, 0xdc(r1) +/* 00012760 0001F4F0 D3 A1 00 E0 */ stfs f29, 0xe0(r1) +/* 00012764 0001F4F4 D3 E1 00 D8 */ stfs f31, 0xd8(r1) +/* 00012768 0001F4F8 48 00 00 01 */ bl eCreateLookAtMatrix__FP8bMatrix4R8bVector3N21 +/* 0001276C 0001F4FC 80 BF 00 80 */ lwz r5, 0x80(r31) +/* 00012770 0001F500 7F C4 F3 78 */ mr r4, r30 +/* 00012774 0001F504 7F E3 FB 78 */ mr r3, r31 +/* 00012778 0001F508 38 A5 00 18 */ addi r5, r5, 0x18 +/* 0001277C 0001F50C 48 00 3A F1 */ bl .L_0001626C +/* 00012780 0001F510 7F C3 F3 78 */ mr r3, r30 +/* 00012784 0001F514 38 9F 00 AC */ addi r4, r31, 0xac +/* 00012788 0001F518 48 00 00 01 */ bl PSMTX44Copy +/* 0001278C 0001F51C 80 01 01 44 */ lwz r0, 0x144(r1) +/* 00012790 0001F520 7C 08 03 A6 */ mtlr r0 +/* 00012794 0001F524 BB 21 01 0C */ lmw r25, 0x10c(r1) +/* 00012798 0001F528 E3 A1 01 28 */ psq_l f29, 0x128(r1), 0, qr0 +/* 0001279C 0001F52C E3 C1 01 30 */ psq_l f30, 0x130(r1), 0, qr0 +/* 000127A0 0001F530 E3 E1 01 38 */ psq_l f31, 0x138(r1), 0, qr0 +.L_000127A4: +/* 000127A4 0001F534 38 21 01 40 */ addi r1, r1, 0x140 +.L_000127A8: +/* 000127A8 0001F538 4E 80 00 20 */ blr +.endfn BuildPhotoCameraMatrix__19ShowcaseCameraMover + +# .text:0x127AC | size: 0xB0 +.fn Update__19ShowcaseCameraMoverf, global +/* 000127AC 0001F53C 94 21 FF D8 */ stwu r1, -0x28(r1) +/* 000127B0 0001F540 7C 08 02 A6 */ mflr r0 +/* 000127B4 0001F544 F3 E1 00 20 */ psq_st f31, 0x20(r1), 0, qr0 +/* 000127B8 0001F548 93 E1 00 1C */ stw r31, 0x1c(r1) +/* 000127BC 0001F54C 90 01 00 2C */ stw r0, 0x2c(r1) +/* 000127C0 0001F550 7C 7F 1B 78 */ mr r31, r3 +/* 000127C4 0001F554 FF E0 08 90 */ fmr f31, f1 +/* 000127C8 0001F558 48 01 25 55 */ bl .text+0x12554 +.L_000127CC: +/* 000127CC 0001F55C 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha +/* 000127D0 0001F560 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) +/* 000127D4 0001F564 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000127D8 0001F568 40 82 28 34 */ bne .L_0001500C +.L_000127DC: +/* 000127DC 0001F56C 3D 20 00 00 */ lis r9, .rodata+0xA60@ha +/* 000127E0 0001F570 C0 1F 00 A0 */ lfs f0, 0xa0(r31) +/* 000127E4 0001F574 C1 89 0A 60 */ lfs f12, .rodata+0xA60@l(r9) +/* 000127E8 0001F578 3C 00 B6 0B */ lis r0, 0xb60b +/* 000127EC 0001F57C 60 00 60 B7 */ ori r0, r0, 0x60b7 +/* 000127F0 0001F580 EC 00 03 32 */ fmuls f0, f0, f12 +/* 000127F4 0001F584 81 5F 00 1C */ lwz r10, 0x1c(r31) +/* 000127F8 0001F588 FD A0 00 1E */ fctiwz f13, f0 +/* 000127FC 0001F58C D9 A1 00 10 */ stfd f13, 0x10(r1) +/* 00012800 0001F590 81 21 00 14 */ lwz r9, 0x14(r1) +/* 00012804 0001F594 7C 09 00 96 */ mulhw r0, r9, r0 +/* 00012808 0001F598 7D 2B FE 70 */ srawi r11, r9, 31 +/* 0001280C 0001F59C 7C 00 4A 14 */ add r0, r0, r9 +/* 00012810 0001F5A0 7C 00 46 70 */ srawi r0, r0, 8 +/* 00012814 0001F5A4 7C 0B 00 50 */ subf r0, r11, r0 +/* 00012818 0001F5A8 B0 0A 00 C4 */ sth r0, 0xc4(r10) +/* 0001281C 0001F5AC C0 1F 00 A8 */ lfs f0, 0xa8(r31) +/* 00012820 0001F5B0 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 00012824 0001F5B4 D0 09 00 B8 */ stfs f0, 0xb8(r9) +/* 00012828 0001F5B8 81 7F 00 1C */ lwz r11, 0x1c(r31) +/* 0001282C 0001F5BC C0 1F 00 A4 */ lfs f0, 0xa4(r31) +/* 00012830 0001F5C0 D0 0B 00 B4 */ stfs f0, 0xb4(r11) +/* 00012834 0001F5C4 80 7F 00 1C */ lwz r3, 0x1c(r31) +/* 00012838 0001F5C8 38 9F 00 AC */ addi r4, r31, 0xac +/* 0001283C 0001F5CC FC 20 F8 90 */ fmr f1, f31 +/* 00012840 0001F5D0 48 00 04 ED */ bl .L_00012D2C +/* 00012844 0001F5D4 80 01 00 2C */ lwz r0, 0x2c(r1) +/* 00012848 0001F5D8 7C 08 03 A6 */ mtlr r0 +/* 0001284C 0001F5DC 83 E1 00 1C */ lwz r31, 0x1c(r1) +/* 00012850 0001F5E0 E3 E1 00 20 */ psq_l f31, 0x20(r1), 0, qr0 +/* 00012854 0001F5E4 38 21 00 28 */ addi r1, r1, 0x28 +/* 00012858 0001F5E8 4E 80 00 20 */ blr +.endfn Update__19ShowcaseCameraMoverf + +# .text:0x1285C | size: 0x114 +.fn __21DebugWorldCameraMoveriPC8bVector3T212JoystickPort, global +/* 0001285C 0001F5EC 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 00012860 0001F5F0 7C 08 02 A6 */ mflr r0 +/* 00012864 0001F5F4 BF 61 00 0C */ stmw r27, 0xc(r1) +/* 00012868 0001F5F8 90 01 00 24 */ stw r0, 0x24(r1) +/* 0001286C 0001F5FC 7C 7E 1B 78 */ mr r30, r3 +/* 00012870 0001F600 7C BD 2B 78 */ mr r29, r5 +/* 00012874 0001F604 7C DC 33 78 */ mr r28, r6 +/* 00012878 0001F608 7C FB 3B 78 */ mr r27, r7 +/* 0001287C 0001F60C 38 A0 00 02 */ li r5, 0x2 +/* 00012880 0001F610 48 00 1F 1D */ bl .L_0001479C +/* 00012884 0001F614 3D 60 00 00 */ lis r11, .rodata+0xA64@ha +/* 00012888 0001F618 3D 20 00 00 */ lis r9, _vt.21DebugWorldCameraMover@ha +/* 0001288C 0001F61C C0 0B 0A 64 */ lfs f0, .rodata+0xA64@l(r11) +/* 00012890 0001F620 39 29 00 00 */ addi r9, r9, _vt.21DebugWorldCameraMover@l +/* 00012894 0001F624 38 00 00 00 */ li r0, 0x0 +/* 00012898 0001F628 91 3E 00 08 */ stw r9, 0x8(r30) +/* 0001289C 0001F62C 93 7E 00 9C */ stw r27, 0x9c(r30) +/* 000128A0 0001F630 3D 40 00 00 */ lis r10, _21DebugWorldCameraMover.Eye@ha +/* 000128A4 0001F634 B0 1E 00 90 */ sth r0, 0x90(r30) +/* 000128A8 0001F638 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.SuperTurboOn@ha +/* 000128AC 0001F63C B0 1E 00 92 */ sth r0, 0x92(r30) +.L_000128B0: +/* 000128B0 0001F640 39 0A 00 00 */ addi r8, r10, _21DebugWorldCameraMover.Eye@l +/* 000128B4 0001F644 D0 1E 00 88 */ stfs f0, 0x88(r30) +/* 000128B8 0001F648 38 00 00 00 */ li r0, 0x0 +/* 000128BC 0001F64C D0 1E 00 8C */ stfs f0, 0x8c(r30) +/* 000128C0 0001F650 3C E0 00 00 */ lis r7, _21DebugWorldCameraMover.Look@ha +/* 000128C4 0001F654 D0 1E 00 80 */ stfs f0, 0x80(r30) +/* 000128C8 0001F658 3D 60 00 00 */ lis r11, _21DebugWorldCameraMover.TurboOn@ha +.L_000128CC: +/* 000128CC 0001F65C D0 1E 00 84 */ stfs f0, 0x84(r30) +/* 000128D0 0001F660 38 C7 00 00 */ addi r6, r7, _21DebugWorldCameraMover.Look@l +/* 000128D4 0001F664 90 09 00 00 */ stw r0, _21DebugWorldCameraMover.SuperTurboOn@l(r9) +/* 000128D8 0001F668 3F 60 00 00 */ lis r27, DebugCameraNearPlane@ha +/* 000128DC 0001F66C C0 1D 00 00 */ lfs f0, 0x0(r29) +/* 000128E0 0001F670 3C 60 00 00 */ lis r3, gFastMem@ha +/* 000128E4 0001F674 C1 9D 00 08 */ lfs f12, 0x8(r29) +/* 000128E8 0001F678 38 80 02 94 */ li r4, 0x294 +/* 000128EC 0001F67C C1 BD 00 04 */ lfs f13, 0x4(r29) +/* 000128F0 0001F680 38 A0 00 00 */ li r5, 0x0 +/* 000128F4 0001F684 D0 0A 00 00 */ stfs f0, _21DebugWorldCameraMover.Eye@l(r10) +/* 000128F8 0001F688 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 000128FC 0001F68C D1 88 00 08 */ stfs f12, 0x8(r8) +/* 00012900 0001F690 D1 A8 00 04 */ stfs f13, 0x4(r8) +/* 00012904 0001F694 90 0B 00 00 */ stw r0, _21DebugWorldCameraMover.TurboOn@l(r11) +/* 00012908 0001F698 C0 1C 00 00 */ lfs f0, 0x0(r28) +/* 0001290C 0001F69C C1 9C 00 08 */ lfs f12, 0x8(r28) +/* 00012910 0001F6A0 C1 BC 00 04 */ lfs f13, 0x4(r28) +/* 00012914 0001F6A4 D0 07 00 00 */ stfs f0, _21DebugWorldCameraMover.Look@l(r7) +/* 00012918 0001F6A8 D1 86 00 08 */ stfs f12, 0x8(r6) +/* 0001291C 0001F6AC D1 A6 00 04 */ stfs f13, 0x4(r6) +/* 00012920 0001F6B0 C1 9B 00 00 */ lfs f12, DebugCameraNearPlane@l(r27) +/* 00012924 0001F6B4 81 3E 00 1C */ lwz r9, 0x1c(r30) +.L_00012928: +/* 00012928 0001F6B8 C0 09 00 BC */ lfs f0, 0xbc(r9) +/* 0001292C 0001F6BC D0 1E 00 A0 */ stfs f0, 0xa0(r30) +/* 00012930 0001F6C0 D1 89 00 BC */ stfs f12, 0xbc(r9) +/* 00012934 0001F6C4 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 00012938 0001F6C8 3C C0 00 00 */ lis r6, .rodata+0x8E0@ha +/* 0001293C 0001F6CC 80 9E 00 9C */ lwz r4, 0x9c(r30) +/* 00012940 0001F6D0 3C A0 98 C7 */ lis r5, 0x98c7 +/* 00012944 0001F6D4 38 C6 08 E0 */ addi r6, r6, .rodata+0x8E0@l +/* 00012948 0001F6D8 60 A5 A2 F5 */ ori r5, r5, 0xa2f5 +/* 0001294C 0001F6DC 38 E0 00 00 */ li r7, 0x0 +/* 00012950 0001F6E0 48 00 00 01 */ bl __11ActionQueueiUiPCcb +/* 00012954 0001F6E4 90 7E 00 A4 */ stw r3, 0xa4(r30) +/* 00012958 0001F6E8 7F C3 F3 78 */ mr r3, r30 +/* 0001295C 0001F6EC 80 01 00 24 */ lwz r0, 0x24(r1) +/* 00012960 0001F6F0 7C 08 03 A6 */ mtlr r0 +/* 00012964 0001F6F4 BB 61 00 0C */ lmw r27, 0xc(r1) +/* 00012968 0001F6F8 38 21 00 20 */ addi r1, r1, 0x20 +/* 0001296C 0001F6FC 4E 80 00 20 */ blr +.endfn __21DebugWorldCameraMoveriPC8bVector3T212JoystickPort + +# .text:0x12970 | size: 0x78 +.fn _._21DebugWorldCameraMover, global +/* 00012970 0001F700 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00012974 0001F704 7C 08 02 A6 */ mflr r0 +/* 00012978 0001F708 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 0001297C 0001F70C 90 01 00 14 */ stw r0, 0x14(r1) +/* 00012980 0001F710 7C 7F 1B 78 */ mr r31, r3 +/* 00012984 0001F714 3D 20 00 00 */ lis r9, _vt.21DebugWorldCameraMover@ha +/* 00012988 0001F718 80 1F 00 A4 */ lwz r0, 0xa4(r31) +/* 0001298C 0001F71C 39 29 00 00 */ addi r9, r9, _vt.21DebugWorldCameraMover@l +/* 00012990 0001F720 7C 9E 23 78 */ mr r30, r4 +/* 00012994 0001F724 91 3F 00 08 */ stw r9, 0x8(r31) +.L_00012998: +/* 00012998 0001F728 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0001299C 0001F72C 41 82 29 C8 */ beq .L_00015364 +/* 000129A0 0001F730 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 000129A4 0001F734 C0 1F 00 A0 */ lfs f0, 0xa0(r31) +/* 000129A8 0001F738 D0 09 00 BC */ stfs f0, 0xbc(r9) +/* 000129AC 0001F73C 80 7F 00 A4 */ lwz r3, 0xa4(r31) +/* 000129B0 0001F740 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000129B4 0001F744 41 82 29 C0 */ beq .L_00015374 +/* 000129B8 0001F748 38 80 00 03 */ li r4, 0x3 +/* 000129BC 0001F74C 48 00 00 01 */ bl _._11ActionQueue +/* 000129C0 0001F750 38 00 00 00 */ li r0, 0x0 +/* 000129C4 0001F754 90 1F 00 A4 */ stw r0, 0xa4(r31) +/* 000129C8 0001F758 7F E3 FB 78 */ mr r3, r31 +/* 000129CC 0001F75C 7F C4 F3 78 */ mr r4, r30 +/* 000129D0 0001F760 48 00 20 35 */ bl .L_00014A04 +/* 000129D4 0001F764 80 01 00 14 */ lwz r0, 0x14(r1) +/* 000129D8 0001F768 7C 08 03 A6 */ mtlr r0 +/* 000129DC 0001F76C BB C1 00 08 */ lmw r30, 0x8(r1) +/* 000129E0 0001F770 38 21 00 10 */ addi r1, r1, 0x10 +/* 000129E4 0001F774 4E 80 00 20 */ blr +.endfn _._21DebugWorldCameraMover + +# .text:0x129E8 | size: 0x3EC +# DebugWorldCameraMover::JoyHandler +.fn JoyHandler__21DebugWorldCameraMover, global +/* 000129E8 0001F778 94 21 FF 70 */ stwu r1, -0x90(r1) +/* 000129EC 0001F77C 7C 08 02 A6 */ mflr r0 +/* 000129F0 0001F780 F3 61 00 68 */ psq_st f27, 0x68(r1), 0, qr0 +/* 000129F4 0001F784 F3 81 00 70 */ psq_st f28, 0x70(r1), 0, qr0 +/* 000129F8 0001F788 F3 A1 00 78 */ psq_st f29, 0x78(r1), 0, qr0 +/* 000129FC 0001F78C F3 C1 00 80 */ psq_st f30, 0x80(r1), 0, qr0 +/* 00012A00 0001F790 F3 E1 00 88 */ psq_st f31, 0x88(r1), 0, qr0 +/* 00012A04 0001F794 BE E1 00 44 */ stmw r23, 0x44(r1) +/* 00012A08 0001F798 90 01 00 94 */ stw r0, 0x94(r1) +/* 00012A0C 0001F79C 7C 7F 1B 78 */ mr r31, r3 +.L_00012A10: +/* 00012A10 0001F7A0 80 1F 00 A4 */ lwz r0, 0xa4(r31) +/* 00012A14 0001F7A4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00012A18 0001F7A8 41 82 2D AC */ beq .L_000157C4 +/* 00012A1C 0001F7AC 3D 20 00 00 */ lis r9, .rodata+0xA6C@ha +/* 00012A20 0001F7B0 3D 60 00 00 */ lis r11, .rodata+0xA70@ha +/* 00012A24 0001F7B4 C3 89 0A 6C */ lfs f28, .rodata+0xA6C@l(r9) +/* 00012A28 0001F7B8 3F 00 00 00 */ lis r24, .rodata+0xA68@ha +.L_00012A2C: +/* 00012A2C 0001F7BC C3 AB 0A 70 */ lfs f29, .rodata+0xA70@l(r11) +/* 00012A30 0001F7C0 3D 20 00 00 */ lis r9, .rodata+0xA74@ha +/* 00012A34 0001F7C4 3D 60 00 00 */ lis r11, .rodata+0xA78@ha +/* 00012A38 0001F7C8 C3 C9 0A 74 */ lfs f30, .rodata+0xA74@l(r9) +/* 00012A3C 0001F7CC C3 EB 0A 78 */ lfs f31, .rodata+0xA78@l(r11) +/* 00012A40 0001F7D0 3F 20 00 00 */ lis r25, _21DebugWorldCameraMover.TurboOn@ha +/* 00012A44 0001F7D4 C3 78 0A 68 */ lfs f27, .rodata+0xA68@l(r24) +/* 00012A48 0001F7D8 3B 80 00 00 */ li r28, 0x0 +/* 00012A4C 0001F7DC 3B 40 00 01 */ li r26, 0x1 +/* 00012A50 0001F7E0 3F 60 00 00 */ lis r27, _21DebugWorldCameraMover.SuperTurboOn@ha +/* 00012A54 0001F7E4 3A E0 00 03 */ li r23, 0x3 +/* 00012A58 0001F7E8 48 01 2D 9C */ b .text+0x12D9C +/* 00012A5C 0001F7EC 80 9F 00 A4 */ lwz r4, 0xa4(r31) +.L_00012A60: +/* 00012A60 0001F7F0 38 61 00 20 */ addi r3, r1, 0x20 +/* 00012A64 0001F7F4 4C C6 31 82 */ crclr cr1eq +/* 00012A68 0001F7F8 48 00 00 01 */ bl GetAction__11ActionQueue +/* 00012A6C 0001F7FC 81 21 00 20 */ lwz r9, 0x20(r1) +/* 00012A70 0001F800 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00012A74 0001F804 41 82 2A 80 */ beq .L_000154F4 +/* 00012A78 0001F808 C1 A9 00 08 */ lfs f13, 0x8(r9) +/* 00012A7C 0001F80C 48 01 2A 84 */ b .text+0x12A84 +/* 00012A80 0001F810 C1 B8 0A 68 */ lfs f13, .rodata+0xA68@l(r24) +/* 00012A84 0001F814 3C 80 00 00 */ lis r4, gDebugCameraInputGraph@ha +/* 00012A88 0001F818 39 41 00 24 */ addi r10, r1, 0x24 +/* 00012A8C 0001F81C 38 64 00 00 */ addi r3, r4, gDebugCameraInputGraph@l +/* 00012A90 0001F820 81 63 00 04 */ lwz r11, 0x4(r3) +/* 00012A94 0001F824 2C 0B 00 01 */ cmpwi r11, 0x1 +/* 00012A98 0001F828 40 81 2B 48 */ ble .L_000155E0 +/* 00012A9C 0001F82C 80 84 00 00 */ lwz r4, gDebugCameraInputGraph@l(r4) +/* 00012AA0 0001F830 C0 04 00 00 */ lfs f0, 0x0(r4) +/* 00012AA4 0001F834 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 00012AA8 0001F838 41 81 2A B8 */ bgt .L_00015560 +/* 00012AAC 0001F83C 7D 43 53 78 */ mr r3, r10 +/* 00012AB0 0001F840 38 84 00 04 */ addi r4, r4, 0x4 +/* 00012AB4 0001F844 48 01 2A D8 */ b .text+0x12AD8 +/* 00012AB8 0001F848 55 60 18 38 */ slwi r0, r11, 3 +/* 00012ABC 0001F84C 7D 20 22 14 */ add r9, r0, r4 +/* 00012AC0 0001F850 C0 09 FF F8 */ lfs f0, -0x8(r9) +/* 00012AC4 0001F854 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 00012AC8 0001F858 41 80 2A E4 */ blt .L_000155AC +/* 00012ACC 0001F85C 7D 24 4B 78 */ mr r4, r9 +/* 00012AD0 0001F860 7D 43 53 78 */ mr r3, r10 +/* 00012AD4 0001F864 38 84 FF FC */ subi r4, r4, 0x4 +/* 00012AD8 0001F868 38 A0 00 04 */ li r5, 0x4 +/* 00012ADC 0001F86C 48 00 00 01 */ bl bMemCpy +/* 00012AE0 0001F870 48 01 2B 64 */ b .text+0x12B64 +/* 00012AE4 0001F874 38 0B FF FF */ subi r0, r11, 0x1 +/* 00012AE8 0001F878 39 60 00 00 */ li r11, 0x0 +/* 00012AEC 0001F87C 7C 0B 00 00 */ cmpw r11, r0 +/* 00012AF0 0001F880 40 80 2B 64 */ bge .L_00015654 +/* 00012AF4 0001F884 55 65 18 38 */ slwi r5, r11, 3 +/* 00012AF8 0001F888 7C 05 24 2E */ lfsx f0, r5, r4 +/* 00012AFC 0001F88C 7C C5 22 14 */ add r6, r5, r4 +/* 00012B00 0001F890 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 00012B04 0001F894 41 80 2B 14 */ blt .L_00015618 +/* 00012B08 0001F898 C0 26 00 08 */ lfs f1, 0x8(r6) +/* 00012B0C 0001F89C FC 0D 08 00 */ fcmpu cr0, f13, f1 +/* 00012B10 0001F8A0 41 80 2B 24 */ blt .L_00015634 +/* 00012B14 0001F8A4 39 6B 00 01 */ addi r11, r11, 0x1 +/* 00012B18 0001F8A8 7C 0B 00 00 */ cmpw r11, r0 +/* 00012B1C 0001F8AC 41 80 2A F4 */ blt .L_00015610 +/* 00012B20 0001F8B0 48 01 2B 64 */ b .text+0x12B64 +/* 00012B24 0001F8B4 EC 21 00 28 */ fsubs f1, f1, f0 +/* 00012B28 0001F8B8 7C A5 22 14 */ add r5, r5, r4 +/* 00012B2C 0001F8BC EC 0D 00 28 */ fsubs f0, f13, f0 +/* 00012B30 0001F8C0 7D 44 53 78 */ mr r4, r10 +/* 00012B34 0001F8C4 EC 20 08 24 */ fdivs f1, f0, f1 +.L_00012B38: +/* 00012B38 0001F8C8 38 A5 00 0C */ addi r5, r5, 0xc +.L_00012B3C: +/* 00012B3C 0001F8CC 38 C6 00 04 */ addi r6, r6, 0x4 +/* 00012B40 0001F8D0 48 00 00 01 */ bl Blend__t6tGraph1ZfPfN21f +/* 00012B44 0001F8D4 48 01 2B 64 */ b .text+0x12B64 +/* 00012B48 0001F8D8 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00012B4C 0001F8DC 40 81 2B 64 */ ble .L_000156B0 +/* 00012B50 0001F8E0 80 84 00 00 */ lwz r4, gDebugCameraInputGraph@l(r4) +/* 00012B54 0001F8E4 7D 43 53 78 */ mr r3, r10 +/* 00012B58 0001F8E8 38 A0 00 04 */ li r5, 0x4 +.L_00012B5C: +/* 00012B5C 0001F8EC 38 84 00 04 */ addi r4, r4, 0x4 +/* 00012B60 0001F8F0 48 00 00 01 */ bl bMemCpy +/* 00012B64 0001F8F4 81 21 00 20 */ lwz r9, 0x20(r1) +/* 00012B68 0001F8F8 C0 01 00 24 */ lfs f0, 0x24(r1) +/* 00012B6C 0001F8FC 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00012B70 0001F900 38 00 00 00 */ li r0, 0x0 +/* 00012B74 0001F904 41 82 2B 7C */ beq .L_000156F0 +/* 00012B78 0001F908 80 09 00 00 */ lwz r0, 0x0(r9) +/* 00012B7C 0001F90C 2C 00 00 41 */ cmpwi r0, 0x41 +/* 00012B80 0001F910 41 82 2C 64 */ beq .L_000157E4 +/* 00012B84 0001F914 41 81 2B EC */ bgt .L_00015770 +/* 00012B88 0001F918 2C 00 00 39 */ cmpwi r0, 0x39 +/* 00012B8C 0001F91C 41 82 2C 38 */ beq .L_000157C4 +/* 00012B90 0001F920 41 81 2B C0 */ bgt .L_00015750 +/* 00012B94 0001F924 2C 00 00 36 */ cmpwi r0, 0x36 +/* 00012B98 0001F928 41 82 2C 28 */ beq .L_000157C0 +/* 00012B9C 0001F92C 41 81 2B AC */ bgt .L_00015748 +/* 00012BA0 0001F930 2C 00 00 35 */ cmpwi r0, 0x35 +/* 00012BA4 0001F934 41 82 2C 2C */ beq .L_000157D0 +/* 00012BA8 0001F938 48 01 2D 94 */ b .text+0x12D94 +/* 00012BAC 0001F93C 2C 00 00 37 */ cmpwi r0, 0x37 +/* 00012BB0 0001F940 41 82 2C 44 */ beq .L_000157F4 +/* 00012BB4 0001F944 2C 00 00 38 */ cmpwi r0, 0x38 +/* 00012BB8 0001F948 41 82 2C 48 */ beq .L_00015800 +/* 00012BBC 0001F94C 48 01 2D 94 */ b .text+0x12D94 +/* 00012BC0 0001F950 2C 00 00 3D */ cmpwi r0, 0x3d +/* 00012BC4 0001F954 41 82 2C 54 */ beq .L_00015818 +/* 00012BC8 0001F958 41 81 2B DC */ bgt .L_000157A4 +/* 00012BCC 0001F95C 2C 00 00 3B */ cmpwi r0, 0x3b +.L_00012BD0: +/* 00012BD0 0001F960 41 82 2C 44 */ beq .L_00015814 +/* 00012BD4 0001F964 41 81 2C 48 */ bgt .L_0001581C +.L_00012BD8: +/* 00012BD8 0001F968 48 01 2C 34 */ b .text+0x12C34 +/* 00012BDC 0001F96C 2C 00 00 3F */ cmpwi r0, 0x3f +/* 00012BE0 0001F970 41 82 2C 70 */ beq .L_00015850 +/* 00012BE4 0001F974 41 81 2C 70 */ bgt .L_00015854 +/* 00012BE8 0001F978 48 01 2C 58 */ b .text+0x12C58 +/* 00012BEC 0001F97C 2C 00 00 45 */ cmpwi r0, 0x45 +/* 00012BF0 0001F980 41 82 2C 8C */ beq .L_0001587C +/* 00012BF4 0001F984 41 81 2C 08 */ bgt .L_000157FC +.L_00012BF8: +/* 00012BF8 0001F988 2C 00 00 43 */ cmpwi r0, 0x43 +/* 00012BFC 0001F98C 41 82 2C 98 */ beq .L_00015894 +/* 00012C00 0001F990 41 81 2C 70 */ bgt .L_00015870 +/* 00012C04 0001F994 48 01 2C 98 */ b .text+0x12C98 +/* 00012C08 0001F998 2C 00 00 47 */ cmpwi r0, 0x47 +/* 00012C0C 0001F99C 41 82 2C B0 */ beq .L_000158BC +/* 00012C10 0001F9A0 41 80 2C 98 */ blt .L_000158A8 +/* 00012C14 0001F9A4 2C 00 00 48 */ cmpwi r0, 0x48 +/* 00012C18 0001F9A8 41 82 2C C8 */ beq .L_000158E0 +/* 00012C1C 0001F9AC 2C 00 00 49 */ cmpwi r0, 0x49 +.L_00012C20: +/* 00012C20 0001F9B0 41 82 2C E0 */ beq .L_00015900 +.L_00012C24: +/* 00012C24 0001F9B4 48 01 2D 94 */ b .text+0x12D94 +/* 00012C28 0001F9B8 EC 00 00 2A */ fadds f0, f0, f0 +/* 00012C2C 0001F9BC D0 1F 00 80 */ stfs f0, 0x80(r31) +/* 00012C30 0001F9C0 48 01 2D 94 */ b .text+0x12D94 +/* 00012C34 0001F9C4 FC 00 00 50 */ fneg f0, f0 +/* 00012C38 0001F9C8 EC 00 07 72 */ fmuls f0, f0, f29 +/* 00012C3C 0001F9CC D0 1F 00 88 */ stfs f0, 0x88(r31) +/* 00012C40 0001F9D0 48 01 2D 94 */ b .text+0x12D94 +/* 00012C44 0001F9D4 FC 00 00 50 */ fneg f0, f0 +/* 00012C48 0001F9D8 EC 00 07 32 */ fmuls f0, f0, f28 +/* 00012C4C 0001F9DC D0 1F 00 8C */ stfs f0, 0x8c(r31) +/* 00012C50 0001F9E0 48 01 2D 94 */ b .text+0x12D94 +/* 00012C54 0001F9E4 FC 00 00 50 */ fneg f0, f0 +/* 00012C58 0001F9E8 EC 00 07 72 */ fmuls f0, f0, f29 +/* 00012C5C 0001F9EC D0 1F 00 84 */ stfs f0, 0x84(r31) +/* 00012C60 0001F9F0 48 01 2D 94 */ b .text+0x12D94 +/* 00012C64 0001F9F4 FC 00 00 50 */ fneg f0, f0 +/* 00012C68 0001F9F8 EC 00 07 F2 */ fmuls f0, f0, f31 +/* 00012C6C 0001F9FC 48 01 2C 9C */ b .text+0x12C9C +/* 00012C70 0001FA00 FC 00 00 50 */ fneg f0, f0 +/* 00012C74 0001FA04 EC 00 07 B2 */ fmuls f0, f0, f30 +/* 00012C78 0001FA08 FD A0 00 1E */ fctiwz f13, f0 +/* 00012C7C 0001FA0C D9 A1 00 38 */ stfd f13, 0x38(r1) +/* 00012C80 0001FA10 81 21 00 3C */ lwz r9, 0x3c(r1) +/* 00012C84 0001FA14 B1 3F 00 92 */ sth r9, 0x92(r31) +/* 00012C88 0001FA18 48 01 2D 94 */ b .text+0x12D94 +/* 00012C8C 0001FA1C FC 00 00 50 */ fneg f0, f0 +.L_00012C90: +/* 00012C90 0001FA20 EC 00 07 F2 */ fmuls f0, f0, f31 +/* 00012C94 0001FA24 48 01 2C 9C */ b .text+0x12C9C +.L_00012C98: +/* 00012C98 0001FA28 EC 00 07 F2 */ fmuls f0, f0, f31 +/* 00012C9C 0001FA2C FD A0 00 1E */ fctiwz f13, f0 +/* 00012CA0 0001FA30 D9 A1 00 38 */ stfd f13, 0x38(r1) +/* 00012CA4 0001FA34 81 21 00 3C */ lwz r9, 0x3c(r1) +/* 00012CA8 0001FA38 B1 3F 00 90 */ sth r9, 0x90(r31) +/* 00012CAC 0001FA3C 48 01 2D 94 */ b .text+0x12D94 +/* 00012CB0 0001FA40 FC 00 D8 00 */ fcmpu cr0, f0, f27 +/* 00012CB4 0001FA44 40 82 2C C0 */ bne .L_00015974 +/* 00012CB8 0001FA48 93 99 00 00 */ stw r28, _21DebugWorldCameraMover.TurboOn@l(r25) +/* 00012CBC 0001FA4C 48 01 2D 94 */ b .text+0x12D94 +/* 00012CC0 0001FA50 93 59 00 00 */ stw r26, _21DebugWorldCameraMover.TurboOn@l(r25) +/* 00012CC4 0001FA54 48 01 2D 94 */ b .text+0x12D94 +/* 00012CC8 0001FA58 FC 00 D8 00 */ fcmpu cr0, f0, f27 +/* 00012CCC 0001FA5C 40 82 2C D8 */ bne .L_000159A4 +/* 00012CD0 0001FA60 93 9B 00 00 */ stw r28, _21DebugWorldCameraMover.SuperTurboOn@l(r27) +/* 00012CD4 0001FA64 48 01 2D 94 */ b .text+0x12D94 +.L_00012CD8: +/* 00012CD8 0001FA68 93 5B 00 00 */ stw r26, _21DebugWorldCameraMover.SuperTurboOn@l(r27) +/* 00012CDC 0001FA6C 48 01 2D 94 */ b .text+0x12D94 +/* 00012CE0 0001FA70 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 00012CE4 0001FA74 3B A1 00 08 */ addi r29, r1, 0x8 +/* 00012CE8 0001FA78 38 60 00 01 */ li r3, 0x1 +/* 00012CEC 0001FA7C C0 09 00 44 */ lfs f0, 0x44(r9) +/* 00012CF0 0001FA80 C1 A9 00 48 */ lfs f13, 0x48(r9) +/* 00012CF4 0001FA84 C1 89 00 40 */ lfs f12, 0x40(r9) +.L_00012CF8: +/* 00012CF8 0001FA88 FC 00 00 50 */ fneg f0, f0 +.L_00012CFC: +/* 00012CFC 0001FA8C D0 01 00 08 */ stfs f0, 0x8(r1) +/* 00012D00 0001FA90 D1 A1 00 0C */ stfs f13, 0xc(r1) +/* 00012D04 0001FA94 D1 9D 00 08 */ stfs f12, 0x8(r29) +/* 00012D08 0001FA98 48 00 00 01 */ bl First__Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi311ePlayerList +/* 00012D0C 0001FA9C 7C 6B 1B 79 */ mr. r11, r3 +/* 00012D10 0001FAA0 41 82 2D 94 */ beq .L_00015AA4 +/* 00012D14 0001FAA4 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 00012D18 0001FAA8 A8 69 00 10 */ lha r3, 0x10(r9) +/* 00012D1C 0001FAAC 80 09 00 14 */ lwz r0, 0x14(r9) +/* 00012D20 0001FAB0 7C 6B 1A 14 */ add r3, r11, r3 +/* 00012D24 0001FAB4 7C 08 03 A6 */ mtlr r0 +/* 00012D28 0001FAB8 4E 80 00 21 */ blrl +.L_00012D2C: +/* 00012D2C 0001FABC 7C 7E 1B 79 */ mr. r30, r3 +/* 00012D30 0001FAC0 41 82 2D 94 */ beq .L_00015AC4 +/* 00012D34 0001FAC4 7F A4 EB 78 */ mr r4, r29 +/* 00012D38 0001FAC8 38 A1 00 28 */ addi r5, r1, 0x28 +/* 00012D3C 0001FACC 38 C0 00 00 */ li r6, 0x0 +/* 00012D40 0001FAD0 93 81 00 18 */ stw r28, 0x18(r1) +.L_00012D44: +/* 00012D44 0001FAD4 92 E1 00 1C */ stw r23, 0x1c(r1) +/* 00012D48 0001FAD8 38 61 00 18 */ addi r3, r1, 0x18 +/* 00012D4C 0001FADC D3 61 00 28 */ stfs f27, 0x28(r1) +/* 00012D50 0001FAE0 48 00 00 01 */ bl GetWorldHeightAtPoint__13WCollisionMgrRCQ25UMath7Vector3RfPQ25UMath7Vector3 +/* 00012D54 0001FAE4 C0 01 00 28 */ lfs f0, 0x28(r1) +/* 00012D58 0001FAE8 EC 00 F0 2A */ fadds f0, f0, f30 +/* 00012D5C 0001FAEC D0 01 00 28 */ stfs f0, 0x28(r1) +.L_00012D60: +/* 00012D60 0001FAF0 81 3E 00 04 */ lwz r9, 0x4(r30) +.L_00012D64: +/* 00012D64 0001FAF4 80 09 00 AC */ lwz r0, 0xac(r9) +/* 00012D68 0001FAF8 A8 69 00 A8 */ lha r3, 0xa8(r9) +.L_00012D6C: +/* 00012D6C 0001FAFC 7C 08 03 A6 */ mtlr r0 +/* 00012D70 0001FB00 7C 7E 1A 14 */ add r3, r30, r3 +/* 00012D74 0001FB04 4E 80 00 21 */ blrl +.L_00012D78: +/* 00012D78 0001FB08 81 23 00 04 */ lwz r9, 0x4(r3) +/* 00012D7C 0001FB0C 7F A4 EB 78 */ mr r4, r29 +/* 00012D80 0001FB10 A8 09 00 C0 */ lha r0, 0xc0(r9) +/* 00012D84 0001FB14 81 29 00 C4 */ lwz r9, 0xc4(r9) +.L_00012D88: +/* 00012D88 0001FB18 7C 63 02 14 */ add r3, r3, r0 +.L_00012D8C: +/* 00012D8C 0001FB1C 7D 28 03 A6 */ mtlr r9 +/* 00012D90 0001FB20 4E 80 00 21 */ blrl +/* 00012D94 0001FB24 80 7F 00 A4 */ lwz r3, 0xa4(r31) +.L_00012D98: +/* 00012D98 0001FB28 48 00 00 01 */ bl PopAction__11ActionQueue +/* 00012D9C 0001FB2C 80 7F 00 A4 */ lwz r3, 0xa4(r31) +/* 00012DA0 0001FB30 48 00 00 01 */ bl IsEmpty__11ActionQueue +/* 00012DA4 0001FB34 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00012DA8 0001FB38 41 82 2A 5C */ beq .L_00015804 +/* 00012DAC 0001FB3C 80 01 00 94 */ lwz r0, 0x94(r1) +/* 00012DB0 0001FB40 7C 08 03 A6 */ mtlr r0 +/* 00012DB4 0001FB44 BA E1 00 44 */ lmw r23, 0x44(r1) +/* 00012DB8 0001FB48 E3 61 00 68 */ psq_l f27, 0x68(r1), 0, qr0 +/* 00012DBC 0001FB4C E3 81 00 70 */ psq_l f28, 0x70(r1), 0, qr0 +.L_00012DC0: +/* 00012DC0 0001FB50 E3 A1 00 78 */ psq_l f29, 0x78(r1), 0, qr0 +.L_00012DC4: +/* 00012DC4 0001FB54 E3 C1 00 80 */ psq_l f30, 0x80(r1), 0, qr0 +.L_00012DC8: +/* 00012DC8 0001FB58 E3 E1 00 88 */ psq_l f31, 0x88(r1), 0, qr0 +/* 00012DCC 0001FB5C 38 21 00 90 */ addi r1, r1, 0x90 +/* 00012DD0 0001FB60 4E 80 00 20 */ blr +.endfn JoyHandler__21DebugWorldCameraMover + +# .text:0x12DD4 | size: 0x74C +.fn Update__21DebugWorldCameraMoverf, global +/* 00012DD4 0001FB64 94 21 FF 28 */ stwu r1, -0xd8(r1) +.L_00012DD8: +/* 00012DD8 0001FB68 7C 08 02 A6 */ mflr r0 +/* 00012DDC 0001FB6C F3 A1 00 C0 */ psq_st f29, 0xc0(r1), 0, qr0 +/* 00012DE0 0001FB70 F3 C1 00 C8 */ psq_st f30, 0xc8(r1), 0, qr0 +/* 00012DE4 0001FB74 F3 E1 00 D0 */ psq_st f31, 0xd0(r1), 0, qr0 +/* 00012DE8 0001FB78 BF 21 00 A4 */ stmw r25, 0xa4(r1) +/* 00012DEC 0001FB7C 90 01 00 DC */ stw r0, 0xdc(r1) +/* 00012DF0 0001FB80 3F E0 00 00 */ lis r31, JumpToPosition@ha +/* 00012DF4 0001FB84 3D 20 00 00 */ lis r9, .rodata+0xA7C@ha +/* 00012DF8 0001FB88 3B 9F 00 00 */ addi r28, r31, JumpToPosition@l +/* 00012DFC 0001FB8C C3 E9 0A 7C */ lfs f31, .rodata+0xA7C@l(r9) +.L_00012E00: +/* 00012E00 0001FB90 C0 1C 00 04 */ lfs f0, 0x4(r28) +/* 00012E04 0001FB94 7C 7B 1B 78 */ mr r27, r3 +.L_00012E08: +/* 00012E08 0001FB98 FF A0 08 90 */ fmr f29, f1 +/* 00012E0C 0001FB9C 3F 20 00 00 */ lis r25, _21DebugWorldCameraMover.Eye@ha +/* 00012E10 0001FBA0 FC 00 F8 00 */ fcmpu cr0, f0, f31 +/* 00012E14 0001FBA4 3F 40 00 00 */ lis r26, _21DebugWorldCameraMover.Look@ha +/* 00012E18 0001FBA8 41 82 2F 04 */ beq .L_00015D1C +/* 00012E1C 0001FBAC 3D 20 00 00 */ lis r9, .rodata+0xA80@ha +/* 00012E20 0001FBB0 C1 3C 00 08 */ lfs f9, 0x8(r28) +/* 00012E24 0001FBB4 C1 69 0A 80 */ lfs f11, .rodata+0xA80@l(r9) +.L_00012E28: +/* 00012E28 0001FBB8 3B D9 00 00 */ addi r30, r25, _21DebugWorldCameraMover.Eye@l +/* 00012E2C 0001FBBC 3B BA 00 00 */ addi r29, r26, _21DebugWorldCameraMover.Look@l +/* 00012E30 0001FBC0 C1 BE 00 04 */ lfs f13, 0x4(r30) +/* 00012E34 0001FBC4 ED 29 58 2A */ fadds f9, f9, f11 +/* 00012E38 0001FBC8 C1 5D 00 04 */ lfs f10, 0x4(r29) +/* 00012E3C 0001FBCC C1 1D 00 08 */ lfs f8, 0x8(r29) +/* 00012E40 0001FBD0 38 81 00 20 */ addi r4, r1, 0x20 +/* 00012E44 0001FBD4 C0 1E 00 08 */ lfs f0, 0x8(r30) +/* 00012E48 0001FBD8 ED AD 50 28 */ fsubs f13, f13, f10 +/* 00012E4C 0001FBDC C1 7A 00 00 */ lfs f11, _21DebugWorldCameraMover.Look@l(r26) +/* 00012E50 0001FBE0 38 61 00 10 */ addi r3, r1, 0x10 +/* 00012E54 0001FBE4 C1 99 00 00 */ lfs f12, _21DebugWorldCameraMover.Eye@l(r25) +/* 00012E58 0001FBE8 EC 00 40 28 */ fsubs f0, f0, f8 +/* 00012E5C 0001FBEC D1 3C 00 08 */ stfs f9, 0x8(r28) +/* 00012E60 0001FBF0 ED 8C 58 28 */ fsubs f12, f12, f11 +/* 00012E64 0001FBF4 D1 A1 00 24 */ stfs f13, 0x24(r1) +/* 00012E68 0001FBF8 D1 81 00 20 */ stfs f12, 0x20(r1) +/* 00012E6C 0001FBFC D0 01 00 28 */ stfs f0, 0x28(r1) +/* 00012E70 0001FC00 48 00 00 01 */ bl __8bVector3RC8bVector3 +/* 00012E74 0001FC04 3D 20 00 00 */ lis r9, .rodata+0xA84@ha +/* 00012E78 0001FC08 38 61 00 10 */ addi r3, r1, 0x10 +/* 00012E7C 0001FC0C C0 29 0A 84 */ lfs f1, .rodata+0xA84@l(r9) +/* 00012E80 0001FC10 7C 64 1B 78 */ mr r4, r3 +/* 00012E84 0001FC14 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3f +/* 00012E88 0001FC18 C1 BF 00 00 */ lfs f13, JumpToPosition@l(r31) +/* 00012E8C 0001FC1C 38 61 00 20 */ addi r3, r1, 0x20 +/* 00012E90 0001FC20 C1 9C 00 04 */ lfs f12, 0x4(r28) +/* 00012E94 0001FC24 38 81 00 30 */ addi r4, r1, 0x30 +/* 00012E98 0001FC28 C0 1C 00 08 */ lfs f0, 0x8(r28) +/* 00012E9C 0001FC2C C1 61 00 10 */ lfs f11, 0x10(r1) +/* 00012EA0 0001FC30 C1 41 00 14 */ lfs f10, 0x14(r1) +/* 00012EA4 0001FC34 C1 21 00 18 */ lfs f9, 0x18(r1) +/* 00012EA8 0001FC38 ED AD 58 2A */ fadds f13, f13, f11 +/* 00012EAC 0001FC3C ED 8C 50 2A */ fadds f12, f12, f10 +/* 00012EB0 0001FC40 D1 A1 00 30 */ stfs f13, 0x30(r1) +/* 00012EB4 0001FC44 EC 00 48 2A */ fadds f0, f0, f9 +/* 00012EB8 0001FC48 D1 81 00 34 */ stfs f12, 0x34(r1) +/* 00012EBC 0001FC4C D0 01 00 38 */ stfs f0, 0x38(r1) +/* 00012EC0 0001FC50 48 00 00 01 */ bl __8bVector3RC8bVector3 +/* 00012EC4 0001FC54 C1 A1 00 20 */ lfs f13, 0x20(r1) +/* 00012EC8 0001FC58 C1 3C 00 04 */ lfs f9, 0x4(r28) +/* 00012ECC 0001FC5C C1 7C 00 08 */ lfs f11, 0x8(r28) +/* 00012ED0 0001FC60 C0 01 00 28 */ lfs f0, 0x28(r1) +/* 00012ED4 0001FC64 C1 5F 00 00 */ lfs f10, JumpToPosition@l(r31) +/* 00012ED8 0001FC68 C1 81 00 24 */ lfs f12, 0x24(r1) +/* 00012EDC 0001FC6C D1 B9 00 00 */ stfs f13, _21DebugWorldCameraMover.Eye@l(r25) +/* 00012EE0 0001FC70 D0 1E 00 08 */ stfs f0, 0x8(r30) +/* 00012EE4 0001FC74 D1 5A 00 00 */ stfs f10, _21DebugWorldCameraMover.Look@l(r26) +/* 00012EE8 0001FC78 D1 7D 00 08 */ stfs f11, 0x8(r29) +/* 00012EEC 0001FC7C D1 9E 00 04 */ stfs f12, 0x4(r30) +/* 00012EF0 0001FC80 D1 3D 00 04 */ stfs f9, 0x4(r29) +/* 00012EF4 0001FC84 D3 FF 00 00 */ stfs f31, JumpToPosition@l(r31) +/* 00012EF8 0001FC88 D3 FC 00 08 */ stfs f31, 0x8(r28) +/* 00012EFC 0001FC8C D3 FC 00 04 */ stfs f31, 0x4(r28) +/* 00012F00 0001FC90 48 00 00 01 */ bl bRefreshTweaker__Fv +/* 00012F04 0001FC94 3D 00 00 00 */ lis r8, gDebugCameraSetEye@ha +/* 00012F08 0001FC98 80 08 00 00 */ lwz r0, gDebugCameraSetEye@l(r8) +/* 00012F0C 0001FC9C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00012F10 0001FCA0 41 82 2F 48 */ beq .L_00015E58 +/* 00012F14 0001FCA4 3D 20 00 00 */ lis r9, gDebugCameraTweakableEye@ha +/* 00012F18 0001FCA8 3D 40 00 00 */ lis r10, _21DebugWorldCameraMover.Eye@ha +/* 00012F1C 0001FCAC C0 09 00 00 */ lfs f0, gDebugCameraTweakableEye@l(r9) +/* 00012F20 0001FCB0 39 6A 00 00 */ addi r11, r10, _21DebugWorldCameraMover.Eye@l +/* 00012F24 0001FCB4 39 29 00 00 */ addi r9, r9, gDebugCameraTweakableEye@l +.L_00012F28: +/* 00012F28 0001FCB8 38 00 00 00 */ li r0, 0x0 +/* 00012F2C 0001FCBC C1 89 00 04 */ lfs f12, 0x4(r9) +/* 00012F30 0001FCC0 FC 00 00 50 */ fneg f0, f0 +/* 00012F34 0001FCC4 C1 A9 00 08 */ lfs f13, 0x8(r9) +/* 00012F38 0001FCC8 D1 8B 00 08 */ stfs f12, 0x8(r11) +/* 00012F3C 0001FCCC D1 AA 00 00 */ stfs f13, _21DebugWorldCameraMover.Eye@l(r10) +/* 00012F40 0001FCD0 90 08 00 00 */ stw r0, gDebugCameraSetEye@l(r8) +/* 00012F44 0001FCD4 D0 0B 00 04 */ stfs f0, 0x4(r11) +/* 00012F48 0001FCD8 3D 00 00 00 */ lis r8, gDebugCameraSetLook@ha +/* 00012F4C 0001FCDC 80 08 00 00 */ lwz r0, gDebugCameraSetLook@l(r8) +.L_00012F50: +/* 00012F50 0001FCE0 2C 00 00 00 */ cmpwi r0, 0x0 +.L_00012F54: +/* 00012F54 0001FCE4 41 82 2F 8C */ beq .L_00015EE0 +/* 00012F58 0001FCE8 3D 20 00 00 */ lis r9, gDebugCameraTweakableLook@ha +.L_00012F5C: +/* 00012F5C 0001FCEC 3D 40 00 00 */ lis r10, _21DebugWorldCameraMover.Look@ha +/* 00012F60 0001FCF0 C0 09 00 00 */ lfs f0, gDebugCameraTweakableLook@l(r9) +.L_00012F64: +/* 00012F64 0001FCF4 39 6A 00 00 */ addi r11, r10, _21DebugWorldCameraMover.Look@l +/* 00012F68 0001FCF8 39 29 00 00 */ addi r9, r9, gDebugCameraTweakableLook@l +/* 00012F6C 0001FCFC 38 00 00 00 */ li r0, 0x0 +/* 00012F70 0001FD00 C1 89 00 04 */ lfs f12, 0x4(r9) +.L_00012F74: +/* 00012F74 0001FD04 FC 00 00 50 */ fneg f0, f0 +/* 00012F78 0001FD08 C1 A9 00 08 */ lfs f13, 0x8(r9) +/* 00012F7C 0001FD0C D1 8B 00 08 */ stfs f12, 0x8(r11) +/* 00012F80 0001FD10 D1 AA 00 00 */ stfs f13, _21DebugWorldCameraMover.Look@l(r10) +/* 00012F84 0001FD14 90 08 00 00 */ stw r0, gDebugCameraSetLook@l(r8) +/* 00012F88 0001FD18 D0 0B 00 04 */ stfs f0, 0x4(r11) +/* 00012F8C 0001FD1C 7F 63 DB 78 */ mr r3, r27 +/* 00012F90 0001FD20 48 01 29 E9 */ bl .text+0x129E8 +/* 00012F94 0001FD24 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.Look@ha +.L_00012F98: +/* 00012F98 0001FD28 3D 60 00 00 */ lis r11, _21DebugWorldCameraMover.Eye@ha +/* 00012F9C 0001FD2C 39 49 00 00 */ addi r10, r9, _21DebugWorldCameraMover.Look@l +/* 00012FA0 0001FD30 39 0B 00 00 */ addi r8, r11, _21DebugWorldCameraMover.Eye@l +/* 00012FA4 0001FD34 C1 48 00 04 */ lfs f10, 0x4(r8) +/* 00012FA8 0001FD38 38 81 00 20 */ addi r4, r1, 0x20 +/* 00012FAC 0001FD3C C1 8A 00 08 */ lfs f12, 0x8(r10) +/* 00012FB0 0001FD40 38 61 00 10 */ addi r3, r1, 0x10 +/* 00012FB4 0001FD44 C1 28 00 08 */ lfs f9, 0x8(r8) +/* 00012FB8 0001FD48 C0 0A 00 04 */ lfs f0, 0x4(r10) +/* 00012FBC 0001FD4C C1 6B 00 00 */ lfs f11, _21DebugWorldCameraMover.Eye@l(r11) +/* 00012FC0 0001FD50 ED 8C 48 28 */ fsubs f12, f12, f9 +/* 00012FC4 0001FD54 C1 A9 00 00 */ lfs f13, _21DebugWorldCameraMover.Look@l(r9) +/* 00012FC8 0001FD58 EC 00 50 28 */ fsubs f0, f0, f10 +/* 00012FCC 0001FD5C D1 81 00 28 */ stfs f12, 0x28(r1) +/* 00012FD0 0001FD60 ED AD 58 28 */ fsubs f13, f13, f11 +/* 00012FD4 0001FD64 D0 01 00 24 */ stfs f0, 0x24(r1) +/* 00012FD8 0001FD68 D1 A1 00 20 */ stfs f13, 0x20(r1) +/* 00012FDC 0001FD6C 48 00 00 01 */ bl __8bVector3RC8bVector3 +/* 00012FE0 0001FD70 3D 20 00 00 */ lis r9, .rodata+0xA88@ha +/* 00012FE4 0001FD74 C0 01 00 10 */ lfs f0, 0x10(r1) +/* 00012FE8 0001FD78 C1 49 0A 88 */ lfs f10, .rodata+0xA88@l(r9) +/* 00012FEC 0001FD7C C1 A1 00 14 */ lfs f13, 0x14(r1) +/* 00012FF0 0001FD80 7C 64 1B 78 */ mr r4, r3 +/* 00012FF4 0001FD84 EC 00 02 B2 */ fmuls f0, f0, f10 +/* 00012FF8 0001FD88 FD 80 00 1E */ fctiwz f12, f0 +/* 00012FFC 0001FD8C D9 81 00 98 */ stfd f12, 0x98(r1) +/* 00013000 0001FD90 ED AD 02 B2 */ fmuls f13, f13, f10 +/* 00013004 0001FD94 80 61 00 9C */ lwz r3, 0x9c(r1) +/* 00013008 0001FD98 FD 60 68 1E */ fctiwz f11, f13 +/* 0001300C 0001FD9C D9 61 00 98 */ stfd f11, 0x98(r1) +/* 00013010 0001FDA0 80 81 00 9C */ lwz r4, 0x9c(r1) +/* 00013014 0001FDA4 48 00 00 01 */ bl bFixATan__Fii +/* 00013018 0001FDA8 80 1B 00 90 */ lwz r0, 0x90(r27) +/* 0001301C 0001FDAC 7C 7F 1B 78 */ mr r31, r3 +/* 00013020 0001FDB0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00013024 0001FDB4 40 82 30 34 */ bne .L_00016058 +/* 00013028 0001FDB8 C0 1B 00 80 */ lfs f0, 0x80(r27) +/* 0001302C 0001FDBC FC 00 F8 00 */ fcmpu cr0, f0, f31 +/* 00013030 0001FDC0 41 82 32 9C */ beq .L_000162CC +/* 00013034 0001FDC4 A8 1B 00 90 */ lha r0, 0x90(r27) +/* 00013038 0001FDC8 3C E0 43 30 */ lis r7, 0x4330 +/* 0001303C 0001FDCC 3D 20 00 00 */ lis r9, .rodata+0xA90@ha +/* 00013040 0001FDD0 6C 00 80 00 */ xoris r0, r0, 0x8000 +/* 00013044 0001FDD4 C9 69 0A 90 */ lfd f11, .rodata+0xA90@l(r9) +/* 00013048 0001FDD8 90 01 00 9C */ stw r0, 0x9c(r1) +/* 0001304C 0001FDDC 7D 4B 53 78 */ mr r11, r10 +/* 00013050 0001FDE0 C1 A1 00 14 */ lfs f13, 0x14(r1) +/* 00013054 0001FDE4 3D 20 00 00 */ lis r9, .rodata+0xA9C@ha +/* 00013058 0001FDE8 90 E1 00 98 */ stw r7, 0x98(r1) +/* 0001305C 0001FDEC 3D 00 00 00 */ lis r8, .rodata+0xA98@ha +/* 00013060 0001FDF0 C1 81 00 10 */ lfs f12, 0x10(r1) +/* 00013064 0001FDF4 ED AD 03 72 */ fmuls f13, f13, f13 +/* 00013068 0001FDF8 C8 01 00 98 */ lfd f0, 0x98(r1) +/* 0001306C 0001FDFC ED 0C 6B 3A */ fmadds f8, f12, f12, f13 +/* 00013070 0001FE00 C1 28 0A 98 */ lfs f9, .rodata+0xA98@l(r8) +/* 00013074 0001FE04 FC 00 58 28 */ fsub f0, f0, f11 +/* 00013078 0001FE08 C0 E9 0A 9C */ lfs f7, .rodata+0xA9C@l(r9) +/* 0001307C 0001FE0C FC 00 00 18 */ frsp f0, f0 +/* 00013080 0001FE10 3D 20 00 00 */ lis r9, .rodata+0xA84@ha +/* 00013084 0001FE14 EC 00 07 72 */ fmuls f0, f0, f29 +/* 00013088 0001FE18 C1 69 0A 84 */ lfs f11, .rodata+0xA84@l(r9) +/* 0001308C 0001FE1C FD A0 00 90 */ fmr f13, f0 +/* 00013090 0001FE20 FD 40 68 1E */ fctiwz f10, f13 +/* 00013094 0001FE24 D9 41 00 98 */ stfd f10, 0x98(r1) +/* 00013098 0001FE28 FC 08 48 00 */ fcmpu cr0, f8, f9 +/* 0001309C 0001FE2C 81 61 00 9C */ lwz r11, 0x9c(r1) +/* 000130A0 0001FE30 7D 7F 5A 14 */ add r11, r31, r11 +/* 000130A4 0001FE34 55 7F 04 3E */ clrlwi r31, r11, 16 +/* 000130A8 0001FE38 4C 62 03 82 */ cror un, eq, lt +/* 000130AC 0001FE3C 41 83 30 DC */ bso .L_00016188 +/* 000130B0 0001FE40 FC 00 40 34 */ frsqrte f0, f8 +/* 000130B4 0001FE44 ED A0 00 32 */ fmuls f13, f0, f0 +/* 000130B8 0001FE48 ED 80 01 F2 */ fmuls f12, f0, f7 +/* 000130BC 0001FE4C ED A8 5B 7C */ fnmsubs f13, f8, f13, f11 +/* 000130C0 0001FE50 EC 0D 03 3A */ fmadds f0, f13, f12, f0 +/* 000130C4 0001FE54 ED A0 00 32 */ fmuls f13, f0, f0 +.L_000130C8: +/* 000130C8 0001FE58 ED 80 01 F2 */ fmuls f12, f0, f7 +/* 000130CC 0001FE5C ED A8 5B 7C */ fnmsubs f13, f8, f13, f11 +.L_000130D0: +/* 000130D0 0001FE60 EC 0D 03 3A */ fmadds f0, f13, f12, f0 +/* 000130D4 0001FE64 EC 00 02 32 */ fmuls f0, f0, f8 +/* 000130D8 0001FE68 48 01 30 E0 */ b .text+0x130E0 +/* 000130DC 0001FE6C FC 00 F8 90 */ fmr f0, f31 +/* 000130E0 0001FE70 3D 20 00 00 */ lis r9, .rodata+0xA88@ha +/* 000130E4 0001FE74 C1 A1 00 18 */ lfs f13, 0x18(r1) +/* 000130E8 0001FE78 C1 49 0A 88 */ lfs f10, .rodata+0xA88@l(r9) +/* 000130EC 0001FE7C 7C 64 1B 78 */ mr r4, r3 +/* 000130F0 0001FE80 EC 00 02 B2 */ fmuls f0, f0, f10 +/* 000130F4 0001FE84 FD 80 00 1E */ fctiwz f12, f0 +/* 000130F8 0001FE88 D9 81 00 98 */ stfd f12, 0x98(r1) +/* 000130FC 0001FE8C ED AD 02 B2 */ fmuls f13, f13, f10 +/* 00013100 0001FE90 FD 60 68 1E */ fctiwz f11, f13 +/* 00013104 0001FE94 80 61 00 9C */ lwz r3, 0x9c(r1) +/* 00013108 0001FE98 D9 61 00 98 */ stfd f11, 0x98(r1) +/* 0001310C 0001FE9C 80 81 00 9C */ lwz r4, 0x9c(r1) +/* 00013110 0001FEA0 48 00 00 01 */ bl bFixATan__Fii +/* 00013114 0001FEA4 A8 1B 00 92 */ lha r0, 0x92(r27) +/* 00013118 0001FEA8 3D 40 43 30 */ lis r10, 0x4330 +/* 0001311C 0001FEAC 3D 20 00 00 */ lis r9, .rodata+0xA90@ha +/* 00013120 0001FEB0 6C 00 80 00 */ xoris r0, r0, 0x8000 +/* 00013124 0001FEB4 C9 A9 0A 90 */ lfd f13, .rodata+0xA90@l(r9) +/* 00013128 0001FEB8 90 01 00 9C */ stw r0, 0x9c(r1) +/* 0001312C 0001FEBC 7D 69 5B 78 */ mr r9, r11 +/* 00013130 0001FEC0 91 41 00 98 */ stw r10, 0x98(r1) +/* 00013134 0001FEC4 C8 01 00 98 */ lfd f0, 0x98(r1) +/* 00013138 0001FEC8 FC 00 68 28 */ fsub f0, f0, f13 +/* 0001313C 0001FECC FC 00 00 18 */ frsp f0, f0 +/* 00013140 0001FED0 EC 00 07 72 */ fmuls f0, f0, f29 +/* 00013144 0001FED4 FD A0 00 90 */ fmr f13, f0 +/* 00013148 0001FED8 FD 80 68 1E */ fctiwz f12, f13 +/* 0001314C 0001FEDC D9 81 00 98 */ stfd f12, 0x98(r1) +/* 00013150 0001FEE0 81 21 00 9C */ lwz r9, 0x9c(r1) +/* 00013154 0001FEE4 7C 63 4A 14 */ add r3, r3, r9 +/* 00013158 0001FEE8 54 7C 04 3E */ clrlwi r28, r3, 16 +/* 0001315C 0001FEEC 38 1C C0 09 */ subi r0, r28, 0x3ff7 +/* 00013160 0001FEF0 28 00 40 08 */ cmplwi r0, 0x4008 +/* 00013164 0001FEF4 41 81 31 6C */ bgt .L_000162D0 +/* 00013168 0001FEF8 3B 80 3F F6 */ li r28, 0x3ff6 +.L_0001316C: +/* 0001316C 0001FEFC 38 1C 80 00 */ addi r0, r28, -0x8000 +.L_00013170: +/* 00013170 0001FF00 54 00 04 3E */ clrlwi r0, r0, 16 +/* 00013174 0001FF04 28 00 40 09 */ cmplwi r0, 0x4009 +/* 00013178 0001FF08 41 81 31 84 */ bgt .L_000162FC +/* 0001317C 0001FF0C 3B 80 00 00 */ li r28, 0x0 +/* 00013180 0001FF10 63 9C C0 0A */ ori r28, r28, 0xc00a +/* 00013184 0001FF14 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.SuperTurboOn@ha +/* 00013188 0001FF18 80 09 00 00 */ lwz r0, _21DebugWorldCameraMover.SuperTurboOn@l(r9) +/* 0001318C 0001FF1C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00013190 0001FF20 41 82 31 A8 */ beq .L_00016338 +/* 00013194 0001FF24 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.SuperTurboSpeed@ha +.L_00013198: +/* 00013198 0001FF28 C1 BB 00 80 */ lfs f13, 0x80(r27) +/* 0001319C 0001FF2C C0 09 00 00 */ lfs f0, _21DebugWorldCameraMover.SuperTurboSpeed@l(r9) +/* 000131A0 0001FF30 ED 4D 00 32 */ fmuls f10, f13, f0 +/* 000131A4 0001FF34 48 01 31 D0 */ b .text+0x131D0 +/* 000131A8 0001FF38 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.TurboOn@ha +/* 000131AC 0001FF3C 80 09 00 00 */ lwz r0, _21DebugWorldCameraMover.TurboOn@l(r9) +/* 000131B0 0001FF40 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000131B4 0001FF44 41 82 31 CC */ beq .L_00016380 +/* 000131B8 0001FF48 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.TurboSpeed@ha +/* 000131BC 0001FF4C C1 BB 00 80 */ lfs f13, 0x80(r27) +/* 000131C0 0001FF50 C0 09 00 00 */ lfs f0, _21DebugWorldCameraMover.TurboSpeed@l(r9) +/* 000131C4 0001FF54 ED 4D 00 32 */ fmuls f10, f13, f0 +/* 000131C8 0001FF58 48 01 31 D0 */ b .text+0x131D0 +/* 000131CC 0001FF5C C1 5B 00 80 */ lfs f10, 0x80(r27) +/* 000131D0 0001FF60 3F C0 00 00 */ lis r30, _21DebugWorldCameraMover.Eye@ha +/* 000131D4 0001FF64 3D 20 00 00 */ lis r9, .rodata+0xA7C@ha +/* 000131D8 0001FF68 3B BE 00 00 */ addi r29, r30, _21DebugWorldCameraMover.Eye@l +/* 000131DC 0001FF6C C1 69 0A 7C */ lfs f11, .rodata+0xA7C@l(r9) +/* 000131E0 0001FF70 C0 1D 00 08 */ lfs f0, 0x8(r29) +/* 000131E4 0001FF74 ED 4A 07 72 */ fmuls f10, f10, f29 +/* 000131E8 0001FF78 C1 BD 00 04 */ lfs f13, 0x4(r29) +/* 000131EC 0001FF7C 38 81 00 40 */ addi r4, r1, 0x40 +/* 000131F0 0001FF80 C1 9E 00 00 */ lfs f12, _21DebugWorldCameraMover.Eye@l(r30) +/* 000131F4 0001FF84 EC 00 50 2A */ fadds f0, f0, f10 +/* 000131F8 0001FF88 D1 A1 00 44 */ stfs f13, 0x44(r1) +/* 000131FC 0001FF8C 38 61 00 20 */ addi r3, r1, 0x20 +/* 00013200 0001FF90 D1 81 00 40 */ stfs f12, 0x40(r1) +/* 00013204 0001FF94 D0 01 00 48 */ stfs f0, 0x48(r1) +/* 00013208 0001FF98 D1 61 00 34 */ stfs f11, 0x34(r1) +/* 0001320C 0001FF9C D1 61 00 30 */ stfs f11, 0x30(r1) +/* 00013210 0001FFA0 D1 41 00 38 */ stfs f10, 0x38(r1) +/* 00013214 0001FFA4 48 00 00 01 */ bl __8bVector3RC8bVector3 +/* 00013218 0001FFA8 C1 81 00 20 */ lfs f12, 0x20(r1) +/* 0001321C 0001FFAC 3D 20 00 00 */ lis r9, .rodata+0xA80@ha +/* 00013220 0001FFB0 C0 01 00 28 */ lfs f0, 0x28(r1) +/* 00013224 0001FFB4 7F 83 E3 78 */ mr r3, r28 +/* 00013228 0001FFB8 C1 A1 00 24 */ lfs f13, 0x24(r1) +/* 0001322C 0001FFBC D1 9E 00 00 */ stfs f12, _21DebugWorldCameraMover.Eye@l(r30) +/* 00013230 0001FFC0 C3 C9 0A 80 */ lfs f30, .rodata+0xA80@l(r9) +/* 00013234 0001FFC4 D1 BD 00 04 */ stfs f13, 0x4(r29) +/* 00013238 0001FFC8 D0 1D 00 08 */ stfs f0, 0x8(r29) +/* 0001323C 0001FFCC 48 00 00 01 */ bl bCos__FUs +/* 00013240 0001FFD0 FF E0 08 90 */ fmr f31, f1 +/* 00013244 0001FFD4 7F E3 FB 78 */ mr r3, r31 +/* 00013248 0001FFD8 48 00 00 01 */ bl bCos__FUs +/* 0001324C 0001FFDC C0 1E 00 00 */ lfs f0, _21DebugWorldCameraMover.Eye@l(r30) +/* 00013250 0001FFE0 EC 21 07 B2 */ fmuls f1, f1, f30 +/* 00013254 0001FFE4 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.Look@ha +/* 00013258 0001FFE8 7F 83 E3 78 */ mr r3, r28 +/* 0001325C 0001FFEC EF FF 00 7A */ fmadds f31, f31, f1, f0 +/* 00013260 0001FFF0 3B C9 00 00 */ addi r30, r9, _21DebugWorldCameraMover.Look@l +/* 00013264 0001FFF4 D3 E9 00 00 */ stfs f31, _21DebugWorldCameraMover.Look@l(r9) +/* 00013268 0001FFF8 48 00 00 01 */ bl bCos__FUs +/* 0001326C 0001FFFC FF E0 08 90 */ fmr f31, f1 +/* 00013270 00020000 7F E3 FB 78 */ mr r3, r31 +/* 00013274 00020004 48 00 00 01 */ bl bSin__FUs +/* 00013278 00020008 C0 1D 00 04 */ lfs f0, 0x4(r29) +/* 0001327C 0002000C EC 21 07 B2 */ fmuls f1, f1, f30 +/* 00013280 00020010 7F 83 E3 78 */ mr r3, r28 +/* 00013284 00020014 EF FF 00 7A */ fmadds f31, f31, f1, f0 +/* 00013288 00020018 D3 FE 00 04 */ stfs f31, 0x4(r30) +/* 0001328C 0002001C 48 00 00 01 */ bl bSin__FUs +/* 00013290 00020020 C0 1D 00 08 */ lfs f0, 0x8(r29) +/* 00013294 00020024 EC 21 07 BA */ fmadds f1, f1, f30, f0 +/* 00013298 00020028 D0 3E 00 08 */ stfs f1, 0x8(r30) +/* 0001329C 0002002C 3D 20 00 00 */ lis r9, .rodata+0xA7C@ha +/* 000132A0 00020030 C1 BB 00 84 */ lfs f13, 0x84(r27) +/* 000132A4 00020034 C0 09 0A 7C */ lfs f0, .rodata+0xA7C@l(r9) +/* 000132A8 00020038 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 000132AC 0002003C 41 82 32 D4 */ beq .L_00016580 +/* 000132B0 00020040 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.SuperTurboOn@ha +/* 000132B4 00020044 80 09 00 00 */ lwz r0, _21DebugWorldCameraMover.SuperTurboOn@l(r9) +/* 000132B8 00020048 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000132BC 0002004C 40 82 32 F0 */ bne .L_000165AC +/* 000132C0 00020050 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.TurboOn@ha +/* 000132C4 00020054 80 09 00 00 */ lwz r0, _21DebugWorldCameraMover.TurboOn@l(r9) +/* 000132C8 00020058 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000132CC 0002005C 40 82 33 10 */ bne .L_000165DC +/* 000132D0 00020060 48 01 33 20 */ b .text+0x13320 +/* 000132D4 00020064 C1 BB 00 88 */ lfs f13, 0x88(r27) +/* 000132D8 00020068 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 000132DC 0002006C 41 82 33 B4 */ beq .L_00016690 +/* 000132E0 00020070 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.SuperTurboOn@ha +/* 000132E4 00020074 80 09 00 00 */ lwz r0, _21DebugWorldCameraMover.SuperTurboOn@l(r9) +/* 000132E8 00020078 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000132EC 0002007C 41 82 33 00 */ beq .L_000165EC +/* 000132F0 00020080 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.SuperTurboSpeed@ha +/* 000132F4 00020084 C0 09 00 00 */ lfs f0, _21DebugWorldCameraMover.SuperTurboSpeed@l(r9) +/* 000132F8 00020088 EC 0D 00 32 */ fmuls f0, f13, f0 +/* 000132FC 0002008C 48 01 33 24 */ b .text+0x13324 +/* 00013300 00020090 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.TurboOn@ha +.L_00013304: +/* 00013304 00020094 80 09 00 00 */ lwz r0, _21DebugWorldCameraMover.TurboOn@l(r9) +.L_00013308: +/* 00013308 00020098 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0001330C 0002009C 41 82 33 20 */ beq .L_0001662C +/* 00013310 000200A0 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.TurboSpeed@ha +/* 00013314 000200A4 C0 09 00 00 */ lfs f0, _21DebugWorldCameraMover.TurboSpeed@l(r9) +/* 00013318 000200A8 EC 0D 00 32 */ fmuls f0, f13, f0 +/* 0001331C 000200AC 48 01 33 24 */ b .text+0x13324 +/* 00013320 000200B0 FC 00 68 90 */ fmr f0, f13 +/* 00013324 000200B4 81 3B 00 1C */ lwz r9, 0x1c(r27) +/* 00013328 000200B8 3D 00 00 00 */ lis r8, _21DebugWorldCameraMover.Eye@ha +/* 0001332C 000200BC C1 48 00 00 */ lfs f10, _21DebugWorldCameraMover.Eye@l(r8) +/* 00013330 000200C0 39 48 00 00 */ addi r10, r8, _21DebugWorldCameraMover.Eye@l +/* 00013334 000200C4 C0 C9 00 58 */ lfs f6, 0x58(r9) +/* 00013338 000200C8 EC 00 07 72 */ fmuls f0, f0, f29 +/* 0001333C 000200CC C1 09 00 50 */ lfs f8, 0x50(r9) +/* 00013340 000200D0 3C E0 00 00 */ lis r7, _21DebugWorldCameraMover.Look@ha +/* 00013344 000200D4 C1 29 00 54 */ lfs f9, 0x54(r9) +/* 00013348 000200D8 EC C6 00 32 */ fmuls f6, f6, f0 +/* 0001334C 000200DC C1 8A 00 08 */ lfs f12, 0x8(r10) +/* 00013350 000200E0 ED 08 00 32 */ fmuls f8, f8, f0 +/* 00013354 000200E4 ED 29 00 32 */ fmuls f9, f9, f0 +/* 00013358 000200E8 39 67 00 00 */ addi r11, r7, _21DebugWorldCameraMover.Look@l +/* 0001335C 000200EC C0 EA 00 04 */ lfs f7, 0x4(r10) +/* 00013360 000200F0 ED 4A 40 2A */ fadds f10, f10, f8 +/* 00013364 000200F4 C1 6B 00 04 */ lfs f11, 0x4(r11) +/* 00013368 000200F8 ED 8C 30 2A */ fadds f12, f12, f6 +/* 0001336C 000200FC C0 0B 00 08 */ lfs f0, 0x8(r11) +/* 00013370 00020100 EC E7 48 2A */ fadds f7, f7, f9 +/* 00013374 00020104 C1 A7 00 00 */ lfs f13, _21DebugWorldCameraMover.Look@l(r7) +/* 00013378 00020108 ED 6B 48 2A */ fadds f11, f11, f9 +/* 0001337C 0002010C D1 48 00 00 */ stfs f10, _21DebugWorldCameraMover.Eye@l(r8) +/* 00013380 00020110 EC 00 30 2A */ fadds f0, f0, f6 +/* 00013384 00020114 D1 8A 00 08 */ stfs f12, 0x8(r10) +/* 00013388 00020118 ED AD 40 2A */ fadds f13, f13, f8 +/* 0001338C 0002011C D1 A7 00 00 */ stfs f13, _21DebugWorldCameraMover.Look@l(r7) +/* 00013390 00020120 D0 0B 00 08 */ stfs f0, 0x8(r11) +/* 00013394 00020124 D0 EA 00 04 */ stfs f7, 0x4(r10) +/* 00013398 00020128 D1 6B 00 04 */ stfs f11, 0x4(r11) +/* 0001339C 0002012C D1 01 00 30 */ stfs f8, 0x30(r1) +/* 000133A0 00020130 D1 21 00 34 */ stfs f9, 0x34(r1) +/* 000133A4 00020134 D0 C1 00 38 */ stfs f6, 0x38(r1) +/* 000133A8 00020138 D1 01 00 20 */ stfs f8, 0x20(r1) +/* 000133AC 0002013C D1 21 00 24 */ stfs f9, 0x24(r1) +/* 000133B0 00020140 D0 C1 00 28 */ stfs f6, 0x28(r1) +/* 000133B4 00020144 3D 20 00 00 */ lis r9, .rodata+0xA7C@ha +/* 000133B8 00020148 C1 BB 00 8C */ lfs f13, 0x8c(r27) +/* 000133BC 0002014C C0 09 0A 7C */ lfs f0, .rodata+0xA7C@l(r9) +/* 000133C0 00020150 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 000133C4 00020154 41 82 34 94 */ beq .L_00016858 +/* 000133C8 00020158 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.SuperTurboOn@ha +/* 000133CC 0002015C 80 09 00 00 */ lwz r0, _21DebugWorldCameraMover.SuperTurboOn@l(r9) +/* 000133D0 00020160 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000133D4 00020164 41 82 33 E8 */ beq .L_000167BC +/* 000133D8 00020168 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.SuperTurboSpeed@ha +/* 000133DC 0002016C C0 09 00 00 */ lfs f0, _21DebugWorldCameraMover.SuperTurboSpeed@l(r9) +/* 000133E0 00020170 EF CD 00 32 */ fmuls f30, f13, f0 +/* 000133E4 00020174 48 01 34 0C */ b .text+0x1340C +/* 000133E8 00020178 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.TurboOn@ha +/* 000133EC 0002017C 80 09 00 00 */ lwz r0, _21DebugWorldCameraMover.TurboOn@l(r9) +/* 000133F0 00020180 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000133F4 00020184 41 82 34 08 */ beq .L_000167FC +/* 000133F8 00020188 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.TurboSpeed@ha +/* 000133FC 0002018C C0 09 00 00 */ lfs f0, _21DebugWorldCameraMover.TurboSpeed@l(r9) +/* 00013400 00020190 EF CD 00 32 */ fmuls f30, f13, f0 +/* 00013404 00020194 48 01 34 0C */ b .text+0x1340C +/* 00013408 00020198 FF C0 68 90 */ fmr f30, f13 +/* 0001340C 0002019C 3B DF 40 00 */ addi r30, r31, 0x4000 +/* 00013410 000201A0 EF DE 07 72 */ fmuls f30, f30, f29 +/* 00013414 000201A4 57 DE 04 3E */ clrlwi r30, r30, 16 +/* 00013418 000201A8 7F C3 F3 78 */ mr r3, r30 +/* 0001341C 000201AC 48 00 00 01 */ bl bCos__FUs +/* 00013420 000201B0 EF E1 07 B2 */ fmuls f31, f1, f30 +/* 00013424 000201B4 7F C3 F3 78 */ mr r3, r30 +/* 00013428 000201B8 48 00 00 01 */ bl bSin__FUs +/* 0001342C 000201BC 3D 40 00 00 */ lis r10, _21DebugWorldCameraMover.Eye@ha +/* 00013430 000201C0 3D 00 00 00 */ lis r8, _21DebugWorldCameraMover.Look@ha +/* 00013434 000201C4 C1 AA 00 00 */ lfs f13, _21DebugWorldCameraMover.Eye@l(r10) +/* 00013438 000201C8 39 2A 00 00 */ addi r9, r10, _21DebugWorldCameraMover.Eye@l +/* 0001343C 000201CC 39 68 00 00 */ addi r11, r8, _21DebugWorldCameraMover.Look@l +/* 00013440 000201D0 C1 69 00 04 */ lfs f11, 0x4(r9) +/* 00013444 000201D4 C1 8B 00 04 */ lfs f12, 0x4(r11) +/* 00013448 000201D8 ED AD F8 2A */ fadds f13, f13, f31 +/* 0001344C 000201DC C1 49 00 08 */ lfs f10, 0x8(r9) +/* 00013450 000201E0 3C E0 00 00 */ lis r7, .rodata+0xA7C@ha +/* 00013454 000201E4 C1 2B 00 08 */ lfs f9, 0x8(r11) +/* 00013458 000201E8 EC 21 07 B2 */ fmuls f1, f1, f30 +/* 0001345C 000201EC C0 08 00 00 */ lfs f0, _21DebugWorldCameraMover.Look@l(r8) +/* 00013460 000201F0 ED 6B 08 2A */ fadds f11, f11, f1 +/* 00013464 000201F4 D1 AA 00 00 */ stfs f13, _21DebugWorldCameraMover.Eye@l(r10) +/* 00013468 000201F8 ED 8C 08 2A */ fadds f12, f12, f1 +/* 0001346C 000201FC D1 49 00 08 */ stfs f10, 0x8(r9) +/* 00013470 00020200 EC 00 F8 2A */ fadds f0, f0, f31 +/* 00013474 00020204 D0 08 00 00 */ stfs f0, _21DebugWorldCameraMover.Look@l(r8) +.L_00013478: +/* 00013478 00020208 C1 07 0A 7C */ lfs f8, .rodata+0xA7C@l(r7) +/* 0001347C 0002020C D1 2B 00 08 */ stfs f9, 0x8(r11) +/* 00013480 00020210 D1 01 00 28 */ stfs f8, 0x28(r1) +.L_00013484: +/* 00013484 00020214 D1 69 00 04 */ stfs f11, 0x4(r9) +/* 00013488 00020218 D1 8B 00 04 */ stfs f12, 0x4(r11) +/* 0001348C 0002021C D3 E1 00 20 */ stfs f31, 0x20(r1) +/* 00013490 00020220 D0 21 00 24 */ stfs f1, 0x24(r1) +/* 00013494 00020224 3F C0 00 00 */ lis r30, _21DebugWorldCameraMover.Eye@ha +/* 00013498 00020228 3F A0 00 00 */ lis r29, _21DebugWorldCameraMover.Look@ha +.L_0001349C: +/* 0001349C 0002022C 3B 81 00 20 */ addi r28, r1, 0x20 +.L_000134A0: +/* 000134A0 00020230 3B DE 00 00 */ addi r30, r30, _21DebugWorldCameraMover.Eye@l +/* 000134A4 00020234 3B BD 00 00 */ addi r29, r29, _21DebugWorldCameraMover.Look@l +/* 000134A8 00020238 3B E1 00 50 */ addi r31, r1, 0x50 +/* 000134AC 0002023C 7F C4 F3 78 */ mr r4, r30 +/* 000134B0 00020240 7F 83 E3 78 */ mr r3, r28 +/* 000134B4 00020244 7F A5 EB 78 */ mr r5, r29 +/* 000134B8 00020248 38 C0 00 00 */ li r6, 0x0 +/* 000134BC 0002024C 48 00 31 11 */ bl .L_000165CC +/* 000134C0 00020250 7F C4 F3 78 */ mr r4, r30 +/* 000134C4 00020254 7F A5 EB 78 */ mr r5, r29 +/* 000134C8 00020258 7F 86 E3 78 */ mr r6, r28 +/* 000134CC 0002025C 7F E3 FB 78 */ mr r3, r31 +/* 000134D0 00020260 48 00 00 01 */ bl eCreateLookAtMatrix__FP8bMatrix4R8bVector3N21 +/* 000134D4 00020264 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha +/* 000134D8 00020268 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) +/* 000134DC 0002026C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000134E0 00020270 40 82 34 F0 */ bne .L_000169D0 +/* 000134E4 00020274 81 3B 00 1C */ lwz r9, 0x1c(r27) +/* 000134E8 00020278 38 00 32 DC */ li r0, 0x32dc +/* 000134EC 0002027C B0 09 00 C4 */ sth r0, 0xc4(r9) +/* 000134F0 00020280 80 7B 00 1C */ lwz r3, 0x1c(r27) +/* 000134F4 00020284 7F E4 FB 78 */ mr r4, r31 +/* 000134F8 00020288 FC 20 E8 90 */ fmr f1, f29 +/* 000134FC 0002028C 48 00 04 ED */ bl .L_000139E8 +/* 00013500 00020290 80 01 00 DC */ lwz r0, 0xdc(r1) +/* 00013504 00020294 7C 08 03 A6 */ mtlr r0 +/* 00013508 00020298 BB 21 00 A4 */ lmw r25, 0xa4(r1) +/* 0001350C 0002029C E3 A1 00 C0 */ psq_l f29, 0xc0(r1), 0, qr0 +/* 00013510 000202A0 E3 C1 00 C8 */ psq_l f30, 0xc8(r1), 0, qr0 +/* 00013514 000202A4 E3 E1 00 D0 */ psq_l f31, 0xd0(r1), 0, qr0 +/* 00013518 000202A8 38 21 00 D8 */ addi r1, r1, 0xd8 +/* 0001351C 000202AC 4E 80 00 20 */ blr +.endfn Update__21DebugWorldCameraMoverf + +# .text:0x13520 | size: 0xDC +# ICEData::PlatEndianSwap +.fn PlatEndianSwap__7ICEData, global +/* 00013520 000202B0 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 00013524 000202B4 7C 08 02 A6 */ mflr r0 +/* 00013528 000202B8 BF 41 00 08 */ stmw r26, 0x8(r1) +/* 0001352C 000202BC 90 01 00 24 */ stw r0, 0x24(r1) +/* 00013530 000202C0 7C 7D 1B 78 */ mr r29, r3 +/* 00013534 000202C4 3B E0 00 00 */ li r31, 0x0 +/* 00013538 000202C8 38 7D 00 10 */ addi r3, r29, 0x10 +/* 0001353C 000202CC 48 00 00 01 */ bl bEndianSwap32__FPv +/* 00013540 000202D0 38 7D 00 0C */ addi r3, r29, 0xc +/* 00013544 000202D4 48 00 00 01 */ bl bEndianSwap32__FPv +/* 00013548 000202D8 57 E3 10 3A */ slwi r3, r31, 2 +/* 0001354C 000202DC 3B 5F 00 01 */ addi r26, r31, 0x1 +/* 00013550 000202E0 7C 7B 1B 78 */ mr r27, r3 +/* 00013554 000202E4 3B 80 00 00 */ li r28, 0x0 +/* 00013558 000202E8 7C 63 EA 14 */ add r3, r3, r29 +/* 0001355C 000202EC 38 63 00 14 */ addi r3, r3, 0x14 +/* 00013560 000202F0 48 00 00 01 */ bl bEndianSwap32__FPv +/* 00013564 000202F4 1C 1F 00 0C */ mulli r0, r31, 0xc +/* 00013568 000202F8 7F E0 EA 14 */ add r31, r0, r29 +/* 0001356C 000202FC 57 9E 10 3A */ slwi r30, r28, 2 +/* 00013570 00020300 7C 7E FA 14 */ add r3, r30, r31 +/* 00013574 00020304 3B 9C 00 01 */ addi r28, r28, 0x1 +/* 00013578 00020308 38 63 00 1C */ addi r3, r3, 0x1c +.L_0001357C: +/* 0001357C 0002030C 48 00 00 01 */ bl bEndianSwap32__FPv +/* 00013580 00020310 7F DE FA 14 */ add r30, r30, r31 +/* 00013584 00020314 38 7E 00 34 */ addi r3, r30, 0x34 +/* 00013588 00020318 48 00 00 01 */ bl bEndianSwap32__FPv +/* 0001358C 0002031C 2C 1C 00 02 */ cmpwi r28, 0x2 +/* 00013590 00020320 40 81 35 6C */ ble .L_00016AFC +/* 00013594 00020324 7C 7B EA 14 */ add r3, r27, r29 +/* 00013598 00020328 7F 5F D3 78 */ mr r31, r26 +.L_0001359C: +/* 0001359C 0002032C 38 63 00 4C */ addi r3, r3, 0x4c +/* 000135A0 00020330 48 00 00 01 */ bl bEndianSwap32__FPv +/* 000135A4 00020334 7C 7B EA 14 */ add r3, r27, r29 +/* 000135A8 00020338 38 63 00 54 */ addi r3, r3, 0x54 +/* 000135AC 0002033C 48 00 00 01 */ bl bEndianSwap32__FPv +/* 000135B0 00020340 7C 7B EA 14 */ add r3, r27, r29 +/* 000135B4 00020344 38 63 00 5C */ addi r3, r3, 0x5c +/* 000135B8 00020348 48 00 00 01 */ bl bEndianSwap32__FPv +/* 000135BC 0002034C 7C 7B EA 14 */ add r3, r27, r29 +/* 000135C0 00020350 38 63 00 74 */ addi r3, r3, 0x74 +/* 000135C4 00020354 48 00 00 01 */ bl bEndianSwap32__FPv +/* 000135C8 00020358 7C 7B EA 14 */ add r3, r27, r29 +/* 000135CC 0002035C 38 63 00 64 */ addi r3, r3, 0x64 +/* 000135D0 00020360 48 00 00 01 */ bl bEndianSwap32__FPv +/* 000135D4 00020364 7C 7B EA 14 */ add r3, r27, r29 +/* 000135D8 00020368 38 63 00 6C */ addi r3, r3, 0x6c +/* 000135DC 0002036C 48 00 00 01 */ bl bEndianSwap32__FPv +/* 000135E0 00020370 2C 1F 00 01 */ cmpwi r31, 0x1 +/* 000135E4 00020374 40 81 35 48 */ ble .L_00016B2C +/* 000135E8 00020378 80 01 00 24 */ lwz r0, 0x24(r1) +/* 000135EC 0002037C 7C 08 03 A6 */ mtlr r0 +/* 000135F0 00020380 BB 41 00 08 */ lmw r26, 0x8(r1) +/* 000135F4 00020384 38 21 00 20 */ addi r1, r1, 0x20 +/* 000135F8 00020388 4E 80 00 20 */ blr +.endfn PlatEndianSwap__7ICEData + +# .text:0x135FC | size: 0x78 +.fn GetEye__7ICEDataiPQ23ICE7Vector3, global +/* 000135FC 0002038C 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 00013600 00020390 7C 08 02 A6 */ mflr r0 +.L_00013604: +/* 00013604 00020394 90 01 00 0C */ stw r0, 0xc(r1) +/* 00013608 00020398 1C 84 00 0C */ mulli r4, r4, 0xc +/* 0001360C 0002039C 39 63 00 1C */ addi r11, r3, 0x1c +/* 00013610 000203A0 3D 20 00 00 */ lis r9, bMirrorICEData@ha +/* 00013614 000203A4 80 09 00 00 */ lwz r0, bMirrorICEData@l(r9) +/* 00013618 000203A8 39 43 00 20 */ addi r10, r3, 0x20 +/* 0001361C 000203AC 39 03 00 24 */ addi r8, r3, 0x24 +/* 00013620 000203B0 7C 0B 24 2E */ lfsx f0, r11, r4 +/* 00013624 000203B4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00013628 000203B8 D0 05 00 00 */ stfs f0, 0x0(r5) +/* 0001362C 000203BC 7D AA 24 2E */ lfsx f13, r10, r4 +/* 00013630 000203C0 D1 A5 00 04 */ stfs f13, 0x4(r5) +/* 00013634 000203C4 7C 08 24 2E */ lfsx f0, r8, r4 +/* 00013638 000203C8 D0 05 00 08 */ stfs f0, 0x8(r5) +/* 0001363C 000203CC 41 82 36 48 */ beq .L_00016C84 +/* 00013640 000203D0 FC 00 68 50 */ fneg f0, f13 +/* 00013644 000203D4 D0 05 00 04 */ stfs f0, 0x4(r5) +/* 00013648 000203D8 88 03 00 04 */ lbz r0, 0x4(r3) +/* 0001364C 000203DC 2C 00 00 03 */ cmpwi r0, 0x3 +/* 00013650 000203E0 40 82 36 64 */ bne .L_00016CB4 +/* 00013654 000203E4 3C 60 00 00 */ lis r3, TheICEManager@ha +/* 00013658 000203E8 7C A4 2B 78 */ mr r4, r5 +.L_0001365C: +/* 0001365C 000203EC 38 63 00 00 */ addi r3, r3, TheICEManager@l +/* 00013660 000203F0 48 01 87 89 */ bl .text+0x18788 +/* 00013664 000203F4 80 01 00 0C */ lwz r0, 0xc(r1) +/* 00013668 000203F8 7C 08 03 A6 */ mtlr r0 +/* 0001366C 000203FC 38 21 00 08 */ addi r1, r1, 0x8 +/* 00013670 00020400 4E 80 00 20 */ blr +.endfn GetEye__7ICEDataiPQ23ICE7Vector3 + +# .text:0x13674 | size: 0x78 +.fn GetLook__7ICEDataiPQ23ICE7Vector3, global +/* 00013674 00020404 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 00013678 00020408 7C 08 02 A6 */ mflr r0 +/* 0001367C 0002040C 90 01 00 0C */ stw r0, 0xc(r1) +/* 00013680 00020410 1C 84 00 0C */ mulli r4, r4, 0xc +/* 00013684 00020414 39 63 00 34 */ addi r11, r3, 0x34 +/* 00013688 00020418 3D 20 00 00 */ lis r9, bMirrorICEData@ha +/* 0001368C 0002041C 80 09 00 00 */ lwz r0, bMirrorICEData@l(r9) +/* 00013690 00020420 39 43 00 38 */ addi r10, r3, 0x38 +/* 00013694 00020424 39 03 00 3C */ addi r8, r3, 0x3c +/* 00013698 00020428 7C 0B 24 2E */ lfsx f0, r11, r4 +/* 0001369C 0002042C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000136A0 00020430 D0 05 00 00 */ stfs f0, 0x0(r5) +/* 000136A4 00020434 7D AA 24 2E */ lfsx f13, r10, r4 +/* 000136A8 00020438 D1 A5 00 04 */ stfs f13, 0x4(r5) +/* 000136AC 0002043C 7C 08 24 2E */ lfsx f0, r8, r4 +/* 000136B0 00020440 D0 05 00 08 */ stfs f0, 0x8(r5) +/* 000136B4 00020444 41 82 36 C0 */ beq .L_00016D74 +/* 000136B8 00020448 FC 00 68 50 */ fneg f0, f13 +/* 000136BC 0002044C D0 05 00 04 */ stfs f0, 0x4(r5) +/* 000136C0 00020450 88 03 00 05 */ lbz r0, 0x5(r3) +/* 000136C4 00020454 2C 00 00 03 */ cmpwi r0, 0x3 +/* 000136C8 00020458 40 82 36 DC */ bne .L_00016DA4 +/* 000136CC 0002045C 3C 60 00 00 */ lis r3, TheICEManager@ha +/* 000136D0 00020460 7C A4 2B 78 */ mr r4, r5 +/* 000136D4 00020464 38 63 00 00 */ addi r3, r3, TheICEManager@l +/* 000136D8 00020468 48 01 87 89 */ bl .text+0x18788 +/* 000136DC 0002046C 80 01 00 0C */ lwz r0, 0xc(r1) +/* 000136E0 00020470 7C 08 03 A6 */ mtlr r0 +/* 000136E4 00020474 38 21 00 08 */ addi r1, r1, 0x8 +/* 000136E8 00020478 4E 80 00 20 */ blr +.endfn GetLook__7ICEDataiPQ23ICE7Vector3 + +# .text:0x136EC | size: 0xDC +.fn KeysShared__3ICEP7ICEDataiT1i, global +/* 000136EC 0002047C 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 000136F0 00020480 7C 08 02 A6 */ mflr r0 +/* 000136F4 00020484 90 01 00 0C */ stw r0, 0xc(r1) +/* 000136F8 00020488 7C 67 1B 78 */ mr r7, r3 +/* 000136FC 0002048C 54 80 10 3A */ slwi r0, r4, 2 +/* 00013700 00020490 54 C8 10 3A */ slwi r8, r6, 2 +/* 00013704 00020494 39 27 00 14 */ addi r9, r7, 0x14 +/* 00013708 00020498 39 45 00 14 */ addi r10, r5, 0x14 +/* 0001370C 0002049C 7C 09 04 2E */ lfsx f0, r9, r0 +/* 00013710 000204A0 7D AA 44 2E */ lfsx f13, r10, r8 +/* 00013714 000204A4 3D 60 00 00 */ lis r11, .rodata+0xAA0@ha +/* 00013718 000204A8 C1 6B 0A A0 */ lfs f11, .rodata+0xAA0@l(r11) +/* 0001371C 000204AC EC 00 68 28 */ fsubs f0, f0, f13 +/* 00013720 000204B0 FD A0 00 90 */ fmr f13, f0 +/* 00013724 000204B4 FC 00 58 00 */ fcmpu cr0, f0, f11 +/* 00013728 000204B8 4C 62 0B 82 */ cror un, eq, gt +/* 0001372C 000204BC 41 83 37 34 */ bso .L_00016E60 +/* 00013730 000204C0 FD A0 68 50 */ fneg f13, f13 +/* 00013734 000204C4 3D 20 00 00 */ lis r9, .rodata+0xAA4@ha +/* 00013738 000204C8 C1 89 0A A4 */ lfs f12, .rodata+0xAA4@l(r9) +/* 0001373C 000204CC FC 0D 60 00 */ fcmpu cr0, f13, f12 +/* 00013740 000204D0 41 81 37 78 */ bgt .L_00016EB8 +/* 00013744 000204D4 39 27 00 4C */ addi r9, r7, 0x4c +/* 00013748 000204D8 39 65 00 4C */ addi r11, r5, 0x4c +/* 0001374C 000204DC 7D AB 44 2E */ lfsx f13, r11, r8 +/* 00013750 000204E0 7C 09 04 2E */ lfsx f0, r9, r0 +/* 00013754 000204E4 EC 00 68 28 */ fsubs f0, f0, f13 +/* 00013758 000204E8 FD A0 00 90 */ fmr f13, f0 +/* 0001375C 000204EC FC 00 58 00 */ fcmpu cr0, f0, f11 +/* 00013760 000204F0 4C 62 0B 82 */ cror un, eq, gt +/* 00013764 000204F4 41 83 37 6C */ bso .L_00016ED0 +.L_00013768: +/* 00013768 000204F8 FD A0 68 50 */ fneg f13, f13 +/* 0001376C 000204FC FC 0D 60 00 */ fcmpu cr0, f13, f12 +/* 00013770 00020500 4C 62 03 82 */ cror un, eq, lt +/* 00013774 00020504 41 83 37 80 */ bso .L_00016EF4 +/* 00013778 00020508 38 60 00 00 */ li r3, 0x0 +/* 0001377C 0002050C 48 01 37 B8 */ b .text+0x137B8 +/* 00013780 00020510 39 27 00 54 */ addi r9, r7, 0x54 +/* 00013784 00020514 39 65 00 54 */ addi r11, r5, 0x54 +/* 00013788 00020518 7C 09 04 2E */ lfsx f0, r9, r0 +/* 0001378C 0002051C 7D AB 44 2E */ lfsx f13, r11, r8 +/* 00013790 00020520 EC 00 68 28 */ fsubs f0, f0, f13 +/* 00013794 00020524 FC 00 58 00 */ fcmpu cr0, f0, f11 +/* 00013798 00020528 4C 62 0B 82 */ cror un, eq, gt +/* 0001379C 0002052C 41 83 37 A4 */ bso .L_00016F40 +/* 000137A0 00020530 FC 00 00 50 */ fneg f0, f0 +/* 000137A4 00020534 FC 00 60 00 */ fcmpu cr0, f0, f12 +/* 000137A8 00020538 38 60 00 00 */ li r3, 0x0 +/* 000137AC 0002053C 41 81 37 B8 */ bgt .L_00016F64 +/* 000137B0 00020540 7C E3 3B 78 */ mr r3, r7 +/* 000137B4 00020544 48 01 37 C9 */ bl .text+0x137C8 +/* 000137B8 00020548 80 01 00 0C */ lwz r0, 0xc(r1) +/* 000137BC 0002054C 7C 08 03 A6 */ mtlr r0 +/* 000137C0 00020550 38 21 00 08 */ addi r1, r1, 0x8 +/* 000137C4 00020554 4E 80 00 20 */ blr +.endfn KeysShared__3ICEP7ICEDataiT1i + +# .text:0x137C8 | size: 0xD4 +.fn KeysSharedSpace__3ICEP7ICEDataiT1i, global +/* 000137C8 00020558 89 23 00 00 */ lbz r9, 0x0(r3) +/* 000137CC 0002055C 88 05 00 00 */ lbz r0, 0x0(r5) +/* 000137D0 00020560 7C 09 00 00 */ cmpw r9, r0 +/* 000137D4 00020564 40 82 37 F8 */ bne .L_00016FCC +/* 000137D8 00020568 89 23 00 04 */ lbz r9, 0x4(r3) +/* 000137DC 0002056C 88 05 00 04 */ lbz r0, 0x4(r5) +/* 000137E0 00020570 7C 09 00 00 */ cmpw r9, r0 +/* 000137E4 00020574 40 82 37 F8 */ bne .L_00016FDC +/* 000137E8 00020578 89 23 00 05 */ lbz r9, 0x5(r3) +/* 000137EC 0002057C 88 05 00 05 */ lbz r0, 0x5(r5) +/* 000137F0 00020580 7C 09 00 00 */ cmpw r9, r0 +/* 000137F4 00020584 41 82 38 00 */ beq .L_00016FF4 +/* 000137F8 00020588 38 60 00 00 */ li r3, 0x0 +/* 000137FC 0002058C 4E 80 00 20 */ blr +.L_00013800: +/* 00013800 00020590 1C 84 00 0C */ mulli r4, r4, 0xc +.L_00013804: +/* 00013804 00020594 3D 60 00 00 */ lis r11, .rodata+0xAAC@ha +/* 00013808 00020598 3D 20 00 00 */ lis r9, .rodata+0xAA8@ha +/* 0001380C 0002059C C1 8B 0A AC */ lfs f12, .rodata+0xAAC@l(r11) +.L_00013810: +/* 00013810 000205A0 1C C6 00 0C */ mulli r6, r6, 0xc +/* 00013814 000205A4 39 03 00 34 */ addi r8, r3, 0x34 +/* 00013818 000205A8 39 45 00 34 */ addi r10, r5, 0x34 +/* 0001381C 000205AC C1 69 0A A8 */ lfs f11, .rodata+0xAA8@l(r9) +/* 00013820 000205B0 39 60 00 00 */ li r11, 0x0 +/* 00013824 000205B4 38 63 00 1C */ addi r3, r3, 0x1c +/* 00013828 000205B8 38 A5 00 1C */ addi r5, r5, 0x1c +/* 0001382C 000205BC 55 60 10 3A */ slwi r0, r11, 2 +/* 00013830 000205C0 7D 20 32 14 */ add r9, r0, r6 +/* 00013834 000205C4 7C 00 22 14 */ add r0, r0, r4 +/* 00013838 000205C8 7C 05 4C 2E */ lfsx f0, r5, r9 +/* 0001383C 000205CC 7D A3 04 2E */ lfsx f13, r3, r0 +/* 00013840 000205D0 ED AD 00 28 */ fsubs f13, f13, f0 +/* 00013844 000205D4 FC 00 68 90 */ fmr f0, f13 +/* 00013848 000205D8 FC 0D 58 00 */ fcmpu cr0, f13, f11 +/* 0001384C 000205DC 4C 62 0B 82 */ cror un, eq, gt +/* 00013850 000205E0 41 83 38 58 */ bso .L_000170A8 +/* 00013854 000205E4 FC 00 00 50 */ fneg f0, f0 +/* 00013858 000205E8 FC 00 60 00 */ fcmpu cr0, f0, f12 +/* 0001385C 000205EC 41 81 37 F8 */ bgt .L_00017054 +/* 00013860 000205F0 7C 0A 4C 2E */ lfsx f0, r10, r9 +/* 00013864 000205F4 7D A8 04 2E */ lfsx f13, r8, r0 +/* 00013868 000205F8 ED AD 00 28 */ fsubs f13, f13, f0 +.L_0001386C: +/* 0001386C 000205FC FC 00 68 90 */ fmr f0, f13 +/* 00013870 00020600 FC 0D 58 00 */ fcmpu cr0, f13, f11 +/* 00013874 00020604 4C 62 0B 82 */ cror un, eq, gt +.L_00013878: +/* 00013878 00020608 41 83 38 80 */ bso .L_000170F8 +/* 0001387C 0002060C FC 00 00 50 */ fneg f0, f0 +/* 00013880 00020610 FC 00 60 00 */ fcmpu cr0, f0, f12 +/* 00013884 00020614 41 81 37 F8 */ bgt .L_0001707C +/* 00013888 00020618 39 6B 00 01 */ addi r11, r11, 0x1 +/* 0001388C 0002061C 2C 0B 00 02 */ cmpwi r11, 0x2 +.L_00013890: +/* 00013890 00020620 40 81 38 2C */ ble .L_000170BC +.L_00013894: +/* 00013894 00020624 38 60 00 01 */ li r3, 0x1 +/* 00013898 00020628 4E 80 00 20 */ blr +.endfn KeysSharedSpace__3ICEP7ICEDataiT1i + +# .text:0x1389C | size: 0x2C +# ConvertLensLengthToFovAngle(float) +.fn ConvertLensLengthToFovAngle__Ff, global +/* 0001389C 0002062C 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 000138A0 00020630 7C 08 02 A6 */ mflr r0 +/* 000138A4 00020634 90 01 00 0C */ stw r0, 0xc(r1) +/* 000138A8 00020638 3D 20 00 00 */ lis r9, .rodata+0xAB0@ha +/* 000138AC 0002063C C0 49 0A B0 */ lfs f2, .rodata+0xAB0@l(r9) +/* 000138B0 00020640 48 00 00 01 */ bl bATan__Fff +/* 000138B4 00020644 54 63 0C 3C */ clrlslwi r3, r3, 17, 1 +/* 000138B8 00020648 80 01 00 0C */ lwz r0, 0xc(r1) +.L_000138BC: +/* 000138BC 0002064C 7C 08 03 A6 */ mtlr r0 +/* 000138C0 00020650 38 21 00 08 */ addi r1, r1, 0x8 +/* 000138C4 00020654 4E 80 00 20 */ blr +.endfn ConvertLensLengthToFovAngle__Ff + +# .text:0x138C8 | size: 0x6C +# ConvertFovAngleToLensLength(unsigned short) +.fn ConvertFovAngleToLensLength__FUs, global +/* 000138C8 00020658 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 000138CC 0002065C 7C 08 02 A6 */ mflr r0 +/* 000138D0 00020660 F3 E1 00 10 */ psq_st f31, 0x10(r1), 0, qr0 +/* 000138D4 00020664 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 000138D8 00020668 90 01 00 1C */ stw r0, 0x1c(r1) +/* 000138DC 0002066C 54 7E F8 7E */ srwi r30, r3, 1 +/* 000138E0 00020670 7F C3 F3 78 */ mr r3, r30 +/* 000138E4 00020674 48 00 00 01 */ bl bSin__FUs +/* 000138E8 00020678 FF E0 08 90 */ fmr f31, f1 +/* 000138EC 0002067C 7F C3 F3 78 */ mr r3, r30 +/* 000138F0 00020680 48 00 00 01 */ bl bCos__FUs +/* 000138F4 00020684 EF FF 08 24 */ fdivs f31, f31, f1 +/* 000138F8 00020688 3D 20 00 00 */ lis r9, .rodata+0xAB4@ha +/* 000138FC 0002068C C0 09 0A B4 */ lfs f0, .rodata+0xAB4@l(r9) +/* 00013900 00020690 FC 1F 00 00 */ fcmpu cr0, f31, f0 +/* 00013904 00020694 41 81 39 10 */ bgt GetReplayCategory__3ICEUi +/* 00013908 00020698 3D 20 00 00 */ lis r9, .rodata+0xAB8@ha +/* 0001390C 0002069C C3 E9 0A B8 */ lfs f31, .rodata+0xAB8@l(r9) +/* 00013910 000206A0 3D 20 00 00 */ lis r9, .rodata+0xABC@ha +/* 00013914 000206A4 C0 29 0A BC */ lfs f1, .rodata+0xABC@l(r9) +/* 00013918 000206A8 EC 21 F8 24 */ fdivs f1, f1, f31 +/* 0001391C 000206AC 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 00013920 000206B0 7C 08 03 A6 */ mtlr r0 +/* 00013924 000206B4 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 00013928 000206B8 E3 E1 00 10 */ psq_l f31, 0x10(r1), 0, qr0 +/* 0001392C 000206BC 38 21 00 18 */ addi r1, r1, 0x18 +/* 00013930 000206C0 4E 80 00 20 */ blr +.endfn ConvertFovAngleToLensLength__FUs + +# .text:0x13934 | size: 0xA0 +# ConvertLensDeltaToFovDelta(float, float) +.fn ConvertLensDeltaToFovDelta__Fff, global +/* 00013934 000206C4 94 21 FF C8 */ stwu r1, -0x38(r1) +/* 00013938 000206C8 7C 08 02 A6 */ mflr r0 +/* 0001393C 000206CC F3 C1 00 28 */ psq_st f30, 0x28(r1), 0, qr0 +/* 00013940 000206D0 F3 E1 00 30 */ psq_st f31, 0x30(r1), 0, qr0 +/* 00013944 000206D4 BF A1 00 1C */ stmw r29, 0x1c(r1) +/* 00013948 000206D8 90 01 00 3C */ stw r0, 0x3c(r1) +/* 0001394C 000206DC FF C0 10 90 */ fmr f30, f2 +/* 00013950 000206E0 3F A0 00 00 */ lis r29, .rodata+0xAC0@ha +/* 00013954 000206E4 FF E0 08 90 */ fmr f31, f1 +/* 00013958 000206E8 C0 5D 0A C0 */ lfs f2, .rodata+0xAC0@l(r29) +/* 0001395C 000206EC 48 00 00 01 */ bl bATan__Fff +/* 00013960 000206F0 3D 20 00 00 */ lis r9, .rodata+0xAC4@ha +/* 00013964 000206F4 54 7E 08 3C */ slwi r30, r3, 1 +/* 00013968 000206F8 C0 29 0A C4 */ lfs f1, .rodata+0xAC4@l(r9) +/* 0001396C 000206FC 7F DE 07 34 */ extsh r30, r30 +/* 00013970 00020700 C0 5D 0A C0 */ lfs f2, .rodata+0xAC0@l(r29) +/* 00013974 00020704 EC 3E F8 7A */ fmadds f1, f30, f1, f31 +/* 00013978 00020708 48 00 00 01 */ bl bATan__Fff +/* 0001397C 0002070C 54 63 08 3C */ slwi r3, r3, 1 +/* 00013980 00020710 7C 63 07 34 */ extsh r3, r3 +/* 00013984 00020714 3C 00 43 30 */ lis r0, 0x4330 +/* 00013988 00020718 7C 7E 18 50 */ subf r3, r30, r3 +/* 0001398C 0002071C 3D 20 00 00 */ lis r9, .rodata+0xAC8@ha +/* 00013990 00020720 6C 63 80 00 */ xoris r3, r3, 0x8000 +/* 00013994 00020724 C8 09 0A C8 */ lfd f0, .rodata+0xAC8@l(r9) +/* 00013998 00020728 90 61 00 14 */ stw r3, 0x14(r1) +/* 0001399C 0002072C 3D 20 00 00 */ lis r9, .rodata+0xAD0@ha +/* 000139A0 00020730 C1 A9 0A D0 */ lfs f13, .rodata+0xAD0@l(r9) +.L_000139A4: +/* 000139A4 00020734 90 01 00 10 */ stw r0, 0x10(r1) +/* 000139A8 00020738 C8 21 00 10 */ lfd f1, 0x10(r1) +/* 000139AC 0002073C FC 21 00 28 */ fsub f1, f1, f0 +.L_000139B0: +/* 000139B0 00020740 FC 20 08 18 */ frsp f1, f1 +/* 000139B4 00020744 EC 21 03 72 */ fmuls f1, f1, f13 +/* 000139B8 00020748 80 01 00 3C */ lwz r0, 0x3c(r1) +/* 000139BC 0002074C 7C 08 03 A6 */ mtlr r0 +/* 000139C0 00020750 BB A1 00 1C */ lmw r29, 0x1c(r1) +/* 000139C4 00020754 E3 C1 00 28 */ psq_l f30, 0x28(r1), 0, qr0 +.L_000139C8: +/* 000139C8 00020758 E3 E1 00 30 */ psq_l f31, 0x30(r1), 0, qr0 +/* 000139CC 0002075C 38 21 00 38 */ addi r1, r1, 0x38 +/* 000139D0 00020760 4E 80 00 20 */ blr +.endfn ConvertLensDeltaToFovDelta__Fff + +# .text:0x139D4 | size: 0xA0 +# ConvertApertureNumberToFStop(float) +.fn ConvertApertureNumberToFStop__Ff, global +/* 000139D4 00020764 94 21 FF 58 */ stwu r1, -0xa8(r1) +/* 000139D8 00020768 3D 20 00 00 */ lis r9, .rodata+0xAD4@ha +/* 000139DC 0002076C 39 41 00 08 */ addi r10, r1, 0x8 +/* 000139E0 00020770 39 09 0A D4 */ addi r8, r9, .rodata+0xAD4@l +.L_000139E4: +/* 000139E4 00020774 7D 47 53 78 */ mr r7, r10 +.L_000139E8: +/* 000139E8 00020778 39 20 00 90 */ li r9, 0x90 +/* 000139EC 0002077C 80 08 00 00 */ lwz r0, 0x0(r8) +/* 000139F0 00020780 35 29 FF E8 */ subic. r9, r9, 0x18 +/* 000139F4 00020784 90 0A 00 00 */ stw r0, 0x0(r10) +/* 000139F8 00020788 80 08 00 04 */ lwz r0, 0x4(r8) +/* 000139FC 0002078C 90 0A 00 04 */ stw r0, 0x4(r10) +/* 00013A00 00020790 80 08 00 08 */ lwz r0, 0x8(r8) +/* 00013A04 00020794 90 0A 00 08 */ stw r0, 0x8(r10) +/* 00013A08 00020798 80 08 00 0C */ lwz r0, 0xc(r8) +/* 00013A0C 0002079C 90 0A 00 0C */ stw r0, 0xc(r10) +.L_00013A10: +/* 00013A10 000207A0 80 08 00 10 */ lwz r0, 0x10(r8) +/* 00013A14 000207A4 90 0A 00 10 */ stw r0, 0x10(r10) +/* 00013A18 000207A8 80 08 00 14 */ lwz r0, 0x14(r8) +/* 00013A1C 000207AC 39 08 00 18 */ addi r8, r8, 0x18 +/* 00013A20 000207B0 90 0A 00 14 */ stw r0, 0x14(r10) +/* 00013A24 000207B4 39 4A 00 18 */ addi r10, r10, 0x18 +/* 00013A28 000207B8 40 82 39 EC */ bne .L_00017414 +/* 00013A2C 000207BC 3D 20 00 00 */ lis r9, .rodata+0xB68@ha +/* 00013A30 000207C0 C0 09 0B 68 */ lfs f0, .rodata+0xB68@l(r9) +/* 00013A34 000207C4 80 08 00 00 */ lwz r0, 0x0(r8) +/* 00013A38 000207C8 EC 01 00 2A */ fadds f0, f1, f0 +/* 00013A3C 000207CC 90 0A 00 00 */ stw r0, 0x0(r10) +/* 00013A40 000207D0 FD A0 00 1E */ fctiwz f13, f0 +/* 00013A44 000207D4 D9 A1 00 A0 */ stfd f13, 0xa0(r1) +.L_00013A48: +/* 00013A48 000207D8 80 01 00 A4 */ lwz r0, 0xa4(r1) +.L_00013A4C: +/* 00013A4C 000207DC 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00013A50 000207E0 40 80 3A 58 */ bge .L_000174A8 +/* 00013A54 000207E4 38 00 00 00 */ li r0, 0x0 +.L_00013A58: +/* 00013A58 000207E8 2C 00 00 24 */ cmpwi r0, 0x24 +/* 00013A5C 000207EC 40 81 3A 64 */ ble .L_000174C0 +/* 00013A60 000207F0 38 00 00 24 */ li r0, 0x24 +/* 00013A64 000207F4 54 00 10 3A */ slwi r0, r0, 2 +/* 00013A68 000207F8 7C 27 04 2E */ lfsx f1, r7, r0 +.L_00013A6C: +/* 00013A6C 000207FC 38 21 00 A8 */ addi r1, r1, 0xa8 +.L_00013A70: +/* 00013A70 00020800 4E 80 00 20 */ blr +.endfn ConvertApertureNumberToFStop__Ff + +# .text:0x13A74 | size: 0x194 +.fn CreateLookAtMatrix__FPQ23ICE7Matrix4RQ23ICE7Vector3T1Us, local +/* 00013A74 00020804 94 21 FF 48 */ stwu r1, -0xb8(r1) +/* 00013A78 00020808 7C 08 02 A6 */ mflr r0 +/* 00013A7C 0002080C F3 C1 00 A8 */ psq_st f30, 0xa8(r1), 0, qr0 +/* 00013A80 00020810 F3 E1 00 B0 */ psq_st f31, 0xb0(r1), 0, qr0 +/* 00013A84 00020814 BF 21 00 8C */ stmw r25, 0x8c(r1) +/* 00013A88 00020818 90 01 00 BC */ stw r0, 0xbc(r1) +/* 00013A8C 0002081C 7C 7E 1B 78 */ mr r30, r3 +/* 00013A90 00020820 3B A1 00 08 */ addi r29, r1, 0x8 +/* 00013A94 00020824 7C 9B 23 78 */ mr r27, r4 +/* 00013A98 00020828 7C A3 2B 78 */ mr r3, r5 +/* 00013A9C 0002082C 3B 81 00 28 */ addi r28, r1, 0x28 +/* 00013AA0 00020830 7C D9 33 78 */ mr r25, r6 +/* 00013AA4 00020834 7F A5 EB 78 */ mr r5, r29 +/* 00013AA8 00020838 48 00 00 01 */ bl VU0_v3sub__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 +/* 00013AAC 0002083C 3B 41 00 38 */ addi r26, r1, 0x38 +/* 00013AB0 00020840 7F A4 EB 78 */ mr r4, r29 +/* 00013AB4 00020844 7F A3 EB 78 */ mr r3, r29 +/* 00013AB8 00020848 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +/* 00013ABC 0002084C 3D 20 00 00 */ lis r9, .rodata+0xB6C@ha +/* 00013AC0 00020850 3D 60 00 00 */ lis r11, .rodata+0xB70@ha +/* 00013AC4 00020854 C3 E9 0B 6C */ lfs f31, .rodata+0xB6C@l(r9) +/* 00013AC8 00020858 38 81 00 18 */ addi r4, r1, 0x18 +/* 00013ACC 0002085C C3 CB 0B 70 */ lfs f30, .rodata+0xB70@l(r11) +/* 00013AD0 00020860 7F A5 EB 78 */ mr r5, r29 +/* 00013AD4 00020864 D3 E1 00 18 */ stfs f31, 0x18(r1) +/* 00013AD8 00020868 7F 83 E3 78 */ mr r3, r28 +/* 00013ADC 0002086C D3 E1 00 1C */ stfs f31, 0x1c(r1) +/* 00013AE0 00020870 D3 C1 00 20 */ stfs f30, 0x20(r1) +/* 00013AE4 00020874 48 00 00 01 */ bl bCross__FP8bVector3PC8bVector3T1 +/* 00013AE8 00020878 7F 85 E3 78 */ mr r5, r28 +.L_00013AEC: +/* 00013AEC 0002087C 7F A4 EB 78 */ mr r4, r29 +/* 00013AF0 00020880 7F 43 D3 78 */ mr r3, r26 +/* 00013AF4 00020884 48 00 00 01 */ bl bCross__FP8bVector3PC8bVector3T1 +/* 00013AF8 00020888 7F 83 E3 78 */ mr r3, r28 +/* 00013AFC 0002088C 7C 64 1B 78 */ mr r4, r3 +/* 00013B00 00020890 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +/* 00013B04 00020894 7F 43 D3 78 */ mr r3, r26 +/* 00013B08 00020898 7C 64 1B 78 */ mr r4, r3 +/* 00013B0C 0002089C 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +/* 00013B10 000208A0 C0 01 00 2C */ lfs f0, 0x2c(r1) +/* 00013B14 000208A4 7F 25 CB 78 */ mr r5, r25 +/* 00013B18 000208A8 C1 A1 00 3C */ lfs f13, 0x3c(r1) +/* 00013B1C 000208AC 7F C3 F3 78 */ mr r3, r30 +/* 00013B20 000208B0 C1 81 00 0C */ lfs f12, 0xc(r1) +/* 00013B24 000208B4 7F C4 F3 78 */ mr r4, r30 +/* 00013B28 000208B8 C0 C1 00 28 */ lfs f6, 0x28(r1) +/* 00013B2C 000208BC C0 E1 00 38 */ lfs f7, 0x38(r1) +/* 00013B30 000208C0 C1 01 00 08 */ lfs f8, 0x8(r1) +/* 00013B34 000208C4 C1 61 00 30 */ lfs f11, 0x30(r1) +/* 00013B38 000208C8 C1 41 00 40 */ lfs f10, 0x40(r1) +/* 00013B3C 000208CC C1 21 00 10 */ lfs f9, 0x10(r1) +/* 00013B40 000208D0 D3 FE 00 0C */ stfs f31, 0xc(r30) +/* 00013B44 000208D4 D3 FE 00 1C */ stfs f31, 0x1c(r30) +/* 00013B48 000208D8 D3 FE 00 2C */ stfs f31, 0x2c(r30) +/* 00013B4C 000208DC D3 FE 00 30 */ stfs f31, 0x30(r30) +/* 00013B50 000208E0 D3 FE 00 34 */ stfs f31, 0x34(r30) +/* 00013B54 000208E4 D3 FE 00 38 */ stfs f31, 0x38(r30) +/* 00013B58 000208E8 D3 DE 00 3C */ stfs f30, 0x3c(r30) +/* 00013B5C 000208EC D0 1E 00 10 */ stfs f0, 0x10(r30) +/* 00013B60 000208F0 D1 BE 00 14 */ stfs f13, 0x14(r30) +/* 00013B64 000208F4 D1 9E 00 18 */ stfs f12, 0x18(r30) +/* 00013B68 000208F8 D0 DE 00 00 */ stfs f6, 0x0(r30) +/* 00013B6C 000208FC D0 FE 00 04 */ stfs f7, 0x4(r30) +/* 00013B70 00020900 D1 1E 00 08 */ stfs f8, 0x8(r30) +/* 00013B74 00020904 D1 7E 00 20 */ stfs f11, 0x20(r30) +/* 00013B78 00020908 D1 5E 00 24 */ stfs f10, 0x24(r30) +/* 00013B7C 0002090C D1 3E 00 28 */ stfs f9, 0x28(r30) +/* 00013B80 00020910 48 00 00 01 */ bl eRotateZ__FP8bMatrix4T0Us +/* 00013B84 00020914 C1 9B 00 08 */ lfs f12, 0x8(r27) +/* 00013B88 00020918 7F C3 F3 78 */ mr r3, r30 +/* 00013B8C 0002091C C1 BB 00 00 */ lfs f13, 0x0(r27) +/* 00013B90 00020920 7C 64 1B 78 */ mr r4, r3 +/* 00013B94 00020924 C0 1B 00 04 */ lfs f0, 0x4(r27) +/* 00013B98 00020928 FD 80 60 50 */ fneg f12, f12 +/* 00013B9C 0002092C FD A0 68 50 */ fneg f13, f13 +/* 00013BA0 00020930 D3 E1 00 74 */ stfs f31, 0x74(r1) +/* 00013BA4 00020934 FC 00 00 50 */ fneg f0, f0 +/* 00013BA8 00020938 D1 A1 00 78 */ stfs f13, 0x78(r1) +/* 00013BAC 0002093C D0 01 00 7C */ stfs f0, 0x7c(r1) +/* 00013BB0 00020940 38 A1 00 48 */ addi r5, r1, 0x48 +/* 00013BB4 00020944 D1 81 00 80 */ stfs f12, 0x80(r1) +/* 00013BB8 00020948 D3 C1 00 84 */ stfs f30, 0x84(r1) +/* 00013BBC 0002094C D3 C1 00 48 */ stfs f30, 0x48(r1) +/* 00013BC0 00020950 D3 E1 00 4C */ stfs f31, 0x4c(r1) +/* 00013BC4 00020954 D3 E1 00 50 */ stfs f31, 0x50(r1) +/* 00013BC8 00020958 D3 E1 00 54 */ stfs f31, 0x54(r1) +/* 00013BCC 0002095C D3 E1 00 58 */ stfs f31, 0x58(r1) +.L_00013BD0: +/* 00013BD0 00020960 D3 C1 00 5C */ stfs f30, 0x5c(r1) +/* 00013BD4 00020964 D3 E1 00 60 */ stfs f31, 0x60(r1) +.L_00013BD8: +/* 00013BD8 00020968 D3 E1 00 64 */ stfs f31, 0x64(r1) +/* 00013BDC 0002096C D3 E1 00 68 */ stfs f31, 0x68(r1) +/* 00013BE0 00020970 D3 E1 00 6C */ stfs f31, 0x6c(r1) +/* 00013BE4 00020974 D3 C1 00 70 */ stfs f30, 0x70(r1) +.L_00013BE8: +/* 00013BE8 00020978 48 00 00 01 */ bl bMulMatrix__FP8bMatrix4PC8bMatrix4T1 +/* 00013BEC 0002097C 80 01 00 BC */ lwz r0, 0xbc(r1) +/* 00013BF0 00020980 7C 08 03 A6 */ mtlr r0 +/* 00013BF4 00020984 BB 21 00 8C */ lmw r25, 0x8c(r1) +/* 00013BF8 00020988 E3 C1 00 A8 */ psq_l f30, 0xa8(r1), 0, qr0 +/* 00013BFC 0002098C E3 E1 00 B0 */ psq_l f31, 0xb0(r1), 0, qr0 +/* 00013C00 00020990 38 21 00 B8 */ addi r1, r1, 0xb8 +/* 00013C04 00020994 4E 80 00 20 */ blr +.endfn CreateLookAtMatrix__FPQ23ICE7Matrix4RQ23ICE7Vector3T1Us + +# .text:0x13C08 | size: 0x564 +.fn __8ICEMoveriP9ICEAnchor, global +/* 00013C08 00020998 94 21 FF D0 */ stwu r1, -0x30(r1) +/* 00013C0C 0002099C 7C 08 02 A6 */ mflr r0 +/* 00013C10 000209A0 F3 C1 00 20 */ psq_st f30, 0x20(r1), 0, qr0 +/* 00013C14 000209A4 F3 E1 00 28 */ psq_st f31, 0x28(r1), 0, qr0 +/* 00013C18 000209A8 BF 61 00 0C */ stmw r27, 0xc(r1) +/* 00013C1C 000209AC 90 01 00 34 */ stw r0, 0x34(r1) +/* 00013C20 000209B0 7C 7E 1B 78 */ mr r30, r3 +/* 00013C24 000209B4 7C BC 2B 78 */ mr r28, r5 +/* 00013C28 000209B8 38 A0 00 0E */ li r5, 0xe +/* 00013C2C 000209BC 48 00 1F 1D */ bl .L_00015B48 +/* 00013C30 000209C0 3B 60 00 01 */ li r27, 0x1 +.L_00013C34: +/* 00013C34 000209C4 3D 20 00 00 */ lis r9, _vt.8ICEMover@ha +/* 00013C38 000209C8 93 9E 00 80 */ stw r28, 0x80(r30) +/* 00013C3C 000209CC 39 29 00 00 */ addi r9, r9, _vt.8ICEMover@l +/* 00013C40 000209D0 3D 40 00 00 */ lis r10, .rodata+0xBA0@ha +/* 00013C44 000209D4 91 3E 00 08 */ stw r9, 0x8(r30) +/* 00013C48 000209D8 3D 60 00 00 */ lis r11, RealTimeFrames@ha +/* 00013C4C 000209DC 80 0B 00 00 */ lwz r0, RealTimeFrames@l(r11) +/* 00013C50 000209E0 38 60 00 84 */ li r3, 0x84 +/* 00013C54 000209E4 C3 EA 0B A0 */ lfs f31, .rodata+0xBA0@l(r10) +/* 00013C58 000209E8 3B A0 00 00 */ li r29, 0x0 +/* 00013C5C 000209EC 81 3E 00 1C */ lwz r9, 0x1c(r30) +/* 00013C60 000209F0 D3 FE 00 CC */ stfs f31, 0xcc(r30) +/* 00013C64 000209F4 D3 FE 00 D0 */ stfs f31, 0xd0(r30) +/* 00013C68 000209F8 D3 FE 00 D4 */ stfs f31, 0xd4(r30) +/* 00013C6C 000209FC D3 FE 00 D8 */ stfs f31, 0xd8(r30) +/* 00013C70 00020A00 D3 FE 00 DC */ stfs f31, 0xdc(r30) +.L_00013C74: +/* 00013C74 00020A04 D3 FE 00 E0 */ stfs f31, 0xe0(r30) +/* 00013C78 00020A08 D3 FE 00 E4 */ stfs f31, 0xe4(r30) +/* 00013C7C 00020A0C D3 FE 00 E8 */ stfs f31, 0xe8(r30) +/* 00013C80 00020A10 D3 FE 00 EC */ stfs f31, 0xec(r30) +/* 00013C84 00020A14 D3 FE 00 F0 */ stfs f31, 0xf0(r30) +/* 00013C88 00020A18 D3 FE 00 F4 */ stfs f31, 0xf4(r30) +/* 00013C8C 00020A1C D3 FE 00 F8 */ stfs f31, 0xf8(r30) +/* 00013C90 00020A20 D3 FE 00 FC */ stfs f31, 0xfc(r30) +/* 00013C94 00020A24 D3 FE 01 00 */ stfs f31, 0x100(r30) +/* 00013C98 00020A28 D3 FE 01 04 */ stfs f31, 0x104(r30) +/* 00013C9C 00020A2C D3 FE 01 08 */ stfs f31, 0x108(r30) +/* 00013CA0 00020A30 D3 FE 01 0C */ stfs f31, 0x10c(r30) +/* 00013CA4 00020A34 D3 FE 01 10 */ stfs f31, 0x110(r30) +/* 00013CA8 00020A38 D3 FE 01 14 */ stfs f31, 0x114(r30) +/* 00013CAC 00020A3C D3 FE 01 18 */ stfs f31, 0x118(r30) +/* 00013CB0 00020A40 D3 FE 01 1C */ stfs f31, 0x11c(r30) +/* 00013CB4 00020A44 D3 FE 01 20 */ stfs f31, 0x120(r30) +/* 00013CB8 00020A48 D3 FE 01 24 */ stfs f31, 0x124(r30) +/* 00013CBC 00020A4C D3 FE 01 28 */ stfs f31, 0x128(r30) +/* 00013CC0 00020A50 90 09 02 88 */ stw r0, 0x288(r9) +/* 00013CC4 00020A54 93 69 02 7C */ stw r27, 0x27c(r9) +/* 00013CC8 00020A58 48 00 00 01 */ bl __builtin_vec_new +/* 00013CCC 00020A5C 3D 60 00 00 */ lis r11, .rodata+0xBA4@ha +/* 00013CD0 00020A60 7C 69 1B 78 */ mr r9, r3 +/* 00013CD4 00020A64 C3 CB 0B A4 */ lfs f30, .rodata+0xBA4@l(r11) +/* 00013CD8 00020A68 38 60 00 84 */ li r3, 0x84 +/* 00013CDC 00020A6C D3 E9 00 00 */ stfs f31, 0x0(r9) +/* 00013CE0 00020A70 D3 E9 00 04 */ stfs f31, 0x4(r9) +/* 00013CE4 00020A74 D3 E9 00 08 */ stfs f31, 0x8(r9) +/* 00013CE8 00020A78 D3 E9 00 0C */ stfs f31, 0xc(r9) +/* 00013CEC 00020A7C D3 E9 00 20 */ stfs f31, 0x20(r9) +/* 00013CF0 00020A80 D3 C9 00 24 */ stfs f30, 0x24(r9) +/* 00013CF4 00020A84 B3 A9 00 28 */ sth r29, 0x28(r9) +/* 00013CF8 00020A88 B3 A9 00 2A */ sth r29, 0x2a(r9) +/* 00013CFC 00020A8C D3 E9 00 10 */ stfs f31, 0x10(r9) +/* 00013D00 00020A90 D3 E9 00 14 */ stfs f31, 0x14(r9) +/* 00013D04 00020A94 D3 E9 00 18 */ stfs f31, 0x18(r9) +/* 00013D08 00020A98 D3 E9 00 1C */ stfs f31, 0x1c(r9) +/* 00013D0C 00020A9C D3 E9 00 2C */ stfs f31, 0x2c(r9) +/* 00013D10 00020AA0 D3 E9 00 30 */ stfs f31, 0x30(r9) +/* 00013D14 00020AA4 D3 E9 00 34 */ stfs f31, 0x34(r9) +/* 00013D18 00020AA8 D3 E9 00 38 */ stfs f31, 0x38(r9) +/* 00013D1C 00020AAC D3 E9 00 4C */ stfs f31, 0x4c(r9) +/* 00013D20 00020AB0 D3 C9 00 50 */ stfs f30, 0x50(r9) +/* 00013D24 00020AB4 B3 A9 00 54 */ sth r29, 0x54(r9) +/* 00013D28 00020AB8 B3 A9 00 56 */ sth r29, 0x56(r9) +/* 00013D2C 00020ABC D3 E9 00 3C */ stfs f31, 0x3c(r9) +/* 00013D30 00020AC0 D3 E9 00 40 */ stfs f31, 0x40(r9) +/* 00013D34 00020AC4 D3 E9 00 44 */ stfs f31, 0x44(r9) +/* 00013D38 00020AC8 D3 E9 00 48 */ stfs f31, 0x48(r9) +/* 00013D3C 00020ACC D3 E9 00 58 */ stfs f31, 0x58(r9) +/* 00013D40 00020AD0 D3 E9 00 5C */ stfs f31, 0x5c(r9) +/* 00013D44 00020AD4 D3 E9 00 60 */ stfs f31, 0x60(r9) +/* 00013D48 00020AD8 D3 E9 00 64 */ stfs f31, 0x64(r9) +/* 00013D4C 00020ADC D3 E9 00 78 */ stfs f31, 0x78(r9) +.L_00013D50: +/* 00013D50 00020AE0 D3 C9 00 7C */ stfs f30, 0x7c(r9) +/* 00013D54 00020AE4 B3 A9 00 80 */ sth r29, 0x80(r9) +/* 00013D58 00020AE8 B3 A9 00 82 */ sth r29, 0x82(r9) +/* 00013D5C 00020AEC D3 E9 00 68 */ stfs f31, 0x68(r9) +/* 00013D60 00020AF0 91 3E 00 84 */ stw r9, 0x84(r30) +/* 00013D64 00020AF4 D3 E9 00 6C */ stfs f31, 0x6c(r9) +/* 00013D68 00020AF8 D3 E9 00 70 */ stfs f31, 0x70(r9) +/* 00013D6C 00020AFC D3 E9 00 74 */ stfs f31, 0x74(r9) +/* 00013D70 00020B00 48 00 00 01 */ bl __builtin_vec_new +/* 00013D74 00020B04 7C 69 1B 78 */ mr r9, r3 +/* 00013D78 00020B08 D3 E9 00 00 */ stfs f31, 0x0(r9) +/* 00013D7C 00020B0C 38 60 00 2C */ li r3, 0x2c +.L_00013D80: +/* 00013D80 00020B10 D3 E9 00 04 */ stfs f31, 0x4(r9) +/* 00013D84 00020B14 D3 E9 00 08 */ stfs f31, 0x8(r9) +.L_00013D88: +/* 00013D88 00020B18 D3 E9 00 0C */ stfs f31, 0xc(r9) +/* 00013D8C 00020B1C D3 E9 00 20 */ stfs f31, 0x20(r9) +/* 00013D90 00020B20 D3 C9 00 24 */ stfs f30, 0x24(r9) +/* 00013D94 00020B24 B3 A9 00 28 */ sth r29, 0x28(r9) +/* 00013D98 00020B28 B3 A9 00 2A */ sth r29, 0x2a(r9) +/* 00013D9C 00020B2C D3 E9 00 10 */ stfs f31, 0x10(r9) +/* 00013DA0 00020B30 D3 E9 00 14 */ stfs f31, 0x14(r9) +/* 00013DA4 00020B34 D3 E9 00 18 */ stfs f31, 0x18(r9) +/* 00013DA8 00020B38 D3 E9 00 1C */ stfs f31, 0x1c(r9) +/* 00013DAC 00020B3C D3 E9 00 2C */ stfs f31, 0x2c(r9) +/* 00013DB0 00020B40 D3 E9 00 30 */ stfs f31, 0x30(r9) +/* 00013DB4 00020B44 D3 E9 00 34 */ stfs f31, 0x34(r9) +/* 00013DB8 00020B48 D3 E9 00 38 */ stfs f31, 0x38(r9) +/* 00013DBC 00020B4C D3 E9 00 4C */ stfs f31, 0x4c(r9) +/* 00013DC0 00020B50 D3 C9 00 50 */ stfs f30, 0x50(r9) +/* 00013DC4 00020B54 B3 A9 00 54 */ sth r29, 0x54(r9) +/* 00013DC8 00020B58 B3 A9 00 56 */ sth r29, 0x56(r9) +/* 00013DCC 00020B5C D3 E9 00 3C */ stfs f31, 0x3c(r9) +/* 00013DD0 00020B60 D3 E9 00 40 */ stfs f31, 0x40(r9) +/* 00013DD4 00020B64 D3 E9 00 44 */ stfs f31, 0x44(r9) +/* 00013DD8 00020B68 D3 E9 00 48 */ stfs f31, 0x48(r9) +/* 00013DDC 00020B6C D3 E9 00 58 */ stfs f31, 0x58(r9) +/* 00013DE0 00020B70 D3 E9 00 5C */ stfs f31, 0x5c(r9) +/* 00013DE4 00020B74 D3 E9 00 60 */ stfs f31, 0x60(r9) +/* 00013DE8 00020B78 D3 E9 00 64 */ stfs f31, 0x64(r9) +/* 00013DEC 00020B7C D3 E9 00 78 */ stfs f31, 0x78(r9) +/* 00013DF0 00020B80 D3 C9 00 7C */ stfs f30, 0x7c(r9) +/* 00013DF4 00020B84 B3 A9 00 80 */ sth r29, 0x80(r9) +/* 00013DF8 00020B88 B3 A9 00 82 */ sth r29, 0x82(r9) +/* 00013DFC 00020B8C D3 E9 00 68 */ stfs f31, 0x68(r9) +/* 00013E00 00020B90 D3 E9 00 6C */ stfs f31, 0x6c(r9) +/* 00013E04 00020B94 91 3E 00 88 */ stw r9, 0x88(r30) +/* 00013E08 00020B98 D3 E9 00 70 */ stfs f31, 0x70(r9) +/* 00013E0C 00020B9C D3 E9 00 74 */ stfs f31, 0x74(r9) +/* 00013E10 00020BA0 48 00 00 01 */ bl __builtin_vec_new +/* 00013E14 00020BA4 7C 69 1B 78 */ mr r9, r3 +/* 00013E18 00020BA8 91 3E 00 8C */ stw r9, 0x8c(r30) +/* 00013E1C 00020BAC 38 60 00 2C */ li r3, 0x2c +/* 00013E20 00020BB0 D3 E9 00 00 */ stfs f31, 0x0(r9) +/* 00013E24 00020BB4 D3 E9 00 04 */ stfs f31, 0x4(r9) +/* 00013E28 00020BB8 D3 E9 00 08 */ stfs f31, 0x8(r9) +/* 00013E2C 00020BBC D3 E9 00 0C */ stfs f31, 0xc(r9) +/* 00013E30 00020BC0 D3 E9 00 20 */ stfs f31, 0x20(r9) +/* 00013E34 00020BC4 D3 C9 00 24 */ stfs f30, 0x24(r9) +/* 00013E38 00020BC8 B3 A9 00 28 */ sth r29, 0x28(r9) +/* 00013E3C 00020BCC B3 A9 00 2A */ sth r29, 0x2a(r9) +/* 00013E40 00020BD0 D3 E9 00 10 */ stfs f31, 0x10(r9) +/* 00013E44 00020BD4 D3 E9 00 14 */ stfs f31, 0x14(r9) +/* 00013E48 00020BD8 D3 E9 00 18 */ stfs f31, 0x18(r9) +/* 00013E4C 00020BDC D3 E9 00 1C */ stfs f31, 0x1c(r9) +/* 00013E50 00020BE0 48 00 00 01 */ bl __builtin_vec_new +/* 00013E54 00020BE4 7C 69 1B 78 */ mr r9, r3 +/* 00013E58 00020BE8 91 3E 00 90 */ stw r9, 0x90(r30) +/* 00013E5C 00020BEC 38 60 00 2C */ li r3, 0x2c +/* 00013E60 00020BF0 D3 E9 00 00 */ stfs f31, 0x0(r9) +.L_00013E64: +/* 00013E64 00020BF4 D3 E9 00 04 */ stfs f31, 0x4(r9) +/* 00013E68 00020BF8 D3 E9 00 08 */ stfs f31, 0x8(r9) +/* 00013E6C 00020BFC D3 E9 00 0C */ stfs f31, 0xc(r9) +.L_00013E70: +/* 00013E70 00020C00 D3 E9 00 20 */ stfs f31, 0x20(r9) +/* 00013E74 00020C04 D3 C9 00 24 */ stfs f30, 0x24(r9) +/* 00013E78 00020C08 B3 A9 00 28 */ sth r29, 0x28(r9) +/* 00013E7C 00020C0C B3 A9 00 2A */ sth r29, 0x2a(r9) +/* 00013E80 00020C10 D3 E9 00 10 */ stfs f31, 0x10(r9) +/* 00013E84 00020C14 D3 E9 00 14 */ stfs f31, 0x14(r9) +.L_00013E88: +/* 00013E88 00020C18 D3 E9 00 18 */ stfs f31, 0x18(r9) +/* 00013E8C 00020C1C D3 E9 00 1C */ stfs f31, 0x1c(r9) +/* 00013E90 00020C20 48 00 00 01 */ bl __builtin_vec_new +/* 00013E94 00020C24 7C 69 1B 78 */ mr r9, r3 +/* 00013E98 00020C28 91 3E 00 94 */ stw r9, 0x94(r30) +/* 00013E9C 00020C2C 38 60 00 2C */ li r3, 0x2c +/* 00013EA0 00020C30 D3 E9 00 00 */ stfs f31, 0x0(r9) +/* 00013EA4 00020C34 D3 E9 00 04 */ stfs f31, 0x4(r9) +/* 00013EA8 00020C38 D3 E9 00 08 */ stfs f31, 0x8(r9) +.L_00013EAC: +/* 00013EAC 00020C3C D3 E9 00 0C */ stfs f31, 0xc(r9) +/* 00013EB0 00020C40 D3 E9 00 20 */ stfs f31, 0x20(r9) +/* 00013EB4 00020C44 D3 C9 00 24 */ stfs f30, 0x24(r9) +/* 00013EB8 00020C48 B3 A9 00 28 */ sth r29, 0x28(r9) +/* 00013EBC 00020C4C B3 A9 00 2A */ sth r29, 0x2a(r9) +/* 00013EC0 00020C50 D3 E9 00 10 */ stfs f31, 0x10(r9) +/* 00013EC4 00020C54 D3 E9 00 14 */ stfs f31, 0x14(r9) +/* 00013EC8 00020C58 D3 E9 00 18 */ stfs f31, 0x18(r9) +/* 00013ECC 00020C5C D3 E9 00 1C */ stfs f31, 0x1c(r9) +/* 00013ED0 00020C60 48 00 00 01 */ bl __builtin_vec_new +/* 00013ED4 00020C64 7C 69 1B 78 */ mr r9, r3 +/* 00013ED8 00020C68 91 3E 00 98 */ stw r9, 0x98(r30) +/* 00013EDC 00020C6C 38 60 00 2C */ li r3, 0x2c +/* 00013EE0 00020C70 D3 E9 00 00 */ stfs f31, 0x0(r9) +/* 00013EE4 00020C74 D3 E9 00 04 */ stfs f31, 0x4(r9) +/* 00013EE8 00020C78 D3 E9 00 08 */ stfs f31, 0x8(r9) +/* 00013EEC 00020C7C D3 E9 00 0C */ stfs f31, 0xc(r9) +/* 00013EF0 00020C80 D3 E9 00 20 */ stfs f31, 0x20(r9) +/* 00013EF4 00020C84 D3 C9 00 24 */ stfs f30, 0x24(r9) +/* 00013EF8 00020C88 B3 A9 00 28 */ sth r29, 0x28(r9) +/* 00013EFC 00020C8C B3 A9 00 2A */ sth r29, 0x2a(r9) +/* 00013F00 00020C90 D3 E9 00 10 */ stfs f31, 0x10(r9) +/* 00013F04 00020C94 D3 E9 00 14 */ stfs f31, 0x14(r9) +/* 00013F08 00020C98 D3 E9 00 18 */ stfs f31, 0x18(r9) +/* 00013F0C 00020C9C D3 E9 00 1C */ stfs f31, 0x1c(r9) +/* 00013F10 00020CA0 48 00 00 01 */ bl __builtin_vec_new +/* 00013F14 00020CA4 7C 69 1B 78 */ mr r9, r3 +/* 00013F18 00020CA8 91 3E 00 9C */ stw r9, 0x9c(r30) +/* 00013F1C 00020CAC 38 60 00 2C */ li r3, 0x2c +/* 00013F20 00020CB0 D3 E9 00 00 */ stfs f31, 0x0(r9) +/* 00013F24 00020CB4 D3 E9 00 04 */ stfs f31, 0x4(r9) +/* 00013F28 00020CB8 D3 E9 00 08 */ stfs f31, 0x8(r9) +/* 00013F2C 00020CBC D3 E9 00 0C */ stfs f31, 0xc(r9) +.L_00013F30: +/* 00013F30 00020CC0 D3 E9 00 20 */ stfs f31, 0x20(r9) +.L_00013F34: +/* 00013F34 00020CC4 D3 C9 00 24 */ stfs f30, 0x24(r9) +/* 00013F38 00020CC8 B3 A9 00 28 */ sth r29, 0x28(r9) +.L_00013F3C: +/* 00013F3C 00020CCC B3 A9 00 2A */ sth r29, 0x2a(r9) +/* 00013F40 00020CD0 D3 E9 00 10 */ stfs f31, 0x10(r9) +/* 00013F44 00020CD4 D3 E9 00 14 */ stfs f31, 0x14(r9) +/* 00013F48 00020CD8 D3 E9 00 18 */ stfs f31, 0x18(r9) +/* 00013F4C 00020CDC D3 E9 00 1C */ stfs f31, 0x1c(r9) +/* 00013F50 00020CE0 48 00 00 01 */ bl __builtin_vec_new +/* 00013F54 00020CE4 7C 69 1B 78 */ mr r9, r3 +/* 00013F58 00020CE8 91 3E 00 A0 */ stw r9, 0xa0(r30) +/* 00013F5C 00020CEC 38 60 00 2C */ li r3, 0x2c +/* 00013F60 00020CF0 D3 E9 00 00 */ stfs f31, 0x0(r9) +/* 00013F64 00020CF4 D3 E9 00 04 */ stfs f31, 0x4(r9) +/* 00013F68 00020CF8 D3 E9 00 08 */ stfs f31, 0x8(r9) +/* 00013F6C 00020CFC D3 E9 00 0C */ stfs f31, 0xc(r9) +/* 00013F70 00020D00 D3 E9 00 20 */ stfs f31, 0x20(r9) +/* 00013F74 00020D04 D3 C9 00 24 */ stfs f30, 0x24(r9) +/* 00013F78 00020D08 B3 A9 00 28 */ sth r29, 0x28(r9) +.L_00013F7C: +/* 00013F7C 00020D0C B3 A9 00 2A */ sth r29, 0x2a(r9) +.L_00013F80: +/* 00013F80 00020D10 D3 E9 00 10 */ stfs f31, 0x10(r9) +/* 00013F84 00020D14 D3 E9 00 14 */ stfs f31, 0x14(r9) +/* 00013F88 00020D18 D3 E9 00 18 */ stfs f31, 0x18(r9) +/* 00013F8C 00020D1C D3 E9 00 1C */ stfs f31, 0x1c(r9) +/* 00013F90 00020D20 48 00 00 01 */ bl __builtin_vec_new +/* 00013F94 00020D24 7C 69 1B 78 */ mr r9, r3 +/* 00013F98 00020D28 91 3E 00 A4 */ stw r9, 0xa4(r30) +/* 00013F9C 00020D2C 38 60 00 2C */ li r3, 0x2c +.L_00013FA0: +/* 00013FA0 00020D30 D3 E9 00 00 */ stfs f31, 0x0(r9) +/* 00013FA4 00020D34 D3 E9 00 04 */ stfs f31, 0x4(r9) +/* 00013FA8 00020D38 D3 E9 00 08 */ stfs f31, 0x8(r9) +/* 00013FAC 00020D3C D3 E9 00 0C */ stfs f31, 0xc(r9) +/* 00013FB0 00020D40 D3 E9 00 20 */ stfs f31, 0x20(r9) +/* 00013FB4 00020D44 D3 C9 00 24 */ stfs f30, 0x24(r9) +/* 00013FB8 00020D48 B3 A9 00 28 */ sth r29, 0x28(r9) +.L_00013FBC: +/* 00013FBC 00020D4C B3 A9 00 2A */ sth r29, 0x2a(r9) +/* 00013FC0 00020D50 D3 E9 00 10 */ stfs f31, 0x10(r9) +/* 00013FC4 00020D54 D3 E9 00 14 */ stfs f31, 0x14(r9) +/* 00013FC8 00020D58 D3 E9 00 18 */ stfs f31, 0x18(r9) +/* 00013FCC 00020D5C D3 E9 00 1C */ stfs f31, 0x1c(r9) +/* 00013FD0 00020D60 48 00 00 01 */ bl __builtin_vec_new +/* 00013FD4 00020D64 7C 69 1B 78 */ mr r9, r3 +/* 00013FD8 00020D68 91 3E 00 A8 */ stw r9, 0xa8(r30) +/* 00013FDC 00020D6C 38 60 00 2C */ li r3, 0x2c +/* 00013FE0 00020D70 D3 E9 00 00 */ stfs f31, 0x0(r9) +/* 00013FE4 00020D74 D3 E9 00 04 */ stfs f31, 0x4(r9) +/* 00013FE8 00020D78 D3 E9 00 08 */ stfs f31, 0x8(r9) +.L_00013FEC: +/* 00013FEC 00020D7C D3 E9 00 0C */ stfs f31, 0xc(r9) +.L_00013FF0: +/* 00013FF0 00020D80 D3 E9 00 20 */ stfs f31, 0x20(r9) +/* 00013FF4 00020D84 D3 C9 00 24 */ stfs f30, 0x24(r9) +/* 00013FF8 00020D88 B3 A9 00 28 */ sth r29, 0x28(r9) +/* 00013FFC 00020D8C B3 A9 00 2A */ sth r29, 0x2a(r9) +/* 00014000 00020D90 D3 E9 00 10 */ stfs f31, 0x10(r9) +/* 00014004 00020D94 D3 E9 00 14 */ stfs f31, 0x14(r9) +/* 00014008 00020D98 D3 E9 00 18 */ stfs f31, 0x18(r9) +/* 0001400C 00020D9C D3 E9 00 1C */ stfs f31, 0x1c(r9) +/* 00014010 00020DA0 48 00 00 01 */ bl __builtin_vec_new +/* 00014014 00020DA4 7C 69 1B 78 */ mr r9, r3 +/* 00014018 00020DA8 91 3E 00 AC */ stw r9, 0xac(r30) +/* 0001401C 00020DAC 38 60 00 84 */ li r3, 0x84 +/* 00014020 00020DB0 D3 E9 00 00 */ stfs f31, 0x0(r9) +.L_00014024: +/* 00014024 00020DB4 D3 E9 00 04 */ stfs f31, 0x4(r9) +/* 00014028 00020DB8 D3 E9 00 08 */ stfs f31, 0x8(r9) +.L_0001402C: +/* 0001402C 00020DBC D3 E9 00 0C */ stfs f31, 0xc(r9) +/* 00014030 00020DC0 D3 E9 00 20 */ stfs f31, 0x20(r9) +/* 00014034 00020DC4 D3 C9 00 24 */ stfs f30, 0x24(r9) +/* 00014038 00020DC8 B3 A9 00 28 */ sth r29, 0x28(r9) +/* 0001403C 00020DCC B3 A9 00 2A */ sth r29, 0x2a(r9) +/* 00014040 00020DD0 D3 E9 00 10 */ stfs f31, 0x10(r9) +/* 00014044 00020DD4 D3 E9 00 14 */ stfs f31, 0x14(r9) +/* 00014048 00020DD8 D3 E9 00 18 */ stfs f31, 0x18(r9) +/* 0001404C 00020DDC D3 E9 00 1C */ stfs f31, 0x1c(r9) +/* 00014050 00020DE0 48 00 00 01 */ bl __builtin_vec_new +/* 00014054 00020DE4 D3 C3 00 7C */ stfs f30, 0x7c(r3) +/* 00014058 00020DE8 B3 63 00 82 */ sth r27, 0x82(r3) +/* 0001405C 00020DEC D3 E3 00 00 */ stfs f31, 0x0(r3) +/* 00014060 00020DF0 D3 E3 00 04 */ stfs f31, 0x4(r3) +/* 00014064 00020DF4 D3 E3 00 08 */ stfs f31, 0x8(r3) +/* 00014068 00020DF8 D3 E3 00 0C */ stfs f31, 0xc(r3) +/* 0001406C 00020DFC D3 E3 00 20 */ stfs f31, 0x20(r3) +/* 00014070 00020E00 D3 C3 00 24 */ stfs f30, 0x24(r3) +/* 00014074 00020E04 B3 A3 00 28 */ sth r29, 0x28(r3) +/* 00014078 00020E08 B3 63 00 2A */ sth r27, 0x2a(r3) +/* 0001407C 00020E0C D3 E3 00 10 */ stfs f31, 0x10(r3) +/* 00014080 00020E10 D3 E3 00 14 */ stfs f31, 0x14(r3) +/* 00014084 00020E14 D3 E3 00 18 */ stfs f31, 0x18(r3) +/* 00014088 00020E18 D3 E3 00 1C */ stfs f31, 0x1c(r3) +/* 0001408C 00020E1C D3 E3 00 2C */ stfs f31, 0x2c(r3) +/* 00014090 00020E20 D3 E3 00 30 */ stfs f31, 0x30(r3) +/* 00014094 00020E24 D3 E3 00 34 */ stfs f31, 0x34(r3) +.L_00014098: +/* 00014098 00020E28 D3 E3 00 38 */ stfs f31, 0x38(r3) +/* 0001409C 00020E2C D3 E3 00 4C */ stfs f31, 0x4c(r3) +/* 000140A0 00020E30 D3 C3 00 50 */ stfs f30, 0x50(r3) +/* 000140A4 00020E34 B3 A3 00 54 */ sth r29, 0x54(r3) +/* 000140A8 00020E38 B3 63 00 56 */ sth r27, 0x56(r3) +/* 000140AC 00020E3C D3 E3 00 3C */ stfs f31, 0x3c(r3) +.L_000140B0: +/* 000140B0 00020E40 D3 E3 00 40 */ stfs f31, 0x40(r3) +/* 000140B4 00020E44 D3 E3 00 44 */ stfs f31, 0x44(r3) +/* 000140B8 00020E48 D3 E3 00 48 */ stfs f31, 0x48(r3) +.L_000140BC: +/* 000140BC 00020E4C D3 E3 00 58 */ stfs f31, 0x58(r3) +.L_000140C0: +/* 000140C0 00020E50 D3 E3 00 5C */ stfs f31, 0x5c(r3) +.L_000140C4: +/* 000140C4 00020E54 D3 E3 00 60 */ stfs f31, 0x60(r3) +/* 000140C8 00020E58 D3 E3 00 64 */ stfs f31, 0x64(r3) +/* 000140CC 00020E5C D3 E3 00 78 */ stfs f31, 0x78(r3) +/* 000140D0 00020E60 B3 A3 00 80 */ sth r29, 0x80(r3) +/* 000140D4 00020E64 D3 E3 00 68 */ stfs f31, 0x68(r3) +/* 000140D8 00020E68 D3 E3 00 6C */ stfs f31, 0x6c(r3) +/* 000140DC 00020E6C 90 7E 00 B0 */ stw r3, 0xb0(r30) +/* 000140E0 00020E70 93 BE 00 C8 */ stw r29, 0xc8(r30) +/* 000140E4 00020E74 D3 FE 00 B8 */ stfs f31, 0xb8(r30) +/* 000140E8 00020E78 93 BE 00 C4 */ stw r29, 0xc4(r30) +/* 000140EC 00020E7C 93 BE 00 BC */ stw r29, 0xbc(r30) +/* 000140F0 00020E80 93 BE 00 C0 */ stw r29, 0xc0(r30) +/* 000140F4 00020E84 D3 FE 00 B4 */ stfs f31, 0xb4(r30) +/* 000140F8 00020E88 D3 E3 00 70 */ stfs f31, 0x70(r3) +/* 000140FC 00020E8C D3 E3 00 74 */ stfs f31, 0x74(r3) +/* 00014100 00020E90 48 01 7B C5 */ bl .text+0x17BC4 +/* 00014104 00020E94 38 7E 00 CC */ addi r3, r30, 0xcc +/* 00014108 00020E98 48 00 00 01 */ bl PSMTX44Identity +/* 0001410C 00020E9C C1 9C 00 00 */ lfs f12, 0x0(r28) +/* 00014110 00020EA0 7F C3 F3 78 */ mr r3, r30 +/* 00014114 00020EA4 C1 BC 00 04 */ lfs f13, 0x4(r28) +/* 00014118 00020EA8 38 80 00 01 */ li r4, 0x1 +/* 0001411C 00020EAC C0 1C 00 08 */ lfs f0, 0x8(r28) +/* 00014120 00020EB0 38 A0 00 01 */ li r5, 0x1 +/* 00014124 00020EB4 D1 9E 01 0C */ stfs f12, 0x10c(r30) +/* 00014128 00020EB8 D1 BE 01 10 */ stfs f13, 0x110(r30) +/* 0001412C 00020EBC D0 1E 01 14 */ stfs f0, 0x114(r30) +/* 00014130 00020EC0 C1 9C 00 18 */ lfs f12, 0x18(r28) +/* 00014134 00020EC4 C0 1C 00 10 */ lfs f0, 0x10(r28) +/* 00014138 00020EC8 C1 BC 00 14 */ lfs f13, 0x14(r28) +/* 0001413C 00020ECC D0 1E 01 1C */ stfs f0, 0x11c(r30) +/* 00014140 00020ED0 D1 BE 01 20 */ stfs f13, 0x120(r30) +/* 00014144 00020ED4 D1 9E 01 24 */ stfs f12, 0x124(r30) +/* 00014148 00020ED8 48 01 4D 51 */ bl .text+0x14D50 +/* 0001414C 00020EDC 7F C3 F3 78 */ mr r3, r30 +/* 00014150 00020EE0 80 01 00 34 */ lwz r0, 0x34(r1) +/* 00014154 00020EE4 7C 08 03 A6 */ mtlr r0 +/* 00014158 00020EE8 BB 61 00 0C */ lmw r27, 0xc(r1) +/* 0001415C 00020EEC E3 C1 00 20 */ psq_l f30, 0x20(r1), 0, qr0 +/* 00014160 00020EF0 E3 E1 00 28 */ psq_l f31, 0x28(r1), 0, qr0 +/* 00014164 00020EF4 38 21 00 30 */ addi r1, r1, 0x30 +/* 00014168 00020EF8 4E 80 00 20 */ blr +.endfn __8ICEMoveriP9ICEAnchor + +# .text:0x1416C | size: 0xDC +.fn __9ICEAnchor, global +/* 0001416C 00020EFC 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00014170 00020F00 7C 08 02 A6 */ mflr r0 +/* 00014174 00020F04 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 00014178 00020F08 90 01 00 14 */ stw r0, 0x14(r1) +/* 0001417C 00020F0C 3D 20 00 00 */ lis r9, .rodata+0xBA8@ha +/* 00014180 00020F10 7C 7E 1B 78 */ mr r30, r3 +/* 00014184 00020F14 C0 09 0B A8 */ lfs f0, .rodata+0xBA8@l(r9) +/* 00014188 00020F18 39 7E 00 10 */ addi r11, r30, 0x10 +/* 0001418C 00020F1C 38 00 00 00 */ li r0, 0x0 +/* 00014190 00020F20 39 20 00 01 */ li r9, 0x1 +/* 00014194 00020F24 D0 1E 00 00 */ stfs f0, 0x0(r30) +/* 00014198 00020F28 7D 63 5B 78 */ mr r3, r11 +/* 0001419C 00020F2C D0 1E 00 04 */ stfs f0, 0x4(r30) +/* 000141A0 00020F30 D0 1E 00 08 */ stfs f0, 0x8(r30) +/* 000141A4 00020F34 D0 1E 00 0C */ stfs f0, 0xc(r30) +/* 000141A8 00020F38 D0 1E 00 10 */ stfs f0, 0x10(r30) +/* 000141AC 00020F3C D0 1E 00 14 */ stfs f0, 0x14(r30) +/* 000141B0 00020F40 D0 1E 00 18 */ stfs f0, 0x18(r30) +/* 000141B4 00020F44 D0 1E 00 1C */ stfs f0, 0x1c(r30) +/* 000141B8 00020F48 D0 0B 00 10 */ stfs f0, 0x10(r11) +/* 000141BC 00020F4C D0 0B 00 14 */ stfs f0, 0x14(r11) +/* 000141C0 00020F50 D0 0B 00 18 */ stfs f0, 0x18(r11) +/* 000141C4 00020F54 D0 0B 00 1C */ stfs f0, 0x1c(r11) +/* 000141C8 00020F58 D0 1E 00 30 */ stfs f0, 0x30(r30) +/* 000141CC 00020F5C D0 1E 00 34 */ stfs f0, 0x34(r30) +/* 000141D0 00020F60 D0 1E 00 38 */ stfs f0, 0x38(r30) +/* 000141D4 00020F64 D0 1E 00 3C */ stfs f0, 0x3c(r30) +/* 000141D8 00020F68 D0 1E 00 40 */ stfs f0, 0x40(r30) +/* 000141DC 00020F6C D0 1E 00 44 */ stfs f0, 0x44(r30) +/* 000141E0 00020F70 D0 1E 00 48 */ stfs f0, 0x48(r30) +/* 000141E4 00020F74 D0 1E 00 4C */ stfs f0, 0x4c(r30) +/* 000141E8 00020F78 D0 1E 00 50 */ stfs f0, 0x50(r30) +/* 000141EC 00020F7C D0 1E 00 54 */ stfs f0, 0x54(r30) +/* 000141F0 00020F80 D0 1E 00 58 */ stfs f0, 0x58(r30) +.L_000141F4: +/* 000141F4 00020F84 D0 1E 00 5C */ stfs f0, 0x5c(r30) +/* 000141F8 00020F88 D0 1E 00 60 */ stfs f0, 0x60(r30) +.L_000141FC: +/* 000141FC 00020F8C D0 1E 00 64 */ stfs f0, 0x64(r30) +/* 00014200 00020F90 D0 1E 00 68 */ stfs f0, 0x68(r30) +/* 00014204 00020F94 D0 1E 00 6C */ stfs f0, 0x6c(r30) +/* 00014208 00020F98 D0 1E 00 70 */ stfs f0, 0x70(r30) +/* 0001420C 00020F9C D0 1E 00 74 */ stfs f0, 0x74(r30) +.L_00014210: +/* 00014210 00020FA0 D0 1E 00 78 */ stfs f0, 0x78(r30) +/* 00014214 00020FA4 90 1E 00 7C */ stw r0, 0x7c(r30) +/* 00014218 00020FA8 D0 1E 00 80 */ stfs f0, 0x80(r30) +/* 0001421C 00020FAC 91 3E 00 88 */ stw r9, 0x88(r30) +/* 00014220 00020FB0 90 1E 00 8C */ stw r0, 0x8c(r30) +/* 00014224 00020FB4 D0 1E 00 90 */ stfs f0, 0x90(r30) +/* 00014228 00020FB8 D0 1E 00 84 */ stfs f0, 0x84(r30) +/* 0001422C 00020FBC 48 00 00 01 */ bl PSMTX44Identity +.L_00014230: +/* 00014230 00020FC0 7F C3 F3 78 */ mr r3, r30 +/* 00014234 00020FC4 80 01 00 14 */ lwz r0, 0x14(r1) +/* 00014238 00020FC8 7C 08 03 A6 */ mtlr r0 +/* 0001423C 00020FCC BB C1 00 08 */ lmw r30, 0x8(r1) +/* 00014240 00020FD0 38 21 00 10 */ addi r1, r1, 0x10 +.L_00014244: +/* 00014244 00020FD4 4E 80 00 20 */ blr +.endfn __9ICEAnchor + +# .text:0x14248 | size: 0x184 +.fn Update__9ICEAnchorfRCQ23ICE7Matrix4RCQ23ICE7Vector3T3, global +/* 00014248 00020FD8 94 21 FF C8 */ stwu r1, -0x38(r1) +/* 0001424C 00020FDC 7C 08 02 A6 */ mflr r0 +/* 00014250 00020FE0 F3 C1 00 28 */ psq_st f30, 0x28(r1), 0, qr0 +/* 00014254 00020FE4 F3 E1 00 30 */ psq_st f31, 0x30(r1), 0, qr0 +/* 00014258 00020FE8 BF A1 00 1C */ stmw r29, 0x1c(r1) +/* 0001425C 00020FEC 90 01 00 3C */ stw r0, 0x3c(r1) +/* 00014260 00020FF0 7C 7F 1B 78 */ mr r31, r3 +/* 00014264 00020FF4 7C 9E 23 78 */ mr r30, r4 +/* 00014268 00020FF8 7C BD 2B 78 */ mr r29, r5 +/* 0001426C 00020FFC 38 9E 00 30 */ addi r4, r30, 0x30 +/* 00014270 00021000 FF E0 08 90 */ fmr f31, f1 +/* 00014274 00021004 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 +/* 00014278 00021008 FF C0 08 90 */ fmr f30, f1 +/* 0001427C 0002100C 7F C3 F3 78 */ mr r3, r30 +/* 00014280 00021010 38 9F 00 10 */ addi r4, r31, 0x10 +/* 00014284 00021014 48 00 00 01 */ bl PSMTX44Copy +/* 00014288 00021018 3D 20 00 00 */ lis r9, .rodata+0xBAC@ha +.L_0001428C: +/* 0001428C 0002101C 3D 40 00 00 */ lis r10, .rodata+0xBB0@ha +/* 00014290 00021020 C1 29 0B AC */ lfs f9, .rodata+0xBAC@l(r9) +/* 00014294 00021024 3D 60 00 00 */ lis r11, .rodata+0xBB8@ha +/* 00014298 00021028 3D 20 00 00 */ lis r9, .rodata+0xBB4@ha +/* 0001429C 0002102C C0 DF 00 70 */ lfs f6, 0x70(r31) +/* 000142A0 00021030 D1 3F 00 48 */ stfs f9, 0x48(r31) +/* 000142A4 00021034 D1 3F 00 44 */ stfs f9, 0x44(r31) +/* 000142A8 00021038 D1 3F 00 40 */ stfs f9, 0x40(r31) +/* 000142AC 0002103C C1 9E 00 38 */ lfs f12, 0x38(r30) +/* 000142B0 00021040 C0 1E 00 30 */ lfs f0, 0x30(r30) +/* 000142B4 00021044 C1 BE 00 34 */ lfs f13, 0x34(r30) +/* 000142B8 00021048 D0 1F 00 00 */ stfs f0, 0x0(r31) +/* 000142BC 0002104C D1 BF 00 04 */ stfs f13, 0x4(r31) +/* 000142C0 00021050 D1 9F 00 08 */ stfs f12, 0x8(r31) +/* 000142C4 00021054 C0 1D 00 00 */ lfs f0, 0x0(r29) +/* 000142C8 00021058 C1 BD 00 04 */ lfs f13, 0x4(r29) +/* 000142CC 0002105C C1 9D 00 08 */ lfs f12, 0x8(r29) +/* 000142D0 00021060 D0 1F 00 50 */ stfs f0, 0x50(r31) +/* 000142D4 00021064 D1 BF 00 54 */ stfs f13, 0x54(r31) +/* 000142D8 00021068 D1 9F 00 58 */ stfs f12, 0x58(r31) +/* 000142DC 0002106C C0 1D 00 04 */ lfs f0, 0x4(r29) +/* 000142E0 00021070 C1 BD 00 00 */ lfs f13, 0x0(r29) +/* 000142E4 00021074 EC 00 00 32 */ fmuls f0, f0, f0 +/* 000142E8 00021078 C1 9D 00 08 */ lfs f12, 0x8(r29) +/* 000142EC 0002107C ED AD 03 7A */ fmadds f13, f13, f13, f0 +/* 000142F0 00021080 C1 6A 0B B0 */ lfs f11, .rodata+0xBB0@l(r10) +/* 000142F4 00021084 ED 4C 6B 3A */ fmadds f10, f12, f12, f13 +/* 000142F8 00021088 C1 09 0B B4 */ lfs f8, .rodata+0xBB4@l(r9) +/* 000142FC 0002108C C0 EB 0B B8 */ lfs f7, .rodata+0xBB8@l(r11) +/* 00014300 00021090 FC 0A 58 00 */ fcmpu cr0, f10, f11 +/* 00014304 00021094 4C 62 03 82 */ cror un, eq, lt +/* 00014308 00021098 41 83 43 38 */ bso .L_00018640 +/* 0001430C 0002109C FD 80 50 34 */ frsqrte f12, f10 +/* 00014310 000210A0 EC 0C 03 32 */ fmuls f0, f12, f12 +/* 00014314 000210A4 ED AC 02 32 */ fmuls f13, f12, f8 +/* 00014318 000210A8 EC 0A 38 3C */ fnmsubs f0, f10, f0, f7 +/* 0001431C 000210AC ED 80 63 7A */ fmadds f12, f0, f13, f12 +/* 00014320 000210B0 EC 0C 03 32 */ fmuls f0, f12, f12 +/* 00014324 000210B4 ED AC 02 32 */ fmuls f13, f12, f8 +/* 00014328 000210B8 EC 0A 38 3C */ fnmsubs f0, f10, f0, f7 +/* 0001432C 000210BC ED 80 63 7A */ fmadds f12, f0, f13, f12 +/* 00014330 000210C0 ED 8C 02 B2 */ fmuls f12, f12, f10 +/* 00014334 000210C4 48 01 43 3C */ b .text+0x1433C +/* 00014338 000210C8 FD 80 48 90 */ fmr f12, f9 +/* 0001433C 000210CC 3D 20 00 00 */ lis r9, .rodata+0xBAC@ha +/* 00014340 000210D0 D1 9F 00 70 */ stfs f12, 0x70(r31) +/* 00014344 000210D4 C1 69 0B AC */ lfs f11, .rodata+0xBAC@l(r9) +.L_00014348: +/* 00014348 000210D8 FC 1F 58 00 */ fcmpu cr0, f31, f11 +/* 0001434C 000210DC 4C 62 03 82 */ cror un, eq, lt +/* 00014350 000210E0 41 83 43 9C */ bso .L_000186EC +/* 00014354 000210E4 EC 1E F8 24 */ fdivs f0, f30, f31 +/* 00014358 000210E8 3D 20 00 00 */ lis r9, .rodata+0xBBC@ha +/* 0001435C 000210EC C1 A9 0B BC */ lfs f13, .rodata+0xBBC@l(r9) +/* 00014360 000210F0 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00014364 000210F4 4C 62 0B 82 */ cror un, eq, gt +/* 00014368 000210F8 41 83 43 9C */ bso .L_00018704 +/* 0001436C 000210FC EC 0C 30 28 */ fsubs f0, f12, f6 +/* 00014370 00021100 39 21 00 08 */ addi r9, r1, 0x8 +/* 00014374 00021104 EC 00 F8 24 */ fdivs f0, f0, f31 +/* 00014378 00021108 D1 61 00 0C */ stfs f11, 0xc(r1) +/* 0001437C 0002110C 38 9F 00 10 */ addi r4, r31, 0x10 +.L_00014380: +/* 00014380 00021110 7D 25 4B 78 */ mr r5, r9 +/* 00014384 00021114 38 7F 00 60 */ addi r3, r31, 0x60 +/* 00014388 00021118 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 0001438C 0002111C D1 69 00 08 */ stfs f11, 0x8(r9) +/* 00014390 00021120 D1 61 00 14 */ stfs f11, 0x14(r1) +/* 00014394 00021124 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 +/* 00014398 00021128 48 01 43 B0 */ b .text+0x143B0 +/* 0001439C 0002112C 3D 20 00 00 */ lis r9, .rodata+0xBAC@ha +/* 000143A0 00021130 C0 09 0B AC */ lfs f0, .rodata+0xBAC@l(r9) +/* 000143A4 00021134 D0 1F 00 68 */ stfs f0, 0x68(r31) +/* 000143A8 00021138 D0 1F 00 60 */ stfs f0, 0x60(r31) +/* 000143AC 0002113C D0 1F 00 64 */ stfs f0, 0x64(r31) +/* 000143B0 00021140 80 01 00 3C */ lwz r0, 0x3c(r1) +/* 000143B4 00021144 7C 08 03 A6 */ mtlr r0 +/* 000143B8 00021148 BB A1 00 1C */ lmw r29, 0x1c(r1) +/* 000143BC 0002114C E3 C1 00 28 */ psq_l f30, 0x28(r1), 0, qr0 +/* 000143C0 00021150 E3 E1 00 30 */ psq_l f31, 0x30(r1), 0, qr0 +/* 000143C4 00021154 38 21 00 38 */ addi r1, r1, 0x38 +/* 000143C8 00021158 4E 80 00 20 */ blr +.endfn Update__9ICEAnchorfRCQ23ICE7Matrix4RCQ23ICE7Vector3T3 + +# .text:0x143CC | size: 0x48 +# ICE::Cubic1D::MakeCoeffs +.fn MakeCoeffs__Q23ICE7Cubic1D, global +/* 000143CC 0002115C C1 63 00 00 */ lfs f11, 0x0(r3) +/* 000143D0 00021160 3D 20 00 00 */ lis r9, .rodata+0xBC0@ha +/* 000143D4 00021164 C1 A3 00 08 */ lfs f13, 0x8(r3) +/* 000143D8 00021168 C0 03 00 04 */ lfs f0, 0x4(r3) +/* 000143DC 0002116C ED AD 58 28 */ fsubs f13, f13, f11 +/* 000143E0 00021170 C1 83 00 0C */ lfs f12, 0xc(r3) +/* 000143E4 00021174 C1 09 0B C0 */ lfs f8, .rodata+0xBC0@l(r9) +/* 000143E8 00021178 ED 4D 68 2A */ fadds f10, f13, f13 +/* 000143EC 0002117C ED 20 00 2A */ fadds f9, f0, f0 +/* 000143F0 00021180 D0 03 00 18 */ stfs f0, 0x18(r3) +/* 000143F4 00021184 ED AD 62 38 */ fmsubs f13, f13, f8, f12 +/* 000143F8 00021188 D1 63 00 1C */ stfs f11, 0x1c(r3) +/* 000143FC 0002118C EC 00 60 2A */ fadds f0, f0, f12 +/* 00014400 00021190 EC 00 50 28 */ fsubs f0, f0, f10 +/* 00014404 00021194 ED AD 48 28 */ fsubs f13, f13, f9 +/* 00014408 00021198 D0 03 00 10 */ stfs f0, 0x10(r3) +/* 0001440C 0002119C D1 A3 00 14 */ stfs f13, 0x14(r3) +/* 00014410 000211A0 4E 80 00 20 */ blr +.endfn MakeCoeffs__Q23ICE7Cubic1D + +# .text:0x14414 | size: 0x20 +.fn GetVal__CQ23ICE7Cubic1Df, global +/* 00014414 000211A4 C0 03 00 10 */ lfs f0, 0x10(r3) +/* 00014418 000211A8 C1 A3 00 14 */ lfs f13, 0x14(r3) +/* 0001441C 000211AC C1 63 00 18 */ lfs f11, 0x18(r3) +/* 00014420 000211B0 EC 00 68 7A */ fmadds f0, f0, f1, f13 +/* 00014424 000211B4 C1 83 00 1C */ lfs f12, 0x1c(r3) +/* 00014428 000211B8 EC 00 58 7A */ fmadds f0, f0, f1, f11 +/* 0001442C 000211BC EC 20 60 7A */ fmadds f1, f0, f1, f12 +/* 00014430 000211C0 4E 80 00 20 */ blr +.endfn GetVal__CQ23ICE7Cubic1Df + +# .text:0x14434 | size: 0x28 +.fn GetdVal__CQ23ICE7Cubic1Df, global +/* 00014434 000211C4 3D 20 00 00 */ lis r9, .rodata+0xBC4@ha +/* 00014438 000211C8 C1 A3 00 10 */ lfs f13, 0x10(r3) +/* 0001443C 000211CC C1 69 0B C4 */ lfs f11, .rodata+0xBC4@l(r9) +/* 00014440 000211D0 C0 03 00 14 */ lfs f0, 0x14(r3) +/* 00014444 000211D4 ED AD 02 F2 */ fmuls f13, f13, f11 +.L_00014448: +/* 00014448 000211D8 C1 83 00 18 */ lfs f12, 0x18(r3) +/* 0001444C 000211DC EC 00 00 2A */ fadds f0, f0, f0 +/* 00014450 000211E0 ED AD 00 7A */ fmadds f13, f13, f1, f0 +/* 00014454 000211E4 EC 2D 60 7A */ fmadds f1, f13, f1, f12 +/* 00014458 000211E8 4E 80 00 20 */ blr +.endfn GetdVal__CQ23ICE7Cubic1Df + +# .text:0x1445C | size: 0x20 +.fn GetddVal__CQ23ICE7Cubic1Df, global +/* 0001445C 000211EC 3D 20 00 00 */ lis r9, .rodata+0xBC8@ha +/* 00014460 000211F0 C1 A3 00 14 */ lfs f13, 0x14(r3) +/* 00014464 000211F4 C1 89 0B C8 */ lfs f12, .rodata+0xBC8@l(r9) +/* 00014468 000211F8 C0 03 00 10 */ lfs f0, 0x10(r3) +/* 0001446C 000211FC ED AD 68 2A */ fadds f13, f13, f13 +/* 00014470 00021200 EC 00 03 32 */ fmuls f0, f0, f12 +/* 00014474 00021204 EC 20 68 7A */ fmadds f1, f0, f1, f13 +/* 00014478 00021208 4E 80 00 20 */ blr +.endfn GetddVal__CQ23ICE7Cubic1Df + +# .text:0x1447C | size: 0x8 +.fn GetValDesired__CQ23ICE7Cubic1D, global +/* 0001447C 0002120C C0 23 00 08 */ lfs f1, 0x8(r3) +/* 00014480 00021210 4E 80 00 20 */ blr +.endfn GetValDesired__CQ23ICE7Cubic1D + +# .text:0x14484 | size: 0x44 +.fn GetDerivative__CQ23ICE7Cubic1Df, global +/* 00014484 00021214 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00014488 00021218 7C 08 02 A6 */ mflr r0 +/* 0001448C 0002121C F3 E1 00 08 */ psq_st f31, 0x8(r1), 0, qr0 +.L_00014490: +/* 00014490 00021220 90 01 00 14 */ stw r0, 0x14(r1) +/* 00014494 00021224 7C 6B 1B 78 */ mr r11, r3 +/* 00014498 00021228 3D 20 00 00 */ lis r9, .rodata+0xBCC@ha +/* 0001449C 0002122C C3 E9 0B CC */ lfs f31, .rodata+0xBCC@l(r9) +/* 000144A0 00021230 C0 0B 00 24 */ lfs f0, 0x24(r11) +/* 000144A4 00021234 EF FF 00 24 */ fdivs f31, f31, f0 +/* 000144A8 00021238 EC 21 07 F2 */ fmuls f1, f1, f31 +/* 000144AC 0002123C 48 01 44 35 */ bl .text+0x14434 +.L_000144B0: +/* 000144B0 00021240 EC 21 07 F2 */ fmuls f1, f1, f31 +/* 000144B4 00021244 80 01 00 14 */ lwz r0, 0x14(r1) +/* 000144B8 00021248 7C 08 03 A6 */ mtlr r0 +.L_000144BC: +/* 000144BC 0002124C E3 E1 00 08 */ psq_l f31, 0x8(r1), 0, qr0 +/* 000144C0 00021250 38 21 00 10 */ addi r1, r1, 0x10 +/* 000144C4 00021254 4E 80 00 20 */ blr +.endfn GetDerivative__CQ23ICE7Cubic1Df + +# .text:0x144C8 | size: 0x48 +.fn GetSecondDerivative__CQ23ICE7Cubic1Df, global +/* 000144C8 00021258 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 000144CC 0002125C 7C 08 02 A6 */ mflr r0 +/* 000144D0 00021260 F3 E1 00 08 */ psq_st f31, 0x8(r1), 0, qr0 +/* 000144D4 00021264 90 01 00 14 */ stw r0, 0x14(r1) +/* 000144D8 00021268 7C 6B 1B 78 */ mr r11, r3 +/* 000144DC 0002126C 3D 20 00 00 */ lis r9, .rodata+0xBD0@ha +/* 000144E0 00021270 C3 E9 0B D0 */ lfs f31, .rodata+0xBD0@l(r9) +/* 000144E4 00021274 C0 0B 00 24 */ lfs f0, 0x24(r11) +/* 000144E8 00021278 EF FF 00 24 */ fdivs f31, f31, f0 +/* 000144EC 0002127C EC 21 07 F2 */ fmuls f1, f1, f31 +/* 000144F0 00021280 48 01 44 5D */ bl .text+0x1445C +/* 000144F4 00021284 EF FF 07 F2 */ fmuls f31, f31, f31 +.L_000144F8: +/* 000144F8 00021288 EC 21 07 F2 */ fmuls f1, f1, f31 +/* 000144FC 0002128C 80 01 00 14 */ lwz r0, 0x14(r1) +/* 00014500 00021290 7C 08 03 A6 */ mtlr r0 +.L_00014504: +/* 00014504 00021294 E3 E1 00 08 */ psq_l f31, 0x8(r1), 0, qr0 +/* 00014508 00021298 38 21 00 10 */ addi r1, r1, 0x10 +/* 0001450C 0002129C 4E 80 00 20 */ blr +.endfn GetSecondDerivative__CQ23ICE7Cubic1Df + +# .text:0x14510 | size: 0x60 +.fn ClampDerivative__Q23ICE7Cubic1Df, global +/* 00014510 000212A0 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 00014514 000212A4 7C 08 02 A6 */ mflr r0 +/* 00014518 000212A8 F3 E1 00 10 */ psq_st f31, 0x10(r1), 0, qr0 +/* 0001451C 000212AC 93 E1 00 0C */ stw r31, 0xc(r1) +/* 00014520 000212B0 90 01 00 1C */ stw r0, 0x1c(r1) +/* 00014524 000212B4 7C 7F 1B 78 */ mr r31, r3 +.L_00014528: +/* 00014528 000212B8 FF E0 08 90 */ fmr f31, f1 +/* 0001452C 000212BC C0 3F 00 24 */ lfs f1, 0x24(r31) +/* 00014530 000212C0 48 01 44 85 */ bl .text+0x14484 +/* 00014534 000212C4 FC 00 0A 10 */ fabs f0, f1 +/* 00014538 000212C8 FC 00 F8 00 */ fcmpu cr0, f0, f31 +/* 0001453C 000212CC 4C 62 03 82 */ cror un, eq, lt +/* 00014540 000212D0 41 83 45 58 */ bso .L_00018A98 +/* 00014544 000212D4 EC 00 08 24 */ fdivs f0, f0, f1 +/* 00014548 000212D8 C1 BF 00 24 */ lfs f13, 0x24(r31) +/* 0001454C 000212DC EC 00 07 F2 */ fmuls f0, f0, f31 +/* 00014550 000212E0 EC 00 03 72 */ fmuls f0, f0, f13 +/* 00014554 000212E4 D0 1F 00 0C */ stfs f0, 0xc(r31) +.L_00014558: +/* 00014558 000212E8 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0001455C 000212EC 7C 08 03 A6 */ mtlr r0 +/* 00014560 000212F0 83 E1 00 0C */ lwz r31, 0xc(r1) +/* 00014564 000212F4 E3 E1 00 10 */ psq_l f31, 0x10(r1), 0, qr0 +.L_00014568: +/* 00014568 000212F8 38 21 00 18 */ addi r1, r1, 0x18 +/* 0001456C 000212FC 4E 80 00 20 */ blr +.endfn ClampDerivative__Q23ICE7Cubic1Df + +# .text:0x14570 | size: 0xD4 +.fn ClampSecondDerivative__Q23ICE7Cubic1Df, global +/* 00014570 00021300 94 21 FF D8 */ stwu r1, -0x28(r1) +/* 00014574 00021304 7C 08 02 A6 */ mflr r0 +/* 00014578 00021308 F3 A1 00 10 */ psq_st f29, 0x10(r1), 0, qr0 +/* 0001457C 0002130C F3 C1 00 18 */ psq_st f30, 0x18(r1), 0, qr0 +/* 00014580 00021310 F3 E1 00 20 */ psq_st f31, 0x20(r1), 0, qr0 +/* 00014584 00021314 93 E1 00 0C */ stw r31, 0xc(r1) +/* 00014588 00021318 90 01 00 2C */ stw r0, 0x2c(r1) +/* 0001458C 0002131C 3D 20 00 00 */ lis r9, .rodata+0xBD4@ha +/* 00014590 00021320 FF E0 08 90 */ fmr f31, f1 +/* 00014594 00021324 7C 7F 1B 78 */ mr r31, r3 +/* 00014598 00021328 C0 29 0B D4 */ lfs f1, .rodata+0xBD4@l(r9) +/* 0001459C 0002132C 48 01 44 C9 */ bl .text+0x144C8 +/* 000145A0 00021330 FF C0 08 90 */ fmr f30, f1 +/* 000145A4 00021334 7F E3 FB 78 */ mr r3, r31 +/* 000145A8 00021338 C0 3F 00 24 */ lfs f1, 0x24(r31) +/* 000145AC 0002133C FF A0 F2 10 */ fabs f29, f30 +/* 000145B0 00021340 48 01 44 C9 */ bl .text+0x144C8 +/* 000145B4 00021344 38 00 00 00 */ li r0, 0x0 +/* 000145B8 00021348 FD A0 0A 10 */ fabs f13, f1 +/* 000145BC 0002134C FC 1D F8 00 */ fcmpu cr0, f29, f31 +/* 000145C0 00021350 4C 62 03 82 */ cror un, eq, lt +/* 000145C4 00021354 41 83 45 D4 */ bso .L_00018B98 +/* 000145C8 00021358 EC 1D F0 24 */ fdivs f0, f29, f30 +/* 000145CC 0002135C 38 00 00 01 */ li r0, 0x1 +/* 000145D0 00021360 EF C0 07 F2 */ fmuls f30, f0, f31 +/* 000145D4 00021364 FC 0D F8 00 */ fcmpu cr0, f13, f31 +.L_000145D8: +/* 000145D8 00021368 4C 62 03 82 */ cror un, eq, lt +/* 000145DC 0002136C 41 83 45 EC */ bso .L_00018BC8 +/* 000145E0 00021370 EC 0D 08 24 */ fdivs f0, f13, f1 +/* 000145E4 00021374 38 00 00 01 */ li r0, 0x1 +.L_000145E8: +/* 000145E8 00021378 EC 20 07 F2 */ fmuls f1, f0, f31 +/* 000145EC 0002137C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000145F0 00021380 41 82 46 24 */ beq .L_00018C14 +/* 000145F4 00021384 C0 1F 00 24 */ lfs f0, 0x24(r31) +/* 000145F8 00021388 3D 20 00 00 */ lis r9, .rodata+0xBD8@ha +/* 000145FC 0002138C 3D 60 00 00 */ lis r11, .rodata+0xBDC@ha +/* 00014600 00021390 C1 69 0B D8 */ lfs f11, .rodata+0xBD8@l(r9) +/* 00014604 00021394 EC 00 00 32 */ fmuls f0, f0, f0 +/* 00014608 00021398 C1 8B 0B DC */ lfs f12, .rodata+0xBDC@l(r11) +/* 0001460C 0002139C ED BE 00 32 */ fmuls f13, f30, f0 +/* 00014610 000213A0 EC 01 68 38 */ fmsubs f0, f1, f0, f13 +/* 00014614 000213A4 EC 00 02 F2 */ fmuls f0, f0, f11 +.L_00014618: +/* 00014618 000213A8 ED AD 03 32 */ fmuls f13, f13, f12 +/* 0001461C 000213AC D0 1F 00 10 */ stfs f0, 0x10(r31) +/* 00014620 000213B0 D1 BF 00 14 */ stfs f13, 0x14(r31) +/* 00014624 000213B4 80 01 00 2C */ lwz r0, 0x2c(r1) +.L_00014628: +/* 00014628 000213B8 7C 08 03 A6 */ mtlr r0 +/* 0001462C 000213BC 83 E1 00 0C */ lwz r31, 0xc(r1) +/* 00014630 000213C0 E3 A1 00 10 */ psq_l f29, 0x10(r1), 0, qr0 +/* 00014634 000213C4 E3 C1 00 18 */ psq_l f30, 0x18(r1), 0, qr0 +/* 00014638 000213C8 E3 E1 00 20 */ psq_l f31, 0x20(r1), 0, qr0 +/* 0001463C 000213CC 38 21 00 28 */ addi r1, r1, 0x28 +/* 00014640 000213D0 4E 80 00 20 */ blr +.endfn ClampSecondDerivative__Q23ICE7Cubic1Df + +# .text:0x14644 | size: 0x144 +.fn Update__Q23ICE7Cubic1Dfff, global +/* 00014644 000213D4 94 21 FF D8 */ stwu r1, -0x28(r1) +/* 00014648 000213D8 7C 08 02 A6 */ mflr r0 +/* 0001464C 000213DC F3 A1 00 10 */ psq_st f29, 0x10(r1), 0, qr0 +/* 00014650 000213E0 F3 C1 00 18 */ psq_st f30, 0x18(r1), 0, qr0 +/* 00014654 000213E4 F3 E1 00 20 */ psq_st f31, 0x20(r1), 0, qr0 +/* 00014658 000213E8 93 E1 00 0C */ stw r31, 0xc(r1) +/* 0001465C 000213EC 90 01 00 2C */ stw r0, 0x2c(r1) +/* 00014660 000213F0 7C 7F 1B 78 */ mr r31, r3 +/* 00014664 000213F4 FF A0 08 90 */ fmr f29, f1 +/* 00014668 000213F8 A8 1F 00 28 */ lha r0, 0x28(r31) +/* 0001466C 000213FC FC 20 10 90 */ fmr f1, f2 +/* 00014670 00021400 FF C0 18 90 */ fmr f30, f3 +/* 00014674 00021404 2C 00 00 01 */ cmpwi r0, 0x1 +/* 00014678 00021408 41 82 46 DC */ beq .L_00018D54 +/* 0001467C 0002140C 40 81 47 68 */ ble .L_00018DE4 +/* 00014680 00021410 2C 00 00 02 */ cmpwi r0, 0x2 +/* 00014684 00021414 40 82 47 68 */ bne .L_00018DEC +/* 00014688 00021418 3D 20 00 00 */ lis r9, .rodata+0xBE0@ha +/* 0001468C 0002141C A8 1F 00 2A */ lha r0, 0x2a(r31) +/* 00014690 00021420 C3 E9 0B E0 */ lfs f31, .rodata+0xBE0@l(r9) +/* 00014694 00021424 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00014698 00021428 D3 FF 00 20 */ stfs f31, 0x20(r31) +/* 0001469C 0002142C 40 82 46 A8 */ bne .L_00018D44 +/* 000146A0 00021430 38 00 00 01 */ li r0, 0x1 +/* 000146A4 00021434 B0 1F 00 28 */ sth r0, 0x28(r31) +/* 000146A8 00021438 FC 01 F8 00 */ fcmpu cr0, f1, f31 +/* 000146AC 0002143C 4C 62 03 82 */ cror un, eq, lt +/* 000146B0 00021440 41 83 46 BC */ bso .L_00018D6C +/* 000146B4 00021444 7F E3 FB 78 */ mr r3, r31 +/* 000146B8 00021448 48 01 45 11 */ bl .text+0x14510 +/* 000146BC 0002144C 7F E3 FB 78 */ mr r3, r31 +.L_000146C0: +/* 000146C0 00021450 48 01 43 CD */ bl .text+0x143CC +/* 000146C4 00021454 FC 1E F8 00 */ fcmpu cr0, f30, f31 +.L_000146C8: +/* 000146C8 00021458 4C 62 03 82 */ cror un, eq, lt +/* 000146CC 0002145C 41 83 46 DC */ bso .L_00018DA8 +/* 000146D0 00021460 FC 20 F0 90 */ fmr f1, f30 +/* 000146D4 00021464 7F E3 FB 78 */ mr r3, r31 +.L_000146D8: +/* 000146D8 00021468 48 01 45 71 */ bl .text+0x14570 +/* 000146DC 0002146C 3D 20 00 00 */ lis r9, .rodata+0xBE0@ha +/* 000146E0 00021470 C0 3F 00 24 */ lfs f1, 0x24(r31) +/* 000146E4 00021474 C0 09 0B E0 */ lfs f0, .rodata+0xBE0@l(r9) +/* 000146E8 00021478 FC 01 00 00 */ fcmpu cr0, f1, f0 +/* 000146EC 0002147C 4C 62 03 82 */ cror un, eq, lt +/* 000146F0 00021480 41 83 47 04 */ bso .L_00018DF4 +/* 000146F4 00021484 ED BD 08 24 */ fdivs f13, f29, f1 +/* 000146F8 00021488 C0 1F 00 20 */ lfs f0, 0x20(r31) +/* 000146FC 0002148C EC 00 68 2A */ fadds f0, f0, f13 +/* 00014700 00021490 48 01 47 0C */ b .text+0x1470C +/* 00014704 00021494 3D 20 00 00 */ lis r9, .rodata+0xBE4@ha +/* 00014708 00021498 C0 09 0B E4 */ lfs f0, .rodata+0xBE4@l(r9) +/* 0001470C 0002149C D0 1F 00 20 */ stfs f0, 0x20(r31) +/* 00014710 000214A0 3D 20 00 00 */ lis r9, .rodata+0xBE4@ha +/* 00014714 000214A4 C0 1F 00 20 */ lfs f0, 0x20(r31) +/* 00014718 000214A8 C1 89 0B E4 */ lfs f12, .rodata+0xBE4@l(r9) +/* 0001471C 000214AC FC 00 60 00 */ fcmpu cr0, f0, f12 +/* 00014720 000214B0 4C 62 03 82 */ cror un, eq, lt +/* 00014724 000214B4 41 83 47 44 */ bso .L_00018E68 +/* 00014728 000214B8 C0 1F 00 08 */ lfs f0, 0x8(r31) +/* 0001472C 000214BC 38 00 00 00 */ li r0, 0x0 +/* 00014730 000214C0 C1 BF 00 0C */ lfs f13, 0xc(r31) +/* 00014734 000214C4 D1 9F 00 20 */ stfs f12, 0x20(r31) +/* 00014738 000214C8 D0 1F 00 00 */ stfs f0, 0x0(r31) +/* 0001473C 000214CC D1 BF 00 04 */ stfs f13, 0x4(r31) +/* 00014740 000214D0 B0 1F 00 28 */ sth r0, 0x28(r31) +/* 00014744 000214D4 C3 FF 00 20 */ lfs f31, 0x20(r31) +/* 00014748 000214D8 7F E3 FB 78 */ mr r3, r31 +/* 0001474C 000214DC FC 20 F8 90 */ fmr f1, f31 +/* 00014750 000214E0 48 01 44 15 */ bl .text+0x14414 +/* 00014754 000214E4 D0 3F 00 00 */ stfs f1, 0x0(r31) +/* 00014758 000214E8 7F E3 FB 78 */ mr r3, r31 +/* 0001475C 000214EC FC 20 F8 90 */ fmr f1, f31 +/* 00014760 000214F0 48 01 44 35 */ bl .text+0x14434 +/* 00014764 000214F4 D0 3F 00 04 */ stfs f1, 0x4(r31) +.L_00014768: +/* 00014768 000214F8 80 01 00 2C */ lwz r0, 0x2c(r1) +/* 0001476C 000214FC 7C 08 03 A6 */ mtlr r0 +/* 00014770 00021500 83 E1 00 0C */ lwz r31, 0xc(r1) +/* 00014774 00021504 E3 A1 00 10 */ psq_l f29, 0x10(r1), 0, qr0 +.L_00014778: +/* 00014778 00021508 E3 C1 00 18 */ psq_l f30, 0x18(r1), 0, qr0 +/* 0001477C 0002150C E3 E1 00 20 */ psq_l f31, 0x20(r1), 0, qr0 +/* 00014780 00021510 38 21 00 28 */ addi r1, r1, 0x28 +/* 00014784 00021514 4E 80 00 20 */ blr +.endfn Update__Q23ICE7Cubic1Dfff + +# .text:0x14788 | size: 0x58 +.fn SetVal__Q23ICE7Cubic3DPCQ23ICE7Vector3, global +/* 00014788 00021518 C0 04 00 00 */ lfs f0, 0x0(r4) +/* 0001478C 0002151C C1 A3 00 08 */ lfs f13, 0x8(r3) +/* 00014790 00021520 C1 64 00 08 */ lfs f11, 0x8(r4) +/* 00014794 00021524 C1 84 00 04 */ lfs f12, 0x4(r4) +/* 00014798 00021528 FC 00 68 00 */ fcmpu cr0, f0, f13 +.L_0001479C: +/* 0001479C 0002152C D0 03 00 00 */ stfs f0, 0x0(r3) +.L_000147A0: +/* 000147A0 00021530 41 82 47 AC */ beq .L_00018F4C +/* 000147A4 00021534 38 00 00 02 */ li r0, 0x2 +.L_000147A8: +/* 000147A8 00021538 B0 03 00 28 */ sth r0, 0x28(r3) +.L_000147AC: +/* 000147AC 0002153C C0 03 00 34 */ lfs f0, 0x34(r3) +/* 000147B0 00021540 D1 83 00 2C */ stfs f12, 0x2c(r3) +/* 000147B4 00021544 FC 0C 00 00 */ fcmpu cr0, f12, f0 +/* 000147B8 00021548 41 82 47 C4 */ beq .L_00018F7C +/* 000147BC 0002154C 38 00 00 02 */ li r0, 0x2 +/* 000147C0 00021550 B0 03 00 54 */ sth r0, 0x54(r3) +/* 000147C4 00021554 C0 03 00 60 */ lfs f0, 0x60(r3) +/* 000147C8 00021558 D1 63 00 58 */ stfs f11, 0x58(r3) +/* 000147CC 0002155C FC 0B 00 00 */ fcmpu cr0, f11, f0 +/* 000147D0 00021560 4D 82 00 20 */ beqlr +/* 000147D4 00021564 38 00 00 02 */ li r0, 0x2 +/* 000147D8 00021568 B0 03 00 80 */ sth r0, 0x80(r3) +/* 000147DC 0002156C 4E 80 00 20 */ blr +.endfn SetVal__Q23ICE7Cubic3DPCQ23ICE7Vector3 + +# .text:0x147E0 | size: 0x58 +.fn SetdVal__Q23ICE7Cubic3DPCQ23ICE7Vector3, global +/* 000147E0 00021570 C0 04 00 00 */ lfs f0, 0x0(r4) +/* 000147E4 00021574 C1 A3 00 0C */ lfs f13, 0xc(r3) +/* 000147E8 00021578 C1 64 00 08 */ lfs f11, 0x8(r4) +/* 000147EC 0002157C C1 84 00 04 */ lfs f12, 0x4(r4) +/* 000147F0 00021580 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 000147F4 00021584 D0 03 00 04 */ stfs f0, 0x4(r3) +/* 000147F8 00021588 41 82 48 04 */ beq Init__10ICEManager +/* 000147FC 0002158C 38 00 00 02 */ li r0, 0x2 +/* 00014800 00021590 B0 03 00 28 */ sth r0, 0x28(r3) +/* 00014804 00021594 C0 03 00 38 */ lfs f0, 0x38(r3) +/* 00014808 00021598 D1 83 00 30 */ stfs f12, 0x30(r3) +/* 0001480C 0002159C FC 0C 00 00 */ fcmpu cr0, f12, f0 +/* 00014810 000215A0 41 82 48 1C */ beq .L_0001902C +/* 00014814 000215A4 38 00 00 02 */ li r0, 0x2 +/* 00014818 000215A8 B0 03 00 54 */ sth r0, 0x54(r3) +/* 0001481C 000215AC C0 03 00 64 */ lfs f0, 0x64(r3) +/* 00014820 000215B0 D1 63 00 5C */ stfs f11, 0x5c(r3) +/* 00014824 000215B4 FC 0B 00 00 */ fcmpu cr0, f11, f0 +/* 00014828 000215B8 4D 82 00 20 */ beqlr +/* 0001482C 000215BC 38 00 00 02 */ li r0, 0x2 +/* 00014830 000215C0 B0 03 00 80 */ sth r0, 0x80(r3) +/* 00014834 000215C4 4E 80 00 20 */ blr +.endfn SetdVal__Q23ICE7Cubic3DPCQ23ICE7Vector3 + +# .text:0x14838 | size: 0x58 +.fn SetValDesired__Q23ICE7Cubic3DPCQ23ICE7Vector3, global +/* 00014838 000215C8 C0 04 00 00 */ lfs f0, 0x0(r4) +/* 0001483C 000215CC C1 A3 00 00 */ lfs f13, 0x0(r3) +/* 00014840 000215D0 C1 64 00 08 */ lfs f11, 0x8(r4) +/* 00014844 000215D4 C1 84 00 04 */ lfs f12, 0x4(r4) +/* 00014848 000215D8 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 0001484C 000215DC D0 03 00 08 */ stfs f0, 0x8(r3) +/* 00014850 000215E0 41 82 48 5C */ beq .L_000190AC +/* 00014854 000215E4 38 00 00 02 */ li r0, 0x2 +/* 00014858 000215E8 B0 03 00 28 */ sth r0, 0x28(r3) +/* 0001485C 000215EC C0 03 00 2C */ lfs f0, 0x2c(r3) +/* 00014860 000215F0 D1 83 00 34 */ stfs f12, 0x34(r3) +/* 00014864 000215F4 FC 0C 00 00 */ fcmpu cr0, f12, f0 +/* 00014868 000215F8 41 82 48 74 */ beq .L_000190DC +/* 0001486C 000215FC 38 00 00 02 */ li r0, 0x2 +/* 00014870 00021600 B0 03 00 54 */ sth r0, 0x54(r3) +/* 00014874 00021604 C0 03 00 58 */ lfs f0, 0x58(r3) +/* 00014878 00021608 D1 63 00 60 */ stfs f11, 0x60(r3) +/* 0001487C 0002160C FC 0B 00 00 */ fcmpu cr0, f11, f0 +/* 00014880 00021610 4D 82 00 20 */ beqlr +/* 00014884 00021614 38 00 00 02 */ li r0, 0x2 +/* 00014888 00021618 B0 03 00 80 */ sth r0, 0x80(r3) +/* 0001488C 0002161C 4E 80 00 20 */ blr +.endfn SetValDesired__Q23ICE7Cubic3DPCQ23ICE7Vector3 + +# .text:0x14890 | size: 0x1C +.fn SetdValDesired__Q23ICE7Cubic3DPCQ23ICE7Vector3, global +/* 00014890 00021620 C0 04 00 08 */ lfs f0, 0x8(r4) +/* 00014894 00021624 C1 A4 00 00 */ lfs f13, 0x0(r4) +.L_00014898: +/* 00014898 00021628 C1 84 00 04 */ lfs f12, 0x4(r4) +/* 0001489C 0002162C D0 03 00 64 */ stfs f0, 0x64(r3) +.L_000148A0: +/* 000148A0 00021630 D1 A3 00 0C */ stfs f13, 0xc(r3) +.L_000148A4: +/* 000148A4 00021634 D1 83 00 38 */ stfs f12, 0x38(r3) +/* 000148A8 00021638 4E 80 00 20 */ blr +.endfn SetdValDesired__Q23ICE7Cubic3DPCQ23ICE7Vector3 + +# .text:0x148AC | size: 0x1C +.fn GetVal__CQ23ICE7Cubic3DPQ23ICE7Vector3, global +/* 000148AC 0002163C C0 03 00 00 */ lfs f0, 0x0(r3) +/* 000148B0 00021640 D0 04 00 00 */ stfs f0, 0x0(r4) +/* 000148B4 00021644 C1 A3 00 2C */ lfs f13, 0x2c(r3) +/* 000148B8 00021648 D1 A4 00 04 */ stfs f13, 0x4(r4) +/* 000148BC 0002164C C0 03 00 58 */ lfs f0, 0x58(r3) +/* 000148C0 00021650 D0 04 00 08 */ stfs f0, 0x8(r4) +/* 000148C4 00021654 4E 80 00 20 */ blr +.endfn GetVal__CQ23ICE7Cubic3DPQ23ICE7Vector3 + +# .text:0x148C8 | size: 0x1C +.fn GetdVal__CQ23ICE7Cubic3DPQ23ICE7Vector3, global +/* 000148C8 00021658 C0 03 00 04 */ lfs f0, 0x4(r3) +/* 000148CC 0002165C D0 04 00 00 */ stfs f0, 0x0(r4) +/* 000148D0 00021660 C1 A3 00 30 */ lfs f13, 0x30(r3) +/* 000148D4 00021664 D1 A4 00 04 */ stfs f13, 0x4(r4) +/* 000148D8 00021668 C0 03 00 5C */ lfs f0, 0x5c(r3) +/* 000148DC 0002166C D0 04 00 08 */ stfs f0, 0x8(r4) +/* 000148E0 00021670 4E 80 00 20 */ blr +.endfn GetdVal__CQ23ICE7Cubic3DPQ23ICE7Vector3 + +# .text:0x148E4 | size: 0x60 +.fn GetVal__CQ23ICE7Cubic3DPQ23ICE7Vector3f, global +/* 000148E4 00021674 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 000148E8 00021678 7C 08 02 A6 */ mflr r0 +/* 000148EC 0002167C F3 E1 00 18 */ psq_st f31, 0x18(r1), 0, qr0 +/* 000148F0 00021680 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 000148F4 00021684 90 01 00 24 */ stw r0, 0x24(r1) +/* 000148F8 00021688 7C 7E 1B 78 */ mr r30, r3 +/* 000148FC 0002168C FF E0 08 90 */ fmr f31, f1 +/* 00014900 00021690 7C 9D 23 78 */ mr r29, r4 +/* 00014904 00021694 48 01 44 15 */ bl .text+0x14414 +/* 00014908 00021698 D0 3D 00 00 */ stfs f1, 0x0(r29) +/* 0001490C 0002169C 38 7E 00 2C */ addi r3, r30, 0x2c +/* 00014910 000216A0 FC 20 F8 90 */ fmr f1, f31 +/* 00014914 000216A4 48 01 44 15 */ bl .text+0x14414 +/* 00014918 000216A8 D0 3D 00 04 */ stfs f1, 0x4(r29) +/* 0001491C 000216AC 38 7E 00 58 */ addi r3, r30, 0x58 +/* 00014920 000216B0 FC 20 F8 90 */ fmr f1, f31 +/* 00014924 000216B4 48 01 44 15 */ bl .text+0x14414 +/* 00014928 000216B8 D0 3D 00 08 */ stfs f1, 0x8(r29) +.L_0001492C: +/* 0001492C 000216BC 80 01 00 24 */ lwz r0, 0x24(r1) +/* 00014930 000216C0 7C 08 03 A6 */ mtlr r0 +/* 00014934 000216C4 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 00014938 000216C8 E3 E1 00 18 */ psq_l f31, 0x18(r1), 0, qr0 +/* 0001493C 000216CC 38 21 00 20 */ addi r1, r1, 0x20 +/* 00014940 000216D0 4E 80 00 20 */ blr +.endfn GetVal__CQ23ICE7Cubic3DPQ23ICE7Vector3f + +# .text:0x14944 | size: 0x1C +.fn GetValDesired__CQ23ICE7Cubic3DPQ23ICE7Vector3, global +/* 00014944 000216D4 C0 03 00 08 */ lfs f0, 0x8(r3) +.L_00014948: +/* 00014948 000216D8 D0 04 00 00 */ stfs f0, 0x0(r4) +/* 0001494C 000216DC C1 A3 00 34 */ lfs f13, 0x34(r3) +/* 00014950 000216E0 D1 A4 00 04 */ stfs f13, 0x4(r4) +/* 00014954 000216E4 C0 03 00 60 */ lfs f0, 0x60(r3) +/* 00014958 000216E8 D0 04 00 08 */ stfs f0, 0x8(r4) +/* 0001495C 000216EC 4E 80 00 20 */ blr +.endfn GetValDesired__CQ23ICE7Cubic3DPQ23ICE7Vector3 + +# .text:0x14960 | size: 0x78 +.fn Update__Q23ICE7Cubic3Dfff, global +/* 00014960 000216F0 94 21 FF D8 */ stwu r1, -0x28(r1) +/* 00014964 000216F4 7C 08 02 A6 */ mflr r0 +/* 00014968 000216F8 F3 A1 00 10 */ psq_st f29, 0x10(r1), 0, qr0 +/* 0001496C 000216FC F3 C1 00 18 */ psq_st f30, 0x18(r1), 0, qr0 +/* 00014970 00021700 F3 E1 00 20 */ psq_st f31, 0x20(r1), 0, qr0 +/* 00014974 00021704 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 00014978 00021708 90 01 00 2C */ stw r0, 0x2c(r1) +/* 0001497C 0002170C 7C 7E 1B 78 */ mr r30, r3 +/* 00014980 00021710 FF C0 08 90 */ fmr f30, f1 +/* 00014984 00021714 FF A0 10 90 */ fmr f29, f2 +/* 00014988 00021718 FF E0 18 90 */ fmr f31, f3 +/* 0001498C 0002171C 48 01 46 45 */ bl .text+0x14644 +/* 00014990 00021720 38 7E 00 2C */ addi r3, r30, 0x2c +/* 00014994 00021724 FC 20 F0 90 */ fmr f1, f30 +/* 00014998 00021728 FC 40 E8 90 */ fmr f2, f29 +/* 0001499C 0002172C FC 60 F8 90 */ fmr f3, f31 +/* 000149A0 00021730 48 01 46 45 */ bl .text+0x14644 +/* 000149A4 00021734 38 7E 00 58 */ addi r3, r30, 0x58 +/* 000149A8 00021738 FC 20 F0 90 */ fmr f1, f30 +/* 000149AC 0002173C FC 40 E8 90 */ fmr f2, f29 +/* 000149B0 00021740 FC 60 F8 90 */ fmr f3, f31 +/* 000149B4 00021744 48 01 46 45 */ bl .text+0x14644 +/* 000149B8 00021748 80 01 00 2C */ lwz r0, 0x2c(r1) +/* 000149BC 0002174C 7C 08 03 A6 */ mtlr r0 +/* 000149C0 00021750 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 000149C4 00021754 E3 A1 00 10 */ psq_l f29, 0x10(r1), 0, qr0 +.L_000149C8: +/* 000149C8 00021758 E3 C1 00 18 */ psq_l f30, 0x18(r1), 0, qr0 +/* 000149CC 0002175C E3 E1 00 20 */ psq_l f31, 0x20(r1), 0, qr0 +/* 000149D0 00021760 38 21 00 28 */ addi r1, r1, 0x28 +/* 000149D4 00021764 4E 80 00 20 */ blr +.endfn Update__Q23ICE7Cubic3Dfff + +# .text:0x149D8 | size: 0x150 +.fn EyeCubicInit__8ICEMoverPQ23ICE7Cubic3DPQ23ICE7Matrix4PQ23ICE7Vector3, global +/* 000149D8 00021768 94 21 FF A8 */ stwu r1, -0x58(r1) +.L_000149DC: +/* 000149DC 0002176C 7C 08 02 A6 */ mflr r0 +/* 000149E0 00021770 7D 80 00 26 */ mfcr r12 +/* 000149E4 00021774 F3 E1 00 50 */ psq_st f31, 0x50(r1), 0, qr0 +/* 000149E8 00021778 BF 61 00 3C */ stmw r27, 0x3c(r1) +/* 000149EC 0002177C 90 01 00 5C */ stw r0, 0x5c(r1) +/* 000149F0 00021780 91 81 00 38 */ stw r12, 0x38(r1) +/* 000149F4 00021784 3D 20 00 00 */ lis r9, .rodata+0xBE8@ha +/* 000149F8 00021788 7C 7B 1B 78 */ mr r27, r3 +/* 000149FC 0002178C C3 E9 0B E8 */ lfs f31, .rodata+0xBE8@l(r9) +/* 00014A00 00021790 3B E1 00 08 */ addi r31, r1, 0x8 +.L_00014A04: +/* 00014A04 00021794 81 7B 00 1C */ lwz r11, 0x1c(r27) +/* 00014A08 00021798 3D 20 00 00 */ lis r9, .rodata+0xBEC@ha +/* 00014A0C 0002179C D3 E1 00 08 */ stfs f31, 0x8(r1) +/* 00014A10 000217A0 7C BD 2B 78 */ mr r29, r5 +.L_00014A14: +/* 00014A14 000217A4 D3 E1 00 0C */ stfs f31, 0xc(r1) +/* 00014A18 000217A8 7C 9C 23 78 */ mr r28, r4 +.L_00014A1C: +/* 00014A1C 000217AC D3 FF 00 08 */ stfs f31, 0x8(r31) +/* 00014A20 000217B0 2E 1D 00 00 */ cmpwi cr4, r29, 0x0 +/* 00014A24 000217B4 C0 29 0B EC */ lfs f1, .rodata+0xBEC@l(r9) +/* 00014A28 000217B8 7C DE 33 78 */ mr r30, r6 +/* 00014A2C 000217BC 38 AB 01 E8 */ addi r5, r11, 0x1e8 +/* 00014A30 000217C0 D3 E1 00 14 */ stfs f31, 0x14(r1) +/* 00014A34 000217C4 D3 E1 00 18 */ stfs f31, 0x18(r1) +/* 00014A38 000217C8 7F E3 FB 78 */ mr r3, r31 +/* 00014A3C 000217CC D3 E1 00 1C */ stfs f31, 0x1c(r1) +/* 00014A40 000217D0 38 8B 00 40 */ addi r4, r11, 0x40 +/* 00014A44 000217D4 D3 E1 00 20 */ stfs f31, 0x20(r1) +/* 00014A48 000217D8 D3 E1 00 24 */ stfs f31, 0x24(r1) +.L_00014A4C: +/* 00014A4C 000217DC 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +/* 00014A50 000217E0 41 92 4A 64 */ beq cr4, .L_000194B4 +/* 00014A54 000217E4 7F E3 FB 78 */ mr r3, r31 +/* 00014A58 000217E8 7F A4 EB 78 */ mr r4, r29 +/* 00014A5C 000217EC 7F E5 FB 78 */ mr r5, r31 +/* 00014A60 000217F0 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 +/* 00014A64 000217F4 7F E4 FB 78 */ mr r4, r31 +/* 00014A68 000217F8 7F 83 E3 78 */ mr r3, r28 +/* 00014A6C 000217FC 48 01 47 89 */ bl .text+0x14788 +/* 00014A70 00021800 81 3B 00 1C */ lwz r9, 0x1c(r27) +/* 00014A74 00021804 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 00014A78 00021808 C1 49 01 E8 */ lfs f10, 0x1e8(r9) +/* 00014A7C 0002180C D1 41 00 18 */ stfs f10, 0x18(r1) +/* 00014A80 00021810 C1 29 01 EC */ lfs f9, 0x1ec(r9) +/* 00014A84 00021814 D1 21 00 1C */ stfs f9, 0x1c(r1) +/* 00014A88 00021818 C1 69 01 F0 */ lfs f11, 0x1f0(r9) +/* 00014A8C 0002181C D1 61 00 20 */ stfs f11, 0x20(r1) +.L_00014A90: +/* 00014A90 00021820 41 82 4A B8 */ beq ChooseGoodSceneCameraTrackIndex__10ICEManagerUiPCQ23ICE7Matrix4 +/* 00014A94 00021824 C0 1E 00 08 */ lfs f0, 0x8(r30) +/* 00014A98 00021828 C1 9E 00 04 */ lfs f12, 0x4(r30) +/* 00014A9C 0002182C C1 BE 00 00 */ lfs f13, 0x0(r30) +/* 00014AA0 00021830 EC 0B 00 28 */ fsubs f0, f11, f0 +/* 00014AA4 00021834 ED 89 60 28 */ fsubs f12, f9, f12 +/* 00014AA8 00021838 D0 01 00 20 */ stfs f0, 0x20(r1) +.L_00014AAC: +/* 00014AAC 0002183C ED AA 68 28 */ fsubs f13, f10, f13 +/* 00014AB0 00021840 D1 81 00 1C */ stfs f12, 0x1c(r1) +/* 00014AB4 00021844 D1 A1 00 18 */ stfs f13, 0x18(r1) +/* 00014AB8 00021848 C1 7C 00 24 */ lfs f11, 0x24(r28) +/* 00014ABC 0002184C 3B E1 00 28 */ addi r31, r1, 0x28 +/* 00014AC0 00021850 C0 01 00 18 */ lfs f0, 0x18(r1) +.L_00014AC4: +/* 00014AC4 00021854 C1 A1 00 1C */ lfs f13, 0x1c(r1) +/* 00014AC8 00021858 C1 81 00 20 */ lfs f12, 0x20(r1) +/* 00014ACC 0002185C EC 00 02 F2 */ fmuls f0, f0, f11 +/* 00014AD0 00021860 ED AD 02 F2 */ fmuls f13, f13, f11 +/* 00014AD4 00021864 D0 01 00 28 */ stfs f0, 0x28(r1) +/* 00014AD8 00021868 ED 8C 02 F2 */ fmuls f12, f12, f11 +/* 00014ADC 0002186C D1 A1 00 2C */ stfs f13, 0x2c(r1) +/* 00014AE0 00021870 D1 81 00 30 */ stfs f12, 0x30(r1) +/* 00014AE4 00021874 D3 E1 00 34 */ stfs f31, 0x34(r1) +/* 00014AE8 00021878 41 92 4A FC */ beq cr4, .L_000195E4 +/* 00014AEC 0002187C 7F A4 EB 78 */ mr r4, r29 +/* 00014AF0 00021880 7F E3 FB 78 */ mr r3, r31 +/* 00014AF4 00021884 7F E5 FB 78 */ mr r5, r31 +/* 00014AF8 00021888 48 00 00 01 */ bl bMulMatrix__FP8bVector4PC8bMatrix4PC8bVector4 +/* 00014AFC 0002188C 7F 83 E3 78 */ mr r3, r28 +/* 00014B00 00021890 7F E4 FB 78 */ mr r4, r31 +/* 00014B04 00021894 48 01 47 E1 */ bl .text+0x147E0 +/* 00014B08 00021898 80 01 00 5C */ lwz r0, 0x5c(r1) +/* 00014B0C 0002189C 81 81 00 38 */ lwz r12, 0x38(r1) +/* 00014B10 000218A0 7C 08 03 A6 */ mtlr r0 +/* 00014B14 000218A4 BB 61 00 3C */ lmw r27, 0x3c(r1) +/* 00014B18 000218A8 E3 E1 00 50 */ psq_l f31, 0x50(r1), 0, qr0 +/* 00014B1C 000218AC 7D 80 81 20 */ mtcrf 8, r12 +/* 00014B20 000218B0 38 21 00 58 */ addi r1, r1, 0x58 +/* 00014B24 000218B4 4E 80 00 20 */ blr +.endfn EyeCubicInit__8ICEMoverPQ23ICE7Cubic3DPQ23ICE7Matrix4PQ23ICE7Vector3 + +# .text:0x14B28 | size: 0x150 +.fn LookCubicInit__8ICEMoverPQ23ICE7Cubic3DPQ23ICE7Matrix4PQ23ICE7Vector3, global +/* 00014B28 000218B8 94 21 FF A8 */ stwu r1, -0x58(r1) +/* 00014B2C 000218BC 7C 08 02 A6 */ mflr r0 +/* 00014B30 000218C0 7D 80 00 26 */ mfcr r12 +/* 00014B34 000218C4 F3 E1 00 50 */ psq_st f31, 0x50(r1), 0, qr0 +/* 00014B38 000218C8 BF 61 00 3C */ stmw r27, 0x3c(r1) +/* 00014B3C 000218CC 90 01 00 5C */ stw r0, 0x5c(r1) +/* 00014B40 000218D0 91 81 00 38 */ stw r12, 0x38(r1) +/* 00014B44 000218D4 3D 20 00 00 */ lis r9, .rodata+0xBF0@ha +/* 00014B48 000218D8 7C 7B 1B 78 */ mr r27, r3 +/* 00014B4C 000218DC C3 E9 0B F0 */ lfs f31, .rodata+0xBF0@l(r9) +/* 00014B50 000218E0 3B E1 00 08 */ addi r31, r1, 0x8 +/* 00014B54 000218E4 81 7B 00 1C */ lwz r11, 0x1c(r27) +/* 00014B58 000218E8 3D 20 00 00 */ lis r9, .rodata+0xBF4@ha +/* 00014B5C 000218EC D3 E1 00 08 */ stfs f31, 0x8(r1) +/* 00014B60 000218F0 7C BD 2B 78 */ mr r29, r5 +/* 00014B64 000218F4 D3 E1 00 0C */ stfs f31, 0xc(r1) +/* 00014B68 000218F8 7C 9C 23 78 */ mr r28, r4 +/* 00014B6C 000218FC D3 FF 00 08 */ stfs f31, 0x8(r31) +/* 00014B70 00021900 2E 1D 00 00 */ cmpwi cr4, r29, 0x0 +/* 00014B74 00021904 C0 29 0B F4 */ lfs f1, .rodata+0xBF4@l(r9) +/* 00014B78 00021908 7C DE 33 78 */ mr r30, r6 +/* 00014B7C 0002190C 38 AB 02 08 */ addi r5, r11, 0x208 +/* 00014B80 00021910 D3 E1 00 14 */ stfs f31, 0x14(r1) +/* 00014B84 00021914 D3 E1 00 18 */ stfs f31, 0x18(r1) +/* 00014B88 00021918 7F E3 FB 78 */ mr r3, r31 +/* 00014B8C 0002191C D3 E1 00 1C */ stfs f31, 0x1c(r1) +/* 00014B90 00021920 38 8B 00 60 */ addi r4, r11, 0x60 +/* 00014B94 00021924 D3 E1 00 20 */ stfs f31, 0x20(r1) +/* 00014B98 00021928 D3 E1 00 24 */ stfs f31, 0x24(r1) +/* 00014B9C 0002192C 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +/* 00014BA0 00021930 41 92 4B B4 */ beq cr4, .L_00019754 +/* 00014BA4 00021934 7F E3 FB 78 */ mr r3, r31 +/* 00014BA8 00021938 7F A4 EB 78 */ mr r4, r29 +/* 00014BAC 0002193C 7F E5 FB 78 */ mr r5, r31 +/* 00014BB0 00021940 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 +/* 00014BB4 00021944 7F E4 FB 78 */ mr r4, r31 +/* 00014BB8 00021948 7F 83 E3 78 */ mr r3, r28 +/* 00014BBC 0002194C 48 01 47 89 */ bl .text+0x14788 +/* 00014BC0 00021950 81 3B 00 1C */ lwz r9, 0x1c(r27) +/* 00014BC4 00021954 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 00014BC8 00021958 C1 49 02 08 */ lfs f10, 0x208(r9) +.L_00014BCC: +/* 00014BCC 0002195C D1 41 00 18 */ stfs f10, 0x18(r1) +/* 00014BD0 00021960 C1 29 02 0C */ lfs f9, 0x20c(r9) +/* 00014BD4 00021964 D1 21 00 1C */ stfs f9, 0x1c(r1) +/* 00014BD8 00021968 C1 69 02 10 */ lfs f11, 0x210(r9) +.L_00014BDC: +/* 00014BDC 0002196C D1 61 00 20 */ stfs f11, 0x20(r1) +/* 00014BE0 00021970 41 82 4C 08 */ beq .L_000197E8 +/* 00014BE4 00021974 C0 1E 00 08 */ lfs f0, 0x8(r30) +/* 00014BE8 00021978 C1 9E 00 04 */ lfs f12, 0x4(r30) +/* 00014BEC 0002197C C1 BE 00 00 */ lfs f13, 0x0(r30) +/* 00014BF0 00021980 EC 0B 00 28 */ fsubs f0, f11, f0 +/* 00014BF4 00021984 ED 89 60 28 */ fsubs f12, f9, f12 +/* 00014BF8 00021988 D0 01 00 20 */ stfs f0, 0x20(r1) +/* 00014BFC 0002198C ED AA 68 28 */ fsubs f13, f10, f13 +/* 00014C00 00021990 D1 81 00 1C */ stfs f12, 0x1c(r1) +/* 00014C04 00021994 D1 A1 00 18 */ stfs f13, 0x18(r1) +/* 00014C08 00021998 C1 7C 00 24 */ lfs f11, 0x24(r28) +/* 00014C0C 0002199C 3B E1 00 28 */ addi r31, r1, 0x28 +/* 00014C10 000219A0 C0 01 00 18 */ lfs f0, 0x18(r1) +/* 00014C14 000219A4 C1 A1 00 1C */ lfs f13, 0x1c(r1) +/* 00014C18 000219A8 C1 81 00 20 */ lfs f12, 0x20(r1) +/* 00014C1C 000219AC EC 00 02 F2 */ fmuls f0, f0, f11 +/* 00014C20 000219B0 ED AD 02 F2 */ fmuls f13, f13, f11 +/* 00014C24 000219B4 D0 01 00 28 */ stfs f0, 0x28(r1) +/* 00014C28 000219B8 ED 8C 02 F2 */ fmuls f12, f12, f11 +/* 00014C2C 000219BC D1 A1 00 2C */ stfs f13, 0x2c(r1) +/* 00014C30 000219C0 D1 81 00 30 */ stfs f12, 0x30(r1) +/* 00014C34 000219C4 D3 E1 00 34 */ stfs f31, 0x34(r1) +/* 00014C38 000219C8 41 92 4C 4C */ beq cr4, .L_00019884 +/* 00014C3C 000219CC 7F A4 EB 78 */ mr r4, r29 +/* 00014C40 000219D0 7F E3 FB 78 */ mr r3, r31 +/* 00014C44 000219D4 7F E5 FB 78 */ mr r5, r31 +/* 00014C48 000219D8 48 00 00 01 */ bl bMulMatrix__FP8bVector4PC8bMatrix4PC8bVector4 +/* 00014C4C 000219DC 7F 83 E3 78 */ mr r3, r28 +.L_00014C50: +/* 00014C50 000219E0 7F E4 FB 78 */ mr r4, r31 +.L_00014C54: +/* 00014C54 000219E4 48 01 47 E1 */ bl .text+0x147E0 +/* 00014C58 000219E8 80 01 00 5C */ lwz r0, 0x5c(r1) +/* 00014C5C 000219EC 81 81 00 38 */ lwz r12, 0x38(r1) +/* 00014C60 000219F0 7C 08 03 A6 */ mtlr r0 +/* 00014C64 000219F4 BB 61 00 3C */ lmw r27, 0x3c(r1) +.L_00014C68: +/* 00014C68 000219F8 E3 E1 00 50 */ psq_l f31, 0x50(r1), 0, qr0 +/* 00014C6C 000219FC 7D 80 81 20 */ mtcrf 8, r12 +/* 00014C70 00021A00 38 21 00 58 */ addi r1, r1, 0x58 +/* 00014C74 00021A04 4E 80 00 20 */ blr +.endfn LookCubicInit__8ICEMoverPQ23ICE7Cubic3DPQ23ICE7Matrix4PQ23ICE7Vector3 + +# .text:0x14C78 | size: 0x3C +.fn DutchCubicInit__8ICEMoverPQ23ICE7Cubic1D, global +/* 00014C78 00021A08 3D 20 00 00 */ lis r9, .rodata+0xBF8@ha +/* 00014C7C 00021A0C C0 04 00 08 */ lfs f0, 0x8(r4) +/* 00014C80 00021A10 C1 A9 0B F8 */ lfs f13, .rodata+0xBF8@l(r9) +/* 00014C84 00021A14 D1 A4 00 00 */ stfs f13, 0x0(r4) +/* 00014C88 00021A18 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 00014C8C 00021A1C 41 82 4C 98 */ beq .L_00019924 +/* 00014C90 00021A20 38 00 00 02 */ li r0, 0x2 +/* 00014C94 00021A24 B0 04 00 28 */ sth r0, 0x28(r4) +/* 00014C98 00021A28 C0 04 00 0C */ lfs f0, 0xc(r4) +/* 00014C9C 00021A2C D1 A4 00 04 */ stfs f13, 0x4(r4) +/* 00014CA0 00021A30 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 00014CA4 00021A34 4D 82 00 20 */ beqlr +/* 00014CA8 00021A38 38 00 00 02 */ li r0, 0x2 +/* 00014CAC 00021A3C B0 04 00 28 */ sth r0, 0x28(r4) +.L_00014CB0: +/* 00014CB0 00021A40 4E 80 00 20 */ blr +.endfn DutchCubicInit__8ICEMoverPQ23ICE7Cubic1D + +# .text:0x14CB4 | size: 0x9C +.fn FovCubicInit__8ICEMoverPQ23ICE7Cubic1D, global +/* 00014CB4 00021A44 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00014CB8 00021A48 81 43 00 1C */ lwz r10, 0x1c(r3) +/* 00014CBC 00021A4C 3C A0 43 30 */ lis r5, 0x4330 +/* 00014CC0 00021A50 7D 67 5B 78 */ mr r7, r11 +/* 00014CC4 00021A54 A0 0A 02 6C */ lhz r0, 0x26c(r10) +/* 00014CC8 00021A58 3D 00 00 00 */ lis r8, .rodata+0xC00@ha +/* 00014CCC 00021A5C A1 2A 00 C4 */ lhz r9, 0xc4(r10) +/* 00014CD0 00021A60 3C C0 00 00 */ lis r6, .rodata+0xC08@ha +/* 00014CD4 00021A64 6C 00 80 00 */ xoris r0, r0, 0x8000 +/* 00014CD8 00021A68 C9 88 0C 00 */ lfd f12, .rodata+0xC00@l(r8) +/* 00014CDC 00021A6C 90 01 00 0C */ stw r0, 0xc(r1) +/* 00014CE0 00021A70 6D 29 80 00 */ xoris r9, r9, 0x8000 +/* 00014CE4 00021A74 C1 64 00 24 */ lfs f11, 0x24(r4) +/* 00014CE8 00021A78 90 A1 00 08 */ stw r5, 0x8(r1) +/* 00014CEC 00021A7C C1 26 0C 08 */ lfs f9, .rodata+0xC08@l(r6) +/* 00014CF0 00021A80 C9 A1 00 08 */ lfd f13, 0x8(r1) +/* 00014CF4 00021A84 91 21 00 0C */ stw r9, 0xc(r1) +/* 00014CF8 00021A88 FD AD 60 28 */ fsub f13, f13, f12 +/* 00014CFC 00021A8C C1 44 00 08 */ lfs f10, 0x8(r4) +/* 00014D00 00021A90 90 A1 00 08 */ stw r5, 0x8(r1) +/* 00014D04 00021A94 FD A0 68 18 */ frsp f13, f13 +/* 00014D08 00021A98 ED 6D 02 F2 */ fmuls f11, f13, f11 +/* 00014D0C 00021A9C C8 01 00 08 */ lfd f0, 0x8(r1) +/* 00014D10 00021AA0 FC 00 60 28 */ fsub f0, f0, f12 +/* 00014D14 00021AA4 FC 00 00 18 */ frsp f0, f0 +/* 00014D18 00021AA8 ED AD 02 7A */ fmadds f13, f13, f9, f0 +/* 00014D1C 00021AAC FC 0D 50 00 */ fcmpu cr0, f13, f10 +/* 00014D20 00021AB0 D1 A4 00 00 */ stfs f13, 0x0(r4) +/* 00014D24 00021AB4 41 82 4D 30 */ beq .L_00019A54 +/* 00014D28 00021AB8 38 00 00 02 */ li r0, 0x2 +/* 00014D2C 00021ABC B0 04 00 28 */ sth r0, 0x28(r4) +/* 00014D30 00021AC0 C0 04 00 0C */ lfs f0, 0xc(r4) +/* 00014D34 00021AC4 D1 64 00 04 */ stfs f11, 0x4(r4) +/* 00014D38 00021AC8 FC 0B 00 00 */ fcmpu cr0, f11, f0 +/* 00014D3C 00021ACC 41 82 4D 48 */ beq .L_00019A84 +.L_00014D40: +/* 00014D40 00021AD0 38 00 00 02 */ li r0, 0x2 +/* 00014D44 00021AD4 B0 04 00 28 */ sth r0, 0x28(r4) +/* 00014D48 00021AD8 38 21 00 10 */ addi r1, r1, 0x10 +.L_00014D4C: +/* 00014D4C 00021ADC 4E 80 00 20 */ blr +.endfn FovCubicInit__8ICEMoverPQ23ICE7Cubic1D + +# .text:0x14D50 | size: 0xED8 +.fn SetDesired__8ICEMoverbT1, global +/* 00014D50 00021AE0 94 21 FC 28 */ stwu r1, -0x3d8(r1) +/* 00014D54 00021AE4 7C 08 02 A6 */ mflr r0 +/* 00014D58 00021AE8 7D 80 00 26 */ mfcr r12 +/* 00014D5C 00021AEC F3 E1 03 D0 */ psq_st f31, 0x3d0(r1), 0, qr0 +/* 00014D60 00021AF0 BD C1 03 88 */ stmw r14, 0x388(r1) +/* 00014D64 00021AF4 90 01 03 DC */ stw r0, 0x3dc(r1) +/* 00014D68 00021AF8 91 81 03 84 */ stw r12, 0x384(r1) +/* 00014D6C 00021AFC 7C 7F 1B 78 */ mr r31, r3 +/* 00014D70 00021B00 38 00 00 00 */ li r0, 0x0 +/* 00014D74 00021B04 81 3F 00 C4 */ lwz r9, 0xc4(r31) +/* 00014D78 00021B08 7C BE 2B 78 */ mr r30, r5 +/* 00014D7C 00021B0C 3C 60 00 00 */ lis r3, TheICEManager@ha +/* 00014D80 00021B10 90 01 03 38 */ stw r0, 0x338(r1) +/* 00014D84 00021B14 91 21 03 50 */ stw r9, 0x350(r1) +/* 00014D88 00021B18 38 63 00 00 */ addi r3, r3, TheICEManager@l +/* 00014D8C 00021B1C 38 81 03 38 */ addi r4, r1, 0x338 +/* 00014D90 00021B20 38 BF 00 B4 */ addi r5, r31, 0xb4 +/* 00014D94 00021B24 38 DF 00 B8 */ addi r6, r31, 0xb8 +/* 00014D98 00021B28 48 01 89 4D */ bl .text+0x1894C +/* 00014D9C 00021B2C 80 1F 00 C4 */ lwz r0, 0xc4(r31) +/* 00014DA0 00021B30 7C 7B 1B 78 */ mr r27, r3 +/* 00014DA4 00021B34 2C 1E 00 00 */ cmpwi r30, 0x0 +.L_00014DA8: +/* 00014DA8 00021B38 7C 1C DA 78 */ xor r28, r0, r27 +/* 00014DAC 00021B3C 21 3C 00 00 */ subfic r9, r28, 0x0 +/* 00014DB0 00021B40 7F 89 E1 14 */ adde r28, r9, r28 +/* 00014DB4 00021B44 40 82 4D C0 */ bne .L_00019B74 +/* 00014DB8 00021B48 2C 1C 00 00 */ cmpwi r28, 0x0 +/* 00014DBC 00021B4C 40 82 5C 08 */ bne .L_0001A9C4 +/* 00014DC0 00021B50 81 21 03 50 */ lwz r9, 0x350(r1) +/* 00014DC4 00021B54 2C 1C 00 00 */ cmpwi r28, 0x0 +/* 00014DC8 00021B58 2F 9B 00 00 */ cmpwi cr7, r27, 0x0 +/* 00014DCC 00021B5C 38 60 00 00 */ li r3, 0x0 +/* 00014DD0 00021B60 7F A0 00 26 */ mfcr r29 +/* 00014DD4 00021B64 7F C0 00 26 */ mfcr r30 +/* 00014DD8 00021B68 57 DE E0 06 */ slwi r30, r30, 28 +/* 00014DDC 00021B6C 2E 09 00 00 */ cmpwi cr4, r9, 0x0 +/* 00014DE0 00021B70 40 82 4E 08 */ bne .L_00019BE8 +/* 00014DE4 00021B74 4C 1C 00 00 */ mcrf cr0, cr7 +/* 00014DE8 00021B78 41 82 4E 08 */ beq .L_00019BF0 +/* 00014DEC 00021B7C 41 92 4E 08 */ beq cr4, .L_00019BF4 +/* 00014DF0 00021B80 7D 23 4B 78 */ mr r3, r9 +/* 00014DF4 00021B84 38 80 00 01 */ li r4, 0x1 +/* 00014DF8 00021B88 7F 65 DB 78 */ mr r5, r27 +.L_00014DFC: +/* 00014DFC 00021B8C 38 C0 00 00 */ li r6, 0x0 +/* 00014E00 00021B90 48 01 36 ED */ bl .text+0x136EC +/* 00014E04 00021B94 68 63 00 01 */ xori r3, r3, 0x1 +/* 00014E08 00021B98 38 00 00 00 */ li r0, 0x0 +/* 00014E0C 00021B9C 7F C8 01 20 */ mtcrf 128, r30 +/* 00014E10 00021BA0 90 01 03 54 */ stw r0, 0x354(r1) +/* 00014E14 00021BA4 41 82 4E 30 */ beq .L_00019C44 +/* 00014E18 00021BA8 40 92 4E 30 */ bne cr4, .L_00019C48 +/* 00014E1C 00021BAC 88 1B 00 01 */ lbz r0, 0x1(r27) +/* 00014E20 00021BB0 70 09 00 01 */ andi. r9, r0, 0x1 +/* 00014E24 00021BB4 41 82 4E 30 */ beq .L_00019C54 +/* 00014E28 00021BB8 39 60 00 01 */ li r11, 0x1 +/* 00014E2C 00021BBC 91 61 03 54 */ stw r11, 0x354(r1) +/* 00014E30 00021BC0 38 00 00 00 */ li r0, 0x0 +/* 00014E34 00021BC4 90 01 03 58 */ stw r0, 0x358(r1) +/* 00014E38 00021BC8 41 92 4E 5C */ beq cr4, .L_00019C94 +/* 00014E3C 00021BCC 7F C8 01 20 */ mtcrf 128, r30 +/* 00014E40 00021BD0 40 82 4E 5C */ bne .L_00019C9C +/* 00014E44 00021BD4 81 21 03 50 */ lwz r9, 0x350(r1) +/* 00014E48 00021BD8 88 09 00 01 */ lbz r0, 0x1(r9) +/* 00014E4C 00021BDC 70 0B 00 01 */ andi. r11, r0, 0x1 +/* 00014E50 00021BE0 41 82 4E 5C */ beq .L_00019CAC +/* 00014E54 00021BE4 38 00 00 01 */ li r0, 0x1 +/* 00014E58 00021BE8 90 01 03 58 */ stw r0, 0x358(r1) +/* 00014E5C 00021BEC 2D 83 00 00 */ cmpwi cr3, r3, 0x0 +/* 00014E60 00021BF0 93 7F 00 C4 */ stw r27, 0xc4(r31) +/* 00014E64 00021BF4 40 8E 4E 80 */ bne cr3, .L_00019CE4 +/* 00014E68 00021BF8 81 21 03 54 */ lwz r9, 0x354(r1) +/* 00014E6C 00021BFC 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00014E70 00021C00 40 82 4E 80 */ bne .L_00019CF0 +/* 00014E74 00021C04 81 61 03 58 */ lwz r11, 0x358(r1) +/* 00014E78 00021C08 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00014E7C 00021C0C 41 82 4E B8 */ beq .L_00019D34 +/* 00014E80 00021C10 48 00 00 01 */ bl FlushAccumulationBuffer__Fv +/* 00014E84 00021C14 81 3F 00 80 */ lwz r9, 0x80(r31) +/* 00014E88 00021C18 C0 09 00 00 */ lfs f0, 0x0(r9) +/* 00014E8C 00021C1C D0 1F 01 0C */ stfs f0, 0x10c(r31) +/* 00014E90 00021C20 C1 A9 00 04 */ lfs f13, 0x4(r9) +/* 00014E94 00021C24 D1 BF 01 10 */ stfs f13, 0x110(r31) +/* 00014E98 00021C28 C0 09 00 08 */ lfs f0, 0x8(r9) +/* 00014E9C 00021C2C D0 1F 01 14 */ stfs f0, 0x114(r31) +/* 00014EA0 00021C30 C1 A9 00 10 */ lfs f13, 0x10(r9) +/* 00014EA4 00021C34 D1 BF 01 1C */ stfs f13, 0x11c(r31) +/* 00014EA8 00021C38 C0 09 00 14 */ lfs f0, 0x14(r9) +/* 00014EAC 00021C3C D0 1F 01 20 */ stfs f0, 0x120(r31) +/* 00014EB0 00021C40 C1 A9 00 18 */ lfs f13, 0x18(r9) +/* 00014EB4 00021C44 D1 BF 01 24 */ stfs f13, 0x124(r31) +/* 00014EB8 00021C48 7F A8 01 20 */ mtcrf 128, r29 +/* 00014EBC 00021C4C 40 82 4E EC */ bne .L_00019DA8 +/* 00014EC0 00021C50 C0 3F 00 B4 */ lfs f1, 0xb4(r31) +/* 00014EC4 00021C54 3D 20 00 00 */ lis r9, .rodata+0xC0C@ha +/* 00014EC8 00021C58 C0 1F 00 B8 */ lfs f0, 0xb8(r31) +.L_00014ECC: +/* 00014ECC 00021C5C 3C 60 00 00 */ lis r3, TheICEManager@ha +.L_00014ED0: +/* 00014ED0 00021C60 C1 A9 0C 0C */ lfs f13, .rodata+0xC0C@l(r9) +/* 00014ED4 00021C64 38 63 00 00 */ addi r3, r3, TheICEManager@l +/* 00014ED8 00021C68 EC 21 00 2A */ fadds f1, f1, f0 +.L_00014EDC: +/* 00014EDC 00021C6C 80 81 03 38 */ lwz r4, 0x338(r1) +/* 00014EE0 00021C70 EC 21 03 72 */ fmuls f1, f1, f13 +/* 00014EE4 00021C74 48 01 84 A5 */ bl .text+0x184A4 +/* 00014EE8 00021C78 48 01 A1 6D */ bl .text+0x1A16C +/* 00014EEC 00021C7C 7F C8 01 20 */ mtcrf 128, r30 +/* 00014EF0 00021C80 41 82 5C 08 */ beq clear__Q24_STLt10_List_base2ZP11IAttachableZQ33UTL3Stdt9Allocator2ZP11IAttachableZ21_type_IAttachableList +/* 00014EF4 00021C84 88 1B 00 04 */ lbz r0, 0x4(r27) +/* 00014EF8 00021C88 7F A8 01 20 */ mtcrf 128, r29 +/* 00014EFC 00021C8C 90 1F 00 BC */ stw r0, 0xbc(r31) +/* 00014F00 00021C90 89 3B 00 05 */ lbz r9, 0x5(r27) +/* 00014F04 00021C94 91 3F 00 C0 */ stw r9, 0xc0(r31) +/* 00014F08 00021C98 40 82 59 00 */ bne .L_0001A808 +/* 00014F0C 00021C9C 89 5B 00 01 */ lbz r10, 0x1(r27) +/* 00014F10 00021CA0 71 40 00 01 */ andi. r0, r10, 0x1 +/* 00014F14 00021CA4 41 82 59 00 */ beq .L_0001A814 +/* 00014F18 00021CA8 3D 20 00 00 */ lis r9, .rodata+0xC10@ha +/* 00014F1C 00021CAC 38 00 00 01 */ li r0, 0x1 +/* 00014F20 00021CB0 C0 09 0C 10 */ lfs f0, .rodata+0xC10@l(r9) +/* 00014F24 00021CB4 55 4A FF FE */ extrwi r10, r10, 1, 30 +/* 00014F28 00021CB8 3D 20 00 00 */ lis r9, TheICEManager+0x74@ha +/* 00014F2C 00021CBC 3D 60 00 00 */ lis r11, bMirrorICEData@ha +/* 00014F30 00021CC0 90 09 00 74 */ stw r0, TheICEManager+0x74@l(r9) +/* 00014F34 00021CC4 3B DF 00 CC */ addi r30, r31, 0xcc +/* 00014F38 00021CC8 39 20 00 00 */ li r9, 0x0 +/* 00014F3C 00021CCC D0 01 00 C8 */ stfs f0, 0xc8(r1) +.L_00014F40: +/* 00014F40 00021CD0 D0 01 00 CC */ stfs f0, 0xcc(r1) +/* 00014F44 00021CD4 39 01 00 08 */ addi r8, r1, 0x8 +/* 00014F48 00021CD8 D0 01 00 D0 */ stfs f0, 0xd0(r1) +/* 00014F4C 00021CDC 7D 04 43 78 */ mr r4, r8 +/* 00014F50 00021CE0 D0 01 00 D4 */ stfs f0, 0xd4(r1) +/* 00014F54 00021CE4 3B A1 00 88 */ addi r29, r1, 0x88 +.L_00014F58: +/* 00014F58 00021CE8 D0 01 00 E8 */ stfs f0, 0xe8(r1) +/* 00014F5C 00021CEC 3B 41 02 38 */ addi r26, r1, 0x238 +.L_00014F60: +/* 00014F60 00021CF0 D0 01 00 EC */ stfs f0, 0xec(r1) +/* 00014F64 00021CF4 38 61 00 48 */ addi r3, r1, 0x48 +/* 00014F68 00021CF8 D0 01 00 D8 */ stfs f0, 0xd8(r1) +/* 00014F6C 00021CFC D0 01 00 DC */ stfs f0, 0xdc(r1) +.L_00014F70: +/* 00014F70 00021D00 D0 01 00 E0 */ stfs f0, 0xe0(r1) +/* 00014F74 00021D04 D0 01 00 E4 */ stfs f0, 0xe4(r1) +.L_00014F78: +/* 00014F78 00021D08 D0 01 00 F4 */ stfs f0, 0xf4(r1) +/* 00014F7C 00021D0C D0 01 00 F8 */ stfs f0, 0xf8(r1) +.L_00014F80: +/* 00014F80 00021D10 D0 01 00 FC */ stfs f0, 0xfc(r1) +/* 00014F84 00021D14 D0 01 01 00 */ stfs f0, 0x100(r1) +/* 00014F88 00021D18 D0 01 01 14 */ stfs f0, 0x114(r1) +/* 00014F8C 00021D1C D0 01 01 18 */ stfs f0, 0x118(r1) +/* 00014F90 00021D20 D0 01 01 04 */ stfs f0, 0x104(r1) +/* 00014F94 00021D24 D0 01 01 08 */ stfs f0, 0x108(r1) +/* 00014F98 00021D28 D0 01 01 0C */ stfs f0, 0x10c(r1) +/* 00014F9C 00021D2C D0 01 01 10 */ stfs f0, 0x110(r1) +/* 00014FA0 00021D30 D0 01 01 20 */ stfs f0, 0x120(r1) +/* 00014FA4 00021D34 D0 01 01 24 */ stfs f0, 0x124(r1) +/* 00014FA8 00021D38 D0 01 01 28 */ stfs f0, 0x128(r1) +/* 00014FAC 00021D3C D0 01 01 2C */ stfs f0, 0x12c(r1) +/* 00014FB0 00021D40 D0 01 01 40 */ stfs f0, 0x140(r1) +/* 00014FB4 00021D44 D0 01 01 44 */ stfs f0, 0x144(r1) +/* 00014FB8 00021D48 91 4B 00 00 */ stw r10, bMirrorICEData@l(r11) +/* 00014FBC 00021D4C 91 21 03 5C */ stw r9, 0x35c(r1) +/* 00014FC0 00021D50 3D 40 00 00 */ lis r10, .rodata+0xC14@ha +/* 00014FC4 00021D54 B3 81 00 F0 */ sth r28, 0xf0(r1) +/* 00014FC8 00021D58 B3 81 00 F2 */ sth r28, 0xf2(r1) +/* 00014FCC 00021D5C 93 C1 03 68 */ stw r30, 0x368(r1) +/* 00014FD0 00021D60 B3 81 01 1C */ sth r28, 0x11c(r1) +/* 00014FD4 00021D64 B3 81 01 1E */ sth r28, 0x11e(r1) +/* 00014FD8 00021D68 B3 81 01 48 */ sth r28, 0x148(r1) +/* 00014FDC 00021D6C D0 01 01 30 */ stfs f0, 0x130(r1) +/* 00014FE0 00021D70 D0 01 01 34 */ stfs f0, 0x134(r1) +/* 00014FE4 00021D74 D0 01 01 38 */ stfs f0, 0x138(r1) +/* 00014FE8 00021D78 D0 01 01 3C */ stfs f0, 0x13c(r1) +/* 00014FEC 00021D7C D0 01 01 50 */ stfs f0, 0x150(r1) +/* 00014FF0 00021D80 D0 01 01 54 */ stfs f0, 0x154(r1) +.L_00014FF4: +/* 00014FF4 00021D84 D0 01 01 58 */ stfs f0, 0x158(r1) +/* 00014FF8 00021D88 D0 01 01 5C */ stfs f0, 0x15c(r1) +/* 00014FFC 00021D8C D0 01 01 70 */ stfs f0, 0x170(r1) +/* 00015000 00021D90 D0 01 01 74 */ stfs f0, 0x174(r1) +/* 00015004 00021D94 D0 01 01 60 */ stfs f0, 0x160(r1) +/* 00015008 00021D98 D0 01 01 64 */ stfs f0, 0x164(r1) +.L_0001500C: +/* 0001500C 00021D9C D0 01 01 68 */ stfs f0, 0x168(r1) +/* 00015010 00021DA0 D0 01 01 6C */ stfs f0, 0x16c(r1) +/* 00015014 00021DA4 D0 01 01 7C */ stfs f0, 0x17c(r1) +/* 00015018 00021DA8 D0 01 01 80 */ stfs f0, 0x180(r1) +/* 0001501C 00021DAC D0 01 01 84 */ stfs f0, 0x184(r1) +/* 00015020 00021DB0 D0 01 01 88 */ stfs f0, 0x188(r1) +/* 00015024 00021DB4 D0 01 01 9C */ stfs f0, 0x19c(r1) +/* 00015028 00021DB8 D0 01 01 A0 */ stfs f0, 0x1a0(r1) +/* 0001502C 00021DBC D0 01 01 8C */ stfs f0, 0x18c(r1) +/* 00015030 00021DC0 D0 01 01 90 */ stfs f0, 0x190(r1) +/* 00015034 00021DC4 D0 01 01 94 */ stfs f0, 0x194(r1) +/* 00015038 00021DC8 D0 01 01 98 */ stfs f0, 0x198(r1) +/* 0001503C 00021DCC D0 01 01 A8 */ stfs f0, 0x1a8(r1) +/* 00015040 00021DD0 D0 01 01 AC */ stfs f0, 0x1ac(r1) +/* 00015044 00021DD4 D0 01 01 B0 */ stfs f0, 0x1b0(r1) +/* 00015048 00021DD8 D0 01 01 B4 */ stfs f0, 0x1b4(r1) +/* 0001504C 00021DDC B3 81 01 4A */ sth r28, 0x14a(r1) +/* 00015050 00021DE0 B3 81 01 78 */ sth r28, 0x178(r1) +/* 00015054 00021DE4 B3 81 01 7A */ sth r28, 0x17a(r1) +/* 00015058 00021DE8 B3 81 01 A4 */ sth r28, 0x1a4(r1) +/* 0001505C 00021DEC B3 81 01 A6 */ sth r28, 0x1a6(r1) +/* 00015060 00021DF0 D0 01 01 C8 */ stfs f0, 0x1c8(r1) +/* 00015064 00021DF4 D0 01 02 24 */ stfs f0, 0x224(r1) +/* 00015068 00021DF8 B3 81 02 32 */ sth r28, 0x232(r1) +/* 0001506C 00021DFC 81 3F 00 80 */ lwz r9, 0x80(r31) +/* 00015070 00021E00 D0 01 01 CC */ stfs f0, 0x1cc(r1) +/* 00015074 00021E04 D0 01 01 B8 */ stfs f0, 0x1b8(r1) +/* 00015078 00021E08 39 69 00 10 */ addi r11, r9, 0x10 +/* 0001507C 00021E0C D0 01 01 BC */ stfs f0, 0x1bc(r1) +/* 00015080 00021E10 D0 01 01 C0 */ stfs f0, 0x1c0(r1) +/* 00015084 00021E14 D0 01 01 C4 */ stfs f0, 0x1c4(r1) +/* 00015088 00021E18 D0 01 01 D8 */ stfs f0, 0x1d8(r1) +/* 0001508C 00021E1C D0 01 01 DC */ stfs f0, 0x1dc(r1) +/* 00015090 00021E20 D0 01 01 E0 */ stfs f0, 0x1e0(r1) +/* 00015094 00021E24 D0 01 01 E4 */ stfs f0, 0x1e4(r1) +/* 00015098 00021E28 D0 01 01 F8 */ stfs f0, 0x1f8(r1) +/* 0001509C 00021E2C D0 01 01 FC */ stfs f0, 0x1fc(r1) +/* 000150A0 00021E30 D0 01 01 E8 */ stfs f0, 0x1e8(r1) +/* 000150A4 00021E34 D0 01 01 EC */ stfs f0, 0x1ec(r1) +/* 000150A8 00021E38 D0 01 01 F0 */ stfs f0, 0x1f0(r1) +/* 000150AC 00021E3C D0 01 01 F4 */ stfs f0, 0x1f4(r1) +/* 000150B0 00021E40 D0 01 02 08 */ stfs f0, 0x208(r1) +/* 000150B4 00021E44 D0 01 02 0C */ stfs f0, 0x20c(r1) +/* 000150B8 00021E48 D0 01 02 10 */ stfs f0, 0x210(r1) +/* 000150BC 00021E4C D0 01 02 14 */ stfs f0, 0x214(r1) +/* 000150C0 00021E50 D0 01 02 28 */ stfs f0, 0x228(r1) +.L_000150C4: +/* 000150C4 00021E54 D0 01 02 2C */ stfs f0, 0x22c(r1) +.L_000150C8: +/* 000150C8 00021E58 D0 01 02 18 */ stfs f0, 0x218(r1) +/* 000150CC 00021E5C D0 01 02 1C */ stfs f0, 0x21c(r1) +/* 000150D0 00021E60 D0 01 02 20 */ stfs f0, 0x220(r1) +/* 000150D4 00021E64 B3 81 01 D0 */ sth r28, 0x1d0(r1) +/* 000150D8 00021E68 B3 81 01 D2 */ sth r28, 0x1d2(r1) +/* 000150DC 00021E6C B3 81 02 00 */ sth r28, 0x200(r1) +/* 000150E0 00021E70 B3 81 02 02 */ sth r28, 0x202(r1) +/* 000150E4 00021E74 B3 81 02 30 */ sth r28, 0x230(r1) +/* 000150E8 00021E78 C0 09 00 10 */ lfs f0, 0x10(r9) +/* 000150EC 00021E7C C1 A9 00 14 */ lfs f13, 0x14(r9) +/* 000150F0 00021E80 C1 89 00 18 */ lfs f12, 0x18(r9) +/* 000150F4 00021E84 C1 69 00 1C */ lfs f11, 0x1c(r9) +/* 000150F8 00021E88 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 000150FC 00021E8C D1 A1 00 0C */ stfs f13, 0xc(r1) +/* 00015100 00021E90 D1 88 00 08 */ stfs f12, 0x8(r8) +/* 00015104 00021E94 D1 61 00 14 */ stfs f11, 0x14(r1) +/* 00015108 00021E98 C1 4A 0C 14 */ lfs f10, .rodata+0xC14@l(r10) +/* 0001510C 00021E9C C1 6B 00 1C */ lfs f11, 0x1c(r11) +/* 00015110 00021EA0 C0 0B 00 10 */ lfs f0, 0x10(r11) +/* 00015114 00021EA4 C1 AB 00 14 */ lfs f13, 0x14(r11) +/* 00015118 00021EA8 C1 8B 00 18 */ lfs f12, 0x18(r11) +/* 0001511C 00021EAC D0 01 00 18 */ stfs f0, 0x18(r1) +/* 00015120 00021EB0 D1 A1 00 1C */ stfs f13, 0x1c(r1) +/* 00015124 00021EB4 D1 81 00 20 */ stfs f12, 0x20(r1) +/* 00015128 00021EB8 D1 61 00 24 */ stfs f11, 0x24(r1) +/* 0001512C 00021EBC C0 09 00 30 */ lfs f0, 0x30(r9) +/* 00015130 00021EC0 C1 A9 00 34 */ lfs f13, 0x34(r9) +/* 00015134 00021EC4 C1 89 00 38 */ lfs f12, 0x38(r9) +/* 00015138 00021EC8 C1 69 00 3C */ lfs f11, 0x3c(r9) +/* 0001513C 00021ECC D0 01 00 28 */ stfs f0, 0x28(r1) +/* 00015140 00021ED0 D1 A1 00 2C */ stfs f13, 0x2c(r1) +/* 00015144 00021ED4 D1 81 00 30 */ stfs f12, 0x30(r1) +/* 00015148 00021ED8 D1 61 00 34 */ stfs f11, 0x34(r1) +/* 0001514C 00021EDC C1 89 00 08 */ lfs f12, 0x8(r9) +/* 00015150 00021EE0 C0 09 00 00 */ lfs f0, 0x0(r9) +/* 00015154 00021EE4 C1 A9 00 04 */ lfs f13, 0x4(r9) +.L_00015158: +/* 00015158 00021EE8 D0 01 00 38 */ stfs f0, 0x38(r1) +/* 0001515C 00021EEC D1 A1 00 3C */ stfs f13, 0x3c(r1) +.L_00015160: +/* 00015160 00021EF0 D1 81 00 40 */ stfs f12, 0x40(r1) +/* 00015164 00021EF4 D1 41 00 44 */ stfs f10, 0x44(r1) +/* 00015168 00021EF8 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 +/* 0001516C 00021EFC 7F C4 F3 78 */ mr r4, r30 +/* 00015170 00021F00 7F A3 EB 78 */ mr r3, r29 +.L_00015174: +/* 00015174 00021F04 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 +/* 00015178 00021F08 7F 43 D3 78 */ mr r3, r26 +/* 0001517C 00021F0C 48 00 00 01 */ bl PSMTX44Identity +/* 00015180 00021F10 80 1F 00 BC */ lwz r0, 0xbc(r31) +.L_00015184: +/* 00015184 00021F14 2C 00 00 03 */ cmpwi r0, 0x3 +/* 00015188 00021F18 41 82 51 98 */ beq .L_0001A320 +/* 0001518C 00021F1C 80 1F 00 C0 */ lwz r0, 0xc0(r31) +/* 00015190 00021F20 2C 00 00 03 */ cmpwi r0, 0x3 +/* 00015194 00021F24 40 82 51 CC */ bne .L_0001A360 +/* 00015198 00021F28 48 01 9F D9 */ bl .text+0x19FD8 +/* 0001519C 00021F2C 7C 6B 1B 79 */ mr. r11, r3 +/* 000151A0 00021F30 41 82 51 CC */ beq .L_0001A36C +/* 000151A4 00021F34 81 2B 00 00 */ lwz r9, 0x0(r11) +/* 000151A8 00021F38 93 41 03 5C */ stw r26, 0x35c(r1) +/* 000151AC 00021F3C A8 69 00 68 */ lha r3, 0x68(r9) +/* 000151B0 00021F40 80 09 00 6C */ lwz r0, 0x6c(r9) +/* 000151B4 00021F44 7C 6B 1A 14 */ add r3, r11, r3 +/* 000151B8 00021F48 7C 08 03 A6 */ mtlr r0 +/* 000151BC 00021F4C 4E 80 00 21 */ blrl +/* 000151C0 00021F50 7C 64 1B 78 */ mr r4, r3 +/* 000151C4 00021F54 80 61 03 5C */ lwz r3, 0x35c(r1) +/* 000151C8 00021F58 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 +/* 000151CC 00021F5C 38 01 01 D8 */ addi r0, r1, 0x1d8 +/* 000151D0 00021F60 3D 20 00 00 */ lis r9, .rodata+0xC10@ha +/* 000151D4 00021F64 90 01 03 60 */ stw r0, 0x360(r1) +/* 000151D8 00021F68 39 61 02 78 */ addi r11, r1, 0x278 +/* 000151DC 00021F6C 38 01 02 08 */ addi r0, r1, 0x208 +/* 000151E0 00021F70 C0 09 0C 10 */ lfs f0, .rodata+0xC10@l(r9) +/* 000151E4 00021F74 90 01 03 64 */ stw r0, 0x364(r1) +/* 000151E8 00021F78 39 20 00 01 */ li r9, 0x1 +/* 000151EC 00021F7C 3B 21 02 98 */ addi r25, r1, 0x298 +/* 000151F0 00021F80 3B A1 02 B8 */ addi r29, r1, 0x2b8 +/* 000151F4 00021F84 3B 01 02 D8 */ addi r24, r1, 0x2d8 +/* 000151F8 00021F88 3A C1 02 88 */ addi r22, r1, 0x288 +/* 000151FC 00021F8C 3A 41 02 A8 */ addi r18, r1, 0x2a8 +/* 00015200 00021F90 39 C1 03 40 */ addi r14, r1, 0x340 +/* 00015204 00021F94 39 E1 03 48 */ addi r15, r1, 0x348 +/* 00015208 00021F98 3A E1 02 C8 */ addi r23, r1, 0x2c8 +/* 0001520C 00021F9C 3A 61 02 E8 */ addi r19, r1, 0x2e8 +/* 00015210 00021FA0 3B 81 00 C8 */ addi r28, r1, 0xc8 +/* 00015214 00021FA4 3B 41 01 50 */ addi r26, r1, 0x150 +/* 00015218 00021FA8 3A A1 02 F8 */ addi r21, r1, 0x2f8 +/* 0001521C 00021FAC 3A 81 03 08 */ addi r20, r1, 0x308 +/* 00015220 00021FB0 3A 21 03 18 */ addi r17, r1, 0x318 +.L_00015224: +/* 00015224 00021FB4 3A 01 03 28 */ addi r16, r1, 0x328 +.L_00015228: +/* 00015228 00021FB8 D0 0B 00 00 */ stfs f0, 0x0(r11) +/* 0001522C 00021FBC 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00015230 00021FC0 D0 0B 00 04 */ stfs f0, 0x4(r11) +/* 00015234 00021FC4 39 29 FF FF */ subi r9, r9, 0x1 +/* 00015238 00021FC8 D0 0B 00 08 */ stfs f0, 0x8(r11) +/* 0001523C 00021FCC D0 0B 00 0C */ stfs f0, 0xc(r11) +/* 00015240 00021FD0 39 6B 00 10 */ addi r11, r11, 0x10 +/* 00015244 00021FD4 40 82 52 28 */ bne .L_0001A46C +/* 00015248 00021FD8 3D 20 00 00 */ lis r9, .rodata+0xC10@ha +/* 0001524C 00021FDC 7F 2B CB 78 */ mr r11, r25 +/* 00015250 00021FE0 C0 09 0C 10 */ lfs f0, .rodata+0xC10@l(r9) +/* 00015254 00021FE4 39 20 00 01 */ li r9, 0x1 +/* 00015258 00021FE8 D0 0B 00 00 */ stfs f0, 0x0(r11) +/* 0001525C 00021FEC 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00015260 00021FF0 D0 0B 00 04 */ stfs f0, 0x4(r11) +/* 00015264 00021FF4 39 29 FF FF */ subi r9, r9, 0x1 +/* 00015268 00021FF8 D0 0B 00 08 */ stfs f0, 0x8(r11) +/* 0001526C 00021FFC D0 0B 00 0C */ stfs f0, 0xc(r11) +/* 00015270 00022000 39 6B 00 10 */ addi r11, r11, 0x10 +/* 00015274 00022004 40 82 52 58 */ bne .L_0001A4CC +/* 00015278 00022008 3D 20 00 00 */ lis r9, .rodata+0xC10@ha +/* 0001527C 0002200C 7F AB EB 78 */ mr r11, r29 +/* 00015280 00022010 C0 09 0C 10 */ lfs f0, .rodata+0xC10@l(r9) +/* 00015284 00022014 39 20 00 01 */ li r9, 0x1 +/* 00015288 00022018 D0 0B 00 00 */ stfs f0, 0x0(r11) +/* 0001528C 0002201C 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00015290 00022020 D0 0B 00 04 */ stfs f0, 0x4(r11) +/* 00015294 00022024 39 29 FF FF */ subi r9, r9, 0x1 +/* 00015298 00022028 D0 0B 00 08 */ stfs f0, 0x8(r11) +/* 0001529C 0002202C D0 0B 00 0C */ stfs f0, 0xc(r11) +/* 000152A0 00022030 39 6B 00 10 */ addi r11, r11, 0x10 +/* 000152A4 00022034 40 82 52 88 */ bne .L_0001A52C +/* 000152A8 00022038 3D 20 00 00 */ lis r9, .rodata+0xC10@ha +/* 000152AC 0002203C 7F 0B C3 78 */ mr r11, r24 +/* 000152B0 00022040 C0 09 0C 10 */ lfs f0, .rodata+0xC10@l(r9) +/* 000152B4 00022044 39 20 00 01 */ li r9, 0x1 +.L_000152B8: +/* 000152B8 00022048 D0 0B 00 00 */ stfs f0, 0x0(r11) +/* 000152BC 0002204C 2C 09 00 00 */ cmpwi r9, 0x0 +.L_000152C0: +/* 000152C0 00022050 D0 0B 00 04 */ stfs f0, 0x4(r11) +/* 000152C4 00022054 39 29 FF FF */ subi r9, r9, 0x1 +/* 000152C8 00022058 D0 0B 00 08 */ stfs f0, 0x8(r11) +/* 000152CC 0002205C D0 0B 00 0C */ stfs f0, 0xc(r11) +/* 000152D0 00022060 39 6B 00 10 */ addi r11, r11, 0x10 +.L_000152D4: +/* 000152D4 00022064 40 82 52 B8 */ bne .L_0001A58C +/* 000152D8 00022068 38 A1 02 78 */ addi r5, r1, 0x278 +/* 000152DC 0002206C 7F 63 DB 78 */ mr r3, r27 +/* 000152E0 00022070 38 80 00 00 */ li r4, 0x0 +.L_000152E4: +/* 000152E4 00022074 48 01 35 FD */ bl .text+0x135FC +/* 000152E8 00022078 7F 63 DB 78 */ mr r3, r27 +/* 000152EC 0002207C 38 80 00 01 */ li r4, 0x1 +/* 000152F0 00022080 7E C5 B3 78 */ mr r5, r22 +/* 000152F4 00022084 48 01 35 FD */ bl .text+0x135FC +/* 000152F8 00022088 7F 63 DB 78 */ mr r3, r27 +/* 000152FC 0002208C 38 80 00 00 */ li r4, 0x0 +/* 00015300 00022090 7F 25 CB 78 */ mr r5, r25 +/* 00015304 00022094 48 01 36 75 */ bl .text+0x13674 +/* 00015308 00022098 7F 63 DB 78 */ mr r3, r27 +/* 0001530C 0002209C 38 80 00 01 */ li r4, 0x1 +/* 00015310 000220A0 7E 45 93 78 */ mr r5, r18 +/* 00015314 000220A4 48 01 36 75 */ bl .text+0x13674 +/* 00015318 000220A8 3F C0 00 00 */ lis r30, TheICEManager@ha +/* 0001531C 000220AC 81 41 03 38 */ lwz r10, 0x338(r1) +/* 00015320 000220B0 3B DE 00 00 */ addi r30, r30, TheICEManager@l +/* 00015324 000220B4 7F A4 EB 78 */ mr r4, r29 +/* 00015328 000220B8 7F C3 F3 78 */ mr r3, r30 +/* 0001532C 000220BC 7F 05 C3 78 */ mr r5, r24 +/* 00015330 000220C0 7D C6 73 78 */ mr r6, r14 +/* 00015334 000220C4 7D E7 7B 78 */ mr r7, r15 +/* 00015338 000220C8 7F 68 DB 78 */ mr r8, r27 +/* 0001533C 000220CC 39 20 00 00 */ li r9, 0x0 +/* 00015340 000220D0 48 01 97 F9 */ bl .text+0x197F8 +/* 00015344 000220D4 81 41 03 38 */ lwz r10, 0x338(r1) +/* 00015348 000220D8 7E 65 9B 78 */ mr r5, r19 +/* 0001534C 000220DC 38 C1 03 44 */ addi r6, r1, 0x344 +/* 00015350 000220E0 38 E1 03 4C */ addi r7, r1, 0x34c +/* 00015354 000220E4 7F 68 DB 78 */ mr r8, r27 +/* 00015358 000220E8 39 20 00 01 */ li r9, 0x1 +/* 0001535C 000220EC 7F C3 F3 78 */ mr r3, r30 +/* 00015360 000220F0 7E E4 BB 78 */ mr r4, r23 +.L_00015364: +/* 00015364 000220F4 48 01 97 F9 */ bl .text+0x197F8 +/* 00015368 000220F8 38 81 02 78 */ addi r4, r1, 0x278 +/* 0001536C 000220FC 7F 83 E3 78 */ mr r3, r28 +/* 00015370 00022100 48 01 47 89 */ bl .text+0x14788 +.L_00015374: +/* 00015374 00022104 7F A4 EB 78 */ mr r4, r29 +/* 00015378 00022108 7F 83 E3 78 */ mr r3, r28 +/* 0001537C 0002210C 48 01 47 E1 */ bl .text+0x147E0 +/* 00015380 00022110 7E C4 B3 78 */ mr r4, r22 +.L_00015384: +/* 00015384 00022114 7F 83 E3 78 */ mr r3, r28 +.L_00015388: +/* 00015388 00022118 48 01 48 39 */ bl .text+0x14838 +/* 0001538C 0002211C 7E E4 BB 78 */ mr r4, r23 +/* 00015390 00022120 7F 83 E3 78 */ mr r3, r28 +/* 00015394 00022124 48 01 48 91 */ bl .text+0x14890 +/* 00015398 00022128 7F 24 CB 78 */ mr r4, r25 +/* 0001539C 0002212C 7F 43 D3 78 */ mr r3, r26 +/* 000153A0 00022130 48 01 47 89 */ bl .text+0x14788 +/* 000153A4 00022134 7F 04 C3 78 */ mr r4, r24 +/* 000153A8 00022138 7F 43 D3 78 */ mr r3, r26 +/* 000153AC 0002213C 48 01 47 E1 */ bl .text+0x147E0 +/* 000153B0 00022140 7E 44 93 78 */ mr r4, r18 +/* 000153B4 00022144 7F 43 D3 78 */ mr r3, r26 +/* 000153B8 00022148 48 01 48 39 */ bl .text+0x14838 +/* 000153BC 0002214C 7E 64 9B 78 */ mr r4, r19 +/* 000153C0 00022150 7F 43 D3 78 */ mr r3, r26 +/* 000153C4 00022154 48 01 48 91 */ bl .text+0x14890 +/* 000153C8 00022158 C0 1B 00 4C */ lfs f0, 0x4c(r27) +/* 000153CC 0002215C C1 A1 01 E0 */ lfs f13, 0x1e0(r1) +/* 000153D0 00022160 D0 01 01 D8 */ stfs f0, 0x1d8(r1) +/* 000153D4 00022164 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 000153D8 00022168 41 82 53 E4 */ beq .L_0001A7BC +/* 000153DC 0002216C 38 00 00 02 */ li r0, 0x2 +/* 000153E0 00022170 B0 01 02 00 */ sth r0, 0x200(r1) +/* 000153E4 00022174 C0 01 03 48 */ lfs f0, 0x348(r1) +/* 000153E8 00022178 C1 A1 01 E4 */ lfs f13, 0x1e4(r1) +/* 000153EC 0002217C D0 01 01 DC */ stfs f0, 0x1dc(r1) +/* 000153F0 00022180 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 000153F4 00022184 41 82 54 00 */ beq .L_0001A7F4 +/* 000153F8 00022188 38 00 00 02 */ li r0, 0x2 +/* 000153FC 0002218C B0 01 02 00 */ sth r0, 0x200(r1) +/* 00015400 00022190 C0 1B 00 50 */ lfs f0, 0x50(r27) +/* 00015404 00022194 C1 A1 01 D8 */ lfs f13, 0x1d8(r1) +/* 00015408 00022198 D0 01 01 E0 */ stfs f0, 0x1e0(r1) +/* 0001540C 0002219C FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00015410 000221A0 41 82 54 1C */ beq .L_0001A82C +/* 00015414 000221A4 38 00 00 02 */ li r0, 0x2 +.L_00015418: +/* 00015418 000221A8 B0 01 02 00 */ sth r0, 0x200(r1) +/* 0001541C 000221AC C0 0F 00 04 */ lfs f0, 0x4(r15) +.L_00015420: +/* 00015420 000221B0 C1 A1 01 DC */ lfs f13, 0x1dc(r1) +/* 00015424 000221B4 D0 01 01 E4 */ stfs f0, 0x1e4(r1) +/* 00015428 000221B8 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 0001542C 000221BC 41 82 54 38 */ beq .L_0001A864 +/* 00015430 000221C0 38 00 00 02 */ li r0, 0x2 +.L_00015434: +/* 00015434 000221C4 B0 01 02 00 */ sth r0, 0x200(r1) +/* 00015438 000221C8 C0 3B 00 54 */ lfs f1, 0x54(r27) +/* 0001543C 000221CC 48 01 38 9D */ bl .text+0x1389C +/* 00015440 000221D0 C0 3B 00 58 */ lfs f1, 0x58(r27) +.L_00015444: +/* 00015444 000221D4 7C 7E 1B 78 */ mr r30, r3 +/* 00015448 000221D8 48 01 38 9D */ bl .text+0x1389C +/* 0001544C 000221DC C0 41 03 40 */ lfs f2, 0x340(r1) +/* 00015450 000221E0 7C 7D 1B 78 */ mr r29, r3 +/* 00015454 000221E4 C0 3B 00 54 */ lfs f1, 0x54(r27) +/* 00015458 000221E8 48 01 39 35 */ bl .text+0x13934 +/* 0001545C 000221EC FF E0 08 90 */ fmr f31, f1 +/* 00015460 000221F0 C0 4E 00 04 */ lfs f2, 0x4(r14) +/* 00015464 000221F4 C0 3B 00 58 */ lfs f1, 0x58(r27) +/* 00015468 000221F8 48 01 39 35 */ bl .text+0x13934 +/* 0001546C 000221FC 3D 40 43 30 */ lis r10, 0x4330 +/* 00015470 00022200 93 C1 03 7C */ stw r30, 0x37c(r1) +/* 00015474 00022204 3D 60 00 00 */ lis r11, .rodata+0xC18@ha +/* 00015478 00022208 C9 8B 0C 18 */ lfd f12, .rodata+0xC18@l(r11) +/* 0001547C 0002220C 91 41 03 78 */ stw r10, 0x378(r1) +/* 00015480 00022210 C1 A1 02 10 */ lfs f13, 0x210(r1) +/* 00015484 00022214 C8 01 03 78 */ lfd f0, 0x378(r1) +/* 00015488 00022218 FC 00 60 28 */ fsub f0, f0, f12 +/* 0001548C 0002221C FC 00 00 18 */ frsp f0, f0 +/* 00015490 00022220 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00015494 00022224 D0 01 02 08 */ stfs f0, 0x208(r1) +/* 00015498 00022228 41 82 54 A4 */ beq .L_0001A93C +/* 0001549C 0002222C 38 00 00 02 */ li r0, 0x2 +/* 000154A0 00022230 B0 01 02 30 */ sth r0, 0x230(r1) +/* 000154A4 00022234 C0 01 02 14 */ lfs f0, 0x214(r1) +/* 000154A8 00022238 D3 E1 02 0C */ stfs f31, 0x20c(r1) +/* 000154AC 0002223C FC 1F 00 00 */ fcmpu cr0, f31, f0 +/* 000154B0 00022240 41 82 54 BC */ beq .L_0001A96C +/* 000154B4 00022244 38 00 00 02 */ li r0, 0x2 +/* 000154B8 00022248 B0 01 02 30 */ sth r0, 0x230(r1) +/* 000154BC 0002224C C1 A1 02 08 */ lfs f13, 0x208(r1) +/* 000154C0 00022250 93 A1 03 7C */ stw r29, 0x37c(r1) +/* 000154C4 00022254 91 41 03 78 */ stw r10, 0x378(r1) +/* 000154C8 00022258 C8 01 03 78 */ lfd f0, 0x378(r1) +/* 000154CC 0002225C FC 00 60 28 */ fsub f0, f0, f12 +/* 000154D0 00022260 FC 00 00 18 */ frsp f0, f0 +/* 000154D4 00022264 FC 00 68 00 */ fcmpu cr0, f0, f13 +.L_000154D8: +/* 000154D8 00022268 D0 01 02 10 */ stfs f0, 0x210(r1) +/* 000154DC 0002226C 41 82 54 E8 */ beq .L_0001A9C4 +/* 000154E0 00022270 38 00 00 02 */ li r0, 0x2 +.L_000154E4: +/* 000154E4 00022274 B0 01 02 30 */ sth r0, 0x230(r1) +.L_000154E8: +/* 000154E8 00022278 C0 01 02 0C */ lfs f0, 0x20c(r1) +/* 000154EC 0002227C D0 21 02 14 */ stfs f1, 0x214(r1) +/* 000154F0 00022280 FC 01 00 00 */ fcmpu cr0, f1, f0 +.L_000154F4: +/* 000154F4 00022284 41 82 55 00 */ beq .L_0001A9F4 +/* 000154F8 00022288 38 00 00 02 */ li r0, 0x2 +/* 000154FC 0002228C B0 01 02 30 */ sth r0, 0x230(r1) +/* 00015500 00022290 40 8E 55 1C */ bne cr3, .L_0001AA1C +/* 00015504 00022294 80 01 03 54 */ lwz r0, 0x354(r1) +/* 00015508 00022298 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0001550C 0002229C 40 82 55 1C */ bne .L_0001AA28 +/* 00015510 000222A0 81 21 03 58 */ lwz r9, 0x358(r1) +/* 00015514 000222A4 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00015518 000222A8 41 82 55 B0 */ beq .L_0001AAC8 +/* 0001551C 000222AC 80 61 03 68 */ lwz r3, 0x368(r1) +/* 00015520 000222B0 48 00 00 01 */ bl PSMTX44Identity +/* 00015524 000222B4 81 3F 00 80 */ lwz r9, 0x80(r31) +/* 00015528 000222B8 3D 40 00 00 */ lis r10, .rodata+0xC14@ha +/* 0001552C 000222BC C1 69 00 10 */ lfs f11, 0x10(r9) +/* 00015530 000222C0 39 69 00 10 */ addi r11, r9, 0x10 +/* 00015534 000222C4 C0 09 00 14 */ lfs f0, 0x14(r9) +/* 00015538 000222C8 C1 A9 00 18 */ lfs f13, 0x18(r9) +/* 0001553C 000222CC C1 89 00 1C */ lfs f12, 0x1c(r9) +/* 00015540 000222D0 D1 7F 00 CC */ stfs f11, 0xcc(r31) +/* 00015544 000222D4 D0 1F 00 D0 */ stfs f0, 0xd0(r31) +/* 00015548 000222D8 D1 BF 00 D4 */ stfs f13, 0xd4(r31) +/* 0001554C 000222DC D1 9F 00 D8 */ stfs f12, 0xd8(r31) +/* 00015550 000222E0 C1 6B 00 1C */ lfs f11, 0x1c(r11) +/* 00015554 000222E4 C0 0B 00 10 */ lfs f0, 0x10(r11) +/* 00015558 000222E8 C1 AB 00 14 */ lfs f13, 0x14(r11) +/* 0001555C 000222EC C1 8B 00 18 */ lfs f12, 0x18(r11) +.L_00015560: +/* 00015560 000222F0 D0 1F 00 DC */ stfs f0, 0xdc(r31) +/* 00015564 000222F4 D1 BF 00 E0 */ stfs f13, 0xe0(r31) +/* 00015568 000222F8 D1 9F 00 E4 */ stfs f12, 0xe4(r31) +/* 0001556C 000222FC D1 7F 00 E8 */ stfs f11, 0xe8(r31) +/* 00015570 00022300 C0 09 00 30 */ lfs f0, 0x30(r9) +/* 00015574 00022304 C1 A9 00 34 */ lfs f13, 0x34(r9) +.L_00015578: +/* 00015578 00022308 C1 89 00 38 */ lfs f12, 0x38(r9) +/* 0001557C 0002230C C1 69 00 3C */ lfs f11, 0x3c(r9) +.L_00015580: +/* 00015580 00022310 D0 1F 00 EC */ stfs f0, 0xec(r31) +/* 00015584 00022314 D1 BF 00 F0 */ stfs f13, 0xf0(r31) +/* 00015588 00022318 D1 9F 00 F4 */ stfs f12, 0xf4(r31) +/* 0001558C 0002231C D1 7F 00 F8 */ stfs f11, 0xf8(r31) +/* 00015590 00022320 C1 4A 0C 14 */ lfs f10, .rodata+0xC14@l(r10) +.L_00015594: +/* 00015594 00022324 C1 89 00 08 */ lfs f12, 0x8(r9) +/* 00015598 00022328 C0 09 00 00 */ lfs f0, 0x0(r9) +/* 0001559C 0002232C C1 A9 00 04 */ lfs f13, 0x4(r9) +/* 000155A0 00022330 D0 1F 00 FC */ stfs f0, 0xfc(r31) +.L_000155A4: +/* 000155A4 00022334 D1 BF 01 00 */ stfs f13, 0x100(r31) +/* 000155A8 00022338 D1 9F 01 04 */ stfs f12, 0x104(r31) +.L_000155AC: +/* 000155AC 0002233C D1 5F 01 08 */ stfs f10, 0x108(r31) +/* 000155B0 00022340 80 1F 00 BC */ lwz r0, 0xbc(r31) +/* 000155B4 00022344 7C 09 03 78 */ mr r9, r0 +/* 000155B8 00022348 2C 00 00 02 */ cmpwi r0, 0x2 +/* 000155BC 0002234C 41 82 55 E4 */ beq .L_0001ABA0 +/* 000155C0 00022350 41 81 55 D0 */ bgt .L_0001AB90 +/* 000155C4 00022354 2C 09 00 00 */ cmpwi r9, 0x0 +/* 000155C8 00022358 41 82 55 DC */ beq .L_0001ABA4 +/* 000155CC 0002235C 48 01 55 F4 */ b .text+0x155F4 +/* 000155D0 00022360 2C 09 00 03 */ cmpwi r9, 0x3 +/* 000155D4 00022364 41 82 55 EC */ beq .L_0001ABC0 +/* 000155D8 00022368 48 01 55 F4 */ b .text+0x155F4 +/* 000155DC 0002236C 38 A1 00 48 */ addi r5, r1, 0x48 +.L_000155E0: +/* 000155E0 00022370 48 01 55 F8 */ b .text+0x155F8 +/* 000155E4 00022374 38 A1 00 88 */ addi r5, r1, 0x88 +/* 000155E8 00022378 48 01 55 F8 */ b .text+0x155F8 +/* 000155EC 0002237C 80 A1 03 5C */ lwz r5, 0x35c(r1) +/* 000155F0 00022380 48 01 55 F8 */ b .text+0x155F8 +/* 000155F4 00022384 38 A0 00 00 */ li r5, 0x0 +/* 000155F8 00022388 80 1F 00 C0 */ lwz r0, 0xc0(r31) +/* 000155FC 0002238C 7C 0B 03 78 */ mr r11, r0 +/* 00015600 00022390 2C 00 00 02 */ cmpwi r0, 0x2 +/* 00015604 00022394 41 82 56 2C */ beq .L_0001AC30 +/* 00015608 00022398 41 81 56 18 */ bgt find__H2ZPP10IRoadBlockZP10IRoadBlock_4_STLX01X01RCX11_X01 +/* 0001560C 0002239C 2C 0B 00 00 */ cmpwi r11, 0x0 +.L_00015610: +/* 00015610 000223A0 41 82 56 24 */ beq .L_0001AC34 +/* 00015614 000223A4 48 01 56 3C */ b .text+0x1563C +.L_00015618: +/* 00015618 000223A8 2C 0B 00 03 */ cmpwi r11, 0x3 +/* 0001561C 000223AC 41 82 56 34 */ beq .L_0001AC50 +/* 00015620 000223B0 48 01 56 3C */ b .text+0x1563C +/* 00015624 000223B4 3B A1 00 48 */ addi r29, r1, 0x48 +/* 00015628 000223B8 48 01 56 40 */ b .text+0x15640 +/* 0001562C 000223BC 3B A1 00 88 */ addi r29, r1, 0x88 +/* 00015630 000223C0 48 01 56 40 */ b .text+0x15640 +.L_00015634: +/* 00015634 000223C4 83 A1 03 5C */ lwz r29, 0x35c(r1) +/* 00015638 000223C8 48 01 56 40 */ b .text+0x15640 +/* 0001563C 000223CC 3B A0 00 00 */ li r29, 0x0 +/* 00015640 000223D0 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00015644 000223D4 40 82 56 54 */ bne .L_0001AC98 +/* 00015648 000223D8 81 3F 00 80 */ lwz r9, 0x80(r31) +/* 0001564C 000223DC 38 C9 00 50 */ addi r6, r9, 0x50 +/* 00015650 000223E0 48 01 56 58 */ b .text+0x15658 +.L_00015654: +/* 00015654 000223E4 38 C0 00 00 */ li r6, 0x0 +/* 00015658 000223E8 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0001565C 000223EC 40 82 56 6C */ bne .L_0001ACC8 +/* 00015660 000223F0 81 3F 00 80 */ lwz r9, 0x80(r31) +.L_00015664: +/* 00015664 000223F4 3B C9 00 50 */ addi r30, r9, 0x50 +.L_00015668: +/* 00015668 000223F8 48 01 56 70 */ b .text+0x15670 +.L_0001566C: +/* 0001566C 000223FC 3B C0 00 00 */ li r30, 0x0 +/* 00015670 00022400 7F E3 FB 78 */ mr r3, r31 +/* 00015674 00022404 7F 84 E3 78 */ mr r4, r28 +/* 00015678 00022408 48 01 49 D9 */ bl .text+0x149D8 +/* 0001567C 0002240C 7F A5 EB 78 */ mr r5, r29 +/* 00015680 00022410 7F C6 F3 78 */ mr r6, r30 +/* 00015684 00022414 7F E3 FB 78 */ mr r3, r31 +/* 00015688 00022418 7F 44 D3 78 */ mr r4, r26 +/* 0001568C 0002241C 48 01 4B 29 */ bl .text+0x14B28 +/* 00015690 00022420 80 81 03 60 */ lwz r4, 0x360(r1) +/* 00015694 00022424 7F E3 FB 78 */ mr r3, r31 +/* 00015698 00022428 48 01 4C 79 */ bl .text+0x14C78 +/* 0001569C 0002242C 80 81 03 64 */ lwz r4, 0x364(r1) +/* 000156A0 00022430 7F E3 FB 78 */ mr r3, r31 +/* 000156A4 00022434 48 01 4C B5 */ bl .text+0x14CB4 +/* 000156A8 00022438 3C 60 00 00 */ lis r3, TheICEManager@ha +/* 000156AC 0002243C 38 63 00 00 */ addi r3, r3, TheICEManager@l +.L_000156B0: +/* 000156B0 00022440 48 01 84 D5 */ bl .text+0x184D4 +/* 000156B4 00022444 C0 1F 00 B4 */ lfs f0, 0xb4(r31) +/* 000156B8 00022448 C1 BF 00 B8 */ lfs f13, 0xb8(r31) +/* 000156BC 0002244C EC 01 00 28 */ fsubs f0, f1, f0 +/* 000156C0 00022450 EC 21 68 28 */ fsubs f1, f1, f13 +/* 000156C4 00022454 FC 00 02 10 */ fabs f0, f0 +/* 000156C8 00022458 FC 20 0A 10 */ fabs f1, f1 +/* 000156CC 0002245C FC 01 00 00 */ fcmpu cr0, f1, f0 +/* 000156D0 00022460 41 81 57 D8 */ bgt find__H2ZPP7IPlayerZP7IPlayer_4_STLX01X01RCX11_X01 +/* 000156D4 00022464 3D 20 00 00 */ lis r9, .rodata+0xC10@ha +/* 000156D8 00022468 7F 83 E3 78 */ mr r3, r28 +/* 000156DC 0002246C C0 09 0C 10 */ lfs f0, .rodata+0xC10@l(r9) +/* 000156E0 00022470 7E A4 AB 78 */ mr r4, r21 +/* 000156E4 00022474 D0 01 03 34 */ stfs f0, 0x334(r1) +/* 000156E8 00022478 D0 01 02 F8 */ stfs f0, 0x2f8(r1) +/* 000156EC 0002247C D0 01 02 FC */ stfs f0, 0x2fc(r1) +.L_000156F0: +/* 000156F0 00022480 D0 01 03 00 */ stfs f0, 0x300(r1) +/* 000156F4 00022484 D0 01 03 04 */ stfs f0, 0x304(r1) +/* 000156F8 00022488 D0 01 03 08 */ stfs f0, 0x308(r1) +/* 000156FC 0002248C D0 01 03 0C */ stfs f0, 0x30c(r1) +/* 00015700 00022490 D0 01 03 10 */ stfs f0, 0x310(r1) +/* 00015704 00022494 D0 01 03 14 */ stfs f0, 0x314(r1) +/* 00015708 00022498 D0 01 03 18 */ stfs f0, 0x318(r1) +/* 0001570C 0002249C D0 01 03 1C */ stfs f0, 0x31c(r1) +/* 00015710 000224A0 D0 01 03 20 */ stfs f0, 0x320(r1) +/* 00015714 000224A4 D0 01 03 24 */ stfs f0, 0x324(r1) +/* 00015718 000224A8 D0 01 03 28 */ stfs f0, 0x328(r1) +/* 0001571C 000224AC D0 01 03 2C */ stfs f0, 0x32c(r1) +/* 00015720 000224B0 D0 01 03 30 */ stfs f0, 0x330(r1) +/* 00015724 000224B4 48 01 48 AD */ bl .text+0x148AC +/* 00015728 000224B8 7F 83 E3 78 */ mr r3, r28 +/* 0001572C 000224BC 7E 84 A3 78 */ mr r4, r20 +/* 00015730 000224C0 48 01 48 C9 */ bl .text+0x148C8 +.L_00015734: +/* 00015734 000224C4 80 7F 00 84 */ lwz r3, 0x84(r31) +.L_00015738: +/* 00015738 000224C8 7E A4 AB 78 */ mr r4, r21 +/* 0001573C 000224CC 48 01 48 39 */ bl .text+0x14838 +/* 00015740 000224D0 80 7F 00 84 */ lwz r3, 0x84(r31) +/* 00015744 000224D4 7E 84 A3 78 */ mr r4, r20 +.L_00015748: +/* 00015748 000224D8 48 01 48 91 */ bl .text+0x14890 +/* 0001574C 000224DC 7F 43 D3 78 */ mr r3, r26 +.L_00015750: +/* 00015750 000224E0 7E 24 8B 78 */ mr r4, r17 +/* 00015754 000224E4 48 01 48 AD */ bl .text+0x148AC +/* 00015758 000224E8 7F 43 D3 78 */ mr r3, r26 +/* 0001575C 000224EC 7E 04 83 78 */ mr r4, r16 +/* 00015760 000224F0 48 01 48 C9 */ bl .text+0x148C8 +/* 00015764 000224F4 80 7F 00 88 */ lwz r3, 0x88(r31) +/* 00015768 000224F8 7E 24 8B 78 */ mr r4, r17 +/* 0001576C 000224FC 48 01 48 39 */ bl .text+0x14838 +.L_00015770: +/* 00015770 00022500 80 7F 00 88 */ lwz r3, 0x88(r31) +/* 00015774 00022504 7E 04 83 78 */ mr r4, r16 +/* 00015778 00022508 48 01 48 91 */ bl .text+0x14890 +/* 0001577C 0002250C 81 3F 00 8C */ lwz r9, 0x8c(r31) +/* 00015780 00022510 C0 01 01 D8 */ lfs f0, 0x1d8(r1) +/* 00015784 00022514 C1 A9 00 00 */ lfs f13, 0x0(r9) +/* 00015788 00022518 D0 09 00 08 */ stfs f0, 0x8(r9) +/* 0001578C 0002251C FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00015790 00022520 41 82 57 9C */ beq .L_0001AF2C +/* 00015794 00022524 38 00 00 02 */ li r0, 0x2 +/* 00015798 00022528 B0 09 00 28 */ sth r0, 0x28(r9) +/* 0001579C 0002252C C0 01 01 DC */ lfs f0, 0x1dc(r1) +/* 000157A0 00022530 81 3F 00 8C */ lwz r9, 0x8c(r31) +.L_000157A4: +/* 000157A4 00022534 D0 09 00 0C */ stfs f0, 0xc(r9) +/* 000157A8 00022538 81 3F 00 90 */ lwz r9, 0x90(r31) +/* 000157AC 0002253C C0 01 02 08 */ lfs f0, 0x208(r1) +/* 000157B0 00022540 C1 A9 00 00 */ lfs f13, 0x0(r9) +/* 000157B4 00022544 D0 09 00 08 */ stfs f0, 0x8(r9) +/* 000157B8 00022548 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 000157BC 0002254C 41 82 57 C8 */ beq .L_0001AF84 +.L_000157C0: +/* 000157C0 00022550 38 00 00 02 */ li r0, 0x2 +.L_000157C4: +/* 000157C4 00022554 B0 09 00 28 */ sth r0, 0x28(r9) +.L_000157C8: +/* 000157C8 00022558 C0 01 02 0C */ lfs f0, 0x20c(r1) +/* 000157CC 0002255C 81 3F 00 90 */ lwz r9, 0x90(r31) +.L_000157D0: +/* 000157D0 00022560 D0 09 00 0C */ stfs f0, 0xc(r9) +/* 000157D4 00022564 48 01 59 00 */ b .text+0x15900 +/* 000157D8 00022568 3D 20 00 00 */ lis r9, .rodata+0xC10@ha +/* 000157DC 0002256C 7F 83 E3 78 */ mr r3, r28 +/* 000157E0 00022570 C0 09 0C 10 */ lfs f0, .rodata+0xC10@l(r9) +.L_000157E4: +/* 000157E4 00022574 7E A4 AB 78 */ mr r4, r21 +/* 000157E8 00022578 D0 01 03 34 */ stfs f0, 0x334(r1) +/* 000157EC 0002257C D0 01 02 F8 */ stfs f0, 0x2f8(r1) +/* 000157F0 00022580 D0 01 02 FC */ stfs f0, 0x2fc(r1) +.L_000157F4: +/* 000157F4 00022584 D0 01 03 00 */ stfs f0, 0x300(r1) +/* 000157F8 00022588 D0 01 03 04 */ stfs f0, 0x304(r1) +.L_000157FC: +/* 000157FC 0002258C D0 01 03 08 */ stfs f0, 0x308(r1) +.L_00015800: +/* 00015800 00022590 D0 01 03 0C */ stfs f0, 0x30c(r1) +.L_00015804: +/* 00015804 00022594 D0 01 03 10 */ stfs f0, 0x310(r1) +/* 00015808 00022598 D0 01 03 14 */ stfs f0, 0x314(r1) +/* 0001580C 0002259C D0 01 03 18 */ stfs f0, 0x318(r1) +/* 00015810 000225A0 D0 01 03 1C */ stfs f0, 0x31c(r1) +.L_00015814: +/* 00015814 000225A4 D0 01 03 20 */ stfs f0, 0x320(r1) +.L_00015818: +/* 00015818 000225A8 D0 01 03 24 */ stfs f0, 0x324(r1) +.L_0001581C: +/* 0001581C 000225AC D0 01 03 28 */ stfs f0, 0x328(r1) +/* 00015820 000225B0 D0 01 03 2C */ stfs f0, 0x32c(r1) +/* 00015824 000225B4 D0 01 03 30 */ stfs f0, 0x330(r1) +/* 00015828 000225B8 48 01 48 AD */ bl .text+0x148AC +/* 0001582C 000225BC 7F 83 E3 78 */ mr r3, r28 +/* 00015830 000225C0 7E 84 A3 78 */ mr r4, r20 +/* 00015834 000225C4 48 01 48 C9 */ bl .text+0x148C8 +/* 00015838 000225C8 80 7F 00 84 */ lwz r3, 0x84(r31) +/* 0001583C 000225CC 7E A4 AB 78 */ mr r4, r21 +/* 00015840 000225D0 48 01 47 89 */ bl .text+0x14788 +/* 00015844 000225D4 80 7F 00 84 */ lwz r3, 0x84(r31) +/* 00015848 000225D8 7E 84 A3 78 */ mr r4, r20 +/* 0001584C 000225DC 48 01 47 E1 */ bl .text+0x147E0 +.L_00015850: +/* 00015850 000225E0 7F 43 D3 78 */ mr r3, r26 +.L_00015854: +/* 00015854 000225E4 7E 24 8B 78 */ mr r4, r17 +/* 00015858 000225E8 48 01 48 AD */ bl .text+0x148AC +/* 0001585C 000225EC 7F 43 D3 78 */ mr r3, r26 +/* 00015860 000225F0 7E 04 83 78 */ mr r4, r16 +/* 00015864 000225F4 48 01 48 C9 */ bl .text+0x148C8 +/* 00015868 000225F8 80 7F 00 88 */ lwz r3, 0x88(r31) +/* 0001586C 000225FC 7E 24 8B 78 */ mr r4, r17 +.L_00015870: +/* 00015870 00022600 48 01 47 89 */ bl .text+0x14788 +/* 00015874 00022604 80 7F 00 88 */ lwz r3, 0x88(r31) +/* 00015878 00022608 7E 04 83 78 */ mr r4, r16 +.L_0001587C: +/* 0001587C 0002260C 48 01 47 E1 */ bl .text+0x147E0 +/* 00015880 00022610 81 3F 00 8C */ lwz r9, 0x8c(r31) +/* 00015884 00022614 C0 01 01 D8 */ lfs f0, 0x1d8(r1) +/* 00015888 00022618 C1 A9 00 08 */ lfs f13, 0x8(r9) +/* 0001588C 0002261C D0 09 00 00 */ stfs f0, 0x0(r9) +/* 00015890 00022620 FC 00 68 00 */ fcmpu cr0, f0, f13 +.L_00015894: +/* 00015894 00022624 41 82 58 A0 */ beq .L_0001B134 +.L_00015898: +/* 00015898 00022628 38 00 00 02 */ li r0, 0x2 +/* 0001589C 0002262C B0 09 00 28 */ sth r0, 0x28(r9) +/* 000158A0 00022630 81 3F 00 8C */ lwz r9, 0x8c(r31) +/* 000158A4 00022634 C0 01 01 DC */ lfs f0, 0x1dc(r1) +.L_000158A8: +/* 000158A8 00022638 C1 A9 00 0C */ lfs f13, 0xc(r9) +/* 000158AC 0002263C D0 09 00 04 */ stfs f0, 0x4(r9) +/* 000158B0 00022640 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 000158B4 00022644 41 82 58 C0 */ beq .L_0001B174 +/* 000158B8 00022648 38 00 00 02 */ li r0, 0x2 +.L_000158BC: +/* 000158BC 0002264C B0 09 00 28 */ sth r0, 0x28(r9) +/* 000158C0 00022650 81 3F 00 90 */ lwz r9, 0x90(r31) +/* 000158C4 00022654 C0 01 02 08 */ lfs f0, 0x208(r1) +/* 000158C8 00022658 C1 A9 00 08 */ lfs f13, 0x8(r9) +/* 000158CC 0002265C D0 09 00 00 */ stfs f0, 0x0(r9) +/* 000158D0 00022660 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 000158D4 00022664 41 82 58 E0 */ beq .L_0001B1B4 +/* 000158D8 00022668 38 00 00 02 */ li r0, 0x2 +/* 000158DC 0002266C B0 09 00 28 */ sth r0, 0x28(r9) +.L_000158E0: +/* 000158E0 00022670 81 3F 00 90 */ lwz r9, 0x90(r31) +/* 000158E4 00022674 C0 01 02 0C */ lfs f0, 0x20c(r1) +/* 000158E8 00022678 C1 A9 00 0C */ lfs f13, 0xc(r9) +/* 000158EC 0002267C D0 09 00 04 */ stfs f0, 0x4(r9) +/* 000158F0 00022680 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 000158F4 00022684 41 82 59 00 */ beq find__H2ZPPQ28CameraAI8DirectorZPQ28CameraAI8Director_4_STLX01X01RCX11_X01 +/* 000158F8 00022688 38 00 00 02 */ li r0, 0x2 +/* 000158FC 0002268C B0 09 00 28 */ sth r0, 0x28(r9) +.L_00015900: +/* 00015900 00022690 83 DF 00 84 */ lwz r30, 0x84(r31) +/* 00015904 00022694 7F C3 F3 78 */ mr r3, r30 +/* 00015908 00022698 48 01 43 CD */ bl .text+0x143CC +/* 0001590C 0002269C 38 7E 00 2C */ addi r3, r30, 0x2c +/* 00015910 000226A0 48 01 43 CD */ bl .text+0x143CC +/* 00015914 000226A4 38 7E 00 58 */ addi r3, r30, 0x58 +/* 00015918 000226A8 48 01 43 CD */ bl .text+0x143CC +/* 0001591C 000226AC 83 DF 00 88 */ lwz r30, 0x88(r31) +/* 00015920 000226B0 7F C3 F3 78 */ mr r3, r30 +/* 00015924 000226B4 48 01 43 CD */ bl .text+0x143CC +.L_00015928: +/* 00015928 000226B8 38 7E 00 2C */ addi r3, r30, 0x2c +/* 0001592C 000226BC 48 01 43 CD */ bl .text+0x143CC +.L_00015930: +/* 00015930 000226C0 38 7E 00 58 */ addi r3, r30, 0x58 +/* 00015934 000226C4 48 01 43 CD */ bl .text+0x143CC +/* 00015938 000226C8 80 7F 00 8C */ lwz r3, 0x8c(r31) +/* 0001593C 000226CC 48 01 43 CD */ bl .text+0x143CC +/* 00015940 000226D0 80 7F 00 90 */ lwz r3, 0x90(r31) +.L_00015944: +/* 00015944 000226D4 48 01 43 CD */ bl .text+0x143CC +/* 00015948 000226D8 81 3F 00 94 */ lwz r9, 0x94(r31) +/* 0001594C 000226DC C0 1B 00 5C */ lfs f0, 0x5c(r27) +/* 00015950 000226E0 C1 A9 00 08 */ lfs f13, 0x8(r9) +.L_00015954: +/* 00015954 000226E4 D0 09 00 00 */ stfs f0, 0x0(r9) +/* 00015958 000226E8 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 0001595C 000226EC 41 82 59 68 */ beq .L_0001B2C4 +/* 00015960 000226F0 38 00 00 02 */ li r0, 0x2 +/* 00015964 000226F4 B0 09 00 28 */ sth r0, 0x28(r9) +/* 00015968 000226F8 81 3F 00 94 */ lwz r9, 0x94(r31) +/* 0001596C 000226FC C0 1B 00 60 */ lfs f0, 0x60(r27) +/* 00015970 00022700 C1 A9 00 00 */ lfs f13, 0x0(r9) +.L_00015974: +/* 00015974 00022704 D0 09 00 08 */ stfs f0, 0x8(r9) +.L_00015978: +/* 00015978 00022708 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 0001597C 0002270C 41 82 59 88 */ beq Count__Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi311ePlayerList +/* 00015980 00022710 38 00 00 02 */ li r0, 0x2 +/* 00015984 00022714 B0 09 00 28 */ sth r0, 0x28(r9) +/* 00015988 00022718 80 7F 00 94 */ lwz r3, 0x94(r31) +/* 0001598C 0002271C 48 01 43 CD */ bl .text+0x143CC +/* 00015990 00022720 81 3F 00 98 */ lwz r9, 0x98(r31) +/* 00015994 00022724 C0 1B 00 64 */ lfs f0, 0x64(r27) +/* 00015998 00022728 C1 A9 00 08 */ lfs f13, 0x8(r9) +/* 0001599C 0002272C D0 09 00 00 */ stfs f0, 0x0(r9) +/* 000159A0 00022730 FC 00 68 00 */ fcmpu cr0, f0, f13 +.L_000159A4: +/* 000159A4 00022734 41 82 59 B0 */ beq .L_0001B354 +/* 000159A8 00022738 38 00 00 02 */ li r0, 0x2 +/* 000159AC 0002273C B0 09 00 28 */ sth r0, 0x28(r9) +/* 000159B0 00022740 81 3F 00 98 */ lwz r9, 0x98(r31) +/* 000159B4 00022744 C0 1B 00 68 */ lfs f0, 0x68(r27) +/* 000159B8 00022748 C1 A9 00 00 */ lfs f13, 0x0(r9) +/* 000159BC 0002274C D0 09 00 08 */ stfs f0, 0x8(r9) +/* 000159C0 00022750 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 000159C4 00022754 41 82 59 D0 */ beq find__H2ZQ24_STLt14_List_iterator2ZP5IBodyZQ24_STLt16_Nonconst_traits1ZP5IBodyZP5IBody_4_STLX01X01RCX11_X01 +/* 000159C8 00022758 38 00 00 02 */ li r0, 0x2 +/* 000159CC 0002275C B0 09 00 28 */ sth r0, 0x28(r9) +/* 000159D0 00022760 80 7F 00 98 */ lwz r3, 0x98(r31) +/* 000159D4 00022764 48 01 43 CD */ bl .text+0x143CC +/* 000159D8 00022768 81 3F 00 9C */ lwz r9, 0x9c(r31) +/* 000159DC 0002276C C0 1B 00 6C */ lfs f0, 0x6c(r27) +/* 000159E0 00022770 C1 A9 00 08 */ lfs f13, 0x8(r9) +/* 000159E4 00022774 D0 09 00 00 */ stfs f0, 0x0(r9) +/* 000159E8 00022778 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 000159EC 0002277C 41 82 59 F8 */ beq .L_0001B3E4 +/* 000159F0 00022780 38 00 00 02 */ li r0, 0x2 +/* 000159F4 00022784 B0 09 00 28 */ sth r0, 0x28(r9) +/* 000159F8 00022788 81 3F 00 9C */ lwz r9, 0x9c(r31) +/* 000159FC 0002278C C0 1B 00 70 */ lfs f0, 0x70(r27) +/* 00015A00 00022790 C1 A9 00 00 */ lfs f13, 0x0(r9) +/* 00015A04 00022794 D0 09 00 08 */ stfs f0, 0x8(r9) +/* 00015A08 00022798 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00015A0C 0002279C 41 82 5A 18 */ beq .L_0001B424 +/* 00015A10 000227A0 38 00 00 02 */ li r0, 0x2 +.L_00015A14: +/* 00015A14 000227A4 B0 09 00 28 */ sth r0, 0x28(r9) +.L_00015A18: +/* 00015A18 000227A8 80 7F 00 9C */ lwz r3, 0x9c(r31) +.L_00015A1C: +/* 00015A1C 000227AC 48 01 43 CD */ bl .text+0x143CC +/* 00015A20 000227B0 81 3F 00 A0 */ lwz r9, 0xa0(r31) +/* 00015A24 000227B4 C0 1B 00 74 */ lfs f0, 0x74(r27) +/* 00015A28 000227B8 C1 A9 00 08 */ lfs f13, 0x8(r9) +/* 00015A2C 000227BC D0 09 00 00 */ stfs f0, 0x0(r9) +/* 00015A30 000227C0 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00015A34 000227C4 41 82 5A 40 */ beq .L_0001B474 +/* 00015A38 000227C8 38 00 00 02 */ li r0, 0x2 +/* 00015A3C 000227CC B0 09 00 28 */ sth r0, 0x28(r9) +/* 00015A40 000227D0 81 3F 00 A0 */ lwz r9, 0xa0(r31) +/* 00015A44 000227D4 C0 1B 00 78 */ lfs f0, 0x78(r27) +/* 00015A48 000227D8 C1 A9 00 00 */ lfs f13, 0x0(r9) +/* 00015A4C 000227DC D0 09 00 08 */ stfs f0, 0x8(r9) +/* 00015A50 000227E0 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00015A54 000227E4 41 82 5A 60 */ beq .L_0001B4B4 +/* 00015A58 000227E8 38 00 00 02 */ li r0, 0x2 +/* 00015A5C 000227EC B0 09 00 28 */ sth r0, 0x28(r9) +/* 00015A60 000227F0 80 7F 00 A0 */ lwz r3, 0xa0(r31) +/* 00015A64 000227F4 3F C0 43 30 */ lis r30, 0x4330 +/* 00015A68 000227F8 48 01 43 CD */ bl .text+0x143CC +/* 00015A6C 000227FC 88 1B 00 7C */ lbz r0, 0x7c(r27) +/* 00015A70 00022800 3D 20 00 00 */ lis r9, .rodata+0xC18@ha +/* 00015A74 00022804 81 5F 00 A4 */ lwz r10, 0xa4(r31) +/* 00015A78 00022808 90 01 03 7C */ stw r0, 0x37c(r1) +/* 00015A7C 0002280C CB E9 0C 18 */ lfd f31, .rodata+0xC18@l(r9) +/* 00015A80 00022810 93 C1 03 78 */ stw r30, 0x378(r1) +/* 00015A84 00022814 C1 AA 00 08 */ lfs f13, 0x8(r10) +/* 00015A88 00022818 C8 01 03 78 */ lfd f0, 0x378(r1) +/* 00015A8C 0002281C FC 00 F8 28 */ fsub f0, f0, f31 +/* 00015A90 00022820 FC 00 00 18 */ frsp f0, f0 +/* 00015A94 00022824 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00015A98 00022828 D0 0A 00 00 */ stfs f0, 0x0(r10) +/* 00015A9C 0002282C 41 82 5A A8 */ beq .L_0001B544 +/* 00015AA0 00022830 38 00 00 02 */ li r0, 0x2 +.L_00015AA4: +/* 00015AA4 00022834 B0 0A 00 28 */ sth r0, 0x28(r10) +/* 00015AA8 00022838 88 1B 00 7D */ lbz r0, 0x7d(r27) +/* 00015AAC 0002283C 81 7F 00 A4 */ lwz r11, 0xa4(r31) +/* 00015AB0 00022840 90 01 03 7C */ stw r0, 0x37c(r1) +/* 00015AB4 00022844 C1 AB 00 00 */ lfs f13, 0x0(r11) +/* 00015AB8 00022848 93 C1 03 78 */ stw r30, 0x378(r1) +/* 00015ABC 0002284C C8 01 03 78 */ lfd f0, 0x378(r1) +/* 00015AC0 00022850 FC 00 F8 28 */ fsub f0, f0, f31 +.L_00015AC4: +/* 00015AC4 00022854 FC 00 00 18 */ frsp f0, f0 +/* 00015AC8 00022858 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00015ACC 0002285C D0 0B 00 08 */ stfs f0, 0x8(r11) +/* 00015AD0 00022860 41 82 5A DC */ beq .L_0001B5AC +/* 00015AD4 00022864 38 00 00 02 */ li r0, 0x2 +/* 00015AD8 00022868 B0 0B 00 28 */ sth r0, 0x28(r11) +/* 00015ADC 0002286C 80 7F 00 A4 */ lwz r3, 0xa4(r31) +/* 00015AE0 00022870 48 01 43 CD */ bl .text+0x143CC +.L_00015AE4: +/* 00015AE4 00022874 88 1B 00 7E */ lbz r0, 0x7e(r27) +.L_00015AE8: +/* 00015AE8 00022878 81 7F 00 A8 */ lwz r11, 0xa8(r31) +/* 00015AEC 0002287C 90 01 03 7C */ stw r0, 0x37c(r1) +/* 00015AF0 00022880 C1 AB 00 08 */ lfs f13, 0x8(r11) +/* 00015AF4 00022884 93 C1 03 78 */ stw r30, 0x378(r1) +/* 00015AF8 00022888 C8 01 03 78 */ lfd f0, 0x378(r1) +/* 00015AFC 0002288C FC 00 F8 28 */ fsub f0, f0, f31 +/* 00015B00 00022890 FC 00 00 18 */ frsp f0, f0 +/* 00015B04 00022894 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00015B08 00022898 D0 0B 00 00 */ stfs f0, 0x0(r11) +/* 00015B0C 0002289C 41 82 5B 18 */ beq .L_0001B624 +/* 00015B10 000228A0 38 00 00 02 */ li r0, 0x2 +/* 00015B14 000228A4 B0 0B 00 28 */ sth r0, 0x28(r11) +/* 00015B18 000228A8 88 1B 00 7F */ lbz r0, 0x7f(r27) +/* 00015B1C 000228AC 81 7F 00 A8 */ lwz r11, 0xa8(r31) +/* 00015B20 000228B0 90 01 03 7C */ stw r0, 0x37c(r1) +.L_00015B24: +/* 00015B24 000228B4 C1 AB 00 00 */ lfs f13, 0x0(r11) +/* 00015B28 000228B8 93 C1 03 78 */ stw r30, 0x378(r1) +/* 00015B2C 000228BC C8 01 03 78 */ lfd f0, 0x378(r1) +/* 00015B30 000228C0 FC 00 F8 28 */ fsub f0, f0, f31 +/* 00015B34 000228C4 FC 00 00 18 */ frsp f0, f0 +/* 00015B38 000228C8 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00015B3C 000228CC D0 0B 00 08 */ stfs f0, 0x8(r11) +/* 00015B40 000228D0 41 82 5B 4C */ beq .L_0001B68C +/* 00015B44 000228D4 38 00 00 02 */ li r0, 0x2 +.L_00015B48: +/* 00015B48 000228D8 B0 0B 00 28 */ sth r0, 0x28(r11) +/* 00015B4C 000228DC 80 7F 00 A8 */ lwz r3, 0xa8(r31) +/* 00015B50 000228E0 48 01 43 CD */ bl .text+0x143CC +/* 00015B54 000228E4 88 1B 00 80 */ lbz r0, 0x80(r27) +/* 00015B58 000228E8 81 7F 00 AC */ lwz r11, 0xac(r31) +/* 00015B5C 000228EC 90 01 03 7C */ stw r0, 0x37c(r1) +/* 00015B60 000228F0 C1 AB 00 08 */ lfs f13, 0x8(r11) +/* 00015B64 000228F4 93 C1 03 78 */ stw r30, 0x378(r1) +/* 00015B68 000228F8 C8 01 03 78 */ lfd f0, 0x378(r1) +/* 00015B6C 000228FC FC 00 F8 28 */ fsub f0, f0, f31 +/* 00015B70 00022900 FC 00 00 18 */ frsp f0, f0 +/* 00015B74 00022904 FC 00 68 00 */ fcmpu cr0, f0, f13 +.L_00015B78: +/* 00015B78 00022908 D0 0B 00 00 */ stfs f0, 0x0(r11) +/* 00015B7C 0002290C 41 82 5B 88 */ beq .L_0001B704 +.L_00015B80: +/* 00015B80 00022910 38 00 00 02 */ li r0, 0x2 +/* 00015B84 00022914 B0 0B 00 28 */ sth r0, 0x28(r11) +/* 00015B88 00022918 88 1B 00 81 */ lbz r0, 0x81(r27) +/* 00015B8C 0002291C 81 7F 00 AC */ lwz r11, 0xac(r31) +/* 00015B90 00022920 90 01 03 7C */ stw r0, 0x37c(r1) +.L_00015B94: +/* 00015B94 00022924 C1 AB 00 00 */ lfs f13, 0x0(r11) +/* 00015B98 00022928 93 C1 03 78 */ stw r30, 0x378(r1) +/* 00015B9C 0002292C C8 01 03 78 */ lfd f0, 0x378(r1) +/* 00015BA0 00022930 FC 00 F8 28 */ fsub f0, f0, f31 +.L_00015BA4: +/* 00015BA4 00022934 FC 00 00 18 */ frsp f0, f0 +/* 00015BA8 00022938 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00015BAC 0002293C D0 0B 00 08 */ stfs f0, 0x8(r11) +/* 00015BB0 00022940 41 82 5B BC */ beq .L_0001B76C +/* 00015BB4 00022944 38 00 00 02 */ li r0, 0x2 +/* 00015BB8 00022948 B0 0B 00 28 */ sth r0, 0x28(r11) +/* 00015BBC 0002294C 80 7F 00 AC */ lwz r3, 0xac(r31) +/* 00015BC0 00022950 48 01 43 CD */ bl .text+0x143CC +/* 00015BC4 00022954 3D 20 00 00 */ lis r9, TheICEManager+0x28@ha +/* 00015BC8 00022958 80 09 00 28 */ lwz r0, TheICEManager+0x28@l(r9) +/* 00015BCC 0002295C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00015BD0 00022960 41 82 5B E4 */ beq RightToLeftVector3__H2ZQ25UMath7Vector3ZQ25UMath7Vector3__14ConversionUtilRCX01RX11_v +/* 00015BD4 00022964 2C 00 00 05 */ cmpwi r0, 0x5 +/* 00015BD8 00022968 41 82 5B E4 */ beq .L_0001B7BC +/* 00015BDC 0002296C 2C 00 00 07 */ cmpwi r0, 0x7 +/* 00015BE0 00022970 40 82 5C 08 */ bne .L_0001B7E8 +/* 00015BE4 00022974 41 92 5B FC */ beq cr4, .L_0001B7E0 +/* 00015BE8 00022978 81 61 03 50 */ lwz r11, 0x350(r1) +/* 00015BEC 0002297C 88 1B 00 0A */ lbz r0, 0xa(r27) +/* 00015BF0 00022980 89 2B 00 0A */ lbz r9, 0xa(r11) +/* 00015BF4 00022984 7C 09 00 00 */ cmpw r9, r0 +/* 00015BF8 00022988 41 82 5C 08 */ beq .L_0001B800 +/* 00015BFC 0002298C 48 01 7B C5 */ bl .text+0x17BC4 +/* 00015C00 00022990 88 7B 00 0A */ lbz r3, 0xa(r27) +/* 00015C04 00022994 48 01 7B 51 */ bl .text+0x17B50 +/* 00015C08 00022998 80 01 03 DC */ lwz r0, 0x3dc(r1) +/* 00015C0C 0002299C 81 81 03 84 */ lwz r12, 0x384(r1) +/* 00015C10 000229A0 7C 08 03 A6 */ mtlr r0 +/* 00015C14 000229A4 B9 C1 03 88 */ lmw r14, 0x388(r1) +/* 00015C18 000229A8 E3 E1 03 D0 */ psq_l f31, 0x3d0(r1), 0, qr0 +/* 00015C1C 000229AC 7D 81 81 20 */ mtcrf 24, r12 +/* 00015C20 000229B0 38 21 03 D8 */ addi r1, r1, 0x3d8 +/* 00015C24 000229B4 4E 80 00 20 */ blr +.endfn SetDesired__8ICEMoverbT1 + +# .text:0x15C28 | size: 0x78 +.fn GetDutch__8ICEMoverf, global +/* 00015C28 000229B8 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 00015C2C 000229BC 7C 08 02 A6 */ mflr r0 +/* 00015C30 000229C0 F3 C1 00 08 */ psq_st f30, 0x8(r1), 0, qr0 +/* 00015C34 000229C4 F3 E1 00 10 */ psq_st f31, 0x10(r1), 0, qr0 +/* 00015C38 000229C8 90 01 00 1C */ stw r0, 0x1c(r1) +/* 00015C3C 000229CC 81 23 00 C4 */ lwz r9, 0xc4(r3) +/* 00015C40 000229D0 FF C0 08 90 */ fmr f30, f1 +.L_00015C44: +/* 00015C44 000229D4 2C 09 00 00 */ cmpwi r9, 0x0 +.L_00015C48: +/* 00015C48 000229D8 41 82 5C 64 */ beq .L_0001B8AC +/* 00015C4C 000229DC 88 09 00 02 */ lbz r0, 0x2(r9) +/* 00015C50 000229E0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00015C54 000229E4 41 82 5C 64 */ beq .L_0001B8B8 +/* 00015C58 000229E8 80 63 00 8C */ lwz r3, 0x8c(r3) +/* 00015C5C 000229EC 48 01 44 15 */ bl .text+0x14414 +/* 00015C60 000229F0 48 01 5C 88 */ b .text+0x15C88 +/* 00015C64 000229F4 81 23 00 8C */ lwz r9, 0x8c(r3) +/* 00015C68 000229F8 C3 E9 00 00 */ lfs f31, 0x0(r9) +/* 00015C6C 000229FC 7D 23 4B 78 */ mr r3, r9 +/* 00015C70 00022A00 48 01 44 7D */ bl .text+0x1447C +/* 00015C74 00022A04 EC 01 07 B2 */ fmuls f0, f1, f30 +/* 00015C78 00022A08 3D 20 00 00 */ lis r9, .rodata+0xC20@ha +/* 00015C7C 00022A0C C0 29 0C 20 */ lfs f1, .rodata+0xC20@l(r9) +/* 00015C80 00022A10 EC 21 F0 28 */ fsubs f1, f1, f30 +/* 00015C84 00022A14 EC 3F 00 7A */ fmadds f1, f31, f1, f0 +/* 00015C88 00022A18 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 00015C8C 00022A1C 7C 08 03 A6 */ mtlr r0 +/* 00015C90 00022A20 E3 C1 00 08 */ psq_l f30, 0x8(r1), 0, qr0 +/* 00015C94 00022A24 E3 E1 00 10 */ psq_l f31, 0x10(r1), 0, qr0 +/* 00015C98 00022A28 38 21 00 18 */ addi r1, r1, 0x18 +/* 00015C9C 00022A2C 4E 80 00 20 */ blr +.endfn GetDutch__8ICEMoverf + +# .text:0x15CA0 | size: 0x8C +.fn GetFOV__8ICEMoverf, global +/* 00015CA0 00022A30 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 00015CA4 00022A34 7C 08 02 A6 */ mflr r0 +/* 00015CA8 00022A38 F3 C1 00 10 */ psq_st f30, 0x10(r1), 0, qr0 +/* 00015CAC 00022A3C F3 E1 00 18 */ psq_st f31, 0x18(r1), 0, qr0 +/* 00015CB0 00022A40 90 01 00 24 */ stw r0, 0x24(r1) +/* 00015CB4 00022A44 81 23 00 C4 */ lwz r9, 0xc4(r3) +/* 00015CB8 00022A48 FF C0 08 90 */ fmr f30, f1 +/* 00015CBC 00022A4C 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00015CC0 00022A50 41 82 5C DC */ beq .L_0001B99C +/* 00015CC4 00022A54 88 09 00 02 */ lbz r0, 0x2(r9) +/* 00015CC8 00022A58 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00015CCC 00022A5C 41 82 5C DC */ beq .L_0001B9A8 +.L_00015CD0: +/* 00015CD0 00022A60 80 63 00 90 */ lwz r3, 0x90(r3) +/* 00015CD4 00022A64 48 01 44 15 */ bl .text+0x14414 +.L_00015CD8: +/* 00015CD8 00022A68 48 01 5D 00 */ b .text+0x15D00 +/* 00015CDC 00022A6C 81 23 00 90 */ lwz r9, 0x90(r3) +.L_00015CE0: +/* 00015CE0 00022A70 C3 E9 00 00 */ lfs f31, 0x0(r9) +/* 00015CE4 00022A74 7D 23 4B 78 */ mr r3, r9 +/* 00015CE8 00022A78 48 01 44 7D */ bl .text+0x1447C +/* 00015CEC 00022A7C 3D 20 00 00 */ lis r9, .rodata+0xC24@ha +/* 00015CF0 00022A80 EC 21 07 B2 */ fmuls f1, f1, f30 +.L_00015CF4: +/* 00015CF4 00022A84 C0 09 0C 24 */ lfs f0, .rodata+0xC24@l(r9) +/* 00015CF8 00022A88 EC 00 F0 28 */ fsubs f0, f0, f30 +/* 00015CFC 00022A8C EC 3F 08 3A */ fmadds f1, f31, f0, f1 +/* 00015D00 00022A90 FC 00 08 90 */ fmr f0, f1 +.L_00015D04: +/* 00015D04 00022A94 FD A0 00 1E */ fctiwz f13, f0 +/* 00015D08 00022A98 D9 A1 00 08 */ stfd f13, 0x8(r1) +/* 00015D0C 00022A9C 80 61 00 0C */ lwz r3, 0xc(r1) +/* 00015D10 00022AA0 54 63 04 3E */ clrlwi r3, r3, 16 +/* 00015D14 00022AA4 80 01 00 24 */ lwz r0, 0x24(r1) +/* 00015D18 00022AA8 7C 08 03 A6 */ mtlr r0 +.L_00015D1C: +/* 00015D1C 00022AAC E3 C1 00 10 */ psq_l f30, 0x10(r1), 0, qr0 +/* 00015D20 00022AB0 E3 E1 00 18 */ psq_l f31, 0x18(r1), 0, qr0 +/* 00015D24 00022AB4 38 21 00 20 */ addi r1, r1, 0x20 +/* 00015D28 00022AB8 4E 80 00 20 */ blr +.endfn GetFOV__8ICEMoverf + +# .text:0x15D2C | size: 0x100 +.fn _._8ICEMover, global +/* 00015D2C 00022ABC 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00015D30 00022AC0 7C 08 02 A6 */ mflr r0 +/* 00015D34 00022AC4 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 00015D38 00022AC8 90 01 00 14 */ stw r0, 0x14(r1) +/* 00015D3C 00022ACC 3D 20 00 00 */ lis r9, _vt.8ICEMover@ha +/* 00015D40 00022AD0 7C 7F 1B 78 */ mr r31, r3 +/* 00015D44 00022AD4 39 29 00 00 */ addi r9, r9, _vt.8ICEMover@l +/* 00015D48 00022AD8 7C 9E 23 78 */ mr r30, r4 +/* 00015D4C 00022ADC 91 3F 00 08 */ stw r9, 0x8(r31) +/* 00015D50 00022AE0 48 01 7B C5 */ bl .text+0x17BC4 +/* 00015D54 00022AE4 80 7F 00 84 */ lwz r3, 0x84(r31) +/* 00015D58 00022AE8 48 00 00 01 */ bl __builtin_delete +/* 00015D5C 00022AEC 80 7F 00 88 */ lwz r3, 0x88(r31) +/* 00015D60 00022AF0 48 00 00 01 */ bl __builtin_delete +.L_00015D64: +/* 00015D64 00022AF4 80 7F 00 8C */ lwz r3, 0x8c(r31) +/* 00015D68 00022AF8 48 00 00 01 */ bl __builtin_delete +/* 00015D6C 00022AFC 80 7F 00 90 */ lwz r3, 0x90(r31) +/* 00015D70 00022B00 48 00 00 01 */ bl __builtin_delete +/* 00015D74 00022B04 80 7F 00 94 */ lwz r3, 0x94(r31) +/* 00015D78 00022B08 48 00 00 01 */ bl __builtin_delete +/* 00015D7C 00022B0C 80 7F 00 98 */ lwz r3, 0x98(r31) +/* 00015D80 00022B10 48 00 00 01 */ bl __builtin_delete +/* 00015D84 00022B14 80 7F 00 9C */ lwz r3, 0x9c(r31) +/* 00015D88 00022B18 48 00 00 01 */ bl __builtin_delete +/* 00015D8C 00022B1C 80 7F 00 A0 */ lwz r3, 0xa0(r31) +/* 00015D90 00022B20 48 00 00 01 */ bl __builtin_delete +/* 00015D94 00022B24 80 7F 00 A4 */ lwz r3, 0xa4(r31) +/* 00015D98 00022B28 48 00 00 01 */ bl __builtin_delete +.L_00015D9C: +/* 00015D9C 00022B2C 80 7F 00 A8 */ lwz r3, 0xa8(r31) +/* 00015DA0 00022B30 48 00 00 01 */ bl __builtin_delete +.L_00015DA4: +/* 00015DA4 00022B34 80 7F 00 AC */ lwz r3, 0xac(r31) +.L_00015DA8: +/* 00015DA8 00022B38 48 00 00 01 */ bl __builtin_delete +/* 00015DAC 00022B3C 80 7F 00 B0 */ lwz r3, 0xb0(r31) +/* 00015DB0 00022B40 48 00 00 01 */ bl __builtin_delete +/* 00015DB4 00022B44 3D 60 00 00 */ lis r11, .rodata+0xC28@ha +/* 00015DB8 00022B48 81 5F 00 1C */ lwz r10, 0x1c(r31) +/* 00015DBC 00022B4C C0 0B 0C 28 */ lfs f0, .rodata+0xC28@l(r11) +/* 00015DC0 00022B50 3D 20 00 00 */ lis r9, .rodata+0xC2C@ha +/* 00015DC4 00022B54 C1 A9 0C 2C */ lfs f13, .rodata+0xC2C@l(r9) +/* 00015DC8 00022B58 3D 60 00 00 */ lis r11, _6Camera.StopUpdating@ha +/* 00015DCC 00022B5C D0 0A 00 CC */ stfs f0, 0xcc(r10) +/* 00015DD0 00022B60 80 0B 00 00 */ lwz r0, _6Camera.StopUpdating@l(r11) +/* 00015DD4 00022B64 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 00015DD8 00022B68 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00015DDC 00022B6C D1 A9 00 C8 */ stfs f13, 0xc8(r9) +/* 00015DE0 00022B70 40 82 5D F4 */ bne .L_0001BBD4 +/* 00015DE4 00022B74 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 00015DE8 00022B78 D1 A9 00 B8 */ stfs f13, 0xb8(r9) +/* 00015DEC 00022B7C 81 7F 00 1C */ lwz r11, 0x1c(r31) +/* 00015DF0 00022B80 D1 AB 00 B4 */ stfs f13, 0xb4(r11) +/* 00015DF4 00022B84 3D 20 00 00 */ lis r9, RealTimeFrames@ha +/* 00015DF8 00022B88 81 7F 00 1C */ lwz r11, 0x1c(r31) +/* 00015DFC 00022B8C 81 49 00 00 */ lwz r10, RealTimeFrames@l(r9) +/* 00015E00 00022B90 38 00 00 01 */ li r0, 0x1 +/* 00015E04 00022B94 90 0B 02 7C */ stw r0, 0x27c(r11) +/* 00015E08 00022B98 7F E3 FB 78 */ mr r3, r31 +/* 00015E0C 00022B9C 91 4B 02 88 */ stw r10, 0x288(r11) +/* 00015E10 00022BA0 7F C4 F3 78 */ mr r4, r30 +/* 00015E14 00022BA4 48 00 20 35 */ bl .L_00017E48 +/* 00015E18 00022BA8 80 01 00 14 */ lwz r0, 0x14(r1) +/* 00015E1C 00022BAC 7C 08 03 A6 */ mtlr r0 +/* 00015E20 00022BB0 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 00015E24 00022BB4 38 21 00 10 */ addi r1, r1, 0x10 +/* 00015E28 00022BB8 4E 80 00 20 */ blr +.endfn _._8ICEMover + +# .text:0x15E2C | size: 0xE8 +.fn GetEye__8ICEMoverPQ23ICE7Vector3f, global +/* 00015E2C 00022BBC 94 21 FF C0 */ stwu r1, -0x40(r1) +/* 00015E30 00022BC0 7C 08 02 A6 */ mflr r0 +/* 00015E34 00022BC4 F3 E1 00 38 */ psq_st f31, 0x38(r1), 0, qr0 +.L_00015E38: +/* 00015E38 00022BC8 BF 81 00 28 */ stmw r28, 0x28(r1) +/* 00015E3C 00022BCC 90 01 00 44 */ stw r0, 0x44(r1) +.L_00015E40: +/* 00015E40 00022BD0 7C 7F 1B 78 */ mr r31, r3 +/* 00015E44 00022BD4 7C 9C 23 78 */ mr r28, r4 +/* 00015E48 00022BD8 81 3F 00 C4 */ lwz r9, 0xc4(r31) +/* 00015E4C 00022BDC FF E0 08 90 */ fmr f31, f1 +/* 00015E50 00022BE0 2C 09 00 00 */ cmpwi r9, 0x0 +.L_00015E54: +/* 00015E54 00022BE4 41 82 5E 70 */ beq .L_0001BCC4 +.L_00015E58: +/* 00015E58 00022BE8 88 09 00 02 */ lbz r0, 0x2(r9) +/* 00015E5C 00022BEC 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00015E60 00022BF0 41 82 5E 70 */ beq .L_0001BCD0 +.L_00015E64: +/* 00015E64 00022BF4 80 7F 00 84 */ lwz r3, 0x84(r31) +/* 00015E68 00022BF8 48 01 48 E5 */ bl .text+0x148E4 +/* 00015E6C 00022BFC 48 01 5E FC */ b .text+0x15EFC +/* 00015E70 00022C00 3D 20 00 00 */ lis r9, .rodata+0xC30@ha +/* 00015E74 00022C04 80 7F 00 84 */ lwz r3, 0x84(r31) +/* 00015E78 00022C08 C0 09 0C 30 */ lfs f0, .rodata+0xC30@l(r9) +/* 00015E7C 00022C0C 3B C1 00 08 */ addi r30, r1, 0x8 +/* 00015E80 00022C10 3B A1 00 18 */ addi r29, r1, 0x18 +/* 00015E84 00022C14 7F C4 F3 78 */ mr r4, r30 +/* 00015E88 00022C18 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 00015E8C 00022C1C D0 01 00 0C */ stfs f0, 0xc(r1) +/* 00015E90 00022C20 D0 1E 00 08 */ stfs f0, 0x8(r30) +/* 00015E94 00022C24 D0 01 00 24 */ stfs f0, 0x24(r1) +/* 00015E98 00022C28 D0 01 00 14 */ stfs f0, 0x14(r1) +/* 00015E9C 00022C2C D0 01 00 18 */ stfs f0, 0x18(r1) +/* 00015EA0 00022C30 D0 01 00 1C */ stfs f0, 0x1c(r1) +/* 00015EA4 00022C34 D0 01 00 20 */ stfs f0, 0x20(r1) +/* 00015EA8 00022C38 48 01 48 AD */ bl .text+0x148AC +/* 00015EAC 00022C3C 80 7F 00 84 */ lwz r3, 0x84(r31) +/* 00015EB0 00022C40 7F A4 EB 78 */ mr r4, r29 +/* 00015EB4 00022C44 48 01 49 45 */ bl .text+0x14944 +/* 00015EB8 00022C48 3D 20 00 00 */ lis r9, .rodata+0xC34@ha +/* 00015EBC 00022C4C C1 7E 00 08 */ lfs f11, 0x8(r30) +/* 00015EC0 00022C50 C0 09 0C 34 */ lfs f0, .rodata+0xC34@l(r9) +/* 00015EC4 00022C54 7F 83 E3 78 */ mr r3, r28 +/* 00015EC8 00022C58 C1 81 00 08 */ lfs f12, 0x8(r1) +/* 00015ECC 00022C5C 7F A5 EB 78 */ mr r5, r29 +/* 00015ED0 00022C60 C1 A1 00 0C */ lfs f13, 0xc(r1) +/* 00015ED4 00022C64 EC 00 F8 28 */ fsubs f0, f0, f31 +/* 00015ED8 00022C68 ED 6B 00 32 */ fmuls f11, f11, f0 +/* 00015EDC 00022C6C 7C 64 1B 78 */ mr r4, r3 +.L_00015EE0: +/* 00015EE0 00022C70 ED 8C 00 32 */ fmuls f12, f12, f0 +/* 00015EE4 00022C74 D1 7C 00 08 */ stfs f11, 0x8(r28) +/* 00015EE8 00022C78 ED AD 00 32 */ fmuls f13, f13, f0 +/* 00015EEC 00022C7C D1 9C 00 00 */ stfs f12, 0x0(r28) +/* 00015EF0 00022C80 D1 BC 00 04 */ stfs f13, 0x4(r28) +/* 00015EF4 00022C84 FC 20 F8 90 */ fmr f1, f31 +/* 00015EF8 00022C88 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +/* 00015EFC 00022C8C 80 01 00 44 */ lwz r0, 0x44(r1) +/* 00015F00 00022C90 7C 08 03 A6 */ mtlr r0 +.L_00015F04: +/* 00015F04 00022C94 BB 81 00 28 */ lmw r28, 0x28(r1) +.L_00015F08: +/* 00015F08 00022C98 E3 E1 00 38 */ psq_l f31, 0x38(r1), 0, qr0 +/* 00015F0C 00022C9C 38 21 00 40 */ addi r1, r1, 0x40 +/* 00015F10 00022CA0 4E 80 00 20 */ blr +.endfn GetEye__8ICEMoverPQ23ICE7Vector3f + +# .text:0x15F14 | size: 0xE8 +.fn GetLook__8ICEMoverPQ23ICE7Vector3f, global +/* 00015F14 00022CA4 94 21 FF C0 */ stwu r1, -0x40(r1) +/* 00015F18 00022CA8 7C 08 02 A6 */ mflr r0 +/* 00015F1C 00022CAC F3 E1 00 38 */ psq_st f31, 0x38(r1), 0, qr0 +/* 00015F20 00022CB0 BF 81 00 28 */ stmw r28, 0x28(r1) +/* 00015F24 00022CB4 90 01 00 44 */ stw r0, 0x44(r1) +/* 00015F28 00022CB8 7C 7F 1B 78 */ mr r31, r3 +/* 00015F2C 00022CBC 7C 9C 23 78 */ mr r28, r4 +/* 00015F30 00022CC0 81 3F 00 C4 */ lwz r9, 0xc4(r31) +/* 00015F34 00022CC4 FF E0 08 90 */ fmr f31, f1 +/* 00015F38 00022CC8 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00015F3C 00022CCC 41 82 5F 58 */ beq .L_0001BE94 +/* 00015F40 00022CD0 88 09 00 03 */ lbz r0, 0x3(r9) +/* 00015F44 00022CD4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00015F48 00022CD8 41 82 5F 58 */ beq .L_0001BEA0 +/* 00015F4C 00022CDC 80 7F 00 88 */ lwz r3, 0x88(r31) +/* 00015F50 00022CE0 48 01 48 E5 */ bl .text+0x148E4 +/* 00015F54 00022CE4 48 01 5F E4 */ b .text+0x15FE4 +/* 00015F58 00022CE8 3D 20 00 00 */ lis r9, .rodata+0xC38@ha +/* 00015F5C 00022CEC 80 7F 00 88 */ lwz r3, 0x88(r31) +/* 00015F60 00022CF0 C0 09 0C 38 */ lfs f0, .rodata+0xC38@l(r9) +.L_00015F64: +/* 00015F64 00022CF4 3B C1 00 08 */ addi r30, r1, 0x8 +/* 00015F68 00022CF8 3B A1 00 18 */ addi r29, r1, 0x18 +/* 00015F6C 00022CFC 7F C4 F3 78 */ mr r4, r30 +/* 00015F70 00022D00 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 00015F74 00022D04 D0 01 00 0C */ stfs f0, 0xc(r1) +/* 00015F78 00022D08 D0 1E 00 08 */ stfs f0, 0x8(r30) +/* 00015F7C 00022D0C D0 01 00 24 */ stfs f0, 0x24(r1) +/* 00015F80 00022D10 D0 01 00 14 */ stfs f0, 0x14(r1) +/* 00015F84 00022D14 D0 01 00 18 */ stfs f0, 0x18(r1) +/* 00015F88 00022D18 D0 01 00 1C */ stfs f0, 0x1c(r1) +/* 00015F8C 00022D1C D0 01 00 20 */ stfs f0, 0x20(r1) +/* 00015F90 00022D20 48 01 48 AD */ bl .text+0x148AC +/* 00015F94 00022D24 80 7F 00 88 */ lwz r3, 0x88(r31) +.L_00015F98: +/* 00015F98 00022D28 7F A4 EB 78 */ mr r4, r29 +/* 00015F9C 00022D2C 48 01 49 45 */ bl .text+0x14944 +.L_00015FA0: +/* 00015FA0 00022D30 3D 20 00 00 */ lis r9, .rodata+0xC3C@ha +/* 00015FA4 00022D34 C1 7E 00 08 */ lfs f11, 0x8(r30) +/* 00015FA8 00022D38 C0 09 0C 3C */ lfs f0, .rodata+0xC3C@l(r9) +/* 00015FAC 00022D3C 7F 83 E3 78 */ mr r3, r28 +/* 00015FB0 00022D40 C1 81 00 08 */ lfs f12, 0x8(r1) +.L_00015FB4: +/* 00015FB4 00022D44 7F A5 EB 78 */ mr r5, r29 +/* 00015FB8 00022D48 C1 A1 00 0C */ lfs f13, 0xc(r1) +/* 00015FBC 00022D4C EC 00 F8 28 */ fsubs f0, f0, f31 +/* 00015FC0 00022D50 ED 6B 00 32 */ fmuls f11, f11, f0 +.L_00015FC4: +/* 00015FC4 00022D54 7C 64 1B 78 */ mr r4, r3 +/* 00015FC8 00022D58 ED 8C 00 32 */ fmuls f12, f12, f0 +/* 00015FCC 00022D5C D1 7C 00 08 */ stfs f11, 0x8(r28) +/* 00015FD0 00022D60 ED AD 00 32 */ fmuls f13, f13, f0 +/* 00015FD4 00022D64 D1 9C 00 00 */ stfs f12, 0x0(r28) +/* 00015FD8 00022D68 D1 BC 00 04 */ stfs f13, 0x4(r28) +/* 00015FDC 00022D6C FC 20 F8 90 */ fmr f1, f31 +/* 00015FE0 00022D70 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +/* 00015FE4 00022D74 80 01 00 44 */ lwz r0, 0x44(r1) +/* 00015FE8 00022D78 7C 08 03 A6 */ mtlr r0 +/* 00015FEC 00022D7C BB 81 00 28 */ lmw r28, 0x28(r1) +/* 00015FF0 00022D80 E3 E1 00 38 */ psq_l f31, 0x38(r1), 0, qr0 +/* 00015FF4 00022D84 38 21 00 40 */ addi r1, r1, 0x40 +/* 00015FF8 00022D88 4E 80 00 20 */ blr +.endfn GetLook__8ICEMoverPQ23ICE7Vector3f + +# .text:0x15FFC | size: 0x48 +# GetICEAnchor() +.fn GetICEAnchor__Fv, global +/* 00015FFC 00022D8C 3D 20 00 00 */ lis r9, eViews+0x68@ha +/* 00016000 00022D90 39 40 00 00 */ li r10, 0x0 +/* 00016004 00022D94 39 29 00 68 */ addi r9, r9, eViews+0x68@l +/* 00016008 00022D98 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0001600C 00022D9C 41 82 60 24 */ beq .L_0001C030 +/* 00016010 00022DA0 81 69 00 3C */ lwz r11, 0x3c(r9) +/* 00016014 00022DA4 38 09 00 3C */ addi r0, r9, 0x3c +/* 00016018 00022DA8 7C 0B 00 00 */ cmpw r11, r0 +/* 0001601C 00022DAC 41 82 60 24 */ beq .L_0001C040 +/* 00016020 00022DB0 7D 6A 5B 78 */ mr r10, r11 +/* 00016024 00022DB4 2C 0A 00 00 */ cmpwi r10, 0x0 +/* 00016028 00022DB8 38 60 00 00 */ li r3, 0x0 +/* 0001602C 00022DBC 4D 82 00 20 */ beqlr +/* 00016030 00022DC0 80 0A 00 0C */ lwz r0, 0xc(r10) +/* 00016034 00022DC4 2C 00 00 0E */ cmpwi r0, 0xe +/* 00016038 00022DC8 4C 82 00 20 */ bnelr +/* 0001603C 00022DCC 80 6A 00 80 */ lwz r3, 0x80(r10) +/* 00016040 00022DD0 4E 80 00 20 */ blr +.endfn GetICEAnchor__Fv + +# .text:0x16044 | size: 0xE48 +.fn Update__8ICEMoverf, global +/* 00016044 00022DD4 94 21 FE 40 */ stwu r1, -0x1c0(r1) +/* 00016048 00022DD8 7C 08 02 A6 */ mflr r0 +/* 0001604C 00022DDC 7D 80 00 26 */ mfcr r12 +/* 00016050 00022DE0 F3 41 01 90 */ psq_st f26, 0x190(r1), 0, qr0 +/* 00016054 00022DE4 F3 61 01 98 */ psq_st f27, 0x198(r1), 0, qr0 +.L_00016058: +/* 00016058 00022DE8 F3 81 01 A0 */ psq_st f28, 0x1a0(r1), 0, qr0 +/* 0001605C 00022DEC F3 A1 01 A8 */ psq_st f29, 0x1a8(r1), 0, qr0 +/* 00016060 00022DF0 F3 C1 01 B0 */ psq_st f30, 0x1b0(r1), 0, qr0 +/* 00016064 00022DF4 F3 E1 01 B8 */ psq_st f31, 0x1b8(r1), 0, qr0 +/* 00016068 00022DF8 BF 01 01 70 */ stmw r24, 0x170(r1) +/* 0001606C 00022DFC 90 01 01 C4 */ stw r0, 0x1c4(r1) +/* 00016070 00022E00 91 81 01 6C */ stw r12, 0x16c(r1) +/* 00016074 00022E04 3D 20 00 00 */ lis r9, TheICEManager@ha +/* 00016078 00022E08 39 29 00 00 */ addi r9, r9, TheICEManager@l +/* 0001607C 00022E0C 3C E0 43 30 */ lis r7, 0x4330 +/* 00016080 00022E10 80 09 00 7C */ lwz r0, 0x7c(r9) +/* 00016084 00022E14 3D 60 00 00 */ lis r11, .rodata+0xC40@ha +/* 00016088 00022E18 C9 AB 0C 40 */ lfd f13, .rodata+0xC40@l(r11) +/* 0001608C 00022E1C 3D 00 00 00 */ lis r8, .rodata+0xC48@ha +/* 00016090 00022E20 90 01 01 64 */ stw r0, 0x164(r1) +/* 00016094 00022E24 7C 7F 1B 78 */ mr r31, r3 +/* 00016098 00022E28 C1 88 0C 48 */ lfs f12, .rodata+0xC48@l(r8) +/* 0001609C 00022E2C FF A0 08 90 */ fmr f29, f1 +/* 000160A0 00022E30 90 E1 01 60 */ stw r7, 0x160(r1) +/* 000160A4 00022E34 3B A0 00 00 */ li r29, 0x0 +/* 000160A8 00022E38 83 49 00 24 */ lwz r26, 0x24(r9) +/* 000160AC 00022E3C C8 01 01 60 */ lfd f0, 0x160(r1) +/* 000160B0 00022E40 FC 00 68 28 */ fsub f0, f0, f13 +/* 000160B4 00022E44 FC 00 00 18 */ frsp f0, f0 +/* 000160B8 00022E48 FC 00 60 00 */ fcmpu cr0, f0, f12 +/* 000160BC 00022E4C 40 82 60 D4 */ bne .L_0001C190 +/* 000160C0 00022E50 3C 60 00 00 */ lis r3, TheGameFlowManager@ha +/* 000160C4 00022E54 38 63 00 00 */ addi r3, r3, TheGameFlowManager@l +/* 000160C8 00022E58 48 00 00 01 */ bl IsPaused__15GameFlowManager +/* 000160CC 00022E5C 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000160D0 00022E60 40 82 6E 58 */ bne .L_0001CF28 +/* 000160D4 00022E64 20 1A 00 00 */ subfic r0, r26, 0x0 +/* 000160D8 00022E68 7F C0 D1 15 */ adde. r30, r0, r26 +/* 000160DC 00022E6C 40 82 61 10 */ bne .L_0001C1EC +.L_000160E0: +/* 000160E0 00022E70 7F 43 D3 78 */ mr r3, r26 +/* 000160E4 00022E74 48 01 7E 91 */ bl .text+0x17E90 +/* 000160E8 00022E78 68 7D 00 03 */ xori r29, r3, 0x3 +/* 000160EC 00022E7C 20 1D 00 00 */ subfic r0, r29, 0x0 +/* 000160F0 00022E80 7F A0 E9 14 */ adde r29, r0, r29 +/* 000160F4 00022E84 7F 43 D3 78 */ mr r3, r26 +/* 000160F8 00022E88 48 01 7E 91 */ bl .text+0x17E90 +/* 000160FC 00022E8C 2C 03 00 02 */ cmpwi r3, 0x2 +/* 00016100 00022E90 41 82 61 10 */ beq .L_0001C210 +/* 00016104 00022E94 3D 20 00 00 */ lis r9, bMirrorICEData@ha +.L_00016108: +/* 00016108 00022E98 38 00 00 00 */ li r0, 0x0 +/* 0001610C 00022E9C 90 09 00 00 */ stw r0, bMirrorICEData@l(r9) +/* 00016110 00022EA0 38 00 00 00 */ li r0, 0x0 +/* 00016114 00022EA4 3C 60 00 00 */ lis r3, TheICEManager@ha +/* 00016118 00022EA8 90 1F 00 C8 */ stw r0, 0xc8(r31) +/* 0001611C 00022EAC 38 63 00 00 */ addi r3, r3, TheICEManager@l +/* 00016120 00022EB0 48 01 83 0D */ bl .text+0x1830C +/* 00016124 00022EB4 7C 65 1B 78 */ mr r5, r3 +/* 00016128 00022EB8 38 80 00 00 */ li r4, 0x0 +/* 0001612C 00022EBC 7F E3 FB 78 */ mr r3, r31 +/* 00016130 00022EC0 48 01 4D 51 */ bl .text+0x14D50 +/* 00016134 00022EC4 38 61 00 08 */ addi r3, r1, 0x8 +/* 00016138 00022EC8 48 00 00 01 */ bl PSMTX44Identity +/* 0001613C 00022ECC 80 1F 00 BC */ lwz r0, 0xbc(r31) +/* 00016140 00022ED0 2C 00 00 03 */ cmpwi r0, 0x3 +/* 00016144 00022ED4 41 82 61 54 */ beq .L_0001C298 +/* 00016148 00022ED8 80 1F 00 C0 */ lwz r0, 0xc0(r31) +/* 0001614C 00022EDC 2C 00 00 03 */ cmpwi r0, 0x3 +/* 00016150 00022EE0 40 82 61 80 */ bne .L_0001C2D0 +/* 00016154 00022EE4 48 01 9F D9 */ bl .text+0x19FD8 +/* 00016158 00022EE8 7C 6B 1B 79 */ mr. r11, r3 +/* 0001615C 00022EEC 41 82 6E 58 */ beq .L_0001CFB4 +/* 00016160 00022EF0 81 2B 00 00 */ lwz r9, 0x0(r11) +/* 00016164 00022EF4 A8 69 00 68 */ lha r3, 0x68(r9) +.L_00016168: +/* 00016168 00022EF8 80 09 00 6C */ lwz r0, 0x6c(r9) +.L_0001616C: +/* 0001616C 00022EFC 7C 6B 1A 14 */ add r3, r11, r3 +.L_00016170: +/* 00016170 00022F00 7C 08 03 A6 */ mtlr r0 +/* 00016174 00022F04 4E 80 00 21 */ blrl +/* 00016178 00022F08 38 81 00 08 */ addi r4, r1, 0x8 +/* 0001617C 00022F0C 48 00 00 01 */ bl PSMTX44Copy +.L_00016180: +/* 00016180 00022F10 2E 1E 00 00 */ cmpwi cr4, r30, 0x0 +/* 00016184 00022F14 41 92 61 98 */ beq cr4, .L_0001C31C +.L_00016188: +/* 00016188 00022F18 3C 60 00 00 */ lis r3, TheICEManager@ha +/* 0001618C 00022F1C 38 63 00 00 */ addi r3, r3, TheICEManager@l +/* 00016190 00022F20 48 01 84 D5 */ bl .text+0x184D4 +/* 00016194 00022F24 48 01 61 A0 */ b .text+0x161A0 +/* 00016198 00022F28 7F 43 D3 78 */ mr r3, r26 +/* 0001619C 00022F2C 48 01 7E E9 */ bl .text+0x17EE8 +/* 000161A0 00022F30 FF 80 08 90 */ fmr f28, f1 +/* 000161A4 00022F34 C0 1F 00 B8 */ lfs f0, 0xb8(r31) +/* 000161A8 00022F38 3D 20 00 00 */ lis r9, .rodata+0xC4C@ha +/* 000161AC 00022F3C C1 7F 00 B4 */ lfs f11, 0xb4(r31) +/* 000161B0 00022F40 3D 60 00 00 */ lis r11, .rodata+0xC48@ha +.L_000161B4: +/* 000161B4 00022F44 C1 A9 0C 4C */ lfs f13, .rodata+0xC4C@l(r9) +/* 000161B8 00022F48 ED 80 58 28 */ fsubs f12, f0, f11 +/* 000161BC 00022F4C C3 6B 0C 48 */ lfs f27, .rodata+0xC48@l(r11) +/* 000161C0 00022F50 FC 00 62 10 */ fabs f0, f12 +/* 000161C4 00022F54 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 000161C8 00022F58 4C 62 03 82 */ cror un, eq, lt +/* 000161CC 00022F5C 41 83 61 D8 */ bso GetAction__Q28CameraAI8Director +/* 000161D0 00022F60 EC 1C 58 28 */ fsubs f0, f28, f11 +/* 000161D4 00022F64 EF 60 60 24 */ fdivs f27, f0, f12 +/* 000161D8 00022F68 3D 20 00 00 */ lis r9, .rodata+0xC50@ha +/* 000161DC 00022F6C C3 E9 0C 50 */ lfs f31, .rodata+0xC50@l(r9) +.L_000161E0: +/* 000161E0 00022F70 FC 1C F8 00 */ fcmpu cr0, f28, f31 +/* 000161E4 00022F74 41 80 62 00 */ blt .L_0001C3E4 +/* 000161E8 00022F78 3C 80 00 00 */ lis r4, .rodata@ha +/* 000161EC 00022F7C 3C 60 00 00 */ lis r3, TheICEManager@ha +/* 000161F0 00022F80 38 84 00 00 */ addi r4, r4, .rodata@l +/* 000161F4 00022F84 38 63 00 00 */ addi r3, r3, TheICEManager@l +/* 000161F8 00022F88 7C 85 23 78 */ mr r5, r4 +/* 000161FC 00022F8C 48 01 88 7D */ bl .text+0x1887C +/* 00016200 00022F90 80 7F 00 AC */ lwz r3, 0xac(r31) +/* 00016204 00022F94 FC 20 D8 90 */ fmr f1, f27 +/* 00016208 00022F98 48 01 44 15 */ bl .text+0x14414 +/* 0001620C 00022F9C 3D 20 00 00 */ lis r9, .rodata+0xC48@ha +/* 00016210 00022FA0 FF C0 08 90 */ fmr f30, f1 +/* 00016214 00022FA4 C0 09 0C 48 */ lfs f0, .rodata+0xC48@l(r9) +/* 00016218 00022FA8 FC 1E 00 00 */ fcmpu cr0, f30, f0 +/* 0001621C 00022FAC 41 80 62 40 */ blt .L_0001C45C +/* 00016220 00022FB0 FC 1E F8 00 */ fcmpu cr0, f30, f31 +/* 00016224 00022FB4 41 80 62 2C */ blt .L_0001C450 +/* 00016228 00022FB8 FF C0 F8 90 */ fmr f30, f31 +/* 0001622C 00022FBC 3D 20 00 00 */ lis r9, .rodata+0xC54@ha +/* 00016230 00022FC0 81 7F 00 1C */ lwz r11, 0x1c(r31) +/* 00016234 00022FC4 C0 09 0C 54 */ lfs f0, .rodata+0xC54@l(r9) +/* 00016238 00022FC8 EF DE 00 32 */ fmuls f30, f30, f0 +/* 0001623C 00022FCC D3 CB 00 CC */ stfs f30, 0xcc(r11) +/* 00016240 00022FD0 3D 20 00 00 */ lis r9, .rodata+0xC50@ha +/* 00016244 00022FD4 C0 09 0C 50 */ lfs f0, .rodata+0xC50@l(r9) +/* 00016248 00022FD8 FC 1E 00 00 */ fcmpu cr0, f30, f0 +/* 0001624C 00022FDC 4C 62 0B 82 */ cror un, eq, gt +/* 00016250 00022FE0 41 83 62 58 */ bso .L_0001C4A8 +/* 00016254 00022FE4 FF C0 00 90 */ fmr f30, f0 +/* 00016258 00022FE8 80 7F 00 94 */ lwz r3, 0x94(r31) +/* 0001625C 00022FEC FC 20 D8 90 */ fmr f1, f27 +/* 00016260 00022FF0 48 01 44 15 */ bl .text+0x14414 +/* 00016264 00022FF4 3D 20 00 00 */ lis r9, .rodata+0xC48@ha +/* 00016268 00022FF8 C0 09 0C 48 */ lfs f0, .rodata+0xC48@l(r9) +.L_0001626C: +/* 0001626C 00022FFC FC 01 00 00 */ fcmpu cr0, f1, f0 +/* 00016270 00023000 41 80 62 7C */ blt .L_0001C4EC +.L_00016274: +/* 00016274 00023004 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 00016278 00023008 D0 29 00 BC */ stfs f1, 0xbc(r9) +/* 0001627C 0002300C 7F E3 FB 78 */ mr r3, r31 +/* 00016280 00023010 FC 20 D8 90 */ fmr f1, f27 +.L_00016284: +/* 00016284 00023014 48 01 5C A1 */ bl .text+0x15CA0 +/* 00016288 00023018 7C 63 1B 79 */ mr. r3, r3 +/* 0001628C 0002301C 41 82 62 A8 */ beq .L_0001C534 +/* 00016290 00023020 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha +/* 00016294 00023024 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) +/* 00016298 00023028 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0001629C 0002302C 40 82 62 A8 */ bne .L_0001C544 +/* 000162A0 00023030 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 000162A4 00023034 B0 69 00 C4 */ sth r3, 0xc4(r9) +/* 000162A8 00023038 3D 20 00 00 */ lis r9, .rodata+0xC48@ha +/* 000162AC 0002303C 38 81 00 48 */ addi r4, r1, 0x48 +/* 000162B0 00023040 C3 E9 0C 48 */ lfs f31, .rodata+0xC48@l(r9) +/* 000162B4 00023044 3B C1 00 58 */ addi r30, r1, 0x58 +/* 000162B8 00023048 7C 98 23 78 */ mr r24, r4 +/* 000162BC 0002304C 7F E3 FB 78 */ mr r3, r31 +/* 000162C0 00023050 FC 20 D8 90 */ fmr f1, f27 +/* 000162C4 00023054 D3 E1 00 48 */ stfs f31, 0x48(r1) +/* 000162C8 00023058 D3 E1 00 4C */ stfs f31, 0x4c(r1) +.L_000162CC: +/* 000162CC 0002305C 7F D9 F3 78 */ mr r25, r30 +.L_000162D0: +/* 000162D0 00023060 D3 E1 00 50 */ stfs f31, 0x50(r1) +/* 000162D4 00023064 D3 E1 00 54 */ stfs f31, 0x54(r1) +/* 000162D8 00023068 D3 E1 00 58 */ stfs f31, 0x58(r1) +/* 000162DC 0002306C D3 E1 00 5C */ stfs f31, 0x5c(r1) +/* 000162E0 00023070 D3 E1 00 60 */ stfs f31, 0x60(r1) +/* 000162E4 00023074 D3 E1 00 64 */ stfs f31, 0x64(r1) +/* 000162E8 00023078 48 01 5E 2D */ bl .text+0x15E2C +/* 000162EC 0002307C 7F E3 FB 78 */ mr r3, r31 +/* 000162F0 00023080 7F C4 F3 78 */ mr r4, r30 +/* 000162F4 00023084 FC 20 D8 90 */ fmr f1, f27 +/* 000162F8 00023088 48 01 5F 15 */ bl .text+0x15F14 +.L_000162FC: +/* 000162FC 0002308C 81 3F 00 C4 */ lwz r9, 0xc4(r31) +/* 00016300 00023090 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00016304 00023094 40 82 63 9C */ bne .L_0001C6A0 +/* 00016308 00023098 81 7F 00 80 */ lwz r11, 0x80(r31) +/* 0001630C 0002309C 39 01 00 68 */ addi r8, r1, 0x68 +/* 00016310 000230A0 3C E0 00 00 */ lis r7, .rodata+0xC50@ha +/* 00016314 000230A4 38 A1 00 78 */ addi r5, r1, 0x78 +/* 00016318 000230A8 83 CB 00 10 */ lwz r30, 0x10(r11) +/* 0001631C 000230AC 39 2B 00 10 */ addi r9, r11, 0x10 +/* 00016320 000230B0 80 09 00 0C */ lwz r0, 0xc(r9) +/* 00016324 000230B4 39 49 00 10 */ addi r10, r9, 0x10 +/* 00016328 000230B8 83 A9 00 04 */ lwz r29, 0x4(r9) +/* 0001632C 000230BC 38 CB 00 30 */ addi r6, r11, 0x30 +/* 00016330 000230C0 80 89 00 08 */ lwz r4, 0x8(r9) +/* 00016334 000230C4 38 61 00 88 */ addi r3, r1, 0x88 +.L_00016338: +/* 00016338 000230C8 93 C1 00 68 */ stw r30, 0x68(r1) +/* 0001633C 000230CC 90 08 00 0C */ stw r0, 0xc(r8) +/* 00016340 000230D0 93 A8 00 04 */ stw r29, 0x4(r8) +/* 00016344 000230D4 90 88 00 08 */ stw r4, 0x8(r8) +/* 00016348 000230D8 C1 67 0C 50 */ lfs f11, .rodata+0xC50@l(r7) +/* 0001634C 000230DC 80 09 00 10 */ lwz r0, 0x10(r9) +/* 00016350 000230E0 81 0A 00 0C */ lwz r8, 0xc(r10) +/* 00016354 000230E4 81 2A 00 04 */ lwz r9, 0x4(r10) +/* 00016358 000230E8 80 EA 00 08 */ lwz r7, 0x8(r10) +/* 0001635C 000230EC 90 01 00 78 */ stw r0, 0x78(r1) +/* 00016360 000230F0 91 05 00 0C */ stw r8, 0xc(r5) +/* 00016364 000230F4 91 25 00 04 */ stw r9, 0x4(r5) +/* 00016368 000230F8 90 E5 00 08 */ stw r7, 0x8(r5) +/* 0001636C 000230FC 80 0B 00 30 */ lwz r0, 0x30(r11) +/* 00016370 00023100 81 26 00 0C */ lwz r9, 0xc(r6) +/* 00016374 00023104 81 46 00 04 */ lwz r10, 0x4(r6) +/* 00016378 00023108 81 06 00 08 */ lwz r8, 0x8(r6) +/* 0001637C 0002310C 90 01 00 88 */ stw r0, 0x88(r1) +.L_00016380: +/* 00016380 00023110 91 23 00 0C */ stw r9, 0xc(r3) +.L_00016384: +/* 00016384 00023114 91 43 00 04 */ stw r10, 0x4(r3) +.L_00016388: +/* 00016388 00023118 91 03 00 08 */ stw r8, 0x8(r3) +/* 0001638C 0002311C C1 8B 00 08 */ lfs f12, 0x8(r11) +/* 00016390 00023120 C0 0B 00 00 */ lfs f0, 0x0(r11) +/* 00016394 00023124 C1 AB 00 04 */ lfs f13, 0x4(r11) +.L_00016398: +/* 00016398 00023128 48 01 65 F0 */ b .text+0x165F0 +/* 0001639C 0002312C 88 09 00 08 */ lbz r0, 0x8(r9) +/* 000163A0 00023130 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000163A4 00023134 40 82 65 60 */ bne .L_0001C904 +/* 000163A8 00023138 88 09 00 09 */ lbz r0, 0x9(r9) +/* 000163AC 0002313C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000163B0 00023140 41 82 63 BC */ beq .L_0001C76C +/* 000163B4 00023144 2C 1D 00 00 */ cmpwi r29, 0x0 +/* 000163B8 00023148 40 82 64 4C */ bne .L_0001C804 +/* 000163BC 0002314C 81 7F 00 80 */ lwz r11, 0x80(r31) +/* 000163C0 00023150 3D 20 00 00 */ lis r9, .rodata+0xC50@ha +/* 000163C4 00023154 C1 49 0C 50 */ lfs f10, .rodata+0xC50@l(r9) +/* 000163C8 00023158 C1 6B 00 10 */ lfs f11, 0x10(r11) +/* 000163CC 0002315C 39 2B 00 10 */ addi r9, r11, 0x10 +/* 000163D0 00023160 C0 0B 00 14 */ lfs f0, 0x14(r11) +/* 000163D4 00023164 C1 AB 00 18 */ lfs f13, 0x18(r11) +/* 000163D8 00023168 C1 8B 00 1C */ lfs f12, 0x1c(r11) +/* 000163DC 0002316C D1 61 00 68 */ stfs f11, 0x68(r1) +/* 000163E0 00023170 D0 01 00 6C */ stfs f0, 0x6c(r1) +/* 000163E4 00023174 D1 A1 00 70 */ stfs f13, 0x70(r1) +/* 000163E8 00023178 D1 81 00 74 */ stfs f12, 0x74(r1) +/* 000163EC 0002317C C1 69 00 1C */ lfs f11, 0x1c(r9) +/* 000163F0 00023180 C0 09 00 10 */ lfs f0, 0x10(r9) +/* 000163F4 00023184 C1 A9 00 14 */ lfs f13, 0x14(r9) +/* 000163F8 00023188 C1 89 00 18 */ lfs f12, 0x18(r9) +/* 000163FC 0002318C D0 01 00 78 */ stfs f0, 0x78(r1) +/* 00016400 00023190 D1 A1 00 7C */ stfs f13, 0x7c(r1) +/* 00016404 00023194 D1 81 00 80 */ stfs f12, 0x80(r1) +/* 00016408 00023198 D1 61 00 84 */ stfs f11, 0x84(r1) +/* 0001640C 0002319C C0 0B 00 30 */ lfs f0, 0x30(r11) +/* 00016410 000231A0 C1 AB 00 34 */ lfs f13, 0x34(r11) +/* 00016414 000231A4 C1 8B 00 38 */ lfs f12, 0x38(r11) +/* 00016418 000231A8 C1 6B 00 3C */ lfs f11, 0x3c(r11) +/* 0001641C 000231AC D0 01 00 88 */ stfs f0, 0x88(r1) +/* 00016420 000231B0 D1 A1 00 8C */ stfs f13, 0x8c(r1) +/* 00016424 000231B4 D1 81 00 90 */ stfs f12, 0x90(r1) +/* 00016428 000231B8 D1 61 00 94 */ stfs f11, 0x94(r1) +/* 0001642C 000231BC C1 8B 00 08 */ lfs f12, 0x8(r11) +/* 00016430 000231C0 C0 0B 00 00 */ lfs f0, 0x0(r11) +/* 00016434 000231C4 C1 AB 00 04 */ lfs f13, 0x4(r11) +/* 00016438 000231C8 D0 01 00 98 */ stfs f0, 0x98(r1) +.L_0001643C: +/* 0001643C 000231CC D1 A1 00 9C */ stfs f13, 0x9c(r1) +.L_00016440: +/* 00016440 000231D0 D1 81 00 A0 */ stfs f12, 0xa0(r1) +/* 00016444 000231D4 D1 41 00 A4 */ stfs f10, 0xa4(r1) +/* 00016448 000231D8 48 01 66 00 */ b .text+0x16600 +/* 0001644C 000231DC 81 5F 00 80 */ lwz r10, 0x80(r31) +/* 00016450 000231E0 3D 20 00 00 */ lis r9, .rodata+0xC58@ha +/* 00016454 000231E4 3D 60 00 00 */ lis r11, .rodata+0xC5C@ha +/* 00016458 000231E8 C1 89 0C 58 */ lfs f12, .rodata+0xC58@l(r9) +/* 0001645C 000231EC C0 0A 00 00 */ lfs f0, 0x0(r10) +/* 00016460 000231F0 3B C1 00 68 */ addi r30, r1, 0x68 +/* 00016464 000231F4 C1 6B 0C 5C */ lfs f11, .rodata+0xC5C@l(r11) +/* 00016468 000231F8 3B 81 00 78 */ addi r28, r1, 0x78 +/* 0001646C 000231FC C1 BF 01 0C */ lfs f13, 0x10c(r31) +/* 00016470 00023200 3B A1 00 88 */ addi r29, r1, 0x88 +/* 00016474 00023204 ED 9C 5B 3A */ fmadds f12, f28, f12, f11 +/* 00016478 00023208 C1 5F 01 10 */ lfs f10, 0x110(r31) +/* 0001647C 0002320C EC 00 68 28 */ fsubs f0, f0, f13 +/* 00016480 00023210 C1 7F 01 14 */ lfs f11, 0x114(r31) +/* 00016484 00023214 EC 00 6B 3A */ fmadds f0, f0, f12, f13 +/* 00016488 00023218 C1 3F 01 1C */ lfs f9, 0x11c(r31) +/* 0001648C 0002321C D0 1F 01 0C */ stfs f0, 0x10c(r31) +/* 00016490 00023220 7F C3 F3 78 */ mr r3, r30 +/* 00016494 00023224 C1 1F 01 20 */ lfs f8, 0x120(r31) +/* 00016498 00023228 3B 7F 01 1C */ addi r27, r31, 0x11c +/* 0001649C 0002322C C1 AA 00 04 */ lfs f13, 0x4(r10) +/* 000164A0 00023230 C0 FF 01 24 */ lfs f7, 0x124(r31) +/* 000164A4 00023234 ED AD 50 28 */ fsubs f13, f13, f10 +/* 000164A8 00023238 ED AD 53 3A */ fmadds f13, f13, f12, f10 +/* 000164AC 0002323C D1 BF 01 10 */ stfs f13, 0x110(r31) +/* 000164B0 00023240 C0 0A 00 08 */ lfs f0, 0x8(r10) +/* 000164B4 00023244 EC 00 58 28 */ fsubs f0, f0, f11 +/* 000164B8 00023248 EC 00 5B 3A */ fmadds f0, f0, f12, f11 +/* 000164BC 0002324C D0 1F 01 14 */ stfs f0, 0x114(r31) +/* 000164C0 00023250 C1 AA 00 10 */ lfs f13, 0x10(r10) +.L_000164C4: +/* 000164C4 00023254 ED AD 48 28 */ fsubs f13, f13, f9 +/* 000164C8 00023258 ED AD 4B 3A */ fmadds f13, f13, f12, f9 +/* 000164CC 0002325C D1 BF 01 1C */ stfs f13, 0x11c(r31) +.L_000164D0: +/* 000164D0 00023260 C0 0A 00 14 */ lfs f0, 0x14(r10) +/* 000164D4 00023264 EC 00 40 28 */ fsubs f0, f0, f8 +.L_000164D8: +/* 000164D8 00023268 EC 00 43 3A */ fmadds f0, f0, f12, f8 +/* 000164DC 0002326C D0 1F 01 20 */ stfs f0, 0x120(r31) +/* 000164E0 00023270 C1 AA 00 18 */ lfs f13, 0x18(r10) +/* 000164E4 00023274 ED AD 38 28 */ fsubs f13, f13, f7 +/* 000164E8 00023278 ED AD 3B 3A */ fmadds f13, f13, f12, f7 +.L_000164EC: +/* 000164EC 0002327C D1 BF 01 24 */ stfs f13, 0x124(r31) +/* 000164F0 00023280 48 00 00 01 */ bl PSMTX44Identity +/* 000164F4 00023284 7F 63 DB 78 */ mr r3, r27 +/* 000164F8 00023288 7C 64 1B 78 */ mr r4, r3 +.L_000164FC: +/* 000164FC 0002328C 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +/* 00016500 00023290 C1 9F 01 1C */ lfs f12, 0x11c(r31) +/* 00016504 00023294 7F A4 EB 78 */ mr r4, r29 +/* 00016508 00023298 C1 BF 01 20 */ lfs f13, 0x120(r31) +/* 0001650C 0002329C 7F C5 F3 78 */ mr r5, r30 +/* 00016510 000232A0 C0 1F 01 24 */ lfs f0, 0x124(r31) +/* 00016514 000232A4 7F 83 E3 78 */ mr r3, r28 +/* 00016518 000232A8 D1 81 00 68 */ stfs f12, 0x68(r1) +/* 0001651C 000232AC D1 A1 00 6C */ stfs f13, 0x6c(r1) +/* 00016520 000232B0 D0 01 00 70 */ stfs f0, 0x70(r1) +/* 00016524 000232B4 D3 E1 00 74 */ stfs f31, 0x74(r1) +/* 00016528 000232B8 48 00 00 01 */ bl bCross__FP8bVector3PC8bVector3T1 +/* 0001652C 000232BC 7F A3 EB 78 */ mr r3, r29 +/* 00016530 000232C0 7F C4 F3 78 */ mr r4, r30 +/* 00016534 000232C4 7F 85 E3 78 */ mr r5, r28 +/* 00016538 000232C8 48 00 00 01 */ bl bCross__FP8bVector3PC8bVector3T1 +/* 0001653C 000232CC 3D 20 00 00 */ lis r9, .rodata+0xC50@ha +/* 00016540 000232D0 C1 9F 01 0C */ lfs f12, 0x10c(r31) +/* 00016544 000232D4 C0 1F 01 10 */ lfs f0, 0x110(r31) +/* 00016548 000232D8 C1 BF 01 14 */ lfs f13, 0x114(r31) +/* 0001654C 000232DC C1 69 0C 50 */ lfs f11, .rodata+0xC50@l(r9) +/* 00016550 000232E0 D1 81 00 98 */ stfs f12, 0x98(r1) +/* 00016554 000232E4 D0 01 00 9C */ stfs f0, 0x9c(r1) +/* 00016558 000232E8 D1 A1 00 A0 */ stfs f13, 0xa0(r1) +/* 0001655C 000232EC 48 01 65 FC */ b .text+0x165FC +/* 00016560 000232F0 80 1F 00 CC */ lwz r0, 0xcc(r31) +/* 00016564 000232F4 39 3F 00 CC */ addi r9, r31, 0xcc +/* 00016568 000232F8 80 69 00 0C */ lwz r3, 0xc(r9) +/* 0001656C 000232FC 39 61 00 68 */ addi r11, r1, 0x68 +/* 00016570 00023300 83 C9 00 04 */ lwz r30, 0x4(r9) +/* 00016574 00023304 39 5F 00 DC */ addi r10, r31, 0xdc +/* 00016578 00023308 80 A9 00 08 */ lwz r5, 0x8(r9) +/* 0001657C 0002330C 39 01 00 78 */ addi r8, r1, 0x78 +.L_00016580: +/* 00016580 00023310 90 01 00 68 */ stw r0, 0x68(r1) +/* 00016584 00023314 38 FF 00 EC */ addi r7, r31, 0xec +/* 00016588 00023318 38 C1 00 88 */ addi r6, r1, 0x88 +/* 0001658C 0002331C 3F A0 00 00 */ lis r29, .rodata+0xC50@ha +/* 00016590 00023320 80 9F 00 DC */ lwz r4, 0xdc(r31) +/* 00016594 00023324 90 6B 00 0C */ stw r3, 0xc(r11) +/* 00016598 00023328 93 CB 00 04 */ stw r30, 0x4(r11) +/* 0001659C 0002332C 90 AB 00 08 */ stw r5, 0x8(r11) +/* 000165A0 00023330 81 6A 00 08 */ lwz r11, 0x8(r10) +/* 000165A4 00023334 80 0A 00 0C */ lwz r0, 0xc(r10) +/* 000165A8 00023338 81 2A 00 04 */ lwz r9, 0x4(r10) +.L_000165AC: +/* 000165AC 0002333C 90 81 00 78 */ stw r4, 0x78(r1) +.L_000165B0: +/* 000165B0 00023340 C1 7D 0C 50 */ lfs f11, .rodata+0xC50@l(r29) +/* 000165B4 00023344 81 5F 00 EC */ lwz r10, 0xec(r31) +/* 000165B8 00023348 90 08 00 0C */ stw r0, 0xc(r8) +/* 000165BC 0002334C 91 28 00 04 */ stw r9, 0x4(r8) +/* 000165C0 00023350 91 68 00 08 */ stw r11, 0x8(r8) +/* 000165C4 00023354 81 67 00 08 */ lwz r11, 0x8(r7) +/* 000165C8 00023358 81 27 00 04 */ lwz r9, 0x4(r7) +.L_000165CC: +/* 000165CC 0002335C 80 07 00 0C */ lwz r0, 0xc(r7) +/* 000165D0 00023360 91 41 00 88 */ stw r10, 0x88(r1) +/* 000165D4 00023364 90 06 00 0C */ stw r0, 0xc(r6) +/* 000165D8 00023368 91 66 00 08 */ stw r11, 0x8(r6) +.L_000165DC: +/* 000165DC 0002336C 91 26 00 04 */ stw r9, 0x4(r6) +/* 000165E0 00023370 81 3F 00 80 */ lwz r9, 0x80(r31) +/* 000165E4 00023374 C1 89 00 08 */ lfs f12, 0x8(r9) +/* 000165E8 00023378 C0 09 00 00 */ lfs f0, 0x0(r9) +.L_000165EC: +/* 000165EC 0002337C C1 A9 00 04 */ lfs f13, 0x4(r9) +/* 000165F0 00023380 D0 01 00 98 */ stfs f0, 0x98(r1) +/* 000165F4 00023384 D1 A1 00 9C */ stfs f13, 0x9c(r1) +/* 000165F8 00023388 D1 81 00 A0 */ stfs f12, 0xa0(r1) +/* 000165FC 0002338C D1 61 00 A4 */ stfs f11, 0xa4(r1) +/* 00016600 00023390 80 1F 00 BC */ lwz r0, 0xbc(r31) +/* 00016604 00023394 2C 00 00 02 */ cmpwi r0, 0x2 +/* 00016608 00023398 40 82 66 44 */ bne .L_0001CC4C +/* 0001660C 0002339C 81 3F 00 80 */ lwz r9, 0x80(r31) +/* 00016610 000233A0 C1 A1 00 48 */ lfs f13, 0x48(r1) +/* 00016614 000233A4 C0 09 00 00 */ lfs f0, 0x0(r9) +/* 00016618 000233A8 C1 81 00 4C */ lfs f12, 0x4c(r1) +/* 0001661C 000233AC ED AD 00 2A */ fadds f13, f13, f0 +/* 00016620 000233B0 C1 61 00 50 */ lfs f11, 0x50(r1) +/* 00016624 000233B4 D1 A1 00 48 */ stfs f13, 0x48(r1) +/* 00016628 000233B8 C0 09 00 04 */ lfs f0, 0x4(r9) +.L_0001662C: +/* 0001662C 000233BC ED 8C 00 2A */ fadds f12, f12, f0 +/* 00016630 000233C0 D1 81 00 4C */ stfs f12, 0x4c(r1) +/* 00016634 000233C4 C0 09 00 08 */ lfs f0, 0x8(r9) +/* 00016638 000233C8 ED 6B 00 2A */ fadds f11, f11, f0 +/* 0001663C 000233CC D1 61 00 50 */ stfs f11, 0x50(r1) +/* 00016640 000233D0 48 01 66 78 */ b .text+0x16678 +/* 00016644 000233D4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00016648 000233D8 40 82 66 60 */ bne .L_0001CCA8 +/* 0001664C 000233DC 7F 03 C3 78 */ mr r3, r24 +/* 00016650 000233E0 38 81 00 68 */ addi r4, r1, 0x68 +/* 00016654 000233E4 7F 05 C3 78 */ mr r5, r24 +/* 00016658 000233E8 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 +/* 0001665C 000233EC 48 01 66 78 */ b .text+0x16678 +/* 00016660 000233F0 2C 00 00 03 */ cmpwi r0, 0x3 +/* 00016664 000233F4 40 82 66 78 */ bne .L_0001CCDC +/* 00016668 000233F8 7F 03 C3 78 */ mr r3, r24 +/* 0001666C 000233FC 38 81 00 08 */ addi r4, r1, 0x8 +/* 00016670 00023400 7F 05 C3 78 */ mr r5, r24 +/* 00016674 00023404 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 +/* 00016678 00023408 80 1F 00 C0 */ lwz r0, 0xc0(r31) +/* 0001667C 0002340C 2C 00 00 02 */ cmpwi r0, 0x2 +/* 00016680 00023410 40 82 66 BC */ bne .L_0001CD3C +/* 00016684 00023414 81 3F 00 80 */ lwz r9, 0x80(r31) +/* 00016688 00023418 C1 A1 00 58 */ lfs f13, 0x58(r1) +/* 0001668C 0002341C C0 09 00 00 */ lfs f0, 0x0(r9) +.L_00016690: +/* 00016690 00023420 C1 81 00 5C */ lfs f12, 0x5c(r1) +/* 00016694 00023424 ED AD 00 2A */ fadds f13, f13, f0 +/* 00016698 00023428 C1 61 00 60 */ lfs f11, 0x60(r1) +/* 0001669C 0002342C D1 A1 00 58 */ stfs f13, 0x58(r1) +/* 000166A0 00023430 C0 09 00 04 */ lfs f0, 0x4(r9) +/* 000166A4 00023434 ED 8C 00 2A */ fadds f12, f12, f0 +/* 000166A8 00023438 D1 81 00 5C */ stfs f12, 0x5c(r1) +.L_000166AC: +/* 000166AC 0002343C C0 09 00 08 */ lfs f0, 0x8(r9) +.L_000166B0: +/* 000166B0 00023440 ED 6B 00 2A */ fadds f11, f11, f0 +.L_000166B4: +/* 000166B4 00023444 D1 61 00 60 */ stfs f11, 0x60(r1) +/* 000166B8 00023448 48 01 66 F0 */ b .text+0x166F0 +/* 000166BC 0002344C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000166C0 00023450 40 82 66 D8 */ bne .L_0001CD98 +/* 000166C4 00023454 7F 23 CB 78 */ mr r3, r25 +/* 000166C8 00023458 38 81 00 68 */ addi r4, r1, 0x68 +/* 000166CC 0002345C 7F 25 CB 78 */ mr r5, r25 +/* 000166D0 00023460 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 +/* 000166D4 00023464 48 01 66 F0 */ b .text+0x166F0 +/* 000166D8 00023468 2C 00 00 03 */ cmpwi r0, 0x3 +/* 000166DC 0002346C 40 82 66 F0 */ bne .L_0001CDCC +/* 000166E0 00023470 7F 23 CB 78 */ mr r3, r25 +/* 000166E4 00023474 38 81 00 08 */ addi r4, r1, 0x8 +/* 000166E8 00023478 7F 25 CB 78 */ mr r5, r25 +/* 000166EC 0002347C 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 +/* 000166F0 00023480 81 3F 00 C4 */ lwz r9, 0xc4(r31) +/* 000166F4 00023484 EF 5D 07 B2 */ fmuls f26, f29, f30 +/* 000166F8 00023488 2C 09 00 00 */ cmpwi r9, 0x0 +/* 000166FC 0002348C 41 82 68 8C */ beq .L_0001CF88 +/* 00016700 00023490 88 09 00 09 */ lbz r0, 0x9(r9) +/* 00016704 00023494 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00016708 00023498 41 82 68 8C */ beq .L_0001CF94 +/* 0001670C 0002349C 3D 20 00 00 */ lis r9, .rodata+0xC48@ha +/* 00016710 000234A0 80 9F 00 80 */ lwz r4, 0x80(r31) +/* 00016714 000234A4 C3 E9 0C 48 */ lfs f31, .rodata+0xC48@l(r9) +/* 00016718 000234A8 80 7F 00 B0 */ lwz r3, 0xb0(r31) +/* 0001671C 000234AC 38 84 00 60 */ addi r4, r4, 0x60 +/* 00016720 000234B0 D3 E1 00 A8 */ stfs f31, 0xa8(r1) +/* 00016724 000234B4 D3 E1 00 AC */ stfs f31, 0xac(r1) +/* 00016728 000234B8 D3 E1 00 B0 */ stfs f31, 0xb0(r1) +/* 0001672C 000234BC D3 E1 00 B4 */ stfs f31, 0xb4(r1) +/* 00016730 000234C0 48 01 48 39 */ bl .text+0x14838 +/* 00016734 000234C4 80 7F 00 B0 */ lwz r3, 0xb0(r31) +/* 00016738 000234C8 FC 60 F8 90 */ fmr f3, f31 +/* 0001673C 000234CC FC 20 D0 90 */ fmr f1, f26 +/* 00016740 000234D0 FC 40 F8 90 */ fmr f2, f31 +/* 00016744 000234D4 48 01 49 61 */ bl .text+0x14960 +/* 00016748 000234D8 80 7F 00 B0 */ lwz r3, 0xb0(r31) +/* 0001674C 000234DC 38 81 00 A8 */ addi r4, r1, 0xa8 +/* 00016750 000234E0 48 01 48 AD */ bl .text+0x148AC +/* 00016754 000234E4 3D 60 00 00 */ lis r11, vIceAccelLagScale@ha +.L_00016758: +/* 00016758 000234E8 C0 01 00 A8 */ lfs f0, 0xa8(r1) +/* 0001675C 000234EC C1 8B 00 00 */ lfs f12, vIceAccelLagScale@l(r11) +/* 00016760 000234F0 3D 20 00 00 */ lis r9, vIceAccelLagMin@ha +/* 00016764 000234F4 C1 69 00 00 */ lfs f11, vIceAccelLagMin@l(r9) +/* 00016768 000234F8 39 4B 00 00 */ addi r10, r11, vIceAccelLagScale@l +/* 0001676C 000234FC EC 00 03 32 */ fmuls f0, f0, f12 +/* 00016770 00023500 39 69 00 00 */ addi r11, r9, vIceAccelLagMin@l +/* 00016774 00023504 ED A0 58 28 */ fsubs f13, f0, f11 +/* 00016778 00023508 D0 01 00 A8 */ stfs f0, 0xa8(r1) +/* 0001677C 0002350C FC 0D F8 00 */ fcmpu cr0, f13, f31 +.L_00016780: +/* 00016780 00023510 4C 62 0B 82 */ cror un, eq, gt +/* 00016784 00023514 41 83 67 8C */ bso .L_0001CF10 +/* 00016788 00023518 D1 61 00 A8 */ stfs f11, 0xa8(r1) +/* 0001678C 0002351C 3D 20 00 00 */ lis r9, vIceAccelLagMax@ha +/* 00016790 00023520 C0 01 00 A8 */ lfs f0, 0xa8(r1) +/* 00016794 00023524 C1 A9 00 00 */ lfs f13, vIceAccelLagMax@l(r9) +/* 00016798 00023528 39 29 00 00 */ addi r9, r9, vIceAccelLagMax@l +/* 0001679C 0002352C EC 0D 00 28 */ fsubs f0, f13, f0 +/* 000167A0 00023530 FC 00 F8 00 */ fcmpu cr0, f0, f31 +/* 000167A4 00023534 4C 62 0B 82 */ cror un, eq, gt +/* 000167A8 00023538 41 83 67 B0 */ bso .L_0001CF58 +/* 000167AC 0002353C D1 A1 00 A8 */ stfs f13, 0xa8(r1) +.L_000167B0: +/* 000167B0 00023540 C0 01 00 AC */ lfs f0, 0xac(r1) +/* 000167B4 00023544 C1 AA 00 04 */ lfs f13, 0x4(r10) +/* 000167B8 00023548 C1 6B 00 04 */ lfs f11, 0x4(r11) +.L_000167BC: +/* 000167BC 0002354C EC 00 03 72 */ fmuls f0, f0, f13 +.L_000167C0: +/* 000167C0 00023550 ED 80 58 28 */ fsubs f12, f0, f11 +/* 000167C4 00023554 D0 01 00 AC */ stfs f0, 0xac(r1) +/* 000167C8 00023558 FC 0C F8 00 */ fcmpu cr0, f12, f31 +/* 000167CC 0002355C 4C 62 0B 82 */ cror un, eq, gt +/* 000167D0 00023560 41 83 67 D8 */ bso .L_0001CFA8 +/* 000167D4 00023564 D1 61 00 AC */ stfs f11, 0xac(r1) +/* 000167D8 00023568 C1 A9 00 04 */ lfs f13, 0x4(r9) +/* 000167DC 0002356C C0 01 00 AC */ lfs f0, 0xac(r1) +/* 000167E0 00023570 EC 0D 00 28 */ fsubs f0, f13, f0 +/* 000167E4 00023574 FC 00 F8 00 */ fcmpu cr0, f0, f31 +/* 000167E8 00023578 4C 62 0B 82 */ cror un, eq, gt +/* 000167EC 0002357C 41 83 67 F4 */ bso .L_0001CFE0 +/* 000167F0 00023580 D1 A1 00 AC */ stfs f13, 0xac(r1) +/* 000167F4 00023584 C0 0A 00 08 */ lfs f0, 0x8(r10) +/* 000167F8 00023588 C1 A1 00 B0 */ lfs f13, 0xb0(r1) +.L_000167FC: +/* 000167FC 0002358C C1 6B 00 08 */ lfs f11, 0x8(r11) +/* 00016800 00023590 ED AD 00 32 */ fmuls f13, f13, f0 +/* 00016804 00023594 ED 8D 58 28 */ fsubs f12, f13, f11 +/* 00016808 00023598 D1 A1 00 B0 */ stfs f13, 0xb0(r1) +/* 0001680C 0002359C FC 0C F8 00 */ fcmpu cr0, f12, f31 +/* 00016810 000235A0 4C 62 0B 82 */ cror un, eq, gt +/* 00016814 000235A4 41 83 68 1C */ bso .L_0001D030 +/* 00016818 000235A8 D1 61 00 B0 */ stfs f11, 0xb0(r1) +/* 0001681C 000235AC C1 A9 00 08 */ lfs f13, 0x8(r9) +/* 00016820 000235B0 C0 01 00 B0 */ lfs f0, 0xb0(r1) +/* 00016824 000235B4 EC 0D 00 28 */ fsubs f0, f13, f0 +/* 00016828 000235B8 FC 00 F8 00 */ fcmpu cr0, f0, f31 +/* 0001682C 000235BC 4C 62 0B 82 */ cror un, eq, gt +/* 00016830 000235C0 41 83 68 38 */ bso .L_0001D068 +/* 00016834 000235C4 D1 A1 00 B0 */ stfs f13, 0xb0(r1) +/* 00016838 000235C8 C1 41 00 58 */ lfs f10, 0x58(r1) +.L_0001683C: +/* 0001683C 000235CC C0 C1 00 A8 */ lfs f6, 0xa8(r1) +.L_00016840: +/* 00016840 000235D0 C1 21 00 5C */ lfs f9, 0x5c(r1) +/* 00016844 000235D4 C0 E1 00 AC */ lfs f7, 0xac(r1) +/* 00016848 000235D8 ED 4A 30 28 */ fsubs f10, f10, f6 +/* 0001684C 000235DC C1 61 00 60 */ lfs f11, 0x60(r1) +/* 00016850 000235E0 C1 01 00 B0 */ lfs f8, 0xb0(r1) +/* 00016854 000235E4 ED 29 38 28 */ fsubs f9, f9, f7 +.L_00016858: +/* 00016858 000235E8 C1 A1 00 48 */ lfs f13, 0x48(r1) +/* 0001685C 000235EC C1 81 00 4C */ lfs f12, 0x4c(r1) +/* 00016860 000235F0 ED 6B 40 28 */ fsubs f11, f11, f8 +/* 00016864 000235F4 C0 01 00 50 */ lfs f0, 0x50(r1) +/* 00016868 000235F8 ED AD 30 28 */ fsubs f13, f13, f6 +/* 0001686C 000235FC ED 8C 38 28 */ fsubs f12, f12, f7 +/* 00016870 00023600 D1 41 00 58 */ stfs f10, 0x58(r1) +/* 00016874 00023604 EC 00 40 28 */ fsubs f0, f0, f8 +/* 00016878 00023608 D1 21 00 5C */ stfs f9, 0x5c(r1) +/* 0001687C 0002360C D1 61 00 60 */ stfs f11, 0x60(r1) +/* 00016880 00023610 D1 A1 00 48 */ stfs f13, 0x48(r1) +/* 00016884 00023614 D1 81 00 4C */ stfs f12, 0x4c(r1) +/* 00016888 00023618 D0 01 00 50 */ stfs f0, 0x50(r1) +/* 0001688C 0002361C 3D 20 00 00 */ lis r9, TheICEManager@ha +/* 00016890 00023620 3B C1 00 B8 */ addi r30, r1, 0xb8 +/* 00016894 00023624 3B A9 00 00 */ addi r29, r9, TheICEManager@l +/* 00016898 00023628 7F E3 FB 78 */ mr r3, r31 +/* 0001689C 0002362C FC 20 D8 90 */ fmr f1, f27 +/* 000168A0 00023630 83 7D 00 28 */ lwz r27, 0x28(r29) +/* 000168A4 00023634 48 01 5C 29 */ bl .text+0x15C28 +/* 000168A8 00023638 7F DC F3 78 */ mr r28, r30 +/* 000168AC 0002363C 3D 20 00 00 */ lis r9, .rodata+0xC60@ha +/* 000168B0 00023640 C1 A9 0C 60 */ lfs f13, .rodata+0xC60@l(r9) +/* 000168B4 00023644 7F 04 C3 78 */ mr r4, r24 +/* 000168B8 00023648 7F 25 CB 78 */ mr r5, r25 +/* 000168BC 0002364C 7F C3 F3 78 */ mr r3, r30 +/* 000168C0 00023650 EC 21 03 72 */ fmuls f1, f1, f13 +/* 000168C4 00023654 FC 00 08 1E */ fctiwz f0, f1 +/* 000168C8 00023658 D8 01 01 60 */ stfd f0, 0x160(r1) +/* 000168CC 0002365C 80 C1 01 64 */ lwz r6, 0x164(r1) +.L_000168D0: +/* 000168D0 00023660 54 C6 04 3E */ clrlwi r6, r6, 16 +/* 000168D4 00023664 48 01 3A 75 */ bl .text+0x13A74 +.L_000168D8: +/* 000168D8 00023668 80 7F 00 98 */ lwz r3, 0x98(r31) +/* 000168DC 0002366C FC 20 D8 90 */ fmr f1, f27 +/* 000168E0 00023670 48 01 44 15 */ bl .text+0x14414 +/* 000168E4 00023674 FF A0 08 90 */ fmr f29, f1 +/* 000168E8 00023678 80 7F 00 9C */ lwz r3, 0x9c(r31) +.L_000168EC: +/* 000168EC 0002367C FC 20 D8 90 */ fmr f1, f27 +/* 000168F0 00023680 48 01 44 15 */ bl .text+0x14414 +/* 000168F4 00023684 3D 20 00 00 */ lis r9, .rodata+0xC48@ha +/* 000168F8 00023688 FF E0 08 90 */ fmr f31, f1 +.L_000168FC: +/* 000168FC 0002368C C0 09 0C 48 */ lfs f0, .rodata+0xC48@l(r9) +/* 00016900 00023690 FC 1D 00 00 */ fcmpu cr0, f29, f0 +/* 00016904 00023694 4C 62 0B 82 */ cror un, eq, gt +/* 00016908 00023698 41 83 69 10 */ bso .text+0x16910 +/* 0001690C 0002369C FF A0 00 90 */ fmr f29, f0 +/* 00016910 000236A0 FC 1F 00 00 */ fcmpu cr0, f31, f0 +/* 00016914 000236A4 4C 62 0B 82 */ cror un, eq, gt +/* 00016918 000236A8 41 83 69 20 */ bso .text+0x16920 +/* 0001691C 000236AC FF E0 00 90 */ fmr f31, f0 +/* 00016920 000236B0 80 9F 00 C4 */ lwz r4, 0xc4(r31) +/* 00016924 000236B4 2C 04 00 00 */ cmpwi r4, 0x0 +/* 00016928 000236B8 41 82 69 38 */ beq .text+0x16938 +/* 0001692C 000236BC 80 84 00 0C */ lwz r4, 0xc(r4) +/* 00016930 000236C0 2C 04 00 00 */ cmpwi r4, 0x0 +/* 00016934 000236C4 40 82 69 B4 */ bne .text+0x169B4 +/* 00016938 000236C8 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 0001693C 000236CC D3 A9 00 8C */ stfs f29, 0x8c(r9) +/* 00016940 000236D0 D0 09 00 80 */ stfs f0, 0x80(r9) +/* 00016944 000236D4 D0 09 00 84 */ stfs f0, 0x84(r9) +/* 00016948 000236D8 D3 A9 00 88 */ stfs f29, 0x88(r9) +/* 0001694C 000236DC 81 7F 00 1C */ lwz r11, 0x1c(r31) +/* 00016950 000236E0 D3 AB 00 7C */ stfs f29, 0x7c(r11) +/* 00016954 000236E4 D0 0B 00 70 */ stfs f0, 0x70(r11) +/* 00016958 000236E8 D0 0B 00 74 */ stfs f0, 0x74(r11) +/* 0001695C 000236EC D3 AB 00 78 */ stfs f29, 0x78(r11) +/* 00016960 000236F0 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 00016964 000236F4 D0 09 00 AC */ stfs f0, 0xac(r9) +/* 00016968 000236F8 D0 09 00 A0 */ stfs f0, 0xa0(r9) +/* 0001696C 000236FC D0 09 00 A4 */ stfs f0, 0xa4(r9) +/* 00016970 00023700 D0 09 00 A8 */ stfs f0, 0xa8(r9) +/* 00016974 00023704 81 7F 00 1C */ lwz r11, 0x1c(r31) +/* 00016978 00023708 D0 0B 00 9C */ stfs f0, 0x9c(r11) +/* 0001697C 0002370C D0 0B 00 90 */ stfs f0, 0x90(r11) +/* 00016980 00023710 D0 0B 00 94 */ stfs f0, 0x94(r11) +/* 00016984 00023714 D0 0B 00 98 */ stfs f0, 0x98(r11) +/* 00016988 00023718 40 92 69 94 */ bne cr4, .text+0x16994 +/* 0001698C 0002371C C0 1A 00 10 */ lfs f0, 0x10(r26) +/* 00016990 00023720 48 01 69 98 */ b .text+0x16998 +/* 00016994 00023724 C0 1D 00 58 */ lfs f0, 0x58(r29) +/* 00016998 00023728 3D 20 00 00 */ lis r9, .rodata+0xC50@ha +.L_0001699C: +/* 0001699C 0002372C 80 7F 00 1C */ lwz r3, 0x1c(r31) +.L_000169A0: +/* 000169A0 00023730 C0 49 0C 50 */ lfs f2, .rodata+0xC50@l(r9) +/* 000169A4 00023734 EC 3C 00 32 */ fmuls f1, f28, f0 +/* 000169A8 00023738 7F 84 E3 78 */ mr r4, r28 +/* 000169AC 0002373C 48 00 0A 61 */ bl .L_0001740C +/* 000169B0 00023740 48 01 6B C0 */ b .text+0x16BC0 +/* 000169B4 00023744 7F A3 EB 78 */ mr r3, r29 +/* 000169B8 00023748 48 01 84 19 */ bl .text+0x18418 +/* 000169BC 0002374C 7C 63 1B 79 */ mr. r3, r3 +/* 000169C0 00023750 41 82 6B C0 */ beq .text+0x16BC0 +/* 000169C4 00023754 40 92 69 D0 */ bne cr4, .text+0x169D0 +/* 000169C8 00023758 C0 1A 00 10 */ lfs f0, 0x10(r26) +/* 000169CC 0002375C 48 01 69 D4 */ b .text+0x169D4 +.L_000169D0: +/* 000169D0 00023760 C0 1D 00 58 */ lfs f0, 0x58(r29) +/* 000169D4 00023764 EC 1C 00 32 */ fmuls f0, f28, f0 +/* 000169D8 00023768 A0 03 00 0C */ lhz r0, 0xc(r3) +/* 000169DC 0002376C EC 00 07 F2 */ fmuls f0, f0, f31 +/* 000169E0 00023770 7C 0A 07 34 */ extsh r10, r0 +/* 000169E4 00023774 FD A0 00 1E */ fctiwz f13, f0 +/* 000169E8 00023778 7C 08 03 78 */ mr r8, r0 +/* 000169EC 0002377C D9 A1 01 60 */ stfd f13, 0x160(r1) +/* 000169F0 00023780 2C 0A 00 00 */ cmpwi r10, 0x0 +/* 000169F4 00023784 81 61 01 64 */ lwz r11, 0x164(r1) +/* 000169F8 00023788 41 81 6A 04 */ bgt .text+0x16A04 +/* 000169FC 0002378C 39 60 00 00 */ li r11, 0x0 +/* 00016A00 00023790 48 01 6A 20 */ b .text+0x16A20 +/* 00016A04 00023794 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00016A08 00023798 40 80 6A 14 */ bge .text+0x16A14 +/* 00016A0C 0002379C 7D 6B 52 15 */ add. r11, r11, r10 +/* 00016A10 000237A0 41 80 6A 0C */ blt .text+0x16A0C +/* 00016A14 000237A4 7C 0B 53 D6 */ divw r0, r11, r10 +/* 00016A18 000237A8 7C 00 51 D6 */ mullw r0, r0, r10 +/* 00016A1C 000237AC 7D 60 58 50 */ subf r11, r0, r11 +/* 00016A20 000237B0 7D 09 07 34 */ extsh r9, r8 +/* 00016A24 000237B4 7D 6A 5B 79 */ mr. r10, r11 +/* 00016A28 000237B8 38 09 FF FF */ subi r0, r9, 0x1 +/* 00016A2C 000237BC 40 80 6A 34 */ bge .text+0x16A34 +.L_00016A30: +/* 00016A30 000237C0 39 40 00 00 */ li r10, 0x0 +/* 00016A34 000237C4 7C 0A 00 00 */ cmpw r10, r0 +.L_00016A38: +/* 00016A38 000237C8 40 81 6A 40 */ ble .text+0x16A40 +/* 00016A3C 000237CC 7C 0A 03 78 */ mr r10, r0 +/* 00016A40 000237D0 7C 0B 50 00 */ cmpw r11, r10 +.L_00016A44: +/* 00016A44 000237D4 40 82 6A 58 */ bne .text+0x16A58 +/* 00016A48 000237D8 1D 2A 00 18 */ mulli r9, r10, 0x18 +.L_00016A4C: +/* 00016A4C 000237DC 39 29 00 20 */ addi r9, r9, 0x20 +/* 00016A50 000237E0 7F A3 4A 14 */ add r29, r3, r9 +/* 00016A54 000237E4 48 01 6A 5C */ b .text+0x16A5C +/* 00016A58 000237E8 3B A0 00 00 */ li r29, 0x0 +.L_00016A5C: +/* 00016A5C 000237EC 2C 1D 00 00 */ cmpwi r29, 0x0 +/* 00016A60 000237F0 41 82 6B C0 */ beq .text+0x16BC0 +/* 00016A64 000237F4 C1 9D 00 00 */ lfs f12, 0x0(r29) +/* 00016A68 000237F8 3D 20 00 00 */ lis r9, .rodata+0xC64@ha +/* 00016A6C 000237FC C1 69 0C 64 */ lfs f11, .rodata+0xC64@l(r9) +/* 00016A70 00023800 3D 60 00 00 */ lis r11, .rodata+0xC68@ha +/* 00016A74 00023804 ED 8C 07 72 */ fmuls f12, f12, f29 +/* 00016A78 00023808 3D 20 00 00 */ lis r9, .rodata+0xC50@ha +/* 00016A7C 0002380C D1 81 00 A8 */ stfs f12, 0xa8(r1) +/* 00016A80 00023810 C1 0B 0C 68 */ lfs f8, .rodata+0xC68@l(r11) +/* 00016A84 00023814 C0 1D 00 04 */ lfs f0, 0x4(r29) +/* 00016A88 00023818 C1 29 0C 50 */ lfs f9, .rodata+0xC50@l(r9) +/* 00016A8C 0002381C EC 00 07 72 */ fmuls f0, f0, f29 +/* 00016A90 00023820 D0 01 00 AC */ stfs f0, 0xac(r1) +/* 00016A94 00023824 EC 00 00 32 */ fmuls f0, f0, f0 +/* 00016A98 00023828 C1 BD 00 08 */ lfs f13, 0x8(r29) +/* 00016A9C 0002382C ED 8C 03 3A */ fmadds f12, f12, f12, f0 +/* 00016AA0 00023830 ED AD 07 72 */ fmuls f13, f13, f29 +/* 00016AA4 00023834 ED 4D 63 7A */ fmadds f10, f13, f13, f12 +/* 00016AA8 00023838 D1 A1 00 B0 */ stfs f13, 0xb0(r1) +/* 00016AAC 0002383C FC 0A 58 00 */ fcmpu cr0, f10, f11 +/* 00016AB0 00023840 4C 62 03 82 */ cror un, eq, lt +/* 00016AB4 00023844 41 83 6A E4 */ bso .text+0x16AE4 +/* 00016AB8 00023848 FD A0 50 34 */ frsqrte f13, f10 +/* 00016ABC 0002384C EC 0D 03 72 */ fmuls f0, f13, f13 +/* 00016AC0 00023850 ED 8D 02 32 */ fmuls f12, f13, f8 +/* 00016AC4 00023854 EC 0A 48 3C */ fnmsubs f0, f10, f0, f9 +/* 00016AC8 00023858 ED A0 6B 3A */ fmadds f13, f0, f12, f13 +/* 00016ACC 0002385C EC 0D 03 72 */ fmuls f0, f13, f13 +/* 00016AD0 00023860 ED 8D 02 32 */ fmuls f12, f13, f8 +/* 00016AD4 00023864 EC 0A 48 3C */ fnmsubs f0, f10, f0, f9 +/* 00016AD8 00023868 ED A0 6B 3A */ fmadds f13, f0, f12, f13 +/* 00016ADC 0002386C ED AD 02 B2 */ fmuls f13, f13, f10 +/* 00016AE0 00023870 48 01 6A EC */ b .text+0x16AEC +/* 00016AE4 00023874 3D 20 00 00 */ lis r9, .rodata+0xC48@ha +/* 00016AE8 00023878 C1 A9 0C 48 */ lfs f13, .rodata+0xC48@l(r9) +/* 00016AEC 0002387C 3D 20 00 00 */ lis r9, .rodata+0xC50@ha +/* 00016AF0 00023880 3D 60 00 00 */ lis r11, .rodata+0xC64@ha +/* 00016AF4 00023884 C1 49 0C 50 */ lfs f10, .rodata+0xC50@l(r9) +/* 00016AF8 00023888 3D 40 00 00 */ lis r10, .rodata+0xC68@ha +.L_00016AFC: +/* 00016AFC 0002388C C0 0B 0C 64 */ lfs f0, .rodata+0xC64@l(r11) +/* 00016B00 00023890 ED 8A 68 28 */ fsubs f12, f10, f13 +/* 00016B04 00023894 C1 2A 0C 68 */ lfs f9, .rodata+0xC68@l(r10) +/* 00016B08 00023898 FC 0C 00 00 */ fcmpu cr0, f12, f0 +/* 00016B0C 0002389C 4C 62 03 82 */ cror un, eq, lt +/* 00016B10 000238A0 41 83 6B 40 */ bso .text+0x16B40 +/* 00016B14 000238A4 FD 60 60 34 */ frsqrte f11, f12 +/* 00016B18 000238A8 EC 0B 02 F2 */ fmuls f0, f11, f11 +/* 00016B1C 000238AC ED AB 02 72 */ fmuls f13, f11, f9 +/* 00016B20 000238B0 EC 0C 50 3C */ fnmsubs f0, f12, f0, f10 +/* 00016B24 000238B4 ED 60 5B 7A */ fmadds f11, f0, f13, f11 +/* 00016B28 000238B8 EC 0B 02 F2 */ fmuls f0, f11, f11 +.L_00016B2C: +/* 00016B2C 000238BC ED AB 02 72 */ fmuls f13, f11, f9 +/* 00016B30 000238C0 EC 0C 50 3C */ fnmsubs f0, f12, f0, f10 +/* 00016B34 000238C4 ED 60 5B 7A */ fmadds f11, f0, f13, f11 +/* 00016B38 000238C8 ED 6B 03 32 */ fmuls f11, f11, f12 +/* 00016B3C 000238CC 48 01 6B 48 */ b .text+0x16B48 +/* 00016B40 000238D0 3D 20 00 00 */ lis r9, .rodata+0xC48@ha +/* 00016B44 000238D4 C1 69 0C 48 */ lfs f11, .rodata+0xC48@l(r9) +/* 00016B48 000238D8 C1 81 00 A8 */ lfs f12, 0xa8(r1) +/* 00016B4C 000238DC 3B C1 01 08 */ addi r30, r1, 0x108 +/* 00016B50 000238E0 C1 A1 00 AC */ lfs f13, 0xac(r1) +/* 00016B54 000238E4 7F C3 F3 78 */ mr r3, r30 +/* 00016B58 000238E8 C0 01 00 B0 */ lfs f0, 0xb0(r1) +/* 00016B5C 000238EC 38 81 00 F8 */ addi r4, r1, 0xf8 +/* 00016B60 000238F0 D1 81 00 F8 */ stfs f12, 0xf8(r1) +/* 00016B64 000238F4 D1 A1 00 FC */ stfs f13, 0xfc(r1) +/* 00016B68 000238F8 D0 01 01 00 */ stfs f0, 0x100(r1) +/* 00016B6C 000238FC D1 61 01 04 */ stfs f11, 0x104(r1) +/* 00016B70 00023900 48 00 00 01 */ bl bQuaternionToMatrix__FP8bMatrix4PC11bQuaternion +/* 00016B74 00023904 C1 9D 00 0C */ lfs f12, 0xc(r29) +/* 00016B78 00023908 3D 20 00 00 */ lis r9, .rodata+0xC50@ha +/* 00016B7C 0002390C C0 49 0C 50 */ lfs f2, .rodata+0xC50@l(r9) +/* 00016B80 00023910 7F C4 F3 78 */ mr r4, r30 +/* 00016B84 00023914 ED 8C 07 72 */ fmuls f12, f12, f29 +/* 00016B88 00023918 7F 83 E3 78 */ mr r3, r28 +/* 00016B8C 0002391C D1 81 01 48 */ stfs f12, 0x148(r1) +/* 00016B90 00023920 7F 85 E3 78 */ mr r5, r28 +/* 00016B94 00023924 C1 BD 00 10 */ lfs f13, 0x10(r29) +/* 00016B98 00023928 ED AD 07 72 */ fmuls f13, f13, f29 +/* 00016B9C 0002392C D1 A1 01 4C */ stfs f13, 0x14c(r1) +/* 00016BA0 00023930 C0 1D 00 14 */ lfs f0, 0x14(r29) +/* 00016BA4 00023934 D1 81 01 38 */ stfs f12, 0x138(r1) +/* 00016BA8 00023938 EC 00 07 72 */ fmuls f0, f0, f29 +/* 00016BAC 0002393C D1 A1 01 3C */ stfs f13, 0x13c(r1) +/* 00016BB0 00023940 D0 01 01 50 */ stfs f0, 0x150(r1) +/* 00016BB4 00023944 D0 01 01 40 */ stfs f0, 0x140(r1) +.L_00016BB8: +/* 00016BB8 00023948 D0 41 01 44 */ stfs f2, 0x144(r1) +/* 00016BBC 0002394C 48 00 00 01 */ bl bMulMatrix__FP8bMatrix4PC8bMatrix4T1 +/* 00016BC0 00023950 40 92 6B D4 */ bne cr4, .text+0x16BD4 +/* 00016BC4 00023954 7F 43 D3 78 */ mr r3, r26 +.L_00016BC8: +/* 00016BC8 00023958 48 01 7E 91 */ bl .text+0x17E90 +/* 00016BCC 0002395C 2C 03 00 02 */ cmpwi r3, 0x2 +/* 00016BD0 00023960 41 82 6C 64 */ beq .text+0x16C64 +/* 00016BD4 00023964 81 3F 00 C4 */ lwz r9, 0xc4(r31) +/* 00016BD8 00023968 39 60 00 00 */ li r11, 0x0 +/* 00016BDC 0002396C 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00016BE0 00023970 41 82 6C 00 */ beq .text+0x16C00 +/* 00016BE4 00023974 88 09 00 07 */ lbz r0, 0x7(r9) +/* 00016BE8 00023978 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00016BEC 0002397C 41 82 6C 00 */ beq .text+0x16C00 +/* 00016BF0 00023980 2F 9B 00 08 */ cmpwi cr7, r27, 0x8 +/* 00016BF4 00023984 4F FE E3 82 */ cror cr7un, cr7eq, cr7lt +/* 00016BF8 00023988 7D 60 00 26 */ mfcr r11 +/* 00016BFC 0002398C 55 6B 07 FE */ clrlwi r11, r11, 31 +/* 00016C00 00023990 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00016C04 00023994 41 82 6C 18 */ beq .text+0x16C18 +/* 00016C08 00023998 80 BF 00 80 */ lwz r5, 0x80(r31) +/* 00016C0C 0002399C 7F E3 FB 78 */ mr r3, r31 +/* 00016C10 000239A0 7F 84 E3 78 */ mr r4, r28 +/* 00016C14 000239A4 48 00 3A F1 */ bl .L_0001A704 +/* 00016C18 000239A8 81 3F 00 C4 */ lwz r9, 0xc4(r31) +/* 00016C1C 000239AC 39 60 00 00 */ li r11, 0x0 +/* 00016C20 000239B0 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00016C24 000239B4 41 82 6C 44 */ beq .text+0x16C44 +/* 00016C28 000239B8 88 09 00 06 */ lbz r0, 0x6(r9) +/* 00016C2C 000239BC 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00016C30 000239C0 41 82 6C 44 */ beq .text+0x16C44 +/* 00016C34 000239C4 2F 9B 00 08 */ cmpwi cr7, r27, 0x8 +/* 00016C38 000239C8 4F FE E3 82 */ cror cr7un, cr7eq, cr7lt +/* 00016C3C 000239CC 7D 60 00 26 */ mfcr r11 +/* 00016C40 000239D0 55 6B 07 FE */ clrlwi r11, r11, 31 +/* 00016C44 000239D4 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00016C48 000239D8 41 82 6C C0 */ beq .text+0x16CC0 +/* 00016C4C 000239DC 80 BF 00 80 */ lwz r5, 0x80(r31) +/* 00016C50 000239E0 7F E3 FB 78 */ mr r3, r31 +/* 00016C54 000239E4 7F 84 E3 78 */ mr r4, r28 +/* 00016C58 000239E8 38 C5 00 50 */ addi r6, r5, 0x50 +/* 00016C5C 000239EC 48 00 38 D1 */ bl .L_0001A52C +/* 00016C60 000239F0 48 01 6C C0 */ b .text+0x16CC0 +/* 00016C64 000239F4 80 BF 00 80 */ lwz r5, 0x80(r31) +/* 00016C68 000239F8 7F E3 FB 78 */ mr r3, r31 +/* 00016C6C 000239FC 7F 84 E3 78 */ mr r4, r28 +/* 00016C70 00023A00 3B DF 00 C8 */ addi r30, r31, 0xc8 +/* 00016C74 00023A04 48 00 3A F1 */ bl .L_0001A764 +/* 00016C78 00023A08 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00016C7C 00023A0C 38 00 00 01 */ li r0, 0x1 +/* 00016C80 00023A10 40 82 6C 88 */ bne .text+0x16C88 +.L_00016C84: +/* 00016C84 00023A14 38 00 00 00 */ li r0, 0x0 +/* 00016C88 00023A18 80 BF 00 80 */ lwz r5, 0x80(r31) +/* 00016C8C 00023A1C 7F E3 FB 78 */ mr r3, r31 +/* 00016C90 00023A20 90 1F 00 C8 */ stw r0, 0xc8(r31) +/* 00016C94 00023A24 7F 84 E3 78 */ mr r4, r28 +/* 00016C98 00023A28 38 C5 00 50 */ addi r6, r5, 0x50 +/* 00016C9C 00023A2C 48 00 38 D1 */ bl .L_0001A56C +/* 00016CA0 00023A30 80 1F 00 C8 */ lwz r0, 0xc8(r31) +/* 00016CA4 00023A34 39 20 00 00 */ li r9, 0x0 +/* 00016CA8 00023A38 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00016CAC 00023A3C 40 82 6C B8 */ bne .text+0x16CB8 +/* 00016CB0 00023A40 2C 03 00 00 */ cmpwi r3, 0x0 +.L_00016CB4: +/* 00016CB4 00023A44 41 82 6C BC */ beq .text+0x16CBC +/* 00016CB8 00023A48 39 20 00 01 */ li r9, 0x1 +/* 00016CBC 00023A4C 91 3E 00 00 */ stw r9, 0x0(r30) +/* 00016CC0 00023A50 80 7F 00 A8 */ lwz r3, 0xa8(r31) +/* 00016CC4 00023A54 FC 20 D8 90 */ fmr f1, f27 +/* 00016CC8 00023A58 48 01 44 15 */ bl .text+0x14414 +/* 00016CCC 00023A5C 3D 20 00 00 */ lis r9, .rodata+0xC48@ha +/* 00016CD0 00023A60 C3 E9 0C 48 */ lfs f31, .rodata+0xC48@l(r9) +/* 00016CD4 00023A64 FC 01 F8 00 */ fcmpu cr0, f1, f31 +/* 00016CD8 00023A68 41 80 6C F0 */ blt .text+0x16CF0 +/* 00016CDC 00023A6C 3D 20 00 00 */ lis r9, .rodata+0xC5C@ha +/* 00016CE0 00023A70 81 7F 00 1C */ lwz r11, 0x1c(r31) +/* 00016CE4 00023A74 C0 09 0C 5C */ lfs f0, .rodata+0xC5C@l(r9) +/* 00016CE8 00023A78 EC 01 00 32 */ fmuls f0, f1, f0 +/* 00016CEC 00023A7C D0 0B 00 C8 */ stfs f0, 0xc8(r11) +/* 00016CF0 00023A80 80 7F 00 A4 */ lwz r3, 0xa4(r31) +/* 00016CF4 00023A84 FC 20 D8 90 */ fmr f1, f27 +/* 00016CF8 00023A88 48 01 44 15 */ bl .text+0x14414 +/* 00016CFC 00023A8C FF A0 08 90 */ fmr f29, f1 +/* 00016D00 00023A90 FC 1D F8 00 */ fcmpu cr0, f29, f31 +/* 00016D04 00023A94 41 80 6D 18 */ blt .text+0x16D18 +/* 00016D08 00023A98 3D 20 00 00 */ lis r9, .rodata+0xC6C@ha +/* 00016D0C 00023A9C C0 09 0C 6C */ lfs f0, .rodata+0xC6C@l(r9) +/* 00016D10 00023AA0 FC 1D 00 00 */ fcmpu cr0, f29, f0 +/* 00016D14 00023AA4 41 80 6D 34 */ blt .text+0x16D34 +/* 00016D18 00023AA8 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha +/* 00016D1C 00023AAC 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) +/* 00016D20 00023AB0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00016D24 00023AB4 40 82 6E 24 */ bne .text+0x16E24 +/* 00016D28 00023AB8 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 00016D2C 00023ABC D3 E9 00 B4 */ stfs f31, 0xb4(r9) +/* 00016D30 00023AC0 48 01 6E 04 */ b .text+0x16E04 +/* 00016D34 00023AC4 80 7F 00 A0 */ lwz r3, 0xa0(r31) +/* 00016D38 00023AC8 FC 20 D8 90 */ fmr f1, f27 +/* 00016D3C 00023ACC 48 01 44 15 */ bl .text+0x14414 +/* 00016D40 00023AD0 3D 20 00 00 */ lis r9, .rodata+0xC50@ha +/* 00016D44 00023AD4 FF C0 08 90 */ fmr f30, f1 +/* 00016D48 00023AD8 C3 89 0C 50 */ lfs f28, .rodata+0xC50@l(r9) +/* 00016D4C 00023ADC FC 1E E0 00 */ fcmpu cr0, f30, f28 +/* 00016D50 00023AE0 4C 62 0B 82 */ cror un, eq, gt +/* 00016D54 00023AE4 41 83 6D 5C */ bso .text+0x16D5C +/* 00016D58 00023AE8 FF C0 E0 90 */ fmr f30, f28 +/* 00016D5C 00023AEC 3D 20 00 00 */ lis r9, .rodata+0xC70@ha +/* 00016D60 00023AF0 FC 20 D8 90 */ fmr f1, f27 +/* 00016D64 00023AF4 C0 09 0C 70 */ lfs f0, .rodata+0xC70@l(r9) +/* 00016D68 00023AF8 7F E3 FB 78 */ mr r3, r31 +/* 00016D6C 00023AFC EF DE 00 32 */ fmuls f30, f30, f0 +/* 00016D70 00023B00 48 01 5C A1 */ bl .text+0x15CA0 +.L_00016D74: +/* 00016D74 00023B04 48 01 38 C9 */ bl .text+0x138C8 +/* 00016D78 00023B08 FF E0 08 90 */ fmr f31, f1 +/* 00016D7C 00023B0C FC 20 E8 90 */ fmr f1, f29 +/* 00016D80 00023B10 48 01 39 D5 */ bl .text+0x139D4 +/* 00016D84 00023B14 3D 60 00 00 */ lis r11, .rodata+0xC74@ha +/* 00016D88 00023B18 EC 1F 07 F2 */ fmuls f0, f31, f31 +/* 00016D8C 00023B1C C1 AB 0C 74 */ lfs f13, .rodata+0xC74@l(r11) +/* 00016D90 00023B20 3D 20 00 00 */ lis r9, .rodata+0xC7C@ha +/* 00016D94 00023B24 C1 89 0C 7C */ lfs f12, .rodata+0xC7C@l(r9) +/* 00016D98 00023B28 3D 60 00 00 */ lis r11, .rodata+0xC78@ha +/* 00016D9C 00023B2C EC 21 03 72 */ fmuls f1, f1, f13 +/* 00016DA0 00023B30 C1 6B 0C 78 */ lfs f11, .rodata+0xC78@l(r11) +.L_00016DA4: +/* 00016DA4 00023B34 EC 00 08 24 */ fdivs f0, f0, f1 +/* 00016DA8 00023B38 EC 00 F8 2A */ fadds f0, f0, f31 +/* 00016DAC 00023B3C ED A0 F0 28 */ fsubs f13, f0, f30 +/* 00016DB0 00023B40 EC 00 F8 28 */ fsubs f0, f0, f31 +/* 00016DB4 00023B44 EC 20 07 B2 */ fmuls f1, f0, f30 +/* 00016DB8 00023B48 FC 0D 60 00 */ fcmpu cr0, f13, f12 +/* 00016DBC 00023B4C 4C 62 03 82 */ cror un, eq, lt +/* 00016DC0 00023B50 41 83 6D CC */ bso .text+0x16DCC +/* 00016DC4 00023B54 EC 01 68 24 */ fdivs f0, f1, f13 +/* 00016DC8 00023B58 ED 60 00 2A */ fadds f11, f0, f0 +/* 00016DCC 00023B5C FC 0B 08 00 */ fcmpu cr0, f11, f1 +/* 00016DD0 00023B60 4C 62 0B 82 */ cror un, eq, gt +/* 00016DD4 00023B64 41 83 6D DC */ bso .text+0x16DDC +/* 00016DD8 00023B68 ED 61 E0 2A */ fadds f11, f1, f28 +/* 00016DDC 00023B6C 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha +/* 00016DE0 00023B70 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) +/* 00016DE4 00023B74 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00016DE8 00023B78 40 82 6E 24 */ bne .text+0x16E24 +/* 00016DEC 00023B7C 3D 20 00 00 */ lis r9, .rodata+0xC68@ha +/* 00016DF0 00023B80 EC 0B 08 2A */ fadds f0, f11, f1 +/* 00016DF4 00023B84 C1 A9 0C 68 */ lfs f13, .rodata+0xC68@l(r9) +/* 00016DF8 00023B88 81 7F 00 1C */ lwz r11, 0x1c(r31) +/* 00016DFC 00023B8C EC 00 03 72 */ fmuls f0, f0, f13 +/* 00016E00 00023B90 D0 0B 00 B4 */ stfs f0, 0xb4(r11) +/* 00016E04 00023B94 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha +/* 00016E08 00023B98 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) +/* 00016E0C 00023B9C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00016E10 00023BA0 40 82 6E 24 */ bne .text+0x16E24 +/* 00016E14 00023BA4 3D 20 00 00 */ lis r9, .rodata+0xC48@ha +/* 00016E18 00023BA8 81 7F 00 1C */ lwz r11, 0x1c(r31) +/* 00016E1C 00023BAC C0 09 0C 48 */ lfs f0, .rodata+0xC48@l(r9) +/* 00016E20 00023BB0 D0 0B 00 B8 */ stfs f0, 0xb8(r11) +/* 00016E24 00023BB4 7F 03 C3 78 */ mr r3, r24 +/* 00016E28 00023BB8 7F 24 CB 78 */ mr r4, r25 +/* 00016E2C 00023BBC 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 +/* 00016E30 00023BC0 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha +/* 00016E34 00023BC4 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) +/* 00016E38 00023BC8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00016E3C 00023BCC 40 82 6E 48 */ bne .text+0x16E48 +/* 00016E40 00023BD0 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 00016E44 00023BD4 D0 29 00 B0 */ stfs f1, 0xb0(r9) +/* 00016E48 00023BD8 80 7F 00 1C */ lwz r3, 0x1c(r31) +/* 00016E4C 00023BDC 7F 84 E3 78 */ mr r4, r28 +/* 00016E50 00023BE0 FC 20 D0 90 */ fmr f1, f26 +/* 00016E54 00023BE4 48 00 04 ED */ bl .L_00017340 +/* 00016E58 00023BE8 80 01 01 C4 */ lwz r0, 0x1c4(r1) +/* 00016E5C 00023BEC 81 81 01 6C */ lwz r12, 0x16c(r1) +.L_00016E60: +/* 00016E60 00023BF0 7C 08 03 A6 */ mtlr r0 +/* 00016E64 00023BF4 BB 01 01 70 */ lmw r24, 0x170(r1) +/* 00016E68 00023BF8 E3 41 01 90 */ psq_l f26, 0x190(r1), 0, qr0 +/* 00016E6C 00023BFC E3 61 01 98 */ psq_l f27, 0x198(r1), 0, qr0 +/* 00016E70 00023C00 E3 81 01 A0 */ psq_l f28, 0x1a0(r1), 0, qr0 +/* 00016E74 00023C04 E3 A1 01 A8 */ psq_l f29, 0x1a8(r1), 0, qr0 +/* 00016E78 00023C08 E3 C1 01 B0 */ psq_l f30, 0x1b0(r1), 0, qr0 +/* 00016E7C 00023C0C E3 E1 01 B8 */ psq_l f31, 0x1b8(r1), 0, qr0 +/* 00016E80 00023C10 7D 80 81 20 */ mtcrf 8, r12 +/* 00016E84 00023C14 38 21 01 C0 */ addi r1, r1, 0x1c0 +/* 00016E88 00023C18 4E 80 00 20 */ blr +.endfn Update__8ICEMoverf + +# .text:0x16E8C | size: 0x30 +# ReplayNosScore(ICEAnchor*) +.fn ReplayNosScore__FP9ICEAnchor, local +/* 00016E8C 00023C1C 80 03 00 8C */ lwz r0, 0x8c(r3) +/* 00016E90 00023C20 3D 20 00 00 */ lis r9, .rodata+0xC80@ha +/* 00016E94 00023C24 C0 29 0C 80 */ lfs f1, .rodata+0xC80@l(r9) +/* 00016E98 00023C28 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00016E9C 00023C2C 4D 82 00 20 */ beqlr +/* 00016EA0 00023C30 3D 20 00 00 */ lis r9, .rodata+0xC84@ha +/* 00016EA4 00023C34 3D 60 00 00 */ lis r11, .rodata+0xC88@ha +/* 00016EA8 00023C38 C1 83 00 90 */ lfs f12, 0x90(r3) +/* 00016EAC 00023C3C C1 A9 0C 84 */ lfs f13, .rodata+0xC84@l(r9) +/* 00016EB0 00023C40 C0 0B 0C 88 */ lfs f0, .rodata+0xC88@l(r11) +/* 00016EB4 00023C44 EC 2C 03 7A */ fmadds f1, f12, f13, f0 +.L_00016EB8: +/* 00016EB8 00023C48 4E 80 00 20 */ blr +.endfn ReplayNosScore__FP9ICEAnchor + +# .text:0x16EBC | size: 0x8 +# ReplayNosMirror(ICEAnchor*) +.fn ReplayNosMirror__FP9ICEAnchor, local +/* 00016EBC 00023C4C 38 60 00 00 */ li r3, 0x0 +/* 00016EC0 00023C50 4E 80 00 20 */ blr +.endfn ReplayNosMirror__FP9ICEAnchor + +# .text:0x16EC4 | size: 0xC0 +# ReplayJumpScore(ICEAnchor*) +.fn ReplayJumpScore__FP9ICEAnchor, local +/* 00016EC4 00023C54 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 00016EC8 00023C58 7C 08 02 A6 */ mflr r0 +/* 00016ECC 00023C5C F3 E1 00 10 */ psq_st f31, 0x10(r1), 0, qr0 +.L_00016ED0: +/* 00016ED0 00023C60 90 01 00 1C */ stw r0, 0x1c(r1) +/* 00016ED4 00023C64 3D 20 00 00 */ lis r9, .rodata+0xC8C@ha +/* 00016ED8 00023C68 C0 03 00 38 */ lfs f0, 0x38(r3) +/* 00016EDC 00023C6C C0 29 0C 8C */ lfs f1, .rodata+0xC8C@l(r9) +/* 00016EE0 00023C70 FC 00 08 00 */ fcmpu cr0, f0, f1 +/* 00016EE4 00023C74 4C 62 0B 82 */ cror un, eq, gt +/* 00016EE8 00023C78 41 83 6E F8 */ bso .text+0x16EF8 +/* 00016EEC 00023C7C 3D 20 00 00 */ lis r9, .rodata+0xC90@ha +/* 00016EF0 00023C80 C3 E9 0C 90 */ lfs f31, .rodata+0xC90@l(r9) +.L_00016EF4: +/* 00016EF4 00023C84 48 01 6E FC */ b .text+0x16EFC +/* 00016EF8 00023C88 FF E0 08 90 */ fmr f31, f1 +/* 00016EFC 00023C8C 80 03 00 88 */ lwz r0, 0x88(r3) +/* 00016F00 00023C90 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00016F04 00023C94 41 82 6F 64 */ beq .text+0x16F64 +/* 00016F08 00023C98 3D 20 00 00 */ lis r9, .rodata+0xC8C@ha +/* 00016F0C 00023C9C 3D 60 00 00 */ lis r11, .rodata+0xC94@ha +/* 00016F10 00023CA0 C0 09 0C 8C */ lfs f0, .rodata+0xC8C@l(r9) +/* 00016F14 00023CA4 38 61 00 08 */ addi r3, r1, 0x8 +/* 00016F18 00023CA8 C0 2B 0C 94 */ lfs f1, .rodata+0xC94@l(r11) +/* 00016F1C 00023CAC 38 81 00 0C */ addi r4, r1, 0xc +/* 00016F20 00023CB0 D0 01 00 0C */ stfs f0, 0xc(r1) +/* 00016F24 00023CB4 38 A0 00 01 */ li r5, 0x1 +/* 00016F28 00023CB8 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 00016F2C 00023CBC 48 01 72 C1 */ bl .text+0x172C0 +/* 00016F30 00023CC0 3D 20 00 00 */ lis r9, .rodata+0xC90@ha +/* 00016F34 00023CC4 C0 01 00 08 */ lfs f0, 0x8(r1) +/* 00016F38 00023CC8 C1 89 0C 90 */ lfs f12, .rodata+0xC90@l(r9) +/* 00016F3C 00023CCC FC 00 60 00 */ fcmpu cr0, f0, f12 +.L_00016F40: +/* 00016F40 00023CD0 4C 62 03 82 */ cror un, eq, lt +/* 00016F44 00023CD4 41 83 6F 64 */ bso .text+0x16F64 +/* 00016F48 00023CD8 3D 20 00 00 */ lis r9, .rodata+0xC98@ha +/* 00016F4C 00023CDC C1 A1 00 0C */ lfs f13, 0xc(r1) +/* 00016F50 00023CE0 C0 09 0C 98 */ lfs f0, .rodata+0xC98@l(r9) +/* 00016F54 00023CE4 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 00016F58 00023CE8 4C 62 03 82 */ cror un, eq, lt +/* 00016F5C 00023CEC 41 83 6F 64 */ bso .text+0x16F64 +/* 00016F60 00023CF0 FF E0 60 90 */ fmr f31, f12 +.L_00016F64: +/* 00016F64 00023CF4 3D 20 00 00 */ lis r9, .rodata+0xC9C@ha +/* 00016F68 00023CF8 C0 29 0C 9C */ lfs f1, .rodata+0xC9C@l(r9) +/* 00016F6C 00023CFC EC 3F 00 72 */ fmuls f1, f31, f1 +/* 00016F70 00023D00 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 00016F74 00023D04 7C 08 03 A6 */ mtlr r0 +/* 00016F78 00023D08 E3 E1 00 10 */ psq_l f31, 0x10(r1), 0, qr0 +/* 00016F7C 00023D0C 38 21 00 18 */ addi r1, r1, 0x18 +/* 00016F80 00023D10 4E 80 00 20 */ blr +.endfn ReplayJumpScore__FP9ICEAnchor + +# .text:0x16F84 | size: 0x8 +# ReplayJumpMirror(ICEAnchor*) +.fn ReplayJumpMirror__FP9ICEAnchor, local +/* 00016F84 00023D14 38 60 00 00 */ li r3, 0x0 +/* 00016F88 00023D18 4E 80 00 20 */ blr +.endfn ReplayJumpMirror__FP9ICEAnchor + +# .text:0x16F8C | size: 0x54 +# ReplaySpeedScore(ICEAnchor*) +.fn ReplaySpeedScore__FP9ICEAnchor, local +/* 00016F8C 00023D1C 3D 20 00 00 */ lis r9, .rodata+0xCA4@ha +/* 00016F90 00023D20 C1 A3 00 70 */ lfs f13, 0x70(r3) +/* 00016F94 00023D24 C0 09 0C A4 */ lfs f0, .rodata+0xCA4@l(r9) +/* 00016F98 00023D28 3D 60 00 00 */ lis r11, .rodata+0xCA0@ha +/* 00016F9C 00023D2C C0 2B 0C A0 */ lfs f1, .rodata+0xCA0@l(r11) +/* 00016FA0 00023D30 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 00016FA4 00023D34 4C 62 03 82 */ cror un, eq, lt +/* 00016FA8 00023D38 4D 83 00 20 */ bsolr +/* 00016FAC 00023D3C C0 03 00 74 */ lfs f0, 0x74(r3) +/* 00016FB0 00023D40 3D 20 00 00 */ lis r9, .rodata+0xCA8@ha +/* 00016FB4 00023D44 3D 60 00 00 */ lis r11, .rodata+0xCAC@ha +/* 00016FB8 00023D48 C1 69 0C A8 */ lfs f11, .rodata+0xCA8@l(r9) +/* 00016FBC 00023D4C EC 0D 00 24 */ fdivs f0, f13, f0 +/* 00016FC0 00023D50 3D 20 00 00 */ lis r9, .rodata+0xCB0@ha +/* 00016FC4 00023D54 C1 AB 0C AC */ lfs f13, .rodata+0xCAC@l(r11) +/* 00016FC8 00023D58 C1 89 0C B0 */ lfs f12, .rodata+0xCB0@l(r9) +.L_00016FCC: +/* 00016FCC 00023D5C EC 00 6A FA */ fmadds f0, f0, f11, f13 +/* 00016FD0 00023D60 FC 00 08 2E */ fsel f0, f0, f0, f1 +/* 00016FD4 00023D64 ED AC 00 28 */ fsubs f13, f12, f0 +/* 00016FD8 00023D68 FC 2D 60 2E */ fsel f1, f13, f0, f12 +.L_00016FDC: +/* 00016FDC 00023D6C 4E 80 00 20 */ blr +.endfn ReplaySpeedScore__FP9ICEAnchor + +# .text:0x16FE0 | size: 0x8 +# ReplaySpeedMirror(ICEAnchor*) +.fn ReplaySpeedMirror__FP9ICEAnchor, local +/* 00016FE0 00023D70 38 60 00 00 */ li r3, 0x0 +/* 00016FE4 00023D74 4E 80 00 20 */ blr +.endfn ReplaySpeedMirror__FP9ICEAnchor + +# .text:0x16FE8 | size: 0x70 +# ReplayCornerScore(ICEAnchor*) +.fn ReplayCornerScore__FP9ICEAnchor, local +/* 00016FE8 00023D78 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00016FEC 00023D7C 7C 08 02 A6 */ mflr r0 +/* 00016FF0 00023D80 F3 E1 00 08 */ psq_st f31, 0x8(r1), 0, qr0 +.L_00016FF4: +/* 00016FF4 00023D84 90 01 00 14 */ stw r0, 0x14(r1) +/* 00016FF8 00023D88 3D 60 00 00 */ lis r11, .rodata+0xCB8@ha +/* 00016FFC 00023D8C C1 A3 00 70 */ lfs f13, 0x70(r3) +/* 00017000 00023D90 C0 0B 0C B8 */ lfs f0, .rodata+0xCB8@l(r11) +/* 00017004 00023D94 3D 20 00 00 */ lis r9, .rodata+0xCB4@ha +/* 00017008 00023D98 C3 E9 0C B4 */ lfs f31, .rodata+0xCB4@l(r9) +/* 0001700C 00023D9C FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 00017010 00023DA0 4C 62 03 82 */ cror un, eq, lt +/* 00017014 00023DA4 41 83 70 40 */ bso .text+0x17040 +/* 00017018 00023DA8 48 01 72 CD */ bl .text+0x172CC +/* 0001701C 00023DAC 3D 60 00 00 */ lis r11, .rodata+0xCBC@ha +/* 00017020 00023DB0 FC 20 0A 10 */ fabs f1, f1 +/* 00017024 00023DB4 C0 0B 0C BC */ lfs f0, .rodata+0xCBC@l(r11) +/* 00017028 00023DB8 3D 20 00 00 */ lis r9, .rodata+0xCC0@ha +/* 0001702C 00023DBC C1 A9 0C C0 */ lfs f13, .rodata+0xCC0@l(r9) +/* 00017030 00023DC0 EC 21 00 32 */ fmuls f1, f1, f0 +/* 00017034 00023DC4 FC 21 F8 6E */ fsel f1, f1, f1, f31 +/* 00017038 00023DC8 EC 0D 08 28 */ fsubs f0, f13, f1 +/* 0001703C 00023DCC FF E0 68 6E */ fsel f31, f0, f1, f13 +/* 00017040 00023DD0 FC 20 F8 90 */ fmr f1, f31 +/* 00017044 00023DD4 80 01 00 14 */ lwz r0, 0x14(r1) +/* 00017048 00023DD8 7C 08 03 A6 */ mtlr r0 +/* 0001704C 00023DDC E3 E1 00 08 */ psq_l f31, 0x8(r1), 0, qr0 +/* 00017050 00023DE0 38 21 00 10 */ addi r1, r1, 0x10 +.L_00017054: +/* 00017054 00023DE4 4E 80 00 20 */ blr +.endfn ReplayCornerScore__FP9ICEAnchor + +# .text:0x17058 | size: 0x34 +# ReplayCornerMirror(ICEAnchor*) +.fn ReplayCornerMirror__FP9ICEAnchor, local +/* 00017058 00023DE8 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0001705C 00023DEC 7C 08 02 A6 */ mflr r0 +/* 00017060 00023DF0 90 01 00 0C */ stw r0, 0xc(r1) +/* 00017064 00023DF4 48 01 72 CD */ bl .text+0x172CC +/* 00017068 00023DF8 3D 20 00 00 */ lis r9, .rodata+0xCC4@ha +/* 0001706C 00023DFC C0 09 0C C4 */ lfs f0, .rodata+0xCC4@l(r9) +/* 00017070 00023E00 FF 81 00 00 */ fcmpu cr7, f1, f0 +/* 00017074 00023E04 7C 60 00 26 */ mfcr r3 +/* 00017078 00023E08 54 63 EF FE */ extrwi r3, r3, 1, 28 +.L_0001707C: +/* 0001707C 00023E0C 80 01 00 0C */ lwz r0, 0xc(r1) +/* 00017080 00023E10 7C 08 03 A6 */ mtlr r0 +/* 00017084 00023E14 38 21 00 08 */ addi r1, r1, 0x8 +/* 00017088 00023E18 4E 80 00 20 */ blr +.endfn ReplayCornerMirror__FP9ICEAnchor + +# .text:0x1708C | size: 0xBC +# ReplayBurnoutScore(ICEAnchor*) +.fn ReplayBurnoutScore__FP9ICEAnchor, local +/* 0001708C 00023E1C 3D 60 00 00 */ lis r11, .rodata+0xCC8@ha +/* 00017090 00023E20 C1 03 00 70 */ lfs f8, 0x70(r3) +/* 00017094 00023E24 C1 8B 0C C8 */ lfs f12, .rodata+0xCC8@l(r11) +/* 00017098 00023E28 3D 20 00 00 */ lis r9, .rodata+0xCCC@ha +/* 0001709C 00023E2C C1 69 0C CC */ lfs f11, .rodata+0xCCC@l(r9) +/* 000170A0 00023E30 ED A8 60 28 */ fsubs f13, f8, f12 +/* 000170A4 00023E34 FD AD 62 2E */ fsel f13, f13, f8, f12 +.L_000170A8: +/* 000170A8 00023E38 EC 0B 68 28 */ fsubs f0, f11, f13 +/* 000170AC 00023E3C FC 00 5B 6E */ fsel f0, f0, f13, f11 +/* 000170B0 00023E40 FC 08 00 00 */ fcmpu cr0, f8, f0 +/* 000170B4 00023E44 41 82 70 C4 */ beq .text+0x170C4 +/* 000170B8 00023E48 3D 20 00 00 */ lis r9, .rodata+0xCD0@ha +.L_000170BC: +/* 000170BC 00023E4C C0 29 0C D0 */ lfs f1, .rodata+0xCD0@l(r9) +/* 000170C0 00023E50 4E 80 00 20 */ blr +/* 000170C4 00023E54 3D 60 00 00 */ lis r11, .rodata+0xCDC@ha +/* 000170C8 00023E58 3D 40 00 00 */ lis r10, .rodata+0xCD4@ha +/* 000170CC 00023E5C C1 AB 0C DC */ lfs f13, .rodata+0xCDC@l(r11) +/* 000170D0 00023E60 3D 20 00 00 */ lis r9, .rodata+0xCD8@ha +/* 000170D4 00023E64 C1 69 0C D8 */ lfs f11, .rodata+0xCD8@l(r9) +/* 000170D8 00023E68 3D 60 00 00 */ lis r11, .rodata+0xCD0@ha +/* 000170DC 00023E6C ED 88 68 28 */ fsubs f12, f8, f13 +/* 000170E0 00023E70 C1 2A 0C D4 */ lfs f9, .rodata+0xCD4@l(r10) +/* 000170E4 00023E74 C0 03 00 80 */ lfs f0, 0x80(r3) +/* 000170E8 00023E78 FD 8C 6A 2E */ fsel f12, f12, f8, f13 +/* 000170EC 00023E7C ED AB 60 28 */ fsubs f13, f11, f12 +/* 000170F0 00023E80 C1 4B 0C D0 */ lfs f10, .rodata+0xCD0@l(r11) +/* 000170F4 00023E84 EC 00 5A 78 */ fmsubs f0, f0, f9, f11 +.L_000170F8: +/* 000170F8 00023E88 FD AD 5B 2E */ fsel f13, f13, f12, f11 +/* 000170FC 00023E8C FC 00 50 2E */ fsel f0, f0, f0, f10 +/* 00017100 00023E90 FC 08 68 00 */ fcmpu cr0, f8, f13 +/* 00017104 00023E94 ED 8B 00 28 */ fsubs f12, f11, f0 +/* 00017108 00023E98 FD 8C 58 2E */ fsel f12, f12, f0, f11 +/* 0001710C 00023E9C 41 82 71 18 */ beq .text+0x17118 +/* 00017110 00023EA0 FC 20 60 90 */ fmr f1, f12 +/* 00017114 00023EA4 4E 80 00 20 */ blr +/* 00017118 00023EA8 3D 20 00 00 */ lis r9, .rodata+0xCE0@ha +/* 0001711C 00023EAC C1 A3 00 78 */ lfs f13, 0x78(r3) +/* 00017120 00023EB0 C0 09 0C E0 */ lfs f0, .rodata+0xCE0@l(r9) +/* 00017124 00023EB4 FC 0D 00 00 */ fcmpu cr0, f13, f0 +/* 00017128 00023EB8 4C 62 03 82 */ cror un, eq, lt +/* 0001712C 00023EBC 41 83 71 40 */ bso .text+0x17140 +/* 00017130 00023EC0 3D 20 00 00 */ lis r9, .rodata+0xCE4@ha +/* 00017134 00023EC4 C0 29 0C E4 */ lfs f1, .rodata+0xCE4@l(r9) +/* 00017138 00023EC8 EC 2C 08 2A */ fadds f1, f12, f1 +/* 0001713C 00023ECC 4E 80 00 20 */ blr +/* 00017140 00023ED0 FC 20 60 90 */ fmr f1, f12 +/* 00017144 00023ED4 4E 80 00 20 */ blr +.endfn ReplayBurnoutScore__FP9ICEAnchor + +# .text:0x17148 | size: 0x8 +# ReplayBurnoutMirror(ICEAnchor*) +.fn ReplayBurnoutMirror__FP9ICEAnchor, local +/* 00017148 00023ED8 38 60 00 00 */ li r3, 0x0 +/* 0001714C 00023EDC 4E 80 00 20 */ blr +.endfn ReplayBurnoutMirror__FP9ICEAnchor + +# .text:0x17150 | size: 0x88 +# ReplayPowerSlideScore(ICEAnchor*) +.fn ReplayPowerSlideScore__FP9ICEAnchor, local +/* 00017150 00023EE0 3D 20 00 00 */ lis r9, .rodata+0xCE8@ha +/* 00017154 00023EE4 C0 03 00 70 */ lfs f0, 0x70(r3) +/* 00017158 00023EE8 C1 A9 0C E8 */ lfs f13, .rodata+0xCE8@l(r9) +/* 0001715C 00023EEC FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00017160 00023EF0 41 81 71 70 */ bgt .text+0x17170 +/* 00017164 00023EF4 3D 20 00 00 */ lis r9, .rodata+0xCEC@ha +/* 00017168 00023EF8 C0 29 0C EC */ lfs f1, .rodata+0xCEC@l(r9) +/* 0001716C 00023EFC 4E 80 00 20 */ blr +/* 00017170 00023F00 3D 20 00 00 */ lis r9, .rodata+0xCF0@ha +/* 00017174 00023F04 3D 60 00 00 */ lis r11, .rodata+0xCF4@ha +/* 00017178 00023F08 C1 69 0C F0 */ lfs f11, .rodata+0xCF0@l(r9) +/* 0001717C 00023F0C 3D 40 00 00 */ lis r10, .rodata+0xCF8@ha +/* 00017180 00023F10 C0 03 00 84 */ lfs f0, 0x84(r3) +/* 00017184 00023F14 3D 20 00 00 */ lis r9, .rodata+0xCEC@ha +/* 00017188 00023F18 C1 8B 0C F4 */ lfs f12, .rodata+0xCF4@l(r11) +/* 0001718C 00023F1C FC 00 02 10 */ fabs f0, f0 +/* 00017190 00023F20 C1 AA 0C F8 */ lfs f13, .rodata+0xCF8@l(r10) +/* 00017194 00023F24 C1 49 0C EC */ lfs f10, .rodata+0xCEC@l(r9) +/* 00017198 00023F28 EC 00 62 F8 */ fmsubs f0, f0, f11, f12 +/* 0001719C 00023F2C EC 00 03 72 */ fmuls f0, f0, f13 +/* 000171A0 00023F30 FC 00 50 00 */ fcmpu cr0, f0, f10 +/* 000171A4 00023F34 4C 62 03 82 */ cror un, eq, lt +/* 000171A8 00023F38 41 83 71 D0 */ bso .text+0x171D0 +/* 000171AC 00023F3C 3D 20 00 00 */ lis r9, .rodata+0xCFC@ha +/* 000171B0 00023F40 3D 60 00 00 */ lis r11, .rodata+0xD00@ha +/* 000171B4 00023F44 C0 29 0C FC */ lfs f1, .rodata+0xCFC@l(r9) +/* 000171B8 00023F48 C1 AB 0D 00 */ lfs f13, .rodata+0xD00@l(r11) +/* 000171BC 00023F4C EC 20 08 2A */ fadds f1, f0, f1 +/* 000171C0 00023F50 FC 21 50 6E */ fsel f1, f1, f1, f10 +/* 000171C4 00023F54 EC 0D 08 28 */ fsubs f0, f13, f1 +/* 000171C8 00023F58 FC 20 68 6E */ fsel f1, f0, f1, f13 +/* 000171CC 00023F5C 4E 80 00 20 */ blr +/* 000171D0 00023F60 FC 20 50 90 */ fmr f1, f10 +.L_000171D4: +/* 000171D4 00023F64 4E 80 00 20 */ blr +.endfn ReplayPowerSlideScore__FP9ICEAnchor + +# .text:0x171D8 | size: 0x1C +# ReplayPowerSlideMirror(ICEAnchor*) +.fn ReplayPowerSlideMirror__FP9ICEAnchor, local +/* 000171D8 00023F68 3D 20 00 00 */ lis r9, .rodata+0xD04@ha +/* 000171DC 00023F6C C1 A3 00 84 */ lfs f13, 0x84(r3) +/* 000171E0 00023F70 C0 09 0D 04 */ lfs f0, .rodata+0xD04@l(r9) +/* 000171E4 00023F74 FF 8D 00 00 */ fcmpu cr7, f13, f0 +/* 000171E8 00023F78 7C 60 00 26 */ mfcr r3 +/* 000171EC 00023F7C 54 63 EF FE */ extrwi r3, r3, 1, 28 +/* 000171F0 00023F80 4E 80 00 20 */ blr +.endfn ReplayPowerSlideMirror__FP9ICEAnchor + +# .text:0x171F4 | size: 0x8 +.fn GetReplayCategoryNumElements__3ICEv, global +/* 000171F4 00023F84 38 60 00 06 */ li r3, 0x6 +/* 000171F8 00023F88 4E 80 00 20 */ blr +.endfn GetReplayCategoryNumElements__3ICEv + +# .text:0x171FC | size: 0x18 +.fn GetReplayCategoryHash__3ICEi, global +/* 000171FC 00023F8C 1C 63 00 18 */ mulli r3, r3, 0x18 +/* 00017200 00023F90 3D 20 00 00 */ lis r9, ReplayCategories@ha +/* 00017204 00023F94 39 29 00 00 */ addi r9, r9, ReplayCategories@l +/* 00017208 00023F98 39 29 00 04 */ addi r9, r9, 0x4 +/* 0001720C 00023F9C 7C 63 48 2E */ lwzx r3, r3, r9 +/* 00017210 00023FA0 4E 80 00 20 */ blr +.endfn GetReplayCategoryHash__3ICEi + +# .text:0x17214 | size: 0x40 +.fn GetReplayCategory__3ICEUi, global +/* 00017214 00023FA4 3D 20 00 00 */ lis r9, ReplayCategories@ha +/* 00017218 00023FA8 7C 6A 1B 78 */ mr r10, r3 +/* 0001721C 00023FAC 39 29 00 00 */ addi r9, r9, ReplayCategories@l +/* 00017220 00023FB0 39 60 00 00 */ li r11, 0x0 +/* 00017224 00023FB4 39 09 00 04 */ addi r8, r9, 0x4 +/* 00017228 00023FB8 1C 6B 00 18 */ mulli r3, r11, 0x18 +/* 0001722C 00023FBC 7C 03 40 2E */ lwzx r0, r3, r8 +/* 00017230 00023FC0 7C 0A 00 00 */ cmpw r10, r0 +/* 00017234 00023FC4 40 82 72 40 */ bne .text+0x17240 +/* 00017238 00023FC8 7C 63 4A 14 */ add r3, r3, r9 +/* 0001723C 00023FCC 4E 80 00 20 */ blr +/* 00017240 00023FD0 39 6B 00 01 */ addi r11, r11, 0x1 +/* 00017244 00023FD4 2C 0B 00 05 */ cmpwi r11, 0x5 +/* 00017248 00023FD8 40 81 72 28 */ ble .text+0x17228 +/* 0001724C 00023FDC 38 60 00 00 */ li r3, 0x0 +/* 00017250 00023FE0 4E 80 00 20 */ blr +.endfn GetReplayCategory__3ICEUi + +# .text:0x17254 | size: 0x38 +.fn WasRecentlyUsed__9ICEReplayP8ICETrack, global +/* 00017254 00023FE4 3D 20 00 00 */ lis r9, _9ICEReplay.RecentlyUsedTracks@ha +/* 00017258 00023FE8 39 60 00 00 */ li r11, 0x0 +/* 0001725C 00023FEC 39 49 00 00 */ addi r10, r9, _9ICEReplay.RecentlyUsedTracks@l +/* 00017260 00023FF0 55 60 10 3A */ slwi r0, r11, 2 +/* 00017264 00023FF4 7D 2A 00 2E */ lwzx r9, r10, r0 +.L_00017268: +/* 00017268 00023FF8 7C 03 48 00 */ cmpw r3, r9 +/* 0001726C 00023FFC 40 82 72 78 */ bne .text+0x17278 +.L_00017270: +/* 00017270 00024000 38 60 00 01 */ li r3, 0x1 +/* 00017274 00024004 4E 80 00 20 */ blr +/* 00017278 00024008 39 6B 00 01 */ addi r11, r11, 0x1 +/* 0001727C 0002400C 2C 0B 00 02 */ cmpwi r11, 0x2 +/* 00017280 00024010 40 81 72 60 */ ble .text+0x17260 +.L_00017284: +/* 00017284 00024014 38 60 00 00 */ li r3, 0x0 +/* 00017288 00024018 4E 80 00 20 */ blr +.endfn WasRecentlyUsed__9ICEReplayP8ICETrack + +# .text:0x1728C | size: 0x34 +.fn ClearRecentlyUsed__9ICEReplayv, global +/* 0001728C 0002401C 3D 20 00 00 */ lis r9, _9ICEReplay.nRecentlyUsedIndex@ha +/* 00017290 00024020 38 00 00 00 */ li r0, 0x0 +.L_00017294: +/* 00017294 00024024 90 09 00 00 */ stw r0, _9ICEReplay.nRecentlyUsedIndex@l(r9) +/* 00017298 00024028 3D 60 00 00 */ lis r11, _9ICEReplay.RecentlyUsedTracks@ha +/* 0001729C 0002402C 39 6B 00 00 */ addi r11, r11, _9ICEReplay.RecentlyUsedTracks@l +/* 000172A0 00024030 39 20 00 00 */ li r9, 0x0 +/* 000172A4 00024034 39 40 00 00 */ li r10, 0x0 +/* 000172A8 00024038 55 20 10 3A */ slwi r0, r9, 2 +/* 000172AC 0002403C 39 29 00 01 */ addi r9, r9, 0x1 +/* 000172B0 00024040 7D 4B 01 2E */ stwx r10, r11, r0 +/* 000172B4 00024044 2C 09 00 02 */ cmpwi r9, 0x2 +/* 000172B8 00024048 40 81 72 A8 */ ble .text+0x172A8 +/* 000172BC 0002404C 4E 80 00 20 */ blr +.endfn ClearRecentlyUsed__9ICEReplayv + +# .text:0x172C0 | size: 0xC +.fn PredictAverageAir__FfPfT1b, global +/* 000172C0 00024050 3D 20 00 00 */ lis r9, sPredictedAir@ha +/* 000172C4 00024054 C0 29 00 00 */ lfs f1, sPredictedAir@l(r9) +/* 000172C8 00024058 4E 80 00 20 */ blr +.endfn PredictAverageAir__FfPfT1b + +# .text:0x172CC | size: 0xC +# GetRecentCurvature() +.fn GetRecentCurvature__Fv, global +/* 000172CC 0002405C 3D 20 00 00 */ lis r9, sRecentCurvature@ha +/* 000172D0 00024060 C0 29 00 00 */ lfs f1, sRecentCurvature@l(r9) +/* 000172D4 00024064 4E 80 00 20 */ blr +.endfn GetRecentCurvature__Fv + +# .text:0x172D8 | size: 0x444 +.fn CameraCutIsGood__9ICEReplayP7ICEDatafP9ICEAnchor, global +/* 000172D8 00024068 94 21 FE 88 */ stwu r1, -0x178(r1) +/* 000172DC 0002406C 7C 08 02 A6 */ mflr r0 +/* 000172E0 00024070 F3 61 01 50 */ psq_st f27, 0x150(r1), 0, qr0 +/* 000172E4 00024074 F3 81 01 58 */ psq_st f28, 0x158(r1), 0, qr0 +/* 000172E8 00024078 F3 A1 01 60 */ psq_st f29, 0x160(r1), 0, qr0 +/* 000172EC 0002407C F3 C1 01 68 */ psq_st f30, 0x168(r1), 0, qr0 +/* 000172F0 00024080 F3 E1 01 70 */ psq_st f31, 0x170(r1), 0, qr0 +/* 000172F4 00024084 BF 01 01 30 */ stmw r24, 0x130(r1) +/* 000172F8 00024088 90 01 01 7C */ stw r0, 0x17c(r1) +/* 000172FC 0002408C 7C 78 1B 78 */ mr r24, r3 +/* 00017300 00024090 7C 9F 23 78 */ mr r31, r4 +/* 00017304 00024094 48 00 19 E9 */ bl .L_00018CEC +/* 00017308 00024098 3D 20 00 00 */ lis r9, .rodata+0xD88@ha +/* 0001730C 0002409C 7C 79 1B 79 */ mr. r25, r3 +/* 00017310 000240A0 39 69 0D 88 */ addi r11, r9, .rodata+0xD88@l +/* 00017314 000240A4 80 09 0D 88 */ lwz r0, .rodata+0xD88@l(r9) +/* 00017318 000240A8 89 4B 00 04 */ lbz r10, 0x4(r11) +/* 0001731C 000240AC 90 01 00 08 */ stw r0, 0x8(r1) +/* 00017320 000240B0 99 41 00 0C */ stb r10, 0xc(r1) +/* 00017324 000240B4 41 82 76 C8 */ beq .text+0x176C8 +/* 00017328 000240B8 39 7F 00 10 */ addi r11, r31, 0x10 +/* 0001732C 000240BC 3D 20 00 00 */ lis r9, .rodata+0xD90@ha +/* 00017330 000240C0 C0 0B 00 10 */ lfs f0, 0x10(r11) +/* 00017334 000240C4 3B C1 00 50 */ addi r30, r1, 0x50 +/* 00017338 000240C8 C1 AB 00 14 */ lfs f13, 0x14(r11) +/* 0001733C 000240CC 3B 41 00 10 */ addi r26, r1, 0x10 +.L_00017340: +/* 00017340 000240D0 C1 8B 00 18 */ lfs f12, 0x18(r11) +/* 00017344 000240D4 3B 81 00 C0 */ addi r28, r1, 0xc0 +/* 00017348 000240D8 C1 1F 00 38 */ lfs f8, 0x38(r31) +/* 0001734C 000240DC 3B 61 00 D0 */ addi r27, r1, 0xd0 +/* 00017350 000240E0 C0 FF 00 3C */ lfs f7, 0x3c(r31) +/* 00017354 000240E4 7F 44 D3 78 */ mr r4, r26 +/* 00017358 000240E8 C0 2B 00 1C */ lfs f1, 0x1c(r11) +/* 0001735C 000240EC 7F C3 F3 78 */ mr r3, r30 +/* 00017360 000240F0 C0 5F 00 10 */ lfs f2, 0x10(r31) +/* 00017364 000240F4 3B B9 00 60 */ addi r29, r25, 0x60 +/* 00017368 000240F8 C0 7F 00 14 */ lfs f3, 0x14(r31) +/* 0001736C 000240FC C0 9F 00 18 */ lfs f4, 0x18(r31) +/* 00017370 00024100 C0 DF 00 00 */ lfs f6, 0x0(r31) +/* 00017374 00024104 C0 BF 00 04 */ lfs f5, 0x4(r31) +/* 00017378 00024108 C1 7F 00 1C */ lfs f11, 0x1c(r31) +/* 0001737C 0002410C C1 5F 00 30 */ lfs f10, 0x30(r31) +/* 00017380 00024110 C1 3F 00 34 */ lfs f9, 0x34(r31) +/* 00017384 00024114 C3 FF 00 08 */ lfs f31, 0x8(r31) +/* 00017388 00024118 C3 89 0D 90 */ lfs f28, .rodata+0xD90@l(r9) +/* 0001738C 0002411C D1 61 00 1C */ stfs f11, 0x1c(r1) +/* 00017390 00024120 D0 01 00 20 */ stfs f0, 0x20(r1) +/* 00017394 00024124 D1 A1 00 24 */ stfs f13, 0x24(r1) +/* 00017398 00024128 D1 81 00 28 */ stfs f12, 0x28(r1) +/* 0001739C 0002412C D1 41 00 30 */ stfs f10, 0x30(r1) +/* 000173A0 00024130 D1 21 00 34 */ stfs f9, 0x34(r1) +/* 000173A4 00024134 D1 01 00 38 */ stfs f8, 0x38(r1) +/* 000173A8 00024138 D0 E1 00 3C */ stfs f7, 0x3c(r1) +/* 000173AC 0002413C D0 41 00 10 */ stfs f2, 0x10(r1) +/* 000173B0 00024140 D0 61 00 14 */ stfs f3, 0x14(r1) +/* 000173B4 00024144 D0 81 00 18 */ stfs f4, 0x18(r1) +/* 000173B8 00024148 D0 21 00 2C */ stfs f1, 0x2c(r1) +/* 000173BC 0002414C D0 C1 00 40 */ stfs f6, 0x40(r1) +/* 000173C0 00024150 D0 A1 00 44 */ stfs f5, 0x44(r1) +/* 000173C4 00024154 D3 E1 00 48 */ stfs f31, 0x48(r1) +/* 000173C8 00024158 D3 81 00 4C */ stfs f28, 0x4c(r1) +/* 000173CC 0002415C 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 +/* 000173D0 00024160 38 61 00 90 */ addi r3, r1, 0x90 +/* 000173D4 00024164 7F C4 F3 78 */ mr r4, r30 +/* 000173D8 00024168 38 B9 00 40 */ addi r5, r25, 0x40 +/* 000173DC 0002416C 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 +/* 000173E0 00024170 38 61 00 A0 */ addi r3, r1, 0xa0 +/* 000173E4 00024174 7F A5 EB 78 */ mr r5, r29 +/* 000173E8 00024178 7F C4 F3 78 */ mr r4, r30 +/* 000173EC 0002417C 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 +/* 000173F0 00024180 C1 61 00 90 */ lfs f11, 0x90(r1) +/* 000173F4 00024184 38 61 00 B0 */ addi r3, r1, 0xb0 +/* 000173F8 00024188 C1 41 00 94 */ lfs f10, 0x94(r1) +/* 000173FC 0002418C 7C 64 1B 78 */ mr r4, r3 +/* 00017400 00024190 C1 21 00 98 */ lfs f9, 0x98(r1) +/* 00017404 00024194 C1 A1 00 A0 */ lfs f13, 0xa0(r1) +/* 00017408 00024198 C1 81 00 A4 */ lfs f12, 0xa4(r1) +.L_0001740C: +/* 0001740C 0002419C C0 01 00 A8 */ lfs f0, 0xa8(r1) +/* 00017410 000241A0 ED AD 58 28 */ fsubs f13, f13, f11 +.L_00017414: +/* 00017414 000241A4 ED 8C 50 28 */ fsubs f12, f12, f10 +/* 00017418 000241A8 D1 A1 00 B0 */ stfs f13, 0xb0(r1) +/* 0001741C 000241AC EC 00 48 28 */ fsubs f0, f0, f9 +/* 00017420 000241B0 D1 81 00 B4 */ stfs f12, 0xb4(r1) +/* 00017424 000241B4 D0 01 00 B8 */ stfs f0, 0xb8(r1) +/* 00017428 000241B8 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +/* 0001742C 000241BC 38 B9 01 E8 */ addi r5, r25, 0x1e8 +/* 00017430 000241C0 7F C4 F3 78 */ mr r4, r30 +/* 00017434 000241C4 7F 83 E3 78 */ mr r3, r28 +/* 00017438 000241C8 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 +/* 0001743C 000241CC 7F 83 E3 78 */ mr r3, r28 +/* 00017440 000241D0 7C 64 1B 78 */ mr r4, r3 +/* 00017444 000241D4 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +/* 00017448 000241D8 7F 03 C3 78 */ mr r3, r24 +/* 0001744C 000241DC 38 80 00 00 */ li r4, 0x0 +/* 00017450 000241E0 7F 65 DB 78 */ mr r5, r27 +/* 00017454 000241E4 48 01 35 FD */ bl .text+0x135FC +/* 00017458 000241E8 38 A1 00 E0 */ addi r5, r1, 0xe0 +/* 0001745C 000241EC 7F 03 C3 78 */ mr r3, r24 +/* 00017460 000241F0 38 80 00 00 */ li r4, 0x0 +/* 00017464 000241F4 48 01 36 75 */ bl .text+0x13674 +/* 00017468 000241F8 C1 61 00 D0 */ lfs f11, 0xd0(r1) +/* 0001746C 000241FC 38 61 00 F0 */ addi r3, r1, 0xf0 +/* 00017470 00024200 C1 41 00 D4 */ lfs f10, 0xd4(r1) +/* 00017474 00024204 7C 64 1B 78 */ mr r4, r3 +/* 00017478 00024208 C1 21 00 D8 */ lfs f9, 0xd8(r1) +/* 0001747C 0002420C C1 A1 00 E0 */ lfs f13, 0xe0(r1) +/* 00017480 00024210 C1 81 00 E4 */ lfs f12, 0xe4(r1) +/* 00017484 00024214 C0 01 00 E8 */ lfs f0, 0xe8(r1) +/* 00017488 00024218 ED AD 58 28 */ fsubs f13, f13, f11 +/* 0001748C 0002421C ED 8C 50 28 */ fsubs f12, f12, f10 +/* 00017490 00024220 D1 A1 00 F0 */ stfs f13, 0xf0(r1) +/* 00017494 00024224 EC 00 48 28 */ fsubs f0, f0, f9 +/* 00017498 00024228 D1 81 00 F4 */ stfs f12, 0xf4(r1) +/* 0001749C 0002422C D0 01 00 F8 */ stfs f0, 0xf8(r1) +/* 000174A0 00024230 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +/* 000174A4 00024234 38 A1 01 00 */ addi r5, r1, 0x100 +.L_000174A8: +/* 000174A8 00024238 7F 03 C3 78 */ mr r3, r24 +/* 000174AC 0002423C 38 80 00 01 */ li r4, 0x1 +/* 000174B0 00024240 48 01 35 FD */ bl .text+0x135FC +/* 000174B4 00024244 C1 61 00 D0 */ lfs f11, 0xd0(r1) +/* 000174B8 00024248 38 61 01 10 */ addi r3, r1, 0x110 +/* 000174BC 0002424C C1 41 00 D4 */ lfs f10, 0xd4(r1) +.L_000174C0: +/* 000174C0 00024250 7C 64 1B 78 */ mr r4, r3 +/* 000174C4 00024254 C1 21 00 D8 */ lfs f9, 0xd8(r1) +/* 000174C8 00024258 C1 A1 01 00 */ lfs f13, 0x100(r1) +/* 000174CC 0002425C C1 81 01 04 */ lfs f12, 0x104(r1) +/* 000174D0 00024260 C0 01 01 08 */ lfs f0, 0x108(r1) +.L_000174D4: +/* 000174D4 00024264 ED AD 58 28 */ fsubs f13, f13, f11 +/* 000174D8 00024268 ED 8C 50 28 */ fsubs f12, f12, f10 +.L_000174DC: +/* 000174DC 0002426C D1 A1 01 10 */ stfs f13, 0x110(r1) +/* 000174E0 00024270 EC 00 48 28 */ fsubs f0, f0, f9 +/* 000174E4 00024274 D1 81 01 14 */ stfs f12, 0x114(r1) +/* 000174E8 00024278 D0 01 01 18 */ stfs f0, 0x118(r1) +/* 000174EC 0002427C 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +/* 000174F0 00024280 7F 44 D3 78 */ mr r4, r26 +/* 000174F4 00024284 7F 65 DB 78 */ mr r5, r27 +/* 000174F8 00024288 38 61 01 20 */ addi r3, r1, 0x120 +/* 000174FC 0002428C 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 +/* 00017500 00024290 C1 A1 00 F4 */ lfs f13, 0xf4(r1) +/* 00017504 00024294 3D 20 00 00 */ lis r9, .rodata+0xDA0@ha +/* 00017508 00024298 C0 01 00 B4 */ lfs f0, 0xb4(r1) +/* 0001750C 0002429C C1 61 01 14 */ lfs f11, 0x114(r1) +/* 00017510 000242A0 C1 41 00 F0 */ lfs f10, 0xf0(r1) +/* 00017514 000242A4 EC 00 03 72 */ fmuls f0, f0, f13 +/* 00017518 000242A8 C1 21 00 C4 */ lfs f9, 0xc4(r1) +/* 0001751C 000242AC C3 C9 0D A0 */ lfs f30, .rodata+0xDA0@l(r9) +/* 00017520 000242B0 C1 81 00 B0 */ lfs f12, 0xb0(r1) +/* 00017524 000242B4 ED 29 02 F2 */ fmuls f9, f9, f11 +/* 00017528 000242B8 FC 00 F0 00 */ fcmpu cr0, f0, f30 +/* 0001752C 000242BC C1 A1 00 C0 */ lfs f13, 0xc0(r1) +/* 00017530 000242C0 ED 8C 02 BA */ fmadds f12, f12, f10, f0 +/* 00017534 000242C4 C1 01 01 10 */ lfs f8, 0x110(r1) +/* 00017538 000242C8 C0 E1 00 B8 */ lfs f7, 0xb8(r1) +/* 0001753C 000242CC C1 61 00 F8 */ lfs f11, 0xf8(r1) +/* 00017540 000242D0 ED AD 4A 3A */ fmadds f13, f13, f8, f9 +/* 00017544 000242D4 C1 41 00 C8 */ lfs f10, 0xc8(r1) +/* 00017548 000242D8 C0 01 01 18 */ lfs f0, 0x118(r1) +/* 0001754C 000242DC ED 87 62 FA */ fmadds f12, f7, f11, f12 +/* 00017550 000242E0 EF 6A 68 3A */ fmadds f27, f10, f0, f13 +/* 00017554 000242E4 41 80 76 C8 */ blt .text+0x176C8 +/* 00017558 000242E8 3D 20 00 00 */ lis r9, .rodata+0xD94@ha +/* 0001755C 000242EC C0 09 0D 94 */ lfs f0, .rodata+0xD94@l(r9) +/* 00017560 000242F0 FC 0C 00 00 */ fcmpu cr0, f12, f0 +/* 00017564 000242F4 4C 62 03 82 */ cror un, eq, lt +/* 00017568 000242F8 41 83 76 C8 */ bso .text+0x176C8 +/* 0001756C 000242FC 3D 20 00 00 */ lis r9, .rodata+0xD98@ha +/* 00017570 00024300 C0 09 0D 98 */ lfs f0, .rodata+0xD98@l(r9) +/* 00017574 00024304 FC 0C 00 00 */ fcmpu cr0, f12, f0 +/* 00017578 00024308 41 80 76 D0 */ blt .text+0x176D0 +/* 0001757C 0002430C A3 D9 00 C4 */ lhz r30, 0xc4(r25) +/* 00017580 00024310 57 DE F8 7E */ srwi r30, r30, 1 +/* 00017584 00024314 7F C3 F3 78 */ mr r3, r30 +/* 00017588 00024318 48 00 00 01 */ bl bSin__FUs +/* 0001758C 0002431C FF E0 08 90 */ fmr f31, f1 +/* 00017590 00024320 7F C3 F3 78 */ mr r3, r30 +/* 00017594 00024324 48 00 00 01 */ bl bCos__FUs +/* 00017598 00024328 3D 20 00 00 */ lis r9, .rodata+0xD9C@ha +/* 0001759C 0002432C C1 A1 00 94 */ lfs f13, 0x94(r1) +/* 000175A0 00024330 C1 49 0D 9C */ lfs f10, .rodata+0xD9C@l(r9) +/* 000175A4 00024334 EF BF 08 24 */ fdivs f29, f31, f1 +/* 000175A8 00024338 C0 01 00 90 */ lfs f0, 0x90(r1) +/* 000175AC 0002433C 3D 20 00 00 */ lis r9, .rodata+0xDA4@ha +/* 000175B0 00024340 C1 81 00 98 */ lfs f12, 0x98(r1) +/* 000175B4 00024344 C1 69 0D A4 */ lfs f11, .rodata+0xDA4@l(r9) +/* 000175B8 00024348 ED AD 03 72 */ fmuls f13, f13, f13 +/* 000175BC 0002434C EC 00 68 3A */ fmadds f0, f0, f0, f13 +/* 000175C0 00024350 ED 8C 03 3A */ fmadds f12, f12, f12, f0 +/* 000175C4 00024354 FC 0C 58 00 */ fcmpu cr0, f12, f11 +/* 000175C8 00024358 4C 62 03 82 */ cror un, eq, lt +/* 000175CC 0002435C 41 83 75 F8 */ bso .text+0x175F8 +/* 000175D0 00024360 FF C0 60 34 */ frsqrte f30, f12 +/* 000175D4 00024364 EC 1E 07 B2 */ fmuls f0, f30, f30 +/* 000175D8 00024368 ED BE 02 B2 */ fmuls f13, f30, f10 +/* 000175DC 0002436C EC 0C E0 3C */ fnmsubs f0, f12, f0, f28 +/* 000175E0 00024370 EF C0 F3 7A */ fmadds f30, f0, f13, f30 +/* 000175E4 00024374 EC 1E 07 B2 */ fmuls f0, f30, f30 +/* 000175E8 00024378 ED BE 02 B2 */ fmuls f13, f30, f10 +/* 000175EC 0002437C EC 0C E0 3C */ fnmsubs f0, f12, f0, f28 +/* 000175F0 00024380 EF C0 F3 7A */ fmadds f30, f0, f13, f30 +/* 000175F4 00024384 EF DE 03 32 */ fmuls f30, f30, f12 +/* 000175F8 00024388 C0 38 00 54 */ lfs f1, 0x54(r24) +/* 000175FC 0002438C 48 01 38 9D */ bl .text+0x1389C +/* 00017600 00024390 54 7E FC 3E */ extrwi r30, r3, 16, 15 +/* 00017604 00024394 7F C3 F3 78 */ mr r3, r30 +/* 00017608 00024398 48 00 00 01 */ bl bSin__FUs +/* 0001760C 0002439C FF E0 08 90 */ fmr f31, f1 +/* 00017610 000243A0 7F C3 F3 78 */ mr r3, r30 +/* 00017614 000243A4 48 00 00 01 */ bl bCos__FUs +/* 00017618 000243A8 C0 01 00 D4 */ lfs f0, 0xd4(r1) +/* 0001761C 000243AC 3D 60 00 00 */ lis r11, .rodata+0xDA4@ha +/* 00017620 000243B0 C1 A1 00 D0 */ lfs f13, 0xd0(r1) +/* 00017624 000243B4 3D 40 00 00 */ lis r10, .rodata+0xD9C@ha +.L_00017628: +/* 00017628 000243B8 C1 81 00 D8 */ lfs f12, 0xd8(r1) +/* 0001762C 000243BC EC 00 00 32 */ fmuls f0, f0, f0 +/* 00017630 000243C0 C1 6B 0D A4 */ lfs f11, .rodata+0xDA4@l(r11) +/* 00017634 000243C4 ED AD 03 7A */ fmadds f13, f13, f13, f0 +/* 00017638 000243C8 3D 20 00 00 */ lis r9, .rodata+0xD90@ha +/* 0001763C 000243CC ED 8C 6B 3A */ fmadds f12, f12, f12, f13 +/* 00017640 000243D0 EF FF 08 24 */ fdivs f31, f31, f1 +/* 00017644 000243D4 C1 4A 0D 9C */ lfs f10, .rodata+0xD9C@l(r10) +/* 00017648 000243D8 C1 29 0D 90 */ lfs f9, .rodata+0xD90@l(r9) +/* 0001764C 000243DC FC 0C 58 00 */ fcmpu cr0, f12, f11 +/* 00017650 000243E0 4C 62 03 82 */ cror un, eq, lt +/* 00017654 000243E4 41 83 76 84 */ bso .text+0x17684 +/* 00017658 000243E8 FD 60 60 34 */ frsqrte f11, f12 +/* 0001765C 000243EC EC 0B 02 F2 */ fmuls f0, f11, f11 +/* 00017660 000243F0 ED AB 02 B2 */ fmuls f13, f11, f10 +/* 00017664 000243F4 EC 0C 48 3C */ fnmsubs f0, f12, f0, f9 +/* 00017668 000243F8 ED 60 5B 7A */ fmadds f11, f0, f13, f11 +/* 0001766C 000243FC EC 0B 02 F2 */ fmuls f0, f11, f11 +/* 00017670 00024400 ED AB 02 B2 */ fmuls f13, f11, f10 +/* 00017674 00024404 EC 0C 48 3C */ fnmsubs f0, f12, f0, f9 +/* 00017678 00024408 ED 60 5B 7A */ fmadds f11, f0, f13, f11 +/* 0001767C 0002440C ED 6B 03 32 */ fmuls f11, f11, f12 +/* 00017680 00024410 48 01 76 8C */ b .text+0x1768C +/* 00017684 00024414 3D 20 00 00 */ lis r9, .rodata+0xDA0@ha +/* 00017688 00024418 C1 69 0D A0 */ lfs f11, .rodata+0xDA0@l(r9) +/* 0001768C 0002441C 3D 20 00 00 */ lis r9, .rodata+0xD90@ha +/* 00017690 00024420 ED 6B 07 F2 */ fmuls f11, f11, f31 +/* 00017694 00024424 C1 89 0D 90 */ lfs f12, .rodata+0xD90@l(r9) +/* 00017698 00024428 EC 1E 07 72 */ fmuls f0, f30, f29 +/* 0001769C 0002442C 3D 20 00 00 */ lis r9, .rodata+0xD9C@ha +/* 000176A0 00024430 ED 6C 58 24 */ fdivs f11, f12, f11 +/* 000176A4 00024434 C1 49 0D 9C */ lfs f10, .rodata+0xD9C@l(r9) +/* 000176A8 00024438 ED 8C 00 24 */ fdivs f12, f12, f0 +/* 000176AC 0002443C ED AB 60 28 */ fsubs f13, f11, f12 +/* 000176B0 00024440 EC 0C 58 28 */ fsubs f0, f12, f11 +/* 000176B4 00024444 FD A0 6A 10 */ fabs f13, f13 +/* 000176B8 00024448 FC 00 5B 2E */ fsel f0, f0, f12, f11 +/* 000176BC 0002444C ED AD 00 24 */ fdivs f13, f13, f0 +/* 000176C0 00024450 FC 0D 50 00 */ fcmpu cr0, f13, f10 +/* 000176C4 00024454 41 81 76 E0 */ bgt .text+0x176E0 +/* 000176C8 00024458 38 60 00 00 */ li r3, 0x0 +/* 000176CC 0002445C 48 01 76 F4 */ b .text+0x176F4 +.L_000176D0: +/* 000176D0 00024460 FC 0C F0 00 */ fcmpu cr0, f12, f30 +/* 000176D4 00024464 41 81 76 E0 */ bgt .text+0x176E0 +/* 000176D8 00024468 38 60 00 01 */ li r3, 0x1 +/* 000176DC 0002446C 48 01 76 F4 */ b .text+0x176F4 +/* 000176E0 00024470 3D 20 00 00 */ lis r9, .rodata+0xDA0@ha +/* 000176E4 00024474 C0 09 0D A0 */ lfs f0, .rodata+0xDA0@l(r9) +/* 000176E8 00024478 FF 9B 00 00 */ fcmpu cr7, f27, f0 +/* 000176EC 0002447C 7C 60 00 26 */ mfcr r3 +/* 000176F0 00024480 54 63 F7 FE */ extrwi r3, r3, 1, 29 +/* 000176F4 00024484 80 01 01 7C */ lwz r0, 0x17c(r1) +/* 000176F8 00024488 7C 08 03 A6 */ mtlr r0 +/* 000176FC 0002448C BB 01 01 30 */ lmw r24, 0x130(r1) +/* 00017700 00024490 E3 61 01 50 */ psq_l f27, 0x150(r1), 0, qr0 +/* 00017704 00024494 E3 81 01 58 */ psq_l f28, 0x158(r1), 0, qr0 +/* 00017708 00024498 E3 A1 01 60 */ psq_l f29, 0x160(r1), 0, qr0 +/* 0001770C 0002449C E3 C1 01 68 */ psq_l f30, 0x168(r1), 0, qr0 +/* 00017710 000244A0 E3 E1 01 70 */ psq_l f31, 0x170(r1), 0, qr0 +/* 00017714 000244A4 38 21 01 78 */ addi r1, r1, 0x178 +/* 00017718 000244A8 4E 80 00 20 */ blr +.endfn CameraCutIsGood__9ICEReplayP7ICEDatafP9ICEAnchor + +# .text:0x1771C | size: 0x3BC +.fn ChooseGoodCamera__9ICEReplayP9ICEAnchorP8ICEGroupi, global +/* 0001771C 000244AC 94 21 FF 68 */ stwu r1, -0x98(r1) +/* 00017720 000244B0 7C 08 02 A6 */ mflr r0 +/* 00017724 000244B4 7D 80 00 26 */ mfcr r12 +/* 00017728 000244B8 F3 41 00 68 */ psq_st f26, 0x68(r1), 0, qr0 +/* 0001772C 000244BC F3 61 00 70 */ psq_st f27, 0x70(r1), 0, qr0 +/* 00017730 000244C0 F3 81 00 78 */ psq_st f28, 0x78(r1), 0, qr0 +/* 00017734 000244C4 F3 A1 00 80 */ psq_st f29, 0x80(r1), 0, qr0 +/* 00017738 000244C8 F3 C1 00 88 */ psq_st f30, 0x88(r1), 0, qr0 +.L_0001773C: +/* 0001773C 000244CC F3 E1 00 90 */ psq_st f31, 0x90(r1), 0, qr0 +/* 00017740 000244D0 BD E1 00 24 */ stmw r15, 0x24(r1) +/* 00017744 000244D4 90 01 00 9C */ stw r0, 0x9c(r1) +/* 00017748 000244D8 91 81 00 20 */ stw r12, 0x20(r1) +/* 0001774C 000244DC 7C 92 23 78 */ mr r18, r4 +/* 00017750 000244E0 7C B7 2B 78 */ mr r23, r5 +/* 00017754 000244E4 3A 00 00 00 */ li r16, 0x0 +/* 00017758 000244E8 7C 75 1B 79 */ mr. r21, r3 +/* 0001775C 000244EC 41 82 7A A0 */ beq .text+0x17AA0 +/* 00017760 000244F0 3D 20 00 00 */ lis r9, .rodata+0xDA8@ha +/* 00017764 000244F4 56 E3 10 3A */ slwi r3, r23, 2 +/* 00017768 000244F8 C3 C9 0D A8 */ lfs f30, .rodata+0xDA8@l(r9) +/* 0001776C 000244FC 3B E0 00 00 */ li r31, 0x0 +/* 00017770 00024500 48 00 00 01 */ bl __builtin_vec_new +/* 00017774 00024504 3E 20 00 00 */ lis r17, .rodata+0xDA8@ha +/* 00017778 00024508 7C 76 1B 78 */ mr r22, r3 +/* 0001777C 0002450C 7C 10 B8 00 */ cmpw r16, r23 +/* 00017780 00024510 40 80 77 FC */ bge .text+0x177FC +/* 00017784 00024514 3D 20 00 00 */ lis r9, .rodata+0xDAC@ha +/* 00017788 00024518 3F C0 00 00 */ lis r30, Tweak_ForceICEReplay@ha +/* 0001778C 0002451C C3 E9 0D AC */ lfs f31, .rodata+0xDAC@l(r9) +/* 00017790 00024520 FF A0 F0 90 */ fmr f29, f30 +/* 00017794 00024524 1C 1F 00 14 */ mulli r0, r31, 0x14 +/* 00017798 00024528 7C 72 00 2E */ lwzx r3, r18, r0 +/* 0001779C 0002452C 48 01 72 15 */ bl .text+0x17214 +/* 000177A0 00024530 80 03 00 10 */ lwz r0, 0x10(r3) +/* 000177A4 00024534 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000177A8 00024538 41 82 77 BC */ beq .text+0x177BC +/* 000177AC 0002453C 7E A3 AB 78 */ mr r3, r21 +/* 000177B0 00024540 7C 08 03 A6 */ mtlr r0 +/* 000177B4 00024544 4E 80 00 21 */ blrl +/* 000177B8 00024548 48 01 77 C0 */ b .text+0x177C0 +/* 000177BC 0002454C C0 31 0D A8 */ lfs f1, .rodata+0xDA8@l(r17) +/* 000177C0 00024550 80 1E 00 00 */ lwz r0, Tweak_ForceICEReplay@l(r30) +/* 000177C4 00024554 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000177C8 00024558 41 82 77 D0 */ beq .text+0x177D0 +/* 000177CC 0002455C EC 21 F8 2A */ fadds f1, f1, f31 +/* 000177D0 00024560 FC 01 F8 00 */ fcmpu cr0, f1, f31 +/* 000177D4 00024564 41 80 77 E8 */ blt .text+0x177E8 +/* 000177D8 00024568 57 E0 10 3A */ slwi r0, r31, 2 +.L_000177DC: +/* 000177DC 0002456C EF DE 08 2A */ fadds f30, f30, f1 +/* 000177E0 00024570 7C 36 05 2E */ stfsx f1, r22, r0 +/* 000177E4 00024574 48 01 77 F0 */ b .text+0x177F0 +/* 000177E8 00024578 57 E0 10 3A */ slwi r0, r31, 2 +/* 000177EC 0002457C 7F B6 05 2E */ stfsx f29, r22, r0 +/* 000177F0 00024580 3B FF 00 01 */ addi r31, r31, 0x1 +/* 000177F4 00024584 7C 1F B8 00 */ cmpw r31, r23 +/* 000177F8 00024588 41 80 77 94 */ blt .text+0x17794 +/* 000177FC 0002458C 3D 20 00 00 */ lis r9, .rodata+0xDA8@ha +/* 00017800 00024590 2D 96 00 00 */ cmpwi cr3, r22, 0x0 +/* 00017804 00024594 C0 09 0D A8 */ lfs f0, .rodata+0xDA8@l(r9) +/* 00017808 00024598 FC 1E 00 00 */ fcmpu cr0, f30, f0 +/* 0001780C 0002459C 4C 62 03 82 */ cror un, eq, lt +/* 00017810 000245A0 41 83 7A 94 */ bso .text+0x17A94 +/* 00017814 000245A4 38 60 00 00 */ li r3, 0x0 +/* 00017818 000245A8 39 60 00 00 */ li r11, 0x0 +/* 0001781C 000245AC 7C 03 B8 00 */ cmpw r3, r23 +/* 00017820 000245B0 40 80 78 58 */ bge .text+0x17858 +/* 00017824 000245B4 FD A0 00 90 */ fmr f13, f0 +/* 00017828 000245B8 55 60 10 3A */ slwi r0, r11, 2 +/* 0001782C 000245BC 7C 16 04 2E */ lfsx f0, r22, r0 +/* 00017830 000245C0 FC 00 68 00 */ fcmpu cr0, f0, f13 +/* 00017834 000245C4 4C 62 03 82 */ cror un, eq, lt +/* 00017838 000245C8 41 83 78 4C */ bso .text+0x1784C +/* 0001783C 000245CC 1D 2B 00 14 */ mulli r9, r11, 0x14 +/* 00017840 000245D0 7D 32 4A 14 */ add r9, r18, r9 +/* 00017844 000245D4 80 09 00 08 */ lwz r0, 0x8(r9) +/* 00017848 000245D8 7C 63 02 14 */ add r3, r3, r0 +/* 0001784C 000245DC 39 6B 00 01 */ addi r11, r11, 0x1 +/* 00017850 000245E0 7C 0B B8 00 */ cmpw r11, r23 +/* 00017854 000245E4 41 80 78 28 */ blt .text+0x17828 +/* 00017858 000245E8 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0001785C 000245EC 40 81 7A 94 */ ble .text+0x17A94 +/* 00017860 000245F0 1C 63 00 0C */ mulli r3, r3, 0xc +/* 00017864 000245F4 3B 40 00 00 */ li r26, 0x0 +/* 00017868 000245F8 48 00 00 01 */ bl __builtin_vec_new +/* 0001786C 000245FC 7C 7B 1B 78 */ mr r27, r3 +/* 00017870 00024600 39 00 00 00 */ li r8, 0x0 +/* 00017874 00024604 7C 1A B8 00 */ cmpw r26, r23 +/* 00017878 00024608 40 80 7A 10 */ bge .text+0x17A10 +/* 0001787C 0002460C 3D 20 00 00 */ lis r9, .rodata+0xDA8@ha +/* 00017880 00024610 3D 60 00 00 */ lis r11, .rodata+0xDB8@ha +/* 00017884 00024614 C3 49 0D A8 */ lfs f26, .rodata+0xDA8@l(r9) +/* 00017888 00024618 3D 40 00 00 */ lis r10, .rodata+0xDC0@ha +/* 0001788C 0002461C 3D 20 00 00 */ lis r9, .rodata+0xDB0@ha +/* 00017890 00024620 CB AB 0D B8 */ lfd f29, .rodata+0xDB8@l(r11) +/* 00017894 00024624 C3 6A 0D C0 */ lfs f27, .rodata+0xDC0@l(r10) +/* 00017898 00024628 3D E0 43 30 */ lis r15, 0x4330 +/* 0001789C 0002462C C3 89 0D B0 */ lfs f28, .rodata+0xDB0@l(r9) +/* 000178A0 00024630 55 00 10 3A */ slwi r0, r8, 2 +/* 000178A4 00024634 3A 88 00 01 */ addi r20, r8, 0x1 +/* 000178A8 00024638 7F F6 04 2E */ lfsx f31, r22, r0 +/* 000178AC 0002463C FC 1F D0 00 */ fcmpu cr0, f31, f26 +/* 000178B0 00024640 4C 62 03 82 */ cror un, eq, lt +/* 000178B4 00024644 41 83 7A 04 */ bso .text+0x17A04 +/* 000178B8 00024648 1C 08 00 14 */ mulli r0, r8, 0x14 +/* 000178BC 0002464C 7F 59 D3 78 */ mr r25, r26 +/* 000178C0 00024650 3B 00 00 00 */ li r24, 0x0 +/* 000178C4 00024654 FE 1F E0 00 */ fcmpu cr4, f31, f28 +/* 000178C8 00024658 3A 60 00 00 */ li r19, 0x0 +/* 000178CC 0002465C 7F 92 02 14 */ add r28, r18, r0 +/* 000178D0 00024660 80 1C 00 08 */ lwz r0, 0x8(r28) +/* 000178D4 00024664 7C 18 00 00 */ cmpw r24, r0 +/* 000178D8 00024668 40 80 79 B4 */ bge .text+0x179B4 +/* 000178DC 0002466C 7F 83 E3 78 */ mr r3, r28 +/* 000178E0 00024670 7F 04 C3 78 */ mr r4, r24 +/* 000178E4 00024674 48 01 7C CD */ bl .text+0x17CCC +/* 000178E8 00024678 7C 7F 1B 78 */ mr r31, r3 +/* 000178EC 0002467C 39 60 00 00 */ li r11, 0x0 +/* 000178F0 00024680 A8 1F 00 14 */ lha r0, 0x14(r31) +/* 000178F4 00024684 39 20 00 00 */ li r9, 0x0 +/* 000178F8 00024688 34 00 FF FF */ subic. r0, r0, 0x1 +/* 000178FC 0002468C 40 80 79 04 */ bge .text+0x17904 +/* 00017900 00024690 7C 09 03 78 */ mr r9, r0 +/* 00017904 00024694 7C 0B 48 00 */ cmpw r11, r9 +/* 00017908 00024698 3B C0 00 00 */ li r30, 0x0 +/* 0001790C 0002469C 40 82 79 14 */ bne .text+0x17914 +/* 00017910 000246A0 3B DF 00 28 */ addi r30, r31, 0x28 +/* 00017914 000246A4 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 00017918 000246A8 41 82 79 AC */ beq .text+0x179AC +/* 0001791C 000246AC 88 1E 00 00 */ lbz r0, 0x0(r30) +/* 00017920 000246B0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00017924 000246B4 41 82 79 AC */ beq .text+0x179AC +/* 00017928 000246B8 80 7C 00 00 */ lwz r3, 0x0(r28) +/* 0001792C 000246BC 48 01 72 15 */ bl .text+0x17214 +/* 00017930 000246C0 80 03 00 14 */ lwz r0, 0x14(r3) +/* 00017934 000246C4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00017938 000246C8 41 82 79 4C */ beq .text+0x1794C +/* 0001793C 000246CC 7E A3 AB 78 */ mr r3, r21 +/* 00017940 000246D0 7C 08 03 A6 */ mtlr r0 +/* 00017944 000246D4 4E 80 00 21 */ blrl +/* 00017948 000246D8 48 01 79 50 */ b .text+0x17950 +/* 0001794C 000246DC 38 60 00 00 */ li r3, 0x0 +/* 00017950 000246E0 3D 20 00 00 */ lis r9, bMirrorICEData@ha +/* 00017954 000246E4 3F A0 00 00 */ lis r29, bMirrorICEData@ha +/* 00017958 000246E8 90 69 00 00 */ stw r3, bMirrorICEData@l(r9) +/* 0001795C 000246EC 4E 72 8B 82 */ cror cr4un, cr4eq, cr4gt +/* 00017960 000246F0 41 93 79 8C */ bso cr4, .text+0x1798C +.L_00017964: +/* 00017964 000246F4 C0 31 0D A8 */ lfs f1, .rodata+0xDA8@l(r17) +/* 00017968 000246F8 7F C3 F3 78 */ mr r3, r30 +/* 0001796C 000246FC 7E A4 AB 78 */ mr r4, r21 +/* 00017970 00024700 48 01 72 D9 */ bl .text+0x172D8 +/* 00017974 00024704 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00017978 00024708 41 82 79 A8 */ beq .text+0x179A8 +/* 0001797C 0002470C 7F E3 FB 78 */ mr r3, r31 +/* 00017980 00024710 48 01 72 55 */ bl .text+0x17254 +/* 00017984 00024714 2C 03 00 00 */ cmpwi r3, 0x0 +.L_00017988: +/* 00017988 00024718 40 82 79 A8 */ bne .text+0x179A8 +/* 0001798C 0002471C 1D 3A 00 0C */ mulli r9, r26, 0xc +/* 00017990 00024720 80 1D 00 00 */ lwz r0, bMirrorICEData@l(r29) +/* 00017994 00024724 3B 5A 00 01 */ addi r26, r26, 0x1 +/* 00017998 00024728 7F E9 D9 2E */ stwx r31, r9, r27 +/* 0001799C 0002472C 7D 29 DA 14 */ add r9, r9, r27 +/* 000179A0 00024730 90 09 00 08 */ stw r0, 0x8(r9) +/* 000179A4 00024734 D3 E9 00 04 */ stfs f31, 0x4(r9) +/* 000179A8 00024738 92 7D 00 00 */ stw r19, bMirrorICEData@l(r29) +/* 000179AC 0002473C 3B 18 00 01 */ addi r24, r24, 0x1 +/* 000179B0 00024740 48 01 78 D0 */ b .text+0x178D0 +/* 000179B4 00024744 7C 19 D0 51 */ subf. r0, r25, r26 +/* 000179B8 00024748 40 81 7A 04 */ ble .text+0x17A04 +/* 000179BC 0002474C 6C 00 80 00 */ xoris r0, r0, 0x8000 +/* 000179C0 00024750 90 01 00 1C */ stw r0, 0x1c(r1) +/* 000179C4 00024754 7F 2B CB 78 */ mr r11, r25 +/* 000179C8 00024758 7C 0B D0 00 */ cmpw r11, r26 +/* 000179CC 0002475C 91 E1 00 18 */ stw r15, 0x18(r1) +/* 000179D0 00024760 C8 01 00 18 */ lfd f0, 0x18(r1) +/* 000179D4 00024764 FC 00 E8 28 */ fsub f0, f0, f29 +/* 000179D8 00024768 FC 00 00 18 */ frsp f0, f0 +/* 000179DC 0002476C ED BB 00 24 */ fdivs f13, f27, f0 +/* 000179E0 00024770 40 80 7A 04 */ bge .text+0x17A04 +/* 000179E4 00024774 1D 2B 00 0C */ mulli r9, r11, 0xc +/* 000179E8 00024778 39 6B 00 01 */ addi r11, r11, 0x1 +/* 000179EC 0002477C 7C 0B D0 00 */ cmpw r11, r26 +/* 000179F0 00024780 7D 29 DA 14 */ add r9, r9, r27 +/* 000179F4 00024784 C0 09 00 04 */ lfs f0, 0x4(r9) +/* 000179F8 00024788 EC 00 03 72 */ fmuls f0, f0, f13 +/* 000179FC 0002478C D0 09 00 04 */ stfs f0, 0x4(r9) +/* 00017A00 00024790 41 80 79 E4 */ blt .text+0x179E4 +/* 00017A04 00024794 7E 88 A3 78 */ mr r8, r20 +/* 00017A08 00024798 7C 08 B8 00 */ cmpw r8, r23 +/* 00017A0C 0002479C 41 80 78 A0 */ blt .text+0x178A0 +/* 00017A10 000247A0 2C 1A 00 00 */ cmpwi r26, 0x0 +/* 00017A14 000247A4 2E 1B 00 00 */ cmpwi cr4, r27, 0x0 +/* 00017A18 000247A8 40 81 7A 88 */ ble .text+0x17A88 +.L_00017A1C: +/* 00017A1C 000247AC FC 20 F0 90 */ fmr f1, f30 +/* 00017A20 000247B0 48 00 00 01 */ bl bRandom__Ff +/* 00017A24 000247B4 39 60 00 00 */ li r11, 0x0 +/* 00017A28 000247B8 7C 0B D0 00 */ cmpw r11, r26 +/* 00017A2C 000247BC 40 80 7A 70 */ bge .text+0x17A70 +/* 00017A30 000247C0 3D 00 00 00 */ lis r8, bMirrorICEData@ha +/* 00017A34 000247C4 81 48 00 00 */ lwz r10, bMirrorICEData@l(r8) +/* 00017A38 000247C8 1C 0B 00 0C */ mulli r0, r11, 0xc +/* 00017A3C 000247CC 7D 20 DA 14 */ add r9, r0, r27 +/* 00017A40 000247D0 C0 09 00 04 */ lfs f0, 0x4(r9) +/* 00017A44 000247D4 FC 01 00 00 */ fcmpu cr0, f1, f0 +/* 00017A48 000247D8 4C 62 0B 82 */ cror un, eq, gt +.L_00017A4C: +/* 00017A4C 000247DC 41 83 7A 5C */ bso .text+0x17A5C +/* 00017A50 000247E0 7E 1B 00 2E */ lwzx r16, r27, r0 +.L_00017A54: +/* 00017A54 000247E4 81 49 00 08 */ lwz r10, 0x8(r9) +/* 00017A58 000247E8 48 01 7A 6C */ b .text+0x17A6C +/* 00017A5C 000247EC 39 6B 00 01 */ addi r11, r11, 0x1 +/* 00017A60 000247F0 EC 21 00 28 */ fsubs f1, f1, f0 +/* 00017A64 000247F4 7C 0B D0 00 */ cmpw r11, r26 +/* 00017A68 000247F8 41 80 7A 38 */ blt .text+0x17A38 +/* 00017A6C 000247FC 91 48 00 00 */ stw r10, bMirrorICEData@l(r8) +/* 00017A70 00024800 2C 10 00 00 */ cmpwi r16, 0x0 +/* 00017A74 00024804 40 82 7A 88 */ bne .text+0x17A88 +/* 00017A78 00024808 80 1B 00 08 */ lwz r0, 0x8(r27) +/* 00017A7C 0002480C 3D 20 00 00 */ lis r9, bMirrorICEData@ha +/* 00017A80 00024810 82 1B 00 00 */ lwz r16, 0x0(r27) +/* 00017A84 00024814 90 09 00 00 */ stw r0, bMirrorICEData@l(r9) +/* 00017A88 00024818 41 92 7A 94 */ beq cr4, .text+0x17A94 +/* 00017A8C 0002481C 7F 63 DB 78 */ mr r3, r27 +/* 00017A90 00024820 48 00 00 01 */ bl __builtin_vec_delete +/* 00017A94 00024824 41 8E 7A A0 */ beq cr3, .text+0x17AA0 +/* 00017A98 00024828 7E C3 B3 78 */ mr r3, r22 +/* 00017A9C 0002482C 48 00 00 01 */ bl __builtin_vec_delete +/* 00017AA0 00024830 7E 03 83 78 */ mr r3, r16 +/* 00017AA4 00024834 80 01 00 9C */ lwz r0, 0x9c(r1) +/* 00017AA8 00024838 81 81 00 20 */ lwz r12, 0x20(r1) +/* 00017AAC 0002483C 7C 08 03 A6 */ mtlr r0 +/* 00017AB0 00024840 B9 E1 00 24 */ lmw r15, 0x24(r1) +/* 00017AB4 00024844 E3 41 00 68 */ psq_l f26, 0x68(r1), 0, qr0 +/* 00017AB8 00024848 E3 61 00 70 */ psq_l f27, 0x70(r1), 0, qr0 +/* 00017ABC 0002484C E3 81 00 78 */ psq_l f28, 0x78(r1), 0, qr0 +/* 00017AC0 00024850 E3 A1 00 80 */ psq_l f29, 0x80(r1), 0, qr0 +/* 00017AC4 00024854 E3 C1 00 88 */ psq_l f30, 0x88(r1), 0, qr0 +/* 00017AC8 00024858 E3 E1 00 90 */ psq_l f31, 0x90(r1), 0, qr0 +/* 00017ACC 0002485C 7D 81 81 20 */ mtcrf 24, r12 +/* 00017AD0 00024860 38 21 00 98 */ addi r1, r1, 0x98 +/* 00017AD4 00024864 4E 80 00 20 */ blr +.endfn ChooseGoodCamera__9ICEReplayP9ICEAnchorP8ICEGroupi + +# .text:0x17AD8 | size: 0x44 +# GetOverlayIndex(unsigned char) +.fn GetOverlayIndex__FUc, local +/* 00017AD8 00024868 3D 20 00 00 */ lis r9, gIceOverlays@ha +/* 00017ADC 0002486C 39 40 00 00 */ li r10, 0x0 +/* 00017AE0 00024870 88 09 00 00 */ lbz r0, gIceOverlays@l(r9) +/* 00017AE4 00024874 39 60 00 00 */ li r11, 0x0 +/* 00017AE8 00024878 7C 03 00 00 */ cmpw r3, r0 +/* 00017AEC 0002487C 41 82 7B 14 */ beq .text+0x17B14 +/* 00017AF0 00024880 39 09 00 00 */ addi r8, r9, gIceOverlays@l +/* 00017AF4 00024884 39 6B 00 01 */ addi r11, r11, 0x1 +/* 00017AF8 00024888 2C 0B 00 04 */ cmpwi r11, 0x4 +/* 00017AFC 0002488C 41 81 7B 14 */ bgt .text+0x17B14 +/* 00017B00 00024890 55 60 18 38 */ slwi r0, r11, 3 +/* 00017B04 00024894 7D 28 00 AE */ lbzx r9, r8, r0 +/* 00017B08 00024898 7C 03 48 00 */ cmpw r3, r9 +/* 00017B0C 0002489C 40 82 7A F4 */ bne .text+0x17AF4 +/* 00017B10 000248A0 7D 6A 5B 78 */ mr r10, r11 +/* 00017B14 000248A4 7D 43 53 78 */ mr r3, r10 +/* 00017B18 000248A8 4E 80 00 20 */ blr +.endfn GetOverlayIndex__FUc + +# .text:0x17B1C | size: 0x34 +.fn GetOverlayName__3ICEUc, global +/* 00017B1C 000248AC 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 00017B20 000248B0 7C 08 02 A6 */ mflr r0 +/* 00017B24 000248B4 90 01 00 0C */ stw r0, 0xc(r1) +/* 00017B28 000248B8 48 01 7A D9 */ bl .text+0x17AD8 +/* 00017B2C 000248BC 3D 20 00 00 */ lis r9, gIceOverlays@ha +/* 00017B30 000248C0 54 63 18 38 */ slwi r3, r3, 3 +/* 00017B34 000248C4 39 29 00 00 */ addi r9, r9, gIceOverlays@l +/* 00017B38 000248C8 39 29 00 04 */ addi r9, r9, 0x4 +/* 00017B3C 000248CC 7C 63 48 2E */ lwzx r3, r3, r9 +/* 00017B40 000248D0 80 01 00 0C */ lwz r0, 0xc(r1) +/* 00017B44 000248D4 7C 08 03 A6 */ mtlr r0 +/* 00017B48 000248D8 38 21 00 08 */ addi r1, r1, 0x8 +/* 00017B4C 000248DC 4E 80 00 20 */ blr +.endfn GetOverlayName__3ICEUc + +# .text:0x17B50 | size: 0x74 +.fn ShowOverlay__3ICEUc, global +/* 00017B50 000248E0 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00017B54 000248E4 7C 08 02 A6 */ mflr r0 +/* 00017B58 000248E8 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 00017B5C 000248EC 90 01 00 14 */ stw r0, 0x14(r1) +/* 00017B60 000248F0 7C 7F 1B 79 */ mr. r31, r3 +/* 00017B64 000248F4 41 82 7B B0 */ beq .text+0x17BB0 +.L_00017B68: +/* 00017B68 000248F8 3F C0 00 00 */ lis r30, gOverlay@ha +/* 00017B6C 000248FC 88 1E 00 00 */ lbz r0, gOverlay@l(r30) +/* 00017B70 00024900 70 09 00 7F */ andi. r9, r0, 0x7f +/* 00017B74 00024904 41 82 7B 80 */ beq .text+0x17B80 +/* 00017B78 00024908 70 09 00 80 */ andi. r9, r0, 0x80 +/* 00017B7C 0002490C 41 82 7B B0 */ beq .text+0x17BB0 +/* 00017B80 00024910 38 60 00 08 */ li r3, 0x8 +/* 00017B84 00024914 48 00 00 01 */ bl __nw__5EventUi +/* 00017B88 00024918 48 00 00 01 */ bl __17ELoadingScreenOff +/* 00017B8C 0002491C 3D 20 00 00 */ lis r9, _5cFEng.mInstance@ha +/* 00017B90 00024920 9B FE 00 00 */ stb r31, gOverlay@l(r30) +/* 00017B94 00024924 83 C9 00 00 */ lwz r30, _5cFEng.mInstance@l(r9) +/* 00017B98 00024928 7F E3 FB 78 */ mr r3, r31 +/* 00017B9C 0002492C 48 01 7B 1D */ bl .text+0x17B1C +/* 00017BA0 00024930 7C 64 1B 78 */ mr r4, r3 +/* 00017BA4 00024934 38 A0 00 67 */ li r5, 0x67 +/* 00017BA8 00024938 7F C3 F3 78 */ mr r3, r30 +/* 00017BAC 0002493C 48 00 00 01 */ bl PushNoControlPackage__5cFEngPCci +/* 00017BB0 00024940 80 01 00 14 */ lwz r0, 0x14(r1) +/* 00017BB4 00024944 7C 08 03 A6 */ mtlr r0 +/* 00017BB8 00024948 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 00017BBC 0002494C 38 21 00 10 */ addi r1, r1, 0x10 +/* 00017BC0 00024950 4E 80 00 20 */ blr +.endfn ShowOverlay__3ICEUc + +# .text:0x17BC4 | size: 0x84 +.fn HideOverlay__3ICEv, global +/* 00017BC4 00024954 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 00017BC8 00024958 7C 08 02 A6 */ mflr r0 +/* 00017BCC 0002495C BF A1 00 0C */ stmw r29, 0xc(r1) +/* 00017BD0 00024960 90 01 00 1C */ stw r0, 0x1c(r1) +/* 00017BD4 00024964 3F E0 00 00 */ lis r31, gOverlay@ha +/* 00017BD8 00024968 88 1F 00 00 */ lbz r0, gOverlay@l(r31) +/* 00017BDC 0002496C 70 03 00 7F */ andi. r3, r0, 0x7f +/* 00017BE0 00024970 41 82 7C 34 */ beq .text+0x17C34 +/* 00017BE4 00024974 3F A0 00 00 */ lis r29, _5cFEng.mInstance@ha +/* 00017BE8 00024978 83 DD 00 00 */ lwz r30, _5cFEng.mInstance@l(r29) +/* 00017BEC 0002497C 48 01 7B 1D */ bl .text+0x17B1C +/* 00017BF0 00024980 7C 64 1B 78 */ mr r4, r3 +/* 00017BF4 00024984 7F C3 F3 78 */ mr r3, r30 +/* 00017BF8 00024988 48 00 00 01 */ bl IsPackagePushed__5cFEngPCc +/* 00017BFC 0002498C 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00017C00 00024990 41 82 7C 28 */ beq .text+0x17C28 +/* 00017C04 00024994 88 7F 00 00 */ lbz r3, gOverlay@l(r31) +/* 00017C08 00024998 83 DD 00 00 */ lwz r30, _5cFEng.mInstance@l(r29) +/* 00017C0C 0002499C 54 63 06 7E */ clrlwi r3, r3, 25 +/* 00017C10 000249A0 48 01 7B 1D */ bl .text+0x17B1C +/* 00017C14 000249A4 7C 64 1B 78 */ mr r4, r3 +/* 00017C18 000249A8 7F C3 F3 78 */ mr r3, r30 +.L_00017C1C: +/* 00017C1C 000249AC 48 00 00 01 */ bl PopNoControlPackage__5cFEngPCc +/* 00017C20 000249B0 38 00 00 00 */ li r0, 0x0 +/* 00017C24 000249B4 48 01 7C 30 */ b .text+0x17C30 +/* 00017C28 000249B8 88 1F 00 00 */ lbz r0, gOverlay@l(r31) +/* 00017C2C 000249BC 60 00 00 80 */ ori r0, r0, 0x80 +/* 00017C30 000249C0 98 1F 00 00 */ stb r0, gOverlay@l(r31) +/* 00017C34 000249C4 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 00017C38 000249C8 7C 08 03 A6 */ mtlr r0 +/* 00017C3C 000249CC BB A1 00 0C */ lmw r29, 0xc(r1) +/* 00017C40 000249D0 38 21 00 18 */ addi r1, r1, 0x18 +/* 00017C44 000249D4 4E 80 00 20 */ blr +.endfn HideOverlay__3ICEv + +# .text:0x17C48 | size: 0x84 +# ICEGroup::FlushAllocatedTracks +.fn FlushAllocatedTracks__8ICEGroup, global +/* 00017C48 000249D8 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 00017C4C 000249DC 7C 08 02 A6 */ mflr r0 +/* 00017C50 000249E0 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 00017C54 000249E4 90 01 00 1C */ stw r0, 0x1c(r1) +/* 00017C58 000249E8 7C 7E 1B 78 */ mr r30, r3 +/* 00017C5C 000249EC 80 7E 00 0C */ lwz r3, 0xc(r30) +/* 00017C60 000249F0 3B BE 00 0C */ addi r29, r30, 0xc +/* 00017C64 000249F4 7C 03 E8 00 */ cmpw r3, r29 +/* 00017C68 000249F8 41 82 7C B8 */ beq .text+0x17CB8 +/* 00017C6C 000249FC 88 03 00 16 */ lbz r0, 0x16(r3) +/* 00017C70 00024A00 39 20 00 01 */ li r9, 0x1 +/* 00017C74 00024A04 83 E3 00 00 */ lwz r31, 0x0(r3) +/* 00017C78 00024A08 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00017C7C 00024A0C 40 82 7C 84 */ bne .text+0x17C84 +/* 00017C80 00024A10 39 20 00 00 */ li r9, 0x0 +/* 00017C84 00024A14 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00017C88 00024A18 41 82 7C B0 */ beq .text+0x17CB0 +/* 00017C8C 00024A1C 81 23 00 04 */ lwz r9, 0x4(r3) +/* 00017C90 00024A20 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00017C94 00024A24 93 E9 00 00 */ stw r31, 0x0(r9) +/* 00017C98 00024A28 91 3F 00 04 */ stw r9, 0x4(r31) +/* 00017C9C 00024A2C 41 82 7C A4 */ beq .text+0x17CA4 +.L_00017CA0: +/* 00017CA0 00024A30 48 00 00 01 */ bl __builtin_delete +/* 00017CA4 00024A34 81 3E 00 08 */ lwz r9, 0x8(r30) +/* 00017CA8 00024A38 39 29 FF FF */ subi r9, r9, 0x1 +/* 00017CAC 00024A3C 91 3E 00 08 */ stw r9, 0x8(r30) +/* 00017CB0 00024A40 7F E3 FB 78 */ mr r3, r31 +/* 00017CB4 00024A44 48 01 7C 64 */ b .text+0x17C64 +/* 00017CB8 00024A48 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 00017CBC 00024A4C 7C 08 03 A6 */ mtlr r0 +/* 00017CC0 00024A50 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 00017CC4 00024A54 38 21 00 18 */ addi r1, r1, 0x18 +/* 00017CC8 00024A58 4E 80 00 20 */ blr +.endfn FlushAllocatedTracks__8ICEGroup + +# .text:0x17CCC | size: 0x3C +.fn GetTrack__8ICEGroupi, global +/* 00017CCC 00024A5C 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00017CD0 00024A60 7C 08 02 A6 */ mflr r0 +/* 00017CD4 00024A64 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 00017CD8 00024A68 90 01 00 14 */ stw r0, 0x14(r1) +/* 00017CDC 00024A6C 3B C3 00 0C */ addi r30, r3, 0xc +/* 00017CE0 00024A70 7F C3 F3 78 */ mr r3, r30 +/* 00017CE4 00024A74 48 00 00 01 */ bl GetNode__5bListi +.L_00017CE8: +/* 00017CE8 00024A78 7C 03 F0 00 */ cmpw r3, r30 +/* 00017CEC 00024A7C 40 82 7C F4 */ bne .text+0x17CF4 +/* 00017CF0 00024A80 38 60 00 00 */ li r3, 0x0 +/* 00017CF4 00024A84 80 01 00 14 */ lwz r0, 0x14(r1) +.L_00017CF8: +/* 00017CF8 00024A88 7C 08 03 A6 */ mtlr r0 +/* 00017CFC 00024A8C BB C1 00 08 */ lmw r30, 0x8(r1) +/* 00017D00 00024A90 38 21 00 10 */ addi r1, r1, 0x10 +/* 00017D04 00024A94 4E 80 00 20 */ blr +.endfn GetTrack__8ICEGroupi + +# .text:0x17D08 | size: 0x60 +.fn GetTrack__8ICEGroupPc, global +/* 00017D08 00024A98 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 00017D0C 00024A9C 7C 08 02 A6 */ mflr r0 +/* 00017D10 00024AA0 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 00017D14 00024AA4 90 01 00 1C */ stw r0, 0x1c(r1) +/* 00017D18 00024AA8 83 E3 00 0C */ lwz r31, 0xc(r3) +/* 00017D1C 00024AAC 7C 9D 23 78 */ mr r29, r4 +/* 00017D20 00024AB0 3B C3 00 0C */ addi r30, r3, 0xc +/* 00017D24 00024AB4 7C 1F F0 00 */ cmpw r31, r30 +/* 00017D28 00024AB8 41 82 7D 50 */ beq .text+0x17D50 +.L_00017D2C: +/* 00017D2C 00024ABC 7F A3 EB 78 */ mr r3, r29 +/* 00017D30 00024AC0 38 9F 00 17 */ addi r4, r31, 0x17 +/* 00017D34 00024AC4 48 00 00 01 */ bl bStrCmp__FPCcT0 +/* 00017D38 00024AC8 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00017D3C 00024ACC 40 82 7D 48 */ bne .text+0x17D48 +/* 00017D40 00024AD0 7F E3 FB 78 */ mr r3, r31 +/* 00017D44 00024AD4 48 01 7D 54 */ b .text+0x17D54 +/* 00017D48 00024AD8 83 FF 00 00 */ lwz r31, 0x0(r31) +/* 00017D4C 00024ADC 48 01 7D 24 */ b .text+0x17D24 +/* 00017D50 00024AE0 38 60 00 00 */ li r3, 0x0 +/* 00017D54 00024AE4 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 00017D58 00024AE8 7C 08 03 A6 */ mtlr r0 +/* 00017D5C 00024AEC BB A1 00 0C */ lmw r29, 0xc(r1) +/* 00017D60 00024AF0 38 21 00 18 */ addi r1, r1, 0x18 +/* 00017D64 00024AF4 4E 80 00 20 */ blr +.endfn GetTrack__8ICEGroupPc + +# .text:0x17D68 | size: 0x84 +# ICEShakeGroup::FlushAllocatedTracks +.fn FlushAllocatedTracks__13ICEShakeGroup, global +/* 00017D68 00024AF8 94 21 FF E8 */ stwu r1, -0x18(r1) +.L_00017D6C: +/* 00017D6C 00024AFC 7C 08 02 A6 */ mflr r0 +/* 00017D70 00024B00 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 00017D74 00024B04 90 01 00 1C */ stw r0, 0x1c(r1) +/* 00017D78 00024B08 7C 7E 1B 78 */ mr r30, r3 +/* 00017D7C 00024B0C 7F DD F3 78 */ mr r29, r30 +/* 00017D80 00024B10 84 7D 00 04 */ lwzu r3, 0x4(r29) +/* 00017D84 00024B14 7C 03 E8 00 */ cmpw r3, r29 +/* 00017D88 00024B18 41 82 7D D8 */ beq .text+0x17DD8 +/* 00017D8C 00024B1C 88 03 00 0E */ lbz r0, 0xe(r3) +/* 00017D90 00024B20 39 20 00 01 */ li r9, 0x1 +/* 00017D94 00024B24 83 E3 00 00 */ lwz r31, 0x0(r3) +/* 00017D98 00024B28 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00017D9C 00024B2C 40 82 7D A4 */ bne .text+0x17DA4 +/* 00017DA0 00024B30 39 20 00 00 */ li r9, 0x0 +/* 00017DA4 00024B34 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00017DA8 00024B38 41 82 7D D0 */ beq .text+0x17DD0 +/* 00017DAC 00024B3C 81 23 00 04 */ lwz r9, 0x4(r3) +/* 00017DB0 00024B40 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00017DB4 00024B44 93 E9 00 00 */ stw r31, 0x0(r9) +/* 00017DB8 00024B48 91 3F 00 04 */ stw r9, 0x4(r31) +/* 00017DBC 00024B4C 41 82 7D C4 */ beq .text+0x17DC4 +.L_00017DC0: +/* 00017DC0 00024B50 48 00 00 01 */ bl __builtin_delete +/* 00017DC4 00024B54 81 3E 00 00 */ lwz r9, 0x0(r30) +/* 00017DC8 00024B58 39 29 FF FF */ subi r9, r9, 0x1 +/* 00017DCC 00024B5C 91 3E 00 00 */ stw r9, 0x0(r30) +/* 00017DD0 00024B60 7F E3 FB 78 */ mr r3, r31 +/* 00017DD4 00024B64 48 01 7D 84 */ b .text+0x17D84 +/* 00017DD8 00024B68 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 00017DDC 00024B6C 7C 08 03 A6 */ mtlr r0 +/* 00017DE0 00024B70 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 00017DE4 00024B74 38 21 00 18 */ addi r1, r1, 0x18 +/* 00017DE8 00024B78 4E 80 00 20 */ blr +.endfn FlushAllocatedTracks__13ICEShakeGroup + +# .text:0x17DEC | size: 0x3C +.fn GetTrack__13ICEShakeGroupi, global +/* 00017DEC 00024B7C 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00017DF0 00024B80 7C 08 02 A6 */ mflr r0 +/* 00017DF4 00024B84 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 00017DF8 00024B88 90 01 00 14 */ stw r0, 0x14(r1) +/* 00017DFC 00024B8C 3B C3 00 04 */ addi r30, r3, 0x4 +/* 00017E00 00024B90 7F C3 F3 78 */ mr r3, r30 +/* 00017E04 00024B94 48 00 00 01 */ bl GetNode__5bListi +/* 00017E08 00024B98 7C 03 F0 00 */ cmpw r3, r30 +/* 00017E0C 00024B9C 40 82 7E 14 */ bne .text+0x17E14 +/* 00017E10 00024BA0 38 60 00 00 */ li r3, 0x0 +/* 00017E14 00024BA4 80 01 00 14 */ lwz r0, 0x14(r1) +/* 00017E18 00024BA8 7C 08 03 A6 */ mtlr r0 +/* 00017E1C 00024BAC BB C1 00 08 */ lmw r30, 0x8(r1) +/* 00017E20 00024BB0 38 21 00 10 */ addi r1, r1, 0x10 +/* 00017E24 00024BB4 4E 80 00 20 */ blr +.endfn GetTrack__13ICEShakeGroupi + +# .text:0x17E28 | size: 0x68 +# ICETrack::PlatEndianSwap +.fn PlatEndianSwap__8ICETrack, global +/* 00017E28 00024BB8 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00017E2C 00024BBC 7C 08 02 A6 */ mflr r0 +/* 00017E30 00024BC0 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 00017E34 00024BC4 90 01 00 14 */ stw r0, 0x14(r1) +/* 00017E38 00024BC8 7C 7F 1B 78 */ mr r31, r3 +/* 00017E3C 00024BCC 3B C0 00 00 */ li r30, 0x0 +/* 00017E40 00024BD0 38 7F 00 0C */ addi r3, r31, 0xc +.L_00017E44: +/* 00017E44 00024BD4 48 00 00 01 */ bl bEndianSwap32__FPv +.L_00017E48: +/* 00017E48 00024BD8 38 7F 00 10 */ addi r3, r31, 0x10 +/* 00017E4C 00024BDC 48 00 00 01 */ bl bEndianSwap32__FPv +/* 00017E50 00024BE0 38 7F 00 14 */ addi r3, r31, 0x14 +/* 00017E54 00024BE4 48 00 00 01 */ bl bEndianSwap16__FPv +/* 00017E58 00024BE8 48 01 7E 70 */ b .text+0x17E70 +/* 00017E5C 00024BEC 1C 7E 00 84 */ mulli r3, r30, 0x84 +/* 00017E60 00024BF0 3B DE 00 01 */ addi r30, r30, 0x1 +/* 00017E64 00024BF4 38 63 00 28 */ addi r3, r3, 0x28 +/* 00017E68 00024BF8 7C 7F 1A 14 */ add r3, r31, r3 +/* 00017E6C 00024BFC 48 01 35 21 */ bl .text+0x13520 +.L_00017E70: +/* 00017E70 00024C00 A8 1F 00 14 */ lha r0, 0x14(r31) +/* 00017E74 00024C04 7C 1E 00 00 */ cmpw r30, r0 +/* 00017E78 00024C08 41 80 7E 5C */ blt .text+0x17E5C +/* 00017E7C 00024C0C 80 01 00 14 */ lwz r0, 0x14(r1) +/* 00017E80 00024C10 7C 08 03 A6 */ mtlr r0 +/* 00017E84 00024C14 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 00017E88 00024C18 38 21 00 10 */ addi r1, r1, 0x10 +/* 00017E8C 00024C1C 4E 80 00 20 */ blr +.endfn PlatEndianSwap__8ICETrack + +# .text:0x17E90 | size: 0x18 +# ICETrack::GetContext +.fn GetContext__8ICETrack, global +/* 00017E90 00024C20 81 23 00 08 */ lwz r9, 0x8(r3) +/* 00017E94 00024C24 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00017E98 00024C28 38 60 00 04 */ li r3, 0x4 +/* 00017E9C 00024C2C 4D 82 00 20 */ beqlr +/* 00017EA0 00024C30 80 69 00 04 */ lwz r3, 0x4(r9) +/* 00017EA4 00024C34 4E 80 00 20 */ blr +.endfn GetContext__8ICETrack + +# .text:0x17EA8 | size: 0x40 +.fn GetKeyNumber__8ICETrackf, global +/* 00017EA8 00024C38 A8 03 00 14 */ lha r0, 0x14(r3) +/* 00017EAC 00024C3C 39 23 00 38 */ addi r9, r3, 0x38 +/* 00017EB0 00024C40 34 60 FF FF */ subic. r3, r0, 0x1 +/* 00017EB4 00024C44 4C 81 00 20 */ blelr +.L_00017EB8: +/* 00017EB8 00024C48 1C 03 00 84 */ mulli r0, r3, 0x84 +/* 00017EBC 00024C4C 7C 09 04 2E */ lfsx f0, r9, r0 +/* 00017EC0 00024C50 FC 00 08 00 */ fcmpu cr0, f0, f1 +/* 00017EC4 00024C54 4C 62 03 82 */ cror un, eq, lt +.L_00017EC8: +/* 00017EC8 00024C58 4D 83 00 20 */ bsolr +/* 00017ECC 00024C5C 34 63 FF FF */ subic. r3, r3, 0x1 +/* 00017ED0 00024C60 4C 81 00 20 */ blelr +/* 00017ED4 00024C64 1C 03 00 84 */ mulli r0, r3, 0x84 +/* 00017ED8 00024C68 7C 09 04 2E */ lfsx f0, r9, r0 +/* 00017EDC 00024C6C FC 00 08 00 */ fcmpu cr0, f0, f1 +/* 00017EE0 00024C70 41 81 7E CC */ bgt .text+0x17ECC +/* 00017EE4 00024C74 4E 80 00 20 */ blr +.endfn GetKeyNumber__8ICETrackf + +# .text:0x17EE8 | size: 0x130 +# ICETrack::GetParameter +.fn GetParameter__8ICETrack, global +/* 00017EE8 00024C78 94 21 FF D8 */ stwu r1, -0x28(r1) +/* 00017EEC 00024C7C 7C 08 02 A6 */ mflr r0 +/* 00017EF0 00024C80 F3 A1 00 10 */ psq_st f29, 0x10(r1), 0, qr0 +/* 00017EF4 00024C84 F3 C1 00 18 */ psq_st f30, 0x18(r1), 0, qr0 +/* 00017EF8 00024C88 F3 E1 00 20 */ psq_st f31, 0x20(r1), 0, qr0 +.L_00017EFC: +/* 00017EFC 00024C8C 93 E1 00 0C */ stw r31, 0xc(r1) +/* 00017F00 00024C90 90 01 00 2C */ stw r0, 0x2c(r1) +/* 00017F04 00024C94 3D 20 00 00 */ lis r9, .rodata+0xDD8@ha +/* 00017F08 00024C98 7C 7F 1B 78 */ mr r31, r3 +/* 00017F0C 00024C9C C3 C9 0D D8 */ lfs f30, .rodata+0xDD8@l(r9) +/* 00017F10 00024CA0 48 01 7E 91 */ bl .text+0x17E90 +/* 00017F14 00024CA4 7C 63 1B 79 */ mr. r3, r3 +/* 00017F18 00024CA8 40 82 7F A4 */ bne .text+0x17FA4 +/* 00017F1C 00024CAC 48 01 9F D9 */ bl .text+0x19FD8 +/* 00017F20 00024CB0 7C 7F 1B 79 */ mr. r31, r3 +/* 00017F24 00024CB4 41 82 7F F4 */ beq .text+0x17FF4 +/* 00017F28 00024CB8 81 3F 00 00 */ lwz r9, 0x0(r31) +/* 00017F2C 00024CBC 80 09 00 5C */ lwz r0, 0x5c(r9) +/* 00017F30 00024CC0 A8 69 00 58 */ lha r3, 0x58(r9) +/* 00017F34 00024CC4 7C 08 03 A6 */ mtlr r0 +/* 00017F38 00024CC8 7C 7F 1A 14 */ add r3, r31, r3 +/* 00017F3C 00024CCC 4E 80 00 21 */ blrl +/* 00017F40 00024CD0 81 3F 00 00 */ lwz r9, 0x0(r31) +/* 00017F44 00024CD4 FF C0 08 90 */ fmr f30, f1 +/* 00017F48 00024CD8 80 09 00 4C */ lwz r0, 0x4c(r9) +/* 00017F4C 00024CDC A8 69 00 48 */ lha r3, 0x48(r9) +/* 00017F50 00024CE0 7C 08 03 A6 */ mtlr r0 +/* 00017F54 00024CE4 7C 7F 1A 14 */ add r3, r31, r3 +/* 00017F58 00024CE8 4E 80 00 21 */ blrl +/* 00017F5C 00024CEC 81 3F 00 00 */ lwz r9, 0x0(r31) +/* 00017F60 00024CF0 FF A0 08 90 */ fmr f29, f1 +/* 00017F64 00024CF4 80 09 00 54 */ lwz r0, 0x54(r9) +.L_00017F68: +/* 00017F68 00024CF8 A8 69 00 50 */ lha r3, 0x50(r9) +/* 00017F6C 00024CFC 7C 08 03 A6 */ mtlr r0 +/* 00017F70 00024D00 7C 7F 1A 14 */ add r3, r31, r3 +/* 00017F74 00024D04 4E 80 00 21 */ blrl +/* 00017F78 00024D08 81 3F 00 00 */ lwz r9, 0x0(r31) +/* 00017F7C 00024D0C FF E0 08 90 */ fmr f31, f1 +/* 00017F80 00024D10 A8 69 00 48 */ lha r3, 0x48(r9) +/* 00017F84 00024D14 80 09 00 4C */ lwz r0, 0x4c(r9) +/* 00017F88 00024D18 7C 7F 1A 14 */ add r3, r31, r3 +/* 00017F8C 00024D1C 7C 08 03 A6 */ mtlr r0 +/* 00017F90 00024D20 4E 80 00 21 */ blrl +/* 00017F94 00024D24 EF DE E8 28 */ fsubs f30, f30, f29 +/* 00017F98 00024D28 EF FF 08 28 */ fsubs f31, f31, f1 +/* 00017F9C 00024D2C EF DE F8 24 */ fdivs f30, f30, f31 +/* 00017FA0 00024D30 48 01 7F F4 */ b .text+0x17FF4 +/* 00017FA4 00024D34 38 03 FF FF */ subi r0, r3, 0x1 +/* 00017FA8 00024D38 28 00 00 02 */ cmplwi r0, 0x2 +.L_00017FAC: +/* 00017FAC 00024D3C 41 81 7F F4 */ bgt .text+0x17FF4 +/* 00017FB0 00024D40 C0 1F 00 10 */ lfs f0, 0x10(r31) +/* 00017FB4 00024D44 FC 00 F0 00 */ fcmpu cr0, f0, f30 +/* 00017FB8 00024D48 4C 62 03 82 */ cror un, eq, lt +/* 00017FBC 00024D4C 41 83 7F F4 */ bso .text+0x17FF4 +/* 00017FC0 00024D50 3C 60 00 00 */ lis r3, TheICEManager@ha +/* 00017FC4 00024D54 38 63 00 00 */ addi r3, r3, TheICEManager@l +/* 00017FC8 00024D58 48 01 82 B1 */ bl .text+0x182B0 +/* 00017FCC 00024D5C C0 1F 00 0C */ lfs f0, 0xc(r31) +/* 00017FD0 00024D60 3D 20 00 00 */ lis r9, .rodata+0xDDC@ha +/* 00017FD4 00024D64 C1 BF 00 10 */ lfs f13, 0x10(r31) +/* 00017FD8 00024D68 EC 21 00 28 */ fsubs f1, f1, f0 +/* 00017FDC 00024D6C EF C1 68 24 */ fdivs f30, f1, f13 +/* 00017FE0 00024D70 C0 09 0D DC */ lfs f0, .rodata+0xDDC@l(r9) +/* 00017FE4 00024D74 FC 1E 00 00 */ fcmpu cr0, f30, f0 +/* 00017FE8 00024D78 4C 62 03 82 */ cror un, eq, lt +/* 00017FEC 00024D7C 41 83 7F F4 */ bso .text+0x17FF4 +/* 00017FF0 00024D80 FF C0 00 90 */ fmr f30, f0 +/* 00017FF4 00024D84 FC 20 F0 90 */ fmr f1, f30 +/* 00017FF8 00024D88 80 01 00 2C */ lwz r0, 0x2c(r1) +/* 00017FFC 00024D8C 7C 08 03 A6 */ mtlr r0 +/* 00018000 00024D90 83 E1 00 0C */ lwz r31, 0xc(r1) +/* 00018004 00024D94 E3 A1 00 10 */ psq_l f29, 0x10(r1), 0, qr0 +.L_00018008: +/* 00018008 00024D98 E3 C1 00 18 */ psq_l f30, 0x18(r1), 0, qr0 +/* 0001800C 00024D9C E3 E1 00 20 */ psq_l f31, 0x20(r1), 0, qr0 +/* 00018010 00024DA0 38 21 00 28 */ addi r1, r1, 0x28 +/* 00018014 00024DA4 4E 80 00 20 */ blr +.endfn GetParameter__8ICETrack + +# .text:0x18018 | size: 0x128 +.fn GetCameraData__8ICETrackPfN21, global +/* 00018018 00024DA8 94 21 FF D8 */ stwu r1, -0x28(r1) +/* 0001801C 00024DAC 7C 08 02 A6 */ mflr r0 +/* 00018020 00024DB0 F3 C1 00 18 */ psq_st f30, 0x18(r1), 0, qr0 +/* 00018024 00024DB4 F3 E1 00 20 */ psq_st f31, 0x20(r1), 0, qr0 +/* 00018028 00024DB8 BF 81 00 08 */ stmw r28, 0x8(r1) +/* 0001802C 00024DBC 90 01 00 2C */ stw r0, 0x2c(r1) +/* 00018030 00024DC0 7C 7F 1B 78 */ mr r31, r3 +/* 00018034 00024DC4 7C 9D 23 78 */ mr r29, r4 +/* 00018038 00024DC8 7C BC 2B 78 */ mr r28, r5 +/* 0001803C 00024DCC 7C DE 33 78 */ mr r30, r6 +/* 00018040 00024DD0 48 01 7E E9 */ bl .text+0x17EE8 +/* 00018044 00024DD4 3D 20 00 00 */ lis r9, .rodata+0xDE0@ha +/* 00018048 00024DD8 FF E0 08 90 */ fmr f31, f1 +/* 0001804C 00024DDC C3 C9 0D E0 */ lfs f30, .rodata+0xDE0@l(r9) +/* 00018050 00024DE0 FC 1F F0 00 */ fcmpu cr0, f31, f30 +/* 00018054 00024DE4 41 80 81 10 */ blt .L_00010164 +/* 00018058 00024DE8 3D 20 00 00 */ lis r9, .rodata+0xDE4@ha +/* 0001805C 00024DEC C0 09 0D E4 */ lfs f0, .rodata+0xDE4@l(r9) +/* 00018060 00024DF0 FC 1F 00 00 */ fcmpu cr0, f31, f0 +/* 00018064 00024DF4 41 81 81 10 */ bgt .L_00010174 +/* 00018068 00024DF8 7F E3 FB 78 */ mr r3, r31 +/* 0001806C 00024DFC FC 20 F8 90 */ fmr f1, f31 +/* 00018070 00024E00 48 01 7E A9 */ bl .text+0x17EA8 +/* 00018074 00024E04 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 00018078 00024E08 41 82 80 80 */ beq .L_000100F8 +/* 0001807C 00024E0C D3 FE 00 00 */ stfs f31, 0x0(r30) +/* 00018080 00024E10 2C 1D 00 00 */ cmpwi r29, 0x0 +/* 00018084 00024E14 41 82 80 B0 */ beq .L_00010134 +/* 00018088 00024E18 FC 00 F0 90 */ fmr f0, f30 +/* 0001808C 00024E1C 2C 03 FF FF */ cmpwi r3, -0x1 +/* 00018090 00024E20 40 81 80 AC */ ble .L_0001013C +.L_00018094: +/* 00018094 00024E24 A8 1F 00 14 */ lha r0, 0x14(r31) +/* 00018098 00024E28 7C 03 00 00 */ cmpw r3, r0 +/* 0001809C 00024E2C 40 80 80 AC */ bge .L_00010148 +/* 000180A0 00024E30 1C 03 00 84 */ mulli r0, r3, 0x84 +/* 000180A4 00024E34 39 3F 00 38 */ addi r9, r31, 0x38 +/* 000180A8 00024E38 7C 09 04 2E */ lfsx f0, r9, r0 +/* 000180AC 00024E3C D0 1D 00 00 */ stfs f0, 0x0(r29) +/* 000180B0 00024E40 2C 1C 00 00 */ cmpwi r28, 0x0 +/* 000180B4 00024E44 41 82 80 E4 */ beq .L_00010198 +/* 000180B8 00024E48 3D 20 00 00 */ lis r9, .rodata+0xDE4@ha +/* 000180BC 00024E4C 35 63 00 01 */ addic. r11, r3, 0x1 +/* 000180C0 00024E50 C0 09 0D E4 */ lfs f0, .rodata+0xDE4@l(r9) +/* 000180C4 00024E54 41 80 80 E0 */ blt .L_000101A4 +/* 000180C8 00024E58 A8 1F 00 14 */ lha r0, 0x14(r31) +/* 000180CC 00024E5C 7C 0B 00 00 */ cmpw r11, r0 +/* 000180D0 00024E60 40 80 80 E0 */ bge .L_000101B0 +/* 000180D4 00024E64 1C 0B 00 84 */ mulli r0, r11, 0x84 +/* 000180D8 00024E68 39 3F 00 38 */ addi r9, r31, 0x38 +/* 000180DC 00024E6C 7C 09 04 2E */ lfsx f0, r9, r0 +/* 000180E0 00024E70 D0 1C 00 00 */ stfs f0, 0x0(r28) +/* 000180E4 00024E74 7C 60 1B 78 */ mr r0, r3 +/* 000180E8 00024E78 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000180EC 00024E7C 40 80 80 F4 */ bge .L_000101E0 +/* 000180F0 00024E80 38 00 00 00 */ li r0, 0x0 +/* 000180F4 00024E84 A9 3F 00 14 */ lha r9, 0x14(r31) +/* 000180F8 00024E88 39 29 FF FF */ subi r9, r9, 0x1 +.L_000180FC: +/* 000180FC 00024E8C 7C 09 00 00 */ cmpw r9, r0 +/* 00018100 00024E90 40 80 81 08 */ bge .L_00010208 +/* 00018104 00024E94 7D 20 4B 78 */ mr r0, r9 +/* 00018108 00024E98 7C 03 00 00 */ cmpw r3, r0 +/* 0001810C 00024E9C 41 82 81 18 */ beq .L_00010224 +/* 00018110 00024EA0 38 60 00 00 */ li r3, 0x0 +/* 00018114 00024EA4 48 01 81 24 */ b .text+0x18124 +/* 00018118 00024EA8 1C 63 00 84 */ mulli r3, r3, 0x84 +/* 0001811C 00024EAC 38 63 00 28 */ addi r3, r3, 0x28 +/* 00018120 00024EB0 7C 7F 1A 14 */ add r3, r31, r3 +/* 00018124 00024EB4 80 01 00 2C */ lwz r0, 0x2c(r1) +/* 00018128 00024EB8 7C 08 03 A6 */ mtlr r0 +/* 0001812C 00024EBC BB 81 00 08 */ lmw r28, 0x8(r1) +/* 00018130 00024EC0 E3 C1 00 18 */ psq_l f30, 0x18(r1), 0, qr0 +/* 00018134 00024EC4 E3 E1 00 20 */ psq_l f31, 0x20(r1), 0, qr0 +/* 00018138 00024EC8 38 21 00 28 */ addi r1, r1, 0x28 +/* 0001813C 00024ECC 4E 80 00 20 */ blr +.endfn GetCameraData__8ICETrackPfN21 + +# .text:0x18140 | size: 0x54 +# ICEShakeData::PlatEndianSwap +.fn PlatEndianSwap__12ICEShakeData, global +/* 00018140 00024ED0 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00018144 00024ED4 7C 08 02 A6 */ mflr r0 +.L_00018148: +/* 00018148 00024ED8 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 0001814C 00024EDC 90 01 00 14 */ stw r0, 0x14(r1) +/* 00018150 00024EE0 7C 7E 1B 78 */ mr r30, r3 +.L_00018154: +/* 00018154 00024EE4 48 00 00 01 */ bl bEndianSwap32__FPv +/* 00018158 00024EE8 38 7E 00 04 */ addi r3, r30, 0x4 +/* 0001815C 00024EEC 48 00 00 01 */ bl bEndianSwap32__FPv +/* 00018160 00024EF0 38 7E 00 08 */ addi r3, r30, 0x8 +/* 00018164 00024EF4 48 00 00 01 */ bl bEndianSwap32__FPv +/* 00018168 00024EF8 38 7E 00 0C */ addi r3, r30, 0xc +/* 0001816C 00024EFC 48 00 00 01 */ bl bEndianSwap32__FPv +/* 00018170 00024F00 38 7E 00 10 */ addi r3, r30, 0x10 +/* 00018174 00024F04 48 00 00 01 */ bl bEndianSwap32__FPv +/* 00018178 00024F08 38 7E 00 14 */ addi r3, r30, 0x14 +.L_0001817C: +/* 0001817C 00024F0C 48 00 00 01 */ bl bEndianSwap32__FPv +/* 00018180 00024F10 80 01 00 14 */ lwz r0, 0x14(r1) +/* 00018184 00024F14 7C 08 03 A6 */ mtlr r0 +/* 00018188 00024F18 BB C1 00 08 */ lmw r30, 0x8(r1) +.L_0001818C: +/* 0001818C 00024F1C 38 21 00 10 */ addi r1, r1, 0x10 +/* 00018190 00024F20 4E 80 00 20 */ blr +.endfn PlatEndianSwap__12ICEShakeData + +# .text:0x18194 | size: 0x58 +# ICEShakeTrack::PlatEndianSwap +.fn PlatEndianSwap__13ICEShakeTrack, global +/* 00018194 00024F24 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00018198 00024F28 7C 08 02 A6 */ mflr r0 +/* 0001819C 00024F2C BF C1 00 08 */ stmw r30, 0x8(r1) +/* 000181A0 00024F30 90 01 00 14 */ stw r0, 0x14(r1) +/* 000181A4 00024F34 7C 7E 1B 78 */ mr r30, r3 +/* 000181A8 00024F38 3B E0 00 00 */ li r31, 0x0 +/* 000181AC 00024F3C 38 7E 00 0C */ addi r3, r30, 0xc +/* 000181B0 00024F40 48 00 00 01 */ bl bEndianSwap16__FPv +/* 000181B4 00024F44 48 01 81 CC */ b .text+0x181CC +/* 000181B8 00024F48 1C 7F 00 18 */ mulli r3, r31, 0x18 +/* 000181BC 00024F4C 3B FF 00 01 */ addi r31, r31, 0x1 +/* 000181C0 00024F50 38 63 00 20 */ addi r3, r3, 0x20 +/* 000181C4 00024F54 7C 7E 1A 14 */ add r3, r30, r3 +/* 000181C8 00024F58 48 01 81 41 */ bl .text+0x18140 +/* 000181CC 00024F5C A8 1E 00 0C */ lha r0, 0xc(r30) +/* 000181D0 00024F60 7C 1F 00 00 */ cmpw r31, r0 +/* 000181D4 00024F64 41 80 81 B8 */ blt .L_0001038C +/* 000181D8 00024F68 80 01 00 14 */ lwz r0, 0x14(r1) +/* 000181DC 00024F6C 7C 08 03 A6 */ mtlr r0 +/* 000181E0 00024F70 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 000181E4 00024F74 38 21 00 10 */ addi r1, r1, 0x10 +/* 000181E8 00024F78 4E 80 00 20 */ blr +.endfn PlatEndianSwap__13ICEShakeTrack + +# .text:0x181EC | size: 0xC4 +.fn __10ICEManager, global +/* 000181EC 00024F7C 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 000181F0 00024F80 7C 08 02 A6 */ mflr r0 +/* 000181F4 00024F84 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 000181F8 00024F88 90 01 00 1C */ stw r0, 0x1c(r1) +.L_000181FC: +/* 000181FC 00024F8C 3D 20 00 00 */ lis r9, .rodata+0xDE8@ha +/* 00018200 00024F90 7C 7E 1B 78 */ mr r30, r3 +/* 00018204 00024F94 3B A0 00 00 */ li r29, 0x0 +/* 00018208 00024F98 C0 09 0D E8 */ lfs f0, .rodata+0xDE8@l(r9) +/* 0001820C 00024F9C 38 00 00 03 */ li r0, 0x3 +/* 00018210 00024FA0 93 BE 00 28 */ stw r29, 0x28(r30) +.L_00018214: +/* 00018214 00024FA4 93 BE 00 2C */ stw r29, 0x2c(r30) +/* 00018218 00024FA8 3C 60 00 00 */ lis r3, .rodata@ha +/* 0001821C 00024FAC 93 BE 00 30 */ stw r29, 0x30(r30) +/* 00018220 00024FB0 38 63 00 00 */ addi r3, r3, .rodata@l +/* 00018224 00024FB4 93 BE 00 34 */ stw r29, 0x34(r30) +/* 00018228 00024FB8 93 BE 00 38 */ stw r29, 0x38(r30) +/* 0001822C 00024FBC 93 BE 00 4C */ stw r29, 0x4c(r30) +/* 00018230 00024FC0 93 BE 00 3C */ stw r29, 0x3c(r30) +/* 00018234 00024FC4 93 BE 00 40 */ stw r29, 0x40(r30) +/* 00018238 00024FC8 93 BE 00 48 */ stw r29, 0x48(r30) +/* 0001823C 00024FCC 93 BE 00 14 */ stw r29, 0x14(r30) +/* 00018240 00024FD0 93 BE 00 18 */ stw r29, 0x18(r30) +/* 00018244 00024FD4 93 BE 00 1C */ stw r29, 0x1c(r30) +/* 00018248 00024FD8 93 BE 00 20 */ stw r29, 0x20(r30) +/* 0001824C 00024FDC 93 BE 00 00 */ stw r29, 0x0(r30) +/* 00018250 00024FE0 93 BE 00 04 */ stw r29, 0x4(r30) +/* 00018254 00024FE4 93 BE 00 08 */ stw r29, 0x8(r30) +/* 00018258 00024FE8 93 BE 00 0C */ stw r29, 0xc(r30) +/* 0001825C 00024FEC 93 BE 00 10 */ stw r29, 0x10(r30) +.L_00018260: +/* 00018260 00024FF0 90 1E 00 44 */ stw r0, 0x44(r30) +/* 00018264 00024FF4 D0 1E 00 5C */ stfs f0, 0x5c(r30) +/* 00018268 00024FF8 D0 1E 00 50 */ stfs f0, 0x50(r30) +/* 0001826C 00024FFC D0 1E 00 54 */ stfs f0, 0x54(r30) +/* 00018270 00025000 D0 1E 00 58 */ stfs f0, 0x58(r30) +/* 00018274 00025004 48 00 00 01 */ bl bStringHash__FPCc +/* 00018278 00025008 9B BE 00 64 */ stb r29, 0x64(r30) +/* 0001827C 0002500C 93 BE 00 24 */ stw r29, 0x24(r30) +/* 00018280 00025010 90 7E 00 60 */ stw r3, 0x60(r30) +/* 00018284 00025014 48 01 72 8D */ bl .text+0x1728C +/* 00018288 00025018 38 00 FF FF */ li r0, -0x1 +/* 0001828C 0002501C 93 BE 00 7C */ stw r29, 0x7c(r30) +/* 00018290 00025020 90 1E 00 78 */ stw r0, 0x78(r30) +/* 00018294 00025024 7F C3 F3 78 */ mr r3, r30 +/* 00018298 00025028 93 BE 00 74 */ stw r29, 0x74(r30) +/* 0001829C 0002502C 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 000182A0 00025030 7C 08 03 A6 */ mtlr r0 +/* 000182A4 00025034 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 000182A8 00025038 38 21 00 18 */ addi r1, r1, 0x18 +/* 000182AC 0002503C 4E 80 00 20 */ blr +.endfn __10ICEManager + +# .text:0x182B0 | size: 0x5C +# ICEManager::GetTimerSeconds +.fn GetTimerSeconds__10ICEManager, global +/* 000182B0 00025040 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 000182B4 00025044 80 03 00 7C */ lwz r0, 0x7c(r3) +/* 000182B8 00025048 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000182BC 0002504C 40 82 82 CC */ bne .L_00010588 +/* 000182C0 00025050 3D 20 00 00 */ lis r9, WorldTimer@ha +/* 000182C4 00025054 80 09 00 00 */ lwz r0, WorldTimer@l(r9) +/* 000182C8 00025058 48 01 82 D4 */ b .text+0x182D4 +/* 000182CC 0002505C 3D 20 00 00 */ lis r9, RealTimer@ha +/* 000182D0 00025060 80 09 00 00 */ lwz r0, RealTimer@l(r9) +/* 000182D4 00025064 6C 00 80 00 */ xoris r0, r0, 0x8000 +/* 000182D8 00025068 90 01 00 0C */ stw r0, 0xc(r1) +/* 000182DC 0002506C 3D 60 43 30 */ lis r11, 0x4330 +/* 000182E0 00025070 3D 40 00 00 */ lis r10, .rodata+0xDF0@ha +/* 000182E4 00025074 3D 00 00 00 */ lis r8, .rodata+0xDF8@ha +/* 000182E8 00025078 91 61 00 08 */ stw r11, 0x8(r1) +/* 000182EC 0002507C C8 0A 0D F0 */ lfd f0, .rodata+0xDF0@l(r10) +/* 000182F0 00025080 C8 21 00 08 */ lfd f1, 0x8(r1) +/* 000182F4 00025084 C1 A8 0D F8 */ lfs f13, .rodata+0xDF8@l(r8) +/* 000182F8 00025088 FC 21 00 28 */ fsub f1, f1, f0 +/* 000182FC 0002508C FC 20 08 18 */ frsp f1, f1 +/* 00018300 00025090 EC 21 03 72 */ fmuls f1, f1, f13 +/* 00018304 00025094 38 21 00 10 */ addi r1, r1, 0x10 +/* 00018308 00025098 4E 80 00 20 */ blr +.endfn GetTimerSeconds__10ICEManager + +# .text:0x1830C | size: 0x8 +# ICEManager::RefreshCameraSplines +.fn RefreshCameraSplines__10ICEManager, global +/* 0001830C 0002509C 38 60 00 00 */ li r3, 0x0 +/* 00018310 000250A0 4E 80 00 20 */ blr +.endfn RefreshCameraSplines__10ICEManager + +# .text:0x18314 | size: 0x4 +# ICEManager::Update +.fn Update__10ICEManager, global +/* 00018314 000250A4 4E 80 00 20 */ blr +.endfn Update__10ICEManager + +# .text:0x18318 | size: 0x40 +.fn GetNisCameraGroup__10ICEManagerUi, global +/* 00018318 000250A8 80 03 00 14 */ lwz r0, 0x14(r3) +/* 0001831C 000250AC 39 60 00 00 */ li r11, 0x0 +/* 00018320 000250B0 7C 0B 00 00 */ cmpw r11, r0 +/* 00018324 000250B4 40 80 83 50 */ bge .L_00010674 +/* 00018328 000250B8 81 43 00 00 */ lwz r10, 0x0(r3) +/* 0001832C 000250BC 7C 08 03 78 */ mr r8, r0 +/* 00018330 000250C0 1D 2B 00 14 */ mulli r9, r11, 0x14 +/* 00018334 000250C4 7C 09 50 2E */ lwzx r0, r9, r10 +/* 00018338 000250C8 7C 69 52 14 */ add r3, r9, r10 +/* 0001833C 000250CC 7C 04 00 00 */ cmpw r4, r0 +/* 00018340 000250D0 4D 82 00 20 */ beqlr +/* 00018344 000250D4 39 6B 00 01 */ addi r11, r11, 0x1 +/* 00018348 000250D8 7C 0B 40 00 */ cmpw r11, r8 +/* 0001834C 000250DC 41 80 83 30 */ blt .L_0001067C +/* 00018350 000250E0 38 60 00 00 */ li r3, 0x0 +/* 00018354 000250E4 4E 80 00 20 */ blr +.endfn GetNisCameraGroup__10ICEManagerUi + +# .text:0x18358 | size: 0x40 +.fn GetFmvCameraGroup__10ICEManagerUi, global +/* 00018358 000250E8 80 03 00 18 */ lwz r0, 0x18(r3) +/* 0001835C 000250EC 39 60 00 00 */ li r11, 0x0 +/* 00018360 000250F0 7C 0B 00 00 */ cmpw r11, r0 +/* 00018364 000250F4 40 80 83 90 */ bge .L_000106F4 +/* 00018368 000250F8 81 43 00 04 */ lwz r10, 0x4(r3) +/* 0001836C 000250FC 7C 08 03 78 */ mr r8, r0 +/* 00018370 00025100 1D 2B 00 14 */ mulli r9, r11, 0x14 +/* 00018374 00025104 7C 09 50 2E */ lwzx r0, r9, r10 +/* 00018378 00025108 7C 69 52 14 */ add r3, r9, r10 +.L_0001837C: +/* 0001837C 0002510C 7C 04 00 00 */ cmpw r4, r0 +/* 00018380 00025110 4D 82 00 20 */ beqlr +/* 00018384 00025114 39 6B 00 01 */ addi r11, r11, 0x1 +/* 00018388 00025118 7C 0B 40 00 */ cmpw r11, r8 +/* 0001838C 0002511C 41 80 83 70 */ blt .L_000106FC +/* 00018390 00025120 38 60 00 00 */ li r3, 0x0 +/* 00018394 00025124 4E 80 00 20 */ blr +.endfn GetFmvCameraGroup__10ICEManagerUi + +# .text:0x18398 | size: 0x40 +.fn GetReplayCameraGroup__10ICEManagerUi, global +/* 00018398 00025128 80 03 00 1C */ lwz r0, 0x1c(r3) +.L_0001839C: +/* 0001839C 0002512C 39 60 00 00 */ li r11, 0x0 +.L_000183A0: +/* 000183A0 00025130 7C 0B 00 00 */ cmpw r11, r0 +/* 000183A4 00025134 40 80 83 D0 */ bge .L_00010774 +.L_000183A8: +/* 000183A8 00025138 81 43 00 08 */ lwz r10, 0x8(r3) +/* 000183AC 0002513C 7C 08 03 78 */ mr r8, r0 +/* 000183B0 00025140 1D 2B 00 14 */ mulli r9, r11, 0x14 +/* 000183B4 00025144 7C 09 50 2E */ lwzx r0, r9, r10 +/* 000183B8 00025148 7C 69 52 14 */ add r3, r9, r10 +/* 000183BC 0002514C 7C 04 00 00 */ cmpw r4, r0 +/* 000183C0 00025150 4D 82 00 20 */ beqlr +/* 000183C4 00025154 39 6B 00 01 */ addi r11, r11, 0x1 +/* 000183C8 00025158 7C 0B 40 00 */ cmpw r11, r8 +/* 000183CC 0002515C 41 80 83 B0 */ blt .L_0001077C +/* 000183D0 00025160 38 60 00 00 */ li r3, 0x0 +/* 000183D4 00025164 4E 80 00 20 */ blr +.endfn GetReplayCameraGroup__10ICEManagerUi + +# .text:0x183D8 | size: 0x40 +.fn GetGenericCameraGroup__10ICEManagerUi, global +/* 000183D8 00025168 80 03 00 20 */ lwz r0, 0x20(r3) +/* 000183DC 0002516C 39 60 00 00 */ li r11, 0x0 +/* 000183E0 00025170 7C 0B 00 00 */ cmpw r11, r0 +/* 000183E4 00025174 40 80 84 10 */ bge .L_000107F4 +/* 000183E8 00025178 81 43 00 0C */ lwz r10, 0xc(r3) +/* 000183EC 0002517C 7C 08 03 78 */ mr r8, r0 +.L_000183F0: +/* 000183F0 00025180 1D 2B 00 14 */ mulli r9, r11, 0x14 +/* 000183F4 00025184 7C 09 50 2E */ lwzx r0, r9, r10 +/* 000183F8 00025188 7C 69 52 14 */ add r3, r9, r10 +/* 000183FC 0002518C 7C 04 00 00 */ cmpw r4, r0 +.L_00018400: +/* 00018400 00025190 4D 82 00 20 */ beqlr +/* 00018404 00025194 39 6B 00 01 */ addi r11, r11, 0x1 +/* 00018408 00025198 7C 0B 40 00 */ cmpw r11, r8 +/* 0001840C 0002519C 41 80 83 F0 */ blt .L_000107FC +.L_00018410: +/* 00018410 000251A0 38 60 00 00 */ li r3, 0x0 +/* 00018414 000251A4 4E 80 00 20 */ blr +.endfn GetGenericCameraGroup__10ICEManagerUi + +# .text:0x18418 | size: 0x8C +.fn GetShakeTrack__10ICEManagerUi, global +/* 00018418 000251A8 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0001841C 000251AC 7C 08 02 A6 */ mflr r0 +/* 00018420 000251B0 BF 81 00 08 */ stmw r28, 0x8(r1) +/* 00018424 000251B4 90 01 00 1C */ stw r0, 0x1c(r1) +/* 00018428 000251B8 7C 7D 1B 78 */ mr r29, r3 +/* 0001842C 000251BC 7C 9C 23 79 */ mr. r28, r4 +/* 00018430 000251C0 41 82 84 8C */ beq .L_000108BC +.L_00018434: +/* 00018434 000251C4 80 7D 00 10 */ lwz r3, 0x10(r29) +/* 00018438 000251C8 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0001843C 000251CC 41 82 84 8C */ beq .L_000108C8 +/* 00018440 000251D0 80 03 00 00 */ lwz r0, 0x0(r3) +/* 00018444 000251D4 3B C0 00 00 */ li r30, 0x0 +/* 00018448 000251D8 7C 1E 00 00 */ cmpw r30, r0 +/* 0001844C 000251DC 40 80 84 8C */ bge .L_000108D8 +/* 00018450 000251E0 7F C4 F3 78 */ mr r4, r30 +/* 00018454 000251E4 48 01 7D ED */ bl .text+0x17DEC +/* 00018458 000251E8 7C 7F 1B 79 */ mr. r31, r3 +/* 0001845C 000251EC 41 82 84 78 */ beq .L_000108D4 +/* 00018460 000251F0 38 7F 00 0F */ addi r3, r31, 0xf +/* 00018464 000251F4 48 00 00 01 */ bl bStringHash__FPCc +/* 00018468 000251F8 7C 03 E0 00 */ cmpw r3, r28 +/* 0001846C 000251FC 40 82 84 78 */ bne .L_000108E4 +/* 00018470 00025200 7F E3 FB 78 */ mr r3, r31 +/* 00018474 00025204 48 01 84 90 */ b .text+0x18490 +/* 00018478 00025208 80 7D 00 10 */ lwz r3, 0x10(r29) +/* 0001847C 0002520C 3B DE 00 01 */ addi r30, r30, 0x1 +/* 00018480 00025210 80 03 00 00 */ lwz r0, 0x0(r3) +/* 00018484 00025214 7C 1E 00 00 */ cmpw r30, r0 +/* 00018488 00025218 41 80 84 50 */ blt .L_000108D8 +.L_0001848C: +/* 0001848C 0002521C 38 60 00 00 */ li r3, 0x0 +/* 00018490 00025220 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 00018494 00025224 7C 08 03 A6 */ mtlr r0 +/* 00018498 00025228 BB 81 00 08 */ lmw r28, 0x8(r1) +/* 0001849C 0002522C 38 21 00 18 */ addi r1, r1, 0x18 +/* 000184A0 00025230 4E 80 00 20 */ blr +.endfn GetShakeTrack__10ICEManagerUi + +# .text:0x184A4 | size: 0x30 +.fn GetCameraIndex__10ICEManagerfP8ICETrack, global +/* 000184A4 00025234 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 000184A8 00025238 7C 08 02 A6 */ mflr r0 +/* 000184AC 0002523C 90 01 00 0C */ stw r0, 0xc(r1) +/* 000184B0 00025240 7C 84 23 79 */ mr. r4, r4 +/* 000184B4 00025244 38 60 00 00 */ li r3, 0x0 +/* 000184B8 00025248 41 82 84 C4 */ beq .L_0001097C +/* 000184BC 0002524C 7C 83 23 78 */ mr r3, r4 +/* 000184C0 00025250 48 01 7E A9 */ bl .text+0x17EA8 +/* 000184C4 00025254 80 01 00 0C */ lwz r0, 0xc(r1) +/* 000184C8 00025258 7C 08 03 A6 */ mtlr r0 +/* 000184CC 0002525C 38 21 00 08 */ addi r1, r1, 0x8 +/* 000184D0 00025260 4E 80 00 20 */ blr +.endfn GetCameraIndex__10ICEManagerfP8ICETrack + +# .text:0x184D4 | size: 0x80 +# ICEManager::GetParameter +.fn GetParameter__10ICEManager, global +/* 000184D4 00025264 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 000184D8 00025268 7C 08 02 A6 */ mflr r0 +/* 000184DC 0002526C F3 E1 00 10 */ psq_st f31, 0x10(r1), 0, qr0 +/* 000184E0 00025270 93 E1 00 0C */ stw r31, 0xc(r1) +/* 000184E4 00025274 90 01 00 1C */ stw r0, 0x1c(r1) +/* 000184E8 00025278 3D 20 00 00 */ lis r9, .rodata+0xDFC@ha +/* 000184EC 0002527C 7C 7F 1B 78 */ mr r31, r3 +/* 000184F0 00025280 C3 E9 0D FC */ lfs f31, .rodata+0xDFC@l(r9) +/* 000184F4 00025284 48 01 9F D9 */ bl .text+0x19FD8 +/* 000184F8 00025288 7C 6B 1B 79 */ mr. r11, r3 +/* 000184FC 0002528C 41 82 85 38 */ beq .L_00010A34 +/* 00018500 00025290 C0 1F 00 58 */ lfs f0, 0x58(r31) +/* 00018504 00025294 FC 00 F8 00 */ fcmpu cr0, f0, f31 +/* 00018508 00025298 4C 62 03 82 */ cror un, eq, lt +/* 0001850C 0002529C 41 83 85 38 */ bso .L_00010A44 +/* 00018510 000252A0 81 2B 00 00 */ lwz r9, 0x0(r11) +/* 00018514 000252A4 A8 69 00 58 */ lha r3, 0x58(r9) +/* 00018518 000252A8 80 09 00 5C */ lwz r0, 0x5c(r9) +/* 0001851C 000252AC 7C 6B 1A 14 */ add r3, r11, r3 +/* 00018520 000252B0 7C 08 03 A6 */ mtlr r0 +/* 00018524 000252B4 4E 80 00 21 */ blrl +/* 00018528 000252B8 C0 1F 00 54 */ lfs f0, 0x54(r31) +/* 0001852C 000252BC C1 BF 00 58 */ lfs f13, 0x58(r31) +/* 00018530 000252C0 EC 21 00 28 */ fsubs f1, f1, f0 +/* 00018534 000252C4 EF E1 68 24 */ fdivs f31, f1, f13 +/* 00018538 000252C8 FC 20 F8 90 */ fmr f1, f31 +/* 0001853C 000252CC 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 00018540 000252D0 7C 08 03 A6 */ mtlr r0 +/* 00018544 000252D4 83 E1 00 0C */ lwz r31, 0xc(r1) +/* 00018548 000252D8 E3 E1 00 10 */ psq_l f31, 0x10(r1), 0, qr0 +/* 0001854C 000252DC 38 21 00 18 */ addi r1, r1, 0x18 +/* 00018550 000252E0 4E 80 00 20 */ blr +.endfn GetParameter__10ICEManager + +# .text:0x18554 | size: 0x44 +.fn GetParameter__10ICEManageriP8ICETrack, global +/* 00018554 000252E4 7C A5 2B 79 */ mr. r5, r5 +/* 00018558 000252E8 40 82 85 68 */ bne .L_00010AC0 +/* 0001855C 000252EC 3D 20 00 00 */ lis r9, .rodata+0xE00@ha +/* 00018560 000252F0 C0 29 0E 00 */ lfs f1, .rodata+0xE00@l(r9) +/* 00018564 000252F4 4E 80 00 20 */ blr +/* 00018568 000252F8 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0001856C 000252FC 41 80 85 5C */ blt .L_00010AC8 +/* 00018570 00025300 A8 05 00 14 */ lha r0, 0x14(r5) +/* 00018574 00025304 7C 04 00 00 */ cmpw r4, r0 +/* 00018578 00025308 41 80 85 88 */ blt .L_00010B00 +/* 0001857C 0002530C 3D 20 00 00 */ lis r9, .rodata+0xE04@ha +/* 00018580 00025310 C0 29 0E 04 */ lfs f1, .rodata+0xE04@l(r9) +/* 00018584 00025314 4E 80 00 20 */ blr +/* 00018588 00025318 1C 04 00 84 */ mulli r0, r4, 0x84 +/* 0001858C 0002531C 39 25 00 38 */ addi r9, r5, 0x38 +/* 00018590 00025320 7C 29 04 2E */ lfsx f1, r9, r0 +/* 00018594 00025324 4E 80 00 20 */ blr +.endfn GetParameter__10ICEManageriP8ICETrack + +# .text:0x18598 | size: 0x7C +.fn GetIntervalSize__10ICEManagerP7ICEDataP8ICETrack, global +/* 00018598 00025328 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 0001859C 0002532C 7C 08 02 A6 */ mflr r0 +/* 000185A0 00025330 F3 E1 00 18 */ psq_st f31, 0x18(r1), 0, qr0 +/* 000185A4 00025334 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 000185A8 00025338 90 01 00 24 */ stw r0, 0x24(r1) +/* 000185AC 0002533C 7C 7D 1B 78 */ mr r29, r3 +/* 000185B0 00025340 3B C0 00 00 */ li r30, 0x0 +/* 000185B4 00025344 7C BF 2B 79 */ mr. r31, r5 +/* 000185B8 00025348 41 82 85 D4 */ beq .L_00010B8C +.L_000185BC: +/* 000185BC 0002534C 39 24 FF D8 */ subi r9, r4, 0x28 +/* 000185C0 00025350 3C 00 3E 0F */ lis r0, 0x3e0f +/* 000185C4 00025354 7D 3F 48 50 */ subf r9, r31, r9 +/* 000185C8 00025358 60 00 83 E1 */ ori r0, r0, 0x83e1 +/* 000185CC 0002535C 7D 29 01 D6 */ mullw r9, r9, r0 +/* 000185D0 00025360 7D 3E 16 70 */ srawi r30, r9, 2 +/* 000185D4 00025364 7F A3 EB 78 */ mr r3, r29 +/* 000185D8 00025368 38 9E 00 01 */ addi r4, r30, 0x1 +/* 000185DC 0002536C 7F E5 FB 78 */ mr r5, r31 +/* 000185E0 00025370 48 01 85 55 */ bl .text+0x18554 +/* 000185E4 00025374 FF E0 08 90 */ fmr f31, f1 +/* 000185E8 00025378 7F A3 EB 78 */ mr r3, r29 +/* 000185EC 0002537C 7F C4 F3 78 */ mr r4, r30 +/* 000185F0 00025380 7F E5 FB 78 */ mr r5, r31 +/* 000185F4 00025384 48 01 85 55 */ bl .text+0x18554 +/* 000185F8 00025388 EC 3F 08 28 */ fsubs f1, f31, f1 +/* 000185FC 0002538C 80 01 00 24 */ lwz r0, 0x24(r1) +/* 00018600 00025390 7C 08 03 A6 */ mtlr r0 +/* 00018604 00025394 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 00018608 00025398 E3 E1 00 18 */ psq_l f31, 0x18(r1), 0, qr0 +/* 0001860C 0002539C 38 21 00 20 */ addi r1, r1, 0x20 +/* 00018610 000253A0 4E 80 00 20 */ blr +.endfn GetIntervalSize__10ICEManagerP7ICEDataP8ICETrack + +# .text:0x18614 | size: 0x5C +# ICEManager::ChooseGenericCamera +.fn ChooseGenericCamera__10ICEManager, global +/* 00018614 000253A4 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00018618 000253A8 7C 08 02 A6 */ mflr r0 +/* 0001861C 000253AC BF C1 00 08 */ stmw r30, 0x8(r1) +/* 00018620 000253B0 90 01 00 14 */ stw r0, 0x14(r1) +/* 00018624 000253B4 7C 7F 1B 78 */ mr r31, r3 +/* 00018628 000253B8 3B C0 00 00 */ li r30, 0x0 +/* 0001862C 000253BC 80 9F 00 60 */ lwz r4, 0x60(r31) +/* 00018630 000253C0 48 01 83 D9 */ bl .text+0x183D8 +/* 00018634 000253C4 7C 63 1B 79 */ mr. r3, r3 +/* 00018638 000253C8 41 82 86 58 */ beq .L_00010C90 +/* 0001863C 000253CC 38 9F 00 64 */ addi r4, r31, 0x64 +.L_00018640: +/* 00018640 000253D0 48 01 7D 09 */ bl .text+0x17D08 +/* 00018644 000253D4 7C 7E 1B 79 */ mr. r30, r3 +/* 00018648 000253D8 41 82 86 58 */ beq .L_00010CA0 +/* 0001864C 000253DC 7F E3 FB 78 */ mr r3, r31 +/* 00018650 000253E0 48 01 82 B1 */ bl .text+0x182B0 +/* 00018654 000253E4 D0 3E 00 0C */ stfs f1, 0xc(r30) +/* 00018658 000253E8 7F C3 F3 78 */ mr r3, r30 +/* 0001865C 000253EC 80 01 00 14 */ lwz r0, 0x14(r1) +/* 00018660 000253F0 7C 08 03 A6 */ mtlr r0 +/* 00018664 000253F4 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 00018668 000253F8 38 21 00 10 */ addi r1, r1, 0x10 +/* 0001866C 000253FC 4E 80 00 20 */ blr +.endfn ChooseGenericCamera__10ICEManager + +# .text:0x18670 | size: 0x3C +.fn GetNumSceneCameraTrack__10ICEManagerUi, global +/* 00018670 00025400 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 00018674 00025404 7C 08 02 A6 */ mflr r0 +/* 00018678 00025408 93 E1 00 0C */ stw r31, 0xc(r1) +/* 0001867C 0002540C 90 01 00 14 */ stw r0, 0x14(r1) +/* 00018680 00025410 48 01 83 19 */ bl .text+0x18318 +/* 00018684 00025414 3B E0 00 00 */ li r31, 0x0 +/* 00018688 00025418 7C 63 1B 79 */ mr. r3, r3 +.L_0001868C: +/* 0001868C 0002541C 41 82 86 94 */ beq .L_00010D20 +/* 00018690 00025420 83 E3 00 08 */ lwz r31, 0x8(r3) +/* 00018694 00025424 7F E3 FB 78 */ mr r3, r31 +/* 00018698 00025428 80 01 00 14 */ lwz r0, 0x14(r1) +/* 0001869C 0002542C 7C 08 03 A6 */ mtlr r0 +/* 000186A0 00025430 83 E1 00 0C */ lwz r31, 0xc(r1) +/* 000186A4 00025434 38 21 00 10 */ addi r1, r1, 0x10 +/* 000186A8 00025438 4E 80 00 20 */ blr +.endfn GetNumSceneCameraTrack__10ICEManagerUi + +# .text:0x186AC | size: 0x8C +# ICEManager::ChooseReplayCamera +.fn ChooseReplayCamera__10ICEManager, global +/* 000186AC 0002543C 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 000186B0 00025440 7C 08 02 A6 */ mflr r0 +/* 000186B4 00025444 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 000186B8 00025448 90 01 00 14 */ stw r0, 0x14(r1) +/* 000186BC 0002544C 7C 7F 1B 78 */ mr r31, r3 +/* 000186C0 00025450 3F C0 00 00 */ lis r30, .rodata+0xE08@ha +/* 000186C4 00025454 80 1F 00 24 */ lwz r0, 0x24(r31) +/* 000186C8 00025458 C0 3E 0E 08 */ lfs f1, .rodata+0xE08@l(r30) +/* 000186CC 0002545C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000186D0 00025460 41 82 86 EC */ beq .L_00010DBC +/* 000186D4 00025464 48 01 82 B1 */ bl .text+0x182B0 +/* 000186D8 00025468 81 3F 00 24 */ lwz r9, 0x24(r31) +/* 000186DC 0002546C C0 09 00 0C */ lfs f0, 0xc(r9) +/* 000186E0 00025470 C1 A9 00 10 */ lfs f13, 0x10(r9) +/* 000186E4 00025474 EC 21 00 28 */ fsubs f1, f1, f0 +/* 000186E8 00025478 EC 21 68 24 */ fdivs f1, f1, f13 +.L_000186EC: +/* 000186EC 0002547C C0 1E 0E 08 */ lfs f0, .rodata+0xE08@l(r30) +/* 000186F0 00025480 FC 01 00 00 */ fcmpu cr0, f1, f0 +/* 000186F4 00025484 41 80 87 24 */ blt .L_00010E18 +/* 000186F8 00025488 48 01 5F FD */ bl .text+0x15FFC +/* 000186FC 0002548C 80 9F 00 08 */ lwz r4, 0x8(r31) +/* 00018700 00025490 80 BF 00 1C */ lwz r5, 0x1c(r31) +.L_00018704: +/* 00018704 00025494 48 01 77 1D */ bl .text+0x1771C +/* 00018708 00025498 7C 63 1B 79 */ mr. r3, r3 +.L_0001870C: +/* 0001870C 0002549C 41 82 87 24 */ beq .L_00010E30 +/* 00018710 000254A0 90 7F 00 24 */ stw r3, 0x24(r31) +/* 00018714 000254A4 7F E3 FB 78 */ mr r3, r31 +/* 00018718 000254A8 48 01 82 B1 */ bl .text+0x182B0 +/* 0001871C 000254AC 81 3F 00 24 */ lwz r9, 0x24(r31) +/* 00018720 000254B0 D0 29 00 0C */ stfs f1, 0xc(r9) +/* 00018724 000254B4 80 01 00 14 */ lwz r0, 0x14(r1) +/* 00018728 000254B8 7C 08 03 A6 */ mtlr r0 +/* 0001872C 000254BC BB C1 00 08 */ lmw r30, 0x8(r1) +/* 00018730 000254C0 38 21 00 10 */ addi r1, r1, 0x10 +/* 00018734 000254C4 4E 80 00 20 */ blr +.endfn ChooseReplayCamera__10ICEManager + +# .text:0x18738 | size: 0x50 +.fn GetAnimElevationFixup__10ICEManagerPQ23ICE7Vector3, global +/* 00018738 000254C8 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 0001873C 000254CC 7C 08 02 A6 */ mflr r0 +/* 00018740 000254D0 93 E1 00 0C */ stw r31, 0xc(r1) +/* 00018744 000254D4 90 01 00 14 */ stw r0, 0x14(r1) +/* 00018748 000254D8 7C 7F 1B 78 */ mr r31, r3 +/* 0001874C 000254DC 7C 83 23 78 */ mr r3, r4 +/* 00018750 000254E0 48 01 9D 8D */ bl .text+0x19D8C +/* 00018754 000254E4 FC 00 08 90 */ fmr f0, f1 +/* 00018758 000254E8 3D 20 00 00 */ lis r9, .rodata+0xE0C@ha +/* 0001875C 000254EC C0 29 0E 0C */ lfs f1, .rodata+0xE0C@l(r9) +/* 00018760 000254F0 FC 00 08 00 */ fcmpu cr0, f0, f1 +/* 00018764 000254F4 4C 62 03 82 */ cror un, eq, lt +/* 00018768 000254F8 41 83 87 74 */ bso .L_00010EDC +/* 0001876C 000254FC C0 3F 00 50 */ lfs f1, 0x50(r31) +/* 00018770 00025500 EC 20 08 28 */ fsubs f1, f0, f1 +/* 00018774 00025504 80 01 00 14 */ lwz r0, 0x14(r1) +/* 00018778 00025508 7C 08 03 A6 */ mtlr r0 +/* 0001877C 0002550C 83 E1 00 0C */ lwz r31, 0xc(r1) +/* 00018780 00025510 38 21 00 10 */ addi r1, r1, 0x10 +/* 00018784 00025514 4E 80 00 20 */ blr +.endfn GetAnimElevationFixup__10ICEManagerPQ23ICE7Vector3 + +# .text:0x18788 | size: 0xF4 +.fn FixAnimElevation__10ICEManagerPQ23ICE7Vector3, global +/* 00018788 00025518 94 21 FF D8 */ stwu r1, -0x28(r1) +/* 0001878C 0002551C 7C 08 02 A6 */ mflr r0 +/* 00018790 00025520 BF 81 00 18 */ stmw r28, 0x18(r1) +/* 00018794 00025524 90 01 00 2C */ stw r0, 0x2c(r1) +/* 00018798 00025528 7C 7D 1B 78 */ mr r29, r3 +/* 0001879C 0002552C 7C 9C 23 78 */ mr r28, r4 +/* 000187A0 00025530 48 01 9F D9 */ bl .text+0x19FD8 +/* 000187A4 00025534 7C 7F 1B 79 */ mr. r31, r3 +/* 000187A8 00025538 41 82 88 68 */ beq .L_00011010 +/* 000187AC 0002553C 81 3F 00 00 */ lwz r9, 0x0(r31) +/* 000187B0 00025540 A8 69 00 20 */ lha r3, 0x20(r9) +/* 000187B4 00025544 80 09 00 24 */ lwz r0, 0x24(r9) +/* 000187B8 00025548 7C 7F 1A 14 */ add r3, r31, r3 +/* 000187BC 0002554C 7C 08 03 A6 */ mtlr r0 +/* 000187C0 00025550 4E 80 00 21 */ blrl +/* 000187C4 00025554 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000187C8 00025558 41 82 88 68 */ beq .L_00011030 +/* 000187CC 0002555C 3D 20 00 00 */ lis r9, .rodata+0xE10@ha +/* 000187D0 00025560 3B C1 00 08 */ addi r30, r1, 0x8 +/* 000187D4 00025564 C0 09 0E 10 */ lfs f0, .rodata+0xE10@l(r9) +/* 000187D8 00025568 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 000187DC 0002556C D0 01 00 0C */ stfs f0, 0xc(r1) +/* 000187E0 00025570 D0 1E 00 08 */ stfs f0, 0x8(r30) +/* 000187E4 00025574 D0 01 00 14 */ stfs f0, 0x14(r1) +/* 000187E8 00025578 81 3F 00 00 */ lwz r9, 0x0(r31) +/* 000187EC 0002557C 80 09 00 6C */ lwz r0, 0x6c(r9) +/* 000187F0 00025580 A8 69 00 68 */ lha r3, 0x68(r9) +/* 000187F4 00025584 7C 08 03 A6 */ mtlr r0 +/* 000187F8 00025588 7C 7F 1A 14 */ add r3, r31, r3 +/* 000187FC 0002558C 4E 80 00 21 */ blrl +/* 00018800 00025590 7C 64 1B 78 */ mr r4, r3 +/* 00018804 00025594 7F 85 E3 78 */ mr r5, r28 +/* 00018808 00025598 7F C3 F3 78 */ mr r3, r30 +/* 0001880C 0002559C 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 +/* 00018810 000255A0 80 1D 00 28 */ lwz r0, 0x28(r29) +/* 00018814 000255A4 39 20 00 01 */ li r9, 0x1 +/* 00018818 000255A8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0001881C 000255AC 40 81 88 24 */ ble .L_00011040 +/* 00018820 000255B0 39 20 00 00 */ li r9, 0x0 +/* 00018824 000255B4 2C 09 00 00 */ cmpwi r9, 0x0 +/* 00018828 000255B8 41 82 88 50 */ beq .L_00011078 +/* 0001882C 000255BC 81 3F 00 00 */ lwz r9, 0x0(r31) +/* 00018830 000255C0 A8 69 00 68 */ lha r3, 0x68(r9) +/* 00018834 000255C4 80 09 00 6C */ lwz r0, 0x6c(r9) +/* 00018838 000255C8 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001883C 000255CC 7C 08 03 A6 */ mtlr r0 +/* 00018840 000255D0 4E 80 00 21 */ blrl +/* 00018844 000255D4 38 63 00 30 */ addi r3, r3, 0x30 +/* 00018848 000255D8 48 01 9D 8D */ bl .text+0x19D8C +/* 0001884C 000255DC D0 3D 00 50 */ stfs f1, 0x50(r29) +/* 00018850 000255E0 7F A3 EB 78 */ mr r3, r29 +/* 00018854 000255E4 7F C4 F3 78 */ mr r4, r30 +/* 00018858 000255E8 48 01 87 39 */ bl .text+0x18738 +/* 0001885C 000255EC C0 1C 00 08 */ lfs f0, 0x8(r28) +/* 00018860 000255F0 EC 00 08 2A */ fadds f0, f0, f1 +/* 00018864 000255F4 D0 1C 00 08 */ stfs f0, 0x8(r28) +/* 00018868 000255F8 80 01 00 2C */ lwz r0, 0x2c(r1) +/* 0001886C 000255FC 7C 08 03 A6 */ mtlr r0 +/* 00018870 00025600 BB 81 00 18 */ lmw r28, 0x18(r1) +/* 00018874 00025604 38 21 00 28 */ addi r1, r1, 0x28 +.L_00018878: +/* 00018878 00025608 4E 80 00 20 */ blr +.endfn FixAnimElevation__10ICEManagerPQ23ICE7Vector3 + +# .text:0x1887C | size: 0x50 +.fn SetGenericCameraToPlay__10ICEManagerPCcT1, global +/* 0001887C 0002560C 94 21 FF E8 */ stwu r1, -0x18(r1) +.L_00018880: +/* 00018880 00025610 7C 08 02 A6 */ mflr r0 +/* 00018884 00025614 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 00018888 00025618 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0001888C 0002561C 7C 7E 1B 78 */ mr r30, r3 +.L_00018890: +/* 00018890 00025620 7C BD 2B 78 */ mr r29, r5 +/* 00018894 00025624 7C 83 23 78 */ mr r3, r4 +/* 00018898 00025628 48 00 00 01 */ bl StringHash32__6AttribPCc +/* 0001889C 0002562C 90 7E 00 60 */ stw r3, 0x60(r30) +/* 000188A0 00025630 7F A4 EB 78 */ mr r4, r29 +/* 000188A4 00025634 38 7E 00 64 */ addi r3, r30, 0x64 +/* 000188A8 00025638 38 A0 00 0D */ li r5, 0xd +/* 000188AC 0002563C 48 00 00 01 */ bl bStrNCpy__FPcPCci +/* 000188B0 00025640 38 00 00 00 */ li r0, 0x0 +/* 000188B4 00025644 98 1E 00 71 */ stb r0, 0x71(r30) +/* 000188B8 00025648 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 000188BC 0002564C 7C 08 03 A6 */ mtlr r0 +/* 000188C0 00025650 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 000188C4 00025654 38 21 00 18 */ addi r1, r1, 0x18 +/* 000188C8 00025658 4E 80 00 20 */ blr +.endfn SetGenericCameraToPlay__10ICEManagerPCcT1 + +# .text:0x188CC | size: 0x80 +.fn GetCameraData__10ICEManagerUii, global +/* 000188CC 0002565C 94 21 FF D8 */ stwu r1, -0x28(r1) +/* 000188D0 00025660 7C 08 02 A6 */ mflr r0 +/* 000188D4 00025664 BF A1 00 1C */ stmw r29, 0x1c(r1) +/* 000188D8 00025668 90 01 00 2C */ stw r0, 0x2c(r1) +.L_000188DC: +/* 000188DC 0002566C 7C 7D 1B 78 */ mr r29, r3 +/* 000188E0 00025670 7C BF 2B 78 */ mr r31, r5 +/* 000188E4 00025674 48 01 83 19 */ bl .text+0x18318 +/* 000188E8 00025678 7C 7E 1B 79 */ mr. r30, r3 +/* 000188EC 0002567C 41 82 89 34 */ beq .L_00011220 +/* 000188F0 00025680 3C 80 00 00 */ lis r4, .rodata+0xE14@ha +/* 000188F4 00025684 7F E5 FB 78 */ mr r5, r31 +/* 000188F8 00025688 38 84 0E 14 */ addi r4, r4, .rodata+0xE14@l +/* 000188FC 0002568C 38 61 00 08 */ addi r3, r1, 0x8 +/* 00018900 00025690 4C C6 31 82 */ crclr cr1eq +/* 00018904 00025694 48 00 00 01 */ bl bSPrintf__FPcPCce +/* 00018908 00025698 7F C3 F3 78 */ mr r3, r30 +/* 0001890C 0002569C 38 81 00 08 */ addi r4, r1, 0x8 +/* 00018910 000256A0 48 01 7D 09 */ bl .text+0x17D08 +/* 00018914 000256A4 90 7D 00 24 */ stw r3, 0x24(r29) +/* 00018918 000256A8 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0001891C 000256AC 41 82 89 34 */ beq .L_00011250 +/* 00018920 000256B0 38 80 00 00 */ li r4, 0x0 +/* 00018924 000256B4 38 A0 00 00 */ li r5, 0x0 +/* 00018928 000256B8 38 C0 00 00 */ li r6, 0x0 +/* 0001892C 000256BC 48 01 80 19 */ bl .text+0x18018 +/* 00018930 000256C0 48 01 89 38 */ b .text+0x18938 +/* 00018934 000256C4 38 60 00 00 */ li r3, 0x0 +/* 00018938 000256C8 80 01 00 2C */ lwz r0, 0x2c(r1) +/* 0001893C 000256CC 7C 08 03 A6 */ mtlr r0 +.L_00018940: +/* 00018940 000256D0 BB A1 00 1C */ lmw r29, 0x1c(r1) +/* 00018944 000256D4 38 21 00 28 */ addi r1, r1, 0x28 +/* 00018948 000256D8 4E 80 00 20 */ blr +.endfn GetCameraData__10ICEManagerUii + +# .text:0x1894C | size: 0x50 +.fn GetCameraData__10ICEManagerPP8ICETrackPfT2, global +/* 0001894C 000256DC 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 00018950 000256E0 7C 08 02 A6 */ mflr r0 +/* 00018954 000256E4 90 01 00 0C */ stw r0, 0xc(r1) +/* 00018958 000256E8 7C 84 23 79 */ mr. r4, r4 +/* 0001895C 000256EC 41 82 89 68 */ beq .L_000112C4 +/* 00018960 000256F0 80 03 00 24 */ lwz r0, 0x24(r3) +/* 00018964 000256F4 90 04 00 00 */ stw r0, 0x0(r4) +/* 00018968 000256F8 80 03 00 24 */ lwz r0, 0x24(r3) +/* 0001896C 000256FC 38 60 00 00 */ li r3, 0x0 +/* 00018970 00025700 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00018974 00025704 41 82 89 8C */ beq .L_00011300 +/* 00018978 00025708 7C A4 2B 78 */ mr r4, r5 +/* 0001897C 0002570C 7C 03 03 78 */ mr r3, r0 +/* 00018980 00025710 7C C5 33 78 */ mr r5, r6 +/* 00018984 00025714 38 C0 00 00 */ li r6, 0x0 +/* 00018988 00025718 48 01 80 19 */ bl .text+0x18018 +/* 0001898C 0002571C 80 01 00 0C */ lwz r0, 0xc(r1) +/* 00018990 00025720 7C 08 03 A6 */ mtlr r0 +/* 00018994 00025724 38 21 00 08 */ addi r1, r1, 0x8 +/* 00018998 00025728 4E 80 00 20 */ blr +.endfn GetCameraData__10ICEManagerPP8ICETrackPfT2 + +# .text:0x1899C | size: 0x80 +.fn GetNeighbour__10ICEManagerP7ICEDataiP8ICETrack, global +/* 0001899C 0002572C 7C C6 33 79 */ mr. r6, r6 +/* 000189A0 00025730 40 82 89 AC */ bne .L_0001134C +/* 000189A4 00025734 38 60 00 00 */ li r3, 0x0 +/* 000189A8 00025738 4E 80 00 20 */ blr +/* 000189AC 0002573C 39 24 FF D8 */ subi r9, r4, 0x28 +/* 000189B0 00025740 3C 00 3E 0F */ lis r0, 0x3e0f +/* 000189B4 00025744 60 00 83 E1 */ ori r0, r0, 0x83e1 +/* 000189B8 00025748 7D 26 48 50 */ subf r9, r6, r9 +/* 000189BC 0002574C 7D 29 01 D6 */ mullw r9, r9, r0 +/* 000189C0 00025750 2C 05 00 00 */ cmpwi r5, 0x0 +/* 000189C4 00025754 7D 24 16 70 */ srawi r4, r9, 2 +/* 000189C8 00025758 38 04 FF FF */ subi r0, r4, 0x1 +/* 000189CC 0002575C 41 82 89 D4 */ beq .L_000113A0 +/* 000189D0 00025760 38 04 00 01 */ addi r0, r4, 0x1 +/* 000189D4 00025764 A9 26 00 14 */ lha r9, 0x14(r6) +/* 000189D8 00025768 39 60 00 00 */ li r11, 0x0 +/* 000189DC 0002576C 7C 0B 00 00 */ cmpw r11, r0 +/* 000189E0 00025770 39 29 FF FF */ subi r9, r9, 0x1 +/* 000189E4 00025774 40 80 89 EC */ bge .L_000113D0 +/* 000189E8 00025778 7C 0B 03 78 */ mr r11, r0 +/* 000189EC 0002577C 7D 6A 5B 78 */ mr r10, r11 +/* 000189F0 00025780 7D 0B 48 51 */ subf. r8, r11, r9 +/* 000189F4 00025784 40 80 89 FC */ bge .L_000113F0 +/* 000189F8 00025788 7D 2A 4B 78 */ mr r10, r9 +/* 000189FC 0002578C 7C 00 50 00 */ cmpw r0, r10 +/* 00018A00 00025790 40 82 8A 14 */ bne .L_00011414 +/* 00018A04 00025794 1D 20 00 84 */ mulli r9, r0, 0x84 +.L_00018A08: +/* 00018A08 00025798 39 29 00 28 */ addi r9, r9, 0x28 +/* 00018A0C 0002579C 7C 66 4A 14 */ add r3, r6, r9 +/* 00018A10 000257A0 4E 80 00 20 */ blr +/* 00018A14 000257A4 38 60 00 00 */ li r3, 0x0 +/* 00018A18 000257A8 4E 80 00 20 */ blr +.endfn GetNeighbour__10ICEManagerP7ICEDataiP8ICETrack + +# .text:0x18A1C | size: 0x94 +.fn GetCameraGroup__10ICEManager10ICEContextUi, global +/* 00018A1C 000257AC 2C 04 00 01 */ cmpwi r4, 0x1 +/* 00018A20 000257B0 39 00 00 00 */ li r8, 0x0 +/* 00018A24 000257B4 39 40 00 00 */ li r10, 0x0 +/* 00018A28 000257B8 41 82 8A 5C */ beq .L_00011484 +/* 00018A2C 000257BC 41 81 8A 3C */ bgt .L_00011468 +/* 00018A30 000257C0 2C 04 00 00 */ cmpwi r4, 0x0 +/* 00018A34 000257C4 41 82 8A 50 */ beq .L_00011484 +/* 00018A38 000257C8 48 01 8A 7C */ b .text+0x18A7C +/* 00018A3C 000257CC 2C 04 00 02 */ cmpwi r4, 0x2 +/* 00018A40 000257D0 41 82 8A 68 */ beq .L_000114A8 +/* 00018A44 000257D4 2C 04 00 03 */ cmpwi r4, 0x3 +/* 00018A48 000257D8 41 82 8A 74 */ beq .L_000114BC +/* 00018A4C 000257DC 48 01 8A 7C */ b .text+0x18A7C +/* 00018A50 000257E0 81 03 00 14 */ lwz r8, 0x14(r3) +/* 00018A54 000257E4 81 43 00 00 */ lwz r10, 0x0(r3) +/* 00018A58 000257E8 48 01 8A 7C */ b .text+0x18A7C +/* 00018A5C 000257EC 81 03 00 18 */ lwz r8, 0x18(r3) +/* 00018A60 000257F0 81 43 00 04 */ lwz r10, 0x4(r3) +/* 00018A64 000257F4 48 01 8A 7C */ b .text+0x18A7C +/* 00018A68 000257F8 81 03 00 1C */ lwz r8, 0x1c(r3) +/* 00018A6C 000257FC 81 43 00 08 */ lwz r10, 0x8(r3) +/* 00018A70 00025800 48 01 8A 7C */ b .text+0x18A7C +/* 00018A74 00025804 81 03 00 20 */ lwz r8, 0x20(r3) +/* 00018A78 00025808 81 43 00 0C */ lwz r10, 0xc(r3) +/* 00018A7C 0002580C 39 60 00 00 */ li r11, 0x0 +/* 00018A80 00025810 7C 0B 40 00 */ cmpw r11, r8 +/* 00018A84 00025814 40 80 8A A8 */ bge .L_0001152C +/* 00018A88 00025818 1D 2B 00 14 */ mulli r9, r11, 0x14 +/* 00018A8C 0002581C 7C 0A 48 2E */ lwzx r0, r10, r9 +/* 00018A90 00025820 7C 6A 4A 14 */ add r3, r10, r9 +/* 00018A94 00025824 7C 05 00 00 */ cmpw r5, r0 +.L_00018A98: +/* 00018A98 00025828 4D 82 00 20 */ beqlr +/* 00018A9C 0002582C 39 6B 00 01 */ addi r11, r11, 0x1 +/* 00018AA0 00025830 7C 0B 40 00 */ cmpw r11, r8 +/* 00018AA4 00025834 41 80 8A 88 */ blt .L_0001152C +/* 00018AA8 00025838 38 60 00 00 */ li r3, 0x0 +/* 00018AAC 0002583C 4E 80 00 20 */ blr +.endfn GetCameraGroup__10ICEManager10ICEContextUi + +# .text:0x18AB0 | size: 0x104 +.fn AddCameraGroup__10ICEManager10ICEContextUi, global +/* 00018AB0 00025840 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 00018AB4 00025844 7C 08 02 A6 */ mflr r0 +/* 00018AB8 00025848 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 00018ABC 0002584C 90 01 00 1C */ stw r0, 0x1c(r1) +/* 00018AC0 00025850 7C 7F 1B 78 */ mr r31, r3 +/* 00018AC4 00025854 7C 9E 23 78 */ mr r30, r4 +/* 00018AC8 00025858 7C BD 2B 78 */ mr r29, r5 +/* 00018ACC 0002585C 48 01 8A 1D */ bl .text+0x18A1C +/* 00018AD0 00025860 7C 69 1B 79 */ mr. r9, r3 +/* 00018AD4 00025864 41 82 8A E0 */ beq .L_000115B4 +/* 00018AD8 00025868 7D 23 4B 78 */ mr r3, r9 +/* 00018ADC 0002586C 48 01 8B A0 */ b .text+0x18BA0 +/* 00018AE0 00025870 2C 1E 00 01 */ cmpwi r30, 0x1 +/* 00018AE4 00025874 41 82 8B 2C */ beq .L_00011610 +/* 00018AE8 00025878 41 81 8A F8 */ bgt .L_000115E0 +/* 00018AEC 0002587C 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 00018AF0 00025880 41 82 8B 0C */ beq .L_000115FC +/* 00018AF4 00025884 48 01 8A D8 */ b .text+0x18AD8 +/* 00018AF8 00025888 2C 1E 00 02 */ cmpwi r30, 0x2 +/* 00018AFC 0002588C 41 82 8B 4C */ beq .L_00011648 +/* 00018B00 00025890 2C 1E 00 03 */ cmpwi r30, 0x3 +/* 00018B04 00025894 41 82 8B 6C */ beq .L_00011670 +/* 00018B08 00025898 48 01 8A D8 */ b .text+0x18AD8 +/* 00018B0C 0002589C 81 5F 00 14 */ lwz r10, 0x14(r31) +/* 00018B10 000258A0 2C 0A 00 FF */ cmpwi r10, 0xff +/* 00018B14 000258A4 41 81 8B 78 */ bgt .L_0001168C +/* 00018B18 000258A8 1D 6A 00 14 */ mulli r11, r10, 0x14 +/* 00018B1C 000258AC 81 3F 00 00 */ lwz r9, 0x0(r31) +/* 00018B20 000258B0 38 0A 00 01 */ addi r0, r10, 0x1 +/* 00018B24 000258B4 90 1F 00 14 */ stw r0, 0x14(r31) +/* 00018B28 000258B8 48 01 8B 90 */ b .text+0x18B90 +/* 00018B2C 000258BC 81 5F 00 18 */ lwz r10, 0x18(r31) +/* 00018B30 000258C0 2C 0A 00 09 */ cmpwi r10, 0x9 +/* 00018B34 000258C4 41 81 8B 78 */ bgt .L_000116AC +/* 00018B38 000258C8 1D 6A 00 14 */ mulli r11, r10, 0x14 +/* 00018B3C 000258CC 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 00018B40 000258D0 38 0A 00 01 */ addi r0, r10, 0x1 +/* 00018B44 000258D4 90 1F 00 18 */ stw r0, 0x18(r31) +/* 00018B48 000258D8 48 01 8B 90 */ b .text+0x18B90 +/* 00018B4C 000258DC 81 5F 00 1C */ lwz r10, 0x1c(r31) +/* 00018B50 000258E0 2C 0A 00 31 */ cmpwi r10, 0x31 +/* 00018B54 000258E4 41 81 8B 78 */ bgt .L_000116CC +/* 00018B58 000258E8 1D 6A 00 14 */ mulli r11, r10, 0x14 +/* 00018B5C 000258EC 81 3F 00 08 */ lwz r9, 0x8(r31) +/* 00018B60 000258F0 38 0A 00 01 */ addi r0, r10, 0x1 +/* 00018B64 000258F4 90 1F 00 1C */ stw r0, 0x1c(r31) +/* 00018B68 000258F8 48 01 8B 90 */ b .text+0x18B90 +/* 00018B6C 000258FC 81 5F 00 20 */ lwz r10, 0x20(r31) +/* 00018B70 00025900 2C 0A 00 31 */ cmpwi r10, 0x31 +/* 00018B74 00025904 40 81 8B 80 */ ble .L_000116F4 +/* 00018B78 00025908 38 60 00 00 */ li r3, 0x0 +/* 00018B7C 0002590C 48 01 8B A0 */ b .text+0x18BA0 +/* 00018B80 00025910 1D 6A 00 14 */ mulli r11, r10, 0x14 +/* 00018B84 00025914 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 00018B88 00025918 38 0A 00 01 */ addi r0, r10, 0x1 +/* 00018B8C 0002591C 90 1F 00 20 */ stw r0, 0x20(r31) +/* 00018B90 00025920 7D 29 5A 14 */ add r9, r9, r11 +/* 00018B94 00025924 93 C9 00 04 */ stw r30, 0x4(r9) +.L_00018B98: +/* 00018B98 00025928 7D 23 4B 78 */ mr r3, r9 +/* 00018B9C 0002592C 93 A9 00 00 */ stw r29, 0x0(r9) +/* 00018BA0 00025930 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 00018BA4 00025934 7C 08 03 A6 */ mtlr r0 +.L_00018BA8: +/* 00018BA8 00025938 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 00018BAC 0002593C 38 21 00 18 */ addi r1, r1, 0x18 +/* 00018BB0 00025940 4E 80 00 20 */ blr +.endfn AddCameraGroup__10ICEManager10ICEContextUi + +# .text:0x18BB4 | size: 0x158 +.fn LoadCameraSet__10ICEManagerP6bChunk, global +/* 00018BB4 00025944 94 21 FF D0 */ stwu r1, -0x30(r1) +/* 00018BB8 00025948 7C 08 02 A6 */ mflr r0 +/* 00018BBC 0002594C BE E1 00 0C */ stmw r23, 0xc(r1) +/* 00018BC0 00025950 90 01 00 34 */ stw r0, 0x34(r1) +/* 00018BC4 00025954 7C 99 23 78 */ mr r25, r4 +.L_00018BC8: +/* 00018BC8 00025958 3C 00 80 03 */ lis r0, 0x8003 +/* 00018BCC 0002595C 81 39 00 00 */ lwz r9, 0x0(r25) +/* 00018BD0 00025960 60 00 B2 01 */ ori r0, r0, 0xb201 +.L_00018BD4: +/* 00018BD4 00025964 7C 77 1B 78 */ mr r23, r3 +/* 00018BD8 00025968 3B 00 00 04 */ li r24, 0x4 +/* 00018BDC 0002596C 7C 09 00 00 */ cmpw r9, r0 +/* 00018BE0 00025970 41 82 8C 2C */ beq .L_0001180C +/* 00018BE4 00025974 7C 09 00 40 */ cmplw r9, r0 +/* 00018BE8 00025978 41 81 8C 00 */ bgt .L_000117E8 +/* 00018BEC 0002597C 3C 00 80 03 */ lis r0, 0x8003 +/* 00018BF0 00025980 60 00 B2 00 */ ori r0, r0, 0xb200 +/* 00018BF4 00025984 7C 09 00 00 */ cmpw r9, r0 +/* 00018BF8 00025988 41 82 8C 24 */ beq _._20SelectCarCameraMover +/* 00018BFC 0002598C 48 01 8C 40 */ b .text+0x18C40 +/* 00018C00 00025990 3C 00 80 03 */ lis r0, 0x8003 +/* 00018C04 00025994 60 00 B2 02 */ ori r0, r0, 0xb202 +/* 00018C08 00025998 7C 09 00 00 */ cmpw r9, r0 +/* 00018C0C 0002599C 41 82 8C 34 */ beq .L_00011840 +/* 00018C10 000259A0 3C 00 80 03 */ lis r0, 0x8003 +.L_00018C14: +/* 00018C14 000259A4 60 00 B2 03 */ ori r0, r0, 0xb203 +/* 00018C18 000259A8 7C 09 00 00 */ cmpw r9, r0 +/* 00018C1C 000259AC 41 82 8C 3C */ beq .L_00011858 +.L_00018C20: +/* 00018C20 000259B0 48 01 8C 40 */ b .text+0x18C40 +/* 00018C24 000259B4 3B 00 00 00 */ li r24, 0x0 +/* 00018C28 000259B8 48 01 8C 40 */ b .text+0x18C40 +.L_00018C2C: +/* 00018C2C 000259BC 3B 00 00 01 */ li r24, 0x1 +/* 00018C30 000259C0 48 01 8C 40 */ b .text+0x18C40 +/* 00018C34 000259C4 3B 00 00 02 */ li r24, 0x2 +/* 00018C38 000259C8 48 01 8C 40 */ b .text+0x18C40 +/* 00018C3C 000259CC 3B 00 00 03 */ li r24, 0x3 +/* 00018C40 000259D0 3B B9 00 08 */ addi r29, r25, 0x8 +/* 00018C44 000259D4 81 39 00 04 */ lwz r9, 0x4(r25) +/* 00018C48 000259D8 7D 39 4A 14 */ add r9, r25, r9 +/* 00018C4C 000259DC 39 29 00 08 */ addi r9, r9, 0x8 +/* 00018C50 000259E0 7C 1D 48 00 */ cmpw r29, r9 +/* 00018C54 000259E4 41 82 8C F8 */ beq .L_0001194C +/* 00018C58 000259E8 3B FD 00 08 */ addi r31, r29, 0x8 +/* 00018C5C 000259EC 7F E3 FB 78 */ mr r3, r31 +/* 00018C60 000259F0 48 00 00 01 */ bl bEndianSwap32__FPv +.L_00018C64: +/* 00018C64 000259F4 38 7D 00 0C */ addi r3, r29, 0xc +/* 00018C68 000259F8 48 00 00 01 */ bl bEndianSwap32__FPv +/* 00018C6C 000259FC 80 BD 00 08 */ lwz r5, 0x8(r29) +/* 00018C70 00025A00 7E E3 BB 78 */ mr r3, r23 +/* 00018C74 00025A04 7F 04 C3 78 */ mr r4, r24 +/* 00018C78 00025A08 48 01 8A B1 */ bl .text+0x18AB0 +/* 00018C7C 00025A0C 7C 7E 1B 79 */ mr. r30, r3 +/* 00018C80 00025A10 41 82 8C E8 */ beq .L_00011968 +/* 00018C84 00025A14 83 7D 00 0C */ lwz r27, 0xc(r29) +/* 00018C88 00025A18 3B 80 00 00 */ li r28, 0x0 +/* 00018C8C 00025A1C 3B FF 00 08 */ addi r31, r31, 0x8 +/* 00018C90 00025A20 7C 1C D8 00 */ cmpw r28, r27 +/* 00018C94 00025A24 40 80 8C E8 */ bge .L_0001197C +/* 00018C98 00025A28 3B 5E 00 0C */ addi r26, r30, 0xc +/* 00018C9C 00025A2C 7F E3 FB 78 */ mr r3, r31 +/* 00018CA0 00025A30 3B 9C 00 01 */ addi r28, r28, 0x1 +/* 00018CA4 00025A34 48 01 7E 29 */ bl .text+0x17E28 +/* 00018CA8 00025A38 93 DF 00 08 */ stw r30, 0x8(r31) +/* 00018CAC 00025A3C 7C 1C D8 00 */ cmpw r28, r27 +/* 00018CB0 00025A40 81 3E 00 10 */ lwz r9, 0x10(r30) +/* 00018CB4 00025A44 93 E9 00 00 */ stw r31, 0x0(r9) +/* 00018CB8 00025A48 93 FE 00 10 */ stw r31, 0x10(r30) +.L_00018CBC: +/* 00018CBC 00025A4C 91 3F 00 04 */ stw r9, 0x4(r31) +/* 00018CC0 00025A50 93 5F 00 00 */ stw r26, 0x0(r31) +/* 00018CC4 00025A54 81 3E 00 08 */ lwz r9, 0x8(r30) +/* 00018CC8 00025A58 39 29 00 01 */ addi r9, r9, 0x1 +/* 00018CCC 00025A5C 91 3E 00 08 */ stw r9, 0x8(r30) +/* 00018CD0 00025A60 A8 1F 00 14 */ lha r0, 0x14(r31) +/* 00018CD4 00025A64 20 00 00 32 */ subfic r0, r0, 0x32 +/* 00018CD8 00025A68 1C 00 00 84 */ mulli r0, r0, 0x84 +/* 00018CDC 00025A6C 20 00 19 F0 */ subfic r0, r0, 0x19f0 +/* 00018CE0 00025A70 7F FF 02 14 */ add r31, r31, r0 +/* 00018CE4 00025A74 41 80 8C 9C */ blt .L_00011980 +/* 00018CE8 00025A78 81 3D 00 04 */ lwz r9, 0x4(r29) +.L_00018CEC: +/* 00018CEC 00025A7C 7D 3D 4A 14 */ add r9, r29, r9 +/* 00018CF0 00025A80 3B A9 00 08 */ addi r29, r9, 0x8 +/* 00018CF4 00025A84 48 01 8C 44 */ b .text+0x18C44 +/* 00018CF8 00025A88 80 01 00 34 */ lwz r0, 0x34(r1) +/* 00018CFC 00025A8C 7C 08 03 A6 */ mtlr r0 +/* 00018D00 00025A90 BA E1 00 0C */ lmw r23, 0xc(r1) +/* 00018D04 00025A94 38 21 00 30 */ addi r1, r1, 0x30 +/* 00018D08 00025A98 4E 80 00 20 */ blr +.endfn LoadCameraSet__10ICEManagerP6bChunk + +# .text:0x18D0C | size: 0x1C8 +.fn UnloadCameraSet__10ICEManagerP6bChunk, global +/* 00018D0C 00025A9C 94 21 FF D8 */ stwu r1, -0x28(r1) +/* 00018D10 00025AA0 7C 08 02 A6 */ mflr r0 +/* 00018D14 00025AA4 7D 80 00 26 */ mfcr r12 +/* 00018D18 00025AA8 BF 21 00 0C */ stmw r25, 0xc(r1) +/* 00018D1C 00025AAC 90 01 00 2C */ stw r0, 0x2c(r1) +/* 00018D20 00025AB0 91 81 00 08 */ stw r12, 0x8(r1) +/* 00018D24 00025AB4 7C 9A 23 78 */ mr r26, r4 +/* 00018D28 00025AB8 3C 00 80 03 */ lis r0, 0x8003 +/* 00018D2C 00025ABC 81 3A 00 00 */ lwz r9, 0x0(r26) +/* 00018D30 00025AC0 60 00 B2 01 */ ori r0, r0, 0xb201 +/* 00018D34 00025AC4 7C 7C 1B 78 */ mr r28, r3 +/* 00018D38 00025AC8 3B 60 00 04 */ li r27, 0x4 +/* 00018D3C 00025ACC 7C 09 00 00 */ cmpw r9, r0 +/* 00018D40 00025AD0 41 82 8D 8C */ beq .L_00011ACC +.L_00018D44: +/* 00018D44 00025AD4 7C 09 00 40 */ cmplw r9, r0 +/* 00018D48 00025AD8 41 81 8D 60 */ bgt .L_00011AA8 +/* 00018D4C 00025ADC 3C 00 80 03 */ lis r0, 0x8003 +/* 00018D50 00025AE0 60 00 B2 00 */ ori r0, r0, 0xb200 +.L_00018D54: +/* 00018D54 00025AE4 7C 09 00 00 */ cmpw r9, r0 +/* 00018D58 00025AE8 41 82 8D 84 */ beq .L_00011ADC +/* 00018D5C 00025AEC 48 01 8D A0 */ b .text+0x18DA0 +/* 00018D60 00025AF0 3C 00 80 03 */ lis r0, 0x8003 +/* 00018D64 00025AF4 60 00 B2 02 */ ori r0, r0, 0xb202 +/* 00018D68 00025AF8 7C 09 00 00 */ cmpw r9, r0 +.L_00018D6C: +/* 00018D6C 00025AFC 41 82 8D 94 */ beq .L_00011B00 +/* 00018D70 00025B00 3C 00 80 03 */ lis r0, 0x8003 +/* 00018D74 00025B04 60 00 B2 03 */ ori r0, r0, 0xb203 +/* 00018D78 00025B08 7C 09 00 00 */ cmpw r9, r0 +/* 00018D7C 00025B0C 41 82 8D 9C */ beq .L_00011B18 +/* 00018D80 00025B10 48 01 8D A0 */ b .text+0x18DA0 +/* 00018D84 00025B14 3B 60 00 00 */ li r27, 0x0 +/* 00018D88 00025B18 48 01 8D A0 */ b .text+0x18DA0 +/* 00018D8C 00025B1C 3B 60 00 01 */ li r27, 0x1 +/* 00018D90 00025B20 48 01 8D A0 */ b .text+0x18DA0 +/* 00018D94 00025B24 3B 60 00 02 */ li r27, 0x2 +/* 00018D98 00025B28 48 01 8D A0 */ b .text+0x18DA0 +/* 00018D9C 00025B2C 3B 60 00 03 */ li r27, 0x3 +/* 00018DA0 00025B30 3B DA 00 08 */ addi r30, r26, 0x8 +/* 00018DA4 00025B34 2E 1B 00 01 */ cmpwi cr4, r27, 0x1 +.L_00018DA8: +/* 00018DA8 00025B38 3B 20 00 00 */ li r25, 0x0 +/* 00018DAC 00025B3C 81 3A 00 04 */ lwz r9, 0x4(r26) +/* 00018DB0 00025B40 7D 3A 4A 14 */ add r9, r26, r9 +/* 00018DB4 00025B44 39 29 00 08 */ addi r9, r9, 0x8 +/* 00018DB8 00025B48 7C 1E 48 00 */ cmpw r30, r9 +/* 00018DBC 00025B4C 41 82 8E 38 */ beq .L_00011BF4 +/* 00018DC0 00025B50 80 BE 00 08 */ lwz r5, 0x8(r30) +/* 00018DC4 00025B54 7F 83 E3 78 */ mr r3, r28 +/* 00018DC8 00025B58 7F 64 DB 78 */ mr r4, r27 +/* 00018DCC 00025B5C 48 01 8A 1D */ bl .text+0x18A1C +/* 00018DD0 00025B60 7C 7F 1B 79 */ mr. r31, r3 +/* 00018DD4 00025B64 41 82 8E 28 */ beq .L_00011BFC +/* 00018DD8 00025B68 93 3F 00 08 */ stw r25, 0x8(r31) +/* 00018DDC 00025B6C 3B BF 00 0C */ addi r29, r31, 0xc +/* 00018DE0 00025B70 80 7F 00 0C */ lwz r3, 0xc(r31) +.L_00018DE4: +/* 00018DE4 00025B74 7C 03 E8 00 */ cmpw r3, r29 +/* 00018DE8 00025B78 41 82 8E 28 */ beq .L_00011C10 +.L_00018DEC: +/* 00018DEC 00025B7C 81 23 00 00 */ lwz r9, 0x0(r3) +/* 00018DF0 00025B80 39 40 00 01 */ li r10, 0x1 +.L_00018DF4: +/* 00018DF4 00025B84 81 63 00 04 */ lwz r11, 0x4(r3) +/* 00018DF8 00025B88 91 2B 00 00 */ stw r9, 0x0(r11) +/* 00018DFC 00025B8C 91 69 00 04 */ stw r11, 0x4(r9) +/* 00018E00 00025B90 88 03 00 16 */ lbz r0, 0x16(r3) +/* 00018E04 00025B94 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00018E08 00025B98 40 82 8E 10 */ bne .L_00011C18 +/* 00018E0C 00025B9C 39 40 00 00 */ li r10, 0x0 +/* 00018E10 00025BA0 2C 0A 00 00 */ cmpwi r10, 0x0 +/* 00018E14 00025BA4 41 82 8D E0 */ beq .L_00011BF4 +/* 00018E18 00025BA8 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00018E1C 00025BAC 41 82 8D E0 */ beq .L_00011BFC +/* 00018E20 00025BB0 48 00 00 01 */ bl __builtin_delete +/* 00018E24 00025BB4 48 01 8D E0 */ b .text+0x18DE0 +/* 00018E28 00025BB8 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 00018E2C 00025BBC 7D 3E 4A 14 */ add r9, r30, r9 +/* 00018E30 00025BC0 3B C9 00 08 */ addi r30, r9, 0x8 +/* 00018E34 00025BC4 48 01 8D AC */ b .text+0x18DAC +/* 00018E38 00025BC8 3B C0 00 00 */ li r30, 0x0 +/* 00018E3C 00025BCC 3B A0 00 00 */ li r29, 0x0 +/* 00018E40 00025BD0 41 92 8E 74 */ beq cr4, .L_00011CB4 +/* 00018E44 00025BD4 41 91 8E 54 */ bgt cr4, .L_00011C98 +/* 00018E48 00025BD8 2C 1B 00 00 */ cmpwi r27, 0x0 +/* 00018E4C 00025BDC 41 82 8E 68 */ beq .L_00011CB4 +.L_00018E50: +/* 00018E50 00025BE0 48 01 8E 94 */ b .text+0x18E94 +/* 00018E54 00025BE4 2C 1B 00 02 */ cmpwi r27, 0x2 +/* 00018E58 00025BE8 41 82 8E 80 */ beq .L_00011CD8 +/* 00018E5C 00025BEC 2C 1B 00 03 */ cmpwi r27, 0x3 +/* 00018E60 00025BF0 41 82 8E 8C */ beq .L_00011CEC +/* 00018E64 00025BF4 48 01 8E 94 */ b .text+0x18E94 +.L_00018E68: +/* 00018E68 00025BF8 83 DC 00 14 */ lwz r30, 0x14(r28) +/* 00018E6C 00025BFC 83 BC 00 00 */ lwz r29, 0x0(r28) +/* 00018E70 00025C00 48 01 8E 94 */ b .text+0x18E94 +/* 00018E74 00025C04 83 DC 00 18 */ lwz r30, 0x18(r28) +/* 00018E78 00025C08 83 BC 00 04 */ lwz r29, 0x4(r28) +.L_00018E7C: +/* 00018E7C 00025C0C 48 01 8E 94 */ b .text+0x18E94 +/* 00018E80 00025C10 83 DC 00 1C */ lwz r30, 0x1c(r28) +/* 00018E84 00025C14 83 BC 00 08 */ lwz r29, 0x8(r28) +/* 00018E88 00025C18 48 01 8E 94 */ b .text+0x18E94 +/* 00018E8C 00025C1C 83 DC 00 20 */ lwz r30, 0x20(r28) +/* 00018E90 00025C20 83 BC 00 0C */ lwz r29, 0xc(r28) +/* 00018E94 00025C24 3B E0 00 00 */ li r31, 0x0 +/* 00018E98 00025C28 7C 1F F0 00 */ cmpw r31, r30 +/* 00018E9C 00025C2C 40 80 8E B8 */ bge .L_00011D54 +/* 00018EA0 00025C30 1C 7F 00 14 */ mulli r3, r31, 0x14 +/* 00018EA4 00025C34 3B FF 00 01 */ addi r31, r31, 0x1 +/* 00018EA8 00025C38 7C 7D 1A 14 */ add r3, r29, r3 +/* 00018EAC 00025C3C 48 01 7C 49 */ bl .text+0x17C48 +/* 00018EB0 00025C40 7C 1F F0 00 */ cmpw r31, r30 +/* 00018EB4 00025C44 41 80 8E A0 */ blt .L_00011D54 +/* 00018EB8 00025C48 80 01 00 2C */ lwz r0, 0x2c(r1) +/* 00018EBC 00025C4C 81 81 00 08 */ lwz r12, 0x8(r1) +/* 00018EC0 00025C50 7C 08 03 A6 */ mtlr r0 +/* 00018EC4 00025C54 BB 21 00 0C */ lmw r25, 0xc(r1) +.L_00018EC8: +/* 00018EC8 00025C58 7D 80 81 20 */ mtcrf 8, r12 +/* 00018ECC 00025C5C 38 21 00 28 */ addi r1, r1, 0x28 +/* 00018ED0 00025C60 4E 80 00 20 */ blr +.endfn UnloadCameraSet__10ICEManagerP6bChunk + +# .text:0x18ED4 | size: 0xA4 +.fn LoadCameraShakes__10ICEManagerP6bChunk, global +/* 00018ED4 00025C64 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 00018ED8 00025C68 7C 08 02 A6 */ mflr r0 +/* 00018EDC 00025C6C BF 61 00 0C */ stmw r27, 0xc(r1) +/* 00018EE0 00025C70 90 01 00 24 */ stw r0, 0x24(r1) +/* 00018EE4 00025C74 7C 7E 1B 78 */ mr r30, r3 +/* 00018EE8 00025C78 7C 9D 23 78 */ mr r29, r4 +/* 00018EEC 00025C7C 38 7D 00 08 */ addi r3, r29, 0x8 +/* 00018EF0 00025C80 48 00 00 01 */ bl bEndianSwap32__FPv +/* 00018EF4 00025C84 83 FE 00 10 */ lwz r31, 0x10(r30) +/* 00018EF8 00025C88 2C 1F 00 00 */ cmpwi r31, 0x0 +/* 00018EFC 00025C8C 41 82 8F 64 */ beq .L_00011E60 +/* 00018F00 00025C90 83 7D 00 08 */ lwz r27, 0x8(r29) +/* 00018F04 00025C94 3B 80 00 00 */ li r28, 0x0 +/* 00018F08 00025C98 3B DD 00 0C */ addi r30, r29, 0xc +.L_00018F0C: +/* 00018F0C 00025C9C 7C 1C D8 00 */ cmpw r28, r27 +/* 00018F10 00025CA0 40 80 8F 64 */ bge .L_00011E74 +/* 00018F14 00025CA4 3B BF 00 04 */ addi r29, r31, 0x4 +/* 00018F18 00025CA8 7F C3 F3 78 */ mr r3, r30 +/* 00018F1C 00025CAC 3B 9C 00 01 */ addi r28, r28, 0x1 +/* 00018F20 00025CB0 48 01 81 95 */ bl .text+0x18194 +/* 00018F24 00025CB4 93 FE 00 08 */ stw r31, 0x8(r30) +/* 00018F28 00025CB8 7C 1C D8 00 */ cmpw r28, r27 +/* 00018F2C 00025CBC 81 3D 00 04 */ lwz r9, 0x4(r29) +/* 00018F30 00025CC0 93 C9 00 00 */ stw r30, 0x0(r9) +/* 00018F34 00025CC4 93 DD 00 04 */ stw r30, 0x4(r29) +/* 00018F38 00025CC8 91 3E 00 04 */ stw r9, 0x4(r30) +/* 00018F3C 00025CCC 93 BE 00 00 */ stw r29, 0x0(r30) +/* 00018F40 00025CD0 81 3F 00 00 */ lwz r9, 0x0(r31) +/* 00018F44 00025CD4 39 29 00 01 */ addi r9, r9, 0x1 +/* 00018F48 00025CD8 91 3F 00 00 */ stw r9, 0x0(r31) +.L_00018F4C: +/* 00018F4C 00025CDC A8 1E 00 0C */ lha r0, 0xc(r30) +/* 00018F50 00025CE0 20 00 00 78 */ subfic r0, r0, 0x78 +/* 00018F54 00025CE4 1C 00 00 18 */ mulli r0, r0, 0x18 +/* 00018F58 00025CE8 20 00 0B 60 */ subfic r0, r0, 0xb60 +/* 00018F5C 00025CEC 7F DE 02 14 */ add r30, r30, r0 +/* 00018F60 00025CF0 41 80 8F 18 */ blt .L_00011E78 +.L_00018F64: +/* 00018F64 00025CF4 80 01 00 24 */ lwz r0, 0x24(r1) +/* 00018F68 00025CF8 7C 08 03 A6 */ mtlr r0 +/* 00018F6C 00025CFC BB 61 00 0C */ lmw r27, 0xc(r1) +/* 00018F70 00025D00 38 21 00 20 */ addi r1, r1, 0x20 +/* 00018F74 00025D04 4E 80 00 20 */ blr +.endfn LoadCameraShakes__10ICEManagerP6bChunk + +# .text:0x18F78 | size: 0x84 +.fn UnloadCameraShakes__10ICEManagerP6bChunk, global +/* 00018F78 00025D08 94 21 FF F0 */ stwu r1, -0x10(r1) +.L_00018F7C: +/* 00018F7C 00025D0C 7C 08 02 A6 */ mflr r0 +/* 00018F80 00025D10 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 00018F84 00025D14 90 01 00 14 */ stw r0, 0x14(r1) +/* 00018F88 00025D18 83 E3 00 10 */ lwz r31, 0x10(r3) +/* 00018F8C 00025D1C 38 00 00 00 */ li r0, 0x0 +/* 00018F90 00025D20 90 1F 00 00 */ stw r0, 0x0(r31) +/* 00018F94 00025D24 3B DF 00 04 */ addi r30, r31, 0x4 +/* 00018F98 00025D28 80 7F 00 04 */ lwz r3, 0x4(r31) +/* 00018F9C 00025D2C 7C 03 F0 00 */ cmpw r3, r30 +/* 00018FA0 00025D30 41 82 8F E0 */ beq .L_00011F80 +/* 00018FA4 00025D34 81 63 00 00 */ lwz r11, 0x0(r3) +/* 00018FA8 00025D38 39 40 00 01 */ li r10, 0x1 +/* 00018FAC 00025D3C 81 23 00 04 */ lwz r9, 0x4(r3) +/* 00018FB0 00025D40 91 69 00 00 */ stw r11, 0x0(r9) +/* 00018FB4 00025D44 91 2B 00 04 */ stw r9, 0x4(r11) +/* 00018FB8 00025D48 88 03 00 0E */ lbz r0, 0xe(r3) +/* 00018FBC 00025D4C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00018FC0 00025D50 40 82 8F C8 */ bne .L_00011F88 +/* 00018FC4 00025D54 39 40 00 00 */ li r10, 0x0 +/* 00018FC8 00025D58 2C 0A 00 00 */ cmpwi r10, 0x0 +/* 00018FCC 00025D5C 41 82 8F 98 */ beq .L_00011F64 +/* 00018FD0 00025D60 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00018FD4 00025D64 41 82 8F 98 */ beq .L_00011F6C +/* 00018FD8 00025D68 48 00 00 01 */ bl __builtin_delete +/* 00018FDC 00025D6C 48 01 8F 98 */ b .text+0x18F98 +/* 00018FE0 00025D70 7F E3 FB 78 */ mr r3, r31 +/* 00018FE4 00025D74 48 01 7D 69 */ bl .text+0x17D68 +/* 00018FE8 00025D78 80 01 00 14 */ lwz r0, 0x14(r1) +/* 00018FEC 00025D7C 7C 08 03 A6 */ mtlr r0 +/* 00018FF0 00025D80 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 00018FF4 00025D84 38 21 00 10 */ addi r1, r1, 0x10 +/* 00018FF8 00025D88 4E 80 00 20 */ blr +.endfn UnloadCameraShakes__10ICEManagerP6bChunk + +# .text:0x18FFC | size: 0x194 +# ICEManager::Init +.fn Init__10ICEManager, global +/* 00018FFC 00025D8C 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 00019000 00025D90 7C 08 02 A6 */ mflr r0 +/* 00019004 00025D94 BF 81 00 08 */ stmw r28, 0x8(r1) +/* 00019008 00025D98 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0001900C 00025D9C 7C 7F 1B 78 */ mr r31, r3 +/* 00019010 00025DA0 38 60 14 08 */ li r3, 0x1408 +/* 00019014 00025DA4 48 00 00 01 */ bl __builtin_vec_new +/* 00019018 00025DA8 38 00 01 00 */ li r0, 0x100 +/* 0001901C 00025DAC 39 03 00 08 */ addi r8, r3, 0x8 +/* 00019020 00025DB0 90 03 00 00 */ stw r0, 0x0(r3) +/* 00019024 00025DB4 39 40 00 00 */ li r10, 0x0 +/* 00019028 00025DB8 38 E0 00 04 */ li r7, 0x4 +.L_0001902C: +/* 0001902C 00025DBC 7D 09 43 78 */ mr r9, r8 +/* 00019030 00025DC0 39 60 00 FF */ li r11, 0xff +/* 00019034 00025DC4 38 09 00 0C */ addi r0, r9, 0xc +/* 00019038 00025DC8 91 49 00 00 */ stw r10, 0x0(r9) +/* 0001903C 00025DCC 90 09 00 10 */ stw r0, 0x10(r9) +/* 00019040 00025DD0 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00019044 00025DD4 90 E9 00 04 */ stw r7, 0x4(r9) +/* 00019048 00025DD8 39 6B FF FF */ subi r11, r11, 0x1 +/* 0001904C 00025DDC 91 49 00 08 */ stw r10, 0x8(r9) +/* 00019050 00025DE0 90 09 00 0C */ stw r0, 0xc(r9) +/* 00019054 00025DE4 39 29 00 14 */ addi r9, r9, 0x14 +/* 00019058 00025DE8 40 82 90 34 */ bne .L_0001208C +/* 0001905C 00025DEC 91 1F 00 00 */ stw r8, 0x0(r31) +/* 00019060 00025DF0 38 60 00 D0 */ li r3, 0xd0 +/* 00019064 00025DF4 48 00 00 01 */ bl __builtin_vec_new +/* 00019068 00025DF8 3B DF 00 04 */ addi r30, r31, 0x4 +/* 0001906C 00025DFC 38 00 00 0A */ li r0, 0xa +/* 00019070 00025E00 39 03 00 08 */ addi r8, r3, 0x8 +.L_00019074: +/* 00019074 00025E04 90 03 00 00 */ stw r0, 0x0(r3) +/* 00019078 00025E08 39 40 00 00 */ li r10, 0x0 +/* 0001907C 00025E0C 38 E0 00 04 */ li r7, 0x4 +/* 00019080 00025E10 7D 09 43 78 */ mr r9, r8 +/* 00019084 00025E14 39 60 00 09 */ li r11, 0x9 +/* 00019088 00025E18 3B BF 00 08 */ addi r29, r31, 0x8 +/* 0001908C 00025E1C 3B 9F 00 0C */ addi r28, r31, 0xc +/* 00019090 00025E20 38 09 00 0C */ addi r0, r9, 0xc +/* 00019094 00025E24 91 49 00 00 */ stw r10, 0x0(r9) +/* 00019098 00025E28 90 09 00 10 */ stw r0, 0x10(r9) +/* 0001909C 00025E2C 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 000190A0 00025E30 90 E9 00 04 */ stw r7, 0x4(r9) +/* 000190A4 00025E34 39 6B FF FF */ subi r11, r11, 0x1 +/* 000190A8 00025E38 91 49 00 08 */ stw r10, 0x8(r9) +.L_000190AC: +/* 000190AC 00025E3C 90 09 00 0C */ stw r0, 0xc(r9) +/* 000190B0 00025E40 39 29 00 14 */ addi r9, r9, 0x14 +/* 000190B4 00025E44 40 82 90 90 */ bne .L_00012144 +.L_000190B8: +/* 000190B8 00025E48 91 1E 00 00 */ stw r8, 0x0(r30) +.L_000190BC: +/* 000190BC 00025E4C 38 60 03 F0 */ li r3, 0x3f0 +/* 000190C0 00025E50 48 00 00 01 */ bl __builtin_vec_new +/* 000190C4 00025E54 38 00 00 32 */ li r0, 0x32 +/* 000190C8 00025E58 39 03 00 08 */ addi r8, r3, 0x8 +/* 000190CC 00025E5C 90 03 00 00 */ stw r0, 0x0(r3) +/* 000190D0 00025E60 39 40 00 00 */ li r10, 0x0 +/* 000190D4 00025E64 38 E0 00 04 */ li r7, 0x4 +/* 000190D8 00025E68 7D 09 43 78 */ mr r9, r8 +.L_000190DC: +/* 000190DC 00025E6C 39 60 00 31 */ li r11, 0x31 +/* 000190E0 00025E70 38 09 00 0C */ addi r0, r9, 0xc +/* 000190E4 00025E74 91 49 00 00 */ stw r10, 0x0(r9) +/* 000190E8 00025E78 90 09 00 10 */ stw r0, 0x10(r9) +/* 000190EC 00025E7C 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 000190F0 00025E80 90 E9 00 04 */ stw r7, 0x4(r9) +/* 000190F4 00025E84 39 6B FF FF */ subi r11, r11, 0x1 +/* 000190F8 00025E88 91 49 00 08 */ stw r10, 0x8(r9) +/* 000190FC 00025E8C 90 09 00 0C */ stw r0, 0xc(r9) +/* 00019100 00025E90 39 29 00 14 */ addi r9, r9, 0x14 +/* 00019104 00025E94 40 82 90 E0 */ bne .L_000121E4 +/* 00019108 00025E98 91 1D 00 00 */ stw r8, 0x0(r29) +/* 0001910C 00025E9C 38 60 03 F0 */ li r3, 0x3f0 +.L_00019110: +/* 00019110 00025EA0 48 00 00 01 */ bl __builtin_vec_new +/* 00019114 00025EA4 38 00 00 32 */ li r0, 0x32 +/* 00019118 00025EA8 39 03 00 08 */ addi r8, r3, 0x8 +/* 0001911C 00025EAC 90 03 00 00 */ stw r0, 0x0(r3) +/* 00019120 00025EB0 39 40 00 00 */ li r10, 0x0 +/* 00019124 00025EB4 38 E0 00 04 */ li r7, 0x4 +/* 00019128 00025EB8 7D 09 43 78 */ mr r9, r8 +/* 0001912C 00025EBC 39 60 00 31 */ li r11, 0x31 +/* 00019130 00025EC0 38 09 00 0C */ addi r0, r9, 0xc +/* 00019134 00025EC4 91 49 00 00 */ stw r10, 0x0(r9) +/* 00019138 00025EC8 90 09 00 10 */ stw r0, 0x10(r9) +/* 0001913C 00025ECC 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00019140 00025ED0 90 E9 00 04 */ stw r7, 0x4(r9) +/* 00019144 00025ED4 39 6B FF FF */ subi r11, r11, 0x1 +/* 00019148 00025ED8 91 49 00 08 */ stw r10, 0x8(r9) +/* 0001914C 00025EDC 90 09 00 0C */ stw r0, 0xc(r9) +.L_00019150: +/* 00019150 00025EE0 39 29 00 14 */ addi r9, r9, 0x14 +/* 00019154 00025EE4 40 82 91 30 */ bne .L_00012284 +/* 00019158 00025EE8 91 1C 00 00 */ stw r8, 0x0(r28) +/* 0001915C 00025EEC 38 60 00 0C */ li r3, 0xc +/* 00019160 00025EF0 48 00 00 01 */ bl __builtin_new +/* 00019164 00025EF4 39 23 00 04 */ addi r9, r3, 0x4 +/* 00019168 00025EF8 38 00 00 00 */ li r0, 0x0 +/* 0001916C 00025EFC 90 03 00 00 */ stw r0, 0x0(r3) +/* 00019170 00025F00 91 23 00 04 */ stw r9, 0x4(r3) +/* 00019174 00025F04 90 7F 00 10 */ stw r3, 0x10(r31) +/* 00019178 00025F08 91 29 00 04 */ stw r9, 0x4(r9) +/* 0001917C 00025F0C 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 00019180 00025F10 7C 08 03 A6 */ mtlr r0 +/* 00019184 00025F14 BB 81 00 08 */ lmw r28, 0x8(r1) +/* 00019188 00025F18 38 21 00 18 */ addi r1, r1, 0x18 +/* 0001918C 00025F1C 4E 80 00 20 */ blr +.endfn Init__10ICEManager + +# .text:0x19190 | size: 0x28C +# ICEManager::Resolve +.fn Resolve__10ICEManager, global +/* 00019190 00025F20 94 21 FF C8 */ stwu r1, -0x38(r1) +/* 00019194 00025F24 7C 08 02 A6 */ mflr r0 +/* 00019198 00025F28 BF 01 00 18 */ stmw r24, 0x18(r1) +/* 0001919C 00025F2C 90 01 00 3C */ stw r0, 0x3c(r1) +/* 000191A0 00025F30 7C 7F 1B 78 */ mr r31, r3 +.L_000191A4: +/* 000191A4 00025F34 3B A0 00 00 */ li r29, 0x0 +/* 000191A8 00025F38 48 01 A0 25 */ bl .text+0x1A024 +/* 000191AC 00025F3C 7C 7C 1B 78 */ mr r28, r3 +/* 000191B0 00025F40 7C 1D E0 40 */ cmplw r29, r28 +/* 000191B4 00025F44 40 80 92 7C */ bge .L_00012430 +/* 000191B8 00025F48 3B 61 00 08 */ addi r27, r1, 0x8 +/* 000191BC 00025F4C 3F 00 00 00 */ lis r24, .rodata+0xE1C@ha +.L_000191C0: +/* 000191C0 00025F50 3F 20 00 00 */ lis r25, .rodata+0xE20@ha +/* 000191C4 00025F54 3F 40 00 00 */ lis r26, .rodata+0xE28@ha +/* 000191C8 00025F58 7F A3 EB 78 */ mr r3, r29 +/* 000191CC 00025F5C 48 01 A0 41 */ bl .text+0x1A040 +.L_000191D0: +/* 000191D0 00025F60 3B BD 00 01 */ addi r29, r29, 0x1 +/* 000191D4 00025F64 7C 7E 1B 78 */ mr r30, r3 +/* 000191D8 00025F68 38 81 00 08 */ addi r4, r1, 0x8 +.L_000191DC: +/* 000191DC 00025F6C 48 01 A0 79 */ bl .text+0x1A078 +/* 000191E0 00025F70 38 98 0E 1C */ addi r4, r24, .rodata+0xE1C@l +/* 000191E4 00025F74 38 A0 00 03 */ li r5, 0x3 +/* 000191E8 00025F78 7F 63 DB 78 */ mr r3, r27 +/* 000191EC 00025F7C 48 00 00 01 */ bl bStrNICmp__FPCcT0i +/* 000191F0 00025F80 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000191F4 00025F84 38 99 0E 20 */ addi r4, r25, .rodata+0xE20@l +/* 000191F8 00025F88 38 A0 00 06 */ li r5, 0x6 +/* 000191FC 00025F8C 7F 63 DB 78 */ mr r3, r27 +/* 00019200 00025F90 41 82 92 74 */ beq .L_00012474 +/* 00019204 00025F94 48 00 00 01 */ bl bStrNICmp__FPCcT0i +/* 00019208 00025F98 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0001920C 00025F9C 38 9A 0E 28 */ addi r4, r26, .rodata+0xE28@l +/* 00019210 00025FA0 7F 63 DB 78 */ mr r3, r27 +/* 00019214 00025FA4 38 A0 00 04 */ li r5, 0x4 +/* 00019218 00025FA8 41 82 92 74 */ beq .L_0001248C +.L_0001921C: +/* 0001921C 00025FAC 48 00 00 01 */ bl bStrNICmp__FPCcT0i +/* 00019220 00025FB0 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00019224 00025FB4 7F C4 F3 78 */ mr r4, r30 +/* 00019228 00025FB8 7F E3 FB 78 */ mr r3, r31 +/* 0001922C 00025FBC 41 82 92 74 */ beq .L_000124A0 +/* 00019230 00025FC0 48 01 83 19 */ bl .text+0x18318 +/* 00019234 00025FC4 7C 63 1B 79 */ mr. r3, r3 +/* 00019238 00025FC8 40 82 92 74 */ bne .L_000124AC +/* 0001923C 00025FCC 80 1F 00 14 */ lwz r0, 0x14(r31) +/* 00019240 00025FD0 1D 60 00 14 */ mulli r11, r0, 0x14 +/* 00019244 00025FD4 2C 00 00 FF */ cmpwi r0, 0xff +/* 00019248 00025FD8 41 81 92 74 */ bgt .L_000124BC +/* 0001924C 00025FDC 81 3F 00 00 */ lwz r9, 0x0(r31) +/* 00019250 00025FE0 7D 2B 4A 14 */ add r9, r11, r9 +/* 00019254 00025FE4 90 69 00 04 */ stw r3, 0x4(r9) +/* 00019258 00025FE8 81 7F 00 14 */ lwz r11, 0x14(r31) +/* 0001925C 00025FEC 81 5F 00 00 */ lwz r10, 0x0(r31) +/* 00019260 00025FF0 1D 6B 00 14 */ mulli r11, r11, 0x14 +/* 00019264 00025FF4 7F CB 51 2E */ stwx r30, r11, r10 +/* 00019268 00025FF8 81 3F 00 14 */ lwz r9, 0x14(r31) +/* 0001926C 00025FFC 39 29 00 01 */ addi r9, r9, 0x1 +/* 00019270 00026000 91 3F 00 14 */ stw r9, 0x14(r31) +/* 00019274 00026004 7C 1D E0 40 */ cmplw r29, r28 +/* 00019278 00026008 41 80 91 C8 */ blt .L_00012440 +/* 0001927C 0002600C 3B A0 00 00 */ li r29, 0x0 +/* 00019280 00026010 7C 1D E0 40 */ cmplw r29, r28 +/* 00019284 00026014 40 80 93 14 */ bge .L_00012598 +/* 00019288 00026018 3F 40 00 00 */ lis r26, .rodata+0xE1C@ha +/* 0001928C 0002601C 3B 60 00 01 */ li r27, 0x1 +/* 00019290 00026020 7F A3 EB 78 */ mr r3, r29 +/* 00019294 00026024 48 01 A0 41 */ bl .text+0x1A040 +/* 00019298 00026028 3B BD 00 01 */ addi r29, r29, 0x1 +/* 0001929C 0002602C 7C 7E 1B 78 */ mr r30, r3 +/* 000192A0 00026030 38 81 00 08 */ addi r4, r1, 0x8 +/* 000192A4 00026034 48 01 A0 79 */ bl .text+0x1A078 +/* 000192A8 00026038 38 9A 0E 1C */ addi r4, r26, .rodata+0xE1C@l +/* 000192AC 0002603C 38 61 00 08 */ addi r3, r1, 0x8 +/* 000192B0 00026040 38 A0 00 03 */ li r5, 0x3 +/* 000192B4 00026044 48 00 00 01 */ bl bStrNICmp__FPCcT0i +/* 000192B8 00026048 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000192BC 0002604C 7F C4 F3 78 */ mr r4, r30 +/* 000192C0 00026050 7F E3 FB 78 */ mr r3, r31 +/* 000192C4 00026054 40 82 93 0C */ bne .L_000125D0 +.L_000192C8: +/* 000192C8 00026058 48 01 83 59 */ bl .text+0x18358 +/* 000192CC 0002605C 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000192D0 00026060 40 82 93 0C */ bne .L_000125DC +/* 000192D4 00026064 80 1F 00 18 */ lwz r0, 0x18(r31) +/* 000192D8 00026068 1D 60 00 14 */ mulli r11, r0, 0x14 +/* 000192DC 0002606C 2C 00 00 09 */ cmpwi r0, 0x9 +/* 000192E0 00026070 41 81 93 0C */ bgt .L_000125EC +/* 000192E4 00026074 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 000192E8 00026078 7D 2B 4A 14 */ add r9, r11, r9 +/* 000192EC 0002607C 93 69 00 04 */ stw r27, 0x4(r9) +/* 000192F0 00026080 81 7F 00 18 */ lwz r11, 0x18(r31) +/* 000192F4 00026084 81 5F 00 04 */ lwz r10, 0x4(r31) +/* 000192F8 00026088 1D 6B 00 14 */ mulli r11, r11, 0x14 +/* 000192FC 0002608C 7F CB 51 2E */ stwx r30, r11, r10 +/* 00019300 00026090 81 3F 00 18 */ lwz r9, 0x18(r31) +/* 00019304 00026094 39 29 00 01 */ addi r9, r9, 0x1 +/* 00019308 00026098 91 3F 00 18 */ stw r9, 0x18(r31) +/* 0001930C 0002609C 7C 1D E0 40 */ cmplw r29, r28 +/* 00019310 000260A0 41 80 92 90 */ blt .L_000125A0 +/* 00019314 000260A4 48 01 71 F5 */ bl .text+0x171F4 +/* 00019318 000260A8 3B A0 00 00 */ li r29, 0x0 +/* 0001931C 000260AC 7C 7C 1B 78 */ mr r28, r3 +/* 00019320 000260B0 7C 1D E0 00 */ cmpw r29, r28 +/* 00019324 000260B4 40 80 93 90 */ bge .L_000126B4 +/* 00019328 000260B8 3B 60 00 02 */ li r27, 0x2 +/* 0001932C 000260BC 7F A3 EB 78 */ mr r3, r29 +/* 00019330 000260C0 48 01 71 FD */ bl .text+0x171FC +/* 00019334 000260C4 3B BD 00 01 */ addi r29, r29, 0x1 +/* 00019338 000260C8 7C 7E 1B 78 */ mr r30, r3 +/* 0001933C 000260CC 7F E3 FB 78 */ mr r3, r31 +/* 00019340 000260D0 7F C4 F3 78 */ mr r4, r30 +/* 00019344 000260D4 48 01 83 99 */ bl .text+0x18398 +/* 00019348 000260D8 7F 9D E0 00 */ cmpw cr7, r29, r28 +/* 0001934C 000260DC 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00019350 000260E0 40 82 93 8C */ bne .L_000126DC +/* 00019354 000260E4 80 1F 00 1C */ lwz r0, 0x1c(r31) +/* 00019358 000260E8 1D 60 00 14 */ mulli r11, r0, 0x14 +/* 0001935C 000260EC 2C 00 00 31 */ cmpwi r0, 0x31 +/* 00019360 000260F0 41 81 93 8C */ bgt .L_000126EC +/* 00019364 000260F4 81 3F 00 08 */ lwz r9, 0x8(r31) +/* 00019368 000260F8 7D 2B 4A 14 */ add r9, r11, r9 +/* 0001936C 000260FC 93 69 00 04 */ stw r27, 0x4(r9) +/* 00019370 00026100 81 7F 00 1C */ lwz r11, 0x1c(r31) +/* 00019374 00026104 81 5F 00 08 */ lwz r10, 0x8(r31) +/* 00019378 00026108 1D 6B 00 14 */ mulli r11, r11, 0x14 +/* 0001937C 0002610C 7F CB 51 2E */ stwx r30, r11, r10 +/* 00019380 00026110 81 3F 00 1C */ lwz r9, 0x1c(r31) +/* 00019384 00026114 39 29 00 01 */ addi r9, r9, 0x1 +.L_00019388: +/* 00019388 00026118 91 3F 00 1C */ stw r9, 0x1c(r31) +/* 0001938C 0002611C 41 9C 93 2C */ blt cr7, .L_000126B8 +/* 00019390 00026120 3D 20 00 00 */ lis r9, GenericCategoryNames@ha +/* 00019394 00026124 3B A0 00 00 */ li r29, 0x0 +/* 00019398 00026128 3B 69 00 00 */ addi r27, r9, GenericCategoryNames@l +/* 0001939C 0002612C 3B 80 00 03 */ li r28, 0x3 +/* 000193A0 00026130 57 A0 10 3A */ slwi r0, r29, 2 +.L_000193A4: +/* 000193A4 00026134 7C 7B 00 2E */ lwzx r3, r27, r0 +/* 000193A8 00026138 3B BD 00 01 */ addi r29, r29, 0x1 +/* 000193AC 0002613C 48 00 00 01 */ bl bStringHash__FPCc +/* 000193B0 00026140 7C 7E 1B 78 */ mr r30, r3 +/* 000193B4 00026144 7F E3 FB 78 */ mr r3, r31 +/* 000193B8 00026148 7F C4 F3 78 */ mr r4, r30 +/* 000193BC 0002614C 48 01 83 D9 */ bl .text+0x183D8 +/* 000193C0 00026150 2F 9D 00 01 */ cmpwi cr7, r29, 0x1 +/* 000193C4 00026154 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000193C8 00026158 40 82 94 04 */ bne .L_000127CC +/* 000193CC 0002615C 80 1F 00 20 */ lwz r0, 0x20(r31) +/* 000193D0 00026160 1D 60 00 14 */ mulli r11, r0, 0x14 +/* 000193D4 00026164 2C 00 00 31 */ cmpwi r0, 0x31 +/* 000193D8 00026168 41 81 94 04 */ bgt .L_000127DC +/* 000193DC 0002616C 81 3F 00 0C */ lwz r9, 0xc(r31) +.L_000193E0: +/* 000193E0 00026170 7D 2B 4A 14 */ add r9, r11, r9 +/* 000193E4 00026174 93 89 00 04 */ stw r28, 0x4(r9) +/* 000193E8 00026178 81 7F 00 20 */ lwz r11, 0x20(r31) +/* 000193EC 0002617C 81 5F 00 0C */ lwz r10, 0xc(r31) +/* 000193F0 00026180 1D 6B 00 14 */ mulli r11, r11, 0x14 +/* 000193F4 00026184 7F CB 51 2E */ stwx r30, r11, r10 +/* 000193F8 00026188 81 3F 00 20 */ lwz r9, 0x20(r31) +/* 000193FC 0002618C 39 29 00 01 */ addi r9, r9, 0x1 +/* 00019400 00026190 91 3F 00 20 */ stw r9, 0x20(r31) +/* 00019404 00026194 40 9D 93 A0 */ ble cr7, .L_000127A4 +/* 00019408 00026198 80 01 00 3C */ lwz r0, 0x3c(r1) +/* 0001940C 0002619C 7C 08 03 A6 */ mtlr r0 +/* 00019410 000261A0 BB 01 00 18 */ lmw r24, 0x18(r1) +/* 00019414 000261A4 38 21 00 38 */ addi r1, r1, 0x38 +/* 00019418 000261A8 4E 80 00 20 */ blr +.endfn Resolve__10ICEManager + +# .text:0x1941C | size: 0x12C +# ICEManager::ChooseCameraPlaybackTrack +.fn ChooseCameraPlaybackTrack__10ICEManager, global +/* 0001941C 000261AC 94 21 FF C0 */ stwu r1, -0x40(r1) +/* 00019420 000261B0 7C 08 02 A6 */ mflr r0 +/* 00019424 000261B4 BF 41 00 28 */ stmw r26, 0x28(r1) +/* 00019428 000261B8 90 01 00 44 */ stw r0, 0x44(r1) +/* 0001942C 000261BC 38 00 00 00 */ li r0, 0x0 +/* 00019430 000261C0 7C 7F 1B 78 */ mr r31, r3 +/* 00019434 000261C4 90 1F 00 24 */ stw r0, 0x24(r31) +/* 00019438 000261C8 3F 40 00 00 */ lis r26, bUseOldDutch@ha +/* 0001943C 000261CC 90 1A 00 00 */ stw r0, bUseOldDutch@l(r26) +/* 00019440 000261D0 48 01 9F D9 */ bl .text+0x19FD8 +/* 00019444 000261D4 7C 7D 1B 79 */ mr. r29, r3 +/* 00019448 000261D8 41 82 94 E0 */ beq .L_00012928 +/* 0001944C 000261DC 81 3D 00 00 */ lwz r9, 0x0(r29) +/* 00019450 000261E0 A8 69 00 08 */ lha r3, 0x8(r9) +/* 00019454 000261E4 80 09 00 0C */ lwz r0, 0xc(r9) +/* 00019458 000261E8 7C 7D 1A 14 */ add r3, r29, r3 +/* 0001945C 000261EC 7C 08 03 A6 */ mtlr r0 +/* 00019460 000261F0 4E 80 00 21 */ blrl +/* 00019464 000261F4 7C 7B 1B 78 */ mr r27, r3 +/* 00019468 000261F8 7F E3 FB 78 */ mr r3, r31 +/* 0001946C 000261FC 7F 64 DB 78 */ mr r4, r27 +/* 00019470 00026200 48 01 83 19 */ bl .text+0x18318 +/* 00019474 00026204 7C 7C 1B 79 */ mr. r28, r3 +/* 00019478 00026208 41 82 95 20 */ beq .L_00012998 +/* 0001947C 0002620C 81 3D 00 00 */ lwz r9, 0x0(r29) +/* 00019480 00026210 3F C0 00 00 */ lis r30, .rodata+0xE30@ha +/* 00019484 00026214 3B DE 0E 30 */ addi r30, r30, .rodata+0xE30@l +/* 00019488 00026218 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0001948C 0002621C 80 09 00 14 */ lwz r0, 0x14(r9) +/* 00019490 00026220 7C 7D 1A 14 */ add r3, r29, r3 +/* 00019494 00026224 7C 08 03 A6 */ mtlr r0 +/* 00019498 00026228 4E 80 00 21 */ blrl +/* 0001949C 0002622C 7C 65 1B 78 */ mr r5, r3 +/* 000194A0 00026230 7F C4 F3 78 */ mr r4, r30 +/* 000194A4 00026234 38 61 00 08 */ addi r3, r1, 0x8 +/* 000194A8 00026238 4C C6 31 82 */ crclr cr1eq +/* 000194AC 0002623C 48 00 00 01 */ bl bSPrintf__FPcPCce +/* 000194B0 00026240 7F 83 E3 78 */ mr r3, r28 +.L_000194B4: +/* 000194B4 00026244 38 81 00 08 */ addi r4, r1, 0x8 +/* 000194B8 00026248 48 01 7D 09 */ bl .text+0x17D08 +/* 000194BC 0002624C 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000194C0 00026250 90 7F 00 24 */ stw r3, 0x24(r31) +/* 000194C4 00026254 40 82 94 D4 */ bne .L_00012998 +/* 000194C8 00026258 7F 63 DB 78 */ mr r3, r27 +/* 000194CC 0002625C 38 81 00 18 */ addi r4, r1, 0x18 +/* 000194D0 00026260 48 01 A0 79 */ bl .text+0x1A078 +/* 000194D4 00026264 38 00 00 01 */ li r0, 0x1 +/* 000194D8 00026268 90 1A 00 00 */ stw r0, bUseOldDutch@l(r26) +/* 000194DC 0002626C 48 01 95 20 */ b .text+0x19520 +/* 000194E0 00026270 7F E3 FB 78 */ mr r3, r31 +/* 000194E4 00026274 48 01 86 15 */ bl .text+0x18614 +/* 000194E8 00026278 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000194EC 0002627C 90 7F 00 24 */ stw r3, 0x24(r31) +/* 000194F0 00026280 40 82 95 20 */ bne .L_00012A10 +/* 000194F4 00026284 48 01 5F FD */ bl .text+0x15FFC +/* 000194F8 00026288 80 9F 00 08 */ lwz r4, 0x8(r31) +.L_000194FC: +/* 000194FC 0002628C 80 BF 00 1C */ lwz r5, 0x1c(r31) +/* 00019500 00026290 48 01 77 1D */ bl .text+0x1771C +/* 00019504 00026294 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00019508 00026298 90 7F 00 24 */ stw r3, 0x24(r31) +/* 0001950C 0002629C 41 82 95 20 */ beq .L_00012A2C +/* 00019510 000262A0 7F E3 FB 78 */ mr r3, r31 +/* 00019514 000262A4 48 01 82 B1 */ bl .text+0x182B0 +/* 00019518 000262A8 81 3F 00 24 */ lwz r9, 0x24(r31) +/* 0001951C 000262AC D0 29 00 0C */ stfs f1, 0xc(r9) +/* 00019520 000262B0 80 1F 00 24 */ lwz r0, 0x24(r31) +/* 00019524 000262B4 38 60 00 01 */ li r3, 0x1 +/* 00019528 000262B8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0001952C 000262BC 40 82 95 34 */ bne .L_00012A60 +/* 00019530 000262C0 38 60 00 00 */ li r3, 0x0 +/* 00019534 000262C4 80 01 00 44 */ lwz r0, 0x44(r1) +/* 00019538 000262C8 7C 08 03 A6 */ mtlr r0 +/* 0001953C 000262CC BB 41 00 28 */ lmw r26, 0x28(r1) +/* 00019540 000262D0 38 21 00 40 */ addi r1, r1, 0x40 +/* 00019544 000262D4 4E 80 00 20 */ blr +.endfn ChooseCameraPlaybackTrack__10ICEManager + +# .text:0x19548 | size: 0x2B0 +.fn ChooseGoodSceneCameraTrackIndex__10ICEManagerUiPCQ23ICE7Matrix4, global +/* 00019548 000262D8 94 21 FF 40 */ stwu r1, -0xc0(r1) +/* 0001954C 000262DC 7C 08 02 A6 */ mflr r0 +/* 00019550 000262E0 F3 E1 00 B8 */ psq_st f31, 0xb8(r1), 0, qr0 +/* 00019554 000262E4 BE 01 00 78 */ stmw r16, 0x78(r1) +/* 00019558 000262E8 90 01 00 C4 */ stw r0, 0xc4(r1) +/* 0001955C 000262EC 7C 74 1B 78 */ mr r20, r3 +/* 00019560 000262F0 7C 91 23 78 */ mr r17, r4 +/* 00019564 000262F4 38 61 00 08 */ addi r3, r1, 0x8 +/* 00019568 000262F8 7C B6 2B 78 */ mr r22, r5 +/* 0001956C 000262FC 7C 72 1B 78 */ mr r18, r3 +/* 00019570 00026300 3A 60 00 00 */ li r19, 0x0 +/* 00019574 00026304 48 01 9E 39 */ bl .text+0x19E38 +/* 00019578 00026308 3A A0 00 00 */ li r21, 0x0 +/* 0001957C 0002630C 80 14 00 14 */ lwz r0, 0x14(r20) +/* 00019580 00026310 7C 13 00 00 */ cmpw r19, r0 +/* 00019584 00026314 40 80 97 DC */ bge .L_00012D60 +/* 00019588 00026318 3E 00 00 00 */ lis r16, .rodata+0xE3C@ha +/* 0001958C 0002631C 1D 75 00 14 */ mulli r11, r21, 0x14 +/* 00019590 00026320 81 34 00 00 */ lwz r9, 0x0(r20) +/* 00019594 00026324 7C 0B 48 2E */ lwzx r0, r11, r9 +/* 00019598 00026328 7E EB 4A 14 */ add r23, r11, r9 +/* 0001959C 0002632C 7C 11 00 00 */ cmpw r17, r0 +/* 000195A0 00026330 40 82 97 CC */ bne .L_00012D6C +/* 000195A4 00026334 83 37 00 08 */ lwz r25, 0x8(r23) +/* 000195A8 00026338 2C 19 00 01 */ cmpwi r25, 0x1 +/* 000195AC 0002633C 40 81 97 DC */ ble .L_00012D88 +/* 000195B0 00026340 3B 40 00 00 */ li r26, 0x0 +/* 000195B4 00026344 C3 F0 0E 3C */ lfs f31, .rodata+0xE3C@l(r16) +/* 000195B8 00026348 7C 1A C8 00 */ cmpw r26, r25 +/* 000195BC 0002634C 40 80 97 CC */ bge .L_00012D88 +/* 000195C0 00026350 3B 01 00 68 */ addi r24, r1, 0x68 +/* 000195C4 00026354 7E E3 BB 78 */ mr r3, r23 +/* 000195C8 00026358 7F 44 D3 78 */ mr r4, r26 +/* 000195CC 0002635C 48 01 7C CD */ bl .text+0x17CCC +/* 000195D0 00026360 A8 03 00 14 */ lha r0, 0x14(r3) +/* 000195D4 00026364 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000195D8 00026368 40 81 97 C0 */ ble .L_00012D98 +/* 000195DC 0002636C 35 20 FF FF */ subic. r9, r0, 0x1 +/* 000195E0 00026370 39 60 00 00 */ li r11, 0x0 +.L_000195E4: +/* 000195E4 00026374 38 00 00 00 */ li r0, 0x0 +/* 000195E8 00026378 40 80 95 F0 */ bge .L_00012BD8 +/* 000195EC 0002637C 7D 20 4B 78 */ mr r0, r9 +/* 000195F0 00026380 7C 0B 00 00 */ cmpw r11, r0 +/* 000195F4 00026384 3B 80 00 00 */ li r28, 0x0 +/* 000195F8 00026388 40 82 96 00 */ bne .L_00012BF8 +/* 000195FC 0002638C 3B 83 00 28 */ addi r28, r3, 0x28 +/* 00019600 00026390 88 1C 00 01 */ lbz r0, 0x1(r28) +/* 00019604 00026394 3B A0 00 00 */ li r29, 0x0 +/* 00019608 00026398 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0001960C 0002639C 41 82 96 14 */ beq .L_00012C20 +/* 00019610 000263A0 3B A0 00 01 */ li r29, 0x1 +/* 00019614 000263A4 1F DD 00 84 */ mulli r30, r29, 0x84 +/* 00019618 000263A8 3B E1 00 48 */ addi r31, r1, 0x48 +/* 0001961C 000263AC 7F A4 EB 78 */ mr r4, r29 +/* 00019620 000263B0 7F E5 FB 78 */ mr r5, r31 +/* 00019624 000263B4 7F DB F3 78 */ mr r27, r30 +/* 00019628 000263B8 7F DC F2 14 */ add r30, r28, r30 +/* 0001962C 000263BC 7F C3 F3 78 */ mr r3, r30 +/* 00019630 000263C0 48 01 35 FD */ bl .text+0x135FC +/* 00019634 000263C4 88 1E 00 04 */ lbz r0, 0x4(r30) +/* 00019638 000263C8 2C 00 00 02 */ cmpwi r0, 0x2 +/* 0001963C 000263CC 41 82 96 5C */ beq .L_00012C98 +/* 00019640 000263D0 41 81 96 50 */ bgt .L_00012C90 +/* 00019644 000263D4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 00019648 000263D8 41 82 96 90 */ beq .L_00012CD8 +/* 0001964C 000263DC 48 01 96 B4 */ b .text+0x196B4 +/* 00019650 000263E0 2C 00 00 03 */ cmpwi r0, 0x3 +/* 00019654 000263E4 41 82 96 A4 */ beq .L_00012CF8 +/* 00019658 000263E8 48 01 96 B4 */ b .text+0x196B4 +/* 0001965C 000263EC C0 01 00 48 */ lfs f0, 0x48(r1) +/* 00019660 000263F0 C1 A1 00 4C */ lfs f13, 0x4c(r1) +/* 00019664 000263F4 C1 81 00 50 */ lfs f12, 0x50(r1) +/* 00019668 000263F8 C1 61 00 38 */ lfs f11, 0x38(r1) +/* 0001966C 000263FC C1 41 00 3C */ lfs f10, 0x3c(r1) +/* 00019670 00026400 C1 21 00 40 */ lfs f9, 0x40(r1) +/* 00019674 00026404 EC 00 58 2A */ fadds f0, f0, f11 +/* 00019678 00026408 ED AD 50 2A */ fadds f13, f13, f10 +/* 0001967C 0002640C D0 01 00 48 */ stfs f0, 0x48(r1) +/* 00019680 00026410 ED 8C 48 2A */ fadds f12, f12, f9 +/* 00019684 00026414 D1 A1 00 4C */ stfs f13, 0x4c(r1) +/* 00019688 00026418 D1 81 00 50 */ stfs f12, 0x50(r1) +/* 0001968C 0002641C 48 01 96 B4 */ b .text+0x196B4 +/* 00019690 00026420 7F E3 FB 78 */ mr r3, r31 +/* 00019694 00026424 38 81 00 08 */ addi r4, r1, 0x8 +/* 00019698 00026428 7C 65 1B 78 */ mr r5, r3 +/* 0001969C 0002642C 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 +/* 000196A0 00026430 48 01 96 B4 */ b .text+0x196B4 +/* 000196A4 00026434 7F E3 FB 78 */ mr r3, r31 +.L_000196A8: +/* 000196A8 00026438 7E C4 B3 78 */ mr r4, r22 +/* 000196AC 0002643C 7C 65 1B 78 */ mr r5, r3 +/* 000196B0 00026440 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 +/* 000196B4 00026444 7F DC DA 14 */ add r30, r28, r27 +/* 000196B8 00026448 3B E1 00 58 */ addi r31, r1, 0x58 +/* 000196BC 0002644C 7F C3 F3 78 */ mr r3, r30 +/* 000196C0 00026450 7F A4 EB 78 */ mr r4, r29 +/* 000196C4 00026454 7F E5 FB 78 */ mr r5, r31 +/* 000196C8 00026458 48 01 36 75 */ bl .text+0x13674 +/* 000196CC 0002645C 8B DE 00 05 */ lbz r30, 0x5(r30) +/* 000196D0 00026460 2C 1E 00 02 */ cmpwi r30, 0x2 +.L_000196D4: +/* 000196D4 00026464 41 82 96 F4 */ beq .L_00012DC8 +/* 000196D8 00026468 41 81 96 E8 */ bgt .L_00012DC0 +/* 000196DC 0002646C 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 000196E0 00026470 41 82 97 28 */ beq .L_00012E08 +/* 000196E4 00026474 48 01 97 4C */ b .text+0x1974C +/* 000196E8 00026478 2C 1E 00 03 */ cmpwi r30, 0x3 +/* 000196EC 0002647C 41 82 97 3C */ beq .L_00012E28 +/* 000196F0 00026480 48 01 97 4C */ b .text+0x1974C +/* 000196F4 00026484 C0 01 00 58 */ lfs f0, 0x58(r1) +/* 000196F8 00026488 C1 A1 00 5C */ lfs f13, 0x5c(r1) +/* 000196FC 0002648C C1 81 00 60 */ lfs f12, 0x60(r1) +/* 00019700 00026490 C1 61 00 38 */ lfs f11, 0x38(r1) +/* 00019704 00026494 C1 41 00 3C */ lfs f10, 0x3c(r1) +/* 00019708 00026498 C1 21 00 40 */ lfs f9, 0x40(r1) +/* 0001970C 0002649C EC 00 58 2A */ fadds f0, f0, f11 +/* 00019710 000264A0 ED AD 50 2A */ fadds f13, f13, f10 +/* 00019714 000264A4 D0 01 00 58 */ stfs f0, 0x58(r1) +/* 00019718 000264A8 ED 8C 48 2A */ fadds f12, f12, f9 +/* 0001971C 000264AC D1 A1 00 5C */ stfs f13, 0x5c(r1) +.L_00019720: +/* 00019720 000264B0 D1 81 00 60 */ stfs f12, 0x60(r1) +/* 00019724 000264B4 48 01 97 4C */ b .text+0x1974C +/* 00019728 000264B8 7F E3 FB 78 */ mr r3, r31 +.L_0001972C: +/* 0001972C 000264BC 38 81 00 08 */ addi r4, r1, 0x8 +/* 00019730 000264C0 7C 65 1B 78 */ mr r5, r3 +/* 00019734 000264C4 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 +/* 00019738 000264C8 48 01 97 4C */ b .text+0x1974C +/* 0001973C 000264CC 7F E3 FB 78 */ mr r3, r31 +/* 00019740 000264D0 7E C4 B3 78 */ mr r4, r22 +/* 00019744 000264D4 7C 65 1B 78 */ mr r5, r3 +/* 00019748 000264D8 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 +/* 0001974C 000264DC C1 A1 00 58 */ lfs f13, 0x58(r1) +/* 00019750 000264E0 7F 03 C3 78 */ mr r3, r24 +.L_00019754: +/* 00019754 000264E4 C1 81 00 5C */ lfs f12, 0x5c(r1) +/* 00019758 000264E8 7F 04 C3 78 */ mr r4, r24 +/* 0001975C 000264EC C1 61 00 48 */ lfs f11, 0x48(r1) +/* 00019760 000264F0 C1 41 00 4C */ lfs f10, 0x4c(r1) +.L_00019764: +/* 00019764 000264F4 C0 01 00 50 */ lfs f0, 0x50(r1) +/* 00019768 000264F8 ED 6B 68 28 */ fsubs f11, f11, f13 +/* 0001976C 000264FC C1 21 00 60 */ lfs f9, 0x60(r1) +/* 00019770 00026500 ED 4A 60 28 */ fsubs f10, f10, f12 +/* 00019774 00026504 D1 61 00 68 */ stfs f11, 0x68(r1) +/* 00019778 00026508 EC 00 48 28 */ fsubs f0, f0, f9 +/* 0001977C 0002650C D1 41 00 6C */ stfs f10, 0x6c(r1) +/* 00019780 00026510 D0 01 00 70 */ stfs f0, 0x70(r1) +/* 00019784 00026514 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 +/* 00019788 00026518 C1 A1 00 0C */ lfs f13, 0xc(r1) +/* 0001978C 0002651C C1 81 00 6C */ lfs f12, 0x6c(r1) +/* 00019790 00026520 C0 01 00 68 */ lfs f0, 0x68(r1) +/* 00019794 00026524 ED 8C 03 72 */ fmuls f12, f12, f13 +/* 00019798 00026528 C1 41 00 08 */ lfs f10, 0x8(r1) +/* 0001979C 0002652C C1 61 00 70 */ lfs f11, 0x70(r1) +/* 000197A0 00026530 C1 B2 00 08 */ lfs f13, 0x8(r18) +/* 000197A4 00026534 EC 00 62 BA */ fmadds f0, f0, f10, f12 +/* 000197A8 00026538 EC 0B 03 7A */ fmadds f0, f11, f13, f0 +/* 000197AC 0002653C FC 1F 00 00 */ fcmpu cr0, f31, f0 +/* 000197B0 00026540 4C 62 0B 82 */ cror un, eq, gt +/* 000197B4 00026544 41 83 97 C0 */ bso .L_00012F74 +/* 000197B8 00026548 FF E0 00 90 */ fmr f31, f0 +.L_000197BC: +/* 000197BC 0002654C 7F 53 D3 78 */ mr r19, r26 +/* 000197C0 00026550 3B 5A 00 01 */ addi r26, r26, 0x1 +/* 000197C4 00026554 7C 1A C8 00 */ cmpw r26, r25 +/* 000197C8 00026558 41 80 95 C4 */ blt .L_00012D8C +/* 000197CC 0002655C 80 14 00 14 */ lwz r0, 0x14(r20) +/* 000197D0 00026560 3A B5 00 01 */ addi r21, r21, 0x1 +/* 000197D4 00026564 7C 15 00 00 */ cmpw r21, r0 +/* 000197D8 00026568 41 80 95 8C */ blt .L_00012D64 +/* 000197DC 0002656C 7E 63 9B 78 */ mr r3, r19 +/* 000197E0 00026570 80 01 00 C4 */ lwz r0, 0xc4(r1) +/* 000197E4 00026574 7C 08 03 A6 */ mtlr r0 +.L_000197E8: +/* 000197E8 00026578 BA 01 00 78 */ lmw r16, 0x78(r1) +/* 000197EC 0002657C E3 E1 00 B8 */ psq_l f31, 0xb8(r1), 0, qr0 +/* 000197F0 00026580 38 21 00 C0 */ addi r1, r1, 0xc0 +/* 000197F4 00026584 4E 80 00 20 */ blr +.endfn ChooseGoodSceneCameraTrackIndex__10ICEManagerUiPCQ23ICE7Matrix4 + +# .text:0x197F8 | size: 0x594 +.fn GetSlope__10ICEManagerPQ23ICE7Vector3T1PfT3P7ICEDataiP8ICETrack, global +/* 000197F8 00026588 94 21 FE D8 */ stwu r1, -0x128(r1) +/* 000197FC 0002658C 7C 08 02 A6 */ mflr r0 +/* 00019800 00026590 F2 61 00 C0 */ psq_st f19, 0xc0(r1), 0, qr0 +/* 00019804 00026594 F2 81 00 C8 */ psq_st f20, 0xc8(r1), 0, qr0 +/* 00019808 00026598 F2 A1 00 D0 */ psq_st f21, 0xd0(r1), 0, qr0 +/* 0001980C 0002659C F2 C1 00 D8 */ psq_st f22, 0xd8(r1), 0, qr0 +/* 00019810 000265A0 F2 E1 00 E0 */ psq_st f23, 0xe0(r1), 0, qr0 +/* 00019814 000265A4 F3 01 00 E8 */ psq_st f24, 0xe8(r1), 0, qr0 +/* 00019818 000265A8 F3 21 00 F0 */ psq_st f25, 0xf0(r1), 0, qr0 +/* 0001981C 000265AC F3 41 00 F8 */ psq_st f26, 0xf8(r1), 0, qr0 +/* 00019820 000265B0 F3 61 01 00 */ psq_st f27, 0x100(r1), 0, qr0 +/* 00019824 000265B4 F3 81 01 08 */ psq_st f28, 0x108(r1), 0, qr0 +/* 00019828 000265B8 F3 A1 01 10 */ psq_st f29, 0x110(r1), 0, qr0 +/* 0001982C 000265BC F3 C1 01 18 */ psq_st f30, 0x118(r1), 0, qr0 +/* 00019830 000265C0 F3 E1 01 20 */ psq_st f31, 0x120(r1), 0, qr0 +/* 00019834 000265C4 BE 41 00 88 */ stmw r18, 0x88(r1) +/* 00019838 000265C8 90 01 01 2C */ stw r0, 0x12c(r1) +/* 0001983C 000265CC 3D 60 00 00 */ lis r11, .rodata+0xE40@ha +/* 00019840 000265D0 7D 1F 43 78 */ mr r31, r8 +/* 00019844 000265D4 C0 0B 0E 40 */ lfs f0, .rodata+0xE40@l(r11) +/* 00019848 000265D8 39 01 00 08 */ addi r8, r1, 0x8 +/* 0001984C 000265DC 88 1F 00 00 */ lbz r0, 0x0(r31) +/* 00019850 000265E0 7D 17 43 78 */ mr r23, r8 +/* 00019854 000265E4 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 00019858 000265E8 FF C0 00 90 */ fmr f30, f0 +/* 0001985C 000265EC D0 01 00 0C */ stfs f0, 0xc(r1) +/* 00019860 000265F0 7C 79 1B 78 */ mr r25, r3 +/* 00019864 000265F4 D0 08 00 08 */ stfs f0, 0x8(r8) +/* 00019868 000265F8 7C 96 23 78 */ mr r22, r4 +.L_0001986C: +/* 0001986C 000265FC 7C B5 2B 78 */ mr r21, r5 +/* 00019870 00026600 7C D3 33 78 */ mr r19, r6 +/* 00019874 00026604 7C F2 3B 78 */ mr r18, r7 +/* 00019878 00026608 7D 38 4B 78 */ mr r24, r9 +/* 0001987C 0002660C 7D 5A 53 78 */ mr r26, r10 +/* 00019880 00026610 2C 00 00 00 */ cmpwi r0, 0x0 +.L_00019884: +/* 00019884 00026614 D0 01 00 14 */ stfs f0, 0x14(r1) +/* 00019888 00026618 FF E0 F0 90 */ fmr f31, f30 +/* 0001988C 0002661C D0 01 00 18 */ stfs f0, 0x18(r1) +/* 00019890 00026620 3B 61 00 18 */ addi r27, r1, 0x18 +/* 00019894 00026624 D0 01 00 1C */ stfs f0, 0x1c(r1) +/* 00019898 00026628 D0 01 00 20 */ stfs f0, 0x20(r1) +/* 0001989C 0002662C D0 01 00 24 */ stfs f0, 0x24(r1) +/* 000198A0 00026630 41 82 9C FC */ beq .L_0001359C +/* 000198A4 00026634 7F E4 FB 78 */ mr r4, r31 +/* 000198A8 00026638 7F 05 C3 78 */ mr r5, r24 +/* 000198AC 0002663C 7F 46 D3 78 */ mr r6, r26 +/* 000198B0 00026640 48 01 89 9D */ bl .text+0x1899C +/* 000198B4 00026644 3A 80 00 00 */ li r20, 0x0 +/* 000198B8 00026648 7C 7C 1B 79 */ mr. r28, r3 +/* 000198BC 0002664C 41 82 9B BC */ beq .L_00013478 +/* 000198C0 00026650 88 1C 00 00 */ lbz r0, 0x0(r28) +/* 000198C4 00026654 2C 00 00 00 */ cmpwi r0, 0x0 +/* 000198C8 00026658 41 82 9B BC */ beq .L_00013484 +.L_000198CC: +/* 000198CC 0002665C 7F E3 FB 78 */ mr r3, r31 +/* 000198D0 00026660 7F 04 C3 78 */ mr r4, r24 +/* 000198D4 00026664 7F 85 E3 78 */ mr r5, r28 +/* 000198D8 00026668 6B 06 00 01 */ xori r6, r24, 0x1 +/* 000198DC 0002666C 48 01 36 ED */ bl .text+0x136EC +/* 000198E0 00026670 2C 03 00 00 */ cmpwi r3, 0x0 +/* 000198E4 00026674 41 82 9B BC */ beq .L_000134A0 +/* 000198E8 00026678 3B C1 00 28 */ addi r30, r1, 0x28 +/* 000198EC 0002667C 3B A1 00 38 */ addi r29, r1, 0x38 +/* 000198F0 00026680 D3 C1 00 84 */ stfs f30, 0x84(r1) +/* 000198F4 00026684 7F 83 E3 78 */ mr r3, r28 +/* 000198F8 00026688 D3 C1 00 28 */ stfs f30, 0x28(r1) +/* 000198FC 0002668C 38 80 00 00 */ li r4, 0x0 +/* 00019900 00026690 D3 C1 00 2C */ stfs f30, 0x2c(r1) +/* 00019904 00026694 7F C5 F3 78 */ mr r5, r30 +/* 00019908 00026698 D3 C1 00 30 */ stfs f30, 0x30(r1) +/* 0001990C 0002669C 3A 80 00 01 */ li r20, 0x1 +.L_00019910: +/* 00019910 000266A0 D3 C1 00 34 */ stfs f30, 0x34(r1) +.L_00019914: +/* 00019914 000266A4 D3 C1 00 38 */ stfs f30, 0x38(r1) +/* 00019918 000266A8 D3 C1 00 3C */ stfs f30, 0x3c(r1) +/* 0001991C 000266AC D3 C1 00 40 */ stfs f30, 0x40(r1) +/* 00019920 000266B0 D3 C1 00 44 */ stfs f30, 0x44(r1) +.L_00019924: +/* 00019924 000266B4 D3 C1 00 48 */ stfs f30, 0x48(r1) +/* 00019928 000266B8 D3 C1 00 4C */ stfs f30, 0x4c(r1) +/* 0001992C 000266BC D3 C1 00 50 */ stfs f30, 0x50(r1) +/* 00019930 000266C0 D3 C1 00 54 */ stfs f30, 0x54(r1) +/* 00019934 000266C4 D3 C1 00 58 */ stfs f30, 0x58(r1) +/* 00019938 000266C8 D3 C1 00 5C */ stfs f30, 0x5c(r1) +/* 0001993C 000266CC D3 C1 00 60 */ stfs f30, 0x60(r1) +/* 00019940 000266D0 D3 C1 00 64 */ stfs f30, 0x64(r1) +/* 00019944 000266D4 D3 C1 00 68 */ stfs f30, 0x68(r1) +/* 00019948 000266D8 D3 C1 00 6C */ stfs f30, 0x6c(r1) +/* 0001994C 000266DC D3 C1 00 70 */ stfs f30, 0x70(r1) +/* 00019950 000266E0 D3 C1 00 74 */ stfs f30, 0x74(r1) +/* 00019954 000266E4 D3 C1 00 78 */ stfs f30, 0x78(r1) +/* 00019958 000266E8 D3 C1 00 7C */ stfs f30, 0x7c(r1) +/* 0001995C 000266EC D3 C1 00 80 */ stfs f30, 0x80(r1) +/* 00019960 000266F0 48 01 35 FD */ bl .text+0x135FC +/* 00019964 000266F4 7F 83 E3 78 */ mr r3, r28 +/* 00019968 000266F8 38 80 00 01 */ li r4, 0x1 +/* 0001996C 000266FC 7F A5 EB 78 */ mr r5, r29 +/* 00019970 00026700 48 01 35 FD */ bl .text+0x135FC +/* 00019974 00026704 C1 61 00 28 */ lfs f11, 0x28(r1) +/* 00019978 00026708 7F 83 E3 78 */ mr r3, r28 +/* 0001997C 0002670C C1 41 00 2C */ lfs f10, 0x2c(r1) +/* 00019980 00026710 38 80 00 00 */ li r4, 0x0 +/* 00019984 00026714 C1 21 00 30 */ lfs f9, 0x30(r1) +/* 00019988 00026718 7F C5 F3 78 */ mr r5, r30 +/* 0001998C 0002671C C1 A1 00 38 */ lfs f13, 0x38(r1) +/* 00019990 00026720 C1 81 00 3C */ lfs f12, 0x3c(r1) +/* 00019994 00026724 C0 01 00 40 */ lfs f0, 0x40(r1) +/* 00019998 00026728 ED AD 58 28 */ fsubs f13, f13, f11 +/* 0001999C 0002672C ED 8C 50 28 */ fsubs f12, f12, f10 +/* 000199A0 00026730 D1 A1 00 48 */ stfs f13, 0x48(r1) +/* 000199A4 00026734 EC 00 48 28 */ fsubs f0, f0, f9 +.L_000199A8: +/* 000199A8 00026738 D1 81 00 4C */ stfs f12, 0x4c(r1) +/* 000199AC 0002673C D0 01 00 50 */ stfs f0, 0x50(r1) +/* 000199B0 00026740 48 01 36 75 */ bl .text+0x13674 +/* 000199B4 00026744 7F 83 E3 78 */ mr r3, r28 +/* 000199B8 00026748 38 80 00 01 */ li r4, 0x1 +/* 000199BC 0002674C 7F A5 EB 78 */ mr r5, r29 +/* 000199C0 00026750 48 01 36 75 */ bl .text+0x13674 +/* 000199C4 00026754 C1 61 00 28 */ lfs f11, 0x28(r1) +/* 000199C8 00026758 7F E3 FB 78 */ mr r3, r31 +/* 000199CC 0002675C C1 41 00 2C */ lfs f10, 0x2c(r1) +/* 000199D0 00026760 38 80 00 00 */ li r4, 0x0 +/* 000199D4 00026764 C1 21 00 30 */ lfs f9, 0x30(r1) +/* 000199D8 00026768 7F C5 F3 78 */ mr r5, r30 +/* 000199DC 0002676C C1 A1 00 38 */ lfs f13, 0x38(r1) +/* 000199E0 00026770 C1 81 00 3C */ lfs f12, 0x3c(r1) +/* 000199E4 00026774 C0 01 00 40 */ lfs f0, 0x40(r1) +.L_000199E8: +/* 000199E8 00026778 ED AD 58 28 */ fsubs f13, f13, f11 +/* 000199EC 0002677C ED 8C 50 28 */ fsubs f12, f12, f10 +/* 000199F0 00026780 D1 A1 00 68 */ stfs f13, 0x68(r1) +/* 000199F4 00026784 EC 00 48 28 */ fsubs f0, f0, f9 +/* 000199F8 00026788 D1 81 00 6C */ stfs f12, 0x6c(r1) +/* 000199FC 0002678C D0 01 00 70 */ stfs f0, 0x70(r1) +/* 00019A00 00026790 C2 7C 00 4C */ lfs f19, 0x4c(r28) +/* 00019A04 00026794 C2 9C 00 54 */ lfs f20, 0x54(r28) +/* 00019A08 00026798 C2 BC 00 50 */ lfs f21, 0x50(r28) +/* 00019A0C 0002679C C2 DC 00 58 */ lfs f22, 0x58(r28) +/* 00019A10 000267A0 48 01 35 FD */ bl .text+0x135FC +/* 00019A14 000267A4 7F E3 FB 78 */ mr r3, r31 +.L_00019A18: +/* 00019A18 000267A8 38 80 00 01 */ li r4, 0x1 +/* 00019A1C 000267AC 7F A5 EB 78 */ mr r5, r29 +/* 00019A20 000267B0 48 01 35 FD */ bl .text+0x135FC +/* 00019A24 000267B4 C1 61 00 28 */ lfs f11, 0x28(r1) +.L_00019A28: +/* 00019A28 000267B8 7F C5 F3 78 */ mr r5, r30 +/* 00019A2C 000267BC C1 41 00 2C */ lfs f10, 0x2c(r1) +/* 00019A30 000267C0 7F E3 FB 78 */ mr r3, r31 +/* 00019A34 000267C4 C1 21 00 30 */ lfs f9, 0x30(r1) +/* 00019A38 000267C8 38 80 00 00 */ li r4, 0x0 +/* 00019A3C 000267CC C1 A1 00 38 */ lfs f13, 0x38(r1) +/* 00019A40 000267D0 C1 81 00 3C */ lfs f12, 0x3c(r1) +/* 00019A44 000267D4 C0 01 00 40 */ lfs f0, 0x40(r1) +/* 00019A48 000267D8 ED AD 58 28 */ fsubs f13, f13, f11 +/* 00019A4C 000267DC ED 8C 50 28 */ fsubs f12, f12, f10 +/* 00019A50 000267E0 D1 A1 00 58 */ stfs f13, 0x58(r1) +.L_00019A54: +/* 00019A54 000267E4 EC 00 48 28 */ fsubs f0, f0, f9 +/* 00019A58 000267E8 D1 81 00 5C */ stfs f12, 0x5c(r1) +/* 00019A5C 000267EC D0 01 00 60 */ stfs f0, 0x60(r1) +/* 00019A60 000267F0 48 01 36 75 */ bl .text+0x13674 +/* 00019A64 000267F4 7F A5 EB 78 */ mr r5, r29 +/* 00019A68 000267F8 7F E3 FB 78 */ mr r3, r31 +/* 00019A6C 000267FC 38 80 00 01 */ li r4, 0x1 +/* 00019A70 00026800 48 01 36 75 */ bl .text+0x13674 +/* 00019A74 00026804 C0 01 00 38 */ lfs f0, 0x38(r1) +/* 00019A78 00026808 7F 23 CB 78 */ mr r3, r25 +/* 00019A7C 0002680C C1 A1 00 3C */ lfs f13, 0x3c(r1) +/* 00019A80 00026810 7F E4 FB 78 */ mr r4, r31 +.L_00019A84: +/* 00019A84 00026814 C1 81 00 40 */ lfs f12, 0x40(r1) +/* 00019A88 00026818 7F 45 D3 78 */ mr r5, r26 +/* 00019A8C 0002681C C1 61 00 28 */ lfs f11, 0x28(r1) +/* 00019A90 00026820 C1 41 00 2C */ lfs f10, 0x2c(r1) +/* 00019A94 00026824 C1 21 00 30 */ lfs f9, 0x30(r1) +/* 00019A98 00026828 EC 00 58 28 */ fsubs f0, f0, f11 +/* 00019A9C 0002682C C2 FF 00 4C */ lfs f23, 0x4c(r31) +/* 00019AA0 00026830 ED AD 50 28 */ fsubs f13, f13, f10 +.L_00019AA4: +/* 00019AA4 00026834 C3 1F 00 58 */ lfs f24, 0x58(r31) +/* 00019AA8 00026838 ED 8C 48 28 */ fsubs f12, f12, f9 +/* 00019AAC 0002683C C3 3F 00 54 */ lfs f25, 0x54(r31) +/* 00019AB0 00026840 C3 5F 00 50 */ lfs f26, 0x50(r31) +/* 00019AB4 00026844 D0 01 00 78 */ stfs f0, 0x78(r1) +/* 00019AB8 00026848 D1 A1 00 7C */ stfs f13, 0x7c(r1) +/* 00019ABC 0002684C D1 81 00 80 */ stfs f12, 0x80(r1) +/* 00019AC0 00026850 48 01 85 99 */ bl .text+0x18598 +/* 00019AC4 00026854 FF E0 08 90 */ fmr f31, f1 +/* 00019AC8 00026858 7F 23 CB 78 */ mr r3, r25 +/* 00019ACC 0002685C 7F 84 E3 78 */ mr r4, r28 +/* 00019AD0 00026860 7F 45 D3 78 */ mr r5, r26 +/* 00019AD4 00026864 48 01 85 99 */ bl .text+0x18598 +/* 00019AD8 00026868 EC 1F 08 2A */ fadds f0, f31, f1 +/* 00019ADC 0002686C 3D 60 00 00 */ lis r11, .rodata+0xE44@ha +/* 00019AE0 00026870 EF 9F 00 24 */ fdivs f28, f31, f0 +/* 00019AE4 00026874 3D 20 00 00 */ lis r9, .rodata+0xE48@ha +/* 00019AE8 00026878 C1 AB 0E 44 */ lfs f13, .rodata+0xE44@l(r11) +/* 00019AEC 0002687C C0 09 0E 48 */ lfs f0, .rodata+0xE48@l(r9) +/* 00019AF0 00026880 EF 6D E0 28 */ fsubs f27, f13, f28 +/* 00019AF4 00026884 FC 01 00 00 */ fcmpu cr0, f1, f0 +/* 00019AF8 00026888 4C 62 03 82 */ cror un, eq, lt +/* 00019AFC 0002688C 41 83 9B 08 */ bso .L_00013604 +/* 00019B00 00026890 EC 1F 08 24 */ fdivs f0, f31, f1 +/* 00019B04 00026894 EF 9C 00 32 */ fmuls f28, f28, f0 +/* 00019B08 00026898 57 00 10 3A */ slwi r0, r24, 2 +/* 00019B0C 0002689C 39 3F 00 14 */ addi r9, r31, 0x14 +/* 00019B10 000268A0 7F A9 04 2E */ lfsx f29, r9, r0 +/* 00019B14 000268A4 38 A1 00 58 */ addi r5, r1, 0x58 +/* 00019B18 000268A8 C0 01 00 48 */ lfs f0, 0x48(r1) +/* 00019B1C 000268AC 7E E4 BB 78 */ mr r4, r23 +/* 00019B20 000268B0 C1 A1 00 4C */ lfs f13, 0x4c(r1) +/* 00019B24 000268B4 EF FC 07 72 */ fmuls f31, f28, f29 +/* 00019B28 000268B8 C1 81 00 50 */ lfs f12, 0x50(r1) +/* 00019B2C 000268BC EC 00 07 F2 */ fmuls f0, f0, f31 +/* 00019B30 000268C0 ED AD 07 F2 */ fmuls f13, f13, f31 +/* 00019B34 000268C4 D0 01 00 08 */ stfs f0, 0x8(r1) +/* 00019B38 000268C8 ED 8C 07 F2 */ fmuls f12, f12, f31 +/* 00019B3C 000268CC D1 A1 00 0C */ stfs f13, 0xc(r1) +/* 00019B40 000268D0 EF DB 07 72 */ fmuls f30, f27, f29 +/* 00019B44 000268D4 D1 97 00 08 */ stfs f12, 0x8(r23) +/* 00019B48 000268D8 FC 20 F0 90 */ fmr f1, f30 +/* 00019B4C 000268DC 7E E3 BB 78 */ mr r3, r23 +/* 00019B50 000268E0 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +/* 00019B54 000268E4 C1 A1 00 68 */ lfs f13, 0x68(r1) +/* 00019B58 000268E8 FC 20 F0 90 */ fmr f1, f30 +/* 00019B5C 000268EC C1 81 00 6C */ lfs f12, 0x6c(r1) +/* 00019B60 000268F0 7F 63 DB 78 */ mr r3, r27 +/* 00019B64 000268F4 C0 01 00 70 */ lfs f0, 0x70(r1) +/* 00019B68 000268F8 ED AD 07 F2 */ fmuls f13, f13, f31 +/* 00019B6C 000268FC ED 8C 07 F2 */ fmuls f12, f12, f31 +/* 00019B70 00026900 D1 A1 00 18 */ stfs f13, 0x18(r1) +.L_00019B74: +/* 00019B74 00026904 EC 00 07 F2 */ fmuls f0, f0, f31 +/* 00019B78 00026908 D1 81 00 1C */ stfs f12, 0x1c(r1) +.L_00019B7C: +/* 00019B7C 0002690C D0 01 00 20 */ stfs f0, 0x20(r1) +/* 00019B80 00026910 7F 64 DB 78 */ mr r4, r27 +/* 00019B84 00026914 38 A1 00 78 */ addi r5, r1, 0x78 +/* 00019B88 00026918 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f +/* 00019B8C 0002691C ED 9A C0 28 */ fsubs f12, f26, f24 +.L_00019B90: +/* 00019B90 00026920 EC 19 B8 28 */ fsubs f0, f25, f23 +/* 00019B94 00026924 ED 75 B0 28 */ fsubs f11, f21, f22 +/* 00019B98 00026928 ED B4 98 28 */ fsubs f13, f20, f19 +/* 00019B9C 0002692C EC 00 06 F2 */ fmuls f0, f0, f27 +/* 00019BA0 00026930 ED 8C 06 F2 */ fmuls f12, f12, f27 +/* 00019BA4 00026934 ED AD 07 32 */ fmuls f13, f13, f28 +/* 00019BA8 00026938 ED 6B 07 32 */ fmuls f11, f11, f28 +/* 00019BAC 0002693C ED 8C 07 72 */ fmuls f12, f12, f29 +/* 00019BB0 00026940 EC 00 07 72 */ fmuls f0, f0, f29 +/* 00019BB4 00026944 EF ED 07 7A */ fmadds f31, f13, f29, f0 +/* 00019BB8 00026948 EF CB 67 7A */ fmadds f30, f11, f29, f12 +/* 00019BBC 0002694C 2C 14 00 00 */ cmpwi r20, 0x0 +/* 00019BC0 00026950 40 82 9C FC */ bne .L_000138BC +/* 00019BC4 00026954 3D 20 00 00 */ lis r9, .rodata+0xE40@ha +/* 00019BC8 00026958 38 A1 00 28 */ addi r5, r1, 0x28 +/* 00019BCC 0002695C C0 09 0E 40 */ lfs f0, .rodata+0xE40@l(r9) +/* 00019BD0 00026960 7F E3 FB 78 */ mr r3, r31 +/* 00019BD4 00026964 38 80 00 00 */ li r4, 0x0 +/* 00019BD8 00026968 D0 01 00 64 */ stfs f0, 0x64(r1) +/* 00019BDC 0002696C D0 01 00 28 */ stfs f0, 0x28(r1) +/* 00019BE0 00026970 D0 01 00 2C */ stfs f0, 0x2c(r1) +/* 00019BE4 00026974 D0 01 00 30 */ stfs f0, 0x30(r1) +.L_00019BE8: +/* 00019BE8 00026978 D0 01 00 34 */ stfs f0, 0x34(r1) +/* 00019BEC 0002697C D0 01 00 38 */ stfs f0, 0x38(r1) +.L_00019BF0: +/* 00019BF0 00026980 D0 01 00 3C */ stfs f0, 0x3c(r1) +.L_00019BF4: +/* 00019BF4 00026984 D0 01 00 40 */ stfs f0, 0x40(r1) +/* 00019BF8 00026988 D0 01 00 44 */ stfs f0, 0x44(r1) +/* 00019BFC 0002698C D0 01 00 48 */ stfs f0, 0x48(r1) +/* 00019C00 00026990 D0 01 00 4C */ stfs f0, 0x4c(r1) +/* 00019C04 00026994 D0 01 00 50 */ stfs f0, 0x50(r1) +/* 00019C08 00026998 D0 01 00 54 */ stfs f0, 0x54(r1) +/* 00019C0C 0002699C D0 01 00 58 */ stfs f0, 0x58(r1) +/* 00019C10 000269A0 D0 01 00 5C */ stfs f0, 0x5c(r1) +/* 00019C14 000269A4 D0 01 00 60 */ stfs f0, 0x60(r1) +/* 00019C18 000269A8 48 01 35 FD */ bl .text+0x135FC +/* 00019C1C 000269AC 38 A1 00 38 */ addi r5, r1, 0x38 +/* 00019C20 000269B0 7F E3 FB 78 */ mr r3, r31 +/* 00019C24 000269B4 38 80 00 01 */ li r4, 0x1 +/* 00019C28 000269B8 48 01 35 FD */ bl .text+0x135FC +/* 00019C2C 000269BC 38 A1 00 48 */ addi r5, r1, 0x48 +/* 00019C30 000269C0 7F E3 FB 78 */ mr r3, r31 +/* 00019C34 000269C4 38 80 00 00 */ li r4, 0x0 +/* 00019C38 000269C8 48 01 36 75 */ bl .text+0x13674 +/* 00019C3C 000269CC 7F E3 FB 78 */ mr r3, r31 +/* 00019C40 000269D0 38 80 00 01 */ li r4, 0x1 +.L_00019C44: +/* 00019C44 000269D4 38 A1 00 58 */ addi r5, r1, 0x58 +.L_00019C48: +/* 00019C48 000269D8 48 01 36 75 */ bl .text+0x13674 +/* 00019C4C 000269DC C1 A1 00 28 */ lfs f13, 0x28(r1) +/* 00019C50 000269E0 57 00 10 3A */ slwi r0, r24, 2 +.L_00019C54: +/* 00019C54 000269E4 C1 81 00 38 */ lfs f12, 0x38(r1) +/* 00019C58 000269E8 39 3F 00 14 */ addi r9, r31, 0x14 +/* 00019C5C 000269EC C1 61 00 2C */ lfs f11, 0x2c(r1) +/* 00019C60 000269F0 C0 01 00 3C */ lfs f0, 0x3c(r1) +/* 00019C64 000269F4 ED 8C 68 28 */ fsubs f12, f12, f13 +/* 00019C68 000269F8 C1 A1 00 30 */ lfs f13, 0x30(r1) +/* 00019C6C 000269FC EC 00 58 28 */ fsubs f0, f0, f11 +/* 00019C70 00026A00 C0 C1 00 40 */ lfs f6, 0x40(r1) +/* 00019C74 00026A04 C1 61 00 4C */ lfs f11, 0x4c(r1) +/* 00019C78 00026A08 C1 01 00 5C */ lfs f8, 0x5c(r1) +/* 00019C7C 00026A0C EC C6 68 28 */ fsubs f6, f6, f13 +/* 00019C80 00026A10 D1 81 00 08 */ stfs f12, 0x8(r1) +/* 00019C84 00026A14 D0 01 00 0C */ stfs f0, 0xc(r1) +/* 00019C88 00026A18 ED 08 58 28 */ fsubs f8, f8, f11 +/* 00019C8C 00026A1C C1 A1 00 48 */ lfs f13, 0x48(r1) +/* 00019C90 00026A20 C1 41 00 50 */ lfs f10, 0x50(r1) +.L_00019C94: +/* 00019C94 00026A24 C1 21 00 58 */ lfs f9, 0x58(r1) +/* 00019C98 00026A28 C0 E1 00 60 */ lfs f7, 0x60(r1) +.L_00019C9C: +/* 00019C9C 00026A2C 7C 09 04 2E */ lfsx f0, r9, r0 +/* 00019CA0 00026A30 ED 29 68 28 */ fsubs f9, f9, f13 +/* 00019CA4 00026A34 C1 61 00 0C */ lfs f11, 0xc(r1) +/* 00019CA8 00026A38 EC E7 50 28 */ fsubs f7, f7, f10 +.L_00019CAC: +/* 00019CAC 00026A3C C0 9F 00 4C */ lfs f4, 0x4c(r31) +/* 00019CB0 00026A40 ED 8C 00 32 */ fmuls f12, f12, f0 +/* 00019CB4 00026A44 C1 5F 00 58 */ lfs f10, 0x58(r31) +/* 00019CB8 00026A48 ED 6B 00 32 */ fmuls f11, f11, f0 +/* 00019CBC 00026A4C C0 BF 00 54 */ lfs f5, 0x54(r31) +/* 00019CC0 00026A50 EC C6 00 32 */ fmuls f6, f6, f0 +/* 00019CC4 00026A54 C1 BF 00 50 */ lfs f13, 0x50(r31) +/* 00019CC8 00026A58 ED 29 00 32 */ fmuls f9, f9, f0 +/* 00019CCC 00026A5C D1 81 00 08 */ stfs f12, 0x8(r1) +/* 00019CD0 00026A60 ED 08 00 32 */ fmuls f8, f8, f0 +/* 00019CD4 00026A64 D1 61 00 0C */ stfs f11, 0xc(r1) +/* 00019CD8 00026A68 EC E7 00 32 */ fmuls f7, f7, f0 +/* 00019CDC 00026A6C D0 D7 00 08 */ stfs f6, 0x8(r23) +/* 00019CE0 00026A70 ED 4A 28 28 */ fsubs f10, f10, f5 +.L_00019CE4: +/* 00019CE4 00026A74 ED AD 20 28 */ fsubs f13, f13, f4 +/* 00019CE8 00026A78 D1 21 00 18 */ stfs f9, 0x18(r1) +/* 00019CEC 00026A7C D1 01 00 1C */ stfs f8, 0x1c(r1) +.L_00019CF0: +/* 00019CF0 00026A80 EF E0 03 72 */ fmuls f31, f0, f13 +/* 00019CF4 00026A84 D0 E1 00 20 */ stfs f7, 0x20(r1) +/* 00019CF8 00026A88 EF C0 02 B2 */ fmuls f30, f0, f10 +/* 00019CFC 00026A8C 80 17 00 0C */ lwz r0, 0xc(r23) +/* 00019D00 00026A90 81 77 00 04 */ lwz r11, 0x4(r23) +/* 00019D04 00026A94 81 21 00 08 */ lwz r9, 0x8(r1) +/* 00019D08 00026A98 81 57 00 08 */ lwz r10, 0x8(r23) +/* 00019D0C 00026A9C 90 16 00 0C */ stw r0, 0xc(r22) +/* 00019D10 00026AA0 91 36 00 00 */ stw r9, 0x0(r22) +/* 00019D14 00026AA4 91 76 00 04 */ stw r11, 0x4(r22) +/* 00019D18 00026AA8 91 56 00 08 */ stw r10, 0x8(r22) +/* 00019D1C 00026AAC 80 1B 00 0C */ lwz r0, 0xc(r27) +/* 00019D20 00026AB0 81 3B 00 04 */ lwz r9, 0x4(r27) +/* 00019D24 00026AB4 81 7B 00 08 */ lwz r11, 0x8(r27) +/* 00019D28 00026AB8 81 01 00 18 */ lwz r8, 0x18(r1) +/* 00019D2C 00026ABC 90 15 00 0C */ stw r0, 0xc(r21) +/* 00019D30 00026AC0 91 15 00 00 */ stw r8, 0x0(r21) +.L_00019D34: +/* 00019D34 00026AC4 91 35 00 04 */ stw r9, 0x4(r21) +/* 00019D38 00026AC8 91 75 00 08 */ stw r11, 0x8(r21) +/* 00019D3C 00026ACC D3 F3 00 00 */ stfs f31, 0x0(r19) +/* 00019D40 00026AD0 D3 D2 00 00 */ stfs f30, 0x0(r18) +/* 00019D44 00026AD4 80 01 01 2C */ lwz r0, 0x12c(r1) +/* 00019D48 00026AD8 7C 08 03 A6 */ mtlr r0 +/* 00019D4C 00026ADC BA 41 00 88 */ lmw r18, 0x88(r1) +/* 00019D50 00026AE0 E2 61 00 C0 */ psq_l f19, 0xc0(r1), 0, qr0 +/* 00019D54 00026AE4 E2 81 00 C8 */ psq_l f20, 0xc8(r1), 0, qr0 +/* 00019D58 00026AE8 E2 A1 00 D0 */ psq_l f21, 0xd0(r1), 0, qr0 +/* 00019D5C 00026AEC E2 C1 00 D8 */ psq_l f22, 0xd8(r1), 0, qr0 +/* 00019D60 00026AF0 E2 E1 00 E0 */ psq_l f23, 0xe0(r1), 0, qr0 +/* 00019D64 00026AF4 E3 01 00 E8 */ psq_l f24, 0xe8(r1), 0, qr0 +/* 00019D68 00026AF8 E3 21 00 F0 */ psq_l f25, 0xf0(r1), 0, qr0 +/* 00019D6C 00026AFC E3 41 00 F8 */ psq_l f26, 0xf8(r1), 0, qr0 +/* 00019D70 00026B00 E3 61 01 00 */ psq_l f27, 0x100(r1), 0, qr0 +.L_00019D74: +/* 00019D74 00026B04 E3 81 01 08 */ psq_l f28, 0x108(r1), 0, qr0 +/* 00019D78 00026B08 E3 A1 01 10 */ psq_l f29, 0x110(r1), 0, qr0 +.L_00019D7C: +/* 00019D7C 00026B0C E3 C1 01 18 */ psq_l f30, 0x118(r1), 0, qr0 +/* 00019D80 00026B10 E3 E1 01 20 */ psq_l f31, 0x120(r1), 0, qr0 +/* 00019D84 00026B14 38 21 01 28 */ addi r1, r1, 0x128 +/* 00019D88 00026B18 4E 80 00 20 */ blr +.endfn GetSlope__10ICEManagerPQ23ICE7Vector3T1PfT3P7ICEDataiP8ICETrack + +# .text:0x19D8C | size: 0xAC +# GetGroundElevation(const ICE::Vector3*) +.fn GetGroundElevation__FPCQ23ICE7Vector3, local +/* 00019D8C 00026B1C 94 21 FF D0 */ stwu r1, -0x30(r1) +/* 00019D90 00026B20 7C 08 02 A6 */ mflr r0 +/* 00019D94 00026B24 93 E1 00 2C */ stw r31, 0x2c(r1) +/* 00019D98 00026B28 90 01 00 34 */ stw r0, 0x34(r1) +/* 00019D9C 00026B2C 3D 20 00 00 */ lis r9, .rodata+0xE4C@ha +/* 00019DA0 00026B30 3D 60 00 00 */ lis r11, TheGameFlowManager+0x20@ha +/* 00019DA4 00026B34 C0 09 0E 4C */ lfs f0, .rodata+0xE4C@l(r9) +.L_00019DA8: +/* 00019DA8 00026B38 7C 7F 1B 78 */ mr r31, r3 +/* 00019DAC 00026B3C 80 0B 00 20 */ lwz r0, TheGameFlowManager+0x20@l(r11) +/* 00019DB0 00026B40 D0 01 00 20 */ stfs f0, 0x20(r1) +/* 00019DB4 00026B44 2C 00 00 06 */ cmpwi r0, 0x6 +/* 00019DB8 00026B48 40 82 9E 20 */ bne .L_00013BD8 +/* 00019DBC 00026B4C C0 1F 00 04 */ lfs f0, 0x4(r31) +/* 00019DC0 00026B50 38 81 00 08 */ addi r4, r1, 0x8 +/* 00019DC4 00026B54 C1 BF 00 08 */ lfs f13, 0x8(r31) +/* 00019DC8 00026B58 3D 20 00 00 */ lis r9, .rodata+0xE50@ha +/* 00019DCC 00026B5C C1 9F 00 00 */ lfs f12, 0x0(r31) +/* 00019DD0 00026B60 FC 00 00 50 */ fneg f0, f0 +/* 00019DD4 00026B64 D1 A1 00 0C */ stfs f13, 0xc(r1) +/* 00019DD8 00026B68 38 00 00 00 */ li r0, 0x0 +/* 00019DDC 00026B6C D0 01 00 08 */ stfs f0, 0x8(r1) +/* 00019DE0 00026B70 39 60 00 03 */ li r11, 0x3 +/* 00019DE4 00026B74 D1 84 00 08 */ stfs f12, 0x8(r4) +/* 00019DE8 00026B78 38 61 00 18 */ addi r3, r1, 0x18 +/* 00019DEC 00026B7C C1 A9 0E 50 */ lfs f13, .rodata+0xE50@l(r9) +/* 00019DF0 00026B80 38 A1 00 20 */ addi r5, r1, 0x20 +/* 00019DF4 00026B84 C0 01 00 0C */ lfs f0, 0xc(r1) +/* 00019DF8 00026B88 38 C0 00 00 */ li r6, 0x0 +/* 00019DFC 00026B8C 90 01 00 18 */ stw r0, 0x18(r1) +/* 00019E00 00026B90 EC 00 68 2A */ fadds f0, f0, f13 +/* 00019E04 00026B94 91 61 00 1C */ stw r11, 0x1c(r1) +/* 00019E08 00026B98 D0 01 00 0C */ stfs f0, 0xc(r1) +/* 00019E0C 00026B9C 48 00 00 01 */ bl GetWorldHeightAtPointRigorous__13WCollisionMgrRCQ25UMath7Vector3RfPQ25UMath7Vector3 +/* 00019E10 00026BA0 2C 03 00 00 */ cmpwi r3, 0x0 +/* 00019E14 00026BA4 40 82 9E 20 */ bne .L_00013C34 +/* 00019E18 00026BA8 C0 1F 00 08 */ lfs f0, 0x8(r31) +/* 00019E1C 00026BAC D0 01 00 20 */ stfs f0, 0x20(r1) +/* 00019E20 00026BB0 C0 21 00 20 */ lfs f1, 0x20(r1) +/* 00019E24 00026BB4 80 01 00 34 */ lwz r0, 0x34(r1) +/* 00019E28 00026BB8 7C 08 03 A6 */ mtlr r0 +/* 00019E2C 00026BBC 83 E1 00 2C */ lwz r31, 0x2c(r1) +/* 00019E30 00026BC0 38 21 00 30 */ addi r1, r1, 0x30 +/* 00019E34 00026BC4 4E 80 00 20 */ blr +.endfn GetGroundElevation__FPCQ23ICE7Vector3 + +# .text:0x19E38 | size: 0xD0 +# ICEGetPlayerCarTransform(ICE::Matrix4*) +.fn ICEGetPlayerCarTransform__FPQ23ICE7Matrix4, local +/* 00019E38 00026BC8 94 21 FF B0 */ stwu r1, -0x50(r1) +/* 00019E3C 00026BCC 7C 08 02 A6 */ mflr r0 +/* 00019E40 00026BD0 BF C1 00 48 */ stmw r30, 0x48(r1) +/* 00019E44 00026BD4 90 01 00 54 */ stw r0, 0x54(r1) +/* 00019E48 00026BD8 7C 7E 1B 78 */ mr r30, r3 +/* 00019E4C 00026BDC 48 00 00 01 */ bl PSMTX44Identity +/* 00019E50 00026BE0 38 60 00 01 */ li r3, 0x1 +/* 00019E54 00026BE4 48 00 00 01 */ bl First__Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi311ePlayerList +/* 00019E58 00026BE8 7C 6B 1B 79 */ mr. r11, r3 +.L_00019E5C: +/* 00019E5C 00026BEC 41 82 9E F4 */ beq .L_00013D50 +.L_00019E60: +/* 00019E60 00026BF0 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 00019E64 00026BF4 80 09 00 14 */ lwz r0, 0x14(r9) +/* 00019E68 00026BF8 A8 69 00 10 */ lha r3, 0x10(r9) +/* 00019E6C 00026BFC 7C 08 03 A6 */ mtlr r0 +/* 00019E70 00026C00 7C 6B 1A 14 */ add r3, r11, r3 +/* 00019E74 00026C04 4E 80 00 21 */ blrl +/* 00019E78 00026C08 81 23 00 04 */ lwz r9, 0x4(r3) +/* 00019E7C 00026C0C A8 09 00 A8 */ lha r0, 0xa8(r9) +/* 00019E80 00026C10 81 29 00 AC */ lwz r9, 0xac(r9) +/* 00019E84 00026C14 7C 63 02 14 */ add r3, r3, r0 +/* 00019E88 00026C18 7D 28 03 A6 */ mtlr r9 +/* 00019E8C 00026C1C 4E 80 00 21 */ blrl +/* 00019E90 00026C20 7C 7F 1B 79 */ mr. r31, r3 +/* 00019E94 00026C24 41 82 9E F4 */ beq .L_00013D88 +/* 00019E98 00026C28 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 00019E9C 00026C2C 38 81 00 08 */ addi r4, r1, 0x8 +/* 00019EA0 00026C30 80 09 00 8C */ lwz r0, 0x8c(r9) +/* 00019EA4 00026C34 A8 69 00 88 */ lha r3, 0x88(r9) +/* 00019EA8 00026C38 7C 08 03 A6 */ mtlr r0 +/* 00019EAC 00026C3C 7C 7F 1A 14 */ add r3, r31, r3 +/* 00019EB0 00026C40 4E 80 00 21 */ blrl +/* 00019EB4 00026C44 7F C3 F3 78 */ mr r3, r30 +/* 00019EB8 00026C48 38 81 00 08 */ addi r4, r1, 0x8 +/* 00019EBC 00026C4C 48 00 00 01 */ bl bConvertFromBond__FR8bMatrix4RC8bMatrix4 +.L_00019EC0: +/* 00019EC0 00026C50 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 00019EC4 00026C54 A8 69 00 48 */ lha r3, 0x48(r9) +/* 00019EC8 00026C58 80 09 00 4C */ lwz r0, 0x4c(r9) +/* 00019ECC 00026C5C 7C 7F 1A 14 */ add r3, r31, r3 +/* 00019ED0 00026C60 7C 08 03 A6 */ mtlr r0 +/* 00019ED4 00026C64 4E 80 00 21 */ blrl +/* 00019ED8 00026C68 C0 03 00 00 */ lfs f0, 0x0(r3) +/* 00019EDC 00026C6C C1 A3 00 04 */ lfs f13, 0x4(r3) +/* 00019EE0 00026C70 C1 83 00 08 */ lfs f12, 0x8(r3) +/* 00019EE4 00026C74 FC 00 00 50 */ fneg f0, f0 +/* 00019EE8 00026C78 D1 BE 00 38 */ stfs f13, 0x38(r30) +/* 00019EEC 00026C7C D1 9E 00 30 */ stfs f12, 0x30(r30) +/* 00019EF0 00026C80 D0 1E 00 34 */ stfs f0, 0x34(r30) +/* 00019EF4 00026C84 80 01 00 54 */ lwz r0, 0x54(r1) +/* 00019EF8 00026C88 7C 08 03 A6 */ mtlr r0 +/* 00019EFC 00026C8C BB C1 00 48 */ lmw r30, 0x48(r1) +/* 00019F00 00026C90 38 21 00 50 */ addi r1, r1, 0x50 +/* 00019F04 00026C94 4E 80 00 20 */ blr +.endfn ICEGetPlayerCarTransform__FPQ23ICE7Matrix4 + +# .text:0x19F08 | size: 0x68 +# LoaderICECameras(bChunk*) +.fn LoaderICECameras__FP6bChunk, global +/* 00019F08 00026C98 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 00019F0C 00026C9C 7C 08 02 A6 */ mflr r0 +/* 00019F10 00026CA0 90 01 00 0C */ stw r0, 0xc(r1) +/* 00019F14 00026CA4 7C 64 1B 78 */ mr r4, r3 +/* 00019F18 00026CA8 3C 00 00 03 */ lis r0, 0x3 +/* 00019F1C 00026CAC 81 24 00 00 */ lwz r9, 0x0(r4) +/* 00019F20 00026CB0 60 00 B2 11 */ ori r0, r0, 0xb211 +/* 00019F24 00026CB4 7C 09 00 00 */ cmpw r9, r0 +/* 00019F28 00026CB8 40 82 9F 3C */ bne .L_00013E64 +/* 00019F2C 00026CBC 3C 60 00 00 */ lis r3, TheICEManager@ha +/* 00019F30 00026CC0 38 63 00 00 */ addi r3, r3, TheICEManager@l +/* 00019F34 00026CC4 48 01 8E D5 */ bl .text+0x18ED4 +/* 00019F38 00026CC8 48 01 9F 5C */ b .text+0x19F5C +/* 00019F3C 00026CCC 3D 29 7F FC */ addis r9, r9, 0x7ffc +/* 00019F40 00026CD0 39 29 4E 00 */ addi r9, r9, 0x4e00 +/* 00019F44 00026CD4 28 09 00 03 */ cmplwi r9, 0x3 +/* 00019F48 00026CD8 38 60 00 00 */ li r3, 0x0 +/* 00019F4C 00026CDC 41 81 9F 60 */ bgt .L_00013EAC +/* 00019F50 00026CE0 3C 60 00 00 */ lis r3, TheICEManager@ha +/* 00019F54 00026CE4 38 63 00 00 */ addi r3, r3, TheICEManager@l +/* 00019F58 00026CE8 48 01 8B B5 */ bl .text+0x18BB4 +/* 00019F5C 00026CEC 38 60 00 01 */ li r3, 0x1 +/* 00019F60 00026CF0 80 01 00 0C */ lwz r0, 0xc(r1) +/* 00019F64 00026CF4 7C 08 03 A6 */ mtlr r0 +/* 00019F68 00026CF8 38 21 00 08 */ addi r1, r1, 0x8 +/* 00019F6C 00026CFC 4E 80 00 20 */ blr +.endfn LoaderICECameras__FP6bChunk + +# .text:0x19F70 | size: 0x68 +# UnloaderICECameras(bChunk*) +.fn UnloaderICECameras__FP6bChunk, global +/* 00019F70 00026D00 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 00019F74 00026D04 7C 08 02 A6 */ mflr r0 +/* 00019F78 00026D08 90 01 00 0C */ stw r0, 0xc(r1) +/* 00019F7C 00026D0C 7C 64 1B 78 */ mr r4, r3 +/* 00019F80 00026D10 3C 00 00 03 */ lis r0, 0x3 +/* 00019F84 00026D14 81 24 00 00 */ lwz r9, 0x0(r4) +/* 00019F88 00026D18 60 00 B2 11 */ ori r0, r0, 0xb211 +/* 00019F8C 00026D1C 7C 09 00 00 */ cmpw r9, r0 +/* 00019F90 00026D20 40 82 9F A4 */ bne .L_00013F34 +/* 00019F94 00026D24 3C 60 00 00 */ lis r3, TheICEManager@ha +/* 00019F98 00026D28 38 63 00 00 */ addi r3, r3, TheICEManager@l +/* 00019F9C 00026D2C 48 01 8F 79 */ bl .text+0x18F78 +/* 00019FA0 00026D30 48 01 9F C4 */ b .text+0x19FC4 +/* 00019FA4 00026D34 3D 29 7F FC */ addis r9, r9, 0x7ffc +/* 00019FA8 00026D38 39 29 4E 00 */ addi r9, r9, 0x4e00 +/* 00019FAC 00026D3C 28 09 00 03 */ cmplwi r9, 0x3 +/* 00019FB0 00026D40 38 60 00 00 */ li r3, 0x0 +/* 00019FB4 00026D44 41 81 9F C8 */ bgt .L_00013F7C +/* 00019FB8 00026D48 3C 60 00 00 */ lis r3, TheICEManager@ha +/* 00019FBC 00026D4C 38 63 00 00 */ addi r3, r3, TheICEManager@l +/* 00019FC0 00026D50 48 01 8D 0D */ bl .text+0x18D0C +/* 00019FC4 00026D54 38 60 00 01 */ li r3, 0x1 +/* 00019FC8 00026D58 80 01 00 0C */ lwz r0, 0xc(r1) +/* 00019FCC 00026D5C 7C 08 03 A6 */ mtlr r0 +/* 00019FD0 00026D60 38 21 00 08 */ addi r1, r1, 0x8 +/* 00019FD4 00026D64 4E 80 00 20 */ blr +.endfn UnloaderICECameras__FP6bChunk + +# .text:0x19FD8 | size: 0x4C +.fn FindAnimScene__3ICEv, global +/* 00019FD8 00026D68 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 00019FDC 00026D6C 7C 08 02 A6 */ mflr r0 +/* 00019FE0 00026D70 90 01 00 0C */ stw r0, 0xc(r1) +/* 00019FE4 00026D74 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@ha +/* 00019FE8 00026D78 81 69 00 00 */ lwz r11, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@l(r9) +/* 00019FEC 00026D7C 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 00019FF0 00026D80 40 82 9F FC */ bne .L_00013FEC +/* 00019FF4 00026D84 38 60 00 00 */ li r3, 0x0 +/* 00019FF8 00026D88 48 01 A0 14 */ b .text+0x1A014 +/* 00019FFC 00026D8C 81 2B 00 04 */ lwz r9, 0x4(r11) +/* 0001A000 00026D90 A8 69 00 98 */ lha r3, 0x98(r9) +/* 0001A004 00026D94 80 09 00 9C */ lwz r0, 0x9c(r9) +/* 0001A008 00026D98 7C 6B 1A 14 */ add r3, r11, r3 +/* 0001A00C 00026D9C 7C 08 03 A6 */ mtlr r0 +/* 0001A010 00026DA0 4E 80 00 21 */ blrl +/* 0001A014 00026DA4 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0001A018 00026DA8 7C 08 03 A6 */ mtlr r0 +/* 0001A01C 00026DAC 38 21 00 08 */ addi r1, r1, 0x8 +/* 0001A020 00026DB0 4E 80 00 20 */ blr +.endfn FindAnimScene__3ICEv + +# .text:0x1A024 | size: 0x1C +.fn GetSceneCount__3ICEv, global +/* 0001A024 00026DB4 3D 20 00 00 */ lis r9, TheAnimDirectory@ha +/* 0001A028 00026DB8 38 60 00 00 */ li r3, 0x0 +/* 0001A02C 00026DBC 81 29 00 00 */ lwz r9, TheAnimDirectory@l(r9) +/* 0001A030 00026DC0 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0001A034 00026DC4 4D 82 00 20 */ beqlr +/* 0001A038 00026DC8 80 69 00 00 */ lwz r3, 0x0(r9) +/* 0001A03C 00026DCC 4E 80 00 20 */ blr +.endfn GetSceneCount__3ICEv + +# .text:0x1A040 | size: 0x38 +.fn GetSceneHash__3ICEUi, global +/* 0001A040 00026DD0 3D 20 00 00 */ lis r9, TheAnimDirectory@ha +/* 0001A044 00026DD4 7C 6B 1B 78 */ mr r11, r3 +/* 0001A048 00026DD8 80 69 00 00 */ lwz r3, TheAnimDirectory@l(r9) +/* 0001A04C 00026DDC 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0001A050 00026DE0 41 82 A0 60 */ beq .L_000140B0 +/* 0001A054 00026DE4 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001A058 00026DE8 7C 00 58 40 */ cmplw r0, r11 +/* 0001A05C 00026DEC 41 81 A0 68 */ bgt .L_000140C4 +/* 0001A060 00026DF0 38 60 00 00 */ li r3, 0x0 +/* 0001A064 00026DF4 4E 80 00 20 */ blr +/* 0001A068 00026DF8 55 69 18 38 */ slwi r9, r11, 3 +/* 0001A06C 00026DFC 7D 29 1A 14 */ add r9, r9, r3 +/* 0001A070 00026E00 80 69 00 04 */ lwz r3, 0x4(r9) +/* 0001A074 00026E04 4E 80 00 20 */ blr +.endfn GetSceneHash__3ICEUi + +# .text:0x1A078 | size: 0xF4 +.fn GetNameOfSceneHash__3ICEUiPc, global +/* 0001A078 00026E08 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 0001A07C 00026E0C 38 00 00 00 */ li r0, 0x0 +/* 0001A080 00026E10 3D 20 00 00 */ lis r9, TheAnimDirectory@ha +/* 0001A084 00026E14 98 04 00 00 */ stb r0, 0x0(r4) +/* 0001A088 00026E18 80 09 00 00 */ lwz r0, TheAnimDirectory@l(r9) +/* 0001A08C 00026E1C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0001A090 00026E20 41 82 A1 64 */ beq .L_000141F4 +/* 0001A094 00026E24 38 E0 00 00 */ li r7, 0x0 +/* 0001A098 00026E28 3C C0 00 00 */ lis r6, TheAnimDirectory@ha +/* 0001A09C 00026E2C 38 A0 00 00 */ li r5, 0x0 +/* 0001A0A0 00026E30 81 46 00 00 */ lwz r10, TheAnimDirectory@l(r6) +/* 0001A0A4 00026E34 80 0A 00 00 */ lwz r0, 0x0(r10) +/* 0001A0A8 00026E38 7C 07 00 40 */ cmplw r7, r0 +/* 0001A0AC 00026E3C 40 80 A1 64 */ bge .L_00014210 +/* 0001A0B0 00026E40 54 E9 18 38 */ slwi r9, r7, 3 +.L_0001A0B4: +/* 0001A0B4 00026E44 39 01 00 08 */ addi r8, r1, 0x8 +/* 0001A0B8 00026E48 7D 29 52 14 */ add r9, r9, r10 +.L_0001A0BC: +/* 0001A0BC 00026E4C 81 69 00 04 */ lwz r11, 0x4(r9) +/* 0001A0C0 00026E50 81 89 00 08 */ lwz r12, 0x8(r9) +/* 0001A0C4 00026E54 91 61 00 08 */ stw r11, 0x8(r1) +/* 0001A0C8 00026E58 91 81 00 0C */ stw r12, 0xc(r1) +/* 0001A0CC 00026E5C 80 01 00 08 */ lwz r0, 0x8(r1) +/* 0001A0D0 00026E60 7C 03 00 00 */ cmpw r3, r0 +/* 0001A0D4 00026E64 40 82 A1 5C */ bne .L_00014230 +/* 0001A0D8 00026E68 89 28 00 07 */ lbz r9, 0x7(r8) +/* 0001A0DC 00026E6C 39 60 00 00 */ li r11, 0x0 +/* 0001A0E0 00026E70 55 29 30 32 */ slwi r9, r9, 6 +/* 0001A0E4 00026E74 39 29 08 08 */ addi r9, r9, 0x808 +/* 0001A0E8 00026E78 7C 0A 48 AE */ lbzx r0, r10, r9 +/* 0001A0EC 00026E7C 7D 0A 4A 14 */ add r8, r10, r9 +/* 0001A0F0 00026E80 2C 00 00 5F */ cmpwi r0, 0x5f +/* 0001A0F4 00026E84 41 82 A1 08 */ beq .L_000141FC +/* 0001A0F8 00026E88 39 6B 00 01 */ addi r11, r11, 0x1 +/* 0001A0FC 00026E8C 7C 08 58 AE */ lbzx r0, r8, r11 +/* 0001A100 00026E90 2C 00 00 5F */ cmpwi r0, 0x5f +/* 0001A104 00026E94 40 82 A0 F8 */ bne .L_000141FC +/* 0001A108 00026E98 39 2B 00 01 */ addi r9, r11, 0x1 +/* 0001A10C 00026E9C 7C 08 48 AE */ lbzx r0, r8, r9 +/* 0001A110 00026EA0 7D 2B 4B 78 */ mr r11, r9 +/* 0001A114 00026EA4 2C 00 00 5F */ cmpwi r0, 0x5f +/* 0001A118 00026EA8 41 82 A1 2C */ beq .L_00014244 +/* 0001A11C 00026EAC 39 6B 00 01 */ addi r11, r11, 0x1 +/* 0001A120 00026EB0 7C 08 58 AE */ lbzx r0, r8, r11 +/* 0001A124 00026EB4 2C 00 00 5F */ cmpwi r0, 0x5f +/* 0001A128 00026EB8 40 82 A1 1C */ bne .L_00014244 +/* 0001A12C 00026EBC 7C 09 58 50 */ subf r0, r9, r11 +/* 0001A130 00026EC0 7D 2B 4B 78 */ mr r11, r9 +/* 0001A134 00026EC4 35 20 FF FF */ subic. r9, r0, 0x1 +/* 0001A138 00026EC8 41 80 A1 54 */ blt .L_0001428C +.L_0001A13C: +/* 0001A13C 00026ECC 7C 08 58 AE */ lbzx r0, r8, r11 +/* 0001A140 00026ED0 35 29 FF FF */ subic. r9, r9, 0x1 +/* 0001A144 00026ED4 39 6B 00 01 */ addi r11, r11, 0x1 +/* 0001A148 00026ED8 98 04 00 00 */ stb r0, 0x0(r4) +/* 0001A14C 00026EDC 38 84 00 01 */ addi r4, r4, 0x1 +/* 0001A150 00026EE0 40 80 A1 3C */ bge .L_0001428C +/* 0001A154 00026EE4 98 A4 00 00 */ stb r5, 0x0(r4) +/* 0001A158 00026EE8 48 01 A1 64 */ b .text+0x1A164 +/* 0001A15C 00026EEC 38 E7 00 01 */ addi r7, r7, 0x1 +/* 0001A160 00026EF0 48 01 A0 A0 */ b .text+0x1A0A0 +/* 0001A164 00026EF4 38 21 00 10 */ addi r1, r1, 0x10 +/* 0001A168 00026EF8 4E 80 00 20 */ blr +.endfn GetNameOfSceneHash__3ICEUiPc + +# .text:0x1A16C | size: 0x68 +.fn FireEventTag__3ICEi, global +/* 0001A16C 00026EFC 94 21 FF B0 */ stwu r1, -0x50(r1) +/* 0001A170 00026F00 7C 08 02 A6 */ mflr r0 +/* 0001A174 00026F04 93 E1 00 4C */ stw r31, 0x4c(r1) +/* 0001A178 00026F08 90 01 00 54 */ stw r0, 0x54(r1) +/* 0001A17C 00026F0C 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@ha +/* 0001A180 00026F10 83 E9 00 00 */ lwz r31, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@l(r9) +.L_0001A184: +/* 0001A184 00026F14 2C 1F 00 00 */ cmpwi r31, 0x0 +/* 0001A188 00026F18 41 82 A1 C0 */ beq .L_00014348 +/* 0001A18C 00026F1C 7C 65 1B 78 */ mr r5, r3 +/* 0001A190 00026F20 3C 80 00 00 */ lis r4, .rodata+0xE54@ha +/* 0001A194 00026F24 38 84 0E 54 */ addi r4, r4, .rodata+0xE54@l +/* 0001A198 00026F28 38 61 00 08 */ addi r3, r1, 0x8 +/* 0001A19C 00026F2C 4C C6 31 82 */ crclr cr1eq +/* 0001A1A0 00026F30 48 00 00 01 */ bl bSPrintf__FPcPCce +/* 0001A1A4 00026F34 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 0001A1A8 00026F38 38 81 00 08 */ addi r4, r1, 0x8 +/* 0001A1AC 00026F3C A8 69 00 B8 */ lha r3, 0xb8(r9) +/* 0001A1B0 00026F40 80 09 00 BC */ lwz r0, 0xbc(r9) +/* 0001A1B4 00026F44 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001A1B8 00026F48 7C 08 03 A6 */ mtlr r0 +/* 0001A1BC 00026F4C 4E 80 00 21 */ blrl +/* 0001A1C0 00026F50 80 01 00 54 */ lwz r0, 0x54(r1) +/* 0001A1C4 00026F54 7C 08 03 A6 */ mtlr r0 +/* 0001A1C8 00026F58 83 E1 00 4C */ lwz r31, 0x4c(r1) +/* 0001A1CC 00026F5C 38 21 00 50 */ addi r1, r1, 0x50 +/* 0001A1D0 00026F60 4E 80 00 20 */ blr +.endfn FireEventTag__3ICEi + +# .text:0x1A1D4 | size: 0x94 +# ICECompleteEventTags() +.fn ICECompleteEventTags__Fv, global +/* 0001A1D4 00026F64 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 0001A1D8 00026F68 7C 08 02 A6 */ mflr r0 +/* 0001A1DC 00026F6C BF C1 00 18 */ stmw r30, 0x18(r1) +.L_0001A1E0: +/* 0001A1E0 00026F70 90 01 00 24 */ stw r0, 0x24(r1) +/* 0001A1E4 00026F74 3F C0 00 00 */ lis r30, TheICEManager@ha +/* 0001A1E8 00026F78 38 81 00 08 */ addi r4, r1, 0x8 +/* 0001A1EC 00026F7C 3B DE 00 00 */ addi r30, r30, TheICEManager@l +/* 0001A1F0 00026F80 38 A1 00 0C */ addi r5, r1, 0xc +/* 0001A1F4 00026F84 38 C1 00 10 */ addi r6, r1, 0x10 +/* 0001A1F8 00026F88 7F C3 F3 78 */ mr r3, r30 +/* 0001A1FC 00026F8C 48 01 89 4D */ bl .text+0x1894C +/* 0001A200 00026F90 3D 20 00 00 */ lis r9, .rodata+0xE5C@ha +/* 0001A204 00026F94 C0 21 00 0C */ lfs f1, 0xc(r1) +/* 0001A208 00026F98 C0 01 00 10 */ lfs f0, 0x10(r1) +/* 0001A20C 00026F9C 7F C3 F3 78 */ mr r3, r30 +/* 0001A210 00026FA0 C1 A9 0E 5C */ lfs f13, .rodata+0xE5C@l(r9) +/* 0001A214 00026FA4 EC 21 00 2A */ fadds f1, f1, f0 +/* 0001A218 00026FA8 80 81 00 08 */ lwz r4, 0x8(r1) +/* 0001A21C 00026FAC EC 21 03 72 */ fmuls f1, f1, f13 +/* 0001A220 00026FB0 48 01 84 A5 */ bl .text+0x184A4 +/* 0001A224 00026FB4 81 21 00 08 */ lwz r9, 0x8(r1) +/* 0001A228 00026FB8 3B C3 00 01 */ addi r30, r3, 0x1 +/* 0001A22C 00026FBC 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0001A230 00026FC0 41 82 A2 54 */ beq GetDerivative__CQ23ICE7Cubic1Df +/* 0001A234 00026FC4 AB E9 00 14 */ lha r31, 0x14(r9) +/* 0001A238 00026FC8 7C 1E F8 00 */ cmpw r30, r31 +.L_0001A23C: +/* 0001A23C 00026FCC 40 80 A2 54 */ bge .L_00014490 +/* 0001A240 00026FD0 7F C3 F3 78 */ mr r3, r30 +/* 0001A244 00026FD4 48 01 A1 6D */ bl .text+0x1A16C +/* 0001A248 00026FD8 3B DE 00 01 */ addi r30, r30, 0x1 +/* 0001A24C 00026FDC 7C 1E F8 00 */ cmpw r30, r31 +/* 0001A250 00026FE0 41 80 A2 40 */ blt .L_00014490 +/* 0001A254 00026FE4 80 01 00 24 */ lwz r0, 0x24(r1) +/* 0001A258 00026FE8 7C 08 03 A6 */ mtlr r0 +/* 0001A25C 00026FEC BB C1 00 18 */ lmw r30, 0x18(r1) +/* 0001A260 00026FF0 38 21 00 20 */ addi r1, r1, 0x20 +/* 0001A264 00026FF4 4E 80 00 20 */ blr +.endfn ICECompleteEventTags__Fv + +# .text:0x1A268 | size: 0x60 +.fn find__H2ZQ24_STLt14_List_iterator2ZPCQ26Attrib10CollectionZQ24_STLt16_Nonconst_traits1ZPCQ26Attrib10CollectionZPCQ26Attrib10Collection_4_STLX01X01RCX11_X01, weak +/* 0001A268 00026FF8 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0001A26C 00026FFC 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001A270 00027000 81 24 00 00 */ lwz r9, 0x0(r4) +/* 0001A274 00027004 90 01 00 10 */ stw r0, 0x10(r1) +/* 0001A278 00027008 7C 0A 03 78 */ mr r10, r0 +/* 0001A27C 0002700C 91 21 00 08 */ stw r9, 0x8(r1) +/* 0001A280 00027010 80 01 00 08 */ lwz r0, 0x8(r1) +/* 0001A284 00027014 39 20 00 01 */ li r9, 0x1 +/* 0001A288 00027018 7C 0B 03 78 */ mr r11, r0 +/* 0001A28C 0002701C 7C 00 50 00 */ cmpw r0, r10 +/* 0001A290 00027020 40 82 A2 98 */ bne .L_00014528 +/* 0001A294 00027024 39 20 00 00 */ li r9, 0x0 +/* 0001A298 00027028 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0001A29C 0002702C 41 82 A2 BC */ beq .L_00014558 +/* 0001A2A0 00027030 81 2B 00 08 */ lwz r9, 0x8(r11) +/* 0001A2A4 00027034 80 06 00 00 */ lwz r0, 0x0(r6) +/* 0001A2A8 00027038 7C 09 00 00 */ cmpw r9, r0 +/* 0001A2AC 0002703C 41 82 A2 BC */ beq .L_00014568 +/* 0001A2B0 00027040 80 0B 00 00 */ lwz r0, 0x0(r11) +/* 0001A2B4 00027044 90 01 00 08 */ stw r0, 0x8(r1) +/* 0001A2B8 00027048 48 01 A2 80 */ b .text+0x1A280 +/* 0001A2BC 0002704C 91 63 00 00 */ stw r11, 0x0(r3) +/* 0001A2C0 00027050 38 21 00 18 */ addi r1, r1, 0x18 +/* 0001A2C4 00027054 4E 80 00 20 */ blr +.endfn find__H2ZQ24_STLt14_List_iterator2ZPCQ26Attrib10CollectionZQ24_STLt16_Nonconst_traits1ZPCQ26Attrib10CollectionZPCQ26Attrib10Collection_4_STLX01X01RCX11_X01 + +# .text:0x1A2C8 | size: 0x60 +.fn find__H2ZQ24_STLt14_List_iterator2ZPCQ26Attrib5ClassZQ24_STLt16_Nonconst_traits1ZPCQ26Attrib5ClassZPCQ26Attrib5Class_4_STLX01X01RCX11_X01, weak +/* 0001A2C8 00027058 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0001A2CC 0002705C 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001A2D0 00027060 81 24 00 00 */ lwz r9, 0x0(r4) +/* 0001A2D4 00027064 90 01 00 10 */ stw r0, 0x10(r1) +/* 0001A2D8 00027068 7C 0A 03 78 */ mr r10, r0 +/* 0001A2DC 0002706C 91 21 00 08 */ stw r9, 0x8(r1) +/* 0001A2E0 00027070 80 01 00 08 */ lwz r0, 0x8(r1) +/* 0001A2E4 00027074 39 20 00 01 */ li r9, 0x1 +/* 0001A2E8 00027078 7C 0B 03 78 */ mr r11, r0 +/* 0001A2EC 0002707C 7C 00 50 00 */ cmpw r0, r10 +/* 0001A2F0 00027080 40 82 A2 F8 */ bne .L_000145E8 +/* 0001A2F4 00027084 39 20 00 00 */ li r9, 0x0 +/* 0001A2F8 00027088 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0001A2FC 0002708C 41 82 A3 1C */ beq .L_00014618 +/* 0001A300 00027090 81 2B 00 08 */ lwz r9, 0x8(r11) +/* 0001A304 00027094 80 06 00 00 */ lwz r0, 0x0(r6) +/* 0001A308 00027098 7C 09 00 00 */ cmpw r9, r0 +/* 0001A30C 0002709C 41 82 A3 1C */ beq .L_00014628 +/* 0001A310 000270A0 80 0B 00 00 */ lwz r0, 0x0(r11) +/* 0001A314 000270A4 90 01 00 08 */ stw r0, 0x8(r1) +/* 0001A318 000270A8 48 01 A2 E0 */ b .text+0x1A2E0 +/* 0001A31C 000270AC 91 63 00 00 */ stw r11, 0x0(r3) +.L_0001A320: +/* 0001A320 000270B0 38 21 00 18 */ addi r1, r1, 0x18 +/* 0001A324 000270B4 4E 80 00 20 */ blr +.endfn find__H2ZQ24_STLt14_List_iterator2ZPCQ26Attrib5ClassZQ24_STLt16_Nonconst_traits1ZPCQ26Attrib5ClassZPCQ26Attrib5Class_4_STLX01X01RCX11_X01 + +# .text:0x1A328 | size: 0x6C +.fn _M_erase__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescPQ24_STLt13_Rb_tree_node1ZQ26Attrib8TypeDesc, weak +/* 0001A328 000270B8 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 0001A32C 000270BC 7C 08 02 A6 */ mflr r0 +/* 0001A330 000270C0 BF 61 00 0C */ stmw r27, 0xc(r1) +/* 0001A334 000270C4 90 01 00 24 */ stw r0, 0x24(r1) +/* 0001A338 000270C8 7C 7D 1B 78 */ mr r29, r3 +/* 0001A33C 000270CC 7C 9F 23 79 */ mr. r31, r4 +.L_0001A340: +/* 0001A340 000270D0 41 82 A3 80 */ beq .L_000146C0 +/* 0001A344 000270D4 3F 60 00 00 */ lis r27, gFastMem@ha +/* 0001A348 000270D8 3F 80 00 00 */ lis r28, .rodata+0x1BC@ha +/* 0001A34C 000270DC 80 9F 00 0C */ lwz r4, 0xc(r31) +/* 0001A350 000270E0 7F A3 EB 78 */ mr r3, r29 +/* 0001A354 000270E4 48 00 00 01 */ bl _M_erase__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescPQ24_STLt13_Rb_tree_node1ZQ26Attrib8TypeDesc +/* 0001A358 000270E8 83 DF 00 08 */ lwz r30, 0x8(r31) +/* 0001A35C 000270EC 2C 1F 00 00 */ cmpwi r31, 0x0 +.L_0001A360: +/* 0001A360 000270F0 41 82 A3 78 */ beq .L_000146D8 +/* 0001A364 000270F4 7F E4 FB 78 */ mr r4, r31 +/* 0001A368 000270F8 38 7B 00 00 */ addi r3, r27, gFastMem@l +.L_0001A36C: +/* 0001A36C 000270FC 38 A0 00 24 */ li r5, 0x24 +/* 0001A370 00027100 38 DC 01 BC */ addi r6, r28, .rodata+0x1BC@l +/* 0001A374 00027104 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 0001A378 00027108 7F DF F3 79 */ mr. r31, r30 +.L_0001A37C: +/* 0001A37C 0002710C 40 82 A3 4C */ bne .L_000146C8 +/* 0001A380 00027110 80 01 00 24 */ lwz r0, 0x24(r1) +/* 0001A384 00027114 7C 08 03 A6 */ mtlr r0 +/* 0001A388 00027118 BB 61 00 0C */ lmw r27, 0xc(r1) +/* 0001A38C 0002711C 38 21 00 20 */ addi r1, r1, 0x20 +/* 0001A390 00027120 4E 80 00 20 */ blr +.endfn _M_erase__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescPQ24_STLt13_Rb_tree_node1ZQ26Attrib8TypeDesc + +# .text:0x1A394 | size: 0x7C +.fn clear__Q24_STLt10_List_base2ZPCQ26Attrib10CollectionZQ24_STLt9allocator1ZPCQ26Attrib10Collection, weak +/* 0001A394 00027124 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0001A398 00027128 7C 08 02 A6 */ mflr r0 +/* 0001A39C 0002712C BF 81 00 08 */ stmw r28, 0x8(r1) +/* 0001A3A0 00027130 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0001A3A4 00027134 7C 7E 1B 78 */ mr r30, r3 +/* 0001A3A8 00027138 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0001A3AC 0002713C 83 E9 00 00 */ lwz r31, 0x0(r9) +/* 0001A3B0 00027140 7C 1F 48 00 */ cmpw r31, r9 +/* 0001A3B4 00027144 41 82 A3 EC */ beq .L_000147A0 +/* 0001A3B8 00027148 3F 80 00 00 */ lis r28, gFastMem@ha +/* 0001A3BC 0002714C 3F A0 00 00 */ lis r29, .rodata+0x1BC@ha +/* 0001A3C0 00027150 7F E4 FB 78 */ mr r4, r31 +/* 0001A3C4 00027154 83 FF 00 00 */ lwz r31, 0x0(r31) +/* 0001A3C8 00027158 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0001A3CC 0002715C 41 82 A3 E0 */ beq .L_000147AC +/* 0001A3D0 00027160 38 7C 00 00 */ addi r3, r28, gFastMem@l +/* 0001A3D4 00027164 38 A0 00 0C */ li r5, 0xc +/* 0001A3D8 00027168 38 DD 01 BC */ addi r6, r29, .rodata+0x1BC@l +/* 0001A3DC 0002716C 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 0001A3E0 00027170 80 1E 00 04 */ lwz r0, 0x4(r30) +/* 0001A3E4 00027174 7C 1F 00 00 */ cmpw r31, r0 +/* 0001A3E8 00027178 40 82 A3 C0 */ bne .L_000147A8 +/* 0001A3EC 0002717C 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0001A3F0 00027180 91 29 00 00 */ stw r9, 0x0(r9) +/* 0001A3F4 00027184 81 7E 00 04 */ lwz r11, 0x4(r30) +/* 0001A3F8 00027188 91 6B 00 04 */ stw r11, 0x4(r11) +/* 0001A3FC 0002718C 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0001A400 00027190 7C 08 03 A6 */ mtlr r0 +/* 0001A404 00027194 BB 81 00 08 */ lmw r28, 0x8(r1) +/* 0001A408 00027198 38 21 00 18 */ addi r1, r1, 0x18 +/* 0001A40C 0002719C 4E 80 00 20 */ blr +.endfn clear__Q24_STLt10_List_base2ZPCQ26Attrib10CollectionZQ24_STLt9allocator1ZPCQ26Attrib10Collection + +# .text:0x1A410 | size: 0x7C +.fn clear__Q24_STLt10_List_base2ZPCQ26Attrib5ClassZQ24_STLt9allocator1ZPCQ26Attrib5Class, weak +/* 0001A410 000271A0 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0001A414 000271A4 7C 08 02 A6 */ mflr r0 +/* 0001A418 000271A8 BF 81 00 08 */ stmw r28, 0x8(r1) +/* 0001A41C 000271AC 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0001A420 000271B0 7C 7E 1B 78 */ mr r30, r3 +/* 0001A424 000271B4 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0001A428 000271B8 83 E9 00 00 */ lwz r31, 0x0(r9) +/* 0001A42C 000271BC 7C 1F 48 00 */ cmpw r31, r9 +/* 0001A430 000271C0 41 82 A4 68 */ beq .L_00014898 +/* 0001A434 000271C4 3F 80 00 00 */ lis r28, gFastMem@ha +/* 0001A438 000271C8 3F A0 00 00 */ lis r29, .rodata+0x1BC@ha +/* 0001A43C 000271CC 7F E4 FB 78 */ mr r4, r31 +/* 0001A440 000271D0 83 FF 00 00 */ lwz r31, 0x0(r31) +/* 0001A444 000271D4 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0001A448 000271D8 41 82 A4 5C */ beq .L_000148A4 +/* 0001A44C 000271DC 38 7C 00 00 */ addi r3, r28, gFastMem@l +/* 0001A450 000271E0 38 A0 00 0C */ li r5, 0xc +/* 0001A454 000271E4 38 DD 01 BC */ addi r6, r29, .rodata+0x1BC@l +/* 0001A458 000271E8 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 0001A45C 000271EC 80 1E 00 04 */ lwz r0, 0x4(r30) +/* 0001A460 000271F0 7C 1F 00 00 */ cmpw r31, r0 +/* 0001A464 000271F4 40 82 A4 3C */ bne .L_000148A0 +/* 0001A468 000271F8 81 3E 00 04 */ lwz r9, 0x4(r30) +.L_0001A46C: +/* 0001A46C 000271FC 91 29 00 00 */ stw r9, 0x0(r9) +/* 0001A470 00027200 81 7E 00 04 */ lwz r11, 0x4(r30) +/* 0001A474 00027204 91 6B 00 04 */ stw r11, 0x4(r11) +/* 0001A478 00027208 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0001A47C 0002720C 7C 08 03 A6 */ mtlr r0 +/* 0001A480 00027210 BB 81 00 08 */ lmw r28, 0x8(r1) +.L_0001A484: +/* 0001A484 00027214 38 21 00 18 */ addi r1, r1, 0x18 +/* 0001A488 00027218 4E 80 00 20 */ blr +.endfn clear__Q24_STLt10_List_base2ZPCQ26Attrib5ClassZQ24_STLt9allocator1ZPCQ26Attrib5Class + +# .text:0x1A48C | size: 0x120 +.fn reserve__Q24_STLt6vector2ZPCQ26Attrib8TypeDescZQ24_STLt9allocator1ZPCQ26Attrib8TypeDescUi, weak +/* 0001A48C 0002721C 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 0001A490 00027220 7C 08 02 A6 */ mflr r0 +/* 0001A494 00027224 BF 41 00 08 */ stmw r26, 0x8(r1) +/* 0001A498 00027228 90 01 00 24 */ stw r0, 0x24(r1) +/* 0001A49C 0002722C 7C 7C 1B 78 */ mr r28, r3 +/* 0001A4A0 00027230 83 BC 00 00 */ lwz r29, 0x0(r28) +/* 0001A4A4 00027234 80 1C 00 0C */ lwz r0, 0xc(r28) +/* 0001A4A8 00027238 7C 1D 00 50 */ subf r0, r29, r0 +/* 0001A4AC 0002723C 7C 00 16 70 */ srawi r0, r0, 2 +/* 0001A4B0 00027240 7C 00 20 40 */ cmplw r0, r4 +/* 0001A4B4 00027244 40 80 A5 98 */ bge .L_00014A4C +/* 0001A4B8 00027248 83 7C 00 04 */ lwz r27, 0x4(r28) +/* 0001A4BC 0002724C 2C 1D 00 00 */ cmpwi r29, 0x0 +/* 0001A4C0 00027250 7C 1D D8 50 */ subf r0, r29, r27 +/* 0001A4C4 00027254 7C 1A 16 70 */ srawi r26, r0, 2 +/* 0001A4C8 00027258 41 82 A5 4C */ beq .L_00014A14 +.L_0001A4CC: +/* 0001A4CC 0002725C 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0001A4D0 00027260 41 82 A4 F8 */ beq .L_000149C8 +/* 0001A4D4 00027264 54 9E 10 3A */ slwi r30, r4, 2 +/* 0001A4D8 00027268 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0001A4DC 0002726C 3C A0 00 00 */ lis r5, .rodata+0x1BC@ha +/* 0001A4E0 00027270 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0001A4E4 00027274 38 A5 01 BC */ addi r5, r5, .rodata+0x1BC@l +/* 0001A4E8 00027278 7F C4 F3 78 */ mr r4, r30 +/* 0001A4EC 0002727C 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 0001A4F0 00027280 7C 7F 1B 78 */ mr r31, r3 +/* 0001A4F4 00027284 48 01 A5 00 */ b .text+0x1A500 +/* 0001A4F8 00027288 3B E0 00 00 */ li r31, 0x0 +/* 0001A4FC 0002728C 3B C0 00 00 */ li r30, 0x0 +/* 0001A500 00027290 7C 1B E8 00 */ cmpw r27, r29 +/* 0001A504 00027294 41 82 A5 18 */ beq .L_00014A1C +/* 0001A508 00027298 7F A4 EB 78 */ mr r4, r29 +/* 0001A50C 0002729C 7F E3 FB 78 */ mr r3, r31 +/* 0001A510 000272A0 7C A4 D8 50 */ subf r5, r4, r27 +/* 0001A514 000272A4 48 00 00 01 */ bl memmove +/* 0001A518 000272A8 80 9C 00 00 */ lwz r4, 0x0(r28) +/* 0001A51C 000272AC 80 1C 00 0C */ lwz r0, 0xc(r28) +/* 0001A520 000272B0 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0001A524 000272B4 7C 04 00 50 */ subf r0, r4, r0 +/* 0001A528 000272B8 7C 00 16 70 */ srawi r0, r0, 2 +.L_0001A52C: +/* 0001A52C 000272BC 41 82 A5 80 */ beq .L_00014AAC +/* 0001A530 000272C0 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0001A534 000272C4 3C C0 00 00 */ lis r6, .rodata+0x1BC@ha +/* 0001A538 000272C8 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0001A53C 000272CC 54 05 10 3A */ slwi r5, r0, 2 +/* 0001A540 000272D0 38 C6 01 BC */ addi r6, r6, .rodata+0x1BC@l +/* 0001A544 000272D4 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 0001A548 000272D8 48 01 A5 80 */ b .text+0x1A580 +/* 0001A54C 000272DC 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0001A550 000272E0 41 82 A5 74 */ beq .L_00014AC4 +/* 0001A554 000272E4 54 9E 10 3A */ slwi r30, r4, 2 +/* 0001A558 000272E8 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0001A55C 000272EC 3C A0 00 00 */ lis r5, .rodata+0x1BC@ha +/* 0001A560 000272F0 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0001A564 000272F4 38 A5 01 BC */ addi r5, r5, .rodata+0x1BC@l +/* 0001A568 000272F8 7F C4 F3 78 */ mr r4, r30 +.L_0001A56C: +/* 0001A56C 000272FC 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 0001A570 00027300 48 01 A5 7C */ b .text+0x1A57C +/* 0001A574 00027304 38 60 00 00 */ li r3, 0x0 +/* 0001A578 00027308 3B C0 00 00 */ li r30, 0x0 +/* 0001A57C 0002730C 7C 7F 1B 78 */ mr r31, r3 +/* 0001A580 00027310 57 40 10 3A */ slwi r0, r26, 2 +/* 0001A584 00027314 7D 3E FA 14 */ add r9, r30, r31 +/* 0001A588 00027318 7C 00 FA 14 */ add r0, r0, r31 +.L_0001A58C: +/* 0001A58C 0002731C 91 3C 00 0C */ stw r9, 0xc(r28) +/* 0001A590 00027320 93 FC 00 00 */ stw r31, 0x0(r28) +/* 0001A594 00027324 90 1C 00 04 */ stw r0, 0x4(r28) +/* 0001A598 00027328 80 01 00 24 */ lwz r0, 0x24(r1) +/* 0001A59C 0002732C 7C 08 03 A6 */ mtlr r0 +/* 0001A5A0 00027330 BB 41 00 08 */ lmw r26, 0x8(r1) +/* 0001A5A4 00027334 38 21 00 20 */ addi r1, r1, 0x20 +/* 0001A5A8 00027338 4E 80 00 20 */ blr +.endfn reserve__Q24_STLt6vector2ZPCQ26Attrib8TypeDescZQ24_STLt9allocator1ZPCQ26Attrib8TypeDescUi + +# .text:0x1A5AC | size: 0x174 +.fn _M_insert__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescPQ24_STL18_Rb_tree_node_baseT1RCQ26Attrib8TypeDescT1, weak +/* 0001A5AC 0002733C 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0001A5B0 00027340 7C 08 02 A6 */ mflr r0 +/* 0001A5B4 00027344 BF 81 00 08 */ stmw r28, 0x8(r1) +/* 0001A5B8 00027348 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0001A5BC 0002734C 7C 9D 23 78 */ mr r29, r4 +/* 0001A5C0 00027350 7C DE 33 78 */ mr r30, r6 +/* 0001A5C4 00027354 80 1D 00 04 */ lwz r0, 0x4(r29) +/* 0001A5C8 00027358 7C 7C 1B 78 */ mr r28, r3 +/* 0001A5CC 0002735C 7C FF 3B 78 */ mr r31, r7 +/* 0001A5D0 00027360 7C 1E 00 00 */ cmpw r30, r0 +/* 0001A5D4 00027364 41 82 A5 F8 */ beq .L_00014BCC +/* 0001A5D8 00027368 2C 08 00 00 */ cmpwi r8, 0x0 +/* 0001A5DC 0002736C 40 82 A6 74 */ bne .L_00014C50 +/* 0001A5E0 00027370 2C 05 00 00 */ cmpwi r5, 0x0 +/* 0001A5E4 00027374 40 82 A5 F8 */ bne .L_00014BDC +/* 0001A5E8 00027378 81 3F 00 00 */ lwz r9, 0x0(r31) +/* 0001A5EC 0002737C 80 1E 00 10 */ lwz r0, 0x10(r30) +/* 0001A5F0 00027380 7C 09 00 40 */ cmplw r9, r0 +/* 0001A5F4 00027384 40 80 A6 74 */ bge .L_00014C68 +/* 0001A5F8 00027388 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0001A5FC 0002738C 3C A0 00 00 */ lis r5, .rodata+0x1BC@ha +.L_0001A600: +/* 0001A600 00027390 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0001A604 00027394 38 A5 01 BC */ addi r5, r5, .rodata+0x1BC@l +/* 0001A608 00027398 38 80 00 24 */ li r4, 0x24 +/* 0001A60C 0002739C 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 0001A610 000273A0 35 03 00 10 */ addic. r8, r3, 0x10 +/* 0001A614 000273A4 41 82 A6 40 */ beq .L_00014C54 +/* 0001A618 000273A8 80 1F 00 00 */ lwz r0, 0x0(r31) +/* 0001A61C 000273AC 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 0001A620 000273B0 81 7F 00 08 */ lwz r11, 0x8(r31) +/* 0001A624 000273B4 81 5F 00 0C */ lwz r10, 0xc(r31) +/* 0001A628 000273B8 90 03 00 10 */ stw r0, 0x10(r3) +/* 0001A62C 000273BC 91 28 00 04 */ stw r9, 0x4(r8) +/* 0001A630 000273C0 91 68 00 08 */ stw r11, 0x8(r8) +/* 0001A634 000273C4 91 48 00 0C */ stw r10, 0xc(r8) +/* 0001A638 000273C8 80 1F 00 10 */ lwz r0, 0x10(r31) +/* 0001A63C 000273CC 90 08 00 10 */ stw r0, 0x10(r8) +/* 0001A640 000273D0 7C 7F 1B 78 */ mr r31, r3 +/* 0001A644 000273D4 93 FE 00 08 */ stw r31, 0x8(r30) +/* 0001A648 000273D8 81 3D 00 04 */ lwz r9, 0x4(r29) +/* 0001A64C 000273DC 7C 1E 48 00 */ cmpw r30, r9 +/* 0001A650 000273E0 40 82 A6 60 */ bne .L_00014CB0 +/* 0001A654 000273E4 93 FE 00 04 */ stw r31, 0x4(r30) +/* 0001A658 000273E8 81 3D 00 04 */ lwz r9, 0x4(r29) +/* 0001A65C 000273EC 48 01 A6 D4 */ b .text+0x1A6D4 +/* 0001A660 000273F0 80 09 00 08 */ lwz r0, 0x8(r9) +/* 0001A664 000273F4 7C 1E 00 00 */ cmpw r30, r0 +/* 0001A668 000273F8 40 82 A6 D8 */ bne .L_00014D40 +/* 0001A66C 000273FC 93 E9 00 08 */ stw r31, 0x8(r9) +/* 0001A670 00027400 48 01 A6 D8 */ b .text+0x1A6D8 +/* 0001A674 00027404 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0001A678 00027408 3C A0 00 00 */ lis r5, .rodata+0x1BC@ha +/* 0001A67C 0002740C 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0001A680 00027410 38 A5 01 BC */ addi r5, r5, .rodata+0x1BC@l +/* 0001A684 00027414 38 80 00 24 */ li r4, 0x24 +/* 0001A688 00027418 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 0001A68C 0002741C 35 03 00 10 */ addic. r8, r3, 0x10 +/* 0001A690 00027420 41 82 A6 BC */ beq .L_00014D4C +/* 0001A694 00027424 80 1F 00 00 */ lwz r0, 0x0(r31) +/* 0001A698 00027428 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 0001A69C 0002742C 81 7F 00 08 */ lwz r11, 0x8(r31) +/* 0001A6A0 00027430 81 5F 00 0C */ lwz r10, 0xc(r31) +/* 0001A6A4 00027434 90 03 00 10 */ stw r0, 0x10(r3) +/* 0001A6A8 00027438 91 28 00 04 */ stw r9, 0x4(r8) +/* 0001A6AC 0002743C 91 68 00 08 */ stw r11, 0x8(r8) +/* 0001A6B0 00027440 91 48 00 0C */ stw r10, 0xc(r8) +/* 0001A6B4 00027444 80 1F 00 10 */ lwz r0, 0x10(r31) +/* 0001A6B8 00027448 90 08 00 10 */ stw r0, 0x10(r8) +/* 0001A6BC 0002744C 7C 7F 1B 78 */ mr r31, r3 +/* 0001A6C0 00027450 93 FE 00 0C */ stw r31, 0xc(r30) +/* 0001A6C4 00027454 81 3D 00 04 */ lwz r9, 0x4(r29) +/* 0001A6C8 00027458 80 09 00 0C */ lwz r0, 0xc(r9) +/* 0001A6CC 0002745C 7C 1E 00 00 */ cmpw r30, r0 +/* 0001A6D0 00027460 40 82 A6 D8 */ bne .L_00014DA8 +/* 0001A6D4 00027464 93 E9 00 0C */ stw r31, 0xc(r9) +/* 0001A6D8 00027468 38 00 00 00 */ li r0, 0x0 +/* 0001A6DC 0002746C 93 DF 00 04 */ stw r30, 0x4(r31) +/* 0001A6E0 00027470 90 1F 00 0C */ stw r0, 0xc(r31) +/* 0001A6E4 00027474 7F E3 FB 78 */ mr r3, r31 +/* 0001A6E8 00027478 90 1F 00 08 */ stw r0, 0x8(r31) +/* 0001A6EC 0002747C 80 9D 00 04 */ lwz r4, 0x4(r29) +/* 0001A6F0 00027480 38 84 00 04 */ addi r4, r4, 0x4 +/* 0001A6F4 00027484 48 00 00 01 */ bl _Rebalance__Q24_STLt10_Rb_global1ZbPQ24_STL18_Rb_tree_node_baseRPQ24_STL18_Rb_tree_node_base +/* 0001A6F8 00027488 81 3D 00 08 */ lwz r9, 0x8(r29) +/* 0001A6FC 0002748C 7F 83 E3 78 */ mr r3, r28 +/* 0001A700 00027490 39 29 00 01 */ addi r9, r9, 0x1 +.L_0001A704: +/* 0001A704 00027494 91 3D 00 08 */ stw r9, 0x8(r29) +/* 0001A708 00027498 93 FC 00 00 */ stw r31, 0x0(r28) +/* 0001A70C 0002749C 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0001A710 000274A0 7C 08 03 A6 */ mtlr r0 +/* 0001A714 000274A4 BB 81 00 08 */ lmw r28, 0x8(r1) +/* 0001A718 000274A8 38 21 00 18 */ addi r1, r1, 0x18 +/* 0001A71C 000274AC 4E 80 00 20 */ blr +.endfn _M_insert__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescPQ24_STL18_Rb_tree_node_baseT1RCQ26Attrib8TypeDescT1 + +# .text:0x1A720 | size: 0x118 +.fn insert_unique__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescRCQ26Attrib8TypeDesc, weak +/* 0001A720 000274B0 94 21 FF C8 */ stwu r1, -0x38(r1) +/* 0001A724 000274B4 7C 08 02 A6 */ mflr r0 +/* 0001A728 000274B8 BF 61 00 24 */ stmw r27, 0x24(r1) +/* 0001A72C 000274BC 90 01 00 3C */ stw r0, 0x3c(r1) +/* 0001A730 000274C0 7C 9C 23 78 */ mr r28, r4 +/* 0001A734 000274C4 7C 7D 1B 78 */ mr r29, r3 +/* 0001A738 000274C8 83 FC 00 04 */ lwz r31, 0x4(r28) +/* 0001A73C 000274CC 7C BB 2B 78 */ mr r27, r5 +/* 0001A740 000274D0 38 00 00 01 */ li r0, 0x1 +/* 0001A744 000274D4 83 DF 00 04 */ lwz r30, 0x4(r31) +/* 0001A748 000274D8 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 0001A74C 000274DC 41 82 A7 80 */ beq .L_00014ECC +/* 0001A750 000274E0 81 3B 00 00 */ lwz r9, 0x0(r27) +/* 0001A754 000274E4 7F DF F3 78 */ mr r31, r30 +/* 0001A758 000274E8 80 1F 00 10 */ lwz r0, 0x10(r31) +/* 0001A75C 000274EC 7C 00 48 10 */ subfc r0, r0, r9 +/* 0001A760 000274F0 7C 00 01 10 */ subfe r0, r0, r0 +.L_0001A764: +/* 0001A764 000274F4 7C 00 00 D1 */ neg. r0, r0 +/* 0001A768 000274F8 41 82 A7 74 */ beq .L_00014EDC +/* 0001A76C 000274FC 83 DF 00 08 */ lwz r30, 0x8(r31) +/* 0001A770 00027500 48 01 A7 78 */ b .text+0x1A778 +/* 0001A774 00027504 83 DF 00 0C */ lwz r30, 0xc(r31) +/* 0001A778 00027508 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 0001A77C 0002750C 40 82 A7 54 */ bne .L_00014ED0 +/* 0001A780 00027510 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0001A784 00027514 93 E1 00 08 */ stw r31, 0x8(r1) +/* 0001A788 00027518 41 82 A7 D0 */ beq .L_00014F58 +/* 0001A78C 0002751C 81 3C 00 04 */ lwz r9, 0x4(r28) +/* 0001A790 00027520 80 09 00 08 */ lwz r0, 0x8(r9) +/* 0001A794 00027524 7C 1F 00 00 */ cmpw r31, r0 +/* 0001A798 00027528 90 01 00 10 */ stw r0, 0x10(r1) +/* 0001A79C 0002752C 40 82 A7 C4 */ bne .L_00014F60 +/* 0001A7A0 00027530 7F 84 E3 78 */ mr r4, r28 +/* 0001A7A4 00027534 7F C5 F3 78 */ mr r5, r30 +/* 0001A7A8 00027538 7F E6 FB 78 */ mr r6, r31 +/* 0001A7AC 0002753C 7F 67 DB 78 */ mr r7, r27 +/* 0001A7B0 00027540 38 61 00 18 */ addi r3, r1, 0x18 +/* 0001A7B4 00027544 39 00 00 00 */ li r8, 0x0 +/* 0001A7B8 00027548 48 00 00 01 */ bl _M_insert__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescPQ24_STL18_Rb_tree_node_baseT1RCQ26Attrib8TypeDescT1 +.L_0001A7BC: +/* 0001A7BC 0002754C 81 21 00 18 */ lwz r9, 0x18(r1) +/* 0001A7C0 00027550 48 01 A8 04 */ b .text+0x1A804 +/* 0001A7C4 00027554 7F E3 FB 78 */ mr r3, r31 +/* 0001A7C8 00027558 48 00 00 01 */ bl _M_decrement__Q24_STLt10_Rb_global1ZbPQ24_STL18_Rb_tree_node_base +/* 0001A7CC 0002755C 90 61 00 08 */ stw r3, 0x8(r1) +/* 0001A7D0 00027560 81 61 00 08 */ lwz r11, 0x8(r1) +/* 0001A7D4 00027564 81 3B 00 00 */ lwz r9, 0x0(r27) +/* 0001A7D8 00027568 80 0B 00 10 */ lwz r0, 0x10(r11) +/* 0001A7DC 0002756C 7C 00 48 40 */ cmplw r0, r9 +/* 0001A7E0 00027570 40 80 A8 14 */ bge .L_00014FF4 +/* 0001A7E4 00027574 7F 84 E3 78 */ mr r4, r28 +/* 0001A7E8 00027578 7F C5 F3 78 */ mr r5, r30 +/* 0001A7EC 0002757C 7F E6 FB 78 */ mr r6, r31 +/* 0001A7F0 00027580 7F 67 DB 78 */ mr r7, r27 +.L_0001A7F4: +/* 0001A7F4 00027584 38 61 00 10 */ addi r3, r1, 0x10 +/* 0001A7F8 00027588 39 00 00 00 */ li r8, 0x0 +/* 0001A7FC 0002758C 48 00 00 01 */ bl _M_insert__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescPQ24_STL18_Rb_tree_node_baseT1RCQ26Attrib8TypeDescT1 +/* 0001A800 00027590 81 21 00 10 */ lwz r9, 0x10(r1) +/* 0001A804 00027594 38 00 00 01 */ li r0, 0x1 +.L_0001A808: +/* 0001A808 00027598 90 1D 00 04 */ stw r0, 0x4(r29) +/* 0001A80C 0002759C 91 3D 00 00 */ stw r9, 0x0(r29) +/* 0001A810 000275A0 48 01 A8 20 */ b .text+0x1A820 +.L_0001A814: +/* 0001A814 000275A4 38 00 00 00 */ li r0, 0x0 +/* 0001A818 000275A8 91 7D 00 00 */ stw r11, 0x0(r29) +/* 0001A81C 000275AC 90 1D 00 04 */ stw r0, 0x4(r29) +/* 0001A820 000275B0 7F A3 EB 78 */ mr r3, r29 +/* 0001A824 000275B4 80 01 00 3C */ lwz r0, 0x3c(r1) +/* 0001A828 000275B8 7C 08 03 A6 */ mtlr r0 +.L_0001A82C: +/* 0001A82C 000275BC BB 61 00 24 */ lmw r27, 0x24(r1) +/* 0001A830 000275C0 38 21 00 38 */ addi r1, r1, 0x38 +/* 0001A834 000275C4 4E 80 00 20 */ blr +.endfn insert_unique__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescRCQ26Attrib8TypeDesc + +# .text:0x1A838 | size: 0xB0 +.fn find__H2ZPP14ICollisionBodyZP14ICollisionBody_4_STLX01X01RCX11_X01, weak +/* 0001A838 000275C8 7C 03 20 50 */ subf r0, r3, r4 +/* 0001A83C 000275CC 7C 0B 26 71 */ srawi. r11, r0, 4 +/* 0001A840 000275D0 40 81 A8 84 */ ble .L_000150C4 +/* 0001A844 000275D4 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001A848 000275D8 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001A84C 000275DC 7C 00 48 00 */ cmpw r0, r9 +/* 0001A850 000275E0 4D 82 00 20 */ beqlr +/* 0001A854 000275E4 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001A858 000275E8 7C 00 48 00 */ cmpw r0, r9 +/* 0001A85C 000275EC 4D 82 00 20 */ beqlr +/* 0001A860 000275F0 84 03 00 04 */ lwzu r0, 0x4(r3) +.L_0001A864: +/* 0001A864 000275F4 7C 00 48 00 */ cmpw r0, r9 +/* 0001A868 000275F8 4D 82 00 20 */ beqlr +/* 0001A86C 000275FC 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001A870 00027600 7C 00 48 00 */ cmpw r0, r9 +/* 0001A874 00027604 4D 82 00 20 */ beqlr +/* 0001A878 00027608 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001A87C 0002760C 35 6B FF FF */ subic. r11, r11, 0x1 +/* 0001A880 00027610 41 81 A8 48 */ bgt .L_000150C8 +/* 0001A884 00027614 7C 03 20 50 */ subf r0, r3, r4 +/* 0001A888 00027618 7C 00 16 70 */ srawi r0, r0, 2 +/* 0001A88C 0002761C 2C 00 00 01 */ cmpwi r0, 0x1 +/* 0001A890 00027620 41 82 A8 D0 */ beq .L_00015160 +/* 0001A894 00027624 40 81 A8 E0 */ ble .L_00015174 +/* 0001A898 00027628 2C 00 00 02 */ cmpwi r0, 0x2 +/* 0001A89C 0002762C 41 82 A8 BC */ beq .L_00015158 +/* 0001A8A0 00027630 2C 00 00 03 */ cmpwi r0, 0x3 +/* 0001A8A4 00027634 40 82 A8 E0 */ bne .L_00015184 +/* 0001A8A8 00027638 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001A8AC 0002763C 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001A8B0 00027640 7C 09 00 00 */ cmpw r9, r0 +/* 0001A8B4 00027644 4D 82 00 20 */ beqlr +/* 0001A8B8 00027648 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001A8BC 0002764C 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001A8C0 00027650 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001A8C4 00027654 7C 09 00 00 */ cmpw r9, r0 +/* 0001A8C8 00027658 4D 82 00 20 */ beqlr +/* 0001A8CC 0002765C 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001A8D0 00027660 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001A8D4 00027664 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001A8D8 00027668 7C 00 48 00 */ cmpw r0, r9 +/* 0001A8DC 0002766C 4D 82 00 20 */ beqlr +/* 0001A8E0 00027670 7C 83 23 78 */ mr r3, r4 +/* 0001A8E4 00027674 4E 80 00 20 */ blr +.endfn find__H2ZPP14ICollisionBodyZP14ICollisionBody_4_STLX01X01RCX11_X01 + +# .text:0x1A8E8 | size: 0xB0 +.fn find__H2ZPP10IExplosionZP10IExplosion_4_STLX01X01RCX11_X01, weak +/* 0001A8E8 00027678 7C 03 20 50 */ subf r0, r3, r4 +/* 0001A8EC 0002767C 7C 0B 26 71 */ srawi. r11, r0, 4 +/* 0001A8F0 00027680 40 81 A9 34 */ ble .L_00015224 +/* 0001A8F4 00027684 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001A8F8 00027688 80 03 00 00 */ lwz r0, 0x0(r3) +.L_0001A8FC: +/* 0001A8FC 0002768C 7C 00 48 00 */ cmpw r0, r9 +/* 0001A900 00027690 4D 82 00 20 */ beqlr +/* 0001A904 00027694 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001A908 00027698 7C 00 48 00 */ cmpw r0, r9 +/* 0001A90C 0002769C 4D 82 00 20 */ beqlr +/* 0001A910 000276A0 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001A914 000276A4 7C 00 48 00 */ cmpw r0, r9 +/* 0001A918 000276A8 4D 82 00 20 */ beqlr +/* 0001A91C 000276AC 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001A920 000276B0 7C 00 48 00 */ cmpw r0, r9 +/* 0001A924 000276B4 4D 82 00 20 */ beqlr +/* 0001A928 000276B8 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001A92C 000276BC 35 6B FF FF */ subic. r11, r11, 0x1 +/* 0001A930 000276C0 41 81 A8 F8 */ bgt .L_00015228 +/* 0001A934 000276C4 7C 03 20 50 */ subf r0, r3, r4 +/* 0001A938 000276C8 7C 00 16 70 */ srawi r0, r0, 2 +.L_0001A93C: +/* 0001A93C 000276CC 2C 00 00 01 */ cmpwi r0, 0x1 +/* 0001A940 000276D0 41 82 A9 80 */ beq .L_000152C0 +/* 0001A944 000276D4 40 81 A9 90 */ ble .L_000152D4 +/* 0001A948 000276D8 2C 00 00 02 */ cmpwi r0, 0x2 +/* 0001A94C 000276DC 41 82 A9 6C */ beq .L_000152B8 +/* 0001A950 000276E0 2C 00 00 03 */ cmpwi r0, 0x3 +/* 0001A954 000276E4 40 82 A9 90 */ bne .L_000152E4 +/* 0001A958 000276E8 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001A95C 000276EC 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001A960 000276F0 7C 09 00 00 */ cmpw r9, r0 +/* 0001A964 000276F4 4D 82 00 20 */ beqlr +/* 0001A968 000276F8 38 63 00 04 */ addi r3, r3, 0x4 +.L_0001A96C: +/* 0001A96C 000276FC 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001A970 00027700 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001A974 00027704 7C 09 00 00 */ cmpw r9, r0 +/* 0001A978 00027708 4D 82 00 20 */ beqlr +/* 0001A97C 0002770C 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001A980 00027710 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001A984 00027714 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001A988 00027718 7C 00 48 00 */ cmpw r0, r9 +/* 0001A98C 0002771C 4D 82 00 20 */ beqlr +/* 0001A990 00027720 7C 83 23 78 */ mr r3, r4 +/* 0001A994 00027724 4E 80 00 20 */ blr +.endfn find__H2ZPP10IExplosionZP10IExplosion_4_STLX01X01RCX11_X01 + +# .text:0x1A998 | size: 0xB0 +.fn find__H2ZPP6IModelZP6IModel_4_STLX01X01RCX11_X01, weak +/* 0001A998 00027728 7C 03 20 50 */ subf r0, r3, r4 +/* 0001A99C 0002772C 7C 0B 26 71 */ srawi. r11, r0, 4 +/* 0001A9A0 00027730 40 81 A9 E4 */ ble .L_00015384 +/* 0001A9A4 00027734 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001A9A8 00027738 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001A9AC 0002773C 7C 00 48 00 */ cmpw r0, r9 +/* 0001A9B0 00027740 4D 82 00 20 */ beqlr +/* 0001A9B4 00027744 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001A9B8 00027748 7C 00 48 00 */ cmpw r0, r9 +/* 0001A9BC 0002774C 4D 82 00 20 */ beqlr +/* 0001A9C0 00027750 84 03 00 04 */ lwzu r0, 0x4(r3) +.L_0001A9C4: +/* 0001A9C4 00027754 7C 00 48 00 */ cmpw r0, r9 +/* 0001A9C8 00027758 4D 82 00 20 */ beqlr +/* 0001A9CC 0002775C 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001A9D0 00027760 7C 00 48 00 */ cmpw r0, r9 +/* 0001A9D4 00027764 4D 82 00 20 */ beqlr +/* 0001A9D8 00027768 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001A9DC 0002776C 35 6B FF FF */ subic. r11, r11, 0x1 +/* 0001A9E0 00027770 41 81 A9 A8 */ bgt .L_00015388 +/* 0001A9E4 00027774 7C 03 20 50 */ subf r0, r3, r4 +/* 0001A9E8 00027778 7C 00 16 70 */ srawi r0, r0, 2 +/* 0001A9EC 0002777C 2C 00 00 01 */ cmpwi r0, 0x1 +/* 0001A9F0 00027780 41 82 AA 30 */ beq .L_00015420 +.L_0001A9F4: +/* 0001A9F4 00027784 40 81 AA 40 */ ble .L_00015434 +/* 0001A9F8 00027788 2C 00 00 02 */ cmpwi r0, 0x2 +/* 0001A9FC 0002778C 41 82 AA 1C */ beq .L_00015418 +/* 0001AA00 00027790 2C 00 00 03 */ cmpwi r0, 0x3 +/* 0001AA04 00027794 40 82 AA 40 */ bne .L_00015444 +/* 0001AA08 00027798 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001AA0C 0002779C 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001AA10 000277A0 7C 09 00 00 */ cmpw r9, r0 +/* 0001AA14 000277A4 4D 82 00 20 */ beqlr +/* 0001AA18 000277A8 38 63 00 04 */ addi r3, r3, 0x4 +.L_0001AA1C: +/* 0001AA1C 000277AC 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001AA20 000277B0 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001AA24 000277B4 7C 09 00 00 */ cmpw r9, r0 +.L_0001AA28: +/* 0001AA28 000277B8 4D 82 00 20 */ beqlr +/* 0001AA2C 000277BC 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001AA30 000277C0 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001AA34 000277C4 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001AA38 000277C8 7C 00 48 00 */ cmpw r0, r9 +/* 0001AA3C 000277CC 4D 82 00 20 */ beqlr +/* 0001AA40 000277D0 7C 83 23 78 */ mr r3, r4 +/* 0001AA44 000277D4 4E 80 00 20 */ blr +.endfn find__H2ZPP6IModelZP6IModel_4_STLX01X01RCX11_X01 + +# .text:0x1AA48 | size: 0xB0 +.fn find__H2ZPP8IVehicleZP8IVehicle_4_STLX01X01RCX11_X01, weak +/* 0001AA48 000277D8 7C 03 20 50 */ subf r0, r3, r4 +/* 0001AA4C 000277DC 7C 0B 26 71 */ srawi. r11, r0, 4 +/* 0001AA50 000277E0 40 81 AA 94 */ ble .L_000154E4 +/* 0001AA54 000277E4 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001AA58 000277E8 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001AA5C 000277EC 7C 00 48 00 */ cmpw r0, r9 +/* 0001AA60 000277F0 4D 82 00 20 */ beqlr +/* 0001AA64 000277F4 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001AA68 000277F8 7C 00 48 00 */ cmpw r0, r9 +/* 0001AA6C 000277FC 4D 82 00 20 */ beqlr +/* 0001AA70 00027800 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001AA74 00027804 7C 00 48 00 */ cmpw r0, r9 +/* 0001AA78 00027808 4D 82 00 20 */ beqlr +/* 0001AA7C 0002780C 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001AA80 00027810 7C 00 48 00 */ cmpw r0, r9 +/* 0001AA84 00027814 4D 82 00 20 */ beqlr +/* 0001AA88 00027818 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001AA8C 0002781C 35 6B FF FF */ subic. r11, r11, 0x1 +/* 0001AA90 00027820 41 81 AA 58 */ bgt .L_000154E8 +/* 0001AA94 00027824 7C 03 20 50 */ subf r0, r3, r4 +/* 0001AA98 00027828 7C 00 16 70 */ srawi r0, r0, 2 +/* 0001AA9C 0002782C 2C 00 00 01 */ cmpwi r0, 0x1 +/* 0001AAA0 00027830 41 82 AA E0 */ beq .L_00015580 +/* 0001AAA4 00027834 40 81 AA F0 */ ble .L_00015594 +/* 0001AAA8 00027838 2C 00 00 02 */ cmpwi r0, 0x2 +/* 0001AAAC 0002783C 41 82 AA CC */ beq .L_00015578 +/* 0001AAB0 00027840 2C 00 00 03 */ cmpwi r0, 0x3 +/* 0001AAB4 00027844 40 82 AA F0 */ bne .L_000155A4 +/* 0001AAB8 00027848 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001AABC 0002784C 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001AAC0 00027850 7C 09 00 00 */ cmpw r9, r0 +/* 0001AAC4 00027854 4D 82 00 20 */ beqlr +.L_0001AAC8: +/* 0001AAC8 00027858 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001AACC 0002785C 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001AAD0 00027860 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001AAD4 00027864 7C 09 00 00 */ cmpw r9, r0 +/* 0001AAD8 00027868 4D 82 00 20 */ beqlr +/* 0001AADC 0002786C 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001AAE0 00027870 81 25 00 00 */ lwz r9, 0x0(r5) +.L_0001AAE4: +/* 0001AAE4 00027874 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001AAE8 00027878 7C 00 48 00 */ cmpw r0, r9 +/* 0001AAEC 0002787C 4D 82 00 20 */ beqlr +/* 0001AAF0 00027880 7C 83 23 78 */ mr r3, r4 +/* 0001AAF4 00027884 4E 80 00 20 */ blr +.endfn find__H2ZPP8IVehicleZP8IVehicle_4_STLX01X01RCX11_X01 + +# .text:0x1AAF8 | size: 0x78 +.fn clear__Q24_STLt10_List_base2ZP11IAttachableZQ33UTL3Stdt9Allocator2ZP11IAttachableZ21_type_IAttachableList, weak +/* 0001AAF8 00027888 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0001AAFC 0002788C 7C 08 02 A6 */ mflr r0 +/* 0001AB00 00027890 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 0001AB04 00027894 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0001AB08 00027898 7C 7E 1B 78 */ mr r30, r3 +/* 0001AB0C 0002789C 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0001AB10 000278A0 83 E9 00 00 */ lwz r31, 0x0(r9) +/* 0001AB14 000278A4 7C 1F 48 00 */ cmpw r31, r9 +/* 0001AB18 000278A8 41 82 AB 4C */ beq .L_00015664 +/* 0001AB1C 000278AC 3F A0 00 00 */ lis r29, gFastMem@ha +/* 0001AB20 000278B0 7F E4 FB 78 */ mr r4, r31 +/* 0001AB24 000278B4 83 FF 00 00 */ lwz r31, 0x0(r31) +/* 0001AB28 000278B8 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0001AB2C 000278BC 41 82 AB 40 */ beq .L_0001566C +/* 0001AB30 000278C0 38 7D 00 00 */ addi r3, r29, gFastMem@l +/* 0001AB34 000278C4 38 A0 00 0C */ li r5, 0xc +/* 0001AB38 000278C8 38 C0 00 00 */ li r6, 0x0 +/* 0001AB3C 000278CC 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 0001AB40 000278D0 80 1E 00 04 */ lwz r0, 0x4(r30) +/* 0001AB44 000278D4 7C 1F 00 00 */ cmpw r31, r0 +/* 0001AB48 000278D8 40 82 AB 20 */ bne .L_00015668 +/* 0001AB4C 000278DC 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0001AB50 000278E0 91 29 00 00 */ stw r9, 0x0(r9) +/* 0001AB54 000278E4 81 7E 00 04 */ lwz r11, 0x4(r30) +/* 0001AB58 000278E8 91 6B 00 04 */ stw r11, 0x4(r11) +/* 0001AB5C 000278EC 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0001AB60 000278F0 7C 08 03 A6 */ mtlr r0 +/* 0001AB64 000278F4 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 0001AB68 000278F8 38 21 00 18 */ addi r1, r1, 0x18 +/* 0001AB6C 000278FC 4E 80 00 20 */ blr +.endfn clear__Q24_STLt10_List_base2ZP11IAttachableZQ33UTL3Stdt9Allocator2ZP11IAttachableZ21_type_IAttachableList + +# .text:0x1AB70 | size: 0xB0 +.fn find__H2ZPP13IVehicleCacheZP13IVehicleCache_4_STLX01X01RCX11_X01, weak +/* 0001AB70 00027900 7C 03 20 50 */ subf r0, r3, r4 +/* 0001AB74 00027904 7C 0B 26 71 */ srawi. r11, r0, 4 +/* 0001AB78 00027908 40 81 AB BC */ ble .L_00015734 +/* 0001AB7C 0002790C 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001AB80 00027910 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001AB84 00027914 7C 00 48 00 */ cmpw r0, r9 +/* 0001AB88 00027918 4D 82 00 20 */ beqlr +/* 0001AB8C 0002791C 84 03 00 04 */ lwzu r0, 0x4(r3) +.L_0001AB90: +/* 0001AB90 00027920 7C 00 48 00 */ cmpw r0, r9 +/* 0001AB94 00027924 4D 82 00 20 */ beqlr +/* 0001AB98 00027928 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001AB9C 0002792C 7C 00 48 00 */ cmpw r0, r9 +.L_0001ABA0: +/* 0001ABA0 00027930 4D 82 00 20 */ beqlr +.L_0001ABA4: +/* 0001ABA4 00027934 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001ABA8 00027938 7C 00 48 00 */ cmpw r0, r9 +/* 0001ABAC 0002793C 4D 82 00 20 */ beqlr +/* 0001ABB0 00027940 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001ABB4 00027944 35 6B FF FF */ subic. r11, r11, 0x1 +/* 0001ABB8 00027948 41 81 AB 80 */ bgt .L_00015738 +/* 0001ABBC 0002794C 7C 03 20 50 */ subf r0, r3, r4 +.L_0001ABC0: +/* 0001ABC0 00027950 7C 00 16 70 */ srawi r0, r0, 2 +/* 0001ABC4 00027954 2C 00 00 01 */ cmpwi r0, 0x1 +/* 0001ABC8 00027958 41 82 AC 08 */ beq .L_000157D0 +/* 0001ABCC 0002795C 40 81 AC 18 */ ble .L_000157E4 +/* 0001ABD0 00027960 2C 00 00 02 */ cmpwi r0, 0x2 +/* 0001ABD4 00027964 41 82 AB F4 */ beq .L_000157C8 +/* 0001ABD8 00027968 2C 00 00 03 */ cmpwi r0, 0x3 +/* 0001ABDC 0002796C 40 82 AC 18 */ bne .L_000157F4 +/* 0001ABE0 00027970 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001ABE4 00027974 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001ABE8 00027978 7C 09 00 00 */ cmpw r9, r0 +/* 0001ABEC 0002797C 4D 82 00 20 */ beqlr +/* 0001ABF0 00027980 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001ABF4 00027984 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001ABF8 00027988 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001ABFC 0002798C 7C 09 00 00 */ cmpw r9, r0 +/* 0001AC00 00027990 4D 82 00 20 */ beqlr +/* 0001AC04 00027994 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001AC08 00027998 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001AC0C 0002799C 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001AC10 000279A0 7C 00 48 00 */ cmpw r0, r9 +/* 0001AC14 000279A4 4D 82 00 20 */ beqlr +/* 0001AC18 000279A8 7C 83 23 78 */ mr r3, r4 +/* 0001AC1C 000279AC 4E 80 00 20 */ blr +.endfn find__H2ZPP13IVehicleCacheZP13IVehicleCache_4_STLX01X01RCX11_X01 + +# .text:0x1AC20 | size: 0xB0 +.fn find__H2ZPP10IRoadBlockZP10IRoadBlock_4_STLX01X01RCX11_X01, weak +/* 0001AC20 000279B0 7C 03 20 50 */ subf r0, r3, r4 +/* 0001AC24 000279B4 7C 0B 26 71 */ srawi. r11, r0, 4 +/* 0001AC28 000279B8 40 81 AC 6C */ ble .L_00015894 +/* 0001AC2C 000279BC 81 25 00 00 */ lwz r9, 0x0(r5) +.L_0001AC30: +/* 0001AC30 000279C0 80 03 00 00 */ lwz r0, 0x0(r3) +.L_0001AC34: +/* 0001AC34 000279C4 7C 00 48 00 */ cmpw r0, r9 +/* 0001AC38 000279C8 4D 82 00 20 */ beqlr +/* 0001AC3C 000279CC 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001AC40 000279D0 7C 00 48 00 */ cmpw r0, r9 +/* 0001AC44 000279D4 4D 82 00 20 */ beqlr +/* 0001AC48 000279D8 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001AC4C 000279DC 7C 00 48 00 */ cmpw r0, r9 +.L_0001AC50: +/* 0001AC50 000279E0 4D 82 00 20 */ beqlr +/* 0001AC54 000279E4 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001AC58 000279E8 7C 00 48 00 */ cmpw r0, r9 +/* 0001AC5C 000279EC 4D 82 00 20 */ beqlr +/* 0001AC60 000279F0 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001AC64 000279F4 35 6B FF FF */ subic. r11, r11, 0x1 +/* 0001AC68 000279F8 41 81 AC 30 */ bgt .L_00015898 +/* 0001AC6C 000279FC 7C 03 20 50 */ subf r0, r3, r4 +.L_0001AC70: +/* 0001AC70 00027A00 7C 00 16 70 */ srawi r0, r0, 2 +/* 0001AC74 00027A04 2C 00 00 01 */ cmpwi r0, 0x1 +/* 0001AC78 00027A08 41 82 AC B8 */ beq .L_00015930 +/* 0001AC7C 00027A0C 40 81 AC C8 */ ble .L_00015944 +/* 0001AC80 00027A10 2C 00 00 02 */ cmpwi r0, 0x2 +/* 0001AC84 00027A14 41 82 AC A4 */ beq .L_00015928 +/* 0001AC88 00027A18 2C 00 00 03 */ cmpwi r0, 0x3 +/* 0001AC8C 00027A1C 40 82 AC C8 */ bne .L_00015954 +/* 0001AC90 00027A20 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001AC94 00027A24 80 05 00 00 */ lwz r0, 0x0(r5) +.L_0001AC98: +/* 0001AC98 00027A28 7C 09 00 00 */ cmpw r9, r0 +/* 0001AC9C 00027A2C 4D 82 00 20 */ beqlr +/* 0001ACA0 00027A30 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001ACA4 00027A34 81 23 00 00 */ lwz r9, 0x0(r3) +.L_0001ACA8: +/* 0001ACA8 00027A38 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001ACAC 00027A3C 7C 09 00 00 */ cmpw r9, r0 +/* 0001ACB0 00027A40 4D 82 00 20 */ beqlr +/* 0001ACB4 00027A44 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001ACB8 00027A48 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001ACBC 00027A4C 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001ACC0 00027A50 7C 00 48 00 */ cmpw r0, r9 +/* 0001ACC4 00027A54 4D 82 00 20 */ beqlr +.L_0001ACC8: +/* 0001ACC8 00027A58 7C 83 23 78 */ mr r3, r4 +/* 0001ACCC 00027A5C 4E 80 00 20 */ blr +.endfn find__H2ZPP10IRoadBlockZP10IRoadBlock_4_STLX01X01RCX11_X01 + +# .text:0x1ACD0 | size: 0x78 +.fn clear__Q24_STLt10_List_base2ZPcZQ33UTL3Stdt9Allocator2ZPcZ10_type_list, weak +/* 0001ACD0 00027A60 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0001ACD4 00027A64 7C 08 02 A6 */ mflr r0 +/* 0001ACD8 00027A68 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 0001ACDC 00027A6C 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0001ACE0 00027A70 7C 7E 1B 78 */ mr r30, r3 +/* 0001ACE4 00027A74 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0001ACE8 00027A78 83 E9 00 00 */ lwz r31, 0x0(r9) +/* 0001ACEC 00027A7C 7C 1F 48 00 */ cmpw r31, r9 +/* 0001ACF0 00027A80 41 82 AD 24 */ beq .L_00015A14 +/* 0001ACF4 00027A84 3F A0 00 00 */ lis r29, gFastMem@ha +/* 0001ACF8 00027A88 7F E4 FB 78 */ mr r4, r31 +/* 0001ACFC 00027A8C 83 FF 00 00 */ lwz r31, 0x0(r31) +/* 0001AD00 00027A90 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0001AD04 00027A94 41 82 AD 18 */ beq .L_00015A1C +/* 0001AD08 00027A98 38 7D 00 00 */ addi r3, r29, gFastMem@l +/* 0001AD0C 00027A9C 38 A0 00 0C */ li r5, 0xc +/* 0001AD10 00027AA0 38 C0 00 00 */ li r6, 0x0 +/* 0001AD14 00027AA4 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 0001AD18 00027AA8 80 1E 00 04 */ lwz r0, 0x4(r30) +/* 0001AD1C 00027AAC 7C 1F 00 00 */ cmpw r31, r0 +/* 0001AD20 00027AB0 40 82 AC F8 */ bne .L_00015A18 +/* 0001AD24 00027AB4 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0001AD28 00027AB8 91 29 00 00 */ stw r9, 0x0(r9) +/* 0001AD2C 00027ABC 81 7E 00 04 */ lwz r11, 0x4(r30) +/* 0001AD30 00027AC0 91 6B 00 04 */ stw r11, 0x4(r11) +/* 0001AD34 00027AC4 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0001AD38 00027AC8 7C 08 03 A6 */ mtlr r0 +/* 0001AD3C 00027ACC BB A1 00 0C */ lmw r29, 0xc(r1) +/* 0001AD40 00027AD0 38 21 00 18 */ addi r1, r1, 0x18 +/* 0001AD44 00027AD4 4E 80 00 20 */ blr +.endfn clear__Q24_STLt10_List_base2ZPcZQ33UTL3Stdt9Allocator2ZPcZ10_type_list + +# .text:0x1AD48 | size: 0xB0 +.fn find__H2ZPP8IPursuitZP8IPursuit_4_STLX01X01RCX11_X01, weak +/* 0001AD48 00027AD8 7C 03 20 50 */ subf r0, r3, r4 +/* 0001AD4C 00027ADC 7C 0B 26 71 */ srawi. r11, r0, 4 +/* 0001AD50 00027AE0 40 81 AD 94 */ ble .L_00015AE4 +/* 0001AD54 00027AE4 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001AD58 00027AE8 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001AD5C 00027AEC 7C 00 48 00 */ cmpw r0, r9 +/* 0001AD60 00027AF0 4D 82 00 20 */ beqlr +/* 0001AD64 00027AF4 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001AD68 00027AF8 7C 00 48 00 */ cmpw r0, r9 +/* 0001AD6C 00027AFC 4D 82 00 20 */ beqlr +/* 0001AD70 00027B00 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001AD74 00027B04 7C 00 48 00 */ cmpw r0, r9 +/* 0001AD78 00027B08 4D 82 00 20 */ beqlr +/* 0001AD7C 00027B0C 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001AD80 00027B10 7C 00 48 00 */ cmpw r0, r9 +/* 0001AD84 00027B14 4D 82 00 20 */ beqlr +/* 0001AD88 00027B18 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001AD8C 00027B1C 35 6B FF FF */ subic. r11, r11, 0x1 +/* 0001AD90 00027B20 41 81 AD 58 */ bgt .L_00015AE8 +/* 0001AD94 00027B24 7C 03 20 50 */ subf r0, r3, r4 +/* 0001AD98 00027B28 7C 00 16 70 */ srawi r0, r0, 2 +/* 0001AD9C 00027B2C 2C 00 00 01 */ cmpwi r0, 0x1 +/* 0001ADA0 00027B30 41 82 AD E0 */ beq .L_00015B80 +/* 0001ADA4 00027B34 40 81 AD F0 */ ble .L_00015B94 +/* 0001ADA8 00027B38 2C 00 00 02 */ cmpwi r0, 0x2 +/* 0001ADAC 00027B3C 41 82 AD CC */ beq .L_00015B78 +/* 0001ADB0 00027B40 2C 00 00 03 */ cmpwi r0, 0x3 +/* 0001ADB4 00027B44 40 82 AD F0 */ bne .L_00015BA4 +/* 0001ADB8 00027B48 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001ADBC 00027B4C 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001ADC0 00027B50 7C 09 00 00 */ cmpw r9, r0 +/* 0001ADC4 00027B54 4D 82 00 20 */ beqlr +/* 0001ADC8 00027B58 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001ADCC 00027B5C 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001ADD0 00027B60 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001ADD4 00027B64 7C 09 00 00 */ cmpw r9, r0 +/* 0001ADD8 00027B68 4D 82 00 20 */ beqlr +/* 0001ADDC 00027B6C 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001ADE0 00027B70 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001ADE4 00027B74 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001ADE8 00027B78 7C 00 48 00 */ cmpw r0, r9 +/* 0001ADEC 00027B7C 4D 82 00 20 */ beqlr +/* 0001ADF0 00027B80 7C 83 23 78 */ mr r3, r4 +/* 0001ADF4 00027B84 4E 80 00 20 */ blr +.endfn find__H2ZPP8IPursuitZP8IPursuit_4_STLX01X01RCX11_X01 + +# .text:0x1ADF8 | size: 0xB0 +.fn find__H2ZPP4IHudZP4IHud_4_STLX01X01RCX11_X01, weak +/* 0001ADF8 00027B88 7C 03 20 50 */ subf r0, r3, r4 +/* 0001ADFC 00027B8C 7C 0B 26 71 */ srawi. r11, r0, 4 +/* 0001AE00 00027B90 40 81 AE 44 */ ble .L_00015C44 +/* 0001AE04 00027B94 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001AE08 00027B98 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001AE0C 00027B9C 7C 00 48 00 */ cmpw r0, r9 +/* 0001AE10 00027BA0 4D 82 00 20 */ beqlr +/* 0001AE14 00027BA4 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001AE18 00027BA8 7C 00 48 00 */ cmpw r0, r9 +/* 0001AE1C 00027BAC 4D 82 00 20 */ beqlr +/* 0001AE20 00027BB0 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001AE24 00027BB4 7C 00 48 00 */ cmpw r0, r9 +/* 0001AE28 00027BB8 4D 82 00 20 */ beqlr +/* 0001AE2C 00027BBC 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001AE30 00027BC0 7C 00 48 00 */ cmpw r0, r9 +/* 0001AE34 00027BC4 4D 82 00 20 */ beqlr +/* 0001AE38 00027BC8 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001AE3C 00027BCC 35 6B FF FF */ subic. r11, r11, 0x1 +/* 0001AE40 00027BD0 41 81 AE 08 */ bgt .L_00015C48 +/* 0001AE44 00027BD4 7C 03 20 50 */ subf r0, r3, r4 +/* 0001AE48 00027BD8 7C 00 16 70 */ srawi r0, r0, 2 +/* 0001AE4C 00027BDC 2C 00 00 01 */ cmpwi r0, 0x1 +/* 0001AE50 00027BE0 41 82 AE 90 */ beq .L_00015CE0 +/* 0001AE54 00027BE4 40 81 AE A0 */ ble .L_00015CF4 +/* 0001AE58 00027BE8 2C 00 00 02 */ cmpwi r0, 0x2 +/* 0001AE5C 00027BEC 41 82 AE 7C */ beq .L_00015CD8 +/* 0001AE60 00027BF0 2C 00 00 03 */ cmpwi r0, 0x3 +/* 0001AE64 00027BF4 40 82 AE A0 */ bne .L_00015D04 +/* 0001AE68 00027BF8 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001AE6C 00027BFC 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001AE70 00027C00 7C 09 00 00 */ cmpw r9, r0 +/* 0001AE74 00027C04 4D 82 00 20 */ beqlr +/* 0001AE78 00027C08 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001AE7C 00027C0C 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001AE80 00027C10 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001AE84 00027C14 7C 09 00 00 */ cmpw r9, r0 +/* 0001AE88 00027C18 4D 82 00 20 */ beqlr +/* 0001AE8C 00027C1C 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001AE90 00027C20 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001AE94 00027C24 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001AE98 00027C28 7C 00 48 00 */ cmpw r0, r9 +/* 0001AE9C 00027C2C 4D 82 00 20 */ beqlr +/* 0001AEA0 00027C30 7C 83 23 78 */ mr r3, r4 +/* 0001AEA4 00027C34 4E 80 00 20 */ blr +.endfn find__H2ZPP4IHudZP4IHud_4_STLX01X01RCX11_X01 + +# .text:0x1AEA8 | size: 0xB0 +.fn find__H2ZPP7IPlayerZP7IPlayer_4_STLX01X01RCX11_X01, weak +/* 0001AEA8 00027C38 7C 03 20 50 */ subf r0, r3, r4 +/* 0001AEAC 00027C3C 7C 0B 26 71 */ srawi. r11, r0, 4 +/* 0001AEB0 00027C40 40 81 AE F4 */ ble .L_00015DA4 +/* 0001AEB4 00027C44 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001AEB8 00027C48 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001AEBC 00027C4C 7C 00 48 00 */ cmpw r0, r9 +/* 0001AEC0 00027C50 4D 82 00 20 */ beqlr +/* 0001AEC4 00027C54 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001AEC8 00027C58 7C 00 48 00 */ cmpw r0, r9 +/* 0001AECC 00027C5C 4D 82 00 20 */ beqlr +/* 0001AED0 00027C60 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001AED4 00027C64 7C 00 48 00 */ cmpw r0, r9 +/* 0001AED8 00027C68 4D 82 00 20 */ beqlr +/* 0001AEDC 00027C6C 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001AEE0 00027C70 7C 00 48 00 */ cmpw r0, r9 +/* 0001AEE4 00027C74 4D 82 00 20 */ beqlr +/* 0001AEE8 00027C78 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001AEEC 00027C7C 35 6B FF FF */ subic. r11, r11, 0x1 +/* 0001AEF0 00027C80 41 81 AE B8 */ bgt .L_00015DA8 +/* 0001AEF4 00027C84 7C 03 20 50 */ subf r0, r3, r4 +/* 0001AEF8 00027C88 7C 00 16 70 */ srawi r0, r0, 2 +/* 0001AEFC 00027C8C 2C 00 00 01 */ cmpwi r0, 0x1 +/* 0001AF00 00027C90 41 82 AF 40 */ beq .L_00015E40 +/* 0001AF04 00027C94 40 81 AF 50 */ ble .L_00015E54 +/* 0001AF08 00027C98 2C 00 00 02 */ cmpwi r0, 0x2 +/* 0001AF0C 00027C9C 41 82 AF 2C */ beq .L_00015E38 +/* 0001AF10 00027CA0 2C 00 00 03 */ cmpwi r0, 0x3 +/* 0001AF14 00027CA4 40 82 AF 50 */ bne .L_00015E64 +/* 0001AF18 00027CA8 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001AF1C 00027CAC 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001AF20 00027CB0 7C 09 00 00 */ cmpw r9, r0 +/* 0001AF24 00027CB4 4D 82 00 20 */ beqlr +/* 0001AF28 00027CB8 38 63 00 04 */ addi r3, r3, 0x4 +.L_0001AF2C: +/* 0001AF2C 00027CBC 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001AF30 00027CC0 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001AF34 00027CC4 7C 09 00 00 */ cmpw r9, r0 +/* 0001AF38 00027CC8 4D 82 00 20 */ beqlr +/* 0001AF3C 00027CCC 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001AF40 00027CD0 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001AF44 00027CD4 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001AF48 00027CD8 7C 00 48 00 */ cmpw r0, r9 +/* 0001AF4C 00027CDC 4D 82 00 20 */ beqlr +/* 0001AF50 00027CE0 7C 83 23 78 */ mr r3, r4 +/* 0001AF54 00027CE4 4E 80 00 20 */ blr +.endfn find__H2ZPP7IPlayerZP7IPlayer_4_STLX01X01RCX11_X01 + +# .text:0x1AF58 | size: 0xB0 +.fn find__H2ZPP10IRigidBodyZP10IRigidBody_4_STLX01X01RCX11_X01, weak +/* 0001AF58 00027CE8 7C 03 20 50 */ subf r0, r3, r4 +/* 0001AF5C 00027CEC 7C 0B 26 71 */ srawi. r11, r0, 4 +/* 0001AF60 00027CF0 40 81 AF A4 */ ble .L_00015F04 +/* 0001AF64 00027CF4 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001AF68 00027CF8 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001AF6C 00027CFC 7C 00 48 00 */ cmpw r0, r9 +/* 0001AF70 00027D00 4D 82 00 20 */ beqlr +/* 0001AF74 00027D04 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001AF78 00027D08 7C 00 48 00 */ cmpw r0, r9 +/* 0001AF7C 00027D0C 4D 82 00 20 */ beqlr +/* 0001AF80 00027D10 84 03 00 04 */ lwzu r0, 0x4(r3) +.L_0001AF84: +/* 0001AF84 00027D14 7C 00 48 00 */ cmpw r0, r9 +/* 0001AF88 00027D18 4D 82 00 20 */ beqlr +/* 0001AF8C 00027D1C 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001AF90 00027D20 7C 00 48 00 */ cmpw r0, r9 +/* 0001AF94 00027D24 4D 82 00 20 */ beqlr +/* 0001AF98 00027D28 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001AF9C 00027D2C 35 6B FF FF */ subic. r11, r11, 0x1 +/* 0001AFA0 00027D30 41 81 AF 68 */ bgt .L_00015F08 +/* 0001AFA4 00027D34 7C 03 20 50 */ subf r0, r3, r4 +/* 0001AFA8 00027D38 7C 00 16 70 */ srawi r0, r0, 2 +/* 0001AFAC 00027D3C 2C 00 00 01 */ cmpwi r0, 0x1 +/* 0001AFB0 00027D40 41 82 AF F0 */ beq .L_00015FA0 +/* 0001AFB4 00027D44 40 81 B0 00 */ ble .L_00015FB4 +/* 0001AFB8 00027D48 2C 00 00 02 */ cmpwi r0, 0x2 +/* 0001AFBC 00027D4C 41 82 AF DC */ beq .L_00015F98 +/* 0001AFC0 00027D50 2C 00 00 03 */ cmpwi r0, 0x3 +/* 0001AFC4 00027D54 40 82 B0 00 */ bne .L_00015FC4 +/* 0001AFC8 00027D58 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001AFCC 00027D5C 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001AFD0 00027D60 7C 09 00 00 */ cmpw r9, r0 +/* 0001AFD4 00027D64 4D 82 00 20 */ beqlr +/* 0001AFD8 00027D68 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001AFDC 00027D6C 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001AFE0 00027D70 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001AFE4 00027D74 7C 09 00 00 */ cmpw r9, r0 +/* 0001AFE8 00027D78 4D 82 00 20 */ beqlr +/* 0001AFEC 00027D7C 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001AFF0 00027D80 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001AFF4 00027D84 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001AFF8 00027D88 7C 00 48 00 */ cmpw r0, r9 +/* 0001AFFC 00027D8C 4D 82 00 20 */ beqlr +/* 0001B000 00027D90 7C 83 23 78 */ mr r3, r4 +/* 0001B004 00027D94 4E 80 00 20 */ blr +.endfn find__H2ZPP10IRigidBodyZP10IRigidBody_4_STLX01X01RCX11_X01 + +# .text:0x1B008 | size: 0x184 +.fn reserve__Q24_STLt6vector2ZQ26Hermes7HandlerZQ33UTL3Stdt9Allocator2ZQ26Hermes7HandlerZ12_type_vectorUi, weak +/* 0001B008 00027D98 94 21 FF D8 */ stwu r1, -0x28(r1) +/* 0001B00C 00027D9C 7C 08 02 A6 */ mflr r0 +/* 0001B010 00027DA0 BF 01 00 08 */ stmw r24, 0x8(r1) +/* 0001B014 00027DA4 90 01 00 2C */ stw r0, 0x2c(r1) +/* 0001B018 00027DA8 7C 7C 1B 78 */ mr r28, r3 +/* 0001B01C 00027DAC 3D 20 38 E3 */ lis r9, 0x38e3 +/* 0001B020 00027DB0 83 FC 00 00 */ lwz r31, 0x0(r28) +/* 0001B024 00027DB4 61 29 8E 39 */ ori r9, r9, 0x8e39 +/* 0001B028 00027DB8 80 1C 00 0C */ lwz r0, 0xc(r28) +/* 0001B02C 00027DBC 7C 1F 00 50 */ subf r0, r31, r0 +/* 0001B030 00027DC0 7C 00 49 D6 */ mullw r0, r0, r9 +/* 0001B034 00027DC4 7C 00 16 70 */ srawi r0, r0, 2 +/* 0001B038 00027DC8 7C 00 20 40 */ cmplw r0, r4 +/* 0001B03C 00027DCC 40 80 B1 78 */ bge .L_000161B4 +/* 0001B040 00027DD0 83 7C 00 04 */ lwz r27, 0x4(r28) +/* 0001B044 00027DD4 2C 1F 00 00 */ cmpwi r31, 0x0 +/* 0001B048 00027DD8 7C 1F D8 50 */ subf r0, r31, r27 +/* 0001B04C 00027DDC 7C 00 49 D6 */ mullw r0, r0, r9 +/* 0001B050 00027DE0 7C 19 16 70 */ srawi r25, r0, 2 +/* 0001B054 00027DE4 41 82 B1 2C */ beq .L_00016180 +/* 0001B058 00027DE8 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0001B05C 00027DEC 41 82 B0 84 */ beq .L_000160E0 +/* 0001B060 00027DF0 1C 04 00 24 */ mulli r0, r4, 0x24 +/* 0001B064 00027DF4 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0001B068 00027DF8 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0001B06C 00027DFC 38 A0 00 00 */ li r5, 0x0 +/* 0001B070 00027E00 7C 04 03 78 */ mr r4, r0 +/* 0001B074 00027E04 7C 1A 03 78 */ mr r26, r0 +/* 0001B078 00027E08 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 0001B07C 00027E0C 7C 7D 1B 78 */ mr r29, r3 +/* 0001B080 00027E10 48 01 B0 8C */ b .text+0x1B08C +/* 0001B084 00027E14 3B A0 00 00 */ li r29, 0x0 +/* 0001B088 00027E18 3B 40 00 00 */ li r26, 0x0 +/* 0001B08C 00027E1C 7F FE FB 78 */ mr r30, r31 +/* 0001B090 00027E20 1F 19 00 24 */ mulli r24, r25, 0x24 +/* 0001B094 00027E24 7F BF EB 78 */ mr r31, r29 +/* 0001B098 00027E28 7C 1E D8 00 */ cmpw r30, r27 +/* 0001B09C 00027E2C 41 82 B0 D0 */ beq .L_0001616C +/* 0001B0A0 00027E30 3B 20 00 00 */ li r25, 0x0 +/* 0001B0A4 00027E34 2C 1F 00 00 */ cmpwi r31, 0x0 +/* 0001B0A8 00027E38 41 82 B0 C0 */ beq .L_00016168 +/* 0001B0AC 00027E3C 93 3F 00 14 */ stw r25, 0x14(r31) +/* 0001B0B0 00027E40 7F E3 FB 78 */ mr r3, r31 +/* 0001B0B4 00027E44 7F C4 F3 78 */ mr r4, r30 +/* 0001B0B8 00027E48 38 A0 00 24 */ li r5, 0x24 +/* 0001B0BC 00027E4C 48 00 00 01 */ bl bMemCpy +/* 0001B0C0 00027E50 3B DE 00 24 */ addi r30, r30, 0x24 +/* 0001B0C4 00027E54 3B FF 00 24 */ addi r31, r31, 0x24 +/* 0001B0C8 00027E58 7C 1E D8 00 */ cmpw r30, r27 +/* 0001B0CC 00027E5C 40 82 B0 A4 */ bne .L_00016170 +/* 0001B0D0 00027E60 81 7C 00 00 */ lwz r11, 0x0(r28) +/* 0001B0D4 00027E64 7F BF EB 78 */ mr r31, r29 +/* 0001B0D8 00027E68 80 1C 00 04 */ lwz r0, 0x4(r28) +/* 0001B0DC 00027E6C 7D 64 5B 78 */ mr r4, r11 +/* 0001B0E0 00027E70 81 3C 00 0C */ lwz r9, 0xc(r28) +/* 0001B0E4 00027E74 7C 0B 00 00 */ cmpw r11, r0 +/* 0001B0E8 00027E78 41 82 B0 F8 */ beq .L_000161E0 +/* 0001B0EC 00027E7C 39 6B 00 24 */ addi r11, r11, 0x24 +/* 0001B0F0 00027E80 7C 0B 00 00 */ cmpw r11, r0 +/* 0001B0F4 00027E84 40 82 B0 EC */ bne .L_000161E0 +/* 0001B0F8 00027E88 3C 00 38 E3 */ lis r0, 0x38e3 +/* 0001B0FC 00027E8C 7D 24 48 50 */ subf r9, r4, r9 +/* 0001B100 00027E90 60 00 8E 39 */ ori r0, r0, 0x8e39 +/* 0001B104 00027E94 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0001B108 00027E98 7D 29 01 D6 */ mullw r9, r9, r0 +/* 0001B10C 00027E9C 7D 25 16 70 */ srawi r5, r9, 2 +/* 0001B110 00027EA0 41 82 B1 64 */ beq .L_00016274 +/* 0001B114 00027EA4 1C A5 00 24 */ mulli r5, r5, 0x24 +/* 0001B118 00027EA8 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0001B11C 00027EAC 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0001B120 00027EB0 38 C0 00 00 */ li r6, 0x0 +/* 0001B124 00027EB4 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 0001B128 00027EB8 48 01 B1 64 */ b .text+0x1B164 +/* 0001B12C 00027EBC 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0001B130 00027EC0 41 82 B1 54 */ beq .L_00016284 +.L_0001B134: +/* 0001B134 00027EC4 1C 04 00 24 */ mulli r0, r4, 0x24 +/* 0001B138 00027EC8 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0001B13C 00027ECC 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0001B140 00027ED0 38 A0 00 00 */ li r5, 0x0 +/* 0001B144 00027ED4 7C 04 03 78 */ mr r4, r0 +/* 0001B148 00027ED8 7C 1A 03 78 */ mr r26, r0 +/* 0001B14C 00027EDC 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 0001B150 00027EE0 48 01 B1 5C */ b .text+0x1B15C +/* 0001B154 00027EE4 38 60 00 00 */ li r3, 0x0 +/* 0001B158 00027EE8 3B 40 00 00 */ li r26, 0x0 +/* 0001B15C 00027EEC 1F 19 00 24 */ mulli r24, r25, 0x24 +/* 0001B160 00027EF0 7C 7F 1B 78 */ mr r31, r3 +/* 0001B164 00027EF4 7D 38 FA 14 */ add r9, r24, r31 +/* 0001B168 00027EF8 7C 1A FA 14 */ add r0, r26, r31 +/* 0001B16C 00027EFC 90 1C 00 0C */ stw r0, 0xc(r28) +/* 0001B170 00027F00 93 FC 00 00 */ stw r31, 0x0(r28) +.L_0001B174: +/* 0001B174 00027F04 91 3C 00 04 */ stw r9, 0x4(r28) +/* 0001B178 00027F08 80 01 00 2C */ lwz r0, 0x2c(r1) +/* 0001B17C 00027F0C 7C 08 03 A6 */ mtlr r0 +/* 0001B180 00027F10 BB 01 00 08 */ lmw r24, 0x8(r1) +/* 0001B184 00027F14 38 21 00 28 */ addi r1, r1, 0x28 +/* 0001B188 00027F18 4E 80 00 20 */ blr +.endfn reserve__Q24_STLt6vector2ZQ26Hermes7HandlerZQ33UTL3Stdt9Allocator2ZQ26Hermes7HandlerZ12_type_vectorUi + +# .text:0x1B18C | size: 0x68 +.fn _M_erase__Q24_STLt8_Rb_tree5ZPQ26Hermes13_h_HHANDLER__ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt4less1ZPQ26Hermes13_h_HHANDLER__ZQ33UTL3Stdt9Allocator2ZQ26Hermes7PortKeyZ9_type_mapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKey, weak +/* 0001B18C 00027F1C 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0001B190 00027F20 7C 08 02 A6 */ mflr r0 +/* 0001B194 00027F24 BF 81 00 08 */ stmw r28, 0x8(r1) +/* 0001B198 00027F28 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0001B19C 00027F2C 7C 7D 1B 78 */ mr r29, r3 +/* 0001B1A0 00027F30 7C 9F 23 79 */ mr. r31, r4 +/* 0001B1A4 00027F34 41 82 B1 E0 */ beq .L_00016384 +/* 0001B1A8 00027F38 3F 80 00 00 */ lis r28, gFastMem@ha +/* 0001B1AC 00027F3C 80 9F 00 0C */ lwz r4, 0xc(r31) +/* 0001B1B0 00027F40 7F A3 EB 78 */ mr r3, r29 +.L_0001B1B4: +/* 0001B1B4 00027F44 48 00 00 01 */ bl _M_erase__Q24_STLt8_Rb_tree5ZPQ26Hermes13_h_HHANDLER__ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt4less1ZPQ26Hermes13_h_HHANDLER__ZQ33UTL3Stdt9Allocator2ZQ26Hermes7PortKeyZ9_type_mapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKey +/* 0001B1B8 00027F48 83 DF 00 08 */ lwz r30, 0x8(r31) +/* 0001B1BC 00027F4C 2C 1F 00 00 */ cmpwi r31, 0x0 +/* 0001B1C0 00027F50 41 82 B1 D8 */ beq .L_00016398 +/* 0001B1C4 00027F54 7F E4 FB 78 */ mr r4, r31 +/* 0001B1C8 00027F58 38 7C 00 00 */ addi r3, r28, gFastMem@l +/* 0001B1CC 00027F5C 38 A0 00 28 */ li r5, 0x28 +/* 0001B1D0 00027F60 38 C0 00 00 */ li r6, 0x0 +/* 0001B1D4 00027F64 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 0001B1D8 00027F68 7F DF F3 79 */ mr. r31, r30 +/* 0001B1DC 00027F6C 40 82 B1 AC */ bne .L_00016388 +/* 0001B1E0 00027F70 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0001B1E4 00027F74 7C 08 03 A6 */ mtlr r0 +/* 0001B1E8 00027F78 BB 81 00 08 */ lmw r28, 0x8(r1) +/* 0001B1EC 00027F7C 38 21 00 18 */ addi r1, r1, 0x18 +/* 0001B1F0 00027F80 4E 80 00 20 */ blr +.endfn _M_erase__Q24_STLt8_Rb_tree5ZPQ26Hermes13_h_HHANDLER__ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt4less1ZPQ26Hermes13_h_HHANDLER__ZQ33UTL3Stdt9Allocator2ZQ26Hermes7PortKeyZ9_type_mapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKey + +# .text:0x1B1F4 | size: 0xB0 +.fn find__H2ZPPQ28CameraAI8DirectorZPQ28CameraAI8Director_4_STLX01X01RCX11_X01, weak +/* 0001B1F4 00027F84 7C 03 20 50 */ subf r0, r3, r4 +/* 0001B1F8 00027F88 7C 0B 26 71 */ srawi. r11, r0, 4 +/* 0001B1FC 00027F8C 40 81 B2 40 */ ble .L_0001643C +/* 0001B200 00027F90 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001B204 00027F94 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001B208 00027F98 7C 00 48 00 */ cmpw r0, r9 +/* 0001B20C 00027F9C 4D 82 00 20 */ beqlr +/* 0001B210 00027FA0 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001B214 00027FA4 7C 00 48 00 */ cmpw r0, r9 +/* 0001B218 00027FA8 4D 82 00 20 */ beqlr +/* 0001B21C 00027FAC 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001B220 00027FB0 7C 00 48 00 */ cmpw r0, r9 +/* 0001B224 00027FB4 4D 82 00 20 */ beqlr +/* 0001B228 00027FB8 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001B22C 00027FBC 7C 00 48 00 */ cmpw r0, r9 +/* 0001B230 00027FC0 4D 82 00 20 */ beqlr +/* 0001B234 00027FC4 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001B238 00027FC8 35 6B FF FF */ subic. r11, r11, 0x1 +/* 0001B23C 00027FCC 41 81 B2 04 */ bgt .L_00016440 +/* 0001B240 00027FD0 7C 03 20 50 */ subf r0, r3, r4 +/* 0001B244 00027FD4 7C 00 16 70 */ srawi r0, r0, 2 +/* 0001B248 00027FD8 2C 00 00 01 */ cmpwi r0, 0x1 +/* 0001B24C 00027FDC 41 82 B2 8C */ beq .L_000164D8 +/* 0001B250 00027FE0 40 81 B2 9C */ ble .L_000164EC +/* 0001B254 00027FE4 2C 00 00 02 */ cmpwi r0, 0x2 +/* 0001B258 00027FE8 41 82 B2 78 */ beq .L_000164D0 +/* 0001B25C 00027FEC 2C 00 00 03 */ cmpwi r0, 0x3 +/* 0001B260 00027FF0 40 82 B2 9C */ bne .L_000164FC +/* 0001B264 00027FF4 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001B268 00027FF8 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001B26C 00027FFC 7C 09 00 00 */ cmpw r9, r0 +/* 0001B270 00028000 4D 82 00 20 */ beqlr +/* 0001B274 00028004 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001B278 00028008 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001B27C 0002800C 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001B280 00028010 7C 09 00 00 */ cmpw r9, r0 +/* 0001B284 00028014 4D 82 00 20 */ beqlr +/* 0001B288 00028018 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001B28C 0002801C 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001B290 00028020 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001B294 00028024 7C 00 48 00 */ cmpw r0, r9 +/* 0001B298 00028028 4D 82 00 20 */ beqlr +/* 0001B29C 0002802C 7C 83 23 78 */ mr r3, r4 +/* 0001B2A0 00028030 4E 80 00 20 */ blr +.endfn find__H2ZPPQ28CameraAI8DirectorZPQ28CameraAI8Director_4_STLX01X01RCX11_X01 + +# .text:0x1B2A4 | size: 0x60 +.fn CreateInstance__Q33UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32G6UCrc32PQ28CameraAI8Director, weak +/* 0001B2A4 00028034 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0001B2A8 00028038 7C 08 02 A6 */ mflr r0 +/* 0001B2AC 0002803C 90 01 00 0C */ stw r0, 0xc(r1) +/* 0001B2B0 00028040 3D 20 00 00 */ lis r9, _Q43UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32_9Prototype.mHead@ha +/* 0001B2B4 00028044 81 69 00 00 */ lwz r11, _Q43UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32_9Prototype.mHead@l(r9) +/* 0001B2B8 00028048 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0001B2BC 0002804C 41 82 B2 F0 */ beq .L_000165AC +/* 0001B2C0 00028050 81 2B 00 00 */ lwz r9, 0x0(r11) +.L_0001B2C4: +/* 0001B2C4 00028054 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001B2C8 00028058 7C 09 00 00 */ cmpw r9, r0 +/* 0001B2CC 0002805C 40 82 B2 E4 */ bne .L_000165B0 +/* 0001B2D0 00028060 80 0B 00 04 */ lwz r0, 0x4(r11) +/* 0001B2D4 00028064 7C 83 23 78 */ mr r3, r4 +/* 0001B2D8 00028068 7C 08 03 A6 */ mtlr r0 +/* 0001B2DC 0002806C 4E 80 00 21 */ blrl +/* 0001B2E0 00028070 48 01 B2 F4 */ b .text+0x1B2F4 +/* 0001B2E4 00028074 81 6B 00 08 */ lwz r11, 0x8(r11) +/* 0001B2E8 00028078 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0001B2EC 0002807C 40 82 B2 C0 */ bne .L_000165AC +/* 0001B2F0 00028080 38 60 00 00 */ li r3, 0x0 +/* 0001B2F4 00028084 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0001B2F8 00028088 7C 08 03 A6 */ mtlr r0 +/* 0001B2FC 0002808C 38 21 00 08 */ addi r1, r1, 0x8 +/* 0001B300 00028090 4E 80 00 20 */ blr +.endfn CreateInstance__Q33UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32G6UCrc32PQ28CameraAI8Director + +# .text:0x1B304 | size: 0x18 +.fn Count__Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi311ePlayerList, weak +/* 0001B304 00028094 1C 63 00 30 */ mulli r3, r3, 0x30 +/* 0001B308 00028098 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@ha +/* 0001B30C 0002809C 39 29 00 00 */ addi r9, r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@l +/* 0001B310 000280A0 7C 63 4A 14 */ add r3, r3, r9 +/* 0001B314 000280A4 80 63 00 08 */ lwz r3, 0x8(r3) +/* 0001B318 000280A8 4E 80 00 20 */ blr +.endfn Count__Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi311ePlayerList + +# .text:0x1B31C | size: 0x78 +.fn clear__Q24_STLt10_List_base2ZP5IBodyZQ33UTL3Stdt9Allocator2ZP5IBodyZ24_type_CameraAIAvoidables, weak +/* 0001B31C 000280AC 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0001B320 000280B0 7C 08 02 A6 */ mflr r0 +/* 0001B324 000280B4 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 0001B328 000280B8 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0001B32C 000280BC 7C 7E 1B 78 */ mr r30, r3 +/* 0001B330 000280C0 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0001B334 000280C4 83 E9 00 00 */ lwz r31, 0x0(r9) +/* 0001B338 000280C8 7C 1F 48 00 */ cmpw r31, r9 +/* 0001B33C 000280CC 41 82 B3 70 */ beq .L_000166AC +/* 0001B340 000280D0 3F A0 00 00 */ lis r29, gFastMem@ha +/* 0001B344 000280D4 7F E4 FB 78 */ mr r4, r31 +/* 0001B348 000280D8 83 FF 00 00 */ lwz r31, 0x0(r31) +/* 0001B34C 000280DC 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0001B350 000280E0 41 82 B3 64 */ beq .L_000166B4 +.L_0001B354: +/* 0001B354 000280E4 38 7D 00 00 */ addi r3, r29, gFastMem@l +/* 0001B358 000280E8 38 A0 00 0C */ li r5, 0xc +/* 0001B35C 000280EC 38 C0 00 00 */ li r6, 0x0 +/* 0001B360 000280F0 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 0001B364 000280F4 80 1E 00 04 */ lwz r0, 0x4(r30) +/* 0001B368 000280F8 7C 1F 00 00 */ cmpw r31, r0 +/* 0001B36C 000280FC 40 82 B3 44 */ bne .L_000166B0 +/* 0001B370 00028100 81 3E 00 04 */ lwz r9, 0x4(r30) +/* 0001B374 00028104 91 29 00 00 */ stw r9, 0x0(r9) +/* 0001B378 00028108 81 7E 00 04 */ lwz r11, 0x4(r30) +/* 0001B37C 0002810C 91 6B 00 04 */ stw r11, 0x4(r11) +/* 0001B380 00028110 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0001B384 00028114 7C 08 03 A6 */ mtlr r0 +/* 0001B388 00028118 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 0001B38C 0002811C 38 21 00 18 */ addi r1, r1, 0x18 +/* 0001B390 00028120 4E 80 00 20 */ blr +.endfn clear__Q24_STLt10_List_base2ZP5IBodyZQ33UTL3Stdt9Allocator2ZP5IBodyZ24_type_CameraAIAvoidables + +# .text:0x1B394 | size: 0x60 +.fn find__H2ZQ24_STLt14_List_iterator2ZP5IBodyZQ24_STLt16_Nonconst_traits1ZP5IBodyZP5IBody_4_STLX01X01RCX11_X01, weak +/* 0001B394 00028124 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0001B398 00028128 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001B39C 0002812C 81 24 00 00 */ lwz r9, 0x0(r4) +/* 0001B3A0 00028130 90 01 00 10 */ stw r0, 0x10(r1) +/* 0001B3A4 00028134 7C 0A 03 78 */ mr r10, r0 +/* 0001B3A8 00028138 91 21 00 08 */ stw r9, 0x8(r1) +/* 0001B3AC 0002813C 80 01 00 08 */ lwz r0, 0x8(r1) +/* 0001B3B0 00028140 39 20 00 01 */ li r9, 0x1 +/* 0001B3B4 00028144 7C 0B 03 78 */ mr r11, r0 +/* 0001B3B8 00028148 7C 00 50 00 */ cmpw r0, r10 +/* 0001B3BC 0002814C 40 82 B3 C4 */ bne .L_00016780 +/* 0001B3C0 00028150 39 20 00 00 */ li r9, 0x0 +/* 0001B3C4 00028154 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0001B3C8 00028158 41 82 B3 E8 */ beq .L_000167B0 +/* 0001B3CC 0002815C 81 2B 00 08 */ lwz r9, 0x8(r11) +/* 0001B3D0 00028160 80 06 00 00 */ lwz r0, 0x0(r6) +/* 0001B3D4 00028164 7C 09 00 00 */ cmpw r9, r0 +/* 0001B3D8 00028168 41 82 B3 E8 */ beq .L_000167C0 +/* 0001B3DC 0002816C 80 0B 00 00 */ lwz r0, 0x0(r11) +/* 0001B3E0 00028170 90 01 00 08 */ stw r0, 0x8(r1) +.L_0001B3E4: +/* 0001B3E4 00028174 48 01 B3 AC */ b .text+0x1B3AC +/* 0001B3E8 00028178 91 63 00 00 */ stw r11, 0x0(r3) +/* 0001B3EC 0002817C 38 21 00 18 */ addi r1, r1, 0x18 +/* 0001B3F0 00028180 4E 80 00 20 */ blr +.endfn find__H2ZQ24_STLt14_List_iterator2ZP5IBodyZQ24_STLt16_Nonconst_traits1ZP5IBodyZP5IBody_4_STLX01X01RCX11_X01 + +# .text:0x1B3F4 | size: 0xB0 +.fn find__H2ZPP14ITrafficCenterZP14ITrafficCenter_4_STLX01X01RCX11_X01, weak +/* 0001B3F4 00028184 7C 03 20 50 */ subf r0, r3, r4 +/* 0001B3F8 00028188 7C 0B 26 71 */ srawi. r11, r0, 4 +/* 0001B3FC 0002818C 40 81 B4 40 */ ble .L_0001683C +/* 0001B400 00028190 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001B404 00028194 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001B408 00028198 7C 00 48 00 */ cmpw r0, r9 +/* 0001B40C 0002819C 4D 82 00 20 */ beqlr +/* 0001B410 000281A0 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001B414 000281A4 7C 00 48 00 */ cmpw r0, r9 +/* 0001B418 000281A8 4D 82 00 20 */ beqlr +/* 0001B41C 000281AC 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001B420 000281B0 7C 00 48 00 */ cmpw r0, r9 +.L_0001B424: +/* 0001B424 000281B4 4D 82 00 20 */ beqlr +.L_0001B428: +/* 0001B428 000281B8 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001B42C 000281BC 7C 00 48 00 */ cmpw r0, r9 +/* 0001B430 000281C0 4D 82 00 20 */ beqlr +/* 0001B434 000281C4 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001B438 000281C8 35 6B FF FF */ subic. r11, r11, 0x1 +/* 0001B43C 000281CC 41 81 B4 04 */ bgt .L_00016840 +/* 0001B440 000281D0 7C 03 20 50 */ subf r0, r3, r4 +/* 0001B444 000281D4 7C 00 16 70 */ srawi r0, r0, 2 +/* 0001B448 000281D8 2C 00 00 01 */ cmpwi r0, 0x1 +/* 0001B44C 000281DC 41 82 B4 8C */ beq .L_000168D8 +/* 0001B450 000281E0 40 81 B4 9C */ ble .L_000168EC +/* 0001B454 000281E4 2C 00 00 02 */ cmpwi r0, 0x2 +/* 0001B458 000281E8 41 82 B4 78 */ beq .L_000168D0 +/* 0001B45C 000281EC 2C 00 00 03 */ cmpwi r0, 0x3 +/* 0001B460 000281F0 40 82 B4 9C */ bne .L_000168FC +/* 0001B464 000281F4 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001B468 000281F8 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001B46C 000281FC 7C 09 00 00 */ cmpw r9, r0 +/* 0001B470 00028200 4D 82 00 20 */ beqlr +.L_0001B474: +/* 0001B474 00028204 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001B478 00028208 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001B47C 0002820C 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001B480 00028210 7C 09 00 00 */ cmpw r9, r0 +/* 0001B484 00028214 4D 82 00 20 */ beqlr +/* 0001B488 00028218 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001B48C 0002821C 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001B490 00028220 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001B494 00028224 7C 00 48 00 */ cmpw r0, r9 +/* 0001B498 00028228 4D 82 00 20 */ beqlr +/* 0001B49C 0002822C 7C 83 23 78 */ mr r3, r4 +/* 0001B4A0 00028230 4E 80 00 20 */ blr +.endfn find__H2ZPP14ITrafficCenterZP14ITrafficCenter_4_STLX01X01RCX11_X01 + +# .text:0x1B4A4 | size: 0xB0 +.fn find__H2ZPP12IInputPlayerZP12IInputPlayer_4_STLX01X01RCX11_X01, weak +/* 0001B4A4 00028234 7C 03 20 50 */ subf r0, r3, r4 +/* 0001B4A8 00028238 7C 0B 26 71 */ srawi. r11, r0, 4 +/* 0001B4AC 0002823C 40 81 B4 F0 */ ble .L_0001699C +/* 0001B4B0 00028240 81 25 00 00 */ lwz r9, 0x0(r5) +.L_0001B4B4: +/* 0001B4B4 00028244 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001B4B8 00028248 7C 00 48 00 */ cmpw r0, r9 +/* 0001B4BC 0002824C 4D 82 00 20 */ beqlr +/* 0001B4C0 00028250 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001B4C4 00028254 7C 00 48 00 */ cmpw r0, r9 +/* 0001B4C8 00028258 4D 82 00 20 */ beqlr +/* 0001B4CC 0002825C 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001B4D0 00028260 7C 00 48 00 */ cmpw r0, r9 +/* 0001B4D4 00028264 4D 82 00 20 */ beqlr +/* 0001B4D8 00028268 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001B4DC 0002826C 7C 00 48 00 */ cmpw r0, r9 +/* 0001B4E0 00028270 4D 82 00 20 */ beqlr +/* 0001B4E4 00028274 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001B4E8 00028278 35 6B FF FF */ subic. r11, r11, 0x1 +/* 0001B4EC 0002827C 41 81 B4 B4 */ bgt .L_000169A0 +/* 0001B4F0 00028280 7C 03 20 50 */ subf r0, r3, r4 +/* 0001B4F4 00028284 7C 00 16 70 */ srawi r0, r0, 2 +/* 0001B4F8 00028288 2C 00 00 01 */ cmpwi r0, 0x1 +/* 0001B4FC 0002828C 41 82 B5 3C */ beq .L_00016A38 +/* 0001B500 00028290 40 81 B5 4C */ ble .L_00016A4C +/* 0001B504 00028294 2C 00 00 02 */ cmpwi r0, 0x2 +/* 0001B508 00028298 41 82 B5 28 */ beq .L_00016A30 +/* 0001B50C 0002829C 2C 00 00 03 */ cmpwi r0, 0x3 +/* 0001B510 000282A0 40 82 B5 4C */ bne .L_00016A5C +/* 0001B514 000282A4 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001B518 000282A8 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001B51C 000282AC 7C 09 00 00 */ cmpw r9, r0 +/* 0001B520 000282B0 4D 82 00 20 */ beqlr +/* 0001B524 000282B4 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001B528 000282B8 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001B52C 000282BC 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001B530 000282C0 7C 09 00 00 */ cmpw r9, r0 +/* 0001B534 000282C4 4D 82 00 20 */ beqlr +/* 0001B538 000282C8 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001B53C 000282CC 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001B540 000282D0 80 03 00 00 */ lwz r0, 0x0(r3) +.L_0001B544: +/* 0001B544 000282D4 7C 00 48 00 */ cmpw r0, r9 +/* 0001B548 000282D8 4D 82 00 20 */ beqlr +/* 0001B54C 000282DC 7C 83 23 78 */ mr r3, r4 +/* 0001B550 000282E0 4E 80 00 20 */ blr +.endfn find__H2ZPP12IInputPlayerZP12IInputPlayer_4_STLX01X01RCX11_X01 + +# .text:0x1B554 | size: 0x24 +.fn Copy4__H2Z8bVector4ZQ25UMath7Vector4__14ConversionUtilRX11RCX01_v, weak +/* 0001B554 000282E4 C0 04 00 00 */ lfs f0, 0x0(r4) +/* 0001B558 000282E8 D0 03 00 00 */ stfs f0, 0x0(r3) +/* 0001B55C 000282EC C1 A4 00 04 */ lfs f13, 0x4(r4) +/* 0001B560 000282F0 D1 A3 00 04 */ stfs f13, 0x4(r3) +/* 0001B564 000282F4 C0 04 00 08 */ lfs f0, 0x8(r4) +/* 0001B568 000282F8 D0 03 00 08 */ stfs f0, 0x8(r3) +/* 0001B56C 000282FC C1 A4 00 0C */ lfs f13, 0xc(r4) +/* 0001B570 00028300 D1 A3 00 0C */ stfs f13, 0xc(r3) +/* 0001B574 00028304 4E 80 00 20 */ blr +.endfn Copy4__H2Z8bVector4ZQ25UMath7Vector4__14ConversionUtilRX11RCX01_v + +# .text:0x1B578 | size: 0x28 +.fn Scale3__H1ZQ25UMath7Vector4__14ConversionUtilRX01f_v, weak +/* 0001B578 00028308 C0 03 00 00 */ lfs f0, 0x0(r3) +/* 0001B57C 0002830C C1 A3 00 04 */ lfs f13, 0x4(r3) +.L_0001B580: +/* 0001B580 00028310 C1 83 00 08 */ lfs f12, 0x8(r3) +/* 0001B584 00028314 EC 00 00 72 */ fmuls f0, f0, f1 +/* 0001B588 00028318 ED AD 00 72 */ fmuls f13, f13, f1 +/* 0001B58C 0002831C D0 03 00 00 */ stfs f0, 0x0(r3) +/* 0001B590 00028320 ED 8C 00 72 */ fmuls f12, f12, f1 +/* 0001B594 00028324 D1 A3 00 04 */ stfs f13, 0x4(r3) +/* 0001B598 00028328 D1 83 00 08 */ stfs f12, 0x8(r3) +/* 0001B59C 0002832C 4E 80 00 20 */ blr +.endfn Scale3__H1ZQ25UMath7Vector4__14ConversionUtilRX01f_v + +# .text:0x1B5A0 | size: 0x44 +.fn Make4__H1ZQ25UMath7Vector4__14ConversionUtilffff_X01, weak +/* 0001B5A0 00028330 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0001B5A4 00028334 D0 21 00 08 */ stfs f1, 0x8(r1) +/* 0001B5A8 00028338 39 61 00 08 */ addi r11, r1, 0x8 +.L_0001B5AC: +/* 0001B5AC 0002833C D0 41 00 0C */ stfs f2, 0xc(r1) +/* 0001B5B0 00028340 7C 69 1B 78 */ mr r9, r3 +/* 0001B5B4 00028344 D0 61 00 10 */ stfs f3, 0x10(r1) +/* 0001B5B8 00028348 D0 81 00 14 */ stfs f4, 0x14(r1) +/* 0001B5BC 0002834C 81 01 00 08 */ lwz r8, 0x8(r1) +/* 0001B5C0 00028350 80 EB 00 0C */ lwz r7, 0xc(r11) +/* 0001B5C4 00028354 80 0B 00 04 */ lwz r0, 0x4(r11) +/* 0001B5C8 00028358 81 4B 00 08 */ lwz r10, 0x8(r11) +/* 0001B5CC 0002835C 91 09 00 00 */ stw r8, 0x0(r9) +/* 0001B5D0 00028360 90 09 00 04 */ stw r0, 0x4(r9) +/* 0001B5D4 00028364 91 49 00 08 */ stw r10, 0x8(r9) +/* 0001B5D8 00028368 90 E9 00 0C */ stw r7, 0xc(r9) +/* 0001B5DC 0002836C 38 21 00 18 */ addi r1, r1, 0x18 +/* 0001B5E0 00028370 4E 80 00 20 */ blr +.endfn Make4__H1ZQ25UMath7Vector4__14ConversionUtilffff_X01 + +# .text:0x1B5E4 | size: 0x6C +.fn RightToLeftVector4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRCX01RX11_v, weak +/* 0001B5E4 00028374 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 0001B5E8 00028378 7C 08 02 A6 */ mflr r0 +/* 0001B5EC 0002837C BF C1 00 18 */ stmw r30, 0x18(r1) +/* 0001B5F0 00028380 90 01 00 24 */ stw r0, 0x24(r1) +/* 0001B5F4 00028384 7C 69 1B 78 */ mr r9, r3 +/* 0001B5F8 00028388 7C 9E 23 78 */ mr r30, r4 +/* 0001B5FC 0002838C C0 29 00 04 */ lfs f1, 0x4(r9) +/* 0001B600 00028390 38 61 00 08 */ addi r3, r1, 0x8 +/* 0001B604 00028394 C0 89 00 0C */ lfs f4, 0xc(r9) +/* 0001B608 00028398 C0 49 00 08 */ lfs f2, 0x8(r9) +/* 0001B60C 0002839C FC 20 08 50 */ fneg f1, f1 +/* 0001B610 000283A0 C0 69 00 00 */ lfs f3, 0x0(r9) +/* 0001B614 000283A4 48 00 00 01 */ bl Make4__H1ZQ25UMath7Vector4__14ConversionUtilffff_X01 +/* 0001B618 000283A8 39 21 00 08 */ addi r9, r1, 0x8 +/* 0001B61C 000283AC 81 01 00 08 */ lwz r8, 0x8(r1) +/* 0001B620 000283B0 80 09 00 0C */ lwz r0, 0xc(r9) +.L_0001B624: +/* 0001B624 000283B4 81 69 00 04 */ lwz r11, 0x4(r9) +/* 0001B628 000283B8 81 49 00 08 */ lwz r10, 0x8(r9) +/* 0001B62C 000283BC 90 1E 00 0C */ stw r0, 0xc(r30) +.L_0001B630: +/* 0001B630 000283C0 91 1E 00 00 */ stw r8, 0x0(r30) +/* 0001B634 000283C4 91 7E 00 04 */ stw r11, 0x4(r30) +/* 0001B638 000283C8 91 5E 00 08 */ stw r10, 0x8(r30) +/* 0001B63C 000283CC 80 01 00 24 */ lwz r0, 0x24(r1) +/* 0001B640 000283D0 7C 08 03 A6 */ mtlr r0 +/* 0001B644 000283D4 BB C1 00 18 */ lmw r30, 0x18(r1) +/* 0001B648 000283D8 38 21 00 20 */ addi r1, r1, 0x20 +/* 0001B64C 000283DC 4E 80 00 20 */ blr +.endfn RightToLeftVector4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRCX01RX11_v + +# .text:0x1B650 | size: 0xA8 +.fn RightToLeftMatrix4__H2Z8bMatrix4ZQ25UMath7Matrix4__14ConversionUtilRCX01RX11_v, weak +/* 0001B650 000283E0 94 21 FF 98 */ stwu r1, -0x68(r1) +/* 0001B654 000283E4 7C 08 02 A6 */ mflr r0 +/* 0001B658 000283E8 BF 21 00 4C */ stmw r25, 0x4c(r1) +/* 0001B65C 000283EC 90 01 00 6C */ stw r0, 0x6c(r1) +/* 0001B660 000283F0 3B C1 00 08 */ addi r30, r1, 0x8 +/* 0001B664 000283F4 7C 9D 23 78 */ mr r29, r4 +/* 0001B668 000283F8 7C 04 03 78 */ mr r4, r0 +/* 0001B66C 000283FC 7F C3 F3 78 */ mr r3, r30 +/* 0001B670 00028400 48 00 00 01 */ bl Copy4__H2Z8bVector4ZQ25UMath7Vector4__14ConversionUtilRX11RCX01_v +/* 0001B674 00028404 3B 41 00 18 */ addi r26, r1, 0x18 +/* 0001B678 00028408 7F 84 E3 78 */ mr r4, r28 +/* 0001B67C 0002840C 7F 43 D3 78 */ mr r3, r26 +/* 0001B680 00028410 48 00 00 01 */ bl Copy4__H2Z8bVector4ZQ25UMath7Vector4__14ConversionUtilRX11RCX01_v +/* 0001B684 00028414 3B 61 00 28 */ addi r27, r1, 0x28 +/* 0001B688 00028418 7F E4 FB 78 */ mr r4, r31 +.L_0001B68C: +/* 0001B68C 0002841C 7F 63 DB 78 */ mr r3, r27 +/* 0001B690 00028420 48 00 00 01 */ bl Copy4__H2Z8bVector4ZQ25UMath7Vector4__14ConversionUtilRX11RCX01_v +/* 0001B694 00028424 3B 81 00 38 */ addi r28, r1, 0x38 +/* 0001B698 00028428 7F 24 CB 78 */ mr r4, r25 +/* 0001B69C 0002842C 7F 83 E3 78 */ mr r3, r28 +/* 0001B6A0 00028430 48 00 00 01 */ bl Copy4__H2Z8bVector4ZQ25UMath7Vector4__14ConversionUtilRX11RCX01_v +/* 0001B6A4 00028434 3D 20 00 00 */ lis r9, .rodata+0xE60@ha +/* 0001B6A8 00028438 7F C3 F3 78 */ mr r3, r30 +/* 0001B6AC 0002843C C0 29 0E 60 */ lfs f1, .rodata+0xE60@l(r9) +/* 0001B6B0 00028440 48 00 00 01 */ bl Scale3__H1ZQ25UMath7Vector4__14ConversionUtilRX01f_v +/* 0001B6B4 00028444 7F C3 F3 78 */ mr r3, r30 +/* 0001B6B8 00028448 7F A4 EB 78 */ mr r4, r29 +/* 0001B6BC 0002844C 48 00 00 01 */ bl RightToLeftVector4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRCX01RX11_v +/* 0001B6C0 00028450 7F 43 D3 78 */ mr r3, r26 +.L_0001B6C4: +/* 0001B6C4 00028454 38 9D 00 10 */ addi r4, r29, 0x10 +/* 0001B6C8 00028458 48 00 00 01 */ bl RightToLeftVector4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRCX01RX11_v +/* 0001B6CC 0002845C 7F 63 DB 78 */ mr r3, r27 +/* 0001B6D0 00028460 38 9D 00 20 */ addi r4, r29, 0x20 +/* 0001B6D4 00028464 48 00 00 01 */ bl RightToLeftVector4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRCX01RX11_v +/* 0001B6D8 00028468 7F 83 E3 78 */ mr r3, r28 +/* 0001B6DC 0002846C 38 9D 00 30 */ addi r4, r29, 0x30 +/* 0001B6E0 00028470 48 00 00 01 */ bl RightToLeftVector4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRCX01RX11_v +/* 0001B6E4 00028474 80 01 00 6C */ lwz r0, 0x6c(r1) +/* 0001B6E8 00028478 7C 08 03 A6 */ mtlr r0 +/* 0001B6EC 0002847C BB 21 00 4C */ lmw r25, 0x4c(r1) +/* 0001B6F0 00028480 38 21 00 68 */ addi r1, r1, 0x68 +/* 0001B6F4 00028484 4E 80 00 20 */ blr +.endfn RightToLeftMatrix4__H2Z8bMatrix4ZQ25UMath7Matrix4__14ConversionUtilRCX01RX11_v + +# .text:0x1B6F8 | size: 0x38 +.fn Make3__H1ZQ25UMath7Vector3__14ConversionUtilfff_X01, weak +/* 0001B6F8 00028488 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0001B6FC 0002848C D0 21 00 08 */ stfs f1, 0x8(r1) +/* 0001B700 00028490 39 01 00 08 */ addi r8, r1, 0x8 +.L_0001B704: +/* 0001B704 00028494 D0 41 00 0C */ stfs f2, 0xc(r1) +/* 0001B708 00028498 7C 69 1B 78 */ mr r9, r3 +/* 0001B70C 0002849C D0 61 00 10 */ stfs f3, 0x10(r1) +/* 0001B710 000284A0 81 61 00 08 */ lwz r11, 0x8(r1) +/* 0001B714 000284A4 81 48 00 08 */ lwz r10, 0x8(r8) +/* 0001B718 000284A8 80 08 00 04 */ lwz r0, 0x4(r8) +/* 0001B71C 000284AC 91 69 00 00 */ stw r11, 0x0(r9) +/* 0001B720 000284B0 90 09 00 04 */ stw r0, 0x4(r9) +/* 0001B724 000284B4 91 49 00 08 */ stw r10, 0x8(r9) +/* 0001B728 000284B8 38 21 00 18 */ addi r1, r1, 0x18 +/* 0001B72C 000284BC 4E 80 00 20 */ blr +.endfn Make3__H1ZQ25UMath7Vector3__14ConversionUtilfff_X01 + +# .text:0x1B730 | size: 0x60 +.fn RightToLeftVector3__H2Z8bVector3ZQ25UMath7Vector3__14ConversionUtilRCX01RX11_v, weak +/* 0001B730 000284C0 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 0001B734 000284C4 7C 08 02 A6 */ mflr r0 +/* 0001B738 000284C8 BF C1 00 18 */ stmw r30, 0x18(r1) +/* 0001B73C 000284CC 90 01 00 24 */ stw r0, 0x24(r1) +/* 0001B740 000284D0 7C 69 1B 78 */ mr r9, r3 +/* 0001B744 000284D4 7C 9E 23 78 */ mr r30, r4 +/* 0001B748 000284D8 C0 29 00 04 */ lfs f1, 0x4(r9) +/* 0001B74C 000284DC 38 61 00 08 */ addi r3, r1, 0x8 +/* 0001B750 000284E0 C0 69 00 00 */ lfs f3, 0x0(r9) +/* 0001B754 000284E4 C0 49 00 08 */ lfs f2, 0x8(r9) +/* 0001B758 000284E8 FC 20 08 50 */ fneg f1, f1 +/* 0001B75C 000284EC 48 00 00 01 */ bl Make3__H1ZQ25UMath7Vector3__14ConversionUtilfff_X01 +/* 0001B760 000284F0 39 21 00 08 */ addi r9, r1, 0x8 +/* 0001B764 000284F4 81 41 00 08 */ lwz r10, 0x8(r1) +/* 0001B768 000284F8 80 09 00 08 */ lwz r0, 0x8(r9) +.L_0001B76C: +/* 0001B76C 000284FC 81 69 00 04 */ lwz r11, 0x4(r9) +/* 0001B770 00028500 90 1E 00 08 */ stw r0, 0x8(r30) +/* 0001B774 00028504 91 5E 00 00 */ stw r10, 0x0(r30) +/* 0001B778 00028508 91 7E 00 04 */ stw r11, 0x4(r30) +/* 0001B77C 0002850C 80 01 00 24 */ lwz r0, 0x24(r1) +/* 0001B780 00028510 7C 08 03 A6 */ mtlr r0 +/* 0001B784 00028514 BB C1 00 18 */ lmw r30, 0x18(r1) +/* 0001B788 00028518 38 21 00 20 */ addi r1, r1, 0x20 +/* 0001B78C 0002851C 4E 80 00 20 */ blr +.endfn RightToLeftVector3__H2Z8bVector3ZQ25UMath7Vector3__14ConversionUtilRCX01RX11_v + +# .text:0x1B790 | size: 0x24 +.fn Copy4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRX11RCX01_v, global +/* 0001B790 00028520 C0 04 00 00 */ lfs f0, 0x0(r4) +/* 0001B794 00028524 D0 03 00 00 */ stfs f0, 0x0(r3) +/* 0001B798 00028528 C1 A4 00 04 */ lfs f13, 0x4(r4) +/* 0001B79C 0002852C D1 A3 00 04 */ stfs f13, 0x4(r3) +/* 0001B7A0 00028530 C0 04 00 08 */ lfs f0, 0x8(r4) +/* 0001B7A4 00028534 D0 03 00 08 */ stfs f0, 0x8(r3) +/* 0001B7A8 00028538 C1 A4 00 0C */ lfs f13, 0xc(r4) +/* 0001B7AC 0002853C D1 A3 00 0C */ stfs f13, 0xc(r3) +/* 0001B7B0 00028540 4E 80 00 20 */ blr +.endfn Copy4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRX11RCX01_v + +# .text:0x1B7B4 | size: 0x60 +.fn RightToLeftVector3__H2ZQ25UMath7Vector3ZQ25UMath7Vector3__14ConversionUtilRCX01RX11_v, global +/* 0001B7B4 00028544 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 0001B7B8 00028548 7C 08 02 A6 */ mflr r0 +.L_0001B7BC: +/* 0001B7BC 0002854C BF C1 00 18 */ stmw r30, 0x18(r1) +/* 0001B7C0 00028550 90 01 00 24 */ stw r0, 0x24(r1) +/* 0001B7C4 00028554 7C 69 1B 78 */ mr r9, r3 +/* 0001B7C8 00028558 7C 9E 23 78 */ mr r30, r4 +/* 0001B7CC 0002855C C0 29 00 04 */ lfs f1, 0x4(r9) +/* 0001B7D0 00028560 38 61 00 08 */ addi r3, r1, 0x8 +/* 0001B7D4 00028564 C0 69 00 00 */ lfs f3, 0x0(r9) +/* 0001B7D8 00028568 C0 49 00 08 */ lfs f2, 0x8(r9) +/* 0001B7DC 0002856C FC 20 08 50 */ fneg f1, f1 +.L_0001B7E0: +/* 0001B7E0 00028570 48 00 00 01 */ bl Make3__H1ZQ25UMath7Vector3__14ConversionUtilfff_X01 +/* 0001B7E4 00028574 39 21 00 08 */ addi r9, r1, 0x8 +.L_0001B7E8: +/* 0001B7E8 00028578 81 41 00 08 */ lwz r10, 0x8(r1) +/* 0001B7EC 0002857C 80 09 00 08 */ lwz r0, 0x8(r9) +/* 0001B7F0 00028580 81 69 00 04 */ lwz r11, 0x4(r9) +/* 0001B7F4 00028584 90 1E 00 08 */ stw r0, 0x8(r30) +/* 0001B7F8 00028588 91 5E 00 00 */ stw r10, 0x0(r30) +/* 0001B7FC 0002858C 91 7E 00 04 */ stw r11, 0x4(r30) +.L_0001B800: +/* 0001B800 00028590 80 01 00 24 */ lwz r0, 0x24(r1) +/* 0001B804 00028594 7C 08 03 A6 */ mtlr r0 +/* 0001B808 00028598 BB C1 00 18 */ lmw r30, 0x18(r1) +/* 0001B80C 0002859C 38 21 00 20 */ addi r1, r1, 0x20 +.L_0001B810: +/* 0001B810 000285A0 4E 80 00 20 */ blr +.endfn RightToLeftVector3__H2ZQ25UMath7Vector3ZQ25UMath7Vector3__14ConversionUtilRCX01RX11_v + +# .text:0x1B814 | size: 0xAC +.fn RightToLeftMatrix4__H2ZQ25UMath7Matrix4ZQ25UMath7Matrix4__14ConversionUtilRCX01RX11_v, global +/* 0001B814 000285A4 94 21 FF 98 */ stwu r1, -0x68(r1) +/* 0001B818 000285A8 7C 08 02 A6 */ mflr r0 +/* 0001B81C 000285AC BF 21 00 4C */ stmw r25, 0x4c(r1) +/* 0001B820 000285B0 90 01 00 6C */ stw r0, 0x6c(r1) +/* 0001B824 000285B4 3B A1 00 08 */ addi r29, r1, 0x8 +/* 0001B828 000285B8 7C 7E 1B 78 */ mr r30, r3 +/* 0001B82C 000285BC 7C 9C 23 78 */ mr r28, r4 +/* 0001B830 000285C0 3B 61 00 18 */ addi r27, r1, 0x18 +/* 0001B834 000285C4 38 9E 00 10 */ addi r4, r30, 0x10 +/* 0001B838 000285C8 7F A3 EB 78 */ mr r3, r29 +/* 0001B83C 000285CC 48 01 B7 91 */ bl .text+0x1B790 +/* 0001B840 000285D0 3B 21 00 28 */ addi r25, r1, 0x28 +/* 0001B844 000285D4 7F 63 DB 78 */ mr r3, r27 +/* 0001B848 000285D8 38 9E 00 20 */ addi r4, r30, 0x20 +/* 0001B84C 000285DC 48 01 B7 91 */ bl .text+0x1B790 +/* 0001B850 000285E0 3B 41 00 38 */ addi r26, r1, 0x38 +/* 0001B854 000285E4 7F 23 CB 78 */ mr r3, r25 +/* 0001B858 000285E8 7F C4 F3 78 */ mr r4, r30 +/* 0001B85C 000285EC 48 01 B7 91 */ bl .text+0x1B790 +/* 0001B860 000285F0 38 9E 00 30 */ addi r4, r30, 0x30 +/* 0001B864 000285F4 7F 43 D3 78 */ mr r3, r26 +/* 0001B868 000285F8 48 01 B7 91 */ bl .text+0x1B790 +/* 0001B86C 000285FC 3D 20 00 00 */ lis r9, .rodata+0xE64@ha +/* 0001B870 00028600 7F A3 EB 78 */ mr r3, r29 +/* 0001B874 00028604 C0 29 0E 64 */ lfs f1, .rodata+0xE64@l(r9) +/* 0001B878 00028608 48 00 00 01 */ bl Scale3__H1ZQ25UMath7Vector4__14ConversionUtilRX01f_v +/* 0001B87C 0002860C 7F A3 EB 78 */ mr r3, r29 +/* 0001B880 00028610 7F 84 E3 78 */ mr r4, r28 +/* 0001B884 00028614 48 00 00 01 */ bl RightToLeftVector4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRCX01RX11_v +/* 0001B888 00028618 7F 63 DB 78 */ mr r3, r27 +/* 0001B88C 0002861C 38 9C 00 10 */ addi r4, r28, 0x10 +/* 0001B890 00028620 48 00 00 01 */ bl RightToLeftVector4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRCX01RX11_v +/* 0001B894 00028624 7F 23 CB 78 */ mr r3, r25 +/* 0001B898 00028628 38 9C 00 20 */ addi r4, r28, 0x20 +/* 0001B89C 0002862C 48 00 00 01 */ bl RightToLeftVector4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRCX01RX11_v +/* 0001B8A0 00028630 7F 43 D3 78 */ mr r3, r26 +/* 0001B8A4 00028634 38 9C 00 30 */ addi r4, r28, 0x30 +/* 0001B8A8 00028638 48 00 00 01 */ bl RightToLeftVector4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRCX01RX11_v +.L_0001B8AC: +/* 0001B8AC 0002863C 80 01 00 6C */ lwz r0, 0x6c(r1) +/* 0001B8B0 00028640 7C 08 03 A6 */ mtlr r0 +/* 0001B8B4 00028644 BB 21 00 4C */ lmw r25, 0x4c(r1) +.L_0001B8B8: +/* 0001B8B8 00028648 38 21 00 68 */ addi r1, r1, 0x68 +/* 0001B8BC 0002864C 4E 80 00 20 */ blr +.endfn RightToLeftMatrix4__H2ZQ25UMath7Matrix4ZQ25UMath7Matrix4__14ConversionUtilRCX01RX11_v + +# .text:0x1B8C0 | size: 0xB0 +.fn find__H2ZPP14IDebugWatchCarZP14IDebugWatchCar_4_STLX01X01RCX11_X01, weak +/* 0001B8C0 00028650 7C 03 20 50 */ subf r0, r3, r4 +/* 0001B8C4 00028654 7C 0B 26 71 */ srawi. r11, r0, 4 +/* 0001B8C8 00028658 40 81 B9 0C */ ble .L_000171D4 +/* 0001B8CC 0002865C 81 25 00 00 */ lwz r9, 0x0(r5) +.L_0001B8D0: +/* 0001B8D0 00028660 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001B8D4 00028664 7C 00 48 00 */ cmpw r0, r9 +/* 0001B8D8 00028668 4D 82 00 20 */ beqlr +/* 0001B8DC 0002866C 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001B8E0 00028670 7C 00 48 00 */ cmpw r0, r9 +/* 0001B8E4 00028674 4D 82 00 20 */ beqlr +/* 0001B8E8 00028678 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001B8EC 0002867C 7C 00 48 00 */ cmpw r0, r9 +/* 0001B8F0 00028680 4D 82 00 20 */ beqlr +/* 0001B8F4 00028684 84 03 00 04 */ lwzu r0, 0x4(r3) +/* 0001B8F8 00028688 7C 00 48 00 */ cmpw r0, r9 +/* 0001B8FC 0002868C 4D 82 00 20 */ beqlr +/* 0001B900 00028690 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001B904 00028694 35 6B FF FF */ subic. r11, r11, 0x1 +/* 0001B908 00028698 41 81 B8 D0 */ bgt ReplayPowerSlideMirror__FP9ICEAnchor +/* 0001B90C 0002869C 7C 03 20 50 */ subf r0, r3, r4 +/* 0001B910 000286A0 7C 00 16 70 */ srawi r0, r0, 2 +/* 0001B914 000286A4 2C 00 00 01 */ cmpwi r0, 0x1 +/* 0001B918 000286A8 41 82 B9 58 */ beq .L_00017270 +/* 0001B91C 000286AC 40 81 B9 68 */ ble .L_00017284 +/* 0001B920 000286B0 2C 00 00 02 */ cmpwi r0, 0x2 +/* 0001B924 000286B4 41 82 B9 44 */ beq .L_00017268 +/* 0001B928 000286B8 2C 00 00 03 */ cmpwi r0, 0x3 +/* 0001B92C 000286BC 40 82 B9 68 */ bne .L_00017294 +/* 0001B930 000286C0 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001B934 000286C4 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001B938 000286C8 7C 09 00 00 */ cmpw r9, r0 +/* 0001B93C 000286CC 4D 82 00 20 */ beqlr +/* 0001B940 000286D0 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001B944 000286D4 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001B948 000286D8 80 05 00 00 */ lwz r0, 0x0(r5) +/* 0001B94C 000286DC 7C 09 00 00 */ cmpw r9, r0 +/* 0001B950 000286E0 4D 82 00 20 */ beqlr +/* 0001B954 000286E4 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001B958 000286E8 81 25 00 00 */ lwz r9, 0x0(r5) +/* 0001B95C 000286EC 80 03 00 00 */ lwz r0, 0x0(r3) +/* 0001B960 000286F0 7C 00 48 00 */ cmpw r0, r9 +/* 0001B964 000286F4 4D 82 00 20 */ beqlr +/* 0001B968 000286F8 7C 83 23 78 */ mr r3, r4 +/* 0001B96C 000286FC 4E 80 00 20 */ blr +.endfn find__H2ZPP14IDebugWatchCarZP14IDebugWatchCar_4_STLX01X01RCX11_X01 + +# .text:0x1B970 | size: 0x18 +.fn Count__Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi1012eVehicleList, weak +/* 0001B970 00028700 1C 63 00 38 */ mulli r3, r3, 0x38 +/* 0001B974 00028704 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@ha +/* 0001B978 00028708 39 29 00 00 */ addi r9, r9, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@l +/* 0001B97C 0002870C 7C 63 4A 14 */ add r3, r3, r9 +/* 0001B980 00028710 80 63 00 08 */ lwz r3, 0x8(r3) +/* 0001B984 00028714 4E 80 00 20 */ blr +.endfn Count__Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi1012eVehicleList + +# .text:0x1B988 | size: 0x1BC +.fn __static_initialization_and_destruction_0, local +/* 0001B988 00028718 94 21 FF E8 */ stwu r1, -0x18(r1) +/* 0001B98C 0002871C 7C 08 02 A6 */ mflr r0 +/* 0001B990 00028720 BF C1 00 10 */ stmw r30, 0x10(r1) +/* 0001B994 00028724 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0001B998 00028728 38 00 00 00 */ li r0, 0x0 +.L_0001B99C: +/* 0001B99C 0002872C 60 00 FF FF */ ori r0, r0, 0xffff +/* 0001B9A0 00028730 7C 04 00 00 */ cmpw r4, r0 +/* 0001B9A4 00028734 40 82 BB 30 */ bne .L_000174D4 +.L_0001B9A8: +/* 0001B9A8 00028738 2C 03 00 00 */ cmpwi r3, 0x0 +/* 0001B9AC 0002873C 41 82 BB 30 */ beq .L_000174DC +/* 0001B9B0 00028740 3D 20 80 00 */ lis r9, 0x8000 +/* 0001B9B4 00028744 3C 00 7E 80 */ lis r0, 0x7e80 +/* 0001B9B8 00028748 7D 28 4B 78 */ mr r8, r9 +/* 0001B9BC 0002874C 7C 0A 03 78 */ mr r10, r0 +/* 0001B9C0 00028750 3D 60 00 00 */ lis r11, kFloatScaleUp@ha +/* 0001B9C4 00028754 3D 20 00 00 */ lis r9, kFloatScaleDown@ha +/* 0001B9C8 00028758 3C 60 00 00 */ lis r3, .rodata+0x74C@ha +/* 0001B9CC 0002875C 91 09 00 00 */ stw r8, kFloatScaleDown@l(r9) +/* 0001B9D0 00028760 91 4B 00 00 */ stw r10, kFloatScaleUp@l(r11) +/* 0001B9D4 00028764 38 63 07 4C */ addi r3, r3, .rodata+0x74C@l +/* 0001B9D8 00028768 48 00 00 01 */ bl stringhash32__FPCc +/* 0001B9DC 0002876C 3F C0 00 00 */ lis r30, _Q43UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32_9Prototype.mHead@ha +/* 0001B9E0 00028770 7C 60 1B 78 */ mr r0, r3 +/* 0001B9E4 00028774 3D 40 00 00 */ lis r10, _CDActionDrive@ha +/* 0001B9E8 00028778 3D 20 00 00 */ lis r9, Construct__13CDActionDrivePQ28CameraAI8Director@ha +/* 0001B9EC 0002877C 39 6A 00 00 */ addi r11, r10, _CDActionDrive@l +/* 0001B9F0 00028780 90 0A 00 00 */ stw r0, _CDActionDrive@l(r10) +/* 0001B9F4 00028784 39 29 00 00 */ addi r9, r9, Construct__13CDActionDrivePQ28CameraAI8Director@l +/* 0001B9F8 00028788 91 2B 00 04 */ stw r9, 0x4(r11) +/* 0001B9FC 0002878C 3C 60 00 00 */ lis r3, .rodata+0x8A8@ha +/* 0001BA00 00028790 90 01 00 08 */ stw r0, 0x8(r1) +/* 0001BA04 00028794 38 63 08 A8 */ addi r3, r3, .rodata+0x8A8@l +/* 0001BA08 00028798 91 7E 00 00 */ stw r11, _Q43UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32_9Prototype.mHead@l(r30) +/* 0001BA0C 0002879C 48 00 00 01 */ bl stringhash32__FPCc +/* 0001BA10 000287A0 7C 60 1B 78 */ mr r0, r3 +/* 0001BA14 000287A4 3D 40 00 00 */ lis r10, _CDActionTrackCar@ha +/* 0001BA18 000287A8 3D 20 00 00 */ lis r9, Construct__16CDActionTrackCarPQ28CameraAI8Director@ha +/* 0001BA1C 000287AC 39 6A 00 00 */ addi r11, r10, _CDActionTrackCar@l +/* 0001BA20 000287B0 90 0A 00 00 */ stw r0, _CDActionTrackCar@l(r10) +/* 0001BA24 000287B4 39 29 00 00 */ addi r9, r9, Construct__16CDActionTrackCarPQ28CameraAI8Director@l +/* 0001BA28 000287B8 91 2B 00 04 */ stw r9, 0x4(r11) +/* 0001BA2C 000287BC 3C 60 00 00 */ lis r3, .rodata+0x8B8@ha +.L_0001BA30: +/* 0001BA30 000287C0 90 01 00 08 */ stw r0, 0x8(r1) +/* 0001BA34 000287C4 38 63 08 B8 */ addi r3, r3, .rodata+0x8B8@l +/* 0001BA38 000287C8 91 7E 00 00 */ stw r11, _Q43UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32_9Prototype.mHead@l(r30) +/* 0001BA3C 000287CC 48 00 00 01 */ bl stringhash32__FPCc +/* 0001BA40 000287D0 7C 60 1B 78 */ mr r0, r3 +/* 0001BA44 000287D4 3D 40 00 00 */ lis r10, _CDActionTrackCop@ha +/* 0001BA48 000287D8 3D 20 00 00 */ lis r9, Construct__16CDActionTrackCopPQ28CameraAI8Director@ha +/* 0001BA4C 000287DC 39 6A 00 00 */ addi r11, r10, _CDActionTrackCop@l +/* 0001BA50 000287E0 90 0A 00 00 */ stw r0, _CDActionTrackCop@l(r10) +/* 0001BA54 000287E4 39 29 00 00 */ addi r9, r9, Construct__16CDActionTrackCopPQ28CameraAI8Director@l +/* 0001BA58 000287E8 91 2B 00 04 */ stw r9, 0x4(r11) +/* 0001BA5C 000287EC 3C 60 00 00 */ lis r3, .rodata+0x8C8@ha +/* 0001BA60 000287F0 90 01 00 08 */ stw r0, 0x8(r1) +/* 0001BA64 000287F4 38 63 08 C8 */ addi r3, r3, .rodata+0x8C8@l +/* 0001BA68 000287F8 91 7E 00 00 */ stw r11, _Q43UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32_9Prototype.mHead@l(r30) +/* 0001BA6C 000287FC 48 00 00 01 */ bl stringhash32__FPCc +/* 0001BA70 00028800 7C 60 1B 78 */ mr r0, r3 +/* 0001BA74 00028804 3D 40 00 00 */ lis r10, _CDActionShowcase@ha +/* 0001BA78 00028808 3D 20 00 00 */ lis r9, Construct__16CDActionShowcasePQ28CameraAI8Director@ha +/* 0001BA7C 0002880C 39 6A 00 00 */ addi r11, r10, _CDActionShowcase@l +/* 0001BA80 00028810 90 0A 00 00 */ stw r0, _CDActionShowcase@l(r10) +/* 0001BA84 00028814 39 29 00 00 */ addi r9, r9, Construct__16CDActionShowcasePQ28CameraAI8Director@l +/* 0001BA88 00028818 91 2B 00 04 */ stw r9, 0x4(r11) +/* 0001BA8C 0002881C 3C 60 00 00 */ lis r3, .rodata+0x8D8@ha +/* 0001BA90 00028820 90 01 00 08 */ stw r0, 0x8(r1) +/* 0001BA94 00028824 38 63 08 D8 */ addi r3, r3, .rodata+0x8D8@l +/* 0001BA98 00028828 91 7E 00 00 */ stw r11, _Q43UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32_9Prototype.mHead@l(r30) +/* 0001BA9C 0002882C 48 00 00 01 */ bl stringhash32__FPCc +/* 0001BAA0 00028830 7C 60 1B 78 */ mr r0, r3 +/* 0001BAA4 00028834 3D 40 00 00 */ lis r10, _CDActionDebug@ha +/* 0001BAA8 00028838 3D 20 00 00 */ lis r9, Construct__13CDActionDebugPQ28CameraAI8Director@ha +.L_0001BAAC: +/* 0001BAAC 0002883C 39 6A 00 00 */ addi r11, r10, _CDActionDebug@l +/* 0001BAB0 00028840 90 0A 00 00 */ stw r0, _CDActionDebug@l(r10) +/* 0001BAB4 00028844 39 29 00 00 */ addi r9, r9, Construct__13CDActionDebugPQ28CameraAI8Director@l +/* 0001BAB8 00028848 91 2B 00 04 */ stw r9, 0x4(r11) +/* 0001BABC 0002884C 3C 60 00 00 */ lis r3, .rodata+0x77C@ha +/* 0001BAC0 00028850 90 01 00 08 */ stw r0, 0x8(r1) +/* 0001BAC4 00028854 38 63 07 7C */ addi r3, r3, .rodata+0x77C@l +/* 0001BAC8 00028858 91 7E 00 00 */ stw r11, _Q43UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32_9Prototype.mHead@l(r30) +/* 0001BACC 0002885C 48 00 00 01 */ bl stringhash32__FPCc +/* 0001BAD0 00028860 7C 60 1B 78 */ mr r0, r3 +/* 0001BAD4 00028864 3D 40 00 00 */ lis r10, _CDActionIce@ha +/* 0001BAD8 00028868 3D 20 00 00 */ lis r9, Construct__11CDActionIcePQ28CameraAI8Director@ha +/* 0001BADC 0002886C 39 6A 00 00 */ addi r11, r10, _CDActionIce@l +/* 0001BAE0 00028870 90 0A 00 00 */ stw r0, _CDActionIce@l(r10) +/* 0001BAE4 00028874 39 29 00 00 */ addi r9, r9, Construct__11CDActionIcePQ28CameraAI8Director@l +/* 0001BAE8 00028878 91 2B 00 04 */ stw r9, 0x4(r11) +/* 0001BAEC 0002887C 3C 60 00 00 */ lis r3, .rodata+0x908@ha +/* 0001BAF0 00028880 91 7E 00 00 */ stw r11, _Q43UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32_9Prototype.mHead@l(r30) +/* 0001BAF4 00028884 38 63 09 08 */ addi r3, r3, .rodata+0x908@l +/* 0001BAF8 00028888 90 01 00 08 */ stw r0, 0x8(r1) +/* 0001BAFC 0002888C 48 00 00 01 */ bl stringhash32__FPCc +/* 0001BB00 00028890 3D 40 00 00 */ lis r10, _CDActionDebugWatchCar@ha +/* 0001BB04 00028894 7C 60 1B 78 */ mr r0, r3 +/* 0001BB08 00028898 39 6A 00 00 */ addi r11, r10, _CDActionDebugWatchCar@l +/* 0001BB0C 0002889C 3D 20 00 00 */ lis r9, Construct__21CDActionDebugWatchCarPQ28CameraAI8Director@ha +/* 0001BB10 000288A0 39 29 00 00 */ addi r9, r9, Construct__21CDActionDebugWatchCarPQ28CameraAI8Director@l +/* 0001BB14 000288A4 90 0A 00 00 */ stw r0, _CDActionDebugWatchCar@l(r10) +/* 0001BB18 000288A8 91 7E 00 00 */ stw r11, _Q43UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32_9Prototype.mHead@l(r30) +/* 0001BB1C 000288AC 3C 60 00 00 */ lis r3, TheICEManager@ha +/* 0001BB20 000288B0 91 2B 00 04 */ stw r9, 0x4(r11) +/* 0001BB24 000288B4 38 63 00 00 */ addi r3, r3, TheICEManager@l +/* 0001BB28 000288B8 90 01 00 08 */ stw r0, 0x8(r1) +/* 0001BB2C 000288BC 48 01 81 ED */ bl .text+0x181EC +/* 0001BB30 000288C0 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0001BB34 000288C4 7C 08 03 A6 */ mtlr r0 +/* 0001BB38 000288C8 BB C1 00 10 */ lmw r30, 0x10(r1) +/* 0001BB3C 000288CC 38 21 00 18 */ addi r1, r1, 0x18 +/* 0001BB40 000288D0 4E 80 00 20 */ blr +.endfn __static_initialization_and_destruction_0 + +# .text:0x1BB44 | size: 0x20 +.fn __8bVector3RC8bVector3, weak +/* 0001BB44 000288D4 C1 84 00 08 */ lfs f12, 0x8(r4) +/* 0001BB48 000288D8 7C 69 1B 78 */ mr r9, r3 +/* 0001BB4C 000288DC C0 04 00 00 */ lfs f0, 0x0(r4) +/* 0001BB50 000288E0 C1 A4 00 04 */ lfs f13, 0x4(r4) +/* 0001BB54 000288E4 D0 09 00 00 */ stfs f0, 0x0(r9) +/* 0001BB58 000288E8 D1 A9 00 04 */ stfs f13, 0x4(r9) +/* 0001BB5C 000288EC D1 89 00 08 */ stfs f12, 0x8(r9) +/* 0001BB60 000288F0 4E 80 00 20 */ blr +.endfn __8bVector3RC8bVector3 + +# .text:0x1BB64 | size: 0x54 +.fn _._Q33UTL3COM8IUnknown, weak +/* 0001BB64 000288F4 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 0001BB68 000288F8 7C 08 02 A6 */ mflr r0 +/* 0001BB6C 000288FC BF C1 00 08 */ stmw r30, 0x8(r1) +/* 0001BB70 00028900 90 01 00 14 */ stw r0, 0x14(r1) +/* 0001BB74 00028904 7C 7F 1B 78 */ mr r31, r3 +/* 0001BB78 00028908 3D 20 00 00 */ lis r9, _vt.Q33UTL3COM8IUnknown@ha +/* 0001BB7C 0002890C 7C 9E 23 78 */ mr r30, r4 +/* 0001BB80 00028910 39 29 00 00 */ addi r9, r9, _vt.Q33UTL3COM8IUnknown@l +/* 0001BB84 00028914 80 7F 00 00 */ lwz r3, 0x0(r31) +/* 0001BB88 00028918 7F E4 FB 78 */ mr r4, r31 +/* 0001BB8C 0002891C 91 3F 00 04 */ stw r9, 0x4(r31) +/* 0001BB90 00028920 48 00 00 01 */ bl Remove__Q43UTL3COM6Object6_IListPQ33UTL3COM8IUnknown +/* 0001BB94 00028924 73 C0 00 01 */ andi. r0, r30, 0x1 +/* 0001BB98 00028928 41 82 BB A4 */ beq .L_0001773C +/* 0001BB9C 0002892C 7F E3 FB 78 */ mr r3, r31 +/* 0001BBA0 00028930 48 00 00 01 */ bl __builtin_delete +/* 0001BBA4 00028934 80 01 00 14 */ lwz r0, 0x14(r1) +/* 0001BBA8 00028938 7C 08 03 A6 */ mtlr r0 +/* 0001BBAC 0002893C BB C1 00 08 */ lmw r30, 0x8(r1) +/* 0001BBB0 00028940 38 21 00 10 */ addi r1, r1, 0x10 +/* 0001BBB4 00028944 4E 80 00 20 */ blr +.endfn _._Q33UTL3COM8IUnknown + +# .text:0x1BBB8 | size: 0x8 +# CameraMover::GetType +.fn GetType__11CameraMover, global +/* 0001BBB8 00028948 80 63 00 0C */ lwz r3, 0xc(r3) +/* 0001BBBC 0002894C 4E 80 00 20 */ blr +.endfn GetType__11CameraMover + +# .text:0x1BBC0 | size: 0xC +# CameraMover::GetPosition +.fn GetPosition__11CameraMover, global +/* 0001BBC0 00028950 80 63 00 1C */ lwz r3, 0x1c(r3) +/* 0001BBC4 00028954 38 63 00 40 */ addi r3, r3, 0x40 +/* 0001BBC8 00028958 4E 80 00 20 */ blr +.endfn GetPosition__11CameraMover + +# .text:0x1BBCC | size: 0xC +# CameraMover::GetDirection +.fn GetDirection__11CameraMover, global +/* 0001BBCC 0002895C 80 63 00 1C */ lwz r3, 0x1c(r3) +/* 0001BBD0 00028960 38 63 00 50 */ addi r3, r3, 0x50 +.L_0001BBD4: +/* 0001BBD4 00028964 4E 80 00 20 */ blr +.endfn GetDirection__11CameraMover + +# .text:0x1BBD8 | size: 0x8 +# CameraMover::GetCamera +.fn GetCamera__11CameraMover, global +/* 0001BBD8 00028968 80 63 00 1C */ lwz r3, 0x1c(r3) +/* 0001BBDC 0002896C 4E 80 00 20 */ blr +.endfn GetCamera__11CameraMover + +# .text:0x1BBE0 | size: 0x4 +.fn SetLookBack__11CameraMoverb, global +/* 0001BBE0 00028970 4E 80 00 20 */ blr +.endfn SetLookBack__11CameraMoverb + +# .text:0x1BBE4 | size: 0x4 +.fn SetLookbackSpeed__11CameraMoverf, global +/* 0001BBE4 00028974 4E 80 00 20 */ blr +.endfn SetLookbackSpeed__11CameraMoverf + +# .text:0x1BBE8 | size: 0x4 +.fn SetDisableLag__11CameraMoverb, global +/* 0001BBE8 00028978 4E 80 00 20 */ blr +.endfn SetDisableLag__11CameraMoverb + +# .text:0x1BBEC | size: 0x4 +.fn SetPovType__11CameraMoveri, global +/* 0001BBEC 0002897C 4E 80 00 20 */ blr +.endfn SetPovType__11CameraMoveri + +# .text:0x1BBF0 | size: 0x8 +# CameraMover::IsHoodCamera +.fn IsHoodCamera__11CameraMover, global +/* 0001BBF0 00028980 38 60 00 00 */ li r3, 0x0 +/* 0001BBF4 00028984 4E 80 00 20 */ blr +.endfn IsHoodCamera__11CameraMover + +# .text:0x1BBF8 | size: 0x8 +.fn SetRenderCarPOV__19TrackCopCameraMoverb, global +/* 0001BBF8 00028988 90 83 02 4C */ stw r4, 0x24c(r3) +/* 0001BBFC 0002898C 4E 80 00 20 */ blr +.endfn SetRenderCarPOV__19TrackCopCameraMoverb + +# .text:0x1BC00 | size: 0x24 +.fn SetEye__21DebugWorldCameraMoverRC8bVector3, global +/* 0001BC00 00028990 C0 03 00 00 */ lfs f0, 0x0(r3) +/* 0001BC04 00028994 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.Eye@ha +/* 0001BC08 00028998 C1 83 00 08 */ lfs f12, 0x8(r3) +/* 0001BC0C 0002899C 39 69 00 00 */ addi r11, r9, _21DebugWorldCameraMover.Eye@l +/* 0001BC10 000289A0 C1 A3 00 04 */ lfs f13, 0x4(r3) +/* 0001BC14 000289A4 D0 09 00 00 */ stfs f0, _21DebugWorldCameraMover.Eye@l(r9) +/* 0001BC18 000289A8 D1 8B 00 08 */ stfs f12, 0x8(r11) +/* 0001BC1C 000289AC D1 AB 00 04 */ stfs f13, 0x4(r11) +/* 0001BC20 000289B0 4E 80 00 20 */ blr +.endfn SetEye__21DebugWorldCameraMoverRC8bVector3 + +# .text:0x1BC24 | size: 0x24 +.fn SetLook__21DebugWorldCameraMoverRC8bVector3, global +/* 0001BC24 000289B4 C0 03 00 00 */ lfs f0, 0x0(r3) +/* 0001BC28 000289B8 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.Look@ha +/* 0001BC2C 000289BC C1 83 00 08 */ lfs f12, 0x8(r3) +/* 0001BC30 000289C0 39 69 00 00 */ addi r11, r9, _21DebugWorldCameraMover.Look@l +/* 0001BC34 000289C4 C1 A3 00 04 */ lfs f13, 0x4(r3) +/* 0001BC38 000289C8 D0 09 00 00 */ stfs f0, _21DebugWorldCameraMover.Look@l(r9) +/* 0001BC3C 000289CC D1 8B 00 08 */ stfs f12, 0x8(r11) +/* 0001BC40 000289D0 D1 AB 00 04 */ stfs f13, 0x4(r11) +/* 0001BC44 000289D4 4E 80 00 20 */ blr +.endfn SetLook__21DebugWorldCameraMoverRC8bVector3 + +# .text:0x1BC48 | size: 0xC +# DebugWorldCameraMover::GetLook +.fn GetLook__21DebugWorldCameraMover, global +/* 0001BC48 000289D8 3C 60 00 00 */ lis r3, _21DebugWorldCameraMover.Look@ha +/* 0001BC4C 000289DC 38 63 00 00 */ addi r3, r3, _21DebugWorldCameraMover.Look@l +/* 0001BC50 000289E0 4E 80 00 20 */ blr +.endfn GetLook__21DebugWorldCameraMover + +# .text:0x1BC54 | size: 0xC +# DebugWorldCameraMover::GetEye +.fn GetEye__21DebugWorldCameraMover, global +/* 0001BC54 000289E4 3C 60 00 00 */ lis r3, _21DebugWorldCameraMover.Eye@ha +/* 0001BC58 000289E8 38 63 00 00 */ addi r3, r3, _21DebugWorldCameraMover.Eye@l +/* 0001BC5C 000289EC 4E 80 00 20 */ blr +.endfn GetEye__21DebugWorldCameraMover + +# .text:0x1BC60 | size: 0xC +# ICollisionBody::_IHandle +.fn _IHandle__14ICollisionBody, weak +/* 0001BC60 000289F0 3C 60 00 00 */ lis r3, _IHandle__14ICollisionBody@ha +/* 0001BC64 000289F4 38 63 00 00 */ addi r3, r3, _IHandle__14ICollisionBody@l +/* 0001BC68 000289F8 4E 80 00 20 */ blr +.endfn _IHandle__14ICollisionBody + +# .text:0x1BC6C | size: 0xC +# IAttachable::_IHandle +.fn _IHandle__11IAttachable, weak +/* 0001BC6C 000289FC 3C 60 00 00 */ lis r3, _IHandle__11IAttachable@ha +/* 0001BC70 00028A00 38 63 00 00 */ addi r3, r3, _IHandle__11IAttachable@l +/* 0001BC74 00028A04 4E 80 00 20 */ blr +.endfn _IHandle__11IAttachable + +# .text:0x1BC78 | size: 0x54 +.fn _._11IAttachable, weak +/* 0001BC78 00028A08 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 0001BC7C 00028A0C 7C 08 02 A6 */ mflr r0 +/* 0001BC80 00028A10 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 0001BC84 00028A14 90 01 00 14 */ stw r0, 0x14(r1) +/* 0001BC88 00028A18 7C 7F 1B 78 */ mr r31, r3 +/* 0001BC8C 00028A1C 3D 20 00 00 */ lis r9, _vt.Q33UTL3COM8IUnknown@ha +/* 0001BC90 00028A20 7C 9E 23 78 */ mr r30, r4 +/* 0001BC94 00028A24 39 29 00 00 */ addi r9, r9, _vt.Q33UTL3COM8IUnknown@l +/* 0001BC98 00028A28 80 7F 00 00 */ lwz r3, 0x0(r31) +/* 0001BC9C 00028A2C 7F E4 FB 78 */ mr r4, r31 +/* 0001BCA0 00028A30 91 3F 00 04 */ stw r9, 0x4(r31) +/* 0001BCA4 00028A34 48 00 00 01 */ bl Remove__Q43UTL3COM6Object6_IListPQ33UTL3COM8IUnknown +/* 0001BCA8 00028A38 73 C0 00 01 */ andi. r0, r30, 0x1 +/* 0001BCAC 00028A3C 41 82 BC B8 */ beq .L_00017964 +.L_0001BCB0: +/* 0001BCB0 00028A40 7F E3 FB 78 */ mr r3, r31 +/* 0001BCB4 00028A44 48 00 00 01 */ bl __builtin_delete +/* 0001BCB8 00028A48 80 01 00 14 */ lwz r0, 0x14(r1) +/* 0001BCBC 00028A4C 7C 08 03 A6 */ mtlr r0 +/* 0001BCC0 00028A50 BB C1 00 08 */ lmw r30, 0x8(r1) +.L_0001BCC4: +/* 0001BCC4 00028A54 38 21 00 10 */ addi r1, r1, 0x10 +/* 0001BCC8 00028A58 4E 80 00 20 */ blr +.endfn _._11IAttachable + +# .text:0x1BCCC | size: 0xC +# ISimable::_IHandle +.fn _IHandle__8ISimable, weak +/* 0001BCCC 00028A5C 3C 60 00 00 */ lis r3, _IHandle__8ISimable@ha +.L_0001BCD0: +/* 0001BCD0 00028A60 38 63 00 00 */ addi r3, r3, _IHandle__8ISimable@l +/* 0001BCD4 00028A64 4E 80 00 20 */ blr +.endfn _IHandle__8ISimable + +# .text:0x1BCD8 | size: 0xC +# IVehicle::_IHandle +.fn _IHandle__8IVehicle, weak +/* 0001BCD8 00028A68 3C 60 00 00 */ lis r3, _IHandle__8IVehicle@ha +/* 0001BCDC 00028A6C 38 63 00 00 */ addi r3, r3, _IHandle__8IVehicle@l +/* 0001BCE0 00028A70 4E 80 00 20 */ blr +.endfn _IHandle__8IVehicle + +# .text:0x1BCE4 | size: 0x68 +.fn _._Q28CameraAI6Action, weak +/* 0001BCE4 00028A74 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 0001BCE8 00028A78 7C 08 02 A6 */ mflr r0 +/* 0001BCEC 00028A7C BF C1 00 08 */ stmw r30, 0x8(r1) +/* 0001BCF0 00028A80 90 01 00 14 */ stw r0, 0x14(r1) +/* 0001BCF4 00028A84 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha +/* 0001BCF8 00028A88 7C 7F 1B 78 */ mr r31, r3 +/* 0001BCFC 00028A8C 7C 9E 23 78 */ mr r30, r4 +/* 0001BD00 00028A90 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l +/* 0001BD04 00028A94 91 3F 00 14 */ stw r9, 0x14(r31) +/* 0001BD08 00028A98 38 80 00 02 */ li r4, 0x2 +/* 0001BD0C 00028A9C 48 00 00 01 */ bl _._Q43UTL3COM6Object6_IList +/* 0001BD10 00028AA0 73 C0 00 01 */ andi. r0, r30, 0x1 +/* 0001BD14 00028AA4 41 82 BD 38 */ beq .L_00017A4C +/* 0001BD18 00028AA8 2C 1F 00 00 */ cmpwi r31, 0x0 +/* 0001BD1C 00028AAC 41 82 BD 38 */ beq .L_00017A54 +/* 0001BD20 00028AB0 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0001BD24 00028AB4 7F E4 FB 78 */ mr r4, r31 +/* 0001BD28 00028AB8 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0001BD2C 00028ABC 38 A0 00 18 */ li r5, 0x18 +/* 0001BD30 00028AC0 38 C0 00 00 */ li r6, 0x0 +/* 0001BD34 00028AC4 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 0001BD38 00028AC8 80 01 00 14 */ lwz r0, 0x14(r1) +/* 0001BD3C 00028ACC 7C 08 03 A6 */ mtlr r0 +/* 0001BD40 00028AD0 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 0001BD44 00028AD4 38 21 00 10 */ addi r1, r1, 0x10 +/* 0001BD48 00028AD8 4E 80 00 20 */ blr +.endfn _._Q28CameraAI6Action + +# .text:0x1BD4C | size: 0x4 +.fn Update__Q28CameraAI6Actionf, weak +/* 0001BD4C 00028ADC 4E 80 00 20 */ blr +.endfn Update__Q28CameraAI6Actionf + +# .text:0x1BD50 | size: 0x4 +# CameraAI::Action::Reset +.fn Reset__Q28CameraAI6Action, weak +/* 0001BD50 00028AE0 4E 80 00 20 */ blr +.endfn Reset__Q28CameraAI6Action + +# .text:0x1BD54 | size: 0x4 +.fn SetSpecial__Q28CameraAI6Actionf, weak +/* 0001BD54 00028AE4 4E 80 00 20 */ blr +.endfn SetSpecial__Q28CameraAI6Actionf + +# .text:0x1BD58 | size: 0x538 +.fn __Q43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4ListRCQ43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4List, weak +/* 0001BD58 00028AE8 94 21 FF D0 */ stwu r1, -0x30(r1) +/* 0001BD5C 00028AEC 7C 08 02 A6 */ mflr r0 +/* 0001BD60 00028AF0 7D 80 00 26 */ mfcr r12 +/* 0001BD64 00028AF4 BE E1 00 0C */ stmw r23, 0xc(r1) +/* 0001BD68 00028AF8 90 01 00 34 */ stw r0, 0x34(r1) +/* 0001BD6C 00028AFC 91 81 00 08 */ stw r12, 0x8(r1) +/* 0001BD70 00028B00 3D 20 00 00 */ lis r9, _vt.Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16@ha +/* 0001BD74 00028B04 7C 7F 1B 78 */ mr r31, r3 +/* 0001BD78 00028B08 38 00 00 00 */ li r0, 0x0 +/* 0001BD7C 00028B0C 39 29 00 00 */ addi r9, r9, _vt.Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16@l +/* 0001BD80 00028B10 90 1F 00 08 */ stw r0, 0x8(r31) +/* 0001BD84 00028B14 91 3F 00 0C */ stw r9, 0xc(r31) +/* 0001BD88 00028B18 90 1F 00 00 */ stw r0, 0x0(r31) +/* 0001BD8C 00028B1C 90 1F 00 04 */ stw r0, 0x4(r31) +/* 0001BD90 00028B20 80 04 00 08 */ lwz r0, 0x8(r4) +/* 0001BD94 00028B24 82 E4 00 00 */ lwz r23, 0x0(r4) +/* 0001BD98 00028B28 54 00 10 3A */ slwi r0, r0, 2 +/* 0001BD9C 00028B2C 7C 1A 16 70 */ srawi r26, r0, 2 +/* 0001BDA0 00028B30 7F 17 02 14 */ add r24, r23, r0 +/* 0001BDA4 00028B34 81 3F 00 08 */ lwz r9, 0x8(r31) +/* 0001BDA8 00028B38 7C 09 D0 40 */ cmplw r9, r26 +/* 0001BDAC 00028B3C 40 81 BD BC */ ble .L_00017B68 +/* 0001BDB0 00028B40 38 09 FF FF */ subi r0, r9, 0x1 +/* 0001BDB4 00028B44 90 1F 00 08 */ stw r0, 0x8(r31) +/* 0001BDB8 00028B48 48 01 BD A4 */ b .text+0x1BDA4 +/* 0001BDBC 00028B4C 3B 20 00 00 */ li r25, 0x0 +/* 0001BDC0 00028B50 80 1F 00 08 */ lwz r0, 0x8(r31) +/* 0001BDC4 00028B54 7C 04 03 78 */ mr r4, r0 +/* 0001BDC8 00028B58 7C 00 D0 40 */ cmplw r0, r26 +/* 0001BDCC 00028B5C 40 80 BF A0 */ bge .L_00017D6C +/* 0001BDD0 00028B60 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001BDD4 00028B64 38 84 00 01 */ addi r4, r4, 0x1 +/* 0001BDD8 00028B68 80 09 00 24 */ lwz r0, 0x24(r9) +/* 0001BDDC 00028B6C A8 69 00 20 */ lha r3, 0x20(r9) +/* 0001BDE0 00028B70 7C 08 03 A6 */ mtlr r0 +/* 0001BDE4 00028B74 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001BDE8 00028B78 4E 80 00 21 */ blrl +/* 0001BDEC 00028B7C 80 1F 00 04 */ lwz r0, 0x4(r31) +/* 0001BDF0 00028B80 7C 7E 1B 78 */ mr r30, r3 +/* 0001BDF4 00028B84 7C 1E 00 40 */ cmplw r30, r0 +/* 0001BDF8 00028B88 40 81 BE A8 */ ble .L_00017CA0 +/* 0001BDFC 00028B8C 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001BE00 00028B90 7F C4 F3 78 */ mr r4, r30 +/* 0001BE04 00028B94 80 09 00 34 */ lwz r0, 0x34(r9) +/* 0001BE08 00028B98 A8 69 00 30 */ lha r3, 0x30(r9) +/* 0001BE0C 00028B9C 7C 08 03 A6 */ mtlr r0 +/* 0001BE10 00028BA0 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001BE14 00028BA4 4E 80 00 21 */ blrl +/* 0001BE18 00028BA8 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001BE1C 00028BAC 7F C4 F3 78 */ mr r4, r30 +/* 0001BE20 00028BB0 38 A0 00 10 */ li r5, 0x10 +/* 0001BE24 00028BB4 83 BF 00 00 */ lwz r29, 0x0(r31) +/* 0001BE28 00028BB8 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0001BE2C 00028BBC 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0001BE30 00028BC0 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001BE34 00028BC4 83 9F 00 08 */ lwz r28, 0x8(r31) +/* 0001BE38 00028BC8 7C 08 03 A6 */ mtlr r0 +/* 0001BE3C 00028BCC 83 7F 00 04 */ lwz r27, 0x4(r31) +/* 0001BE40 00028BD0 4E 80 00 21 */ blrl +/* 0001BE44 00028BD4 93 DF 00 04 */ stw r30, 0x4(r31) +/* 0001BE48 00028BD8 7C 1D 18 00 */ cmpw r29, r3 +/* 0001BE4C 00028BDC 90 7F 00 00 */ stw r3, 0x0(r31) +/* 0001BE50 00028BE0 41 82 BE A8 */ beq .L_00017CF8 +/* 0001BE54 00028BE4 3B C0 00 00 */ li r30, 0x0 +/* 0001BE58 00028BE8 93 3F 00 08 */ stw r25, 0x8(r31) +/* 0001BE5C 00028BEC 7C 1E E0 00 */ cmpw r30, r28 +/* 0001BE60 00028BF0 2E 1D 00 00 */ cmpwi cr4, r29, 0x0 +/* 0001BE64 00028BF4 40 80 BE 84 */ bge .L_00017CE8 +/* 0001BE68 00028BF8 57 C4 10 3A */ slwi r4, r30, 2 +/* 0001BE6C 00028BFC 7F E3 FB 78 */ mr r3, r31 +/* 0001BE70 00028C00 7C 9D 22 14 */ add r4, r29, r4 +/* 0001BE74 00028C04 3B DE 00 01 */ addi r30, r30, 0x1 +/* 0001BE78 00028C08 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZPQ28CameraAI8Directori16RCPQ28CameraAI8Director +/* 0001BE7C 00028C0C 7C 1E E0 00 */ cmpw r30, r28 +/* 0001BE80 00028C10 41 80 BE 68 */ blt .L_00017CE8 +/* 0001BE84 00028C14 41 92 BE A8 */ beq cr4, .L_00017D2C +/* 0001BE88 00028C18 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001BE8C 00028C1C 7F A4 EB 78 */ mr r4, r29 +/* 0001BE90 00028C20 7F 65 DB 78 */ mr r5, r27 +.L_0001BE94: +/* 0001BE94 00028C24 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0001BE98 00028C28 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0001BE9C 00028C2C 7C 7F 1A 14 */ add r3, r31, r3 +.L_0001BEA0: +/* 0001BEA0 00028C30 7C 08 03 A6 */ mtlr r0 +/* 0001BEA4 00028C34 4E 80 00 21 */ blrl +/* 0001BEA8 00028C38 80 9F 00 08 */ lwz r4, 0x8(r31) +/* 0001BEAC 00028C3C 80 1F 00 04 */ lwz r0, 0x4(r31) +/* 0001BEB0 00028C40 7C 04 00 40 */ cmplw r4, r0 +/* 0001BEB4 00028C44 41 80 BF 90 */ blt .L_00017E44 +/* 0001BEB8 00028C48 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001BEBC 00028C4C 38 84 00 01 */ addi r4, r4, 0x1 +/* 0001BEC0 00028C50 80 09 00 24 */ lwz r0, 0x24(r9) +/* 0001BEC4 00028C54 A8 69 00 20 */ lha r3, 0x20(r9) +/* 0001BEC8 00028C58 7C 08 03 A6 */ mtlr r0 +/* 0001BECC 00028C5C 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001BED0 00028C60 4E 80 00 21 */ blrl +/* 0001BED4 00028C64 80 1F 00 04 */ lwz r0, 0x4(r31) +/* 0001BED8 00028C68 7C 7E 1B 78 */ mr r30, r3 +/* 0001BEDC 00028C6C 7C 1E 00 40 */ cmplw r30, r0 +/* 0001BEE0 00028C70 40 81 BF 90 */ ble .L_00017E70 +/* 0001BEE4 00028C74 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001BEE8 00028C78 7F C4 F3 78 */ mr r4, r30 +/* 0001BEEC 00028C7C 80 09 00 34 */ lwz r0, 0x34(r9) +/* 0001BEF0 00028C80 A8 69 00 30 */ lha r3, 0x30(r9) +/* 0001BEF4 00028C84 7C 08 03 A6 */ mtlr r0 +/* 0001BEF8 00028C88 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001BEFC 00028C8C 4E 80 00 21 */ blrl +/* 0001BF00 00028C90 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001BF04 00028C94 7F C4 F3 78 */ mr r4, r30 +/* 0001BF08 00028C98 38 A0 00 10 */ li r5, 0x10 +/* 0001BF0C 00028C9C 83 BF 00 00 */ lwz r29, 0x0(r31) +/* 0001BF10 00028CA0 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0001BF14 00028CA4 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0001BF18 00028CA8 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001BF1C 00028CAC 83 9F 00 08 */ lwz r28, 0x8(r31) +/* 0001BF20 00028CB0 7C 08 03 A6 */ mtlr r0 +/* 0001BF24 00028CB4 83 7F 00 04 */ lwz r27, 0x4(r31) +/* 0001BF28 00028CB8 4E 80 00 21 */ blrl +/* 0001BF2C 00028CBC 93 DF 00 04 */ stw r30, 0x4(r31) +/* 0001BF30 00028CC0 7C 1D 18 00 */ cmpw r29, r3 +/* 0001BF34 00028CC4 90 7F 00 00 */ stw r3, 0x0(r31) +/* 0001BF38 00028CC8 41 82 BF 90 */ beq .L_00017EC8 +/* 0001BF3C 00028CCC 3B C0 00 00 */ li r30, 0x0 +/* 0001BF40 00028CD0 93 3F 00 08 */ stw r25, 0x8(r31) +/* 0001BF44 00028CD4 7C 1E E0 00 */ cmpw r30, r28 +/* 0001BF48 00028CD8 2E 1D 00 00 */ cmpwi cr4, r29, 0x0 +/* 0001BF4C 00028CDC 40 80 BF 6C */ bge .L_00017EB8 +/* 0001BF50 00028CE0 57 C4 10 3A */ slwi r4, r30, 2 +/* 0001BF54 00028CE4 7F E3 FB 78 */ mr r3, r31 +/* 0001BF58 00028CE8 7C 9D 22 14 */ add r4, r29, r4 +/* 0001BF5C 00028CEC 3B DE 00 01 */ addi r30, r30, 0x1 +/* 0001BF60 00028CF0 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZPQ28CameraAI8Directori16RCPQ28CameraAI8Director +/* 0001BF64 00028CF4 7C 1E E0 00 */ cmpw r30, r28 +/* 0001BF68 00028CF8 41 80 BF 50 */ blt .L_00017EB8 +/* 0001BF6C 00028CFC 41 92 BF 90 */ beq cr4, .L_00017EFC +/* 0001BF70 00028D00 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001BF74 00028D04 7F A4 EB 78 */ mr r4, r29 +/* 0001BF78 00028D08 7F 65 DB 78 */ mr r5, r27 +/* 0001BF7C 00028D0C A8 69 00 18 */ lha r3, 0x18(r9) +/* 0001BF80 00028D10 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0001BF84 00028D14 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001BF88 00028D18 7C 08 03 A6 */ mtlr r0 +/* 0001BF8C 00028D1C 4E 80 00 21 */ blrl +/* 0001BF90 00028D20 81 3F 00 08 */ lwz r9, 0x8(r31) +/* 0001BF94 00028D24 39 29 00 01 */ addi r9, r9, 0x1 +/* 0001BF98 00028D28 91 3F 00 08 */ stw r9, 0x8(r31) +/* 0001BF9C 00028D2C 48 01 BD C0 */ b .text+0x1BDC0 +/* 0001BFA0 00028D30 81 3F 00 04 */ lwz r9, 0x4(r31) +/* 0001BFA4 00028D34 7C 09 D0 40 */ cmplw r9, r26 +/* 0001BFA8 00028D38 41 80 BF C0 */ blt .L_00017F68 +/* 0001BFAC 00028D3C 80 1F 00 00 */ lwz r0, 0x0(r31) +/* 0001BFB0 00028D40 7C 00 00 D0 */ neg r0, r0 +/* 0001BFB4 00028D44 7C 00 16 70 */ srawi r0, r0, 2 +/* 0001BFB8 00028D48 7C 00 48 40 */ cmplw r0, r9 +/* 0001BFBC 00028D4C 41 80 C0 D8 */ blt .L_00018094 +/* 0001BFC0 00028D50 39 60 00 00 */ li r11, 0x0 +/* 0001BFC4 00028D54 7C 0B 20 00 */ cmpw r11, r4 +/* 0001BFC8 00028D58 40 80 BF E4 */ bge .L_00017FAC +/* 0001BFCC 00028D5C 81 3F 00 08 */ lwz r9, 0x8(r31) +/* 0001BFD0 00028D60 39 6B 00 01 */ addi r11, r11, 0x1 +/* 0001BFD4 00028D64 39 29 FF FF */ subi r9, r9, 0x1 +/* 0001BFD8 00028D68 7C 0B 20 00 */ cmpw r11, r4 +/* 0001BFDC 00028D6C 41 80 BF D0 */ blt .L_00017FAC +/* 0001BFE0 00028D70 91 3F 00 08 */ stw r9, 0x8(r31) +/* 0001BFE4 00028D74 80 9F 00 00 */ lwz r4, 0x0(r31) +/* 0001BFE8 00028D78 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0001BFEC 00028D7C 41 82 C0 1C */ beq .L_00018008 +/* 0001BFF0 00028D80 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001BFF4 00028D84 80 BF 00 04 */ lwz r5, 0x4(r31) +/* 0001BFF8 00028D88 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0001BFFC 00028D8C A8 69 00 18 */ lha r3, 0x18(r9) +/* 0001C000 00028D90 7C 08 03 A6 */ mtlr r0 +/* 0001C004 00028D94 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001C008 00028D98 4E 80 00 21 */ blrl +/* 0001C00C 00028D9C 38 00 00 00 */ li r0, 0x0 +/* 0001C010 00028DA0 90 1F 00 08 */ stw r0, 0x8(r31) +/* 0001C014 00028DA4 90 1F 00 00 */ stw r0, 0x0(r31) +/* 0001C018 00028DA8 90 1F 00 04 */ stw r0, 0x4(r31) +/* 0001C01C 00028DAC 80 1F 00 04 */ lwz r0, 0x4(r31) +/* 0001C020 00028DB0 7C 1A 00 40 */ cmplw r26, r0 +/* 0001C024 00028DB4 40 81 C0 D8 */ ble .L_000180FC +/* 0001C028 00028DB8 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001C02C 00028DBC 7F 44 D3 78 */ mr r4, r26 +.L_0001C030: +/* 0001C030 00028DC0 80 09 00 34 */ lwz r0, 0x34(r9) +/* 0001C034 00028DC4 A8 69 00 30 */ lha r3, 0x30(r9) +/* 0001C038 00028DC8 7C 08 03 A6 */ mtlr r0 +/* 0001C03C 00028DCC 7C 7F 1A 14 */ add r3, r31, r3 +.L_0001C040: +/* 0001C040 00028DD0 4E 80 00 21 */ blrl +/* 0001C044 00028DD4 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001C048 00028DD8 7F 44 D3 78 */ mr r4, r26 +/* 0001C04C 00028DDC 38 A0 00 10 */ li r5, 0x10 +/* 0001C050 00028DE0 83 BF 00 00 */ lwz r29, 0x0(r31) +/* 0001C054 00028DE4 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0001C058 00028DE8 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0001C05C 00028DEC 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001C060 00028DF0 83 9F 00 08 */ lwz r28, 0x8(r31) +/* 0001C064 00028DF4 7C 08 03 A6 */ mtlr r0 +/* 0001C068 00028DF8 83 7F 00 04 */ lwz r27, 0x4(r31) +/* 0001C06C 00028DFC 4E 80 00 21 */ blrl +/* 0001C070 00028E00 93 5F 00 04 */ stw r26, 0x4(r31) +/* 0001C074 00028E04 7C 1D 18 00 */ cmpw r29, r3 +/* 0001C078 00028E08 90 7F 00 00 */ stw r3, 0x0(r31) +/* 0001C07C 00028E0C 41 82 C0 D8 */ beq .L_00018154 +/* 0001C080 00028E10 38 00 00 00 */ li r0, 0x0 +/* 0001C084 00028E14 3B C0 00 00 */ li r30, 0x0 +/* 0001C088 00028E18 90 1F 00 08 */ stw r0, 0x8(r31) +/* 0001C08C 00028E1C 7C 1E E0 00 */ cmpw r30, r28 +/* 0001C090 00028E20 2E 1D 00 00 */ cmpwi cr4, r29, 0x0 +/* 0001C094 00028E24 40 80 C0 B4 */ bge .L_00018148 +/* 0001C098 00028E28 57 C4 10 3A */ slwi r4, r30, 2 +/* 0001C09C 00028E2C 7F E3 FB 78 */ mr r3, r31 +/* 0001C0A0 00028E30 7C 9D 22 14 */ add r4, r29, r4 +/* 0001C0A4 00028E34 3B DE 00 01 */ addi r30, r30, 0x1 +/* 0001C0A8 00028E38 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZPQ28CameraAI8Directori16RCPQ28CameraAI8Director +/* 0001C0AC 00028E3C 7C 1E E0 00 */ cmpw r30, r28 +/* 0001C0B0 00028E40 41 80 C0 98 */ blt .L_00018148 +.L_0001C0B4: +/* 0001C0B4 00028E44 41 92 C0 D8 */ beq cr4, .L_0001818C +/* 0001C0B8 00028E48 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001C0BC 00028E4C 7F A4 EB 78 */ mr r4, r29 +/* 0001C0C0 00028E50 7F 65 DB 78 */ mr r5, r27 +/* 0001C0C4 00028E54 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0001C0C8 00028E58 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0001C0CC 00028E5C 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001C0D0 00028E60 7C 08 03 A6 */ mtlr r0 +/* 0001C0D4 00028E64 4E 80 00 21 */ blrl +/* 0001C0D8 00028E68 80 1F 00 08 */ lwz r0, 0x8(r31) +/* 0001C0DC 00028E6C 7E FC BB 78 */ mr r28, r23 +/* 0001C0E0 00028E70 81 7F 00 00 */ lwz r11, 0x0(r31) +/* 0001C0E4 00028E74 54 00 10 3A */ slwi r0, r0, 2 +/* 0001C0E8 00028E78 7D 2B 02 14 */ add r9, r11, r0 +/* 0001C0EC 00028E7C 48 01 C1 00 */ b .text+0x1C100 +/* 0001C0F0 00028E80 80 1C 00 00 */ lwz r0, 0x0(r28) +/* 0001C0F4 00028E84 3B 9C 00 04 */ addi r28, r28, 0x4 +/* 0001C0F8 00028E88 90 0B 00 00 */ stw r0, 0x0(r11) +/* 0001C0FC 00028E8C 39 6B 00 04 */ addi r11, r11, 0x4 +/* 0001C100 00028E90 7C 0B 48 00 */ cmpw r11, r9 +/* 0001C104 00028E94 41 82 C1 10 */ beq .L_00018214 +/* 0001C108 00028E98 7C 1C C0 00 */ cmpw r28, r24 +/* 0001C10C 00028E9C 40 82 C0 F0 */ bne .L_000181FC +/* 0001C110 00028EA0 81 5F 00 00 */ lwz r10, 0x0(r31) +/* 0001C114 00028EA4 7F 9C C0 00 */ cmpw cr7, r28, r24 +/* 0001C118 00028EA8 81 3F 00 08 */ lwz r9, 0x8(r31) +/* 0001C11C 00028EAC 55 20 10 3A */ slwi r0, r9, 2 +/* 0001C120 00028EB0 7C 0A 02 14 */ add r0, r10, r0 +/* 0001C124 00028EB4 7C 00 58 00 */ cmpw r0, r11 +/* 0001C128 00028EB8 41 82 C1 38 */ beq .L_00018260 +/* 0001C12C 00028EBC 38 09 FF FF */ subi r0, r9, 0x1 +/* 0001C130 00028EC0 90 1F 00 08 */ stw r0, 0x8(r31) +/* 0001C134 00028EC4 48 01 C1 18 */ b .text+0x1C118 +/* 0001C138 00028EC8 41 9E C2 64 */ beq cr7, .L_0001839C +/* 0001C13C 00028ECC 3A E0 00 00 */ li r23, 0x0 +/* 0001C140 00028ED0 80 9F 00 08 */ lwz r4, 0x8(r31) +/* 0001C144 00028ED4 3B 3C 00 04 */ addi r25, r28, 0x4 +/* 0001C148 00028ED8 80 1F 00 04 */ lwz r0, 0x4(r31) +/* 0001C14C 00028EDC 7C 04 00 40 */ cmplw r4, r0 +/* 0001C150 00028EE0 41 80 C2 2C */ blt .L_0001837C +/* 0001C154 00028EE4 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001C158 00028EE8 38 84 00 01 */ addi r4, r4, 0x1 +/* 0001C15C 00028EEC 80 09 00 24 */ lwz r0, 0x24(r9) +/* 0001C160 00028EF0 A8 69 00 20 */ lha r3, 0x20(r9) +/* 0001C164 00028EF4 7C 08 03 A6 */ mtlr r0 +/* 0001C168 00028EF8 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001C16C 00028EFC 4E 80 00 21 */ blrl +/* 0001C170 00028F00 80 1F 00 04 */ lwz r0, 0x4(r31) +/* 0001C174 00028F04 7C 7E 1B 78 */ mr r30, r3 +/* 0001C178 00028F08 7C 1E 00 40 */ cmplw r30, r0 +/* 0001C17C 00028F0C 40 81 C2 2C */ ble .L_000183A8 +/* 0001C180 00028F10 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001C184 00028F14 7F C4 F3 78 */ mr r4, r30 +/* 0001C188 00028F18 80 09 00 34 */ lwz r0, 0x34(r9) +/* 0001C18C 00028F1C A8 69 00 30 */ lha r3, 0x30(r9) +.L_0001C190: +/* 0001C190 00028F20 7C 08 03 A6 */ mtlr r0 +/* 0001C194 00028F24 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001C198 00028F28 4E 80 00 21 */ blrl +/* 0001C19C 00028F2C 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001C1A0 00028F30 7F C4 F3 78 */ mr r4, r30 +/* 0001C1A4 00028F34 38 A0 00 10 */ li r5, 0x10 +/* 0001C1A8 00028F38 83 BF 00 00 */ lwz r29, 0x0(r31) +/* 0001C1AC 00028F3C A8 69 00 10 */ lha r3, 0x10(r9) +/* 0001C1B0 00028F40 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0001C1B4 00028F44 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001C1B8 00028F48 83 7F 00 08 */ lwz r27, 0x8(r31) +/* 0001C1BC 00028F4C 7C 08 03 A6 */ mtlr r0 +/* 0001C1C0 00028F50 83 5F 00 04 */ lwz r26, 0x4(r31) +/* 0001C1C4 00028F54 4E 80 00 21 */ blrl +/* 0001C1C8 00028F58 93 DF 00 04 */ stw r30, 0x4(r31) +/* 0001C1CC 00028F5C 7C 1D 18 00 */ cmpw r29, r3 +/* 0001C1D0 00028F60 90 7F 00 00 */ stw r3, 0x0(r31) +/* 0001C1D4 00028F64 41 82 C2 2C */ beq .L_00018400 +/* 0001C1D8 00028F68 3B C0 00 00 */ li r30, 0x0 +/* 0001C1DC 00028F6C 92 FF 00 08 */ stw r23, 0x8(r31) +/* 0001C1E0 00028F70 7C 1E D8 00 */ cmpw r30, r27 +/* 0001C1E4 00028F74 2E 1D 00 00 */ cmpwi cr4, r29, 0x0 +/* 0001C1E8 00028F78 40 80 C2 08 */ bge .L_000183F0 +.L_0001C1EC: +/* 0001C1EC 00028F7C 57 C4 10 3A */ slwi r4, r30, 2 +/* 0001C1F0 00028F80 7F E3 FB 78 */ mr r3, r31 +/* 0001C1F4 00028F84 7C 9D 22 14 */ add r4, r29, r4 +/* 0001C1F8 00028F88 3B DE 00 01 */ addi r30, r30, 0x1 +/* 0001C1FC 00028F8C 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZPQ28CameraAI8Directori16RCPQ28CameraAI8Director +/* 0001C200 00028F90 7C 1E D8 00 */ cmpw r30, r27 +/* 0001C204 00028F94 41 80 C1 EC */ blt .L_000183F0 +/* 0001C208 00028F98 41 92 C2 2C */ beq cr4, .L_00018434 +/* 0001C20C 00028F9C 81 3F 00 0C */ lwz r9, 0xc(r31) +.L_0001C210: +/* 0001C210 00028FA0 7F A4 EB 78 */ mr r4, r29 +/* 0001C214 00028FA4 7F 45 D3 78 */ mr r5, r26 +/* 0001C218 00028FA8 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0001C21C 00028FAC 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0001C220 00028FB0 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001C224 00028FB4 7C 08 03 A6 */ mtlr r0 +/* 0001C228 00028FB8 4E 80 00 21 */ blrl +/* 0001C22C 00028FBC 81 3F 00 08 */ lwz r9, 0x8(r31) +/* 0001C230 00028FC0 81 7F 00 00 */ lwz r11, 0x0(r31) +/* 0001C234 00028FC4 55 29 10 3A */ slwi r9, r9, 2 +/* 0001C238 00028FC8 7C 09 5A 14 */ add r0, r9, r11 +/* 0001C23C 00028FCC 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0001C240 00028FD0 41 82 C2 4C */ beq .L_0001848C +/* 0001C244 00028FD4 80 1C 00 00 */ lwz r0, 0x0(r28) +/* 0001C248 00028FD8 7C 09 59 2E */ stwx r0, r9, r11 +/* 0001C24C 00028FDC 81 3F 00 08 */ lwz r9, 0x8(r31) +/* 0001C250 00028FE0 7F 3C CB 78 */ mr r28, r25 +/* 0001C254 00028FE4 7C 1C C0 00 */ cmpw r28, r24 +/* 0001C258 00028FE8 39 29 00 01 */ addi r9, r9, 0x1 +/* 0001C25C 00028FEC 91 3F 00 08 */ stw r9, 0x8(r31) +/* 0001C260 00028FF0 40 82 C1 40 */ bne .L_000183A0 +/* 0001C264 00028FF4 3D 20 00 00 */ lis r9, _vt.Q43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4List@ha +/* 0001C268 00028FF8 7F E3 FB 78 */ mr r3, r31 +/* 0001C26C 00028FFC 39 29 00 00 */ addi r9, r9, _vt.Q43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4List@l +/* 0001C270 00029000 91 3F 00 0C */ stw r9, 0xc(r31) +/* 0001C274 00029004 80 01 00 34 */ lwz r0, 0x34(r1) +/* 0001C278 00029008 81 81 00 08 */ lwz r12, 0x8(r1) +/* 0001C27C 0002900C 7C 08 03 A6 */ mtlr r0 +/* 0001C280 00029010 BA E1 00 0C */ lmw r23, 0xc(r1) +/* 0001C284 00029014 7D 80 81 20 */ mtcrf 8, r12 +/* 0001C288 00029018 38 21 00 30 */ addi r1, r1, 0x30 +/* 0001C28C 0002901C 4E 80 00 20 */ blr +.endfn __Q43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4ListRCQ43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4List + +# .text:0x1C290 | size: 0x30 +.fn __nw__Q28CameraAI8DirectorUi, global +/* 0001C290 00029020 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0001C294 00029024 7C 08 02 A6 */ mflr r0 +.L_0001C298: +/* 0001C298 00029028 90 01 00 0C */ stw r0, 0xc(r1) +/* 0001C29C 0002902C 7C 64 1B 78 */ mr r4, r3 +/* 0001C2A0 00029030 38 A0 00 00 */ li r5, 0x0 +/* 0001C2A4 00029034 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0001C2A8 00029038 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0001C2AC 0002903C 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 0001C2B0 00029040 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0001C2B4 00029044 7C 08 03 A6 */ mtlr r0 +.L_0001C2B8: +/* 0001C2B8 00029048 38 21 00 08 */ addi r1, r1, 0x8 +/* 0001C2BC 0002904C 4E 80 00 20 */ blr +.endfn __nw__Q28CameraAI8DirectorUi + +# .text:0x1C2C0 | size: 0x38 +.fn __dl__Q28CameraAI8DirectorPvUi, global +/* 0001C2C0 00029050 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0001C2C4 00029054 7C 08 02 A6 */ mflr r0 +/* 0001C2C8 00029058 90 01 00 0C */ stw r0, 0xc(r1) +/* 0001C2CC 0002905C 7C 85 23 78 */ mr r5, r4 +.L_0001C2D0: +/* 0001C2D0 00029060 7C 64 1B 79 */ mr. r4, r3 +/* 0001C2D4 00029064 41 82 C2 E8 */ beq .L_000185BC +/* 0001C2D8 00029068 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0001C2DC 0002906C 38 C0 00 00 */ li r6, 0x0 +/* 0001C2E0 00029070 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0001C2E4 00029074 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 0001C2E8 00029078 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0001C2EC 0002907C 7C 08 03 A6 */ mtlr r0 +/* 0001C2F0 00029080 38 21 00 08 */ addi r1, r1, 0x8 +/* 0001C2F4 00029084 4E 80 00 20 */ blr +.endfn __dl__Q28CameraAI8DirectorPvUi + +# .text:0x1C2F8 | size: 0x30 +.fn __nw__Q28CameraAI8DirectorUiPCc, global +/* 0001C2F8 00029088 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0001C2FC 0002908C 7C 08 02 A6 */ mflr r0 +/* 0001C300 00029090 90 01 00 0C */ stw r0, 0xc(r1) +/* 0001C304 00029094 7C 85 23 78 */ mr r5, r4 +/* 0001C308 00029098 3D 20 00 00 */ lis r9, gFastMem@ha +/* 0001C30C 0002909C 7C 64 1B 78 */ mr r4, r3 +/* 0001C310 000290A0 38 69 00 00 */ addi r3, r9, gFastMem@l +/* 0001C314 000290A4 48 00 00 01 */ bl Alloc__7FastMemUiPCc +/* 0001C318 000290A8 80 01 00 0C */ lwz r0, 0xc(r1) +.L_0001C31C: +/* 0001C31C 000290AC 7C 08 03 A6 */ mtlr r0 +/* 0001C320 000290B0 38 21 00 08 */ addi r1, r1, 0x8 +/* 0001C324 000290B4 4E 80 00 20 */ blr +.endfn __nw__Q28CameraAI8DirectorUiPCc + +# .text:0x1C328 | size: 0x38 +.fn __dl__Q28CameraAI8DirectorPvPCc, global +/* 0001C328 000290B8 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0001C32C 000290BC 7C 08 02 A6 */ mflr r0 +/* 0001C330 000290C0 90 01 00 0C */ stw r0, 0xc(r1) +/* 0001C334 000290C4 7C 86 23 78 */ mr r6, r4 +/* 0001C338 000290C8 7C 64 1B 79 */ mr. r4, r3 +/* 0001C33C 000290CC 41 82 C3 50 */ beq .L_0001868C +/* 0001C340 000290D0 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0001C344 000290D4 38 A0 00 00 */ li r5, 0x0 +/* 0001C348 000290D8 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0001C34C 000290DC 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 0001C350 000290E0 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0001C354 000290E4 7C 08 03 A6 */ mtlr r0 +/* 0001C358 000290E8 38 21 00 08 */ addi r1, r1, 0x8 +/* 0001C35C 000290EC 4E 80 00 20 */ blr +.endfn __dl__Q28CameraAI8DirectorPvPCc + +# .text:0x1C360 | size: 0x3C +.fn __dl__Q28CameraAI8DirectorPvUiPCc, global +/* 0001C360 000290F0 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0001C364 000290F4 7C 08 02 A6 */ mflr r0 +/* 0001C368 000290F8 90 01 00 0C */ stw r0, 0xc(r1) +/* 0001C36C 000290FC 7C 80 23 78 */ mr r0, r4 +/* 0001C370 00029100 7C A6 2B 78 */ mr r6, r5 +/* 0001C374 00029104 7C 64 1B 79 */ mr. r4, r3 +/* 0001C378 00029108 41 82 C3 8C */ beq .L_00018704 +/* 0001C37C 0002910C 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0001C380 00029110 7C 05 03 78 */ mr r5, r0 +/* 0001C384 00029114 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0001C388 00029118 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 0001C38C 0002911C 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0001C390 00029120 7C 08 03 A6 */ mtlr r0 +/* 0001C394 00029124 38 21 00 08 */ addi r1, r1, 0x8 +/* 0001C398 00029128 4E 80 00 20 */ blr +.endfn __dl__Q28CameraAI8DirectorPvUiPCc + +# .text:0x1C39C | size: 0x8 +.fn GetViewID__CQ28CameraAI8Director, global +/* 0001C39C 0002912C 80 63 00 04 */ lwz r3, 0x4(r3) +/* 0001C3A0 00029130 4E 80 00 20 */ blr +.endfn GetViewID__CQ28CameraAI8Director + +# .text:0x1C3A4 | size: 0x8 +# CameraAI::Director::GetAction +.fn GetAction__Q28CameraAI8Director, global +/* 0001C3A4 00029134 80 63 00 18 */ lwz r3, 0x18(r3) +/* 0001C3A8 00029138 4E 80 00 20 */ blr +.endfn GetAction__Q28CameraAI8Director + +# .text:0x1C3AC | size: 0x1C +# CameraAI::Director::IsJumping +.fn IsJumping__Q28CameraAI8Director, global +/* 0001C3AC 0002913C 3D 20 00 00 */ lis r9, .rodata+0x1960@ha +/* 0001C3B0 00029140 C1 A3 02 B8 */ lfs f13, 0x2b8(r3) +/* 0001C3B4 00029144 C0 09 19 60 */ lfs f0, .rodata+0x1960@l(r9) +/* 0001C3B8 00029148 FF 8D 00 00 */ fcmpu cr7, f13, f0 +/* 0001C3BC 0002914C 7C 60 00 26 */ mfcr r3 +/* 0001C3C0 00029150 54 63 F7 FE */ extrwi r3, r3, 1, 29 +/* 0001C3C4 00029154 4E 80 00 20 */ blr +.endfn IsJumping__Q28CameraAI8Director + +# .text:0x1C3C8 | size: 0x8 +# CameraAI::Director::IsCinematicMomement +.fn IsCinematicMomement__Q28CameraAI8Director, global +/* 0001C3C8 00029158 80 63 02 BC */ lwz r3, 0x2bc(r3) +/* 0001C3CC 0002915C 4E 80 00 20 */ blr +.endfn IsCinematicMomement__Q28CameraAI8Director + +# .text:0x1C3D0 | size: 0x8 +# CameraAI::Director::GetCinematicSlowdown +.fn GetCinematicSlowdown__Q28CameraAI8Director, global +/* 0001C3D0 00029160 C0 23 02 C0 */ lfs f1, 0x2c0(r3) +/* 0001C3D4 00029164 4E 80 00 20 */ blr +.endfn GetCinematicSlowdown__Q28CameraAI8Director + +# .text:0x1C3D8 | size: 0x8 +.fn SetCinematicSlowdown__Q28CameraAI8Directorf, global +/* 0001C3D8 00029168 D0 23 02 C0 */ stfs f1, 0x2c0(r3) +/* 0001C3DC 0002916C 4E 80 00 20 */ blr +.endfn SetCinematicSlowdown__Q28CameraAI8Directorf + +# .text:0x1C3E0 | size: 0x2C +.fn SetMinMax__9TableBaseff, weak +/* 0001C3E0 00029170 94 21 FF F8 */ stwu r1, -0x8(r1) +.L_0001C3E4: +/* 0001C3E4 00029174 7C 08 02 A6 */ mflr r0 +/* 0001C3E8 00029178 90 01 00 0C */ stw r0, 0xc(r1) +/* 0001C3EC 0002917C 7C 69 1B 78 */ mr r9, r3 +/* 0001C3F0 00029180 D0 29 00 04 */ stfs f1, 0x4(r9) +/* 0001C3F4 00029184 D0 49 00 08 */ stfs f2, 0x8(r9) +/* 0001C3F8 00029188 48 00 00 01 */ bl CalcIndexMultiplier__9TableBase +/* 0001C3FC 0002918C 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0001C400 00029190 7C 08 03 A6 */ mtlr r0 +/* 0001C404 00029194 38 21 00 08 */ addi r1, r1, 0x8 +/* 0001C408 00029198 4E 80 00 20 */ blr +.endfn SetMinMax__9TableBaseff + +# .text:0x1C40C | size: 0x64 +# MGamePlayMoment::_GetKind +.fn _GetKind__15MGamePlayMoment, weak +/* 0001C40C 0002919C 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 0001C410 000291A0 7C 08 02 A6 */ mflr r0 +/* 0001C414 000291A4 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 0001C418 000291A8 90 01 00 14 */ stw r0, 0x14(r1) +/* 0001C41C 000291AC 3F C0 00 00 */ lis r30, _.tmp_2.9590@ha +/* 0001C420 000291B0 7C 7F 1B 78 */ mr r31, r3 +/* 0001C424 000291B4 80 1E 00 00 */ lwz r0, _.tmp_2.9590@l(r30) +/* 0001C428 000291B8 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0001C42C 000291BC 40 82 C4 4C */ bne .L_00018878 +/* 0001C430 000291C0 3C 60 00 00 */ lis r3, .rodata+0x6CC@ha +/* 0001C434 000291C4 38 63 06 CC */ addi r3, r3, .rodata+0x6CC@l +/* 0001C438 000291C8 48 00 00 01 */ bl stringhash32__FPCc +/* 0001C43C 000291CC 38 00 00 01 */ li r0, 0x1 +/* 0001C440 000291D0 3D 20 00 00 */ lis r9, k.9589@ha +/* 0001C444 000291D4 90 69 00 00 */ stw r3, k.9589@l(r9) +/* 0001C448 000291D8 90 1E 00 00 */ stw r0, _.tmp_2.9590@l(r30) +/* 0001C44C 000291DC 3D 20 00 00 */ lis r9, k.9589@ha +.L_0001C450: +/* 0001C450 000291E0 7F E3 FB 78 */ mr r3, r31 +/* 0001C454 000291E4 80 09 00 00 */ lwz r0, k.9589@l(r9) +/* 0001C458 000291E8 90 1F 00 00 */ stw r0, 0x0(r31) +.L_0001C45C: +/* 0001C45C 000291EC 80 01 00 14 */ lwz r0, 0x14(r1) +/* 0001C460 000291F0 7C 08 03 A6 */ mtlr r0 +/* 0001C464 000291F4 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 0001C468 000291F8 38 21 00 10 */ addi r1, r1, 0x10 +/* 0001C46C 000291FC 4E 80 00 20 */ blr +.endfn _GetKind__15MGamePlayMoment + +# .text:0x1C470 | size: 0x64 +# MICECameraFinished::_GetKind +.fn _GetKind__18MICECameraFinished, weak +/* 0001C470 00029200 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 0001C474 00029204 7C 08 02 A6 */ mflr r0 +/* 0001C478 00029208 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 0001C47C 0002920C 90 01 00 14 */ stw r0, 0x14(r1) +/* 0001C480 00029210 3F C0 00 00 */ lis r30, _.tmp_3.9634@ha +/* 0001C484 00029214 7C 7F 1B 78 */ mr r31, r3 +/* 0001C488 00029218 80 1E 00 00 */ lwz r0, _.tmp_3.9634@l(r30) +/* 0001C48C 0002921C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0001C490 00029220 40 82 C4 B0 */ bne .L_00018940 +/* 0001C494 00029224 3C 60 00 00 */ lis r3, .rodata+0x6DC@ha +/* 0001C498 00029228 38 63 06 DC */ addi r3, r3, .rodata+0x6DC@l +/* 0001C49C 0002922C 48 00 00 01 */ bl stringhash32__FPCc +/* 0001C4A0 00029230 38 00 00 01 */ li r0, 0x1 +/* 0001C4A4 00029234 3D 20 00 00 */ lis r9, k.9633@ha +.L_0001C4A8: +/* 0001C4A8 00029238 90 69 00 00 */ stw r3, k.9633@l(r9) +/* 0001C4AC 0002923C 90 1E 00 00 */ stw r0, _.tmp_3.9634@l(r30) +/* 0001C4B0 00029240 3D 20 00 00 */ lis r9, k.9633@ha +/* 0001C4B4 00029244 7F E3 FB 78 */ mr r3, r31 +/* 0001C4B8 00029248 80 09 00 00 */ lwz r0, k.9633@l(r9) +/* 0001C4BC 0002924C 90 1F 00 00 */ stw r0, 0x0(r31) +/* 0001C4C0 00029250 80 01 00 14 */ lwz r0, 0x14(r1) +/* 0001C4C4 00029254 7C 08 03 A6 */ mtlr r0 +/* 0001C4C8 00029258 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 0001C4CC 0002925C 38 21 00 10 */ addi r1, r1, 0x10 +/* 0001C4D0 00029260 4E 80 00 20 */ blr +.endfn _GetKind__18MICECameraFinished + +# .text:0x1C4D4 | size: 0x64 +# MMiscSound::_GetKind +.fn _GetKind__10MMiscSound, weak +/* 0001C4D4 00029264 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 0001C4D8 00029268 7C 08 02 A6 */ mflr r0 +/* 0001C4DC 0002926C BF C1 00 08 */ stmw r30, 0x8(r1) +/* 0001C4E0 00029270 90 01 00 14 */ stw r0, 0x14(r1) +/* 0001C4E4 00029274 3F C0 00 00 */ lis r30, _.tmp_4.9648@ha +/* 0001C4E8 00029278 7C 7F 1B 78 */ mr r31, r3 +.L_0001C4EC: +/* 0001C4EC 0002927C 80 1E 00 00 */ lwz r0, _.tmp_4.9648@l(r30) +/* 0001C4F0 00029280 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0001C4F4 00029284 40 82 C5 14 */ bne .L_00018A08 +/* 0001C4F8 00029288 3C 60 00 00 */ lis r3, .rodata+0x6F0@ha +/* 0001C4FC 0002928C 38 63 06 F0 */ addi r3, r3, .rodata+0x6F0@l +/* 0001C500 00029290 48 00 00 01 */ bl stringhash32__FPCc +/* 0001C504 00029294 38 00 00 01 */ li r0, 0x1 +/* 0001C508 00029298 3D 20 00 00 */ lis r9, k.9647@ha +/* 0001C50C 0002929C 90 69 00 00 */ stw r3, k.9647@l(r9) +/* 0001C510 000292A0 90 1E 00 00 */ stw r0, _.tmp_4.9648@l(r30) +/* 0001C514 000292A4 3D 20 00 00 */ lis r9, k.9647@ha +/* 0001C518 000292A8 7F E3 FB 78 */ mr r3, r31 +/* 0001C51C 000292AC 80 09 00 00 */ lwz r0, k.9647@l(r9) +/* 0001C520 000292B0 90 1F 00 00 */ stw r0, 0x0(r31) +/* 0001C524 000292B4 80 01 00 14 */ lwz r0, 0x14(r1) +/* 0001C528 000292B8 7C 08 03 A6 */ mtlr r0 +/* 0001C52C 000292BC BB C1 00 08 */ lmw r30, 0x8(r1) +/* 0001C530 000292C0 38 21 00 10 */ addi r1, r1, 0x10 +.L_0001C534: +/* 0001C534 000292C4 4E 80 00 20 */ blr +.endfn _GetKind__10MMiscSound + +# .text:0x1C538 | size: 0x154 +.fn push_back__Q23UTLt6Vector2ZPQ28CameraAI8Directori16RCPQ28CameraAI8Director, weak +/* 0001C538 000292C8 94 21 FF D8 */ stwu r1, -0x28(r1) +/* 0001C53C 000292CC 7C 08 02 A6 */ mflr r0 +/* 0001C540 000292D0 7D 80 00 26 */ mfcr r12 +.L_0001C544: +/* 0001C544 000292D4 BF 41 00 10 */ stmw r26, 0x10(r1) +/* 0001C548 000292D8 90 01 00 2C */ stw r0, 0x2c(r1) +/* 0001C54C 000292DC 91 81 00 0C */ stw r12, 0xc(r1) +/* 0001C550 000292E0 7C 7F 1B 78 */ mr r31, r3 +/* 0001C554 000292E4 7C 9A 23 78 */ mr r26, r4 +/* 0001C558 000292E8 80 9F 00 08 */ lwz r4, 0x8(r31) +/* 0001C55C 000292EC 80 1F 00 04 */ lwz r0, 0x4(r31) +/* 0001C560 000292F0 7C 04 00 40 */ cmplw r4, r0 +/* 0001C564 000292F4 41 80 C6 44 */ blt .L_00018BA8 +/* 0001C568 000292F8 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001C56C 000292FC 38 84 00 01 */ addi r4, r4, 0x1 +/* 0001C570 00029300 80 09 00 24 */ lwz r0, 0x24(r9) +/* 0001C574 00029304 A8 69 00 20 */ lha r3, 0x20(r9) +/* 0001C578 00029308 7C 08 03 A6 */ mtlr r0 +/* 0001C57C 0002930C 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001C580 00029310 4E 80 00 21 */ blrl +/* 0001C584 00029314 80 1F 00 04 */ lwz r0, 0x4(r31) +/* 0001C588 00029318 7C 7E 1B 78 */ mr r30, r3 +/* 0001C58C 0002931C 7C 1E 00 40 */ cmplw r30, r0 +/* 0001C590 00029320 40 81 C6 44 */ ble .L_00018BD4 +/* 0001C594 00029324 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001C598 00029328 7F C4 F3 78 */ mr r4, r30 +/* 0001C59C 0002932C 80 09 00 34 */ lwz r0, 0x34(r9) +/* 0001C5A0 00029330 A8 69 00 30 */ lha r3, 0x30(r9) +/* 0001C5A4 00029334 7C 08 03 A6 */ mtlr r0 +/* 0001C5A8 00029338 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001C5AC 0002933C 4E 80 00 21 */ blrl +/* 0001C5B0 00029340 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001C5B4 00029344 7F C4 F3 78 */ mr r4, r30 +/* 0001C5B8 00029348 38 A0 00 10 */ li r5, 0x10 +/* 0001C5BC 0002934C 83 BF 00 00 */ lwz r29, 0x0(r31) +/* 0001C5C0 00029350 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0001C5C4 00029354 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0001C5C8 00029358 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001C5CC 0002935C 83 9F 00 08 */ lwz r28, 0x8(r31) +/* 0001C5D0 00029360 7C 08 03 A6 */ mtlr r0 +/* 0001C5D4 00029364 83 7F 00 04 */ lwz r27, 0x4(r31) +/* 0001C5D8 00029368 4E 80 00 21 */ blrl +/* 0001C5DC 0002936C 93 DF 00 04 */ stw r30, 0x4(r31) +/* 0001C5E0 00029370 7C 1D 18 00 */ cmpw r29, r3 +/* 0001C5E4 00029374 90 7F 00 00 */ stw r3, 0x0(r31) +/* 0001C5E8 00029378 41 82 C6 44 */ beq .L_00018C2C +/* 0001C5EC 0002937C 38 00 00 00 */ li r0, 0x0 +/* 0001C5F0 00029380 3B C0 00 00 */ li r30, 0x0 +/* 0001C5F4 00029384 90 1F 00 08 */ stw r0, 0x8(r31) +/* 0001C5F8 00029388 7C 1E E0 00 */ cmpw r30, r28 +/* 0001C5FC 0002938C 2E 1D 00 00 */ cmpwi cr4, r29, 0x0 +/* 0001C600 00029390 40 80 C6 20 */ bge .L_00018C20 +/* 0001C604 00029394 57 C4 10 3A */ slwi r4, r30, 2 +/* 0001C608 00029398 7F E3 FB 78 */ mr r3, r31 +/* 0001C60C 0002939C 7C 9D 22 14 */ add r4, r29, r4 +/* 0001C610 000293A0 3B DE 00 01 */ addi r30, r30, 0x1 +/* 0001C614 000293A4 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZPQ28CameraAI8Directori16RCPQ28CameraAI8Director +/* 0001C618 000293A8 7C 1E E0 00 */ cmpw r30, r28 +/* 0001C61C 000293AC 41 80 C6 04 */ blt .L_00018C20 +/* 0001C620 000293B0 41 92 C6 44 */ beq cr4, .L_00018C64 +/* 0001C624 000293B4 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001C628 000293B8 7F A4 EB 78 */ mr r4, r29 +/* 0001C62C 000293BC 7F 65 DB 78 */ mr r5, r27 +/* 0001C630 000293C0 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0001C634 000293C4 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0001C638 000293C8 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001C63C 000293CC 7C 08 03 A6 */ mtlr r0 +/* 0001C640 000293D0 4E 80 00 21 */ blrl +/* 0001C644 000293D4 81 3F 00 08 */ lwz r9, 0x8(r31) +/* 0001C648 000293D8 81 7F 00 00 */ lwz r11, 0x0(r31) +/* 0001C64C 000293DC 55 29 10 3A */ slwi r9, r9, 2 +/* 0001C650 000293E0 7C 09 5A 14 */ add r0, r9, r11 +/* 0001C654 000293E4 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0001C658 000293E8 41 82 C6 64 */ beq .L_00018CBC +/* 0001C65C 000293EC 80 1A 00 00 */ lwz r0, 0x0(r26) +/* 0001C660 000293F0 7C 09 59 2E */ stwx r0, r9, r11 +/* 0001C664 000293F4 81 3F 00 08 */ lwz r9, 0x8(r31) +/* 0001C668 000293F8 39 29 00 01 */ addi r9, r9, 0x1 +/* 0001C66C 000293FC 91 3F 00 08 */ stw r9, 0x8(r31) +/* 0001C670 00029400 80 01 00 2C */ lwz r0, 0x2c(r1) +/* 0001C674 00029404 81 81 00 0C */ lwz r12, 0xc(r1) +.L_0001C678: +/* 0001C678 00029408 7C 08 03 A6 */ mtlr r0 +/* 0001C67C 0002940C BB 41 00 10 */ lmw r26, 0x10(r1) +/* 0001C680 00029410 7D 80 81 20 */ mtcrf 8, r12 +/* 0001C684 00029414 38 21 00 28 */ addi r1, r1, 0x28 +/* 0001C688 00029418 4E 80 00 20 */ blr +.endfn push_back__Q23UTLt6Vector2ZPQ28CameraAI8Directori16RCPQ28CameraAI8Director + +# .text:0x1C68C | size: 0x154 +.fn push_back__Q23UTLt6Vector2ZP14ITrafficCenteri16RCP14ITrafficCenter, weak +/* 0001C68C 0002941C 94 21 FF D8 */ stwu r1, -0x28(r1) +/* 0001C690 00029420 7C 08 02 A6 */ mflr r0 +/* 0001C694 00029424 7D 80 00 26 */ mfcr r12 +/* 0001C698 00029428 BF 41 00 10 */ stmw r26, 0x10(r1) +/* 0001C69C 0002942C 90 01 00 2C */ stw r0, 0x2c(r1) +.L_0001C6A0: +/* 0001C6A0 00029430 91 81 00 0C */ stw r12, 0xc(r1) +/* 0001C6A4 00029434 7C 7F 1B 78 */ mr r31, r3 +/* 0001C6A8 00029438 7C 9A 23 78 */ mr r26, r4 +/* 0001C6AC 0002943C 80 9F 00 08 */ lwz r4, 0x8(r31) +/* 0001C6B0 00029440 80 1F 00 04 */ lwz r0, 0x4(r31) +/* 0001C6B4 00029444 7C 04 00 40 */ cmplw r4, r0 +/* 0001C6B8 00029448 41 80 C7 98 */ blt .L_00018E50 +/* 0001C6BC 0002944C 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001C6C0 00029450 38 84 00 01 */ addi r4, r4, 0x1 +/* 0001C6C4 00029454 80 09 00 24 */ lwz r0, 0x24(r9) +/* 0001C6C8 00029458 A8 69 00 20 */ lha r3, 0x20(r9) +/* 0001C6CC 0002945C 7C 08 03 A6 */ mtlr r0 +/* 0001C6D0 00029460 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001C6D4 00029464 4E 80 00 21 */ blrl +/* 0001C6D8 00029468 80 1F 00 04 */ lwz r0, 0x4(r31) +/* 0001C6DC 0002946C 7C 7E 1B 78 */ mr r30, r3 +/* 0001C6E0 00029470 7C 1E 00 40 */ cmplw r30, r0 +/* 0001C6E4 00029474 40 81 C7 98 */ ble .L_00018E7C +/* 0001C6E8 00029478 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001C6EC 0002947C 7F C4 F3 78 */ mr r4, r30 +/* 0001C6F0 00029480 80 09 00 34 */ lwz r0, 0x34(r9) +/* 0001C6F4 00029484 A8 69 00 30 */ lha r3, 0x30(r9) +/* 0001C6F8 00029488 7C 08 03 A6 */ mtlr r0 +/* 0001C6FC 0002948C 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001C700 00029490 4E 80 00 21 */ blrl +/* 0001C704 00029494 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001C708 00029498 7F C4 F3 78 */ mr r4, r30 +/* 0001C70C 0002949C 38 A0 00 10 */ li r5, 0x10 +/* 0001C710 000294A0 83 BF 00 00 */ lwz r29, 0x0(r31) +/* 0001C714 000294A4 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0001C718 000294A8 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0001C71C 000294AC 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001C720 000294B0 83 9F 00 08 */ lwz r28, 0x8(r31) +/* 0001C724 000294B4 7C 08 03 A6 */ mtlr r0 +/* 0001C728 000294B8 83 7F 00 04 */ lwz r27, 0x4(r31) +/* 0001C72C 000294BC 4E 80 00 21 */ blrl +/* 0001C730 000294C0 93 DF 00 04 */ stw r30, 0x4(r31) +/* 0001C734 000294C4 7C 1D 18 00 */ cmpw r29, r3 +/* 0001C738 000294C8 90 7F 00 00 */ stw r3, 0x0(r31) +/* 0001C73C 000294CC 41 82 C7 98 */ beq LoadCameraShakes__10ICEManagerP6bChunk +/* 0001C740 000294D0 38 00 00 00 */ li r0, 0x0 +/* 0001C744 000294D4 3B C0 00 00 */ li r30, 0x0 +/* 0001C748 000294D8 90 1F 00 08 */ stw r0, 0x8(r31) +.L_0001C74C: +/* 0001C74C 000294DC 7C 1E E0 00 */ cmpw r30, r28 +/* 0001C750 000294E0 2E 1D 00 00 */ cmpwi cr4, r29, 0x0 +/* 0001C754 000294E4 40 80 C7 74 */ bge .L_00018EC8 +/* 0001C758 000294E8 57 C4 10 3A */ slwi r4, r30, 2 +/* 0001C75C 000294EC 7F E3 FB 78 */ mr r3, r31 +/* 0001C760 000294F0 7C 9D 22 14 */ add r4, r29, r4 +/* 0001C764 000294F4 3B DE 00 01 */ addi r30, r30, 0x1 +/* 0001C768 000294F8 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZP14ITrafficCenteri16RCP14ITrafficCenter +.L_0001C76C: +/* 0001C76C 000294FC 7C 1E E0 00 */ cmpw r30, r28 +/* 0001C770 00029500 41 80 C7 58 */ blt .L_00018EC8 +/* 0001C774 00029504 41 92 C7 98 */ beq cr4, .L_00018F0C +/* 0001C778 00029508 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001C77C 0002950C 7F A4 EB 78 */ mr r4, r29 +/* 0001C780 00029510 7F 65 DB 78 */ mr r5, r27 +/* 0001C784 00029514 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0001C788 00029518 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0001C78C 0002951C 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001C790 00029520 7C 08 03 A6 */ mtlr r0 +/* 0001C794 00029524 4E 80 00 21 */ blrl +/* 0001C798 00029528 81 3F 00 08 */ lwz r9, 0x8(r31) +/* 0001C79C 0002952C 81 7F 00 00 */ lwz r11, 0x0(r31) +/* 0001C7A0 00029530 55 29 10 3A */ slwi r9, r9, 2 +/* 0001C7A4 00029534 7C 09 5A 14 */ add r0, r9, r11 +/* 0001C7A8 00029538 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0001C7AC 0002953C 41 82 C7 B8 */ beq .L_00018F64 +/* 0001C7B0 00029540 80 1A 00 00 */ lwz r0, 0x0(r26) +/* 0001C7B4 00029544 7C 09 59 2E */ stwx r0, r9, r11 +/* 0001C7B8 00029548 81 3F 00 08 */ lwz r9, 0x8(r31) +/* 0001C7BC 0002954C 39 29 00 01 */ addi r9, r9, 0x1 +/* 0001C7C0 00029550 91 3F 00 08 */ stw r9, 0x8(r31) +/* 0001C7C4 00029554 80 01 00 2C */ lwz r0, 0x2c(r1) +/* 0001C7C8 00029558 81 81 00 0C */ lwz r12, 0xc(r1) +/* 0001C7CC 0002955C 7C 08 03 A6 */ mtlr r0 +/* 0001C7D0 00029560 BB 41 00 10 */ lmw r26, 0x10(r1) +/* 0001C7D4 00029564 7D 80 81 20 */ mtcrf 8, r12 +.L_0001C7D8: +/* 0001C7D8 00029568 38 21 00 28 */ addi r1, r1, 0x28 +/* 0001C7DC 0002956C 4E 80 00 20 */ blr +.endfn push_back__Q23UTLt6Vector2ZP14ITrafficCenteri16RCP14ITrafficCenter + +# .text:0x1C7E0 | size: 0x148 +.fn _._14ITrafficCenter, weak +/* 0001C7E0 00029570 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 0001C7E4 00029574 7C 08 02 A6 */ mflr r0 +/* 0001C7E8 00029578 BF 81 00 10 */ stmw r28, 0x10(r1) +/* 0001C7EC 0002957C 90 01 00 24 */ stw r0, 0x24(r1) +/* 0001C7F0 00029580 3D 20 00 00 */ lis r9, _vt.14ITrafficCenter@ha +/* 0001C7F4 00029584 7C 7D 1B 78 */ mr r29, r3 +/* 0001C7F8 00029588 39 29 00 00 */ addi r9, r9, _vt.14ITrafficCenter@l +/* 0001C7FC 0002958C 3D 40 00 00 */ lis r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha +/* 0001C800 00029590 91 3D 00 04 */ stw r9, 0x4(r29) +.L_0001C804: +/* 0001C804 00029594 39 6A 00 00 */ addi r11, r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l +/* 0001C808 00029598 3B C1 00 08 */ addi r30, r1, 0x8 +/* 0001C80C 0002959C 7C 9C 23 78 */ mr r28, r4 +/* 0001C810 000295A0 80 0B 00 08 */ lwz r0, 0x8(r11) +/* 0001C814 000295A4 7F C5 F3 78 */ mr r5, r30 +/* 0001C818 000295A8 80 6A 00 00 */ lwz r3, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r10) +.L_0001C81C: +/* 0001C81C 000295AC 54 00 10 3A */ slwi r0, r0, 2 +/* 0001C820 000295B0 93 A1 00 08 */ stw r29, 0x8(r1) +/* 0001C824 000295B4 7F E3 02 14 */ add r31, r3, r0 +/* 0001C828 000295B8 7F E4 FB 78 */ mr r4, r31 +/* 0001C82C 000295BC 48 00 00 01 */ bl find__H2ZPP14ITrafficCenterZP14ITrafficCenter_4_STLX01X01RCX11_X01 +/* 0001C830 000295C0 7C 03 F8 00 */ cmpw r3, r31 +/* 0001C834 000295C4 40 82 C8 40 */ bne .L_00019074 +/* 0001C838 000295C8 7F E3 FB 78 */ mr r3, r31 +/* 0001C83C 000295CC 48 01 C8 70 */ b .text+0x1C870 +/* 0001C840 000295D0 39 63 00 04 */ addi r11, r3, 0x4 +/* 0001C844 000295D4 7C 0B F8 00 */ cmpw r11, r31 +/* 0001C848 000295D8 41 82 C8 70 */ beq .L_000190B8 +/* 0001C84C 000295DC 81 2B 00 00 */ lwz r9, 0x0(r11) +/* 0001C850 000295E0 80 1E 00 00 */ lwz r0, 0x0(r30) +/* 0001C854 000295E4 7C 09 00 00 */ cmpw r9, r0 +/* 0001C858 000295E8 41 82 C8 64 */ beq .L_000190BC +/* 0001C85C 000295EC 91 23 00 00 */ stw r9, 0x0(r3) +/* 0001C860 000295F0 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001C864 000295F4 39 6B 00 04 */ addi r11, r11, 0x4 +/* 0001C868 000295F8 7C 0B F8 00 */ cmpw r11, r31 +/* 0001C86C 000295FC 40 82 C8 4C */ bne .L_000190B8 +/* 0001C870 00029600 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha +/* 0001C874 00029604 38 A9 00 00 */ addi r5, r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l +/* 0001C878 00029608 81 49 00 00 */ lwz r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r9) +/* 0001C87C 0002960C 81 05 00 08 */ lwz r8, 0x8(r5) +/* 0001C880 00029610 55 00 10 3A */ slwi r0, r8, 2 +/* 0001C884 00029614 7D 6A 02 14 */ add r11, r10, r0 +/* 0001C888 00029618 7C 03 58 00 */ cmpw r3, r11 +/* 0001C88C 0002961C 41 82 C9 04 */ beq Resolve__10ICEManager +/* 0001C890 00029620 7D 23 58 50 */ subf r9, r3, r11 +/* 0001C894 00029624 7C 0A 18 50 */ subf r0, r10, r3 +/* 0001C898 00029628 7D 3F 16 70 */ srawi r31, r9, 2 +/* 0001C89C 0002962C 7C 06 16 70 */ srawi r6, r0, 2 +/* 0001C8A0 00029630 7D 09 43 78 */ mr r9, r8 +/* 0001C8A4 00029634 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001C8A8 00029638 7C 03 58 00 */ cmpw r3, r11 +/* 0001C8AC 0002963C 40 82 C8 A4 */ bne .L_00019150 +/* 0001C8B0 00029640 7C E6 FA 14 */ add r7, r6, r31 +/* 0001C8B4 00029644 39 00 00 00 */ li r8, 0x0 +/* 0001C8B8 00029648 7C E4 3B 78 */ mr r4, r7 +/* 0001C8BC 0002964C 7C 04 48 50 */ subf r0, r4, r9 +/* 0001C8C0 00029650 7C 08 00 40 */ cmplw r8, r0 +/* 0001C8C4 00029654 40 80 C8 FC */ bge .L_000191C0 +/* 0001C8C8 00029658 7C 06 42 14 */ add r0, r6, r8 +/* 0001C8CC 0002965C 81 65 00 00 */ lwz r11, 0x0(r5) +/* 0001C8D0 00029660 54 0A 10 3A */ slwi r10, r0, 2 +/* 0001C8D4 00029664 7D 27 42 14 */ add r9, r7, r8 +/* 0001C8D8 00029668 7C 0A 5A 14 */ add r0, r10, r11 +/* 0001C8DC 0002966C 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0001C8E0 00029670 41 82 C8 F0 */ beq .L_000191D0 +/* 0001C8E4 00029674 55 29 10 3A */ slwi r9, r9, 2 +/* 0001C8E8 00029678 7C 09 58 2E */ lwzx r0, r9, r11 +/* 0001C8EC 0002967C 7C 0A 59 2E */ stwx r0, r10, r11 +/* 0001C8F0 00029680 39 08 00 01 */ addi r8, r8, 0x1 +/* 0001C8F4 00029684 81 25 00 08 */ lwz r9, 0x8(r5) +/* 0001C8F8 00029688 48 01 C8 BC */ b .text+0x1C8BC +/* 0001C8FC 0002968C 7C 1F 48 50 */ subf r0, r31, r9 +/* 0001C900 00029690 90 05 00 08 */ stw r0, 0x8(r5) +.L_0001C904: +/* 0001C904 00029694 73 80 00 01 */ andi. r0, r28, 0x1 +/* 0001C908 00029698 41 82 C9 14 */ beq .L_0001921C +/* 0001C90C 0002969C 7F A3 EB 78 */ mr r3, r29 +/* 0001C910 000296A0 48 00 00 01 */ bl __builtin_delete +/* 0001C914 000296A4 80 01 00 24 */ lwz r0, 0x24(r1) +/* 0001C918 000296A8 7C 08 03 A6 */ mtlr r0 +/* 0001C91C 000296AC BB 81 00 10 */ lmw r28, 0x10(r1) +/* 0001C920 000296B0 38 21 00 20 */ addi r1, r1, 0x20 +/* 0001C924 000296B4 4E 80 00 20 */ blr +.endfn _._14ITrafficCenter + +# .text:0x1C928 | size: 0x8 +# CDActionDrive::GetMover +.fn GetMover__13CDActionDrive, global +/* 0001C928 000296B8 80 63 00 2C */ lwz r3, 0x2c(r3) +/* 0001C92C 000296BC 4E 80 00 20 */ blr +.endfn GetMover__13CDActionDrive + +# .text:0x1C930 | size: 0x4 +.fn OnAttached__13CDActionDriveP11IAttachable, global +/* 0001C930 000296C0 4E 80 00 20 */ blr +.endfn OnAttached__13CDActionDriveP11IAttachable + +# .text:0x1C934 | size: 0x64 +# MJumpCut::_GetKind +.fn _GetKind__8MJumpCut, weak +/* 0001C934 000296C4 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 0001C938 000296C8 7C 08 02 A6 */ mflr r0 +/* 0001C93C 000296CC BF C1 00 08 */ stmw r30, 0x8(r1) +/* 0001C940 000296D0 90 01 00 14 */ stw r0, 0x14(r1) +/* 0001C944 000296D4 3F C0 00 00 */ lis r30, _.tmp_6.10705@ha +/* 0001C948 000296D8 7C 7F 1B 78 */ mr r31, r3 +/* 0001C94C 000296DC 80 1E 00 00 */ lwz r0, _.tmp_6.10705@l(r30) +/* 0001C950 000296E0 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0001C954 000296E4 40 82 C9 74 */ bne .L_000192C8 +/* 0001C958 000296E8 3C 60 00 00 */ lis r3, .rodata+0x80C@ha +/* 0001C95C 000296EC 38 63 08 0C */ addi r3, r3, .rodata+0x80C@l +/* 0001C960 000296F0 48 00 00 01 */ bl stringhash32__FPCc +/* 0001C964 000296F4 38 00 00 01 */ li r0, 0x1 +/* 0001C968 000296F8 3D 20 00 00 */ lis r9, k.10704@ha +/* 0001C96C 000296FC 90 69 00 00 */ stw r3, k.10704@l(r9) +/* 0001C970 00029700 90 1E 00 00 */ stw r0, _.tmp_6.10705@l(r30) +/* 0001C974 00029704 3D 20 00 00 */ lis r9, k.10704@ha +/* 0001C978 00029708 7F E3 FB 78 */ mr r3, r31 +/* 0001C97C 0002970C 80 09 00 00 */ lwz r0, k.10704@l(r9) +/* 0001C980 00029710 90 1F 00 00 */ stw r0, 0x0(r31) +/* 0001C984 00029714 80 01 00 14 */ lwz r0, 0x14(r1) +/* 0001C988 00029718 7C 08 03 A6 */ mtlr r0 +/* 0001C98C 0002971C BB C1 00 08 */ lmw r30, 0x8(r1) +/* 0001C990 00029720 38 21 00 10 */ addi r1, r1, 0x10 +/* 0001C994 00029724 4E 80 00 20 */ blr +.endfn _GetKind__8MJumpCut + +# .text:0x1C998 | size: 0x88 +.fn Call__Q36Hermes7Handlert13MemberHandler3Z8MJumpCutZ13CDActionDriveZ13CDActionDrivePCQ26Hermes7MessagePQ26Hermes7Handler, weak +/* 0001C998 00029728 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0001C99C 0002972C 7C 08 02 A6 */ mflr r0 +/* 0001C9A0 00029730 90 01 00 0C */ stw r0, 0xc(r1) +/* 0001C9A4 00029734 A9 04 00 02 */ lha r8, 0x2(r4) +/* 0001C9A8 00029738 7C 66 1B 78 */ mr r6, r3 +/* 0001C9AC 0002973C 2C 08 00 00 */ cmpwi r8, 0x0 +/* 0001C9B0 00029740 41 80 C9 D8 */ blt .L_00019388 +/* 0001C9B4 00029744 A9 44 00 04 */ lha r10, 0x4(r4) +/* 0001C9B8 00029748 55 09 18 38 */ slwi r9, r8, 3 +/* 0001C9BC 0002974C 81 64 00 08 */ lwz r11, 0x8(r4) +/* 0001C9C0 00029750 7C 0B 50 2E */ lwzx r0, r11, r10 +/* 0001C9C4 00029754 7D 29 02 14 */ add r9, r9, r0 +/* 0001C9C8 00029758 81 49 FF FC */ lwz r10, -0x4(r9) +/* 0001C9CC 0002975C 81 29 FF F8 */ lwz r9, -0x8(r9) +/* 0001C9D0 00029760 7D 47 53 78 */ mr r7, r10 +/* 0001C9D4 00029764 48 01 C9 DC */ b .text+0x1C9DC +/* 0001C9D8 00029768 80 E4 00 04 */ lwz r7, 0x4(r4) +/* 0001C9DC 0002976C A9 64 00 00 */ lha r11, 0x0(r4) +/* 0001C9E0 00029770 2C 08 00 00 */ cmpwi r8, 0x0 +/* 0001C9E4 00029774 38 64 00 08 */ addi r3, r4, 0x8 +/* 0001C9E8 00029778 41 80 C9 F8 */ blt .L_000193E0 +/* 0001C9EC 0002977C 7D 20 86 70 */ srawi r0, r9, 16 +/* 0001C9F0 00029780 7C 00 5A 14 */ add r0, r0, r11 +/* 0001C9F4 00029784 48 01 C9 FC */ b .text+0x1C9FC +/* 0001C9F8 00029788 7D 60 5B 78 */ mr r0, r11 +/* 0001C9FC 0002978C 80 63 00 00 */ lwz r3, 0x0(r3) +/* 0001CA00 00029790 7C C4 33 78 */ mr r4, r6 +/* 0001CA04 00029794 7C E8 03 A6 */ mtlr r7 +/* 0001CA08 00029798 7C 63 02 14 */ add r3, r3, r0 +/* 0001CA0C 0002979C 4E 80 00 21 */ blrl +/* 0001CA10 000297A0 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0001CA14 000297A4 7C 08 03 A6 */ mtlr r0 +/* 0001CA18 000297A8 38 21 00 08 */ addi r1, r1, 0x8 +/* 0001CA1C 000297AC 4E 80 00 20 */ blr +.endfn Call__Q36Hermes7Handlert13MemberHandler3Z8MJumpCutZ13CDActionDriveZ13CDActionDrivePCQ26Hermes7MessagePQ26Hermes7Handler + +# .text:0x1CA20 | size: 0x8 +# CDActionTrackCar::GetMover +.fn GetMover__16CDActionTrackCar, global +/* 0001CA20 000297B0 80 63 00 28 */ lwz r3, 0x28(r3) +/* 0001CA24 000297B4 4E 80 00 20 */ blr +.endfn GetMover__16CDActionTrackCar + +# .text:0x1CA28 | size: 0x4 +.fn SetSpecial__16CDActionTrackCarf, global +/* 0001CA28 000297B8 4E 80 00 20 */ blr +.endfn SetSpecial__16CDActionTrackCarf + +# .text:0x1CA2C | size: 0x4 +.fn OnAttached__16CDActionTrackCarP11IAttachable, global +/* 0001CA2C 000297BC 4E 80 00 20 */ blr +.endfn OnAttached__16CDActionTrackCarP11IAttachable + +# .text:0x1CA30 | size: 0x4 +# CDActionTrackCar::Reset +.fn Reset__16CDActionTrackCar, global +/* 0001CA30 000297C0 4E 80 00 20 */ blr +.endfn Reset__16CDActionTrackCar + +# .text:0x1CA34 | size: 0x8 +# CDActionTrackCop::GetMover +.fn GetMover__16CDActionTrackCop, global +/* 0001CA34 000297C4 80 63 00 28 */ lwz r3, 0x28(r3) +/* 0001CA38 000297C8 4E 80 00 20 */ blr +.endfn GetMover__16CDActionTrackCop + +# .text:0x1CA3C | size: 0x4 +.fn SetSpecial__16CDActionTrackCopf, global +/* 0001CA3C 000297CC 4E 80 00 20 */ blr +.endfn SetSpecial__16CDActionTrackCopf + +# .text:0x1CA40 | size: 0x4 +.fn OnAttached__16CDActionTrackCopP11IAttachable, global +/* 0001CA40 000297D0 4E 80 00 20 */ blr +.endfn OnAttached__16CDActionTrackCopP11IAttachable + +# .text:0x1CA44 | size: 0x4 +# CDActionTrackCop::Reset +.fn Reset__16CDActionTrackCop, global +/* 0001CA44 000297D4 4E 80 00 20 */ blr +.endfn Reset__16CDActionTrackCop + +# .text:0x1CA48 | size: 0x8 +# CDActionShowcase::GetMover +.fn GetMover__16CDActionShowcase, global +/* 0001CA48 000297D8 80 63 00 20 */ lwz r3, 0x20(r3) +/* 0001CA4C 000297DC 4E 80 00 20 */ blr +.endfn GetMover__16CDActionShowcase + +# .text:0x1CA50 | size: 0x4 +.fn SetSpecial__16CDActionShowcasef, global +/* 0001CA50 000297E0 4E 80 00 20 */ blr +.endfn SetSpecial__16CDActionShowcasef + +# .text:0x1CA54 | size: 0x4 +.fn OnAttached__16CDActionShowcaseP11IAttachable, global +/* 0001CA54 000297E4 4E 80 00 20 */ blr +.endfn OnAttached__16CDActionShowcaseP11IAttachable + +# .text:0x1CA58 | size: 0x4 +# CDActionShowcase::Reset +.fn Reset__16CDActionShowcase, global +/* 0001CA58 000297E8 4E 80 00 20 */ blr +.endfn Reset__16CDActionShowcase + +# .text:0x1CA5C | size: 0x8 +# CDActionDebug::GetMover +.fn GetMover__13CDActionDebug, global +/* 0001CA5C 000297EC 80 63 02 B4 */ lwz r3, 0x2b4(r3) +/* 0001CA60 000297F0 4E 80 00 20 */ blr +.endfn GetMover__13CDActionDebug + +# .text:0x1CA64 | size: 0x4 +.fn SetSpecial__13CDActionDebugf, global +/* 0001CA64 000297F4 4E 80 00 20 */ blr +.endfn SetSpecial__13CDActionDebugf + +# .text:0x1CA68 | size: 0x4 +# CDActionDebug::Reset +.fn Reset__13CDActionDebug, global +/* 0001CA68 000297F8 4E 80 00 20 */ blr +.endfn Reset__13CDActionDebug + +# .text:0x1CA6C | size: 0x4 +.fn SetSpecial__11CDActionIcef, global +/* 0001CA6C 000297FC 4E 80 00 20 */ blr +.endfn SetSpecial__11CDActionIcef + +# .text:0x1CA70 | size: 0x4 +.fn OnAttached__11CDActionIceP11IAttachable, global +/* 0001CA70 00029800 4E 80 00 20 */ blr +.endfn OnAttached__11CDActionIceP11IAttachable + +# .text:0x1CA74 | size: 0x4 +# CDActionIce::Reset +.fn Reset__11CDActionIce, global +/* 0001CA74 00029804 4E 80 00 20 */ blr +.endfn Reset__11CDActionIce + +# .text:0x1CA78 | size: 0x8 +# ICEMover::IsViolatingTopology +.fn IsViolatingTopology__8ICEMover, global +/* 0001CA78 00029808 80 63 00 C8 */ lwz r3, 0xc8(r3) +/* 0001CA7C 0002980C 4E 80 00 20 */ blr +.endfn IsViolatingTopology__8ICEMover + +# .text:0x1CA80 | size: 0x24 +# ICEMover::IsSmooth +.fn IsSmooth__8ICEMover, global +/* 0001CA80 00029810 81 23 00 C4 */ lwz r9, 0xc4(r3) +/* 0001CA84 00029814 38 60 00 00 */ li r3, 0x0 +/* 0001CA88 00029818 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0001CA8C 0002981C 4D 82 00 20 */ beqlr +/* 0001CA90 00029820 88 09 00 01 */ lbz r0, 0x1(r9) +/* 0001CA94 00029824 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0001CA98 00029828 4D 82 00 20 */ beqlr +/* 0001CA9C 0002982C 38 60 00 01 */ li r3, 0x1 +/* 0001CAA0 00029830 4E 80 00 20 */ blr +.endfn IsSmooth__8ICEMover + +# .text:0x1CAA4 | size: 0x8 +# ICEMover::GetICEAnchor +.fn GetICEAnchor__8ICEMover, global +/* 0001CAA4 00029834 80 63 00 80 */ lwz r3, 0x80(r3) +/* 0001CAA8 00029838 4E 80 00 20 */ blr +.endfn GetICEAnchor__8ICEMover + +# .text:0x1CAAC | size: 0xC +# IDebugWatchCar::_IHandle +.fn _IHandle__14IDebugWatchCar, weak +/* 0001CAAC 0002983C 3C 60 00 00 */ lis r3, _IHandle__14IDebugWatchCar@ha +/* 0001CAB0 00029840 38 63 00 00 */ addi r3, r3, _IHandle__14IDebugWatchCar@l +/* 0001CAB4 00029844 4E 80 00 20 */ blr +.endfn _IHandle__14IDebugWatchCar + +# .text:0x1CAB8 | size: 0x154 +.fn push_back__Q23UTLt6Vector2ZP14IDebugWatchCari16RCP14IDebugWatchCar, weak +/* 0001CAB8 00029848 94 21 FF D8 */ stwu r1, -0x28(r1) +/* 0001CABC 0002984C 7C 08 02 A6 */ mflr r0 +/* 0001CAC0 00029850 7D 80 00 26 */ mfcr r12 +/* 0001CAC4 00029854 BF 41 00 10 */ stmw r26, 0x10(r1) +/* 0001CAC8 00029858 90 01 00 2C */ stw r0, 0x2c(r1) +/* 0001CACC 0002985C 91 81 00 0C */ stw r12, 0xc(r1) +/* 0001CAD0 00029860 7C 7F 1B 78 */ mr r31, r3 +/* 0001CAD4 00029864 7C 9A 23 78 */ mr r26, r4 +/* 0001CAD8 00029868 80 9F 00 08 */ lwz r4, 0x8(r31) +/* 0001CADC 0002986C 80 1F 00 04 */ lwz r0, 0x4(r31) +/* 0001CAE0 00029870 7C 04 00 40 */ cmplw r4, r0 +/* 0001CAE4 00029874 41 80 CB C4 */ blt .L_000196A8 +/* 0001CAE8 00029878 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001CAEC 0002987C 38 84 00 01 */ addi r4, r4, 0x1 +/* 0001CAF0 00029880 80 09 00 24 */ lwz r0, 0x24(r9) +/* 0001CAF4 00029884 A8 69 00 20 */ lha r3, 0x20(r9) +/* 0001CAF8 00029888 7C 08 03 A6 */ mtlr r0 +/* 0001CAFC 0002988C 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001CB00 00029890 4E 80 00 21 */ blrl +/* 0001CB04 00029894 80 1F 00 04 */ lwz r0, 0x4(r31) +/* 0001CB08 00029898 7C 7E 1B 78 */ mr r30, r3 +/* 0001CB0C 0002989C 7C 1E 00 40 */ cmplw r30, r0 +/* 0001CB10 000298A0 40 81 CB C4 */ ble .L_000196D4 +/* 0001CB14 000298A4 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001CB18 000298A8 7F C4 F3 78 */ mr r4, r30 +/* 0001CB1C 000298AC 80 09 00 34 */ lwz r0, 0x34(r9) +/* 0001CB20 000298B0 A8 69 00 30 */ lha r3, 0x30(r9) +/* 0001CB24 000298B4 7C 08 03 A6 */ mtlr r0 +.L_0001CB28: +/* 0001CB28 000298B8 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001CB2C 000298BC 4E 80 00 21 */ blrl +/* 0001CB30 000298C0 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001CB34 000298C4 7F C4 F3 78 */ mr r4, r30 +.L_0001CB38: +/* 0001CB38 000298C8 38 A0 00 10 */ li r5, 0x10 +/* 0001CB3C 000298CC 83 BF 00 00 */ lwz r29, 0x0(r31) +/* 0001CB40 000298D0 A8 69 00 10 */ lha r3, 0x10(r9) +/* 0001CB44 000298D4 80 09 00 14 */ lwz r0, 0x14(r9) +/* 0001CB48 000298D8 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001CB4C 000298DC 83 9F 00 08 */ lwz r28, 0x8(r31) +/* 0001CB50 000298E0 7C 08 03 A6 */ mtlr r0 +/* 0001CB54 000298E4 83 7F 00 04 */ lwz r27, 0x4(r31) +/* 0001CB58 000298E8 4E 80 00 21 */ blrl +/* 0001CB5C 000298EC 93 DF 00 04 */ stw r30, 0x4(r31) +/* 0001CB60 000298F0 7C 1D 18 00 */ cmpw r29, r3 +/* 0001CB64 000298F4 90 7F 00 00 */ stw r3, 0x0(r31) +/* 0001CB68 000298F8 41 82 CB C4 */ beq .L_0001972C +/* 0001CB6C 000298FC 38 00 00 00 */ li r0, 0x0 +/* 0001CB70 00029900 3B C0 00 00 */ li r30, 0x0 +/* 0001CB74 00029904 90 1F 00 08 */ stw r0, 0x8(r31) +/* 0001CB78 00029908 7C 1E E0 00 */ cmpw r30, r28 +/* 0001CB7C 0002990C 2E 1D 00 00 */ cmpwi cr4, r29, 0x0 +/* 0001CB80 00029910 40 80 CB A0 */ bge .L_00019720 +/* 0001CB84 00029914 57 C4 10 3A */ slwi r4, r30, 2 +/* 0001CB88 00029918 7F E3 FB 78 */ mr r3, r31 +/* 0001CB8C 0002991C 7C 9D 22 14 */ add r4, r29, r4 +/* 0001CB90 00029920 3B DE 00 01 */ addi r30, r30, 0x1 +/* 0001CB94 00029924 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZP14IDebugWatchCari16RCP14IDebugWatchCar +/* 0001CB98 00029928 7C 1E E0 00 */ cmpw r30, r28 +/* 0001CB9C 0002992C 41 80 CB 84 */ blt .L_00019720 +/* 0001CBA0 00029930 41 92 CB C4 */ beq cr4, .L_00019764 +/* 0001CBA4 00029934 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001CBA8 00029938 7F A4 EB 78 */ mr r4, r29 +/* 0001CBAC 0002993C 7F 65 DB 78 */ mr r5, r27 +/* 0001CBB0 00029940 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0001CBB4 00029944 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0001CBB8 00029948 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001CBBC 0002994C 7C 08 03 A6 */ mtlr r0 +/* 0001CBC0 00029950 4E 80 00 21 */ blrl +/* 0001CBC4 00029954 81 3F 00 08 */ lwz r9, 0x8(r31) +/* 0001CBC8 00029958 81 7F 00 00 */ lwz r11, 0x0(r31) +/* 0001CBCC 0002995C 55 29 10 3A */ slwi r9, r9, 2 +/* 0001CBD0 00029960 7C 09 5A 14 */ add r0, r9, r11 +/* 0001CBD4 00029964 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0001CBD8 00029968 41 82 CB E4 */ beq .L_000197BC +/* 0001CBDC 0002996C 80 1A 00 00 */ lwz r0, 0x0(r26) +/* 0001CBE0 00029970 7C 09 59 2E */ stwx r0, r9, r11 +/* 0001CBE4 00029974 81 3F 00 08 */ lwz r9, 0x8(r31) +/* 0001CBE8 00029978 39 29 00 01 */ addi r9, r9, 0x1 +/* 0001CBEC 0002997C 91 3F 00 08 */ stw r9, 0x8(r31) +/* 0001CBF0 00029980 80 01 00 2C */ lwz r0, 0x2c(r1) +/* 0001CBF4 00029984 81 81 00 0C */ lwz r12, 0xc(r1) +/* 0001CBF8 00029988 7C 08 03 A6 */ mtlr r0 +/* 0001CBFC 0002998C BB 41 00 10 */ lmw r26, 0x10(r1) +/* 0001CC00 00029990 7D 80 81 20 */ mtcrf 8, r12 +/* 0001CC04 00029994 38 21 00 28 */ addi r1, r1, 0x28 +/* 0001CC08 00029998 4E 80 00 20 */ blr +.endfn push_back__Q23UTLt6Vector2ZP14IDebugWatchCari16RCP14IDebugWatchCar + +# .text:0x1CC0C | size: 0x160 +.fn _._14IDebugWatchCar, weak +/* 0001CC0C 0002999C 94 21 FF E0 */ stwu r1, -0x20(r1) +/* 0001CC10 000299A0 7C 08 02 A6 */ mflr r0 +/* 0001CC14 000299A4 BF 81 00 10 */ stmw r28, 0x10(r1) +/* 0001CC18 000299A8 90 01 00 24 */ stw r0, 0x24(r1) +/* 0001CC1C 000299AC 3D 20 00 00 */ lis r9, _vt.14IDebugWatchCar@ha +/* 0001CC20 000299B0 7C 7D 1B 78 */ mr r29, r3 +/* 0001CC24 000299B4 39 29 00 00 */ addi r9, r9, _vt.14IDebugWatchCar@l +/* 0001CC28 000299B8 3D 40 00 00 */ lis r10, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@ha +/* 0001CC2C 000299BC 91 3D 00 04 */ stw r9, 0x4(r29) +/* 0001CC30 000299C0 39 6A 00 00 */ addi r11, r10, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@l +/* 0001CC34 000299C4 3B C1 00 08 */ addi r30, r1, 0x8 +/* 0001CC38 000299C8 7C 9C 23 78 */ mr r28, r4 +/* 0001CC3C 000299CC 80 0B 00 08 */ lwz r0, 0x8(r11) +/* 0001CC40 000299D0 7F C5 F3 78 */ mr r5, r30 +/* 0001CC44 000299D4 80 6A 00 00 */ lwz r3, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@l(r10) +/* 0001CC48 000299D8 54 00 10 3A */ slwi r0, r0, 2 +.L_0001CC4C: +/* 0001CC4C 000299DC 93 A1 00 08 */ stw r29, 0x8(r1) +/* 0001CC50 000299E0 7F E3 02 14 */ add r31, r3, r0 +/* 0001CC54 000299E4 7F E4 FB 78 */ mr r4, r31 +/* 0001CC58 000299E8 48 00 00 01 */ bl find__H2ZPP14IDebugWatchCarZP14IDebugWatchCar_4_STLX01X01RCX11_X01 +/* 0001CC5C 000299EC 7C 03 F8 00 */ cmpw r3, r31 +/* 0001CC60 000299F0 40 82 CC 6C */ bne .L_000198CC +/* 0001CC64 000299F4 7F E3 FB 78 */ mr r3, r31 +/* 0001CC68 000299F8 48 01 CC 9C */ b .text+0x1CC9C +/* 0001CC6C 000299FC 39 63 00 04 */ addi r11, r3, 0x4 +/* 0001CC70 00029A00 7C 0B F8 00 */ cmpw r11, r31 +/* 0001CC74 00029A04 41 82 CC 9C */ beq .L_00019910 +/* 0001CC78 00029A08 81 2B 00 00 */ lwz r9, 0x0(r11) +/* 0001CC7C 00029A0C 80 1E 00 00 */ lwz r0, 0x0(r30) +/* 0001CC80 00029A10 7C 09 00 00 */ cmpw r9, r0 +/* 0001CC84 00029A14 41 82 CC 90 */ beq .L_00019914 +/* 0001CC88 00029A18 91 23 00 00 */ stw r9, 0x0(r3) +/* 0001CC8C 00029A1C 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001CC90 00029A20 39 6B 00 04 */ addi r11, r11, 0x4 +/* 0001CC94 00029A24 7C 0B F8 00 */ cmpw r11, r31 +/* 0001CC98 00029A28 40 82 CC 78 */ bne .L_00019910 +/* 0001CC9C 00029A2C 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@ha +/* 0001CCA0 00029A30 38 A9 00 00 */ addi r5, r9, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@l +/* 0001CCA4 00029A34 81 49 00 00 */ lwz r10, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@l(r9) +.L_0001CCA8: +/* 0001CCA8 00029A38 81 05 00 08 */ lwz r8, 0x8(r5) +/* 0001CCAC 00029A3C 55 00 10 3A */ slwi r0, r8, 2 +/* 0001CCB0 00029A40 7D 6A 02 14 */ add r11, r10, r0 +/* 0001CCB4 00029A44 7C 03 58 00 */ cmpw r3, r11 +/* 0001CCB8 00029A48 41 82 CD 30 */ beq .L_000199E8 +/* 0001CCBC 00029A4C 7D 23 58 50 */ subf r9, r3, r11 +/* 0001CCC0 00029A50 7C 0A 18 50 */ subf r0, r10, r3 +/* 0001CCC4 00029A54 7D 3F 16 70 */ srawi r31, r9, 2 +/* 0001CCC8 00029A58 7C 06 16 70 */ srawi r6, r0, 2 +/* 0001CCCC 00029A5C 7D 09 43 78 */ mr r9, r8 +/* 0001CCD0 00029A60 38 63 00 04 */ addi r3, r3, 0x4 +/* 0001CCD4 00029A64 7C 03 58 00 */ cmpw r3, r11 +/* 0001CCD8 00029A68 40 82 CC D0 */ bne .L_000199A8 +.L_0001CCDC: +/* 0001CCDC 00029A6C 7C E6 FA 14 */ add r7, r6, r31 +/* 0001CCE0 00029A70 39 00 00 00 */ li r8, 0x0 +/* 0001CCE4 00029A74 7C E4 3B 78 */ mr r4, r7 +/* 0001CCE8 00029A78 7C 04 48 50 */ subf r0, r4, r9 +/* 0001CCEC 00029A7C 7C 08 00 40 */ cmplw r8, r0 +/* 0001CCF0 00029A80 40 80 CD 28 */ bge .L_00019A18 +/* 0001CCF4 00029A84 7C 06 42 14 */ add r0, r6, r8 +/* 0001CCF8 00029A88 81 65 00 00 */ lwz r11, 0x0(r5) +/* 0001CCFC 00029A8C 54 0A 10 3A */ slwi r10, r0, 2 +/* 0001CD00 00029A90 7D 27 42 14 */ add r9, r7, r8 +/* 0001CD04 00029A94 7C 0A 5A 14 */ add r0, r10, r11 +/* 0001CD08 00029A98 2C 00 00 00 */ cmpwi r0, 0x0 +/* 0001CD0C 00029A9C 41 82 CD 1C */ beq .L_00019A28 +/* 0001CD10 00029AA0 55 29 10 3A */ slwi r9, r9, 2 +/* 0001CD14 00029AA4 7C 09 58 2E */ lwzx r0, r9, r11 +/* 0001CD18 00029AA8 7C 0A 59 2E */ stwx r0, r10, r11 +/* 0001CD1C 00029AAC 39 08 00 01 */ addi r8, r8, 0x1 +/* 0001CD20 00029AB0 81 25 00 08 */ lwz r9, 0x8(r5) +/* 0001CD24 00029AB4 48 01 CC E8 */ b .text+0x1CCE8 +/* 0001CD28 00029AB8 7C 1F 48 50 */ subf r0, r31, r9 +/* 0001CD2C 00029ABC 90 05 00 08 */ stw r0, 0x8(r5) +/* 0001CD30 00029AC0 3D 20 00 00 */ lis r9, _vt.Q33UTL3COM8IUnknown@ha +/* 0001CD34 00029AC4 80 7D 00 00 */ lwz r3, 0x0(r29) +/* 0001CD38 00029AC8 39 29 00 00 */ addi r9, r9, _vt.Q33UTL3COM8IUnknown@l +.L_0001CD3C: +/* 0001CD3C 00029ACC 7F A4 EB 78 */ mr r4, r29 +/* 0001CD40 00029AD0 91 3D 00 04 */ stw r9, 0x4(r29) +/* 0001CD44 00029AD4 48 00 00 01 */ bl Remove__Q43UTL3COM6Object6_IListPQ33UTL3COM8IUnknown +/* 0001CD48 00029AD8 73 80 00 01 */ andi. r0, r28, 0x1 +/* 0001CD4C 00029ADC 41 82 CD 58 */ beq .L_00019AA4 +/* 0001CD50 00029AE0 7F A3 EB 78 */ mr r3, r29 +/* 0001CD54 00029AE4 48 00 00 01 */ bl __builtin_delete +/* 0001CD58 00029AE8 80 01 00 24 */ lwz r0, 0x24(r1) +/* 0001CD5C 00029AEC 7C 08 03 A6 */ mtlr r0 +/* 0001CD60 00029AF0 BB 81 00 10 */ lmw r28, 0x10(r1) +/* 0001CD64 00029AF4 38 21 00 20 */ addi r1, r1, 0x20 +/* 0001CD68 00029AF8 4E 80 00 20 */ blr +.endfn _._14IDebugWatchCar + +# .text:0x1CD6C | size: 0x8 +# CDActionDebugWatchCar::GetMover +.fn GetMover__21CDActionDebugWatchCar, global +/* 0001CD6C 00029AFC 80 63 00 2C */ lwz r3, 0x2c(r3) +/* 0001CD70 00029B00 4E 80 00 20 */ blr +.endfn GetMover__21CDActionDebugWatchCar + +# .text:0x1CD74 | size: 0x4 +.fn SetSpecial__21CDActionDebugWatchCarf, global +/* 0001CD74 00029B04 4E 80 00 20 */ blr +.endfn SetSpecial__21CDActionDebugWatchCarf + +# .text:0x1CD78 | size: 0x4 +# CDActionDebugWatchCar::Reset +.fn Reset__21CDActionDebugWatchCar, global +/* 0001CD78 00029B08 4E 80 00 20 */ blr +.endfn Reset__21CDActionDebugWatchCar + +# .text:0x1CD7C | size: 0xB4 +.fn __t8tAverage1Z8bVector3i, global +/* 0001CD7C 00029B0C 94 21 FF E8 */ stwu r1, -0x18(r1) +.L_0001CD80: +/* 0001CD80 00029B10 7C 08 02 A6 */ mflr r0 +/* 0001CD84 00029B14 BF A1 00 0C */ stmw r29, 0xc(r1) +/* 0001CD88 00029B18 90 01 00 1C */ stw r0, 0x1c(r1) +/* 0001CD8C 00029B1C 7C 9E 23 78 */ mr r30, r4 +/* 0001CD90 00029B20 7C 7F 1B 78 */ mr r31, r3 +/* 0001CD94 00029B24 38 80 00 10 */ li r4, 0x10 +.L_0001CD98: +/* 0001CD98 00029B28 7F C5 F3 78 */ mr r5, r30 +/* 0001CD9C 00029B2C 3B BF 00 08 */ addi r29, r31, 0x8 +/* 0001CDA0 00029B30 48 00 00 01 */ bl __11AverageBaseii +/* 0001CDA4 00029B34 3D 20 00 00 */ lis r9, _vt.t8tAverage1Z8bVector3@ha +/* 0001CDA8 00029B38 57 C3 20 36 */ slwi r3, r30, 4 +/* 0001CDAC 00029B3C 39 29 00 00 */ addi r9, r9, _vt.t8tAverage1Z8bVector3@l +/* 0001CDB0 00029B40 91 3F 00 04 */ stw r9, 0x4(r31) +/* 0001CDB4 00029B44 48 00 00 01 */ bl __builtin_vec_new +/* 0001CDB8 00029B48 2C 1E 00 00 */ cmpwi r30, 0x0 +/* 0001CDBC 00029B4C 39 3E FF FF */ subi r9, r30, 0x1 +/* 0001CDC0 00029B50 41 82 CD D0 */ beq .L_00019B90 +/* 0001CDC4 00029B54 2C 09 00 00 */ cmpwi r9, 0x0 +/* 0001CDC8 00029B58 39 29 FF FF */ subi r9, r9, 0x1 +.L_0001CDCC: +/* 0001CDCC 00029B5C 40 82 CD C4 */ bne .L_00019B90 +/* 0001CDD0 00029B60 90 7D 00 00 */ stw r3, 0x0(r29) +/* 0001CDD4 00029B64 57 C5 20 36 */ slwi r5, r30, 4 +/* 0001CDD8 00029B68 38 80 00 00 */ li r4, 0x0 +/* 0001CDDC 00029B6C 80 7F 00 08 */ lwz r3, 0x8(r31) +/* 0001CDE0 00029B70 48 00 00 01 */ bl bMemSet +/* 0001CDE4 00029B74 81 3F 00 08 */ lwz r9, 0x8(r31) +/* 0001CDE8 00029B78 7F E3 FB 78 */ mr r3, r31 +.L_0001CDEC: +/* 0001CDEC 00029B7C C0 09 00 00 */ lfs f0, 0x0(r9) +/* 0001CDF0 00029B80 C1 A9 00 04 */ lfs f13, 0x4(r9) +/* 0001CDF4 00029B84 C1 89 00 08 */ lfs f12, 0x8(r9) +/* 0001CDF8 00029B88 D0 1F 00 1C */ stfs f0, 0x1c(r31) +/* 0001CDFC 00029B8C D1 BF 00 20 */ stfs f13, 0x20(r31) +/* 0001CE00 00029B90 D1 9F 00 24 */ stfs f12, 0x24(r31) +/* 0001CE04 00029B94 C1 69 00 08 */ lfs f11, 0x8(r9) +/* 0001CE08 00029B98 C0 09 00 00 */ lfs f0, 0x0(r9) +/* 0001CE0C 00029B9C C1 A9 00 04 */ lfs f13, 0x4(r9) +/* 0001CE10 00029BA0 D0 1F 00 0C */ stfs f0, 0xc(r31) +/* 0001CE14 00029BA4 D1 BF 00 10 */ stfs f13, 0x10(r31) +/* 0001CE18 00029BA8 D1 7F 00 14 */ stfs f11, 0x14(r31) +/* 0001CE1C 00029BAC 80 01 00 1C */ lwz r0, 0x1c(r1) +/* 0001CE20 00029BB0 7C 08 03 A6 */ mtlr r0 +/* 0001CE24 00029BB4 BB A1 00 0C */ lmw r29, 0xc(r1) +/* 0001CE28 00029BB8 38 21 00 18 */ addi r1, r1, 0x18 +/* 0001CE2C 00029BBC 4E 80 00 20 */ blr +.endfn __t8tAverage1Z8bVector3i + +# .text:0x1CE30 | size: 0x8 +.fn GetValue__t8tAverage1Z8bVector3, global +/* 0001CE30 00029BC0 38 63 00 1C */ addi r3, r3, 0x1c +/* 0001CE34 00029BC4 4E 80 00 20 */ blr +.endfn GetValue__t8tAverage1Z8bVector3 + +# .text:0x1CE38 | size: 0x8 +# SelectCarCameraMover::GetTotalAnimationTime +.fn GetTotalAnimationTime__20SelectCarCameraMover, global +/* 0001CE38 00029BC8 C0 23 01 10 */ lfs f1, 0x110(r3) +/* 0001CE3C 00029BCC 4E 80 00 20 */ blr +.endfn GetTotalAnimationTime__20SelectCarCameraMover + +# .text:0x1CE40 | size: 0x8 +# SelectCarCameraMover::GetCurrentAnimationTime +.fn GetCurrentAnimationTime__20SelectCarCameraMover, global +/* 0001CE40 00029BD0 C0 23 01 0C */ lfs f1, 0x10c(r3) +/* 0001CE44 00029BD4 4E 80 00 20 */ blr +.endfn GetCurrentAnimationTime__20SelectCarCameraMover + +# .text:0x1CE48 | size: 0x8 +# SelectCarCameraMover::GetVAngle +.fn GetVAngle__20SelectCarCameraMover, global +/* 0001CE48 00029BD8 C0 23 00 8C */ lfs f1, 0x8c(r3) +/* 0001CE4C 00029BDC 4E 80 00 20 */ blr +.endfn GetVAngle__20SelectCarCameraMover + +# .text:0x1CE50 | size: 0x8 +# SelectCarCameraMover::GetHAngle +.fn GetHAngle__20SelectCarCameraMover, global +/* 0001CE50 00029BE0 C0 23 00 90 */ lfs f1, 0x90(r3) +/* 0001CE54 00029BE4 4E 80 00 20 */ blr +.endfn GetHAngle__20SelectCarCameraMover + +# .text:0x1CE58 | size: 0x8 +# SelectCarCameraMover::GetZoom +.fn GetZoom__20SelectCarCameraMover, global +/* 0001CE58 00029BE8 C0 23 00 94 */ lfs f1, 0x94(r3) +/* 0001CE5C 00029BEC 4E 80 00 20 */ blr +.endfn GetZoom__20SelectCarCameraMover + +# .text:0x1CE60 | size: 0x80 +.fn _._t8tAverage1Z8bVector3, global +/* 0001CE60 00029BF0 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 0001CE64 00029BF4 7C 08 02 A6 */ mflr r0 +/* 0001CE68 00029BF8 BF C1 00 08 */ stmw r30, 0x8(r1) +/* 0001CE6C 00029BFC 90 01 00 14 */ stw r0, 0x14(r1) +/* 0001CE70 00029C00 7C 7F 1B 78 */ mr r31, r3 +/* 0001CE74 00029C04 7C 9E 23 78 */ mr r30, r4 +/* 0001CE78 00029C08 88 BF 00 01 */ lbz r5, 0x1(r31) +/* 0001CE7C 00029C0C 3D 20 00 00 */ lis r9, _vt.t8tAverage1Z8bVector3@ha +/* 0001CE80 00029C10 39 29 00 00 */ addi r9, r9, _vt.t8tAverage1Z8bVector3@l +/* 0001CE84 00029C14 80 9F 00 08 */ lwz r4, 0x8(r31) +/* 0001CE88 00029C18 91 3F 00 04 */ stw r9, 0x4(r31) +/* 0001CE8C 00029C1C 54 A5 20 36 */ slwi r5, r5, 4 +/* 0001CE90 00029C20 38 C0 00 00 */ li r6, 0x0 +/* 0001CE94 00029C24 48 00 00 01 */ bl DeAllocate__11AverageBasePvUiPCc +/* 0001CE98 00029C28 3D 20 00 00 */ lis r9, _vt.11AverageBase@ha +/* 0001CE9C 00029C2C 73 C0 00 01 */ andi. r0, r30, 0x1 +/* 0001CEA0 00029C30 39 29 00 00 */ addi r9, r9, _vt.11AverageBase@l +/* 0001CEA4 00029C34 91 3F 00 04 */ stw r9, 0x4(r31) +/* 0001CEA8 00029C38 41 82 CE CC */ beq .L_00019D74 +/* 0001CEAC 00029C3C 2C 1F 00 00 */ cmpwi r31, 0x0 +/* 0001CEB0 00029C40 41 82 CE CC */ beq .L_00019D7C +/* 0001CEB4 00029C44 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0001CEB8 00029C48 7F E4 FB 78 */ mr r4, r31 +/* 0001CEBC 00029C4C 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0001CEC0 00029C50 38 A0 00 2C */ li r5, 0x2c +/* 0001CEC4 00029C54 38 C0 00 00 */ li r6, 0x0 +/* 0001CEC8 00029C58 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 0001CECC 00029C5C 80 01 00 14 */ lwz r0, 0x14(r1) +/* 0001CED0 00029C60 7C 08 03 A6 */ mtlr r0 +/* 0001CED4 00029C64 BB C1 00 08 */ lmw r30, 0x8(r1) +/* 0001CED8 00029C68 38 21 00 10 */ addi r1, r1, 0x10 +/* 0001CEDC 00029C6C 4E 80 00 20 */ blr +.endfn _._t8tAverage1Z8bVector3 + +# .text:0x1CEE0 | size: 0xFC +.fn Recalculate__t8tAverage1Z8bVector3, global +/* 0001CEE0 00029C70 94 21 FF D0 */ stwu r1, -0x30(r1) +/* 0001CEE4 00029C74 3D 20 00 00 */ lis r9, .rodata+0x1964@ha +/* 0001CEE8 00029C78 88 03 00 02 */ lbz r0, 0x2(r3) +/* 0001CEEC 00029C7C C0 09 19 64 */ lfs f0, .rodata+0x1964@l(r9) +/* 0001CEF0 00029C80 39 40 00 00 */ li r10, 0x0 +/* 0001CEF4 00029C84 38 E1 00 08 */ addi r7, r1, 0x8 +/* 0001CEF8 00029C88 7C 0A 00 00 */ cmpw r10, r0 +/* 0001CEFC 00029C8C D0 03 00 14 */ stfs f0, 0x14(r3) +/* 0001CF00 00029C90 D0 03 00 0C */ stfs f0, 0xc(r3) +/* 0001CF04 00029C94 D0 03 00 10 */ stfs f0, 0x10(r3) +/* 0001CF08 00029C98 40 80 CF 54 */ bge .L_00019E5C +/* 0001CF0C 00029C9C 81 03 00 08 */ lwz r8, 0x8(r3) +.L_0001CF10: +/* 0001CF10 00029CA0 55 49 20 36 */ slwi r9, r10, 4 +/* 0001CF14 00029CA4 C1 83 00 0C */ lfs f12, 0xc(r3) +/* 0001CF18 00029CA8 7C 09 44 2E */ lfsx f0, r9, r8 +/* 0001CF1C 00029CAC 7D 69 42 14 */ add r11, r9, r8 +/* 0001CF20 00029CB0 C1 4B 00 08 */ lfs f10, 0x8(r11) +/* 0001CF24 00029CB4 39 4A 00 01 */ addi r10, r10, 0x1 +.L_0001CF28: +/* 0001CF28 00029CB8 ED 8C 00 2A */ fadds f12, f12, f0 +/* 0001CF2C 00029CBC C1 6B 00 04 */ lfs f11, 0x4(r11) +/* 0001CF30 00029CC0 C1 A3 00 10 */ lfs f13, 0x10(r3) +/* 0001CF34 00029CC4 7C 0A 00 00 */ cmpw r10, r0 +/* 0001CF38 00029CC8 C0 03 00 14 */ lfs f0, 0x14(r3) +/* 0001CF3C 00029CCC ED AD 58 2A */ fadds f13, f13, f11 +/* 0001CF40 00029CD0 D1 83 00 0C */ stfs f12, 0xc(r3) +/* 0001CF44 00029CD4 EC 00 50 2A */ fadds f0, f0, f10 +/* 0001CF48 00029CD8 D1 A3 00 10 */ stfs f13, 0x10(r3) +/* 0001CF4C 00029CDC D0 03 00 14 */ stfs f0, 0x14(r3) +/* 0001CF50 00029CE0 41 80 CF 10 */ blt .L_00019E60 +/* 0001CF54 00029CE4 88 03 00 02 */ lbz r0, 0x2(r3) +.L_0001CF58: +/* 0001CF58 00029CE8 2C 00 00 01 */ cmpwi r0, 0x1 +/* 0001CF5C 00029CEC 40 80 CF 64 */ bge .L_00019EC0 +/* 0001CF60 00029CF0 38 00 00 01 */ li r0, 0x1 +/* 0001CF64 00029CF4 6C 00 80 00 */ xoris r0, r0, 0x8000 +/* 0001CF68 00029CF8 90 01 00 2C */ stw r0, 0x2c(r1) +/* 0001CF6C 00029CFC 3D 60 43 30 */ lis r11, 0x4330 +/* 0001CF70 00029D00 3D 40 00 00 */ lis r10, .rodata+0x1968@ha +/* 0001CF74 00029D04 3D 00 00 00 */ lis r8, .rodata+0x1970@ha +/* 0001CF78 00029D08 91 61 00 28 */ stw r11, 0x28(r1) +/* 0001CF7C 00029D0C C9 AA 19 68 */ lfd f13, .rodata+0x1968@l(r10) +/* 0001CF80 00029D10 C8 01 00 28 */ lfd f0, 0x28(r1) +/* 0001CF84 00029D14 C1 88 19 70 */ lfs f12, .rodata+0x1970@l(r8) +.L_0001CF88: +/* 0001CF88 00029D18 FC 00 68 28 */ fsub f0, f0, f13 +/* 0001CF8C 00029D1C C1 63 00 0C */ lfs f11, 0xc(r3) +/* 0001CF90 00029D20 FC 00 00 18 */ frsp f0, f0 +.L_0001CF94: +/* 0001CF94 00029D24 C1 43 00 10 */ lfs f10, 0x10(r3) +/* 0001CF98 00029D28 ED 8C 00 24 */ fdivs f12, f12, f0 +/* 0001CF9C 00029D2C C1 A3 00 14 */ lfs f13, 0x14(r3) +/* 0001CFA0 00029D30 ED 6B 03 32 */ fmuls f11, f11, f12 +/* 0001CFA4 00029D34 ED 4A 03 32 */ fmuls f10, f10, f12 +.L_0001CFA8: +/* 0001CFA8 00029D38 D1 61 00 18 */ stfs f11, 0x18(r1) +/* 0001CFAC 00029D3C ED AD 03 32 */ fmuls f13, f13, f12 +/* 0001CFB0 00029D40 D1 41 00 1C */ stfs f10, 0x1c(r1) +.L_0001CFB4: +/* 0001CFB4 00029D44 D1 A1 00 10 */ stfs f13, 0x10(r1) +/* 0001CFB8 00029D48 D1 A1 00 20 */ stfs f13, 0x20(r1) +/* 0001CFBC 00029D4C D1 61 00 08 */ stfs f11, 0x8(r1) +/* 0001CFC0 00029D50 D1 41 00 0C */ stfs f10, 0xc(r1) +/* 0001CFC4 00029D54 D1 63 00 1C */ stfs f11, 0x1c(r3) +/* 0001CFC8 00029D58 C0 07 00 08 */ lfs f0, 0x8(r7) +/* 0001CFCC 00029D5C D1 43 00 20 */ stfs f10, 0x20(r3) +/* 0001CFD0 00029D60 D0 03 00 24 */ stfs f0, 0x24(r3) +/* 0001CFD4 00029D64 38 21 00 30 */ addi r1, r1, 0x30 +/* 0001CFD8 00029D68 4E 80 00 20 */ blr +.endfn Recalculate__t8tAverage1Z8bVector3 + +# .text:0x1CFDC | size: 0x4C +# TableBase::CalcIndexMultiplier +.fn CalcIndexMultiplier__9TableBase, weak +/* 0001CFDC 00029D6C 94 21 FF F0 */ stwu r1, -0x10(r1) +.L_0001CFE0: +/* 0001CFE0 00029D70 81 23 00 00 */ lwz r9, 0x0(r3) +/* 0001CFE4 00029D74 C0 03 00 04 */ lfs f0, 0x4(r3) +/* 0001CFE8 00029D78 3C 00 43 30 */ lis r0, 0x4330 +/* 0001CFEC 00029D7C 39 29 FF FF */ subi r9, r9, 0x1 +/* 0001CFF0 00029D80 C1 A3 00 08 */ lfs f13, 0x8(r3) +/* 0001CFF4 00029D84 6D 29 80 00 */ xoris r9, r9, 0x8000 +/* 0001CFF8 00029D88 3D 40 00 00 */ lis r10, .rodata+0x1A28@ha +/* 0001CFFC 00029D8C 91 21 00 0C */ stw r9, 0xc(r1) +/* 0001D000 00029D90 ED AD 00 28 */ fsubs f13, f13, f0 +/* 0001D004 00029D94 C9 8A 1A 28 */ lfd f12, .rodata+0x1A28@l(r10) +/* 0001D008 00029D98 90 01 00 08 */ stw r0, 0x8(r1) +/* 0001D00C 00029D9C C8 01 00 08 */ lfd f0, 0x8(r1) +/* 0001D010 00029DA0 FC 00 60 28 */ fsub f0, f0, f12 +/* 0001D014 00029DA4 FC 00 00 18 */ frsp f0, f0 +/* 0001D018 00029DA8 EC 00 68 24 */ fdivs f0, f0, f13 +/* 0001D01C 00029DAC D0 03 00 0C */ stfs f0, 0xc(r3) +/* 0001D020 00029DB0 38 21 00 10 */ addi r1, r1, 0x10 +/* 0001D024 00029DB4 4E 80 00 20 */ blr +.endfn CalcIndexMultiplier__9TableBase + +# .text:0x1D028 | size: 0x54 +.fn _._11AverageBase, weak +/* 0001D028 00029DB8 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0001D02C 00029DBC 7C 08 02 A6 */ mflr r0 +.L_0001D030: +/* 0001D030 00029DC0 90 01 00 0C */ stw r0, 0xc(r1) +/* 0001D034 00029DC4 3D 20 00 00 */ lis r9, _vt.11AverageBase@ha +/* 0001D038 00029DC8 7C 6B 1B 78 */ mr r11, r3 +/* 0001D03C 00029DCC 39 29 00 00 */ addi r9, r9, _vt.11AverageBase@l +/* 0001D040 00029DD0 70 80 00 01 */ andi. r0, r4, 0x1 +/* 0001D044 00029DD4 91 2B 00 04 */ stw r9, 0x4(r11) +/* 0001D048 00029DD8 41 82 D0 6C */ beq .L_0001A0B4 +/* 0001D04C 00029DDC 2C 0B 00 00 */ cmpwi r11, 0x0 +/* 0001D050 00029DE0 41 82 D0 6C */ beq .L_0001A0BC +/* 0001D054 00029DE4 3C 60 00 00 */ lis r3, gFastMem@ha +/* 0001D058 00029DE8 7D 64 5B 78 */ mr r4, r11 +/* 0001D05C 00029DEC 38 63 00 00 */ addi r3, r3, gFastMem@l +/* 0001D060 00029DF0 38 A0 00 08 */ li r5, 0x8 +/* 0001D064 00029DF4 38 C0 00 00 */ li r6, 0x0 +.L_0001D068: +/* 0001D068 00029DF8 48 00 00 01 */ bl Free__7FastMemPvUiPCc +/* 0001D06C 00029DFC 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0001D070 00029E00 7C 08 03 A6 */ mtlr r0 +/* 0001D074 00029E04 38 21 00 08 */ addi r1, r1, 0x8 +/* 0001D078 00029E08 4E 80 00 20 */ blr +.endfn _._11AverageBase + +# .text:0x1D07C | size: 0x4 +# AverageBase::Recalculate +.fn Recalculate__11AverageBase, weak +/* 0001D07C 00029E0C 4E 80 00 20 */ blr +.endfn Recalculate__11AverageBase + +# .text:0x1D080 | size: 0x4 +.fn OnGrowRequest__Q23UTLt6Vector2ZPQ28CameraAI8Directori16Ui, weak +/* 0001D080 00029E10 4E 80 00 20 */ blr +.endfn OnGrowRequest__Q23UTLt6Vector2ZPQ28CameraAI8Directori16Ui + +# .text:0x1D084 | size: 0xB4 +.fn _._Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16, weak +/* 0001D084 00029E14 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 0001D088 00029E18 7C 08 02 A6 */ mflr r0 +/* 0001D08C 00029E1C BF C1 00 08 */ stmw r30, 0x8(r1) +/* 0001D090 00029E20 90 01 00 14 */ stw r0, 0x14(r1) +/* 0001D094 00029E24 7C 7F 1B 78 */ mr r31, r3 +/* 0001D098 00029E28 3D 20 00 00 */ lis r9, _vt.Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16@ha +/* 0001D09C 00029E2C 80 1F 00 08 */ lwz r0, 0x8(r31) +/* 0001D0A0 00029E30 39 29 00 00 */ addi r9, r9, _vt.Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16@l +/* 0001D0A4 00029E34 39 60 00 00 */ li r11, 0x0 +/* 0001D0A8 00029E38 7C 9E 23 78 */ mr r30, r4 +/* 0001D0AC 00029E3C 91 3F 00 0C */ stw r9, 0xc(r31) +/* 0001D0B0 00029E40 7C 0B 00 00 */ cmpw r11, r0 +/* 0001D0B4 00029E44 40 80 D0 D0 */ bge .L_0001A184 +/* 0001D0B8 00029E48 7C 09 03 78 */ mr r9, r0 +/* 0001D0BC 00029E4C 39 6B 00 01 */ addi r11, r11, 0x1 +/* 0001D0C0 00029E50 39 29 FF FF */ subi r9, r9, 0x1 +/* 0001D0C4 00029E54 7C 0B 00 00 */ cmpw r11, r0 +/* 0001D0C8 00029E58 41 80 D0 BC */ blt .L_0001A184 +/* 0001D0CC 00029E5C 91 3F 00 08 */ stw r9, 0x8(r31) +/* 0001D0D0 00029E60 80 9F 00 00 */ lwz r4, 0x0(r31) +/* 0001D0D4 00029E64 2C 04 00 00 */ cmpwi r4, 0x0 +/* 0001D0D8 00029E68 41 82 D1 08 */ beq .L_0001A1E0 +/* 0001D0DC 00029E6C 81 3F 00 0C */ lwz r9, 0xc(r31) +/* 0001D0E0 00029E70 80 BF 00 04 */ lwz r5, 0x4(r31) +/* 0001D0E4 00029E74 80 09 00 1C */ lwz r0, 0x1c(r9) +/* 0001D0E8 00029E78 A8 69 00 18 */ lha r3, 0x18(r9) +/* 0001D0EC 00029E7C 7C 08 03 A6 */ mtlr r0 +/* 0001D0F0 00029E80 7C 7F 1A 14 */ add r3, r31, r3 +/* 0001D0F4 00029E84 4E 80 00 21 */ blrl +/* 0001D0F8 00029E88 38 00 00 00 */ li r0, 0x0 +/* 0001D0FC 00029E8C 90 1F 00 08 */ stw r0, 0x8(r31) +/* 0001D100 00029E90 90 1F 00 00 */ stw r0, 0x0(r31) +/* 0001D104 00029E94 90 1F 00 04 */ stw r0, 0x4(r31) +/* 0001D108 00029E98 3D 20 00 00 */ lis r9, _vt.Q23UTLt6Vector2ZPQ28CameraAI8Directori16@ha +/* 0001D10C 00029E9C 73 C0 00 01 */ andi. r0, r30, 0x1 +/* 0001D110 00029EA0 39 29 00 00 */ addi r9, r9, _vt.Q23UTLt6Vector2ZPQ28CameraAI8Directori16@l +/* 0001D114 00029EA4 91 3F 00 0C */ stw r9, 0xc(r31) +/* 0001D118 00029EA8 41 82 D1 24 */ beq .L_0001A23C +/* 0001D11C 00029EAC 7F E3 FB 78 */ mr r3, r31 +/* 0001D120 00029EB0 48 00 00 01 */ bl __builtin_delete +/* 0001D124 00029EB4 80 01 00 14 */ lwz r0, 0x14(r1) +/* 0001D128 00029EB8 7C 08 03 A6 */ mtlr r0 +/* 0001D12C 00029EBC BB C1 00 08 */ lmw r30, 0x8(r1) +/* 0001D130 00029EC0 38 21 00 10 */ addi r1, r1, 0x10 +/* 0001D134 00029EC4 4E 80 00 20 */ blr +.endfn _._Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16 + +# .text:0x1D138 | size: 0x8 +.fn AllocVectorSpace__Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16UiUi, weak +/* 0001D138 00029EC8 38 63 00 10 */ addi r3, r3, 0x10 +/* 0001D13C 00029ECC 4E 80 00 20 */ blr +.endfn AllocVectorSpace__Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16UiUi + +# .text:0x1D140 | size: 0x4 +.fn FreeVectorSpace__Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16PPQ28CameraAI8DirectorUi, weak +/* 0001D140 00029ED0 4E 80 00 20 */ blr +.endfn FreeVectorSpace__Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16PPQ28CameraAI8DirectorUi + +# .text:0x1D144 | size: 0x8 +.fn GetGrowSize__CQ23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16Ui, weak +/* 0001D144 00029ED4 38 60 00 02 */ li r3, 0x2 +/* 0001D148 00029ED8 4E 80 00 20 */ blr +.endfn GetGrowSize__CQ23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16Ui + +# .text:0x1D14C | size: 0x8 +.fn GetMaxCapacity__CQ23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16, weak +/* 0001D14C 00029EDC 38 60 00 02 */ li r3, 0x2 +/* 0001D150 00029EE0 4E 80 00 20 */ blr +.endfn GetMaxCapacity__CQ23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16 + +# .text:0x1D154 | size: 0x20 +.fn GetGrowSize__CQ23UTLt6Vector2ZPQ28CameraAI8Directori16Ui, weak +/* 0001D154 00029EE4 81 23 00 04 */ lwz r9, 0x4(r3) +/* 0001D158 00029EE8 38 09 00 01 */ addi r0, r9, 0x1 +/* 0001D15C 00029EEC 54 00 F8 7E */ srwi r0, r0, 1 +/* 0001D160 00029EF0 7C 69 02 14 */ add r3, r9, r0 +/* 0001D164 00029EF4 7C 03 20 40 */ cmplw r3, r4 +/* 0001D168 00029EF8 4C 80 00 20 */ bgelr +/* 0001D16C 00029EFC 7C 83 23 78 */ mr r3, r4 +/* 0001D170 00029F00 4E 80 00 20 */ blr +.endfn GetGrowSize__CQ23UTLt6Vector2ZPQ28CameraAI8Directori16Ui + +# .text:0x1D174 | size: 0x8 +.fn AllocVectorSpace__Q23UTLt6Vector2ZPQ28CameraAI8Directori16UiUi, weak +/* 0001D174 00029F04 38 60 00 00 */ li r3, 0x0 +/* 0001D178 00029F08 4E 80 00 20 */ blr +.endfn AllocVectorSpace__Q23UTLt6Vector2ZPQ28CameraAI8Directori16UiUi + +# .text:0x1D17C | size: 0x4 +.fn FreeVectorSpace__Q23UTLt6Vector2ZPQ28CameraAI8Directori16PPQ28CameraAI8DirectorUi, weak +/* 0001D17C 00029F0C 4E 80 00 20 */ blr +.endfn FreeVectorSpace__Q23UTLt6Vector2ZPQ28CameraAI8Directori16PPQ28CameraAI8DirectorUi + +# .text:0x1D180 | size: 0x34 +.fn _._Q23UTLt6Vector2ZPQ28CameraAI8Directori16, weak +/* 0001D180 00029F10 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0001D184 00029F14 7C 08 02 A6 */ mflr r0 +/* 0001D188 00029F18 90 01 00 0C */ stw r0, 0xc(r1) +/* 0001D18C 00029F1C 3D 20 00 00 */ lis r9, _vt.Q23UTLt6Vector2ZPQ28CameraAI8Directori16@ha +/* 0001D190 00029F20 70 80 00 01 */ andi. r0, r4, 0x1 +/* 0001D194 00029F24 39 29 00 00 */ addi r9, r9, _vt.Q23UTLt6Vector2ZPQ28CameraAI8Directori16@l +/* 0001D198 00029F28 91 23 00 0C */ stw r9, 0xc(r3) +/* 0001D19C 00029F2C 41 82 D1 A4 */ beq .L_0001A340 +/* 0001D1A0 00029F30 48 00 00 01 */ bl __builtin_delete +/* 0001D1A4 00029F34 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0001D1A8 00029F38 7C 08 03 A6 */ mtlr r0 +/* 0001D1AC 00029F3C 38 21 00 08 */ addi r1, r1, 0x8 +/* 0001D1B0 00029F40 4E 80 00 20 */ blr +.endfn _._Q23UTLt6Vector2ZPQ28CameraAI8Directori16 + +# .text:0x1D1B4 | size: 0xC +.fn GetMaxCapacity__CQ23UTLt6Vector2ZPQ28CameraAI8Directori16, weak +/* 0001D1B4 00029F44 3C 60 7F FF */ lis r3, 0x7fff +/* 0001D1B8 00029F48 60 63 FF FF */ ori r3, r3, 0xffff +/* 0001D1BC 00029F4C 4E 80 00 20 */ blr +.endfn GetMaxCapacity__CQ23UTLt6Vector2ZPQ28CameraAI8Directori16 + +# .text:0x1D1C0 | size: 0x2C +# Camera::_GLOBAL_.I. +.fn _GLOBAL_.I.__6Camera, local +/* 0001D1C0 00029F50 94 21 FF F8 */ stwu r1, -0x8(r1) +/* 0001D1C4 00029F54 7C 08 02 A6 */ mflr r0 +/* 0001D1C8 00029F58 90 01 00 0C */ stw r0, 0xc(r1) +/* 0001D1CC 00029F5C 38 80 00 00 */ li r4, 0x0 +/* 0001D1D0 00029F60 38 60 00 01 */ li r3, 0x1 +/* 0001D1D4 00029F64 60 84 FF FF */ ori r4, r4, 0xffff +/* 0001D1D8 00029F68 48 01 B9 89 */ bl .text+0x1B988 +/* 0001D1DC 00029F6C 80 01 00 0C */ lwz r0, 0xc(r1) +/* 0001D1E0 00029F70 7C 08 03 A6 */ mtlr r0 +/* 0001D1E4 00029F74 38 21 00 08 */ addi r1, r1, 0x8 +/* 0001D1E8 00029F78 4E 80 00 20 */ blr +.endfn _GLOBAL_.I.__6Camera + +# 0x00000000..0x00001A70 | size: 0x1A70 +.rodata +.balign 8 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0xBF800000 + .4byte 0x42C80000 + .4byte 0x44960000 + .4byte 0x41200000 + .4byte 0x3F000000 + .4byte 0x461C4000 + .4byte 0x00000000 + .4byte 0x43300000 + .4byte 0x80000000 + .4byte 0x30800000 + .4byte 0x3F800000 + .4byte 0x43300000 + .4byte 0x80000000 + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x3F000000 + .4byte 0x4A523253 + .4byte 0x65727665 + .4byte 0x72000000 + .4byte 0x42C80000 + .4byte 0x3F800000 + .4byte 0x3C23D70A + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x43300000 + .4byte 0x00000000 + .4byte 0x47800000 + .4byte 0x6261645F + .4byte 0x616C6C6F + .4byte 0x63000000 + .4byte 0x76656374 + .4byte 0x6F720000 + .4byte 0x6C697374 + .4byte 0x00000000 + .4byte 0x6D617000 + .4byte 0x73657400 + .4byte 0x55436F6D + .4byte 0x4F626A65 + .4byte 0x63740000 + .4byte 0x41747472 + .4byte 0x69623A3A + .4byte 0x436F6C6C + .4byte 0x65637469 + .4byte 0x6F6E4861 + .4byte 0x73684D61 + .4byte 0x70000000 + .4byte 0x41747472 + .4byte 0x69623A3A + .4byte 0x44617461 + .4byte 0x62617365 + .4byte 0x00000000 + .4byte 0x41747472 + .4byte 0x69623A3A + .4byte 0x41727261 + .4byte 0x79000000 + .4byte 0x41747472 + .4byte 0x69623A3A + .4byte 0x436C6173 + .4byte 0x73000000 + .4byte 0x52656653 + .4byte 0x70656300 + .4byte 0x41747472 + .4byte 0x69623A3A + .4byte 0x41747472 + .4byte 0x69627574 + .4byte 0x65000000 + .4byte 0x41747472 + .4byte 0x69623A3A + .4byte 0x496E7374 + .4byte 0x616E6365 + .4byte 0x00000000 + .4byte 0x41747472 + .4byte 0x69623A3A + .4byte 0x48617368 + .4byte 0x4D617054 + .4byte 0x61626C65 + .4byte 0x00000000 + .4byte 0x41747472 + .4byte 0x69623A3A + .4byte 0x48617368 + .4byte 0x4D617000 + .4byte 0x41747472 + .4byte 0x69623A3A + .4byte 0x4578706F + .4byte 0x72744D61 + .4byte 0x6E616765 + .4byte 0x72000000 + .4byte 0x41747472 + .4byte 0x69623A3A + .4byte 0x5661756C + .4byte 0x74000000 + .4byte 0x41747472 + .4byte 0x69623A3A + .4byte 0x436F6C6C + .4byte 0x65637469 + .4byte 0x6F6E0000 + .4byte 0x41747472 + .4byte 0x69623A3A + .4byte 0x436C6173 + .4byte 0x73507269 + .4byte 0x76617465 + .4byte 0x00000000 + .4byte 0x41747472 + .4byte 0x69623A3A + .4byte 0x436C6173 + .4byte 0x73546162 + .4byte 0x6C650000 + .4byte 0x53544C00 + .4byte 0x41747472 + .4byte 0x69623A3A + .4byte 0x44617461 + .4byte 0x62617365 + .4byte 0x50726976 + .4byte 0x61746500 + .4byte 0x63616D65 + .4byte 0x7261696E + .4byte 0x666F0000 + .4byte 0x65636172 + .4byte 0x00000000 + .4byte 0x73696D73 + .4byte 0x75726661 + .4byte 0x63650000 + .4byte 0x57436F6C + .4byte 0x6C697369 + .4byte 0x6F6E5761 + .4byte 0x726E5665 + .4byte 0x63746F72 + .4byte 0x00000000 + .4byte 0x57436F6C + .4byte 0x6C697369 + .4byte 0x6F6E5665 + .4byte 0x63746F72 + .4byte 0x00000000 + .4byte 0x55436F6E + .4byte 0x7461696E + .4byte 0x65720000 + .4byte 0x53757370 + .4byte 0x656E7369 + .4byte 0x6F6E5061 + .4byte 0x72616D73 + .4byte 0x00000000 + .4byte 0x49417474 + .4byte 0x61636861 + .4byte 0x626C654C + .4byte 0x69737400 + .4byte 0x70766568 + .4byte 0x69636C65 + .4byte 0x00000000 + .4byte 0x63686173 + .4byte 0x73697300 + .4byte 0x656E6769 + .4byte 0x6E650000 + .4byte 0x696E6475 + .4byte 0x6374696F + .4byte 0x6E000000 + .4byte 0x6E6F7300 + .4byte 0x74697265 + .4byte 0x73000000 + .4byte 0x7472616E + .4byte 0x736D6973 + .4byte 0x73696F6E + .4byte 0x00000000 + .4byte 0x41494176 + .4byte 0x6F696461 + .4byte 0x626C654E + .4byte 0x65696768 + .4byte 0x626F7273 + .4byte 0x00000000 + .4byte 0x67616D65 + .4byte 0x706C6179 + .4byte 0x00000000 + .4byte 0x49445F47 + .4byte 0x43686172 + .4byte 0x61637465 + .4byte 0x724C6973 + .4byte 0x74000000 + .4byte 0x656D6974 + .4byte 0x74657264 + .4byte 0x61746100 + .4byte 0x656D6974 + .4byte 0x74657267 + .4byte 0x726F7570 + .4byte 0x00000000 + .4byte 0x49445F47 + .4byte 0x52616365 + .4byte 0x53746174 + .4byte 0x75735472 + .4byte 0x69676765 + .4byte 0x724C6973 + .4byte 0x74000000 + .4byte 0x61697665 + .4byte 0x6869636C + .4byte 0x65000000 + .4byte 0x70757273 + .4byte 0x75697465 + .4byte 0x7363616C + .4byte 0x6174696F + .4byte 0x6E000000 + .4byte 0x70757273 + .4byte 0x7569746C + .4byte 0x6576656C + .4byte 0x73000000 + .4byte 0x70757273 + .4byte 0x75697473 + .4byte 0x7570706F + .4byte 0x72740000 + .4byte 0x49526F61 + .4byte 0x64426C6F + .4byte 0x636B5665 + .4byte 0x6869636C + .4byte 0x65730000 + .4byte 0x49526F61 + .4byte 0x64426C6F + .4byte 0x636B536D + .4byte 0x61636B61 + .4byte 0x626C6573 + .4byte 0x00000000 + .4byte 0x49445F47 + .4byte 0x48616E64 + .4byte 0x6C657256 + .4byte 0x6563746F + .4byte 0x72000000 + .4byte 0x49445F53 + .4byte 0x74617465 + .4byte 0x546F5665 + .4byte 0x63746F72 + .4byte 0x73000000 + .4byte 0x49445F53 + .4byte 0x746F636B + .4byte 0x4361724D + .4byte 0x61700000 + .4byte 0x49445F4D + .4byte 0x696C6573 + .4byte 0x746F6E65 + .4byte 0x496E666F + .4byte 0x4D617000 + .4byte 0x49445F50 + .4byte 0x656E6469 + .4byte 0x6E67534D + .4byte 0x534C6973 + .4byte 0x74000000 + .4byte 0x49445F4F + .4byte 0x626A6563 + .4byte 0x74537461 + .4byte 0x74654D61 + .4byte 0x70000000 + .4byte 0x49445F41 + .4byte 0x74747269 + .4byte 0x624B6579 + .4byte 0x4C697374 + .4byte 0x00000000 + .4byte 0x4541474C + .4byte 0x343A3A53 + .4byte 0x796D626F + .4byte 0x6C456E74 + .4byte 0x72790000 + .4byte 0x43616D65 + .4byte 0x72614149 + .4byte 0x41766F69 + .4byte 0x6461626C + .4byte 0x65730000 + .4byte 0x00000000 + .4byte 0x43300000 + .4byte 0x80000000 + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x43300000 + .4byte 0x80000000 + .4byte 0x3F800000 + .4byte 0x3F800000 + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x47800000 + .4byte 0x3F800000 + .4byte 0x47800000 + .4byte 0x00000000 + .4byte 0x2E5BE6FF + .4byte 0x3F000000 + .4byte 0x3F800000 + .4byte 0x43480000 + .4byte 0x506C6179 + .4byte 0x65723143 + .4byte 0x616D6572 + .4byte 0x61000000 + .4byte 0x3C23D70A + .4byte 0x42C80000 + .4byte 0x00000000 + .4byte 0x2E5BE6FF + .4byte 0x3CCCCCCD + .4byte 0x00000000 + .4byte 0x463B8000 + .4byte 0x3F000000 + .4byte 0x00000000 + .4byte 0x3DCCCCCD + .4byte 0x3F333333 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x43300000 + .4byte 0x00000000 + .4byte 0x43360B61 + .4byte 0x3BB60B61 + .4byte 0x3F800000 + .4byte 0x2E5BE6FF + .4byte 0x3F000000 + .4byte 0x3DCCCCCD + .4byte 0x3ED9999A + .4byte 0xBF000000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x43300000 + .4byte 0x80000000 + .4byte 0x3983126F + .4byte 0x00000000 + .4byte 0x2E5BE6FF + .4byte 0x3F000000 + .4byte 0x3F800000 + .4byte 0x42C80000 + .4byte 0x3C23D70A + .4byte 0x00000000 + .4byte 0x43300000 + .4byte 0x80000000 + .4byte 0x3983126F + .4byte 0x00000000 + .4byte 0x3D4CCCCD + .4byte 0x3E800000 + .4byte 0x3F000000 + .4byte 0x3F400000 + .4byte 0x3F800000 + .4byte 0x3FC00000 + .4byte 0x43300000 + .4byte 0x80000000 + .4byte 0x3983126F + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x3F59999A + .4byte 0x2E5BE6FF + .4byte 0x3F000000 + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x42C80000 + .4byte 0x461C4000 + .4byte 0x3F000000 + .4byte 0x447A0000 + .4byte 0x3F800000 + .4byte 0x40A00000 + .4byte 0x3DCCCCCD + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x2E5BE6FF + .4byte 0x3F000000 + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x3F666666 + .4byte 0x3F000000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x43300000 + .4byte 0x00000000 + .4byte 0x3D088889 + .4byte 0x3D088889 + .4byte 0x00000000 + .4byte 0x3D088889 + .4byte 0x00000000 + .4byte 0x3F333333 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0xC0000000 + .4byte 0x3F800000 + .4byte 0x43300000 + .4byte 0x80000000 + .4byte 0x3983126F + .4byte 0x3F000000 + .4byte 0xC1F00000 + .4byte 0x41F00000 + .4byte 0x43300000 + .4byte 0x80000000 + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x43300000 + .4byte 0x80000000 + .4byte 0x3F800000 + .4byte 0x3F800000 + .4byte 0x3F000000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0xC0400000 + .4byte 0x40400000 + .4byte 0xBF800000 + .4byte 0x00000000 + .4byte 0xC0C00000 + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x2E5BE6FF + .4byte 0x3F000000 + .4byte 0x3DCCCCCD + .4byte 0x40000000 + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x461C4000 + .4byte 0x43300000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x40000000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x3E800000 + .4byte 0x47800000 + .4byte 0x3DCCCCCD + .4byte 0x40000000 + .4byte 0x49445F48 + .4byte 0x65726D65 + .4byte 0x7348616E + .4byte 0x646C6572 + .4byte 0x56656374 + .4byte 0x6F720000 + .4byte 0x544F444F + .4byte 0x00000000 + .4byte 0x4D47616D + .4byte 0x65506C61 + .4byte 0x794D6F6D + .4byte 0x656E7400 + .4byte 0x4D494345 + .4byte 0x43616D65 + .4byte 0x72614669 + .4byte 0x6E697368 + .4byte 0x65640000 + .4byte 0x4D4D6973 + .4byte 0x63536F75 + .4byte 0x6E640000 + .4byte 0x636F704D + .4byte 0x61700000 + .4byte 0x636F704C + .4byte 0x69737400 + .4byte 0x766F6963 + .4byte 0x65494473 + .4byte 0x00000000 + .4byte 0x73706565 + .4byte 0x63687475 + .4byte 0x6E650000 + .4byte 0x4D556E73 + .4byte 0x7061776E + .4byte 0x436F7000 + .4byte 0x49566568 + .4byte 0x69636C65 + .4byte 0x50747273 + .4byte 0x00000000 + .4byte 0x43414D45 + .4byte 0x52410000 + .4byte 0x00000000 + .4byte 0x44524956 + .4byte 0x45000000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x54524143 + .4byte 0x4B5F434F + .4byte 0x50000000 + .4byte 0x4A554D50 + .4byte 0x00000000 + .4byte 0x4D6F6D65 + .4byte 0x6E745374 + .4byte 0x726D0000 + .4byte 0x49434500 + .4byte 0x43616D65 + .4byte 0x72614669 + .4byte 0x6E697368 + .4byte 0x65640000 + .4byte 0x00000000 + .4byte 0x40A00000 + .4byte 0x544F5441 + .4byte 0x4C454400 + .4byte 0x00000000 + .4byte 0x706C6179 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x40A00000 + .4byte 0x40400000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x3F000000 + .4byte 0x3E800000 + .4byte 0x40A00000 + .4byte 0x00000000 + .4byte 0x43300000 + .4byte 0x80000000 + .4byte 0x40A00000 + .4byte 0x43444163 + .4byte 0x74696F6E + .4byte 0x54726163 + .4byte 0x6B436172 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x41200000 + .4byte 0x40400000 + .4byte 0x41A0CCCD + .4byte 0x40466666 + .4byte 0x3F800000 + .4byte 0x40800000 + .4byte 0x4D4A756D + .4byte 0x70437574 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x0000FFFF + .4byte MessageJumpCut__13CDActionDriveRC8MJumpCut + .4byte 0x43616D65 + .4byte 0x72610000 + .4byte 0x00000000 + .4byte 0x40000000 + .4byte 0x3F800000 + .4byte 0x3E99999A + .4byte 0x3DCCCCCD + .4byte 0x00000000 + .4byte 0x41A00000 + .4byte 0x3C23D70A + .4byte 0x3F800000 + .4byte 0x40A00000 + .4byte 0x3CCCCCCD + .4byte 0x40400000 + .4byte 0x3D4CCCCD + .4byte 0x00000000 + .4byte 0x40400000 + .4byte 0x2E5BE6FF + .4byte 0x3F000000 + .4byte 0x3F800000 + .4byte 0xBF000000 + .4byte 0x41200000 + .4byte 0x3E800000 + .4byte 0x3A83126F + .4byte 0x40200000 + .4byte 0x3F666666 + .4byte 0x3F400000 + .4byte 0x43FA0000 + .4byte 0x43B40000 + .4byte 0x40A00000 + .4byte 0x42340000 + .4byte 0x3DCCCCCD + .4byte 0x41A00000 + .4byte 0x54524143 + .4byte 0x4B434152 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x54524143 + .4byte 0x4B434F50 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x53484F57 + .4byte 0x43415345 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x44454255 + .4byte 0x47000000 + .4byte 0x44656275 + .4byte 0x67576F72 + .4byte 0x6C640000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x43444163 + .4byte 0x74696F6E + .4byte 0x49636500 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x44454255 + .4byte 0x47574154 + .4byte 0x43484341 + .4byte 0x52000000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x3F800000 + .4byte 0x7372632F + .4byte 0x53706565 + .4byte 0x642F496E + .4byte 0x6465702F + .4byte 0x5372632F + .4byte 0x43616D65 + .4byte 0x72612F4D + .4byte 0x6F766572 + .4byte 0x732F4375 + .4byte 0x6269632E + .4byte 0x63707000 + .4byte 0x7372632F + .4byte 0x53706565 + .4byte 0x642F496E + .4byte 0x6465702F + .4byte 0x5372632F + .4byte 0x4D697363 + .4byte 0x2F546162 + .4byte 0x6C652E68 + .4byte 0x70700000 + .4byte 0x00000000 + .4byte 0x43300000 + .4byte 0x80000000 + .4byte 0x3F800000 + .4byte 0x2E5BE6FF + .4byte 0x3F000000 + .4byte 0x42480000 + .4byte 0xBF666666 + .4byte 0x00000000 + .4byte 0x3F000000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x3E800000 + .4byte 0x3DCCCCCD + .4byte 0x00000000 + .4byte 0x43300000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x3BA3D70A + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x43300000 + .4byte 0x80000000 + .4byte 0x3DCCCCCD + .4byte 0x42200000 + .4byte 0x42C80000 + .4byte 0xBF800000 + .4byte 0x3A83126F + .4byte 0x3983126F + .4byte 0x3ECCCCCD + .4byte 0x3C23D70A + .4byte 0x3F000000 + .4byte 0x40000000 + .4byte 0x40400000 + .4byte 0x3D4CCCCD + .4byte 0x2E5BE6FF + .4byte 0x3F000000 + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x41F00000 + .4byte 0x00000000 + .4byte 0x40800000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x40A00000 + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x43300000 + .4byte 0x80000000 + .4byte 0x3F000000 + .4byte 0x40490FDB + .4byte 0x47800000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x47800000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x47800000 + .4byte 0x40400000 + .4byte 0x47800000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x40400000 + .4byte 0x40800000 + .4byte 0x40A00000 + .4byte 0x40C00000 + .4byte 0x00000000 + .4byte 0x42C80000 + .4byte 0x3F800000 + .4byte 0x47800000 + .4byte 0x00000000 + .4byte 0x43300000 + .4byte 0x80000000 + .4byte 0x2E5BE6FF + .4byte 0x3F000000 + .4byte 0x00000000 + .4byte 0x3A83126F + .4byte 0x00000000 + .4byte 0x3A83126F + .4byte 0x417F5C29 + .4byte 0x00000000 + .4byte 0x38D1B717 + .4byte 0x417F5C29 + .4byte 0x417F5C29 + .4byte 0x3C23D70A + .4byte 0x43300000 + .4byte 0x80000000 + .4byte 0x42C80000 + .4byte 0x3F800000 + .4byte 0x3F8FACD6 + .4byte 0x3FA14518 + .4byte 0x3FB504F3 + .4byte 0x3FCB2FF5 + .4byte 0x3FE411F0 + .4byte 0x40000000 + .4byte 0x400FACD6 + .4byte 0x40214518 + .4byte 0x403504F3 + .4byte 0x404B2FF5 + .4byte 0x406411F0 + .4byte 0x40800000 + .4byte 0x408FACD6 + .4byte 0x40A14518 + .4byte 0x40B504F3 + .4byte 0x40CB2FF5 + .4byte 0x40E411F0 + .4byte 0x41000000 + .4byte 0x410FACD6 + .4byte 0x41214518 + .4byte 0x413504F3 + .4byte 0x414B2FF5 + .4byte 0x416411F0 + .4byte 0x41800000 + .4byte 0x418FACD6 + .4byte 0x41A14518 + .4byte 0x41B504F3 + .4byte 0x41CB2FF5 + .4byte 0x41E411F0 + .4byte 0x42000000 + .4byte 0x420FACD6 + .4byte 0x42214518 + .4byte 0x423504F3 + .4byte 0x424B2FF5 + .4byte 0x426411F0 + .4byte 0x42800000 + .4byte 0x3F000000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x7372632F + .4byte 0x53706565 + .4byte 0x642F496E + .4byte 0x6465702F + .4byte 0x5372632F + .4byte 0x43616D65 + .4byte 0x72612F49 + .4byte 0x43452F49 + .4byte 0x43454D6F + .4byte 0x7665722E + .4byte 0x63707000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x2E5BE6FF + .4byte 0x3F000000 + .4byte 0x3F800000 + .4byte 0x43960000 + .4byte 0x40400000 + .4byte 0x40400000 + .4byte 0x40C00000 + .4byte 0x3F800000 + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x3E2AAAAB + .4byte 0x3F000000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x3D088889 + .4byte 0x00000000 + .4byte 0x3D088889 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x43300000 + .4byte 0x80000000 + .4byte 0x3D088889 + .4byte 0x3F000000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x43300000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x3F800000 + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x43300000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x38D1B717 + .4byte 0x3F800000 + .4byte 0x41F00000 + .4byte 0x41200000 + .4byte 0x3C23D70A + .4byte 0x47800000 + .4byte 0x2E5BE6FF + .4byte 0x3F000000 + .4byte 0x42140000 + .4byte 0x42C80000 + .4byte 0x3CF5C28F + .4byte 0x461C4000 + .4byte 0x3A83126F + .4byte 0x00000000 + .4byte 0x3E800000 + .4byte 0x3F000000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x40400000 + .4byte 0x3FC00000 + .4byte 0x40A00000 + .4byte 0x00000000 + .4byte 0x41200000 + .4byte 0x3F333333 + .4byte 0x3E99999A + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x40A00000 + .4byte 0x41A00000 + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0xC1200000 + .4byte 0x41A00000 + .4byte 0x00000000 + .4byte 0x3DCCCCCD + .4byte 0x3F800000 + .4byte 0xBF800000 + .4byte 0x453B8000 + .4byte 0x412FFFF5 + .4byte 0x40800000 + .4byte 0x00000000 + .4byte 0x43B40000 + .4byte 0x40A00000 + .4byte 0x3CCCCCCD + .4byte 0x3DCCCCCD + .4byte 0x3F800000 + .4byte 0x00000000 +.L_00000D08: + .4byte 0x4E4F5300 +.L_00000D0C: + .4byte 0x5265706C + .4byte 0x61794E6F + .4byte 0x73000000 +.L_00000D18: + .4byte 0x4A756D70 + .4byte 0x00000000 +.L_00000D20: + .4byte 0x5265706C + .4byte 0x61794A75 + .4byte 0x6D700000 +.L_00000D2C: + .4byte 0x53706565 + .4byte 0x64000000 +.L_00000D34: + .4byte 0x5265706C + .4byte 0x61795370 + .4byte 0x65656400 +.L_00000D40: + .4byte 0x436F726E + .4byte 0x65720000 +.L_00000D48: + .4byte 0x5265706C + .4byte 0x6179436F + .4byte 0x726E6572 + .4byte 0x00000000 +.L_00000D58: + .4byte 0x4275726E + .4byte 0x6F757400 +.L_00000D60: + .4byte 0x5265706C + .4byte 0x61794275 + .4byte 0x726E6F75 + .4byte 0x74000000 +.L_00000D70: + .4byte 0x506F7765 + .4byte 0x72536C69 + .4byte 0x64650000 +.L_00000D7C: + .4byte 0x5265706C + .4byte 0x6179536C + .4byte 0x69646500 + .4byte 0x2E2E2E2E + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0xBF000000 + .4byte 0x3F5DB22D + .4byte 0x3F000000 + .4byte 0x00000000 + .4byte 0x2E5BE6FF + .4byte 0x00000000 + .4byte 0x3DCCCCCD + .4byte 0x41200000 + .4byte 0x00000000 + .4byte 0x43300000 + .4byte 0x80000000 + .4byte 0x3F800000 +.L_00000DC4: + .4byte 0x43696E65 + .4byte 0x6D617469 + .4byte 0x63730000 +.L_00000DD0: + .4byte 0x44656275 + .4byte 0x67000000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x43300000 + .4byte 0x80000000 + .4byte 0x3983126F + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x63616D25 + .4byte 0x64000000 + .4byte 0x464D5600 + .4byte 0x7265706C + .4byte 0x61790000 + .4byte 0x636C6970 + .4byte 0x00000000 + .4byte 0x54726163 + .4byte 0x6B202564 + .4byte 0x00000000 + .4byte 0xBF800000 + .4byte 0x00000000 + .4byte 0x3F800000 + .4byte 0x358637BD + .4byte 0x00000000 + .4byte 0x40800000 + .4byte 0x6B65795F + .4byte 0x25640000 + .4byte 0x3F000000 + .4byte 0xBF800000 + .4byte 0xBF800000 + +# .rodata:0xE68 | size: 0xA0 +.obj _vt.20SelectCarCameraMover, weak + .4byte 0xFFF80000 + .4byte 0x00000000 + .4byte 0xFFF80000 + .4byte OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv + .4byte 0x00000000 + .4byte _._20SelectCarCameraMover + .4byte 0x00000000 + .4byte Update__20SelectCarCameraMoverf + .4byte 0x00000000 + .4byte Render__11CameraMoverP5eView + .4byte 0x00000000 + .4byte GetAnchor__11CameraMover + .4byte 0x00000000 + .4byte SetLookBack__11CameraMoverb + .4byte 0x00000000 + .4byte SetLookbackSpeed__11CameraMoverf + .4byte 0x00000000 + .4byte SetDisableLag__11CameraMoverb + .4byte 0x00000000 + .4byte SetPovType__11CameraMoveri + .4byte 0x00000000 + .4byte OutsidePOV__11CameraMover + .4byte 0x00000000 + .4byte RenderCarPOV__11CameraMover + .4byte 0x00000000 + .4byte MinDistToWall__11CameraMover + .4byte 0x00000000 + .4byte GetLookbackAngle__11CameraMover + .4byte 0x00000000 + .4byte ResetState__11CameraMover + .4byte 0x00000000 + .4byte Enable__11CameraMover + .4byte 0x00000000 + .4byte Disable__11CameraMover + .4byte 0x00000000 + .4byte IsHoodCamera__11CameraMover + .4byte 0x00000000 + .4byte GetTarget__11CameraMover + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.20SelectCarCameraMover + +# .rodata:0xF08 | size: 0x20 +.obj _vt.t8tAverage1Z8bVector3, weak + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte _._t8tAverage1Z8bVector3 + .4byte 0x00000000 + .4byte Recalculate__t8tAverage1Z8bVector3 + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.t8tAverage1Z8bVector3 + +# .rodata:0xF28 | size: 0x20 +.obj _vt.21CDActionDebugWatchCar.14ITrafficCenter, weak + .4byte 0xFFDC0000 + .4byte 0x00000000 + .4byte 0xFFDC0000 + .4byte GetTrafficBasis__21CDActionDebugWatchCarRQ25UMath7Matrix4RQ25UMath7Vector3 + .4byte 0xFFDC0000 + .4byte _._21CDActionDebugWatchCar + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.21CDActionDebugWatchCar.14ITrafficCenter + +# .rodata:0xF48 | size: 0x20 +.obj _vt.21CDActionDebugWatchCar.14IDebugWatchCar, weak + .4byte 0xFFE80000 + .4byte 0x00000000 + .4byte 0xFFE80000 + .4byte _._21CDActionDebugWatchCar + .4byte 0xFFE80000 + .4byte GetSimable__21CDActionDebugWatchCar + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.21CDActionDebugWatchCar.14IDebugWatchCar + +# .rodata:0xF68 | size: 0x48 +.obj _vt.21CDActionDebugWatchCar, weak + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte _._21CDActionDebugWatchCar + .4byte 0x00000000 + .4byte Update__21CDActionDebugWatchCarf + .4byte 0x00000000 + .4byte Reset__21CDActionDebugWatchCar + .4byte 0x00000000 + .4byte GetName__C21CDActionDebugWatchCar + .4byte 0x00000000 + .4byte GetNext__C21CDActionDebugWatchCar + .4byte 0x00000000 + .4byte GetMover__21CDActionDebugWatchCar + .4byte 0x00000000 + .4byte SetSpecial__21CDActionDebugWatchCarf + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.21CDActionDebugWatchCar + +# .rodata:0xFB0 | size: 0x20 +.obj _vt.14IDebugWatchCar, weak + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte _._14IDebugWatchCar + .4byte 0x00000000 + .4byte __pure_virtual + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.14IDebugWatchCar + +# .rodata:0xFD0 | size: 0xA0 +.obj _vt.8ICEMover, weak + .4byte 0xFFF80000 + .4byte 0x00000000 + .4byte 0xFFF80000 + .4byte OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv + .4byte 0x00000000 + .4byte _._8ICEMover + .4byte 0x00000000 + .4byte Update__8ICEMoverf + .4byte 0x00000000 + .4byte Render__11CameraMoverP5eView + .4byte 0x00000000 + .4byte GetAnchor__11CameraMover + .4byte 0x00000000 + .4byte SetLookBack__11CameraMoverb + .4byte 0x00000000 + .4byte SetLookbackSpeed__11CameraMoverf + .4byte 0x00000000 + .4byte SetDisableLag__11CameraMoverb + .4byte 0x00000000 + .4byte SetPovType__11CameraMoveri + .4byte 0x00000000 + .4byte OutsidePOV__11CameraMover + .4byte 0x00000000 + .4byte RenderCarPOV__11CameraMover + .4byte 0x00000000 + .4byte MinDistToWall__11CameraMover + .4byte 0x00000000 + .4byte GetLookbackAngle__11CameraMover + .4byte 0x00000000 + .4byte ResetState__11CameraMover + .4byte 0x00000000 + .4byte Enable__11CameraMover + .4byte 0x00000000 + .4byte Disable__11CameraMover + .4byte 0x00000000 + .4byte IsHoodCamera__11CameraMover + .4byte 0x00000000 + .4byte GetTarget__11CameraMover + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.8ICEMover + +# .rodata:0x1070 | size: 0x48 +.obj _vt.11CDActionIce.11IAttachable, weak + .4byte 0xFFE80000 + .4byte 0x00000000 + .4byte 0xFFE80000 + .4byte _._11CDActionIce + .4byte 0xFFE80000 + .4byte Attach__11CDActionIcePQ33UTL3COM8IUnknown + .4byte 0xFFE80000 + .4byte Detach__11CDActionIcePQ33UTL3COM8IUnknown + .4byte 0xFFE80000 + .4byte IsAttached__C11CDActionIcePCQ33UTL3COM8IUnknown + .4byte 0xFFE80000 + .4byte OnAttached__11CDActionIceP11IAttachable + .4byte 0xFFE80000 + .4byte OnDetached__11CDActionIceP11IAttachable + .4byte 0xFFE80000 + .4byte GetAttachments__C11CDActionIce + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.11CDActionIce.11IAttachable + +# .rodata:0x10B8 | size: 0x48 +.obj _vt.11CDActionIce, weak + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte _._11CDActionIce + .4byte 0x00000000 + .4byte Update__11CDActionIcef + .4byte 0x00000000 + .4byte Reset__11CDActionIce + .4byte 0x00000000 + .4byte GetName__C11CDActionIce + .4byte 0x00000000 + .4byte GetNext__C11CDActionIce + .4byte 0x00000000 + .4byte GetMover__11CDActionIce + .4byte 0x00000000 + .4byte SetSpecial__11CDActionIcef + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.11CDActionIce + +# .rodata:0x1100 | size: 0x20 +.obj _vt.13CDActionDebug.14ITrafficCenter, weak + .4byte 0xFFE80000 + .4byte 0x00000000 + .4byte 0xFFE80000 + .4byte GetTrafficBasis__13CDActionDebugRQ25UMath7Matrix4RQ25UMath7Vector3 + .4byte 0xFFE80000 + .4byte _._13CDActionDebug + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.13CDActionDebug.14ITrafficCenter + +# .rodata:0x1120 | size: 0x48 +.obj _vt.13CDActionDebug, weak + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte _._13CDActionDebug + .4byte 0x00000000 + .4byte Update__13CDActionDebugf + .4byte 0x00000000 + .4byte Reset__13CDActionDebug + .4byte 0x00000000 + .4byte GetName__C13CDActionDebug + .4byte 0x00000000 + .4byte GetNext__C13CDActionDebug + .4byte 0x00000000 + .4byte GetMover__13CDActionDebug + .4byte 0x00000000 + .4byte SetSpecial__13CDActionDebugf + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.13CDActionDebug + +# .rodata:0x1168 | size: 0xA0 +.obj _vt.19ShowcaseCameraMover, weak + .4byte 0xFFF80000 + .4byte 0x00000000 + .4byte 0xFFF80000 + .4byte OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv + .4byte 0x00000000 + .4byte _._19ShowcaseCameraMover + .4byte 0x00000000 + .4byte Update__19ShowcaseCameraMoverf + .4byte 0x00000000 + .4byte Render__11CameraMoverP5eView + .4byte 0x00000000 + .4byte GetAnchor__11CameraMover + .4byte 0x00000000 + .4byte SetLookBack__11CameraMoverb + .4byte 0x00000000 + .4byte SetLookbackSpeed__11CameraMoverf + .4byte 0x00000000 + .4byte SetDisableLag__11CameraMoverb + .4byte 0x00000000 + .4byte SetPovType__11CameraMoveri + .4byte 0x00000000 + .4byte OutsidePOV__11CameraMover + .4byte 0x00000000 + .4byte RenderCarPOV__11CameraMover + .4byte 0x00000000 + .4byte MinDistToWall__11CameraMover + .4byte 0x00000000 + .4byte GetLookbackAngle__11CameraMover + .4byte 0x00000000 + .4byte ResetState__19ShowcaseCameraMover + .4byte 0x00000000 + .4byte Enable__11CameraMover + .4byte 0x00000000 + .4byte Disable__11CameraMover + .4byte 0x00000000 + .4byte IsHoodCamera__11CameraMover + .4byte 0x00000000 + .4byte GetTarget__11CameraMover + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.19ShowcaseCameraMover + +# .rodata:0x1208 | size: 0x48 +.obj _vt.16CDActionShowcase.11IAttachable, weak + .4byte 0xFFE80000 + .4byte 0x00000000 + .4byte 0xFFE80000 + .4byte _._16CDActionShowcase + .4byte 0xFFE80000 + .4byte Attach__16CDActionShowcasePQ33UTL3COM8IUnknown + .4byte 0xFFE80000 + .4byte Detach__16CDActionShowcasePQ33UTL3COM8IUnknown + .4byte 0xFFE80000 + .4byte IsAttached__C16CDActionShowcasePCQ33UTL3COM8IUnknown + .4byte 0xFFE80000 + .4byte OnAttached__16CDActionShowcaseP11IAttachable + .4byte 0xFFE80000 + .4byte OnDetached__16CDActionShowcaseP11IAttachable + .4byte 0xFFE80000 + .4byte GetAttachments__C16CDActionShowcase + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.16CDActionShowcase.11IAttachable + +# .rodata:0x1250 | size: 0x48 +.obj _vt.16CDActionShowcase, weak + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte _._16CDActionShowcase + .4byte 0x00000000 + .4byte Update__16CDActionShowcasef + .4byte 0x00000000 + .4byte Reset__16CDActionShowcase + .4byte 0x00000000 + .4byte GetName__C16CDActionShowcase + .4byte 0x00000000 + .4byte GetNext__C16CDActionShowcase + .4byte 0x00000000 + .4byte GetMover__16CDActionShowcase + .4byte 0x00000000 + .4byte SetSpecial__16CDActionShowcasef + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.16CDActionShowcase + +# .rodata:0x1298 | size: 0x20 +.obj _vt.16CDActionTrackCop.14ITrafficCenter, weak + .4byte 0xFFE00000 + .4byte 0x00000000 + .4byte 0xFFE00000 + .4byte GetTrafficBasis__16CDActionTrackCopRQ25UMath7Matrix4RQ25UMath7Vector3 + .4byte 0xFFE00000 + .4byte _._16CDActionTrackCop + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.16CDActionTrackCop.14ITrafficCenter + +# .rodata:0x12B8 | size: 0x48 +.obj _vt.16CDActionTrackCop.11IAttachable, weak + .4byte 0xFFE80000 + .4byte 0x00000000 + .4byte 0xFFE80000 + .4byte _._16CDActionTrackCop + .4byte 0xFFE80000 + .4byte Attach__16CDActionTrackCopPQ33UTL3COM8IUnknown + .4byte 0xFFE80000 + .4byte Detach__16CDActionTrackCopPQ33UTL3COM8IUnknown + .4byte 0xFFE80000 + .4byte IsAttached__C16CDActionTrackCopPCQ33UTL3COM8IUnknown + .4byte 0xFFE80000 + .4byte OnAttached__16CDActionTrackCopP11IAttachable + .4byte 0xFFE80000 + .4byte OnDetached__16CDActionTrackCopP11IAttachable + .4byte 0xFFE80000 + .4byte GetAttachments__C16CDActionTrackCop + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.16CDActionTrackCop.11IAttachable + +# .rodata:0x1300 | size: 0x48 +.obj _vt.16CDActionTrackCop, weak + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte _._16CDActionTrackCop + .4byte 0x00000000 + .4byte Update__16CDActionTrackCopf + .4byte 0x00000000 + .4byte Reset__16CDActionTrackCop + .4byte 0x00000000 + .4byte GetName__C16CDActionTrackCop + .4byte 0x00000000 + .4byte GetNext__C16CDActionTrackCop + .4byte 0x00000000 + .4byte GetMover__16CDActionTrackCop + .4byte 0x00000000 + .4byte SetSpecial__16CDActionTrackCopf + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.16CDActionTrackCop + +# .rodata:0x1348 | size: 0x20 +.obj _vt.16CDActionTrackCar.14ITrafficCenter, weak + .4byte 0xFFE00000 + .4byte 0x00000000 + .4byte 0xFFE00000 + .4byte GetTrafficBasis__16CDActionTrackCarRQ25UMath7Matrix4RQ25UMath7Vector3 + .4byte 0xFFE00000 + .4byte _._16CDActionTrackCar + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.16CDActionTrackCar.14ITrafficCenter + +# .rodata:0x1368 | size: 0x48 +.obj _vt.16CDActionTrackCar.11IAttachable, weak + .4byte 0xFFE80000 + .4byte 0x00000000 + .4byte 0xFFE80000 + .4byte _._16CDActionTrackCar + .4byte 0xFFE80000 + .4byte Attach__16CDActionTrackCarPQ33UTL3COM8IUnknown + .4byte 0xFFE80000 + .4byte Detach__16CDActionTrackCarPQ33UTL3COM8IUnknown + .4byte 0xFFE80000 + .4byte IsAttached__C16CDActionTrackCarPCQ33UTL3COM8IUnknown + .4byte 0xFFE80000 + .4byte OnAttached__16CDActionTrackCarP11IAttachable + .4byte 0xFFE80000 + .4byte OnDetached__16CDActionTrackCarP11IAttachable + .4byte 0xFFE80000 + .4byte GetAttachments__C16CDActionTrackCar + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.16CDActionTrackCar.11IAttachable + +# .rodata:0x13B0 | size: 0x48 +.obj _vt.16CDActionTrackCar, weak + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte _._16CDActionTrackCar + .4byte 0x00000000 + .4byte Update__16CDActionTrackCarf + .4byte 0x00000000 + .4byte Reset__16CDActionTrackCar + .4byte 0x00000000 + .4byte GetName__C16CDActionTrackCar + .4byte 0x00000000 + .4byte GetNext__C16CDActionTrackCar + .4byte 0x00000000 + .4byte GetMover__16CDActionTrackCar + .4byte 0x00000000 + .4byte SetSpecial__16CDActionTrackCarf + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.16CDActionTrackCar + +# .rodata:0x13F8 | size: 0x18 +.obj _vt.13CDActionDrive.Q33Sim9Collision9IListener, weak + .4byte 0xFFE00000 + .4byte 0x00000000 + .4byte 0xFFE00000 + .4byte OnCollision__13CDActionDriveRCQ33Sim9Collision4Info + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.13CDActionDrive.Q33Sim9Collision9IListener + +# .rodata:0x1410 | size: 0x20 +.obj _vt.13CDActionDrive.14ITrafficCenter, weak + .4byte 0xFFDC0000 + .4byte 0x00000000 + .4byte 0xFFDC0000 + .4byte GetTrafficBasis__13CDActionDriveRQ25UMath7Matrix4RQ25UMath7Vector3 + .4byte 0xFFDC0000 + .4byte _._13CDActionDrive + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.13CDActionDrive.14ITrafficCenter + +# .rodata:0x1430 | size: 0x48 +.obj _vt.13CDActionDrive.11IAttachable, weak + .4byte 0xFFE80000 + .4byte 0x00000000 + .4byte 0xFFE80000 + .4byte _._13CDActionDrive + .4byte 0xFFE80000 + .4byte Attach__13CDActionDrivePQ33UTL3COM8IUnknown + .4byte 0xFFE80000 + .4byte Detach__13CDActionDrivePQ33UTL3COM8IUnknown + .4byte 0xFFE80000 + .4byte IsAttached__C13CDActionDrivePCQ33UTL3COM8IUnknown + .4byte 0xFFE80000 + .4byte OnAttached__13CDActionDriveP11IAttachable + .4byte 0xFFE80000 + .4byte OnDetached__13CDActionDriveP11IAttachable + .4byte 0xFFE80000 + .4byte GetAttachments__C13CDActionDrive + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.13CDActionDrive.11IAttachable + +# .rodata:0x1478 | size: 0x48 +.obj _vt.13CDActionDrive, weak + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte _._13CDActionDrive + .4byte 0x00000000 + .4byte Update__13CDActionDrivef + .4byte 0x00000000 + .4byte Reset__13CDActionDrive + .4byte 0x00000000 + .4byte GetName__C13CDActionDrive + .4byte 0x00000000 + .4byte GetNext__C13CDActionDrive + .4byte 0x00000000 + .4byte GetMover__13CDActionDrive + .4byte 0x00000000 + .4byte SetSpecial__13CDActionDrivef + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.13CDActionDrive + +# .rodata:0x14C0 | size: 0x20 +.obj _vt.14ITrafficCenter, weak + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte __pure_virtual + .4byte 0x00000000 + .4byte _._14ITrafficCenter + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.14ITrafficCenter + +# .rodata:0x14E0 | size: 0x18 +.obj _vt.Q28CameraAI8Director, weak + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte _._Q28CameraAI8Director + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.Q28CameraAI8Director + +# .rodata:0x14F8 | size: 0x48 +.obj _vt.Q28CameraAI6Action, weak + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte _._Q28CameraAI6Action + .4byte 0x00000000 + .4byte Update__Q28CameraAI6Actionf + .4byte 0x00000000 + .4byte Reset__Q28CameraAI6Action + .4byte 0x00000000 + .4byte __pure_virtual + .4byte 0x00000000 + .4byte __pure_virtual + .4byte 0x00000000 + .4byte __pure_virtual + .4byte 0x00000000 + .4byte SetSpecial__Q28CameraAI6Actionf + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.Q28CameraAI6Action + +# .rodata:0x1540 | size: 0x48 +.obj _vt.11IAttachable, weak + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte _._11IAttachable + .4byte 0x00000000 + .4byte __pure_virtual + .4byte 0x00000000 + .4byte __pure_virtual + .4byte 0x00000000 + .4byte __pure_virtual + .4byte 0x00000000 + .4byte __pure_virtual + .4byte 0x00000000 + .4byte __pure_virtual + .4byte 0x00000000 + .4byte __pure_virtual + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.11IAttachable + +# .rodata:0x1588 | size: 0xA0 +.obj _vt.21DebugWorldCameraMover, weak + .4byte 0xFFF80000 + .4byte 0x00000000 + .4byte 0xFFF80000 + .4byte OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv + .4byte 0x00000000 + .4byte _._21DebugWorldCameraMover + .4byte 0x00000000 + .4byte Update__21DebugWorldCameraMoverf + .4byte 0x00000000 + .4byte Render__11CameraMoverP5eView + .4byte 0x00000000 + .4byte GetAnchor__11CameraMover + .4byte 0x00000000 + .4byte SetLookBack__11CameraMoverb + .4byte 0x00000000 + .4byte SetLookbackSpeed__11CameraMoverf + .4byte 0x00000000 + .4byte SetDisableLag__11CameraMoverb + .4byte 0x00000000 + .4byte SetPovType__11CameraMoveri + .4byte 0x00000000 + .4byte OutsidePOV__11CameraMover + .4byte 0x00000000 + .4byte RenderCarPOV__11CameraMover + .4byte 0x00000000 + .4byte MinDistToWall__11CameraMover + .4byte 0x00000000 + .4byte GetLookbackAngle__11CameraMover + .4byte 0x00000000 + .4byte ResetState__11CameraMover + .4byte 0x00000000 + .4byte Enable__11CameraMover + .4byte 0x00000000 + .4byte Disable__11CameraMover + .4byte 0x00000000 + .4byte IsHoodCamera__11CameraMover + .4byte 0x00000000 + .4byte GetTarget__11CameraMover + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.21DebugWorldCameraMover + +# .rodata:0x1628 | size: 0xA0 +.obj _vt.19TrackCopCameraMover, weak + .4byte 0xFFF80000 + .4byte 0x00000000 + .4byte 0xFFF80000 + .4byte OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv + .4byte 0x00000000 + .4byte _._19TrackCopCameraMover + .4byte 0x00000000 + .4byte Update__19TrackCopCameraMoverf + .4byte 0x00000000 + .4byte Render__11CameraMoverP5eView + .4byte 0x00000000 + .4byte GetAnchor__19TrackCopCameraMover + .4byte 0x00000000 + .4byte SetLookBack__11CameraMoverb + .4byte 0x00000000 + .4byte SetLookbackSpeed__11CameraMoverf + .4byte 0x00000000 + .4byte SetDisableLag__11CameraMoverb + .4byte 0x00000000 + .4byte SetPovType__11CameraMoveri + .4byte 0x00000000 + .4byte OutsidePOV__11CameraMover + .4byte 0x00000000 + .4byte RenderCarPOV__19TrackCopCameraMover + .4byte 0x00000000 + .4byte MinDistToWall__11CameraMover + .4byte 0x00000000 + .4byte GetLookbackAngle__11CameraMover + .4byte 0x00000000 + .4byte ResetState__11CameraMover + .4byte 0x00000000 + .4byte Enable__11CameraMover + .4byte 0x00000000 + .4byte Disable__11CameraMover + .4byte 0x00000000 + .4byte IsHoodCamera__11CameraMover + .4byte 0x00000000 + .4byte GetTarget__19TrackCopCameraMover + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.19TrackCopCameraMover + +# .rodata:0x16C8 | size: 0xA0 +.obj _vt.19TrackCarCameraMover, weak + .4byte 0xFFF80000 + .4byte 0x00000000 + .4byte 0xFFF80000 + .4byte OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv + .4byte 0x00000000 + .4byte _._19TrackCarCameraMover + .4byte 0x00000000 + .4byte Update__19TrackCarCameraMoverf + .4byte 0x00000000 + .4byte Render__11CameraMoverP5eView + .4byte 0x00000000 + .4byte GetAnchor__19TrackCarCameraMover + .4byte 0x00000000 + .4byte SetLookBack__11CameraMoverb + .4byte 0x00000000 + .4byte SetLookbackSpeed__11CameraMoverf + .4byte 0x00000000 + .4byte SetDisableLag__11CameraMoverb + .4byte 0x00000000 + .4byte SetPovType__11CameraMoveri + .4byte 0x00000000 + .4byte OutsidePOV__11CameraMover + .4byte 0x00000000 + .4byte RenderCarPOV__11CameraMover + .4byte 0x00000000 + .4byte MinDistToWall__11CameraMover + .4byte 0x00000000 + .4byte GetLookbackAngle__11CameraMover + .4byte 0x00000000 + .4byte ResetState__11CameraMover + .4byte 0x00000000 + .4byte Enable__11CameraMover + .4byte 0x00000000 + .4byte Disable__11CameraMover + .4byte 0x00000000 + .4byte IsHoodCamera__11CameraMover + .4byte 0x00000000 + .4byte GetTarget__19TrackCarCameraMover + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.19TrackCarCameraMover + +# .rodata:0x1768 | size: 0xA0 +.obj _vt.25RearViewMirrorCameraMover, weak + .4byte 0xFFF80000 + .4byte 0x00000000 + .4byte 0xFFF80000 + .4byte OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv + .4byte 0x00000000 + .4byte _._25RearViewMirrorCameraMover + .4byte 0x00000000 + .4byte Update__25RearViewMirrorCameraMoverf + .4byte 0x00000000 + .4byte Render__11CameraMoverP5eView + .4byte 0x00000000 + .4byte GetAnchor__25RearViewMirrorCameraMover + .4byte 0x00000000 + .4byte SetLookBack__11CameraMoverb + .4byte 0x00000000 + .4byte SetLookbackSpeed__11CameraMoverf + .4byte 0x00000000 + .4byte SetDisableLag__11CameraMoverb + .4byte 0x00000000 + .4byte SetPovType__11CameraMoveri + .4byte 0x00000000 + .4byte OutsidePOV__11CameraMover + .4byte 0x00000000 + .4byte RenderCarPOV__11CameraMover + .4byte 0x00000000 + .4byte MinDistToWall__11CameraMover + .4byte 0x00000000 + .4byte GetLookbackAngle__11CameraMover + .4byte 0x00000000 + .4byte ResetState__11CameraMover + .4byte 0x00000000 + .4byte Enable__11CameraMover + .4byte 0x00000000 + .4byte Disable__11CameraMover + .4byte 0x00000000 + .4byte IsHoodCamera__11CameraMover + .4byte 0x00000000 + .4byte GetTarget__11CameraMover + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.25RearViewMirrorCameraMover + +# .rodata:0x1808 | size: 0xA0 +.obj _vt.16CubicCameraMover, weak + .4byte 0xFFF80000 + .4byte 0x00000000 + .4byte 0xFFF80000 + .4byte OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv + .4byte 0x00000000 + .4byte _._16CubicCameraMover + .4byte 0x00000000 + .4byte Update__16CubicCameraMoverf + .4byte 0x00000000 + .4byte Render__11CameraMoverP5eView + .4byte 0x00000000 + .4byte GetAnchor__16CubicCameraMover + .4byte 0x00000000 + .4byte SetLookBack__16CubicCameraMoverb + .4byte 0x00000000 + .4byte SetLookbackSpeed__11CameraMoverf + .4byte 0x00000000 + .4byte SetDisableLag__16CubicCameraMoverb + .4byte 0x00000000 + .4byte SetPovType__16CubicCameraMoveri + .4byte 0x00000000 + .4byte OutsidePOV__16CubicCameraMover + .4byte 0x00000000 + .4byte RenderCarPOV__16CubicCameraMover + .4byte 0x00000000 + .4byte MinDistToWall__16CubicCameraMover + .4byte 0x00000000 + .4byte GetLookbackAngle__16CubicCameraMover + .4byte 0x00000000 + .4byte ResetState__16CubicCameraMover + .4byte 0x00000000 + .4byte Enable__11CameraMover + .4byte 0x00000000 + .4byte Disable__11CameraMover + .4byte 0x00000000 + .4byte IsHoodCamera__16CubicCameraMover + .4byte 0x00000000 + .4byte GetTarget__11CameraMover + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.16CubicCameraMover + +# .rodata:0x18A8 | size: 0xA0 +.obj _vt.11CameraMover, weak + .4byte 0xFFF80000 + .4byte 0x00000000 + .4byte 0xFFF80000 + .4byte OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv + .4byte 0x00000000 + .4byte _._11CameraMover + .4byte 0x00000000 + .4byte Update__11CameraMoverf + .4byte 0x00000000 + .4byte Render__11CameraMoverP5eView + .4byte 0x00000000 + .4byte GetAnchor__11CameraMover + .4byte 0x00000000 + .4byte SetLookBack__11CameraMoverb + .4byte 0x00000000 + .4byte SetLookbackSpeed__11CameraMoverf + .4byte 0x00000000 + .4byte SetDisableLag__11CameraMoverb + .4byte 0x00000000 + .4byte SetPovType__11CameraMoveri + .4byte 0x00000000 + .4byte OutsidePOV__11CameraMover + .4byte 0x00000000 + .4byte RenderCarPOV__11CameraMover + .4byte 0x00000000 + .4byte MinDistToWall__11CameraMover + .4byte 0x00000000 + .4byte GetLookbackAngle__11CameraMover + .4byte 0x00000000 + .4byte ResetState__11CameraMover + .4byte 0x00000000 + .4byte Enable__11CameraMover + .4byte 0x00000000 + .4byte Disable__11CameraMover + .4byte 0x00000000 + .4byte IsHoodCamera__11CameraMover + .4byte 0x00000000 + .4byte GetTarget__11CameraMover + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.11CameraMover + +# .rodata:0x1948 | size: 0x18 +.obj _vt.Q33UTL3COM8IUnknown, weak + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte _._Q33UTL3COM8IUnknown + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.Q33UTL3COM8IUnknown + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x43300000 + .4byte 0x80000000 + .4byte 0x3F800000 + +# .rodata:0x1974 | size: 0x8 +.obj Tweak_JumpCamHighestAirTresh, local + .4byte 0x40200000 + .4byte 0x3FE66666 +.endobj Tweak_JumpCamHighestAirTresh + +# .rodata:0x197C | size: 0x8 +.obj Tweak_JumpCamLongestAirTresh, local + .4byte 0x41C80000 + .4byte 0x41700000 +.endobj Tweak_JumpCamLongestAirTresh + .4byte 0x00000000 + +# .rodata:0x1988 | size: 0x20 +.obj _vt.11AverageBase, weak + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte _._11AverageBase + .4byte 0x00000000 + .4byte Recalculate__11AverageBase + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.11AverageBase + +# .rodata:0x19A8 | size: 0x40 +.obj _vt.Q43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4List, weak + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte _._Q43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4List + .4byte 0x00000000 + .4byte AllocVectorSpace__Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16UiUi + .4byte 0x00000000 + .4byte FreeVectorSpace__Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16PPQ28CameraAI8DirectorUi + .4byte 0x00000000 + .4byte GetGrowSize__CQ23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16Ui + .4byte 0x00000000 + .4byte GetMaxCapacity__CQ23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16 + .4byte 0x00000000 + .4byte OnGrowRequest__Q23UTLt6Vector2ZPQ28CameraAI8Directori16Ui + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.Q43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4List + +# .rodata:0x19E8 | size: 0x40 +.obj _vt.Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16, weak + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte _._Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16 + .4byte 0x00000000 + .4byte AllocVectorSpace__Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16UiUi + .4byte 0x00000000 + .4byte FreeVectorSpace__Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16PPQ28CameraAI8DirectorUi + .4byte 0x00000000 + .4byte GetGrowSize__CQ23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16Ui + .4byte 0x00000000 + .4byte GetMaxCapacity__CQ23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16 + .4byte 0x00000000 + .4byte OnGrowRequest__Q23UTLt6Vector2ZPQ28CameraAI8Directori16Ui + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16 + .4byte 0x43300000 + .4byte 0x80000000 + +# .rodata:0x1A30 | size: 0x40 +.obj _vt.Q23UTLt6Vector2ZPQ28CameraAI8Directori16, weak + .4byte 0x00000000 + .4byte 0x00000000 + .4byte 0x00000000 + .4byte _._Q23UTLt6Vector2ZPQ28CameraAI8Directori16 + .4byte 0x00000000 + .4byte AllocVectorSpace__Q23UTLt6Vector2ZPQ28CameraAI8Directori16UiUi + .4byte 0x00000000 + .4byte FreeVectorSpace__Q23UTLt6Vector2ZPQ28CameraAI8Directori16PPQ28CameraAI8DirectorUi + .4byte 0x00000000 + .4byte GetGrowSize__CQ23UTLt6Vector2ZPQ28CameraAI8Directori16Ui + .4byte 0x00000000 + .4byte GetMaxCapacity__CQ23UTLt6Vector2ZPQ28CameraAI8Directori16 + .4byte 0x00000000 + .4byte OnGrowRequest__Q23UTLt6Vector2ZPQ28CameraAI8Directori16Ui + .4byte 0x00000000 + .4byte 0x00000000 +.endobj _vt.Q23UTLt6Vector2ZPQ28CameraAI8Directori16 + +# 0x00000000..0x00000130 | size: 0x130 +.data +.balign 8 + +# .data:0x0 | size: 0x4 +.obj kJumpTimeMultiplier, local + .4byte 0x40000000 +.endobj kJumpTimeMultiplier + +# .data:0x4 | size: 0x4 +.obj kEndJumpThreshold, local + .4byte 0x00000000 +.endobj kEndJumpThreshold + +# .data:0x8 | size: 0x4 +.obj kEndJumpValue, local + .4byte 0xBF800000 +.endobj kEndJumpValue + +# .data:0xC | size: 0x4 +.obj kEndPursuitThreshold, local + .4byte 0x00000000 +.endobj kEndPursuitThreshold + +# .data:0x10 | size: 0x4 +.obj kEndPursuitValue, local + .4byte 0xBF800000 +.endobj kEndPursuitValue + +# .data:0x14 | size: 0x4 +.obj kJumpSpeedHigh, local + .4byte 0x42C80000 +.endobj kJumpSpeedHigh + +# .data:0x18 | size: 0x4 +.obj kJumpSpeedLow, local + .4byte 0x42A00000 +.endobj kJumpSpeedLow + +# .data:0x1C | size: 0x4 +.obj old_pov.10900, local + .4byte 0xFFFFFFFF +.endobj old_pov.10900 + +# .data:0x20 | size: 0xC +.obj _force_active_TrackCar, global + .4byte IsAnyCopNear__FP12CameraAnchor + .4byte IsBeingPursued__Fi + .4byte FixWorldHeight__FPQ25UMath7Vector3i +.endobj _force_active_TrackCar + +# .data:0x2C | size: 0x4 +.obj kSelectCarFrameRate, local + .4byte 0x42700000 +.endobj kSelectCarFrameRate + +# .data:0x30 | size: 0x4 +.obj kSelectCarUpperOrbitV, local + .4byte 0x42DC0000 +.endobj kSelectCarUpperOrbitV + +# .data:0x34 | size: 0x4 +.obj kSelectCarLowerOrbitV, local + .4byte 0x42BD0000 +.endobj kSelectCarLowerOrbitV + +# .data:0x38 | size: 0x4 +.obj kSelectCarRadiusSpeedScale, local + .4byte 0x3E000000 +.endobj kSelectCarRadiusSpeedScale + +# .data:0x3C | size: 0x4 +.obj kSelectCarUpperRadius, local + .4byte 0x40D4CCCD +.endobj kSelectCarUpperRadius + +# .data:0x40 | size: 0x4 +.obj kSelectCarLowerRadius, local + .4byte 0x4094CCCD +.endobj kSelectCarLowerRadius + +# .data:0x44 | size: 0x4 +.obj kSelectCarWrapAngle, local + .4byte 0x43B40000 +.endobj kSelectCarWrapAngle + +# .data:0x48 | size: 0x4 +.obj kSelectCarDefaultRollV, local + .4byte 0x00000000 +.endobj kSelectCarDefaultRollV + +# .data:0x4C | size: 0x4 +.obj kSelectCarDefaultFOVV, local + .4byte 0x42340000 +.endobj kSelectCarDefaultFOVV + +# .data:0x50 | size: 0x4 +.obj kSelectCarDefaultLookAtZV, local + .4byte 0x3F400000 +.endobj kSelectCarDefaultLookAtZV + +# .data:0x54 | size: 0x4 +.obj kSelectCarDefaultAnimTimeV, local + .4byte 0x3F0E147B +.endobj kSelectCarDefaultAnimTimeV + +# .data:0x58 | size: 0x4 +.obj kSelectCarDefaultRollH, local + .4byte 0x00000000 +.endobj kSelectCarDefaultRollH + +# .data:0x5C | size: 0x4 +.obj kSelectCarDefaultFOVH, local + .4byte 0x42340000 +.endobj kSelectCarDefaultFOVH + +# .data:0x60 | size: 0x4 +.obj kSelectCarDefaultLookAtZH, local + .4byte 0x3F400000 +.endobj kSelectCarDefaultLookAtZH + +# .data:0x64 | size: 0x4 +.obj kSelectCarDefaultAnimTimeH, local + .4byte 0x3F0E147B +.endobj kSelectCarDefaultAnimTimeH + +# .data:0x68 | size: 0x4 +.obj kSelectCarDefaultRollZ, local + .4byte 0x00000000 +.endobj kSelectCarDefaultRollZ + +# .data:0x6C | size: 0x4 +.obj kSelectCarDefaultFOVZ, local + .4byte 0x42340000 +.endobj kSelectCarDefaultFOVZ + +# .data:0x70 | size: 0x4 +.obj kSelectCarDefaultLookAtZZ, local + .4byte 0x3F400000 +.endobj kSelectCarDefaultLookAtZZ + +# .data:0x74 | size: 0x4 +.obj kSelectCarDefaultAnimTimeZ, local + .4byte 0x3F0E147B +.endobj kSelectCarDefaultAnimTimeZ + +# .data:0x78 | size: 0x4 +.obj gPhoto_LatAng, local + .4byte 0x42B40000 +.endobj gPhoto_LatAng + +# .data:0x7C | size: 0x4 +.obj gPhoto_UpAng, local + .4byte 0x40000000 +.endobj gPhoto_UpAng + +# .data:0x80 | size: 0x4 +.obj gPhoto_Dist, local + .4byte 0x40A00000 +.endobj gPhoto_Dist + +# .data:0x84 | size: 0x4 +.obj gPhoto_DOF, local + .4byte 0x00000000 +.endobj gPhoto_DOF + +# .data:0x88 | size: 0x4 +.obj _21DebugWorldCameraMover.TurboSpeed, global + .4byte 0x4043D70A +.endobj _21DebugWorldCameraMover.TurboSpeed + +# .data:0x8C | size: 0x4 +.obj _21DebugWorldCameraMover.SuperTurboSpeed, global + .4byte 0x40E51EB8 +.endobj _21DebugWorldCameraMover.SuperTurboSpeed + +# .data:0x90 | size: 0x90 +.obj ReplayCategories, local + .rel .rodata, .L_00000D08 + .4byte 0x40DFADC5 + .rel .rodata, .L_00000D0C + .4byte 0xF6F4912B + .4byte ReplayNosScore__FP9ICEAnchor + .4byte ReplayNosMirror__FP9ICEAnchor + .rel .rodata, .L_00000D18 + .4byte 0xC9CFEAFB + .rel .rodata, .L_00000D20 + .4byte 0x17911633 + .4byte ReplayJumpScore__FP9ICEAnchor + .4byte ReplayJumpMirror__FP9ICEAnchor + .rel .rodata, .L_00000D2C + .4byte 0x41862FE6 + .rel .rodata, .L_00000D34 + .4byte 0xC0E543F7 + .4byte ReplaySpeedScore__FP9ICEAnchor + .4byte ReplaySpeedMirror__FP9ICEAnchor + .rel .rodata, .L_00000D40 + .4byte 0xA38C8885 + .rel .rodata, .L_00000D48 + .4byte 0xE12BD1A8 + .4byte ReplayCornerScore__FP9ICEAnchor + .4byte ReplayCornerMirror__FP9ICEAnchor + .rel .rodata, .L_00000D58 + .4byte 0x6512F314 + .rel .rodata, .L_00000D60 + .4byte 0x87EA4B2F + .4byte ReplayBurnoutScore__FP9ICEAnchor + .4byte ReplayBurnoutMirror__FP9ICEAnchor + .rel .rodata, .L_00000D70 + .4byte 0x9FD09E0E + .rel .rodata, .L_00000D7C + .4byte 0xD7BFCC6F + .4byte ReplayPowerSlideScore__FP9ICEAnchor + .4byte ReplayPowerSlideMirror__FP9ICEAnchor +.endobj ReplayCategories + +# .data:0x120 | size: 0x8 +.obj GenericCategoryNames, local + .rel .rodata, .L_00000DC4 + .rel .rodata, .L_00000DD0 +.endobj GenericCategoryNames + +# .data:0x128 | size: 0x4 +.obj RemoteCaffeinating, local + .4byte 0x00000000 +.endobj RemoteCaffeinating + .4byte 0x00000000 + +# 0x00000000..0x000002A0 | size: 0x2A0 +.section .bss, "wa", @nobits +.balign 8 +# .bss:0x0 | size: 0x4 +.sym value.4377, local + .skip 0x4 +.endsym value.4377 +# .bss:0x4 | size: 0x4 +.sym _.tmp_0.4378, local + .skip 0x4 +.endsym _.tmp_0.4378 +# .bss:0x8 | size: 0x10 +.sym ret.9191, local + .skip 0x10 +.endsym ret.9191 +# .bss:0x18 | size: 0x4 +.sym _.tmp_1.9192, local + .skip 0x4 +.endsym _.tmp_1.9192 +# .bss:0x1C | size: 0x4 +.sym k.9589, local + .skip 0x4 +.endsym k.9589 +# .bss:0x20 | size: 0x4 +.sym _.tmp_2.9590, local + .skip 0x4 +.endsym _.tmp_2.9590 +# .bss:0x24 | size: 0x4 +.sym k.9633, local + .skip 0x4 +.endsym k.9633 +# .bss:0x28 | size: 0x4 +.sym _.tmp_3.9634, local + .skip 0x4 +.endsym _.tmp_3.9634 +# .bss:0x2C | size: 0x4 +.sym k.9647, local + .skip 0x4 +.endsym k.9647 +# .bss:0x30 | size: 0x4 +.sym _.tmp_4.9648, local + .skip 0x4 +.endsym _.tmp_4.9648 +# .bss:0x34 | size: 0x4 +.sym k.10243, local + .skip 0x4 +.endsym k.10243 +# .bss:0x38 | size: 0x4 +.sym _.tmp_5.10244, local + .skip 0x4 +.endsym _.tmp_5.10244 +# .bss:0x3C | size: 0x4 +.sym k.10704, local + .skip 0x4 +.endsym k.10704 +# .bss:0x40 | size: 0x4 +.sym _.tmp_6.10705, local + .skip 0x4 +.endsym _.tmp_6.10705 + .skip 0x4 +# .bss:0x48 | size: 0x10 +.sym name.10838, local + .skip 0x10 +.endsym name.10838 +# .bss:0x58 | size: 0x4 +.sym _.tmp_7.10839, local + .skip 0x4 +.endsym _.tmp_7.10839 + .skip 0x4 +# .bss:0x60 | size: 0x10 +.sym name.10940, local + .skip 0x10 +.endsym name.10940 +# .bss:0x70 | size: 0x4 +.sym _.tmp_8.10941, local + .skip 0x4 +.endsym _.tmp_8.10941 + .skip 0x4 +# .bss:0x78 | size: 0x10 +.sym name.10996, local + .skip 0x10 +.endsym name.10996 +# .bss:0x88 | size: 0x4 +.sym _.tmp_9.10997, local + .skip 0x4 +.endsym _.tmp_9.10997 + .skip 0x4 +# .bss:0x90 | size: 0x10 +.sym name.11055, local + .skip 0x10 +.endsym name.11055 +# .bss:0xA0 | size: 0x4 +.sym _.tmp_10.11056, local + .skip 0x4 +.endsym _.tmp_10.11056 + .skip 0x4 +# .bss:0xA8 | size: 0x10 +.sym name.11105, local + .skip 0x10 +.endsym name.11105 +# .bss:0xB8 | size: 0x4 +.sym _.tmp_11.11106, local + .skip 0x4 +.endsym _.tmp_11.11106 + .skip 0x4 +# .bss:0xC0 | size: 0x10 +.sym name.11290, local + .skip 0x10 +.endsym name.11290 +# .bss:0xD0 | size: 0x4 +.sym _.tmp_12.11291, local + .skip 0x4 +.endsym _.tmp_12.11291 + .skip 0x4 +# .bss:0xD8 | size: 0x10 +.sym name.11403, local + .skip 0x10 +.endsym name.11403 +# .bss:0xE8 | size: 0x4 +.sym _.tmp_13.11404, local + .skip 0x4 +.endsym _.tmp_13.11404 +# .bss:0xEC | size: 0x50 +.sym _6Camera.JollyRancherResponse, global + .skip 0x50 +.endsym _6Camera.JollyRancherResponse +# .bss:0x13C | size: 0x4 +.sym kFloatScaleUp, local + .skip 0x4 +.endsym kFloatScaleUp +# .bss:0x140 | size: 0x4 +.sym kFloatScaleDown, local + .skip 0x4 +.endsym kFloatScaleDown +# .bss:0x144 | size: 0x10 +.sym sPrevPosition, local + .skip 0x10 +.endsym sPrevPosition +# .bss:0x154 | size: 0xC +.sym _CDActionDrive, local + .skip 0xC +.endsym _CDActionDrive +# .bss:0x160 | size: 0xC +.sym _CDActionTrackCar, local + .skip 0xC +.endsym _CDActionTrackCar +# .bss:0x16C | size: 0xC +.sym _CDActionTrackCop, local + .skip 0xC +.endsym _CDActionTrackCop +# .bss:0x178 | size: 0xC +.sym _CDActionShowcase, local + .skip 0xC +.endsym _CDActionShowcase +# .bss:0x184 | size: 0xC +.sym _CDActionDebug, local + .skip 0xC +.endsym _CDActionDebug +# .bss:0x190 | size: 0xC +.sym _CDActionIce, local + .skip 0xC +.endsym _CDActionIce +# .bss:0x19C | size: 0xC +.sym _CDActionDebugWatchCar, local + .skip 0xC +.endsym _CDActionDebugWatchCar +# .bss:0x1A8 | size: 0x10 +.sym gPhoto_CarPosBias, local + .skip 0x10 +.endsym gPhoto_CarPosBias +# .bss:0x1B8 | size: 0x10 +.sym _21DebugWorldCameraMover.Eye, global + .skip 0x10 +.endsym _21DebugWorldCameraMover.Eye +# .bss:0x1C8 | size: 0x10 +.sym _21DebugWorldCameraMover.Look, global + .skip 0x10 +.endsym _21DebugWorldCameraMover.Look +# .bss:0x1D8 | size: 0x10 +.sym _21DebugWorldCameraMover.Up, global + .skip 0x10 +.endsym _21DebugWorldCameraMover.Up +# .bss:0x1E8 | size: 0x80 +.sym TheICEManager, global + .skip 0x80 +.endsym TheICEManager +# .bss:0x268 | size: 0x2 +.sym aBaselineFovNoise, local + .skip 0x2 +.endsym aBaselineFovNoise + .skip 0x2 +# .bss:0x26C | size: 0x4 +.sym cameralink, local + .skip 0x4 +.endsym cameralink +# .bss:0x270 | size: 0x4 +.sym TheAvoidables, global + .skip 0x4 +.endsym TheAvoidables +# .bss:0x274 | size: 0x4 +.sym sHavePrevPosition, local + .skip 0x4 +.endsym sHavePrevPosition +# .bss:0x278 | size: 0x4 +.sym kCinematicMomementSeconds, local + .skip 0x4 +.endsym kCinematicMomementSeconds +# .bss:0x27C | size: 0x4 +.sym Tweak_ForceICEReplay, global + .skip 0x4 +.endsym Tweak_ForceICEReplay +# .bss:0x280 | size: 0x4 +.sym bMirrorICEData, global + .skip 0x4 +.endsym bMirrorICEData +# .bss:0x284 | size: 0x4 +.sym sPredictedAir, local + .skip 0x4 +.endsym sPredictedAir +# .bss:0x288 | size: 0x4 +.sym sRecentCurvature, local + .skip 0x4 +.endsym sRecentCurvature +# .bss:0x28C | size: 0x1 +.sym gOverlay, local + .skip 0x1 +.endsym gOverlay + .skip 0x3 +# .bss:0x290 | size: 0xC +.sym _9ICEReplay.RecentlyUsedTracks, global + .skip 0xC +.endsym _9ICEReplay.RecentlyUsedTracks +# .bss:0x29C | size: 0x4 +.sym _9ICEReplay.nRecentlyUsedIndex, global + .skip 0x4 +.endsym _9ICEReplay.nRecentlyUsedIndex + +# 0x00000000..0x00000004 | size: 0x4 +.section .ctors, "a" +.balign 1 + .4byte _GLOBAL_.I.__6Camera diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index 5644babd2..aad57987e 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -425,7 +425,7 @@ void CDActionDrive::Update(float dT) { } mCinematicMomementTimer = timer; - if (0.75f < mCinematicMomementTimer) { + if (0.001f < mCinematicMomementTimer) { gCinematicMomementCamera = true; } diff --git a/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp b/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp index a5579d851..b719e729a 100644 --- a/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp @@ -220,10 +220,9 @@ void DebugWorldCameraMover::Update(float dT) { float hi = fi * dT; Eye = Eye + bVector3(0.0f, 0.0f, hi); - float dist = 100.0f; - Look.x = bCos(pitch) * (bCos(hAngle) * dist) + Eye.x; - Look.y = bCos(pitch) * (bSin(hAngle) * dist) + Eye.y; - Look.z = bSin(pitch) * dist + Eye.z; + Look.x = bCos(pitch) * (bCos(hAngle) * 100.0f) + Eye.x; + Look.y = bCos(pitch) * (bSin(hAngle) * 100.0f) + Eye.y; + Look.z = bSin(pitch) * 100.0f + Eye.z; } if (ForwardInc != 0.0f) { @@ -272,10 +271,10 @@ void DebugWorldCameraMover::Update(float dT) { Look += rl; } + bMatrix4 m; bVector3 up; unsigned short bank = 0; ComputeBankedUpVector(&up, &Eye, &Look, bank); - bMatrix4 m; eCreateLookAtMatrix(&m, Eye, Look, up); if (Camera::StopUpdating == 0) { From 00c8aefbd4cda47c2c3607fa3b19367c04ac2a39 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 16:49:49 +0100 Subject: [PATCH 079/691] cleanup: remove accidental .text file Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .text | 36372 -------------------------------------------------------- 1 file changed, 36372 deletions(-) delete mode 100644 .text diff --git a/.text b/.text deleted file mode 100644 index 7f52af281..000000000 --- a/.text +++ /dev/null @@ -1,36372 +0,0 @@ -.include "macros.inc" -.file "zCamera.cpp" - -.comm _6Camera.StopUpdating, 0x4, 4 -.comm _21DebugWorldCameraMover.TurboOn, 0x4, 4 -.comm _21DebugWorldCameraMover.SuperTurboOn, 0x4, 4 - -# 0x00000000..0x0001D1EC | size: 0x1D1EC -.text -.balign 4 -# .text:0x0 | size: 0x0 -.sym gcc2_compiled., local - -# .text:0x0 | size: 0x17C -.fn __6Camera, global -/* 00000000 0000CD90 94 21 FF 90 */ stwu r1, -0x70(r1) -/* 00000004 0000CD94 7C 08 02 A6 */ mflr r0 -/* 00000008 0000CD98 F3 E1 00 68 */ psq_st f31, 0x68(r1), 0, qr0 -/* 0000000C 0000CD9C BF A1 00 5C */ stmw r29, 0x5c(r1) -/* 00000010 0000CDA0 90 01 00 74 */ stw r0, 0x74(r1) -/* 00000014 0000CDA4 3D 60 00 00 */ lis r11, .rodata+0x4@ha -/* 00000018 0000CDA8 3D 20 00 00 */ lis r9, .rodata+0x8@ha -/* 0000001C 0000CDAC C0 09 00 08 */ lfs f0, .rodata+0x8@l(r9) -/* 00000020 0000CDB0 3D 40 00 00 */ lis r10, .rodata+0xC@ha -/* 00000024 0000CDB4 C3 EB 00 04 */ lfs f31, .rodata+0x4@l(r11) -/* 00000028 0000CDB8 3D 00 00 00 */ lis r8, .rodata+0x10@ha -/* 0000002C 0000CDBC 3D 20 00 00 */ lis r9, .rodata+0x14@ha -/* 00000030 0000CDC0 D0 01 00 4C */ stfs f0, 0x4c(r1) -/* 00000034 0000CDC4 D0 01 00 50 */ stfs f0, 0x50(r1) -/* 00000038 0000CDC8 3B A1 00 08 */ addi r29, r1, 0x8 -/* 0000003C 0000CDCC D0 01 00 54 */ stfs f0, 0x54(r1) -/* 00000040 0000CDD0 3D 60 00 00 */ lis r11, RealTimeFrames@ha -/* 00000044 0000CDD4 D3 E1 00 48 */ stfs f31, 0x48(r1) -/* 00000048 0000CDD8 7C 7E 1B 78 */ mr r30, r3 -/* 0000004C 0000CDDC D0 01 00 0C */ stfs f0, 0xc(r1) -/* 00000050 0000CDE0 3C 00 80 00 */ lis r0, 0x8000 -/* 00000054 0000CDE4 D3 E1 00 08 */ stfs f31, 0x8(r1) -/* 00000058 0000CDE8 38 E0 00 00 */ li r7, 0x0 -/* 0000005C 0000CDEC C1 8A 00 0C */ lfs f12, .rodata+0xC@l(r10) -/* 00000060 0000CDF0 38 C0 36 FB */ li r6, 0x36fb -/* 00000064 0000CDF4 C1 49 00 14 */ lfs f10, .rodata+0x14@l(r9) -/* 00000068 0000CDF8 3D 40 00 00 */ lis r10, .rodata+0x18@ha -/* 0000006C 0000CDFC C1 A8 00 10 */ lfs f13, .rodata+0x10@l(r8) -/* 00000070 0000CE00 D0 1D 00 08 */ stfs f0, 0x8(r29) -/* 00000074 0000CE04 3D 00 00 00 */ lis r8, .rodata+0x1C@ha -/* 00000078 0000CE08 81 2B 00 00 */ lwz r9, RealTimeFrames@l(r11) -/* 0000007C 0000CE0C 7F A4 EB 78 */ mr r4, r29 -/* 00000080 0000CE10 D1 81 00 30 */ stfs f12, 0x30(r1) -/* 00000084 0000CE14 3D 60 00 00 */ lis r11, .rodata+0x20@ha -/* 00000088 0000CE18 D1 A1 00 34 */ stfs f13, 0x34(r1) -/* 0000008C 0000CE1C FC 20 F8 90 */ fmr f1, f31 -/* 00000090 0000CE20 D1 41 00 40 */ stfs f10, 0x40(r1) -/* 00000094 0000CE24 90 1E 02 84 */ stw r0, 0x284(r30) -/* 00000098 0000CE28 91 3E 02 88 */ stw r9, 0x288(r30) -/* 0000009C 0000CE2C D1 81 00 1C */ stfs f12, 0x1c(r1) -/* 000000A0 0000CE30 D0 01 00 14 */ stfs f0, 0x14(r1) -/* 000000A4 0000CE34 D0 01 00 18 */ stfs f0, 0x18(r1) -/* 000000A8 0000CE38 D0 01 00 20 */ stfs f0, 0x20(r1) -/* 000000AC 0000CE3C D0 01 00 24 */ stfs f0, 0x24(r1) -/* 000000B0 0000CE40 D0 01 00 28 */ stfs f0, 0x28(r1) -/* 000000B4 0000CE44 D0 01 00 2C */ stfs f0, 0x2c(r1) -/* 000000B8 0000CE48 D0 01 00 48 */ stfs f0, 0x48(r1) -/* 000000BC 0000CE4C D0 01 00 4C */ stfs f0, 0x4c(r1) -/* 000000C0 0000CE50 D1 41 00 50 */ stfs f10, 0x50(r1) -/* 000000C4 0000CE54 D0 01 00 38 */ stfs f0, 0x38(r1) -/* 000000C8 0000CE58 D0 01 00 3C */ stfs f0, 0x3c(r1) -/* 000000CC 0000CE5C 90 FE 02 8C */ stw r7, 0x28c(r30) -/* 000000D0 0000CE60 C1 6A 00 18 */ lfs f11, .rodata+0x18@l(r10) -/* 000000D4 0000CE64 D3 E1 00 54 */ stfs f31, 0x54(r1) -/* 000000D8 0000CE68 D3 E1 00 44 */ stfs f31, 0x44(r1) -/* 000000DC 0000CE6C D1 7E 00 B0 */ stfs f11, 0xb0(r30) -/* 000000E0 0000CE70 C1 A8 00 1C */ lfs f13, .rodata+0x1C@l(r8) -/* 000000E4 0000CE74 C1 8B 00 20 */ lfs f12, .rodata+0x20@l(r11) -/* 000000E8 0000CE78 D3 FE 02 80 */ stfs f31, 0x280(r30) -/* 000000EC 0000CE7C D3 FE 00 CC */ stfs f31, 0xcc(r30) -/* 000000F0 0000CE80 D3 FE 00 70 */ stfs f31, 0x70(r30) -/* 000000F4 0000CE84 D3 FE 00 74 */ stfs f31, 0x74(r30) -/* 000000F8 0000CE88 D3 FE 00 78 */ stfs f31, 0x78(r30) -/* 000000FC 0000CE8C D3 FE 00 7C */ stfs f31, 0x7c(r30) -/* 00000100 0000CE90 D3 FE 00 90 */ stfs f31, 0x90(r30) -/* 00000104 0000CE94 D3 FE 00 94 */ stfs f31, 0x94(r30) -/* 00000108 0000CE98 D3 FE 00 98 */ stfs f31, 0x98(r30) -/* 0000010C 0000CE9C D3 FE 00 9C */ stfs f31, 0x9c(r30) -/* 00000110 0000CEA0 D1 BE 00 BC */ stfs f13, 0xbc(r30) -/* 00000114 0000CEA4 90 FE 02 7C */ stw r7, 0x27c(r30) -.L_00000118: -/* 00000118 0000CEA8 D1 9E 00 C0 */ stfs f12, 0xc0(r30) -/* 0000011C 0000CEAC B0 DE 00 C4 */ sth r6, 0xc4(r30) -/* 00000120 0000CEB0 D0 1E 00 A8 */ stfs f0, 0xa8(r30) -/* 00000124 0000CEB4 D0 1E 00 B4 */ stfs f0, 0xb4(r30) -/* 00000128 0000CEB8 D0 1E 00 B8 */ stfs f0, 0xb8(r30) -/* 0000012C 0000CEBC D0 1E 00 AC */ stfs f0, 0xac(r30) -/* 00000130 0000CEC0 D0 1E 00 C8 */ stfs f0, 0xc8(r30) -/* 00000134 0000CEC4 D0 1E 00 80 */ stfs f0, 0x80(r30) -/* 00000138 0000CEC8 D0 1E 00 84 */ stfs f0, 0x84(r30) -/* 0000013C 0000CECC D0 1E 00 88 */ stfs f0, 0x88(r30) -/* 00000140 0000CED0 D0 1E 00 8C */ stfs f0, 0x8c(r30) -/* 00000144 0000CED4 D0 1E 00 A0 */ stfs f0, 0xa0(r30) -/* 00000148 0000CED8 D0 1E 00 A4 */ stfs f0, 0xa4(r30) -/* 0000014C 0000CEDC 48 00 04 ED */ bl .L_00000638 -/* 00000150 0000CEE0 7F C3 F3 78 */ mr r3, r30 -/* 00000154 0000CEE4 7F A4 EB 78 */ mr r4, r29 -/* 00000158 0000CEE8 FC 20 F8 90 */ fmr f1, f31 -/* 0000015C 0000CEEC 48 00 04 ED */ bl .L_00000648 -/* 00000160 0000CEF0 7F C3 F3 78 */ mr r3, r30 -/* 00000164 0000CEF4 80 01 00 74 */ lwz r0, 0x74(r1) -/* 00000168 0000CEF8 7C 08 03 A6 */ mtlr r0 -/* 0000016C 0000CEFC BB A1 00 5C */ lmw r29, 0x5c(r1) -/* 00000170 0000CF00 E3 E1 00 68 */ psq_l f31, 0x68(r1), 0, qr0 -/* 00000174 0000CF04 38 21 00 70 */ addi r1, r1, 0x70 -/* 00000178 0000CF08 4E 80 00 20 */ blr -.endfn __6Camera - -# .text:0x17C | size: 0x34 -.fn UpdateAll__6Cameraf, global -/* 0000017C 0000CF0C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00000180 0000CF10 7C 08 02 A6 */ mflr r0 -/* 00000184 0000CF14 F3 E1 00 08 */ psq_st f31, 0x8(r1), 0, qr0 -/* 00000188 0000CF18 90 01 00 14 */ stw r0, 0x14(r1) -/* 0000018C 0000CF1C FF E0 08 90 */ fmr f31, f1 -/* 00000190 0000CF20 48 00 1A 15 */ bl .L_00001BA4 -/* 00000194 0000CF24 FC 20 F8 90 */ fmr f1, f31 -/* 00000198 0000CF28 48 00 00 01 */ bl UpdateCameraShakers__Ff -/* 0000019C 0000CF2C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 000001A0 0000CF30 7C 08 03 A6 */ mtlr r0 -/* 000001A4 0000CF34 E3 E1 00 08 */ psq_l f31, 0x8(r1), 0, qr0 -/* 000001A8 0000CF38 38 21 00 10 */ addi r1, r1, 0x10 -/* 000001AC 0000CF3C 4E 80 00 20 */ blr -.endfn UpdateAll__6Cameraf - -# .text:0x1B0 | size: 0x70 -# NoiseBase(int) -.fn NoiseBase__Fi, global -/* 000001B0 0000CF40 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 000001B4 0000CF44 54 69 68 24 */ slwi r9, r3, 13 -/* 000001B8 0000CF48 7D 29 1A 78 */ xor r9, r9, r3 -/* 000001BC 0000CF4C 3C 00 43 30 */ lis r0, 0x4330 -/* 000001C0 0000CF50 7D 69 49 D6 */ mullw r11, r9, r9 -/* 000001C4 0000CF54 3D 40 00 00 */ lis r10, .rodata+0x28@ha -/* 000001C8 0000CF58 C8 0A 00 28 */ lfd f0, .rodata+0x28@l(r10) -/* 000001CC 0000CF5C 3D 00 00 00 */ lis r8, .rodata+0x30@ha -/* 000001D0 0000CF60 C1 88 00 30 */ lfs f12, .rodata+0x30@l(r8) -/* 000001D4 0000CF64 3D 40 00 00 */ lis r10, .rodata+0x34@ha -/* 000001D8 0000CF68 C1 AA 00 34 */ lfs f13, .rodata+0x34@l(r10) -/* 000001DC 0000CF6C 1D 6B 3D 73 */ mulli r11, r11, 0x3d73 -/* 000001E0 0000CF70 3D 6B 00 0C */ addis r11, r11, 0xc -/* 000001E4 0000CF74 39 6B 0A E5 */ addi r11, r11, 0xae5 -/* 000001E8 0000CF78 7D 29 59 D6 */ mullw r9, r9, r11 -/* 000001EC 0000CF7C 3D 29 52 09 */ addis r9, r9, 0x5209 -/* 000001F0 0000CF80 39 29 DD 0D */ subi r9, r9, 0x22f3 -.L_000001F4: -/* 000001F4 0000CF84 55 29 00 7E */ clrlwi r9, r9, 1 -/* 000001F8 0000CF88 6D 29 80 00 */ xoris r9, r9, 0x8000 -/* 000001FC 0000CF8C 91 21 00 0C */ stw r9, 0xc(r1) -.L_00000200: -/* 00000200 0000CF90 90 01 00 08 */ stw r0, 0x8(r1) -/* 00000204 0000CF94 C8 21 00 08 */ lfd f1, 0x8(r1) -/* 00000208 0000CF98 FC 21 00 28 */ fsub f1, f1, f0 -/* 0000020C 0000CF9C FC 20 08 18 */ frsp f1, f1 -.L_00000210: -/* 00000210 0000CFA0 EC 21 03 32 */ fmuls f1, f1, f12 -/* 00000214 0000CFA4 EC 2D 08 28 */ fsubs f1, f13, f1 -/* 00000218 0000CFA8 38 21 00 10 */ addi r1, r1, 0x10 -/* 0000021C 0000CFAC 4E 80 00 20 */ blr -.endfn NoiseBase__Fi - -# .text:0x220 | size: 0xE4 -# NoiseInterpolated(float) -.fn NoiseInterpolated__Ff, global -/* 00000220 0000CFB0 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 00000224 0000CFB4 7C 08 02 A6 */ mflr r0 -/* 00000228 0000CFB8 F3 A1 00 18 */ psq_st f29, 0x18(r1), 0, qr0 -/* 0000022C 0000CFBC F3 C1 00 20 */ psq_st f30, 0x20(r1), 0, qr0 -/* 00000230 0000CFC0 F3 E1 00 28 */ psq_st f31, 0x28(r1), 0, qr0 -/* 00000234 0000CFC4 BF C1 00 10 */ stmw r30, 0x10(r1) -/* 00000238 0000CFC8 90 01 00 34 */ stw r0, 0x34(r1) -/* 0000023C 0000CFCC FF C0 08 90 */ fmr f30, f1 -/* 00000240 0000CFD0 FC 00 F0 90 */ fmr f0, f30 -/* 00000244 0000CFD4 7D 2A 4B 78 */ mr r10, r9 -/* 00000248 0000CFD8 FD A0 00 1E */ fctiwz f13, f0 -/* 0000024C 0000CFDC 3F E0 43 30 */ lis r31, 0x4330 -/* 00000250 0000CFE0 D9 A1 00 08 */ stfd f13, 0x8(r1) -/* 00000254 0000CFE4 3D 60 00 00 */ lis r11, .rodata+0x38@ha -.L_00000258: -/* 00000258 0000CFE8 CB AB 00 38 */ lfd f29, .rodata+0x38@l(r11) -/* 0000025C 0000CFEC 81 21 00 0C */ lwz r9, 0xc(r1) -/* 00000260 0000CFF0 6D 29 80 00 */ xoris r9, r9, 0x8000 -/* 00000264 0000CFF4 91 21 00 0C */ stw r9, 0xc(r1) -/* 00000268 0000CFF8 93 E1 00 08 */ stw r31, 0x8(r1) -/* 0000026C 0000CFFC C8 01 00 08 */ lfd f0, 0x8(r1) -/* 00000270 0000D000 FC 00 E8 28 */ fsub f0, f0, f29 -/* 00000274 0000D004 FD A0 00 18 */ frsp f13, f0 -/* 00000278 0000D008 FC 0D F0 00 */ fcmpu cr0, f13, f30 -.L_0000027C: -/* 0000027C 0000D00C 4C 62 03 82 */ cror un, eq, lt -/* 00000280 0000D010 41 83 02 90 */ bso .L_00000510 -/* 00000284 0000D014 3D 20 00 00 */ lis r9, .rodata+0x40@ha -/* 00000288 0000D018 C0 09 00 40 */ lfs f0, .rodata+0x40@l(r9) -/* 0000028C 0000D01C ED AD 00 28 */ fsubs f13, f13, f0 -.L_00000290: -/* 00000290 0000D020 FC 00 68 90 */ fmr f0, f13 -/* 00000294 0000D024 FD A0 00 1E */ fctiwz f13, f0 -/* 00000298 0000D028 D9 A1 00 08 */ stfd f13, 0x8(r1) -/* 0000029C 0000D02C 83 C1 00 0C */ lwz r30, 0xc(r1) -.L_000002A0: -/* 000002A0 0000D030 7F C3 F3 78 */ mr r3, r30 -/* 000002A4 0000D034 48 00 01 B1 */ bl .L_00000454 -/* 000002A8 0000D038 FF E0 08 90 */ fmr f31, f1 -/* 000002AC 0000D03C 38 7E 00 01 */ addi r3, r30, 0x1 -/* 000002B0 0000D040 48 00 01 B1 */ bl .L_00000460 -/* 000002B4 0000D044 6F DE 80 00 */ xoris r30, r30, 0x8000 -/* 000002B8 0000D048 93 C1 00 0C */ stw r30, 0xc(r1) -/* 000002BC 0000D04C 3D 20 00 00 */ lis r9, .rodata+0x40@ha -/* 000002C0 0000D050 C1 A9 00 40 */ lfs f13, .rodata+0x40@l(r9) -/* 000002C4 0000D054 93 E1 00 08 */ stw r31, 0x8(r1) -/* 000002C8 0000D058 C8 01 00 08 */ lfd f0, 0x8(r1) -/* 000002CC 0000D05C FC 00 E8 28 */ fsub f0, f0, f29 -/* 000002D0 0000D060 FC 00 00 18 */ frsp f0, f0 -/* 000002D4 0000D064 EC 1E 00 28 */ fsubs f0, f30, f0 -/* 000002D8 0000D068 ED AD 00 28 */ fsubs f13, f13, f0 -.L_000002DC: -/* 000002DC 0000D06C ED AD 07 F2 */ fmuls f13, f13, f31 -/* 000002E0 0000D070 EC 20 68 7A */ fmadds f1, f0, f1, f13 -/* 000002E4 0000D074 80 01 00 34 */ lwz r0, 0x34(r1) -/* 000002E8 0000D078 7C 08 03 A6 */ mtlr r0 -/* 000002EC 0000D07C BB C1 00 10 */ lmw r30, 0x10(r1) -/* 000002F0 0000D080 E3 A1 00 18 */ psq_l f29, 0x18(r1), 0, qr0 -/* 000002F4 0000D084 E3 C1 00 20 */ psq_l f30, 0x20(r1), 0, qr0 -/* 000002F8 0000D088 E3 E1 00 28 */ psq_l f31, 0x28(r1), 0, qr0 -/* 000002FC 0000D08C 38 21 00 30 */ addi r1, r1, 0x30 -/* 00000300 0000D090 4E 80 00 20 */ blr -.endfn NoiseInterpolated__Ff - -# .text:0x304 | size: 0x94 -# Noise(float) -.fn Noise__Ff, global -/* 00000304 0000D094 94 21 FF C8 */ stwu r1, -0x38(r1) -/* 00000308 0000D098 7C 08 02 A6 */ mflr r0 -/* 0000030C 0000D09C F3 61 00 10 */ psq_st f27, 0x10(r1), 0, qr0 -/* 00000310 0000D0A0 F3 81 00 18 */ psq_st f28, 0x18(r1), 0, qr0 -/* 00000314 0000D0A4 F3 A1 00 20 */ psq_st f29, 0x20(r1), 0, qr0 -/* 00000318 0000D0A8 F3 C1 00 28 */ psq_st f30, 0x28(r1), 0, qr0 -/* 0000031C 0000D0AC F3 E1 00 30 */ psq_st f31, 0x30(r1), 0, qr0 -/* 00000320 0000D0B0 93 E1 00 0C */ stw r31, 0xc(r1) -/* 00000324 0000D0B4 90 01 00 3C */ stw r0, 0x3c(r1) -/* 00000328 0000D0B8 3D 20 00 00 */ lis r9, .rodata+0x48@ha -/* 0000032C 0000D0BC 3D 40 00 00 */ lis r10, .rodata+0x44@ha -/* 00000330 0000D0C0 C3 C9 00 48 */ lfs f30, .rodata+0x48@l(r9) -/* 00000334 0000D0C4 3D 60 00 00 */ lis r11, .rodata+0x4C@ha -/* 00000338 0000D0C8 C3 6B 00 4C */ lfs f27, .rodata+0x4C@l(r11) -/* 0000033C 0000D0CC FF 80 08 90 */ fmr f28, f1 -/* 00000340 0000D0D0 C3 AA 00 44 */ lfs f29, .rodata+0x44@l(r10) -/* 00000344 0000D0D4 FF E0 F0 90 */ fmr f31, f30 -/* 00000348 0000D0D8 3B E0 00 00 */ li r31, 0x0 -/* 0000034C 0000D0DC EC 3C 07 F2 */ fmuls f1, f28, f31 -/* 00000350 0000D0E0 3B FF 00 01 */ addi r31, r31, 0x1 -/* 00000354 0000D0E4 48 00 02 21 */ bl .L_00000574 -/* 00000358 0000D0E8 EF FF F8 2A */ fadds f31, f31, f31 -/* 0000035C 0000D0EC EF BE E8 7A */ fmadds f29, f30, f1, f29 -/* 00000360 0000D0F0 2C 1F 00 05 */ cmpwi r31, 0x5 -/* 00000364 0000D0F4 EF DE 06 F2 */ fmuls f30, f30, f27 -/* 00000368 0000D0F8 40 81 03 4C */ ble .L_000006B4 -/* 0000036C 0000D0FC FC 20 E8 90 */ fmr f1, f29 -/* 00000370 0000D100 80 01 00 3C */ lwz r0, 0x3c(r1) -/* 00000374 0000D104 7C 08 03 A6 */ mtlr r0 -.L_00000378: -/* 00000378 0000D108 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 0000037C 0000D10C E3 61 00 10 */ psq_l f27, 0x10(r1), 0, qr0 -/* 00000380 0000D110 E3 81 00 18 */ psq_l f28, 0x18(r1), 0, qr0 -/* 00000384 0000D114 E3 A1 00 20 */ psq_l f29, 0x20(r1), 0, qr0 -.L_00000388: -/* 00000388 0000D118 E3 C1 00 28 */ psq_l f30, 0x28(r1), 0, qr0 -/* 0000038C 0000D11C E3 E1 00 30 */ psq_l f31, 0x30(r1), 0, qr0 -/* 00000390 0000D120 38 21 00 38 */ addi r1, r1, 0x38 -.L_00000394: -/* 00000394 0000D124 4E 80 00 20 */ blr -.endfn Noise__Ff - -# .text:0x398 | size: 0x70 -.fn FovRelativeAngle__6CameraUs, global -/* 00000398 0000D128 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 0000039C 0000D12C 7C 08 02 A6 */ mflr r0 -.L_000003A0: -/* 000003A0 0000D130 F3 C1 00 10 */ psq_st f30, 0x10(r1), 0, qr0 -/* 000003A4 0000D134 F3 E1 00 18 */ psq_st f31, 0x18(r1), 0, qr0 -/* 000003A8 0000D138 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 000003AC 0000D13C 90 01 00 24 */ stw r0, 0x24(r1) -.L_000003B0: -/* 000003B0 0000D140 7C 7E 1B 78 */ mr r30, r3 -.L_000003B4: -/* 000003B4 0000D144 7C 83 23 78 */ mr r3, r4 -/* 000003B8 0000D148 48 00 00 01 */ bl bSin__FUs -/* 000003BC 0000D14C A0 7E 00 C4 */ lhz r3, 0xc4(r30) -/* 000003C0 0000D150 FF E0 08 90 */ fmr f31, f1 -/* 000003C4 0000D154 54 63 F8 7E */ srwi r3, r3, 1 -/* 000003C8 0000D158 48 00 00 01 */ bl bSin__FUs -/* 000003CC 0000D15C 3D 20 00 00 */ lis r9, aBaselineFovNoise@ha -/* 000003D0 0000D160 FF C0 08 90 */ fmr f30, f1 -/* 000003D4 0000D164 A0 69 00 00 */ lhz r3, aBaselineFovNoise@l(r9) -/* 000003D8 0000D168 54 63 F8 7E */ srwi r3, r3, 1 -/* 000003DC 0000D16C 48 00 00 01 */ bl bSin__FUs -/* 000003E0 0000D170 EF FF 07 B2 */ fmuls f31, f31, f30 -/* 000003E4 0000D174 EC 3F 08 24 */ fdivs f1, f31, f1 -/* 000003E8 0000D178 48 00 00 01 */ bl bASin__Ff -/* 000003EC 0000D17C 80 01 00 24 */ lwz r0, 0x24(r1) -/* 000003F0 0000D180 7C 08 03 A6 */ mtlr r0 -/* 000003F4 0000D184 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 000003F8 0000D188 E3 C1 00 10 */ psq_l f30, 0x10(r1), 0, qr0 -/* 000003FC 0000D18C E3 E1 00 18 */ psq_l f31, 0x18(r1), 0, qr0 -/* 00000400 0000D190 38 21 00 20 */ addi r1, r1, 0x20 -/* 00000404 0000D194 4E 80 00 20 */ blr -.endfn FovRelativeAngle__6CameraUs - -# .text:0x408 | size: 0xE4 -.fn CommunicateWithJollyRancher__6CameraPc, global -/* 00000408 0000D198 94 21 FF 48 */ stwu r1, -0xb8(r1) -/* 0000040C 0000D19C 7C 08 02 A6 */ mflr r0 -/* 00000410 0000D1A0 BF C1 00 B0 */ stmw r30, 0xb0(r1) -/* 00000414 0000D1A4 90 01 00 BC */ stw r0, 0xbc(r1) -/* 00000418 0000D1A8 3D 20 00 00 */ lis r9, DisableCommunication@ha -/* 0000041C 0000D1AC 7C 7F 1B 78 */ mr r31, r3 -/* 00000420 0000D1B0 80 09 00 00 */ lwz r0, DisableCommunication@l(r9) -/* 00000424 0000D1B4 7C 9E 23 78 */ mr r30, r4 -/* 00000428 0000D1B8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000042C 0000D1BC 40 82 04 D8 */ bne .L_00000904 -/* 00000430 0000D1C0 3D 20 00 00 */ lis r9, _6Camera.JollyRancherResponse@ha -/* 00000434 0000D1C4 38 61 00 08 */ addi r3, r1, 0x8 -/* 00000438 0000D1C8 39 29 00 00 */ addi r9, r9, _6Camera.JollyRancherResponse@l -/* 0000043C 0000D1CC 38 81 00 A8 */ addi r4, r1, 0xa8 -/* 00000440 0000D1D0 91 21 00 A8 */ stw r9, 0xa8(r1) -/* 00000444 0000D1D4 38 A0 00 04 */ li r5, 0x4 -/* 00000448 0000D1D8 90 01 00 AC */ stw r0, 0xac(r1) -/* 0000044C 0000D1DC 48 00 00 01 */ bl bMemCpy -/* 00000450 0000D1E0 38 61 00 0C */ addi r3, r1, 0xc -.L_00000454: -/* 00000454 0000D1E4 38 81 00 AC */ addi r4, r1, 0xac -/* 00000458 0000D1E8 38 A0 00 04 */ li r5, 0x4 -/* 0000045C 0000D1EC 48 00 00 01 */ bl bMemCpy -.L_00000460: -/* 00000460 0000D1F0 38 81 00 68 */ addi r4, r1, 0x68 -/* 00000464 0000D1F4 7F E3 FB 78 */ mr r3, r31 -/* 00000468 0000D1F8 48 00 00 01 */ bl PSMTX44Copy -/* 0000046C 0000D1FC 3D 20 00 00 */ lis r9, .rodata+0x5C@ha -/* 00000470 0000D200 C1 61 00 98 */ lfs f11, 0x98(r1) -/* 00000474 0000D204 C0 09 00 5C */ lfs f0, .rodata+0x5C@l(r9) -/* 00000478 0000D208 3D 60 00 00 */ lis r11, .rodata+0x60@ha -/* 0000047C 0000D20C C1 A1 00 9C */ lfs f13, 0x9c(r1) -/* 00000480 0000D210 38 A0 00 40 */ li r5, 0x40 -/* 00000484 0000D214 C1 81 00 A0 */ lfs f12, 0xa0(r1) -/* 00000488 0000D218 ED 6B 00 32 */ fmuls f11, f11, f0 -/* 0000048C 0000D21C C1 4B 00 60 */ lfs f10, .rodata+0x60@l(r11) -/* 00000490 0000D220 ED AD 00 32 */ fmuls f13, f13, f0 -/* 00000494 0000D224 ED 8C 00 32 */ fmuls f12, f12, f0 -/* 00000498 0000D228 38 61 00 10 */ addi r3, r1, 0x10 -/* 0000049C 0000D22C 38 81 00 68 */ addi r4, r1, 0x68 -/* 000004A0 0000D230 D1 61 00 98 */ stfs f11, 0x98(r1) -/* 000004A4 0000D234 D1 A1 00 9C */ stfs f13, 0x9c(r1) -/* 000004A8 0000D238 D1 81 00 A0 */ stfs f12, 0xa0(r1) -/* 000004AC 0000D23C D1 41 00 A4 */ stfs f10, 0xa4(r1) -/* 000004B0 0000D240 48 00 00 01 */ bl bMemCpy -/* 000004B4 0000D244 7F C4 F3 78 */ mr r4, r30 -/* 000004B8 0000D248 38 61 00 50 */ addi r3, r1, 0x50 -/* 000004BC 0000D24C 48 00 00 01 */ bl bStrCpy__FPcPCc -/* 000004C0 0000D250 3C 60 00 00 */ lis r3, .rodata+0x50@ha -/* 000004C4 0000D254 38 80 00 01 */ li r4, 0x1 -/* 000004C8 0000D258 38 63 00 50 */ addi r3, r3, .rodata+0x50@l -/* 000004CC 0000D25C 38 A1 00 08 */ addi r5, r1, 0x8 -/* 000004D0 0000D260 38 C0 00 60 */ li r6, 0x60 -/* 000004D4 0000D264 48 00 00 01 */ bl bFunkCallASync__FPCciPCvi -/* 000004D8 0000D268 80 01 00 BC */ lwz r0, 0xbc(r1) -/* 000004DC 0000D26C 7C 08 03 A6 */ mtlr r0 -/* 000004E0 0000D270 BB C1 00 B0 */ lmw r30, 0xb0(r1) -/* 000004E4 0000D274 38 21 00 B8 */ addi r1, r1, 0xb8 -/* 000004E8 0000D278 4E 80 00 20 */ blr -.endfn CommunicateWithJollyRancher__6CameraPc - -# .text:0x4EC | size: 0x574 -.fn SetCameraMatrix__6CameraRC8bMatrix4f, global -/* 000004EC 0000D27C 94 21 FF 50 */ stwu r1, -0xb0(r1) -/* 000004F0 0000D280 7C 08 02 A6 */ mflr r0 -/* 000004F4 0000D284 F3 41 00 80 */ psq_st f26, 0x80(r1), 0, qr0 -/* 000004F8 0000D288 F3 61 00 88 */ psq_st f27, 0x88(r1), 0, qr0 -/* 000004FC 0000D28C F3 81 00 90 */ psq_st f28, 0x90(r1), 0, qr0 -/* 00000500 0000D290 F3 A1 00 98 */ psq_st f29, 0x98(r1), 0, qr0 -/* 00000504 0000D294 F3 C1 00 A0 */ psq_st f30, 0xa0(r1), 0, qr0 -/* 00000508 0000D298 F3 E1 00 A8 */ psq_st f31, 0xa8(r1), 0, qr0 -/* 0000050C 0000D29C BF 81 00 70 */ stmw r28, 0x70(r1) -.L_00000510: -/* 00000510 0000D2A0 90 01 00 B4 */ stw r0, 0xb4(r1) -/* 00000514 0000D2A4 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha -/* 00000518 0000D2A8 7C 7F 1B 78 */ mr r31, r3 -/* 0000051C 0000D2AC 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) -/* 00000520 0000D2B0 7C 9E 23 78 */ mr r30, r4 -/* 00000524 0000D2B4 FF E0 08 90 */ fmr f31, f1 -/* 00000528 0000D2B8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000052C 0000D2BC 40 82 0A 34 */ bne .L_00000F60 -/* 00000530 0000D2C0 38 7F 00 D4 */ addi r3, r31, 0xd4 -/* 00000534 0000D2C4 7F E4 FB 78 */ mr r4, r31 -/* 00000538 0000D2C8 7C 7C 1B 78 */ mr r28, r3 -.L_0000053C: -/* 0000053C 0000D2CC 38 A0 00 D4 */ li r5, 0xd4 -/* 00000540 0000D2D0 48 00 00 01 */ bl bMemCpy -/* 00000544 0000D2D4 D3 FF 02 80 */ stfs f31, 0x280(r31) -/* 00000548 0000D2D8 3D 20 00 00 */ lis r9, _6Camera.JollyRancherResponse@ha -.L_0000054C: -/* 0000054C 0000D2DC 38 89 00 00 */ addi r4, r9, _6Camera.JollyRancherResponse@l -/* 00000550 0000D2E0 80 09 00 00 */ lwz r0, _6Camera.JollyRancherResponse@l(r9) -/* 00000554 0000D2E4 2C 00 00 00 */ cmpwi r0, 0x0 -.L_00000558: -/* 00000558 0000D2E8 41 82 05 E4 */ beq .L_00000B3C -/* 0000055C 0000D2EC 3D 20 00 00 */ lis r9, DisableCommunication@ha -/* 00000560 0000D2F0 80 09 00 00 */ lwz r0, DisableCommunication@l(r9) -/* 00000564 0000D2F4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00000568 0000D2F8 40 82 05 E4 */ bne .L_00000B4C -/* 0000056C 0000D2FC 3D 20 00 00 */ lis r9, cameralink@ha -/* 00000570 0000D300 80 09 00 00 */ lwz r0, cameralink@l(r9) -.L_00000574: -/* 00000574 0000D304 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00000578 0000D308 40 82 05 84 */ bne .L_00000AFC -/* 0000057C 0000D30C 38 00 00 01 */ li r0, 0x1 -/* 00000580 0000D310 90 09 00 00 */ stw r0, cameralink@l(r9) -/* 00000584 0000D314 3B C1 00 08 */ addi r30, r1, 0x8 -/* 00000588 0000D318 38 84 00 10 */ addi r4, r4, 0x10 -/* 0000058C 0000D31C 7F C3 F3 78 */ mr r3, r30 -/* 00000590 0000D320 38 A0 00 40 */ li r5, 0x40 -/* 00000594 0000D324 48 00 00 01 */ bl bMemCpy -/* 00000598 0000D328 7F DD F3 78 */ mr r29, r30 -/* 0000059C 0000D32C 3D 20 00 00 */ lis r9, .rodata+0x64@ha -/* 000005A0 0000D330 C1 61 00 38 */ lfs f11, 0x38(r1) -/* 000005A4 0000D334 C0 09 00 64 */ lfs f0, .rodata+0x64@l(r9) -/* 000005A8 0000D338 3D 60 00 00 */ lis r11, .rodata+0x68@ha -/* 000005AC 0000D33C C1 A1 00 3C */ lfs f13, 0x3c(r1) -/* 000005B0 0000D340 7F C3 F3 78 */ mr r3, r30 -/* 000005B4 0000D344 C1 81 00 40 */ lfs f12, 0x40(r1) -/* 000005B8 0000D348 ED 6B 00 32 */ fmuls f11, f11, f0 -/* 000005BC 0000D34C C1 4B 00 68 */ lfs f10, .rodata+0x68@l(r11) -/* 000005C0 0000D350 ED AD 00 32 */ fmuls f13, f13, f0 -/* 000005C4 0000D354 ED 8C 00 32 */ fmuls f12, f12, f0 -/* 000005C8 0000D358 D1 61 00 38 */ stfs f11, 0x38(r1) -/* 000005CC 0000D35C D1 A1 00 3C */ stfs f13, 0x3c(r1) -/* 000005D0 0000D360 7F E4 FB 78 */ mr r4, r31 -/* 000005D4 0000D364 D1 81 00 40 */ stfs f12, 0x40(r1) -/* 000005D8 0000D368 D1 41 00 44 */ stfs f10, 0x44(r1) -/* 000005DC 0000D36C 48 00 00 01 */ bl PSMTX44Copy -/* 000005E0 0000D370 48 00 06 0C */ b .L_00000BEC -/* 000005E4 0000D374 3D 20 00 00 */ lis r9, cameralink@ha -/* 000005E8 0000D378 80 09 00 00 */ lwz r0, cameralink@l(r9) -/* 000005EC 0000D37C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000005F0 0000D380 41 82 05 FC */ beq .L_00000BEC -/* 000005F4 0000D384 38 00 00 00 */ li r0, 0x0 -/* 000005F8 0000D388 90 09 00 00 */ stw r0, cameralink@l(r9) -/* 000005FC 0000D38C 7F C3 F3 78 */ mr r3, r30 -/* 00000600 0000D390 7F E4 FB 78 */ mr r4, r31 -/* 00000604 0000D394 48 00 00 01 */ bl PSMTX44Copy -/* 00000608 0000D398 3B A1 00 08 */ addi r29, r1, 0x8 -/* 0000060C 0000D39C 7F E4 FB 78 */ mr r4, r31 -/* 00000610 0000D3A0 7F A3 EB 78 */ mr r3, r29 -/* 00000614 0000D3A4 48 00 00 01 */ bl bTransposeMatrix__FP8bMatrix4PC8bMatrix4 -/* 00000618 0000D3A8 3D 20 00 00 */ lis r9, .rodata+0x6C@ha -.L_0000061C: -/* 0000061C 0000D3AC 7F A4 EB 78 */ mr r4, r29 -/* 00000620 0000D3B0 C3 E9 00 6C */ lfs f31, .rodata+0x6C@l(r9) -/* 00000624 0000D3B4 38 7F 00 40 */ addi r3, r31, 0x40 -/* 00000628 0000D3B8 38 BF 00 30 */ addi r5, r31, 0x30 -/* 0000062C 0000D3BC D3 E1 00 14 */ stfs f31, 0x14(r1) -/* 00000630 0000D3C0 D3 E1 00 24 */ stfs f31, 0x24(r1) -/* 00000634 0000D3C4 D3 E1 00 34 */ stfs f31, 0x34(r1) -.L_00000638: -/* 00000638 0000D3C8 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 -/* 0000063C 0000D3CC C1 BF 00 40 */ lfs f13, 0x40(r31) -/* 00000640 0000D3D0 38 7F 00 50 */ addi r3, r31, 0x50 -/* 00000644 0000D3D4 C1 9F 00 44 */ lfs f12, 0x44(r31) -.L_00000648: -/* 00000648 0000D3D8 38 81 00 28 */ addi r4, r1, 0x28 -/* 0000064C 0000D3DC C0 1F 00 48 */ lfs f0, 0x48(r31) -/* 00000650 0000D3E0 FD A0 68 50 */ fneg f13, f13 -/* 00000654 0000D3E4 FD 80 60 50 */ fneg f12, f12 -/* 00000658 0000D3E8 D1 BF 00 40 */ stfs f13, 0x40(r31) -/* 0000065C 0000D3EC FC 00 00 50 */ fneg f0, f0 -/* 00000660 0000D3F0 D1 9F 00 44 */ stfs f12, 0x44(r31) -/* 00000664 0000D3F4 D0 1F 00 48 */ stfs f0, 0x48(r31) -/* 00000668 0000D3F8 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -/* 0000066C 0000D3FC C0 1F 00 B0 */ lfs f0, 0xb0(r31) -/* 00000670 0000D400 C1 BF 00 50 */ lfs f13, 0x50(r31) -/* 00000674 0000D404 C1 9F 00 54 */ lfs f12, 0x54(r31) -/* 00000678 0000D408 C1 7F 00 58 */ lfs f11, 0x58(r31) -/* 0000067C 0000D40C C1 5F 00 40 */ lfs f10, 0x40(r31) -/* 00000680 0000D410 C1 3F 00 44 */ lfs f9, 0x44(r31) -/* 00000684 0000D414 C1 1F 00 48 */ lfs f8, 0x48(r31) -/* 00000688 0000D418 ED AD 50 3A */ fmadds f13, f13, f0, f10 -/* 0000068C 0000D41C 80 1F 02 7C */ lwz r0, 0x27c(r31) -/* 00000690 0000D420 ED 8C 48 3A */ fmadds f12, f12, f0, f9 -/* 00000694 0000D424 ED 6B 40 3A */ fmadds f11, f11, f0, f8 -/* 00000698 0000D428 D1 BF 00 60 */ stfs f13, 0x60(r31) -/* 0000069C 0000D42C D1 9F 00 64 */ stfs f12, 0x64(r31) -/* 000006A0 0000D430 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000006A4 0000D434 D1 7F 00 68 */ stfs f11, 0x68(r31) -/* 000006A8 0000D438 41 82 06 D0 */ beq .L_00000D78 -/* 000006AC 0000D43C 38 00 00 00 */ li r0, 0x0 -/* 000006B0 0000D440 7F 83 E3 78 */ mr r3, r28 -.L_000006B4: -/* 000006B4 0000D444 90 1F 02 7C */ stw r0, 0x27c(r31) -/* 000006B8 0000D448 7F E4 FB 78 */ mr r4, r31 -/* 000006BC 0000D44C 38 A0 00 D4 */ li r5, 0xd4 -/* 000006C0 0000D450 48 00 00 01 */ bl bMemCpy -/* 000006C4 0000D454 3D 20 00 00 */ lis r9, .rodata+0x68@ha -/* 000006C8 0000D458 C0 09 00 68 */ lfs f0, .rodata+0x68@l(r9) -/* 000006CC 0000D45C D0 1F 02 80 */ stfs f0, 0x280(r31) -/* 000006D0 0000D460 C0 1F 02 80 */ lfs f0, 0x280(r31) -/* 000006D4 0000D464 FC 00 F8 00 */ fcmpu cr0, f0, f31 -/* 000006D8 0000D468 4C 62 03 82 */ cror un, eq, lt -/* 000006DC 0000D46C 41 83 0A 34 */ bso .L_00001110 -/* 000006E0 0000D470 3D 20 00 00 */ lis r9, .rodata+0x68@ha -/* 000006E4 0000D474 C1 7F 01 14 */ lfs f11, 0x114(r31) -/* 000006E8 0000D478 C3 E9 00 68 */ lfs f31, .rodata+0x68@l(r9) -/* 000006EC 0000D47C 38 81 00 58 */ addi r4, r1, 0x58 -/* 000006F0 0000D480 C1 5F 01 18 */ lfs f10, 0x118(r31) -/* 000006F4 0000D484 38 61 00 48 */ addi r3, r1, 0x48 -/* 000006F8 0000D488 EF FF 00 24 */ fdivs f31, f31, f0 -/* 000006FC 0000D48C C1 3F 01 1C */ lfs f9, 0x11c(r31) -/* 00000700 0000D490 C1 9F 00 40 */ lfs f12, 0x40(r31) -/* 00000704 0000D494 C1 BF 00 44 */ lfs f13, 0x44(r31) -/* 00000708 0000D498 C0 1F 00 48 */ lfs f0, 0x48(r31) -/* 0000070C 0000D49C ED 8C 58 28 */ fsubs f12, f12, f11 -/* 00000710 0000D4A0 ED AD 50 28 */ fsubs f13, f13, f10 -/* 00000714 0000D4A4 D1 81 00 58 */ stfs f12, 0x58(r1) -/* 00000718 0000D4A8 EC 00 48 28 */ fsubs f0, f0, f9 -/* 0000071C 0000D4AC D1 A1 00 5C */ stfs f13, 0x5c(r1) -/* 00000720 0000D4B0 D0 01 00 60 */ stfs f0, 0x60(r1) -/* 00000724 0000D4B4 48 00 00 01 */ bl __8bVector3RC8bVector3 -/* 00000728 0000D4B8 C1 01 00 48 */ lfs f8, 0x48(r1) -/* 0000072C 0000D4BC 38 81 00 58 */ addi r4, r1, 0x58 -/* 00000730 0000D4C0 C0 E1 00 4C */ lfs f7, 0x4c(r1) -/* 00000734 0000D4C4 38 61 00 48 */ addi r3, r1, 0x48 -/* 00000738 0000D4C8 C1 21 00 50 */ lfs f9, 0x50(r1) -/* 0000073C 0000D4CC ED 08 07 F2 */ fmuls f8, f8, f31 -/* 00000740 0000D4D0 C1 BF 01 24 */ lfs f13, 0x124(r31) -/* 00000744 0000D4D4 EC E7 07 F2 */ fmuls f7, f7, f31 -/* 00000748 0000D4D8 C1 9F 01 28 */ lfs f12, 0x128(r31) -/* 0000074C 0000D4DC ED 29 07 F2 */ fmuls f9, f9, f31 -/* 00000750 0000D4E0 C0 DF 01 2C */ lfs f6, 0x12c(r31) -/* 00000754 0000D4E4 C1 5F 00 50 */ lfs f10, 0x50(r31) -/* 00000758 0000D4E8 C1 7F 00 54 */ lfs f11, 0x54(r31) -/* 0000075C 0000D4EC C0 1F 00 58 */ lfs f0, 0x58(r31) -/* 00000760 0000D4F0 ED 4A 68 28 */ fsubs f10, f10, f13 -/* 00000764 0000D4F4 D1 1F 01 E8 */ stfs f8, 0x1e8(r31) -/* 00000768 0000D4F8 ED 6B 60 28 */ fsubs f11, f11, f12 -/* 0000076C 0000D4FC D0 FF 01 EC */ stfs f7, 0x1ec(r31) -/* 00000770 0000D500 EC 00 30 28 */ fsubs f0, f0, f6 -/* 00000774 0000D504 D1 3F 01 F0 */ stfs f9, 0x1f0(r31) -/* 00000778 0000D508 D1 41 00 58 */ stfs f10, 0x58(r1) -/* 0000077C 0000D50C D1 61 00 5C */ stfs f11, 0x5c(r1) -/* 00000780 0000D510 D0 01 00 60 */ stfs f0, 0x60(r1) -/* 00000784 0000D514 48 00 00 01 */ bl __8bVector3RC8bVector3 -/* 00000788 0000D518 C1 01 00 48 */ lfs f8, 0x48(r1) -/* 0000078C 0000D51C 38 61 00 48 */ addi r3, r1, 0x48 -/* 00000790 0000D520 C0 E1 00 4C */ lfs f7, 0x4c(r1) -/* 00000794 0000D524 38 81 00 58 */ addi r4, r1, 0x58 -/* 00000798 0000D528 C1 21 00 50 */ lfs f9, 0x50(r1) -/* 0000079C 0000D52C ED 08 07 F2 */ fmuls f8, f8, f31 -/* 000007A0 0000D530 C1 BF 01 34 */ lfs f13, 0x134(r31) -/* 000007A4 0000D534 EC E7 07 F2 */ fmuls f7, f7, f31 -/* 000007A8 0000D538 C1 9F 01 38 */ lfs f12, 0x138(r31) -/* 000007AC 0000D53C ED 29 07 F2 */ fmuls f9, f9, f31 -/* 000007B0 0000D540 C0 DF 01 3C */ lfs f6, 0x13c(r31) -/* 000007B4 0000D544 C1 5F 00 60 */ lfs f10, 0x60(r31) -/* 000007B8 0000D548 C1 7F 00 64 */ lfs f11, 0x64(r31) -/* 000007BC 0000D54C C0 1F 00 68 */ lfs f0, 0x68(r31) -/* 000007C0 0000D550 ED 4A 68 28 */ fsubs f10, f10, f13 -/* 000007C4 0000D554 D1 1F 01 F8 */ stfs f8, 0x1f8(r31) -/* 000007C8 0000D558 ED 6B 60 28 */ fsubs f11, f11, f12 -/* 000007CC 0000D55C D0 FF 01 FC */ stfs f7, 0x1fc(r31) -/* 000007D0 0000D560 EC 00 30 28 */ fsubs f0, f0, f6 -/* 000007D4 0000D564 D1 3F 02 00 */ stfs f9, 0x200(r31) -/* 000007D8 0000D568 D1 41 00 58 */ stfs f10, 0x58(r1) -/* 000007DC 0000D56C D1 61 00 5C */ stfs f11, 0x5c(r1) -/* 000007E0 0000D570 D0 01 00 60 */ stfs f0, 0x60(r1) -/* 000007E4 0000D574 48 00 00 01 */ bl __8bVector3RC8bVector3 -/* 000007E8 0000D578 A0 1F 01 98 */ lhz r0, 0x198(r31) -/* 000007EC 0000D57C A1 1F 00 C4 */ lhz r8, 0xc4(r31) -/* 000007F0 0000D580 3D 40 43 30 */ lis r10, 0x4330 -/* 000007F4 0000D584 3D 20 00 00 */ lis r9, .rodata+0x70@ha -/* 000007F8 0000D588 C1 BF 01 84 */ lfs f13, 0x184(r31) -/* 000007FC 0000D58C 7D 00 40 50 */ subf r8, r0, r8 -/* 00000800 0000D590 C9 89 00 70 */ lfd f12, .rodata+0x70@l(r9) -/* 00000804 0000D594 55 00 04 3E */ clrlwi r0, r8, 16 -/* 00000808 0000D598 C0 7F 00 B0 */ lfs f3, 0xb0(r31) -/* 0000080C 0000D59C 90 01 00 6C */ stw r0, 0x6c(r1) -/* 00000810 0000D5A0 7D 69 5B 78 */ mr r9, r11 -/* 00000814 0000D5A4 EC 63 68 28 */ fsubs f3, f3, f13 -/* 00000818 0000D5A8 C1 3F 01 88 */ lfs f9, 0x188(r31) -/* 0000081C 0000D5AC 91 41 00 68 */ stw r10, 0x68(r1) -/* 00000820 0000D5B0 EC 63 07 F2 */ fmuls f3, f3, f31 -/* 00000824 0000D5B4 C0 9F 00 B4 */ lfs f4, 0xb4(r31) -/* 00000828 0000D5B8 C8 01 00 68 */ lfd f0, 0x68(r1) -/* 0000082C 0000D5BC C0 DF 00 BC */ lfs f6, 0xbc(r31) -/* 00000830 0000D5C0 EC 84 48 28 */ fsubs f4, f4, f9 -/* 00000834 0000D5C4 FC 00 60 28 */ fsub f0, f0, f12 -/* 00000838 0000D5C8 C0 FF 00 C0 */ lfs f7, 0xc0(r31) -/* 0000083C 0000D5CC FC 00 00 18 */ frsp f0, f0 -/* 00000840 0000D5D0 C1 9F 01 90 */ lfs f12, 0x190(r31) -/* 00000844 0000D5D4 EC 1F 00 32 */ fmuls f0, f31, f0 -/* 00000848 0000D5D8 C1 1F 00 C8 */ lfs f8, 0xc8(r31) -/* 0000084C 0000D5DC FD A0 00 90 */ fmr f13, f0 -/* 00000850 0000D5E0 C1 5F 01 8C */ lfs f10, 0x18c(r31) -/* 00000854 0000D5E4 FD 60 68 1E */ fctiwz f11, f13 -/* 00000858 0000D5E8 C0 1F 01 94 */ lfs f0, 0x194(r31) -/* 0000085C 0000D5EC C1 BF 01 9C */ lfs f13, 0x19c(r31) -/* 00000860 0000D5F0 EC C6 60 28 */ fsubs f6, f6, f12 -/* 00000864 0000D5F4 D9 61 00 68 */ stfd f11, 0x68(r1) -/* 00000868 0000D5F8 EC E7 00 28 */ fsubs f7, f7, f0 -/* 0000086C 0000D5FC C1 7F 01 A0 */ lfs f11, 0x1a0(r31) -/* 00000870 0000D600 ED 08 68 28 */ fsubs f8, f8, f13 -/* 00000874 0000D604 C0 BF 00 B8 */ lfs f5, 0xb8(r31) -/* 00000878 0000D608 EC 84 07 F2 */ fmuls f4, f4, f31 -/* 0000087C 0000D60C C1 3F 00 CC */ lfs f9, 0xcc(r31) -/* 00000880 0000D610 EC C6 07 F2 */ fmuls f6, f6, f31 -/* 00000884 0000D614 C0 01 00 48 */ lfs f0, 0x48(r1) -/* 00000888 0000D618 EC A5 50 28 */ fsubs f5, f5, f10 -/* 0000088C 0000D61C C1 A1 00 4C */ lfs f13, 0x4c(r1) -/* 00000890 0000D620 ED 29 58 28 */ fsubs f9, f9, f11 -/* 00000894 0000D624 C1 81 00 50 */ lfs f12, 0x50(r1) -/* 00000898 0000D628 EC 00 07 F2 */ fmuls f0, f0, f31 -/* 0000089C 0000D62C ED AD 07 F2 */ fmuls f13, f13, f31 -/* 000008A0 0000D630 C1 7F 01 44 */ lfs f11, 0x144(r31) -/* 000008A4 0000D634 ED 8C 07 F2 */ fmuls f12, f12, f31 -/* 000008A8 0000D638 C1 5F 00 70 */ lfs f10, 0x70(r31) -/* 000008AC 0000D63C D0 1F 02 08 */ stfs f0, 0x208(r31) -/* 000008B0 0000D640 EC A5 07 F2 */ fmuls f5, f5, f31 -/* 000008B4 0000D644 D1 BF 02 0C */ stfs f13, 0x20c(r31) -/* 000008B8 0000D648 EC E7 07 F2 */ fmuls f7, f7, f31 -/* 000008BC 0000D64C D1 9F 02 10 */ stfs f12, 0x210(r31) -/* 000008C0 0000D650 ED 08 07 F2 */ fmuls f8, f8, f31 -/* 000008C4 0000D654 81 21 00 6C */ lwz r9, 0x6c(r1) -/* 000008C8 0000D658 ED 29 07 F2 */ fmuls f9, f9, f31 -/* 000008CC 0000D65C C0 1F 01 48 */ lfs f0, 0x148(r31) -.L_000008D0: -/* 000008D0 0000D660 ED 4A 58 28 */ fsubs f10, f10, f11 -/* 000008D4 0000D664 C1 BF 01 4C */ lfs f13, 0x14c(r31) -/* 000008D8 0000D668 ED 4A 07 F2 */ fmuls f10, f10, f31 -/* 000008DC 0000D66C C1 9F 01 50 */ lfs f12, 0x150(r31) -/* 000008E0 0000D670 C3 9F 00 74 */ lfs f28, 0x74(r31) -/* 000008E4 0000D674 C3 7F 00 78 */ lfs f27, 0x78(r31) -/* 000008E8 0000D678 C3 5F 00 7C */ lfs f26, 0x7c(r31) -/* 000008EC 0000D67C EF 9C 00 28 */ fsubs f28, f28, f0 -/* 000008F0 0000D680 D0 7F 02 58 */ stfs f3, 0x258(r31) -.L_000008F4: -/* 000008F4 0000D684 EF 7B 68 28 */ fsubs f27, f27, f13 -/* 000008F8 0000D688 D0 9F 02 5C */ stfs f4, 0x25c(r31) -/* 000008FC 0000D68C EF 5A 60 28 */ fsubs f26, f26, f12 -/* 00000900 0000D690 D0 BF 02 60 */ stfs f5, 0x260(r31) -.L_00000904: -/* 00000904 0000D694 EF 9C 07 F2 */ fmuls f28, f28, f31 -/* 00000908 0000D698 D0 DF 02 64 */ stfs f6, 0x264(r31) -/* 0000090C 0000D69C EF 7B 07 F2 */ fmuls f27, f27, f31 -/* 00000910 0000D6A0 D0 FF 02 68 */ stfs f7, 0x268(r31) -/* 00000914 0000D6A4 EF 5A 07 F2 */ fmuls f26, f26, f31 -/* 00000918 0000D6A8 D1 1F 02 70 */ stfs f8, 0x270(r31) -/* 0000091C 0000D6AC D1 3F 02 74 */ stfs f9, 0x274(r31) -/* 00000920 0000D6B0 B1 3F 02 6C */ sth r9, 0x26c(r31) -/* 00000924 0000D6B4 D1 5F 02 18 */ stfs f10, 0x218(r31) -/* 00000928 0000D6B8 C0 1F 01 64 */ lfs f0, 0x164(r31) -/* 0000092C 0000D6BC C1 BF 01 68 */ lfs f13, 0x168(r31) -/* 00000930 0000D6C0 C1 9F 01 6C */ lfs f12, 0x16c(r31) -/* 00000934 0000D6C4 C1 7F 01 70 */ lfs f11, 0x170(r31) -/* 00000938 0000D6C8 C0 5F 00 90 */ lfs f2, 0x90(r31) -/* 0000093C 0000D6CC C0 3F 00 94 */ lfs f1, 0x94(r31) -/* 00000940 0000D6D0 C3 DF 00 98 */ lfs f30, 0x98(r31) -/* 00000944 0000D6D4 EC 42 00 28 */ fsubs f2, f2, f0 -/* 00000948 0000D6D8 C3 BF 00 9C */ lfs f29, 0x9c(r31) -/* 0000094C 0000D6DC EC 21 68 28 */ fsubs f1, f1, f13 -/* 00000950 0000D6E0 EF DE 60 28 */ fsubs f30, f30, f12 -/* 00000954 0000D6E4 C0 1F 01 5C */ lfs f0, 0x15c(r31) -/* 00000958 0000D6E8 EF BD 58 28 */ fsubs f29, f29, f11 -/* 0000095C 0000D6EC C1 9F 01 54 */ lfs f12, 0x154(r31) -/* 00000960 0000D6F0 C1 7F 01 58 */ lfs f11, 0x158(r31) -/* 00000964 0000D6F4 EC 42 07 F2 */ fmuls f2, f2, f31 -/* 00000968 0000D6F8 C1 BF 01 60 */ lfs f13, 0x160(r31) -/* 0000096C 0000D6FC EC 21 07 F2 */ fmuls f1, f1, f31 -/* 00000970 0000D700 C0 7F 00 80 */ lfs f3, 0x80(r31) -/* 00000974 0000D704 EF DE 07 F2 */ fmuls f30, f30, f31 -/* 00000978 0000D708 C0 9F 00 84 */ lfs f4, 0x84(r31) -/* 0000097C 0000D70C EF BD 07 F2 */ fmuls f29, f29, f31 -/* 00000980 0000D710 C0 BF 00 88 */ lfs f5, 0x88(r31) -/* 00000984 0000D714 EC 63 60 28 */ fsubs f3, f3, f12 -/* 00000988 0000D718 C1 1F 00 8C */ lfs f8, 0x8c(r31) -/* 0000098C 0000D71C EC 84 58 28 */ fsubs f4, f4, f11 -/* 00000990 0000D720 EC A5 00 28 */ fsubs f5, f5, f0 -/* 00000994 0000D724 C1 9F 01 74 */ lfs f12, 0x174(r31) -/* 00000998 0000D728 ED 08 68 28 */ fsubs f8, f8, f13 -.L_0000099C: -/* 0000099C 0000D72C C0 1F 01 7C */ lfs f0, 0x17c(r31) -/* 000009A0 0000D730 C1 BF 01 80 */ lfs f13, 0x180(r31) -/* 000009A4 0000D734 EC 63 07 F2 */ fmuls f3, f3, f31 -/* 000009A8 0000D738 C1 5F 00 A0 */ lfs f10, 0xa0(r31) -/* 000009AC 0000D73C EC 84 07 F2 */ fmuls f4, f4, f31 -/* 000009B0 0000D740 C0 FF 00 A4 */ lfs f7, 0xa4(r31) -/* 000009B4 0000D744 EC A5 07 F2 */ fmuls f5, f5, f31 -/* 000009B8 0000D748 C0 DF 00 A8 */ lfs f6, 0xa8(r31) -.L_000009BC: -/* 000009BC 0000D74C ED 4A 60 28 */ fsubs f10, f10, f12 -/* 000009C0 0000D750 C1 3F 00 AC */ lfs f9, 0xac(r31) -/* 000009C4 0000D754 ED 08 07 F2 */ fmuls f8, f8, f31 -/* 000009C8 0000D758 C1 7F 01 78 */ lfs f11, 0x178(r31) -/* 000009CC 0000D75C EC C6 00 28 */ fsubs f6, f6, f0 -/* 000009D0 0000D760 D3 9F 02 1C */ stfs f28, 0x21c(r31) -/* 000009D4 0000D764 ED 29 68 28 */ fsubs f9, f9, f13 -/* 000009D8 0000D768 D3 7F 02 20 */ stfs f27, 0x220(r31) -.L_000009DC: -/* 000009DC 0000D76C EC E7 58 28 */ fsubs f7, f7, f11 -/* 000009E0 0000D770 D3 5F 02 24 */ stfs f26, 0x224(r31) -/* 000009E4 0000D774 ED 89 07 F2 */ fmuls f12, f9, f31 -/* 000009E8 0000D778 D0 5F 02 38 */ stfs f2, 0x238(r31) -/* 000009EC 0000D77C ED AA 07 F2 */ fmuls f13, f10, f31 -/* 000009F0 0000D780 D0 3F 02 3C */ stfs f1, 0x23c(r31) -/* 000009F4 0000D784 EC 07 07 F2 */ fmuls f0, f7, f31 -/* 000009F8 0000D788 D3 DF 02 40 */ stfs f30, 0x240(r31) -/* 000009FC 0000D78C EF E6 07 F2 */ fmuls f31, f6, f31 -/* 00000A00 0000D790 D3 BF 02 44 */ stfs f29, 0x244(r31) -.L_00000A04: -/* 00000A04 0000D794 D0 7F 02 28 */ stfs f3, 0x228(r31) -/* 00000A08 0000D798 D0 9F 02 2C */ stfs f4, 0x22c(r31) -/* 00000A0C 0000D79C D0 BF 02 30 */ stfs f5, 0x230(r31) -/* 00000A10 0000D7A0 D1 1F 02 34 */ stfs f8, 0x234(r31) -/* 00000A14 0000D7A4 D1 41 00 48 */ stfs f10, 0x48(r1) -/* 00000A18 0000D7A8 D1 9F 02 54 */ stfs f12, 0x254(r31) -/* 00000A1C 0000D7AC D1 BF 02 48 */ stfs f13, 0x248(r31) -/* 00000A20 0000D7B0 D0 1F 02 4C */ stfs f0, 0x24c(r31) -/* 00000A24 0000D7B4 D3 FF 02 50 */ stfs f31, 0x250(r31) -/* 00000A28 0000D7B8 D0 E1 00 4C */ stfs f7, 0x4c(r1) -/* 00000A2C 0000D7BC D0 C1 00 50 */ stfs f6, 0x50(r1) -/* 00000A30 0000D7C0 D1 21 00 54 */ stfs f9, 0x54(r1) -/* 00000A34 0000D7C4 80 01 00 B4 */ lwz r0, 0xb4(r1) -/* 00000A38 0000D7C8 7C 08 03 A6 */ mtlr r0 -/* 00000A3C 0000D7CC BB 81 00 70 */ lmw r28, 0x70(r1) -/* 00000A40 0000D7D0 E3 41 00 80 */ psq_l f26, 0x80(r1), 0, qr0 -/* 00000A44 0000D7D4 E3 61 00 88 */ psq_l f27, 0x88(r1), 0, qr0 -/* 00000A48 0000D7D8 E3 81 00 90 */ psq_l f28, 0x90(r1), 0, qr0 -/* 00000A4C 0000D7DC E3 A1 00 98 */ psq_l f29, 0x98(r1), 0, qr0 -/* 00000A50 0000D7E0 E3 C1 00 A0 */ psq_l f30, 0xa0(r1), 0, qr0 -/* 00000A54 0000D7E4 E3 E1 00 A8 */ psq_l f31, 0xa8(r1), 0, qr0 -/* 00000A58 0000D7E8 38 21 00 B0 */ addi r1, r1, 0xb0 -/* 00000A5C 0000D7EC 4E 80 00 20 */ blr -.endfn SetCameraMatrix__6CameraRC8bMatrix4f - -# .text:0xA60 | size: 0x2B4 -.fn ApplyNoise__6CameraP8bMatrix4ff, global -/* 00000A60 0000D7F0 94 21 FF 30 */ stwu r1, -0xd0(r1) -/* 00000A64 0000D7F4 7C 08 02 A6 */ mflr r0 -/* 00000A68 0000D7F8 F3 61 00 A8 */ psq_st f27, 0xa8(r1), 0, qr0 -/* 00000A6C 0000D7FC F3 81 00 B0 */ psq_st f28, 0xb0(r1), 0, qr0 -/* 00000A70 0000D800 F3 A1 00 B8 */ psq_st f29, 0xb8(r1), 0, qr0 -/* 00000A74 0000D804 F3 C1 00 C0 */ psq_st f30, 0xc0(r1), 0, qr0 -/* 00000A78 0000D808 F3 E1 00 C8 */ psq_st f31, 0xc8(r1), 0, qr0 -/* 00000A7C 0000D80C BF 41 00 90 */ stmw r26, 0x90(r1) -/* 00000A80 0000D810 90 01 00 D4 */ stw r0, 0xd4(r1) -/* 00000A84 0000D814 7C 7E 1B 78 */ mr r30, r3 -/* 00000A88 0000D818 3B 81 00 08 */ addi r28, r1, 0x8 -/* 00000A8C 0000D81C C0 1E 00 70 */ lfs f0, 0x70(r30) -/* 00000A90 0000D820 FF C0 08 90 */ fmr f30, f1 -/* 00000A94 0000D824 C1 BE 00 74 */ lfs f13, 0x74(r30) -/* 00000A98 0000D828 3B 61 00 48 */ addi r27, r1, 0x48 -/* 00000A9C 0000D82C C1 9E 00 78 */ lfs f12, 0x78(r30) -/* 00000AA0 0000D830 FF 60 10 90 */ fmr f27, f2 -/* 00000AA4 0000D834 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 00000AA8 0000D838 7C 9A 23 78 */ mr r26, r4 -/* 00000AAC 0000D83C D1 A1 00 0C */ stfs f13, 0xc(r1) -/* 00000AB0 0000D840 3F A0 B6 0B */ lis r29, 0xb60b -/* 00000AB4 0000D844 63 BD 60 B7 */ ori r29, r29, 0x60b7 -/* 00000AB8 0000D848 C1 7E 00 7C */ lfs f11, 0x7c(r30) -/* 00000ABC 0000D84C D1 9C 00 08 */ stfs f12, 0x8(r28) -/* 00000AC0 0000D850 D1 61 00 14 */ stfs f11, 0x14(r1) -/* 00000AC4 0000D854 C0 01 00 08 */ lfs f0, 0x8(r1) -/* 00000AC8 0000D858 ED 6B 07 B2 */ fmuls f11, f11, f30 -/* 00000ACC 0000D85C C1 A1 00 0C */ lfs f13, 0xc(r1) -/* 00000AD0 0000D860 C1 9C 00 08 */ lfs f12, 0x8(r28) -/* 00000AD4 0000D864 EC 00 07 B2 */ fmuls f0, f0, f30 -/* 00000AD8 0000D868 ED AD 07 B2 */ fmuls f13, f13, f30 -/* 00000ADC 0000D86C D0 01 00 08 */ stfs f0, 0x8(r1) -/* 00000AE0 0000D870 D1 A1 00 0C */ stfs f13, 0xc(r1) -/* 00000AE4 0000D874 ED 8C 07 B2 */ fmuls f12, f12, f30 -/* 00000AE8 0000D878 D1 9C 00 08 */ stfs f12, 0x8(r28) -/* 00000AEC 0000D87C D1 61 00 14 */ stfs f11, 0x14(r1) -/* 00000AF0 0000D880 C0 21 00 08 */ lfs f1, 0x8(r1) -/* 00000AF4 0000D884 48 00 03 05 */ bl .L_00000DF8 -/* 00000AF8 0000D888 FF 80 08 90 */ fmr f28, f1 -.L_00000AFC: -/* 00000AFC 0000D88C C0 21 00 0C */ lfs f1, 0xc(r1) -/* 00000B00 0000D890 48 00 03 05 */ bl .L_00000E04 -/* 00000B04 0000D894 FF A0 08 90 */ fmr f29, f1 -/* 00000B08 0000D898 C0 21 00 10 */ lfs f1, 0x10(r1) -/* 00000B0C 0000D89C 48 00 03 05 */ bl .L_00000E10 -/* 00000B10 0000D8A0 FF E0 08 90 */ fmr f31, f1 -/* 00000B14 0000D8A4 C0 21 00 14 */ lfs f1, 0x14(r1) -/* 00000B18 0000D8A8 48 00 03 05 */ bl .L_00000E1C -/* 00000B1C 0000D8AC C0 1E 00 80 */ lfs f0, 0x80(r30) -/* 00000B20 0000D8B0 C1 BE 00 84 */ lfs f13, 0x84(r30) -/* 00000B24 0000D8B4 C1 9E 00 88 */ lfs f12, 0x88(r30) -/* 00000B28 0000D8B8 EF 9C 00 32 */ fmuls f28, f28, f0 -/* 00000B2C 0000D8BC C1 7E 00 8C */ lfs f11, 0x8c(r30) -/* 00000B30 0000D8C0 EF BD 03 72 */ fmuls f29, f29, f13 -/* 00000B34 0000D8C4 C1 5E 00 90 */ lfs f10, 0x90(r30) -/* 00000B38 0000D8C8 EF FF 03 32 */ fmuls f31, f31, f12 -.L_00000B3C: -/* 00000B3C 0000D8CC C0 1E 00 94 */ lfs f0, 0x94(r30) -/* 00000B40 0000D8D0 EC 21 02 F2 */ fmuls f1, f1, f11 -/* 00000B44 0000D8D4 C1 BE 00 98 */ lfs f13, 0x98(r30) -/* 00000B48 0000D8D8 D1 41 00 08 */ stfs f10, 0x8(r1) -.L_00000B4C: -/* 00000B4C 0000D8DC D0 01 00 0C */ stfs f0, 0xc(r1) -/* 00000B50 0000D8E0 D3 A1 00 1C */ stfs f29, 0x1c(r1) -/* 00000B54 0000D8E4 D3 E1 00 20 */ stfs f31, 0x20(r1) -/* 00000B58 0000D8E8 D0 21 00 24 */ stfs f1, 0x24(r1) -/* 00000B5C 0000D8EC D3 81 00 18 */ stfs f28, 0x18(r1) -/* 00000B60 0000D8F0 C1 7E 00 9C */ lfs f11, 0x9c(r30) -/* 00000B64 0000D8F4 D1 BC 00 08 */ stfs f13, 0x8(r28) -/* 00000B68 0000D8F8 D1 61 00 14 */ stfs f11, 0x14(r1) -/* 00000B6C 0000D8FC C0 01 00 08 */ lfs f0, 0x8(r1) -/* 00000B70 0000D900 ED 6B 07 B2 */ fmuls f11, f11, f30 -/* 00000B74 0000D904 C1 A1 00 0C */ lfs f13, 0xc(r1) -/* 00000B78 0000D908 C1 9C 00 08 */ lfs f12, 0x8(r28) -/* 00000B7C 0000D90C EC 00 07 B2 */ fmuls f0, f0, f30 -/* 00000B80 0000D910 ED AD 07 B2 */ fmuls f13, f13, f30 -/* 00000B84 0000D914 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 00000B88 0000D918 D1 A1 00 0C */ stfs f13, 0xc(r1) -/* 00000B8C 0000D91C ED 8C 07 B2 */ fmuls f12, f12, f30 -/* 00000B90 0000D920 D1 9C 00 08 */ stfs f12, 0x8(r28) -/* 00000B94 0000D924 D1 61 00 14 */ stfs f11, 0x14(r1) -/* 00000B98 0000D928 C0 21 00 08 */ lfs f1, 0x8(r1) -/* 00000B9C 0000D92C 48 00 03 05 */ bl .L_00000EA0 -/* 00000BA0 0000D930 FF A0 08 90 */ fmr f29, f1 -/* 00000BA4 0000D934 C0 21 00 0C */ lfs f1, 0xc(r1) -/* 00000BA8 0000D938 48 00 03 05 */ bl .L_00000EAC -/* 00000BAC 0000D93C FF C0 08 90 */ fmr f30, f1 -/* 00000BB0 0000D940 C0 21 00 10 */ lfs f1, 0x10(r1) -/* 00000BB4 0000D944 48 00 03 05 */ bl .L_00000EB8 -/* 00000BB8 0000D948 FF E0 08 90 */ fmr f31, f1 -/* 00000BBC 0000D94C C0 21 00 14 */ lfs f1, 0x14(r1) -/* 00000BC0 0000D950 48 00 03 05 */ bl .L_00000EC4 -/* 00000BC4 0000D954 C0 1E 00 A0 */ lfs f0, 0xa0(r30) -/* 00000BC8 0000D958 38 61 00 48 */ addi r3, r1, 0x48 -/* 00000BCC 0000D95C C1 BE 00 A4 */ lfs f13, 0xa4(r30) -/* 00000BD0 0000D960 C1 5E 00 A8 */ lfs f10, 0xa8(r30) -/* 00000BD4 0000D964 EF BD 00 32 */ fmuls f29, f29, f0 -/* 00000BD8 0000D968 C1 3E 00 AC */ lfs f9, 0xac(r30) -/* 00000BDC 0000D96C EF DE 03 72 */ fmuls f30, f30, f13 -/* 00000BE0 0000D970 C1 81 00 18 */ lfs f12, 0x18(r1) -/* 00000BE4 0000D974 EF FF 02 B2 */ fmuls f31, f31, f10 -/* 00000BE8 0000D978 C1 61 00 1C */ lfs f11, 0x1c(r1) -.L_00000BEC: -/* 00000BEC 0000D97C EC 21 02 72 */ fmuls f1, f1, f9 -/* 00000BF0 0000D980 C1 A1 00 20 */ lfs f13, 0x20(r1) -/* 00000BF4 0000D984 ED 8C E8 2A */ fadds f12, f12, f29 -/* 00000BF8 0000D988 C0 01 00 24 */ lfs f0, 0x24(r1) -/* 00000BFC 0000D98C ED 6B F0 2A */ fadds f11, f11, f30 -/* 00000C00 0000D990 ED AD F8 2A */ fadds f13, f13, f31 -/* 00000C04 0000D994 D3 E1 00 30 */ stfs f31, 0x30(r1) -/* 00000C08 0000D998 EC 00 08 2A */ fadds f0, f0, f1 -/* 00000C0C 0000D99C D3 A1 00 28 */ stfs f29, 0x28(r1) -/* 00000C10 0000D9A0 EC 00 06 F2 */ fmuls f0, f0, f27 -/* 00000C14 0000D9A4 D3 C1 00 2C */ stfs f30, 0x2c(r1) -/* 00000C18 0000D9A8 ED 8C 06 F2 */ fmuls f12, f12, f27 -/* 00000C1C 0000D9AC D0 01 00 44 */ stfs f0, 0x44(r1) -/* 00000C20 0000D9B0 ED 6B 06 F2 */ fmuls f11, f11, f27 -/* 00000C24 0000D9B4 D1 81 00 38 */ stfs f12, 0x38(r1) -/* 00000C28 0000D9B8 ED AD 06 F2 */ fmuls f13, f13, f27 -/* 00000C2C 0000D9BC D1 61 00 3C */ stfs f11, 0x3c(r1) -/* 00000C30 0000D9C0 D1 A1 00 40 */ stfs f13, 0x40(r1) -/* 00000C34 0000D9C4 D0 21 00 34 */ stfs f1, 0x34(r1) -/* 00000C38 0000D9C8 48 00 00 01 */ bl PSMTX44Identity -/* 00000C3C 0000D9CC 3D 20 00 00 */ lis r9, .rodata+0x78@ha -/* 00000C40 0000D9D0 C0 01 00 40 */ lfs f0, 0x40(r1) -/* 00000C44 0000D9D4 C3 E9 00 78 */ lfs f31, .rodata+0x78@l(r9) -/* 00000C48 0000D9D8 7F C3 F3 78 */ mr r3, r30 -/* 00000C4C 0000D9DC C1 81 00 38 */ lfs f12, 0x38(r1) -/* 00000C50 0000D9E0 EC 00 07 F2 */ fmuls f0, f0, f31 -/* 00000C54 0000D9E4 C1 61 00 3C */ lfs f11, 0x3c(r1) -/* 00000C58 0000D9E8 D1 81 00 78 */ stfs f12, 0x78(r1) -/* 00000C5C 0000D9EC FD A0 00 1E */ fctiwz f13, f0 -/* 00000C60 0000D9F0 D1 61 00 7C */ stfs f11, 0x7c(r1) -/* 00000C64 0000D9F4 D9 A1 00 88 */ stfd f13, 0x88(r1) -/* 00000C68 0000D9F8 81 21 00 8C */ lwz r9, 0x8c(r1) -/* 00000C6C 0000D9FC 7C 89 E8 96 */ mulhw r4, r9, r29 -.L_00000C70: -/* 00000C70 0000DA00 7D 20 FE 70 */ srawi r0, r9, 31 -/* 00000C74 0000DA04 7C 84 4A 14 */ add r4, r4, r9 -/* 00000C78 0000DA08 7C 84 46 70 */ srawi r4, r4, 8 -/* 00000C7C 0000DA0C 7C 80 20 50 */ subf r4, r0, r4 -/* 00000C80 0000DA10 54 84 04 3E */ clrlwi r4, r4, 16 -/* 00000C84 0000DA14 48 00 03 99 */ bl .L_0000101C -/* 00000C88 0000DA18 7C 65 1B 78 */ mr r5, r3 -/* 00000C8C 0000DA1C 7F 64 DB 78 */ mr r4, r27 -/* 00000C90 0000DA20 7F 63 DB 78 */ mr r3, r27 -/* 00000C94 0000DA24 48 00 00 01 */ bl eRotateX__FP8bMatrix4T0Us -/* 00000C98 0000DA28 C0 01 00 44 */ lfs f0, 0x44(r1) -.L_00000C9C: -/* 00000C9C 0000DA2C 7F C3 F3 78 */ mr r3, r30 -/* 00000CA0 0000DA30 EC 00 07 F2 */ fmuls f0, f0, f31 -/* 00000CA4 0000DA34 FD A0 00 1E */ fctiwz f13, f0 -/* 00000CA8 0000DA38 D9 A1 00 88 */ stfd f13, 0x88(r1) -/* 00000CAC 0000DA3C 81 21 00 8C */ lwz r9, 0x8c(r1) -/* 00000CB0 0000DA40 7F A9 E8 96 */ mulhw r29, r9, r29 -/* 00000CB4 0000DA44 7D 20 FE 70 */ srawi r0, r9, 31 -/* 00000CB8 0000DA48 7F BD 4A 14 */ add r29, r29, r9 -/* 00000CBC 0000DA4C 7F BD 46 70 */ srawi r29, r29, 8 -/* 00000CC0 0000DA50 7F A0 E8 50 */ subf r29, r0, r29 -/* 00000CC4 0000DA54 57 A4 04 3E */ clrlwi r4, r29, 16 -/* 00000CC8 0000DA58 48 00 03 99 */ bl .L_00001060 -/* 00000CCC 0000DA5C 7C 65 1B 78 */ mr r5, r3 -/* 00000CD0 0000DA60 7F 64 DB 78 */ mr r4, r27 -/* 00000CD4 0000DA64 7F 63 DB 78 */ mr r3, r27 -/* 00000CD8 0000DA68 48 00 00 01 */ bl eRotateY__FP8bMatrix4T0Us -/* 00000CDC 0000DA6C 7F 43 D3 78 */ mr r3, r26 -/* 00000CE0 0000DA70 7F 65 DB 78 */ mr r5, r27 -/* 00000CE4 0000DA74 7C 64 1B 78 */ mr r4, r3 -.L_00000CE8: -/* 00000CE8 0000DA78 48 00 00 01 */ bl eMulMatrix__FP8bMatrix4N20 -/* 00000CEC 0000DA7C 80 01 00 D4 */ lwz r0, 0xd4(r1) -/* 00000CF0 0000DA80 7C 08 03 A6 */ mtlr r0 -.L_00000CF4: -/* 00000CF4 0000DA84 BB 41 00 90 */ lmw r26, 0x90(r1) -/* 00000CF8 0000DA88 E3 61 00 A8 */ psq_l f27, 0xa8(r1), 0, qr0 -/* 00000CFC 0000DA8C E3 81 00 B0 */ psq_l f28, 0xb0(r1), 0, qr0 -/* 00000D00 0000DA90 E3 A1 00 B8 */ psq_l f29, 0xb8(r1), 0, qr0 -/* 00000D04 0000DA94 E3 C1 00 C0 */ psq_l f30, 0xc0(r1), 0, qr0 -/* 00000D08 0000DA98 E3 E1 00 C8 */ psq_l f31, 0xc8(r1), 0, qr0 -/* 00000D0C 0000DA9C 38 21 00 D0 */ addi r1, r1, 0xd0 -/* 00000D10 0000DAA0 4E 80 00 20 */ blr -.endfn ApplyNoise__6CameraP8bMatrix4ff - -# .text:0xD14 | size: 0xC -# Attrib::Gen::ecar::ClassKey -.fn ClassKey__Q36Attrib3Gen4ecar, global -/* 00000D14 0000DAA4 3C 60 A5 B5 */ lis r3, 0xa5b5 -/* 00000D18 0000DAA8 60 63 43 B7 */ ori r3, r3, 0x43b7 -/* 00000D1C 0000DAAC 4E 80 00 20 */ blr -.endfn ClassKey__Q36Attrib3Gen4ecar - -# .text:0xD20 | size: 0xC -# Attrib::Gen::camerainfo::ClassKey -.fn ClassKey__Q36Attrib3Gen10camerainfo, global -/* 00000D20 0000DAB0 3C 60 93 C1 */ lis r3, 0x93c1 -/* 00000D24 0000DAB4 60 63 71 E4 */ ori r3, r3, 0x71e4 -/* 00000D28 0000DAB8 4E 80 00 20 */ blr -.endfn ClassKey__Q36Attrib3Gen10camerainfo - -# .text:0xD2C | size: 0x128 -# SampleFloatTable(const float*, int, float, float, float) -.fn SampleFloatTable__FPCfifff, local -/* 00000D2C 0000DABC 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00000D30 0000DAC0 7C 84 23 79 */ mr. r4, r4 -/* 00000D34 0000DAC4 41 81 0D 44 */ bgt .L_00001A78 -/* 00000D38 0000DAC8 3D 20 00 00 */ lis r9, .rodata+0x424@ha -/* 00000D3C 0000DACC C0 29 04 24 */ lfs f1, .rodata+0x424@l(r9) -/* 00000D40 0000DAD0 48 00 0E 4C */ b .L_00001B8C -/* 00000D44 0000DAD4 FC 01 10 00 */ fcmpu cr0, f1, f2 -/* 00000D48 0000DAD8 41 81 0D 54 */ bgt .L_00001A9C -/* 00000D4C 0000DADC C0 23 00 00 */ lfs f1, 0x0(r3) -/* 00000D50 0000DAE0 48 00 0E 4C */ b .L_00001B9C -/* 00000D54 0000DAE4 FC 01 18 00 */ fcmpu cr0, f1, f3 -/* 00000D58 0000DAE8 41 80 0D 6C */ blt .L_00001AC4 -/* 00000D5C 0000DAEC 54 89 10 3A */ slwi r9, r4, 2 -/* 00000D60 0000DAF0 7D 29 1A 14 */ add r9, r9, r3 -/* 00000D64 0000DAF4 C0 29 FF FC */ lfs f1, -0x4(r9) -/* 00000D68 0000DAF8 48 00 0E 4C */ b .L_00001BB4 -/* 00000D6C 0000DAFC 38 E4 FF FF */ subi r7, r4, 0x1 -/* 00000D70 0000DB00 6C E0 80 00 */ xoris r0, r7, 0x8000 -/* 00000D74 0000DB04 3D 00 43 30 */ lis r8, 0x4330 -.L_00000D78: -/* 00000D78 0000DB08 90 01 00 0C */ stw r0, 0xc(r1) -/* 00000D7C 0000DB0C 3D 20 00 00 */ lis r9, .rodata+0x428@ha -/* 00000D80 0000DB10 C9 49 04 28 */ lfd f10, .rodata+0x428@l(r9) -.L_00000D84: -/* 00000D84 0000DB14 ED A3 10 28 */ fsubs f13, f3, f2 -/* 00000D88 0000DB18 91 01 00 08 */ stw r8, 0x8(r1) -/* 00000D8C 0000DB1C ED 61 10 28 */ fsubs f11, f1, f2 -/* 00000D90 0000DB20 7D 69 5B 78 */ mr r9, r11 -/* 00000D94 0000DB24 7D 6A 5B 78 */ mr r10, r11 -/* 00000D98 0000DB28 C8 01 00 08 */ lfd f0, 0x8(r1) -/* 00000D9C 0000DB2C FC 00 50 28 */ fsub f0, f0, f10 -/* 00000DA0 0000DB30 FC 00 00 18 */ frsp f0, f0 -/* 00000DA4 0000DB34 EC 00 68 24 */ fdivs f0, f0, f13 -/* 00000DA8 0000DB38 EC 2B 00 32 */ fmuls f1, f11, f0 -/* 00000DAC 0000DB3C FD A0 08 90 */ fmr f13, f1 -/* 00000DB0 0000DB40 FD 80 68 1E */ fctiwz f12, f13 -/* 00000DB4 0000DB44 D9 81 00 08 */ stfd f12, 0x8(r1) -/* 00000DB8 0000DB48 81 21 00 0C */ lwz r9, 0xc(r1) -/* 00000DBC 0000DB4C 6D 29 80 00 */ xoris r9, r9, 0x8000 -/* 00000DC0 0000DB50 91 21 00 0C */ stw r9, 0xc(r1) -/* 00000DC4 0000DB54 91 01 00 08 */ stw r8, 0x8(r1) -/* 00000DC8 0000DB58 C8 01 00 08 */ lfd f0, 0x8(r1) -/* 00000DCC 0000DB5C FC 00 50 28 */ fsub f0, f0, f10 -/* 00000DD0 0000DB60 FD A0 00 18 */ frsp f13, f0 -/* 00000DD4 0000DB64 FC 0D 08 00 */ fcmpu cr0, f13, f1 -/* 00000DD8 0000DB68 4C 62 03 82 */ cror un, eq, lt -/* 00000DDC 0000DB6C 41 83 0D EC */ bso .L_00001BC8 -/* 00000DE0 0000DB70 3D 20 00 00 */ lis r9, .rodata+0x430@ha -/* 00000DE4 0000DB74 C0 09 04 30 */ lfs f0, .rodata+0x430@l(r9) -/* 00000DE8 0000DB78 ED AD 00 28 */ fsubs f13, f13, f0 -/* 00000DEC 0000DB7C FC 00 68 90 */ fmr f0, f13 -/* 00000DF0 0000DB80 FD A0 00 1E */ fctiwz f13, f0 -/* 00000DF4 0000DB84 7D 69 5B 78 */ mr r9, r11 -.L_00000DF8: -/* 00000DF8 0000DB88 D9 A1 00 08 */ stfd f13, 0x8(r1) -/* 00000DFC 0000DB8C 81 61 00 0C */ lwz r11, 0xc(r1) -/* 00000E00 0000DB90 6D 60 80 00 */ xoris r0, r11, 0x8000 -.L_00000E04: -/* 00000E04 0000DB94 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00000E08 0000DB98 90 01 00 0C */ stw r0, 0xc(r1) -/* 00000E0C 0000DB9C 91 01 00 08 */ stw r8, 0x8(r1) -.L_00000E10: -/* 00000E10 0000DBA0 C8 01 00 08 */ lfd f0, 0x8(r1) -/* 00000E14 0000DBA4 FC 00 50 28 */ fsub f0, f0, f10 -/* 00000E18 0000DBA8 FC 00 00 18 */ frsp f0, f0 -.L_00000E1C: -/* 00000E1C 0000DBAC EC 41 00 28 */ fsubs f2, f1, f0 -/* 00000E20 0000DBB0 40 80 0E 28 */ bge .L_00001C48 -/* 00000E24 0000DBB4 39 60 00 00 */ li r11, 0x0 -/* 00000E28 0000DBB8 7C 0B 38 00 */ cmpw r11, r7 -/* 00000E2C 0000DBBC 41 80 0E 34 */ blt .L_00001C60 -/* 00000E30 0000DBC0 39 64 FF FE */ subi r11, r4, 0x2 -/* 00000E34 0000DBC4 55 60 10 3A */ slwi r0, r11, 2 -/* 00000E38 0000DBC8 7D 20 1A 14 */ add r9, r0, r3 -/* 00000E3C 0000DBCC 7C 03 04 2E */ lfsx f0, r3, r0 -/* 00000E40 0000DBD0 C0 29 00 04 */ lfs f1, 0x4(r9) -/* 00000E44 0000DBD4 EC 21 00 28 */ fsubs f1, f1, f0 -/* 00000E48 0000DBD8 EC 21 00 BA */ fmadds f1, f1, f2, f0 -/* 00000E4C 0000DBDC 38 21 00 10 */ addi r1, r1, 0x10 -/* 00000E50 0000DBE0 4E 80 00 20 */ blr -.endfn SampleFloatTable__FPCfifff - -# .text:0xE54 | size: 0x138 -# SampleVector2Table(const bVector2*, int, float, float, float) -.fn SampleVector2Table__FPC8bVector2ifff, local -/* 00000E54 0000DBE4 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 00000E58 0000DBE8 7C A5 2B 79 */ mr. r5, r5 -/* 00000E5C 0000DBEC 41 81 0E 74 */ bgt .L_00001CD0 -/* 00000E60 0000DBF0 3D 20 00 00 */ lis r9, .rodata+0x434@ha -/* 00000E64 0000DBF4 C0 09 04 34 */ lfs f0, .rodata+0x434@l(r9) -/* 00000E68 0000DBF8 D0 03 00 04 */ stfs f0, 0x4(r3) -/* 00000E6C 0000DBFC D0 03 00 00 */ stfs f0, 0x0(r3) -/* 00000E70 0000DC00 48 00 0F 84 */ b .L_00001DF4 -/* 00000E74 0000DC04 FC 01 10 00 */ fcmpu cr0, f1, f2 -/* 00000E78 0000DC08 4C 62 03 82 */ cror un, eq, lt -/* 00000E7C 0000DC0C 41 83 0F 84 */ bso .L_00001E00 -/* 00000E80 0000DC10 FC 01 18 00 */ fcmpu cr0, f1, f3 -/* 00000E84 0000DC14 4C 62 0B 82 */ cror un, eq, gt -/* 00000E88 0000DC18 41 83 0F 84 */ bso .L_00001E0C -/* 00000E8C 0000DC1C 38 E5 FF FF */ subi r7, r5, 0x1 -/* 00000E90 0000DC20 6C E0 80 00 */ xoris r0, r7, 0x8000 -/* 00000E94 0000DC24 3D 00 43 30 */ lis r8, 0x4330 -/* 00000E98 0000DC28 90 01 00 14 */ stw r0, 0x14(r1) -/* 00000E9C 0000DC2C 3D 20 00 00 */ lis r9, .rodata+0x438@ha -.L_00000EA0: -/* 00000EA0 0000DC30 C9 49 04 38 */ lfd f10, .rodata+0x438@l(r9) -/* 00000EA4 0000DC34 ED A3 10 28 */ fsubs f13, f3, f2 -/* 00000EA8 0000DC38 91 01 00 10 */ stw r8, 0x10(r1) -.L_00000EAC: -/* 00000EAC 0000DC3C ED 61 10 28 */ fsubs f11, f1, f2 -/* 00000EB0 0000DC40 7D 69 5B 78 */ mr r9, r11 -/* 00000EB4 0000DC44 7D 6A 5B 78 */ mr r10, r11 -.L_00000EB8: -/* 00000EB8 0000DC48 C8 01 00 10 */ lfd f0, 0x10(r1) -/* 00000EBC 0000DC4C FC 00 50 28 */ fsub f0, f0, f10 -/* 00000EC0 0000DC50 FC 00 00 18 */ frsp f0, f0 -.L_00000EC4: -/* 00000EC4 0000DC54 EC 00 68 24 */ fdivs f0, f0, f13 -/* 00000EC8 0000DC58 EC 2B 00 32 */ fmuls f1, f11, f0 -/* 00000ECC 0000DC5C FD A0 08 90 */ fmr f13, f1 -/* 00000ED0 0000DC60 FD 80 68 1E */ fctiwz f12, f13 -/* 00000ED4 0000DC64 D9 81 00 10 */ stfd f12, 0x10(r1) -/* 00000ED8 0000DC68 81 21 00 14 */ lwz r9, 0x14(r1) -/* 00000EDC 0000DC6C 6D 29 80 00 */ xoris r9, r9, 0x8000 -/* 00000EE0 0000DC70 91 21 00 14 */ stw r9, 0x14(r1) -/* 00000EE4 0000DC74 91 01 00 10 */ stw r8, 0x10(r1) -/* 00000EE8 0000DC78 C8 01 00 10 */ lfd f0, 0x10(r1) -/* 00000EEC 0000DC7C FC 00 50 28 */ fsub f0, f0, f10 -/* 00000EF0 0000DC80 FD A0 00 18 */ frsp f13, f0 -/* 00000EF4 0000DC84 FC 0D 08 00 */ fcmpu cr0, f13, f1 -/* 00000EF8 0000DC88 4C 62 03 82 */ cror un, eq, lt -/* 00000EFC 0000DC8C 41 83 0F 0C */ bso .L_00001E08 -/* 00000F00 0000DC90 3D 20 00 00 */ lis r9, .rodata+0x440@ha -/* 00000F04 0000DC94 C0 09 04 40 */ lfs f0, .rodata+0x440@l(r9) -/* 00000F08 0000DC98 ED AD 00 28 */ fsubs f13, f13, f0 -/* 00000F0C 0000DC9C FC 00 68 90 */ fmr f0, f13 -/* 00000F10 0000DCA0 FD A0 00 1E */ fctiwz f13, f0 -/* 00000F14 0000DCA4 7D 69 5B 78 */ mr r9, r11 -/* 00000F18 0000DCA8 D9 A1 00 10 */ stfd f13, 0x10(r1) -/* 00000F1C 0000DCAC 81 61 00 14 */ lwz r11, 0x14(r1) -/* 00000F20 0000DCB0 6D 60 80 00 */ xoris r0, r11, 0x8000 -/* 00000F24 0000DCB4 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00000F28 0000DCB8 90 01 00 14 */ stw r0, 0x14(r1) -.L_00000F2C: -/* 00000F2C 0000DCBC 91 01 00 10 */ stw r8, 0x10(r1) -/* 00000F30 0000DCC0 C8 01 00 10 */ lfd f0, 0x10(r1) -/* 00000F34 0000DCC4 FC 00 50 28 */ fsub f0, f0, f10 -/* 00000F38 0000DCC8 FC 00 00 18 */ frsp f0, f0 -/* 00000F3C 0000DCCC EC 21 00 28 */ fsubs f1, f1, f0 -/* 00000F40 0000DCD0 40 80 0F 48 */ bge .L_00001E88 -/* 00000F44 0000DCD4 39 60 00 00 */ li r11, 0x0 -/* 00000F48 0000DCD8 7C 0B 38 00 */ cmpw r11, r7 -/* 00000F4C 0000DCDC 41 80 0F 54 */ blt .L_00001EA0 -/* 00000F50 0000DCE0 39 65 FF FE */ subi r11, r5, 0x2 -/* 00000F54 0000DCE4 55 60 18 38 */ slwi r0, r11, 3 -/* 00000F58 0000DCE8 7D 20 22 14 */ add r9, r0, r4 -/* 00000F5C 0000DCEC 7D 64 04 2E */ lfsx f11, r4, r0 -.L_00000F60: -/* 00000F60 0000DCF0 C1 89 00 04 */ lfs f12, 0x4(r9) -/* 00000F64 0000DCF4 C1 A9 00 08 */ lfs f13, 0x8(r9) -/* 00000F68 0000DCF8 C0 09 00 0C */ lfs f0, 0xc(r9) -/* 00000F6C 0000DCFC ED AD 58 28 */ fsubs f13, f13, f11 -/* 00000F70 0000DD00 EC 00 60 28 */ fsubs f0, f0, f12 -/* 00000F74 0000DD04 EC 00 60 7A */ fmadds f0, f0, f1, f12 -/* 00000F78 0000DD08 ED AD 58 7A */ fmadds f13, f13, f1, f11 -/* 00000F7C 0000DD0C D0 01 00 0C */ stfs f0, 0xc(r1) -/* 00000F80 0000DD10 D1 A1 00 08 */ stfs f13, 0x8(r1) -/* 00000F84 0000DD14 38 21 00 18 */ addi r1, r1, 0x18 -/* 00000F88 0000DD18 4E 80 00 20 */ blr -.endfn SampleVector2Table__FPC8bVector2ifff - -# .text:0xF8C | size: 0x2C -# OutsidePovType(int) -.fn OutsidePovType__Fi, global -/* 00000F8C 0000DD1C 38 03 FF FE */ subi r0, r3, 0x2 -/* 00000F90 0000DD20 39 20 00 00 */ li r9, 0x0 -/* 00000F94 0000DD24 28 00 00 02 */ cmplwi r0, 0x2 -/* 00000F98 0000DD28 40 81 0F AC */ ble .L_00001F44 -/* 00000F9C 0000DD2C 2C 03 00 06 */ cmpwi r3, 0x6 -/* 00000FA0 0000DD30 41 82 0F AC */ beq .L_00001F4C -/* 00000FA4 0000DD34 2C 03 00 05 */ cmpwi r3, 0x5 -/* 00000FA8 0000DD38 40 82 0F B0 */ bne .L_00001F58 -/* 00000FAC 0000DD3C 39 20 00 01 */ li r9, 0x1 -/* 00000FB0 0000DD40 7D 23 4B 78 */ mr r3, r9 -/* 00000FB4 0000DD44 4E 80 00 20 */ blr -.endfn OutsidePovType__Fi - -# .text:0xFB8 | size: 0x3C -# RenderCarPovType(int, bool) -.fn RenderCarPovType__Fib, global -/* 00000FB8 0000DD48 38 03 FF FE */ subi r0, r3, 0x2 -/* 00000FBC 0000DD4C 39 20 00 00 */ li r9, 0x0 -/* 00000FC0 0000DD50 28 00 00 02 */ cmplwi r0, 0x2 -/* 00000FC4 0000DD54 40 81 0F E8 */ ble .L_00001FAC -/* 00000FC8 0000DD58 2C 03 00 01 */ cmpwi r3, 0x1 -/* 00000FCC 0000DD5C 40 82 0F D8 */ bne .L_00001FA4 -/* 00000FD0 0000DD60 2C 04 00 00 */ cmpwi r4, 0x0 -/* 00000FD4 0000DD64 41 82 0F E8 */ beq .L_00001FBC -/* 00000FD8 0000DD68 2C 03 00 06 */ cmpwi r3, 0x6 -/* 00000FDC 0000DD6C 41 82 0F E8 */ beq .L_00001FC4 -/* 00000FE0 0000DD70 2C 03 00 05 */ cmpwi r3, 0x5 -/* 00000FE4 0000DD74 40 82 0F EC */ bne .L_00001FD0 -/* 00000FE8 0000DD78 39 20 00 01 */ li r9, 0x1 -/* 00000FEC 0000DD7C 7D 23 4B 78 */ mr r3, r9 -/* 00000FF0 0000DD80 4E 80 00 20 */ blr -.endfn RenderCarPovType__Fib - -# .text:0xFF4 | size: 0x24 -.fn Blend__t6tTable1ZfPfN21f, global -/* 00000FF4 0000DD84 3D 20 00 00 */ lis r9, .rodata+0x444@ha -/* 00000FF8 0000DD88 C1 A6 00 00 */ lfs f13, 0x0(r6) -/* 00000FFC 0000DD8C C0 09 04 44 */ lfs f0, .rodata+0x444@l(r9) -/* 00001000 0000DD90 C1 85 00 00 */ lfs f12, 0x0(r5) -/* 00001004 0000DD94 EC 00 08 28 */ fsubs f0, f0, f1 -/* 00001008 0000DD98 ED AD 00 32 */ fmuls f13, f13, f0 -/* 0000100C 0000DD9C ED 8C 68 7A */ fmadds f12, f12, f1, f13 -/* 00001010 0000DDA0 D1 84 00 00 */ stfs f12, 0x0(r4) -/* 00001014 0000DDA4 4E 80 00 20 */ blr -.endfn Blend__t6tTable1ZfPfN21f - -# .text:0x1018 | size: 0x38 -.fn Blend__t6tTable1Z8bVector2P8bVector2N21f, global -/* 00001018 0000DDA8 3D 20 00 00 */ lis r9, .rodata+0x448@ha -.L_0000101C: -/* 0000101C 0000DDAC C0 06 00 00 */ lfs f0, 0x0(r6) -/* 00001020 0000DDB0 C1 89 04 48 */ lfs f12, .rodata+0x448@l(r9) -/* 00001024 0000DDB4 C1 A5 00 00 */ lfs f13, 0x0(r5) -/* 00001028 0000DDB8 ED 8C 08 28 */ fsubs f12, f12, f1 -/* 0000102C 0000DDBC EC 00 03 32 */ fmuls f0, f0, f12 -/* 00001030 0000DDC0 ED AD 00 7A */ fmadds f13, f13, f1, f0 -/* 00001034 0000DDC4 D1 A4 00 00 */ stfs f13, 0x0(r4) -/* 00001038 0000DDC8 C0 06 00 04 */ lfs f0, 0x4(r6) -/* 0000103C 0000DDCC C1 A5 00 04 */ lfs f13, 0x4(r5) -/* 00001040 0000DDD0 EC 00 03 32 */ fmuls f0, f0, f12 -/* 00001044 0000DDD4 ED AD 00 7A */ fmadds f13, f13, f1, f0 -/* 00001048 0000DDD8 D1 A4 00 04 */ stfs f13, 0x4(r4) -/* 0000104C 0000DDDC 4E 80 00 20 */ blr -.endfn Blend__t6tTable1Z8bVector2P8bVector2N21f - -# .text:0x1050 | size: 0x31C -.fn __12CameraAnchori, global -/* 00001050 0000DDE0 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 00001054 0000DDE4 7C 08 02 A6 */ mflr r0 -/* 00001058 0000DDE8 F3 E1 00 20 */ psq_st f31, 0x20(r1), 0, qr0 -/* 0000105C 0000DDEC BF 81 00 10 */ stmw r28, 0x10(r1) -.L_00001060: -/* 00001060 0000DDF0 90 01 00 2C */ stw r0, 0x2c(r1) -/* 00001064 0000DDF4 3D 20 00 00 */ lis r9, .rodata+0x44C@ha -/* 00001068 0000DDF8 7C 7F 1B 78 */ mr r31, r3 -/* 0000106C 0000DDFC C3 E9 04 4C */ lfs f31, .rodata+0x44C@l(r9) -/* 00001070 0000DE00 3B C0 00 00 */ li r30, 0x0 -/* 00001074 0000DE04 7C 9C 23 78 */ mr r28, r4 -/* 00001078 0000DE08 93 DF 00 88 */ stw r30, 0x88(r31) -/* 0000107C 0000DE0C 80 9F 00 94 */ lwz r4, 0x94(r31) -/* 00001080 0000DE10 38 7F 00 90 */ addi r3, r31, 0x90 -/* 00001084 0000DE14 D3 FF 00 10 */ stfs f31, 0x10(r31) -/* 00001088 0000DE18 38 A0 00 00 */ li r5, 0x0 -/* 0000108C 0000DE1C D3 FF 00 14 */ stfs f31, 0x14(r31) -/* 00001090 0000DE20 38 C0 00 00 */ li r6, 0x0 -/* 00001094 0000DE24 93 DF 00 8C */ stw r30, 0x8c(r31) -/* 00001098 0000DE28 48 00 00 01 */ bl __Q26Attrib8InstancePCQ26Attrib10CollectionUiPQ33UTL3COM8IUnknown -/* 0000109C 0000DE2C 80 1F 00 98 */ lwz r0, 0x98(r31) -/* 000010A0 0000DE30 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000010A4 0000DE34 40 82 10 B4 */ bne .L_00002158 -/* 000010A8 0000DE38 38 60 00 FC */ li r3, 0xfc -/* 000010AC 0000DE3C 48 00 00 01 */ bl DefaultDataArea__6AttribUi -/* 000010B0 0000DE40 90 7F 00 98 */ stw r3, 0x98(r31) -/* 000010B4 0000DE44 3D 20 00 00 */ lis r9, .rodata+0x450@ha -/* 000010B8 0000DE48 D3 FF 00 A4 */ stfs f31, 0xa4(r31) -/* 000010BC 0000DE4C C0 09 04 50 */ lfs f0, .rodata+0x450@l(r9) -/* 000010C0 0000DE50 D3 FF 00 A8 */ stfs f31, 0xa8(r31) -/* 000010C4 0000DE54 D3 FF 00 AC */ stfs f31, 0xac(r31) -/* 000010C8 0000DE58 D3 FF 00 B0 */ stfs f31, 0xb0(r31) -/* 000010CC 0000DE5C 93 DF 00 B4 */ stw r30, 0xb4(r31) -/* 000010D0 0000DE60 93 DF 00 B8 */ stw r30, 0xb8(r31) -/* 000010D4 0000DE64 93 DF 00 BC */ stw r30, 0xbc(r31) -/* 000010D8 0000DE68 93 DF 00 C0 */ stw r30, 0xc0(r31) -/* 000010DC 0000DE6C 93 DF 00 C4 */ stw r30, 0xc4(r31) -/* 000010E0 0000DE70 93 DF 00 C8 */ stw r30, 0xc8(r31) -/* 000010E4 0000DE74 93 DF 00 CC */ stw r30, 0xcc(r31) -/* 000010E8 0000DE78 93 DF 00 D0 */ stw r30, 0xd0(r31) -/* 000010EC 0000DE7C D0 1F 00 D4 */ stfs f0, 0xd4(r31) -/* 000010F0 0000DE80 48 00 0D 15 */ bl .L_00001E04 -/* 000010F4 0000DE84 3C 80 EE C2 */ lis r4, 0xeec2 -/* 000010F8 0000DE88 60 84 27 1A */ ori r4, r4, 0x271a -/* 000010FC 0000DE8C 48 00 00 01 */ bl FindCollection__6AttribUiUi -/* 00001100 0000DE90 7C 64 1B 78 */ mr r4, r3 -/* 00001104 0000DE94 38 A0 00 00 */ li r5, 0x0 -/* 00001108 0000DE98 38 7F 00 FC */ addi r3, r31, 0xfc -/* 0000110C 0000DE9C 38 C0 00 00 */ li r6, 0x0 -.L_00001110: -/* 00001110 0000DEA0 48 00 00 01 */ bl __Q26Attrib8InstancePCQ26Attrib10CollectionUiPQ33UTL3COM8IUnknown -/* 00001114 0000DEA4 80 1F 01 04 */ lwz r0, 0x104(r31) -/* 00001118 0000DEA8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000111C 0000DEAC 40 82 11 2C */ bne .L_00002248 -/* 00001120 0000DEB0 38 60 01 20 */ li r3, 0x120 -/* 00001124 0000DEB4 48 00 00 01 */ bl DefaultDataArea__6AttribUi -/* 00001128 0000DEB8 90 7F 01 04 */ stw r3, 0x104(r31) -/* 0000112C 0000DEBC 48 00 0D 21 */ bl .L_00001E4C -/* 00001130 0000DEC0 3C 80 EE C2 */ lis r4, 0xeec2 -/* 00001134 0000DEC4 60 84 27 1A */ ori r4, r4, 0x271a -/* 00001138 0000DEC8 48 00 00 01 */ bl FindCollection__6AttribUiUi -/* 0000113C 0000DECC 7C 64 1B 78 */ mr r4, r3 -/* 00001140 0000DED0 38 A0 00 00 */ li r5, 0x0 -/* 00001144 0000DED4 38 7F 01 10 */ addi r3, r31, 0x110 -/* 00001148 0000DED8 38 C0 00 00 */ li r6, 0x0 -/* 0000114C 0000DEDC 48 00 00 01 */ bl __Q26Attrib8InstancePCQ26Attrib10CollectionUiPQ33UTL3COM8IUnknown -/* 00001150 0000DEE0 80 1F 01 18 */ lwz r0, 0x118(r31) -/* 00001154 0000DEE4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00001158 0000DEE8 40 82 11 68 */ bne .L_000022C0 -/* 0000115C 0000DEEC 38 60 00 84 */ li r3, 0x84 -.L_00001160: -/* 00001160 0000DEF0 48 00 00 01 */ bl DefaultDataArea__6AttribUi -/* 00001164 0000DEF4 90 7F 01 18 */ stw r3, 0x118(r31) -/* 00001168 0000DEF8 83 BF 01 18 */ lwz r29, 0x118(r31) -.L_0000116C: -/* 0000116C 0000DEFC 38 00 00 03 */ li r0, 0x3 -/* 00001170 0000DF00 D3 FF 00 40 */ stfs f31, 0x40(r31) -/* 00001174 0000DF04 D3 FF 00 00 */ stfs f31, 0x0(r31) -/* 00001178 0000DF08 38 7D 00 50 */ addi r3, r29, 0x50 -/* 0000117C 0000DF0C D3 FF 00 04 */ stfs f31, 0x4(r31) -/* 00001180 0000DF10 D3 FF 00 08 */ stfs f31, 0x8(r31) -/* 00001184 0000DF14 D3 FF 00 18 */ stfs f31, 0x18(r31) -/* 00001188 0000DF18 D3 FF 00 1C */ stfs f31, 0x1c(r31) -/* 0000118C 0000DF1C D3 FF 00 20 */ stfs f31, 0x20(r31) -/* 00001190 0000DF20 D3 FF 00 28 */ stfs f31, 0x28(r31) -/* 00001194 0000DF24 D3 FF 00 2C */ stfs f31, 0x2c(r31) -/* 00001198 0000DF28 D3 FF 00 30 */ stfs f31, 0x30(r31) -/* 0000119C 0000DF2C D3 FF 00 38 */ stfs f31, 0x38(r31) -/* 000011A0 0000DF30 D3 FF 00 3C */ stfs f31, 0x3c(r31) -/* 000011A4 0000DF34 B0 1F 00 D8 */ sth r0, 0xd8(r31) -/* 000011A8 0000DF38 48 00 00 01 */ bl GetLength__CQ26Attrib7Private -/* 000011AC 0000DF3C 7C 1E 18 40 */ cmplw r30, r3 -/* 000011B0 0000DF40 40 80 11 BC */ bge MinDistToWall__11CameraMover -/* 000011B4 0000DF44 38 7D 00 58 */ addi r3, r29, 0x58 -/* 000011B8 0000DF48 48 00 11 C4 */ b .L_0000237C -/* 000011BC 0000DF4C 38 60 00 04 */ li r3, 0x4 -/* 000011C0 0000DF50 48 00 00 01 */ bl DefaultDataArea__6AttribUi -/* 000011C4 0000DF54 3D 20 00 00 */ lis r9, .rodata+0x454@ha -/* 000011C8 0000DF58 C0 03 00 00 */ lfs f0, 0x0(r3) -/* 000011CC 0000DF5C C1 89 04 54 */ lfs f12, .rodata+0x454@l(r9) -/* 000011D0 0000DF60 3C 00 B6 0B */ lis r0, 0xb60b -/* 000011D4 0000DF64 60 00 60 B7 */ ori r0, r0, 0x60b7 -/* 000011D8 0000DF68 EC 00 03 32 */ fmuls f0, f0, f12 -/* 000011DC 0000DF6C 83 DF 01 18 */ lwz r30, 0x118(r31) -/* 000011E0 0000DF70 FD A0 00 1E */ fctiwz f13, f0 -/* 000011E4 0000DF74 38 7E 00 20 */ addi r3, r30, 0x20 -.L_000011E8: -/* 000011E8 0000DF78 D9 A1 00 08 */ stfd f13, 0x8(r1) -/* 000011EC 0000DF7C 81 21 00 0C */ lwz r9, 0xc(r1) -/* 000011F0 0000DF80 7C 09 00 96 */ mulhw r0, r9, r0 -/* 000011F4 0000DF84 7D 2B FE 70 */ srawi r11, r9, 31 -/* 000011F8 0000DF88 7C 00 4A 14 */ add r0, r0, r9 -/* 000011FC 0000DF8C 7C 00 46 70 */ srawi r0, r0, 8 -/* 00001200 0000DF90 7C 0B 00 50 */ subf r0, r11, r0 -/* 00001204 0000DF94 B0 1F 00 DA */ sth r0, 0xda(r31) -/* 00001208 0000DF98 48 00 00 01 */ bl GetLength__CQ26Attrib7Private -/* 0000120C 0000DF9C 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00001210 0000DFA0 41 82 12 1C */ beq .L_0000242C -/* 00001214 0000DFA4 38 7E 00 28 */ addi r3, r30, 0x28 -/* 00001218 0000DFA8 48 00 12 24 */ b .L_0000243C -/* 0000121C 0000DFAC 38 60 00 04 */ li r3, 0x4 -/* 00001220 0000DFB0 48 00 00 01 */ bl DefaultDataArea__6AttribUi -/* 00001224 0000DFB4 C0 03 00 00 */ lfs f0, 0x0(r3) -/* 00001228 0000DFB8 83 DF 01 18 */ lwz r30, 0x118(r31) -/* 0000122C 0000DFBC D0 1F 00 DC */ stfs f0, 0xdc(r31) -/* 00001230 0000DFC0 38 7E 00 40 */ addi r3, r30, 0x40 -/* 00001234 0000DFC4 48 00 00 01 */ bl GetLength__CQ26Attrib7Private -.L_00001238: -/* 00001238 0000DFC8 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000123C 0000DFCC 41 82 12 48 */ beq .L_00002484 -/* 00001240 0000DFD0 38 7E 00 48 */ addi r3, r30, 0x48 -/* 00001244 0000DFD4 48 00 12 50 */ b .L_00002494 -/* 00001248 0000DFD8 38 60 00 04 */ li r3, 0x4 -/* 0000124C 0000DFDC 48 00 00 01 */ bl DefaultDataArea__6AttribUi -/* 00001250 0000DFE0 C0 03 00 00 */ lfs f0, 0x0(r3) -/* 00001254 0000DFE4 83 DF 01 18 */ lwz r30, 0x118(r31) -/* 00001258 0000DFE8 D0 1F 00 E0 */ stfs f0, 0xe0(r31) -/* 0000125C 0000DFEC 38 7E 00 10 */ addi r3, r30, 0x10 -/* 00001260 0000DFF0 48 00 00 01 */ bl GetLength__CQ26Attrib7Private -/* 00001264 0000DFF4 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00001268 0000DFF8 41 82 12 74 */ beq .L_000024DC -/* 0000126C 0000DFFC 38 7E 00 18 */ addi r3, r30, 0x18 -/* 00001270 0000E000 48 00 12 7C */ b .L_000024EC -/* 00001274 0000E004 38 60 00 04 */ li r3, 0x4 -/* 00001278 0000E008 48 00 00 01 */ bl DefaultDataArea__6AttribUi -/* 0000127C 0000E00C C0 03 00 00 */ lfs f0, 0x0(r3) -/* 00001280 0000E010 83 DF 01 18 */ lwz r30, 0x118(r31) -/* 00001284 0000E014 D0 1F 00 E4 */ stfs f0, 0xe4(r31) -/* 00001288 0000E018 38 7E 00 30 */ addi r3, r30, 0x30 -/* 0000128C 0000E01C 48 00 00 01 */ bl GetLength__CQ26Attrib7Private -/* 00001290 0000E020 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00001294 0000E024 41 82 12 A0 */ beq .L_00002534 -/* 00001298 0000E028 38 7E 00 38 */ addi r3, r30, 0x38 -/* 0000129C 0000E02C 48 00 12 A8 */ b .L_00002544 -/* 000012A0 0000E030 38 60 00 04 */ li r3, 0x4 -/* 000012A4 0000E034 48 00 00 01 */ bl DefaultDataArea__6AttribUi -/* 000012A8 0000E038 3D 20 00 00 */ lis r9, .rodata+0x454@ha -/* 000012AC 0000E03C C0 03 00 00 */ lfs f0, 0x0(r3) -.L_000012B0: -/* 000012B0 0000E040 C1 89 04 54 */ lfs f12, .rodata+0x454@l(r9) -/* 000012B4 0000E044 3C 00 B6 0B */ lis r0, 0xb60b -/* 000012B8 0000E048 60 00 60 B7 */ ori r0, r0, 0x60b7 -/* 000012BC 0000E04C EC 00 03 32 */ fmuls f0, f0, f12 -/* 000012C0 0000E050 83 DF 01 18 */ lwz r30, 0x118(r31) -/* 000012C4 0000E054 FD A0 00 1E */ fctiwz f13, f0 -/* 000012C8 0000E058 7F C3 F3 78 */ mr r3, r30 -/* 000012CC 0000E05C D9 A1 00 08 */ stfd f13, 0x8(r1) -/* 000012D0 0000E060 81 21 00 0C */ lwz r9, 0xc(r1) -/* 000012D4 0000E064 7C 09 00 96 */ mulhw r0, r9, r0 -/* 000012D8 0000E068 7D 2B FE 70 */ srawi r11, r9, 31 -/* 000012DC 0000E06C 7C 00 4A 14 */ add r0, r0, r9 -/* 000012E0 0000E070 7C 00 46 70 */ srawi r0, r0, 8 -/* 000012E4 0000E074 7C 0B 00 50 */ subf r0, r11, r0 -/* 000012E8 0000E078 B0 1F 00 E8 */ sth r0, 0xe8(r31) -/* 000012EC 0000E07C 48 00 00 01 */ bl GetLength__CQ26Attrib7Private -/* 000012F0 0000E080 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000012F4 0000E084 41 82 13 00 */ beq .L_000025F4 -/* 000012F8 0000E088 38 7E 00 08 */ addi r3, r30, 0x8 -/* 000012FC 0000E08C 48 00 13 08 */ b .L_00002604 -/* 00001300 0000E090 38 60 00 04 */ li r3, 0x4 -/* 00001304 0000E094 48 00 00 01 */ bl DefaultDataArea__6AttribUi -/* 00001308 0000E098 C0 03 00 00 */ lfs f0, 0x0(r3) -/* 0000130C 0000E09C 83 DF 01 18 */ lwz r30, 0x118(r31) -/* 00001310 0000E0A0 D0 1F 00 EC */ stfs f0, 0xec(r31) -/* 00001314 0000E0A4 38 7E 00 64 */ addi r3, r30, 0x64 -/* 00001318 0000E0A8 48 00 00 01 */ bl GetLength__CQ26Attrib7Private -/* 0000131C 0000E0AC 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00001320 0000E0B0 41 82 13 2C */ beq .L_0000264C -/* 00001324 0000E0B4 38 7E 00 6C */ addi r3, r30, 0x6c -/* 00001328 0000E0B8 48 00 13 34 */ b .L_0000265C -/* 0000132C 0000E0BC 38 60 00 04 */ li r3, 0x4 -/* 00001330 0000E0C0 48 00 00 01 */ bl DefaultDataArea__6AttribUi -/* 00001334 0000E0C4 A0 03 00 02 */ lhz r0, 0x2(r3) -/* 00001338 0000E0C8 7F 84 E3 78 */ mr r4, r28 -/* 0000133C 0000E0CC 7F E3 FB 78 */ mr r3, r31 -/* 00001340 0000E0D0 B0 1F 00 F0 */ sth r0, 0xf0(r31) -/* 00001344 0000E0D4 48 00 13 CD */ bl .L_00002710 -/* 00001348 0000E0D8 38 7F 00 48 */ addi r3, r31, 0x48 -/* 0000134C 0000E0DC 48 00 00 01 */ bl PSMTX44Identity -/* 00001350 0000E0E0 7F E3 FB 78 */ mr r3, r31 -/* 00001354 0000E0E4 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 00001358 0000E0E8 7C 08 03 A6 */ mtlr r0 -/* 0000135C 0000E0EC BB 81 00 10 */ lmw r28, 0x10(r1) -/* 00001360 0000E0F0 E3 E1 00 20 */ psq_l f31, 0x20(r1), 0, qr0 -/* 00001364 0000E0F4 38 21 00 28 */ addi r1, r1, 0x28 -/* 00001368 0000E0F8 4E 80 00 20 */ blr -.endfn __12CameraAnchori - -# .text:0x136C | size: 0x60 -.fn _._12CameraAnchor, global -/* 0000136C 0000E0FC 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00001370 0000E100 7C 08 02 A6 */ mflr r0 -.L_00001374: -/* 00001374 0000E104 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 00001378 0000E108 90 01 00 14 */ stw r0, 0x14(r1) -/* 0000137C 0000E10C 7C 7F 1B 78 */ mr r31, r3 -/* 00001380 0000E110 7C 9E 23 78 */ mr r30, r4 -/* 00001384 0000E114 38 7F 01 10 */ addi r3, r31, 0x110 -/* 00001388 0000E118 38 80 00 00 */ li r4, 0x0 -/* 0000138C 0000E11C 48 00 00 01 */ bl _._Q26Attrib8Instance -/* 00001390 0000E120 38 7F 00 FC */ addi r3, r31, 0xfc -.L_00001394: -/* 00001394 0000E124 38 80 00 00 */ li r4, 0x0 -/* 00001398 0000E128 48 00 00 01 */ bl _._Q26Attrib8Instance -/* 0000139C 0000E12C 38 7F 00 90 */ addi r3, r31, 0x90 -/* 000013A0 0000E130 38 80 00 00 */ li r4, 0x0 -/* 000013A4 0000E134 48 00 00 01 */ bl _._Q26Attrib8Instance -/* 000013A8 0000E138 73 C0 00 01 */ andi. r0, r30, 0x1 -/* 000013AC 0000E13C 41 82 13 B8 */ beq .L_00002764 -/* 000013B0 0000E140 7F E3 FB 78 */ mr r3, r31 -/* 000013B4 0000E144 48 00 00 01 */ bl __builtin_delete -/* 000013B8 0000E148 80 01 00 14 */ lwz r0, 0x14(r1) -/* 000013BC 0000E14C 7C 08 03 A6 */ mtlr r0 -/* 000013C0 0000E150 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 000013C4 0000E154 38 21 00 10 */ addi r1, r1, 0x10 -/* 000013C8 0000E158 4E 80 00 20 */ blr -.endfn _._12CameraAnchor - -# .text:0x13CC | size: 0x78 -.fn SetModel__12CameraAnchori, global -/* 000013CC 0000E15C 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 000013D0 0000E160 7C 08 02 A6 */ mflr r0 -/* 000013D4 0000E164 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 000013D8 0000E168 90 01 00 1C */ stw r0, 0x1c(r1) -/* 000013DC 0000E16C 7C 7E 1B 78 */ mr r30, r3 -/* 000013E0 0000E170 7C 9D 23 78 */ mr r29, r4 -/* 000013E4 0000E174 80 1E 00 88 */ lwz r0, 0x88(r30) -/* 000013E8 0000E178 7C 00 E8 00 */ cmpw r0, r29 -/* 000013EC 0000E17C 41 82 14 30 */ beq .L_0000281C -/* 000013F0 0000E180 7F A3 EB 78 */ mr r3, r29 -/* 000013F4 0000E184 48 00 00 01 */ bl GetCarTypeInfoFromHash__FUi -/* 000013F8 0000E188 7C 63 1B 79 */ mr. r3, r3 -/* 000013FC 0000E18C 40 82 14 08 */ bne .L_00002804 -/* 00001400 0000E190 3D 20 00 00 */ lis r9, .rodata@ha -/* 00001404 0000E194 38 69 00 00 */ addi r3, r9, .rodata@l -/* 00001408 0000E198 93 BE 00 88 */ stw r29, 0x88(r30) -/* 0000140C 0000E19C 3B DE 00 FC */ addi r30, r30, 0xfc -/* 00001410 0000E1A0 48 00 00 01 */ bl StringToLowerCaseKey__6AttribPCc -/* 00001414 0000E1A4 7C 7D 1B 78 */ mr r29, r3 -/* 00001418 0000E1A8 48 00 0D 15 */ bl .L_0000212C -/* 0000141C 0000E1AC 7F A4 EB 78 */ mr r4, r29 -/* 00001420 0000E1B0 48 00 00 01 */ bl FindCollectionWithDefault__6AttribUiUi -/* 00001424 0000E1B4 7C 64 1B 78 */ mr r4, r3 -/* 00001428 0000E1B8 7F C3 F3 78 */ mr r3, r30 -/* 0000142C 0000E1BC 48 00 00 01 */ bl Change__Q26Attrib8InstancePCQ26Attrib10Collection -/* 00001430 0000E1C0 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 00001434 0000E1C4 7C 08 03 A6 */ mtlr r0 -/* 00001438 0000E1C8 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 0000143C 0000E1CC 38 21 00 18 */ addi r1, r1, 0x18 -/* 00001440 0000E1D0 4E 80 00 20 */ blr -.endfn SetModel__12CameraAnchori - -# .text:0x1444 | size: 0x320 -.fn GetPov__12CameraAnchori, global -/* 00001444 0000E1D4 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 00001448 0000E1D8 7C 08 02 A6 */ mflr r0 -/* 0000144C 0000E1DC F3 E1 00 28 */ psq_st f31, 0x28(r1), 0, qr0 -/* 00001450 0000E1E0 BF A1 00 1C */ stmw r29, 0x1c(r1) -/* 00001454 0000E1E4 90 01 00 34 */ stw r0, 0x34(r1) -/* 00001458 0000E1E8 7C 7F 1B 78 */ mr r31, r3 -/* 0000145C 0000E1EC 2C 04 00 03 */ cmpwi r4, 0x3 -/* 00001460 0000E1F0 B0 9F 00 D8 */ sth r4, 0xd8(r31) -/* 00001464 0000E1F4 41 82 14 C0 */ beq .L_00002924 -/* 00001468 0000E1F8 41 81 14 84 */ bgt .L_000028EC -/* 0000146C 0000E1FC 2C 04 00 01 */ cmpwi r4, 0x1 -/* 00001470 0000E200 41 82 14 A8 */ beq .L_00002918 -/* 00001474 0000E204 41 81 14 B4 */ bgt .L_00002928 -/* 00001478 0000E208 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0000147C 0000E20C 41 82 14 9C */ beq .L_00002918 -/* 00001480 0000E210 48 00 14 F0 */ b .L_00002970 -/* 00001484 0000E214 2C 04 00 05 */ cmpwi r4, 0x5 -/* 00001488 0000E218 41 82 14 D8 */ beq .L_00002960 -/* 0000148C 0000E21C 41 80 14 CC */ blt .L_00002958 -/* 00001490 0000E220 2C 04 00 06 */ cmpwi r4, 0x6 -/* 00001494 0000E224 41 82 14 E4 */ beq .L_00002978 -/* 00001498 0000E228 48 00 14 F0 */ b .L_00002988 -/* 0000149C 0000E22C 3C 80 58 55 */ lis r4, 0x5855 -/* 000014A0 0000E230 60 84 17 F3 */ ori r4, r4, 0x17f3 -/* 000014A4 0000E234 48 00 15 18 */ b .L_000029BC -/* 000014A8 0000E238 3C 80 D7 4C */ lis r4, 0xd74c -/* 000014AC 0000E23C 60 84 14 35 */ ori r4, r4, 0x1435 -/* 000014B0 0000E240 48 00 15 18 */ b .L_000029C8 -/* 000014B4 0000E244 3C 80 0C 2D */ lis r4, 0xc2d -/* 000014B8 0000E248 60 84 A7 93 */ ori r4, r4, 0xa793 -/* 000014BC 0000E24C 48 00 15 18 */ b .L_000029D4 -/* 000014C0 0000E250 3C 80 CC F0 */ lis r4, 0xccf0 -/* 000014C4 0000E254 60 84 3C B3 */ ori r4, r4, 0x3cb3 -/* 000014C8 0000E258 48 00 15 18 */ b .L_000029E0 -/* 000014CC 0000E25C 3C 80 10 20 */ lis r4, 0x1020 -/* 000014D0 0000E260 60 84 4A 90 */ ori r4, r4, 0x4a90 -/* 000014D4 0000E264 48 00 15 18 */ b .L_000029EC -/* 000014D8 0000E268 3C 80 4B 67 */ lis r4, 0x4b67 -/* 000014DC 0000E26C 60 84 5D C8 */ ori r4, r4, 0x5dc8 -/* 000014E0 0000E270 48 00 15 18 */ b .L_000029F8 -/* 000014E4 0000E274 3C 80 D7 6A */ lis r4, 0xd76a -/* 000014E8 0000E278 60 84 6F AD */ ori r4, r4, 0x6fad -/* 000014EC 0000E27C 48 00 15 18 */ b .L_00002A04 -/* 000014F0 0000E280 38 00 00 03 */ li r0, 0x3 -/* 000014F4 0000E284 B0 1F 00 D8 */ sth r0, 0xd8(r31) -/* 000014F8 0000E288 48 00 0D 21 */ bl .L_00002218 -/* 000014FC 0000E28C 3C 80 EE C2 */ lis r4, 0xeec2 -/* 00001500 0000E290 60 84 27 1A */ ori r4, r4, 0x271a -/* 00001504 0000E294 48 00 00 01 */ bl FindCollection__6AttribUiUi -/* 00001508 0000E298 7C 64 1B 78 */ mr r4, r3 -/* 0000150C 0000E29C 38 7F 01 10 */ addi r3, r31, 0x110 -/* 00001510 0000E2A0 48 00 00 01 */ bl Change__Q26Attrib8InstancePCQ26Attrib10Collection -/* 00001514 0000E2A4 48 00 15 40 */ b .L_00002A54 -/* 00001518 0000E2A8 38 7F 00 FC */ addi r3, r31, 0xfc -/* 0000151C 0000E2AC 38 A0 00 00 */ li r5, 0x0 -/* 00001520 0000E2B0 48 00 00 01 */ bl GetAttributePointer__CQ26Attrib8InstanceUiUi -/* 00001524 0000E2B4 7C 63 1B 79 */ mr. r3, r3 -/* 00001528 0000E2B8 40 82 15 34 */ bne .L_00002A5C -/* 0000152C 0000E2BC 38 60 00 0C */ li r3, 0xc -/* 00001530 0000E2C0 48 00 00 01 */ bl DefaultDataArea__6AttribUi -/* 00001534 0000E2C4 7C 64 1B 78 */ mr r4, r3 -/* 00001538 0000E2C8 38 7F 01 10 */ addi r3, r31, 0x110 -/* 0000153C 0000E2CC 48 00 00 01 */ bl ChangeWithDefault__Q26Attrib8InstanceRCQ26Attrib7RefSpec -/* 00001540 0000E2D0 3D 20 00 00 */ lis r9, .rodata+0x458@ha -/* 00001544 0000E2D4 C0 1F 00 D4 */ lfs f0, 0xd4(r31) -/* 00001548 0000E2D8 C1 A9 04 58 */ lfs f13, .rodata+0x458@l(r9) -/* 0000154C 0000E2DC FF E0 00 90 */ fmr f31, f0 -/* 00001550 0000E2E0 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00001554 0000E2E4 41 81 15 5C */ bgt .L_00002AB0 -/* 00001558 0000E2E8 FF E0 68 90 */ fmr f31, f13 -/* 0000155C 0000E2EC 48 00 00 01 */ bl eGetCurrentViewMode__Fv -/* 00001560 0000E2F0 83 DF 01 18 */ lwz r30, 0x118(r31) -/* 00001564 0000E2F4 68 7D 00 03 */ xori r29, r3, 0x3 -/* 00001568 0000E2F8 20 1D 00 00 */ subfic r0, r29, 0x0 -/* 0000156C 0000E2FC 7F A0 E9 14 */ adde r29, r0, r29 -/* 00001570 0000E300 38 7E 00 50 */ addi r3, r30, 0x50 -/* 00001574 0000E304 48 00 00 01 */ bl GetLength__CQ26Attrib7Private -/* 00001578 0000E308 7C 1D 18 40 */ cmplw r29, r3 -/* 0000157C 0000E30C 40 80 15 90 */ bge .L_00002B0C -/* 00001580 0000E310 57 A9 10 3A */ slwi r9, r29, 2 -/* 00001584 0000E314 39 29 00 58 */ addi r9, r9, 0x58 -/* 00001588 0000E318 7C 7E 4A 14 */ add r3, r30, r9 -/* 0000158C 0000E31C 48 00 15 98 */ b .L_00002B24 -/* 00001590 0000E320 38 60 00 04 */ li r3, 0x4 -/* 00001594 0000E324 48 00 00 01 */ bl DefaultDataArea__6AttribUi -/* 00001598 0000E328 3D 20 00 00 */ lis r9, .rodata+0x45C@ha -/* 0000159C 0000E32C C0 03 00 00 */ lfs f0, 0x0(r3) -/* 000015A0 0000E330 C1 89 04 5C */ lfs f12, .rodata+0x45C@l(r9) -/* 000015A4 0000E334 3C 00 B6 0B */ lis r0, 0xb60b -/* 000015A8 0000E338 60 00 60 B7 */ ori r0, r0, 0x60b7 -/* 000015AC 0000E33C EC 00 03 32 */ fmuls f0, f0, f12 -/* 000015B0 0000E340 83 DF 01 18 */ lwz r30, 0x118(r31) -/* 000015B4 0000E344 FD A0 00 1E */ fctiwz f13, f0 -/* 000015B8 0000E348 38 7E 00 20 */ addi r3, r30, 0x20 -/* 000015BC 0000E34C D9 A1 00 10 */ stfd f13, 0x10(r1) -/* 000015C0 0000E350 81 21 00 14 */ lwz r9, 0x14(r1) -/* 000015C4 0000E354 7C 09 00 96 */ mulhw r0, r9, r0 -/* 000015C8 0000E358 7D 2B FE 70 */ srawi r11, r9, 31 -/* 000015CC 0000E35C 7C 00 4A 14 */ add r0, r0, r9 -/* 000015D0 0000E360 7C 00 46 70 */ srawi r0, r0, 8 -/* 000015D4 0000E364 7C 0B 00 50 */ subf r0, r11, r0 -/* 000015D8 0000E368 B0 1F 00 DA */ sth r0, 0xda(r31) -/* 000015DC 0000E36C 48 00 00 01 */ bl GetLength__CQ26Attrib7Private -/* 000015E0 0000E370 7C 1D 18 40 */ cmplw r29, r3 -/* 000015E4 0000E374 40 80 15 F8 */ bge .L_00002BDC -/* 000015E8 0000E378 57 A9 10 3A */ slwi r9, r29, 2 -/* 000015EC 0000E37C 39 29 00 28 */ addi r9, r9, 0x28 -/* 000015F0 0000E380 7C 7E 4A 14 */ add r3, r30, r9 -/* 000015F4 0000E384 48 00 16 00 */ b .L_00002BF4 -/* 000015F8 0000E388 38 60 00 04 */ li r3, 0x4 -/* 000015FC 0000E38C 48 00 00 01 */ bl DefaultDataArea__6AttribUi -/* 00001600 0000E390 C0 03 00 00 */ lfs f0, 0x0(r3) -/* 00001604 0000E394 83 DF 01 18 */ lwz r30, 0x118(r31) -/* 00001608 0000E398 EC 00 F8 24 */ fdivs f0, f0, f31 -/* 0000160C 0000E39C 38 7E 00 40 */ addi r3, r30, 0x40 -/* 00001610 0000E3A0 D0 1F 00 DC */ stfs f0, 0xdc(r31) -/* 00001614 0000E3A4 48 00 00 01 */ bl GetLength__CQ26Attrib7Private -/* 00001618 0000E3A8 7C 1D 18 40 */ cmplw r29, r3 -/* 0000161C 0000E3AC 40 80 16 30 */ bge .L_00002C4C -/* 00001620 0000E3B0 57 A9 10 3A */ slwi r9, r29, 2 -/* 00001624 0000E3B4 39 29 00 48 */ addi r9, r9, 0x48 -/* 00001628 0000E3B8 7C 7E 4A 14 */ add r3, r30, r9 -/* 0000162C 0000E3BC 48 00 16 38 */ b TerrainVelocityNoise__11CameraMoverP8bMatrix4P12CameraAnchorff -/* 00001630 0000E3C0 38 60 00 04 */ li r3, 0x4 -/* 00001634 0000E3C4 48 00 00 01 */ bl DefaultDataArea__6AttribUi -/* 00001638 0000E3C8 C0 03 00 00 */ lfs f0, 0x0(r3) -/* 0000163C 0000E3CC 83 DF 01 18 */ lwz r30, 0x118(r31) -/* 00001640 0000E3D0 D0 1F 00 E0 */ stfs f0, 0xe0(r31) -/* 00001644 0000E3D4 38 7E 00 10 */ addi r3, r30, 0x10 -/* 00001648 0000E3D8 48 00 00 01 */ bl GetLength__CQ26Attrib7Private -/* 0000164C 0000E3DC 7C 1D 18 40 */ cmplw r29, r3 -/* 00001650 0000E3E0 40 80 16 64 */ bge .L_00002CB4 -/* 00001654 0000E3E4 57 A9 10 3A */ slwi r9, r29, 2 -/* 00001658 0000E3E8 39 29 00 18 */ addi r9, r9, 0x18 -/* 0000165C 0000E3EC 7C 7E 4A 14 */ add r3, r30, r9 -/* 00001660 0000E3F0 48 00 16 6C */ b .L_00002CCC -/* 00001664 0000E3F4 38 60 00 04 */ li r3, 0x4 -/* 00001668 0000E3F8 48 00 00 01 */ bl DefaultDataArea__6AttribUi -/* 0000166C 0000E3FC C0 03 00 00 */ lfs f0, 0x0(r3) -.L_00001670: -/* 00001670 0000E400 83 DF 01 18 */ lwz r30, 0x118(r31) -/* 00001674 0000E404 D0 1F 00 E4 */ stfs f0, 0xe4(r31) -/* 00001678 0000E408 38 7E 00 30 */ addi r3, r30, 0x30 -/* 0000167C 0000E40C 48 00 00 01 */ bl GetLength__CQ26Attrib7Private -/* 00001680 0000E410 7C 1D 18 40 */ cmplw r29, r3 -/* 00001684 0000E414 40 80 16 98 */ bge .L_00002D1C -/* 00001688 0000E418 57 A9 10 3A */ slwi r9, r29, 2 -/* 0000168C 0000E41C 39 29 00 38 */ addi r9, r9, 0x38 -/* 00001690 0000E420 7C 7E 4A 14 */ add r3, r30, r9 -.L_00001694: -/* 00001694 0000E424 48 00 16 A0 */ b .L_00002D34 -/* 00001698 0000E428 38 60 00 04 */ li r3, 0x4 -/* 0000169C 0000E42C 48 00 00 01 */ bl DefaultDataArea__6AttribUi -/* 000016A0 0000E430 C0 03 00 00 */ lfs f0, 0x0(r3) -/* 000016A4 0000E434 3D 20 00 00 */ lis r9, .rodata+0x45C@ha -/* 000016A8 0000E438 C1 89 04 5C */ lfs f12, .rodata+0x45C@l(r9) -/* 000016AC 0000E43C 3C 00 B6 0B */ lis r0, 0xb60b -/* 000016B0 0000E440 EC 00 07 F2 */ fmuls f0, f0, f31 -/* 000016B4 0000E444 EC 00 03 32 */ fmuls f0, f0, f12 -/* 000016B8 0000E448 60 00 60 B7 */ ori r0, r0, 0x60b7 -.L_000016BC: -/* 000016BC 0000E44C 83 DF 01 18 */ lwz r30, 0x118(r31) -/* 000016C0 0000E450 FD A0 00 1E */ fctiwz f13, f0 -/* 000016C4 0000E454 D9 A1 00 10 */ stfd f13, 0x10(r1) -/* 000016C8 0000E458 38 7E 00 64 */ addi r3, r30, 0x64 -/* 000016CC 0000E45C 81 21 00 14 */ lwz r9, 0x14(r1) -/* 000016D0 0000E460 7C 09 00 96 */ mulhw r0, r9, r0 -/* 000016D4 0000E464 7D 2B FE 70 */ srawi r11, r9, 31 -/* 000016D8 0000E468 7C 00 4A 14 */ add r0, r0, r9 -/* 000016DC 0000E46C 7C 00 46 70 */ srawi r0, r0, 8 -/* 000016E0 0000E470 7C 0B 00 50 */ subf r0, r11, r0 -/* 000016E4 0000E474 B0 1F 00 E8 */ sth r0, 0xe8(r31) -/* 000016E8 0000E478 48 00 00 01 */ bl GetLength__CQ26Attrib7Private -/* 000016EC 0000E47C 7C 1D 18 40 */ cmplw r29, r3 -/* 000016F0 0000E480 40 80 17 04 */ bge .L_00002DF4 -/* 000016F4 0000E484 57 A9 10 3A */ slwi r9, r29, 2 -.L_000016F8: -/* 000016F8 0000E488 39 29 00 6C */ addi r9, r9, 0x6c -/* 000016FC 0000E48C 7C 7E 4A 14 */ add r3, r30, r9 -/* 00001700 0000E490 48 00 17 0C */ b .L_00002E0C -/* 00001704 0000E494 38 60 00 04 */ li r3, 0x4 -/* 00001708 0000E498 48 00 00 01 */ bl DefaultDataArea__6AttribUi -/* 0000170C 0000E49C A0 03 00 02 */ lhz r0, 0x2(r3) -/* 00001710 0000E4A0 83 DF 01 18 */ lwz r30, 0x118(r31) -/* 00001714 0000E4A4 B0 1F 00 F0 */ sth r0, 0xf0(r31) -/* 00001718 0000E4A8 7F C3 F3 78 */ mr r3, r30 -/* 0000171C 0000E4AC 48 00 00 01 */ bl GetLength__CQ26Attrib7Private -/* 00001720 0000E4B0 7C 1D 18 40 */ cmplw r29, r3 -/* 00001724 0000E4B4 40 80 17 38 */ bge .L_00002E5C -/* 00001728 0000E4B8 57 A9 10 3A */ slwi r9, r29, 2 -/* 0000172C 0000E4BC 39 29 00 08 */ addi r9, r9, 0x8 -/* 00001730 0000E4C0 7C 7E 4A 14 */ add r3, r30, r9 -/* 00001734 0000E4C4 48 00 17 40 */ b .L_00002E74 -/* 00001738 0000E4C8 38 60 00 04 */ li r3, 0x4 -/* 0000173C 0000E4CC 48 00 00 01 */ bl DefaultDataArea__6AttribUi -/* 00001740 0000E4D0 C0 03 00 00 */ lfs f0, 0x0(r3) -/* 00001744 0000E4D4 38 7F 00 D8 */ addi r3, r31, 0xd8 -.L_00001748: -/* 00001748 0000E4D8 D0 1F 00 EC */ stfs f0, 0xec(r31) -/* 0000174C 0000E4DC 80 01 00 34 */ lwz r0, 0x34(r1) -/* 00001750 0000E4E0 7C 08 03 A6 */ mtlr r0 -/* 00001754 0000E4E4 BB A1 00 1C */ lmw r29, 0x1c(r1) -/* 00001758 0000E4E8 E3 E1 00 28 */ psq_l f31, 0x28(r1), 0, qr0 -/* 0000175C 0000E4EC 38 21 00 30 */ addi r1, r1, 0x30 -/* 00001760 0000E4F0 4E 80 00 20 */ blr -.endfn GetPov__12CameraAnchori - -# .text:0x1764 | size: 0x184 -.fn Update__12CameraAnchorfRC8bMatrix4RC8bVector3T3, global -/* 00001764 0000E4F4 94 21 FF C8 */ stwu r1, -0x38(r1) -/* 00001768 0000E4F8 7C 08 02 A6 */ mflr r0 -/* 0000176C 0000E4FC F3 C1 00 28 */ psq_st f30, 0x28(r1), 0, qr0 -/* 00001770 0000E500 F3 E1 00 30 */ psq_st f31, 0x30(r1), 0, qr0 -/* 00001774 0000E504 BF A1 00 1C */ stmw r29, 0x1c(r1) -/* 00001778 0000E508 90 01 00 3C */ stw r0, 0x3c(r1) -/* 0000177C 0000E50C 7C 7F 1B 78 */ mr r31, r3 -/* 00001780 0000E510 7C 9E 23 78 */ mr r30, r4 -.L_00001784: -/* 00001784 0000E514 7C BD 2B 78 */ mr r29, r5 -/* 00001788 0000E518 38 7F 00 18 */ addi r3, r31, 0x18 -/* 0000178C 0000E51C 38 9E 00 30 */ addi r4, r30, 0x30 -/* 00001790 0000E520 FF E0 08 90 */ fmr f31, f1 -/* 00001794 0000E524 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 -/* 00001798 0000E528 FF C0 08 90 */ fmr f30, f1 -/* 0000179C 0000E52C 7F C3 F3 78 */ mr r3, r30 -/* 000017A0 0000E530 38 9F 00 48 */ addi r4, r31, 0x48 -/* 000017A4 0000E534 48 00 00 01 */ bl PSMTX44Copy -/* 000017A8 0000E538 3D 20 00 00 */ lis r9, .rodata+0x460@ha -/* 000017AC 0000E53C 3D 40 00 00 */ lis r10, .rodata+0x464@ha -/* 000017B0 0000E540 C1 29 04 60 */ lfs f9, .rodata+0x460@l(r9) -/* 000017B4 0000E544 3D 60 00 00 */ lis r11, .rodata+0x46C@ha -/* 000017B8 0000E548 3D 20 00 00 */ lis r9, .rodata+0x468@ha -/* 000017BC 0000E54C C0 DF 00 10 */ lfs f6, 0x10(r31) -.L_000017C0: -/* 000017C0 0000E550 D1 3F 00 80 */ stfs f9, 0x80(r31) -/* 000017C4 0000E554 D1 3F 00 7C */ stfs f9, 0x7c(r31) -/* 000017C8 0000E558 D1 3F 00 78 */ stfs f9, 0x78(r31) -/* 000017CC 0000E55C C0 1E 00 30 */ lfs f0, 0x30(r30) -/* 000017D0 0000E560 D0 1F 00 18 */ stfs f0, 0x18(r31) -/* 000017D4 0000E564 C1 BE 00 34 */ lfs f13, 0x34(r30) -/* 000017D8 0000E568 D1 BF 00 1C */ stfs f13, 0x1c(r31) -/* 000017DC 0000E56C C0 1E 00 38 */ lfs f0, 0x38(r30) -/* 000017E0 0000E570 D0 1F 00 20 */ stfs f0, 0x20(r31) -/* 000017E4 0000E574 C1 BD 00 00 */ lfs f13, 0x0(r29) -/* 000017E8 0000E578 C0 1D 00 04 */ lfs f0, 0x4(r29) -/* 000017EC 0000E57C C1 9D 00 08 */ lfs f12, 0x8(r29) -/* 000017F0 0000E580 D1 BF 00 00 */ stfs f13, 0x0(r31) -/* 000017F4 0000E584 D0 1F 00 04 */ stfs f0, 0x4(r31) -/* 000017F8 0000E588 D1 9F 00 08 */ stfs f12, 0x8(r31) -/* 000017FC 0000E58C C0 1D 00 04 */ lfs f0, 0x4(r29) -/* 00001800 0000E590 C1 BD 00 00 */ lfs f13, 0x0(r29) -/* 00001804 0000E594 EC 00 00 32 */ fmuls f0, f0, f0 -/* 00001808 0000E598 C1 9D 00 08 */ lfs f12, 0x8(r29) -/* 0000180C 0000E59C ED AD 03 7A */ fmadds f13, f13, f13, f0 -/* 00001810 0000E5A0 C1 6A 04 64 */ lfs f11, .rodata+0x464@l(r10) -/* 00001814 0000E5A4 ED 4C 6B 3A */ fmadds f10, f12, f12, f13 -/* 00001818 0000E5A8 C1 09 04 68 */ lfs f8, .rodata+0x468@l(r9) -/* 0000181C 0000E5AC C0 EB 04 6C */ lfs f7, .rodata+0x46C@l(r11) -/* 00001820 0000E5B0 FC 0A 58 00 */ fcmpu cr0, f10, f11 -/* 00001824 0000E5B4 4C 62 03 82 */ cror un, eq, lt -/* 00001828 0000E5B8 41 83 18 58 */ bso .L_00003080 -/* 0000182C 0000E5BC FD 80 50 34 */ frsqrte f12, f10 -/* 00001830 0000E5C0 EC 0C 03 32 */ fmuls f0, f12, f12 -/* 00001834 0000E5C4 ED AC 02 32 */ fmuls f13, f12, f8 -/* 00001838 0000E5C8 EC 0A 38 3C */ fnmsubs f0, f10, f0, f7 -/* 0000183C 0000E5CC ED 80 63 7A */ fmadds f12, f0, f13, f12 -/* 00001840 0000E5D0 EC 0C 03 32 */ fmuls f0, f12, f12 -/* 00001844 0000E5D4 ED AC 02 32 */ fmuls f13, f12, f8 -/* 00001848 0000E5D8 EC 0A 38 3C */ fnmsubs f0, f10, f0, f7 -/* 0000184C 0000E5DC ED 80 63 7A */ fmadds f12, f0, f13, f12 -/* 00001850 0000E5E0 ED 8C 02 B2 */ fmuls f12, f12, f10 -/* 00001854 0000E5E4 48 00 18 5C */ b .L_000030B0 -/* 00001858 0000E5E8 FD 80 48 90 */ fmr f12, f9 -/* 0000185C 0000E5EC 3D 20 00 00 */ lis r9, .rodata+0x460@ha -/* 00001860 0000E5F0 D1 9F 00 10 */ stfs f12, 0x10(r31) -/* 00001864 0000E5F4 C1 69 04 60 */ lfs f11, .rodata+0x460@l(r9) -/* 00001868 0000E5F8 FC 1F 58 00 */ fcmpu cr0, f31, f11 -/* 0000186C 0000E5FC 4C 62 03 82 */ cror un, eq, lt -/* 00001870 0000E600 41 83 18 B8 */ bso .L_00003128 -/* 00001874 0000E604 EC 1E F8 24 */ fdivs f0, f30, f31 -/* 00001878 0000E608 3D 20 00 00 */ lis r9, .rodata+0x470@ha -/* 0000187C 0000E60C C1 A9 04 70 */ lfs f13, .rodata+0x470@l(r9) -/* 00001880 0000E610 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00001884 0000E614 4C 62 0B 82 */ cror un, eq, gt -/* 00001888 0000E618 41 83 18 B8 */ bso .L_00003140 -/* 0000188C 0000E61C EC 0C 30 28 */ fsubs f0, f12, f6 -.L_00001890: -/* 00001890 0000E620 39 21 00 08 */ addi r9, r1, 0x8 -/* 00001894 0000E624 EC 00 F8 24 */ fdivs f0, f0, f31 -/* 00001898 0000E628 D1 61 00 0C */ stfs f11, 0xc(r1) -/* 0000189C 0000E62C 38 9F 00 48 */ addi r4, r31, 0x48 -/* 000018A0 0000E630 7D 25 4B 78 */ mr r5, r9 -/* 000018A4 0000E634 38 7F 00 38 */ addi r3, r31, 0x38 -/* 000018A8 0000E638 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 000018AC 0000E63C D1 69 00 08 */ stfs f11, 0x8(r9) -/* 000018B0 0000E640 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 -/* 000018B4 0000E644 48 00 18 CC */ b .L_00003180 -/* 000018B8 0000E648 3D 20 00 00 */ lis r9, .rodata+0x460@ha -/* 000018BC 0000E64C C0 09 04 60 */ lfs f0, .rodata+0x460@l(r9) -/* 000018C0 0000E650 D0 1F 00 3C */ stfs f0, 0x3c(r31) -/* 000018C4 0000E654 D0 1F 00 38 */ stfs f0, 0x38(r31) -/* 000018C8 0000E658 D0 1F 00 40 */ stfs f0, 0x40(r31) -/* 000018CC 0000E65C 80 01 00 3C */ lwz r0, 0x3c(r1) -/* 000018D0 0000E660 7C 08 03 A6 */ mtlr r0 -/* 000018D4 0000E664 BB A1 00 1C */ lmw r29, 0x1c(r1) -/* 000018D8 0000E668 E3 C1 00 28 */ psq_l f30, 0x28(r1), 0, qr0 -/* 000018DC 0000E66C E3 E1 00 30 */ psq_l f31, 0x30(r1), 0, qr0 -.L_000018E0: -/* 000018E0 0000E670 38 21 00 38 */ addi r1, r1, 0x38 -.L_000018E4: -/* 000018E4 0000E674 4E 80 00 20 */ blr -.endfn Update__12CameraAnchorfRC8bMatrix4RC8bVector3T3 - -# .text:0x18E8 | size: 0x70 -# RenderCameraMovers(eView*) -.fn RenderCameraMovers__FP5eView, global -/* 000018E8 0000E678 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 000018EC 0000E67C 7C 08 02 A6 */ mflr r0 -/* 000018F0 0000E680 90 01 00 0C */ stw r0, 0xc(r1) -/* 000018F4 0000E684 81 23 00 3C */ lwz r9, 0x3c(r3) -/* 000018F8 0000E688 38 03 00 3C */ addi r0, r3, 0x3c -/* 000018FC 0000E68C 39 60 00 00 */ li r11, 0x0 -/* 00001900 0000E690 7D 20 02 78 */ xor r0, r9, r0 -/* 00001904 0000E694 21 40 00 00 */ subfic r10, r0, 0x0 -/* 00001908 0000E698 7C 0A 01 14 */ adde r0, r10, r0 -/* 0000190C 0000E69C 2F 80 00 00 */ cmpwi cr7, r0, 0x0 -/* 00001910 0000E6A0 40 9E 19 18 */ bne cr7, .L_00003228 -/* 00001914 0000E6A4 7D 2B 4B 78 */ mr r11, r9 -/* 00001918 0000E6A8 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000191C 0000E6AC 41 82 19 48 */ beq .L_00003264 -/* 00001920 0000E6B0 39 60 00 00 */ li r11, 0x0 -/* 00001924 0000E6B4 40 9E 19 2C */ bne cr7, .L_00003250 -/* 00001928 0000E6B8 7D 2B 4B 78 */ mr r11, r9 -/* 0000192C 0000E6BC 81 2B 00 08 */ lwz r9, 0x8(r11) -/* 00001930 0000E6C0 7C 64 1B 78 */ mr r4, r3 -/* 00001934 0000E6C4 A8 69 00 20 */ lha r3, 0x20(r9) -/* 00001938 0000E6C8 80 09 00 24 */ lwz r0, 0x24(r9) -/* 0000193C 0000E6CC 7C 6B 1A 14 */ add r3, r11, r3 -/* 00001940 0000E6D0 7C 08 03 A6 */ mtlr r0 -/* 00001944 0000E6D4 4E 80 00 21 */ blrl -/* 00001948 0000E6D8 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0000194C 0000E6DC 7C 08 03 A6 */ mtlr r0 -/* 00001950 0000E6E0 38 21 00 08 */ addi r1, r1, 0x8 -/* 00001954 0000E6E4 4E 80 00 20 */ blr -.endfn RenderCameraMovers__FP5eView - -# .text:0x1958 | size: 0x90 -# CameraMoverRestartRace() -.fn CameraMoverRestartRace__Fv, global -/* 00001958 0000E6E8 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 0000195C 0000E6EC 7C 08 02 A6 */ mflr r0 -/* 00001960 0000E6F0 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 00001964 0000E6F4 90 01 00 14 */ stw r0, 0x14(r1) -/* 00001968 0000E6F8 3D 20 00 00 */ lis r9, WeHaveCheckedIfJR2ServerExists@ha -/* 0000196C 0000E6FC 38 00 00 00 */ li r0, 0x0 -/* 00001970 0000E700 90 09 00 00 */ stw r0, WeHaveCheckedIfJR2ServerExists@l(r9) -/* 00001974 0000E704 3B E0 00 01 */ li r31, 0x1 -.L_00001978: -/* 00001978 0000E708 48 00 70 59 */ bl .L_000089D0 -/* 0000197C 0000E70C 3D 20 00 00 */ lis r9, eViews@ha -/* 00001980 0000E710 3B C9 00 00 */ addi r30, r9, eViews@l -/* 00001984 0000E714 1C 1F 00 68 */ mulli r0, r31, 0x68 -/* 00001988 0000E718 39 40 00 00 */ li r10, 0x0 -/* 0000198C 0000E71C 3B FF 00 01 */ addi r31, r31, 0x1 -/* 00001990 0000E720 7D 20 F2 15 */ add. r9, r0, r30 -/* 00001994 0000E724 39 69 00 3C */ addi r11, r9, 0x3c -/* 00001998 0000E728 41 82 19 CC */ beq .L_00003364 -/* 0000199C 0000E72C 80 09 00 3C */ lwz r0, 0x3c(r9) -/* 000019A0 0000E730 7C 00 58 00 */ cmpw r0, r11 -/* 000019A4 0000E734 41 82 19 AC */ beq .L_00003350 -/* 000019A8 0000E738 7C 0A 03 78 */ mr r10, r0 -/* 000019AC 0000E73C 2C 0A 00 00 */ cmpwi r10, 0x0 -/* 000019B0 0000E740 41 82 19 CC */ beq .L_0000337C -/* 000019B4 0000E744 81 2A 00 08 */ lwz r9, 0x8(r10) -.L_000019B8: -/* 000019B8 0000E748 A8 69 00 70 */ lha r3, 0x70(r9) -/* 000019BC 0000E74C 80 09 00 74 */ lwz r0, 0x74(r9) -/* 000019C0 0000E750 7C 6A 1A 14 */ add r3, r10, r3 -/* 000019C4 0000E754 7C 08 03 A6 */ mtlr r0 -/* 000019C8 0000E758 4E 80 00 21 */ blrl -/* 000019CC 0000E75C 2C 1F 00 03 */ cmpwi r31, 0x3 -/* 000019D0 0000E760 40 81 19 84 */ ble .L_00003354 -/* 000019D4 0000E764 80 01 00 14 */ lwz r0, 0x14(r1) -/* 000019D8 0000E768 7C 08 03 A6 */ mtlr r0 -/* 000019DC 0000E76C BB C1 00 08 */ lmw r30, 0x8(r1) -/* 000019E0 0000E770 38 21 00 10 */ addi r1, r1, 0x10 -/* 000019E4 0000E774 4E 80 00 20 */ blr -.endfn CameraMoverRestartRace__Fv - -# .text:0x19E8 | size: 0x2C -# GetCurrentCamera() -.fn GetCurrentCamera__Fv, global -/* 000019E8 0000E778 3D 20 00 00 */ lis r9, eViews+0x68@ha -/* 000019EC 0000E77C 38 00 00 00 */ li r0, 0x0 -/* 000019F0 0000E780 39 29 00 68 */ addi r9, r9, eViews+0x68@l -/* 000019F4 0000E784 2C 09 00 00 */ cmpwi r9, 0x0 -.L_000019F8: -/* 000019F8 0000E788 41 82 1A 00 */ beq .L_000033F8 -/* 000019FC 0000E78C 80 09 00 38 */ lwz r0, 0x38(r9) -/* 00001A00 0000E790 7C 03 03 78 */ mr r3, r0 -/* 00001A04 0000E794 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00001A08 0000E798 4C 82 00 20 */ bnelr -/* 00001A0C 0000E79C 38 60 00 00 */ li r3, 0x0 -/* 00001A10 0000E7A0 4E 80 00 20 */ blr -.endfn GetCurrentCamera__Fv - -# .text:0x1A14 | size: 0x4E8 -# UpdateCameraMovers(float) -.fn UpdateCameraMovers__Ff, global -/* 00001A14 0000E7A4 94 21 FF 70 */ stwu r1, -0x90(r1) -/* 00001A18 0000E7A8 7C 08 02 A6 */ mflr r0 -/* 00001A1C 0000E7AC F3 E1 00 88 */ psq_st f31, 0x88(r1), 0, qr0 -/* 00001A20 0000E7B0 BE C1 00 60 */ stmw r22, 0x60(r1) -/* 00001A24 0000E7B4 90 01 00 94 */ stw r0, 0x94(r1) -/* 00001A28 0000E7B8 3D 20 00 00 */ lis r9, eViews@ha -/* 00001A2C 0000E7BC FF E0 08 90 */ fmr f31, f1 -/* 00001A30 0000E7C0 3B C9 00 00 */ addi r30, r9, eViews@l -/* 00001A34 0000E7C4 3B E0 00 00 */ li r31, 0x0 -/* 00001A38 0000E7C8 1D 3F 00 68 */ mulli r9, r31, 0x68 -/* 00001A3C 0000E7CC 39 60 00 00 */ li r11, 0x0 -/* 00001A40 0000E7D0 7D 29 F2 14 */ add r9, r9, r30 -/* 00001A44 0000E7D4 80 09 00 3C */ lwz r0, 0x3c(r9) -/* 00001A48 0000E7D8 39 29 00 3C */ addi r9, r9, 0x3c -/* 00001A4C 0000E7DC 7C 00 48 00 */ cmpw r0, r9 -/* 00001A50 0000E7E0 41 82 1A 58 */ beq .L_000034A8 -/* 00001A54 0000E7E4 7C 0B 03 78 */ mr r11, r0 -/* 00001A58 0000E7E8 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00001A5C 0000E7EC 41 82 1A 7C */ beq .L_000034D8 -/* 00001A60 0000E7F0 81 2B 00 08 */ lwz r9, 0x8(r11) -/* 00001A64 0000E7F4 FC 20 F8 90 */ fmr f1, f31 -/* 00001A68 0000E7F8 A8 69 00 18 */ lha r3, 0x18(r9) -/* 00001A6C 0000E7FC 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 00001A70 0000E800 7C 6B 1A 14 */ add r3, r11, r3 -/* 00001A74 0000E804 7C 08 03 A6 */ mtlr r0 -.L_00001A78: -/* 00001A78 0000E808 4E 80 00 21 */ blrl -/* 00001A7C 0000E80C 3B FF 00 01 */ addi r31, r31, 0x1 -/* 00001A80 0000E810 2C 1F 00 15 */ cmpwi r31, 0x15 -/* 00001A84 0000E814 40 81 1A 38 */ ble .L_000034BC -/* 00001A88 0000E818 3D 20 00 00 */ lis r9, WeHaveCheckedIfJR2ServerExists@ha -/* 00001A8C 0000E81C 80 09 00 00 */ lwz r0, WeHaveCheckedIfJR2ServerExists@l(r9) -/* 00001A90 0000E820 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00001A94 0000E824 40 82 1A B8 */ bne .L_0000354C -/* 00001A98 0000E828 3C 60 00 00 */ lis r3, .rodata+0x50@ha -.L_00001A9C: -/* 00001A9C 0000E82C 38 63 00 50 */ addi r3, r3, .rodata+0x50@l -/* 00001AA0 0000E830 48 00 00 01 */ bl bFunkDoesServerExist__FPCc -/* 00001AA4 0000E834 3D 60 00 00 */ lis r11, JR2ServerExists@ha -/* 00001AA8 0000E838 38 00 00 01 */ li r0, 0x1 -/* 00001AAC 0000E83C 3D 20 00 00 */ lis r9, WeHaveCheckedIfJR2ServerExists@ha -/* 00001AB0 0000E840 90 6B 00 00 */ stw r3, JR2ServerExists@l(r11) -.L_00001AB4: -/* 00001AB4 0000E844 90 09 00 00 */ stw r0, WeHaveCheckedIfJR2ServerExists@l(r9) -/* 00001AB8 0000E848 3D 20 00 00 */ lis r9, JR2ServerExists@ha -.L_00001ABC: -/* 00001ABC 0000E84C 3D 60 00 00 */ lis r11, eViews+0xA0@ha -/* 00001AC0 0000E850 80 09 00 00 */ lwz r0, JR2ServerExists@l(r9) -.L_00001AC4: -/* 00001AC4 0000E854 83 EB 00 A0 */ lwz r31, eViews+0xA0@l(r11) -/* 00001AC8 0000E858 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00001ACC 0000E85C 41 82 1B 10 */ beq .L_000035DC -/* 00001AD0 0000E860 2C 1F 00 00 */ cmpwi r31, 0x0 -/* 00001AD4 0000E864 41 82 1B 10 */ beq .L_000035E4 -/* 00001AD8 0000E868 3D 20 00 00 */ lis r9, RealTime@ha -/* 00001ADC 0000E86C 3D 60 00 00 */ lis r11, LastUpdateTimeJR2@ha -/* 00001AE0 0000E870 81 29 00 00 */ lwz r9, RealTime@l(r9) -/* 00001AE4 0000E874 80 0B 00 00 */ lwz r0, LastUpdateTimeJR2@l(r11) -/* 00001AE8 0000E878 7C 00 48 51 */ subf. r0, r0, r9 -/* 00001AEC 0000E87C 40 80 1A F4 */ bge .L_000035E0 -/* 00001AF0 0000E880 7C 00 00 D0 */ neg r0, r0 -/* 00001AF4 0000E884 2C 00 00 10 */ cmpwi r0, 0x10 -/* 00001AF8 0000E888 40 81 1B 10 */ ble .L_00003608 -/* 00001AFC 0000E88C 3C 80 00 00 */ lis r4, .rodata+0x474@ha -/* 00001B00 0000E890 91 2B 00 00 */ stw r9, LastUpdateTimeJR2@l(r11) -/* 00001B04 0000E894 38 84 04 74 */ addi r4, r4, .rodata+0x474@l -/* 00001B08 0000E898 7F E3 FB 78 */ mr r3, r31 -/* 00001B0C 0000E89C 48 00 04 09 */ bl .L_00001F14 -/* 00001B10 0000E8A0 3D 20 00 00 */ lis r9, RemoteCaffeinating@ha -/* 00001B14 0000E8A4 80 09 00 00 */ lwz r0, RemoteCaffeinating@l(r9) -/* 00001B18 0000E8A8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00001B1C 0000E8AC 41 82 1D 10 */ beq .L_0000382C -/* 00001B20 0000E8B0 3D 20 00 00 */ lis r9, DisableCommunication@ha -/* 00001B24 0000E8B4 80 09 00 00 */ lwz r0, DisableCommunication@l(r9) -/* 00001B28 0000E8B8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00001B2C 0000E8BC 40 82 1D 10 */ bne .L_0000383C -/* 00001B30 0000E8C0 2C 1F 00 00 */ cmpwi r31, 0x0 -/* 00001B34 0000E8C4 41 82 1D 10 */ beq .L_00003844 -/* 00001B38 0000E8C8 3D 20 00 00 */ lis r9, RealTime@ha -/* 00001B3C 0000E8CC 3F 80 00 00 */ lis r28, LastUpdateTimeCaffeine@ha -/* 00001B40 0000E8D0 80 09 00 00 */ lwz r0, RealTime@l(r9) -/* 00001B44 0000E8D4 81 7C 00 00 */ lwz r11, LastUpdateTimeCaffeine@l(r28) -/* 00001B48 0000E8D8 7C 0B 00 51 */ subf. r0, r11, r0 -/* 00001B4C 0000E8DC 40 80 1B 54 */ bge .L_000036A0 -/* 00001B50 0000E8E0 7C 00 00 D0 */ neg r0, r0 -/* 00001B54 0000E8E4 2C 00 00 10 */ cmpwi r0, 0x10 -/* 00001B58 0000E8E8 40 81 1D 10 */ ble .L_00003868 -/* 00001B5C 0000E8EC 3D 20 00 00 */ lis r9, .rodata+0x484@ha -/* 00001B60 0000E8F0 C1 3F 00 50 */ lfs f9, 0x50(r31) -/* 00001B64 0000E8F4 C1 7F 00 54 */ lfs f11, 0x54(r31) -/* 00001B68 0000E8F8 38 61 00 38 */ addi r3, r1, 0x38 -/* 00001B6C 0000E8FC C1 5F 00 58 */ lfs f10, 0x58(r31) -/* 00001B70 0000E900 38 81 00 48 */ addi r4, r1, 0x48 -/* 00001B74 0000E904 C3 E9 04 84 */ lfs f31, .rodata+0x484@l(r9) -/* 00001B78 0000E908 3B DF 00 40 */ addi r30, r31, 0x40 -/* 00001B7C 0000E90C 3F A0 00 00 */ lis r29, sPrevPosition@ha -/* 00001B80 0000E910 ED 29 07 F2 */ fmuls f9, f9, f31 -/* 00001B84 0000E914 ED 6B 07 F2 */ fmuls f11, f11, f31 -/* 00001B88 0000E918 D1 21 00 38 */ stfs f9, 0x38(r1) -.L_00001B8C: -/* 00001B8C 0000E91C ED 4A 07 F2 */ fmuls f10, f10, f31 -/* 00001B90 0000E920 D1 61 00 3C */ stfs f11, 0x3c(r1) -/* 00001B94 0000E924 D1 41 00 40 */ stfs f10, 0x40(r1) -/* 00001B98 0000E928 D1 21 00 28 */ stfs f9, 0x28(r1) -.L_00001B9C: -/* 00001B9C 0000E92C D1 61 00 2C */ stfs f11, 0x2c(r1) -/* 00001BA0 0000E930 D1 41 00 30 */ stfs f10, 0x30(r1) -.L_00001BA4: -/* 00001BA4 0000E934 C0 1F 00 40 */ lfs f0, 0x40(r31) -/* 00001BA8 0000E938 C1 BF 00 44 */ lfs f13, 0x44(r31) -/* 00001BAC 0000E93C C1 9F 00 48 */ lfs f12, 0x48(r31) -/* 00001BB0 0000E940 EC 00 48 28 */ fsubs f0, f0, f9 -.L_00001BB4: -/* 00001BB4 0000E944 ED AD 58 28 */ fsubs f13, f13, f11 -/* 00001BB8 0000E948 D0 01 00 48 */ stfs f0, 0x48(r1) -.L_00001BBC: -/* 00001BBC 0000E94C ED 8C 50 28 */ fsubs f12, f12, f10 -/* 00001BC0 0000E950 D1 A1 00 4C */ stfs f13, 0x4c(r1) -/* 00001BC4 0000E954 D1 81 00 50 */ stfs f12, 0x50(r1) -.L_00001BC8: -/* 00001BC8 0000E958 48 00 00 01 */ bl __8bVector3RC8bVector3 -/* 00001BCC 0000E95C 3D 20 00 00 */ lis r9, .rodata+0x488@ha -/* 00001BD0 0000E960 C0 01 00 38 */ lfs f0, 0x38(r1) -/* 00001BD4 0000E964 C1 09 04 88 */ lfs f8, .rodata+0x488@l(r9) -/* 00001BD8 0000E968 C1 A1 00 3C */ lfs f13, 0x3c(r1) -/* 00001BDC 0000E96C 7D 49 53 78 */ mr r9, r10 -/* 00001BE0 0000E970 EC 00 02 32 */ fmuls f0, f0, f8 -/* 00001BE4 0000E974 7D 4B 53 78 */ mr r11, r10 -/* 00001BE8 0000E978 C1 81 00 40 */ lfs f12, 0x40(r1) -/* 00001BEC 0000E97C FD 60 00 1E */ fctiwz f11, f0 -/* 00001BF0 0000E980 3C C0 00 00 */ lis r6, sHavePrevPosition@ha -.L_00001BF4: -/* 00001BF4 0000E984 D9 61 00 58 */ stfd f11, 0x58(r1) -/* 00001BF8 0000E988 ED AD 02 32 */ fmuls f13, f13, f8 -/* 00001BFC 0000E98C 81 41 00 5C */ lwz r10, 0x5c(r1) -/* 00001C00 0000E990 FD 40 68 1E */ fctiwz f10, f13 -/* 00001C04 0000E994 D9 41 00 58 */ stfd f10, 0x58(r1) -/* 00001C08 0000E998 ED 8C 02 32 */ fmuls f12, f12, f8 -/* 00001C0C 0000E99C 91 41 00 08 */ stw r10, 0x8(r1) -/* 00001C10 0000E9A0 81 21 00 5C */ lwz r9, 0x5c(r1) -.L_00001C14: -/* 00001C14 0000E9A4 FD 20 60 1E */ fctiwz f9, f12 -/* 00001C18 0000E9A8 D9 21 00 58 */ stfd f9, 0x58(r1) -/* 00001C1C 0000E9AC 91 21 00 0C */ stw r9, 0xc(r1) -/* 00001C20 0000E9B0 7D 48 53 78 */ mr r8, r10 -/* 00001C24 0000E9B4 81 61 00 5C */ lwz r11, 0x5c(r1) -/* 00001C28 0000E9B8 7D 47 53 78 */ mr r7, r10 -/* 00001C2C 0000E9BC 3D 20 00 00 */ lis r9, RealTime@ha -/* 00001C30 0000E9C0 91 61 00 10 */ stw r11, 0x10(r1) -/* 00001C34 0000E9C4 80 09 00 00 */ lwz r0, RealTime@l(r9) -/* 00001C38 0000E9C8 C0 1F 00 40 */ lfs f0, 0x40(r31) -/* 00001C3C 0000E9CC 81 26 00 00 */ lwz r9, sHavePrevPosition@l(r6) -/* 00001C40 0000E9D0 EC 00 02 32 */ fmuls f0, f0, f8 -/* 00001C44 0000E9D4 90 1C 00 00 */ stw r0, LastUpdateTimeCaffeine@l(r28) -.L_00001C48: -/* 00001C48 0000E9D8 2C 09 00 00 */ cmpwi r9, 0x0 -.L_00001C4C: -/* 00001C4C 0000E9DC FD A0 00 1E */ fctiwz f13, f0 -/* 00001C50 0000E9E0 D9 A1 00 58 */ stfd f13, 0x58(r1) -.L_00001C54: -/* 00001C54 0000E9E4 81 41 00 5C */ lwz r10, 0x5c(r1) -/* 00001C58 0000E9E8 91 41 00 18 */ stw r10, 0x18(r1) -/* 00001C5C 0000E9EC C0 1F 00 44 */ lfs f0, 0x44(r31) -.L_00001C60: -/* 00001C60 0000E9F0 EC 00 02 32 */ fmuls f0, f0, f8 -/* 00001C64 0000E9F4 FD 80 00 1E */ fctiwz f12, f0 -/* 00001C68 0000E9F8 D9 81 00 58 */ stfd f12, 0x58(r1) -/* 00001C6C 0000E9FC 81 01 00 5C */ lwz r8, 0x5c(r1) -/* 00001C70 0000EA00 91 01 00 1C */ stw r8, 0x1c(r1) -/* 00001C74 0000EA04 C0 1F 00 48 */ lfs f0, 0x48(r31) -/* 00001C78 0000EA08 EC 00 02 32 */ fmuls f0, f0, f8 -/* 00001C7C 0000EA0C FD 60 00 1E */ fctiwz f11, f0 -/* 00001C80 0000EA10 D9 61 00 58 */ stfd f11, 0x58(r1) -.L_00001C84: -/* 00001C84 0000EA14 80 E1 00 5C */ lwz r7, 0x5c(r1) -/* 00001C88 0000EA18 90 E1 00 20 */ stw r7, 0x20(r1) -/* 00001C8C 0000EA1C 40 82 1C BC */ bne .L_00003948 -/* 00001C90 0000EA20 3D 20 00 00 */ lis r9, .rodata+0x48C@ha -/* 00001C94 0000EA24 38 00 00 01 */ li r0, 0x1 -/* 00001C98 0000EA28 C0 09 04 8C */ lfs f0, .rodata+0x48C@l(r9) -/* 00001C9C 0000EA2C 39 7D 00 00 */ addi r11, r29, sPrevPosition@l -.L_00001CA0: -/* 00001CA0 0000EA30 90 06 00 00 */ stw r0, sHavePrevPosition@l(r6) -/* 00001CA4 0000EA34 D0 01 00 48 */ stfs f0, 0x48(r1) -/* 00001CA8 0000EA38 D0 01 00 4C */ stfs f0, 0x4c(r1) -/* 00001CAC 0000EA3C D0 01 00 50 */ stfs f0, 0x50(r1) -/* 00001CB0 0000EA40 D0 0B 00 08 */ stfs f0, 0x8(r11) -/* 00001CB4 0000EA44 D0 1D 00 00 */ stfs f0, sPrevPosition@l(r29) -/* 00001CB8 0000EA48 D0 0B 00 04 */ stfs f0, 0x4(r11) -/* 00001CBC 0000EA4C 3D 20 00 00 */ lis r9, sPrevPosition@ha -/* 00001CC0 0000EA50 7F C4 F3 78 */ mr r4, r30 -/* 00001CC4 0000EA54 3B C9 00 00 */ addi r30, r9, sPrevPosition@l -/* 00001CC8 0000EA58 7F C3 F3 78 */ mr r3, r30 -/* 00001CCC 0000EA5C 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 -.L_00001CD0: -/* 00001CD0 0000EA60 FC 01 F8 00 */ fcmpu cr0, f1, f31 -/* 00001CD4 0000EA64 4C 62 03 82 */ cror un, eq, lt -/* 00001CD8 0000EA68 41 83 1C F4 */ bso .L_000039CC -/* 00001CDC 0000EA6C C0 1F 00 40 */ lfs f0, 0x40(r31) -/* 00001CE0 0000EA70 C1 9F 00 44 */ lfs f12, 0x44(r31) -/* 00001CE4 0000EA74 C1 BF 00 48 */ lfs f13, 0x48(r31) -/* 00001CE8 0000EA78 D0 1D 00 00 */ stfs f0, sPrevPosition@l(r29) -/* 00001CEC 0000EA7C D1 BE 00 08 */ stfs f13, 0x8(r30) -/* 00001CF0 0000EA80 D1 9E 00 04 */ stfs f12, 0x4(r30) -/* 00001CF4 0000EA84 C1 BF 00 44 */ lfs f13, 0x44(r31) -/* 00001CF8 0000EA88 3D 20 00 00 */ lis r9, .rodata+0x490@ha -/* 00001CFC 0000EA8C C0 1F 00 40 */ lfs f0, 0x40(r31) -/* 00001D00 0000EA90 ED AD 03 72 */ fmuls f13, f13, f13 -/* 00001D04 0000EA94 C1 89 04 90 */ lfs f12, .rodata+0x490@l(r9) -/* 00001D08 0000EA98 EC 00 68 3A */ fmadds f0, f0, f0, f13 -/* 00001D0C 0000EA9C FC 00 60 00 */ fcmpu cr0, f0, f12 -/* 00001D10 0000EAA0 3D 20 00 00 */ lis r9, _8GManager.mObj@ha -/* 00001D14 0000EAA4 38 00 00 01 */ li r0, 0x1 -/* 00001D18 0000EAA8 81 29 00 00 */ lwz r9, _8GManager.mObj@l(r9) -/* 00001D1C 0000EAAC 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00001D20 0000EAB0 40 82 1D 28 */ bne .L_00003A48 -/* 00001D24 0000EAB4 38 00 00 00 */ li r0, 0x0 -/* 00001D28 0000EAB8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00001D2C 0000EABC 41 82 1D 3C */ beq .L_00003A68 -.L_00001D30: -/* 00001D30 0000EAC0 80 09 02 C8 */ lwz r0, 0x2c8(r9) -/* 00001D34 0000EAC4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00001D38 0000EAC8 40 82 1E E4 */ bne .L_00003C1C -/* 00001D3C 0000EACC 3D 20 00 00 */ lis r9, _11GRaceStatus.fObj@ha -/* 00001D40 0000EAD0 38 00 00 01 */ li r0, 0x1 -/* 00001D44 0000EAD4 81 29 00 00 */ lwz r9, _11GRaceStatus.fObj@l(r9) -/* 00001D48 0000EAD8 2C 09 00 00 */ cmpwi r9, 0x0 -.L_00001D4C: -/* 00001D4C 0000EADC 40 82 1D 54 */ bne .L_00003AA0 -/* 00001D50 0000EAE0 38 00 00 00 */ li r0, 0x0 -/* 00001D54 0000EAE4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00001D58 0000EAE8 41 82 1D 68 */ beq .L_00003AC0 -/* 00001D5C 0000EAEC 80 09 1A F0 */ lwz r0, 0x1af0(r9) -/* 00001D60 0000EAF0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00001D64 0000EAF4 40 82 1E E4 */ bne .L_00003C48 -/* 00001D68 0000EAF8 3D 20 00 00 */ lis r9, .rodata+0x48C@ha -/* 00001D6C 0000EAFC 3D 60 00 00 */ lis r11, eViews@ha -/* 00001D70 0000EB00 C3 E9 04 8C */ lfs f31, .rodata+0x48C@l(r9) -.L_00001D74: -/* 00001D74 0000EB04 3A CB 00 00 */ addi r22, r11, eViews@l -/* 00001D78 0000EB08 3B 40 00 00 */ li r26, 0x0 -/* 00001D7C 0000EB0C 3B A0 00 01 */ li r29, 0x1 -/* 00001D80 0000EB10 3E E0 00 00 */ lis r23, TheTrackStreamer@ha -/* 00001D84 0000EB14 3F 00 00 00 */ lis r24, bStreamingPositionFromICE@ha -/* 00001D88 0000EB18 3F 20 00 00 */ lis r25, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@ha -/* 00001D8C 0000EB1C 1C 1D 00 68 */ mulli r0, r29, 0x68 -/* 00001D90 0000EB20 7F E0 B2 14 */ add r31, r0, r22 -/* 00001D94 0000EB24 89 3F 00 08 */ lbz r9, 0x8(r31) -/* 00001D98 0000EB28 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00001D9C 0000EB2C 41 82 1E D8 */ beq .L_00003C74 -/* 00001DA0 0000EB30 81 3F 00 3C */ lwz r9, 0x3c(r31) -/* 00001DA4 0000EB34 38 1F 00 3C */ addi r0, r31, 0x3c -/* 00001DA8 0000EB38 7C 1C 03 78 */ mr r28, r0 -/* 00001DAC 0000EB3C 39 60 00 00 */ li r11, 0x0 -/* 00001DB0 0000EB40 7C 09 00 00 */ cmpw r9, r0 -/* 00001DB4 0000EB44 41 82 1D BC */ beq .L_00003B70 -/* 00001DB8 0000EB48 7D 2B 4B 78 */ mr r11, r9 -/* 00001DBC 0000EB4C 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00001DC0 0000EB50 41 82 1E D8 */ beq .L_00003C98 -/* 00001DC4 0000EB54 2C 1A 00 00 */ cmpwi r26, 0x0 -/* 00001DC8 0000EB58 3F 60 00 00 */ lis r27, TheTrackStreamer@ha -/* 00001DCC 0000EB5C 40 82 1D DC */ bne .L_00003BA8 -/* 00001DD0 0000EB60 38 77 00 00 */ addi r3, r23, TheTrackStreamer@l -/* 00001DD4 0000EB64 3B 40 00 01 */ li r26, 0x1 -/* 00001DD8 0000EB68 48 00 00 01 */ bl ClearStreamingPositions__13TrackStreamer -/* 00001DDC 0000EB6C 81 3F 00 38 */ lwz r9, 0x38(r31) -/* 00001DE0 0000EB70 3B C1 00 08 */ addi r30, r1, 0x8 -/* 00001DE4 0000EB74 80 18 00 00 */ lwz r0, bStreamingPositionFromICE@l(r24) -/* 00001DE8 0000EB78 C1 A9 00 40 */ lfs f13, 0x40(r9) -/* 00001DEC 0000EB7C C1 89 00 44 */ lfs f12, 0x44(r9) -/* 00001DF0 0000EB80 2C 00 00 00 */ cmpwi r0, 0x0 -.L_00001DF4: -/* 00001DF4 0000EB84 C0 09 00 48 */ lfs f0, 0x48(r9) -/* 00001DF8 0000EB88 D1 A1 00 08 */ stfs f13, 0x8(r1) -/* 00001DFC 0000EB8C D1 81 00 0C */ stfs f12, 0xc(r1) -.L_00001E00: -/* 00001E00 0000EB90 D0 1E 00 08 */ stfs f0, 0x8(r30) -.L_00001E04: -/* 00001E04 0000EB94 C1 A9 01 E8 */ lfs f13, 0x1e8(r9) -.L_00001E08: -/* 00001E08 0000EB98 C0 09 01 EC */ lfs f0, 0x1ec(r9) -.L_00001E0C: -/* 00001E0C 0000EB9C C1 89 01 F0 */ lfs f12, 0x1f0(r9) -/* 00001E10 0000EBA0 D1 A1 00 18 */ stfs f13, 0x18(r1) -/* 00001E14 0000EBA4 D0 01 00 1C */ stfs f0, 0x1c(r1) -/* 00001E18 0000EBA8 D1 81 00 20 */ stfs f12, 0x20(r1) -/* 00001E1C 0000EBAC C1 69 00 58 */ lfs f11, 0x58(r9) -/* 00001E20 0000EBB0 C0 09 00 50 */ lfs f0, 0x50(r9) -/* 00001E24 0000EBB4 C1 A9 00 54 */ lfs f13, 0x54(r9) -/* 00001E28 0000EBB8 D0 01 00 28 */ stfs f0, 0x28(r1) -/* 00001E2C 0000EBBC D1 A1 00 2C */ stfs f13, 0x2c(r1) -.L_00001E30: -/* 00001E30 0000EBC0 D1 61 00 30 */ stfs f11, 0x30(r1) -/* 00001E34 0000EBC4 41 82 1E 90 */ beq .L_00003CC4 -/* 00001E38 0000EBC8 81 79 00 00 */ lwz r11, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@l(r25) -/* 00001E3C 0000EBCC 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00001E40 0000EBD0 41 82 1E 78 */ beq .L_00003CB8 -.L_00001E44: -/* 00001E44 0000EBD4 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 00001E48 0000EBD8 A8 69 00 30 */ lha r3, 0x30(r9) -.L_00001E4C: -/* 00001E4C 0000EBDC 80 09 00 34 */ lwz r0, 0x34(r9) -/* 00001E50 0000EBE0 7C 6B 1A 14 */ add r3, r11, r3 -/* 00001E54 0000EBE4 7C 08 03 A6 */ mtlr r0 -/* 00001E58 0000EBE8 4E 80 00 21 */ blrl -/* 00001E5C 0000EBEC C0 03 00 00 */ lfs f0, 0x0(r3) -/* 00001E60 0000EBF0 C1 A3 00 08 */ lfs f13, 0x8(r3) -/* 00001E64 0000EBF4 C1 83 00 04 */ lfs f12, 0x4(r3) -/* 00001E68 0000EBF8 FC 00 00 50 */ fneg f0, f0 -/* 00001E6C 0000EBFC D1 A1 00 08 */ stfs f13, 0x8(r1) -/* 00001E70 0000EC00 D0 01 00 0C */ stfs f0, 0xc(r1) -/* 00001E74 0000EC04 D1 9E 00 08 */ stfs f12, 0x8(r30) -/* 00001E78 0000EC08 C0 01 00 20 */ lfs f0, 0x20(r1) -/* 00001E7C 0000EC0C D3 E1 00 18 */ stfs f31, 0x18(r1) -/* 00001E80 0000EC10 D0 01 00 30 */ stfs f0, 0x30(r1) -/* 00001E84 0000EC14 D3 E1 00 1C */ stfs f31, 0x1c(r1) -.L_00001E88: -/* 00001E88 0000EC18 D3 E1 00 28 */ stfs f31, 0x28(r1) -/* 00001E8C 0000EC1C D3 E1 00 2C */ stfs f31, 0x2c(r1) -/* 00001E90 0000EC20 80 1F 00 3C */ lwz r0, 0x3c(r31) -/* 00001E94 0000EC24 39 00 00 00 */ li r8, 0x0 -/* 00001E98 0000EC28 39 20 00 00 */ li r9, 0x0 -/* 00001E9C 0000EC2C 7C 00 E0 00 */ cmpw r0, r28 -.L_00001EA0: -/* 00001EA0 0000EC30 41 82 1E A8 */ beq .L_00003D48 -/* 00001EA4 0000EC34 7C 09 03 78 */ mr r9, r0 -/* 00001EA8 0000EC38 80 09 00 0C */ lwz r0, 0xc(r9) -/* 00001EAC 0000EC3C 2C 00 00 01 */ cmpwi r0, 0x1 -/* 00001EB0 0000EC40 40 82 1E B8 */ bne .L_00003D68 -/* 00001EB4 0000EC44 39 00 00 01 */ li r8, 0x1 -/* 00001EB8 0000EC48 38 7B 00 00 */ addi r3, r27, TheTrackStreamer@l -/* 00001EBC 0000EC4C 38 A1 00 08 */ addi r5, r1, 0x8 -/* 00001EC0 0000EC50 38 C1 00 18 */ addi r6, r1, 0x18 -/* 00001EC4 0000EC54 38 E1 00 28 */ addi r7, r1, 0x28 -/* 00001EC8 0000EC58 6B A4 00 02 */ xori r4, r29, 0x2 -/* 00001ECC 0000EC5C 20 04 00 00 */ subfic r0, r4, 0x0 -.L_00001ED0: -/* 00001ED0 0000EC60 7C 80 21 14 */ adde r4, r0, r4 -/* 00001ED4 0000EC64 48 00 00 01 */ bl PredictStreamingPosition__13TrackStreameriPC8bVector3N22b -/* 00001ED8 0000EC68 3B BD 00 01 */ addi r29, r29, 0x1 -/* 00001EDC 0000EC6C 2C 1D 00 02 */ cmpwi r29, 0x2 -/* 00001EE0 0000EC70 40 81 1D 8C */ ble .L_00003C6C -/* 00001EE4 0000EC74 80 01 00 94 */ lwz r0, 0x94(r1) -/* 00001EE8 0000EC78 7C 08 03 A6 */ mtlr r0 -/* 00001EEC 0000EC7C BA C1 00 60 */ lmw r22, 0x60(r1) -/* 00001EF0 0000EC80 E3 E1 00 88 */ psq_l f31, 0x88(r1), 0, qr0 -/* 00001EF4 0000EC84 38 21 00 90 */ addi r1, r1, 0x90 -/* 00001EF8 0000EC88 4E 80 00 20 */ blr -.endfn UpdateCameraMovers__Ff - -# .text:0x1EFC | size: 0x20 -# DoesCameraTypeDisablePreculler(CameraMoverTypes) -.fn DoesCameraTypeDisablePreculler__F16CameraMoverTypes, global -/* 00001EFC 0000EC8C 2C 03 00 02 */ cmpwi r3, 0x2 -/* 00001F00 0000EC90 41 82 1F 14 */ beq .L_00003E14 -/* 00001F04 0000EC94 68 63 00 06 */ xori r3, r3, 0x6 -/* 00001F08 0000EC98 20 03 00 00 */ subfic r0, r3, 0x0 -/* 00001F0C 0000EC9C 7C 60 19 14 */ adde r3, r0, r3 -.L_00001F10: -/* 00001F10 0000ECA0 4E 80 00 20 */ blr -.L_00001F14: -/* 00001F14 0000ECA4 38 60 00 01 */ li r3, 0x1 -/* 00001F18 0000ECA8 4E 80 00 20 */ blr -.endfn DoesCameraTypeDisablePreculler__F16CameraMoverTypes - -# .text:0x1F1C | size: 0x118 -.fn __11CameraMoveri16CameraMoverTypes, global -/* 00001F1C 0000ECAC 94 21 FF E8 */ stwu r1, -0x18(r1) -.L_00001F20: -/* 00001F20 0000ECB0 7C 08 02 A6 */ mflr r0 -/* 00001F24 0000ECB4 BF 81 00 08 */ stmw r28, 0x8(r1) -/* 00001F28 0000ECB8 90 01 00 1C */ stw r0, 0x1c(r1) -/* 00001F2C 0000ECBC 7C 7F 1B 78 */ mr r31, r3 -/* 00001F30 0000ECC0 3D 60 00 00 */ lis r11, .rodata+0x494@ha -/* 00001F34 0000ECC4 A0 1F 00 5A */ lhz r0, 0x5a(r31) -/* 00001F38 0000ECC8 3B A0 00 00 */ li r29, 0x0 -/* 00001F3C 0000ECCC C0 0B 04 94 */ lfs f0, .rodata+0x494@l(r11) -/* 00001F40 0000ECD0 3D 20 00 00 */ lis r9, _vt.11CameraMover@ha -.L_00001F44: -/* 00001F44 0000ECD4 90 1F 00 58 */ stw r0, 0x58(r31) -/* 00001F48 0000ECD8 7C 9C 23 78 */ mr r28, r4 -.L_00001F4C: -/* 00001F4C 0000ECDC 39 29 00 00 */ addi r9, r9, _vt.11CameraMover@l -/* 00001F50 0000ECE0 7C BE 2B 78 */ mr r30, r5 -/* 00001F54 0000ECE4 B3 BF 00 5A */ sth r29, 0x5a(r31) -.L_00001F58: -/* 00001F58 0000ECE8 38 60 00 00 */ li r3, 0x0 -/* 00001F5C 0000ECEC 93 BF 00 60 */ stw r29, 0x60(r31) -/* 00001F60 0000ECF0 38 80 00 00 */ li r4, 0x0 -/* 00001F64 0000ECF4 91 3F 00 08 */ stw r9, 0x8(r31) -/* 00001F68 0000ECF8 38 A0 00 1C */ li r5, 0x1c -/* 00001F6C 0000ECFC D0 1F 00 5C */ stfs f0, 0x5c(r31) -/* 00001F70 0000ED00 38 C0 00 00 */ li r6, 0x0 -/* 00001F74 0000ED04 48 00 00 01 */ bl Create__9WColliderUiQ29WCollider14eColliderShapeUiUi -/* 00001F78 0000ED08 3D 20 00 00 */ lis r9, .rodata+0x498@ha -/* 00001F7C 0000ED0C 90 7F 00 24 */ stw r3, 0x24(r31) -/* 00001F80 0000ED10 C0 09 04 98 */ lfs f0, .rodata+0x498@l(r9) -/* 00001F84 0000ED14 2C 1C FF FF */ cmpwi r28, -0x1 -/* 00001F88 0000ED18 93 DF 00 0C */ stw r30, 0xc(r31) -/* 00001F8C 0000ED1C D0 1F 00 78 */ stfs f0, 0x78(r31) -/* 00001F90 0000ED20 93 BF 00 14 */ stw r29, 0x14(r31) -/* 00001F94 0000ED24 93 9F 00 10 */ stw r28, 0x10(r31) -/* 00001F98 0000ED28 D0 1F 00 64 */ stfs f0, 0x64(r31) -.L_00001F9C: -/* 00001F9C 0000ED2C D0 1F 00 68 */ stfs f0, 0x68(r31) -.L_00001FA0: -/* 00001FA0 0000ED30 D0 1F 00 6C */ stfs f0, 0x6c(r31) -.L_00001FA4: -/* 00001FA4 0000ED34 D0 1F 00 74 */ stfs f0, 0x74(r31) -/* 00001FA8 0000ED38 D0 1F 00 70 */ stfs f0, 0x70(r31) -.L_00001FAC: -/* 00001FAC 0000ED3C 40 82 1F C0 */ bne .L_00003F6C -/* 00001FB0 0000ED40 93 BF 00 1C */ stw r29, 0x1c(r31) -/* 00001FB4 0000ED44 93 BF 00 20 */ stw r29, 0x20(r31) -/* 00001FB8 0000ED48 93 BF 00 18 */ stw r29, 0x18(r31) -.L_00001FBC: -/* 00001FBC 0000ED4C 48 00 1F FC */ b .L_00003FB8 -/* 00001FC0 0000ED50 1D 5C 00 68 */ mulli r10, r28, 0x68 -.L_00001FC4: -/* 00001FC4 0000ED54 3D 20 00 00 */ lis r9, eViews@ha -/* 00001FC8 0000ED58 39 29 00 00 */ addi r9, r9, eViews@l -/* 00001FCC 0000ED5C 3D 60 00 00 */ lis r11, .rodata+0x49C@ha -.L_00001FD0: -/* 00001FD0 0000ED60 7F E3 FB 78 */ mr r3, r31 -/* 00001FD4 0000ED64 C0 0B 04 9C */ lfs f0, .rodata+0x49C@l(r11) -/* 00001FD8 0000ED68 7D 4A 4A 14 */ add r10, r10, r9 -/* 00001FDC 0000ED6C 91 5F 00 18 */ stw r10, 0x18(r31) -.L_00001FE0: -/* 00001FE0 0000ED70 81 6A 00 38 */ lwz r11, 0x38(r10) -/* 00001FE4 0000ED74 91 7F 00 1C */ stw r11, 0x1c(r31) -/* 00001FE8 0000ED78 D0 0B 00 C0 */ stfs f0, 0xc0(r11) -/* 00001FEC 0000ED7C 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 00001FF0 0000ED80 80 09 02 8C */ lwz r0, 0x28c(r9) -/* 00001FF4 0000ED84 90 1F 00 20 */ stw r0, 0x20(r31) -/* 00001FF8 0000ED88 48 00 20 CD */ bl .L_000040C4 -/* 00001FFC 0000ED8C 80 7F 00 0C */ lwz r3, 0xc(r31) -/* 00002000 0000ED90 48 00 1E FD */ bl .L_00003EFC -.L_00002004: -/* 00002004 0000ED94 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00002008 0000ED98 41 82 20 1C */ beq .L_00004024 -/* 0000200C 0000ED9C 3D 60 00 00 */ lis r11, DisablePrecullerCounter@ha -/* 00002010 0000EDA0 81 2B 00 00 */ lwz r9, DisablePrecullerCounter@l(r11) -/* 00002014 0000EDA4 39 29 00 01 */ addi r9, r9, 0x1 -/* 00002018 0000EDA8 91 2B 00 00 */ stw r9, DisablePrecullerCounter@l(r11) -/* 0000201C 0000EDAC 7F E3 FB 78 */ mr r3, r31 -/* 00002020 0000EDB0 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 00002024 0000EDB4 7C 08 03 A6 */ mtlr r0 -/* 00002028 0000EDB8 BB 81 00 08 */ lmw r28, 0x8(r1) -/* 0000202C 0000EDBC 38 21 00 18 */ addi r1, r1, 0x18 -/* 00002030 0000EDC0 4E 80 00 20 */ blr -.endfn __11CameraMoveri16CameraMoverTypes - -# .text:0x2034 | size: 0x78 -.fn _._11CameraMover, global -/* 00002034 0000EDC4 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00002038 0000EDC8 7C 08 02 A6 */ mflr r0 -/* 0000203C 0000EDCC BF C1 00 08 */ stmw r30, 0x8(r1) -/* 00002040 0000EDD0 90 01 00 14 */ stw r0, 0x14(r1) -/* 00002044 0000EDD4 7C 7F 1B 78 */ mr r31, r3 -/* 00002048 0000EDD8 3D 20 00 00 */ lis r9, _vt.11CameraMover@ha -/* 0000204C 0000EDDC 39 29 00 00 */ addi r9, r9, _vt.11CameraMover@l -/* 00002050 0000EDE0 80 7F 00 24 */ lwz r3, 0x24(r31) -/* 00002054 0000EDE4 7C 9E 23 78 */ mr r30, r4 -/* 00002058 0000EDE8 91 3F 00 08 */ stw r9, 0x8(r31) -/* 0000205C 0000EDEC 48 00 00 01 */ bl Destroy__9WColliderP9WCollider -/* 00002060 0000EDF0 80 7F 00 0C */ lwz r3, 0xc(r31) -/* 00002064 0000EDF4 48 00 1E FD */ bl RenderCarPOV__16CubicCameraMover -/* 00002068 0000EDF8 2C 03 00 00 */ cmpwi r3, 0x0 -.L_0000206C: -/* 0000206C 0000EDFC 41 82 20 80 */ beq .L_000040EC -.L_00002070: -/* 00002070 0000EE00 3D 60 00 00 */ lis r11, DisablePrecullerCounter@ha -/* 00002074 0000EE04 81 2B 00 00 */ lwz r9, DisablePrecullerCounter@l(r11) -/* 00002078 0000EE08 39 29 FF FF */ subi r9, r9, 0x1 -/* 0000207C 0000EE0C 91 2B 00 00 */ stw r9, DisablePrecullerCounter@l(r11) -/* 00002080 0000EE10 7F E3 FB 78 */ mr r3, r31 -/* 00002084 0000EE14 48 00 21 41 */ bl .L_000041C4 -/* 00002088 0000EE18 73 C0 00 01 */ andi. r0, r30, 0x1 -/* 0000208C 0000EE1C 41 82 20 98 */ beq .L_00004124 -/* 00002090 0000EE20 7F E3 FB 78 */ mr r3, r31 -/* 00002094 0000EE24 48 00 00 01 */ bl __builtin_delete -/* 00002098 0000EE28 80 01 00 14 */ lwz r0, 0x14(r1) -/* 0000209C 0000EE2C 7C 08 03 A6 */ mtlr r0 -/* 000020A0 0000EE30 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 000020A4 0000EE34 38 21 00 10 */ addi r1, r1, 0x10 -/* 000020A8 0000EE38 4E 80 00 20 */ blr -.endfn _._11CameraMover - -# .text:0x20AC | size: 0x4 -.fn Update__11CameraMoverf, global -/* 000020AC 0000EE3C 4E 80 00 20 */ blr -.endfn Update__11CameraMoverf - -# .text:0x20B0 | size: 0x4 -.fn Render__11CameraMoverP5eView, global -/* 000020B0 0000EE40 4E 80 00 20 */ blr -.endfn Render__11CameraMoverP5eView - -# .text:0x20B4 | size: 0x8 -# CameraMover::GetAnchor -.fn GetAnchor__11CameraMover, global -/* 000020B4 0000EE44 38 60 00 00 */ li r3, 0x0 -/* 000020B8 0000EE48 4E 80 00 20 */ blr -.endfn GetAnchor__11CameraMover - -# .text:0x20BC | size: 0x8 -# CameraMover::OutsidePOV -.fn OutsidePOV__11CameraMover, global -/* 000020BC 0000EE4C 38 60 00 01 */ li r3, 0x1 -/* 000020C0 0000EE50 4E 80 00 20 */ blr -.endfn OutsidePOV__11CameraMover - -# .text:0x20C4 | size: 0x8 -# CameraMover::RenderCarPOV -.fn RenderCarPOV__11CameraMover, global -/* 000020C4 0000EE54 38 60 00 01 */ li r3, 0x1 -/* 000020C8 0000EE58 4E 80 00 20 */ blr -.endfn RenderCarPOV__11CameraMover - -# .text:0x20CC | size: 0x74 -# CameraMover::Enable -.fn Enable__11CameraMover, global -/* 000020CC 0000EE5C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 000020D0 0000EE60 7C 08 02 A6 */ mflr r0 -/* 000020D4 0000EE64 93 E1 00 0C */ stw r31, 0xc(r1) -/* 000020D8 0000EE68 90 01 00 14 */ stw r0, 0x14(r1) -/* 000020DC 0000EE6C 7C 7F 1B 78 */ mr r31, r3 -/* 000020E0 0000EE70 80 1F 00 14 */ lwz r0, 0x14(r31) -/* 000020E4 0000EE74 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000020E8 0000EE78 40 82 21 2C */ bne .L_00004214 -/* 000020EC 0000EE7C 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha -/* 000020F0 0000EE80 38 00 00 01 */ li r0, 0x1 -/* 000020F4 0000EE84 81 69 00 00 */ lwz r11, _6Camera.StopUpdating@l(r9) -/* 000020F8 0000EE88 90 1F 00 14 */ stw r0, 0x14(r31) -/* 000020FC 0000EE8C 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00002100 0000EE90 40 82 21 10 */ bne .L_00004210 -/* 00002104 0000EE94 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 00002108 0000EE98 80 1F 00 20 */ lwz r0, 0x20(r31) -/* 0000210C 0000EE9C 90 09 02 8C */ stw r0, 0x28c(r9) -/* 00002110 0000EEA0 80 7F 00 18 */ lwz r3, 0x18(r31) -/* 00002114 0000EEA4 7F E4 FB 78 */ mr r4, r31 -/* 00002118 0000EEA8 48 00 00 01 */ bl AttachCameraMover__5eViewP11CameraMover -/* 0000211C 0000EEAC 3D 20 00 00 */ lis r9, .rodata+0x4A0@ha -/* 00002120 0000EEB0 81 7F 00 1C */ lwz r11, 0x1c(r31) -/* 00002124 0000EEB4 C0 09 04 A0 */ lfs f0, .rodata+0x4A0@l(r9) -/* 00002128 0000EEB8 D0 0B 00 BC */ stfs f0, 0xbc(r11) -.L_0000212C: -/* 0000212C 0000EEBC 80 01 00 14 */ lwz r0, 0x14(r1) -/* 00002130 0000EEC0 7C 08 03 A6 */ mtlr r0 -/* 00002134 0000EEC4 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 00002138 0000EEC8 38 21 00 10 */ addi r1, r1, 0x10 -/* 0000213C 0000EECC 4E 80 00 20 */ blr -.endfn Enable__11CameraMover - -# .text:0x2140 | size: 0x4C -# CameraMover::Disable -.fn Disable__11CameraMover, global -/* 00002140 0000EED0 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 00002144 0000EED4 7C 08 02 A6 */ mflr r0 -/* 00002148 0000EED8 90 01 00 0C */ stw r0, 0xc(r1) -/* 0000214C 0000EEDC 7C 6B 1B 78 */ mr r11, r3 -/* 00002150 0000EEE0 80 0B 00 14 */ lwz r0, 0x14(r11) -/* 00002154 0000EEE4 2C 00 00 00 */ cmpwi r0, 0x0 -.L_00002158: -/* 00002158 0000EEE8 41 82 21 7C */ beq .L_000042D4 -/* 0000215C 0000EEEC 38 00 00 00 */ li r0, 0x0 -/* 00002160 0000EEF0 81 2B 00 1C */ lwz r9, 0x1c(r11) -/* 00002164 0000EEF4 90 0B 00 14 */ stw r0, 0x14(r11) -/* 00002168 0000EEF8 7D 64 5B 78 */ mr r4, r11 -/* 0000216C 0000EEFC 80 6B 00 18 */ lwz r3, 0x18(r11) -/* 00002170 0000EF00 80 09 02 8C */ lwz r0, 0x28c(r9) -/* 00002174 0000EF04 90 0B 00 20 */ stw r0, 0x20(r11) -/* 00002178 0000EF08 48 00 00 01 */ bl UnattachCameraMover__5eViewP11CameraMover -/* 0000217C 0000EF0C 80 01 00 0C */ lwz r0, 0xc(r1) -/* 00002180 0000EF10 7C 08 03 A6 */ mtlr r0 -/* 00002184 0000EF14 38 21 00 08 */ addi r1, r1, 0x8 -/* 00002188 0000EF18 4E 80 00 20 */ blr -.endfn Disable__11CameraMover - -# .text:0x218C | size: 0x34 -.fn OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv, global -/* 0000218C 0000EF1C 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 00002190 0000EF20 2C 06 00 00 */ cmpwi r6, 0x0 -.L_00002194: -/* 00002194 0000EF24 41 82 21 B4 */ beq .L_00004348 -/* 00002198 0000EF28 C0 05 00 00 */ lfs f0, 0x0(r5) -/* 0000219C 0000EF2C C1 85 00 04 */ lfs f12, 0x4(r5) -/* 000021A0 0000EF30 C1 A5 00 08 */ lfs f13, 0x8(r5) -/* 000021A4 0000EF34 FC 00 00 50 */ fneg f0, f0 -/* 000021A8 0000EF38 D0 01 00 0C */ stfs f0, 0xc(r1) -/* 000021AC 0000EF3C D1 A1 00 08 */ stfs f13, 0x8(r1) -/* 000021B0 0000EF40 D1 81 00 10 */ stfs f12, 0x10(r1) -/* 000021B4 0000EF44 38 60 00 01 */ li r3, 0x1 -/* 000021B8 0000EF48 38 21 00 18 */ addi r1, r1, 0x18 -/* 000021BC 0000EF4C 4E 80 00 20 */ blr -.endfn OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv - -# .text:0x21C0 | size: 0x140 -.fn IsSomethingInBetween__11CameraMoverRCQ25UMath7Vector4T1, global -/* 000021C0 0000EF50 94 21 FF 60 */ stwu r1, -0xa0(r1) -/* 000021C4 0000EF54 7C 08 02 A6 */ mflr r0 -/* 000021C8 0000EF58 BF 61 00 8C */ stmw r27, 0x8c(r1) -.L_000021CC: -/* 000021CC 0000EF5C 90 01 00 A4 */ stw r0, 0xa4(r1) -/* 000021D0 0000EF60 3D 60 00 00 */ lis r11, _Q25UMath7Vector4.kIdentity@ha -/* 000021D4 0000EF64 7C 9E 23 78 */ mr r30, r4 -/* 000021D8 0000EF68 39 2B 00 00 */ addi r9, r11, _Q25UMath7Vector4.kIdentity@l -/* 000021DC 0000EF6C 81 4B 00 00 */ lwz r10, _Q25UMath7Vector4.kIdentity@l(r11) -/* 000021E0 0000EF70 81 09 00 0C */ lwz r8, 0xc(r9) -/* 000021E4 0000EF74 7C BD 2B 78 */ mr r29, r5 -/* 000021E8 0000EF78 81 69 00 04 */ lwz r11, 0x4(r9) -/* 000021EC 0000EF7C 38 80 00 00 */ li r4, 0x0 -/* 000021F0 0000EF80 80 09 00 08 */ lwz r0, 0x8(r9) -/* 000021F4 0000EF84 38 A0 00 20 */ li r5, 0x20 -/* 000021F8 0000EF88 91 41 00 38 */ stw r10, 0x38(r1) -/* 000021FC 0000EF8C 38 61 00 48 */ addi r3, r1, 0x48 -/* 00002200 0000EF90 91 61 00 3C */ stw r11, 0x3c(r1) -/* 00002204 0000EF94 90 01 00 40 */ stw r0, 0x40(r1) -/* 00002208 0000EF98 91 01 00 44 */ stw r8, 0x44(r1) -/* 0000220C 0000EF9C 91 41 00 28 */ stw r10, 0x28(r1) -/* 00002210 0000EFA0 91 61 00 2C */ stw r11, 0x2c(r1) -/* 00002214 0000EFA4 90 01 00 30 */ stw r0, 0x30(r1) -.L_00002218: -/* 00002218 0000EFA8 91 01 00 34 */ stw r8, 0x34(r1) -/* 0000221C 0000EFAC 4C C6 31 82 */ crclr cr1eq -/* 00002220 0000EFB0 48 00 00 01 */ bl memset -/* 00002224 0000EFB4 3D 20 00 00 */ lis r9, .rodata+0x4A4@ha -/* 00002228 0000EFB8 81 1E 00 00 */ lwz r8, 0x0(r30) -/* 0000222C 0000EFBC C0 09 04 A4 */ lfs f0, .rodata+0x4A4@l(r9) -.L_00002230: -/* 00002230 0000EFC0 38 00 00 00 */ li r0, 0x0 -/* 00002234 0000EFC4 83 7E 00 0C */ lwz r27, 0xc(r30) -/* 00002238 0000EFC8 39 60 00 03 */ li r11, 0x3 -/* 0000223C 0000EFCC 83 9E 00 04 */ lwz r28, 0x4(r30) -/* 00002240 0000EFD0 39 21 00 08 */ addi r9, r1, 0x8 -/* 00002244 0000EFD4 80 FE 00 08 */ lwz r7, 0x8(r30) -.L_00002248: -/* 00002248 0000EFD8 7D 24 4B 78 */ mr r4, r9 -/* 0000224C 0000EFDC D0 01 00 74 */ stfs f0, 0x74(r1) -/* 00002250 0000EFE0 39 41 00 18 */ addi r10, r1, 0x18 -/* 00002254 0000EFE4 D0 01 00 6C */ stfs f0, 0x6c(r1) -/* 00002258 0000EFE8 3F C0 00 00 */ lis r30, .rodata+0x4A8@ha -/* 0000225C 0000EFEC 90 01 00 80 */ stw r0, 0x80(r1) -/* 00002260 0000EFF0 38 61 00 80 */ addi r3, r1, 0x80 -/* 00002264 0000EFF4 91 61 00 84 */ stw r11, 0x84(r1) -/* 00002268 0000EFF8 38 A1 00 28 */ addi r5, r1, 0x28 -/* 0000226C 0000EFFC 90 01 00 68 */ stw r0, 0x68(r1) -/* 00002270 0000F000 38 C0 00 03 */ li r6, 0x3 -/* 00002274 0000F004 90 01 00 70 */ stw r0, 0x70(r1) -/* 00002278 0000F008 98 01 00 78 */ stb r0, 0x78(r1) -/* 0000227C 0000F00C 98 01 00 79 */ stb r0, 0x79(r1) -/* 00002280 0000F010 B0 01 00 7A */ sth r0, 0x7a(r1) -/* 00002284 0000F014 90 01 00 7C */ stw r0, 0x7c(r1) -/* 00002288 0000F018 91 01 00 08 */ stw r8, 0x8(r1) -/* 0000228C 0000F01C 81 1D 00 00 */ lwz r8, 0x0(r29) -/* 00002290 0000F020 93 89 00 04 */ stw r28, 0x4(r9) -/* 00002294 0000F024 90 E9 00 08 */ stw r7, 0x8(r9) -/* 00002298 0000F028 93 69 00 0C */ stw r27, 0xc(r9) -/* 0000229C 0000F02C 81 3D 00 04 */ lwz r9, 0x4(r29) -/* 000022A0 0000F030 80 1D 00 0C */ lwz r0, 0xc(r29) -/* 000022A4 0000F034 81 7D 00 08 */ lwz r11, 0x8(r29) -/* 000022A8 0000F038 91 01 00 18 */ stw r8, 0x18(r1) -/* 000022AC 0000F03C 90 0A 00 0C */ stw r0, 0xc(r10) -/* 000022B0 0000F040 91 2A 00 04 */ stw r9, 0x4(r10) -/* 000022B4 0000F044 91 6A 00 08 */ stw r11, 0x8(r10) -/* 000022B8 0000F048 C1 9E 04 A8 */ lfs f12, .rodata+0x4A8@l(r30) -/* 000022BC 0000F04C C0 01 00 0C */ lfs f0, 0xc(r1) -.L_000022C0: -/* 000022C0 0000F050 C1 A1 00 1C */ lfs f13, 0x1c(r1) -/* 000022C4 0000F054 EC 00 60 2A */ fadds f0, f0, f12 -/* 000022C8 0000F058 ED AD 60 2A */ fadds f13, f13, f12 -/* 000022CC 0000F05C D0 01 00 0C */ stfs f0, 0xc(r1) -/* 000022D0 0000F060 D1 A1 00 1C */ stfs f13, 0x1c(r1) -/* 000022D4 0000F064 48 00 00 01 */ bl CheckHitWorld__13WCollisionMgrPCQ25UMath7Vector4RQ213WCollisionMgr18WorldCollisionInfoUi -/* 000022D8 0000F068 88 01 00 79 */ lbz r0, 0x79(r1) -/* 000022DC 0000F06C 38 60 00 01 */ li r3, 0x1 -/* 000022E0 0000F070 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000022E4 0000F074 40 82 22 EC */ bne .L_000045D0 -/* 000022E8 0000F078 38 60 00 00 */ li r3, 0x0 -/* 000022EC 0000F07C 80 01 00 A4 */ lwz r0, 0xa4(r1) -/* 000022F0 0000F080 7C 08 03 A6 */ mtlr r0 -/* 000022F4 0000F084 BB 61 00 8C */ lmw r27, 0x8c(r1) -/* 000022F8 0000F088 38 21 00 A0 */ addi r1, r1, 0xa0 -/* 000022FC 0000F08C 4E 80 00 20 */ blr -.endfn IsSomethingInBetween__11CameraMoverRCQ25UMath7Vector4T1 - -# .text:0x2300 | size: 0x6C -.fn IsSomethingInBetween__11CameraMoverPC8bVector3T1, global -/* 00002300 0000F090 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 00002304 0000F094 7C 08 02 A6 */ mflr r0 -/* 00002308 0000F098 90 01 00 2C */ stw r0, 0x2c(r1) -/* 0000230C 0000F09C 7C 89 23 78 */ mr r9, r4 -/* 00002310 0000F0A0 7C AB 2B 78 */ mr r11, r5 -/* 00002314 0000F0A4 C0 09 00 04 */ lfs f0, 0x4(r9) -.L_00002318: -/* 00002318 0000F0A8 39 41 00 08 */ addi r10, r1, 0x8 -/* 0000231C 0000F0AC C1 89 00 08 */ lfs f12, 0x8(r9) -/* 00002320 0000F0B0 7D 44 53 78 */ mr r4, r10 -/* 00002324 0000F0B4 C1 AB 00 04 */ lfs f13, 0x4(r11) -/* 00002328 0000F0B8 FC 00 00 50 */ fneg f0, f0 -/* 0000232C 0000F0BC C1 69 00 00 */ lfs f11, 0x0(r9) -/* 00002330 0000F0C0 38 A1 00 18 */ addi r5, r1, 0x18 -/* 00002334 0000F0C4 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 00002338 0000F0C8 FD A0 68 50 */ fneg f13, f13 -/* 0000233C 0000F0CC D1 81 00 0C */ stfs f12, 0xc(r1) -/* 00002340 0000F0D0 C1 8B 00 00 */ lfs f12, 0x0(r11) -/* 00002344 0000F0D4 C0 0B 00 08 */ lfs f0, 0x8(r11) -/* 00002348 0000F0D8 D1 6A 00 08 */ stfs f11, 0x8(r10) -/* 0000234C 0000F0DC D1 A1 00 18 */ stfs f13, 0x18(r1) -/* 00002350 0000F0E0 D0 01 00 1C */ stfs f0, 0x1c(r1) -/* 00002354 0000F0E4 D1 81 00 20 */ stfs f12, 0x20(r1) -/* 00002358 0000F0E8 48 00 21 C1 */ bl .L_00004518 -/* 0000235C 0000F0EC 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 00002360 0000F0F0 7C 08 03 A6 */ mtlr r0 -/* 00002364 0000F0F4 38 21 00 28 */ addi r1, r1, 0x28 -/* 00002368 0000F0F8 4E 80 00 20 */ blr -.endfn IsSomethingInBetween__11CameraMoverPC8bVector3T1 - -# .text:0x236C | size: 0xC -# CameraMover::MinDistToWall -.fn MinDistToWall__11CameraMover, global -/* 0000236C 0000F0FC 3D 20 00 00 */ lis r9, .rodata+0x4AC@ha -.L_00002370: -/* 00002370 0000F100 C0 29 04 AC */ lfs f1, .rodata+0x4AC@l(r9) -/* 00002374 0000F104 4E 80 00 20 */ blr -.endfn MinDistToWall__11CameraMover - -# .text:0x2378 | size: 0x470 -.fn EnforceMinGapToWalls__11CameraMoverP9WColliderP8bVector3T2P8bVector4, global -/* 00002378 0000F108 94 21 FE 50 */ stwu r1, -0x1b0(r1) -.L_0000237C: -/* 0000237C 0000F10C 7C 08 02 A6 */ mflr r0 -/* 00002380 0000F110 F3 61 01 88 */ psq_st f27, 0x188(r1), 0, qr0 -/* 00002384 0000F114 F3 81 01 90 */ psq_st f28, 0x190(r1), 0, qr0 -/* 00002388 0000F118 F3 A1 01 98 */ psq_st f29, 0x198(r1), 0, qr0 -/* 0000238C 0000F11C F3 C1 01 A0 */ psq_st f30, 0x1a0(r1), 0, qr0 -/* 00002390 0000F120 F3 E1 01 A8 */ psq_st f31, 0x1a8(r1), 0, qr0 -/* 00002394 0000F124 BD C1 01 40 */ stmw r14, 0x140(r1) -/* 00002398 0000F128 90 01 01 B4 */ stw r0, 0x1b4(r1) -/* 0000239C 0000F12C 3D 20 00 00 */ lis r9, .rodata+0x4B0@ha -/* 000023A0 0000F130 7C 72 1B 78 */ mr r18, r3 -.L_000023A4: -/* 000023A4 0000F134 C3 A9 04 B0 */ lfs f29, .rodata+0x4B0@l(r9) -/* 000023A8 0000F138 80 92 00 1C */ lwz r4, 0x1c(r18) -/* 000023AC 0000F13C 3F C0 43 30 */ lis r30, 0x4330 -/* 000023B0 0000F140 D3 A1 00 08 */ stfs f29, 0x8(r1) -/* 000023B4 0000F144 3D 20 00 00 */ lis r9, .rodata+0x4B8@ha -/* 000023B8 0000F148 D3 A1 00 0C */ stfs f29, 0xc(r1) -/* 000023BC 0000F14C 3D 40 00 00 */ lis r10, .rodata+0x4C0@ha -/* 000023C0 0000F150 D3 A1 00 10 */ stfs f29, 0x10(r1) -/* 000023C4 0000F154 3D 00 00 00 */ lis r8, .rodata+0x4C4@ha -/* 000023C8 0000F158 C9 69 04 B8 */ lfd f11, .rodata+0x4B8@l(r9) -/* 000023CC 0000F15C 7C BF 2B 78 */ mr r31, r5 -/* 000023D0 0000F160 A0 04 00 C4 */ lhz r0, 0xc4(r4) -/* 000023D4 0000F164 7C D7 33 78 */ mr r23, r6 -/* 000023D8 0000F168 C1 4A 04 C0 */ lfs f10, .rodata+0x4C0@l(r10) -/* 000023DC 0000F16C 3D 20 00 00 */ lis r9, .rodata+0x4C8@ha -/* 000023E0 0000F170 90 01 01 3C */ stw r0, 0x13c(r1) -/* 000023E4 0000F174 7C F5 3B 78 */ mr r21, r7 -/* 000023E8 0000F178 C1 28 04 C4 */ lfs f9, .rodata+0x4C4@l(r8) -/* 000023EC 0000F17C 38 61 00 18 */ addi r3, r1, 0x18 -/* 000023F0 0000F180 93 C1 01 38 */ stw r30, 0x138(r1) -/* 000023F4 0000F184 38 81 00 28 */ addi r4, r1, 0x28 -/* 000023F8 0000F188 C1 BF 00 00 */ lfs f13, 0x0(r31) -/* 000023FC 0000F18C 39 C0 00 00 */ li r14, 0x0 -/* 00002400 0000F190 C8 01 01 38 */ lfd f0, 0x138(r1) -/* 00002404 0000F194 C1 17 00 00 */ lfs f8, 0x0(r23) -/* 00002408 0000F198 FC 00 58 28 */ fsub f0, f0, f11 -/* 0000240C 0000F19C C1 9F 00 04 */ lfs f12, 0x4(r31) -/* 00002410 0000F1A0 FC 00 00 18 */ frsp f0, f0 -/* 00002414 0000F1A4 C1 7F 00 08 */ lfs f11, 0x8(r31) -/* 00002418 0000F1A8 EC 00 02 B2 */ fmuls f0, f0, f10 -/* 0000241C 0000F1AC C3 C9 04 C8 */ lfs f30, .rodata+0x4C8@l(r9) -/* 00002420 0000F1B0 EC 00 02 72 */ fmuls f0, f0, f9 -/* 00002424 0000F1B4 C1 57 00 04 */ lfs f10, 0x4(r23) -/* 00002428 0000F1B8 C1 37 00 08 */ lfs f9, 0x8(r23) -.L_0000242C: -/* 0000242C 0000F1BC ED AD 40 28 */ fsubs f13, f13, f8 -/* 00002430 0000F1C0 EC 00 00 2A */ fadds f0, f0, f0 -/* 00002434 0000F1C4 D1 A1 00 28 */ stfs f13, 0x28(r1) -/* 00002438 0000F1C8 FC 00 E8 2E */ fsel f0, f0, f0, f29 -.L_0000243C: -/* 0000243C 0000F1CC ED 8C 50 28 */ fsubs f12, f12, f10 -.L_00002440: -/* 00002440 0000F1D0 ED BE 00 28 */ fsubs f13, f30, f0 -/* 00002444 0000F1D4 D1 81 00 2C */ stfs f12, 0x2c(r1) -/* 00002448 0000F1D8 ED 6B 48 28 */ fsubs f11, f11, f9 -/* 0000244C 0000F1DC FF 8D F0 2E */ fsel f28, f13, f0, f30 -/* 00002450 0000F1E0 D1 61 00 30 */ stfs f11, 0x30(r1) -.L_00002454: -/* 00002454 0000F1E4 48 00 00 01 */ bl __8bVector3RC8bVector3 -/* 00002458 0000F1E8 C0 01 00 1C */ lfs f0, 0x1c(r1) -/* 0000245C 0000F1EC 3D 20 00 00 */ lis r9, .rodata+0x4CC@ha -/* 00002460 0000F1F0 C1 A1 00 18 */ lfs f13, 0x18(r1) -.L_00002464: -/* 00002464 0000F1F4 3D 60 00 00 */ lis r11, .rodata+0x4D0@ha -/* 00002468 0000F1F8 EC 00 00 32 */ fmuls f0, f0, f0 -/* 0000246C 0000F1FC C1 81 00 20 */ lfs f12, 0x20(r1) -/* 00002470 0000F200 ED AD 03 7A */ fmadds f13, f13, f13, f0 -/* 00002474 0000F204 C1 69 04 CC */ lfs f11, .rodata+0x4CC@l(r9) -/* 00002478 0000F208 ED 8C 6B 3A */ fmadds f12, f12, f12, f13 -/* 0000247C 0000F20C C1 4B 04 D0 */ lfs f10, .rodata+0x4D0@l(r11) -/* 00002480 0000F210 FC 0C 58 00 */ fcmpu cr0, f12, f11 -.L_00002484: -/* 00002484 0000F214 4C 62 03 82 */ cror un, eq, lt -/* 00002488 0000F218 41 83 24 B8 */ bso .L_00004940 -/* 0000248C 0000F21C FF E0 60 34 */ frsqrte f31, f12 -/* 00002490 0000F220 EC 1F 07 F2 */ fmuls f0, f31, f31 -.L_00002494: -/* 00002494 0000F224 ED BF 02 B2 */ fmuls f13, f31, f10 -/* 00002498 0000F228 EC 0C F0 3C */ fnmsubs f0, f12, f0, f30 -/* 0000249C 0000F22C EF E0 FB 7A */ fmadds f31, f0, f13, f31 -/* 000024A0 0000F230 EC 1F 07 F2 */ fmuls f0, f31, f31 -/* 000024A4 0000F234 ED BF 02 B2 */ fmuls f13, f31, f10 -.L_000024A8: -/* 000024A8 0000F238 EC 0C F0 3C */ fnmsubs f0, f12, f0, f30 -/* 000024AC 0000F23C EF E0 FB 7A */ fmadds f31, f0, f13, f31 -/* 000024B0 0000F240 EF FF 03 32 */ fmuls f31, f31, f12 -/* 000024B4 0000F244 48 00 24 BC */ b .L_00004970 -/* 000024B8 0000F248 FF E0 E8 90 */ fmr f31, f29 -/* 000024BC 0000F24C 3D 20 00 00 */ lis r9, .rodata+0x4D4@ha -/* 000024C0 0000F250 C0 09 04 D4 */ lfs f0, .rodata+0x4D4@l(r9) -/* 000024C4 0000F254 FC 1F 00 00 */ fcmpu cr0, f31, f0 -/* 000024C8 0000F258 41 80 27 BC */ blt .L_00004C84 -/* 000024CC 0000F25C 38 81 00 18 */ addi r4, r1, 0x18 -/* 000024D0 0000F260 38 61 00 38 */ addi r3, r1, 0x38 -.L_000024D4: -/* 000024D4 0000F264 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -/* 000024D8 0000F268 3D 20 00 00 */ lis r9, .rodata+0x4B0@ha -.L_000024DC: -/* 000024DC 0000F26C 3D 60 00 00 */ lis r11, .rodata+0x4C8@ha -/* 000024E0 0000F270 C1 69 04 B0 */ lfs f11, .rodata+0x4B0@l(r9) -/* 000024E4 0000F274 38 61 00 48 */ addi r3, r1, 0x48 -/* 000024E8 0000F278 C0 01 00 38 */ lfs f0, 0x38(r1) -.L_000024EC: -/* 000024EC 0000F27C 7C 73 1B 78 */ mr r19, r3 -/* 000024F0 0000F280 C1 A1 00 3C */ lfs f13, 0x3c(r1) -/* 000024F4 0000F284 38 81 00 38 */ addi r4, r1, 0x38 -/* 000024F8 0000F288 C1 81 00 40 */ lfs f12, 0x40(r1) -/* 000024FC 0000F28C 38 A1 00 28 */ addi r5, r1, 0x28 -/* 00002500 0000F290 C1 4B 04 C8 */ lfs f10, .rodata+0x4C8@l(r11) -/* 00002504 0000F294 3B 01 00 58 */ addi r24, r1, 0x58 -/* 00002508 0000F298 D0 01 00 28 */ stfs f0, 0x28(r1) -/* 0000250C 0000F29C 3A C1 00 18 */ addi r22, r1, 0x18 -/* 00002510 0000F2A0 D1 A1 00 2C */ stfs f13, 0x2c(r1) -/* 00002514 0000F2A4 3B 41 00 68 */ addi r26, r1, 0x68 -/* 00002518 0000F2A8 D1 81 00 30 */ stfs f12, 0x30(r1) -/* 0000251C 0000F2AC 3B C1 00 78 */ addi r30, r1, 0x78 -/* 00002520 0000F2B0 D1 41 00 3C */ stfs f10, 0x3c(r1) -/* 00002524 0000F2B4 3B 61 00 88 */ addi r27, r1, 0x88 -/* 00002528 0000F2B8 D1 61 00 40 */ stfs f11, 0x40(r1) -/* 0000252C 0000F2BC 39 E1 01 10 */ addi r15, r1, 0x110 -/* 00002530 0000F2C0 D1 61 00 38 */ stfs f11, 0x38(r1) -.L_00002534: -/* 00002534 0000F2C4 48 00 00 01 */ bl bCross__FP8bVector3PC8bVector3T1 -/* 00002538 0000F2C8 3A 01 00 98 */ addi r16, r1, 0x98 -/* 0000253C 0000F2CC EC 1C 07 F2 */ fmuls f0, f28, f31 -/* 00002540 0000F2D0 39 20 00 01 */ li r9, 0x1 -.L_00002544: -/* 00002544 0000F2D4 3A 21 00 B8 */ addi r17, r1, 0xb8 -/* 00002548 0000F2D8 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0000254C 0000F2DC 39 29 FF FF */ subi r9, r9, 0x1 -/* 00002550 0000F2E0 40 82 25 48 */ bne .L_00004A98 -/* 00002554 0000F2E4 3D 20 00 00 */ lis r9, .rodata+0x4D8@ha -/* 00002558 0000F2E8 7E C4 B3 78 */ mr r4, r22 -/* 0000255C 0000F2EC C3 E9 04 D8 */ lfs f31, .rodata+0x4D8@l(r9) -/* 00002560 0000F2F0 7E 65 9B 78 */ mr r5, r19 -/* 00002564 0000F2F4 7F 03 C3 78 */ mr r3, r24 -/* 00002568 0000F2F8 3E 80 00 00 */ lis r20, _Q25UMath7Vector4.kIdentity@ha -/* 0000256C 0000F2FC EF E0 07 F2 */ fmuls f31, f0, f31 -/* 00002570 0000F300 7F DC F3 78 */ mr r28, r30 -/* 00002574 0000F304 FC 20 F8 90 */ fmr f1, f31 -/* 00002578 0000F308 3B 34 00 00 */ addi r25, r20, _Q25UMath7Vector4.kIdentity@l -/* 0000257C 0000F30C 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -/* 00002580 0000F310 3B A0 00 00 */ li r29, 0x0 -/* 00002584 0000F314 7F 43 D3 78 */ mr r3, r26 -/* 00002588 0000F318 7E C4 B3 78 */ mr r4, r22 -/* 0000258C 0000F31C 7E 65 9B 78 */ mr r5, r19 -/* 00002590 0000F320 FC 20 F8 50 */ fneg f1, f31 -/* 00002594 0000F324 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -.L_00002598: -/* 00002598 0000F328 3B C0 00 00 */ li r30, 0x0 -/* 0000259C 0000F32C 3D 20 00 00 */ lis r9, .rodata+0x4B0@ha -/* 000025A0 0000F330 3D 60 00 00 */ lis r11, .rodata+0x4C8@ha -/* 000025A4 0000F334 C3 89 04 B0 */ lfs f28, .rodata+0x4B0@l(r9) -/* 000025A8 0000F338 3B 40 00 03 */ li r26, 0x3 -/* 000025AC 0000F33C C3 6B 04 C8 */ lfs f27, .rodata+0x4C8@l(r11) -/* 000025B0 0000F340 FF A0 E0 90 */ fmr f29, f28 -/* 000025B4 0000F344 57 A4 20 36 */ slwi r4, r29, 4 -/* 000025B8 0000F348 7F 83 E3 78 */ mr r3, r28 -/* 000025BC 0000F34C 7C 98 22 14 */ add r4, r24, r4 -/* 000025C0 0000F350 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -/* 000025C4 0000F354 3D 20 00 00 */ lis r9, .rodata+0x4DC@ha -/* 000025C8 0000F358 7E E4 BB 78 */ mr r4, r23 -/* 000025CC 0000F35C C0 29 04 DC */ lfs f1, .rodata+0x4DC@l(r9) -/* 000025D0 0000F360 7F 85 E3 78 */ mr r5, r28 -/* 000025D4 0000F364 7F 63 DB 78 */ mr r3, r27 -/* 000025D8 0000F368 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -/* 000025DC 0000F36C C0 1F 00 04 */ lfs f0, 0x4(r31) -/* 000025E0 0000F370 38 80 00 00 */ li r4, 0x0 -/* 000025E4 0000F374 C1 61 00 8C */ lfs f11, 0x8c(r1) -.L_000025E8: -/* 000025E8 0000F378 38 A0 00 20 */ li r5, 0x20 -/* 000025EC 0000F37C C1 BF 00 08 */ lfs f13, 0x8(r31) -/* 000025F0 0000F380 FC 00 00 50 */ fneg f0, f0 -.L_000025F4: -/* 000025F4 0000F384 C1 9F 00 00 */ lfs f12, 0x0(r31) -/* 000025F8 0000F388 FD 60 58 50 */ fneg f11, f11 -/* 000025FC 0000F38C 81 54 00 00 */ lwz r10, _Q25UMath7Vector4.kIdentity@l(r20) -/* 00002600 0000F390 38 61 00 D8 */ addi r3, r1, 0xd8 -.L_00002604: -/* 00002604 0000F394 81 79 00 04 */ lwz r11, 0x4(r25) -/* 00002608 0000F398 81 39 00 08 */ lwz r9, 0x8(r25) -/* 0000260C 0000F39C 80 19 00 0C */ lwz r0, 0xc(r25) -/* 00002610 0000F3A0 C1 41 00 90 */ lfs f10, 0x90(r1) -/* 00002614 0000F3A4 C1 21 00 88 */ lfs f9, 0x88(r1) -/* 00002618 0000F3A8 D0 01 00 98 */ stfs f0, 0x98(r1) -/* 0000261C 0000F3AC D1 A1 00 9C */ stfs f13, 0x9c(r1) -/* 00002620 0000F3B0 D1 81 00 A0 */ stfs f12, 0xa0(r1) -/* 00002624 0000F3B4 D1 61 00 A8 */ stfs f11, 0xa8(r1) -/* 00002628 0000F3B8 D1 41 00 AC */ stfs f10, 0xac(r1) -/* 0000262C 0000F3BC D1 21 00 B0 */ stfs f9, 0xb0(r1) -/* 00002630 0000F3C0 91 41 00 C8 */ stw r10, 0xc8(r1) -/* 00002634 0000F3C4 91 61 00 CC */ stw r11, 0xcc(r1) -/* 00002638 0000F3C8 91 21 00 D0 */ stw r9, 0xd0(r1) -/* 0000263C 0000F3CC 90 01 00 D4 */ stw r0, 0xd4(r1) -/* 00002640 0000F3D0 D3 A1 00 A4 */ stfs f29, 0xa4(r1) -/* 00002644 0000F3D4 D3 A1 00 B4 */ stfs f29, 0xb4(r1) -/* 00002648 0000F3D8 91 41 00 B8 */ stw r10, 0xb8(r1) -.L_0000264C: -/* 0000264C 0000F3DC 91 61 00 BC */ stw r11, 0xbc(r1) -/* 00002650 0000F3E0 91 21 00 C0 */ stw r9, 0xc0(r1) -/* 00002654 0000F3E4 90 01 00 C4 */ stw r0, 0xc4(r1) -/* 00002658 0000F3E8 4C C6 31 82 */ crclr cr1eq -.L_0000265C: -/* 0000265C 0000F3EC 48 00 00 01 */ bl memset -/* 00002660 0000F3F0 93 C1 00 F8 */ stw r30, 0xf8(r1) -/* 00002664 0000F3F4 7D E3 7B 78 */ mr r3, r15 -/* 00002668 0000F3F8 D3 A1 00 FC */ stfs f29, 0xfc(r1) -/* 0000266C 0000F3FC 7E 04 83 78 */ mr r4, r16 -/* 00002670 0000F400 93 C1 01 00 */ stw r30, 0x100(r1) -/* 00002674 0000F404 7E 25 8B 78 */ mr r5, r17 -/* 00002678 0000F408 D3 A1 01 04 */ stfs f29, 0x104(r1) -/* 0000267C 0000F40C 38 C0 00 02 */ li r6, 0x2 -/* 00002680 0000F410 9B C1 01 08 */ stb r30, 0x108(r1) -/* 00002684 0000F414 9B C1 01 09 */ stb r30, 0x109(r1) -/* 00002688 0000F418 B3 C1 01 0A */ sth r30, 0x10a(r1) -/* 0000268C 0000F41C 93 C1 01 0C */ stw r30, 0x10c(r1) -/* 00002690 0000F420 93 C1 01 10 */ stw r30, 0x110(r1) -/* 00002694 0000F424 93 41 01 14 */ stw r26, 0x114(r1) -/* 00002698 0000F428 48 00 00 01 */ bl CheckHitWorld__13WCollisionMgrPCQ25UMath7Vector4RQ213WCollisionMgr18WorldCollisionInfoUi -/* 0000269C 0000F42C 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000026A0 0000F430 41 82 27 3C */ beq .L_00004DDC -/* 000026A4 0000F434 C1 61 00 C8 */ lfs f11, 0xc8(r1) -/* 000026A8 0000F438 7F E3 FB 78 */ mr r3, r31 -/* 000026AC 0000F43C C1 A1 00 1C */ lfs f13, 0x1c(r1) -/* 000026B0 0000F440 7F 64 DB 78 */ mr r4, r27 -/* 000026B4 0000F444 FD 60 58 50 */ fneg f11, f11 -/* 000026B8 0000F448 C1 21 00 D0 */ lfs f9, 0xd0(r1) -/* 000026BC 0000F44C C0 01 00 18 */ lfs f0, 0x18(r1) -/* 000026C0 0000F450 ED AD 02 F2 */ fmuls f13, f13, f11 -/* 000026C4 0000F454 C1 41 00 CC */ lfs f10, 0xcc(r1) -/* 000026C8 0000F458 39 C0 00 01 */ li r14, 0x1 -/* 000026CC 0000F45C C3 C1 00 20 */ lfs f30, 0x20(r1) -/* 000026D0 0000F460 EC 00 6A 7A */ fmadds f0, f0, f9, f13 -/* 000026D4 0000F464 C1 81 00 B8 */ lfs f12, 0xb8(r1) -/* 000026D8 0000F468 EF DE 02 BA */ fmadds f30, f30, f10, f0 -/* 000026DC 0000F46C C1 A1 00 C0 */ lfs f13, 0xc0(r1) -/* 000026E0 0000F470 FF C0 F2 10 */ fabs f30, f30 -/* 000026E4 0000F474 C0 01 00 BC */ lfs f0, 0xbc(r1) -/* 000026E8 0000F478 EF DB F0 28 */ fsubs f30, f27, f30 -/* 000026EC 0000F47C D1 A1 01 18 */ stfs f13, 0x118(r1) -/* 000026F0 0000F480 FD 80 60 50 */ fneg f12, f12 -/* 000026F4 0000F484 D0 01 01 20 */ stfs f0, 0x120(r1) -/* 000026F8 0000F488 EF DE F0 2A */ fadds f30, f30, f30 -/* 000026FC 0000F48C D1 81 01 1C */ stfs f12, 0x11c(r1) -/* 00002700 0000F490 EF DE D8 2A */ fadds f30, f30, f27 -/* 00002704 0000F494 D1 21 01 28 */ stfs f9, 0x128(r1) -/* 00002708 0000F498 D1 61 01 2C */ stfs f11, 0x12c(r1) -/* 0000270C 0000F49C D1 41 01 30 */ stfs f10, 0x130(r1) -.L_00002710: -/* 00002710 0000F4A0 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 -/* 00002714 0000F4A4 FF E0 08 90 */ fmr f31, f1 -/* 00002718 0000F4A8 7F E3 FB 78 */ mr r3, r31 -/* 0000271C 0000F4AC 38 81 01 18 */ addi r4, r1, 0x118 -.L_00002720: -/* 00002720 0000F4B0 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 -/* 00002724 0000F4B4 EF FF 08 28 */ fsubs f31, f31, f1 -/* 00002728 0000F4B8 EF FF 07 B2 */ fmuls f31, f31, f30 -/* 0000272C 0000F4BC FC 1C F8 00 */ fcmpu cr0, f28, f31 -/* 00002730 0000F4C0 4C 62 0B 82 */ cror un, eq, gt -/* 00002734 0000F4C4 41 83 27 3C */ bso Init__19TrackCarCameraMover -/* 00002738 0000F4C8 FF 80 F8 90 */ fmr f28, f31 -/* 0000273C 0000F4CC 3B BD 00 01 */ addi r29, r29, 0x1 -/* 00002740 0000F4D0 2C 1D 00 01 */ cmpwi r29, 0x1 -/* 00002744 0000F4D4 40 81 25 B4 */ ble .L_00004CF8 -/* 00002748 0000F4D8 C1 B2 00 64 */ lfs f13, 0x64(r18) -/* 0000274C 0000F4DC 3D 20 00 00 */ lis r9, .rodata+0x4D0@ha -/* 00002750 0000F4E0 C1 69 04 D0 */ lfs f11, .rodata+0x4D0@l(r9) -/* 00002754 0000F4E4 3D 60 00 00 */ lis r11, .rodata+0x4B0@ha -.L_00002758: -/* 00002758 0000F4E8 ED 8D E0 2A */ fadds f12, f13, f28 -/* 0000275C 0000F4EC C1 4B 04 B0 */ lfs f10, .rodata+0x4B0@l(r11) -/* 00002760 0000F4F0 ED 6C 02 F2 */ fmuls f11, f12, f11 -.L_00002764: -/* 00002764 0000F4F4 EC 1C 58 28 */ fsubs f0, f28, f11 -/* 00002768 0000F4F8 ED AD 00 2A */ fadds f13, f13, f0 -/* 0000276C 0000F4FC D1 B2 00 64 */ stfs f13, 0x64(r18) -/* 00002770 0000F500 FC 0B 50 00 */ fcmpu cr0, f11, f10 -/* 00002774 0000F504 4C 62 03 82 */ cror un, eq, lt -/* 00002778 0000F508 41 83 27 A0 */ bso .L_00004F18 -/* 0000277C 0000F50C C0 01 00 28 */ lfs f0, 0x28(r1) -/* 00002780 0000F510 C1 A1 00 2C */ lfs f13, 0x2c(r1) -/* 00002784 0000F514 C1 81 00 30 */ lfs f12, 0x30(r1) -/* 00002788 0000F518 EC 00 02 F2 */ fmuls f0, f0, f11 -/* 0000278C 0000F51C ED AD 02 F2 */ fmuls f13, f13, f11 -.L_00002790: -/* 00002790 0000F520 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 00002794 0000F524 ED 8C 02 F2 */ fmuls f12, f12, f11 -/* 00002798 0000F528 D1 A1 00 0C */ stfs f13, 0xc(r1) -/* 0000279C 0000F52C D1 81 00 10 */ stfs f12, 0x10(r1) -/* 000027A0 0000F530 C0 01 00 08 */ lfs f0, 0x8(r1) -/* 000027A4 0000F534 C1 81 00 0C */ lfs f12, 0xc(r1) -/* 000027A8 0000F538 C1 A1 00 10 */ lfs f13, 0x10(r1) -/* 000027AC 0000F53C D1 55 00 0C */ stfs f10, 0xc(r21) -/* 000027B0 0000F540 D1 B5 00 08 */ stfs f13, 0x8(r21) -/* 000027B4 0000F544 D0 15 00 00 */ stfs f0, 0x0(r21) -/* 000027B8 0000F548 D1 95 00 04 */ stfs f12, 0x4(r21) -/* 000027BC 0000F54C 7D C3 73 78 */ mr r3, r14 -/* 000027C0 0000F550 80 01 01 B4 */ lwz r0, 0x1b4(r1) -/* 000027C4 0000F554 7C 08 03 A6 */ mtlr r0 -/* 000027C8 0000F558 B9 C1 01 40 */ lmw r14, 0x140(r1) -/* 000027CC 0000F55C E3 61 01 88 */ psq_l f27, 0x188(r1), 0, qr0 -/* 000027D0 0000F560 E3 81 01 90 */ psq_l f28, 0x190(r1), 0, qr0 -/* 000027D4 0000F564 E3 A1 01 98 */ psq_l f29, 0x198(r1), 0, qr0 -/* 000027D8 0000F568 E3 C1 01 A0 */ psq_l f30, 0x1a0(r1), 0, qr0 -/* 000027DC 0000F56C E3 E1 01 A8 */ psq_l f31, 0x1a8(r1), 0, qr0 -/* 000027E0 0000F570 38 21 01 B0 */ addi r1, r1, 0x1b0 -/* 000027E4 0000F574 4E 80 00 20 */ blr -.endfn EnforceMinGapToWalls__11CameraMoverP9WColliderP8bVector3T2P8bVector4 - -# .text:0x27E8 | size: 0x8 -# CameraMover::GetLookbackAngle -.fn GetLookbackAngle__11CameraMover, global -/* 000027E8 0000F578 38 60 00 00 */ li r3, 0x0 -/* 000027EC 0000F57C 4E 80 00 20 */ blr -.endfn GetLookbackAngle__11CameraMover - -# .text:0x27F0 | size: 0x4 -# CameraMover::ResetState -.fn ResetState__11CameraMover, global -/* 000027F0 0000F580 4E 80 00 20 */ blr -.endfn ResetState__11CameraMover - -# .text:0x27F4 | size: 0x48 -# CameraMover::GetAnchorID -.fn GetAnchorID__11CameraMover, global -/* 000027F4 0000F584 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 000027F8 0000F588 7C 08 02 A6 */ mflr r0 -/* 000027FC 0000F58C 90 01 00 0C */ stw r0, 0xc(r1) -/* 00002800 0000F590 81 23 00 08 */ lwz r9, 0x8(r3) -.L_00002804: -/* 00002804 0000F594 A8 09 00 28 */ lha r0, 0x28(r9) -/* 00002808 0000F598 81 29 00 2C */ lwz r9, 0x2c(r9) -/* 0000280C 0000F59C 7C 63 02 14 */ add r3, r3, r0 -/* 00002810 0000F5A0 7D 28 03 A6 */ mtlr r9 -/* 00002814 0000F5A4 4E 80 00 21 */ blrl -/* 00002818 0000F5A8 7C 63 1B 79 */ mr. r3, r3 -.L_0000281C: -/* 0000281C 0000F5AC 40 82 28 28 */ bne .L_00005044 -/* 00002820 0000F5B0 38 60 00 00 */ li r3, 0x0 -/* 00002824 0000F5B4 48 00 28 2C */ b .L_00005050 -/* 00002828 0000F5B8 80 63 00 8C */ lwz r3, 0x8c(r3) -/* 0000282C 0000F5BC 80 01 00 0C */ lwz r0, 0xc(r1) -/* 00002830 0000F5C0 7C 08 03 A6 */ mtlr r0 -/* 00002834 0000F5C4 38 21 00 08 */ addi r1, r1, 0x8 -/* 00002838 0000F5C8 4E 80 00 20 */ blr -.endfn GetAnchorID__11CameraMover - -# .text:0x283C | size: 0xC -# CameraMover::GetTarget -.fn GetTarget__11CameraMover, global -/* 0000283C 0000F5CC 80 63 00 1C */ lwz r3, 0x1c(r3) -/* 00002840 0000F5D0 38 63 00 60 */ addi r3, r3, 0x60 -/* 00002844 0000F5D4 4E 80 00 20 */ blr -.endfn GetTarget__11CameraMover - -# .text:0x2848 | size: 0x134 -.fn HandheldNoise__11CameraMoverP8bMatrix4fb, global -/* 00002848 0000F5D8 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 0000284C 0000F5DC 7C 08 02 A6 */ mflr r0 -/* 00002850 0000F5E0 90 01 00 34 */ stw r0, 0x34(r1) -/* 00002854 0000F5E4 3D 20 00 00 */ lis r9, .rodata+0x4E0@ha -/* 00002858 0000F5E8 C0 09 04 E0 */ lfs f0, .rodata+0x4E0@l(r9) -/* 0000285C 0000F5EC FC 01 00 00 */ fcmpu cr0, f1, f0 -/* 00002860 0000F5F0 4C 62 03 82 */ cror un, eq, lt -/* 00002864 0000F5F4 41 83 29 6C */ bso .L_000051D0 -/* 00002868 0000F5F8 3D 20 00 00 */ lis r9, CameraNoiseHandheldFrequency@ha -/* 0000286C 0000F5FC 3D 60 00 00 */ lis r11, CameraNoiseHandheldAmplitude@ha -/* 00002870 0000F600 C1 49 00 00 */ lfs f10, CameraNoiseHandheldFrequency@l(r9) -/* 00002874 0000F604 39 49 00 00 */ addi r10, r9, CameraNoiseHandheldFrequency@l -/* 00002878 0000F608 C1 0A 00 04 */ lfs f8, 0x4(r10) -/* 0000287C 0000F60C 39 2B 00 00 */ addi r9, r11, CameraNoiseHandheldAmplitude@l -/* 00002880 0000F610 C1 69 00 0C */ lfs f11, 0xc(r9) -/* 00002884 0000F614 39 01 00 08 */ addi r8, r1, 0x8 -/* 00002888 0000F618 C1 A9 00 04 */ lfs f13, 0x4(r9) -/* 0000288C 0000F61C 2C 05 00 00 */ cmpwi r5, 0x0 -/* 00002890 0000F620 C0 09 00 08 */ lfs f0, 0x8(r9) -/* 00002894 0000F624 ED 6B 00 72 */ fmuls f11, f11, f1 -/* 00002898 0000F628 C1 2A 00 08 */ lfs f9, 0x8(r10) -/* 0000289C 0000F62C ED AD 00 72 */ fmuls f13, f13, f1 -.L_000028A0: -/* 000028A0 0000F630 D1 01 00 0C */ stfs f8, 0xc(r1) -/* 000028A4 0000F634 EC 00 00 72 */ fmuls f0, f0, f1 -/* 000028A8 0000F638 D1 41 00 08 */ stfs f10, 0x8(r1) -/* 000028AC 0000F63C C1 8B 00 00 */ lfs f12, CameraNoiseHandheldAmplitude@l(r11) -/* 000028B0 0000F640 C1 4A 00 0C */ lfs f10, 0xc(r10) -/* 000028B4 0000F644 D1 28 00 08 */ stfs f9, 0x8(r8) -/* 000028B8 0000F648 ED 8C 00 72 */ fmuls f12, f12, f1 -/* 000028BC 0000F64C D1 A1 00 1C */ stfs f13, 0x1c(r1) -.L_000028C0: -/* 000028C0 0000F650 D0 01 00 20 */ stfs f0, 0x20(r1) -/* 000028C4 0000F654 D1 61 00 24 */ stfs f11, 0x24(r1) -/* 000028C8 0000F658 D1 81 00 18 */ stfs f12, 0x18(r1) -/* 000028CC 0000F65C D1 41 00 14 */ stfs f10, 0x14(r1) -/* 000028D0 0000F660 C0 01 00 08 */ lfs f0, 0x8(r1) -/* 000028D4 0000F664 C1 88 00 08 */ lfs f12, 0x8(r8) -/* 000028D8 0000F668 C1 A1 00 0C */ lfs f13, 0xc(r1) -/* 000028DC 0000F66C 81 23 00 1C */ lwz r9, 0x1c(r3) -/* 000028E0 0000F670 D1 49 00 7C */ stfs f10, 0x7c(r9) -/* 000028E4 0000F674 D0 09 00 70 */ stfs f0, 0x70(r9) -/* 000028E8 0000F678 D1 A9 00 74 */ stfs f13, 0x74(r9) -.L_000028EC: -/* 000028EC 0000F67C D1 89 00 78 */ stfs f12, 0x78(r9) -/* 000028F0 0000F680 81 63 00 1C */ lwz r11, 0x1c(r3) -/* 000028F4 0000F684 C1 A1 00 18 */ lfs f13, 0x18(r1) -/* 000028F8 0000F688 C1 81 00 1C */ lfs f12, 0x1c(r1) -/* 000028FC 0000F68C C1 61 00 20 */ lfs f11, 0x20(r1) -/* 00002900 0000F690 C0 01 00 24 */ lfs f0, 0x24(r1) -/* 00002904 0000F694 D1 AB 00 80 */ stfs f13, 0x80(r11) -/* 00002908 0000F698 D0 0B 00 8C */ stfs f0, 0x8c(r11) -/* 0000290C 0000F69C D1 8B 00 84 */ stfs f12, 0x84(r11) -/* 00002910 0000F6A0 D1 6B 00 88 */ stfs f11, 0x88(r11) -/* 00002914 0000F6A4 41 82 29 24 */ beq .L_00005238 -.L_00002918: -/* 00002918 0000F6A8 3D 20 00 00 */ lis r9, WorldTimer@ha -/* 0000291C 0000F6AC 80 09 00 00 */ lwz r0, WorldTimer@l(r9) -/* 00002920 0000F6B0 48 00 29 2C */ b .L_0000524C -.L_00002924: -/* 00002924 0000F6B4 3D 20 00 00 */ lis r9, RealTimer@ha -.L_00002928: -/* 00002928 0000F6B8 80 09 00 00 */ lwz r0, RealTimer@l(r9) -/* 0000292C 0000F6BC 3D 00 43 30 */ lis r8, 0x4330 -/* 00002930 0000F6C0 3D 20 00 00 */ lis r9, .rodata+0x4E8@ha -/* 00002934 0000F6C4 3D 40 00 00 */ lis r10, .rodata+0x4F0@ha -/* 00002938 0000F6C8 6C 00 80 00 */ xoris r0, r0, 0x8000 -/* 0000293C 0000F6CC C9 A9 04 E8 */ lfd f13, .rodata+0x4E8@l(r9) -.L_00002940: -/* 00002940 0000F6D0 90 01 00 2C */ stw r0, 0x2c(r1) -/* 00002944 0000F6D4 C1 8A 04 F0 */ lfs f12, .rodata+0x4F0@l(r10) -/* 00002948 0000F6D8 91 01 00 28 */ stw r8, 0x28(r1) -/* 0000294C 0000F6DC C8 01 00 28 */ lfd f0, 0x28(r1) -/* 00002950 0000F6E0 FC 00 68 28 */ fsub f0, f0, f13 -/* 00002954 0000F6E4 FC 00 00 18 */ frsp f0, f0 -.L_00002958: -/* 00002958 0000F6E8 EC 20 03 32 */ fmuls f1, f0, f12 -/* 0000295C 0000F6EC 3D 20 00 00 */ lis r9, .rodata+0x4E4@ha -.L_00002960: -/* 00002960 0000F6F0 80 63 00 1C */ lwz r3, 0x1c(r3) -/* 00002964 0000F6F4 C0 49 04 E4 */ lfs f2, .rodata+0x4E4@l(r9) -/* 00002968 0000F6F8 48 00 0A 61 */ bl .L_000033C8 -/* 0000296C 0000F6FC 80 01 00 34 */ lwz r0, 0x34(r1) -.L_00002970: -/* 00002970 0000F700 7C 08 03 A6 */ mtlr r0 -/* 00002974 0000F704 38 21 00 30 */ addi r1, r1, 0x30 -.L_00002978: -/* 00002978 0000F708 4E 80 00 20 */ blr -.endfn HandheldNoise__11CameraMoverP8bMatrix4fb - -# .text:0x297C | size: 0x2E8 -.fn ChopperNoise__11CameraMoverP8bMatrix4fb, global -/* 0000297C 0000F70C 94 21 FF 30 */ stwu r1, -0xd0(r1) -/* 00002980 0000F710 7C 08 02 A6 */ mflr r0 -/* 00002984 0000F714 7D 80 00 26 */ mfcr r12 -.L_00002988: -/* 00002988 0000F718 F3 21 00 98 */ psq_st f25, 0x98(r1), 0, qr0 -.L_0000298C: -/* 0000298C 0000F71C F3 41 00 A0 */ psq_st f26, 0xa0(r1), 0, qr0 -/* 00002990 0000F720 F3 61 00 A8 */ psq_st f27, 0xa8(r1), 0, qr0 -/* 00002994 0000F724 F3 81 00 B0 */ psq_st f28, 0xb0(r1), 0, qr0 -/* 00002998 0000F728 F3 A1 00 B8 */ psq_st f29, 0xb8(r1), 0, qr0 -/* 0000299C 0000F72C F3 C1 00 C0 */ psq_st f30, 0xc0(r1), 0, qr0 -/* 000029A0 0000F730 F3 E1 00 C8 */ psq_st f31, 0xc8(r1), 0, qr0 -/* 000029A4 0000F734 BD E1 00 54 */ stmw r15, 0x54(r1) -/* 000029A8 0000F738 90 01 00 D4 */ stw r0, 0xd4(r1) -/* 000029AC 0000F73C 91 81 00 50 */ stw r12, 0x50(r1) -/* 000029B0 0000F740 3D 20 00 00 */ lis r9, .rodata+0x4F4@ha -/* 000029B4 0000F744 FF C0 08 90 */ fmr f30, f1 -/* 000029B8 0000F748 C0 09 04 F4 */ lfs f0, .rodata+0x4F4@l(r9) -.L_000029BC: -/* 000029BC 0000F74C 7C 7D 1B 78 */ mr r29, r3 -/* 000029C0 0000F750 7C 94 23 78 */ mr r20, r4 -/* 000029C4 0000F754 3D E0 00 00 */ lis r15, .rodata+0x4F4@ha -.L_000029C8: -/* 000029C8 0000F758 FC 1E 00 00 */ fcmpu cr0, f30, f0 -/* 000029CC 0000F75C 4C 62 03 82 */ cror un, eq, lt -/* 000029D0 0000F760 41 83 2C 2C */ bso .L_000055FC -.L_000029D4: -/* 000029D4 0000F764 3D 20 00 00 */ lis r9, .rodata+0x4F8@ha -.L_000029D8: -/* 000029D8 0000F768 3D 60 00 00 */ lis r11, .rodata+0x504@ha -/* 000029DC 0000F76C C3 29 04 F8 */ lfs f25, .rodata+0x4F8@l(r9) -.L_000029E0: -/* 000029E0 0000F770 3D 00 00 00 */ lis r8, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@ha -/* 000029E4 0000F774 C3 4B 05 04 */ lfs f26, .rodata+0x504@l(r11) -/* 000029E8 0000F778 3E C0 00 00 */ lis r22, .rodata+0x500@ha -.L_000029EC: -/* 000029EC 0000F77C 3D 40 00 00 */ lis r10, .rodata+0x508@ha -/* 000029F0 0000F780 3D 20 00 00 */ lis r9, .rodata+0x510@ha -/* 000029F4 0000F784 3D 60 00 00 */ lis r11, .rodata+0x518@ha -.L_000029F8: -/* 000029F8 0000F788 3E E0 00 00 */ lis r23, CameraNoiseChopperFrequency@ha -/* 000029FC 0000F78C 3F 00 00 00 */ lis r24, CameraNoiseChopperAmplitude@ha -/* 00002A00 0000F790 C3 6A 05 08 */ lfs f27, .rodata+0x508@l(r10) -.L_00002A04: -/* 00002A04 0000F794 CB E9 05 10 */ lfd f31, .rodata+0x510@l(r9) -.L_00002A08: -/* 00002A08 0000F798 3B 28 00 00 */ addi r25, r8, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@l -/* 00002A0C 0000F79C C3 AB 05 18 */ lfs f29, .rodata+0x518@l(r11) -/* 00002A10 0000F7A0 3B 77 00 00 */ addi r27, r23, CameraNoiseChopperFrequency@l -/* 00002A14 0000F7A4 C3 96 05 00 */ lfs f28, .rodata+0x500@l(r22) -/* 00002A18 0000F7A8 3B 98 00 00 */ addi r28, r24, CameraNoiseChopperAmplitude@l -/* 00002A1C 0000F7AC 83 C8 00 00 */ lwz r30, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@l(r8) -.L_00002A20: -/* 00002A20 0000F7B0 2E 05 00 00 */ cmpwi cr4, r5, 0x0 -/* 00002A24 0000F7B4 3E 00 00 00 */ lis r16, _12VehicleClass.CHOPPER@ha -/* 00002A28 0000F7B8 3A A1 00 08 */ addi r21, r1, 0x8 -/* 00002A2C 0000F7BC 3E 20 00 00 */ lis r17, .rodata+0x4FC@ha -/* 00002A30 0000F7C0 3E 40 00 00 */ lis r18, WorldTimer@ha -/* 00002A34 0000F7C4 3F 40 43 30 */ lis r26, 0x4330 -/* 00002A38 0000F7C8 3E 60 00 00 */ lis r19, RealTimer@ha -/* 00002A3C 0000F7CC 80 19 00 08 */ lwz r0, 0x8(r25) -/* 00002A40 0000F7D0 81 39 00 00 */ lwz r9, 0x0(r25) -/* 00002A44 0000F7D4 54 00 10 3A */ slwi r0, r0, 2 -/* 00002A48 0000F7D8 7D 29 02 14 */ add r9, r9, r0 -/* 00002A4C 0000F7DC 7C 1E 48 00 */ cmpw r30, r9 -.L_00002A50: -/* 00002A50 0000F7E0 41 82 2C 2C */ beq .L_0000567C -.L_00002A54: -/* 00002A54 0000F7E4 83 FE 00 00 */ lwz r31, 0x0(r30) -/* 00002A58 0000F7E8 2C 1F 00 00 */ cmpwi r31, 0x0 -.L_00002A5C: -/* 00002A5C 0000F7EC 41 82 2C 24 */ beq .L_00005680 -/* 00002A60 0000F7F0 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 00002A64 0000F7F4 80 09 00 94 */ lwz r0, 0x94(r9) -/* 00002A68 0000F7F8 A8 69 00 90 */ lha r3, 0x90(r9) -/* 00002A6C 0000F7FC 7C 08 03 A6 */ mtlr r0 -/* 00002A70 0000F800 7C 7F 1A 14 */ add r3, r31, r3 -/* 00002A74 0000F804 4E 80 00 21 */ blrl -/* 00002A78 0000F808 81 23 00 00 */ lwz r9, 0x0(r3) -/* 00002A7C 0000F80C 80 10 00 00 */ lwz r0, _12VehicleClass.CHOPPER@l(r16) -/* 00002A80 0000F810 7C 09 00 00 */ cmpw r9, r0 -/* 00002A84 0000F814 40 82 2C 24 */ bne .L_000056A8 -.L_00002A88: -/* 00002A88 0000F818 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 00002A8C 0000F81C A8 69 00 20 */ lha r3, 0x20(r9) -/* 00002A90 0000F820 80 09 00 24 */ lwz r0, 0x24(r9) -/* 00002A94 0000F824 7C 7F 1A 14 */ add r3, r31, r3 -/* 00002A98 0000F828 7C 08 03 A6 */ mtlr r0 -/* 00002A9C 0000F82C 4E 80 00 21 */ blrl -/* 00002AA0 0000F830 C0 03 00 00 */ lfs f0, 0x0(r3) -/* 00002AA4 0000F834 3D 40 00 00 */ lis r10, .rodata+0x500@ha -/* 00002AA8 0000F838 C1 A3 00 08 */ lfs f13, 0x8(r3) -/* 00002AAC 0000F83C C1 83 00 04 */ lfs f12, 0x4(r3) -.L_00002AB0: -/* 00002AB0 0000F840 FC 00 00 50 */ fneg f0, f0 -/* 00002AB4 0000F844 D1 A1 00 08 */ stfs f13, 0x8(r1) -/* 00002AB8 0000F848 D0 01 00 0C */ stfs f0, 0xc(r1) -/* 00002ABC 0000F84C D1 95 00 08 */ stfs f12, 0x8(r21) -/* 00002AC0 0000F850 C1 2F 04 F4 */ lfs f9, .rodata+0x4F4@l(r15) -/* 00002AC4 0000F854 81 3D 00 1C */ lwz r9, 0x1c(r29) -/* 00002AC8 0000F858 C0 01 00 0C */ lfs f0, 0xc(r1) -/* 00002ACC 0000F85C C1 89 00 44 */ lfs f12, 0x44(r9) -/* 00002AD0 0000F860 C1 49 00 40 */ lfs f10, 0x40(r9) -/* 00002AD4 0000F864 C1 A1 00 08 */ lfs f13, 0x8(r1) -.L_00002AD8: -/* 00002AD8 0000F868 EC 00 60 28 */ fsubs f0, f0, f12 -/* 00002ADC 0000F86C ED 60 00 32 */ fmuls f11, f0, f0 -/* 00002AE0 0000F870 C0 F1 04 FC */ lfs f7, .rodata+0x4FC@l(r17) -/* 00002AE4 0000F874 ED AD 50 28 */ fsubs f13, f13, f10 -/* 00002AE8 0000F878 C1 16 05 00 */ lfs f8, .rodata+0x500@l(r22) -/* 00002AEC 0000F87C ED 6D 5B 7A */ fmadds f11, f13, f13, f11 -/* 00002AF0 0000F880 D0 01 00 1C */ stfs f0, 0x1c(r1) -/* 00002AF4 0000F884 D1 21 00 20 */ stfs f9, 0x20(r1) -/* 00002AF8 0000F888 FC 0B C8 00 */ fcmpu cr0, f11, f25 -/* 00002AFC 0000F88C D1 A1 00 18 */ stfs f13, 0x18(r1) -/* 00002B00 0000F890 4C 62 03 82 */ cror un, eq, lt -/* 00002B04 0000F894 41 83 2B 34 */ bso .L_00005638 -.L_00002B08: -/* 00002B08 0000F898 FC 00 58 34 */ frsqrte f0, f11 -.L_00002B0C: -/* 00002B0C 0000F89C ED A0 00 32 */ fmuls f13, f0, f0 -/* 00002B10 0000F8A0 ED 80 01 F2 */ fmuls f12, f0, f7 -/* 00002B14 0000F8A4 ED AB 43 7C */ fnmsubs f13, f11, f13, f8 -/* 00002B18 0000F8A8 EC 0D 03 3A */ fmadds f0, f13, f12, f0 -/* 00002B1C 0000F8AC ED A0 00 32 */ fmuls f13, f0, f0 -/* 00002B20 0000F8B0 ED 80 01 F2 */ fmuls f12, f0, f7 -.L_00002B24: -/* 00002B24 0000F8B4 ED AB 43 7C */ fnmsubs f13, f11, f13, f8 -/* 00002B28 0000F8B8 EC 0D 03 3A */ fmadds f0, f13, f12, f0 -/* 00002B2C 0000F8BC EC 00 02 F2 */ fmuls f0, f0, f11 -/* 00002B30 0000F8C0 48 00 2B 38 */ b .L_00005668 -/* 00002B34 0000F8C4 FC 00 48 90 */ fmr f0, f9 -/* 00002B38 0000F8C8 FC 00 D0 00 */ fcmpu cr0, f0, f26 -/* 00002B3C 0000F8CC 4C 62 0B 82 */ cror un, eq, gt -/* 00002B40 0000F8D0 41 83 2C 24 */ bso .L_00005764 -/* 00002B44 0000F8D4 EC 00 06 F2 */ fmuls f0, f0, f27 -/* 00002B48 0000F8D8 C0 D7 00 00 */ lfs f6, CameraNoiseChopperFrequency@l(r23) -/* 00002B4C 0000F8DC C1 1B 00 04 */ lfs f8, 0x4(r27) -/* 00002B50 0000F8E0 EC 1C 00 28 */ fsubs f0, f28, f0 -/* 00002B54 0000F8E4 C0 FB 00 08 */ lfs f7, 0x8(r27) -/* 00002B58 0000F8E8 EC 1E 00 32 */ fmuls f0, f30, f0 -/* 00002B5C 0000F8EC C1 3B 00 0C */ lfs f9, 0xc(r27) -/* 00002B60 0000F8F0 EC C6 00 32 */ fmuls f6, f6, f0 -/* 00002B64 0000F8F4 C1 78 00 00 */ lfs f11, CameraNoiseChopperAmplitude@l(r24) -/* 00002B68 0000F8F8 ED 08 00 32 */ fmuls f8, f8, f0 -/* 00002B6C 0000F8FC C1 5C 00 04 */ lfs f10, 0x4(r28) -/* 00002B70 0000F900 EC E7 00 32 */ fmuls f7, f7, f0 -/* 00002B74 0000F904 C1 9C 00 08 */ lfs f12, 0x8(r28) -/* 00002B78 0000F908 ED 29 00 32 */ fmuls f9, f9, f0 -/* 00002B7C 0000F90C C1 BC 00 0C */ lfs f13, 0xc(r28) -/* 00002B80 0000F910 ED 6B 00 32 */ fmuls f11, f11, f0 -/* 00002B84 0000F914 81 7D 00 1C */ lwz r11, 0x1c(r29) -/* 00002B88 0000F918 ED 8C 00 32 */ fmuls f12, f12, f0 -/* 00002B8C 0000F91C ED AD 00 32 */ fmuls f13, f13, f0 -/* 00002B90 0000F920 D1 61 00 38 */ stfs f11, 0x38(r1) -/* 00002B94 0000F924 ED 4A 00 32 */ fmuls f10, f10, f0 -/* 00002B98 0000F928 D1 81 00 40 */ stfs f12, 0x40(r1) -/* 00002B9C 0000F92C D1 A1 00 44 */ stfs f13, 0x44(r1) -/* 00002BA0 0000F930 D1 41 00 3C */ stfs f10, 0x3c(r1) -/* 00002BA4 0000F934 D0 C1 00 28 */ stfs f6, 0x28(r1) -/* 00002BA8 0000F938 D1 01 00 2C */ stfs f8, 0x2c(r1) -/* 00002BAC 0000F93C D0 E1 00 30 */ stfs f7, 0x30(r1) -/* 00002BB0 0000F940 D1 21 00 34 */ stfs f9, 0x34(r1) -/* 00002BB4 0000F944 D1 2B 00 7C */ stfs f9, 0x7c(r11) -/* 00002BB8 0000F948 D0 CB 00 70 */ stfs f6, 0x70(r11) -/* 00002BBC 0000F94C D1 0B 00 74 */ stfs f8, 0x74(r11) -/* 00002BC0 0000F950 D0 EB 00 78 */ stfs f7, 0x78(r11) -/* 00002BC4 0000F954 81 3D 00 1C */ lwz r9, 0x1c(r29) -/* 00002BC8 0000F958 C1 A1 00 38 */ lfs f13, 0x38(r1) -/* 00002BCC 0000F95C C1 81 00 3C */ lfs f12, 0x3c(r1) -/* 00002BD0 0000F960 C1 61 00 40 */ lfs f11, 0x40(r1) -/* 00002BD4 0000F964 C0 01 00 44 */ lfs f0, 0x44(r1) -/* 00002BD8 0000F968 D1 A9 00 80 */ stfs f13, 0x80(r9) -.L_00002BDC: -/* 00002BDC 0000F96C D0 09 00 8C */ stfs f0, 0x8c(r9) -/* 00002BE0 0000F970 D1 89 00 84 */ stfs f12, 0x84(r9) -/* 00002BE4 0000F974 D1 69 00 88 */ stfs f11, 0x88(r9) -/* 00002BE8 0000F978 41 92 2B F4 */ beq cr4, .L_000057DC -/* 00002BEC 0000F97C 80 12 00 00 */ lwz r0, WorldTimer@l(r18) -/* 00002BF0 0000F980 48 00 2B F8 */ b .L_000057E8 -.L_00002BF4: -/* 00002BF4 0000F984 80 13 00 00 */ lwz r0, RealTimer@l(r19) -/* 00002BF8 0000F988 6C 00 80 00 */ xoris r0, r0, 0x8000 -/* 00002BFC 0000F98C 90 01 00 4C */ stw r0, 0x4c(r1) -/* 00002C00 0000F990 93 41 00 48 */ stw r26, 0x48(r1) -/* 00002C04 0000F994 C8 01 00 48 */ lfd f0, 0x48(r1) -/* 00002C08 0000F998 FC 00 F8 28 */ fsub f0, f0, f31 -/* 00002C0C 0000F99C FC 00 00 18 */ frsp f0, f0 -/* 00002C10 0000F9A0 EC 20 07 72 */ fmuls f1, f0, f29 -/* 00002C14 0000F9A4 C0 4A 05 00 */ lfs f2, .rodata+0x500@l(r10) -/* 00002C18 0000F9A8 7E 84 A3 78 */ mr r4, r20 -/* 00002C1C 0000F9AC 80 7D 00 1C */ lwz r3, 0x1c(r29) -/* 00002C20 0000F9B0 48 00 0A 61 */ bl .L_00003680 -/* 00002C24 0000F9B4 3B DE 00 04 */ addi r30, r30, 0x4 -/* 00002C28 0000F9B8 48 00 2A 3C */ b .L_00005664 -/* 00002C2C 0000F9BC 80 01 00 D4 */ lwz r0, 0xd4(r1) -/* 00002C30 0000F9C0 81 81 00 50 */ lwz r12, 0x50(r1) -/* 00002C34 0000F9C4 7C 08 03 A6 */ mtlr r0 -/* 00002C38 0000F9C8 B9 E1 00 54 */ lmw r15, 0x54(r1) -/* 00002C3C 0000F9CC E3 21 00 98 */ psq_l f25, 0x98(r1), 0, qr0 -/* 00002C40 0000F9D0 E3 41 00 A0 */ psq_l f26, 0xa0(r1), 0, qr0 -/* 00002C44 0000F9D4 E3 61 00 A8 */ psq_l f27, 0xa8(r1), 0, qr0 -/* 00002C48 0000F9D8 E3 81 00 B0 */ psq_l f28, 0xb0(r1), 0, qr0 -.L_00002C4C: -/* 00002C4C 0000F9DC E3 A1 00 B8 */ psq_l f29, 0xb8(r1), 0, qr0 -/* 00002C50 0000F9E0 E3 C1 00 C0 */ psq_l f30, 0xc0(r1), 0, qr0 -/* 00002C54 0000F9E4 E3 E1 00 C8 */ psq_l f31, 0xc8(r1), 0, qr0 -/* 00002C58 0000F9E8 7D 80 81 20 */ mtcrf 8, r12 -/* 00002C5C 0000F9EC 38 21 00 D0 */ addi r1, r1, 0xd0 -/* 00002C60 0000F9F0 4E 80 00 20 */ blr -.endfn ChopperNoise__11CameraMoverP8bMatrix4fb - -# .text:0x2C64 | size: 0x4AC -.fn TerrainVelocityNoise__11CameraMoverP8bMatrix4P12CameraAnchorff, global -/* 00002C64 0000F9F4 94 21 FF 50 */ stwu r1, -0xb0(r1) -/* 00002C68 0000F9F8 7C 08 02 A6 */ mflr r0 -/* 00002C6C 0000F9FC F3 41 00 80 */ psq_st f26, 0x80(r1), 0, qr0 -/* 00002C70 0000FA00 F3 61 00 88 */ psq_st f27, 0x88(r1), 0, qr0 -/* 00002C74 0000FA04 F3 81 00 90 */ psq_st f28, 0x90(r1), 0, qr0 -/* 00002C78 0000FA08 F3 A1 00 98 */ psq_st f29, 0x98(r1), 0, qr0 -/* 00002C7C 0000FA0C F3 C1 00 A0 */ psq_st f30, 0xa0(r1), 0, qr0 -/* 00002C80 0000FA10 F3 E1 00 A8 */ psq_st f31, 0xa8(r1), 0, qr0 -/* 00002C84 0000FA14 BF 81 00 70 */ stmw r28, 0x70(r1) -/* 00002C88 0000FA18 90 01 00 B4 */ stw r0, 0xb4(r1) -/* 00002C8C 0000FA1C 7C 7D 1B 78 */ mr r29, r3 -/* 00002C90 0000FA20 7C 9C 23 78 */ mr r28, r4 -/* 00002C94 0000FA24 FF E0 08 90 */ fmr f31, f1 -/* 00002C98 0000FA28 7C BF 2B 79 */ mr. r31, r5 -/* 00002C9C 0000FA2C FF C0 10 90 */ fmr f30, f2 -/* 00002CA0 0000FA30 41 82 30 E4 */ beq .L_00005D84 -/* 00002CA4 0000FA34 C0 1F 00 10 */ lfs f0, 0x10(r31) -/* 00002CA8 0000FA38 3B DF 00 90 */ addi r30, r31, 0x90 -/* 00002CAC 0000FA3C 3C 80 F0 C9 */ lis r4, 0xf0c9 -/* 00002CB0 0000FA40 7F C3 F3 78 */ mr r3, r30 -.L_00002CB4: -/* 00002CB4 0000FA44 EF 9F 00 32 */ fmuls f28, f31, f0 -/* 00002CB8 0000FA48 60 84 E4 98 */ ori r4, r4, 0xe498 -/* 00002CBC 0000FA4C 38 A0 00 00 */ li r5, 0x0 -/* 00002CC0 0000FA50 48 00 00 01 */ bl GetAttributePointer__CQ26Attrib8InstanceUiUi -/* 00002CC4 0000FA54 7C 63 1B 79 */ mr. r3, r3 -/* 00002CC8 0000FA58 40 82 2C D4 */ bne .L_0000599C -.L_00002CCC: -/* 00002CCC 0000FA5C 38 60 00 04 */ li r3, 0x4 -/* 00002CD0 0000FA60 48 00 00 01 */ bl DefaultDataArea__6AttribUi -/* 00002CD4 0000FA64 C0 03 00 00 */ lfs f0, 0x0(r3) -/* 00002CD8 0000FA68 3C 80 F0 C9 */ lis r4, 0xf0c9 -.L_00002CDC: -/* 00002CDC 0000FA6C 7F C3 F3 78 */ mr r3, r30 -/* 00002CE0 0000FA70 60 84 E4 98 */ ori r4, r4, 0xe498 -/* 00002CE4 0000FA74 EF 7E 00 32 */ fmuls f27, f30, f0 -/* 00002CE8 0000FA78 38 A0 00 01 */ li r5, 0x1 -/* 00002CEC 0000FA7C 48 00 00 01 */ bl GetAttributePointer__CQ26Attrib8InstanceUiUi -/* 00002CF0 0000FA80 7C 63 1B 79 */ mr. r3, r3 -/* 00002CF4 0000FA84 40 82 2D 00 */ bne .L_000059F4 -/* 00002CF8 0000FA88 38 60 00 04 */ li r3, 0x4 -/* 00002CFC 0000FA8C 48 00 00 01 */ bl DefaultDataArea__6AttribUi -/* 00002D00 0000FA90 C1 BF 00 3C */ lfs f13, 0x3c(r31) -/* 00002D04 0000FA94 3D 00 00 00 */ lis r8, CameraNoiseSpeedFrequency@ha -/* 00002D08 0000FA98 C1 9F 00 40 */ lfs f12, 0x40(r31) -/* 00002D0C 0000FA9C 39 28 00 00 */ addi r9, r8, CameraNoiseSpeedFrequency@l -/* 00002D10 0000FAA0 C0 1F 00 38 */ lfs f0, 0x38(r31) -/* 00002D14 0000FAA4 3C C0 00 00 */ lis r6, CameraNoiseSpeedAmplitude@ha -/* 00002D18 0000FAA8 C3 43 00 00 */ lfs f26, 0x0(r3) -.L_00002D1C: -/* 00002D1C 0000FAAC 3C A0 00 00 */ lis r5, CameraNoiseTerrainFrequency@ha -/* 00002D20 0000FAB0 D1 A1 00 0C */ stfs f13, 0xc(r1) -/* 00002D24 0000FAB4 39 66 00 00 */ addi r11, r6, CameraNoiseSpeedAmplitude@l -/* 00002D28 0000FAB8 D1 81 00 10 */ stfs f12, 0x10(r1) -/* 00002D2C 0000FABC 39 45 00 00 */ addi r10, r5, CameraNoiseTerrainFrequency@l -/* 00002D30 0000FAC0 D0 01 00 08 */ stfs f0, 0x8(r1) -.L_00002D34: -/* 00002D34 0000FAC4 3C 80 00 00 */ lis r4, CameraNoiseTerrainAmplitude@ha -/* 00002D38 0000FAC8 C0 09 00 04 */ lfs f0, 0x4(r9) -/* 00002D3C 0000FACC 38 E4 00 00 */ addi r7, r4, CameraNoiseTerrainAmplitude@l -/* 00002D40 0000FAD0 C0 FF 00 58 */ lfs f7, 0x58(r31) -/* 00002D44 0000FAD4 C1 09 00 0C */ lfs f8, 0xc(r9) -/* 00002D48 0000FAD8 C1 A9 00 08 */ lfs f13, 0x8(r9) -/* 00002D4C 0000FADC C1 8B 00 04 */ lfs f12, 0x4(r11) -/* 00002D50 0000FAE0 C1 6B 00 08 */ lfs f11, 0x8(r11) -/* 00002D54 0000FAE4 C0 BF 00 48 */ lfs f5, 0x48(r31) -/* 00002D58 0000FAE8 C0 9F 00 68 */ lfs f4, 0x68(r31) -/* 00002D5C 0000FAEC C0 4A 00 0C */ lfs f2, 0xc(r10) -/* 00002D60 0000FAF0 C0 CB 00 0C */ lfs f6, 0xc(r11) -/* 00002D64 0000FAF4 C1 48 00 00 */ lfs f10, CameraNoiseSpeedFrequency@l(r8) -/* 00002D68 0000FAF8 D0 01 00 1C */ stfs f0, 0x1c(r1) -/* 00002D6C 0000FAFC 3D 00 00 00 */ lis r8, .rodata+0x51C@ha -/* 00002D70 0000FB00 C1 26 00 00 */ lfs f9, CameraNoiseSpeedAmplitude@l(r6) -/* 00002D74 0000FB04 D1 A1 00 20 */ stfs f13, 0x20(r1) -/* 00002D78 0000FB08 C0 01 00 0C */ lfs f0, 0xc(r1) -/* 00002D7C 0000FB0C D1 21 00 28 */ stfs f9, 0x28(r1) -/* 00002D80 0000FB10 D1 81 00 2C */ stfs f12, 0x2c(r1) -/* 00002D84 0000FB14 EC 00 01 F2 */ fmuls f0, f0, f7 -/* 00002D88 0000FB18 D1 61 00 30 */ stfs f11, 0x30(r1) -/* 00002D8C 0000FB1C D1 41 00 18 */ stfs f10, 0x18(r1) -/* 00002D90 0000FB20 D1 01 00 24 */ stfs f8, 0x24(r1) -/* 00002D94 0000FB24 D0 C1 00 34 */ stfs f6, 0x34(r1) -/* 00002D98 0000FB28 C1 A1 00 08 */ lfs f13, 0x8(r1) -/* 00002D9C 0000FB2C C1 81 00 10 */ lfs f12, 0x10(r1) -/* 00002DA0 0000FB30 C0 65 00 00 */ lfs f3, CameraNoiseTerrainFrequency@l(r5) -/* 00002DA4 0000FB34 ED AD 01 7A */ fmadds f13, f13, f5, f0 -/* 00002DA8 0000FB38 C1 0A 00 04 */ lfs f8, 0x4(r10) -/* 00002DAC 0000FB3C EC EC 69 3A */ fmadds f7, f12, f4, f13 -/* 00002DB0 0000FB40 C1 4A 00 08 */ lfs f10, 0x8(r10) -/* 00002DB4 0000FB44 D0 61 00 38 */ stfs f3, 0x38(r1) -/* 00002DB8 0000FB48 C1 27 00 0C */ lfs f9, 0xc(r7) -/* 00002DBC 0000FB4C C1 A7 00 04 */ lfs f13, 0x4(r7) -/* 00002DC0 0000FB50 C1 87 00 08 */ lfs f12, 0x8(r7) -/* 00002DC4 0000FB54 C1 64 00 00 */ lfs f11, CameraNoiseTerrainAmplitude@l(r4) -/* 00002DC8 0000FB58 C0 08 05 1C */ lfs f0, .rodata+0x51C@l(r8) -/* 00002DCC 0000FB5C D1 01 00 3C */ stfs f8, 0x3c(r1) -/* 00002DD0 0000FB60 FC 1C 00 00 */ fcmpu cr0, f28, f0 -/* 00002DD4 0000FB64 D1 41 00 40 */ stfs f10, 0x40(r1) -/* 00002DD8 0000FB68 D0 41 00 44 */ stfs f2, 0x44(r1) -/* 00002DDC 0000FB6C D1 61 00 48 */ stfs f11, 0x48(r1) -/* 00002DE0 0000FB70 D1 A1 00 4C */ stfs f13, 0x4c(r1) -/* 00002DE4 0000FB74 D1 81 00 50 */ stfs f12, 0x50(r1) -/* 00002DE8 0000FB78 D1 21 00 54 */ stfs f9, 0x54(r1) -/* 00002DEC 0000FB7C 4C 62 03 82 */ cror un, eq, lt -/* 00002DF0 0000FB80 41 83 2E 80 */ bso .L_00005C70 -.L_00002DF4: -/* 00002DF4 0000FB84 3D 20 00 00 */ lis r9, .rodata+0x520@ha -/* 00002DF8 0000FB88 C0 09 05 20 */ lfs f0, .rodata+0x520@l(r9) -/* 00002DFC 0000FB8C 39 20 00 00 */ li r9, 0x0 -/* 00002E00 0000FB90 EC 1C 00 32 */ fmuls f0, f28, f0 -/* 00002E04 0000FB94 FD A0 00 1E */ fctiwz f13, f0 -/* 00002E08 0000FB98 D9 A1 00 68 */ stfd f13, 0x68(r1) -.L_00002E0C: -/* 00002E0C 0000FB9C 80 01 00 6C */ lwz r0, 0x6c(r1) -/* 00002E10 0000FBA0 7C 09 00 00 */ cmpw r9, r0 -/* 00002E14 0000FBA4 40 80 2E 1C */ bge .L_00005C30 -/* 00002E18 0000FBA8 7C 09 03 78 */ mr r9, r0 -/* 00002E1C 0000FBAC 20 09 00 04 */ subfic r0, r9, 0x4 -/* 00002E20 0000FBB0 7D 2B 4B 78 */ mr r11, r9 -/* 00002E24 0000FBB4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00002E28 0000FBB8 40 80 2E 30 */ bge .L_00005C58 -/* 00002E2C 0000FBBC 39 60 00 04 */ li r11, 0x4 -/* 00002E30 0000FBC0 3D 20 00 00 */ lis r9, CameraNoiseSpeedData@ha -/* 00002E34 0000FBC4 55 60 20 36 */ slwi r0, r11, 4 -/* 00002E38 0000FBC8 39 29 00 00 */ addi r9, r9, CameraNoiseSpeedData@l -/* 00002E3C 0000FBCC 3D 40 00 00 */ lis r10, .rodata+0x528@ha -/* 00002E40 0000FBD0 7D 29 04 2E */ lfsx f9, r9, r0 -/* 00002E44 0000FBD4 7D 60 4A 14 */ add r11, r0, r9 -/* 00002E48 0000FBD8 C1 0B 00 0C */ lfs f8, 0xc(r11) -/* 00002E4C 0000FBDC 3D 20 00 00 */ lis r9, .rodata+0x524@ha -/* 00002E50 0000FBE0 C1 8B 00 04 */ lfs f12, 0x4(r11) -/* 00002E54 0000FBE4 FD 40 3A 10 */ fabs f10, f7 -/* 00002E58 0000FBE8 C1 6B 00 08 */ lfs f11, 0x8(r11) -.L_00002E5C: -/* 00002E5C 0000FBEC C0 0A 05 28 */ lfs f0, .rodata+0x528@l(r10) -/* 00002E60 0000FBF0 C1 A9 05 24 */ lfs f13, .rodata+0x524@l(r9) -/* 00002E64 0000FBF4 EC 0A 00 32 */ fmuls f0, f10, f0 -/* 00002E68 0000FBF8 D1 81 00 5C */ stfs f12, 0x5c(r1) -/* 00002E6C 0000FBFC D1 61 00 60 */ stfs f11, 0x60(r1) -/* 00002E70 0000FC00 EF 89 07 FA */ fmadds f28, f9, f31, f0 -.L_00002E74: -/* 00002E74 0000FC04 D1 01 00 64 */ stfs f8, 0x64(r1) -/* 00002E78 0000FC08 EF 6A DB 7A */ fmadds f27, f10, f13, f27 -/* 00002E7C 0000FC0C D1 21 00 58 */ stfs f9, 0x58(r1) -/* 00002E80 0000FC10 80 1F 00 BC */ lwz r0, 0xbc(r31) -/* 00002E84 0000FC14 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00002E88 0000FC18 41 82 2E 98 */ beq .L_00005D20 -/* 00002E8C 0000FC1C 3D 20 00 00 */ lis r9, .rodata+0x52C@ha -/* 00002E90 0000FC20 C0 09 05 2C */ lfs f0, .rodata+0x52C@l(r9) -/* 00002E94 0000FC24 EF 9C 00 32 */ fmuls f28, f28, f0 -.L_00002E98: -/* 00002E98 0000FC28 80 1F 00 C0 */ lwz r0, 0xc0(r31) -/* 00002E9C 0000FC2C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00002EA0 0000FC30 41 82 2E BC */ beq .L_00005D5C -/* 00002EA4 0000FC34 3D 60 00 00 */ lis r11, .rodata+0x528@ha -/* 00002EA8 0000FC38 3D 20 00 00 */ lis r9, .rodata+0x530@ha -/* 00002EAC 0000FC3C C0 09 05 30 */ lfs f0, .rodata+0x530@l(r9) -/* 00002EB0 0000FC40 C1 AB 05 28 */ lfs f13, .rodata+0x528@l(r11) -/* 00002EB4 0000FC44 EF 9C 00 2A */ fadds f28, f28, f0 -.L_00002EB8: -/* 00002EB8 0000FC48 EF 7B 03 72 */ fmuls f27, f27, f13 -/* 00002EBC 0000FC4C 80 1F 00 B4 */ lwz r0, 0xb4(r31) -/* 00002EC0 0000FC50 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00002EC4 0000FC54 41 82 2E EC */ beq .L_00005DB0 -/* 00002EC8 0000FC58 3D 20 00 00 */ lis r9, .rodata+0x530@ha -/* 00002ECC 0000FC5C C0 1F 00 10 */ lfs f0, 0x10(r31) -/* 00002ED0 0000FC60 C1 A9 05 30 */ lfs f13, .rodata+0x530@l(r9) -/* 00002ED4 0000FC64 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00002ED8 0000FC68 4C 62 03 82 */ cror un, eq, lt -/* 00002EDC 0000FC6C 41 83 2E EC */ bso .L_00005DC8 -/* 00002EE0 0000FC70 3D 20 00 00 */ lis r9, .rodata+0x534@ha -/* 00002EE4 0000FC74 FF 60 68 90 */ fmr f27, f13 -.L_00002EE8: -/* 00002EE8 0000FC78 C3 89 05 34 */ lfs f28, .rodata+0x534@l(r9) -/* 00002EEC 0000FC7C 80 1F 00 B8 */ lwz r0, 0xb8(r31) -/* 00002EF0 0000FC80 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00002EF4 0000FC84 41 82 2F 20 */ beq .L_00005E14 -.L_00002EF8: -/* 00002EF8 0000FC88 3D 20 00 00 */ lis r9, .rodata+0x530@ha -/* 00002EFC 0000FC8C C1 BF 00 10 */ lfs f13, 0x10(r31) -/* 00002F00 0000FC90 C0 09 05 30 */ lfs f0, .rodata+0x530@l(r9) -/* 00002F04 0000FC94 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 00002F08 0000FC98 4C 62 03 82 */ cror un, eq, lt -/* 00002F0C 0000FC9C 41 83 2F 20 */ bso .L_00005E2C -/* 00002F10 0000FCA0 3D 20 00 00 */ lis r9, .rodata+0x534@ha -/* 00002F14 0000FCA4 3D 60 00 00 */ lis r11, .rodata+0x51C@ha -.L_00002F18: -/* 00002F18 0000FCA8 C3 89 05 34 */ lfs f28, .rodata+0x534@l(r9) -/* 00002F1C 0000FCAC C3 6B 05 1C */ lfs f27, .rodata+0x51C@l(r11) -.L_00002F20: -/* 00002F20 0000FCB0 81 3D 00 08 */ lwz r9, 0x8(r29) -/* 00002F24 0000FCB4 A8 69 00 58 */ lha r3, 0x58(r9) -/* 00002F28 0000FCB8 80 09 00 5C */ lwz r0, 0x5c(r9) -/* 00002F2C 0000FCBC 7C 7D 1A 14 */ add r3, r29, r3 -/* 00002F30 0000FCC0 7C 08 03 A6 */ mtlr r0 -/* 00002F34 0000FCC4 4E 80 00 21 */ blrl -/* 00002F38 0000FCC8 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00002F3C 0000FCCC 40 82 2F 50 */ bne .L_00005E8C -/* 00002F40 0000FCD0 3D 20 00 00 */ lis r9, .rodata+0x528@ha -/* 00002F44 0000FCD4 C0 09 05 28 */ lfs f0, .rodata+0x528@l(r9) -/* 00002F48 0000FCD8 EF 7B 00 32 */ fmuls f27, f27, f0 -/* 00002F4C 0000FCDC EF 9C 00 32 */ fmuls f28, f28, f0 -/* 00002F50 0000FCE0 EF 7B 06 B2 */ fmuls f27, f27, f26 -/* 00002F54 0000FCE4 C3 E1 00 18 */ lfs f31, 0x18(r1) -/* 00002F58 0000FCE8 ED 9E 06 F2 */ fmuls f12, f30, f27 -/* 00002F5C 0000FCEC C3 A1 00 1C */ lfs f29, 0x1c(r1) -/* 00002F60 0000FCF0 C3 C1 00 20 */ lfs f30, 0x20(r1) -/* 00002F64 0000FCF4 EF FF 06 F2 */ fmuls f31, f31, f27 -/* 00002F68 0000FCF8 C0 21 00 24 */ lfs f1, 0x24(r1) -.L_00002F6C: -/* 00002F6C 0000FCFC EF BD 06 F2 */ fmuls f29, f29, f27 -.L_00002F70: -/* 00002F70 0000FD00 C0 41 00 28 */ lfs f2, 0x28(r1) -/* 00002F74 0000FD04 EF DE 06 F2 */ fmuls f30, f30, f27 -/* 00002F78 0000FD08 C1 41 00 2C */ lfs f10, 0x2c(r1) -/* 00002F7C 0000FD0C EC 21 06 F2 */ fmuls f1, f1, f27 -/* 00002F80 0000FD10 C1 21 00 30 */ lfs f9, 0x30(r1) -/* 00002F84 0000FD14 EC 42 07 32 */ fmuls f2, f2, f28 -/* 00002F88 0000FD18 C1 01 00 34 */ lfs f8, 0x34(r1) -/* 00002F8C 0000FD1C ED 4A 07 32 */ fmuls f10, f10, f28 -.L_00002F90: -/* 00002F90 0000FD20 C0 E1 00 38 */ lfs f7, 0x38(r1) -/* 00002F94 0000FD24 ED 29 07 32 */ fmuls f9, f9, f28 -/* 00002F98 0000FD28 C0 C1 00 3C */ lfs f6, 0x3c(r1) -/* 00002F9C 0000FD2C ED 08 07 32 */ fmuls f8, f8, f28 -/* 00002FA0 0000FD30 C0 A1 00 40 */ lfs f5, 0x40(r1) -/* 00002FA4 0000FD34 EC E7 06 B2 */ fmuls f7, f7, f26 -/* 00002FA8 0000FD38 C0 81 00 44 */ lfs f4, 0x44(r1) -/* 00002FAC 0000FD3C EC C6 06 B2 */ fmuls f6, f6, f26 -/* 00002FB0 0000FD40 C0 61 00 48 */ lfs f3, 0x48(r1) -/* 00002FB4 0000FD44 EC A5 06 B2 */ fmuls f5, f5, f26 -.L_00002FB8: -/* 00002FB8 0000FD48 C1 61 00 4C */ lfs f11, 0x4c(r1) -/* 00002FBC 0000FD4C EC 84 06 B2 */ fmuls f4, f4, f26 -/* 00002FC0 0000FD50 C1 A1 00 50 */ lfs f13, 0x50(r1) -/* 00002FC4 0000FD54 EC 63 03 32 */ fmuls f3, f3, f12 -/* 00002FC8 0000FD58 C0 01 00 54 */ lfs f0, 0x54(r1) -/* 00002FCC 0000FD5C ED 6B 03 32 */ fmuls f11, f11, f12 -/* 00002FD0 0000FD60 81 3D 00 1C */ lwz r9, 0x1c(r29) -/* 00002FD4 0000FD64 ED AD 03 32 */ fmuls f13, f13, f12 -/* 00002FD8 0000FD68 EC 00 03 32 */ fmuls f0, f0, f12 -/* 00002FDC 0000FD6C D0 41 00 28 */ stfs f2, 0x28(r1) -/* 00002FE0 0000FD70 D1 61 00 4C */ stfs f11, 0x4c(r1) -/* 00002FE4 0000FD74 3D 60 00 00 */ lis r11, .rodata+0x530@ha -/* 00002FE8 0000FD78 D1 A1 00 50 */ stfs f13, 0x50(r1) -/* 00002FEC 0000FD7C 3C C0 00 00 */ lis r6, WorldTimer@ha -/* 00002FF0 0000FD80 D0 01 00 54 */ stfs f0, 0x54(r1) -/* 00002FF4 0000FD84 D0 21 00 24 */ stfs f1, 0x24(r1) -/* 00002FF8 0000FD88 3C A0 43 30 */ lis r5, 0x4330 -/* 00002FFC 0000FD8C D1 41 00 2C */ stfs f10, 0x2c(r1) -/* 00003000 0000FD90 3D 00 00 00 */ lis r8, .rodata+0x538@ha -/* 00003004 0000FD94 D1 21 00 30 */ stfs f9, 0x30(r1) -/* 00003008 0000FD98 3C E0 00 00 */ lis r7, .rodata+0x540@ha -/* 0000300C 0000FD9C D1 01 00 34 */ stfs f8, 0x34(r1) -/* 00003010 0000FDA0 7F 84 E3 78 */ mr r4, r28 -/* 00003014 0000FDA4 D0 E1 00 38 */ stfs f7, 0x38(r1) -/* 00003018 0000FDA8 D0 C1 00 3C */ stfs f6, 0x3c(r1) -/* 0000301C 0000FDAC D0 A1 00 40 */ stfs f5, 0x40(r1) -/* 00003020 0000FDB0 D0 81 00 44 */ stfs f4, 0x44(r1) -/* 00003024 0000FDB4 D0 61 00 48 */ stfs f3, 0x48(r1) -/* 00003028 0000FDB8 D3 E1 00 18 */ stfs f31, 0x18(r1) -/* 0000302C 0000FDBC D3 A1 00 1C */ stfs f29, 0x1c(r1) -/* 00003030 0000FDC0 D3 C1 00 20 */ stfs f30, 0x20(r1) -/* 00003034 0000FDC4 D3 E9 00 70 */ stfs f31, 0x70(r9) -/* 00003038 0000FDC8 D0 29 00 7C */ stfs f1, 0x7c(r9) -/* 0000303C 0000FDCC D3 A9 00 74 */ stfs f29, 0x74(r9) -/* 00003040 0000FDD0 D3 C9 00 78 */ stfs f30, 0x78(r9) -/* 00003044 0000FDD4 C0 4B 05 30 */ lfs f2, .rodata+0x530@l(r11) -/* 00003048 0000FDD8 81 3D 00 1C */ lwz r9, 0x1c(r29) -/* 0000304C 0000FDDC C1 A1 00 28 */ lfs f13, 0x28(r1) -/* 00003050 0000FDE0 C1 81 00 2C */ lfs f12, 0x2c(r1) -/* 00003054 0000FDE4 C1 61 00 30 */ lfs f11, 0x30(r1) -/* 00003058 0000FDE8 C0 01 00 34 */ lfs f0, 0x34(r1) -/* 0000305C 0000FDEC D1 A9 00 80 */ stfs f13, 0x80(r9) -/* 00003060 0000FDF0 D0 09 00 8C */ stfs f0, 0x8c(r9) -/* 00003064 0000FDF4 D1 89 00 84 */ stfs f12, 0x84(r9) -/* 00003068 0000FDF8 D1 69 00 88 */ stfs f11, 0x88(r9) -/* 0000306C 0000FDFC C1 A1 00 38 */ lfs f13, 0x38(r1) -/* 00003070 0000FE00 C1 81 00 3C */ lfs f12, 0x3c(r1) -/* 00003074 0000FE04 C1 61 00 40 */ lfs f11, 0x40(r1) -/* 00003078 0000FE08 C0 01 00 44 */ lfs f0, 0x44(r1) -/* 0000307C 0000FE0C 81 7D 00 1C */ lwz r11, 0x1c(r29) -.L_00003080: -/* 00003080 0000FE10 D1 AB 00 90 */ stfs f13, 0x90(r11) -/* 00003084 0000FE14 D0 0B 00 9C */ stfs f0, 0x9c(r11) -/* 00003088 0000FE18 D1 8B 00 94 */ stfs f12, 0x94(r11) -/* 0000308C 0000FE1C D1 6B 00 98 */ stfs f11, 0x98(r11) -.L_00003090: -/* 00003090 0000FE20 C1 A1 00 48 */ lfs f13, 0x48(r1) -/* 00003094 0000FE24 C0 01 00 54 */ lfs f0, 0x54(r1) -/* 00003098 0000FE28 81 3D 00 1C */ lwz r9, 0x1c(r29) -/* 0000309C 0000FE2C C1 81 00 4C */ lfs f12, 0x4c(r1) -.L_000030A0: -/* 000030A0 0000FE30 C1 61 00 50 */ lfs f11, 0x50(r1) -/* 000030A4 0000FE34 D1 A9 00 A0 */ stfs f13, 0xa0(r9) -.L_000030A8: -/* 000030A8 0000FE38 D0 09 00 AC */ stfs f0, 0xac(r9) -/* 000030AC 0000FE3C D1 89 00 A4 */ stfs f12, 0xa4(r9) -.L_000030B0: -/* 000030B0 0000FE40 D1 69 00 A8 */ stfs f11, 0xa8(r9) -/* 000030B4 0000FE44 80 06 00 00 */ lwz r0, WorldTimer@l(r6) -/* 000030B8 0000FE48 C8 08 05 38 */ lfd f0, .rodata+0x538@l(r8) -/* 000030BC 0000FE4C 6C 00 80 00 */ xoris r0, r0, 0x8000 -/* 000030C0 0000FE50 C1 A7 05 40 */ lfs f13, .rodata+0x540@l(r7) -/* 000030C4 0000FE54 90 01 00 6C */ stw r0, 0x6c(r1) -/* 000030C8 0000FE58 80 7D 00 1C */ lwz r3, 0x1c(r29) -/* 000030CC 0000FE5C 90 A1 00 68 */ stw r5, 0x68(r1) -/* 000030D0 0000FE60 C8 21 00 68 */ lfd f1, 0x68(r1) -/* 000030D4 0000FE64 FC 21 00 28 */ fsub f1, f1, f0 -/* 000030D8 0000FE68 FC 20 08 18 */ frsp f1, f1 -/* 000030DC 0000FE6C EC 21 03 72 */ fmuls f1, f1, f13 -/* 000030E0 0000FE70 48 00 0A 61 */ bl .L_00003B40 -/* 000030E4 0000FE74 80 01 00 B4 */ lwz r0, 0xb4(r1) -.L_000030E8: -/* 000030E8 0000FE78 7C 08 03 A6 */ mtlr r0 -/* 000030EC 0000FE7C BB 81 00 70 */ lmw r28, 0x70(r1) -/* 000030F0 0000FE80 E3 41 00 80 */ psq_l f26, 0x80(r1), 0, qr0 -/* 000030F4 0000FE84 E3 61 00 88 */ psq_l f27, 0x88(r1), 0, qr0 -/* 000030F8 0000FE88 E3 81 00 90 */ psq_l f28, 0x90(r1), 0, qr0 -/* 000030FC 0000FE8C E3 A1 00 98 */ psq_l f29, 0x98(r1), 0, qr0 -/* 00003100 0000FE90 E3 C1 00 A0 */ psq_l f30, 0xa0(r1), 0, qr0 -/* 00003104 0000FE94 E3 E1 00 A8 */ psq_l f31, 0xa8(r1), 0, qr0 -/* 00003108 0000FE98 38 21 00 B0 */ addi r1, r1, 0xb0 -/* 0000310C 0000FE9C 4E 80 00 20 */ blr -.endfn TerrainVelocityNoise__11CameraMoverP8bMatrix4P12CameraAnchorff - -# .text:0x3110 | size: 0xB0 -.fn ComputeBankedUpVector__11CameraMoverP8bVector3N21Us, global -/* 00003110 0000FEA0 94 21 FF 80 */ stwu r1, -0x80(r1) -/* 00003114 0000FEA4 7C 08 02 A6 */ mflr r0 -/* 00003118 0000FEA8 BF 41 00 68 */ stmw r26, 0x68(r1) -/* 0000311C 0000FEAC 90 01 00 84 */ stw r0, 0x84(r1) -/* 00003120 0000FEB0 C1 84 00 08 */ lfs f12, 0x8(r4) -/* 00003124 0000FEB4 3D 20 00 00 */ lis r9, .rodata+0x544@ha -.L_00003128: -/* 00003128 0000FEB8 C1 25 00 08 */ lfs f9, 0x8(r5) -/* 0000312C 0000FEBC 3D 60 00 00 */ lis r11, .rodata+0x548@ha -/* 00003130 0000FEC0 C1 64 00 00 */ lfs f11, 0x0(r4) -/* 00003134 0000FEC4 3B C1 00 48 */ addi r30, r1, 0x48 -/* 00003138 0000FEC8 C1 44 00 04 */ lfs f10, 0x4(r4) -/* 0000313C 0000FECC ED 29 60 28 */ fsubs f9, f9, f12 -.L_00003140: -/* 00003140 0000FED0 C0 05 00 00 */ lfs f0, 0x0(r5) -/* 00003144 0000FED4 7C 7A 1B 78 */ mr r26, r3 -/* 00003148 0000FED8 C1 A5 00 04 */ lfs f13, 0x4(r5) -/* 0000314C 0000FEDC 3B A1 00 08 */ addi r29, r1, 0x8 -/* 00003150 0000FEE0 C1 09 05 44 */ lfs f8, .rodata+0x544@l(r9) -/* 00003154 0000FEE4 EC 00 58 28 */ fsubs f0, f0, f11 -/* 00003158 0000FEE8 C1 8B 05 48 */ lfs f12, .rodata+0x548@l(r11) -/* 0000315C 0000FEEC ED AD 50 28 */ fsubs f13, f13, f10 -/* 00003160 0000FEF0 7C DB 33 78 */ mr r27, r6 -/* 00003164 0000FEF4 3B 81 00 58 */ addi r28, r1, 0x58 -.L_00003168: -/* 00003168 0000FEF8 D1 01 00 5C */ stfs f8, 0x5c(r1) -/* 0000316C 0000FEFC 7F C4 F3 78 */ mr r4, r30 -/* 00003170 0000FF00 D1 81 00 60 */ stfs f12, 0x60(r1) -/* 00003174 0000FF04 7F C3 F3 78 */ mr r3, r30 -/* 00003178 0000FF08 D0 01 00 48 */ stfs f0, 0x48(r1) -/* 0000317C 0000FF0C D1 A1 00 4C */ stfs f13, 0x4c(r1) -.L_00003180: -/* 00003180 0000FF10 D1 21 00 50 */ stfs f9, 0x50(r1) -/* 00003184 0000FF14 D1 01 00 58 */ stfs f8, 0x58(r1) -/* 00003188 0000FF18 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -/* 0000318C 0000FF1C 7F C4 F3 78 */ mr r4, r30 -/* 00003190 0000FF20 7F 65 DB 78 */ mr r5, r27 -/* 00003194 0000FF24 7F A3 EB 78 */ mr r3, r29 -/* 00003198 0000FF28 48 00 00 01 */ bl eCreateAxisRotationMatrix__FP8bMatrix4R8bVector3Us -/* 0000319C 0000FF2C 7F 43 D3 78 */ mr r3, r26 -/* 000031A0 0000FF30 7F A4 EB 78 */ mr r4, r29 -/* 000031A4 0000FF34 7F 85 E3 78 */ mr r5, r28 -/* 000031A8 0000FF38 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 -/* 000031AC 0000FF3C 80 01 00 84 */ lwz r0, 0x84(r1) -/* 000031B0 0000FF40 7C 08 03 A6 */ mtlr r0 -/* 000031B4 0000FF44 BB 41 00 68 */ lmw r26, 0x68(r1) -/* 000031B8 0000FF48 38 21 00 80 */ addi r1, r1, 0x80 -/* 000031BC 0000FF4C 4E 80 00 20 */ blr -.endfn ComputeBankedUpVector__11CameraMoverP8bVector3N21Us - -# .text:0x31C0 | size: 0xEC -.fn IsoProjectionMatrix__11CameraMoverP8bMatrix4P8bVector3T2P8bVector2, global -/* 000031C0 0000FF50 94 21 FF 20 */ stwu r1, -0xe0(r1) -/* 000031C4 0000FF54 7C 08 02 A6 */ mflr r0 -/* 000031C8 0000FF58 BE C1 00 B8 */ stmw r22, 0xb8(r1) -/* 000031CC 0000FF5C 90 01 00 E4 */ stw r0, 0xe4(r1) -/* 000031D0 0000FF60 7C 9B 23 78 */ mr r27, r4 -/* 000031D4 0000FF64 3B 41 00 08 */ addi r26, r1, 0x8 -/* 000031D8 0000FF68 C0 1B 00 04 */ lfs f0, 0x4(r27) -/* 000031DC 0000FF6C 3B C1 00 18 */ addi r30, r1, 0x18 -/* 000031E0 0000FF70 C1 BB 00 14 */ lfs f13, 0x14(r27) -/* 000031E4 0000FF74 7C B6 2B 78 */ mr r22, r5 -/* 000031E8 0000FF78 C1 9B 00 24 */ lfs f12, 0x24(r27) -/* 000031EC 0000FF7C FC 00 00 50 */ fneg f0, f0 -/* 000031F0 0000FF80 FD A0 68 50 */ fneg f13, f13 -/* 000031F4 0000FF84 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 000031F8 0000FF88 D1 A1 00 0C */ stfs f13, 0xc(r1) -/* 000031FC 0000FF8C FD 80 60 50 */ fneg f12, f12 -/* 00003200 0000FF90 7C D7 33 78 */ mr r23, r6 -/* 00003204 0000FF94 7C F9 3B 78 */ mr r25, r7 -/* 00003208 0000FF98 3B A1 00 58 */ addi r29, r1, 0x58 -/* 0000320C 0000FF9C 7F 46 D3 78 */ mr r6, r26 -/* 00003210 0000FFA0 D1 9A 00 08 */ stfs f12, 0x8(r26) -/* 00003214 0000FFA4 7E E5 BB 78 */ mr r5, r23 -/* 00003218 0000FFA8 7F C3 F3 78 */ mr r3, r30 -/* 0000321C 0000FFAC 7E C4 B3 78 */ mr r4, r22 -.L_00003220: -/* 00003220 0000FFB0 48 00 00 01 */ bl eCreateLookAtMatrix__FP8bMatrix4R8bVector3N21 -/* 00003224 0000FFB4 3B 81 00 98 */ addi r28, r1, 0x98 -.L_00003228: -/* 00003228 0000FFB8 7F C4 F3 78 */ mr r4, r30 -/* 0000322C 0000FFBC 7F A3 EB 78 */ mr r3, r29 -/* 00003230 0000FFC0 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 -/* 00003234 0000FFC4 3B 01 00 A8 */ addi r24, r1, 0xa8 -/* 00003238 0000FFC8 7F C4 F3 78 */ mr r4, r30 -/* 0000323C 0000FFCC 7E E5 BB 78 */ mr r5, r23 -/* 00003240 0000FFD0 7F 83 E3 78 */ mr r3, r28 -/* 00003244 0000FFD4 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 -/* 00003248 0000FFD8 C1 79 00 04 */ lfs f11, 0x4(r25) -/* 0000324C 0000FFDC 7F A4 EB 78 */ mr r4, r29 -.L_00003250: -/* 00003250 0000FFE0 C1 81 00 A0 */ lfs f12, 0xa0(r1) -/* 00003254 0000FFE4 7F 85 E3 78 */ mr r5, r28 -/* 00003258 0000FFE8 C1 59 00 00 */ lfs f10, 0x0(r25) -/* 0000325C 0000FFEC 7F 03 C3 78 */ mr r3, r24 -/* 00003260 0000FFF0 C1 A1 00 98 */ lfs f13, 0x98(r1) -.L_00003264: -/* 00003264 0000FFF4 ED 6C 02 F2 */ fmuls f11, f12, f11 -/* 00003268 0000FFF8 C0 01 00 9C */ lfs f0, 0x9c(r1) -/* 0000326C 0000FFFC ED 8C 02 B2 */ fmuls f12, f12, f10 -/* 00003270 00010000 ED AD 60 28 */ fsubs f13, f13, f12 -/* 00003274 00010004 EC 00 58 28 */ fsubs f0, f0, f11 -/* 00003278 00010008 D1 A1 00 98 */ stfs f13, 0x98(r1) -/* 0000327C 0001000C D0 01 00 9C */ stfs f0, 0x9c(r1) -/* 00003280 00010010 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 -/* 00003284 00010014 7F 63 DB 78 */ mr r3, r27 -/* 00003288 00010018 7E C4 B3 78 */ mr r4, r22 -/* 0000328C 0001001C 7F 05 C3 78 */ mr r5, r24 -/* 00003290 00010020 7F 46 D3 78 */ mr r6, r26 -/* 00003294 00010024 48 00 00 01 */ bl eCreateLookAtMatrix__FP8bMatrix4R8bVector3N21 -/* 00003298 00010028 80 01 00 E4 */ lwz r0, 0xe4(r1) -/* 0000329C 0001002C 7C 08 03 A6 */ mtlr r0 -/* 000032A0 00010030 BA C1 00 B8 */ lmw r22, 0xb8(r1) -/* 000032A4 00010034 38 21 00 E0 */ addi r1, r1, 0xe0 -/* 000032A8 00010038 4E 80 00 20 */ blr -.endfn IsoProjectionMatrix__11CameraMoverP8bMatrix4P8bVector3T2P8bVector2 - -# .text:0x32AC | size: 0x320 -.fn AdjustHeightAroundCar__11CameraMoverPC8bVector3P8bVector3T2, global -/* 000032AC 0001003C 94 21 FE 80 */ stwu r1, -0x180(r1) -/* 000032B0 00010040 7C 08 02 A6 */ mflr r0 -/* 000032B4 00010044 F3 61 01 58 */ psq_st f27, 0x158(r1), 0, qr0 -/* 000032B8 00010048 F3 81 01 60 */ psq_st f28, 0x160(r1), 0, qr0 -/* 000032BC 0001004C F3 A1 01 68 */ psq_st f29, 0x168(r1), 0, qr0 -/* 000032C0 00010050 F3 C1 01 70 */ psq_st f30, 0x170(r1), 0, qr0 -/* 000032C4 00010054 F3 E1 01 78 */ psq_st f31, 0x178(r1), 0, qr0 -/* 000032C8 00010058 BE A1 01 2C */ stmw r21, 0x12c(r1) -/* 000032CC 0001005C 90 01 01 84 */ stw r0, 0x184(r1) -/* 000032D0 00010060 3D 20 00 00 */ lis r9, TheAvoidables@ha -/* 000032D4 00010064 3D 60 00 00 */ lis r11, .rodata+0x54C@ha -/* 000032D8 00010068 81 49 00 00 */ lwz r10, TheAvoidables@l(r9) -/* 000032DC 0001006C 3D 00 00 00 */ lis r8, .rodata+0x550@ha -/* 000032E0 00010070 C3 6B 05 4C */ lfs f27, .rodata+0x54C@l(r11) -/* 000032E4 00010074 7C 9F 23 78 */ mr r31, r4 -/* 000032E8 00010078 81 2A 00 04 */ lwz r9, 0x4(r10) -/* 000032EC 0001007C 3E A0 00 00 */ lis r21, TheAvoidables@ha -/* 000032F0 00010080 C3 88 05 50 */ lfs f28, .rodata+0x550@l(r8) -/* 000032F4 00010084 3B 41 00 10 */ addi r26, r1, 0x10 -/* 000032F8 00010088 80 09 00 00 */ lwz r0, 0x0(r9) -.L_000032FC: -/* 000032FC 0001008C 3E E0 00 00 */ lis r23, .rodata+0x554@ha -.L_00003300: -/* 00003300 00010090 3E C0 00 00 */ lis r22, .rodata+0x558@ha -/* 00003304 00010094 3F 80 00 00 */ lis r28, .rodata+0x55C@ha -/* 00003308 00010098 90 01 00 08 */ stw r0, 0x8(r1) -/* 0000330C 0001009C 7C 1D 03 78 */ mr r29, r0 -/* 00003310 000100A0 3B 61 00 D8 */ addi r27, r1, 0xd8 -/* 00003314 000100A4 81 35 00 00 */ lwz r9, TheAvoidables@l(r21) -/* 00003318 000100A8 39 60 00 01 */ li r11, 0x1 -/* 0000331C 000100AC 80 09 00 04 */ lwz r0, 0x4(r9) -/* 00003320 000100B0 7C 1D 00 00 */ cmpw r29, r0 -.L_00003324: -/* 00003324 000100B4 90 01 00 08 */ stw r0, 0x8(r1) -/* 00003328 000100B8 40 82 33 30 */ bne .L_00006658 -.L_0000332C: -/* 0000332C 000100BC 39 60 00 00 */ li r11, 0x0 -/* 00003330 000100C0 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00003334 000100C4 41 82 35 9C */ beq .L_000068D0 -/* 00003338 000100C8 83 DD 00 08 */ lwz r30, 0x8(r29) -/* 0000333C 000100CC 7F 44 D3 78 */ mr r4, r26 -/* 00003340 000100D0 3F 20 00 00 */ lis r25, .rodata+0x554@ha -/* 00003344 000100D4 3F 00 00 00 */ lis r24, .rodata+0x558@ha -/* 00003348 000100D8 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000334C 000100DC 80 09 00 14 */ lwz r0, 0x14(r9) -.L_00003350: -/* 00003350 000100E0 A8 69 00 10 */ lha r3, 0x10(r9) -.L_00003354: -/* 00003354 000100E4 7C 08 03 A6 */ mtlr r0 -/* 00003358 000100E8 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000335C 000100EC 4E 80 00 21 */ blrl -/* 00003360 000100F0 38 61 00 50 */ addi r3, r1, 0x50 -.L_00003364: -/* 00003364 000100F4 7F 44 D3 78 */ mr r4, r26 -/* 00003368 000100F8 48 00 00 01 */ bl bConvertFromBond__FR8bMatrix4RC8bMatrix4 -/* 0000336C 000100FC C1 BF 00 00 */ lfs f13, 0x0(r31) -/* 00003370 00010100 38 81 00 90 */ addi r4, r1, 0x90 -/* 00003374 00010104 C1 7F 00 04 */ lfs f11, 0x4(r31) -/* 00003378 00010108 C1 81 00 80 */ lfs f12, 0x80(r1) -.L_0000337C: -/* 0000337C 0001010C C0 01 00 84 */ lfs f0, 0x84(r1) -/* 00003380 00010110 ED 8C 68 28 */ fsubs f12, f12, f13 -/* 00003384 00010114 C1 41 00 88 */ lfs f10, 0x88(r1) -/* 00003388 00010118 EC 00 58 28 */ fsubs f0, f0, f11 -/* 0000338C 0001011C D1 81 00 B0 */ stfs f12, 0xb0(r1) -/* 00003390 00010120 D0 01 00 B4 */ stfs f0, 0xb4(r1) -/* 00003394 00010124 EC 00 00 32 */ fmuls f0, f0, f0 -/* 00003398 00010128 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000339C 0001012C EF CC 03 3A */ fmadds f30, f12, f12, f0 -/* 000033A0 00010130 C1 BF 00 08 */ lfs f13, 0x8(r31) -/* 000033A4 00010134 A8 69 00 28 */ lha r3, 0x28(r9) -/* 000033A8 00010138 80 09 00 2C */ lwz r0, 0x2c(r9) -/* 000033AC 0001013C ED 4A 68 28 */ fsubs f10, f10, f13 -/* 000033B0 00010140 7C 7E 1A 14 */ add r3, r30, r3 -/* 000033B4 00010144 FF A0 52 10 */ fabs f29, f10 -/* 000033B8 00010148 7C 08 03 A6 */ mtlr r0 -/* 000033BC 0001014C 4E 80 00 21 */ blrl -/* 000033C0 00010150 C0 01 00 90 */ lfs f0, 0x90(r1) -/* 000033C4 00010154 C1 A1 00 98 */ lfs f13, 0x98(r1) -.L_000033C8: -/* 000033C8 00010158 EC 00 D8 2A */ fadds f0, f0, f27 -/* 000033CC 0001015C C1 81 00 94 */ lfs f12, 0x94(r1) -/* 000033D0 00010160 D0 01 00 A4 */ stfs f0, 0xa4(r1) -/* 000033D4 00010164 ED AD D8 2A */ fadds f13, f13, f27 -/* 000033D8 00010168 EC 00 00 32 */ fmuls f0, f0, f0 -/* 000033DC 0001016C C1 57 05 54 */ lfs f10, .rodata+0x554@l(r23) -/* 000033E0 00010170 ED 6D 03 7A */ fmadds f11, f13, f13, f0 -.L_000033E4: -/* 000033E4 00010174 C1 36 05 58 */ lfs f9, .rodata+0x558@l(r22) -/* 000033E8 00010178 ED 8C D8 2A */ fadds f12, f12, f27 -/* 000033EC 0001017C D1 A1 00 A0 */ stfs f13, 0xa0(r1) -/* 000033F0 00010180 D1 81 00 A8 */ stfs f12, 0xa8(r1) -/* 000033F4 00010184 FC 0B E0 00 */ fcmpu cr0, f11, f28 -.L_000033F8: -/* 000033F8 00010188 4C 62 03 82 */ cror un, eq, lt -/* 000033FC 0001018C 41 83 34 2C */ bso .L_00006828 -/* 00003400 00010190 FF E0 58 34 */ frsqrte f31, f11 -/* 00003404 00010194 EC 1F 07 F2 */ fmuls f0, f31, f31 -/* 00003408 00010198 ED BF 02 B2 */ fmuls f13, f31, f10 -/* 0000340C 0001019C EC 0B 48 3C */ fnmsubs f0, f11, f0, f9 -/* 00003410 000101A0 EF E0 FB 7A */ fmadds f31, f0, f13, f31 -/* 00003414 000101A4 EC 1F 07 F2 */ fmuls f0, f31, f31 -.L_00003418: -/* 00003418 000101A8 ED BF 02 B2 */ fmuls f13, f31, f10 -/* 0000341C 000101AC EC 0B 48 3C */ fnmsubs f0, f11, f0, f9 -/* 00003420 000101B0 EF E0 FB 7A */ fmadds f31, f0, f13, f31 -/* 00003424 000101B4 EF FF 02 F2 */ fmuls f31, f31, f11 -/* 00003428 000101B8 48 00 34 30 */ b .L_00006858 -/* 0000342C 000101BC C3 FC 05 5C */ lfs f31, .rodata+0x55C@l(r28) -/* 00003430 000101C0 EC 1F 07 F2 */ fmuls f0, f31, f31 -/* 00003434 000101C4 FC 1E 00 00 */ fcmpu cr0, f30, f0 -/* 00003438 000101C8 4C 62 0B 82 */ cror un, eq, gt -/* 0000343C 000101CC 41 83 35 94 */ bso .L_000069D0 -/* 00003440 000101D0 C0 01 00 A8 */ lfs f0, 0xa8(r1) -/* 00003444 000101D4 EC 00 00 2A */ fadds f0, f0, f0 -/* 00003448 000101D8 FC 1D 00 00 */ fcmpu cr0, f29, f0 -/* 0000344C 000101DC 4C 62 0B 82 */ cror un, eq, gt -/* 00003450 000101E0 41 83 35 94 */ bso .L_000069E4 -/* 00003454 000101E4 38 81 00 50 */ addi r4, r1, 0x50 -/* 00003458 000101E8 7F 63 DB 78 */ mr r3, r27 -/* 0000345C 000101EC 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 -/* 00003460 000101F0 7F 64 DB 78 */ mr r4, r27 -/* 00003464 000101F4 7F E5 FB 78 */ mr r5, r31 -/* 00003468 000101F8 38 61 00 B8 */ addi r3, r1, 0xb8 -/* 0000346C 000101FC 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 -/* 00003470 00010200 C1 61 00 B8 */ lfs f11, 0xb8(r1) -/* 00003474 00010204 38 81 00 50 */ addi r4, r1, 0x50 -/* 00003478 00010208 C1 81 00 BC */ lfs f12, 0xbc(r1) -/* 0000347C 0001020C 38 A1 00 B8 */ addi r5, r1, 0xb8 -/* 00003480 00010210 C1 A1 00 A0 */ lfs f13, 0xa0(r1) -/* 00003484 00010214 ED 6B 02 F2 */ fmuls f11, f11, f11 -/* 00003488 00010218 C0 01 00 A4 */ lfs f0, 0xa4(r1) -/* 0000348C 0001021C ED 8C 03 32 */ fmuls f12, f12, f12 -/* 00003490 00010220 ED AD 03 72 */ fmuls f13, f13, f13 -/* 00003494 00010224 C1 38 05 58 */ lfs f9, .rodata+0x558@l(r24) -.L_00003498: -/* 00003498 00010228 EC 00 00 32 */ fmuls f0, f0, f0 -/* 0000349C 0001022C ED 6B 02 F2 */ fmuls f11, f11, f11 -/* 000034A0 00010230 ED 8C 03 32 */ fmuls f12, f12, f12 -/* 000034A4 00010234 ED AD 03 72 */ fmuls f13, f13, f13 -.L_000034A8: -/* 000034A8 00010238 EC 00 00 32 */ fmuls f0, f0, f0 -.L_000034AC: -/* 000034AC 0001023C ED 6B 68 24 */ fdivs f11, f11, f13 -/* 000034B0 00010240 ED 8C 00 24 */ fdivs f12, f12, f0 -/* 000034B4 00010244 ED 6B 60 2A */ fadds f11, f11, f12 -/* 000034B8 00010248 FC 0B 48 00 */ fcmpu cr0, f11, f9 -.L_000034BC: -/* 000034BC 0001024C 4C 62 0B 82 */ cror un, eq, gt -.L_000034C0: -/* 000034C0 00010250 41 83 35 94 */ bso .L_00006A54 -/* 000034C4 00010254 ED 69 58 28 */ fsubs f11, f9, f11 -/* 000034C8 00010258 C1 59 05 54 */ lfs f10, .rodata+0x554@l(r25) -/* 000034CC 0001025C FC 0B E0 00 */ fcmpu cr0, f11, f28 -.L_000034D0: -/* 000034D0 00010260 4C 62 03 82 */ cror un, eq, lt -/* 000034D4 00010264 41 83 35 04 */ bso .L_000069D8 -.L_000034D8: -/* 000034D8 00010268 FC 00 58 34 */ frsqrte f0, f11 -/* 000034DC 0001026C ED A0 00 32 */ fmuls f13, f0, f0 -/* 000034E0 00010270 ED 80 02 B2 */ fmuls f12, f0, f10 -/* 000034E4 00010274 ED AB 4B 7C */ fnmsubs f13, f11, f13, f9 -/* 000034E8 00010278 EC 0D 03 3A */ fmadds f0, f13, f12, f0 -/* 000034EC 0001027C ED A0 00 32 */ fmuls f13, f0, f0 -/* 000034F0 00010280 ED 80 02 B2 */ fmuls f12, f0, f10 -/* 000034F4 00010284 ED AB 4B 7C */ fnmsubs f13, f11, f13, f9 -/* 000034F8 00010288 EC 0D 03 3A */ fmadds f0, f13, f12, f0 -/* 000034FC 0001028C EC 00 02 F2 */ fmuls f0, f0, f11 -/* 00003500 00010290 48 00 35 08 */ b .L_00006A08 -/* 00003504 00010294 C0 1C 05 5C */ lfs f0, .rodata+0x55C@l(r28) -/* 00003508 00010298 C1 39 05 54 */ lfs f9, .rodata+0x554@l(r25) -/* 0000350C 0001029C FC 00 E0 00 */ fcmpu cr0, f0, f28 -/* 00003510 000102A0 C1 58 05 58 */ lfs f10, .rodata+0x558@l(r24) -/* 00003514 000102A4 4C 62 03 82 */ cror un, eq, lt -/* 00003518 000102A8 41 83 35 48 */ bso .L_00006A60 -/* 0000351C 000102AC FD 80 00 34 */ frsqrte f12, f0 -/* 00003520 000102B0 ED AC 03 32 */ fmuls f13, f12, f12 -.L_00003524: -/* 00003524 000102B4 ED 6C 02 72 */ fmuls f11, f12, f9 -/* 00003528 000102B8 ED A0 53 7C */ fnmsubs f13, f0, f13, f10 -/* 0000352C 000102BC ED 8D 62 FA */ fmadds f12, f13, f11, f12 -/* 00003530 000102C0 ED AC 03 32 */ fmuls f13, f12, f12 -/* 00003534 000102C4 ED 6C 02 72 */ fmuls f11, f12, f9 -/* 00003538 000102C8 ED A0 53 7C */ fnmsubs f13, f0, f13, f10 -/* 0000353C 000102CC ED 8D 62 FA */ fmadds f12, f13, f11, f12 -/* 00003540 000102D0 ED 8C 00 32 */ fmuls f12, f12, f0 -/* 00003544 000102D4 48 00 35 4C */ b .L_00006A90 -/* 00003548 000102D8 C1 9C 05 5C */ lfs f12, .rodata+0x55C@l(r28) -.L_0000354C: -/* 0000354C 000102DC C0 01 00 A8 */ lfs f0, 0xa8(r1) -/* 00003550 000102E0 C1 A1 00 C0 */ lfs f13, 0xc0(r1) -/* 00003554 000102E4 EC 0C 00 32 */ fmuls f0, f12, f0 -/* 00003558 000102E8 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 0000355C 000102EC 4C 62 03 82 */ cror un, eq, lt -/* 00003560 000102F0 41 83 35 94 */ bso .L_00006AF4 -.L_00003564: -/* 00003564 000102F4 D0 01 00 C0 */ stfs f0, 0xc0(r1) -/* 00003568 000102F8 38 61 01 18 */ addi r3, r1, 0x118 -/* 0000356C 000102FC 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 -/* 00003570 00010300 C1 BF 00 08 */ lfs f13, 0x8(r31) -/* 00003574 00010304 C0 01 01 20 */ lfs f0, 0x120(r1) -/* 00003578 00010308 EC 00 68 28 */ fsubs f0, f0, f13 -/* 0000357C 0001030C FC 00 F8 00 */ fcmpu cr0, f0, f31 -/* 00003580 00010310 4C 62 03 82 */ cror un, eq, lt -/* 00003584 00010314 41 83 35 8C */ bso .L_00006B10 -/* 00003588 00010318 C0 1C 05 5C */ lfs f0, .rodata+0x55C@l(r28) -/* 0000358C 0001031C FC 20 00 90 */ fmr f1, f0 -/* 00003590 00010320 48 00 35 A4 */ b .L_00006B34 -.L_00003594: -/* 00003594 00010324 83 BD 00 00 */ lwz r29, 0x0(r29) -/* 00003598 00010328 48 00 33 14 */ b .L_000068AC -/* 0000359C 0001032C 3D 20 00 00 */ lis r9, .rodata+0x560@ha -/* 000035A0 00010330 C8 29 05 60 */ lfd f1, .rodata+0x560@l(r9) -/* 000035A4 00010334 80 01 01 84 */ lwz r0, 0x184(r1) -/* 000035A8 00010338 7C 08 03 A6 */ mtlr r0 -/* 000035AC 0001033C BA A1 01 2C */ lmw r21, 0x12c(r1) -/* 000035B0 00010340 E3 61 01 58 */ psq_l f27, 0x158(r1), 0, qr0 -/* 000035B4 00010344 E3 81 01 60 */ psq_l f28, 0x160(r1), 0, qr0 -/* 000035B8 00010348 E3 A1 01 68 */ psq_l f29, 0x168(r1), 0, qr0 -/* 000035BC 0001034C E3 C1 01 70 */ psq_l f30, 0x170(r1), 0, qr0 -/* 000035C0 00010350 E3 E1 01 78 */ psq_l f31, 0x178(r1), 0, qr0 -/* 000035C4 00010354 38 21 01 80 */ addi r1, r1, 0x180 -/* 000035C8 00010358 4E 80 00 20 */ blr -.endfn AdjustHeightAroundCar__11CameraMoverPC8bVector3P8bVector3T2 - -# .text:0x35CC | size: 0x304 -.fn DutchAroundCar__11CameraMoverP8bVector3T1, global -/* 000035CC 0001035C 94 21 FE A8 */ stwu r1, -0x158(r1) -/* 000035D0 00010360 7C 08 02 A6 */ mflr r0 -/* 000035D4 00010364 F2 C1 01 08 */ psq_st f22, 0x108(r1), 0, qr0 -/* 000035D8 00010368 F2 E1 01 10 */ psq_st f23, 0x110(r1), 0, qr0 -.L_000035DC: -/* 000035DC 0001036C F3 01 01 18 */ psq_st f24, 0x118(r1), 0, qr0 -.L_000035E0: -/* 000035E0 00010370 F3 21 01 20 */ psq_st f25, 0x120(r1), 0, qr0 -.L_000035E4: -/* 000035E4 00010374 F3 41 01 28 */ psq_st f26, 0x128(r1), 0, qr0 -/* 000035E8 00010378 F3 61 01 30 */ psq_st f27, 0x130(r1), 0, qr0 -/* 000035EC 0001037C F3 81 01 38 */ psq_st f28, 0x138(r1), 0, qr0 -/* 000035F0 00010380 F3 A1 01 40 */ psq_st f29, 0x140(r1), 0, qr0 -/* 000035F4 00010384 F3 C1 01 48 */ psq_st f30, 0x148(r1), 0, qr0 -/* 000035F8 00010388 F3 E1 01 50 */ psq_st f31, 0x150(r1), 0, qr0 -/* 000035FC 0001038C BE C1 00 E0 */ stmw r22, 0xe0(r1) -/* 00003600 00010390 90 01 01 5C */ stw r0, 0x15c(r1) -/* 00003604 00010394 3D 00 00 00 */ lis r8, _.tmp_1.9192@ha -.L_00003608: -/* 00003608 00010398 7C 9A 23 78 */ mr r26, r4 -/* 0000360C 0001039C 80 08 00 00 */ lwz r0, _.tmp_1.9192@l(r8) -/* 00003610 000103A0 7C BB 2B 78 */ mr r27, r5 -/* 00003614 000103A4 3D 40 00 00 */ lis r10, ret.9191@ha -/* 00003618 000103A8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000361C 000103AC 40 82 36 40 */ bne .L_00006C5C -/* 00003620 000103B0 3D 20 00 00 */ lis r9, .rodata+0x568@ha -/* 00003624 000103B4 39 6A 00 00 */ addi r11, r10, ret.9191@l -/* 00003628 000103B8 C0 09 05 68 */ lfs f0, .rodata+0x568@l(r9) -/* 0000362C 000103BC 38 00 00 01 */ li r0, 0x1 -/* 00003630 000103C0 D0 0B 00 08 */ stfs f0, 0x8(r11) -/* 00003634 000103C4 90 08 00 00 */ stw r0, _.tmp_1.9192@l(r8) -/* 00003638 000103C8 D0 0A 00 00 */ stfs f0, ret.9191@l(r10) -/* 0000363C 000103CC D0 0B 00 04 */ stfs f0, 0x4(r11) -/* 00003640 000103D0 3D 20 00 00 */ lis r9, .rodata+0x568@ha -/* 00003644 000103D4 3D 40 00 00 */ lis r10, ret.9191@ha -/* 00003648 000103D8 C0 09 05 68 */ lfs f0, .rodata+0x568@l(r9) -/* 0000364C 000103DC 39 6A 00 00 */ addi r11, r10, ret.9191@l -/* 00003650 000103E0 3D 20 00 00 */ lis r9, TheAvoidables@ha -/* 00003654 000103E4 3D 00 00 00 */ lis r8, .rodata+0x570@ha -.L_00003658: -/* 00003658 000103E8 D0 0A 00 00 */ stfs f0, ret.9191@l(r10) -/* 0000365C 000103EC 7D 77 5B 78 */ mr r23, r11 -/* 00003660 000103F0 80 E9 00 00 */ lwz r7, TheAvoidables@l(r9) -/* 00003664 000103F4 3D 40 00 00 */ lis r10, .rodata+0x56C@ha -.L_00003668: -/* 00003668 000103F8 D0 0B 00 08 */ stfs f0, 0x8(r11) -/* 0000366C 000103FC 3C C0 00 00 */ lis r6, .rodata+0x574@ha -/* 00003670 00010400 D0 0B 00 04 */ stfs f0, 0x4(r11) -/* 00003674 00010404 FF 80 00 90 */ fmr f28, f0 -/* 00003678 00010408 C2 CA 05 6C */ lfs f22, .rodata+0x56C@l(r10) -/* 0000367C 0001040C 3D 60 00 00 */ lis r11, .rodata+0x578@ha -.L_00003680: -/* 00003680 00010410 81 27 00 04 */ lwz r9, 0x4(r7) -/* 00003684 00010414 3D 40 00 00 */ lis r10, .rodata+0x57C@ha -/* 00003688 00010418 C2 E8 05 70 */ lfs f23, .rodata+0x570@l(r8) -/* 0000368C 0001041C 3C E0 00 00 */ lis r7, .rodata+0x580@ha -/* 00003690 00010420 80 09 00 00 */ lwz r0, 0x0(r9) -/* 00003694 00010424 3D 00 00 00 */ lis r8, .rodata+0x584@ha -.L_00003698: -/* 00003698 00010428 C3 06 05 74 */ lfs f24, .rodata+0x574@l(r6) -/* 0000369C 0001042C 3E C0 00 00 */ lis r22, TheAvoidables@ha -.L_000036A0: -/* 000036A0 00010430 C3 2B 05 78 */ lfs f25, .rodata+0x578@l(r11) -/* 000036A4 00010434 7C 1C 03 78 */ mr r28, r0 -/* 000036A8 00010438 C3 AA 05 7C */ lfs f29, .rodata+0x57C@l(r10) -/* 000036AC 0001043C 3B 01 00 10 */ addi r24, r1, 0x10 -/* 000036B0 00010440 C3 47 05 80 */ lfs f26, .rodata+0x580@l(r7) -/* 000036B4 00010444 3B 21 00 C0 */ addi r25, r1, 0xc0 -/* 000036B8 00010448 C3 68 05 84 */ lfs f27, .rodata+0x584@l(r8) -/* 000036BC 0001044C 90 01 00 08 */ stw r0, 0x8(r1) -/* 000036C0 00010450 81 36 00 00 */ lwz r9, TheAvoidables@l(r22) -/* 000036C4 00010454 39 60 00 01 */ li r11, 0x1 -/* 000036C8 00010458 80 09 00 04 */ lwz r0, 0x4(r9) -/* 000036CC 0001045C 7C 1C 00 00 */ cmpw r28, r0 -/* 000036D0 00010460 90 01 00 08 */ stw r0, 0x8(r1) -/* 000036D4 00010464 40 82 36 DC */ bne .L_00006DB0 -/* 000036D8 00010468 39 60 00 00 */ li r11, 0x0 -/* 000036DC 0001046C 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 000036E0 00010470 41 82 38 8C */ beq .L_00006F6C -/* 000036E4 00010474 83 FC 00 08 */ lwz r31, 0x8(r28) -/* 000036E8 00010478 7F 04 C3 78 */ mr r4, r24 -/* 000036EC 0001047C 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 000036F0 00010480 A8 69 00 10 */ lha r3, 0x10(r9) -/* 000036F4 00010484 80 09 00 14 */ lwz r0, 0x14(r9) -/* 000036F8 00010488 7C 7F 1A 14 */ add r3, r31, r3 -/* 000036FC 0001048C 7C 08 03 A6 */ mtlr r0 -/* 00003700 00010490 4E 80 00 21 */ blrl -/* 00003704 00010494 38 61 00 50 */ addi r3, r1, 0x50 -/* 00003708 00010498 7F 04 C3 78 */ mr r4, r24 -/* 0000370C 0001049C 48 00 00 01 */ bl bConvertFromBond__FR8bMatrix4RC8bMatrix4 -/* 00003710 000104A0 C1 9A 00 04 */ lfs f12, 0x4(r26) -/* 00003714 000104A4 C1 61 00 84 */ lfs f11, 0x84(r1) -.L_00003718: -/* 00003718 000104A8 C1 3A 00 00 */ lfs f9, 0x0(r26) -/* 0000371C 000104AC C0 01 00 80 */ lfs f0, 0x80(r1) -/* 00003720 000104B0 ED 6B 60 28 */ fsubs f11, f11, f12 -/* 00003724 000104B4 C1 5A 00 08 */ lfs f10, 0x8(r26) -/* 00003728 000104B8 ED 8B 02 F2 */ fmuls f12, f11, f11 -/* 0000372C 000104BC C1 A1 00 88 */ lfs f13, 0x88(r1) -/* 00003730 000104C0 EC 00 48 28 */ fsubs f0, f0, f9 -/* 00003734 000104C4 ED 80 60 3A */ fmadds f12, f0, f0, f12 -/* 00003738 000104C8 D0 01 00 90 */ stfs f0, 0x90(r1) -/* 0000373C 000104CC ED AD 50 28 */ fsubs f13, f13, f10 -/* 00003740 000104D0 D1 61 00 94 */ stfs f11, 0x94(r1) -/* 00003744 000104D4 EF ED 63 7A */ fmadds f31, f13, f13, f12 -/* 00003748 000104D8 D1 A1 00 98 */ stfs f13, 0x98(r1) -/* 0000374C 000104DC FC 1F B0 00 */ fcmpu cr0, f31, f22 -/* 00003750 000104E0 4C 62 03 82 */ cror un, eq, lt -/* 00003754 000104E4 41 83 38 84 */ bso .L_00006FD8 -/* 00003758 000104E8 FC 1F B8 00 */ fcmpu cr0, f31, f23 -/* 0000375C 000104EC 4C 62 0B 82 */ cror un, eq, gt -/* 00003760 000104F0 41 83 38 84 */ bso .L_00006FE4 -/* 00003764 000104F4 3B C1 00 90 */ addi r30, r1, 0x90 -.L_00003768: -/* 00003768 000104F8 3B A1 00 A0 */ addi r29, r1, 0xa0 -/* 0000376C 000104FC 7F C4 F3 78 */ mr r4, r30 -/* 00003770 00010500 7F C3 F3 78 */ mr r3, r30 -/* 00003774 00010504 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -/* 00003778 00010508 7F A3 EB 78 */ mr r3, r29 -/* 0000377C 0001050C 7F 64 DB 78 */ mr r4, r27 -/* 00003780 00010510 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -/* 00003784 00010514 C1 81 00 A4 */ lfs f12, 0xa4(r1) -/* 00003788 00010518 C1 61 00 94 */ lfs f11, 0x94(r1) -/* 0000378C 0001051C C1 A1 00 90 */ lfs f13, 0x90(r1) -.L_00003790: -/* 00003790 00010520 ED 6B 03 32 */ fmuls f11, f11, f12 -/* 00003794 00010524 C1 41 00 A0 */ lfs f10, 0xa0(r1) -/* 00003798 00010528 C0 01 00 98 */ lfs f0, 0x98(r1) -/* 0000379C 0001052C C1 81 00 A8 */ lfs f12, 0xa8(r1) -/* 000037A0 00010530 ED AD 5A BA */ fmadds f13, f13, f10, f11 -/* 000037A4 00010534 EC 00 6B 3A */ fmadds f0, f0, f12, f13 -/* 000037A8 00010538 FC 00 C0 00 */ fcmpu cr0, f0, f24 -/* 000037AC 0001053C 4C 62 03 82 */ cror un, eq, lt -/* 000037B0 00010540 41 83 38 84 */ bso .L_00007034 -/* 000037B4 00010544 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 000037B8 00010548 38 81 00 B0 */ addi r4, r1, 0xb0 -/* 000037BC 0001054C ED B9 F8 24 */ fdivs f13, f25, f31 -/* 000037C0 00010550 A8 69 00 18 */ lha r3, 0x18(r9) -/* 000037C4 00010554 FD AD E3 6E */ fsel f13, f13, f13, f28 -/* 000037C8 00010558 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 000037CC 0001055C 7C 7F 1A 14 */ add r3, r31, r3 -/* 000037D0 00010560 7C 08 03 A6 */ mtlr r0 -/* 000037D4 00010564 EC 1D 68 28 */ fsubs f0, f29, f13 -.L_000037D8: -/* 000037D8 00010568 FF C0 EB 6E */ fsel f30, f0, f13, f29 -/* 000037DC 0001056C 4E 80 00 21 */ blrl -/* 000037E0 00010570 C0 01 00 B0 */ lfs f0, 0xb0(r1) -/* 000037E4 00010574 7F 63 DB 78 */ mr r3, r27 -/* 000037E8 00010578 C1 A1 00 B8 */ lfs f13, 0xb8(r1) -/* 000037EC 0001057C 7F 24 CB 78 */ mr r4, r25 -/* 000037F0 00010580 C1 81 00 B4 */ lfs f12, 0xb4(r1) -/* 000037F4 00010584 FC 00 00 50 */ fneg f0, f0 -/* 000037F8 00010588 D1 A1 00 C0 */ stfs f13, 0xc0(r1) -/* 000037FC 0001058C D0 01 00 C4 */ stfs f0, 0xc4(r1) -/* 00003800 00010590 D1 81 00 C8 */ stfs f12, 0xc8(r1) -/* 00003804 00010594 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 -/* 00003808 00010598 EC 21 D0 28 */ fsubs f1, f1, f26 -/* 0000380C 0001059C 7F 24 CB 78 */ mr r4, r25 -/* 00003810 000105A0 EC 21 06 F2 */ fmuls f1, f1, f27 -/* 00003814 000105A4 38 61 00 D0 */ addi r3, r1, 0xd0 -/* 00003818 000105A8 FC 21 E0 6E */ fsel f1, f1, f1, f28 -/* 0000381C 000105AC EC 1D 08 28 */ fsubs f0, f29, f1 -/* 00003820 000105B0 FF E0 E8 6E */ fsel f31, f0, f1, f29 -/* 00003824 000105B4 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -/* 00003828 000105B8 7F A3 EB 78 */ mr r3, r29 -.L_0000382C: -/* 0000382C 000105BC 7F 64 DB 78 */ mr r4, r27 -/* 00003830 000105C0 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -/* 00003834 000105C4 C1 A1 00 D4 */ lfs f13, 0xd4(r1) -/* 00003838 000105C8 FC 20 E0 90 */ fmr f1, f28 -.L_0000383C: -/* 0000383C 000105CC C1 81 00 A4 */ lfs f12, 0xa4(r1) -/* 00003840 000105D0 C0 01 00 A0 */ lfs f0, 0xa0(r1) -.L_00003844: -/* 00003844 000105D4 ED 8C 03 72 */ fmuls f12, f12, f13 -/* 00003848 000105D8 C1 41 00 D0 */ lfs f10, 0xd0(r1) -/* 0000384C 000105DC C1 61 00 A8 */ lfs f11, 0xa8(r1) -/* 00003850 000105E0 C1 A1 00 D8 */ lfs f13, 0xd8(r1) -/* 00003854 000105E4 EC 00 62 BA */ fmadds f0, f0, f10, f12 -/* 00003858 000105E8 EC 0B 03 7A */ fmadds f0, f11, f13, f0 -/* 0000385C 000105EC FC 00 08 00 */ fcmpu cr0, f0, f1 -/* 00003860 000105F0 4C 62 0B 82 */ cror un, eq, gt -/* 00003864 000105F4 41 83 38 6C */ bso .L_000070D0 -.L_00003868: -/* 00003868 000105F8 FC 20 00 50 */ fneg f1, f0 -/* 0000386C 000105FC EC 3F 08 2A */ fadds f1, f31, f1 -.L_00003870: -/* 00003870 00010600 7F C5 F3 78 */ mr r5, r30 -/* 00003874 00010604 EC 3E 00 72 */ fmuls f1, f30, f1 -/* 00003878 00010608 7E E3 BB 78 */ mr r3, r23 -/* 0000387C 0001060C 7E E4 BB 78 */ mr r4, r23 -/* 00003880 00010610 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -/* 00003884 00010614 83 9C 00 00 */ lwz r28, 0x0(r28) -/* 00003888 00010618 48 00 36 C0 */ b .L_00006F48 -/* 0000388C 0001061C 3C 60 00 00 */ lis r3, ret.9191@ha -/* 00003890 00010620 38 63 00 00 */ addi r3, r3, ret.9191@l -/* 00003894 00010624 80 01 01 5C */ lwz r0, 0x15c(r1) -.L_00003898: -/* 00003898 00010628 7C 08 03 A6 */ mtlr r0 -/* 0000389C 0001062C BA C1 00 E0 */ lmw r22, 0xe0(r1) -/* 000038A0 00010630 E2 C1 01 08 */ psq_l f22, 0x108(r1), 0, qr0 -/* 000038A4 00010634 E2 E1 01 10 */ psq_l f23, 0x110(r1), 0, qr0 -/* 000038A8 00010638 E3 01 01 18 */ psq_l f24, 0x118(r1), 0, qr0 -/* 000038AC 0001063C E3 21 01 20 */ psq_l f25, 0x120(r1), 0, qr0 -/* 000038B0 00010640 E3 41 01 28 */ psq_l f26, 0x128(r1), 0, qr0 -/* 000038B4 00010644 E3 61 01 30 */ psq_l f27, 0x130(r1), 0, qr0 -/* 000038B8 00010648 E3 81 01 38 */ psq_l f28, 0x138(r1), 0, qr0 -/* 000038BC 0001064C E3 A1 01 40 */ psq_l f29, 0x140(r1), 0, qr0 -/* 000038C0 00010650 E3 C1 01 48 */ psq_l f30, 0x148(r1), 0, qr0 -/* 000038C4 00010654 E3 E1 01 50 */ psq_l f31, 0x150(r1), 0, qr0 -/* 000038C8 00010658 38 21 01 58 */ addi r1, r1, 0x158 -/* 000038CC 0001065C 4E 80 00 20 */ blr -.endfn DutchAroundCar__11CameraMoverP8bVector3T1 - -# .text:0x38D0 | size: 0x220 -.fn MinGapCars__11CameraMoverP8bMatrix4P8bVector3T2, global -/* 000038D0 00010660 94 21 FF 78 */ stwu r1, -0x88(r1) -/* 000038D4 00010664 7C 08 02 A6 */ mflr r0 -/* 000038D8 00010668 F3 E1 00 80 */ psq_st f31, 0x80(r1), 0, qr0 -/* 000038DC 0001066C BF 01 00 60 */ stmw r24, 0x60(r1) -/* 000038E0 00010670 90 01 00 8C */ stw r0, 0x8c(r1) -/* 000038E4 00010674 7C 7F 1B 78 */ mr r31, r3 -/* 000038E8 00010678 7C 9B 23 78 */ mr r27, r4 -/* 000038EC 0001067C 7C BA 2B 78 */ mr r26, r5 -/* 000038F0 00010680 7C DD 33 78 */ mr r29, r6 -/* 000038F4 00010684 38 61 00 08 */ addi r3, r1, 0x8 -/* 000038F8 00010688 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 -/* 000038FC 0001068C 3B 20 00 00 */ li r25, 0x0 -/* 00003900 00010690 C3 E1 00 40 */ lfs f31, 0x40(r1) -/* 00003904 00010694 3B C1 00 38 */ addi r30, r1, 0x38 -/* 00003908 00010698 3B 80 00 00 */ li r28, 0x0 -/* 0000390C 0001069C 3B 01 00 48 */ addi r24, r1, 0x48 -/* 00003910 000106A0 48 00 39 40 */ b .L_00007250 -.L_00003914: -/* 00003914 000106A4 C0 1E 00 08 */ lfs f0, 0x8(r30) -/* 00003918 000106A8 3B 20 00 01 */ li r25, 0x1 -/* 0000391C 000106AC 3B 9C 00 01 */ addi r28, r28, 0x1 -/* 00003920 000106B0 7F E3 FB 78 */ mr r3, r31 -/* 00003924 000106B4 7F C4 F3 78 */ mr r4, r30 -/* 00003928 000106B8 FC 00 08 2A */ fadd f0, f0, f1 -/* 0000392C 000106BC 7F 45 D3 78 */ mr r5, r26 -/* 00003930 000106C0 FC 00 00 18 */ frsp f0, f0 -/* 00003934 000106C4 7F A6 EB 78 */ mr r6, r29 -/* 00003938 000106C8 D0 1E 00 08 */ stfs f0, 0x8(r30) -/* 0000393C 000106CC 48 00 32 AD */ bl .L_00006BE8 -/* 00003940 000106D0 7F E3 FB 78 */ mr r3, r31 -/* 00003944 000106D4 7F C4 F3 78 */ mr r4, r30 -.L_00003948: -/* 00003948 000106D8 7F 45 D3 78 */ mr r5, r26 -/* 0000394C 000106DC 7F A6 EB 78 */ mr r6, r29 -/* 00003950 000106E0 48 00 32 AD */ bl .L_00006BFC -.L_00003954: -/* 00003954 000106E4 2C 1C 00 0F */ cmpwi r28, 0xf -/* 00003958 000106E8 41 81 39 6C */ bgt .L_000072C4 -.L_0000395C: -/* 0000395C 000106EC 3D 20 00 00 */ lis r9, .rodata+0x588@ha -.L_00003960: -/* 00003960 000106F0 C8 09 05 88 */ lfd f0, .rodata+0x588@l(r9) -/* 00003964 000106F4 FC 01 00 00 */ fcmpu cr0, f1, f0 -.L_00003968: -/* 00003968 000106F8 41 81 39 14 */ bgt .L_0000727C -/* 0000396C 000106FC C1 3B 00 00 */ lfs f9, 0x0(r27) -/* 00003970 00010700 3D 40 00 00 */ lis r10, .rodata+0x590@ha -/* 00003974 00010704 C1 5B 00 08 */ lfs f10, 0x8(r27) -/* 00003978 00010708 3D 60 00 00 */ lis r11, .rodata+0x594@ha -.L_0000397C: -/* 0000397C 0001070C C1 9B 00 04 */ lfs f12, 0x4(r27) -/* 00003980 00010710 3D 20 00 00 */ lis r9, .rodata+0x598@ha -/* 00003984 00010714 C1 BF 00 70 */ lfs f13, 0x70(r31) -/* 00003988 00010718 C0 1F 00 74 */ lfs f0, 0x74(r31) -/* 0000398C 0001071C C1 7F 00 78 */ lfs f11, 0x78(r31) -/* 00003990 00010720 D1 5F 00 78 */ stfs f10, 0x78(r31) -/* 00003994 00010724 EC 00 03 32 */ fmuls f0, f0, f12 -/* 00003998 00010728 D1 3F 00 70 */ stfs f9, 0x70(r31) -/* 0000399C 0001072C ED AD 02 7A */ fmadds f13, f13, f9, f0 -/* 000039A0 00010730 D1 9F 00 74 */ stfs f12, 0x74(r31) -/* 000039A4 00010734 EC EB 6A BA */ fmadds f7, f11, f10, f13 -/* 000039A8 00010738 C1 9E 00 08 */ lfs f12, 0x8(r30) -/* 000039AC 0001073C C0 1D 00 04 */ lfs f0, 0x4(r29) -/* 000039B0 00010740 ED 4C F8 28 */ fsubs f10, f12, f31 -/* 000039B4 00010744 C1 BD 00 00 */ lfs f13, 0x0(r29) -/* 000039B8 00010748 EC 00 00 32 */ fmuls f0, f0, f0 -.L_000039BC: -/* 000039BC 0001074C C1 8A 05 90 */ lfs f12, .rodata+0x590@l(r10) -/* 000039C0 00010750 ED AD 03 7A */ fmadds f13, f13, f13, f0 -/* 000039C4 00010754 C1 2B 05 94 */ lfs f9, .rodata+0x594@l(r11) -/* 000039C8 00010758 C1 09 05 98 */ lfs f8, .rodata+0x598@l(r9) -.L_000039CC: -/* 000039CC 0001075C FC 0D 60 00 */ fcmpu cr0, f13, f12 -/* 000039D0 00010760 4C 62 03 82 */ cror un, eq, lt -/* 000039D4 00010764 41 83 3A 04 */ bso .L_000073D8 -/* 000039D8 00010768 FD 80 68 34 */ frsqrte f12, f13 -.L_000039DC: -/* 000039DC 0001076C EC 0C 03 32 */ fmuls f0, f12, f12 -/* 000039E0 00010770 ED 6C 02 72 */ fmuls f11, f12, f9 -/* 000039E4 00010774 EC 0D 40 3C */ fnmsubs f0, f13, f0, f8 -/* 000039E8 00010778 ED 80 62 FA */ fmadds f12, f0, f11, f12 -/* 000039EC 0001077C EC 0C 03 32 */ fmuls f0, f12, f12 -/* 000039F0 00010780 ED 6C 02 72 */ fmuls f11, f12, f9 -/* 000039F4 00010784 EC 0D 40 3C */ fnmsubs f0, f13, f0, f8 -/* 000039F8 00010788 ED 80 62 FA */ fmadds f12, f0, f11, f12 -/* 000039FC 0001078C ED 8C 03 72 */ fmuls f12, f12, f13 -/* 00003A00 00010790 48 00 3A 0C */ b .L_0000740C -/* 00003A04 00010794 3D 20 00 00 */ lis r9, .rodata+0x59C@ha -/* 00003A08 00010798 C1 89 05 9C */ lfs f12, .rodata+0x59C@l(r9) -/* 00003A0C 0001079C 3D 20 00 00 */ lis r9, .rodata+0x598@ha -/* 00003A10 000107A0 C0 09 05 98 */ lfs f0, .rodata+0x598@l(r9) -/* 00003A14 000107A4 FC 0C 00 00 */ fcmpu cr0, f12, f0 -.L_00003A18: -/* 00003A18 000107A8 4C 62 0B 82 */ cror un, eq, gt -/* 00003A1C 000107AC 41 83 3A 48 */ bso .L_00007464 -/* 00003A20 000107B0 3D 20 00 00 */ lis r9, .rodata+0x5A0@ha -/* 00003A24 000107B4 C0 09 05 A0 */ lfs f0, .rodata+0x5A0@l(r9) -/* 00003A28 000107B8 FC 07 00 00 */ fcmpu cr0, f7, f0 -/* 00003A2C 000107BC 4C 62 03 82 */ cror un, eq, lt -/* 00003A30 000107C0 41 83 3A 48 */ bso .L_00007478 -/* 00003A34 000107C4 C0 1F 00 6C */ lfs f0, 0x6c(r31) -/* 00003A38 000107C8 FC 0A 00 00 */ fcmpu cr0, f10, f0 -/* 00003A3C 000107CC 4C 62 0B 82 */ cror un, eq, gt -/* 00003A40 000107D0 41 83 3A 48 */ bso .L_00007488 -/* 00003A44 000107D4 FD 40 00 90 */ fmr f10, f0 -.L_00003A48: -/* 00003A48 000107D8 C1 9F 00 68 */ lfs f12, 0x68(r31) -/* 00003A4C 000107DC 3D 20 00 00 */ lis r9, .rodata+0x594@ha -/* 00003A50 000107E0 C1 A9 05 94 */ lfs f13, .rodata+0x594@l(r9) -/* 00003A54 000107E4 7F 03 C3 78 */ mr r3, r24 -/* 00003A58 000107E8 EC 0C 50 2A */ fadds f0, f12, f10 -/* 00003A5C 000107EC D1 5F 00 6C */ stfs f10, 0x6c(r31) -/* 00003A60 000107F0 EC 00 03 72 */ fmuls f0, f0, f13 -/* 00003A64 000107F4 7F 64 DB 78 */ mr r4, r27 -.L_00003A68: -/* 00003A68 000107F8 ED AA 00 28 */ fsubs f13, f10, f0 -/* 00003A6C 000107FC 7F 45 D3 78 */ mr r5, r26 -/* 00003A70 00010800 ED 8C 68 2A */ fadds f12, f12, f13 -/* 00003A74 00010804 EC 1F 00 2A */ fadds f0, f31, f0 -/* 00003A78 00010808 D1 9F 00 68 */ stfs f12, 0x68(r31) -/* 00003A7C 0001080C D0 1E 00 08 */ stfs f0, 0x8(r30) -/* 00003A80 00010810 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 -/* 00003A84 00010814 3D 20 00 00 */ lis r9, .rodata+0x59C@ha -/* 00003A88 00010818 C1 81 00 50 */ lfs f12, 0x50(r1) -/* 00003A8C 0001081C C0 09 05 9C */ lfs f0, .rodata+0x59C@l(r9) -/* 00003A90 00010820 FC 0C 00 00 */ fcmpu cr0, f12, f0 -/* 00003A94 00010824 4C 62 03 82 */ cror un, eq, lt -/* 00003A98 00010828 41 83 3A D0 */ bso .L_00007568 -/* 00003A9C 0001082C C1 A1 00 48 */ lfs f13, 0x48(r1) -.L_00003AA0: -/* 00003AA0 00010830 7F E3 FB 78 */ mr r3, r31 -/* 00003AA4 00010834 C0 01 00 4C */ lfs f0, 0x4c(r1) -/* 00003AA8 00010838 7F 64 DB 78 */ mr r4, r27 -/* 00003AAC 0001083C ED AD 60 24 */ fdivs f13, f13, f12 -.L_00003AB0: -/* 00003AB0 00010840 7F C5 F3 78 */ mr r5, r30 -/* 00003AB4 00010844 7F 46 D3 78 */ mr r6, r26 -/* 00003AB8 00010848 38 E1 00 58 */ addi r7, r1, 0x58 -/* 00003ABC 0001084C EC 00 60 24 */ fdivs f0, f0, f12 -.L_00003AC0: -/* 00003AC0 00010850 D1 A1 00 58 */ stfs f13, 0x58(r1) -/* 00003AC4 00010854 D0 01 00 5C */ stfs f0, 0x5c(r1) -/* 00003AC8 00010858 48 00 31 C1 */ bl .L_00006C88 -/* 00003ACC 0001085C 48 00 3A D4 */ b .L_000075A0 -/* 00003AD0 00010860 3B 20 00 00 */ li r25, 0x0 -/* 00003AD4 00010864 7F 23 CB 78 */ mr r3, r25 -/* 00003AD8 00010868 80 01 00 8C */ lwz r0, 0x8c(r1) -/* 00003ADC 0001086C 7C 08 03 A6 */ mtlr r0 -/* 00003AE0 00010870 BB 01 00 60 */ lmw r24, 0x60(r1) -/* 00003AE4 00010874 E3 E1 00 80 */ psq_l f31, 0x80(r1), 0, qr0 -/* 00003AE8 00010878 38 21 00 88 */ addi r1, r1, 0x88 -/* 00003AEC 0001087C 4E 80 00 20 */ blr -.endfn MinGapCars__11CameraMoverP8bMatrix4P8bVector3T2 - -# .text:0x3AF0 | size: 0xD4 -.fn MinGapTopology__11CameraMoverP8bMatrix4P8bVector3, global -/* 00003AF0 00010880 94 21 FF 80 */ stwu r1, -0x80(r1) -/* 00003AF4 00010884 7C 08 02 A6 */ mflr r0 -/* 00003AF8 00010888 BF A1 00 74 */ stmw r29, 0x74(r1) -/* 00003AFC 0001088C 90 01 00 84 */ stw r0, 0x84(r1) -/* 00003B00 00010890 7C 9F 23 78 */ mr r31, r4 -/* 00003B04 00010894 7C 7D 1B 78 */ mr r29, r3 -.L_00003B08: -/* 00003B08 00010898 7C BE 2B 78 */ mr r30, r5 -/* 00003B0C 0001089C 38 61 00 08 */ addi r3, r1, 0x8 -/* 00003B10 000108A0 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 -/* 00003B14 000108A4 3D 20 00 00 */ lis r9, .rodata+0x5A4@ha -/* 00003B18 000108A8 C1 BE 00 08 */ lfs f13, 0x8(r30) -/* 00003B1C 000108AC C0 09 05 A4 */ lfs f0, .rodata+0x5A4@l(r9) -/* 00003B20 000108B0 C1 7F 00 38 */ lfs f11, 0x38(r31) -/* 00003B24 000108B4 ED AD 00 2A */ fadds f13, f13, f0 -/* 00003B28 000108B8 C1 9F 00 30 */ lfs f12, 0x30(r31) -/* 00003B2C 000108BC C0 1F 00 34 */ lfs f0, 0x34(r31) -/* 00003B30 000108C0 FC 0B 68 00 */ fcmpu cr0, f11, f13 -/* 00003B34 000108C4 D1 81 00 48 */ stfs f12, 0x48(r1) -/* 00003B38 000108C8 D0 01 00 4C */ stfs f0, 0x4c(r1) -/* 00003B3C 000108CC D1 61 00 50 */ stfs f11, 0x50(r1) -.L_00003B40: -/* 00003B40 000108D0 4C 62 0B 82 */ cror un, eq, gt -/* 00003B44 000108D4 41 83 3B 4C */ bso .L_00007690 -/* 00003B48 000108D8 D1 A1 00 50 */ stfs f13, 0x50(r1) -/* 00003B4C 000108DC 38 61 00 58 */ addi r3, r1, 0x58 -/* 00003B50 000108E0 7F E4 FB 78 */ mr r4, r31 -/* 00003B54 000108E4 7F C5 F3 78 */ mr r5, r30 -/* 00003B58 000108E8 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 -/* 00003B5C 000108EC 3D 20 00 00 */ lis r9, .rodata+0x5A8@ha -/* 00003B60 000108F0 C1 81 00 60 */ lfs f12, 0x60(r1) -/* 00003B64 000108F4 C0 09 05 A8 */ lfs f0, .rodata+0x5A8@l(r9) -/* 00003B68 000108F8 FC 0C 00 00 */ fcmpu cr0, f12, f0 -/* 00003B6C 000108FC 4C 62 03 82 */ cror un, eq, lt -.L_00003B70: -/* 00003B70 00010900 41 83 3B AC */ bso .L_0000771C -/* 00003B74 00010904 C1 A1 00 58 */ lfs f13, 0x58(r1) -/* 00003B78 00010908 7F A3 EB 78 */ mr r3, r29 -/* 00003B7C 0001090C C0 01 00 5C */ lfs f0, 0x5c(r1) -/* 00003B80 00010910 7F E4 FB 78 */ mr r4, r31 -/* 00003B84 00010914 ED AD 60 24 */ fdivs f13, f13, f12 -/* 00003B88 00010918 7F C6 F3 78 */ mr r6, r30 -/* 00003B8C 0001091C 38 A1 00 48 */ addi r5, r1, 0x48 -/* 00003B90 00010920 38 E1 00 68 */ addi r7, r1, 0x68 -/* 00003B94 00010924 EC 00 60 24 */ fdivs f0, f0, f12 -/* 00003B98 00010928 D1 A1 00 68 */ stfs f13, 0x68(r1) -/* 00003B9C 0001092C D0 01 00 6C */ stfs f0, 0x6c(r1) -/* 00003BA0 00010930 48 00 31 C1 */ bl .L_00006D60 -/* 00003BA4 00010934 38 60 00 01 */ li r3, 0x1 -.L_00003BA8: -/* 00003BA8 00010938 48 00 3B B0 */ b .L_00007758 -/* 00003BAC 0001093C 38 60 00 00 */ li r3, 0x0 -/* 00003BB0 00010940 80 01 00 84 */ lwz r0, 0x84(r1) -/* 00003BB4 00010944 7C 08 03 A6 */ mtlr r0 -/* 00003BB8 00010948 BB A1 00 74 */ lmw r29, 0x74(r1) -/* 00003BBC 0001094C 38 21 00 80 */ addi r1, r1, 0x80 -/* 00003BC0 00010950 4E 80 00 20 */ blr -.endfn MinGapTopology__11CameraMoverP8bMatrix4P8bVector3 - -# .text:0x3BC4 | size: 0xAC -.fn FovCubicInit__11CameraMoverP8tCubic1D, global -/* 00003BC4 00010954 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00003BC8 00010958 81 43 00 1C */ lwz r10, 0x1c(r3) -/* 00003BCC 0001095C 3C E0 43 30 */ lis r7, 0x4330 -/* 00003BD0 00010960 7D 68 5B 78 */ mr r8, r11 -/* 00003BD4 00010964 A0 0A 00 C4 */ lhz r0, 0xc4(r10) -/* 00003BD8 00010968 7D 66 5B 78 */ mr r6, r11 -/* 00003BDC 0001096C A0 AA 02 6C */ lhz r5, 0x26c(r10) -.L_00003BE0: -/* 00003BE0 00010970 3D 20 00 00 */ lis r9, .rodata+0x5B0@ha -/* 00003BE4 00010974 90 01 00 0C */ stw r0, 0xc(r1) -/* 00003BE8 00010978 3D 40 00 00 */ lis r10, .rodata+0x5B8@ha -/* 00003BEC 0001097C C9 69 05 B0 */ lfd f11, .rodata+0x5B0@l(r9) -/* 00003BF0 00010980 90 E1 00 08 */ stw r7, 0x8(r1) -/* 00003BF4 00010984 C1 2A 05 B8 */ lfs f9, .rodata+0x5B8@l(r10) -/* 00003BF8 00010988 C9 81 00 08 */ lfd f12, 0x8(r1) -/* 00003BFC 0001098C 90 A1 00 0C */ stw r5, 0xc(r1) -/* 00003C00 00010990 FD 8C 58 28 */ fsub f12, f12, f11 -/* 00003C04 00010994 C1 04 00 24 */ lfs f8, 0x24(r4) -/* 00003C08 00010998 90 E1 00 08 */ stw r7, 0x8(r1) -/* 00003C0C 0001099C FD 80 60 18 */ frsp f12, f12 -/* 00003C10 000109A0 C1 44 00 08 */ lfs f10, 0x8(r4) -/* 00003C14 000109A4 C8 01 00 08 */ lfd f0, 0x8(r1) -/* 00003C18 000109A8 90 A1 00 0C */ stw r5, 0xc(r1) -.L_00003C1C: -/* 00003C1C 000109AC FC 00 58 28 */ fsub f0, f0, f11 -/* 00003C20 000109B0 90 E1 00 08 */ stw r7, 0x8(r1) -/* 00003C24 000109B4 FC 00 00 18 */ frsp f0, f0 -/* 00003C28 000109B8 EC 00 62 7A */ fmadds f0, f0, f9, f12 -/* 00003C2C 000109BC C9 A1 00 08 */ lfd f13, 0x8(r1) -/* 00003C30 000109C0 FC 00 50 00 */ fcmpu cr0, f0, f10 -/* 00003C34 000109C4 D0 04 00 00 */ stfs f0, 0x0(r4) -/* 00003C38 000109C8 FD AD 58 28 */ fsub f13, f13, f11 -/* 00003C3C 000109CC FD A0 68 18 */ frsp f13, f13 -/* 00003C40 000109D0 ED AD 02 32 */ fmuls f13, f13, f8 -/* 00003C44 000109D4 41 82 3C 50 */ beq .L_00007894 -.L_00003C48: -/* 00003C48 000109D8 38 00 00 02 */ li r0, 0x2 -/* 00003C4C 000109DC B0 04 00 28 */ sth r0, 0x28(r4) -/* 00003C50 000109E0 C0 04 00 0C */ lfs f0, 0xc(r4) -/* 00003C54 000109E4 D1 A4 00 04 */ stfs f13, 0x4(r4) -/* 00003C58 000109E8 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 00003C5C 000109EC 41 82 3C 68 */ beq .L_000078C4 -/* 00003C60 000109F0 38 00 00 02 */ li r0, 0x2 -/* 00003C64 000109F4 B0 04 00 28 */ sth r0, 0x28(r4) -/* 00003C68 000109F8 38 21 00 10 */ addi r1, r1, 0x10 -.L_00003C6C: -/* 00003C6C 000109FC 4E 80 00 20 */ blr -.endfn FovCubicInit__11CameraMoverP8tCubic1D - -# .text:0x3C70 | size: 0x124 -.fn EyeCubicInit__11CameraMoverP8tCubic3DP8bMatrix4P8bVector3, global -/* 00003C70 00010A00 94 21 FF B0 */ stwu r1, -0x50(r1) -.L_00003C74: -/* 00003C74 00010A04 7C 08 02 A6 */ mflr r0 -/* 00003C78 00010A08 7D 80 00 26 */ mfcr r12 -/* 00003C7C 00010A0C BF 81 00 40 */ stmw r28, 0x40(r1) -/* 00003C80 00010A10 90 01 00 54 */ stw r0, 0x54(r1) -/* 00003C84 00010A14 91 81 00 3C */ stw r12, 0x3c(r1) -/* 00003C88 00010A18 7C 7C 1B 78 */ mr r28, r3 -/* 00003C8C 00010A1C 3D 20 00 00 */ lis r9, .rodata+0x5BC@ha -/* 00003C90 00010A20 81 7C 00 1C */ lwz r11, 0x1c(r28) -/* 00003C94 00010A24 7C BE 2B 78 */ mr r30, r5 -.L_00003C98: -/* 00003C98 00010A28 7C 9D 23 78 */ mr r29, r4 -/* 00003C9C 00010A2C C0 29 05 BC */ lfs f1, .rodata+0x5BC@l(r9) -/* 00003CA0 00010A30 2E 1E 00 00 */ cmpwi cr4, r30, 0x0 -/* 00003CA4 00010A34 7C DF 33 78 */ mr r31, r6 -/* 00003CA8 00010A38 38 AB 01 E8 */ addi r5, r11, 0x1e8 -/* 00003CAC 00010A3C 38 61 00 08 */ addi r3, r1, 0x8 -/* 00003CB0 00010A40 38 8B 00 40 */ addi r4, r11, 0x40 -/* 00003CB4 00010A44 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -.L_00003CB8: -/* 00003CB8 00010A48 41 92 3C CC */ beq cr4, .L_00007984 -/* 00003CBC 00010A4C 38 61 00 08 */ addi r3, r1, 0x8 -/* 00003CC0 00010A50 7F C4 F3 78 */ mr r4, r30 -.L_00003CC4: -/* 00003CC4 00010A54 7C 65 1B 78 */ mr r5, r3 -/* 00003CC8 00010A58 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 -/* 00003CCC 00010A5C 7F A3 EB 78 */ mr r3, r29 -/* 00003CD0 00010A60 38 81 00 08 */ addi r4, r1, 0x8 -/* 00003CD4 00010A64 48 00 00 01 */ bl SetVal__8tCubic3DPC8bVector3 -/* 00003CD8 00010A68 81 3C 00 1C */ lwz r9, 0x1c(r28) -/* 00003CDC 00010A6C 2C 1F 00 00 */ cmpwi r31, 0x0 -/* 00003CE0 00010A70 C1 49 01 F0 */ lfs f10, 0x1f0(r9) -/* 00003CE4 00010A74 C1 69 01 E8 */ lfs f11, 0x1e8(r9) -/* 00003CE8 00010A78 C1 29 01 EC */ lfs f9, 0x1ec(r9) -/* 00003CEC 00010A7C D1 61 00 18 */ stfs f11, 0x18(r1) -/* 00003CF0 00010A80 D1 21 00 1C */ stfs f9, 0x1c(r1) -/* 00003CF4 00010A84 D1 41 00 20 */ stfs f10, 0x20(r1) -/* 00003CF8 00010A88 41 82 3D 20 */ beq .L_00007A18 -/* 00003CFC 00010A8C C0 1F 00 08 */ lfs f0, 0x8(r31) -/* 00003D00 00010A90 C1 BF 00 00 */ lfs f13, 0x0(r31) -/* 00003D04 00010A94 C1 9F 00 04 */ lfs f12, 0x4(r31) -/* 00003D08 00010A98 EC 0A 00 28 */ fsubs f0, f10, f0 -/* 00003D0C 00010A9C ED AB 68 28 */ fsubs f13, f11, f13 -/* 00003D10 00010AA0 D0 01 00 20 */ stfs f0, 0x20(r1) -/* 00003D14 00010AA4 ED 89 60 28 */ fsubs f12, f9, f12 -/* 00003D18 00010AA8 D1 A1 00 18 */ stfs f13, 0x18(r1) -/* 00003D1C 00010AAC D1 81 00 1C */ stfs f12, 0x1c(r1) -/* 00003D20 00010AB0 C1 7D 00 24 */ lfs f11, 0x24(r29) -/* 00003D24 00010AB4 3D 20 00 00 */ lis r9, .rodata+0x5C0@ha -/* 00003D28 00010AB8 C1 81 00 18 */ lfs f12, 0x18(r1) -/* 00003D2C 00010ABC 3B E1 00 28 */ addi r31, r1, 0x28 -/* 00003D30 00010AC0 C0 01 00 1C */ lfs f0, 0x1c(r1) -/* 00003D34 00010AC4 C1 A1 00 20 */ lfs f13, 0x20(r1) -/* 00003D38 00010AC8 ED 8C 02 F2 */ fmuls f12, f12, f11 -/* 00003D3C 00010ACC C1 49 05 C0 */ lfs f10, .rodata+0x5C0@l(r9) -/* 00003D40 00010AD0 EC 00 02 F2 */ fmuls f0, f0, f11 -/* 00003D44 00010AD4 ED AD 02 F2 */ fmuls f13, f13, f11 -.L_00003D48: -/* 00003D48 00010AD8 D1 81 00 28 */ stfs f12, 0x28(r1) -/* 00003D4C 00010ADC D0 01 00 2C */ stfs f0, 0x2c(r1) -/* 00003D50 00010AE0 D1 A1 00 30 */ stfs f13, 0x30(r1) -/* 00003D54 00010AE4 D1 41 00 34 */ stfs f10, 0x34(r1) -/* 00003D58 00010AE8 41 92 3D 6C */ beq cr4, .L_00007AC4 -/* 00003D5C 00010AEC 7F C4 F3 78 */ mr r4, r30 -/* 00003D60 00010AF0 7F E3 FB 78 */ mr r3, r31 -/* 00003D64 00010AF4 7F E5 FB 78 */ mr r5, r31 -.L_00003D68: -/* 00003D68 00010AF8 48 00 00 01 */ bl bMulMatrix__FP8bVector4PC8bMatrix4PC8bVector4 -/* 00003D6C 00010AFC 7F A3 EB 78 */ mr r3, r29 -/* 00003D70 00010B00 7F E4 FB 78 */ mr r4, r31 -/* 00003D74 00010B04 48 00 00 01 */ bl SetdVal__8tCubic3DP8bVector3 -/* 00003D78 00010B08 80 01 00 54 */ lwz r0, 0x54(r1) -/* 00003D7C 00010B0C 81 81 00 3C */ lwz r12, 0x3c(r1) -/* 00003D80 00010B10 7C 08 03 A6 */ mtlr r0 -/* 00003D84 00010B14 BB 81 00 40 */ lmw r28, 0x40(r1) -/* 00003D88 00010B18 7D 80 81 20 */ mtcrf 8, r12 -/* 00003D8C 00010B1C 38 21 00 50 */ addi r1, r1, 0x50 -.L_00003D90: -/* 00003D90 00010B20 4E 80 00 20 */ blr -.endfn EyeCubicInit__11CameraMoverP8tCubic3DP8bMatrix4P8bVector3 - -# .text:0x3D94 | size: 0x124 -.fn LookCubicInit__11CameraMoverP8tCubic3DP8bMatrix4P8bVector3, global -/* 00003D94 00010B24 94 21 FF B0 */ stwu r1, -0x50(r1) -/* 00003D98 00010B28 7C 08 02 A6 */ mflr r0 -/* 00003D9C 00010B2C 7D 80 00 26 */ mfcr r12 -/* 00003DA0 00010B30 BF 81 00 40 */ stmw r28, 0x40(r1) -/* 00003DA4 00010B34 90 01 00 54 */ stw r0, 0x54(r1) -/* 00003DA8 00010B38 91 81 00 3C */ stw r12, 0x3c(r1) -/* 00003DAC 00010B3C 7C 7C 1B 78 */ mr r28, r3 -/* 00003DB0 00010B40 3D 20 00 00 */ lis r9, .rodata+0x5C4@ha -/* 00003DB4 00010B44 81 7C 00 1C */ lwz r11, 0x1c(r28) -.L_00003DB8: -/* 00003DB8 00010B48 7C BE 2B 78 */ mr r30, r5 -/* 00003DBC 00010B4C 7C 9D 23 78 */ mr r29, r4 -/* 00003DC0 00010B50 C0 29 05 C4 */ lfs f1, .rodata+0x5C4@l(r9) -/* 00003DC4 00010B54 2E 1E 00 00 */ cmpwi cr4, r30, 0x0 -/* 00003DC8 00010B58 7C DF 33 78 */ mr r31, r6 -/* 00003DCC 00010B5C 38 AB 02 08 */ addi r5, r11, 0x208 -/* 00003DD0 00010B60 38 61 00 08 */ addi r3, r1, 0x8 -/* 00003DD4 00010B64 38 8B 00 60 */ addi r4, r11, 0x60 -.L_00003DD8: -/* 00003DD8 00010B68 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -/* 00003DDC 00010B6C 41 92 3D F0 */ beq cr4, .L_00007BCC -/* 00003DE0 00010B70 38 61 00 08 */ addi r3, r1, 0x8 -/* 00003DE4 00010B74 7F C4 F3 78 */ mr r4, r30 -/* 00003DE8 00010B78 7C 65 1B 78 */ mr r5, r3 -/* 00003DEC 00010B7C 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 -/* 00003DF0 00010B80 7F A3 EB 78 */ mr r3, r29 -/* 00003DF4 00010B84 38 81 00 08 */ addi r4, r1, 0x8 -/* 00003DF8 00010B88 48 00 00 01 */ bl SetVal__8tCubic3DPC8bVector3 -/* 00003DFC 00010B8C 81 3C 00 1C */ lwz r9, 0x1c(r28) -/* 00003E00 00010B90 2C 1F 00 00 */ cmpwi r31, 0x0 -/* 00003E04 00010B94 C1 49 02 10 */ lfs f10, 0x210(r9) -/* 00003E08 00010B98 C1 69 02 08 */ lfs f11, 0x208(r9) -/* 00003E0C 00010B9C C1 29 02 0C */ lfs f9, 0x20c(r9) -/* 00003E10 00010BA0 D1 61 00 18 */ stfs f11, 0x18(r1) -.L_00003E14: -/* 00003E14 00010BA4 D1 21 00 1C */ stfs f9, 0x1c(r1) -/* 00003E18 00010BA8 D1 41 00 20 */ stfs f10, 0x20(r1) -/* 00003E1C 00010BAC 41 82 3E 44 */ beq StartCinematicSlowdown__8CameraAI8EVIEW_IDf -/* 00003E20 00010BB0 C0 1F 00 08 */ lfs f0, 0x8(r31) -/* 00003E24 00010BB4 C1 BF 00 00 */ lfs f13, 0x0(r31) -/* 00003E28 00010BB8 C1 9F 00 04 */ lfs f12, 0x4(r31) -/* 00003E2C 00010BBC EC 0A 00 28 */ fsubs f0, f10, f0 -/* 00003E30 00010BC0 ED AB 68 28 */ fsubs f13, f11, f13 -/* 00003E34 00010BC4 D0 01 00 20 */ stfs f0, 0x20(r1) -/* 00003E38 00010BC8 ED 89 60 28 */ fsubs f12, f9, f12 -/* 00003E3C 00010BCC D1 A1 00 18 */ stfs f13, 0x18(r1) -/* 00003E40 00010BD0 D1 81 00 1C */ stfs f12, 0x1c(r1) -/* 00003E44 00010BD4 C1 7D 00 24 */ lfs f11, 0x24(r29) -/* 00003E48 00010BD8 3D 20 00 00 */ lis r9, .rodata+0x5C8@ha -/* 00003E4C 00010BDC C1 81 00 18 */ lfs f12, 0x18(r1) -/* 00003E50 00010BE0 3B E1 00 28 */ addi r31, r1, 0x28 -/* 00003E54 00010BE4 C0 01 00 1C */ lfs f0, 0x1c(r1) -/* 00003E58 00010BE8 C1 A1 00 20 */ lfs f13, 0x20(r1) -/* 00003E5C 00010BEC ED 8C 02 F2 */ fmuls f12, f12, f11 -/* 00003E60 00010BF0 C1 49 05 C8 */ lfs f10, .rodata+0x5C8@l(r9) -/* 00003E64 00010BF4 EC 00 02 F2 */ fmuls f0, f0, f11 -/* 00003E68 00010BF8 ED AD 02 F2 */ fmuls f13, f13, f11 -/* 00003E6C 00010BFC D1 81 00 28 */ stfs f12, 0x28(r1) -/* 00003E70 00010C00 D0 01 00 2C */ stfs f0, 0x2c(r1) -/* 00003E74 00010C04 D1 A1 00 30 */ stfs f13, 0x30(r1) -/* 00003E78 00010C08 D1 41 00 34 */ stfs f10, 0x34(r1) -/* 00003E7C 00010C0C 41 92 3E 90 */ beq cr4, .L_00007D0C -/* 00003E80 00010C10 7F C4 F3 78 */ mr r4, r30 -/* 00003E84 00010C14 7F E3 FB 78 */ mr r3, r31 -/* 00003E88 00010C18 7F E5 FB 78 */ mr r5, r31 -/* 00003E8C 00010C1C 48 00 00 01 */ bl bMulMatrix__FP8bVector4PC8bMatrix4PC8bVector4 -/* 00003E90 00010C20 7F A3 EB 78 */ mr r3, r29 -/* 00003E94 00010C24 7F E4 FB 78 */ mr r4, r31 -/* 00003E98 00010C28 48 00 00 01 */ bl SetdVal__8tCubic3DP8bVector3 -/* 00003E9C 00010C2C 80 01 00 54 */ lwz r0, 0x54(r1) -/* 00003EA0 00010C30 81 81 00 3C */ lwz r12, 0x3c(r1) -/* 00003EA4 00010C34 7C 08 03 A6 */ mtlr r0 -/* 00003EA8 00010C38 BB 81 00 40 */ lmw r28, 0x40(r1) -/* 00003EAC 00010C3C 7D 80 81 20 */ mtcrf 8, r12 -/* 00003EB0 00010C40 38 21 00 50 */ addi r1, r1, 0x50 -.L_00003EB4: -/* 00003EB4 00010C44 4E 80 00 20 */ blr -.endfn LookCubicInit__11CameraMoverP8tCubic3DP8bMatrix4P8bVector3 - -# .text:0x3EB8 | size: 0x68 -.fn SetEyeLook__11CameraMoverP8tCubic3DT1P8tCubic1DP8bMatrix4P8bVector3, global -/* 00003EB8 00010C48 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 00003EBC 00010C4C 7C 08 02 A6 */ mflr r0 -/* 00003EC0 00010C50 BF 41 00 08 */ stmw r26, 0x8(r1) -.L_00003EC4: -/* 00003EC4 00010C54 90 01 00 24 */ stw r0, 0x24(r1) -/* 00003EC8 00010C58 7C 7E 1B 78 */ mr r30, r3 -/* 00003ECC 00010C5C 7C 9D 23 78 */ mr r29, r4 -/* 00003ED0 00010C60 7C FC 3B 78 */ mr r28, r7 -/* 00003ED4 00010C64 7D 1B 43 78 */ mr r27, r8 -/* 00003ED8 00010C68 7C BA 2B 78 */ mr r26, r5 -/* 00003EDC 00010C6C 7C C4 33 78 */ mr r4, r6 -/* 00003EE0 00010C70 48 00 3B C5 */ bl .L_00007AA4 -/* 00003EE4 00010C74 7F A4 EB 78 */ mr r4, r29 -/* 00003EE8 00010C78 7F C3 F3 78 */ mr r3, r30 -/* 00003EEC 00010C7C 7F 85 E3 78 */ mr r5, r28 -/* 00003EF0 00010C80 7F 66 DB 78 */ mr r6, r27 -/* 00003EF4 00010C84 48 00 3C 71 */ bl .L_00007B64 -/* 00003EF8 00010C88 7F C3 F3 78 */ mr r3, r30 -.L_00003EFC: -/* 00003EFC 00010C8C 7F 44 D3 78 */ mr r4, r26 -/* 00003F00 00010C90 7F 85 E3 78 */ mr r5, r28 -/* 00003F04 00010C94 7F 66 DB 78 */ mr r6, r27 -/* 00003F08 00010C98 48 00 3D 95 */ bl .L_00007C9C -/* 00003F0C 00010C9C 80 01 00 24 */ lwz r0, 0x24(r1) -/* 00003F10 00010CA0 7C 08 03 A6 */ mtlr r0 -/* 00003F14 00010CA4 BB 41 00 08 */ lmw r26, 0x8(r1) -/* 00003F18 00010CA8 38 21 00 20 */ addi r1, r1, 0x20 -/* 00003F1C 00010CAC 4E 80 00 20 */ blr -.endfn SetEyeLook__11CameraMoverP8tCubic3DT1P8tCubic1DP8bMatrix4P8bVector3 - -# .text:0x3F20 | size: 0x8 -# CubicCameraMover::GetAnchor -.fn GetAnchor__16CubicCameraMover, global -/* 00003F20 00010CB0 80 63 00 80 */ lwz r3, 0x80(r3) -/* 00003F24 00010CB4 4E 80 00 20 */ blr -.endfn GetAnchor__16CubicCameraMover - -# .text:0x3F28 | size: 0x8 -.fn SetLookBack__16CubicCameraMoverb, global -/* 00003F28 00010CB8 90 83 00 A4 */ stw r4, 0xa4(r3) -/* 00003F2C 00010CBC 4E 80 00 20 */ blr -.endfn SetLookBack__16CubicCameraMoverb - -# .text:0x3F30 | size: 0xC -.fn SetDisableLag__16CubicCameraMoverb, global -/* 00003F30 00010CC0 68 84 00 01 */ xori r4, r4, 0x1 -/* 00003F34 00010CC4 90 83 00 A0 */ stw r4, 0xa0(r3) -/* 00003F38 00010CC8 4E 80 00 20 */ blr -.endfn SetDisableLag__16CubicCameraMoverb - -# .text:0x3F3C | size: 0x24 -# CubicCameraMover::OutsidePOV -.fn OutsidePOV__16CubicCameraMover, global -/* 00003F3C 00010CCC 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 00003F40 00010CD0 7C 08 02 A6 */ mflr r0 -/* 00003F44 00010CD4 90 01 00 0C */ stw r0, 0xc(r1) -/* 00003F48 00010CD8 80 63 00 9C */ lwz r3, 0x9c(r3) -/* 00003F4C 00010CDC 48 00 0F 8D */ bl .L_00004ED8 -/* 00003F50 00010CE0 80 01 00 0C */ lwz r0, 0xc(r1) -/* 00003F54 00010CE4 7C 08 03 A6 */ mtlr r0 -/* 00003F58 00010CE8 38 21 00 08 */ addi r1, r1, 0x8 -/* 00003F5C 00010CEC 4E 80 00 20 */ blr -.endfn OutsidePOV__16CubicCameraMover - -# .text:0x3F60 | size: 0x28 -# CubicCameraMover::RenderCarPOV -.fn RenderCarPOV__16CubicCameraMover, global -/* 00003F60 00010CF0 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 00003F64 00010CF4 7C 08 02 A6 */ mflr r0 -/* 00003F68 00010CF8 90 01 00 0C */ stw r0, 0xc(r1) -.L_00003F6C: -/* 00003F6C 00010CFC 80 83 00 A4 */ lwz r4, 0xa4(r3) -.L_00003F70: -/* 00003F70 00010D00 80 63 00 9C */ lwz r3, 0x9c(r3) -/* 00003F74 00010D04 48 00 0F B9 */ bl .L_00004F2C -/* 00003F78 00010D08 80 01 00 0C */ lwz r0, 0xc(r1) -/* 00003F7C 00010D0C 7C 08 03 A6 */ mtlr r0 -/* 00003F80 00010D10 38 21 00 08 */ addi r1, r1, 0x8 -/* 00003F84 00010D14 4E 80 00 20 */ blr -.endfn RenderCarPOV__16CubicCameraMover - -# .text:0x3F88 | size: 0xC -# CubicCameraMover::MinDistToWall -.fn MinDistToWall__16CubicCameraMover, global -/* 00003F88 00010D18 3D 20 00 00 */ lis r9, .rodata+0x5CC@ha -/* 00003F8C 00010D1C C0 29 05 CC */ lfs f1, .rodata+0x5CC@l(r9) -/* 00003F90 00010D20 4E 80 00 20 */ blr -.endfn MinDistToWall__16CubicCameraMover - -# .text:0x3F94 | size: 0x8 -# CubicCameraMover::HighliteMode -.fn HighliteMode__16CubicCameraMover, global -/* 00003F94 00010D24 38 60 00 00 */ li r3, 0x0 -/* 00003F98 00010D28 4E 80 00 20 */ blr -.endfn HighliteMode__16CubicCameraMover - -# .text:0x3F9C | size: 0x20 -# CubicCameraMover::SetSnapNext -.fn SetSnapNext__16CubicCameraMover, global -/* 00003F9C 00010D2C 3D 20 00 00 */ lis r9, .rodata+0x5D0@ha -/* 00003FA0 00010D30 C0 03 00 C0 */ lfs f0, 0xc0(r3) -/* 00003FA4 00010D34 C1 A9 05 D0 */ lfs f13, .rodata+0x5D0@l(r9) -/* 00003FA8 00010D38 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00003FAC 00010D3C 4D 81 00 20 */ bgtlr -/* 00003FB0 00010D40 38 00 00 01 */ li r0, 0x1 -/* 00003FB4 00010D44 90 03 00 A8 */ stw r0, 0xa8(r3) -.L_00003FB8: -/* 00003FB8 00010D48 4E 80 00 20 */ blr -.endfn SetSnapNext__16CubicCameraMover - -# .text:0x3FBC | size: 0x18 -# CubicCameraMover::GetLookbackAngle -.fn GetLookbackAngle__16CubicCameraMover, global -/* 00003FBC 00010D4C 80 03 00 A4 */ lwz r0, 0xa4(r3) -/* 00003FC0 00010D50 38 60 00 00 */ li r3, 0x0 -/* 00003FC4 00010D54 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00003FC8 00010D58 4D 82 00 20 */ beqlr -/* 00003FCC 00010D5C 60 63 80 00 */ ori r3, r3, 0x8000 -/* 00003FD0 00010D60 4E 80 00 20 */ blr -.endfn GetLookbackAngle__16CubicCameraMover - -# .text:0x3FD4 | size: 0x24 -# CubicCameraMover::IsHoodCamera -.fn IsHoodCamera__16CubicCameraMover, global -/* 00003FD4 00010D64 80 03 00 9C */ lwz r0, 0x9c(r3) -/* 00003FD8 00010D68 39 20 00 00 */ li r9, 0x0 -/* 00003FDC 00010D6C 2C 00 00 01 */ cmpwi r0, 0x1 -/* 00003FE0 00010D70 40 82 3F F0 */ bne .L_00007FD0 -/* 00003FE4 00010D74 80 03 00 A4 */ lwz r0, 0xa4(r3) -/* 00003FE8 00010D78 21 60 00 00 */ subfic r11, r0, 0x0 -/* 00003FEC 00010D7C 7D 2B 01 14 */ adde r9, r11, r0 -/* 00003FF0 00010D80 7D 23 4B 78 */ mr r3, r9 -/* 00003FF4 00010D84 4E 80 00 20 */ blr -.endfn IsHoodCamera__16CubicCameraMover - -# .text:0x3FF8 | size: 0x24C -.fn SetForward__16CubicCameraMoverP3POVb, global -/* 00003FF8 00010D88 94 21 FF B8 */ stwu r1, -0x48(r1) -/* 00003FFC 00010D8C 7C 08 02 A6 */ mflr r0 -/* 00004000 00010D90 7D 80 00 26 */ mfcr r12 -/* 00004004 00010D94 F3 A1 00 30 */ psq_st f29, 0x30(r1), 0, qr0 -/* 00004008 00010D98 F3 C1 00 38 */ psq_st f30, 0x38(r1), 0, qr0 -/* 0000400C 00010D9C F3 E1 00 40 */ psq_st f31, 0x40(r1), 0, qr0 -/* 00004010 00010DA0 BF A1 00 24 */ stmw r29, 0x24(r1) -/* 00004014 00010DA4 90 01 00 4C */ stw r0, 0x4c(r1) -/* 00004018 00010DA8 91 81 00 20 */ stw r12, 0x20(r1) -/* 0000401C 00010DAC 7C 7E 1B 78 */ mr r30, r3 -/* 00004020 00010DB0 7C BF 2B 78 */ mr r31, r5 -.L_00004024: -/* 00004024 00010DB4 7C 84 23 79 */ mr. r4, r4 -/* 00004028 00010DB8 41 82 41 C0 */ beq .L_000081E8 -/* 0000402C 00010DBC A8 64 00 00 */ lha r3, 0x0(r4) -/* 00004030 00010DC0 48 00 0F 8D */ bl .L_00004FBC -/* 00004034 00010DC4 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00004038 00010DC8 41 82 41 C0 */ beq .L_000081F8 -/* 0000403C 00010DCC 2E 1F 00 00 */ cmpwi cr4, r31, 0x0 -/* 00004040 00010DD0 40 92 40 54 */ bne cr4, .L_00008094 -/* 00004044 00010DD4 7F C3 F3 78 */ mr r3, r30 -.L_00004048: -/* 00004048 00010DD8 48 00 3F 95 */ bl .L_00007FDC -/* 0000404C 00010DDC 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00004050 00010DE0 40 82 42 1C */ bne .L_0000826C -/* 00004054 00010DE4 81 3E 00 80 */ lwz r9, 0x80(r30) -/* 00004058 00010DE8 3B E1 00 08 */ addi r31, r1, 0x8 -/* 0000405C 00010DEC 3D 60 00 00 */ lis r11, .rodata+0x5D4@ha -/* 00004060 00010DF0 C0 09 00 00 */ lfs f0, 0x0(r9) -/* 00004064 00010DF4 3B A9 00 48 */ addi r29, r9, 0x48 -/* 00004068 00010DF8 C1 A9 00 04 */ lfs f13, 0x4(r9) -/* 0000406C 00010DFC C1 29 00 08 */ lfs f9, 0x8(r9) -/* 00004070 00010E00 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 00004074 00010E04 D1 A1 00 0C */ stfs f13, 0xc(r1) -/* 00004078 00010E08 D1 3F 00 08 */ stfs f9, 0x8(r31) -/* 0000407C 00010E0C C3 AB 05 D4 */ lfs f29, .rodata+0x5D4@l(r11) -.L_00004080: -/* 00004080 00010E10 C1 A1 00 0C */ lfs f13, 0xc(r1) -/* 00004084 00010E14 C1 69 00 4C */ lfs f11, 0x4c(r9) -/* 00004088 00010E18 C0 01 00 08 */ lfs f0, 0x8(r1) -/* 0000408C 00010E1C C1 49 00 48 */ lfs f10, 0x48(r9) -/* 00004090 00010E20 ED AD 02 F2 */ fmuls f13, f13, f11 -/* 00004094 00010E24 C1 89 00 50 */ lfs f12, 0x50(r9) -/* 00004098 00010E28 EC 00 6A BA */ fmadds f0, f0, f10, f13 -/* 0000409C 00010E2C EC 09 03 3A */ fmadds f0, f9, f12, f0 -/* 000040A0 00010E30 FC 00 E8 00 */ fcmpu cr0, f0, f29 -/* 000040A4 00010E34 4C 62 0B 82 */ cror un, eq, gt -.L_000040A8: -/* 000040A8 00010E38 41 83 40 C8 */ bso .L_00008170 -/* 000040AC 00010E3C 3D 20 00 00 */ lis r9, .rodata+0x5D8@ha -/* 000040B0 00010E40 7F E3 FB 78 */ mr r3, r31 -/* 000040B4 00010E44 C0 29 05 D8 */ lfs f1, .rodata+0x5D8@l(r9) -/* 000040B8 00010E48 7F E4 FB 78 */ mr r4, r31 -/* 000040BC 00010E4C 7F A5 EB 78 */ mr r5, r29 -/* 000040C0 00010E50 EC 20 00 72 */ fmuls f1, f0, f1 -.L_000040C4: -/* 000040C4 00010E54 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -/* 000040C8 00010E58 81 3E 00 80 */ lwz r9, 0x80(r30) -/* 000040CC 00010E5C 3C 60 00 00 */ lis r3, gDriftSpeed@ha -.L_000040D0: -/* 000040D0 00010E60 38 63 00 00 */ addi r3, r3, gDriftSpeed@l -/* 000040D4 00010E64 C0 29 00 10 */ lfs f1, 0x10(r9) -/* 000040D8 00010E68 48 00 00 01 */ bl GetValue__5Graphf -/* 000040DC 00010E6C FF E0 08 90 */ fmr f31, f1 -/* 000040E0 00010E70 7F E4 FB 78 */ mr r4, r31 -/* 000040E4 00010E74 7F E3 FB 78 */ mr r3, r31 -/* 000040E8 00010E78 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -.L_000040EC: -/* 000040EC 00010E7C C0 01 00 08 */ lfs f0, 0x8(r1) -/* 000040F0 00010E80 3D 20 00 00 */ lis r9, .rodata+0x5DC@ha -/* 000040F4 00010E84 C1 A1 00 0C */ lfs f13, 0xc(r1) -/* 000040F8 00010E88 7F E4 FB 78 */ mr r4, r31 -/* 000040FC 00010E8C C1 9F 00 08 */ lfs f12, 0x8(r31) -/* 00004100 00010E90 EC 00 07 F2 */ fmuls f0, f0, f31 -/* 00004104 00010E94 C3 C9 05 DC */ lfs f30, .rodata+0x5DC@l(r9) -/* 00004108 00010E98 ED AD 07 F2 */ fmuls f13, f13, f31 -/* 0000410C 00010E9C D0 01 00 08 */ stfs f0, 0x8(r1) -/* 00004110 00010EA0 ED 8C 07 F2 */ fmuls f12, f12, f31 -/* 00004114 00010EA4 D1 A1 00 0C */ stfs f13, 0xc(r1) -/* 00004118 00010EA8 EC 3E F8 28 */ fsubs f1, f30, f31 -/* 0000411C 00010EAC D1 9F 00 08 */ stfs f12, 0x8(r31) -/* 00004120 00010EB0 7F A5 EB 78 */ mr r5, r29 -.L_00004124: -/* 00004124 00010EB4 7F E3 FB 78 */ mr r3, r31 -/* 00004128 00010EB8 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -/* 0000412C 00010EBC 3D 20 00 00 */ lis r9, WorldTimer@ha -/* 00004130 00010EC0 81 5E 00 B4 */ lwz r10, 0xb4(r30) -/* 00004134 00010EC4 80 09 00 00 */ lwz r0, WorldTimer@l(r9) -/* 00004138 00010EC8 3D 00 43 30 */ lis r8, 0x4330 -/* 0000413C 00010ECC 3D 20 00 00 */ lis r9, .rodata+0x5E0@ha -/* 00004140 00010ED0 7C 0A 00 50 */ subf r0, r10, r0 -/* 00004144 00010ED4 C9 A9 05 E0 */ lfd f13, .rodata+0x5E0@l(r9) -/* 00004148 00010ED8 6C 00 80 00 */ xoris r0, r0, 0x8000 -/* 0000414C 00010EDC 3D 20 00 00 */ lis r9, .rodata+0x5E8@ha -/* 00004150 00010EE0 90 01 00 1C */ stw r0, 0x1c(r1) -/* 00004154 00010EE4 3D 40 00 00 */ lis r10, .rodata+0x5EC@ha -/* 00004158 00010EE8 C1 49 05 E8 */ lfs f10, .rodata+0x5E8@l(r9) -/* 0000415C 00010EEC 7F E4 FB 78 */ mr r4, r31 -/* 00004160 00010EF0 91 01 00 18 */ stw r8, 0x18(r1) -/* 00004164 00010EF4 C1 6A 05 EC */ lfs f11, .rodata+0x5EC@l(r10) -/* 00004168 00010EF8 C8 01 00 18 */ lfd f0, 0x18(r1) -/* 0000416C 00010EFC C1 81 00 10 */ lfs f12, 0x10(r1) -/* 00004170 00010F00 FC 00 68 28 */ fsub f0, f0, f13 -/* 00004174 00010F04 81 3E 00 80 */ lwz r9, 0x80(r30) -/* 00004178 00010F08 FC 00 00 18 */ frsp f0, f0 -/* 0000417C 00010F0C 80 7E 00 90 */ lwz r3, 0x90(r30) -/* 00004180 00010F10 EC 00 02 B2 */ fmuls f0, f0, f10 -/* 00004184 00010F14 EC 00 02 F2 */ fmuls f0, f0, f11 -/* 00004188 00010F18 EC 1E 00 28 */ fsubs f0, f30, f0 -/* 0000418C 00010F1C FC 00 E8 2E */ fsel f0, f0, f0, f29 -/* 00004190 00010F20 ED BE 00 28 */ fsubs f13, f30, f0 -/* 00004194 00010F24 FD AD F0 2E */ fsel f13, f13, f0, f30 -/* 00004198 00010F28 ED 8C 03 72 */ fmuls f12, f12, f13 -/* 0000419C 00010F2C D1 81 00 10 */ stfs f12, 0x10(r1) -/* 000041A0 00010F30 C0 09 00 50 */ lfs f0, 0x50(r9) -/* 000041A4 00010F34 EC 00 00 32 */ fmuls f0, f0, f0 -/* 000041A8 00010F38 EF DE 00 28 */ fsubs f30, f30, f0 -/* 000041AC 00010F3C ED 8C 07 B2 */ fmuls f12, f12, f30 -/* 000041B0 00010F40 D1 81 00 10 */ stfs f12, 0x10(r1) -/* 000041B4 00010F44 48 00 00 01 */ bl SetValDesired__8tCubic3DP8bVector3 -/* 000041B8 00010F48 41 92 42 1C */ beq cr4, .L_000083D4 -/* 000041BC 00010F4C 48 00 41 D8 */ b .L_00008394 -/* 000041C0 00010F50 80 9E 00 80 */ lwz r4, 0x80(r30) -.L_000041C4: -/* 000041C4 00010F54 2C 04 00 00 */ cmpwi r4, 0x0 -/* 000041C8 00010F58 41 82 42 1C */ beq IsAttached__C13CDActionDrivePCQ33UTL3COM8IUnknown -/* 000041CC 00010F5C 80 7E 00 90 */ lwz r3, 0x90(r30) -/* 000041D0 00010F60 38 84 00 48 */ addi r4, r4, 0x48 -/* 000041D4 00010F64 48 00 00 01 */ bl SetValDesired__8tCubic3DP8bVector3 -/* 000041D8 00010F68 81 3E 00 90 */ lwz r9, 0x90(r30) -/* 000041DC 00010F6C 38 00 00 00 */ li r0, 0x0 -/* 000041E0 00010F70 C0 09 00 08 */ lfs f0, 0x8(r9) -/* 000041E4 00010F74 C1 A9 00 0C */ lfs f13, 0xc(r9) -.L_000041E8: -/* 000041E8 00010F78 C1 89 00 34 */ lfs f12, 0x34(r9) -/* 000041EC 00010F7C C1 69 00 38 */ lfs f11, 0x38(r9) -.L_000041F0: -/* 000041F0 00010F80 C1 49 00 60 */ lfs f10, 0x60(r9) -/* 000041F4 00010F84 C1 29 00 64 */ lfs f9, 0x64(r9) -/* 000041F8 00010F88 B0 09 00 80 */ sth r0, 0x80(r9) -/* 000041FC 00010F8C D0 09 00 00 */ stfs f0, 0x0(r9) -/* 00004200 00010F90 D1 A9 00 04 */ stfs f13, 0x4(r9) -/* 00004204 00010F94 D1 89 00 2C */ stfs f12, 0x2c(r9) -/* 00004208 00010F98 D1 69 00 30 */ stfs f11, 0x30(r9) -/* 0000420C 00010F9C D1 49 00 58 */ stfs f10, 0x58(r9) -.L_00004210: -/* 00004210 00010FA0 D1 29 00 5C */ stfs f9, 0x5c(r9) -.L_00004214: -/* 00004214 00010FA4 B0 09 00 28 */ sth r0, 0x28(r9) -/* 00004218 00010FA8 B0 09 00 54 */ sth r0, 0x54(r9) -/* 0000421C 00010FAC 80 01 00 4C */ lwz r0, 0x4c(r1) -/* 00004220 00010FB0 81 81 00 20 */ lwz r12, 0x20(r1) -/* 00004224 00010FB4 7C 08 03 A6 */ mtlr r0 -/* 00004228 00010FB8 BB A1 00 24 */ lmw r29, 0x24(r1) -/* 0000422C 00010FBC E3 A1 00 30 */ psq_l f29, 0x30(r1), 0, qr0 -/* 00004230 00010FC0 E3 C1 00 38 */ psq_l f30, 0x38(r1), 0, qr0 -/* 00004234 00010FC4 E3 E1 00 40 */ psq_l f31, 0x40(r1), 0, qr0 -/* 00004238 00010FC8 7D 80 81 20 */ mtcrf 8, r12 -/* 0000423C 00010FCC 38 21 00 48 */ addi r1, r1, 0x48 -/* 00004240 00010FD0 4E 80 00 20 */ blr -.endfn SetForward__16CubicCameraMoverP3POVb - -# .text:0x4244 | size: 0x2F4 -.fn CameraAccelCurve__16CubicCameraMoverP8bVector3, global -/* 00004244 00010FD4 94 21 FF C8 */ stwu r1, -0x38(r1) -/* 00004248 00010FD8 7C 08 02 A6 */ mflr r0 -/* 0000424C 00010FDC BF 81 00 28 */ stmw r28, 0x28(r1) -/* 00004250 00010FE0 90 01 00 3C */ stw r0, 0x3c(r1) -/* 00004254 00010FE4 3D 20 00 00 */ lis r9, .rodata+0x5F0@ha -/* 00004258 00010FE8 3D 60 00 00 */ lis r11, .rodata+0x5F4@ha -/* 0000425C 00010FEC C0 29 05 F0 */ lfs f1, .rodata+0x5F0@l(r9) -.L_00004260: -/* 00004260 00010FF0 7C 7D 1B 78 */ mr r29, r3 -.L_00004264: -/* 00004264 00010FF4 3D 20 00 00 */ lis r9, CameraAccelerationCurve@ha -/* 00004268 00010FF8 C0 4B 05 F4 */ lfs f2, .rodata+0x5F4@l(r11) -/* 0000426C 00010FFC 38 61 00 08 */ addi r3, r1, 0x8 -.L_00004270: -/* 00004270 00011000 38 00 00 05 */ li r0, 0x5 -/* 00004274 00011004 3B C9 00 00 */ addi r30, r9, CameraAccelerationCurve@l -/* 00004278 00011008 7C 9F 23 78 */ mr r31, r4 -/* 0000427C 0001100C 7C 7C 1B 78 */ mr r28, r3 -/* 00004280 00011010 90 01 00 08 */ stw r0, 0x8(r1) -/* 00004284 00011014 48 00 00 01 */ bl SetMinMax__9TableBaseff -/* 00004288 00011018 93 C1 00 18 */ stw r30, 0x18(r1) -/* 0000428C 0001101C C0 01 00 0C */ lfs f0, 0xc(r1) -.L_00004290: -/* 00004290 00011020 81 3D 00 80 */ lwz r9, 0x80(r29) -/* 00004294 00011024 C1 81 00 14 */ lfs f12, 0x14(r1) -/* 00004298 00011028 C1 A9 00 38 */ lfs f13, 0x38(r9) -/* 0000429C 0001102C 80 81 00 08 */ lwz r4, 0x8(r1) -/* 000042A0 00011030 ED AD 00 28 */ fsubs f13, f13, f0 -/* 000042A4 00011034 EC 2C 03 72 */ fmuls f1, f12, f13 -/* 000042A8 00011038 FC 00 08 90 */ fmr f0, f1 -/* 000042AC 0001103C FD 60 00 1E */ fctiwz f11, f0 -/* 000042B0 00011040 D9 61 00 20 */ stfd f11, 0x20(r1) -/* 000042B4 00011044 80 C1 00 24 */ lwz r6, 0x24(r1) -/* 000042B8 00011048 2C 06 00 00 */ cmpwi r6, 0x0 -/* 000042BC 0001104C 40 80 42 D4 */ bge .L_00008590 -/* 000042C0 00011050 7F C4 F3 78 */ mr r4, r30 -/* 000042C4 00011054 7F E3 FB 78 */ mr r3, r31 -/* 000042C8 00011058 38 A0 00 04 */ li r5, 0x4 -/* 000042CC 0001105C 48 00 00 01 */ bl bMemCpy -/* 000042D0 00011060 48 00 43 58 */ b .L_00008628 -.L_000042D4: -/* 000042D4 00011064 38 04 FF FF */ subi r0, r4, 0x1 -/* 000042D8 00011068 7C 06 00 00 */ cmpw r6, r0 -/* 000042DC 0001106C 41 80 42 FC */ blt .L_000085D8 -/* 000042E0 00011070 54 84 10 3A */ slwi r4, r4, 2 -/* 000042E4 00011074 7F E3 FB 78 */ mr r3, r31 -/* 000042E8 00011078 38 84 FF FC */ subi r4, r4, 0x4 -/* 000042EC 0001107C 38 A0 00 04 */ li r5, 0x4 -/* 000042F0 00011080 7C 84 F2 14 */ add r4, r4, r30 -/* 000042F4 00011084 48 00 00 01 */ bl bMemCpy -/* 000042F8 00011088 48 00 43 58 */ b .L_00008650 -/* 000042FC 0001108C 6C C0 80 00 */ xoris r0, r6, 0x8000 -/* 00004300 00011090 90 01 00 24 */ stw r0, 0x24(r1) -/* 00004304 00011094 3D 60 43 30 */ lis r11, 0x4330 -/* 00004308 00011098 3D 40 00 00 */ lis r10, .rodata+0x5F8@ha -/* 0000430C 0001109C 91 61 00 20 */ stw r11, 0x20(r1) -/* 00004310 000110A0 C9 AA 05 F8 */ lfd f13, .rodata+0x5F8@l(r10) -/* 00004314 000110A4 C8 01 00 20 */ lfd f0, 0x20(r1) -.L_00004318: -/* 00004318 000110A8 FC 00 68 28 */ fsub f0, f0, f13 -/* 0000431C 000110AC FD A0 00 18 */ frsp f13, f0 -/* 00004320 000110B0 FC 0D 08 00 */ fcmpu cr0, f13, f1 -/* 00004324 000110B4 4C 62 03 82 */ cror un, eq, lt -/* 00004328 000110B8 41 83 43 38 */ bso .L_00008660 -/* 0000432C 000110BC 3D 20 00 00 */ lis r9, .rodata+0x600@ha -/* 00004330 000110C0 C0 09 06 00 */ lfs f0, .rodata+0x600@l(r9) -/* 00004334 000110C4 ED AD 00 28 */ fsubs f13, f13, f0 -/* 00004338 000110C8 54 C6 10 3A */ slwi r6, r6, 2 -/* 0000433C 000110CC EC 21 68 28 */ fsubs f1, f1, f13 -.L_00004340: -/* 00004340 000110D0 38 A6 00 04 */ addi r5, r6, 0x4 -/* 00004344 000110D4 7F 83 E3 78 */ mr r3, r28 -.L_00004348: -/* 00004348 000110D8 7C C6 F2 14 */ add r6, r6, r30 -/* 0000434C 000110DC 7C A5 F2 14 */ add r5, r5, r30 -/* 00004350 000110E0 7F E4 FB 78 */ mr r4, r31 -/* 00004354 000110E4 48 00 0F F5 */ bl .L_00005348 -/* 00004358 000110E8 81 3D 00 80 */ lwz r9, 0x80(r29) -/* 0000435C 000110EC C0 01 00 0C */ lfs f0, 0xc(r1) -/* 00004360 000110F0 38 7F 00 04 */ addi r3, r31, 0x4 -/* 00004364 000110F4 C1 A9 00 3C */ lfs f13, 0x3c(r9) -/* 00004368 000110F8 C1 81 00 14 */ lfs f12, 0x14(r1) -/* 0000436C 000110FC ED AD 00 28 */ fsubs f13, f13, f0 -/* 00004370 00011100 80 81 00 08 */ lwz r4, 0x8(r1) -/* 00004374 00011104 EC 2C 03 72 */ fmuls f1, f12, f13 -/* 00004378 00011108 FC 00 08 90 */ fmr f0, f1 -/* 0000437C 0001110C FD 60 00 1E */ fctiwz f11, f0 -/* 00004380 00011110 D9 61 00 20 */ stfd f11, 0x20(r1) -/* 00004384 00011114 80 C1 00 24 */ lwz r6, 0x24(r1) -/* 00004388 00011118 2C 06 00 00 */ cmpwi r6, 0x0 -/* 0000438C 0001111C 40 80 43 A0 */ bge .L_0000872C -/* 00004390 00011120 80 81 00 18 */ lwz r4, 0x18(r1) -/* 00004394 00011124 38 A0 00 04 */ li r5, 0x4 -/* 00004398 00011128 48 00 00 01 */ bl bMemCpy -/* 0000439C 0001112C 48 00 44 28 */ b .L_000087C4 -/* 000043A0 00011130 38 04 FF FF */ subi r0, r4, 0x1 -/* 000043A4 00011134 7C 06 00 00 */ cmpw r6, r0 -/* 000043A8 00011138 41 80 43 C8 */ blt .L_00008770 -/* 000043AC 0001113C 54 84 10 3A */ slwi r4, r4, 2 -/* 000043B0 00011140 80 01 00 18 */ lwz r0, 0x18(r1) -/* 000043B4 00011144 38 84 FF FC */ subi r4, r4, 0x4 -.L_000043B8: -/* 000043B8 00011148 38 A0 00 04 */ li r5, 0x4 -/* 000043BC 0001114C 7C 80 22 14 */ add r4, r0, r4 -/* 000043C0 00011150 48 00 00 01 */ bl bMemCpy -/* 000043C4 00011154 48 00 44 28 */ b .L_000087EC -/* 000043C8 00011158 6C C0 80 00 */ xoris r0, r6, 0x8000 -/* 000043CC 0001115C 90 01 00 24 */ stw r0, 0x24(r1) -/* 000043D0 00011160 3D 60 43 30 */ lis r11, 0x4330 -/* 000043D4 00011164 3D 40 00 00 */ lis r10, .rodata+0x5F8@ha -/* 000043D8 00011168 91 61 00 20 */ stw r11, 0x20(r1) -/* 000043DC 0001116C C9 AA 05 F8 */ lfd f13, .rodata+0x5F8@l(r10) -/* 000043E0 00011170 C8 01 00 20 */ lfd f0, 0x20(r1) -/* 000043E4 00011174 FC 00 68 28 */ fsub f0, f0, f13 -/* 000043E8 00011178 FD A0 00 18 */ frsp f13, f0 -/* 000043EC 0001117C FC 0D 08 00 */ fcmpu cr0, f13, f1 -/* 000043F0 00011180 4C 62 03 82 */ cror un, eq, lt -/* 000043F4 00011184 41 83 44 04 */ bso .L_000087F8 -/* 000043F8 00011188 3D 20 00 00 */ lis r9, .rodata+0x600@ha -/* 000043FC 0001118C C0 09 06 00 */ lfs f0, .rodata+0x600@l(r9) -/* 00004400 00011190 ED AD 00 28 */ fsubs f13, f13, f0 -.L_00004404: -/* 00004404 00011194 54 C6 10 3A */ slwi r6, r6, 2 -/* 00004408 00011198 80 01 00 18 */ lwz r0, 0x18(r1) -/* 0000440C 0001119C 38 A6 00 04 */ addi r5, r6, 0x4 -/* 00004410 000111A0 7C 64 1B 78 */ mr r4, r3 -/* 00004414 000111A4 EC 21 68 28 */ fsubs f1, f1, f13 -/* 00004418 000111A8 7C C0 32 14 */ add r6, r0, r6 -/* 0000441C 000111AC 7C A0 2A 14 */ add r5, r0, r5 -.L_00004420: -/* 00004420 000111B0 7F 83 E3 78 */ mr r3, r28 -/* 00004424 000111B4 48 00 0F F5 */ bl .L_00005418 -/* 00004428 000111B8 81 3D 00 80 */ lwz r9, 0x80(r29) -/* 0000442C 000111BC C0 01 00 0C */ lfs f0, 0xc(r1) -/* 00004430 000111C0 39 1F 00 08 */ addi r8, r31, 0x8 -/* 00004434 000111C4 C1 A9 00 40 */ lfs f13, 0x40(r9) -/* 00004438 000111C8 C1 81 00 14 */ lfs f12, 0x14(r1) -/* 0000443C 000111CC ED AD 00 28 */ fsubs f13, f13, f0 -/* 00004440 000111D0 80 81 00 08 */ lwz r4, 0x8(r1) -/* 00004444 000111D4 EC 2C 03 72 */ fmuls f1, f12, f13 -/* 00004448 000111D8 FC 00 08 90 */ fmr f0, f1 -/* 0000444C 000111DC FD 60 00 1E */ fctiwz f11, f0 -/* 00004450 000111E0 D9 61 00 20 */ stfd f11, 0x20(r1) -/* 00004454 000111E4 80 C1 00 24 */ lwz r6, 0x24(r1) -/* 00004458 000111E8 2C 06 00 00 */ cmpwi r6, 0x0 -/* 0000445C 000111EC 40 80 44 6C */ bge .L_000088C8 -/* 00004460 000111F0 80 81 00 18 */ lwz r4, 0x18(r1) -/* 00004464 000111F4 7D 03 43 78 */ mr r3, r8 -/* 00004468 000111F8 48 00 44 8C */ b .L_000088F4 -/* 0000446C 000111FC 38 04 FF FF */ subi r0, r4, 0x1 -/* 00004470 00011200 7C 06 00 00 */ cmpw r6, r0 -/* 00004474 00011204 41 80 44 98 */ blt .L_0000890C -/* 00004478 00011208 54 84 10 3A */ slwi r4, r4, 2 -/* 0000447C 0001120C 80 01 00 18 */ lwz r0, 0x18(r1) -/* 00004480 00011210 38 84 FF FC */ subi r4, r4, 0x4 -/* 00004484 00011214 7D 03 43 78 */ mr r3, r8 -/* 00004488 00011218 7C 80 22 14 */ add r4, r0, r4 -/* 0000448C 0001121C 38 A0 00 04 */ li r5, 0x4 -/* 00004490 00011220 48 00 00 01 */ bl bMemCpy -/* 00004494 00011224 48 00 44 F8 */ b .L_0000898C -/* 00004498 00011228 6C C0 80 00 */ xoris r0, r6, 0x8000 -/* 0000449C 0001122C 90 01 00 24 */ stw r0, 0x24(r1) -/* 000044A0 00011230 3D 60 43 30 */ lis r11, 0x4330 -/* 000044A4 00011234 3D 40 00 00 */ lis r10, .rodata+0x5F8@ha -/* 000044A8 00011238 91 61 00 20 */ stw r11, 0x20(r1) -/* 000044AC 0001123C C9 AA 05 F8 */ lfd f13, .rodata+0x5F8@l(r10) -/* 000044B0 00011240 C8 01 00 20 */ lfd f0, 0x20(r1) -/* 000044B4 00011244 FC 00 68 28 */ fsub f0, f0, f13 -/* 000044B8 00011248 FD A0 00 18 */ frsp f13, f0 -/* 000044BC 0001124C FC 0D 08 00 */ fcmpu cr0, f13, f1 -/* 000044C0 00011250 4C 62 03 82 */ cror un, eq, lt -/* 000044C4 00011254 41 83 44 D4 */ bso .L_00008998 -/* 000044C8 00011258 3D 20 00 00 */ lis r9, .rodata+0x600@ha -/* 000044CC 0001125C C0 09 06 00 */ lfs f0, .rodata+0x600@l(r9) -/* 000044D0 00011260 ED AD 00 28 */ fsubs f13, f13, f0 -/* 000044D4 00011264 54 C6 10 3A */ slwi r6, r6, 2 -/* 000044D8 00011268 80 01 00 18 */ lwz r0, 0x18(r1) -/* 000044DC 0001126C 38 A6 00 04 */ addi r5, r6, 0x4 -/* 000044E0 00011270 EC 21 68 28 */ fsubs f1, f1, f13 -/* 000044E4 00011274 7C C0 32 14 */ add r6, r0, r6 -/* 000044E8 00011278 7F 83 E3 78 */ mr r3, r28 -/* 000044EC 0001127C 7D 04 43 78 */ mr r4, r8 -/* 000044F0 00011280 7C A0 2A 14 */ add r5, r0, r5 -/* 000044F4 00011284 48 00 0F F5 */ bl .L_000054E8 -/* 000044F8 00011288 3D 20 00 00 */ lis r9, .rodata+0x5F4@ha -/* 000044FC 0001128C C0 1F 00 00 */ lfs f0, 0x0(r31) -/* 00004500 00011290 C1 A9 05 F4 */ lfs f13, .rodata+0x5F4@l(r9) -/* 00004504 00011294 C1 9F 00 04 */ lfs f12, 0x4(r31) -/* 00004508 00011298 C1 7F 00 08 */ lfs f11, 0x8(r31) -/* 0000450C 0001129C EC 00 03 72 */ fmuls f0, f0, f13 -/* 00004510 000112A0 ED 8C 03 72 */ fmuls f12, f12, f13 -/* 00004514 000112A4 D0 1F 00 00 */ stfs f0, 0x0(r31) -.L_00004518: -/* 00004518 000112A8 ED 6B 03 72 */ fmuls f11, f11, f13 -/* 0000451C 000112AC D1 9F 00 04 */ stfs f12, 0x4(r31) -/* 00004520 000112B0 D1 7F 00 08 */ stfs f11, 0x8(r31) -/* 00004524 000112B4 80 01 00 3C */ lwz r0, 0x3c(r1) -/* 00004528 000112B8 7C 08 03 A6 */ mtlr r0 -/* 0000452C 000112BC BB 81 00 28 */ lmw r28, 0x28(r1) -/* 00004530 000112C0 38 21 00 38 */ addi r1, r1, 0x38 -/* 00004534 000112C4 4E 80 00 20 */ blr -.endfn CameraAccelCurve__16CubicCameraMoverP8bVector3 - -# .text:0x4538 | size: 0x15C -.fn CameraSpeedHug__16CubicCameraMoverP8bVector3, global -/* 00004538 000112C8 94 21 FF C0 */ stwu r1, -0x40(r1) -/* 0000453C 000112CC 7C 08 02 A6 */ mflr r0 -/* 00004540 000112D0 BF 81 00 30 */ stmw r28, 0x30(r1) -/* 00004544 000112D4 90 01 00 44 */ stw r0, 0x44(r1) -/* 00004548 000112D8 7C 7F 1B 78 */ mr r31, r3 -/* 0000454C 000112DC 7C 9E 23 78 */ mr r30, r4 -/* 00004550 000112E0 81 7F 00 80 */ lwz r11, 0x80(r31) -/* 00004554 000112E4 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00004558 000112E8 41 82 46 80 */ beq .L_00008BD8 -/* 0000455C 000112EC 3D 20 00 00 */ lis r9, .rodata+0x604@ha -/* 00004560 000112F0 C0 4B 00 14 */ lfs f2, 0x14(r11) -/* 00004564 000112F4 C0 29 06 04 */ lfs f1, .rodata+0x604@l(r9) -/* 00004568 000112F8 FC 02 08 00 */ fcmpu cr0, f2, f1 -/* 0000456C 000112FC 4C 62 03 82 */ cror un, eq, lt -/* 00004570 00011300 41 83 46 80 */ bso .L_00008BF0 -/* 00004574 00011304 3D 20 00 00 */ lis r9, CameraSpeedHugData@ha -/* 00004578 00011308 3B 81 00 08 */ addi r28, r1, 0x8 -/* 0000457C 0001130C 38 00 00 05 */ li r0, 0x5 -/* 00004580 00011310 3B A9 00 00 */ addi r29, r9, CameraSpeedHugData@l -/* 00004584 00011314 90 01 00 08 */ stw r0, 0x8(r1) -/* 00004588 00011318 7F 83 E3 78 */ mr r3, r28 -/* 0000458C 0001131C 48 00 00 01 */ bl SetMinMax__9TableBaseff -/* 00004590 00011320 81 3F 00 80 */ lwz r9, 0x80(r31) -/* 00004594 00011324 93 A1 00 18 */ stw r29, 0x18(r1) -/* 00004598 00011328 C0 01 00 0C */ lfs f0, 0xc(r1) -/* 0000459C 0001132C C1 A9 00 10 */ lfs f13, 0x10(r9) -/* 000045A0 00011330 C1 81 00 14 */ lfs f12, 0x14(r1) -/* 000045A4 00011334 ED AD 00 28 */ fsubs f13, f13, f0 -/* 000045A8 00011338 80 81 00 08 */ lwz r4, 0x8(r1) -/* 000045AC 0001133C EC 2C 03 72 */ fmuls f1, f12, f13 -/* 000045B0 00011340 FC 00 08 90 */ fmr f0, f1 -/* 000045B4 00011344 FD 60 00 1E */ fctiwz f11, f0 -/* 000045B8 00011348 D9 61 00 28 */ stfd f11, 0x28(r1) -/* 000045BC 0001134C 80 C1 00 2C */ lwz r6, 0x2c(r1) -/* 000045C0 00011350 2C 06 00 00 */ cmpwi r6, 0x0 -/* 000045C4 00011354 40 80 45 DC */ bge .L_00008BA0 -/* 000045C8 00011358 7F A4 EB 78 */ mr r4, r29 -/* 000045CC 0001135C 38 61 00 20 */ addi r3, r1, 0x20 -.L_000045D0: -/* 000045D0 00011360 38 A0 00 08 */ li r5, 0x8 -/* 000045D4 00011364 48 00 00 01 */ bl bMemCpy -/* 000045D8 00011368 48 00 46 60 */ b .L_00008C38 -/* 000045DC 0001136C 38 04 FF FF */ subi r0, r4, 0x1 -/* 000045E0 00011370 7C 06 00 00 */ cmpw r6, r0 -/* 000045E4 00011374 41 80 46 04 */ blt .L_00008BE8 -/* 000045E8 00011378 54 84 18 38 */ slwi r4, r4, 3 -/* 000045EC 0001137C 38 61 00 20 */ addi r3, r1, 0x20 -/* 000045F0 00011380 38 84 FF F8 */ subi r4, r4, 0x8 -/* 000045F4 00011384 38 A0 00 08 */ li r5, 0x8 -/* 000045F8 00011388 7C 84 EA 14 */ add r4, r4, r29 -/* 000045FC 0001138C 48 00 00 01 */ bl bMemCpy -/* 00004600 00011390 48 00 46 60 */ b .L_00008C60 -/* 00004604 00011394 6C C0 80 00 */ xoris r0, r6, 0x8000 -/* 00004608 00011398 90 01 00 2C */ stw r0, 0x2c(r1) -/* 0000460C 0001139C 3D 60 43 30 */ lis r11, 0x4330 -/* 00004610 000113A0 3D 40 00 00 */ lis r10, .rodata+0x608@ha -/* 00004614 000113A4 91 61 00 28 */ stw r11, 0x28(r1) -/* 00004618 000113A8 C9 AA 06 08 */ lfd f13, .rodata+0x608@l(r10) -/* 0000461C 000113AC C8 01 00 28 */ lfd f0, 0x28(r1) -/* 00004620 000113B0 FC 00 68 28 */ fsub f0, f0, f13 -/* 00004624 000113B4 FD A0 00 18 */ frsp f13, f0 -/* 00004628 000113B8 FC 0D 08 00 */ fcmpu cr0, f13, f1 -/* 0000462C 000113BC 4C 62 03 82 */ cror un, eq, lt -/* 00004630 000113C0 41 83 46 40 */ bso .L_00008C70 -/* 00004634 000113C4 3D 20 00 00 */ lis r9, .rodata+0x610@ha -/* 00004638 000113C8 C0 09 06 10 */ lfs f0, .rodata+0x610@l(r9) -/* 0000463C 000113CC ED AD 00 28 */ fsubs f13, f13, f0 -/* 00004640 000113D0 54 C6 18 38 */ slwi r6, r6, 3 -/* 00004644 000113D4 EC 21 68 28 */ fsubs f1, f1, f13 -/* 00004648 000113D8 38 A6 00 08 */ addi r5, r6, 0x8 -/* 0000464C 000113DC 7F 83 E3 78 */ mr r3, r28 -/* 00004650 000113E0 7C C6 EA 14 */ add r6, r6, r29 -/* 00004654 000113E4 7C A5 EA 14 */ add r5, r5, r29 -/* 00004658 000113E8 38 81 00 20 */ addi r4, r1, 0x20 -/* 0000465C 000113EC 48 00 10 19 */ bl .L_00005674 -/* 00004660 000113F0 C1 81 00 20 */ lfs f12, 0x20(r1) -/* 00004664 000113F4 C1 61 00 24 */ lfs f11, 0x24(r1) -/* 00004668 000113F8 C0 1E 00 00 */ lfs f0, 0x0(r30) -/* 0000466C 000113FC C1 BE 00 08 */ lfs f13, 0x8(r30) -/* 00004670 00011400 EC 00 03 32 */ fmuls f0, f0, f12 -/* 00004674 00011404 ED AD 02 F2 */ fmuls f13, f13, f11 -/* 00004678 00011408 D0 1E 00 00 */ stfs f0, 0x0(r30) -/* 0000467C 0001140C D1 BE 00 08 */ stfs f13, 0x8(r30) -/* 00004680 00011410 80 01 00 44 */ lwz r0, 0x44(r1) -/* 00004684 00011414 7C 08 03 A6 */ mtlr r0 -/* 00004688 00011418 BB 81 00 30 */ lmw r28, 0x30(r1) -/* 0000468C 0001141C 38 21 00 40 */ addi r1, r1, 0x40 -/* 00004690 00011420 4E 80 00 20 */ blr -.endfn CameraSpeedHug__16CubicCameraMoverP8bVector3 - -# .text:0x4694 | size: 0x1B8 -.fn MakeSpace__16CubicCameraMoverP8bMatrix4, global -/* 00004694 00011424 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 00004698 00011428 7C 08 02 A6 */ mflr r0 -/* 0000469C 0001142C BF 81 00 18 */ stmw r28, 0x18(r1) -/* 000046A0 00011430 90 01 00 2C */ stw r0, 0x2c(r1) -/* 000046A4 00011434 7C 7C 1B 78 */ mr r28, r3 -/* 000046A8 00011438 7C 9F 23 78 */ mr r31, r4 -/* 000046AC 0001143C 81 3C 00 08 */ lwz r9, 0x8(r28) -/* 000046B0 00011440 A8 69 00 50 */ lha r3, 0x50(r9) -/* 000046B4 00011444 80 09 00 54 */ lwz r0, 0x54(r9) -/* 000046B8 00011448 7C 7C 1A 14 */ add r3, r28, r3 -/* 000046BC 0001144C 7C 08 03 A6 */ mtlr r0 -/* 000046C0 00011450 4E 80 00 21 */ blrl -/* 000046C4 00011454 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000046C8 00011458 41 82 47 54 */ beq .L_00008E1C -/* 000046CC 0001145C 7F E3 FB 78 */ mr r3, r31 -/* 000046D0 00011460 3B BF 00 10 */ addi r29, r31, 0x10 -/* 000046D4 00011464 48 00 00 01 */ bl PSMTX44Identity -/* 000046D8 00011468 3B DF 00 20 */ addi r30, r31, 0x20 -/* 000046DC 0001146C 81 3C 00 90 */ lwz r9, 0x90(r28) -/* 000046E0 00011470 39 61 00 08 */ addi r11, r1, 0x8 -/* 000046E4 00011474 7D 64 5B 78 */ mr r4, r11 -/* 000046E8 00011478 7F E3 FB 78 */ mr r3, r31 -/* 000046EC 0001147C C0 09 00 00 */ lfs f0, 0x0(r9) -/* 000046F0 00011480 C1 A9 00 2C */ lfs f13, 0x2c(r9) -/* 000046F4 00011484 C1 89 00 58 */ lfs f12, 0x58(r9) -/* 000046F8 00011488 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 000046FC 0001148C D1 A1 00 0C */ stfs f13, 0xc(r1) -/* 00004700 00011490 D1 8B 00 08 */ stfs f12, 0x8(r11) -/* 00004704 00011494 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -/* 00004708 00011498 7F C4 F3 78 */ mr r4, r30 -/* 0000470C 0001149C 7F E5 FB 78 */ mr r5, r31 -/* 00004710 000114A0 7F A3 EB 78 */ mr r3, r29 -/* 00004714 000114A4 48 00 00 01 */ bl bCross__FP8bVector3PC8bVector3T1 -/* 00004718 000114A8 7F C3 F3 78 */ mr r3, r30 -/* 0000471C 000114AC 7F A5 EB 78 */ mr r5, r29 -/* 00004720 000114B0 7F E4 FB 78 */ mr r4, r31 -/* 00004724 000114B4 48 00 00 01 */ bl bCross__FP8bVector3PC8bVector3T1 -/* 00004728 000114B8 81 7C 00 80 */ lwz r11, 0x80(r28) -/* 0000472C 000114BC 3D 20 00 00 */ lis r9, .rodata+0x614@ha -/* 00004730 000114C0 C1 89 06 14 */ lfs f12, .rodata+0x614@l(r9) -/* 00004734 000114C4 C1 6B 00 20 */ lfs f11, 0x20(r11) -.L_00004738: -/* 00004738 000114C8 C0 0B 00 18 */ lfs f0, 0x18(r11) -/* 0000473C 000114CC C1 AB 00 1C */ lfs f13, 0x1c(r11) -.L_00004740: -/* 00004740 000114D0 D1 9F 00 3C */ stfs f12, 0x3c(r31) -/* 00004744 000114D4 D0 1F 00 30 */ stfs f0, 0x30(r31) -/* 00004748 000114D8 D1 BF 00 34 */ stfs f13, 0x34(r31) -/* 0000474C 000114DC D1 7F 00 38 */ stfs f11, 0x38(r31) -/* 00004750 000114E0 48 00 48 38 */ b .L_00008F88 -/* 00004754 000114E4 81 3C 00 80 */ lwz r9, 0x80(r28) -/* 00004758 000114E8 3D 40 00 00 */ lis r10, .rodata+0x614@ha -/* 0000475C 000114EC 3D 60 00 00 */ lis r11, .rodata+0x618@ha -/* 00004760 000114F0 C0 09 00 48 */ lfs f0, 0x48(r9) -/* 00004764 000114F4 C1 A9 00 4C */ lfs f13, 0x4c(r9) -/* 00004768 000114F8 C1 89 00 50 */ lfs f12, 0x50(r9) -/* 0000476C 000114FC C1 69 00 54 */ lfs f11, 0x54(r9) -/* 00004770 00011500 D0 1F 00 00 */ stfs f0, 0x0(r31) -/* 00004774 00011504 D1 BF 00 04 */ stfs f13, 0x4(r31) -/* 00004778 00011508 D1 9F 00 08 */ stfs f12, 0x8(r31) -/* 0000477C 0001150C D1 7F 00 0C */ stfs f11, 0xc(r31) -/* 00004780 00011510 C1 4B 06 18 */ lfs f10, .rodata+0x618@l(r11) -/* 00004784 00011514 C1 09 00 58 */ lfs f8, 0x58(r9) -/* 00004788 00011518 C0 E9 00 5C */ lfs f7, 0x5c(r9) -/* 0000478C 0001151C C0 A9 00 60 */ lfs f5, 0x60(r9) -.L_00004790: -/* 00004790 00011520 C0 69 00 64 */ lfs f3, 0x64(r9) -/* 00004794 00011524 D1 1F 00 10 */ stfs f8, 0x10(r31) -/* 00004798 00011528 D0 FF 00 14 */ stfs f7, 0x14(r31) -/* 0000479C 0001152C D0 BF 00 18 */ stfs f5, 0x18(r31) -/* 000047A0 00011530 D0 7F 00 1C */ stfs f3, 0x1c(r31) -/* 000047A4 00011534 C1 29 00 68 */ lfs f9, 0x68(r9) -/* 000047A8 00011538 C0 C9 00 6C */ lfs f6, 0x6c(r9) -/* 000047AC 0001153C C0 89 00 70 */ lfs f4, 0x70(r9) -/* 000047B0 00011540 C0 49 00 74 */ lfs f2, 0x74(r9) -/* 000047B4 00011544 D1 3F 00 20 */ stfs f9, 0x20(r31) -/* 000047B8 00011548 D0 DF 00 24 */ stfs f6, 0x24(r31) -/* 000047BC 0001154C D0 9F 00 28 */ stfs f4, 0x28(r31) -/* 000047C0 00011550 D0 5F 00 2C */ stfs f2, 0x2c(r31) -/* 000047C4 00011554 C0 09 00 18 */ lfs f0, 0x18(r9) -/* 000047C8 00011558 C1 89 00 20 */ lfs f12, 0x20(r9) -/* 000047CC 0001155C C1 A9 00 1C */ lfs f13, 0x1c(r9) -/* 000047D0 00011560 C1 6A 06 14 */ lfs f11, .rodata+0x614@l(r10) -/* 000047D4 00011564 D0 1F 00 30 */ stfs f0, 0x30(r31) -/* 000047D8 00011568 D1 BF 00 34 */ stfs f13, 0x34(r31) -/* 000047DC 0001156C D1 9F 00 38 */ stfs f12, 0x38(r31) -/* 000047E0 00011570 D1 7F 00 3C */ stfs f11, 0x3c(r31) -/* 000047E4 00011574 81 3C 00 80 */ lwz r9, 0x80(r28) -/* 000047E8 00011578 C0 09 00 70 */ lfs f0, 0x70(r9) -/* 000047EC 0001157C FC 00 50 00 */ fcmpu cr0, f0, f10 -/* 000047F0 00011580 4C 62 0B 82 */ cror un, eq, gt -/* 000047F4 00011584 41 83 48 38 */ bso .L_0000902C -/* 000047F8 00011588 FC 00 40 50 */ fneg f0, f8 -/* 000047FC 0001158C D0 1F 00 10 */ stfs f0, 0x10(r31) -/* 00004800 00011590 FD A0 38 50 */ fneg f13, f7 -/* 00004804 00011594 FD 80 28 50 */ fneg f12, f5 -/* 00004808 00011598 D1 BF 00 14 */ stfs f13, 0x14(r31) -/* 0000480C 0001159C FC 00 18 50 */ fneg f0, f3 -/* 00004810 000115A0 D1 9F 00 18 */ stfs f12, 0x18(r31) -/* 00004814 000115A4 D0 1F 00 1C */ stfs f0, 0x1c(r31) -/* 00004818 000115A8 FD A0 48 50 */ fneg f13, f9 -/* 0000481C 000115AC FD 80 30 50 */ fneg f12, f6 -/* 00004820 000115B0 D1 BF 00 20 */ stfs f13, 0x20(r31) -/* 00004824 000115B4 FD 60 20 50 */ fneg f11, f4 -/* 00004828 000115B8 D1 9F 00 24 */ stfs f12, 0x24(r31) -/* 0000482C 000115BC FC 00 10 50 */ fneg f0, f2 -/* 00004830 000115C0 D1 7F 00 28 */ stfs f11, 0x28(r31) -/* 00004834 000115C4 D0 1F 00 2C */ stfs f0, 0x2c(r31) -/* 00004838 000115C8 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 0000483C 000115CC 7C 08 03 A6 */ mtlr r0 -/* 00004840 000115D0 BB 81 00 18 */ lmw r28, 0x18(r1) -/* 00004844 000115D4 38 21 00 28 */ addi r1, r1, 0x28 -/* 00004848 000115D8 4E 80 00 20 */ blr -.endfn MakeSpace__16CubicCameraMoverP8bMatrix4 - -# .text:0x484C | size: 0x94 -.fn _._16CubicCameraMover, global -/* 0000484C 000115DC 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00004850 000115E0 7C 08 02 A6 */ mflr r0 -/* 00004854 000115E4 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 00004858 000115E8 90 01 00 14 */ stw r0, 0x14(r1) -/* 0000485C 000115EC 7C 7F 1B 78 */ mr r31, r3 -/* 00004860 000115F0 3D 20 00 00 */ lis r9, _vt.16CubicCameraMover@ha -.L_00004864: -/* 00004864 000115F4 39 29 00 00 */ addi r9, r9, _vt.16CubicCameraMover@l -/* 00004868 000115F8 80 7F 00 94 */ lwz r3, 0x94(r31) -/* 0000486C 000115FC 7C 9E 23 78 */ mr r30, r4 -.L_00004870: -/* 00004870 00011600 91 3F 00 08 */ stw r9, 0x8(r31) -/* 00004874 00011604 48 00 00 01 */ bl __builtin_delete -/* 00004878 00011608 80 7F 00 84 */ lwz r3, 0x84(r31) -/* 0000487C 0001160C 48 00 00 01 */ bl __builtin_delete -/* 00004880 00011610 80 7F 00 88 */ lwz r3, 0x88(r31) -/* 00004884 00011614 48 00 00 01 */ bl __builtin_delete -/* 00004888 00011618 80 7F 00 8C */ lwz r3, 0x8c(r31) -/* 0000488C 0001161C 48 00 00 01 */ bl __builtin_delete -/* 00004890 00011620 80 7F 00 90 */ lwz r3, 0x90(r31) -/* 00004894 00011624 48 00 00 01 */ bl __builtin_delete -/* 00004898 00011628 81 7F 00 E4 */ lwz r11, 0xe4(r31) -/* 0000489C 0001162C 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 000048A0 00011630 41 82 48 C0 */ beq .L_00009160 -/* 000048A4 00011634 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 000048A8 00011638 38 80 00 03 */ li r4, 0x3 -/* 000048AC 0001163C A8 69 00 08 */ lha r3, 0x8(r9) -/* 000048B0 00011640 80 09 00 0C */ lwz r0, 0xc(r9) -/* 000048B4 00011644 7C 6B 1A 14 */ add r3, r11, r3 -/* 000048B8 00011648 7C 08 03 A6 */ mtlr r0 -/* 000048BC 0001164C 4E 80 00 21 */ blrl -/* 000048C0 00011650 7F E3 FB 78 */ mr r3, r31 -/* 000048C4 00011654 7F C4 F3 78 */ mr r4, r30 -/* 000048C8 00011658 48 00 20 35 */ bl .L_000068FC -/* 000048CC 0001165C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 000048D0 00011660 7C 08 03 A6 */ mtlr r0 -/* 000048D4 00011664 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 000048D8 00011668 38 21 00 10 */ addi r1, r1, 0x10 -/* 000048DC 0001166C 4E 80 00 20 */ blr -.endfn _._16CubicCameraMover - -# .text:0x48E0 | size: 0x80 -.fn SetPovType__16CubicCameraMoveri, global -/* 000048E0 00011670 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 000048E4 00011674 7C 08 02 A6 */ mflr r0 -/* 000048E8 00011678 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 000048EC 0001167C 90 01 00 1C */ stw r0, 0x1c(r1) -/* 000048F0 00011680 7C 7E 1B 78 */ mr r30, r3 -/* 000048F4 00011684 7C 9F 23 78 */ mr r31, r4 -/* 000048F8 00011688 80 7E 00 9C */ lwz r3, 0x9c(r30) -/* 000048FC 0001168C 7C 1F 18 00 */ cmpw r31, r3 -/* 00004900 00011690 41 82 49 4C */ beq .L_0000924C -/* 00004904 00011694 48 00 0F 8D */ bl .L_00005890 -/* 00004908 00011698 7C 7D 1B 78 */ mr r29, r3 -/* 0000490C 0001169C 7F E3 FB 78 */ mr r3, r31 -/* 00004910 000116A0 48 00 0F 8D */ bl .L_0000589C -/* 00004914 000116A4 39 7E 00 A8 */ addi r11, r30, 0xa8 -/* 00004918 000116A8 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000491C 000116AC 39 40 00 00 */ li r10, 0x0 -/* 00004920 000116B0 41 82 49 2C */ beq .L_0000924C -/* 00004924 000116B4 2C 1D 00 00 */ cmpwi r29, 0x0 -/* 00004928 000116B8 40 82 49 30 */ bne .L_00009258 -/* 0000492C 000116BC 39 40 00 01 */ li r10, 0x1 -/* 00004930 000116C0 80 0B 00 00 */ lwz r0, 0x0(r11) -/* 00004934 000116C4 39 20 00 01 */ li r9, 0x1 -/* 00004938 000116C8 7C 08 53 79 */ or. r8, r0, r10 -/* 0000493C 000116CC 40 82 49 44 */ bne .L_00009280 -.L_00004940: -/* 00004940 000116D0 39 20 00 00 */ li r9, 0x0 -/* 00004944 000116D4 91 2B 00 00 */ stw r9, 0x0(r11) -/* 00004948 000116D8 93 FE 00 98 */ stw r31, 0x98(r30) -/* 0000494C 000116DC 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 00004950 000116E0 7C 08 03 A6 */ mtlr r0 -/* 00004954 000116E4 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 00004958 000116E8 38 21 00 18 */ addi r1, r1, 0x18 -/* 0000495C 000116EC 4E 80 00 20 */ blr -.endfn SetPovType__16CubicCameraMoveri - -# .text:0x4960 | size: 0x150 -# CubicCameraMover::ResetState -.fn ResetState__16CubicCameraMover, global -/* 00004960 000116F0 81 23 00 94 */ lwz r9, 0x94(r3) -/* 00004964 000116F4 39 40 00 00 */ li r10, 0x0 -/* 00004968 000116F8 3D 00 00 00 */ lis r8, RealTimeFrames@ha -/* 0000496C 000116FC 3C E0 00 00 */ lis r7, .rodata+0x61C@ha -.L_00004970: -/* 00004970 00011700 C0 09 00 08 */ lfs f0, 0x8(r9) -/* 00004974 00011704 38 C0 00 01 */ li r6, 0x1 -/* 00004978 00011708 C1 A9 00 0C */ lfs f13, 0xc(r9) -/* 0000497C 0001170C C1 89 00 34 */ lfs f12, 0x34(r9) -/* 00004980 00011710 C1 69 00 38 */ lfs f11, 0x38(r9) -/* 00004984 00011714 C1 49 00 60 */ lfs f10, 0x60(r9) -/* 00004988 00011718 C1 29 00 64 */ lfs f9, 0x64(r9) -/* 0000498C 0001171C D0 09 00 00 */ stfs f0, 0x0(r9) -/* 00004990 00011720 D1 29 00 5C */ stfs f9, 0x5c(r9) -/* 00004994 00011724 D1 A9 00 04 */ stfs f13, 0x4(r9) -/* 00004998 00011728 D1 89 00 2C */ stfs f12, 0x2c(r9) -/* 0000499C 0001172C D1 69 00 30 */ stfs f11, 0x30(r9) -/* 000049A0 00011730 D1 49 00 58 */ stfs f10, 0x58(r9) -/* 000049A4 00011734 B1 49 00 80 */ sth r10, 0x80(r9) -/* 000049A8 00011738 B1 49 00 28 */ sth r10, 0x28(r9) -/* 000049AC 0001173C B1 49 00 54 */ sth r10, 0x54(r9) -/* 000049B0 00011740 81 63 00 84 */ lwz r11, 0x84(r3) -/* 000049B4 00011744 C0 0B 00 08 */ lfs f0, 0x8(r11) -/* 000049B8 00011748 C1 AB 00 0C */ lfs f13, 0xc(r11) -/* 000049BC 0001174C D0 0B 00 00 */ stfs f0, 0x0(r11) -/* 000049C0 00011750 D1 AB 00 04 */ stfs f13, 0x4(r11) -/* 000049C4 00011754 B1 4B 00 28 */ sth r10, 0x28(r11) -/* 000049C8 00011758 81 23 00 88 */ lwz r9, 0x88(r3) -/* 000049CC 0001175C C0 09 00 08 */ lfs f0, 0x8(r9) -/* 000049D0 00011760 C1 A9 00 0C */ lfs f13, 0xc(r9) -/* 000049D4 00011764 C1 89 00 34 */ lfs f12, 0x34(r9) -/* 000049D8 00011768 C1 69 00 38 */ lfs f11, 0x38(r9) -/* 000049DC 0001176C C1 49 00 60 */ lfs f10, 0x60(r9) -/* 000049E0 00011770 D0 09 00 00 */ stfs f0, 0x0(r9) -/* 000049E4 00011774 D1 A9 00 04 */ stfs f13, 0x4(r9) -/* 000049E8 00011778 D1 89 00 2C */ stfs f12, 0x2c(r9) -/* 000049EC 0001177C D1 69 00 30 */ stfs f11, 0x30(r9) -/* 000049F0 00011780 B1 49 00 28 */ sth r10, 0x28(r9) -/* 000049F4 00011784 B1 49 00 54 */ sth r10, 0x54(r9) -.L_000049F8: -/* 000049F8 00011788 D1 49 00 58 */ stfs f10, 0x58(r9) -/* 000049FC 0001178C C0 09 00 64 */ lfs f0, 0x64(r9) -/* 00004A00 00011790 B1 49 00 80 */ sth r10, 0x80(r9) -/* 00004A04 00011794 D0 09 00 5C */ stfs f0, 0x5c(r9) -/* 00004A08 00011798 81 63 00 8C */ lwz r11, 0x8c(r3) -/* 00004A0C 0001179C C0 0B 00 08 */ lfs f0, 0x8(r11) -/* 00004A10 000117A0 C1 AB 00 0C */ lfs f13, 0xc(r11) -/* 00004A14 000117A4 C1 8B 00 34 */ lfs f12, 0x34(r11) -/* 00004A18 000117A8 C1 6B 00 38 */ lfs f11, 0x38(r11) -/* 00004A1C 000117AC C1 4B 00 60 */ lfs f10, 0x60(r11) -/* 00004A20 000117B0 C1 2B 00 64 */ lfs f9, 0x64(r11) -.L_00004A24: -/* 00004A24 000117B4 D0 0B 00 00 */ stfs f0, 0x0(r11) -/* 00004A28 000117B8 D1 AB 00 04 */ stfs f13, 0x4(r11) -/* 00004A2C 000117BC D1 8B 00 2C */ stfs f12, 0x2c(r11) -/* 00004A30 000117C0 D1 6B 00 30 */ stfs f11, 0x30(r11) -/* 00004A34 000117C4 D1 4B 00 58 */ stfs f10, 0x58(r11) -/* 00004A38 000117C8 D1 2B 00 5C */ stfs f9, 0x5c(r11) -/* 00004A3C 000117CC B1 4B 00 80 */ sth r10, 0x80(r11) -/* 00004A40 000117D0 B1 4B 00 28 */ sth r10, 0x28(r11) -/* 00004A44 000117D4 B1 4B 00 54 */ sth r10, 0x54(r11) -/* 00004A48 000117D8 81 23 00 90 */ lwz r9, 0x90(r3) -.L_00004A4C: -/* 00004A4C 000117DC C0 09 00 08 */ lfs f0, 0x8(r9) -/* 00004A50 000117E0 C1 A9 00 0C */ lfs f13, 0xc(r9) -/* 00004A54 000117E4 C1 89 00 34 */ lfs f12, 0x34(r9) -/* 00004A58 000117E8 C1 69 00 38 */ lfs f11, 0x38(r9) -/* 00004A5C 000117EC C1 49 00 60 */ lfs f10, 0x60(r9) -/* 00004A60 000117F0 D0 09 00 00 */ stfs f0, 0x0(r9) -/* 00004A64 000117F4 C1 29 00 64 */ lfs f9, 0x64(r9) -/* 00004A68 000117F8 D1 A9 00 04 */ stfs f13, 0x4(r9) -/* 00004A6C 000117FC D1 89 00 2C */ stfs f12, 0x2c(r9) -/* 00004A70 00011800 D1 69 00 30 */ stfs f11, 0x30(r9) -/* 00004A74 00011804 D1 49 00 58 */ stfs f10, 0x58(r9) -/* 00004A78 00011808 B1 49 00 28 */ sth r10, 0x28(r9) -/* 00004A7C 0001180C B1 49 00 54 */ sth r10, 0x54(r9) -/* 00004A80 00011810 D1 29 00 5C */ stfs f9, 0x5c(r9) -/* 00004A84 00011814 B1 49 00 80 */ sth r10, 0x80(r9) -/* 00004A88 00011818 80 08 00 00 */ lwz r0, RealTimeFrames@l(r8) -/* 00004A8C 0001181C 81 23 00 1C */ lwz r9, 0x1c(r3) -/* 00004A90 00011820 C0 07 06 1C */ lfs f0, .rodata+0x61C@l(r7) -/* 00004A94 00011824 90 09 02 88 */ stw r0, 0x288(r9) -.L_00004A98: -/* 00004A98 00011828 90 C9 02 7C */ stw r6, 0x27c(r9) -/* 00004A9C 0001182C D0 03 00 DC */ stfs f0, 0xdc(r3) -/* 00004AA0 00011830 D0 03 00 D8 */ stfs f0, 0xd8(r3) -/* 00004AA4 00011834 D0 03 00 D4 */ stfs f0, 0xd4(r3) -/* 00004AA8 00011838 D0 03 00 E0 */ stfs f0, 0xe0(r3) -/* 00004AAC 0001183C 4E 80 00 20 */ blr -.endfn ResetState__16CubicCameraMover - -# .text:0x4AB0 | size: 0x80 -.fn __6Bezier, global -/* 00004AB0 00011840 3C E0 00 00 */ lis r7, .rodata+0x620@ha -/* 00004AB4 00011844 3C A0 00 00 */ lis r5, .rodata+0x624@ha -/* 00004AB8 00011848 3D 40 00 00 */ lis r10, .rodata+0x628@ha -/* 00004ABC 0001184C 3C C0 00 00 */ lis r6, .rodata+0x62C@ha -/* 00004AC0 00011850 3D 60 00 00 */ lis r11, .rodata+0x630@ha -/* 00004AC4 00011854 3D 00 00 00 */ lis r8, .rodata+0x634@ha -/* 00004AC8 00011858 C1 8B 06 30 */ lfs f12, .rodata+0x630@l(r11) -/* 00004ACC 0001185C 7C 69 1B 78 */ mr r9, r3 -/* 00004AD0 00011860 C1 6A 06 28 */ lfs f11, .rodata+0x628@l(r10) -/* 00004AD4 00011864 38 00 00 00 */ li r0, 0x0 -/* 00004AD8 00011868 C1 27 06 20 */ lfs f9, .rodata+0x620@l(r7) -/* 00004ADC 0001186C C1 45 06 24 */ lfs f10, .rodata+0x624@l(r5) -/* 00004AE0 00011870 C0 06 06 2C */ lfs f0, .rodata+0x62C@l(r6) -/* 00004AE4 00011874 C1 A8 06 34 */ lfs f13, .rodata+0x634@l(r8) -/* 00004AE8 00011878 90 09 00 00 */ stw r0, 0x0(r9) -/* 00004AEC 0001187C D0 09 00 10 */ stfs f0, 0x10(r9) -/* 00004AF0 00011880 D1 A9 00 1C */ stfs f13, 0x1c(r9) -/* 00004AF4 00011884 D1 69 00 2C */ stfs f11, 0x2c(r9) -/* 00004AF8 00011888 D1 49 00 30 */ stfs f10, 0x30(r9) -/* 00004AFC 0001188C D1 89 00 3C */ stfs f12, 0x3c(r9) -/* 00004B00 00011890 D1 29 00 40 */ stfs f9, 0x40(r9) -.L_00004B04: -/* 00004B04 00011894 D1 29 00 04 */ stfs f9, 0x4(r9) -/* 00004B08 00011898 D1 49 00 08 */ stfs f10, 0x8(r9) -/* 00004B0C 0001189C D1 69 00 0C */ stfs f11, 0xc(r9) -/* 00004B10 000118A0 D1 89 00 14 */ stfs f12, 0x14(r9) -.L_00004B14: -/* 00004B14 000118A4 D1 69 00 18 */ stfs f11, 0x18(r9) -/* 00004B18 000118A8 D1 69 00 20 */ stfs f11, 0x20(r9) -/* 00004B1C 000118AC D1 89 00 24 */ stfs f12, 0x24(r9) -/* 00004B20 000118B0 D1 89 00 28 */ stfs f12, 0x28(r9) -/* 00004B24 000118B4 D1 89 00 34 */ stfs f12, 0x34(r9) -/* 00004B28 000118B8 D1 89 00 38 */ stfs f12, 0x38(r9) -/* 00004B2C 000118BC 4E 80 00 20 */ blr -.endfn __6Bezier - -# .text:0x4B30 | size: 0x80 -.fn GetPoint__6BezierP8bVector3f, global -/* 00004B30 000118C0 94 21 FF C8 */ stwu r1, -0x38(r1) -/* 00004B34 000118C4 7C 08 02 A6 */ mflr r0 -/* 00004B38 000118C8 BF A1 00 2C */ stmw r29, 0x2c(r1) -/* 00004B3C 000118CC 90 01 00 3C */ stw r0, 0x3c(r1) -/* 00004B40 000118D0 7C 7F 1B 78 */ mr r31, r3 -/* 00004B44 000118D4 7C 9D 23 78 */ mr r29, r4 -/* 00004B48 000118D8 80 1F 00 00 */ lwz r0, 0x0(r31) -/* 00004B4C 000118DC 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00004B50 000118E0 41 82 4B 9C */ beq .L_000096EC -/* 00004B54 000118E4 3D 20 00 00 */ lis r9, .rodata+0x638@ha -/* 00004B58 000118E8 3B C1 00 18 */ addi r30, r1, 0x18 -/* 00004B5C 000118EC C1 89 06 38 */ lfs f12, .rodata+0x638@l(r9) -/* 00004B60 000118F0 7F C3 F3 78 */ mr r3, r30 -/* 00004B64 000118F4 38 9F 00 04 */ addi r4, r31, 0x4 -/* 00004B68 000118F8 38 A1 00 08 */ addi r5, r1, 0x8 -/* 00004B6C 000118FC EC 0C 08 28 */ fsubs f0, f12, f1 -/* 00004B70 00011900 D1 81 00 14 */ stfs f12, 0x14(r1) -/* 00004B74 00011904 ED A0 00 32 */ fmuls f13, f0, f0 -/* 00004B78 00011908 D0 01 00 10 */ stfs f0, 0x10(r1) -/* 00004B7C 0001190C EC 00 03 72 */ fmuls f0, f0, f13 -/* 00004B80 00011910 D1 A1 00 0C */ stfs f13, 0xc(r1) -/* 00004B84 00011914 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 00004B88 00011918 48 00 00 01 */ bl bMulMatrix__FP8bVector4PC8bMatrix4PC8bVector4 -/* 00004B8C 0001191C 80 9F 00 00 */ lwz r4, 0x0(r31) -/* 00004B90 00011920 7F A3 EB 78 */ mr r3, r29 -/* 00004B94 00011924 7F C5 F3 78 */ mr r5, r30 -/* 00004B98 00011928 48 00 00 01 */ bl bMulMatrix__FP8bVector4PC8bMatrix4PC8bVector4 -/* 00004B9C 0001192C 80 01 00 3C */ lwz r0, 0x3c(r1) -/* 00004BA0 00011930 7C 08 03 A6 */ mtlr r0 -/* 00004BA4 00011934 BB A1 00 2C */ lmw r29, 0x2c(r1) -/* 00004BA8 00011938 38 21 00 38 */ addi r1, r1, 0x38 -/* 00004BAC 0001193C 4E 80 00 20 */ blr -.endfn GetPoint__6BezierP8bVector3f - -# .text:0x4BB0 | size: 0x60 -.fn __25RearViewMirrorCameraMoveriP12CameraAnchor, global -/* 00004BB0 00011940 94 21 FF F0 */ stwu r1, -0x10(r1) -.L_00004BB4: -/* 00004BB4 00011944 7C 08 02 A6 */ mflr r0 -/* 00004BB8 00011948 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 00004BBC 0001194C 90 01 00 14 */ stw r0, 0x14(r1) -/* 00004BC0 00011950 7C 7F 1B 78 */ mr r31, r3 -/* 00004BC4 00011954 7C BE 2B 78 */ mr r30, r5 -/* 00004BC8 00011958 38 A0 00 05 */ li r5, 0x5 -/* 00004BCC 0001195C 48 00 1F 1D */ bl .L_00006AE8 -/* 00004BD0 00011960 3D 60 00 00 */ lis r11, _6Camera.StopUpdating@ha -/* 00004BD4 00011964 3D 20 00 00 */ lis r9, _vt.25RearViewMirrorCameraMover@ha -/* 00004BD8 00011968 80 0B 00 00 */ lwz r0, _6Camera.StopUpdating@l(r11) -/* 00004BDC 0001196C 39 29 00 00 */ addi r9, r9, _vt.25RearViewMirrorCameraMover@l -/* 00004BE0 00011970 91 3F 00 08 */ stw r9, 0x8(r31) -/* 00004BE4 00011974 93 DF 00 80 */ stw r30, 0x80(r31) -/* 00004BE8 00011978 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00004BEC 0001197C 40 82 4B F8 */ bne .L_000097E4 -/* 00004BF0 00011980 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 00004BF4 00011984 90 09 02 8C */ stw r0, 0x28c(r9) -/* 00004BF8 00011988 7F E3 FB 78 */ mr r3, r31 -/* 00004BFC 0001198C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 00004C00 00011990 7C 08 03 A6 */ mtlr r0 -/* 00004C04 00011994 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 00004C08 00011998 38 21 00 10 */ addi r1, r1, 0x10 -/* 00004C0C 0001199C 4E 80 00 20 */ blr -.endfn __25RearViewMirrorCameraMoveriP12CameraAnchor - -# .text:0x4C10 | size: 0x30 -.fn _._25RearViewMirrorCameraMover, global -/* 00004C10 000119A0 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 00004C14 000119A4 7C 08 02 A6 */ mflr r0 -/* 00004C18 000119A8 90 01 00 0C */ stw r0, 0xc(r1) -/* 00004C1C 000119AC 3D 20 00 00 */ lis r9, _vt.25RearViewMirrorCameraMover@ha -/* 00004C20 000119B0 7C 6B 1B 78 */ mr r11, r3 -/* 00004C24 000119B4 39 29 00 00 */ addi r9, r9, _vt.25RearViewMirrorCameraMover@l -/* 00004C28 000119B8 91 2B 00 08 */ stw r9, 0x8(r11) -/* 00004C2C 000119BC 48 00 20 35 */ bl .L_00006C60 -/* 00004C30 000119C0 80 01 00 0C */ lwz r0, 0xc(r1) -/* 00004C34 000119C4 7C 08 03 A6 */ mtlr r0 -/* 00004C38 000119C8 38 21 00 08 */ addi r1, r1, 0x8 -/* 00004C3C 000119CC 4E 80 00 20 */ blr -.endfn _._25RearViewMirrorCameraMover - -# .text:0x4C40 | size: 0x188 -.fn Update__25RearViewMirrorCameraMoverf, global -/* 00004C40 000119D0 94 21 FE D8 */ stwu r1, -0x128(r1) -/* 00004C44 000119D4 7C 08 02 A6 */ mflr r0 -/* 00004C48 000119D8 F3 E1 01 20 */ psq_st f31, 0x120(r1), 0, qr0 -/* 00004C4C 000119DC BF 61 01 0C */ stmw r27, 0x10c(r1) -/* 00004C50 000119E0 90 01 01 2C */ stw r0, 0x12c(r1) -/* 00004C54 000119E4 3D 20 00 00 */ lis r9, FEDatabase@ha -/* 00004C58 000119E8 7C 7F 1B 78 */ mr r31, r3 -/* 00004C5C 000119EC 81 69 00 00 */ lwz r11, FEDatabase@l(r9) -/* 00004C60 000119F0 FF E0 08 90 */ fmr f31, f1 -/* 00004C64 000119F4 81 2B 00 20 */ lwz r9, 0x20(r11) -/* 00004C68 000119F8 80 09 00 3C */ lwz r0, 0x3c(r9) -/* 00004C6C 000119FC 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00004C70 00011A00 41 82 4D B0 */ beq .L_00009A20 -/* 00004C74 00011A04 3B 81 00 08 */ addi r28, r1, 0x8 -/* 00004C78 00011A08 3B C1 00 48 */ addi r30, r1, 0x48 -/* 00004C7C 00011A0C 3B A1 00 88 */ addi r29, r1, 0x88 -/* 00004C80 00011A10 7F 83 E3 78 */ mr r3, r28 -.L_00004C84: -/* 00004C84 00011A14 48 00 00 01 */ bl PSMTX44Identity -/* 00004C88 00011A18 81 3F 00 80 */ lwz r9, 0x80(r31) -/* 00004C8C 00011A1C 3B 61 00 C8 */ addi r27, r1, 0xc8 -/* 00004C90 00011A20 7F A4 EB 78 */ mr r4, r29 -/* 00004C94 00011A24 C1 A9 00 18 */ lfs f13, 0x18(r9) -/* 00004C98 00011A28 38 69 00 48 */ addi r3, r9, 0x48 -/* 00004C9C 00011A2C FD A0 68 50 */ fneg f13, f13 -/* 00004CA0 00011A30 D1 A1 00 38 */ stfs f13, 0x38(r1) -/* 00004CA4 00011A34 C0 09 00 1C */ lfs f0, 0x1c(r9) -/* 00004CA8 00011A38 FC 00 00 50 */ fneg f0, f0 -/* 00004CAC 00011A3C D0 01 00 3C */ stfs f0, 0x3c(r1) -/* 00004CB0 00011A40 C1 A9 00 20 */ lfs f13, 0x20(r9) -/* 00004CB4 00011A44 FD A0 68 50 */ fneg f13, f13 -/* 00004CB8 00011A48 D1 A1 00 40 */ stfs f13, 0x40(r1) -/* 00004CBC 00011A4C 48 00 00 01 */ bl PSMTX44Copy -/* 00004CC0 00011A50 38 61 00 48 */ addi r3, r1, 0x48 -/* 00004CC4 00011A54 7F A4 EB 78 */ mr r4, r29 -/* 00004CC8 00011A58 48 00 00 01 */ bl bTransposeMatrix__FP8bMatrix4PC8bMatrix4 -/* 00004CCC 00011A5C 3D 20 00 00 */ lis r9, .rodata+0x63C@ha -/* 00004CD0 00011A60 7F C3 F3 78 */ mr r3, r30 -/* 00004CD4 00011A64 C0 09 06 3C */ lfs f0, .rodata+0x63C@l(r9) -/* 00004CD8 00011A68 7F C4 F3 78 */ mr r4, r30 -/* 00004CDC 00011A6C 38 A0 40 00 */ li r5, 0x4000 -/* 00004CE0 00011A70 D0 01 00 74 */ stfs f0, 0x74(r1) -/* 00004CE4 00011A74 D0 01 00 54 */ stfs f0, 0x54(r1) -/* 00004CE8 00011A78 D0 01 00 64 */ stfs f0, 0x64(r1) -/* 00004CEC 00011A7C 48 00 00 01 */ bl eRotateX__FP8bMatrix4T0Us -/* 00004CF0 00011A80 7F C3 F3 78 */ mr r3, r30 -/* 00004CF4 00011A84 7F C4 F3 78 */ mr r4, r30 -.L_00004CF8: -/* 00004CF8 00011A88 38 A0 40 00 */ li r5, 0x4000 -/* 00004CFC 00011A8C 48 00 00 01 */ bl eRotateY__FP8bMatrix4T0Us -/* 00004D00 00011A90 7F C3 F3 78 */ mr r3, r30 -/* 00004D04 00011A94 7F C4 F3 78 */ mr r4, r30 -/* 00004D08 00011A98 38 A0 00 00 */ li r5, 0x0 -/* 00004D0C 00011A9C 48 00 00 01 */ bl eRotateZ__FP8bMatrix4T0Us -/* 00004D10 00011AA0 7F 84 E3 78 */ mr r4, r28 -/* 00004D14 00011AA4 7F C5 F3 78 */ mr r5, r30 -/* 00004D18 00011AA8 7F 63 DB 78 */ mr r3, r27 -/* 00004D1C 00011AAC 48 00 00 01 */ bl eMulMatrix__FP8bMatrix4N20 -/* 00004D20 00011AB0 3D 20 00 00 */ lis r9, RVMOffsetInCar@ha -/* 00004D24 00011AB4 C1 81 00 F8 */ lfs f12, 0xf8(r1) -/* 00004D28 00011AB8 C1 69 00 00 */ lfs f11, RVMOffsetInCar@l(r9) -/* 00004D2C 00011ABC 39 69 00 00 */ addi r11, r9, RVMOffsetInCar@l -/* 00004D30 00011AC0 C1 4B 00 08 */ lfs f10, 0x8(r11) -/* 00004D34 00011AC4 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha -/* 00004D38 00011AC8 ED 8C 58 2A */ fadds f12, f12, f11 -/* 00004D3C 00011ACC C0 01 00 FC */ lfs f0, 0xfc(r1) -/* 00004D40 00011AD0 C1 6B 00 04 */ lfs f11, 0x4(r11) -/* 00004D44 00011AD4 C1 A1 01 00 */ lfs f13, 0x100(r1) -/* 00004D48 00011AD8 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) -/* 00004D4C 00011ADC EC 00 58 2A */ fadds f0, f0, f11 -/* 00004D50 00011AE0 ED AD 50 2A */ fadds f13, f13, f10 -/* 00004D54 00011AE4 D1 81 00 F8 */ stfs f12, 0xf8(r1) -/* 00004D58 00011AE8 D0 01 00 FC */ stfs f0, 0xfc(r1) -/* 00004D5C 00011AEC 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00004D60 00011AF0 D1 A1 01 00 */ stfs f13, 0x100(r1) -/* 00004D64 00011AF4 40 82 4D 74 */ bne .L_00009AD8 -/* 00004D68 00011AF8 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 00004D6C 00011AFC 38 00 4E 20 */ li r0, 0x4e20 -/* 00004D70 00011B00 B0 09 00 C4 */ sth r0, 0xc4(r9) -/* 00004D74 00011B04 3D 60 00 00 */ lis r11, RVMnearz@ha -/* 00004D78 00011B08 81 5F 00 1C */ lwz r10, 0x1c(r31) -/* 00004D7C 00011B0C C0 0B 00 00 */ lfs f0, RVMnearz@l(r11) -/* 00004D80 00011B10 3D 20 00 00 */ lis r9, RVMfarz@ha -/* 00004D84 00011B14 C1 A9 00 00 */ lfs f13, RVMfarz@l(r9) -/* 00004D88 00011B18 7F 64 DB 78 */ mr r4, r27 -/* 00004D8C 00011B1C D0 0A 00 BC */ stfs f0, 0xbc(r10) -/* 00004D90 00011B20 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 00004D94 00011B24 D1 A9 00 C0 */ stfs f13, 0xc0(r9) -/* 00004D98 00011B28 80 7F 00 10 */ lwz r3, 0x10(r31) -/* 00004D9C 00011B2C 48 00 00 01 */ bl ApplyCameraShake__FiP8bMatrix4 -/* 00004DA0 00011B30 80 7F 00 1C */ lwz r3, 0x1c(r31) -/* 00004DA4 00011B34 7F 64 DB 78 */ mr r4, r27 -/* 00004DA8 00011B38 FC 20 F8 90 */ fmr f1, f31 -/* 00004DAC 00011B3C 48 00 04 ED */ bl .L_00005298 -/* 00004DB0 00011B40 80 01 01 2C */ lwz r0, 0x12c(r1) -/* 00004DB4 00011B44 7C 08 03 A6 */ mtlr r0 -/* 00004DB8 00011B48 BB 61 01 0C */ lmw r27, 0x10c(r1) -/* 00004DBC 00011B4C E3 E1 01 20 */ psq_l f31, 0x120(r1), 0, qr0 -/* 00004DC0 00011B50 38 21 01 28 */ addi r1, r1, 0x128 -/* 00004DC4 00011B54 4E 80 00 20 */ blr -.endfn Update__25RearViewMirrorCameraMoverf - -# .text:0x4DC8 | size: 0xA8 -.fn __19TrackCarCameraMoveriP12CameraAnchorb, global -/* 00004DC8 00011B58 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 00004DCC 00011B5C 7C 08 02 A6 */ mflr r0 -/* 00004DD0 00011B60 BF 81 00 08 */ stmw r28, 0x8(r1) -/* 00004DD4 00011B64 90 01 00 1C */ stw r0, 0x1c(r1) -/* 00004DD8 00011B68 7C 7E 1B 78 */ mr r30, r3 -.L_00004DDC: -/* 00004DDC 00011B6C 7C BD 2B 78 */ mr r29, r5 -/* 00004DE0 00011B70 7C DC 33 78 */ mr r28, r6 -/* 00004DE4 00011B74 38 A0 00 06 */ li r5, 0x6 -/* 00004DE8 00011B78 48 00 1F 1D */ bl .L_00006D04 -/* 00004DEC 00011B7C 3D 20 00 00 */ lis r9, _vt.19TrackCarCameraMover@ha -/* 00004DF0 00011B80 93 BE 00 A0 */ stw r29, 0xa0(r30) -/* 00004DF4 00011B84 39 29 00 00 */ addi r9, r9, _vt.19TrackCarCameraMover@l -/* 00004DF8 00011B88 3D 60 00 00 */ lis r11, .rodata+0x640@ha -/* 00004DFC 00011B8C 91 3E 00 08 */ stw r9, 0x8(r30) -/* 00004E00 00011B90 3D 40 00 00 */ lis r10, .rodata+0x644@ha -/* 00004E04 00011B94 C1 AB 06 40 */ lfs f13, .rodata+0x640@l(r11) -/* 00004E08 00011B98 39 00 00 01 */ li r8, 0x1 -/* 00004E0C 00011B9C C0 0A 06 44 */ lfs f0, .rodata+0x644@l(r10) -/* 00004E10 00011BA0 38 00 00 00 */ li r0, 0x0 -/* 00004E14 00011BA4 39 20 00 00 */ li r9, 0x0 -.L_00004E18: -/* 00004E18 00011BA8 93 9E 00 D0 */ stw r28, 0xd0(r30) -/* 00004E1C 00011BAC 7F C3 F3 78 */ mr r3, r30 -/* 00004E20 00011BB0 D1 BE 00 C8 */ stfs f13, 0xc8(r30) -/* 00004E24 00011BB4 B0 1E 00 CC */ sth r0, 0xcc(r30) -/* 00004E28 00011BB8 B1 1E 00 CE */ sth r8, 0xce(r30) -/* 00004E2C 00011BBC D0 1E 00 C0 */ stfs f0, 0xc0(r30) -/* 00004E30 00011BC0 91 3E 00 D4 */ stw r9, 0xd4(r30) -/* 00004E34 00011BC4 D0 1E 00 A4 */ stfs f0, 0xa4(r30) -/* 00004E38 00011BC8 D0 1E 00 A8 */ stfs f0, 0xa8(r30) -.L_00004E3C: -/* 00004E3C 00011BCC D0 1E 00 AC */ stfs f0, 0xac(r30) -/* 00004E40 00011BD0 D0 1E 00 B0 */ stfs f0, 0xb0(r30) -/* 00004E44 00011BD4 D0 1E 00 C4 */ stfs f0, 0xc4(r30) -/* 00004E48 00011BD8 D0 1E 00 B4 */ stfs f0, 0xb4(r30) -/* 00004E4C 00011BDC D0 1E 00 B8 */ stfs f0, 0xb8(r30) -/* 00004E50 00011BE0 D0 1E 00 BC */ stfs f0, 0xbc(r30) -/* 00004E54 00011BE4 48 00 4E 71 */ bl .L_00009CC4 -/* 00004E58 00011BE8 7F C3 F3 78 */ mr r3, r30 -/* 00004E5C 00011BEC 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 00004E60 00011BF0 7C 08 03 A6 */ mtlr r0 -/* 00004E64 00011BF4 BB 81 00 08 */ lmw r28, 0x8(r1) -/* 00004E68 00011BF8 38 21 00 18 */ addi r1, r1, 0x18 -/* 00004E6C 00011BFC 4E 80 00 20 */ blr -.endfn __19TrackCarCameraMoveriP12CameraAnchorb - -# .text:0x4E70 | size: 0x134 -# TrackCarCameraMover::Init -.fn Init__19TrackCarCameraMover, global -/* 00004E70 00011C00 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 00004E74 00011C04 7C 08 02 A6 */ mflr r0 -/* 00004E78 00011C08 BF C1 00 18 */ stmw r30, 0x18(r1) -/* 00004E7C 00011C0C 90 01 00 24 */ stw r0, 0x24(r1) -/* 00004E80 00011C10 7C 7E 1B 78 */ mr r30, r3 -/* 00004E84 00011C14 38 00 00 00 */ li r0, 0x0 -/* 00004E88 00011C18 90 1E 00 D4 */ stw r0, 0xd4(r30) -/* 00004E8C 00011C1C 3D 60 00 00 */ lis r11, TrackCarIsoZoomDistance@ha -/* 00004E90 00011C20 81 3E 00 A0 */ lwz r9, 0xa0(r30) -/* 00004E94 00011C24 3D 00 00 00 */ lis r8, TrackCarLookOffsetX@ha -/* 00004E98 00011C28 3C E0 00 00 */ lis r7, TrackCarLookOffsetY@ha -/* 00004E9C 00011C2C 3D 40 00 00 */ lis r10, TrackCarLookOffsetZ@ha -/* 00004EA0 00011C30 C1 69 00 20 */ lfs f11, 0x20(r9) -/* 00004EA4 00011C34 38 61 00 08 */ addi r3, r1, 0x8 -/* 00004EA8 00011C38 C0 09 00 18 */ lfs f0, 0x18(r9) -/* 00004EAC 00011C3C 38 89 00 48 */ addi r4, r9, 0x48 -/* 00004EB0 00011C40 C1 A9 00 1C */ lfs f13, 0x1c(r9) -/* 00004EB4 00011C44 7C 65 1B 78 */ mr r5, r3 -/* 00004EB8 00011C48 D1 7E 00 88 */ stfs f11, 0x88(r30) -/* 00004EBC 00011C4C 3B FE 00 80 */ addi r31, r30, 0x80 -/* 00004EC0 00011C50 D0 1E 00 80 */ stfs f0, 0x80(r30) -/* 00004EC4 00011C54 D1 BE 00 84 */ stfs f13, 0x84(r30) -/* 00004EC8 00011C58 C0 09 00 18 */ lfs f0, 0x18(r9) -/* 00004ECC 00011C5C C1 A9 00 1C */ lfs f13, 0x1c(r9) -/* 00004ED0 00011C60 C1 89 00 20 */ lfs f12, 0x20(r9) -/* 00004ED4 00011C64 D0 1E 00 90 */ stfs f0, 0x90(r30) -.L_00004ED8: -/* 00004ED8 00011C68 D1 BE 00 94 */ stfs f13, 0x94(r30) -/* 00004EDC 00011C6C D1 9E 00 98 */ stfs f12, 0x98(r30) -/* 00004EE0 00011C70 C0 0B 00 00 */ lfs f0, TrackCarIsoZoomDistance@l(r11) -.L_00004EE4: -/* 00004EE4 00011C74 ED 6B 00 2A */ fadds f11, f11, f0 -/* 00004EE8 00011C78 D1 7E 00 88 */ stfs f11, 0x88(r30) -/* 00004EEC 00011C7C C0 08 00 00 */ lfs f0, TrackCarLookOffsetX@l(r8) -/* 00004EF0 00011C80 C1 A7 00 00 */ lfs f13, TrackCarLookOffsetY@l(r7) -/* 00004EF4 00011C84 C1 8A 00 00 */ lfs f12, TrackCarLookOffsetZ@l(r10) -/* 00004EF8 00011C88 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 00004EFC 00011C8C D1 A1 00 0C */ stfs f13, 0xc(r1) -/* 00004F00 00011C90 D1 81 00 10 */ stfs f12, 0x10(r1) -.L_00004F04: -/* 00004F04 00011C94 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 -/* 00004F08 00011C98 C1 81 00 08 */ lfs f12, 0x8(r1) -/* 00004F0C 00011C9C 3D 20 00 00 */ lis r9, .rodata+0x648@ha -/* 00004F10 00011CA0 C1 61 00 0C */ lfs f11, 0xc(r1) -/* 00004F14 00011CA4 3D 40 00 00 */ lis r10, RealTimeFrames@ha -.L_00004F18: -/* 00004F18 00011CA8 C1 41 00 10 */ lfs f10, 0x10(r1) -/* 00004F1C 00011CAC 3D 60 00 00 */ lis r11, _6Camera.StopUpdating@ha -/* 00004F20 00011CB0 C1 3E 00 90 */ lfs f9, 0x90(r30) -.L_00004F24: -/* 00004F24 00011CB4 38 E0 00 01 */ li r7, 0x1 -/* 00004F28 00011CB8 C1 1E 00 94 */ lfs f8, 0x94(r30) -.L_00004F2C: -/* 00004F2C 00011CBC C1 BE 00 98 */ lfs f13, 0x98(r30) -/* 00004F30 00011CC0 ED 29 60 2A */ fadds f9, f9, f12 -/* 00004F34 00011CC4 C0 09 06 48 */ lfs f0, .rodata+0x648@l(r9) -/* 00004F38 00011CC8 ED 08 58 2A */ fadds f8, f8, f11 -/* 00004F3C 00011CCC 80 0B 00 00 */ lwz r0, _6Camera.StopUpdating@l(r11) -/* 00004F40 00011CD0 ED AD 50 2A */ fadds f13, f13, f10 -/* 00004F44 00011CD4 81 0A 00 00 */ lwz r8, RealTimeFrames@l(r10) -/* 00004F48 00011CD8 81 3E 00 1C */ lwz r9, 0x1c(r30) -.L_00004F4C: -/* 00004F4C 00011CDC 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00004F50 00011CE0 D1 3E 00 90 */ stfs f9, 0x90(r30) -/* 00004F54 00011CE4 D1 1E 00 94 */ stfs f8, 0x94(r30) -/* 00004F58 00011CE8 D1 BE 00 98 */ stfs f13, 0x98(r30) -/* 00004F5C 00011CEC D0 1E 00 B0 */ stfs f0, 0xb0(r30) -/* 00004F60 00011CF0 D0 1E 00 A4 */ stfs f0, 0xa4(r30) -/* 00004F64 00011CF4 D0 1E 00 AC */ stfs f0, 0xac(r30) -/* 00004F68 00011CF8 D0 1E 00 A8 */ stfs f0, 0xa8(r30) -/* 00004F6C 00011CFC 91 09 02 88 */ stw r8, 0x288(r9) -/* 00004F70 00011D00 90 E9 02 7C */ stw r7, 0x27c(r9) -/* 00004F74 00011D04 40 82 4F 90 */ bne .L_00009F04 -/* 00004F78 00011D08 80 9E 00 A0 */ lwz r4, 0xa0(r30) -/* 00004F7C 00011D0C 7F E3 FB 78 */ mr r3, r31 -/* 00004F80 00011D10 83 DE 00 1C */ lwz r30, 0x1c(r30) -/* 00004F84 00011D14 38 84 00 18 */ addi r4, r4, 0x18 -/* 00004F88 00011D18 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 -/* 00004F8C 00011D1C D0 3E 00 B0 */ stfs f1, 0xb0(r30) -/* 00004F90 00011D20 80 01 00 24 */ lwz r0, 0x24(r1) -/* 00004F94 00011D24 7C 08 03 A6 */ mtlr r0 -/* 00004F98 00011D28 BB C1 00 18 */ lmw r30, 0x18(r1) -/* 00004F9C 00011D2C 38 21 00 20 */ addi r1, r1, 0x20 -/* 00004FA0 00011D30 4E 80 00 20 */ blr -.endfn Init__19TrackCarCameraMover - -# .text:0x4FA4 | size: 0x7C -.fn _._19TrackCarCameraMover, global -/* 00004FA4 00011D34 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 00004FA8 00011D38 7C 08 02 A6 */ mflr r0 -/* 00004FAC 00011D3C 90 01 00 0C */ stw r0, 0xc(r1) -/* 00004FB0 00011D40 3D 60 00 00 */ lis r11, .rodata+0x64C@ha -/* 00004FB4 00011D44 3D 20 00 00 */ lis r9, _vt.19TrackCarCameraMover@ha -/* 00004FB8 00011D48 C0 0B 06 4C */ lfs f0, .rodata+0x64C@l(r11) -.L_00004FBC: -/* 00004FBC 00011D4C 3D 40 00 00 */ lis r10, _6Camera.StopUpdating@ha -/* 00004FC0 00011D50 80 0A 00 00 */ lwz r0, _6Camera.StopUpdating@l(r10) -/* 00004FC4 00011D54 39 29 00 00 */ addi r9, r9, _vt.19TrackCarCameraMover@l -/* 00004FC8 00011D58 81 63 00 1C */ lwz r11, 0x1c(r3) -/* 00004FCC 00011D5C 91 23 00 08 */ stw r9, 0x8(r3) -/* 00004FD0 00011D60 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00004FD4 00011D64 D0 0B 00 CC */ stfs f0, 0xcc(r11) -/* 00004FD8 00011D68 40 82 4F F4 */ bne .L_00009FCC -/* 00004FDC 00011D6C 3D 20 00 00 */ lis r9, .rodata+0x650@ha -/* 00004FE0 00011D70 81 63 00 1C */ lwz r11, 0x1c(r3) -/* 00004FE4 00011D74 C0 09 06 50 */ lfs f0, .rodata+0x650@l(r9) -/* 00004FE8 00011D78 D0 0B 00 B4 */ stfs f0, 0xb4(r11) -/* 00004FEC 00011D7C 81 23 00 1C */ lwz r9, 0x1c(r3) -/* 00004FF0 00011D80 D0 09 00 B8 */ stfs f0, 0xb8(r9) -/* 00004FF4 00011D84 3D 20 00 00 */ lis r9, RealTimeFrames@ha -/* 00004FF8 00011D88 81 63 00 1C */ lwz r11, 0x1c(r3) -/* 00004FFC 00011D8C 81 49 00 00 */ lwz r10, RealTimeFrames@l(r9) -/* 00005000 00011D90 38 00 00 01 */ li r0, 0x1 -/* 00005004 00011D94 90 0B 02 7C */ stw r0, 0x27c(r11) -/* 00005008 00011D98 91 4B 02 88 */ stw r10, 0x288(r11) -/* 0000500C 00011D9C 48 00 20 35 */ bl .L_00007040 -/* 00005010 00011DA0 80 01 00 0C */ lwz r0, 0xc(r1) -/* 00005014 00011DA4 7C 08 03 A6 */ mtlr r0 -/* 00005018 00011DA8 38 21 00 08 */ addi r1, r1, 0x8 -/* 0000501C 00011DAC 4E 80 00 20 */ blr -.endfn _._19TrackCarCameraMover - -# .text:0x5020 | size: 0x36C -.fn Update__19TrackCarCameraMoverf, global -/* 00005020 00011DB0 94 21 FF 30 */ stwu r1, -0xd0(r1) -/* 00005024 00011DB4 7C 08 02 A6 */ mflr r0 -/* 00005028 00011DB8 F3 A1 00 B8 */ psq_st f29, 0xb8(r1), 0, qr0 -/* 0000502C 00011DBC F3 C1 00 C0 */ psq_st f30, 0xc0(r1), 0, qr0 -/* 00005030 00011DC0 F3 E1 00 C8 */ psq_st f31, 0xc8(r1), 0, qr0 -/* 00005034 00011DC4 BF 21 00 9C */ stmw r25, 0x9c(r1) -/* 00005038 00011DC8 90 01 00 D4 */ stw r0, 0xd4(r1) -/* 0000503C 00011DCC 7C 7F 1B 78 */ mr r31, r3 -/* 00005040 00011DD0 FF A0 08 90 */ fmr f29, f1 -.L_00005044: -/* 00005044 00011DD4 3C 60 00 00 */ lis r3, TheGameFlowManager@ha -/* 00005048 00011DD8 38 63 00 00 */ addi r3, r3, TheGameFlowManager@l -/* 0000504C 00011DDC 48 00 00 01 */ bl IsPaused__15GameFlowManager -.L_00005050: -/* 00005050 00011DE0 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00005054 00011DE4 40 82 53 6C */ bne .L_0000A3C0 -/* 00005058 00011DE8 3D 20 00 00 */ lis r9, .rodata+0x654@ha -/* 0000505C 00011DEC 3D 60 00 00 */ lis r11, .rodata+0x658@ha -/* 00005060 00011DF0 C0 29 06 54 */ lfs f1, .rodata+0x654@l(r9) -/* 00005064 00011DF4 39 41 00 08 */ addi r10, r1, 0x8 -/* 00005068 00011DF8 C1 2B 06 58 */ lfs f9, .rodata+0x658@l(r11) -/* 0000506C 00011DFC 3D 00 00 00 */ lis r8, .rodata+0x65C@ha -/* 00005070 00011E00 D0 21 00 08 */ stfs f1, 0x8(r1) -/* 00005074 00011E04 3D 60 00 00 */ lis r11, .rodata+0x660@ha -/* 00005078 00011E08 D0 21 00 0C */ stfs f1, 0xc(r1) -/* 0000507C 00011E0C 7D 59 53 78 */ mr r25, r10 -/* 00005080 00011E10 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 00005084 00011E14 D1 2A 00 08 */ stfs f9, 0x8(r10) -/* 00005088 00011E18 D1 29 00 CC */ stfs f9, 0xcc(r9) -/* 0000508C 00011E1C 81 3F 00 A0 */ lwz r9, 0xa0(r31) -/* 00005090 00011E20 C1 9F 00 80 */ lfs f12, 0x80(r31) -/* 00005094 00011E24 C1 A9 00 18 */ lfs f13, 0x18(r9) -/* 00005098 00011E28 C0 1F 00 84 */ lfs f0, 0x84(r31) -/* 0000509C 00011E2C C1 7F 00 88 */ lfs f11, 0x88(r31) -/* 000050A0 00011E30 ED 8C 68 28 */ fsubs f12, f12, f13 -/* 000050A4 00011E34 D1 81 00 18 */ stfs f12, 0x18(r1) -/* 000050A8 00011E38 C1 48 06 5C */ lfs f10, .rodata+0x65C@l(r8) -/* 000050AC 00011E3C C1 A9 00 1C */ lfs f13, 0x1c(r9) -/* 000050B0 00011E40 C1 0B 06 60 */ lfs f8, .rodata+0x660@l(r11) -/* 000050B4 00011E44 EC 00 68 28 */ fsubs f0, f0, f13 -/* 000050B8 00011E48 D0 01 00 1C */ stfs f0, 0x1c(r1) -/* 000050BC 00011E4C EC 00 00 32 */ fmuls f0, f0, f0 -/* 000050C0 00011E50 C1 A9 00 20 */ lfs f13, 0x20(r9) -/* 000050C4 00011E54 ED 8C 03 3A */ fmadds f12, f12, f12, f0 -/* 000050C8 00011E58 ED 6B 68 28 */ fsubs f11, f11, f13 -/* 000050CC 00011E5C ED 8B 62 FA */ fmadds f12, f11, f11, f12 -/* 000050D0 00011E60 D1 61 00 20 */ stfs f11, 0x20(r1) -/* 000050D4 00011E64 FC 0C 50 00 */ fcmpu cr0, f12, f10 -/* 000050D8 00011E68 4C 62 03 82 */ cror un, eq, lt -/* 000050DC 00011E6C 41 83 51 0C */ bso .L_0000A1E8 -/* 000050E0 00011E70 FF E0 60 34 */ frsqrte f31, f12 -/* 000050E4 00011E74 EC 1F 07 F2 */ fmuls f0, f31, f31 -/* 000050E8 00011E78 ED BF 02 32 */ fmuls f13, f31, f8 -/* 000050EC 00011E7C EC 0C 48 3C */ fnmsubs f0, f12, f0, f9 -/* 000050F0 00011E80 EF E0 FB 7A */ fmadds f31, f0, f13, f31 -/* 000050F4 00011E84 EC 1F 07 F2 */ fmuls f0, f31, f31 -/* 000050F8 00011E88 ED BF 02 32 */ fmuls f13, f31, f8 -/* 000050FC 00011E8C EC 0C 48 3C */ fnmsubs f0, f12, f0, f9 -/* 00005100 00011E90 EF E0 FB 7A */ fmadds f31, f0, f13, f31 -/* 00005104 00011E94 EF FF 03 32 */ fmuls f31, f31, f12 -/* 00005108 00011E98 48 00 51 10 */ b .L_0000A218 -/* 0000510C 00011E9C FF E0 08 90 */ fmr f31, f1 -/* 00005110 00011EA0 3D 20 00 00 */ lis r9, .rodata+0x654@ha -/* 00005114 00011EA4 3F 60 00 00 */ lis r27, _6Camera.StopUpdating@ha -/* 00005118 00011EA8 C0 09 06 54 */ lfs f0, .rodata+0x654@l(r9) -/* 0000511C 00011EAC FC 1F 00 00 */ fcmpu cr0, f31, f0 -/* 00005120 00011EB0 4C 62 03 82 */ cror un, eq, lt -/* 00005124 00011EB4 41 83 51 84 */ bso .L_0000A2A8 -/* 00005128 00011EB8 80 1F 00 D4 */ lwz r0, 0xd4(r31) -/* 0000512C 00011EBC 3D 20 00 00 */ lis r9, TrackCarIsoZoomDistance@ha -/* 00005130 00011EC0 39 29 00 00 */ addi r9, r9, TrackCarIsoZoomDistance@l -/* 00005134 00011EC4 FC 20 F8 90 */ fmr f1, f31 -/* 00005138 00011EC8 54 00 10 3A */ slwi r0, r0, 2 -/* 0000513C 00011ECC 7C 49 04 2E */ lfsx f2, r9, r0 -/* 00005140 00011ED0 48 00 00 01 */ bl bATan__Fff -/* 00005144 00011ED4 54 63 04 7E */ clrlwi r3, r3, 17 -/* 00005148 00011ED8 54 60 08 3C */ slwi r0, r3, 1 -/* 0000514C 00011EDC 2C 00 03 20 */ cmpwi r0, 0x320 -/* 00005150 00011EE0 40 80 51 58 */ bge .L_0000A2A8 -/* 00005154 00011EE4 38 00 03 20 */ li r0, 0x320 -/* 00005158 00011EE8 7C 0B 03 78 */ mr r11, r0 -/* 0000515C 00011EEC 28 0B 33 2C */ cmplwi r11, 0x332c -/* 00005160 00011EF0 40 81 51 68 */ ble .L_0000A2C8 -/* 00005164 00011EF4 39 60 33 2C */ li r11, 0x332c -/* 00005168 00011EF8 80 1B 00 00 */ lwz r0, _6Camera.StopUpdating@l(r27) -/* 0000516C 00011EFC 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00005170 00011F00 40 82 51 84 */ bne .L_0000A2F4 -/* 00005174 00011F04 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00005178 00011F08 41 82 51 84 */ beq .L_0000A2FC -/* 0000517C 00011F0C 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 00005180 00011F10 B1 69 00 C4 */ sth r11, 0xc4(r9) -/* 00005184 00011F14 80 9F 00 A0 */ lwz r4, 0xa0(r31) -/* 00005188 00011F18 3D 20 00 00 */ lis r9, .rodata+0x658@ha -/* 0000518C 00011F1C C3 C9 06 58 */ lfs f30, .rodata+0x658@l(r9) -/* 00005190 00011F20 3B 9F 00 90 */ addi r28, r31, 0x90 -/* 00005194 00011F24 C1 A4 00 18 */ lfs f13, 0x18(r4) -.L_00005198: -/* 00005198 00011F28 C1 84 00 1C */ lfs f12, 0x1c(r4) -/* 0000519C 00011F2C FD 60 F0 90 */ fmr f11, f30 -/* 000051A0 00011F30 C0 04 00 20 */ lfs f0, 0x20(r4) -/* 000051A4 00011F34 FC 1F F0 00 */ fcmpu cr0, f31, f30 -/* 000051A8 00011F38 D1 BF 00 90 */ stfs f13, 0x90(r31) -/* 000051AC 00011F3C D1 9F 00 94 */ stfs f12, 0x94(r31) -/* 000051B0 00011F40 D0 1F 00 98 */ stfs f0, 0x98(r31) -/* 000051B4 00011F44 4C 62 03 82 */ cror un, eq, lt -/* 000051B8 00011F48 41 83 51 C0 */ bso .L_0000A378 -/* 000051BC 00011F4C ED 7E F8 24 */ fdivs f11, f30, f31 -/* 000051C0 00011F50 80 1F 00 D4 */ lwz r0, 0xd4(r31) -.L_000051C4: -/* 000051C4 00011F54 3D 60 00 00 */ lis r11, TrackCarLookOffsetX@ha -/* 000051C8 00011F58 C1 A1 00 18 */ lfs f13, 0x18(r1) -/* 000051CC 00011F5C 3D 40 00 00 */ lis r10, TrackCarLookOffsetY@ha -.L_000051D0: -/* 000051D0 00011F60 C1 81 00 1C */ lfs f12, 0x1c(r1) -/* 000051D4 00011F64 3D 20 00 00 */ lis r9, TrackCarLookOffsetZ@ha -/* 000051D8 00011F68 C0 01 00 20 */ lfs f0, 0x20(r1) -/* 000051DC 00011F6C 54 00 10 3A */ slwi r0, r0, 2 -/* 000051E0 00011F70 C1 21 00 78 */ lfs f9, 0x78(r1) -/* 000051E4 00011F74 39 29 00 00 */ addi r9, r9, TrackCarLookOffsetZ@l -/* 000051E8 00011F78 C1 41 00 7C */ lfs f10, 0x7c(r1) -/* 000051EC 00011F7C 39 6B 00 00 */ addi r11, r11, TrackCarLookOffsetX@l -/* 000051F0 00011F80 39 4A 00 00 */ addi r10, r10, TrackCarLookOffsetY@l -/* 000051F4 00011F84 ED AD 02 F2 */ fmuls f13, f13, f11 -/* 000051F8 00011F88 ED 8C 02 F2 */ fmuls f12, f12, f11 -/* 000051FC 00011F8C 7C C9 04 2E */ lfsx f6, r9, r0 -/* 00005200 00011F90 EC 00 02 F2 */ fmuls f0, f0, f11 -/* 00005204 00011F94 7C EB 04 2E */ lfsx f7, r11, r0 -/* 00005208 00011F98 7D 0A 04 2E */ lfsx f8, r10, r0 -/* 0000520C 00011F9C 38 61 00 28 */ addi r3, r1, 0x28 -.L_00005210: -/* 00005210 00011FA0 C1 61 00 80 */ lfs f11, 0x80(r1) -/* 00005214 00011FA4 3B C1 00 38 */ addi r30, r1, 0x38 -/* 00005218 00011FA8 D1 A1 00 18 */ stfs f13, 0x18(r1) -.L_0000521C: -/* 0000521C 00011FAC 7C 65 1B 78 */ mr r5, r3 -/* 00005220 00011FB0 D1 81 00 1C */ stfs f12, 0x1c(r1) -/* 00005224 00011FB4 38 84 00 48 */ addi r4, r4, 0x48 -/* 00005228 00011FB8 D0 01 00 20 */ stfs f0, 0x20(r1) -/* 0000522C 00011FBC 3B BF 00 80 */ addi r29, r31, 0x80 -/* 00005230 00011FC0 D1 21 00 08 */ stfs f9, 0x8(r1) -/* 00005234 00011FC4 7F DA F3 78 */ mr r26, r30 -.L_00005238: -/* 00005238 00011FC8 D1 41 00 0C */ stfs f10, 0xc(r1) -/* 0000523C 00011FCC D1 79 00 08 */ stfs f11, 0x8(r25) -/* 00005240 00011FD0 D0 E1 00 28 */ stfs f7, 0x28(r1) -/* 00005244 00011FD4 D1 01 00 2C */ stfs f8, 0x2c(r1) -/* 00005248 00011FD8 D0 C1 00 30 */ stfs f6, 0x30(r1) -.L_0000524C: -/* 0000524C 00011FDC 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 -/* 00005250 00011FE0 C1 41 00 28 */ lfs f10, 0x28(r1) -.L_00005254: -/* 00005254 00011FE4 7F C3 F3 78 */ mr r3, r30 -/* 00005258 00011FE8 C1 61 00 2C */ lfs f11, 0x2c(r1) -/* 0000525C 00011FEC 7F 26 CB 78 */ mr r6, r25 -/* 00005260 00011FF0 C1 21 00 30 */ lfs f9, 0x30(r1) -/* 00005264 00011FF4 7F 85 E3 78 */ mr r5, r28 -/* 00005268 00011FF8 C0 1F 00 90 */ lfs f0, 0x90(r31) -/* 0000526C 00011FFC 7F A4 EB 78 */ mr r4, r29 -/* 00005270 00012000 C1 9F 00 94 */ lfs f12, 0x94(r31) -/* 00005274 00012004 C1 BF 00 98 */ lfs f13, 0x98(r31) -/* 00005278 00012008 EC 00 50 2A */ fadds f0, f0, f10 -/* 0000527C 0001200C ED 8C 58 2A */ fadds f12, f12, f11 -/* 00005280 00012010 D0 1F 00 90 */ stfs f0, 0x90(r31) -/* 00005284 00012014 ED AD 48 2A */ fadds f13, f13, f9 -/* 00005288 00012018 D1 9F 00 94 */ stfs f12, 0x94(r31) -/* 0000528C 0001201C D1 BF 00 98 */ stfs f13, 0x98(r31) -/* 00005290 00012020 48 00 00 01 */ bl eCreateLookAtMatrix__FP8bMatrix4R8bVector3N21 -/* 00005294 00012024 80 7F 00 A0 */ lwz r3, 0xa0(r31) -.L_00005298: -/* 00005298 00012028 7F A4 EB 78 */ mr r4, r29 -/* 0000529C 0001202C 38 63 00 18 */ addi r3, r3, 0x18 -/* 000052A0 00012030 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 -/* 000052A4 00012034 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha -/* 000052A8 00012038 FF E0 08 90 */ fmr f31, f1 -.L_000052AC: -/* 000052AC 0001203C 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) -/* 000052B0 00012040 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000052B4 00012044 40 82 52 C0 */ bne .L_0000A574 -/* 000052B8 00012048 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 000052BC 0001204C D3 E9 00 B0 */ stfs f31, 0xb0(r9) -/* 000052C0 00012050 3D 60 00 00 */ lis r11, .rodata+0x664@ha -/* 000052C4 00012054 C0 1F 00 A4 */ lfs f0, 0xa4(r31) -/* 000052C8 00012058 C1 AB 06 64 */ lfs f13, .rodata+0x664@l(r11) -/* 000052CC 0001205C 3D 20 00 00 */ lis r9, .rodata+0x654@ha -/* 000052D0 00012060 C0 49 06 54 */ lfs f2, .rodata+0x654@l(r9) -/* 000052D4 00012064 FC 20 E8 90 */ fmr f1, f29 -/* 000052D8 00012068 EC 00 03 72 */ fmuls f0, f0, f13 -/* 000052DC 0001206C 38 7F 00 A4 */ addi r3, r31, 0xa4 -/* 000052E0 00012070 D0 1F 00 A8 */ stfs f0, 0xa8(r31) -/* 000052E4 00012074 FC 60 10 90 */ fmr f3, f2 -/* 000052E8 00012078 48 00 00 01 */ bl SplineSeek__6cPointP8tCubic1Dfff -/* 000052EC 0001207C C0 3F 00 A4 */ lfs f1, 0xa4(r31) -/* 000052F0 00012080 80 1F 00 D0 */ lwz r0, 0xd0(r31) -/* 000052F4 00012084 EC 1F 08 2A */ fadds f0, f31, f1 -/* 000052F8 00012088 ED BE 00 28 */ fsubs f13, f30, f0 -/* 000052FC 0001208C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00005300 00012090 FF ED 07 AE */ fsel f31, f13, f30, f0 -/* 00005304 00012094 41 82 53 30 */ beq .L_0000A634 -/* 00005308 00012098 80 1B 00 00 */ lwz r0, _6Camera.StopUpdating@l(r27) -/* 0000530C 0001209C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00005310 000120A0 40 82 53 30 */ bne Attach__16CDActionTrackCarPQ33UTL3COM8IUnknown -/* 00005314 000120A4 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 00005318 000120A8 EC 1F 08 2A */ fadds f0, f31, f1 -/* 0000531C 000120AC 3D 60 00 00 */ lis r11, .rodata+0x668@ha -/* 00005320 000120B0 D0 09 00 B4 */ stfs f0, 0xb4(r9) -/* 00005324 000120B4 C1 AB 06 68 */ lfs f13, .rodata+0x668@l(r11) -/* 00005328 000120B8 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 0000532C 000120BC D1 A9 00 B8 */ stfs f13, 0xb8(r9) -/* 00005330 000120C0 80 7F 00 1C */ lwz r3, 0x1c(r31) -/* 00005334 000120C4 7F 44 D3 78 */ mr r4, r26 -/* 00005338 000120C8 FC 20 E8 90 */ fmr f1, f29 -/* 0000533C 000120CC 48 00 04 ED */ bl .L_00005828 -/* 00005340 000120D0 80 9F 00 1C */ lwz r4, 0x1c(r31) -/* 00005344 000120D4 7F E3 FB 78 */ mr r3, r31 -.L_00005348: -/* 00005348 000120D8 80 BF 00 A0 */ lwz r5, 0xa0(r31) -/* 0000534C 000120DC 38 84 00 40 */ addi r4, r4, 0x40 -/* 00005350 000120E0 38 A5 00 18 */ addi r5, r5, 0x18 -/* 00005354 000120E4 48 00 23 01 */ bl .L_00007654 -/* 00005358 000120E8 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000535C 000120EC 41 82 53 6C */ beq .L_0000A6C8 -/* 00005360 000120F0 81 3F 00 A0 */ lwz r9, 0xa0(r31) -/* 00005364 000120F4 80 69 00 8C */ lwz r3, 0x8c(r9) -/* 00005368 000120F8 48 00 79 71 */ bl .L_0000CCD8 -/* 0000536C 000120FC 80 01 00 D4 */ lwz r0, 0xd4(r1) -/* 00005370 00012100 7C 08 03 A6 */ mtlr r0 -/* 00005374 00012104 BB 21 00 9C */ lmw r25, 0x9c(r1) -/* 00005378 00012108 E3 A1 00 B8 */ psq_l f29, 0xb8(r1), 0, qr0 -/* 0000537C 0001210C E3 C1 00 C0 */ psq_l f30, 0xc0(r1), 0, qr0 -/* 00005380 00012110 E3 E1 00 C8 */ psq_l f31, 0xc8(r1), 0, qr0 -/* 00005384 00012114 38 21 00 D0 */ addi r1, r1, 0xd0 -/* 00005388 00012118 4E 80 00 20 */ blr -.endfn Update__19TrackCarCameraMoverf - -# .text:0x538C | size: 0xC8 -.fn __19TrackCopCameraMoveriP12CameraAnchorb, global -/* 0000538C 0001211C 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 00005390 00012120 7C 08 02 A6 */ mflr r0 -/* 00005394 00012124 BF 81 00 08 */ stmw r28, 0x8(r1) -/* 00005398 00012128 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0000539C 0001212C 7C 7E 1B 78 */ mr r30, r3 -/* 000053A0 00012130 7C BD 2B 78 */ mr r29, r5 -/* 000053A4 00012134 7C DC 33 78 */ mr r28, r6 -/* 000053A8 00012138 38 A0 00 07 */ li r5, 0x7 -/* 000053AC 0001213C 48 00 1F 1D */ bl .L_000072C8 -/* 000053B0 00012140 3D 20 00 00 */ lis r9, _vt.19TrackCopCameraMover@ha -/* 000053B4 00012144 38 7E 00 80 */ addi r3, r30, 0x80 -/* 000053B8 00012148 39 29 00 00 */ addi r9, r9, _vt.19TrackCopCameraMover@l -/* 000053BC 0001214C 91 3E 00 08 */ stw r9, 0x8(r30) -/* 000053C0 00012150 48 00 4A B1 */ bl .L_00009E70 -/* 000053C4 00012154 38 7E 01 08 */ addi r3, r30, 0x108 -/* 000053C8 00012158 48 00 4A B1 */ bl .L_00009E78 -/* 000053CC 0001215C 38 7E 01 90 */ addi r3, r30, 0x190 -/* 000053D0 00012160 48 00 4A B1 */ bl .L_00009E80 -/* 000053D4 00012164 93 BE 02 18 */ stw r29, 0x218(r30) -/* 000053D8 00012168 3D 20 00 00 */ lis r9, .rodata+0x66C@ha -/* 000053DC 0001216C 3D 60 00 00 */ lis r11, .rodata+0x670@ha -/* 000053E0 00012170 C1 A9 06 6C */ lfs f13, .rodata+0x66C@l(r9) -/* 000053E4 00012174 C0 0B 06 70 */ lfs f0, .rodata+0x670@l(r11) -/* 000053E8 00012178 39 20 00 01 */ li r9, 0x1 -/* 000053EC 0001217C 38 00 00 00 */ li r0, 0x0 -/* 000053F0 00012180 93 9E 02 48 */ stw r28, 0x248(r30) -/* 000053F4 00012184 7F C3 F3 78 */ mr r3, r30 -/* 000053F8 00012188 D1 BE 02 40 */ stfs f13, 0x240(r30) -/* 000053FC 0001218C B0 1E 02 44 */ sth r0, 0x244(r30) -/* 00005400 00012190 91 3E 02 4C */ stw r9, 0x24c(r30) -/* 00005404 00012194 D0 1E 02 14 */ stfs f0, 0x214(r30) -/* 00005408 00012198 D0 1E 02 1C */ stfs f0, 0x21c(r30) -/* 0000540C 0001219C D0 1E 02 20 */ stfs f0, 0x220(r30) -/* 00005410 000121A0 D0 1E 02 24 */ stfs f0, 0x224(r30) -/* 00005414 000121A4 D0 1E 02 28 */ stfs f0, 0x228(r30) -.L_00005418: -/* 00005418 000121A8 D0 1E 02 3C */ stfs f0, 0x23c(r30) -/* 0000541C 000121AC B1 3E 02 46 */ sth r9, 0x246(r30) -/* 00005420 000121B0 D0 1E 02 2C */ stfs f0, 0x22c(r30) -/* 00005424 000121B4 D0 1E 02 30 */ stfs f0, 0x230(r30) -/* 00005428 000121B8 D0 1E 02 34 */ stfs f0, 0x234(r30) -/* 0000542C 000121BC D0 1E 02 38 */ stfs f0, 0x238(r30) -/* 00005430 000121C0 D0 1E 01 04 */ stfs f0, 0x104(r30) -/* 00005434 000121C4 D0 1E 01 8C */ stfs f0, 0x18c(r30) -/* 00005438 000121C8 48 00 56 19 */ bl .L_0000AA50 -/* 0000543C 000121CC 7F C3 F3 78 */ mr r3, r30 -/* 00005440 000121D0 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 00005444 000121D4 7C 08 03 A6 */ mtlr r0 -/* 00005448 000121D8 BB 81 00 08 */ lmw r28, 0x8(r1) -/* 0000544C 000121DC 38 21 00 18 */ addi r1, r1, 0x18 -/* 00005450 000121E0 4E 80 00 20 */ blr -.endfn __19TrackCopCameraMoveriP12CameraAnchorb - -# .text:0x5454 | size: 0x88 -.fn _._19TrackCopCameraMover, global -/* 00005454 000121E4 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 00005458 000121E8 7C 08 02 A6 */ mflr r0 -/* 0000545C 000121EC 90 01 00 0C */ stw r0, 0xc(r1) -/* 00005460 000121F0 3D 20 00 00 */ lis r9, _vt.19TrackCopCameraMover@ha -/* 00005464 000121F4 3D 60 00 00 */ lis r11, .rodata+0x674@ha -/* 00005468 000121F8 39 29 00 00 */ addi r9, r9, _vt.19TrackCopCameraMover@l -/* 0000546C 000121FC C0 0B 06 74 */ lfs f0, .rodata+0x674@l(r11) -/* 00005470 00012200 91 23 00 08 */ stw r9, 0x8(r3) -/* 00005474 00012204 3D 40 00 00 */ lis r10, _6Camera.StopUpdating@ha -/* 00005478 00012208 81 6A 00 00 */ lwz r11, _6Camera.StopUpdating@l(r10) -/* 0000547C 0001220C 3D 00 00 00 */ lis r8, TrackCopCameraMover_IdleSim@ha -/* 00005480 00012210 81 23 00 1C */ lwz r9, 0x1c(r3) -/* 00005484 00012214 38 00 00 00 */ li r0, 0x0 -/* 00005488 00012218 90 08 00 00 */ stw r0, TrackCopCameraMover_IdleSim@l(r8) -/* 0000548C 0001221C 2C 0B 00 00 */ cmpwi r11, 0x0 -.L_00005490: -/* 00005490 00012220 D0 09 00 CC */ stfs f0, 0xcc(r9) -/* 00005494 00012224 40 82 54 B0 */ bne .L_0000A944 -/* 00005498 00012228 3D 20 00 00 */ lis r9, .rodata+0x678@ha -/* 0000549C 0001222C 81 63 00 1C */ lwz r11, 0x1c(r3) -/* 000054A0 00012230 C0 09 06 78 */ lfs f0, .rodata+0x678@l(r9) -/* 000054A4 00012234 D0 0B 00 B4 */ stfs f0, 0xb4(r11) -/* 000054A8 00012238 81 23 00 1C */ lwz r9, 0x1c(r3) -/* 000054AC 0001223C D0 09 00 B8 */ stfs f0, 0xb8(r9) -/* 000054B0 00012240 3D 20 00 00 */ lis r9, RealTimeFrames@ha -/* 000054B4 00012244 81 63 00 1C */ lwz r11, 0x1c(r3) -/* 000054B8 00012248 81 49 00 00 */ lwz r10, RealTimeFrames@l(r9) -/* 000054BC 0001224C 38 00 00 01 */ li r0, 0x1 -/* 000054C0 00012250 90 0B 02 7C */ stw r0, 0x27c(r11) -/* 000054C4 00012254 91 4B 02 88 */ stw r10, 0x288(r11) -/* 000054C8 00012258 48 00 20 35 */ bl .L_000074FC -/* 000054CC 0001225C 80 01 00 0C */ lwz r0, 0xc(r1) -/* 000054D0 00012260 7C 08 03 A6 */ mtlr r0 -/* 000054D4 00012264 38 21 00 08 */ addi r1, r1, 0x8 -/* 000054D8 00012268 4E 80 00 20 */ blr -.endfn _._19TrackCopCameraMover - -# .text:0x54DC | size: 0x13C -.fn FindPursuitVehiclePosition__19TrackCopCameraMoverP8bVector3, global -/* 000054DC 0001226C 94 21 FF C0 */ stwu r1, -0x40(r1) -/* 000054E0 00012270 7C 08 02 A6 */ mflr r0 -/* 000054E4 00012274 F3 E1 00 38 */ psq_st f31, 0x38(r1), 0, qr0 -.L_000054E8: -/* 000054E8 00012278 BF 01 00 18 */ stmw r24, 0x18(r1) -/* 000054EC 0001227C 90 01 00 44 */ stw r0, 0x44(r1) -/* 000054F0 00012280 3D 60 00 00 */ lis r11, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@ha -/* 000054F4 00012284 3D 20 00 00 */ lis r9, .rodata+0x67C@ha -/* 000054F8 00012288 C3 E9 06 7C */ lfs f31, .rodata+0x67C@l(r9) -/* 000054FC 0001228C 3B 4B 00 00 */ addi r26, r11, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@l -/* 00005500 00012290 83 AB 00 00 */ lwz r29, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@l(r11) -/* 00005504 00012294 7C 7B 1B 78 */ mr r27, r3 -.L_00005508: -/* 00005508 00012298 7C 9C 23 78 */ mr r28, r4 -/* 0000550C 0001229C 3B 20 00 00 */ li r25, 0x0 -/* 00005510 000122A0 3F 00 00 00 */ lis r24, _12VehicleClass.CAR@ha -/* 00005514 000122A4 80 1A 00 08 */ lwz r0, 0x8(r26) -/* 00005518 000122A8 81 3A 00 00 */ lwz r9, 0x0(r26) -/* 0000551C 000122AC 54 00 10 3A */ slwi r0, r0, 2 -/* 00005520 000122B0 7D 29 02 14 */ add r9, r9, r0 -/* 00005524 000122B4 7C 1D 48 00 */ cmpw r29, r9 -/* 00005528 000122B8 41 82 55 FC */ beq .L_0000AB24 -/* 0000552C 000122BC 83 FD 00 00 */ lwz r31, 0x0(r29) -/* 00005530 000122C0 2C 1F 00 00 */ cmpwi r31, 0x0 -/* 00005534 000122C4 41 82 55 F4 */ beq .L_0000AB28 -/* 00005538 000122C8 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 0000553C 000122CC 80 09 00 94 */ lwz r0, 0x94(r9) -/* 00005540 000122D0 A8 69 00 90 */ lha r3, 0x90(r9) -/* 00005544 000122D4 7C 08 03 A6 */ mtlr r0 -/* 00005548 000122D8 7C 7F 1A 14 */ add r3, r31, r3 -/* 0000554C 000122DC 4E 80 00 21 */ blrl -/* 00005550 000122E0 81 23 00 00 */ lwz r9, 0x0(r3) -/* 00005554 000122E4 80 18 00 00 */ lwz r0, _12VehicleClass.CAR@l(r24) -/* 00005558 000122E8 7C 09 00 00 */ cmpw r9, r0 -/* 0000555C 000122EC 40 82 55 F4 */ bne .L_0000AB50 -/* 00005560 000122F0 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 00005564 000122F4 3B C1 00 08 */ addi r30, r1, 0x8 -/* 00005568 000122F8 80 09 00 24 */ lwz r0, 0x24(r9) -/* 0000556C 000122FC A8 69 00 20 */ lha r3, 0x20(r9) -/* 00005570 00012300 7C 08 03 A6 */ mtlr r0 -/* 00005574 00012304 7C 7F 1A 14 */ add r3, r31, r3 -/* 00005578 00012308 4E 80 00 21 */ blrl -/* 0000557C 0001230C 7C 69 1B 78 */ mr r9, r3 -/* 00005580 00012310 80 9B 00 1C */ lwz r4, 0x1c(r27) -/* 00005584 00012314 C0 09 00 00 */ lfs f0, 0x0(r9) -/* 00005588 00012318 7F 63 DB 78 */ mr r3, r27 -/* 0000558C 0001231C C1 A9 00 08 */ lfs f13, 0x8(r9) -/* 00005590 00012320 38 84 00 40 */ addi r4, r4, 0x40 -/* 00005594 00012324 C1 89 00 04 */ lfs f12, 0x4(r9) -/* 00005598 00012328 FC 00 00 50 */ fneg f0, f0 -/* 0000559C 0001232C D1 A1 00 08 */ stfs f13, 0x8(r1) -/* 000055A0 00012330 7F C5 F3 78 */ mr r5, r30 -/* 000055A4 00012334 D0 01 00 0C */ stfs f0, 0xc(r1) -/* 000055A8 00012338 D1 9E 00 08 */ stfs f12, 0x8(r30) -/* 000055AC 0001233C 48 00 23 01 */ bl .L_000078AC -/* 000055B0 00012340 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000055B4 00012344 40 82 55 F4 */ bne .L_0000ABA8 -/* 000055B8 00012348 80 7B 02 18 */ lwz r3, 0x218(r27) -/* 000055BC 0001234C 7F C4 F3 78 */ mr r4, r30 -.L_000055C0: -/* 000055C0 00012350 38 63 00 18 */ addi r3, r3, 0x18 -/* 000055C4 00012354 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 -.L_000055C8: -/* 000055C8 00012358 FC 01 F8 00 */ fcmpu cr0, f1, f31 -/* 000055CC 0001235C 4C 62 0B 82 */ cror un, eq, gt -/* 000055D0 00012360 41 83 55 F4 */ bso .L_0000ABC4 -/* 000055D4 00012364 C1 9E 00 08 */ lfs f12, 0x8(r30) -/* 000055D8 00012368 FF E0 08 90 */ fmr f31, f1 -/* 000055DC 0001236C C1 A1 00 08 */ lfs f13, 0x8(r1) -/* 000055E0 00012370 3B 20 00 01 */ li r25, 0x1 -/* 000055E4 00012374 C0 01 00 0C */ lfs f0, 0xc(r1) -.L_000055E8: -/* 000055E8 00012378 D1 BC 00 00 */ stfs f13, 0x0(r28) -/* 000055EC 0001237C D0 1C 00 04 */ stfs f0, 0x4(r28) -/* 000055F0 00012380 D1 9C 00 08 */ stfs f12, 0x8(r28) -/* 000055F4 00012384 3B BD 00 04 */ addi r29, r29, 0x4 -/* 000055F8 00012388 48 00 55 14 */ b .L_0000AB0C -.L_000055FC: -/* 000055FC 0001238C 7F 23 CB 78 */ mr r3, r25 -/* 00005600 00012390 80 01 00 44 */ lwz r0, 0x44(r1) -/* 00005604 00012394 7C 08 03 A6 */ mtlr r0 -/* 00005608 00012398 BB 01 00 18 */ lmw r24, 0x18(r1) -/* 0000560C 0001239C E3 E1 00 38 */ psq_l f31, 0x38(r1), 0, qr0 -/* 00005610 000123A0 38 21 00 40 */ addi r1, r1, 0x40 -/* 00005614 000123A4 4E 80 00 20 */ blr -.endfn FindPursuitVehiclePosition__19TrackCopCameraMoverP8bVector3 - -# .text:0x5618 | size: 0x2C8 -# TrackCopCameraMover::Init -.fn Init__19TrackCopCameraMover, global -/* 00005618 000123A8 94 21 FF 90 */ stwu r1, -0x70(r1) -/* 0000561C 000123AC 7C 08 02 A6 */ mflr r0 -/* 00005620 000123B0 F3 E1 00 68 */ psq_st f31, 0x68(r1), 0, qr0 -/* 00005624 000123B4 BF C1 00 60 */ stmw r30, 0x60(r1) -/* 00005628 000123B8 90 01 00 74 */ stw r0, 0x74(r1) -/* 0000562C 000123BC 7C 7F 1B 78 */ mr r31, r3 -/* 00005630 000123C0 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 00005634 000123C4 3C E0 43 30 */ lis r7, 0x4330 -.L_00005638: -/* 00005638 000123C8 3D 40 00 00 */ lis r10, .rodata+0x680@ha -/* 0000563C 000123CC 3D 00 00 00 */ lis r8, TrackCopCameraMover_IdleSim@ha -/* 00005640 000123D0 C1 89 00 40 */ lfs f12, 0x40(r9) -/* 00005644 000123D4 3B C0 00 01 */ li r30, 0x1 -/* 00005648 000123D8 C0 09 00 44 */ lfs f0, 0x44(r9) -/* 0000564C 000123DC C1 A9 00 48 */ lfs f13, 0x48(r9) -/* 00005650 000123E0 D1 81 00 18 */ stfs f12, 0x18(r1) -/* 00005654 000123E4 D0 01 00 1C */ stfs f0, 0x1c(r1) -/* 00005658 000123E8 D1 A1 00 20 */ stfs f13, 0x20(r1) -/* 0000565C 000123EC C9 6A 06 80 */ lfd f11, .rodata+0x680@l(r10) -/* 00005660 000123F0 C0 09 00 60 */ lfs f0, 0x60(r9) -.L_00005664: -/* 00005664 000123F4 C1 A9 00 64 */ lfs f13, 0x64(r9) -.L_00005668: -/* 00005668 000123F8 C1 89 00 68 */ lfs f12, 0x68(r9) -/* 0000566C 000123FC D0 01 00 28 */ stfs f0, 0x28(r1) -/* 00005670 00012400 D1 A1 00 2C */ stfs f13, 0x2c(r1) -.L_00005674: -/* 00005674 00012404 D1 81 00 30 */ stfs f12, 0x30(r1) -/* 00005678 00012408 A0 09 00 C4 */ lhz r0, 0xc4(r9) -.L_0000567C: -/* 0000567C 0001240C 93 C8 00 00 */ stw r30, TrackCopCameraMover_IdleSim@l(r8) -.L_00005680: -/* 00005680 00012410 90 01 00 5C */ stw r0, 0x5c(r1) -/* 00005684 00012414 90 E1 00 58 */ stw r7, 0x58(r1) -/* 00005688 00012418 C8 01 00 58 */ lfd f0, 0x58(r1) -/* 0000568C 0001241C FC 00 58 28 */ fsub f0, f0, f11 -/* 00005690 00012420 FF E0 00 18 */ frsp f31, f0 -/* 00005694 00012424 48 00 00 01 */ bl HideEverySingleHud__Fv -/* 00005698 00012428 3D 60 00 00 */ lis r11, .rodata+0x688@ha -/* 0000569C 0001242C 3D 20 00 00 */ lis r9, .rodata+0x68C@ha -/* 000056A0 00012430 C1 41 00 18 */ lfs f10, 0x18(r1) -/* 000056A4 00012434 7F E3 FB 78 */ mr r3, r31 -.L_000056A8: -/* 000056A8 00012438 C1 21 00 1C */ lfs f9, 0x1c(r1) -/* 000056AC 0001243C 38 81 00 08 */ addi r4, r1, 0x8 -/* 000056B0 00012440 C1 01 00 20 */ lfs f8, 0x20(r1) -/* 000056B4 00012444 C1 A9 06 8C */ lfs f13, .rodata+0x68C@l(r9) -/* 000056B8 00012448 C0 0B 06 88 */ lfs f0, .rodata+0x688@l(r11) -/* 000056BC 0001244C D1 BF 00 D0 */ stfs f13, 0xd0(r31) -/* 000056C0 00012450 D0 1F 00 FC */ stfs f0, 0xfc(r31) -/* 000056C4 00012454 D0 1F 00 C8 */ stfs f0, 0xc8(r31) -/* 000056C8 00012458 D0 1F 00 CC */ stfs f0, 0xcc(r31) -/* 000056CC 0001245C D0 1F 00 D8 */ stfs f0, 0xd8(r31) -/* 000056D0 00012460 D0 1F 00 DC */ stfs f0, 0xdc(r31) -/* 000056D4 00012464 D0 1F 00 E8 */ stfs f0, 0xe8(r31) -/* 000056D8 00012468 D0 1F 00 EC */ stfs f0, 0xec(r31) -/* 000056DC 0001246C D0 1F 00 F8 */ stfs f0, 0xf8(r31) -/* 000056E0 00012470 D1 BF 00 E0 */ stfs f13, 0xe0(r31) -/* 000056E4 00012474 D1 BF 00 F0 */ stfs f13, 0xf0(r31) -/* 000056E8 00012478 D1 BF 01 00 */ stfs f13, 0x100(r31) -/* 000056EC 0001247C D1 5F 01 4C */ stfs f10, 0x14c(r31) -/* 000056F0 00012480 D1 3F 01 50 */ stfs f9, 0x150(r31) -/* 000056F4 00012484 D1 1F 01 54 */ stfs f8, 0x154(r31) -/* 000056F8 00012488 D1 BF 01 58 */ stfs f13, 0x158(r31) -/* 000056FC 0001248C D1 5F 01 5C */ stfs f10, 0x15c(r31) -/* 00005700 00012490 D1 3F 01 60 */ stfs f9, 0x160(r31) -/* 00005704 00012494 D1 1F 01 64 */ stfs f8, 0x164(r31) -/* 00005708 00012498 D1 BF 01 68 */ stfs f13, 0x168(r31) -/* 0000570C 0001249C D1 5F 01 6C */ stfs f10, 0x16c(r31) -/* 00005710 000124A0 D1 3F 01 70 */ stfs f9, 0x170(r31) -/* 00005714 000124A4 D1 1F 01 74 */ stfs f8, 0x174(r31) -/* 00005718 000124A8 93 DF 02 4C */ stw r30, 0x24c(r31) -/* 0000571C 000124AC D3 FF 00 C4 */ stfs f31, 0xc4(r31) -/* 00005720 000124B0 D3 FF 00 D4 */ stfs f31, 0xd4(r31) -/* 00005724 000124B4 D3 FF 00 E4 */ stfs f31, 0xe4(r31) -/* 00005728 000124B8 D3 FF 00 F4 */ stfs f31, 0xf4(r31) -/* 0000572C 000124BC D1 BF 01 78 */ stfs f13, 0x178(r31) -/* 00005730 000124C0 C0 01 00 28 */ lfs f0, 0x28(r1) -/* 00005734 000124C4 C1 81 00 2C */ lfs f12, 0x2c(r1) -/* 00005738 000124C8 C1 61 00 30 */ lfs f11, 0x30(r1) -/* 0000573C 000124CC D1 5F 01 7C */ stfs f10, 0x17c(r31) -/* 00005740 000124D0 D1 3F 01 80 */ stfs f9, 0x180(r31) -/* 00005744 000124D4 D1 1F 01 84 */ stfs f8, 0x184(r31) -/* 00005748 000124D8 D0 1F 02 04 */ stfs f0, 0x204(r31) -/* 0000574C 000124DC D1 9F 02 08 */ stfs f12, 0x208(r31) -/* 00005750 000124E0 D1 7F 02 0C */ stfs f11, 0x20c(r31) -/* 00005754 000124E4 D1 BF 02 10 */ stfs f13, 0x210(r31) -/* 00005758 000124E8 D1 BF 01 88 */ stfs f13, 0x188(r31) -/* 0000575C 000124EC D0 1F 01 D4 */ stfs f0, 0x1d4(r31) -/* 00005760 000124F0 D1 9F 01 D8 */ stfs f12, 0x1d8(r31) -.L_00005764: -/* 00005764 000124F4 D1 7F 01 DC */ stfs f11, 0x1dc(r31) -/* 00005768 000124F8 D1 BF 01 E0 */ stfs f13, 0x1e0(r31) -/* 0000576C 000124FC D0 1F 01 E4 */ stfs f0, 0x1e4(r31) -/* 00005770 00012500 D1 9F 01 E8 */ stfs f12, 0x1e8(r31) -/* 00005774 00012504 D1 7F 01 EC */ stfs f11, 0x1ec(r31) -/* 00005778 00012508 D1 BF 01 F0 */ stfs f13, 0x1f0(r31) -/* 0000577C 0001250C D0 1F 01 F4 */ stfs f0, 0x1f4(r31) -/* 00005780 00012510 D1 9F 01 F8 */ stfs f12, 0x1f8(r31) -/* 00005784 00012514 D1 7F 01 FC */ stfs f11, 0x1fc(r31) -/* 00005788 00012518 D1 BF 02 00 */ stfs f13, 0x200(r31) -/* 0000578C 0001251C 48 00 54 DD */ bl .L_0000AC68 -/* 00005790 00012520 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00005794 00012524 41 82 58 54 */ beq .L_0000AFE8 -/* 00005798 00012528 C0 01 00 10 */ lfs f0, 0x10(r1) -/* 0000579C 0001252C 3D 60 00 00 */ lis r11, .rodata+0x690@ha -/* 000057A0 00012530 C1 21 00 08 */ lfs f9, 0x8(r1) -/* 000057A4 00012534 38 00 00 00 */ li r0, 0x0 -/* 000057A8 00012538 C1 61 00 0C */ lfs f11, 0xc(r1) -/* 000057AC 0001253C D0 01 00 40 */ stfs f0, 0x40(r1) -/* 000057B0 00012540 D1 21 00 38 */ stfs f9, 0x38(r1) -/* 000057B4 00012544 D1 61 00 3C */ stfs f11, 0x3c(r1) -/* 000057B8 00012548 C1 AB 06 90 */ lfs f13, .rodata+0x690@l(r11) -/* 000057BC 0001254C 81 3F 02 18 */ lwz r9, 0x218(r31) -/* 000057C0 00012550 EC 00 68 2A */ fadds f0, f0, f13 -/* 000057C4 00012554 C0 FF 01 F0 */ lfs f7, 0x1f0(r31) -/* 000057C8 00012558 C1 BF 01 68 */ lfs f13, 0x168(r31) -/* 000057CC 0001255C C1 09 00 20 */ lfs f8, 0x20(r9) -/* 000057D0 00012560 C1 49 00 18 */ lfs f10, 0x18(r9) -/* 000057D4 00012564 C1 89 00 1C */ lfs f12, 0x1c(r9) -/* 000057D8 00012568 D1 3F 01 7C */ stfs f9, 0x17c(r31) -.L_000057DC: -/* 000057DC 0001256C D1 7F 01 80 */ stfs f11, 0x180(r31) -/* 000057E0 00012570 D0 1F 01 84 */ stfs f0, 0x184(r31) -/* 000057E4 00012574 D1 BF 01 88 */ stfs f13, 0x188(r31) -.L_000057E8: -/* 000057E8 00012578 D1 41 00 48 */ stfs f10, 0x48(r1) -/* 000057EC 0001257C D1 81 00 4C */ stfs f12, 0x4c(r1) -/* 000057F0 00012580 D1 01 00 50 */ stfs f8, 0x50(r1) -/* 000057F4 00012584 D0 01 00 40 */ stfs f0, 0x40(r1) -/* 000057F8 00012588 D1 3F 01 5C */ stfs f9, 0x15c(r31) -/* 000057FC 0001258C D1 7F 01 60 */ stfs f11, 0x160(r31) -/* 00005800 00012590 D0 1F 01 64 */ stfs f0, 0x164(r31) -/* 00005804 00012594 D1 3F 01 6C */ stfs f9, 0x16c(r31) -/* 00005808 00012598 D1 7F 01 70 */ stfs f11, 0x170(r31) -/* 0000580C 0001259C D0 1F 01 74 */ stfs f0, 0x174(r31) -/* 00005810 000125A0 D1 BF 01 78 */ stfs f13, 0x178(r31) -/* 00005814 000125A4 D1 5F 01 E4 */ stfs f10, 0x1e4(r31) -/* 00005818 000125A8 D1 9F 01 E8 */ stfs f12, 0x1e8(r31) -/* 0000581C 000125AC D1 1F 01 EC */ stfs f8, 0x1ec(r31) -/* 00005820 000125B0 D1 5F 01 F4 */ stfs f10, 0x1f4(r31) -/* 00005824 000125B4 D1 9F 01 F8 */ stfs f12, 0x1f8(r31) -.L_00005828: -/* 00005828 000125B8 D1 1F 01 FC */ stfs f8, 0x1fc(r31) -/* 0000582C 000125BC D1 5F 02 04 */ stfs f10, 0x204(r31) -/* 00005830 000125C0 D1 9F 02 08 */ stfs f12, 0x208(r31) -/* 00005834 000125C4 D1 1F 02 0C */ stfs f8, 0x20c(r31) -.L_00005838: -/* 00005838 000125C8 D0 FF 02 10 */ stfs f7, 0x210(r31) -/* 0000583C 000125CC D3 FF 00 F4 */ stfs f31, 0xf4(r31) -/* 00005840 000125D0 90 1F 02 4C */ stw r0, 0x24c(r31) -/* 00005844 000125D4 D0 FF 02 00 */ stfs f7, 0x200(r31) -/* 00005848 000125D8 D3 FF 00 D4 */ stfs f31, 0xd4(r31) -/* 0000584C 000125DC D3 FF 00 E4 */ stfs f31, 0xe4(r31) -/* 00005850 000125E0 48 00 58 60 */ b .L_0000B0B0 -/* 00005854 000125E4 81 3F 02 18 */ lwz r9, 0x218(r31) -/* 00005858 000125E8 80 69 00 8C */ lwz r3, 0x8c(r9) -/* 0000585C 000125EC 48 00 71 51 */ bl .L_0000C9AC -/* 00005860 000125F0 3D 20 00 00 */ lis r9, .rodata+0x688@ha -.L_00005864: -/* 00005864 000125F4 81 5F 02 48 */ lwz r10, 0x248(r31) -/* 00005868 000125F8 C0 09 06 88 */ lfs f0, .rodata+0x688@l(r9) -/* 0000586C 000125FC 38 1F 01 4C */ addi r0, r31, 0x14c -/* 00005870 00012600 39 3F 01 D4 */ addi r9, r31, 0x1d4 -/* 00005874 00012604 39 7F 00 C4 */ addi r11, r31, 0xc4 -/* 00005878 00012608 90 1F 01 08 */ stw r0, 0x108(r31) -/* 0000587C 0001260C 2C 0A 00 00 */ cmpwi r10, 0x0 -/* 00005880 00012610 91 3F 01 90 */ stw r9, 0x190(r31) -/* 00005884 00012614 91 7F 00 80 */ stw r11, 0x80(r31) -/* 00005888 00012618 D0 1F 01 8C */ stfs f0, 0x18c(r31) -/* 0000588C 0001261C D0 1F 02 14 */ stfs f0, 0x214(r31) -.L_00005890: -/* 00005890 00012620 D0 1F 01 04 */ stfs f0, 0x104(r31) -/* 00005894 00012624 D0 1F 02 1C */ stfs f0, 0x21c(r31) -/* 00005898 00012628 D0 1F 02 24 */ stfs f0, 0x224(r31) -.L_0000589C: -/* 0000589C 0001262C D0 1F 02 20 */ stfs f0, 0x220(r31) -.L_000058A0: -/* 000058A0 00012630 D0 1F 02 28 */ stfs f0, 0x228(r31) -/* 000058A4 00012634 40 82 58 C8 */ bne .L_0000B16C -/* 000058A8 00012638 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha -/* 000058AC 0001263C 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) -/* 000058B0 00012640 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000058B4 00012644 40 82 58 C8 */ bne .L_0000B17C -/* 000058B8 00012648 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 000058BC 0001264C D0 09 00 B4 */ stfs f0, 0xb4(r9) -/* 000058C0 00012650 81 7F 00 1C */ lwz r11, 0x1c(r31) -/* 000058C4 00012654 D0 0B 00 B8 */ stfs f0, 0xb8(r11) -/* 000058C8 00012658 80 01 00 74 */ lwz r0, 0x74(r1) -/* 000058CC 0001265C 7C 08 03 A6 */ mtlr r0 -/* 000058D0 00012660 BB C1 00 60 */ lmw r30, 0x60(r1) -/* 000058D4 00012664 E3 E1 00 68 */ psq_l f31, 0x68(r1), 0, qr0 -/* 000058D8 00012668 38 21 00 70 */ addi r1, r1, 0x70 -.L_000058DC: -/* 000058DC 0001266C 4E 80 00 20 */ blr -.endfn Init__19TrackCopCameraMover - -# .text:0x58E0 | size: 0x284 -.fn Update__19TrackCopCameraMoverf, global -/* 000058E0 00012670 94 21 FF 28 */ stwu r1, -0xd8(r1) -/* 000058E4 00012674 7C 08 02 A6 */ mflr r0 -/* 000058E8 00012678 F3 81 00 B8 */ psq_st f28, 0xb8(r1), 0, qr0 -/* 000058EC 0001267C F3 A1 00 C0 */ psq_st f29, 0xc0(r1), 0, qr0 -/* 000058F0 00012680 F3 C1 00 C8 */ psq_st f30, 0xc8(r1), 0, qr0 -/* 000058F4 00012684 F3 E1 00 D0 */ psq_st f31, 0xd0(r1), 0, qr0 -/* 000058F8 00012688 BF 21 00 9C */ stmw r25, 0x9c(r1) -/* 000058FC 0001268C 90 01 00 DC */ stw r0, 0xdc(r1) -/* 00005900 00012690 7C 7F 1B 78 */ mr r31, r3 -/* 00005904 00012694 FF 80 08 90 */ fmr f28, f1 -/* 00005908 00012698 48 00 00 01 */ bl Get__9FEManager -/* 0000590C 0001269C 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00005910 000126A0 41 82 59 24 */ beq .L_0000B234 -/* 00005914 000126A4 38 60 00 01 */ li r3, 0x1 -.L_00005918: -/* 00005918 000126A8 48 00 00 01 */ bl ShouldPauseSimulation__9FEManagerb -/* 0000591C 000126AC 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00005920 000126B0 40 82 5B 40 */ bne .L_0000B460 -/* 00005924 000126B4 3D 40 00 00 */ lis r10, .rodata+0x69C@ha -/* 00005928 000126B8 3D 20 00 00 */ lis r9, .rodata+0x694@ha -/* 0000592C 000126BC C3 A9 06 94 */ lfs f29, .rodata+0x694@l(r9) -/* 00005930 000126C0 3D 60 00 00 */ lis r11, .rodata+0x698@ha -/* 00005934 000126C4 C1 AA 06 9C */ lfs f13, .rodata+0x69C@l(r10) -/* 00005938 000126C8 3B 41 00 08 */ addi r26, r1, 0x8 -/* 0000593C 000126CC C0 1F 01 8C */ lfs f0, 0x18c(r31) -/* 00005940 000126D0 C3 CB 06 98 */ lfs f30, .rodata+0x698@l(r11) -/* 00005944 000126D4 EF FC 03 72 */ fmuls f31, f28, f13 -/* 00005948 000126D8 D3 A1 00 08 */ stfs f29, 0x8(r1) -/* 0000594C 000126DC EC 00 F8 2A */ fadds f0, f0, f31 -/* 00005950 000126E0 D3 A1 00 0C */ stfs f29, 0xc(r1) -/* 00005954 000126E4 FC 00 F0 00 */ fcmpu cr0, f0, f30 -/* 00005958 000126E8 D3 DA 00 08 */ stfs f30, 0x8(r26) -/* 0000595C 000126EC D0 1F 01 8C */ stfs f0, 0x18c(r31) -/* 00005960 000126F0 4C 62 03 82 */ cror un, eq, lt -/* 00005964 000126F4 41 83 59 6C */ bso .L_0000B2D0 -/* 00005968 000126F8 D3 DF 01 8C */ stfs f30, 0x18c(r31) -/* 0000596C 000126FC 3B A1 00 28 */ addi r29, r1, 0x28 -/* 00005970 00012700 C0 3F 01 8C */ lfs f1, 0x18c(r31) -/* 00005974 00012704 38 7F 01 08 */ addi r3, r31, 0x108 -/* 00005978 00012708 7F A4 EB 78 */ mr r4, r29 -/* 0000597C 0001270C 48 00 4B 31 */ bl .L_0000A4AC -/* 00005980 00012710 C0 1F 02 14 */ lfs f0, 0x214(r31) -/* 00005984 00012714 EC 00 F8 2A */ fadds f0, f0, f31 -/* 00005988 00012718 FC 00 F0 00 */ fcmpu cr0, f0, f30 -/* 0000598C 0001271C D0 1F 02 14 */ stfs f0, 0x214(r31) -/* 00005990 00012720 4C 62 03 82 */ cror un, eq, lt -/* 00005994 00012724 41 83 59 9C */ bso .L_0000B330 -/* 00005998 00012728 D3 DF 02 14 */ stfs f30, 0x214(r31) -.L_0000599C: -/* 0000599C 0001272C 3B 81 00 18 */ addi r28, r1, 0x18 -/* 000059A0 00012730 C0 3F 02 14 */ lfs f1, 0x214(r31) -/* 000059A4 00012734 38 7F 01 90 */ addi r3, r31, 0x190 -/* 000059A8 00012738 7F 84 E3 78 */ mr r4, r28 -/* 000059AC 0001273C 48 00 4B 31 */ bl .L_0000A4DC -/* 000059B0 00012740 C0 1F 01 04 */ lfs f0, 0x104(r31) -/* 000059B4 00012744 EC 00 F8 2A */ fadds f0, f0, f31 -/* 000059B8 00012748 FC 00 F0 00 */ fcmpu cr0, f0, f30 -/* 000059BC 0001274C D0 1F 01 04 */ stfs f0, 0x104(r31) -/* 000059C0 00012750 4C 62 03 82 */ cror un, eq, lt -/* 000059C4 00012754 41 83 59 CC */ bso .L_0000B390 -/* 000059C8 00012758 D3 DF 01 04 */ stfs f30, 0x104(r31) -/* 000059CC 0001275C 3B C1 00 38 */ addi r30, r1, 0x38 -/* 000059D0 00012760 C0 3F 01 04 */ lfs f1, 0x104(r31) -/* 000059D4 00012764 38 7F 00 80 */ addi r3, r31, 0x80 -.L_000059D8: -/* 000059D8 00012768 7F C4 F3 78 */ mr r4, r30 -/* 000059DC 0001276C 48 00 4B 31 */ bl .L_0000A50C -/* 000059E0 00012770 3F 60 00 00 */ lis r27, _6Camera.StopUpdating@ha -/* 000059E4 00012774 80 1B 00 00 */ lwz r0, _6Camera.StopUpdating@l(r27) -/* 000059E8 00012778 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000059EC 0001277C 40 82 5A 30 */ bne .L_0000B41C -/* 000059F0 00012780 3D 20 00 00 */ lis r9, .rodata+0x6A0@ha -.L_000059F4: -/* 000059F4 00012784 C0 01 00 38 */ lfs f0, 0x38(r1) -/* 000059F8 00012788 C1 89 06 A0 */ lfs f12, .rodata+0x6A0@l(r9) -/* 000059FC 0001278C 3C 00 B6 0B */ lis r0, 0xb60b -/* 00005A00 00012790 60 00 60 B7 */ ori r0, r0, 0x60b7 -/* 00005A04 00012794 EC 00 03 32 */ fmuls f0, f0, f12 -/* 00005A08 00012798 81 5F 00 1C */ lwz r10, 0x1c(r31) -/* 00005A0C 0001279C FD A0 00 1E */ fctiwz f13, f0 -/* 00005A10 000127A0 D9 A1 00 90 */ stfd f13, 0x90(r1) -/* 00005A14 000127A4 81 21 00 94 */ lwz r9, 0x94(r1) -/* 00005A18 000127A8 7C 09 00 96 */ mulhw r0, r9, r0 -/* 00005A1C 000127AC 7D 2B FE 70 */ srawi r11, r9, 31 -/* 00005A20 000127B0 7C 00 4A 14 */ add r0, r0, r9 -/* 00005A24 000127B4 7C 00 46 70 */ srawi r0, r0, 8 -.L_00005A28: -/* 00005A28 000127B8 7C 0B 00 50 */ subf r0, r11, r0 -.L_00005A2C: -/* 00005A2C 000127BC B0 0A 00 C4 */ sth r0, 0xc4(r10) -/* 00005A30 000127C0 80 9F 02 18 */ lwz r4, 0x218(r31) -/* 00005A34 000127C4 7F C3 F3 78 */ mr r3, r30 -/* 00005A38 000127C8 3B C1 00 48 */ addi r30, r1, 0x48 -/* 00005A3C 000127CC 7C 65 1B 78 */ mr r5, r3 -/* 00005A40 000127D0 D3 A1 00 38 */ stfs f29, 0x38(r1) -/* 00005A44 000127D4 38 84 00 48 */ addi r4, r4, 0x48 -/* 00005A48 000127D8 D3 A1 00 3C */ stfs f29, 0x3c(r1) -/* 00005A4C 000127DC 7F D9 F3 78 */ mr r25, r30 -/* 00005A50 000127E0 D3 A1 00 40 */ stfs f29, 0x40(r1) -/* 00005A54 000127E4 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 -/* 00005A58 000127E8 C0 01 00 18 */ lfs f0, 0x18(r1) -/* 00005A5C 000127EC 7F C3 F3 78 */ mr r3, r30 -/* 00005A60 000127F0 C1 81 00 1C */ lfs f12, 0x1c(r1) -/* 00005A64 000127F4 7F 46 D3 78 */ mr r6, r26 -/* 00005A68 000127F8 C1 A1 00 20 */ lfs f13, 0x20(r1) -/* 00005A6C 000127FC 7F 85 E3 78 */ mr r5, r28 -/* 00005A70 00012800 C1 41 00 38 */ lfs f10, 0x38(r1) -/* 00005A74 00012804 7F A4 EB 78 */ mr r4, r29 -/* 00005A78 00012808 C1 61 00 3C */ lfs f11, 0x3c(r1) -/* 00005A7C 0001280C C1 21 00 40 */ lfs f9, 0x40(r1) -/* 00005A80 00012810 EC 00 50 2A */ fadds f0, f0, f10 -/* 00005A84 00012814 ED 8C 58 2A */ fadds f12, f12, f11 -/* 00005A88 00012818 D0 01 00 18 */ stfs f0, 0x18(r1) -/* 00005A8C 0001281C ED AD 48 2A */ fadds f13, f13, f9 -/* 00005A90 00012820 D1 81 00 1C */ stfs f12, 0x1c(r1) -/* 00005A94 00012824 D1 A1 00 20 */ stfs f13, 0x20(r1) -/* 00005A98 00012828 48 00 00 01 */ bl eCreateLookAtMatrix__FP8bMatrix4R8bVector3N21 -/* 00005A9C 0001282C 80 7F 02 18 */ lwz r3, 0x218(r31) -/* 00005AA0 00012830 7F A4 EB 78 */ mr r4, r29 -/* 00005AA4 00012834 38 63 00 18 */ addi r3, r3, 0x18 -/* 00005AA8 00012838 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 -/* 00005AAC 0001283C 80 1B 00 00 */ lwz r0, _6Camera.StopUpdating@l(r27) -/* 00005AB0 00012840 FF E0 08 90 */ fmr f31, f1 -/* 00005AB4 00012844 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00005AB8 00012848 40 82 5A C4 */ bne .L_0000B57C -/* 00005ABC 0001284C 81 3F 00 1C */ lwz r9, 0x1c(r31) -.L_00005AC0: -/* 00005AC0 00012850 D3 E9 00 B0 */ stfs f31, 0xb0(r9) -/* 00005AC4 00012854 3D 20 00 00 */ lis r9, .rodata+0x6A4@ha -/* 00005AC8 00012858 C0 1F 02 1C */ lfs f0, 0x21c(r31) -/* 00005ACC 0001285C C1 A9 06 A4 */ lfs f13, .rodata+0x6A4@l(r9) -/* 00005AD0 00012860 FC 40 E8 90 */ fmr f2, f29 -/* 00005AD4 00012864 FC 20 E0 90 */ fmr f1, f28 -/* 00005AD8 00012868 38 7F 02 1C */ addi r3, r31, 0x21c -/* 00005ADC 0001286C EC 00 03 72 */ fmuls f0, f0, f13 -/* 00005AE0 00012870 D0 1F 02 20 */ stfs f0, 0x220(r31) -/* 00005AE4 00012874 FC 60 10 90 */ fmr f3, f2 -/* 00005AE8 00012878 48 00 00 01 */ bl SplineSeek__6cPointP8tCubic1Dfff -/* 00005AEC 0001287C C0 3F 02 1C */ lfs f1, 0x21c(r31) -/* 00005AF0 00012880 80 1F 02 48 */ lwz r0, 0x248(r31) -/* 00005AF4 00012884 EC 1F 08 2A */ fadds f0, f31, f1 -/* 00005AF8 00012888 ED BE 00 28 */ fsubs f13, f30, f0 -/* 00005AFC 0001288C 2C 00 00 00 */ cmpwi r0, 0x0 -.L_00005B00: -/* 00005B00 00012890 FF ED 07 AE */ fsel f31, f13, f30, f0 -/* 00005B04 00012894 41 82 5B 30 */ beq .L_0000B634 -/* 00005B08 00012898 80 1B 00 00 */ lwz r0, _6Camera.StopUpdating@l(r27) -/* 00005B0C 0001289C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00005B10 000128A0 40 82 5B 30 */ bne .L_0000B640 -/* 00005B14 000128A4 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 00005B18 000128A8 EC 1F 08 2A */ fadds f0, f31, f1 -/* 00005B1C 000128AC 3D 60 00 00 */ lis r11, .rodata+0x6A8@ha -/* 00005B20 000128B0 D0 09 00 B4 */ stfs f0, 0xb4(r9) -/* 00005B24 000128B4 C1 AB 06 A8 */ lfs f13, .rodata+0x6A8@l(r11) -/* 00005B28 000128B8 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 00005B2C 000128BC D1 A9 00 B8 */ stfs f13, 0xb8(r9) -.L_00005B30: -/* 00005B30 000128C0 80 7F 00 1C */ lwz r3, 0x1c(r31) -/* 00005B34 000128C4 7F 24 CB 78 */ mr r4, r25 -/* 00005B38 000128C8 FC 20 E0 90 */ fmr f1, f28 -/* 00005B3C 000128CC 48 00 04 ED */ bl .L_00006028 -.L_00005B40: -/* 00005B40 000128D0 80 01 00 DC */ lwz r0, 0xdc(r1) -/* 00005B44 000128D4 7C 08 03 A6 */ mtlr r0 -/* 00005B48 000128D8 BB 21 00 9C */ lmw r25, 0x9c(r1) -/* 00005B4C 000128DC E3 81 00 B8 */ psq_l f28, 0xb8(r1), 0, qr0 -/* 00005B50 000128E0 E3 A1 00 C0 */ psq_l f29, 0xc0(r1), 0, qr0 -/* 00005B54 000128E4 E3 C1 00 C8 */ psq_l f30, 0xc8(r1), 0, qr0 -/* 00005B58 000128E8 E3 E1 00 D0 */ psq_l f31, 0xd0(r1), 0, qr0 -/* 00005B5C 000128EC 38 21 00 D8 */ addi r1, r1, 0xd8 -/* 00005B60 000128F0 4E 80 00 20 */ blr -.endfn Update__19TrackCopCameraMoverf - -# .text:0x5B64 | size: 0x8 -# RearViewMirrorCameraMover::GetAnchor -.fn GetAnchor__25RearViewMirrorCameraMover, global -/* 00005B64 000128F4 80 63 00 80 */ lwz r3, 0x80(r3) -/* 00005B68 000128F8 4E 80 00 20 */ blr -.endfn GetAnchor__25RearViewMirrorCameraMover - -# .text:0x5B6C | size: 0x8 -# TrackCarCameraMover::GetAnchor -.fn GetAnchor__19TrackCarCameraMover, global -/* 00005B6C 000128FC 80 63 00 A0 */ lwz r3, 0xa0(r3) -/* 00005B70 00012900 4E 80 00 20 */ blr -.endfn GetAnchor__19TrackCarCameraMover - -# .text:0x5B74 | size: 0x24 -# TrackCarCameraMover::GetTarget -.fn GetTarget__19TrackCarCameraMover, global -/* 00005B74 00012904 7C 69 1B 78 */ mr r9, r3 -/* 00005B78 00012908 80 69 00 A0 */ lwz r3, 0xa0(r9) -/* 00005B7C 0001290C 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00005B80 00012910 40 82 5B 90 */ bne .L_0000B710 -/* 00005B84 00012914 80 69 00 1C */ lwz r3, 0x1c(r9) -/* 00005B88 00012918 38 63 00 60 */ addi r3, r3, 0x60 -/* 00005B8C 0001291C 4E 80 00 20 */ blr -/* 00005B90 00012920 38 63 00 18 */ addi r3, r3, 0x18 -/* 00005B94 00012924 4E 80 00 20 */ blr -.endfn GetTarget__19TrackCarCameraMover - -# .text:0x5B98 | size: 0x8 -# TrackCopCameraMover::GetAnchor -.fn GetAnchor__19TrackCopCameraMover, global -/* 00005B98 00012928 80 63 02 18 */ lwz r3, 0x218(r3) -/* 00005B9C 0001292C 4E 80 00 20 */ blr -.endfn GetAnchor__19TrackCopCameraMover - -# .text:0x5BA0 | size: 0x8 -# TrackCopCameraMover::RenderCarPOV -.fn RenderCarPOV__19TrackCopCameraMover, global -/* 00005BA0 00012930 80 63 02 4C */ lwz r3, 0x24c(r3) -/* 00005BA4 00012934 4E 80 00 20 */ blr -.endfn RenderCarPOV__19TrackCopCameraMover - -# .text:0x5BA8 | size: 0x24 -# TrackCopCameraMover::GetTarget -.fn GetTarget__19TrackCopCameraMover, global -/* 00005BA8 00012938 7C 69 1B 78 */ mr r9, r3 -/* 00005BAC 0001293C 80 69 02 18 */ lwz r3, 0x218(r9) -/* 00005BB0 00012940 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00005BB4 00012944 40 82 5B C4 */ bne .L_0000B778 -/* 00005BB8 00012948 80 69 00 1C */ lwz r3, 0x1c(r9) -/* 00005BBC 0001294C 38 63 00 60 */ addi r3, r3, 0x60 -/* 00005BC0 00012950 4E 80 00 20 */ blr -/* 00005BC4 00012954 38 63 00 18 */ addi r3, r3, 0x18 -/* 00005BC8 00012958 4E 80 00 20 */ blr -.endfn GetTarget__19TrackCopCameraMover - -# .text:0x5BCC | size: 0x1E8 -.fn __Q28CameraAI8Director8EVIEW_ID, global -/* 00005BCC 0001295C 94 21 FF C8 */ stwu r1, -0x38(r1) -/* 00005BD0 00012960 7C 08 02 A6 */ mflr r0 -/* 00005BD4 00012964 7D 80 00 26 */ mfcr r12 -/* 00005BD8 00012968 BE E1 00 14 */ stmw r23, 0x14(r1) -/* 00005BDC 0001296C 90 01 00 3C */ stw r0, 0x3c(r1) -/* 00005BE0 00012970 91 81 00 10 */ stw r12, 0x10(r1) -/* 00005BE4 00012974 3F 40 00 00 */ lis r26, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha -/* 00005BE8 00012978 7C 97 23 78 */ mr r23, r4 -/* 00005BEC 0001297C 3B BA 00 00 */ addi r29, r26, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l -/* 00005BF0 00012980 7C 7F 1B 78 */ mr r31, r3 -/* 00005BF4 00012984 80 9D 00 08 */ lwz r4, 0x8(r29) -/* 00005BF8 00012988 3B 01 00 08 */ addi r24, r1, 0x8 -.L_00005BFC: -/* 00005BFC 0001298C 80 1D 00 04 */ lwz r0, 0x4(r29) -/* 00005C00 00012990 93 E1 00 08 */ stw r31, 0x8(r1) -.L_00005C04: -/* 00005C04 00012994 7C 04 00 40 */ cmplw r4, r0 -/* 00005C08 00012998 41 80 5C E8 */ blt .L_0000B8F0 -/* 00005C0C 0001299C 81 3D 00 0C */ lwz r9, 0xc(r29) -/* 00005C10 000129A0 38 84 00 01 */ addi r4, r4, 0x1 -/* 00005C14 000129A4 80 09 00 24 */ lwz r0, 0x24(r9) -/* 00005C18 000129A8 A8 69 00 20 */ lha r3, 0x20(r9) -/* 00005C1C 000129AC 7C 08 03 A6 */ mtlr r0 -/* 00005C20 000129B0 7C 63 EA 14 */ add r3, r3, r29 -/* 00005C24 000129B4 4E 80 00 21 */ blrl -/* 00005C28 000129B8 80 1D 00 04 */ lwz r0, 0x4(r29) -/* 00005C2C 000129BC 7C 7E 1B 78 */ mr r30, r3 -.L_00005C30: -/* 00005C30 000129C0 7C 1E 00 40 */ cmplw r30, r0 -/* 00005C34 000129C4 40 81 5C E8 */ ble .L_0000B91C -/* 00005C38 000129C8 81 3D 00 0C */ lwz r9, 0xc(r29) -/* 00005C3C 000129CC 7F C4 F3 78 */ mr r4, r30 -/* 00005C40 000129D0 80 09 00 34 */ lwz r0, 0x34(r9) -/* 00005C44 000129D4 A8 69 00 30 */ lha r3, 0x30(r9) -/* 00005C48 000129D8 7C 08 03 A6 */ mtlr r0 -/* 00005C4C 000129DC 7C 63 EA 14 */ add r3, r3, r29 -/* 00005C50 000129E0 4E 80 00 21 */ blrl -/* 00005C54 000129E4 81 3D 00 0C */ lwz r9, 0xc(r29) -.L_00005C58: -/* 00005C58 000129E8 7F C4 F3 78 */ mr r4, r30 -/* 00005C5C 000129EC 38 A0 00 10 */ li r5, 0x10 -/* 00005C60 000129F0 83 9A 00 00 */ lwz r28, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r26) -/* 00005C64 000129F4 A8 69 00 10 */ lha r3, 0x10(r9) -/* 00005C68 000129F8 80 09 00 14 */ lwz r0, 0x14(r9) -/* 00005C6C 000129FC 7C 63 EA 14 */ add r3, r3, r29 -.L_00005C70: -/* 00005C70 00012A00 83 7D 00 08 */ lwz r27, 0x8(r29) -/* 00005C74 00012A04 7C 08 03 A6 */ mtlr r0 -/* 00005C78 00012A08 83 3D 00 04 */ lwz r25, 0x4(r29) -/* 00005C7C 00012A0C 4E 80 00 21 */ blrl -/* 00005C80 00012A10 93 DD 00 04 */ stw r30, 0x4(r29) -/* 00005C84 00012A14 7C 1C 18 00 */ cmpw r28, r3 -/* 00005C88 00012A18 90 7A 00 00 */ stw r3, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r26) -/* 00005C8C 00012A1C 41 82 5C E8 */ beq .L_0000B974 -/* 00005C90 00012A20 38 00 00 00 */ li r0, 0x0 -/* 00005C94 00012A24 3B C0 00 00 */ li r30, 0x0 -/* 00005C98 00012A28 90 1D 00 08 */ stw r0, 0x8(r29) -.L_00005C9C: -/* 00005C9C 00012A2C 7C 1E D8 00 */ cmpw r30, r27 -/* 00005CA0 00012A30 2E 1C 00 00 */ cmpwi cr4, r28, 0x0 -.L_00005CA4: -/* 00005CA4 00012A34 40 80 5C C4 */ bge .L_0000B968 -/* 00005CA8 00012A38 57 C4 10 3A */ slwi r4, r30, 2 -/* 00005CAC 00012A3C 7F A3 EB 78 */ mr r3, r29 -/* 00005CB0 00012A40 7C 9C 22 14 */ add r4, r28, r4 -/* 00005CB4 00012A44 3B DE 00 01 */ addi r30, r30, 0x1 -/* 00005CB8 00012A48 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZPQ28CameraAI8Directori16RCPQ28CameraAI8Director -/* 00005CBC 00012A4C 7C 1E D8 00 */ cmpw r30, r27 -/* 00005CC0 00012A50 41 80 5C A8 */ blt .L_0000B968 -/* 00005CC4 00012A54 41 92 5C E8 */ beq cr4, .L_0000B9AC -/* 00005CC8 00012A58 81 3D 00 0C */ lwz r9, 0xc(r29) -/* 00005CCC 00012A5C 7F 84 E3 78 */ mr r4, r28 -/* 00005CD0 00012A60 7F 25 CB 78 */ mr r5, r25 -/* 00005CD4 00012A64 A8 69 00 18 */ lha r3, 0x18(r9) -/* 00005CD8 00012A68 80 09 00 1C */ lwz r0, 0x1c(r9) -.L_00005CDC: -/* 00005CDC 00012A6C 7C 7D 1A 14 */ add r3, r29, r3 -/* 00005CE0 00012A70 7C 08 03 A6 */ mtlr r0 -/* 00005CE4 00012A74 4E 80 00 21 */ blrl -/* 00005CE8 00012A78 81 3D 00 08 */ lwz r9, 0x8(r29) -/* 00005CEC 00012A7C 81 7D 00 00 */ lwz r11, 0x0(r29) -/* 00005CF0 00012A80 55 29 10 3A */ slwi r9, r9, 2 -/* 00005CF4 00012A84 7C 09 5A 14 */ add r0, r9, r11 -/* 00005CF8 00012A88 2C 00 00 00 */ cmpwi r0, 0x0 -.L_00005CFC: -/* 00005CFC 00012A8C 41 82 5D 08 */ beq .L_0000BA04 -/* 00005D00 00012A90 80 18 00 00 */ lwz r0, 0x0(r24) -/* 00005D04 00012A94 7C 09 59 2E */ stwx r0, r9, r11 -/* 00005D08 00012A98 81 3D 00 08 */ lwz r9, 0x8(r29) -/* 00005D0C 00012A9C 3D 60 00 00 */ lis r11, _vt.Q28CameraAI8Director@ha -/* 00005D10 00012AA0 3F C0 00 00 */ lis r30, .rodata@ha -/* 00005D14 00012AA4 39 6B 00 00 */ addi r11, r11, _vt.Q28CameraAI8Director@l -/* 00005D18 00012AA8 39 29 00 01 */ addi r9, r9, 0x1 -/* 00005D1C 00012AAC 3B DE 00 00 */ addi r30, r30, .rodata@l -.L_00005D20: -/* 00005D20 00012AB0 91 3D 00 08 */ stw r9, 0x8(r29) -/* 00005D24 00012AB4 7F C3 F3 78 */ mr r3, r30 -/* 00005D28 00012AB8 92 FF 00 04 */ stw r23, 0x4(r31) -/* 00005D2C 00012ABC 3B 9F 00 08 */ addi r28, r31, 0x8 -/* 00005D30 00012AC0 91 7F 02 C4 */ stw r11, 0x2c4(r31) -.L_00005D34: -/* 00005D34 00012AC4 3B A0 00 00 */ li r29, 0x0 -/* 00005D38 00012AC8 48 00 00 01 */ bl StringHash64__6AttribPCc -.L_00005D3C: -/* 00005D3C 00012ACC 90 7F 00 08 */ stw r3, 0x8(r31) -/* 00005D40 00012AD0 90 9F 00 0C */ stw r4, 0xc(r31) -/* 00005D44 00012AD4 7F C3 F3 78 */ mr r3, r30 -/* 00005D48 00012AD8 48 00 00 01 */ bl StringHash32__6AttribPCc -/* 00005D4C 00012ADC 90 7C 00 08 */ stw r3, 0x8(r28) -/* 00005D50 00012AE0 3C C0 00 00 */ lis r6, .rodata+0x740@ha -/* 00005D54 00012AE4 93 DF 00 14 */ stw r30, 0x14(r31) -/* 00005D58 00012AE8 3C A0 98 C7 */ lis r5, 0x98c7 -.L_00005D5C: -/* 00005D5C 00012AEC 93 BF 00 18 */ stw r29, 0x18(r31) -/* 00005D60 00012AF0 38 C6 07 40 */ addi r6, r6, .rodata+0x740@l -/* 00005D64 00012AF4 38 7F 00 1C */ addi r3, r31, 0x1c -/* 00005D68 00012AF8 38 80 00 01 */ li r4, 0x1 -.L_00005D6C: -/* 00005D6C 00012AFC 60 A5 A2 F5 */ ori r5, r5, 0xa2f5 -/* 00005D70 00012B00 38 E0 00 00 */ li r7, 0x0 -/* 00005D74 00012B04 48 00 00 01 */ bl __11ActionQueueiUiPCcb -/* 00005D78 00012B08 3D 20 00 00 */ lis r9, .rodata+0x748@ha -/* 00005D7C 00012B0C 93 BF 02 BC */ stw r29, 0x2bc(r31) -/* 00005D80 00012B10 C0 09 07 48 */ lfs f0, .rodata+0x748@l(r9) -.L_00005D84: -/* 00005D84 00012B14 7F E3 FB 78 */ mr r3, r31 -.L_00005D88: -/* 00005D88 00012B18 93 BF 02 B0 */ stw r29, 0x2b0(r31) -/* 00005D8C 00012B1C D0 1F 02 C0 */ stfs f0, 0x2c0(r31) -/* 00005D90 00012B20 D0 1F 02 B4 */ stfs f0, 0x2b4(r31) -/* 00005D94 00012B24 D0 1F 02 B8 */ stfs f0, 0x2b8(r31) -/* 00005D98 00012B28 80 01 00 3C */ lwz r0, 0x3c(r1) -/* 00005D9C 00012B2C 81 81 00 10 */ lwz r12, 0x10(r1) -/* 00005DA0 00012B30 7C 08 03 A6 */ mtlr r0 -/* 00005DA4 00012B34 BA E1 00 14 */ lmw r23, 0x14(r1) -/* 00005DA8 00012B38 7D 80 81 20 */ mtcrf 8, r12 -/* 00005DAC 00012B3C 38 21 00 38 */ addi r1, r1, 0x38 -.L_00005DB0: -/* 00005DB0 00012B40 4E 80 00 20 */ blr -.endfn __Q28CameraAI8Director8EVIEW_ID - -# .text:0x5DB4 | size: 0x174 -.fn _._Q28CameraAI8Director, global -/* 00005DB4 00012B44 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 00005DB8 00012B48 7C 08 02 A6 */ mflr r0 -/* 00005DBC 00012B4C BF 81 00 10 */ stmw r28, 0x10(r1) -/* 00005DC0 00012B50 90 01 00 24 */ stw r0, 0x24(r1) -/* 00005DC4 00012B54 3D 20 00 00 */ lis r9, _vt.Q28CameraAI8Director@ha -.L_00005DC8: -/* 00005DC8 00012B58 7C 7D 1B 78 */ mr r29, r3 -/* 00005DCC 00012B5C 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI8Director@l -/* 00005DD0 00012B60 7C 9C 23 78 */ mr r28, r4 -/* 00005DD4 00012B64 91 3D 02 C4 */ stw r9, 0x2c4(r29) -/* 00005DD8 00012B68 48 00 5F 29 */ bl .L_0000BD00 -/* 00005DDC 00012B6C 3B C1 00 08 */ addi r30, r1, 0x8 -/* 00005DE0 00012B70 38 7D 00 1C */ addi r3, r29, 0x1c -/* 00005DE4 00012B74 38 80 00 02 */ li r4, 0x2 -/* 00005DE8 00012B78 48 00 00 01 */ bl _._11ActionQueue -/* 00005DEC 00012B7C 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha -/* 00005DF0 00012B80 93 A1 00 08 */ stw r29, 0x8(r1) -/* 00005DF4 00012B84 39 69 00 00 */ addi r11, r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l -/* 00005DF8 00012B88 81 49 00 00 */ lwz r10, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r9) -/* 00005DFC 00012B8C 80 0B 00 08 */ lwz r0, 0x8(r11) -.L_00005E00: -/* 00005E00 00012B90 7F C5 F3 78 */ mr r5, r30 -/* 00005E04 00012B94 7D 43 53 78 */ mr r3, r10 -/* 00005E08 00012B98 54 00 10 3A */ slwi r0, r0, 2 -/* 00005E0C 00012B9C 7F EA 02 14 */ add r31, r10, r0 -/* 00005E10 00012BA0 7F E4 FB 78 */ mr r4, r31 -.L_00005E14: -/* 00005E14 00012BA4 48 00 00 01 */ bl find__H2ZPPQ28CameraAI8DirectorZPQ28CameraAI8Director_4_STLX01X01RCX11_X01 -/* 00005E18 00012BA8 7C 03 F8 00 */ cmpw r3, r31 -.L_00005E1C: -/* 00005E1C 00012BAC 40 82 5E 28 */ bne .L_0000BC44 -/* 00005E20 00012BB0 7F E3 FB 78 */ mr r3, r31 -/* 00005E24 00012BB4 48 00 5E 58 */ b .L_0000BC7C -/* 00005E28 00012BB8 39 63 00 04 */ addi r11, r3, 0x4 -.L_00005E2C: -/* 00005E2C 00012BBC 7C 0B F8 00 */ cmpw r11, r31 -/* 00005E30 00012BC0 41 82 5E 58 */ beq .L_0000BC88 -/* 00005E34 00012BC4 81 2B 00 00 */ lwz r9, 0x0(r11) -/* 00005E38 00012BC8 80 1E 00 00 */ lwz r0, 0x0(r30) -/* 00005E3C 00012BCC 7C 09 00 00 */ cmpw r9, r0 -/* 00005E40 00012BD0 41 82 5E 4C */ beq .L_0000BC8C -.L_00005E44: -/* 00005E44 00012BD4 91 23 00 00 */ stw r9, 0x0(r3) -/* 00005E48 00012BD8 38 63 00 04 */ addi r3, r3, 0x4 -/* 00005E4C 00012BDC 39 6B 00 04 */ addi r11, r11, 0x4 -/* 00005E50 00012BE0 7C 0B F8 00 */ cmpw r11, r31 -/* 00005E54 00012BE4 40 82 5E 34 */ bne .L_0000BC88 -/* 00005E58 00012BE8 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha -/* 00005E5C 00012BEC 38 A9 00 00 */ addi r5, r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l -/* 00005E60 00012BF0 81 49 00 00 */ lwz r10, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r9) -/* 00005E64 00012BF4 81 05 00 08 */ lwz r8, 0x8(r5) -/* 00005E68 00012BF8 55 00 10 3A */ slwi r0, r8, 2 -/* 00005E6C 00012BFC 7D 6A 02 14 */ add r11, r10, r0 -/* 00005E70 00012C00 7C 03 58 00 */ cmpw r3, r11 -/* 00005E74 00012C04 41 82 5E EC */ beq .L_0000BD60 -/* 00005E78 00012C08 7D 23 58 50 */ subf r9, r3, r11 -/* 00005E7C 00012C0C 7C 0A 18 50 */ subf r0, r10, r3 -/* 00005E80 00012C10 7D 3F 16 70 */ srawi r31, r9, 2 -/* 00005E84 00012C14 7C 06 16 70 */ srawi r6, r0, 2 -/* 00005E88 00012C18 7D 09 43 78 */ mr r9, r8 -.L_00005E8C: -/* 00005E8C 00012C1C 38 63 00 04 */ addi r3, r3, 0x4 -/* 00005E90 00012C20 7C 03 58 00 */ cmpw r3, r11 -/* 00005E94 00012C24 40 82 5E 8C */ bne .L_0000BD20 -/* 00005E98 00012C28 7C E6 FA 14 */ add r7, r6, r31 -/* 00005E9C 00012C2C 39 00 00 00 */ li r8, 0x0 -/* 00005EA0 00012C30 7C E4 3B 78 */ mr r4, r7 -/* 00005EA4 00012C34 7C 04 48 50 */ subf r0, r4, r9 -/* 00005EA8 00012C38 7C 08 00 40 */ cmplw r8, r0 -/* 00005EAC 00012C3C 40 80 5E E4 */ bge .L_0000BD90 -/* 00005EB0 00012C40 7C 06 42 14 */ add r0, r6, r8 -/* 00005EB4 00012C44 81 65 00 00 */ lwz r11, 0x0(r5) -/* 00005EB8 00012C48 54 0A 10 3A */ slwi r10, r0, 2 -/* 00005EBC 00012C4C 7D 27 42 14 */ add r9, r7, r8 -/* 00005EC0 00012C50 7C 0A 5A 14 */ add r0, r10, r11 -/* 00005EC4 00012C54 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00005EC8 00012C58 41 82 5E D8 */ beq AquireCar__16CDActionTrackCop -/* 00005ECC 00012C5C 55 29 10 3A */ slwi r9, r9, 2 -/* 00005ED0 00012C60 7C 09 58 2E */ lwzx r0, r9, r11 -/* 00005ED4 00012C64 7C 0A 59 2E */ stwx r0, r10, r11 -/* 00005ED8 00012C68 39 08 00 01 */ addi r8, r8, 0x1 -/* 00005EDC 00012C6C 81 25 00 08 */ lwz r9, 0x8(r5) -/* 00005EE0 00012C70 48 00 5E A4 */ b .L_0000BD84 -/* 00005EE4 00012C74 7C 1F 48 50 */ subf r0, r31, r9 -/* 00005EE8 00012C78 90 05 00 08 */ stw r0, 0x8(r5) -/* 00005EEC 00012C7C 73 80 00 01 */ andi. r0, r28, 0x1 -/* 00005EF0 00012C80 41 82 5F 14 */ beq .L_0000BE04 -/* 00005EF4 00012C84 2C 1D 00 00 */ cmpwi r29, 0x0 -/* 00005EF8 00012C88 41 82 5F 14 */ beq .L_0000BE0C -/* 00005EFC 00012C8C 3C 60 00 00 */ lis r3, gFastMem@ha -/* 00005F00 00012C90 7F A4 EB 78 */ mr r4, r29 -/* 00005F04 00012C94 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 00005F08 00012C98 38 A0 02 C8 */ li r5, 0x2c8 -/* 00005F0C 00012C9C 38 C0 00 00 */ li r6, 0x0 -/* 00005F10 00012CA0 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 00005F14 00012CA4 80 01 00 24 */ lwz r0, 0x24(r1) -/* 00005F18 00012CA8 7C 08 03 A6 */ mtlr r0 -/* 00005F1C 00012CAC BB 81 00 10 */ lmw r28, 0x10(r1) -/* 00005F20 00012CB0 38 21 00 20 */ addi r1, r1, 0x20 -/* 00005F24 00012CB4 4E 80 00 20 */ blr -.endfn _._Q28CameraAI8Director - -# .text:0x5F28 | size: 0x58 -# CameraAI::Director::ReleaseAction -.fn ReleaseAction__Q28CameraAI8Director, global -/* 00005F28 00012CB8 94 21 FF F0 */ stwu r1, -0x10(r1) -.L_00005F2C: -/* 00005F2C 00012CBC 7C 08 02 A6 */ mflr r0 -/* 00005F30 00012CC0 93 E1 00 0C */ stw r31, 0xc(r1) -.L_00005F34: -/* 00005F34 00012CC4 90 01 00 14 */ stw r0, 0x14(r1) -/* 00005F38 00012CC8 7C 7F 1B 78 */ mr r31, r3 -/* 00005F3C 00012CCC 81 7F 00 18 */ lwz r11, 0x18(r31) -/* 00005F40 00012CD0 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00005F44 00012CD4 41 82 5F 6C */ beq .L_0000BEB0 -/* 00005F48 00012CD8 81 2B 00 14 */ lwz r9, 0x14(r11) -/* 00005F4C 00012CDC 38 80 00 03 */ li r4, 0x3 -/* 00005F50 00012CE0 80 09 00 0C */ lwz r0, 0xc(r9) -/* 00005F54 00012CE4 A8 69 00 08 */ lha r3, 0x8(r9) -/* 00005F58 00012CE8 7C 08 03 A6 */ mtlr r0 -/* 00005F5C 00012CEC 7C 6B 1A 14 */ add r3, r11, r3 -/* 00005F60 00012CF0 4E 80 00 21 */ blrl -/* 00005F64 00012CF4 38 00 00 00 */ li r0, 0x0 -/* 00005F68 00012CF8 90 1F 00 18 */ stw r0, 0x18(r31) -.L_00005F6C: -/* 00005F6C 00012CFC 80 01 00 14 */ lwz r0, 0x14(r1) -/* 00005F70 00012D00 7C 08 03 A6 */ mtlr r0 -/* 00005F74 00012D04 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 00005F78 00012D08 38 21 00 10 */ addi r1, r1, 0x10 -/* 00005F7C 00012D0C 4E 80 00 20 */ blr -.endfn ReleaseAction__Q28CameraAI8Director - -# .text:0x5F80 | size: 0xA0 -# CameraAI::Director::Reset -.fn Reset__Q28CameraAI8Director, global -/* 00005F80 00012D10 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 00005F84 00012D14 7C 08 02 A6 */ mflr r0 -/* 00005F88 00012D18 BF 81 00 18 */ stmw r28, 0x18(r1) -/* 00005F8C 00012D1C 90 01 00 2C */ stw r0, 0x2c(r1) -/* 00005F90 00012D20 3D 20 00 00 */ lis r9, .rodata+0x754@ha -/* 00005F94 00012D24 3F A0 00 00 */ lis r29, .rodata+0x74C@ha -/* 00005F98 00012D28 C0 09 07 54 */ lfs f0, .rodata+0x754@l(r9) -/* 00005F9C 00012D2C 7C 7E 1B 78 */ mr r30, r3 -/* 00005FA0 00012D30 3B BD 07 4C */ addi r29, r29, .rodata+0x74C@l -/* 00005FA4 00012D34 38 00 00 00 */ li r0, 0x0 -/* 00005FA8 00012D38 3B 81 00 08 */ addi r28, r1, 0x8 -/* 00005FAC 00012D3C 90 1E 02 BC */ stw r0, 0x2bc(r30) -/* 00005FB0 00012D40 D0 1E 02 C0 */ stfs f0, 0x2c0(r30) -/* 00005FB4 00012D44 7F A3 EB 78 */ mr r3, r29 -.L_00005FB8: -/* 00005FB8 00012D48 D0 1E 02 B8 */ stfs f0, 0x2b8(r30) -/* 00005FBC 00012D4C D0 1E 02 B4 */ stfs f0, 0x2b4(r30) -/* 00005FC0 00012D50 48 00 00 01 */ bl StringHash64__6AttribPCc -/* 00005FC4 00012D54 90 61 00 08 */ stw r3, 0x8(r1) -/* 00005FC8 00012D58 90 81 00 0C */ stw r4, 0xc(r1) -/* 00005FCC 00012D5C 7F A3 EB 78 */ mr r3, r29 -.L_00005FD0: -/* 00005FD0 00012D60 48 00 00 01 */ bl StringHash32__6AttribPCc -/* 00005FD4 00012D64 90 7C 00 08 */ stw r3, 0x8(r28) -/* 00005FD8 00012D68 7F 84 E3 78 */ mr r4, r28 -/* 00005FDC 00012D6C 93 A1 00 14 */ stw r29, 0x14(r1) -/* 00005FE0 00012D70 7F C3 F3 78 */ mr r3, r30 -/* 00005FE4 00012D74 48 00 62 39 */ bl .L_0000C21C -/* 00005FE8 00012D78 81 7E 00 18 */ lwz r11, 0x18(r30) -/* 00005FEC 00012D7C 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00005FF0 00012D80 41 82 60 0C */ beq .L_0000BFFC -/* 00005FF4 00012D84 81 2B 00 14 */ lwz r9, 0x14(r11) -/* 00005FF8 00012D88 A8 69 00 18 */ lha r3, 0x18(r9) -/* 00005FFC 00012D8C 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 00006000 00012D90 7C 6B 1A 14 */ add r3, r11, r3 -/* 00006004 00012D94 7C 08 03 A6 */ mtlr r0 -/* 00006008 00012D98 4E 80 00 21 */ blrl -/* 0000600C 00012D9C 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 00006010 00012DA0 7C 08 03 A6 */ mtlr r0 -/* 00006014 00012DA4 BB 81 00 18 */ lmw r28, 0x18(r1) -/* 00006018 00012DA8 38 21 00 28 */ addi r1, r1, 0x28 -/* 0000601C 00012DAC 4E 80 00 20 */ blr -.endfn Reset__Q28CameraAI8Director - -# .text:0x6020 | size: 0x14 -.fn JumpStart__Q28CameraAI8Directorf, global -/* 00006020 00012DB0 3D 20 00 00 */ lis r9, kJumpTimeMultiplier@ha -/* 00006024 00012DB4 C0 09 00 00 */ lfs f0, kJumpTimeMultiplier@l(r9) -.L_00006028: -/* 00006028 00012DB8 EC 21 00 32 */ fmuls f1, f1, f0 -/* 0000602C 00012DBC D0 23 02 B8 */ stfs f1, 0x2b8(r3) -/* 00006030 00012DC0 4E 80 00 20 */ blr -.endfn JumpStart__Q28CameraAI8Directorf - -# .text:0x6034 | size: 0x28 -# CameraAI::Director::EndJumping -.fn EndJumping__Q28CameraAI8Director, global -/* 00006034 00012DC4 3D 20 00 00 */ lis r9, kEndJumpThreshold@ha -/* 00006038 00012DC8 C0 03 02 B8 */ lfs f0, 0x2b8(r3) -/* 0000603C 00012DCC C1 A9 00 00 */ lfs f13, kEndJumpThreshold@l(r9) -/* 00006040 00012DD0 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00006044 00012DD4 4C 62 0B 82 */ cror un, eq, gt -/* 00006048 00012DD8 4D 83 00 20 */ bsolr -/* 0000604C 00012DDC 3D 20 00 00 */ lis r9, kEndJumpValue@ha -/* 00006050 00012DE0 C0 09 00 00 */ lfs f0, kEndJumpValue@l(r9) -/* 00006054 00012DE4 D0 03 02 B8 */ stfs f0, 0x2b8(r3) -/* 00006058 00012DE8 4E 80 00 20 */ blr -.endfn EndJumping__Q28CameraAI8Director - -# .text:0x605C | size: 0x28 -# CameraAI::Director::EndPursuitStart -.fn EndPursuitStart__Q28CameraAI8Director, global -/* 0000605C 00012DEC 3D 20 00 00 */ lis r9, kEndPursuitThreshold@ha -/* 00006060 00012DF0 C0 03 02 B4 */ lfs f0, 0x2b4(r3) -/* 00006064 00012DF4 C1 A9 00 00 */ lfs f13, kEndPursuitThreshold@l(r9) -/* 00006068 00012DF8 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 0000606C 00012DFC 4C 62 0B 82 */ cror un, eq, gt -/* 00006070 00012E00 4D 83 00 20 */ bsolr -/* 00006074 00012E04 3D 20 00 00 */ lis r9, kEndPursuitValue@ha -/* 00006078 00012E08 C0 09 00 00 */ lfs f0, kEndPursuitValue@l(r9) -/* 0000607C 00012E0C D0 03 02 B4 */ stfs f0, 0x2b4(r3) -/* 00006080 00012E10 4E 80 00 20 */ blr -.endfn EndPursuitStart__Q28CameraAI8Director - -# .text:0x6084 | size: 0x48 -# CameraAI::Director::GetMover -.fn GetMover__Q28CameraAI8Director, global -/* 00006084 00012E14 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 00006088 00012E18 7C 08 02 A6 */ mflr r0 -/* 0000608C 00012E1C 90 01 00 0C */ stw r0, 0xc(r1) -/* 00006090 00012E20 81 63 00 18 */ lwz r11, 0x18(r3) -/* 00006094 00012E24 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00006098 00012E28 40 82 60 A4 */ bne .L_0000C13C -/* 0000609C 00012E2C 38 60 00 00 */ li r3, 0x0 -/* 000060A0 00012E30 48 00 60 BC */ b .L_0000C15C -/* 000060A4 00012E34 81 2B 00 14 */ lwz r9, 0x14(r11) -/* 000060A8 00012E38 A8 69 00 30 */ lha r3, 0x30(r9) -/* 000060AC 00012E3C 80 09 00 34 */ lwz r0, 0x34(r9) -/* 000060B0 00012E40 7C 6B 1A 14 */ add r3, r11, r3 -.L_000060B4: -/* 000060B4 00012E44 7C 08 03 A6 */ mtlr r0 -.L_000060B8: -/* 000060B8 00012E48 4E 80 00 21 */ blrl -/* 000060BC 00012E4C 80 01 00 0C */ lwz r0, 0xc(r1) -/* 000060C0 00012E50 7C 08 03 A6 */ mtlr r0 -/* 000060C4 00012E54 38 21 00 08 */ addi r1, r1, 0x8 -/* 000060C8 00012E58 4E 80 00 20 */ blr -.endfn GetMover__Q28CameraAI8Director - -# .text:0x60CC | size: 0x16C -.fn Update__Q28CameraAI8Directorf, global -/* 000060CC 00012E5C 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 000060D0 00012E60 7C 08 02 A6 */ mflr r0 -/* 000060D4 00012E64 F3 E1 00 28 */ psq_st f31, 0x28(r1), 0, qr0 -/* 000060D8 00012E68 BF 81 00 18 */ stmw r28, 0x18(r1) -/* 000060DC 00012E6C 90 01 00 34 */ stw r0, 0x34(r1) -/* 000060E0 00012E70 7C 7F 1B 78 */ mr r31, r3 -/* 000060E4 00012E74 FF E0 08 90 */ fmr f31, f1 -/* 000060E8 00012E78 3C 60 00 00 */ lis r3, TheGameFlowManager@ha -/* 000060EC 00012E7C 38 63 00 00 */ addi r3, r3, TheGameFlowManager@l -/* 000060F0 00012E80 48 00 00 01 */ bl IsPaused__15GameFlowManager -/* 000060F4 00012E84 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000060F8 00012E88 40 82 61 1C */ bne .L_0000C214 -/* 000060FC 00012E8C 3D 20 00 00 */ lis r9, .rodata+0x758@ha -/* 00006100 00012E90 C1 BF 02 B8 */ lfs f13, 0x2b8(r31) -/* 00006104 00012E94 C0 09 07 58 */ lfs f0, .rodata+0x758@l(r9) -/* 00006108 00012E98 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 0000610C 00012E9C 4C 62 03 82 */ cror un, eq, lt -.L_00006110: -/* 00006110 00012EA0 41 83 61 1C */ bso .L_0000C22C -/* 00006114 00012EA4 EC 0D F8 28 */ fsubs f0, f13, f31 -/* 00006118 00012EA8 D0 1F 02 B8 */ stfs f0, 0x2b8(r31) -/* 0000611C 00012EAC 38 60 00 01 */ li r3, 0x1 -/* 00006120 00012EB0 48 00 00 01 */ bl ShouldPauseSimulation__9FEManagerb -/* 00006124 00012EB4 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00006128 00012EB8 40 82 61 4C */ bne .L_0000C274 -/* 0000612C 00012EBC 3D 20 00 00 */ lis r9, .rodata+0x758@ha -/* 00006130 00012EC0 C1 BF 02 B4 */ lfs f13, 0x2b4(r31) -/* 00006134 00012EC4 C0 09 07 58 */ lfs f0, .rodata+0x758@l(r9) -/* 00006138 00012EC8 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 0000613C 00012ECC 4C 62 03 82 */ cror un, eq, lt -/* 00006140 00012ED0 41 83 61 4C */ bso .L_0000C28C -/* 00006144 00012ED4 EC 0D F8 28 */ fsubs f0, f13, f31 -/* 00006148 00012ED8 D0 1F 02 B4 */ stfs f0, 0x2b4(r31) -/* 0000614C 00012EDC 7F E3 FB 78 */ mr r3, r31 -.L_00006150: -/* 00006150 00012EE0 48 00 63 D5 */ bl .L_0000C524 -/* 00006154 00012EE4 81 7F 00 18 */ lwz r11, 0x18(r31) -/* 00006158 00012EE8 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000615C 00012EEC 41 82 62 20 */ beq .L_0000C37C -/* 00006160 00012EF0 81 2B 00 14 */ lwz r9, 0x14(r11) -/* 00006164 00012EF4 3B A1 00 08 */ addi r29, r1, 0x8 -/* 00006168 00012EF8 80 09 00 24 */ lwz r0, 0x24(r9) -/* 0000616C 00012EFC A8 69 00 20 */ lha r3, 0x20(r9) -/* 00006170 00012F00 7C 08 03 A6 */ mtlr r0 -.L_00006174: -/* 00006174 00012F04 7C 6B 1A 14 */ add r3, r11, r3 -/* 00006178 00012F08 4E 80 00 21 */ blrl -/* 0000617C 00012F0C 3F C0 00 00 */ lis r30, .rodata+0x74C@ha -/* 00006180 00012F10 7C 7C 1B 78 */ mr r28, r3 -/* 00006184 00012F14 3B DE 07 4C */ addi r30, r30, .rodata+0x74C@l -/* 00006188 00012F18 7F C3 F3 78 */ mr r3, r30 -/* 0000618C 00012F1C 48 00 00 01 */ bl StringHash64__6AttribPCc -/* 00006190 00012F20 90 61 00 08 */ stw r3, 0x8(r1) -/* 00006194 00012F24 90 81 00 0C */ stw r4, 0xc(r1) -/* 00006198 00012F28 7F C3 F3 78 */ mr r3, r30 -/* 0000619C 00012F2C 48 00 00 01 */ bl StringHash32__6AttribPCc -/* 000061A0 00012F30 90 7D 00 08 */ stw r3, 0x8(r29) -/* 000061A4 00012F34 93 C1 00 14 */ stw r30, 0x14(r1) -/* 000061A8 00012F38 38 60 00 00 */ li r3, 0x0 -/* 000061AC 00012F3C 81 21 00 08 */ lwz r9, 0x8(r1) -/* 000061B0 00012F40 80 1C 00 00 */ lwz r0, 0x0(r28) -/* 000061B4 00012F44 7C 00 48 00 */ cmpw r0, r9 -.L_000061B8: -/* 000061B8 00012F48 40 82 61 D0 */ bne .L_0000C388 -/* 000061BC 00012F4C 81 3C 00 04 */ lwz r9, 0x4(r28) -/* 000061C0 00012F50 80 01 00 0C */ lwz r0, 0xc(r1) -/* 000061C4 00012F54 7D 23 02 78 */ xor r3, r9, r0 -/* 000061C8 00012F58 21 63 00 00 */ subfic r11, r3, 0x0 -.L_000061CC: -/* 000061CC 00012F5C 7C 6B 19 14 */ adde r3, r11, r3 -/* 000061D0 00012F60 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000061D4 00012F64 41 82 61 F8 */ beq .L_0000C3CC -/* 000061D8 00012F68 80 7F 00 18 */ lwz r3, 0x18(r31) -/* 000061DC 00012F6C C0 3F 02 C0 */ lfs f1, 0x2c0(r31) -/* 000061E0 00012F70 81 23 00 14 */ lwz r9, 0x14(r3) -.L_000061E4: -/* 000061E4 00012F74 A8 09 00 38 */ lha r0, 0x38(r9) -/* 000061E8 00012F78 81 29 00 3C */ lwz r9, 0x3c(r9) -/* 000061EC 00012F7C 7C 63 02 14 */ add r3, r3, r0 -/* 000061F0 00012F80 7D 28 03 A6 */ mtlr r9 -/* 000061F4 00012F84 4E 80 00 21 */ blrl -/* 000061F8 00012F88 81 7F 00 18 */ lwz r11, 0x18(r31) -/* 000061FC 00012F8C 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00006200 00012F90 41 82 62 20 */ beq .L_0000C420 -/* 00006204 00012F94 81 2B 00 14 */ lwz r9, 0x14(r11) -/* 00006208 00012F98 FC 20 F8 90 */ fmr f1, f31 -/* 0000620C 00012F9C A8 69 00 10 */ lha r3, 0x10(r9) -/* 00006210 00012FA0 80 09 00 14 */ lwz r0, 0x14(r9) -/* 00006214 00012FA4 7C 6B 1A 14 */ add r3, r11, r3 -/* 00006218 00012FA8 7C 08 03 A6 */ mtlr r0 -/* 0000621C 00012FAC 4E 80 00 21 */ blrl -/* 00006220 00012FB0 80 01 00 34 */ lwz r0, 0x34(r1) -/* 00006224 00012FB4 7C 08 03 A6 */ mtlr r0 -/* 00006228 00012FB8 BB 81 00 18 */ lmw r28, 0x18(r1) -/* 0000622C 00012FBC E3 E1 00 28 */ psq_l f31, 0x28(r1), 0, qr0 -/* 00006230 00012FC0 38 21 00 30 */ addi r1, r1, 0x30 -/* 00006234 00012FC4 4E 80 00 20 */ blr -.endfn Update__Q28CameraAI8Directorf - -# .text:0x6238 | size: 0x19C -.fn SetAction__Q28CameraAI8DirectorGQ26Attrib9StringKey, global -/* 00006238 00012FC8 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 0000623C 00012FCC 7C 08 02 A6 */ mflr r0 -/* 00006240 00012FD0 BF 81 00 18 */ stmw r28, 0x18(r1) -/* 00006244 00012FD4 90 01 00 2C */ stw r0, 0x2c(r1) -/* 00006248 00012FD8 80 04 00 0C */ lwz r0, 0xc(r4) -/* 0000624C 00012FDC 7C 7F 1B 78 */ mr r31, r3 -.L_00006250: -/* 00006250 00012FE0 81 7F 00 18 */ lwz r11, 0x18(r31) -/* 00006254 00012FE4 90 1F 00 14 */ stw r0, 0x14(r31) -/* 00006258 00012FE8 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000625C 00012FEC 81 24 00 00 */ lwz r9, 0x0(r4) -/* 00006260 00012FF0 81 44 00 04 */ lwz r10, 0x4(r4) -/* 00006264 00012FF4 91 3F 00 08 */ stw r9, 0x8(r31) -/* 00006268 00012FF8 91 5F 00 0C */ stw r10, 0xc(r31) -/* 0000626C 00012FFC 80 04 00 08 */ lwz r0, 0x8(r4) -/* 00006270 00013000 90 1F 00 10 */ stw r0, 0x10(r31) -/* 00006274 00013004 41 82 63 38 */ beq .L_0000C5AC -/* 00006278 00013008 81 2B 00 14 */ lwz r9, 0x14(r11) -/* 0000627C 0001300C 38 61 00 08 */ addi r3, r1, 0x8 -/* 00006280 00013010 80 09 00 2C */ lwz r0, 0x2c(r9) -.L_00006284: -/* 00006284 00013014 A8 89 00 28 */ lha r4, 0x28(r9) -/* 00006288 00013018 7C 08 03 A6 */ mtlr r0 -/* 0000628C 0001301C 7C 8B 22 14 */ add r4, r11, r4 -/* 00006290 00013020 4E 80 00 21 */ blrl -/* 00006294 00013024 80 01 00 14 */ lwz r0, 0x14(r1) -/* 00006298 00013028 39 41 00 08 */ addi r10, r1, 0x8 -/* 0000629C 0001302C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000062A0 00013030 41 82 62 B8 */ beq .L_0000C558 -/* 000062A4 00013034 81 2A 00 0C */ lwz r9, 0xc(r10) -/* 000062A8 00013038 88 09 00 00 */ lbz r0, 0x0(r9) -/* 000062AC 0001303C 21 20 00 00 */ subfic r9, r0, 0x0 -/* 000062B0 00013040 7C 09 01 14 */ adde r0, r9, r0 -/* 000062B4 00013044 48 00 62 BC */ b .L_0000C570 -/* 000062B8 00013048 38 00 00 01 */ li r0, 0x1 -/* 000062BC 0001304C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000062C0 00013050 40 82 62 E4 */ bne .L_0000C5A4 -/* 000062C4 00013054 81 6A 00 08 */ lwz r11, 0x8(r10) -/* 000062C8 00013058 80 0A 00 0C */ lwz r0, 0xc(r10) -/* 000062CC 0001305C 81 2A 00 00 */ lwz r9, 0x0(r10) -/* 000062D0 00013060 81 4A 00 04 */ lwz r10, 0x4(r10) -/* 000062D4 00013064 90 1F 00 14 */ stw r0, 0x14(r31) -/* 000062D8 00013068 91 3F 00 08 */ stw r9, 0x8(r31) -/* 000062DC 0001306C 91 5F 00 0C */ stw r10, 0xc(r31) -/* 000062E0 00013070 91 7F 00 10 */ stw r11, 0x10(r31) -/* 000062E4 00013074 81 7F 00 18 */ lwz r11, 0x18(r31) -/* 000062E8 00013078 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 000062EC 0001307C 41 82 63 38 */ beq .L_0000C624 -/* 000062F0 00013080 81 2B 00 14 */ lwz r9, 0x14(r11) -/* 000062F4 00013084 80 09 00 24 */ lwz r0, 0x24(r9) -/* 000062F8 00013088 A8 69 00 20 */ lha r3, 0x20(r9) -/* 000062FC 0001308C 7C 08 03 A6 */ mtlr r0 -/* 00006300 00013090 7C 6B 1A 14 */ add r3, r11, r3 -/* 00006304 00013094 4E 80 00 21 */ blrl -/* 00006308 00013098 81 3F 00 08 */ lwz r9, 0x8(r31) -/* 0000630C 0001309C 39 60 00 00 */ li r11, 0x0 -/* 00006310 000130A0 80 03 00 00 */ lwz r0, 0x0(r3) -/* 00006314 000130A4 7C 00 48 00 */ cmpw r0, r9 -/* 00006318 000130A8 40 82 63 30 */ bne .L_0000C648 -/* 0000631C 000130AC 81 23 00 04 */ lwz r9, 0x4(r3) -/* 00006320 000130B0 80 1F 00 0C */ lwz r0, 0xc(r31) -/* 00006324 000130B4 7D 2B 02 78 */ xor r11, r9, r0 -/* 00006328 000130B8 21 4B 00 00 */ subfic r10, r11, 0x0 -/* 0000632C 000130BC 7D 6A 59 14 */ adde r11, r10, r11 -/* 00006330 000130C0 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00006334 000130C4 40 82 63 C0 */ bne .L_0000C6F4 -/* 00006338 000130C8 80 1F 00 14 */ lwz r0, 0x14(r31) -/* 0000633C 000130CC 3B 9F 00 08 */ addi r28, r31, 0x8 -/* 00006340 000130D0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00006344 000130D4 41 82 63 5C */ beq .L_0000C6A0 -/* 00006348 000130D8 81 3C 00 0C */ lwz r9, 0xc(r28) -.L_0000634C: -/* 0000634C 000130DC 88 09 00 00 */ lbz r0, 0x0(r9) -/* 00006350 000130E0 21 20 00 00 */ subfic r9, r0, 0x0 -/* 00006354 000130E4 7C 09 01 14 */ adde r0, r9, r0 -/* 00006358 000130E8 48 00 63 60 */ b .L_0000C6B8 -/* 0000635C 000130EC 38 00 00 01 */ li r0, 0x1 -/* 00006360 000130F0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00006364 000130F4 40 82 63 C0 */ bne .L_0000C724 -/* 00006368 000130F8 80 1C 00 08 */ lwz r0, 0x8(r28) -/* 0000636C 000130FC 3B C1 00 08 */ addi r30, r1, 0x8 -/* 00006370 00013100 7F C3 F3 78 */ mr r3, r30 -/* 00006374 00013104 7F E4 FB 78 */ mr r4, r31 -/* 00006378 00013108 90 01 00 08 */ stw r0, 0x8(r1) -/* 0000637C 0001310C 48 00 00 01 */ bl CreateInstance__Q33UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32G6UCrc32PQ28CameraAI8Director -/* 00006380 00013110 7C 7D 1B 79 */ mr. r29, r3 -/* 00006384 00013114 41 82 63 C0 */ beq .L_0000C744 -/* 00006388 00013118 7F E3 FB 78 */ mr r3, r31 -/* 0000638C 0001311C 48 00 5F 29 */ bl .L_0000C2B4 -/* 00006390 00013120 93 BF 00 18 */ stw r29, 0x18(r31) -/* 00006394 00013124 7F C3 F3 78 */ mr r3, r30 -/* 00006398 00013128 81 3F 00 08 */ lwz r9, 0x8(r31) -/* 0000639C 0001312C 81 5F 00 0C */ lwz r10, 0xc(r31) -/* 000063A0 00013130 80 1C 00 08 */ lwz r0, 0x8(r28) -/* 000063A4 00013134 91 21 00 08 */ stw r9, 0x8(r1) -/* 000063A8 00013138 91 41 00 0C */ stw r10, 0xc(r1) -/* 000063AC 0001313C 81 7F 00 14 */ lwz r11, 0x14(r31) -.L_000063B0: -/* 000063B0 00013140 90 1E 00 08 */ stw r0, 0x8(r30) -/* 000063B4 00013144 80 9F 00 04 */ lwz r4, 0x4(r31) -/* 000063B8 00013148 91 61 00 14 */ stw r11, 0x14(r1) -/* 000063BC 0001314C 48 00 00 01 */ bl SetNewSndCamAction__FGQ26Attrib9StringKey8EVIEW_ID -/* 000063C0 00013150 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 000063C4 00013154 7C 08 03 A6 */ mtlr r0 -/* 000063C8 00013158 BB 81 00 18 */ lmw r28, 0x18(r1) -/* 000063CC 0001315C 38 21 00 28 */ addi r1, r1, 0x28 -/* 000063D0 00013160 4E 80 00 20 */ blr -.endfn SetAction__Q28CameraAI8DirectorGQ26Attrib9StringKey - -# .text:0x63D4 | size: 0x758 -# CameraAI::Director::SelectAction -.fn SelectAction__Q28CameraAI8Director, global -/* 000063D4 00013164 94 21 FF 50 */ stwu r1, -0xb0(r1) -/* 000063D8 00013168 7C 08 02 A6 */ mflr r0 -/* 000063DC 0001316C F3 E1 00 A8 */ psq_st f31, 0xa8(r1), 0, qr0 -/* 000063E0 00013170 BF 01 00 88 */ stmw r24, 0x88(r1) -/* 000063E4 00013174 90 01 00 B4 */ stw r0, 0xb4(r1) -/* 000063E8 00013178 3D 20 00 00 */ lis r9, TheICEManager+0x28@ha -/* 000063EC 0001317C 7C 7F 1B 78 */ mr r31, r3 -/* 000063F0 00013180 80 09 00 28 */ lwz r0, TheICEManager+0x28@l(r9) -/* 000063F4 00013184 39 20 00 01 */ li r9, 0x1 -/* 000063F8 00013188 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000063FC 0001318C 40 81 64 04 */ ble .L_0000C800 -/* 00006400 00013190 39 20 00 00 */ li r9, 0x0 -/* 00006404 00013194 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00006408 00013198 41 82 69 B0 */ beq .L_0000CDB8 -/* 0000640C 0001319C 3D 20 00 00 */ lis r9, .rodata+0x790@ha -/* 00006410 000131A0 C0 1F 02 B8 */ lfs f0, 0x2b8(r31) -/* 00006414 000131A4 C3 E9 07 90 */ lfs f31, .rodata+0x790@l(r9) -/* 00006418 000131A8 FC 00 F8 00 */ fcmpu cr0, f0, f31 -/* 0000641C 000131AC 4C 62 0B 82 */ cror un, eq, gt -/* 00006420 000131B0 41 83 64 78 */ bso .L_0000C898 -/* 00006424 000131B4 3F C0 00 00 */ lis r30, .rodata+0x74C@ha -.L_00006428: -/* 00006428 000131B8 D3 FF 02 B8 */ stfs f31, 0x2b8(r31) -/* 0000642C 000131BC 3B DE 07 4C */ addi r30, r30, .rodata+0x74C@l -/* 00006430 000131C0 3B A1 00 08 */ addi r29, r1, 0x8 -/* 00006434 000131C4 7F C3 F3 78 */ mr r3, r30 -/* 00006438 000131C8 48 00 00 01 */ bl StringHash64__6AttribPCc -/* 0000643C 000131CC 90 61 00 08 */ stw r3, 0x8(r1) -/* 00006440 000131D0 90 81 00 0C */ stw r4, 0xc(r1) -/* 00006444 000131D4 7F C3 F3 78 */ mr r3, r30 -/* 00006448 000131D8 48 00 00 01 */ bl StringHash32__6AttribPCc -/* 0000644C 000131DC 90 7D 00 08 */ stw r3, 0x8(r29) -/* 00006450 000131E0 39 60 00 01 */ li r11, 0x1 -/* 00006454 000131E4 93 C1 00 14 */ stw r30, 0x14(r1) -/* 00006458 000131E8 81 21 00 08 */ lwz r9, 0x8(r1) -/* 0000645C 000131EC 81 41 00 0C */ lwz r10, 0xc(r1) -/* 00006460 000131F0 80 1D 00 08 */ lwz r0, 0x8(r29) -/* 00006464 000131F4 93 DF 00 14 */ stw r30, 0x14(r31) -/* 00006468 000131F8 91 3F 00 08 */ stw r9, 0x8(r31) -/* 0000646C 000131FC 91 5F 00 0C */ stw r10, 0xc(r31) -/* 00006470 00013200 90 1F 00 10 */ stw r0, 0x10(r31) -/* 00006474 00013204 91 7F 02 BC */ stw r11, 0x2bc(r31) -/* 00006478 00013208 C0 1F 02 B4 */ lfs f0, 0x2b4(r31) -/* 0000647C 0001320C FC 00 F8 00 */ fcmpu cr0, f0, f31 -/* 00006480 00013210 4C 62 0B 82 */ cror un, eq, gt -/* 00006484 00013214 41 83 64 DC */ bso .L_0000C960 -/* 00006488 00013218 3F C0 00 00 */ lis r30, .rodata+0x74C@ha -/* 0000648C 0001321C D3 FF 02 B4 */ stfs f31, 0x2b4(r31) -/* 00006490 00013220 3B DE 07 4C */ addi r30, r30, .rodata+0x74C@l -/* 00006494 00013224 3B A1 00 08 */ addi r29, r1, 0x8 -/* 00006498 00013228 7F C3 F3 78 */ mr r3, r30 -/* 0000649C 0001322C 48 00 00 01 */ bl StringHash64__6AttribPCc -.L_000064A0: -/* 000064A0 00013230 90 61 00 08 */ stw r3, 0x8(r1) -/* 000064A4 00013234 90 81 00 0C */ stw r4, 0xc(r1) -/* 000064A8 00013238 7F C3 F3 78 */ mr r3, r30 -/* 000064AC 0001323C 48 00 00 01 */ bl StringHash32__6AttribPCc -/* 000064B0 00013240 90 7D 00 08 */ stw r3, 0x8(r29) -/* 000064B4 00013244 39 60 00 01 */ li r11, 0x1 -/* 000064B8 00013248 93 C1 00 14 */ stw r30, 0x14(r1) -/* 000064BC 0001324C 81 21 00 08 */ lwz r9, 0x8(r1) -/* 000064C0 00013250 81 41 00 0C */ lwz r10, 0xc(r1) -/* 000064C4 00013254 80 1D 00 08 */ lwz r0, 0x8(r29) -/* 000064C8 00013258 93 DF 00 14 */ stw r30, 0x14(r31) -/* 000064CC 0001325C 91 3F 00 08 */ stw r9, 0x8(r31) -/* 000064D0 00013260 91 5F 00 0C */ stw r10, 0xc(r31) -/* 000064D4 00013264 90 1F 00 10 */ stw r0, 0x10(r31) -/* 000064D8 00013268 91 7F 02 BC */ stw r11, 0x2bc(r31) -/* 000064DC 0001326C C1 BF 02 B4 */ lfs f13, 0x2b4(r31) -/* 000064E0 00013270 FC 0D F8 00 */ fcmpu cr0, f13, f31 -.L_000064E4: -/* 000064E4 00013274 4C 62 03 82 */ cror un, eq, lt -.L_000064E8: -/* 000064E8 00013278 41 83 65 48 */ bso .L_0000CA30 -/* 000064EC 0001327C 3D 20 00 00 */ lis r9, .rodata+0x794@ha -/* 000064F0 00013280 C0 09 07 94 */ lfs f0, .rodata+0x794@l(r9) -/* 000064F4 00013284 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 000064F8 00013288 4C 62 0B 82 */ cror un, eq, gt -/* 000064FC 0001328C 41 83 65 48 */ bso .L_0000CA44 -/* 00006500 00013290 3F C0 00 00 */ lis r30, .rodata+0x75C@ha -/* 00006504 00013294 3B A1 00 08 */ addi r29, r1, 0x8 -/* 00006508 00013298 3B DE 07 5C */ addi r30, r30, .rodata+0x75C@l -.L_0000650C: -/* 0000650C 0001329C 7F C3 F3 78 */ mr r3, r30 -/* 00006510 000132A0 48 00 00 01 */ bl StringHash64__6AttribPCc -/* 00006514 000132A4 90 61 00 08 */ stw r3, 0x8(r1) -/* 00006518 000132A8 90 81 00 0C */ stw r4, 0xc(r1) -/* 0000651C 000132AC 7F C3 F3 78 */ mr r3, r30 -/* 00006520 000132B0 48 00 00 01 */ bl StringHash32__6AttribPCc -/* 00006524 000132B4 90 7D 00 08 */ stw r3, 0x8(r29) -/* 00006528 000132B8 93 C1 00 14 */ stw r30, 0x14(r1) -/* 0000652C 000132BC 81 21 00 08 */ lwz r9, 0x8(r1) -/* 00006530 000132C0 81 41 00 0C */ lwz r10, 0xc(r1) -/* 00006534 000132C4 80 1D 00 08 */ lwz r0, 0x8(r29) -/* 00006538 000132C8 93 DF 00 14 */ stw r30, 0x14(r31) -/* 0000653C 000132CC 91 3F 00 08 */ stw r9, 0x8(r31) -/* 00006540 000132D0 91 5F 00 0C */ stw r10, 0xc(r31) -/* 00006544 000132D4 90 1F 00 10 */ stw r0, 0x10(r31) -/* 00006548 000132D8 3D 20 00 00 */ lis r9, gGameBreakerCamera@ha -/* 0000654C 000132DC 83 09 00 00 */ lwz r24, gGameBreakerCamera@l(r9) -/* 00006550 000132E0 2C 18 00 00 */ cmpwi r24, 0x0 -/* 00006554 000132E4 40 82 67 5C */ bne .L_0000CCB0 -/* 00006558 000132E8 80 1F 00 04 */ lwz r0, 0x4(r31) -/* 0000655C 000132EC 3D 20 00 00 */ lis r9, eViews@ha -/* 00006560 000132F0 39 29 00 00 */ addi r9, r9, eViews@l -/* 00006564 000132F4 1C 00 00 68 */ mulli r0, r0, 0x68 -/* 00006568 000132F8 7D 20 4A 15 */ add. r9, r0, r9 -/* 0000656C 000132FC 41 82 67 5C */ beq .L_0000CCC8 -/* 00006570 00013300 81 69 00 3C */ lwz r11, 0x3c(r9) -/* 00006574 00013304 38 09 00 3C */ addi r0, r9, 0x3c -/* 00006578 00013308 39 40 00 00 */ li r10, 0x0 -/* 0000657C 0001330C 7C 0B 00 00 */ cmpw r11, r0 -/* 00006580 00013310 41 82 65 88 */ beq .L_0000CB08 -/* 00006584 00013314 7D 6A 5B 78 */ mr r10, r11 -/* 00006588 00013318 2C 0A 00 00 */ cmpwi r10, 0x0 -/* 0000658C 0001331C 41 82 67 5C */ beq .L_0000CCE8 -/* 00006590 00013320 80 0A 00 0C */ lwz r0, 0xc(r10) -/* 00006594 00013324 2C 00 00 01 */ cmpwi r0, 0x1 -/* 00006598 00013328 40 82 67 5C */ bne GetName__C13CDActionDebug -/* 0000659C 0001332C 81 2A 00 08 */ lwz r9, 0x8(r10) -/* 000065A0 00013330 A8 69 00 28 */ lha r3, 0x28(r9) -/* 000065A4 00013334 80 09 00 2C */ lwz r0, 0x2c(r9) -/* 000065A8 00013338 7C 6A 1A 14 */ add r3, r10, r3 -/* 000065AC 0001333C 7C 08 03 A6 */ mtlr r0 -/* 000065B0 00013340 4E 80 00 21 */ blrl -/* 000065B4 00013344 7C 7E 1B 79 */ mr. r30, r3 -/* 000065B8 00013348 41 82 67 5C */ beq .L_0000CD14 -/* 000065BC 0001334C 48 00 6F 11 */ bl .L_0000D4CC -/* 000065C0 00013350 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000065C4 00013354 41 82 67 5C */ beq .L_0000CD20 -/* 000065C8 00013358 3D 20 00 00 */ lis r9, kJumpSpeedHigh@ha -/* 000065CC 0001335C C1 BE 00 10 */ lfs f13, 0x10(r30) -/* 000065D0 00013360 C0 09 00 00 */ lfs f0, kJumpSpeedHigh@l(r9) -/* 000065D4 00013364 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 000065D8 00013368 41 81 65 FC */ bgt .L_0000CBD4 -/* 000065DC 0001336C 3D 20 00 00 */ lis r9, kJumpSpeedLow@ha -/* 000065E0 00013370 C0 09 00 00 */ lfs f0, kJumpSpeedLow@l(r9) -/* 000065E4 00013374 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 000065E8 00013378 4C 62 03 82 */ cror un, eq, lt -/* 000065EC 0001337C 41 83 67 5C */ bso .L_0000CD48 -/* 000065F0 00013380 80 1E 00 C4 */ lwz r0, 0xc4(r30) -/* 000065F4 00013384 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000065F8 00013388 41 82 67 5C */ beq .L_0000CD54 -/* 000065FC 0001338C 80 1E 00 D0 */ lwz r0, 0xd0(r30) -/* 00006600 00013390 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00006604 00013394 41 82 67 5C */ beq .L_0000CD60 -/* 00006608 00013398 3F A0 00 00 */ lis r29, .rodata+0x768@ha -/* 0000660C 0001339C 3B C1 00 08 */ addi r30, r1, 0x8 -/* 00006610 000133A0 3B BD 07 68 */ addi r29, r29, .rodata+0x768@l -/* 00006614 000133A4 3F 20 2D 8A */ lis r25, 0x2d8a -/* 00006618 000133A8 7F A3 EB 78 */ mr r3, r29 -/* 0000661C 000133AC 63 39 CB 81 */ ori r25, r25, 0xcb81 -/* 00006620 000133B0 48 00 00 01 */ bl StringHash64__6AttribPCc -/* 00006624 000133B4 90 61 00 08 */ stw r3, 0x8(r1) -/* 00006628 000133B8 90 81 00 0C */ stw r4, 0xc(r1) -/* 0000662C 000133BC 7F A3 EB 78 */ mr r3, r29 -/* 00006630 000133C0 48 00 00 01 */ bl StringHash32__6AttribPCc -/* 00006634 000133C4 90 7E 00 08 */ stw r3, 0x8(r30) -/* 00006638 000133C8 3D 20 00 00 */ lis r9, _Q25UMath7Vector4.kZero@ha -/* 0000663C 000133CC 93 A1 00 14 */ stw r29, 0x14(r1) -/* 00006640 000133D0 39 69 00 00 */ addi r11, r9, _Q25UMath7Vector4.kZero@l -/* 00006644 000133D4 81 09 00 00 */ lwz r8, _Q25UMath7Vector4.kZero@l(r9) -/* 00006648 000133D8 39 41 00 60 */ addi r10, r1, 0x60 -/* 0000664C 000133DC 80 81 00 08 */ lwz r4, 0x8(r1) -/* 00006650 000133E0 80 A1 00 0C */ lwz r5, 0xc(r1) -/* 00006654 000133E4 3F 80 00 00 */ lis r28, .rodata+0x794@ha -.L_00006658: -/* 00006658 000133E8 83 7E 00 08 */ lwz r27, 0x8(r30) -/* 0000665C 000133EC 38 C1 00 70 */ addi r6, r1, 0x70 -/* 00006660 000133F0 80 EB 00 0C */ lwz r7, 0xc(r11) -/* 00006664 000133F4 38 61 00 80 */ addi r3, r1, 0x80 -/* 00006668 000133F8 80 0B 00 04 */ lwz r0, 0x4(r11) -/* 0000666C 000133FC 81 2B 00 08 */ lwz r9, 0x8(r11) -/* 00006670 00013400 91 01 00 08 */ stw r8, 0x8(r1) -/* 00006674 00013404 90 FE 00 0C */ stw r7, 0xc(r30) -/* 00006678 00013408 90 1E 00 04 */ stw r0, 0x4(r30) -/* 0000667C 0001340C 91 3E 00 08 */ stw r9, 0x8(r30) -/* 00006680 00013410 91 01 00 60 */ stw r8, 0x60(r1) -/* 00006684 00013414 90 EA 00 0C */ stw r7, 0xc(r10) -/* 00006688 00013418 90 0A 00 04 */ stw r0, 0x4(r10) -/* 0000668C 0001341C 91 2A 00 08 */ stw r9, 0x8(r10) -/* 00006690 00013420 91 01 00 70 */ stw r8, 0x70(r1) -/* 00006694 00013424 93 BF 00 14 */ stw r29, 0x14(r31) -/* 00006698 00013428 C0 1C 07 94 */ lfs f0, .rodata+0x794@l(r28) -/* 0000669C 0001342C 90 E6 00 0C */ stw r7, 0xc(r6) -/* 000066A0 00013430 90 9F 00 08 */ stw r4, 0x8(r31) -/* 000066A4 00013434 90 BF 00 0C */ stw r5, 0xc(r31) -/* 000066A8 00013438 93 7F 00 10 */ stw r27, 0x10(r31) -/* 000066AC 0001343C D0 1F 02 B8 */ stfs f0, 0x2b8(r31) -/* 000066B0 00013440 90 06 00 04 */ stw r0, 0x4(r6) -/* 000066B4 00013444 91 26 00 08 */ stw r9, 0x8(r6) -/* 000066B8 00013448 48 00 00 01 */ bl _GetKind__15MGamePlayMoment -/* 000066BC 0001344C 80 01 00 10 */ lwz r0, 0x10(r1) -.L_000066C0: -/* 000066C0 00013450 3B 60 00 48 */ li r27, 0x48 -/* 000066C4 00013454 83 81 00 80 */ lwz r28, 0x80(r1) -/* 000066C8 00013458 3C 60 00 00 */ lis r3, .rodata+0x770@ha -/* 000066CC 0001345C 83 41 00 08 */ lwz r26, 0x8(r1) -/* 000066D0 00013460 38 63 07 70 */ addi r3, r3, .rodata+0x770@l -/* 000066D4 00013464 83 A1 00 0C */ lwz r29, 0xc(r1) -/* 000066D8 00013468 81 21 00 14 */ lwz r9, 0x14(r1) -/* 000066DC 0001346C 81 61 00 60 */ lwz r11, 0x60(r1) -/* 000066E0 00013470 81 41 00 64 */ lwz r10, 0x64(r1) -/* 000066E4 00013474 81 01 00 68 */ lwz r8, 0x68(r1) -/* 000066E8 00013478 80 E1 00 6C */ lwz r7, 0x6c(r1) -.L_000066EC: -/* 000066EC 0001347C 80 C1 00 70 */ lwz r6, 0x70(r1) -/* 000066F0 00013480 80 A1 00 74 */ lwz r5, 0x74(r1) -/* 000066F4 00013484 80 81 00 78 */ lwz r4, 0x78(r1) -/* 000066F8 00013488 83 C1 00 7C */ lwz r30, 0x7c(r1) -/* 000066FC 0001348C 90 01 00 30 */ stw r0, 0x30(r1) -/* 00006700 00013490 93 81 00 18 */ stw r28, 0x18(r1) -/* 00006704 00013494 93 61 00 20 */ stw r27, 0x20(r1) -/* 00006708 00013498 93 41 00 28 */ stw r26, 0x28(r1) -/* 0000670C 0001349C 93 A1 00 2C */ stw r29, 0x2c(r1) -/* 00006710 000134A0 91 21 00 34 */ stw r9, 0x34(r1) -.L_00006714: -/* 00006714 000134A4 91 61 00 38 */ stw r11, 0x38(r1) -/* 00006718 000134A8 91 41 00 3C */ stw r10, 0x3c(r1) -/* 0000671C 000134AC 91 01 00 40 */ stw r8, 0x40(r1) -/* 00006720 000134B0 90 E1 00 44 */ stw r7, 0x44(r1) -/* 00006724 000134B4 90 C1 00 48 */ stw r6, 0x48(r1) -/* 00006728 000134B8 90 A1 00 4C */ stw r5, 0x4c(r1) -/* 0000672C 000134BC 90 81 00 50 */ stw r4, 0x50(r1) -/* 00006730 000134C0 93 C1 00 54 */ stw r30, 0x54(r1) -/* 00006734 000134C4 93 01 00 58 */ stw r24, 0x58(r1) -/* 00006738 000134C8 93 21 00 5C */ stw r25, 0x5c(r1) -/* 0000673C 000134CC 93 01 00 1C */ stw r24, 0x1c(r1) -/* 00006740 000134D0 93 01 00 24 */ stw r24, 0x24(r1) -/* 00006744 000134D4 48 00 00 01 */ bl stringhash32__FPCc -/* 00006748 000134D8 7C 60 1B 78 */ mr r0, r3 -/* 0000674C 000134DC 90 01 00 1C */ stw r0, 0x1c(r1) -/* 00006750 000134E0 38 61 00 18 */ addi r3, r1, 0x18 -/* 00006754 000134E4 90 01 00 08 */ stw r0, 0x8(r1) -/* 00006758 000134E8 48 00 00 01 */ bl Deliver__Q26Hermes7Message -/* 0000675C 000134EC 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@ha -/* 00006760 000134F0 3B A0 00 00 */ li r29, 0x0 -/* 00006764 000134F4 83 C9 00 00 */ lwz r30, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@l(r9) -/* 00006768 000134F8 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 0000676C 000134FC 41 82 67 E8 */ beq .L_0000CF54 -/* 00006770 00013500 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 00006774 00013504 A8 69 00 80 */ lha r3, 0x80(r9) -/* 00006778 00013508 80 09 00 84 */ lwz r0, 0x84(r9) -/* 0000677C 0001350C 7C 7E 1A 14 */ add r3, r30, r3 -/* 00006780 00013510 7C 08 03 A6 */ mtlr r0 -/* 00006784 00013514 4E 80 00 21 */ blrl -/* 00006788 00013518 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000678C 0001351C 41 82 67 E8 */ beq .L_0000CF74 -/* 00006790 00013520 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 00006794 00013524 A8 69 00 98 */ lha r3, 0x98(r9) -/* 00006798 00013528 80 09 00 9C */ lwz r0, 0x9c(r9) -/* 0000679C 0001352C 7C 7E 1A 14 */ add r3, r30, r3 -/* 000067A0 00013530 7C 08 03 A6 */ mtlr r0 -/* 000067A4 00013534 4E 80 00 21 */ blrl -/* 000067A8 00013538 7C 6B 1B 79 */ mr. r11, r3 -/* 000067AC 0001353C 41 82 67 E8 */ beq .L_0000CF94 -/* 000067B0 00013540 81 2B 00 00 */ lwz r9, 0x0(r11) -/* 000067B4 00013544 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 000067B8 00013548 A8 69 00 18 */ lha r3, 0x18(r9) -/* 000067BC 0001354C 7C 08 03 A6 */ mtlr r0 -/* 000067C0 00013550 7C 6B 1A 14 */ add r3, r11, r3 -/* 000067C4 00013554 4E 80 00 21 */ blrl -/* 000067C8 00013558 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 000067CC 0001355C 7C 7D 1B 78 */ mr r29, r3 -/* 000067D0 00013560 A8 69 00 D0 */ lha r3, 0xd0(r9) -/* 000067D4 00013564 80 09 00 D4 */ lwz r0, 0xd4(r9) -/* 000067D8 00013568 7C 7E 1A 14 */ add r3, r30, r3 -/* 000067DC 0001356C 7C 08 03 A6 */ mtlr r0 -/* 000067E0 00013570 4E 80 00 21 */ blrl -/* 000067E4 00013574 90 7F 02 BC */ stw r3, 0x2bc(r31) -/* 000067E8 00013578 2C 1D 00 00 */ cmpwi r29, 0x0 -/* 000067EC 0001357C 40 82 68 20 */ bne .L_0000D00C -/* 000067F0 00013580 3D 20 00 00 */ lis r9, TheICEManager@ha -/* 000067F4 00013584 3C 60 00 00 */ lis r3, .rodata@ha -/* 000067F8 00013588 3B 49 00 00 */ addi r26, r9, TheICEManager@l -.L_000067FC: -/* 000067FC 0001358C 38 63 00 00 */ addi r3, r3, .rodata@l -/* 00006800 00013590 48 00 00 01 */ bl bStringHash__FPCc -/* 00006804 00013594 3B 60 00 01 */ li r27, 0x1 -/* 00006808 00013598 80 1A 00 60 */ lwz r0, 0x60(r26) -/* 0000680C 0001359C 7C 00 18 00 */ cmpw r0, r3 -/* 00006810 000135A0 40 82 68 18 */ bne .L_0000D028 -/* 00006814 000135A4 3B 60 00 00 */ li r27, 0x0 -/* 00006818 000135A8 2C 1B 00 00 */ cmpwi r27, 0x0 -/* 0000681C 000135AC 41 82 68 7C */ beq .L_0000D098 -/* 00006820 000135B0 3F C0 00 00 */ lis r30, .rodata+0x77C@ha -/* 00006824 000135B4 3B A1 00 08 */ addi r29, r1, 0x8 -.L_00006828: -/* 00006828 000135B8 3B DE 07 7C */ addi r30, r30, .rodata+0x77C@l -/* 0000682C 000135BC 7F C3 F3 78 */ mr r3, r30 -/* 00006830 000135C0 48 00 00 01 */ bl StringHash64__6AttribPCc -/* 00006834 000135C4 90 61 00 08 */ stw r3, 0x8(r1) -/* 00006838 000135C8 90 81 00 0C */ stw r4, 0xc(r1) -/* 0000683C 000135CC 7F C3 F3 78 */ mr r3, r30 -/* 00006840 000135D0 48 00 00 01 */ bl StringHash32__6AttribPCc -/* 00006844 000135D4 90 7D 00 08 */ stw r3, 0x8(r29) -/* 00006848 000135D8 3D 20 00 00 */ lis r9, .rodata+0x790@ha -/* 0000684C 000135DC 93 C1 00 14 */ stw r30, 0x14(r1) -/* 00006850 000135E0 C0 09 07 90 */ lfs f0, .rodata+0x790@l(r9) -/* 00006854 000135E4 80 1D 00 08 */ lwz r0, 0x8(r29) -.L_00006858: -/* 00006858 000135E8 81 21 00 08 */ lwz r9, 0x8(r1) -/* 0000685C 000135EC 81 41 00 0C */ lwz r10, 0xc(r1) -/* 00006860 000135F0 93 DF 00 14 */ stw r30, 0x14(r31) -/* 00006864 000135F4 91 3F 00 08 */ stw r9, 0x8(r31) -/* 00006868 000135F8 91 5F 00 0C */ stw r10, 0xc(r31) -/* 0000686C 000135FC 90 1F 00 10 */ stw r0, 0x10(r31) -/* 00006870 00013600 D0 1F 02 B4 */ stfs f0, 0x2b4(r31) -/* 00006874 00013604 D0 1F 02 B8 */ stfs f0, 0x2b8(r31) -/* 00006878 00013608 48 00 69 B0 */ b .L_0000D228 -/* 0000687C 0001360C 81 7F 00 18 */ lwz r11, 0x18(r31) -/* 00006880 00013610 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00006884 00013614 41 82 6A 7C */ beq .L_0000D300 -/* 00006888 00013618 81 2B 00 14 */ lwz r9, 0x14(r11) -/* 0000688C 0001361C 3B A1 00 08 */ addi r29, r1, 0x8 -/* 00006890 00013620 80 09 00 24 */ lwz r0, 0x24(r9) -/* 00006894 00013624 A8 69 00 20 */ lha r3, 0x20(r9) -/* 00006898 00013628 7C 08 03 A6 */ mtlr r0 -/* 0000689C 0001362C 7C 6B 1A 14 */ add r3, r11, r3 -/* 000068A0 00013630 4E 80 00 21 */ blrl -/* 000068A4 00013634 3F C0 00 00 */ lis r30, .rodata+0x77C@ha -/* 000068A8 00013638 7C 7C 1B 78 */ mr r28, r3 -.L_000068AC: -/* 000068AC 0001363C 3B DE 07 7C */ addi r30, r30, .rodata+0x77C@l -/* 000068B0 00013640 7F C3 F3 78 */ mr r3, r30 -/* 000068B4 00013644 48 00 00 01 */ bl StringHash64__6AttribPCc -/* 000068B8 00013648 90 61 00 08 */ stw r3, 0x8(r1) -/* 000068BC 0001364C 90 81 00 0C */ stw r4, 0xc(r1) -/* 000068C0 00013650 7F C3 F3 78 */ mr r3, r30 -/* 000068C4 00013654 48 00 00 01 */ bl StringHash32__6AttribPCc -/* 000068C8 00013658 90 7D 00 08 */ stw r3, 0x8(r29) -/* 000068CC 0001365C 93 C1 00 14 */ stw r30, 0x14(r1) -.L_000068D0: -/* 000068D0 00013660 38 60 00 00 */ li r3, 0x0 -/* 000068D4 00013664 81 21 00 08 */ lwz r9, 0x8(r1) -/* 000068D8 00013668 80 1C 00 00 */ lwz r0, 0x0(r28) -/* 000068DC 0001366C 7C 00 48 00 */ cmpw r0, r9 -/* 000068E0 00013670 40 82 68 F8 */ bne .L_0000D1D8 -/* 000068E4 00013674 81 3C 00 04 */ lwz r9, 0x4(r28) -/* 000068E8 00013678 80 01 00 0C */ lwz r0, 0xc(r1) -/* 000068EC 0001367C 7D 23 02 78 */ xor r3, r9, r0 -/* 000068F0 00013680 21 43 00 00 */ subfic r10, r3, 0x0 -/* 000068F4 00013684 7C 6A 19 14 */ adde r3, r10, r3 -/* 000068F8 00013688 2C 03 00 00 */ cmpwi r3, 0x0 -.L_000068FC: -/* 000068FC 0001368C 41 82 69 B0 */ beq .L_0000D2AC -/* 00006900 00013690 3F C0 00 00 */ lis r30, .rodata+0x74C@ha -/* 00006904 00013694 93 7A 00 7C */ stw r27, 0x7c(r26) -/* 00006908 00013698 3B DE 07 4C */ addi r30, r30, .rodata+0x74C@l -/* 0000690C 0001369C 7F C3 F3 78 */ mr r3, r30 -/* 00006910 000136A0 48 00 00 01 */ bl StringHash64__6AttribPCc -/* 00006914 000136A4 90 61 00 18 */ stw r3, 0x18(r1) -/* 00006918 000136A8 90 81 00 1C */ stw r4, 0x1c(r1) -/* 0000691C 000136AC 7F C3 F3 78 */ mr r3, r30 -/* 00006920 000136B0 48 00 00 01 */ bl StringHash32__6AttribPCc -/* 00006924 000136B4 81 61 00 18 */ lwz r11, 0x18(r1) -/* 00006928 000136B8 81 81 00 1C */ lwz r12, 0x1c(r1) -/* 0000692C 000136BC 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@ha -/* 00006930 000136C0 81 49 00 00 */ lwz r10, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@l(r9) -/* 00006934 000136C4 93 DF 00 14 */ stw r30, 0x14(r31) -/* 00006938 000136C8 91 7F 00 08 */ stw r11, 0x8(r31) -/* 0000693C 000136CC 91 9F 00 0C */ stw r12, 0xc(r31) -/* 00006940 000136D0 2C 0A 00 00 */ cmpwi r10, 0x0 -/* 00006944 000136D4 90 7F 00 10 */ stw r3, 0x10(r31) -/* 00006948 000136D8 90 61 00 20 */ stw r3, 0x20(r1) -/* 0000694C 000136DC 93 C1 00 24 */ stw r30, 0x24(r1) -/* 00006950 000136E0 41 82 69 74 */ beq .L_0000D2C4 -/* 00006954 000136E4 81 2A 00 04 */ lwz r9, 0x4(r10) -/* 00006958 000136E8 3C 80 00 00 */ lis r4, .rodata+0x780@ha -/* 0000695C 000136EC 38 84 07 80 */ addi r4, r4, .rodata+0x780@l -/* 00006960 000136F0 A8 69 00 B8 */ lha r3, 0xb8(r9) -/* 00006964 000136F4 80 09 00 BC */ lwz r0, 0xbc(r9) -/* 00006968 000136F8 7C 6A 1A 14 */ add r3, r10, r3 -/* 0000696C 000136FC 7C 08 03 A6 */ mtlr r0 -/* 00006970 00013700 4E 80 00 21 */ blrl -/* 00006974 00013704 3C 00 20 D6 */ lis r0, 0x20d6 -/* 00006978 00013708 38 61 00 30 */ addi r3, r1, 0x30 -/* 0000697C 0001370C 60 00 0D BF */ ori r0, r0, 0xdbf -/* 00006980 00013710 3B C1 00 18 */ addi r30, r1, 0x18 -/* 00006984 00013714 90 01 00 18 */ stw r0, 0x18(r1) -/* 00006988 00013718 48 00 00 01 */ bl _GetKind__18MICECameraFinished -/* 0000698C 0001371C 81 21 00 30 */ lwz r9, 0x30(r1) -/* 00006990 00013720 38 00 00 10 */ li r0, 0x10 -/* 00006994 00013724 90 01 00 28 */ stw r0, 0x28(r1) -/* 00006998 00013728 7F C4 F3 78 */ mr r4, r30 -/* 0000699C 0001372C 91 21 00 20 */ stw r9, 0x20(r1) -/* 000069A0 00013730 38 61 00 20 */ addi r3, r1, 0x20 -/* 000069A4 00013734 93 61 00 2C */ stw r27, 0x2c(r1) -/* 000069A8 00013738 93 61 00 24 */ stw r27, 0x24(r1) -/* 000069AC 0001373C 48 00 00 01 */ bl Post__Q26Hermes7MessageG6UCrc32 -/* 000069B0 00013740 81 7F 00 18 */ lwz r11, 0x18(r31) -/* 000069B4 00013744 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 000069B8 00013748 41 82 6A 7C */ beq .L_0000D434 -/* 000069BC 0001374C 81 2B 00 14 */ lwz r9, 0x14(r11) -/* 000069C0 00013750 38 61 00 08 */ addi r3, r1, 0x8 -/* 000069C4 00013754 80 09 00 2C */ lwz r0, 0x2c(r9) -/* 000069C8 00013758 A8 89 00 28 */ lha r4, 0x28(r9) -/* 000069CC 0001375C 7C 08 03 A6 */ mtlr r0 -.L_000069D0: -/* 000069D0 00013760 7C 8B 22 14 */ add r4, r11, r4 -/* 000069D4 00013764 4E 80 00 21 */ blrl -.L_000069D8: -/* 000069D8 00013768 80 01 00 14 */ lwz r0, 0x14(r1) -/* 000069DC 0001376C 39 41 00 08 */ addi r10, r1, 0x8 -/* 000069E0 00013770 2C 00 00 00 */ cmpwi r0, 0x0 -.L_000069E4: -/* 000069E4 00013774 41 82 69 FC */ beq .L_0000D3E0 -/* 000069E8 00013778 81 2A 00 0C */ lwz r9, 0xc(r10) -/* 000069EC 0001377C 88 09 00 00 */ lbz r0, 0x0(r9) -/* 000069F0 00013780 21 20 00 00 */ subfic r9, r0, 0x0 -/* 000069F4 00013784 7C 09 01 14 */ adde r0, r9, r0 -/* 000069F8 00013788 48 00 6A 00 */ b .L_0000D3F8 -/* 000069FC 0001378C 38 00 00 01 */ li r0, 0x1 -/* 00006A00 00013790 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00006A04 00013794 40 82 6A 28 */ bne .L_0000D42C -.L_00006A08: -/* 00006A08 00013798 81 6A 00 08 */ lwz r11, 0x8(r10) -/* 00006A0C 0001379C 80 0A 00 0C */ lwz r0, 0xc(r10) -/* 00006A10 000137A0 81 2A 00 00 */ lwz r9, 0x0(r10) -/* 00006A14 000137A4 81 4A 00 04 */ lwz r10, 0x4(r10) -/* 00006A18 000137A8 90 1F 00 14 */ stw r0, 0x14(r31) -/* 00006A1C 000137AC 91 3F 00 08 */ stw r9, 0x8(r31) -/* 00006A20 000137B0 91 5F 00 0C */ stw r10, 0xc(r31) -/* 00006A24 000137B4 91 7F 00 10 */ stw r11, 0x10(r31) -/* 00006A28 000137B8 81 7F 00 18 */ lwz r11, 0x18(r31) -/* 00006A2C 000137BC 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00006A30 000137C0 41 82 6A 7C */ beq GetMover__11CDActionIce -/* 00006A34 000137C4 81 2B 00 14 */ lwz r9, 0x14(r11) -/* 00006A38 000137C8 80 09 00 24 */ lwz r0, 0x24(r9) -/* 00006A3C 000137CC A8 69 00 20 */ lha r3, 0x20(r9) -/* 00006A40 000137D0 7C 08 03 A6 */ mtlr r0 -/* 00006A44 000137D4 7C 6B 1A 14 */ add r3, r11, r3 -/* 00006A48 000137D8 4E 80 00 21 */ blrl -/* 00006A4C 000137DC 81 3F 00 08 */ lwz r9, 0x8(r31) -/* 00006A50 000137E0 39 60 00 00 */ li r11, 0x0 -.L_00006A54: -/* 00006A54 000137E4 80 03 00 00 */ lwz r0, 0x0(r3) -/* 00006A58 000137E8 7C 00 48 00 */ cmpw r0, r9 -/* 00006A5C 000137EC 40 82 6A 74 */ bne .L_0000D4D0 -.L_00006A60: -/* 00006A60 000137F0 81 23 00 04 */ lwz r9, 0x4(r3) -/* 00006A64 000137F4 80 1F 00 0C */ lwz r0, 0xc(r31) -/* 00006A68 000137F8 7D 2B 02 78 */ xor r11, r9, r0 -/* 00006A6C 000137FC 21 4B 00 00 */ subfic r10, r11, 0x0 -/* 00006A70 00013800 7D 6A 59 14 */ adde r11, r10, r11 -/* 00006A74 00013804 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00006A78 00013808 40 82 6B 14 */ bne .L_0000D58C -/* 00006A7C 0001380C 80 1F 00 14 */ lwz r0, 0x14(r31) -/* 00006A80 00013810 3B 9F 00 08 */ addi r28, r31, 0x8 -.L_00006A84: -/* 00006A84 00013814 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00006A88 00013818 41 82 6A A0 */ beq Construct__11CDActionIcePQ28CameraAI8Director -/* 00006A8C 0001381C 81 3C 00 0C */ lwz r9, 0xc(r28) -.L_00006A90: -/* 00006A90 00013820 88 09 00 00 */ lbz r0, 0x0(r9) -/* 00006A94 00013824 21 60 00 00 */ subfic r11, r0, 0x0 -/* 00006A98 00013828 7F CB 01 14 */ adde r30, r11, r0 -/* 00006A9C 0001382C 48 00 6A A4 */ b .L_0000D540 -/* 00006AA0 00013830 3B C0 00 01 */ li r30, 0x1 -/* 00006AA4 00013834 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 00006AA8 00013838 40 82 6B 14 */ bne .L_0000D5BC -/* 00006AAC 0001383C 80 1C 00 08 */ lwz r0, 0x8(r28) -/* 00006AB0 00013840 3B A1 00 08 */ addi r29, r1, 0x8 -/* 00006AB4 00013844 7F A3 EB 78 */ mr r3, r29 -/* 00006AB8 00013848 7F E4 FB 78 */ mr r4, r31 -/* 00006ABC 0001384C 90 01 00 08 */ stw r0, 0x8(r1) -/* 00006AC0 00013850 48 00 00 01 */ bl CreateInstance__Q33UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32G6UCrc32PQ28CameraAI8Director -/* 00006AC4 00013854 7C 7B 1B 79 */ mr. r27, r3 -/* 00006AC8 00013858 41 82 6B 14 */ beq .L_0000D5DC -/* 00006ACC 0001385C 3D 20 00 00 */ lis r9, .rodata+0x790@ha -/* 00006AD0 00013860 93 DF 02 BC */ stw r30, 0x2bc(r31) -/* 00006AD4 00013864 C0 09 07 90 */ lfs f0, .rodata+0x790@l(r9) -/* 00006AD8 00013868 7F E3 FB 78 */ mr r3, r31 -/* 00006ADC 0001386C D0 1F 02 C0 */ stfs f0, 0x2c0(r31) -/* 00006AE0 00013870 48 00 5F 29 */ bl .L_0000CA08 -/* 00006AE4 00013874 93 7F 00 18 */ stw r27, 0x18(r31) -.L_00006AE8: -/* 00006AE8 00013878 7F A3 EB 78 */ mr r3, r29 -/* 00006AEC 0001387C 81 3F 00 08 */ lwz r9, 0x8(r31) -/* 00006AF0 00013880 81 5F 00 0C */ lwz r10, 0xc(r31) -.L_00006AF4: -/* 00006AF4 00013884 80 1C 00 08 */ lwz r0, 0x8(r28) -/* 00006AF8 00013888 91 21 00 08 */ stw r9, 0x8(r1) -/* 00006AFC 0001388C 91 41 00 0C */ stw r10, 0xc(r1) -/* 00006B00 00013890 81 7F 00 14 */ lwz r11, 0x14(r31) -/* 00006B04 00013894 90 1D 00 08 */ stw r0, 0x8(r29) -/* 00006B08 00013898 80 9F 00 04 */ lwz r4, 0x4(r31) -/* 00006B0C 0001389C 91 61 00 14 */ stw r11, 0x14(r1) -.L_00006B10: -/* 00006B10 000138A0 48 00 00 01 */ bl SetNewSndCamAction__FGQ26Attrib9StringKey8EVIEW_ID -/* 00006B14 000138A4 80 01 00 B4 */ lwz r0, 0xb4(r1) -/* 00006B18 000138A8 7C 08 03 A6 */ mtlr r0 -/* 00006B1C 000138AC BB 01 00 88 */ lmw r24, 0x88(r1) -/* 00006B20 000138B0 E3 E1 00 A8 */ psq_l f31, 0xa8(r1), 0, qr0 -/* 00006B24 000138B4 38 21 00 B0 */ addi r1, r1, 0xb0 -/* 00006B28 000138B8 4E 80 00 20 */ blr -.endfn SelectAction__Q28CameraAI8Director - -# .text:0x6B2C | size: 0xAC -# CameraAI::Director::TotaledStart -.fn TotaledStart__Q28CameraAI8Director, global -/* 00006B2C 000138BC 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 00006B30 000138C0 7C 08 02 A6 */ mflr r0 -.L_00006B34: -/* 00006B34 000138C4 BF 81 00 18 */ stmw r28, 0x18(r1) -/* 00006B38 000138C8 90 01 00 2C */ stw r0, 0x2c(r1) -/* 00006B3C 000138CC 3F A0 00 00 */ lis r29, .rodata+0x798@ha -/* 00006B40 000138D0 7C 7E 1B 78 */ mr r30, r3 -/* 00006B44 000138D4 3B BD 07 98 */ addi r29, r29, .rodata+0x798@l -/* 00006B48 000138D8 3B 81 00 08 */ addi r28, r1, 0x8 -.L_00006B4C: -/* 00006B4C 000138DC 7F A3 EB 78 */ mr r3, r29 -/* 00006B50 000138E0 48 00 00 01 */ bl StringHash64__6AttribPCc -/* 00006B54 000138E4 90 61 00 08 */ stw r3, 0x8(r1) -/* 00006B58 000138E8 90 81 00 0C */ stw r4, 0xc(r1) -/* 00006B5C 000138EC 7F A3 EB 78 */ mr r3, r29 -/* 00006B60 000138F0 48 00 00 01 */ bl StringHash32__6AttribPCc -/* 00006B64 000138F4 90 7C 00 08 */ stw r3, 0x8(r28) -/* 00006B68 000138F8 39 1E 00 08 */ addi r8, r30, 0x8 -.L_00006B6C: -/* 00006B6C 000138FC 93 A1 00 14 */ stw r29, 0x14(r1) -/* 00006B70 00013900 3D 60 00 00 */ lis r11, .rodata+0x7A0@ha -/* 00006B74 00013904 81 21 00 08 */ lwz r9, 0x8(r1) -/* 00006B78 00013908 81 41 00 0C */ lwz r10, 0xc(r1) -/* 00006B7C 0001390C 7F C3 F3 78 */ mr r3, r30 -/* 00006B80 00013910 80 1C 00 08 */ lwz r0, 0x8(r28) -/* 00006B84 00013914 7F 84 E3 78 */ mr r4, r28 -/* 00006B88 00013918 93 BE 00 14 */ stw r29, 0x14(r30) -/* 00006B8C 0001391C 91 3E 00 08 */ stw r9, 0x8(r30) -/* 00006B90 00013920 91 5E 00 0C */ stw r10, 0xc(r30) -.L_00006B94: -/* 00006B94 00013924 90 08 00 08 */ stw r0, 0x8(r8) -/* 00006B98 00013928 C0 0B 07 A0 */ lfs f0, .rodata+0x7A0@l(r11) -/* 00006B9C 0001392C 81 3E 00 08 */ lwz r9, 0x8(r30) -/* 00006BA0 00013930 81 5E 00 0C */ lwz r10, 0xc(r30) -/* 00006BA4 00013934 D0 1E 02 B8 */ stfs f0, 0x2b8(r30) -/* 00006BA8 00013938 91 21 00 08 */ stw r9, 0x8(r1) -/* 00006BAC 0001393C 91 41 00 0C */ stw r10, 0xc(r1) -/* 00006BB0 00013940 80 08 00 08 */ lwz r0, 0x8(r8) -/* 00006BB4 00013944 81 7E 00 14 */ lwz r11, 0x14(r30) -/* 00006BB8 00013948 90 1C 00 08 */ stw r0, 0x8(r28) -/* 00006BBC 0001394C 91 61 00 14 */ stw r11, 0x14(r1) -/* 00006BC0 00013950 48 00 62 39 */ bl .L_0000CDF8 -/* 00006BC4 00013954 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 00006BC8 00013958 7C 08 03 A6 */ mtlr r0 -/* 00006BCC 0001395C BB 81 00 18 */ lmw r28, 0x18(r1) -/* 00006BD0 00013960 38 21 00 28 */ addi r1, r1, 0x28 -/* 00006BD4 00013964 4E 80 00 20 */ blr -.endfn TotaledStart__Q28CameraAI8Director - -# .text:0x6BD8 | size: 0x1B4 -# CameraAI::Director::PursuitStart -.fn PursuitStart__Q28CameraAI8Director, global -/* 00006BD8 00013968 94 21 FF 60 */ stwu r1, -0xa0(r1) -/* 00006BDC 0001396C 7C 08 02 A6 */ mflr r0 -/* 00006BE0 00013970 BF 61 00 8C */ stmw r27, 0x8c(r1) -/* 00006BE4 00013974 90 01 00 A4 */ stw r0, 0xa4(r1) -.L_00006BE8: -/* 00006BE8 00013978 7C 7F 1B 78 */ mr r31, r3 -/* 00006BEC 0001397C 3D 20 00 00 */ lis r9, .rodata+0x7AC@ha -/* 00006BF0 00013980 C1 A9 07 AC */ lfs f13, .rodata+0x7AC@l(r9) -/* 00006BF4 00013984 C0 1F 02 B4 */ lfs f0, 0x2b4(r31) -/* 00006BF8 00013988 FC 00 68 00 */ fcmpu cr0, f0, f13 -.L_00006BFC: -/* 00006BFC 0001398C 41 81 6D 78 */ bgt .L_0000D974 -/* 00006C00 00013990 3D 20 00 00 */ lis r9, _Q25UMath7Vector4.kZero@ha -/* 00006C04 00013994 39 61 00 50 */ addi r11, r1, 0x50 -/* 00006C08 00013998 80 A9 00 00 */ lwz r5, _Q25UMath7Vector4.kZero@l(r9) -/* 00006C0C 0001399C 39 41 00 60 */ addi r10, r1, 0x60 -/* 00006C10 000139A0 39 29 00 00 */ addi r9, r9, _Q25UMath7Vector4.kZero@l -/* 00006C14 000139A4 38 E1 00 70 */ addi r7, r1, 0x70 -/* 00006C18 000139A8 80 C9 00 0C */ lwz r6, 0xc(r9) -/* 00006C1C 000139AC 3B 81 00 08 */ addi r28, r1, 0x8 -/* 00006C20 000139B0 81 09 00 04 */ lwz r8, 0x4(r9) -/* 00006C24 000139B4 38 61 00 80 */ addi r3, r1, 0x80 -/* 00006C28 000139B8 80 09 00 08 */ lwz r0, 0x8(r9) -/* 00006C2C 000139BC 3B C0 00 00 */ li r30, 0x0 -/* 00006C30 000139C0 90 A1 00 50 */ stw r5, 0x50(r1) -/* 00006C34 000139C4 3F A0 88 BF */ lis r29, 0x88bf -/* 00006C38 000139C8 90 CB 00 0C */ stw r6, 0xc(r11) -/* 00006C3C 000139CC 63 BD F8 34 */ ori r29, r29, 0xf834 -/* 00006C40 000139D0 91 0B 00 04 */ stw r8, 0x4(r11) -/* 00006C44 000139D4 3B 60 00 01 */ li r27, 0x1 -/* 00006C48 000139D8 90 0B 00 08 */ stw r0, 0x8(r11) -/* 00006C4C 000139DC 90 A1 00 60 */ stw r5, 0x60(r1) -/* 00006C50 000139E0 90 CA 00 0C */ stw r6, 0xc(r10) -/* 00006C54 000139E4 91 0A 00 04 */ stw r8, 0x4(r10) -/* 00006C58 000139E8 90 0A 00 08 */ stw r0, 0x8(r10) -.L_00006C5C: -/* 00006C5C 000139EC 90 A1 00 70 */ stw r5, 0x70(r1) -.L_00006C60: -/* 00006C60 000139F0 90 C7 00 0C */ stw r6, 0xc(r7) -/* 00006C64 000139F4 91 07 00 04 */ stw r8, 0x4(r7) -/* 00006C68 000139F8 90 07 00 08 */ stw r0, 0x8(r7) -/* 00006C6C 000139FC 48 00 00 01 */ bl _GetKind__15MGamePlayMoment -/* 00006C70 00013A00 80 01 00 80 */ lwz r0, 0x80(r1) -/* 00006C74 00013A04 39 60 00 48 */ li r11, 0x48 -/* 00006C78 00013A08 93 C1 00 0C */ stw r30, 0xc(r1) -/* 00006C7C 00013A0C 39 21 00 18 */ addi r9, r1, 0x18 -/* 00006C80 00013A10 90 01 00 08 */ stw r0, 0x8(r1) -/* 00006C84 00013A14 38 E1 00 28 */ addi r7, r1, 0x28 -.L_00006C88: -/* 00006C88 00013A18 91 7C 00 08 */ stw r11, 0x8(r28) -/* 00006C8C 00013A1C 38 C1 00 38 */ addi r6, r1, 0x38 -/* 00006C90 00013A20 93 C1 00 14 */ stw r30, 0x14(r1) -/* 00006C94 00013A24 3C 60 00 00 */ lis r3, .rodata+0x770@ha -/* 00006C98 00013A28 81 61 00 50 */ lwz r11, 0x50(r1) -/* 00006C9C 00013A2C 38 63 07 70 */ addi r3, r3, .rodata+0x770@l -/* 00006CA0 00013A30 81 41 00 54 */ lwz r10, 0x54(r1) -/* 00006CA4 00013A34 80 01 00 5C */ lwz r0, 0x5c(r1) -/* 00006CA8 00013A38 81 01 00 58 */ lwz r8, 0x58(r1) -/* 00006CAC 00013A3C 91 61 00 18 */ stw r11, 0x18(r1) -/* 00006CB0 00013A40 91 09 00 08 */ stw r8, 0x8(r9) -/* 00006CB4 00013A44 90 09 00 0C */ stw r0, 0xc(r9) -/* 00006CB8 00013A48 91 49 00 04 */ stw r10, 0x4(r9) -/* 00006CBC 00013A4C 81 61 00 60 */ lwz r11, 0x60(r1) -/* 00006CC0 00013A50 81 21 00 64 */ lwz r9, 0x64(r1) -/* 00006CC4 00013A54 81 41 00 68 */ lwz r10, 0x68(r1) -/* 00006CC8 00013A58 80 01 00 6C */ lwz r0, 0x6c(r1) -/* 00006CCC 00013A5C 91 61 00 28 */ stw r11, 0x28(r1) -/* 00006CD0 00013A60 90 07 00 0C */ stw r0, 0xc(r7) -/* 00006CD4 00013A64 91 27 00 04 */ stw r9, 0x4(r7) -/* 00006CD8 00013A68 91 47 00 08 */ stw r10, 0x8(r7) -/* 00006CDC 00013A6C 81 21 00 70 */ lwz r9, 0x70(r1) -/* 00006CE0 00013A70 81 61 00 74 */ lwz r11, 0x74(r1) -/* 00006CE4 00013A74 80 01 00 7C */ lwz r0, 0x7c(r1) -/* 00006CE8 00013A78 81 41 00 78 */ lwz r10, 0x78(r1) -/* 00006CEC 00013A7C 91 21 00 38 */ stw r9, 0x38(r1) -/* 00006CF0 00013A80 90 06 00 0C */ stw r0, 0xc(r6) -/* 00006CF4 00013A84 91 66 00 04 */ stw r11, 0x4(r6) -/* 00006CF8 00013A88 91 46 00 08 */ stw r10, 0x8(r6) -/* 00006CFC 00013A8C 93 A1 00 4C */ stw r29, 0x4c(r1) -/* 00006D00 00013A90 93 C1 00 48 */ stw r30, 0x48(r1) -.L_00006D04: -/* 00006D04 00013A94 48 00 00 01 */ bl stringhash32__FPCc -/* 00006D08 00013A98 7C 60 1B 78 */ mr r0, r3 -/* 00006D0C 00013A9C 90 01 00 0C */ stw r0, 0xc(r1) -/* 00006D10 00013AA0 7F 83 E3 78 */ mr r3, r28 -/* 00006D14 00013AA4 90 01 00 50 */ stw r0, 0x50(r1) -/* 00006D18 00013AA8 48 00 00 01 */ bl Deliver__Q26Hermes7Message -/* 00006D1C 00013AAC 38 61 00 20 */ addi r3, r1, 0x20 -/* 00006D20 00013AB0 48 00 00 01 */ bl _GetKind__10MMiscSound -/* 00006D24 00013AB4 80 01 00 20 */ lwz r0, 0x20(r1) -/* 00006D28 00013AB8 39 20 00 14 */ li r9, 0x14 -/* 00006D2C 00013ABC 93 C1 00 0C */ stw r30, 0xc(r1) -/* 00006D30 00013AC0 3C 60 00 00 */ lis r3, .rodata+0x7A4@ha -/* 00006D34 00013AC4 90 01 00 08 */ stw r0, 0x8(r1) -/* 00006D38 00013AC8 38 63 07 A4 */ addi r3, r3, .rodata+0x7A4@l -/* 00006D3C 00013ACC 91 3C 00 08 */ stw r9, 0x8(r28) -/* 00006D40 00013AD0 93 C1 00 14 */ stw r30, 0x14(r1) -/* 00006D44 00013AD4 93 61 00 18 */ stw r27, 0x18(r1) -/* 00006D48 00013AD8 48 00 00 01 */ bl stringhash32__FPCc -/* 00006D4C 00013ADC 7C 60 1B 78 */ mr r0, r3 -/* 00006D50 00013AE0 90 01 00 0C */ stw r0, 0xc(r1) -/* 00006D54 00013AE4 7F 83 E3 78 */ mr r3, r28 -/* 00006D58 00013AE8 90 01 00 20 */ stw r0, 0x20(r1) -/* 00006D5C 00013AEC 48 00 00 01 */ bl Deliver__Q26Hermes7Message -.L_00006D60: -/* 00006D60 00013AF0 3D 20 00 00 */ lis r9, .rodata+0x7B0@ha -/* 00006D64 00013AF4 3D 60 00 00 */ lis r11, .rodata+0x7B4@ha -/* 00006D68 00013AF8 C0 09 07 B0 */ lfs f0, .rodata+0x7B0@l(r9) -/* 00006D6C 00013AFC C1 AB 07 B4 */ lfs f13, .rodata+0x7B4@l(r11) -/* 00006D70 00013B00 D0 1F 02 B4 */ stfs f0, 0x2b4(r31) -/* 00006D74 00013B04 D1 BF 02 C0 */ stfs f13, 0x2c0(r31) -/* 00006D78 00013B08 80 01 00 A4 */ lwz r0, 0xa4(r1) -/* 00006D7C 00013B0C 7C 08 03 A6 */ mtlr r0 -/* 00006D80 00013B10 BB 61 00 8C */ lmw r27, 0x8c(r1) -/* 00006D84 00013B14 38 21 00 A0 */ addi r1, r1, 0xa0 -/* 00006D88 00013B18 4E 80 00 20 */ blr -.endfn PursuitStart__Q28CameraAI8Director - -# .text:0x6D8C | size: 0x88 -# FindPlayer(EVIEW_ID) -.fn FindPlayer__F8EVIEW_ID, global -/* 00006D8C 00013B1C 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 00006D90 00013B20 7C 08 02 A6 */ mflr r0 -/* 00006D94 00013B24 BF 81 00 08 */ stmw r28, 0x8(r1) -/* 00006D98 00013B28 90 01 00 1C */ stw r0, 0x1c(r1) -/* 00006D9C 00013B2C 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@ha -/* 00006DA0 00013B30 7C 7C 1B 78 */ mr r28, r3 -/* 00006DA4 00013B34 39 29 00 00 */ addi r9, r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@l -/* 00006DA8 00013B38 83 C9 00 30 */ lwz r30, 0x30(r9) -/* 00006DAC 00013B3C 7D 3D 4B 78 */ mr r29, r9 -.L_00006DB0: -/* 00006DB0 00013B40 80 1D 00 38 */ lwz r0, 0x38(r29) -/* 00006DB4 00013B44 81 3D 00 30 */ lwz r9, 0x30(r29) -/* 00006DB8 00013B48 54 00 10 3A */ slwi r0, r0, 2 -/* 00006DBC 00013B4C 7D 29 02 14 */ add r9, r9, r0 -/* 00006DC0 00013B50 7C 1E 48 00 */ cmpw r30, r9 -/* 00006DC4 00013B54 41 82 6D FC */ beq .L_0000DBC0 -/* 00006DC8 00013B58 83 FE 00 00 */ lwz r31, 0x0(r30) -/* 00006DCC 00013B5C 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 00006DD0 00013B60 A8 69 00 60 */ lha r3, 0x60(r9) -/* 00006DD4 00013B64 80 09 00 64 */ lwz r0, 0x64(r9) -/* 00006DD8 00013B68 7C 7F 1A 14 */ add r3, r31, r3 -/* 00006DDC 00013B6C 7C 08 03 A6 */ mtlr r0 -.L_00006DE0: -/* 00006DE0 00013B70 4E 80 00 21 */ blrl -/* 00006DE4 00013B74 7C 03 E0 00 */ cmpw r3, r28 -/* 00006DE8 00013B78 40 82 6D F4 */ bne .L_0000DBDC -/* 00006DEC 00013B7C 7F E3 FB 78 */ mr r3, r31 -/* 00006DF0 00013B80 48 00 6E 00 */ b .L_0000DBF0 -/* 00006DF4 00013B84 3B DE 00 04 */ addi r30, r30, 0x4 -/* 00006DF8 00013B88 48 00 6D B0 */ b .L_0000DBA8 -/* 00006DFC 00013B8C 38 60 00 00 */ li r3, 0x0 -/* 00006E00 00013B90 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 00006E04 00013B94 7C 08 03 A6 */ mtlr r0 -/* 00006E08 00013B98 BB 81 00 08 */ lmw r28, 0x8(r1) -.L_00006E0C: -/* 00006E0C 00013B9C 38 21 00 18 */ addi r1, r1, 0x18 -/* 00006E10 00013BA0 4E 80 00 20 */ blr -.endfn FindPlayer__F8EVIEW_ID - -# .text:0x6E14 | size: 0x44 -# FindDirector(EVIEW_ID) -.fn FindDirector__F8EVIEW_ID, global -/* 00006E14 00013BA4 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha -/* 00006E18 00013BA8 7C 6A 1B 78 */ mr r10, r3 -/* 00006E1C 00013BAC 39 69 00 00 */ addi r11, r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l -/* 00006E20 00013BB0 80 0B 00 08 */ lwz r0, 0x8(r11) -/* 00006E24 00013BB4 81 29 00 00 */ lwz r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r9) -/* 00006E28 00013BB8 54 00 10 3A */ slwi r0, r0, 2 -/* 00006E2C 00013BBC 7D 69 02 14 */ add r11, r9, r0 -/* 00006E30 00013BC0 7C 09 58 00 */ cmpw r9, r11 -/* 00006E34 00013BC4 41 82 6E 50 */ beq .L_0000DC84 -/* 00006E38 00013BC8 80 69 00 00 */ lwz r3, 0x0(r9) -/* 00006E3C 00013BCC 80 03 00 04 */ lwz r0, 0x4(r3) -/* 00006E40 00013BD0 7C 00 50 00 */ cmpw r0, r10 -/* 00006E44 00013BD4 4D 82 00 20 */ beqlr -/* 00006E48 00013BD8 39 29 00 04 */ addi r9, r9, 0x4 -/* 00006E4C 00013BDC 48 00 6E 30 */ b .L_0000DC7C -/* 00006E50 00013BE0 38 60 00 00 */ li r3, 0x0 -/* 00006E54 00013BE4 4E 80 00 20 */ blr -.endfn FindDirector__F8EVIEW_ID - -# .text:0x6E58 | size: 0xB8 -# FindDirector(unsigned int) -.fn FindDirector__FUi, global -/* 00006E58 00013BE8 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 00006E5C 00013BEC 7C 08 02 A6 */ mflr r0 -/* 00006E60 00013BF0 BF 61 00 0C */ stmw r27, 0xc(r1) -.L_00006E64: -/* 00006E64 00013BF4 90 01 00 24 */ stw r0, 0x24(r1) -/* 00006E68 00013BF8 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha -/* 00006E6C 00013BFC 3F A0 00 00 */ lis r29, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha -/* 00006E70 00013C00 83 E9 00 00 */ lwz r31, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r9) -/* 00006E74 00013C04 3B 7D 00 00 */ addi r27, r29, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l -/* 00006E78 00013C08 7C 7C 1B 78 */ mr r28, r3 -/* 00006E7C 00013C0C 80 1B 00 08 */ lwz r0, 0x8(r27) -/* 00006E80 00013C10 81 3D 00 00 */ lwz r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r29) -/* 00006E84 00013C14 54 00 10 3A */ slwi r0, r0, 2 -/* 00006E88 00013C18 7D 29 02 14 */ add r9, r9, r0 -/* 00006E8C 00013C1C 7C 1F 48 00 */ cmpw r31, r9 -/* 00006E90 00013C20 41 82 6E F8 */ beq .L_0000DD88 -/* 00006E94 00013C24 83 DF 00 00 */ lwz r30, 0x0(r31) -/* 00006E98 00013C28 80 7E 00 04 */ lwz r3, 0x4(r30) -.L_00006E9C: -/* 00006E9C 00013C2C 48 00 6D 8D */ bl .L_0000DC28 -/* 00006EA0 00013C30 7C 6B 1B 79 */ mr. r11, r3 -/* 00006EA4 00013C34 41 82 6E F0 */ beq .L_0000DD94 -/* 00006EA8 00013C38 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 00006EAC 00013C3C A8 69 00 10 */ lha r3, 0x10(r9) -/* 00006EB0 00013C40 80 09 00 14 */ lwz r0, 0x14(r9) -/* 00006EB4 00013C44 7C 6B 1A 14 */ add r3, r11, r3 -/* 00006EB8 00013C48 7C 08 03 A6 */ mtlr r0 -/* 00006EBC 00013C4C 4E 80 00 21 */ blrl -/* 00006EC0 00013C50 7C 6B 1B 79 */ mr. r11, r3 -/* 00006EC4 00013C54 41 82 6E F0 */ beq .L_0000DDB4 -/* 00006EC8 00013C58 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 00006ECC 00013C5C A8 69 00 E8 */ lha r3, 0xe8(r9) -/* 00006ED0 00013C60 80 09 00 EC */ lwz r0, 0xec(r9) -/* 00006ED4 00013C64 7C 6B 1A 14 */ add r3, r11, r3 -/* 00006ED8 00013C68 7C 08 03 A6 */ mtlr r0 -/* 00006EDC 00013C6C 4E 80 00 21 */ blrl -/* 00006EE0 00013C70 7C 03 E0 00 */ cmpw r3, r28 -/* 00006EE4 00013C74 40 82 6E F0 */ bne .L_0000DDD4 -/* 00006EE8 00013C78 7F C3 F3 78 */ mr r3, r30 -/* 00006EEC 00013C7C 48 00 6E FC */ b .L_0000DDE8 -/* 00006EF0 00013C80 3B FF 00 04 */ addi r31, r31, 0x4 -.L_00006EF4: -/* 00006EF4 00013C84 48 00 6E 7C */ b .L_0000DD70 -/* 00006EF8 00013C88 38 60 00 00 */ li r3, 0x0 -/* 00006EFC 00013C8C 80 01 00 24 */ lwz r0, 0x24(r1) -/* 00006F00 00013C90 7C 08 03 A6 */ mtlr r0 -/* 00006F04 00013C94 BB 61 00 0C */ lmw r27, 0xc(r1) -/* 00006F08 00013C98 38 21 00 20 */ addi r1, r1, 0x20 -/* 00006F0C 00013C9C 4E 80 00 20 */ blr -.endfn FindDirector__FUi - -# .text:0x6F10 | size: 0x54 -# AreMomentCamerasEnabled() -.fn AreMomentCamerasEnabled__Fv, global -/* 00006F10 00013CA0 3D 20 00 00 */ lis r9, FEDatabase@ha -/* 00006F14 00013CA4 38 00 00 00 */ li r0, 0x0 -/* 00006F18 00013CA8 81 69 00 00 */ lwz r11, FEDatabase@l(r9) -/* 00006F1C 00013CAC 81 2B 01 C0 */ lwz r9, 0x1c0(r11) -/* 00006F20 00013CB0 71 2A 00 04 */ andi. r10, r9, 0x4 -/* 00006F24 00013CB4 41 82 6F 38 */ beq .L_0000DE5C -/* 00006F28 00013CB8 88 0B 00 00 */ lbz r0, 0x0(r11) -/* 00006F2C 00013CBC 68 00 00 02 */ xori r0, r0, 0x2 -/* 00006F30 00013CC0 21 40 00 00 */ subfic r10, r0, 0x0 -/* 00006F34 00013CC4 7C 0A 01 14 */ adde r0, r10, r0 -/* 00006F38 00013CC8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00006F3C 00013CCC 41 82 6F 48 */ beq .L_0000DE84 -/* 00006F40 00013CD0 38 60 00 00 */ li r3, 0x0 -/* 00006F44 00013CD4 4E 80 00 20 */ blr -.L_00006F48: -/* 00006F48 00013CD8 71 20 00 40 */ andi. r0, r9, 0x40 -/* 00006F4C 00013CDC 40 82 6F 40 */ bne .L_0000DE8C -/* 00006F50 00013CE0 71 2A 00 08 */ andi. r10, r9, 0x8 -/* 00006F54 00013CE4 40 82 6F 40 */ bne .L_0000DE94 -/* 00006F58 00013CE8 81 2B 00 20 */ lwz r9, 0x20(r11) -/* 00006F5C 00013CEC 80 69 00 50 */ lwz r3, 0x50(r9) -/* 00006F60 00013CF0 4E 80 00 20 */ blr -.endfn AreMomentCamerasEnabled__Fv - -# .text:0x6F64 | size: 0xF4 -.fn Update__8CameraAIf, global -/* 00006F64 00013CF4 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 00006F68 00013CF8 7C 08 02 A6 */ mflr r0 -.L_00006F6C: -/* 00006F6C 00013CFC F3 E1 00 18 */ psq_st f31, 0x18(r1), 0, qr0 -/* 00006F70 00013D00 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 00006F74 00013D04 90 01 00 24 */ stw r0, 0x24(r1) -/* 00006F78 00013D08 FF E0 08 90 */ fmr f31, f1 -/* 00006F7C 00013D0C 38 60 00 01 */ li r3, 0x1 -/* 00006F80 00013D10 48 00 00 01 */ bl Count__Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi311ePlayerList -/* 00006F84 00013D14 3B C0 00 00 */ li r30, 0x0 -/* 00006F88 00013D18 3F A0 00 00 */ lis r29, gFastMem@ha -/* 00006F8C 00013D1C 3B DE 00 01 */ addi r30, r30, 0x1 -/* 00006F90 00013D20 7F C3 F3 78 */ mr r3, r30 -/* 00006F94 00013D24 48 00 6D 8D */ bl .L_0000DD20 -/* 00006F98 00013D28 7C 7F 1B 78 */ mr r31, r3 -/* 00006F9C 00013D2C 7F C3 F3 78 */ mr r3, r30 -/* 00006FA0 00013D30 48 00 6E 15 */ bl .L_0000DDB4 -/* 00006FA4 00013D34 7C 6B 1B 79 */ mr. r11, r3 -/* 00006FA8 00013D38 41 82 6F D4 */ beq .L_0000DF7C -/* 00006FAC 00013D3C 2C 1F 00 00 */ cmpwi r31, 0x0 -/* 00006FB0 00013D40 40 82 6F DC */ bne .L_0000DF8C -/* 00006FB4 00013D44 81 2B 02 C4 */ lwz r9, 0x2c4(r11) -/* 00006FB8 00013D48 38 80 00 03 */ li r4, 0x3 -/* 00006FBC 00013D4C A8 69 00 08 */ lha r3, 0x8(r9) -/* 00006FC0 00013D50 80 09 00 0C */ lwz r0, 0xc(r9) -/* 00006FC4 00013D54 7C 6B 1A 14 */ add r3, r11, r3 -/* 00006FC8 00013D58 7C 08 03 A6 */ mtlr r0 -/* 00006FCC 00013D5C 4E 80 00 21 */ blrl -/* 00006FD0 00013D60 48 00 6F FC */ b .L_0000DFCC -/* 00006FD4 00013D64 2C 1F 00 00 */ cmpwi r31, 0x0 -.L_00006FD8: -/* 00006FD8 00013D68 41 82 6F FC */ beq .L_0000DFD4 -/* 00006FDC 00013D6C 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00006FE0 00013D70 40 82 6F FC */ bne .L_0000DFDC -.L_00006FE4: -/* 00006FE4 00013D74 38 80 02 C8 */ li r4, 0x2c8 -/* 00006FE8 00013D78 38 7D 00 00 */ addi r3, r29, gFastMem@l -/* 00006FEC 00013D7C 38 A0 00 00 */ li r5, 0x0 -/* 00006FF0 00013D80 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 00006FF4 00013D84 7F C4 F3 78 */ mr r4, r30 -/* 00006FF8 00013D88 48 00 5B CD */ bl .L_0000CBC4 -/* 00006FFC 00013D8C 28 1E 00 01 */ cmplwi r30, 0x1 -/* 00007000 00013D90 40 81 6F 8C */ ble .L_0000DF8C -/* 00007004 00013D94 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha -/* 00007008 00013D98 3F C0 00 00 */ lis r30, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha -/* 0000700C 00013D9C 83 E9 00 00 */ lwz r31, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r9) -/* 00007010 00013DA0 3B BE 00 00 */ addi r29, r30, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l -/* 00007014 00013DA4 80 1D 00 08 */ lwz r0, 0x8(r29) -/* 00007018 00013DA8 81 3E 00 00 */ lwz r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r30) -/* 0000701C 00013DAC 54 00 10 3A */ slwi r0, r0, 2 -/* 00007020 00013DB0 7D 29 02 14 */ add r9, r9, r0 -/* 00007024 00013DB4 7C 1F 48 00 */ cmpw r31, r9 -/* 00007028 00013DB8 41 82 70 40 */ beq .L_0000E068 -/* 0000702C 00013DBC 80 7F 00 00 */ lwz r3, 0x0(r31) -/* 00007030 00013DC0 FC 20 F8 90 */ fmr f1, f31 -.L_00007034: -/* 00007034 00013DC4 3B FF 00 04 */ addi r31, r31, 0x4 -/* 00007038 00013DC8 48 00 60 CD */ bl .L_0000D104 -/* 0000703C 00013DCC 48 00 70 14 */ b .L_0000E050 -.L_00007040: -/* 00007040 00013DD0 80 01 00 24 */ lwz r0, 0x24(r1) -/* 00007044 00013DD4 7C 08 03 A6 */ mtlr r0 -/* 00007048 00013DD8 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 0000704C 00013DDC E3 E1 00 18 */ psq_l f31, 0x18(r1), 0, qr0 -/* 00007050 00013DE0 38 21 00 20 */ addi r1, r1, 0x20 -/* 00007054 00013DE4 4E 80 00 20 */ blr -.endfn Update__8CameraAIf - -# .text:0x7058 | size: 0x5C -.fn Reset__8CameraAIv, global -/* 00007058 00013DE8 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0000705C 00013DEC 7C 08 02 A6 */ mflr r0 -/* 00007060 00013DF0 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 00007064 00013DF4 90 01 00 1C */ stw r0, 0x1c(r1) -/* 00007068 00013DF8 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha -/* 0000706C 00013DFC 3F C0 00 00 */ lis r30, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha -/* 00007070 00013E00 83 E9 00 00 */ lwz r31, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r9) -/* 00007074 00013E04 3B BE 00 00 */ addi r29, r30, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l -/* 00007078 00013E08 80 1D 00 08 */ lwz r0, 0x8(r29) -/* 0000707C 00013E0C 81 3E 00 00 */ lwz r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r30) -/* 00007080 00013E10 54 00 10 3A */ slwi r0, r0, 2 -/* 00007084 00013E14 7D 29 02 14 */ add r9, r9, r0 -/* 00007088 00013E18 7C 1F 48 00 */ cmpw r31, r9 -/* 0000708C 00013E1C 41 82 70 A0 */ beq .L_0000E12C -/* 00007090 00013E20 80 7F 00 00 */ lwz r3, 0x0(r31) -/* 00007094 00013E24 3B FF 00 04 */ addi r31, r31, 0x4 -/* 00007098 00013E28 48 00 5F 81 */ bl .L_0000D018 -/* 0000709C 00013E2C 48 00 70 78 */ b .L_0000E114 -/* 000070A0 00013E30 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 000070A4 00013E34 7C 08 03 A6 */ mtlr r0 -/* 000070A8 00013E38 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 000070AC 00013E3C 38 21 00 18 */ addi r1, r1, 0x18 -/* 000070B0 00013E40 4E 80 00 20 */ blr -.endfn Reset__8CameraAIv - -# .text:0x70B4 | size: 0x9C -.fn SetAction__8CameraAI8EVIEW_IDPCc, global -/* 000070B4 00013E44 94 21 FF C8 */ stwu r1, -0x38(r1) -/* 000070B8 00013E48 7C 08 02 A6 */ mflr r0 -/* 000070BC 00013E4C BF 21 00 1C */ stmw r25, 0x1c(r1) -.L_000070C0: -/* 000070C0 00013E50 90 01 00 3C */ stw r0, 0x3c(r1) -/* 000070C4 00013E54 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha -/* 000070C8 00013E58 3F 60 00 00 */ lis r27, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha -/* 000070CC 00013E5C 83 C9 00 00 */ lwz r30, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r9) -.L_000070D0: -/* 000070D0 00013E60 3B 3B 00 00 */ addi r25, r27, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l -/* 000070D4 00013E64 7C 7A 1B 78 */ mr r26, r3 -/* 000070D8 00013E68 7C 9D 23 78 */ mr r29, r4 -/* 000070DC 00013E6C 3B 81 00 08 */ addi r28, r1, 0x8 -/* 000070E0 00013E70 80 19 00 08 */ lwz r0, 0x8(r25) -/* 000070E4 00013E74 81 3B 00 00 */ lwz r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r27) -/* 000070E8 00013E78 54 00 10 3A */ slwi r0, r0, 2 -/* 000070EC 00013E7C 7D 29 02 14 */ add r9, r9, r0 -/* 000070F0 00013E80 7C 1E 48 00 */ cmpw r30, r9 -/* 000070F4 00013E84 41 82 71 3C */ beq .L_0000E230 -/* 000070F8 00013E88 83 FE 00 00 */ lwz r31, 0x0(r30) -/* 000070FC 00013E8C 80 1F 00 04 */ lwz r0, 0x4(r31) -/* 00007100 00013E90 7C 00 D0 00 */ cmpw r0, r26 -/* 00007104 00013E94 40 82 71 34 */ bne .L_0000E238 -/* 00007108 00013E98 7F A3 EB 78 */ mr r3, r29 -/* 0000710C 00013E9C 48 00 00 01 */ bl StringHash64__6AttribPCc -/* 00007110 00013EA0 90 61 00 08 */ stw r3, 0x8(r1) -/* 00007114 00013EA4 90 81 00 0C */ stw r4, 0xc(r1) -/* 00007118 00013EA8 7F A3 EB 78 */ mr r3, r29 -/* 0000711C 00013EAC 48 00 00 01 */ bl StringHash32__6AttribPCc -/* 00007120 00013EB0 90 7C 00 08 */ stw r3, 0x8(r28) -/* 00007124 00013EB4 7F 84 E3 78 */ mr r4, r28 -/* 00007128 00013EB8 7F E3 FB 78 */ mr r3, r31 -/* 0000712C 00013EBC 93 A1 00 14 */ stw r29, 0x14(r1) -/* 00007130 00013EC0 48 00 62 39 */ bl .L_0000D368 -/* 00007134 00013EC4 3B DE 00 04 */ addi r30, r30, 0x4 -.L_00007138: -/* 00007138 00013EC8 48 00 70 E0 */ b .L_0000E218 -/* 0000713C 00013ECC 80 01 00 3C */ lwz r0, 0x3c(r1) -/* 00007140 00013ED0 7C 08 03 A6 */ mtlr r0 -/* 00007144 00013ED4 BB 21 00 1C */ lmw r25, 0x1c(r1) -/* 00007148 00013ED8 38 21 00 38 */ addi r1, r1, 0x38 -/* 0000714C 00013EDC 4E 80 00 20 */ blr -.endfn SetAction__8CameraAI8EVIEW_IDPCc - -# .text:0x7150 | size: 0x2C -.fn MaybeKillPursuitCam__8CameraAIUi, global -/* 00007150 00013EE0 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 00007154 00013EE4 7C 08 02 A6 */ mflr r0 -/* 00007158 00013EE8 90 01 00 0C */ stw r0, 0xc(r1) -/* 0000715C 00013EEC 48 00 6E 59 */ bl .L_0000DFB4 -/* 00007160 00013EF0 7C 63 1B 79 */ mr. r3, r3 -/* 00007164 00013EF4 41 82 71 6C */ beq .L_0000E2D0 -/* 00007168 00013EF8 48 00 60 5D */ bl .L_0000D1C4 -/* 0000716C 00013EFC 80 01 00 0C */ lwz r0, 0xc(r1) -/* 00007170 00013F00 7C 08 03 A6 */ mtlr r0 -/* 00007174 00013F04 38 21 00 08 */ addi r1, r1, 0x8 -/* 00007178 00013F08 4E 80 00 20 */ blr -.endfn MaybeKillPursuitCam__8CameraAIUi - -# .text:0x717C | size: 0x7F4 -.fn AverageAir__FP8ISimablefPfT2, local -/* 0000717C 00013F0C 94 21 FD F0 */ stwu r1, -0x210(r1) -/* 00007180 00013F10 7C 08 02 A6 */ mflr r0 -/* 00007184 00013F14 F3 01 01 D0 */ psq_st f24, 0x1d0(r1), 0, qr0 -/* 00007188 00013F18 F3 21 01 D8 */ psq_st f25, 0x1d8(r1), 0, qr0 -/* 0000718C 00013F1C F3 41 01 E0 */ psq_st f26, 0x1e0(r1), 0, qr0 -/* 00007190 00013F20 F3 61 01 E8 */ psq_st f27, 0x1e8(r1), 0, qr0 -/* 00007194 00013F24 F3 81 01 F0 */ psq_st f28, 0x1f0(r1), 0, qr0 -/* 00007198 00013F28 F3 A1 01 F8 */ psq_st f29, 0x1f8(r1), 0, qr0 -/* 0000719C 00013F2C F3 C1 02 00 */ psq_st f30, 0x200(r1), 0, qr0 -/* 000071A0 00013F30 F3 E1 02 08 */ psq_st f31, 0x208(r1), 0, qr0 -/* 000071A4 00013F34 BD C1 01 88 */ stmw r14, 0x188(r1) -/* 000071A8 00013F38 90 01 02 14 */ stw r0, 0x214(r1) -/* 000071AC 00013F3C 7C 7B 1B 78 */ mr r27, r3 -.L_000071B0: -/* 000071B0 00013F40 FF C0 08 90 */ fmr f30, f1 -/* 000071B4 00013F44 81 3B 00 04 */ lwz r9, 0x4(r27) -/* 000071B8 00013F48 90 81 01 68 */ stw r4, 0x168(r1) -/* 000071BC 00013F4C 90 A1 01 6C */ stw r5, 0x16c(r1) -/* 000071C0 00013F50 A8 69 00 A8 */ lha r3, 0xa8(r9) -/* 000071C4 00013F54 80 09 00 AC */ lwz r0, 0xac(r9) -/* 000071C8 00013F58 7C 7B 1A 14 */ add r3, r27, r3 -/* 000071CC 00013F5C 7C 08 03 A6 */ mtlr r0 -/* 000071D0 00013F60 4E 80 00 21 */ blrl -/* 000071D4 00013F64 7C 76 1B 79 */ mr. r22, r3 -/* 000071D8 00013F68 41 82 72 A8 */ beq .L_0000E480 -/* 000071DC 00013F6C 3C 80 00 00 */ lis r4, _IHandle__14ICollisionBody@ha -/* 000071E0 00013F70 80 7B 00 00 */ lwz r3, 0x0(r27) -/* 000071E4 00013F74 38 84 00 00 */ addi r4, r4, _IHandle__14ICollisionBody@l -/* 000071E8 00013F78 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 000071EC 00013F7C 7C 7A 1B 79 */ mr. r26, r3 -/* 000071F0 00013F80 38 00 00 01 */ li r0, 0x1 -/* 000071F4 00013F84 40 82 71 FC */ bne .L_0000E3F0 -/* 000071F8 00013F88 38 00 00 00 */ li r0, 0x0 -/* 000071FC 00013F8C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00007200 00013F90 41 82 72 A8 */ beq .L_0000E4A8 -/* 00007204 00013F94 81 36 00 04 */ lwz r9, 0x4(r22) -/* 00007208 00013F98 A8 69 00 60 */ lha r3, 0x60(r9) -/* 0000720C 00013F9C 80 09 00 64 */ lwz r0, 0x64(r9) -/* 00007210 00013FA0 7C 76 1A 14 */ add r3, r22, r3 -/* 00007214 00013FA4 7C 08 03 A6 */ mtlr r0 -/* 00007218 00013FA8 4E 80 00 21 */ blrl -/* 0000721C 00013FAC 3D 20 00 00 */ lis r9, .rodata+0x7BC@ha -/* 00007220 00013FB0 FF E0 08 90 */ fmr f31, f1 -/* 00007224 00013FB4 C0 09 07 BC */ lfs f0, .rodata+0x7BC@l(r9) -/* 00007228 00013FB8 FC 1F 00 00 */ fcmpu cr0, f31, f0 -/* 0000722C 00013FBC 41 80 72 A8 */ blt .L_0000E4D4 -/* 00007230 00013FC0 3D 20 00 00 */ lis r9, .rodata+0x7C0@ha -/* 00007234 00013FC4 EC 1F 07 B2 */ fmuls f0, f31, f30 -/* 00007238 00013FC8 C1 89 07 C0 */ lfs f12, .rodata+0x7C0@l(r9) -/* 0000723C 00013FCC EC 00 03 32 */ fmuls f0, f0, f12 -/* 00007240 00013FD0 FD A0 00 1E */ fctiwz f13, f0 -/* 00007244 00013FD4 D9 A1 01 80 */ stfd f13, 0x180(r1) -/* 00007248 00013FD8 82 01 01 84 */ lwz r16, 0x184(r1) -/* 0000724C 00013FDC 2C 10 00 00 */ cmpwi r16, 0x0 -.L_00007250: -/* 00007250 00013FE0 40 81 72 A8 */ ble .L_0000E4F8 -/* 00007254 00013FE4 3C 80 00 00 */ lis r4, _IHandle__11ISuspension@ha -/* 00007258 00013FE8 80 7B 00 00 */ lwz r3, 0x0(r27) -/* 0000725C 00013FEC 38 84 00 00 */ addi r4, r4, _IHandle__11ISuspension@l -/* 00007260 00013FF0 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 00007264 00013FF4 7C 7F 1B 79 */ mr. r31, r3 -.L_00007268: -/* 00007268 00013FF8 38 00 00 01 */ li r0, 0x1 -/* 0000726C 00013FFC 40 82 72 74 */ bne .L_0000E4E0 -.L_00007270: -/* 00007270 00014000 38 00 00 00 */ li r0, 0x0 -/* 00007274 00014004 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00007278 00014008 41 82 72 A8 */ beq .L_0000E520 -.L_0000727C: -/* 0000727C 0001400C 3C 80 00 00 */ lis r4, _IHandle__8IVehicle@ha -/* 00007280 00014010 80 7B 00 00 */ lwz r3, 0x0(r27) -/* 00007284 00014014 38 84 00 00 */ addi r4, r4, _IHandle__8IVehicle@l -/* 00007288 00014018 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000728C 0001401C 7C 69 1B 79 */ mr. r9, r3 -.L_00007290: -/* 00007290 00014020 38 00 00 01 */ li r0, 0x1 -/* 00007294 00014024 91 21 01 70 */ stw r9, 0x170(r1) -/* 00007298 00014028 40 82 72 A0 */ bne .L_0000E538 -/* 0000729C 0001402C 38 00 00 00 */ li r0, 0x0 -/* 000072A0 00014030 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000072A4 00014034 40 82 72 B4 */ bne .L_0000E558 -/* 000072A8 00014038 3D 20 00 00 */ lis r9, .rodata+0x7B8@ha -/* 000072AC 0001403C C0 29 07 B8 */ lfs f1, .rodata+0x7B8@l(r9) -/* 000072B0 00014040 48 00 79 3C */ b .L_0000EBEC -/* 000072B4 00014044 3D 20 00 00 */ lis r9, _Q25UMath7Vector3.kZero@ha -/* 000072B8 00014048 39 61 00 08 */ addi r11, r1, 0x8 -/* 000072BC 0001404C 81 49 00 00 */ lwz r10, _Q25UMath7Vector3.kZero@l(r9) -/* 000072C0 00014050 3B 80 00 00 */ li r28, 0x0 -.L_000072C4: -/* 000072C4 00014054 39 29 00 00 */ addi r9, r9, _Q25UMath7Vector3.kZero@l -.L_000072C8: -/* 000072C8 00014058 81 09 00 08 */ lwz r8, 0x8(r9) -/* 000072CC 0001405C 80 09 00 04 */ lwz r0, 0x4(r9) -/* 000072D0 00014060 91 41 00 08 */ stw r10, 0x8(r1) -/* 000072D4 00014064 90 0B 00 04 */ stw r0, 0x4(r11) -/* 000072D8 00014068 91 0B 00 08 */ stw r8, 0x8(r11) -/* 000072DC 0001406C 7D 74 5B 78 */ mr r20, r11 -/* 000072E0 00014070 39 61 01 08 */ addi r11, r1, 0x108 -/* 000072E4 00014074 38 01 00 78 */ addi r0, r1, 0x78 -/* 000072E8 00014078 3A 61 00 28 */ addi r19, r1, 0x28 -/* 000072EC 0001407C 3B 01 00 38 */ addi r24, r1, 0x38 -/* 000072F0 00014080 39 C1 00 90 */ addi r14, r1, 0x90 -/* 000072F4 00014084 3A E1 00 A8 */ addi r23, r1, 0xa8 -/* 000072F8 00014088 3A 21 00 F8 */ addi r17, r1, 0xf8 -/* 000072FC 0001408C 3A A1 00 C8 */ addi r21, r1, 0xc8 -/* 00007300 00014090 3B 21 00 E8 */ addi r25, r1, 0xe8 -/* 00007304 00014094 3A 41 00 D8 */ addi r18, r1, 0xd8 -/* 00007308 00014098 39 E1 01 60 */ addi r15, r1, 0x160 -/* 0000730C 0001409C 91 61 01 74 */ stw r11, 0x174(r1) -/* 00007310 000140A0 90 01 01 78 */ stw r0, 0x178(r1) -/* 00007314 000140A4 48 00 73 B8 */ b .L_0000E6CC -/* 00007318 000140A8 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 0000731C 000140AC 7F 84 E3 78 */ mr r4, r28 -/* 00007320 000140B0 3B C1 00 18 */ addi r30, r1, 0x18 -/* 00007324 000140B4 80 09 00 24 */ lwz r0, 0x24(r9) -/* 00007328 000140B8 A8 69 00 20 */ lha r3, 0x20(r9) -/* 0000732C 000140BC 7C 08 03 A6 */ mtlr r0 -/* 00007330 000140C0 7C 7F 1A 14 */ add r3, r31, r3 -/* 00007334 000140C4 4E 80 00 21 */ blrl -/* 00007338 000140C8 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0000733C 000140CC 81 63 00 08 */ lwz r11, 0x8(r3) -/* 00007340 000140D0 80 03 00 04 */ lwz r0, 0x4(r3) -/* 00007344 000140D4 91 21 00 18 */ stw r9, 0x18(r1) -/* 00007348 000140D8 91 7E 00 08 */ stw r11, 0x8(r30) -/* 0000734C 000140DC 90 1E 00 04 */ stw r0, 0x4(r30) -/* 00007350 000140E0 81 3A 00 04 */ lwz r9, 0x4(r26) -/* 00007354 000140E4 80 09 01 4C */ lwz r0, 0x14c(r9) -/* 00007358 000140E8 A8 69 01 48 */ lha r3, 0x148(r9) -/* 0000735C 000140EC 7C 08 03 A6 */ mtlr r0 -/* 00007360 000140F0 7C 7A 1A 14 */ add r3, r26, r3 -/* 00007364 000140F4 4E 80 00 21 */ blrl -/* 00007368 000140F8 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 0000736C 000140FC 7C 7D 1B 78 */ mr r29, r3 -/* 00007370 00014100 7F 84 E3 78 */ mr r4, r28 -/* 00007374 00014104 A8 69 00 58 */ lha r3, 0x58(r9) -/* 00007378 00014108 3B 9C 00 01 */ addi r28, r28, 0x1 -/* 0000737C 0001410C 80 09 00 5C */ lwz r0, 0x5c(r9) -/* 00007380 00014110 7C 7F 1A 14 */ add r3, r31, r3 -/* 00007384 00014114 7C 08 03 A6 */ mtlr r0 -/* 00007388 00014118 4E 80 00 21 */ blrl -/* 0000738C 0001411C 7F A3 EB 78 */ mr r3, r29 -/* 00007390 00014120 FC 20 08 50 */ fneg f1, f1 -/* 00007394 00014124 7F C4 F3 78 */ mr r4, r30 -/* 00007398 00014128 7F C5 F3 78 */ mr r5, r30 -/* 0000739C 0001412C 48 00 00 01 */ bl VU0_v3scaleadd__FRCQ25UMath7Vector3fT0RQ25UMath7Vector3 -/* 000073A0 00014130 3D 20 00 00 */ lis r9, .rodata+0x7C4@ha -/* 000073A4 00014134 7F C3 F3 78 */ mr r3, r30 -/* 000073A8 00014138 C0 29 07 C4 */ lfs f1, .rodata+0x7C4@l(r9) -/* 000073AC 0001413C 7E 84 A3 78 */ mr r4, r20 -/* 000073B0 00014140 7E 85 A3 78 */ mr r5, r20 -/* 000073B4 00014144 48 00 00 01 */ bl VU0_v3scaleadd__FRCQ25UMath7Vector3fT0RQ25UMath7Vector3 -/* 000073B8 00014148 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 000073BC 0001414C A8 69 00 18 */ lha r3, 0x18(r9) -/* 000073C0 00014150 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 000073C4 00014154 7C 7F 1A 14 */ add r3, r31, r3 -/* 000073C8 00014158 7C 08 03 A6 */ mtlr r0 -/* 000073CC 0001415C 4E 80 00 21 */ blrl -/* 000073D0 00014160 7C 1C 18 40 */ cmplw r28, r3 -/* 000073D4 00014164 41 80 73 18 */ blt .L_0000E6EC -.L_000073D8: -/* 000073D8 00014168 81 3A 00 04 */ lwz r9, 0x4(r26) -/* 000073DC 0001416C 80 09 01 0C */ lwz r0, 0x10c(r9) -/* 000073E0 00014170 A8 69 01 08 */ lha r3, 0x108(r9) -/* 000073E4 00014174 7C 08 03 A6 */ mtlr r0 -/* 000073E8 00014178 7C 7A 1A 14 */ add r3, r26, r3 -/* 000073EC 0001417C 4E 80 00 21 */ blrl -/* 000073F0 00014180 81 63 00 00 */ lwz r11, 0x0(r3) -/* 000073F4 00014184 81 1B 00 04 */ lwz r8, 0x4(r27) -/* 000073F8 00014188 81 43 00 0C */ lwz r10, 0xc(r3) -/* 000073FC 0001418C 80 03 00 04 */ lwz r0, 0x4(r3) -/* 00007400 00014190 81 23 00 08 */ lwz r9, 0x8(r3) -/* 00007404 00014194 91 61 00 28 */ stw r11, 0x28(r1) -/* 00007408 00014198 91 33 00 08 */ stw r9, 0x8(r19) -.L_0000740C: -/* 0000740C 0001419C 91 53 00 0C */ stw r10, 0xc(r19) -/* 00007410 000141A0 90 13 00 04 */ stw r0, 0x4(r19) -/* 00007414 000141A4 A8 68 00 98 */ lha r3, 0x98(r8) -/* 00007418 000141A8 80 08 00 9C */ lwz r0, 0x9c(r8) -/* 0000741C 000141AC 7C 7B 1A 14 */ add r3, r27, r3 -/* 00007420 000141B0 7C 08 03 A6 */ mtlr r0 -/* 00007424 000141B4 4E 80 00 21 */ blrl -/* 00007428 000141B8 7C 6A 1B 78 */ mr r10, r3 -/* 0000742C 000141BC 7F 0B C3 78 */ mr r11, r24 -/* 00007430 000141C0 39 20 00 30 */ li r9, 0x30 -/* 00007434 000141C4 80 0A 00 00 */ lwz r0, 0x0(r10) -/* 00007438 000141C8 35 29 FF E8 */ subic. r9, r9, 0x18 -/* 0000743C 000141CC 90 0B 00 00 */ stw r0, 0x0(r11) -/* 00007440 000141D0 80 0A 00 04 */ lwz r0, 0x4(r10) -/* 00007444 000141D4 90 0B 00 04 */ stw r0, 0x4(r11) -/* 00007448 000141D8 80 0A 00 08 */ lwz r0, 0x8(r10) -/* 0000744C 000141DC 90 0B 00 08 */ stw r0, 0x8(r11) -/* 00007450 000141E0 80 0A 00 0C */ lwz r0, 0xc(r10) -/* 00007454 000141E4 90 0B 00 0C */ stw r0, 0xc(r11) -/* 00007458 000141E8 80 0A 00 10 */ lwz r0, 0x10(r10) -/* 0000745C 000141EC 90 0B 00 10 */ stw r0, 0x10(r11) -/* 00007460 000141F0 80 0A 00 14 */ lwz r0, 0x14(r10) -.L_00007464: -/* 00007464 000141F4 39 4A 00 18 */ addi r10, r10, 0x18 -/* 00007468 000141F8 90 0B 00 14 */ stw r0, 0x14(r11) -/* 0000746C 000141FC 39 6B 00 18 */ addi r11, r11, 0x18 -/* 00007470 00014200 40 82 74 34 */ bne .L_0000E8A4 -/* 00007474 00014204 80 0A 00 00 */ lwz r0, 0x0(r10) -.L_00007478: -/* 00007478 00014208 3D 20 00 00 */ lis r9, .rodata+0x7C8@ha -/* 0000747C 0001420C C0 09 07 C8 */ lfs f0, .rodata+0x7C8@l(r9) -/* 00007480 00014210 7F 03 C3 78 */ mr r3, r24 -/* 00007484 00014214 90 0B 00 00 */ stw r0, 0x0(r11) -.L_00007488: -/* 00007488 00014218 38 81 00 08 */ addi r4, r1, 0x8 -/* 0000748C 0001421C 80 0A 00 04 */ lwz r0, 0x4(r10) -/* 00007490 00014220 90 0B 00 04 */ stw r0, 0x4(r11) -/* 00007494 00014224 80 0A 00 08 */ lwz r0, 0x8(r10) -/* 00007498 00014228 90 0B 00 08 */ stw r0, 0x8(r11) -/* 0000749C 0001422C D0 01 00 6C */ stfs f0, 0x6c(r1) -/* 000074A0 00014230 48 00 00 01 */ bl HeightAtPoint__C9WWorldPosRCQ25UMath7Vector3 -/* 000074A4 00014234 6E 00 80 00 */ xoris r0, r16, 0x8000 -/* 000074A8 00014238 90 01 01 84 */ stw r0, 0x184(r1) -/* 000074AC 0001423C 3D 60 43 30 */ lis r11, 0x4330 -/* 000074B0 00014240 3D 40 00 00 */ lis r10, .rodata+0x7D0@ha -/* 000074B4 00014244 C1 A1 00 0C */ lfs f13, 0xc(r1) -/* 000074B8 00014248 91 61 01 80 */ stw r11, 0x180(r1) -/* 000074BC 0001424C 3D 00 00 00 */ lis r8, .rodata+0x7B8@ha -/* 000074C0 00014250 C9 8A 07 D0 */ lfd f12, .rodata+0x7D0@l(r10) -/* 000074C4 00014254 ED AD 08 28 */ fsubs f13, f13, f1 -/* 000074C8 00014258 C8 01 01 80 */ lfd f0, 0x180(r1) -/* 000074CC 0001425C FD 40 68 50 */ fneg f10, f13 -/* 000074D0 00014260 C1 68 07 B8 */ lfs f11, .rodata+0x7B8@l(r8) -/* 000074D4 00014264 FC 00 60 28 */ fsub f0, f0, f12 -/* 000074D8 00014268 FF 8A 6A EE */ fsel f28, f10, f11, f13 -/* 000074DC 0001426C FC 00 00 18 */ frsp f0, f0 -/* 000074E0 00014270 EF 3E 00 24 */ fdivs f25, f30, f0 -/* 000074E4 00014274 FF 00 58 90 */ fmr f24, f11 -/* 000074E8 00014278 FF A0 E0 90 */ fmr f29, f28 -/* 000074EC 0001427C FF 60 C8 90 */ fmr f27, f25 -.L_000074F0: -/* 000074F0 00014280 FC 1C C0 00 */ fcmpu cr0, f28, f24 -/* 000074F4 00014284 41 81 75 00 */ bgt .L_0000E9F4 -/* 000074F8 00014288 FF 60 C0 90 */ fmr f27, f24 -.L_000074FC: -/* 000074FC 0001428C 48 00 75 04 */ b .L_0000EA00 -/* 00007500 00014290 FF 00 C8 50 */ fneg f24, f25 -/* 00007504 00014294 81 61 01 70 */ lwz r11, 0x170(r1) -/* 00007508 00014298 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000750C 0001429C 80 09 00 9C */ lwz r0, 0x9c(r9) -/* 00007510 000142A0 A8 69 00 98 */ lha r3, 0x98(r9) -/* 00007514 000142A4 7C 08 03 A6 */ mtlr r0 -/* 00007518 000142A8 7C 6B 1A 14 */ add r3, r11, r3 -.L_0000751C: -/* 0000751C 000142AC 4E 80 00 21 */ blrl -/* 00007520 000142B0 7C 64 1B 78 */ mr r4, r3 -/* 00007524 000142B4 38 61 00 78 */ addi r3, r1, 0x78 -/* 00007528 000142B8 48 00 00 01 */ bl __Q26Attrib8InstanceRCQ26Attrib8Instance -/* 0000752C 000142BC 80 01 00 80 */ lwz r0, 0x80(r1) -/* 00007530 000142C0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00007534 000142C4 40 82 75 44 */ bne .L_0000EA78 -/* 00007538 000142C8 38 60 00 50 */ li r3, 0x50 -/* 0000753C 000142CC 48 00 00 01 */ bl DefaultDataArea__6AttribUi -/* 00007540 000142D0 90 61 00 80 */ stw r3, 0x80(r1) -/* 00007544 000142D4 3C 80 AF A2 */ lis r4, 0xafa2 -/* 00007548 000142D8 38 61 00 78 */ addi r3, r1, 0x78 -/* 0000754C 000142DC 60 84 10 F0 */ ori r4, r4, 0x10f0 -/* 00007550 000142E0 38 A0 00 00 */ li r5, 0x0 -/* 00007554 000142E4 48 00 00 01 */ bl GetAttributePointer__CQ26Attrib8InstanceUiUi -.L_00007558: -/* 00007558 000142E8 7C 63 1B 79 */ mr. r3, r3 -/* 0000755C 000142EC 40 82 75 68 */ bne .L_0000EAC4 -/* 00007560 000142F0 38 60 00 0C */ li r3, 0xc -/* 00007564 000142F4 48 00 00 01 */ bl DefaultDataArea__6AttribUi -.L_00007568: -/* 00007568 000142F8 7C 64 1B 78 */ mr r4, r3 -/* 0000756C 000142FC 38 A0 00 00 */ li r5, 0x0 -/* 00007570 00014300 38 61 00 90 */ addi r3, r1, 0x90 -/* 00007574 00014304 38 C0 00 00 */ li r6, 0x0 -/* 00007578 00014308 48 00 00 01 */ bl __Q26Attrib8InstanceRCQ26Attrib7RefSpecUiPQ33UTL3COM8IUnknown -/* 0000757C 0001430C 80 01 00 98 */ lwz r0, 0x98(r1) -/* 00007580 00014310 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00007584 00014314 40 82 75 94 */ bne .L_0000EB18 -/* 00007588 00014318 38 60 00 74 */ li r3, 0x74 -/* 0000758C 0001431C 48 00 00 01 */ bl DefaultDataArea__6AttribUi -/* 00007590 00014320 90 61 00 98 */ stw r3, 0x98(r1) -.L_00007594: -/* 00007594 00014324 7D C3 73 78 */ mr r3, r14 -/* 00007598 00014328 FC 20 F8 90 */ fmr f1, f31 -/* 0000759C 0001432C 48 00 00 01 */ bl AerodynamicDownforce__Q27Physics4InfoRCQ36Attrib3Gen7chassisf -.L_000075A0: -/* 000075A0 00014330 81 3A 00 04 */ lwz r9, 0x4(r26) -/* 000075A4 00014334 FF C0 08 50 */ fneg f30, f1 -/* 000075A8 00014338 80 09 01 34 */ lwz r0, 0x134(r9) -/* 000075AC 0001433C A8 69 01 30 */ lha r3, 0x130(r9) -/* 000075B0 00014340 7C 08 03 A6 */ mtlr r0 -/* 000075B4 00014344 7C 7A 1A 14 */ add r3, r26, r3 -/* 000075B8 00014348 4E 80 00 21 */ blrl -/* 000075BC 0001434C 81 36 00 04 */ lwz r9, 0x4(r22) -/* 000075C0 00014350 FF E0 08 90 */ fmr f31, f1 -/* 000075C4 00014354 80 09 00 3C */ lwz r0, 0x3c(r9) -/* 000075C8 00014358 A8 69 00 38 */ lha r3, 0x38(r9) -/* 000075CC 0001435C 7C 08 03 A6 */ mtlr r0 -.L_000075D0: -/* 000075D0 00014360 7C 76 1A 14 */ add r3, r22, r3 -/* 000075D4 00014364 4E 80 00 21 */ blrl -/* 000075D8 00014368 EF DE 08 24 */ fdivs f30, f30, f1 -/* 000075DC 0001436C 3D 20 00 00 */ lis r9, .rodata+0x7B8@ha -/* 000075E0 00014370 C3 49 07 B8 */ lfs f26, .rodata+0x7B8@l(r9) -/* 000075E4 00014374 D3 41 00 A8 */ stfs f26, 0xa8(r1) -/* 000075E8 00014378 EF FF F0 2A */ fadds f31, f31, f30 -/* 000075EC 0001437C D3 E1 00 AC */ stfs f31, 0xac(r1) -/* 000075F0 00014380 D3 57 00 08 */ stfs f26, 0x8(r23) -/* 000075F4 00014384 80 01 00 A8 */ lwz r0, 0xa8(r1) -/* 000075F8 00014388 81 21 00 AC */ lwz r9, 0xac(r1) -/* 000075FC 0001438C 81 61 00 B0 */ lwz r11, 0xb0(r1) -/* 00007600 00014390 90 01 00 18 */ stw r0, 0x18(r1) -/* 00007604 00014394 91 61 00 20 */ stw r11, 0x20(r1) -/* 00007608 00014398 91 21 00 1C */ stw r9, 0x1c(r1) -/* 0000760C 0001439C 81 36 00 04 */ lwz r9, 0x4(r22) -/* 00007610 000143A0 80 09 00 54 */ lwz r0, 0x54(r9) -/* 00007614 000143A4 A8 69 00 50 */ lha r3, 0x50(r9) -/* 00007618 000143A8 7C 08 03 A6 */ mtlr r0 -/* 0000761C 000143AC 7C 76 1A 14 */ add r3, r22, r3 -/* 00007620 000143B0 4E 80 00 21 */ blrl -/* 00007624 000143B4 3D 20 00 00 */ lis r9, .rodata+0x7C0@ha -/* 00007628 000143B8 7C 6B 1B 78 */ mr r11, r3 -/* 0000762C 000143BC C3 C9 07 C0 */ lfs f30, .rodata+0x7C0@l(r9) -/* 00007630 000143C0 38 A1 00 B8 */ addi r5, r1, 0xb8 -/* 00007634 000143C4 81 2B 00 00 */ lwz r9, 0x0(r11) -/* 00007638 000143C8 7E E3 BB 78 */ mr r3, r23 -/* 0000763C 000143CC 81 4B 00 08 */ lwz r10, 0x8(r11) -/* 00007640 000143D0 FC 20 F0 90 */ fmr f1, f30 -/* 00007644 000143D4 80 0B 00 04 */ lwz r0, 0x4(r11) -/* 00007648 000143D8 7E 84 A3 78 */ mr r4, r20 -/* 0000764C 000143DC 91 21 00 A8 */ stw r9, 0xa8(r1) -/* 00007650 000143E0 90 17 00 04 */ stw r0, 0x4(r23) -.L_00007654: -/* 00007654 000143E4 91 57 00 08 */ stw r10, 0x8(r23) -/* 00007658 000143E8 48 00 00 01 */ bl VU0_v3scaleadd__FRCQ25UMath7Vector3fT0RQ25UMath7Vector3 -/* 0000765C 000143EC C1 94 00 08 */ lfs f12, 0x8(r20) -/* 00007660 000143F0 3D 20 00 00 */ lis r9, .rodata+0x7BC@ha -/* 00007664 000143F4 C0 01 00 08 */ lfs f0, 0x8(r1) -/* 00007668 000143F8 3D 00 00 00 */ lis r8, _Q25UMath7Vector4.kIdentity@ha -/* 0000766C 000143FC C1 A1 00 0C */ lfs f13, 0xc(r1) -/* 00007670 00014400 3B A8 00 00 */ addi r29, r8, _Q25UMath7Vector4.kIdentity@l -/* 00007674 00014404 C1 69 07 BC */ lfs f11, .rodata+0x7BC@l(r9) -/* 00007678 00014408 38 80 00 00 */ li r4, 0x0 -/* 0000767C 0001440C D0 01 00 F8 */ stfs f0, 0xf8(r1) -/* 00007680 00014410 38 A0 00 20 */ li r5, 0x20 -/* 00007684 00014414 D1 A1 00 FC */ stfs f13, 0xfc(r1) -/* 00007688 00014418 38 61 01 28 */ addi r3, r1, 0x128 -/* 0000768C 0001441C D1 81 01 00 */ stfs f12, 0x100(r1) -.L_00007690: -/* 00007690 00014420 D1 71 00 0C */ stfs f11, 0xc(r17) -/* 00007694 00014424 81 41 00 F8 */ lwz r10, 0xf8(r1) -/* 00007698 00014428 80 01 00 FC */ lwz r0, 0xfc(r1) -/* 0000769C 0001442C 81 21 01 00 */ lwz r9, 0x100(r1) -/* 000076A0 00014430 81 61 01 04 */ lwz r11, 0x104(r1) -/* 000076A4 00014434 91 41 00 E8 */ stw r10, 0xe8(r1) -/* 000076A8 00014438 90 01 00 EC */ stw r0, 0xec(r1) -/* 000076AC 0001443C 91 21 00 F0 */ stw r9, 0xf0(r1) -/* 000076B0 00014440 91 61 00 F4 */ stw r11, 0xf4(r1) -/* 000076B4 00014444 80 19 00 04 */ lwz r0, 0x4(r25) -/* 000076B8 00014448 81 39 00 08 */ lwz r9, 0x8(r25) -/* 000076BC 0001444C 81 79 00 0C */ lwz r11, 0xc(r25) -/* 000076C0 00014450 91 41 00 C8 */ stw r10, 0xc8(r1) -/* 000076C4 00014454 90 15 00 04 */ stw r0, 0x4(r21) -/* 000076C8 00014458 91 35 00 08 */ stw r9, 0x8(r21) -/* 000076CC 0001445C 91 75 00 0C */ stw r11, 0xc(r21) -/* 000076D0 00014460 C0 01 00 B8 */ lfs f0, 0xb8(r1) -/* 000076D4 00014464 C1 A1 00 BC */ lfs f13, 0xbc(r1) -/* 000076D8 00014468 C1 81 00 C0 */ lfs f12, 0xc0(r1) -/* 000076DC 0001446C D0 01 00 F8 */ stfs f0, 0xf8(r1) -.L_000076E0: -/* 000076E0 00014470 D1 A1 00 FC */ stfs f13, 0xfc(r1) -.L_000076E4: -/* 000076E4 00014474 D1 81 01 00 */ stfs f12, 0x100(r1) -/* 000076E8 00014478 D1 71 00 0C */ stfs f11, 0xc(r17) -/* 000076EC 0001447C 80 E1 00 F8 */ lwz r7, 0xf8(r1) -/* 000076F0 00014480 80 01 00 FC */ lwz r0, 0xfc(r1) -/* 000076F4 00014484 81 21 01 00 */ lwz r9, 0x100(r1) -/* 000076F8 00014488 81 61 01 04 */ lwz r11, 0x104(r1) -/* 000076FC 0001448C 90 E1 00 E8 */ stw r7, 0xe8(r1) -/* 00007700 00014490 90 01 00 EC */ stw r0, 0xec(r1) -/* 00007704 00014494 91 21 00 F0 */ stw r9, 0xf0(r1) -/* 00007708 00014498 91 61 00 F4 */ stw r11, 0xf4(r1) -/* 0000770C 0001449C 83 C8 00 00 */ lwz r30, _Q25UMath7Vector4.kIdentity@l(r8) -/* 00007710 000144A0 81 79 00 0C */ lwz r11, 0xc(r25) -/* 00007714 000144A4 81 59 00 04 */ lwz r10, 0x4(r25) -/* 00007718 000144A8 81 19 00 08 */ lwz r8, 0x8(r25) -.L_0000771C: -/* 0000771C 000144AC 90 E1 00 D8 */ stw r7, 0xd8(r1) -/* 00007720 000144B0 80 DD 00 0C */ lwz r6, 0xc(r29) -/* 00007724 000144B4 80 1D 00 04 */ lwz r0, 0x4(r29) -/* 00007728 000144B8 81 3D 00 08 */ lwz r9, 0x8(r29) -/* 0000772C 000144BC 91 72 00 0C */ stw r11, 0xc(r18) -/* 00007730 000144C0 91 52 00 04 */ stw r10, 0x4(r18) -/* 00007734 000144C4 91 12 00 08 */ stw r8, 0x8(r18) -/* 00007738 000144C8 90 01 01 1C */ stw r0, 0x11c(r1) -/* 0000773C 000144CC 91 21 01 20 */ stw r9, 0x120(r1) -/* 00007740 000144D0 90 C1 01 24 */ stw r6, 0x124(r1) -/* 00007744 000144D4 90 01 01 0C */ stw r0, 0x10c(r1) -/* 00007748 000144D8 91 21 01 10 */ stw r9, 0x110(r1) -/* 0000774C 000144DC 90 C1 01 14 */ stw r6, 0x114(r1) -/* 00007750 000144E0 93 C1 01 18 */ stw r30, 0x118(r1) -/* 00007754 000144E4 93 C1 01 08 */ stw r30, 0x108(r1) -.L_00007758: -/* 00007758 000144E8 4C C6 31 82 */ crclr cr1eq -/* 0000775C 000144EC 48 00 00 01 */ bl memset -/* 00007760 000144F0 38 00 00 00 */ li r0, 0x0 -/* 00007764 000144F4 39 20 00 03 */ li r9, 0x3 -/* 00007768 000144F8 90 01 01 60 */ stw r0, 0x160(r1) -/* 0000776C 000144FC 7D E3 7B 78 */ mr r3, r15 -/* 00007770 00014500 90 01 01 48 */ stw r0, 0x148(r1) -/* 00007774 00014504 7E A4 AB 78 */ mr r4, r21 -.L_00007778: -/* 00007778 00014508 90 01 01 50 */ stw r0, 0x150(r1) -/* 0000777C 0001450C 38 C0 00 02 */ li r6, 0x2 -/* 00007780 00014510 98 01 01 58 */ stb r0, 0x158(r1) -/* 00007784 00014514 98 01 01 59 */ stb r0, 0x159(r1) -/* 00007788 00014518 B0 01 01 5A */ sth r0, 0x15a(r1) -/* 0000778C 0001451C 90 01 01 5C */ stw r0, 0x15c(r1) -/* 00007790 00014520 D3 41 01 4C */ stfs f26, 0x14c(r1) -/* 00007794 00014524 D3 41 01 54 */ stfs f26, 0x154(r1) -/* 00007798 00014528 80 A1 01 74 */ lwz r5, 0x174(r1) -/* 0000779C 0001452C 91 2F 00 04 */ stw r9, 0x4(r15) -/* 000077A0 00014530 48 00 00 01 */ bl CheckHitWorld__13WCollisionMgrPCQ25UMath7Vector4RQ213WCollisionMgr18WorldCollisionInfoUi -/* 000077A4 00014534 88 01 01 59 */ lbz r0, 0x159(r1) -/* 000077A8 00014538 39 20 00 01 */ li r9, 0x1 -/* 000077AC 0001453C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000077B0 00014540 40 82 77 B8 */ bne .L_0000EF68 -/* 000077B4 00014544 39 20 00 00 */ li r9, 0x0 -.L_000077B8: -/* 000077B8 00014548 2C 09 00 00 */ cmpwi r9, 0x0 -/* 000077BC 0001454C 41 82 77 E0 */ beq .L_0000EF9C -/* 000077C0 00014550 7D C3 73 78 */ mr r3, r14 -/* 000077C4 00014554 38 80 00 00 */ li r4, 0x0 -/* 000077C8 00014558 48 00 00 01 */ bl _._Q26Attrib8Instance -/* 000077CC 0001455C 80 61 01 78 */ lwz r3, 0x178(r1) -/* 000077D0 00014560 38 80 00 00 */ li r4, 0x0 -/* 000077D4 00014564 48 00 00 01 */ bl _._Q26Attrib8Instance -/* 000077D8 00014568 FC 20 D0 90 */ fmr f1, f26 -/* 000077DC 0001456C 48 00 79 3C */ b .L_0000F118 -/* 000077E0 00014570 81 21 01 68 */ lwz r9, 0x168(r1) -/* 000077E4 00014574 3B C0 00 01 */ li r30, 0x1 -.L_000077E8: -/* 000077E8 00014578 FF E0 D8 90 */ fmr f31, f27 -/* 000077EC 0001457C 7C 1E 80 00 */ cmpw r30, r16 -/* 000077F0 00014580 2F 89 00 00 */ cmpwi cr7, r9, 0x0 -/* 000077F4 00014584 81 21 01 6C */ lwz r9, 0x16c(r1) -.L_000077F8: -/* 000077F8 00014588 7F A0 00 26 */ mfcr r29 -/* 000077FC 0001458C 57 BD E0 06 */ slwi r29, r29, 28 -/* 00007800 00014590 2F 89 00 00 */ cmpwi cr7, r9, 0x0 -/* 00007804 00014594 7F 80 00 26 */ mfcr r28 -/* 00007808 00014598 57 9C E0 06 */ slwi r28, r28, 28 -/* 0000780C 0001459C 40 80 78 D8 */ bge .L_0000F0E4 -/* 00007810 000145A0 3D 20 00 00 */ lis r9, .rodata+0x7D0@ha -/* 00007814 000145A4 3F 60 43 30 */ lis r27, 0x4330 -/* 00007818 000145A8 CB 69 07 D0 */ lfd f27, .rodata+0x7D0@l(r9) -/* 0000781C 000145AC 3B E1 00 B8 */ addi r31, r1, 0xb8 -/* 00007820 000145B0 6F C0 80 00 */ xoris r0, r30, 0x8000 -/* 00007824 000145B4 90 01 01 84 */ stw r0, 0x184(r1) -/* 00007828 000145B8 38 61 00 18 */ addi r3, r1, 0x18 -/* 0000782C 000145BC 38 81 00 A8 */ addi r4, r1, 0xa8 -/* 00007830 000145C0 38 A1 00 B8 */ addi r5, r1, 0xb8 -/* 00007834 000145C4 93 61 01 80 */ stw r27, 0x180(r1) -/* 00007838 000145C8 C8 01 01 80 */ lfd f0, 0x180(r1) -/* 0000783C 000145CC FC 00 D8 28 */ fsub f0, f0, f27 -/* 00007840 000145D0 FC 00 00 18 */ frsp f0, f0 -/* 00007844 000145D4 EF F9 C0 38 */ fmsubs f31, f25, f0, f24 -/* 00007848 000145D8 EC 3F 07 B2 */ fmuls f1, f31, f30 -/* 0000784C 000145DC 48 00 00 01 */ bl VU0_v3scaleadd__FRCQ25UMath7Vector3fT0RQ25UMath7Vector3 -/* 00007850 000145E0 38 61 00 B8 */ addi r3, r1, 0xb8 -/* 00007854 000145E4 FC 20 F8 90 */ fmr f1, f31 -/* 00007858 000145E8 7C 65 1B 78 */ mr r5, r3 -/* 0000785C 000145EC 7E 84 A3 78 */ mr r4, r20 -/* 00007860 000145F0 48 00 00 01 */ bl VU0_v3scaleadd__FRCQ25UMath7Vector3fT0RQ25UMath7Vector3 -/* 00007864 000145F4 7F 03 C3 78 */ mr r3, r24 -/* 00007868 000145F8 7F E4 FB 78 */ mr r4, r31 -/* 0000786C 000145FC 7E 65 9B 78 */ mr r5, r19 -/* 00007870 00014600 38 C0 00 01 */ li r6, 0x1 -/* 00007874 00014604 38 E0 00 00 */ li r7, 0x0 -/* 00007878 00014608 39 00 00 01 */ li r8, 0x1 -/* 0000787C 0001460C 48 00 00 01 */ bl Update__9WWorldPosRCQ25UMath7Vector3RQ25UMath7Vector4bPC9WColliderT3 -/* 00007880 00014610 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00007884 00014614 41 82 78 CC */ beq .L_0000F150 -/* 00007888 00014618 80 01 00 68 */ lwz r0, 0x68(r1) -/* 0000788C 0001461C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00007890 00014620 40 80 78 CC */ bge .L_0000F15C -.L_00007894: -/* 00007894 00014624 C0 01 00 2C */ lfs f0, 0x2c(r1) -/* 00007898 00014628 FC 00 F0 00 */ fcmpu cr0, f0, f30 -/* 0000789C 0001462C 41 80 78 CC */ blt .L_0000F168 -/* 000078A0 00014630 7F 03 C3 78 */ mr r3, r24 -/* 000078A4 00014634 7F E4 FB 78 */ mr r4, r31 -/* 000078A8 00014638 48 00 00 01 */ bl HeightAtPoint__C9WWorldPosRCQ25UMath7Vector3 -.L_000078AC: -/* 000078AC 0001463C C0 01 00 BC */ lfs f0, 0xbc(r1) -/* 000078B0 00014640 ED A0 08 28 */ fsubs f13, f0, f1 -.L_000078B4: -/* 000078B4 00014644 FC 0D D0 00 */ fcmpu cr0, f13, f26 -/* 000078B8 00014648 4C 62 03 82 */ cror un, eq, lt -.L_000078BC: -/* 000078BC 0001464C 41 83 78 D8 */ bso .L_0000F194 -/* 000078C0 00014650 EC 1D 68 28 */ fsubs f0, f29, f13 -.L_000078C4: -/* 000078C4 00014654 FF A0 6F 6E */ fsel f29, f0, f29, f13 -/* 000078C8 00014658 EF 9C 68 2A */ fadds f28, f28, f13 -/* 000078CC 0001465C 3B DE 00 01 */ addi r30, r30, 0x1 -/* 000078D0 00014660 7C 1E 80 00 */ cmpw r30, r16 -/* 000078D4 00014664 41 80 78 20 */ blt .L_0000F0F4 -/* 000078D8 00014668 7F A8 01 20 */ mtcrf 128, r29 -/* 000078DC 0001466C 41 82 78 E8 */ beq .L_0000F1C4 -/* 000078E0 00014670 81 21 01 68 */ lwz r9, 0x168(r1) -/* 000078E4 00014674 D3 A9 00 00 */ stfs f29, 0x0(r9) -/* 000078E8 00014678 7F 88 01 20 */ mtcrf 128, r28 -/* 000078EC 0001467C 41 82 78 F8 */ beq .L_0000F1E4 -/* 000078F0 00014680 81 21 01 6C */ lwz r9, 0x16c(r1) -/* 000078F4 00014684 D3 E9 00 00 */ stfs f31, 0x0(r9) -/* 000078F8 00014688 6F C0 80 00 */ xoris r0, r30, 0x8000 -/* 000078FC 0001468C 90 01 01 84 */ stw r0, 0x184(r1) -/* 00007900 00014690 3D 60 43 30 */ lis r11, 0x4330 -/* 00007904 00014694 3D 40 00 00 */ lis r10, .rodata+0x7D0@ha -/* 00007908 00014698 7D C3 73 78 */ mr r3, r14 -/* 0000790C 0001469C 91 61 01 80 */ stw r11, 0x180(r1) -/* 00007910 000146A0 38 80 00 00 */ li r4, 0x0 -/* 00007914 000146A4 C8 0A 07 D0 */ lfd f0, .rodata+0x7D0@l(r10) -/* 00007918 000146A8 CB E1 01 80 */ lfd f31, 0x180(r1) -/* 0000791C 000146AC FF FF 00 28 */ fsub f31, f31, f0 -/* 00007920 000146B0 FF E0 F8 18 */ frsp f31, f31 -/* 00007924 000146B4 EF FC F8 24 */ fdivs f31, f28, f31 -/* 00007928 000146B8 48 00 00 01 */ bl _._Q26Attrib8Instance -/* 0000792C 000146BC 80 61 01 78 */ lwz r3, 0x178(r1) -/* 00007930 000146C0 38 80 00 00 */ li r4, 0x0 -/* 00007934 000146C4 48 00 00 01 */ bl _._Q26Attrib8Instance -/* 00007938 000146C8 FC 20 F8 90 */ fmr f1, f31 -/* 0000793C 000146CC 80 01 02 14 */ lwz r0, 0x214(r1) -/* 00007940 000146D0 7C 08 03 A6 */ mtlr r0 -/* 00007944 000146D4 B9 C1 01 88 */ lmw r14, 0x188(r1) -/* 00007948 000146D8 E3 01 01 D0 */ psq_l f24, 0x1d0(r1), 0, qr0 -/* 0000794C 000146DC E3 21 01 D8 */ psq_l f25, 0x1d8(r1), 0, qr0 -/* 00007950 000146E0 E3 41 01 E0 */ psq_l f26, 0x1e0(r1), 0, qr0 -.L_00007954: -/* 00007954 000146E4 E3 61 01 E8 */ psq_l f27, 0x1e8(r1), 0, qr0 -/* 00007958 000146E8 E3 81 01 F0 */ psq_l f28, 0x1f0(r1), 0, qr0 -.L_0000795C: -/* 0000795C 000146EC E3 A1 01 F8 */ psq_l f29, 0x1f8(r1), 0, qr0 -/* 00007960 000146F0 E3 C1 02 00 */ psq_l f30, 0x200(r1), 0, qr0 -/* 00007964 000146F4 E3 E1 02 08 */ psq_l f31, 0x208(r1), 0, qr0 -/* 00007968 000146F8 38 21 02 10 */ addi r1, r1, 0x210 -/* 0000796C 000146FC 4E 80 00 20 */ blr -.endfn AverageAir__FP8ISimablefPfT2 - -# .text:0x7970 | size: 0x2C -.fn MaybeKillJumpCam__8CameraAIUi, global -/* 00007970 00014700 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 00007974 00014704 7C 08 02 A6 */ mflr r0 -/* 00007978 00014708 90 01 00 0C */ stw r0, 0xc(r1) -/* 0000797C 0001470C 48 00 6E 59 */ bl .L_0000E7D4 -/* 00007980 00014710 7C 63 1B 79 */ mr. r3, r3 -.L_00007984: -/* 00007984 00014714 41 82 79 8C */ beq .L_0000F310 -/* 00007988 00014718 48 00 60 35 */ bl .L_0000D9BC -/* 0000798C 0001471C 80 01 00 0C */ lwz r0, 0xc(r1) -/* 00007990 00014720 7C 08 03 A6 */ mtlr r0 -.L_00007994: -/* 00007994 00014724 38 21 00 08 */ addi r1, r1, 0x8 -/* 00007998 00014728 4E 80 00 20 */ blr -.endfn MaybeKillJumpCam__8CameraAIUi - -# .text:0x799C | size: 0x6C -.fn Init__8CameraAIv, global -/* 0000799C 0001472C 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 000079A0 00014730 7C 08 02 A6 */ mflr r0 -/* 000079A4 00014734 BF 81 00 18 */ stmw r28, 0x18(r1) -/* 000079A8 00014738 90 01 00 2C */ stw r0, 0x2c(r1) -/* 000079AC 0001473C 3F C0 00 00 */ lis r30, gFastMem@ha -/* 000079B0 00014740 38 80 00 08 */ li r4, 0x8 -.L_000079B4: -/* 000079B4 00014744 3B DE 00 00 */ addi r30, r30, gFastMem@l -/* 000079B8 00014748 38 A0 00 00 */ li r5, 0x0 -/* 000079BC 0001474C 7F C3 F3 78 */ mr r3, r30 -/* 000079C0 00014750 3F 80 00 00 */ lis r28, TheAvoidables@ha -/* 000079C4 00014754 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 000079C8 00014758 7C 7D 1B 78 */ mr r29, r3 -/* 000079CC 0001475C 38 00 00 00 */ li r0, 0x0 -/* 000079D0 00014760 90 1D 00 04 */ stw r0, 0x4(r29) -/* 000079D4 00014764 7F C3 F3 78 */ mr r3, r30 -/* 000079D8 00014768 38 80 00 0C */ li r4, 0xc -/* 000079DC 0001476C 38 A0 00 00 */ li r5, 0x0 -/* 000079E0 00014770 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 000079E4 00014774 90 63 00 00 */ stw r3, 0x0(r3) -/* 000079E8 00014778 90 63 00 04 */ stw r3, 0x4(r3) -.L_000079EC: -/* 000079EC 0001477C 90 7D 00 04 */ stw r3, 0x4(r29) -/* 000079F0 00014780 93 BC 00 00 */ stw r29, TheAvoidables@l(r28) -.L_000079F4: -/* 000079F4 00014784 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 000079F8 00014788 7C 08 03 A6 */ mtlr r0 -/* 000079FC 0001478C BB 81 00 18 */ lmw r28, 0x18(r1) -/* 00007A00 00014790 38 21 00 28 */ addi r1, r1, 0x28 -/* 00007A04 00014794 4E 80 00 20 */ blr -.endfn Init__8CameraAIv - -# .text:0x7A08 | size: 0xEC -.fn Shutdown__8CameraAIv, global -/* 00007A08 00014798 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 00007A0C 0001479C 7C 08 02 A6 */ mflr r0 -/* 00007A10 000147A0 BF C1 00 20 */ stmw r30, 0x20(r1) -/* 00007A14 000147A4 90 01 00 2C */ stw r0, 0x2c(r1) -.L_00007A18: -/* 00007A18 000147A8 3D 20 00 00 */ lis r9, TheAvoidables@ha -/* 00007A1C 000147AC 83 E9 00 00 */ lwz r31, TheAvoidables@l(r9) -/* 00007A20 000147B0 2C 1F 00 00 */ cmpwi r31, 0x0 -.L_00007A24: -/* 00007A24 000147B4 41 82 7A 68 */ beq .L_0000F48C -/* 00007A28 000147B8 7F E3 FB 78 */ mr r3, r31 -/* 00007A2C 000147BC 48 00 00 01 */ bl clear__Q24_STLt10_List_base2ZP5IBodyZQ33UTL3Stdt9Allocator2ZP5IBodyZ24_type_CameraAIAvoidables -/* 00007A30 000147C0 80 9F 00 04 */ lwz r4, 0x4(r31) -/* 00007A34 000147C4 2C 04 00 00 */ cmpwi r4, 0x0 -/* 00007A38 000147C8 41 82 7A 50 */ beq .L_0000F488 -/* 00007A3C 000147CC 3C 60 00 00 */ lis r3, gFastMem@ha -.L_00007A40: -/* 00007A40 000147D0 38 A0 00 0C */ li r5, 0xc -/* 00007A44 000147D4 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 00007A48 000147D8 38 C0 00 00 */ li r6, 0x0 -/* 00007A4C 000147DC 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 00007A50 000147E0 3C 60 00 00 */ lis r3, gFastMem@ha -/* 00007A54 000147E4 7F E4 FB 78 */ mr r4, r31 -/* 00007A58 000147E8 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 00007A5C 000147EC 38 A0 00 08 */ li r5, 0x8 -/* 00007A60 000147F0 38 C0 00 00 */ li r6, 0x0 -/* 00007A64 000147F4 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 00007A68 000147F8 3D 20 00 00 */ lis r9, TheAvoidables@ha -/* 00007A6C 000147FC 38 00 00 00 */ li r0, 0x0 -/* 00007A70 00014800 3C 80 00 00 */ lis r4, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha -/* 00007A74 00014804 90 09 00 00 */ stw r0, TheAvoidables@l(r9) -/* 00007A78 00014808 38 84 00 00 */ addi r4, r4, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l -/* 00007A7C 0001480C 38 61 00 08 */ addi r3, r1, 0x8 -/* 00007A80 00014810 48 00 00 01 */ bl __Q43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4ListRCQ43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4List -/* 00007A84 00014814 83 E1 00 08 */ lwz r31, 0x8(r1) -/* 00007A88 00014818 3B C1 00 08 */ addi r30, r1, 0x8 -/* 00007A8C 0001481C 80 1E 00 08 */ lwz r0, 0x8(r30) -/* 00007A90 00014820 81 21 00 08 */ lwz r9, 0x8(r1) -/* 00007A94 00014824 54 00 10 3A */ slwi r0, r0, 2 -/* 00007A98 00014828 7D 29 02 14 */ add r9, r9, r0 -/* 00007A9C 0001482C 7C 1F 48 00 */ cmpw r31, r9 -/* 00007AA0 00014830 41 82 7A D4 */ beq .L_0000F574 -.L_00007AA4: -/* 00007AA4 00014834 81 7F 00 00 */ lwz r11, 0x0(r31) -/* 00007AA8 00014838 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00007AAC 0001483C 41 82 7A CC */ beq .L_0000F578 -/* 00007AB0 00014840 81 2B 02 C4 */ lwz r9, 0x2c4(r11) -/* 00007AB4 00014844 38 80 00 03 */ li r4, 0x3 -.L_00007AB8: -/* 00007AB8 00014848 A8 69 00 08 */ lha r3, 0x8(r9) -/* 00007ABC 0001484C 80 09 00 0C */ lwz r0, 0xc(r9) -/* 00007AC0 00014850 7C 6B 1A 14 */ add r3, r11, r3 -.L_00007AC4: -/* 00007AC4 00014854 7C 08 03 A6 */ mtlr r0 -/* 00007AC8 00014858 4E 80 00 21 */ blrl -/* 00007ACC 0001485C 3B FF 00 04 */ addi r31, r31, 0x4 -/* 00007AD0 00014860 48 00 7A 8C */ b .L_0000F55C -.L_00007AD4: -/* 00007AD4 00014864 38 61 00 08 */ addi r3, r1, 0x8 -/* 00007AD8 00014868 38 80 00 02 */ li r4, 0x2 -/* 00007ADC 0001486C 48 00 00 01 */ bl _._Q43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4List -/* 00007AE0 00014870 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 00007AE4 00014874 7C 08 03 A6 */ mtlr r0 -/* 00007AE8 00014878 BB C1 00 20 */ lmw r30, 0x20(r1) -/* 00007AEC 0001487C 38 21 00 28 */ addi r1, r1, 0x28 -/* 00007AF0 00014880 4E 80 00 20 */ blr -.endfn Shutdown__8CameraAIv - -# .text:0x7AF4 | size: 0xB8 -.fn AddAvoidable__8CameraAIP5IBody, global -/* 00007AF4 00014884 94 21 FF C0 */ stwu r1, -0x40(r1) -/* 00007AF8 00014888 7C 08 02 A6 */ mflr r0 -.L_00007AFC: -/* 00007AFC 0001488C BF C1 00 38 */ stmw r30, 0x38(r1) -/* 00007B00 00014890 90 01 00 44 */ stw r0, 0x44(r1) -/* 00007B04 00014894 3F C0 00 00 */ lis r30, TheAvoidables@ha -/* 00007B08 00014898 90 61 00 30 */ stw r3, 0x30(r1) -/* 00007B0C 0001489C 81 7E 00 00 */ lwz r11, TheAvoidables@l(r30) -/* 00007B10 000148A0 38 61 00 08 */ addi r3, r1, 0x8 -/* 00007B14 000148A4 38 81 00 10 */ addi r4, r1, 0x10 -/* 00007B18 000148A8 38 A1 00 18 */ addi r5, r1, 0x18 -/* 00007B1C 000148AC 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 00007B20 000148B0 38 C1 00 30 */ addi r6, r1, 0x30 -/* 00007B24 000148B4 80 09 00 00 */ lwz r0, 0x0(r9) -/* 00007B28 000148B8 90 01 00 10 */ stw r0, 0x10(r1) -/* 00007B2C 000148BC 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 00007B30 000148C0 91 21 00 18 */ stw r9, 0x18(r1) -/* 00007B34 000148C4 48 00 00 01 */ bl find__H2ZQ24_STLt14_List_iterator2ZP5IBodyZQ24_STLt16_Nonconst_traits1ZP5IBodyZP5IBody_4_STLX01X01RCX11_X01 -/* 00007B38 000148C8 81 7E 00 00 */ lwz r11, TheAvoidables@l(r30) -/* 00007B3C 000148CC 81 21 00 08 */ lwz r9, 0x8(r1) -/* 00007B40 000148D0 80 0B 00 04 */ lwz r0, 0x4(r11) -/* 00007B44 000148D4 7C 09 00 00 */ cmpw r9, r0 -/* 00007B48 000148D8 90 01 00 10 */ stw r0, 0x10(r1) -/* 00007B4C 000148DC 40 82 7B 98 */ bne .L_0000F6E4 -/* 00007B50 000148E0 80 0B 00 04 */ lwz r0, 0x4(r11) -/* 00007B54 000148E4 3C 60 00 00 */ lis r3, gFastMem@ha -/* 00007B58 000148E8 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 00007B5C 000148EC 38 80 00 0C */ li r4, 0xc -/* 00007B60 000148F0 90 01 00 28 */ stw r0, 0x28(r1) -.L_00007B64: -/* 00007B64 000148F4 38 A0 00 00 */ li r5, 0x0 -/* 00007B68 000148F8 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 00007B6C 000148FC 2C 03 FF F8 */ cmpwi r3, -0x8 -/* 00007B70 00014900 41 82 7B 7C */ beq .L_0000F6EC -/* 00007B74 00014904 80 01 00 30 */ lwz r0, 0x30(r1) -/* 00007B78 00014908 90 03 00 08 */ stw r0, 0x8(r3) -/* 00007B7C 0001490C 81 21 00 28 */ lwz r9, 0x28(r1) -/* 00007B80 00014910 81 69 00 04 */ lwz r11, 0x4(r9) -/* 00007B84 00014914 91 23 00 00 */ stw r9, 0x0(r3) -/* 00007B88 00014918 91 63 00 04 */ stw r11, 0x4(r3) -/* 00007B8C 0001491C 90 6B 00 00 */ stw r3, 0x0(r11) -/* 00007B90 00014920 90 69 00 04 */ stw r3, 0x4(r9) -/* 00007B94 00014924 90 61 00 20 */ stw r3, 0x20(r1) -/* 00007B98 00014928 80 01 00 44 */ lwz r0, 0x44(r1) -/* 00007B9C 0001492C 7C 08 03 A6 */ mtlr r0 -/* 00007BA0 00014930 BB C1 00 38 */ lmw r30, 0x38(r1) -/* 00007BA4 00014934 38 21 00 40 */ addi r1, r1, 0x40 -/* 00007BA8 00014938 4E 80 00 20 */ blr -.endfn AddAvoidable__8CameraAIP5IBody - -# .text:0x7BAC | size: 0xB4 -.fn RemoveAvoidable__8CameraAIP5IBody, global -/* 00007BAC 0001493C 94 21 FF C0 */ stwu r1, -0x40(r1) -/* 00007BB0 00014940 7C 08 02 A6 */ mflr r0 -/* 00007BB4 00014944 BF C1 00 38 */ stmw r30, 0x38(r1) -/* 00007BB8 00014948 90 01 00 44 */ stw r0, 0x44(r1) -/* 00007BBC 0001494C 3F C0 00 00 */ lis r30, TheAvoidables@ha -/* 00007BC0 00014950 90 61 00 30 */ stw r3, 0x30(r1) -/* 00007BC4 00014954 81 7E 00 00 */ lwz r11, TheAvoidables@l(r30) -/* 00007BC8 00014958 38 81 00 10 */ addi r4, r1, 0x10 -.L_00007BCC: -/* 00007BCC 0001495C 38 61 00 08 */ addi r3, r1, 0x8 -/* 00007BD0 00014960 38 A1 00 18 */ addi r5, r1, 0x18 -/* 00007BD4 00014964 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 00007BD8 00014968 38 C1 00 30 */ addi r6, r1, 0x30 -/* 00007BDC 0001496C 80 09 00 00 */ lwz r0, 0x0(r9) -/* 00007BE0 00014970 90 01 00 10 */ stw r0, 0x10(r1) -.L_00007BE4: -/* 00007BE4 00014974 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 00007BE8 00014978 91 21 00 18 */ stw r9, 0x18(r1) -.L_00007BEC: -/* 00007BEC 0001497C 48 00 00 01 */ bl find__H2ZQ24_STLt14_List_iterator2ZP5IBodyZQ24_STLt16_Nonconst_traits1ZP5IBodyZP5IBody_4_STLX01X01RCX11_X01 -/* 00007BF0 00014980 81 3E 00 00 */ lwz r9, TheAvoidables@l(r30) -/* 00007BF4 00014984 39 60 00 01 */ li r11, 0x1 -/* 00007BF8 00014988 80 81 00 08 */ lwz r4, 0x8(r1) -/* 00007BFC 0001498C 80 09 00 04 */ lwz r0, 0x4(r9) -/* 00007C00 00014990 7C 04 00 00 */ cmpw r4, r0 -/* 00007C04 00014994 90 01 00 10 */ stw r0, 0x10(r1) -/* 00007C08 00014998 40 82 7C 10 */ bne .L_0000F818 -/* 00007C0C 0001499C 39 60 00 00 */ li r11, 0x0 -/* 00007C10 000149A0 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00007C14 000149A4 41 82 7C 4C */ beq .L_0000F860 -/* 00007C18 000149A8 90 81 00 28 */ stw r4, 0x28(r1) -/* 00007C1C 000149AC 2C 04 00 00 */ cmpwi r4, 0x0 -/* 00007C20 000149B0 83 C4 00 00 */ lwz r30, 0x0(r4) -.L_00007C24: -/* 00007C24 000149B4 81 24 00 04 */ lwz r9, 0x4(r4) -/* 00007C28 000149B8 93 C9 00 00 */ stw r30, 0x0(r9) -/* 00007C2C 000149BC 91 3E 00 04 */ stw r9, 0x4(r30) -/* 00007C30 000149C0 41 82 7C 48 */ beq .L_0000F878 -/* 00007C34 000149C4 3C 60 00 00 */ lis r3, gFastMem@ha -/* 00007C38 000149C8 38 A0 00 0C */ li r5, 0xc -/* 00007C3C 000149CC 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 00007C40 000149D0 38 C0 00 00 */ li r6, 0x0 -/* 00007C44 000149D4 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 00007C48 000149D8 93 C1 00 20 */ stw r30, 0x20(r1) -/* 00007C4C 000149DC 80 01 00 44 */ lwz r0, 0x44(r1) -/* 00007C50 000149E0 7C 08 03 A6 */ mtlr r0 -/* 00007C54 000149E4 BB C1 00 38 */ lmw r30, 0x38(r1) -/* 00007C58 000149E8 38 21 00 40 */ addi r1, r1, 0x40 -/* 00007C5C 000149EC 4E 80 00 20 */ blr -.endfn RemoveAvoidable__8CameraAIP5IBody - -# .text:0x7C60 | size: 0xFC -.fn StartCinematicSlowdown__8CameraAI8EVIEW_IDf, global -/* 00007C60 000149F0 94 21 FF C0 */ stwu r1, -0x40(r1) -/* 00007C64 000149F4 7C 08 02 A6 */ mflr r0 -/* 00007C68 000149F8 F3 E1 00 38 */ psq_st f31, 0x38(r1), 0, qr0 -/* 00007C6C 000149FC BF 01 00 18 */ stmw r24, 0x18(r1) -.L_00007C70: -/* 00007C70 00014A00 90 01 00 44 */ stw r0, 0x44(r1) -/* 00007C74 00014A04 3D 60 00 00 */ lis r11, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha -/* 00007C78 00014A08 3F 60 00 00 */ lis r27, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha -/* 00007C7C 00014A0C 3D 20 00 00 */ lis r9, .rodata+0x74C@ha -/* 00007C80 00014A10 83 AB 00 00 */ lwz r29, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r11) -/* 00007C84 00014A14 3B 89 07 4C */ addi r28, r9, .rodata+0x74C@l -.L_00007C88: -/* 00007C88 00014A18 3B 1B 00 00 */ addi r24, r27, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l -/* 00007C8C 00014A1C 7C 79 1B 78 */ mr r25, r3 -/* 00007C90 00014A20 FF E0 08 90 */ fmr f31, f1 -/* 00007C94 00014A24 3B 41 00 08 */ addi r26, r1, 0x8 -/* 00007C98 00014A28 80 18 00 08 */ lwz r0, 0x8(r24) -.L_00007C9C: -/* 00007C9C 00014A2C 81 3B 00 00 */ lwz r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r27) -/* 00007CA0 00014A30 54 00 10 3A */ slwi r0, r0, 2 -/* 00007CA4 00014A34 7D 29 02 14 */ add r9, r9, r0 -/* 00007CA8 00014A38 7C 1D 48 00 */ cmpw r29, r9 -/* 00007CAC 00014A3C 41 82 7D 44 */ beq .L_0000F9F0 -/* 00007CB0 00014A40 83 DD 00 00 */ lwz r30, 0x0(r29) -/* 00007CB4 00014A44 80 1E 00 04 */ lwz r0, 0x4(r30) -/* 00007CB8 00014A48 7C 00 C8 00 */ cmpw r0, r25 -/* 00007CBC 00014A4C 40 82 7D 3C */ bne .L_0000F9F8 -/* 00007CC0 00014A50 81 7E 00 18 */ lwz r11, 0x18(r30) -/* 00007CC4 00014A54 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00007CC8 00014A58 41 82 7D 3C */ beq .L_0000FA04 -/* 00007CCC 00014A5C 81 2B 00 14 */ lwz r9, 0x14(r11) -/* 00007CD0 00014A60 80 09 00 24 */ lwz r0, 0x24(r9) -/* 00007CD4 00014A64 A8 69 00 20 */ lha r3, 0x20(r9) -/* 00007CD8 00014A68 7C 08 03 A6 */ mtlr r0 -/* 00007CDC 00014A6C 7C 6B 1A 14 */ add r3, r11, r3 -/* 00007CE0 00014A70 4E 80 00 21 */ blrl -/* 00007CE4 00014A74 7C 7F 1B 78 */ mr r31, r3 -/* 00007CE8 00014A78 7F 83 E3 78 */ mr r3, r28 -/* 00007CEC 00014A7C 48 00 00 01 */ bl StringHash64__6AttribPCc -/* 00007CF0 00014A80 90 61 00 08 */ stw r3, 0x8(r1) -/* 00007CF4 00014A84 90 81 00 0C */ stw r4, 0xc(r1) -/* 00007CF8 00014A88 7F 83 E3 78 */ mr r3, r28 -/* 00007CFC 00014A8C 48 00 00 01 */ bl StringHash32__6AttribPCc -/* 00007D00 00014A90 90 7A 00 08 */ stw r3, 0x8(r26) -/* 00007D04 00014A94 93 81 00 14 */ stw r28, 0x14(r1) -/* 00007D08 00014A98 38 60 00 00 */ li r3, 0x0 -.L_00007D0C: -/* 00007D0C 00014A9C 81 21 00 08 */ lwz r9, 0x8(r1) -/* 00007D10 00014AA0 80 1F 00 00 */ lwz r0, 0x0(r31) -/* 00007D14 00014AA4 7C 00 48 00 */ cmpw r0, r9 -/* 00007D18 00014AA8 40 82 7D 30 */ bne .L_0000FA48 -/* 00007D1C 00014AAC 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 00007D20 00014AB0 80 01 00 0C */ lwz r0, 0xc(r1) -/* 00007D24 00014AB4 7D 23 02 78 */ xor r3, r9, r0 -/* 00007D28 00014AB8 21 63 00 00 */ subfic r11, r3, 0x0 -/* 00007D2C 00014ABC 7C 6B 19 14 */ adde r3, r11, r3 -/* 00007D30 00014AC0 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00007D34 00014AC4 41 82 7D 3C */ beq .L_0000FA70 -/* 00007D38 00014AC8 D3 FE 02 C0 */ stfs f31, 0x2c0(r30) -/* 00007D3C 00014ACC 3B BD 00 04 */ addi r29, r29, 0x4 -/* 00007D40 00014AD0 48 00 7C 98 */ b .L_0000F9D8 -/* 00007D44 00014AD4 80 01 00 44 */ lwz r0, 0x44(r1) -/* 00007D48 00014AD8 7C 08 03 A6 */ mtlr r0 -/* 00007D4C 00014ADC BB 01 00 18 */ lmw r24, 0x18(r1) -/* 00007D50 00014AE0 E3 E1 00 38 */ psq_l f31, 0x38(r1), 0, qr0 -/* 00007D54 00014AE4 38 21 00 40 */ addi r1, r1, 0x40 -/* 00007D58 00014AE8 4E 80 00 20 */ blr -.endfn StartCinematicSlowdown__8CameraAI8EVIEW_IDf - -# .text:0x7D5C | size: 0x94 -.fn MaybeDoTotaledCam__8CameraAIP7IPlayer, global -/* 00007D5C 00014AEC 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 00007D60 00014AF0 7C 08 02 A6 */ mflr r0 -/* 00007D64 00014AF4 BF 41 00 08 */ stmw r26, 0x8(r1) -/* 00007D68 00014AF8 90 01 00 24 */ stw r0, 0x24(r1) -.L_00007D6C: -/* 00007D6C 00014AFC 7C 7C 1B 78 */ mr r28, r3 -.L_00007D70: -/* 00007D70 00014B00 48 00 00 01 */ bl GetUserMode__3Simv -/* 00007D74 00014B04 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00007D78 00014B08 40 82 7D DC */ bne .L_0000FB54 -/* 00007D7C 00014B0C 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha -/* 00007D80 00014B10 3F 60 00 00 */ lis r27, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@ha -/* 00007D84 00014B14 83 A9 00 00 */ lwz r29, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r9) -/* 00007D88 00014B18 3B 5B 00 00 */ addi r26, r27, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l -/* 00007D8C 00014B1C 80 1A 00 08 */ lwz r0, 0x8(r26) -/* 00007D90 00014B20 81 3B 00 00 */ lwz r9, _Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable@l(r27) -/* 00007D94 00014B24 54 00 10 3A */ slwi r0, r0, 2 -/* 00007D98 00014B28 7D 29 02 14 */ add r9, r9, r0 -/* 00007D9C 00014B2C 7C 1D 48 00 */ cmpw r29, r9 -/* 00007DA0 00014B30 41 82 7D DC */ beq .L_0000FB7C -/* 00007DA4 00014B34 81 3C 00 04 */ lwz r9, 0x4(r28) -/* 00007DA8 00014B38 83 FD 00 00 */ lwz r31, 0x0(r29) -/* 00007DAC 00014B3C A8 69 00 60 */ lha r3, 0x60(r9) -/* 00007DB0 00014B40 80 09 00 64 */ lwz r0, 0x64(r9) -/* 00007DB4 00014B44 7C 7C 1A 14 */ add r3, r28, r3 -/* 00007DB8 00014B48 83 DF 00 04 */ lwz r30, 0x4(r31) -/* 00007DBC 00014B4C 7C 08 03 A6 */ mtlr r0 -/* 00007DC0 00014B50 4E 80 00 21 */ blrl -/* 00007DC4 00014B54 7C 1E 18 00 */ cmpw r30, r3 -.L_00007DC8: -/* 00007DC8 00014B58 40 82 7D D4 */ bne .L_0000FB9C -/* 00007DCC 00014B5C 7F E3 FB 78 */ mr r3, r31 -/* 00007DD0 00014B60 48 00 6B 2D */ bl .L_0000E8FC -/* 00007DD4 00014B64 3B BD 00 04 */ addi r29, r29, 0x4 -/* 00007DD8 00014B68 48 00 7D 8C */ b .L_0000FB64 -/* 00007DDC 00014B6C 80 01 00 24 */ lwz r0, 0x24(r1) -/* 00007DE0 00014B70 7C 08 03 A6 */ mtlr r0 -/* 00007DE4 00014B74 BB 41 00 08 */ lmw r26, 0x8(r1) -/* 00007DE8 00014B78 38 21 00 20 */ addi r1, r1, 0x20 -/* 00007DEC 00014B7C 4E 80 00 20 */ blr -.endfn MaybeDoTotaledCam__8CameraAIP7IPlayer - -# .text:0x7DF0 | size: 0x114 -.fn MaybeDoPursuitCam__8CameraAIP8IVehicle, global -/* 00007DF0 00014B80 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00007DF4 00014B84 7C 08 02 A6 */ mflr r0 -/* 00007DF8 00014B88 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 00007DFC 00014B8C 90 01 00 14 */ stw r0, 0x14(r1) -/* 00007E00 00014B90 3D 20 00 00 */ lis r9, TheICEManager+0x28@ha -/* 00007E04 00014B94 7C 7F 1B 78 */ mr r31, r3 -.L_00007E08: -/* 00007E08 00014B98 80 09 00 28 */ lwz r0, TheICEManager+0x28@l(r9) -/* 00007E0C 00014B9C 39 20 00 01 */ li r9, 0x1 -/* 00007E10 00014BA0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00007E14 00014BA4 41 81 7E 1C */ bgt .L_0000FC30 -/* 00007E18 00014BA8 39 20 00 00 */ li r9, 0x0 -/* 00007E1C 00014BAC 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00007E20 00014BB0 40 82 7E F0 */ bne .L_0000FD10 -/* 00007E24 00014BB4 48 00 6F 11 */ bl .L_0000ED34 -/* 00007E28 00014BB8 2C 03 00 00 */ cmpwi r3, 0x0 -.L_00007E2C: -/* 00007E2C 00014BBC 41 82 7E F0 */ beq .L_0000FD1C -/* 00007E30 00014BC0 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@ha -/* 00007E34 00014BC4 80 09 00 00 */ lwz r0, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@l(r9) -/* 00007E38 00014BC8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00007E3C 00014BCC 40 82 7E F0 */ bne .L_0000FD2C -/* 00007E40 00014BD0 3F C0 00 00 */ lis r30, _11GRaceStatus.fObj@ha -/* 00007E44 00014BD4 81 3E 00 00 */ lwz r9, _11GRaceStatus.fObj@l(r30) -/* 00007E48 00014BD8 80 69 1A AC */ lwz r3, 0x1aac(r9) -/* 00007E4C 00014BDC 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00007E50 00014BE0 41 82 7E 78 */ beq .L_0000FCC8 -/* 00007E54 00014BE4 48 00 00 01 */ bl GetIsPursuitRace__C15GRaceParameters -/* 00007E58 00014BE8 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00007E5C 00014BEC 40 82 7E F0 */ bne .L_0000FD4C -/* 00007E60 00014BF0 80 7E 00 00 */ lwz r3, _11GRaceStatus.fObj@l(r30) -/* 00007E64 00014BF4 48 00 00 01 */ bl GetRaceTimeElapsed__C11GRaceStatus -/* 00007E68 00014BF8 3D 20 00 00 */ lis r9, .rodata+0x7D8@ha -/* 00007E6C 00014BFC C0 09 07 D8 */ lfs f0, .rodata+0x7D8@l(r9) -.L_00007E70: -/* 00007E70 00014C00 FC 01 00 00 */ fcmpu cr0, f1, f0 -/* 00007E74 00014C04 41 80 7E F0 */ blt .L_0000FD64 -/* 00007E78 00014C08 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 00007E7C 00014C0C A8 69 00 68 */ lha r3, 0x68(r9) -/* 00007E80 00014C10 80 09 00 6C */ lwz r0, 0x6c(r9) -.L_00007E84: -/* 00007E84 00014C14 7C 7F 1A 14 */ add r3, r31, r3 -/* 00007E88 00014C18 7C 08 03 A6 */ mtlr r0 -/* 00007E8C 00014C1C 4E 80 00 21 */ blrl -/* 00007E90 00014C20 2C 03 00 01 */ cmpwi r3, 0x1 -/* 00007E94 00014C24 41 82 7E F0 */ beq .L_0000FD84 -/* 00007E98 00014C28 81 3F 00 04 */ lwz r9, 0x4(r31) -.L_00007E9C: -/* 00007E9C 00014C2C A8 69 00 18 */ lha r3, 0x18(r9) -/* 00007EA0 00014C30 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 00007EA4 00014C34 7C 7F 1A 14 */ add r3, r31, r3 -/* 00007EA8 00014C38 7C 08 03 A6 */ mtlr r0 -/* 00007EAC 00014C3C 4E 80 00 21 */ blrl -/* 00007EB0 00014C40 7C 6B 1B 79 */ mr. r11, r3 -/* 00007EB4 00014C44 41 82 7E F0 */ beq .L_0000FDA4 -/* 00007EB8 00014C48 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 00007EBC 00014C4C A8 69 00 E8 */ lha r3, 0xe8(r9) -/* 00007EC0 00014C50 80 09 00 EC */ lwz r0, 0xec(r9) -/* 00007EC4 00014C54 7C 6B 1A 14 */ add r3, r11, r3 -/* 00007EC8 00014C58 7C 08 03 A6 */ mtlr r0 -/* 00007ECC 00014C5C 4E 80 00 21 */ blrl -/* 00007ED0 00014C60 48 00 6E 59 */ bl .L_0000ED28 -/* 00007ED4 00014C64 7C 63 1B 79 */ mr. r3, r3 -/* 00007ED8 00014C68 41 82 7E F0 */ beq .L_0000FDC8 -/* 00007EDC 00014C6C 3D 20 00 00 */ lis r9, gGameBreakerCamera@ha -/* 00007EE0 00014C70 80 09 00 00 */ lwz r0, gGameBreakerCamera@l(r9) -/* 00007EE4 00014C74 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00007EE8 00014C78 40 82 7E F0 */ bne .L_0000FDD8 -/* 00007EEC 00014C7C 48 00 6B D9 */ bl .L_0000EAC4 -/* 00007EF0 00014C80 80 01 00 14 */ lwz r0, 0x14(r1) -/* 00007EF4 00014C84 7C 08 03 A6 */ mtlr r0 -/* 00007EF8 00014C88 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 00007EFC 00014C8C 38 21 00 10 */ addi r1, r1, 0x10 -/* 00007F00 00014C90 4E 80 00 20 */ blr -.endfn MaybeDoPursuitCam__8CameraAIP8IVehicle - -# .text:0x7F04 | size: 0x3D0 -.fn MaybeDoJumpCam__8CameraAIP8ISimable, global -/* 00007F04 00014C94 94 21 FF 18 */ stwu r1, -0xe8(r1) -.L_00007F08: -/* 00007F08 00014C98 7C 08 02 A6 */ mflr r0 -/* 00007F0C 00014C9C F3 A1 00 D0 */ psq_st f29, 0xd0(r1), 0, qr0 -/* 00007F10 00014CA0 F3 C1 00 D8 */ psq_st f30, 0xd8(r1), 0, qr0 -/* 00007F14 00014CA4 F3 E1 00 E0 */ psq_st f31, 0xe0(r1), 0, qr0 -/* 00007F18 00014CA8 BF 21 00 B4 */ stmw r25, 0xb4(r1) -/* 00007F1C 00014CAC 90 01 00 EC */ stw r0, 0xec(r1) -/* 00007F20 00014CB0 3D 20 00 00 */ lis r9, TheICEManager+0x28@ha -/* 00007F24 00014CB4 7C 7D 1B 78 */ mr r29, r3 -/* 00007F28 00014CB8 80 09 00 28 */ lwz r0, TheICEManager+0x28@l(r9) -/* 00007F2C 00014CBC 39 20 00 01 */ li r9, 0x1 -/* 00007F30 00014CC0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00007F34 00014CC4 41 81 7F 3C */ bgt .L_0000FE70 -/* 00007F38 00014CC8 39 20 00 00 */ li r9, 0x0 -.L_00007F3C: -/* 00007F3C 00014CCC 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00007F40 00014CD0 40 82 82 B4 */ bne .L_000001F4 -/* 00007F44 00014CD4 48 00 6F 11 */ bl .L_0000EE54 -/* 00007F48 00014CD8 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00007F4C 00014CDC 41 82 82 B4 */ beq .L_00000200 -/* 00007F50 00014CE0 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@ha -/* 00007F54 00014CE4 80 09 00 00 */ lwz r0, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@l(r9) -/* 00007F58 00014CE8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00007F5C 00014CEC 40 82 82 B4 */ bne .L_00000210 -/* 00007F60 00014CF0 3C 80 00 00 */ lis r4, _IHandle__8IVehicle@ha -/* 00007F64 00014CF4 80 7D 00 00 */ lwz r3, 0x0(r29) -/* 00007F68 00014CF8 38 84 00 00 */ addi r4, r4, _IHandle__8IVehicle@l -/* 00007F6C 00014CFC 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 00007F70 00014D00 7C 6B 1B 79 */ mr. r11, r3 -/* 00007F74 00014D04 38 00 00 01 */ li r0, 0x1 -/* 00007F78 00014D08 40 82 7F 80 */ bne .L_0000FEF8 -/* 00007F7C 00014D0C 38 00 00 00 */ li r0, 0x0 -/* 00007F80 00014D10 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00007F84 00014D14 41 82 7F A8 */ beq .L_0000FF2C -/* 00007F88 00014D18 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 00007F8C 00014D1C A8 69 00 68 */ lha r3, 0x68(r9) -/* 00007F90 00014D20 80 09 00 6C */ lwz r0, 0x6c(r9) -/* 00007F94 00014D24 7C 6B 1A 14 */ add r3, r11, r3 -/* 00007F98 00014D28 7C 08 03 A6 */ mtlr r0 -/* 00007F9C 00014D2C 4E 80 00 21 */ blrl -/* 00007FA0 00014D30 2C 03 00 01 */ cmpwi r3, 0x1 -/* 00007FA4 00014D34 41 82 82 B4 */ beq .L_00000258 -/* 00007FA8 00014D38 81 3D 00 04 */ lwz r9, 0x4(r29) -/* 00007FAC 00014D3C A8 69 00 E8 */ lha r3, 0xe8(r9) -/* 00007FB0 00014D40 80 09 00 EC */ lwz r0, 0xec(r9) -/* 00007FB4 00014D44 7C 7D 1A 14 */ add r3, r29, r3 -/* 00007FB8 00014D48 7C 08 03 A6 */ mtlr r0 -/* 00007FBC 00014D4C 4E 80 00 21 */ blrl -/* 00007FC0 00014D50 48 00 6E 59 */ bl .L_0000EE18 -/* 00007FC4 00014D54 7C 7C 1B 79 */ mr. r28, r3 -/* 00007FC8 00014D58 41 82 82 B4 */ beq .L_0000027C -/* 00007FCC 00014D5C 3D 20 00 00 */ lis r9, .rodata+0x7F0@ha -.L_00007FD0: -/* 00007FD0 00014D60 C0 1C 02 B8 */ lfs f0, 0x2b8(r28) -/* 00007FD4 00014D64 C3 E9 07 F0 */ lfs f31, .rodata+0x7F0@l(r9) -/* 00007FD8 00014D68 FC 00 F8 00 */ fcmpu cr0, f0, f31 -.L_00007FDC: -/* 00007FDC 00014D6C 41 81 82 B4 */ bgt .L_00000290 -/* 00007FE0 00014D70 3D 20 00 00 */ lis r9, gGameBreakerCamera@ha -/* 00007FE4 00014D74 83 E9 00 00 */ lwz r31, gGameBreakerCamera@l(r9) -/* 00007FE8 00014D78 2C 1F 00 00 */ cmpwi r31, 0x0 -/* 00007FEC 00014D7C 40 82 82 B4 */ bne .L_000002A0 -/* 00007FF0 00014D80 81 3D 00 04 */ lwz r9, 0x4(r29) -/* 00007FF4 00014D84 38 81 00 08 */ addi r4, r1, 0x8 -/* 00007FF8 00014D88 A8 69 00 D8 */ lha r3, 0xd8(r9) -/* 00007FFC 00014D8C 80 09 00 DC */ lwz r0, 0xdc(r9) -/* 00008000 00014D90 7C 7D 1A 14 */ add r3, r29, r3 -.L_00008004: -/* 00008004 00014D94 7C 08 03 A6 */ mtlr r0 -/* 00008008 00014D98 4E 80 00 21 */ blrl -/* 0000800C 00014D9C 38 61 00 08 */ addi r3, r1, 0x8 -/* 00008010 00014DA0 48 00 00 01 */ bl VU0_v3lengthsquare__FRCQ25UMath7Vector3 -/* 00008014 00014DA4 48 00 00 01 */ bl VU0_sqrt__Ff -/* 00008018 00014DA8 3D 20 00 00 */ lis r9, .rodata+0x7F4@ha -/* 0000801C 00014DAC FF A0 08 90 */ fmr f29, f1 -/* 00008020 00014DB0 C0 09 07 F4 */ lfs f0, .rodata+0x7F4@l(r9) -/* 00008024 00014DB4 FC 1D 00 00 */ fcmpu cr0, f29, f0 -/* 00008028 00014DB8 41 80 82 B4 */ blt .L_000002DC -/* 0000802C 00014DBC 81 3D 00 04 */ lwz r9, 0x4(r29) -/* 00008030 00014DC0 3F C0 00 00 */ lis r30, TheTrackPathManager@ha -/* 00008034 00014DC4 3B DE 00 00 */ addi r30, r30, TheTrackPathManager@l -/* 00008038 00014DC8 3B 60 00 00 */ li r27, 0x0 -/* 0000803C 00014DCC 80 09 00 CC */ lwz r0, 0xcc(r9) -/* 00008040 00014DD0 A8 69 00 C8 */ lha r3, 0xc8(r9) -/* 00008044 00014DD4 7C 08 03 A6 */ mtlr r0 -/* 00008048 00014DD8 7C 7D 1A 14 */ add r3, r29, r3 -/* 0000804C 00014DDC 4E 80 00 21 */ blrl -/* 00008050 00014DE0 7C 69 1B 78 */ mr r9, r3 -/* 00008054 00014DE4 38 81 00 18 */ addi r4, r1, 0x18 -/* 00008058 00014DE8 C0 09 00 00 */ lfs f0, 0x0(r9) -/* 0000805C 00014DEC 7F C3 F3 78 */ mr r3, r30 -/* 00008060 00014DF0 C1 89 00 04 */ lfs f12, 0x4(r9) -/* 00008064 00014DF4 38 A0 00 0C */ li r5, 0xc -.L_00008068: -/* 00008068 00014DF8 C1 A9 00 08 */ lfs f13, 0x8(r9) -/* 0000806C 00014DFC FC 00 00 50 */ fneg f0, f0 -/* 00008070 00014E00 D0 01 00 1C */ stfs f0, 0x1c(r1) -/* 00008074 00014E04 38 C0 00 00 */ li r6, 0x0 -/* 00008078 00014E08 D1 A1 00 18 */ stfs f13, 0x18(r1) -/* 0000807C 00014E0C D1 81 00 20 */ stfs f12, 0x20(r1) -/* 00008080 00014E10 48 00 00 01 */ bl FindZone__16TrackPathManagerPC8bVector218eTrackPathZoneTypeP13TrackPathZone -/* 00008084 00014E14 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00008088 00014E18 41 82 80 90 */ beq .L_00000118 -/* 0000808C 00014E1C 3B 60 00 01 */ li r27, 0x1 -/* 00008090 00014E20 3D 20 00 00 */ lis r9, .rodata+0x7F8@ha -.L_00008094: -/* 00008094 00014E24 D3 E1 00 AC */ stfs f31, 0xac(r1) -/* 00008098 00014E28 C0 29 07 F8 */ lfs f1, .rodata+0x7F8@l(r9) -/* 0000809C 00014E2C 7F A3 EB 78 */ mr r3, r29 -/* 000080A0 00014E30 D3 E1 00 A8 */ stfs f31, 0xa8(r1) -/* 000080A4 00014E34 38 81 00 A8 */ addi r4, r1, 0xa8 -/* 000080A8 00014E38 38 A1 00 AC */ addi r5, r1, 0xac -/* 000080AC 00014E3C 48 00 71 7D */ bl .L_0000F228 -/* 000080B0 00014E40 3D 20 00 00 */ lis r9, .rodata+0x7FC@ha -/* 000080B4 00014E44 FF C0 08 90 */ fmr f30, f1 -/* 000080B8 00014E48 C0 09 07 FC */ lfs f0, .rodata+0x7FC@l(r9) -/* 000080BC 00014E4C FC 1E 00 00 */ fcmpu cr0, f30, f0 -/* 000080C0 00014E50 4C 62 0B 82 */ cror un, eq, gt -/* 000080C4 00014E54 41 83 82 B4 */ bso .L_00000378 -/* 000080C8 00014E58 C1 81 00 A8 */ lfs f12, 0xa8(r1) -/* 000080CC 00014E5C FC 0C 00 00 */ fcmpu cr0, f12, f0 -/* 000080D0 00014E60 4C 62 0B 82 */ cror un, eq, gt -/* 000080D4 00014E64 41 83 82 B4 */ bso .L_00000388 -/* 000080D8 00014E68 3D 20 00 00 */ lis r9, .rodata+0x800@ha -/* 000080DC 00014E6C C1 A1 00 AC */ lfs f13, 0xac(r1) -.L_000080E0: -/* 000080E0 00014E70 C0 09 08 00 */ lfs f0, .rodata+0x800@l(r9) -/* 000080E4 00014E74 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 000080E8 00014E78 4C 62 0B 82 */ cror un, eq, gt -/* 000080EC 00014E7C 41 83 82 B4 */ bso .L_000003A0 -/* 000080F0 00014E80 3D 20 00 00 */ lis r9, .rodata+0x804@ha -/* 000080F4 00014E84 C3 E9 08 04 */ lfs f31, .rodata+0x804@l(r9) -/* 000080F8 00014E88 FC 1E F8 00 */ fcmpu cr0, f30, f31 -/* 000080FC 00014E8C 4C 62 03 82 */ cror un, eq, lt -/* 00008100 00014E90 41 83 82 B4 */ bso .L_000003B4 -/* 00008104 00014E94 3D 20 00 00 */ lis r9, Tweak_JumpCamHighestAirTresh@ha -/* 00008108 00014E98 57 60 10 3A */ slwi r0, r27, 2 -/* 0000810C 00014E9C 39 29 00 00 */ addi r9, r9, Tweak_JumpCamHighestAirTresh@l -/* 00008110 00014EA0 7C 09 04 2E */ lfsx f0, r9, r0 -/* 00008114 00014EA4 FC 0C 00 00 */ fcmpu cr0, f12, f0 -/* 00008118 00014EA8 4C 62 03 82 */ cror un, eq, lt -/* 0000811C 00014EAC 41 83 82 78 */ bso .L_00000394 -/* 00008120 00014EB0 3D 20 00 00 */ lis r9, Tweak_JumpCamLongestAirTresh@ha -/* 00008124 00014EB4 ED AD 07 72 */ fmuls f13, f13, f29 -/* 00008128 00014EB8 39 29 00 00 */ addi r9, r9, Tweak_JumpCamLongestAirTresh@l -/* 0000812C 00014EBC 7C 09 04 2E */ lfsx f0, r9, r0 -/* 00008130 00014EC0 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 00008134 00014EC4 4C 62 03 82 */ cror un, eq, lt -/* 00008138 00014EC8 41 83 82 78 */ bso .L_000003B0 -/* 0000813C 00014ECC 80 7C 00 04 */ lwz r3, 0x4(r28) -/* 00008140 00014ED0 3C 80 00 00 */ lis r4, .rodata+0x7DC@ha -/* 00008144 00014ED4 38 84 07 DC */ addi r4, r4, .rodata+0x7DC@l -/* 00008148 00014ED8 3F 20 A3 44 */ lis r25, 0xa344 -/* 0000814C 00014EDC 48 00 70 B5 */ bl .L_0000F200 -/* 00008150 00014EE0 63 39 7E 3F */ ori r25, r25, 0x7e3f -/* 00008154 00014EE4 C0 01 00 AC */ lfs f0, 0xac(r1) -.L_00008158: -/* 00008158 00014EE8 3D 20 00 00 */ lis r9, .rodata+0x808@ha -/* 0000815C 00014EEC C1 89 08 08 */ lfs f12, .rodata+0x808@l(r9) -/* 00008160 00014EF0 7F 83 E3 78 */ mr r3, r28 -/* 00008164 00014EF4 EC 00 00 2A */ fadds f0, f0, f0 -/* 00008168 00014EF8 EC 20 F8 28 */ fsubs f1, f0, f31 -/* 0000816C 00014EFC FC 21 F8 2E */ fsel f1, f1, f0, f31 -.L_00008170: -/* 00008170 00014F00 ED AC 08 28 */ fsubs f13, f12, f1 -/* 00008174 00014F04 FC 2D 60 6E */ fsel f1, f13, f1, f12 -/* 00008178 00014F08 48 00 60 21 */ bl .L_0000E198 -/* 0000817C 00014F0C 3D 20 00 00 */ lis r9, _Q25UMath7Vector4.kZero@ha -/* 00008180 00014F10 39 61 00 70 */ addi r11, r1, 0x70 -/* 00008184 00014F14 80 A9 00 00 */ lwz r5, _Q25UMath7Vector4.kZero@l(r9) -/* 00008188 00014F18 39 41 00 80 */ addi r10, r1, 0x80 -/* 0000818C 00014F1C 39 29 00 00 */ addi r9, r9, _Q25UMath7Vector4.kZero@l -/* 00008190 00014F20 38 E1 00 90 */ addi r7, r1, 0x90 -/* 00008194 00014F24 80 C9 00 0C */ lwz r6, 0xc(r9) -/* 00008198 00014F28 38 61 00 A0 */ addi r3, r1, 0xa0 -.L_0000819C: -/* 0000819C 00014F2C 81 09 00 04 */ lwz r8, 0x4(r9) -.L_000081A0: -/* 000081A0 00014F30 80 09 00 08 */ lwz r0, 0x8(r9) -/* 000081A4 00014F34 90 A1 00 70 */ stw r5, 0x70(r1) -/* 000081A8 00014F38 90 CB 00 0C */ stw r6, 0xc(r11) -/* 000081AC 00014F3C 91 0B 00 04 */ stw r8, 0x4(r11) -/* 000081B0 00014F40 90 0B 00 08 */ stw r0, 0x8(r11) -/* 000081B4 00014F44 90 A1 00 80 */ stw r5, 0x80(r1) -/* 000081B8 00014F48 90 CA 00 0C */ stw r6, 0xc(r10) -/* 000081BC 00014F4C 91 0A 00 04 */ stw r8, 0x4(r10) -/* 000081C0 00014F50 90 0A 00 08 */ stw r0, 0x8(r10) -.L_000081C4: -/* 000081C4 00014F54 90 A1 00 90 */ stw r5, 0x90(r1) -/* 000081C8 00014F58 90 C7 00 0C */ stw r6, 0xc(r7) -/* 000081CC 00014F5C 91 07 00 04 */ stw r8, 0x4(r7) -/* 000081D0 00014F60 90 07 00 08 */ stw r0, 0x8(r7) -/* 000081D4 00014F64 48 00 00 01 */ bl _GetKind__15MGamePlayMoment -/* 000081D8 00014F68 80 01 00 78 */ lwz r0, 0x78(r1) -/* 000081DC 00014F6C 3B 60 00 48 */ li r27, 0x48 -/* 000081E0 00014F70 83 81 00 A0 */ lwz r28, 0xa0(r1) -/* 000081E4 00014F74 3C 60 00 00 */ lis r3, .rodata+0x770@ha -.L_000081E8: -/* 000081E8 00014F78 83 41 00 70 */ lwz r26, 0x70(r1) -/* 000081EC 00014F7C 38 63 07 70 */ addi r3, r3, .rodata+0x770@l -/* 000081F0 00014F80 83 A1 00 74 */ lwz r29, 0x74(r1) -/* 000081F4 00014F84 81 21 00 7C */ lwz r9, 0x7c(r1) -.L_000081F8: -/* 000081F8 00014F88 81 61 00 80 */ lwz r11, 0x80(r1) -/* 000081FC 00014F8C 81 41 00 84 */ lwz r10, 0x84(r1) -/* 00008200 00014F90 81 01 00 88 */ lwz r8, 0x88(r1) -/* 00008204 00014F94 80 E1 00 8C */ lwz r7, 0x8c(r1) -/* 00008208 00014F98 80 C1 00 90 */ lwz r6, 0x90(r1) -/* 0000820C 00014F9C 80 A1 00 94 */ lwz r5, 0x94(r1) -/* 00008210 00014FA0 80 81 00 98 */ lwz r4, 0x98(r1) -/* 00008214 00014FA4 83 C1 00 9C */ lwz r30, 0x9c(r1) -/* 00008218 00014FA8 90 01 00 40 */ stw r0, 0x40(r1) -/* 0000821C 00014FAC 93 81 00 28 */ stw r28, 0x28(r1) -/* 00008220 00014FB0 93 61 00 30 */ stw r27, 0x30(r1) -/* 00008224 00014FB4 93 41 00 38 */ stw r26, 0x38(r1) -/* 00008228 00014FB8 93 A1 00 3C */ stw r29, 0x3c(r1) -/* 0000822C 00014FBC 91 21 00 44 */ stw r9, 0x44(r1) -/* 00008230 00014FC0 91 61 00 48 */ stw r11, 0x48(r1) -/* 00008234 00014FC4 91 41 00 4C */ stw r10, 0x4c(r1) -/* 00008238 00014FC8 91 01 00 50 */ stw r8, 0x50(r1) -/* 0000823C 00014FCC 90 E1 00 54 */ stw r7, 0x54(r1) -/* 00008240 00014FD0 90 C1 00 58 */ stw r6, 0x58(r1) -/* 00008244 00014FD4 90 A1 00 5C */ stw r5, 0x5c(r1) -/* 00008248 00014FD8 90 81 00 60 */ stw r4, 0x60(r1) -/* 0000824C 00014FDC 93 C1 00 64 */ stw r30, 0x64(r1) -/* 00008250 00014FE0 93 E1 00 68 */ stw r31, 0x68(r1) -/* 00008254 00014FE4 93 21 00 6C */ stw r25, 0x6c(r1) -/* 00008258 00014FE8 93 E1 00 2C */ stw r31, 0x2c(r1) -/* 0000825C 00014FEC 93 E1 00 34 */ stw r31, 0x34(r1) -/* 00008260 00014FF0 48 00 00 01 */ bl stringhash32__FPCc -/* 00008264 00014FF4 7C 60 1B 78 */ mr r0, r3 -/* 00008268 00014FF8 90 01 00 2C */ stw r0, 0x2c(r1) -.L_0000826C: -/* 0000826C 00014FFC 38 61 00 28 */ addi r3, r1, 0x28 -/* 00008270 00015000 90 01 00 70 */ stw r0, 0x70(r1) -/* 00008274 00015004 48 00 00 01 */ bl Deliver__Q26Hermes7Message -/* 00008278 00015008 3D 20 00 00 */ lis r9, .rodata+0x804@ha -/* 0000827C 0001500C C0 09 08 04 */ lfs f0, .rodata+0x804@l(r9) -/* 00008280 00015010 FC 1E 00 00 */ fcmpu cr0, f30, f0 -/* 00008284 00015014 4C 62 03 82 */ cror un, eq, lt -/* 00008288 00015018 41 83 82 B4 */ bso .L_0000053C -/* 0000828C 0001501C 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst9Singleton1Z7SoundAI.mInstance@ha -/* 00008290 00015020 80 69 00 00 */ lwz r3, _Q33UTL11Collectionst9Singleton1Z7SoundAI.mInstance@l(r9) -/* 00008294 00015024 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00008298 00015028 41 82 82 B4 */ beq .L_0000054C -/* 0000829C 0001502C 80 63 02 0C */ lwz r3, 0x20c(r3) -/* 000082A0 00015030 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000082A4 00015034 41 82 82 B4 */ beq .L_00000558 -/* 000082A8 00015038 C0 21 00 A8 */ lfs f1, 0xa8(r1) -/* 000082AC 0001503C C0 41 00 AC */ lfs f2, 0xac(r1) -/* 000082B0 00015040 48 00 00 01 */ bl NotifyAirborne__8Observerff -/* 000082B4 00015044 80 01 00 EC */ lwz r0, 0xec(r1) -/* 000082B8 00015048 7C 08 03 A6 */ mtlr r0 -/* 000082BC 0001504C BB 21 00 B4 */ lmw r25, 0xb4(r1) -/* 000082C0 00015050 E3 A1 00 D0 */ psq_l f29, 0xd0(r1), 0, qr0 -/* 000082C4 00015054 E3 C1 00 D8 */ psq_l f30, 0xd8(r1), 0, qr0 -/* 000082C8 00015058 E3 E1 00 E0 */ psq_l f31, 0xe0(r1), 0, qr0 -/* 000082CC 0001505C 38 21 00 E8 */ addi r1, r1, 0xe8 -/* 000082D0 00015060 4E 80 00 20 */ blr -.endfn MaybeDoJumpCam__8CameraAIP8ISimable - -# .text:0x82D4 | size: 0x74 -.fn GetName__C13CDActionDrive, global -/* 000082D4 00015064 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 000082D8 00015068 7C 08 02 A6 */ mflr r0 -/* 000082DC 0001506C BF A1 00 0C */ stmw r29, 0xc(r1) -/* 000082E0 00015070 90 01 00 1C */ stw r0, 0x1c(r1) -/* 000082E4 00015074 3F E0 00 00 */ lis r31, _.tmp_7.10839@ha -/* 000082E8 00015078 80 1F 00 00 */ lwz r0, _.tmp_7.10839@l(r31) -/* 000082EC 0001507C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000082F0 00015080 40 82 83 2C */ bne .L_0000061C -/* 000082F4 00015084 3F C0 00 00 */ lis r30, .rodata+0x74C@ha -/* 000082F8 00015088 3F A0 00 00 */ lis r29, name.10838@ha -/* 000082FC 0001508C 3B DE 07 4C */ addi r30, r30, .rodata+0x74C@l -/* 00008300 00015090 3B BD 00 00 */ addi r29, r29, name.10838@l -/* 00008304 00015094 7F C3 F3 78 */ mr r3, r30 -/* 00008308 00015098 48 00 00 01 */ bl StringHash64__6AttribPCc -/* 0000830C 0001509C 90 7D 00 00 */ stw r3, 0x0(r29) -/* 00008310 000150A0 90 9D 00 04 */ stw r4, 0x4(r29) -/* 00008314 000150A4 7F C3 F3 78 */ mr r3, r30 -/* 00008318 000150A8 48 00 00 01 */ bl StringHash32__6AttribPCc -/* 0000831C 000150AC 38 00 00 01 */ li r0, 0x1 -/* 00008320 000150B0 93 DD 00 0C */ stw r30, 0xc(r29) -/* 00008324 000150B4 90 1F 00 00 */ stw r0, _.tmp_7.10839@l(r31) -/* 00008328 000150B8 90 7D 00 08 */ stw r3, 0x8(r29) -/* 0000832C 000150BC 3C 60 00 00 */ lis r3, name.10838@ha -/* 00008330 000150C0 38 63 00 00 */ addi r3, r3, name.10838@l -/* 00008334 000150C4 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 00008338 000150C8 7C 08 03 A6 */ mtlr r0 -/* 0000833C 000150CC BB A1 00 0C */ lmw r29, 0xc(r1) -/* 00008340 000150D0 38 21 00 18 */ addi r1, r1, 0x18 -/* 00008344 000150D4 4E 80 00 20 */ blr -.endfn GetName__C13CDActionDrive - -# .text:0x8348 | size: 0x2C -.fn GetNext__C13CDActionDrive, global -/* 00008348 000150D8 3D 00 00 00 */ lis r8, .rodata@ha -/* 0000834C 000150DC 39 20 00 00 */ li r9, 0x0 -/* 00008350 000150E0 7C 6B 1B 78 */ mr r11, r3 -/* 00008354 000150E4 39 08 00 00 */ addi r8, r8, .rodata@l -/* 00008358 000150E8 39 40 00 00 */ li r10, 0x0 -/* 0000835C 000150EC 38 00 00 00 */ li r0, 0x0 -/* 00008360 000150F0 91 2B 00 00 */ stw r9, 0x0(r11) -/* 00008364 000150F4 91 4B 00 04 */ stw r10, 0x4(r11) -/* 00008368 000150F8 90 0B 00 08 */ stw r0, 0x8(r11) -/* 0000836C 000150FC 91 0B 00 0C */ stw r8, 0xc(r11) -/* 00008370 00015100 4E 80 00 20 */ blr -.endfn GetNext__C13CDActionDrive - -# .text:0x8374 | size: 0x28 -.fn SetSpecial__13CDActionDrivef, global -/* 00008374 00015104 3D 20 00 00 */ lis r9, .rodata+0x818@ha -.L_00008378: -/* 00008378 00015108 C0 09 08 18 */ lfs f0, .rodata+0x818@l(r9) -/* 0000837C 0001510C FC 01 00 00 */ fcmpu cr0, f1, f0 -/* 00008380 00015110 4C 62 03 82 */ cror un, eq, lt -/* 00008384 00015114 4D 83 00 20 */ bsolr -/* 00008388 00015118 3D 20 00 00 */ lis r9, kCinematicMomementSeconds@ha -/* 0000838C 0001511C 38 00 00 01 */ li r0, 0x1 -/* 00008390 00015120 D0 29 00 00 */ stfs f1, kCinematicMomementSeconds@l(r9) -.L_00008394: -/* 00008394 00015124 90 03 00 74 */ stw r0, 0x74(r3) -/* 00008398 00015128 4E 80 00 20 */ blr -.endfn SetSpecial__13CDActionDrivef - -# .text:0x839C | size: 0x24 -.fn Attach__13CDActionDrivePQ33UTL3COM8IUnknown, global -/* 0000839C 0001512C 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 000083A0 00015130 7C 08 02 A6 */ mflr r0 -.L_000083A4: -/* 000083A4 00015134 90 01 00 0C */ stw r0, 0xc(r1) -/* 000083A8 00015138 80 63 00 4C */ lwz r3, 0x4c(r3) -/* 000083AC 0001513C 48 00 00 01 */ bl Attach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -/* 000083B0 00015140 80 01 00 0C */ lwz r0, 0xc(r1) -/* 000083B4 00015144 7C 08 03 A6 */ mtlr r0 -/* 000083B8 00015148 38 21 00 08 */ addi r1, r1, 0x8 -/* 000083BC 0001514C 4E 80 00 20 */ blr -.endfn Attach__13CDActionDrivePQ33UTL3COM8IUnknown - -# .text:0x83C0 | size: 0x24 -.fn Detach__13CDActionDrivePQ33UTL3COM8IUnknown, global -/* 000083C0 00015150 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 000083C4 00015154 7C 08 02 A6 */ mflr r0 -/* 000083C8 00015158 90 01 00 0C */ stw r0, 0xc(r1) -.L_000083CC: -/* 000083CC 0001515C 80 63 00 4C */ lwz r3, 0x4c(r3) -/* 000083D0 00015160 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -.L_000083D4: -/* 000083D4 00015164 80 01 00 0C */ lwz r0, 0xc(r1) -/* 000083D8 00015168 7C 08 03 A6 */ mtlr r0 -/* 000083DC 0001516C 38 21 00 08 */ addi r1, r1, 0x8 -/* 000083E0 00015170 4E 80 00 20 */ blr -.endfn Detach__13CDActionDrivePQ33UTL3COM8IUnknown - -# .text:0x83E4 | size: 0x24 -.fn IsAttached__C13CDActionDrivePCQ33UTL3COM8IUnknown, global -/* 000083E4 00015174 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 000083E8 00015178 7C 08 02 A6 */ mflr r0 -/* 000083EC 0001517C 90 01 00 0C */ stw r0, 0xc(r1) -/* 000083F0 00015180 80 63 00 4C */ lwz r3, 0x4c(r3) -/* 000083F4 00015184 48 00 00 01 */ bl IsAttached__CQ23Sim11AttachmentsPCQ33UTL3COM8IUnknown -/* 000083F8 00015188 80 01 00 0C */ lwz r0, 0xc(r1) -/* 000083FC 0001518C 7C 08 03 A6 */ mtlr r0 -/* 00008400 00015190 38 21 00 08 */ addi r1, r1, 0x8 -/* 00008404 00015194 4E 80 00 20 */ blr -.endfn IsAttached__C13CDActionDrivePCQ33UTL3COM8IUnknown - -# .text:0x8408 | size: 0x8 -.fn GetAttachments__C13CDActionDrive, global -/* 00008408 00015198 80 63 00 4C */ lwz r3, 0x4c(r3) -/* 0000840C 0001519C 4E 80 00 20 */ blr -.endfn GetAttachments__C13CDActionDrive - -# .text:0x8410 | size: 0x11C -.fn Construct__13CDActionDrivePQ28CameraAI8Director, global -/* 00008410 000151A0 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 00008414 000151A4 7C 08 02 A6 */ mflr r0 -/* 00008418 000151A8 BF 61 00 0C */ stmw r27, 0xc(r1) -/* 0000841C 000151AC 90 01 00 24 */ stw r0, 0x24(r1) -/* 00008420 000151B0 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@ha -/* 00008424 000151B4 7C 7B 1B 78 */ mr r27, r3 -/* 00008428 000151B8 39 29 00 00 */ addi r9, r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@l -/* 0000842C 000151BC 3B 80 00 00 */ li r28, 0x0 -/* 00008430 000151C0 83 E9 00 30 */ lwz r31, 0x30(r9) -/* 00008434 000151C4 7D 3D 4B 78 */ mr r29, r9 -/* 00008438 000151C8 80 1D 00 38 */ lwz r0, 0x38(r29) -/* 0000843C 000151CC 81 3D 00 30 */ lwz r9, 0x30(r29) -/* 00008440 000151D0 54 00 10 3A */ slwi r0, r0, 2 -/* 00008444 000151D4 7D 29 02 14 */ add r9, r9, r0 -/* 00008448 000151D8 7C 1F 48 00 */ cmpw r31, r9 -/* 0000844C 000151DC 41 82 84 84 */ beq .L_000008D0 -/* 00008450 000151E0 83 DF 00 00 */ lwz r30, 0x0(r31) -/* 00008454 000151E4 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 00008458 000151E8 80 09 00 64 */ lwz r0, 0x64(r9) -/* 0000845C 000151EC A8 69 00 60 */ lha r3, 0x60(r9) -/* 00008460 000151F0 7C 08 03 A6 */ mtlr r0 -/* 00008464 000151F4 7C 7E 1A 14 */ add r3, r30, r3 -/* 00008468 000151F8 4E 80 00 21 */ blrl -/* 0000846C 000151FC 80 1B 00 04 */ lwz r0, 0x4(r27) -/* 00008470 00015200 7C 03 00 00 */ cmpw r3, r0 -/* 00008474 00015204 41 82 84 80 */ beq .L_000008F4 -/* 00008478 00015208 3B FF 00 04 */ addi r31, r31, 0x4 -/* 0000847C 0001520C 48 00 84 38 */ b .L_000108B4 -/* 00008480 00015210 7F DC F3 78 */ mr r28, r30 -/* 00008484 00015214 2C 1C 00 00 */ cmpwi r28, 0x0 -/* 00008488 00015218 41 82 85 14 */ beq .L_0000099C -/* 0000848C 0001521C 81 3C 00 04 */ lwz r9, 0x4(r28) -/* 00008490 00015220 A8 69 00 30 */ lha r3, 0x30(r9) -/* 00008494 00015224 80 09 00 34 */ lwz r0, 0x34(r9) -/* 00008498 00015228 7C 7C 1A 14 */ add r3, r28, r3 -/* 0000849C 0001522C 7C 08 03 A6 */ mtlr r0 -/* 000084A0 00015230 4E 80 00 21 */ blrl -/* 000084A4 00015234 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000084A8 00015238 41 82 85 14 */ beq .L_000009BC -/* 000084AC 0001523C 81 3C 00 04 */ lwz r9, 0x4(r28) -/* 000084B0 00015240 A8 69 00 10 */ lha r3, 0x10(r9) -/* 000084B4 00015244 80 09 00 14 */ lwz r0, 0x14(r9) -/* 000084B8 00015248 7C 7C 1A 14 */ add r3, r28, r3 -/* 000084BC 0001524C 7C 08 03 A6 */ mtlr r0 -/* 000084C0 00015250 4E 80 00 21 */ blrl -.L_000084C4: -/* 000084C4 00015254 7C 6B 1B 79 */ mr. r11, r3 -/* 000084C8 00015258 41 82 85 14 */ beq .L_000009DC -/* 000084CC 0001525C 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 000084D0 00015260 A8 69 00 E8 */ lha r3, 0xe8(r9) -/* 000084D4 00015264 80 09 00 EC */ lwz r0, 0xec(r9) -/* 000084D8 00015268 7C 6B 1A 14 */ add r3, r11, r3 -/* 000084DC 0001526C 7C 08 03 A6 */ mtlr r0 -/* 000084E0 00015270 4E 80 00 21 */ blrl -/* 000084E4 00015274 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000084E8 00015278 38 60 00 00 */ li r3, 0x0 -/* 000084EC 0001527C 41 82 85 18 */ beq .L_00000A04 -/* 000084F0 00015280 3C 60 00 00 */ lis r3, gFastMem@ha -/* 000084F4 00015284 38 80 00 80 */ li r4, 0x80 -/* 000084F8 00015288 38 A0 00 00 */ li r5, 0x0 -/* 000084FC 0001528C 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 00008500 00015290 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 00008504 00015294 7F 64 DB 78 */ mr r4, r27 -/* 00008508 00015298 7F 85 E3 78 */ mr r5, r28 -/* 0000850C 0001529C 48 00 85 2D */ bl .L_00010A38 -/* 00008510 000152A0 48 00 85 18 */ b .L_00010A28 -/* 00008514 000152A4 38 60 00 00 */ li r3, 0x0 -/* 00008518 000152A8 80 01 00 24 */ lwz r0, 0x24(r1) -/* 0000851C 000152AC 7C 08 03 A6 */ mtlr r0 -/* 00008520 000152B0 BB 61 00 0C */ lmw r27, 0xc(r1) -/* 00008524 000152B4 38 21 00 20 */ addi r1, r1, 0x20 -/* 00008528 000152B8 4E 80 00 20 */ blr -.endfn Construct__13CDActionDrivePQ28CameraAI8Director - -# .text:0x852C | size: 0x5B0 -.fn __13CDActionDrivePQ28CameraAI8DirectorP7IPlayer, global -/* 0000852C 000152BC 94 21 FF 68 */ stwu r1, -0x98(r1) -/* 00008530 000152C0 7C 08 02 A6 */ mflr r0 -/* 00008534 000152C4 7D 80 00 26 */ mfcr r12 -/* 00008538 000152C8 BE 61 00 64 */ stmw r19, 0x64(r1) -/* 0000853C 000152CC 90 01 00 9C */ stw r0, 0x9c(r1) -/* 00008540 000152D0 91 81 00 60 */ stw r12, 0x60(r1) -/* 00008544 000152D4 7C 7F 1B 78 */ mr r31, r3 -/* 00008548 000152D8 7C 97 23 78 */ mr r23, r4 -/* 0000854C 000152DC 38 80 00 00 */ li r4, 0x0 -/* 00008550 000152E0 7C B4 2B 78 */ mr r20, r5 -/* 00008554 000152E4 3A DF 00 24 */ addi r22, r31, 0x24 -/* 00008558 000152E8 48 00 00 01 */ bl __Q43UTL3COM6Object6_IListUi -/* 0000855C 000152EC 3F 00 00 00 */ lis r24, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha -/* 00008560 000152F0 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha -/* 00008564 000152F4 3D 60 00 00 */ lis r11, _vt.Q33UTL3COM8IUnknown@ha -/* 00008568 000152F8 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l -/* 0000856C 000152FC 39 6B 00 00 */ addi r11, r11, _vt.Q33UTL3COM8IUnknown@l -/* 00008570 00015300 3C 80 00 00 */ lis r4, _IHandle__11IAttachable@ha -/* 00008574 00015304 93 FF 00 18 */ stw r31, 0x18(r31) -/* 00008578 00015308 91 3F 00 14 */ stw r9, 0x14(r31) -/* 0000857C 0001530C 38 84 00 00 */ addi r4, r4, _IHandle__11IAttachable@l -/* 00008580 00015310 91 7F 00 1C */ stw r11, 0x1c(r31) -/* 00008584 00015314 7F E3 FB 78 */ mr r3, r31 -/* 00008588 00015318 38 BF 00 18 */ addi r5, r31, 0x18 -/* 0000858C 0001531C 3B B8 00 00 */ addi r29, r24, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l -.L_00008590: -/* 00008590 00015320 48 00 00 01 */ bl Add__Q43UTL3COM6Object6_IListPvPQ33UTL3COM8IUnknown -/* 00008594 00015324 3E 60 00 00 */ lis r19, gCinematicMomementCamera@ha -/* 00008598 00015328 3D 20 00 00 */ lis r9, _vt.11IAttachable@ha -/* 0000859C 0001532C 3D 60 00 00 */ lis r11, _vt.Q33Sim9Collision9IListener@ha -/* 000085A0 00015330 39 29 00 00 */ addi r9, r9, _vt.11IAttachable@l -/* 000085A4 00015334 39 6B 00 00 */ addi r11, r11, _vt.Q33Sim9Collision9IListener@l -/* 000085A8 00015338 91 3F 00 1C */ stw r9, 0x1c(r31) -/* 000085AC 0001533C 3A A1 00 58 */ addi r21, r1, 0x58 -/* 000085B0 00015340 91 7F 00 20 */ stw r11, 0x20(r31) -/* 000085B4 00015344 3B 41 00 18 */ addi r26, r1, 0x18 -/* 000085B8 00015348 92 C1 00 58 */ stw r22, 0x58(r1) -/* 000085BC 0001534C 80 9D 00 08 */ lwz r4, 0x8(r29) -/* 000085C0 00015350 80 1D 00 04 */ lwz r0, 0x4(r29) -/* 000085C4 00015354 7C 04 00 40 */ cmplw r4, r0 -/* 000085C8 00015358 41 80 86 A8 */ blt .L_00000C70 -/* 000085CC 0001535C 81 3D 00 0C */ lwz r9, 0xc(r29) -/* 000085D0 00015360 38 84 00 01 */ addi r4, r4, 0x1 -/* 000085D4 00015364 80 09 00 24 */ lwz r0, 0x24(r9) -.L_000085D8: -/* 000085D8 00015368 A8 69 00 20 */ lha r3, 0x20(r9) -/* 000085DC 0001536C 7C 08 03 A6 */ mtlr r0 -/* 000085E0 00015370 7C 63 EA 14 */ add r3, r3, r29 -/* 000085E4 00015374 4E 80 00 21 */ blrl -/* 000085E8 00015378 80 1D 00 04 */ lwz r0, 0x4(r29) -/* 000085EC 0001537C 7C 7E 1B 78 */ mr r30, r3 -/* 000085F0 00015380 7C 1E 00 40 */ cmplw r30, r0 -/* 000085F4 00015384 40 81 86 A8 */ ble .L_00000C9C -/* 000085F8 00015388 81 3D 00 0C */ lwz r9, 0xc(r29) -/* 000085FC 0001538C 7F C4 F3 78 */ mr r4, r30 -/* 00008600 00015390 80 09 00 34 */ lwz r0, 0x34(r9) -/* 00008604 00015394 A8 69 00 30 */ lha r3, 0x30(r9) -/* 00008608 00015398 7C 08 03 A6 */ mtlr r0 -/* 0000860C 0001539C 7C 63 EA 14 */ add r3, r3, r29 -/* 00008610 000153A0 4E 80 00 21 */ blrl -/* 00008614 000153A4 81 3D 00 0C */ lwz r9, 0xc(r29) -/* 00008618 000153A8 7F C4 F3 78 */ mr r4, r30 -/* 0000861C 000153AC 38 A0 00 10 */ li r5, 0x10 -/* 00008620 000153B0 83 98 00 00 */ lwz r28, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r24) -/* 00008624 000153B4 A8 69 00 10 */ lha r3, 0x10(r9) -.L_00008628: -/* 00008628 000153B8 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000862C 000153BC 7C 63 EA 14 */ add r3, r3, r29 -/* 00008630 000153C0 83 7D 00 08 */ lwz r27, 0x8(r29) -/* 00008634 000153C4 7C 08 03 A6 */ mtlr r0 -/* 00008638 000153C8 83 3D 00 04 */ lwz r25, 0x4(r29) -/* 0000863C 000153CC 4E 80 00 21 */ blrl -/* 00008640 000153D0 93 DD 00 04 */ stw r30, 0x4(r29) -/* 00008644 000153D4 7C 1C 18 00 */ cmpw r28, r3 -/* 00008648 000153D8 90 78 00 00 */ stw r3, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r24) -/* 0000864C 000153DC 41 82 86 A8 */ beq .L_00000CF4 -.L_00008650: -/* 00008650 000153E0 38 00 00 00 */ li r0, 0x0 -/* 00008654 000153E4 3B C0 00 00 */ li r30, 0x0 -/* 00008658 000153E8 90 1D 00 08 */ stw r0, 0x8(r29) -/* 0000865C 000153EC 7C 1E D8 00 */ cmpw r30, r27 -.L_00008660: -/* 00008660 000153F0 2E 1C 00 00 */ cmpwi cr4, r28, 0x0 -/* 00008664 000153F4 40 80 86 84 */ bge .L_00000CE8 -/* 00008668 000153F8 57 C4 10 3A */ slwi r4, r30, 2 -/* 0000866C 000153FC 7F A3 EB 78 */ mr r3, r29 -/* 00008670 00015400 7C 9C 22 14 */ add r4, r28, r4 -/* 00008674 00015404 3B DE 00 01 */ addi r30, r30, 0x1 -/* 00008678 00015408 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZP14ITrafficCenteri16RCP14ITrafficCenter -/* 0000867C 0001540C 7C 1E D8 00 */ cmpw r30, r27 -/* 00008680 00015410 41 80 86 68 */ blt .L_00000CE8 -/* 00008684 00015414 41 92 86 A8 */ beq cr4, SampleFloatTable__FPCfifff -/* 00008688 00015418 81 3D 00 0C */ lwz r9, 0xc(r29) -/* 0000868C 0001541C 7F 84 E3 78 */ mr r4, r28 -/* 00008690 00015420 7F 25 CB 78 */ mr r5, r25 -/* 00008694 00015424 A8 69 00 18 */ lha r3, 0x18(r9) -/* 00008698 00015428 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0000869C 0001542C 7C 7D 1A 14 */ add r3, r29, r3 -/* 000086A0 00015430 7C 08 03 A6 */ mtlr r0 -/* 000086A4 00015434 4E 80 00 21 */ blrl -/* 000086A8 00015438 81 3D 00 08 */ lwz r9, 0x8(r29) -/* 000086AC 0001543C 81 7D 00 00 */ lwz r11, 0x0(r29) -/* 000086B0 00015440 55 29 10 3A */ slwi r9, r9, 2 -/* 000086B4 00015444 7C 09 5A 14 */ add r0, r9, r11 -/* 000086B8 00015448 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000086BC 0001544C 41 82 86 C8 */ beq .L_00000D84 -/* 000086C0 00015450 80 15 00 00 */ lwz r0, 0x0(r21) -/* 000086C4 00015454 7C 09 59 2E */ stwx r0, r9, r11 -/* 000086C8 00015458 81 3D 00 08 */ lwz r9, 0x8(r29) -/* 000086CC 0001545C 3D 60 00 00 */ lis r11, _vt.14ITrafficCenter@ha -/* 000086D0 00015460 39 6B 00 00 */ addi r11, r11, _vt.14ITrafficCenter@l -/* 000086D4 00015464 3D 40 00 00 */ lis r10, _vt.13CDActionDrive.11IAttachable@ha -/* 000086D8 00015468 39 29 00 01 */ addi r9, r9, 0x1 -/* 000086DC 0001546C 3D 00 00 00 */ lis r8, _vt.13CDActionDrive.Q33Sim9Collision9IListener@ha -/* 000086E0 00015470 91 3D 00 08 */ stw r9, 0x8(r29) -/* 000086E4 00015474 3C E0 00 00 */ lis r7, _vt.13CDActionDrive.14ITrafficCenter@ha -/* 000086E8 00015478 3D 20 00 00 */ lis r9, _vt.13CDActionDrive@ha -/* 000086EC 0001547C 91 76 00 04 */ stw r11, 0x4(r22) -/* 000086F0 00015480 39 4A 00 00 */ addi r10, r10, _vt.13CDActionDrive.11IAttachable@l -/* 000086F4 00015484 39 29 00 00 */ addi r9, r9, _vt.13CDActionDrive@l -/* 000086F8 00015488 39 08 00 00 */ addi r8, r8, _vt.13CDActionDrive.Q33Sim9Collision9IListener@l -/* 000086FC 0001548C 38 E7 00 00 */ addi r7, r7, _vt.13CDActionDrive.14ITrafficCenter@l -/* 00008700 00015490 91 5F 00 1C */ stw r10, 0x1c(r31) -/* 00008704 00015494 38 7F 00 38 */ addi r3, r31, 0x38 -/* 00008708 00015498 91 3F 00 14 */ stw r9, 0x14(r31) -/* 0000870C 0001549C 38 80 00 00 */ li r4, 0x0 -/* 00008710 000154A0 91 1F 00 20 */ stw r8, 0x20(r31) -/* 00008714 000154A4 3B 60 00 00 */ li r27, 0x0 -/* 00008718 000154A8 90 FF 00 28 */ stw r7, 0x28(r31) -/* 0000871C 000154AC 3B 9F 00 18 */ addi r28, r31, 0x18 -/* 00008720 000154B0 48 00 00 01 */ bl __Q29WorldConn9ReferenceUi -/* 00008724 000154B4 3D 20 00 00 */ lis r9, .rodata+0x82C@ha -.L_00008728: -/* 00008728 000154B8 92 9F 00 48 */ stw r20, 0x48(r31) -.L_0000872C: -/* 0000872C 000154BC C0 09 08 2C */ lfs f0, .rodata+0x82C@l(r9) -/* 00008730 000154C0 3D 60 00 00 */ lis r11, .rodata+0x830@ha -/* 00008734 000154C4 93 7F 00 50 */ stw r27, 0x50(r31) -/* 00008738 000154C8 3D 20 00 00 */ lis r9, gCinematicMomementCamera@ha -/* 0000873C 000154CC D0 1F 00 54 */ stfs f0, 0x54(r31) -/* 00008740 000154D0 3D 40 00 00 */ lis r10, gGameBreakerCamera@ha -/* 00008744 000154D4 C1 8B 08 30 */ lfs f12, .rodata+0x830@l(r11) -/* 00008748 000154D8 80 17 00 04 */ lwz r0, 0x4(r23) -.L_0000874C: -/* 0000874C 000154DC D0 1F 00 70 */ stfs f0, 0x70(r31) -/* 00008750 000154E0 90 1F 00 58 */ stw r0, 0x58(r31) -/* 00008754 000154E4 D0 1F 00 5C */ stfs f0, 0x5c(r31) -/* 00008758 000154E8 D0 1F 00 60 */ stfs f0, 0x60(r31) -/* 0000875C 000154EC D0 1F 00 64 */ stfs f0, 0x64(r31) -/* 00008760 000154F0 D1 9F 00 68 */ stfs f12, 0x68(r31) -/* 00008764 000154F4 D0 1F 00 6C */ stfs f0, 0x6c(r31) -/* 00008768 000154F8 93 7F 00 74 */ stw r27, 0x74(r31) -/* 0000876C 000154FC 93 7F 00 78 */ stw r27, 0x78(r31) -.L_00008770: -/* 00008770 00015500 93 69 00 00 */ stw r27, gCinematicMomementCamera@l(r9) -/* 00008774 00015504 80 17 02 BC */ lwz r0, 0x2bc(r23) -/* 00008778 00015508 93 6A 00 00 */ stw r27, gGameBreakerCamera@l(r10) -/* 0000877C 0001550C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00008780 00015510 41 82 87 AC */ beq .L_00000F2C -/* 00008784 00015514 3D 20 00 00 */ lis r9, .rodata+0x834@ha -/* 00008788 00015518 38 00 00 01 */ li r0, 0x1 -/* 0000878C 0001551C C1 A9 08 34 */ lfs f13, .rodata+0x834@l(r9) -/* 00008790 00015520 3D 60 00 00 */ lis r11, .rodata+0x838@ha -/* 00008794 00015524 90 13 00 00 */ stw r0, gCinematicMomementCamera@l(r19) -/* 00008798 00015528 3D 20 00 00 */ lis r9, kCinematicMomementSeconds@ha -/* 0000879C 0001552C D1 BF 00 70 */ stfs f13, 0x70(r31) -/* 000087A0 00015530 C0 0B 08 38 */ lfs f0, .rodata+0x838@l(r11) -/* 000087A4 00015534 D1 89 00 00 */ stfs f12, kCinematicMomementSeconds@l(r9) -/* 000087A8 00015538 D0 1F 00 6C */ stfs f0, 0x6c(r31) -/* 000087AC 0001553C 3F C0 00 00 */ lis r30, gFastMem@ha -/* 000087B0 00015540 38 80 00 10 */ li r4, 0x10 -/* 000087B4 00015544 3B DE 00 00 */ addi r30, r30, gFastMem@l -/* 000087B8 00015548 38 A0 00 00 */ li r5, 0x0 -/* 000087BC 0001554C 7F C3 F3 78 */ mr r3, r30 -/* 000087C0 00015550 3B 20 00 00 */ li r25, 0x0 -.L_000087C4: -/* 000087C4 00015554 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 000087C8 00015558 7C 7D 1B 78 */ mr r29, r3 -/* 000087CC 0001555C 3D 20 00 00 */ lis r9, _vt.Q23Sim11Attachments@ha -/* 000087D0 00015560 39 29 00 00 */ addi r9, r9, _vt.Q23Sim11Attachments@l -/* 000087D4 00015564 93 7D 00 04 */ stw r27, 0x4(r29) -/* 000087D8 00015568 91 3D 00 0C */ stw r9, 0xc(r29) -/* 000087DC 0001556C 38 80 00 0C */ li r4, 0xc -/* 000087E0 00015570 38 A0 00 00 */ li r5, 0x0 -/* 000087E4 00015574 7F C3 F3 78 */ mr r3, r30 -/* 000087E8 00015578 48 00 00 01 */ bl Alloc__7FastMemUiPCc -.L_000087EC: -/* 000087EC 0001557C 90 63 00 00 */ stw r3, 0x0(r3) -/* 000087F0 00015580 3D 20 00 00 */ lis r9, .rodata+0x824@ha -.L_000087F4: -/* 000087F4 00015584 90 63 00 04 */ stw r3, 0x4(r3) -.L_000087F8: -/* 000087F8 00015588 3F C0 00 00 */ lis r30, .rodata+0x81C@ha -/* 000087FC 0001558C 90 7D 00 04 */ stw r3, 0x4(r29) -/* 00008800 00015590 3B DE 08 1C */ addi r30, r30, .rodata+0x81C@l -/* 00008804 00015594 93 9D 00 08 */ stw r28, 0x8(r29) -/* 00008808 00015598 38 69 08 24 */ addi r3, r9, .rodata+0x824@l -/* 0000880C 0001559C 93 BF 00 4C */ stw r29, 0x4c(r31) -/* 00008810 000155A0 48 00 00 01 */ bl stringhash32__FPCc -.L_00008814: -/* 00008814 000155A4 90 61 00 08 */ stw r3, 0x8(r1) -/* 00008818 000155A8 38 A0 00 24 */ li r5, 0x24 -/* 0000881C 000155AC 93 61 00 2C */ stw r27, 0x2c(r1) -/* 00008820 000155B0 38 80 00 00 */ li r4, 0x0 -/* 00008824 000155B4 83 9E 00 00 */ lwz r28, 0x0(r30) -/* 00008828 000155B8 83 BE 00 04 */ lwz r29, 0x4(r30) -/* 0000882C 000155BC 7F 43 D3 78 */ mr r3, r26 -/* 00008830 000155C0 48 00 00 01 */ bl bMemSet -.L_00008834: -/* 00008834 000155C4 3D 20 00 00 */ lis r9, Call__Q36Hermes7Handlert13MemberHandler3Z8MJumpCutZ13CDActionDriveZ13CDActionDrivePCQ26Hermes7MessagePQ26Hermes7Handler@ha -/* 00008838 000155C8 38 61 00 40 */ addi r3, r1, 0x40 -/* 0000883C 000155CC 39 29 00 00 */ addi r9, r9, Call__Q36Hermes7Handlert13MemberHandler3Z8MJumpCutZ13CDActionDriveZ13CDActionDrivePCQ26Hermes7MessagePQ26Hermes7Handler@l -/* 00008840 000155D0 93 81 00 18 */ stw r28, 0x18(r1) -/* 00008844 000155D4 93 A1 00 1C */ stw r29, 0x1c(r1) -/* 00008848 000155D8 91 21 00 28 */ stw r9, 0x28(r1) -/* 0000884C 000155DC 93 E1 00 20 */ stw r31, 0x20(r1) -/* 00008850 000155E0 48 00 00 01 */ bl _GetKind__8MJumpCut -/* 00008854 000155E4 3D 60 00 00 */ lis r11, _Q26Hermes7Handler.mKeyNext@ha -/* 00008858 000155E8 80 01 00 40 */ lwz r0, 0x40(r1) -.L_0000885C: -/* 0000885C 000155EC 81 2B 00 00 */ lwz r9, _Q26Hermes7Handler.mKeyNext@l(r11) -/* 00008860 000155F0 38 81 00 40 */ addi r4, r1, 0x40 -/* 00008864 000155F4 90 01 00 2C */ stw r0, 0x2c(r1) -/* 00008868 000155F8 7F 43 D3 78 */ mr r3, r26 -/* 0000886C 000155FC 91 21 00 30 */ stw r9, 0x30(r1) -/* 00008870 00015600 39 29 00 01 */ addi r9, r9, 0x1 -/* 00008874 00015604 91 2B 00 00 */ stw r9, _Q26Hermes7Handler.mKeyNext@l(r11) -/* 00008878 00015608 93 7A 00 1C */ stw r27, 0x1c(r26) -/* 0000887C 0001560C 80 01 00 08 */ lwz r0, 0x8(r1) -/* 00008880 00015610 90 01 00 40 */ stw r0, 0x40(r1) -/* 00008884 00015614 48 00 00 01 */ bl _AddToPort__Q26Hermes7HandlerG6UCrc32 -/* 00008888 00015618 90 7F 00 7C */ stw r3, 0x7c(r31) -/* 0000888C 0001561C 80 9F 00 48 */ lwz r4, 0x48(r31) -/* 00008890 00015620 80 7F 00 4C */ lwz r3, 0x4c(r31) -/* 00008894 00015624 48 00 00 01 */ bl Attach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -/* 00008898 00015628 7E E3 BB 78 */ mr r3, r23 -/* 0000889C 0001562C 48 00 60 85 */ bl .L_0000E920 -/* 000088A0 00015630 7C 63 1B 79 */ mr. r3, r3 -/* 000088A4 00015634 41 82 88 BC */ beq .L_00001160 -/* 000088A8 00015638 80 03 00 0C */ lwz r0, 0xc(r3) -/* 000088AC 0001563C 2C 00 00 0E */ cmpwi r0, 0xe -/* 000088B0 00015640 40 82 88 BC */ bne .L_0000116C -/* 000088B4 00015644 3D 20 00 00 */ lis r9, TheICEManager+0x74@ha -/* 000088B8 00015648 83 29 00 74 */ lwz r25, TheICEManager+0x74@l(r9) -/* 000088BC 0001564C 38 60 01 24 */ li r3, 0x124 -/* 000088C0 00015650 48 00 00 01 */ bl __builtin_vec_new -/* 000088C4 00015654 38 80 00 00 */ li r4, 0x0 -.L_000088C8: -/* 000088C8 00015658 48 00 10 51 */ bl .L_00009918 -/* 000088CC 0001565C 3D 20 00 00 */ lis r9, .rodata+0x82C@ha -/* 000088D0 00015660 C1 9F 00 70 */ lfs f12, 0x70(r31) -/* 000088D4 00015664 C0 09 08 2C */ lfs f0, .rodata+0x82C@l(r9) -/* 000088D8 00015668 90 7F 00 34 */ stw r3, 0x34(r31) -/* 000088DC 0001566C FC 0C 00 00 */ fcmpu cr0, f12, f0 -/* 000088E0 00015670 4C 62 03 82 */ cror un, eq, lt -/* 000088E4 00015674 41 83 89 04 */ bso .L_000011E8 -/* 000088E8 00015678 3D 20 00 00 */ lis r9, .rodata+0x83C@ha -/* 000088EC 0001567C 3D 60 00 00 */ lis r11, .rodata+0x834@ha -/* 000088F0 00015680 C0 09 08 3C */ lfs f0, .rodata+0x83C@l(r9) -.L_000088F4: -/* 000088F4 00015684 C1 AB 08 34 */ lfs f13, .rodata+0x834@l(r11) -/* 000088F8 00015688 EC 0C 00 32 */ fmuls f0, f12, f0 -/* 000088FC 0001568C ED AD 00 28 */ fsubs f13, f13, f0 -/* 00008900 00015690 D1 A3 00 D4 */ stfs f13, 0xd4(r3) -/* 00008904 00015694 7F E3 FB 78 */ mr r3, r31 -/* 00008908 00015698 48 00 90 75 */ bl .L_0001197C -.L_0000890C: -/* 0000890C 0001569C 80 7F 00 3C */ lwz r3, 0x3c(r31) -/* 00008910 000156A0 38 00 00 01 */ li r0, 0x1 -/* 00008914 000156A4 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00008918 000156A8 40 82 89 20 */ bne .L_00001238 -/* 0000891C 000156AC 38 00 00 00 */ li r0, 0x0 -/* 00008920 000156B0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00008924 000156B4 41 82 8A 50 */ beq .L_00001374 -/* 00008928 000156B8 38 81 00 08 */ addi r4, r1, 0x8 -/* 0000892C 000156BC 48 00 00 01 */ bl PSMTX44Copy -/* 00008930 000156C0 80 7F 00 50 */ lwz r3, 0x50(r31) -/* 00008934 000156C4 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00008938 000156C8 41 82 8A 34 */ beq _._12CameraAnchor -/* 0000893C 000156CC 80 63 00 00 */ lwz r3, 0x0(r3) -/* 00008940 000156D0 3C 80 00 00 */ lis r4, _IHandle__14ICollisionBody@ha -/* 00008944 000156D4 38 84 00 00 */ addi r4, r4, _IHandle__14ICollisionBody@l -/* 00008948 000156D8 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000894C 000156DC 7C 7C 1B 79 */ mr. r28, r3 -/* 00008950 000156E0 38 00 00 01 */ li r0, 0x1 -/* 00008954 000156E4 40 82 89 5C */ bne .L_000012B0 -/* 00008958 000156E8 38 00 00 00 */ li r0, 0x0 -/* 0000895C 000156EC 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00008960 000156F0 41 82 8A 34 */ beq .L_00001394 -/* 00008964 000156F4 81 7F 00 50 */ lwz r11, 0x50(r31) -/* 00008968 000156F8 3B A1 00 48 */ addi r29, r1, 0x48 -/* 0000896C 000156FC 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 00008970 00015700 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 00008974 00015704 A8 69 00 18 */ lha r3, 0x18(r9) -/* 00008978 00015708 7C 08 03 A6 */ mtlr r0 -/* 0000897C 0001570C 7C 6B 1A 14 */ add r3, r11, r3 -/* 00008980 00015710 4E 80 00 21 */ blrl -/* 00008984 00015714 81 23 00 04 */ lwz r9, 0x4(r3) -/* 00008988 00015718 A8 09 00 A8 */ lha r0, 0xa8(r9) -.L_0000898C: -/* 0000898C 0001571C 81 29 00 AC */ lwz r9, 0xac(r9) -/* 00008990 00015720 7C 63 02 14 */ add r3, r3, r0 -/* 00008994 00015724 7D 28 03 A6 */ mtlr r9 -.L_00008998: -/* 00008998 00015728 4E 80 00 21 */ blrl -/* 0000899C 0001572C 81 3C 00 04 */ lwz r9, 0x4(r28) -/* 000089A0 00015730 7C 7E 1B 78 */ mr r30, r3 -/* 000089A4 00015734 80 09 00 84 */ lwz r0, 0x84(r9) -/* 000089A8 00015738 A8 69 00 80 */ lha r3, 0x80(r9) -/* 000089AC 0001573C 7C 08 03 A6 */ mtlr r0 -/* 000089B0 00015740 7C 7C 1A 14 */ add r3, r28, r3 -/* 000089B4 00015744 4E 80 00 21 */ blrl -/* 000089B8 00015748 C1 A3 00 00 */ lfs f13, 0x0(r3) -/* 000089BC 0001574C 7F A4 EB 78 */ mr r4, r29 -/* 000089C0 00015750 38 A0 00 00 */ li r5, 0x0 -/* 000089C4 00015754 D1 A1 00 48 */ stfs f13, 0x48(r1) -/* 000089C8 00015758 C0 03 00 04 */ lfs f0, 0x4(r3) -/* 000089CC 0001575C D0 01 00 4C */ stfs f0, 0x4c(r1) -.L_000089D0: -/* 000089D0 00015760 C1 A3 00 08 */ lfs f13, 0x8(r3) -/* 000089D4 00015764 D1 A1 00 50 */ stfs f13, 0x50(r1) -/* 000089D8 00015768 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 000089DC 0001576C 80 09 01 4C */ lwz r0, 0x14c(r9) -/* 000089E0 00015770 A8 69 01 48 */ lha r3, 0x148(r9) -/* 000089E4 00015774 7C 08 03 A6 */ mtlr r0 -/* 000089E8 00015778 7C 7E 1A 14 */ add r3, r30, r3 -/* 000089EC 0001577C 4E 80 00 21 */ blrl -/* 000089F0 00015780 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 000089F4 00015784 A8 69 00 48 */ lha r3, 0x48(r9) -/* 000089F8 00015788 80 09 00 4C */ lwz r0, 0x4c(r9) -/* 000089FC 0001578C 7C 7E 1A 14 */ add r3, r30, r3 -/* 00008A00 00015790 7C 08 03 A6 */ mtlr r0 -/* 00008A04 00015794 4E 80 00 21 */ blrl -/* 00008A08 00015798 7C 64 1B 78 */ mr r4, r3 -/* 00008A0C 0001579C 7F A3 EB 78 */ mr r3, r29 -/* 00008A10 000157A0 7C 65 1B 78 */ mr r5, r3 -/* 00008A14 000157A4 48 00 00 01 */ bl VU0_v3add__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 -/* 00008A18 000157A8 C0 01 00 48 */ lfs f0, 0x48(r1) -/* 00008A1C 000157AC C1 A1 00 50 */ lfs f13, 0x50(r1) -/* 00008A20 000157B0 C1 81 00 4C */ lfs f12, 0x4c(r1) -/* 00008A24 000157B4 FC 00 00 50 */ fneg f0, f0 -/* 00008A28 000157B8 D1 A1 00 38 */ stfs f13, 0x38(r1) -/* 00008A2C 000157BC D0 01 00 3C */ stfs f0, 0x3c(r1) -/* 00008A30 000157C0 D1 81 00 40 */ stfs f12, 0x40(r1) -/* 00008A34 000157C4 3D 20 00 00 */ lis r9, .rodata+0x82C@ha -/* 00008A38 000157C8 80 7F 00 34 */ lwz r3, 0x34(r31) -/* 00008A3C 000157CC C0 29 08 2C */ lfs f1, .rodata+0x82C@l(r9) -/* 00008A40 000157D0 38 81 00 08 */ addi r4, r1, 0x8 -/* 00008A44 000157D4 80 BF 00 40 */ lwz r5, 0x40(r31) -/* 00008A48 000157D8 80 DF 00 44 */ lwz r6, 0x44(r31) -/* 00008A4C 000157DC 48 00 17 65 */ bl .L_0000A1B0 -/* 00008A50 000157E0 38 60 00 E8 */ li r3, 0xe8 -/* 00008A54 000157E4 48 00 00 01 */ bl __builtin_vec_new -/* 00008A58 000157E8 81 34 00 04 */ lwz r9, 0x4(r20) -/* 00008A5C 000157EC 7C 7C 1B 78 */ mr r28, r3 -/* 00008A60 000157F0 83 B7 00 04 */ lwz r29, 0x4(r23) -/* 00008A64 000157F4 80 09 00 34 */ lwz r0, 0x34(r9) -/* 00008A68 000157F8 A8 69 00 30 */ lha r3, 0x30(r9) -/* 00008A6C 000157FC 7C 08 03 A6 */ mtlr r0 -/* 00008A70 00015800 83 DF 00 34 */ lwz r30, 0x34(r31) -/* 00008A74 00015804 7C 74 1A 14 */ add r3, r20, r3 -/* 00008A78 00015808 4E 80 00 21 */ blrl -/* 00008A7C 0001580C 80 C3 00 24 */ lwz r6, 0x24(r3) -/* 00008A80 00015810 7F 27 CB 78 */ mr r7, r25 -/* 00008A84 00015814 39 00 00 00 */ li r8, 0x0 -/* 00008A88 00015818 39 20 00 00 */ li r9, 0x0 -/* 00008A8C 0001581C 39 40 00 01 */ li r10, 0x1 -/* 00008A90 00015820 7F A4 EB 78 */ mr r4, r29 -/* 00008A94 00015824 7F C5 F3 78 */ mr r5, r30 -/* 00008A98 00015828 7F 83 E3 78 */ mr r3, r28 -/* 00008A9C 0001582C 48 00 F1 AD */ bl FlushAllocatedTracks__8ICEGroup -/* 00008AA0 00015830 90 7F 00 2C */ stw r3, 0x2c(r31) -/* 00008AA4 00015834 38 60 00 84 */ li r3, 0x84 -/* 00008AA8 00015838 48 00 00 01 */ bl __builtin_vec_new -/* 00008AAC 0001583C 80 BF 00 34 */ lwz r5, 0x34(r31) -/* 00008AB0 00015840 38 80 00 03 */ li r4, 0x3 -/* 00008AB4 00015844 48 00 4B B1 */ bl .L_0000D664 -/* 00008AB8 00015848 90 7F 00 30 */ stw r3, 0x30(r31) -/* 00008ABC 0001584C 7F E3 FB 78 */ mr r3, r31 -/* 00008AC0 00015850 80 01 00 9C */ lwz r0, 0x9c(r1) -/* 00008AC4 00015854 81 81 00 60 */ lwz r12, 0x60(r1) -/* 00008AC8 00015858 7C 08 03 A6 */ mtlr r0 -/* 00008ACC 0001585C BA 61 00 64 */ lmw r19, 0x64(r1) -/* 00008AD0 00015860 7D 80 81 20 */ mtcrf 8, r12 -/* 00008AD4 00015864 38 21 00 98 */ addi r1, r1, 0x98 -/* 00008AD8 00015868 4E 80 00 20 */ blr -.endfn __13CDActionDrivePQ28CameraAI8DirectorP7IPlayer - -# .text:0x8ADC | size: 0x2A4 -.fn _._13CDActionDrive, global -/* 00008ADC 0001586C 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 00008AE0 00015870 7C 08 02 A6 */ mflr r0 -/* 00008AE4 00015874 BF 61 00 14 */ stmw r27, 0x14(r1) -/* 00008AE8 00015878 90 01 00 2C */ stw r0, 0x2c(r1) -/* 00008AEC 0001587C 7C 7E 1B 78 */ mr r30, r3 -.L_00008AF0: -/* 00008AF0 00015880 3D 00 00 00 */ lis r8, _vt.13CDActionDrive.11IAttachable@ha -/* 00008AF4 00015884 80 7E 00 7C */ lwz r3, 0x7c(r30) -/* 00008AF8 00015888 3D 20 00 00 */ lis r9, _vt.13CDActionDrive.Q33Sim9Collision9IListener@ha -/* 00008AFC 0001588C 3D 60 00 00 */ lis r11, _vt.13CDActionDrive.14ITrafficCenter@ha -/* 00008B00 00015890 3D 40 00 00 */ lis r10, _vt.13CDActionDrive@ha -/* 00008B04 00015894 39 08 00 00 */ addi r8, r8, _vt.13CDActionDrive.11IAttachable@l -/* 00008B08 00015898 39 29 00 00 */ addi r9, r9, _vt.13CDActionDrive.Q33Sim9Collision9IListener@l -/* 00008B0C 0001589C 39 6B 00 00 */ addi r11, r11, _vt.13CDActionDrive.14ITrafficCenter@l -/* 00008B10 000158A0 39 4A 00 00 */ addi r10, r10, _vt.13CDActionDrive@l -/* 00008B14 000158A4 3B FE 00 20 */ addi r31, r30, 0x20 -/* 00008B18 000158A8 3B 9E 00 24 */ addi r28, r30, 0x24 -/* 00008B1C 000158AC 7C 9B 23 78 */ mr r27, r4 -/* 00008B20 000158B0 91 1E 00 1C */ stw r8, 0x1c(r30) -/* 00008B24 000158B4 91 3E 00 20 */ stw r9, 0x20(r30) -/* 00008B28 000158B8 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00008B2C 000158BC 91 7E 00 28 */ stw r11, 0x28(r30) -/* 00008B30 000158C0 91 5E 00 14 */ stw r10, 0x14(r30) -/* 00008B34 000158C4 41 82 8B 3C */ beq .L_00001670 -/* 00008B38 000158C8 48 00 00 01 */ bl Destroy__Q26Hermes7HandlerPQ26Hermes13_h_HHANDLER__ -/* 00008B3C 000158CC 80 9E 00 48 */ lwz r4, 0x48(r30) -/* 00008B40 000158D0 2C 04 00 00 */ cmpwi r4, 0x0 -/* 00008B44 000158D4 41 82 8B 50 */ beq .L_00001694 -/* 00008B48 000158D8 80 7E 00 4C */ lwz r3, 0x4c(r30) -/* 00008B4C 000158DC 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -/* 00008B50 000158E0 80 9E 00 50 */ lwz r4, 0x50(r30) -/* 00008B54 000158E4 2C 04 00 00 */ cmpwi r4, 0x0 -/* 00008B58 000158E8 41 82 8B 64 */ beq .L_000016BC -/* 00008B5C 000158EC 80 7E 00 4C */ lwz r3, 0x4c(r30) -/* 00008B60 000158F0 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -/* 00008B64 000158F4 81 7E 00 30 */ lwz r11, 0x30(r30) -.L_00008B68: -/* 00008B68 000158F8 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00008B6C 000158FC 41 82 8B 8C */ beq .L_000016F8 -/* 00008B70 00015900 81 2B 00 08 */ lwz r9, 0x8(r11) -/* 00008B74 00015904 38 80 00 03 */ li r4, 0x3 -/* 00008B78 00015908 A8 69 00 10 */ lha r3, 0x10(r9) -/* 00008B7C 0001590C 80 09 00 14 */ lwz r0, 0x14(r9) -/* 00008B80 00015910 7C 6B 1A 14 */ add r3, r11, r3 -/* 00008B84 00015914 7C 08 03 A6 */ mtlr r0 -/* 00008B88 00015918 4E 80 00 21 */ blrl -/* 00008B8C 0001591C 81 7E 00 2C */ lwz r11, 0x2c(r30) -/* 00008B90 00015920 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00008B94 00015924 41 82 8B B4 */ beq .L_00001748 -/* 00008B98 00015928 81 2B 00 08 */ lwz r9, 0x8(r11) -/* 00008B9C 0001592C 38 80 00 03 */ li r4, 0x3 -.L_00008BA0: -/* 00008BA0 00015930 A8 69 00 10 */ lha r3, 0x10(r9) -/* 00008BA4 00015934 80 09 00 14 */ lwz r0, 0x14(r9) -/* 00008BA8 00015938 7C 6B 1A 14 */ add r3, r11, r3 -/* 00008BAC 0001593C 7C 08 03 A6 */ mtlr r0 -/* 00008BB0 00015940 4E 80 00 21 */ blrl -/* 00008BB4 00015944 80 7E 00 34 */ lwz r3, 0x34(r30) -/* 00008BB8 00015948 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00008BBC 0001594C 41 82 8B C8 */ beq .L_00001784 -/* 00008BC0 00015950 38 80 00 03 */ li r4, 0x3 -/* 00008BC4 00015954 48 00 13 6D */ bl .L_00009F30 -/* 00008BC8 00015958 81 7E 00 4C */ lwz r11, 0x4c(r30) -/* 00008BCC 0001595C 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00008BD0 00015960 41 82 8B F0 */ beq .L_000017C0 -/* 00008BD4 00015964 81 2B 00 0C */ lwz r9, 0xc(r11) -.L_00008BD8: -/* 00008BD8 00015968 38 80 00 03 */ li r4, 0x3 -/* 00008BDC 0001596C A8 69 00 08 */ lha r3, 0x8(r9) -/* 00008BE0 00015970 80 09 00 0C */ lwz r0, 0xc(r9) -/* 00008BE4 00015974 7C 6B 1A 14 */ add r3, r11, r3 -.L_00008BE8: -/* 00008BE8 00015978 7C 08 03 A6 */ mtlr r0 -/* 00008BEC 0001597C 4E 80 00 21 */ blrl -.L_00008BF0: -/* 00008BF0 00015980 3B A1 00 08 */ addi r29, r1, 0x8 -/* 00008BF4 00015984 7F E3 FB 78 */ mr r3, r31 -/* 00008BF8 00015988 48 00 00 01 */ bl RemoveListener__Q23Sim9CollisionPQ33Sim9Collision9IListener -/* 00008BFC 0001598C 38 7E 00 38 */ addi r3, r30, 0x38 -/* 00008C00 00015990 38 80 00 02 */ li r4, 0x2 -/* 00008C04 00015994 48 00 00 01 */ bl _._Q29WorldConn9Reference -/* 00008C08 00015998 3D 20 00 00 */ lis r9, _vt.14ITrafficCenter@ha -/* 00008C0C 0001599C 3D 40 00 00 */ lis r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha -/* 00008C10 000159A0 39 29 00 00 */ addi r9, r9, _vt.14ITrafficCenter@l -/* 00008C14 000159A4 39 6A 00 00 */ addi r11, r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l -/* 00008C18 000159A8 91 3E 00 28 */ stw r9, 0x28(r30) -/* 00008C1C 000159AC 7F A5 EB 78 */ mr r5, r29 -.L_00008C20: -/* 00008C20 000159B0 93 81 00 08 */ stw r28, 0x8(r1) -/* 00008C24 000159B4 80 6A 00 00 */ lwz r3, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r10) -.L_00008C28: -/* 00008C28 000159B8 80 0B 00 08 */ lwz r0, 0x8(r11) -/* 00008C2C 000159BC 54 00 10 3A */ slwi r0, r0, 2 -/* 00008C30 000159C0 7F E3 02 14 */ add r31, r3, r0 -/* 00008C34 000159C4 7F E4 FB 78 */ mr r4, r31 -.L_00008C38: -/* 00008C38 000159C8 48 00 00 01 */ bl find__H2ZPP14ITrafficCenterZP14ITrafficCenter_4_STLX01X01RCX11_X01 -/* 00008C3C 000159CC 7C 03 F8 00 */ cmpw r3, r31 -/* 00008C40 000159D0 40 82 8C 50 */ bne .L_00001890 -/* 00008C44 000159D4 7F E3 FB 78 */ mr r3, r31 -.L_00008C48: -/* 00008C48 000159D8 38 9E 00 18 */ addi r4, r30, 0x18 -/* 00008C4C 000159DC 48 00 8C 84 */ b .L_000118D0 -/* 00008C50 000159E0 39 63 00 04 */ addi r11, r3, 0x4 -/* 00008C54 000159E4 38 9E 00 18 */ addi r4, r30, 0x18 -/* 00008C58 000159E8 7C 0B F8 00 */ cmpw r11, r31 -/* 00008C5C 000159EC 41 82 8C 84 */ beq .L_000018E0 -.L_00008C60: -/* 00008C60 000159F0 81 2B 00 00 */ lwz r9, 0x0(r11) -/* 00008C64 000159F4 80 1D 00 00 */ lwz r0, 0x0(r29) -/* 00008C68 000159F8 7C 09 00 00 */ cmpw r9, r0 -/* 00008C6C 000159FC 41 82 8C 78 */ beq .L_000018E4 -.L_00008C70: -/* 00008C70 00015A00 91 23 00 00 */ stw r9, 0x0(r3) -/* 00008C74 00015A04 38 63 00 04 */ addi r3, r3, 0x4 -/* 00008C78 00015A08 39 6B 00 04 */ addi r11, r11, 0x4 -/* 00008C7C 00015A0C 7C 0B F8 00 */ cmpw r11, r31 -/* 00008C80 00015A10 40 82 8C 60 */ bne .L_000018E0 -/* 00008C84 00015A14 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha -/* 00008C88 00015A18 38 A9 00 00 */ addi r5, r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l -/* 00008C8C 00015A1C 81 49 00 00 */ lwz r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r9) -/* 00008C90 00015A20 81 05 00 08 */ lwz r8, 0x8(r5) -/* 00008C94 00015A24 55 00 10 3A */ slwi r0, r8, 2 -/* 00008C98 00015A28 7D 6A 02 14 */ add r11, r10, r0 -/* 00008C9C 00015A2C 7C 03 58 00 */ cmpw r3, r11 -/* 00008CA0 00015A30 41 82 8D 18 */ beq .L_000019B8 -/* 00008CA4 00015A34 7D 23 58 50 */ subf r9, r3, r11 -/* 00008CA8 00015A38 7C 0A 18 50 */ subf r0, r10, r3 -/* 00008CAC 00015A3C 7D 3F 16 70 */ srawi r31, r9, 2 -/* 00008CB0 00015A40 7C 06 16 70 */ srawi r6, r0, 2 -/* 00008CB4 00015A44 7D 09 43 78 */ mr r9, r8 -/* 00008CB8 00015A48 38 63 00 04 */ addi r3, r3, 0x4 -/* 00008CBC 00015A4C 7C 03 58 00 */ cmpw r3, r11 -/* 00008CC0 00015A50 40 82 8C B8 */ bne .L_00001978 -/* 00008CC4 00015A54 7C E6 FA 14 */ add r7, r6, r31 -/* 00008CC8 00015A58 39 00 00 00 */ li r8, 0x0 -/* 00008CCC 00015A5C 7C E3 3B 78 */ mr r3, r7 -/* 00008CD0 00015A60 7C 03 48 50 */ subf r0, r3, r9 -/* 00008CD4 00015A64 7C 08 00 40 */ cmplw r8, r0 -/* 00008CD8 00015A68 40 80 8D 10 */ bge GetCurrentCamera__Fv -/* 00008CDC 00015A6C 7C 06 42 14 */ add r0, r6, r8 -/* 00008CE0 00015A70 81 65 00 00 */ lwz r11, 0x0(r5) -/* 00008CE4 00015A74 54 0A 10 3A */ slwi r10, r0, 2 -/* 00008CE8 00015A78 7D 27 42 14 */ add r9, r7, r8 -/* 00008CEC 00015A7C 7C 0A 5A 14 */ add r0, r10, r11 -/* 00008CF0 00015A80 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00008CF4 00015A84 41 82 8D 04 */ beq .L_000019F8 -/* 00008CF8 00015A88 55 29 10 3A */ slwi r9, r9, 2 -/* 00008CFC 00015A8C 7C 09 58 2E */ lwzx r0, r9, r11 -/* 00008D00 00015A90 7C 0A 59 2E */ stwx r0, r10, r11 -/* 00008D04 00015A94 39 08 00 01 */ addi r8, r8, 0x1 -/* 00008D08 00015A98 81 25 00 08 */ lwz r9, 0x8(r5) -/* 00008D0C 00015A9C 48 00 8C D0 */ b .L_000119DC -/* 00008D10 00015AA0 7C 1F 48 50 */ subf r0, r31, r9 -/* 00008D14 00015AA4 90 05 00 08 */ stw r0, 0x8(r5) -/* 00008D18 00015AA8 3D 20 00 00 */ lis r9, _vt.Q33UTL3COM8IUnknown@ha -/* 00008D1C 00015AAC 80 7E 00 18 */ lwz r3, 0x18(r30) -/* 00008D20 00015AB0 39 29 00 00 */ addi r9, r9, _vt.Q33UTL3COM8IUnknown@l -/* 00008D24 00015AB4 91 3E 00 1C */ stw r9, 0x1c(r30) -/* 00008D28 00015AB8 48 00 00 01 */ bl Remove__Q43UTL3COM6Object6_IListPQ33UTL3COM8IUnknown -/* 00008D2C 00015ABC 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha -/* 00008D30 00015AC0 7F C3 F3 78 */ mr r3, r30 -/* 00008D34 00015AC4 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l -/* 00008D38 00015AC8 38 80 00 02 */ li r4, 0x2 -/* 00008D3C 00015ACC 91 3E 00 14 */ stw r9, 0x14(r30) -/* 00008D40 00015AD0 48 00 00 01 */ bl _._Q43UTL3COM6Object6_IList -/* 00008D44 00015AD4 73 60 00 01 */ andi. r0, r27, 0x1 -/* 00008D48 00015AD8 41 82 8D 6C */ beq .L_00001AB4 -/* 00008D4C 00015ADC 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 00008D50 00015AE0 41 82 8D 6C */ beq .L_00001ABC -/* 00008D54 00015AE4 3C 60 00 00 */ lis r3, gFastMem@ha -/* 00008D58 00015AE8 7F C4 F3 78 */ mr r4, r30 -/* 00008D5C 00015AEC 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 00008D60 00015AF0 38 A0 00 80 */ li r5, 0x80 -/* 00008D64 00015AF4 38 C0 00 00 */ li r6, 0x0 -/* 00008D68 00015AF8 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 00008D6C 00015AFC 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 00008D70 00015B00 7C 08 03 A6 */ mtlr r0 -/* 00008D74 00015B04 BB 61 00 14 */ lmw r27, 0x14(r1) -/* 00008D78 00015B08 38 21 00 28 */ addi r1, r1, 0x28 -/* 00008D7C 00015B0C 4E 80 00 20 */ blr -.endfn _._13CDActionDrive - -# .text:0x8D80 | size: 0x30 -# CDActionDrive::Reset -.fn Reset__13CDActionDrive, global -/* 00008D80 00015B10 3D 20 00 00 */ lis r9, .rodata+0x840@ha -/* 00008D84 00015B14 38 00 00 00 */ li r0, 0x0 -/* 00008D88 00015B18 C0 09 08 40 */ lfs f0, .rodata+0x840@l(r9) -/* 00008D8C 00015B1C 90 03 00 78 */ stw r0, 0x78(r3) -/* 00008D90 00015B20 D0 03 00 70 */ stfs f0, 0x70(r3) -/* 00008D94 00015B24 D0 03 00 54 */ stfs f0, 0x54(r3) -/* 00008D98 00015B28 D0 03 00 5C */ stfs f0, 0x5c(r3) -/* 00008D9C 00015B2C D0 03 00 60 */ stfs f0, 0x60(r3) -/* 00008DA0 00015B30 D0 03 00 64 */ stfs f0, 0x64(r3) -/* 00008DA4 00015B34 D0 03 00 6C */ stfs f0, 0x6c(r3) -/* 00008DA8 00015B38 90 03 00 74 */ stw r0, 0x74(r3) -/* 00008DAC 00015B3C 4E 80 00 20 */ blr -.endfn Reset__13CDActionDrive - -# .text:0x8DB0 | size: 0xB4 -.fn OnDetached__13CDActionDriveP11IAttachable, global -/* 00008DB0 00015B40 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 00008DB4 00015B44 7C 08 02 A6 */ mflr r0 -/* 00008DB8 00015B48 90 01 00 0C */ stw r0, 0xc(r1) -/* 00008DBC 00015B4C 7C 84 23 79 */ mr. r4, r4 -/* 00008DC0 00015B50 81 23 00 48 */ lwz r9, 0x48(r3) -/* 00008DC4 00015B54 4F 80 00 00 */ mcrf cr7, cr0 -/* 00008DC8 00015B58 41 9E 8D EC */ beq cr7, .L_00001BB4 -/* 00008DCC 00015B5C 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00008DD0 00015B60 41 82 8D EC */ beq .L_00001BBC -/* 00008DD4 00015B64 81 29 00 00 */ lwz r9, 0x0(r9) -/* 00008DD8 00015B68 80 04 00 00 */ lwz r0, 0x0(r4) -/* 00008DDC 00015B6C 7C 00 4A 78 */ xor r0, r0, r9 -/* 00008DE0 00015B70 21 60 00 00 */ subfic r11, r0, 0x0 -/* 00008DE4 00015B74 7C 0B 01 14 */ adde r0, r11, r0 -/* 00008DE8 00015B78 48 00 8E 00 */ b .L_00011BE8 -/* 00008DEC 00015B7C 38 00 00 00 */ li r0, 0x0 -/* 00008DF0 00015B80 2F 84 00 00 */ cmpwi cr7, r4, 0x0 -/* 00008DF4 00015B84 40 9E 8E 00 */ bne cr7, .L_00001BF4 -/* 00008DF8 00015B88 21 69 00 00 */ subfic r11, r9, 0x0 -/* 00008DFC 00015B8C 7C 0B 49 14 */ adde r0, r11, r9 -/* 00008E00 00015B90 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00008E04 00015B94 41 82 8E 10 */ beq .L_00001C14 -/* 00008E08 00015B98 38 00 00 00 */ li r0, 0x0 -/* 00008E0C 00015B9C 90 03 00 48 */ stw r0, 0x48(r3) -/* 00008E10 00015BA0 81 63 00 50 */ lwz r11, 0x50(r3) -/* 00008E14 00015BA4 41 9E 8E 38 */ beq cr7, .L_00001C4C -/* 00008E18 00015BA8 2C 0B 00 00 */ cmpwi r11, 0x0 -.L_00008E1C: -/* 00008E1C 00015BAC 41 82 8E 38 */ beq .L_00001C54 -/* 00008E20 00015BB0 81 24 00 00 */ lwz r9, 0x0(r4) -/* 00008E24 00015BB4 80 0B 00 00 */ lwz r0, 0x0(r11) -/* 00008E28 00015BB8 7D 20 02 78 */ xor r0, r9, r0 -/* 00008E2C 00015BBC 21 60 00 00 */ subfic r11, r0, 0x0 -/* 00008E30 00015BC0 7C 0B 01 14 */ adde r0, r11, r0 -/* 00008E34 00015BC4 48 00 8E 48 */ b .L_00011C7C -/* 00008E38 00015BC8 38 00 00 00 */ li r0, 0x0 -/* 00008E3C 00015BCC 40 9E 8E 48 */ bne cr7, .L_00001C84 -/* 00008E40 00015BD0 21 2B 00 00 */ subfic r9, r11, 0x0 -/* 00008E44 00015BD4 7C 09 59 14 */ adde r0, r9, r11 -/* 00008E48 00015BD8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00008E4C 00015BDC 41 82 8E 54 */ beq .L_00001CA0 -/* 00008E50 00015BE0 48 00 8E 65 */ bl .L_00011CB4 -/* 00008E54 00015BE4 80 01 00 0C */ lwz r0, 0xc(r1) -/* 00008E58 00015BE8 7C 08 03 A6 */ mtlr r0 -/* 00008E5C 00015BEC 38 21 00 08 */ addi r1, r1, 0x8 -/* 00008E60 00015BF0 4E 80 00 20 */ blr -.endfn OnDetached__13CDActionDriveP11IAttachable - -# .text:0x8E64 | size: 0x78 -# CDActionDrive::OnCarDetached -.fn OnCarDetached__13CDActionDrive, global -/* 00008E64 00015BF4 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00008E68 00015BF8 7C 08 02 A6 */ mflr r0 -/* 00008E6C 00015BFC 93 E1 00 0C */ stw r31, 0xc(r1) -/* 00008E70 00015C00 90 01 00 14 */ stw r0, 0x14(r1) -/* 00008E74 00015C04 7C 7F 1B 78 */ mr r31, r3 -/* 00008E78 00015C08 80 9F 00 50 */ lwz r4, 0x50(r31) -/* 00008E7C 00015C0C 38 7F 00 20 */ addi r3, r31, 0x20 -/* 00008E80 00015C10 48 00 00 01 */ bl RemoveListener__Q23Sim9CollisionPQ33Sim9Collision9IListenerPCQ33UTL3COM8IUnknown -/* 00008E84 00015C14 80 1F 00 3C */ lwz r0, 0x3c(r31) -/* 00008E88 00015C18 38 7F 00 38 */ addi r3, r31, 0x38 -/* 00008E8C 00015C1C 39 20 00 01 */ li r9, 0x1 -/* 00008E90 00015C20 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00008E94 00015C24 40 82 8E 9C */ bne .L_00001D30 -.L_00008E98: -/* 00008E98 00015C28 39 20 00 00 */ li r9, 0x0 -/* 00008E9C 00015C2C 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00008EA0 00015C30 41 82 8E AC */ beq .L_00001D4C -/* 00008EA4 00015C34 38 80 00 00 */ li r4, 0x0 -/* 00008EA8 00015C38 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi -/* 00008EAC 00015C3C 81 3F 00 34 */ lwz r9, 0x34(r31) -/* 00008EB0 00015C40 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00008EB4 00015C44 41 82 8E C0 */ beq .L_00001D74 -/* 00008EB8 00015C48 38 00 00 00 */ li r0, 0x0 -/* 00008EBC 00015C4C 90 09 00 8C */ stw r0, 0x8c(r9) -/* 00008EC0 00015C50 38 00 00 00 */ li r0, 0x0 -.L_00008EC4: -/* 00008EC4 00015C54 90 1F 00 50 */ stw r0, 0x50(r31) -/* 00008EC8 00015C58 80 01 00 14 */ lwz r0, 0x14(r1) -/* 00008ECC 00015C5C 7C 08 03 A6 */ mtlr r0 -/* 00008ED0 00015C60 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 00008ED4 00015C64 38 21 00 10 */ addi r1, r1, 0x10 -/* 00008ED8 00015C68 4E 80 00 20 */ blr -.endfn OnCarDetached__13CDActionDrive - -# .text:0x8EDC | size: 0x198 -.fn OnCollision__13CDActionDriveRCQ33Sim9Collision4Info, global -/* 00008EDC 00015C6C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00008EE0 00015C70 7C 08 02 A6 */ mflr r0 -/* 00008EE4 00015C74 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 00008EE8 00015C78 90 01 00 14 */ stw r0, 0x14(r1) -/* 00008EEC 00015C7C 7C 9E 23 78 */ mr r30, r4 -/* 00008EF0 00015C80 7C 7F 1B 78 */ mr r31, r3 -/* 00008EF4 00015C84 38 7E 00 20 */ addi r3, r30, 0x20 -/* 00008EF8 00015C88 48 00 00 01 */ bl VU0_v3lengthsquare__FRCQ25UMath7Vector3 -/* 00008EFC 00015C8C 48 00 00 01 */ bl VU0_sqrt__Ff -.L_00008F00: -/* 00008F00 00015C90 80 1E 00 1C */ lwz r0, 0x1c(r30) -/* 00008F04 00015C94 7C 00 EE 70 */ srawi r0, r0, 29 -/* 00008F08 00015C98 2C 00 00 02 */ cmpwi r0, 0x2 -/* 00008F0C 00015C9C 41 82 8F 94 */ beq .L_00001EA0 -/* 00008F10 00015CA0 41 81 8F 20 */ bgt .L_00001E30 -/* 00008F14 00015CA4 2C 00 00 01 */ cmpwi r0, 0x1 -/* 00008F18 00015CA8 41 82 8F 2C */ beq .L_00001E44 -/* 00008F1C 00015CAC 48 00 90 60 */ b .L_00011F7C -/* 00008F20 00015CB0 2C 00 00 03 */ cmpwi r0, 0x3 -/* 00008F24 00015CB4 41 82 8F FC */ beq .L_00001F20 -/* 00008F28 00015CB8 48 00 90 60 */ b .L_00011F88 -/* 00008F2C 00015CBC 3D 20 00 00 */ lis r9, .rodata+0x844@ha -/* 00008F30 00015CC0 C0 09 08 44 */ lfs f0, .rodata+0x844@l(r9) -/* 00008F34 00015CC4 FC 01 00 00 */ fcmpu cr0, f1, f0 -/* 00008F38 00015CC8 4C 62 03 82 */ cror un, eq, lt -.L_00008F3C: -/* 00008F3C 00015CCC 41 83 90 60 */ bso .L_00001F9C -/* 00008F40 00015CD0 3D 20 00 00 */ lis r9, .rodata+0x848@ha -/* 00008F44 00015CD4 3D 60 00 00 */ lis r11, .rodata+0x84C@ha -/* 00008F48 00015CD8 C1 89 08 48 */ lfs f12, .rodata+0x848@l(r9) -/* 00008F4C 00015CDC EC 01 00 28 */ fsubs f0, f1, f0 -/* 00008F50 00015CE0 C1 AB 08 4C */ lfs f13, .rodata+0x84C@l(r11) -/* 00008F54 00015CE4 EC 00 03 32 */ fmuls f0, f0, f12 -/* 00008F58 00015CE8 FD 80 68 90 */ fmr f12, f13 -/* 00008F5C 00015CEC FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00008F60 00015CF0 4C 62 0B 82 */ cror un, eq, gt -/* 00008F64 00015CF4 41 83 8F 6C */ bso .L_00001ED0 -/* 00008F68 00015CF8 FD 80 00 90 */ fmr f12, f0 -/* 00008F6C 00015CFC C0 1F 00 68 */ lfs f0, 0x68(r31) -/* 00008F70 00015D00 C1 BF 00 64 */ lfs f13, 0x64(r31) -/* 00008F74 00015D04 EC 0C 00 32 */ fmuls f0, f12, f0 -.L_00008F78: -/* 00008F78 00015D08 FD 80 68 90 */ fmr f12, f13 -/* 00008F7C 00015D0C FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00008F80 00015D10 4C 62 03 82 */ cror un, eq, lt -/* 00008F84 00015D14 41 83 8F 8C */ bso .L_00001F10 -.L_00008F88: -/* 00008F88 00015D18 FD 80 00 90 */ fmr f12, f0 -/* 00008F8C 00015D1C D1 9F 00 64 */ stfs f12, 0x64(r31) -/* 00008F90 00015D20 48 00 90 60 */ b .L_00011FF0 -/* 00008F94 00015D24 3D 20 00 00 */ lis r9, .rodata+0x850@ha -/* 00008F98 00015D28 C0 09 08 50 */ lfs f0, .rodata+0x850@l(r9) -/* 00008F9C 00015D2C FC 01 00 00 */ fcmpu cr0, f1, f0 -/* 00008FA0 00015D30 4C 62 03 82 */ cror un, eq, lt -/* 00008FA4 00015D34 41 83 90 60 */ bso .L_00002004 -/* 00008FA8 00015D38 3D 20 00 00 */ lis r9, .rodata+0x854@ha -/* 00008FAC 00015D3C 3D 60 00 00 */ lis r11, .rodata+0x84C@ha -/* 00008FB0 00015D40 C1 89 08 54 */ lfs f12, .rodata+0x854@l(r9) -/* 00008FB4 00015D44 EC 01 00 28 */ fsubs f0, f1, f0 -/* 00008FB8 00015D48 C1 AB 08 4C */ lfs f13, .rodata+0x84C@l(r11) -/* 00008FBC 00015D4C EC 00 03 32 */ fmuls f0, f0, f12 -/* 00008FC0 00015D50 FD 80 68 90 */ fmr f12, f13 -/* 00008FC4 00015D54 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00008FC8 00015D58 4C 62 0B 82 */ cror un, eq, gt -/* 00008FCC 00015D5C 41 83 8F D4 */ bso .L_00001FA0 -/* 00008FD0 00015D60 FD 80 00 90 */ fmr f12, f0 -/* 00008FD4 00015D64 C0 1F 00 68 */ lfs f0, 0x68(r31) -/* 00008FD8 00015D68 C1 BF 00 5C */ lfs f13, 0x5c(r31) -/* 00008FDC 00015D6C EC 0C 00 32 */ fmuls f0, f12, f0 -/* 00008FE0 00015D70 FD 80 68 90 */ fmr f12, f13 -/* 00008FE4 00015D74 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00008FE8 00015D78 4C 62 03 82 */ cror un, eq, lt -/* 00008FEC 00015D7C 41 83 8F F4 */ bso .L_00001FE0 -/* 00008FF0 00015D80 FD 80 00 90 */ fmr f12, f0 -/* 00008FF4 00015D84 D1 9F 00 5C */ stfs f12, 0x5c(r31) -/* 00008FF8 00015D88 48 00 90 60 */ b .L_00012058 -/* 00008FFC 00015D8C 3D 20 00 00 */ lis r9, .rodata+0x858@ha -/* 00009000 00015D90 C0 09 08 58 */ lfs f0, .rodata+0x858@l(r9) -/* 00009004 00015D94 FC 01 00 00 */ fcmpu cr0, f1, f0 -/* 00009008 00015D98 4C 62 03 82 */ cror un, eq, lt -/* 0000900C 00015D9C 41 83 90 60 */ bso .L_0000206C -/* 00009010 00015DA0 3D 20 00 00 */ lis r9, .rodata+0x85C@ha -/* 00009014 00015DA4 3D 60 00 00 */ lis r11, .rodata+0x84C@ha -/* 00009018 00015DA8 C1 89 08 5C */ lfs f12, .rodata+0x85C@l(r9) -/* 0000901C 00015DAC EC 01 00 28 */ fsubs f0, f1, f0 -/* 00009020 00015DB0 C1 AB 08 4C */ lfs f13, .rodata+0x84C@l(r11) -/* 00009024 00015DB4 EC 00 03 32 */ fmuls f0, f0, f12 -/* 00009028 00015DB8 FD 80 68 90 */ fmr f12, f13 -.L_0000902C: -/* 0000902C 00015DBC FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00009030 00015DC0 4C 62 0B 82 */ cror un, eq, gt -/* 00009034 00015DC4 41 83 90 3C */ bso .L_00002070 -/* 00009038 00015DC8 FD 80 00 90 */ fmr f12, f0 -.L_0000903C: -/* 0000903C 00015DCC C0 1F 00 68 */ lfs f0, 0x68(r31) -/* 00009040 00015DD0 C1 BF 00 60 */ lfs f13, 0x60(r31) -.L_00009044: -/* 00009044 00015DD4 EC 0C 00 32 */ fmuls f0, f12, f0 -/* 00009048 00015DD8 FD 80 68 90 */ fmr f12, f13 -/* 0000904C 00015DDC FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00009050 00015DE0 4C 62 03 82 */ cror un, eq, lt -/* 00009054 00015DE4 41 83 90 5C */ bso Render__11CameraMoverP5eView -/* 00009058 00015DE8 FD 80 00 90 */ fmr f12, f0 -/* 0000905C 00015DEC D1 9F 00 60 */ stfs f12, 0x60(r31) -/* 00009060 00015DF0 80 01 00 14 */ lwz r0, 0x14(r1) -/* 00009064 00015DF4 7C 08 03 A6 */ mtlr r0 -/* 00009068 00015DF8 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 0000906C 00015DFC 38 21 00 10 */ addi r1, r1, 0x10 -/* 00009070 00015E00 4E 80 00 20 */ blr -.endfn OnCollision__13CDActionDriveRCQ33Sim9Collision4Info - -# .text:0x9074 | size: 0x2B4 -# CDActionDrive::AquireCar -.fn AquireCar__13CDActionDrive, global -/* 00009074 00015E04 94 21 FF C8 */ stwu r1, -0x38(r1) -/* 00009078 00015E08 7C 08 02 A6 */ mflr r0 -/* 0000907C 00015E0C BF A1 00 2C */ stmw r29, 0x2c(r1) -/* 00009080 00015E10 90 01 00 3C */ stw r0, 0x3c(r1) -/* 00009084 00015E14 7C 7F 1B 78 */ mr r31, r3 -/* 00009088 00015E18 81 7F 00 48 */ lwz r11, 0x48(r31) -/* 0000908C 00015E1C 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00009090 00015E20 41 82 93 14 */ beq .L_000023A4 -/* 00009094 00015E24 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 00009098 00015E28 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000909C 00015E2C 80 09 00 14 */ lwz r0, 0x14(r9) -/* 000090A0 00015E30 7C 6B 1A 14 */ add r3, r11, r3 -/* 000090A4 00015E34 7C 08 03 A6 */ mtlr r0 -/* 000090A8 00015E38 4E 80 00 21 */ blrl -/* 000090AC 00015E3C 81 7F 00 50 */ lwz r11, 0x50(r31) -/* 000090B0 00015E40 7C 63 1B 79 */ mr. r3, r3 -/* 000090B4 00015E44 41 82 90 D8 */ beq OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv -/* 000090B8 00015E48 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 000090BC 00015E4C 41 82 90 D8 */ beq .L_00002194 -/* 000090C0 00015E50 81 23 00 00 */ lwz r9, 0x0(r3) -/* 000090C4 00015E54 80 0B 00 00 */ lwz r0, 0x0(r11) -/* 000090C8 00015E58 7D 3E 02 78 */ xor r30, r9, r0 -/* 000090CC 00015E5C 21 7E 00 00 */ subfic r11, r30, 0x0 -/* 000090D0 00015E60 7F CB F1 14 */ adde r30, r11, r30 -/* 000090D4 00015E64 48 00 90 F0 */ b .L_000121C4 -/* 000090D8 00015E68 2C 03 00 00 */ cmpwi r3, 0x0 -.L_000090DC: -/* 000090DC 00015E6C 38 00 00 00 */ li r0, 0x0 -/* 000090E0 00015E70 40 82 90 EC */ bne .L_000021CC -.L_000090E4: -/* 000090E4 00015E74 21 2B 00 00 */ subfic r9, r11, 0x0 -/* 000090E8 00015E78 7C 09 59 14 */ adde r0, r9, r11 -/* 000090EC 00015E7C 7C 1E 03 78 */ mr r30, r0 -/* 000090F0 00015E80 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 000090F4 00015E84 40 82 91 24 */ bne .L_00002218 -/* 000090F8 00015E88 80 9F 00 50 */ lwz r4, 0x50(r31) -/* 000090FC 00015E8C 2C 04 00 00 */ cmpwi r4, 0x0 -/* 00009100 00015E90 41 82 91 30 */ beq .L_00002230 -/* 00009104 00015E94 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 00009108 00015E98 38 1F 00 18 */ addi r0, r31, 0x18 -/* 0000910C 00015E9C A8 69 00 18 */ lha r3, 0x18(r9) -/* 00009110 00015EA0 81 29 00 1C */ lwz r9, 0x1c(r9) -/* 00009114 00015EA4 7C 60 1A 14 */ add r3, r0, r3 -/* 00009118 00015EA8 7D 28 03 A6 */ mtlr r9 -.L_0000911C: -/* 0000911C 00015EAC 4E 80 00 21 */ blrl -/* 00009120 00015EB0 93 DF 00 50 */ stw r30, 0x50(r31) -/* 00009124 00015EB4 80 1F 00 50 */ lwz r0, 0x50(r31) -/* 00009128 00015EB8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000912C 00015EBC 40 82 93 14 */ bne .L_00002440 -/* 00009130 00015EC0 80 7F 00 48 */ lwz r3, 0x48(r31) -/* 00009134 00015EC4 81 23 00 04 */ lwz r9, 0x4(r3) -/* 00009138 00015EC8 A8 09 00 10 */ lha r0, 0x10(r9) -.L_0000913C: -/* 0000913C 00015ECC 81 29 00 14 */ lwz r9, 0x14(r9) -/* 00009140 00015ED0 7C 63 02 14 */ add r3, r3, r0 -/* 00009144 00015ED4 7D 28 03 A6 */ mtlr r9 -/* 00009148 00015ED8 4E 80 00 21 */ blrl -/* 0000914C 00015EDC 7C 7D 1B 79 */ mr. r29, r3 -/* 00009150 00015EE0 41 82 93 14 */ beq .L_00002464 -/* 00009154 00015EE4 81 3D 00 04 */ lwz r9, 0x4(r29) -/* 00009158 00015EE8 3B DF 00 38 */ addi r30, r31, 0x38 -/* 0000915C 00015EEC 80 09 00 EC */ lwz r0, 0xec(r9) -.L_00009160: -/* 00009160 00015EF0 A8 69 00 E8 */ lha r3, 0xe8(r9) -/* 00009164 00015EF4 7C 08 03 A6 */ mtlr r0 -/* 00009168 00015EF8 7C 7D 1A 14 */ add r3, r29, r3 -/* 0000916C 00015EFC 4E 80 00 21 */ blrl -/* 00009170 00015F00 7C 64 1B 78 */ mr r4, r3 -.L_00009174: -/* 00009174 00015F04 7F C3 F3 78 */ mr r3, r30 -/* 00009178 00015F08 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi -.L_0000917C: -/* 0000917C 00015F0C 80 1F 00 3C */ lwz r0, 0x3c(r31) -/* 00009180 00015F10 39 20 00 01 */ li r9, 0x1 -/* 00009184 00015F14 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00009188 00015F18 40 82 91 90 */ bne .L_00002318 -/* 0000918C 00015F1C 39 20 00 00 */ li r9, 0x0 -/* 00009190 00015F20 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00009194 00015F24 41 82 93 14 */ beq .L_000024A8 -/* 00009198 00015F28 3C 80 00 00 */ lis r4, _IHandle__8IVehicle@ha -/* 0000919C 00015F2C 80 7D 00 00 */ lwz r3, 0x0(r29) -/* 000091A0 00015F30 38 84 00 00 */ addi r4, r4, _IHandle__8IVehicle@l -/* 000091A4 00015F34 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 000091A8 00015F38 38 00 00 01 */ li r0, 0x1 -.L_000091AC: -/* 000091AC 00015F3C 90 7F 00 50 */ stw r3, 0x50(r31) -/* 000091B0 00015F40 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000091B4 00015F44 40 82 91 BC */ bne .L_00002370 -/* 000091B8 00015F48 38 00 00 00 */ li r0, 0x0 -/* 000091BC 00015F4C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000091C0 00015F50 41 82 93 14 */ beq .L_000024D4 -/* 000091C4 00015F54 81 3F 00 1C */ lwz r9, 0x1c(r31) -.L_000091C8: -/* 000091C8 00015F58 7C 64 1B 78 */ mr r4, r3 -/* 000091CC 00015F5C 38 1F 00 18 */ addi r0, r31, 0x18 -/* 000091D0 00015F60 A8 69 00 10 */ lha r3, 0x10(r9) -/* 000091D4 00015F64 81 29 00 14 */ lwz r9, 0x14(r9) -/* 000091D8 00015F68 7C 60 1A 14 */ add r3, r0, r3 -/* 000091DC 00015F6C 7D 28 03 A6 */ mtlr r9 -/* 000091E0 00015F70 4E 80 00 21 */ blrl -/* 000091E4 00015F74 80 9F 00 50 */ lwz r4, 0x50(r31) -/* 000091E8 00015F78 3C A0 00 00 */ lis r5, .rodata+0x824@ha -/* 000091EC 00015F7C 38 7F 00 20 */ addi r3, r31, 0x20 -/* 000091F0 00015F80 38 A5 08 24 */ addi r5, r5, .rodata+0x824@l -/* 000091F4 00015F84 48 00 00 01 */ bl AddListener__Q23Sim9CollisionPQ33Sim9Collision9IListenerPQ33UTL3COM8IUnknownPCc -/* 000091F8 00015F88 81 7F 00 50 */ lwz r11, 0x50(r31) -/* 000091FC 00015F8C 83 DF 00 34 */ lwz r30, 0x34(r31) -/* 00009200 00015F90 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 00009204 00015F94 A8 69 00 98 */ lha r3, 0x98(r9) -/* 00009208 00015F98 80 09 00 9C */ lwz r0, 0x9c(r9) -/* 0000920C 00015F9C 7C 6B 1A 14 */ add r3, r11, r3 -/* 00009210 00015FA0 7C 08 03 A6 */ mtlr r0 -/* 00009214 00015FA4 4E 80 00 21 */ blrl -/* 00009218 00015FA8 81 23 00 08 */ lwz r9, 0x8(r3) -/* 0000921C 00015FAC 80 69 00 1C */ lwz r3, 0x1c(r9) -/* 00009220 00015FB0 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00009224 00015FB4 40 82 92 30 */ bne .L_00002454 -/* 00009228 00015FB8 3D 20 00 00 */ lis r9, .rodata@ha -/* 0000922C 00015FBC 38 69 00 00 */ addi r3, r9, .rodata@l -/* 00009230 00015FC0 48 00 00 01 */ bl bStringHash__FPCc -/* 00009234 00015FC4 7C 64 1B 78 */ mr r4, r3 -/* 00009238 00015FC8 7F C3 F3 78 */ mr r3, r30 -/* 0000923C 00015FCC 48 00 13 CD */ bl .L_0000A608 -.L_00009240: -/* 00009240 00015FD0 80 1F 00 38 */ lwz r0, 0x38(r31) -/* 00009244 00015FD4 81 3F 00 34 */ lwz r9, 0x34(r31) -/* 00009248 00015FD8 90 09 00 8C */ stw r0, 0x8c(r9) -.L_0000924C: -/* 0000924C 00015FDC 81 7D 00 04 */ lwz r11, 0x4(r29) -/* 00009250 00015FE0 80 0B 00 AC */ lwz r0, 0xac(r11) -/* 00009254 00015FE4 A8 6B 00 A8 */ lha r3, 0xa8(r11) -.L_00009258: -/* 00009258 00015FE8 7C 08 03 A6 */ mtlr r0 -.L_0000925C: -/* 0000925C 00015FEC 7C 7D 1A 14 */ add r3, r29, r3 -/* 00009260 00015FF0 4E 80 00 21 */ blrl -/* 00009264 00015FF4 7C 64 1B 78 */ mr r4, r3 -/* 00009268 00015FF8 81 24 00 04 */ lwz r9, 0x4(r4) -/* 0000926C 00015FFC 38 61 00 08 */ addi r3, r1, 0x8 -/* 00009270 00016000 A8 09 00 A0 */ lha r0, 0xa0(r9) -/* 00009274 00016004 81 29 00 A4 */ lwz r9, 0xa4(r9) -/* 00009278 00016008 7C 84 02 14 */ add r4, r4, r0 -/* 0000927C 0001600C 7D 28 03 A6 */ mtlr r9 -.L_00009280: -/* 00009280 00016010 4E 80 00 21 */ blrl -.L_00009284: -/* 00009284 00016014 C1 81 00 08 */ lfs f12, 0x8(r1) -/* 00009288 00016018 3C 80 00 00 */ lis r4, _IHandle__13ITransmission@ha -/* 0000928C 0001601C C1 A1 00 0C */ lfs f13, 0xc(r1) -/* 00009290 00016020 38 84 00 00 */ addi r4, r4, _IHandle__13ITransmission@l -/* 00009294 00016024 C0 01 00 10 */ lfs f0, 0x10(r1) -/* 00009298 00016028 81 7F 00 34 */ lwz r11, 0x34(r31) -/* 0000929C 0001602C D1 81 00 18 */ stfs f12, 0x18(r1) -/* 000092A0 00016030 D1 A1 00 1C */ stfs f13, 0x1c(r1) -/* 000092A4 00016034 D0 01 00 20 */ stfs f0, 0x20(r1) -/* 000092A8 00016038 D0 0B 00 30 */ stfs f0, 0x30(r11) -/* 000092AC 0001603C D1 8B 00 28 */ stfs f12, 0x28(r11) -/* 000092B0 00016040 D1 AB 00 2C */ stfs f13, 0x2c(r11) -/* 000092B4 00016044 81 3F 00 50 */ lwz r9, 0x50(r31) -/* 000092B8 00016048 80 69 00 00 */ lwz r3, 0x0(r9) -/* 000092BC 0001604C 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 000092C0 00016050 7C 7E 1B 79 */ mr. r30, r3 -/* 000092C4 00016054 38 00 00 01 */ li r0, 0x1 -/* 000092C8 00016058 40 82 92 D0 */ bne .L_00002598 -/* 000092CC 0001605C 38 00 00 00 */ li r0, 0x0 -/* 000092D0 00016060 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000092D4 00016064 41 82 93 14 */ beq .L_000025E8 -/* 000092D8 00016068 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 000092DC 0001606C 80 09 00 44 */ lwz r0, 0x44(r9) -/* 000092E0 00016070 A8 69 00 40 */ lha r3, 0x40(r9) -/* 000092E4 00016074 7C 08 03 A6 */ mtlr r0 -/* 000092E8 00016078 7C 7E 1A 14 */ add r3, r30, r3 -/* 000092EC 0001607C 4E 80 00 21 */ blrl -/* 000092F0 00016080 81 3F 00 34 */ lwz r9, 0x34(r31) -/* 000092F4 00016084 D0 29 00 14 */ stfs f1, 0x14(r9) -/* 000092F8 00016088 81 7E 00 04 */ lwz r11, 0x4(r30) -/* 000092FC 0001608C A8 6B 00 10 */ lha r3, 0x10(r11) -/* 00009300 00016090 80 0B 00 14 */ lwz r0, 0x14(r11) -/* 00009304 00016094 7C 7E 1A 14 */ add r3, r30, r3 -/* 00009308 00016098 7C 08 03 A6 */ mtlr r0 -/* 0000930C 0001609C 4E 80 00 21 */ blrl -/* 00009310 000160A0 90 7F 00 78 */ stw r3, 0x78(r31) -/* 00009314 000160A4 80 01 00 3C */ lwz r0, 0x3c(r1) -/* 00009318 000160A8 7C 08 03 A6 */ mtlr r0 -/* 0000931C 000160AC BB A1 00 2C */ lmw r29, 0x2c(r1) -/* 00009320 000160B0 38 21 00 38 */ addi r1, r1, 0x38 -/* 00009324 000160B4 4E 80 00 20 */ blr -.endfn AquireCar__13CDActionDrive - -# .text:0x9328 | size: 0x1194 -.fn Update__13CDActionDrivef, global -/* 00009328 000160B8 94 21 FE E0 */ stwu r1, -0x120(r1) -/* 0000932C 000160BC 7C 08 02 A6 */ mflr r0 -/* 00009330 000160C0 F3 41 00 F0 */ psq_st f26, 0xf0(r1), 0, qr0 -/* 00009334 000160C4 F3 61 00 F8 */ psq_st f27, 0xf8(r1), 0, qr0 -/* 00009338 000160C8 F3 81 01 00 */ psq_st f28, 0x100(r1), 0, qr0 -/* 0000933C 000160CC F3 A1 01 08 */ psq_st f29, 0x108(r1), 0, qr0 -/* 00009340 000160D0 F3 C1 01 10 */ psq_st f30, 0x110(r1), 0, qr0 -/* 00009344 000160D4 F3 E1 01 18 */ psq_st f31, 0x118(r1), 0, qr0 -/* 00009348 000160D8 BE 81 00 C0 */ stmw r20, 0xc0(r1) -/* 0000934C 000160DC 90 01 01 24 */ stw r0, 0x124(r1) -/* 00009350 000160E0 7C 7F 1B 78 */ mr r31, r3 -/* 00009354 000160E4 3D 20 00 00 */ lis r9, .rodata+0x860@ha -/* 00009358 000160E8 C0 1F 00 5C */ lfs f0, 0x5c(r31) -/* 0000935C 000160EC 3B C0 00 00 */ li r30, 0x0 -/* 00009360 000160F0 C1 A9 08 60 */ lfs f13, .rodata+0x860@l(r9) -/* 00009364 000160F4 FF 80 08 90 */ fmr f28, f1 -/* 00009368 000160F8 3D 20 00 00 */ lis r9, gCinematicMomementCamera@ha -.L_0000936C: -/* 0000936C 000160FC 3D 60 00 00 */ lis r11, gGameBreakerCamera@ha -/* 00009370 00016100 EC 00 E0 28 */ fsubs f0, f0, f28 -.L_00009374: -/* 00009374 00016104 93 C9 00 00 */ stw r30, gCinematicMomementCamera@l(r9) -/* 00009378 00016108 93 CB 00 00 */ stw r30, gGameBreakerCamera@l(r11) -/* 0000937C 0001610C FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00009380 00016110 D0 1F 00 5C */ stfs f0, 0x5c(r31) -/* 00009384 00016114 3F 20 00 00 */ lis r25, .rodata+0x860@ha -/* 00009388 00016118 4C 62 0B 82 */ cror un, eq, gt -/* 0000938C 0001611C 41 83 93 94 */ bso .L_00002720 -/* 00009390 00016120 D1 BF 00 5C */ stfs f13, 0x5c(r31) -/* 00009394 00016124 C0 1F 00 60 */ lfs f0, 0x60(r31) -/* 00009398 00016128 EC 00 E0 28 */ fsubs f0, f0, f28 -/* 0000939C 0001612C FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 000093A0 00016130 D0 1F 00 60 */ stfs f0, 0x60(r31) -/* 000093A4 00016134 4C 62 0B 82 */ cror un, eq, gt -/* 000093A8 00016138 41 83 93 B0 */ bso .L_00002758 -.L_000093AC: -/* 000093AC 0001613C D1 BF 00 60 */ stfs f13, 0x60(r31) -/* 000093B0 00016140 C0 1F 00 64 */ lfs f0, 0x64(r31) -/* 000093B4 00016144 EC 00 E0 28 */ fsubs f0, f0, f28 -/* 000093B8 00016148 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 000093BC 0001614C D0 1F 00 64 */ stfs f0, 0x64(r31) -/* 000093C0 00016150 4C 62 0B 82 */ cror un, eq, gt -/* 000093C4 00016154 41 83 93 CC */ bso .L_00002790 -/* 000093C8 00016158 D1 BF 00 64 */ stfs f13, 0x64(r31) -/* 000093CC 0001615C 80 1F 00 48 */ lwz r0, 0x48(r31) -/* 000093D0 00016160 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000093D4 00016164 40 82 94 20 */ bne GetAnchorID__11CameraMover -/* 000093D8 00016168 80 9F 00 50 */ lwz r4, 0x50(r31) -/* 000093DC 0001616C 2C 04 00 00 */ cmpwi r4, 0x0 -/* 000093E0 00016170 41 82 A4 90 */ beq .L_00003870 -/* 000093E4 00016174 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 000093E8 00016178 38 1F 00 18 */ addi r0, r31, 0x18 -/* 000093EC 0001617C A8 69 00 18 */ lha r3, 0x18(r9) -/* 000093F0 00016180 81 29 00 1C */ lwz r9, 0x1c(r9) -/* 000093F4 00016184 7C 60 1A 14 */ add r3, r0, r3 -.L_000093F8: -/* 000093F8 00016188 7D 28 03 A6 */ mtlr r9 -/* 000093FC 0001618C 4E 80 00 21 */ blrl -/* 00009400 00016190 93 DF 00 50 */ stw r30, 0x50(r31) -/* 00009404 00016194 48 00 A4 90 */ b .L_00013894 -/* 00009408 00016198 81 3F 00 34 */ lwz r9, 0x34(r31) -/* 0000940C 0001619C 38 00 00 01 */ li r0, 0x1 -.L_00009410: -/* 00009410 000161A0 3D 60 00 00 */ lis r11, gCamCloseToRoadBlock@ha -/* 00009414 000161A4 90 09 00 D0 */ stw r0, 0xd0(r9) -/* 00009418 000161A8 90 0B 00 00 */ stw r0, gCamCloseToRoadBlock@l(r11) -/* 0000941C 000161AC 48 00 98 E0 */ b .L_00012CFC -/* 00009420 000161B0 7F E3 FB 78 */ mr r3, r31 -/* 00009424 000161B4 48 00 90 75 */ bl .L_00012498 -/* 00009428 000161B8 81 3F 00 34 */ lwz r9, 0x34(r31) -/* 0000942C 000161BC 93 C9 00 C8 */ stw r30, 0xc8(r9) -/* 00009430 000161C0 81 7F 00 50 */ lwz r11, 0x50(r31) -/* 00009434 000161C4 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00009438 000161C8 41 82 94 68 */ beq .L_000028A0 -/* 0000943C 000161CC 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 00009440 000161D0 A8 69 01 00 */ lha r3, 0x100(r9) -/* 00009444 000161D4 80 09 01 04 */ lwz r0, 0x104(r9) -/* 00009448 000161D8 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000944C 000161DC 7C 08 03 A6 */ mtlr r0 -/* 00009450 000161E0 4E 80 00 21 */ blrl -/* 00009454 000161E4 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00009458 000161E8 41 82 94 68 */ beq .L_000028C0 -/* 0000945C 000161EC 81 3F 00 34 */ lwz r9, 0x34(r31) -/* 00009460 000161F0 38 00 00 01 */ li r0, 0x1 -/* 00009464 000161F4 90 09 00 C8 */ stw r0, 0xc8(r9) -/* 00009468 000161F8 80 7F 00 2C */ lwz r3, 0x2c(r31) -/* 0000946C 000161FC 3F C0 00 00 */ lis r30, _11GRaceStatus.fObj@ha -/* 00009470 00016200 81 23 00 08 */ lwz r9, 0x8(r3) -/* 00009474 00016204 A8 09 00 50 */ lha r0, 0x50(r9) -/* 00009478 00016208 81 29 00 54 */ lwz r9, 0x54(r9) -/* 0000947C 0001620C 7C 63 02 14 */ add r3, r3, r0 -/* 00009480 00016210 7D 28 03 A6 */ mtlr r9 -/* 00009484 00016214 4E 80 00 21 */ blrl -/* 00009488 00016218 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000948C 0001621C 41 82 95 30 */ beq .L_000029BC -/* 00009490 00016220 80 7E 00 00 */ lwz r3, _11GRaceStatus.fObj@l(r30) -/* 00009494 00016224 38 00 00 01 */ li r0, 0x1 -/* 00009498 00016228 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000949C 0001622C 40 82 94 A4 */ bne .L_00002940 -/* 000094A0 00016230 38 00 00 00 */ li r0, 0x0 -/* 000094A4 00016234 2C 00 00 00 */ cmpwi r0, 0x0 -.L_000094A8: -/* 000094A8 00016238 41 82 95 30 */ beq .L_000029D8 -/* 000094AC 0001623C 80 63 1A AC */ lwz r3, 0x1aac(r3) -/* 000094B0 00016240 38 00 00 00 */ li r0, 0x0 -/* 000094B4 00016244 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000094B8 00016248 41 82 94 D4 */ beq .L_0000298C -/* 000094BC 0001624C 48 00 00 01 */ bl GetTimeLimit__C15GRaceParameters -/* 000094C0 00016250 3D 20 00 00 */ lis r9, .rodata+0x860@ha -/* 000094C4 00016254 C0 09 08 60 */ lfs f0, .rodata+0x860@l(r9) -/* 000094C8 00016258 FF 81 00 00 */ fcmpu cr7, f1, f0 -/* 000094CC 0001625C 7C 00 00 26 */ mfcr r0 -/* 000094D0 00016260 54 00 F7 FE */ extrwi r0, r0, 1, 29 -/* 000094D4 00016264 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000094D8 00016268 41 82 95 30 */ beq .L_00002A08 -/* 000094DC 0001626C 80 7E 00 00 */ lwz r3, _11GRaceStatus.fObj@l(r30) -/* 000094E0 00016270 48 00 00 01 */ bl GetRaceTimeRemaining__C11GRaceStatus -/* 000094E4 00016274 3D 20 00 00 */ lis r9, .rodata+0x860@ha -/* 000094E8 00016278 C0 09 08 60 */ lfs f0, .rodata+0x860@l(r9) -/* 000094EC 0001627C FC 01 00 00 */ fcmpu cr0, f1, f0 -/* 000094F0 00016280 41 81 95 30 */ bgt .L_00002A20 -/* 000094F4 00016284 81 7F 00 48 */ lwz r11, 0x48(r31) -.L_000094F8: -/* 000094F8 00016288 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 000094FC 0001628C A8 69 00 10 */ lha r3, 0x10(r9) -/* 00009500 00016290 80 09 00 14 */ lwz r0, 0x14(r9) -/* 00009504 00016294 7C 6B 1A 14 */ add r3, r11, r3 -/* 00009508 00016298 7C 08 03 A6 */ mtlr r0 -/* 0000950C 0001629C 4E 80 00 21 */ blrl -/* 00009510 000162A0 7C 64 1B 78 */ mr r4, r3 -/* 00009514 000162A4 80 7E 00 00 */ lwz r3, _11GRaceStatus.fObj@l(r30) -/* 00009518 000162A8 48 00 00 01 */ bl GetRacerInfo__11GRaceStatusP8ISimable -/* 0000951C 000162AC 7C 63 1B 79 */ mr. r3, r3 -/* 00009520 000162B0 41 82 95 30 */ beq .L_00002A50 -/* 00009524 000162B4 80 03 00 30 */ lwz r0, 0x30(r3) -/* 00009528 000162B8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000952C 000162BC 41 82 A4 90 */ beq .L_000039BC -/* 00009530 000162C0 3D 20 00 00 */ lis r9, _11GRaceStatus.fObj@ha -/* 00009534 000162C4 39 60 00 01 */ li r11, 0x1 -/* 00009538 000162C8 80 09 00 00 */ lwz r0, _11GRaceStatus.fObj@l(r9) -/* 0000953C 000162CC 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00009540 000162D0 40 82 95 48 */ bne .L_00002A88 -.L_00009544: -/* 00009544 000162D4 39 60 00 00 */ li r11, 0x0 -/* 00009548 000162D8 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000954C 000162DC 41 82 95 8C */ beq .L_00002AD8 -.L_00009550: -/* 00009550 000162E0 81 7F 00 48 */ lwz r11, 0x48(r31) -/* 00009554 000162E4 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 00009558 000162E8 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000955C 000162EC 80 09 00 14 */ lwz r0, 0x14(r9) -/* 00009560 000162F0 7C 6B 1A 14 */ add r3, r11, r3 -/* 00009564 000162F4 7C 08 03 A6 */ mtlr r0 -.L_00009568: -/* 00009568 000162F8 4E 80 00 21 */ blrl -/* 0000956C 000162FC 7C 64 1B 78 */ mr r4, r3 -/* 00009570 00016300 80 7E 00 00 */ lwz r3, _11GRaceStatus.fObj@l(r30) -/* 00009574 00016304 48 00 00 01 */ bl GetRacerInfo__11GRaceStatusP8ISimable -/* 00009578 00016308 7C 63 1B 79 */ mr. r3, r3 -/* 0000957C 0001630C 41 82 95 8C */ beq .L_00002B08 -/* 00009580 00016310 80 03 00 34 */ lwz r0, 0x34(r3) -/* 00009584 00016314 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00009588 00016318 40 82 A4 90 */ bne .L_00003A18 -/* 0000958C 0001631C 81 3F 00 34 */ lwz r9, 0x34(r31) -/* 00009590 00016320 3A A0 00 00 */ li r21, 0x0 -/* 00009594 00016324 92 A9 00 D0 */ stw r21, 0xd0(r9) -/* 00009598 00016328 81 7F 00 50 */ lwz r11, 0x50(r31) -/* 0000959C 0001632C 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 000095A0 00016330 A8 69 01 60 */ lha r3, 0x160(r9) -/* 000095A4 00016334 80 09 01 64 */ lwz r0, 0x164(r9) -/* 000095A8 00016338 7C 6B 1A 14 */ add r3, r11, r3 -.L_000095AC: -/* 000095AC 0001633C 7C 08 03 A6 */ mtlr r0 -/* 000095B0 00016340 4E 80 00 21 */ blrl -/* 000095B4 00016344 7C 6B 1B 79 */ mr. r11, r3 -/* 000095B8 00016348 41 82 98 E0 */ beq .L_00002E98 -/* 000095BC 0001634C 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 000095C0 00016350 A8 69 01 48 */ lha r3, 0x148(r9) -/* 000095C4 00016354 80 09 01 4C */ lwz r0, 0x14c(r9) -/* 000095C8 00016358 7C 6B 1A 14 */ add r3, r11, r3 -/* 000095CC 0001635C 7C 08 03 A6 */ mtlr r0 -/* 000095D0 00016360 4E 80 00 21 */ blrl -/* 000095D4 00016364 7C 6A 1B 79 */ mr. r10, r3 -.L_000095D8: -/* 000095D8 00016368 41 82 98 E0 */ beq .L_00002EB8 -/* 000095DC 0001636C 81 2A 00 04 */ lwz r9, 0x4(r10) -/* 000095E0 00016370 3D 60 00 00 */ lis r11, .rodata+0x860@ha -/* 000095E4 00016374 C3 EB 08 60 */ lfs f31, .rodata+0x860@l(r11) -/* 000095E8 00016378 38 81 00 B8 */ addi r4, r1, 0xb8 -/* 000095EC 0001637C A8 69 00 88 */ lha r3, 0x88(r9) -/* 000095F0 00016380 80 09 00 8C */ lwz r0, 0x8c(r9) -/* 000095F4 00016384 7C 6A 1A 14 */ add r3, r10, r3 -/* 000095F8 00016388 D3 E1 00 B8 */ stfs f31, 0xb8(r1) -/* 000095FC 0001638C 7C 08 03 A6 */ mtlr r0 -/* 00009600 00016390 4E 80 00 21 */ blrl -/* 00009604 00016394 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00009608 00016398 41 82 98 E0 */ beq .L_00002EE8 -.L_0000960C: -/* 0000960C 0001639C C1 A1 00 B8 */ lfs f13, 0xb8(r1) -/* 00009610 000163A0 FC 0D F8 00 */ fcmpu cr0, f13, f31 -/* 00009614 000163A4 4C 62 03 82 */ cror un, eq, lt -/* 00009618 000163A8 41 83 98 E0 */ bso .L_00002EF8 -/* 0000961C 000163AC 81 7F 00 34 */ lwz r11, 0x34(r31) -/* 00009620 000163B0 3D 20 00 00 */ lis r9, .rodata+0x864@ha -/* 00009624 000163B4 C1 89 08 64 */ lfs f12, .rodata+0x864@l(r9) -/* 00009628 000163B8 C0 0B 00 10 */ lfs f0, 0x10(r11) -/* 0000962C 000163BC EC 00 03 32 */ fmuls f0, f0, f12 -/* 00009630 000163C0 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 00009634 000163C4 4C 62 0B 82 */ cror un, eq, gt -/* 00009638 000163C8 41 83 98 E0 */ bso .L_00002F18 -/* 0000963C 000163CC 3D 20 00 00 */ lis r9, .rodata+0x868@ha -/* 00009640 000163D0 3D 40 00 00 */ lis r10, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@ha -/* 00009644 000163D4 C3 C9 08 68 */ lfs f30, .rodata+0x868@l(r9) -/* 00009648 000163D8 39 4A 00 00 */ addi r10, r10, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@l -/* 0000964C 000163DC 3D 20 00 00 */ lis r9, .rodata+0x874@ha -/* 00009650 000163E0 3D 60 00 00 */ lis r11, .rodata+0x878@ha -/* 00009654 000163E4 C3 49 08 74 */ lfs f26, .rodata+0x874@l(r9) -/* 00009658 000163E8 7D 5B 53 78 */ mr r27, r10 -/* 0000965C 000163EC C3 6B 08 78 */ lfs f27, .rodata+0x878@l(r11) -/* 00009660 000163F0 FF A0 60 90 */ fmr f29, f12 -/* 00009664 000163F4 83 AA 00 E0 */ lwz r29, 0xe0(r10) -/* 00009668 000163F8 3E C0 00 00 */ lis r22, _12VehicleClass.CAR@ha -/* 0000966C 000163FC 3B 41 00 08 */ addi r26, r1, 0x8 -/* 00009670 00016400 3E E0 00 00 */ lis r23, .rodata+0x86C@ha -/* 00009674 00016404 3F 00 00 00 */ lis r24, .rodata+0x870@ha -/* 00009678 00016408 80 1B 00 E8 */ lwz r0, 0xe8(r27) -/* 0000967C 0001640C 81 3B 00 E0 */ lwz r9, 0xe0(r27) -/* 00009680 00016410 54 00 10 3A */ slwi r0, r0, 2 -/* 00009684 00016414 7D 29 02 14 */ add r9, r9, r0 -/* 00009688 00016418 7C 1D 48 00 */ cmpw r29, r9 -/* 0000968C 0001641C 41 82 98 E0 */ beq .L_00002F6C -/* 00009690 00016420 83 DD 00 00 */ lwz r30, 0x0(r29) -/* 00009694 00016424 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 00009698 00016428 41 82 98 D8 */ beq .L_00002F70 -/* 0000969C 0001642C 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 000096A0 00016430 A8 69 01 18 */ lha r3, 0x118(r9) -/* 000096A4 00016434 80 09 01 1C */ lwz r0, 0x11c(r9) -/* 000096A8 00016438 7C 7E 1A 14 */ add r3, r30, r3 -/* 000096AC 0001643C 7C 08 03 A6 */ mtlr r0 -/* 000096B0 00016440 4E 80 00 21 */ blrl -/* 000096B4 00016444 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000096B8 00016448 41 82 98 D8 */ beq .L_00002F90 -/* 000096BC 0001644C 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 000096C0 00016450 80 09 00 94 */ lwz r0, 0x94(r9) -/* 000096C4 00016454 A8 69 00 90 */ lha r3, 0x90(r9) -/* 000096C8 00016458 7C 08 03 A6 */ mtlr r0 -/* 000096CC 0001645C 7C 7E 1A 14 */ add r3, r30, r3 -/* 000096D0 00016460 4E 80 00 21 */ blrl -/* 000096D4 00016464 81 23 00 00 */ lwz r9, 0x0(r3) -/* 000096D8 00016468 80 16 00 00 */ lwz r0, _12VehicleClass.CAR@l(r22) -/* 000096DC 0001646C 7C 09 00 00 */ cmpw r9, r0 -/* 000096E0 00016470 40 82 98 D8 */ bne .L_00002FB8 -/* 000096E4 00016474 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 000096E8 00016478 3F 80 00 00 */ lis r28, .rodata+0x86C@ha -.L_000096EC: -/* 000096EC 0001647C 3E 80 00 00 */ lis r20, .rodata+0x870@ha -/* 000096F0 00016480 A8 69 00 20 */ lha r3, 0x20(r9) -.L_000096F4: -/* 000096F4 00016484 80 09 00 24 */ lwz r0, 0x24(r9) -/* 000096F8 00016488 7C 7E 1A 14 */ add r3, r30, r3 -/* 000096FC 0001648C 7C 08 03 A6 */ mtlr r0 -/* 00009700 00016490 4E 80 00 21 */ blrl -/* 00009704 00016494 C1 A3 00 00 */ lfs f13, 0x0(r3) -/* 00009708 00016498 81 3F 00 34 */ lwz r9, 0x34(r31) -/* 0000970C 0001649C D1 A1 00 08 */ stfs f13, 0x8(r1) -/* 00009710 000164A0 C0 F7 08 6C */ lfs f7, .rodata+0x86C@l(r23) -/* 00009714 000164A4 C0 03 00 04 */ lfs f0, 0x4(r3) -/* 00009718 000164A8 C1 18 08 70 */ lfs f8, .rodata+0x870@l(r24) -/* 0000971C 000164AC D0 01 00 0C */ stfs f0, 0xc(r1) -/* 00009720 000164B0 C1 A3 00 08 */ lfs f13, 0x8(r3) -/* 00009724 000164B4 D1 BA 00 08 */ stfs f13, 0x8(r26) -/* 00009728 000164B8 D1 A1 00 18 */ stfs f13, 0x18(r1) -/* 0000972C 000164BC C0 01 00 08 */ lfs f0, 0x8(r1) -/* 00009730 000164C0 C1 61 00 0C */ lfs f11, 0xc(r1) -/* 00009734 000164C4 FC 00 00 50 */ fneg f0, f0 -/* 00009738 000164C8 D0 01 00 1C */ stfs f0, 0x1c(r1) -/* 0000973C 000164CC D1 61 00 20 */ stfs f11, 0x20(r1) -/* 00009740 000164D0 C1 89 00 1C */ lfs f12, 0x1c(r9) -/* 00009744 000164D4 C1 49 00 18 */ lfs f10, 0x18(r9) -/* 00009748 000164D8 C1 29 00 20 */ lfs f9, 0x20(r9) -/* 0000974C 000164DC EC 00 60 28 */ fsubs f0, f0, f12 -/* 00009750 000164E0 ED AD 50 28 */ fsubs f13, f13, f10 -/* 00009754 000164E4 D0 01 00 2C */ stfs f0, 0x2c(r1) -.L_00009758: -/* 00009758 000164E8 ED 6B 48 28 */ fsubs f11, f11, f9 -/* 0000975C 000164EC D1 A1 00 28 */ stfs f13, 0x28(r1) -/* 00009760 000164F0 EC 00 00 32 */ fmuls f0, f0, f0 -/* 00009764 000164F4 D1 61 00 30 */ stfs f11, 0x30(r1) -/* 00009768 000164F8 ED AD 03 7A */ fmadds f13, f13, f13, f0 -/* 0000976C 000164FC ED 6B 6A FA */ fmadds f11, f11, f11, f13 -/* 00009770 00016500 FC 0B F0 00 */ fcmpu cr0, f11, f30 -/* 00009774 00016504 4C 62 03 82 */ cror un, eq, lt -/* 00009778 00016508 41 83 97 A8 */ bso .L_00002F20 -/* 0000977C 0001650C FD A0 58 34 */ frsqrte f13, f11 -/* 00009780 00016510 EC 0D 03 72 */ fmuls f0, f13, f13 -/* 00009784 00016514 ED 8D 01 F2 */ fmuls f12, f13, f7 -/* 00009788 00016518 EC 0B 40 3C */ fnmsubs f0, f11, f0, f8 -/* 0000978C 0001651C ED A0 6B 3A */ fmadds f13, f0, f12, f13 -/* 00009790 00016520 EC 0D 03 72 */ fmuls f0, f13, f13 -/* 00009794 00016524 ED 8D 01 F2 */ fmuls f12, f13, f7 -/* 00009798 00016528 EC 0B 40 3C */ fnmsubs f0, f11, f0, f8 -/* 0000979C 0001652C ED A0 6B 3A */ fmadds f13, f0, f12, f13 -/* 000097A0 00016530 ED AD 02 F2 */ fmuls f13, f13, f11 -/* 000097A4 00016534 48 00 97 AC */ b .L_00012F50 -/* 000097A8 00016538 C1 B9 08 60 */ lfs f13, .rodata+0x860@l(r25) -/* 000097AC 0001653C C3 F9 08 60 */ lfs f31, .rodata+0x860@l(r25) -/* 000097B0 00016540 FC 0D F8 00 */ fcmpu cr0, f13, f31 -/* 000097B4 00016544 4C 62 03 82 */ cror un, eq, lt -/* 000097B8 00016548 41 83 98 D8 */ bso .L_00003090 -/* 000097BC 0001654C 81 3F 00 34 */ lwz r9, 0x34(r31) -/* 000097C0 00016550 C0 09 00 10 */ lfs f0, 0x10(r9) -/* 000097C4 00016554 EC 00 07 72 */ fmuls f0, f0, f29 -/* 000097C8 00016558 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 000097CC 0001655C 4C 62 0B 82 */ cror un, eq, gt -.L_000097D0: -/* 000097D0 00016560 41 83 98 D8 */ bso .L_000030A8 -/* 000097D4 00016564 38 61 00 38 */ addi r3, r1, 0x38 -/* 000097D8 00016568 38 81 00 28 */ addi r4, r1, 0x28 -/* 000097DC 0001656C 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -/* 000097E0 00016570 81 3F 00 34 */ lwz r9, 0x34(r31) -.L_000097E4: -/* 000097E4 00016574 C1 81 00 3C */ lfs f12, 0x3c(r1) -/* 000097E8 00016578 C1 A9 00 4C */ lfs f13, 0x4c(r9) -/* 000097EC 0001657C C0 01 00 38 */ lfs f0, 0x38(r1) -/* 000097F0 00016580 ED 8C 03 72 */ fmuls f12, f12, f13 -/* 000097F4 00016584 C1 49 00 48 */ lfs f10, 0x48(r9) -/* 000097F8 00016588 C1 69 00 50 */ lfs f11, 0x50(r9) -/* 000097FC 0001658C C1 A1 00 40 */ lfs f13, 0x40(r1) -/* 00009800 00016590 EC 00 62 BA */ fmadds f0, f0, f10, f12 -/* 00009804 00016594 EC 0D 02 FA */ fmadds f0, f13, f11, f0 -/* 00009808 00016598 FC 00 D0 00 */ fcmpu cr0, f0, f26 -/* 0000980C 0001659C 4C 62 03 82 */ cror un, eq, lt -/* 00009810 000165A0 41 83 98 D8 */ bso .L_000030E8 -/* 00009814 000165A4 C1 54 08 70 */ lfs f10, .rodata+0x870@l(r20) -/* 00009818 000165A8 FD A0 F8 2E */ fsel f13, f0, f0, f31 -/* 0000981C 000165AC C1 3C 08 6C */ lfs f9, .rodata+0x86C@l(r28) -/* 00009820 000165B0 EC 0A 68 28 */ fsubs f0, f10, f13 -/* 00009824 000165B4 FC 00 53 6E */ fsel f0, f0, f13, f10 -/* 00009828 000165B8 EC 00 00 32 */ fmuls f0, f0, f0 -/* 0000982C 000165BC ED 6A 00 28 */ fsubs f11, f10, f0 -/* 00009830 000165C0 FC 0B F0 00 */ fcmpu cr0, f11, f30 -/* 00009834 000165C4 4C 62 03 82 */ cror un, eq, lt -/* 00009838 000165C8 41 83 98 68 */ bso .L_000030A0 -/* 0000983C 000165CC FD 80 58 34 */ frsqrte f12, f11 -/* 00009840 000165D0 EC 0C 03 32 */ fmuls f0, f12, f12 -/* 00009844 000165D4 ED AC 02 72 */ fmuls f13, f12, f9 -.L_00009848: -/* 00009848 000165D8 EC 0B 50 3C */ fnmsubs f0, f11, f0, f10 -/* 0000984C 000165DC ED 80 63 7A */ fmadds f12, f0, f13, f12 -/* 00009850 000165E0 EC 0C 03 32 */ fmuls f0, f12, f12 -/* 00009854 000165E4 ED AC 02 72 */ fmuls f13, f12, f9 -/* 00009858 000165E8 EC 0B 50 3C */ fnmsubs f0, f11, f0, f10 -/* 0000985C 000165EC ED 80 63 7A */ fmadds f12, f0, f13, f12 -/* 00009860 000165F0 ED 8C 02 F2 */ fmuls f12, f12, f11 -/* 00009864 000165F4 48 00 98 6C */ b .L_000130D0 -/* 00009868 000165F8 FD 80 F8 90 */ fmr f12, f31 -/* 0000986C 000165FC C0 01 00 30 */ lfs f0, 0x30(r1) -/* 00009870 00016600 C1 A1 00 28 */ lfs f13, 0x28(r1) -/* 00009874 00016604 EC 00 03 32 */ fmuls f0, f0, f12 -/* 00009878 00016608 C1 3C 08 6C */ lfs f9, .rodata+0x86C@l(r28) -/* 0000987C 0001660C ED AD 03 32 */ fmuls f13, f13, f12 -/* 00009880 00016610 D0 01 00 48 */ stfs f0, 0x48(r1) -/* 00009884 00016614 ED 8D 03 72 */ fmuls f12, f13, f13 -/* 00009888 00016618 D1 A1 00 4C */ stfs f13, 0x4c(r1) -.L_0000988C: -/* 0000988C 0001661C ED 60 60 3A */ fmadds f11, f0, f0, f12 -.L_00009890: -/* 00009890 00016620 C1 54 08 70 */ lfs f10, .rodata+0x870@l(r20) -/* 00009894 00016624 FC 0B F0 00 */ fcmpu cr0, f11, f30 -/* 00009898 00016628 4C 62 03 82 */ cror un, eq, lt -/* 0000989C 0001662C 41 83 98 CC */ bso .L_00003168 -/* 000098A0 00016630 FC 00 58 34 */ frsqrte f0, f11 -/* 000098A4 00016634 ED A0 00 32 */ fmuls f13, f0, f0 -/* 000098A8 00016638 ED 80 02 72 */ fmuls f12, f0, f9 -/* 000098AC 0001663C ED AB 53 7C */ fnmsubs f13, f11, f13, f10 -/* 000098B0 00016640 EC 0D 03 3A */ fmadds f0, f13, f12, f0 -.L_000098B4: -/* 000098B4 00016644 ED A0 00 32 */ fmuls f13, f0, f0 -/* 000098B8 00016648 ED 80 02 72 */ fmuls f12, f0, f9 -/* 000098BC 0001664C ED AB 53 7C */ fnmsubs f13, f11, f13, f10 -/* 000098C0 00016650 EC 0D 03 3A */ fmadds f0, f13, f12, f0 -/* 000098C4 00016654 EC 00 02 F2 */ fmuls f0, f0, f11 -/* 000098C8 00016658 48 00 98 D0 */ b .L_00013198 -/* 000098CC 0001665C C0 19 08 60 */ lfs f0, .rodata+0x860@l(r25) -/* 000098D0 00016660 FC 00 D8 00 */ fcmpu cr0, f0, f27 -/* 000098D4 00016664 41 80 94 08 */ blt .L_00002CDC -/* 000098D8 00016668 3B BD 00 04 */ addi r29, r29, 0x4 -/* 000098DC 0001666C 48 00 96 78 */ b .L_00012F54 -/* 000098E0 00016670 80 7F 00 50 */ lwz r3, 0x50(r31) -/* 000098E4 00016674 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000098E8 00016678 41 82 9A 14 */ beq .L_000032FC -/* 000098EC 0001667C 80 63 00 00 */ lwz r3, 0x0(r3) -/* 000098F0 00016680 3C 80 00 00 */ lis r4, _IHandle__6IInput@ha -/* 000098F4 00016684 38 84 00 00 */ addi r4, r4, _IHandle__6IInput@l -/* 000098F8 00016688 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 000098FC 0001668C 7C 7E 1B 78 */ mr r30, r3 -/* 00009900 00016690 38 00 00 01 */ li r0, 0x1 -/* 00009904 00016694 7F DD F3 78 */ mr r29, r30 -/* 00009908 00016698 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 0000990C 0001669C 40 82 99 14 */ bne .L_00003220 -/* 00009910 000166A0 38 00 00 00 */ li r0, 0x0 -/* 00009914 000166A4 2C 00 00 00 */ cmpwi r0, 0x0 -.L_00009918: -/* 00009918 000166A8 41 82 9A 14 */ beq .L_0000332C -/* 0000991C 000166AC 81 7F 00 2C */ lwz r11, 0x2c(r31) -/* 00009920 000166B0 38 80 00 00 */ li r4, 0x0 -/* 00009924 000166B4 81 2B 00 08 */ lwz r9, 0x8(r11) -/* 00009928 000166B8 80 09 00 34 */ lwz r0, 0x34(r9) -/* 0000992C 000166BC A8 69 00 30 */ lha r3, 0x30(r9) -/* 00009930 000166C0 7C 08 03 A6 */ mtlr r0 -/* 00009934 000166C4 7C 6B 1A 14 */ add r3, r11, r3 -/* 00009938 000166C8 4E 80 00 21 */ blrl -/* 0000993C 000166CC 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 00009940 000166D0 A8 69 00 78 */ lha r3, 0x78(r9) -/* 00009944 000166D4 80 09 00 7C */ lwz r0, 0x7c(r9) -/* 00009948 000166D8 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000994C 000166DC 7C 08 03 A6 */ mtlr r0 -/* 00009950 000166E0 4E 80 00 21 */ blrl -/* 00009954 000166E4 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00009958 000166E8 41 82 99 A8 */ beq .L_00003300 -/* 0000995C 000166EC 80 7F 00 50 */ lwz r3, 0x50(r31) -/* 00009960 000166F0 81 23 00 04 */ lwz r9, 0x4(r3) -/* 00009964 000166F4 A8 09 00 48 */ lha r0, 0x48(r9) -/* 00009968 000166F8 81 29 00 4C */ lwz r9, 0x4c(r9) -/* 0000996C 000166FC 7C 63 02 14 */ add r3, r3, r0 -/* 00009970 00016700 7D 28 03 A6 */ mtlr r9 -/* 00009974 00016704 4E 80 00 21 */ blrl -/* 00009978 00016708 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000997C 0001670C 40 82 99 A8 */ bne .L_00003324 -/* 00009980 00016710 2C 15 00 00 */ cmpwi r21, 0x0 -/* 00009984 00016714 40 82 99 A8 */ bne .L_0000332C -/* 00009988 00016718 80 7F 00 2C */ lwz r3, 0x2c(r31) -/* 0000998C 0001671C 38 80 00 01 */ li r4, 0x1 -/* 00009990 00016720 81 23 00 08 */ lwz r9, 0x8(r3) -/* 00009994 00016724 A8 09 00 30 */ lha r0, 0x30(r9) -/* 00009998 00016728 81 29 00 34 */ lwz r9, 0x34(r9) -/* 0000999C 0001672C 7C 63 02 14 */ add r3, r3, r0 -/* 000099A0 00016730 7D 28 03 A6 */ mtlr r9 -/* 000099A4 00016734 4E 80 00 21 */ blrl -/* 000099A8 00016738 81 7F 00 34 */ lwz r11, 0x34(r31) -/* 000099AC 0001673C 38 00 00 00 */ li r0, 0x0 -/* 000099B0 00016740 90 0B 00 B8 */ stw r0, 0xb8(r11) -/* 000099B4 00016744 81 3D 00 04 */ lwz r9, 0x4(r29) -/* 000099B8 00016748 A8 69 00 18 */ lha r3, 0x18(r9) -/* 000099BC 0001674C 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 000099C0 00016750 7C 7D 1A 14 */ add r3, r29, r3 -/* 000099C4 00016754 7C 08 03 A6 */ mtlr r0 -/* 000099C8 00016758 4E 80 00 21 */ blrl -/* 000099CC 0001675C 3D 20 00 00 */ lis r9, .rodata+0x860@ha -/* 000099D0 00016760 C0 03 00 1C */ lfs f0, 0x1c(r3) -/* 000099D4 00016764 C3 E9 08 60 */ lfs f31, .rodata+0x860@l(r9) -/* 000099D8 00016768 FC 00 F8 00 */ fcmpu cr0, f0, f31 -/* 000099DC 0001676C 41 81 9A 08 */ bgt .L_000033E4 -/* 000099E0 00016770 81 3D 00 04 */ lwz r9, 0x4(r29) -/* 000099E4 00016774 A8 69 00 18 */ lha r3, 0x18(r9) -/* 000099E8 00016778 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 000099EC 0001677C 7C 7D 1A 14 */ add r3, r29, r3 -/* 000099F0 00016780 7C 08 03 A6 */ mtlr r0 -/* 000099F4 00016784 4E 80 00 21 */ blrl -/* 000099F8 00016788 C0 03 00 18 */ lfs f0, 0x18(r3) -/* 000099FC 0001678C FC 00 F8 00 */ fcmpu cr0, f0, f31 -/* 00009A00 00016790 4C 62 03 82 */ cror un, eq, lt -/* 00009A04 00016794 41 83 9A 14 */ bso .L_00003418 -/* 00009A08 00016798 81 3F 00 34 */ lwz r9, 0x34(r31) -/* 00009A0C 0001679C 38 00 00 01 */ li r0, 0x1 -/* 00009A10 000167A0 90 09 00 B8 */ stw r0, 0xb8(r9) -/* 00009A14 000167A4 3D 20 00 00 */ lis r9, .rodata+0x860@ha -/* 00009A18 000167A8 C0 1F 00 6C */ lfs f0, 0x6c(r31) -/* 00009A1C 000167AC C1 89 08 60 */ lfs f12, .rodata+0x860@l(r9) -.L_00009A20: -/* 00009A20 000167B0 FC 00 60 00 */ fcmpu cr0, f0, f12 -/* 00009A24 000167B4 4C 62 03 82 */ cror un, eq, lt -/* 00009A28 000167B8 41 83 9A 70 */ bso .L_00003498 -/* 00009A2C 000167BC ED A0 E0 28 */ fsubs f13, f0, f28 -/* 00009A30 000167C0 D1 BF 00 6C */ stfs f13, 0x6c(r31) -/* 00009A34 000167C4 FC 0D 60 00 */ fcmpu cr0, f13, f12 -/* 00009A38 000167C8 4C 62 03 82 */ cror un, eq, lt -/* 00009A3C 000167CC 41 83 9A 70 */ bso .L_000034AC -/* 00009A40 000167D0 3D 20 00 00 */ lis r9, .rodata+0x87C@ha -/* 00009A44 000167D4 C0 09 08 7C */ lfs f0, .rodata+0x87C@l(r9) -/* 00009A48 000167D8 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 00009A4C 000167DC 4C 62 0B 82 */ cror un, eq, gt -/* 00009A50 000167E0 41 83 9A 70 */ bso .L_000034C0 -/* 00009A54 000167E4 D1 9F 00 6C */ stfs f12, 0x6c(r31) -/* 00009A58 000167E8 48 00 00 01 */ bl Get__16IVisualTreatment -.L_00009A5C: -/* 00009A5C 000167EC 7C 63 1B 79 */ mr. r3, r3 -/* 00009A60 000167F0 41 82 9A 70 */ beq .L_000034D0 -/* 00009A64 000167F4 3D 20 00 00 */ lis r9, .rodata+0x86C@ha -/* 00009A68 000167F8 C0 29 08 6C */ lfs f1, .rodata+0x86C@l(r9) -/* 00009A6C 000167FC 48 00 00 01 */ bl TriggerPulse__16IVisualTreatmentf -/* 00009A70 00016800 80 1F 00 74 */ lwz r0, 0x74(r31) -/* 00009A74 00016804 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00009A78 00016808 41 82 9A AC */ beq .L_00003524 -/* 00009A7C 0001680C 3D 20 00 00 */ lis r9, .rodata+0x870@ha -/* 00009A80 00016810 C1 9F 00 70 */ lfs f12, 0x70(r31) -/* 00009A84 00016814 C1 A9 08 70 */ lfs f13, .rodata+0x870@l(r9) -/* 00009A88 00016818 FC 0C 68 00 */ fcmpu cr0, f12, f13 -/* 00009A8C 0001681C 4C 62 0B 82 */ cror un, eq, gt -/* 00009A90 00016820 41 83 9A D4 */ bso .L_00003564 -/* 00009A94 00016824 3D 20 00 00 */ lis r9, kCinematicMomementSeconds@ha -/* 00009A98 00016828 EC 1C E0 2A */ fadds f0, f28, f28 -/* 00009A9C 0001682C C1 A9 00 00 */ lfs f13, kCinematicMomementSeconds@l(r9) -/* 00009AA0 00016830 EC 00 68 24 */ fdivs f0, f0, f13 -/* 00009AA4 00016834 ED AC 00 2A */ fadds f13, f12, f0 -/* 00009AA8 00016838 48 00 9A D4 */ b .L_0001357C -/* 00009AAC 0001683C 3D 20 00 00 */ lis r9, .rodata+0x860@ha -/* 00009AB0 00016840 C1 9F 00 70 */ lfs f12, 0x70(r31) -/* 00009AB4 00016844 C1 A9 08 60 */ lfs f13, .rodata+0x860@l(r9) -/* 00009AB8 00016848 FC 0C 68 00 */ fcmpu cr0, f12, f13 -/* 00009ABC 0001684C 4C 62 03 82 */ cror un, eq, lt -/* 00009AC0 00016850 41 83 9A D4 */ bso .L_00003594 -/* 00009AC4 00016854 3D 20 00 00 */ lis r9, kCinematicMomementSeconds@ha -/* 00009AC8 00016858 C0 09 00 00 */ lfs f0, kCinematicMomementSeconds@l(r9) -/* 00009ACC 0001685C EC 1C 00 24 */ fdivs f0, f28, f0 -/* 00009AD0 00016860 ED AC 00 28 */ fsubs f13, f12, f0 -/* 00009AD4 00016864 3D 20 00 00 */ lis r9, .rodata+0x880@ha -.L_00009AD8: -/* 00009AD8 00016868 D1 BF 00 70 */ stfs f13, 0x70(r31) -/* 00009ADC 0001686C C0 09 08 80 */ lfs f0, .rodata+0x880@l(r9) -/* 00009AE0 00016870 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 00009AE4 00016874 4C 62 03 82 */ cror un, eq, lt -/* 00009AE8 00016878 41 83 9A F8 */ bso .L_000035E0 -/* 00009AEC 0001687C 3D 20 00 00 */ lis r9, gCinematicMomementCamera@ha -/* 00009AF0 00016880 38 00 00 01 */ li r0, 0x1 -/* 00009AF4 00016884 90 09 00 00 */ stw r0, gCinematicMomementCamera@l(r9) -/* 00009AF8 00016888 3D 20 00 00 */ lis r9, gCinematicMomementCamera@ha -/* 00009AFC 0001688C 80 09 00 00 */ lwz r0, gCinematicMomementCamera@l(r9) -/* 00009B00 00016890 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00009B04 00016894 41 82 9B 54 */ beq .L_00003658 -/* 00009B08 00016898 81 3F 00 2C */ lwz r9, 0x2c(r31) -/* 00009B0C 0001689C 81 09 00 1C */ lwz r8, 0x1c(r9) -/* 00009B10 000168A0 2C 08 00 00 */ cmpwi r8, 0x0 -/* 00009B14 000168A4 41 82 9B 54 */ beq .L_00003668 -/* 00009B18 000168A8 3D 20 00 00 */ lis r9, .rodata+0x870@ha -/* 00009B1C 000168AC 3D 60 00 00 */ lis r11, .rodata+0x884@ha -/* 00009B20 000168B0 C1 49 08 70 */ lfs f10, .rodata+0x870@l(r9) -/* 00009B24 000168B4 3D 40 00 00 */ lis r10, .rodata+0x864@ha -/* 00009B28 000168B8 C1 6B 08 84 */ lfs f11, .rodata+0x884@l(r11) -/* 00009B2C 000168BC 3D 20 00 00 */ lis r9, .rodata+0x888@ha -.L_00009B30: -/* 00009B30 000168C0 EC 0A 68 28 */ fsubs f0, f10, f13 -/* 00009B34 000168C4 C1 8A 08 64 */ lfs f12, .rodata+0x864@l(r10) -/* 00009B38 000168C8 C1 A9 08 88 */ lfs f13, .rodata+0x888@l(r9) -/* 00009B3C 000168CC EC 00 62 FA */ fmadds f0, f0, f11, f12 -/* 00009B40 000168D0 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00009B44 000168D4 4C 62 03 82 */ cror un, eq, lt -/* 00009B48 000168D8 41 83 9B 50 */ bso .L_00003698 -/* 00009B4C 000168DC FC 00 50 90 */ fmr f0, f10 -/* 00009B50 000168E0 D0 08 00 CC */ stfs f0, 0xcc(r8) -/* 00009B54 000168E4 80 7F 00 48 */ lwz r3, 0x48(r31) -/* 00009B58 000168E8 81 23 00 04 */ lwz r9, 0x4(r3) -/* 00009B5C 000168EC A8 09 00 88 */ lha r0, 0x88(r9) -/* 00009B60 000168F0 81 29 00 8C */ lwz r9, 0x8c(r9) -/* 00009B64 000168F4 7C 63 02 14 */ add r3, r3, r0 -/* 00009B68 000168F8 7D 28 03 A6 */ mtlr r9 -/* 00009B6C 000168FC 4E 80 00 21 */ blrl -/* 00009B70 00016900 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00009B74 00016904 41 82 9B A4 */ beq .L_00003718 -/* 00009B78 00016908 C1 9F 00 54 */ lfs f12, 0x54(r31) -/* 00009B7C 0001690C 3D 20 00 00 */ lis r9, .rodata+0x870@ha -/* 00009B80 00016910 C1 A9 08 70 */ lfs f13, .rodata+0x870@l(r9) -/* 00009B84 00016914 EC 1C E0 2A */ fadds f0, f28, f28 -/* 00009B88 00016918 ED 80 60 2A */ fadds f12, f0, f12 -/* 00009B8C 0001691C FC 00 68 90 */ fmr f0, f13 -/* 00009B90 00016920 D1 9F 00 54 */ stfs f12, 0x54(r31) -/* 00009B94 00016924 FC 0C 68 00 */ fcmpu cr0, f12, f13 -/* 00009B98 00016928 4C 62 0B 82 */ cror un, eq, gt -/* 00009B9C 0001692C 41 83 9B CC */ bso .L_00003768 -/* 00009BA0 00016930 48 00 9B C8 */ b .L_00013768 -/* 00009BA4 00016934 C0 1F 00 54 */ lfs f0, 0x54(r31) -/* 00009BA8 00016938 3D 20 00 00 */ lis r9, .rodata+0x860@ha -/* 00009BAC 0001693C C1 A9 08 60 */ lfs f13, .rodata+0x860@l(r9) -/* 00009BB0 00016940 ED 80 E0 28 */ fsubs f12, f0, f28 -/* 00009BB4 00016944 FC 00 68 90 */ fmr f0, f13 -/* 00009BB8 00016948 D1 9F 00 54 */ stfs f12, 0x54(r31) -/* 00009BBC 0001694C FC 0C 68 00 */ fcmpu cr0, f12, f13 -/* 00009BC0 00016950 4C 62 03 82 */ cror un, eq, lt -/* 00009BC4 00016954 41 83 9B CC */ bso .L_00003790 -/* 00009BC8 00016958 FC 00 60 90 */ fmr f0, f12 -/* 00009BCC 0001695C FD 80 00 90 */ fmr f12, f0 -/* 00009BD0 00016960 3D 20 00 00 */ lis r9, .rodata+0x88C@ha -/* 00009BD4 00016964 D1 9F 00 54 */ stfs f12, 0x54(r31) -/* 00009BD8 00016968 C0 09 08 8C */ lfs f0, .rodata+0x88C@l(r9) -/* 00009BDC 0001696C FC 0C 00 00 */ fcmpu cr0, f12, f0 -/* 00009BE0 00016970 4C 62 03 82 */ cror un, eq, lt -/* 00009BE4 00016974 41 83 9B F4 */ bso .L_000037D8 -/* 00009BE8 00016978 3D 20 00 00 */ lis r9, gGameBreakerCamera@ha -/* 00009BEC 0001697C 38 00 00 01 */ li r0, 0x1 -/* 00009BF0 00016980 90 09 00 00 */ stw r0, gGameBreakerCamera@l(r9) -/* 00009BF4 00016984 80 7F 00 48 */ lwz r3, 0x48(r31) -/* 00009BF8 00016988 81 23 00 04 */ lwz r9, 0x4(r3) -/* 00009BFC 0001698C A8 09 00 30 */ lha r0, 0x30(r9) -/* 00009C00 00016990 81 29 00 34 */ lwz r9, 0x34(r9) -/* 00009C04 00016994 7C 63 02 14 */ add r3, r3, r0 -/* 00009C08 00016998 7D 28 03 A6 */ mtlr r9 -/* 00009C0C 0001699C 4E 80 00 21 */ blrl -/* 00009C10 000169A0 7C 63 1B 79 */ mr. r3, r3 -/* 00009C14 000169A4 41 82 9D 48 */ beq .L_0000395C -/* 00009C18 000169A8 80 63 00 24 */ lwz r3, 0x24(r3) -/* 00009C1C 000169AC 48 00 00 01 */ bl GetPOVTypeFromPlayerCamera__F22ePlayerSettingsCameras -/* 00009C20 000169B0 7C 7D 1B 78 */ mr r29, r3 -/* 00009C24 000169B4 80 7F 00 50 */ lwz r3, 0x50(r31) -/* 00009C28 000169B8 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00009C2C 000169BC 41 82 9D 28 */ beq .L_00003954 -/* 00009C30 000169C0 80 63 00 00 */ lwz r3, 0x0(r3) -/* 00009C34 000169C4 3C 80 00 00 */ lis r4, _IHandle__6IInput@ha -/* 00009C38 000169C8 38 84 00 00 */ addi r4, r4, _IHandle__6IInput@l -/* 00009C3C 000169CC 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 00009C40 000169D0 7C 7E 1B 79 */ mr. r30, r3 -/* 00009C44 000169D4 38 00 00 01 */ li r0, 0x1 -/* 00009C48 000169D8 40 82 9C 50 */ bne .L_00003898 -/* 00009C4C 000169DC 38 00 00 00 */ li r0, 0x0 -/* 00009C50 000169E0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00009C54 000169E4 41 82 9D 28 */ beq .L_0000397C -/* 00009C58 000169E8 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 00009C5C 000169EC A8 69 00 80 */ lha r3, 0x80(r9) -/* 00009C60 000169F0 80 09 00 84 */ lwz r0, 0x84(r9) -/* 00009C64 000169F4 7C 7E 1A 14 */ add r3, r30, r3 -/* 00009C68 000169F8 7C 08 03 A6 */ mtlr r0 -/* 00009C6C 000169FC 4E 80 00 21 */ blrl -/* 00009C70 00016A00 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00009C74 00016A04 40 82 9C A0 */ bne .L_00003914 -/* 00009C78 00016A08 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 00009C7C 00016A0C A8 69 00 78 */ lha r3, 0x78(r9) -/* 00009C80 00016A10 80 09 00 7C */ lwz r0, 0x7c(r9) -/* 00009C84 00016A14 7C 7E 1A 14 */ add r3, r30, r3 -/* 00009C88 00016A18 7C 08 03 A6 */ mtlr r0 -/* 00009C8C 00016A1C 4E 80 00 21 */ blrl -/* 00009C90 00016A20 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00009C94 00016A24 41 82 9C CC */ beq .L_00003960 -/* 00009C98 00016A28 2C 15 00 00 */ cmpwi r21, 0x0 -/* 00009C9C 00016A2C 41 82 9C CC */ beq .L_00003968 -/* 00009CA0 00016A30 81 5F 00 2C */ lwz r10, 0x2c(r31) -/* 00009CA4 00016A34 38 80 00 06 */ li r4, 0x6 -/* 00009CA8 00016A38 3D 20 00 00 */ lis r9, old_pov.10900@ha -/* 00009CAC 00016A3C 81 6A 00 08 */ lwz r11, 0x8(r10) -/* 00009CB0 00016A40 93 A9 00 00 */ stw r29, old_pov.10900@l(r9) -/* 00009CB4 00016A44 A8 6B 00 48 */ lha r3, 0x48(r11) -/* 00009CB8 00016A48 80 0B 00 4C */ lwz r0, 0x4c(r11) -/* 00009CBC 00016A4C 7C 6A 1A 14 */ add r3, r10, r3 -/* 00009CC0 00016A50 7C 08 03 A6 */ mtlr r0 -.L_00009CC4: -/* 00009CC4 00016A54 4E 80 00 21 */ blrl -/* 00009CC8 00016A58 48 00 9D 48 */ b .L_00013A10 -/* 00009CCC 00016A5C 3F C0 00 00 */ lis r30, old_pov.10900@ha -/* 00009CD0 00016A60 80 9E 00 00 */ lwz r4, old_pov.10900@l(r30) -/* 00009CD4 00016A64 2C 04 FF FF */ cmpwi r4, -0x1 -/* 00009CD8 00016A68 40 81 9D 04 */ ble .L_000039DC -/* 00009CDC 00016A6C 81 7F 00 2C */ lwz r11, 0x2c(r31) -/* 00009CE0 00016A70 81 2B 00 08 */ lwz r9, 0x8(r11) -/* 00009CE4 00016A74 80 09 00 4C */ lwz r0, 0x4c(r9) -/* 00009CE8 00016A78 A8 69 00 48 */ lha r3, 0x48(r9) -/* 00009CEC 00016A7C 7C 08 03 A6 */ mtlr r0 -/* 00009CF0 00016A80 7C 6B 1A 14 */ add r3, r11, r3 -/* 00009CF4 00016A84 4E 80 00 21 */ blrl -/* 00009CF8 00016A88 38 00 FF FF */ li r0, -0x1 -/* 00009CFC 00016A8C 90 1E 00 00 */ stw r0, old_pov.10900@l(r30) -/* 00009D00 00016A90 48 00 9D 48 */ b .L_00013A48 -/* 00009D04 00016A94 80 7F 00 2C */ lwz r3, 0x2c(r31) -/* 00009D08 00016A98 7F A4 EB 78 */ mr r4, r29 -/* 00009D0C 00016A9C 81 23 00 08 */ lwz r9, 0x8(r3) -/* 00009D10 00016AA0 A8 09 00 48 */ lha r0, 0x48(r9) -/* 00009D14 00016AA4 81 29 00 4C */ lwz r9, 0x4c(r9) -/* 00009D18 00016AA8 7C 63 02 14 */ add r3, r3, r0 -/* 00009D1C 00016AAC 7D 28 03 A6 */ mtlr r9 -/* 00009D20 00016AB0 4E 80 00 21 */ blrl -/* 00009D24 00016AB4 48 00 9D 48 */ b .L_00013A6C -/* 00009D28 00016AB8 80 7F 00 2C */ lwz r3, 0x2c(r31) -/* 00009D2C 00016ABC 7F A4 EB 78 */ mr r4, r29 -/* 00009D30 00016AC0 81 23 00 08 */ lwz r9, 0x8(r3) -/* 00009D34 00016AC4 A8 09 00 48 */ lha r0, 0x48(r9) -/* 00009D38 00016AC8 81 29 00 4C */ lwz r9, 0x4c(r9) -/* 00009D3C 00016ACC 7C 63 02 14 */ add r3, r3, r0 -/* 00009D40 00016AD0 7D 28 03 A6 */ mtlr r9 -/* 00009D44 00016AD4 4E 80 00 21 */ blrl -/* 00009D48 00016AD8 80 1F 00 3C */ lwz r0, 0x3c(r31) -/* 00009D4C 00016ADC 39 20 00 01 */ li r9, 0x1 -/* 00009D50 00016AE0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00009D54 00016AE4 40 82 9D 5C */ bne .L_00003AB0 -/* 00009D58 00016AE8 39 20 00 00 */ li r9, 0x0 -/* 00009D5C 00016AEC 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00009D60 00016AF0 41 82 A4 90 */ beq .L_000041F0 -/* 00009D64 00016AF4 81 7F 00 50 */ lwz r11, 0x50(r31) -/* 00009D68 00016AF8 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00009D6C 00016AFC 41 82 9D 9C */ beq .L_00003B08 -/* 00009D70 00016B00 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 00009D74 00016B04 80 09 00 6C */ lwz r0, 0x6c(r9) -/* 00009D78 00016B08 A8 69 00 68 */ lha r3, 0x68(r9) -/* 00009D7C 00016B0C 7C 08 03 A6 */ mtlr r0 -/* 00009D80 00016B10 7C 6B 1A 14 */ add r3, r11, r3 -/* 00009D84 00016B14 4E 80 00 21 */ blrl -/* 00009D88 00016B18 81 3F 00 34 */ lwz r9, 0x34(r31) -/* 00009D8C 00016B1C 68 63 00 01 */ xori r3, r3, 0x1 -/* 00009D90 00016B20 20 03 00 00 */ subfic r0, r3, 0x0 -/* 00009D94 00016B24 7C 60 19 14 */ adde r3, r0, r3 -/* 00009D98 00016B28 90 69 00 BC */ stw r3, 0xbc(r9) -/* 00009D9C 00016B2C 80 7F 00 3C */ lwz r3, 0x3c(r31) -/* 00009DA0 00016B30 38 81 00 08 */ addi r4, r1, 0x8 -/* 00009DA4 00016B34 3B C0 00 00 */ li r30, 0x0 -/* 00009DA8 00016B38 48 00 00 01 */ bl PSMTX44Copy -/* 00009DAC 00016B3C 3D 20 00 00 */ lis r9, _10SimSurface.kNull+0x4@ha -/* 00009DB0 00016B40 80 7F 00 34 */ lwz r3, 0x34(r31) -/* 00009DB4 00016B44 80 89 00 04 */ lwz r4, _10SimSurface.kNull+0x4@l(r9) -/* 00009DB8 00016B48 38 63 00 90 */ addi r3, r3, 0x90 -/* 00009DBC 00016B4C 48 00 00 01 */ bl Change__Q26Attrib8InstancePCQ26Attrib10Collection -/* 00009DC0 00016B50 81 3F 00 34 */ lwz r9, 0x34(r31) -/* 00009DC4 00016B54 93 C9 00 C4 */ stw r30, 0xc4(r9) -/* 00009DC8 00016B58 80 7F 00 50 */ lwz r3, 0x50(r31) -/* 00009DCC 00016B5C 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00009DD0 00016B60 41 82 9F C0 */ beq .L_00003D90 -/* 00009DD4 00016B64 80 63 00 00 */ lwz r3, 0x0(r3) -/* 00009DD8 00016B68 3C 80 00 00 */ lis r4, _IHandle__14ICollisionBody@ha -/* 00009DDC 00016B6C 38 84 00 00 */ addi r4, r4, _IHandle__14ICollisionBody@l -/* 00009DE0 00016B70 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 00009DE4 00016B74 7C 7C 1B 79 */ mr. r28, r3 -/* 00009DE8 00016B78 38 00 00 01 */ li r0, 0x1 -/* 00009DEC 00016B7C 40 82 9D F4 */ bne .L_00003BE0 -.L_00009DF0: -/* 00009DF0 00016B80 38 00 00 00 */ li r0, 0x0 -/* 00009DF4 00016B84 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00009DF8 00016B88 41 82 9F C0 */ beq .L_00003DB8 -/* 00009DFC 00016B8C 81 7F 00 50 */ lwz r11, 0x50(r31) -/* 00009E00 00016B90 3B A1 00 50 */ addi r29, r1, 0x50 -/* 00009E04 00016B94 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 00009E08 00016B98 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 00009E0C 00016B9C A8 69 00 18 */ lha r3, 0x18(r9) -/* 00009E10 00016BA0 7C 08 03 A6 */ mtlr r0 -/* 00009E14 00016BA4 7C 6B 1A 14 */ add r3, r11, r3 -/* 00009E18 00016BA8 4E 80 00 21 */ blrl -.L_00009E1C: -/* 00009E1C 00016BAC 81 23 00 04 */ lwz r9, 0x4(r3) -/* 00009E20 00016BB0 A8 09 00 A8 */ lha r0, 0xa8(r9) -/* 00009E24 00016BB4 81 29 00 AC */ lwz r9, 0xac(r9) -/* 00009E28 00016BB8 7C 63 02 14 */ add r3, r3, r0 -/* 00009E2C 00016BBC 7D 28 03 A6 */ mtlr r9 -/* 00009E30 00016BC0 4E 80 00 21 */ blrl -/* 00009E34 00016BC4 81 3C 00 04 */ lwz r9, 0x4(r28) -/* 00009E38 00016BC8 7C 7E 1B 78 */ mr r30, r3 -/* 00009E3C 00016BCC 80 09 00 84 */ lwz r0, 0x84(r9) -/* 00009E40 00016BD0 A8 69 00 80 */ lha r3, 0x80(r9) -/* 00009E44 00016BD4 7C 08 03 A6 */ mtlr r0 -/* 00009E48 00016BD8 7C 7C 1A 14 */ add r3, r28, r3 -/* 00009E4C 00016BDC 4E 80 00 21 */ blrl -/* 00009E50 00016BE0 C1 A3 00 00 */ lfs f13, 0x0(r3) -/* 00009E54 00016BE4 7F A4 EB 78 */ mr r4, r29 -/* 00009E58 00016BE8 38 A0 00 00 */ li r5, 0x0 -/* 00009E5C 00016BEC D1 A1 00 50 */ stfs f13, 0x50(r1) -/* 00009E60 00016BF0 C0 03 00 04 */ lfs f0, 0x4(r3) -/* 00009E64 00016BF4 D0 01 00 54 */ stfs f0, 0x54(r1) -.L_00009E68: -/* 00009E68 00016BF8 C1 A3 00 08 */ lfs f13, 0x8(r3) -/* 00009E6C 00016BFC D1 A1 00 58 */ stfs f13, 0x58(r1) -.L_00009E70: -/* 00009E70 00016C00 81 3E 00 04 */ lwz r9, 0x4(r30) -.L_00009E74: -/* 00009E74 00016C04 80 09 01 4C */ lwz r0, 0x14c(r9) -.L_00009E78: -/* 00009E78 00016C08 A8 69 01 48 */ lha r3, 0x148(r9) -/* 00009E7C 00016C0C 7C 08 03 A6 */ mtlr r0 -.L_00009E80: -/* 00009E80 00016C10 7C 7E 1A 14 */ add r3, r30, r3 -/* 00009E84 00016C14 4E 80 00 21 */ blrl -/* 00009E88 00016C18 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 00009E8C 00016C1C 80 09 00 4C */ lwz r0, 0x4c(r9) -/* 00009E90 00016C20 A8 69 00 48 */ lha r3, 0x48(r9) -/* 00009E94 00016C24 7C 08 03 A6 */ mtlr r0 -/* 00009E98 00016C28 7C 7E 1A 14 */ add r3, r30, r3 -/* 00009E9C 00016C2C 4E 80 00 21 */ blrl -/* 00009EA0 00016C30 7C 64 1B 78 */ mr r4, r3 -/* 00009EA4 00016C34 7F A3 EB 78 */ mr r3, r29 -/* 00009EA8 00016C38 7C 65 1B 78 */ mr r5, r3 -.L_00009EAC: -/* 00009EAC 00016C3C 48 00 00 01 */ bl VU0_v3add__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 -/* 00009EB0 00016C40 C0 01 00 50 */ lfs f0, 0x50(r1) -/* 00009EB4 00016C44 3C 80 00 00 */ lis r4, _IHandle__11ISuspension@ha -/* 00009EB8 00016C48 C1 A1 00 58 */ lfs f13, 0x58(r1) -/* 00009EBC 00016C4C 38 84 00 00 */ addi r4, r4, _IHandle__11ISuspension@l -/* 00009EC0 00016C50 C1 81 00 54 */ lfs f12, 0x54(r1) -/* 00009EC4 00016C54 FC 00 00 50 */ fneg f0, f0 -/* 00009EC8 00016C58 D1 A1 00 38 */ stfs f13, 0x38(r1) -/* 00009ECC 00016C5C D0 01 00 3C */ stfs f0, 0x3c(r1) -/* 00009ED0 00016C60 D1 81 00 40 */ stfs f12, 0x40(r1) -/* 00009ED4 00016C64 81 3F 00 50 */ lwz r9, 0x50(r31) -/* 00009ED8 00016C68 80 69 00 00 */ lwz r3, 0x0(r9) -/* 00009EDC 00016C6C 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 00009EE0 00016C70 7C 7D 1B 79 */ mr. r29, r3 -/* 00009EE4 00016C74 38 00 00 01 */ li r0, 0x1 -/* 00009EE8 00016C78 40 82 9E F0 */ bne .L_00003DD8 -/* 00009EEC 00016C7C 38 00 00 00 */ li r0, 0x0 -/* 00009EF0 00016C80 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00009EF4 00016C84 41 82 9F C0 */ beq .L_00003EB4 -/* 00009EF8 00016C88 81 3D 00 04 */ lwz r9, 0x4(r29) -/* 00009EFC 00016C8C 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 00009F00 00016C90 A8 69 00 18 */ lha r3, 0x18(r9) -.L_00009F04: -/* 00009F04 00016C94 7C 08 03 A6 */ mtlr r0 -/* 00009F08 00016C98 7C 7D 1A 14 */ add r3, r29, r3 -/* 00009F0C 00016C9C 4E 80 00 21 */ blrl -/* 00009F10 00016CA0 81 3D 00 04 */ lwz r9, 0x4(r29) -/* 00009F14 00016CA4 7C 7E 1B 78 */ mr r30, r3 -/* 00009F18 00016CA8 A8 69 00 A0 */ lha r3, 0xa0(r9) -/* 00009F1C 00016CAC 80 09 00 A4 */ lwz r0, 0xa4(r9) -/* 00009F20 00016CB0 7C 7D 1A 14 */ add r3, r29, r3 -/* 00009F24 00016CB4 7C 08 03 A6 */ mtlr r0 -/* 00009F28 00016CB8 4E 80 00 21 */ blrl -/* 00009F2C 00016CBC 7C 1E 18 00 */ cmpw r30, r3 -.L_00009F30: -/* 00009F30 00016CC0 40 82 9F 94 */ bne .L_00003EC4 -/* 00009F34 00016CC4 81 7F 00 50 */ lwz r11, 0x50(r31) -/* 00009F38 00016CC8 3B C1 00 60 */ addi r30, r1, 0x60 -/* 00009F3C 00016CCC 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 00009F40 00016CD0 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 00009F44 00016CD4 A8 69 00 18 */ lha r3, 0x18(r9) -/* 00009F48 00016CD8 7C 08 03 A6 */ mtlr r0 -/* 00009F4C 00016CDC 7C 6B 1A 14 */ add r3, r11, r3 -/* 00009F50 00016CE0 4E 80 00 21 */ blrl -/* 00009F54 00016CE4 81 23 00 04 */ lwz r9, 0x4(r3) -/* 00009F58 00016CE8 A8 09 00 98 */ lha r0, 0x98(r9) -/* 00009F5C 00016CEC 81 29 00 9C */ lwz r9, 0x9c(r9) -/* 00009F60 00016CF0 7C 63 02 14 */ add r3, r3, r0 -/* 00009F64 00016CF4 7D 28 03 A6 */ mtlr r9 -/* 00009F68 00016CF8 4E 80 00 21 */ blrl -/* 00009F6C 00016CFC 80 83 00 38 */ lwz r4, 0x38(r3) -/* 00009F70 00016D00 7F C3 F3 78 */ mr r3, r30 -/* 00009F74 00016D04 48 00 00 01 */ bl __10SimSurfacePCQ26Attrib10Collection -/* 00009F78 00016D08 80 7F 00 34 */ lwz r3, 0x34(r31) -/* 00009F7C 00016D0C 80 81 00 64 */ lwz r4, 0x64(r1) -/* 00009F80 00016D10 38 63 00 90 */ addi r3, r3, 0x90 -/* 00009F84 00016D14 48 00 00 01 */ bl Change__Q26Attrib8InstancePCQ26Attrib10Collection -/* 00009F88 00016D18 7F C3 F3 78 */ mr r3, r30 -/* 00009F8C 00016D1C 38 80 00 00 */ li r4, 0x0 -/* 00009F90 00016D20 48 00 00 01 */ bl _._Q26Attrib8Instance -/* 00009F94 00016D24 81 3D 00 04 */ lwz r9, 0x4(r29) -/* 00009F98 00016D28 A8 69 00 A0 */ lha r3, 0xa0(r9) -/* 00009F9C 00016D2C 80 09 00 A4 */ lwz r0, 0xa4(r9) -/* 00009FA0 00016D30 7C 7D 1A 14 */ add r3, r29, r3 -/* 00009FA4 00016D34 7C 08 03 A6 */ mtlr r0 -/* 00009FA8 00016D38 4E 80 00 21 */ blrl -/* 00009FAC 00016D3C 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00009FB0 00016D40 40 81 9F C0 */ ble .L_00003F70 -/* 00009FB4 00016D44 81 3F 00 34 */ lwz r9, 0x34(r31) -/* 00009FB8 00016D48 38 00 00 01 */ li r0, 0x1 -/* 00009FBC 00016D4C 90 09 00 C4 */ stw r0, 0xc4(r9) -/* 00009FC0 00016D50 81 3F 00 34 */ lwz r9, 0x34(r31) -/* 00009FC4 00016D54 38 00 00 00 */ li r0, 0x0 -/* 00009FC8 00016D58 90 09 00 B4 */ stw r0, 0xb4(r9) -.L_00009FCC: -/* 00009FCC 00016D5C 81 7F 00 34 */ lwz r11, 0x34(r31) -/* 00009FD0 00016D60 90 0B 00 C0 */ stw r0, 0xc0(r11) -/* 00009FD4 00016D64 80 7F 00 50 */ lwz r3, 0x50(r31) -/* 00009FD8 00016D68 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00009FDC 00016D6C 41 82 A0 A4 */ beq .L_00004080 -/* 00009FE0 00016D70 80 63 00 00 */ lwz r3, 0x0(r3) -/* 00009FE4 00016D74 3C 80 00 00 */ lis r4, _IHandle__8ISimable@ha -/* 00009FE8 00016D78 38 84 00 00 */ addi r4, r4, _IHandle__8ISimable@l -/* 00009FEC 00016D7C 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 00009FF0 00016D80 7C 63 1B 79 */ mr. r3, r3 -/* 00009FF4 00016D84 38 00 00 01 */ li r0, 0x1 -/* 00009FF8 00016D88 40 82 A0 00 */ bne SetForward__16CubicCameraMoverP3POVb -/* 00009FFC 00016D8C 38 00 00 00 */ li r0, 0x0 -/* 0000A000 00016D90 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000A004 00016D94 41 82 A0 A4 */ beq .L_000040A8 -/* 0000A008 00016D98 80 63 00 00 */ lwz r3, 0x0(r3) -/* 0000A00C 00016D9C 3C 80 00 00 */ lis r4, _IHandle__7IEngine@ha -/* 0000A010 00016DA0 38 84 00 00 */ addi r4, r4, _IHandle__7IEngine@l -/* 0000A014 00016DA4 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000A018 00016DA8 7C 7E 1B 79 */ mr. r30, r3 -/* 0000A01C 00016DAC 38 00 00 01 */ li r0, 0x1 -/* 0000A020 00016DB0 40 82 A0 28 */ bne .L_00004048 -/* 0000A024 00016DB4 38 00 00 00 */ li r0, 0x0 -/* 0000A028 00016DB8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000A02C 00016DBC 41 82 A0 A4 */ beq .L_000040D0 -/* 0000A030 00016DC0 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000A034 00016DC4 80 09 00 4C */ lwz r0, 0x4c(r9) -/* 0000A038 00016DC8 A8 69 00 48 */ lha r3, 0x48(r9) -/* 0000A03C 00016DCC 7C 08 03 A6 */ mtlr r0 -/* 0000A040 00016DD0 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000A044 00016DD4 4E 80 00 21 */ blrl -/* 0000A048 00016DD8 81 3F 00 34 */ lwz r9, 0x34(r31) -/* 0000A04C 00016DDC 90 69 00 B4 */ stw r3, 0xb4(r9) -/* 0000A050 00016DE0 81 7E 00 04 */ lwz r11, 0x4(r30) -/* 0000A054 00016DE4 80 0B 00 14 */ lwz r0, 0x14(r11) -/* 0000A058 00016DE8 A8 6B 00 10 */ lha r3, 0x10(r11) -/* 0000A05C 00016DEC 7C 08 03 A6 */ mtlr r0 -/* 0000A060 00016DF0 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000A064 00016DF4 4E 80 00 21 */ blrl -/* 0000A068 00016DF8 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000A06C 00016DFC FF E0 08 90 */ fmr f31, f1 -/* 0000A070 00016E00 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0000A074 00016E04 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000A078 00016E08 7C 08 03 A6 */ mtlr r0 -/* 0000A07C 00016E0C 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000A080 00016E10 4E 80 00 21 */ blrl -/* 0000A084 00016E14 3D 20 00 00 */ lis r9, .rodata+0x890@ha -/* 0000A088 00016E18 81 7F 00 34 */ lwz r11, 0x34(r31) -/* 0000A08C 00016E1C C0 09 08 90 */ lfs f0, .rodata+0x890@l(r9) -/* 0000A090 00016E20 EC 21 00 28 */ fsubs f1, f1, f0 -/* 0000A094 00016E24 FF 9F 08 00 */ fcmpu cr7, f31, f1 -/* 0000A098 00016E28 7C 00 00 26 */ mfcr r0 -/* 0000A09C 00016E2C 54 00 F7 FE */ extrwi r0, r0, 1, 29 -/* 0000A0A0 00016E30 90 0B 00 C0 */ stw r0, 0xc0(r11) -/* 0000A0A4 00016E34 81 3F 00 34 */ lwz r9, 0x34(r31) -/* 0000A0A8 00016E38 3D 60 00 00 */ lis r11, .rodata+0x860@ha -/* 0000A0AC 00016E3C C3 EB 08 60 */ lfs f31, .rodata+0x860@l(r11) -/* 0000A0B0 00016E40 3E 80 00 00 */ lis r20, .rodata+0x870@ha -/* 0000A0B4 00016E44 80 09 00 C4 */ lwz r0, 0xc4(r9) -/* 0000A0B8 00016E48 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000A0BC 00016E4C 41 82 A1 A8 */ beq .L_00004264 -/* 0000A0C0 00016E50 81 7F 00 50 */ lwz r11, 0x50(r31) -/* 0000A0C4 00016E54 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000A0C8 00016E58 41 82 A1 A8 */ beq .L_00004270 -/* 0000A0CC 00016E5C 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000A0D0 00016E60 A8 69 01 68 */ lha r3, 0x168(r9) -/* 0000A0D4 00016E64 80 09 01 6C */ lwz r0, 0x16c(r9) -.L_0000A0D8: -/* 0000A0D8 00016E68 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000A0DC 00016E6C 7C 08 03 A6 */ mtlr r0 -/* 0000A0E0 00016E70 4E 80 00 21 */ blrl -/* 0000A0E4 00016E74 FD 60 08 90 */ fmr f11, f1 -/* 0000A0E8 00016E78 FC 01 F8 00 */ fcmpu cr0, f1, f31 -/* 0000A0EC 00016E7C 4C 62 0B 82 */ cror un, eq, gt -/* 0000A0F0 00016E80 41 83 A0 F8 */ bso .L_000041E8 -/* 0000A0F4 00016E84 FD 60 58 50 */ fneg f11, f11 -/* 0000A0F8 00016E88 3D 40 00 00 */ lis r10, .rodata+0x894@ha -/* 0000A0FC 00016E8C 3D 20 00 00 */ lis r9, .rodata+0x898@ha -/* 0000A100 00016E90 3D 60 00 00 */ lis r11, .rodata+0x89C@ha -/* 0000A104 00016E94 C1 89 08 98 */ lfs f12, .rodata+0x898@l(r9) -/* 0000A108 00016E98 C1 AA 08 94 */ lfs f13, .rodata+0x894@l(r10) -/* 0000A10C 00016E9C C0 0B 08 9C */ lfs f0, .rodata+0x89C@l(r11) -/* 0000A110 00016EA0 ED AB 63 78 */ fmsubs f13, f11, f13, f12 -/* 0000A114 00016EA4 C3 D4 08 70 */ lfs f30, .rodata+0x870@l(r20) -/* 0000A118 00016EA8 EC 00 60 28 */ fsubs f0, f0, f12 -/* 0000A11C 00016EAC EC 2D 00 24 */ fdivs f1, f13, f0 -/* 0000A120 00016EB0 FC 00 F0 90 */ fmr f0, f30 -/* 0000A124 00016EB4 FC 01 F0 00 */ fcmpu cr0, f1, f30 -/* 0000A128 00016EB8 4C 62 0B 82 */ cror un, eq, gt -/* 0000A12C 00016EBC 41 83 A1 34 */ bso .L_00004260 -/* 0000A130 00016EC0 FC 00 08 90 */ fmr f0, f1 -/* 0000A134 00016EC4 FD A0 00 90 */ fmr f13, f0 -/* 0000A138 00016EC8 FF A0 F8 90 */ fmr f29, f31 -/* 0000A13C 00016ECC FC 1F 00 00 */ fcmpu cr0, f31, f0 -/* 0000A140 00016ED0 4C 62 03 82 */ cror un, eq, lt -/* 0000A144 00016ED4 41 83 A1 4C */ bso .L_00004290 -/* 0000A148 00016ED8 FD A0 F8 90 */ fmr f13, f31 -/* 0000A14C 00016EDC 81 7F 00 50 */ lwz r11, 0x50(r31) -/* 0000A150 00016EE0 FF E0 68 90 */ fmr f31, f13 -/* 0000A154 00016EE4 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000A158 00016EE8 A8 69 01 38 */ lha r3, 0x138(r9) -/* 0000A15C 00016EEC 80 09 01 3C */ lwz r0, 0x13c(r9) -/* 0000A160 00016EF0 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000A164 00016EF4 7C 08 03 A6 */ mtlr r0 -/* 0000A168 00016EF8 4E 80 00 21 */ blrl -/* 0000A16C 00016EFC 3D 20 00 00 */ lis r9, .rodata+0x878@ha -/* 0000A170 00016F00 FD A0 F0 90 */ fmr f13, f30 -/* 0000A174 00016F04 C0 09 08 78 */ lfs f0, .rodata+0x878@l(r9) -/* 0000A178 00016F08 EC 21 00 28 */ fsubs f1, f1, f0 -/* 0000A17C 00016F0C EC 21 00 24 */ fdivs f1, f1, f0 -/* 0000A180 00016F10 FC 01 F0 00 */ fcmpu cr0, f1, f30 -/* 0000A184 00016F14 4C 62 0B 82 */ cror un, eq, gt -/* 0000A188 00016F18 41 83 A1 90 */ bso .L_00004318 -/* 0000A18C 00016F1C FD A0 08 90 */ fmr f13, f1 -/* 0000A190 00016F20 FC 00 68 90 */ fmr f0, f13 -/* 0000A194 00016F24 FC 1D 68 00 */ fcmpu cr0, f29, f13 -/* 0000A198 00016F28 4C 62 03 82 */ cror un, eq, lt -/* 0000A19C 00016F2C 41 83 A1 A4 */ bso .L_00004340 -/* 0000A1A0 00016F30 FC 00 E8 90 */ fmr f0, f29 -/* 0000A1A4 00016F34 EF FF 00 32 */ fmuls f31, f31, f0 -/* 0000A1A8 00016F38 81 3F 00 34 */ lwz r9, 0x34(r31) -/* 0000A1AC 00016F3C 38 00 00 00 */ li r0, 0x0 -.L_0000A1B0: -/* 0000A1B0 00016F40 3C 80 00 00 */ lis r4, _IHandle__13ITransmission@ha -/* 0000A1B4 00016F44 D3 E9 00 A8 */ stfs f31, 0xa8(r9) -/* 0000A1B8 00016F48 38 84 00 00 */ addi r4, r4, _IHandle__13ITransmission@l -/* 0000A1BC 00016F4C 81 3F 00 34 */ lwz r9, 0x34(r31) -/* 0000A1C0 00016F50 90 09 00 CC */ stw r0, 0xcc(r9) -/* 0000A1C4 00016F54 81 7F 00 50 */ lwz r11, 0x50(r31) -/* 0000A1C8 00016F58 80 6B 00 00 */ lwz r3, 0x0(r11) -/* 0000A1CC 00016F5C 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000A1D0 00016F60 7C 6B 1B 79 */ mr. r11, r3 -/* 0000A1D4 00016F64 38 00 00 01 */ li r0, 0x1 -/* 0000A1D8 00016F68 40 82 A1 E0 */ bne .L_000043B8 -/* 0000A1DC 00016F6C 38 00 00 00 */ li r0, 0x0 -/* 0000A1E0 00016F70 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000A1E4 00016F74 41 82 A2 20 */ beq .L_00004404 -.L_0000A1E8: -/* 0000A1E8 00016F78 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000A1EC 00016F7C 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000A1F0 00016F80 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000A1F4 00016F84 7C 08 03 A6 */ mtlr r0 -/* 0000A1F8 00016F88 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000A1FC 00016F8C 4E 80 00 21 */ blrl -/* 0000A200 00016F90 80 1F 00 78 */ lwz r0, 0x78(r31) -/* 0000A204 00016F94 39 60 00 01 */ li r11, 0x1 -/* 0000A208 00016F98 7C 03 00 00 */ cmpw r3, r0 -/* 0000A20C 00016F9C 40 82 A2 14 */ bne .L_00004420 -/* 0000A210 00016FA0 39 60 00 00 */ li r11, 0x0 -/* 0000A214 00016FA4 81 3F 00 34 */ lwz r9, 0x34(r31) -.L_0000A218: -/* 0000A218 00016FA8 91 69 00 CC */ stw r11, 0xcc(r9) -/* 0000A21C 00016FAC 90 7F 00 78 */ stw r3, 0x78(r31) -/* 0000A220 00016FB0 C0 1F 00 68 */ lfs f0, 0x68(r31) -/* 0000A224 00016FB4 3D 20 00 00 */ lis r9, .rodata+0x870@ha -/* 0000A228 00016FB8 C1 BF 00 5C */ lfs f13, 0x5c(r31) -/* 0000A22C 00016FBC 3D 60 00 00 */ lis r11, .rodata+0x8A0@ha -/* 0000A230 00016FC0 81 5F 00 34 */ lwz r10, 0x34(r31) -/* 0000A234 00016FC4 FC 20 E0 90 */ fmr f1, f28 -/* 0000A238 00016FC8 ED AD 00 24 */ fdivs f13, f13, f0 -/* 0000A23C 00016FCC C1 69 08 70 */ lfs f11, .rodata+0x870@l(r9) -/* 0000A240 00016FD0 C1 4B 08 A0 */ lfs f10, .rodata+0x8A0@l(r11) -/* 0000A244 00016FD4 38 81 00 08 */ addi r4, r1, 0x8 -/* 0000A248 00016FD8 D1 AA 00 A4 */ stfs f13, 0xa4(r10) -/* 0000A24C 00016FDC C1 BF 00 68 */ lfs f13, 0x68(r31) -/* 0000A250 00016FE0 C0 1F 00 60 */ lfs f0, 0x60(r31) -/* 0000A254 00016FE4 81 3F 00 34 */ lwz r9, 0x34(r31) -/* 0000A258 00016FE8 EC 00 68 24 */ fdivs f0, f0, f13 -/* 0000A25C 00016FEC D0 09 00 AC */ stfs f0, 0xac(r9) -/* 0000A260 00016FF0 C0 1F 00 68 */ lfs f0, 0x68(r31) -/* 0000A264 00016FF4 C1 BF 00 64 */ lfs f13, 0x64(r31) -/* 0000A268 00016FF8 81 3F 00 34 */ lwz r9, 0x34(r31) -/* 0000A26C 00016FFC ED AD 00 24 */ fdivs f13, f13, f0 -/* 0000A270 00017000 D1 A9 00 B0 */ stfs f13, 0xb0(r9) -/* 0000A274 00017004 C1 9F 00 54 */ lfs f12, 0x54(r31) -/* 0000A278 00017008 C1 BF 00 70 */ lfs f13, 0x70(r31) -/* 0000A27C 0001700C 81 3F 00 34 */ lwz r9, 0x34(r31) -/* 0000A280 00017010 EC 0C 68 28 */ fsubs f0, f12, f13 -/* 0000A284 00017014 FC 00 6B 2E */ fsel f0, f0, f12, f13 -.L_0000A288: -/* 0000A288 00017018 EC 00 02 B2 */ fmuls f0, f0, f10 -/* 0000A28C 0001701C ED 6B 00 28 */ fsubs f11, f11, f0 -/* 0000A290 00017020 D1 69 00 D4 */ stfs f11, 0xd4(r9) -/* 0000A294 00017024 80 7F 00 34 */ lwz r3, 0x34(r31) -/* 0000A298 00017028 80 BF 00 40 */ lwz r5, 0x40(r31) -/* 0000A29C 0001702C 80 DF 00 44 */ lwz r6, 0x44(r31) -/* 0000A2A0 00017030 48 00 17 65 */ bl .L_0000BA04 -/* 0000A2A4 00017034 81 3F 00 58 */ lwz r9, 0x58(r31) -.L_0000A2A8: -/* 0000A2A8 00017038 38 69 FF FF */ subi r3, r9, 0x1 -/* 0000A2AC 0001703C 28 03 00 01 */ cmplwi r3, 0x1 -/* 0000A2B0 00017040 41 81 A4 90 */ bgt .L_00004740 -/* 0000A2B4 00017044 80 9F 00 34 */ lwz r4, 0x34(r31) -/* 0000A2B8 00017048 3F 80 00 00 */ lis r28, _Q33UTL11Collectionst8Listable2Z10IExplosioni96._mTable@ha -/* 0000A2BC 0001704C 3F 40 00 00 */ lis r26, .rodata+0x86C@ha -/* 0000A2C0 00017050 3B 7C 00 00 */ addi r27, r28, _Q33UTL11Collectionst8Listable2Z10IExplosioni96._mTable@l -/* 0000A2C4 00017054 38 84 00 38 */ addi r4, r4, 0x38 -.L_0000A2C8: -/* 0000A2C8 00017058 48 00 00 01 */ bl MaybeCameraShake__FiP8bVector3 -/* 0000A2CC 0001705C 3D 20 00 00 */ lis r9, .rodata+0x868@ha -/* 0000A2D0 00017060 3D 40 00 00 */ lis r10, _Q33UTL11Collectionst8Listable2Z10IExplosioni96._mTable@ha -/* 0000A2D4 00017064 C3 69 08 68 */ lfs f27, .rodata+0x868@l(r9) -/* 0000A2D8 00017068 3D 60 00 00 */ lis r11, .rodata+0x8A4@ha -/* 0000A2DC 0001706C 3D 20 00 00 */ lis r9, .rodata+0x860@ha -/* 0000A2E0 00017070 C3 AB 08 A4 */ lfs f29, .rodata+0x8A4@l(r11) -/* 0000A2E4 00017074 C3 C9 08 60 */ lfs f30, .rodata+0x860@l(r9) -/* 0000A2E8 00017078 83 AA 00 00 */ lwz r29, _Q33UTL11Collectionst8Listable2Z10IExplosioni96._mTable@l(r10) -/* 0000A2EC 0001707C 80 1B 00 08 */ lwz r0, 0x8(r27) -/* 0000A2F0 00017080 81 3C 00 00 */ lwz r9, _Q33UTL11Collectionst8Listable2Z10IExplosioni96._mTable@l(r28) -.L_0000A2F4: -/* 0000A2F4 00017084 54 00 10 3A */ slwi r0, r0, 2 -/* 0000A2F8 00017088 7D 29 02 14 */ add r9, r9, r0 -.L_0000A2FC: -/* 0000A2FC 0001708C 7C 1D 48 00 */ cmpw r29, r9 -/* 0000A300 00017090 41 82 A4 90 */ beq .L_00004790 -/* 0000A304 00017094 83 DD 00 00 */ lwz r30, 0x0(r29) -/* 0000A308 00017098 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000A30C 0001709C A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000A310 000170A0 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000A314 000170A4 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000A318 000170A8 7C 08 03 A6 */ mtlr r0 -/* 0000A31C 000170AC 4E 80 00 21 */ blrl -/* 0000A320 000170B0 C0 03 00 00 */ lfs f0, 0x0(r3) -/* 0000A324 000170B4 C1 43 00 04 */ lfs f10, 0x4(r3) -/* 0000A328 000170B8 C1 A3 00 08 */ lfs f13, 0x8(r3) -/* 0000A32C 000170BC FC 00 00 50 */ fneg f0, f0 -/* 0000A330 000170C0 D0 01 00 54 */ stfs f0, 0x54(r1) -/* 0000A334 000170C4 D1 A1 00 50 */ stfs f13, 0x50(r1) -/* 0000A338 000170C8 D1 41 00 58 */ stfs f10, 0x58(r1) -/* 0000A33C 000170CC C1 1A 08 6C */ lfs f8, .rodata+0x86C@l(r26) -/* 0000A340 000170D0 81 3F 00 2C */ lwz r9, 0x2c(r31) -.L_0000A344: -/* 0000A344 000170D4 81 69 00 1C */ lwz r11, 0x1c(r9) -/* 0000A348 000170D8 C1 8B 00 44 */ lfs f12, 0x44(r11) -/* 0000A34C 000170DC C1 2B 00 40 */ lfs f9, 0x40(r11) -/* 0000A350 000170E0 C1 6B 00 48 */ lfs f11, 0x48(r11) -/* 0000A354 000170E4 EC 00 60 28 */ fsubs f0, f0, f12 -/* 0000A358 000170E8 D0 01 00 64 */ stfs f0, 0x64(r1) -/* 0000A35C 000170EC ED AD 48 28 */ fsubs f13, f13, f9 -/* 0000A360 000170F0 ED 4A 58 28 */ fsubs f10, f10, f11 -/* 0000A364 000170F4 D1 A1 00 60 */ stfs f13, 0x60(r1) -/* 0000A368 000170F8 EC 00 00 32 */ fmuls f0, f0, f0 -/* 0000A36C 000170FC D1 41 00 68 */ stfs f10, 0x68(r1) -/* 0000A370 00017100 ED AD 03 7A */ fmadds f13, f13, f13, f0 -/* 0000A374 00017104 ED 8A 6A BA */ fmadds f12, f10, f10, f13 -.L_0000A378: -/* 0000A378 00017108 C1 74 08 70 */ lfs f11, .rodata+0x870@l(r20) -/* 0000A37C 0001710C FC 0C D8 00 */ fcmpu cr0, f12, f27 -/* 0000A380 00017110 4C 62 03 82 */ cror un, eq, lt -/* 0000A384 00017114 41 83 A3 B4 */ bso .L_00004738 -.L_0000A388: -/* 0000A388 00017118 FF E0 60 34 */ frsqrte f31, f12 -.L_0000A38C: -/* 0000A38C 0001711C EC 1F 07 F2 */ fmuls f0, f31, f31 -/* 0000A390 00017120 ED BF 02 32 */ fmuls f13, f31, f8 -/* 0000A394 00017124 EC 0C 58 3C */ fnmsubs f0, f12, f0, f11 -/* 0000A398 00017128 EF E0 FB 7A */ fmadds f31, f0, f13, f31 -/* 0000A39C 0001712C EC 1F 07 F2 */ fmuls f0, f31, f31 -/* 0000A3A0 00017130 ED BF 02 32 */ fmuls f13, f31, f8 -/* 0000A3A4 00017134 EC 0C 58 3C */ fnmsubs f0, f12, f0, f11 -/* 0000A3A8 00017138 EF E0 FB 7A */ fmadds f31, f0, f13, f31 -/* 0000A3AC 0001713C EF FF 03 32 */ fmuls f31, f31, f12 -/* 0000A3B0 00017140 48 00 A3 B8 */ b .L_00014768 -/* 0000A3B4 00017144 C3 F9 08 60 */ lfs f31, .rodata+0x860@l(r25) -/* 0000A3B8 00017148 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000A3BC 0001714C A8 69 00 20 */ lha r3, 0x20(r9) -.L_0000A3C0: -/* 0000A3C0 00017150 80 09 00 24 */ lwz r0, 0x24(r9) -/* 0000A3C4 00017154 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000A3C8 00017158 7C 08 03 A6 */ mtlr r0 -/* 0000A3CC 0001715C 4E 80 00 21 */ blrl -/* 0000A3D0 00017160 EC 21 E8 2A */ fadds f1, f1, f29 -/* 0000A3D4 00017164 FC 1F 08 00 */ fcmpu cr0, f31, f1 -/* 0000A3D8 00017168 4C 62 0B 82 */ cror un, eq, gt -/* 0000A3DC 0001716C 41 83 A4 88 */ bso .L_00004864 -/* 0000A3E0 00017170 FC 1F F0 00 */ fcmpu cr0, f31, f30 -/* 0000A3E4 00017174 4C 62 03 82 */ cror un, eq, lt -/* 0000A3E8 00017178 41 83 A4 88 */ bso .L_00004870 -/* 0000A3EC 0001717C 38 81 00 60 */ addi r4, r1, 0x60 -/* 0000A3F0 00017180 38 61 00 98 */ addi r3, r1, 0x98 -/* 0000A3F4 00017184 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -/* 0000A3F8 00017188 C0 01 00 98 */ lfs f0, 0x98(r1) -/* 0000A3FC 0001718C C1 A1 00 9C */ lfs f13, 0x9c(r1) -/* 0000A400 00017190 C1 81 00 A0 */ lfs f12, 0xa0(r1) -/* 0000A404 00017194 D0 01 00 78 */ stfs f0, 0x78(r1) -/* 0000A408 00017198 D1 A1 00 7C */ stfs f13, 0x7c(r1) -/* 0000A40C 0001719C D1 81 00 80 */ stfs f12, 0x80(r1) -/* 0000A410 000171A0 D0 01 00 88 */ stfs f0, 0x88(r1) -/* 0000A414 000171A4 D1 A1 00 8C */ stfs f13, 0x8c(r1) -/* 0000A418 000171A8 D1 81 00 90 */ stfs f12, 0x90(r1) -/* 0000A41C 000171AC 81 3E 00 04 */ lwz r9, 0x4(r30) -.L_0000A420: -/* 0000A420 000171B0 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000A424 000171B4 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0000A428 000171B8 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000A42C 000171BC 7C 08 03 A6 */ mtlr r0 -/* 0000A430 000171C0 4E 80 00 21 */ blrl -/* 0000A434 000171C4 FC 20 08 50 */ fneg f1, f1 -/* 0000A438 000171C8 C1 81 00 78 */ lfs f12, 0x78(r1) -/* 0000A43C 000171CC EC 21 E0 24 */ fdivs f1, f1, f28 -/* 0000A440 000171D0 C0 01 00 7C */ lfs f0, 0x7c(r1) -/* 0000A444 000171D4 C1 A1 00 80 */ lfs f13, 0x80(r1) -/* 0000A448 000171D8 38 81 00 88 */ addi r4, r1, 0x88 -/* 0000A44C 000171DC 80 7F 00 58 */ lwz r3, 0x58(r31) -/* 0000A450 000171E0 38 63 FF FF */ subi r3, r3, 0x1 -/* 0000A454 000171E4 ED AD 00 72 */ fmuls f13, f13, f1 -/* 0000A458 000171E8 ED 8C 00 72 */ fmuls f12, f12, f1 -/* 0000A45C 000171EC D1 A1 00 90 */ stfs f13, 0x90(r1) -.L_0000A460: -/* 0000A460 000171F0 EC 00 00 72 */ fmuls f0, f0, f1 -/* 0000A464 000171F4 D1 81 00 88 */ stfs f12, 0x88(r1) -/* 0000A468 000171F8 D0 01 00 8C */ stfs f0, 0x8c(r1) -/* 0000A46C 000171FC D1 81 00 A8 */ stfs f12, 0xa8(r1) -/* 0000A470 00017200 D0 01 00 AC */ stfs f0, 0xac(r1) -/* 0000A474 00017204 D1 A1 00 B0 */ stfs f13, 0xb0(r1) -/* 0000A478 00017208 D1 81 00 98 */ stfs f12, 0x98(r1) -/* 0000A47C 0001720C D0 01 00 9C */ stfs f0, 0x9c(r1) -/* 0000A480 00017210 D1 A1 00 A0 */ stfs f13, 0xa0(r1) -/* 0000A484 00017214 48 00 00 01 */ bl MaybeCameraShake__FiP8bVector3 -/* 0000A488 00017218 3B BD 00 04 */ addi r29, r29, 0x4 -/* 0000A48C 0001721C 48 00 A2 EC */ b .L_00014778 -.L_0000A490: -/* 0000A490 00017220 80 01 01 24 */ lwz r0, 0x124(r1) -/* 0000A494 00017224 7C 08 03 A6 */ mtlr r0 -/* 0000A498 00017228 BA 81 00 C0 */ lmw r20, 0xc0(r1) -/* 0000A49C 0001722C E3 41 00 F0 */ psq_l f26, 0xf0(r1), 0, qr0 -.L_0000A4A0: -/* 0000A4A0 00017230 E3 61 00 F8 */ psq_l f27, 0xf8(r1), 0, qr0 -/* 0000A4A4 00017234 E3 81 01 00 */ psq_l f28, 0x100(r1), 0, qr0 -/* 0000A4A8 00017238 E3 A1 01 08 */ psq_l f29, 0x108(r1), 0, qr0 -.L_0000A4AC: -/* 0000A4AC 0001723C E3 C1 01 10 */ psq_l f30, 0x110(r1), 0, qr0 -/* 0000A4B0 00017240 E3 E1 01 18 */ psq_l f31, 0x118(r1), 0, qr0 -/* 0000A4B4 00017244 38 21 01 20 */ addi r1, r1, 0x120 -/* 0000A4B8 00017248 4E 80 00 20 */ blr -.endfn Update__13CDActionDrivef - -# .text:0xA4BC | size: 0xA4 -.fn GetTrafficBasis__13CDActionDriveRQ25UMath7Matrix4RQ25UMath7Vector3, global -/* 0000A4BC 0001724C 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0000A4C0 00017250 7C 08 02 A6 */ mflr r0 -/* 0000A4C4 00017254 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 0000A4C8 00017258 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0000A4CC 0001725C 80 63 00 50 */ lwz r3, 0x50(r3) -/* 0000A4D0 00017260 7C 9E 23 78 */ mr r30, r4 -/* 0000A4D4 00017264 7C BD 2B 78 */ mr r29, r5 -/* 0000A4D8 00017268 2C 03 00 00 */ cmpwi r3, 0x0 -.L_0000A4DC: -/* 0000A4DC 0001726C 41 82 A5 48 */ beq .L_00004A24 -/* 0000A4E0 00017270 80 63 00 00 */ lwz r3, 0x0(r3) -/* 0000A4E4 00017274 3C 80 00 00 */ lis r4, _IHandle__5IBody@ha -/* 0000A4E8 00017278 38 84 00 00 */ addi r4, r4, _IHandle__5IBody@l -/* 0000A4EC 0001727C 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000A4F0 00017280 7C 7F 1B 79 */ mr. r31, r3 -/* 0000A4F4 00017284 38 00 00 01 */ li r0, 0x1 -/* 0000A4F8 00017288 40 82 A5 00 */ bne .L_000049F8 -/* 0000A4FC 0001728C 38 00 00 00 */ li r0, 0x0 -/* 0000A500 00017290 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000A504 00017294 41 82 A5 48 */ beq .L_00004A4C -/* 0000A508 00017298 81 3F 00 04 */ lwz r9, 0x4(r31) -.L_0000A50C: -/* 0000A50C 0001729C 7F C4 F3 78 */ mr r4, r30 -/* 0000A510 000172A0 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000A514 000172A4 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000A518 000172A8 7C 08 03 A6 */ mtlr r0 -/* 0000A51C 000172AC 7C 7F 1A 14 */ add r3, r31, r3 -/* 0000A520 000172B0 4E 80 00 21 */ blrl -/* 0000A524 000172B4 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 0000A528 000172B8 7F A4 EB 78 */ mr r4, r29 -/* 0000A52C 000172BC A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000A530 000172C0 80 09 00 1C */ lwz r0, 0x1c(r9) -.L_0000A534: -/* 0000A534 000172C4 7C 7F 1A 14 */ add r3, r31, r3 -/* 0000A538 000172C8 7C 08 03 A6 */ mtlr r0 -.L_0000A53C: -/* 0000A53C 000172CC 4E 80 00 21 */ blrl -/* 0000A540 000172D0 38 60 00 01 */ li r3, 0x1 -/* 0000A544 000172D4 48 00 A5 4C */ b .L_00014A90 -/* 0000A548 000172D8 38 60 00 00 */ li r3, 0x0 -/* 0000A54C 000172DC 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0000A550 000172E0 7C 08 03 A6 */ mtlr r0 -/* 0000A554 000172E4 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 0000A558 000172E8 38 21 00 18 */ addi r1, r1, 0x18 -/* 0000A55C 000172EC 4E 80 00 20 */ blr -.endfn GetTrafficBasis__13CDActionDriveRQ25UMath7Matrix4RQ25UMath7Vector3 - -# .text:0xA560 | size: 0x40 -.fn MessageJumpCut__13CDActionDriveRC8MJumpCut, global -/* 0000A560 000172F0 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0000A564 000172F4 7C 08 02 A6 */ mflr r0 -/* 0000A568 000172F8 90 01 00 0C */ stw r0, 0xc(r1) -/* 0000A56C 000172FC 81 63 00 34 */ lwz r11, 0x34(r3) -/* 0000A570 00017300 2C 0B 00 00 */ cmpwi r11, 0x0 -.L_0000A574: -/* 0000A574 00017304 41 82 A5 90 */ beq .L_00004B04 -/* 0000A578 00017308 81 24 00 10 */ lwz r9, 0x10(r4) -/* 0000A57C 0001730C 80 0B 00 8C */ lwz r0, 0x8c(r11) -/* 0000A580 00017310 7C 09 00 00 */ cmpw r9, r0 -/* 0000A584 00017314 40 82 A5 90 */ bne .L_00004B14 -/* 0000A588 00017318 80 63 00 2C */ lwz r3, 0x2c(r3) -/* 0000A58C 0001731C 48 00 3F 9D */ bl .L_0000E528 -/* 0000A590 00017320 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0000A594 00017324 7C 08 03 A6 */ mtlr r0 -/* 0000A598 00017328 38 21 00 08 */ addi r1, r1, 0x8 -/* 0000A59C 0001732C 4E 80 00 20 */ blr -.endfn MessageJumpCut__13CDActionDriveRC8MJumpCut - -# .text:0xA5A0 | size: 0x74 -.fn GetName__C16CDActionTrackCar, global -/* 0000A5A0 00017330 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0000A5A4 00017334 7C 08 02 A6 */ mflr r0 -/* 0000A5A8 00017338 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 0000A5AC 0001733C 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0000A5B0 00017340 3F E0 00 00 */ lis r31, _.tmp_8.10941@ha -/* 0000A5B4 00017344 80 1F 00 00 */ lwz r0, _.tmp_8.10941@l(r31) -/* 0000A5B8 00017348 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000A5BC 0001734C 40 82 A5 F8 */ bne .L_00004BB4 -/* 0000A5C0 00017350 3F C0 00 00 */ lis r30, .rodata+0x8A8@ha -/* 0000A5C4 00017354 3F A0 00 00 */ lis r29, name.10940@ha -/* 0000A5C8 00017358 3B DE 08 A8 */ addi r30, r30, .rodata+0x8A8@l -/* 0000A5CC 0001735C 3B BD 00 00 */ addi r29, r29, name.10940@l -/* 0000A5D0 00017360 7F C3 F3 78 */ mr r3, r30 -/* 0000A5D4 00017364 48 00 00 01 */ bl StringHash64__6AttribPCc -/* 0000A5D8 00017368 90 7D 00 00 */ stw r3, 0x0(r29) -/* 0000A5DC 0001736C 90 9D 00 04 */ stw r4, 0x4(r29) -/* 0000A5E0 00017370 7F C3 F3 78 */ mr r3, r30 -/* 0000A5E4 00017374 48 00 00 01 */ bl StringHash32__6AttribPCc -/* 0000A5E8 00017378 38 00 00 01 */ li r0, 0x1 -/* 0000A5EC 0001737C 93 DD 00 0C */ stw r30, 0xc(r29) -/* 0000A5F0 00017380 90 1F 00 00 */ stw r0, _.tmp_8.10941@l(r31) -/* 0000A5F4 00017384 90 7D 00 08 */ stw r3, 0x8(r29) -/* 0000A5F8 00017388 3C 60 00 00 */ lis r3, name.10940@ha -/* 0000A5FC 0001738C 38 63 00 00 */ addi r3, r3, name.10940@l -.L_0000A600: -/* 0000A600 00017390 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0000A604 00017394 7C 08 03 A6 */ mtlr r0 -.L_0000A608: -/* 0000A608 00017398 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 0000A60C 0001739C 38 21 00 18 */ addi r1, r1, 0x18 -/* 0000A610 000173A0 4E 80 00 20 */ blr -.endfn GetName__C16CDActionTrackCar - -# .text:0xA614 | size: 0x2C -.fn GetNext__C16CDActionTrackCar, global -/* 0000A614 000173A4 3D 00 00 00 */ lis r8, .rodata@ha -.L_0000A618: -/* 0000A618 000173A8 39 20 00 00 */ li r9, 0x0 -/* 0000A61C 000173AC 7C 6B 1B 78 */ mr r11, r3 -/* 0000A620 000173B0 39 08 00 00 */ addi r8, r8, .rodata@l -.L_0000A624: -/* 0000A624 000173B4 39 40 00 00 */ li r10, 0x0 -/* 0000A628 000173B8 38 00 00 00 */ li r0, 0x0 -/* 0000A62C 000173BC 91 2B 00 00 */ stw r9, 0x0(r11) -.L_0000A630: -/* 0000A630 000173C0 91 4B 00 04 */ stw r10, 0x4(r11) -.L_0000A634: -/* 0000A634 000173C4 90 0B 00 08 */ stw r0, 0x8(r11) -/* 0000A638 000173C8 91 0B 00 0C */ stw r8, 0xc(r11) -/* 0000A63C 000173CC 4E 80 00 20 */ blr -.endfn GetNext__C16CDActionTrackCar - -# .text:0xA640 | size: 0x24 -.fn Attach__16CDActionTrackCarPQ33UTL3COM8IUnknown, global -/* 0000A640 000173D0 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0000A644 000173D4 7C 08 02 A6 */ mflr r0 -/* 0000A648 000173D8 90 01 00 0C */ stw r0, 0xc(r1) -/* 0000A64C 000173DC 80 63 00 44 */ lwz r3, 0x44(r3) -/* 0000A650 000173E0 48 00 00 01 */ bl Attach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -/* 0000A654 000173E4 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0000A658 000173E8 7C 08 03 A6 */ mtlr r0 -/* 0000A65C 000173EC 38 21 00 08 */ addi r1, r1, 0x8 -/* 0000A660 000173F0 4E 80 00 20 */ blr -.endfn Attach__16CDActionTrackCarPQ33UTL3COM8IUnknown - -# .text:0xA664 | size: 0x24 -.fn Detach__16CDActionTrackCarPQ33UTL3COM8IUnknown, global -/* 0000A664 000173F4 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0000A668 000173F8 7C 08 02 A6 */ mflr r0 -/* 0000A66C 000173FC 90 01 00 0C */ stw r0, 0xc(r1) -/* 0000A670 00017400 80 63 00 44 */ lwz r3, 0x44(r3) -/* 0000A674 00017404 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -/* 0000A678 00017408 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0000A67C 0001740C 7C 08 03 A6 */ mtlr r0 -/* 0000A680 00017410 38 21 00 08 */ addi r1, r1, 0x8 -/* 0000A684 00017414 4E 80 00 20 */ blr -.endfn Detach__16CDActionTrackCarPQ33UTL3COM8IUnknown - -# .text:0xA688 | size: 0x24 -.fn IsAttached__C16CDActionTrackCarPCQ33UTL3COM8IUnknown, global -/* 0000A688 00017418 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0000A68C 0001741C 7C 08 02 A6 */ mflr r0 -/* 0000A690 00017420 90 01 00 0C */ stw r0, 0xc(r1) -/* 0000A694 00017424 80 63 00 44 */ lwz r3, 0x44(r3) -/* 0000A698 00017428 48 00 00 01 */ bl IsAttached__CQ23Sim11AttachmentsPCQ33UTL3COM8IUnknown -/* 0000A69C 0001742C 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0000A6A0 00017430 7C 08 03 A6 */ mtlr r0 -/* 0000A6A4 00017434 38 21 00 08 */ addi r1, r1, 0x8 -/* 0000A6A8 00017438 4E 80 00 20 */ blr -.endfn IsAttached__C16CDActionTrackCarPCQ33UTL3COM8IUnknown - -# .text:0xA6AC | size: 0x8 -.fn GetAttachments__C16CDActionTrackCar, global -/* 0000A6AC 0001743C 80 63 00 44 */ lwz r3, 0x44(r3) -/* 0000A6B0 00017440 4E 80 00 20 */ blr -.endfn GetAttachments__C16CDActionTrackCar - -# .text:0xA6B4 | size: 0x11C -.fn Construct__16CDActionTrackCarPQ28CameraAI8Director, global -/* 0000A6B4 00017444 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 0000A6B8 00017448 7C 08 02 A6 */ mflr r0 -/* 0000A6BC 0001744C BF 61 00 0C */ stmw r27, 0xc(r1) -/* 0000A6C0 00017450 90 01 00 24 */ stw r0, 0x24(r1) -/* 0000A6C4 00017454 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@ha -.L_0000A6C8: -/* 0000A6C8 00017458 7C 7B 1B 78 */ mr r27, r3 -/* 0000A6CC 0001745C 39 29 00 00 */ addi r9, r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@l -/* 0000A6D0 00017460 3B 80 00 00 */ li r28, 0x0 -/* 0000A6D4 00017464 83 E9 00 30 */ lwz r31, 0x30(r9) -/* 0000A6D8 00017468 7D 3D 4B 78 */ mr r29, r9 -/* 0000A6DC 0001746C 80 1D 00 38 */ lwz r0, 0x38(r29) -/* 0000A6E0 00017470 81 3D 00 30 */ lwz r9, 0x30(r29) -/* 0000A6E4 00017474 54 00 10 3A */ slwi r0, r0, 2 -/* 0000A6E8 00017478 7D 29 02 14 */ add r9, r9, r0 -/* 0000A6EC 0001747C 7C 1F 48 00 */ cmpw r31, r9 -/* 0000A6F0 00017480 41 82 A7 28 */ beq .L_00004E18 -/* 0000A6F4 00017484 83 DF 00 00 */ lwz r30, 0x0(r31) -/* 0000A6F8 00017488 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000A6FC 0001748C 80 09 00 64 */ lwz r0, 0x64(r9) -/* 0000A700 00017490 A8 69 00 60 */ lha r3, 0x60(r9) -/* 0000A704 00017494 7C 08 03 A6 */ mtlr r0 -/* 0000A708 00017498 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000A70C 0001749C 4E 80 00 21 */ blrl -/* 0000A710 000174A0 80 1B 00 04 */ lwz r0, 0x4(r27) -/* 0000A714 000174A4 7C 03 00 00 */ cmpw r3, r0 -/* 0000A718 000174A8 41 82 A7 24 */ beq .L_00004E3C -/* 0000A71C 000174AC 3B FF 00 04 */ addi r31, r31, 0x4 -/* 0000A720 000174B0 48 00 A6 DC */ b .L_00014DFC -/* 0000A724 000174B4 7F DC F3 78 */ mr r28, r30 -/* 0000A728 000174B8 2C 1C 00 00 */ cmpwi r28, 0x0 -/* 0000A72C 000174BC 41 82 A7 B8 */ beq .L_00004EE4 -/* 0000A730 000174C0 81 3C 00 04 */ lwz r9, 0x4(r28) -/* 0000A734 000174C4 A8 69 00 28 */ lha r3, 0x28(r9) -/* 0000A738 000174C8 80 09 00 2C */ lwz r0, 0x2c(r9) -/* 0000A73C 000174CC 7C 7C 1A 14 */ add r3, r28, r3 -/* 0000A740 000174D0 7C 08 03 A6 */ mtlr r0 -/* 0000A744 000174D4 4E 80 00 21 */ blrl -/* 0000A748 000174D8 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000A74C 000174DC 41 82 A7 B8 */ beq .L_00004F04 -/* 0000A750 000174E0 81 3C 00 04 */ lwz r9, 0x4(r28) -/* 0000A754 000174E4 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000A758 000174E8 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000A75C 000174EC 7C 7C 1A 14 */ add r3, r28, r3 -/* 0000A760 000174F0 7C 08 03 A6 */ mtlr r0 -/* 0000A764 000174F4 4E 80 00 21 */ blrl -/* 0000A768 000174F8 7C 6B 1B 79 */ mr. r11, r3 -/* 0000A76C 000174FC 41 82 A7 B8 */ beq .L_00004F24 -/* 0000A770 00017500 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000A774 00017504 A8 69 00 E8 */ lha r3, 0xe8(r9) -/* 0000A778 00017508 80 09 00 EC */ lwz r0, 0xec(r9) -/* 0000A77C 0001750C 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000A780 00017510 7C 08 03 A6 */ mtlr r0 -/* 0000A784 00017514 4E 80 00 21 */ blrl -/* 0000A788 00017518 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000A78C 0001751C 38 60 00 00 */ li r3, 0x0 -/* 0000A790 00017520 41 82 A7 BC */ beq .L_00004F4C -/* 0000A794 00017524 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0000A798 00017528 38 80 00 50 */ li r4, 0x50 -/* 0000A79C 0001752C 38 A0 00 00 */ li r5, 0x0 -/* 0000A7A0 00017530 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0000A7A4 00017534 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 0000A7A8 00017538 7F 64 DB 78 */ mr r4, r27 -/* 0000A7AC 0001753C 7F 85 E3 78 */ mr r5, r28 -/* 0000A7B0 00017540 48 00 A7 D1 */ bl .L_00014F80 -/* 0000A7B4 00017544 48 00 A7 BC */ b .L_00014F70 -/* 0000A7B8 00017548 38 60 00 00 */ li r3, 0x0 -/* 0000A7BC 0001754C 80 01 00 24 */ lwz r0, 0x24(r1) -/* 0000A7C0 00017550 7C 08 03 A6 */ mtlr r0 -/* 0000A7C4 00017554 BB 61 00 0C */ lmw r27, 0xc(r1) -/* 0000A7C8 00017558 38 21 00 20 */ addi r1, r1, 0x20 -/* 0000A7CC 0001755C 4E 80 00 20 */ blr -.endfn Construct__16CDActionTrackCarPQ28CameraAI8Director - -# .text:0xA7D0 | size: 0x3FC -.fn __16CDActionTrackCarPQ28CameraAI8DirectorP7IPlayer, global -/* 0000A7D0 00017560 94 21 FF 68 */ stwu r1, -0x98(r1) -/* 0000A7D4 00017564 7C 08 02 A6 */ mflr r0 -/* 0000A7D8 00017568 7D 80 00 26 */ mfcr r12 -.L_0000A7DC: -/* 0000A7DC 0001756C BE 81 00 68 */ stmw r20, 0x68(r1) -/* 0000A7E0 00017570 90 01 00 9C */ stw r0, 0x9c(r1) -/* 0000A7E4 00017574 91 81 00 64 */ stw r12, 0x64(r1) -/* 0000A7E8 00017578 7C 7F 1B 78 */ mr r31, r3 -/* 0000A7EC 0001757C 7C 94 23 78 */ mr r20, r4 -/* 0000A7F0 00017580 38 80 00 00 */ li r4, 0x0 -/* 0000A7F4 00017584 7C B5 2B 78 */ mr r21, r5 -/* 0000A7F8 00017588 3A FF 00 20 */ addi r23, r31, 0x20 -/* 0000A7FC 0001758C 48 00 00 01 */ bl __Q43UTL3COM6Object6_IListUi -/* 0000A800 00017590 3F 20 00 00 */ lis r25, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha -/* 0000A804 00017594 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha -/* 0000A808 00017598 3D 60 00 00 */ lis r11, _vt.Q33UTL3COM8IUnknown@ha -/* 0000A80C 0001759C 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l -/* 0000A810 000175A0 39 6B 00 00 */ addi r11, r11, _vt.Q33UTL3COM8IUnknown@l -/* 0000A814 000175A4 3C 80 00 00 */ lis r4, _IHandle__11IAttachable@ha -/* 0000A818 000175A8 93 FF 00 18 */ stw r31, 0x18(r31) -/* 0000A81C 000175AC 91 3F 00 14 */ stw r9, 0x14(r31) -/* 0000A820 000175B0 38 84 00 00 */ addi r4, r4, _IHandle__11IAttachable@l -/* 0000A824 000175B4 91 7F 00 1C */ stw r11, 0x1c(r31) -/* 0000A828 000175B8 7F E3 FB 78 */ mr r3, r31 -/* 0000A82C 000175BC 38 BF 00 18 */ addi r5, r31, 0x18 -/* 0000A830 000175C0 3B B9 00 00 */ addi r29, r25, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l -/* 0000A834 000175C4 48 00 00 01 */ bl Add__Q43UTL3COM6Object6_IListPvPQ33UTL3COM8IUnknown -/* 0000A838 000175C8 3D 20 00 00 */ lis r9, _vt.11IAttachable@ha -/* 0000A83C 000175CC 92 E1 00 58 */ stw r23, 0x58(r1) -/* 0000A840 000175D0 39 29 00 00 */ addi r9, r9, _vt.11IAttachable@l -/* 0000A844 000175D4 3A C1 00 58 */ addi r22, r1, 0x58 -/* 0000A848 000175D8 91 3F 00 1C */ stw r9, 0x1c(r31) -/* 0000A84C 000175DC 3B 41 00 08 */ addi r26, r1, 0x8 -/* 0000A850 000175E0 80 9D 00 08 */ lwz r4, 0x8(r29) -/* 0000A854 000175E4 80 1D 00 04 */ lwz r0, 0x4(r29) -/* 0000A858 000175E8 7C 04 00 40 */ cmplw r4, r0 -/* 0000A85C 000175EC 41 80 A9 3C */ blt .L_00005198 -/* 0000A860 000175F0 81 3D 00 0C */ lwz r9, 0xc(r29) -/* 0000A864 000175F4 38 84 00 01 */ addi r4, r4, 0x1 -/* 0000A868 000175F8 80 09 00 24 */ lwz r0, 0x24(r9) -/* 0000A86C 000175FC A8 69 00 20 */ lha r3, 0x20(r9) -/* 0000A870 00017600 7C 08 03 A6 */ mtlr r0 -/* 0000A874 00017604 7C 63 EA 14 */ add r3, r3, r29 -/* 0000A878 00017608 4E 80 00 21 */ blrl -/* 0000A87C 0001760C 80 1D 00 04 */ lwz r0, 0x4(r29) -/* 0000A880 00017610 7C 7E 1B 78 */ mr r30, r3 -/* 0000A884 00017614 7C 1E 00 40 */ cmplw r30, r0 -/* 0000A888 00017618 40 81 A9 3C */ ble .L_000051C4 -/* 0000A88C 0001761C 81 3D 00 0C */ lwz r9, 0xc(r29) -/* 0000A890 00017620 7F C4 F3 78 */ mr r4, r30 -/* 0000A894 00017624 80 09 00 34 */ lwz r0, 0x34(r9) -/* 0000A898 00017628 A8 69 00 30 */ lha r3, 0x30(r9) -/* 0000A89C 0001762C 7C 08 03 A6 */ mtlr r0 -/* 0000A8A0 00017630 7C 63 EA 14 */ add r3, r3, r29 -/* 0000A8A4 00017634 4E 80 00 21 */ blrl -/* 0000A8A8 00017638 81 3D 00 0C */ lwz r9, 0xc(r29) -/* 0000A8AC 0001763C 7F C4 F3 78 */ mr r4, r30 -.L_0000A8B0: -/* 0000A8B0 00017640 38 A0 00 10 */ li r5, 0x10 -/* 0000A8B4 00017644 83 99 00 00 */ lwz r28, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r25) -/* 0000A8B8 00017648 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000A8BC 0001764C 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000A8C0 00017650 7C 63 EA 14 */ add r3, r3, r29 -/* 0000A8C4 00017654 83 7D 00 08 */ lwz r27, 0x8(r29) -/* 0000A8C8 00017658 7C 08 03 A6 */ mtlr r0 -/* 0000A8CC 0001765C 83 1D 00 04 */ lwz r24, 0x4(r29) -/* 0000A8D0 00017660 4E 80 00 21 */ blrl -/* 0000A8D4 00017664 93 DD 00 04 */ stw r30, 0x4(r29) -/* 0000A8D8 00017668 7C 1C 18 00 */ cmpw r28, r3 -/* 0000A8DC 0001766C 90 79 00 00 */ stw r3, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r25) -/* 0000A8E0 00017670 41 82 A9 3C */ beq .L_0000521C -/* 0000A8E4 00017674 38 00 00 00 */ li r0, 0x0 -/* 0000A8E8 00017678 3B C0 00 00 */ li r30, 0x0 -/* 0000A8EC 0001767C 90 1D 00 08 */ stw r0, 0x8(r29) -/* 0000A8F0 00017680 7C 1E D8 00 */ cmpw r30, r27 -/* 0000A8F4 00017684 2E 1C 00 00 */ cmpwi cr4, r28, 0x0 -/* 0000A8F8 00017688 40 80 A9 18 */ bge .L_00005210 -/* 0000A8FC 0001768C 57 C4 10 3A */ slwi r4, r30, 2 -/* 0000A900 00017690 7F A3 EB 78 */ mr r3, r29 -/* 0000A904 00017694 7C 9C 22 14 */ add r4, r28, r4 -/* 0000A908 00017698 3B DE 00 01 */ addi r30, r30, 0x1 -/* 0000A90C 0001769C 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZP14ITrafficCenteri16RCP14ITrafficCenter -/* 0000A910 000176A0 7C 1E D8 00 */ cmpw r30, r27 -/* 0000A914 000176A4 41 80 A8 FC */ blt .L_00005210 -/* 0000A918 000176A8 41 92 A9 3C */ beq cr4, .L_00005254 -/* 0000A91C 000176AC 81 3D 00 0C */ lwz r9, 0xc(r29) -/* 0000A920 000176B0 7F 84 E3 78 */ mr r4, r28 -/* 0000A924 000176B4 7F 05 C3 78 */ mr r5, r24 -/* 0000A928 000176B8 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000A92C 000176BC 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0000A930 000176C0 7C 7D 1A 14 */ add r3, r29, r3 -/* 0000A934 000176C4 7C 08 03 A6 */ mtlr r0 -/* 0000A938 000176C8 4E 80 00 21 */ blrl -/* 0000A93C 000176CC 81 3D 00 08 */ lwz r9, 0x8(r29) -/* 0000A940 000176D0 81 7D 00 00 */ lwz r11, 0x0(r29) -.L_0000A944: -/* 0000A944 000176D4 55 29 10 3A */ slwi r9, r9, 2 -/* 0000A948 000176D8 7C 09 5A 14 */ add r0, r9, r11 -/* 0000A94C 000176DC 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000A950 000176E0 41 82 A9 5C */ beq .L_000052AC -/* 0000A954 000176E4 80 16 00 00 */ lwz r0, 0x0(r22) -/* 0000A958 000176E8 7C 09 59 2E */ stwx r0, r9, r11 -/* 0000A95C 000176EC 81 3D 00 08 */ lwz r9, 0x8(r29) -/* 0000A960 000176F0 3D 60 00 00 */ lis r11, _vt.14ITrafficCenter@ha -/* 0000A964 000176F4 39 6B 00 00 */ addi r11, r11, _vt.14ITrafficCenter@l -/* 0000A968 000176F8 3D 40 00 00 */ lis r10, _vt.16CDActionTrackCar.11IAttachable@ha -/* 0000A96C 000176FC 39 29 00 01 */ addi r9, r9, 0x1 -/* 0000A970 00017700 3D 00 00 00 */ lis r8, _vt.16CDActionTrackCar.14ITrafficCenter@ha -/* 0000A974 00017704 91 3D 00 08 */ stw r9, 0x8(r29) -/* 0000A978 00017708 3C E0 00 00 */ lis r7, _vt.16CDActionTrackCar@ha -/* 0000A97C 0001770C 91 77 00 04 */ stw r11, 0x4(r23) -/* 0000A980 00017710 39 4A 00 00 */ addi r10, r10, _vt.16CDActionTrackCar.11IAttachable@l -/* 0000A984 00017714 39 08 00 00 */ addi r8, r8, _vt.16CDActionTrackCar.14ITrafficCenter@l -/* 0000A988 00017718 38 E7 00 00 */ addi r7, r7, _vt.16CDActionTrackCar@l -/* 0000A98C 0001771C 91 5F 00 1C */ stw r10, 0x1c(r31) -/* 0000A990 00017720 38 80 00 00 */ li r4, 0x0 -/* 0000A994 00017724 91 1F 00 24 */ stw r8, 0x24(r31) -/* 0000A998 00017728 38 7F 00 30 */ addi r3, r31, 0x30 -/* 0000A99C 0001772C 90 FF 00 14 */ stw r7, 0x14(r31) -/* 0000A9A0 00017730 3B 80 00 00 */ li r28, 0x0 -/* 0000A9A4 00017734 48 00 00 01 */ bl __Q29WorldConn9ReferenceUi -/* 0000A9A8 00017738 3B 7F 00 18 */ addi r27, r31, 0x18 -/* 0000A9AC 0001773C 92 BF 00 40 */ stw r21, 0x40(r31) -/* 0000A9B0 00017740 3F A0 00 00 */ lis r29, gFastMem@ha -/* 0000A9B4 00017744 93 9F 00 48 */ stw r28, 0x48(r31) -/* 0000A9B8 00017748 3B BD 00 00 */ addi r29, r29, gFastMem@l -/* 0000A9BC 0001774C 38 80 00 10 */ li r4, 0x10 -/* 0000A9C0 00017750 38 A0 00 00 */ li r5, 0x0 -/* 0000A9C4 00017754 80 14 00 04 */ lwz r0, 0x4(r20) -/* 0000A9C8 00017758 7F A3 EB 78 */ mr r3, r29 -/* 0000A9CC 0001775C 90 1F 00 4C */ stw r0, 0x4c(r31) -/* 0000A9D0 00017760 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 0000A9D4 00017764 7C 7E 1B 78 */ mr r30, r3 -/* 0000A9D8 00017768 3D 20 00 00 */ lis r9, _vt.Q23Sim11Attachments@ha -/* 0000A9DC 0001776C 39 29 00 00 */ addi r9, r9, _vt.Q23Sim11Attachments@l -/* 0000A9E0 00017770 93 9E 00 04 */ stw r28, 0x4(r30) -/* 0000A9E4 00017774 38 A0 00 00 */ li r5, 0x0 -/* 0000A9E8 00017778 91 3E 00 0C */ stw r9, 0xc(r30) -/* 0000A9EC 0001777C 38 80 00 0C */ li r4, 0xc -/* 0000A9F0 00017780 7F A3 EB 78 */ mr r3, r29 -/* 0000A9F4 00017784 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 0000A9F8 00017788 7C 69 1B 78 */ mr r9, r3 -/* 0000A9FC 0001778C 91 29 00 00 */ stw r9, 0x0(r9) -/* 0000AA00 00017790 7F C3 F3 78 */ mr r3, r30 -/* 0000AA04 00017794 91 29 00 04 */ stw r9, 0x4(r9) -/* 0000AA08 00017798 91 3E 00 04 */ stw r9, 0x4(r30) -/* 0000AA0C 0001779C 93 7E 00 08 */ stw r27, 0x8(r30) -/* 0000AA10 000177A0 93 DF 00 44 */ stw r30, 0x44(r31) -/* 0000AA14 000177A4 80 9F 00 40 */ lwz r4, 0x40(r31) -/* 0000AA18 000177A8 48 00 00 01 */ bl Attach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -/* 0000AA1C 000177AC 38 60 01 24 */ li r3, 0x124 -/* 0000AA20 000177B0 48 00 00 01 */ bl __builtin_vec_new -/* 0000AA24 000177B4 38 80 00 00 */ li r4, 0x0 -/* 0000AA28 000177B8 48 00 10 51 */ bl .L_0000BA78 -/* 0000AA2C 000177BC 90 7F 00 2C */ stw r3, 0x2c(r31) -/* 0000AA30 000177C0 7F E3 FB 78 */ mr r3, r31 -/* 0000AA34 000177C4 48 00 AF 45 */ bl .L_00015978 -/* 0000AA38 000177C8 80 7F 00 34 */ lwz r3, 0x34(r31) -/* 0000AA3C 000177CC 38 00 00 01 */ li r0, 0x1 -/* 0000AA40 000177D0 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000AA44 000177D4 40 82 AA 4C */ bne .L_00005490 -/* 0000AA48 000177D8 38 00 00 00 */ li r0, 0x0 -/* 0000AA4C 000177DC 2C 00 00 00 */ cmpwi r0, 0x0 -.L_0000AA50: -/* 0000AA50 000177E0 41 82 AB 78 */ beq .L_000055C8 -/* 0000AA54 000177E4 38 81 00 18 */ addi r4, r1, 0x18 -/* 0000AA58 000177E8 48 00 00 01 */ bl PSMTX44Copy -/* 0000AA5C 000177EC 80 7F 00 48 */ lwz r3, 0x48(r31) -/* 0000AA60 000177F0 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000AA64 000177F4 41 82 AB 5C */ beq .L_000055C0 -/* 0000AA68 000177F8 80 63 00 00 */ lwz r3, 0x0(r3) -/* 0000AA6C 000177FC 3C 80 00 00 */ lis r4, _IHandle__14ICollisionBody@ha -/* 0000AA70 00017800 38 84 00 00 */ addi r4, r4, _IHandle__14ICollisionBody@l -/* 0000AA74 00017804 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000AA78 00017808 7C 7D 1B 79 */ mr. r29, r3 -/* 0000AA7C 0001780C 38 00 00 01 */ li r0, 0x1 -/* 0000AA80 00017810 40 82 AA 88 */ bne .L_00005508 -/* 0000AA84 00017814 38 00 00 00 */ li r0, 0x0 -/* 0000AA88 00017818 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000AA8C 0001781C 41 82 AB 5C */ beq .L_000055E8 -/* 0000AA90 00017820 81 7F 00 48 */ lwz r11, 0x48(r31) -/* 0000AA94 00017824 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000AA98 00017828 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0000AA9C 0001782C A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000AAA0 00017830 7C 08 03 A6 */ mtlr r0 -/* 0000AAA4 00017834 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000AAA8 00017838 4E 80 00 21 */ blrl -/* 0000AAAC 0001783C 81 23 00 04 */ lwz r9, 0x4(r3) -/* 0000AAB0 00017840 A8 09 00 A8 */ lha r0, 0xa8(r9) -/* 0000AAB4 00017844 81 29 00 AC */ lwz r9, 0xac(r9) -/* 0000AAB8 00017848 7C 63 02 14 */ add r3, r3, r0 -/* 0000AABC 0001784C 7D 28 03 A6 */ mtlr r9 -/* 0000AAC0 00017850 4E 80 00 21 */ blrl -/* 0000AAC4 00017854 81 3D 00 04 */ lwz r9, 0x4(r29) -/* 0000AAC8 00017858 7C 7E 1B 78 */ mr r30, r3 -/* 0000AACC 0001785C 80 09 00 84 */ lwz r0, 0x84(r9) -/* 0000AAD0 00017860 A8 69 00 80 */ lha r3, 0x80(r9) -/* 0000AAD4 00017864 7C 08 03 A6 */ mtlr r0 -/* 0000AAD8 00017868 7C 7D 1A 14 */ add r3, r29, r3 -/* 0000AADC 0001786C 4E 80 00 21 */ blrl -/* 0000AAE0 00017870 C1 A3 00 00 */ lfs f13, 0x0(r3) -/* 0000AAE4 00017874 7F 44 D3 78 */ mr r4, r26 -/* 0000AAE8 00017878 38 A0 00 00 */ li r5, 0x0 -/* 0000AAEC 0001787C D1 A1 00 08 */ stfs f13, 0x8(r1) -/* 0000AAF0 00017880 C0 03 00 04 */ lfs f0, 0x4(r3) -/* 0000AAF4 00017884 D0 01 00 0C */ stfs f0, 0xc(r1) -/* 0000AAF8 00017888 C1 A3 00 08 */ lfs f13, 0x8(r3) -/* 0000AAFC 0001788C D1 BA 00 08 */ stfs f13, 0x8(r26) -.L_0000AB00: -/* 0000AB00 00017890 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000AB04 00017894 80 09 01 4C */ lwz r0, 0x14c(r9) -/* 0000AB08 00017898 A8 69 01 48 */ lha r3, 0x148(r9) -.L_0000AB0C: -/* 0000AB0C 0001789C 7C 08 03 A6 */ mtlr r0 -/* 0000AB10 000178A0 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000AB14 000178A4 4E 80 00 21 */ blrl -/* 0000AB18 000178A8 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000AB1C 000178AC A8 69 00 48 */ lha r3, 0x48(r9) -/* 0000AB20 000178B0 80 09 00 4C */ lwz r0, 0x4c(r9) -.L_0000AB24: -/* 0000AB24 000178B4 7C 7E 1A 14 */ add r3, r30, r3 -.L_0000AB28: -/* 0000AB28 000178B8 7C 08 03 A6 */ mtlr r0 -/* 0000AB2C 000178BC 4E 80 00 21 */ blrl -/* 0000AB30 000178C0 7C 64 1B 78 */ mr r4, r3 -/* 0000AB34 000178C4 7F 45 D3 78 */ mr r5, r26 -/* 0000AB38 000178C8 7F 43 D3 78 */ mr r3, r26 -/* 0000AB3C 000178CC 48 00 00 01 */ bl VU0_v3add__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 -/* 0000AB40 000178D0 C0 01 00 08 */ lfs f0, 0x8(r1) -/* 0000AB44 000178D4 C1 BA 00 08 */ lfs f13, 0x8(r26) -/* 0000AB48 000178D8 C1 81 00 0C */ lfs f12, 0xc(r1) -/* 0000AB4C 000178DC FC 00 00 50 */ fneg f0, f0 -.L_0000AB50: -/* 0000AB50 000178E0 D1 A1 00 48 */ stfs f13, 0x48(r1) -/* 0000AB54 000178E4 D0 01 00 4C */ stfs f0, 0x4c(r1) -/* 0000AB58 000178E8 D1 81 00 50 */ stfs f12, 0x50(r1) -/* 0000AB5C 000178EC 3D 20 00 00 */ lis r9, .rodata+0x8B4@ha -/* 0000AB60 000178F0 80 7F 00 2C */ lwz r3, 0x2c(r31) -/* 0000AB64 000178F4 C0 29 08 B4 */ lfs f1, .rodata+0x8B4@l(r9) -/* 0000AB68 000178F8 38 81 00 18 */ addi r4, r1, 0x18 -/* 0000AB6C 000178FC 80 BF 00 38 */ lwz r5, 0x38(r31) -/* 0000AB70 00017900 80 DF 00 3C */ lwz r6, 0x3c(r31) -/* 0000AB74 00017904 48 00 17 65 */ bl .L_0000C2D8 -/* 0000AB78 00017908 38 60 00 D8 */ li r3, 0xd8 -/* 0000AB7C 0001790C 48 00 00 01 */ bl __builtin_vec_new -/* 0000AB80 00017910 80 94 00 04 */ lwz r4, 0x4(r20) -/* 0000AB84 00017914 38 C0 00 01 */ li r6, 0x1 -/* 0000AB88 00017918 80 BF 00 2C */ lwz r5, 0x2c(r31) -/* 0000AB8C 0001791C 48 00 4D C9 */ bl .L_0000F954 -/* 0000AB90 00017920 90 7F 00 28 */ stw r3, 0x28(r31) -/* 0000AB94 00017924 81 23 00 08 */ lwz r9, 0x8(r3) -/* 0000AB98 00017928 A8 09 00 70 */ lha r0, 0x70(r9) -/* 0000AB9C 0001792C 81 29 00 74 */ lwz r9, 0x74(r9) -/* 0000ABA0 00017930 7C 63 02 14 */ add r3, r3, r0 -/* 0000ABA4 00017934 7D 28 03 A6 */ mtlr r9 -.L_0000ABA8: -/* 0000ABA8 00017938 4E 80 00 21 */ blrl -/* 0000ABAC 0001793C 7F E3 FB 78 */ mr r3, r31 -/* 0000ABB0 00017940 80 01 00 9C */ lwz r0, 0x9c(r1) -/* 0000ABB4 00017944 81 81 00 64 */ lwz r12, 0x64(r1) -/* 0000ABB8 00017948 7C 08 03 A6 */ mtlr r0 -/* 0000ABBC 0001794C BA 81 00 68 */ lmw r20, 0x68(r1) -.L_0000ABC0: -/* 0000ABC0 00017950 7D 80 81 20 */ mtcrf 8, r12 -.L_0000ABC4: -/* 0000ABC4 00017954 38 21 00 98 */ addi r1, r1, 0x98 -/* 0000ABC8 00017958 4E 80 00 20 */ blr -.endfn __16CDActionTrackCarPQ28CameraAI8DirectorP7IPlayer - -# .text:0xABCC | size: 0x258 -.fn _._16CDActionTrackCar, global -/* 0000ABCC 0001795C 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 0000ABD0 00017960 7C 08 02 A6 */ mflr r0 -/* 0000ABD4 00017964 BF 81 00 10 */ stmw r28, 0x10(r1) -/* 0000ABD8 00017968 90 01 00 24 */ stw r0, 0x24(r1) -/* 0000ABDC 0001796C 7C 7E 1B 78 */ mr r30, r3 -.L_0000ABE0: -/* 0000ABE0 00017970 3D 20 00 00 */ lis r9, _vt.16CDActionTrackCar.11IAttachable@ha -/* 0000ABE4 00017974 80 1E 00 40 */ lwz r0, 0x40(r30) -/* 0000ABE8 00017978 3D 60 00 00 */ lis r11, _vt.16CDActionTrackCar.14ITrafficCenter@ha -/* 0000ABEC 0001797C 3D 40 00 00 */ lis r10, _vt.16CDActionTrackCar@ha -/* 0000ABF0 00017980 39 29 00 00 */ addi r9, r9, _vt.16CDActionTrackCar.11IAttachable@l -/* 0000ABF4 00017984 39 6B 00 00 */ addi r11, r11, _vt.16CDActionTrackCar.14ITrafficCenter@l -.L_0000ABF8: -/* 0000ABF8 00017988 39 4A 00 00 */ addi r10, r10, _vt.16CDActionTrackCar@l -/* 0000ABFC 0001798C 3B FE 00 20 */ addi r31, r30, 0x20 -/* 0000AC00 00017990 7C 9C 23 78 */ mr r28, r4 -/* 0000AC04 00017994 91 3E 00 1C */ stw r9, 0x1c(r30) -/* 0000AC08 00017998 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000AC0C 0001799C 91 7E 00 24 */ stw r11, 0x24(r30) -/* 0000AC10 000179A0 91 5E 00 14 */ stw r10, 0x14(r30) -/* 0000AC14 000179A4 41 82 AC 24 */ beq .L_00005838 -.L_0000AC18: -/* 0000AC18 000179A8 80 7E 00 44 */ lwz r3, 0x44(r30) -/* 0000AC1C 000179AC 7C 04 03 78 */ mr r4, r0 -/* 0000AC20 000179B0 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -/* 0000AC24 000179B4 80 9E 00 48 */ lwz r4, 0x48(r30) -/* 0000AC28 000179B8 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0000AC2C 000179BC 41 82 AC 38 */ beq .L_00005864 -.L_0000AC30: -/* 0000AC30 000179C0 80 7E 00 44 */ lwz r3, 0x44(r30) -/* 0000AC34 000179C4 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -/* 0000AC38 000179C8 81 7E 00 28 */ lwz r11, 0x28(r30) -/* 0000AC3C 000179CC 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000AC40 000179D0 41 82 AC 60 */ beq .L_000058A0 -.L_0000AC44: -/* 0000AC44 000179D4 81 2B 00 08 */ lwz r9, 0x8(r11) -/* 0000AC48 000179D8 38 80 00 03 */ li r4, 0x3 -/* 0000AC4C 000179DC A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000AC50 000179E0 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000AC54 000179E4 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000AC58 000179E8 7C 08 03 A6 */ mtlr r0 -/* 0000AC5C 000179EC 4E 80 00 21 */ blrl -/* 0000AC60 000179F0 80 7E 00 2C */ lwz r3, 0x2c(r30) -/* 0000AC64 000179F4 2C 03 00 00 */ cmpwi r3, 0x0 -.L_0000AC68: -/* 0000AC68 000179F8 41 82 AC 74 */ beq .L_000058DC -/* 0000AC6C 000179FC 38 80 00 03 */ li r4, 0x3 -/* 0000AC70 00017A00 48 00 13 6D */ bl .L_0000BFDC -/* 0000AC74 00017A04 81 7E 00 44 */ lwz r11, 0x44(r30) -/* 0000AC78 00017A08 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000AC7C 00017A0C 41 82 AC 9C */ beq .L_00005918 -/* 0000AC80 00017A10 81 2B 00 0C */ lwz r9, 0xc(r11) -/* 0000AC84 00017A14 38 80 00 03 */ li r4, 0x3 -/* 0000AC88 00017A18 A8 69 00 08 */ lha r3, 0x8(r9) -/* 0000AC8C 00017A1C 80 09 00 0C */ lwz r0, 0xc(r9) -/* 0000AC90 00017A20 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000AC94 00017A24 7C 08 03 A6 */ mtlr r0 -/* 0000AC98 00017A28 4E 80 00 21 */ blrl -/* 0000AC9C 00017A2C 38 7E 00 30 */ addi r3, r30, 0x30 -/* 0000ACA0 00017A30 38 80 00 02 */ li r4, 0x2 -/* 0000ACA4 00017A34 48 00 00 01 */ bl _._Q29WorldConn9Reference -/* 0000ACA8 00017A38 3D 20 00 00 */ lis r9, _vt.14ITrafficCenter@ha -/* 0000ACAC 00017A3C 3D 40 00 00 */ lis r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha -/* 0000ACB0 00017A40 39 29 00 00 */ addi r9, r9, _vt.14ITrafficCenter@l -/* 0000ACB4 00017A44 39 6A 00 00 */ addi r11, r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l -/* 0000ACB8 00017A48 91 3E 00 24 */ stw r9, 0x24(r30) -/* 0000ACBC 00017A4C 3B A1 00 08 */ addi r29, r1, 0x8 -/* 0000ACC0 00017A50 93 E1 00 08 */ stw r31, 0x8(r1) -/* 0000ACC4 00017A54 7F A5 EB 78 */ mr r5, r29 -/* 0000ACC8 00017A58 80 6A 00 00 */ lwz r3, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r10) -/* 0000ACCC 00017A5C 80 0B 00 08 */ lwz r0, 0x8(r11) -/* 0000ACD0 00017A60 54 00 10 3A */ slwi r0, r0, 2 -/* 0000ACD4 00017A64 7F E3 02 14 */ add r31, r3, r0 -/* 0000ACD8 00017A68 7F E4 FB 78 */ mr r4, r31 -/* 0000ACDC 00017A6C 48 00 00 01 */ bl find__H2ZPP14ITrafficCenterZP14ITrafficCenter_4_STLX01X01RCX11_X01 -/* 0000ACE0 00017A70 7C 03 F8 00 */ cmpw r3, r31 -/* 0000ACE4 00017A74 40 82 AC F4 */ bne .L_000059D8 -/* 0000ACE8 00017A78 7F E3 FB 78 */ mr r3, r31 -/* 0000ACEC 00017A7C 38 9E 00 18 */ addi r4, r30, 0x18 -/* 0000ACF0 00017A80 48 00 AD 28 */ b .L_00015A18 -/* 0000ACF4 00017A84 39 63 00 04 */ addi r11, r3, 0x4 -/* 0000ACF8 00017A88 38 9E 00 18 */ addi r4, r30, 0x18 -/* 0000ACFC 00017A8C 7C 0B F8 00 */ cmpw r11, r31 -/* 0000AD00 00017A90 41 82 AD 28 */ beq .L_00005A28 -/* 0000AD04 00017A94 81 2B 00 00 */ lwz r9, 0x0(r11) -/* 0000AD08 00017A98 80 1D 00 00 */ lwz r0, 0x0(r29) -/* 0000AD0C 00017A9C 7C 09 00 00 */ cmpw r9, r0 -/* 0000AD10 00017AA0 41 82 AD 1C */ beq .L_00005A2C -/* 0000AD14 00017AA4 91 23 00 00 */ stw r9, 0x0(r3) -/* 0000AD18 00017AA8 38 63 00 04 */ addi r3, r3, 0x4 -/* 0000AD1C 00017AAC 39 6B 00 04 */ addi r11, r11, 0x4 -/* 0000AD20 00017AB0 7C 0B F8 00 */ cmpw r11, r31 -/* 0000AD24 00017AB4 40 82 AD 04 */ bne .L_00005A28 -/* 0000AD28 00017AB8 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha -/* 0000AD2C 00017ABC 38 A9 00 00 */ addi r5, r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l -/* 0000AD30 00017AC0 81 49 00 00 */ lwz r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r9) -/* 0000AD34 00017AC4 81 05 00 08 */ lwz r8, 0x8(r5) -/* 0000AD38 00017AC8 55 00 10 3A */ slwi r0, r8, 2 -/* 0000AD3C 00017ACC 7D 6A 02 14 */ add r11, r10, r0 -/* 0000AD40 00017AD0 7C 03 58 00 */ cmpw r3, r11 -/* 0000AD44 00017AD4 41 82 AD BC */ beq .L_00005B00 -/* 0000AD48 00017AD8 7D 23 58 50 */ subf r9, r3, r11 -/* 0000AD4C 00017ADC 7C 0A 18 50 */ subf r0, r10, r3 -/* 0000AD50 00017AE0 7D 3F 16 70 */ srawi r31, r9, 2 -/* 0000AD54 00017AE4 7C 06 16 70 */ srawi r6, r0, 2 -/* 0000AD58 00017AE8 7D 09 43 78 */ mr r9, r8 -/* 0000AD5C 00017AEC 38 63 00 04 */ addi r3, r3, 0x4 -/* 0000AD60 00017AF0 7C 03 58 00 */ cmpw r3, r11 -/* 0000AD64 00017AF4 40 82 AD 5C */ bne .L_00005AC0 -/* 0000AD68 00017AF8 7C E6 FA 14 */ add r7, r6, r31 -/* 0000AD6C 00017AFC 39 00 00 00 */ li r8, 0x0 -/* 0000AD70 00017B00 7C E3 3B 78 */ mr r3, r7 -/* 0000AD74 00017B04 7C 03 48 50 */ subf r0, r3, r9 -/* 0000AD78 00017B08 7C 08 00 40 */ cmplw r8, r0 -/* 0000AD7C 00017B0C 40 80 AD B4 */ bge .L_00005B30 -/* 0000AD80 00017B10 7C 06 42 14 */ add r0, r6, r8 -/* 0000AD84 00017B14 81 65 00 00 */ lwz r11, 0x0(r5) -/* 0000AD88 00017B18 54 0A 10 3A */ slwi r10, r0, 2 -/* 0000AD8C 00017B1C 7D 27 42 14 */ add r9, r7, r8 -/* 0000AD90 00017B20 7C 0A 5A 14 */ add r0, r10, r11 -/* 0000AD94 00017B24 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000AD98 00017B28 41 82 AD A8 */ beq .L_00005B40 -/* 0000AD9C 00017B2C 55 29 10 3A */ slwi r9, r9, 2 -/* 0000ADA0 00017B30 7C 09 58 2E */ lwzx r0, r9, r11 -/* 0000ADA4 00017B34 7C 0A 59 2E */ stwx r0, r10, r11 -/* 0000ADA8 00017B38 39 08 00 01 */ addi r8, r8, 0x1 -/* 0000ADAC 00017B3C 81 25 00 08 */ lwz r9, 0x8(r5) -/* 0000ADB0 00017B40 48 00 AD 74 */ b .L_00015B24 -/* 0000ADB4 00017B44 7C 1F 48 50 */ subf r0, r31, r9 -/* 0000ADB8 00017B48 90 05 00 08 */ stw r0, 0x8(r5) -/* 0000ADBC 00017B4C 3D 20 00 00 */ lis r9, _vt.Q33UTL3COM8IUnknown@ha -/* 0000ADC0 00017B50 80 7E 00 18 */ lwz r3, 0x18(r30) -/* 0000ADC4 00017B54 39 29 00 00 */ addi r9, r9, _vt.Q33UTL3COM8IUnknown@l -/* 0000ADC8 00017B58 91 3E 00 1C */ stw r9, 0x1c(r30) -/* 0000ADCC 00017B5C 48 00 00 01 */ bl Remove__Q43UTL3COM6Object6_IListPQ33UTL3COM8IUnknown -/* 0000ADD0 00017B60 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha -/* 0000ADD4 00017B64 7F C3 F3 78 */ mr r3, r30 -/* 0000ADD8 00017B68 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l -/* 0000ADDC 00017B6C 38 80 00 02 */ li r4, 0x2 -/* 0000ADE0 00017B70 91 3E 00 14 */ stw r9, 0x14(r30) -/* 0000ADE4 00017B74 48 00 00 01 */ bl _._Q43UTL3COM6Object6_IList -/* 0000ADE8 00017B78 73 80 00 01 */ andi. r0, r28, 0x1 -/* 0000ADEC 00017B7C 41 82 AE 10 */ beq .L_00005BFC -/* 0000ADF0 00017B80 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 0000ADF4 00017B84 41 82 AE 10 */ beq .L_00005C04 -/* 0000ADF8 00017B88 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0000ADFC 00017B8C 7F C4 F3 78 */ mr r4, r30 -/* 0000AE00 00017B90 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0000AE04 00017B94 38 A0 00 50 */ li r5, 0x50 -/* 0000AE08 00017B98 38 C0 00 00 */ li r6, 0x0 -/* 0000AE0C 00017B9C 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 0000AE10 00017BA0 80 01 00 24 */ lwz r0, 0x24(r1) -/* 0000AE14 00017BA4 7C 08 03 A6 */ mtlr r0 -/* 0000AE18 00017BA8 BB 81 00 10 */ lmw r28, 0x10(r1) -/* 0000AE1C 00017BAC 38 21 00 20 */ addi r1, r1, 0x20 -/* 0000AE20 00017BB0 4E 80 00 20 */ blr -.endfn _._16CDActionTrackCar - -# .text:0xAE24 | size: 0xB4 -.fn OnDetached__16CDActionTrackCarP11IAttachable, global -/* 0000AE24 00017BB4 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0000AE28 00017BB8 7C 08 02 A6 */ mflr r0 -/* 0000AE2C 00017BBC 90 01 00 0C */ stw r0, 0xc(r1) -/* 0000AE30 00017BC0 7C 84 23 79 */ mr. r4, r4 -/* 0000AE34 00017BC4 81 23 00 40 */ lwz r9, 0x40(r3) -/* 0000AE38 00017BC8 4F 80 00 00 */ mcrf cr7, cr0 -/* 0000AE3C 00017BCC 41 9E AE 60 */ beq cr7, .L_00005C9C -/* 0000AE40 00017BD0 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0000AE44 00017BD4 41 82 AE 60 */ beq .L_00005CA4 -/* 0000AE48 00017BD8 81 29 00 00 */ lwz r9, 0x0(r9) -/* 0000AE4C 00017BDC 80 04 00 00 */ lwz r0, 0x0(r4) -/* 0000AE50 00017BE0 7C 00 4A 78 */ xor r0, r0, r9 -/* 0000AE54 00017BE4 21 60 00 00 */ subfic r11, r0, 0x0 -/* 0000AE58 00017BE8 7C 0B 01 14 */ adde r0, r11, r0 -/* 0000AE5C 00017BEC 48 00 AE 74 */ b .L_00015CD0 -/* 0000AE60 00017BF0 38 00 00 00 */ li r0, 0x0 -/* 0000AE64 00017BF4 2F 84 00 00 */ cmpwi cr7, r4, 0x0 -/* 0000AE68 00017BF8 40 9E AE 74 */ bne cr7, .L_00005CDC -/* 0000AE6C 00017BFC 21 69 00 00 */ subfic r11, r9, 0x0 -/* 0000AE70 00017C00 7C 0B 49 14 */ adde r0, r11, r9 -/* 0000AE74 00017C04 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000AE78 00017C08 41 82 AE 84 */ beq .L_00005CFC -/* 0000AE7C 00017C0C 38 00 00 00 */ li r0, 0x0 -/* 0000AE80 00017C10 90 03 00 40 */ stw r0, 0x40(r3) -/* 0000AE84 00017C14 81 63 00 48 */ lwz r11, 0x48(r3) -/* 0000AE88 00017C18 41 9E AE AC */ beq cr7, .L_00005D34 -/* 0000AE8C 00017C1C 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000AE90 00017C20 41 82 AE AC */ beq .L_00005D3C -/* 0000AE94 00017C24 81 24 00 00 */ lwz r9, 0x0(r4) -/* 0000AE98 00017C28 80 0B 00 00 */ lwz r0, 0x0(r11) -/* 0000AE9C 00017C2C 7D 20 02 78 */ xor r0, r9, r0 -/* 0000AEA0 00017C30 21 60 00 00 */ subfic r11, r0, 0x0 -/* 0000AEA4 00017C34 7C 0B 01 14 */ adde r0, r11, r0 -/* 0000AEA8 00017C38 48 00 AE BC */ b .L_00015D64 -/* 0000AEAC 00017C3C 38 00 00 00 */ li r0, 0x0 -/* 0000AEB0 00017C40 40 9E AE BC */ bne cr7, .L_00005D6C -/* 0000AEB4 00017C44 21 2B 00 00 */ subfic r9, r11, 0x0 -/* 0000AEB8 00017C48 7C 09 59 14 */ adde r0, r9, r11 -/* 0000AEBC 00017C4C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000AEC0 00017C50 41 82 AE C8 */ beq .L_00005D88 -/* 0000AEC4 00017C54 48 00 AE D9 */ bl .L_00015D9C -/* 0000AEC8 00017C58 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0000AECC 00017C5C 7C 08 03 A6 */ mtlr r0 -/* 0000AED0 00017C60 38 21 00 08 */ addi r1, r1, 0x8 -/* 0000AED4 00017C64 4E 80 00 20 */ blr -.endfn OnDetached__16CDActionTrackCarP11IAttachable - -# .text:0xAED8 | size: 0x6C -# CDActionTrackCar::OnCarDetached -.fn OnCarDetached__16CDActionTrackCar, global -/* 0000AED8 00017C68 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 0000AEDC 00017C6C 7C 08 02 A6 */ mflr r0 -/* 0000AEE0 00017C70 93 E1 00 0C */ stw r31, 0xc(r1) -/* 0000AEE4 00017C74 90 01 00 14 */ stw r0, 0x14(r1) -/* 0000AEE8 00017C78 7C 7F 1B 78 */ mr r31, r3 -/* 0000AEEC 00017C7C 39 20 00 01 */ li r9, 0x1 -/* 0000AEF0 00017C80 80 1F 00 34 */ lwz r0, 0x34(r31) -/* 0000AEF4 00017C84 38 7F 00 30 */ addi r3, r31, 0x30 -/* 0000AEF8 00017C88 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000AEFC 00017C8C 40 82 AF 04 */ bne .L_00005E00 -/* 0000AF00 00017C90 39 20 00 00 */ li r9, 0x0 -/* 0000AF04 00017C94 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0000AF08 00017C98 41 82 AF 14 */ beq .L_00005E1C -/* 0000AF0C 00017C9C 38 80 00 00 */ li r4, 0x0 -/* 0000AF10 00017CA0 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi -/* 0000AF14 00017CA4 81 3F 00 2C */ lwz r9, 0x2c(r31) -/* 0000AF18 00017CA8 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0000AF1C 00017CAC 41 82 AF 28 */ beq .L_00005E44 -/* 0000AF20 00017CB0 38 00 00 00 */ li r0, 0x0 -/* 0000AF24 00017CB4 90 09 00 8C */ stw r0, 0x8c(r9) -/* 0000AF28 00017CB8 38 00 00 00 */ li r0, 0x0 -/* 0000AF2C 00017CBC 90 1F 00 48 */ stw r0, 0x48(r31) -/* 0000AF30 00017CC0 80 01 00 14 */ lwz r0, 0x14(r1) -/* 0000AF34 00017CC4 7C 08 03 A6 */ mtlr r0 -/* 0000AF38 00017CC8 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 0000AF3C 00017CCC 38 21 00 10 */ addi r1, r1, 0x10 -/* 0000AF40 00017CD0 4E 80 00 20 */ blr -.endfn OnCarDetached__16CDActionTrackCar - -# .text:0xAF44 | size: 0x224 -# CDActionTrackCar::AquireCar -.fn AquireCar__16CDActionTrackCar, global -/* 0000AF44 00017CD4 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0000AF48 00017CD8 7C 08 02 A6 */ mflr r0 -/* 0000AF4C 00017CDC BF A1 00 0C */ stmw r29, 0xc(r1) -/* 0000AF50 00017CE0 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0000AF54 00017CE4 7C 7F 1B 78 */ mr r31, r3 -/* 0000AF58 00017CE8 81 7F 00 40 */ lwz r11, 0x40(r31) -/* 0000AF5C 00017CEC 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000AF60 00017CF0 41 82 B1 54 */ beq .L_000060B4 -/* 0000AF64 00017CF4 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000AF68 00017CF8 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000AF6C 00017CFC 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000AF70 00017D00 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000AF74 00017D04 7C 08 03 A6 */ mtlr r0 -/* 0000AF78 00017D08 4E 80 00 21 */ blrl -/* 0000AF7C 00017D0C 81 7F 00 48 */ lwz r11, 0x48(r31) -/* 0000AF80 00017D10 7C 63 1B 79 */ mr. r3, r3 -/* 0000AF84 00017D14 41 82 AF A8 */ beq .L_00005F2C -/* 0000AF88 00017D18 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000AF8C 00017D1C 41 82 AF A8 */ beq .L_00005F34 -/* 0000AF90 00017D20 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0000AF94 00017D24 80 0B 00 00 */ lwz r0, 0x0(r11) -/* 0000AF98 00017D28 7D 3E 02 78 */ xor r30, r9, r0 -/* 0000AF9C 00017D2C 21 7E 00 00 */ subfic r11, r30, 0x0 -/* 0000AFA0 00017D30 7F CB F1 14 */ adde r30, r11, r30 -/* 0000AFA4 00017D34 48 00 AF C0 */ b .L_00015F64 -/* 0000AFA8 00017D38 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000AFAC 00017D3C 38 00 00 00 */ li r0, 0x0 -/* 0000AFB0 00017D40 40 82 AF BC */ bne .L_00005F6C -/* 0000AFB4 00017D44 21 2B 00 00 */ subfic r9, r11, 0x0 -/* 0000AFB8 00017D48 7C 09 59 14 */ adde r0, r9, r11 -/* 0000AFBC 00017D4C 7C 1E 03 78 */ mr r30, r0 -/* 0000AFC0 00017D50 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 0000AFC4 00017D54 40 82 AF F4 */ bne .L_00005FB8 -/* 0000AFC8 00017D58 80 9F 00 48 */ lwz r4, 0x48(r31) -/* 0000AFCC 00017D5C 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0000AFD0 00017D60 41 82 B0 00 */ beq .L_00005FD0 -/* 0000AFD4 00017D64 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 0000AFD8 00017D68 38 1F 00 18 */ addi r0, r31, 0x18 -/* 0000AFDC 00017D6C A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000AFE0 00017D70 81 29 00 1C */ lwz r9, 0x1c(r9) -/* 0000AFE4 00017D74 7C 60 1A 14 */ add r3, r0, r3 -.L_0000AFE8: -/* 0000AFE8 00017D78 7D 28 03 A6 */ mtlr r9 -/* 0000AFEC 00017D7C 4E 80 00 21 */ blrl -/* 0000AFF0 00017D80 93 DF 00 48 */ stw r30, 0x48(r31) -/* 0000AFF4 00017D84 80 1F 00 48 */ lwz r0, 0x48(r31) -/* 0000AFF8 00017D88 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000AFFC 00017D8C 40 82 B1 54 */ bne .L_00006150 -/* 0000B000 00017D90 80 7F 00 40 */ lwz r3, 0x40(r31) -/* 0000B004 00017D94 81 23 00 04 */ lwz r9, 0x4(r3) -/* 0000B008 00017D98 A8 09 00 10 */ lha r0, 0x10(r9) -/* 0000B00C 00017D9C 81 29 00 14 */ lwz r9, 0x14(r9) -/* 0000B010 00017DA0 7C 63 02 14 */ add r3, r3, r0 -.L_0000B014: -/* 0000B014 00017DA4 7D 28 03 A6 */ mtlr r9 -/* 0000B018 00017DA8 4E 80 00 21 */ blrl -/* 0000B01C 00017DAC 7C 7D 1B 79 */ mr. r29, r3 -/* 0000B020 00017DB0 41 82 B1 54 */ beq .L_00006174 -/* 0000B024 00017DB4 81 3D 00 04 */ lwz r9, 0x4(r29) -/* 0000B028 00017DB8 3B DF 00 30 */ addi r30, r31, 0x30 -/* 0000B02C 00017DBC 80 09 00 EC */ lwz r0, 0xec(r9) -/* 0000B030 00017DC0 A8 69 00 E8 */ lha r3, 0xe8(r9) -/* 0000B034 00017DC4 7C 08 03 A6 */ mtlr r0 -/* 0000B038 00017DC8 7C 7D 1A 14 */ add r3, r29, r3 -/* 0000B03C 00017DCC 4E 80 00 21 */ blrl -/* 0000B040 00017DD0 7C 64 1B 78 */ mr r4, r3 -/* 0000B044 00017DD4 7F C3 F3 78 */ mr r3, r30 -/* 0000B048 00017DD8 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi -/* 0000B04C 00017DDC 80 1F 00 34 */ lwz r0, 0x34(r31) -/* 0000B050 00017DE0 39 20 00 01 */ li r9, 0x1 -/* 0000B054 00017DE4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000B058 00017DE8 40 82 B0 60 */ bne .L_000060B8 -/* 0000B05C 00017DEC 39 20 00 00 */ li r9, 0x0 -/* 0000B060 00017DF0 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0000B064 00017DF4 41 82 B1 54 */ beq .L_000061B8 -/* 0000B068 00017DF8 80 7D 00 00 */ lwz r3, 0x0(r29) -/* 0000B06C 00017DFC 3C 80 00 00 */ lis r4, _IHandle__8IVehicle@ha -/* 0000B070 00017E00 38 84 00 00 */ addi r4, r4, _IHandle__8IVehicle@l -/* 0000B074 00017E04 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000B078 00017E08 38 00 00 01 */ li r0, 0x1 -/* 0000B07C 00017E0C 90 7F 00 48 */ stw r3, 0x48(r31) -.L_0000B080: -/* 0000B080 00017E10 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000B084 00017E14 40 82 B0 8C */ bne .L_00006110 -/* 0000B088 00017E18 38 00 00 00 */ li r0, 0x0 -/* 0000B08C 00017E1C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000B090 00017E20 41 82 B1 54 */ beq .L_000061E4 -/* 0000B094 00017E24 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 0000B098 00017E28 7C 64 1B 78 */ mr r4, r3 -/* 0000B09C 00017E2C 38 1F 00 18 */ addi r0, r31, 0x18 -/* 0000B0A0 00017E30 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000B0A4 00017E34 81 29 00 14 */ lwz r9, 0x14(r9) -/* 0000B0A8 00017E38 7C 60 1A 14 */ add r3, r0, r3 -/* 0000B0AC 00017E3C 7D 28 03 A6 */ mtlr r9 -.L_0000B0B0: -/* 0000B0B0 00017E40 4E 80 00 21 */ blrl -/* 0000B0B4 00017E44 81 7F 00 48 */ lwz r11, 0x48(r31) -/* 0000B0B8 00017E48 83 DF 00 2C */ lwz r30, 0x2c(r31) -/* 0000B0BC 00017E4C 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000B0C0 00017E50 A8 69 00 98 */ lha r3, 0x98(r9) -/* 0000B0C4 00017E54 80 09 00 9C */ lwz r0, 0x9c(r9) -/* 0000B0C8 00017E58 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000B0CC 00017E5C 7C 08 03 A6 */ mtlr r0 -/* 0000B0D0 00017E60 4E 80 00 21 */ blrl -/* 0000B0D4 00017E64 81 23 00 08 */ lwz r9, 0x8(r3) -/* 0000B0D8 00017E68 80 69 00 1C */ lwz r3, 0x1c(r9) -/* 0000B0DC 00017E6C 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000B0E0 00017E70 40 82 B0 EC */ bne .L_000061CC -/* 0000B0E4 00017E74 3D 20 00 00 */ lis r9, .rodata@ha -/* 0000B0E8 00017E78 38 69 00 00 */ addi r3, r9, .rodata@l -/* 0000B0EC 00017E7C 48 00 00 01 */ bl bStringHash__FPCc -/* 0000B0F0 00017E80 7C 64 1B 78 */ mr r4, r3 -/* 0000B0F4 00017E84 7F C3 F3 78 */ mr r3, r30 -/* 0000B0F8 00017E88 48 00 13 CD */ bl .L_0000C4C4 -/* 0000B0FC 00017E8C 80 1F 00 30 */ lwz r0, 0x30(r31) -/* 0000B100 00017E90 3C 80 00 00 */ lis r4, _IHandle__13ITransmission@ha -/* 0000B104 00017E94 81 7F 00 2C */ lwz r11, 0x2c(r31) -/* 0000B108 00017E98 38 84 00 00 */ addi r4, r4, _IHandle__13ITransmission@l -/* 0000B10C 00017E9C 90 0B 00 8C */ stw r0, 0x8c(r11) -/* 0000B110 00017EA0 81 3F 00 48 */ lwz r9, 0x48(r31) -/* 0000B114 00017EA4 80 69 00 00 */ lwz r3, 0x0(r9) -/* 0000B118 00017EA8 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000B11C 00017EAC 7C 6B 1B 79 */ mr. r11, r3 -/* 0000B120 00017EB0 38 00 00 01 */ li r0, 0x1 -/* 0000B124 00017EB4 40 82 B1 2C */ bne .L_00006250 -/* 0000B128 00017EB8 38 00 00 00 */ li r0, 0x0 -/* 0000B12C 00017EBC 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000B130 00017EC0 41 82 B1 54 */ beq .L_00006284 -/* 0000B134 00017EC4 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000B138 00017EC8 A8 69 00 40 */ lha r3, 0x40(r9) -/* 0000B13C 00017ECC 80 09 00 44 */ lwz r0, 0x44(r9) -/* 0000B140 00017ED0 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000B144 00017ED4 7C 08 03 A6 */ mtlr r0 -/* 0000B148 00017ED8 4E 80 00 21 */ blrl -/* 0000B14C 00017EDC 81 3F 00 2C */ lwz r9, 0x2c(r31) -/* 0000B150 00017EE0 D0 29 00 14 */ stfs f1, 0x14(r9) -/* 0000B154 00017EE4 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0000B158 00017EE8 7C 08 03 A6 */ mtlr r0 -/* 0000B15C 00017EEC BB A1 00 0C */ lmw r29, 0xc(r1) -/* 0000B160 00017EF0 38 21 00 18 */ addi r1, r1, 0x18 -/* 0000B164 00017EF4 4E 80 00 20 */ blr -.endfn AquireCar__16CDActionTrackCar - -# .text:0xB168 | size: 0x1B8 -.fn Update__16CDActionTrackCarf, global -/* 0000B168 00017EF8 94 21 FF 90 */ stwu r1, -0x70(r1) -.L_0000B16C: -/* 0000B16C 00017EFC 7C 08 02 A6 */ mflr r0 -/* 0000B170 00017F00 F3 E1 00 68 */ psq_st f31, 0x68(r1), 0, qr0 -/* 0000B174 00017F04 BF 81 00 58 */ stmw r28, 0x58(r1) -/* 0000B178 00017F08 90 01 00 74 */ stw r0, 0x74(r1) -.L_0000B17C: -/* 0000B17C 00017F0C 7C 7F 1B 78 */ mr r31, r3 -/* 0000B180 00017F10 FF E0 08 90 */ fmr f31, f1 -/* 0000B184 00017F14 83 DF 00 40 */ lwz r30, 0x40(r31) -/* 0000B188 00017F18 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 0000B18C 00017F1C 40 82 B1 C0 */ bne .L_0000634C -/* 0000B190 00017F20 80 9F 00 48 */ lwz r4, 0x48(r31) -/* 0000B194 00017F24 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0000B198 00017F28 41 82 B3 08 */ beq .L_000064A0 -/* 0000B19C 00017F2C 81 3F 00 1C */ lwz r9, 0x1c(r31) -.L_0000B1A0: -/* 0000B1A0 00017F30 38 1F 00 18 */ addi r0, r31, 0x18 -/* 0000B1A4 00017F34 A8 69 00 18 */ lha r3, 0x18(r9) -.L_0000B1A8: -/* 0000B1A8 00017F38 81 29 00 1C */ lwz r9, 0x1c(r9) -/* 0000B1AC 00017F3C 7C 60 1A 14 */ add r3, r0, r3 -/* 0000B1B0 00017F40 7D 28 03 A6 */ mtlr r9 -/* 0000B1B4 00017F44 4E 80 00 21 */ blrl -/* 0000B1B8 00017F48 93 DF 00 48 */ stw r30, 0x48(r31) -/* 0000B1BC 00017F4C 48 00 B3 08 */ b .L_000164C4 -/* 0000B1C0 00017F50 7F E3 FB 78 */ mr r3, r31 -/* 0000B1C4 00017F54 48 00 AF 45 */ bl .L_00016108 -/* 0000B1C8 00017F58 80 7F 00 34 */ lwz r3, 0x34(r31) -/* 0000B1CC 00017F5C 38 00 00 01 */ li r0, 0x1 -/* 0000B1D0 00017F60 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000B1D4 00017F64 40 82 B1 DC */ bne .L_000063B0 -/* 0000B1D8 00017F68 38 00 00 00 */ li r0, 0x0 -/* 0000B1DC 00017F6C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000B1E0 00017F70 41 82 B3 08 */ beq .L_000064E8 -/* 0000B1E4 00017F74 38 81 00 08 */ addi r4, r1, 0x8 -/* 0000B1E8 00017F78 48 00 00 01 */ bl PSMTX44Copy -/* 0000B1EC 00017F7C 80 7F 00 48 */ lwz r3, 0x48(r31) -/* 0000B1F0 00017F80 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000B1F4 00017F84 41 82 B2 F0 */ beq .L_000064E4 -/* 0000B1F8 00017F88 80 63 00 00 */ lwz r3, 0x0(r3) -/* 0000B1FC 00017F8C 3C 80 00 00 */ lis r4, _IHandle__14ICollisionBody@ha -/* 0000B200 00017F90 38 84 00 00 */ addi r4, r4, _IHandle__14ICollisionBody@l -/* 0000B204 00017F94 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000B208 00017F98 7C 7C 1B 79 */ mr. r28, r3 -/* 0000B20C 00017F9C 38 00 00 01 */ li r0, 0x1 -/* 0000B210 00017FA0 40 82 B2 18 */ bne .L_00006428 -/* 0000B214 00017FA4 38 00 00 00 */ li r0, 0x0 -/* 0000B218 00017FA8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000B21C 00017FAC 41 82 B2 F0 */ beq .L_0000650C -/* 0000B220 00017FB0 81 7F 00 48 */ lwz r11, 0x48(r31) -/* 0000B224 00017FB4 3B A1 00 48 */ addi r29, r1, 0x48 -/* 0000B228 00017FB8 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000B22C 00017FBC 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0000B230 00017FC0 A8 69 00 18 */ lha r3, 0x18(r9) -.L_0000B234: -/* 0000B234 00017FC4 7C 08 03 A6 */ mtlr r0 -/* 0000B238 00017FC8 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000B23C 00017FCC 4E 80 00 21 */ blrl -/* 0000B240 00017FD0 81 23 00 04 */ lwz r9, 0x4(r3) -/* 0000B244 00017FD4 A8 09 00 A8 */ lha r0, 0xa8(r9) -/* 0000B248 00017FD8 81 29 00 AC */ lwz r9, 0xac(r9) -/* 0000B24C 00017FDC 7C 63 02 14 */ add r3, r3, r0 -/* 0000B250 00017FE0 7D 28 03 A6 */ mtlr r9 -/* 0000B254 00017FE4 4E 80 00 21 */ blrl -/* 0000B258 00017FE8 81 3C 00 04 */ lwz r9, 0x4(r28) -/* 0000B25C 00017FEC 7C 7E 1B 78 */ mr r30, r3 -/* 0000B260 00017FF0 80 09 00 84 */ lwz r0, 0x84(r9) -/* 0000B264 00017FF4 A8 69 00 80 */ lha r3, 0x80(r9) -/* 0000B268 00017FF8 7C 08 03 A6 */ mtlr r0 -/* 0000B26C 00017FFC 7C 7C 1A 14 */ add r3, r28, r3 -/* 0000B270 00018000 4E 80 00 21 */ blrl -/* 0000B274 00018004 C1 A3 00 00 */ lfs f13, 0x0(r3) -/* 0000B278 00018008 7F A4 EB 78 */ mr r4, r29 -/* 0000B27C 0001800C 38 A0 00 00 */ li r5, 0x0 -/* 0000B280 00018010 D1 A1 00 48 */ stfs f13, 0x48(r1) -/* 0000B284 00018014 C0 03 00 04 */ lfs f0, 0x4(r3) -/* 0000B288 00018018 D0 01 00 4C */ stfs f0, 0x4c(r1) -/* 0000B28C 0001801C C1 A3 00 08 */ lfs f13, 0x8(r3) -/* 0000B290 00018020 D1 A1 00 50 */ stfs f13, 0x50(r1) -/* 0000B294 00018024 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000B298 00018028 80 09 01 4C */ lwz r0, 0x14c(r9) -/* 0000B29C 0001802C A8 69 01 48 */ lha r3, 0x148(r9) -/* 0000B2A0 00018030 7C 08 03 A6 */ mtlr r0 -/* 0000B2A4 00018034 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000B2A8 00018038 4E 80 00 21 */ blrl -/* 0000B2AC 0001803C 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000B2B0 00018040 A8 69 00 48 */ lha r3, 0x48(r9) -/* 0000B2B4 00018044 80 09 00 4C */ lwz r0, 0x4c(r9) -/* 0000B2B8 00018048 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000B2BC 0001804C 7C 08 03 A6 */ mtlr r0 -/* 0000B2C0 00018050 4E 80 00 21 */ blrl -/* 0000B2C4 00018054 7C 64 1B 78 */ mr r4, r3 -/* 0000B2C8 00018058 7F A3 EB 78 */ mr r3, r29 -/* 0000B2CC 0001805C 7C 65 1B 78 */ mr r5, r3 -.L_0000B2D0: -/* 0000B2D0 00018060 48 00 00 01 */ bl VU0_v3add__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 -/* 0000B2D4 00018064 C0 01 00 48 */ lfs f0, 0x48(r1) -/* 0000B2D8 00018068 C1 A1 00 50 */ lfs f13, 0x50(r1) -/* 0000B2DC 0001806C C1 81 00 4C */ lfs f12, 0x4c(r1) -/* 0000B2E0 00018070 FC 00 00 50 */ fneg f0, f0 -/* 0000B2E4 00018074 D1 A1 00 38 */ stfs f13, 0x38(r1) -/* 0000B2E8 00018078 D0 01 00 3C */ stfs f0, 0x3c(r1) -/* 0000B2EC 0001807C D1 81 00 40 */ stfs f12, 0x40(r1) -/* 0000B2F0 00018080 80 DF 00 3C */ lwz r6, 0x3c(r31) -/* 0000B2F4 00018084 FC 20 F8 90 */ fmr f1, f31 -/* 0000B2F8 00018088 80 7F 00 2C */ lwz r3, 0x2c(r31) -/* 0000B2FC 0001808C 38 81 00 08 */ addi r4, r1, 0x8 -/* 0000B300 00018090 80 BF 00 38 */ lwz r5, 0x38(r31) -/* 0000B304 00018094 48 00 17 65 */ bl .L_0000CA68 -/* 0000B308 00018098 80 01 00 74 */ lwz r0, 0x74(r1) -/* 0000B30C 0001809C 7C 08 03 A6 */ mtlr r0 -/* 0000B310 000180A0 BB 81 00 58 */ lmw r28, 0x58(r1) -/* 0000B314 000180A4 E3 E1 00 68 */ psq_l f31, 0x68(r1), 0, qr0 -/* 0000B318 000180A8 38 21 00 70 */ addi r1, r1, 0x70 -/* 0000B31C 000180AC 4E 80 00 20 */ blr -.endfn Update__16CDActionTrackCarf - -# .text:0xB320 | size: 0xA4 -.fn GetTrafficBasis__16CDActionTrackCarRQ25UMath7Matrix4RQ25UMath7Vector3, global -/* 0000B320 000180B0 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0000B324 000180B4 7C 08 02 A6 */ mflr r0 -/* 0000B328 000180B8 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 0000B32C 000180BC 90 01 00 1C */ stw r0, 0x1c(r1) -.L_0000B330: -/* 0000B330 000180C0 80 63 00 48 */ lwz r3, 0x48(r3) -/* 0000B334 000180C4 7C 9E 23 78 */ mr r30, r4 -/* 0000B338 000180C8 7C BD 2B 78 */ mr r29, r5 -/* 0000B33C 000180CC 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000B340 000180D0 41 82 B3 AC */ beq .L_000066EC -/* 0000B344 000180D4 80 63 00 00 */ lwz r3, 0x0(r3) -/* 0000B348 000180D8 3C 80 00 00 */ lis r4, _IHandle__5IBody@ha -/* 0000B34C 000180DC 38 84 00 00 */ addi r4, r4, _IHandle__5IBody@l -/* 0000B350 000180E0 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000B354 000180E4 7C 7F 1B 79 */ mr. r31, r3 -/* 0000B358 000180E8 38 00 00 01 */ li r0, 0x1 -/* 0000B35C 000180EC 40 82 B3 64 */ bne .L_000066C0 -/* 0000B360 000180F0 38 00 00 00 */ li r0, 0x0 -/* 0000B364 000180F4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000B368 000180F8 41 82 B3 AC */ beq .L_00006714 -/* 0000B36C 000180FC 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 0000B370 00018100 7F C4 F3 78 */ mr r4, r30 -/* 0000B374 00018104 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000B378 00018108 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000B37C 0001810C 7C 08 03 A6 */ mtlr r0 -/* 0000B380 00018110 7C 7F 1A 14 */ add r3, r31, r3 -/* 0000B384 00018114 4E 80 00 21 */ blrl -/* 0000B388 00018118 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 0000B38C 0001811C 7F A4 EB 78 */ mr r4, r29 -.L_0000B390: -/* 0000B390 00018120 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000B394 00018124 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0000B398 00018128 7C 7F 1A 14 */ add r3, r31, r3 -/* 0000B39C 0001812C 7C 08 03 A6 */ mtlr r0 -/* 0000B3A0 00018130 4E 80 00 21 */ blrl -/* 0000B3A4 00018134 38 60 00 01 */ li r3, 0x1 -/* 0000B3A8 00018138 48 00 B3 B0 */ b .L_00016758 -/* 0000B3AC 0001813C 38 60 00 00 */ li r3, 0x0 -/* 0000B3B0 00018140 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0000B3B4 00018144 7C 08 03 A6 */ mtlr r0 -/* 0000B3B8 00018148 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 0000B3BC 0001814C 38 21 00 18 */ addi r1, r1, 0x18 -/* 0000B3C0 00018150 4E 80 00 20 */ blr -.endfn GetTrafficBasis__16CDActionTrackCarRQ25UMath7Matrix4RQ25UMath7Vector3 - -# .text:0xB3C4 | size: 0x74 -.fn GetName__C16CDActionTrackCop, global -/* 0000B3C4 00018154 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0000B3C8 00018158 7C 08 02 A6 */ mflr r0 -.L_0000B3CC: -/* 0000B3CC 0001815C BF A1 00 0C */ stmw r29, 0xc(r1) -/* 0000B3D0 00018160 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0000B3D4 00018164 3F E0 00 00 */ lis r31, _.tmp_9.10997@ha -/* 0000B3D8 00018168 80 1F 00 00 */ lwz r0, _.tmp_9.10997@l(r31) -/* 0000B3DC 0001816C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000B3E0 00018170 40 82 B4 1C */ bne .L_000067FC -/* 0000B3E4 00018174 3F C0 00 00 */ lis r30, .rodata+0x8B8@ha -/* 0000B3E8 00018178 3F A0 00 00 */ lis r29, name.10996@ha -/* 0000B3EC 0001817C 3B DE 08 B8 */ addi r30, r30, .rodata+0x8B8@l -/* 0000B3F0 00018180 3B BD 00 00 */ addi r29, r29, name.10996@l -/* 0000B3F4 00018184 7F C3 F3 78 */ mr r3, r30 -/* 0000B3F8 00018188 48 00 00 01 */ bl StringHash64__6AttribPCc -/* 0000B3FC 0001818C 90 7D 00 00 */ stw r3, 0x0(r29) -/* 0000B400 00018190 90 9D 00 04 */ stw r4, 0x4(r29) -/* 0000B404 00018194 7F C3 F3 78 */ mr r3, r30 -/* 0000B408 00018198 48 00 00 01 */ bl StringHash32__6AttribPCc -/* 0000B40C 0001819C 38 00 00 01 */ li r0, 0x1 -/* 0000B410 000181A0 93 DD 00 0C */ stw r30, 0xc(r29) -/* 0000B414 000181A4 90 1F 00 00 */ stw r0, _.tmp_9.10997@l(r31) -/* 0000B418 000181A8 90 7D 00 08 */ stw r3, 0x8(r29) -.L_0000B41C: -/* 0000B41C 000181AC 3C 60 00 00 */ lis r3, name.10996@ha -.L_0000B420: -/* 0000B420 000181B0 38 63 00 00 */ addi r3, r3, name.10996@l -/* 0000B424 000181B4 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0000B428 000181B8 7C 08 03 A6 */ mtlr r0 -/* 0000B42C 000181BC BB A1 00 0C */ lmw r29, 0xc(r1) -/* 0000B430 000181C0 38 21 00 18 */ addi r1, r1, 0x18 -/* 0000B434 000181C4 4E 80 00 20 */ blr -.endfn GetName__C16CDActionTrackCop - -# .text:0xB438 | size: 0x2C -.fn GetNext__C16CDActionTrackCop, global -/* 0000B438 000181C8 3D 00 00 00 */ lis r8, .rodata@ha -/* 0000B43C 000181CC 39 20 00 00 */ li r9, 0x0 -/* 0000B440 000181D0 7C 6B 1B 78 */ mr r11, r3 -/* 0000B444 000181D4 39 08 00 00 */ addi r8, r8, .rodata@l -/* 0000B448 000181D8 39 40 00 00 */ li r10, 0x0 -/* 0000B44C 000181DC 38 00 00 00 */ li r0, 0x0 -/* 0000B450 000181E0 91 2B 00 00 */ stw r9, 0x0(r11) -/* 0000B454 000181E4 91 4B 00 04 */ stw r10, 0x4(r11) -/* 0000B458 000181E8 90 0B 00 08 */ stw r0, 0x8(r11) -/* 0000B45C 000181EC 91 0B 00 0C */ stw r8, 0xc(r11) -.L_0000B460: -/* 0000B460 000181F0 4E 80 00 20 */ blr -.endfn GetNext__C16CDActionTrackCop - -# .text:0xB464 | size: 0x24 -.fn Attach__16CDActionTrackCopPQ33UTL3COM8IUnknown, global -/* 0000B464 000181F4 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0000B468 000181F8 7C 08 02 A6 */ mflr r0 -/* 0000B46C 000181FC 90 01 00 0C */ stw r0, 0xc(r1) -/* 0000B470 00018200 80 63 00 44 */ lwz r3, 0x44(r3) -/* 0000B474 00018204 48 00 00 01 */ bl Attach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -/* 0000B478 00018208 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0000B47C 0001820C 7C 08 03 A6 */ mtlr r0 -.L_0000B480: -/* 0000B480 00018210 38 21 00 08 */ addi r1, r1, 0x8 -/* 0000B484 00018214 4E 80 00 20 */ blr -.endfn Attach__16CDActionTrackCopPQ33UTL3COM8IUnknown - -# .text:0xB488 | size: 0x24 -.fn Detach__16CDActionTrackCopPQ33UTL3COM8IUnknown, global -/* 0000B488 00018218 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0000B48C 0001821C 7C 08 02 A6 */ mflr r0 -/* 0000B490 00018220 90 01 00 0C */ stw r0, 0xc(r1) -/* 0000B494 00018224 80 63 00 44 */ lwz r3, 0x44(r3) -/* 0000B498 00018228 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -/* 0000B49C 0001822C 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0000B4A0 00018230 7C 08 03 A6 */ mtlr r0 -/* 0000B4A4 00018234 38 21 00 08 */ addi r1, r1, 0x8 -/* 0000B4A8 00018238 4E 80 00 20 */ blr -.endfn Detach__16CDActionTrackCopPQ33UTL3COM8IUnknown - -# .text:0xB4AC | size: 0x24 -.fn IsAttached__C16CDActionTrackCopPCQ33UTL3COM8IUnknown, global -/* 0000B4AC 0001823C 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0000B4B0 00018240 7C 08 02 A6 */ mflr r0 -/* 0000B4B4 00018244 90 01 00 0C */ stw r0, 0xc(r1) -/* 0000B4B8 00018248 80 63 00 44 */ lwz r3, 0x44(r3) -/* 0000B4BC 0001824C 48 00 00 01 */ bl IsAttached__CQ23Sim11AttachmentsPCQ33UTL3COM8IUnknown -/* 0000B4C0 00018250 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0000B4C4 00018254 7C 08 03 A6 */ mtlr r0 -/* 0000B4C8 00018258 38 21 00 08 */ addi r1, r1, 0x8 -/* 0000B4CC 0001825C 4E 80 00 20 */ blr -.endfn IsAttached__C16CDActionTrackCopPCQ33UTL3COM8IUnknown - -# .text:0xB4D0 | size: 0x8 -.fn GetAttachments__C16CDActionTrackCop, global -/* 0000B4D0 00018260 80 63 00 44 */ lwz r3, 0x44(r3) -/* 0000B4D4 00018264 4E 80 00 20 */ blr -.endfn GetAttachments__C16CDActionTrackCop - -# .text:0xB4D8 | size: 0x11C -.fn Construct__16CDActionTrackCopPQ28CameraAI8Director, global -/* 0000B4D8 00018268 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 0000B4DC 0001826C 7C 08 02 A6 */ mflr r0 -/* 0000B4E0 00018270 BF 61 00 0C */ stmw r27, 0xc(r1) -/* 0000B4E4 00018274 90 01 00 24 */ stw r0, 0x24(r1) -/* 0000B4E8 00018278 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@ha -/* 0000B4EC 0001827C 7C 7B 1B 78 */ mr r27, r3 -/* 0000B4F0 00018280 39 29 00 00 */ addi r9, r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@l -/* 0000B4F4 00018284 3B 80 00 00 */ li r28, 0x0 -/* 0000B4F8 00018288 83 E9 00 30 */ lwz r31, 0x30(r9) -/* 0000B4FC 0001828C 7D 3D 4B 78 */ mr r29, r9 -/* 0000B500 00018290 80 1D 00 38 */ lwz r0, 0x38(r29) -/* 0000B504 00018294 81 3D 00 30 */ lwz r9, 0x30(r29) -/* 0000B508 00018298 54 00 10 3A */ slwi r0, r0, 2 -/* 0000B50C 0001829C 7D 29 02 14 */ add r9, r9, r0 -/* 0000B510 000182A0 7C 1F 48 00 */ cmpw r31, r9 -/* 0000B514 000182A4 41 82 B5 4C */ beq .L_00006A60 -/* 0000B518 000182A8 83 DF 00 00 */ lwz r30, 0x0(r31) -/* 0000B51C 000182AC 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000B520 000182B0 80 09 00 64 */ lwz r0, 0x64(r9) -/* 0000B524 000182B4 A8 69 00 60 */ lha r3, 0x60(r9) -/* 0000B528 000182B8 7C 08 03 A6 */ mtlr r0 -/* 0000B52C 000182BC 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000B530 000182C0 4E 80 00 21 */ blrl -/* 0000B534 000182C4 80 1B 00 04 */ lwz r0, 0x4(r27) -/* 0000B538 000182C8 7C 03 00 00 */ cmpw r3, r0 -/* 0000B53C 000182CC 41 82 B5 48 */ beq .L_00006A84 -/* 0000B540 000182D0 3B FF 00 04 */ addi r31, r31, 0x4 -/* 0000B544 000182D4 48 00 B5 00 */ b .L_00016A44 -/* 0000B548 000182D8 7F DC F3 78 */ mr r28, r30 -/* 0000B54C 000182DC 2C 1C 00 00 */ cmpwi r28, 0x0 -/* 0000B550 000182E0 41 82 B5 DC */ beq TotaledStart__Q28CameraAI8Director -/* 0000B554 000182E4 81 3C 00 04 */ lwz r9, 0x4(r28) -/* 0000B558 000182E8 A8 69 00 28 */ lha r3, 0x28(r9) -.L_0000B55C: -/* 0000B55C 000182EC 80 09 00 2C */ lwz r0, 0x2c(r9) -/* 0000B560 000182F0 7C 7C 1A 14 */ add r3, r28, r3 -.L_0000B564: -/* 0000B564 000182F4 7C 08 03 A6 */ mtlr r0 -/* 0000B568 000182F8 4E 80 00 21 */ blrl -/* 0000B56C 000182FC 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000B570 00018300 41 82 B5 DC */ beq .L_00006B4C -/* 0000B574 00018304 81 3C 00 04 */ lwz r9, 0x4(r28) -/* 0000B578 00018308 A8 69 00 10 */ lha r3, 0x10(r9) -.L_0000B57C: -/* 0000B57C 0001830C 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000B580 00018310 7C 7C 1A 14 */ add r3, r28, r3 -/* 0000B584 00018314 7C 08 03 A6 */ mtlr r0 -/* 0000B588 00018318 4E 80 00 21 */ blrl -/* 0000B58C 0001831C 7C 6B 1B 79 */ mr. r11, r3 -/* 0000B590 00018320 41 82 B5 DC */ beq .L_00006B6C -/* 0000B594 00018324 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000B598 00018328 A8 69 00 E8 */ lha r3, 0xe8(r9) -/* 0000B59C 0001832C 80 09 00 EC */ lwz r0, 0xec(r9) -/* 0000B5A0 00018330 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000B5A4 00018334 7C 08 03 A6 */ mtlr r0 -/* 0000B5A8 00018338 4E 80 00 21 */ blrl -/* 0000B5AC 0001833C 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000B5B0 00018340 38 60 00 00 */ li r3, 0x0 -/* 0000B5B4 00018344 41 82 B5 E0 */ beq .L_00006B94 -/* 0000B5B8 00018348 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0000B5BC 0001834C 38 80 00 50 */ li r4, 0x50 -/* 0000B5C0 00018350 38 A0 00 00 */ li r5, 0x0 -/* 0000B5C4 00018354 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0000B5C8 00018358 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 0000B5CC 0001835C 7F 64 DB 78 */ mr r4, r27 -/* 0000B5D0 00018360 7F 85 E3 78 */ mr r5, r28 -/* 0000B5D4 00018364 48 00 B5 F5 */ bl .L_00016BC8 -/* 0000B5D8 00018368 48 00 B5 E0 */ b .L_00016BB8 -/* 0000B5DC 0001836C 38 60 00 00 */ li r3, 0x0 -/* 0000B5E0 00018370 80 01 00 24 */ lwz r0, 0x24(r1) -/* 0000B5E4 00018374 7C 08 03 A6 */ mtlr r0 -/* 0000B5E8 00018378 BB 61 00 0C */ lmw r27, 0xc(r1) -/* 0000B5EC 0001837C 38 21 00 20 */ addi r1, r1, 0x20 -/* 0000B5F0 00018380 4E 80 00 20 */ blr -.endfn Construct__16CDActionTrackCopPQ28CameraAI8Director - -# .text:0xB5F4 | size: 0x434 -.fn __16CDActionTrackCopPQ28CameraAI8DirectorP7IPlayer, global -/* 0000B5F4 00018384 94 21 FF 68 */ stwu r1, -0x98(r1) -/* 0000B5F8 00018388 7C 08 02 A6 */ mflr r0 -.L_0000B5FC: -/* 0000B5FC 0001838C 7D 80 00 26 */ mfcr r12 -/* 0000B600 00018390 BE 81 00 68 */ stmw r20, 0x68(r1) -.L_0000B604: -/* 0000B604 00018394 90 01 00 9C */ stw r0, 0x9c(r1) -/* 0000B608 00018398 91 81 00 64 */ stw r12, 0x64(r1) -/* 0000B60C 0001839C 7C 7F 1B 78 */ mr r31, r3 -/* 0000B610 000183A0 7C 97 23 78 */ mr r23, r4 -/* 0000B614 000183A4 38 80 00 00 */ li r4, 0x0 -/* 0000B618 000183A8 7C B4 2B 78 */ mr r20, r5 -/* 0000B61C 000183AC 3A DF 00 20 */ addi r22, r31, 0x20 -/* 0000B620 000183B0 48 00 00 01 */ bl __Q43UTL3COM6Object6_IListUi -/* 0000B624 000183B4 3F 20 00 00 */ lis r25, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha -/* 0000B628 000183B8 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha -/* 0000B62C 000183BC 3D 60 00 00 */ lis r11, _vt.Q33UTL3COM8IUnknown@ha -/* 0000B630 000183C0 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l -.L_0000B634: -/* 0000B634 000183C4 39 6B 00 00 */ addi r11, r11, _vt.Q33UTL3COM8IUnknown@l -/* 0000B638 000183C8 3C 80 00 00 */ lis r4, _IHandle__11IAttachable@ha -.L_0000B63C: -/* 0000B63C 000183CC 93 FF 00 18 */ stw r31, 0x18(r31) -.L_0000B640: -/* 0000B640 000183D0 91 3F 00 14 */ stw r9, 0x14(r31) -/* 0000B644 000183D4 38 84 00 00 */ addi r4, r4, _IHandle__11IAttachable@l -/* 0000B648 000183D8 91 7F 00 1C */ stw r11, 0x1c(r31) -/* 0000B64C 000183DC 7F E3 FB 78 */ mr r3, r31 -/* 0000B650 000183E0 38 BF 00 18 */ addi r5, r31, 0x18 -/* 0000B654 000183E4 3B B9 00 00 */ addi r29, r25, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l -/* 0000B658 000183E8 48 00 00 01 */ bl Add__Q43UTL3COM6Object6_IListPvPQ33UTL3COM8IUnknown -.L_0000B65C: -/* 0000B65C 000183EC 3D 20 00 00 */ lis r9, _vt.11IAttachable@ha -/* 0000B660 000183F0 92 C1 00 58 */ stw r22, 0x58(r1) -/* 0000B664 000183F4 39 29 00 00 */ addi r9, r9, _vt.11IAttachable@l -/* 0000B668 000183F8 3A A1 00 58 */ addi r21, r1, 0x58 -/* 0000B66C 000183FC 91 3F 00 1C */ stw r9, 0x1c(r31) -/* 0000B670 00018400 3B 41 00 08 */ addi r26, r1, 0x8 -/* 0000B674 00018404 80 9D 00 08 */ lwz r4, 0x8(r29) -/* 0000B678 00018408 80 1D 00 04 */ lwz r0, 0x4(r29) -/* 0000B67C 0001840C 7C 04 00 40 */ cmplw r4, r0 -/* 0000B680 00018410 41 80 B7 60 */ blt .L_00006DE0 -/* 0000B684 00018414 81 3D 00 0C */ lwz r9, 0xc(r29) -/* 0000B688 00018418 38 84 00 01 */ addi r4, r4, 0x1 -/* 0000B68C 0001841C 80 09 00 24 */ lwz r0, 0x24(r9) -/* 0000B690 00018420 A8 69 00 20 */ lha r3, 0x20(r9) -.L_0000B694: -/* 0000B694 00018424 7C 08 03 A6 */ mtlr r0 -/* 0000B698 00018428 7C 63 EA 14 */ add r3, r3, r29 -.L_0000B69C: -/* 0000B69C 0001842C 4E 80 00 21 */ blrl -/* 0000B6A0 00018430 80 1D 00 04 */ lwz r0, 0x4(r29) -/* 0000B6A4 00018434 7C 7E 1B 78 */ mr r30, r3 -/* 0000B6A8 00018438 7C 1E 00 40 */ cmplw r30, r0 -/* 0000B6AC 0001843C 40 81 B7 60 */ ble .L_00006E0C -/* 0000B6B0 00018440 81 3D 00 0C */ lwz r9, 0xc(r29) -/* 0000B6B4 00018444 7F C4 F3 78 */ mr r4, r30 -/* 0000B6B8 00018448 80 09 00 34 */ lwz r0, 0x34(r9) -/* 0000B6BC 0001844C A8 69 00 30 */ lha r3, 0x30(r9) -/* 0000B6C0 00018450 7C 08 03 A6 */ mtlr r0 -/* 0000B6C4 00018454 7C 63 EA 14 */ add r3, r3, r29 -/* 0000B6C8 00018458 4E 80 00 21 */ blrl -.L_0000B6CC: -/* 0000B6CC 0001845C 81 3D 00 0C */ lwz r9, 0xc(r29) -/* 0000B6D0 00018460 7F C4 F3 78 */ mr r4, r30 -/* 0000B6D4 00018464 38 A0 00 10 */ li r5, 0x10 -/* 0000B6D8 00018468 83 99 00 00 */ lwz r28, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r25) -/* 0000B6DC 0001846C A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000B6E0 00018470 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000B6E4 00018474 7C 63 EA 14 */ add r3, r3, r29 -/* 0000B6E8 00018478 83 7D 00 08 */ lwz r27, 0x8(r29) -.L_0000B6EC: -/* 0000B6EC 0001847C 7C 08 03 A6 */ mtlr r0 -/* 0000B6F0 00018480 83 1D 00 04 */ lwz r24, 0x4(r29) -/* 0000B6F4 00018484 4E 80 00 21 */ blrl -/* 0000B6F8 00018488 93 DD 00 04 */ stw r30, 0x4(r29) -/* 0000B6FC 0001848C 7C 1C 18 00 */ cmpw r28, r3 -/* 0000B700 00018490 90 79 00 00 */ stw r3, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r25) -/* 0000B704 00018494 41 82 B7 60 */ beq .L_00006E64 -/* 0000B708 00018498 38 00 00 00 */ li r0, 0x0 -/* 0000B70C 0001849C 3B C0 00 00 */ li r30, 0x0 -.L_0000B710: -/* 0000B710 000184A0 90 1D 00 08 */ stw r0, 0x8(r29) -/* 0000B714 000184A4 7C 1E D8 00 */ cmpw r30, r27 -/* 0000B718 000184A8 2E 1C 00 00 */ cmpwi cr4, r28, 0x0 -/* 0000B71C 000184AC 40 80 B7 3C */ bge FindDirector__FUi -/* 0000B720 000184B0 57 C4 10 3A */ slwi r4, r30, 2 -/* 0000B724 000184B4 7F A3 EB 78 */ mr r3, r29 -/* 0000B728 000184B8 7C 9C 22 14 */ add r4, r28, r4 -/* 0000B72C 000184BC 3B DE 00 01 */ addi r30, r30, 0x1 -/* 0000B730 000184C0 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZP14ITrafficCenteri16RCP14ITrafficCenter -/* 0000B734 000184C4 7C 1E D8 00 */ cmpw r30, r27 -/* 0000B738 000184C8 41 80 B7 20 */ blt FindDirector__FUi -/* 0000B73C 000184CC 41 92 B7 60 */ beq cr4, .L_00006E9C -/* 0000B740 000184D0 81 3D 00 0C */ lwz r9, 0xc(r29) -/* 0000B744 000184D4 7F 84 E3 78 */ mr r4, r28 -/* 0000B748 000184D8 7F 05 C3 78 */ mr r5, r24 -/* 0000B74C 000184DC A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000B750 000184E0 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0000B754 000184E4 7C 7D 1A 14 */ add r3, r29, r3 -/* 0000B758 000184E8 7C 08 03 A6 */ mtlr r0 -/* 0000B75C 000184EC 4E 80 00 21 */ blrl -/* 0000B760 000184F0 81 3D 00 08 */ lwz r9, 0x8(r29) -/* 0000B764 000184F4 81 7D 00 00 */ lwz r11, 0x0(r29) -/* 0000B768 000184F8 55 29 10 3A */ slwi r9, r9, 2 -/* 0000B76C 000184FC 7C 09 5A 14 */ add r0, r9, r11 -/* 0000B770 00018500 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000B774 00018504 41 82 B7 80 */ beq .L_00006EF4 -.L_0000B778: -/* 0000B778 00018508 80 15 00 00 */ lwz r0, 0x0(r21) -/* 0000B77C 0001850C 7C 09 59 2E */ stwx r0, r9, r11 -/* 0000B780 00018510 81 3D 00 08 */ lwz r9, 0x8(r29) -.L_0000B784: -/* 0000B784 00018514 3D 60 00 00 */ lis r11, _vt.14ITrafficCenter@ha -/* 0000B788 00018518 39 6B 00 00 */ addi r11, r11, _vt.14ITrafficCenter@l -/* 0000B78C 0001851C 3D 40 00 00 */ lis r10, _vt.16CDActionTrackCop.11IAttachable@ha -/* 0000B790 00018520 39 29 00 01 */ addi r9, r9, 0x1 -/* 0000B794 00018524 3D 00 00 00 */ lis r8, _vt.16CDActionTrackCop.14ITrafficCenter@ha -/* 0000B798 00018528 91 3D 00 08 */ stw r9, 0x8(r29) -/* 0000B79C 0001852C 3C E0 00 00 */ lis r7, _vt.16CDActionTrackCop@ha -/* 0000B7A0 00018530 91 76 00 04 */ stw r11, 0x4(r22) -/* 0000B7A4 00018534 39 4A 00 00 */ addi r10, r10, _vt.16CDActionTrackCop.11IAttachable@l -/* 0000B7A8 00018538 39 08 00 00 */ addi r8, r8, _vt.16CDActionTrackCop.14ITrafficCenter@l -/* 0000B7AC 0001853C 38 E7 00 00 */ addi r7, r7, _vt.16CDActionTrackCop@l -/* 0000B7B0 00018540 91 5F 00 1C */ stw r10, 0x1c(r31) -/* 0000B7B4 00018544 38 80 00 00 */ li r4, 0x0 -/* 0000B7B8 00018548 91 1F 00 24 */ stw r8, 0x24(r31) -/* 0000B7BC 0001854C 38 7F 00 30 */ addi r3, r31, 0x30 -/* 0000B7C0 00018550 90 FF 00 14 */ stw r7, 0x14(r31) -/* 0000B7C4 00018554 3B 80 00 00 */ li r28, 0x0 -/* 0000B7C8 00018558 48 00 00 01 */ bl __Q29WorldConn9ReferenceUi -/* 0000B7CC 0001855C 3B 7F 00 18 */ addi r27, r31, 0x18 -/* 0000B7D0 00018560 92 9F 00 40 */ stw r20, 0x40(r31) -/* 0000B7D4 00018564 3F A0 00 00 */ lis r29, gFastMem@ha -/* 0000B7D8 00018568 93 9F 00 48 */ stw r28, 0x48(r31) -/* 0000B7DC 0001856C 3B BD 00 00 */ addi r29, r29, gFastMem@l -/* 0000B7E0 00018570 38 80 00 10 */ li r4, 0x10 -/* 0000B7E4 00018574 38 A0 00 00 */ li r5, 0x0 -/* 0000B7E8 00018578 80 17 00 04 */ lwz r0, 0x4(r23) -/* 0000B7EC 0001857C 7F A3 EB 78 */ mr r3, r29 -/* 0000B7F0 00018580 3B 20 00 01 */ li r25, 0x1 -/* 0000B7F4 00018584 90 1F 00 4C */ stw r0, 0x4c(r31) -/* 0000B7F8 00018588 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 0000B7FC 0001858C 7C 7E 1B 78 */ mr r30, r3 -/* 0000B800 00018590 3D 20 00 00 */ lis r9, _vt.Q23Sim11Attachments@ha -/* 0000B804 00018594 39 29 00 00 */ addi r9, r9, _vt.Q23Sim11Attachments@l -/* 0000B808 00018598 93 9E 00 04 */ stw r28, 0x4(r30) -/* 0000B80C 0001859C 38 A0 00 00 */ li r5, 0x0 -/* 0000B810 000185A0 91 3E 00 0C */ stw r9, 0xc(r30) -/* 0000B814 000185A4 38 80 00 0C */ li r4, 0xc -/* 0000B818 000185A8 7F A3 EB 78 */ mr r3, r29 -/* 0000B81C 000185AC 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 0000B820 000185B0 7C 69 1B 78 */ mr r9, r3 -/* 0000B824 000185B4 91 29 00 00 */ stw r9, 0x0(r9) -/* 0000B828 000185B8 7F C3 F3 78 */ mr r3, r30 -/* 0000B82C 000185BC 91 29 00 04 */ stw r9, 0x4(r9) -/* 0000B830 000185C0 91 3E 00 04 */ stw r9, 0x4(r30) -/* 0000B834 000185C4 93 7E 00 08 */ stw r27, 0x8(r30) -/* 0000B838 000185C8 93 DF 00 44 */ stw r30, 0x44(r31) -/* 0000B83C 000185CC 80 9F 00 40 */ lwz r4, 0x40(r31) -/* 0000B840 000185D0 48 00 00 01 */ bl Attach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -/* 0000B844 000185D4 7E E3 BB 78 */ mr r3, r23 -/* 0000B848 000185D8 48 00 60 85 */ bl .L_000118CC -/* 0000B84C 000185DC 7C 6B 1B 79 */ mr. r11, r3 -/* 0000B850 000185E0 41 82 B8 70 */ beq .L_000070C0 -/* 0000B854 000185E4 81 2B 00 08 */ lwz r9, 0x8(r11) -/* 0000B858 000185E8 A8 69 00 58 */ lha r3, 0x58(r9) -/* 0000B85C 000185EC 80 09 00 5C */ lwz r0, 0x5c(r9) -/* 0000B860 000185F0 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000B864 000185F4 7C 08 03 A6 */ mtlr r0 -/* 0000B868 000185F8 4E 80 00 21 */ blrl -/* 0000B86C 000185FC 7C 79 1B 78 */ mr r25, r3 -/* 0000B870 00018600 38 60 01 24 */ li r3, 0x124 -/* 0000B874 00018604 48 00 00 01 */ bl __builtin_vec_new -/* 0000B878 00018608 38 80 00 00 */ li r4, 0x0 -/* 0000B87C 0001860C 48 00 10 51 */ bl .L_0000C8CC -/* 0000B880 00018610 90 7F 00 2C */ stw r3, 0x2c(r31) -/* 0000B884 00018614 7F E3 FB 78 */ mr r3, r31 -/* 0000B888 00018618 48 00 BD A1 */ bl .L_00017628 -/* 0000B88C 0001861C 80 7F 00 34 */ lwz r3, 0x34(r31) -/* 0000B890 00018620 38 00 00 01 */ li r0, 0x1 -/* 0000B894 00018624 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000B898 00018628 40 82 B8 A0 */ bne .L_00007138 -.L_0000B89C: -/* 0000B89C 0001862C 38 00 00 00 */ li r0, 0x0 -/* 0000B8A0 00018630 2C 00 00 00 */ cmpwi r0, 0x0 -.L_0000B8A4: -/* 0000B8A4 00018634 41 82 B9 CC */ beq .L_00007270 -/* 0000B8A8 00018638 38 81 00 18 */ addi r4, r1, 0x18 -/* 0000B8AC 0001863C 48 00 00 01 */ bl PSMTX44Copy -/* 0000B8B0 00018640 80 7F 00 48 */ lwz r3, 0x48(r31) -/* 0000B8B4 00018644 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000B8B8 00018648 41 82 B9 B0 */ beq .L_00007268 -/* 0000B8BC 0001864C 80 63 00 00 */ lwz r3, 0x0(r3) -/* 0000B8C0 00018650 3C 80 00 00 */ lis r4, _IHandle__14ICollisionBody@ha -/* 0000B8C4 00018654 38 84 00 00 */ addi r4, r4, _IHandle__14ICollisionBody@l -/* 0000B8C8 00018658 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000B8CC 0001865C 7C 7D 1B 79 */ mr. r29, r3 -/* 0000B8D0 00018660 38 00 00 01 */ li r0, 0x1 -/* 0000B8D4 00018664 40 82 B8 DC */ bne .L_000071B0 -/* 0000B8D8 00018668 38 00 00 00 */ li r0, 0x0 -.L_0000B8DC: -/* 0000B8DC 0001866C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000B8E0 00018670 41 82 B9 B0 */ beq .L_00007290 -/* 0000B8E4 00018674 81 7F 00 48 */ lwz r11, 0x48(r31) -/* 0000B8E8 00018678 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000B8EC 0001867C 80 09 00 1C */ lwz r0, 0x1c(r9) -.L_0000B8F0: -/* 0000B8F0 00018680 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000B8F4 00018684 7C 08 03 A6 */ mtlr r0 -/* 0000B8F8 00018688 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000B8FC 0001868C 4E 80 00 21 */ blrl -.L_0000B900: -/* 0000B900 00018690 81 23 00 04 */ lwz r9, 0x4(r3) -/* 0000B904 00018694 A8 09 00 A8 */ lha r0, 0xa8(r9) -/* 0000B908 00018698 81 29 00 AC */ lwz r9, 0xac(r9) -/* 0000B90C 0001869C 7C 63 02 14 */ add r3, r3, r0 -/* 0000B910 000186A0 7D 28 03 A6 */ mtlr r9 -/* 0000B914 000186A4 4E 80 00 21 */ blrl -/* 0000B918 000186A8 81 3D 00 04 */ lwz r9, 0x4(r29) -.L_0000B91C: -/* 0000B91C 000186AC 7C 7E 1B 78 */ mr r30, r3 -/* 0000B920 000186B0 80 09 00 84 */ lwz r0, 0x84(r9) -/* 0000B924 000186B4 A8 69 00 80 */ lha r3, 0x80(r9) -/* 0000B928 000186B8 7C 08 03 A6 */ mtlr r0 -/* 0000B92C 000186BC 7C 7D 1A 14 */ add r3, r29, r3 -/* 0000B930 000186C0 4E 80 00 21 */ blrl -/* 0000B934 000186C4 C1 A3 00 00 */ lfs f13, 0x0(r3) -/* 0000B938 000186C8 7F 44 D3 78 */ mr r4, r26 -/* 0000B93C 000186CC 38 A0 00 00 */ li r5, 0x0 -/* 0000B940 000186D0 D1 A1 00 08 */ stfs f13, 0x8(r1) -/* 0000B944 000186D4 C0 03 00 04 */ lfs f0, 0x4(r3) -/* 0000B948 000186D8 D0 01 00 0C */ stfs f0, 0xc(r1) -/* 0000B94C 000186DC C1 A3 00 08 */ lfs f13, 0x8(r3) -/* 0000B950 000186E0 D1 BA 00 08 */ stfs f13, 0x8(r26) -/* 0000B954 000186E4 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000B958 000186E8 80 09 01 4C */ lwz r0, 0x14c(r9) -/* 0000B95C 000186EC A8 69 01 48 */ lha r3, 0x148(r9) -/* 0000B960 000186F0 7C 08 03 A6 */ mtlr r0 -/* 0000B964 000186F4 7C 7E 1A 14 */ add r3, r30, r3 -.L_0000B968: -/* 0000B968 000186F8 4E 80 00 21 */ blrl -/* 0000B96C 000186FC 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000B970 00018700 A8 69 00 48 */ lha r3, 0x48(r9) -.L_0000B974: -/* 0000B974 00018704 80 09 00 4C */ lwz r0, 0x4c(r9) -/* 0000B978 00018708 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000B97C 0001870C 7C 08 03 A6 */ mtlr r0 -/* 0000B980 00018710 4E 80 00 21 */ blrl -/* 0000B984 00018714 7C 64 1B 78 */ mr r4, r3 -/* 0000B988 00018718 7F 45 D3 78 */ mr r5, r26 -/* 0000B98C 0001871C 7F 43 D3 78 */ mr r3, r26 -/* 0000B990 00018720 48 00 00 01 */ bl VU0_v3add__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 -/* 0000B994 00018724 C0 01 00 08 */ lfs f0, 0x8(r1) -/* 0000B998 00018728 C1 BA 00 08 */ lfs f13, 0x8(r26) -/* 0000B99C 0001872C C1 81 00 0C */ lfs f12, 0xc(r1) -/* 0000B9A0 00018730 FC 00 00 50 */ fneg f0, f0 -/* 0000B9A4 00018734 D1 A1 00 48 */ stfs f13, 0x48(r1) -/* 0000B9A8 00018738 D0 01 00 4C */ stfs f0, 0x4c(r1) -.L_0000B9AC: -/* 0000B9AC 0001873C D1 81 00 50 */ stfs f12, 0x50(r1) -/* 0000B9B0 00018740 3D 20 00 00 */ lis r9, .rodata+0x8C4@ha -/* 0000B9B4 00018744 80 7F 00 2C */ lwz r3, 0x2c(r31) -/* 0000B9B8 00018748 C0 29 08 C4 */ lfs f1, .rodata+0x8C4@l(r9) -/* 0000B9BC 0001874C 38 81 00 18 */ addi r4, r1, 0x18 -/* 0000B9C0 00018750 80 BF 00 38 */ lwz r5, 0x38(r31) -/* 0000B9C4 00018754 80 DF 00 3C */ lwz r6, 0x3c(r31) -/* 0000B9C8 00018758 48 00 17 65 */ bl .L_0000D12C -/* 0000B9CC 0001875C 38 60 02 50 */ li r3, 0x250 -/* 0000B9D0 00018760 48 00 00 01 */ bl __builtin_vec_new -/* 0000B9D4 00018764 80 97 00 04 */ lwz r4, 0x4(r23) -/* 0000B9D8 00018768 38 C0 00 00 */ li r6, 0x0 -/* 0000B9DC 0001876C 80 BF 00 2C */ lwz r5, 0x2c(r31) -.L_0000B9E0: -/* 0000B9E0 00018770 48 00 53 8D */ bl .L_00010D6C -/* 0000B9E4 00018774 90 7F 00 28 */ stw r3, 0x28(r31) -/* 0000B9E8 00018778 81 23 00 08 */ lwz r9, 0x8(r3) -/* 0000B9EC 0001877C A8 09 00 70 */ lha r0, 0x70(r9) -/* 0000B9F0 00018780 81 29 00 74 */ lwz r9, 0x74(r9) -/* 0000B9F4 00018784 7C 63 02 14 */ add r3, r3, r0 -/* 0000B9F8 00018788 7D 28 03 A6 */ mtlr r9 -/* 0000B9FC 0001878C 4E 80 00 21 */ blrl -/* 0000BA00 00018790 81 3F 00 28 */ lwz r9, 0x28(r31) -.L_0000BA04: -/* 0000BA04 00018794 7F E3 FB 78 */ mr r3, r31 -.L_0000BA08: -/* 0000BA08 00018798 93 29 02 4C */ stw r25, 0x24c(r9) -/* 0000BA0C 0001879C 80 01 00 9C */ lwz r0, 0x9c(r1) -/* 0000BA10 000187A0 81 81 00 64 */ lwz r12, 0x64(r1) -/* 0000BA14 000187A4 7C 08 03 A6 */ mtlr r0 -/* 0000BA18 000187A8 BA 81 00 68 */ lmw r20, 0x68(r1) -/* 0000BA1C 000187AC 7D 80 81 20 */ mtcrf 8, r12 -/* 0000BA20 000187B0 38 21 00 98 */ addi r1, r1, 0x98 -/* 0000BA24 000187B4 4E 80 00 20 */ blr -.endfn __16CDActionTrackCopPQ28CameraAI8DirectorP7IPlayer - -# .text:0xBA28 | size: 0x258 -.fn _._16CDActionTrackCop, global -/* 0000BA28 000187B8 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 0000BA2C 000187BC 7C 08 02 A6 */ mflr r0 -/* 0000BA30 000187C0 BF 81 00 10 */ stmw r28, 0x10(r1) -/* 0000BA34 000187C4 90 01 00 24 */ stw r0, 0x24(r1) -.L_0000BA38: -/* 0000BA38 000187C8 7C 7E 1B 78 */ mr r30, r3 -/* 0000BA3C 000187CC 3D 20 00 00 */ lis r9, _vt.16CDActionTrackCop.11IAttachable@ha -/* 0000BA40 000187D0 80 1E 00 40 */ lwz r0, 0x40(r30) -/* 0000BA44 000187D4 3D 60 00 00 */ lis r11, _vt.16CDActionTrackCop.14ITrafficCenter@ha -/* 0000BA48 000187D8 3D 40 00 00 */ lis r10, _vt.16CDActionTrackCop@ha -/* 0000BA4C 000187DC 39 29 00 00 */ addi r9, r9, _vt.16CDActionTrackCop.11IAttachable@l -/* 0000BA50 000187E0 39 6B 00 00 */ addi r11, r11, _vt.16CDActionTrackCop.14ITrafficCenter@l -/* 0000BA54 000187E4 39 4A 00 00 */ addi r10, r10, _vt.16CDActionTrackCop@l -/* 0000BA58 000187E8 3B FE 00 20 */ addi r31, r30, 0x20 -/* 0000BA5C 000187EC 7C 9C 23 78 */ mr r28, r4 -/* 0000BA60 000187F0 91 3E 00 1C */ stw r9, 0x1c(r30) -/* 0000BA64 000187F4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000BA68 000187F8 91 7E 00 24 */ stw r11, 0x24(r30) -/* 0000BA6C 000187FC 91 5E 00 14 */ stw r10, 0x14(r30) -/* 0000BA70 00018800 41 82 BA 80 */ beq .L_000074F0 -/* 0000BA74 00018804 80 7E 00 44 */ lwz r3, 0x44(r30) -.L_0000BA78: -/* 0000BA78 00018808 7C 04 03 78 */ mr r4, r0 -/* 0000BA7C 0001880C 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -.L_0000BA80: -/* 0000BA80 00018810 80 9E 00 48 */ lwz r4, 0x48(r30) -/* 0000BA84 00018814 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0000BA88 00018818 41 82 BA 94 */ beq .L_0000751C -/* 0000BA8C 0001881C 80 7E 00 44 */ lwz r3, 0x44(r30) -/* 0000BA90 00018820 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -/* 0000BA94 00018824 81 7E 00 28 */ lwz r11, 0x28(r30) -/* 0000BA98 00018828 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000BA9C 0001882C 41 82 BA BC */ beq .L_00007558 -/* 0000BAA0 00018830 81 2B 00 08 */ lwz r9, 0x8(r11) -.L_0000BAA4: -/* 0000BAA4 00018834 38 80 00 03 */ li r4, 0x3 -/* 0000BAA8 00018838 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000BAAC 0001883C 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000BAB0 00018840 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000BAB4 00018844 7C 08 03 A6 */ mtlr r0 -/* 0000BAB8 00018848 4E 80 00 21 */ blrl -/* 0000BABC 0001884C 80 7E 00 2C */ lwz r3, 0x2c(r30) -/* 0000BAC0 00018850 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000BAC4 00018854 41 82 BA D0 */ beq .L_00007594 -/* 0000BAC8 00018858 38 80 00 03 */ li r4, 0x3 -/* 0000BACC 0001885C 48 00 13 6D */ bl .L_0000CE38 -.L_0000BAD0: -/* 0000BAD0 00018860 81 7E 00 44 */ lwz r11, 0x44(r30) -/* 0000BAD4 00018864 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000BAD8 00018868 41 82 BA F8 */ beq .L_000075D0 -/* 0000BADC 0001886C 81 2B 00 0C */ lwz r9, 0xc(r11) -/* 0000BAE0 00018870 38 80 00 03 */ li r4, 0x3 -/* 0000BAE4 00018874 A8 69 00 08 */ lha r3, 0x8(r9) -.L_0000BAE8: -/* 0000BAE8 00018878 80 09 00 0C */ lwz r0, 0xc(r9) -/* 0000BAEC 0001887C 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000BAF0 00018880 7C 08 03 A6 */ mtlr r0 -/* 0000BAF4 00018884 4E 80 00 21 */ blrl -/* 0000BAF8 00018888 38 7E 00 30 */ addi r3, r30, 0x30 -/* 0000BAFC 0001888C 38 80 00 02 */ li r4, 0x2 -/* 0000BB00 00018890 48 00 00 01 */ bl _._Q29WorldConn9Reference -.L_0000BB04: -/* 0000BB04 00018894 3D 20 00 00 */ lis r9, _vt.14ITrafficCenter@ha -/* 0000BB08 00018898 3D 40 00 00 */ lis r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha -/* 0000BB0C 0001889C 39 29 00 00 */ addi r9, r9, _vt.14ITrafficCenter@l -/* 0000BB10 000188A0 39 6A 00 00 */ addi r11, r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l -.L_0000BB14: -/* 0000BB14 000188A4 91 3E 00 24 */ stw r9, 0x24(r30) -/* 0000BB18 000188A8 3B A1 00 08 */ addi r29, r1, 0x8 -/* 0000BB1C 000188AC 93 E1 00 08 */ stw r31, 0x8(r1) -/* 0000BB20 000188B0 7F A5 EB 78 */ mr r5, r29 -/* 0000BB24 000188B4 80 6A 00 00 */ lwz r3, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r10) -/* 0000BB28 000188B8 80 0B 00 08 */ lwz r0, 0x8(r11) -/* 0000BB2C 000188BC 54 00 10 3A */ slwi r0, r0, 2 -/* 0000BB30 000188C0 7F E3 02 14 */ add r31, r3, r0 -/* 0000BB34 000188C4 7F E4 FB 78 */ mr r4, r31 -/* 0000BB38 000188C8 48 00 00 01 */ bl find__H2ZPP14ITrafficCenterZP14ITrafficCenter_4_STLX01X01RCX11_X01 -/* 0000BB3C 000188CC 7C 03 F8 00 */ cmpw r3, r31 -/* 0000BB40 000188D0 40 82 BB 50 */ bne .L_00007690 -/* 0000BB44 000188D4 7F E3 FB 78 */ mr r3, r31 -/* 0000BB48 000188D8 38 9E 00 18 */ addi r4, r30, 0x18 -/* 0000BB4C 000188DC 48 00 BB 84 */ b .L_000176D0 -/* 0000BB50 000188E0 39 63 00 04 */ addi r11, r3, 0x4 -/* 0000BB54 000188E4 38 9E 00 18 */ addi r4, r30, 0x18 -/* 0000BB58 000188E8 7C 0B F8 00 */ cmpw r11, r31 -/* 0000BB5C 000188EC 41 82 BB 84 */ beq .L_000076E0 -/* 0000BB60 000188F0 81 2B 00 00 */ lwz r9, 0x0(r11) -/* 0000BB64 000188F4 80 1D 00 00 */ lwz r0, 0x0(r29) -.L_0000BB68: -/* 0000BB68 000188F8 7C 09 00 00 */ cmpw r9, r0 -/* 0000BB6C 000188FC 41 82 BB 78 */ beq .L_000076E4 -/* 0000BB70 00018900 91 23 00 00 */ stw r9, 0x0(r3) -/* 0000BB74 00018904 38 63 00 04 */ addi r3, r3, 0x4 -/* 0000BB78 00018908 39 6B 00 04 */ addi r11, r11, 0x4 -/* 0000BB7C 0001890C 7C 0B F8 00 */ cmpw r11, r31 -/* 0000BB80 00018910 40 82 BB 60 */ bne .L_000076E0 -/* 0000BB84 00018914 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha -/* 0000BB88 00018918 38 A9 00 00 */ addi r5, r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l -/* 0000BB8C 0001891C 81 49 00 00 */ lwz r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r9) -/* 0000BB90 00018920 81 05 00 08 */ lwz r8, 0x8(r5) -/* 0000BB94 00018924 55 00 10 3A */ slwi r0, r8, 2 -/* 0000BB98 00018928 7D 6A 02 14 */ add r11, r10, r0 -/* 0000BB9C 0001892C 7C 03 58 00 */ cmpw r3, r11 -/* 0000BBA0 00018930 41 82 BC 18 */ beq .L_000077B8 -/* 0000BBA4 00018934 7D 23 58 50 */ subf r9, r3, r11 -/* 0000BBA8 00018938 7C 0A 18 50 */ subf r0, r10, r3 -.L_0000BBAC: -/* 0000BBAC 0001893C 7D 3F 16 70 */ srawi r31, r9, 2 -/* 0000BBB0 00018940 7C 06 16 70 */ srawi r6, r0, 2 -/* 0000BBB4 00018944 7D 09 43 78 */ mr r9, r8 -/* 0000BBB8 00018948 38 63 00 04 */ addi r3, r3, 0x4 -/* 0000BBBC 0001894C 7C 03 58 00 */ cmpw r3, r11 -/* 0000BBC0 00018950 40 82 BB B8 */ bne .L_00007778 -/* 0000BBC4 00018954 7C E6 FA 14 */ add r7, r6, r31 -.L_0000BBC8: -/* 0000BBC8 00018958 39 00 00 00 */ li r8, 0x0 -/* 0000BBCC 0001895C 7C E3 3B 78 */ mr r3, r7 -/* 0000BBD0 00018960 7C 03 48 50 */ subf r0, r3, r9 -/* 0000BBD4 00018964 7C 08 00 40 */ cmplw r8, r0 -/* 0000BBD8 00018968 40 80 BC 10 */ bge .L_000077E8 -/* 0000BBDC 0001896C 7C 06 42 14 */ add r0, r6, r8 -/* 0000BBE0 00018970 81 65 00 00 */ lwz r11, 0x0(r5) -/* 0000BBE4 00018974 54 0A 10 3A */ slwi r10, r0, 2 -/* 0000BBE8 00018978 7D 27 42 14 */ add r9, r7, r8 -/* 0000BBEC 0001897C 7C 0A 5A 14 */ add r0, r10, r11 -/* 0000BBF0 00018980 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000BBF4 00018984 41 82 BC 04 */ beq .L_000077F8 -/* 0000BBF8 00018988 55 29 10 3A */ slwi r9, r9, 2 -/* 0000BBFC 0001898C 7C 09 58 2E */ lwzx r0, r9, r11 -/* 0000BC00 00018990 7C 0A 59 2E */ stwx r0, r10, r11 -/* 0000BC04 00018994 39 08 00 01 */ addi r8, r8, 0x1 -/* 0000BC08 00018998 81 25 00 08 */ lwz r9, 0x8(r5) -/* 0000BC0C 0001899C 48 00 BB D0 */ b .L_000177DC -/* 0000BC10 000189A0 7C 1F 48 50 */ subf r0, r31, r9 -/* 0000BC14 000189A4 90 05 00 08 */ stw r0, 0x8(r5) -/* 0000BC18 000189A8 3D 20 00 00 */ lis r9, _vt.Q33UTL3COM8IUnknown@ha -/* 0000BC1C 000189AC 80 7E 00 18 */ lwz r3, 0x18(r30) -/* 0000BC20 000189B0 39 29 00 00 */ addi r9, r9, _vt.Q33UTL3COM8IUnknown@l -/* 0000BC24 000189B4 91 3E 00 1C */ stw r9, 0x1c(r30) -/* 0000BC28 000189B8 48 00 00 01 */ bl Remove__Q43UTL3COM6Object6_IListPQ33UTL3COM8IUnknown -/* 0000BC2C 000189BC 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha -/* 0000BC30 000189C0 7F C3 F3 78 */ mr r3, r30 -/* 0000BC34 000189C4 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l -/* 0000BC38 000189C8 38 80 00 02 */ li r4, 0x2 -/* 0000BC3C 000189CC 91 3E 00 14 */ stw r9, 0x14(r30) -/* 0000BC40 000189D0 48 00 00 01 */ bl _._Q43UTL3COM6Object6_IList -.L_0000BC44: -/* 0000BC44 000189D4 73 80 00 01 */ andi. r0, r28, 0x1 -/* 0000BC48 000189D8 41 82 BC 6C */ beq .L_000078B4 -/* 0000BC4C 000189DC 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 0000BC50 000189E0 41 82 BC 6C */ beq .L_000078BC -/* 0000BC54 000189E4 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0000BC58 000189E8 7F C4 F3 78 */ mr r4, r30 -/* 0000BC5C 000189EC 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0000BC60 000189F0 38 A0 00 50 */ li r5, 0x50 -/* 0000BC64 000189F4 38 C0 00 00 */ li r6, 0x0 -/* 0000BC68 000189F8 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 0000BC6C 000189FC 80 01 00 24 */ lwz r0, 0x24(r1) -/* 0000BC70 00018A00 7C 08 03 A6 */ mtlr r0 -/* 0000BC74 00018A04 BB 81 00 10 */ lmw r28, 0x10(r1) -/* 0000BC78 00018A08 38 21 00 20 */ addi r1, r1, 0x20 -.L_0000BC7C: -/* 0000BC7C 00018A0C 4E 80 00 20 */ blr -.endfn _._16CDActionTrackCop - -# .text:0xBC80 | size: 0xB4 -.fn OnDetached__16CDActionTrackCopP11IAttachable, global -/* 0000BC80 00018A10 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0000BC84 00018A14 7C 08 02 A6 */ mflr r0 -.L_0000BC88: -/* 0000BC88 00018A18 90 01 00 0C */ stw r0, 0xc(r1) -.L_0000BC8C: -/* 0000BC8C 00018A1C 7C 84 23 79 */ mr. r4, r4 -/* 0000BC90 00018A20 81 23 00 40 */ lwz r9, 0x40(r3) -/* 0000BC94 00018A24 4F 80 00 00 */ mcrf cr7, cr0 -/* 0000BC98 00018A28 41 9E BC BC */ beq cr7, .L_00007954 -/* 0000BC9C 00018A2C 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0000BCA0 00018A30 41 82 BC BC */ beq .L_0000795C -/* 0000BCA4 00018A34 81 29 00 00 */ lwz r9, 0x0(r9) -.L_0000BCA8: -/* 0000BCA8 00018A38 80 04 00 00 */ lwz r0, 0x0(r4) -/* 0000BCAC 00018A3C 7C 00 4A 78 */ xor r0, r0, r9 -/* 0000BCB0 00018A40 21 60 00 00 */ subfic r11, r0, 0x0 -/* 0000BCB4 00018A44 7C 0B 01 14 */ adde r0, r11, r0 -/* 0000BCB8 00018A48 48 00 BC D0 */ b .L_00017988 -/* 0000BCBC 00018A4C 38 00 00 00 */ li r0, 0x0 -.L_0000BCC0: -/* 0000BCC0 00018A50 2F 84 00 00 */ cmpwi cr7, r4, 0x0 -/* 0000BCC4 00018A54 40 9E BC D0 */ bne cr7, .L_00007994 -/* 0000BCC8 00018A58 21 69 00 00 */ subfic r11, r9, 0x0 -/* 0000BCCC 00018A5C 7C 0B 49 14 */ adde r0, r11, r9 -/* 0000BCD0 00018A60 2C 00 00 00 */ cmpwi r0, 0x0 -.L_0000BCD4: -/* 0000BCD4 00018A64 41 82 BC E0 */ beq .L_000079B4 -/* 0000BCD8 00018A68 38 00 00 00 */ li r0, 0x0 -/* 0000BCDC 00018A6C 90 03 00 40 */ stw r0, 0x40(r3) -/* 0000BCE0 00018A70 81 63 00 48 */ lwz r11, 0x48(r3) -.L_0000BCE4: -/* 0000BCE4 00018A74 41 9E BD 08 */ beq cr7, .L_000079EC -/* 0000BCE8 00018A78 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000BCEC 00018A7C 41 82 BD 08 */ beq .L_000079F4 -/* 0000BCF0 00018A80 81 24 00 00 */ lwz r9, 0x0(r4) -/* 0000BCF4 00018A84 80 0B 00 00 */ lwz r0, 0x0(r11) -/* 0000BCF8 00018A88 7D 20 02 78 */ xor r0, r9, r0 -/* 0000BCFC 00018A8C 21 60 00 00 */ subfic r11, r0, 0x0 -.L_0000BD00: -/* 0000BD00 00018A90 7C 0B 01 14 */ adde r0, r11, r0 -/* 0000BD04 00018A94 48 00 BD 18 */ b .L_00017A1C -/* 0000BD08 00018A98 38 00 00 00 */ li r0, 0x0 -/* 0000BD0C 00018A9C 40 9E BD 18 */ bne cr7, .L_00007A24 -/* 0000BD10 00018AA0 21 2B 00 00 */ subfic r9, r11, 0x0 -/* 0000BD14 00018AA4 7C 09 59 14 */ adde r0, r9, r11 -/* 0000BD18 00018AA8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000BD1C 00018AAC 41 82 BD 24 */ beq .L_00007A40 -.L_0000BD20: -/* 0000BD20 00018AB0 48 00 BD 35 */ bl .L_00017A54 -/* 0000BD24 00018AB4 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0000BD28 00018AB8 7C 08 03 A6 */ mtlr r0 -/* 0000BD2C 00018ABC 38 21 00 08 */ addi r1, r1, 0x8 -/* 0000BD30 00018AC0 4E 80 00 20 */ blr -.endfn OnDetached__16CDActionTrackCopP11IAttachable - -# .text:0xBD34 | size: 0x6C -# CDActionTrackCop::OnCarDetached -.fn OnCarDetached__16CDActionTrackCop, global -/* 0000BD34 00018AC4 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 0000BD38 00018AC8 7C 08 02 A6 */ mflr r0 -/* 0000BD3C 00018ACC 93 E1 00 0C */ stw r31, 0xc(r1) -/* 0000BD40 00018AD0 90 01 00 14 */ stw r0, 0x14(r1) -.L_0000BD44: -/* 0000BD44 00018AD4 7C 7F 1B 78 */ mr r31, r3 -/* 0000BD48 00018AD8 39 20 00 01 */ li r9, 0x1 -/* 0000BD4C 00018ADC 80 1F 00 34 */ lwz r0, 0x34(r31) -/* 0000BD50 00018AE0 38 7F 00 30 */ addi r3, r31, 0x30 -/* 0000BD54 00018AE4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000BD58 00018AE8 40 82 BD 60 */ bne .L_00007AB8 -/* 0000BD5C 00018AEC 39 20 00 00 */ li r9, 0x0 -.L_0000BD60: -/* 0000BD60 00018AF0 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0000BD64 00018AF4 41 82 BD 70 */ beq .L_00007AD4 -/* 0000BD68 00018AF8 38 80 00 00 */ li r4, 0x0 -/* 0000BD6C 00018AFC 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi -/* 0000BD70 00018B00 81 3F 00 2C */ lwz r9, 0x2c(r31) -/* 0000BD74 00018B04 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0000BD78 00018B08 41 82 BD 84 */ beq .L_00007AFC -/* 0000BD7C 00018B0C 38 00 00 00 */ li r0, 0x0 -/* 0000BD80 00018B10 90 09 00 8C */ stw r0, 0x8c(r9) -.L_0000BD84: -/* 0000BD84 00018B14 38 00 00 00 */ li r0, 0x0 -.L_0000BD88: -/* 0000BD88 00018B18 90 1F 00 48 */ stw r0, 0x48(r31) -/* 0000BD8C 00018B1C 80 01 00 14 */ lwz r0, 0x14(r1) -.L_0000BD90: -/* 0000BD90 00018B20 7C 08 03 A6 */ mtlr r0 -/* 0000BD94 00018B24 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 0000BD98 00018B28 38 21 00 10 */ addi r1, r1, 0x10 -/* 0000BD9C 00018B2C 4E 80 00 20 */ blr -.endfn OnCarDetached__16CDActionTrackCop - -# .text:0xBDA0 | size: 0x224 -# CDActionTrackCop::AquireCar -.fn AquireCar__16CDActionTrackCop, global -/* 0000BDA0 00018B30 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0000BDA4 00018B34 7C 08 02 A6 */ mflr r0 -/* 0000BDA8 00018B38 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 0000BDAC 00018B3C 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0000BDB0 00018B40 7C 7F 1B 78 */ mr r31, r3 -/* 0000BDB4 00018B44 81 7F 00 40 */ lwz r11, 0x40(r31) -/* 0000BDB8 00018B48 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000BDBC 00018B4C 41 82 BF B0 */ beq .L_00007D6C -/* 0000BDC0 00018B50 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000BDC4 00018B54 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000BDC8 00018B58 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000BDCC 00018B5C 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000BDD0 00018B60 7C 08 03 A6 */ mtlr r0 -/* 0000BDD4 00018B64 4E 80 00 21 */ blrl -/* 0000BDD8 00018B68 81 7F 00 48 */ lwz r11, 0x48(r31) -/* 0000BDDC 00018B6C 7C 63 1B 79 */ mr. r3, r3 -/* 0000BDE0 00018B70 41 82 BE 04 */ beq .L_00007BE4 -/* 0000BDE4 00018B74 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000BDE8 00018B78 41 82 BE 04 */ beq .L_00007BEC -/* 0000BDEC 00018B7C 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0000BDF0 00018B80 80 0B 00 00 */ lwz r0, 0x0(r11) -/* 0000BDF4 00018B84 7D 3E 02 78 */ xor r30, r9, r0 -/* 0000BDF8 00018B88 21 7E 00 00 */ subfic r11, r30, 0x0 -/* 0000BDFC 00018B8C 7F CB F1 14 */ adde r30, r11, r30 -.L_0000BE00: -/* 0000BE00 00018B90 48 00 BE 1C */ b .L_00017C1C -.L_0000BE04: -/* 0000BE04 00018B94 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000BE08 00018B98 38 00 00 00 */ li r0, 0x0 -.L_0000BE0C: -/* 0000BE0C 00018B9C 40 82 BE 18 */ bne .L_00007C24 -/* 0000BE10 00018BA0 21 2B 00 00 */ subfic r9, r11, 0x0 -/* 0000BE14 00018BA4 7C 09 59 14 */ adde r0, r9, r11 -/* 0000BE18 00018BA8 7C 1E 03 78 */ mr r30, r0 -/* 0000BE1C 00018BAC 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 0000BE20 00018BB0 40 82 BE 50 */ bne .L_00007C70 -/* 0000BE24 00018BB4 80 9F 00 48 */ lwz r4, 0x48(r31) -/* 0000BE28 00018BB8 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0000BE2C 00018BBC 41 82 BE 5C */ beq .L_00007C88 -/* 0000BE30 00018BC0 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 0000BE34 00018BC4 38 1F 00 18 */ addi r0, r31, 0x18 -/* 0000BE38 00018BC8 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000BE3C 00018BCC 81 29 00 1C */ lwz r9, 0x1c(r9) -/* 0000BE40 00018BD0 7C 60 1A 14 */ add r3, r0, r3 -/* 0000BE44 00018BD4 7D 28 03 A6 */ mtlr r9 -/* 0000BE48 00018BD8 4E 80 00 21 */ blrl -/* 0000BE4C 00018BDC 93 DF 00 48 */ stw r30, 0x48(r31) -/* 0000BE50 00018BE0 80 1F 00 48 */ lwz r0, 0x48(r31) -/* 0000BE54 00018BE4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000BE58 00018BE8 40 82 BF B0 */ bne .L_00007E08 -/* 0000BE5C 00018BEC 80 7F 00 40 */ lwz r3, 0x40(r31) -/* 0000BE60 00018BF0 81 23 00 04 */ lwz r9, 0x4(r3) -/* 0000BE64 00018BF4 A8 09 00 10 */ lha r0, 0x10(r9) -/* 0000BE68 00018BF8 81 29 00 14 */ lwz r9, 0x14(r9) -/* 0000BE6C 00018BFC 7C 63 02 14 */ add r3, r3, r0 -/* 0000BE70 00018C00 7D 28 03 A6 */ mtlr r9 -/* 0000BE74 00018C04 4E 80 00 21 */ blrl -/* 0000BE78 00018C08 7C 7D 1B 79 */ mr. r29, r3 -/* 0000BE7C 00018C0C 41 82 BF B0 */ beq .L_00007E2C -/* 0000BE80 00018C10 81 3D 00 04 */ lwz r9, 0x4(r29) -/* 0000BE84 00018C14 3B DF 00 30 */ addi r30, r31, 0x30 -/* 0000BE88 00018C18 80 09 00 EC */ lwz r0, 0xec(r9) -/* 0000BE8C 00018C1C A8 69 00 E8 */ lha r3, 0xe8(r9) -/* 0000BE90 00018C20 7C 08 03 A6 */ mtlr r0 -/* 0000BE94 00018C24 7C 7D 1A 14 */ add r3, r29, r3 -/* 0000BE98 00018C28 4E 80 00 21 */ blrl -/* 0000BE9C 00018C2C 7C 64 1B 78 */ mr r4, r3 -/* 0000BEA0 00018C30 7F C3 F3 78 */ mr r3, r30 -/* 0000BEA4 00018C34 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi -/* 0000BEA8 00018C38 80 1F 00 34 */ lwz r0, 0x34(r31) -/* 0000BEAC 00018C3C 39 20 00 01 */ li r9, 0x1 -.L_0000BEB0: -/* 0000BEB0 00018C40 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000BEB4 00018C44 40 82 BE BC */ bne .L_00007D70 -/* 0000BEB8 00018C48 39 20 00 00 */ li r9, 0x0 -.L_0000BEBC: -/* 0000BEBC 00018C4C 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0000BEC0 00018C50 41 82 BF B0 */ beq .L_00007E70 -/* 0000BEC4 00018C54 80 7D 00 00 */ lwz r3, 0x0(r29) -/* 0000BEC8 00018C58 3C 80 00 00 */ lis r4, _IHandle__8IVehicle@ha -/* 0000BECC 00018C5C 38 84 00 00 */ addi r4, r4, _IHandle__8IVehicle@l -/* 0000BED0 00018C60 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000BED4 00018C64 38 00 00 01 */ li r0, 0x1 -/* 0000BED8 00018C68 90 7F 00 48 */ stw r3, 0x48(r31) -/* 0000BEDC 00018C6C 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000BEE0 00018C70 40 82 BE E8 */ bne .L_00007DC8 -.L_0000BEE4: -/* 0000BEE4 00018C74 38 00 00 00 */ li r0, 0x0 -/* 0000BEE8 00018C78 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000BEEC 00018C7C 41 82 BF B0 */ beq .L_00007E9C -/* 0000BEF0 00018C80 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 0000BEF4 00018C84 7C 64 1B 78 */ mr r4, r3 -/* 0000BEF8 00018C88 38 1F 00 18 */ addi r0, r31, 0x18 -/* 0000BEFC 00018C8C A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000BF00 00018C90 81 29 00 14 */ lwz r9, 0x14(r9) -/* 0000BF04 00018C94 7C 60 1A 14 */ add r3, r0, r3 -/* 0000BF08 00018C98 7D 28 03 A6 */ mtlr r9 -/* 0000BF0C 00018C9C 4E 80 00 21 */ blrl -/* 0000BF10 00018CA0 81 7F 00 48 */ lwz r11, 0x48(r31) -/* 0000BF14 00018CA4 83 DF 00 2C */ lwz r30, 0x2c(r31) -/* 0000BF18 00018CA8 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000BF1C 00018CAC A8 69 00 98 */ lha r3, 0x98(r9) -/* 0000BF20 00018CB0 80 09 00 9C */ lwz r0, 0x9c(r9) -/* 0000BF24 00018CB4 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000BF28 00018CB8 7C 08 03 A6 */ mtlr r0 -/* 0000BF2C 00018CBC 4E 80 00 21 */ blrl -/* 0000BF30 00018CC0 81 23 00 08 */ lwz r9, 0x8(r3) -/* 0000BF34 00018CC4 80 69 00 1C */ lwz r3, 0x1c(r9) -/* 0000BF38 00018CC8 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000BF3C 00018CCC 40 82 BF 48 */ bne .L_00007E84 -/* 0000BF40 00018CD0 3D 20 00 00 */ lis r9, .rodata@ha -/* 0000BF44 00018CD4 38 69 00 00 */ addi r3, r9, .rodata@l -/* 0000BF48 00018CD8 48 00 00 01 */ bl bStringHash__FPCc -/* 0000BF4C 00018CDC 7C 64 1B 78 */ mr r4, r3 -/* 0000BF50 00018CE0 7F C3 F3 78 */ mr r3, r30 -/* 0000BF54 00018CE4 48 00 13 CD */ bl .L_0000D320 -/* 0000BF58 00018CE8 80 1F 00 30 */ lwz r0, 0x30(r31) -/* 0000BF5C 00018CEC 3C 80 00 00 */ lis r4, _IHandle__13ITransmission@ha -/* 0000BF60 00018CF0 81 7F 00 2C */ lwz r11, 0x2c(r31) -/* 0000BF64 00018CF4 38 84 00 00 */ addi r4, r4, _IHandle__13ITransmission@l -/* 0000BF68 00018CF8 90 0B 00 8C */ stw r0, 0x8c(r11) -/* 0000BF6C 00018CFC 81 3F 00 48 */ lwz r9, 0x48(r31) -/* 0000BF70 00018D00 80 69 00 00 */ lwz r3, 0x0(r9) -/* 0000BF74 00018D04 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000BF78 00018D08 7C 6B 1B 79 */ mr. r11, r3 -/* 0000BF7C 00018D0C 38 00 00 01 */ li r0, 0x1 -/* 0000BF80 00018D10 40 82 BF 88 */ bne .L_00007F08 -/* 0000BF84 00018D14 38 00 00 00 */ li r0, 0x0 -/* 0000BF88 00018D18 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000BF8C 00018D1C 41 82 BF B0 */ beq .L_00007F3C -/* 0000BF90 00018D20 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000BF94 00018D24 A8 69 00 40 */ lha r3, 0x40(r9) -/* 0000BF98 00018D28 80 09 00 44 */ lwz r0, 0x44(r9) -/* 0000BF9C 00018D2C 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000BFA0 00018D30 7C 08 03 A6 */ mtlr r0 -/* 0000BFA4 00018D34 4E 80 00 21 */ blrl -/* 0000BFA8 00018D38 81 3F 00 2C */ lwz r9, 0x2c(r31) -/* 0000BFAC 00018D3C D0 29 00 14 */ stfs f1, 0x14(r9) -/* 0000BFB0 00018D40 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0000BFB4 00018D44 7C 08 03 A6 */ mtlr r0 -/* 0000BFB8 00018D48 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 0000BFBC 00018D4C 38 21 00 18 */ addi r1, r1, 0x18 -/* 0000BFC0 00018D50 4E 80 00 20 */ blr -.endfn AquireCar__16CDActionTrackCop - -# .text:0xBFC4 | size: 0x1B8 -.fn Update__16CDActionTrackCopf, global -/* 0000BFC4 00018D54 94 21 FF 90 */ stwu r1, -0x70(r1) -/* 0000BFC8 00018D58 7C 08 02 A6 */ mflr r0 -/* 0000BFCC 00018D5C F3 E1 00 68 */ psq_st f31, 0x68(r1), 0, qr0 -/* 0000BFD0 00018D60 BF 81 00 58 */ stmw r28, 0x58(r1) -/* 0000BFD4 00018D64 90 01 00 74 */ stw r0, 0x74(r1) -/* 0000BFD8 00018D68 7C 7F 1B 78 */ mr r31, r3 -.L_0000BFDC: -/* 0000BFDC 00018D6C FF E0 08 90 */ fmr f31, f1 -/* 0000BFE0 00018D70 83 DF 00 40 */ lwz r30, 0x40(r31) -/* 0000BFE4 00018D74 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 0000BFE8 00018D78 40 82 C0 1C */ bne .L_00008004 -/* 0000BFEC 00018D7C 80 9F 00 48 */ lwz r4, 0x48(r31) -/* 0000BFF0 00018D80 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0000BFF4 00018D84 41 82 C1 64 */ beq .L_00008158 -/* 0000BFF8 00018D88 81 3F 00 1C */ lwz r9, 0x1c(r31) -.L_0000BFFC: -/* 0000BFFC 00018D8C 38 1F 00 18 */ addi r0, r31, 0x18 -/* 0000C000 00018D90 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000C004 00018D94 81 29 00 1C */ lwz r9, 0x1c(r9) -/* 0000C008 00018D98 7C 60 1A 14 */ add r3, r0, r3 -.L_0000C00C: -/* 0000C00C 00018D9C 7D 28 03 A6 */ mtlr r9 -/* 0000C010 00018DA0 4E 80 00 21 */ blrl -/* 0000C014 00018DA4 93 DF 00 48 */ stw r30, 0x48(r31) -/* 0000C018 00018DA8 48 00 C1 64 */ b .L_0001817C -/* 0000C01C 00018DAC 7F E3 FB 78 */ mr r3, r31 -/* 0000C020 00018DB0 48 00 BD A1 */ bl .L_00017DC0 -/* 0000C024 00018DB4 80 7F 00 34 */ lwz r3, 0x34(r31) -/* 0000C028 00018DB8 38 00 00 01 */ li r0, 0x1 -/* 0000C02C 00018DBC 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000C030 00018DC0 40 82 C0 38 */ bne .L_00008068 -/* 0000C034 00018DC4 38 00 00 00 */ li r0, 0x0 -/* 0000C038 00018DC8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000C03C 00018DCC 41 82 C1 64 */ beq .L_000081A0 -/* 0000C040 00018DD0 38 81 00 08 */ addi r4, r1, 0x8 -/* 0000C044 00018DD4 48 00 00 01 */ bl PSMTX44Copy -/* 0000C048 00018DD8 80 7F 00 48 */ lwz r3, 0x48(r31) -/* 0000C04C 00018DDC 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000C050 00018DE0 41 82 C1 4C */ beq .L_0000819C -/* 0000C054 00018DE4 80 63 00 00 */ lwz r3, 0x0(r3) -/* 0000C058 00018DE8 3C 80 00 00 */ lis r4, _IHandle__14ICollisionBody@ha -/* 0000C05C 00018DEC 38 84 00 00 */ addi r4, r4, _IHandle__14ICollisionBody@l -/* 0000C060 00018DF0 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000C064 00018DF4 7C 7C 1B 79 */ mr. r28, r3 -/* 0000C068 00018DF8 38 00 00 01 */ li r0, 0x1 -/* 0000C06C 00018DFC 40 82 C0 74 */ bne .L_000080E0 -/* 0000C070 00018E00 38 00 00 00 */ li r0, 0x0 -/* 0000C074 00018E04 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000C078 00018E08 41 82 C1 4C */ beq .L_000081C4 -/* 0000C07C 00018E0C 81 7F 00 48 */ lwz r11, 0x48(r31) -/* 0000C080 00018E10 3B A1 00 48 */ addi r29, r1, 0x48 -/* 0000C084 00018E14 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000C088 00018E18 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0000C08C 00018E1C A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000C090 00018E20 7C 08 03 A6 */ mtlr r0 -/* 0000C094 00018E24 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000C098 00018E28 4E 80 00 21 */ blrl -/* 0000C09C 00018E2C 81 23 00 04 */ lwz r9, 0x4(r3) -/* 0000C0A0 00018E30 A8 09 00 A8 */ lha r0, 0xa8(r9) -/* 0000C0A4 00018E34 81 29 00 AC */ lwz r9, 0xac(r9) -/* 0000C0A8 00018E38 7C 63 02 14 */ add r3, r3, r0 -/* 0000C0AC 00018E3C 7D 28 03 A6 */ mtlr r9 -/* 0000C0B0 00018E40 4E 80 00 21 */ blrl -/* 0000C0B4 00018E44 81 3C 00 04 */ lwz r9, 0x4(r28) -.L_0000C0B8: -/* 0000C0B8 00018E48 7C 7E 1B 78 */ mr r30, r3 -/* 0000C0BC 00018E4C 80 09 00 84 */ lwz r0, 0x84(r9) -/* 0000C0C0 00018E50 A8 69 00 80 */ lha r3, 0x80(r9) -/* 0000C0C4 00018E54 7C 08 03 A6 */ mtlr r0 -/* 0000C0C8 00018E58 7C 7C 1A 14 */ add r3, r28, r3 -.L_0000C0CC: -/* 0000C0CC 00018E5C 4E 80 00 21 */ blrl -/* 0000C0D0 00018E60 C1 A3 00 00 */ lfs f13, 0x0(r3) -/* 0000C0D4 00018E64 7F A4 EB 78 */ mr r4, r29 -/* 0000C0D8 00018E68 38 A0 00 00 */ li r5, 0x0 -/* 0000C0DC 00018E6C D1 A1 00 48 */ stfs f13, 0x48(r1) -/* 0000C0E0 00018E70 C0 03 00 04 */ lfs f0, 0x4(r3) -/* 0000C0E4 00018E74 D0 01 00 4C */ stfs f0, 0x4c(r1) -/* 0000C0E8 00018E78 C1 A3 00 08 */ lfs f13, 0x8(r3) -/* 0000C0EC 00018E7C D1 A1 00 50 */ stfs f13, 0x50(r1) -/* 0000C0F0 00018E80 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000C0F4 00018E84 80 09 01 4C */ lwz r0, 0x14c(r9) -/* 0000C0F8 00018E88 A8 69 01 48 */ lha r3, 0x148(r9) -/* 0000C0FC 00018E8C 7C 08 03 A6 */ mtlr r0 -/* 0000C100 00018E90 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000C104 00018E94 4E 80 00 21 */ blrl -.L_0000C108: -/* 0000C108 00018E98 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000C10C 00018E9C A8 69 00 48 */ lha r3, 0x48(r9) -/* 0000C110 00018EA0 80 09 00 4C */ lwz r0, 0x4c(r9) -/* 0000C114 00018EA4 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000C118 00018EA8 7C 08 03 A6 */ mtlr r0 -/* 0000C11C 00018EAC 4E 80 00 21 */ blrl -/* 0000C120 00018EB0 7C 64 1B 78 */ mr r4, r3 -/* 0000C124 00018EB4 7F A3 EB 78 */ mr r3, r29 -/* 0000C128 00018EB8 7C 65 1B 78 */ mr r5, r3 -.L_0000C12C: -/* 0000C12C 00018EBC 48 00 00 01 */ bl VU0_v3add__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 -/* 0000C130 00018EC0 C0 01 00 48 */ lfs f0, 0x48(r1) -/* 0000C134 00018EC4 C1 A1 00 50 */ lfs f13, 0x50(r1) -/* 0000C138 00018EC8 C1 81 00 4C */ lfs f12, 0x4c(r1) -.L_0000C13C: -/* 0000C13C 00018ECC FC 00 00 50 */ fneg f0, f0 -/* 0000C140 00018ED0 D1 A1 00 38 */ stfs f13, 0x38(r1) -/* 0000C144 00018ED4 D0 01 00 3C */ stfs f0, 0x3c(r1) -/* 0000C148 00018ED8 D1 81 00 40 */ stfs f12, 0x40(r1) -/* 0000C14C 00018EDC 80 DF 00 3C */ lwz r6, 0x3c(r31) -/* 0000C150 00018EE0 FC 20 F8 90 */ fmr f1, f31 -.L_0000C154: -/* 0000C154 00018EE4 80 7F 00 2C */ lwz r3, 0x2c(r31) -/* 0000C158 00018EE8 38 81 00 08 */ addi r4, r1, 0x8 -.L_0000C15C: -/* 0000C15C 00018EEC 80 BF 00 38 */ lwz r5, 0x38(r31) -/* 0000C160 00018EF0 48 00 17 65 */ bl .L_0000D8C4 -/* 0000C164 00018EF4 80 01 00 74 */ lwz r0, 0x74(r1) -/* 0000C168 00018EF8 7C 08 03 A6 */ mtlr r0 -/* 0000C16C 00018EFC BB 81 00 58 */ lmw r28, 0x58(r1) -/* 0000C170 00018F00 E3 E1 00 68 */ psq_l f31, 0x68(r1), 0, qr0 -/* 0000C174 00018F04 38 21 00 70 */ addi r1, r1, 0x70 -/* 0000C178 00018F08 4E 80 00 20 */ blr -.endfn Update__16CDActionTrackCopf - -# .text:0xC17C | size: 0xA4 -.fn GetTrafficBasis__16CDActionTrackCopRQ25UMath7Matrix4RQ25UMath7Vector3, global -/* 0000C17C 00018F0C 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0000C180 00018F10 7C 08 02 A6 */ mflr r0 -/* 0000C184 00018F14 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 0000C188 00018F18 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0000C18C 00018F1C 80 63 00 48 */ lwz r3, 0x48(r3) -/* 0000C190 00018F20 7C 9E 23 78 */ mr r30, r4 -/* 0000C194 00018F24 7C BD 2B 78 */ mr r29, r5 -/* 0000C198 00018F28 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000C19C 00018F2C 41 82 C2 08 */ beq .L_000083A4 -/* 0000C1A0 00018F30 80 63 00 00 */ lwz r3, 0x0(r3) -/* 0000C1A4 00018F34 3C 80 00 00 */ lis r4, _IHandle__5IBody@ha -/* 0000C1A8 00018F38 38 84 00 00 */ addi r4, r4, _IHandle__5IBody@l -/* 0000C1AC 00018F3C 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000C1B0 00018F40 7C 7F 1B 79 */ mr. r31, r3 -/* 0000C1B4 00018F44 38 00 00 01 */ li r0, 0x1 -/* 0000C1B8 00018F48 40 82 C1 C0 */ bne .L_00008378 -/* 0000C1BC 00018F4C 38 00 00 00 */ li r0, 0x0 -/* 0000C1C0 00018F50 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000C1C4 00018F54 41 82 C2 08 */ beq .L_000083CC -/* 0000C1C8 00018F58 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 0000C1CC 00018F5C 7F C4 F3 78 */ mr r4, r30 -/* 0000C1D0 00018F60 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000C1D4 00018F64 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000C1D8 00018F68 7C 08 03 A6 */ mtlr r0 -/* 0000C1DC 00018F6C 7C 7F 1A 14 */ add r3, r31, r3 -/* 0000C1E0 00018F70 4E 80 00 21 */ blrl -/* 0000C1E4 00018F74 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 0000C1E8 00018F78 7F A4 EB 78 */ mr r4, r29 -/* 0000C1EC 00018F7C A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000C1F0 00018F80 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0000C1F4 00018F84 7C 7F 1A 14 */ add r3, r31, r3 -/* 0000C1F8 00018F88 7C 08 03 A6 */ mtlr r0 -/* 0000C1FC 00018F8C 4E 80 00 21 */ blrl -/* 0000C200 00018F90 38 60 00 01 */ li r3, 0x1 -/* 0000C204 00018F94 48 00 C2 0C */ b .L_00018410 -/* 0000C208 00018F98 38 60 00 00 */ li r3, 0x0 -/* 0000C20C 00018F9C 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0000C210 00018FA0 7C 08 03 A6 */ mtlr r0 -.L_0000C214: -/* 0000C214 00018FA4 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 0000C218 00018FA8 38 21 00 18 */ addi r1, r1, 0x18 -.L_0000C21C: -/* 0000C21C 00018FAC 4E 80 00 20 */ blr -.endfn GetTrafficBasis__16CDActionTrackCopRQ25UMath7Matrix4RQ25UMath7Vector3 - -# .text:0xC220 | size: 0x8 -# IsRightSide() -.fn IsRightSide__Fv, local -/* 0000C220 00018FB0 38 60 00 00 */ li r3, 0x0 -/* 0000C224 00018FB4 4E 80 00 20 */ blr -.endfn IsRightSide__Fv - -# .text:0xC228 | size: 0x74 -.fn GetName__C16CDActionShowcase, global -/* 0000C228 00018FB8 94 21 FF E8 */ stwu r1, -0x18(r1) -.L_0000C22C: -/* 0000C22C 00018FBC 7C 08 02 A6 */ mflr r0 -/* 0000C230 00018FC0 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 0000C234 00018FC4 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0000C238 00018FC8 3F E0 00 00 */ lis r31, _.tmp_10.11056@ha -/* 0000C23C 00018FCC 80 1F 00 00 */ lwz r0, _.tmp_10.11056@l(r31) -.L_0000C240: -/* 0000C240 00018FD0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000C244 00018FD4 40 82 C2 80 */ bne .L_000084C4 -/* 0000C248 00018FD8 3F C0 00 00 */ lis r30, .rodata+0x8C8@ha -/* 0000C24C 00018FDC 3F A0 00 00 */ lis r29, name.11055@ha -/* 0000C250 00018FE0 3B DE 08 C8 */ addi r30, r30, .rodata+0x8C8@l -/* 0000C254 00018FE4 3B BD 00 00 */ addi r29, r29, name.11055@l -/* 0000C258 00018FE8 7F C3 F3 78 */ mr r3, r30 -/* 0000C25C 00018FEC 48 00 00 01 */ bl StringHash64__6AttribPCc -/* 0000C260 00018FF0 90 7D 00 00 */ stw r3, 0x0(r29) -/* 0000C264 00018FF4 90 9D 00 04 */ stw r4, 0x4(r29) -/* 0000C268 00018FF8 7F C3 F3 78 */ mr r3, r30 -/* 0000C26C 00018FFC 48 00 00 01 */ bl StringHash32__6AttribPCc -/* 0000C270 00019000 38 00 00 01 */ li r0, 0x1 -.L_0000C274: -/* 0000C274 00019004 93 DD 00 0C */ stw r30, 0xc(r29) -/* 0000C278 00019008 90 1F 00 00 */ stw r0, _.tmp_10.11056@l(r31) -/* 0000C27C 0001900C 90 7D 00 08 */ stw r3, 0x8(r29) -/* 0000C280 00019010 3C 60 00 00 */ lis r3, name.11055@ha -/* 0000C284 00019014 38 63 00 00 */ addi r3, r3, name.11055@l -/* 0000C288 00019018 80 01 00 1C */ lwz r0, 0x1c(r1) -.L_0000C28C: -/* 0000C28C 0001901C 7C 08 03 A6 */ mtlr r0 -/* 0000C290 00019020 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 0000C294 00019024 38 21 00 18 */ addi r1, r1, 0x18 -/* 0000C298 00019028 4E 80 00 20 */ blr -.endfn GetName__C16CDActionShowcase - -# .text:0xC29C | size: 0x2C -.fn GetNext__C16CDActionShowcase, global -/* 0000C29C 0001902C 3D 00 00 00 */ lis r8, .rodata@ha -/* 0000C2A0 00019030 39 20 00 00 */ li r9, 0x0 -/* 0000C2A4 00019034 7C 6B 1B 78 */ mr r11, r3 -.L_0000C2A8: -/* 0000C2A8 00019038 39 08 00 00 */ addi r8, r8, .rodata@l -/* 0000C2AC 0001903C 39 40 00 00 */ li r10, 0x0 -/* 0000C2B0 00019040 38 00 00 00 */ li r0, 0x0 -.L_0000C2B4: -/* 0000C2B4 00019044 91 2B 00 00 */ stw r9, 0x0(r11) -/* 0000C2B8 00019048 91 4B 00 04 */ stw r10, 0x4(r11) -/* 0000C2BC 0001904C 90 0B 00 08 */ stw r0, 0x8(r11) -/* 0000C2C0 00019050 91 0B 00 0C */ stw r8, 0xc(r11) -/* 0000C2C4 00019054 4E 80 00 20 */ blr -.endfn GetNext__C16CDActionShowcase - -# .text:0xC2C8 | size: 0x24 -.fn Attach__16CDActionShowcasePQ33UTL3COM8IUnknown, global -/* 0000C2C8 00019058 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0000C2CC 0001905C 7C 08 02 A6 */ mflr r0 -.L_0000C2D0: -/* 0000C2D0 00019060 90 01 00 0C */ stw r0, 0xc(r1) -/* 0000C2D4 00019064 80 63 00 3C */ lwz r3, 0x3c(r3) -.L_0000C2D8: -/* 0000C2D8 00019068 48 00 00 01 */ bl Attach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -/* 0000C2DC 0001906C 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0000C2E0 00019070 7C 08 03 A6 */ mtlr r0 -.L_0000C2E4: -/* 0000C2E4 00019074 38 21 00 08 */ addi r1, r1, 0x8 -/* 0000C2E8 00019078 4E 80 00 20 */ blr -.endfn Attach__16CDActionShowcasePQ33UTL3COM8IUnknown - -# .text:0xC2EC | size: 0x24 -.fn Detach__16CDActionShowcasePQ33UTL3COM8IUnknown, global -/* 0000C2EC 0001907C 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0000C2F0 00019080 7C 08 02 A6 */ mflr r0 -/* 0000C2F4 00019084 90 01 00 0C */ stw r0, 0xc(r1) -/* 0000C2F8 00019088 80 63 00 3C */ lwz r3, 0x3c(r3) -/* 0000C2FC 0001908C 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -/* 0000C300 00019090 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0000C304 00019094 7C 08 03 A6 */ mtlr r0 -/* 0000C308 00019098 38 21 00 08 */ addi r1, r1, 0x8 -/* 0000C30C 0001909C 4E 80 00 20 */ blr -.endfn Detach__16CDActionShowcasePQ33UTL3COM8IUnknown - -# .text:0xC310 | size: 0x24 -.fn IsAttached__C16CDActionShowcasePCQ33UTL3COM8IUnknown, global -/* 0000C310 000190A0 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0000C314 000190A4 7C 08 02 A6 */ mflr r0 -/* 0000C318 000190A8 90 01 00 0C */ stw r0, 0xc(r1) -/* 0000C31C 000190AC 80 63 00 3C */ lwz r3, 0x3c(r3) -/* 0000C320 000190B0 48 00 00 01 */ bl IsAttached__CQ23Sim11AttachmentsPCQ33UTL3COM8IUnknown -/* 0000C324 000190B4 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0000C328 000190B8 7C 08 03 A6 */ mtlr r0 -/* 0000C32C 000190BC 38 21 00 08 */ addi r1, r1, 0x8 -/* 0000C330 000190C0 4E 80 00 20 */ blr -.endfn IsAttached__C16CDActionShowcasePCQ33UTL3COM8IUnknown - -# .text:0xC334 | size: 0x8 -.fn GetAttachments__C16CDActionShowcase, global -/* 0000C334 000190C4 80 63 00 3C */ lwz r3, 0x3c(r3) -/* 0000C338 000190C8 4E 80 00 20 */ blr -.endfn GetAttachments__C16CDActionShowcase - -# .text:0xC33C | size: 0x11C -.fn Construct__16CDActionShowcasePQ28CameraAI8Director, global -/* 0000C33C 000190CC 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 0000C340 000190D0 7C 08 02 A6 */ mflr r0 -/* 0000C344 000190D4 BF 61 00 0C */ stmw r27, 0xc(r1) -/* 0000C348 000190D8 90 01 00 24 */ stw r0, 0x24(r1) -/* 0000C34C 000190DC 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@ha -/* 0000C350 000190E0 7C 7B 1B 78 */ mr r27, r3 -/* 0000C354 000190E4 39 29 00 00 */ addi r9, r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@l -/* 0000C358 000190E8 3B 80 00 00 */ li r28, 0x0 -/* 0000C35C 000190EC 83 E9 00 30 */ lwz r31, 0x30(r9) -/* 0000C360 000190F0 7D 3D 4B 78 */ mr r29, r9 -/* 0000C364 000190F4 80 1D 00 38 */ lwz r0, 0x38(r29) -/* 0000C368 000190F8 81 3D 00 30 */ lwz r9, 0x30(r29) -/* 0000C36C 000190FC 54 00 10 3A */ slwi r0, r0, 2 -/* 0000C370 00019100 7D 29 02 14 */ add r9, r9, r0 -/* 0000C374 00019104 7C 1F 48 00 */ cmpw r31, r9 -/* 0000C378 00019108 41 82 C3 B0 */ beq .L_00008728 -.L_0000C37C: -/* 0000C37C 0001910C 83 DF 00 00 */ lwz r30, 0x0(r31) -/* 0000C380 00019110 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000C384 00019114 80 09 00 64 */ lwz r0, 0x64(r9) -.L_0000C388: -/* 0000C388 00019118 A8 69 00 60 */ lha r3, 0x60(r9) -/* 0000C38C 0001911C 7C 08 03 A6 */ mtlr r0 -/* 0000C390 00019120 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000C394 00019124 4E 80 00 21 */ blrl -/* 0000C398 00019128 80 1B 00 04 */ lwz r0, 0x4(r27) -/* 0000C39C 0001912C 7C 03 00 00 */ cmpw r3, r0 -/* 0000C3A0 00019130 41 82 C3 AC */ beq .L_0000874C -/* 0000C3A4 00019134 3B FF 00 04 */ addi r31, r31, 0x4 -/* 0000C3A8 00019138 48 00 C3 64 */ b .L_0001870C -/* 0000C3AC 0001913C 7F DC F3 78 */ mr r28, r30 -/* 0000C3B0 00019140 2C 1C 00 00 */ cmpwi r28, 0x0 -/* 0000C3B4 00019144 41 82 C4 40 */ beq .L_000087F4 -/* 0000C3B8 00019148 81 3C 00 04 */ lwz r9, 0x4(r28) -/* 0000C3BC 0001914C A8 69 00 28 */ lha r3, 0x28(r9) -.L_0000C3C0: -/* 0000C3C0 00019150 80 09 00 2C */ lwz r0, 0x2c(r9) -/* 0000C3C4 00019154 7C 7C 1A 14 */ add r3, r28, r3 -/* 0000C3C8 00019158 7C 08 03 A6 */ mtlr r0 -.L_0000C3CC: -/* 0000C3CC 0001915C 4E 80 00 21 */ blrl -/* 0000C3D0 00019160 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000C3D4 00019164 41 82 C4 40 */ beq .L_00008814 -/* 0000C3D8 00019168 81 3C 00 04 */ lwz r9, 0x4(r28) -/* 0000C3DC 0001916C A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000C3E0 00019170 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000C3E4 00019174 7C 7C 1A 14 */ add r3, r28, r3 -.L_0000C3E8: -/* 0000C3E8 00019178 7C 08 03 A6 */ mtlr r0 -/* 0000C3EC 0001917C 4E 80 00 21 */ blrl -/* 0000C3F0 00019180 7C 6B 1B 79 */ mr. r11, r3 -/* 0000C3F4 00019184 41 82 C4 40 */ beq .L_00008834 -.L_0000C3F8: -/* 0000C3F8 00019188 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000C3FC 0001918C A8 69 00 E8 */ lha r3, 0xe8(r9) -/* 0000C400 00019190 80 09 00 EC */ lwz r0, 0xec(r9) -/* 0000C404 00019194 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000C408 00019198 7C 08 03 A6 */ mtlr r0 -/* 0000C40C 0001919C 4E 80 00 21 */ blrl -/* 0000C410 000191A0 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000C414 000191A4 38 60 00 00 */ li r3, 0x0 -/* 0000C418 000191A8 41 82 C4 44 */ beq .L_0000885C -/* 0000C41C 000191AC 3C 60 00 00 */ lis r3, gFastMem@ha -.L_0000C420: -/* 0000C420 000191B0 38 80 00 48 */ li r4, 0x48 -/* 0000C424 000191B4 38 A0 00 00 */ li r5, 0x0 -/* 0000C428 000191B8 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0000C42C 000191BC 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 0000C430 000191C0 7F 64 DB 78 */ mr r4, r27 -/* 0000C434 000191C4 7F 85 E3 78 */ mr r5, r28 -/* 0000C438 000191C8 48 00 C4 59 */ bl .L_00018890 -/* 0000C43C 000191CC 48 00 C4 44 */ b .L_00018880 -/* 0000C440 000191D0 38 60 00 00 */ li r3, 0x0 -/* 0000C444 000191D4 80 01 00 24 */ lwz r0, 0x24(r1) -/* 0000C448 000191D8 7C 08 03 A6 */ mtlr r0 -/* 0000C44C 000191DC BB 61 00 0C */ lmw r27, 0xc(r1) -/* 0000C450 000191E0 38 21 00 20 */ addi r1, r1, 0x20 -/* 0000C454 000191E4 4E 80 00 20 */ blr -.endfn Construct__16CDActionShowcasePQ28CameraAI8Director - -# .text:0xC458 | size: 0x2B0 -.fn __16CDActionShowcasePQ28CameraAI8DirectorP7IPlayer, global -/* 0000C458 000191E8 94 21 FF 88 */ stwu r1, -0x78(r1) -/* 0000C45C 000191EC 7C 08 02 A6 */ mflr r0 -/* 0000C460 000191F0 BF 21 00 5C */ stmw r25, 0x5c(r1) -/* 0000C464 000191F4 90 01 00 7C */ stw r0, 0x7c(r1) -/* 0000C468 000191F8 7C 7F 1B 78 */ mr r31, r3 -/* 0000C46C 000191FC 7C 99 23 78 */ mr r25, r4 -/* 0000C470 00019200 7C BE 2B 78 */ mr r30, r5 -/* 0000C474 00019204 38 80 00 00 */ li r4, 0x0 -/* 0000C478 00019208 3B 7F 00 18 */ addi r27, r31, 0x18 -/* 0000C47C 0001920C 48 00 00 01 */ bl __Q43UTL3COM6Object6_IListUi -/* 0000C480 00019210 3B 80 00 00 */ li r28, 0x0 -/* 0000C484 00019214 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha -/* 0000C488 00019218 3D 60 00 00 */ lis r11, _vt.Q33UTL3COM8IUnknown@ha -/* 0000C48C 0001921C 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l -/* 0000C490 00019220 39 6B 00 00 */ addi r11, r11, _vt.Q33UTL3COM8IUnknown@l -/* 0000C494 00019224 3C 80 00 00 */ lis r4, _IHandle__11IAttachable@ha -/* 0000C498 00019228 93 FF 00 18 */ stw r31, 0x18(r31) -/* 0000C49C 0001922C 3B 41 00 08 */ addi r26, r1, 0x8 -/* 0000C4A0 00019230 7F 65 DB 78 */ mr r5, r27 -/* 0000C4A4 00019234 38 84 00 00 */ addi r4, r4, _IHandle__11IAttachable@l -/* 0000C4A8 00019238 91 3F 00 14 */ stw r9, 0x14(r31) -/* 0000C4AC 0001923C 91 7F 00 1C */ stw r11, 0x1c(r31) -/* 0000C4B0 00019240 7F E3 FB 78 */ mr r3, r31 -/* 0000C4B4 00019244 48 00 00 01 */ bl Add__Q43UTL3COM6Object6_IListPvPQ33UTL3COM8IUnknown -/* 0000C4B8 00019248 3D 20 00 00 */ lis r9, _vt.16CDActionShowcase.11IAttachable@ha -/* 0000C4BC 0001924C 3D 60 00 00 */ lis r11, _vt.16CDActionShowcase@ha -/* 0000C4C0 00019250 39 6B 00 00 */ addi r11, r11, _vt.16CDActionShowcase@l -.L_0000C4C4: -/* 0000C4C4 00019254 39 29 00 00 */ addi r9, r9, _vt.16CDActionShowcase.11IAttachable@l -/* 0000C4C8 00019258 91 7F 00 14 */ stw r11, 0x14(r31) -/* 0000C4CC 0001925C 38 80 00 00 */ li r4, 0x0 -/* 0000C4D0 00019260 91 3F 00 1C */ stw r9, 0x1c(r31) -/* 0000C4D4 00019264 38 7F 00 28 */ addi r3, r31, 0x28 -/* 0000C4D8 00019268 48 00 00 01 */ bl __Q29WorldConn9ReferenceUi -/* 0000C4DC 0001926C 93 DF 00 38 */ stw r30, 0x38(r31) -/* 0000C4E0 00019270 3F A0 00 00 */ lis r29, gFastMem@ha -/* 0000C4E4 00019274 93 9F 00 40 */ stw r28, 0x40(r31) -/* 0000C4E8 00019278 3B BD 00 00 */ addi r29, r29, gFastMem@l -/* 0000C4EC 0001927C 38 80 00 10 */ li r4, 0x10 -/* 0000C4F0 00019280 38 A0 00 00 */ li r5, 0x0 -/* 0000C4F4 00019284 80 19 00 04 */ lwz r0, 0x4(r25) -/* 0000C4F8 00019288 7F A3 EB 78 */ mr r3, r29 -/* 0000C4FC 0001928C 90 1F 00 44 */ stw r0, 0x44(r31) -/* 0000C500 00019290 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 0000C504 00019294 7C 7E 1B 78 */ mr r30, r3 -/* 0000C508 00019298 3D 20 00 00 */ lis r9, _vt.Q23Sim11Attachments@ha -/* 0000C50C 0001929C 39 29 00 00 */ addi r9, r9, _vt.Q23Sim11Attachments@l -/* 0000C510 000192A0 93 9E 00 04 */ stw r28, 0x4(r30) -/* 0000C514 000192A4 38 A0 00 00 */ li r5, 0x0 -/* 0000C518 000192A8 91 3E 00 0C */ stw r9, 0xc(r30) -/* 0000C51C 000192AC 38 80 00 0C */ li r4, 0xc -/* 0000C520 000192B0 7F A3 EB 78 */ mr r3, r29 -.L_0000C524: -/* 0000C524 000192B4 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 0000C528 000192B8 7C 69 1B 78 */ mr r9, r3 -/* 0000C52C 000192BC 91 29 00 00 */ stw r9, 0x0(r9) -/* 0000C530 000192C0 7F C3 F3 78 */ mr r3, r30 -/* 0000C534 000192C4 91 29 00 04 */ stw r9, 0x4(r9) -/* 0000C538 000192C8 91 3E 00 04 */ stw r9, 0x4(r30) -/* 0000C53C 000192CC 93 7E 00 08 */ stw r27, 0x8(r30) -/* 0000C540 000192D0 93 DF 00 3C */ stw r30, 0x3c(r31) -/* 0000C544 000192D4 80 9F 00 38 */ lwz r4, 0x38(r31) -/* 0000C548 000192D8 48 00 00 01 */ bl Attach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -/* 0000C54C 000192DC 38 60 01 24 */ li r3, 0x124 -/* 0000C550 000192E0 48 00 00 01 */ bl __builtin_vec_new -/* 0000C554 000192E4 38 80 00 00 */ li r4, 0x0 -.L_0000C558: -/* 0000C558 000192E8 48 00 10 51 */ bl .L_0000D5A8 -/* 0000C55C 000192EC 90 7F 00 24 */ stw r3, 0x24(r31) -/* 0000C560 000192F0 7F E3 FB 78 */ mr r3, r31 -/* 0000C564 000192F4 48 00 C9 65 */ bl .L_00018EC8 -/* 0000C568 000192F8 80 7F 00 2C */ lwz r3, 0x2c(r31) -/* 0000C56C 000192FC 38 00 00 01 */ li r0, 0x1 -.L_0000C570: -/* 0000C570 00019300 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000C574 00019304 40 82 C5 7C */ bne .L_00008AF0 -/* 0000C578 00019308 38 00 00 00 */ li r0, 0x0 -.L_0000C57C: -/* 0000C57C 0001930C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000C580 00019310 41 82 C6 A8 */ beq .L_00008C28 -/* 0000C584 00019314 38 81 00 18 */ addi r4, r1, 0x18 -/* 0000C588 00019318 48 00 00 01 */ bl PSMTX44Copy -/* 0000C58C 0001931C 80 7F 00 40 */ lwz r3, 0x40(r31) -/* 0000C590 00019320 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000C594 00019324 41 82 C6 8C */ beq .L_00008C20 -/* 0000C598 00019328 80 63 00 00 */ lwz r3, 0x0(r3) -/* 0000C59C 0001932C 3C 80 00 00 */ lis r4, _IHandle__14ICollisionBody@ha -/* 0000C5A0 00019330 38 84 00 00 */ addi r4, r4, _IHandle__14ICollisionBody@l -.L_0000C5A4: -/* 0000C5A4 00019334 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000C5A8 00019338 7C 7D 1B 79 */ mr. r29, r3 -.L_0000C5AC: -/* 0000C5AC 0001933C 38 00 00 01 */ li r0, 0x1 -/* 0000C5B0 00019340 40 82 C5 B8 */ bne .L_00008B68 -/* 0000C5B4 00019344 38 00 00 00 */ li r0, 0x0 -/* 0000C5B8 00019348 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000C5BC 0001934C 41 82 C6 8C */ beq .L_00008C48 -/* 0000C5C0 00019350 81 7F 00 40 */ lwz r11, 0x40(r31) -/* 0000C5C4 00019354 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000C5C8 00019358 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0000C5CC 0001935C A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000C5D0 00019360 7C 08 03 A6 */ mtlr r0 -/* 0000C5D4 00019364 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000C5D8 00019368 4E 80 00 21 */ blrl -/* 0000C5DC 0001936C 81 23 00 04 */ lwz r9, 0x4(r3) -/* 0000C5E0 00019370 A8 09 00 A8 */ lha r0, 0xa8(r9) -/* 0000C5E4 00019374 81 29 00 AC */ lwz r9, 0xac(r9) -/* 0000C5E8 00019378 7C 63 02 14 */ add r3, r3, r0 -/* 0000C5EC 0001937C 7D 28 03 A6 */ mtlr r9 -/* 0000C5F0 00019380 4E 80 00 21 */ blrl -/* 0000C5F4 00019384 81 3D 00 04 */ lwz r9, 0x4(r29) -/* 0000C5F8 00019388 7C 7E 1B 78 */ mr r30, r3 -/* 0000C5FC 0001938C 80 09 00 84 */ lwz r0, 0x84(r9) -/* 0000C600 00019390 A8 69 00 80 */ lha r3, 0x80(r9) -/* 0000C604 00019394 7C 08 03 A6 */ mtlr r0 -/* 0000C608 00019398 7C 7D 1A 14 */ add r3, r29, r3 -/* 0000C60C 0001939C 4E 80 00 21 */ blrl -/* 0000C610 000193A0 C1 A3 00 00 */ lfs f13, 0x0(r3) -/* 0000C614 000193A4 7F 44 D3 78 */ mr r4, r26 -/* 0000C618 000193A8 38 A0 00 00 */ li r5, 0x0 -/* 0000C61C 000193AC D1 A1 00 08 */ stfs f13, 0x8(r1) -/* 0000C620 000193B0 C0 03 00 04 */ lfs f0, 0x4(r3) -.L_0000C624: -/* 0000C624 000193B4 D0 01 00 0C */ stfs f0, 0xc(r1) -/* 0000C628 000193B8 C1 A3 00 08 */ lfs f13, 0x8(r3) -/* 0000C62C 000193BC D1 BA 00 08 */ stfs f13, 0x8(r26) -/* 0000C630 000193C0 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000C634 000193C4 80 09 01 4C */ lwz r0, 0x14c(r9) -/* 0000C638 000193C8 A8 69 01 48 */ lha r3, 0x148(r9) -/* 0000C63C 000193CC 7C 08 03 A6 */ mtlr r0 -/* 0000C640 000193D0 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000C644 000193D4 4E 80 00 21 */ blrl -.L_0000C648: -/* 0000C648 000193D8 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000C64C 000193DC A8 69 00 48 */ lha r3, 0x48(r9) -/* 0000C650 000193E0 80 09 00 4C */ lwz r0, 0x4c(r9) -/* 0000C654 000193E4 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000C658 000193E8 7C 08 03 A6 */ mtlr r0 -/* 0000C65C 000193EC 4E 80 00 21 */ blrl -/* 0000C660 000193F0 7C 64 1B 78 */ mr r4, r3 -/* 0000C664 000193F4 7F 45 D3 78 */ mr r5, r26 -/* 0000C668 000193F8 7F 43 D3 78 */ mr r3, r26 -.L_0000C66C: -/* 0000C66C 000193FC 48 00 00 01 */ bl VU0_v3add__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 -/* 0000C670 00019400 C0 01 00 08 */ lfs f0, 0x8(r1) -/* 0000C674 00019404 C1 BA 00 08 */ lfs f13, 0x8(r26) -/* 0000C678 00019408 C1 81 00 0C */ lfs f12, 0xc(r1) -/* 0000C67C 0001940C FC 00 00 50 */ fneg f0, f0 -/* 0000C680 00019410 D1 A1 00 48 */ stfs f13, 0x48(r1) -/* 0000C684 00019414 D0 01 00 4C */ stfs f0, 0x4c(r1) -/* 0000C688 00019418 D1 81 00 50 */ stfs f12, 0x50(r1) -/* 0000C68C 0001941C 3D 20 00 00 */ lis r9, .rodata+0x8D4@ha -/* 0000C690 00019420 80 7F 00 24 */ lwz r3, 0x24(r31) -/* 0000C694 00019424 C0 29 08 D4 */ lfs f1, .rodata+0x8D4@l(r9) -/* 0000C698 00019428 38 81 00 18 */ addi r4, r1, 0x18 -/* 0000C69C 0001942C 80 BF 00 30 */ lwz r5, 0x30(r31) -.L_0000C6A0: -/* 0000C6A0 00019430 80 DF 00 34 */ lwz r6, 0x34(r31) -/* 0000C6A4 00019434 48 00 17 65 */ bl .L_0000DE08 -/* 0000C6A8 00019438 38 60 00 EC */ li r3, 0xec -/* 0000C6AC 0001943C 48 00 00 01 */ bl __builtin_vec_new -/* 0000C6B0 00019440 7C 7C 1B 78 */ mr r28, r3 -/* 0000C6B4 00019444 83 D9 00 04 */ lwz r30, 0x4(r25) -.L_0000C6B8: -/* 0000C6B8 00019448 83 BF 00 24 */ lwz r29, 0x24(r31) -/* 0000C6BC 0001944C 48 00 C2 21 */ bl .L_000188DC -/* 0000C6C0 00019450 7C 66 1B 78 */ mr r6, r3 -/* 0000C6C4 00019454 7F C4 F3 78 */ mr r4, r30 -/* 0000C6C8 00019458 7F A5 EB 78 */ mr r5, r29 -/* 0000C6CC 0001945C 7F 83 E3 78 */ mr r3, r28 -/* 0000C6D0 00019460 48 01 24 45 */ bl .text+0x12444 -/* 0000C6D4 00019464 90 7F 00 20 */ stw r3, 0x20(r31) -/* 0000C6D8 00019468 81 23 00 08 */ lwz r9, 0x8(r3) -/* 0000C6DC 0001946C A8 09 00 70 */ lha r0, 0x70(r9) -/* 0000C6E0 00019470 81 29 00 74 */ lwz r9, 0x74(r9) -/* 0000C6E4 00019474 7C 63 02 14 */ add r3, r3, r0 -.L_0000C6E8: -/* 0000C6E8 00019478 7D 28 03 A6 */ mtlr r9 -/* 0000C6EC 0001947C 4E 80 00 21 */ blrl -/* 0000C6F0 00019480 7F E3 FB 78 */ mr r3, r31 -.L_0000C6F4: -/* 0000C6F4 00019484 80 01 00 7C */ lwz r0, 0x7c(r1) -/* 0000C6F8 00019488 7C 08 03 A6 */ mtlr r0 -/* 0000C6FC 0001948C BB 21 00 5C */ lmw r25, 0x5c(r1) -/* 0000C700 00019490 38 21 00 78 */ addi r1, r1, 0x78 -/* 0000C704 00019494 4E 80 00 20 */ blr -.endfn __16CDActionShowcasePQ28CameraAI8DirectorP7IPlayer - -# .text:0xC708 | size: 0x13C -.fn _._16CDActionShowcase, global -/* 0000C708 00019498 94 21 FF E8 */ stwu r1, -0x18(r1) -.L_0000C70C: -/* 0000C70C 0001949C 7C 08 02 A6 */ mflr r0 -/* 0000C710 000194A0 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 0000C714 000194A4 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0000C718 000194A8 7C 7F 1B 78 */ mr r31, r3 -/* 0000C71C 000194AC 3D 60 00 00 */ lis r11, _vt.16CDActionShowcase.11IAttachable@ha -/* 0000C720 000194B0 80 1F 00 38 */ lwz r0, 0x38(r31) -.L_0000C724: -/* 0000C724 000194B4 3D 20 00 00 */ lis r9, _vt.16CDActionShowcase@ha -/* 0000C728 000194B8 39 6B 00 00 */ addi r11, r11, _vt.16CDActionShowcase.11IAttachable@l -/* 0000C72C 000194BC 39 29 00 00 */ addi r9, r9, _vt.16CDActionShowcase@l -/* 0000C730 000194C0 3B DF 00 18 */ addi r30, r31, 0x18 -/* 0000C734 000194C4 7C 9D 23 78 */ mr r29, r4 -/* 0000C738 000194C8 91 7F 00 1C */ stw r11, 0x1c(r31) -/* 0000C73C 000194CC 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000C740 000194D0 91 3F 00 14 */ stw r9, 0x14(r31) -.L_0000C744: -/* 0000C744 000194D4 41 82 C7 54 */ beq .L_00008E98 -/* 0000C748 000194D8 80 7F 00 3C */ lwz r3, 0x3c(r31) -/* 0000C74C 000194DC 7C 04 03 78 */ mr r4, r0 -/* 0000C750 000194E0 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -/* 0000C754 000194E4 80 9F 00 40 */ lwz r4, 0x40(r31) -/* 0000C758 000194E8 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0000C75C 000194EC 41 82 C7 68 */ beq .L_00008EC4 -/* 0000C760 000194F0 80 7F 00 3C */ lwz r3, 0x3c(r31) -/* 0000C764 000194F4 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -/* 0000C768 000194F8 81 7F 00 20 */ lwz r11, 0x20(r31) -/* 0000C76C 000194FC 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000C770 00019500 41 82 C7 90 */ beq .L_00008F00 -/* 0000C774 00019504 81 2B 00 08 */ lwz r9, 0x8(r11) -/* 0000C778 00019508 38 80 00 03 */ li r4, 0x3 -/* 0000C77C 0001950C A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000C780 00019510 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000C784 00019514 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000C788 00019518 7C 08 03 A6 */ mtlr r0 -/* 0000C78C 0001951C 4E 80 00 21 */ blrl -/* 0000C790 00019520 80 7F 00 24 */ lwz r3, 0x24(r31) -/* 0000C794 00019524 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000C798 00019528 41 82 C7 A4 */ beq .L_00008F3C -/* 0000C79C 0001952C 38 80 00 03 */ li r4, 0x3 -/* 0000C7A0 00019530 48 00 13 6D */ bl .L_0000DB0C -/* 0000C7A4 00019534 81 7F 00 3C */ lwz r11, 0x3c(r31) -.L_0000C7A8: -/* 0000C7A8 00019538 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000C7AC 0001953C 41 82 C7 CC */ beq .L_00008F78 -/* 0000C7B0 00019540 81 2B 00 0C */ lwz r9, 0xc(r11) -/* 0000C7B4 00019544 38 80 00 03 */ li r4, 0x3 -/* 0000C7B8 00019548 A8 69 00 08 */ lha r3, 0x8(r9) -/* 0000C7BC 0001954C 80 09 00 0C */ lwz r0, 0xc(r9) -/* 0000C7C0 00019550 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000C7C4 00019554 7C 08 03 A6 */ mtlr r0 -/* 0000C7C8 00019558 4E 80 00 21 */ blrl -.L_0000C7CC: -/* 0000C7CC 0001955C 38 7F 00 28 */ addi r3, r31, 0x28 -/* 0000C7D0 00019560 38 80 00 02 */ li r4, 0x2 -/* 0000C7D4 00019564 48 00 00 01 */ bl _._Q29WorldConn9Reference -/* 0000C7D8 00019568 3D 20 00 00 */ lis r9, _vt.Q33UTL3COM8IUnknown@ha -/* 0000C7DC 0001956C 80 7F 00 18 */ lwz r3, 0x18(r31) -/* 0000C7E0 00019570 39 29 00 00 */ addi r9, r9, _vt.Q33UTL3COM8IUnknown@l -/* 0000C7E4 00019574 7F C4 F3 78 */ mr r4, r30 -/* 0000C7E8 00019578 91 3F 00 1C */ stw r9, 0x1c(r31) -/* 0000C7EC 0001957C 48 00 00 01 */ bl Remove__Q43UTL3COM6Object6_IListPQ33UTL3COM8IUnknown -/* 0000C7F0 00019580 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha -.L_0000C7F4: -/* 0000C7F4 00019584 7F E3 FB 78 */ mr r3, r31 -/* 0000C7F8 00019588 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l -/* 0000C7FC 0001958C 38 80 00 02 */ li r4, 0x2 -.L_0000C800: -/* 0000C800 00019590 91 3F 00 14 */ stw r9, 0x14(r31) -/* 0000C804 00019594 48 00 00 01 */ bl _._Q43UTL3COM6Object6_IList -/* 0000C808 00019598 73 A0 00 01 */ andi. r0, r29, 0x1 -/* 0000C80C 0001959C 41 82 C8 30 */ beq .L_0000903C -/* 0000C810 000195A0 2C 1F 00 00 */ cmpwi r31, 0x0 -/* 0000C814 000195A4 41 82 C8 30 */ beq .L_00009044 -/* 0000C818 000195A8 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0000C81C 000195AC 7F E4 FB 78 */ mr r4, r31 -/* 0000C820 000195B0 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0000C824 000195B4 38 A0 00 48 */ li r5, 0x48 -/* 0000C828 000195B8 38 C0 00 00 */ li r6, 0x0 -/* 0000C82C 000195BC 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 0000C830 000195C0 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0000C834 000195C4 7C 08 03 A6 */ mtlr r0 -/* 0000C838 000195C8 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 0000C83C 000195CC 38 21 00 18 */ addi r1, r1, 0x18 -/* 0000C840 000195D0 4E 80 00 20 */ blr -.endfn _._16CDActionShowcase - -# .text:0xC844 | size: 0xB4 -.fn OnDetached__16CDActionShowcaseP11IAttachable, global -/* 0000C844 000195D4 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0000C848 000195D8 7C 08 02 A6 */ mflr r0 -/* 0000C84C 000195DC 90 01 00 0C */ stw r0, 0xc(r1) -/* 0000C850 000195E0 7C 84 23 79 */ mr. r4, r4 -/* 0000C854 000195E4 81 23 00 38 */ lwz r9, 0x38(r3) -/* 0000C858 000195E8 4F 80 00 00 */ mcrf cr7, cr0 -/* 0000C85C 000195EC 41 9E C8 80 */ beq cr7, .L_000090DC -/* 0000C860 000195F0 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0000C864 000195F4 41 82 C8 80 */ beq .L_000090E4 -/* 0000C868 000195F8 81 29 00 00 */ lwz r9, 0x0(r9) -/* 0000C86C 000195FC 80 04 00 00 */ lwz r0, 0x0(r4) -/* 0000C870 00019600 7C 00 4A 78 */ xor r0, r0, r9 -/* 0000C874 00019604 21 60 00 00 */ subfic r11, r0, 0x0 -/* 0000C878 00019608 7C 0B 01 14 */ adde r0, r11, r0 -/* 0000C87C 0001960C 48 00 C8 94 */ b .L_00019110 -/* 0000C880 00019610 38 00 00 00 */ li r0, 0x0 -/* 0000C884 00019614 2F 84 00 00 */ cmpwi cr7, r4, 0x0 -/* 0000C888 00019618 40 9E C8 94 */ bne cr7, .L_0000911C -/* 0000C88C 0001961C 21 69 00 00 */ subfic r11, r9, 0x0 -/* 0000C890 00019620 7C 0B 49 14 */ adde r0, r11, r9 -/* 0000C894 00019624 2C 00 00 00 */ cmpwi r0, 0x0 -.L_0000C898: -/* 0000C898 00019628 41 82 C8 A4 */ beq .L_0000913C -/* 0000C89C 0001962C 38 00 00 00 */ li r0, 0x0 -/* 0000C8A0 00019630 90 03 00 38 */ stw r0, 0x38(r3) -/* 0000C8A4 00019634 81 63 00 40 */ lwz r11, 0x40(r3) -/* 0000C8A8 00019638 41 9E C8 CC */ beq cr7, .L_00009174 -/* 0000C8AC 0001963C 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000C8B0 00019640 41 82 C8 CC */ beq .L_0000917C -/* 0000C8B4 00019644 81 24 00 00 */ lwz r9, 0x0(r4) -/* 0000C8B8 00019648 80 0B 00 00 */ lwz r0, 0x0(r11) -/* 0000C8BC 0001964C 7D 20 02 78 */ xor r0, r9, r0 -/* 0000C8C0 00019650 21 60 00 00 */ subfic r11, r0, 0x0 -/* 0000C8C4 00019654 7C 0B 01 14 */ adde r0, r11, r0 -/* 0000C8C8 00019658 48 00 C8 DC */ b .L_000191A4 -.L_0000C8CC: -/* 0000C8CC 0001965C 38 00 00 00 */ li r0, 0x0 -/* 0000C8D0 00019660 40 9E C8 DC */ bne cr7, .L_000091AC -/* 0000C8D4 00019664 21 2B 00 00 */ subfic r9, r11, 0x0 -/* 0000C8D8 00019668 7C 09 59 14 */ adde r0, r9, r11 -/* 0000C8DC 0001966C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000C8E0 00019670 41 82 C8 E8 */ beq .L_000091C8 -/* 0000C8E4 00019674 48 00 C8 F9 */ bl .L_000191DC -/* 0000C8E8 00019678 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0000C8EC 0001967C 7C 08 03 A6 */ mtlr r0 -/* 0000C8F0 00019680 38 21 00 08 */ addi r1, r1, 0x8 -/* 0000C8F4 00019684 4E 80 00 20 */ blr -.endfn OnDetached__16CDActionShowcaseP11IAttachable - -# .text:0xC8F8 | size: 0x6C -# CDActionShowcase::OnCarDetached -.fn OnCarDetached__16CDActionShowcase, global -/* 0000C8F8 00019688 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 0000C8FC 0001968C 7C 08 02 A6 */ mflr r0 -/* 0000C900 00019690 93 E1 00 0C */ stw r31, 0xc(r1) -/* 0000C904 00019694 90 01 00 14 */ stw r0, 0x14(r1) -/* 0000C908 00019698 7C 7F 1B 78 */ mr r31, r3 -/* 0000C90C 0001969C 39 20 00 01 */ li r9, 0x1 -/* 0000C910 000196A0 80 1F 00 2C */ lwz r0, 0x2c(r31) -/* 0000C914 000196A4 38 7F 00 28 */ addi r3, r31, 0x28 -/* 0000C918 000196A8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000C91C 000196AC 40 82 C9 24 */ bne .L_00009240 -/* 0000C920 000196B0 39 20 00 00 */ li r9, 0x0 -/* 0000C924 000196B4 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0000C928 000196B8 41 82 C9 34 */ beq .L_0000925C -/* 0000C92C 000196BC 38 80 00 00 */ li r4, 0x0 -/* 0000C930 000196C0 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi -/* 0000C934 000196C4 81 3F 00 24 */ lwz r9, 0x24(r31) -/* 0000C938 000196C8 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0000C93C 000196CC 41 82 C9 48 */ beq .L_00009284 -/* 0000C940 000196D0 38 00 00 00 */ li r0, 0x0 -/* 0000C944 000196D4 90 09 00 8C */ stw r0, 0x8c(r9) -/* 0000C948 000196D8 38 00 00 00 */ li r0, 0x0 -.L_0000C94C: -/* 0000C94C 000196DC 90 1F 00 40 */ stw r0, 0x40(r31) -/* 0000C950 000196E0 80 01 00 14 */ lwz r0, 0x14(r1) -/* 0000C954 000196E4 7C 08 03 A6 */ mtlr r0 -/* 0000C958 000196E8 83 E1 00 0C */ lwz r31, 0xc(r1) -.L_0000C95C: -/* 0000C95C 000196EC 38 21 00 10 */ addi r1, r1, 0x10 -.L_0000C960: -/* 0000C960 000196F0 4E 80 00 20 */ blr -.endfn OnCarDetached__16CDActionShowcase - -# .text:0xC964 | size: 0x1D8 -# CDActionShowcase::AquireCar -.fn AquireCar__16CDActionShowcase, global -/* 0000C964 000196F4 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0000C968 000196F8 7C 08 02 A6 */ mflr r0 -/* 0000C96C 000196FC BF A1 00 0C */ stmw r29, 0xc(r1) -.L_0000C970: -/* 0000C970 00019700 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0000C974 00019704 7C 7F 1B 78 */ mr r31, r3 -/* 0000C978 00019708 81 7F 00 38 */ lwz r11, 0x38(r31) -/* 0000C97C 0001970C 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000C980 00019710 41 82 CB 28 */ beq .L_000094A8 -/* 0000C984 00019714 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000C988 00019718 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000C98C 0001971C 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000C990 00019720 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000C994 00019724 7C 08 03 A6 */ mtlr r0 -/* 0000C998 00019728 4E 80 00 21 */ blrl -/* 0000C99C 0001972C 81 7F 00 40 */ lwz r11, 0x40(r31) -/* 0000C9A0 00019730 7C 63 1B 79 */ mr. r3, r3 -.L_0000C9A4: -/* 0000C9A4 00019734 41 82 C9 C8 */ beq .L_0000936C -/* 0000C9A8 00019738 2C 0B 00 00 */ cmpwi r11, 0x0 -.L_0000C9AC: -/* 0000C9AC 0001973C 41 82 C9 C8 */ beq .L_00009374 -/* 0000C9B0 00019740 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0000C9B4 00019744 80 0B 00 00 */ lwz r0, 0x0(r11) -/* 0000C9B8 00019748 7D 3E 02 78 */ xor r30, r9, r0 -/* 0000C9BC 0001974C 21 7E 00 00 */ subfic r11, r30, 0x0 -/* 0000C9C0 00019750 7F CB F1 14 */ adde r30, r11, r30 -/* 0000C9C4 00019754 48 00 C9 E0 */ b .L_000193A4 -/* 0000C9C8 00019758 2C 03 00 00 */ cmpwi r3, 0x0 -.L_0000C9CC: -/* 0000C9CC 0001975C 38 00 00 00 */ li r0, 0x0 -/* 0000C9D0 00019760 40 82 C9 DC */ bne .L_000093AC -/* 0000C9D4 00019764 21 2B 00 00 */ subfic r9, r11, 0x0 -/* 0000C9D8 00019768 7C 09 59 14 */ adde r0, r9, r11 -/* 0000C9DC 0001976C 7C 1E 03 78 */ mr r30, r0 -/* 0000C9E0 00019770 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 0000C9E4 00019774 40 82 CA 14 */ bne .L_000093F8 -/* 0000C9E8 00019778 80 9F 00 40 */ lwz r4, 0x40(r31) -/* 0000C9EC 0001977C 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0000C9F0 00019780 41 82 CA 20 */ beq .L_00009410 -/* 0000C9F4 00019784 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 0000C9F8 00019788 38 1F 00 18 */ addi r0, r31, 0x18 -.L_0000C9FC: -/* 0000C9FC 0001978C A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000CA00 00019790 81 29 00 1C */ lwz r9, 0x1c(r9) -.L_0000CA04: -/* 0000CA04 00019794 7C 60 1A 14 */ add r3, r0, r3 -.L_0000CA08: -/* 0000CA08 00019798 7D 28 03 A6 */ mtlr r9 -/* 0000CA0C 0001979C 4E 80 00 21 */ blrl -/* 0000CA10 000197A0 93 DF 00 40 */ stw r30, 0x40(r31) -/* 0000CA14 000197A4 80 1F 00 40 */ lwz r0, 0x40(r31) -/* 0000CA18 000197A8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000CA1C 000197AC 40 82 CB 28 */ bne .L_00009544 -/* 0000CA20 000197B0 80 7F 00 38 */ lwz r3, 0x38(r31) -/* 0000CA24 000197B4 81 23 00 04 */ lwz r9, 0x4(r3) -/* 0000CA28 000197B8 A8 09 00 10 */ lha r0, 0x10(r9) -/* 0000CA2C 000197BC 81 29 00 14 */ lwz r9, 0x14(r9) -.L_0000CA30: -/* 0000CA30 000197C0 7C 63 02 14 */ add r3, r3, r0 -/* 0000CA34 000197C4 7D 28 03 A6 */ mtlr r9 -/* 0000CA38 000197C8 4E 80 00 21 */ blrl -/* 0000CA3C 000197CC 7C 7D 1B 79 */ mr. r29, r3 -/* 0000CA40 000197D0 41 82 CB 28 */ beq .L_00009568 -.L_0000CA44: -/* 0000CA44 000197D4 81 3D 00 04 */ lwz r9, 0x4(r29) -/* 0000CA48 000197D8 3B DF 00 28 */ addi r30, r31, 0x28 -/* 0000CA4C 000197DC 80 09 00 EC */ lwz r0, 0xec(r9) -/* 0000CA50 000197E0 A8 69 00 E8 */ lha r3, 0xe8(r9) -/* 0000CA54 000197E4 7C 08 03 A6 */ mtlr r0 -/* 0000CA58 000197E8 7C 7D 1A 14 */ add r3, r29, r3 -/* 0000CA5C 000197EC 4E 80 00 21 */ blrl -/* 0000CA60 000197F0 7C 64 1B 78 */ mr r4, r3 -/* 0000CA64 000197F4 7F C3 F3 78 */ mr r3, r30 -.L_0000CA68: -/* 0000CA68 000197F8 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi -/* 0000CA6C 000197FC 80 1F 00 2C */ lwz r0, 0x2c(r31) -/* 0000CA70 00019800 39 20 00 01 */ li r9, 0x1 -/* 0000CA74 00019804 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000CA78 00019808 40 82 CA 80 */ bne .L_000094F8 -/* 0000CA7C 0001980C 39 20 00 00 */ li r9, 0x0 -/* 0000CA80 00019810 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0000CA84 00019814 41 82 CB 28 */ beq .L_000095AC -/* 0000CA88 00019818 80 7D 00 00 */ lwz r3, 0x0(r29) -/* 0000CA8C 0001981C 3C 80 00 00 */ lis r4, _IHandle__8IVehicle@ha -/* 0000CA90 00019820 38 84 00 00 */ addi r4, r4, _IHandle__8IVehicle@l -/* 0000CA94 00019824 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000CA98 00019828 38 00 00 01 */ li r0, 0x1 -/* 0000CA9C 0001982C 90 7F 00 40 */ stw r3, 0x40(r31) -/* 0000CAA0 00019830 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000CAA4 00019834 40 82 CA AC */ bne .L_00009550 -/* 0000CAA8 00019838 38 00 00 00 */ li r0, 0x0 -/* 0000CAAC 0001983C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000CAB0 00019840 41 82 CB 28 */ beq .L_000095D8 -/* 0000CAB4 00019844 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 0000CAB8 00019848 7C 64 1B 78 */ mr r4, r3 -/* 0000CABC 0001984C 38 1F 00 18 */ addi r0, r31, 0x18 -/* 0000CAC0 00019850 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000CAC4 00019854 81 29 00 14 */ lwz r9, 0x14(r9) -/* 0000CAC8 00019858 7C 60 1A 14 */ add r3, r0, r3 -/* 0000CACC 0001985C 7D 28 03 A6 */ mtlr r9 -/* 0000CAD0 00019860 4E 80 00 21 */ blrl -/* 0000CAD4 00019864 81 7F 00 40 */ lwz r11, 0x40(r31) -/* 0000CAD8 00019868 83 DF 00 24 */ lwz r30, 0x24(r31) -/* 0000CADC 0001986C 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000CAE0 00019870 A8 69 00 98 */ lha r3, 0x98(r9) -/* 0000CAE4 00019874 80 09 00 9C */ lwz r0, 0x9c(r9) -/* 0000CAE8 00019878 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000CAEC 0001987C 7C 08 03 A6 */ mtlr r0 -/* 0000CAF0 00019880 4E 80 00 21 */ blrl -/* 0000CAF4 00019884 81 23 00 08 */ lwz r9, 0x8(r3) -/* 0000CAF8 00019888 80 69 00 1C */ lwz r3, 0x1c(r9) -/* 0000CAFC 0001988C 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000CB00 00019890 40 82 CB 0C */ bne .L_0000960C -.L_0000CB04: -/* 0000CB04 00019894 3D 20 00 00 */ lis r9, .rodata@ha -.L_0000CB08: -/* 0000CB08 00019898 38 69 00 00 */ addi r3, r9, .rodata@l -/* 0000CB0C 0001989C 48 00 00 01 */ bl bStringHash__FPCc -/* 0000CB10 000198A0 7C 64 1B 78 */ mr r4, r3 -/* 0000CB14 000198A4 7F C3 F3 78 */ mr r3, r30 -/* 0000CB18 000198A8 48 00 13 CD */ bl .L_0000DEE4 -/* 0000CB1C 000198AC 81 3F 00 24 */ lwz r9, 0x24(r31) -/* 0000CB20 000198B0 80 1F 00 28 */ lwz r0, 0x28(r31) -/* 0000CB24 000198B4 90 09 00 8C */ stw r0, 0x8c(r9) -/* 0000CB28 000198B8 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0000CB2C 000198BC 7C 08 03 A6 */ mtlr r0 -/* 0000CB30 000198C0 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 0000CB34 000198C4 38 21 00 18 */ addi r1, r1, 0x18 -/* 0000CB38 000198C8 4E 80 00 20 */ blr -.endfn AquireCar__16CDActionShowcase - -# .text:0xCB3C | size: 0x1B8 -.fn Update__16CDActionShowcasef, global -/* 0000CB3C 000198CC 94 21 FF 90 */ stwu r1, -0x70(r1) -/* 0000CB40 000198D0 7C 08 02 A6 */ mflr r0 -/* 0000CB44 000198D4 F3 E1 00 68 */ psq_st f31, 0x68(r1), 0, qr0 -/* 0000CB48 000198D8 BF 81 00 58 */ stmw r28, 0x58(r1) -/* 0000CB4C 000198DC 90 01 00 74 */ stw r0, 0x74(r1) -/* 0000CB50 000198E0 7C 7F 1B 78 */ mr r31, r3 -/* 0000CB54 000198E4 FF E0 08 90 */ fmr f31, f1 -/* 0000CB58 000198E8 83 DF 00 38 */ lwz r30, 0x38(r31) -/* 0000CB5C 000198EC 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 0000CB60 000198F0 40 82 CB 94 */ bne .L_000096F4 -/* 0000CB64 000198F4 80 9F 00 40 */ lwz r4, 0x40(r31) -/* 0000CB68 000198F8 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0000CB6C 000198FC 41 82 CC DC */ beq .L_00009848 -/* 0000CB70 00019900 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 0000CB74 00019904 38 1F 00 18 */ addi r0, r31, 0x18 -/* 0000CB78 00019908 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000CB7C 0001990C 81 29 00 1C */ lwz r9, 0x1c(r9) -/* 0000CB80 00019910 7C 60 1A 14 */ add r3, r0, r3 -/* 0000CB84 00019914 7D 28 03 A6 */ mtlr r9 -/* 0000CB88 00019918 4E 80 00 21 */ blrl -/* 0000CB8C 0001991C 93 DF 00 40 */ stw r30, 0x40(r31) -/* 0000CB90 00019920 48 00 CC DC */ b .L_0001986C -/* 0000CB94 00019924 7F E3 FB 78 */ mr r3, r31 -/* 0000CB98 00019928 48 00 C9 65 */ bl .L_000194FC -/* 0000CB9C 0001992C 80 7F 00 2C */ lwz r3, 0x2c(r31) -/* 0000CBA0 00019930 38 00 00 01 */ li r0, 0x1 -/* 0000CBA4 00019934 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000CBA8 00019938 40 82 CB B0 */ bne .L_00009758 -/* 0000CBAC 0001993C 38 00 00 00 */ li r0, 0x0 -/* 0000CBB0 00019940 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000CBB4 00019944 41 82 CC DC */ beq .L_00009890 -/* 0000CBB8 00019948 38 81 00 08 */ addi r4, r1, 0x8 -/* 0000CBBC 0001994C 48 00 00 01 */ bl PSMTX44Copy -/* 0000CBC0 00019950 80 7F 00 40 */ lwz r3, 0x40(r31) -.L_0000CBC4: -/* 0000CBC4 00019954 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000CBC8 00019958 41 82 CC C4 */ beq .L_0000988C -/* 0000CBCC 0001995C 80 63 00 00 */ lwz r3, 0x0(r3) -/* 0000CBD0 00019960 3C 80 00 00 */ lis r4, _IHandle__14ICollisionBody@ha -.L_0000CBD4: -/* 0000CBD4 00019964 38 84 00 00 */ addi r4, r4, _IHandle__14ICollisionBody@l -/* 0000CBD8 00019968 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000CBDC 0001996C 7C 7C 1B 79 */ mr. r28, r3 -/* 0000CBE0 00019970 38 00 00 01 */ li r0, 0x1 -/* 0000CBE4 00019974 40 82 CB EC */ bne .L_000097D0 -/* 0000CBE8 00019978 38 00 00 00 */ li r0, 0x0 -/* 0000CBEC 0001997C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000CBF0 00019980 41 82 CC C4 */ beq .L_000098B4 -/* 0000CBF4 00019984 81 7F 00 40 */ lwz r11, 0x40(r31) -/* 0000CBF8 00019988 3B A1 00 48 */ addi r29, r1, 0x48 -/* 0000CBFC 0001998C 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000CC00 00019990 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0000CC04 00019994 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000CC08 00019998 7C 08 03 A6 */ mtlr r0 -/* 0000CC0C 0001999C 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000CC10 000199A0 4E 80 00 21 */ blrl -/* 0000CC14 000199A4 81 23 00 04 */ lwz r9, 0x4(r3) -/* 0000CC18 000199A8 A8 09 00 A8 */ lha r0, 0xa8(r9) -/* 0000CC1C 000199AC 81 29 00 AC */ lwz r9, 0xac(r9) -/* 0000CC20 000199B0 7C 63 02 14 */ add r3, r3, r0 -/* 0000CC24 000199B4 7D 28 03 A6 */ mtlr r9 -/* 0000CC28 000199B8 4E 80 00 21 */ blrl -/* 0000CC2C 000199BC 81 3C 00 04 */ lwz r9, 0x4(r28) -/* 0000CC30 000199C0 7C 7E 1B 78 */ mr r30, r3 -/* 0000CC34 000199C4 80 09 00 84 */ lwz r0, 0x84(r9) -/* 0000CC38 000199C8 A8 69 00 80 */ lha r3, 0x80(r9) -/* 0000CC3C 000199CC 7C 08 03 A6 */ mtlr r0 -/* 0000CC40 000199D0 7C 7C 1A 14 */ add r3, r28, r3 -/* 0000CC44 000199D4 4E 80 00 21 */ blrl -/* 0000CC48 000199D8 C1 A3 00 00 */ lfs f13, 0x0(r3) -/* 0000CC4C 000199DC 7F A4 EB 78 */ mr r4, r29 -/* 0000CC50 000199E0 38 A0 00 00 */ li r5, 0x0 -/* 0000CC54 000199E4 D1 A1 00 48 */ stfs f13, 0x48(r1) -/* 0000CC58 000199E8 C0 03 00 04 */ lfs f0, 0x4(r3) -/* 0000CC5C 000199EC D0 01 00 4C */ stfs f0, 0x4c(r1) -/* 0000CC60 000199F0 C1 A3 00 08 */ lfs f13, 0x8(r3) -/* 0000CC64 000199F4 D1 A1 00 50 */ stfs f13, 0x50(r1) -/* 0000CC68 000199F8 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000CC6C 000199FC 80 09 01 4C */ lwz r0, 0x14c(r9) -/* 0000CC70 00019A00 A8 69 01 48 */ lha r3, 0x148(r9) -/* 0000CC74 00019A04 7C 08 03 A6 */ mtlr r0 -/* 0000CC78 00019A08 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000CC7C 00019A0C 4E 80 00 21 */ blrl -/* 0000CC80 00019A10 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000CC84 00019A14 A8 69 00 48 */ lha r3, 0x48(r9) -/* 0000CC88 00019A18 80 09 00 4C */ lwz r0, 0x4c(r9) -/* 0000CC8C 00019A1C 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000CC90 00019A20 7C 08 03 A6 */ mtlr r0 -/* 0000CC94 00019A24 4E 80 00 21 */ blrl -/* 0000CC98 00019A28 7C 64 1B 78 */ mr r4, r3 -/* 0000CC9C 00019A2C 7F A3 EB 78 */ mr r3, r29 -/* 0000CCA0 00019A30 7C 65 1B 78 */ mr r5, r3 -/* 0000CCA4 00019A34 48 00 00 01 */ bl VU0_v3add__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 -/* 0000CCA8 00019A38 C0 01 00 48 */ lfs f0, 0x48(r1) -/* 0000CCAC 00019A3C C1 A1 00 50 */ lfs f13, 0x50(r1) -.L_0000CCB0: -/* 0000CCB0 00019A40 C1 81 00 4C */ lfs f12, 0x4c(r1) -/* 0000CCB4 00019A44 FC 00 00 50 */ fneg f0, f0 -/* 0000CCB8 00019A48 D1 A1 00 38 */ stfs f13, 0x38(r1) -/* 0000CCBC 00019A4C D0 01 00 3C */ stfs f0, 0x3c(r1) -/* 0000CCC0 00019A50 D1 81 00 40 */ stfs f12, 0x40(r1) -/* 0000CCC4 00019A54 80 DF 00 34 */ lwz r6, 0x34(r31) -.L_0000CCC8: -/* 0000CCC8 00019A58 FC 20 F8 90 */ fmr f1, f31 -/* 0000CCCC 00019A5C 80 7F 00 24 */ lwz r3, 0x24(r31) -/* 0000CCD0 00019A60 38 81 00 08 */ addi r4, r1, 0x8 -/* 0000CCD4 00019A64 80 BF 00 30 */ lwz r5, 0x30(r31) -.L_0000CCD8: -/* 0000CCD8 00019A68 48 00 17 65 */ bl .L_0000E43C -/* 0000CCDC 00019A6C 80 01 00 74 */ lwz r0, 0x74(r1) -/* 0000CCE0 00019A70 7C 08 03 A6 */ mtlr r0 -/* 0000CCE4 00019A74 BB 81 00 58 */ lmw r28, 0x58(r1) -.L_0000CCE8: -/* 0000CCE8 00019A78 E3 E1 00 68 */ psq_l f31, 0x68(r1), 0, qr0 -/* 0000CCEC 00019A7C 38 21 00 70 */ addi r1, r1, 0x70 -/* 0000CCF0 00019A80 4E 80 00 20 */ blr -.endfn Update__16CDActionShowcasef - -# .text:0xCCF4 | size: 0x74 -.fn GetName__C13CDActionDebug, global -/* 0000CCF4 00019A84 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0000CCF8 00019A88 7C 08 02 A6 */ mflr r0 -/* 0000CCFC 00019A8C BF A1 00 0C */ stmw r29, 0xc(r1) -/* 0000CD00 00019A90 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0000CD04 00019A94 3F E0 00 00 */ lis r31, _.tmp_11.11106@ha -/* 0000CD08 00019A98 80 1F 00 00 */ lwz r0, _.tmp_11.11106@l(r31) -/* 0000CD0C 00019A9C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000CD10 00019AA0 40 82 CD 4C */ bne .L_00009A5C -.L_0000CD14: -/* 0000CD14 00019AA4 3F C0 00 00 */ lis r30, .rodata+0x8D8@ha -/* 0000CD18 00019AA8 3F A0 00 00 */ lis r29, name.11105@ha -/* 0000CD1C 00019AAC 3B DE 08 D8 */ addi r30, r30, .rodata+0x8D8@l -.L_0000CD20: -/* 0000CD20 00019AB0 3B BD 00 00 */ addi r29, r29, name.11105@l -/* 0000CD24 00019AB4 7F C3 F3 78 */ mr r3, r30 -/* 0000CD28 00019AB8 48 00 00 01 */ bl StringHash64__6AttribPCc -/* 0000CD2C 00019ABC 90 7D 00 00 */ stw r3, 0x0(r29) -/* 0000CD30 00019AC0 90 9D 00 04 */ stw r4, 0x4(r29) -/* 0000CD34 00019AC4 7F C3 F3 78 */ mr r3, r30 -/* 0000CD38 00019AC8 48 00 00 01 */ bl StringHash32__6AttribPCc -/* 0000CD3C 00019ACC 38 00 00 01 */ li r0, 0x1 -.L_0000CD40: -/* 0000CD40 00019AD0 93 DD 00 0C */ stw r30, 0xc(r29) -/* 0000CD44 00019AD4 90 1F 00 00 */ stw r0, _.tmp_11.11106@l(r31) -.L_0000CD48: -/* 0000CD48 00019AD8 90 7D 00 08 */ stw r3, 0x8(r29) -/* 0000CD4C 00019ADC 3C 60 00 00 */ lis r3, name.11105@ha -/* 0000CD50 00019AE0 38 63 00 00 */ addi r3, r3, name.11105@l -.L_0000CD54: -/* 0000CD54 00019AE4 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0000CD58 00019AE8 7C 08 03 A6 */ mtlr r0 -/* 0000CD5C 00019AEC BB A1 00 0C */ lmw r29, 0xc(r1) -.L_0000CD60: -/* 0000CD60 00019AF0 38 21 00 18 */ addi r1, r1, 0x18 -/* 0000CD64 00019AF4 4E 80 00 20 */ blr -.endfn GetName__C13CDActionDebug - -# .text:0xCD68 | size: 0x84 -.fn GetNext__C13CDActionDebug, global -/* 0000CD68 00019AF8 94 21 FF F0 */ stwu r1, -0x10(r1) -.L_0000CD6C: -/* 0000CD6C 00019AFC 7C 08 02 A6 */ mflr r0 -/* 0000CD70 00019B00 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 0000CD74 00019B04 90 01 00 14 */ stw r0, 0x14(r1) -/* 0000CD78 00019B08 80 04 02 C8 */ lwz r0, 0x2c8(r4) -/* 0000CD7C 00019B0C 7C 7F 1B 78 */ mr r31, r3 -/* 0000CD80 00019B10 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000CD84 00019B14 41 82 CD AC */ beq .L_00009B30 -/* 0000CD88 00019B18 81 24 02 B8 */ lwz r9, 0x2b8(r4) -/* 0000CD8C 00019B1C 81 44 02 BC */ lwz r10, 0x2bc(r4) -/* 0000CD90 00019B20 91 3F 00 00 */ stw r9, 0x0(r31) -/* 0000CD94 00019B24 91 5F 00 04 */ stw r10, 0x4(r31) -/* 0000CD98 00019B28 80 04 02 C0 */ lwz r0, 0x2c0(r4) -/* 0000CD9C 00019B2C 90 1F 00 08 */ stw r0, 0x8(r31) -/* 0000CDA0 00019B30 81 24 02 C4 */ lwz r9, 0x2c4(r4) -/* 0000CDA4 00019B34 91 3F 00 0C */ stw r9, 0xc(r31) -/* 0000CDA8 00019B38 48 00 CD D4 */ b .L_00019B7C -/* 0000CDAC 00019B3C 3F C0 00 00 */ lis r30, .rodata@ha -/* 0000CDB0 00019B40 3B DE 00 00 */ addi r30, r30, .rodata@l -/* 0000CDB4 00019B44 7F C3 F3 78 */ mr r3, r30 -.L_0000CDB8: -/* 0000CDB8 00019B48 48 00 00 01 */ bl StringHash64__6AttribPCc -/* 0000CDBC 00019B4C 90 7F 00 00 */ stw r3, 0x0(r31) -/* 0000CDC0 00019B50 90 9F 00 04 */ stw r4, 0x4(r31) -.L_0000CDC4: -/* 0000CDC4 00019B54 7F C3 F3 78 */ mr r3, r30 -/* 0000CDC8 00019B58 48 00 00 01 */ bl StringHash32__6AttribPCc -/* 0000CDCC 00019B5C 90 7F 00 08 */ stw r3, 0x8(r31) -/* 0000CDD0 00019B60 93 DF 00 0C */ stw r30, 0xc(r31) -/* 0000CDD4 00019B64 7F E3 FB 78 */ mr r3, r31 -/* 0000CDD8 00019B68 80 01 00 14 */ lwz r0, 0x14(r1) -/* 0000CDDC 00019B6C 7C 08 03 A6 */ mtlr r0 -/* 0000CDE0 00019B70 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 0000CDE4 00019B74 38 21 00 10 */ addi r1, r1, 0x10 -/* 0000CDE8 00019B78 4E 80 00 20 */ blr -.endfn GetNext__C13CDActionDebug - -# .text:0xCDEC | size: 0x44 -.fn Construct__13CDActionDebugPQ28CameraAI8Director, global -/* 0000CDEC 00019B7C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 0000CDF0 00019B80 7C 08 02 A6 */ mflr r0 -/* 0000CDF4 00019B84 BF C1 00 08 */ stmw r30, 0x8(r1) -.L_0000CDF8: -/* 0000CDF8 00019B88 90 01 00 14 */ stw r0, 0x14(r1) -.L_0000CDFC: -/* 0000CDFC 00019B8C 7C 7E 1B 78 */ mr r30, r3 -/* 0000CE00 00019B90 38 80 02 D0 */ li r4, 0x2d0 -/* 0000CE04 00019B94 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0000CE08 00019B98 38 A0 00 00 */ li r5, 0x0 -/* 0000CE0C 00019B9C 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0000CE10 00019BA0 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 0000CE14 00019BA4 7F C4 F3 78 */ mr r4, r30 -/* 0000CE18 00019BA8 48 00 CE 31 */ bl .L_00019C48 -/* 0000CE1C 00019BAC 80 01 00 14 */ lwz r0, 0x14(r1) -/* 0000CE20 00019BB0 7C 08 03 A6 */ mtlr r0 -/* 0000CE24 00019BB4 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 0000CE28 00019BB8 38 21 00 10 */ addi r1, r1, 0x10 -/* 0000CE2C 00019BBC 4E 80 00 20 */ blr -.endfn Construct__13CDActionDebugPQ28CameraAI8Director - -# .text:0xCE30 | size: 0x2C8 -.fn __13CDActionDebugPQ28CameraAI8Director, global -/* 0000CE30 00019BC0 94 21 FF A0 */ stwu r1, -0x60(r1) -/* 0000CE34 00019BC4 7C 08 02 A6 */ mflr r0 -.L_0000CE38: -/* 0000CE38 00019BC8 7D 80 00 26 */ mfcr r12 -/* 0000CE3C 00019BCC BE A1 00 34 */ stmw r21, 0x34(r1) -/* 0000CE40 00019BD0 90 01 00 64 */ stw r0, 0x64(r1) -/* 0000CE44 00019BD4 91 81 00 30 */ stw r12, 0x30(r1) -/* 0000CE48 00019BD8 7C 7D 1B 78 */ mr r29, r3 -/* 0000CE4C 00019BDC 7C 97 23 78 */ mr r23, r4 -/* 0000CE50 00019BE0 38 80 00 00 */ li r4, 0x0 -.L_0000CE54: -/* 0000CE54 00019BE4 48 00 00 01 */ bl __Q43UTL3COM6Object6_IListUi -/* 0000CE58 00019BE8 3A DD 00 18 */ addi r22, r29, 0x18 -/* 0000CE5C 00019BEC 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha -/* 0000CE60 00019BF0 92 C1 00 28 */ stw r22, 0x28(r1) -/* 0000CE64 00019BF4 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l -/* 0000CE68 00019BF8 3F 20 00 00 */ lis r25, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha -/* 0000CE6C 00019BFC 91 3D 00 14 */ stw r9, 0x14(r29) -/* 0000CE70 00019C00 3B F9 00 00 */ addi r31, r25, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l -/* 0000CE74 00019C04 3A A1 00 28 */ addi r21, r1, 0x28 -/* 0000CE78 00019C08 3B 41 00 18 */ addi r26, r1, 0x18 -/* 0000CE7C 00019C0C 80 9F 00 08 */ lwz r4, 0x8(r31) -/* 0000CE80 00019C10 80 1F 00 04 */ lwz r0, 0x4(r31) -/* 0000CE84 00019C14 7C 04 00 40 */ cmplw r4, r0 -/* 0000CE88 00019C18 41 80 CF 68 */ blt .L_00009DF0 -/* 0000CE8C 00019C1C 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0000CE90 00019C20 38 84 00 01 */ addi r4, r4, 0x1 -/* 0000CE94 00019C24 80 09 00 24 */ lwz r0, 0x24(r9) -/* 0000CE98 00019C28 A8 69 00 20 */ lha r3, 0x20(r9) -/* 0000CE9C 00019C2C 7C 08 03 A6 */ mtlr r0 -/* 0000CEA0 00019C30 7C 63 FA 14 */ add r3, r3, r31 -/* 0000CEA4 00019C34 4E 80 00 21 */ blrl -/* 0000CEA8 00019C38 80 1F 00 04 */ lwz r0, 0x4(r31) -/* 0000CEAC 00019C3C 7C 7E 1B 78 */ mr r30, r3 -/* 0000CEB0 00019C40 7C 1E 00 40 */ cmplw r30, r0 -/* 0000CEB4 00019C44 40 81 CF 68 */ ble .L_00009E1C -/* 0000CEB8 00019C48 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0000CEBC 00019C4C 7F C4 F3 78 */ mr r4, r30 -/* 0000CEC0 00019C50 80 09 00 34 */ lwz r0, 0x34(r9) -/* 0000CEC4 00019C54 A8 69 00 30 */ lha r3, 0x30(r9) -/* 0000CEC8 00019C58 7C 08 03 A6 */ mtlr r0 -/* 0000CECC 00019C5C 7C 63 FA 14 */ add r3, r3, r31 -/* 0000CED0 00019C60 4E 80 00 21 */ blrl -/* 0000CED4 00019C64 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0000CED8 00019C68 7F C4 F3 78 */ mr r4, r30 -/* 0000CEDC 00019C6C 38 A0 00 10 */ li r5, 0x10 -/* 0000CEE0 00019C70 83 99 00 00 */ lwz r28, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r25) -/* 0000CEE4 00019C74 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000CEE8 00019C78 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000CEEC 00019C7C 7C 63 FA 14 */ add r3, r3, r31 -/* 0000CEF0 00019C80 83 7F 00 08 */ lwz r27, 0x8(r31) -/* 0000CEF4 00019C84 7C 08 03 A6 */ mtlr r0 -/* 0000CEF8 00019C88 83 1F 00 04 */ lwz r24, 0x4(r31) -/* 0000CEFC 00019C8C 4E 80 00 21 */ blrl -/* 0000CF00 00019C90 93 DF 00 04 */ stw r30, 0x4(r31) -/* 0000CF04 00019C94 7C 1C 18 00 */ cmpw r28, r3 -/* 0000CF08 00019C98 90 79 00 00 */ stw r3, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r25) -/* 0000CF0C 00019C9C 41 82 CF 68 */ beq .L_00009E74 -/* 0000CF10 00019CA0 38 00 00 00 */ li r0, 0x0 -/* 0000CF14 00019CA4 3B C0 00 00 */ li r30, 0x0 -/* 0000CF18 00019CA8 90 1F 00 08 */ stw r0, 0x8(r31) -/* 0000CF1C 00019CAC 7C 1E D8 00 */ cmpw r30, r27 -/* 0000CF20 00019CB0 2E 1C 00 00 */ cmpwi cr4, r28, 0x0 -/* 0000CF24 00019CB4 40 80 CF 44 */ bge .L_00009E68 -/* 0000CF28 00019CB8 57 C4 10 3A */ slwi r4, r30, 2 -/* 0000CF2C 00019CBC 7F E3 FB 78 */ mr r3, r31 -/* 0000CF30 00019CC0 7C 9C 22 14 */ add r4, r28, r4 -/* 0000CF34 00019CC4 3B DE 00 01 */ addi r30, r30, 0x1 -/* 0000CF38 00019CC8 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZP14ITrafficCenteri16RCP14ITrafficCenter -/* 0000CF3C 00019CCC 7C 1E D8 00 */ cmpw r30, r27 -/* 0000CF40 00019CD0 41 80 CF 28 */ blt .L_00009E68 -/* 0000CF44 00019CD4 41 92 CF 68 */ beq cr4, .L_00009EAC -/* 0000CF48 00019CD8 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0000CF4C 00019CDC 7F 84 E3 78 */ mr r4, r28 -/* 0000CF50 00019CE0 7F 05 C3 78 */ mr r5, r24 -.L_0000CF54: -/* 0000CF54 00019CE4 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000CF58 00019CE8 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0000CF5C 00019CEC 7C 7F 1A 14 */ add r3, r31, r3 -/* 0000CF60 00019CF0 7C 08 03 A6 */ mtlr r0 -/* 0000CF64 00019CF4 4E 80 00 21 */ blrl -/* 0000CF68 00019CF8 81 3F 00 08 */ lwz r9, 0x8(r31) -/* 0000CF6C 00019CFC 81 7F 00 00 */ lwz r11, 0x0(r31) -/* 0000CF70 00019D00 55 29 10 3A */ slwi r9, r9, 2 -.L_0000CF74: -/* 0000CF74 00019D04 7C 09 5A 14 */ add r0, r9, r11 -/* 0000CF78 00019D08 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000CF7C 00019D0C 41 82 CF 88 */ beq .L_00009F04 -/* 0000CF80 00019D10 80 15 00 00 */ lwz r0, 0x0(r21) -/* 0000CF84 00019D14 7C 09 59 2E */ stwx r0, r9, r11 -/* 0000CF88 00019D18 81 3F 00 08 */ lwz r9, 0x8(r31) -/* 0000CF8C 00019D1C 3D 60 00 00 */ lis r11, _vt.14ITrafficCenter@ha -/* 0000CF90 00019D20 39 6B 00 00 */ addi r11, r11, _vt.14ITrafficCenter@l -.L_0000CF94: -/* 0000CF94 00019D24 3D 00 00 00 */ lis r8, _vt.13CDActionDebug.14ITrafficCenter@ha -/* 0000CF98 00019D28 39 29 00 01 */ addi r9, r9, 0x1 -/* 0000CF9C 00019D2C 3D 40 00 00 */ lis r10, _vt.13CDActionDebug@ha -/* 0000CFA0 00019D30 91 3F 00 08 */ stw r9, 0x8(r31) -/* 0000CFA4 00019D34 39 08 00 00 */ addi r8, r8, _vt.13CDActionDebug.14ITrafficCenter@l -/* 0000CFA8 00019D38 91 76 00 04 */ stw r11, 0x4(r22) -/* 0000CFAC 00019D3C 39 4A 00 00 */ addi r10, r10, _vt.13CDActionDebug@l -.L_0000CFB0: -/* 0000CFB0 00019D40 3C C0 00 00 */ lis r6, .rodata+0x8E0@ha -/* 0000CFB4 00019D44 3C A0 98 C7 */ lis r5, 0x98c7 -/* 0000CFB8 00019D48 38 C6 08 E0 */ addi r6, r6, .rodata+0x8E0@l -/* 0000CFBC 00019D4C 91 1D 00 1C */ stw r8, 0x1c(r29) -/* 0000CFC0 00019D50 38 80 00 01 */ li r4, 0x1 -/* 0000CFC4 00019D54 60 A5 A2 F5 */ ori r5, r5, 0xa2f5 -/* 0000CFC8 00019D58 38 E0 00 00 */ li r7, 0x0 -/* 0000CFCC 00019D5C 91 5D 00 14 */ stw r10, 0x14(r29) -/* 0000CFD0 00019D60 38 7D 00 20 */ addi r3, r29, 0x20 -/* 0000CFD4 00019D64 48 00 00 01 */ bl __11ActionQueueiUiPCcb -/* 0000CFD8 00019D68 3D 60 00 00 */ lis r11, .rodata@ha -.L_0000CFDC: -/* 0000CFDC 00019D6C 39 20 00 00 */ li r9, 0x0 -/* 0000CFE0 00019D70 39 40 00 00 */ li r10, 0x0 -/* 0000CFE4 00019D74 38 00 00 00 */ li r0, 0x0 -/* 0000CFE8 00019D78 39 6B 00 00 */ addi r11, r11, .rodata@l -/* 0000CFEC 00019D7C 91 3D 02 B8 */ stw r9, 0x2b8(r29) -/* 0000CFF0 00019D80 91 5D 02 BC */ stw r10, 0x2bc(r29) -/* 0000CFF4 00019D84 91 7D 02 C4 */ stw r11, 0x2c4(r29) -/* 0000CFF8 00019D88 90 1D 02 C8 */ stw r0, 0x2c8(r29) -/* 0000CFFC 00019D8C 90 1D 02 C0 */ stw r0, 0x2c0(r29) -/* 0000D000 00019D90 81 77 00 18 */ lwz r11, 0x18(r23) -/* 0000D004 00019D94 81 2B 00 14 */ lwz r9, 0x14(r11) -/* 0000D008 00019D98 80 09 00 24 */ lwz r0, 0x24(r9) -.L_0000D00C: -/* 0000D00C 00019D9C A8 69 00 20 */ lha r3, 0x20(r9) -/* 0000D010 00019DA0 7C 08 03 A6 */ mtlr r0 -/* 0000D014 00019DA4 7C 6B 1A 14 */ add r3, r11, r3 -.L_0000D018: -/* 0000D018 00019DA8 4E 80 00 21 */ blrl -/* 0000D01C 00019DAC 7C 6B 1B 78 */ mr r11, r3 -/* 0000D020 00019DB0 80 0B 00 0C */ lwz r0, 0xc(r11) -/* 0000D024 00019DB4 7E E3 BB 78 */ mr r3, r23 -.L_0000D028: -/* 0000D028 00019DB8 90 1D 02 C4 */ stw r0, 0x2c4(r29) -/* 0000D02C 00019DBC 81 2B 00 00 */ lwz r9, 0x0(r11) -/* 0000D030 00019DC0 81 4B 00 04 */ lwz r10, 0x4(r11) -.L_0000D034: -/* 0000D034 00019DC4 91 3D 02 B8 */ stw r9, 0x2b8(r29) -/* 0000D038 00019DC8 91 5D 02 BC */ stw r10, 0x2bc(r29) -/* 0000D03C 00019DCC 80 0B 00 08 */ lwz r0, 0x8(r11) -/* 0000D040 00019DD0 90 1D 02 C0 */ stw r0, 0x2c0(r29) -/* 0000D044 00019DD4 48 00 60 85 */ bl .L_000130C8 -/* 0000D048 00019DD8 7C 63 1B 79 */ mr. r3, r3 -/* 0000D04C 00019DDC 41 82 D0 8C */ beq .L_0000A0D8 -/* 0000D050 00019DE0 81 23 00 1C */ lwz r9, 0x1c(r3) -/* 0000D054 00019DE4 C1 89 00 48 */ lfs f12, 0x48(r9) -/* 0000D058 00019DE8 C0 09 00 40 */ lfs f0, 0x40(r9) -/* 0000D05C 00019DEC C1 A9 00 44 */ lfs f13, 0x44(r9) -/* 0000D060 00019DF0 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 0000D064 00019DF4 D1 A1 00 0C */ stfs f13, 0xc(r1) -/* 0000D068 00019DF8 D1 81 00 10 */ stfs f12, 0x10(r1) -.L_0000D06C: -/* 0000D06C 00019DFC 81 23 00 1C */ lwz r9, 0x1c(r3) -/* 0000D070 00019E00 C1 89 00 58 */ lfs f12, 0x58(r9) -/* 0000D074 00019E04 C0 09 00 50 */ lfs f0, 0x50(r9) -/* 0000D078 00019E08 C1 A9 00 54 */ lfs f13, 0x54(r9) -/* 0000D07C 00019E0C D0 01 00 18 */ stfs f0, 0x18(r1) -/* 0000D080 00019E10 D1 A1 00 1C */ stfs f13, 0x1c(r1) -/* 0000D084 00019E14 D1 81 00 20 */ stfs f12, 0x20(r1) -/* 0000D088 00019E18 48 00 D0 B4 */ b .L_0001A13C -/* 0000D08C 00019E1C 3D 20 00 00 */ lis r9, .rodata+0x8EC@ha -/* 0000D090 00019E20 3D 60 00 00 */ lis r11, .rodata+0x8F0@ha -/* 0000D094 00019E24 C0 09 08 EC */ lfs f0, .rodata+0x8EC@l(r9) -.L_0000D098: -/* 0000D098 00019E28 C1 AB 08 F0 */ lfs f13, .rodata+0x8F0@l(r11) -/* 0000D09C 00019E2C D0 01 00 1C */ stfs f0, 0x1c(r1) -/* 0000D0A0 00019E30 D1 A1 00 20 */ stfs f13, 0x20(r1) -/* 0000D0A4 00019E34 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 0000D0A8 00019E38 D0 01 00 0C */ stfs f0, 0xc(r1) -/* 0000D0AC 00019E3C D0 01 00 10 */ stfs f0, 0x10(r1) -/* 0000D0B0 00019E40 D0 01 00 18 */ stfs f0, 0x18(r1) -/* 0000D0B4 00019E44 83 D7 00 04 */ lwz r30, 0x4(r23) -/* 0000D0B8 00019E48 38 60 00 A8 */ li r3, 0xa8 -/* 0000D0BC 00019E4C 48 00 00 01 */ bl __builtin_new -/* 0000D0C0 00019E50 7F C4 F3 78 */ mr r4, r30 -.L_0000D0C4: -/* 0000D0C4 00019E54 7F 46 D3 78 */ mr r6, r26 -/* 0000D0C8 00019E58 38 A1 00 08 */ addi r5, r1, 0x8 -/* 0000D0CC 00019E5C 7C 87 23 78 */ mr r7, r4 -/* 0000D0D0 00019E60 48 01 28 5D */ bl .text+0x1285C -/* 0000D0D4 00019E64 90 7D 02 B4 */ stw r3, 0x2b4(r29) -/* 0000D0D8 00019E68 7F A3 EB 78 */ mr r3, r29 -/* 0000D0DC 00019E6C 80 01 00 64 */ lwz r0, 0x64(r1) -/* 0000D0E0 00019E70 81 81 00 30 */ lwz r12, 0x30(r1) -/* 0000D0E4 00019E74 7C 08 03 A6 */ mtlr r0 -/* 0000D0E8 00019E78 BA A1 00 34 */ lmw r21, 0x34(r1) -/* 0000D0EC 00019E7C 7D 80 81 20 */ mtcrf 8, r12 -/* 0000D0F0 00019E80 38 21 00 60 */ addi r1, r1, 0x60 -/* 0000D0F4 00019E84 4E 80 00 20 */ blr -.endfn __13CDActionDebugPQ28CameraAI8Director - -# .text:0xD0F8 | size: 0x1C8 -.fn _._13CDActionDebug, global -/* 0000D0F8 00019E88 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 0000D0FC 00019E8C 7C 08 02 A6 */ mflr r0 -/* 0000D100 00019E90 BF 81 00 10 */ stmw r28, 0x10(r1) -.L_0000D104: -/* 0000D104 00019E94 90 01 00 24 */ stw r0, 0x24(r1) -/* 0000D108 00019E98 7C 7E 1B 78 */ mr r30, r3 -/* 0000D10C 00019E9C 3D 60 00 00 */ lis r11, _vt.13CDActionDebug.14ITrafficCenter@ha -/* 0000D110 00019EA0 81 5E 02 B4 */ lwz r10, 0x2b4(r30) -/* 0000D114 00019EA4 3D 20 00 00 */ lis r9, _vt.13CDActionDebug@ha -/* 0000D118 00019EA8 39 6B 00 00 */ addi r11, r11, _vt.13CDActionDebug.14ITrafficCenter@l -/* 0000D11C 00019EAC 39 29 00 00 */ addi r9, r9, _vt.13CDActionDebug@l -/* 0000D120 00019EB0 3B FE 00 18 */ addi r31, r30, 0x18 -/* 0000D124 00019EB4 7C 9C 23 78 */ mr r28, r4 -/* 0000D128 00019EB8 91 7E 00 1C */ stw r11, 0x1c(r30) -.L_0000D12C: -/* 0000D12C 00019EBC 2C 0A 00 00 */ cmpwi r10, 0x0 -/* 0000D130 00019EC0 91 3E 00 14 */ stw r9, 0x14(r30) -/* 0000D134 00019EC4 41 82 D1 54 */ beq .L_0000A288 -/* 0000D138 00019EC8 81 2A 00 08 */ lwz r9, 0x8(r10) -/* 0000D13C 00019ECC 38 80 00 03 */ li r4, 0x3 -/* 0000D140 00019ED0 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000D144 00019ED4 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000D148 00019ED8 7C 6A 1A 14 */ add r3, r10, r3 -/* 0000D14C 00019EDC 7C 08 03 A6 */ mtlr r0 -/* 0000D150 00019EE0 4E 80 00 21 */ blrl -/* 0000D154 00019EE4 38 7E 00 20 */ addi r3, r30, 0x20 -/* 0000D158 00019EE8 38 80 00 02 */ li r4, 0x2 -/* 0000D15C 00019EEC 48 00 00 01 */ bl _._11ActionQueue -/* 0000D160 00019EF0 3D 20 00 00 */ lis r9, _vt.14ITrafficCenter@ha -/* 0000D164 00019EF4 3D 40 00 00 */ lis r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha -/* 0000D168 00019EF8 39 29 00 00 */ addi r9, r9, _vt.14ITrafficCenter@l -/* 0000D16C 00019EFC 39 6A 00 00 */ addi r11, r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l -/* 0000D170 00019F00 91 3E 00 1C */ stw r9, 0x1c(r30) -/* 0000D174 00019F04 3B A1 00 08 */ addi r29, r1, 0x8 -/* 0000D178 00019F08 93 E1 00 08 */ stw r31, 0x8(r1) -/* 0000D17C 00019F0C 7F A5 EB 78 */ mr r5, r29 -/* 0000D180 00019F10 80 6A 00 00 */ lwz r3, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r10) -/* 0000D184 00019F14 80 0B 00 08 */ lwz r0, 0x8(r11) -/* 0000D188 00019F18 54 00 10 3A */ slwi r0, r0, 2 -/* 0000D18C 00019F1C 7F E3 02 14 */ add r31, r3, r0 -/* 0000D190 00019F20 7F E4 FB 78 */ mr r4, r31 -/* 0000D194 00019F24 48 00 00 01 */ bl find__H2ZPP14ITrafficCenterZP14ITrafficCenter_4_STLX01X01RCX11_X01 -/* 0000D198 00019F28 7C 03 F8 00 */ cmpw r3, r31 -/* 0000D19C 00019F2C 40 82 D1 A8 */ bne .L_0000A344 -/* 0000D1A0 00019F30 7F E3 FB 78 */ mr r3, r31 -/* 0000D1A4 00019F34 48 00 D1 D8 */ b .L_0001A37C -/* 0000D1A8 00019F38 39 63 00 04 */ addi r11, r3, 0x4 -/* 0000D1AC 00019F3C 7C 0B F8 00 */ cmpw r11, r31 -/* 0000D1B0 00019F40 41 82 D1 D8 */ beq .L_0000A388 -/* 0000D1B4 00019F44 81 2B 00 00 */ lwz r9, 0x0(r11) -/* 0000D1B8 00019F48 80 1D 00 00 */ lwz r0, 0x0(r29) -/* 0000D1BC 00019F4C 7C 09 00 00 */ cmpw r9, r0 -/* 0000D1C0 00019F50 41 82 D1 CC */ beq .L_0000A38C -.L_0000D1C4: -/* 0000D1C4 00019F54 91 23 00 00 */ stw r9, 0x0(r3) -/* 0000D1C8 00019F58 38 63 00 04 */ addi r3, r3, 0x4 -/* 0000D1CC 00019F5C 39 6B 00 04 */ addi r11, r11, 0x4 -/* 0000D1D0 00019F60 7C 0B F8 00 */ cmpw r11, r31 -/* 0000D1D4 00019F64 40 82 D1 B4 */ bne .L_0000A388 -.L_0000D1D8: -/* 0000D1D8 00019F68 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha -/* 0000D1DC 00019F6C 38 A9 00 00 */ addi r5, r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l -/* 0000D1E0 00019F70 81 49 00 00 */ lwz r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r9) -/* 0000D1E4 00019F74 81 05 00 08 */ lwz r8, 0x8(r5) -/* 0000D1E8 00019F78 55 00 10 3A */ slwi r0, r8, 2 -/* 0000D1EC 00019F7C 7D 6A 02 14 */ add r11, r10, r0 -/* 0000D1F0 00019F80 7C 03 58 00 */ cmpw r3, r11 -/* 0000D1F4 00019F84 41 82 D2 6C */ beq .L_0000A460 -/* 0000D1F8 00019F88 7D 23 58 50 */ subf r9, r3, r11 -/* 0000D1FC 00019F8C 7C 0A 18 50 */ subf r0, r10, r3 -/* 0000D200 00019F90 7D 3F 16 70 */ srawi r31, r9, 2 -/* 0000D204 00019F94 7C 06 16 70 */ srawi r6, r0, 2 -/* 0000D208 00019F98 7D 09 43 78 */ mr r9, r8 -/* 0000D20C 00019F9C 38 63 00 04 */ addi r3, r3, 0x4 -/* 0000D210 00019FA0 7C 03 58 00 */ cmpw r3, r11 -/* 0000D214 00019FA4 40 82 D2 0C */ bne .L_0000A420 -/* 0000D218 00019FA8 7C E6 FA 14 */ add r7, r6, r31 -/* 0000D21C 00019FAC 39 00 00 00 */ li r8, 0x0 -/* 0000D220 00019FB0 7C E4 3B 78 */ mr r4, r7 -/* 0000D224 00019FB4 7C 04 48 50 */ subf r0, r4, r9 -.L_0000D228: -/* 0000D228 00019FB8 7C 08 00 40 */ cmplw r8, r0 -/* 0000D22C 00019FBC 40 80 D2 64 */ bge .L_0000A490 -/* 0000D230 00019FC0 7C 06 42 14 */ add r0, r6, r8 -/* 0000D234 00019FC4 81 65 00 00 */ lwz r11, 0x0(r5) -/* 0000D238 00019FC8 54 0A 10 3A */ slwi r10, r0, 2 -/* 0000D23C 00019FCC 7D 27 42 14 */ add r9, r7, r8 -/* 0000D240 00019FD0 7C 0A 5A 14 */ add r0, r10, r11 -/* 0000D244 00019FD4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000D248 00019FD8 41 82 D2 58 */ beq .L_0000A4A0 -/* 0000D24C 00019FDC 55 29 10 3A */ slwi r9, r9, 2 -/* 0000D250 00019FE0 7C 09 58 2E */ lwzx r0, r9, r11 -/* 0000D254 00019FE4 7C 0A 59 2E */ stwx r0, r10, r11 -/* 0000D258 00019FE8 39 08 00 01 */ addi r8, r8, 0x1 -/* 0000D25C 00019FEC 81 25 00 08 */ lwz r9, 0x8(r5) -/* 0000D260 00019FF0 48 00 D2 24 */ b .L_0001A484 -/* 0000D264 00019FF4 7C 1F 48 50 */ subf r0, r31, r9 -/* 0000D268 00019FF8 90 05 00 08 */ stw r0, 0x8(r5) -/* 0000D26C 00019FFC 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha -/* 0000D270 0001A000 7F C3 F3 78 */ mr r3, r30 -/* 0000D274 0001A004 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l -/* 0000D278 0001A008 38 80 00 02 */ li r4, 0x2 -/* 0000D27C 0001A00C 91 3E 00 14 */ stw r9, 0x14(r30) -/* 0000D280 0001A010 48 00 00 01 */ bl _._Q43UTL3COM6Object6_IList -/* 0000D284 0001A014 73 80 00 01 */ andi. r0, r28, 0x1 -/* 0000D288 0001A018 41 82 D2 AC */ beq .L_0000A534 -/* 0000D28C 0001A01C 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 0000D290 0001A020 41 82 D2 AC */ beq .L_0000A53C -/* 0000D294 0001A024 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0000D298 0001A028 7F C4 F3 78 */ mr r4, r30 -/* 0000D29C 0001A02C 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0000D2A0 0001A030 38 A0 02 D0 */ li r5, 0x2d0 -/* 0000D2A4 0001A034 38 C0 00 00 */ li r6, 0x0 -/* 0000D2A8 0001A038 48 00 00 01 */ bl Free__7FastMemPvUiPCc -.L_0000D2AC: -/* 0000D2AC 0001A03C 80 01 00 24 */ lwz r0, 0x24(r1) -/* 0000D2B0 0001A040 7C 08 03 A6 */ mtlr r0 -/* 0000D2B4 0001A044 BB 81 00 10 */ lmw r28, 0x10(r1) -/* 0000D2B8 0001A048 38 21 00 20 */ addi r1, r1, 0x20 -/* 0000D2BC 0001A04C 4E 80 00 20 */ blr -.endfn _._13CDActionDebug - -# .text:0xD2C0 | size: 0x8C -.fn Update__13CDActionDebugf, global -/* 0000D2C0 0001A050 94 21 FF E0 */ stwu r1, -0x20(r1) -.L_0000D2C4: -/* 0000D2C4 0001A054 7C 08 02 A6 */ mflr r0 -/* 0000D2C8 0001A058 BF 81 00 10 */ stmw r28, 0x10(r1) -/* 0000D2CC 0001A05C 90 01 00 24 */ stw r0, 0x24(r1) -/* 0000D2D0 0001A060 7C 7F 1B 78 */ mr r31, r3 -/* 0000D2D4 0001A064 3F 80 00 00 */ lis r28, Tweak_EnableICEAuthoring@ha -/* 0000D2D8 0001A068 3B DF 00 20 */ addi r30, r31, 0x20 -/* 0000D2DC 0001A06C 3B A0 00 01 */ li r29, 0x1 -/* 0000D2E0 0001A070 48 00 D3 20 */ b .L_0001A600 -/* 0000D2E4 0001A074 4C C6 31 82 */ crclr cr1eq -/* 0000D2E8 0001A078 48 00 00 01 */ bl GetAction__11ActionQueue -/* 0000D2EC 0001A07C 81 21 00 08 */ lwz r9, 0x8(r1) -/* 0000D2F0 0001A080 38 00 00 00 */ li r0, 0x0 -/* 0000D2F4 0001A084 38 7F 00 20 */ addi r3, r31, 0x20 -/* 0000D2F8 0001A088 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0000D2FC 0001A08C 41 82 D3 04 */ beq .L_0000A600 -.L_0000D300: -/* 0000D300 0001A090 80 09 00 00 */ lwz r0, 0x0(r9) -/* 0000D304 0001A094 2C 00 00 15 */ cmpwi r0, 0x15 -/* 0000D308 0001A098 40 82 D3 1C */ bne .L_0000A624 -/* 0000D30C 0001A09C 80 1C 00 00 */ lwz r0, Tweak_EnableICEAuthoring@l(r28) -/* 0000D310 0001A0A0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000D314 0001A0A4 40 82 D3 1C */ bne .L_0000A630 -/* 0000D318 0001A0A8 93 BF 02 C8 */ stw r29, 0x2c8(r31) -/* 0000D31C 0001A0AC 48 00 00 01 */ bl PopAction__11ActionQueue -.L_0000D320: -/* 0000D320 0001A0B0 7F C3 F3 78 */ mr r3, r30 -/* 0000D324 0001A0B4 48 00 00 01 */ bl IsEmpty__11ActionQueue -/* 0000D328 0001A0B8 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000D32C 0001A0BC 7F C4 F3 78 */ mr r4, r30 -/* 0000D330 0001A0C0 38 61 00 08 */ addi r3, r1, 0x8 -/* 0000D334 0001A0C4 41 82 D2 E4 */ beq .L_0000A618 -/* 0000D338 0001A0C8 80 01 00 24 */ lwz r0, 0x24(r1) -/* 0000D33C 0001A0CC 7C 08 03 A6 */ mtlr r0 -/* 0000D340 0001A0D0 BB 81 00 10 */ lmw r28, 0x10(r1) -/* 0000D344 0001A0D4 38 21 00 20 */ addi r1, r1, 0x20 -/* 0000D348 0001A0D8 4E 80 00 20 */ blr -.endfn Update__13CDActionDebugf - -# .text:0xD34C | size: 0x68 -.fn GetTrafficBasis__13CDActionDebugRQ25UMath7Matrix4RQ25UMath7Vector3, global -/* 0000D34C 0001A0DC 94 21 FF A0 */ stwu r1, -0x60(r1) -/* 0000D350 0001A0E0 7C 08 02 A6 */ mflr r0 -/* 0000D354 0001A0E4 BF 61 00 4C */ stmw r27, 0x4c(r1) -/* 0000D358 0001A0E8 90 01 00 64 */ stw r0, 0x64(r1) -/* 0000D35C 0001A0EC 7C 7D 1B 78 */ mr r29, r3 -/* 0000D360 0001A0F0 7C 9C 23 78 */ mr r28, r4 -/* 0000D364 0001A0F4 81 3D 02 B4 */ lwz r9, 0x2b4(r29) -.L_0000D368: -/* 0000D368 0001A0F8 3B C1 00 08 */ addi r30, r1, 0x8 -/* 0000D36C 0001A0FC 7C BB 2B 78 */ mr r27, r5 -/* 0000D370 0001A100 7F C3 F3 78 */ mr r3, r30 -/* 0000D374 0001A104 80 89 00 1C */ lwz r4, 0x1c(r9) -/* 0000D378 0001A108 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 -/* 0000D37C 0001A10C 7F C3 F3 78 */ mr r3, r30 -/* 0000D380 0001A110 7F 84 E3 78 */ mr r4, r28 -/* 0000D384 0001A114 48 00 00 01 */ bl RightToLeftMatrix4__H2Z8bMatrix4ZQ25UMath7Matrix4__14ConversionUtilRCX01RX11_v -/* 0000D388 0001A118 81 3D 02 B4 */ lwz r9, 0x2b4(r29) -/* 0000D38C 0001A11C 7F 64 DB 78 */ mr r4, r27 -/* 0000D390 0001A120 80 69 00 1C */ lwz r3, 0x1c(r9) -/* 0000D394 0001A124 38 63 01 E8 */ addi r3, r3, 0x1e8 -/* 0000D398 0001A128 48 00 00 01 */ bl RightToLeftVector3__H2Z8bVector3ZQ25UMath7Vector3__14ConversionUtilRCX01RX11_v -/* 0000D39C 0001A12C 38 60 00 01 */ li r3, 0x1 -/* 0000D3A0 0001A130 80 01 00 64 */ lwz r0, 0x64(r1) -/* 0000D3A4 0001A134 7C 08 03 A6 */ mtlr r0 -/* 0000D3A8 0001A138 BB 61 00 4C */ lmw r27, 0x4c(r1) -/* 0000D3AC 0001A13C 38 21 00 60 */ addi r1, r1, 0x60 -/* 0000D3B0 0001A140 4E 80 00 20 */ blr -.endfn GetTrafficBasis__13CDActionDebugRQ25UMath7Matrix4RQ25UMath7Vector3 - -# .text:0xD3B4 | size: 0x74 -.fn GetName__C11CDActionIce, global -/* 0000D3B4 0001A144 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0000D3B8 0001A148 7C 08 02 A6 */ mflr r0 -/* 0000D3BC 0001A14C BF A1 00 0C */ stmw r29, 0xc(r1) -/* 0000D3C0 0001A150 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0000D3C4 0001A154 3F E0 00 00 */ lis r31, _.tmp_12.11291@ha -/* 0000D3C8 0001A158 80 1F 00 00 */ lwz r0, _.tmp_12.11291@l(r31) -/* 0000D3CC 0001A15C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000D3D0 0001A160 40 82 D4 0C */ bne .L_0000A7DC -/* 0000D3D4 0001A164 3F C0 00 00 */ lis r30, .rodata+0x77C@ha -/* 0000D3D8 0001A168 3F A0 00 00 */ lis r29, name.11290@ha -/* 0000D3DC 0001A16C 3B DE 07 7C */ addi r30, r30, .rodata+0x77C@l -.L_0000D3E0: -/* 0000D3E0 0001A170 3B BD 00 00 */ addi r29, r29, name.11290@l -/* 0000D3E4 0001A174 7F C3 F3 78 */ mr r3, r30 -.L_0000D3E8: -/* 0000D3E8 0001A178 48 00 00 01 */ bl StringHash64__6AttribPCc -/* 0000D3EC 0001A17C 90 7D 00 00 */ stw r3, 0x0(r29) -/* 0000D3F0 0001A180 90 9D 00 04 */ stw r4, 0x4(r29) -/* 0000D3F4 0001A184 7F C3 F3 78 */ mr r3, r30 -.L_0000D3F8: -/* 0000D3F8 0001A188 48 00 00 01 */ bl StringHash32__6AttribPCc -/* 0000D3FC 0001A18C 38 00 00 01 */ li r0, 0x1 -/* 0000D400 0001A190 93 DD 00 0C */ stw r30, 0xc(r29) -/* 0000D404 0001A194 90 1F 00 00 */ stw r0, _.tmp_12.11291@l(r31) -/* 0000D408 0001A198 90 7D 00 08 */ stw r3, 0x8(r29) -/* 0000D40C 0001A19C 3C 60 00 00 */ lis r3, name.11290@ha -/* 0000D410 0001A1A0 38 63 00 00 */ addi r3, r3, name.11290@l -/* 0000D414 0001A1A4 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0000D418 0001A1A8 7C 08 03 A6 */ mtlr r0 -/* 0000D41C 0001A1AC BB A1 00 0C */ lmw r29, 0xc(r1) -.L_0000D420: -/* 0000D420 0001A1B0 38 21 00 18 */ addi r1, r1, 0x18 -/* 0000D424 0001A1B4 4E 80 00 20 */ blr -.endfn GetName__C11CDActionIce - -# .text:0xD428 | size: 0x84 -.fn GetNext__C11CDActionIce, global -/* 0000D428 0001A1B8 94 21 FF F0 */ stwu r1, -0x10(r1) -.L_0000D42C: -/* 0000D42C 0001A1BC 7C 08 02 A6 */ mflr r0 -/* 0000D430 0001A1C0 BF C1 00 08 */ stmw r30, 0x8(r1) -.L_0000D434: -/* 0000D434 0001A1C4 90 01 00 14 */ stw r0, 0x14(r1) -/* 0000D438 0001A1C8 80 04 02 F0 */ lwz r0, 0x2f0(r4) -/* 0000D43C 0001A1CC 7C 7F 1B 78 */ mr r31, r3 -/* 0000D440 0001A1D0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000D444 0001A1D4 41 82 D4 6C */ beq .L_0000A8B0 -/* 0000D448 0001A1D8 81 24 02 B8 */ lwz r9, 0x2b8(r4) -/* 0000D44C 0001A1DC 81 44 02 BC */ lwz r10, 0x2bc(r4) -/* 0000D450 0001A1E0 91 3F 00 00 */ stw r9, 0x0(r31) -/* 0000D454 0001A1E4 91 5F 00 04 */ stw r10, 0x4(r31) -/* 0000D458 0001A1E8 80 04 02 C0 */ lwz r0, 0x2c0(r4) -/* 0000D45C 0001A1EC 90 1F 00 08 */ stw r0, 0x8(r31) -/* 0000D460 0001A1F0 81 24 02 C4 */ lwz r9, 0x2c4(r4) -/* 0000D464 0001A1F4 91 3F 00 0C */ stw r9, 0xc(r31) -/* 0000D468 0001A1F8 48 00 D4 94 */ b .L_0001A8FC -/* 0000D46C 0001A1FC 3F C0 00 00 */ lis r30, .rodata@ha -/* 0000D470 0001A200 3B DE 00 00 */ addi r30, r30, .rodata@l -/* 0000D474 0001A204 7F C3 F3 78 */ mr r3, r30 -/* 0000D478 0001A208 48 00 00 01 */ bl StringHash64__6AttribPCc -/* 0000D47C 0001A20C 90 7F 00 00 */ stw r3, 0x0(r31) -/* 0000D480 0001A210 90 9F 00 04 */ stw r4, 0x4(r31) -/* 0000D484 0001A214 7F C3 F3 78 */ mr r3, r30 -/* 0000D488 0001A218 48 00 00 01 */ bl StringHash32__6AttribPCc -/* 0000D48C 0001A21C 90 7F 00 08 */ stw r3, 0x8(r31) -/* 0000D490 0001A220 93 DF 00 0C */ stw r30, 0xc(r31) -/* 0000D494 0001A224 7F E3 FB 78 */ mr r3, r31 -/* 0000D498 0001A228 80 01 00 14 */ lwz r0, 0x14(r1) -/* 0000D49C 0001A22C 7C 08 03 A6 */ mtlr r0 -/* 0000D4A0 0001A230 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 0000D4A4 0001A234 38 21 00 10 */ addi r1, r1, 0x10 -/* 0000D4A8 0001A238 4E 80 00 20 */ blr -.endfn GetNext__C11CDActionIce - -# .text:0xD4AC | size: 0x8 -# CDActionIce::GetMover -.fn GetMover__11CDActionIce, global -/* 0000D4AC 0001A23C 80 63 02 CC */ lwz r3, 0x2cc(r3) -/* 0000D4B0 0001A240 4E 80 00 20 */ blr -.endfn GetMover__11CDActionIce - -# .text:0xD4B4 | size: 0x24 -.fn Attach__11CDActionIcePQ33UTL3COM8IUnknown, global -/* 0000D4B4 0001A244 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0000D4B8 0001A248 7C 08 02 A6 */ mflr r0 -/* 0000D4BC 0001A24C 90 01 00 0C */ stw r0, 0xc(r1) -/* 0000D4C0 0001A250 80 63 02 E4 */ lwz r3, 0x2e4(r3) -/* 0000D4C4 0001A254 48 00 00 01 */ bl Attach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -/* 0000D4C8 0001A258 80 01 00 0C */ lwz r0, 0xc(r1) -.L_0000D4CC: -/* 0000D4CC 0001A25C 7C 08 03 A6 */ mtlr r0 -.L_0000D4D0: -/* 0000D4D0 0001A260 38 21 00 08 */ addi r1, r1, 0x8 -/* 0000D4D4 0001A264 4E 80 00 20 */ blr -.endfn Attach__11CDActionIcePQ33UTL3COM8IUnknown - -# .text:0xD4D8 | size: 0x24 -.fn Detach__11CDActionIcePQ33UTL3COM8IUnknown, global -/* 0000D4D8 0001A268 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0000D4DC 0001A26C 7C 08 02 A6 */ mflr r0 -/* 0000D4E0 0001A270 90 01 00 0C */ stw r0, 0xc(r1) -/* 0000D4E4 0001A274 80 63 02 E4 */ lwz r3, 0x2e4(r3) -/* 0000D4E8 0001A278 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -/* 0000D4EC 0001A27C 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0000D4F0 0001A280 7C 08 03 A6 */ mtlr r0 -/* 0000D4F4 0001A284 38 21 00 08 */ addi r1, r1, 0x8 -/* 0000D4F8 0001A288 4E 80 00 20 */ blr -.endfn Detach__11CDActionIcePQ33UTL3COM8IUnknown - -# .text:0xD4FC | size: 0x24 -.fn IsAttached__C11CDActionIcePCQ33UTL3COM8IUnknown, global -/* 0000D4FC 0001A28C 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0000D500 0001A290 7C 08 02 A6 */ mflr r0 -/* 0000D504 0001A294 90 01 00 0C */ stw r0, 0xc(r1) -/* 0000D508 0001A298 80 63 02 E4 */ lwz r3, 0x2e4(r3) -/* 0000D50C 0001A29C 48 00 00 01 */ bl IsAttached__CQ23Sim11AttachmentsPCQ33UTL3COM8IUnknown -/* 0000D510 0001A2A0 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0000D514 0001A2A4 7C 08 03 A6 */ mtlr r0 -/* 0000D518 0001A2A8 38 21 00 08 */ addi r1, r1, 0x8 -/* 0000D51C 0001A2AC 4E 80 00 20 */ blr -.endfn IsAttached__C11CDActionIcePCQ33UTL3COM8IUnknown - -# .text:0xD520 | size: 0x8 -.fn GetAttachments__C11CDActionIce, global -/* 0000D520 0001A2B0 80 63 02 E4 */ lwz r3, 0x2e4(r3) -/* 0000D524 0001A2B4 4E 80 00 20 */ blr -.endfn GetAttachments__C11CDActionIce - -# .text:0xD528 | size: 0x138 -.fn Construct__11CDActionIcePQ28CameraAI8Director, global -/* 0000D528 0001A2B8 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 0000D52C 0001A2BC 7C 08 02 A6 */ mflr r0 -/* 0000D530 0001A2C0 BF 61 00 0C */ stmw r27, 0xc(r1) -/* 0000D534 0001A2C4 90 01 00 24 */ stw r0, 0x24(r1) -/* 0000D538 0001A2C8 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@ha -/* 0000D53C 0001A2CC 7C 7C 1B 78 */ mr r28, r3 -.L_0000D540: -/* 0000D540 0001A2D0 39 29 00 00 */ addi r9, r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@l -/* 0000D544 0001A2D4 3B 60 00 00 */ li r27, 0x0 -/* 0000D548 0001A2D8 83 E9 00 30 */ lwz r31, 0x30(r9) -/* 0000D54C 0001A2DC 3B A9 00 30 */ addi r29, r9, 0x30 -/* 0000D550 0001A2E0 80 1D 00 08 */ lwz r0, 0x8(r29) -/* 0000D554 0001A2E4 81 3D 00 00 */ lwz r9, 0x0(r29) -/* 0000D558 0001A2E8 54 00 10 3A */ slwi r0, r0, 2 -/* 0000D55C 0001A2EC 7D 29 02 14 */ add r9, r9, r0 -/* 0000D560 0001A2F0 7C 1F 48 00 */ cmpw r31, r9 -/* 0000D564 0001A2F4 41 82 D5 9C */ beq .L_0000AB00 -/* 0000D568 0001A2F8 83 DF 00 00 */ lwz r30, 0x0(r31) -/* 0000D56C 0001A2FC 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000D570 0001A300 80 09 00 64 */ lwz r0, 0x64(r9) -/* 0000D574 0001A304 A8 69 00 60 */ lha r3, 0x60(r9) -.L_0000D578: -/* 0000D578 0001A308 7C 08 03 A6 */ mtlr r0 -/* 0000D57C 0001A30C 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000D580 0001A310 4E 80 00 21 */ blrl -/* 0000D584 0001A314 80 1C 00 04 */ lwz r0, 0x4(r28) -/* 0000D588 0001A318 7C 03 00 00 */ cmpw r3, r0 -.L_0000D58C: -/* 0000D58C 0001A31C 41 82 D5 98 */ beq .L_0000AB24 -/* 0000D590 0001A320 3B FF 00 04 */ addi r31, r31, 0x4 -/* 0000D594 0001A324 48 00 D5 50 */ b .L_0001AAE4 -/* 0000D598 0001A328 7F DB F3 78 */ mr r27, r30 -/* 0000D59C 0001A32C 2C 1B 00 00 */ cmpwi r27, 0x0 -/* 0000D5A0 0001A330 41 82 D6 20 */ beq .L_0000ABC0 -/* 0000D5A4 0001A334 81 3B 00 04 */ lwz r9, 0x4(r27) -.L_0000D5A8: -/* 0000D5A8 0001A338 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000D5AC 0001A33C 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000D5B0 0001A340 7C 7B 1A 14 */ add r3, r27, r3 -.L_0000D5B4: -/* 0000D5B4 0001A344 7C 08 03 A6 */ mtlr r0 -/* 0000D5B8 0001A348 4E 80 00 21 */ blrl -.L_0000D5BC: -/* 0000D5BC 0001A34C 7C 7F 1B 79 */ mr. r31, r3 -/* 0000D5C0 0001A350 41 82 D6 20 */ beq .L_0000ABE0 -/* 0000D5C4 0001A354 3C 80 00 00 */ lis r4, _IHandle__8IVehicle@ha -/* 0000D5C8 0001A358 80 7F 00 00 */ lwz r3, 0x0(r31) -/* 0000D5CC 0001A35C 38 84 00 00 */ addi r4, r4, _IHandle__8IVehicle@l -/* 0000D5D0 0001A360 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000D5D4 0001A364 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000D5D8 0001A368 41 82 D6 20 */ beq .L_0000ABF8 -.L_0000D5DC: -/* 0000D5DC 0001A36C 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 0000D5E0 0001A370 A8 69 00 E8 */ lha r3, 0xe8(r9) -/* 0000D5E4 0001A374 80 09 00 EC */ lwz r0, 0xec(r9) -/* 0000D5E8 0001A378 7C 7F 1A 14 */ add r3, r31, r3 -/* 0000D5EC 0001A37C 7C 08 03 A6 */ mtlr r0 -/* 0000D5F0 0001A380 4E 80 00 21 */ blrl -/* 0000D5F4 0001A384 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000D5F8 0001A388 41 82 D6 20 */ beq .L_0000AC18 -/* 0000D5FC 0001A38C 3D 20 00 00 */ lis r9, Tweak_ForceICEReplay@ha -/* 0000D600 0001A390 80 09 00 00 */ lwz r0, Tweak_ForceICEReplay@l(r9) -/* 0000D604 0001A394 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000D608 0001A398 40 82 D6 28 */ bne .L_0000AC30 -/* 0000D60C 0001A39C 3C 60 00 00 */ lis r3, TheICEManager@ha -/* 0000D610 0001A3A0 38 63 00 00 */ addi r3, r3, TheICEManager@l -/* 0000D614 0001A3A4 48 01 94 1D */ bl .text+0x1941C -/* 0000D618 0001A3A8 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000D61C 0001A3AC 40 82 D6 28 */ bne .L_0000AC44 -/* 0000D620 0001A3B0 38 60 00 00 */ li r3, 0x0 -/* 0000D624 0001A3B4 48 00 D6 4C */ b .L_0001AC70 -/* 0000D628 0001A3B8 3C A0 00 00 */ lis r5, .rodata+0x8F4@ha -/* 0000D62C 0001A3BC 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0000D630 0001A3C0 38 A5 08 F4 */ addi r5, r5, .rodata+0x8F4@l -/* 0000D634 0001A3C4 38 80 02 F8 */ li r4, 0x2f8 -/* 0000D638 0001A3C8 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0000D63C 0001A3CC 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 0000D640 0001A3D0 7F 84 E3 78 */ mr r4, r28 -/* 0000D644 0001A3D4 7F 65 DB 78 */ mr r5, r27 -/* 0000D648 0001A3D8 48 00 D6 61 */ bl .L_0001ACA8 -/* 0000D64C 0001A3DC 80 01 00 24 */ lwz r0, 0x24(r1) -/* 0000D650 0001A3E0 7C 08 03 A6 */ mtlr r0 -/* 0000D654 0001A3E4 BB 61 00 0C */ lmw r27, 0xc(r1) -/* 0000D658 0001A3E8 38 21 00 20 */ addi r1, r1, 0x20 -/* 0000D65C 0001A3EC 4E 80 00 20 */ blr -.endfn Construct__11CDActionIcePQ28CameraAI8Director - -# .text:0xD660 | size: 0x328 -.fn __11CDActionIcePQ28CameraAI8DirectorP7IPlayer, global -/* 0000D660 0001A3F0 94 21 FF 88 */ stwu r1, -0x78(r1) -.L_0000D664: -/* 0000D664 0001A3F4 7C 08 02 A6 */ mflr r0 -/* 0000D668 0001A3F8 BF 01 00 58 */ stmw r24, 0x58(r1) -/* 0000D66C 0001A3FC 90 01 00 7C */ stw r0, 0x7c(r1) -/* 0000D670 0001A400 7C 7F 1B 78 */ mr r31, r3 -/* 0000D674 0001A404 7C 98 23 78 */ mr r24, r4 -/* 0000D678 0001A408 7C BA 2B 78 */ mr r26, r5 -/* 0000D67C 0001A40C 38 80 00 00 */ li r4, 0x0 -/* 0000D680 0001A410 3B 7F 00 18 */ addi r27, r31, 0x18 -/* 0000D684 0001A414 48 00 00 01 */ bl __Q43UTL3COM6Object6_IListUi -/* 0000D688 0001A418 3B 80 00 00 */ li r28, 0x0 -/* 0000D68C 0001A41C 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha -/* 0000D690 0001A420 3D 60 00 00 */ lis r11, _vt.Q33UTL3COM8IUnknown@ha -/* 0000D694 0001A424 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l -/* 0000D698 0001A428 39 6B 00 00 */ addi r11, r11, _vt.Q33UTL3COM8IUnknown@l -/* 0000D69C 0001A42C 3C 80 00 00 */ lis r4, _IHandle__11IAttachable@ha -/* 0000D6A0 0001A430 93 FF 00 18 */ stw r31, 0x18(r31) -/* 0000D6A4 0001A434 3B 21 00 08 */ addi r25, r1, 0x8 -/* 0000D6A8 0001A438 38 84 00 00 */ addi r4, r4, _IHandle__11IAttachable@l -/* 0000D6AC 0001A43C 91 3F 00 14 */ stw r9, 0x14(r31) -/* 0000D6B0 0001A440 7F E3 FB 78 */ mr r3, r31 -/* 0000D6B4 0001A444 91 7F 00 1C */ stw r11, 0x1c(r31) -/* 0000D6B8 0001A448 7F 65 DB 78 */ mr r5, r27 -/* 0000D6BC 0001A44C 48 00 00 01 */ bl Add__Q43UTL3COM6Object6_IListPvPQ33UTL3COM8IUnknown -.L_0000D6C0: -/* 0000D6C0 0001A450 3B DF 02 D0 */ addi r30, r31, 0x2d0 -.L_0000D6C4: -/* 0000D6C4 0001A454 3D 20 00 00 */ lis r9, _vt.11CDActionIce.11IAttachable@ha -/* 0000D6C8 0001A458 3D 60 00 00 */ lis r11, _vt.11CDActionIce@ha -/* 0000D6CC 0001A45C 39 29 00 00 */ addi r9, r9, _vt.11CDActionIce.11IAttachable@l -/* 0000D6D0 0001A460 39 6B 00 00 */ addi r11, r11, _vt.11CDActionIce@l -/* 0000D6D4 0001A464 3C C0 00 00 */ lis r6, .rodata+0x77C@ha -/* 0000D6D8 0001A468 3C A0 98 C7 */ lis r5, 0x98c7 -/* 0000D6DC 0001A46C 38 E0 00 00 */ li r7, 0x0 -/* 0000D6E0 0001A470 38 C6 07 7C */ addi r6, r6, .rodata+0x77C@l -/* 0000D6E4 0001A474 60 A5 A2 F5 */ ori r5, r5, 0xa2f5 -/* 0000D6E8 0001A478 91 3F 00 1C */ stw r9, 0x1c(r31) -/* 0000D6EC 0001A47C 91 7F 00 14 */ stw r11, 0x14(r31) -/* 0000D6F0 0001A480 38 80 00 01 */ li r4, 0x1 -/* 0000D6F4 0001A484 38 7F 00 20 */ addi r3, r31, 0x20 -/* 0000D6F8 0001A488 48 00 00 01 */ bl __11ActionQueueiUiPCcb -/* 0000D6FC 0001A48C 39 20 00 00 */ li r9, 0x0 -/* 0000D700 0001A490 3D 60 00 00 */ lis r11, .rodata@ha -/* 0000D704 0001A494 39 40 00 00 */ li r10, 0x0 -/* 0000D708 0001A498 39 6B 00 00 */ addi r11, r11, .rodata@l -/* 0000D70C 0001A49C 91 21 00 08 */ stw r9, 0x8(r1) -/* 0000D710 0001A4A0 91 41 00 0C */ stw r10, 0xc(r1) -/* 0000D714 0001A4A4 38 80 00 00 */ li r4, 0x0 -/* 0000D718 0001A4A8 93 99 00 08 */ stw r28, 0x8(r25) -/* 0000D71C 0001A4AC 7F 23 CB 78 */ mr r3, r25 -/* 0000D720 0001A4B0 91 61 00 14 */ stw r11, 0x14(r1) -/* 0000D724 0001A4B4 81 21 00 08 */ lwz r9, 0x8(r1) -/* 0000D728 0001A4B8 81 41 00 0C */ lwz r10, 0xc(r1) -/* 0000D72C 0001A4BC 80 19 00 08 */ lwz r0, 0x8(r25) -/* 0000D730 0001A4C0 93 9F 02 D0 */ stw r28, 0x2d0(r31) -/* 0000D734 0001A4C4 93 9F 02 D4 */ stw r28, 0x2d4(r31) -/* 0000D738 0001A4C8 93 9F 02 D8 */ stw r28, 0x2d8(r31) -/* 0000D73C 0001A4CC 93 9F 02 DC */ stw r28, 0x2dc(r31) -/* 0000D740 0001A4D0 93 9F 02 F0 */ stw r28, 0x2f0(r31) -/* 0000D744 0001A4D4 93 9F 02 EC */ stw r28, 0x2ec(r31) -/* 0000D748 0001A4D8 91 3F 02 B8 */ stw r9, 0x2b8(r31) -/* 0000D74C 0001A4DC 91 5F 02 BC */ stw r10, 0x2bc(r31) -/* 0000D750 0001A4E0 91 7F 02 C4 */ stw r11, 0x2c4(r31) -/* 0000D754 0001A4E4 90 1F 02 C0 */ stw r0, 0x2c0(r31) -.L_0000D758: -/* 0000D758 0001A4E8 48 00 00 01 */ bl __Q29WorldConn9ReferenceUi -/* 0000D75C 0001A4EC 81 61 00 08 */ lwz r11, 0x8(r1) -/* 0000D760 0001A4F0 7F 23 CB 78 */ mr r3, r25 -/* 0000D764 0001A4F4 81 59 00 04 */ lwz r10, 0x4(r25) -/* 0000D768 0001A4F8 38 80 00 02 */ li r4, 0x2 -/* 0000D76C 0001A4FC 80 19 00 0C */ lwz r0, 0xc(r25) -/* 0000D770 0001A500 81 39 00 08 */ lwz r9, 0x8(r25) -/* 0000D774 0001A504 91 7F 02 D0 */ stw r11, 0x2d0(r31) -/* 0000D778 0001A508 90 1E 00 0C */ stw r0, 0xc(r30) -/* 0000D77C 0001A50C 91 5E 00 04 */ stw r10, 0x4(r30) -/* 0000D780 0001A510 91 3E 00 08 */ stw r9, 0x8(r30) -/* 0000D784 0001A514 48 00 00 01 */ bl _._Q29WorldConn9Reference -/* 0000D788 0001A518 3F A0 00 00 */ lis r29, gFastMem@ha -/* 0000D78C 0001A51C 93 5F 02 E0 */ stw r26, 0x2e0(r31) -/* 0000D790 0001A520 3B BD 00 00 */ addi r29, r29, gFastMem@l -/* 0000D794 0001A524 93 9F 02 E8 */ stw r28, 0x2e8(r31) -.L_0000D798: -/* 0000D798 0001A528 38 80 00 10 */ li r4, 0x10 -/* 0000D79C 0001A52C 38 A0 00 00 */ li r5, 0x0 -/* 0000D7A0 0001A530 7F A3 EB 78 */ mr r3, r29 -/* 0000D7A4 0001A534 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 0000D7A8 0001A538 7C 7E 1B 78 */ mr r30, r3 -/* 0000D7AC 0001A53C 3D 20 00 00 */ lis r9, _vt.Q23Sim11Attachments@ha -/* 0000D7B0 0001A540 39 29 00 00 */ addi r9, r9, _vt.Q23Sim11Attachments@l -/* 0000D7B4 0001A544 93 9E 00 04 */ stw r28, 0x4(r30) -/* 0000D7B8 0001A548 38 A0 00 00 */ li r5, 0x0 -/* 0000D7BC 0001A54C 91 3E 00 0C */ stw r9, 0xc(r30) -/* 0000D7C0 0001A550 38 80 00 0C */ li r4, 0xc -/* 0000D7C4 0001A554 7F A3 EB 78 */ mr r3, r29 -.L_0000D7C8: -/* 0000D7C8 0001A558 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 0000D7CC 0001A55C 7C 69 1B 78 */ mr r9, r3 -/* 0000D7D0 0001A560 91 29 00 00 */ stw r9, 0x0(r9) -/* 0000D7D4 0001A564 7F C3 F3 78 */ mr r3, r30 -.L_0000D7D8: -/* 0000D7D8 0001A568 91 29 00 04 */ stw r9, 0x4(r9) -/* 0000D7DC 0001A56C 91 3E 00 04 */ stw r9, 0x4(r30) -/* 0000D7E0 0001A570 93 7E 00 08 */ stw r27, 0x8(r30) -/* 0000D7E4 0001A574 93 DF 02 E4 */ stw r30, 0x2e4(r31) -/* 0000D7E8 0001A578 80 9F 02 E0 */ lwz r4, 0x2e0(r31) -/* 0000D7EC 0001A57C 48 00 00 01 */ bl Attach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -/* 0000D7F0 0001A580 7F 03 C3 78 */ mr r3, r24 -/* 0000D7F4 0001A584 48 00 60 85 */ bl .L_00013878 -/* 0000D7F8 0001A588 7C 6B 1B 79 */ mr. r11, r3 -/* 0000D7FC 0001A58C 41 82 D8 18 */ beq .L_0000B014 -/* 0000D800 0001A590 81 2B 00 08 */ lwz r9, 0x8(r11) -/* 0000D804 0001A594 A8 69 00 28 */ lha r3, 0x28(r9) -/* 0000D808 0001A598 80 09 00 2C */ lwz r0, 0x2c(r9) -/* 0000D80C 0001A59C 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000D810 0001A5A0 7C 08 03 A6 */ mtlr r0 -/* 0000D814 0001A5A4 4E 80 00 21 */ blrl -/* 0000D818 0001A5A8 38 60 00 94 */ li r3, 0x94 -/* 0000D81C 0001A5AC 48 00 00 01 */ bl __builtin_new -/* 0000D820 0001A5B0 48 01 41 6D */ bl .text+0x1416C -/* 0000D824 0001A5B4 90 7F 02 C8 */ stw r3, 0x2c8(r31) -/* 0000D828 0001A5B8 7F E3 FB 78 */ mr r3, r31 -/* 0000D82C 0001A5BC 48 00 DB FD */ bl .L_0001B428 -/* 0000D830 0001A5C0 80 7F 02 D4 */ lwz r3, 0x2d4(r31) -/* 0000D834 0001A5C4 38 00 00 01 */ li r0, 0x1 -/* 0000D838 0001A5C8 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000D83C 0001A5CC 40 82 D8 44 */ bne .L_0000B080 -/* 0000D840 0001A5D0 38 00 00 00 */ li r0, 0x0 -/* 0000D844 0001A5D4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000D848 0001A5D8 41 82 D9 58 */ beq .L_0000B1A0 -/* 0000D84C 0001A5DC 38 81 00 18 */ addi r4, r1, 0x18 -/* 0000D850 0001A5E0 48 00 00 01 */ bl PSMTX44Copy -/* 0000D854 0001A5E4 81 3F 02 E8 */ lwz r9, 0x2e8(r31) -/* 0000D858 0001A5E8 3C 80 00 00 */ lis r4, _IHandle__14ICollisionBody@ha -/* 0000D85C 0001A5EC 38 84 00 00 */ addi r4, r4, _IHandle__14ICollisionBody@l -/* 0000D860 0001A5F0 80 69 00 00 */ lwz r3, 0x0(r9) -/* 0000D864 0001A5F4 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000D868 0001A5F8 7C 7D 1B 79 */ mr. r29, r3 -/* 0000D86C 0001A5FC 41 82 D9 3C */ beq .L_0000B1A8 -/* 0000D870 0001A600 81 7F 02 E8 */ lwz r11, 0x2e8(r31) -/* 0000D874 0001A604 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000D878 0001A608 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0000D87C 0001A60C A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000D880 0001A610 7C 08 03 A6 */ mtlr r0 -/* 0000D884 0001A614 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000D888 0001A618 4E 80 00 21 */ blrl -.L_0000D88C: -/* 0000D88C 0001A61C 81 23 00 04 */ lwz r9, 0x4(r3) -/* 0000D890 0001A620 A8 09 00 A8 */ lha r0, 0xa8(r9) -/* 0000D894 0001A624 81 29 00 AC */ lwz r9, 0xac(r9) -/* 0000D898 0001A628 7C 63 02 14 */ add r3, r3, r0 -/* 0000D89C 0001A62C 7D 28 03 A6 */ mtlr r9 -/* 0000D8A0 0001A630 4E 80 00 21 */ blrl -/* 0000D8A4 0001A634 81 3D 00 04 */ lwz r9, 0x4(r29) -/* 0000D8A8 0001A638 7C 7E 1B 78 */ mr r30, r3 -/* 0000D8AC 0001A63C 80 09 00 84 */ lwz r0, 0x84(r9) -/* 0000D8B0 0001A640 A8 69 00 80 */ lha r3, 0x80(r9) -/* 0000D8B4 0001A644 7C 08 03 A6 */ mtlr r0 -/* 0000D8B8 0001A648 7C 7D 1A 14 */ add r3, r29, r3 -/* 0000D8BC 0001A64C 4E 80 00 21 */ blrl -/* 0000D8C0 0001A650 C1 A3 00 00 */ lfs f13, 0x0(r3) -.L_0000D8C4: -/* 0000D8C4 0001A654 7F 24 CB 78 */ mr r4, r25 -/* 0000D8C8 0001A658 38 A0 00 00 */ li r5, 0x0 -/* 0000D8CC 0001A65C D1 A1 00 08 */ stfs f13, 0x8(r1) -.L_0000D8D0: -/* 0000D8D0 0001A660 C0 03 00 04 */ lfs f0, 0x4(r3) -.L_0000D8D4: -/* 0000D8D4 0001A664 D0 01 00 0C */ stfs f0, 0xc(r1) -/* 0000D8D8 0001A668 C1 A3 00 08 */ lfs f13, 0x8(r3) -/* 0000D8DC 0001A66C D1 B9 00 08 */ stfs f13, 0x8(r25) -/* 0000D8E0 0001A670 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000D8E4 0001A674 80 09 01 4C */ lwz r0, 0x14c(r9) -/* 0000D8E8 0001A678 A8 69 01 48 */ lha r3, 0x148(r9) -/* 0000D8EC 0001A67C 7C 08 03 A6 */ mtlr r0 -/* 0000D8F0 0001A680 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000D8F4 0001A684 4E 80 00 21 */ blrl -/* 0000D8F8 0001A688 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000D8FC 0001A68C A8 69 00 48 */ lha r3, 0x48(r9) -/* 0000D900 0001A690 80 09 00 4C */ lwz r0, 0x4c(r9) -/* 0000D904 0001A694 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000D908 0001A698 7C 08 03 A6 */ mtlr r0 -/* 0000D90C 0001A69C 4E 80 00 21 */ blrl -/* 0000D910 0001A6A0 7C 64 1B 78 */ mr r4, r3 -/* 0000D914 0001A6A4 7F 25 CB 78 */ mr r5, r25 -/* 0000D918 0001A6A8 7F 23 CB 78 */ mr r3, r25 -/* 0000D91C 0001A6AC 48 00 00 01 */ bl VU0_v3add__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 -/* 0000D920 0001A6B0 C0 01 00 08 */ lfs f0, 0x8(r1) -/* 0000D924 0001A6B4 C1 B9 00 08 */ lfs f13, 0x8(r25) -/* 0000D928 0001A6B8 C1 81 00 0C */ lfs f12, 0xc(r1) -/* 0000D92C 0001A6BC FC 00 00 50 */ fneg f0, f0 -/* 0000D930 0001A6C0 D1 A1 00 08 */ stfs f13, 0x8(r1) -/* 0000D934 0001A6C4 D0 01 00 0C */ stfs f0, 0xc(r1) -/* 0000D938 0001A6C8 D1 99 00 08 */ stfs f12, 0x8(r25) -/* 0000D93C 0001A6CC 3D 20 00 00 */ lis r9, .rodata+0x900@ha -/* 0000D940 0001A6D0 80 7F 02 C8 */ lwz r3, 0x2c8(r31) -/* 0000D944 0001A6D4 C0 29 09 00 */ lfs f1, .rodata+0x900@l(r9) -/* 0000D948 0001A6D8 80 9F 02 D4 */ lwz r4, 0x2d4(r31) -/* 0000D94C 0001A6DC 80 BF 02 D8 */ lwz r5, 0x2d8(r31) -/* 0000D950 0001A6E0 80 DF 02 DC */ lwz r6, 0x2dc(r31) -/* 0000D954 0001A6E4 48 01 42 49 */ bl .text+0x14248 -/* 0000D958 0001A6E8 38 60 01 2C */ li r3, 0x12c -/* 0000D95C 0001A6EC 48 00 00 01 */ bl __builtin_new -/* 0000D960 0001A6F0 80 98 00 04 */ lwz r4, 0x4(r24) -/* 0000D964 0001A6F4 80 BF 02 C8 */ lwz r5, 0x2c8(r31) -.L_0000D968: -/* 0000D968 0001A6F8 48 01 3C 09 */ bl .text+0x13C08 -/* 0000D96C 0001A6FC 90 7F 02 CC */ stw r3, 0x2cc(r31) -/* 0000D970 0001A700 7F E3 FB 78 */ mr r3, r31 -.L_0000D974: -/* 0000D974 0001A704 80 01 00 7C */ lwz r0, 0x7c(r1) -/* 0000D978 0001A708 7C 08 03 A6 */ mtlr r0 -/* 0000D97C 0001A70C BB 01 00 58 */ lmw r24, 0x58(r1) -/* 0000D980 0001A710 38 21 00 78 */ addi r1, r1, 0x78 -/* 0000D984 0001A714 4E 80 00 20 */ blr -.endfn __11CDActionIcePQ28CameraAI8DirectorP7IPlayer - -# .text:0xD988 | size: 0x14C -.fn _._11CDActionIce, global -/* 0000D988 0001A718 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0000D98C 0001A71C 7C 08 02 A6 */ mflr r0 -/* 0000D990 0001A720 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 0000D994 0001A724 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0000D998 0001A728 3D 20 00 00 */ lis r9, .rodata@ha -/* 0000D99C 0001A72C 7C 7F 1B 78 */ mr r31, r3 -/* 0000D9A0 0001A730 39 29 00 00 */ addi r9, r9, .rodata@l -/* 0000D9A4 0001A734 7C 9D 23 78 */ mr r29, r4 -.L_0000D9A8: -/* 0000D9A8 0001A738 3D 60 00 00 */ lis r11, _vt.11CDActionIce.11IAttachable@ha -/* 0000D9AC 0001A73C 3D 40 00 00 */ lis r10, _vt.11CDActionIce@ha -/* 0000D9B0 0001A740 7D 24 4B 78 */ mr r4, r9 -/* 0000D9B4 0001A744 39 6B 00 00 */ addi r11, r11, _vt.11CDActionIce.11IAttachable@l -/* 0000D9B8 0001A748 39 4A 00 00 */ addi r10, r10, _vt.11CDActionIce@l -.L_0000D9BC: -/* 0000D9BC 0001A74C 3C 60 00 00 */ lis r3, TheICEManager@ha -/* 0000D9C0 0001A750 7C 85 23 78 */ mr r5, r4 -/* 0000D9C4 0001A754 91 7F 00 1C */ stw r11, 0x1c(r31) -/* 0000D9C8 0001A758 91 5F 00 14 */ stw r10, 0x14(r31) -/* 0000D9CC 0001A75C 38 63 00 00 */ addi r3, r3, TheICEManager@l -/* 0000D9D0 0001A760 48 01 88 7D */ bl .text+0x1887C -/* 0000D9D4 0001A764 3B DF 00 18 */ addi r30, r31, 0x18 -.L_0000D9D8: -/* 0000D9D8 0001A768 80 9F 02 E0 */ lwz r4, 0x2e0(r31) -/* 0000D9DC 0001A76C 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0000D9E0 0001A770 41 82 D9 EC */ beq .L_0000B3CC -/* 0000D9E4 0001A774 80 7F 02 E4 */ lwz r3, 0x2e4(r31) -.L_0000D9E8: -/* 0000D9E8 0001A778 48 00 00 01 */ bl Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown -/* 0000D9EC 0001A77C 7F E3 FB 78 */ mr r3, r31 -/* 0000D9F0 0001A780 38 80 00 01 */ li r4, 0x1 -/* 0000D9F4 0001A784 48 00 DB 8D */ bl .L_0001B580 -/* 0000D9F8 0001A788 81 7F 02 CC */ lwz r11, 0x2cc(r31) -/* 0000D9FC 0001A78C 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000DA00 0001A790 41 82 DA 20 */ beq .L_0000B420 -/* 0000DA04 0001A794 81 2B 00 08 */ lwz r9, 0x8(r11) -/* 0000DA08 0001A798 38 80 00 03 */ li r4, 0x3 -/* 0000DA0C 0001A79C A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000DA10 0001A7A0 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000DA14 0001A7A4 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000DA18 0001A7A8 7C 08 03 A6 */ mtlr r0 -/* 0000DA1C 0001A7AC 4E 80 00 21 */ blrl -/* 0000DA20 0001A7B0 80 7F 02 C8 */ lwz r3, 0x2c8(r31) -/* 0000DA24 0001A7B4 48 00 00 01 */ bl __builtin_delete -/* 0000DA28 0001A7B8 81 7F 02 E4 */ lwz r11, 0x2e4(r31) -/* 0000DA2C 0001A7BC 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000DA30 0001A7C0 41 82 DA 50 */ beq .L_0000B480 -/* 0000DA34 0001A7C4 81 2B 00 0C */ lwz r9, 0xc(r11) -/* 0000DA38 0001A7C8 38 80 00 03 */ li r4, 0x3 -/* 0000DA3C 0001A7CC A8 69 00 08 */ lha r3, 0x8(r9) -/* 0000DA40 0001A7D0 80 09 00 0C */ lwz r0, 0xc(r9) -/* 0000DA44 0001A7D4 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000DA48 0001A7D8 7C 08 03 A6 */ mtlr r0 -/* 0000DA4C 0001A7DC 4E 80 00 21 */ blrl -/* 0000DA50 0001A7E0 38 7F 02 D0 */ addi r3, r31, 0x2d0 -/* 0000DA54 0001A7E4 38 80 00 02 */ li r4, 0x2 -/* 0000DA58 0001A7E8 48 00 00 01 */ bl _._Q29WorldConn9Reference -/* 0000DA5C 0001A7EC 38 7F 00 20 */ addi r3, r31, 0x20 -/* 0000DA60 0001A7F0 38 80 00 02 */ li r4, 0x2 -/* 0000DA64 0001A7F4 48 00 00 01 */ bl _._11ActionQueue -/* 0000DA68 0001A7F8 3D 20 00 00 */ lis r9, _vt.Q33UTL3COM8IUnknown@ha -/* 0000DA6C 0001A7FC 80 7F 00 18 */ lwz r3, 0x18(r31) -/* 0000DA70 0001A800 39 29 00 00 */ addi r9, r9, _vt.Q33UTL3COM8IUnknown@l -/* 0000DA74 0001A804 7F C4 F3 78 */ mr r4, r30 -/* 0000DA78 0001A808 91 3F 00 1C */ stw r9, 0x1c(r31) -/* 0000DA7C 0001A80C 48 00 00 01 */ bl Remove__Q43UTL3COM6Object6_IListPQ33UTL3COM8IUnknown -/* 0000DA80 0001A810 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha -/* 0000DA84 0001A814 7F E3 FB 78 */ mr r3, r31 -/* 0000DA88 0001A818 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l -/* 0000DA8C 0001A81C 38 80 00 02 */ li r4, 0x2 -/* 0000DA90 0001A820 91 3F 00 14 */ stw r9, 0x14(r31) -/* 0000DA94 0001A824 48 00 00 01 */ bl _._Q43UTL3COM6Object6_IList -/* 0000DA98 0001A828 73 A0 00 01 */ andi. r0, r29, 0x1 -/* 0000DA9C 0001A82C 41 82 DA C0 */ beq .L_0000B55C -/* 0000DAA0 0001A830 2C 1F 00 00 */ cmpwi r31, 0x0 -/* 0000DAA4 0001A834 41 82 DA C0 */ beq .L_0000B564 -/* 0000DAA8 0001A838 3C 60 00 00 */ lis r3, gFastMem@ha -.L_0000DAAC: -/* 0000DAAC 0001A83C 7F E4 FB 78 */ mr r4, r31 -/* 0000DAB0 0001A840 38 63 00 00 */ addi r3, r3, gFastMem@l -.L_0000DAB4: -/* 0000DAB4 0001A844 38 A0 02 F8 */ li r5, 0x2f8 -/* 0000DAB8 0001A848 38 C0 00 00 */ li r6, 0x0 -/* 0000DABC 0001A84C 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 0000DAC0 0001A850 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0000DAC4 0001A854 7C 08 03 A6 */ mtlr r0 -/* 0000DAC8 0001A858 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 0000DACC 0001A85C 38 21 00 18 */ addi r1, r1, 0x18 -/* 0000DAD0 0001A860 4E 80 00 20 */ blr -.endfn _._11CDActionIce - -# .text:0xDAD4 | size: 0xB8 -.fn OnDetached__11CDActionIceP11IAttachable, global -/* 0000DAD4 0001A864 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0000DAD8 0001A868 7C 08 02 A6 */ mflr r0 -/* 0000DADC 0001A86C 90 01 00 0C */ stw r0, 0xc(r1) -/* 0000DAE0 0001A870 7C 84 23 79 */ mr. r4, r4 -/* 0000DAE4 0001A874 81 23 02 E0 */ lwz r9, 0x2e0(r3) -/* 0000DAE8 0001A878 4F 80 00 00 */ mcrf cr7, cr0 -/* 0000DAEC 0001A87C 41 9E DB 10 */ beq cr7, .L_0000B5FC -/* 0000DAF0 0001A880 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0000DAF4 0001A884 41 82 DB 10 */ beq .L_0000B604 -/* 0000DAF8 0001A888 81 29 00 00 */ lwz r9, 0x0(r9) -/* 0000DAFC 0001A88C 80 04 00 00 */ lwz r0, 0x0(r4) -/* 0000DB00 0001A890 7C 00 4A 78 */ xor r0, r0, r9 -/* 0000DB04 0001A894 21 60 00 00 */ subfic r11, r0, 0x0 -/* 0000DB08 0001A898 7C 0B 01 14 */ adde r0, r11, r0 -.L_0000DB0C: -/* 0000DB0C 0001A89C 48 00 DB 24 */ b .L_0001B630 -/* 0000DB10 0001A8A0 38 00 00 00 */ li r0, 0x0 -/* 0000DB14 0001A8A4 2F 84 00 00 */ cmpwi cr7, r4, 0x0 -/* 0000DB18 0001A8A8 40 9E DB 24 */ bne cr7, .L_0000B63C -/* 0000DB1C 0001A8AC 21 69 00 00 */ subfic r11, r9, 0x0 -/* 0000DB20 0001A8B0 7C 0B 49 14 */ adde r0, r11, r9 -/* 0000DB24 0001A8B4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000DB28 0001A8B8 41 82 DB 34 */ beq .L_0000B65C -/* 0000DB2C 0001A8BC 38 00 00 00 */ li r0, 0x0 -/* 0000DB30 0001A8C0 90 03 02 E0 */ stw r0, 0x2e0(r3) -/* 0000DB34 0001A8C4 81 63 02 E8 */ lwz r11, 0x2e8(r3) -/* 0000DB38 0001A8C8 41 9E DB 5C */ beq cr7, .L_0000B694 -/* 0000DB3C 0001A8CC 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000DB40 0001A8D0 41 82 DB 5C */ beq .L_0000B69C -/* 0000DB44 0001A8D4 81 24 00 00 */ lwz r9, 0x0(r4) -/* 0000DB48 0001A8D8 80 0B 00 00 */ lwz r0, 0x0(r11) -/* 0000DB4C 0001A8DC 7D 20 02 78 */ xor r0, r9, r0 -/* 0000DB50 0001A8E0 21 60 00 00 */ subfic r11, r0, 0x0 -/* 0000DB54 0001A8E4 7C 0B 01 14 */ adde r0, r11, r0 -.L_0000DB58: -/* 0000DB58 0001A8E8 48 00 DB 6C */ b .L_0001B6C4 -/* 0000DB5C 0001A8EC 38 00 00 00 */ li r0, 0x0 -/* 0000DB60 0001A8F0 40 9E DB 6C */ bne cr7, .L_0000B6CC -/* 0000DB64 0001A8F4 21 2B 00 00 */ subfic r9, r11, 0x0 -/* 0000DB68 0001A8F8 7C 09 59 14 */ adde r0, r9, r11 -/* 0000DB6C 0001A8FC 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000DB70 0001A900 41 82 DB 7C */ beq .L_0000B6EC -/* 0000DB74 0001A904 38 80 00 00 */ li r4, 0x0 -/* 0000DB78 0001A908 48 00 DB 8D */ bl .L_0001B704 -/* 0000DB7C 0001A90C 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0000DB80 0001A910 7C 08 03 A6 */ mtlr r0 -/* 0000DB84 0001A914 38 21 00 08 */ addi r1, r1, 0x8 -/* 0000DB88 0001A918 4E 80 00 20 */ blr -.endfn OnDetached__11CDActionIceP11IAttachable - -# .text:0xDB8C | size: 0x70 -.fn ReleaseCar__11CDActionIceb, global -/* 0000DB8C 0001A91C 94 21 FF F0 */ stwu r1, -0x10(r1) -.L_0000DB90: -/* 0000DB90 0001A920 7C 08 02 A6 */ mflr r0 -/* 0000DB94 0001A924 93 E1 00 0C */ stw r31, 0xc(r1) -/* 0000DB98 0001A928 90 01 00 14 */ stw r0, 0x14(r1) -/* 0000DB9C 0001A92C 7C 7F 1B 78 */ mr r31, r3 -/* 0000DBA0 0001A930 81 7F 02 E8 */ lwz r11, 0x2e8(r31) -/* 0000DBA4 0001A934 2C 0B 00 00 */ cmpwi r11, 0x0 -.L_0000DBA8: -/* 0000DBA8 0001A938 41 82 DB DC */ beq .L_0000B784 -/* 0000DBAC 0001A93C 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0000DBB0 0001A940 41 82 DB D4 */ beq .L_0000B784 -/* 0000DBB4 0001A944 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 0000DBB8 0001A948 38 1F 00 18 */ addi r0, r31, 0x18 -/* 0000DBBC 0001A94C 7D 64 5B 78 */ mr r4, r11 -.L_0000DBC0: -/* 0000DBC0 0001A950 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000DBC4 0001A954 81 29 00 1C */ lwz r9, 0x1c(r9) -/* 0000DBC8 0001A958 7C 60 1A 14 */ add r3, r0, r3 -/* 0000DBCC 0001A95C 7D 28 03 A6 */ mtlr r9 -/* 0000DBD0 0001A960 4E 80 00 21 */ blrl -/* 0000DBD4 0001A964 38 00 00 00 */ li r0, 0x0 -/* 0000DBD8 0001A968 90 1F 02 E8 */ stw r0, 0x2e8(r31) -.L_0000DBDC: -/* 0000DBDC 0001A96C 38 7F 02 D0 */ addi r3, r31, 0x2d0 -/* 0000DBE0 0001A970 38 80 00 00 */ li r4, 0x0 -/* 0000DBE4 0001A974 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi -/* 0000DBE8 0001A978 80 01 00 14 */ lwz r0, 0x14(r1) -/* 0000DBEC 0001A97C 7C 08 03 A6 */ mtlr r0 -.L_0000DBF0: -/* 0000DBF0 0001A980 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 0000DBF4 0001A984 38 21 00 10 */ addi r1, r1, 0x10 -/* 0000DBF8 0001A988 4E 80 00 20 */ blr -.endfn ReleaseCar__11CDActionIceb - -# .text:0xDBFC | size: 0x208 -# CDActionIce::AquireCar -.fn AquireCar__11CDActionIce, global -/* 0000DBFC 0001A98C 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0000DC00 0001A990 7C 08 02 A6 */ mflr r0 -/* 0000DC04 0001A994 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 0000DC08 0001A998 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0000DC0C 0001A99C 7C 7D 1B 78 */ mr r29, r3 -/* 0000DC10 0001A9A0 81 7D 02 E0 */ lwz r11, 0x2e0(r29) -/* 0000DC14 0001A9A4 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000DC18 0001A9A8 41 82 DD F0 */ beq .L_0000BA08 -/* 0000DC1C 0001A9AC 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000DC20 0001A9B0 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000DC24 0001A9B4 80 09 00 14 */ lwz r0, 0x14(r9) -.L_0000DC28: -/* 0000DC28 0001A9B8 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000DC2C 0001A9BC 7C 08 03 A6 */ mtlr r0 -/* 0000DC30 0001A9C0 4E 80 00 21 */ blrl -/* 0000DC34 0001A9C4 81 7D 02 E8 */ lwz r11, 0x2e8(r29) -/* 0000DC38 0001A9C8 7C 63 1B 79 */ mr. r3, r3 -/* 0000DC3C 0001A9CC 41 82 DC 60 */ beq .L_0000B89C -/* 0000DC40 0001A9D0 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000DC44 0001A9D4 41 82 DC 60 */ beq .L_0000B8A4 -/* 0000DC48 0001A9D8 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0000DC4C 0001A9DC 80 0B 00 00 */ lwz r0, 0x0(r11) -/* 0000DC50 0001A9E0 7D 20 02 78 */ xor r0, r9, r0 -/* 0000DC54 0001A9E4 21 60 00 00 */ subfic r11, r0, 0x0 -/* 0000DC58 0001A9E8 7C 0B 01 14 */ adde r0, r11, r0 -/* 0000DC5C 0001A9EC 48 00 DC 74 */ b .L_0001B8D0 -/* 0000DC60 0001A9F0 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000DC64 0001A9F4 38 00 00 00 */ li r0, 0x0 -/* 0000DC68 0001A9F8 40 82 DC 74 */ bne .L_0000B8DC -/* 0000DC6C 0001A9FC 21 2B 00 00 */ subfic r9, r11, 0x0 -/* 0000DC70 0001AA00 7C 09 59 14 */ adde r0, r9, r11 -/* 0000DC74 0001AA04 2C 00 00 00 */ cmpwi r0, 0x0 -.L_0000DC78: -/* 0000DC78 0001AA08 40 82 DC 88 */ bne .L_0000B900 -.L_0000DC7C: -/* 0000DC7C 0001AA0C 7F A3 EB 78 */ mr r3, r29 -/* 0000DC80 0001AA10 38 80 00 01 */ li r4, 0x1 -.L_0000DC84: -/* 0000DC84 0001AA14 48 00 DB 8D */ bl .L_0001B810 -/* 0000DC88 0001AA18 80 1D 02 E8 */ lwz r0, 0x2e8(r29) -/* 0000DC8C 0001AA1C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000DC90 0001AA20 40 82 DD F0 */ bne .L_0000BA80 -/* 0000DC94 0001AA24 80 7D 02 E0 */ lwz r3, 0x2e0(r29) -/* 0000DC98 0001AA28 81 23 00 04 */ lwz r9, 0x4(r3) -.L_0000DC9C: -/* 0000DC9C 0001AA2C A8 09 00 10 */ lha r0, 0x10(r9) -/* 0000DCA0 0001AA30 81 29 00 14 */ lwz r9, 0x14(r9) -/* 0000DCA4 0001AA34 7C 63 02 14 */ add r3, r3, r0 -/* 0000DCA8 0001AA38 7D 28 03 A6 */ mtlr r9 -/* 0000DCAC 0001AA3C 4E 80 00 21 */ blrl -/* 0000DCB0 0001AA40 7C 7F 1B 79 */ mr. r31, r3 -/* 0000DCB4 0001AA44 41 82 DD F0 */ beq .L_0000BAA4 -/* 0000DCB8 0001AA48 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 0000DCBC 0001AA4C 3B DD 02 D0 */ addi r30, r29, 0x2d0 -/* 0000DCC0 0001AA50 80 09 00 EC */ lwz r0, 0xec(r9) -/* 0000DCC4 0001AA54 A8 69 00 E8 */ lha r3, 0xe8(r9) -/* 0000DCC8 0001AA58 7C 08 03 A6 */ mtlr r0 -/* 0000DCCC 0001AA5C 7C 7F 1A 14 */ add r3, r31, r3 -/* 0000DCD0 0001AA60 4E 80 00 21 */ blrl -/* 0000DCD4 0001AA64 7C 64 1B 78 */ mr r4, r3 -/* 0000DCD8 0001AA68 7F C3 F3 78 */ mr r3, r30 -/* 0000DCDC 0001AA6C 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi -/* 0000DCE0 0001AA70 80 1D 02 D4 */ lwz r0, 0x2d4(r29) -/* 0000DCE4 0001AA74 39 20 00 01 */ li r9, 0x1 -/* 0000DCE8 0001AA78 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000DCEC 0001AA7C 40 82 DC F4 */ bne .L_0000B9E0 -/* 0000DCF0 0001AA80 39 20 00 00 */ li r9, 0x0 -/* 0000DCF4 0001AA84 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0000DCF8 0001AA88 41 82 DD F0 */ beq .L_0000BAE8 -/* 0000DCFC 0001AA8C 80 7F 00 00 */ lwz r3, 0x0(r31) -/* 0000DD00 0001AA90 3C 80 00 00 */ lis r4, _IHandle__8IVehicle@ha -/* 0000DD04 0001AA94 38 84 00 00 */ addi r4, r4, _IHandle__8IVehicle@l -/* 0000DD08 0001AA98 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000DD0C 0001AA9C 38 00 00 01 */ li r0, 0x1 -/* 0000DD10 0001AAA0 90 7D 02 E8 */ stw r3, 0x2e8(r29) -/* 0000DD14 0001AAA4 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000DD18 0001AAA8 40 82 DD 20 */ bne .L_0000BA38 -/* 0000DD1C 0001AAAC 38 00 00 00 */ li r0, 0x0 -.L_0000DD20: -/* 0000DD20 0001AAB0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000DD24 0001AAB4 41 82 DD F0 */ beq .L_0000BB14 -/* 0000DD28 0001AAB8 81 3D 00 1C */ lwz r9, 0x1c(r29) -/* 0000DD2C 0001AABC 7C 64 1B 78 */ mr r4, r3 -/* 0000DD30 0001AAC0 38 1D 00 18 */ addi r0, r29, 0x18 -/* 0000DD34 0001AAC4 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000DD38 0001AAC8 81 29 00 14 */ lwz r9, 0x14(r9) -/* 0000DD3C 0001AACC 7C 60 1A 14 */ add r3, r0, r3 -/* 0000DD40 0001AAD0 7D 28 03 A6 */ mtlr r9 -/* 0000DD44 0001AAD4 4E 80 00 21 */ blrl -/* 0000DD48 0001AAD8 81 3D 02 E8 */ lwz r9, 0x2e8(r29) -/* 0000DD4C 0001AADC 3C 80 00 00 */ lis r4, _IHandle__13ITransmission@ha -/* 0000DD50 0001AAE0 38 84 00 00 */ addi r4, r4, _IHandle__13ITransmission@l -/* 0000DD54 0001AAE4 80 69 00 00 */ lwz r3, 0x0(r9) -/* 0000DD58 0001AAE8 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000DD5C 0001AAEC 7C 6B 1B 79 */ mr. r11, r3 -/* 0000DD60 0001AAF0 38 00 00 01 */ li r0, 0x1 -/* 0000DD64 0001AAF4 40 82 DD 6C */ bne .L_0000BAD0 -/* 0000DD68 0001AAF8 38 00 00 00 */ li r0, 0x0 -/* 0000DD6C 0001AAFC 2C 00 00 00 */ cmpwi r0, 0x0 -.L_0000DD70: -/* 0000DD70 0001AB00 41 82 DD 94 */ beq .L_0000BB04 -/* 0000DD74 0001AB04 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000DD78 0001AB08 A8 69 00 40 */ lha r3, 0x40(r9) -/* 0000DD7C 0001AB0C 80 09 00 44 */ lwz r0, 0x44(r9) -/* 0000DD80 0001AB10 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000DD84 0001AB14 7C 08 03 A6 */ mtlr r0 -.L_0000DD88: -/* 0000DD88 0001AB18 4E 80 00 21 */ blrl -/* 0000DD8C 0001AB1C 81 3D 02 C8 */ lwz r9, 0x2c8(r29) -/* 0000DD90 0001AB20 D0 29 00 74 */ stfs f1, 0x74(r9) -.L_0000DD94: -/* 0000DD94 0001AB24 81 3D 02 E8 */ lwz r9, 0x2e8(r29) -/* 0000DD98 0001AB28 3C 80 00 00 */ lis r4, _IHandle__11ISuspension@ha -/* 0000DD9C 0001AB2C 38 84 00 00 */ addi r4, r4, _IHandle__11ISuspension@l -/* 0000DDA0 0001AB30 80 69 00 00 */ lwz r3, 0x0(r9) -/* 0000DDA4 0001AB34 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000DDA8 0001AB38 7C 6B 1B 79 */ mr. r11, r3 -/* 0000DDAC 0001AB3C 38 00 00 01 */ li r0, 0x1 -/* 0000DDB0 0001AB40 40 82 DD B8 */ bne .L_0000BB68 -.L_0000DDB4: -/* 0000DDB4 0001AB44 38 00 00 00 */ li r0, 0x0 -/* 0000DDB8 0001AB48 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000DDBC 0001AB4C 41 82 DD F0 */ beq .L_0000BBAC -/* 0000DDC0 0001AB50 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000DDC4 0001AB54 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0000DDC8 0001AB58 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000DDCC 0001AB5C 7C 08 03 A6 */ mtlr r0 -/* 0000DDD0 0001AB60 7C 6B 1A 14 */ add r3, r11, r3 -.L_0000DDD4: -/* 0000DDD4 0001AB64 4E 80 00 21 */ blrl -/* 0000DDD8 0001AB68 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000DDDC 0001AB6C 38 00 00 01 */ li r0, 0x1 -/* 0000DDE0 0001AB70 40 82 DD E8 */ bne .L_0000BBC8 -/* 0000DDE4 0001AB74 38 00 00 00 */ li r0, 0x0 -.L_0000DDE8: -/* 0000DDE8 0001AB78 81 3D 02 C8 */ lwz r9, 0x2c8(r29) -/* 0000DDEC 0001AB7C 90 09 00 7C */ stw r0, 0x7c(r9) -/* 0000DDF0 0001AB80 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0000DDF4 0001AB84 7C 08 03 A6 */ mtlr r0 -/* 0000DDF8 0001AB88 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 0000DDFC 0001AB8C 38 21 00 18 */ addi r1, r1, 0x18 -/* 0000DE00 0001AB90 4E 80 00 20 */ blr -.endfn AquireCar__11CDActionIce - -# .text:0xDE04 | size: 0x424 -.fn Update__11CDActionIcef, global -/* 0000DE04 0001AB94 94 21 FF 80 */ stwu r1, -0x80(r1) -.L_0000DE08: -/* 0000DE08 0001AB98 7C 08 02 A6 */ mflr r0 -/* 0000DE0C 0001AB9C F3 C1 00 70 */ psq_st f30, 0x70(r1), 0, qr0 -/* 0000DE10 0001ABA0 F3 E1 00 78 */ psq_st f31, 0x78(r1), 0, qr0 -/* 0000DE14 0001ABA4 BF 81 00 60 */ stmw r28, 0x60(r1) -/* 0000DE18 0001ABA8 90 01 00 84 */ stw r0, 0x84(r1) -/* 0000DE1C 0001ABAC 7C 7F 1B 78 */ mr r31, r3 -/* 0000DE20 0001ABB0 FF C0 08 90 */ fmr f30, f1 -/* 0000DE24 0001ABB4 3B DF 00 20 */ addi r30, r31, 0x20 -/* 0000DE28 0001ABB8 3B 80 00 00 */ li r28, 0x0 -/* 0000DE2C 0001ABBC 3B A0 00 01 */ li r29, 0x1 -/* 0000DE30 0001ABC0 48 00 DE 80 */ b .L_0001BCB0 -/* 0000DE34 0001ABC4 38 61 00 58 */ addi r3, r1, 0x58 -/* 0000DE38 0001ABC8 7F C4 F3 78 */ mr r4, r30 -/* 0000DE3C 0001ABCC 4C C6 31 82 */ crclr cr1eq -/* 0000DE40 0001ABD0 48 00 00 01 */ bl GetAction__11ActionQueue -/* 0000DE44 0001ABD4 81 21 00 58 */ lwz r9, 0x58(r1) -/* 0000DE48 0001ABD8 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0000DE4C 0001ABDC 38 00 00 00 */ li r0, 0x0 -/* 0000DE50 0001ABE0 41 82 DE 58 */ beq .L_0000BCA8 -/* 0000DE54 0001ABE4 80 09 00 00 */ lwz r0, 0x0(r9) -/* 0000DE58 0001ABE8 2C 00 00 15 */ cmpwi r0, 0x15 -.L_0000DE5C: -/* 0000DE5C 0001ABEC 40 82 DE 78 */ bne .L_0000BCD4 -/* 0000DE60 0001ABF0 3D 20 00 00 */ lis r9, Tweak_EnableICEAuthoring@ha -/* 0000DE64 0001ABF4 80 09 00 00 */ lwz r0, Tweak_EnableICEAuthoring@l(r9) -/* 0000DE68 0001ABF8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000DE6C 0001ABFC 41 82 DE 78 */ beq .L_0000BCE4 -/* 0000DE70 0001AC00 93 89 00 00 */ stw r28, Tweak_EnableICEAuthoring@l(r9) -/* 0000DE74 0001AC04 93 BF 02 F0 */ stw r29, 0x2f0(r31) -/* 0000DE78 0001AC08 38 7F 00 20 */ addi r3, r31, 0x20 -/* 0000DE7C 0001AC0C 48 00 00 01 */ bl PopAction__11ActionQueue -/* 0000DE80 0001AC10 7F C3 F3 78 */ mr r3, r30 -.L_0000DE84: -/* 0000DE84 0001AC14 48 00 00 01 */ bl IsEmpty__11ActionQueue -/* 0000DE88 0001AC18 2C 03 00 00 */ cmpwi r3, 0x0 -.L_0000DE8C: -/* 0000DE8C 0001AC1C 41 82 DE 34 */ beq .L_0000BCC0 -/* 0000DE90 0001AC20 80 1F 02 E0 */ lwz r0, 0x2e0(r31) -.L_0000DE94: -/* 0000DE94 0001AC24 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000DE98 0001AC28 40 82 DE AC */ bne .L_0000BD44 -/* 0000DE9C 0001AC2C 7F E3 FB 78 */ mr r3, r31 -/* 0000DEA0 0001AC30 38 80 00 01 */ li r4, 0x1 -/* 0000DEA4 0001AC34 48 00 DB 8D */ bl .L_0001BA30 -/* 0000DEA8 0001AC38 48 00 E2 0C */ b .L_0001C0B4 -/* 0000DEAC 0001AC3C 7F E3 FB 78 */ mr r3, r31 -/* 0000DEB0 0001AC40 48 00 DB FD */ bl .L_0001BAAC -/* 0000DEB4 0001AC44 80 7F 02 D4 */ lwz r3, 0x2d4(r31) -/* 0000DEB8 0001AC48 38 00 00 01 */ li r0, 0x1 -/* 0000DEBC 0001AC4C 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000DEC0 0001AC50 40 82 DE C8 */ bne .L_0000BD88 -/* 0000DEC4 0001AC54 38 00 00 00 */ li r0, 0x0 -/* 0000DEC8 0001AC58 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000DECC 0001AC5C 41 82 E2 00 */ beq .L_0000C0CC -/* 0000DED0 0001AC60 38 81 00 08 */ addi r4, r1, 0x8 -/* 0000DED4 0001AC64 48 00 00 01 */ bl PSMTX44Copy -/* 0000DED8 0001AC68 80 7F 02 E8 */ lwz r3, 0x2e8(r31) -/* 0000DEDC 0001AC6C 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000DEE0 0001AC70 41 82 DF DC */ beq .L_0000BEBC -.L_0000DEE4: -/* 0000DEE4 0001AC74 80 63 00 00 */ lwz r3, 0x0(r3) -/* 0000DEE8 0001AC78 3C 80 00 00 */ lis r4, _IHandle__14ICollisionBody@ha -/* 0000DEEC 0001AC7C 38 84 00 00 */ addi r4, r4, _IHandle__14ICollisionBody@l -/* 0000DEF0 0001AC80 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000DEF4 0001AC84 7C 7C 1B 79 */ mr. r28, r3 -/* 0000DEF8 0001AC88 38 00 00 01 */ li r0, 0x1 -/* 0000DEFC 0001AC8C 40 82 DF 04 */ bne .L_0000BE00 -/* 0000DF00 0001AC90 38 00 00 00 */ li r0, 0x0 -/* 0000DF04 0001AC94 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000DF08 0001AC98 41 82 DF DC */ beq .L_0000BEE4 -/* 0000DF0C 0001AC9C 81 7F 02 E8 */ lwz r11, 0x2e8(r31) -/* 0000DF10 0001ACA0 3B A1 00 48 */ addi r29, r1, 0x48 -/* 0000DF14 0001ACA4 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000DF18 0001ACA8 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0000DF1C 0001ACAC A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000DF20 0001ACB0 7C 08 03 A6 */ mtlr r0 -/* 0000DF24 0001ACB4 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000DF28 0001ACB8 4E 80 00 21 */ blrl -/* 0000DF2C 0001ACBC 81 23 00 04 */ lwz r9, 0x4(r3) -/* 0000DF30 0001ACC0 A8 09 00 A8 */ lha r0, 0xa8(r9) -/* 0000DF34 0001ACC4 81 29 00 AC */ lwz r9, 0xac(r9) -/* 0000DF38 0001ACC8 7C 63 02 14 */ add r3, r3, r0 -/* 0000DF3C 0001ACCC 7D 28 03 A6 */ mtlr r9 -/* 0000DF40 0001ACD0 4E 80 00 21 */ blrl -/* 0000DF44 0001ACD4 81 3C 00 04 */ lwz r9, 0x4(r28) -/* 0000DF48 0001ACD8 7C 7E 1B 78 */ mr r30, r3 -/* 0000DF4C 0001ACDC 80 09 00 84 */ lwz r0, 0x84(r9) -/* 0000DF50 0001ACE0 A8 69 00 80 */ lha r3, 0x80(r9) -/* 0000DF54 0001ACE4 7C 08 03 A6 */ mtlr r0 -/* 0000DF58 0001ACE8 7C 7C 1A 14 */ add r3, r28, r3 -/* 0000DF5C 0001ACEC 4E 80 00 21 */ blrl -/* 0000DF60 0001ACF0 C1 A3 00 00 */ lfs f13, 0x0(r3) -/* 0000DF64 0001ACF4 7F A4 EB 78 */ mr r4, r29 -/* 0000DF68 0001ACF8 38 A0 00 00 */ li r5, 0x0 -/* 0000DF6C 0001ACFC D1 A1 00 48 */ stfs f13, 0x48(r1) -/* 0000DF70 0001AD00 C0 03 00 04 */ lfs f0, 0x4(r3) -/* 0000DF74 0001AD04 D0 01 00 4C */ stfs f0, 0x4c(r1) -/* 0000DF78 0001AD08 C1 A3 00 08 */ lfs f13, 0x8(r3) -.L_0000DF7C: -/* 0000DF7C 0001AD0C D1 A1 00 50 */ stfs f13, 0x50(r1) -/* 0000DF80 0001AD10 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000DF84 0001AD14 80 09 01 4C */ lwz r0, 0x14c(r9) -/* 0000DF88 0001AD18 A8 69 01 48 */ lha r3, 0x148(r9) -.L_0000DF8C: -/* 0000DF8C 0001AD1C 7C 08 03 A6 */ mtlr r0 -/* 0000DF90 0001AD20 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000DF94 0001AD24 4E 80 00 21 */ blrl -/* 0000DF98 0001AD28 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000DF9C 0001AD2C A8 69 00 48 */ lha r3, 0x48(r9) -/* 0000DFA0 0001AD30 80 09 00 4C */ lwz r0, 0x4c(r9) -/* 0000DFA4 0001AD34 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000DFA8 0001AD38 7C 08 03 A6 */ mtlr r0 -/* 0000DFAC 0001AD3C 4E 80 00 21 */ blrl -/* 0000DFB0 0001AD40 7C 64 1B 78 */ mr r4, r3 -.L_0000DFB4: -/* 0000DFB4 0001AD44 7F A3 EB 78 */ mr r3, r29 -/* 0000DFB8 0001AD48 7C 65 1B 78 */ mr r5, r3 -/* 0000DFBC 0001AD4C 48 00 00 01 */ bl VU0_v3add__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 -/* 0000DFC0 0001AD50 C0 01 00 48 */ lfs f0, 0x48(r1) -/* 0000DFC4 0001AD54 C1 A1 00 50 */ lfs f13, 0x50(r1) -/* 0000DFC8 0001AD58 C1 81 00 4C */ lfs f12, 0x4c(r1) -.L_0000DFCC: -/* 0000DFCC 0001AD5C FC 00 00 50 */ fneg f0, f0 -/* 0000DFD0 0001AD60 D1 A1 00 38 */ stfs f13, 0x38(r1) -.L_0000DFD4: -/* 0000DFD4 0001AD64 D0 01 00 3C */ stfs f0, 0x3c(r1) -/* 0000DFD8 0001AD68 D1 81 00 40 */ stfs f12, 0x40(r1) -.L_0000DFDC: -/* 0000DFDC 0001AD6C 3D 20 00 00 */ lis r9, .rodata+0x904@ha -/* 0000DFE0 0001AD70 81 7F 02 C8 */ lwz r11, 0x2c8(r31) -/* 0000DFE4 0001AD74 83 C9 09 04 */ lwz r30, .rodata+0x904@l(r9) -/* 0000DFE8 0001AD78 93 CB 00 84 */ stw r30, 0x84(r11) -/* 0000DFEC 0001AD7C 81 7F 02 E8 */ lwz r11, 0x2e8(r31) -/* 0000DFF0 0001AD80 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000DFF4 0001AD84 41 82 E0 18 */ beq .L_0000C00C -/* 0000DFF8 0001AD88 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0000DFFC 0001AD8C A8 69 01 68 */ lha r3, 0x168(r9) -/* 0000E000 0001AD90 80 09 01 6C */ lwz r0, 0x16c(r9) -/* 0000E004 0001AD94 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000E008 0001AD98 7C 08 03 A6 */ mtlr r0 -/* 0000E00C 0001AD9C 4E 80 00 21 */ blrl -/* 0000E010 0001ADA0 81 3F 02 C8 */ lwz r9, 0x2c8(r31) -/* 0000E014 0001ADA4 D0 29 00 84 */ stfs f1, 0x84(r9) -/* 0000E018 0001ADA8 81 7F 02 C8 */ lwz r11, 0x2c8(r31) -/* 0000E01C 0001ADAC 38 00 00 00 */ li r0, 0x0 -/* 0000E020 0001ADB0 93 CB 00 78 */ stw r30, 0x78(r11) -/* 0000E024 0001ADB4 81 3F 02 C8 */ lwz r9, 0x2c8(r31) -/* 0000E028 0001ADB8 90 09 00 8C */ stw r0, 0x8c(r9) -/* 0000E02C 0001ADBC 81 7F 02 C8 */ lwz r11, 0x2c8(r31) -/* 0000E030 0001ADC0 93 CB 00 90 */ stw r30, 0x90(r11) -/* 0000E034 0001ADC4 80 7F 02 E8 */ lwz r3, 0x2e8(r31) -/* 0000E038 0001ADC8 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000E03C 0001ADCC 41 82 E0 F0 */ beq .L_0000C12C -/* 0000E040 0001ADD0 80 63 00 00 */ lwz r3, 0x0(r3) -/* 0000E044 0001ADD4 3C 80 00 00 */ lis r4, _IHandle__8ISimable@ha -/* 0000E048 0001ADD8 38 84 00 00 */ addi r4, r4, _IHandle__8ISimable@l -/* 0000E04C 0001ADDC 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -.L_0000E050: -/* 0000E050 0001ADE0 7C 63 1B 79 */ mr. r3, r3 -/* 0000E054 0001ADE4 38 00 00 01 */ li r0, 0x1 -/* 0000E058 0001ADE8 40 82 E0 60 */ bne .L_0000C0B8 -/* 0000E05C 0001ADEC 38 00 00 00 */ li r0, 0x0 -/* 0000E060 0001ADF0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000E064 0001ADF4 41 82 E0 F0 */ beq .L_0000C154 -.L_0000E068: -/* 0000E068 0001ADF8 80 63 00 00 */ lwz r3, 0x0(r3) -/* 0000E06C 0001ADFC 3C 80 00 00 */ lis r4, _IHandle__7IEngine@ha -/* 0000E070 0001AE00 38 84 00 00 */ addi r4, r4, _IHandle__7IEngine@l -/* 0000E074 0001AE04 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 0000E078 0001AE08 7C 7E 1B 79 */ mr. r30, r3 -/* 0000E07C 0001AE0C 38 00 00 01 */ li r0, 0x1 -/* 0000E080 0001AE10 40 82 E0 88 */ bne .L_0000C108 -/* 0000E084 0001AE14 38 00 00 00 */ li r0, 0x0 -/* 0000E088 0001AE18 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000E08C 0001AE1C 41 82 E0 F0 */ beq GetTrafficBasis__16CDActionTrackCopRQ25UMath7Matrix4RQ25UMath7Vector3 -/* 0000E090 0001AE20 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000E094 0001AE24 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000E098 0001AE28 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000E09C 0001AE2C 7C 08 03 A6 */ mtlr r0 -/* 0000E0A0 0001AE30 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000E0A4 0001AE34 4E 80 00 21 */ blrl -/* 0000E0A8 0001AE38 81 3F 02 C8 */ lwz r9, 0x2c8(r31) -/* 0000E0AC 0001AE3C D0 29 00 78 */ stfs f1, 0x78(r9) -/* 0000E0B0 0001AE40 81 7E 00 04 */ lwz r11, 0x4(r30) -/* 0000E0B4 0001AE44 80 0B 00 4C */ lwz r0, 0x4c(r11) -/* 0000E0B8 0001AE48 A8 6B 00 48 */ lha r3, 0x48(r11) -/* 0000E0BC 0001AE4C 7C 08 03 A6 */ mtlr r0 -/* 0000E0C0 0001AE50 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000E0C4 0001AE54 4E 80 00 21 */ blrl -/* 0000E0C8 0001AE58 81 3F 02 C8 */ lwz r9, 0x2c8(r31) -/* 0000E0CC 0001AE5C 90 69 00 8C */ stw r3, 0x8c(r9) -/* 0000E0D0 0001AE60 81 7E 00 04 */ lwz r11, 0x4(r30) -/* 0000E0D4 0001AE64 A8 6B 00 40 */ lha r3, 0x40(r11) -/* 0000E0D8 0001AE68 80 0B 00 44 */ lwz r0, 0x44(r11) -/* 0000E0DC 0001AE6C 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000E0E0 0001AE70 7C 08 03 A6 */ mtlr r0 -/* 0000E0E4 0001AE74 4E 80 00 21 */ blrl -/* 0000E0E8 0001AE78 81 3F 02 C8 */ lwz r9, 0x2c8(r31) -/* 0000E0EC 0001AE7C D0 29 00 90 */ stfs f1, 0x90(r9) -/* 0000E0F0 0001AE80 80 7F 02 E8 */ lwz r3, 0x2e8(r31) -/* 0000E0F4 0001AE84 3D 20 00 00 */ lis r9, .rodata+0x904@ha -/* 0000E0F8 0001AE88 C3 E9 09 04 */ lfs f31, .rodata+0x904@l(r9) -/* 0000E0FC 0001AE8C 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000E100 0001AE90 41 82 E1 A8 */ beq .L_0000C2A8 -/* 0000E104 0001AE94 80 63 00 00 */ lwz r3, 0x0(r3) -/* 0000E108 0001AE98 3C 80 00 00 */ lis r4, _IHandle__11ISuspension@ha -/* 0000E10C 0001AE9C 38 84 00 00 */ addi r4, r4, _IHandle__11ISuspension@l -/* 0000E110 0001AEA0 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -.L_0000E114: -/* 0000E114 0001AEA4 7C 7E 1B 79 */ mr. r30, r3 -/* 0000E118 0001AEA8 38 00 00 01 */ li r0, 0x1 -/* 0000E11C 0001AEAC 40 82 E1 24 */ bne .L_0000C240 -/* 0000E120 0001AEB0 38 00 00 00 */ li r0, 0x0 -/* 0000E124 0001AEB4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000E128 0001AEB8 41 82 E1 A8 */ beq .L_0000C2D0 -.L_0000E12C: -/* 0000E12C 0001AEBC 3B A0 00 00 */ li r29, 0x0 -/* 0000E130 0001AEC0 48 00 E1 88 */ b .L_0001C2B8 -/* 0000E134 0001AEC4 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000E138 0001AEC8 7F A4 EB 78 */ mr r4, r29 -/* 0000E13C 0001AECC A8 69 00 68 */ lha r3, 0x68(r9) -/* 0000E140 0001AED0 80 09 00 6C */ lwz r0, 0x6c(r9) -/* 0000E144 0001AED4 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000E148 0001AED8 7C 08 03 A6 */ mtlr r0 -/* 0000E14C 0001AEDC 4E 80 00 21 */ blrl -/* 0000E150 0001AEE0 3D 20 00 00 */ lis r9, .rodata+0x904@ha -/* 0000E154 0001AEE4 C0 09 09 04 */ lfs f0, .rodata+0x904@l(r9) -/* 0000E158 0001AEE8 FC 01 00 00 */ fcmpu cr0, f1, f0 -/* 0000E15C 0001AEEC 4C 62 03 82 */ cror un, eq, lt -/* 0000E160 0001AEF0 41 83 E1 84 */ bso .L_0000C2E4 -/* 0000E164 0001AEF4 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000E168 0001AEF8 7F A4 EB 78 */ mr r4, r29 -/* 0000E16C 0001AEFC A8 69 00 68 */ lha r3, 0x68(r9) -/* 0000E170 0001AF00 80 09 00 6C */ lwz r0, 0x6c(r9) -/* 0000E174 0001AF04 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000E178 0001AF08 7C 08 03 A6 */ mtlr r0 -/* 0000E17C 0001AF0C 4E 80 00 21 */ blrl -/* 0000E180 0001AF10 EF FF 08 2A */ fadds f31, f31, f1 -/* 0000E184 0001AF14 3B BD 00 01 */ addi r29, r29, 0x1 -/* 0000E188 0001AF18 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000E18C 0001AF1C A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000E190 0001AF20 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0000E194 0001AF24 7C 7E 1A 14 */ add r3, r30, r3 -.L_0000E198: -/* 0000E198 0001AF28 7C 08 03 A6 */ mtlr r0 -/* 0000E19C 0001AF2C 4E 80 00 21 */ blrl -/* 0000E1A0 0001AF30 7C 1D 18 40 */ cmplw r29, r3 -/* 0000E1A4 0001AF34 41 80 E1 34 */ blt .L_0000C2D8 -/* 0000E1A8 0001AF38 81 3F 02 C8 */ lwz r9, 0x2c8(r31) -/* 0000E1AC 0001AF3C FC 20 F0 90 */ fmr f1, f30 -/* 0000E1B0 0001AF40 38 81 00 08 */ addi r4, r1, 0x8 -/* 0000E1B4 0001AF44 D3 E9 00 80 */ stfs f31, 0x80(r9) -/* 0000E1B8 0001AF48 80 7F 02 C8 */ lwz r3, 0x2c8(r31) -/* 0000E1BC 0001AF4C 80 DF 02 DC */ lwz r6, 0x2dc(r31) -/* 0000E1C0 0001AF50 80 BF 02 D8 */ lwz r5, 0x2d8(r31) -/* 0000E1C4 0001AF54 48 01 42 49 */ bl .text+0x14248 -/* 0000E1C8 0001AF58 3D 20 00 00 */ lis r9, TheICEManager@ha -/* 0000E1CC 0001AF5C 39 60 00 01 */ li r11, 0x1 -/* 0000E1D0 0001AF60 38 69 00 00 */ addi r3, r9, TheICEManager@l -/* 0000E1D4 0001AF64 80 03 00 28 */ lwz r0, 0x28(r3) -/* 0000E1D8 0001AF68 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000E1DC 0001AF6C 40 81 E1 E4 */ ble .L_0000C3C0 -/* 0000E1E0 0001AF70 39 60 00 00 */ li r11, 0x0 -/* 0000E1E4 0001AF74 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000E1E8 0001AF78 41 82 E2 00 */ beq .L_0000C3E8 -/* 0000E1EC 0001AF7C 3D 20 00 00 */ lis r9, Tweak_ForceICEReplay@ha -/* 0000E1F0 0001AF80 80 09 00 00 */ lwz r0, Tweak_ForceICEReplay@l(r9) -/* 0000E1F4 0001AF84 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000E1F8 0001AF88 41 82 E2 00 */ beq .L_0000C3F8 -/* 0000E1FC 0001AF8C 48 01 86 AD */ bl .text+0x186AC -/* 0000E200 0001AF90 3C 60 00 00 */ lis r3, TheICEManager@ha -/* 0000E204 0001AF94 38 63 00 00 */ addi r3, r3, TheICEManager@l -/* 0000E208 0001AF98 48 01 83 15 */ bl .text+0x18314 -/* 0000E20C 0001AF9C 80 01 00 84 */ lwz r0, 0x84(r1) -/* 0000E210 0001AFA0 7C 08 03 A6 */ mtlr r0 -/* 0000E214 0001AFA4 BB 81 00 60 */ lmw r28, 0x60(r1) -.L_0000E218: -/* 0000E218 0001AFA8 E3 C1 00 70 */ psq_l f30, 0x70(r1), 0, qr0 -/* 0000E21C 0001AFAC E3 E1 00 78 */ psq_l f31, 0x78(r1), 0, qr0 -/* 0000E220 0001AFB0 38 21 00 80 */ addi r1, r1, 0x80 -/* 0000E224 0001AFB4 4E 80 00 20 */ blr -.endfn Update__11CDActionIcef - -# .text:0xE228 | size: 0x74 -.fn GetName__C21CDActionDebugWatchCar, global -/* 0000E228 0001AFB8 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0000E22C 0001AFBC 7C 08 02 A6 */ mflr r0 -.L_0000E230: -/* 0000E230 0001AFC0 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 0000E234 0001AFC4 90 01 00 1C */ stw r0, 0x1c(r1) -.L_0000E238: -/* 0000E238 0001AFC8 3F E0 00 00 */ lis r31, _.tmp_13.11404@ha -/* 0000E23C 0001AFCC 80 1F 00 00 */ lwz r0, _.tmp_13.11404@l(r31) -/* 0000E240 0001AFD0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000E244 0001AFD4 40 82 E2 80 */ bne .L_0000C4C4 -/* 0000E248 0001AFD8 3F C0 00 00 */ lis r30, .rodata+0x908@ha -/* 0000E24C 0001AFDC 3F A0 00 00 */ lis r29, name.11403@ha -/* 0000E250 0001AFE0 3B DE 09 08 */ addi r30, r30, .rodata+0x908@l -/* 0000E254 0001AFE4 3B BD 00 00 */ addi r29, r29, name.11403@l -/* 0000E258 0001AFE8 7F C3 F3 78 */ mr r3, r30 -/* 0000E25C 0001AFEC 48 00 00 01 */ bl StringHash64__6AttribPCc -/* 0000E260 0001AFF0 90 7D 00 00 */ stw r3, 0x0(r29) -/* 0000E264 0001AFF4 90 9D 00 04 */ stw r4, 0x4(r29) -/* 0000E268 0001AFF8 7F C3 F3 78 */ mr r3, r30 -/* 0000E26C 0001AFFC 48 00 00 01 */ bl StringHash32__6AttribPCc -/* 0000E270 0001B000 38 00 00 01 */ li r0, 0x1 -/* 0000E274 0001B004 93 DD 00 0C */ stw r30, 0xc(r29) -/* 0000E278 0001B008 90 1F 00 00 */ stw r0, _.tmp_13.11404@l(r31) -/* 0000E27C 0001B00C 90 7D 00 08 */ stw r3, 0x8(r29) -/* 0000E280 0001B010 3C 60 00 00 */ lis r3, name.11403@ha -/* 0000E284 0001B014 38 63 00 00 */ addi r3, r3, name.11403@l -/* 0000E288 0001B018 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0000E28C 0001B01C 7C 08 03 A6 */ mtlr r0 -/* 0000E290 0001B020 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 0000E294 0001B024 38 21 00 18 */ addi r1, r1, 0x18 -/* 0000E298 0001B028 4E 80 00 20 */ blr -.endfn GetName__C21CDActionDebugWatchCar - -# .text:0xE29C | size: 0x5C -.fn GetNext__C21CDActionDebugWatchCar, global -/* 0000E29C 0001B02C 3D 20 00 00 */ lis r9, CameraDebugWatchCar@ha -/* 0000E2A0 0001B030 80 09 00 00 */ lwz r0, CameraDebugWatchCar@l(r9) -/* 0000E2A4 0001B034 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000E2A8 0001B038 41 82 E2 D4 */ beq .L_0000C57C -/* 0000E2AC 0001B03C 3D 20 00 00 */ lis r9, .rodata@ha -/* 0000E2B0 0001B040 39 60 00 00 */ li r11, 0x0 -/* 0000E2B4 0001B044 39 80 00 00 */ li r12, 0x0 -/* 0000E2B8 0001B048 39 29 00 00 */ addi r9, r9, .rodata@l -/* 0000E2BC 0001B04C 38 00 00 00 */ li r0, 0x0 -/* 0000E2C0 0001B050 91 63 00 00 */ stw r11, 0x0(r3) -/* 0000E2C4 0001B054 91 83 00 04 */ stw r12, 0x4(r3) -/* 0000E2C8 0001B058 90 03 00 08 */ stw r0, 0x8(r3) -/* 0000E2CC 0001B05C 91 23 00 0C */ stw r9, 0xc(r3) -.L_0000E2D0: -/* 0000E2D0 0001B060 4E 80 00 20 */ blr -/* 0000E2D4 0001B064 81 24 00 48 */ lwz r9, 0x48(r4) -/* 0000E2D8 0001B068 81 44 00 4C */ lwz r10, 0x4c(r4) -/* 0000E2DC 0001B06C 91 23 00 00 */ stw r9, 0x0(r3) -/* 0000E2E0 0001B070 91 43 00 04 */ stw r10, 0x4(r3) -/* 0000E2E4 0001B074 80 04 00 50 */ lwz r0, 0x50(r4) -/* 0000E2E8 0001B078 90 03 00 08 */ stw r0, 0x8(r3) -/* 0000E2EC 0001B07C 81 24 00 54 */ lwz r9, 0x54(r4) -/* 0000E2F0 0001B080 91 23 00 0C */ stw r9, 0xc(r3) -/* 0000E2F4 0001B084 4E 80 00 20 */ blr -.endfn GetNext__C21CDActionDebugWatchCar - -# .text:0xE2F8 | size: 0x58 -# CDActionDebugWatchCar::GetSimable -.fn GetSimable__21CDActionDebugWatchCar, global -/* 0000E2F8 0001B088 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0000E2FC 0001B08C 7C 08 02 A6 */ mflr r0 -/* 0000E300 0001B090 90 01 00 0C */ stw r0, 0xc(r1) -/* 0000E304 0001B094 80 A3 00 58 */ lwz r5, 0x58(r3) -/* 0000E308 0001B098 2C 05 00 00 */ cmpwi r5, 0x0 -/* 0000E30C 0001B09C 41 82 E3 3C */ beq .L_0000C648 -/* 0000E310 0001B0A0 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst12Instanceable3ZP10HSIMABLE__Z8ISimablei160._mList@ha -/* 0000E314 0001B0A4 39 69 00 00 */ addi r11, r9, _Q33UTL11Collectionst12Instanceable3ZP10HSIMABLE__Z8ISimablei160._mList@l -/* 0000E318 0001B0A8 80 69 00 00 */ lwz r3, _Q33UTL11Collectionst12Instanceable3ZP10HSIMABLE__Z8ISimablei160._mList@l(r9) -/* 0000E31C 0001B0AC 80 8B 00 08 */ lwz r4, 0x8(r11) -/* 0000E320 0001B0B0 54 84 18 38 */ slwi r4, r4, 3 -/* 0000E324 0001B0B4 7C 83 22 14 */ add r4, r3, r4 -/* 0000E328 0001B0B8 48 00 00 01 */ bl Search__Q33UTL11Collections10_KeyedNodePQ33UTL11Collections10_KeyedNodeT1Ui -/* 0000E32C 0001B0BC 7C 63 1B 79 */ mr. r3, r3 -/* 0000E330 0001B0C0 41 82 E3 3C */ beq .L_0000C66C -/* 0000E334 0001B0C4 80 63 00 04 */ lwz r3, 0x4(r3) -/* 0000E338 0001B0C8 48 00 E3 40 */ b .L_0001C678 -/* 0000E33C 0001B0CC 38 60 00 00 */ li r3, 0x0 -/* 0000E340 0001B0D0 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0000E344 0001B0D4 7C 08 03 A6 */ mtlr r0 -/* 0000E348 0001B0D8 38 21 00 08 */ addi r1, r1, 0x8 -/* 0000E34C 0001B0DC 4E 80 00 20 */ blr -.endfn GetSimable__21CDActionDebugWatchCar - -# .text:0xE350 | size: 0x50 -# CDActionDebugWatchCar::ReleaseTarget -.fn ReleaseTarget__21CDActionDebugWatchCar, global -/* 0000E350 0001B0E0 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0000E354 0001B0E4 7C 08 02 A6 */ mflr r0 -/* 0000E358 0001B0E8 90 01 00 0C */ stw r0, 0xc(r1) -/* 0000E35C 0001B0EC 7C 69 1B 78 */ mr r9, r3 -/* 0000E360 0001B0F0 39 60 00 01 */ li r11, 0x1 -/* 0000E364 0001B0F4 80 09 00 38 */ lwz r0, 0x38(r9) -/* 0000E368 0001B0F8 38 69 00 34 */ addi r3, r9, 0x34 -/* 0000E36C 0001B0FC 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000E370 0001B100 40 82 E3 78 */ bne .L_0000C6E8 -/* 0000E374 0001B104 39 60 00 00 */ li r11, 0x0 -/* 0000E378 0001B108 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000E37C 0001B10C 41 82 E3 90 */ beq .L_0000C70C -/* 0000E380 0001B110 38 00 00 00 */ li r0, 0x0 -/* 0000E384 0001B114 38 80 00 00 */ li r4, 0x0 -/* 0000E388 0001B118 90 09 00 58 */ stw r0, 0x58(r9) -/* 0000E38C 0001B11C 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi -/* 0000E390 0001B120 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0000E394 0001B124 7C 08 03 A6 */ mtlr r0 -/* 0000E398 0001B128 38 21 00 08 */ addi r1, r1, 0x8 -/* 0000E39C 0001B12C 4E 80 00 20 */ blr -.endfn ReleaseTarget__21CDActionDebugWatchCar - -# .text:0xE3A0 | size: 0x1B4 -# CDActionDebugWatchCar::AquireTarget -.fn AquireTarget__21CDActionDebugWatchCar, global -/* 0000E3A0 0001B130 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0000E3A4 0001B134 7C 08 02 A6 */ mflr r0 -/* 0000E3A8 0001B138 BF 81 00 08 */ stmw r28, 0x8(r1) -/* 0000E3AC 0001B13C 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0000E3B0 0001B140 7C 7E 1B 78 */ mr r30, r3 -/* 0000E3B4 0001B144 80 BE 00 58 */ lwz r5, 0x58(r30) -/* 0000E3B8 0001B148 2C 05 00 00 */ cmpwi r5, 0x0 -/* 0000E3BC 0001B14C 41 82 E3 EC */ beq .L_0000C7A8 -/* 0000E3C0 0001B150 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst12Instanceable3ZP10HSIMABLE__Z8ISimablei160._mList@ha -/* 0000E3C4 0001B154 39 69 00 00 */ addi r11, r9, _Q33UTL11Collectionst12Instanceable3ZP10HSIMABLE__Z8ISimablei160._mList@l -/* 0000E3C8 0001B158 80 69 00 00 */ lwz r3, _Q33UTL11Collectionst12Instanceable3ZP10HSIMABLE__Z8ISimablei160._mList@l(r9) -/* 0000E3CC 0001B15C 80 8B 00 08 */ lwz r4, 0x8(r11) -/* 0000E3D0 0001B160 54 84 18 38 */ slwi r4, r4, 3 -/* 0000E3D4 0001B164 7C 83 22 14 */ add r4, r3, r4 -/* 0000E3D8 0001B168 48 00 00 01 */ bl Search__Q33UTL11Collections10_KeyedNodePQ33UTL11Collections10_KeyedNodeT1Ui -/* 0000E3DC 0001B16C 7C 63 1B 79 */ mr. r3, r3 -/* 0000E3E0 0001B170 41 82 E3 EC */ beq .L_0000C7CC -/* 0000E3E4 0001B174 80 63 00 04 */ lwz r3, 0x4(r3) -/* 0000E3E8 0001B178 48 00 E3 F0 */ b .L_0001C7D8 -/* 0000E3EC 0001B17C 38 60 00 00 */ li r3, 0x0 -.L_0000E3F0: -/* 0000E3F0 0001B180 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000E3F4 0001B184 40 82 E4 00 */ bne .L_0000C7F4 -/* 0000E3F8 0001B188 7F C3 F3 78 */ mr r3, r30 -/* 0000E3FC 0001B18C 48 00 E3 51 */ bl .L_0001C74C -/* 0000E400 0001B190 3F A0 00 00 */ lis r29, mToggleCar@ha -/* 0000E404 0001B194 80 1D 00 00 */ lwz r0, mToggleCar@l(r29) -/* 0000E408 0001B198 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000E40C 0001B19C 41 80 E5 40 */ blt .L_0000C94C -/* 0000E410 0001B1A0 3F E0 00 00 */ lis r31, mToggleCarList@ha -/* 0000E414 0001B1A4 80 7F 00 00 */ lwz r3, mToggleCarList@l(r31) -/* 0000E418 0001B1A8 2C 03 00 09 */ cmpwi r3, 0x9 -/* 0000E41C 0001B1AC 41 81 E5 40 */ bgt .L_0000C95C -/* 0000E420 0001B1B0 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000E424 0001B1B4 41 80 E5 40 */ blt AquireCar__16CDActionShowcase -/* 0000E428 0001B1B8 48 00 00 01 */ bl Count__Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi1012eVehicleList -/* 0000E42C 0001B1BC 7C 63 1B 79 */ mr. r3, r3 -/* 0000E430 0001B1C0 41 82 E5 40 */ beq .L_0000C970 -/* 0000E434 0001B1C4 81 7D 00 00 */ lwz r11, mToggleCar@l(r29) -/* 0000E438 0001B1C8 3D 00 00 00 */ lis r8, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@ha -.L_0000E43C: -/* 0000E43C 0001B1CC 81 5F 00 00 */ lwz r10, mToggleCarList@l(r31) -/* 0000E440 0001B1D0 39 08 00 00 */ addi r8, r8, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@l -/* 0000E444 0001B1D4 7C 0B 1B D6 */ divw r0, r11, r3 -/* 0000E448 0001B1D8 1D 4A 00 38 */ mulli r10, r10, 0x38 -/* 0000E44C 0001B1DC 7C 00 19 D6 */ mullw r0, r0, r3 -/* 0000E450 0001B1E0 7D 2A 40 2E */ lwzx r9, r10, r8 -/* 0000E454 0001B1E4 7D 60 58 50 */ subf r11, r0, r11 -/* 0000E458 0001B1E8 55 6B 10 3A */ slwi r11, r11, 2 -/* 0000E45C 0001B1EC 7F E9 58 2E */ lwzx r31, r9, r11 -/* 0000E460 0001B1F0 2C 1F 00 00 */ cmpwi r31, 0x0 -/* 0000E464 0001B1F4 41 82 E5 40 */ beq .L_0000C9A4 -/* 0000E468 0001B1F8 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 0000E46C 0001B1FC 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0000E470 0001B200 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000E474 0001B204 7C 08 03 A6 */ mtlr r0 -/* 0000E478 0001B208 7C 7F 1A 14 */ add r3, r31, r3 -/* 0000E47C 0001B20C 4E 80 00 21 */ blrl -.L_0000E480: -/* 0000E480 0001B210 81 23 00 08 */ lwz r9, 0x8(r3) -/* 0000E484 0001B214 80 1E 00 58 */ lwz r0, 0x58(r30) -/* 0000E488 0001B218 7C 09 00 00 */ cmpw r9, r0 -/* 0000E48C 0001B21C 41 82 E5 40 */ beq .L_0000C9CC -/* 0000E490 0001B220 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 0000E494 0001B224 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0000E498 0001B228 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000E49C 0001B22C 7C 08 03 A6 */ mtlr r0 -/* 0000E4A0 0001B230 7C 7F 1A 14 */ add r3, r31, r3 -/* 0000E4A4 0001B234 4E 80 00 21 */ blrl -.L_0000E4A8: -/* 0000E4A8 0001B238 81 23 00 04 */ lwz r9, 0x4(r3) -/* 0000E4AC 0001B23C A8 09 00 E8 */ lha r0, 0xe8(r9) -/* 0000E4B0 0001B240 81 29 00 EC */ lwz r9, 0xec(r9) -/* 0000E4B4 0001B244 7C 63 02 14 */ add r3, r3, r0 -/* 0000E4B8 0001B248 7D 28 03 A6 */ mtlr r9 -/* 0000E4BC 0001B24C 4E 80 00 21 */ blrl -/* 0000E4C0 0001B250 7C 7C 1B 79 */ mr. r28, r3 -/* 0000E4C4 0001B254 41 82 E5 40 */ beq .L_0000CA04 -/* 0000E4C8 0001B258 7F C3 F3 78 */ mr r3, r30 -/* 0000E4CC 0001B25C 48 00 E3 51 */ bl .L_0001C81C -/* 0000E4D0 0001B260 81 3F 00 04 */ lwz r9, 0x4(r31) -.L_0000E4D4: -/* 0000E4D4 0001B264 83 BE 00 30 */ lwz r29, 0x30(r30) -/* 0000E4D8 0001B268 A8 69 00 98 */ lha r3, 0x98(r9) -/* 0000E4DC 0001B26C 80 09 00 9C */ lwz r0, 0x9c(r9) -.L_0000E4E0: -/* 0000E4E0 0001B270 7C 7F 1A 14 */ add r3, r31, r3 -/* 0000E4E4 0001B274 7C 08 03 A6 */ mtlr r0 -/* 0000E4E8 0001B278 4E 80 00 21 */ blrl -/* 0000E4EC 0001B27C 81 23 00 08 */ lwz r9, 0x8(r3) -/* 0000E4F0 0001B280 80 69 00 1C */ lwz r3, 0x1c(r9) -/* 0000E4F4 0001B284 2C 03 00 00 */ cmpwi r3, 0x0 -.L_0000E4F8: -/* 0000E4F8 0001B288 40 82 E5 04 */ bne .L_0000C9FC -/* 0000E4FC 0001B28C 3D 20 00 00 */ lis r9, .rodata@ha -/* 0000E500 0001B290 38 69 00 00 */ addi r3, r9, .rodata@l -/* 0000E504 0001B294 48 00 00 01 */ bl bStringHash__FPCc -/* 0000E508 0001B298 7C 64 1B 78 */ mr r4, r3 -/* 0000E50C 0001B29C 7F A3 EB 78 */ mr r3, r29 -/* 0000E510 0001B2A0 48 00 13 CD */ bl .L_0000F8DC -/* 0000E514 0001B2A4 38 7E 00 34 */ addi r3, r30, 0x34 -/* 0000E518 0001B2A8 7F 84 E3 78 */ mr r4, r28 -/* 0000E51C 0001B2AC 48 00 00 01 */ bl Set__Q29WorldConn9ReferenceUi -.L_0000E520: -/* 0000E520 0001B2B0 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 0000E524 0001B2B4 80 09 00 1C */ lwz r0, 0x1c(r9) -.L_0000E528: -/* 0000E528 0001B2B8 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000E52C 0001B2BC 7C 08 03 A6 */ mtlr r0 -/* 0000E530 0001B2C0 7C 7F 1A 14 */ add r3, r31, r3 -/* 0000E534 0001B2C4 4E 80 00 21 */ blrl -.L_0000E538: -/* 0000E538 0001B2C8 80 03 00 08 */ lwz r0, 0x8(r3) -/* 0000E53C 0001B2CC 90 1E 00 58 */ stw r0, 0x58(r30) -/* 0000E540 0001B2D0 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0000E544 0001B2D4 7C 08 03 A6 */ mtlr r0 -/* 0000E548 0001B2D8 BB 81 00 08 */ lmw r28, 0x8(r1) -/* 0000E54C 0001B2DC 38 21 00 18 */ addi r1, r1, 0x18 -/* 0000E550 0001B2E0 4E 80 00 20 */ blr -.endfn AquireTarget__21CDActionDebugWatchCar - -# .text:0xE554 | size: 0x58 -.fn Construct__21CDActionDebugWatchCarPQ28CameraAI8Director, global -/* 0000E554 0001B2E4 94 21 FF F0 */ stwu r1, -0x10(r1) -.L_0000E558: -/* 0000E558 0001B2E8 7C 08 02 A6 */ mflr r0 -/* 0000E55C 0001B2EC 93 E1 00 0C */ stw r31, 0xc(r1) -.L_0000E560: -/* 0000E560 0001B2F0 90 01 00 14 */ stw r0, 0x14(r1) -/* 0000E564 0001B2F4 7C 7F 1B 78 */ mr r31, r3 -/* 0000E568 0001B2F8 80 1F 00 18 */ lwz r0, 0x18(r31) -/* 0000E56C 0001B2FC 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000E570 0001B300 41 82 E5 94 */ beq .L_0000CB04 -/* 0000E574 0001B304 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0000E578 0001B308 38 80 00 60 */ li r4, 0x60 -/* 0000E57C 0001B30C 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0000E580 0001B310 38 A0 00 00 */ li r5, 0x0 -/* 0000E584 0001B314 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 0000E588 0001B318 7F E4 FB 78 */ mr r4, r31 -/* 0000E58C 0001B31C 48 00 E5 AD */ bl .L_0001CB38 -/* 0000E590 0001B320 48 00 E5 98 */ b .L_0001CB28 -/* 0000E594 0001B324 38 60 00 00 */ li r3, 0x0 -/* 0000E598 0001B328 80 01 00 14 */ lwz r0, 0x14(r1) -/* 0000E59C 0001B32C 7C 08 03 A6 */ mtlr r0 -/* 0000E5A0 0001B330 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 0000E5A4 0001B334 38 21 00 10 */ addi r1, r1, 0x10 -/* 0000E5A8 0001B338 4E 80 00 20 */ blr -.endfn Construct__21CDActionDebugWatchCarPQ28CameraAI8Director - -# .text:0xE5AC | size: 0x4B4 -.fn __21CDActionDebugWatchCarPQ28CameraAI8Director, global -/* 0000E5AC 0001B33C 94 21 FF 58 */ stwu r1, -0xa8(r1) -/* 0000E5B0 0001B340 7C 08 02 A6 */ mflr r0 -/* 0000E5B4 0001B344 7D 80 00 26 */ mfcr r12 -/* 0000E5B8 0001B348 BE 61 00 74 */ stmw r19, 0x74(r1) -/* 0000E5BC 0001B34C 90 01 00 AC */ stw r0, 0xac(r1) -/* 0000E5C0 0001B350 91 81 00 70 */ stw r12, 0x70(r1) -/* 0000E5C4 0001B354 7C 7F 1B 78 */ mr r31, r3 -/* 0000E5C8 0001B358 7C 95 23 78 */ mr r21, r4 -/* 0000E5CC 0001B35C 38 80 00 00 */ li r4, 0x0 -/* 0000E5D0 0001B360 48 00 00 01 */ bl __Q43UTL3COM6Object6_IListUi -/* 0000E5D4 0001B364 3B 1F 00 18 */ addi r24, r31, 0x18 -/* 0000E5D8 0001B368 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha -/* 0000E5DC 0001B36C 3D 60 00 00 */ lis r11, _vt.Q33UTL3COM8IUnknown@ha -/* 0000E5E0 0001B370 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l -/* 0000E5E4 0001B374 39 6B 00 00 */ addi r11, r11, _vt.Q33UTL3COM8IUnknown@l -/* 0000E5E8 0001B378 3C 80 00 00 */ lis r4, _IHandle__14IDebugWatchCar@ha -/* 0000E5EC 0001B37C 93 FF 00 18 */ stw r31, 0x18(r31) -/* 0000E5F0 0001B380 38 84 00 00 */ addi r4, r4, _IHandle__14IDebugWatchCar@l -/* 0000E5F4 0001B384 3E E0 00 00 */ lis r23, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@ha -/* 0000E5F8 0001B388 91 3F 00 14 */ stw r9, 0x14(r31) -/* 0000E5FC 0001B38C 7F E3 FB 78 */ mr r3, r31 -/* 0000E600 0001B390 91 7F 00 1C */ stw r11, 0x1c(r31) -/* 0000E604 0001B394 7F 05 C3 78 */ mr r5, r24 -/* 0000E608 0001B398 3A 81 00 68 */ addi r20, r1, 0x68 -/* 0000E60C 0001B39C 3B 97 00 00 */ addi r28, r23, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@l -/* 0000E610 0001B3A0 48 00 00 01 */ bl Add__Q43UTL3COM6Object6_IListPvPQ33UTL3COM8IUnknown -/* 0000E614 0001B3A4 3E 60 00 00 */ lis r19, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha -/* 0000E618 0001B3A8 80 9C 00 08 */ lwz r4, 0x8(r28) -/* 0000E61C 0001B3AC 3B 21 00 6C */ addi r25, r1, 0x6c -/* 0000E620 0001B3B0 80 1C 00 04 */ lwz r0, 0x4(r28) -/* 0000E624 0001B3B4 3B 41 00 08 */ addi r26, r1, 0x8 -/* 0000E628 0001B3B8 93 01 00 68 */ stw r24, 0x68(r1) -/* 0000E62C 0001B3BC 7C 04 00 40 */ cmplw r4, r0 -/* 0000E630 0001B3C0 41 80 E7 10 */ blt .L_0000CD40 -/* 0000E634 0001B3C4 81 3C 00 0C */ lwz r9, 0xc(r28) -.L_0000E638: -/* 0000E638 0001B3C8 38 84 00 01 */ addi r4, r4, 0x1 -/* 0000E63C 0001B3CC 80 09 00 24 */ lwz r0, 0x24(r9) -/* 0000E640 0001B3D0 A8 69 00 20 */ lha r3, 0x20(r9) -/* 0000E644 0001B3D4 7C 08 03 A6 */ mtlr r0 -/* 0000E648 0001B3D8 7C 63 E2 14 */ add r3, r3, r28 -/* 0000E64C 0001B3DC 4E 80 00 21 */ blrl -/* 0000E650 0001B3E0 80 1C 00 04 */ lwz r0, 0x4(r28) -/* 0000E654 0001B3E4 7C 7E 1B 78 */ mr r30, r3 -/* 0000E658 0001B3E8 7C 1E 00 40 */ cmplw r30, r0 -/* 0000E65C 0001B3EC 40 81 E7 10 */ ble .L_0000CD6C -/* 0000E660 0001B3F0 81 3C 00 0C */ lwz r9, 0xc(r28) -/* 0000E664 0001B3F4 7F C4 F3 78 */ mr r4, r30 -/* 0000E668 0001B3F8 80 09 00 34 */ lwz r0, 0x34(r9) -/* 0000E66C 0001B3FC A8 69 00 30 */ lha r3, 0x30(r9) -/* 0000E670 0001B400 7C 08 03 A6 */ mtlr r0 -/* 0000E674 0001B404 7C 63 E2 14 */ add r3, r3, r28 -/* 0000E678 0001B408 4E 80 00 21 */ blrl -/* 0000E67C 0001B40C 81 3C 00 0C */ lwz r9, 0xc(r28) -/* 0000E680 0001B410 7F C4 F3 78 */ mr r4, r30 -/* 0000E684 0001B414 38 A0 00 10 */ li r5, 0x10 -/* 0000E688 0001B418 83 B7 00 00 */ lwz r29, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@l(r23) -/* 0000E68C 0001B41C A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000E690 0001B420 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000E694 0001B424 7C 63 E2 14 */ add r3, r3, r28 -/* 0000E698 0001B428 83 7C 00 08 */ lwz r27, 0x8(r28) -/* 0000E69C 0001B42C 7C 08 03 A6 */ mtlr r0 -/* 0000E6A0 0001B430 82 DC 00 04 */ lwz r22, 0x4(r28) -/* 0000E6A4 0001B434 4E 80 00 21 */ blrl -/* 0000E6A8 0001B438 93 DC 00 04 */ stw r30, 0x4(r28) -/* 0000E6AC 0001B43C 7C 1D 18 00 */ cmpw r29, r3 -/* 0000E6B0 0001B440 90 77 00 00 */ stw r3, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@l(r23) -/* 0000E6B4 0001B444 41 82 E7 10 */ beq .L_0000CDC4 -/* 0000E6B8 0001B448 38 00 00 00 */ li r0, 0x0 -/* 0000E6BC 0001B44C 3B C0 00 00 */ li r30, 0x0 -/* 0000E6C0 0001B450 90 1C 00 08 */ stw r0, 0x8(r28) -/* 0000E6C4 0001B454 7C 1E D8 00 */ cmpw r30, r27 -/* 0000E6C8 0001B458 2E 1D 00 00 */ cmpwi cr4, r29, 0x0 -.L_0000E6CC: -/* 0000E6CC 0001B45C 40 80 E6 EC */ bge .L_0000CDB8 -/* 0000E6D0 0001B460 57 C4 10 3A */ slwi r4, r30, 2 -/* 0000E6D4 0001B464 7F 83 E3 78 */ mr r3, r28 -/* 0000E6D8 0001B468 7C 9D 22 14 */ add r4, r29, r4 -/* 0000E6DC 0001B46C 3B DE 00 01 */ addi r30, r30, 0x1 -/* 0000E6E0 0001B470 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZP14IDebugWatchCari16RCP14IDebugWatchCar -/* 0000E6E4 0001B474 7C 1E D8 00 */ cmpw r30, r27 -/* 0000E6E8 0001B478 41 80 E6 D0 */ blt .L_0000CDB8 -.L_0000E6EC: -/* 0000E6EC 0001B47C 41 92 E7 10 */ beq cr4, .L_0000CDFC -/* 0000E6F0 0001B480 81 3C 00 0C */ lwz r9, 0xc(r28) -/* 0000E6F4 0001B484 7F A4 EB 78 */ mr r4, r29 -/* 0000E6F8 0001B488 7E C5 B3 78 */ mr r5, r22 -/* 0000E6FC 0001B48C A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000E700 0001B490 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0000E704 0001B494 7C 7C 1A 14 */ add r3, r28, r3 -/* 0000E708 0001B498 7C 08 03 A6 */ mtlr r0 -/* 0000E70C 0001B49C 4E 80 00 21 */ blrl -/* 0000E710 0001B4A0 81 3C 00 08 */ lwz r9, 0x8(r28) -/* 0000E714 0001B4A4 81 7C 00 00 */ lwz r11, 0x0(r28) -/* 0000E718 0001B4A8 55 29 10 3A */ slwi r9, r9, 2 -/* 0000E71C 0001B4AC 7C 09 5A 14 */ add r0, r9, r11 -/* 0000E720 0001B4B0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000E724 0001B4B4 41 82 E7 30 */ beq .L_0000CE54 -/* 0000E728 0001B4B8 80 14 00 00 */ lwz r0, 0x0(r20) -/* 0000E72C 0001B4BC 7C 09 59 2E */ stwx r0, r9, r11 -/* 0000E730 0001B4C0 81 3C 00 08 */ lwz r9, 0x8(r28) -/* 0000E734 0001B4C4 3D 60 00 00 */ lis r11, _vt.14IDebugWatchCar@ha -/* 0000E738 0001B4C8 39 6B 00 00 */ addi r11, r11, _vt.14IDebugWatchCar@l -/* 0000E73C 0001B4CC 3A DF 00 24 */ addi r22, r31, 0x24 -/* 0000E740 0001B4D0 39 29 00 01 */ addi r9, r9, 0x1 -/* 0000E744 0001B4D4 3D 40 00 00 */ lis r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha -/* 0000E748 0001B4D8 91 3C 00 08 */ stw r9, 0x8(r28) -/* 0000E74C 0001B4DC 3B AA 00 00 */ addi r29, r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l -/* 0000E750 0001B4E0 91 78 00 04 */ stw r11, 0x4(r24) -/* 0000E754 0001B4E4 92 C1 00 6C */ stw r22, 0x6c(r1) -/* 0000E758 0001B4E8 3B 1F 00 34 */ addi r24, r31, 0x34 -/* 0000E75C 0001B4EC 80 9D 00 08 */ lwz r4, 0x8(r29) -/* 0000E760 0001B4F0 80 1D 00 04 */ lwz r0, 0x4(r29) -/* 0000E764 0001B4F4 7C 04 00 40 */ cmplw r4, r0 -/* 0000E768 0001B4F8 41 80 E8 48 */ blt .L_0000CFB0 -/* 0000E76C 0001B4FC 81 3D 00 0C */ lwz r9, 0xc(r29) -/* 0000E770 0001B500 38 84 00 01 */ addi r4, r4, 0x1 -/* 0000E774 0001B504 80 09 00 24 */ lwz r0, 0x24(r9) -/* 0000E778 0001B508 A8 69 00 20 */ lha r3, 0x20(r9) -/* 0000E77C 0001B50C 7C 08 03 A6 */ mtlr r0 -/* 0000E780 0001B510 7C 63 EA 14 */ add r3, r3, r29 -/* 0000E784 0001B514 4E 80 00 21 */ blrl -/* 0000E788 0001B518 80 1D 00 04 */ lwz r0, 0x4(r29) -/* 0000E78C 0001B51C 7C 7E 1B 78 */ mr r30, r3 -/* 0000E790 0001B520 7C 1E 00 40 */ cmplw r30, r0 -/* 0000E794 0001B524 40 81 E8 48 */ ble .L_0000CFDC -/* 0000E798 0001B528 81 3D 00 0C */ lwz r9, 0xc(r29) -/* 0000E79C 0001B52C 7F C4 F3 78 */ mr r4, r30 -/* 0000E7A0 0001B530 80 09 00 34 */ lwz r0, 0x34(r9) -/* 0000E7A4 0001B534 A8 69 00 30 */ lha r3, 0x30(r9) -/* 0000E7A8 0001B538 7C 08 03 A6 */ mtlr r0 -/* 0000E7AC 0001B53C 7C 63 EA 14 */ add r3, r3, r29 -/* 0000E7B0 0001B540 4E 80 00 21 */ blrl -/* 0000E7B4 0001B544 81 3D 00 0C */ lwz r9, 0xc(r29) -/* 0000E7B8 0001B548 7F C4 F3 78 */ mr r4, r30 -/* 0000E7BC 0001B54C 38 A0 00 10 */ li r5, 0x10 -/* 0000E7C0 0001B550 83 93 00 00 */ lwz r28, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r19) -/* 0000E7C4 0001B554 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000E7C8 0001B558 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000E7CC 0001B55C 7C 63 EA 14 */ add r3, r3, r29 -/* 0000E7D0 0001B560 83 7D 00 08 */ lwz r27, 0x8(r29) -.L_0000E7D4: -/* 0000E7D4 0001B564 7C 08 03 A6 */ mtlr r0 -/* 0000E7D8 0001B568 82 FD 00 04 */ lwz r23, 0x4(r29) -/* 0000E7DC 0001B56C 4E 80 00 21 */ blrl -/* 0000E7E0 0001B570 93 DD 00 04 */ stw r30, 0x4(r29) -/* 0000E7E4 0001B574 7C 1C 18 00 */ cmpw r28, r3 -/* 0000E7E8 0001B578 90 73 00 00 */ stw r3, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r19) -/* 0000E7EC 0001B57C 41 82 E8 48 */ beq .L_0000D034 -/* 0000E7F0 0001B580 38 00 00 00 */ li r0, 0x0 -/* 0000E7F4 0001B584 3B C0 00 00 */ li r30, 0x0 -/* 0000E7F8 0001B588 90 1D 00 08 */ stw r0, 0x8(r29) -/* 0000E7FC 0001B58C 7C 1E D8 00 */ cmpw r30, r27 -/* 0000E800 0001B590 2E 1C 00 00 */ cmpwi cr4, r28, 0x0 -/* 0000E804 0001B594 40 80 E8 24 */ bge .L_0000D028 -/* 0000E808 0001B598 57 C4 10 3A */ slwi r4, r30, 2 -/* 0000E80C 0001B59C 7F A3 EB 78 */ mr r3, r29 -/* 0000E810 0001B5A0 7C 9C 22 14 */ add r4, r28, r4 -/* 0000E814 0001B5A4 3B DE 00 01 */ addi r30, r30, 0x1 -/* 0000E818 0001B5A8 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZP14ITrafficCenteri16RCP14ITrafficCenter -/* 0000E81C 0001B5AC 7C 1E D8 00 */ cmpw r30, r27 -/* 0000E820 0001B5B0 41 80 E8 08 */ blt .L_0000D028 -/* 0000E824 0001B5B4 41 92 E8 48 */ beq cr4, .L_0000D06C -/* 0000E828 0001B5B8 81 3D 00 0C */ lwz r9, 0xc(r29) -/* 0000E82C 0001B5BC 7F 84 E3 78 */ mr r4, r28 -/* 0000E830 0001B5C0 7E E5 BB 78 */ mr r5, r23 -/* 0000E834 0001B5C4 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000E838 0001B5C8 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0000E83C 0001B5CC 7C 7D 1A 14 */ add r3, r29, r3 -/* 0000E840 0001B5D0 7C 08 03 A6 */ mtlr r0 -/* 0000E844 0001B5D4 4E 80 00 21 */ blrl -/* 0000E848 0001B5D8 81 3D 00 08 */ lwz r9, 0x8(r29) -/* 0000E84C 0001B5DC 81 7D 00 00 */ lwz r11, 0x0(r29) -/* 0000E850 0001B5E0 55 29 10 3A */ slwi r9, r9, 2 -/* 0000E854 0001B5E4 7C 09 5A 14 */ add r0, r9, r11 -/* 0000E858 0001B5E8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000E85C 0001B5EC 41 82 E8 68 */ beq .L_0000D0C4 -/* 0000E860 0001B5F0 80 19 00 00 */ lwz r0, 0x0(r25) -/* 0000E864 0001B5F4 7C 09 59 2E */ stwx r0, r9, r11 -/* 0000E868 0001B5F8 81 3D 00 08 */ lwz r9, 0x8(r29) -/* 0000E86C 0001B5FC 3D 60 00 00 */ lis r11, _vt.14ITrafficCenter@ha -/* 0000E870 0001B600 39 6B 00 00 */ addi r11, r11, _vt.14ITrafficCenter@l -/* 0000E874 0001B604 3B C0 00 00 */ li r30, 0x0 -/* 0000E878 0001B608 39 29 00 01 */ addi r9, r9, 0x1 -/* 0000E87C 0001B60C 3D 00 00 00 */ lis r8, _vt.21CDActionDebugWatchCar.14IDebugWatchCar@ha -/* 0000E880 0001B610 91 3D 00 08 */ stw r9, 0x8(r29) -/* 0000E884 0001B614 3D 40 00 00 */ lis r10, _vt.21CDActionDebugWatchCar.14ITrafficCenter@ha -/* 0000E888 0001B618 91 76 00 04 */ stw r11, 0x4(r22) -/* 0000E88C 0001B61C 3D 20 00 00 */ lis r9, _vt.21CDActionDebugWatchCar@ha -/* 0000E890 0001B620 3D 60 00 00 */ lis r11, .rodata@ha -/* 0000E894 0001B624 38 C0 00 00 */ li r6, 0x0 -/* 0000E898 0001B628 39 08 00 00 */ addi r8, r8, _vt.21CDActionDebugWatchCar.14IDebugWatchCar@l -/* 0000E89C 0001B62C 38 E0 00 00 */ li r7, 0x0 -/* 0000E8A0 0001B630 39 4A 00 00 */ addi r10, r10, _vt.21CDActionDebugWatchCar.14ITrafficCenter@l -.L_0000E8A4: -/* 0000E8A4 0001B634 39 29 00 00 */ addi r9, r9, _vt.21CDActionDebugWatchCar@l -/* 0000E8A8 0001B638 39 6B 00 00 */ addi r11, r11, .rodata@l -/* 0000E8AC 0001B63C 93 DF 00 34 */ stw r30, 0x34(r31) -/* 0000E8B0 0001B640 93 DF 00 38 */ stw r30, 0x38(r31) -/* 0000E8B4 0001B644 38 61 00 08 */ addi r3, r1, 0x8 -/* 0000E8B8 0001B648 93 DF 00 3C */ stw r30, 0x3c(r31) -/* 0000E8BC 0001B64C 38 80 00 00 */ li r4, 0x0 -/* 0000E8C0 0001B650 93 DF 00 40 */ stw r30, 0x40(r31) -/* 0000E8C4 0001B654 93 DF 00 50 */ stw r30, 0x50(r31) -/* 0000E8C8 0001B658 91 1F 00 1C */ stw r8, 0x1c(r31) -/* 0000E8CC 0001B65C 90 DF 00 48 */ stw r6, 0x48(r31) -/* 0000E8D0 0001B660 90 FF 00 4C */ stw r7, 0x4c(r31) -/* 0000E8D4 0001B664 91 5F 00 28 */ stw r10, 0x28(r31) -/* 0000E8D8 0001B668 91 3F 00 14 */ stw r9, 0x14(r31) -/* 0000E8DC 0001B66C 91 7F 00 54 */ stw r11, 0x54(r31) -/* 0000E8E0 0001B670 48 00 00 01 */ bl __Q29WorldConn9ReferenceUi -/* 0000E8E4 0001B674 81 61 00 08 */ lwz r11, 0x8(r1) -/* 0000E8E8 0001B678 38 80 00 02 */ li r4, 0x2 -/* 0000E8EC 0001B67C 81 5A 00 04 */ lwz r10, 0x4(r26) -/* 0000E8F0 0001B680 7F 43 D3 78 */ mr r3, r26 -/* 0000E8F4 0001B684 81 3A 00 08 */ lwz r9, 0x8(r26) -/* 0000E8F8 0001B688 80 1A 00 0C */ lwz r0, 0xc(r26) -.L_0000E8FC: -/* 0000E8FC 0001B68C 91 7F 00 34 */ stw r11, 0x34(r31) -/* 0000E900 0001B690 91 58 00 04 */ stw r10, 0x4(r24) -/* 0000E904 0001B694 90 18 00 0C */ stw r0, 0xc(r24) -/* 0000E908 0001B698 91 38 00 08 */ stw r9, 0x8(r24) -/* 0000E90C 0001B69C 48 00 00 01 */ bl _._Q29WorldConn9Reference -/* 0000E910 0001B6A0 93 DF 00 58 */ stw r30, 0x58(r31) -/* 0000E914 0001B6A4 81 75 00 18 */ lwz r11, 0x18(r21) -/* 0000E918 0001B6A8 81 2B 00 14 */ lwz r9, 0x14(r11) -/* 0000E91C 0001B6AC 80 09 00 24 */ lwz r0, 0x24(r9) -.L_0000E920: -/* 0000E920 0001B6B0 A8 69 00 20 */ lha r3, 0x20(r9) -/* 0000E924 0001B6B4 7C 08 03 A6 */ mtlr r0 -/* 0000E928 0001B6B8 7C 6B 1A 14 */ add r3, r11, r3 -/* 0000E92C 0001B6BC 4E 80 00 21 */ blrl -/* 0000E930 0001B6C0 7C 6B 1B 78 */ mr r11, r3 -/* 0000E934 0001B6C4 80 0B 00 0C */ lwz r0, 0xc(r11) -/* 0000E938 0001B6C8 7E A3 AB 78 */ mr r3, r21 -/* 0000E93C 0001B6CC 90 1F 00 54 */ stw r0, 0x54(r31) -/* 0000E940 0001B6D0 81 2B 00 00 */ lwz r9, 0x0(r11) -/* 0000E944 0001B6D4 81 4B 00 04 */ lwz r10, 0x4(r11) -/* 0000E948 0001B6D8 91 3F 00 48 */ stw r9, 0x48(r31) -/* 0000E94C 0001B6DC 91 5F 00 4C */ stw r10, 0x4c(r31) -/* 0000E950 0001B6E0 80 0B 00 08 */ lwz r0, 0x8(r11) -/* 0000E954 0001B6E4 90 1F 00 50 */ stw r0, 0x50(r31) -/* 0000E958 0001B6E8 48 00 60 85 */ bl .L_000149DC -/* 0000E95C 0001B6EC 7C 63 1B 79 */ mr. r3, r3 -/* 0000E960 0001B6F0 41 82 E9 A0 */ beq .L_0000D300 -/* 0000E964 0001B6F4 81 23 00 1C */ lwz r9, 0x1c(r3) -/* 0000E968 0001B6F8 C0 09 00 40 */ lfs f0, 0x40(r9) -/* 0000E96C 0001B6FC C1 A9 00 44 */ lfs f13, 0x44(r9) -/* 0000E970 0001B700 C1 89 00 48 */ lfs f12, 0x48(r9) -/* 0000E974 0001B704 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 0000E978 0001B708 D1 A1 00 0C */ stfs f13, 0xc(r1) -/* 0000E97C 0001B70C D1 9A 00 08 */ stfs f12, 0x8(r26) -/* 0000E980 0001B710 81 23 00 1C */ lwz r9, 0x1c(r3) -/* 0000E984 0001B714 C1 89 00 58 */ lfs f12, 0x58(r9) -/* 0000E988 0001B718 C0 09 00 50 */ lfs f0, 0x50(r9) -/* 0000E98C 0001B71C C1 A9 00 54 */ lfs f13, 0x54(r9) -/* 0000E990 0001B720 D0 01 00 18 */ stfs f0, 0x18(r1) -/* 0000E994 0001B724 D1 A1 00 1C */ stfs f13, 0x1c(r1) -/* 0000E998 0001B728 D1 81 00 20 */ stfs f12, 0x20(r1) -/* 0000E99C 0001B72C 48 00 E9 C8 */ b .text+0xE9C8 -/* 0000E9A0 0001B730 3D 20 00 00 */ lis r9, .rodata+0x918@ha -/* 0000E9A4 0001B734 3D 60 00 00 */ lis r11, .rodata+0x91C@ha -/* 0000E9A8 0001B738 C0 09 09 18 */ lfs f0, .rodata+0x918@l(r9) -/* 0000E9AC 0001B73C C1 AB 09 1C */ lfs f13, .rodata+0x91C@l(r11) -/* 0000E9B0 0001B740 D0 01 00 1C */ stfs f0, 0x1c(r1) -/* 0000E9B4 0001B744 D1 A1 00 20 */ stfs f13, 0x20(r1) -/* 0000E9B8 0001B748 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 0000E9BC 0001B74C D0 01 00 0C */ stfs f0, 0xc(r1) -/* 0000E9C0 0001B750 D0 01 00 10 */ stfs f0, 0x10(r1) -/* 0000E9C4 0001B754 D0 01 00 18 */ stfs f0, 0x18(r1) -/* 0000E9C8 0001B758 38 60 01 24 */ li r3, 0x124 -/* 0000E9CC 0001B75C 48 00 00 01 */ bl __builtin_new -/* 0000E9D0 0001B760 38 80 00 00 */ li r4, 0x0 -/* 0000E9D4 0001B764 48 00 10 51 */ bl .L_0000FA24 -/* 0000E9D8 0001B768 90 7F 00 30 */ stw r3, 0x30(r31) -/* 0000E9DC 0001B76C 7F E3 FB 78 */ mr r3, r31 -/* 0000E9E0 0001B770 48 00 E3 A1 */ bl .L_0001CD80 -/* 0000E9E4 0001B774 80 7F 00 38 */ lwz r3, 0x38(r31) -/* 0000E9E8 0001B778 38 00 00 01 */ li r0, 0x1 -/* 0000E9EC 0001B77C 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000E9F0 0001B780 40 82 E9 F8 */ bne .L_0000D3E8 -.L_0000E9F4: -/* 0000E9F4 0001B784 38 00 00 00 */ li r0, 0x0 -/* 0000E9F8 0001B788 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000E9FC 0001B78C 41 82 EA 24 */ beq .L_0000D420 -.L_0000EA00: -/* 0000EA00 0001B790 38 81 00 28 */ addi r4, r1, 0x28 -/* 0000EA04 0001B794 48 00 00 01 */ bl PSMTX44Copy -/* 0000EA08 0001B798 3D 20 00 00 */ lis r9, .rodata+0x918@ha -/* 0000EA0C 0001B79C 80 7F 00 30 */ lwz r3, 0x30(r31) -/* 0000EA10 0001B7A0 C0 29 09 18 */ lfs f1, .rodata+0x918@l(r9) -/* 0000EA14 0001B7A4 38 81 00 28 */ addi r4, r1, 0x28 -/* 0000EA18 0001B7A8 80 BF 00 3C */ lwz r5, 0x3c(r31) -/* 0000EA1C 0001B7AC 80 DF 00 40 */ lwz r6, 0x40(r31) -/* 0000EA20 0001B7B0 48 00 17 65 */ bl .L_00010184 -/* 0000EA24 0001B7B4 38 60 00 D8 */ li r3, 0xd8 -/* 0000EA28 0001B7B8 48 00 00 01 */ bl __builtin_new -/* 0000EA2C 0001B7BC 80 95 00 04 */ lwz r4, 0x4(r21) -/* 0000EA30 0001B7C0 38 C0 00 01 */ li r6, 0x1 -/* 0000EA34 0001B7C4 80 BF 00 30 */ lwz r5, 0x30(r31) -/* 0000EA38 0001B7C8 48 00 4D C9 */ bl .L_00013800 -/* 0000EA3C 0001B7CC 90 7F 00 2C */ stw r3, 0x2c(r31) -/* 0000EA40 0001B7D0 7F E3 FB 78 */ mr r3, r31 -/* 0000EA44 0001B7D4 80 01 00 AC */ lwz r0, 0xac(r1) -/* 0000EA48 0001B7D8 81 81 00 70 */ lwz r12, 0x70(r1) -/* 0000EA4C 0001B7DC 7C 08 03 A6 */ mtlr r0 -/* 0000EA50 0001B7E0 BA 61 00 74 */ lmw r19, 0x74(r1) -/* 0000EA54 0001B7E4 7D 80 81 20 */ mtcrf 8, r12 -/* 0000EA58 0001B7E8 38 21 00 A8 */ addi r1, r1, 0xa8 -/* 0000EA5C 0001B7EC 4E 80 00 20 */ blr -.endfn __21CDActionDebugWatchCarPQ28CameraAI8Director - -# .text:0xEA60 | size: 0x31C -.fn _._21CDActionDebugWatchCar, global -/* 0000EA60 0001B7F0 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 0000EA64 0001B7F4 7C 08 02 A6 */ mflr r0 -/* 0000EA68 0001B7F8 BF 41 00 10 */ stmw r26, 0x10(r1) -/* 0000EA6C 0001B7FC 90 01 00 2C */ stw r0, 0x2c(r1) -/* 0000EA70 0001B800 3D 20 00 00 */ lis r9, _vt.21CDActionDebugWatchCar.14IDebugWatchCar@ha -/* 0000EA74 0001B804 3D 60 00 00 */ lis r11, _vt.21CDActionDebugWatchCar.14ITrafficCenter@ha -.L_0000EA78: -/* 0000EA78 0001B808 3D 40 00 00 */ lis r10, _vt.21CDActionDebugWatchCar@ha -/* 0000EA7C 0001B80C 7C 7E 1B 78 */ mr r30, r3 -/* 0000EA80 0001B810 39 6B 00 00 */ addi r11, r11, _vt.21CDActionDebugWatchCar.14ITrafficCenter@l -/* 0000EA84 0001B814 39 29 00 00 */ addi r9, r9, _vt.21CDActionDebugWatchCar.14IDebugWatchCar@l -/* 0000EA88 0001B818 39 4A 00 00 */ addi r10, r10, _vt.21CDActionDebugWatchCar@l -/* 0000EA8C 0001B81C 91 7E 00 28 */ stw r11, 0x28(r30) -/* 0000EA90 0001B820 7C 9A 23 78 */ mr r26, r4 -/* 0000EA94 0001B824 91 3E 00 1C */ stw r9, 0x1c(r30) -/* 0000EA98 0001B828 91 5E 00 14 */ stw r10, 0x14(r30) -/* 0000EA9C 0001B82C 48 00 E3 51 */ bl .L_0001CDEC -/* 0000EAA0 0001B830 3B FE 00 24 */ addi r31, r30, 0x24 -/* 0000EAA4 0001B834 81 7E 00 2C */ lwz r11, 0x2c(r30) -/* 0000EAA8 0001B838 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000EAAC 0001B83C 41 82 EA CC */ beq .L_0000D578 -/* 0000EAB0 0001B840 81 2B 00 08 */ lwz r9, 0x8(r11) -/* 0000EAB4 0001B844 38 80 00 03 */ li r4, 0x3 -/* 0000EAB8 0001B848 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0000EABC 0001B84C 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0000EAC0 0001B850 7C 6B 1A 14 */ add r3, r11, r3 -.L_0000EAC4: -/* 0000EAC4 0001B854 7C 08 03 A6 */ mtlr r0 -/* 0000EAC8 0001B858 4E 80 00 21 */ blrl -/* 0000EACC 0001B85C 80 7E 00 30 */ lwz r3, 0x30(r30) -/* 0000EAD0 0001B860 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000EAD4 0001B864 41 82 EA E0 */ beq .L_0000D5B4 -/* 0000EAD8 0001B868 38 80 00 03 */ li r4, 0x3 -/* 0000EADC 0001B86C 48 00 13 6D */ bl .L_0000FE48 -/* 0000EAE0 0001B870 38 7E 00 34 */ addi r3, r30, 0x34 -/* 0000EAE4 0001B874 38 80 00 02 */ li r4, 0x2 -/* 0000EAE8 0001B878 48 00 00 01 */ bl _._Q29WorldConn9Reference -/* 0000EAEC 0001B87C 3D 20 00 00 */ lis r9, _vt.14ITrafficCenter@ha -/* 0000EAF0 0001B880 3D 40 00 00 */ lis r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha -/* 0000EAF4 0001B884 39 29 00 00 */ addi r9, r9, _vt.14ITrafficCenter@l -/* 0000EAF8 0001B888 39 6A 00 00 */ addi r11, r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l -/* 0000EAFC 0001B88C 91 3E 00 28 */ stw r9, 0x28(r30) -/* 0000EB00 0001B890 3B A1 00 08 */ addi r29, r1, 0x8 -/* 0000EB04 0001B894 93 E1 00 08 */ stw r31, 0x8(r1) -/* 0000EB08 0001B898 7F A5 EB 78 */ mr r5, r29 -/* 0000EB0C 0001B89C 80 6A 00 00 */ lwz r3, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r10) -/* 0000EB10 0001B8A0 80 0B 00 08 */ lwz r0, 0x8(r11) -/* 0000EB14 0001B8A4 54 00 10 3A */ slwi r0, r0, 2 -.L_0000EB18: -/* 0000EB18 0001B8A8 7F E3 02 14 */ add r31, r3, r0 -/* 0000EB1C 0001B8AC 7F E4 FB 78 */ mr r4, r31 -/* 0000EB20 0001B8B0 48 00 00 01 */ bl find__H2ZPP14ITrafficCenterZP14ITrafficCenter_4_STLX01X01RCX11_X01 -/* 0000EB24 0001B8B4 7C 03 F8 00 */ cmpw r3, r31 -/* 0000EB28 0001B8B8 40 82 EB 3C */ bne .L_0000D664 -/* 0000EB2C 0001B8BC 7F E3 FB 78 */ mr r3, r31 -/* 0000EB30 0001B8C0 3B 7E 00 18 */ addi r27, r30, 0x18 -/* 0000EB34 0001B8C4 3B 81 00 0C */ addi r28, r1, 0xc -/* 0000EB38 0001B8C8 48 00 EB 74 */ b .text+0xEB74 -/* 0000EB3C 0001B8CC 39 63 00 04 */ addi r11, r3, 0x4 -/* 0000EB40 0001B8D0 3B 7E 00 18 */ addi r27, r30, 0x18 -/* 0000EB44 0001B8D4 7C 0B F8 00 */ cmpw r11, r31 -/* 0000EB48 0001B8D8 3B 81 00 0C */ addi r28, r1, 0xc -/* 0000EB4C 0001B8DC 41 82 EB 74 */ beq .L_0000D6C0 -/* 0000EB50 0001B8E0 81 2B 00 00 */ lwz r9, 0x0(r11) -/* 0000EB54 0001B8E4 80 1D 00 00 */ lwz r0, 0x0(r29) -/* 0000EB58 0001B8E8 7C 09 00 00 */ cmpw r9, r0 -/* 0000EB5C 0001B8EC 41 82 EB 68 */ beq .L_0000D6C4 -/* 0000EB60 0001B8F0 91 23 00 00 */ stw r9, 0x0(r3) -/* 0000EB64 0001B8F4 38 63 00 04 */ addi r3, r3, 0x4 -/* 0000EB68 0001B8F8 39 6B 00 04 */ addi r11, r11, 0x4 -/* 0000EB6C 0001B8FC 7C 0B F8 00 */ cmpw r11, r31 -/* 0000EB70 0001B900 40 82 EB 50 */ bne .L_0000D6C0 -/* 0000EB74 0001B904 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha -/* 0000EB78 0001B908 38 A9 00 00 */ addi r5, r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l -/* 0000EB7C 0001B90C 81 49 00 00 */ lwz r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r9) -/* 0000EB80 0001B910 81 05 00 08 */ lwz r8, 0x8(r5) -/* 0000EB84 0001B914 55 00 10 3A */ slwi r0, r8, 2 -/* 0000EB88 0001B918 7D 6A 02 14 */ add r11, r10, r0 -/* 0000EB8C 0001B91C 7C 03 58 00 */ cmpw r3, r11 -/* 0000EB90 0001B920 41 82 EC 08 */ beq .L_0000D798 -/* 0000EB94 0001B924 7D 23 58 50 */ subf r9, r3, r11 -/* 0000EB98 0001B928 7C 0A 18 50 */ subf r0, r10, r3 -/* 0000EB9C 0001B92C 7D 3F 16 70 */ srawi r31, r9, 2 -/* 0000EBA0 0001B930 7C 06 16 70 */ srawi r6, r0, 2 -/* 0000EBA4 0001B934 7D 09 43 78 */ mr r9, r8 -/* 0000EBA8 0001B938 38 63 00 04 */ addi r3, r3, 0x4 -/* 0000EBAC 0001B93C 7C 03 58 00 */ cmpw r3, r11 -/* 0000EBB0 0001B940 40 82 EB A8 */ bne .L_0000D758 -/* 0000EBB4 0001B944 7C E6 FA 14 */ add r7, r6, r31 -/* 0000EBB8 0001B948 39 00 00 00 */ li r8, 0x0 -/* 0000EBBC 0001B94C 7C E4 3B 78 */ mr r4, r7 -/* 0000EBC0 0001B950 7C 04 48 50 */ subf r0, r4, r9 -/* 0000EBC4 0001B954 7C 08 00 40 */ cmplw r8, r0 -/* 0000EBC8 0001B958 40 80 EC 00 */ bge .L_0000D7C8 -/* 0000EBCC 0001B95C 7C 06 42 14 */ add r0, r6, r8 -/* 0000EBD0 0001B960 81 65 00 00 */ lwz r11, 0x0(r5) -/* 0000EBD4 0001B964 54 0A 10 3A */ slwi r10, r0, 2 -/* 0000EBD8 0001B968 7D 27 42 14 */ add r9, r7, r8 -/* 0000EBDC 0001B96C 7C 0A 5A 14 */ add r0, r10, r11 -/* 0000EBE0 0001B970 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000EBE4 0001B974 41 82 EB F4 */ beq .L_0000D7D8 -/* 0000EBE8 0001B978 55 29 10 3A */ slwi r9, r9, 2 -.L_0000EBEC: -/* 0000EBEC 0001B97C 7C 09 58 2E */ lwzx r0, r9, r11 -/* 0000EBF0 0001B980 7C 0A 59 2E */ stwx r0, r10, r11 -/* 0000EBF4 0001B984 39 08 00 01 */ addi r8, r8, 0x1 -/* 0000EBF8 0001B988 81 25 00 08 */ lwz r9, 0x8(r5) -/* 0000EBFC 0001B98C 48 00 EB C0 */ b .text+0xEBC0 -/* 0000EC00 0001B990 7C 1F 48 50 */ subf r0, r31, r9 -/* 0000EC04 0001B994 90 05 00 08 */ stw r0, 0x8(r5) -/* 0000EC08 0001B998 3D 20 00 00 */ lis r9, _vt.14IDebugWatchCar@ha -/* 0000EC0C 0001B99C 3D 40 00 00 */ lis r10, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@ha -/* 0000EC10 0001B9A0 39 29 00 00 */ addi r9, r9, _vt.14IDebugWatchCar@l -/* 0000EC14 0001B9A4 39 6A 00 00 */ addi r11, r10, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@l -/* 0000EC18 0001B9A8 91 3E 00 1C */ stw r9, 0x1c(r30) -/* 0000EC1C 0001B9AC 7F 85 E3 78 */ mr r5, r28 -/* 0000EC20 0001B9B0 93 61 00 0C */ stw r27, 0xc(r1) -/* 0000EC24 0001B9B4 80 6A 00 00 */ lwz r3, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@l(r10) -/* 0000EC28 0001B9B8 80 0B 00 08 */ lwz r0, 0x8(r11) -/* 0000EC2C 0001B9BC 54 00 10 3A */ slwi r0, r0, 2 -/* 0000EC30 0001B9C0 7F E3 02 14 */ add r31, r3, r0 -/* 0000EC34 0001B9C4 7F E4 FB 78 */ mr r4, r31 -/* 0000EC38 0001B9C8 48 00 00 01 */ bl find__H2ZPP14IDebugWatchCarZP14IDebugWatchCar_4_STLX01X01RCX11_X01 -/* 0000EC3C 0001B9CC 7C 03 F8 00 */ cmpw r3, r31 -/* 0000EC40 0001B9D0 40 82 EC 4C */ bne .L_0000D88C -/* 0000EC44 0001B9D4 7F E3 FB 78 */ mr r3, r31 -/* 0000EC48 0001B9D8 48 00 EC 7C */ b .text+0xEC7C -/* 0000EC4C 0001B9DC 39 63 00 04 */ addi r11, r3, 0x4 -/* 0000EC50 0001B9E0 7C 0B F8 00 */ cmpw r11, r31 -/* 0000EC54 0001B9E4 41 82 EC 7C */ beq .L_0000D8D0 -/* 0000EC58 0001B9E8 81 2B 00 00 */ lwz r9, 0x0(r11) -/* 0000EC5C 0001B9EC 80 1C 00 00 */ lwz r0, 0x0(r28) -/* 0000EC60 0001B9F0 7C 09 00 00 */ cmpw r9, r0 -/* 0000EC64 0001B9F4 41 82 EC 70 */ beq .L_0000D8D4 -/* 0000EC68 0001B9F8 91 23 00 00 */ stw r9, 0x0(r3) -/* 0000EC6C 0001B9FC 38 63 00 04 */ addi r3, r3, 0x4 -/* 0000EC70 0001BA00 39 6B 00 04 */ addi r11, r11, 0x4 -/* 0000EC74 0001BA04 7C 0B F8 00 */ cmpw r11, r31 -/* 0000EC78 0001BA08 40 82 EC 58 */ bne .L_0000D8D0 -/* 0000EC7C 0001BA0C 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@ha -/* 0000EC80 0001BA10 38 A9 00 00 */ addi r5, r9, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@l -/* 0000EC84 0001BA14 81 49 00 00 */ lwz r10, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@l(r9) -/* 0000EC88 0001BA18 81 05 00 08 */ lwz r8, 0x8(r5) -/* 0000EC8C 0001BA1C 55 00 10 3A */ slwi r0, r8, 2 -/* 0000EC90 0001BA20 7D 6A 02 14 */ add r11, r10, r0 -/* 0000EC94 0001BA24 7C 03 58 00 */ cmpw r3, r11 -/* 0000EC98 0001BA28 41 82 ED 10 */ beq .L_0000D9A8 -/* 0000EC9C 0001BA2C 7D 23 58 50 */ subf r9, r3, r11 -/* 0000ECA0 0001BA30 7C 0A 18 50 */ subf r0, r10, r3 -/* 0000ECA4 0001BA34 7D 3F 16 70 */ srawi r31, r9, 2 -/* 0000ECA8 0001BA38 7C 06 16 70 */ srawi r6, r0, 2 -/* 0000ECAC 0001BA3C 7D 09 43 78 */ mr r9, r8 -/* 0000ECB0 0001BA40 38 63 00 04 */ addi r3, r3, 0x4 -/* 0000ECB4 0001BA44 7C 03 58 00 */ cmpw r3, r11 -/* 0000ECB8 0001BA48 40 82 EC B0 */ bne .L_0000D968 -/* 0000ECBC 0001BA4C 7C E6 FA 14 */ add r7, r6, r31 -/* 0000ECC0 0001BA50 39 00 00 00 */ li r8, 0x0 -/* 0000ECC4 0001BA54 7C E4 3B 78 */ mr r4, r7 -/* 0000ECC8 0001BA58 7C 04 48 50 */ subf r0, r4, r9 -/* 0000ECCC 0001BA5C 7C 08 00 40 */ cmplw r8, r0 -/* 0000ECD0 0001BA60 40 80 ED 08 */ bge .L_0000D9D8 -/* 0000ECD4 0001BA64 7C 06 42 14 */ add r0, r6, r8 -/* 0000ECD8 0001BA68 81 65 00 00 */ lwz r11, 0x0(r5) -/* 0000ECDC 0001BA6C 54 0A 10 3A */ slwi r10, r0, 2 -/* 0000ECE0 0001BA70 7D 27 42 14 */ add r9, r7, r8 -/* 0000ECE4 0001BA74 7C 0A 5A 14 */ add r0, r10, r11 -/* 0000ECE8 0001BA78 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000ECEC 0001BA7C 41 82 EC FC */ beq .L_0000D9E8 -/* 0000ECF0 0001BA80 55 29 10 3A */ slwi r9, r9, 2 -/* 0000ECF4 0001BA84 7C 09 58 2E */ lwzx r0, r9, r11 -/* 0000ECF8 0001BA88 7C 0A 59 2E */ stwx r0, r10, r11 -/* 0000ECFC 0001BA8C 39 08 00 01 */ addi r8, r8, 0x1 -/* 0000ED00 0001BA90 81 25 00 08 */ lwz r9, 0x8(r5) -/* 0000ED04 0001BA94 48 00 EC C8 */ b .text+0xECC8 -/* 0000ED08 0001BA98 7C 1F 48 50 */ subf r0, r31, r9 -/* 0000ED0C 0001BA9C 90 05 00 08 */ stw r0, 0x8(r5) -/* 0000ED10 0001BAA0 3D 20 00 00 */ lis r9, _vt.Q33UTL3COM8IUnknown@ha -/* 0000ED14 0001BAA4 80 7B 00 00 */ lwz r3, 0x0(r27) -/* 0000ED18 0001BAA8 39 29 00 00 */ addi r9, r9, _vt.Q33UTL3COM8IUnknown@l -/* 0000ED1C 0001BAAC 7F 64 DB 78 */ mr r4, r27 -/* 0000ED20 0001BAB0 91 3B 00 04 */ stw r9, 0x4(r27) -/* 0000ED24 0001BAB4 48 00 00 01 */ bl Remove__Q43UTL3COM6Object6_IListPQ33UTL3COM8IUnknown -.L_0000ED28: -/* 0000ED28 0001BAB8 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha -/* 0000ED2C 0001BABC 7F C3 F3 78 */ mr r3, r30 -/* 0000ED30 0001BAC0 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l -.L_0000ED34: -/* 0000ED34 0001BAC4 38 80 00 02 */ li r4, 0x2 -/* 0000ED38 0001BAC8 91 3E 00 14 */ stw r9, 0x14(r30) -/* 0000ED3C 0001BACC 48 00 00 01 */ bl _._Q43UTL3COM6Object6_IList -/* 0000ED40 0001BAD0 73 40 00 01 */ andi. r0, r26, 0x1 -/* 0000ED44 0001BAD4 41 82 ED 68 */ beq .L_0000DAAC -/* 0000ED48 0001BAD8 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 0000ED4C 0001BADC 41 82 ED 68 */ beq .L_0000DAB4 -.L_0000ED50: -/* 0000ED50 0001BAE0 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0000ED54 0001BAE4 7F C4 F3 78 */ mr r4, r30 -/* 0000ED58 0001BAE8 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0000ED5C 0001BAEC 38 A0 00 60 */ li r5, 0x60 -/* 0000ED60 0001BAF0 38 C0 00 00 */ li r6, 0x0 -/* 0000ED64 0001BAF4 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 0000ED68 0001BAF8 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 0000ED6C 0001BAFC 7C 08 03 A6 */ mtlr r0 -/* 0000ED70 0001BB00 BB 41 00 10 */ lmw r26, 0x10(r1) -/* 0000ED74 0001BB04 38 21 00 28 */ addi r1, r1, 0x28 -/* 0000ED78 0001BB08 4E 80 00 20 */ blr -.endfn _._21CDActionDebugWatchCar - -# .text:0xED7C | size: 0x98 -.fn Update__21CDActionDebugWatchCarf, global -/* 0000ED7C 0001BB0C 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0000ED80 0001BB10 7C 08 02 A6 */ mflr r0 -/* 0000ED84 0001BB14 F3 E1 00 10 */ psq_st f31, 0x10(r1), 0, qr0 -/* 0000ED88 0001BB18 93 E1 00 0C */ stw r31, 0xc(r1) -/* 0000ED8C 0001BB1C 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0000ED90 0001BB20 7C 7F 1B 78 */ mr r31, r3 -/* 0000ED94 0001BB24 FF E0 08 90 */ fmr f31, f1 -/* 0000ED98 0001BB28 48 00 E3 A1 */ bl AllocVectorSpace__Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16UiUi -/* 0000ED9C 0001BB2C 80 1F 00 38 */ lwz r0, 0x38(r31) -/* 0000EDA0 0001BB30 39 20 00 01 */ li r9, 0x1 -/* 0000EDA4 0001BB34 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000EDA8 0001BB38 40 82 ED B0 */ bne .L_0000DB58 -/* 0000EDAC 0001BB3C 39 20 00 00 */ li r9, 0x0 -/* 0000EDB0 0001BB40 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0000EDB4 0001BB44 41 82 ED DC */ beq .L_0000DB90 -/* 0000EDB8 0001BB48 80 1F 00 34 */ lwz r0, 0x34(r31) -/* 0000EDBC 0001BB4C FC 20 F8 90 */ fmr f1, f31 -/* 0000EDC0 0001BB50 81 3F 00 30 */ lwz r9, 0x30(r31) -/* 0000EDC4 0001BB54 90 09 00 8C */ stw r0, 0x8c(r9) -/* 0000EDC8 0001BB58 80 7F 00 30 */ lwz r3, 0x30(r31) -/* 0000EDCC 0001BB5C 80 9F 00 38 */ lwz r4, 0x38(r31) -/* 0000EDD0 0001BB60 80 BF 00 3C */ lwz r5, 0x3c(r31) -/* 0000EDD4 0001BB64 80 DF 00 40 */ lwz r6, 0x40(r31) -/* 0000EDD8 0001BB68 48 00 17 65 */ bl .L_0001053C -/* 0000EDDC 0001BB6C 80 7F 00 2C */ lwz r3, 0x2c(r31) -/* 0000EDE0 0001BB70 FC 20 F8 90 */ fmr f1, f31 -/* 0000EDE4 0001BB74 81 23 00 08 */ lwz r9, 0x8(r3) -/* 0000EDE8 0001BB78 A8 09 00 18 */ lha r0, 0x18(r9) -/* 0000EDEC 0001BB7C 81 29 00 1C */ lwz r9, 0x1c(r9) -/* 0000EDF0 0001BB80 7C 63 02 14 */ add r3, r3, r0 -/* 0000EDF4 0001BB84 7D 28 03 A6 */ mtlr r9 -/* 0000EDF8 0001BB88 4E 80 00 21 */ blrl -/* 0000EDFC 0001BB8C 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0000EE00 0001BB90 7C 08 03 A6 */ mtlr r0 -/* 0000EE04 0001BB94 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 0000EE08 0001BB98 E3 E1 00 10 */ psq_l f31, 0x10(r1), 0, qr0 -/* 0000EE0C 0001BB9C 38 21 00 18 */ addi r1, r1, 0x18 -/* 0000EE10 0001BBA0 4E 80 00 20 */ blr -.endfn Update__21CDActionDebugWatchCarf - -# .text:0xEE14 | size: 0x5C -.fn GetTrafficBasis__21CDActionDebugWatchCarRQ25UMath7Matrix4RQ25UMath7Vector3, global -/* 0000EE14 0001BBA4 94 21 FF E8 */ stwu r1, -0x18(r1) -.L_0000EE18: -/* 0000EE18 0001BBA8 7C 08 02 A6 */ mflr r0 -/* 0000EE1C 0001BBAC BF A1 00 0C */ stmw r29, 0xc(r1) -/* 0000EE20 0001BBB0 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0000EE24 0001BBB4 7C 7E 1B 78 */ mr r30, r3 -/* 0000EE28 0001BBB8 7C BD 2B 78 */ mr r29, r5 -/* 0000EE2C 0001BBBC 80 7E 00 38 */ lwz r3, 0x38(r30) -/* 0000EE30 0001BBC0 3B E0 00 01 */ li r31, 0x1 -/* 0000EE34 0001BBC4 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000EE38 0001BBC8 40 82 EE 40 */ bne .L_0000DC78 -/* 0000EE3C 0001BBCC 3B E0 00 00 */ li r31, 0x0 -/* 0000EE40 0001BBD0 2C 1F 00 00 */ cmpwi r31, 0x0 -/* 0000EE44 0001BBD4 41 82 EE 58 */ beq .L_0000DC9C -/* 0000EE48 0001BBD8 48 00 00 01 */ bl RightToLeftMatrix4__H2Z8bMatrix4ZQ25UMath7Matrix4__14ConversionUtilRCX01RX11_v -/* 0000EE4C 0001BBDC 80 7E 00 3C */ lwz r3, 0x3c(r30) -/* 0000EE50 0001BBE0 7F A4 EB 78 */ mr r4, r29 -.L_0000EE54: -/* 0000EE54 0001BBE4 48 00 00 01 */ bl RightToLeftVector3__H2Z8bVector3ZQ25UMath7Vector3__14ConversionUtilRCX01RX11_v -/* 0000EE58 0001BBE8 7F E3 FB 78 */ mr r3, r31 -/* 0000EE5C 0001BBEC 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0000EE60 0001BBF0 7C 08 03 A6 */ mtlr r0 -/* 0000EE64 0001BBF4 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 0000EE68 0001BBF8 38 21 00 18 */ addi r1, r1, 0x18 -/* 0000EE6C 0001BBFC 4E 80 00 20 */ blr -.endfn GetTrafficBasis__21CDActionDebugWatchCarRQ25UMath7Matrix4RQ25UMath7Vector3 - -# .text:0xEE70 | size: 0x68 -.fn bClamp__FP8bVector3PC8bVector3T1, global -/* 0000EE70 0001BC00 7C 69 1B 78 */ mr r9, r3 -/* 0000EE74 0001BC04 C0 64 00 08 */ lfs f3, 0x8(r4) -/* 0000EE78 0001BC08 C0 A4 00 00 */ lfs f5, 0x0(r4) -/* 0000EE7C 0001BC0C C0 C4 00 04 */ lfs f6, 0x4(r4) -/* 0000EE80 0001BC10 C0 09 00 00 */ lfs f0, 0x0(r9) -/* 0000EE84 0001BC14 C1 A9 00 04 */ lfs f13, 0x4(r9) -/* 0000EE88 0001BC18 C1 89 00 08 */ lfs f12, 0x8(r9) -/* 0000EE8C 0001BC1C ED 40 28 28 */ fsubs f10, f0, f5 -/* 0000EE90 0001BC20 C0 85 00 08 */ lfs f4, 0x8(r5) -/* 0000EE94 0001BC24 ED 2D 30 28 */ fsubs f9, f13, f6 -/* 0000EE98 0001BC28 C1 05 00 00 */ lfs f8, 0x0(r5) -/* 0000EE9C 0001BC2C ED 6C 18 28 */ fsubs f11, f12, f3 -/* 0000EEA0 0001BC30 C0 E5 00 04 */ lfs f7, 0x4(r5) -/* 0000EEA4 0001BC34 FD 4A 28 2E */ fsel f10, f10, f0, f5 -/* 0000EEA8 0001BC38 FD 29 33 6E */ fsel f9, f9, f13, f6 -/* 0000EEAC 0001BC3C FD 6B 1B 2E */ fsel f11, f11, f12, f3 -/* 0000EEB0 0001BC40 ED A8 50 28 */ fsubs f13, f8, f10 -.L_0000EEB4: -/* 0000EEB4 0001BC44 ED 87 48 28 */ fsubs f12, f7, f9 -/* 0000EEB8 0001BC48 FD AD 42 AE */ fsel f13, f13, f10, f8 -/* 0000EEBC 0001BC4C EC 04 58 28 */ fsubs f0, f4, f11 -/* 0000EEC0 0001BC50 FD 8C 3A 6E */ fsel f12, f12, f9, f7 -/* 0000EEC4 0001BC54 FC 00 22 EE */ fsel f0, f0, f11, f4 -/* 0000EEC8 0001BC58 D1 A9 00 00 */ stfs f13, 0x0(r9) -/* 0000EECC 0001BC5C D1 89 00 04 */ stfs f12, 0x4(r9) -/* 0000EED0 0001BC60 D0 09 00 08 */ stfs f0, 0x8(r9) -/* 0000EED4 0001BC64 4E 80 00 20 */ blr -.endfn bClamp__FP8bVector3PC8bVector3T1 - -# .text:0xEED8 | size: 0x2D4 -.fn Blend__t6tTable1Z12CubicPovDataP12CubicPovDataN21f, global -/* 0000EED8 0001BC68 94 21 FF 38 */ stwu r1, -0xc8(r1) -/* 0000EEDC 0001BC6C 7C 08 02 A6 */ mflr r0 -/* 0000EEE0 0001BC70 F3 C1 00 B8 */ psq_st f30, 0xb8(r1), 0, qr0 -/* 0000EEE4 0001BC74 F3 E1 00 C0 */ psq_st f31, 0xc0(r1), 0, qr0 -/* 0000EEE8 0001BC78 BF 81 00 A8 */ stmw r28, 0xa8(r1) -/* 0000EEEC 0001BC7C 90 01 00 CC */ stw r0, 0xcc(r1) -/* 0000EEF0 0001BC80 3D 20 00 00 */ lis r9, .rodata+0x920@ha -/* 0000EEF4 0001BC84 7C DC 33 78 */ mr r28, r6 -/* 0000EEF8 0001BC88 C3 C9 09 20 */ lfs f30, .rodata+0x920@l(r9) -/* 0000EEFC 0001BC8C FF E0 08 90 */ fmr f31, f1 -/* 0000EF00 0001BC90 7C BE 2B 78 */ mr r30, r5 -/* 0000EF04 0001BC94 C0 1C 00 00 */ lfs f0, 0x0(r28) -/* 0000EF08 0001BC98 EF DE F8 28 */ fsubs f30, f30, f31 -/* 0000EF0C 0001BC9C C1 BE 00 00 */ lfs f13, 0x0(r30) -/* 0000EF10 0001BCA0 EC 1E 00 32 */ fmuls f0, f30, f0 -/* 0000EF14 0001BCA4 7C 9D 23 78 */ mr r29, r4 -/* 0000EF18 0001BCA8 ED BF 03 7A */ fmadds f13, f31, f13, f0 -/* 0000EF1C 0001BCAC 39 21 00 08 */ addi r9, r1, 0x8 -/* 0000EF20 0001BCB0 D1 BD 00 00 */ stfs f13, 0x0(r29) -/* 0000EF24 0001BCB4 7D 24 4B 78 */ mr r4, r9 -/* 0000EF28 0001BCB8 38 BC 00 10 */ addi r5, r28, 0x10 -/* 0000EF2C 0001BCBC FC 20 F0 90 */ fmr f1, f30 -/* 0000EF30 0001BCC0 C1 BC 00 04 */ lfs f13, 0x4(r28) -/* 0000EF34 0001BCC4 38 7D 00 10 */ addi r3, r29, 0x10 -/* 0000EF38 0001BCC8 C0 1E 00 04 */ lfs f0, 0x4(r30) -/* 0000EF3C 0001BCCC ED BE 03 72 */ fmuls f13, f30, f13 -/* 0000EF40 0001BCD0 EC 1F 68 3A */ fmadds f0, f31, f0, f13 -/* 0000EF44 0001BCD4 D0 1D 00 04 */ stfs f0, 0x4(r29) -/* 0000EF48 0001BCD8 C1 BC 00 08 */ lfs f13, 0x8(r28) -/* 0000EF4C 0001BCDC C0 1E 00 08 */ lfs f0, 0x8(r30) -/* 0000EF50 0001BCE0 ED BE 03 72 */ fmuls f13, f30, f13 -/* 0000EF54 0001BCE4 EC 1F 68 3A */ fmadds f0, f31, f0, f13 -/* 0000EF58 0001BCE8 D0 1D 00 08 */ stfs f0, 0x8(r29) -/* 0000EF5C 0001BCEC C1 BC 00 0C */ lfs f13, 0xc(r28) -/* 0000EF60 0001BCF0 C0 1E 00 0C */ lfs f0, 0xc(r30) -/* 0000EF64 0001BCF4 ED BE 03 72 */ fmuls f13, f30, f13 -.L_0000EF68: -/* 0000EF68 0001BCF8 EC 1F 68 3A */ fmadds f0, f31, f0, f13 -/* 0000EF6C 0001BCFC D0 1D 00 0C */ stfs f0, 0xc(r29) -/* 0000EF70 0001BD00 C1 BE 00 10 */ lfs f13, 0x10(r30) -/* 0000EF74 0001BD04 C0 1E 00 14 */ lfs f0, 0x14(r30) -/* 0000EF78 0001BD08 C1 9E 00 18 */ lfs f12, 0x18(r30) -/* 0000EF7C 0001BD0C ED AD 07 F2 */ fmuls f13, f13, f31 -/* 0000EF80 0001BD10 EC 00 07 F2 */ fmuls f0, f0, f31 -/* 0000EF84 0001BD14 D1 A1 00 08 */ stfs f13, 0x8(r1) -/* 0000EF88 0001BD18 D0 01 00 0C */ stfs f0, 0xc(r1) -/* 0000EF8C 0001BD1C ED 8C 07 F2 */ fmuls f12, f12, f31 -/* 0000EF90 0001BD20 D1 89 00 08 */ stfs f12, 0x8(r9) -/* 0000EF94 0001BD24 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -/* 0000EF98 0001BD28 C1 BE 00 20 */ lfs f13, 0x20(r30) -.L_0000EF9C: -/* 0000EF9C 0001BD2C 38 81 00 18 */ addi r4, r1, 0x18 -/* 0000EFA0 0001BD30 C1 9E 00 24 */ lfs f12, 0x24(r30) -/* 0000EFA4 0001BD34 38 BC 00 20 */ addi r5, r28, 0x20 -/* 0000EFA8 0001BD38 C0 1E 00 28 */ lfs f0, 0x28(r30) -/* 0000EFAC 0001BD3C ED AD 07 F2 */ fmuls f13, f13, f31 -/* 0000EFB0 0001BD40 ED 8C 07 F2 */ fmuls f12, f12, f31 -/* 0000EFB4 0001BD44 D1 A1 00 18 */ stfs f13, 0x18(r1) -/* 0000EFB8 0001BD48 EC 00 07 F2 */ fmuls f0, f0, f31 -/* 0000EFBC 0001BD4C D1 81 00 1C */ stfs f12, 0x1c(r1) -/* 0000EFC0 0001BD50 D0 01 00 20 */ stfs f0, 0x20(r1) -/* 0000EFC4 0001BD54 FC 20 F0 90 */ fmr f1, f30 -/* 0000EFC8 0001BD58 38 7D 00 20 */ addi r3, r29, 0x20 -/* 0000EFCC 0001BD5C 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -/* 0000EFD0 0001BD60 C1 BE 00 30 */ lfs f13, 0x30(r30) -/* 0000EFD4 0001BD64 38 81 00 28 */ addi r4, r1, 0x28 -/* 0000EFD8 0001BD68 C1 9E 00 34 */ lfs f12, 0x34(r30) -/* 0000EFDC 0001BD6C 38 BC 00 30 */ addi r5, r28, 0x30 -/* 0000EFE0 0001BD70 C0 1E 00 38 */ lfs f0, 0x38(r30) -/* 0000EFE4 0001BD74 ED AD 07 F2 */ fmuls f13, f13, f31 -/* 0000EFE8 0001BD78 ED 8C 07 F2 */ fmuls f12, f12, f31 -/* 0000EFEC 0001BD7C D1 A1 00 28 */ stfs f13, 0x28(r1) -/* 0000EFF0 0001BD80 EC 00 07 F2 */ fmuls f0, f0, f31 -/* 0000EFF4 0001BD84 D1 81 00 2C */ stfs f12, 0x2c(r1) -/* 0000EFF8 0001BD88 D0 01 00 30 */ stfs f0, 0x30(r1) -/* 0000EFFC 0001BD8C FC 20 F0 90 */ fmr f1, f30 -/* 0000F000 0001BD90 38 7D 00 30 */ addi r3, r29, 0x30 -/* 0000F004 0001BD94 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -/* 0000F008 0001BD98 C1 BE 00 40 */ lfs f13, 0x40(r30) -/* 0000F00C 0001BD9C 38 81 00 38 */ addi r4, r1, 0x38 -/* 0000F010 0001BDA0 C1 9E 00 44 */ lfs f12, 0x44(r30) -/* 0000F014 0001BDA4 38 BC 00 40 */ addi r5, r28, 0x40 -/* 0000F018 0001BDA8 C0 1E 00 48 */ lfs f0, 0x48(r30) -/* 0000F01C 0001BDAC ED AD 07 F2 */ fmuls f13, f13, f31 -/* 0000F020 0001BDB0 ED 8C 07 F2 */ fmuls f12, f12, f31 -/* 0000F024 0001BDB4 D1 A1 00 38 */ stfs f13, 0x38(r1) -/* 0000F028 0001BDB8 EC 00 07 F2 */ fmuls f0, f0, f31 -/* 0000F02C 0001BDBC D1 81 00 3C */ stfs f12, 0x3c(r1) -/* 0000F030 0001BDC0 D0 01 00 40 */ stfs f0, 0x40(r1) -/* 0000F034 0001BDC4 FC 20 F0 90 */ fmr f1, f30 -/* 0000F038 0001BDC8 38 7D 00 40 */ addi r3, r29, 0x40 -/* 0000F03C 0001BDCC 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -/* 0000F040 0001BDD0 C1 BE 00 50 */ lfs f13, 0x50(r30) -/* 0000F044 0001BDD4 38 81 00 48 */ addi r4, r1, 0x48 -/* 0000F048 0001BDD8 C1 9E 00 54 */ lfs f12, 0x54(r30) -/* 0000F04C 0001BDDC 38 BC 00 50 */ addi r5, r28, 0x50 -/* 0000F050 0001BDE0 C0 1E 00 58 */ lfs f0, 0x58(r30) -/* 0000F054 0001BDE4 ED AD 07 F2 */ fmuls f13, f13, f31 -/* 0000F058 0001BDE8 ED 8C 07 F2 */ fmuls f12, f12, f31 -/* 0000F05C 0001BDEC D1 A1 00 48 */ stfs f13, 0x48(r1) -/* 0000F060 0001BDF0 EC 00 07 F2 */ fmuls f0, f0, f31 -/* 0000F064 0001BDF4 D1 81 00 4C */ stfs f12, 0x4c(r1) -/* 0000F068 0001BDF8 D0 01 00 50 */ stfs f0, 0x50(r1) -/* 0000F06C 0001BDFC FC 20 F0 90 */ fmr f1, f30 -/* 0000F070 0001BE00 38 7D 00 50 */ addi r3, r29, 0x50 -/* 0000F074 0001BE04 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -/* 0000F078 0001BE08 C1 BE 00 60 */ lfs f13, 0x60(r30) -/* 0000F07C 0001BE0C 38 81 00 58 */ addi r4, r1, 0x58 -/* 0000F080 0001BE10 C1 9E 00 64 */ lfs f12, 0x64(r30) -/* 0000F084 0001BE14 38 BC 00 60 */ addi r5, r28, 0x60 -/* 0000F088 0001BE18 C0 1E 00 68 */ lfs f0, 0x68(r30) -/* 0000F08C 0001BE1C ED AD 07 F2 */ fmuls f13, f13, f31 -/* 0000F090 0001BE20 ED 8C 07 F2 */ fmuls f12, f12, f31 -/* 0000F094 0001BE24 D1 A1 00 58 */ stfs f13, 0x58(r1) -/* 0000F098 0001BE28 EC 00 07 F2 */ fmuls f0, f0, f31 -/* 0000F09C 0001BE2C D1 81 00 5C */ stfs f12, 0x5c(r1) -/* 0000F0A0 0001BE30 D0 01 00 60 */ stfs f0, 0x60(r1) -/* 0000F0A4 0001BE34 FC 20 F0 90 */ fmr f1, f30 -/* 0000F0A8 0001BE38 38 7D 00 60 */ addi r3, r29, 0x60 -/* 0000F0AC 0001BE3C 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -/* 0000F0B0 0001BE40 C1 BE 00 70 */ lfs f13, 0x70(r30) -/* 0000F0B4 0001BE44 38 81 00 68 */ addi r4, r1, 0x68 -/* 0000F0B8 0001BE48 C1 9E 00 74 */ lfs f12, 0x74(r30) -/* 0000F0BC 0001BE4C 38 BC 00 70 */ addi r5, r28, 0x70 -/* 0000F0C0 0001BE50 C0 1E 00 78 */ lfs f0, 0x78(r30) -/* 0000F0C4 0001BE54 ED AD 07 F2 */ fmuls f13, f13, f31 -/* 0000F0C8 0001BE58 ED 8C 07 F2 */ fmuls f12, f12, f31 -/* 0000F0CC 0001BE5C D1 A1 00 68 */ stfs f13, 0x68(r1) -/* 0000F0D0 0001BE60 EC 00 07 F2 */ fmuls f0, f0, f31 -/* 0000F0D4 0001BE64 D1 81 00 6C */ stfs f12, 0x6c(r1) -/* 0000F0D8 0001BE68 D0 01 00 70 */ stfs f0, 0x70(r1) -/* 0000F0DC 0001BE6C FC 20 F0 90 */ fmr f1, f30 -/* 0000F0E0 0001BE70 38 7D 00 70 */ addi r3, r29, 0x70 -.L_0000F0E4: -/* 0000F0E4 0001BE74 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -/* 0000F0E8 0001BE78 C1 BE 00 80 */ lfs f13, 0x80(r30) -/* 0000F0EC 0001BE7C 38 81 00 78 */ addi r4, r1, 0x78 -/* 0000F0F0 0001BE80 C1 9E 00 84 */ lfs f12, 0x84(r30) -.L_0000F0F4: -/* 0000F0F4 0001BE84 38 BC 00 80 */ addi r5, r28, 0x80 -/* 0000F0F8 0001BE88 C0 1E 00 88 */ lfs f0, 0x88(r30) -/* 0000F0FC 0001BE8C ED AD 07 F2 */ fmuls f13, f13, f31 -/* 0000F100 0001BE90 ED 8C 07 F2 */ fmuls f12, f12, f31 -/* 0000F104 0001BE94 D1 A1 00 78 */ stfs f13, 0x78(r1) -/* 0000F108 0001BE98 EC 00 07 F2 */ fmuls f0, f0, f31 -/* 0000F10C 0001BE9C D1 81 00 7C */ stfs f12, 0x7c(r1) -/* 0000F110 0001BEA0 D0 01 00 80 */ stfs f0, 0x80(r1) -/* 0000F114 0001BEA4 FC 20 F0 90 */ fmr f1, f30 -.L_0000F118: -/* 0000F118 0001BEA8 38 7D 00 80 */ addi r3, r29, 0x80 -/* 0000F11C 0001BEAC 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -/* 0000F120 0001BEB0 C1 BE 00 90 */ lfs f13, 0x90(r30) -/* 0000F124 0001BEB4 38 81 00 88 */ addi r4, r1, 0x88 -/* 0000F128 0001BEB8 C1 9E 00 94 */ lfs f12, 0x94(r30) -/* 0000F12C 0001BEBC 38 BC 00 90 */ addi r5, r28, 0x90 -/* 0000F130 0001BEC0 C0 1E 00 98 */ lfs f0, 0x98(r30) -/* 0000F134 0001BEC4 ED AD 07 F2 */ fmuls f13, f13, f31 -/* 0000F138 0001BEC8 ED 8C 07 F2 */ fmuls f12, f12, f31 -/* 0000F13C 0001BECC D1 A1 00 88 */ stfs f13, 0x88(r1) -/* 0000F140 0001BED0 EC 00 07 F2 */ fmuls f0, f0, f31 -/* 0000F144 0001BED4 D1 81 00 8C */ stfs f12, 0x8c(r1) -/* 0000F148 0001BED8 D0 01 00 90 */ stfs f0, 0x90(r1) -/* 0000F14C 0001BEDC FC 20 F0 90 */ fmr f1, f30 -.L_0000F150: -/* 0000F150 0001BEE0 38 7D 00 90 */ addi r3, r29, 0x90 -/* 0000F154 0001BEE4 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -/* 0000F158 0001BEE8 C1 BE 00 A8 */ lfs f13, 0xa8(r30) -.L_0000F15C: -/* 0000F15C 0001BEEC 38 7D 00 A0 */ addi r3, r29, 0xa0 -/* 0000F160 0001BEF0 C1 9E 00 A0 */ lfs f12, 0xa0(r30) -/* 0000F164 0001BEF4 38 BC 00 A0 */ addi r5, r28, 0xa0 -.L_0000F168: -/* 0000F168 0001BEF8 C0 1E 00 A4 */ lfs f0, 0xa4(r30) -/* 0000F16C 0001BEFC ED AD 07 F2 */ fmuls f13, f13, f31 -/* 0000F170 0001BF00 ED 8C 07 F2 */ fmuls f12, f12, f31 -/* 0000F174 0001BF04 D1 A1 00 A0 */ stfs f13, 0xa0(r1) -/* 0000F178 0001BF08 EC 00 07 F2 */ fmuls f0, f0, f31 -/* 0000F17C 0001BF0C D1 81 00 98 */ stfs f12, 0x98(r1) -/* 0000F180 0001BF10 D0 01 00 9C */ stfs f0, 0x9c(r1) -/* 0000F184 0001BF14 FC 20 F0 90 */ fmr f1, f30 -/* 0000F188 0001BF18 38 81 00 98 */ addi r4, r1, 0x98 -/* 0000F18C 0001BF1C 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -/* 0000F190 0001BF20 80 01 00 CC */ lwz r0, 0xcc(r1) -.L_0000F194: -/* 0000F194 0001BF24 7C 08 03 A6 */ mtlr r0 -/* 0000F198 0001BF28 BB 81 00 A8 */ lmw r28, 0xa8(r1) -/* 0000F19C 0001BF2C E3 C1 00 B8 */ psq_l f30, 0xb8(r1), 0, qr0 -/* 0000F1A0 0001BF30 E3 E1 00 C0 */ psq_l f31, 0xc0(r1), 0, qr0 -/* 0000F1A4 0001BF34 38 21 00 C8 */ addi r1, r1, 0xc8 -/* 0000F1A8 0001BF38 4E 80 00 20 */ blr -.endfn Blend__t6tTable1Z12CubicPovDataP12CubicPovDataN21f - -# .text:0xF1AC | size: 0x8E0 -.fn __16CubicCameraMoveriP12CameraAnchoribN34, global -/* 0000F1AC 0001BF3C 94 21 FD F0 */ stwu r1, -0x210(r1) -/* 0000F1B0 0001BF40 7C 08 02 A6 */ mflr r0 -/* 0000F1B4 0001BF44 7D 80 00 26 */ mfcr r12 -/* 0000F1B8 0001BF48 F3 E1 02 08 */ psq_st f31, 0x208(r1), 0, qr0 -/* 0000F1BC 0001BF4C BE 41 01 D0 */ stmw r18, 0x1d0(r1) -/* 0000F1C0 0001BF50 90 01 02 14 */ stw r0, 0x214(r1) -.L_0000F1C4: -/* 0000F1C4 0001BF54 91 81 01 CC */ stw r12, 0x1cc(r1) -/* 0000F1C8 0001BF58 7C 7F 1B 78 */ mr r31, r3 -/* 0000F1CC 0001BF5C 7C BC 2B 78 */ mr r28, r5 -/* 0000F1D0 0001BF60 7C DD 33 78 */ mr r29, r6 -/* 0000F1D4 0001BF64 7D 1E 43 78 */ mr r30, r8 -/* 0000F1D8 0001BF68 7D 3B 4B 78 */ mr r27, r9 -/* 0000F1DC 0001BF6C 7D 5A 53 78 */ mr r26, r10 -/* 0000F1E0 0001BF70 7C F9 3B 78 */ mr r25, r7 -.L_0000F1E4: -/* 0000F1E4 0001BF74 38 A0 00 01 */ li r5, 0x1 -/* 0000F1E8 0001BF78 48 00 1F 1D */ bl .L_00011104 -/* 0000F1EC 0001BF7C 3D 20 00 00 */ lis r9, _vt.16CubicCameraMover@ha -/* 0000F1F0 0001BF80 38 00 00 00 */ li r0, 0x0 -/* 0000F1F4 0001BF84 39 29 00 00 */ addi r9, r9, _vt.16CubicCameraMover@l -/* 0000F1F8 0001BF88 6B DE 00 01 */ xori r30, r30, 0x1 -/* 0000F1FC 0001BF8C 90 1F 00 A8 */ stw r0, 0xa8(r31) -.L_0000F200: -/* 0000F200 0001BF90 3D 40 00 00 */ lis r10, WorldTimer@ha -/* 0000F204 0001BF94 91 3F 00 08 */ stw r9, 0x8(r31) -/* 0000F208 0001BF98 3D 60 00 00 */ lis r11, .rodata+0x974@ha -/* 0000F20C 0001BF9C 93 DF 00 A0 */ stw r30, 0xa0(r31) -/* 0000F210 0001BFA0 38 00 00 01 */ li r0, 0x1 -/* 0000F214 0001BFA4 93 7F 00 A4 */ stw r27, 0xa4(r31) -/* 0000F218 0001BFA8 7F A4 EB 78 */ mr r4, r29 -/* 0000F21C 0001BFAC 93 5F 00 AC */ stw r26, 0xac(r31) -/* 0000F220 0001BFB0 7F 83 E3 78 */ mr r3, r28 -/* 0000F224 0001BFB4 93 9F 00 80 */ stw r28, 0x80(r31) -.L_0000F228: -/* 0000F228 0001BFB8 93 BF 00 98 */ stw r29, 0x98(r31) -/* 0000F22C 0001BFBC 93 BF 00 9C */ stw r29, 0x9c(r31) -/* 0000F230 0001BFC0 C0 0B 09 74 */ lfs f0, .rodata+0x974@l(r11) -/* 0000F234 0001BFC4 81 2A 00 00 */ lwz r9, WorldTimer@l(r10) -.L_0000F238: -/* 0000F238 0001BFC8 39 29 E0 C0 */ subi r9, r9, 0x1f40 -/* 0000F23C 0001BFCC 91 3F 00 B4 */ stw r9, 0xb4(r31) -/* 0000F240 0001BFD0 81 6A 00 00 */ lwz r11, WorldTimer@l(r10) -/* 0000F244 0001BFD4 D0 1F 00 C0 */ stfs f0, 0xc0(r31) -/* 0000F248 0001BFD8 39 6B E7 00 */ subi r11, r11, 0x1900 -/* 0000F24C 0001BFDC 90 1F 00 B0 */ stw r0, 0xb0(r31) -/* 0000F250 0001BFE0 91 7F 00 B8 */ stw r11, 0xb8(r31) -.L_0000F254: -/* 0000F254 0001BFE4 81 2A 00 00 */ lwz r9, WorldTimer@l(r10) -/* 0000F258 0001BFE8 39 29 E8 90 */ subi r9, r9, 0x1770 -/* 0000F25C 0001BFEC 91 3F 00 BC */ stw r9, 0xbc(r31) -/* 0000F260 0001BFF0 48 00 14 45 */ bl .L_000106A4 -/* 0000F264 0001BFF4 80 1F 00 98 */ lwz r0, 0x98(r31) -/* 0000F268 0001BFF8 7C 74 1B 78 */ mr r20, r3 -/* 0000F26C 0001BFFC 3D 20 00 00 */ lis r9, aCubicPovTables@ha -/* 0000F270 0001C000 1C 60 00 14 */ mulli r3, r0, 0x14 -/* 0000F274 0001C004 39 29 00 00 */ addi r9, r9, aCubicPovTables@l -/* 0000F278 0001C008 39 01 00 08 */ addi r8, r1, 0x8 -/* 0000F27C 0001C00C 7C 83 48 6E */ lwzux r4, r3, r9 -/* 0000F280 0001C010 C1 A3 00 04 */ lfs f13, 0x4(r3) -/* 0000F284 0001C014 C1 83 00 0C */ lfs f12, 0xc(r3) -/* 0000F288 0001C018 FD A0 68 50 */ fneg f13, f13 -/* 0000F28C 0001C01C EC 2C 03 72 */ fmuls f1, f12, f13 -/* 0000F290 0001C020 FC 00 08 90 */ fmr f0, f1 -/* 0000F294 0001C024 FD 60 00 1E */ fctiwz f11, f0 -/* 0000F298 0001C028 D9 61 01 C0 */ stfd f11, 0x1c0(r1) -/* 0000F29C 0001C02C 80 C1 01 C4 */ lwz r6, 0x1c4(r1) -/* 0000F2A0 0001C030 2C 06 00 00 */ cmpwi r6, 0x0 -/* 0000F2A4 0001C034 40 80 F2 BC */ bge .L_0000E560 -/* 0000F2A8 0001C038 80 83 00 10 */ lwz r4, 0x10(r3) -/* 0000F2AC 0001C03C 38 A0 00 B0 */ li r5, 0xb0 -/* 0000F2B0 0001C040 7D 03 43 78 */ mr r3, r8 -/* 0000F2B4 0001C044 48 00 00 01 */ bl bMemCpy -/* 0000F2B8 0001C048 48 00 F3 44 */ b .text+0xF344 -/* 0000F2BC 0001C04C 38 04 FF FF */ subi r0, r4, 0x1 -/* 0000F2C0 0001C050 7C 06 00 00 */ cmpw r6, r0 -/* 0000F2C4 0001C054 41 80 F2 E8 */ blt __21CDActionDebugWatchCarPQ28CameraAI8Director -/* 0000F2C8 0001C058 1C 84 00 B0 */ mulli r4, r4, 0xb0 -/* 0000F2CC 0001C05C 80 03 00 10 */ lwz r0, 0x10(r3) -.L_0000F2D0: -/* 0000F2D0 0001C060 7D 03 43 78 */ mr r3, r8 -/* 0000F2D4 0001C064 38 A0 00 B0 */ li r5, 0xb0 -/* 0000F2D8 0001C068 38 84 FF 50 */ subi r4, r4, 0xb0 -/* 0000F2DC 0001C06C 7C 80 22 14 */ add r4, r0, r4 -/* 0000F2E0 0001C070 48 00 00 01 */ bl bMemCpy -/* 0000F2E4 0001C074 48 00 F3 44 */ b .text+0xF344 -/* 0000F2E8 0001C078 6C C0 80 00 */ xoris r0, r6, 0x8000 -/* 0000F2EC 0001C07C 90 01 01 C4 */ stw r0, 0x1c4(r1) -/* 0000F2F0 0001C080 3D 60 43 30 */ lis r11, 0x4330 -/* 0000F2F4 0001C084 3D 40 00 00 */ lis r10, .rodata+0x978@ha -/* 0000F2F8 0001C088 91 61 01 C0 */ stw r11, 0x1c0(r1) -/* 0000F2FC 0001C08C C9 AA 09 78 */ lfd f13, .rodata+0x978@l(r10) -/* 0000F300 0001C090 C8 01 01 C0 */ lfd f0, 0x1c0(r1) -.L_0000F304: -/* 0000F304 0001C094 FC 00 68 28 */ fsub f0, f0, f13 -/* 0000F308 0001C098 FD A0 00 18 */ frsp f13, f0 -/* 0000F30C 0001C09C FC 0D 08 00 */ fcmpu cr0, f13, f1 -.L_0000F310: -/* 0000F310 0001C0A0 4C 62 03 82 */ cror un, eq, lt -/* 0000F314 0001C0A4 41 83 F3 24 */ bso .L_0000E638 -/* 0000F318 0001C0A8 3D 20 00 00 */ lis r9, .rodata+0x980@ha -/* 0000F31C 0001C0AC C0 09 09 80 */ lfs f0, .rodata+0x980@l(r9) -/* 0000F320 0001C0B0 ED AD 00 28 */ fsubs f13, f13, f0 -/* 0000F324 0001C0B4 1C C6 00 B0 */ mulli r6, r6, 0xb0 -/* 0000F328 0001C0B8 80 03 00 10 */ lwz r0, 0x10(r3) -/* 0000F32C 0001C0BC EC 21 68 28 */ fsubs f1, f1, f13 -/* 0000F330 0001C0C0 7D 04 43 78 */ mr r4, r8 -/* 0000F334 0001C0C4 38 A6 00 B0 */ addi r5, r6, 0xb0 -/* 0000F338 0001C0C8 7C C0 32 14 */ add r6, r0, r6 -/* 0000F33C 0001C0CC 7C A0 2A 14 */ add r5, r0, r5 -/* 0000F340 0001C0D0 48 00 EE D9 */ bl .text+0xEED8 -/* 0000F344 0001C0D4 38 60 00 2C */ li r3, 0x2c -/* 0000F348 0001C0D8 3B A0 00 01 */ li r29, 0x1 -/* 0000F34C 0001C0DC 48 00 00 01 */ bl __builtin_vec_new -/* 0000F350 0001C0E0 3B C0 00 00 */ li r30, 0x0 -/* 0000F354 0001C0E4 C0 01 00 10 */ lfs f0, 0x10(r1) -/* 0000F358 0001C0E8 3D 60 00 00 */ lis r11, .rodata+0x974@ha -/* 0000F35C 0001C0EC C3 EB 09 74 */ lfs f31, .rodata+0x974@l(r11) -/* 0000F360 0001C0F0 7C 69 1B 78 */ mr r9, r3 -/* 0000F364 0001C0F4 D0 09 00 24 */ stfs f0, 0x24(r9) -/* 0000F368 0001C0F8 3B 81 00 A8 */ addi r28, r1, 0xa8 -/* 0000F36C 0001C0FC 91 3F 00 84 */ stw r9, 0x84(r31) -/* 0000F370 0001C100 3B 61 00 B8 */ addi r27, r1, 0xb8 -/* 0000F374 0001C104 3B 41 00 F8 */ addi r26, r1, 0xf8 -/* 0000F378 0001C108 3B 01 01 38 */ addi r24, r1, 0x138 -/* 0000F37C 0001C10C 3A C1 01 58 */ addi r22, r1, 0x158 -/* 0000F380 0001C110 3A E1 01 48 */ addi r23, r1, 0x148 -/* 0000F384 0001C114 3A A1 01 68 */ addi r21, r1, 0x168 -/* 0000F388 0001C118 3A 61 01 88 */ addi r19, r1, 0x188 -/* 0000F38C 0001C11C 3A 41 01 98 */ addi r18, r1, 0x198 -/* 0000F390 0001C120 B3 C9 00 28 */ sth r30, 0x28(r9) -/* 0000F394 0001C124 B3 A9 00 2A */ sth r29, 0x2a(r9) -/* 0000F398 0001C128 38 60 00 84 */ li r3, 0x84 -/* 0000F39C 0001C12C D3 E9 00 00 */ stfs f31, 0x0(r9) -/* 0000F3A0 0001C130 2E 19 00 00 */ cmpwi cr4, r25, 0x0 -/* 0000F3A4 0001C134 D3 E9 00 04 */ stfs f31, 0x4(r9) -/* 0000F3A8 0001C138 3B 3F 00 E4 */ addi r25, r31, 0xe4 -/* 0000F3AC 0001C13C D3 E9 00 08 */ stfs f31, 0x8(r9) -/* 0000F3B0 0001C140 D3 E9 00 0C */ stfs f31, 0xc(r9) -/* 0000F3B4 0001C144 D3 E9 00 20 */ stfs f31, 0x20(r9) -/* 0000F3B8 0001C148 D3 E9 00 10 */ stfs f31, 0x10(r9) -/* 0000F3BC 0001C14C D3 E9 00 14 */ stfs f31, 0x14(r9) -/* 0000F3C0 0001C150 D3 E9 00 18 */ stfs f31, 0x18(r9) -/* 0000F3C4 0001C154 D3 E9 00 1C */ stfs f31, 0x1c(r9) -/* 0000F3C8 0001C158 48 00 00 01 */ bl __builtin_vec_new -/* 0000F3CC 0001C15C C0 01 00 08 */ lfs f0, 0x8(r1) -/* 0000F3D0 0001C160 7C 69 1B 78 */ mr r9, r3 -/* 0000F3D4 0001C164 B3 C9 00 28 */ sth r30, 0x28(r9) -/* 0000F3D8 0001C168 38 60 00 84 */ li r3, 0x84 -/* 0000F3DC 0001C16C D0 09 00 7C */ stfs f0, 0x7c(r9) -/* 0000F3E0 0001C170 D0 09 00 24 */ stfs f0, 0x24(r9) -/* 0000F3E4 0001C174 B3 A9 00 2A */ sth r29, 0x2a(r9) -/* 0000F3E8 0001C178 D0 09 00 50 */ stfs f0, 0x50(r9) -/* 0000F3EC 0001C17C B3 C9 00 54 */ sth r30, 0x54(r9) -/* 0000F3F0 0001C180 B3 A9 00 56 */ sth r29, 0x56(r9) -/* 0000F3F4 0001C184 B3 C9 00 80 */ sth r30, 0x80(r9) -/* 0000F3F8 0001C188 B3 A9 00 82 */ sth r29, 0x82(r9) -/* 0000F3FC 0001C18C D3 E9 00 00 */ stfs f31, 0x0(r9) -/* 0000F400 0001C190 D3 E9 00 04 */ stfs f31, 0x4(r9) -/* 0000F404 0001C194 D3 E9 00 08 */ stfs f31, 0x8(r9) -/* 0000F408 0001C198 D3 E9 00 0C */ stfs f31, 0xc(r9) -/* 0000F40C 0001C19C D3 E9 00 20 */ stfs f31, 0x20(r9) -/* 0000F410 0001C1A0 D3 E9 00 10 */ stfs f31, 0x10(r9) -/* 0000F414 0001C1A4 D3 E9 00 14 */ stfs f31, 0x14(r9) -/* 0000F418 0001C1A8 D3 E9 00 18 */ stfs f31, 0x18(r9) -/* 0000F41C 0001C1AC D3 E9 00 1C */ stfs f31, 0x1c(r9) -/* 0000F420 0001C1B0 D3 E9 00 2C */ stfs f31, 0x2c(r9) -/* 0000F424 0001C1B4 D3 E9 00 30 */ stfs f31, 0x30(r9) -/* 0000F428 0001C1B8 D3 E9 00 34 */ stfs f31, 0x34(r9) -/* 0000F42C 0001C1BC D3 E9 00 38 */ stfs f31, 0x38(r9) -/* 0000F430 0001C1C0 D3 E9 00 4C */ stfs f31, 0x4c(r9) -/* 0000F434 0001C1C4 D3 E9 00 3C */ stfs f31, 0x3c(r9) -/* 0000F438 0001C1C8 D3 E9 00 40 */ stfs f31, 0x40(r9) -/* 0000F43C 0001C1CC D3 E9 00 44 */ stfs f31, 0x44(r9) -/* 0000F440 0001C1D0 D3 E9 00 48 */ stfs f31, 0x48(r9) -/* 0000F444 0001C1D4 D3 E9 00 58 */ stfs f31, 0x58(r9) -/* 0000F448 0001C1D8 D3 E9 00 5C */ stfs f31, 0x5c(r9) -/* 0000F44C 0001C1DC D3 E9 00 60 */ stfs f31, 0x60(r9) -/* 0000F450 0001C1E0 D3 E9 00 64 */ stfs f31, 0x64(r9) -/* 0000F454 0001C1E4 D3 E9 00 78 */ stfs f31, 0x78(r9) -/* 0000F458 0001C1E8 D3 E9 00 68 */ stfs f31, 0x68(r9) -/* 0000F45C 0001C1EC 91 3F 00 88 */ stw r9, 0x88(r31) -/* 0000F460 0001C1F0 D3 E9 00 6C */ stfs f31, 0x6c(r9) -/* 0000F464 0001C1F4 D3 E9 00 70 */ stfs f31, 0x70(r9) -/* 0000F468 0001C1F8 D3 E9 00 74 */ stfs f31, 0x74(r9) -/* 0000F46C 0001C1FC 48 00 00 01 */ bl __builtin_vec_new -/* 0000F470 0001C200 C0 01 00 0C */ lfs f0, 0xc(r1) -/* 0000F474 0001C204 7C 69 1B 78 */ mr r9, r3 -/* 0000F478 0001C208 B3 C9 00 28 */ sth r30, 0x28(r9) -/* 0000F47C 0001C20C 38 60 00 84 */ li r3, 0x84 -/* 0000F480 0001C210 D0 09 00 7C */ stfs f0, 0x7c(r9) -/* 0000F484 0001C214 D0 09 00 24 */ stfs f0, 0x24(r9) -.L_0000F488: -/* 0000F488 0001C218 B3 A9 00 2A */ sth r29, 0x2a(r9) -.L_0000F48C: -/* 0000F48C 0001C21C D0 09 00 50 */ stfs f0, 0x50(r9) -/* 0000F490 0001C220 B3 C9 00 54 */ sth r30, 0x54(r9) -/* 0000F494 0001C224 B3 A9 00 56 */ sth r29, 0x56(r9) -/* 0000F498 0001C228 B3 C9 00 80 */ sth r30, 0x80(r9) -/* 0000F49C 0001C22C B3 A9 00 82 */ sth r29, 0x82(r9) -/* 0000F4A0 0001C230 D3 E9 00 00 */ stfs f31, 0x0(r9) -/* 0000F4A4 0001C234 D3 E9 00 04 */ stfs f31, 0x4(r9) -/* 0000F4A8 0001C238 D3 E9 00 08 */ stfs f31, 0x8(r9) -/* 0000F4AC 0001C23C D3 E9 00 0C */ stfs f31, 0xc(r9) -/* 0000F4B0 0001C240 D3 E9 00 20 */ stfs f31, 0x20(r9) -/* 0000F4B4 0001C244 D3 E9 00 10 */ stfs f31, 0x10(r9) -/* 0000F4B8 0001C248 D3 E9 00 14 */ stfs f31, 0x14(r9) -/* 0000F4BC 0001C24C D3 E9 00 18 */ stfs f31, 0x18(r9) -/* 0000F4C0 0001C250 D3 E9 00 1C */ stfs f31, 0x1c(r9) -/* 0000F4C4 0001C254 D3 E9 00 2C */ stfs f31, 0x2c(r9) -/* 0000F4C8 0001C258 D3 E9 00 30 */ stfs f31, 0x30(r9) -/* 0000F4CC 0001C25C D3 E9 00 34 */ stfs f31, 0x34(r9) -/* 0000F4D0 0001C260 D3 E9 00 38 */ stfs f31, 0x38(r9) -/* 0000F4D4 0001C264 D3 E9 00 4C */ stfs f31, 0x4c(r9) -/* 0000F4D8 0001C268 D3 E9 00 3C */ stfs f31, 0x3c(r9) -/* 0000F4DC 0001C26C D3 E9 00 40 */ stfs f31, 0x40(r9) -/* 0000F4E0 0001C270 D3 E9 00 44 */ stfs f31, 0x44(r9) -/* 0000F4E4 0001C274 D3 E9 00 48 */ stfs f31, 0x48(r9) -/* 0000F4E8 0001C278 D3 E9 00 58 */ stfs f31, 0x58(r9) -/* 0000F4EC 0001C27C D3 E9 00 5C */ stfs f31, 0x5c(r9) -/* 0000F4F0 0001C280 D3 E9 00 60 */ stfs f31, 0x60(r9) -/* 0000F4F4 0001C284 D3 E9 00 64 */ stfs f31, 0x64(r9) -/* 0000F4F8 0001C288 D3 E9 00 78 */ stfs f31, 0x78(r9) -/* 0000F4FC 0001C28C D3 E9 00 68 */ stfs f31, 0x68(r9) -/* 0000F500 0001C290 91 3F 00 8C */ stw r9, 0x8c(r31) -/* 0000F504 0001C294 D3 E9 00 6C */ stfs f31, 0x6c(r9) -/* 0000F508 0001C298 D3 E9 00 70 */ stfs f31, 0x70(r9) -/* 0000F50C 0001C29C D3 E9 00 74 */ stfs f31, 0x74(r9) -/* 0000F510 0001C2A0 48 00 00 01 */ bl __builtin_vec_new -/* 0000F514 0001C2A4 C1 81 00 A8 */ lfs f12, 0xa8(r1) -/* 0000F518 0001C2A8 7C 69 1B 78 */ mr r9, r3 -/* 0000F51C 0001C2AC C1 BC 00 04 */ lfs f13, 0x4(r28) -/* 0000F520 0001C2B0 38 60 00 84 */ li r3, 0x84 -/* 0000F524 0001C2B4 C0 1C 00 08 */ lfs f0, 0x8(r28) -/* 0000F528 0001C2B8 D1 89 00 24 */ stfs f12, 0x24(r9) -/* 0000F52C 0001C2BC D1 A9 00 50 */ stfs f13, 0x50(r9) -/* 0000F530 0001C2C0 D0 09 00 7C */ stfs f0, 0x7c(r9) -/* 0000F534 0001C2C4 B3 C9 00 28 */ sth r30, 0x28(r9) -/* 0000F538 0001C2C8 B3 A9 00 2A */ sth r29, 0x2a(r9) -/* 0000F53C 0001C2CC B3 C9 00 54 */ sth r30, 0x54(r9) -/* 0000F540 0001C2D0 B3 A9 00 56 */ sth r29, 0x56(r9) -/* 0000F544 0001C2D4 D3 E9 00 00 */ stfs f31, 0x0(r9) -/* 0000F548 0001C2D8 D3 E9 00 04 */ stfs f31, 0x4(r9) -/* 0000F54C 0001C2DC D3 E9 00 08 */ stfs f31, 0x8(r9) -/* 0000F550 0001C2E0 D3 E9 00 0C */ stfs f31, 0xc(r9) -/* 0000F554 0001C2E4 D3 E9 00 20 */ stfs f31, 0x20(r9) -/* 0000F558 0001C2E8 D3 E9 00 10 */ stfs f31, 0x10(r9) -.L_0000F55C: -/* 0000F55C 0001C2EC D3 E9 00 14 */ stfs f31, 0x14(r9) -/* 0000F560 0001C2F0 D3 E9 00 18 */ stfs f31, 0x18(r9) -/* 0000F564 0001C2F4 D3 E9 00 1C */ stfs f31, 0x1c(r9) -/* 0000F568 0001C2F8 D3 E9 00 2C */ stfs f31, 0x2c(r9) -/* 0000F56C 0001C2FC D3 E9 00 30 */ stfs f31, 0x30(r9) -/* 0000F570 0001C300 D3 E9 00 34 */ stfs f31, 0x34(r9) -.L_0000F574: -/* 0000F574 0001C304 D3 E9 00 38 */ stfs f31, 0x38(r9) -.L_0000F578: -/* 0000F578 0001C308 D3 E9 00 4C */ stfs f31, 0x4c(r9) -/* 0000F57C 0001C30C D3 E9 00 3C */ stfs f31, 0x3c(r9) -/* 0000F580 0001C310 D3 E9 00 40 */ stfs f31, 0x40(r9) -/* 0000F584 0001C314 D3 E9 00 44 */ stfs f31, 0x44(r9) -/* 0000F588 0001C318 D3 E9 00 48 */ stfs f31, 0x48(r9) -/* 0000F58C 0001C31C D3 E9 00 58 */ stfs f31, 0x58(r9) -/* 0000F590 0001C320 D3 E9 00 5C */ stfs f31, 0x5c(r9) -/* 0000F594 0001C324 D3 E9 00 60 */ stfs f31, 0x60(r9) -/* 0000F598 0001C328 D3 E9 00 64 */ stfs f31, 0x64(r9) -/* 0000F59C 0001C32C D3 E9 00 78 */ stfs f31, 0x78(r9) -/* 0000F5A0 0001C330 B3 C9 00 80 */ sth r30, 0x80(r9) -/* 0000F5A4 0001C334 91 3F 00 90 */ stw r9, 0x90(r31) -/* 0000F5A8 0001C338 B3 A9 00 82 */ sth r29, 0x82(r9) -/* 0000F5AC 0001C33C D3 E9 00 68 */ stfs f31, 0x68(r9) -/* 0000F5B0 0001C340 D3 E9 00 6C */ stfs f31, 0x6c(r9) -/* 0000F5B4 0001C344 D3 E9 00 70 */ stfs f31, 0x70(r9) -/* 0000F5B8 0001C348 D3 E9 00 74 */ stfs f31, 0x74(r9) -/* 0000F5BC 0001C34C 48 00 00 01 */ bl __builtin_vec_new -/* 0000F5C0 0001C350 C1 9C 00 08 */ lfs f12, 0x8(r28) -/* 0000F5C4 0001C354 7C 69 1B 78 */ mr r9, r3 -/* 0000F5C8 0001C358 C0 01 00 A8 */ lfs f0, 0xa8(r1) -/* 0000F5CC 0001C35C 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0000F5D0 0001C360 C1 BC 00 04 */ lfs f13, 0x4(r28) -/* 0000F5D4 0001C364 38 80 00 2C */ li r4, 0x2c -/* 0000F5D8 0001C368 D0 09 00 24 */ stfs f0, 0x24(r9) -/* 0000F5DC 0001C36C 38 A0 00 00 */ li r5, 0x0 -/* 0000F5E0 0001C370 D1 A9 00 50 */ stfs f13, 0x50(r9) -/* 0000F5E4 0001C374 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0000F5E8 0001C378 D1 89 00 7C */ stfs f12, 0x7c(r9) -/* 0000F5EC 0001C37C B3 C9 00 28 */ sth r30, 0x28(r9) -/* 0000F5F0 0001C380 B3 A9 00 2A */ sth r29, 0x2a(r9) -/* 0000F5F4 0001C384 B3 C9 00 54 */ sth r30, 0x54(r9) -/* 0000F5F8 0001C388 B3 A9 00 56 */ sth r29, 0x56(r9) -/* 0000F5FC 0001C38C D3 E9 00 00 */ stfs f31, 0x0(r9) -/* 0000F600 0001C390 D3 E9 00 04 */ stfs f31, 0x4(r9) -/* 0000F604 0001C394 D3 E9 00 08 */ stfs f31, 0x8(r9) -/* 0000F608 0001C398 D3 E9 00 0C */ stfs f31, 0xc(r9) -/* 0000F60C 0001C39C D3 E9 00 20 */ stfs f31, 0x20(r9) -/* 0000F610 0001C3A0 D3 E9 00 10 */ stfs f31, 0x10(r9) -/* 0000F614 0001C3A4 D3 E9 00 14 */ stfs f31, 0x14(r9) -/* 0000F618 0001C3A8 D3 E9 00 18 */ stfs f31, 0x18(r9) -/* 0000F61C 0001C3AC D3 E9 00 1C */ stfs f31, 0x1c(r9) -/* 0000F620 0001C3B0 D3 E9 00 2C */ stfs f31, 0x2c(r9) -/* 0000F624 0001C3B4 D3 E9 00 30 */ stfs f31, 0x30(r9) -/* 0000F628 0001C3B8 D3 E9 00 34 */ stfs f31, 0x34(r9) -/* 0000F62C 0001C3BC D3 E9 00 38 */ stfs f31, 0x38(r9) -/* 0000F630 0001C3C0 D3 E9 00 4C */ stfs f31, 0x4c(r9) -/* 0000F634 0001C3C4 D3 E9 00 3C */ stfs f31, 0x3c(r9) -/* 0000F638 0001C3C8 D3 E9 00 40 */ stfs f31, 0x40(r9) -/* 0000F63C 0001C3CC D3 E9 00 44 */ stfs f31, 0x44(r9) -/* 0000F640 0001C3D0 D3 E9 00 48 */ stfs f31, 0x48(r9) -/* 0000F644 0001C3D4 D3 E9 00 58 */ stfs f31, 0x58(r9) -/* 0000F648 0001C3D8 D3 E9 00 5C */ stfs f31, 0x5c(r9) -/* 0000F64C 0001C3DC D3 E9 00 60 */ stfs f31, 0x60(r9) -/* 0000F650 0001C3E0 D3 E9 00 64 */ stfs f31, 0x64(r9) -/* 0000F654 0001C3E4 D3 E9 00 78 */ stfs f31, 0x78(r9) -/* 0000F658 0001C3E8 B3 C9 00 80 */ sth r30, 0x80(r9) -/* 0000F65C 0001C3EC B3 A9 00 82 */ sth r29, 0x82(r9) -/* 0000F660 0001C3F0 D3 E9 00 74 */ stfs f31, 0x74(r9) -/* 0000F664 0001C3F4 91 3F 00 94 */ stw r9, 0x94(r31) -/* 0000F668 0001C3F8 D3 E9 00 68 */ stfs f31, 0x68(r9) -/* 0000F66C 0001C3FC D3 E9 00 6C */ stfs f31, 0x6c(r9) -/* 0000F670 0001C400 D3 E9 00 70 */ stfs f31, 0x70(r9) -/* 0000F674 0001C404 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 0000F678 0001C408 7C 7E 1B 78 */ mr r30, r3 -/* 0000F67C 0001C40C 38 80 00 10 */ li r4, 0x10 -/* 0000F680 0001C410 38 A0 00 05 */ li r5, 0x5 -/* 0000F684 0001C414 48 00 00 01 */ bl __11AverageBaseii -/* 0000F688 0001C418 3B BE 00 08 */ addi r29, r30, 0x8 -/* 0000F68C 0001C41C 3D 20 00 00 */ lis r9, _vt.t8tAverage1Z8bVector3@ha -/* 0000F690 0001C420 38 60 00 50 */ li r3, 0x50 -/* 0000F694 0001C424 39 29 00 00 */ addi r9, r9, _vt.t8tAverage1Z8bVector3@l -/* 0000F698 0001C428 91 3E 00 04 */ stw r9, 0x4(r30) -/* 0000F69C 0001C42C 48 00 00 01 */ bl __builtin_vec_new -/* 0000F6A0 0001C430 39 20 00 04 */ li r9, 0x4 -/* 0000F6A4 0001C434 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0000F6A8 0001C438 39 29 FF FF */ subi r9, r9, 0x1 -/* 0000F6AC 0001C43C 40 82 F6 A4 */ bne .L_0000ED50 -/* 0000F6B0 0001C440 90 7D 00 00 */ stw r3, 0x0(r29) -/* 0000F6B4 0001C444 38 80 00 00 */ li r4, 0x0 -/* 0000F6B8 0001C448 38 A0 00 50 */ li r5, 0x50 -/* 0000F6BC 0001C44C 80 7E 00 08 */ lwz r3, 0x8(r30) -/* 0000F6C0 0001C450 48 00 00 01 */ bl bMemSet -/* 0000F6C4 0001C454 81 3E 00 08 */ lwz r9, 0x8(r30) -/* 0000F6C8 0001C458 7E 85 A3 78 */ mr r5, r20 -/* 0000F6CC 0001C45C 7F E3 FB 78 */ mr r3, r31 -/* 0000F6D0 0001C460 7F 64 DB 78 */ mr r4, r27 -/* 0000F6D4 0001C464 C1 89 00 00 */ lfs f12, 0x0(r9) -/* 0000F6D8 0001C468 38 C1 00 08 */ addi r6, r1, 0x8 -/* 0000F6DC 0001C46C C1 A9 00 04 */ lfs f13, 0x4(r9) -/* 0000F6E0 0001C470 38 E0 00 01 */ li r7, 0x1 -.L_0000F6E4: -/* 0000F6E4 0001C474 C0 09 00 08 */ lfs f0, 0x8(r9) -/* 0000F6E8 0001C478 D1 9E 00 1C */ stfs f12, 0x1c(r30) -.L_0000F6EC: -/* 0000F6EC 0001C47C D1 BE 00 20 */ stfs f13, 0x20(r30) -/* 0000F6F0 0001C480 D0 1E 00 24 */ stfs f0, 0x24(r30) -/* 0000F6F4 0001C484 C1 89 00 08 */ lfs f12, 0x8(r9) -/* 0000F6F8 0001C488 C0 09 00 00 */ lfs f0, 0x0(r9) -/* 0000F6FC 0001C48C C1 A9 00 04 */ lfs f13, 0x4(r9) -/* 0000F700 0001C490 D0 1E 00 0C */ stfs f0, 0xc(r30) -/* 0000F704 0001C494 D1 BE 00 10 */ stfs f13, 0x10(r30) -/* 0000F708 0001C498 D1 9E 00 14 */ stfs f12, 0x14(r30) -/* 0000F70C 0001C49C 93 D9 00 00 */ stw r30, 0x0(r25) -/* 0000F710 0001C4A0 48 00 FE B5 */ bl .text+0xFEB4 -/* 0000F714 0001C4A4 7F 64 DB 78 */ mr r4, r27 -/* 0000F718 0001C4A8 7F 43 D3 78 */ mr r3, r26 -/* 0000F71C 0001C4AC 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 -/* 0000F720 0001C4B0 80 1F 00 A4 */ lwz r0, 0xa4(r31) -/* 0000F724 0001C4B4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000F728 0001C4B8 41 82 F7 8C */ beq .L_0000EEB4 -/* 0000F72C 0001C4BC C1 41 00 F8 */ lfs f10, 0xf8(r1) -/* 0000F730 0001C4C0 C1 01 00 FC */ lfs f8, 0xfc(r1) -/* 0000F734 0001C4C4 C0 E1 01 08 */ lfs f7, 0x108(r1) -/* 0000F738 0001C4C8 FD 40 50 50 */ fneg f10, f10 -/* 0000F73C 0001C4CC C1 21 01 0C */ lfs f9, 0x10c(r1) -/* 0000F740 0001C4D0 FD 00 40 50 */ fneg f8, f8 -/* 0000F744 0001C4D4 C1 61 01 18 */ lfs f11, 0x118(r1) -/* 0000F748 0001C4D8 FC E0 38 50 */ fneg f7, f7 -/* 0000F74C 0001C4DC C1 81 01 1C */ lfs f12, 0x11c(r1) -/* 0000F750 0001C4E0 FD 20 48 50 */ fneg f9, f9 -/* 0000F754 0001C4E4 C1 A1 01 28 */ lfs f13, 0x128(r1) -/* 0000F758 0001C4E8 FD 60 58 50 */ fneg f11, f11 -/* 0000F75C 0001C4EC C0 01 01 2C */ lfs f0, 0x12c(r1) -/* 0000F760 0001C4F0 FD 80 60 50 */ fneg f12, f12 -/* 0000F764 0001C4F4 FD A0 68 50 */ fneg f13, f13 -/* 0000F768 0001C4F8 D1 41 00 F8 */ stfs f10, 0xf8(r1) -/* 0000F76C 0001C4FC FC 00 00 50 */ fneg f0, f0 -/* 0000F770 0001C500 D1 01 00 FC */ stfs f8, 0xfc(r1) -/* 0000F774 0001C504 D0 E1 01 08 */ stfs f7, 0x108(r1) -/* 0000F778 0001C508 D1 21 01 0C */ stfs f9, 0x10c(r1) -/* 0000F77C 0001C50C D1 61 01 18 */ stfs f11, 0x118(r1) -/* 0000F780 0001C510 D1 81 01 1C */ stfs f12, 0x11c(r1) -/* 0000F784 0001C514 D1 A1 01 28 */ stfs f13, 0x128(r1) -/* 0000F788 0001C518 D0 01 01 2C */ stfs f0, 0x12c(r1) -/* 0000F78C 0001C51C 80 BF 00 8C */ lwz r5, 0x8c(r31) -/* 0000F790 0001C520 7F 47 D3 78 */ mr r7, r26 -/* 0000F794 0001C524 80 DF 00 84 */ lwz r6, 0x84(r31) -/* 0000F798 0001C528 7F E3 FB 78 */ mr r3, r31 -/* 0000F79C 0001C52C 81 1F 00 80 */ lwz r8, 0x80(r31) -/* 0000F7A0 0001C530 80 9F 00 88 */ lwz r4, 0x88(r31) -/* 0000F7A4 0001C534 48 00 3E B9 */ bl .L_0001365C -/* 0000F7A8 0001C538 80 7F 00 88 */ lwz r3, 0x88(r31) -/* 0000F7AC 0001C53C 7F 04 C3 78 */ mr r4, r24 -/* 0000F7B0 0001C540 48 00 00 01 */ bl GetVal__8tCubic3DP8bVector3 -/* 0000F7B4 0001C544 80 7F 00 8C */ lwz r3, 0x8c(r31) -/* 0000F7B8 0001C548 7E C4 B3 78 */ mr r4, r22 -/* 0000F7BC 0001C54C 48 00 00 01 */ bl GetVal__8tCubic3DP8bVector3 -/* 0000F7C0 0001C550 80 7F 00 88 */ lwz r3, 0x88(r31) -/* 0000F7C4 0001C554 7E E4 BB 78 */ mr r4, r23 -/* 0000F7C8 0001C558 48 00 00 01 */ bl GetValDesired__8tCubic3DP8bVector3 -/* 0000F7CC 0001C55C 80 7F 00 8C */ lwz r3, 0x8c(r31) -/* 0000F7D0 0001C560 7E A4 AB 78 */ mr r4, r21 -/* 0000F7D4 0001C564 48 00 00 01 */ bl GetValDesired__8tCubic3DP8bVector3 -/* 0000F7D8 0001C568 C1 61 01 38 */ lfs f11, 0x138(r1) -/* 0000F7DC 0001C56C 38 81 01 88 */ addi r4, r1, 0x188 -/* 0000F7E0 0001C570 C1 41 01 3C */ lfs f10, 0x13c(r1) -/* 0000F7E4 0001C574 38 61 01 78 */ addi r3, r1, 0x178 -/* 0000F7E8 0001C578 C1 21 01 40 */ lfs f9, 0x140(r1) -/* 0000F7EC 0001C57C C1 A1 01 48 */ lfs f13, 0x148(r1) -/* 0000F7F0 0001C580 C1 81 01 4C */ lfs f12, 0x14c(r1) -/* 0000F7F4 0001C584 C0 01 01 50 */ lfs f0, 0x150(r1) -/* 0000F7F8 0001C588 ED AD 58 28 */ fsubs f13, f13, f11 -/* 0000F7FC 0001C58C ED 8C 50 28 */ fsubs f12, f12, f10 -/* 0000F800 0001C590 D1 A1 01 88 */ stfs f13, 0x188(r1) -/* 0000F804 0001C594 EC 00 48 28 */ fsubs f0, f0, f9 -/* 0000F808 0001C598 D1 81 01 8C */ stfs f12, 0x18c(r1) -/* 0000F80C 0001C59C D0 01 01 90 */ stfs f0, 0x190(r1) -/* 0000F810 0001C5A0 48 00 00 01 */ bl __8bVector3RC8bVector3 -/* 0000F814 0001C5A4 C1 61 01 38 */ lfs f11, 0x138(r1) -.L_0000F818: -/* 0000F818 0001C5A8 38 81 01 98 */ addi r4, r1, 0x198 -/* 0000F81C 0001C5AC C1 41 01 3C */ lfs f10, 0x13c(r1) -/* 0000F820 0001C5B0 38 61 01 88 */ addi r3, r1, 0x188 -/* 0000F824 0001C5B4 C1 21 01 40 */ lfs f9, 0x140(r1) -/* 0000F828 0001C5B8 C1 A1 01 58 */ lfs f13, 0x158(r1) -/* 0000F82C 0001C5BC C1 81 01 5C */ lfs f12, 0x15c(r1) -/* 0000F830 0001C5C0 C0 01 01 60 */ lfs f0, 0x160(r1) -/* 0000F834 0001C5C4 ED AD 58 28 */ fsubs f13, f13, f11 -/* 0000F838 0001C5C8 ED 8C 50 28 */ fsubs f12, f12, f10 -/* 0000F83C 0001C5CC D1 A1 01 98 */ stfs f13, 0x198(r1) -/* 0000F840 0001C5D0 EC 00 48 28 */ fsubs f0, f0, f9 -/* 0000F844 0001C5D4 D1 81 01 9C */ stfs f12, 0x19c(r1) -/* 0000F848 0001C5D8 D0 01 01 A0 */ stfs f0, 0x1a0(r1) -/* 0000F84C 0001C5DC 48 00 00 01 */ bl __8bVector3RC8bVector3 -/* 0000F850 0001C5E0 C1 21 01 50 */ lfs f9, 0x150(r1) -/* 0000F854 0001C5E4 38 81 01 A8 */ addi r4, r1, 0x1a8 -/* 0000F858 0001C5E8 C1 A1 01 68 */ lfs f13, 0x168(r1) -/* 0000F85C 0001C5EC 38 61 01 98 */ addi r3, r1, 0x198 -.L_0000F860: -/* 0000F860 0001C5F0 C1 81 01 6C */ lfs f12, 0x16c(r1) -/* 0000F864 0001C5F4 C0 01 01 70 */ lfs f0, 0x170(r1) -/* 0000F868 0001C5F8 C1 61 01 48 */ lfs f11, 0x148(r1) -/* 0000F86C 0001C5FC C1 41 01 4C */ lfs f10, 0x14c(r1) -/* 0000F870 0001C600 EC 00 48 28 */ fsubs f0, f0, f9 -/* 0000F874 0001C604 ED AD 58 28 */ fsubs f13, f13, f11 -.L_0000F878: -/* 0000F878 0001C608 D0 01 01 B0 */ stfs f0, 0x1b0(r1) -/* 0000F87C 0001C60C ED 8C 50 28 */ fsubs f12, f12, f10 -/* 0000F880 0001C610 D1 A1 01 A8 */ stfs f13, 0x1a8(r1) -/* 0000F884 0001C614 D1 81 01 AC */ stfs f12, 0x1ac(r1) -/* 0000F888 0001C618 48 00 00 01 */ bl __8bVector3RC8bVector3 -/* 0000F88C 0001C61C 7E 63 9B 78 */ mr r3, r19 -/* 0000F890 0001C620 7C 64 1B 78 */ mr r4, r3 -/* 0000F894 0001C624 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -/* 0000F898 0001C628 7E 43 93 78 */ mr r3, r18 -/* 0000F89C 0001C62C 7C 64 1B 78 */ mr r4, r3 -/* 0000F8A0 0001C630 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -/* 0000F8A4 0001C634 3D 20 00 00 */ lis r9, .rodata+0x974@ha -/* 0000F8A8 0001C638 C1 29 09 74 */ lfs f9, .rodata+0x974@l(r9) -.L_0000F8AC: -/* 0000F8AC 0001C63C D1 3F 00 CC */ stfs f9, 0xcc(r31) -/* 0000F8B0 0001C640 D1 3F 00 C8 */ stfs f9, 0xc8(r31) -/* 0000F8B4 0001C644 D1 3F 00 C4 */ stfs f9, 0xc4(r31) -/* 0000F8B8 0001C648 D1 3F 00 D8 */ stfs f9, 0xd8(r31) -/* 0000F8BC 0001C64C D1 3F 00 D4 */ stfs f9, 0xd4(r31) -/* 0000F8C0 0001C650 D1 3F 00 E0 */ stfs f9, 0xe0(r31) -/* 0000F8C4 0001C654 D1 3F 00 DC */ stfs f9, 0xdc(r31) -/* 0000F8C8 0001C658 41 92 F9 8C */ beq cr4, .L_0000F254 -/* 0000F8CC 0001C65C C0 01 01 7C */ lfs f0, 0x17c(r1) -/* 0000F8D0 0001C660 3D 20 00 00 */ lis r9, .rodata+0x984@ha -/* 0000F8D4 0001C664 C1 A1 01 78 */ lfs f13, 0x178(r1) -/* 0000F8D8 0001C668 3D 60 00 00 */ lis r11, .rodata+0x988@ha -.L_0000F8DC: -/* 0000F8DC 0001C66C EC 00 00 32 */ fmuls f0, f0, f0 -/* 0000F8E0 0001C670 C1 81 01 80 */ lfs f12, 0x180(r1) -.L_0000F8E4: -/* 0000F8E4 0001C674 C1 69 09 84 */ lfs f11, .rodata+0x984@l(r9) -/* 0000F8E8 0001C678 ED AD 03 7A */ fmadds f13, f13, f13, f0 -/* 0000F8EC 0001C67C ED 4C 6B 3A */ fmadds f10, f12, f12, f13 -/* 0000F8F0 0001C680 3D 20 00 00 */ lis r9, .rodata+0x980@ha -/* 0000F8F4 0001C684 FC 0A 58 00 */ fcmpu cr0, f10, f11 -/* 0000F8F8 0001C688 C1 0B 09 88 */ lfs f8, .rodata+0x988@l(r11) -/* 0000F8FC 0001C68C C1 69 09 80 */ lfs f11, .rodata+0x980@l(r9) -/* 0000F900 0001C690 4C 62 03 82 */ cror un, eq, lt -/* 0000F904 0001C694 41 83 F9 34 */ bso .L_0000F238 -/* 0000F908 0001C698 FD A0 50 34 */ frsqrte f13, f10 -.L_0000F90C: -/* 0000F90C 0001C69C EC 0D 03 72 */ fmuls f0, f13, f13 -/* 0000F910 0001C6A0 ED 8D 02 32 */ fmuls f12, f13, f8 -.L_0000F914: -/* 0000F914 0001C6A4 EC 0A 58 3C */ fnmsubs f0, f10, f0, f11 -/* 0000F918 0001C6A8 ED A0 6B 3A */ fmadds f13, f0, f12, f13 -/* 0000F91C 0001C6AC EC 0D 03 72 */ fmuls f0, f13, f13 -/* 0000F920 0001C6B0 ED 8D 02 32 */ fmuls f12, f13, f8 -/* 0000F924 0001C6B4 EC 0A 58 3C */ fnmsubs f0, f10, f0, f11 -/* 0000F928 0001C6B8 ED A0 6B 3A */ fmadds f13, f0, f12, f13 -/* 0000F92C 0001C6BC ED AD 02 B2 */ fmuls f13, f13, f10 -/* 0000F930 0001C6C0 48 00 F9 38 */ b .text+0xF938 -/* 0000F934 0001C6C4 FD A0 48 90 */ fmr f13, f9 -/* 0000F938 0001C6C8 3D 20 00 00 */ lis r9, .rodata+0x98C@ha -/* 0000F93C 0001C6CC C0 09 09 8C */ lfs f0, .rodata+0x98C@l(r9) -/* 0000F940 0001C6D0 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 0000F944 0001C6D4 41 81 F9 8C */ bgt .L_0000F2D0 -/* 0000F948 0001C6D8 C1 61 01 9C */ lfs f11, 0x19c(r1) -/* 0000F94C 0001C6DC 3D 20 00 00 */ lis r9, .rodata+0x990@ha -/* 0000F950 0001C6E0 C1 81 01 8C */ lfs f12, 0x18c(r1) -.L_0000F954: -/* 0000F954 0001C6E4 C1 A1 01 88 */ lfs f13, 0x188(r1) -/* 0000F958 0001C6E8 C1 21 01 98 */ lfs f9, 0x198(r1) -/* 0000F95C 0001C6EC ED 8C 02 F2 */ fmuls f12, f12, f11 -/* 0000F960 0001C6F0 C0 01 01 90 */ lfs f0, 0x190(r1) -.L_0000F964: -/* 0000F964 0001C6F4 C1 41 01 A0 */ lfs f10, 0x1a0(r1) -/* 0000F968 0001C6F8 ED AD 62 7A */ fmadds f13, f13, f9, f12 -/* 0000F96C 0001C6FC C1 69 09 90 */ lfs f11, .rodata+0x990@l(r9) -/* 0000F970 0001C700 EC 00 6A BA */ fmadds f0, f0, f10, f13 -/* 0000F974 0001C704 FC 00 58 00 */ fcmpu cr0, f0, f11 -/* 0000F978 0001C708 41 80 F9 8C */ blt .L_0000F304 -/* 0000F97C 0001C70C 3D 20 00 00 */ lis r9, .rodata+0x980@ha -.L_0000F980: -/* 0000F980 0001C710 C0 09 09 80 */ lfs f0, .rodata+0x980@l(r9) -/* 0000F984 0001C714 D0 1F 00 C0 */ stfs f0, 0xc0(r31) -/* 0000F988 0001C718 48 00 FA 68 */ b .text+0xFA68 -/* 0000F98C 0001C71C 81 3F 00 94 */ lwz r9, 0x94(r31) -/* 0000F990 0001C720 38 00 00 00 */ li r0, 0x0 -/* 0000F994 0001C724 C0 09 00 08 */ lfs f0, 0x8(r9) -/* 0000F998 0001C728 C1 A9 00 0C */ lfs f13, 0xc(r9) -/* 0000F99C 0001C72C C1 89 00 34 */ lfs f12, 0x34(r9) -.L_0000F9A0: -/* 0000F9A0 0001C730 C1 69 00 38 */ lfs f11, 0x38(r9) -.L_0000F9A4: -/* 0000F9A4 0001C734 C1 49 00 60 */ lfs f10, 0x60(r9) -/* 0000F9A8 0001C738 C1 29 00 64 */ lfs f9, 0x64(r9) -.L_0000F9AC: -/* 0000F9AC 0001C73C D0 09 00 00 */ stfs f0, 0x0(r9) -/* 0000F9B0 0001C740 D1 29 00 5C */ stfs f9, 0x5c(r9) -/* 0000F9B4 0001C744 D1 A9 00 04 */ stfs f13, 0x4(r9) -/* 0000F9B8 0001C748 D1 89 00 2C */ stfs f12, 0x2c(r9) -/* 0000F9BC 0001C74C D1 69 00 30 */ stfs f11, 0x30(r9) -.L_0000F9C0: -/* 0000F9C0 0001C750 D1 49 00 58 */ stfs f10, 0x58(r9) -/* 0000F9C4 0001C754 B0 09 00 80 */ sth r0, 0x80(r9) -/* 0000F9C8 0001C758 B0 09 00 28 */ sth r0, 0x28(r9) -/* 0000F9CC 0001C75C B0 09 00 54 */ sth r0, 0x54(r9) -/* 0000F9D0 0001C760 81 7F 00 84 */ lwz r11, 0x84(r31) -/* 0000F9D4 0001C764 C0 0B 00 08 */ lfs f0, 0x8(r11) -.L_0000F9D8: -/* 0000F9D8 0001C768 C1 AB 00 0C */ lfs f13, 0xc(r11) -/* 0000F9DC 0001C76C D0 0B 00 00 */ stfs f0, 0x0(r11) -.L_0000F9E0: -/* 0000F9E0 0001C770 D1 AB 00 04 */ stfs f13, 0x4(r11) -/* 0000F9E4 0001C774 B0 0B 00 28 */ sth r0, 0x28(r11) -/* 0000F9E8 0001C778 81 3F 00 88 */ lwz r9, 0x88(r31) -/* 0000F9EC 0001C77C C0 09 00 08 */ lfs f0, 0x8(r9) -.L_0000F9F0: -/* 0000F9F0 0001C780 C1 A9 00 0C */ lfs f13, 0xc(r9) -/* 0000F9F4 0001C784 C1 89 00 34 */ lfs f12, 0x34(r9) -.L_0000F9F8: -/* 0000F9F8 0001C788 C1 69 00 38 */ lfs f11, 0x38(r9) -/* 0000F9FC 0001C78C C1 49 00 60 */ lfs f10, 0x60(r9) -/* 0000FA00 0001C790 D0 09 00 00 */ stfs f0, 0x0(r9) -.L_0000FA04: -/* 0000FA04 0001C794 D1 A9 00 04 */ stfs f13, 0x4(r9) -.L_0000FA08: -/* 0000FA08 0001C798 D1 89 00 2C */ stfs f12, 0x2c(r9) -/* 0000FA0C 0001C79C D1 69 00 30 */ stfs f11, 0x30(r9) -/* 0000FA10 0001C7A0 B0 09 00 28 */ sth r0, 0x28(r9) -/* 0000FA14 0001C7A4 B0 09 00 54 */ sth r0, 0x54(r9) -/* 0000FA18 0001C7A8 D1 49 00 58 */ stfs f10, 0x58(r9) -/* 0000FA1C 0001C7AC C0 09 00 64 */ lfs f0, 0x64(r9) -/* 0000FA20 0001C7B0 B0 09 00 80 */ sth r0, 0x80(r9) -.L_0000FA24: -/* 0000FA24 0001C7B4 D0 09 00 5C */ stfs f0, 0x5c(r9) -.L_0000FA28: -/* 0000FA28 0001C7B8 81 7F 00 8C */ lwz r11, 0x8c(r31) -/* 0000FA2C 0001C7BC C0 0B 00 08 */ lfs f0, 0x8(r11) -/* 0000FA30 0001C7C0 C1 AB 00 0C */ lfs f13, 0xc(r11) -/* 0000FA34 0001C7C4 C1 8B 00 34 */ lfs f12, 0x34(r11) -/* 0000FA38 0001C7C8 C1 6B 00 38 */ lfs f11, 0x38(r11) -/* 0000FA3C 0001C7CC C1 4B 00 60 */ lfs f10, 0x60(r11) -/* 0000FA40 0001C7D0 C1 2B 00 64 */ lfs f9, 0x64(r11) -/* 0000FA44 0001C7D4 B0 0B 00 80 */ sth r0, 0x80(r11) -.L_0000FA48: -/* 0000FA48 0001C7D8 D0 0B 00 00 */ stfs f0, 0x0(r11) -/* 0000FA4C 0001C7DC D1 AB 00 04 */ stfs f13, 0x4(r11) -/* 0000FA50 0001C7E0 D1 8B 00 2C */ stfs f12, 0x2c(r11) -/* 0000FA54 0001C7E4 D1 6B 00 30 */ stfs f11, 0x30(r11) -/* 0000FA58 0001C7E8 D1 4B 00 58 */ stfs f10, 0x58(r11) -/* 0000FA5C 0001C7EC D1 2B 00 5C */ stfs f9, 0x5c(r11) -/* 0000FA60 0001C7F0 B0 0B 00 28 */ sth r0, 0x28(r11) -/* 0000FA64 0001C7F4 B0 0B 00 54 */ sth r0, 0x54(r11) -/* 0000FA68 0001C7F8 7F E3 FB 78 */ mr r3, r31 -/* 0000FA6C 0001C7FC 80 01 02 14 */ lwz r0, 0x214(r1) -.L_0000FA70: -/* 0000FA70 0001C800 81 81 01 CC */ lwz r12, 0x1cc(r1) -/* 0000FA74 0001C804 7C 08 03 A6 */ mtlr r0 -/* 0000FA78 0001C808 BA 41 01 D0 */ lmw r18, 0x1d0(r1) -/* 0000FA7C 0001C80C E3 E1 02 08 */ psq_l f31, 0x208(r1), 0, qr0 -/* 0000FA80 0001C810 7D 80 81 20 */ mtcrf 8, r12 -/* 0000FA84 0001C814 38 21 02 10 */ addi r1, r1, 0x210 -/* 0000FA88 0001C818 4E 80 00 20 */ blr -.endfn __16CubicCameraMoveriP12CameraAnchoribN34 - -# .text:0xFA8C | size: 0x428 -# CubicCameraMover::IsUnderVehicle -.fn IsUnderVehicle__16CubicCameraMover, global -/* 0000FA8C 0001C81C 94 21 FE A0 */ stwu r1, -0x160(r1) -/* 0000FA90 0001C820 7C 08 02 A6 */ mflr r0 -/* 0000FA94 0001C824 F3 A1 01 48 */ psq_st f29, 0x148(r1), 0, qr0 -/* 0000FA98 0001C828 F3 C1 01 50 */ psq_st f30, 0x150(r1), 0, qr0 -/* 0000FA9C 0001C82C F3 E1 01 58 */ psq_st f31, 0x158(r1), 0, qr0 -/* 0000FAA0 0001C830 BF 21 01 2C */ stmw r25, 0x12c(r1) -/* 0000FAA4 0001C834 90 01 01 64 */ stw r0, 0x164(r1) -/* 0000FAA8 0001C838 3D 60 00 00 */ lis r11, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@ha -/* 0000FAAC 0001C83C 3D 20 00 00 */ lis r9, .rodata+0x994@ha -/* 0000FAB0 0001C840 C3 A9 09 94 */ lfs f29, .rodata+0x994@l(r9) -/* 0000FAB4 0001C844 3B 2B 00 00 */ addi r25, r11, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@l -/* 0000FAB8 0001C848 83 AB 00 00 */ lwz r29, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@l(r11) -/* 0000FABC 0001C84C 7C 7C 1B 78 */ mr r28, r3 -/* 0000FAC0 0001C850 80 19 00 08 */ lwz r0, 0x8(r25) -/* 0000FAC4 0001C854 81 39 00 00 */ lwz r9, 0x0(r25) -/* 0000FAC8 0001C858 54 00 10 3A */ slwi r0, r0, 2 -/* 0000FACC 0001C85C 7D 29 02 14 */ add r9, r9, r0 -/* 0000FAD0 0001C860 7C 1D 48 00 */ cmpw r29, r9 -/* 0000FAD4 0001C864 41 82 FE 90 */ beq .L_0000F964 -/* 0000FAD8 0001C868 83 FD 00 00 */ lwz r31, 0x0(r29) -/* 0000FADC 0001C86C 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 0000FAE0 0001C870 A8 69 01 18 */ lha r3, 0x118(r9) -/* 0000FAE4 0001C874 80 09 01 1C */ lwz r0, 0x11c(r9) -/* 0000FAE8 0001C878 7C 7F 1A 14 */ add r3, r31, r3 -/* 0000FAEC 0001C87C 7C 08 03 A6 */ mtlr r0 -/* 0000FAF0 0001C880 4E 80 00 21 */ blrl -/* 0000FAF4 0001C884 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000FAF8 0001C888 41 82 FE 88 */ beq .L_0000F980 -/* 0000FAFC 0001C88C 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 0000FB00 0001C890 A8 69 01 00 */ lha r3, 0x100(r9) -/* 0000FB04 0001C894 80 09 01 04 */ lwz r0, 0x104(r9) -/* 0000FB08 0001C898 7C 7F 1A 14 */ add r3, r31, r3 -/* 0000FB0C 0001C89C 7C 08 03 A6 */ mtlr r0 -/* 0000FB10 0001C8A0 4E 80 00 21 */ blrl -/* 0000FB14 0001C8A4 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000FB18 0001C8A8 40 82 FE 88 */ bne .L_0000F9A0 -/* 0000FB1C 0001C8AC 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 0000FB20 0001C8B0 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000FB24 0001C8B4 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0000FB28 0001C8B8 7C 7F 1A 14 */ add r3, r31, r3 -/* 0000FB2C 0001C8BC 7C 08 03 A6 */ mtlr r0 -/* 0000FB30 0001C8C0 4E 80 00 21 */ blrl -/* 0000FB34 0001C8C4 7C 7F 1B 79 */ mr. r31, r3 -/* 0000FB38 0001C8C8 41 82 FE 88 */ beq .L_0000F9C0 -/* 0000FB3C 0001C8CC 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 0000FB40 0001C8D0 A8 69 00 A8 */ lha r3, 0xa8(r9) -/* 0000FB44 0001C8D4 80 09 00 AC */ lwz r0, 0xac(r9) -/* 0000FB48 0001C8D8 7C 7F 1A 14 */ add r3, r31, r3 -/* 0000FB4C 0001C8DC 7C 08 03 A6 */ mtlr r0 -/* 0000FB50 0001C8E0 4E 80 00 21 */ blrl -.L_0000FB54: -/* 0000FB54 0001C8E4 7C 7E 1B 79 */ mr. r30, r3 -/* 0000FB58 0001C8E8 41 82 FE 88 */ beq .L_0000F9E0 -/* 0000FB5C 0001C8EC 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 0000FB60 0001C8F0 80 09 00 EC */ lwz r0, 0xec(r9) -.L_0000FB64: -/* 0000FB64 0001C8F4 A8 69 00 E8 */ lha r3, 0xe8(r9) -/* 0000FB68 0001C8F8 7C 08 03 A6 */ mtlr r0 -/* 0000FB6C 0001C8FC 7C 7F 1A 14 */ add r3, r31, r3 -/* 0000FB70 0001C900 4E 80 00 21 */ blrl -/* 0000FB74 0001C904 81 3C 00 80 */ lwz r9, 0x80(r28) -/* 0000FB78 0001C908 80 09 00 8C */ lwz r0, 0x8c(r9) -.L_0000FB7C: -/* 0000FB7C 0001C90C 7C 03 00 00 */ cmpw r3, r0 -/* 0000FB80 0001C910 41 82 FE 88 */ beq .L_0000FA08 -/* 0000FB84 0001C914 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000FB88 0001C918 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0000FB8C 0001C91C 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0000FB90 0001C920 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000FB94 0001C924 7C 08 03 A6 */ mtlr r0 -/* 0000FB98 0001C928 4E 80 00 21 */ blrl -.L_0000FB9C: -/* 0000FB9C 0001C92C 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000FBA0 0001C930 41 82 FE 88 */ beq .L_0000FA28 -/* 0000FBA4 0001C934 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000FBA8 0001C938 3B E1 00 38 */ addi r31, r1, 0x38 -/* 0000FBAC 0001C93C 3F 40 00 00 */ lis r26, .rodata+0x994@ha -/* 0000FBB0 0001C940 80 09 00 4C */ lwz r0, 0x4c(r9) -/* 0000FBB4 0001C944 A8 69 00 48 */ lha r3, 0x48(r9) -/* 0000FBB8 0001C948 7C 08 03 A6 */ mtlr r0 -/* 0000FBBC 0001C94C 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000FBC0 0001C950 4E 80 00 21 */ blrl -/* 0000FBC4 0001C954 C1 83 00 00 */ lfs f12, 0x0(r3) -/* 0000FBC8 0001C958 38 81 00 28 */ addi r4, r1, 0x28 -/* 0000FBCC 0001C95C D1 81 00 08 */ stfs f12, 0x8(r1) -/* 0000FBD0 0001C960 C0 03 00 04 */ lfs f0, 0x4(r3) -/* 0000FBD4 0001C964 D0 01 00 0C */ stfs f0, 0xc(r1) -/* 0000FBD8 0001C968 C1 A3 00 08 */ lfs f13, 0x8(r3) -/* 0000FBDC 0001C96C D1 81 00 18 */ stfs f12, 0x18(r1) -.L_0000FBE0: -/* 0000FBE0 0001C970 D0 01 00 1C */ stfs f0, 0x1c(r1) -/* 0000FBE4 0001C974 D1 A1 00 20 */ stfs f13, 0x20(r1) -/* 0000FBE8 0001C978 D1 A1 00 10 */ stfs f13, 0x10(r1) -/* 0000FBEC 0001C97C D3 A1 00 14 */ stfs f29, 0x14(r1) -/* 0000FBF0 0001C980 D3 A1 00 24 */ stfs f29, 0x24(r1) -/* 0000FBF4 0001C984 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000FBF8 0001C988 80 09 00 9C */ lwz r0, 0x9c(r9) -/* 0000FBFC 0001C98C A8 69 00 98 */ lha r3, 0x98(r9) -/* 0000FC00 0001C990 7C 08 03 A6 */ mtlr r0 -/* 0000FC04 0001C994 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000FC08 0001C998 4E 80 00 21 */ blrl -/* 0000FC0C 0001C99C 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000FC10 0001C9A0 7F E4 FB 78 */ mr r4, r31 -/* 0000FC14 0001C9A4 A8 69 00 88 */ lha r3, 0x88(r9) -/* 0000FC18 0001C9A8 80 09 00 8C */ lwz r0, 0x8c(r9) -/* 0000FC1C 0001C9AC 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000FC20 0001C9B0 7C 08 03 A6 */ mtlr r0 -/* 0000FC24 0001C9B4 4E 80 00 21 */ blrl -/* 0000FC28 0001C9B8 38 C1 00 B8 */ addi r6, r1, 0xb8 -/* 0000FC2C 0001C9BC 38 A1 00 78 */ addi r5, r1, 0x78 -.L_0000FC30: -/* 0000FC30 0001C9C0 7C C3 33 78 */ mr r3, r6 -/* 0000FC34 0001C9C4 7C 1F 28 00 */ cmpw r31, r5 -/* 0000FC38 0001C9C8 40 82 FC AC */ bne .L_0000F8E4 -/* 0000FC3C 0001C9CC 7F E4 FB 78 */ mr r4, r31 -/* 0000FC40 0001C9D0 39 60 00 00 */ li r11, 0x0 -/* 0000FC44 0001C9D4 3F 60 00 00 */ lis r27, .rodata+0x998@ha -/* 0000FC48 0001C9D8 7C 6A 1B 78 */ mr r10, r3 -/* 0000FC4C 0001C9DC 55 60 10 3A */ slwi r0, r11, 2 -/* 0000FC50 0001C9E0 7C 04 04 2E */ lfsx f0, r4, r0 -/* 0000FC54 0001C9E4 39 6B 00 01 */ addi r11, r11, 0x1 -/* 0000FC58 0001C9E8 2C 0B 00 0F */ cmpwi r11, 0xf -/* 0000FC5C 0001C9EC 7C 0A 05 2E */ stfsx f0, r10, r0 -/* 0000FC60 0001C9F0 40 81 FC 4C */ ble .L_0000F8AC -/* 0000FC64 0001C9F4 39 60 00 00 */ li r11, 0x0 -/* 0000FC68 0001C9F8 55 60 20 36 */ slwi r0, r11, 4 -/* 0000FC6C 0001C9FC 55 67 10 3A */ slwi r7, r11, 2 -/* 0000FC70 0001CA00 7D 05 02 14 */ add r8, r5, r0 -/* 0000FC74 0001CA04 39 40 00 00 */ li r10, 0x0 -/* 0000FC78 0001CA08 38 0B 00 01 */ addi r0, r11, 0x1 -/* 0000FC7C 0001CA0C 55 49 20 36 */ slwi r9, r10, 4 -/* 0000FC80 0001CA10 55 4B 10 3A */ slwi r11, r10, 2 -/* 0000FC84 0001CA14 7D 26 4A 14 */ add r9, r6, r9 -/* 0000FC88 0001CA18 39 4A 00 01 */ addi r10, r10, 0x1 -/* 0000FC8C 0001CA1C 7C 09 3C 2E */ lfsx f0, r9, r7 -.L_0000FC90: -/* 0000FC90 0001CA20 2C 0A 00 03 */ cmpwi r10, 0x3 -/* 0000FC94 0001CA24 7C 08 5D 2E */ stfsx f0, r8, r11 -/* 0000FC98 0001CA28 40 81 FC 7C */ ble .L_0000F914 -/* 0000FC9C 0001CA2C 7C 0B 03 78 */ mr r11, r0 -/* 0000FCA0 0001CA30 2C 0B 00 03 */ cmpwi r11, 0x3 -/* 0000FCA4 0001CA34 40 81 FC 68 */ ble .L_0000F90C -/* 0000FCA8 0001CA38 48 00 FC F4 */ b .text+0xFCF4 -.L_0000FCAC: -/* 0000FCAC 0001CA3C 39 20 00 00 */ li r9, 0x0 -/* 0000FCB0 0001CA40 3F 60 00 00 */ lis r27, .rodata+0x998@ha -/* 0000FCB4 0001CA44 55 20 20 36 */ slwi r0, r9, 4 -/* 0000FCB8 0001CA48 55 27 10 3A */ slwi r7, r9, 2 -/* 0000FCBC 0001CA4C 7D 05 02 14 */ add r8, r5, r0 -/* 0000FCC0 0001CA50 39 40 00 00 */ li r10, 0x0 -/* 0000FCC4 0001CA54 38 09 00 01 */ addi r0, r9, 0x1 -.L_0000FCC8: -/* 0000FCC8 0001CA58 55 49 20 36 */ slwi r9, r10, 4 -/* 0000FCCC 0001CA5C 55 4B 10 3A */ slwi r11, r10, 2 -/* 0000FCD0 0001CA60 7D 3F 4A 14 */ add r9, r31, r9 -/* 0000FCD4 0001CA64 39 4A 00 01 */ addi r10, r10, 0x1 -.L_0000FCD8: -/* 0000FCD8 0001CA68 7C 09 3C 2E */ lfsx f0, r9, r7 -/* 0000FCDC 0001CA6C 2C 0A 00 03 */ cmpwi r10, 0x3 -.L_0000FCE0: -/* 0000FCE0 0001CA70 7C 08 5D 2E */ stfsx f0, r8, r11 -/* 0000FCE4 0001CA74 40 81 FC C8 */ ble .L_0000F9AC -/* 0000FCE8 0001CA78 7C 09 03 78 */ mr r9, r0 -/* 0000FCEC 0001CA7C 2C 09 00 03 */ cmpwi r9, 0x3 -/* 0000FCF0 0001CA80 40 81 FC B4 */ ble .L_0000F9A4 -/* 0000FCF4 0001CA84 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000FCF8 0001CA88 7C 64 1B 78 */ mr r4, r3 -/* 0000FCFC 0001CA8C A8 69 00 70 */ lha r3, 0x70(r9) -/* 0000FD00 0001CA90 80 09 00 74 */ lwz r0, 0x74(r9) -.L_0000FD04: -/* 0000FD04 0001CA94 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000FD08 0001CA98 7C 08 03 A6 */ mtlr r0 -/* 0000FD0C 0001CA9C 4E 80 00 21 */ blrl -.L_0000FD10: -/* 0000FD10 0001CAA0 C1 61 00 B8 */ lfs f11, 0xb8(r1) -/* 0000FD14 0001CAA4 C1 41 00 C0 */ lfs f10, 0xc0(r1) -/* 0000FD18 0001CAA8 C1 21 00 BC */ lfs f9, 0xbc(r1) -.L_0000FD1C: -/* 0000FD1C 0001CAAC FD 60 58 50 */ fneg f11, f11 -/* 0000FD20 0001CAB0 D1 41 00 C8 */ stfs f10, 0xc8(r1) -/* 0000FD24 0001CAB4 D1 61 00 CC */ stfs f11, 0xcc(r1) -/* 0000FD28 0001CAB8 D1 21 00 D0 */ stfs f9, 0xd0(r1) -.L_0000FD2C: -/* 0000FD2C 0001CABC C1 1B 09 98 */ lfs f8, .rodata+0x998@l(r27) -/* 0000FD30 0001CAC0 81 3C 00 1C */ lwz r9, 0x1c(r28) -/* 0000FD34 0001CAC4 C1 A9 00 54 */ lfs f13, 0x54(r9) -/* 0000FD38 0001CAC8 C1 89 00 50 */ lfs f12, 0x50(r9) -/* 0000FD3C 0001CACC ED AD 02 F2 */ fmuls f13, f13, f11 -/* 0000FD40 0001CAD0 C0 09 00 58 */ lfs f0, 0x58(r9) -/* 0000FD44 0001CAD4 ED 8C 6A BA */ fmadds f12, f12, f10, f13 -/* 0000FD48 0001CAD8 EC 00 62 7A */ fmadds f0, f0, f9, f12 -.L_0000FD4C: -/* 0000FD4C 0001CADC FC 00 02 10 */ fabs f0, f0 -/* 0000FD50 0001CAE0 FC 00 40 00 */ fcmpu cr0, f0, f8 -/* 0000FD54 0001CAE4 4C 62 0B 82 */ cror un, eq, gt -/* 0000FD58 0001CAE8 41 83 FE 88 */ bso .L_0000FBE0 -/* 0000FD5C 0001CAEC 81 3C 00 80 */ lwz r9, 0x80(r28) -/* 0000FD60 0001CAF0 38 81 01 08 */ addi r4, r1, 0x108 -.L_0000FD64: -/* 0000FD64 0001CAF4 38 61 00 F8 */ addi r3, r1, 0xf8 -/* 0000FD68 0001CAF8 C1 49 00 00 */ lfs f10, 0x0(r9) -/* 0000FD6C 0001CAFC C1 29 00 04 */ lfs f9, 0x4(r9) -/* 0000FD70 0001CB00 C1 69 00 08 */ lfs f11, 0x8(r9) -/* 0000FD74 0001CB04 ED 4A 02 32 */ fmuls f10, f10, f8 -/* 0000FD78 0001CB08 ED 29 02 32 */ fmuls f9, f9, f8 -/* 0000FD7C 0001CB0C D1 41 00 F8 */ stfs f10, 0xf8(r1) -/* 0000FD80 0001CB10 ED 6B 02 32 */ fmuls f11, f11, f8 -.L_0000FD84: -/* 0000FD84 0001CB14 D1 21 00 FC */ stfs f9, 0xfc(r1) -/* 0000FD88 0001CB18 D1 61 01 00 */ stfs f11, 0x100(r1) -/* 0000FD8C 0001CB1C D1 41 00 E8 */ stfs f10, 0xe8(r1) -/* 0000FD90 0001CB20 D1 21 00 EC */ stfs f9, 0xec(r1) -/* 0000FD94 0001CB24 D1 61 00 F0 */ stfs f11, 0xf0(r1) -/* 0000FD98 0001CB28 C0 09 00 20 */ lfs f0, 0x20(r9) -/* 0000FD9C 0001CB2C C1 A9 00 18 */ lfs f13, 0x18(r9) -/* 0000FDA0 0001CB30 C1 89 00 1C */ lfs f12, 0x1c(r9) -.L_0000FDA4: -/* 0000FDA4 0001CB34 EC 00 58 2A */ fadds f0, f0, f11 -/* 0000FDA8 0001CB38 ED AD 50 2A */ fadds f13, f13, f10 -/* 0000FDAC 0001CB3C D0 01 01 10 */ stfs f0, 0x110(r1) -/* 0000FDB0 0001CB40 ED 8C 48 2A */ fadds f12, f12, f9 -/* 0000FDB4 0001CB44 D1 A1 01 08 */ stfs f13, 0x108(r1) -/* 0000FDB8 0001CB48 D1 81 01 0C */ stfs f12, 0x10c(r1) -/* 0000FDBC 0001CB4C 48 00 00 01 */ bl __8bVector3RC8bVector3 -/* 0000FDC0 0001CB50 C0 01 00 FC */ lfs f0, 0xfc(r1) -/* 0000FDC4 0001CB54 38 61 00 18 */ addi r3, r1, 0x18 -.L_0000FDC8: -/* 0000FDC8 0001CB58 C1 81 01 00 */ lfs f12, 0x100(r1) -/* 0000FDCC 0001CB5C 38 81 00 08 */ addi r4, r1, 0x8 -/* 0000FDD0 0001CB60 C1 A1 00 F8 */ lfs f13, 0xf8(r1) -/* 0000FDD4 0001CB64 FC 00 00 50 */ fneg f0, f0 -.L_0000FDD8: -/* 0000FDD8 0001CB68 C3 DA 09 94 */ lfs f30, .rodata+0x994@l(r26) -/* 0000FDDC 0001CB6C 38 A1 01 08 */ addi r5, r1, 0x108 -/* 0000FDE0 0001CB70 D0 01 00 18 */ stfs f0, 0x18(r1) -/* 0000FDE4 0001CB74 D1 81 00 1C */ stfs f12, 0x1c(r1) -/* 0000FDE8 0001CB78 D1 A1 00 20 */ stfs f13, 0x20(r1) -/* 0000FDEC 0001CB7C D3 C1 00 24 */ stfs f30, 0x24(r1) -/* 0000FDF0 0001CB80 48 00 00 01 */ bl VU0_v4subxyz__FRCQ25UMath7Vector4T0RQ25UMath7Vector4 -/* 0000FDF4 0001CB84 38 61 01 08 */ addi r3, r1, 0x108 -/* 0000FDF8 0001CB88 48 00 00 01 */ bl VU0_v4lengthsquarexyz__FRCQ25UMath7Vector4 -/* 0000FDFC 0001CB8C 48 00 00 01 */ bl VU0_sqrt__Ff -/* 0000FE00 0001CB90 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0000FE04 0001CB94 FF E0 08 90 */ fmr f31, f1 -.L_0000FE08: -/* 0000FE08 0001CB98 A8 69 00 30 */ lha r3, 0x30(r9) -/* 0000FE0C 0001CB9C 80 09 00 34 */ lwz r0, 0x34(r9) -/* 0000FE10 0001CBA0 7C 7E 1A 14 */ add r3, r30, r3 -/* 0000FE14 0001CBA4 7C 08 03 A6 */ mtlr r0 -/* 0000FE18 0001CBA8 4E 80 00 21 */ blrl -/* 0000FE1C 0001CBAC FC 1F 08 00 */ fcmpu cr0, f31, f1 -/* 0000FE20 0001CBB0 4C 62 0B 82 */ cror un, eq, gt -/* 0000FE24 0001CBB4 41 83 FE 88 */ bso .L_0000FCAC -/* 0000FE28 0001CBB8 38 61 01 08 */ addi r3, r1, 0x108 -/* 0000FE2C 0001CBBC 38 81 00 78 */ addi r4, r1, 0x78 -/* 0000FE30 0001CBC0 38 A1 01 18 */ addi r5, r1, 0x118 -/* 0000FE34 0001CBC4 48 00 00 01 */ bl VU0_MATRIX3x4_vect3mult__FRCQ25UMath7Vector3RCQ25UMath7Matrix4RQ25UMath7Vector3 -/* 0000FE38 0001CBC8 C1 A1 01 18 */ lfs f13, 0x118(r1) -/* 0000FE3C 0001CBCC FC 0D F0 00 */ fcmpu cr0, f13, f30 -.L_0000FE40: -/* 0000FE40 0001CBD0 4C 62 0B 82 */ cror un, eq, gt -/* 0000FE44 0001CBD4 41 83 FE 4C */ bso .L_0000FC90 -.L_0000FE48: -/* 0000FE48 0001CBD8 FD A0 68 50 */ fneg f13, f13 -/* 0000FE4C 0001CBDC C0 01 00 28 */ lfs f0, 0x28(r1) -/* 0000FE50 0001CBE0 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 0000FE54 0001CBE4 4C 62 0B 82 */ cror un, eq, gt -/* 0000FE58 0001CBE8 41 83 FE 88 */ bso .L_0000FCE0 -/* 0000FE5C 0001CBEC C1 A1 01 20 */ lfs f13, 0x120(r1) -/* 0000FE60 0001CBF0 FC 0D F0 00 */ fcmpu cr0, f13, f30 -/* 0000FE64 0001CBF4 4C 62 0B 82 */ cror un, eq, gt -/* 0000FE68 0001CBF8 41 83 FE 70 */ bso .L_0000FCD8 -/* 0000FE6C 0001CBFC FD A0 68 50 */ fneg f13, f13 -.L_0000FE70: -/* 0000FE70 0001CC00 C0 01 00 30 */ lfs f0, 0x30(r1) -/* 0000FE74 0001CC04 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 0000FE78 0001CC08 4C 62 0B 82 */ cror un, eq, gt -/* 0000FE7C 0001CC0C 41 83 FE 88 */ bso .L_0000FD04 -/* 0000FE80 0001CC10 38 60 00 01 */ li r3, 0x1 -/* 0000FE84 0001CC14 48 00 FE 94 */ b .text+0xFE94 -/* 0000FE88 0001CC18 3B BD 00 04 */ addi r29, r29, 0x4 -/* 0000FE8C 0001CC1C 48 00 FA C0 */ b .text+0xFAC0 -/* 0000FE90 0001CC20 38 60 00 00 */ li r3, 0x0 -/* 0000FE94 0001CC24 80 01 01 64 */ lwz r0, 0x164(r1) -/* 0000FE98 0001CC28 7C 08 03 A6 */ mtlr r0 -/* 0000FE9C 0001CC2C BB 21 01 2C */ lmw r25, 0x12c(r1) -/* 0000FEA0 0001CC30 E3 A1 01 48 */ psq_l f29, 0x148(r1), 0, qr0 -/* 0000FEA4 0001CC34 E3 C1 01 50 */ psq_l f30, 0x150(r1), 0, qr0 -/* 0000FEA8 0001CC38 E3 E1 01 58 */ psq_l f31, 0x158(r1), 0, qr0 -/* 0000FEAC 0001CC3C 38 21 01 60 */ addi r1, r1, 0x160 -/* 0000FEB0 0001CC40 4E 80 00 20 */ blr -.endfn IsUnderVehicle__16CubicCameraMover - -# .text:0xFEB4 | size: 0x5EC -.fn SetDesired__16CubicCameraMoverP8bMatrix4P3POVP12CubicPovDatab, global -/* 0000FEB4 0001CC44 94 21 FE F0 */ stwu r1, -0x110(r1) -/* 0000FEB8 0001CC48 7C 08 02 A6 */ mflr r0 -/* 0000FEBC 0001CC4C 7D 80 00 26 */ mfcr r12 -/* 0000FEC0 0001CC50 F3 E1 01 08 */ psq_st f31, 0x108(r1), 0, qr0 -/* 0000FEC4 0001CC54 BF 41 00 F0 */ stmw r26, 0xf0(r1) -/* 0000FEC8 0001CC58 90 01 01 14 */ stw r0, 0x114(r1) -/* 0000FECC 0001CC5C 91 81 00 EC */ stw r12, 0xec(r1) -/* 0000FED0 0001CC60 7C 7F 1B 78 */ mr r31, r3 -/* 0000FED4 0001CC64 7C BB 2B 78 */ mr r27, r5 -/* 0000FED8 0001CC68 A8 7B 00 00 */ lha r3, 0x0(r27) -/* 0000FEDC 0001CC6C 7C 9C 23 78 */ mr r28, r4 -/* 0000FEE0 0001CC70 7C DD 33 78 */ mr r29, r6 -/* 0000FEE4 0001CC74 7C FE 3B 78 */ mr r30, r7 -/* 0000FEE8 0001CC78 48 00 0F 8D */ bl .L_00010E74 -/* 0000FEEC 0001CC7C 81 3F 00 80 */ lwz r9, 0x80(r31) -/* 0000FEF0 0001CC80 7C 7A 1B 78 */ mr r26, r3 -/* 0000FEF4 0001CC84 80 09 00 C4 */ lwz r0, 0xc4(r9) -.L_0000FEF8: -/* 0000FEF8 0001CC88 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000FEFC 0001CC8C 41 82 FF 0C */ beq .L_0000FE08 -/* 0000FF00 0001CC90 3D 20 00 00 */ lis r9, WorldTimer@ha -/* 0000FF04 0001CC94 80 09 00 00 */ lwz r0, WorldTimer@l(r9) -/* 0000FF08 0001CC98 90 1F 00 B4 */ stw r0, 0xb4(r31) -/* 0000FF0C 0001CC9C 7F E3 FB 78 */ mr r3, r31 -/* 0000FF10 0001CCA0 48 00 FA 8D */ bl .text+0xFA8C -/* 0000FF14 0001CCA4 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0000FF18 0001CCA8 41 82 FF 28 */ beq .L_0000FE40 -.L_0000FF1C: -/* 0000FF1C 0001CCAC 3D 20 00 00 */ lis r9, WorldTimer@ha -/* 0000FF20 0001CCB0 80 09 00 00 */ lwz r0, WorldTimer@l(r9) -/* 0000FF24 0001CCB4 90 1F 00 B8 */ stw r0, 0xb8(r31) -/* 0000FF28 0001CCB8 7F C5 F3 78 */ mr r5, r30 -.L_0000FF2C: -/* 0000FF2C 0001CCBC 7F E3 FB 78 */ mr r3, r31 -/* 0000FF30 0001CCC0 3B C1 00 08 */ addi r30, r1, 0x8 -/* 0000FF34 0001CCC4 7F 64 DB 78 */ mr r4, r27 -/* 0000FF38 0001CCC8 48 00 3F F9 */ bl .L_00013F30 -/* 0000FF3C 0001CCCC 7F E3 FB 78 */ mr r3, r31 -/* 0000FF40 0001CCD0 7F 84 E3 78 */ mr r4, r28 -/* 0000FF44 0001CCD4 48 00 46 95 */ bl .L_000145D8 -/* 0000FF48 0001CCD8 7F 84 E3 78 */ mr r4, r28 -/* 0000FF4C 0001CCDC 7F C3 F3 78 */ mr r3, r30 -/* 0000FF50 0001CCE0 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 -/* 0000FF54 0001CCE4 3D 20 00 00 */ lis r9, .rodata+0x99C@ha -/* 0000FF58 0001CCE8 80 1F 00 A0 */ lwz r0, 0xa0(r31) -/* 0000FF5C 0001CCEC C1 89 09 9C */ lfs f12, .rodata+0x99C@l(r9) -/* 0000FF60 0001CCF0 38 61 00 48 */ addi r3, r1, 0x48 -/* 0000FF64 0001CCF4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000FF68 0001CCF8 D1 81 00 48 */ stfs f12, 0x48(r1) -/* 0000FF6C 0001CCFC D1 81 00 4C */ stfs f12, 0x4c(r1) -/* 0000FF70 0001CD00 D1 81 00 50 */ stfs f12, 0x50(r1) -/* 0000FF74 0001CD04 D1 81 00 54 */ stfs f12, 0x54(r1) -/* 0000FF78 0001CD08 41 82 FF A4 */ beq .L_0000FF1C -/* 0000FF7C 0001CD0C 81 3F 00 E4 */ lwz r9, 0xe4(r31) -/* 0000FF80 0001CD10 7F C4 F3 78 */ mr r4, r30 -.L_0000FF84: -/* 0000FF84 0001CD14 7C 65 1B 78 */ mr r5, r3 -/* 0000FF88 0001CD18 C0 09 00 1C */ lfs f0, 0x1c(r9) -/* 0000FF8C 0001CD1C D0 01 00 48 */ stfs f0, 0x48(r1) -/* 0000FF90 0001CD20 C1 A9 00 20 */ lfs f13, 0x20(r9) -/* 0000FF94 0001CD24 D1 A1 00 4C */ stfs f13, 0x4c(r1) -.L_0000FF98: -/* 0000FF98 0001CD28 C0 09 00 24 */ lfs f0, 0x24(r9) -/* 0000FF9C 0001CD2C D0 01 00 50 */ stfs f0, 0x50(r1) -/* 0000FFA0 0001CD30 48 00 00 01 */ bl bMulMatrix__FP8bVector4PC8bMatrix4PC8bVector4 -/* 0000FFA4 0001CD34 3D 20 00 00 */ lis r9, theRaceParameters+0x50@ha -/* 0000FFA8 0001CD38 39 40 00 00 */ li r10, 0x0 -/* 0000FFAC 0001CD3C 80 09 00 50 */ lwz r0, theRaceParameters+0x50@l(r9) -.L_0000FFB0: -/* 0000FFB0 0001CD40 39 60 00 00 */ li r11, 0x0 -/* 0000FFB4 0001CD44 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000FFB8 0001CD48 40 82 FF CC */ bne .L_0000FF84 -/* 0000FFBC 0001CD4C 3D 20 00 00 */ lis r9, g_tweakIsBurnout@ha -/* 0000FFC0 0001CD50 80 09 00 00 */ lwz r0, g_tweakIsBurnout@l(r9) -/* 0000FFC4 0001CD54 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0000FFC8 0001CD58 41 82 FF D0 */ beq .L_0000FF98 -/* 0000FFCC 0001CD5C 39 60 00 01 */ li r11, 0x1 -/* 0000FFD0 0001CD60 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0000FFD4 0001CD64 41 82 FF DC */ beq .L_0000FFB0 -/* 0000FFD8 0001CD68 39 40 00 01 */ li r10, 0x1 -/* 0000FFDC 0001CD6C 2C 0A 00 00 */ cmpwi r10, 0x0 -/* 0000FFE0 0001CD70 41 82 00 08 */ beq .L_0000FFE8 -/* 0000FFE4 0001CD74 3D 60 00 00 */ lis r11, _SmokeShowEyeOffset@ha -.L_0000FFE8: -/* 0000FFE8 0001CD78 3D 20 00 00 */ lis r9, .rodata+0x99C@ha -/* 0000FFEC 0001CD7C C0 09 09 9C */ lfs f0, .rodata+0x99C@l(r9) -/* 0000FFF0 0001CD80 3D 40 00 00 */ lis r10, _SmokeShowLookAngle@ha -/* 0000FFF4 0001CD84 C1 AB 00 00 */ lfs f13, _SmokeShowEyeOffset@l(r11) -/* 0000FFF8 0001CD88 D0 01 00 60 */ stfs f0, 0x60(r1) -/* 0000FFFC 0001CD8C D1 A1 00 58 */ stfs f13, 0x58(r1) -/* 00010000 0001CD90 A3 CA 00 00 */ lhz r30, _SmokeShowLookAngle@l(r10) -/* 00010004 0001CD94 48 01 00 64 */ b .text+0x10064 -/* 00010008 0001CD98 7F E3 FB 78 */ mr r3, r31 -/* 0001000C 0001CD9C 48 00 3F 95 */ bl .L_00013FA0 -/* 00010010 0001CDA0 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00010014 0001CDA4 40 82 00 44 */ bne .L_00010058 -/* 00010018 0001CDA8 C1 9B 00 04 */ lfs f12, 0x4(r27) -/* 0001001C 0001CDAC 7F E3 FB 78 */ mr r3, r31 -/* 00010020 0001CDB0 C1 BB 00 0C */ lfs f13, 0xc(r27) -/* 00010024 0001CDB4 38 81 00 58 */ addi r4, r1, 0x58 -/* 00010028 0001CDB8 C0 1B 00 08 */ lfs f0, 0x8(r27) -/* 0001002C 0001CDBC D1 81 00 58 */ stfs f12, 0x58(r1) -/* 00010030 0001CDC0 D1 A1 00 5C */ stfs f13, 0x5c(r1) -/* 00010034 0001CDC4 D0 01 00 60 */ stfs f0, 0x60(r1) -/* 00010038 0001CDC8 48 00 45 39 */ bl ClampSecondDerivative__Q23ICE7Cubic1Df -/* 0001003C 0001CDCC A3 DB 00 02 */ lhz r30, 0x2(r27) -/* 00010040 0001CDD0 48 01 00 74 */ b .text+0x10074 -/* 00010044 0001CDD4 3D 60 00 00 */ lis r11, _HydraulicsEyeOffset@ha -/* 00010048 0001CDD8 3D 20 00 00 */ lis r9, .rodata+0x99C@ha -/* 0001004C 0001CDDC C0 09 09 9C */ lfs f0, .rodata+0x99C@l(r9) -/* 00010050 0001CDE0 3D 40 00 00 */ lis r10, _HydraulicsLookAngle@ha -/* 00010054 0001CDE4 C1 AB 00 00 */ lfs f13, _HydraulicsEyeOffset@l(r11) -.L_00010058: -/* 00010058 0001CDE8 D0 01 00 60 */ stfs f0, 0x60(r1) -/* 0001005C 0001CDEC D1 A1 00 58 */ stfs f13, 0x58(r1) -/* 00010060 0001CDF0 A3 CA 00 00 */ lhz r30, _HydraulicsLookAngle@l(r10) -/* 00010064 0001CDF4 D1 A1 00 68 */ stfs f13, 0x68(r1) -/* 00010068 0001CDF8 D0 01 00 6C */ stfs f0, 0x6c(r1) -/* 0001006C 0001CDFC D0 01 00 70 */ stfs f0, 0x70(r1) -/* 00010070 0001CE00 D0 01 00 5C */ stfs f0, 0x5c(r1) -/* 00010074 0001CE04 7F C3 F3 78 */ mr r3, r30 -/* 00010078 0001CE08 2E 1A 00 00 */ cmpwi cr4, r26, 0x0 -/* 0001007C 0001CE0C 48 00 00 01 */ bl bSin__FUs -/* 00010080 0001CE10 FF E0 08 90 */ fmr f31, f1 -/* 00010084 0001CE14 7F C3 F3 78 */ mr r3, r30 -/* 00010088 0001CE18 48 00 00 01 */ bl bCos__FUs -/* 0001008C 0001CE1C EF FF 08 24 */ fdivs f31, f31, f1 -/* 00010090 0001CE20 40 92 00 B8 */ bne cr4, .L_00010148 -/* 00010094 0001CE24 3D 20 00 00 */ lis r9, .rodata+0x9A0@ha -/* 00010098 0001CE28 C1 A1 00 58 */ lfs f13, 0x58(r1) -/* 0001009C 0001CE2C C1 89 09 A0 */ lfs f12, .rodata+0x9A0@l(r9) -/* 000100A0 0001CE30 C0 01 00 60 */ lfs f0, 0x60(r1) -/* 000100A4 0001CE34 ED AD 60 2A */ fadds f13, f13, f12 -/* 000100A8 0001CE38 EC 00 F8 28 */ fsubs f0, f0, f31 -/* 000100AC 0001CE3C D1 A1 00 68 */ stfs f13, 0x68(r1) -/* 000100B0 0001CE40 D0 01 00 70 */ stfs f0, 0x70(r1) -/* 000100B4 0001CE44 48 01 00 D4 */ b .text+0x100D4 -/* 000100B8 0001CE48 C0 01 00 58 */ lfs f0, 0x58(r1) -/* 000100BC 0001CE4C 3D 20 00 00 */ lis r9, .rodata+0x99C@ha -/* 000100C0 0001CE50 C1 A1 00 60 */ lfs f13, 0x60(r1) -/* 000100C4 0001CE54 C1 89 09 9C */ lfs f12, .rodata+0x99C@l(r9) -/* 000100C8 0001CE58 EC 1F 68 3A */ fmadds f0, f31, f0, f13 -/* 000100CC 0001CE5C D0 01 00 70 */ stfs f0, 0x70(r1) -/* 000100D0 0001CE60 D1 81 00 68 */ stfs f12, 0x68(r1) -/* 000100D4 0001CE64 C1 7D 00 40 */ lfs f11, 0x40(r29) -/* 000100D8 0001CE68 3D 20 00 00 */ lis r9, .rodata+0x99C@ha -/* 000100DC 0001CE6C C1 81 00 48 */ lfs f12, 0x48(r1) -/* 000100E0 0001CE70 3B C1 00 78 */ addi r30, r1, 0x78 -/* 000100E4 0001CE74 C1 BD 00 44 */ lfs f13, 0x44(r29) -/* 000100E8 0001CE78 38 9D 00 50 */ addi r4, r29, 0x50 -/* 000100EC 0001CE7C ED 6B 03 32 */ fmuls f11, f11, f12 -/* 000100F0 0001CE80 C0 1D 00 48 */ lfs f0, 0x48(r29) -/* 000100F4 0001CE84 C1 41 00 4C */ lfs f10, 0x4c(r1) -.L_000100F8: -/* 000100F8 0001CE88 38 BD 00 60 */ addi r5, r29, 0x60 -/* 000100FC 0001CE8C C1 81 00 50 */ lfs f12, 0x50(r1) -/* 00010100 0001CE90 7F C3 F3 78 */ mr r3, r30 -/* 00010104 0001CE94 C3 E9 09 9C */ lfs f31, .rodata+0x99C@l(r9) -/* 00010108 0001CE98 ED AD 02 B2 */ fmuls f13, f13, f10 -/* 0001010C 0001CE9C EC 00 03 32 */ fmuls f0, f0, f12 -/* 00010110 0001CEA0 D1 61 00 78 */ stfs f11, 0x78(r1) -/* 00010114 0001CEA4 D1 A1 00 7C */ stfs f13, 0x7c(r1) -/* 00010118 0001CEA8 D0 01 00 80 */ stfs f0, 0x80(r1) -/* 0001011C 0001CEAC D3 E1 00 6C */ stfs f31, 0x6c(r1) -/* 00010120 0001CEB0 48 00 EE 71 */ bl .text+0xEE70 -/* 00010124 0001CEB4 7F E3 FB 78 */ mr r3, r31 -/* 00010128 0001CEB8 48 00 3F 95 */ bl .L_000140BC -/* 0001012C 0001CEBC 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00010130 0001CEC0 41 82 01 60 */ beq .L_00010290 -.L_00010134: -/* 00010134 0001CEC4 3D 20 00 00 */ lis r9, .rodata+0x9A4@ha -/* 00010138 0001CEC8 C0 01 00 58 */ lfs f0, 0x58(r1) -.L_0001013C: -/* 0001013C 0001CECC C1 A9 09 A4 */ lfs f13, .rodata+0x9A4@l(r9) -/* 00010140 0001CED0 C1 81 00 5C */ lfs f12, 0x5c(r1) -/* 00010144 0001CED4 C1 61 00 60 */ lfs f11, 0x60(r1) -.L_00010148: -/* 00010148 0001CED8 EC 00 03 72 */ fmuls f0, f0, f13 -/* 0001014C 0001CEDC ED 8C 03 72 */ fmuls f12, f12, f13 -/* 00010150 0001CEE0 D0 01 00 58 */ stfs f0, 0x58(r1) -/* 00010154 0001CEE4 ED 6B 03 72 */ fmuls f11, f11, f13 -/* 00010158 0001CEE8 D1 81 00 5C */ stfs f12, 0x5c(r1) -/* 0001015C 0001CEEC D1 61 00 60 */ stfs f11, 0x60(r1) -/* 00010160 0001CEF0 C1 41 00 78 */ lfs f10, 0x78(r1) -.L_00010164: -/* 00010164 0001CEF4 7F C4 F3 78 */ mr r4, r30 -/* 00010168 0001CEF8 C1 A1 00 7C */ lfs f13, 0x7c(r1) -/* 0001016C 0001CEFC 3B C1 00 88 */ addi r30, r1, 0x88 -/* 00010170 0001CF00 C0 01 00 80 */ lfs f0, 0x80(r1) -.L_00010174: -/* 00010174 0001CF04 3B 81 00 98 */ addi r28, r1, 0x98 -/* 00010178 0001CF08 C1 81 00 58 */ lfs f12, 0x58(r1) -/* 0001017C 0001CF0C C1 61 00 5C */ lfs f11, 0x5c(r1) -/* 00010180 0001CF10 C1 21 00 60 */ lfs f9, 0x60(r1) -.L_00010184: -/* 00010184 0001CF14 ED 4A 60 2A */ fadds f10, f10, f12 -/* 00010188 0001CF18 80 7F 00 88 */ lwz r3, 0x88(r31) -/* 0001018C 0001CF1C ED AD 58 2A */ fadds f13, f13, f11 -/* 00010190 0001CF20 EC 00 48 2A */ fadds f0, f0, f9 -/* 00010194 0001CF24 D1 41 00 78 */ stfs f10, 0x78(r1) -.L_00010198: -/* 00010198 0001CF28 D1 A1 00 7C */ stfs f13, 0x7c(r1) -/* 0001019C 0001CF2C D0 01 00 80 */ stfs f0, 0x80(r1) -/* 000101A0 0001CF30 48 00 00 01 */ bl SetValDesired__8tCubic3DP8bVector3 -.L_000101A4: -/* 000101A4 0001CF34 C1 9D 00 70 */ lfs f12, 0x70(r29) -/* 000101A8 0001CF38 38 9D 00 80 */ addi r4, r29, 0x80 -/* 000101AC 0001CF3C C1 61 00 48 */ lfs f11, 0x48(r1) -.L_000101B0: -/* 000101B0 0001CF40 38 BD 00 90 */ addi r5, r29, 0x90 -/* 000101B4 0001CF44 C1 BD 00 74 */ lfs f13, 0x74(r29) -/* 000101B8 0001CF48 7F C3 F3 78 */ mr r3, r30 -/* 000101BC 0001CF4C ED 8C 02 F2 */ fmuls f12, f12, f11 -/* 000101C0 0001CF50 C0 1D 00 78 */ lfs f0, 0x78(r29) -/* 000101C4 0001CF54 C1 41 00 4C */ lfs f10, 0x4c(r1) -/* 000101C8 0001CF58 C1 61 00 50 */ lfs f11, 0x50(r1) -/* 000101CC 0001CF5C ED AD 02 B2 */ fmuls f13, f13, f10 -/* 000101D0 0001CF60 D1 81 00 88 */ stfs f12, 0x88(r1) -/* 000101D4 0001CF64 EC 00 02 F2 */ fmuls f0, f0, f11 -/* 000101D8 0001CF68 D1 A1 00 8C */ stfs f13, 0x8c(r1) -/* 000101DC 0001CF6C D0 01 00 90 */ stfs f0, 0x90(r1) -.L_000101E0: -/* 000101E0 0001CF70 48 00 EE 71 */ bl .text+0xEE70 -/* 000101E4 0001CF74 C1 81 00 88 */ lfs f12, 0x88(r1) -/* 000101E8 0001CF78 7F C4 F3 78 */ mr r4, r30 -/* 000101EC 0001CF7C C0 01 00 8C */ lfs f0, 0x8c(r1) -/* 000101F0 0001CF80 C1 A1 00 90 */ lfs f13, 0x90(r1) -/* 000101F4 0001CF84 C1 61 00 68 */ lfs f11, 0x68(r1) -/* 000101F8 0001CF88 C1 41 00 6C */ lfs f10, 0x6c(r1) -/* 000101FC 0001CF8C C1 21 00 70 */ lfs f9, 0x70(r1) -/* 00010200 0001CF90 ED 8C 58 2A */ fadds f12, f12, f11 -/* 00010204 0001CF94 80 7F 00 8C */ lwz r3, 0x8c(r31) -.L_00010208: -/* 00010208 0001CF98 EC 00 50 2A */ fadds f0, f0, f10 -/* 0001020C 0001CF9C ED AD 48 2A */ fadds f13, f13, f9 -/* 00010210 0001CFA0 D0 01 00 8C */ stfs f0, 0x8c(r1) -/* 00010214 0001CFA4 D1 81 00 88 */ stfs f12, 0x88(r1) -/* 00010218 0001CFA8 D1 A1 00 90 */ stfs f13, 0x90(r1) -/* 0001021C 0001CFAC 48 00 00 01 */ bl SetValDesired__8tCubic3DP8bVector3 -/* 00010220 0001CFB0 3D 20 00 00 */ lis r9, .rodata+0x9A0@ha -.L_00010224: -/* 00010224 0001CFB4 A8 1B 00 18 */ lha r0, 0x18(r27) -/* 00010228 0001CFB8 C0 09 09 A0 */ lfs f0, .rodata+0x9A0@l(r9) -/* 0001022C 0001CFBC 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00010230 0001CFC0 D3 E1 00 98 */ stfs f31, 0x98(r1) -/* 00010234 0001CFC4 D3 E1 00 9C */ stfs f31, 0x9c(r1) -/* 00010238 0001CFC8 D0 01 00 A0 */ stfs f0, 0xa0(r1) -/* 0001023C 0001CFCC 41 82 02 9C */ beq .L_000104D8 -/* 00010240 0001CFD0 C1 61 00 C0 */ lfs f11, 0xc0(r1) -/* 00010244 0001CFD4 38 81 00 C8 */ addi r4, r1, 0xc8 -/* 00010248 0001CFD8 C1 81 00 B8 */ lfs f12, 0xb8(r1) -/* 0001024C 0001CFDC 38 61 00 B8 */ addi r3, r1, 0xb8 -/* 00010250 0001CFE0 C1 A1 00 BC */ lfs f13, 0xbc(r1) -/* 00010254 0001CFE4 EC 0B 00 2A */ fadds f0, f11, f0 -/* 00010258 0001CFE8 D1 81 00 C8 */ stfs f12, 0xc8(r1) -/* 0001025C 0001CFEC D1 A1 00 CC */ stfs f13, 0xcc(r1) -/* 00010260 0001CFF0 D0 01 00 D0 */ stfs f0, 0xd0(r1) -/* 00010264 0001CFF4 D1 81 00 A8 */ stfs f12, 0xa8(r1) -/* 00010268 0001CFF8 D1 A1 00 AC */ stfs f13, 0xac(r1) -/* 0001026C 0001CFFC D1 61 00 B0 */ stfs f11, 0xb0(r1) -/* 00010270 0001D000 48 00 00 01 */ bl __8bVector3RC8bVector3 -/* 00010274 0001D004 C1 81 00 B8 */ lfs f12, 0xb8(r1) -/* 00010278 0001D008 38 BD 00 30 */ addi r5, r29, 0x30 -/* 0001027C 0001D00C C1 A1 00 BC */ lfs f13, 0xbc(r1) -/* 00010280 0001D010 7F 83 E3 78 */ mr r3, r28 -/* 00010284 0001D014 C0 01 00 C0 */ lfs f0, 0xc0(r1) -/* 00010288 0001D018 38 9D 00 20 */ addi r4, r29, 0x20 -/* 0001028C 0001D01C D1 81 00 98 */ stfs f12, 0x98(r1) -.L_00010290: -/* 00010290 0001D020 D1 A1 00 9C */ stfs f13, 0x9c(r1) -/* 00010294 0001D024 D0 01 00 A0 */ stfs f0, 0xa0(r1) -/* 00010298 0001D028 48 00 EE 71 */ bl .text+0xEE70 -/* 0001029C 0001D02C 80 9F 00 80 */ lwz r4, 0x80(r31) -/* 000102A0 0001D030 3D 20 00 00 */ lis r9, .rodata+0x9A8@ha -/* 000102A4 0001D034 C1 A9 09 A8 */ lfs f13, .rodata+0x9A8@l(r9) -/* 000102A8 0001D038 C0 04 00 10 */ lfs f0, 0x10(r4) -/* 000102AC 0001D03C FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 000102B0 0001D040 4C 62 03 82 */ cror un, eq, lt -/* 000102B4 0001D044 41 83 02 F8 */ bso .L_000105AC -/* 000102B8 0001D048 7C 85 23 78 */ mr r5, r4 -/* 000102BC 0001D04C 7F E3 FB 78 */ mr r3, r31 -/* 000102C0 0001D050 38 84 00 18 */ addi r4, r4, 0x18 -/* 000102C4 0001D054 48 00 35 CD */ bl .L_00013890 -/* 000102C8 0001D058 C1 23 00 08 */ lfs f9, 0x8(r3) -/* 000102CC 0001D05C C1 63 00 00 */ lfs f11, 0x0(r3) -/* 000102D0 0001D060 C1 43 00 04 */ lfs f10, 0x4(r3) -/* 000102D4 0001D064 C1 81 00 98 */ lfs f12, 0x98(r1) -/* 000102D8 0001D068 C1 A1 00 9C */ lfs f13, 0x9c(r1) -/* 000102DC 0001D06C C0 01 00 A0 */ lfs f0, 0xa0(r1) -/* 000102E0 0001D070 ED 8C 58 2A */ fadds f12, f12, f11 -/* 000102E4 0001D074 ED AD 50 2A */ fadds f13, f13, f10 -/* 000102E8 0001D078 D1 81 00 98 */ stfs f12, 0x98(r1) -/* 000102EC 0001D07C EC 00 48 2A */ fadds f0, f0, f9 -/* 000102F0 0001D080 D1 A1 00 9C */ stfs f13, 0x9c(r1) -/* 000102F4 0001D084 D0 01 00 A0 */ stfs f0, 0xa0(r1) -/* 000102F8 0001D088 7F 84 E3 78 */ mr r4, r28 -/* 000102FC 0001D08C 7F 83 E3 78 */ mr r3, r28 -/* 00010300 0001D090 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -/* 00010304 0001D094 80 7F 00 94 */ lwz r3, 0x94(r31) -/* 00010308 0001D098 7F 84 E3 78 */ mr r4, r28 -/* 0001030C 0001D09C 48 00 00 01 */ bl SetValDesired__8tCubic3DP8bVector3 -/* 00010310 0001D0A0 A0 9B 00 10 */ lhz r4, 0x10(r27) -/* 00010314 0001D0A4 41 92 03 48 */ beq cr4, .L_0001065C -/* 00010318 0001D0A8 81 3F 00 80 */ lwz r9, 0x80(r31) -/* 0001031C 0001D0AC 80 09 00 B4 */ lwz r0, 0xb4(r9) -/* 00010320 0001D0B0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00010324 0001D0B4 41 82 03 48 */ beq .L_0001066C -/* 00010328 0001D0B8 C0 09 00 10 */ lfs f0, 0x10(r9) -/* 0001032C 0001D0BC FC 00 F8 00 */ fcmpu cr0, f0, f31 -/* 00010330 0001D0C0 4C 62 03 82 */ cror un, eq, lt -/* 00010334 0001D0C4 41 83 03 48 */ bso .L_0001067C -/* 00010338 0001D0C8 3D 20 00 00 */ lis r9, _NOSFovWidening@ha -/* 0001033C 0001D0CC A0 09 00 00 */ lhz r0, _NOSFovWidening@l(r9) -/* 00010340 0001D0D0 7C 04 02 14 */ add r0, r4, r0 -/* 00010344 0001D0D4 54 04 04 3E */ clrlwi r4, r0, 16 -/* 00010348 0001D0D8 3C 00 43 30 */ lis r0, 0x4330 -/* 0001034C 0001D0DC 90 81 00 E4 */ stw r4, 0xe4(r1) -/* 00010350 0001D0E0 3D 20 00 00 */ lis r9, .rodata+0x9B0@ha -/* 00010354 0001D0E4 C9 A9 09 B0 */ lfd f13, .rodata+0x9B0@l(r9) -/* 00010358 0001D0E8 90 01 00 E0 */ stw r0, 0xe0(r1) -/* 0001035C 0001D0EC 81 3F 00 84 */ lwz r9, 0x84(r31) -/* 00010360 0001D0F0 C8 01 00 E0 */ lfd f0, 0xe0(r1) -/* 00010364 0001D0F4 C1 89 00 00 */ lfs f12, 0x0(r9) -/* 00010368 0001D0F8 FC 00 68 28 */ fsub f0, f0, f13 -/* 0001036C 0001D0FC FC 00 00 18 */ frsp f0, f0 -/* 00010370 0001D100 FC 00 60 00 */ fcmpu cr0, f0, f12 -/* 00010374 0001D104 D0 09 00 08 */ stfs f0, 0x8(r9) -/* 00010378 0001D108 41 82 03 84 */ beq .L_000106FC -/* 0001037C 0001D10C 38 00 00 02 */ li r0, 0x2 -/* 00010380 0001D110 B0 09 00 28 */ sth r0, 0x28(r9) -/* 00010384 0001D114 80 1F 00 A8 */ lwz r0, 0xa8(r31) -/* 00010388 0001D118 2C 00 00 00 */ cmpwi r0, 0x0 -.L_0001038C: -/* 0001038C 0001D11C 40 82 03 94 */ bne .L_00010720 -/* 00010390 0001D120 40 92 04 70 */ bne cr4, .L_00010800 -/* 00010394 0001D124 81 3F 00 94 */ lwz r9, 0x94(r31) -/* 00010398 0001D128 38 00 00 00 */ li r0, 0x0 -/* 0001039C 0001D12C C0 09 00 08 */ lfs f0, 0x8(r9) -/* 000103A0 0001D130 C1 A9 00 0C */ lfs f13, 0xc(r9) -/* 000103A4 0001D134 C1 89 00 34 */ lfs f12, 0x34(r9) -/* 000103A8 0001D138 C1 69 00 38 */ lfs f11, 0x38(r9) -/* 000103AC 0001D13C C1 49 00 60 */ lfs f10, 0x60(r9) -/* 000103B0 0001D140 C1 29 00 64 */ lfs f9, 0x64(r9) -/* 000103B4 0001D144 D0 09 00 00 */ stfs f0, 0x0(r9) -/* 000103B8 0001D148 D1 29 00 5C */ stfs f9, 0x5c(r9) -/* 000103BC 0001D14C D1 A9 00 04 */ stfs f13, 0x4(r9) -/* 000103C0 0001D150 D1 89 00 2C */ stfs f12, 0x2c(r9) -/* 000103C4 0001D154 D1 69 00 30 */ stfs f11, 0x30(r9) -/* 000103C8 0001D158 D1 49 00 58 */ stfs f10, 0x58(r9) -/* 000103CC 0001D15C B0 09 00 80 */ sth r0, 0x80(r9) -/* 000103D0 0001D160 B0 09 00 28 */ sth r0, 0x28(r9) -/* 000103D4 0001D164 B0 09 00 54 */ sth r0, 0x54(r9) -/* 000103D8 0001D168 81 7F 00 84 */ lwz r11, 0x84(r31) -/* 000103DC 0001D16C C0 0B 00 08 */ lfs f0, 0x8(r11) -/* 000103E0 0001D170 C1 AB 00 0C */ lfs f13, 0xc(r11) -/* 000103E4 0001D174 D0 0B 00 00 */ stfs f0, 0x0(r11) -/* 000103E8 0001D178 D1 AB 00 04 */ stfs f13, 0x4(r11) -/* 000103EC 0001D17C B0 0B 00 28 */ sth r0, 0x28(r11) -/* 000103F0 0001D180 81 3F 00 88 */ lwz r9, 0x88(r31) -/* 000103F4 0001D184 C0 09 00 08 */ lfs f0, 0x8(r9) -/* 000103F8 0001D188 C1 A9 00 0C */ lfs f13, 0xc(r9) -/* 000103FC 0001D18C C1 89 00 34 */ lfs f12, 0x34(r9) -/* 00010400 0001D190 C1 69 00 38 */ lfs f11, 0x38(r9) -/* 00010404 0001D194 C1 49 00 60 */ lfs f10, 0x60(r9) -/* 00010408 0001D198 D0 09 00 00 */ stfs f0, 0x0(r9) -/* 0001040C 0001D19C D1 A9 00 04 */ stfs f13, 0x4(r9) -/* 00010410 0001D1A0 D1 89 00 2C */ stfs f12, 0x2c(r9) -/* 00010414 0001D1A4 D1 69 00 30 */ stfs f11, 0x30(r9) -/* 00010418 0001D1A8 B0 09 00 28 */ sth r0, 0x28(r9) -/* 0001041C 0001D1AC B0 09 00 54 */ sth r0, 0x54(r9) -/* 00010420 0001D1B0 D1 49 00 58 */ stfs f10, 0x58(r9) -/* 00010424 0001D1B4 C0 09 00 64 */ lfs f0, 0x64(r9) -/* 00010428 0001D1B8 B0 09 00 80 */ sth r0, 0x80(r9) -/* 0001042C 0001D1BC D0 09 00 5C */ stfs f0, 0x5c(r9) -/* 00010430 0001D1C0 81 7F 00 8C */ lwz r11, 0x8c(r31) -/* 00010434 0001D1C4 C0 0B 00 08 */ lfs f0, 0x8(r11) -/* 00010438 0001D1C8 C1 AB 00 0C */ lfs f13, 0xc(r11) -/* 0001043C 0001D1CC C1 8B 00 34 */ lfs f12, 0x34(r11) -/* 00010440 0001D1D0 C1 6B 00 38 */ lfs f11, 0x38(r11) -/* 00010444 0001D1D4 C1 4B 00 60 */ lfs f10, 0x60(r11) -/* 00010448 0001D1D8 C1 2B 00 64 */ lfs f9, 0x64(r11) -/* 0001044C 0001D1DC B0 0B 00 80 */ sth r0, 0x80(r11) -/* 00010450 0001D1E0 D0 0B 00 00 */ stfs f0, 0x0(r11) -/* 00010454 0001D1E4 D1 AB 00 04 */ stfs f13, 0x4(r11) -/* 00010458 0001D1E8 D1 8B 00 2C */ stfs f12, 0x2c(r11) -/* 0001045C 0001D1EC D1 6B 00 30 */ stfs f11, 0x30(r11) -/* 00010460 0001D1F0 D1 4B 00 58 */ stfs f10, 0x58(r11) -/* 00010464 0001D1F4 D1 2B 00 5C */ stfs f9, 0x5c(r11) -/* 00010468 0001D1F8 B0 0B 00 28 */ sth r0, 0x28(r11) -/* 0001046C 0001D1FC B0 0B 00 54 */ sth r0, 0x54(r11) -/* 00010470 0001D200 80 1F 00 A8 */ lwz r0, 0xa8(r31) -/* 00010474 0001D204 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00010478 0001D208 41 82 04 80 */ beq .L_000108F8 -/* 0001047C 0001D20C 48 00 00 01 */ bl FlushAccumulationBuffer__Fv -/* 00010480 0001D210 80 01 01 14 */ lwz r0, 0x114(r1) -/* 00010484 0001D214 81 81 00 EC */ lwz r12, 0xec(r1) -/* 00010488 0001D218 7C 08 03 A6 */ mtlr r0 -/* 0001048C 0001D21C BB 41 00 F0 */ lmw r26, 0xf0(r1) -/* 00010490 0001D220 E3 E1 01 08 */ psq_l f31, 0x108(r1), 0, qr0 -/* 00010494 0001D224 7D 80 81 20 */ mtcrf 8, r12 -/* 00010498 0001D228 38 21 01 10 */ addi r1, r1, 0x110 -/* 0001049C 0001D22C 4E 80 00 20 */ blr -.endfn SetDesired__16CubicCameraMoverP8bMatrix4P3POVP12CubicPovDatab - -# .text:0x104A0 | size: 0x1018 -.fn Update__16CubicCameraMoverf, global -/* 000104A0 0001D230 94 21 FD D8 */ stwu r1, -0x228(r1) -/* 000104A4 0001D234 7C 08 02 A6 */ mflr r0 -/* 000104A8 0001D238 F3 01 01 E8 */ psq_st f24, 0x1e8(r1), 0, qr0 -/* 000104AC 0001D23C F3 21 01 F0 */ psq_st f25, 0x1f0(r1), 0, qr0 -/* 000104B0 0001D240 F3 41 01 F8 */ psq_st f26, 0x1f8(r1), 0, qr0 -/* 000104B4 0001D244 F3 61 02 00 */ psq_st f27, 0x200(r1), 0, qr0 -/* 000104B8 0001D248 F3 81 02 08 */ psq_st f28, 0x208(r1), 0, qr0 -/* 000104BC 0001D24C F3 A1 02 10 */ psq_st f29, 0x210(r1), 0, qr0 -/* 000104C0 0001D250 F3 C1 02 18 */ psq_st f30, 0x218(r1), 0, qr0 -/* 000104C4 0001D254 F3 E1 02 20 */ psq_st f31, 0x220(r1), 0, qr0 -/* 000104C8 0001D258 BF 01 01 C8 */ stmw r24, 0x1c8(r1) -/* 000104CC 0001D25C 90 01 02 2C */ stw r0, 0x22c(r1) -/* 000104D0 0001D260 7C 7F 1B 78 */ mr r31, r3 -/* 000104D4 0001D264 FF 60 08 90 */ fmr f27, f1 -.L_000104D8: -/* 000104D8 0001D268 3C 60 00 00 */ lis r3, TheGameFlowManager@ha -/* 000104DC 0001D26C 38 63 00 00 */ addi r3, r3, TheGameFlowManager@l -/* 000104E0 0001D270 48 00 00 01 */ bl IsPaused__15GameFlowManager -/* 000104E4 0001D274 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000104E8 0001D278 41 82 04 F8 */ beq .L_000109E0 -/* 000104EC 0001D27C 80 1F 00 B0 */ lwz r0, 0xb0(r31) -/* 000104F0 0001D280 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000104F4 0001D284 41 82 14 84 */ beq .L_00011978 -/* 000104F8 0001D288 3D 20 00 00 */ lis r9, .rodata+0x9B8@ha -/* 000104FC 0001D28C C0 1F 00 C0 */ lfs f0, 0xc0(r31) -/* 00010500 0001D290 C3 E9 09 B8 */ lfs f31, .rodata+0x9B8@l(r9) -/* 00010504 0001D294 38 00 00 00 */ li r0, 0x0 -/* 00010508 0001D298 90 1F 00 B0 */ stw r0, 0xb0(r31) -/* 0001050C 0001D29C FC 00 F8 00 */ fcmpu cr0, f0, f31 -/* 00010510 0001D2A0 4C 62 03 82 */ cror un, eq, lt -/* 00010514 0001D2A4 41 83 05 20 */ bso .L_00010A34 -/* 00010518 0001D2A8 EC 00 D8 28 */ fsubs f0, f0, f27 -/* 0001051C 0001D2AC D0 1F 00 C0 */ stfs f0, 0xc0(r31) -/* 00010520 0001D2B0 80 1F 00 98 */ lwz r0, 0x98(r31) -/* 00010524 0001D2B4 3F 00 00 00 */ lis r24, .rodata+0x9C0@ha -/* 00010528 0001D2B8 80 7F 00 80 */ lwz r3, 0x80(r31) -/* 0001052C 0001D2BC 7C 04 03 78 */ mr r4, r0 -/* 00010530 0001D2C0 90 1F 00 9C */ stw r0, 0x9c(r31) -/* 00010534 0001D2C4 48 00 14 45 */ bl .L_00011978 -/* 00010538 0001D2C8 80 1F 00 9C */ lwz r0, 0x9c(r31) -.L_0001053C: -/* 0001053C 0001D2CC 7C 7A 1B 78 */ mr r26, r3 -/* 00010540 0001D2D0 81 3F 00 80 */ lwz r9, 0x80(r31) -/* 00010544 0001D2D4 3D 40 00 00 */ lis r10, .rodata+0x9BC@ha -/* 00010548 0001D2D8 1C 60 00 14 */ mulli r3, r0, 0x14 -/* 0001054C 0001D2DC C1 AA 09 BC */ lfs f13, .rodata+0x9BC@l(r10) -/* 00010550 0001D2E0 C0 09 00 10 */ lfs f0, 0x10(r9) -/* 00010554 0001D2E4 3D 60 00 00 */ lis r11, aCubicPovTables@ha -/* 00010558 0001D2E8 39 6B 00 00 */ addi r11, r11, aCubicPovTables@l -/* 0001055C 0001D2EC 3D 40 00 00 */ lis r10, .rodata+0x9C0@ha -/* 00010560 0001D2F0 C1 2A 09 C0 */ lfs f9, .rodata+0x9C0@l(r10) -/* 00010564 0001D2F4 EC 00 03 72 */ fmuls f0, f0, f13 -/* 00010568 0001D2F8 7C 83 58 6E */ lwzux r4, r3, r11 -/* 0001056C 0001D2FC FC 00 F8 2E */ fsel f0, f0, f0, f31 -/* 00010570 0001D300 ED A9 00 28 */ fsubs f13, f9, f0 -/* 00010574 0001D304 C3 29 00 A4 */ lfs f25, 0xa4(r9) -/* 00010578 0001D308 C1 63 00 04 */ lfs f11, 0x4(r3) -/* 0001057C 0001D30C FD AD 48 2E */ fsel f13, f13, f0, f9 -/* 00010580 0001D310 C1 83 00 0C */ lfs f12, 0xc(r3) -/* 00010584 0001D314 39 01 00 08 */ addi r8, r1, 0x8 -.L_00010588: -/* 00010588 0001D318 ED AD 58 28 */ fsubs f13, f13, f11 -/* 0001058C 0001D31C C3 09 00 A8 */ lfs f24, 0xa8(r9) -/* 00010590 0001D320 EC 2C 03 72 */ fmuls f1, f12, f13 -/* 00010594 0001D324 FC 00 08 90 */ fmr f0, f1 -/* 00010598 0001D328 FD 40 00 1E */ fctiwz f10, f0 -/* 0001059C 0001D32C D9 41 01 C0 */ stfd f10, 0x1c0(r1) -/* 000105A0 0001D330 80 C1 01 C4 */ lwz r6, 0x1c4(r1) -/* 000105A4 0001D334 2C 06 00 00 */ cmpwi r6, 0x0 -/* 000105A8 0001D338 40 80 05 C0 */ bge .L_00010B68 -.L_000105AC: -/* 000105AC 0001D33C 80 83 00 10 */ lwz r4, 0x10(r3) -/* 000105B0 0001D340 38 A0 00 B0 */ li r5, 0xb0 -/* 000105B4 0001D344 7D 03 43 78 */ mr r3, r8 -/* 000105B8 0001D348 48 00 00 01 */ bl bMemCpy -/* 000105BC 0001D34C 48 01 06 40 */ b .text+0x10640 -/* 000105C0 0001D350 38 04 FF FF */ subi r0, r4, 0x1 -/* 000105C4 0001D354 7C 06 00 00 */ cmpw r6, r0 -/* 000105C8 0001D358 41 80 05 EC */ blt .L_00010BB4 -/* 000105CC 0001D35C 1C 84 00 B0 */ mulli r4, r4, 0xb0 -/* 000105D0 0001D360 80 03 00 10 */ lwz r0, 0x10(r3) -/* 000105D4 0001D364 7D 03 43 78 */ mr r3, r8 -/* 000105D8 0001D368 38 A0 00 B0 */ li r5, 0xb0 -/* 000105DC 0001D36C 38 84 FF 50 */ subi r4, r4, 0xb0 -/* 000105E0 0001D370 7C 80 22 14 */ add r4, r0, r4 -/* 000105E4 0001D374 48 00 00 01 */ bl bMemCpy -/* 000105E8 0001D378 48 01 06 40 */ b .text+0x10640 -/* 000105EC 0001D37C 6C C0 80 00 */ xoris r0, r6, 0x8000 -/* 000105F0 0001D380 90 01 01 C4 */ stw r0, 0x1c4(r1) -/* 000105F4 0001D384 3D 60 43 30 */ lis r11, 0x4330 -/* 000105F8 0001D388 3D 40 00 00 */ lis r10, .rodata+0x9C8@ha -/* 000105FC 0001D38C 91 61 01 C0 */ stw r11, 0x1c0(r1) -/* 00010600 0001D390 C9 AA 09 C8 */ lfd f13, .rodata+0x9C8@l(r10) -/* 00010604 0001D394 C8 01 01 C0 */ lfd f0, 0x1c0(r1) -/* 00010608 0001D398 FC 00 68 28 */ fsub f0, f0, f13 -/* 0001060C 0001D39C FC 00 00 18 */ frsp f0, f0 -/* 00010610 0001D3A0 FC 00 08 00 */ fcmpu cr0, f0, f1 -/* 00010614 0001D3A4 4C 62 03 82 */ cror un, eq, lt -/* 00010618 0001D3A8 41 83 06 20 */ bso .L_00010C38 -/* 0001061C 0001D3AC EC 00 48 28 */ fsubs f0, f0, f9 -/* 00010620 0001D3B0 1C C6 00 B0 */ mulli r6, r6, 0xb0 -/* 00010624 0001D3B4 80 03 00 10 */ lwz r0, 0x10(r3) -/* 00010628 0001D3B8 EC 21 00 28 */ fsubs f1, f1, f0 -/* 0001062C 0001D3BC 7D 04 43 78 */ mr r4, r8 -/* 00010630 0001D3C0 38 A6 00 B0 */ addi r5, r6, 0xb0 -/* 00010634 0001D3C4 7C C0 32 14 */ add r6, r0, r6 -/* 00010638 0001D3C8 7C A0 2A 14 */ add r5, r0, r5 -/* 0001063C 0001D3CC 48 00 EE D9 */ bl .text+0xEED8 -/* 00010640 0001D3D0 3D 20 00 00 */ lis r9, theRaceParameters+0x4C@ha -/* 00010644 0001D3D4 39 60 00 00 */ li r11, 0x0 -/* 00010648 0001D3D8 80 09 00 4C */ lwz r0, theRaceParameters+0x4C@l(r9) -/* 0001064C 0001D3DC 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00010650 0001D3E0 40 82 06 64 */ bne .L_00010CB4 -/* 00010654 0001D3E4 3D 20 00 00 */ lis r9, g_tweakIsDriftRace@ha -/* 00010658 0001D3E8 80 09 00 00 */ lwz r0, g_tweakIsDriftRace@l(r9) -.L_0001065C: -/* 0001065C 0001D3EC 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00010660 0001D3F0 41 82 06 68 */ beq .L_00010CC8 -/* 00010664 0001D3F4 39 60 00 01 */ li r11, 0x1 -/* 00010668 0001D3F8 2C 0B 00 00 */ cmpwi r11, 0x0 -.L_0001066C: -/* 0001066C 0001D3FC 40 82 06 A0 */ bne .L_00010D0C -/* 00010670 0001D400 3D 20 00 00 */ lis r9, theRaceParameters+0x50@ha -.L_00010674: -/* 00010674 0001D404 39 60 00 00 */ li r11, 0x0 -/* 00010678 0001D408 80 09 00 50 */ lwz r0, theRaceParameters+0x50@l(r9) -.L_0001067C: -/* 0001067C 0001D40C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00010680 0001D410 40 82 06 94 */ bne .L_00010D14 -/* 00010684 0001D414 3D 20 00 00 */ lis r9, g_tweakIsBurnout@ha -/* 00010688 0001D418 80 09 00 00 */ lwz r0, g_tweakIsBurnout@l(r9) -/* 0001068C 0001D41C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00010690 0001D420 41 82 06 98 */ beq .L_00010D28 -/* 00010694 0001D424 39 60 00 01 */ li r11, 0x1 -/* 00010698 0001D428 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0001069C 0001D42C 41 82 06 C0 */ beq .L_00010D5C -/* 000106A0 0001D430 3D 20 00 00 */ lis r9, .rodata+0x9B8@ha -.L_000106A4: -/* 000106A4 0001D434 C0 09 09 B8 */ lfs f0, .rodata+0x9B8@l(r9) -/* 000106A8 0001D438 D0 01 00 50 */ stfs f0, 0x50(r1) -/* 000106AC 0001D43C D0 01 00 B8 */ stfs f0, 0xb8(r1) -/* 000106B0 0001D440 D0 01 00 BC */ stfs f0, 0xbc(r1) -/* 000106B4 0001D444 D0 01 00 C0 */ stfs f0, 0xc0(r1) -/* 000106B8 0001D448 D0 01 00 48 */ stfs f0, 0x48(r1) -/* 000106BC 0001D44C D0 01 00 4C */ stfs f0, 0x4c(r1) -/* 000106C0 0001D450 3D 20 00 00 */ lis r9, .rodata+0x9B8@ha -/* 000106C4 0001D454 C0 1F 00 C0 */ lfs f0, 0xc0(r31) -/* 000106C8 0001D458 C3 E9 09 B8 */ lfs f31, .rodata+0x9B8@l(r9) -/* 000106CC 0001D45C 38 81 00 B8 */ addi r4, r1, 0xb8 -/* 000106D0 0001D460 FC 00 F8 00 */ fcmpu cr0, f0, f31 -/* 000106D4 0001D464 D3 E1 00 B8 */ stfs f31, 0xb8(r1) -/* 000106D8 0001D468 D3 E1 00 BC */ stfs f31, 0xbc(r1) -/* 000106DC 0001D46C D3 E1 00 C0 */ stfs f31, 0xc0(r1) -/* 000106E0 0001D470 41 81 06 EC */ bgt .L_00010DCC -/* 000106E4 0001D474 7F E3 FB 78 */ mr r3, r31 -/* 000106E8 0001D478 48 00 42 45 */ bl .L_0001492C -/* 000106EC 0001D47C 80 9F 00 E4 */ lwz r4, 0xe4(r31) -/* 000106F0 0001D480 89 24 00 02 */ lbz r9, 0x2(r4) -.L_000106F4: -/* 000106F4 0001D484 88 04 00 01 */ lbz r0, 0x1(r4) -/* 000106F8 0001D488 7C 09 00 40 */ cmplw r9, r0 -.L_000106FC: -/* 000106FC 0001D48C 40 80 07 08 */ bge .L_00010E04 -/* 00010700 0001D490 38 09 00 01 */ addi r0, r9, 0x1 -/* 00010704 0001D494 98 04 00 02 */ stb r0, 0x2(r4) -/* 00010708 0001D498 C1 A4 00 0C */ lfs f13, 0xc(r4) -/* 0001070C 0001D49C C1 84 00 10 */ lfs f12, 0x10(r4) -/* 00010710 0001D4A0 3C A0 43 30 */ lis r5, 0x4330 -/* 00010714 0001D4A4 C0 04 00 14 */ lfs f0, 0x14(r4) -/* 00010718 0001D4A8 3C E0 00 00 */ lis r7, .rodata+0x9C8@ha -/* 0001071C 0001D4AC C1 41 00 B8 */ lfs f10, 0xb8(r1) -.L_00010720: -/* 00010720 0001D4B0 3C C0 00 00 */ lis r6, .rodata+0x9C0@ha -/* 00010724 0001D4B4 C1 61 00 BC */ lfs f11, 0xbc(r1) -/* 00010728 0001D4B8 C1 21 00 C0 */ lfs f9, 0xc0(r1) -/* 0001072C 0001D4BC ED AD 50 2A */ fadds f13, f13, f10 -/* 00010730 0001D4C0 ED 8C 58 2A */ fadds f12, f12, f11 -/* 00010734 0001D4C4 D1 A4 00 0C */ stfs f13, 0xc(r4) -/* 00010738 0001D4C8 EC 00 48 2A */ fadds f0, f0, f9 -/* 0001073C 0001D4CC D1 84 00 10 */ stfs f12, 0x10(r4) -/* 00010740 0001D4D0 D0 04 00 14 */ stfs f0, 0x14(r4) -/* 00010744 0001D4D4 89 24 00 03 */ lbz r9, 0x3(r4) -/* 00010748 0001D4D8 81 44 00 08 */ lwz r10, 0x8(r4) -/* 0001074C 0001D4DC C1 A1 00 B8 */ lfs f13, 0xb8(r1) -/* 00010750 0001D4E0 55 29 20 36 */ slwi r9, r9, 4 -/* 00010754 0001D4E4 C1 81 00 BC */ lfs f12, 0xbc(r1) -/* 00010758 0001D4E8 7D 6A 4A 14 */ add r11, r10, r9 -/* 0001075C 0001D4EC C0 01 00 C0 */ lfs f0, 0xc0(r1) -/* 00010760 0001D4F0 7D AA 4D 2E */ stfsx f13, r10, r9 -/* 00010764 0001D4F4 D0 0B 00 08 */ stfs f0, 0x8(r11) -/* 00010768 0001D4F8 D1 8B 00 04 */ stfs f12, 0x4(r11) -/* 0001076C 0001D4FC C9 47 09 C8 */ lfd f10, .rodata+0x9C8@l(r7) -/* 00010770 0001D500 88 04 00 02 */ lbz r0, 0x2(r4) -.L_00010774: -/* 00010774 0001D504 C1 26 09 C0 */ lfs f9, .rodata+0x9C0@l(r6) -/* 00010778 0001D508 6C 00 80 00 */ xoris r0, r0, 0x8000 -.L_0001077C: -/* 0001077C 0001D50C C1 A4 00 0C */ lfs f13, 0xc(r4) -/* 00010780 0001D510 90 01 01 C4 */ stw r0, 0x1c4(r1) -/* 00010784 0001D514 C1 84 00 10 */ lfs f12, 0x10(r4) -/* 00010788 0001D518 90 A1 01 C0 */ stw r5, 0x1c0(r1) -/* 0001078C 0001D51C C1 64 00 14 */ lfs f11, 0x14(r4) -/* 00010790 0001D520 C8 01 01 C0 */ lfd f0, 0x1c0(r1) -/* 00010794 0001D524 FC 00 50 28 */ fsub f0, f0, f10 -/* 00010798 0001D528 FC 00 00 18 */ frsp f0, f0 -/* 0001079C 0001D52C EC 09 00 24 */ fdivs f0, f9, f0 -/* 000107A0 0001D530 ED 6B 00 32 */ fmuls f11, f11, f0 -/* 000107A4 0001D534 ED AD 00 32 */ fmuls f13, f13, f0 -/* 000107A8 0001D538 D1 61 00 E0 */ stfs f11, 0xe0(r1) -/* 000107AC 0001D53C ED 8C 00 32 */ fmuls f12, f12, f0 -/* 000107B0 0001D540 D1 A1 00 D8 */ stfs f13, 0xd8(r1) -/* 000107B4 0001D544 D1 81 00 DC */ stfs f12, 0xdc(r1) -/* 000107B8 0001D548 D1 A1 00 C8 */ stfs f13, 0xc8(r1) -/* 000107BC 0001D54C D1 81 00 CC */ stfs f12, 0xcc(r1) -/* 000107C0 0001D550 D1 61 00 D0 */ stfs f11, 0xd0(r1) -/* 000107C4 0001D554 D1 A4 00 1C */ stfs f13, 0x1c(r4) -/* 000107C8 0001D558 89 24 00 03 */ lbz r9, 0x3(r4) -/* 000107CC 0001D55C D1 84 00 20 */ stfs f12, 0x20(r4) -/* 000107D0 0001D560 39 29 00 01 */ addi r9, r9, 0x1 -/* 000107D4 0001D564 D1 64 00 24 */ stfs f11, 0x24(r4) -/* 000107D8 0001D568 99 24 00 03 */ stb r9, 0x3(r4) -/* 000107DC 0001D56C 88 04 00 01 */ lbz r0, 0x1(r4) -/* 000107E0 0001D570 55 29 06 3E */ clrlwi r9, r9, 24 -/* 000107E4 0001D574 7C 00 48 40 */ cmplw r0, r9 -/* 000107E8 0001D578 41 81 07 F4 */ bgt .L_00010FDC -/* 000107EC 0001D57C 38 00 00 00 */ li r0, 0x0 -/* 000107F0 0001D580 98 04 00 03 */ stb r0, 0x3(r4) -.L_000107F4: -/* 000107F4 0001D584 C0 01 00 B8 */ lfs f0, 0xb8(r1) -/* 000107F8 0001D588 C1 A1 00 BC */ lfs f13, 0xbc(r1) -.L_000107FC: -/* 000107FC 0001D58C FD 80 02 10 */ fabs f12, f0 -.L_00010800: -/* 00010800 0001D590 FD A0 6A 10 */ fabs f13, f13 -/* 00010804 0001D594 EC 0C 68 28 */ fsubs f0, f12, f13 -/* 00010808 0001D598 FC 00 F8 00 */ fcmpu cr0, f0, f31 -/* 0001080C 0001D59C 4C 62 0B 82 */ cror un, eq, gt -/* 00010810 0001D5A0 41 83 08 18 */ bso .L_00011028 -/* 00010814 0001D5A4 FD 80 68 90 */ fmr f12, f13 -/* 00010818 0001D5A8 3D 20 00 00 */ lis r9, .rodata+0x9D0@ha -/* 0001081C 0001D5AC C0 09 09 D0 */ lfs f0, .rodata+0x9D0@l(r9) -/* 00010820 0001D5B0 FC 0C 00 00 */ fcmpu cr0, f12, f0 -/* 00010824 0001D5B4 41 80 08 54 */ blt .L_00011078 -/* 00010828 0001D5B8 81 3F 00 80 */ lwz r9, 0x80(r31) -/* 0001082C 0001D5BC C1 A9 00 A4 */ lfs f13, 0xa4(r9) -/* 00010830 0001D5C0 FC 0D F8 00 */ fcmpu cr0, f13, f31 -/* 00010834 0001D5C4 4C 62 03 82 */ cror un, eq, lt -/* 00010838 0001D5C8 41 83 08 54 */ bso .L_0001108C -/* 0001083C 0001D5CC C0 1F 00 D4 */ lfs f0, 0xd4(r31) -/* 00010840 0001D5D0 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00010844 0001D5D4 4C 62 0B 82 */ cror un, eq, gt -/* 00010848 0001D5D8 41 83 08 54 */ bso .L_0001109C -/* 0001084C 0001D5DC D1 BF 00 D4 */ stfs f13, 0xd4(r31) -/* 00010850 0001D5E0 D1 3F 00 DC */ stfs f9, 0xdc(r31) -/* 00010854 0001D5E4 81 3F 00 94 */ lwz r9, 0x94(r31) -/* 00010858 0001D5E8 39 41 00 A8 */ addi r10, r1, 0xa8 -/* 0001085C 0001D5EC C3 C1 00 08 */ lfs f30, 0x8(r1) -/* 00010860 0001D5F0 3F 20 00 00 */ lis r25, _6Camera.StopUpdating@ha -/* 00010864 0001D5F4 D3 C9 00 7C */ stfs f30, 0x7c(r9) -/* 00010868 0001D5F8 D3 C9 00 24 */ stfs f30, 0x24(r9) -/* 0001086C 0001D5FC D3 C9 00 50 */ stfs f30, 0x50(r9) -/* 00010870 0001D600 81 7F 00 84 */ lwz r11, 0x84(r31) -/* 00010874 0001D604 D3 CB 00 24 */ stfs f30, 0x24(r11) -/* 00010878 0001D608 81 3F 00 8C */ lwz r9, 0x8c(r31) -/* 0001087C 0001D60C D3 C9 00 7C */ stfs f30, 0x7c(r9) -/* 00010880 0001D610 D3 C9 00 24 */ stfs f30, 0x24(r9) -/* 00010884 0001D614 D3 C9 00 50 */ stfs f30, 0x50(r9) -/* 00010888 0001D618 C1 8A 00 08 */ lfs f12, 0x8(r10) -/* 0001088C 0001D61C 81 7F 00 90 */ lwz r11, 0x90(r31) -/* 00010890 0001D620 C0 01 00 A8 */ lfs f0, 0xa8(r1) -/* 00010894 0001D624 C1 AA 00 04 */ lfs f13, 0x4(r10) -/* 00010898 0001D628 D1 8B 00 7C */ stfs f12, 0x7c(r11) -/* 0001089C 0001D62C D0 0B 00 24 */ stfs f0, 0x24(r11) -/* 000108A0 0001D630 D1 AB 00 50 */ stfs f13, 0x50(r11) -/* 000108A4 0001D634 81 3F 00 88 */ lwz r9, 0x88(r31) -/* 000108A8 0001D638 D3 C9 00 7C */ stfs f30, 0x7c(r9) -/* 000108AC 0001D63C D3 C9 00 24 */ stfs f30, 0x24(r9) -/* 000108B0 0001D640 D3 C9 00 50 */ stfs f30, 0x50(r9) -.L_000108B4: -/* 000108B4 0001D644 80 7F 00 1C */ lwz r3, 0x1c(r31) -/* 000108B8 0001D648 80 9F 00 80 */ lwz r4, 0x80(r31) -.L_000108BC: -/* 000108BC 0001D64C 38 63 00 40 */ addi r3, r3, 0x40 -/* 000108C0 0001D650 38 84 00 18 */ addi r4, r4, 0x18 -/* 000108C4 0001D654 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 -.L_000108C8: -/* 000108C8 0001D658 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha -/* 000108CC 0001D65C 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) -/* 000108D0 0001D660 2C 00 00 00 */ cmpwi r0, 0x0 -.L_000108D4: -/* 000108D4 0001D664 40 82 08 E0 */ bne .L_000111B4 -.L_000108D8: -/* 000108D8 0001D668 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 000108DC 0001D66C D0 29 00 B0 */ stfs f1, 0xb0(r9) -/* 000108E0 0001D670 80 1F 00 AC */ lwz r0, 0xac(r31) -.L_000108E4: -/* 000108E4 0001D674 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000108E8 0001D678 40 82 09 14 */ bne .L_000111FC -/* 000108EC 0001D67C 80 19 00 00 */ lwz r0, _6Camera.StopUpdating@l(r25) -/* 000108F0 0001D680 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000108F4 0001D684 40 82 09 08 */ bne .L_000111FC -.L_000108F8: -/* 000108F8 0001D688 3D 20 00 00 */ lis r9, .rodata+0x9D4@ha -/* 000108FC 0001D68C 81 7F 00 1C */ lwz r11, 0x1c(r31) -/* 00010900 0001D690 C0 09 09 D4 */ lfs f0, .rodata+0x9D4@l(r9) -/* 00010904 0001D694 D0 0B 00 B4 */ stfs f0, 0xb4(r11) -/* 00010908 0001D698 3D 20 00 00 */ lis r9, .rodata+0x9D8@ha -/* 0001090C 0001D69C C3 A9 09 D8 */ lfs f29, .rodata+0x9D8@l(r9) -/* 00010910 0001D6A0 48 01 09 30 */ b .text+0x10930 -/* 00010914 0001D6A4 80 19 00 00 */ lwz r0, _6Camera.StopUpdating@l(r25) -/* 00010918 0001D6A8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0001091C 0001D6AC 40 82 09 48 */ bne .L_00011264 -/* 00010920 0001D6B0 3D 20 00 00 */ lis r9, .rodata+0x9B8@ha -/* 00010924 0001D6B4 81 7F 00 1C */ lwz r11, 0x1c(r31) -/* 00010928 0001D6B8 C0 09 09 B8 */ lfs f0, .rodata+0x9B8@l(r9) -/* 0001092C 0001D6BC D0 0B 00 B4 */ stfs f0, 0xb4(r11) -/* 00010930 0001D6C0 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha -/* 00010934 0001D6C4 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) -/* 00010938 0001D6C8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0001093C 0001D6CC 40 82 09 48 */ bne .L_00011284 -/* 00010940 0001D6D0 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 00010944 0001D6D4 D3 A9 00 B8 */ stfs f29, 0xb8(r9) -/* 00010948 0001D6D8 80 1F 00 A8 */ lwz r0, 0xa8(r31) -/* 0001094C 0001D6DC 38 81 00 E8 */ addi r4, r1, 0xe8 -/* 00010950 0001D6E0 38 E0 00 01 */ li r7, 0x1 -/* 00010954 0001D6E4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00010958 0001D6E8 40 82 09 60 */ bne .L_000112B8 -/* 0001095C 0001D6EC 38 E0 00 00 */ li r7, 0x0 -/* 00010960 0001D6F0 7F E3 FB 78 */ mr r3, r31 -/* 00010964 0001D6F4 7F 45 D3 78 */ mr r5, r26 -/* 00010968 0001D6F8 38 C1 00 08 */ addi r6, r1, 0x8 -/* 0001096C 0001D6FC 48 00 FE B5 */ bl .text+0xFEB4 -/* 00010970 0001D700 80 1F 00 A4 */ lwz r0, 0xa4(r31) -/* 00010974 0001D704 39 20 00 00 */ li r9, 0x0 -/* 00010978 0001D708 3D 60 00 00 */ lis r11, .rodata+0x9C0@ha -.L_0001097C: -/* 0001097C 0001D70C 91 3F 00 A8 */ stw r9, 0xa8(r31) -/* 00010980 0001D710 C3 4B 09 C0 */ lfs f26, .rodata+0x9C0@l(r11) -/* 00010984 0001D714 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00010988 0001D718 41 82 09 94 */ beq .L_0001131C -/* 0001098C 0001D71C 3D 20 00 00 */ lis r9, .rodata+0x9DC@ha -/* 00010990 0001D720 C3 49 09 DC */ lfs f26, .rodata+0x9DC@l(r9) -/* 00010994 0001D724 A8 7A 00 00 */ lha r3, 0x0(r26) -/* 00010998 0001D728 48 00 0F 8D */ bl .L_00011924 -/* 0001099C 0001D72C 81 3F 00 94 */ lwz r9, 0x94(r31) -/* 000109A0 0001D730 7C 7B 1B 79 */ mr. r27, r3 -/* 000109A4 0001D734 C3 F8 09 C0 */ lfs f31, .rodata+0x9C0@l(r24) -/* 000109A8 0001D738 C0 09 00 00 */ lfs f0, 0x0(r9) -/* 000109AC 0001D73C D0 01 00 D8 */ stfs f0, 0xd8(r1) -/* 000109B0 0001D740 C1 A9 00 2C */ lfs f13, 0x2c(r9) -/* 000109B4 0001D744 D3 E1 00 E0 */ stfs f31, 0xe0(r1) -/* 000109B8 0001D748 D1 A1 00 DC */ stfs f13, 0xdc(r1) -/* 000109BC 0001D74C 40 82 09 DC */ bne .L_00011398 -/* 000109C0 0001D750 81 3F 00 80 */ lwz r9, 0x80(r31) -/* 000109C4 0001D754 C0 09 00 58 */ lfs f0, 0x58(r9) -/* 000109C8 0001D758 D0 01 00 D8 */ stfs f0, 0xd8(r1) -/* 000109CC 0001D75C C1 A9 00 5C */ lfs f13, 0x5c(r9) -/* 000109D0 0001D760 D1 A1 00 DC */ stfs f13, 0xdc(r1) -/* 000109D4 0001D764 C0 09 00 60 */ lfs f0, 0x60(r9) -/* 000109D8 0001D768 D0 01 00 E0 */ stfs f0, 0xe0(r1) -/* 000109DC 0001D76C 81 3F 00 88 */ lwz r9, 0x88(r31) -.L_000109E0: -/* 000109E0 0001D770 3D 40 00 00 */ lis r10, .rodata+0x9B8@ha -/* 000109E4 0001D774 81 7F 00 8C */ lwz r11, 0x8c(r31) -/* 000109E8 0001D778 C0 09 00 00 */ lfs f0, 0x0(r9) -/* 000109EC 0001D77C C1 A9 00 2C */ lfs f13, 0x2c(r9) -/* 000109F0 0001D780 C1 89 00 58 */ lfs f12, 0x58(r9) -/* 000109F4 0001D784 EC 1A 00 32 */ fmuls f0, f26, f0 -/* 000109F8 0001D788 ED BA 03 72 */ fmuls f13, f26, f13 -/* 000109FC 0001D78C D0 01 01 28 */ stfs f0, 0x128(r1) -/* 00010A00 0001D790 D1 A1 01 2C */ stfs f13, 0x12c(r1) -/* 00010A04 0001D794 D1 81 01 30 */ stfs f12, 0x130(r1) -/* 00010A08 0001D798 C1 9F 00 D4 */ lfs f12, 0xd4(r31) -/* 00010A0C 0001D79C C0 0B 00 00 */ lfs f0, 0x0(r11) -/* 00010A10 0001D7A0 C1 AB 00 2C */ lfs f13, 0x2c(r11) -/* 00010A14 0001D7A4 C1 6B 00 58 */ lfs f11, 0x58(r11) -/* 00010A18 0001D7A8 EC 1A 00 32 */ fmuls f0, f26, f0 -/* 00010A1C 0001D7AC C0 2A 09 B8 */ lfs f1, .rodata+0x9B8@l(r10) -/* 00010A20 0001D7B0 ED BA 03 72 */ fmuls f13, f26, f13 -/* 00010A24 0001D7B4 D0 01 01 38 */ stfs f0, 0x138(r1) -.L_00010A28: -/* 00010A28 0001D7B8 D1 A1 01 3C */ stfs f13, 0x13c(r1) -/* 00010A2C 0001D7BC FC 0C 08 00 */ fcmpu cr0, f12, f1 -/* 00010A30 0001D7C0 D1 61 01 40 */ stfs f11, 0x140(r1) -.L_00010A34: -/* 00010A34 0001D7C4 4C 62 03 82 */ cror un, eq, lt -.L_00010A38: -/* 00010A38 0001D7C8 41 83 0B A0 */ bso .L_000115D8 -/* 00010A3C 0001D7CC C0 1F 00 DC */ lfs f0, 0xdc(r31) -/* 00010A40 0001D7D0 FC 00 08 00 */ fcmpu cr0, f0, f1 -.L_00010A44: -/* 00010A44 0001D7D4 4C 62 03 82 */ cror un, eq, lt -/* 00010A48 0001D7D8 41 83 0B 94 */ bso .L_000115DC -/* 00010A4C 0001D7DC 3D 20 00 00 */ lis r9, CameraImpcatCurveH@ha -/* 00010A50 0001D7E0 3B A1 01 48 */ addi r29, r1, 0x148 -/* 00010A54 0001D7E4 38 00 00 05 */ li r0, 0x5 -/* 00010A58 0001D7E8 3B C9 00 00 */ addi r30, r9, CameraImpcatCurveH@l -/* 00010A5C 0001D7EC 90 01 01 48 */ stw r0, 0x148(r1) -/* 00010A60 0001D7F0 7F A3 EB 78 */ mr r3, r29 -/* 00010A64 0001D7F4 FC 40 F8 90 */ fmr f2, f31 -/* 00010A68 0001D7F8 48 00 00 01 */ bl SetMinMax__9TableBaseff -/* 00010A6C 0001D7FC C1 BF 00 DC */ lfs f13, 0xdc(r31) -/* 00010A70 0001D800 C0 01 01 4C */ lfs f0, 0x14c(r1) -/* 00010A74 0001D804 39 01 01 B0 */ addi r8, r1, 0x1b0 -/* 00010A78 0001D808 C1 81 01 54 */ lfs f12, 0x154(r1) -/* 00010A7C 0001D80C ED AD 00 28 */ fsubs f13, f13, f0 -/* 00010A80 0001D810 80 81 01 48 */ lwz r4, 0x148(r1) -/* 00010A84 0001D814 EC 2C 03 72 */ fmuls f1, f12, f13 -/* 00010A88 0001D818 93 C1 01 58 */ stw r30, 0x158(r1) -/* 00010A8C 0001D81C FC 00 08 90 */ fmr f0, f1 -/* 00010A90 0001D820 FD 60 00 1E */ fctiwz f11, f0 -/* 00010A94 0001D824 D9 61 01 C0 */ stfd f11, 0x1c0(r1) -/* 00010A98 0001D828 80 C1 01 C4 */ lwz r6, 0x1c4(r1) -/* 00010A9C 0001D82C 2C 06 00 00 */ cmpwi r6, 0x0 -/* 00010AA0 0001D830 40 80 0A B8 */ bge .L_00011558 -/* 00010AA4 0001D834 7D 03 43 78 */ mr r3, r8 -/* 00010AA8 0001D838 7F C4 F3 78 */ mr r4, r30 -/* 00010AAC 0001D83C 38 A0 00 04 */ li r5, 0x4 -/* 00010AB0 0001D840 48 00 00 01 */ bl bMemCpy -/* 00010AB4 0001D844 48 01 0B 34 */ b .text+0x10B34 -/* 00010AB8 0001D848 38 04 FF FF */ subi r0, r4, 0x1 -/* 00010ABC 0001D84C 7C 06 00 00 */ cmpw r6, r0 -.L_00010AC0: -/* 00010AC0 0001D850 41 80 0A E0 */ blt .L_000115A0 -/* 00010AC4 0001D854 54 84 10 3A */ slwi r4, r4, 2 -.L_00010AC8: -/* 00010AC8 0001D858 7D 03 43 78 */ mr r3, r8 -/* 00010ACC 0001D85C 38 84 FF FC */ subi r4, r4, 0x4 -/* 00010AD0 0001D860 38 A0 00 04 */ li r5, 0x4 -/* 00010AD4 0001D864 7C 84 F2 14 */ add r4, r4, r30 -/* 00010AD8 0001D868 48 00 00 01 */ bl bMemCpy -/* 00010ADC 0001D86C 48 01 0B 34 */ b .text+0x10B34 -/* 00010AE0 0001D870 6C C0 80 00 */ xoris r0, r6, 0x8000 -/* 00010AE4 0001D874 90 01 01 C4 */ stw r0, 0x1c4(r1) -/* 00010AE8 0001D878 3D 60 43 30 */ lis r11, 0x4330 -/* 00010AEC 0001D87C 3D 40 00 00 */ lis r10, .rodata+0x9C8@ha -/* 00010AF0 0001D880 91 61 01 C0 */ stw r11, 0x1c0(r1) -/* 00010AF4 0001D884 C9 AA 09 C8 */ lfd f13, .rodata+0x9C8@l(r10) -/* 00010AF8 0001D888 C8 01 01 C0 */ lfd f0, 0x1c0(r1) -/* 00010AFC 0001D88C FC 00 68 28 */ fsub f0, f0, f13 -.L_00010B00: -/* 00010B00 0001D890 FC 00 00 18 */ frsp f0, f0 -/* 00010B04 0001D894 FC 00 08 00 */ fcmpu cr0, f0, f1 -/* 00010B08 0001D898 4C 62 03 82 */ cror un, eq, lt -/* 00010B0C 0001D89C 41 83 0B 14 */ bso .L_00011620 -/* 00010B10 0001D8A0 EC 00 F8 28 */ fsubs f0, f0, f31 -/* 00010B14 0001D8A4 54 C6 10 3A */ slwi r6, r6, 2 -/* 00010B18 0001D8A8 EC 21 00 28 */ fsubs f1, f1, f0 -/* 00010B1C 0001D8AC 38 A6 00 04 */ addi r5, r6, 0x4 -/* 00010B20 0001D8B0 7F A3 EB 78 */ mr r3, r29 -/* 00010B24 0001D8B4 7C C6 F2 14 */ add r6, r6, r30 -/* 00010B28 0001D8B8 7D 04 43 78 */ mr r4, r8 -/* 00010B2C 0001D8BC 7C A5 F2 14 */ add r5, r5, r30 -/* 00010B30 0001D8C0 48 00 0F F5 */ bl .L_00011B24 -/* 00010B34 0001D8C4 C1 9F 00 D4 */ lfs f12, 0xd4(r31) -/* 00010B38 0001D8C8 3D 20 00 00 */ lis r9, .rodata+0x9E0@ha -/* 00010B3C 0001D8CC C1 A1 01 B0 */ lfs f13, 0x1b0(r1) -/* 00010B40 0001D8D0 3D 60 00 00 */ lis r11, .rodata+0x9C0@ha -/* 00010B44 0001D8D4 C1 69 09 E0 */ lfs f11, .rodata+0x9E0@l(r9) -/* 00010B48 0001D8D8 3D 40 00 00 */ lis r10, .rodata+0x9B8@ha -/* 00010B4C 0001D8DC ED AD 03 32 */ fmuls f13, f13, f12 -/* 00010B50 0001D8E0 C0 0B 09 C0 */ lfs f0, .rodata+0x9C0@l(r11) -/* 00010B54 0001D8E4 ED AD 02 F2 */ fmuls f13, f13, f11 -/* 00010B58 0001D8E8 C1 81 01 28 */ lfs f12, 0x128(r1) -/* 00010B5C 0001D8EC C1 41 01 38 */ lfs f10, 0x138(r1) -/* 00010B60 0001D8F0 ED 2D 00 2A */ fadds f9, f13, f0 -/* 00010B64 0001D8F4 C1 7F 00 DC */ lfs f11, 0xdc(r31) -.L_00010B68: -/* 00010B68 0001D8F8 EC 00 68 28 */ fsubs f0, f0, f13 -/* 00010B6C 0001D8FC C1 0A 09 B8 */ lfs f8, .rodata+0x9B8@l(r10) -/* 00010B70 0001D900 ED 8C 00 32 */ fmuls f12, f12, f0 -/* 00010B74 0001D904 ED 4A 02 72 */ fmuls f10, f10, f9 -/* 00010B78 0001D908 D1 81 01 28 */ stfs f12, 0x128(r1) -/* 00010B7C 0001D90C ED 6B D8 28 */ fsubs f11, f11, f27 -/* 00010B80 0001D910 D1 41 01 38 */ stfs f10, 0x138(r1) -/* 00010B84 0001D914 D1 A1 01 B0 */ stfs f13, 0x1b0(r1) -/* 00010B88 0001D918 FC 0B 40 00 */ fcmpu cr0, f11, f8 -.L_00010B8C: -/* 00010B8C 0001D91C D1 7F 00 DC */ stfs f11, 0xdc(r31) -/* 00010B90 0001D920 41 81 0B A0 */ bgt .L_00011730 -/* 00010B94 0001D924 3D 20 00 00 */ lis r9, .rodata+0x9B8@ha -/* 00010B98 0001D928 C0 09 09 B8 */ lfs f0, .rodata+0x9B8@l(r9) -/* 00010B9C 0001D92C D0 1F 00 D4 */ stfs f0, 0xd4(r31) -/* 00010BA0 0001D930 3D 20 00 00 */ lis r9, .rodata+0x9B8@ha -/* 00010BA4 0001D934 C0 1F 00 D8 */ lfs f0, 0xd8(r31) -/* 00010BA8 0001D938 C0 29 09 B8 */ lfs f1, .rodata+0x9B8@l(r9) -/* 00010BAC 0001D93C FC 00 08 00 */ fcmpu cr0, f0, f1 -/* 00010BB0 0001D940 4C 62 03 82 */ cror un, eq, lt -.L_00010BB4: -/* 00010BB4 0001D944 41 83 0D 10 */ bso .L_000118C4 -/* 00010BB8 0001D948 C0 1F 00 E0 */ lfs f0, 0xe0(r31) -/* 00010BBC 0001D94C FC 00 08 00 */ fcmpu cr0, f0, f1 -/* 00010BC0 0001D950 4C 62 03 82 */ cror un, eq, lt -/* 00010BC4 0001D954 41 83 0D 04 */ bso .L_000118C8 -/* 00010BC8 0001D958 3D 60 00 00 */ lis r11, .rodata+0x9C0@ha -/* 00010BCC 0001D95C 3D 20 00 00 */ lis r9, CameraImpcatCurveV@ha -/* 00010BD0 0001D960 C3 EB 09 C0 */ lfs f31, .rodata+0x9C0@l(r11) -/* 00010BD4 0001D964 3B A1 01 48 */ addi r29, r1, 0x148 -/* 00010BD8 0001D968 38 00 00 05 */ li r0, 0x5 -/* 00010BDC 0001D96C 3B C9 00 00 */ addi r30, r9, CameraImpcatCurveV@l -/* 00010BE0 0001D970 90 01 01 48 */ stw r0, 0x148(r1) -/* 00010BE4 0001D974 7F A3 EB 78 */ mr r3, r29 -/* 00010BE8 0001D978 FC 40 F8 90 */ fmr f2, f31 -/* 00010BEC 0001D97C 48 00 00 01 */ bl SetMinMax__9TableBaseff -/* 00010BF0 0001D980 C1 BF 00 E0 */ lfs f13, 0xe0(r31) -/* 00010BF4 0001D984 C0 01 01 4C */ lfs f0, 0x14c(r1) -/* 00010BF8 0001D988 39 01 01 B4 */ addi r8, r1, 0x1b4 -/* 00010BFC 0001D98C C1 81 01 54 */ lfs f12, 0x154(r1) -/* 00010C00 0001D990 ED AD 00 28 */ fsubs f13, f13, f0 -/* 00010C04 0001D994 80 81 01 48 */ lwz r4, 0x148(r1) -/* 00010C08 0001D998 EC 2C 03 72 */ fmuls f1, f12, f13 -/* 00010C0C 0001D99C 93 C1 01 58 */ stw r30, 0x158(r1) -/* 00010C10 0001D9A0 FC 00 08 90 */ fmr f0, f1 -/* 00010C14 0001D9A4 FD 60 00 1E */ fctiwz f11, f0 -/* 00010C18 0001D9A8 D9 61 01 C0 */ stfd f11, 0x1c0(r1) -/* 00010C1C 0001D9AC 80 C1 01 C4 */ lwz r6, 0x1c4(r1) -/* 00010C20 0001D9B0 2C 06 00 00 */ cmpwi r6, 0x0 -/* 00010C24 0001D9B4 40 80 0C 3C */ bge .L_00011860 -/* 00010C28 0001D9B8 7D 03 43 78 */ mr r3, r8 -/* 00010C2C 0001D9BC 7F C4 F3 78 */ mr r4, r30 -/* 00010C30 0001D9C0 38 A0 00 04 */ li r5, 0x4 -/* 00010C34 0001D9C4 48 00 00 01 */ bl bMemCpy -.L_00010C38: -/* 00010C38 0001D9C8 48 01 0C B8 */ b .text+0x10CB8 -/* 00010C3C 0001D9CC 38 04 FF FF */ subi r0, r4, 0x1 -/* 00010C40 0001D9D0 7C 06 00 00 */ cmpw r6, r0 -/* 00010C44 0001D9D4 41 80 0C 64 */ blt .L_000118A8 -/* 00010C48 0001D9D8 54 84 10 3A */ slwi r4, r4, 2 -/* 00010C4C 0001D9DC 7D 03 43 78 */ mr r3, r8 -/* 00010C50 0001D9E0 38 84 FF FC */ subi r4, r4, 0x4 -/* 00010C54 0001D9E4 38 A0 00 04 */ li r5, 0x4 -/* 00010C58 0001D9E8 7C 84 F2 14 */ add r4, r4, r30 -/* 00010C5C 0001D9EC 48 00 00 01 */ bl bMemCpy -/* 00010C60 0001D9F0 48 01 0C B8 */ b .text+0x10CB8 -/* 00010C64 0001D9F4 6C C0 80 00 */ xoris r0, r6, 0x8000 -/* 00010C68 0001D9F8 90 01 01 C4 */ stw r0, 0x1c4(r1) -/* 00010C6C 0001D9FC 3D 60 43 30 */ lis r11, 0x4330 -/* 00010C70 0001DA00 3D 40 00 00 */ lis r10, .rodata+0x9C8@ha -/* 00010C74 0001DA04 91 61 01 C0 */ stw r11, 0x1c0(r1) -/* 00010C78 0001DA08 C9 AA 09 C8 */ lfd f13, .rodata+0x9C8@l(r10) -/* 00010C7C 0001DA0C C8 01 01 C0 */ lfd f0, 0x1c0(r1) -/* 00010C80 0001DA10 FC 00 68 28 */ fsub f0, f0, f13 -/* 00010C84 0001DA14 FC 00 00 18 */ frsp f0, f0 -/* 00010C88 0001DA18 FC 00 08 00 */ fcmpu cr0, f0, f1 -/* 00010C8C 0001DA1C 4C 62 03 82 */ cror un, eq, lt -.L_00010C90: -/* 00010C90 0001DA20 41 83 0C 98 */ bso .L_00011928 -/* 00010C94 0001DA24 EC 00 F8 28 */ fsubs f0, f0, f31 -/* 00010C98 0001DA28 54 C6 10 3A */ slwi r6, r6, 2 -/* 00010C9C 0001DA2C EC 21 00 28 */ fsubs f1, f1, f0 -.L_00010CA0: -/* 00010CA0 0001DA30 38 A6 00 04 */ addi r5, r6, 0x4 -/* 00010CA4 0001DA34 7F A3 EB 78 */ mr r3, r29 -/* 00010CA8 0001DA38 7C C6 F2 14 */ add r6, r6, r30 -/* 00010CAC 0001DA3C 7D 04 43 78 */ mr r4, r8 -/* 00010CB0 0001DA40 7C A5 F2 14 */ add r5, r5, r30 -.L_00010CB4: -/* 00010CB4 0001DA44 48 00 0F F5 */ bl .L_00011CA8 -/* 00010CB8 0001DA48 C0 1F 00 D8 */ lfs f0, 0xd8(r31) -/* 00010CBC 0001DA4C 3D 20 00 00 */ lis r9, .rodata+0x9E0@ha -/* 00010CC0 0001DA50 C1 61 01 B4 */ lfs f11, 0x1b4(r1) -/* 00010CC4 0001DA54 3D 60 00 00 */ lis r11, .rodata+0x9C0@ha -.L_00010CC8: -/* 00010CC8 0001DA58 C1 49 09 E0 */ lfs f10, .rodata+0x9E0@l(r9) -/* 00010CCC 0001DA5C 3D 40 00 00 */ lis r10, .rodata+0x9B8@ha -/* 00010CD0 0001DA60 ED 6B 00 32 */ fmuls f11, f11, f0 -/* 00010CD4 0001DA64 C1 AB 09 C0 */ lfs f13, .rodata+0x9C0@l(r11) -/* 00010CD8 0001DA68 C1 81 01 30 */ lfs f12, 0x130(r1) -/* 00010CDC 0001DA6C ED 6B 02 B2 */ fmuls f11, f11, f10 -/* 00010CE0 0001DA70 C0 1F 00 E0 */ lfs f0, 0xe0(r31) -/* 00010CE4 0001DA74 ED AD 58 28 */ fsubs f13, f13, f11 -/* 00010CE8 0001DA78 C1 4A 09 B8 */ lfs f10, .rodata+0x9B8@l(r10) -/* 00010CEC 0001DA7C ED 8C 03 72 */ fmuls f12, f12, f13 -/* 00010CF0 0001DA80 EC 00 D8 28 */ fsubs f0, f0, f27 -/* 00010CF4 0001DA84 D1 81 01 30 */ stfs f12, 0x130(r1) -/* 00010CF8 0001DA88 FC 00 50 00 */ fcmpu cr0, f0, f10 -/* 00010CFC 0001DA8C D0 1F 00 E0 */ stfs f0, 0xe0(r31) -/* 00010D00 0001DA90 41 81 0D 10 */ bgt .L_00011A10 -/* 00010D04 0001DA94 3D 20 00 00 */ lis r9, .rodata+0x9B8@ha -/* 00010D08 0001DA98 C0 09 09 B8 */ lfs f0, .rodata+0x9B8@l(r9) -.L_00010D0C: -/* 00010D0C 0001DA9C D0 1F 00 D8 */ stfs f0, 0xd8(r31) -/* 00010D10 0001DAA0 2C 1B 00 00 */ cmpwi r27, 0x0 -.L_00010D14: -/* 00010D14 0001DAA4 40 82 0E D0 */ bne .L_00011BE4 -/* 00010D18 0001DAA8 3D 20 00 00 */ lis r9, WorldTimer@ha -/* 00010D1C 0001DAAC 80 1F 00 BC */ lwz r0, 0xbc(r31) -.L_00010D20: -/* 00010D20 0001DAB0 81 09 00 00 */ lwz r8, WorldTimer@l(r9) -/* 00010D24 0001DAB4 3F 80 43 30 */ lis r28, 0x4330 -.L_00010D28: -/* 00010D28 0001DAB8 3D 20 00 00 */ lis r9, .rodata+0x9C8@ha -/* 00010D2C 0001DABC 7C 00 40 50 */ subf r0, r0, r8 -/* 00010D30 0001DAC0 CB 89 09 C8 */ lfd f28, .rodata+0x9C8@l(r9) -/* 00010D34 0001DAC4 6C 00 80 00 */ xoris r0, r0, 0x8000 -/* 00010D38 0001DAC8 3D 20 00 00 */ lis r9, .rodata+0x9E4@ha -/* 00010D3C 0001DACC 90 01 01 C4 */ stw r0, 0x1c4(r1) -/* 00010D40 0001DAD0 3D 40 00 00 */ lis r10, .rodata+0x9C0@ha -/* 00010D44 0001DAD4 C1 A9 09 E4 */ lfs f13, .rodata+0x9E4@l(r9) -/* 00010D48 0001DAD8 93 81 01 C0 */ stw r28, 0x1c0(r1) -/* 00010D4C 0001DADC C3 AA 09 C0 */ lfs f29, .rodata+0x9C0@l(r10) -/* 00010D50 0001DAE0 C8 01 01 C0 */ lfd f0, 0x1c0(r1) -/* 00010D54 0001DAE4 FC 00 E0 28 */ fsub f0, f0, f28 -/* 00010D58 0001DAE8 FC 00 00 18 */ frsp f0, f0 -.L_00010D5C: -/* 00010D5C 0001DAEC EF E0 03 72 */ fmuls f31, f0, f13 -/* 00010D60 0001DAF0 FC 1F E8 00 */ fcmpu cr0, f31, f29 -/* 00010D64 0001DAF4 41 80 0D 98 */ blt .L_00011AFC -/* 00010D68 0001DAF8 81 7F 00 80 */ lwz r11, 0x80(r31) -.L_00010D6C: -/* 00010D6C 0001DAFC 3D 20 00 00 */ lis r9, .rodata+0x9E8@ha -/* 00010D70 0001DB00 C1 A9 09 E8 */ lfs f13, .rodata+0x9E8@l(r9) -/* 00010D74 0001DB04 C0 0B 00 10 */ lfs f0, 0x10(r11) -/* 00010D78 0001DB08 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00010D7C 0001DB0C 4C 62 03 82 */ cror un, eq, lt -/* 00010D80 0001DB10 41 83 0E D0 */ bso .L_00011C50 -/* 00010D84 0001DB14 80 0B 00 CC */ lwz r0, 0xcc(r11) -/* 00010D88 0001DB18 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00010D8C 0001DB1C 41 82 0E D0 */ beq .L_00011C5C -/* 00010D90 0001DB20 91 1F 00 BC */ stw r8, 0xbc(r31) -/* 00010D94 0001DB24 48 01 0E D0 */ b .text+0x10ED0 -/* 00010D98 0001DB28 3D 60 00 00 */ lis r11, .rodata+0x9B8@ha -/* 00010D9C 0001DB2C 3D 20 00 00 */ lis r9, CameraGearChangingCurve@ha -/* 00010DA0 0001DB30 C0 2B 09 B8 */ lfs f1, .rodata+0x9B8@l(r11) -/* 00010DA4 0001DB34 3B A1 01 48 */ addi r29, r1, 0x148 -/* 00010DA8 0001DB38 38 00 00 09 */ li r0, 0x9 -/* 00010DAC 0001DB3C 3B C9 00 00 */ addi r30, r9, CameraGearChangingCurve@l -/* 00010DB0 0001DB40 90 01 01 48 */ stw r0, 0x148(r1) -/* 00010DB4 0001DB44 7F A3 EB 78 */ mr r3, r29 -/* 00010DB8 0001DB48 FC 40 E8 90 */ fmr f2, f29 -.L_00010DBC: -/* 00010DBC 0001DB4C 48 00 00 01 */ bl SetMinMax__9TableBaseff -/* 00010DC0 0001DB50 C1 A1 01 4C */ lfs f13, 0x14c(r1) -/* 00010DC4 0001DB54 C1 61 01 54 */ lfs f11, 0x154(r1) -/* 00010DC8 0001DB58 39 61 01 B8 */ addi r11, r1, 0x1b8 -.L_00010DCC: -/* 00010DCC 0001DB5C ED BF 68 28 */ fsubs f13, f31, f13 -/* 00010DD0 0001DB60 80 81 01 48 */ lwz r4, 0x148(r1) -/* 00010DD4 0001DB64 EC 2B 03 72 */ fmuls f1, f11, f13 -/* 00010DD8 0001DB68 93 C1 01 58 */ stw r30, 0x158(r1) -/* 00010DDC 0001DB6C FC 00 08 90 */ fmr f0, f1 -/* 00010DE0 0001DB70 FD 80 00 1E */ fctiwz f12, f0 -/* 00010DE4 0001DB74 D9 81 01 C0 */ stfd f12, 0x1c0(r1) -/* 00010DE8 0001DB78 80 C1 01 C4 */ lwz r6, 0x1c4(r1) -/* 00010DEC 0001DB7C 2C 06 00 00 */ cmpwi r6, 0x0 -/* 00010DF0 0001DB80 40 80 0E 08 */ bge .L_00011BF8 -/* 00010DF4 0001DB84 7D 63 5B 78 */ mr r3, r11 -/* 00010DF8 0001DB88 7F C4 F3 78 */ mr r4, r30 -/* 00010DFC 0001DB8C 38 A0 00 04 */ li r5, 0x4 -/* 00010E00 0001DB90 48 00 00 01 */ bl bMemCpy -.L_00010E04: -/* 00010E04 0001DB94 48 01 0E 78 */ b .text+0x10E78 -/* 00010E08 0001DB98 38 04 FF FF */ subi r0, r4, 0x1 -/* 00010E0C 0001DB9C 7C 06 00 00 */ cmpw r6, r0 -/* 00010E10 0001DBA0 41 80 0E 30 */ blt .L_00011C40 -/* 00010E14 0001DBA4 54 84 10 3A */ slwi r4, r4, 2 -.L_00010E18: -/* 00010E18 0001DBA8 7D 63 5B 78 */ mr r3, r11 -/* 00010E1C 0001DBAC 38 84 FF FC */ subi r4, r4, 0x4 -/* 00010E20 0001DBB0 38 A0 00 04 */ li r5, 0x4 -/* 00010E24 0001DBB4 7C 84 F2 14 */ add r4, r4, r30 -/* 00010E28 0001DBB8 48 00 00 01 */ bl bMemCpy -/* 00010E2C 0001DBBC 48 01 0E 78 */ b .text+0x10E78 -.L_00010E30: -/* 00010E30 0001DBC0 6C C0 80 00 */ xoris r0, r6, 0x8000 -/* 00010E34 0001DBC4 90 01 01 C4 */ stw r0, 0x1c4(r1) -/* 00010E38 0001DBC8 93 81 01 C0 */ stw r28, 0x1c0(r1) -/* 00010E3C 0001DBCC C8 01 01 C0 */ lfd f0, 0x1c0(r1) -/* 00010E40 0001DBD0 FC 00 E0 28 */ fsub f0, f0, f28 -/* 00010E44 0001DBD4 FC 00 00 18 */ frsp f0, f0 -/* 00010E48 0001DBD8 FC 00 08 00 */ fcmpu cr0, f0, f1 -/* 00010E4C 0001DBDC 4C 62 03 82 */ cror un, eq, lt -/* 00010E50 0001DBE0 41 83 0E 58 */ bso .L_00011CA8 -/* 00010E54 0001DBE4 EC 00 E8 28 */ fsubs f0, f0, f29 -/* 00010E58 0001DBE8 54 C6 10 3A */ slwi r6, r6, 2 -/* 00010E5C 0001DBEC EC 21 00 28 */ fsubs f1, f1, f0 -/* 00010E60 0001DBF0 38 A6 00 04 */ addi r5, r6, 0x4 -/* 00010E64 0001DBF4 7F A3 EB 78 */ mr r3, r29 -/* 00010E68 0001DBF8 7C C6 F2 14 */ add r6, r6, r30 -/* 00010E6C 0001DBFC 7D 64 5B 78 */ mr r4, r11 -/* 00010E70 0001DC00 7C A5 F2 14 */ add r5, r5, r30 -.L_00010E74: -/* 00010E74 0001DC04 48 00 0F F5 */ bl .L_00011E68 -/* 00010E78 0001DC08 81 7F 00 80 */ lwz r11, 0x80(r31) -/* 00010E7C 0001DC0C 3D 20 00 00 */ lis r9, .rodata+0x9EC@ha -/* 00010E80 0001DC10 C1 89 09 EC */ lfs f12, .rodata+0x9EC@l(r9) -/* 00010E84 0001DC14 3D 40 00 00 */ lis r10, .rodata+0x9B8@ha -/* 00010E88 0001DC18 C0 0B 00 10 */ lfs f0, 0x10(r11) -/* 00010E8C 0001DC1C 3D 20 00 00 */ lis r9, .rodata+0x9C0@ha -/* 00010E90 0001DC20 C1 69 09 C0 */ lfs f11, .rodata+0x9C0@l(r9) -/* 00010E94 0001DC24 3D 60 00 00 */ lis r11, .rodata+0x9F0@ha -/* 00010E98 0001DC28 EC 00 03 32 */ fmuls f0, f0, f12 -/* 00010E9C 0001DC2C C1 AA 09 B8 */ lfs f13, .rodata+0x9B8@l(r10) -/* 00010EA0 0001DC30 FC 00 68 2E */ fsel f0, f0, f0, f13 -/* 00010EA4 0001DC34 C1 41 01 28 */ lfs f10, 0x128(r1) -/* 00010EA8 0001DC38 ED AB 00 28 */ fsubs f13, f11, f0 -/* 00010EAC 0001DC3C C1 2B 09 F0 */ lfs f9, .rodata+0x9F0@l(r11) -/* 00010EB0 0001DC40 FD AD 58 2E */ fsel f13, f13, f0, f11 -/* 00010EB4 0001DC44 C1 81 01 B8 */ lfs f12, 0x1b8(r1) -/* 00010EB8 0001DC48 ED 6B 68 28 */ fsubs f11, f11, f13 -/* 00010EBC 0001DC4C FC 00 52 10 */ fabs f0, f10 -/* 00010EC0 0001DC50 ED 8C 00 32 */ fmuls f12, f12, f0 -/* 00010EC4 0001DC54 ED 6B 02 72 */ fmuls f11, f11, f9 -/* 00010EC8 0001DC58 ED 8C 52 FA */ fmadds f12, f12, f11, f10 -/* 00010ECC 0001DC5C D1 81 01 28 */ stfs f12, 0x128(r1) -/* 00010ED0 0001DC60 2C 1B 00 00 */ cmpwi r27, 0x0 -/* 00010ED4 0001DC64 3B 80 00 00 */ li r28, 0x0 -/* 00010ED8 0001DC68 40 82 0F 8C */ bne .L_00011E64 -.L_00010EDC: -/* 00010EDC 0001DC6C 3D 20 00 00 */ lis r9, WorldTimer@ha -/* 00010EE0 0001DC70 81 5F 00 B8 */ lwz r10, 0xb8(r31) -/* 00010EE4 0001DC74 80 09 00 00 */ lwz r0, WorldTimer@l(r9) -/* 00010EE8 0001DC78 3C E0 43 30 */ lis r7, 0x4330 -/* 00010EEC 0001DC7C 3D 20 00 00 */ lis r9, .rodata+0x9C8@ha -/* 00010EF0 0001DC80 7C 0A 00 50 */ subf r0, r10, r0 -/* 00010EF4 0001DC84 C9 A9 09 C8 */ lfd f13, .rodata+0x9C8@l(r9) -/* 00010EF8 0001DC88 6C 00 80 00 */ xoris r0, r0, 0x8000 -/* 00010EFC 0001DC8C 3D 20 00 00 */ lis r9, .rodata+0x9E4@ha -/* 00010F00 0001DC90 90 01 01 C4 */ stw r0, 0x1c4(r1) -/* 00010F04 0001DC94 3D 40 00 00 */ lis r10, .rodata+0x9E0@ha -/* 00010F08 0001DC98 C1 29 09 E4 */ lfs f9, .rodata+0x9E4@l(r9) -/* 00010F0C 0001DC9C 3D 00 00 00 */ lis r8, .rodata+0x9B8@ha -/* 00010F10 0001DCA0 90 E1 01 C0 */ stw r7, 0x1c0(r1) -/* 00010F14 0001DCA4 3D 20 00 00 */ lis r9, .rodata+0x9F4@ha -/* 00010F18 0001DCA8 C1 4A 09 E0 */ lfs f10, .rodata+0x9E0@l(r10) -/* 00010F1C 0001DCAC 3C E0 00 00 */ lis r7, .rodata+0x9C0@ha -/* 00010F20 0001DCB0 C8 01 01 C0 */ lfd f0, 0x1c0(r1) -/* 00010F24 0001DCB4 C1 89 09 F4 */ lfs f12, .rodata+0x9F4@l(r9) -/* 00010F28 0001DCB8 FC 00 68 28 */ fsub f0, f0, f13 -/* 00010F2C 0001DCBC C1 08 09 B8 */ lfs f8, .rodata+0x9B8@l(r8) -/* 00010F30 0001DCC0 FC 00 00 18 */ frsp f0, f0 -/* 00010F34 0001DCC4 C1 67 09 C0 */ lfs f11, .rodata+0x9C0@l(r7) -/* 00010F38 0001DCC8 EC 00 02 72 */ fmuls f0, f0, f9 -/* 00010F3C 0001DCCC EC 00 02 B2 */ fmuls f0, f0, f10 -/* 00010F40 0001DCD0 FC 00 40 2E */ fsel f0, f0, f0, f8 -/* 00010F44 0001DCD4 ED AC 00 28 */ fsubs f13, f12, f0 -/* 00010F48 0001DCD8 FD AD 60 2E */ fsel f13, f13, f0, f12 -/* 00010F4C 0001DCDC ED 8C 68 28 */ fsubs f12, f12, f13 -/* 00010F50 0001DCE0 FC 0C 58 00 */ fcmpu cr0, f12, f11 -/* 00010F54 0001DCE4 4C 62 03 82 */ cror un, eq, lt -/* 00010F58 0001DCE8 41 83 0F 68 */ bso .L_00011EC0 -/* 00010F5C 0001DCEC 3D 20 00 00 */ lis r9, .rodata+0x9F8@ha -/* 00010F60 0001DCF0 C0 09 09 F8 */ lfs f0, .rodata+0x9F8@l(r9) -/* 00010F64 0001DCF4 ED 80 60 28 */ fsubs f12, f0, f12 -/* 00010F68 0001DCF8 3D 20 00 00 */ lis r9, .rodata+0x9FC@ha -/* 00010F6C 0001DCFC C1 A1 01 30 */ lfs f13, 0x130(r1) -/* 00010F70 0001DD00 C0 09 09 FC */ lfs f0, .rodata+0x9FC@l(r9) -/* 00010F74 0001DD04 FC 0C 40 00 */ fcmpu cr0, f12, f8 -/* 00010F78 0001DD08 EC 0C 68 3A */ fmadds f0, f12, f0, f13 -/* 00010F7C 0001DD0C D0 01 01 30 */ stfs f0, 0x130(r1) -/* 00010F80 0001DD10 4C 62 03 82 */ cror un, eq, lt -/* 00010F84 0001DD14 41 83 0F 8C */ bso .L_00011F10 -/* 00010F88 0001DD18 3B 80 00 01 */ li r28, 0x1 -/* 00010F8C 0001DD1C 3D 60 00 00 */ lis r11, .rodata+0x9B8@ha -/* 00010F90 0001DD20 81 3F 00 94 */ lwz r9, 0x94(r31) -/* 00010F94 0001DD24 C3 EB 09 B8 */ lfs f31, .rodata+0x9B8@l(r11) -/* 00010F98 0001DD28 EC 19 C0 2A */ fadds f0, f25, f24 -/* 00010F9C 0001DD2C 7F E3 FB 78 */ mr r3, r31 -/* 00010FA0 0001DD30 D3 E9 00 7C */ stfs f31, 0x7c(r9) -/* 00010FA4 0001DD34 D3 E9 00 24 */ stfs f31, 0x24(r9) -/* 00010FA8 0001DD38 D3 E9 00 50 */ stfs f31, 0x50(r9) -/* 00010FAC 0001DD3C 81 7F 00 84 */ lwz r11, 0x84(r31) -/* 00010FB0 0001DD40 D3 EB 00 24 */ stfs f31, 0x24(r11) -/* 00010FB4 0001DD44 81 3F 00 88 */ lwz r9, 0x88(r31) -/* 00010FB8 0001DD48 D3 E9 00 7C */ stfs f31, 0x7c(r9) -/* 00010FBC 0001DD4C D3 E9 00 24 */ stfs f31, 0x24(r9) -/* 00010FC0 0001DD50 D3 E9 00 50 */ stfs f31, 0x50(r9) -/* 00010FC4 0001DD54 81 7F 00 8C */ lwz r11, 0x8c(r31) -/* 00010FC8 0001DD58 D3 EB 00 7C */ stfs f31, 0x7c(r11) -/* 00010FCC 0001DD5C D3 EB 00 24 */ stfs f31, 0x24(r11) -/* 00010FD0 0001DD60 D3 EB 00 50 */ stfs f31, 0x50(r11) -/* 00010FD4 0001DD64 81 3F 00 90 */ lwz r9, 0x90(r31) -/* 00010FD8 0001DD68 D0 09 00 7C */ stfs f0, 0x7c(r9) -.L_00010FDC: -/* 00010FDC 0001DD6C D3 E9 00 24 */ stfs f31, 0x24(r9) -/* 00010FE0 0001DD70 D3 E9 00 50 */ stfs f31, 0x50(r9) -/* 00010FE4 0001DD74 48 00 3F 95 */ bl .L_00014F78 -/* 00010FE8 0001DD78 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00010FEC 0001DD7C 41 82 0F F8 */ beq .L_00011FE4 -/* 00010FF0 0001DD80 C0 01 00 08 */ lfs f0, 0x8(r1) -/* 00010FF4 0001DD84 EF C0 00 2A */ fadds f30, f0, f0 -/* 00010FF8 0001DD88 81 3F 00 88 */ lwz r9, 0x88(r31) -/* 00010FFC 0001DD8C FC 20 D8 90 */ fmr f1, f27 -/* 00011000 0001DD90 FC 40 F8 90 */ fmr f2, f31 -/* 00011004 0001DD94 D3 C9 00 7C */ stfs f30, 0x7c(r9) -/* 00011008 0001DD98 FC 60 F8 90 */ fmr f3, f31 -/* 0001100C 0001DD9C D3 C9 00 24 */ stfs f30, 0x24(r9) -.L_00011010: -/* 00011010 0001DDA0 D3 C9 00 50 */ stfs f30, 0x50(r9) -/* 00011014 0001DDA4 80 7F 00 94 */ lwz r3, 0x94(r31) -/* 00011018 0001DDA8 48 00 00 01 */ bl Update__8tCubic3Dfff -/* 0001101C 0001DDAC 80 7F 00 84 */ lwz r3, 0x84(r31) -/* 00011020 0001DDB0 FC 20 D8 90 */ fmr f1, f27 -/* 00011024 0001DDB4 FC 40 F8 90 */ fmr f2, f31 -.L_00011028: -/* 00011028 0001DDB8 FC 60 F8 90 */ fmr f3, f31 -/* 0001102C 0001DDBC 48 00 00 01 */ bl Update__8tCubic1Dfff -.L_00011030: -/* 00011030 0001DDC0 80 7F 00 88 */ lwz r3, 0x88(r31) -/* 00011034 0001DDC4 FC 20 D8 90 */ fmr f1, f27 -/* 00011038 0001DDC8 FC 40 F8 90 */ fmr f2, f31 -/* 0001103C 0001DDCC FC 60 F8 90 */ fmr f3, f31 -.L_00011040: -/* 00011040 0001DDD0 48 00 00 01 */ bl Update__8tCubic3Dfff -/* 00011044 0001DDD4 80 7F 00 8C */ lwz r3, 0x8c(r31) -/* 00011048 0001DDD8 FC 20 D8 90 */ fmr f1, f27 -/* 0001104C 0001DDDC FC 40 F8 90 */ fmr f2, f31 -/* 00011050 0001DDE0 FC 60 F8 90 */ fmr f3, f31 -/* 00011054 0001DDE4 48 00 00 01 */ bl Update__8tCubic3Dfff -/* 00011058 0001DDE8 80 7F 00 90 */ lwz r3, 0x90(r31) -/* 0001105C 0001DDEC FC 20 D8 90 */ fmr f1, f27 -/* 00011060 0001DDF0 FC 40 F8 90 */ fmr f2, f31 -/* 00011064 0001DDF4 FC 60 F8 90 */ fmr f3, f31 -/* 00011068 0001DDF8 48 00 00 01 */ bl Update__8tCubic3Dfff -/* 0001106C 0001DDFC A8 7A 00 00 */ lha r3, 0x0(r26) -/* 00011070 0001DE00 48 00 0F 8D */ bl .L_00011FFC -/* 00011074 0001DE04 81 3F 00 1C */ lwz r9, 0x1c(r31) -.L_00011078: -/* 00011078 0001DE08 7C 7B 1B 78 */ mr r27, r3 -/* 0001107C 0001DE0C 80 9F 00 80 */ lwz r4, 0x80(r31) -/* 00011080 0001DE10 38 69 00 40 */ addi r3, r9, 0x40 -/* 00011084 0001DE14 38 84 00 18 */ addi r4, r4, 0x18 -/* 00011088 0001DE18 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 -.L_0001108C: -/* 0001108C 0001DE1C 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha -/* 00011090 0001DE20 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) -/* 00011094 0001DE24 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00011098 0001DE28 40 82 10 A4 */ bne .L_0001213C -.L_0001109C: -/* 0001109C 0001DE2C 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 000110A0 0001DE30 D0 29 00 B0 */ stfs f1, 0xb0(r9) -/* 000110A4 0001DE34 80 1F 00 AC */ lwz r0, 0xac(r31) -/* 000110A8 0001DE38 FF A0 F8 90 */ fmr f29, f31 -/* 000110AC 0001DE3C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000110B0 0001DE40 40 82 10 DC */ bne .L_0001218C -/* 000110B4 0001DE44 80 19 00 00 */ lwz r0, _6Camera.StopUpdating@l(r25) -/* 000110B8 0001DE48 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000110BC 0001DE4C 40 82 10 D0 */ bne .L_0001218C -/* 000110C0 0001DE50 3D 20 00 00 */ lis r9, .rodata+0x9D4@ha -/* 000110C4 0001DE54 81 7F 00 1C */ lwz r11, 0x1c(r31) -/* 000110C8 0001DE58 C0 09 09 D4 */ lfs f0, .rodata+0x9D4@l(r9) -/* 000110CC 0001DE5C D0 0B 00 B4 */ stfs f0, 0xb4(r11) -/* 000110D0 0001DE60 3D 20 00 00 */ lis r9, .rodata+0x9D8@ha -/* 000110D4 0001DE64 C3 A9 09 D8 */ lfs f29, .rodata+0x9D8@l(r9) -/* 000110D8 0001DE68 48 01 10 F0 */ b .text+0x110F0 -/* 000110DC 0001DE6C 80 19 00 00 */ lwz r0, _6Camera.StopUpdating@l(r25) -/* 000110E0 0001DE70 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000110E4 0001DE74 40 82 11 08 */ bne .L_000121EC -/* 000110E8 0001DE78 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 000110EC 0001DE7C D3 A9 00 B4 */ stfs f29, 0xb4(r9) -/* 000110F0 0001DE80 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha -/* 000110F4 0001DE84 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) -/* 000110F8 0001DE88 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000110FC 0001DE8C 40 82 11 08 */ bne .L_00012204 -/* 00011100 0001DE90 81 3F 00 1C */ lwz r9, 0x1c(r31) -.L_00011104: -/* 00011104 0001DE94 D3 A9 00 B8 */ stfs f29, 0xb8(r9) -/* 00011108 0001DE98 3D 20 00 00 */ lis r9, _11GRaceStatus.fObj@ha -/* 0001110C 0001DE9C 38 00 00 01 */ li r0, 0x1 -/* 00011110 0001DEA0 80 69 00 00 */ lwz r3, _11GRaceStatus.fObj@l(r9) -/* 00011114 0001DEA4 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00011118 0001DEA8 40 82 11 20 */ bne .L_00012238 -/* 0001111C 0001DEAC 38 00 00 00 */ li r0, 0x0 -/* 00011120 0001DEB0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00011124 0001DEB4 41 82 12 30 */ beq .L_00012354 -/* 00011128 0001DEB8 81 3F 00 80 */ lwz r9, 0x80(r31) -/* 0001112C 0001DEBC 80 09 00 BC */ lwz r0, 0xbc(r9) -/* 00011130 0001DEC0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00011134 0001DEC4 41 82 12 30 */ beq .L_00012364 -/* 00011138 0001DEC8 48 00 00 01 */ bl GetRaceTimeElapsed__C11GRaceStatus -/* 0001113C 0001DECC 3D 20 00 00 */ lis r9, .rodata+0x9B8@ha -/* 00011140 0001DED0 C0 09 09 B8 */ lfs f0, .rodata+0x9B8@l(r9) -/* 00011144 0001DED4 FC 01 00 00 */ fcmpu cr0, f1, f0 -/* 00011148 0001DED8 4C 62 0B 82 */ cror un, eq, gt -/* 0001114C 0001DEDC 41 83 12 30 */ bso .L_0001237C -/* 00011150 0001DEE0 81 7F 00 80 */ lwz r11, 0x80(r31) -/* 00011154 0001DEE4 3D 20 00 00 */ lis r9, .rodata+0x9F0@ha -/* 00011158 0001DEE8 C1 69 09 F0 */ lfs f11, .rodata+0x9F0@l(r9) -/* 0001115C 0001DEEC FD 40 08 50 */ fneg f10, f1 -/* 00011160 0001DEF0 C0 0B 00 00 */ lfs f0, 0x0(r11) -/* 00011164 0001DEF4 38 81 01 A0 */ addi r4, r1, 0x1a0 -/* 00011168 0001DEF8 C1 AB 00 04 */ lfs f13, 0x4(r11) -/* 0001116C 0001DEFC ED 6A 02 F2 */ fmuls f11, f10, f11 -/* 00011170 0001DF00 C1 8B 00 08 */ lfs f12, 0x8(r11) -/* 00011174 0001DF04 ED 00 02 F2 */ fmuls f8, f0, f11 -/* 00011178 0001DF08 ED 2D 02 F2 */ fmuls f9, f13, f11 -/* 0001117C 0001DF0C D0 01 01 48 */ stfs f0, 0x148(r1) -/* 00011180 0001DF10 D1 A1 01 4C */ stfs f13, 0x14c(r1) -/* 00011184 0001DF14 ED 6C 02 F2 */ fmuls f11, f12, f11 -/* 00011188 0001DF18 D1 81 01 50 */ stfs f12, 0x150(r1) -/* 0001118C 0001DF1C 38 61 01 70 */ addi r3, r1, 0x170 -/* 00011190 0001DF20 C1 8B 00 60 */ lfs f12, 0x60(r11) -/* 00011194 0001DF24 C0 0B 00 58 */ lfs f0, 0x58(r11) -/* 00011198 0001DF28 C1 AB 00 5C */ lfs f13, 0x5c(r11) -/* 0001119C 0001DF2C ED 8C 02 B2 */ fmuls f12, f12, f10 -/* 000111A0 0001DF30 EC 00 02 B2 */ fmuls f0, f0, f10 -/* 000111A4 0001DF34 D1 81 01 88 */ stfs f12, 0x188(r1) -/* 000111A8 0001DF38 ED AD 02 B2 */ fmuls f13, f13, f10 -/* 000111AC 0001DF3C D0 01 01 80 */ stfs f0, 0x180(r1) -/* 000111B0 0001DF40 D1 A1 01 84 */ stfs f13, 0x184(r1) -.L_000111B4: -/* 000111B4 0001DF44 EC 00 40 2A */ fadds f0, f0, f8 -/* 000111B8 0001DF48 ED AD 48 2A */ fadds f13, f13, f9 -/* 000111BC 0001DF4C D0 01 01 A0 */ stfs f0, 0x1a0(r1) -/* 000111C0 0001DF50 ED 8C 58 2A */ fadds f12, f12, f11 -/* 000111C4 0001DF54 D1 A1 01 A4 */ stfs f13, 0x1a4(r1) -/* 000111C8 0001DF58 D1 81 01 A8 */ stfs f12, 0x1a8(r1) -/* 000111CC 0001DF5C D1 21 01 94 */ stfs f9, 0x194(r1) -/* 000111D0 0001DF60 D1 61 01 98 */ stfs f11, 0x198(r1) -/* 000111D4 0001DF64 D1 01 01 90 */ stfs f8, 0x190(r1) -/* 000111D8 0001DF68 48 00 00 01 */ bl __8bVector3RC8bVector3 -/* 000111DC 0001DF6C C1 A1 01 70 */ lfs f13, 0x170(r1) -/* 000111E0 0001DF70 38 61 01 60 */ addi r3, r1, 0x160 -/* 000111E4 0001DF74 C1 81 01 74 */ lfs f12, 0x174(r1) -/* 000111E8 0001DF78 38 81 01 A0 */ addi r4, r1, 0x1a0 -/* 000111EC 0001DF7C C0 01 01 78 */ lfs f0, 0x178(r1) -/* 000111F0 0001DF80 C1 61 01 28 */ lfs f11, 0x128(r1) -/* 000111F4 0001DF84 C1 41 01 2C */ lfs f10, 0x12c(r1) -/* 000111F8 0001DF88 C1 21 01 30 */ lfs f9, 0x130(r1) -.L_000111FC: -/* 000111FC 0001DF8C ED AD 58 2A */ fadds f13, f13, f11 -/* 00011200 0001DF90 ED 8C 50 2A */ fadds f12, f12, f10 -/* 00011204 0001DF94 D1 A1 01 A0 */ stfs f13, 0x1a0(r1) -/* 00011208 0001DF98 EC 00 48 2A */ fadds f0, f0, f9 -/* 0001120C 0001DF9C D1 81 01 A4 */ stfs f12, 0x1a4(r1) -/* 00011210 0001DFA0 D0 01 01 A8 */ stfs f0, 0x1a8(r1) -/* 00011214 0001DFA4 48 00 00 01 */ bl __8bVector3RC8bVector3 -/* 00011218 0001DFA8 C0 01 01 60 */ lfs f0, 0x160(r1) -/* 0001121C 0001DFAC C1 A1 01 64 */ lfs f13, 0x164(r1) -.L_00011220: -/* 00011220 0001DFB0 C1 81 01 68 */ lfs f12, 0x168(r1) -/* 00011224 0001DFB4 D0 01 01 28 */ stfs f0, 0x128(r1) -/* 00011228 0001DFB8 D1 A1 01 2C */ stfs f13, 0x12c(r1) -/* 0001122C 0001DFBC D1 81 01 30 */ stfs f12, 0x130(r1) -/* 00011230 0001DFC0 C1 61 01 38 */ lfs f11, 0x138(r1) -/* 00011234 0001DFC4 38 81 01 58 */ addi r4, r1, 0x158 -/* 00011238 0001DFC8 C1 41 01 3C */ lfs f10, 0x13c(r1) -/* 0001123C 0001DFCC 38 61 01 48 */ addi r3, r1, 0x148 -/* 00011240 0001DFD0 C1 21 01 40 */ lfs f9, 0x140(r1) -/* 00011244 0001DFD4 C1 A1 01 28 */ lfs f13, 0x128(r1) -/* 00011248 0001DFD8 C1 81 01 2C */ lfs f12, 0x12c(r1) -/* 0001124C 0001DFDC C0 01 01 30 */ lfs f0, 0x130(r1) -.L_00011250: -/* 00011250 0001DFE0 ED AD 58 28 */ fsubs f13, f13, f11 -/* 00011254 0001DFE4 ED 8C 50 28 */ fsubs f12, f12, f10 -/* 00011258 0001DFE8 D1 A1 01 58 */ stfs f13, 0x158(r1) -/* 0001125C 0001DFEC EC 00 48 28 */ fsubs f0, f0, f9 -/* 00011260 0001DFF0 D1 81 01 5C */ stfs f12, 0x15c(r1) -.L_00011264: -/* 00011264 0001DFF4 D0 01 01 60 */ stfs f0, 0x160(r1) -/* 00011268 0001DFF8 48 00 00 01 */ bl __8bVector3RC8bVector3 -/* 0001126C 0001DFFC C1 21 01 48 */ lfs f9, 0x148(r1) -/* 00011270 0001E000 38 81 01 68 */ addi r4, r1, 0x168 -/* 00011274 0001E004 C1 41 01 4C */ lfs f10, 0x14c(r1) -/* 00011278 0001E008 38 61 01 58 */ addi r3, r1, 0x158 -/* 0001127C 0001E00C C1 61 01 50 */ lfs f11, 0x150(r1) -/* 00011280 0001E010 ED 29 06 B2 */ fmuls f9, f9, f26 -.L_00011284: -/* 00011284 0001E014 C1 A1 01 38 */ lfs f13, 0x138(r1) -/* 00011288 0001E018 ED 4A 06 B2 */ fmuls f10, f10, f26 -/* 0001128C 0001E01C C1 81 01 3C */ lfs f12, 0x13c(r1) -/* 00011290 0001E020 ED 6B 06 B2 */ fmuls f11, f11, f26 -/* 00011294 0001E024 C0 01 01 40 */ lfs f0, 0x140(r1) -/* 00011298 0001E028 ED AD 48 2A */ fadds f13, f13, f9 -/* 0001129C 0001E02C ED 8C 50 2A */ fadds f12, f12, f10 -/* 000112A0 0001E030 D1 A1 01 68 */ stfs f13, 0x168(r1) -/* 000112A4 0001E034 EC 00 58 2A */ fadds f0, f0, f11 -/* 000112A8 0001E038 D1 81 01 6C */ stfs f12, 0x16c(r1) -/* 000112AC 0001E03C D0 01 01 70 */ stfs f0, 0x170(r1) -/* 000112B0 0001E040 D1 61 01 50 */ stfs f11, 0x150(r1) -/* 000112B4 0001E044 D1 21 01 48 */ stfs f9, 0x148(r1) -.L_000112B8: -/* 000112B8 0001E048 D1 41 01 4C */ stfs f10, 0x14c(r1) -/* 000112BC 0001E04C 48 00 00 01 */ bl __8bVector3RC8bVector3 -/* 000112C0 0001E050 C0 01 01 60 */ lfs f0, 0x160(r1) -.L_000112C4: -/* 000112C4 0001E054 C1 61 01 58 */ lfs f11, 0x158(r1) -/* 000112C8 0001E058 C1 A1 01 5C */ lfs f13, 0x15c(r1) -/* 000112CC 0001E05C D1 61 01 28 */ stfs f11, 0x128(r1) -/* 000112D0 0001E060 D1 A1 01 2C */ stfs f13, 0x12c(r1) -/* 000112D4 0001E064 D0 01 01 30 */ stfs f0, 0x130(r1) -/* 000112D8 0001E068 D1 61 01 38 */ stfs f11, 0x138(r1) -/* 000112DC 0001E06C D1 A1 01 3C */ stfs f13, 0x13c(r1) -/* 000112E0 0001E070 D0 01 01 40 */ stfs f0, 0x140(r1) -/* 000112E4 0001E074 81 3F 00 84 */ lwz r9, 0x84(r31) -/* 000112E8 0001E078 C0 09 00 00 */ lfs f0, 0x0(r9) -/* 000112EC 0001E07C FD 80 00 1E */ fctiwz f12, f0 -/* 000112F0 0001E080 D9 81 01 C0 */ stfd f12, 0x1c0(r1) -/* 000112F4 0001E084 83 C1 01 C4 */ lwz r30, 0x1c4(r1) -/* 000112F8 0001E088 57 DE FC 7E */ extrwi r30, r30, 15, 16 -/* 000112FC 0001E08C 7F C3 F3 78 */ mr r3, r30 -.L_00011300: -/* 00011300 0001E090 48 00 00 01 */ bl bSin__FUs -/* 00011304 0001E094 FF E0 08 90 */ fmr f31, f1 -/* 00011308 0001E098 7F C3 F3 78 */ mr r3, r30 -/* 0001130C 0001E09C 48 00 00 01 */ bl bCos__FUs -/* 00011310 0001E0A0 EF FF 08 24 */ fdivs f31, f31, f1 -/* 00011314 0001E0A4 3D 20 00 00 */ lis r9, .rodata+0x9C0@ha -/* 00011318 0001E0A8 C0 29 09 C0 */ lfs f1, .rodata+0x9C0@l(r9) -.L_0001131C: -/* 0001131C 0001E0AC FC 40 F8 90 */ fmr f2, f31 -/* 00011320 0001E0B0 48 00 00 01 */ bl bATan__Fff -/* 00011324 0001E0B4 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha -/* 00011328 0001E0B8 54 6B 0C 3C */ clrlslwi r11, r3, 17, 1 -/* 0001132C 0001E0BC 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) -/* 00011330 0001E0C0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00011334 0001E0C4 40 82 13 40 */ bne .L_00012674 -/* 00011338 0001E0C8 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 0001133C 0001E0CC B1 69 00 C4 */ sth r11, 0xc4(r9) -/* 00011340 0001E0D0 3B C1 01 58 */ addi r30, r1, 0x158 -/* 00011344 0001E0D4 38 A1 01 38 */ addi r5, r1, 0x138 -/* 00011348 0001E0D8 38 81 01 28 */ addi r4, r1, 0x128 -.L_0001134C: -/* 0001134C 0001E0DC 38 C1 00 D8 */ addi r6, r1, 0xd8 -/* 00011350 0001E0E0 7F C3 F3 78 */ mr r3, r30 -/* 00011354 0001E0E4 7F DD F3 78 */ mr r29, r30 -/* 00011358 0001E0E8 48 00 00 01 */ bl eCreateLookAtMatrix__FP8bMatrix4R8bVector3N21 -/* 0001135C 0001E0EC 38 60 00 00 */ li r3, 0x0 -/* 00011360 0001E0F0 7F C4 F3 78 */ mr r4, r30 -/* 00011364 0001E0F4 48 00 00 01 */ bl ApplyCameraShake__FiP8bMatrix4 -/* 00011368 0001E0F8 80 1F 00 9C */ lwz r0, 0x9c(r31) -/* 0001136C 0001E0FC 3D 20 00 00 */ lis r9, PovHandheldNoiseScale@ha -/* 00011370 0001E100 39 29 00 00 */ addi r9, r9, PovHandheldNoiseScale@l -/* 00011374 0001E104 7F E3 FB 78 */ mr r3, r31 -/* 00011378 0001E108 54 00 10 3A */ slwi r0, r0, 2 -/* 0001137C 0001E10C 7F C4 F3 78 */ mr r4, r30 -/* 00011380 0001E110 7C 29 04 2E */ lfsx f1, r9, r0 -/* 00011384 0001E114 38 A0 00 01 */ li r5, 0x1 -/* 00011388 0001E118 48 00 28 49 */ bl .L_00013BD0 -/* 0001138C 0001E11C 3C 60 00 00 */ lis r3, eViews@ha -/* 00011390 0001E120 38 80 00 01 */ li r4, 0x1 -/* 00011394 0001E124 38 63 00 00 */ addi r3, r3, eViews@l -.L_00011398: -/* 00011398 0001E128 48 00 00 01 */ bl AmIinATunnel__FP5eViewi -/* 0001139C 0001E12C 2C 03 00 00 */ cmpwi r3, 0x0 -.L_000113A0: -/* 000113A0 0001E130 40 82 14 08 */ bne .L_000127A8 -/* 000113A4 0001E134 81 7F 00 80 */ lwz r11, 0x80(r31) -/* 000113A8 0001E138 3D 20 00 00 */ lis r9, .rodata+0x9EC@ha -/* 000113AC 0001E13C C1 89 09 EC */ lfs f12, .rodata+0x9EC@l(r9) -/* 000113B0 0001E140 3D 40 00 00 */ lis r10, .rodata+0x9B8@ha -/* 000113B4 0001E144 C0 0B 00 10 */ lfs f0, 0x10(r11) -/* 000113B8 0001E148 3D 00 00 00 */ lis r8, .rodata+0x9F0@ha -/* 000113BC 0001E14C C0 38 09 C0 */ lfs f1, .rodata+0x9C0@l(r24) -/* 000113C0 0001E150 3D 20 00 00 */ lis r9, PovHandheldChopperScale@ha -/* 000113C4 0001E154 EC 00 03 32 */ fmuls f0, f0, f12 -/* 000113C8 0001E158 C1 AA 09 B8 */ lfs f13, .rodata+0x9B8@l(r10) -/* 000113CC 0001E15C FC 00 68 2E */ fsel f0, f0, f0, f13 -.L_000113D0: -/* 000113D0 0001E160 80 1F 00 9C */ lwz r0, 0x9c(r31) -/* 000113D4 0001E164 ED A1 00 28 */ fsubs f13, f1, f0 -/* 000113D8 0001E168 C1 88 09 F0 */ lfs f12, .rodata+0x9F0@l(r8) -/* 000113DC 0001E16C FD AD 08 2E */ fsel f13, f13, f0, f1 -/* 000113E0 0001E170 39 29 00 00 */ addi r9, r9, PovHandheldChopperScale@l -/* 000113E4 0001E174 54 00 10 3A */ slwi r0, r0, 2 -/* 000113E8 0001E178 ED AD 03 32 */ fmuls f13, f13, f12 -/* 000113EC 0001E17C 7C 09 04 2E */ lfsx f0, r9, r0 -.L_000113F0: -/* 000113F0 0001E180 EC 21 68 28 */ fsubs f1, f1, f13 -/* 000113F4 0001E184 7F E3 FB 78 */ mr r3, r31 -/* 000113F8 0001E188 7F A4 EB 78 */ mr r4, r29 -/* 000113FC 0001E18C EC 20 00 72 */ fmuls f1, f0, f1 -/* 00011400 0001E190 38 A0 00 01 */ li r5, 0x1 -/* 00011404 0001E194 48 00 29 7D */ bl .L_00013D80 -/* 00011408 0001E198 80 1F 00 9C */ lwz r0, 0x9c(r31) -/* 0001140C 0001E19C 3D 60 00 00 */ lis r11, PovVelocityNoiseScale@ha -/* 00011410 0001E1A0 3D 20 00 00 */ lis r9, PovTerrainNoiseScale@ha -.L_00011414: -/* 00011414 0001E1A4 39 6B 00 00 */ addi r11, r11, PovVelocityNoiseScale@l -/* 00011418 0001E1A8 54 00 10 3A */ slwi r0, r0, 2 -/* 0001141C 0001E1AC 39 29 00 00 */ addi r9, r9, PovTerrainNoiseScale@l -/* 00011420 0001E1B0 7C 49 04 2E */ lfsx f2, r9, r0 -/* 00011424 0001E1B4 7F E3 FB 78 */ mr r3, r31 -/* 00011428 0001E1B8 7C 2B 04 2E */ lfsx f1, r11, r0 -/* 0001142C 0001E1BC 7F A4 EB 78 */ mr r4, r29 -/* 00011430 0001E1C0 80 BF 00 80 */ lwz r5, 0x80(r31) -/* 00011434 0001E1C4 48 00 2C 65 */ bl .L_00014098 -/* 00011438 0001E1C8 2C 1B 00 00 */ cmpwi r27, 0x0 -/* 0001143C 0001E1CC 40 82 14 74 */ bne .L_000128B0 -/* 00011440 0001E1D0 80 BF 00 80 */ lwz r5, 0x80(r31) -/* 00011444 0001E1D4 7F E3 FB 78 */ mr r3, r31 -/* 00011448 0001E1D8 7F A4 EB 78 */ mr r4, r29 -/* 0001144C 0001E1DC 38 A5 00 18 */ addi r5, r5, 0x18 -/* 00011450 0001E1E0 48 00 3A F1 */ bl .L_00014F40 -/* 00011454 0001E1E4 2C 1C 00 00 */ cmpwi r28, 0x0 -/* 00011458 0001E1E8 40 82 14 74 */ bne .L_000128CC -/* 0001145C 0001E1EC 80 BF 00 80 */ lwz r5, 0x80(r31) -/* 00011460 0001E1F0 7F E3 FB 78 */ mr r3, r31 -/* 00011464 0001E1F4 7F A4 EB 78 */ mr r4, r29 -.L_00011468: -/* 00011468 0001E1F8 7C A6 2B 78 */ mr r6, r5 -/* 0001146C 0001E1FC 38 A5 00 18 */ addi r5, r5, 0x18 -/* 00011470 0001E200 48 00 38 D1 */ bl .L_00014D40 -/* 00011474 0001E204 80 7F 00 1C */ lwz r3, 0x1c(r31) -/* 00011478 0001E208 7F A4 EB 78 */ mr r4, r29 -/* 0001147C 0001E20C FC 20 D8 90 */ fmr f1, f27 -/* 00011480 0001E210 48 00 04 ED */ bl .L_0001196C -.L_00011484: -/* 00011484 0001E214 80 01 02 2C */ lwz r0, 0x22c(r1) -/* 00011488 0001E218 7C 08 03 A6 */ mtlr r0 -/* 0001148C 0001E21C BB 01 01 C8 */ lmw r24, 0x1c8(r1) -/* 00011490 0001E220 E3 01 01 E8 */ psq_l f24, 0x1e8(r1), 0, qr0 -/* 00011494 0001E224 E3 21 01 F0 */ psq_l f25, 0x1f0(r1), 0, qr0 -/* 00011498 0001E228 E3 41 01 F8 */ psq_l f26, 0x1f8(r1), 0, qr0 -/* 0001149C 0001E22C E3 61 02 00 */ psq_l f27, 0x200(r1), 0, qr0 -/* 000114A0 0001E230 E3 81 02 08 */ psq_l f28, 0x208(r1), 0, qr0 -/* 000114A4 0001E234 E3 A1 02 10 */ psq_l f29, 0x210(r1), 0, qr0 -.L_000114A8: -/* 000114A8 0001E238 E3 C1 02 18 */ psq_l f30, 0x218(r1), 0, qr0 -/* 000114AC 0001E23C E3 E1 02 20 */ psq_l f31, 0x220(r1), 0, qr0 -/* 000114B0 0001E240 38 21 02 28 */ addi r1, r1, 0x228 -/* 000114B4 0001E244 4E 80 00 20 */ blr -.endfn Update__16CubicCameraMoverf - -# .text:0x114B8 | size: 0x188 -# IsAnyCopNear(CameraAnchor*) -.fn IsAnyCopNear__FP12CameraAnchor, local -/* 000114B8 0001E248 94 21 FF 98 */ stwu r1, -0x68(r1) -.L_000114BC: -/* 000114BC 0001E24C 7C 08 02 A6 */ mflr r0 -/* 000114C0 0001E250 F3 C1 00 58 */ psq_st f30, 0x58(r1), 0, qr0 -/* 000114C4 0001E254 F3 E1 00 60 */ psq_st f31, 0x60(r1), 0, qr0 -/* 000114C8 0001E258 BF 01 00 38 */ stmw r24, 0x38(r1) -/* 000114CC 0001E25C 90 01 00 6C */ stw r0, 0x6c(r1) -/* 000114D0 0001E260 3D 60 00 00 */ lis r11, .rodata+0xA00@ha -/* 000114D4 0001E264 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@ha -/* 000114D8 0001E268 C3 CB 0A 00 */ lfs f30, .rodata+0xA00@l(r11) -/* 000114DC 0001E26C 39 29 00 00 */ addi r9, r9, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@l -/* 000114E0 0001E270 3D 60 00 00 */ lis r11, .rodata+0xA10@ha -/* 000114E4 0001E274 83 C9 00 E0 */ lwz r30, 0xe0(r9) -/* 000114E8 0001E278 C3 EB 0A 10 */ lfs f31, .rodata+0xA10@l(r11) -/* 000114EC 0001E27C 7D 3C 4B 78 */ mr r28, r9 -/* 000114F0 0001E280 7C 7D 1B 78 */ mr r29, r3 -/* 000114F4 0001E284 3B 61 00 08 */ addi r27, r1, 0x8 -/* 000114F8 0001E288 3F 00 00 00 */ lis r24, .rodata+0xA04@ha -/* 000114FC 0001E28C 3F 20 00 00 */ lis r25, .rodata+0xA08@ha -/* 00011500 0001E290 3F 40 00 00 */ lis r26, .rodata+0xA0C@ha -/* 00011504 0001E294 80 1C 00 E8 */ lwz r0, 0xe8(r28) -/* 00011508 0001E298 81 3C 00 E0 */ lwz r9, 0xe0(r28) -/* 0001150C 0001E29C 54 00 10 3A */ slwi r0, r0, 2 -/* 00011510 0001E2A0 7D 29 02 14 */ add r9, r9, r0 -/* 00011514 0001E2A4 7C 1E 48 00 */ cmpw r30, r9 -/* 00011518 0001E2A8 41 82 16 20 */ beq .L_00012B38 -/* 0001151C 0001E2AC 83 FE 00 00 */ lwz r31, 0x0(r30) -/* 00011520 0001E2B0 2C 1F 00 00 */ cmpwi r31, 0x0 -/* 00011524 0001E2B4 41 82 16 18 */ beq .L_00012B3C -/* 00011528 0001E2B8 81 3F 00 04 */ lwz r9, 0x4(r31) -.L_0001152C: -/* 0001152C 0001E2BC A8 69 01 18 */ lha r3, 0x118(r9) -/* 00011530 0001E2C0 80 09 01 1C */ lwz r0, 0x11c(r9) -/* 00011534 0001E2C4 7C 7F 1A 14 */ add r3, r31, r3 -/* 00011538 0001E2C8 7C 08 03 A6 */ mtlr r0 -/* 0001153C 0001E2CC 4E 80 00 21 */ blrl -/* 00011540 0001E2D0 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00011544 0001E2D4 41 82 16 18 */ beq .L_00012B5C -/* 00011548 0001E2D8 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 0001154C 0001E2DC A8 69 00 20 */ lha r3, 0x20(r9) -/* 00011550 0001E2E0 80 09 00 24 */ lwz r0, 0x24(r9) -/* 00011554 0001E2E4 7C 7F 1A 14 */ add r3, r31, r3 -.L_00011558: -/* 00011558 0001E2E8 7C 08 03 A6 */ mtlr r0 -/* 0001155C 0001E2EC 4E 80 00 21 */ blrl -/* 00011560 0001E2F0 C0 03 00 00 */ lfs f0, 0x0(r3) -/* 00011564 0001E2F4 C1 5D 00 1C */ lfs f10, 0x1c(r29) -/* 00011568 0001E2F8 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 0001156C 0001E2FC C0 F8 0A 04 */ lfs f7, .rodata+0xA04@l(r24) -/* 00011570 0001E300 C1 A3 00 04 */ lfs f13, 0x4(r3) -/* 00011574 0001E304 C1 9D 00 18 */ lfs f12, 0x18(r29) -/* 00011578 0001E308 C1 3D 00 20 */ lfs f9, 0x20(r29) -/* 0001157C 0001E30C D1 A1 00 0C */ stfs f13, 0xc(r1) -/* 00011580 0001E310 C1 19 0A 08 */ lfs f8, .rodata+0xA08@l(r25) -/* 00011584 0001E314 C0 03 00 08 */ lfs f0, 0x8(r3) -/* 00011588 0001E318 D0 1B 00 08 */ stfs f0, 0x8(r27) -/* 0001158C 0001E31C ED 80 60 28 */ fsubs f12, f0, f12 -/* 00011590 0001E320 D0 01 00 18 */ stfs f0, 0x18(r1) -/* 00011594 0001E324 C1 A1 00 08 */ lfs f13, 0x8(r1) -/* 00011598 0001E328 C0 01 00 0C */ lfs f0, 0xc(r1) -/* 0001159C 0001E32C FD A0 68 50 */ fneg f13, f13 -.L_000115A0: -/* 000115A0 0001E330 D1 81 00 28 */ stfs f12, 0x28(r1) -/* 000115A4 0001E334 ED 4D 50 28 */ fsubs f10, f13, f10 -/* 000115A8 0001E338 D0 01 00 20 */ stfs f0, 0x20(r1) -/* 000115AC 0001E33C ED 6A 02 B2 */ fmuls f11, f10, f10 -/* 000115B0 0001E340 D1 A1 00 1C */ stfs f13, 0x1c(r1) -.L_000115B4: -/* 000115B4 0001E344 EC 00 48 28 */ fsubs f0, f0, f9 -/* 000115B8 0001E348 D1 41 00 2C */ stfs f10, 0x2c(r1) -/* 000115BC 0001E34C ED 8C 5B 3A */ fmadds f12, f12, f12, f11 -/* 000115C0 0001E350 D0 01 00 30 */ stfs f0, 0x30(r1) -/* 000115C4 0001E354 ED 60 60 3A */ fmadds f11, f0, f0, f12 -/* 000115C8 0001E358 FC 0B F0 00 */ fcmpu cr0, f11, f30 -/* 000115CC 0001E35C 4C 62 03 82 */ cror un, eq, lt -/* 000115D0 0001E360 41 83 16 00 */ bso .L_00012BD0 -/* 000115D4 0001E364 FC 00 58 34 */ frsqrte f0, f11 -.L_000115D8: -/* 000115D8 0001E368 ED A0 00 32 */ fmuls f13, f0, f0 -.L_000115DC: -/* 000115DC 0001E36C ED 80 01 F2 */ fmuls f12, f0, f7 -.L_000115E0: -/* 000115E0 0001E370 ED AB 43 7C */ fnmsubs f13, f11, f13, f8 -/* 000115E4 0001E374 EC 0D 03 3A */ fmadds f0, f13, f12, f0 -/* 000115E8 0001E378 ED A0 00 32 */ fmuls f13, f0, f0 -/* 000115EC 0001E37C ED 80 01 F2 */ fmuls f12, f0, f7 -/* 000115F0 0001E380 ED AB 43 7C */ fnmsubs f13, f11, f13, f8 -/* 000115F4 0001E384 EC 0D 03 3A */ fmadds f0, f13, f12, f0 -/* 000115F8 0001E388 EC 00 02 F2 */ fmuls f0, f0, f11 -.L_000115FC: -/* 000115FC 0001E38C 48 01 16 04 */ b .text+0x11604 -/* 00011600 0001E390 C0 1A 0A 0C */ lfs f0, .rodata+0xA0C@l(r26) -/* 00011604 0001E394 FC 00 F8 00 */ fcmpu cr0, f0, f31 -/* 00011608 0001E398 4C 62 0B 82 */ cror un, eq, gt -/* 0001160C 0001E39C 41 83 16 18 */ bso .L_00012C24 -.L_00011610: -/* 00011610 0001E3A0 38 60 00 01 */ li r3, 0x1 -/* 00011614 0001E3A4 48 01 16 24 */ b .text+0x11624 -/* 00011618 0001E3A8 3B DE 00 04 */ addi r30, r30, 0x4 -/* 0001161C 0001E3AC 48 01 15 04 */ b .text+0x11504 -.L_00011620: -/* 00011620 0001E3B0 38 60 00 00 */ li r3, 0x0 -/* 00011624 0001E3B4 80 01 00 6C */ lwz r0, 0x6c(r1) -/* 00011628 0001E3B8 7C 08 03 A6 */ mtlr r0 -/* 0001162C 0001E3BC BB 01 00 38 */ lmw r24, 0x38(r1) -/* 00011630 0001E3C0 E3 C1 00 58 */ psq_l f30, 0x58(r1), 0, qr0 -/* 00011634 0001E3C4 E3 E1 00 60 */ psq_l f31, 0x60(r1), 0, qr0 -/* 00011638 0001E3C8 38 21 00 68 */ addi r1, r1, 0x68 -/* 0001163C 0001E3CC 4E 80 00 20 */ blr -.endfn IsAnyCopNear__FP12CameraAnchor - -# .text:0x11640 | size: 0xD8 -# IsBeingPursued(int) -.fn IsBeingPursued__Fi, local -/* 00011640 0001E3D0 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 00011644 0001E3D4 7C 08 02 A6 */ mflr r0 -.L_00011648: -/* 00011648 0001E3D8 BF 61 00 0C */ stmw r27, 0xc(r1) -/* 0001164C 0001E3DC 90 01 00 24 */ stw r0, 0x24(r1) -/* 00011650 0001E3E0 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@ha -/* 00011654 0001E3E4 7C 7C 1B 78 */ mr r28, r3 -/* 00011658 0001E3E8 83 C9 00 00 */ lwz r30, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@l(r9) -/* 0001165C 0001E3EC 3B A9 00 00 */ addi r29, r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@l -/* 00011660 0001E3F0 3F 60 00 00 */ lis r27, _IHandle__12IPerpetrator@ha -/* 00011664 0001E3F4 80 1D 00 08 */ lwz r0, 0x8(r29) -/* 00011668 0001E3F8 81 3D 00 00 */ lwz r9, 0x0(r29) -/* 0001166C 0001E3FC 54 00 10 3A */ slwi r0, r0, 2 -.L_00011670: -/* 00011670 0001E400 7D 29 02 14 */ add r9, r9, r0 -/* 00011674 0001E404 7C 1E 48 00 */ cmpw r30, r9 -/* 00011678 0001E408 41 82 17 00 */ beq .L_00012D78 -/* 0001167C 0001E40C 83 FE 00 00 */ lwz r31, 0x0(r30) -/* 00011680 0001E410 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 00011684 0001E414 A8 69 00 50 */ lha r3, 0x50(r9) -/* 00011688 0001E418 80 09 00 54 */ lwz r0, 0x54(r9) -.L_0001168C: -/* 0001168C 0001E41C 7C 7F 1A 14 */ add r3, r31, r3 -/* 00011690 0001E420 7C 08 03 A6 */ mtlr r0 -/* 00011694 0001E424 4E 80 00 21 */ blrl -/* 00011698 0001E428 7C 03 E0 00 */ cmpw r3, r28 -/* 0001169C 0001E42C 41 82 16 A8 */ beq .L_00012D44 -/* 000116A0 0001E430 3B DE 00 04 */ addi r30, r30, 0x4 -/* 000116A4 0001E434 48 01 16 64 */ b .text+0x11664 -/* 000116A8 0001E438 81 3F 00 04 */ lwz r9, 0x4(r31) -.L_000116AC: -/* 000116AC 0001E43C A8 69 00 10 */ lha r3, 0x10(r9) -/* 000116B0 0001E440 80 09 00 14 */ lwz r0, 0x14(r9) -/* 000116B4 0001E444 7C 7F 1A 14 */ add r3, r31, r3 -/* 000116B8 0001E448 7C 08 03 A6 */ mtlr r0 -/* 000116BC 0001E44C 4E 80 00 21 */ blrl -/* 000116C0 0001E450 7C 63 1B 79 */ mr. r3, r3 -/* 000116C4 0001E454 41 82 17 00 */ beq .L_00012DC4 -/* 000116C8 0001E458 80 63 00 00 */ lwz r3, 0x0(r3) -.L_000116CC: -/* 000116CC 0001E45C 38 9B 00 00 */ addi r4, r27, _IHandle__12IPerpetrator@l -/* 000116D0 0001E460 48 00 00 01 */ bl Find__Q43UTL3COM6Object6_IListPv -/* 000116D4 0001E464 7C 6B 1B 79 */ mr. r11, r3 -/* 000116D8 0001E468 41 82 17 00 */ beq .L_00012DD8 -/* 000116DC 0001E46C 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 000116E0 0001E470 A8 69 00 58 */ lha r3, 0x58(r9) -/* 000116E4 0001E474 80 09 00 5C */ lwz r0, 0x5c(r9) -/* 000116E8 0001E478 7C 6B 1A 14 */ add r3, r11, r3 -/* 000116EC 0001E47C 7C 08 03 A6 */ mtlr r0 -/* 000116F0 0001E480 4E 80 00 21 */ blrl -.L_000116F4: -/* 000116F4 0001E484 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000116F8 0001E488 38 60 00 01 */ li r3, 0x1 -/* 000116FC 0001E48C 40 82 17 04 */ bne .L_00012E00 -/* 00011700 0001E490 38 60 00 00 */ li r3, 0x0 -/* 00011704 0001E494 80 01 00 24 */ lwz r0, 0x24(r1) -/* 00011708 0001E498 7C 08 03 A6 */ mtlr r0 -/* 0001170C 0001E49C BB 61 00 0C */ lmw r27, 0xc(r1) -/* 00011710 0001E4A0 38 21 00 20 */ addi r1, r1, 0x20 -/* 00011714 0001E4A4 4E 80 00 20 */ blr -.endfn IsBeingPursued__Fi - -# .text:0x11718 | size: 0xE8 -# FixWorldHeight(UMath::Vector3*, int) -.fn FixWorldHeight__FPQ25UMath7Vector3i, local -/* 00011718 0001E4A8 94 21 FF C8 */ stwu r1, -0x38(r1) -/* 0001171C 0001E4AC 7C 08 02 A6 */ mflr r0 -/* 00011720 0001E4B0 BF A1 00 2C */ stmw r29, 0x2c(r1) -/* 00011724 0001E4B4 90 01 00 3C */ stw r0, 0x3c(r1) -/* 00011728 0001E4B8 3D 20 00 00 */ lis r9, TheGameFlowManager+0x20@ha -/* 0001172C 0001E4BC 7C 7F 1B 78 */ mr r31, r3 -.L_00011730: -/* 00011730 0001E4C0 80 09 00 20 */ lwz r0, TheGameFlowManager+0x20@l(r9) -/* 00011734 0001E4C4 7C 9D 23 78 */ mr r29, r4 -/* 00011738 0001E4C8 2C 00 00 06 */ cmpwi r0, 0x6 -/* 0001173C 0001E4CC 40 82 17 EC */ bne .L_00012F28 -/* 00011740 0001E4D0 3D 20 00 00 */ lis r9, .rodata+0xA14@ha -/* 00011744 0001E4D4 81 5F 00 00 */ lwz r10, 0x0(r31) -/* 00011748 0001E4D8 C0 09 0A 14 */ lfs f0, .rodata+0xA14@l(r9) -/* 0001174C 0001E4DC 39 61 00 08 */ addi r11, r1, 0x8 -/* 00011750 0001E4E0 80 1F 00 04 */ lwz r0, 0x4(r31) -/* 00011754 0001E4E4 3D 00 00 00 */ lis r8, .rodata+0xA18@ha -/* 00011758 0001E4E8 81 3F 00 08 */ lwz r9, 0x8(r31) -/* 0001175C 0001E4EC 38 E0 00 00 */ li r7, 0x0 -/* 00011760 0001E4F0 D0 01 00 20 */ stfs f0, 0x20(r1) -/* 00011764 0001E4F4 3B C0 00 03 */ li r30, 0x3 -/* 00011768 0001E4F8 91 41 00 08 */ stw r10, 0x8(r1) -/* 0001176C 0001E4FC 7D 64 5B 78 */ mr r4, r11 -/* 00011770 0001E500 90 0B 00 04 */ stw r0, 0x4(r11) -/* 00011774 0001E504 38 61 00 18 */ addi r3, r1, 0x18 -/* 00011778 0001E508 91 2B 00 08 */ stw r9, 0x8(r11) -/* 0001177C 0001E50C 38 A1 00 20 */ addi r5, r1, 0x20 -/* 00011780 0001E510 C1 A8 0A 18 */ lfs f13, .rodata+0xA18@l(r8) -/* 00011784 0001E514 38 C0 00 00 */ li r6, 0x0 -/* 00011788 0001E518 C0 01 00 0C */ lfs f0, 0xc(r1) -/* 0001178C 0001E51C 90 E1 00 18 */ stw r7, 0x18(r1) -/* 00011790 0001E520 EC 00 68 2A */ fadds f0, f0, f13 -/* 00011794 0001E524 93 C1 00 1C */ stw r30, 0x1c(r1) -/* 00011798 0001E528 D0 01 00 0C */ stfs f0, 0xc(r1) -/* 0001179C 0001E52C 48 00 00 01 */ bl GetWorldHeightAtPointRigorous__13WCollisionMgrRCQ25UMath7Vector3RfPQ25UMath7Vector3 -/* 000117A0 0001E530 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000117A4 0001E534 41 82 17 B8 */ beq .L_00012F5C -/* 000117A8 0001E538 2C 1D 00 03 */ cmpwi r29, 0x3 -/* 000117AC 0001E53C 40 82 17 B8 */ bne .L_00012F64 -/* 000117B0 0001E540 C0 01 00 20 */ lfs f0, 0x20(r1) -/* 000117B4 0001E544 D0 1F 00 04 */ stfs f0, 0x4(r31) -/* 000117B8 0001E548 C1 A1 00 20 */ lfs f13, 0x20(r1) -/* 000117BC 0001E54C C0 1F 00 04 */ lfs f0, 0x4(r31) -/* 000117C0 0001E550 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 000117C4 0001E554 4C 62 03 82 */ cror un, eq, lt -/* 000117C8 0001E558 41 83 17 D0 */ bso .L_00012F98 -/* 000117CC 0001E55C D1 BF 00 04 */ stfs f13, 0x4(r31) -/* 000117D0 0001E560 3D 20 00 00 */ lis r9, TrackCarEyeOffsetZ@ha -/* 000117D4 0001E564 57 A0 10 3A */ slwi r0, r29, 2 -/* 000117D8 0001E568 39 29 00 00 */ addi r9, r9, TrackCarEyeOffsetZ@l -/* 000117DC 0001E56C C0 1F 00 04 */ lfs f0, 0x4(r31) -/* 000117E0 0001E570 7D A9 04 2E */ lfsx f13, r9, r0 -/* 000117E4 0001E574 EC 00 68 2A */ fadds f0, f0, f13 -.L_000117E8: -/* 000117E8 0001E578 D0 1F 00 04 */ stfs f0, 0x4(r31) -/* 000117EC 0001E57C 80 01 00 3C */ lwz r0, 0x3c(r1) -/* 000117F0 0001E580 7C 08 03 A6 */ mtlr r0 -/* 000117F4 0001E584 BB A1 00 2C */ lmw r29, 0x2c(r1) -/* 000117F8 0001E588 38 21 00 38 */ addi r1, r1, 0x38 -/* 000117FC 0001E58C 4E 80 00 20 */ blr -.endfn FixWorldHeight__FPQ25UMath7Vector3i - -# .text:0x11800 | size: 0x1C -.fn CrossXY__FPC8bVector3T0, local -/* 00011800 0001E590 C0 23 00 04 */ lfs f1, 0x4(r3) -/* 00011804 0001E594 C1 A4 00 00 */ lfs f13, 0x0(r4) -/* 00011808 0001E598 C1 83 00 00 */ lfs f12, 0x0(r3) -.L_0001180C: -/* 0001180C 0001E59C C0 04 00 04 */ lfs f0, 0x4(r4) -/* 00011810 0001E5A0 EC 21 03 72 */ fmuls f1, f1, f13 -/* 00011814 0001E5A4 EC 2C 08 38 */ fmsubs f1, f12, f0, f1 -/* 00011818 0001E5A8 4E 80 00 20 */ blr -.endfn CrossXY__FPC8bVector3T0 - -# .text:0x1181C | size: 0x30 -.fn _._20SelectCarCameraMover, global -/* 0001181C 0001E5AC 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 00011820 0001E5B0 7C 08 02 A6 */ mflr r0 -/* 00011824 0001E5B4 90 01 00 0C */ stw r0, 0xc(r1) -/* 00011828 0001E5B8 3D 20 00 00 */ lis r9, _vt.20SelectCarCameraMover@ha -/* 0001182C 0001E5BC 7C 6B 1B 78 */ mr r11, r3 -/* 00011830 0001E5C0 39 29 00 00 */ addi r9, r9, _vt.20SelectCarCameraMover@l -/* 00011834 0001E5C4 91 2B 00 08 */ stw r9, 0x8(r11) -/* 00011838 0001E5C8 48 00 20 35 */ bl .L_0001386C -/* 0001183C 0001E5CC 80 01 00 0C */ lwz r0, 0xc(r1) -.L_00011840: -/* 00011840 0001E5D0 7C 08 03 A6 */ mtlr r0 -/* 00011844 0001E5D4 38 21 00 08 */ addi r1, r1, 0x8 -/* 00011848 0001E5D8 4E 80 00 20 */ blr -.endfn _._20SelectCarCameraMover - -# .text:0x1184C | size: 0xCC -.fn SetVRotateSpeed__20SelectCarCameraMoverf, global -/* 0001184C 0001E5DC 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 00011850 0001E5E0 7C 08 02 A6 */ mflr r0 -/* 00011854 0001E5E4 F3 E1 00 10 */ psq_st f31, 0x10(r1), 0, qr0 -.L_00011858: -/* 00011858 0001E5E8 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 0001185C 0001E5EC 90 01 00 1C */ stw r0, 0x1c(r1) -.L_00011860: -/* 00011860 0001E5F0 7C 7F 1B 78 */ mr r31, r3 -/* 00011864 0001E5F4 FF E0 08 90 */ fmr f31, f1 -/* 00011868 0001E5F8 80 1F 00 80 */ lwz r0, 0x80(r31) -/* 0001186C 0001E5FC 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00011870 0001E600 41 82 19 00 */ beq .L_00013170 -/* 00011874 0001E604 2C 00 00 01 */ cmpwi r0, 0x1 -/* 00011878 0001E608 41 82 18 F4 */ beq .L_0001316C -/* 0001187C 0001E60C 3D 20 00 00 */ lis r9, kSelectCarDefaultFOVV@ha -/* 00011880 0001E610 3F C0 00 00 */ lis r30, kSelectCarDefaultRollV@ha -/* 00011884 0001E614 3D 60 00 00 */ lis r11, kSelectCarDefaultLookAtZV@ha -/* 00011888 0001E618 C0 1E 00 00 */ lfs f0, kSelectCarDefaultRollV@l(r30) -/* 0001188C 0001E61C C1 09 00 00 */ lfs f8, kSelectCarDefaultFOVV@l(r9) -/* 00011890 0001E620 C0 EB 00 00 */ lfs f7, kSelectCarDefaultLookAtZV@l(r11) -/* 00011894 0001E624 FC 40 00 90 */ fmr f2, f0 -/* 00011898 0001E628 C1 3F 00 98 */ lfs f9, 0x98(r31) -/* 0001189C 0001E62C C1 BF 00 A4 */ lfs f13, 0xa4(r31) -/* 000118A0 0001E630 C1 5F 00 9C */ lfs f10, 0x9c(r31) -/* 000118A4 0001E634 FC 20 48 90 */ fmr f1, f9 -.L_000118A8: -/* 000118A8 0001E638 C1 7F 00 A0 */ lfs f11, 0xa0(r31) -/* 000118AC 0001E63C C1 9F 00 A8 */ lfs f12, 0xa8(r31) -/* 000118B0 0001E640 D1 BF 00 C8 */ stfs f13, 0xc8(r31) -/* 000118B4 0001E644 D0 1F 00 E0 */ stfs f0, 0xe0(r31) -/* 000118B8 0001E648 D0 1F 00 E8 */ stfs f0, 0xe8(r31) -/* 000118BC 0001E64C D0 1F 00 EC */ stfs f0, 0xec(r31) -/* 000118C0 0001E650 D1 5F 00 C0 */ stfs f10, 0xc0(r31) -.L_000118C4: -/* 000118C4 0001E654 D1 7F 00 C4 */ stfs f11, 0xc4(r31) -.L_000118C8: -/* 000118C8 0001E658 D1 9F 00 CC */ stfs f12, 0xcc(r31) -.L_000118CC: -/* 000118CC 0001E65C D1 1F 00 E4 */ stfs f8, 0xe4(r31) -.L_000118D0: -/* 000118D0 0001E660 D0 FF 00 F0 */ stfs f7, 0xf0(r31) -/* 000118D4 0001E664 D1 3F 00 BC */ stfs f9, 0xbc(r31) -/* 000118D8 0001E668 48 01 22 1D */ bl .text+0x1221C -/* 000118DC 0001E66C 3D 20 00 00 */ lis r9, kSelectCarDefaultAnimTimeV@ha -/* 000118E0 0001E670 C0 1E 00 00 */ lfs f0, kSelectCarDefaultRollV@l(r30) -/* 000118E4 0001E674 C1 A9 00 00 */ lfs f13, kSelectCarDefaultAnimTimeV@l(r9) -/* 000118E8 0001E678 D0 3F 00 E0 */ stfs f1, 0xe0(r31) -/* 000118EC 0001E67C D0 1F 01 0C */ stfs f0, 0x10c(r31) -/* 000118F0 0001E680 D1 BF 01 10 */ stfs f13, 0x110(r31) -/* 000118F4 0001E684 38 00 00 01 */ li r0, 0x1 -/* 000118F8 0001E688 D3 FF 00 FC */ stfs f31, 0xfc(r31) -/* 000118FC 0001E68C 90 1F 00 80 */ stw r0, 0x80(r31) -/* 00011900 0001E690 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 00011904 0001E694 7C 08 03 A6 */ mtlr r0 -/* 00011908 0001E698 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 0001190C 0001E69C E3 E1 00 10 */ psq_l f31, 0x10(r1), 0, qr0 -/* 00011910 0001E6A0 38 21 00 18 */ addi r1, r1, 0x18 -/* 00011914 0001E6A4 4E 80 00 20 */ blr -.endfn SetVRotateSpeed__20SelectCarCameraMoverf - -# .text:0x11918 | size: 0xCC -.fn SetHRotateSpeed__20SelectCarCameraMoverf, global -/* 00011918 0001E6A8 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0001191C 0001E6AC 7C 08 02 A6 */ mflr r0 -/* 00011920 0001E6B0 F3 E1 00 10 */ psq_st f31, 0x10(r1), 0, qr0 -.L_00011924: -/* 00011924 0001E6B4 BF C1 00 08 */ stmw r30, 0x8(r1) -.L_00011928: -/* 00011928 0001E6B8 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0001192C 0001E6BC 7C 7F 1B 78 */ mr r31, r3 -/* 00011930 0001E6C0 FF E0 08 90 */ fmr f31, f1 -/* 00011934 0001E6C4 80 1F 00 80 */ lwz r0, 0x80(r31) -/* 00011938 0001E6C8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0001193C 0001E6CC 41 82 19 CC */ beq .L_00013308 -/* 00011940 0001E6D0 2C 00 00 01 */ cmpwi r0, 0x1 -/* 00011944 0001E6D4 41 82 19 C0 */ beq .L_00013304 -/* 00011948 0001E6D8 3D 20 00 00 */ lis r9, kSelectCarDefaultFOVH@ha -.L_0001194C: -/* 0001194C 0001E6DC 3F C0 00 00 */ lis r30, kSelectCarDefaultRollH@ha -/* 00011950 0001E6E0 3D 60 00 00 */ lis r11, kSelectCarDefaultLookAtZH@ha -/* 00011954 0001E6E4 C0 1E 00 00 */ lfs f0, kSelectCarDefaultRollH@l(r30) -/* 00011958 0001E6E8 C1 09 00 00 */ lfs f8, kSelectCarDefaultFOVH@l(r9) -/* 0001195C 0001E6EC C0 EB 00 00 */ lfs f7, kSelectCarDefaultLookAtZH@l(r11) -/* 00011960 0001E6F0 FC 40 00 90 */ fmr f2, f0 -/* 00011964 0001E6F4 C1 3F 00 98 */ lfs f9, 0x98(r31) -.L_00011968: -/* 00011968 0001E6F8 C1 BF 00 A4 */ lfs f13, 0xa4(r31) -.L_0001196C: -/* 0001196C 0001E6FC C1 5F 00 9C */ lfs f10, 0x9c(r31) -/* 00011970 0001E700 FC 20 48 90 */ fmr f1, f9 -/* 00011974 0001E704 C1 7F 00 A0 */ lfs f11, 0xa0(r31) -.L_00011978: -/* 00011978 0001E708 C1 9F 00 A8 */ lfs f12, 0xa8(r31) -.L_0001197C: -/* 0001197C 0001E70C D1 BF 00 C8 */ stfs f13, 0xc8(r31) -.L_00011980: -/* 00011980 0001E710 D0 1F 00 E0 */ stfs f0, 0xe0(r31) -/* 00011984 0001E714 D0 1F 00 E8 */ stfs f0, 0xe8(r31) -/* 00011988 0001E718 D0 1F 00 EC */ stfs f0, 0xec(r31) -/* 0001198C 0001E71C D1 5F 00 C0 */ stfs f10, 0xc0(r31) -/* 00011990 0001E720 D1 7F 00 C4 */ stfs f11, 0xc4(r31) -/* 00011994 0001E724 D1 9F 00 CC */ stfs f12, 0xcc(r31) -/* 00011998 0001E728 D1 1F 00 E4 */ stfs f8, 0xe4(r31) -/* 0001199C 0001E72C D0 FF 00 F0 */ stfs f7, 0xf0(r31) -/* 000119A0 0001E730 D1 3F 00 BC */ stfs f9, 0xbc(r31) -/* 000119A4 0001E734 48 01 22 1D */ bl .text+0x1221C -/* 000119A8 0001E738 3D 20 00 00 */ lis r9, kSelectCarDefaultAnimTimeH@ha -/* 000119AC 0001E73C C0 1E 00 00 */ lfs f0, kSelectCarDefaultRollH@l(r30) -/* 000119B0 0001E740 C1 A9 00 00 */ lfs f13, kSelectCarDefaultAnimTimeH@l(r9) -/* 000119B4 0001E744 D0 3F 00 E0 */ stfs f1, 0xe0(r31) -/* 000119B8 0001E748 D0 1F 01 0C */ stfs f0, 0x10c(r31) -/* 000119BC 0001E74C D1 BF 01 10 */ stfs f13, 0x110(r31) -/* 000119C0 0001E750 38 00 00 01 */ li r0, 0x1 -/* 000119C4 0001E754 D3 FF 01 00 */ stfs f31, 0x100(r31) -/* 000119C8 0001E758 90 1F 00 80 */ stw r0, 0x80(r31) -/* 000119CC 0001E75C 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 000119D0 0001E760 7C 08 03 A6 */ mtlr r0 -/* 000119D4 0001E764 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 000119D8 0001E768 E3 E1 00 10 */ psq_l f31, 0x10(r1), 0, qr0 -.L_000119DC: -/* 000119DC 0001E76C 38 21 00 18 */ addi r1, r1, 0x18 -/* 000119E0 0001E770 4E 80 00 20 */ blr -.endfn SetHRotateSpeed__20SelectCarCameraMoverf - -# .text:0x119E4 | size: 0xCC -.fn SetZoomSpeed__20SelectCarCameraMoverf, global -/* 000119E4 0001E774 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 000119E8 0001E778 7C 08 02 A6 */ mflr r0 -/* 000119EC 0001E77C F3 E1 00 10 */ psq_st f31, 0x10(r1), 0, qr0 -/* 000119F0 0001E780 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 000119F4 0001E784 90 01 00 1C */ stw r0, 0x1c(r1) -/* 000119F8 0001E788 7C 7F 1B 78 */ mr r31, r3 -/* 000119FC 0001E78C FF E0 08 90 */ fmr f31, f1 -/* 00011A00 0001E790 80 1F 00 80 */ lwz r0, 0x80(r31) -/* 00011A04 0001E794 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00011A08 0001E798 41 82 1A 98 */ beq .L_000134A0 -/* 00011A0C 0001E79C 2C 00 00 01 */ cmpwi r0, 0x1 -.L_00011A10: -/* 00011A10 0001E7A0 41 82 1A 8C */ beq .L_0001349C -/* 00011A14 0001E7A4 3D 20 00 00 */ lis r9, kSelectCarDefaultFOVZ@ha -/* 00011A18 0001E7A8 3F C0 00 00 */ lis r30, kSelectCarDefaultRollZ@ha -/* 00011A1C 0001E7AC 3D 60 00 00 */ lis r11, kSelectCarDefaultLookAtZZ@ha -/* 00011A20 0001E7B0 C0 1E 00 00 */ lfs f0, kSelectCarDefaultRollZ@l(r30) -/* 00011A24 0001E7B4 C1 09 00 00 */ lfs f8, kSelectCarDefaultFOVZ@l(r9) -/* 00011A28 0001E7B8 C0 EB 00 00 */ lfs f7, kSelectCarDefaultLookAtZZ@l(r11) -/* 00011A2C 0001E7BC FC 40 00 90 */ fmr f2, f0 -/* 00011A30 0001E7C0 C1 3F 00 98 */ lfs f9, 0x98(r31) -/* 00011A34 0001E7C4 C1 BF 00 A4 */ lfs f13, 0xa4(r31) -/* 00011A38 0001E7C8 C1 5F 00 9C */ lfs f10, 0x9c(r31) -/* 00011A3C 0001E7CC FC 20 48 90 */ fmr f1, f9 -/* 00011A40 0001E7D0 C1 7F 00 A0 */ lfs f11, 0xa0(r31) -/* 00011A44 0001E7D4 C1 9F 00 A8 */ lfs f12, 0xa8(r31) -/* 00011A48 0001E7D8 D1 BF 00 C8 */ stfs f13, 0xc8(r31) -/* 00011A4C 0001E7DC D0 1F 00 E0 */ stfs f0, 0xe0(r31) -/* 00011A50 0001E7E0 D0 1F 00 E8 */ stfs f0, 0xe8(r31) -/* 00011A54 0001E7E4 D0 1F 00 EC */ stfs f0, 0xec(r31) -/* 00011A58 0001E7E8 D1 5F 00 C0 */ stfs f10, 0xc0(r31) -/* 00011A5C 0001E7EC D1 7F 00 C4 */ stfs f11, 0xc4(r31) -/* 00011A60 0001E7F0 D1 9F 00 CC */ stfs f12, 0xcc(r31) -/* 00011A64 0001E7F4 D1 1F 00 E4 */ stfs f8, 0xe4(r31) -/* 00011A68 0001E7F8 D0 FF 00 F0 */ stfs f7, 0xf0(r31) -/* 00011A6C 0001E7FC D1 3F 00 BC */ stfs f9, 0xbc(r31) -/* 00011A70 0001E800 48 01 22 1D */ bl .text+0x1221C -/* 00011A74 0001E804 3D 20 00 00 */ lis r9, kSelectCarDefaultAnimTimeZ@ha -/* 00011A78 0001E808 C0 1E 00 00 */ lfs f0, kSelectCarDefaultRollZ@l(r30) -/* 00011A7C 0001E80C C1 A9 00 00 */ lfs f13, kSelectCarDefaultAnimTimeZ@l(r9) -/* 00011A80 0001E810 D0 3F 00 E0 */ stfs f1, 0xe0(r31) -/* 00011A84 0001E814 D0 1F 01 0C */ stfs f0, 0x10c(r31) -/* 00011A88 0001E818 D1 BF 01 10 */ stfs f13, 0x110(r31) -/* 00011A8C 0001E81C 38 00 00 01 */ li r0, 0x1 -/* 00011A90 0001E820 D3 FF 00 F8 */ stfs f31, 0xf8(r31) -/* 00011A94 0001E824 90 1F 00 80 */ stw r0, 0x80(r31) -/* 00011A98 0001E828 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 00011A9C 0001E82C 7C 08 03 A6 */ mtlr r0 -/* 00011AA0 0001E830 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 00011AA4 0001E834 E3 E1 00 10 */ psq_l f31, 0x10(r1), 0, qr0 -.L_00011AA8: -/* 00011AA8 0001E838 38 21 00 18 */ addi r1, r1, 0x18 -/* 00011AAC 0001E83C 4E 80 00 20 */ blr -.endfn SetZoomSpeed__20SelectCarCameraMoverf - -# .text:0x11AB0 | size: 0xE8 -.fn __20SelectCarCameraMoveri, global -/* 00011AB0 0001E840 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00011AB4 0001E844 7C 08 02 A6 */ mflr r0 -/* 00011AB8 0001E848 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 00011ABC 0001E84C 90 01 00 14 */ stw r0, 0x14(r1) -/* 00011AC0 0001E850 7C 7E 1B 78 */ mr r30, r3 -/* 00011AC4 0001E854 38 A0 00 09 */ li r5, 0x9 -/* 00011AC8 0001E858 48 00 1F 1D */ bl .L_000139E4 -.L_00011ACC: -/* 00011ACC 0001E85C 3D 60 00 00 */ lis r11, .rodata+0xA1C@ha -/* 00011AD0 0001E860 3D 40 00 00 */ lis r10, .rodata+0xA20@ha -/* 00011AD4 0001E864 C0 0B 0A 1C */ lfs f0, .rodata+0xA1C@l(r11) -/* 00011AD8 0001E868 3D 20 00 00 */ lis r9, _vt.20SelectCarCameraMover@ha -.L_00011ADC: -/* 00011ADC 0001E86C 39 29 00 00 */ addi r9, r9, _vt.20SelectCarCameraMover@l -/* 00011AE0 0001E870 C1 AA 0A 20 */ lfs f13, .rodata+0xA20@l(r10) -/* 00011AE4 0001E874 38 00 00 01 */ li r0, 0x1 -/* 00011AE8 0001E878 39 60 00 00 */ li r11, 0x0 -/* 00011AEC 0001E87C 91 3E 00 08 */ stw r9, 0x8(r30) -/* 00011AF0 0001E880 3D 40 00 00 */ lis r10, .rodata+0xA24@ha -/* 00011AF4 0001E884 D0 1E 01 0C */ stfs f0, 0x10c(r30) -/* 00011AF8 0001E888 39 20 00 02 */ li r9, 0x2 -.L_00011AFC: -/* 00011AFC 0001E88C D0 1E 00 8C */ stfs f0, 0x8c(r30) -.L_00011B00: -/* 00011B00 0001E890 7F C3 F3 78 */ mr r3, r30 -/* 00011B04 0001E894 D0 1E 00 90 */ stfs f0, 0x90(r30) -/* 00011B08 0001E898 D0 1E 00 94 */ stfs f0, 0x94(r30) -/* 00011B0C 0001E89C D0 1E 00 98 */ stfs f0, 0x98(r30) -/* 00011B10 0001E8A0 D0 1E 00 9C */ stfs f0, 0x9c(r30) -/* 00011B14 0001E8A4 D0 1E 00 A0 */ stfs f0, 0xa0(r30) -.L_00011B18: -/* 00011B18 0001E8A8 D0 1E 00 A4 */ stfs f0, 0xa4(r30) -/* 00011B1C 0001E8AC D0 1E 00 A8 */ stfs f0, 0xa8(r30) -/* 00011B20 0001E8B0 D0 1E 00 B0 */ stfs f0, 0xb0(r30) -.L_00011B24: -/* 00011B24 0001E8B4 D0 1E 00 B4 */ stfs f0, 0xb4(r30) -/* 00011B28 0001E8B8 D0 1E 00 B8 */ stfs f0, 0xb8(r30) -/* 00011B2C 0001E8BC D0 1E 00 BC */ stfs f0, 0xbc(r30) -/* 00011B30 0001E8C0 D0 1E 00 C0 */ stfs f0, 0xc0(r30) -/* 00011B34 0001E8C4 D0 1E 00 C4 */ stfs f0, 0xc4(r30) -/* 00011B38 0001E8C8 D0 1E 00 C8 */ stfs f0, 0xc8(r30) -/* 00011B3C 0001E8CC D0 1E 00 CC */ stfs f0, 0xcc(r30) -/* 00011B40 0001E8D0 D0 1E 00 D4 */ stfs f0, 0xd4(r30) -/* 00011B44 0001E8D4 D0 1E 00 D8 */ stfs f0, 0xd8(r30) -/* 00011B48 0001E8D8 D0 1E 00 DC */ stfs f0, 0xdc(r30) -/* 00011B4C 0001E8DC D0 1E 00 E0 */ stfs f0, 0xe0(r30) -/* 00011B50 0001E8E0 D0 1E 00 E4 */ stfs f0, 0xe4(r30) -/* 00011B54 0001E8E4 D0 1E 00 E8 */ stfs f0, 0xe8(r30) -/* 00011B58 0001E8E8 D0 1E 00 EC */ stfs f0, 0xec(r30) -/* 00011B5C 0001E8EC D0 1E 00 F0 */ stfs f0, 0xf0(r30) -/* 00011B60 0001E8F0 D0 1E 00 F8 */ stfs f0, 0xf8(r30) -/* 00011B64 0001E8F4 D0 1E 00 FC */ stfs f0, 0xfc(r30) -/* 00011B68 0001E8F8 D0 1E 01 00 */ stfs f0, 0x100(r30) -/* 00011B6C 0001E8FC 90 1E 00 80 */ stw r0, 0x80(r30) -/* 00011B70 0001E900 91 7E 00 88 */ stw r11, 0x88(r30) -/* 00011B74 0001E904 D1 BE 01 10 */ stfs f13, 0x110(r30) -/* 00011B78 0001E908 C0 0A 0A 24 */ lfs f0, .rodata+0xA24@l(r10) -/* 00011B7C 0001E90C 91 3E 01 08 */ stw r9, 0x108(r30) -/* 00011B80 0001E910 D0 1E 01 04 */ stfs f0, 0x104(r30) -/* 00011B84 0001E914 80 01 00 14 */ lwz r0, 0x14(r1) -/* 00011B88 0001E918 7C 08 03 A6 */ mtlr r0 -/* 00011B8C 0001E91C BB C1 00 08 */ lmw r30, 0x8(r1) -/* 00011B90 0001E920 38 21 00 10 */ addi r1, r1, 0x10 -/* 00011B94 0001E924 4E 80 00 20 */ blr -.endfn __20SelectCarCameraMoveri - -# .text:0x11B98 | size: 0x524 -.fn Update__20SelectCarCameraMoverf, global -/* 00011B98 0001E928 94 21 FF 48 */ stwu r1, -0xb8(r1) -/* 00011B9C 0001E92C 7C 08 02 A6 */ mflr r0 -/* 00011BA0 0001E930 F3 81 00 98 */ psq_st f28, 0x98(r1), 0, qr0 -/* 00011BA4 0001E934 F3 A1 00 A0 */ psq_st f29, 0xa0(r1), 0, qr0 -/* 00011BA8 0001E938 F3 C1 00 A8 */ psq_st f30, 0xa8(r1), 0, qr0 -/* 00011BAC 0001E93C F3 E1 00 B0 */ psq_st f31, 0xb0(r1), 0, qr0 -/* 00011BB0 0001E940 BF A1 00 8C */ stmw r29, 0x8c(r1) -/* 00011BB4 0001E944 90 01 00 BC */ stw r0, 0xbc(r1) -/* 00011BB8 0001E948 7C 7F 1B 78 */ mr r31, r3 -/* 00011BBC 0001E94C FF 80 08 90 */ fmr f28, f1 -/* 00011BC0 0001E950 80 1F 00 80 */ lwz r0, 0x80(r31) -/* 00011BC4 0001E954 3B DF 00 8C */ addi r30, r31, 0x8c -/* 00011BC8 0001E958 2C 00 00 02 */ cmpwi r0, 0x2 -/* 00011BCC 0001E95C 41 82 20 1C */ beq .L_00013BE8 -/* 00011BD0 0001E960 C0 1F 01 0C */ lfs f0, 0x10c(r31) -/* 00011BD4 0001E964 3D 20 00 00 */ lis r9, .rodata+0xA2C@ha -/* 00011BD8 0001E968 C1 A9 0A 2C */ lfs f13, .rodata+0xA2C@l(r9) -/* 00011BDC 0001E96C 3D 60 00 00 */ lis r11, .rodata+0xA28@ha -/* 00011BE0 0001E970 C1 9F 01 10 */ lfs f12, 0x110(r31) -.L_00011BE4: -/* 00011BE4 0001E974 EC 00 E0 2A */ fadds f0, f0, f28 -.L_00011BE8: -/* 00011BE8 0001E978 C3 AB 0A 28 */ lfs f29, .rodata+0xA28@l(r11) -/* 00011BEC 0001E97C FC 0C 68 00 */ fcmpu cr0, f12, f13 -/* 00011BF0 0001E980 D0 1F 01 0C */ stfs f0, 0x10c(r31) -.L_00011BF4: -/* 00011BF4 0001E984 4C 62 03 82 */ cror un, eq, lt -.L_00011BF8: -/* 00011BF8 0001E988 41 83 1C 0C */ bso .L_00013804 -.L_00011BFC: -/* 00011BFC 0001E98C FC 00 60 00 */ fcmpu cr0, f0, f12 -/* 00011C00 0001E990 4C 62 0B 82 */ cror un, eq, gt -/* 00011C04 0001E994 41 83 1C 0C */ bso .L_00013810 -/* 00011C08 0001E998 EF A0 60 24 */ fdivs f29, f0, f12 -/* 00011C0C 0001E99C C0 3F 01 04 */ lfs f1, 0x104(r31) -.L_00011C10: -/* 00011C10 0001E9A0 EF DD 07 72 */ fmuls f30, f29, f29 -/* 00011C14 0001E9A4 FC 20 08 50 */ fneg f1, f1 -.L_00011C18: -/* 00011C18 0001E9A8 EC 21 07 B2 */ fmuls f1, f1, f30 -/* 00011C1C 0001E9AC 48 00 00 01 */ bl expf -/* 00011C20 0001E9B0 80 1F 01 08 */ lwz r0, 0x108(r31) -/* 00011C24 0001E9B4 3D 00 43 30 */ lis r8, 0x4330 -/* 00011C28 0001E9B8 FF E0 08 90 */ fmr f31, f1 -/* 00011C2C 0001E9BC 6C 00 80 00 */ xoris r0, r0, 0x8000 -/* 00011C30 0001E9C0 3D 20 00 00 */ lis r9, .rodata+0xA30@ha -/* 00011C34 0001E9C4 90 01 00 84 */ stw r0, 0x84(r1) -/* 00011C38 0001E9C8 3D 40 00 00 */ lis r10, .rodata+0xA3C@ha -/* 00011C3C 0001E9CC C8 09 0A 30 */ lfd f0, .rodata+0xA30@l(r9) -.L_00011C40: -/* 00011C40 0001E9D0 91 01 00 80 */ stw r8, 0x80(r1) -/* 00011C44 0001E9D4 3D 20 00 00 */ lis r9, .rodata+0xA38@ha -/* 00011C48 0001E9D8 C1 89 0A 38 */ lfs f12, .rodata+0xA38@l(r9) -/* 00011C4C 0001E9DC C8 21 00 80 */ lfd f1, 0x80(r1) -.L_00011C50: -/* 00011C50 0001E9E0 C1 AA 0A 3C */ lfs f13, .rodata+0xA3C@l(r10) -/* 00011C54 0001E9E4 FC 21 00 28 */ fsub f1, f1, f0 -/* 00011C58 0001E9E8 FC 20 08 18 */ frsp f1, f1 -.L_00011C5C: -/* 00011C5C 0001E9EC EC 21 60 2A */ fadds f1, f1, f12 -/* 00011C60 0001E9F0 EC 21 07 B2 */ fmuls f1, f1, f30 -/* 00011C64 0001E9F4 EC 21 03 72 */ fmuls f1, f1, f13 -/* 00011C68 0001E9F8 48 00 00 01 */ bl cosf -/* 00011C6C 0001E9FC 3D 20 00 00 */ lis r9, .rodata+0xA28@ha -/* 00011C70 0001EA00 80 1F 00 80 */ lwz r0, 0x80(r31) -/* 00011C74 0001EA04 C3 C9 0A 28 */ lfs f30, .rodata+0xA28@l(r9) -/* 00011C78 0001EA08 EF FF 00 72 */ fmuls f31, f31, f1 -.L_00011C7C: -/* 00011C7C 0001EA0C 2C 00 00 01 */ cmpwi r0, 0x1 -/* 00011C80 0001EA10 EF FE F8 28 */ fsubs f31, f30, f31 -/* 00011C84 0001EA14 40 82 1E 68 */ bne .L_00013AEC -/* 00011C88 0001EA18 3D 20 00 00 */ lis r9, kSelectCarFrameRate@ha -/* 00011C8C 0001EA1C C0 1F 01 00 */ lfs f0, 0x100(r31) -/* 00011C90 0001EA20 C1 A9 00 00 */ lfs f13, kSelectCarFrameRate@l(r9) -/* 00011C94 0001EA24 3D 60 00 00 */ lis r11, CarGuysCamera@ha -.L_00011C98: -/* 00011C98 0001EA28 C1 9E 00 04 */ lfs f12, 0x4(r30) -/* 00011C9C 0001EA2C ED 7C 03 72 */ fmuls f11, f28, f13 -/* 00011CA0 0001EA30 80 0B 00 00 */ lwz r0, CarGuysCamera@l(r11) -/* 00011CA4 0001EA34 EC 00 62 FA */ fmadds f0, f0, f11, f12 -.L_00011CA8: -/* 00011CA8 0001EA38 C1 BE 00 00 */ lfs f13, 0x0(r30) -/* 00011CAC 0001EA3C D0 1E 00 04 */ stfs f0, 0x4(r30) -/* 00011CB0 0001EA40 2C 00 00 00 */ cmpwi r0, 0x0 -.L_00011CB4: -/* 00011CB4 0001EA44 C0 1F 00 FC */ lfs f0, 0xfc(r31) -/* 00011CB8 0001EA48 EC 00 6A FA */ fmadds f0, f0, f11, f13 -/* 00011CBC 0001EA4C 40 82 1C E8 */ bne .L_000139A4 -/* 00011CC0 0001EA50 3D 20 00 00 */ lis r9, kSelectCarUpperOrbitV@ha -/* 00011CC4 0001EA54 C1 A9 00 00 */ lfs f13, kSelectCarUpperOrbitV@l(r9) -/* 00011CC8 0001EA58 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00011CCC 0001EA5C 41 81 1C E4 */ bgt .L_000139B0 -/* 00011CD0 0001EA60 3D 20 00 00 */ lis r9, kSelectCarLowerOrbitV@ha -/* 00011CD4 0001EA64 C1 A9 00 00 */ lfs f13, kSelectCarLowerOrbitV@l(r9) -.L_00011CD8: -/* 00011CD8 0001EA68 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00011CDC 0001EA6C 4C 62 0B 82 */ cror un, eq, gt -/* 00011CE0 0001EA70 41 83 1C E8 */ bso .L_000139C8 -/* 00011CE4 0001EA74 FC 00 68 90 */ fmr f0, f13 -/* 00011CE8 0001EA78 D0 1E 00 00 */ stfs f0, 0x0(r30) -.L_00011CEC: -/* 00011CEC 0001EA7C 3D 20 00 00 */ lis r9, kSelectCarRadiusSpeedScale@ha -/* 00011CF0 0001EA80 C0 09 00 00 */ lfs f0, kSelectCarRadiusSpeedScale@l(r9) -/* 00011CF4 0001EA84 3D 60 00 00 */ lis r11, CarGuysCamera@ha -/* 00011CF8 0001EA88 80 0B 00 00 */ lwz r0, CarGuysCamera@l(r11) -/* 00011CFC 0001EA8C C1 9F 00 F8 */ lfs f12, 0xf8(r31) -/* 00011D00 0001EA90 EC 0B 00 32 */ fmuls f0, f11, f0 -/* 00011D04 0001EA94 C1 BE 00 08 */ lfs f13, 0x8(r30) -/* 00011D08 0001EA98 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00011D0C 0001EA9C EC 0C 68 3A */ fmadds f0, f12, f0, f13 -/* 00011D10 0001EAA0 40 82 1D 3C */ bne .L_00013A4C -/* 00011D14 0001EAA4 3D 20 00 00 */ lis r9, kSelectCarUpperRadius@ha -/* 00011D18 0001EAA8 C1 A9 00 00 */ lfs f13, kSelectCarUpperRadius@l(r9) -/* 00011D1C 0001EAAC FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00011D20 0001EAB0 41 81 1D 38 */ bgt .L_00013A58 -/* 00011D24 0001EAB4 3D 20 00 00 */ lis r9, kSelectCarLowerRadius@ha -/* 00011D28 0001EAB8 C1 A9 00 00 */ lfs f13, kSelectCarLowerRadius@l(r9) -/* 00011D2C 0001EABC FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00011D30 0001EAC0 4C 62 0B 82 */ cror un, eq, gt -/* 00011D34 0001EAC4 41 83 1D 3C */ bso .L_00013A70 -/* 00011D38 0001EAC8 FC 00 68 90 */ fmr f0, f13 -/* 00011D3C 0001EACC D0 1E 00 08 */ stfs f0, 0x8(r30) -/* 00011D40 0001EAD0 3D 20 00 00 */ lis r9, .rodata+0xA28@ha -/* 00011D44 0001EAD4 C1 89 0A 28 */ lfs f12, .rodata+0xA28@l(r9) -/* 00011D48 0001EAD8 38 81 00 18 */ addi r4, r1, 0x18 -/* 00011D4C 0001EADC C0 1F 00 E0 */ lfs f0, 0xe0(r31) -/* 00011D50 0001EAE0 38 61 00 08 */ addi r3, r1, 0x8 -.L_00011D54: -/* 00011D54 0001EAE4 C1 BF 00 BC */ lfs f13, 0xbc(r31) -/* 00011D58 0001EAE8 ED 8C F8 28 */ fsubs f12, f12, f31 -/* 00011D5C 0001EAEC EC 1F 00 32 */ fmuls f0, f31, f0 -/* 00011D60 0001EAF0 ED AC 03 7A */ fmadds f13, f12, f13, f0 -/* 00011D64 0001EAF4 D1 BE 00 0C */ stfs f13, 0xc(r30) -/* 00011D68 0001EAF8 C0 1F 00 E4 */ lfs f0, 0xe4(r31) -/* 00011D6C 0001EAFC C1 BF 00 C0 */ lfs f13, 0xc0(r31) -/* 00011D70 0001EB00 EC 1F 00 32 */ fmuls f0, f31, f0 -/* 00011D74 0001EB04 ED 8C 03 7A */ fmadds f12, f12, f13, f0 -/* 00011D78 0001EB08 D1 9E 00 10 */ stfs f12, 0x10(r30) -/* 00011D7C 0001EB0C C1 7F 00 C4 */ lfs f11, 0xc4(r31) -/* 00011D80 0001EB10 C1 5F 00 C8 */ lfs f10, 0xc8(r31) -/* 00011D84 0001EB14 C1 3F 00 CC */ lfs f9, 0xcc(r31) -/* 00011D88 0001EB18 C0 1F 00 E8 */ lfs f0, 0xe8(r31) -/* 00011D8C 0001EB1C C1 BF 00 EC */ lfs f13, 0xec(r31) -/* 00011D90 0001EB20 C1 9F 00 F0 */ lfs f12, 0xf0(r31) -/* 00011D94 0001EB24 EC 00 58 28 */ fsubs f0, f0, f11 -/* 00011D98 0001EB28 ED AD 50 28 */ fsubs f13, f13, f10 -/* 00011D9C 0001EB2C D0 01 00 18 */ stfs f0, 0x18(r1) -/* 00011DA0 0001EB30 ED 8C 48 28 */ fsubs f12, f12, f9 -/* 00011DA4 0001EB34 D1 A1 00 1C */ stfs f13, 0x1c(r1) -/* 00011DA8 0001EB38 D1 81 00 20 */ stfs f12, 0x20(r1) -/* 00011DAC 0001EB3C 48 00 00 01 */ bl __8bVector3RC8bVector3 -/* 00011DB0 0001EB40 39 21 00 08 */ addi r9, r1, 0x8 -/* 00011DB4 0001EB44 C1 41 00 08 */ lfs f10, 0x8(r1) -/* 00011DB8 0001EB48 C0 09 00 08 */ lfs f0, 0x8(r9) -/* 00011DBC 0001EB4C 38 61 00 18 */ addi r3, r1, 0x18 -/* 00011DC0 0001EB50 C1 21 00 0C */ lfs f9, 0xc(r1) -/* 00011DC4 0001EB54 ED 4A 07 F2 */ fmuls f10, f10, f31 -/* 00011DC8 0001EB58 C1 7F 00 C4 */ lfs f11, 0xc4(r31) -/* 00011DCC 0001EB5C EC 00 07 F2 */ fmuls f0, f0, f31 -/* 00011DD0 0001EB60 C1 BF 00 C8 */ lfs f13, 0xc8(r31) -/* 00011DD4 0001EB64 ED 29 07 F2 */ fmuls f9, f9, f31 -/* 00011DD8 0001EB68 C1 9F 00 CC */ lfs f12, 0xcc(r31) -/* 00011DDC 0001EB6C ED 6B 50 2A */ fadds f11, f11, f10 -/* 00011DE0 0001EB70 D0 09 00 08 */ stfs f0, 0x8(r9) -/* 00011DE4 0001EB74 ED AD 48 2A */ fadds f13, f13, f9 -/* 00011DE8 0001EB78 ED 8C 00 2A */ fadds f12, f12, f0 -/* 00011DEC 0001EB7C D1 61 00 28 */ stfs f11, 0x28(r1) -/* 00011DF0 0001EB80 D1 A1 00 2C */ stfs f13, 0x2c(r1) -/* 00011DF4 0001EB84 38 81 00 28 */ addi r4, r1, 0x28 -/* 00011DF8 0001EB88 D1 81 00 30 */ stfs f12, 0x30(r1) -/* 00011DFC 0001EB8C D1 41 00 08 */ stfs f10, 0x8(r1) -/* 00011E00 0001EB90 D1 21 00 0C */ stfs f9, 0xc(r1) -/* 00011E04 0001EB94 48 00 00 01 */ bl __8bVector3RC8bVector3 -/* 00011E08 0001EB98 3D 60 00 00 */ lis r11, kSelectCarWrapAngle@ha -/* 00011E0C 0001EB9C C1 A1 00 18 */ lfs f13, 0x18(r1) -/* 00011E10 0001EBA0 C1 6B 00 00 */ lfs f11, kSelectCarWrapAngle@l(r11) -/* 00011E14 0001EBA4 C1 81 00 1C */ lfs f12, 0x1c(r1) -/* 00011E18 0001EBA8 C0 01 00 20 */ lfs f0, 0x20(r1) -/* 00011E1C 0001EBAC C1 5E 00 04 */ lfs f10, 0x4(r30) -/* 00011E20 0001EBB0 D1 BE 00 14 */ stfs f13, 0x14(r30) -/* 00011E24 0001EBB4 FC 0B 50 00 */ fcmpu cr0, f11, f10 -/* 00011E28 0001EBB8 D1 9E 00 18 */ stfs f12, 0x18(r30) -/* 00011E2C 0001EBBC D0 1E 00 1C */ stfs f0, 0x1c(r30) -/* 00011E30 0001EBC0 4C 62 0B 82 */ cror un, eq, gt -/* 00011E34 0001EBC4 41 83 1E 40 */ bso .L_00013C74 -/* 00011E38 0001EBC8 EC 0A 58 28 */ fsubs f0, f10, f11 -/* 00011E3C 0001EBCC D0 1E 00 04 */ stfs f0, 0x4(r30) -/* 00011E40 0001EBD0 3D 20 00 00 */ lis r9, .rodata+0xA2C@ha -/* 00011E44 0001EBD4 C1 BE 00 04 */ lfs f13, 0x4(r30) -/* 00011E48 0001EBD8 C0 09 0A 2C */ lfs f0, .rodata+0xA2C@l(r9) -/* 00011E4C 0001EBDC FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 00011E50 0001EBE0 4C 62 0B 82 */ cror un, eq, gt -/* 00011E54 0001EBE4 41 83 20 1C */ bso .L_00013E70 -/* 00011E58 0001EBE8 C0 0B 00 00 */ lfs f0, kSelectCarWrapAngle@l(r11) -/* 00011E5C 0001EBEC EC 0D 00 2A */ fadds f0, f13, f0 -.L_00011E60: -/* 00011E60 0001EBF0 D0 1E 00 04 */ stfs f0, 0x4(r30) -.L_00011E64: -/* 00011E64 0001EBF4 48 01 20 1C */ b .text+0x1201C -.L_00011E68: -/* 00011E68 0001EBF8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00011E6C 0001EBFC 40 82 20 1C */ bne .L_00013E88 -/* 00011E70 0001EC00 C0 1F 00 D4 */ lfs f0, 0xd4(r31) -.L_00011E74: -/* 00011E74 0001EC04 ED 9E F8 28 */ fsubs f12, f30, f31 -.L_00011E78: -/* 00011E78 0001EC08 C1 BF 00 B0 */ lfs f13, 0xb0(r31) -/* 00011E7C 0001EC0C 38 81 00 18 */ addi r4, r1, 0x18 -/* 00011E80 0001EC10 EC 1F 00 32 */ fmuls f0, f31, f0 -/* 00011E84 0001EC14 38 61 00 08 */ addi r3, r1, 0x8 -/* 00011E88 0001EC18 ED AC 03 7A */ fmadds f13, f12, f13, f0 -/* 00011E8C 0001EC1C D1 BE 00 00 */ stfs f13, 0x0(r30) -/* 00011E90 0001EC20 C0 1F 00 D8 */ lfs f0, 0xd8(r31) -/* 00011E94 0001EC24 C1 BF 00 B4 */ lfs f13, 0xb4(r31) -/* 00011E98 0001EC28 EC 1F 00 32 */ fmuls f0, f31, f0 -/* 00011E9C 0001EC2C ED AC 03 7A */ fmadds f13, f12, f13, f0 -/* 00011EA0 0001EC30 D1 BE 00 04 */ stfs f13, 0x4(r30) -/* 00011EA4 0001EC34 C0 1F 00 DC */ lfs f0, 0xdc(r31) -/* 00011EA8 0001EC38 C1 BF 00 B8 */ lfs f13, 0xb8(r31) -/* 00011EAC 0001EC3C EC 1F 00 32 */ fmuls f0, f31, f0 -/* 00011EB0 0001EC40 ED AC 03 7A */ fmadds f13, f12, f13, f0 -/* 00011EB4 0001EC44 D1 BE 00 08 */ stfs f13, 0x8(r30) -/* 00011EB8 0001EC48 C0 1F 00 E0 */ lfs f0, 0xe0(r31) -/* 00011EBC 0001EC4C C1 BF 00 BC */ lfs f13, 0xbc(r31) -.L_00011EC0: -/* 00011EC0 0001EC50 EC 1F 00 32 */ fmuls f0, f31, f0 -/* 00011EC4 0001EC54 ED AC 03 7A */ fmadds f13, f12, f13, f0 -/* 00011EC8 0001EC58 D1 BE 00 0C */ stfs f13, 0xc(r30) -/* 00011ECC 0001EC5C C0 1F 00 E4 */ lfs f0, 0xe4(r31) -/* 00011ED0 0001EC60 C1 BF 00 C0 */ lfs f13, 0xc0(r31) -/* 00011ED4 0001EC64 EC 1F 00 32 */ fmuls f0, f31, f0 -/* 00011ED8 0001EC68 ED 8C 03 7A */ fmadds f12, f12, f13, f0 -/* 00011EDC 0001EC6C D1 9E 00 10 */ stfs f12, 0x10(r30) -/* 00011EE0 0001EC70 C1 7F 00 C4 */ lfs f11, 0xc4(r31) -/* 00011EE4 0001EC74 C1 5F 00 C8 */ lfs f10, 0xc8(r31) -/* 00011EE8 0001EC78 C1 3F 00 CC */ lfs f9, 0xcc(r31) -/* 00011EEC 0001EC7C C0 1F 00 E8 */ lfs f0, 0xe8(r31) -/* 00011EF0 0001EC80 C1 BF 00 EC */ lfs f13, 0xec(r31) -/* 00011EF4 0001EC84 C1 9F 00 F0 */ lfs f12, 0xf0(r31) -/* 00011EF8 0001EC88 EC 00 58 28 */ fsubs f0, f0, f11 -/* 00011EFC 0001EC8C ED AD 50 28 */ fsubs f13, f13, f10 -/* 00011F00 0001EC90 D0 01 00 18 */ stfs f0, 0x18(r1) -/* 00011F04 0001EC94 ED 8C 48 28 */ fsubs f12, f12, f9 -/* 00011F08 0001EC98 D1 A1 00 1C */ stfs f13, 0x1c(r1) -/* 00011F0C 0001EC9C D1 81 00 20 */ stfs f12, 0x20(r1) -.L_00011F10: -/* 00011F10 0001ECA0 48 00 00 01 */ bl __8bVector3RC8bVector3 -/* 00011F14 0001ECA4 39 21 00 08 */ addi r9, r1, 0x8 -/* 00011F18 0001ECA8 C1 41 00 08 */ lfs f10, 0x8(r1) -/* 00011F1C 0001ECAC C0 09 00 08 */ lfs f0, 0x8(r9) -/* 00011F20 0001ECB0 38 61 00 18 */ addi r3, r1, 0x18 -/* 00011F24 0001ECB4 C1 21 00 0C */ lfs f9, 0xc(r1) -/* 00011F28 0001ECB8 ED 4A 07 F2 */ fmuls f10, f10, f31 -/* 00011F2C 0001ECBC C1 7F 00 C4 */ lfs f11, 0xc4(r31) -/* 00011F30 0001ECC0 EC 00 07 F2 */ fmuls f0, f0, f31 -/* 00011F34 0001ECC4 C1 BF 00 C8 */ lfs f13, 0xc8(r31) -/* 00011F38 0001ECC8 ED 29 07 F2 */ fmuls f9, f9, f31 -/* 00011F3C 0001ECCC C1 9F 00 CC */ lfs f12, 0xcc(r31) -/* 00011F40 0001ECD0 ED 6B 50 2A */ fadds f11, f11, f10 -/* 00011F44 0001ECD4 D0 09 00 08 */ stfs f0, 0x8(r9) -/* 00011F48 0001ECD8 ED AD 48 2A */ fadds f13, f13, f9 -/* 00011F4C 0001ECDC ED 8C 00 2A */ fadds f12, f12, f0 -/* 00011F50 0001ECE0 D1 61 00 28 */ stfs f11, 0x28(r1) -/* 00011F54 0001ECE4 D1 A1 00 2C */ stfs f13, 0x2c(r1) -/* 00011F58 0001ECE8 38 81 00 28 */ addi r4, r1, 0x28 -/* 00011F5C 0001ECEC D1 81 00 30 */ stfs f12, 0x30(r1) -/* 00011F60 0001ECF0 D1 41 00 08 */ stfs f10, 0x8(r1) -.L_00011F64: -/* 00011F64 0001ECF4 D1 21 00 0C */ stfs f9, 0xc(r1) -/* 00011F68 0001ECF8 48 00 00 01 */ bl __8bVector3RC8bVector3 -.L_00011F6C: -/* 00011F6C 0001ECFC 3D 60 00 00 */ lis r11, kSelectCarWrapAngle@ha -/* 00011F70 0001ED00 C1 A1 00 18 */ lfs f13, 0x18(r1) -/* 00011F74 0001ED04 C1 6B 00 00 */ lfs f11, kSelectCarWrapAngle@l(r11) -/* 00011F78 0001ED08 C1 81 00 1C */ lfs f12, 0x1c(r1) -.L_00011F7C: -/* 00011F7C 0001ED0C C0 01 00 20 */ lfs f0, 0x20(r1) -.L_00011F80: -/* 00011F80 0001ED10 C1 5E 00 04 */ lfs f10, 0x4(r30) -/* 00011F84 0001ED14 D1 BE 00 14 */ stfs f13, 0x14(r30) -.L_00011F88: -/* 00011F88 0001ED18 FC 0B 50 00 */ fcmpu cr0, f11, f10 -/* 00011F8C 0001ED1C D1 9E 00 18 */ stfs f12, 0x18(r30) -/* 00011F90 0001ED20 D0 1E 00 1C */ stfs f0, 0x1c(r30) -/* 00011F94 0001ED24 4C 62 0B 82 */ cror un, eq, gt -/* 00011F98 0001ED28 41 83 1F A4 */ bso .L_00013F3C -/* 00011F9C 0001ED2C EC 0A 58 28 */ fsubs f0, f10, f11 -/* 00011FA0 0001ED30 D0 1E 00 04 */ stfs f0, 0x4(r30) -/* 00011FA4 0001ED34 3D 20 00 00 */ lis r9, .rodata+0xA2C@ha -/* 00011FA8 0001ED38 C1 BE 00 04 */ lfs f13, 0x4(r30) -/* 00011FAC 0001ED3C C1 89 0A 2C */ lfs f12, .rodata+0xA2C@l(r9) -/* 00011FB0 0001ED40 FC 0D 60 00 */ fcmpu cr0, f13, f12 -/* 00011FB4 0001ED44 4C 62 0B 82 */ cror un, eq, gt -/* 00011FB8 0001ED48 41 83 1F C8 */ bso .L_00013F80 -/* 00011FBC 0001ED4C C0 0B 00 00 */ lfs f0, kSelectCarWrapAngle@l(r11) -/* 00011FC0 0001ED50 EC 0D 00 2A */ fadds f0, f13, f0 -/* 00011FC4 0001ED54 D0 1E 00 04 */ stfs f0, 0x4(r30) -/* 00011FC8 0001ED58 C1 AB 00 00 */ lfs f13, kSelectCarWrapAngle@l(r11) -/* 00011FCC 0001ED5C C0 1E 00 0C */ lfs f0, 0xc(r30) -/* 00011FD0 0001ED60 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 00011FD4 0001ED64 4C 62 0B 82 */ cror un, eq, gt -/* 00011FD8 0001ED68 41 83 1F E4 */ bso .L_00013FBC -/* 00011FDC 0001ED6C EC 00 68 28 */ fsubs f0, f0, f13 -/* 00011FE0 0001ED70 D0 1E 00 0C */ stfs f0, 0xc(r30) -.L_00011FE4: -/* 00011FE4 0001ED74 C1 BE 00 0C */ lfs f13, 0xc(r30) -/* 00011FE8 0001ED78 FC 0D 60 00 */ fcmpu cr0, f13, f12 -/* 00011FEC 0001ED7C 4C 62 0B 82 */ cror un, eq, gt -.L_00011FF0: -/* 00011FF0 0001ED80 41 83 20 00 */ bso .L_00013FF0 -/* 00011FF4 0001ED84 C0 0B 00 00 */ lfs f0, kSelectCarWrapAngle@l(r11) -/* 00011FF8 0001ED88 EC 0D 00 2A */ fadds f0, f13, f0 -.L_00011FFC: -/* 00011FFC 0001ED8C D0 1E 00 0C */ stfs f0, 0xc(r30) -/* 00012000 0001ED90 80 1F 00 80 */ lwz r0, 0x80(r31) -/* 00012004 0001ED94 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00012008 0001ED98 40 82 20 1C */ bne .L_00014024 -/* 0001200C 0001ED9C FC 1D F0 00 */ fcmpu cr0, f29, f30 -/* 00012010 0001EDA0 41 80 20 1C */ blt .L_0001402C -/* 00012014 0001EDA4 38 00 00 02 */ li r0, 0x2 -/* 00012018 0001EDA8 90 1F 00 80 */ stw r0, 0x80(r31) -/* 0001201C 0001EDAC 3B A1 00 38 */ addi r29, r1, 0x38 -/* 00012020 0001EDB0 7F C4 F3 78 */ mr r4, r30 -/* 00012024 0001EDB4 7F A3 EB 78 */ mr r3, r29 -/* 00012028 0001EDB8 48 01 22 95 */ bl .text+0x12294 -/* 0001202C 0001EDBC 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha -/* 00012030 0001EDC0 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) -/* 00012034 0001EDC4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00012038 0001EDC8 40 82 20 88 */ bne .L_000140C0 -/* 0001203C 0001EDCC 3D 20 00 00 */ lis r9, .rodata+0xA40@ha -/* 00012040 0001EDD0 C0 1E 00 10 */ lfs f0, 0x10(r30) -/* 00012044 0001EDD4 C1 89 0A 40 */ lfs f12, .rodata+0xA40@l(r9) -/* 00012048 0001EDD8 3C 00 B6 0B */ lis r0, 0xb60b -/* 0001204C 0001EDDC 60 00 60 B7 */ ori r0, r0, 0x60b7 -/* 00012050 0001EDE0 EC 00 03 32 */ fmuls f0, f0, f12 -/* 00012054 0001EDE4 81 5F 00 1C */ lwz r10, 0x1c(r31) -.L_00012058: -/* 00012058 0001EDE8 FD A0 00 1E */ fctiwz f13, f0 -/* 0001205C 0001EDEC D9 A1 00 80 */ stfd f13, 0x80(r1) -/* 00012060 0001EDF0 81 21 00 84 */ lwz r9, 0x84(r1) -/* 00012064 0001EDF4 7C 09 00 96 */ mulhw r0, r9, r0 -/* 00012068 0001EDF8 7D 2B FE 70 */ srawi r11, r9, 31 -/* 0001206C 0001EDFC 7C 00 4A 14 */ add r0, r0, r9 -/* 00012070 0001EE00 7C 00 46 70 */ srawi r0, r0, 8 -/* 00012074 0001EE04 7C 0B 00 50 */ subf r0, r11, r0 -/* 00012078 0001EE08 B0 0A 00 C4 */ sth r0, 0xc4(r10) -/* 0001207C 0001EE0C C0 1E 00 08 */ lfs f0, 0x8(r30) -/* 00012080 0001EE10 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 00012084 0001EE14 D0 09 00 B0 */ stfs f0, 0xb0(r9) -/* 00012088 0001EE18 80 7F 00 1C */ lwz r3, 0x1c(r31) -.L_0001208C: -/* 0001208C 0001EE1C 7F A4 EB 78 */ mr r4, r29 -/* 00012090 0001EE20 FC 20 E0 90 */ fmr f1, f28 -/* 00012094 0001EE24 48 00 04 ED */ bl .L_00012580 -/* 00012098 0001EE28 80 01 00 BC */ lwz r0, 0xbc(r1) -/* 0001209C 0001EE2C 7C 08 03 A6 */ mtlr r0 -/* 000120A0 0001EE30 BB A1 00 8C */ lmw r29, 0x8c(r1) -/* 000120A4 0001EE34 E3 81 00 98 */ psq_l f28, 0x98(r1), 0, qr0 -/* 000120A8 0001EE38 E3 A1 00 A0 */ psq_l f29, 0xa0(r1), 0, qr0 -/* 000120AC 0001EE3C E3 C1 00 A8 */ psq_l f30, 0xa8(r1), 0, qr0 -/* 000120B0 0001EE40 E3 E1 00 B0 */ psq_l f31, 0xb0(r1), 0, qr0 -/* 000120B4 0001EE44 38 21 00 B8 */ addi r1, r1, 0xb8 -/* 000120B8 0001EE48 4E 80 00 20 */ blr -.endfn Update__20SelectCarCameraMoverf - -# .text:0x120BC | size: 0x3C -.fn SetCurrentOrientation__20SelectCarCameraMoverR8bVector3ffT1, global -/* 000120BC 0001EE4C C1 A4 00 00 */ lfs f13, 0x0(r4) -/* 000120C0 0001EE50 D1 A3 00 8C */ stfs f13, 0x8c(r3) -/* 000120C4 0001EE54 C0 04 00 04 */ lfs f0, 0x4(r4) -/* 000120C8 0001EE58 D0 03 00 90 */ stfs f0, 0x90(r3) -/* 000120CC 0001EE5C C1 A4 00 08 */ lfs f13, 0x8(r4) -/* 000120D0 0001EE60 D0 23 00 98 */ stfs f1, 0x98(r3) -/* 000120D4 0001EE64 D1 A3 00 94 */ stfs f13, 0x94(r3) -/* 000120D8 0001EE68 D0 43 00 9C */ stfs f2, 0x9c(r3) -/* 000120DC 0001EE6C C0 05 00 08 */ lfs f0, 0x8(r5) -/* 000120E0 0001EE70 C1 A5 00 00 */ lfs f13, 0x0(r5) -/* 000120E4 0001EE74 C1 85 00 04 */ lfs f12, 0x4(r5) -/* 000120E8 0001EE78 D0 03 00 A8 */ stfs f0, 0xa8(r3) -/* 000120EC 0001EE7C D1 A3 00 A0 */ stfs f13, 0xa0(r3) -/* 000120F0 0001EE80 D1 83 00 A4 */ stfs f12, 0xa4(r3) -/* 000120F4 0001EE84 4E 80 00 20 */ blr -.endfn SetCurrentOrientation__20SelectCarCameraMoverR8bVector3ffT1 - -# .text:0x120F8 | size: 0x124 -.fn SetDesiredOrientation__20SelectCarCameraMoverR8bVector3ffT1ffi, global -/* 000120F8 0001EE88 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 000120FC 0001EE8C 7C 08 02 A6 */ mflr r0 -/* 00012100 0001EE90 F3 E1 00 10 */ psq_st f31, 0x10(r1), 0, qr0 -/* 00012104 0001EE94 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 00012108 0001EE98 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0001210C 0001EE9C 7C 7E 1B 78 */ mr r30, r3 -/* 00012110 0001EEA0 38 00 00 00 */ li r0, 0x0 -/* 00012114 0001EEA4 C1 7E 00 8C */ lfs f11, 0x8c(r30) -/* 00012118 0001EEA8 FF E0 18 90 */ fmr f31, f3 -/* 0001211C 0001EEAC C0 FE 00 90 */ lfs f7, 0x90(r30) -/* 00012120 0001EEB0 C1 1E 00 94 */ lfs f8, 0x94(r30) -/* 00012124 0001EEB4 C1 3E 00 98 */ lfs f9, 0x98(r30) -/* 00012128 0001EEB8 C1 5E 00 A8 */ lfs f10, 0xa8(r30) -/* 0001212C 0001EEBC C0 1E 00 9C */ lfs f0, 0x9c(r30) -/* 00012130 0001EEC0 C1 BE 00 A0 */ lfs f13, 0xa0(r30) -/* 00012134 0001EEC4 C1 9E 00 A4 */ lfs f12, 0xa4(r30) -/* 00012138 0001EEC8 D1 7E 00 D4 */ stfs f11, 0xd4(r30) -.L_0001213C: -/* 0001213C 0001EECC D0 FE 00 D8 */ stfs f7, 0xd8(r30) -/* 00012140 0001EED0 D1 1E 00 DC */ stfs f8, 0xdc(r30) -.L_00012144: -/* 00012144 0001EED4 D1 3E 00 E0 */ stfs f9, 0xe0(r30) -/* 00012148 0001EED8 90 1E 00 80 */ stw r0, 0x80(r30) -/* 0001214C 0001EEDC D0 FE 00 B4 */ stfs f7, 0xb4(r30) -/* 00012150 0001EEE0 D1 1E 00 B8 */ stfs f8, 0xb8(r30) -/* 00012154 0001EEE4 D1 3E 00 BC */ stfs f9, 0xbc(r30) -/* 00012158 0001EEE8 D1 5E 00 CC */ stfs f10, 0xcc(r30) -/* 0001215C 0001EEEC D1 5E 00 F0 */ stfs f10, 0xf0(r30) -/* 00012160 0001EEF0 D1 7E 00 B0 */ stfs f11, 0xb0(r30) -/* 00012164 0001EEF4 D0 1E 00 E4 */ stfs f0, 0xe4(r30) -/* 00012168 0001EEF8 D0 1E 00 C0 */ stfs f0, 0xc0(r30) -/* 0001216C 0001EEFC D1 BE 00 C4 */ stfs f13, 0xc4(r30) -/* 00012170 0001EF00 D1 9E 00 C8 */ stfs f12, 0xc8(r30) -/* 00012174 0001EF04 D1 BE 00 E8 */ stfs f13, 0xe8(r30) -/* 00012178 0001EF08 D1 9E 00 EC */ stfs f12, 0xec(r30) -/* 0001217C 0001EF0C C1 84 00 00 */ lfs f12, 0x0(r4) -/* 00012180 0001EF10 D1 9E 00 D4 */ stfs f12, 0xd4(r30) -/* 00012184 0001EF14 C0 04 00 04 */ lfs f0, 0x4(r4) -/* 00012188 0001EF18 D0 1E 00 D8 */ stfs f0, 0xd8(r30) -.L_0001218C: -/* 0001218C 0001EF1C C1 A4 00 08 */ lfs f13, 0x8(r4) -/* 00012190 0001EF20 D0 3E 00 E0 */ stfs f1, 0xe0(r30) -/* 00012194 0001EF24 D1 BE 00 DC */ stfs f13, 0xdc(r30) -/* 00012198 0001EF28 FC 20 58 90 */ fmr f1, f11 -/* 0001219C 0001EF2C D0 5E 00 E4 */ stfs f2, 0xe4(r30) -/* 000121A0 0001EF30 FC 40 60 90 */ fmr f2, f12 -/* 000121A4 0001EF34 C0 05 00 00 */ lfs f0, 0x0(r5) -/* 000121A8 0001EF38 C1 85 00 08 */ lfs f12, 0x8(r5) -/* 000121AC 0001EF3C C1 A5 00 04 */ lfs f13, 0x4(r5) -/* 000121B0 0001EF40 D0 1E 00 E8 */ stfs f0, 0xe8(r30) -/* 000121B4 0001EF44 D0 9E 01 04 */ stfs f4, 0x104(r30) -/* 000121B8 0001EF48 90 DE 01 08 */ stw r6, 0x108(r30) -/* 000121BC 0001EF4C D1 BE 00 EC */ stfs f13, 0xec(r30) -/* 000121C0 0001EF50 D1 9E 00 F0 */ stfs f12, 0xf0(r30) -.L_000121C4: -/* 000121C4 0001EF54 48 01 22 1D */ bl .text+0x1221C -/* 000121C8 0001EF58 D0 3E 00 D4 */ stfs f1, 0xd4(r30) -/* 000121CC 0001EF5C 7F C3 F3 78 */ mr r3, r30 -/* 000121D0 0001EF60 C0 5E 00 D8 */ lfs f2, 0xd8(r30) -/* 000121D4 0001EF64 C0 3E 00 B4 */ lfs f1, 0xb4(r30) -/* 000121D8 0001EF68 48 01 22 1D */ bl .text+0x1221C -/* 000121DC 0001EF6C D0 3E 00 D8 */ stfs f1, 0xd8(r30) -/* 000121E0 0001EF70 7F C3 F3 78 */ mr r3, r30 -.L_000121E4: -/* 000121E4 0001EF74 C0 3E 00 BC */ lfs f1, 0xbc(r30) -/* 000121E8 0001EF78 C0 5E 00 E0 */ lfs f2, 0xe0(r30) -.L_000121EC: -/* 000121EC 0001EF7C 48 01 22 1D */ bl .text+0x1221C -/* 000121F0 0001EF80 3D 20 00 00 */ lis r9, .rodata+0xA44@ha -/* 000121F4 0001EF84 D0 3E 00 E0 */ stfs f1, 0xe0(r30) -/* 000121F8 0001EF88 C0 09 0A 44 */ lfs f0, .rodata+0xA44@l(r9) -/* 000121FC 0001EF8C D3 FE 01 10 */ stfs f31, 0x110(r30) -/* 00012200 0001EF90 D0 1E 01 0C */ stfs f0, 0x10c(r30) -.L_00012204: -/* 00012204 0001EF94 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 00012208 0001EF98 7C 08 03 A6 */ mtlr r0 -/* 0001220C 0001EF9C BB C1 00 08 */ lmw r30, 0x8(r1) -/* 00012210 0001EFA0 E3 E1 00 10 */ psq_l f31, 0x10(r1), 0, qr0 -/* 00012214 0001EFA4 38 21 00 18 */ addi r1, r1, 0x18 -/* 00012218 0001EFA8 4E 80 00 20 */ blr -.endfn SetDesiredOrientation__20SelectCarCameraMoverR8bVector3ffT1ffi - -# .text:0x1221C | size: 0x78 -.fn FindBestAngleGoal__20SelectCarCameraMoverff, global -/* 0001221C 0001EFAC 3D 20 00 00 */ lis r9, kSelectCarWrapAngle@ha -/* 00012220 0001EFB0 EC 01 10 28 */ fsubs f0, f1, f2 -/* 00012224 0001EFB4 C1 A9 00 00 */ lfs f13, kSelectCarWrapAngle@l(r9) -/* 00012228 0001EFB8 FD 60 02 10 */ fabs f11, f0 -/* 0001222C 0001EFBC ED 42 68 2A */ fadds f10, f2, f13 -/* 00012230 0001EFC0 EC 01 50 28 */ fsubs f0, f1, f10 -/* 00012234 0001EFC4 ED A2 68 28 */ fsubs f13, f2, f13 -.L_00012238: -/* 00012238 0001EFC8 FD 80 02 10 */ fabs f12, f0 -/* 0001223C 0001EFCC EC 21 68 28 */ fsubs f1, f1, f13 -/* 00012240 0001EFD0 FC 00 0A 10 */ fabs f0, f1 -/* 00012244 0001EFD4 FC 0C 58 00 */ fcmpu cr0, f12, f11 -/* 00012248 0001EFD8 4C 62 0B 82 */ cror un, eq, gt -/* 0001224C 0001EFDC 41 83 22 64 */ bso .L_000144B0 -/* 00012250 0001EFE0 FC 0C 00 00 */ fcmpu cr0, f12, f0 -/* 00012254 0001EFE4 4C 62 0B 82 */ cror un, eq, gt -/* 00012258 0001EFE8 41 83 22 64 */ bso .L_000144BC -/* 0001225C 0001EFEC FC 20 50 90 */ fmr f1, f10 -/* 00012260 0001EFF0 4E 80 00 20 */ blr -/* 00012264 0001EFF4 FC 00 58 00 */ fcmpu cr0, f0, f11 -/* 00012268 0001EFF8 4C 62 0B 82 */ cror un, eq, gt -/* 0001226C 0001EFFC 41 83 22 8C */ bso .L_000144F8 -/* 00012270 0001F000 FC 00 60 00 */ fcmpu cr0, f0, f12 -/* 00012274 0001F004 4C 62 0B 82 */ cror un, eq, gt -/* 00012278 0001F008 41 83 22 8C */ bso .L_00014504 -/* 0001227C 0001F00C 3D 20 00 00 */ lis r9, kSelectCarWrapAngle@ha -/* 00012280 0001F010 C0 09 00 00 */ lfs f0, kSelectCarWrapAngle@l(r9) -.L_00012284: -/* 00012284 0001F014 EC 22 00 28 */ fsubs f1, f2, f0 -/* 00012288 0001F018 4E 80 00 20 */ blr -/* 0001228C 0001F01C FC 20 10 90 */ fmr f1, f2 -/* 00012290 0001F020 4E 80 00 20 */ blr -.endfn FindBestAngleGoal__20SelectCarCameraMoverff - -# .text:0x12294 | size: 0x164 -.fn CreateCameraMatrix__20SelectCarCameraMoverP8bMatrix4P19SelectCarCameraData, global -/* 00012294 0001F024 94 21 FF 58 */ stwu r1, -0xa8(r1) -/* 00012298 0001F028 7C 08 02 A6 */ mflr r0 -/* 0001229C 0001F02C F3 E1 00 A0 */ psq_st f31, 0xa0(r1), 0, qr0 -/* 000122A0 0001F030 BF 01 00 80 */ stmw r24, 0x80(r1) -/* 000122A4 0001F034 90 01 00 AC */ stw r0, 0xac(r1) -/* 000122A8 0001F038 3D 20 00 00 */ lis r9, .rodata+0xA48@ha -/* 000122AC 0001F03C 7C 9C 23 78 */ mr r28, r4 -/* 000122B0 0001F040 C0 09 0A 48 */ lfs f0, .rodata+0xA48@l(r9) -/* 000122B4 0001F044 7C 7D 1B 78 */ mr r29, r3 -/* 000122B8 0001F048 C1 BC 00 08 */ lfs f13, 0x8(r28) -/* 000122BC 0001F04C 3B 61 00 08 */ addi r27, r1, 0x8 -/* 000122C0 0001F050 D0 01 00 0C */ stfs f0, 0xc(r1) -/* 000122C4 0001F054 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 000122C8 0001F058 3F C0 B6 0B */ lis r30, 0xb60b -/* 000122CC 0001F05C D1 BB 00 08 */ stfs f13, 0x8(r27) -/* 000122D0 0001F060 63 DE 60 B7 */ ori r30, r30, 0x60b7 -/* 000122D4 0001F064 48 00 00 01 */ bl PSMTX44Identity -/* 000122D8 0001F068 3B 5C 00 14 */ addi r26, r28, 0x14 -/* 000122DC 0001F06C 3D 20 00 00 */ lis r9, .rodata+0xA4C@ha -/* 000122E0 0001F070 C0 1C 00 04 */ lfs f0, 0x4(r28) -/* 000122E4 0001F074 C3 E9 0A 4C */ lfs f31, .rodata+0xA4C@l(r9) -/* 000122E8 0001F078 3B 01 00 68 */ addi r24, r1, 0x68 -/* 000122EC 0001F07C 3B 21 00 58 */ addi r25, r1, 0x58 -/* 000122F0 0001F080 EC 00 07 F2 */ fmuls f0, f0, f31 -/* 000122F4 0001F084 7F A3 EB 78 */ mr r3, r29 -/* 000122F8 0001F088 7F A4 EB 78 */ mr r4, r29 -/* 000122FC 0001F08C FD A0 00 1E */ fctiwz f13, f0 -/* 00012300 0001F090 D9 A1 00 78 */ stfd f13, 0x78(r1) -/* 00012304 0001F094 81 21 00 7C */ lwz r9, 0x7c(r1) -/* 00012308 0001F098 7C A9 F0 96 */ mulhw r5, r9, r30 -/* 0001230C 0001F09C 7D 20 FE 70 */ srawi r0, r9, 31 -/* 00012310 0001F0A0 7C A5 4A 14 */ add r5, r5, r9 -/* 00012314 0001F0A4 7C A5 46 70 */ srawi r5, r5, 8 -/* 00012318 0001F0A8 7C A0 28 50 */ subf r5, r0, r5 -/* 0001231C 0001F0AC 54 A5 04 3E */ clrlwi r5, r5, 16 -/* 00012320 0001F0B0 48 00 00 01 */ bl eRotateZ__FP8bMatrix4T0Us -/* 00012324 0001F0B4 C0 1C 00 00 */ lfs f0, 0x0(r28) -/* 00012328 0001F0B8 7F A3 EB 78 */ mr r3, r29 -/* 0001232C 0001F0BC 7F A4 EB 78 */ mr r4, r29 -/* 00012330 0001F0C0 EC 00 07 F2 */ fmuls f0, f0, f31 -/* 00012334 0001F0C4 FD A0 00 1E */ fctiwz f13, f0 -/* 00012338 0001F0C8 D9 A1 00 78 */ stfd f13, 0x78(r1) -/* 0001233C 0001F0CC 81 21 00 7C */ lwz r9, 0x7c(r1) -/* 00012340 0001F0D0 7C A9 F0 96 */ mulhw r5, r9, r30 -/* 00012344 0001F0D4 7D 20 FE 70 */ srawi r0, r9, 31 -/* 00012348 0001F0D8 7C A5 4A 14 */ add r5, r5, r9 -/* 0001234C 0001F0DC 7C A5 46 70 */ srawi r5, r5, 8 -/* 00012350 0001F0E0 7C A0 28 50 */ subf r5, r0, r5 -.L_00012354: -/* 00012354 0001F0E4 54 A5 04 3E */ clrlwi r5, r5, 16 -/* 00012358 0001F0E8 48 00 00 01 */ bl eRotateX__FP8bMatrix4T0Us -/* 0001235C 0001F0EC 7F 65 DB 78 */ mr r5, r27 -/* 00012360 0001F0F0 7F A3 EB 78 */ mr r3, r29 -.L_00012364: -/* 00012364 0001F0F4 7F A4 EB 78 */ mr r4, r29 -/* 00012368 0001F0F8 48 00 00 01 */ bl eTranslate__FP8bMatrix4T0P8bVector3 -/* 0001236C 0001F0FC 7F A4 EB 78 */ mr r4, r29 -/* 00012370 0001F100 38 61 00 18 */ addi r3, r1, 0x18 -/* 00012374 0001F104 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 -/* 00012378 0001F108 C0 1C 00 0C */ lfs f0, 0xc(r28) -.L_0001237C: -/* 0001237C 0001F10C C1 81 00 48 */ lfs f12, 0x48(r1) -/* 00012380 0001F110 7F 03 C3 78 */ mr r3, r24 -/* 00012384 0001F114 EC 00 07 F2 */ fmuls f0, f0, f31 -/* 00012388 0001F118 C1 61 00 4C */ lfs f11, 0x4c(r1) -/* 0001238C 0001F11C C1 41 00 50 */ lfs f10, 0x50(r1) -/* 00012390 0001F120 FD A0 00 1E */ fctiwz f13, f0 -/* 00012394 0001F124 7F 24 CB 78 */ mr r4, r25 -/* 00012398 0001F128 D9 A1 00 78 */ stfd f13, 0x78(r1) -/* 0001239C 0001F12C 7F 45 D3 78 */ mr r5, r26 -/* 000123A0 0001F130 D1 81 00 58 */ stfs f12, 0x58(r1) -/* 000123A4 0001F134 81 21 00 7C */ lwz r9, 0x7c(r1) -/* 000123A8 0001F138 D1 61 00 5C */ stfs f11, 0x5c(r1) -/* 000123AC 0001F13C 7F C9 F0 96 */ mulhw r30, r9, r30 -/* 000123B0 0001F140 7D 20 FE 70 */ srawi r0, r9, 31 -/* 000123B4 0001F144 D1 41 00 60 */ stfs f10, 0x60(r1) -/* 000123B8 0001F148 7F DE 4A 14 */ add r30, r30, r9 -/* 000123BC 0001F14C 7F DE 46 70 */ srawi r30, r30, 8 -/* 000123C0 0001F150 7F C0 F0 50 */ subf r30, r0, r30 -/* 000123C4 0001F154 57 C6 04 3E */ clrlwi r6, r30, 16 -/* 000123C8 0001F158 48 00 31 11 */ bl .L_000154D8 -/* 000123CC 0001F15C 7F A3 EB 78 */ mr r3, r29 -/* 000123D0 0001F160 7F 24 CB 78 */ mr r4, r25 -/* 000123D4 0001F164 7F 45 D3 78 */ mr r5, r26 -/* 000123D8 0001F168 7F 06 C3 78 */ mr r6, r24 -/* 000123DC 0001F16C 48 00 00 01 */ bl eCreateLookAtMatrix__FP8bMatrix4R8bVector3N21 -/* 000123E0 0001F170 80 01 00 AC */ lwz r0, 0xac(r1) -/* 000123E4 0001F174 7C 08 03 A6 */ mtlr r0 -/* 000123E8 0001F178 BB 01 00 80 */ lmw r24, 0x80(r1) -/* 000123EC 0001F17C E3 E1 00 A0 */ psq_l f31, 0xa0(r1), 0, qr0 -/* 000123F0 0001F180 38 21 00 A8 */ addi r1, r1, 0xa8 -/* 000123F4 0001F184 4E 80 00 20 */ blr -.endfn CreateCameraMatrix__20SelectCarCameraMoverP8bMatrix4P19SelectCarCameraData - -# .text:0x123F8 | size: 0x30 -.fn _._19ShowcaseCameraMover, global -/* 000123F8 0001F188 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 000123FC 0001F18C 7C 08 02 A6 */ mflr r0 -/* 00012400 0001F190 90 01 00 0C */ stw r0, 0xc(r1) -/* 00012404 0001F194 3D 20 00 00 */ lis r9, _vt.19ShowcaseCameraMover@ha -/* 00012408 0001F198 7C 6B 1B 78 */ mr r11, r3 -/* 0001240C 0001F19C 39 29 00 00 */ addi r9, r9, _vt.19ShowcaseCameraMover@l -/* 00012410 0001F1A0 91 2B 00 08 */ stw r9, 0x8(r11) -/* 00012414 0001F1A4 48 00 20 35 */ bl .L_00014448 -/* 00012418 0001F1A8 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0001241C 0001F1AC 7C 08 03 A6 */ mtlr r0 -/* 00012420 0001F1B0 38 21 00 08 */ addi r1, r1, 0x8 -/* 00012424 0001F1B4 4E 80 00 20 */ blr -.endfn _._19ShowcaseCameraMover - -# .text:0x12428 | size: 0x1C -# ShowcaseCameraMover::ResetState -.fn ResetState__19ShowcaseCameraMover, global -/* 00012428 0001F1B8 3D 20 00 00 */ lis r9, RealTimeFrames@ha -/* 0001242C 0001F1BC 81 63 00 1C */ lwz r11, 0x1c(r3) -.L_00012430: -/* 00012430 0001F1C0 81 49 00 00 */ lwz r10, RealTimeFrames@l(r9) -/* 00012434 0001F1C4 38 00 00 01 */ li r0, 0x1 -/* 00012438 0001F1C8 90 0B 02 7C */ stw r0, 0x27c(r11) -/* 0001243C 0001F1CC 91 4B 02 88 */ stw r10, 0x288(r11) -.L_00012440: -/* 00012440 0001F1D0 4E 80 00 20 */ blr -.endfn ResetState__19ShowcaseCameraMover - -# .text:0x12444 | size: 0x88 -.fn __19ShowcaseCameraMoveriP12CameraAnchorb, global -/* 00012444 0001F1D4 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 00012448 0001F1D8 7C 08 02 A6 */ mflr r0 -/* 0001244C 0001F1DC BF A1 00 0C */ stmw r29, 0xc(r1) -/* 00012450 0001F1E0 90 01 00 1C */ stw r0, 0x1c(r1) -/* 00012454 0001F1E4 7C 7F 1B 78 */ mr r31, r3 -/* 00012458 0001F1E8 7C BE 2B 78 */ mr r30, r5 -/* 0001245C 0001F1EC 7C DD 33 78 */ mr r29, r6 -/* 00012460 0001F1F0 38 A0 00 12 */ li r5, 0x12 -/* 00012464 0001F1F4 48 00 1F 1D */ bl .L_00014380 -/* 00012468 0001F1F8 3D 60 00 00 */ lis r11, RealTimeFrames@ha -/* 0001246C 0001F1FC 3D 20 00 00 */ lis r9, _vt.19ShowcaseCameraMover@ha -/* 00012470 0001F200 81 0B 00 00 */ lwz r8, RealTimeFrames@l(r11) -.L_00012474: -/* 00012474 0001F204 39 29 00 00 */ addi r9, r9, _vt.19ShowcaseCameraMover@l -/* 00012478 0001F208 81 5F 00 1C */ lwz r10, 0x1c(r31) -/* 0001247C 0001F20C 38 00 00 01 */ li r0, 0x1 -/* 00012480 0001F210 91 3F 00 08 */ stw r9, 0x8(r31) -/* 00012484 0001F214 7F E3 FB 78 */ mr r3, r31 -/* 00012488 0001F218 93 DF 00 80 */ stw r30, 0x80(r31) -.L_0001248C: -/* 0001248C 0001F21C 91 0A 02 88 */ stw r8, 0x288(r10) -/* 00012490 0001F220 90 0A 02 7C */ stw r0, 0x27c(r10) -/* 00012494 0001F224 48 01 24 CD */ bl .text+0x124CC -.L_00012498: -/* 00012498 0001F228 2C 1D 00 00 */ cmpwi r29, 0x0 -/* 0001249C 0001F22C 41 82 24 AC */ beq .L_00014948 -.L_000124A0: -/* 000124A0 0001F230 C0 1F 00 84 */ lfs f0, 0x84(r31) -/* 000124A4 0001F234 FC 00 00 50 */ fneg f0, f0 -/* 000124A8 0001F238 D0 1F 00 84 */ stfs f0, 0x84(r31) -.L_000124AC: -/* 000124AC 0001F23C 7F E3 FB 78 */ mr r3, r31 -/* 000124B0 0001F240 48 01 25 55 */ bl .text+0x12554 -/* 000124B4 0001F244 7F E3 FB 78 */ mr r3, r31 -/* 000124B8 0001F248 80 01 00 1C */ lwz r0, 0x1c(r1) -.L_000124BC: -/* 000124BC 0001F24C 7C 08 03 A6 */ mtlr r0 -/* 000124C0 0001F250 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 000124C4 0001F254 38 21 00 18 */ addi r1, r1, 0x18 -/* 000124C8 0001F258 4E 80 00 20 */ blr -.endfn __19ShowcaseCameraMoveriP12CameraAnchorb - -# .text:0x124CC | size: 0x5C -# ShowcaseCameraMover::SetFromTweakables -.fn SetFromTweakables__19ShowcaseCameraMover, global -/* 000124CC 0001F25C 3D 20 00 00 */ lis r9, gPhoto_LatAng@ha -/* 000124D0 0001F260 3D 60 00 00 */ lis r11, gPhoto_UpAng@ha -/* 000124D4 0001F264 3D 40 00 00 */ lis r10, gPhoto_Dist@ha -/* 000124D8 0001F268 C0 0B 00 00 */ lfs f0, gPhoto_UpAng@l(r11) -/* 000124DC 0001F26C C1 AA 00 00 */ lfs f13, gPhoto_Dist@l(r10) -/* 000124E0 0001F270 3D 60 00 00 */ lis r11, gPhoto_CarPosBias@ha -/* 000124E4 0001F274 C1 49 00 00 */ lfs f10, gPhoto_LatAng@l(r9) -/* 000124E8 0001F278 39 4B 00 00 */ addi r10, r11, gPhoto_CarPosBias@l -/* 000124EC 0001F27C D0 03 00 88 */ stfs f0, 0x88(r3) -/* 000124F0 0001F280 3D 20 00 00 */ lis r9, gPhoto_DOF@ha -/* 000124F4 0001F284 D1 A3 00 8C */ stfs f13, 0x8c(r3) -/* 000124F8 0001F288 D1 43 00 84 */ stfs f10, 0x84(r3) -/* 000124FC 0001F28C C1 69 00 00 */ lfs f11, gPhoto_DOF@l(r9) -/* 00012500 0001F290 C1 AB 00 00 */ lfs f13, gPhoto_CarPosBias@l(r11) -/* 00012504 0001F294 C1 8A 00 08 */ lfs f12, 0x8(r10) -/* 00012508 0001F298 C0 0A 00 04 */ lfs f0, 0x4(r10) -/* 0001250C 0001F29C D1 63 00 A8 */ stfs f11, 0xa8(r3) -/* 00012510 0001F2A0 D1 A3 00 90 */ stfs f13, 0x90(r3) -/* 00012514 0001F2A4 D0 03 00 94 */ stfs f0, 0x94(r3) -/* 00012518 0001F2A8 D1 83 00 98 */ stfs f12, 0x98(r3) -/* 0001251C 0001F2AC D1 43 00 A0 */ stfs f10, 0xa0(r3) -/* 00012520 0001F2B0 D1 63 00 A4 */ stfs f11, 0xa4(r3) -/* 00012524 0001F2B4 4E 80 00 20 */ blr -.endfn SetFromTweakables__19ShowcaseCameraMover - -# .text:0x12528 | size: 0x2C -.fn SetShowcaseCameraParams__19ShowcaseCameraMoverfffffffff, global -/* 00012528 0001F2B8 C0 01 00 08 */ lfs f0, 0x8(r1) -/* 0001252C 0001F2BC D0 23 00 84 */ stfs f1, 0x84(r3) -/* 00012530 0001F2C0 D0 03 00 A8 */ stfs f0, 0xa8(r3) -/* 00012534 0001F2C4 D0 43 00 88 */ stfs f2, 0x88(r3) -/* 00012538 0001F2C8 D0 63 00 8C */ stfs f3, 0x8c(r3) -/* 0001253C 0001F2CC D0 83 00 90 */ stfs f4, 0x90(r3) -/* 00012540 0001F2D0 D0 A3 00 94 */ stfs f5, 0x94(r3) -/* 00012544 0001F2D4 D0 C3 00 98 */ stfs f6, 0x98(r3) -/* 00012548 0001F2D8 D0 E3 00 A0 */ stfs f7, 0xa0(r3) -/* 0001254C 0001F2DC D1 03 00 A4 */ stfs f8, 0xa4(r3) -/* 00012550 0001F2E0 4E 80 00 20 */ blr -.endfn SetShowcaseCameraParams__19ShowcaseCameraMoverfffffffff - -# .text:0x12554 | size: 0x258 -# ShowcaseCameraMover::BuildPhotoCameraMatrix -.fn BuildPhotoCameraMatrix__19ShowcaseCameraMover, global -/* 00012554 0001F2E4 94 21 FE C0 */ stwu r1, -0x140(r1) -/* 00012558 0001F2E8 7C 08 02 A6 */ mflr r0 -/* 0001255C 0001F2EC F3 A1 01 28 */ psq_st f29, 0x128(r1), 0, qr0 -/* 00012560 0001F2F0 F3 C1 01 30 */ psq_st f30, 0x130(r1), 0, qr0 -/* 00012564 0001F2F4 F3 E1 01 38 */ psq_st f31, 0x138(r1), 0, qr0 -/* 00012568 0001F2F8 BF 21 01 0C */ stmw r25, 0x10c(r1) -/* 0001256C 0001F2FC 90 01 01 44 */ stw r0, 0x144(r1) -/* 00012570 0001F300 7C 7F 1B 78 */ mr r31, r3 -/* 00012574 0001F304 38 81 00 28 */ addi r4, r1, 0x28 -/* 00012578 0001F308 83 BF 00 80 */ lwz r29, 0x80(r31) -/* 0001257C 0001F30C 3B C1 00 38 */ addi r30, r1, 0x38 -.L_00012580: -/* 00012580 0001F310 3B 81 00 48 */ addi r28, r1, 0x48 -/* 00012584 0001F314 7C 99 23 78 */ mr r25, r4 -/* 00012588 0001F318 38 7D 00 48 */ addi r3, r29, 0x48 -/* 0001258C 0001F31C 3F 60 B6 0B */ lis r27, 0xb60b -/* 00012590 0001F320 48 00 00 01 */ bl PSMTX44Copy -/* 00012594 0001F324 63 7B 60 B7 */ ori r27, r27, 0x60b7 -.L_00012598: -/* 00012598 0001F328 3D 20 00 00 */ lis r9, .rodata+0xA50@ha -/* 0001259C 0001F32C 3D 60 00 00 */ lis r11, .rodata+0xA54@ha -.L_000125A0: -/* 000125A0 0001F330 C3 E9 0A 50 */ lfs f31, .rodata+0xA50@l(r9) -/* 000125A4 0001F334 3B 41 00 08 */ addi r26, r1, 0x8 -/* 000125A8 0001F338 C3 AB 0A 54 */ lfs f29, .rodata+0xA54@l(r11) -/* 000125AC 0001F33C 7F C4 F3 78 */ mr r4, r30 -/* 000125B0 0001F340 D3 E1 00 68 */ stfs f31, 0x68(r1) -/* 000125B4 0001F344 7F 85 E3 78 */ mr r5, r28 -/* 000125B8 0001F348 D3 E1 00 6C */ stfs f31, 0x6c(r1) -/* 000125BC 0001F34C 7F 23 CB 78 */ mr r3, r25 -/* 000125C0 0001F350 D3 A1 00 70 */ stfs f29, 0x70(r1) -/* 000125C4 0001F354 D3 E1 00 48 */ stfs f31, 0x48(r1) -/* 000125C8 0001F358 D3 E1 00 4C */ stfs f31, 0x4c(r1) -/* 000125CC 0001F35C D3 A1 00 50 */ stfs f29, 0x50(r1) -.L_000125D0: -/* 000125D0 0001F360 D3 E1 00 54 */ stfs f31, 0x54(r1) -/* 000125D4 0001F364 D3 E1 00 30 */ stfs f31, 0x30(r1) -/* 000125D8 0001F368 D3 E1 00 40 */ stfs f31, 0x40(r1) -.L_000125DC: -/* 000125DC 0001F36C 48 00 00 01 */ bl bCross__FP8bVector3PC8bVector3T1 -/* 000125E0 0001F370 7F 25 CB 78 */ mr r5, r25 -/* 000125E4 0001F374 7F 84 E3 78 */ mr r4, r28 -/* 000125E8 0001F378 7F C3 F3 78 */ mr r3, r30 -.L_000125EC: -/* 000125EC 0001F37C 48 00 00 01 */ bl bCross__FP8bVector3PC8bVector3T1 -/* 000125F0 0001F380 7F 24 CB 78 */ mr r4, r25 -/* 000125F4 0001F384 7F 23 CB 78 */ mr r3, r25 -/* 000125F8 0001F388 48 00 00 01 */ bl bNormalize__FP8bVector4PC8bVector4 -/* 000125FC 0001F38C 7F C3 F3 78 */ mr r3, r30 -/* 00012600 0001F390 7C 64 1B 78 */ mr r4, r3 -/* 00012604 0001F394 48 00 00 01 */ bl bNormalize__FP8bVector4PC8bVector4 -/* 00012608 0001F398 38 61 00 18 */ addi r3, r1, 0x18 -/* 0001260C 0001F39C 38 BF 00 90 */ addi r5, r31, 0x90 -/* 00012610 0001F3A0 7F 24 CB 78 */ mr r4, r25 -/* 00012614 0001F3A4 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 -/* 00012618 0001F3A8 3D 20 00 00 */ lis r9, .rodata+0xA58@ha -/* 0001261C 0001F3AC C0 1F 00 84 */ lfs f0, 0x84(r31) -/* 00012620 0001F3B0 C3 C9 0A 58 */ lfs f30, .rodata+0xA58@l(r9) -/* 00012624 0001F3B4 38 61 00 E8 */ addi r3, r1, 0xe8 -/* 00012628 0001F3B8 C1 3D 00 18 */ lfs f9, 0x18(r29) -/* 0001262C 0001F3BC EC 00 07 B2 */ fmuls f0, f0, f30 -/* 00012630 0001F3C0 C1 5D 00 1C */ lfs f10, 0x1c(r29) -/* 00012634 0001F3C4 C1 81 00 18 */ lfs f12, 0x18(r1) -/* 00012638 0001F3C8 FD A0 00 1E */ fctiwz f13, f0 -/* 0001263C 0001F3CC C1 61 00 1C */ lfs f11, 0x1c(r1) -/* 00012640 0001F3D0 D9 A1 01 00 */ stfd f13, 0x100(r1) -/* 00012644 0001F3D4 ED 29 60 2A */ fadds f9, f9, f12 -/* 00012648 0001F3D8 C0 1D 00 20 */ lfs f0, 0x20(r29) -/* 0001264C 0001F3DC ED 4A 58 2A */ fadds f10, f10, f11 -/* 00012650 0001F3E0 81 21 01 04 */ lwz r9, 0x104(r1) -/* 00012654 0001F3E4 38 81 00 EC */ addi r4, r1, 0xec -/* 00012658 0001F3E8 C1 A1 00 20 */ lfs f13, 0x20(r1) -/* 0001265C 0001F3EC 7C A9 D8 96 */ mulhw r5, r9, r27 -/* 00012660 0001F3F0 7D 20 FE 70 */ srawi r0, r9, 31 -/* 00012664 0001F3F4 EC 00 68 2A */ fadds f0, f0, f13 -/* 00012668 0001F3F8 D1 21 00 08 */ stfs f9, 0x8(r1) -/* 0001266C 0001F3FC D1 41 00 0C */ stfs f10, 0xc(r1) -/* 00012670 0001F400 D0 1A 00 08 */ stfs f0, 0x8(r26) -.L_00012674: -/* 00012674 0001F404 7C A5 4A 14 */ add r5, r5, r9 -/* 00012678 0001F408 7C A5 46 70 */ srawi r5, r5, 8 -/* 0001267C 0001F40C 7C A0 28 50 */ subf r5, r0, r5 -/* 00012680 0001F410 54 A5 04 3E */ clrlwi r5, r5, 16 -/* 00012684 0001F414 48 00 00 01 */ bl bSinCos__FPfT0Us -/* 00012688 0001F418 3D 20 00 00 */ lis r9, .rodata+0xA5C@ha -/* 0001268C 0001F41C C0 1F 00 88 */ lfs f0, 0x88(r31) -/* 00012690 0001F420 C1 A9 0A 5C */ lfs f13, .rodata+0xA5C@l(r9) -/* 00012694 0001F424 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00012698 0001F428 4C 62 0B 82 */ cror un, eq, gt -/* 0001269C 0001F42C 41 83 26 A4 */ bso .L_00014D40 -/* 000126A0 0001F430 D1 BF 00 88 */ stfs f13, 0x88(r31) -/* 000126A4 0001F434 C0 1F 00 88 */ lfs f0, 0x88(r31) -/* 000126A8 0001F438 3B C1 00 98 */ addi r30, r1, 0x98 -/* 000126AC 0001F43C 3B A1 00 78 */ addi r29, r1, 0x78 -/* 000126B0 0001F440 EC 00 07 B2 */ fmuls f0, f0, f30 -.L_000126B4: -/* 000126B4 0001F444 38 61 00 F0 */ addi r3, r1, 0xf0 -.L_000126B8: -/* 000126B8 0001F448 38 81 00 F4 */ addi r4, r1, 0xf4 -/* 000126BC 0001F44C FD A0 00 1E */ fctiwz f13, f0 -/* 000126C0 0001F450 D9 A1 01 00 */ stfd f13, 0x100(r1) -/* 000126C4 0001F454 81 21 01 04 */ lwz r9, 0x104(r1) -/* 000126C8 0001F458 7C A9 D8 96 */ mulhw r5, r9, r27 -/* 000126CC 0001F45C 7D 20 FE 70 */ srawi r0, r9, 31 -/* 000126D0 0001F460 7C A5 4A 14 */ add r5, r5, r9 -/* 000126D4 0001F464 7C A5 46 70 */ srawi r5, r5, 8 -/* 000126D8 0001F468 7C A0 28 50 */ subf r5, r0, r5 -.L_000126DC: -/* 000126DC 0001F46C 54 A5 04 3E */ clrlwi r5, r5, 16 -/* 000126E0 0001F470 48 00 00 01 */ bl bSinCos__FPfT0Us -/* 000126E4 0001F474 C1 7F 00 8C */ lfs f11, 0x8c(r31) -/* 000126E8 0001F478 38 A1 00 88 */ addi r5, r1, 0x88 -.L_000126EC: -/* 000126EC 0001F47C C1 A1 00 EC */ lfs f13, 0xec(r1) -/* 000126F0 0001F480 7F 24 CB 78 */ mr r4, r25 -/* 000126F4 0001F484 C1 81 00 E8 */ lfs f12, 0xe8(r1) -/* 000126F8 0001F488 7F A3 EB 78 */ mr r3, r29 -/* 000126FC 0001F48C C0 01 00 F0 */ lfs f0, 0xf0(r1) -/* 00012700 0001F490 ED AD 02 F2 */ fmuls f13, f13, f11 -/* 00012704 0001F494 ED 8C 02 F2 */ fmuls f12, f12, f11 -/* 00012708 0001F498 D1 A1 00 88 */ stfs f13, 0x88(r1) -/* 0001270C 0001F49C EC 00 02 F2 */ fmuls f0, f0, f11 -/* 00012710 0001F4A0 D1 81 00 8C */ stfs f12, 0x8c(r1) -/* 00012714 0001F4A4 D0 01 00 90 */ stfs f0, 0x90(r1) -/* 00012718 0001F4A8 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 -/* 0001271C 0001F4AC C1 3A 00 08 */ lfs f9, 0x8(r26) -/* 00012720 0001F4B0 7F 45 D3 78 */ mr r5, r26 -/* 00012724 0001F4B4 C1 81 00 78 */ lfs f12, 0x78(r1) -/* 00012728 0001F4B8 38 C1 00 D8 */ addi r6, r1, 0xd8 -/* 0001272C 0001F4BC C1 A1 00 7C */ lfs f13, 0x7c(r1) -/* 00012730 0001F4C0 7F A4 EB 78 */ mr r4, r29 -/* 00012734 0001F4C4 C0 01 00 80 */ lfs f0, 0x80(r1) -/* 00012738 0001F4C8 7F C3 F3 78 */ mr r3, r30 -/* 0001273C 0001F4CC C1 61 00 08 */ lfs f11, 0x8(r1) -/* 00012740 0001F4D0 C1 41 00 0C */ lfs f10, 0xc(r1) -/* 00012744 0001F4D4 EC 00 48 2A */ fadds f0, f0, f9 -/* 00012748 0001F4D8 ED 8C 58 2A */ fadds f12, f12, f11 -/* 0001274C 0001F4DC D0 01 00 80 */ stfs f0, 0x80(r1) -/* 00012750 0001F4E0 ED AD 50 2A */ fadds f13, f13, f10 -/* 00012754 0001F4E4 D1 81 00 78 */ stfs f12, 0x78(r1) -/* 00012758 0001F4E8 D1 A1 00 7C */ stfs f13, 0x7c(r1) -/* 0001275C 0001F4EC D3 E1 00 DC */ stfs f31, 0xdc(r1) -/* 00012760 0001F4F0 D3 A1 00 E0 */ stfs f29, 0xe0(r1) -/* 00012764 0001F4F4 D3 E1 00 D8 */ stfs f31, 0xd8(r1) -/* 00012768 0001F4F8 48 00 00 01 */ bl eCreateLookAtMatrix__FP8bMatrix4R8bVector3N21 -/* 0001276C 0001F4FC 80 BF 00 80 */ lwz r5, 0x80(r31) -/* 00012770 0001F500 7F C4 F3 78 */ mr r4, r30 -/* 00012774 0001F504 7F E3 FB 78 */ mr r3, r31 -/* 00012778 0001F508 38 A5 00 18 */ addi r5, r5, 0x18 -/* 0001277C 0001F50C 48 00 3A F1 */ bl .L_0001626C -/* 00012780 0001F510 7F C3 F3 78 */ mr r3, r30 -/* 00012784 0001F514 38 9F 00 AC */ addi r4, r31, 0xac -/* 00012788 0001F518 48 00 00 01 */ bl PSMTX44Copy -/* 0001278C 0001F51C 80 01 01 44 */ lwz r0, 0x144(r1) -/* 00012790 0001F520 7C 08 03 A6 */ mtlr r0 -/* 00012794 0001F524 BB 21 01 0C */ lmw r25, 0x10c(r1) -/* 00012798 0001F528 E3 A1 01 28 */ psq_l f29, 0x128(r1), 0, qr0 -/* 0001279C 0001F52C E3 C1 01 30 */ psq_l f30, 0x130(r1), 0, qr0 -/* 000127A0 0001F530 E3 E1 01 38 */ psq_l f31, 0x138(r1), 0, qr0 -.L_000127A4: -/* 000127A4 0001F534 38 21 01 40 */ addi r1, r1, 0x140 -.L_000127A8: -/* 000127A8 0001F538 4E 80 00 20 */ blr -.endfn BuildPhotoCameraMatrix__19ShowcaseCameraMover - -# .text:0x127AC | size: 0xB0 -.fn Update__19ShowcaseCameraMoverf, global -/* 000127AC 0001F53C 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 000127B0 0001F540 7C 08 02 A6 */ mflr r0 -/* 000127B4 0001F544 F3 E1 00 20 */ psq_st f31, 0x20(r1), 0, qr0 -/* 000127B8 0001F548 93 E1 00 1C */ stw r31, 0x1c(r1) -/* 000127BC 0001F54C 90 01 00 2C */ stw r0, 0x2c(r1) -/* 000127C0 0001F550 7C 7F 1B 78 */ mr r31, r3 -/* 000127C4 0001F554 FF E0 08 90 */ fmr f31, f1 -/* 000127C8 0001F558 48 01 25 55 */ bl .text+0x12554 -.L_000127CC: -/* 000127CC 0001F55C 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha -/* 000127D0 0001F560 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) -/* 000127D4 0001F564 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000127D8 0001F568 40 82 28 34 */ bne .L_0001500C -.L_000127DC: -/* 000127DC 0001F56C 3D 20 00 00 */ lis r9, .rodata+0xA60@ha -/* 000127E0 0001F570 C0 1F 00 A0 */ lfs f0, 0xa0(r31) -/* 000127E4 0001F574 C1 89 0A 60 */ lfs f12, .rodata+0xA60@l(r9) -/* 000127E8 0001F578 3C 00 B6 0B */ lis r0, 0xb60b -/* 000127EC 0001F57C 60 00 60 B7 */ ori r0, r0, 0x60b7 -/* 000127F0 0001F580 EC 00 03 32 */ fmuls f0, f0, f12 -/* 000127F4 0001F584 81 5F 00 1C */ lwz r10, 0x1c(r31) -/* 000127F8 0001F588 FD A0 00 1E */ fctiwz f13, f0 -/* 000127FC 0001F58C D9 A1 00 10 */ stfd f13, 0x10(r1) -/* 00012800 0001F590 81 21 00 14 */ lwz r9, 0x14(r1) -/* 00012804 0001F594 7C 09 00 96 */ mulhw r0, r9, r0 -/* 00012808 0001F598 7D 2B FE 70 */ srawi r11, r9, 31 -/* 0001280C 0001F59C 7C 00 4A 14 */ add r0, r0, r9 -/* 00012810 0001F5A0 7C 00 46 70 */ srawi r0, r0, 8 -/* 00012814 0001F5A4 7C 0B 00 50 */ subf r0, r11, r0 -/* 00012818 0001F5A8 B0 0A 00 C4 */ sth r0, 0xc4(r10) -/* 0001281C 0001F5AC C0 1F 00 A8 */ lfs f0, 0xa8(r31) -/* 00012820 0001F5B0 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 00012824 0001F5B4 D0 09 00 B8 */ stfs f0, 0xb8(r9) -/* 00012828 0001F5B8 81 7F 00 1C */ lwz r11, 0x1c(r31) -/* 0001282C 0001F5BC C0 1F 00 A4 */ lfs f0, 0xa4(r31) -/* 00012830 0001F5C0 D0 0B 00 B4 */ stfs f0, 0xb4(r11) -/* 00012834 0001F5C4 80 7F 00 1C */ lwz r3, 0x1c(r31) -/* 00012838 0001F5C8 38 9F 00 AC */ addi r4, r31, 0xac -/* 0001283C 0001F5CC FC 20 F8 90 */ fmr f1, f31 -/* 00012840 0001F5D0 48 00 04 ED */ bl .L_00012D2C -/* 00012844 0001F5D4 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 00012848 0001F5D8 7C 08 03 A6 */ mtlr r0 -/* 0001284C 0001F5DC 83 E1 00 1C */ lwz r31, 0x1c(r1) -/* 00012850 0001F5E0 E3 E1 00 20 */ psq_l f31, 0x20(r1), 0, qr0 -/* 00012854 0001F5E4 38 21 00 28 */ addi r1, r1, 0x28 -/* 00012858 0001F5E8 4E 80 00 20 */ blr -.endfn Update__19ShowcaseCameraMoverf - -# .text:0x1285C | size: 0x114 -.fn __21DebugWorldCameraMoveriPC8bVector3T212JoystickPort, global -/* 0001285C 0001F5EC 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 00012860 0001F5F0 7C 08 02 A6 */ mflr r0 -/* 00012864 0001F5F4 BF 61 00 0C */ stmw r27, 0xc(r1) -/* 00012868 0001F5F8 90 01 00 24 */ stw r0, 0x24(r1) -/* 0001286C 0001F5FC 7C 7E 1B 78 */ mr r30, r3 -/* 00012870 0001F600 7C BD 2B 78 */ mr r29, r5 -/* 00012874 0001F604 7C DC 33 78 */ mr r28, r6 -/* 00012878 0001F608 7C FB 3B 78 */ mr r27, r7 -/* 0001287C 0001F60C 38 A0 00 02 */ li r5, 0x2 -/* 00012880 0001F610 48 00 1F 1D */ bl .L_0001479C -/* 00012884 0001F614 3D 60 00 00 */ lis r11, .rodata+0xA64@ha -/* 00012888 0001F618 3D 20 00 00 */ lis r9, _vt.21DebugWorldCameraMover@ha -/* 0001288C 0001F61C C0 0B 0A 64 */ lfs f0, .rodata+0xA64@l(r11) -/* 00012890 0001F620 39 29 00 00 */ addi r9, r9, _vt.21DebugWorldCameraMover@l -/* 00012894 0001F624 38 00 00 00 */ li r0, 0x0 -/* 00012898 0001F628 91 3E 00 08 */ stw r9, 0x8(r30) -/* 0001289C 0001F62C 93 7E 00 9C */ stw r27, 0x9c(r30) -/* 000128A0 0001F630 3D 40 00 00 */ lis r10, _21DebugWorldCameraMover.Eye@ha -/* 000128A4 0001F634 B0 1E 00 90 */ sth r0, 0x90(r30) -/* 000128A8 0001F638 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.SuperTurboOn@ha -/* 000128AC 0001F63C B0 1E 00 92 */ sth r0, 0x92(r30) -.L_000128B0: -/* 000128B0 0001F640 39 0A 00 00 */ addi r8, r10, _21DebugWorldCameraMover.Eye@l -/* 000128B4 0001F644 D0 1E 00 88 */ stfs f0, 0x88(r30) -/* 000128B8 0001F648 38 00 00 00 */ li r0, 0x0 -/* 000128BC 0001F64C D0 1E 00 8C */ stfs f0, 0x8c(r30) -/* 000128C0 0001F650 3C E0 00 00 */ lis r7, _21DebugWorldCameraMover.Look@ha -/* 000128C4 0001F654 D0 1E 00 80 */ stfs f0, 0x80(r30) -/* 000128C8 0001F658 3D 60 00 00 */ lis r11, _21DebugWorldCameraMover.TurboOn@ha -.L_000128CC: -/* 000128CC 0001F65C D0 1E 00 84 */ stfs f0, 0x84(r30) -/* 000128D0 0001F660 38 C7 00 00 */ addi r6, r7, _21DebugWorldCameraMover.Look@l -/* 000128D4 0001F664 90 09 00 00 */ stw r0, _21DebugWorldCameraMover.SuperTurboOn@l(r9) -/* 000128D8 0001F668 3F 60 00 00 */ lis r27, DebugCameraNearPlane@ha -/* 000128DC 0001F66C C0 1D 00 00 */ lfs f0, 0x0(r29) -/* 000128E0 0001F670 3C 60 00 00 */ lis r3, gFastMem@ha -/* 000128E4 0001F674 C1 9D 00 08 */ lfs f12, 0x8(r29) -/* 000128E8 0001F678 38 80 02 94 */ li r4, 0x294 -/* 000128EC 0001F67C C1 BD 00 04 */ lfs f13, 0x4(r29) -/* 000128F0 0001F680 38 A0 00 00 */ li r5, 0x0 -/* 000128F4 0001F684 D0 0A 00 00 */ stfs f0, _21DebugWorldCameraMover.Eye@l(r10) -/* 000128F8 0001F688 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 000128FC 0001F68C D1 88 00 08 */ stfs f12, 0x8(r8) -/* 00012900 0001F690 D1 A8 00 04 */ stfs f13, 0x4(r8) -/* 00012904 0001F694 90 0B 00 00 */ stw r0, _21DebugWorldCameraMover.TurboOn@l(r11) -/* 00012908 0001F698 C0 1C 00 00 */ lfs f0, 0x0(r28) -/* 0001290C 0001F69C C1 9C 00 08 */ lfs f12, 0x8(r28) -/* 00012910 0001F6A0 C1 BC 00 04 */ lfs f13, 0x4(r28) -/* 00012914 0001F6A4 D0 07 00 00 */ stfs f0, _21DebugWorldCameraMover.Look@l(r7) -/* 00012918 0001F6A8 D1 86 00 08 */ stfs f12, 0x8(r6) -/* 0001291C 0001F6AC D1 A6 00 04 */ stfs f13, 0x4(r6) -/* 00012920 0001F6B0 C1 9B 00 00 */ lfs f12, DebugCameraNearPlane@l(r27) -/* 00012924 0001F6B4 81 3E 00 1C */ lwz r9, 0x1c(r30) -.L_00012928: -/* 00012928 0001F6B8 C0 09 00 BC */ lfs f0, 0xbc(r9) -/* 0001292C 0001F6BC D0 1E 00 A0 */ stfs f0, 0xa0(r30) -/* 00012930 0001F6C0 D1 89 00 BC */ stfs f12, 0xbc(r9) -/* 00012934 0001F6C4 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 00012938 0001F6C8 3C C0 00 00 */ lis r6, .rodata+0x8E0@ha -/* 0001293C 0001F6CC 80 9E 00 9C */ lwz r4, 0x9c(r30) -/* 00012940 0001F6D0 3C A0 98 C7 */ lis r5, 0x98c7 -/* 00012944 0001F6D4 38 C6 08 E0 */ addi r6, r6, .rodata+0x8E0@l -/* 00012948 0001F6D8 60 A5 A2 F5 */ ori r5, r5, 0xa2f5 -/* 0001294C 0001F6DC 38 E0 00 00 */ li r7, 0x0 -/* 00012950 0001F6E0 48 00 00 01 */ bl __11ActionQueueiUiPCcb -/* 00012954 0001F6E4 90 7E 00 A4 */ stw r3, 0xa4(r30) -/* 00012958 0001F6E8 7F C3 F3 78 */ mr r3, r30 -/* 0001295C 0001F6EC 80 01 00 24 */ lwz r0, 0x24(r1) -/* 00012960 0001F6F0 7C 08 03 A6 */ mtlr r0 -/* 00012964 0001F6F4 BB 61 00 0C */ lmw r27, 0xc(r1) -/* 00012968 0001F6F8 38 21 00 20 */ addi r1, r1, 0x20 -/* 0001296C 0001F6FC 4E 80 00 20 */ blr -.endfn __21DebugWorldCameraMoveriPC8bVector3T212JoystickPort - -# .text:0x12970 | size: 0x78 -.fn _._21DebugWorldCameraMover, global -/* 00012970 0001F700 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00012974 0001F704 7C 08 02 A6 */ mflr r0 -/* 00012978 0001F708 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 0001297C 0001F70C 90 01 00 14 */ stw r0, 0x14(r1) -/* 00012980 0001F710 7C 7F 1B 78 */ mr r31, r3 -/* 00012984 0001F714 3D 20 00 00 */ lis r9, _vt.21DebugWorldCameraMover@ha -/* 00012988 0001F718 80 1F 00 A4 */ lwz r0, 0xa4(r31) -/* 0001298C 0001F71C 39 29 00 00 */ addi r9, r9, _vt.21DebugWorldCameraMover@l -/* 00012990 0001F720 7C 9E 23 78 */ mr r30, r4 -/* 00012994 0001F724 91 3F 00 08 */ stw r9, 0x8(r31) -.L_00012998: -/* 00012998 0001F728 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0001299C 0001F72C 41 82 29 C8 */ beq .L_00015364 -/* 000129A0 0001F730 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 000129A4 0001F734 C0 1F 00 A0 */ lfs f0, 0xa0(r31) -/* 000129A8 0001F738 D0 09 00 BC */ stfs f0, 0xbc(r9) -/* 000129AC 0001F73C 80 7F 00 A4 */ lwz r3, 0xa4(r31) -/* 000129B0 0001F740 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000129B4 0001F744 41 82 29 C0 */ beq .L_00015374 -/* 000129B8 0001F748 38 80 00 03 */ li r4, 0x3 -/* 000129BC 0001F74C 48 00 00 01 */ bl _._11ActionQueue -/* 000129C0 0001F750 38 00 00 00 */ li r0, 0x0 -/* 000129C4 0001F754 90 1F 00 A4 */ stw r0, 0xa4(r31) -/* 000129C8 0001F758 7F E3 FB 78 */ mr r3, r31 -/* 000129CC 0001F75C 7F C4 F3 78 */ mr r4, r30 -/* 000129D0 0001F760 48 00 20 35 */ bl .L_00014A04 -/* 000129D4 0001F764 80 01 00 14 */ lwz r0, 0x14(r1) -/* 000129D8 0001F768 7C 08 03 A6 */ mtlr r0 -/* 000129DC 0001F76C BB C1 00 08 */ lmw r30, 0x8(r1) -/* 000129E0 0001F770 38 21 00 10 */ addi r1, r1, 0x10 -/* 000129E4 0001F774 4E 80 00 20 */ blr -.endfn _._21DebugWorldCameraMover - -# .text:0x129E8 | size: 0x3EC -# DebugWorldCameraMover::JoyHandler -.fn JoyHandler__21DebugWorldCameraMover, global -/* 000129E8 0001F778 94 21 FF 70 */ stwu r1, -0x90(r1) -/* 000129EC 0001F77C 7C 08 02 A6 */ mflr r0 -/* 000129F0 0001F780 F3 61 00 68 */ psq_st f27, 0x68(r1), 0, qr0 -/* 000129F4 0001F784 F3 81 00 70 */ psq_st f28, 0x70(r1), 0, qr0 -/* 000129F8 0001F788 F3 A1 00 78 */ psq_st f29, 0x78(r1), 0, qr0 -/* 000129FC 0001F78C F3 C1 00 80 */ psq_st f30, 0x80(r1), 0, qr0 -/* 00012A00 0001F790 F3 E1 00 88 */ psq_st f31, 0x88(r1), 0, qr0 -/* 00012A04 0001F794 BE E1 00 44 */ stmw r23, 0x44(r1) -/* 00012A08 0001F798 90 01 00 94 */ stw r0, 0x94(r1) -/* 00012A0C 0001F79C 7C 7F 1B 78 */ mr r31, r3 -.L_00012A10: -/* 00012A10 0001F7A0 80 1F 00 A4 */ lwz r0, 0xa4(r31) -/* 00012A14 0001F7A4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00012A18 0001F7A8 41 82 2D AC */ beq .L_000157C4 -/* 00012A1C 0001F7AC 3D 20 00 00 */ lis r9, .rodata+0xA6C@ha -/* 00012A20 0001F7B0 3D 60 00 00 */ lis r11, .rodata+0xA70@ha -/* 00012A24 0001F7B4 C3 89 0A 6C */ lfs f28, .rodata+0xA6C@l(r9) -/* 00012A28 0001F7B8 3F 00 00 00 */ lis r24, .rodata+0xA68@ha -.L_00012A2C: -/* 00012A2C 0001F7BC C3 AB 0A 70 */ lfs f29, .rodata+0xA70@l(r11) -/* 00012A30 0001F7C0 3D 20 00 00 */ lis r9, .rodata+0xA74@ha -/* 00012A34 0001F7C4 3D 60 00 00 */ lis r11, .rodata+0xA78@ha -/* 00012A38 0001F7C8 C3 C9 0A 74 */ lfs f30, .rodata+0xA74@l(r9) -/* 00012A3C 0001F7CC C3 EB 0A 78 */ lfs f31, .rodata+0xA78@l(r11) -/* 00012A40 0001F7D0 3F 20 00 00 */ lis r25, _21DebugWorldCameraMover.TurboOn@ha -/* 00012A44 0001F7D4 C3 78 0A 68 */ lfs f27, .rodata+0xA68@l(r24) -/* 00012A48 0001F7D8 3B 80 00 00 */ li r28, 0x0 -/* 00012A4C 0001F7DC 3B 40 00 01 */ li r26, 0x1 -/* 00012A50 0001F7E0 3F 60 00 00 */ lis r27, _21DebugWorldCameraMover.SuperTurboOn@ha -/* 00012A54 0001F7E4 3A E0 00 03 */ li r23, 0x3 -/* 00012A58 0001F7E8 48 01 2D 9C */ b .text+0x12D9C -/* 00012A5C 0001F7EC 80 9F 00 A4 */ lwz r4, 0xa4(r31) -.L_00012A60: -/* 00012A60 0001F7F0 38 61 00 20 */ addi r3, r1, 0x20 -/* 00012A64 0001F7F4 4C C6 31 82 */ crclr cr1eq -/* 00012A68 0001F7F8 48 00 00 01 */ bl GetAction__11ActionQueue -/* 00012A6C 0001F7FC 81 21 00 20 */ lwz r9, 0x20(r1) -/* 00012A70 0001F800 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00012A74 0001F804 41 82 2A 80 */ beq .L_000154F4 -/* 00012A78 0001F808 C1 A9 00 08 */ lfs f13, 0x8(r9) -/* 00012A7C 0001F80C 48 01 2A 84 */ b .text+0x12A84 -/* 00012A80 0001F810 C1 B8 0A 68 */ lfs f13, .rodata+0xA68@l(r24) -/* 00012A84 0001F814 3C 80 00 00 */ lis r4, gDebugCameraInputGraph@ha -/* 00012A88 0001F818 39 41 00 24 */ addi r10, r1, 0x24 -/* 00012A8C 0001F81C 38 64 00 00 */ addi r3, r4, gDebugCameraInputGraph@l -/* 00012A90 0001F820 81 63 00 04 */ lwz r11, 0x4(r3) -/* 00012A94 0001F824 2C 0B 00 01 */ cmpwi r11, 0x1 -/* 00012A98 0001F828 40 81 2B 48 */ ble .L_000155E0 -/* 00012A9C 0001F82C 80 84 00 00 */ lwz r4, gDebugCameraInputGraph@l(r4) -/* 00012AA0 0001F830 C0 04 00 00 */ lfs f0, 0x0(r4) -/* 00012AA4 0001F834 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 00012AA8 0001F838 41 81 2A B8 */ bgt .L_00015560 -/* 00012AAC 0001F83C 7D 43 53 78 */ mr r3, r10 -/* 00012AB0 0001F840 38 84 00 04 */ addi r4, r4, 0x4 -/* 00012AB4 0001F844 48 01 2A D8 */ b .text+0x12AD8 -/* 00012AB8 0001F848 55 60 18 38 */ slwi r0, r11, 3 -/* 00012ABC 0001F84C 7D 20 22 14 */ add r9, r0, r4 -/* 00012AC0 0001F850 C0 09 FF F8 */ lfs f0, -0x8(r9) -/* 00012AC4 0001F854 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 00012AC8 0001F858 41 80 2A E4 */ blt .L_000155AC -/* 00012ACC 0001F85C 7D 24 4B 78 */ mr r4, r9 -/* 00012AD0 0001F860 7D 43 53 78 */ mr r3, r10 -/* 00012AD4 0001F864 38 84 FF FC */ subi r4, r4, 0x4 -/* 00012AD8 0001F868 38 A0 00 04 */ li r5, 0x4 -/* 00012ADC 0001F86C 48 00 00 01 */ bl bMemCpy -/* 00012AE0 0001F870 48 01 2B 64 */ b .text+0x12B64 -/* 00012AE4 0001F874 38 0B FF FF */ subi r0, r11, 0x1 -/* 00012AE8 0001F878 39 60 00 00 */ li r11, 0x0 -/* 00012AEC 0001F87C 7C 0B 00 00 */ cmpw r11, r0 -/* 00012AF0 0001F880 40 80 2B 64 */ bge .L_00015654 -/* 00012AF4 0001F884 55 65 18 38 */ slwi r5, r11, 3 -/* 00012AF8 0001F888 7C 05 24 2E */ lfsx f0, r5, r4 -/* 00012AFC 0001F88C 7C C5 22 14 */ add r6, r5, r4 -/* 00012B00 0001F890 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 00012B04 0001F894 41 80 2B 14 */ blt .L_00015618 -/* 00012B08 0001F898 C0 26 00 08 */ lfs f1, 0x8(r6) -/* 00012B0C 0001F89C FC 0D 08 00 */ fcmpu cr0, f13, f1 -/* 00012B10 0001F8A0 41 80 2B 24 */ blt .L_00015634 -/* 00012B14 0001F8A4 39 6B 00 01 */ addi r11, r11, 0x1 -/* 00012B18 0001F8A8 7C 0B 00 00 */ cmpw r11, r0 -/* 00012B1C 0001F8AC 41 80 2A F4 */ blt .L_00015610 -/* 00012B20 0001F8B0 48 01 2B 64 */ b .text+0x12B64 -/* 00012B24 0001F8B4 EC 21 00 28 */ fsubs f1, f1, f0 -/* 00012B28 0001F8B8 7C A5 22 14 */ add r5, r5, r4 -/* 00012B2C 0001F8BC EC 0D 00 28 */ fsubs f0, f13, f0 -/* 00012B30 0001F8C0 7D 44 53 78 */ mr r4, r10 -/* 00012B34 0001F8C4 EC 20 08 24 */ fdivs f1, f0, f1 -.L_00012B38: -/* 00012B38 0001F8C8 38 A5 00 0C */ addi r5, r5, 0xc -.L_00012B3C: -/* 00012B3C 0001F8CC 38 C6 00 04 */ addi r6, r6, 0x4 -/* 00012B40 0001F8D0 48 00 00 01 */ bl Blend__t6tGraph1ZfPfN21f -/* 00012B44 0001F8D4 48 01 2B 64 */ b .text+0x12B64 -/* 00012B48 0001F8D8 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00012B4C 0001F8DC 40 81 2B 64 */ ble .L_000156B0 -/* 00012B50 0001F8E0 80 84 00 00 */ lwz r4, gDebugCameraInputGraph@l(r4) -/* 00012B54 0001F8E4 7D 43 53 78 */ mr r3, r10 -/* 00012B58 0001F8E8 38 A0 00 04 */ li r5, 0x4 -.L_00012B5C: -/* 00012B5C 0001F8EC 38 84 00 04 */ addi r4, r4, 0x4 -/* 00012B60 0001F8F0 48 00 00 01 */ bl bMemCpy -/* 00012B64 0001F8F4 81 21 00 20 */ lwz r9, 0x20(r1) -/* 00012B68 0001F8F8 C0 01 00 24 */ lfs f0, 0x24(r1) -/* 00012B6C 0001F8FC 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00012B70 0001F900 38 00 00 00 */ li r0, 0x0 -/* 00012B74 0001F904 41 82 2B 7C */ beq .L_000156F0 -/* 00012B78 0001F908 80 09 00 00 */ lwz r0, 0x0(r9) -/* 00012B7C 0001F90C 2C 00 00 41 */ cmpwi r0, 0x41 -/* 00012B80 0001F910 41 82 2C 64 */ beq .L_000157E4 -/* 00012B84 0001F914 41 81 2B EC */ bgt .L_00015770 -/* 00012B88 0001F918 2C 00 00 39 */ cmpwi r0, 0x39 -/* 00012B8C 0001F91C 41 82 2C 38 */ beq .L_000157C4 -/* 00012B90 0001F920 41 81 2B C0 */ bgt .L_00015750 -/* 00012B94 0001F924 2C 00 00 36 */ cmpwi r0, 0x36 -/* 00012B98 0001F928 41 82 2C 28 */ beq .L_000157C0 -/* 00012B9C 0001F92C 41 81 2B AC */ bgt .L_00015748 -/* 00012BA0 0001F930 2C 00 00 35 */ cmpwi r0, 0x35 -/* 00012BA4 0001F934 41 82 2C 2C */ beq .L_000157D0 -/* 00012BA8 0001F938 48 01 2D 94 */ b .text+0x12D94 -/* 00012BAC 0001F93C 2C 00 00 37 */ cmpwi r0, 0x37 -/* 00012BB0 0001F940 41 82 2C 44 */ beq .L_000157F4 -/* 00012BB4 0001F944 2C 00 00 38 */ cmpwi r0, 0x38 -/* 00012BB8 0001F948 41 82 2C 48 */ beq .L_00015800 -/* 00012BBC 0001F94C 48 01 2D 94 */ b .text+0x12D94 -/* 00012BC0 0001F950 2C 00 00 3D */ cmpwi r0, 0x3d -/* 00012BC4 0001F954 41 82 2C 54 */ beq .L_00015818 -/* 00012BC8 0001F958 41 81 2B DC */ bgt .L_000157A4 -/* 00012BCC 0001F95C 2C 00 00 3B */ cmpwi r0, 0x3b -.L_00012BD0: -/* 00012BD0 0001F960 41 82 2C 44 */ beq .L_00015814 -/* 00012BD4 0001F964 41 81 2C 48 */ bgt .L_0001581C -.L_00012BD8: -/* 00012BD8 0001F968 48 01 2C 34 */ b .text+0x12C34 -/* 00012BDC 0001F96C 2C 00 00 3F */ cmpwi r0, 0x3f -/* 00012BE0 0001F970 41 82 2C 70 */ beq .L_00015850 -/* 00012BE4 0001F974 41 81 2C 70 */ bgt .L_00015854 -/* 00012BE8 0001F978 48 01 2C 58 */ b .text+0x12C58 -/* 00012BEC 0001F97C 2C 00 00 45 */ cmpwi r0, 0x45 -/* 00012BF0 0001F980 41 82 2C 8C */ beq .L_0001587C -/* 00012BF4 0001F984 41 81 2C 08 */ bgt .L_000157FC -.L_00012BF8: -/* 00012BF8 0001F988 2C 00 00 43 */ cmpwi r0, 0x43 -/* 00012BFC 0001F98C 41 82 2C 98 */ beq .L_00015894 -/* 00012C00 0001F990 41 81 2C 70 */ bgt .L_00015870 -/* 00012C04 0001F994 48 01 2C 98 */ b .text+0x12C98 -/* 00012C08 0001F998 2C 00 00 47 */ cmpwi r0, 0x47 -/* 00012C0C 0001F99C 41 82 2C B0 */ beq .L_000158BC -/* 00012C10 0001F9A0 41 80 2C 98 */ blt .L_000158A8 -/* 00012C14 0001F9A4 2C 00 00 48 */ cmpwi r0, 0x48 -/* 00012C18 0001F9A8 41 82 2C C8 */ beq .L_000158E0 -/* 00012C1C 0001F9AC 2C 00 00 49 */ cmpwi r0, 0x49 -.L_00012C20: -/* 00012C20 0001F9B0 41 82 2C E0 */ beq .L_00015900 -.L_00012C24: -/* 00012C24 0001F9B4 48 01 2D 94 */ b .text+0x12D94 -/* 00012C28 0001F9B8 EC 00 00 2A */ fadds f0, f0, f0 -/* 00012C2C 0001F9BC D0 1F 00 80 */ stfs f0, 0x80(r31) -/* 00012C30 0001F9C0 48 01 2D 94 */ b .text+0x12D94 -/* 00012C34 0001F9C4 FC 00 00 50 */ fneg f0, f0 -/* 00012C38 0001F9C8 EC 00 07 72 */ fmuls f0, f0, f29 -/* 00012C3C 0001F9CC D0 1F 00 88 */ stfs f0, 0x88(r31) -/* 00012C40 0001F9D0 48 01 2D 94 */ b .text+0x12D94 -/* 00012C44 0001F9D4 FC 00 00 50 */ fneg f0, f0 -/* 00012C48 0001F9D8 EC 00 07 32 */ fmuls f0, f0, f28 -/* 00012C4C 0001F9DC D0 1F 00 8C */ stfs f0, 0x8c(r31) -/* 00012C50 0001F9E0 48 01 2D 94 */ b .text+0x12D94 -/* 00012C54 0001F9E4 FC 00 00 50 */ fneg f0, f0 -/* 00012C58 0001F9E8 EC 00 07 72 */ fmuls f0, f0, f29 -/* 00012C5C 0001F9EC D0 1F 00 84 */ stfs f0, 0x84(r31) -/* 00012C60 0001F9F0 48 01 2D 94 */ b .text+0x12D94 -/* 00012C64 0001F9F4 FC 00 00 50 */ fneg f0, f0 -/* 00012C68 0001F9F8 EC 00 07 F2 */ fmuls f0, f0, f31 -/* 00012C6C 0001F9FC 48 01 2C 9C */ b .text+0x12C9C -/* 00012C70 0001FA00 FC 00 00 50 */ fneg f0, f0 -/* 00012C74 0001FA04 EC 00 07 B2 */ fmuls f0, f0, f30 -/* 00012C78 0001FA08 FD A0 00 1E */ fctiwz f13, f0 -/* 00012C7C 0001FA0C D9 A1 00 38 */ stfd f13, 0x38(r1) -/* 00012C80 0001FA10 81 21 00 3C */ lwz r9, 0x3c(r1) -/* 00012C84 0001FA14 B1 3F 00 92 */ sth r9, 0x92(r31) -/* 00012C88 0001FA18 48 01 2D 94 */ b .text+0x12D94 -/* 00012C8C 0001FA1C FC 00 00 50 */ fneg f0, f0 -.L_00012C90: -/* 00012C90 0001FA20 EC 00 07 F2 */ fmuls f0, f0, f31 -/* 00012C94 0001FA24 48 01 2C 9C */ b .text+0x12C9C -.L_00012C98: -/* 00012C98 0001FA28 EC 00 07 F2 */ fmuls f0, f0, f31 -/* 00012C9C 0001FA2C FD A0 00 1E */ fctiwz f13, f0 -/* 00012CA0 0001FA30 D9 A1 00 38 */ stfd f13, 0x38(r1) -/* 00012CA4 0001FA34 81 21 00 3C */ lwz r9, 0x3c(r1) -/* 00012CA8 0001FA38 B1 3F 00 90 */ sth r9, 0x90(r31) -/* 00012CAC 0001FA3C 48 01 2D 94 */ b .text+0x12D94 -/* 00012CB0 0001FA40 FC 00 D8 00 */ fcmpu cr0, f0, f27 -/* 00012CB4 0001FA44 40 82 2C C0 */ bne .L_00015974 -/* 00012CB8 0001FA48 93 99 00 00 */ stw r28, _21DebugWorldCameraMover.TurboOn@l(r25) -/* 00012CBC 0001FA4C 48 01 2D 94 */ b .text+0x12D94 -/* 00012CC0 0001FA50 93 59 00 00 */ stw r26, _21DebugWorldCameraMover.TurboOn@l(r25) -/* 00012CC4 0001FA54 48 01 2D 94 */ b .text+0x12D94 -/* 00012CC8 0001FA58 FC 00 D8 00 */ fcmpu cr0, f0, f27 -/* 00012CCC 0001FA5C 40 82 2C D8 */ bne .L_000159A4 -/* 00012CD0 0001FA60 93 9B 00 00 */ stw r28, _21DebugWorldCameraMover.SuperTurboOn@l(r27) -/* 00012CD4 0001FA64 48 01 2D 94 */ b .text+0x12D94 -.L_00012CD8: -/* 00012CD8 0001FA68 93 5B 00 00 */ stw r26, _21DebugWorldCameraMover.SuperTurboOn@l(r27) -/* 00012CDC 0001FA6C 48 01 2D 94 */ b .text+0x12D94 -/* 00012CE0 0001FA70 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 00012CE4 0001FA74 3B A1 00 08 */ addi r29, r1, 0x8 -/* 00012CE8 0001FA78 38 60 00 01 */ li r3, 0x1 -/* 00012CEC 0001FA7C C0 09 00 44 */ lfs f0, 0x44(r9) -/* 00012CF0 0001FA80 C1 A9 00 48 */ lfs f13, 0x48(r9) -/* 00012CF4 0001FA84 C1 89 00 40 */ lfs f12, 0x40(r9) -.L_00012CF8: -/* 00012CF8 0001FA88 FC 00 00 50 */ fneg f0, f0 -.L_00012CFC: -/* 00012CFC 0001FA8C D0 01 00 08 */ stfs f0, 0x8(r1) -/* 00012D00 0001FA90 D1 A1 00 0C */ stfs f13, 0xc(r1) -/* 00012D04 0001FA94 D1 9D 00 08 */ stfs f12, 0x8(r29) -/* 00012D08 0001FA98 48 00 00 01 */ bl First__Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi311ePlayerList -/* 00012D0C 0001FA9C 7C 6B 1B 79 */ mr. r11, r3 -/* 00012D10 0001FAA0 41 82 2D 94 */ beq .L_00015AA4 -/* 00012D14 0001FAA4 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 00012D18 0001FAA8 A8 69 00 10 */ lha r3, 0x10(r9) -/* 00012D1C 0001FAAC 80 09 00 14 */ lwz r0, 0x14(r9) -/* 00012D20 0001FAB0 7C 6B 1A 14 */ add r3, r11, r3 -/* 00012D24 0001FAB4 7C 08 03 A6 */ mtlr r0 -/* 00012D28 0001FAB8 4E 80 00 21 */ blrl -.L_00012D2C: -/* 00012D2C 0001FABC 7C 7E 1B 79 */ mr. r30, r3 -/* 00012D30 0001FAC0 41 82 2D 94 */ beq .L_00015AC4 -/* 00012D34 0001FAC4 7F A4 EB 78 */ mr r4, r29 -/* 00012D38 0001FAC8 38 A1 00 28 */ addi r5, r1, 0x28 -/* 00012D3C 0001FACC 38 C0 00 00 */ li r6, 0x0 -/* 00012D40 0001FAD0 93 81 00 18 */ stw r28, 0x18(r1) -.L_00012D44: -/* 00012D44 0001FAD4 92 E1 00 1C */ stw r23, 0x1c(r1) -/* 00012D48 0001FAD8 38 61 00 18 */ addi r3, r1, 0x18 -/* 00012D4C 0001FADC D3 61 00 28 */ stfs f27, 0x28(r1) -/* 00012D50 0001FAE0 48 00 00 01 */ bl GetWorldHeightAtPoint__13WCollisionMgrRCQ25UMath7Vector3RfPQ25UMath7Vector3 -/* 00012D54 0001FAE4 C0 01 00 28 */ lfs f0, 0x28(r1) -/* 00012D58 0001FAE8 EC 00 F0 2A */ fadds f0, f0, f30 -/* 00012D5C 0001FAEC D0 01 00 28 */ stfs f0, 0x28(r1) -.L_00012D60: -/* 00012D60 0001FAF0 81 3E 00 04 */ lwz r9, 0x4(r30) -.L_00012D64: -/* 00012D64 0001FAF4 80 09 00 AC */ lwz r0, 0xac(r9) -/* 00012D68 0001FAF8 A8 69 00 A8 */ lha r3, 0xa8(r9) -.L_00012D6C: -/* 00012D6C 0001FAFC 7C 08 03 A6 */ mtlr r0 -/* 00012D70 0001FB00 7C 7E 1A 14 */ add r3, r30, r3 -/* 00012D74 0001FB04 4E 80 00 21 */ blrl -.L_00012D78: -/* 00012D78 0001FB08 81 23 00 04 */ lwz r9, 0x4(r3) -/* 00012D7C 0001FB0C 7F A4 EB 78 */ mr r4, r29 -/* 00012D80 0001FB10 A8 09 00 C0 */ lha r0, 0xc0(r9) -/* 00012D84 0001FB14 81 29 00 C4 */ lwz r9, 0xc4(r9) -.L_00012D88: -/* 00012D88 0001FB18 7C 63 02 14 */ add r3, r3, r0 -.L_00012D8C: -/* 00012D8C 0001FB1C 7D 28 03 A6 */ mtlr r9 -/* 00012D90 0001FB20 4E 80 00 21 */ blrl -/* 00012D94 0001FB24 80 7F 00 A4 */ lwz r3, 0xa4(r31) -.L_00012D98: -/* 00012D98 0001FB28 48 00 00 01 */ bl PopAction__11ActionQueue -/* 00012D9C 0001FB2C 80 7F 00 A4 */ lwz r3, 0xa4(r31) -/* 00012DA0 0001FB30 48 00 00 01 */ bl IsEmpty__11ActionQueue -/* 00012DA4 0001FB34 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00012DA8 0001FB38 41 82 2A 5C */ beq .L_00015804 -/* 00012DAC 0001FB3C 80 01 00 94 */ lwz r0, 0x94(r1) -/* 00012DB0 0001FB40 7C 08 03 A6 */ mtlr r0 -/* 00012DB4 0001FB44 BA E1 00 44 */ lmw r23, 0x44(r1) -/* 00012DB8 0001FB48 E3 61 00 68 */ psq_l f27, 0x68(r1), 0, qr0 -/* 00012DBC 0001FB4C E3 81 00 70 */ psq_l f28, 0x70(r1), 0, qr0 -.L_00012DC0: -/* 00012DC0 0001FB50 E3 A1 00 78 */ psq_l f29, 0x78(r1), 0, qr0 -.L_00012DC4: -/* 00012DC4 0001FB54 E3 C1 00 80 */ psq_l f30, 0x80(r1), 0, qr0 -.L_00012DC8: -/* 00012DC8 0001FB58 E3 E1 00 88 */ psq_l f31, 0x88(r1), 0, qr0 -/* 00012DCC 0001FB5C 38 21 00 90 */ addi r1, r1, 0x90 -/* 00012DD0 0001FB60 4E 80 00 20 */ blr -.endfn JoyHandler__21DebugWorldCameraMover - -# .text:0x12DD4 | size: 0x74C -.fn Update__21DebugWorldCameraMoverf, global -/* 00012DD4 0001FB64 94 21 FF 28 */ stwu r1, -0xd8(r1) -.L_00012DD8: -/* 00012DD8 0001FB68 7C 08 02 A6 */ mflr r0 -/* 00012DDC 0001FB6C F3 A1 00 C0 */ psq_st f29, 0xc0(r1), 0, qr0 -/* 00012DE0 0001FB70 F3 C1 00 C8 */ psq_st f30, 0xc8(r1), 0, qr0 -/* 00012DE4 0001FB74 F3 E1 00 D0 */ psq_st f31, 0xd0(r1), 0, qr0 -/* 00012DE8 0001FB78 BF 21 00 A4 */ stmw r25, 0xa4(r1) -/* 00012DEC 0001FB7C 90 01 00 DC */ stw r0, 0xdc(r1) -/* 00012DF0 0001FB80 3F E0 00 00 */ lis r31, JumpToPosition@ha -/* 00012DF4 0001FB84 3D 20 00 00 */ lis r9, .rodata+0xA7C@ha -/* 00012DF8 0001FB88 3B 9F 00 00 */ addi r28, r31, JumpToPosition@l -/* 00012DFC 0001FB8C C3 E9 0A 7C */ lfs f31, .rodata+0xA7C@l(r9) -.L_00012E00: -/* 00012E00 0001FB90 C0 1C 00 04 */ lfs f0, 0x4(r28) -/* 00012E04 0001FB94 7C 7B 1B 78 */ mr r27, r3 -.L_00012E08: -/* 00012E08 0001FB98 FF A0 08 90 */ fmr f29, f1 -/* 00012E0C 0001FB9C 3F 20 00 00 */ lis r25, _21DebugWorldCameraMover.Eye@ha -/* 00012E10 0001FBA0 FC 00 F8 00 */ fcmpu cr0, f0, f31 -/* 00012E14 0001FBA4 3F 40 00 00 */ lis r26, _21DebugWorldCameraMover.Look@ha -/* 00012E18 0001FBA8 41 82 2F 04 */ beq .L_00015D1C -/* 00012E1C 0001FBAC 3D 20 00 00 */ lis r9, .rodata+0xA80@ha -/* 00012E20 0001FBB0 C1 3C 00 08 */ lfs f9, 0x8(r28) -/* 00012E24 0001FBB4 C1 69 0A 80 */ lfs f11, .rodata+0xA80@l(r9) -.L_00012E28: -/* 00012E28 0001FBB8 3B D9 00 00 */ addi r30, r25, _21DebugWorldCameraMover.Eye@l -/* 00012E2C 0001FBBC 3B BA 00 00 */ addi r29, r26, _21DebugWorldCameraMover.Look@l -/* 00012E30 0001FBC0 C1 BE 00 04 */ lfs f13, 0x4(r30) -/* 00012E34 0001FBC4 ED 29 58 2A */ fadds f9, f9, f11 -/* 00012E38 0001FBC8 C1 5D 00 04 */ lfs f10, 0x4(r29) -/* 00012E3C 0001FBCC C1 1D 00 08 */ lfs f8, 0x8(r29) -/* 00012E40 0001FBD0 38 81 00 20 */ addi r4, r1, 0x20 -/* 00012E44 0001FBD4 C0 1E 00 08 */ lfs f0, 0x8(r30) -/* 00012E48 0001FBD8 ED AD 50 28 */ fsubs f13, f13, f10 -/* 00012E4C 0001FBDC C1 7A 00 00 */ lfs f11, _21DebugWorldCameraMover.Look@l(r26) -/* 00012E50 0001FBE0 38 61 00 10 */ addi r3, r1, 0x10 -/* 00012E54 0001FBE4 C1 99 00 00 */ lfs f12, _21DebugWorldCameraMover.Eye@l(r25) -/* 00012E58 0001FBE8 EC 00 40 28 */ fsubs f0, f0, f8 -/* 00012E5C 0001FBEC D1 3C 00 08 */ stfs f9, 0x8(r28) -/* 00012E60 0001FBF0 ED 8C 58 28 */ fsubs f12, f12, f11 -/* 00012E64 0001FBF4 D1 A1 00 24 */ stfs f13, 0x24(r1) -/* 00012E68 0001FBF8 D1 81 00 20 */ stfs f12, 0x20(r1) -/* 00012E6C 0001FBFC D0 01 00 28 */ stfs f0, 0x28(r1) -/* 00012E70 0001FC00 48 00 00 01 */ bl __8bVector3RC8bVector3 -/* 00012E74 0001FC04 3D 20 00 00 */ lis r9, .rodata+0xA84@ha -/* 00012E78 0001FC08 38 61 00 10 */ addi r3, r1, 0x10 -/* 00012E7C 0001FC0C C0 29 0A 84 */ lfs f1, .rodata+0xA84@l(r9) -/* 00012E80 0001FC10 7C 64 1B 78 */ mr r4, r3 -/* 00012E84 0001FC14 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3f -/* 00012E88 0001FC18 C1 BF 00 00 */ lfs f13, JumpToPosition@l(r31) -/* 00012E8C 0001FC1C 38 61 00 20 */ addi r3, r1, 0x20 -/* 00012E90 0001FC20 C1 9C 00 04 */ lfs f12, 0x4(r28) -/* 00012E94 0001FC24 38 81 00 30 */ addi r4, r1, 0x30 -/* 00012E98 0001FC28 C0 1C 00 08 */ lfs f0, 0x8(r28) -/* 00012E9C 0001FC2C C1 61 00 10 */ lfs f11, 0x10(r1) -/* 00012EA0 0001FC30 C1 41 00 14 */ lfs f10, 0x14(r1) -/* 00012EA4 0001FC34 C1 21 00 18 */ lfs f9, 0x18(r1) -/* 00012EA8 0001FC38 ED AD 58 2A */ fadds f13, f13, f11 -/* 00012EAC 0001FC3C ED 8C 50 2A */ fadds f12, f12, f10 -/* 00012EB0 0001FC40 D1 A1 00 30 */ stfs f13, 0x30(r1) -/* 00012EB4 0001FC44 EC 00 48 2A */ fadds f0, f0, f9 -/* 00012EB8 0001FC48 D1 81 00 34 */ stfs f12, 0x34(r1) -/* 00012EBC 0001FC4C D0 01 00 38 */ stfs f0, 0x38(r1) -/* 00012EC0 0001FC50 48 00 00 01 */ bl __8bVector3RC8bVector3 -/* 00012EC4 0001FC54 C1 A1 00 20 */ lfs f13, 0x20(r1) -/* 00012EC8 0001FC58 C1 3C 00 04 */ lfs f9, 0x4(r28) -/* 00012ECC 0001FC5C C1 7C 00 08 */ lfs f11, 0x8(r28) -/* 00012ED0 0001FC60 C0 01 00 28 */ lfs f0, 0x28(r1) -/* 00012ED4 0001FC64 C1 5F 00 00 */ lfs f10, JumpToPosition@l(r31) -/* 00012ED8 0001FC68 C1 81 00 24 */ lfs f12, 0x24(r1) -/* 00012EDC 0001FC6C D1 B9 00 00 */ stfs f13, _21DebugWorldCameraMover.Eye@l(r25) -/* 00012EE0 0001FC70 D0 1E 00 08 */ stfs f0, 0x8(r30) -/* 00012EE4 0001FC74 D1 5A 00 00 */ stfs f10, _21DebugWorldCameraMover.Look@l(r26) -/* 00012EE8 0001FC78 D1 7D 00 08 */ stfs f11, 0x8(r29) -/* 00012EEC 0001FC7C D1 9E 00 04 */ stfs f12, 0x4(r30) -/* 00012EF0 0001FC80 D1 3D 00 04 */ stfs f9, 0x4(r29) -/* 00012EF4 0001FC84 D3 FF 00 00 */ stfs f31, JumpToPosition@l(r31) -/* 00012EF8 0001FC88 D3 FC 00 08 */ stfs f31, 0x8(r28) -/* 00012EFC 0001FC8C D3 FC 00 04 */ stfs f31, 0x4(r28) -/* 00012F00 0001FC90 48 00 00 01 */ bl bRefreshTweaker__Fv -/* 00012F04 0001FC94 3D 00 00 00 */ lis r8, gDebugCameraSetEye@ha -/* 00012F08 0001FC98 80 08 00 00 */ lwz r0, gDebugCameraSetEye@l(r8) -/* 00012F0C 0001FC9C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00012F10 0001FCA0 41 82 2F 48 */ beq .L_00015E58 -/* 00012F14 0001FCA4 3D 20 00 00 */ lis r9, gDebugCameraTweakableEye@ha -/* 00012F18 0001FCA8 3D 40 00 00 */ lis r10, _21DebugWorldCameraMover.Eye@ha -/* 00012F1C 0001FCAC C0 09 00 00 */ lfs f0, gDebugCameraTweakableEye@l(r9) -/* 00012F20 0001FCB0 39 6A 00 00 */ addi r11, r10, _21DebugWorldCameraMover.Eye@l -/* 00012F24 0001FCB4 39 29 00 00 */ addi r9, r9, gDebugCameraTweakableEye@l -.L_00012F28: -/* 00012F28 0001FCB8 38 00 00 00 */ li r0, 0x0 -/* 00012F2C 0001FCBC C1 89 00 04 */ lfs f12, 0x4(r9) -/* 00012F30 0001FCC0 FC 00 00 50 */ fneg f0, f0 -/* 00012F34 0001FCC4 C1 A9 00 08 */ lfs f13, 0x8(r9) -/* 00012F38 0001FCC8 D1 8B 00 08 */ stfs f12, 0x8(r11) -/* 00012F3C 0001FCCC D1 AA 00 00 */ stfs f13, _21DebugWorldCameraMover.Eye@l(r10) -/* 00012F40 0001FCD0 90 08 00 00 */ stw r0, gDebugCameraSetEye@l(r8) -/* 00012F44 0001FCD4 D0 0B 00 04 */ stfs f0, 0x4(r11) -/* 00012F48 0001FCD8 3D 00 00 00 */ lis r8, gDebugCameraSetLook@ha -/* 00012F4C 0001FCDC 80 08 00 00 */ lwz r0, gDebugCameraSetLook@l(r8) -.L_00012F50: -/* 00012F50 0001FCE0 2C 00 00 00 */ cmpwi r0, 0x0 -.L_00012F54: -/* 00012F54 0001FCE4 41 82 2F 8C */ beq .L_00015EE0 -/* 00012F58 0001FCE8 3D 20 00 00 */ lis r9, gDebugCameraTweakableLook@ha -.L_00012F5C: -/* 00012F5C 0001FCEC 3D 40 00 00 */ lis r10, _21DebugWorldCameraMover.Look@ha -/* 00012F60 0001FCF0 C0 09 00 00 */ lfs f0, gDebugCameraTweakableLook@l(r9) -.L_00012F64: -/* 00012F64 0001FCF4 39 6A 00 00 */ addi r11, r10, _21DebugWorldCameraMover.Look@l -/* 00012F68 0001FCF8 39 29 00 00 */ addi r9, r9, gDebugCameraTweakableLook@l -/* 00012F6C 0001FCFC 38 00 00 00 */ li r0, 0x0 -/* 00012F70 0001FD00 C1 89 00 04 */ lfs f12, 0x4(r9) -.L_00012F74: -/* 00012F74 0001FD04 FC 00 00 50 */ fneg f0, f0 -/* 00012F78 0001FD08 C1 A9 00 08 */ lfs f13, 0x8(r9) -/* 00012F7C 0001FD0C D1 8B 00 08 */ stfs f12, 0x8(r11) -/* 00012F80 0001FD10 D1 AA 00 00 */ stfs f13, _21DebugWorldCameraMover.Look@l(r10) -/* 00012F84 0001FD14 90 08 00 00 */ stw r0, gDebugCameraSetLook@l(r8) -/* 00012F88 0001FD18 D0 0B 00 04 */ stfs f0, 0x4(r11) -/* 00012F8C 0001FD1C 7F 63 DB 78 */ mr r3, r27 -/* 00012F90 0001FD20 48 01 29 E9 */ bl .text+0x129E8 -/* 00012F94 0001FD24 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.Look@ha -.L_00012F98: -/* 00012F98 0001FD28 3D 60 00 00 */ lis r11, _21DebugWorldCameraMover.Eye@ha -/* 00012F9C 0001FD2C 39 49 00 00 */ addi r10, r9, _21DebugWorldCameraMover.Look@l -/* 00012FA0 0001FD30 39 0B 00 00 */ addi r8, r11, _21DebugWorldCameraMover.Eye@l -/* 00012FA4 0001FD34 C1 48 00 04 */ lfs f10, 0x4(r8) -/* 00012FA8 0001FD38 38 81 00 20 */ addi r4, r1, 0x20 -/* 00012FAC 0001FD3C C1 8A 00 08 */ lfs f12, 0x8(r10) -/* 00012FB0 0001FD40 38 61 00 10 */ addi r3, r1, 0x10 -/* 00012FB4 0001FD44 C1 28 00 08 */ lfs f9, 0x8(r8) -/* 00012FB8 0001FD48 C0 0A 00 04 */ lfs f0, 0x4(r10) -/* 00012FBC 0001FD4C C1 6B 00 00 */ lfs f11, _21DebugWorldCameraMover.Eye@l(r11) -/* 00012FC0 0001FD50 ED 8C 48 28 */ fsubs f12, f12, f9 -/* 00012FC4 0001FD54 C1 A9 00 00 */ lfs f13, _21DebugWorldCameraMover.Look@l(r9) -/* 00012FC8 0001FD58 EC 00 50 28 */ fsubs f0, f0, f10 -/* 00012FCC 0001FD5C D1 81 00 28 */ stfs f12, 0x28(r1) -/* 00012FD0 0001FD60 ED AD 58 28 */ fsubs f13, f13, f11 -/* 00012FD4 0001FD64 D0 01 00 24 */ stfs f0, 0x24(r1) -/* 00012FD8 0001FD68 D1 A1 00 20 */ stfs f13, 0x20(r1) -/* 00012FDC 0001FD6C 48 00 00 01 */ bl __8bVector3RC8bVector3 -/* 00012FE0 0001FD70 3D 20 00 00 */ lis r9, .rodata+0xA88@ha -/* 00012FE4 0001FD74 C0 01 00 10 */ lfs f0, 0x10(r1) -/* 00012FE8 0001FD78 C1 49 0A 88 */ lfs f10, .rodata+0xA88@l(r9) -/* 00012FEC 0001FD7C C1 A1 00 14 */ lfs f13, 0x14(r1) -/* 00012FF0 0001FD80 7C 64 1B 78 */ mr r4, r3 -/* 00012FF4 0001FD84 EC 00 02 B2 */ fmuls f0, f0, f10 -/* 00012FF8 0001FD88 FD 80 00 1E */ fctiwz f12, f0 -/* 00012FFC 0001FD8C D9 81 00 98 */ stfd f12, 0x98(r1) -/* 00013000 0001FD90 ED AD 02 B2 */ fmuls f13, f13, f10 -/* 00013004 0001FD94 80 61 00 9C */ lwz r3, 0x9c(r1) -/* 00013008 0001FD98 FD 60 68 1E */ fctiwz f11, f13 -/* 0001300C 0001FD9C D9 61 00 98 */ stfd f11, 0x98(r1) -/* 00013010 0001FDA0 80 81 00 9C */ lwz r4, 0x9c(r1) -/* 00013014 0001FDA4 48 00 00 01 */ bl bFixATan__Fii -/* 00013018 0001FDA8 80 1B 00 90 */ lwz r0, 0x90(r27) -/* 0001301C 0001FDAC 7C 7F 1B 78 */ mr r31, r3 -/* 00013020 0001FDB0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00013024 0001FDB4 40 82 30 34 */ bne .L_00016058 -/* 00013028 0001FDB8 C0 1B 00 80 */ lfs f0, 0x80(r27) -/* 0001302C 0001FDBC FC 00 F8 00 */ fcmpu cr0, f0, f31 -/* 00013030 0001FDC0 41 82 32 9C */ beq .L_000162CC -/* 00013034 0001FDC4 A8 1B 00 90 */ lha r0, 0x90(r27) -/* 00013038 0001FDC8 3C E0 43 30 */ lis r7, 0x4330 -/* 0001303C 0001FDCC 3D 20 00 00 */ lis r9, .rodata+0xA90@ha -/* 00013040 0001FDD0 6C 00 80 00 */ xoris r0, r0, 0x8000 -/* 00013044 0001FDD4 C9 69 0A 90 */ lfd f11, .rodata+0xA90@l(r9) -/* 00013048 0001FDD8 90 01 00 9C */ stw r0, 0x9c(r1) -/* 0001304C 0001FDDC 7D 4B 53 78 */ mr r11, r10 -/* 00013050 0001FDE0 C1 A1 00 14 */ lfs f13, 0x14(r1) -/* 00013054 0001FDE4 3D 20 00 00 */ lis r9, .rodata+0xA9C@ha -/* 00013058 0001FDE8 90 E1 00 98 */ stw r7, 0x98(r1) -/* 0001305C 0001FDEC 3D 00 00 00 */ lis r8, .rodata+0xA98@ha -/* 00013060 0001FDF0 C1 81 00 10 */ lfs f12, 0x10(r1) -/* 00013064 0001FDF4 ED AD 03 72 */ fmuls f13, f13, f13 -/* 00013068 0001FDF8 C8 01 00 98 */ lfd f0, 0x98(r1) -/* 0001306C 0001FDFC ED 0C 6B 3A */ fmadds f8, f12, f12, f13 -/* 00013070 0001FE00 C1 28 0A 98 */ lfs f9, .rodata+0xA98@l(r8) -/* 00013074 0001FE04 FC 00 58 28 */ fsub f0, f0, f11 -/* 00013078 0001FE08 C0 E9 0A 9C */ lfs f7, .rodata+0xA9C@l(r9) -/* 0001307C 0001FE0C FC 00 00 18 */ frsp f0, f0 -/* 00013080 0001FE10 3D 20 00 00 */ lis r9, .rodata+0xA84@ha -/* 00013084 0001FE14 EC 00 07 72 */ fmuls f0, f0, f29 -/* 00013088 0001FE18 C1 69 0A 84 */ lfs f11, .rodata+0xA84@l(r9) -/* 0001308C 0001FE1C FD A0 00 90 */ fmr f13, f0 -/* 00013090 0001FE20 FD 40 68 1E */ fctiwz f10, f13 -/* 00013094 0001FE24 D9 41 00 98 */ stfd f10, 0x98(r1) -/* 00013098 0001FE28 FC 08 48 00 */ fcmpu cr0, f8, f9 -/* 0001309C 0001FE2C 81 61 00 9C */ lwz r11, 0x9c(r1) -/* 000130A0 0001FE30 7D 7F 5A 14 */ add r11, r31, r11 -/* 000130A4 0001FE34 55 7F 04 3E */ clrlwi r31, r11, 16 -/* 000130A8 0001FE38 4C 62 03 82 */ cror un, eq, lt -/* 000130AC 0001FE3C 41 83 30 DC */ bso .L_00016188 -/* 000130B0 0001FE40 FC 00 40 34 */ frsqrte f0, f8 -/* 000130B4 0001FE44 ED A0 00 32 */ fmuls f13, f0, f0 -/* 000130B8 0001FE48 ED 80 01 F2 */ fmuls f12, f0, f7 -/* 000130BC 0001FE4C ED A8 5B 7C */ fnmsubs f13, f8, f13, f11 -/* 000130C0 0001FE50 EC 0D 03 3A */ fmadds f0, f13, f12, f0 -/* 000130C4 0001FE54 ED A0 00 32 */ fmuls f13, f0, f0 -.L_000130C8: -/* 000130C8 0001FE58 ED 80 01 F2 */ fmuls f12, f0, f7 -/* 000130CC 0001FE5C ED A8 5B 7C */ fnmsubs f13, f8, f13, f11 -.L_000130D0: -/* 000130D0 0001FE60 EC 0D 03 3A */ fmadds f0, f13, f12, f0 -/* 000130D4 0001FE64 EC 00 02 32 */ fmuls f0, f0, f8 -/* 000130D8 0001FE68 48 01 30 E0 */ b .text+0x130E0 -/* 000130DC 0001FE6C FC 00 F8 90 */ fmr f0, f31 -/* 000130E0 0001FE70 3D 20 00 00 */ lis r9, .rodata+0xA88@ha -/* 000130E4 0001FE74 C1 A1 00 18 */ lfs f13, 0x18(r1) -/* 000130E8 0001FE78 C1 49 0A 88 */ lfs f10, .rodata+0xA88@l(r9) -/* 000130EC 0001FE7C 7C 64 1B 78 */ mr r4, r3 -/* 000130F0 0001FE80 EC 00 02 B2 */ fmuls f0, f0, f10 -/* 000130F4 0001FE84 FD 80 00 1E */ fctiwz f12, f0 -/* 000130F8 0001FE88 D9 81 00 98 */ stfd f12, 0x98(r1) -/* 000130FC 0001FE8C ED AD 02 B2 */ fmuls f13, f13, f10 -/* 00013100 0001FE90 FD 60 68 1E */ fctiwz f11, f13 -/* 00013104 0001FE94 80 61 00 9C */ lwz r3, 0x9c(r1) -/* 00013108 0001FE98 D9 61 00 98 */ stfd f11, 0x98(r1) -/* 0001310C 0001FE9C 80 81 00 9C */ lwz r4, 0x9c(r1) -/* 00013110 0001FEA0 48 00 00 01 */ bl bFixATan__Fii -/* 00013114 0001FEA4 A8 1B 00 92 */ lha r0, 0x92(r27) -/* 00013118 0001FEA8 3D 40 43 30 */ lis r10, 0x4330 -/* 0001311C 0001FEAC 3D 20 00 00 */ lis r9, .rodata+0xA90@ha -/* 00013120 0001FEB0 6C 00 80 00 */ xoris r0, r0, 0x8000 -/* 00013124 0001FEB4 C9 A9 0A 90 */ lfd f13, .rodata+0xA90@l(r9) -/* 00013128 0001FEB8 90 01 00 9C */ stw r0, 0x9c(r1) -/* 0001312C 0001FEBC 7D 69 5B 78 */ mr r9, r11 -/* 00013130 0001FEC0 91 41 00 98 */ stw r10, 0x98(r1) -/* 00013134 0001FEC4 C8 01 00 98 */ lfd f0, 0x98(r1) -/* 00013138 0001FEC8 FC 00 68 28 */ fsub f0, f0, f13 -/* 0001313C 0001FECC FC 00 00 18 */ frsp f0, f0 -/* 00013140 0001FED0 EC 00 07 72 */ fmuls f0, f0, f29 -/* 00013144 0001FED4 FD A0 00 90 */ fmr f13, f0 -/* 00013148 0001FED8 FD 80 68 1E */ fctiwz f12, f13 -/* 0001314C 0001FEDC D9 81 00 98 */ stfd f12, 0x98(r1) -/* 00013150 0001FEE0 81 21 00 9C */ lwz r9, 0x9c(r1) -/* 00013154 0001FEE4 7C 63 4A 14 */ add r3, r3, r9 -/* 00013158 0001FEE8 54 7C 04 3E */ clrlwi r28, r3, 16 -/* 0001315C 0001FEEC 38 1C C0 09 */ subi r0, r28, 0x3ff7 -/* 00013160 0001FEF0 28 00 40 08 */ cmplwi r0, 0x4008 -/* 00013164 0001FEF4 41 81 31 6C */ bgt .L_000162D0 -/* 00013168 0001FEF8 3B 80 3F F6 */ li r28, 0x3ff6 -.L_0001316C: -/* 0001316C 0001FEFC 38 1C 80 00 */ addi r0, r28, -0x8000 -.L_00013170: -/* 00013170 0001FF00 54 00 04 3E */ clrlwi r0, r0, 16 -/* 00013174 0001FF04 28 00 40 09 */ cmplwi r0, 0x4009 -/* 00013178 0001FF08 41 81 31 84 */ bgt .L_000162FC -/* 0001317C 0001FF0C 3B 80 00 00 */ li r28, 0x0 -/* 00013180 0001FF10 63 9C C0 0A */ ori r28, r28, 0xc00a -/* 00013184 0001FF14 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.SuperTurboOn@ha -/* 00013188 0001FF18 80 09 00 00 */ lwz r0, _21DebugWorldCameraMover.SuperTurboOn@l(r9) -/* 0001318C 0001FF1C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00013190 0001FF20 41 82 31 A8 */ beq .L_00016338 -/* 00013194 0001FF24 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.SuperTurboSpeed@ha -.L_00013198: -/* 00013198 0001FF28 C1 BB 00 80 */ lfs f13, 0x80(r27) -/* 0001319C 0001FF2C C0 09 00 00 */ lfs f0, _21DebugWorldCameraMover.SuperTurboSpeed@l(r9) -/* 000131A0 0001FF30 ED 4D 00 32 */ fmuls f10, f13, f0 -/* 000131A4 0001FF34 48 01 31 D0 */ b .text+0x131D0 -/* 000131A8 0001FF38 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.TurboOn@ha -/* 000131AC 0001FF3C 80 09 00 00 */ lwz r0, _21DebugWorldCameraMover.TurboOn@l(r9) -/* 000131B0 0001FF40 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000131B4 0001FF44 41 82 31 CC */ beq .L_00016380 -/* 000131B8 0001FF48 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.TurboSpeed@ha -/* 000131BC 0001FF4C C1 BB 00 80 */ lfs f13, 0x80(r27) -/* 000131C0 0001FF50 C0 09 00 00 */ lfs f0, _21DebugWorldCameraMover.TurboSpeed@l(r9) -/* 000131C4 0001FF54 ED 4D 00 32 */ fmuls f10, f13, f0 -/* 000131C8 0001FF58 48 01 31 D0 */ b .text+0x131D0 -/* 000131CC 0001FF5C C1 5B 00 80 */ lfs f10, 0x80(r27) -/* 000131D0 0001FF60 3F C0 00 00 */ lis r30, _21DebugWorldCameraMover.Eye@ha -/* 000131D4 0001FF64 3D 20 00 00 */ lis r9, .rodata+0xA7C@ha -/* 000131D8 0001FF68 3B BE 00 00 */ addi r29, r30, _21DebugWorldCameraMover.Eye@l -/* 000131DC 0001FF6C C1 69 0A 7C */ lfs f11, .rodata+0xA7C@l(r9) -/* 000131E0 0001FF70 C0 1D 00 08 */ lfs f0, 0x8(r29) -/* 000131E4 0001FF74 ED 4A 07 72 */ fmuls f10, f10, f29 -/* 000131E8 0001FF78 C1 BD 00 04 */ lfs f13, 0x4(r29) -/* 000131EC 0001FF7C 38 81 00 40 */ addi r4, r1, 0x40 -/* 000131F0 0001FF80 C1 9E 00 00 */ lfs f12, _21DebugWorldCameraMover.Eye@l(r30) -/* 000131F4 0001FF84 EC 00 50 2A */ fadds f0, f0, f10 -/* 000131F8 0001FF88 D1 A1 00 44 */ stfs f13, 0x44(r1) -/* 000131FC 0001FF8C 38 61 00 20 */ addi r3, r1, 0x20 -/* 00013200 0001FF90 D1 81 00 40 */ stfs f12, 0x40(r1) -/* 00013204 0001FF94 D0 01 00 48 */ stfs f0, 0x48(r1) -/* 00013208 0001FF98 D1 61 00 34 */ stfs f11, 0x34(r1) -/* 0001320C 0001FF9C D1 61 00 30 */ stfs f11, 0x30(r1) -/* 00013210 0001FFA0 D1 41 00 38 */ stfs f10, 0x38(r1) -/* 00013214 0001FFA4 48 00 00 01 */ bl __8bVector3RC8bVector3 -/* 00013218 0001FFA8 C1 81 00 20 */ lfs f12, 0x20(r1) -/* 0001321C 0001FFAC 3D 20 00 00 */ lis r9, .rodata+0xA80@ha -/* 00013220 0001FFB0 C0 01 00 28 */ lfs f0, 0x28(r1) -/* 00013224 0001FFB4 7F 83 E3 78 */ mr r3, r28 -/* 00013228 0001FFB8 C1 A1 00 24 */ lfs f13, 0x24(r1) -/* 0001322C 0001FFBC D1 9E 00 00 */ stfs f12, _21DebugWorldCameraMover.Eye@l(r30) -/* 00013230 0001FFC0 C3 C9 0A 80 */ lfs f30, .rodata+0xA80@l(r9) -/* 00013234 0001FFC4 D1 BD 00 04 */ stfs f13, 0x4(r29) -/* 00013238 0001FFC8 D0 1D 00 08 */ stfs f0, 0x8(r29) -/* 0001323C 0001FFCC 48 00 00 01 */ bl bCos__FUs -/* 00013240 0001FFD0 FF E0 08 90 */ fmr f31, f1 -/* 00013244 0001FFD4 7F E3 FB 78 */ mr r3, r31 -/* 00013248 0001FFD8 48 00 00 01 */ bl bCos__FUs -/* 0001324C 0001FFDC C0 1E 00 00 */ lfs f0, _21DebugWorldCameraMover.Eye@l(r30) -/* 00013250 0001FFE0 EC 21 07 B2 */ fmuls f1, f1, f30 -/* 00013254 0001FFE4 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.Look@ha -/* 00013258 0001FFE8 7F 83 E3 78 */ mr r3, r28 -/* 0001325C 0001FFEC EF FF 00 7A */ fmadds f31, f31, f1, f0 -/* 00013260 0001FFF0 3B C9 00 00 */ addi r30, r9, _21DebugWorldCameraMover.Look@l -/* 00013264 0001FFF4 D3 E9 00 00 */ stfs f31, _21DebugWorldCameraMover.Look@l(r9) -/* 00013268 0001FFF8 48 00 00 01 */ bl bCos__FUs -/* 0001326C 0001FFFC FF E0 08 90 */ fmr f31, f1 -/* 00013270 00020000 7F E3 FB 78 */ mr r3, r31 -/* 00013274 00020004 48 00 00 01 */ bl bSin__FUs -/* 00013278 00020008 C0 1D 00 04 */ lfs f0, 0x4(r29) -/* 0001327C 0002000C EC 21 07 B2 */ fmuls f1, f1, f30 -/* 00013280 00020010 7F 83 E3 78 */ mr r3, r28 -/* 00013284 00020014 EF FF 00 7A */ fmadds f31, f31, f1, f0 -/* 00013288 00020018 D3 FE 00 04 */ stfs f31, 0x4(r30) -/* 0001328C 0002001C 48 00 00 01 */ bl bSin__FUs -/* 00013290 00020020 C0 1D 00 08 */ lfs f0, 0x8(r29) -/* 00013294 00020024 EC 21 07 BA */ fmadds f1, f1, f30, f0 -/* 00013298 00020028 D0 3E 00 08 */ stfs f1, 0x8(r30) -/* 0001329C 0002002C 3D 20 00 00 */ lis r9, .rodata+0xA7C@ha -/* 000132A0 00020030 C1 BB 00 84 */ lfs f13, 0x84(r27) -/* 000132A4 00020034 C0 09 0A 7C */ lfs f0, .rodata+0xA7C@l(r9) -/* 000132A8 00020038 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 000132AC 0002003C 41 82 32 D4 */ beq .L_00016580 -/* 000132B0 00020040 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.SuperTurboOn@ha -/* 000132B4 00020044 80 09 00 00 */ lwz r0, _21DebugWorldCameraMover.SuperTurboOn@l(r9) -/* 000132B8 00020048 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000132BC 0002004C 40 82 32 F0 */ bne .L_000165AC -/* 000132C0 00020050 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.TurboOn@ha -/* 000132C4 00020054 80 09 00 00 */ lwz r0, _21DebugWorldCameraMover.TurboOn@l(r9) -/* 000132C8 00020058 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000132CC 0002005C 40 82 33 10 */ bne .L_000165DC -/* 000132D0 00020060 48 01 33 20 */ b .text+0x13320 -/* 000132D4 00020064 C1 BB 00 88 */ lfs f13, 0x88(r27) -/* 000132D8 00020068 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 000132DC 0002006C 41 82 33 B4 */ beq .L_00016690 -/* 000132E0 00020070 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.SuperTurboOn@ha -/* 000132E4 00020074 80 09 00 00 */ lwz r0, _21DebugWorldCameraMover.SuperTurboOn@l(r9) -/* 000132E8 00020078 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000132EC 0002007C 41 82 33 00 */ beq .L_000165EC -/* 000132F0 00020080 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.SuperTurboSpeed@ha -/* 000132F4 00020084 C0 09 00 00 */ lfs f0, _21DebugWorldCameraMover.SuperTurboSpeed@l(r9) -/* 000132F8 00020088 EC 0D 00 32 */ fmuls f0, f13, f0 -/* 000132FC 0002008C 48 01 33 24 */ b .text+0x13324 -/* 00013300 00020090 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.TurboOn@ha -.L_00013304: -/* 00013304 00020094 80 09 00 00 */ lwz r0, _21DebugWorldCameraMover.TurboOn@l(r9) -.L_00013308: -/* 00013308 00020098 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0001330C 0002009C 41 82 33 20 */ beq .L_0001662C -/* 00013310 000200A0 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.TurboSpeed@ha -/* 00013314 000200A4 C0 09 00 00 */ lfs f0, _21DebugWorldCameraMover.TurboSpeed@l(r9) -/* 00013318 000200A8 EC 0D 00 32 */ fmuls f0, f13, f0 -/* 0001331C 000200AC 48 01 33 24 */ b .text+0x13324 -/* 00013320 000200B0 FC 00 68 90 */ fmr f0, f13 -/* 00013324 000200B4 81 3B 00 1C */ lwz r9, 0x1c(r27) -/* 00013328 000200B8 3D 00 00 00 */ lis r8, _21DebugWorldCameraMover.Eye@ha -/* 0001332C 000200BC C1 48 00 00 */ lfs f10, _21DebugWorldCameraMover.Eye@l(r8) -/* 00013330 000200C0 39 48 00 00 */ addi r10, r8, _21DebugWorldCameraMover.Eye@l -/* 00013334 000200C4 C0 C9 00 58 */ lfs f6, 0x58(r9) -/* 00013338 000200C8 EC 00 07 72 */ fmuls f0, f0, f29 -/* 0001333C 000200CC C1 09 00 50 */ lfs f8, 0x50(r9) -/* 00013340 000200D0 3C E0 00 00 */ lis r7, _21DebugWorldCameraMover.Look@ha -/* 00013344 000200D4 C1 29 00 54 */ lfs f9, 0x54(r9) -/* 00013348 000200D8 EC C6 00 32 */ fmuls f6, f6, f0 -/* 0001334C 000200DC C1 8A 00 08 */ lfs f12, 0x8(r10) -/* 00013350 000200E0 ED 08 00 32 */ fmuls f8, f8, f0 -/* 00013354 000200E4 ED 29 00 32 */ fmuls f9, f9, f0 -/* 00013358 000200E8 39 67 00 00 */ addi r11, r7, _21DebugWorldCameraMover.Look@l -/* 0001335C 000200EC C0 EA 00 04 */ lfs f7, 0x4(r10) -/* 00013360 000200F0 ED 4A 40 2A */ fadds f10, f10, f8 -/* 00013364 000200F4 C1 6B 00 04 */ lfs f11, 0x4(r11) -/* 00013368 000200F8 ED 8C 30 2A */ fadds f12, f12, f6 -/* 0001336C 000200FC C0 0B 00 08 */ lfs f0, 0x8(r11) -/* 00013370 00020100 EC E7 48 2A */ fadds f7, f7, f9 -/* 00013374 00020104 C1 A7 00 00 */ lfs f13, _21DebugWorldCameraMover.Look@l(r7) -/* 00013378 00020108 ED 6B 48 2A */ fadds f11, f11, f9 -/* 0001337C 0002010C D1 48 00 00 */ stfs f10, _21DebugWorldCameraMover.Eye@l(r8) -/* 00013380 00020110 EC 00 30 2A */ fadds f0, f0, f6 -/* 00013384 00020114 D1 8A 00 08 */ stfs f12, 0x8(r10) -/* 00013388 00020118 ED AD 40 2A */ fadds f13, f13, f8 -/* 0001338C 0002011C D1 A7 00 00 */ stfs f13, _21DebugWorldCameraMover.Look@l(r7) -/* 00013390 00020120 D0 0B 00 08 */ stfs f0, 0x8(r11) -/* 00013394 00020124 D0 EA 00 04 */ stfs f7, 0x4(r10) -/* 00013398 00020128 D1 6B 00 04 */ stfs f11, 0x4(r11) -/* 0001339C 0002012C D1 01 00 30 */ stfs f8, 0x30(r1) -/* 000133A0 00020130 D1 21 00 34 */ stfs f9, 0x34(r1) -/* 000133A4 00020134 D0 C1 00 38 */ stfs f6, 0x38(r1) -/* 000133A8 00020138 D1 01 00 20 */ stfs f8, 0x20(r1) -/* 000133AC 0002013C D1 21 00 24 */ stfs f9, 0x24(r1) -/* 000133B0 00020140 D0 C1 00 28 */ stfs f6, 0x28(r1) -/* 000133B4 00020144 3D 20 00 00 */ lis r9, .rodata+0xA7C@ha -/* 000133B8 00020148 C1 BB 00 8C */ lfs f13, 0x8c(r27) -/* 000133BC 0002014C C0 09 0A 7C */ lfs f0, .rodata+0xA7C@l(r9) -/* 000133C0 00020150 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 000133C4 00020154 41 82 34 94 */ beq .L_00016858 -/* 000133C8 00020158 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.SuperTurboOn@ha -/* 000133CC 0002015C 80 09 00 00 */ lwz r0, _21DebugWorldCameraMover.SuperTurboOn@l(r9) -/* 000133D0 00020160 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000133D4 00020164 41 82 33 E8 */ beq .L_000167BC -/* 000133D8 00020168 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.SuperTurboSpeed@ha -/* 000133DC 0002016C C0 09 00 00 */ lfs f0, _21DebugWorldCameraMover.SuperTurboSpeed@l(r9) -/* 000133E0 00020170 EF CD 00 32 */ fmuls f30, f13, f0 -/* 000133E4 00020174 48 01 34 0C */ b .text+0x1340C -/* 000133E8 00020178 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.TurboOn@ha -/* 000133EC 0002017C 80 09 00 00 */ lwz r0, _21DebugWorldCameraMover.TurboOn@l(r9) -/* 000133F0 00020180 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000133F4 00020184 41 82 34 08 */ beq .L_000167FC -/* 000133F8 00020188 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.TurboSpeed@ha -/* 000133FC 0002018C C0 09 00 00 */ lfs f0, _21DebugWorldCameraMover.TurboSpeed@l(r9) -/* 00013400 00020190 EF CD 00 32 */ fmuls f30, f13, f0 -/* 00013404 00020194 48 01 34 0C */ b .text+0x1340C -/* 00013408 00020198 FF C0 68 90 */ fmr f30, f13 -/* 0001340C 0002019C 3B DF 40 00 */ addi r30, r31, 0x4000 -/* 00013410 000201A0 EF DE 07 72 */ fmuls f30, f30, f29 -/* 00013414 000201A4 57 DE 04 3E */ clrlwi r30, r30, 16 -/* 00013418 000201A8 7F C3 F3 78 */ mr r3, r30 -/* 0001341C 000201AC 48 00 00 01 */ bl bCos__FUs -/* 00013420 000201B0 EF E1 07 B2 */ fmuls f31, f1, f30 -/* 00013424 000201B4 7F C3 F3 78 */ mr r3, r30 -/* 00013428 000201B8 48 00 00 01 */ bl bSin__FUs -/* 0001342C 000201BC 3D 40 00 00 */ lis r10, _21DebugWorldCameraMover.Eye@ha -/* 00013430 000201C0 3D 00 00 00 */ lis r8, _21DebugWorldCameraMover.Look@ha -/* 00013434 000201C4 C1 AA 00 00 */ lfs f13, _21DebugWorldCameraMover.Eye@l(r10) -/* 00013438 000201C8 39 2A 00 00 */ addi r9, r10, _21DebugWorldCameraMover.Eye@l -/* 0001343C 000201CC 39 68 00 00 */ addi r11, r8, _21DebugWorldCameraMover.Look@l -/* 00013440 000201D0 C1 69 00 04 */ lfs f11, 0x4(r9) -/* 00013444 000201D4 C1 8B 00 04 */ lfs f12, 0x4(r11) -/* 00013448 000201D8 ED AD F8 2A */ fadds f13, f13, f31 -/* 0001344C 000201DC C1 49 00 08 */ lfs f10, 0x8(r9) -/* 00013450 000201E0 3C E0 00 00 */ lis r7, .rodata+0xA7C@ha -/* 00013454 000201E4 C1 2B 00 08 */ lfs f9, 0x8(r11) -/* 00013458 000201E8 EC 21 07 B2 */ fmuls f1, f1, f30 -/* 0001345C 000201EC C0 08 00 00 */ lfs f0, _21DebugWorldCameraMover.Look@l(r8) -/* 00013460 000201F0 ED 6B 08 2A */ fadds f11, f11, f1 -/* 00013464 000201F4 D1 AA 00 00 */ stfs f13, _21DebugWorldCameraMover.Eye@l(r10) -/* 00013468 000201F8 ED 8C 08 2A */ fadds f12, f12, f1 -/* 0001346C 000201FC D1 49 00 08 */ stfs f10, 0x8(r9) -/* 00013470 00020200 EC 00 F8 2A */ fadds f0, f0, f31 -/* 00013474 00020204 D0 08 00 00 */ stfs f0, _21DebugWorldCameraMover.Look@l(r8) -.L_00013478: -/* 00013478 00020208 C1 07 0A 7C */ lfs f8, .rodata+0xA7C@l(r7) -/* 0001347C 0002020C D1 2B 00 08 */ stfs f9, 0x8(r11) -/* 00013480 00020210 D1 01 00 28 */ stfs f8, 0x28(r1) -.L_00013484: -/* 00013484 00020214 D1 69 00 04 */ stfs f11, 0x4(r9) -/* 00013488 00020218 D1 8B 00 04 */ stfs f12, 0x4(r11) -/* 0001348C 0002021C D3 E1 00 20 */ stfs f31, 0x20(r1) -/* 00013490 00020220 D0 21 00 24 */ stfs f1, 0x24(r1) -/* 00013494 00020224 3F C0 00 00 */ lis r30, _21DebugWorldCameraMover.Eye@ha -/* 00013498 00020228 3F A0 00 00 */ lis r29, _21DebugWorldCameraMover.Look@ha -.L_0001349C: -/* 0001349C 0002022C 3B 81 00 20 */ addi r28, r1, 0x20 -.L_000134A0: -/* 000134A0 00020230 3B DE 00 00 */ addi r30, r30, _21DebugWorldCameraMover.Eye@l -/* 000134A4 00020234 3B BD 00 00 */ addi r29, r29, _21DebugWorldCameraMover.Look@l -/* 000134A8 00020238 3B E1 00 50 */ addi r31, r1, 0x50 -/* 000134AC 0002023C 7F C4 F3 78 */ mr r4, r30 -/* 000134B0 00020240 7F 83 E3 78 */ mr r3, r28 -/* 000134B4 00020244 7F A5 EB 78 */ mr r5, r29 -/* 000134B8 00020248 38 C0 00 00 */ li r6, 0x0 -/* 000134BC 0002024C 48 00 31 11 */ bl .L_000165CC -/* 000134C0 00020250 7F C4 F3 78 */ mr r4, r30 -/* 000134C4 00020254 7F A5 EB 78 */ mr r5, r29 -/* 000134C8 00020258 7F 86 E3 78 */ mr r6, r28 -/* 000134CC 0002025C 7F E3 FB 78 */ mr r3, r31 -/* 000134D0 00020260 48 00 00 01 */ bl eCreateLookAtMatrix__FP8bMatrix4R8bVector3N21 -/* 000134D4 00020264 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha -/* 000134D8 00020268 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) -/* 000134DC 0002026C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000134E0 00020270 40 82 34 F0 */ bne .L_000169D0 -/* 000134E4 00020274 81 3B 00 1C */ lwz r9, 0x1c(r27) -/* 000134E8 00020278 38 00 32 DC */ li r0, 0x32dc -/* 000134EC 0002027C B0 09 00 C4 */ sth r0, 0xc4(r9) -/* 000134F0 00020280 80 7B 00 1C */ lwz r3, 0x1c(r27) -/* 000134F4 00020284 7F E4 FB 78 */ mr r4, r31 -/* 000134F8 00020288 FC 20 E8 90 */ fmr f1, f29 -/* 000134FC 0002028C 48 00 04 ED */ bl .L_000139E8 -/* 00013500 00020290 80 01 00 DC */ lwz r0, 0xdc(r1) -/* 00013504 00020294 7C 08 03 A6 */ mtlr r0 -/* 00013508 00020298 BB 21 00 A4 */ lmw r25, 0xa4(r1) -/* 0001350C 0002029C E3 A1 00 C0 */ psq_l f29, 0xc0(r1), 0, qr0 -/* 00013510 000202A0 E3 C1 00 C8 */ psq_l f30, 0xc8(r1), 0, qr0 -/* 00013514 000202A4 E3 E1 00 D0 */ psq_l f31, 0xd0(r1), 0, qr0 -/* 00013518 000202A8 38 21 00 D8 */ addi r1, r1, 0xd8 -/* 0001351C 000202AC 4E 80 00 20 */ blr -.endfn Update__21DebugWorldCameraMoverf - -# .text:0x13520 | size: 0xDC -# ICEData::PlatEndianSwap -.fn PlatEndianSwap__7ICEData, global -/* 00013520 000202B0 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 00013524 000202B4 7C 08 02 A6 */ mflr r0 -/* 00013528 000202B8 BF 41 00 08 */ stmw r26, 0x8(r1) -/* 0001352C 000202BC 90 01 00 24 */ stw r0, 0x24(r1) -/* 00013530 000202C0 7C 7D 1B 78 */ mr r29, r3 -/* 00013534 000202C4 3B E0 00 00 */ li r31, 0x0 -/* 00013538 000202C8 38 7D 00 10 */ addi r3, r29, 0x10 -/* 0001353C 000202CC 48 00 00 01 */ bl bEndianSwap32__FPv -/* 00013540 000202D0 38 7D 00 0C */ addi r3, r29, 0xc -/* 00013544 000202D4 48 00 00 01 */ bl bEndianSwap32__FPv -/* 00013548 000202D8 57 E3 10 3A */ slwi r3, r31, 2 -/* 0001354C 000202DC 3B 5F 00 01 */ addi r26, r31, 0x1 -/* 00013550 000202E0 7C 7B 1B 78 */ mr r27, r3 -/* 00013554 000202E4 3B 80 00 00 */ li r28, 0x0 -/* 00013558 000202E8 7C 63 EA 14 */ add r3, r3, r29 -/* 0001355C 000202EC 38 63 00 14 */ addi r3, r3, 0x14 -/* 00013560 000202F0 48 00 00 01 */ bl bEndianSwap32__FPv -/* 00013564 000202F4 1C 1F 00 0C */ mulli r0, r31, 0xc -/* 00013568 000202F8 7F E0 EA 14 */ add r31, r0, r29 -/* 0001356C 000202FC 57 9E 10 3A */ slwi r30, r28, 2 -/* 00013570 00020300 7C 7E FA 14 */ add r3, r30, r31 -/* 00013574 00020304 3B 9C 00 01 */ addi r28, r28, 0x1 -/* 00013578 00020308 38 63 00 1C */ addi r3, r3, 0x1c -.L_0001357C: -/* 0001357C 0002030C 48 00 00 01 */ bl bEndianSwap32__FPv -/* 00013580 00020310 7F DE FA 14 */ add r30, r30, r31 -/* 00013584 00020314 38 7E 00 34 */ addi r3, r30, 0x34 -/* 00013588 00020318 48 00 00 01 */ bl bEndianSwap32__FPv -/* 0001358C 0002031C 2C 1C 00 02 */ cmpwi r28, 0x2 -/* 00013590 00020320 40 81 35 6C */ ble .L_00016AFC -/* 00013594 00020324 7C 7B EA 14 */ add r3, r27, r29 -/* 00013598 00020328 7F 5F D3 78 */ mr r31, r26 -.L_0001359C: -/* 0001359C 0002032C 38 63 00 4C */ addi r3, r3, 0x4c -/* 000135A0 00020330 48 00 00 01 */ bl bEndianSwap32__FPv -/* 000135A4 00020334 7C 7B EA 14 */ add r3, r27, r29 -/* 000135A8 00020338 38 63 00 54 */ addi r3, r3, 0x54 -/* 000135AC 0002033C 48 00 00 01 */ bl bEndianSwap32__FPv -/* 000135B0 00020340 7C 7B EA 14 */ add r3, r27, r29 -/* 000135B4 00020344 38 63 00 5C */ addi r3, r3, 0x5c -/* 000135B8 00020348 48 00 00 01 */ bl bEndianSwap32__FPv -/* 000135BC 0002034C 7C 7B EA 14 */ add r3, r27, r29 -/* 000135C0 00020350 38 63 00 74 */ addi r3, r3, 0x74 -/* 000135C4 00020354 48 00 00 01 */ bl bEndianSwap32__FPv -/* 000135C8 00020358 7C 7B EA 14 */ add r3, r27, r29 -/* 000135CC 0002035C 38 63 00 64 */ addi r3, r3, 0x64 -/* 000135D0 00020360 48 00 00 01 */ bl bEndianSwap32__FPv -/* 000135D4 00020364 7C 7B EA 14 */ add r3, r27, r29 -/* 000135D8 00020368 38 63 00 6C */ addi r3, r3, 0x6c -/* 000135DC 0002036C 48 00 00 01 */ bl bEndianSwap32__FPv -/* 000135E0 00020370 2C 1F 00 01 */ cmpwi r31, 0x1 -/* 000135E4 00020374 40 81 35 48 */ ble .L_00016B2C -/* 000135E8 00020378 80 01 00 24 */ lwz r0, 0x24(r1) -/* 000135EC 0002037C 7C 08 03 A6 */ mtlr r0 -/* 000135F0 00020380 BB 41 00 08 */ lmw r26, 0x8(r1) -/* 000135F4 00020384 38 21 00 20 */ addi r1, r1, 0x20 -/* 000135F8 00020388 4E 80 00 20 */ blr -.endfn PlatEndianSwap__7ICEData - -# .text:0x135FC | size: 0x78 -.fn GetEye__7ICEDataiPQ23ICE7Vector3, global -/* 000135FC 0002038C 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 00013600 00020390 7C 08 02 A6 */ mflr r0 -.L_00013604: -/* 00013604 00020394 90 01 00 0C */ stw r0, 0xc(r1) -/* 00013608 00020398 1C 84 00 0C */ mulli r4, r4, 0xc -/* 0001360C 0002039C 39 63 00 1C */ addi r11, r3, 0x1c -/* 00013610 000203A0 3D 20 00 00 */ lis r9, bMirrorICEData@ha -/* 00013614 000203A4 80 09 00 00 */ lwz r0, bMirrorICEData@l(r9) -/* 00013618 000203A8 39 43 00 20 */ addi r10, r3, 0x20 -/* 0001361C 000203AC 39 03 00 24 */ addi r8, r3, 0x24 -/* 00013620 000203B0 7C 0B 24 2E */ lfsx f0, r11, r4 -/* 00013624 000203B4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00013628 000203B8 D0 05 00 00 */ stfs f0, 0x0(r5) -/* 0001362C 000203BC 7D AA 24 2E */ lfsx f13, r10, r4 -/* 00013630 000203C0 D1 A5 00 04 */ stfs f13, 0x4(r5) -/* 00013634 000203C4 7C 08 24 2E */ lfsx f0, r8, r4 -/* 00013638 000203C8 D0 05 00 08 */ stfs f0, 0x8(r5) -/* 0001363C 000203CC 41 82 36 48 */ beq .L_00016C84 -/* 00013640 000203D0 FC 00 68 50 */ fneg f0, f13 -/* 00013644 000203D4 D0 05 00 04 */ stfs f0, 0x4(r5) -/* 00013648 000203D8 88 03 00 04 */ lbz r0, 0x4(r3) -/* 0001364C 000203DC 2C 00 00 03 */ cmpwi r0, 0x3 -/* 00013650 000203E0 40 82 36 64 */ bne .L_00016CB4 -/* 00013654 000203E4 3C 60 00 00 */ lis r3, TheICEManager@ha -/* 00013658 000203E8 7C A4 2B 78 */ mr r4, r5 -.L_0001365C: -/* 0001365C 000203EC 38 63 00 00 */ addi r3, r3, TheICEManager@l -/* 00013660 000203F0 48 01 87 89 */ bl .text+0x18788 -/* 00013664 000203F4 80 01 00 0C */ lwz r0, 0xc(r1) -/* 00013668 000203F8 7C 08 03 A6 */ mtlr r0 -/* 0001366C 000203FC 38 21 00 08 */ addi r1, r1, 0x8 -/* 00013670 00020400 4E 80 00 20 */ blr -.endfn GetEye__7ICEDataiPQ23ICE7Vector3 - -# .text:0x13674 | size: 0x78 -.fn GetLook__7ICEDataiPQ23ICE7Vector3, global -/* 00013674 00020404 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 00013678 00020408 7C 08 02 A6 */ mflr r0 -/* 0001367C 0002040C 90 01 00 0C */ stw r0, 0xc(r1) -/* 00013680 00020410 1C 84 00 0C */ mulli r4, r4, 0xc -/* 00013684 00020414 39 63 00 34 */ addi r11, r3, 0x34 -/* 00013688 00020418 3D 20 00 00 */ lis r9, bMirrorICEData@ha -/* 0001368C 0002041C 80 09 00 00 */ lwz r0, bMirrorICEData@l(r9) -/* 00013690 00020420 39 43 00 38 */ addi r10, r3, 0x38 -/* 00013694 00020424 39 03 00 3C */ addi r8, r3, 0x3c -/* 00013698 00020428 7C 0B 24 2E */ lfsx f0, r11, r4 -/* 0001369C 0002042C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000136A0 00020430 D0 05 00 00 */ stfs f0, 0x0(r5) -/* 000136A4 00020434 7D AA 24 2E */ lfsx f13, r10, r4 -/* 000136A8 00020438 D1 A5 00 04 */ stfs f13, 0x4(r5) -/* 000136AC 0002043C 7C 08 24 2E */ lfsx f0, r8, r4 -/* 000136B0 00020440 D0 05 00 08 */ stfs f0, 0x8(r5) -/* 000136B4 00020444 41 82 36 C0 */ beq .L_00016D74 -/* 000136B8 00020448 FC 00 68 50 */ fneg f0, f13 -/* 000136BC 0002044C D0 05 00 04 */ stfs f0, 0x4(r5) -/* 000136C0 00020450 88 03 00 05 */ lbz r0, 0x5(r3) -/* 000136C4 00020454 2C 00 00 03 */ cmpwi r0, 0x3 -/* 000136C8 00020458 40 82 36 DC */ bne .L_00016DA4 -/* 000136CC 0002045C 3C 60 00 00 */ lis r3, TheICEManager@ha -/* 000136D0 00020460 7C A4 2B 78 */ mr r4, r5 -/* 000136D4 00020464 38 63 00 00 */ addi r3, r3, TheICEManager@l -/* 000136D8 00020468 48 01 87 89 */ bl .text+0x18788 -/* 000136DC 0002046C 80 01 00 0C */ lwz r0, 0xc(r1) -/* 000136E0 00020470 7C 08 03 A6 */ mtlr r0 -/* 000136E4 00020474 38 21 00 08 */ addi r1, r1, 0x8 -/* 000136E8 00020478 4E 80 00 20 */ blr -.endfn GetLook__7ICEDataiPQ23ICE7Vector3 - -# .text:0x136EC | size: 0xDC -.fn KeysShared__3ICEP7ICEDataiT1i, global -/* 000136EC 0002047C 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 000136F0 00020480 7C 08 02 A6 */ mflr r0 -/* 000136F4 00020484 90 01 00 0C */ stw r0, 0xc(r1) -/* 000136F8 00020488 7C 67 1B 78 */ mr r7, r3 -/* 000136FC 0002048C 54 80 10 3A */ slwi r0, r4, 2 -/* 00013700 00020490 54 C8 10 3A */ slwi r8, r6, 2 -/* 00013704 00020494 39 27 00 14 */ addi r9, r7, 0x14 -/* 00013708 00020498 39 45 00 14 */ addi r10, r5, 0x14 -/* 0001370C 0002049C 7C 09 04 2E */ lfsx f0, r9, r0 -/* 00013710 000204A0 7D AA 44 2E */ lfsx f13, r10, r8 -/* 00013714 000204A4 3D 60 00 00 */ lis r11, .rodata+0xAA0@ha -/* 00013718 000204A8 C1 6B 0A A0 */ lfs f11, .rodata+0xAA0@l(r11) -/* 0001371C 000204AC EC 00 68 28 */ fsubs f0, f0, f13 -/* 00013720 000204B0 FD A0 00 90 */ fmr f13, f0 -/* 00013724 000204B4 FC 00 58 00 */ fcmpu cr0, f0, f11 -/* 00013728 000204B8 4C 62 0B 82 */ cror un, eq, gt -/* 0001372C 000204BC 41 83 37 34 */ bso .L_00016E60 -/* 00013730 000204C0 FD A0 68 50 */ fneg f13, f13 -/* 00013734 000204C4 3D 20 00 00 */ lis r9, .rodata+0xAA4@ha -/* 00013738 000204C8 C1 89 0A A4 */ lfs f12, .rodata+0xAA4@l(r9) -/* 0001373C 000204CC FC 0D 60 00 */ fcmpu cr0, f13, f12 -/* 00013740 000204D0 41 81 37 78 */ bgt .L_00016EB8 -/* 00013744 000204D4 39 27 00 4C */ addi r9, r7, 0x4c -/* 00013748 000204D8 39 65 00 4C */ addi r11, r5, 0x4c -/* 0001374C 000204DC 7D AB 44 2E */ lfsx f13, r11, r8 -/* 00013750 000204E0 7C 09 04 2E */ lfsx f0, r9, r0 -/* 00013754 000204E4 EC 00 68 28 */ fsubs f0, f0, f13 -/* 00013758 000204E8 FD A0 00 90 */ fmr f13, f0 -/* 0001375C 000204EC FC 00 58 00 */ fcmpu cr0, f0, f11 -/* 00013760 000204F0 4C 62 0B 82 */ cror un, eq, gt -/* 00013764 000204F4 41 83 37 6C */ bso .L_00016ED0 -.L_00013768: -/* 00013768 000204F8 FD A0 68 50 */ fneg f13, f13 -/* 0001376C 000204FC FC 0D 60 00 */ fcmpu cr0, f13, f12 -/* 00013770 00020500 4C 62 03 82 */ cror un, eq, lt -/* 00013774 00020504 41 83 37 80 */ bso .L_00016EF4 -/* 00013778 00020508 38 60 00 00 */ li r3, 0x0 -/* 0001377C 0002050C 48 01 37 B8 */ b .text+0x137B8 -/* 00013780 00020510 39 27 00 54 */ addi r9, r7, 0x54 -/* 00013784 00020514 39 65 00 54 */ addi r11, r5, 0x54 -/* 00013788 00020518 7C 09 04 2E */ lfsx f0, r9, r0 -/* 0001378C 0002051C 7D AB 44 2E */ lfsx f13, r11, r8 -/* 00013790 00020520 EC 00 68 28 */ fsubs f0, f0, f13 -/* 00013794 00020524 FC 00 58 00 */ fcmpu cr0, f0, f11 -/* 00013798 00020528 4C 62 0B 82 */ cror un, eq, gt -/* 0001379C 0002052C 41 83 37 A4 */ bso .L_00016F40 -/* 000137A0 00020530 FC 00 00 50 */ fneg f0, f0 -/* 000137A4 00020534 FC 00 60 00 */ fcmpu cr0, f0, f12 -/* 000137A8 00020538 38 60 00 00 */ li r3, 0x0 -/* 000137AC 0002053C 41 81 37 B8 */ bgt .L_00016F64 -/* 000137B0 00020540 7C E3 3B 78 */ mr r3, r7 -/* 000137B4 00020544 48 01 37 C9 */ bl .text+0x137C8 -/* 000137B8 00020548 80 01 00 0C */ lwz r0, 0xc(r1) -/* 000137BC 0002054C 7C 08 03 A6 */ mtlr r0 -/* 000137C0 00020550 38 21 00 08 */ addi r1, r1, 0x8 -/* 000137C4 00020554 4E 80 00 20 */ blr -.endfn KeysShared__3ICEP7ICEDataiT1i - -# .text:0x137C8 | size: 0xD4 -.fn KeysSharedSpace__3ICEP7ICEDataiT1i, global -/* 000137C8 00020558 89 23 00 00 */ lbz r9, 0x0(r3) -/* 000137CC 0002055C 88 05 00 00 */ lbz r0, 0x0(r5) -/* 000137D0 00020560 7C 09 00 00 */ cmpw r9, r0 -/* 000137D4 00020564 40 82 37 F8 */ bne .L_00016FCC -/* 000137D8 00020568 89 23 00 04 */ lbz r9, 0x4(r3) -/* 000137DC 0002056C 88 05 00 04 */ lbz r0, 0x4(r5) -/* 000137E0 00020570 7C 09 00 00 */ cmpw r9, r0 -/* 000137E4 00020574 40 82 37 F8 */ bne .L_00016FDC -/* 000137E8 00020578 89 23 00 05 */ lbz r9, 0x5(r3) -/* 000137EC 0002057C 88 05 00 05 */ lbz r0, 0x5(r5) -/* 000137F0 00020580 7C 09 00 00 */ cmpw r9, r0 -/* 000137F4 00020584 41 82 38 00 */ beq .L_00016FF4 -/* 000137F8 00020588 38 60 00 00 */ li r3, 0x0 -/* 000137FC 0002058C 4E 80 00 20 */ blr -.L_00013800: -/* 00013800 00020590 1C 84 00 0C */ mulli r4, r4, 0xc -.L_00013804: -/* 00013804 00020594 3D 60 00 00 */ lis r11, .rodata+0xAAC@ha -/* 00013808 00020598 3D 20 00 00 */ lis r9, .rodata+0xAA8@ha -/* 0001380C 0002059C C1 8B 0A AC */ lfs f12, .rodata+0xAAC@l(r11) -.L_00013810: -/* 00013810 000205A0 1C C6 00 0C */ mulli r6, r6, 0xc -/* 00013814 000205A4 39 03 00 34 */ addi r8, r3, 0x34 -/* 00013818 000205A8 39 45 00 34 */ addi r10, r5, 0x34 -/* 0001381C 000205AC C1 69 0A A8 */ lfs f11, .rodata+0xAA8@l(r9) -/* 00013820 000205B0 39 60 00 00 */ li r11, 0x0 -/* 00013824 000205B4 38 63 00 1C */ addi r3, r3, 0x1c -/* 00013828 000205B8 38 A5 00 1C */ addi r5, r5, 0x1c -/* 0001382C 000205BC 55 60 10 3A */ slwi r0, r11, 2 -/* 00013830 000205C0 7D 20 32 14 */ add r9, r0, r6 -/* 00013834 000205C4 7C 00 22 14 */ add r0, r0, r4 -/* 00013838 000205C8 7C 05 4C 2E */ lfsx f0, r5, r9 -/* 0001383C 000205CC 7D A3 04 2E */ lfsx f13, r3, r0 -/* 00013840 000205D0 ED AD 00 28 */ fsubs f13, f13, f0 -/* 00013844 000205D4 FC 00 68 90 */ fmr f0, f13 -/* 00013848 000205D8 FC 0D 58 00 */ fcmpu cr0, f13, f11 -/* 0001384C 000205DC 4C 62 0B 82 */ cror un, eq, gt -/* 00013850 000205E0 41 83 38 58 */ bso .L_000170A8 -/* 00013854 000205E4 FC 00 00 50 */ fneg f0, f0 -/* 00013858 000205E8 FC 00 60 00 */ fcmpu cr0, f0, f12 -/* 0001385C 000205EC 41 81 37 F8 */ bgt .L_00017054 -/* 00013860 000205F0 7C 0A 4C 2E */ lfsx f0, r10, r9 -/* 00013864 000205F4 7D A8 04 2E */ lfsx f13, r8, r0 -/* 00013868 000205F8 ED AD 00 28 */ fsubs f13, f13, f0 -.L_0001386C: -/* 0001386C 000205FC FC 00 68 90 */ fmr f0, f13 -/* 00013870 00020600 FC 0D 58 00 */ fcmpu cr0, f13, f11 -/* 00013874 00020604 4C 62 0B 82 */ cror un, eq, gt -.L_00013878: -/* 00013878 00020608 41 83 38 80 */ bso .L_000170F8 -/* 0001387C 0002060C FC 00 00 50 */ fneg f0, f0 -/* 00013880 00020610 FC 00 60 00 */ fcmpu cr0, f0, f12 -/* 00013884 00020614 41 81 37 F8 */ bgt .L_0001707C -/* 00013888 00020618 39 6B 00 01 */ addi r11, r11, 0x1 -/* 0001388C 0002061C 2C 0B 00 02 */ cmpwi r11, 0x2 -.L_00013890: -/* 00013890 00020620 40 81 38 2C */ ble .L_000170BC -.L_00013894: -/* 00013894 00020624 38 60 00 01 */ li r3, 0x1 -/* 00013898 00020628 4E 80 00 20 */ blr -.endfn KeysSharedSpace__3ICEP7ICEDataiT1i - -# .text:0x1389C | size: 0x2C -# ConvertLensLengthToFovAngle(float) -.fn ConvertLensLengthToFovAngle__Ff, global -/* 0001389C 0002062C 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 000138A0 00020630 7C 08 02 A6 */ mflr r0 -/* 000138A4 00020634 90 01 00 0C */ stw r0, 0xc(r1) -/* 000138A8 00020638 3D 20 00 00 */ lis r9, .rodata+0xAB0@ha -/* 000138AC 0002063C C0 49 0A B0 */ lfs f2, .rodata+0xAB0@l(r9) -/* 000138B0 00020640 48 00 00 01 */ bl bATan__Fff -/* 000138B4 00020644 54 63 0C 3C */ clrlslwi r3, r3, 17, 1 -/* 000138B8 00020648 80 01 00 0C */ lwz r0, 0xc(r1) -.L_000138BC: -/* 000138BC 0002064C 7C 08 03 A6 */ mtlr r0 -/* 000138C0 00020650 38 21 00 08 */ addi r1, r1, 0x8 -/* 000138C4 00020654 4E 80 00 20 */ blr -.endfn ConvertLensLengthToFovAngle__Ff - -# .text:0x138C8 | size: 0x6C -# ConvertFovAngleToLensLength(unsigned short) -.fn ConvertFovAngleToLensLength__FUs, global -/* 000138C8 00020658 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 000138CC 0002065C 7C 08 02 A6 */ mflr r0 -/* 000138D0 00020660 F3 E1 00 10 */ psq_st f31, 0x10(r1), 0, qr0 -/* 000138D4 00020664 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 000138D8 00020668 90 01 00 1C */ stw r0, 0x1c(r1) -/* 000138DC 0002066C 54 7E F8 7E */ srwi r30, r3, 1 -/* 000138E0 00020670 7F C3 F3 78 */ mr r3, r30 -/* 000138E4 00020674 48 00 00 01 */ bl bSin__FUs -/* 000138E8 00020678 FF E0 08 90 */ fmr f31, f1 -/* 000138EC 0002067C 7F C3 F3 78 */ mr r3, r30 -/* 000138F0 00020680 48 00 00 01 */ bl bCos__FUs -/* 000138F4 00020684 EF FF 08 24 */ fdivs f31, f31, f1 -/* 000138F8 00020688 3D 20 00 00 */ lis r9, .rodata+0xAB4@ha -/* 000138FC 0002068C C0 09 0A B4 */ lfs f0, .rodata+0xAB4@l(r9) -/* 00013900 00020690 FC 1F 00 00 */ fcmpu cr0, f31, f0 -/* 00013904 00020694 41 81 39 10 */ bgt GetReplayCategory__3ICEUi -/* 00013908 00020698 3D 20 00 00 */ lis r9, .rodata+0xAB8@ha -/* 0001390C 0002069C C3 E9 0A B8 */ lfs f31, .rodata+0xAB8@l(r9) -/* 00013910 000206A0 3D 20 00 00 */ lis r9, .rodata+0xABC@ha -/* 00013914 000206A4 C0 29 0A BC */ lfs f1, .rodata+0xABC@l(r9) -/* 00013918 000206A8 EC 21 F8 24 */ fdivs f1, f1, f31 -/* 0001391C 000206AC 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 00013920 000206B0 7C 08 03 A6 */ mtlr r0 -/* 00013924 000206B4 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 00013928 000206B8 E3 E1 00 10 */ psq_l f31, 0x10(r1), 0, qr0 -/* 0001392C 000206BC 38 21 00 18 */ addi r1, r1, 0x18 -/* 00013930 000206C0 4E 80 00 20 */ blr -.endfn ConvertFovAngleToLensLength__FUs - -# .text:0x13934 | size: 0xA0 -# ConvertLensDeltaToFovDelta(float, float) -.fn ConvertLensDeltaToFovDelta__Fff, global -/* 00013934 000206C4 94 21 FF C8 */ stwu r1, -0x38(r1) -/* 00013938 000206C8 7C 08 02 A6 */ mflr r0 -/* 0001393C 000206CC F3 C1 00 28 */ psq_st f30, 0x28(r1), 0, qr0 -/* 00013940 000206D0 F3 E1 00 30 */ psq_st f31, 0x30(r1), 0, qr0 -/* 00013944 000206D4 BF A1 00 1C */ stmw r29, 0x1c(r1) -/* 00013948 000206D8 90 01 00 3C */ stw r0, 0x3c(r1) -/* 0001394C 000206DC FF C0 10 90 */ fmr f30, f2 -/* 00013950 000206E0 3F A0 00 00 */ lis r29, .rodata+0xAC0@ha -/* 00013954 000206E4 FF E0 08 90 */ fmr f31, f1 -/* 00013958 000206E8 C0 5D 0A C0 */ lfs f2, .rodata+0xAC0@l(r29) -/* 0001395C 000206EC 48 00 00 01 */ bl bATan__Fff -/* 00013960 000206F0 3D 20 00 00 */ lis r9, .rodata+0xAC4@ha -/* 00013964 000206F4 54 7E 08 3C */ slwi r30, r3, 1 -/* 00013968 000206F8 C0 29 0A C4 */ lfs f1, .rodata+0xAC4@l(r9) -/* 0001396C 000206FC 7F DE 07 34 */ extsh r30, r30 -/* 00013970 00020700 C0 5D 0A C0 */ lfs f2, .rodata+0xAC0@l(r29) -/* 00013974 00020704 EC 3E F8 7A */ fmadds f1, f30, f1, f31 -/* 00013978 00020708 48 00 00 01 */ bl bATan__Fff -/* 0001397C 0002070C 54 63 08 3C */ slwi r3, r3, 1 -/* 00013980 00020710 7C 63 07 34 */ extsh r3, r3 -/* 00013984 00020714 3C 00 43 30 */ lis r0, 0x4330 -/* 00013988 00020718 7C 7E 18 50 */ subf r3, r30, r3 -/* 0001398C 0002071C 3D 20 00 00 */ lis r9, .rodata+0xAC8@ha -/* 00013990 00020720 6C 63 80 00 */ xoris r3, r3, 0x8000 -/* 00013994 00020724 C8 09 0A C8 */ lfd f0, .rodata+0xAC8@l(r9) -/* 00013998 00020728 90 61 00 14 */ stw r3, 0x14(r1) -/* 0001399C 0002072C 3D 20 00 00 */ lis r9, .rodata+0xAD0@ha -/* 000139A0 00020730 C1 A9 0A D0 */ lfs f13, .rodata+0xAD0@l(r9) -.L_000139A4: -/* 000139A4 00020734 90 01 00 10 */ stw r0, 0x10(r1) -/* 000139A8 00020738 C8 21 00 10 */ lfd f1, 0x10(r1) -/* 000139AC 0002073C FC 21 00 28 */ fsub f1, f1, f0 -.L_000139B0: -/* 000139B0 00020740 FC 20 08 18 */ frsp f1, f1 -/* 000139B4 00020744 EC 21 03 72 */ fmuls f1, f1, f13 -/* 000139B8 00020748 80 01 00 3C */ lwz r0, 0x3c(r1) -/* 000139BC 0002074C 7C 08 03 A6 */ mtlr r0 -/* 000139C0 00020750 BB A1 00 1C */ lmw r29, 0x1c(r1) -/* 000139C4 00020754 E3 C1 00 28 */ psq_l f30, 0x28(r1), 0, qr0 -.L_000139C8: -/* 000139C8 00020758 E3 E1 00 30 */ psq_l f31, 0x30(r1), 0, qr0 -/* 000139CC 0002075C 38 21 00 38 */ addi r1, r1, 0x38 -/* 000139D0 00020760 4E 80 00 20 */ blr -.endfn ConvertLensDeltaToFovDelta__Fff - -# .text:0x139D4 | size: 0xA0 -# ConvertApertureNumberToFStop(float) -.fn ConvertApertureNumberToFStop__Ff, global -/* 000139D4 00020764 94 21 FF 58 */ stwu r1, -0xa8(r1) -/* 000139D8 00020768 3D 20 00 00 */ lis r9, .rodata+0xAD4@ha -/* 000139DC 0002076C 39 41 00 08 */ addi r10, r1, 0x8 -/* 000139E0 00020770 39 09 0A D4 */ addi r8, r9, .rodata+0xAD4@l -.L_000139E4: -/* 000139E4 00020774 7D 47 53 78 */ mr r7, r10 -.L_000139E8: -/* 000139E8 00020778 39 20 00 90 */ li r9, 0x90 -/* 000139EC 0002077C 80 08 00 00 */ lwz r0, 0x0(r8) -/* 000139F0 00020780 35 29 FF E8 */ subic. r9, r9, 0x18 -/* 000139F4 00020784 90 0A 00 00 */ stw r0, 0x0(r10) -/* 000139F8 00020788 80 08 00 04 */ lwz r0, 0x4(r8) -/* 000139FC 0002078C 90 0A 00 04 */ stw r0, 0x4(r10) -/* 00013A00 00020790 80 08 00 08 */ lwz r0, 0x8(r8) -/* 00013A04 00020794 90 0A 00 08 */ stw r0, 0x8(r10) -/* 00013A08 00020798 80 08 00 0C */ lwz r0, 0xc(r8) -/* 00013A0C 0002079C 90 0A 00 0C */ stw r0, 0xc(r10) -.L_00013A10: -/* 00013A10 000207A0 80 08 00 10 */ lwz r0, 0x10(r8) -/* 00013A14 000207A4 90 0A 00 10 */ stw r0, 0x10(r10) -/* 00013A18 000207A8 80 08 00 14 */ lwz r0, 0x14(r8) -/* 00013A1C 000207AC 39 08 00 18 */ addi r8, r8, 0x18 -/* 00013A20 000207B0 90 0A 00 14 */ stw r0, 0x14(r10) -/* 00013A24 000207B4 39 4A 00 18 */ addi r10, r10, 0x18 -/* 00013A28 000207B8 40 82 39 EC */ bne .L_00017414 -/* 00013A2C 000207BC 3D 20 00 00 */ lis r9, .rodata+0xB68@ha -/* 00013A30 000207C0 C0 09 0B 68 */ lfs f0, .rodata+0xB68@l(r9) -/* 00013A34 000207C4 80 08 00 00 */ lwz r0, 0x0(r8) -/* 00013A38 000207C8 EC 01 00 2A */ fadds f0, f1, f0 -/* 00013A3C 000207CC 90 0A 00 00 */ stw r0, 0x0(r10) -/* 00013A40 000207D0 FD A0 00 1E */ fctiwz f13, f0 -/* 00013A44 000207D4 D9 A1 00 A0 */ stfd f13, 0xa0(r1) -.L_00013A48: -/* 00013A48 000207D8 80 01 00 A4 */ lwz r0, 0xa4(r1) -.L_00013A4C: -/* 00013A4C 000207DC 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00013A50 000207E0 40 80 3A 58 */ bge .L_000174A8 -/* 00013A54 000207E4 38 00 00 00 */ li r0, 0x0 -.L_00013A58: -/* 00013A58 000207E8 2C 00 00 24 */ cmpwi r0, 0x24 -/* 00013A5C 000207EC 40 81 3A 64 */ ble .L_000174C0 -/* 00013A60 000207F0 38 00 00 24 */ li r0, 0x24 -/* 00013A64 000207F4 54 00 10 3A */ slwi r0, r0, 2 -/* 00013A68 000207F8 7C 27 04 2E */ lfsx f1, r7, r0 -.L_00013A6C: -/* 00013A6C 000207FC 38 21 00 A8 */ addi r1, r1, 0xa8 -.L_00013A70: -/* 00013A70 00020800 4E 80 00 20 */ blr -.endfn ConvertApertureNumberToFStop__Ff - -# .text:0x13A74 | size: 0x194 -.fn CreateLookAtMatrix__FPQ23ICE7Matrix4RQ23ICE7Vector3T1Us, local -/* 00013A74 00020804 94 21 FF 48 */ stwu r1, -0xb8(r1) -/* 00013A78 00020808 7C 08 02 A6 */ mflr r0 -/* 00013A7C 0002080C F3 C1 00 A8 */ psq_st f30, 0xa8(r1), 0, qr0 -/* 00013A80 00020810 F3 E1 00 B0 */ psq_st f31, 0xb0(r1), 0, qr0 -/* 00013A84 00020814 BF 21 00 8C */ stmw r25, 0x8c(r1) -/* 00013A88 00020818 90 01 00 BC */ stw r0, 0xbc(r1) -/* 00013A8C 0002081C 7C 7E 1B 78 */ mr r30, r3 -/* 00013A90 00020820 3B A1 00 08 */ addi r29, r1, 0x8 -/* 00013A94 00020824 7C 9B 23 78 */ mr r27, r4 -/* 00013A98 00020828 7C A3 2B 78 */ mr r3, r5 -/* 00013A9C 0002082C 3B 81 00 28 */ addi r28, r1, 0x28 -/* 00013AA0 00020830 7C D9 33 78 */ mr r25, r6 -/* 00013AA4 00020834 7F A5 EB 78 */ mr r5, r29 -/* 00013AA8 00020838 48 00 00 01 */ bl VU0_v3sub__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 -/* 00013AAC 0002083C 3B 41 00 38 */ addi r26, r1, 0x38 -/* 00013AB0 00020840 7F A4 EB 78 */ mr r4, r29 -/* 00013AB4 00020844 7F A3 EB 78 */ mr r3, r29 -/* 00013AB8 00020848 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -/* 00013ABC 0002084C 3D 20 00 00 */ lis r9, .rodata+0xB6C@ha -/* 00013AC0 00020850 3D 60 00 00 */ lis r11, .rodata+0xB70@ha -/* 00013AC4 00020854 C3 E9 0B 6C */ lfs f31, .rodata+0xB6C@l(r9) -/* 00013AC8 00020858 38 81 00 18 */ addi r4, r1, 0x18 -/* 00013ACC 0002085C C3 CB 0B 70 */ lfs f30, .rodata+0xB70@l(r11) -/* 00013AD0 00020860 7F A5 EB 78 */ mr r5, r29 -/* 00013AD4 00020864 D3 E1 00 18 */ stfs f31, 0x18(r1) -/* 00013AD8 00020868 7F 83 E3 78 */ mr r3, r28 -/* 00013ADC 0002086C D3 E1 00 1C */ stfs f31, 0x1c(r1) -/* 00013AE0 00020870 D3 C1 00 20 */ stfs f30, 0x20(r1) -/* 00013AE4 00020874 48 00 00 01 */ bl bCross__FP8bVector3PC8bVector3T1 -/* 00013AE8 00020878 7F 85 E3 78 */ mr r5, r28 -.L_00013AEC: -/* 00013AEC 0002087C 7F A4 EB 78 */ mr r4, r29 -/* 00013AF0 00020880 7F 43 D3 78 */ mr r3, r26 -/* 00013AF4 00020884 48 00 00 01 */ bl bCross__FP8bVector3PC8bVector3T1 -/* 00013AF8 00020888 7F 83 E3 78 */ mr r3, r28 -/* 00013AFC 0002088C 7C 64 1B 78 */ mr r4, r3 -/* 00013B00 00020890 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -/* 00013B04 00020894 7F 43 D3 78 */ mr r3, r26 -/* 00013B08 00020898 7C 64 1B 78 */ mr r4, r3 -/* 00013B0C 0002089C 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -/* 00013B10 000208A0 C0 01 00 2C */ lfs f0, 0x2c(r1) -/* 00013B14 000208A4 7F 25 CB 78 */ mr r5, r25 -/* 00013B18 000208A8 C1 A1 00 3C */ lfs f13, 0x3c(r1) -/* 00013B1C 000208AC 7F C3 F3 78 */ mr r3, r30 -/* 00013B20 000208B0 C1 81 00 0C */ lfs f12, 0xc(r1) -/* 00013B24 000208B4 7F C4 F3 78 */ mr r4, r30 -/* 00013B28 000208B8 C0 C1 00 28 */ lfs f6, 0x28(r1) -/* 00013B2C 000208BC C0 E1 00 38 */ lfs f7, 0x38(r1) -/* 00013B30 000208C0 C1 01 00 08 */ lfs f8, 0x8(r1) -/* 00013B34 000208C4 C1 61 00 30 */ lfs f11, 0x30(r1) -/* 00013B38 000208C8 C1 41 00 40 */ lfs f10, 0x40(r1) -/* 00013B3C 000208CC C1 21 00 10 */ lfs f9, 0x10(r1) -/* 00013B40 000208D0 D3 FE 00 0C */ stfs f31, 0xc(r30) -/* 00013B44 000208D4 D3 FE 00 1C */ stfs f31, 0x1c(r30) -/* 00013B48 000208D8 D3 FE 00 2C */ stfs f31, 0x2c(r30) -/* 00013B4C 000208DC D3 FE 00 30 */ stfs f31, 0x30(r30) -/* 00013B50 000208E0 D3 FE 00 34 */ stfs f31, 0x34(r30) -/* 00013B54 000208E4 D3 FE 00 38 */ stfs f31, 0x38(r30) -/* 00013B58 000208E8 D3 DE 00 3C */ stfs f30, 0x3c(r30) -/* 00013B5C 000208EC D0 1E 00 10 */ stfs f0, 0x10(r30) -/* 00013B60 000208F0 D1 BE 00 14 */ stfs f13, 0x14(r30) -/* 00013B64 000208F4 D1 9E 00 18 */ stfs f12, 0x18(r30) -/* 00013B68 000208F8 D0 DE 00 00 */ stfs f6, 0x0(r30) -/* 00013B6C 000208FC D0 FE 00 04 */ stfs f7, 0x4(r30) -/* 00013B70 00020900 D1 1E 00 08 */ stfs f8, 0x8(r30) -/* 00013B74 00020904 D1 7E 00 20 */ stfs f11, 0x20(r30) -/* 00013B78 00020908 D1 5E 00 24 */ stfs f10, 0x24(r30) -/* 00013B7C 0002090C D1 3E 00 28 */ stfs f9, 0x28(r30) -/* 00013B80 00020910 48 00 00 01 */ bl eRotateZ__FP8bMatrix4T0Us -/* 00013B84 00020914 C1 9B 00 08 */ lfs f12, 0x8(r27) -/* 00013B88 00020918 7F C3 F3 78 */ mr r3, r30 -/* 00013B8C 0002091C C1 BB 00 00 */ lfs f13, 0x0(r27) -/* 00013B90 00020920 7C 64 1B 78 */ mr r4, r3 -/* 00013B94 00020924 C0 1B 00 04 */ lfs f0, 0x4(r27) -/* 00013B98 00020928 FD 80 60 50 */ fneg f12, f12 -/* 00013B9C 0002092C FD A0 68 50 */ fneg f13, f13 -/* 00013BA0 00020930 D3 E1 00 74 */ stfs f31, 0x74(r1) -/* 00013BA4 00020934 FC 00 00 50 */ fneg f0, f0 -/* 00013BA8 00020938 D1 A1 00 78 */ stfs f13, 0x78(r1) -/* 00013BAC 0002093C D0 01 00 7C */ stfs f0, 0x7c(r1) -/* 00013BB0 00020940 38 A1 00 48 */ addi r5, r1, 0x48 -/* 00013BB4 00020944 D1 81 00 80 */ stfs f12, 0x80(r1) -/* 00013BB8 00020948 D3 C1 00 84 */ stfs f30, 0x84(r1) -/* 00013BBC 0002094C D3 C1 00 48 */ stfs f30, 0x48(r1) -/* 00013BC0 00020950 D3 E1 00 4C */ stfs f31, 0x4c(r1) -/* 00013BC4 00020954 D3 E1 00 50 */ stfs f31, 0x50(r1) -/* 00013BC8 00020958 D3 E1 00 54 */ stfs f31, 0x54(r1) -/* 00013BCC 0002095C D3 E1 00 58 */ stfs f31, 0x58(r1) -.L_00013BD0: -/* 00013BD0 00020960 D3 C1 00 5C */ stfs f30, 0x5c(r1) -/* 00013BD4 00020964 D3 E1 00 60 */ stfs f31, 0x60(r1) -.L_00013BD8: -/* 00013BD8 00020968 D3 E1 00 64 */ stfs f31, 0x64(r1) -/* 00013BDC 0002096C D3 E1 00 68 */ stfs f31, 0x68(r1) -/* 00013BE0 00020970 D3 E1 00 6C */ stfs f31, 0x6c(r1) -/* 00013BE4 00020974 D3 C1 00 70 */ stfs f30, 0x70(r1) -.L_00013BE8: -/* 00013BE8 00020978 48 00 00 01 */ bl bMulMatrix__FP8bMatrix4PC8bMatrix4T1 -/* 00013BEC 0002097C 80 01 00 BC */ lwz r0, 0xbc(r1) -/* 00013BF0 00020980 7C 08 03 A6 */ mtlr r0 -/* 00013BF4 00020984 BB 21 00 8C */ lmw r25, 0x8c(r1) -/* 00013BF8 00020988 E3 C1 00 A8 */ psq_l f30, 0xa8(r1), 0, qr0 -/* 00013BFC 0002098C E3 E1 00 B0 */ psq_l f31, 0xb0(r1), 0, qr0 -/* 00013C00 00020990 38 21 00 B8 */ addi r1, r1, 0xb8 -/* 00013C04 00020994 4E 80 00 20 */ blr -.endfn CreateLookAtMatrix__FPQ23ICE7Matrix4RQ23ICE7Vector3T1Us - -# .text:0x13C08 | size: 0x564 -.fn __8ICEMoveriP9ICEAnchor, global -/* 00013C08 00020998 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 00013C0C 0002099C 7C 08 02 A6 */ mflr r0 -/* 00013C10 000209A0 F3 C1 00 20 */ psq_st f30, 0x20(r1), 0, qr0 -/* 00013C14 000209A4 F3 E1 00 28 */ psq_st f31, 0x28(r1), 0, qr0 -/* 00013C18 000209A8 BF 61 00 0C */ stmw r27, 0xc(r1) -/* 00013C1C 000209AC 90 01 00 34 */ stw r0, 0x34(r1) -/* 00013C20 000209B0 7C 7E 1B 78 */ mr r30, r3 -/* 00013C24 000209B4 7C BC 2B 78 */ mr r28, r5 -/* 00013C28 000209B8 38 A0 00 0E */ li r5, 0xe -/* 00013C2C 000209BC 48 00 1F 1D */ bl .L_00015B48 -/* 00013C30 000209C0 3B 60 00 01 */ li r27, 0x1 -.L_00013C34: -/* 00013C34 000209C4 3D 20 00 00 */ lis r9, _vt.8ICEMover@ha -/* 00013C38 000209C8 93 9E 00 80 */ stw r28, 0x80(r30) -/* 00013C3C 000209CC 39 29 00 00 */ addi r9, r9, _vt.8ICEMover@l -/* 00013C40 000209D0 3D 40 00 00 */ lis r10, .rodata+0xBA0@ha -/* 00013C44 000209D4 91 3E 00 08 */ stw r9, 0x8(r30) -/* 00013C48 000209D8 3D 60 00 00 */ lis r11, RealTimeFrames@ha -/* 00013C4C 000209DC 80 0B 00 00 */ lwz r0, RealTimeFrames@l(r11) -/* 00013C50 000209E0 38 60 00 84 */ li r3, 0x84 -/* 00013C54 000209E4 C3 EA 0B A0 */ lfs f31, .rodata+0xBA0@l(r10) -/* 00013C58 000209E8 3B A0 00 00 */ li r29, 0x0 -/* 00013C5C 000209EC 81 3E 00 1C */ lwz r9, 0x1c(r30) -/* 00013C60 000209F0 D3 FE 00 CC */ stfs f31, 0xcc(r30) -/* 00013C64 000209F4 D3 FE 00 D0 */ stfs f31, 0xd0(r30) -/* 00013C68 000209F8 D3 FE 00 D4 */ stfs f31, 0xd4(r30) -/* 00013C6C 000209FC D3 FE 00 D8 */ stfs f31, 0xd8(r30) -/* 00013C70 00020A00 D3 FE 00 DC */ stfs f31, 0xdc(r30) -.L_00013C74: -/* 00013C74 00020A04 D3 FE 00 E0 */ stfs f31, 0xe0(r30) -/* 00013C78 00020A08 D3 FE 00 E4 */ stfs f31, 0xe4(r30) -/* 00013C7C 00020A0C D3 FE 00 E8 */ stfs f31, 0xe8(r30) -/* 00013C80 00020A10 D3 FE 00 EC */ stfs f31, 0xec(r30) -/* 00013C84 00020A14 D3 FE 00 F0 */ stfs f31, 0xf0(r30) -/* 00013C88 00020A18 D3 FE 00 F4 */ stfs f31, 0xf4(r30) -/* 00013C8C 00020A1C D3 FE 00 F8 */ stfs f31, 0xf8(r30) -/* 00013C90 00020A20 D3 FE 00 FC */ stfs f31, 0xfc(r30) -/* 00013C94 00020A24 D3 FE 01 00 */ stfs f31, 0x100(r30) -/* 00013C98 00020A28 D3 FE 01 04 */ stfs f31, 0x104(r30) -/* 00013C9C 00020A2C D3 FE 01 08 */ stfs f31, 0x108(r30) -/* 00013CA0 00020A30 D3 FE 01 0C */ stfs f31, 0x10c(r30) -/* 00013CA4 00020A34 D3 FE 01 10 */ stfs f31, 0x110(r30) -/* 00013CA8 00020A38 D3 FE 01 14 */ stfs f31, 0x114(r30) -/* 00013CAC 00020A3C D3 FE 01 18 */ stfs f31, 0x118(r30) -/* 00013CB0 00020A40 D3 FE 01 1C */ stfs f31, 0x11c(r30) -/* 00013CB4 00020A44 D3 FE 01 20 */ stfs f31, 0x120(r30) -/* 00013CB8 00020A48 D3 FE 01 24 */ stfs f31, 0x124(r30) -/* 00013CBC 00020A4C D3 FE 01 28 */ stfs f31, 0x128(r30) -/* 00013CC0 00020A50 90 09 02 88 */ stw r0, 0x288(r9) -/* 00013CC4 00020A54 93 69 02 7C */ stw r27, 0x27c(r9) -/* 00013CC8 00020A58 48 00 00 01 */ bl __builtin_vec_new -/* 00013CCC 00020A5C 3D 60 00 00 */ lis r11, .rodata+0xBA4@ha -/* 00013CD0 00020A60 7C 69 1B 78 */ mr r9, r3 -/* 00013CD4 00020A64 C3 CB 0B A4 */ lfs f30, .rodata+0xBA4@l(r11) -/* 00013CD8 00020A68 38 60 00 84 */ li r3, 0x84 -/* 00013CDC 00020A6C D3 E9 00 00 */ stfs f31, 0x0(r9) -/* 00013CE0 00020A70 D3 E9 00 04 */ stfs f31, 0x4(r9) -/* 00013CE4 00020A74 D3 E9 00 08 */ stfs f31, 0x8(r9) -/* 00013CE8 00020A78 D3 E9 00 0C */ stfs f31, 0xc(r9) -/* 00013CEC 00020A7C D3 E9 00 20 */ stfs f31, 0x20(r9) -/* 00013CF0 00020A80 D3 C9 00 24 */ stfs f30, 0x24(r9) -/* 00013CF4 00020A84 B3 A9 00 28 */ sth r29, 0x28(r9) -/* 00013CF8 00020A88 B3 A9 00 2A */ sth r29, 0x2a(r9) -/* 00013CFC 00020A8C D3 E9 00 10 */ stfs f31, 0x10(r9) -/* 00013D00 00020A90 D3 E9 00 14 */ stfs f31, 0x14(r9) -/* 00013D04 00020A94 D3 E9 00 18 */ stfs f31, 0x18(r9) -/* 00013D08 00020A98 D3 E9 00 1C */ stfs f31, 0x1c(r9) -/* 00013D0C 00020A9C D3 E9 00 2C */ stfs f31, 0x2c(r9) -/* 00013D10 00020AA0 D3 E9 00 30 */ stfs f31, 0x30(r9) -/* 00013D14 00020AA4 D3 E9 00 34 */ stfs f31, 0x34(r9) -/* 00013D18 00020AA8 D3 E9 00 38 */ stfs f31, 0x38(r9) -/* 00013D1C 00020AAC D3 E9 00 4C */ stfs f31, 0x4c(r9) -/* 00013D20 00020AB0 D3 C9 00 50 */ stfs f30, 0x50(r9) -/* 00013D24 00020AB4 B3 A9 00 54 */ sth r29, 0x54(r9) -/* 00013D28 00020AB8 B3 A9 00 56 */ sth r29, 0x56(r9) -/* 00013D2C 00020ABC D3 E9 00 3C */ stfs f31, 0x3c(r9) -/* 00013D30 00020AC0 D3 E9 00 40 */ stfs f31, 0x40(r9) -/* 00013D34 00020AC4 D3 E9 00 44 */ stfs f31, 0x44(r9) -/* 00013D38 00020AC8 D3 E9 00 48 */ stfs f31, 0x48(r9) -/* 00013D3C 00020ACC D3 E9 00 58 */ stfs f31, 0x58(r9) -/* 00013D40 00020AD0 D3 E9 00 5C */ stfs f31, 0x5c(r9) -/* 00013D44 00020AD4 D3 E9 00 60 */ stfs f31, 0x60(r9) -/* 00013D48 00020AD8 D3 E9 00 64 */ stfs f31, 0x64(r9) -/* 00013D4C 00020ADC D3 E9 00 78 */ stfs f31, 0x78(r9) -.L_00013D50: -/* 00013D50 00020AE0 D3 C9 00 7C */ stfs f30, 0x7c(r9) -/* 00013D54 00020AE4 B3 A9 00 80 */ sth r29, 0x80(r9) -/* 00013D58 00020AE8 B3 A9 00 82 */ sth r29, 0x82(r9) -/* 00013D5C 00020AEC D3 E9 00 68 */ stfs f31, 0x68(r9) -/* 00013D60 00020AF0 91 3E 00 84 */ stw r9, 0x84(r30) -/* 00013D64 00020AF4 D3 E9 00 6C */ stfs f31, 0x6c(r9) -/* 00013D68 00020AF8 D3 E9 00 70 */ stfs f31, 0x70(r9) -/* 00013D6C 00020AFC D3 E9 00 74 */ stfs f31, 0x74(r9) -/* 00013D70 00020B00 48 00 00 01 */ bl __builtin_vec_new -/* 00013D74 00020B04 7C 69 1B 78 */ mr r9, r3 -/* 00013D78 00020B08 D3 E9 00 00 */ stfs f31, 0x0(r9) -/* 00013D7C 00020B0C 38 60 00 2C */ li r3, 0x2c -.L_00013D80: -/* 00013D80 00020B10 D3 E9 00 04 */ stfs f31, 0x4(r9) -/* 00013D84 00020B14 D3 E9 00 08 */ stfs f31, 0x8(r9) -.L_00013D88: -/* 00013D88 00020B18 D3 E9 00 0C */ stfs f31, 0xc(r9) -/* 00013D8C 00020B1C D3 E9 00 20 */ stfs f31, 0x20(r9) -/* 00013D90 00020B20 D3 C9 00 24 */ stfs f30, 0x24(r9) -/* 00013D94 00020B24 B3 A9 00 28 */ sth r29, 0x28(r9) -/* 00013D98 00020B28 B3 A9 00 2A */ sth r29, 0x2a(r9) -/* 00013D9C 00020B2C D3 E9 00 10 */ stfs f31, 0x10(r9) -/* 00013DA0 00020B30 D3 E9 00 14 */ stfs f31, 0x14(r9) -/* 00013DA4 00020B34 D3 E9 00 18 */ stfs f31, 0x18(r9) -/* 00013DA8 00020B38 D3 E9 00 1C */ stfs f31, 0x1c(r9) -/* 00013DAC 00020B3C D3 E9 00 2C */ stfs f31, 0x2c(r9) -/* 00013DB0 00020B40 D3 E9 00 30 */ stfs f31, 0x30(r9) -/* 00013DB4 00020B44 D3 E9 00 34 */ stfs f31, 0x34(r9) -/* 00013DB8 00020B48 D3 E9 00 38 */ stfs f31, 0x38(r9) -/* 00013DBC 00020B4C D3 E9 00 4C */ stfs f31, 0x4c(r9) -/* 00013DC0 00020B50 D3 C9 00 50 */ stfs f30, 0x50(r9) -/* 00013DC4 00020B54 B3 A9 00 54 */ sth r29, 0x54(r9) -/* 00013DC8 00020B58 B3 A9 00 56 */ sth r29, 0x56(r9) -/* 00013DCC 00020B5C D3 E9 00 3C */ stfs f31, 0x3c(r9) -/* 00013DD0 00020B60 D3 E9 00 40 */ stfs f31, 0x40(r9) -/* 00013DD4 00020B64 D3 E9 00 44 */ stfs f31, 0x44(r9) -/* 00013DD8 00020B68 D3 E9 00 48 */ stfs f31, 0x48(r9) -/* 00013DDC 00020B6C D3 E9 00 58 */ stfs f31, 0x58(r9) -/* 00013DE0 00020B70 D3 E9 00 5C */ stfs f31, 0x5c(r9) -/* 00013DE4 00020B74 D3 E9 00 60 */ stfs f31, 0x60(r9) -/* 00013DE8 00020B78 D3 E9 00 64 */ stfs f31, 0x64(r9) -/* 00013DEC 00020B7C D3 E9 00 78 */ stfs f31, 0x78(r9) -/* 00013DF0 00020B80 D3 C9 00 7C */ stfs f30, 0x7c(r9) -/* 00013DF4 00020B84 B3 A9 00 80 */ sth r29, 0x80(r9) -/* 00013DF8 00020B88 B3 A9 00 82 */ sth r29, 0x82(r9) -/* 00013DFC 00020B8C D3 E9 00 68 */ stfs f31, 0x68(r9) -/* 00013E00 00020B90 D3 E9 00 6C */ stfs f31, 0x6c(r9) -/* 00013E04 00020B94 91 3E 00 88 */ stw r9, 0x88(r30) -/* 00013E08 00020B98 D3 E9 00 70 */ stfs f31, 0x70(r9) -/* 00013E0C 00020B9C D3 E9 00 74 */ stfs f31, 0x74(r9) -/* 00013E10 00020BA0 48 00 00 01 */ bl __builtin_vec_new -/* 00013E14 00020BA4 7C 69 1B 78 */ mr r9, r3 -/* 00013E18 00020BA8 91 3E 00 8C */ stw r9, 0x8c(r30) -/* 00013E1C 00020BAC 38 60 00 2C */ li r3, 0x2c -/* 00013E20 00020BB0 D3 E9 00 00 */ stfs f31, 0x0(r9) -/* 00013E24 00020BB4 D3 E9 00 04 */ stfs f31, 0x4(r9) -/* 00013E28 00020BB8 D3 E9 00 08 */ stfs f31, 0x8(r9) -/* 00013E2C 00020BBC D3 E9 00 0C */ stfs f31, 0xc(r9) -/* 00013E30 00020BC0 D3 E9 00 20 */ stfs f31, 0x20(r9) -/* 00013E34 00020BC4 D3 C9 00 24 */ stfs f30, 0x24(r9) -/* 00013E38 00020BC8 B3 A9 00 28 */ sth r29, 0x28(r9) -/* 00013E3C 00020BCC B3 A9 00 2A */ sth r29, 0x2a(r9) -/* 00013E40 00020BD0 D3 E9 00 10 */ stfs f31, 0x10(r9) -/* 00013E44 00020BD4 D3 E9 00 14 */ stfs f31, 0x14(r9) -/* 00013E48 00020BD8 D3 E9 00 18 */ stfs f31, 0x18(r9) -/* 00013E4C 00020BDC D3 E9 00 1C */ stfs f31, 0x1c(r9) -/* 00013E50 00020BE0 48 00 00 01 */ bl __builtin_vec_new -/* 00013E54 00020BE4 7C 69 1B 78 */ mr r9, r3 -/* 00013E58 00020BE8 91 3E 00 90 */ stw r9, 0x90(r30) -/* 00013E5C 00020BEC 38 60 00 2C */ li r3, 0x2c -/* 00013E60 00020BF0 D3 E9 00 00 */ stfs f31, 0x0(r9) -.L_00013E64: -/* 00013E64 00020BF4 D3 E9 00 04 */ stfs f31, 0x4(r9) -/* 00013E68 00020BF8 D3 E9 00 08 */ stfs f31, 0x8(r9) -/* 00013E6C 00020BFC D3 E9 00 0C */ stfs f31, 0xc(r9) -.L_00013E70: -/* 00013E70 00020C00 D3 E9 00 20 */ stfs f31, 0x20(r9) -/* 00013E74 00020C04 D3 C9 00 24 */ stfs f30, 0x24(r9) -/* 00013E78 00020C08 B3 A9 00 28 */ sth r29, 0x28(r9) -/* 00013E7C 00020C0C B3 A9 00 2A */ sth r29, 0x2a(r9) -/* 00013E80 00020C10 D3 E9 00 10 */ stfs f31, 0x10(r9) -/* 00013E84 00020C14 D3 E9 00 14 */ stfs f31, 0x14(r9) -.L_00013E88: -/* 00013E88 00020C18 D3 E9 00 18 */ stfs f31, 0x18(r9) -/* 00013E8C 00020C1C D3 E9 00 1C */ stfs f31, 0x1c(r9) -/* 00013E90 00020C20 48 00 00 01 */ bl __builtin_vec_new -/* 00013E94 00020C24 7C 69 1B 78 */ mr r9, r3 -/* 00013E98 00020C28 91 3E 00 94 */ stw r9, 0x94(r30) -/* 00013E9C 00020C2C 38 60 00 2C */ li r3, 0x2c -/* 00013EA0 00020C30 D3 E9 00 00 */ stfs f31, 0x0(r9) -/* 00013EA4 00020C34 D3 E9 00 04 */ stfs f31, 0x4(r9) -/* 00013EA8 00020C38 D3 E9 00 08 */ stfs f31, 0x8(r9) -.L_00013EAC: -/* 00013EAC 00020C3C D3 E9 00 0C */ stfs f31, 0xc(r9) -/* 00013EB0 00020C40 D3 E9 00 20 */ stfs f31, 0x20(r9) -/* 00013EB4 00020C44 D3 C9 00 24 */ stfs f30, 0x24(r9) -/* 00013EB8 00020C48 B3 A9 00 28 */ sth r29, 0x28(r9) -/* 00013EBC 00020C4C B3 A9 00 2A */ sth r29, 0x2a(r9) -/* 00013EC0 00020C50 D3 E9 00 10 */ stfs f31, 0x10(r9) -/* 00013EC4 00020C54 D3 E9 00 14 */ stfs f31, 0x14(r9) -/* 00013EC8 00020C58 D3 E9 00 18 */ stfs f31, 0x18(r9) -/* 00013ECC 00020C5C D3 E9 00 1C */ stfs f31, 0x1c(r9) -/* 00013ED0 00020C60 48 00 00 01 */ bl __builtin_vec_new -/* 00013ED4 00020C64 7C 69 1B 78 */ mr r9, r3 -/* 00013ED8 00020C68 91 3E 00 98 */ stw r9, 0x98(r30) -/* 00013EDC 00020C6C 38 60 00 2C */ li r3, 0x2c -/* 00013EE0 00020C70 D3 E9 00 00 */ stfs f31, 0x0(r9) -/* 00013EE4 00020C74 D3 E9 00 04 */ stfs f31, 0x4(r9) -/* 00013EE8 00020C78 D3 E9 00 08 */ stfs f31, 0x8(r9) -/* 00013EEC 00020C7C D3 E9 00 0C */ stfs f31, 0xc(r9) -/* 00013EF0 00020C80 D3 E9 00 20 */ stfs f31, 0x20(r9) -/* 00013EF4 00020C84 D3 C9 00 24 */ stfs f30, 0x24(r9) -/* 00013EF8 00020C88 B3 A9 00 28 */ sth r29, 0x28(r9) -/* 00013EFC 00020C8C B3 A9 00 2A */ sth r29, 0x2a(r9) -/* 00013F00 00020C90 D3 E9 00 10 */ stfs f31, 0x10(r9) -/* 00013F04 00020C94 D3 E9 00 14 */ stfs f31, 0x14(r9) -/* 00013F08 00020C98 D3 E9 00 18 */ stfs f31, 0x18(r9) -/* 00013F0C 00020C9C D3 E9 00 1C */ stfs f31, 0x1c(r9) -/* 00013F10 00020CA0 48 00 00 01 */ bl __builtin_vec_new -/* 00013F14 00020CA4 7C 69 1B 78 */ mr r9, r3 -/* 00013F18 00020CA8 91 3E 00 9C */ stw r9, 0x9c(r30) -/* 00013F1C 00020CAC 38 60 00 2C */ li r3, 0x2c -/* 00013F20 00020CB0 D3 E9 00 00 */ stfs f31, 0x0(r9) -/* 00013F24 00020CB4 D3 E9 00 04 */ stfs f31, 0x4(r9) -/* 00013F28 00020CB8 D3 E9 00 08 */ stfs f31, 0x8(r9) -/* 00013F2C 00020CBC D3 E9 00 0C */ stfs f31, 0xc(r9) -.L_00013F30: -/* 00013F30 00020CC0 D3 E9 00 20 */ stfs f31, 0x20(r9) -.L_00013F34: -/* 00013F34 00020CC4 D3 C9 00 24 */ stfs f30, 0x24(r9) -/* 00013F38 00020CC8 B3 A9 00 28 */ sth r29, 0x28(r9) -.L_00013F3C: -/* 00013F3C 00020CCC B3 A9 00 2A */ sth r29, 0x2a(r9) -/* 00013F40 00020CD0 D3 E9 00 10 */ stfs f31, 0x10(r9) -/* 00013F44 00020CD4 D3 E9 00 14 */ stfs f31, 0x14(r9) -/* 00013F48 00020CD8 D3 E9 00 18 */ stfs f31, 0x18(r9) -/* 00013F4C 00020CDC D3 E9 00 1C */ stfs f31, 0x1c(r9) -/* 00013F50 00020CE0 48 00 00 01 */ bl __builtin_vec_new -/* 00013F54 00020CE4 7C 69 1B 78 */ mr r9, r3 -/* 00013F58 00020CE8 91 3E 00 A0 */ stw r9, 0xa0(r30) -/* 00013F5C 00020CEC 38 60 00 2C */ li r3, 0x2c -/* 00013F60 00020CF0 D3 E9 00 00 */ stfs f31, 0x0(r9) -/* 00013F64 00020CF4 D3 E9 00 04 */ stfs f31, 0x4(r9) -/* 00013F68 00020CF8 D3 E9 00 08 */ stfs f31, 0x8(r9) -/* 00013F6C 00020CFC D3 E9 00 0C */ stfs f31, 0xc(r9) -/* 00013F70 00020D00 D3 E9 00 20 */ stfs f31, 0x20(r9) -/* 00013F74 00020D04 D3 C9 00 24 */ stfs f30, 0x24(r9) -/* 00013F78 00020D08 B3 A9 00 28 */ sth r29, 0x28(r9) -.L_00013F7C: -/* 00013F7C 00020D0C B3 A9 00 2A */ sth r29, 0x2a(r9) -.L_00013F80: -/* 00013F80 00020D10 D3 E9 00 10 */ stfs f31, 0x10(r9) -/* 00013F84 00020D14 D3 E9 00 14 */ stfs f31, 0x14(r9) -/* 00013F88 00020D18 D3 E9 00 18 */ stfs f31, 0x18(r9) -/* 00013F8C 00020D1C D3 E9 00 1C */ stfs f31, 0x1c(r9) -/* 00013F90 00020D20 48 00 00 01 */ bl __builtin_vec_new -/* 00013F94 00020D24 7C 69 1B 78 */ mr r9, r3 -/* 00013F98 00020D28 91 3E 00 A4 */ stw r9, 0xa4(r30) -/* 00013F9C 00020D2C 38 60 00 2C */ li r3, 0x2c -.L_00013FA0: -/* 00013FA0 00020D30 D3 E9 00 00 */ stfs f31, 0x0(r9) -/* 00013FA4 00020D34 D3 E9 00 04 */ stfs f31, 0x4(r9) -/* 00013FA8 00020D38 D3 E9 00 08 */ stfs f31, 0x8(r9) -/* 00013FAC 00020D3C D3 E9 00 0C */ stfs f31, 0xc(r9) -/* 00013FB0 00020D40 D3 E9 00 20 */ stfs f31, 0x20(r9) -/* 00013FB4 00020D44 D3 C9 00 24 */ stfs f30, 0x24(r9) -/* 00013FB8 00020D48 B3 A9 00 28 */ sth r29, 0x28(r9) -.L_00013FBC: -/* 00013FBC 00020D4C B3 A9 00 2A */ sth r29, 0x2a(r9) -/* 00013FC0 00020D50 D3 E9 00 10 */ stfs f31, 0x10(r9) -/* 00013FC4 00020D54 D3 E9 00 14 */ stfs f31, 0x14(r9) -/* 00013FC8 00020D58 D3 E9 00 18 */ stfs f31, 0x18(r9) -/* 00013FCC 00020D5C D3 E9 00 1C */ stfs f31, 0x1c(r9) -/* 00013FD0 00020D60 48 00 00 01 */ bl __builtin_vec_new -/* 00013FD4 00020D64 7C 69 1B 78 */ mr r9, r3 -/* 00013FD8 00020D68 91 3E 00 A8 */ stw r9, 0xa8(r30) -/* 00013FDC 00020D6C 38 60 00 2C */ li r3, 0x2c -/* 00013FE0 00020D70 D3 E9 00 00 */ stfs f31, 0x0(r9) -/* 00013FE4 00020D74 D3 E9 00 04 */ stfs f31, 0x4(r9) -/* 00013FE8 00020D78 D3 E9 00 08 */ stfs f31, 0x8(r9) -.L_00013FEC: -/* 00013FEC 00020D7C D3 E9 00 0C */ stfs f31, 0xc(r9) -.L_00013FF0: -/* 00013FF0 00020D80 D3 E9 00 20 */ stfs f31, 0x20(r9) -/* 00013FF4 00020D84 D3 C9 00 24 */ stfs f30, 0x24(r9) -/* 00013FF8 00020D88 B3 A9 00 28 */ sth r29, 0x28(r9) -/* 00013FFC 00020D8C B3 A9 00 2A */ sth r29, 0x2a(r9) -/* 00014000 00020D90 D3 E9 00 10 */ stfs f31, 0x10(r9) -/* 00014004 00020D94 D3 E9 00 14 */ stfs f31, 0x14(r9) -/* 00014008 00020D98 D3 E9 00 18 */ stfs f31, 0x18(r9) -/* 0001400C 00020D9C D3 E9 00 1C */ stfs f31, 0x1c(r9) -/* 00014010 00020DA0 48 00 00 01 */ bl __builtin_vec_new -/* 00014014 00020DA4 7C 69 1B 78 */ mr r9, r3 -/* 00014018 00020DA8 91 3E 00 AC */ stw r9, 0xac(r30) -/* 0001401C 00020DAC 38 60 00 84 */ li r3, 0x84 -/* 00014020 00020DB0 D3 E9 00 00 */ stfs f31, 0x0(r9) -.L_00014024: -/* 00014024 00020DB4 D3 E9 00 04 */ stfs f31, 0x4(r9) -/* 00014028 00020DB8 D3 E9 00 08 */ stfs f31, 0x8(r9) -.L_0001402C: -/* 0001402C 00020DBC D3 E9 00 0C */ stfs f31, 0xc(r9) -/* 00014030 00020DC0 D3 E9 00 20 */ stfs f31, 0x20(r9) -/* 00014034 00020DC4 D3 C9 00 24 */ stfs f30, 0x24(r9) -/* 00014038 00020DC8 B3 A9 00 28 */ sth r29, 0x28(r9) -/* 0001403C 00020DCC B3 A9 00 2A */ sth r29, 0x2a(r9) -/* 00014040 00020DD0 D3 E9 00 10 */ stfs f31, 0x10(r9) -/* 00014044 00020DD4 D3 E9 00 14 */ stfs f31, 0x14(r9) -/* 00014048 00020DD8 D3 E9 00 18 */ stfs f31, 0x18(r9) -/* 0001404C 00020DDC D3 E9 00 1C */ stfs f31, 0x1c(r9) -/* 00014050 00020DE0 48 00 00 01 */ bl __builtin_vec_new -/* 00014054 00020DE4 D3 C3 00 7C */ stfs f30, 0x7c(r3) -/* 00014058 00020DE8 B3 63 00 82 */ sth r27, 0x82(r3) -/* 0001405C 00020DEC D3 E3 00 00 */ stfs f31, 0x0(r3) -/* 00014060 00020DF0 D3 E3 00 04 */ stfs f31, 0x4(r3) -/* 00014064 00020DF4 D3 E3 00 08 */ stfs f31, 0x8(r3) -/* 00014068 00020DF8 D3 E3 00 0C */ stfs f31, 0xc(r3) -/* 0001406C 00020DFC D3 E3 00 20 */ stfs f31, 0x20(r3) -/* 00014070 00020E00 D3 C3 00 24 */ stfs f30, 0x24(r3) -/* 00014074 00020E04 B3 A3 00 28 */ sth r29, 0x28(r3) -/* 00014078 00020E08 B3 63 00 2A */ sth r27, 0x2a(r3) -/* 0001407C 00020E0C D3 E3 00 10 */ stfs f31, 0x10(r3) -/* 00014080 00020E10 D3 E3 00 14 */ stfs f31, 0x14(r3) -/* 00014084 00020E14 D3 E3 00 18 */ stfs f31, 0x18(r3) -/* 00014088 00020E18 D3 E3 00 1C */ stfs f31, 0x1c(r3) -/* 0001408C 00020E1C D3 E3 00 2C */ stfs f31, 0x2c(r3) -/* 00014090 00020E20 D3 E3 00 30 */ stfs f31, 0x30(r3) -/* 00014094 00020E24 D3 E3 00 34 */ stfs f31, 0x34(r3) -.L_00014098: -/* 00014098 00020E28 D3 E3 00 38 */ stfs f31, 0x38(r3) -/* 0001409C 00020E2C D3 E3 00 4C */ stfs f31, 0x4c(r3) -/* 000140A0 00020E30 D3 C3 00 50 */ stfs f30, 0x50(r3) -/* 000140A4 00020E34 B3 A3 00 54 */ sth r29, 0x54(r3) -/* 000140A8 00020E38 B3 63 00 56 */ sth r27, 0x56(r3) -/* 000140AC 00020E3C D3 E3 00 3C */ stfs f31, 0x3c(r3) -.L_000140B0: -/* 000140B0 00020E40 D3 E3 00 40 */ stfs f31, 0x40(r3) -/* 000140B4 00020E44 D3 E3 00 44 */ stfs f31, 0x44(r3) -/* 000140B8 00020E48 D3 E3 00 48 */ stfs f31, 0x48(r3) -.L_000140BC: -/* 000140BC 00020E4C D3 E3 00 58 */ stfs f31, 0x58(r3) -.L_000140C0: -/* 000140C0 00020E50 D3 E3 00 5C */ stfs f31, 0x5c(r3) -.L_000140C4: -/* 000140C4 00020E54 D3 E3 00 60 */ stfs f31, 0x60(r3) -/* 000140C8 00020E58 D3 E3 00 64 */ stfs f31, 0x64(r3) -/* 000140CC 00020E5C D3 E3 00 78 */ stfs f31, 0x78(r3) -/* 000140D0 00020E60 B3 A3 00 80 */ sth r29, 0x80(r3) -/* 000140D4 00020E64 D3 E3 00 68 */ stfs f31, 0x68(r3) -/* 000140D8 00020E68 D3 E3 00 6C */ stfs f31, 0x6c(r3) -/* 000140DC 00020E6C 90 7E 00 B0 */ stw r3, 0xb0(r30) -/* 000140E0 00020E70 93 BE 00 C8 */ stw r29, 0xc8(r30) -/* 000140E4 00020E74 D3 FE 00 B8 */ stfs f31, 0xb8(r30) -/* 000140E8 00020E78 93 BE 00 C4 */ stw r29, 0xc4(r30) -/* 000140EC 00020E7C 93 BE 00 BC */ stw r29, 0xbc(r30) -/* 000140F0 00020E80 93 BE 00 C0 */ stw r29, 0xc0(r30) -/* 000140F4 00020E84 D3 FE 00 B4 */ stfs f31, 0xb4(r30) -/* 000140F8 00020E88 D3 E3 00 70 */ stfs f31, 0x70(r3) -/* 000140FC 00020E8C D3 E3 00 74 */ stfs f31, 0x74(r3) -/* 00014100 00020E90 48 01 7B C5 */ bl .text+0x17BC4 -/* 00014104 00020E94 38 7E 00 CC */ addi r3, r30, 0xcc -/* 00014108 00020E98 48 00 00 01 */ bl PSMTX44Identity -/* 0001410C 00020E9C C1 9C 00 00 */ lfs f12, 0x0(r28) -/* 00014110 00020EA0 7F C3 F3 78 */ mr r3, r30 -/* 00014114 00020EA4 C1 BC 00 04 */ lfs f13, 0x4(r28) -/* 00014118 00020EA8 38 80 00 01 */ li r4, 0x1 -/* 0001411C 00020EAC C0 1C 00 08 */ lfs f0, 0x8(r28) -/* 00014120 00020EB0 38 A0 00 01 */ li r5, 0x1 -/* 00014124 00020EB4 D1 9E 01 0C */ stfs f12, 0x10c(r30) -/* 00014128 00020EB8 D1 BE 01 10 */ stfs f13, 0x110(r30) -/* 0001412C 00020EBC D0 1E 01 14 */ stfs f0, 0x114(r30) -/* 00014130 00020EC0 C1 9C 00 18 */ lfs f12, 0x18(r28) -/* 00014134 00020EC4 C0 1C 00 10 */ lfs f0, 0x10(r28) -/* 00014138 00020EC8 C1 BC 00 14 */ lfs f13, 0x14(r28) -/* 0001413C 00020ECC D0 1E 01 1C */ stfs f0, 0x11c(r30) -/* 00014140 00020ED0 D1 BE 01 20 */ stfs f13, 0x120(r30) -/* 00014144 00020ED4 D1 9E 01 24 */ stfs f12, 0x124(r30) -/* 00014148 00020ED8 48 01 4D 51 */ bl .text+0x14D50 -/* 0001414C 00020EDC 7F C3 F3 78 */ mr r3, r30 -/* 00014150 00020EE0 80 01 00 34 */ lwz r0, 0x34(r1) -/* 00014154 00020EE4 7C 08 03 A6 */ mtlr r0 -/* 00014158 00020EE8 BB 61 00 0C */ lmw r27, 0xc(r1) -/* 0001415C 00020EEC E3 C1 00 20 */ psq_l f30, 0x20(r1), 0, qr0 -/* 00014160 00020EF0 E3 E1 00 28 */ psq_l f31, 0x28(r1), 0, qr0 -/* 00014164 00020EF4 38 21 00 30 */ addi r1, r1, 0x30 -/* 00014168 00020EF8 4E 80 00 20 */ blr -.endfn __8ICEMoveriP9ICEAnchor - -# .text:0x1416C | size: 0xDC -.fn __9ICEAnchor, global -/* 0001416C 00020EFC 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00014170 00020F00 7C 08 02 A6 */ mflr r0 -/* 00014174 00020F04 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 00014178 00020F08 90 01 00 14 */ stw r0, 0x14(r1) -/* 0001417C 00020F0C 3D 20 00 00 */ lis r9, .rodata+0xBA8@ha -/* 00014180 00020F10 7C 7E 1B 78 */ mr r30, r3 -/* 00014184 00020F14 C0 09 0B A8 */ lfs f0, .rodata+0xBA8@l(r9) -/* 00014188 00020F18 39 7E 00 10 */ addi r11, r30, 0x10 -/* 0001418C 00020F1C 38 00 00 00 */ li r0, 0x0 -/* 00014190 00020F20 39 20 00 01 */ li r9, 0x1 -/* 00014194 00020F24 D0 1E 00 00 */ stfs f0, 0x0(r30) -/* 00014198 00020F28 7D 63 5B 78 */ mr r3, r11 -/* 0001419C 00020F2C D0 1E 00 04 */ stfs f0, 0x4(r30) -/* 000141A0 00020F30 D0 1E 00 08 */ stfs f0, 0x8(r30) -/* 000141A4 00020F34 D0 1E 00 0C */ stfs f0, 0xc(r30) -/* 000141A8 00020F38 D0 1E 00 10 */ stfs f0, 0x10(r30) -/* 000141AC 00020F3C D0 1E 00 14 */ stfs f0, 0x14(r30) -/* 000141B0 00020F40 D0 1E 00 18 */ stfs f0, 0x18(r30) -/* 000141B4 00020F44 D0 1E 00 1C */ stfs f0, 0x1c(r30) -/* 000141B8 00020F48 D0 0B 00 10 */ stfs f0, 0x10(r11) -/* 000141BC 00020F4C D0 0B 00 14 */ stfs f0, 0x14(r11) -/* 000141C0 00020F50 D0 0B 00 18 */ stfs f0, 0x18(r11) -/* 000141C4 00020F54 D0 0B 00 1C */ stfs f0, 0x1c(r11) -/* 000141C8 00020F58 D0 1E 00 30 */ stfs f0, 0x30(r30) -/* 000141CC 00020F5C D0 1E 00 34 */ stfs f0, 0x34(r30) -/* 000141D0 00020F60 D0 1E 00 38 */ stfs f0, 0x38(r30) -/* 000141D4 00020F64 D0 1E 00 3C */ stfs f0, 0x3c(r30) -/* 000141D8 00020F68 D0 1E 00 40 */ stfs f0, 0x40(r30) -/* 000141DC 00020F6C D0 1E 00 44 */ stfs f0, 0x44(r30) -/* 000141E0 00020F70 D0 1E 00 48 */ stfs f0, 0x48(r30) -/* 000141E4 00020F74 D0 1E 00 4C */ stfs f0, 0x4c(r30) -/* 000141E8 00020F78 D0 1E 00 50 */ stfs f0, 0x50(r30) -/* 000141EC 00020F7C D0 1E 00 54 */ stfs f0, 0x54(r30) -/* 000141F0 00020F80 D0 1E 00 58 */ stfs f0, 0x58(r30) -.L_000141F4: -/* 000141F4 00020F84 D0 1E 00 5C */ stfs f0, 0x5c(r30) -/* 000141F8 00020F88 D0 1E 00 60 */ stfs f0, 0x60(r30) -.L_000141FC: -/* 000141FC 00020F8C D0 1E 00 64 */ stfs f0, 0x64(r30) -/* 00014200 00020F90 D0 1E 00 68 */ stfs f0, 0x68(r30) -/* 00014204 00020F94 D0 1E 00 6C */ stfs f0, 0x6c(r30) -/* 00014208 00020F98 D0 1E 00 70 */ stfs f0, 0x70(r30) -/* 0001420C 00020F9C D0 1E 00 74 */ stfs f0, 0x74(r30) -.L_00014210: -/* 00014210 00020FA0 D0 1E 00 78 */ stfs f0, 0x78(r30) -/* 00014214 00020FA4 90 1E 00 7C */ stw r0, 0x7c(r30) -/* 00014218 00020FA8 D0 1E 00 80 */ stfs f0, 0x80(r30) -/* 0001421C 00020FAC 91 3E 00 88 */ stw r9, 0x88(r30) -/* 00014220 00020FB0 90 1E 00 8C */ stw r0, 0x8c(r30) -/* 00014224 00020FB4 D0 1E 00 90 */ stfs f0, 0x90(r30) -/* 00014228 00020FB8 D0 1E 00 84 */ stfs f0, 0x84(r30) -/* 0001422C 00020FBC 48 00 00 01 */ bl PSMTX44Identity -.L_00014230: -/* 00014230 00020FC0 7F C3 F3 78 */ mr r3, r30 -/* 00014234 00020FC4 80 01 00 14 */ lwz r0, 0x14(r1) -/* 00014238 00020FC8 7C 08 03 A6 */ mtlr r0 -/* 0001423C 00020FCC BB C1 00 08 */ lmw r30, 0x8(r1) -/* 00014240 00020FD0 38 21 00 10 */ addi r1, r1, 0x10 -.L_00014244: -/* 00014244 00020FD4 4E 80 00 20 */ blr -.endfn __9ICEAnchor - -# .text:0x14248 | size: 0x184 -.fn Update__9ICEAnchorfRCQ23ICE7Matrix4RCQ23ICE7Vector3T3, global -/* 00014248 00020FD8 94 21 FF C8 */ stwu r1, -0x38(r1) -/* 0001424C 00020FDC 7C 08 02 A6 */ mflr r0 -/* 00014250 00020FE0 F3 C1 00 28 */ psq_st f30, 0x28(r1), 0, qr0 -/* 00014254 00020FE4 F3 E1 00 30 */ psq_st f31, 0x30(r1), 0, qr0 -/* 00014258 00020FE8 BF A1 00 1C */ stmw r29, 0x1c(r1) -/* 0001425C 00020FEC 90 01 00 3C */ stw r0, 0x3c(r1) -/* 00014260 00020FF0 7C 7F 1B 78 */ mr r31, r3 -/* 00014264 00020FF4 7C 9E 23 78 */ mr r30, r4 -/* 00014268 00020FF8 7C BD 2B 78 */ mr r29, r5 -/* 0001426C 00020FFC 38 9E 00 30 */ addi r4, r30, 0x30 -/* 00014270 00021000 FF E0 08 90 */ fmr f31, f1 -/* 00014274 00021004 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 -/* 00014278 00021008 FF C0 08 90 */ fmr f30, f1 -/* 0001427C 0002100C 7F C3 F3 78 */ mr r3, r30 -/* 00014280 00021010 38 9F 00 10 */ addi r4, r31, 0x10 -/* 00014284 00021014 48 00 00 01 */ bl PSMTX44Copy -/* 00014288 00021018 3D 20 00 00 */ lis r9, .rodata+0xBAC@ha -.L_0001428C: -/* 0001428C 0002101C 3D 40 00 00 */ lis r10, .rodata+0xBB0@ha -/* 00014290 00021020 C1 29 0B AC */ lfs f9, .rodata+0xBAC@l(r9) -/* 00014294 00021024 3D 60 00 00 */ lis r11, .rodata+0xBB8@ha -/* 00014298 00021028 3D 20 00 00 */ lis r9, .rodata+0xBB4@ha -/* 0001429C 0002102C C0 DF 00 70 */ lfs f6, 0x70(r31) -/* 000142A0 00021030 D1 3F 00 48 */ stfs f9, 0x48(r31) -/* 000142A4 00021034 D1 3F 00 44 */ stfs f9, 0x44(r31) -/* 000142A8 00021038 D1 3F 00 40 */ stfs f9, 0x40(r31) -/* 000142AC 0002103C C1 9E 00 38 */ lfs f12, 0x38(r30) -/* 000142B0 00021040 C0 1E 00 30 */ lfs f0, 0x30(r30) -/* 000142B4 00021044 C1 BE 00 34 */ lfs f13, 0x34(r30) -/* 000142B8 00021048 D0 1F 00 00 */ stfs f0, 0x0(r31) -/* 000142BC 0002104C D1 BF 00 04 */ stfs f13, 0x4(r31) -/* 000142C0 00021050 D1 9F 00 08 */ stfs f12, 0x8(r31) -/* 000142C4 00021054 C0 1D 00 00 */ lfs f0, 0x0(r29) -/* 000142C8 00021058 C1 BD 00 04 */ lfs f13, 0x4(r29) -/* 000142CC 0002105C C1 9D 00 08 */ lfs f12, 0x8(r29) -/* 000142D0 00021060 D0 1F 00 50 */ stfs f0, 0x50(r31) -/* 000142D4 00021064 D1 BF 00 54 */ stfs f13, 0x54(r31) -/* 000142D8 00021068 D1 9F 00 58 */ stfs f12, 0x58(r31) -/* 000142DC 0002106C C0 1D 00 04 */ lfs f0, 0x4(r29) -/* 000142E0 00021070 C1 BD 00 00 */ lfs f13, 0x0(r29) -/* 000142E4 00021074 EC 00 00 32 */ fmuls f0, f0, f0 -/* 000142E8 00021078 C1 9D 00 08 */ lfs f12, 0x8(r29) -/* 000142EC 0002107C ED AD 03 7A */ fmadds f13, f13, f13, f0 -/* 000142F0 00021080 C1 6A 0B B0 */ lfs f11, .rodata+0xBB0@l(r10) -/* 000142F4 00021084 ED 4C 6B 3A */ fmadds f10, f12, f12, f13 -/* 000142F8 00021088 C1 09 0B B4 */ lfs f8, .rodata+0xBB4@l(r9) -/* 000142FC 0002108C C0 EB 0B B8 */ lfs f7, .rodata+0xBB8@l(r11) -/* 00014300 00021090 FC 0A 58 00 */ fcmpu cr0, f10, f11 -/* 00014304 00021094 4C 62 03 82 */ cror un, eq, lt -/* 00014308 00021098 41 83 43 38 */ bso .L_00018640 -/* 0001430C 0002109C FD 80 50 34 */ frsqrte f12, f10 -/* 00014310 000210A0 EC 0C 03 32 */ fmuls f0, f12, f12 -/* 00014314 000210A4 ED AC 02 32 */ fmuls f13, f12, f8 -/* 00014318 000210A8 EC 0A 38 3C */ fnmsubs f0, f10, f0, f7 -/* 0001431C 000210AC ED 80 63 7A */ fmadds f12, f0, f13, f12 -/* 00014320 000210B0 EC 0C 03 32 */ fmuls f0, f12, f12 -/* 00014324 000210B4 ED AC 02 32 */ fmuls f13, f12, f8 -/* 00014328 000210B8 EC 0A 38 3C */ fnmsubs f0, f10, f0, f7 -/* 0001432C 000210BC ED 80 63 7A */ fmadds f12, f0, f13, f12 -/* 00014330 000210C0 ED 8C 02 B2 */ fmuls f12, f12, f10 -/* 00014334 000210C4 48 01 43 3C */ b .text+0x1433C -/* 00014338 000210C8 FD 80 48 90 */ fmr f12, f9 -/* 0001433C 000210CC 3D 20 00 00 */ lis r9, .rodata+0xBAC@ha -/* 00014340 000210D0 D1 9F 00 70 */ stfs f12, 0x70(r31) -/* 00014344 000210D4 C1 69 0B AC */ lfs f11, .rodata+0xBAC@l(r9) -.L_00014348: -/* 00014348 000210D8 FC 1F 58 00 */ fcmpu cr0, f31, f11 -/* 0001434C 000210DC 4C 62 03 82 */ cror un, eq, lt -/* 00014350 000210E0 41 83 43 9C */ bso .L_000186EC -/* 00014354 000210E4 EC 1E F8 24 */ fdivs f0, f30, f31 -/* 00014358 000210E8 3D 20 00 00 */ lis r9, .rodata+0xBBC@ha -/* 0001435C 000210EC C1 A9 0B BC */ lfs f13, .rodata+0xBBC@l(r9) -/* 00014360 000210F0 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00014364 000210F4 4C 62 0B 82 */ cror un, eq, gt -/* 00014368 000210F8 41 83 43 9C */ bso .L_00018704 -/* 0001436C 000210FC EC 0C 30 28 */ fsubs f0, f12, f6 -/* 00014370 00021100 39 21 00 08 */ addi r9, r1, 0x8 -/* 00014374 00021104 EC 00 F8 24 */ fdivs f0, f0, f31 -/* 00014378 00021108 D1 61 00 0C */ stfs f11, 0xc(r1) -/* 0001437C 0002110C 38 9F 00 10 */ addi r4, r31, 0x10 -.L_00014380: -/* 00014380 00021110 7D 25 4B 78 */ mr r5, r9 -/* 00014384 00021114 38 7F 00 60 */ addi r3, r31, 0x60 -/* 00014388 00021118 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 0001438C 0002111C D1 69 00 08 */ stfs f11, 0x8(r9) -/* 00014390 00021120 D1 61 00 14 */ stfs f11, 0x14(r1) -/* 00014394 00021124 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 -/* 00014398 00021128 48 01 43 B0 */ b .text+0x143B0 -/* 0001439C 0002112C 3D 20 00 00 */ lis r9, .rodata+0xBAC@ha -/* 000143A0 00021130 C0 09 0B AC */ lfs f0, .rodata+0xBAC@l(r9) -/* 000143A4 00021134 D0 1F 00 68 */ stfs f0, 0x68(r31) -/* 000143A8 00021138 D0 1F 00 60 */ stfs f0, 0x60(r31) -/* 000143AC 0002113C D0 1F 00 64 */ stfs f0, 0x64(r31) -/* 000143B0 00021140 80 01 00 3C */ lwz r0, 0x3c(r1) -/* 000143B4 00021144 7C 08 03 A6 */ mtlr r0 -/* 000143B8 00021148 BB A1 00 1C */ lmw r29, 0x1c(r1) -/* 000143BC 0002114C E3 C1 00 28 */ psq_l f30, 0x28(r1), 0, qr0 -/* 000143C0 00021150 E3 E1 00 30 */ psq_l f31, 0x30(r1), 0, qr0 -/* 000143C4 00021154 38 21 00 38 */ addi r1, r1, 0x38 -/* 000143C8 00021158 4E 80 00 20 */ blr -.endfn Update__9ICEAnchorfRCQ23ICE7Matrix4RCQ23ICE7Vector3T3 - -# .text:0x143CC | size: 0x48 -# ICE::Cubic1D::MakeCoeffs -.fn MakeCoeffs__Q23ICE7Cubic1D, global -/* 000143CC 0002115C C1 63 00 00 */ lfs f11, 0x0(r3) -/* 000143D0 00021160 3D 20 00 00 */ lis r9, .rodata+0xBC0@ha -/* 000143D4 00021164 C1 A3 00 08 */ lfs f13, 0x8(r3) -/* 000143D8 00021168 C0 03 00 04 */ lfs f0, 0x4(r3) -/* 000143DC 0002116C ED AD 58 28 */ fsubs f13, f13, f11 -/* 000143E0 00021170 C1 83 00 0C */ lfs f12, 0xc(r3) -/* 000143E4 00021174 C1 09 0B C0 */ lfs f8, .rodata+0xBC0@l(r9) -/* 000143E8 00021178 ED 4D 68 2A */ fadds f10, f13, f13 -/* 000143EC 0002117C ED 20 00 2A */ fadds f9, f0, f0 -/* 000143F0 00021180 D0 03 00 18 */ stfs f0, 0x18(r3) -/* 000143F4 00021184 ED AD 62 38 */ fmsubs f13, f13, f8, f12 -/* 000143F8 00021188 D1 63 00 1C */ stfs f11, 0x1c(r3) -/* 000143FC 0002118C EC 00 60 2A */ fadds f0, f0, f12 -/* 00014400 00021190 EC 00 50 28 */ fsubs f0, f0, f10 -/* 00014404 00021194 ED AD 48 28 */ fsubs f13, f13, f9 -/* 00014408 00021198 D0 03 00 10 */ stfs f0, 0x10(r3) -/* 0001440C 0002119C D1 A3 00 14 */ stfs f13, 0x14(r3) -/* 00014410 000211A0 4E 80 00 20 */ blr -.endfn MakeCoeffs__Q23ICE7Cubic1D - -# .text:0x14414 | size: 0x20 -.fn GetVal__CQ23ICE7Cubic1Df, global -/* 00014414 000211A4 C0 03 00 10 */ lfs f0, 0x10(r3) -/* 00014418 000211A8 C1 A3 00 14 */ lfs f13, 0x14(r3) -/* 0001441C 000211AC C1 63 00 18 */ lfs f11, 0x18(r3) -/* 00014420 000211B0 EC 00 68 7A */ fmadds f0, f0, f1, f13 -/* 00014424 000211B4 C1 83 00 1C */ lfs f12, 0x1c(r3) -/* 00014428 000211B8 EC 00 58 7A */ fmadds f0, f0, f1, f11 -/* 0001442C 000211BC EC 20 60 7A */ fmadds f1, f0, f1, f12 -/* 00014430 000211C0 4E 80 00 20 */ blr -.endfn GetVal__CQ23ICE7Cubic1Df - -# .text:0x14434 | size: 0x28 -.fn GetdVal__CQ23ICE7Cubic1Df, global -/* 00014434 000211C4 3D 20 00 00 */ lis r9, .rodata+0xBC4@ha -/* 00014438 000211C8 C1 A3 00 10 */ lfs f13, 0x10(r3) -/* 0001443C 000211CC C1 69 0B C4 */ lfs f11, .rodata+0xBC4@l(r9) -/* 00014440 000211D0 C0 03 00 14 */ lfs f0, 0x14(r3) -/* 00014444 000211D4 ED AD 02 F2 */ fmuls f13, f13, f11 -.L_00014448: -/* 00014448 000211D8 C1 83 00 18 */ lfs f12, 0x18(r3) -/* 0001444C 000211DC EC 00 00 2A */ fadds f0, f0, f0 -/* 00014450 000211E0 ED AD 00 7A */ fmadds f13, f13, f1, f0 -/* 00014454 000211E4 EC 2D 60 7A */ fmadds f1, f13, f1, f12 -/* 00014458 000211E8 4E 80 00 20 */ blr -.endfn GetdVal__CQ23ICE7Cubic1Df - -# .text:0x1445C | size: 0x20 -.fn GetddVal__CQ23ICE7Cubic1Df, global -/* 0001445C 000211EC 3D 20 00 00 */ lis r9, .rodata+0xBC8@ha -/* 00014460 000211F0 C1 A3 00 14 */ lfs f13, 0x14(r3) -/* 00014464 000211F4 C1 89 0B C8 */ lfs f12, .rodata+0xBC8@l(r9) -/* 00014468 000211F8 C0 03 00 10 */ lfs f0, 0x10(r3) -/* 0001446C 000211FC ED AD 68 2A */ fadds f13, f13, f13 -/* 00014470 00021200 EC 00 03 32 */ fmuls f0, f0, f12 -/* 00014474 00021204 EC 20 68 7A */ fmadds f1, f0, f1, f13 -/* 00014478 00021208 4E 80 00 20 */ blr -.endfn GetddVal__CQ23ICE7Cubic1Df - -# .text:0x1447C | size: 0x8 -.fn GetValDesired__CQ23ICE7Cubic1D, global -/* 0001447C 0002120C C0 23 00 08 */ lfs f1, 0x8(r3) -/* 00014480 00021210 4E 80 00 20 */ blr -.endfn GetValDesired__CQ23ICE7Cubic1D - -# .text:0x14484 | size: 0x44 -.fn GetDerivative__CQ23ICE7Cubic1Df, global -/* 00014484 00021214 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00014488 00021218 7C 08 02 A6 */ mflr r0 -/* 0001448C 0002121C F3 E1 00 08 */ psq_st f31, 0x8(r1), 0, qr0 -.L_00014490: -/* 00014490 00021220 90 01 00 14 */ stw r0, 0x14(r1) -/* 00014494 00021224 7C 6B 1B 78 */ mr r11, r3 -/* 00014498 00021228 3D 20 00 00 */ lis r9, .rodata+0xBCC@ha -/* 0001449C 0002122C C3 E9 0B CC */ lfs f31, .rodata+0xBCC@l(r9) -/* 000144A0 00021230 C0 0B 00 24 */ lfs f0, 0x24(r11) -/* 000144A4 00021234 EF FF 00 24 */ fdivs f31, f31, f0 -/* 000144A8 00021238 EC 21 07 F2 */ fmuls f1, f1, f31 -/* 000144AC 0002123C 48 01 44 35 */ bl .text+0x14434 -.L_000144B0: -/* 000144B0 00021240 EC 21 07 F2 */ fmuls f1, f1, f31 -/* 000144B4 00021244 80 01 00 14 */ lwz r0, 0x14(r1) -/* 000144B8 00021248 7C 08 03 A6 */ mtlr r0 -.L_000144BC: -/* 000144BC 0002124C E3 E1 00 08 */ psq_l f31, 0x8(r1), 0, qr0 -/* 000144C0 00021250 38 21 00 10 */ addi r1, r1, 0x10 -/* 000144C4 00021254 4E 80 00 20 */ blr -.endfn GetDerivative__CQ23ICE7Cubic1Df - -# .text:0x144C8 | size: 0x48 -.fn GetSecondDerivative__CQ23ICE7Cubic1Df, global -/* 000144C8 00021258 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 000144CC 0002125C 7C 08 02 A6 */ mflr r0 -/* 000144D0 00021260 F3 E1 00 08 */ psq_st f31, 0x8(r1), 0, qr0 -/* 000144D4 00021264 90 01 00 14 */ stw r0, 0x14(r1) -/* 000144D8 00021268 7C 6B 1B 78 */ mr r11, r3 -/* 000144DC 0002126C 3D 20 00 00 */ lis r9, .rodata+0xBD0@ha -/* 000144E0 00021270 C3 E9 0B D0 */ lfs f31, .rodata+0xBD0@l(r9) -/* 000144E4 00021274 C0 0B 00 24 */ lfs f0, 0x24(r11) -/* 000144E8 00021278 EF FF 00 24 */ fdivs f31, f31, f0 -/* 000144EC 0002127C EC 21 07 F2 */ fmuls f1, f1, f31 -/* 000144F0 00021280 48 01 44 5D */ bl .text+0x1445C -/* 000144F4 00021284 EF FF 07 F2 */ fmuls f31, f31, f31 -.L_000144F8: -/* 000144F8 00021288 EC 21 07 F2 */ fmuls f1, f1, f31 -/* 000144FC 0002128C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 00014500 00021290 7C 08 03 A6 */ mtlr r0 -.L_00014504: -/* 00014504 00021294 E3 E1 00 08 */ psq_l f31, 0x8(r1), 0, qr0 -/* 00014508 00021298 38 21 00 10 */ addi r1, r1, 0x10 -/* 0001450C 0002129C 4E 80 00 20 */ blr -.endfn GetSecondDerivative__CQ23ICE7Cubic1Df - -# .text:0x14510 | size: 0x60 -.fn ClampDerivative__Q23ICE7Cubic1Df, global -/* 00014510 000212A0 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 00014514 000212A4 7C 08 02 A6 */ mflr r0 -/* 00014518 000212A8 F3 E1 00 10 */ psq_st f31, 0x10(r1), 0, qr0 -/* 0001451C 000212AC 93 E1 00 0C */ stw r31, 0xc(r1) -/* 00014520 000212B0 90 01 00 1C */ stw r0, 0x1c(r1) -/* 00014524 000212B4 7C 7F 1B 78 */ mr r31, r3 -.L_00014528: -/* 00014528 000212B8 FF E0 08 90 */ fmr f31, f1 -/* 0001452C 000212BC C0 3F 00 24 */ lfs f1, 0x24(r31) -/* 00014530 000212C0 48 01 44 85 */ bl .text+0x14484 -/* 00014534 000212C4 FC 00 0A 10 */ fabs f0, f1 -/* 00014538 000212C8 FC 00 F8 00 */ fcmpu cr0, f0, f31 -/* 0001453C 000212CC 4C 62 03 82 */ cror un, eq, lt -/* 00014540 000212D0 41 83 45 58 */ bso .L_00018A98 -/* 00014544 000212D4 EC 00 08 24 */ fdivs f0, f0, f1 -/* 00014548 000212D8 C1 BF 00 24 */ lfs f13, 0x24(r31) -/* 0001454C 000212DC EC 00 07 F2 */ fmuls f0, f0, f31 -/* 00014550 000212E0 EC 00 03 72 */ fmuls f0, f0, f13 -/* 00014554 000212E4 D0 1F 00 0C */ stfs f0, 0xc(r31) -.L_00014558: -/* 00014558 000212E8 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0001455C 000212EC 7C 08 03 A6 */ mtlr r0 -/* 00014560 000212F0 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 00014564 000212F4 E3 E1 00 10 */ psq_l f31, 0x10(r1), 0, qr0 -.L_00014568: -/* 00014568 000212F8 38 21 00 18 */ addi r1, r1, 0x18 -/* 0001456C 000212FC 4E 80 00 20 */ blr -.endfn ClampDerivative__Q23ICE7Cubic1Df - -# .text:0x14570 | size: 0xD4 -.fn ClampSecondDerivative__Q23ICE7Cubic1Df, global -/* 00014570 00021300 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 00014574 00021304 7C 08 02 A6 */ mflr r0 -/* 00014578 00021308 F3 A1 00 10 */ psq_st f29, 0x10(r1), 0, qr0 -/* 0001457C 0002130C F3 C1 00 18 */ psq_st f30, 0x18(r1), 0, qr0 -/* 00014580 00021310 F3 E1 00 20 */ psq_st f31, 0x20(r1), 0, qr0 -/* 00014584 00021314 93 E1 00 0C */ stw r31, 0xc(r1) -/* 00014588 00021318 90 01 00 2C */ stw r0, 0x2c(r1) -/* 0001458C 0002131C 3D 20 00 00 */ lis r9, .rodata+0xBD4@ha -/* 00014590 00021320 FF E0 08 90 */ fmr f31, f1 -/* 00014594 00021324 7C 7F 1B 78 */ mr r31, r3 -/* 00014598 00021328 C0 29 0B D4 */ lfs f1, .rodata+0xBD4@l(r9) -/* 0001459C 0002132C 48 01 44 C9 */ bl .text+0x144C8 -/* 000145A0 00021330 FF C0 08 90 */ fmr f30, f1 -/* 000145A4 00021334 7F E3 FB 78 */ mr r3, r31 -/* 000145A8 00021338 C0 3F 00 24 */ lfs f1, 0x24(r31) -/* 000145AC 0002133C FF A0 F2 10 */ fabs f29, f30 -/* 000145B0 00021340 48 01 44 C9 */ bl .text+0x144C8 -/* 000145B4 00021344 38 00 00 00 */ li r0, 0x0 -/* 000145B8 00021348 FD A0 0A 10 */ fabs f13, f1 -/* 000145BC 0002134C FC 1D F8 00 */ fcmpu cr0, f29, f31 -/* 000145C0 00021350 4C 62 03 82 */ cror un, eq, lt -/* 000145C4 00021354 41 83 45 D4 */ bso .L_00018B98 -/* 000145C8 00021358 EC 1D F0 24 */ fdivs f0, f29, f30 -/* 000145CC 0002135C 38 00 00 01 */ li r0, 0x1 -/* 000145D0 00021360 EF C0 07 F2 */ fmuls f30, f0, f31 -/* 000145D4 00021364 FC 0D F8 00 */ fcmpu cr0, f13, f31 -.L_000145D8: -/* 000145D8 00021368 4C 62 03 82 */ cror un, eq, lt -/* 000145DC 0002136C 41 83 45 EC */ bso .L_00018BC8 -/* 000145E0 00021370 EC 0D 08 24 */ fdivs f0, f13, f1 -/* 000145E4 00021374 38 00 00 01 */ li r0, 0x1 -.L_000145E8: -/* 000145E8 00021378 EC 20 07 F2 */ fmuls f1, f0, f31 -/* 000145EC 0002137C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000145F0 00021380 41 82 46 24 */ beq .L_00018C14 -/* 000145F4 00021384 C0 1F 00 24 */ lfs f0, 0x24(r31) -/* 000145F8 00021388 3D 20 00 00 */ lis r9, .rodata+0xBD8@ha -/* 000145FC 0002138C 3D 60 00 00 */ lis r11, .rodata+0xBDC@ha -/* 00014600 00021390 C1 69 0B D8 */ lfs f11, .rodata+0xBD8@l(r9) -/* 00014604 00021394 EC 00 00 32 */ fmuls f0, f0, f0 -/* 00014608 00021398 C1 8B 0B DC */ lfs f12, .rodata+0xBDC@l(r11) -/* 0001460C 0002139C ED BE 00 32 */ fmuls f13, f30, f0 -/* 00014610 000213A0 EC 01 68 38 */ fmsubs f0, f1, f0, f13 -/* 00014614 000213A4 EC 00 02 F2 */ fmuls f0, f0, f11 -.L_00014618: -/* 00014618 000213A8 ED AD 03 32 */ fmuls f13, f13, f12 -/* 0001461C 000213AC D0 1F 00 10 */ stfs f0, 0x10(r31) -/* 00014620 000213B0 D1 BF 00 14 */ stfs f13, 0x14(r31) -/* 00014624 000213B4 80 01 00 2C */ lwz r0, 0x2c(r1) -.L_00014628: -/* 00014628 000213B8 7C 08 03 A6 */ mtlr r0 -/* 0001462C 000213BC 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 00014630 000213C0 E3 A1 00 10 */ psq_l f29, 0x10(r1), 0, qr0 -/* 00014634 000213C4 E3 C1 00 18 */ psq_l f30, 0x18(r1), 0, qr0 -/* 00014638 000213C8 E3 E1 00 20 */ psq_l f31, 0x20(r1), 0, qr0 -/* 0001463C 000213CC 38 21 00 28 */ addi r1, r1, 0x28 -/* 00014640 000213D0 4E 80 00 20 */ blr -.endfn ClampSecondDerivative__Q23ICE7Cubic1Df - -# .text:0x14644 | size: 0x144 -.fn Update__Q23ICE7Cubic1Dfff, global -/* 00014644 000213D4 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 00014648 000213D8 7C 08 02 A6 */ mflr r0 -/* 0001464C 000213DC F3 A1 00 10 */ psq_st f29, 0x10(r1), 0, qr0 -/* 00014650 000213E0 F3 C1 00 18 */ psq_st f30, 0x18(r1), 0, qr0 -/* 00014654 000213E4 F3 E1 00 20 */ psq_st f31, 0x20(r1), 0, qr0 -/* 00014658 000213E8 93 E1 00 0C */ stw r31, 0xc(r1) -/* 0001465C 000213EC 90 01 00 2C */ stw r0, 0x2c(r1) -/* 00014660 000213F0 7C 7F 1B 78 */ mr r31, r3 -/* 00014664 000213F4 FF A0 08 90 */ fmr f29, f1 -/* 00014668 000213F8 A8 1F 00 28 */ lha r0, 0x28(r31) -/* 0001466C 000213FC FC 20 10 90 */ fmr f1, f2 -/* 00014670 00021400 FF C0 18 90 */ fmr f30, f3 -/* 00014674 00021404 2C 00 00 01 */ cmpwi r0, 0x1 -/* 00014678 00021408 41 82 46 DC */ beq .L_00018D54 -/* 0001467C 0002140C 40 81 47 68 */ ble .L_00018DE4 -/* 00014680 00021410 2C 00 00 02 */ cmpwi r0, 0x2 -/* 00014684 00021414 40 82 47 68 */ bne .L_00018DEC -/* 00014688 00021418 3D 20 00 00 */ lis r9, .rodata+0xBE0@ha -/* 0001468C 0002141C A8 1F 00 2A */ lha r0, 0x2a(r31) -/* 00014690 00021420 C3 E9 0B E0 */ lfs f31, .rodata+0xBE0@l(r9) -/* 00014694 00021424 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00014698 00021428 D3 FF 00 20 */ stfs f31, 0x20(r31) -/* 0001469C 0002142C 40 82 46 A8 */ bne .L_00018D44 -/* 000146A0 00021430 38 00 00 01 */ li r0, 0x1 -/* 000146A4 00021434 B0 1F 00 28 */ sth r0, 0x28(r31) -/* 000146A8 00021438 FC 01 F8 00 */ fcmpu cr0, f1, f31 -/* 000146AC 0002143C 4C 62 03 82 */ cror un, eq, lt -/* 000146B0 00021440 41 83 46 BC */ bso .L_00018D6C -/* 000146B4 00021444 7F E3 FB 78 */ mr r3, r31 -/* 000146B8 00021448 48 01 45 11 */ bl .text+0x14510 -/* 000146BC 0002144C 7F E3 FB 78 */ mr r3, r31 -.L_000146C0: -/* 000146C0 00021450 48 01 43 CD */ bl .text+0x143CC -/* 000146C4 00021454 FC 1E F8 00 */ fcmpu cr0, f30, f31 -.L_000146C8: -/* 000146C8 00021458 4C 62 03 82 */ cror un, eq, lt -/* 000146CC 0002145C 41 83 46 DC */ bso .L_00018DA8 -/* 000146D0 00021460 FC 20 F0 90 */ fmr f1, f30 -/* 000146D4 00021464 7F E3 FB 78 */ mr r3, r31 -.L_000146D8: -/* 000146D8 00021468 48 01 45 71 */ bl .text+0x14570 -/* 000146DC 0002146C 3D 20 00 00 */ lis r9, .rodata+0xBE0@ha -/* 000146E0 00021470 C0 3F 00 24 */ lfs f1, 0x24(r31) -/* 000146E4 00021474 C0 09 0B E0 */ lfs f0, .rodata+0xBE0@l(r9) -/* 000146E8 00021478 FC 01 00 00 */ fcmpu cr0, f1, f0 -/* 000146EC 0002147C 4C 62 03 82 */ cror un, eq, lt -/* 000146F0 00021480 41 83 47 04 */ bso .L_00018DF4 -/* 000146F4 00021484 ED BD 08 24 */ fdivs f13, f29, f1 -/* 000146F8 00021488 C0 1F 00 20 */ lfs f0, 0x20(r31) -/* 000146FC 0002148C EC 00 68 2A */ fadds f0, f0, f13 -/* 00014700 00021490 48 01 47 0C */ b .text+0x1470C -/* 00014704 00021494 3D 20 00 00 */ lis r9, .rodata+0xBE4@ha -/* 00014708 00021498 C0 09 0B E4 */ lfs f0, .rodata+0xBE4@l(r9) -/* 0001470C 0002149C D0 1F 00 20 */ stfs f0, 0x20(r31) -/* 00014710 000214A0 3D 20 00 00 */ lis r9, .rodata+0xBE4@ha -/* 00014714 000214A4 C0 1F 00 20 */ lfs f0, 0x20(r31) -/* 00014718 000214A8 C1 89 0B E4 */ lfs f12, .rodata+0xBE4@l(r9) -/* 0001471C 000214AC FC 00 60 00 */ fcmpu cr0, f0, f12 -/* 00014720 000214B0 4C 62 03 82 */ cror un, eq, lt -/* 00014724 000214B4 41 83 47 44 */ bso .L_00018E68 -/* 00014728 000214B8 C0 1F 00 08 */ lfs f0, 0x8(r31) -/* 0001472C 000214BC 38 00 00 00 */ li r0, 0x0 -/* 00014730 000214C0 C1 BF 00 0C */ lfs f13, 0xc(r31) -/* 00014734 000214C4 D1 9F 00 20 */ stfs f12, 0x20(r31) -/* 00014738 000214C8 D0 1F 00 00 */ stfs f0, 0x0(r31) -/* 0001473C 000214CC D1 BF 00 04 */ stfs f13, 0x4(r31) -/* 00014740 000214D0 B0 1F 00 28 */ sth r0, 0x28(r31) -/* 00014744 000214D4 C3 FF 00 20 */ lfs f31, 0x20(r31) -/* 00014748 000214D8 7F E3 FB 78 */ mr r3, r31 -/* 0001474C 000214DC FC 20 F8 90 */ fmr f1, f31 -/* 00014750 000214E0 48 01 44 15 */ bl .text+0x14414 -/* 00014754 000214E4 D0 3F 00 00 */ stfs f1, 0x0(r31) -/* 00014758 000214E8 7F E3 FB 78 */ mr r3, r31 -/* 0001475C 000214EC FC 20 F8 90 */ fmr f1, f31 -/* 00014760 000214F0 48 01 44 35 */ bl .text+0x14434 -/* 00014764 000214F4 D0 3F 00 04 */ stfs f1, 0x4(r31) -.L_00014768: -/* 00014768 000214F8 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 0001476C 000214FC 7C 08 03 A6 */ mtlr r0 -/* 00014770 00021500 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 00014774 00021504 E3 A1 00 10 */ psq_l f29, 0x10(r1), 0, qr0 -.L_00014778: -/* 00014778 00021508 E3 C1 00 18 */ psq_l f30, 0x18(r1), 0, qr0 -/* 0001477C 0002150C E3 E1 00 20 */ psq_l f31, 0x20(r1), 0, qr0 -/* 00014780 00021510 38 21 00 28 */ addi r1, r1, 0x28 -/* 00014784 00021514 4E 80 00 20 */ blr -.endfn Update__Q23ICE7Cubic1Dfff - -# .text:0x14788 | size: 0x58 -.fn SetVal__Q23ICE7Cubic3DPCQ23ICE7Vector3, global -/* 00014788 00021518 C0 04 00 00 */ lfs f0, 0x0(r4) -/* 0001478C 0002151C C1 A3 00 08 */ lfs f13, 0x8(r3) -/* 00014790 00021520 C1 64 00 08 */ lfs f11, 0x8(r4) -/* 00014794 00021524 C1 84 00 04 */ lfs f12, 0x4(r4) -/* 00014798 00021528 FC 00 68 00 */ fcmpu cr0, f0, f13 -.L_0001479C: -/* 0001479C 0002152C D0 03 00 00 */ stfs f0, 0x0(r3) -.L_000147A0: -/* 000147A0 00021530 41 82 47 AC */ beq .L_00018F4C -/* 000147A4 00021534 38 00 00 02 */ li r0, 0x2 -.L_000147A8: -/* 000147A8 00021538 B0 03 00 28 */ sth r0, 0x28(r3) -.L_000147AC: -/* 000147AC 0002153C C0 03 00 34 */ lfs f0, 0x34(r3) -/* 000147B0 00021540 D1 83 00 2C */ stfs f12, 0x2c(r3) -/* 000147B4 00021544 FC 0C 00 00 */ fcmpu cr0, f12, f0 -/* 000147B8 00021548 41 82 47 C4 */ beq .L_00018F7C -/* 000147BC 0002154C 38 00 00 02 */ li r0, 0x2 -/* 000147C0 00021550 B0 03 00 54 */ sth r0, 0x54(r3) -/* 000147C4 00021554 C0 03 00 60 */ lfs f0, 0x60(r3) -/* 000147C8 00021558 D1 63 00 58 */ stfs f11, 0x58(r3) -/* 000147CC 0002155C FC 0B 00 00 */ fcmpu cr0, f11, f0 -/* 000147D0 00021560 4D 82 00 20 */ beqlr -/* 000147D4 00021564 38 00 00 02 */ li r0, 0x2 -/* 000147D8 00021568 B0 03 00 80 */ sth r0, 0x80(r3) -/* 000147DC 0002156C 4E 80 00 20 */ blr -.endfn SetVal__Q23ICE7Cubic3DPCQ23ICE7Vector3 - -# .text:0x147E0 | size: 0x58 -.fn SetdVal__Q23ICE7Cubic3DPCQ23ICE7Vector3, global -/* 000147E0 00021570 C0 04 00 00 */ lfs f0, 0x0(r4) -/* 000147E4 00021574 C1 A3 00 0C */ lfs f13, 0xc(r3) -/* 000147E8 00021578 C1 64 00 08 */ lfs f11, 0x8(r4) -/* 000147EC 0002157C C1 84 00 04 */ lfs f12, 0x4(r4) -/* 000147F0 00021580 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 000147F4 00021584 D0 03 00 04 */ stfs f0, 0x4(r3) -/* 000147F8 00021588 41 82 48 04 */ beq Init__10ICEManager -/* 000147FC 0002158C 38 00 00 02 */ li r0, 0x2 -/* 00014800 00021590 B0 03 00 28 */ sth r0, 0x28(r3) -/* 00014804 00021594 C0 03 00 38 */ lfs f0, 0x38(r3) -/* 00014808 00021598 D1 83 00 30 */ stfs f12, 0x30(r3) -/* 0001480C 0002159C FC 0C 00 00 */ fcmpu cr0, f12, f0 -/* 00014810 000215A0 41 82 48 1C */ beq .L_0001902C -/* 00014814 000215A4 38 00 00 02 */ li r0, 0x2 -/* 00014818 000215A8 B0 03 00 54 */ sth r0, 0x54(r3) -/* 0001481C 000215AC C0 03 00 64 */ lfs f0, 0x64(r3) -/* 00014820 000215B0 D1 63 00 5C */ stfs f11, 0x5c(r3) -/* 00014824 000215B4 FC 0B 00 00 */ fcmpu cr0, f11, f0 -/* 00014828 000215B8 4D 82 00 20 */ beqlr -/* 0001482C 000215BC 38 00 00 02 */ li r0, 0x2 -/* 00014830 000215C0 B0 03 00 80 */ sth r0, 0x80(r3) -/* 00014834 000215C4 4E 80 00 20 */ blr -.endfn SetdVal__Q23ICE7Cubic3DPCQ23ICE7Vector3 - -# .text:0x14838 | size: 0x58 -.fn SetValDesired__Q23ICE7Cubic3DPCQ23ICE7Vector3, global -/* 00014838 000215C8 C0 04 00 00 */ lfs f0, 0x0(r4) -/* 0001483C 000215CC C1 A3 00 00 */ lfs f13, 0x0(r3) -/* 00014840 000215D0 C1 64 00 08 */ lfs f11, 0x8(r4) -/* 00014844 000215D4 C1 84 00 04 */ lfs f12, 0x4(r4) -/* 00014848 000215D8 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 0001484C 000215DC D0 03 00 08 */ stfs f0, 0x8(r3) -/* 00014850 000215E0 41 82 48 5C */ beq .L_000190AC -/* 00014854 000215E4 38 00 00 02 */ li r0, 0x2 -/* 00014858 000215E8 B0 03 00 28 */ sth r0, 0x28(r3) -/* 0001485C 000215EC C0 03 00 2C */ lfs f0, 0x2c(r3) -/* 00014860 000215F0 D1 83 00 34 */ stfs f12, 0x34(r3) -/* 00014864 000215F4 FC 0C 00 00 */ fcmpu cr0, f12, f0 -/* 00014868 000215F8 41 82 48 74 */ beq .L_000190DC -/* 0001486C 000215FC 38 00 00 02 */ li r0, 0x2 -/* 00014870 00021600 B0 03 00 54 */ sth r0, 0x54(r3) -/* 00014874 00021604 C0 03 00 58 */ lfs f0, 0x58(r3) -/* 00014878 00021608 D1 63 00 60 */ stfs f11, 0x60(r3) -/* 0001487C 0002160C FC 0B 00 00 */ fcmpu cr0, f11, f0 -/* 00014880 00021610 4D 82 00 20 */ beqlr -/* 00014884 00021614 38 00 00 02 */ li r0, 0x2 -/* 00014888 00021618 B0 03 00 80 */ sth r0, 0x80(r3) -/* 0001488C 0002161C 4E 80 00 20 */ blr -.endfn SetValDesired__Q23ICE7Cubic3DPCQ23ICE7Vector3 - -# .text:0x14890 | size: 0x1C -.fn SetdValDesired__Q23ICE7Cubic3DPCQ23ICE7Vector3, global -/* 00014890 00021620 C0 04 00 08 */ lfs f0, 0x8(r4) -/* 00014894 00021624 C1 A4 00 00 */ lfs f13, 0x0(r4) -.L_00014898: -/* 00014898 00021628 C1 84 00 04 */ lfs f12, 0x4(r4) -/* 0001489C 0002162C D0 03 00 64 */ stfs f0, 0x64(r3) -.L_000148A0: -/* 000148A0 00021630 D1 A3 00 0C */ stfs f13, 0xc(r3) -.L_000148A4: -/* 000148A4 00021634 D1 83 00 38 */ stfs f12, 0x38(r3) -/* 000148A8 00021638 4E 80 00 20 */ blr -.endfn SetdValDesired__Q23ICE7Cubic3DPCQ23ICE7Vector3 - -# .text:0x148AC | size: 0x1C -.fn GetVal__CQ23ICE7Cubic3DPQ23ICE7Vector3, global -/* 000148AC 0002163C C0 03 00 00 */ lfs f0, 0x0(r3) -/* 000148B0 00021640 D0 04 00 00 */ stfs f0, 0x0(r4) -/* 000148B4 00021644 C1 A3 00 2C */ lfs f13, 0x2c(r3) -/* 000148B8 00021648 D1 A4 00 04 */ stfs f13, 0x4(r4) -/* 000148BC 0002164C C0 03 00 58 */ lfs f0, 0x58(r3) -/* 000148C0 00021650 D0 04 00 08 */ stfs f0, 0x8(r4) -/* 000148C4 00021654 4E 80 00 20 */ blr -.endfn GetVal__CQ23ICE7Cubic3DPQ23ICE7Vector3 - -# .text:0x148C8 | size: 0x1C -.fn GetdVal__CQ23ICE7Cubic3DPQ23ICE7Vector3, global -/* 000148C8 00021658 C0 03 00 04 */ lfs f0, 0x4(r3) -/* 000148CC 0002165C D0 04 00 00 */ stfs f0, 0x0(r4) -/* 000148D0 00021660 C1 A3 00 30 */ lfs f13, 0x30(r3) -/* 000148D4 00021664 D1 A4 00 04 */ stfs f13, 0x4(r4) -/* 000148D8 00021668 C0 03 00 5C */ lfs f0, 0x5c(r3) -/* 000148DC 0002166C D0 04 00 08 */ stfs f0, 0x8(r4) -/* 000148E0 00021670 4E 80 00 20 */ blr -.endfn GetdVal__CQ23ICE7Cubic3DPQ23ICE7Vector3 - -# .text:0x148E4 | size: 0x60 -.fn GetVal__CQ23ICE7Cubic3DPQ23ICE7Vector3f, global -/* 000148E4 00021674 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 000148E8 00021678 7C 08 02 A6 */ mflr r0 -/* 000148EC 0002167C F3 E1 00 18 */ psq_st f31, 0x18(r1), 0, qr0 -/* 000148F0 00021680 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 000148F4 00021684 90 01 00 24 */ stw r0, 0x24(r1) -/* 000148F8 00021688 7C 7E 1B 78 */ mr r30, r3 -/* 000148FC 0002168C FF E0 08 90 */ fmr f31, f1 -/* 00014900 00021690 7C 9D 23 78 */ mr r29, r4 -/* 00014904 00021694 48 01 44 15 */ bl .text+0x14414 -/* 00014908 00021698 D0 3D 00 00 */ stfs f1, 0x0(r29) -/* 0001490C 0002169C 38 7E 00 2C */ addi r3, r30, 0x2c -/* 00014910 000216A0 FC 20 F8 90 */ fmr f1, f31 -/* 00014914 000216A4 48 01 44 15 */ bl .text+0x14414 -/* 00014918 000216A8 D0 3D 00 04 */ stfs f1, 0x4(r29) -/* 0001491C 000216AC 38 7E 00 58 */ addi r3, r30, 0x58 -/* 00014920 000216B0 FC 20 F8 90 */ fmr f1, f31 -/* 00014924 000216B4 48 01 44 15 */ bl .text+0x14414 -/* 00014928 000216B8 D0 3D 00 08 */ stfs f1, 0x8(r29) -.L_0001492C: -/* 0001492C 000216BC 80 01 00 24 */ lwz r0, 0x24(r1) -/* 00014930 000216C0 7C 08 03 A6 */ mtlr r0 -/* 00014934 000216C4 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 00014938 000216C8 E3 E1 00 18 */ psq_l f31, 0x18(r1), 0, qr0 -/* 0001493C 000216CC 38 21 00 20 */ addi r1, r1, 0x20 -/* 00014940 000216D0 4E 80 00 20 */ blr -.endfn GetVal__CQ23ICE7Cubic3DPQ23ICE7Vector3f - -# .text:0x14944 | size: 0x1C -.fn GetValDesired__CQ23ICE7Cubic3DPQ23ICE7Vector3, global -/* 00014944 000216D4 C0 03 00 08 */ lfs f0, 0x8(r3) -.L_00014948: -/* 00014948 000216D8 D0 04 00 00 */ stfs f0, 0x0(r4) -/* 0001494C 000216DC C1 A3 00 34 */ lfs f13, 0x34(r3) -/* 00014950 000216E0 D1 A4 00 04 */ stfs f13, 0x4(r4) -/* 00014954 000216E4 C0 03 00 60 */ lfs f0, 0x60(r3) -/* 00014958 000216E8 D0 04 00 08 */ stfs f0, 0x8(r4) -/* 0001495C 000216EC 4E 80 00 20 */ blr -.endfn GetValDesired__CQ23ICE7Cubic3DPQ23ICE7Vector3 - -# .text:0x14960 | size: 0x78 -.fn Update__Q23ICE7Cubic3Dfff, global -/* 00014960 000216F0 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 00014964 000216F4 7C 08 02 A6 */ mflr r0 -/* 00014968 000216F8 F3 A1 00 10 */ psq_st f29, 0x10(r1), 0, qr0 -/* 0001496C 000216FC F3 C1 00 18 */ psq_st f30, 0x18(r1), 0, qr0 -/* 00014970 00021700 F3 E1 00 20 */ psq_st f31, 0x20(r1), 0, qr0 -/* 00014974 00021704 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 00014978 00021708 90 01 00 2C */ stw r0, 0x2c(r1) -/* 0001497C 0002170C 7C 7E 1B 78 */ mr r30, r3 -/* 00014980 00021710 FF C0 08 90 */ fmr f30, f1 -/* 00014984 00021714 FF A0 10 90 */ fmr f29, f2 -/* 00014988 00021718 FF E0 18 90 */ fmr f31, f3 -/* 0001498C 0002171C 48 01 46 45 */ bl .text+0x14644 -/* 00014990 00021720 38 7E 00 2C */ addi r3, r30, 0x2c -/* 00014994 00021724 FC 20 F0 90 */ fmr f1, f30 -/* 00014998 00021728 FC 40 E8 90 */ fmr f2, f29 -/* 0001499C 0002172C FC 60 F8 90 */ fmr f3, f31 -/* 000149A0 00021730 48 01 46 45 */ bl .text+0x14644 -/* 000149A4 00021734 38 7E 00 58 */ addi r3, r30, 0x58 -/* 000149A8 00021738 FC 20 F0 90 */ fmr f1, f30 -/* 000149AC 0002173C FC 40 E8 90 */ fmr f2, f29 -/* 000149B0 00021740 FC 60 F8 90 */ fmr f3, f31 -/* 000149B4 00021744 48 01 46 45 */ bl .text+0x14644 -/* 000149B8 00021748 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 000149BC 0002174C 7C 08 03 A6 */ mtlr r0 -/* 000149C0 00021750 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 000149C4 00021754 E3 A1 00 10 */ psq_l f29, 0x10(r1), 0, qr0 -.L_000149C8: -/* 000149C8 00021758 E3 C1 00 18 */ psq_l f30, 0x18(r1), 0, qr0 -/* 000149CC 0002175C E3 E1 00 20 */ psq_l f31, 0x20(r1), 0, qr0 -/* 000149D0 00021760 38 21 00 28 */ addi r1, r1, 0x28 -/* 000149D4 00021764 4E 80 00 20 */ blr -.endfn Update__Q23ICE7Cubic3Dfff - -# .text:0x149D8 | size: 0x150 -.fn EyeCubicInit__8ICEMoverPQ23ICE7Cubic3DPQ23ICE7Matrix4PQ23ICE7Vector3, global -/* 000149D8 00021768 94 21 FF A8 */ stwu r1, -0x58(r1) -.L_000149DC: -/* 000149DC 0002176C 7C 08 02 A6 */ mflr r0 -/* 000149E0 00021770 7D 80 00 26 */ mfcr r12 -/* 000149E4 00021774 F3 E1 00 50 */ psq_st f31, 0x50(r1), 0, qr0 -/* 000149E8 00021778 BF 61 00 3C */ stmw r27, 0x3c(r1) -/* 000149EC 0002177C 90 01 00 5C */ stw r0, 0x5c(r1) -/* 000149F0 00021780 91 81 00 38 */ stw r12, 0x38(r1) -/* 000149F4 00021784 3D 20 00 00 */ lis r9, .rodata+0xBE8@ha -/* 000149F8 00021788 7C 7B 1B 78 */ mr r27, r3 -/* 000149FC 0002178C C3 E9 0B E8 */ lfs f31, .rodata+0xBE8@l(r9) -/* 00014A00 00021790 3B E1 00 08 */ addi r31, r1, 0x8 -.L_00014A04: -/* 00014A04 00021794 81 7B 00 1C */ lwz r11, 0x1c(r27) -/* 00014A08 00021798 3D 20 00 00 */ lis r9, .rodata+0xBEC@ha -/* 00014A0C 0002179C D3 E1 00 08 */ stfs f31, 0x8(r1) -/* 00014A10 000217A0 7C BD 2B 78 */ mr r29, r5 -.L_00014A14: -/* 00014A14 000217A4 D3 E1 00 0C */ stfs f31, 0xc(r1) -/* 00014A18 000217A8 7C 9C 23 78 */ mr r28, r4 -.L_00014A1C: -/* 00014A1C 000217AC D3 FF 00 08 */ stfs f31, 0x8(r31) -/* 00014A20 000217B0 2E 1D 00 00 */ cmpwi cr4, r29, 0x0 -/* 00014A24 000217B4 C0 29 0B EC */ lfs f1, .rodata+0xBEC@l(r9) -/* 00014A28 000217B8 7C DE 33 78 */ mr r30, r6 -/* 00014A2C 000217BC 38 AB 01 E8 */ addi r5, r11, 0x1e8 -/* 00014A30 000217C0 D3 E1 00 14 */ stfs f31, 0x14(r1) -/* 00014A34 000217C4 D3 E1 00 18 */ stfs f31, 0x18(r1) -/* 00014A38 000217C8 7F E3 FB 78 */ mr r3, r31 -/* 00014A3C 000217CC D3 E1 00 1C */ stfs f31, 0x1c(r1) -/* 00014A40 000217D0 38 8B 00 40 */ addi r4, r11, 0x40 -/* 00014A44 000217D4 D3 E1 00 20 */ stfs f31, 0x20(r1) -/* 00014A48 000217D8 D3 E1 00 24 */ stfs f31, 0x24(r1) -.L_00014A4C: -/* 00014A4C 000217DC 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -/* 00014A50 000217E0 41 92 4A 64 */ beq cr4, .L_000194B4 -/* 00014A54 000217E4 7F E3 FB 78 */ mr r3, r31 -/* 00014A58 000217E8 7F A4 EB 78 */ mr r4, r29 -/* 00014A5C 000217EC 7F E5 FB 78 */ mr r5, r31 -/* 00014A60 000217F0 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 -/* 00014A64 000217F4 7F E4 FB 78 */ mr r4, r31 -/* 00014A68 000217F8 7F 83 E3 78 */ mr r3, r28 -/* 00014A6C 000217FC 48 01 47 89 */ bl .text+0x14788 -/* 00014A70 00021800 81 3B 00 1C */ lwz r9, 0x1c(r27) -/* 00014A74 00021804 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 00014A78 00021808 C1 49 01 E8 */ lfs f10, 0x1e8(r9) -/* 00014A7C 0002180C D1 41 00 18 */ stfs f10, 0x18(r1) -/* 00014A80 00021810 C1 29 01 EC */ lfs f9, 0x1ec(r9) -/* 00014A84 00021814 D1 21 00 1C */ stfs f9, 0x1c(r1) -/* 00014A88 00021818 C1 69 01 F0 */ lfs f11, 0x1f0(r9) -/* 00014A8C 0002181C D1 61 00 20 */ stfs f11, 0x20(r1) -.L_00014A90: -/* 00014A90 00021820 41 82 4A B8 */ beq ChooseGoodSceneCameraTrackIndex__10ICEManagerUiPCQ23ICE7Matrix4 -/* 00014A94 00021824 C0 1E 00 08 */ lfs f0, 0x8(r30) -/* 00014A98 00021828 C1 9E 00 04 */ lfs f12, 0x4(r30) -/* 00014A9C 0002182C C1 BE 00 00 */ lfs f13, 0x0(r30) -/* 00014AA0 00021830 EC 0B 00 28 */ fsubs f0, f11, f0 -/* 00014AA4 00021834 ED 89 60 28 */ fsubs f12, f9, f12 -/* 00014AA8 00021838 D0 01 00 20 */ stfs f0, 0x20(r1) -.L_00014AAC: -/* 00014AAC 0002183C ED AA 68 28 */ fsubs f13, f10, f13 -/* 00014AB0 00021840 D1 81 00 1C */ stfs f12, 0x1c(r1) -/* 00014AB4 00021844 D1 A1 00 18 */ stfs f13, 0x18(r1) -/* 00014AB8 00021848 C1 7C 00 24 */ lfs f11, 0x24(r28) -/* 00014ABC 0002184C 3B E1 00 28 */ addi r31, r1, 0x28 -/* 00014AC0 00021850 C0 01 00 18 */ lfs f0, 0x18(r1) -.L_00014AC4: -/* 00014AC4 00021854 C1 A1 00 1C */ lfs f13, 0x1c(r1) -/* 00014AC8 00021858 C1 81 00 20 */ lfs f12, 0x20(r1) -/* 00014ACC 0002185C EC 00 02 F2 */ fmuls f0, f0, f11 -/* 00014AD0 00021860 ED AD 02 F2 */ fmuls f13, f13, f11 -/* 00014AD4 00021864 D0 01 00 28 */ stfs f0, 0x28(r1) -/* 00014AD8 00021868 ED 8C 02 F2 */ fmuls f12, f12, f11 -/* 00014ADC 0002186C D1 A1 00 2C */ stfs f13, 0x2c(r1) -/* 00014AE0 00021870 D1 81 00 30 */ stfs f12, 0x30(r1) -/* 00014AE4 00021874 D3 E1 00 34 */ stfs f31, 0x34(r1) -/* 00014AE8 00021878 41 92 4A FC */ beq cr4, .L_000195E4 -/* 00014AEC 0002187C 7F A4 EB 78 */ mr r4, r29 -/* 00014AF0 00021880 7F E3 FB 78 */ mr r3, r31 -/* 00014AF4 00021884 7F E5 FB 78 */ mr r5, r31 -/* 00014AF8 00021888 48 00 00 01 */ bl bMulMatrix__FP8bVector4PC8bMatrix4PC8bVector4 -/* 00014AFC 0002188C 7F 83 E3 78 */ mr r3, r28 -/* 00014B00 00021890 7F E4 FB 78 */ mr r4, r31 -/* 00014B04 00021894 48 01 47 E1 */ bl .text+0x147E0 -/* 00014B08 00021898 80 01 00 5C */ lwz r0, 0x5c(r1) -/* 00014B0C 0002189C 81 81 00 38 */ lwz r12, 0x38(r1) -/* 00014B10 000218A0 7C 08 03 A6 */ mtlr r0 -/* 00014B14 000218A4 BB 61 00 3C */ lmw r27, 0x3c(r1) -/* 00014B18 000218A8 E3 E1 00 50 */ psq_l f31, 0x50(r1), 0, qr0 -/* 00014B1C 000218AC 7D 80 81 20 */ mtcrf 8, r12 -/* 00014B20 000218B0 38 21 00 58 */ addi r1, r1, 0x58 -/* 00014B24 000218B4 4E 80 00 20 */ blr -.endfn EyeCubicInit__8ICEMoverPQ23ICE7Cubic3DPQ23ICE7Matrix4PQ23ICE7Vector3 - -# .text:0x14B28 | size: 0x150 -.fn LookCubicInit__8ICEMoverPQ23ICE7Cubic3DPQ23ICE7Matrix4PQ23ICE7Vector3, global -/* 00014B28 000218B8 94 21 FF A8 */ stwu r1, -0x58(r1) -/* 00014B2C 000218BC 7C 08 02 A6 */ mflr r0 -/* 00014B30 000218C0 7D 80 00 26 */ mfcr r12 -/* 00014B34 000218C4 F3 E1 00 50 */ psq_st f31, 0x50(r1), 0, qr0 -/* 00014B38 000218C8 BF 61 00 3C */ stmw r27, 0x3c(r1) -/* 00014B3C 000218CC 90 01 00 5C */ stw r0, 0x5c(r1) -/* 00014B40 000218D0 91 81 00 38 */ stw r12, 0x38(r1) -/* 00014B44 000218D4 3D 20 00 00 */ lis r9, .rodata+0xBF0@ha -/* 00014B48 000218D8 7C 7B 1B 78 */ mr r27, r3 -/* 00014B4C 000218DC C3 E9 0B F0 */ lfs f31, .rodata+0xBF0@l(r9) -/* 00014B50 000218E0 3B E1 00 08 */ addi r31, r1, 0x8 -/* 00014B54 000218E4 81 7B 00 1C */ lwz r11, 0x1c(r27) -/* 00014B58 000218E8 3D 20 00 00 */ lis r9, .rodata+0xBF4@ha -/* 00014B5C 000218EC D3 E1 00 08 */ stfs f31, 0x8(r1) -/* 00014B60 000218F0 7C BD 2B 78 */ mr r29, r5 -/* 00014B64 000218F4 D3 E1 00 0C */ stfs f31, 0xc(r1) -/* 00014B68 000218F8 7C 9C 23 78 */ mr r28, r4 -/* 00014B6C 000218FC D3 FF 00 08 */ stfs f31, 0x8(r31) -/* 00014B70 00021900 2E 1D 00 00 */ cmpwi cr4, r29, 0x0 -/* 00014B74 00021904 C0 29 0B F4 */ lfs f1, .rodata+0xBF4@l(r9) -/* 00014B78 00021908 7C DE 33 78 */ mr r30, r6 -/* 00014B7C 0002190C 38 AB 02 08 */ addi r5, r11, 0x208 -/* 00014B80 00021910 D3 E1 00 14 */ stfs f31, 0x14(r1) -/* 00014B84 00021914 D3 E1 00 18 */ stfs f31, 0x18(r1) -/* 00014B88 00021918 7F E3 FB 78 */ mr r3, r31 -/* 00014B8C 0002191C D3 E1 00 1C */ stfs f31, 0x1c(r1) -/* 00014B90 00021920 38 8B 00 60 */ addi r4, r11, 0x60 -/* 00014B94 00021924 D3 E1 00 20 */ stfs f31, 0x20(r1) -/* 00014B98 00021928 D3 E1 00 24 */ stfs f31, 0x24(r1) -/* 00014B9C 0002192C 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -/* 00014BA0 00021930 41 92 4B B4 */ beq cr4, .L_00019754 -/* 00014BA4 00021934 7F E3 FB 78 */ mr r3, r31 -/* 00014BA8 00021938 7F A4 EB 78 */ mr r4, r29 -/* 00014BAC 0002193C 7F E5 FB 78 */ mr r5, r31 -/* 00014BB0 00021940 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 -/* 00014BB4 00021944 7F E4 FB 78 */ mr r4, r31 -/* 00014BB8 00021948 7F 83 E3 78 */ mr r3, r28 -/* 00014BBC 0002194C 48 01 47 89 */ bl .text+0x14788 -/* 00014BC0 00021950 81 3B 00 1C */ lwz r9, 0x1c(r27) -/* 00014BC4 00021954 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 00014BC8 00021958 C1 49 02 08 */ lfs f10, 0x208(r9) -.L_00014BCC: -/* 00014BCC 0002195C D1 41 00 18 */ stfs f10, 0x18(r1) -/* 00014BD0 00021960 C1 29 02 0C */ lfs f9, 0x20c(r9) -/* 00014BD4 00021964 D1 21 00 1C */ stfs f9, 0x1c(r1) -/* 00014BD8 00021968 C1 69 02 10 */ lfs f11, 0x210(r9) -.L_00014BDC: -/* 00014BDC 0002196C D1 61 00 20 */ stfs f11, 0x20(r1) -/* 00014BE0 00021970 41 82 4C 08 */ beq .L_000197E8 -/* 00014BE4 00021974 C0 1E 00 08 */ lfs f0, 0x8(r30) -/* 00014BE8 00021978 C1 9E 00 04 */ lfs f12, 0x4(r30) -/* 00014BEC 0002197C C1 BE 00 00 */ lfs f13, 0x0(r30) -/* 00014BF0 00021980 EC 0B 00 28 */ fsubs f0, f11, f0 -/* 00014BF4 00021984 ED 89 60 28 */ fsubs f12, f9, f12 -/* 00014BF8 00021988 D0 01 00 20 */ stfs f0, 0x20(r1) -/* 00014BFC 0002198C ED AA 68 28 */ fsubs f13, f10, f13 -/* 00014C00 00021990 D1 81 00 1C */ stfs f12, 0x1c(r1) -/* 00014C04 00021994 D1 A1 00 18 */ stfs f13, 0x18(r1) -/* 00014C08 00021998 C1 7C 00 24 */ lfs f11, 0x24(r28) -/* 00014C0C 0002199C 3B E1 00 28 */ addi r31, r1, 0x28 -/* 00014C10 000219A0 C0 01 00 18 */ lfs f0, 0x18(r1) -/* 00014C14 000219A4 C1 A1 00 1C */ lfs f13, 0x1c(r1) -/* 00014C18 000219A8 C1 81 00 20 */ lfs f12, 0x20(r1) -/* 00014C1C 000219AC EC 00 02 F2 */ fmuls f0, f0, f11 -/* 00014C20 000219B0 ED AD 02 F2 */ fmuls f13, f13, f11 -/* 00014C24 000219B4 D0 01 00 28 */ stfs f0, 0x28(r1) -/* 00014C28 000219B8 ED 8C 02 F2 */ fmuls f12, f12, f11 -/* 00014C2C 000219BC D1 A1 00 2C */ stfs f13, 0x2c(r1) -/* 00014C30 000219C0 D1 81 00 30 */ stfs f12, 0x30(r1) -/* 00014C34 000219C4 D3 E1 00 34 */ stfs f31, 0x34(r1) -/* 00014C38 000219C8 41 92 4C 4C */ beq cr4, .L_00019884 -/* 00014C3C 000219CC 7F A4 EB 78 */ mr r4, r29 -/* 00014C40 000219D0 7F E3 FB 78 */ mr r3, r31 -/* 00014C44 000219D4 7F E5 FB 78 */ mr r5, r31 -/* 00014C48 000219D8 48 00 00 01 */ bl bMulMatrix__FP8bVector4PC8bMatrix4PC8bVector4 -/* 00014C4C 000219DC 7F 83 E3 78 */ mr r3, r28 -.L_00014C50: -/* 00014C50 000219E0 7F E4 FB 78 */ mr r4, r31 -.L_00014C54: -/* 00014C54 000219E4 48 01 47 E1 */ bl .text+0x147E0 -/* 00014C58 000219E8 80 01 00 5C */ lwz r0, 0x5c(r1) -/* 00014C5C 000219EC 81 81 00 38 */ lwz r12, 0x38(r1) -/* 00014C60 000219F0 7C 08 03 A6 */ mtlr r0 -/* 00014C64 000219F4 BB 61 00 3C */ lmw r27, 0x3c(r1) -.L_00014C68: -/* 00014C68 000219F8 E3 E1 00 50 */ psq_l f31, 0x50(r1), 0, qr0 -/* 00014C6C 000219FC 7D 80 81 20 */ mtcrf 8, r12 -/* 00014C70 00021A00 38 21 00 58 */ addi r1, r1, 0x58 -/* 00014C74 00021A04 4E 80 00 20 */ blr -.endfn LookCubicInit__8ICEMoverPQ23ICE7Cubic3DPQ23ICE7Matrix4PQ23ICE7Vector3 - -# .text:0x14C78 | size: 0x3C -.fn DutchCubicInit__8ICEMoverPQ23ICE7Cubic1D, global -/* 00014C78 00021A08 3D 20 00 00 */ lis r9, .rodata+0xBF8@ha -/* 00014C7C 00021A0C C0 04 00 08 */ lfs f0, 0x8(r4) -/* 00014C80 00021A10 C1 A9 0B F8 */ lfs f13, .rodata+0xBF8@l(r9) -/* 00014C84 00021A14 D1 A4 00 00 */ stfs f13, 0x0(r4) -/* 00014C88 00021A18 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 00014C8C 00021A1C 41 82 4C 98 */ beq .L_00019924 -/* 00014C90 00021A20 38 00 00 02 */ li r0, 0x2 -/* 00014C94 00021A24 B0 04 00 28 */ sth r0, 0x28(r4) -/* 00014C98 00021A28 C0 04 00 0C */ lfs f0, 0xc(r4) -/* 00014C9C 00021A2C D1 A4 00 04 */ stfs f13, 0x4(r4) -/* 00014CA0 00021A30 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 00014CA4 00021A34 4D 82 00 20 */ beqlr -/* 00014CA8 00021A38 38 00 00 02 */ li r0, 0x2 -/* 00014CAC 00021A3C B0 04 00 28 */ sth r0, 0x28(r4) -.L_00014CB0: -/* 00014CB0 00021A40 4E 80 00 20 */ blr -.endfn DutchCubicInit__8ICEMoverPQ23ICE7Cubic1D - -# .text:0x14CB4 | size: 0x9C -.fn FovCubicInit__8ICEMoverPQ23ICE7Cubic1D, global -/* 00014CB4 00021A44 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00014CB8 00021A48 81 43 00 1C */ lwz r10, 0x1c(r3) -/* 00014CBC 00021A4C 3C A0 43 30 */ lis r5, 0x4330 -/* 00014CC0 00021A50 7D 67 5B 78 */ mr r7, r11 -/* 00014CC4 00021A54 A0 0A 02 6C */ lhz r0, 0x26c(r10) -/* 00014CC8 00021A58 3D 00 00 00 */ lis r8, .rodata+0xC00@ha -/* 00014CCC 00021A5C A1 2A 00 C4 */ lhz r9, 0xc4(r10) -/* 00014CD0 00021A60 3C C0 00 00 */ lis r6, .rodata+0xC08@ha -/* 00014CD4 00021A64 6C 00 80 00 */ xoris r0, r0, 0x8000 -/* 00014CD8 00021A68 C9 88 0C 00 */ lfd f12, .rodata+0xC00@l(r8) -/* 00014CDC 00021A6C 90 01 00 0C */ stw r0, 0xc(r1) -/* 00014CE0 00021A70 6D 29 80 00 */ xoris r9, r9, 0x8000 -/* 00014CE4 00021A74 C1 64 00 24 */ lfs f11, 0x24(r4) -/* 00014CE8 00021A78 90 A1 00 08 */ stw r5, 0x8(r1) -/* 00014CEC 00021A7C C1 26 0C 08 */ lfs f9, .rodata+0xC08@l(r6) -/* 00014CF0 00021A80 C9 A1 00 08 */ lfd f13, 0x8(r1) -/* 00014CF4 00021A84 91 21 00 0C */ stw r9, 0xc(r1) -/* 00014CF8 00021A88 FD AD 60 28 */ fsub f13, f13, f12 -/* 00014CFC 00021A8C C1 44 00 08 */ lfs f10, 0x8(r4) -/* 00014D00 00021A90 90 A1 00 08 */ stw r5, 0x8(r1) -/* 00014D04 00021A94 FD A0 68 18 */ frsp f13, f13 -/* 00014D08 00021A98 ED 6D 02 F2 */ fmuls f11, f13, f11 -/* 00014D0C 00021A9C C8 01 00 08 */ lfd f0, 0x8(r1) -/* 00014D10 00021AA0 FC 00 60 28 */ fsub f0, f0, f12 -/* 00014D14 00021AA4 FC 00 00 18 */ frsp f0, f0 -/* 00014D18 00021AA8 ED AD 02 7A */ fmadds f13, f13, f9, f0 -/* 00014D1C 00021AAC FC 0D 50 00 */ fcmpu cr0, f13, f10 -/* 00014D20 00021AB0 D1 A4 00 00 */ stfs f13, 0x0(r4) -/* 00014D24 00021AB4 41 82 4D 30 */ beq .L_00019A54 -/* 00014D28 00021AB8 38 00 00 02 */ li r0, 0x2 -/* 00014D2C 00021ABC B0 04 00 28 */ sth r0, 0x28(r4) -/* 00014D30 00021AC0 C0 04 00 0C */ lfs f0, 0xc(r4) -/* 00014D34 00021AC4 D1 64 00 04 */ stfs f11, 0x4(r4) -/* 00014D38 00021AC8 FC 0B 00 00 */ fcmpu cr0, f11, f0 -/* 00014D3C 00021ACC 41 82 4D 48 */ beq .L_00019A84 -.L_00014D40: -/* 00014D40 00021AD0 38 00 00 02 */ li r0, 0x2 -/* 00014D44 00021AD4 B0 04 00 28 */ sth r0, 0x28(r4) -/* 00014D48 00021AD8 38 21 00 10 */ addi r1, r1, 0x10 -.L_00014D4C: -/* 00014D4C 00021ADC 4E 80 00 20 */ blr -.endfn FovCubicInit__8ICEMoverPQ23ICE7Cubic1D - -# .text:0x14D50 | size: 0xED8 -.fn SetDesired__8ICEMoverbT1, global -/* 00014D50 00021AE0 94 21 FC 28 */ stwu r1, -0x3d8(r1) -/* 00014D54 00021AE4 7C 08 02 A6 */ mflr r0 -/* 00014D58 00021AE8 7D 80 00 26 */ mfcr r12 -/* 00014D5C 00021AEC F3 E1 03 D0 */ psq_st f31, 0x3d0(r1), 0, qr0 -/* 00014D60 00021AF0 BD C1 03 88 */ stmw r14, 0x388(r1) -/* 00014D64 00021AF4 90 01 03 DC */ stw r0, 0x3dc(r1) -/* 00014D68 00021AF8 91 81 03 84 */ stw r12, 0x384(r1) -/* 00014D6C 00021AFC 7C 7F 1B 78 */ mr r31, r3 -/* 00014D70 00021B00 38 00 00 00 */ li r0, 0x0 -/* 00014D74 00021B04 81 3F 00 C4 */ lwz r9, 0xc4(r31) -/* 00014D78 00021B08 7C BE 2B 78 */ mr r30, r5 -/* 00014D7C 00021B0C 3C 60 00 00 */ lis r3, TheICEManager@ha -/* 00014D80 00021B10 90 01 03 38 */ stw r0, 0x338(r1) -/* 00014D84 00021B14 91 21 03 50 */ stw r9, 0x350(r1) -/* 00014D88 00021B18 38 63 00 00 */ addi r3, r3, TheICEManager@l -/* 00014D8C 00021B1C 38 81 03 38 */ addi r4, r1, 0x338 -/* 00014D90 00021B20 38 BF 00 B4 */ addi r5, r31, 0xb4 -/* 00014D94 00021B24 38 DF 00 B8 */ addi r6, r31, 0xb8 -/* 00014D98 00021B28 48 01 89 4D */ bl .text+0x1894C -/* 00014D9C 00021B2C 80 1F 00 C4 */ lwz r0, 0xc4(r31) -/* 00014DA0 00021B30 7C 7B 1B 78 */ mr r27, r3 -/* 00014DA4 00021B34 2C 1E 00 00 */ cmpwi r30, 0x0 -.L_00014DA8: -/* 00014DA8 00021B38 7C 1C DA 78 */ xor r28, r0, r27 -/* 00014DAC 00021B3C 21 3C 00 00 */ subfic r9, r28, 0x0 -/* 00014DB0 00021B40 7F 89 E1 14 */ adde r28, r9, r28 -/* 00014DB4 00021B44 40 82 4D C0 */ bne .L_00019B74 -/* 00014DB8 00021B48 2C 1C 00 00 */ cmpwi r28, 0x0 -/* 00014DBC 00021B4C 40 82 5C 08 */ bne .L_0001A9C4 -/* 00014DC0 00021B50 81 21 03 50 */ lwz r9, 0x350(r1) -/* 00014DC4 00021B54 2C 1C 00 00 */ cmpwi r28, 0x0 -/* 00014DC8 00021B58 2F 9B 00 00 */ cmpwi cr7, r27, 0x0 -/* 00014DCC 00021B5C 38 60 00 00 */ li r3, 0x0 -/* 00014DD0 00021B60 7F A0 00 26 */ mfcr r29 -/* 00014DD4 00021B64 7F C0 00 26 */ mfcr r30 -/* 00014DD8 00021B68 57 DE E0 06 */ slwi r30, r30, 28 -/* 00014DDC 00021B6C 2E 09 00 00 */ cmpwi cr4, r9, 0x0 -/* 00014DE0 00021B70 40 82 4E 08 */ bne .L_00019BE8 -/* 00014DE4 00021B74 4C 1C 00 00 */ mcrf cr0, cr7 -/* 00014DE8 00021B78 41 82 4E 08 */ beq .L_00019BF0 -/* 00014DEC 00021B7C 41 92 4E 08 */ beq cr4, .L_00019BF4 -/* 00014DF0 00021B80 7D 23 4B 78 */ mr r3, r9 -/* 00014DF4 00021B84 38 80 00 01 */ li r4, 0x1 -/* 00014DF8 00021B88 7F 65 DB 78 */ mr r5, r27 -.L_00014DFC: -/* 00014DFC 00021B8C 38 C0 00 00 */ li r6, 0x0 -/* 00014E00 00021B90 48 01 36 ED */ bl .text+0x136EC -/* 00014E04 00021B94 68 63 00 01 */ xori r3, r3, 0x1 -/* 00014E08 00021B98 38 00 00 00 */ li r0, 0x0 -/* 00014E0C 00021B9C 7F C8 01 20 */ mtcrf 128, r30 -/* 00014E10 00021BA0 90 01 03 54 */ stw r0, 0x354(r1) -/* 00014E14 00021BA4 41 82 4E 30 */ beq .L_00019C44 -/* 00014E18 00021BA8 40 92 4E 30 */ bne cr4, .L_00019C48 -/* 00014E1C 00021BAC 88 1B 00 01 */ lbz r0, 0x1(r27) -/* 00014E20 00021BB0 70 09 00 01 */ andi. r9, r0, 0x1 -/* 00014E24 00021BB4 41 82 4E 30 */ beq .L_00019C54 -/* 00014E28 00021BB8 39 60 00 01 */ li r11, 0x1 -/* 00014E2C 00021BBC 91 61 03 54 */ stw r11, 0x354(r1) -/* 00014E30 00021BC0 38 00 00 00 */ li r0, 0x0 -/* 00014E34 00021BC4 90 01 03 58 */ stw r0, 0x358(r1) -/* 00014E38 00021BC8 41 92 4E 5C */ beq cr4, .L_00019C94 -/* 00014E3C 00021BCC 7F C8 01 20 */ mtcrf 128, r30 -/* 00014E40 00021BD0 40 82 4E 5C */ bne .L_00019C9C -/* 00014E44 00021BD4 81 21 03 50 */ lwz r9, 0x350(r1) -/* 00014E48 00021BD8 88 09 00 01 */ lbz r0, 0x1(r9) -/* 00014E4C 00021BDC 70 0B 00 01 */ andi. r11, r0, 0x1 -/* 00014E50 00021BE0 41 82 4E 5C */ beq .L_00019CAC -/* 00014E54 00021BE4 38 00 00 01 */ li r0, 0x1 -/* 00014E58 00021BE8 90 01 03 58 */ stw r0, 0x358(r1) -/* 00014E5C 00021BEC 2D 83 00 00 */ cmpwi cr3, r3, 0x0 -/* 00014E60 00021BF0 93 7F 00 C4 */ stw r27, 0xc4(r31) -/* 00014E64 00021BF4 40 8E 4E 80 */ bne cr3, .L_00019CE4 -/* 00014E68 00021BF8 81 21 03 54 */ lwz r9, 0x354(r1) -/* 00014E6C 00021BFC 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00014E70 00021C00 40 82 4E 80 */ bne .L_00019CF0 -/* 00014E74 00021C04 81 61 03 58 */ lwz r11, 0x358(r1) -/* 00014E78 00021C08 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00014E7C 00021C0C 41 82 4E B8 */ beq .L_00019D34 -/* 00014E80 00021C10 48 00 00 01 */ bl FlushAccumulationBuffer__Fv -/* 00014E84 00021C14 81 3F 00 80 */ lwz r9, 0x80(r31) -/* 00014E88 00021C18 C0 09 00 00 */ lfs f0, 0x0(r9) -/* 00014E8C 00021C1C D0 1F 01 0C */ stfs f0, 0x10c(r31) -/* 00014E90 00021C20 C1 A9 00 04 */ lfs f13, 0x4(r9) -/* 00014E94 00021C24 D1 BF 01 10 */ stfs f13, 0x110(r31) -/* 00014E98 00021C28 C0 09 00 08 */ lfs f0, 0x8(r9) -/* 00014E9C 00021C2C D0 1F 01 14 */ stfs f0, 0x114(r31) -/* 00014EA0 00021C30 C1 A9 00 10 */ lfs f13, 0x10(r9) -/* 00014EA4 00021C34 D1 BF 01 1C */ stfs f13, 0x11c(r31) -/* 00014EA8 00021C38 C0 09 00 14 */ lfs f0, 0x14(r9) -/* 00014EAC 00021C3C D0 1F 01 20 */ stfs f0, 0x120(r31) -/* 00014EB0 00021C40 C1 A9 00 18 */ lfs f13, 0x18(r9) -/* 00014EB4 00021C44 D1 BF 01 24 */ stfs f13, 0x124(r31) -/* 00014EB8 00021C48 7F A8 01 20 */ mtcrf 128, r29 -/* 00014EBC 00021C4C 40 82 4E EC */ bne .L_00019DA8 -/* 00014EC0 00021C50 C0 3F 00 B4 */ lfs f1, 0xb4(r31) -/* 00014EC4 00021C54 3D 20 00 00 */ lis r9, .rodata+0xC0C@ha -/* 00014EC8 00021C58 C0 1F 00 B8 */ lfs f0, 0xb8(r31) -.L_00014ECC: -/* 00014ECC 00021C5C 3C 60 00 00 */ lis r3, TheICEManager@ha -.L_00014ED0: -/* 00014ED0 00021C60 C1 A9 0C 0C */ lfs f13, .rodata+0xC0C@l(r9) -/* 00014ED4 00021C64 38 63 00 00 */ addi r3, r3, TheICEManager@l -/* 00014ED8 00021C68 EC 21 00 2A */ fadds f1, f1, f0 -.L_00014EDC: -/* 00014EDC 00021C6C 80 81 03 38 */ lwz r4, 0x338(r1) -/* 00014EE0 00021C70 EC 21 03 72 */ fmuls f1, f1, f13 -/* 00014EE4 00021C74 48 01 84 A5 */ bl .text+0x184A4 -/* 00014EE8 00021C78 48 01 A1 6D */ bl .text+0x1A16C -/* 00014EEC 00021C7C 7F C8 01 20 */ mtcrf 128, r30 -/* 00014EF0 00021C80 41 82 5C 08 */ beq clear__Q24_STLt10_List_base2ZP11IAttachableZQ33UTL3Stdt9Allocator2ZP11IAttachableZ21_type_IAttachableList -/* 00014EF4 00021C84 88 1B 00 04 */ lbz r0, 0x4(r27) -/* 00014EF8 00021C88 7F A8 01 20 */ mtcrf 128, r29 -/* 00014EFC 00021C8C 90 1F 00 BC */ stw r0, 0xbc(r31) -/* 00014F00 00021C90 89 3B 00 05 */ lbz r9, 0x5(r27) -/* 00014F04 00021C94 91 3F 00 C0 */ stw r9, 0xc0(r31) -/* 00014F08 00021C98 40 82 59 00 */ bne .L_0001A808 -/* 00014F0C 00021C9C 89 5B 00 01 */ lbz r10, 0x1(r27) -/* 00014F10 00021CA0 71 40 00 01 */ andi. r0, r10, 0x1 -/* 00014F14 00021CA4 41 82 59 00 */ beq .L_0001A814 -/* 00014F18 00021CA8 3D 20 00 00 */ lis r9, .rodata+0xC10@ha -/* 00014F1C 00021CAC 38 00 00 01 */ li r0, 0x1 -/* 00014F20 00021CB0 C0 09 0C 10 */ lfs f0, .rodata+0xC10@l(r9) -/* 00014F24 00021CB4 55 4A FF FE */ extrwi r10, r10, 1, 30 -/* 00014F28 00021CB8 3D 20 00 00 */ lis r9, TheICEManager+0x74@ha -/* 00014F2C 00021CBC 3D 60 00 00 */ lis r11, bMirrorICEData@ha -/* 00014F30 00021CC0 90 09 00 74 */ stw r0, TheICEManager+0x74@l(r9) -/* 00014F34 00021CC4 3B DF 00 CC */ addi r30, r31, 0xcc -/* 00014F38 00021CC8 39 20 00 00 */ li r9, 0x0 -/* 00014F3C 00021CCC D0 01 00 C8 */ stfs f0, 0xc8(r1) -.L_00014F40: -/* 00014F40 00021CD0 D0 01 00 CC */ stfs f0, 0xcc(r1) -/* 00014F44 00021CD4 39 01 00 08 */ addi r8, r1, 0x8 -/* 00014F48 00021CD8 D0 01 00 D0 */ stfs f0, 0xd0(r1) -/* 00014F4C 00021CDC 7D 04 43 78 */ mr r4, r8 -/* 00014F50 00021CE0 D0 01 00 D4 */ stfs f0, 0xd4(r1) -/* 00014F54 00021CE4 3B A1 00 88 */ addi r29, r1, 0x88 -.L_00014F58: -/* 00014F58 00021CE8 D0 01 00 E8 */ stfs f0, 0xe8(r1) -/* 00014F5C 00021CEC 3B 41 02 38 */ addi r26, r1, 0x238 -.L_00014F60: -/* 00014F60 00021CF0 D0 01 00 EC */ stfs f0, 0xec(r1) -/* 00014F64 00021CF4 38 61 00 48 */ addi r3, r1, 0x48 -/* 00014F68 00021CF8 D0 01 00 D8 */ stfs f0, 0xd8(r1) -/* 00014F6C 00021CFC D0 01 00 DC */ stfs f0, 0xdc(r1) -.L_00014F70: -/* 00014F70 00021D00 D0 01 00 E0 */ stfs f0, 0xe0(r1) -/* 00014F74 00021D04 D0 01 00 E4 */ stfs f0, 0xe4(r1) -.L_00014F78: -/* 00014F78 00021D08 D0 01 00 F4 */ stfs f0, 0xf4(r1) -/* 00014F7C 00021D0C D0 01 00 F8 */ stfs f0, 0xf8(r1) -.L_00014F80: -/* 00014F80 00021D10 D0 01 00 FC */ stfs f0, 0xfc(r1) -/* 00014F84 00021D14 D0 01 01 00 */ stfs f0, 0x100(r1) -/* 00014F88 00021D18 D0 01 01 14 */ stfs f0, 0x114(r1) -/* 00014F8C 00021D1C D0 01 01 18 */ stfs f0, 0x118(r1) -/* 00014F90 00021D20 D0 01 01 04 */ stfs f0, 0x104(r1) -/* 00014F94 00021D24 D0 01 01 08 */ stfs f0, 0x108(r1) -/* 00014F98 00021D28 D0 01 01 0C */ stfs f0, 0x10c(r1) -/* 00014F9C 00021D2C D0 01 01 10 */ stfs f0, 0x110(r1) -/* 00014FA0 00021D30 D0 01 01 20 */ stfs f0, 0x120(r1) -/* 00014FA4 00021D34 D0 01 01 24 */ stfs f0, 0x124(r1) -/* 00014FA8 00021D38 D0 01 01 28 */ stfs f0, 0x128(r1) -/* 00014FAC 00021D3C D0 01 01 2C */ stfs f0, 0x12c(r1) -/* 00014FB0 00021D40 D0 01 01 40 */ stfs f0, 0x140(r1) -/* 00014FB4 00021D44 D0 01 01 44 */ stfs f0, 0x144(r1) -/* 00014FB8 00021D48 91 4B 00 00 */ stw r10, bMirrorICEData@l(r11) -/* 00014FBC 00021D4C 91 21 03 5C */ stw r9, 0x35c(r1) -/* 00014FC0 00021D50 3D 40 00 00 */ lis r10, .rodata+0xC14@ha -/* 00014FC4 00021D54 B3 81 00 F0 */ sth r28, 0xf0(r1) -/* 00014FC8 00021D58 B3 81 00 F2 */ sth r28, 0xf2(r1) -/* 00014FCC 00021D5C 93 C1 03 68 */ stw r30, 0x368(r1) -/* 00014FD0 00021D60 B3 81 01 1C */ sth r28, 0x11c(r1) -/* 00014FD4 00021D64 B3 81 01 1E */ sth r28, 0x11e(r1) -/* 00014FD8 00021D68 B3 81 01 48 */ sth r28, 0x148(r1) -/* 00014FDC 00021D6C D0 01 01 30 */ stfs f0, 0x130(r1) -/* 00014FE0 00021D70 D0 01 01 34 */ stfs f0, 0x134(r1) -/* 00014FE4 00021D74 D0 01 01 38 */ stfs f0, 0x138(r1) -/* 00014FE8 00021D78 D0 01 01 3C */ stfs f0, 0x13c(r1) -/* 00014FEC 00021D7C D0 01 01 50 */ stfs f0, 0x150(r1) -/* 00014FF0 00021D80 D0 01 01 54 */ stfs f0, 0x154(r1) -.L_00014FF4: -/* 00014FF4 00021D84 D0 01 01 58 */ stfs f0, 0x158(r1) -/* 00014FF8 00021D88 D0 01 01 5C */ stfs f0, 0x15c(r1) -/* 00014FFC 00021D8C D0 01 01 70 */ stfs f0, 0x170(r1) -/* 00015000 00021D90 D0 01 01 74 */ stfs f0, 0x174(r1) -/* 00015004 00021D94 D0 01 01 60 */ stfs f0, 0x160(r1) -/* 00015008 00021D98 D0 01 01 64 */ stfs f0, 0x164(r1) -.L_0001500C: -/* 0001500C 00021D9C D0 01 01 68 */ stfs f0, 0x168(r1) -/* 00015010 00021DA0 D0 01 01 6C */ stfs f0, 0x16c(r1) -/* 00015014 00021DA4 D0 01 01 7C */ stfs f0, 0x17c(r1) -/* 00015018 00021DA8 D0 01 01 80 */ stfs f0, 0x180(r1) -/* 0001501C 00021DAC D0 01 01 84 */ stfs f0, 0x184(r1) -/* 00015020 00021DB0 D0 01 01 88 */ stfs f0, 0x188(r1) -/* 00015024 00021DB4 D0 01 01 9C */ stfs f0, 0x19c(r1) -/* 00015028 00021DB8 D0 01 01 A0 */ stfs f0, 0x1a0(r1) -/* 0001502C 00021DBC D0 01 01 8C */ stfs f0, 0x18c(r1) -/* 00015030 00021DC0 D0 01 01 90 */ stfs f0, 0x190(r1) -/* 00015034 00021DC4 D0 01 01 94 */ stfs f0, 0x194(r1) -/* 00015038 00021DC8 D0 01 01 98 */ stfs f0, 0x198(r1) -/* 0001503C 00021DCC D0 01 01 A8 */ stfs f0, 0x1a8(r1) -/* 00015040 00021DD0 D0 01 01 AC */ stfs f0, 0x1ac(r1) -/* 00015044 00021DD4 D0 01 01 B0 */ stfs f0, 0x1b0(r1) -/* 00015048 00021DD8 D0 01 01 B4 */ stfs f0, 0x1b4(r1) -/* 0001504C 00021DDC B3 81 01 4A */ sth r28, 0x14a(r1) -/* 00015050 00021DE0 B3 81 01 78 */ sth r28, 0x178(r1) -/* 00015054 00021DE4 B3 81 01 7A */ sth r28, 0x17a(r1) -/* 00015058 00021DE8 B3 81 01 A4 */ sth r28, 0x1a4(r1) -/* 0001505C 00021DEC B3 81 01 A6 */ sth r28, 0x1a6(r1) -/* 00015060 00021DF0 D0 01 01 C8 */ stfs f0, 0x1c8(r1) -/* 00015064 00021DF4 D0 01 02 24 */ stfs f0, 0x224(r1) -/* 00015068 00021DF8 B3 81 02 32 */ sth r28, 0x232(r1) -/* 0001506C 00021DFC 81 3F 00 80 */ lwz r9, 0x80(r31) -/* 00015070 00021E00 D0 01 01 CC */ stfs f0, 0x1cc(r1) -/* 00015074 00021E04 D0 01 01 B8 */ stfs f0, 0x1b8(r1) -/* 00015078 00021E08 39 69 00 10 */ addi r11, r9, 0x10 -/* 0001507C 00021E0C D0 01 01 BC */ stfs f0, 0x1bc(r1) -/* 00015080 00021E10 D0 01 01 C0 */ stfs f0, 0x1c0(r1) -/* 00015084 00021E14 D0 01 01 C4 */ stfs f0, 0x1c4(r1) -/* 00015088 00021E18 D0 01 01 D8 */ stfs f0, 0x1d8(r1) -/* 0001508C 00021E1C D0 01 01 DC */ stfs f0, 0x1dc(r1) -/* 00015090 00021E20 D0 01 01 E0 */ stfs f0, 0x1e0(r1) -/* 00015094 00021E24 D0 01 01 E4 */ stfs f0, 0x1e4(r1) -/* 00015098 00021E28 D0 01 01 F8 */ stfs f0, 0x1f8(r1) -/* 0001509C 00021E2C D0 01 01 FC */ stfs f0, 0x1fc(r1) -/* 000150A0 00021E30 D0 01 01 E8 */ stfs f0, 0x1e8(r1) -/* 000150A4 00021E34 D0 01 01 EC */ stfs f0, 0x1ec(r1) -/* 000150A8 00021E38 D0 01 01 F0 */ stfs f0, 0x1f0(r1) -/* 000150AC 00021E3C D0 01 01 F4 */ stfs f0, 0x1f4(r1) -/* 000150B0 00021E40 D0 01 02 08 */ stfs f0, 0x208(r1) -/* 000150B4 00021E44 D0 01 02 0C */ stfs f0, 0x20c(r1) -/* 000150B8 00021E48 D0 01 02 10 */ stfs f0, 0x210(r1) -/* 000150BC 00021E4C D0 01 02 14 */ stfs f0, 0x214(r1) -/* 000150C0 00021E50 D0 01 02 28 */ stfs f0, 0x228(r1) -.L_000150C4: -/* 000150C4 00021E54 D0 01 02 2C */ stfs f0, 0x22c(r1) -.L_000150C8: -/* 000150C8 00021E58 D0 01 02 18 */ stfs f0, 0x218(r1) -/* 000150CC 00021E5C D0 01 02 1C */ stfs f0, 0x21c(r1) -/* 000150D0 00021E60 D0 01 02 20 */ stfs f0, 0x220(r1) -/* 000150D4 00021E64 B3 81 01 D0 */ sth r28, 0x1d0(r1) -/* 000150D8 00021E68 B3 81 01 D2 */ sth r28, 0x1d2(r1) -/* 000150DC 00021E6C B3 81 02 00 */ sth r28, 0x200(r1) -/* 000150E0 00021E70 B3 81 02 02 */ sth r28, 0x202(r1) -/* 000150E4 00021E74 B3 81 02 30 */ sth r28, 0x230(r1) -/* 000150E8 00021E78 C0 09 00 10 */ lfs f0, 0x10(r9) -/* 000150EC 00021E7C C1 A9 00 14 */ lfs f13, 0x14(r9) -/* 000150F0 00021E80 C1 89 00 18 */ lfs f12, 0x18(r9) -/* 000150F4 00021E84 C1 69 00 1C */ lfs f11, 0x1c(r9) -/* 000150F8 00021E88 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 000150FC 00021E8C D1 A1 00 0C */ stfs f13, 0xc(r1) -/* 00015100 00021E90 D1 88 00 08 */ stfs f12, 0x8(r8) -/* 00015104 00021E94 D1 61 00 14 */ stfs f11, 0x14(r1) -/* 00015108 00021E98 C1 4A 0C 14 */ lfs f10, .rodata+0xC14@l(r10) -/* 0001510C 00021E9C C1 6B 00 1C */ lfs f11, 0x1c(r11) -/* 00015110 00021EA0 C0 0B 00 10 */ lfs f0, 0x10(r11) -/* 00015114 00021EA4 C1 AB 00 14 */ lfs f13, 0x14(r11) -/* 00015118 00021EA8 C1 8B 00 18 */ lfs f12, 0x18(r11) -/* 0001511C 00021EAC D0 01 00 18 */ stfs f0, 0x18(r1) -/* 00015120 00021EB0 D1 A1 00 1C */ stfs f13, 0x1c(r1) -/* 00015124 00021EB4 D1 81 00 20 */ stfs f12, 0x20(r1) -/* 00015128 00021EB8 D1 61 00 24 */ stfs f11, 0x24(r1) -/* 0001512C 00021EBC C0 09 00 30 */ lfs f0, 0x30(r9) -/* 00015130 00021EC0 C1 A9 00 34 */ lfs f13, 0x34(r9) -/* 00015134 00021EC4 C1 89 00 38 */ lfs f12, 0x38(r9) -/* 00015138 00021EC8 C1 69 00 3C */ lfs f11, 0x3c(r9) -/* 0001513C 00021ECC D0 01 00 28 */ stfs f0, 0x28(r1) -/* 00015140 00021ED0 D1 A1 00 2C */ stfs f13, 0x2c(r1) -/* 00015144 00021ED4 D1 81 00 30 */ stfs f12, 0x30(r1) -/* 00015148 00021ED8 D1 61 00 34 */ stfs f11, 0x34(r1) -/* 0001514C 00021EDC C1 89 00 08 */ lfs f12, 0x8(r9) -/* 00015150 00021EE0 C0 09 00 00 */ lfs f0, 0x0(r9) -/* 00015154 00021EE4 C1 A9 00 04 */ lfs f13, 0x4(r9) -.L_00015158: -/* 00015158 00021EE8 D0 01 00 38 */ stfs f0, 0x38(r1) -/* 0001515C 00021EEC D1 A1 00 3C */ stfs f13, 0x3c(r1) -.L_00015160: -/* 00015160 00021EF0 D1 81 00 40 */ stfs f12, 0x40(r1) -/* 00015164 00021EF4 D1 41 00 44 */ stfs f10, 0x44(r1) -/* 00015168 00021EF8 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 -/* 0001516C 00021EFC 7F C4 F3 78 */ mr r4, r30 -/* 00015170 00021F00 7F A3 EB 78 */ mr r3, r29 -.L_00015174: -/* 00015174 00021F04 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 -/* 00015178 00021F08 7F 43 D3 78 */ mr r3, r26 -/* 0001517C 00021F0C 48 00 00 01 */ bl PSMTX44Identity -/* 00015180 00021F10 80 1F 00 BC */ lwz r0, 0xbc(r31) -.L_00015184: -/* 00015184 00021F14 2C 00 00 03 */ cmpwi r0, 0x3 -/* 00015188 00021F18 41 82 51 98 */ beq .L_0001A320 -/* 0001518C 00021F1C 80 1F 00 C0 */ lwz r0, 0xc0(r31) -/* 00015190 00021F20 2C 00 00 03 */ cmpwi r0, 0x3 -/* 00015194 00021F24 40 82 51 CC */ bne .L_0001A360 -/* 00015198 00021F28 48 01 9F D9 */ bl .text+0x19FD8 -/* 0001519C 00021F2C 7C 6B 1B 79 */ mr. r11, r3 -/* 000151A0 00021F30 41 82 51 CC */ beq .L_0001A36C -/* 000151A4 00021F34 81 2B 00 00 */ lwz r9, 0x0(r11) -/* 000151A8 00021F38 93 41 03 5C */ stw r26, 0x35c(r1) -/* 000151AC 00021F3C A8 69 00 68 */ lha r3, 0x68(r9) -/* 000151B0 00021F40 80 09 00 6C */ lwz r0, 0x6c(r9) -/* 000151B4 00021F44 7C 6B 1A 14 */ add r3, r11, r3 -/* 000151B8 00021F48 7C 08 03 A6 */ mtlr r0 -/* 000151BC 00021F4C 4E 80 00 21 */ blrl -/* 000151C0 00021F50 7C 64 1B 78 */ mr r4, r3 -/* 000151C4 00021F54 80 61 03 5C */ lwz r3, 0x35c(r1) -/* 000151C8 00021F58 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 -/* 000151CC 00021F5C 38 01 01 D8 */ addi r0, r1, 0x1d8 -/* 000151D0 00021F60 3D 20 00 00 */ lis r9, .rodata+0xC10@ha -/* 000151D4 00021F64 90 01 03 60 */ stw r0, 0x360(r1) -/* 000151D8 00021F68 39 61 02 78 */ addi r11, r1, 0x278 -/* 000151DC 00021F6C 38 01 02 08 */ addi r0, r1, 0x208 -/* 000151E0 00021F70 C0 09 0C 10 */ lfs f0, .rodata+0xC10@l(r9) -/* 000151E4 00021F74 90 01 03 64 */ stw r0, 0x364(r1) -/* 000151E8 00021F78 39 20 00 01 */ li r9, 0x1 -/* 000151EC 00021F7C 3B 21 02 98 */ addi r25, r1, 0x298 -/* 000151F0 00021F80 3B A1 02 B8 */ addi r29, r1, 0x2b8 -/* 000151F4 00021F84 3B 01 02 D8 */ addi r24, r1, 0x2d8 -/* 000151F8 00021F88 3A C1 02 88 */ addi r22, r1, 0x288 -/* 000151FC 00021F8C 3A 41 02 A8 */ addi r18, r1, 0x2a8 -/* 00015200 00021F90 39 C1 03 40 */ addi r14, r1, 0x340 -/* 00015204 00021F94 39 E1 03 48 */ addi r15, r1, 0x348 -/* 00015208 00021F98 3A E1 02 C8 */ addi r23, r1, 0x2c8 -/* 0001520C 00021F9C 3A 61 02 E8 */ addi r19, r1, 0x2e8 -/* 00015210 00021FA0 3B 81 00 C8 */ addi r28, r1, 0xc8 -/* 00015214 00021FA4 3B 41 01 50 */ addi r26, r1, 0x150 -/* 00015218 00021FA8 3A A1 02 F8 */ addi r21, r1, 0x2f8 -/* 0001521C 00021FAC 3A 81 03 08 */ addi r20, r1, 0x308 -/* 00015220 00021FB0 3A 21 03 18 */ addi r17, r1, 0x318 -.L_00015224: -/* 00015224 00021FB4 3A 01 03 28 */ addi r16, r1, 0x328 -.L_00015228: -/* 00015228 00021FB8 D0 0B 00 00 */ stfs f0, 0x0(r11) -/* 0001522C 00021FBC 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00015230 00021FC0 D0 0B 00 04 */ stfs f0, 0x4(r11) -/* 00015234 00021FC4 39 29 FF FF */ subi r9, r9, 0x1 -/* 00015238 00021FC8 D0 0B 00 08 */ stfs f0, 0x8(r11) -/* 0001523C 00021FCC D0 0B 00 0C */ stfs f0, 0xc(r11) -/* 00015240 00021FD0 39 6B 00 10 */ addi r11, r11, 0x10 -/* 00015244 00021FD4 40 82 52 28 */ bne .L_0001A46C -/* 00015248 00021FD8 3D 20 00 00 */ lis r9, .rodata+0xC10@ha -/* 0001524C 00021FDC 7F 2B CB 78 */ mr r11, r25 -/* 00015250 00021FE0 C0 09 0C 10 */ lfs f0, .rodata+0xC10@l(r9) -/* 00015254 00021FE4 39 20 00 01 */ li r9, 0x1 -/* 00015258 00021FE8 D0 0B 00 00 */ stfs f0, 0x0(r11) -/* 0001525C 00021FEC 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00015260 00021FF0 D0 0B 00 04 */ stfs f0, 0x4(r11) -/* 00015264 00021FF4 39 29 FF FF */ subi r9, r9, 0x1 -/* 00015268 00021FF8 D0 0B 00 08 */ stfs f0, 0x8(r11) -/* 0001526C 00021FFC D0 0B 00 0C */ stfs f0, 0xc(r11) -/* 00015270 00022000 39 6B 00 10 */ addi r11, r11, 0x10 -/* 00015274 00022004 40 82 52 58 */ bne .L_0001A4CC -/* 00015278 00022008 3D 20 00 00 */ lis r9, .rodata+0xC10@ha -/* 0001527C 0002200C 7F AB EB 78 */ mr r11, r29 -/* 00015280 00022010 C0 09 0C 10 */ lfs f0, .rodata+0xC10@l(r9) -/* 00015284 00022014 39 20 00 01 */ li r9, 0x1 -/* 00015288 00022018 D0 0B 00 00 */ stfs f0, 0x0(r11) -/* 0001528C 0002201C 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00015290 00022020 D0 0B 00 04 */ stfs f0, 0x4(r11) -/* 00015294 00022024 39 29 FF FF */ subi r9, r9, 0x1 -/* 00015298 00022028 D0 0B 00 08 */ stfs f0, 0x8(r11) -/* 0001529C 0002202C D0 0B 00 0C */ stfs f0, 0xc(r11) -/* 000152A0 00022030 39 6B 00 10 */ addi r11, r11, 0x10 -/* 000152A4 00022034 40 82 52 88 */ bne .L_0001A52C -/* 000152A8 00022038 3D 20 00 00 */ lis r9, .rodata+0xC10@ha -/* 000152AC 0002203C 7F 0B C3 78 */ mr r11, r24 -/* 000152B0 00022040 C0 09 0C 10 */ lfs f0, .rodata+0xC10@l(r9) -/* 000152B4 00022044 39 20 00 01 */ li r9, 0x1 -.L_000152B8: -/* 000152B8 00022048 D0 0B 00 00 */ stfs f0, 0x0(r11) -/* 000152BC 0002204C 2C 09 00 00 */ cmpwi r9, 0x0 -.L_000152C0: -/* 000152C0 00022050 D0 0B 00 04 */ stfs f0, 0x4(r11) -/* 000152C4 00022054 39 29 FF FF */ subi r9, r9, 0x1 -/* 000152C8 00022058 D0 0B 00 08 */ stfs f0, 0x8(r11) -/* 000152CC 0002205C D0 0B 00 0C */ stfs f0, 0xc(r11) -/* 000152D0 00022060 39 6B 00 10 */ addi r11, r11, 0x10 -.L_000152D4: -/* 000152D4 00022064 40 82 52 B8 */ bne .L_0001A58C -/* 000152D8 00022068 38 A1 02 78 */ addi r5, r1, 0x278 -/* 000152DC 0002206C 7F 63 DB 78 */ mr r3, r27 -/* 000152E0 00022070 38 80 00 00 */ li r4, 0x0 -.L_000152E4: -/* 000152E4 00022074 48 01 35 FD */ bl .text+0x135FC -/* 000152E8 00022078 7F 63 DB 78 */ mr r3, r27 -/* 000152EC 0002207C 38 80 00 01 */ li r4, 0x1 -/* 000152F0 00022080 7E C5 B3 78 */ mr r5, r22 -/* 000152F4 00022084 48 01 35 FD */ bl .text+0x135FC -/* 000152F8 00022088 7F 63 DB 78 */ mr r3, r27 -/* 000152FC 0002208C 38 80 00 00 */ li r4, 0x0 -/* 00015300 00022090 7F 25 CB 78 */ mr r5, r25 -/* 00015304 00022094 48 01 36 75 */ bl .text+0x13674 -/* 00015308 00022098 7F 63 DB 78 */ mr r3, r27 -/* 0001530C 0002209C 38 80 00 01 */ li r4, 0x1 -/* 00015310 000220A0 7E 45 93 78 */ mr r5, r18 -/* 00015314 000220A4 48 01 36 75 */ bl .text+0x13674 -/* 00015318 000220A8 3F C0 00 00 */ lis r30, TheICEManager@ha -/* 0001531C 000220AC 81 41 03 38 */ lwz r10, 0x338(r1) -/* 00015320 000220B0 3B DE 00 00 */ addi r30, r30, TheICEManager@l -/* 00015324 000220B4 7F A4 EB 78 */ mr r4, r29 -/* 00015328 000220B8 7F C3 F3 78 */ mr r3, r30 -/* 0001532C 000220BC 7F 05 C3 78 */ mr r5, r24 -/* 00015330 000220C0 7D C6 73 78 */ mr r6, r14 -/* 00015334 000220C4 7D E7 7B 78 */ mr r7, r15 -/* 00015338 000220C8 7F 68 DB 78 */ mr r8, r27 -/* 0001533C 000220CC 39 20 00 00 */ li r9, 0x0 -/* 00015340 000220D0 48 01 97 F9 */ bl .text+0x197F8 -/* 00015344 000220D4 81 41 03 38 */ lwz r10, 0x338(r1) -/* 00015348 000220D8 7E 65 9B 78 */ mr r5, r19 -/* 0001534C 000220DC 38 C1 03 44 */ addi r6, r1, 0x344 -/* 00015350 000220E0 38 E1 03 4C */ addi r7, r1, 0x34c -/* 00015354 000220E4 7F 68 DB 78 */ mr r8, r27 -/* 00015358 000220E8 39 20 00 01 */ li r9, 0x1 -/* 0001535C 000220EC 7F C3 F3 78 */ mr r3, r30 -/* 00015360 000220F0 7E E4 BB 78 */ mr r4, r23 -.L_00015364: -/* 00015364 000220F4 48 01 97 F9 */ bl .text+0x197F8 -/* 00015368 000220F8 38 81 02 78 */ addi r4, r1, 0x278 -/* 0001536C 000220FC 7F 83 E3 78 */ mr r3, r28 -/* 00015370 00022100 48 01 47 89 */ bl .text+0x14788 -.L_00015374: -/* 00015374 00022104 7F A4 EB 78 */ mr r4, r29 -/* 00015378 00022108 7F 83 E3 78 */ mr r3, r28 -/* 0001537C 0002210C 48 01 47 E1 */ bl .text+0x147E0 -/* 00015380 00022110 7E C4 B3 78 */ mr r4, r22 -.L_00015384: -/* 00015384 00022114 7F 83 E3 78 */ mr r3, r28 -.L_00015388: -/* 00015388 00022118 48 01 48 39 */ bl .text+0x14838 -/* 0001538C 0002211C 7E E4 BB 78 */ mr r4, r23 -/* 00015390 00022120 7F 83 E3 78 */ mr r3, r28 -/* 00015394 00022124 48 01 48 91 */ bl .text+0x14890 -/* 00015398 00022128 7F 24 CB 78 */ mr r4, r25 -/* 0001539C 0002212C 7F 43 D3 78 */ mr r3, r26 -/* 000153A0 00022130 48 01 47 89 */ bl .text+0x14788 -/* 000153A4 00022134 7F 04 C3 78 */ mr r4, r24 -/* 000153A8 00022138 7F 43 D3 78 */ mr r3, r26 -/* 000153AC 0002213C 48 01 47 E1 */ bl .text+0x147E0 -/* 000153B0 00022140 7E 44 93 78 */ mr r4, r18 -/* 000153B4 00022144 7F 43 D3 78 */ mr r3, r26 -/* 000153B8 00022148 48 01 48 39 */ bl .text+0x14838 -/* 000153BC 0002214C 7E 64 9B 78 */ mr r4, r19 -/* 000153C0 00022150 7F 43 D3 78 */ mr r3, r26 -/* 000153C4 00022154 48 01 48 91 */ bl .text+0x14890 -/* 000153C8 00022158 C0 1B 00 4C */ lfs f0, 0x4c(r27) -/* 000153CC 0002215C C1 A1 01 E0 */ lfs f13, 0x1e0(r1) -/* 000153D0 00022160 D0 01 01 D8 */ stfs f0, 0x1d8(r1) -/* 000153D4 00022164 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 000153D8 00022168 41 82 53 E4 */ beq .L_0001A7BC -/* 000153DC 0002216C 38 00 00 02 */ li r0, 0x2 -/* 000153E0 00022170 B0 01 02 00 */ sth r0, 0x200(r1) -/* 000153E4 00022174 C0 01 03 48 */ lfs f0, 0x348(r1) -/* 000153E8 00022178 C1 A1 01 E4 */ lfs f13, 0x1e4(r1) -/* 000153EC 0002217C D0 01 01 DC */ stfs f0, 0x1dc(r1) -/* 000153F0 00022180 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 000153F4 00022184 41 82 54 00 */ beq .L_0001A7F4 -/* 000153F8 00022188 38 00 00 02 */ li r0, 0x2 -/* 000153FC 0002218C B0 01 02 00 */ sth r0, 0x200(r1) -/* 00015400 00022190 C0 1B 00 50 */ lfs f0, 0x50(r27) -/* 00015404 00022194 C1 A1 01 D8 */ lfs f13, 0x1d8(r1) -/* 00015408 00022198 D0 01 01 E0 */ stfs f0, 0x1e0(r1) -/* 0001540C 0002219C FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00015410 000221A0 41 82 54 1C */ beq .L_0001A82C -/* 00015414 000221A4 38 00 00 02 */ li r0, 0x2 -.L_00015418: -/* 00015418 000221A8 B0 01 02 00 */ sth r0, 0x200(r1) -/* 0001541C 000221AC C0 0F 00 04 */ lfs f0, 0x4(r15) -.L_00015420: -/* 00015420 000221B0 C1 A1 01 DC */ lfs f13, 0x1dc(r1) -/* 00015424 000221B4 D0 01 01 E4 */ stfs f0, 0x1e4(r1) -/* 00015428 000221B8 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 0001542C 000221BC 41 82 54 38 */ beq .L_0001A864 -/* 00015430 000221C0 38 00 00 02 */ li r0, 0x2 -.L_00015434: -/* 00015434 000221C4 B0 01 02 00 */ sth r0, 0x200(r1) -/* 00015438 000221C8 C0 3B 00 54 */ lfs f1, 0x54(r27) -/* 0001543C 000221CC 48 01 38 9D */ bl .text+0x1389C -/* 00015440 000221D0 C0 3B 00 58 */ lfs f1, 0x58(r27) -.L_00015444: -/* 00015444 000221D4 7C 7E 1B 78 */ mr r30, r3 -/* 00015448 000221D8 48 01 38 9D */ bl .text+0x1389C -/* 0001544C 000221DC C0 41 03 40 */ lfs f2, 0x340(r1) -/* 00015450 000221E0 7C 7D 1B 78 */ mr r29, r3 -/* 00015454 000221E4 C0 3B 00 54 */ lfs f1, 0x54(r27) -/* 00015458 000221E8 48 01 39 35 */ bl .text+0x13934 -/* 0001545C 000221EC FF E0 08 90 */ fmr f31, f1 -/* 00015460 000221F0 C0 4E 00 04 */ lfs f2, 0x4(r14) -/* 00015464 000221F4 C0 3B 00 58 */ lfs f1, 0x58(r27) -/* 00015468 000221F8 48 01 39 35 */ bl .text+0x13934 -/* 0001546C 000221FC 3D 40 43 30 */ lis r10, 0x4330 -/* 00015470 00022200 93 C1 03 7C */ stw r30, 0x37c(r1) -/* 00015474 00022204 3D 60 00 00 */ lis r11, .rodata+0xC18@ha -/* 00015478 00022208 C9 8B 0C 18 */ lfd f12, .rodata+0xC18@l(r11) -/* 0001547C 0002220C 91 41 03 78 */ stw r10, 0x378(r1) -/* 00015480 00022210 C1 A1 02 10 */ lfs f13, 0x210(r1) -/* 00015484 00022214 C8 01 03 78 */ lfd f0, 0x378(r1) -/* 00015488 00022218 FC 00 60 28 */ fsub f0, f0, f12 -/* 0001548C 0002221C FC 00 00 18 */ frsp f0, f0 -/* 00015490 00022220 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00015494 00022224 D0 01 02 08 */ stfs f0, 0x208(r1) -/* 00015498 00022228 41 82 54 A4 */ beq .L_0001A93C -/* 0001549C 0002222C 38 00 00 02 */ li r0, 0x2 -/* 000154A0 00022230 B0 01 02 30 */ sth r0, 0x230(r1) -/* 000154A4 00022234 C0 01 02 14 */ lfs f0, 0x214(r1) -/* 000154A8 00022238 D3 E1 02 0C */ stfs f31, 0x20c(r1) -/* 000154AC 0002223C FC 1F 00 00 */ fcmpu cr0, f31, f0 -/* 000154B0 00022240 41 82 54 BC */ beq .L_0001A96C -/* 000154B4 00022244 38 00 00 02 */ li r0, 0x2 -/* 000154B8 00022248 B0 01 02 30 */ sth r0, 0x230(r1) -/* 000154BC 0002224C C1 A1 02 08 */ lfs f13, 0x208(r1) -/* 000154C0 00022250 93 A1 03 7C */ stw r29, 0x37c(r1) -/* 000154C4 00022254 91 41 03 78 */ stw r10, 0x378(r1) -/* 000154C8 00022258 C8 01 03 78 */ lfd f0, 0x378(r1) -/* 000154CC 0002225C FC 00 60 28 */ fsub f0, f0, f12 -/* 000154D0 00022260 FC 00 00 18 */ frsp f0, f0 -/* 000154D4 00022264 FC 00 68 00 */ fcmpu cr0, f0, f13 -.L_000154D8: -/* 000154D8 00022268 D0 01 02 10 */ stfs f0, 0x210(r1) -/* 000154DC 0002226C 41 82 54 E8 */ beq .L_0001A9C4 -/* 000154E0 00022270 38 00 00 02 */ li r0, 0x2 -.L_000154E4: -/* 000154E4 00022274 B0 01 02 30 */ sth r0, 0x230(r1) -.L_000154E8: -/* 000154E8 00022278 C0 01 02 0C */ lfs f0, 0x20c(r1) -/* 000154EC 0002227C D0 21 02 14 */ stfs f1, 0x214(r1) -/* 000154F0 00022280 FC 01 00 00 */ fcmpu cr0, f1, f0 -.L_000154F4: -/* 000154F4 00022284 41 82 55 00 */ beq .L_0001A9F4 -/* 000154F8 00022288 38 00 00 02 */ li r0, 0x2 -/* 000154FC 0002228C B0 01 02 30 */ sth r0, 0x230(r1) -/* 00015500 00022290 40 8E 55 1C */ bne cr3, .L_0001AA1C -/* 00015504 00022294 80 01 03 54 */ lwz r0, 0x354(r1) -/* 00015508 00022298 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0001550C 0002229C 40 82 55 1C */ bne .L_0001AA28 -/* 00015510 000222A0 81 21 03 58 */ lwz r9, 0x358(r1) -/* 00015514 000222A4 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00015518 000222A8 41 82 55 B0 */ beq .L_0001AAC8 -/* 0001551C 000222AC 80 61 03 68 */ lwz r3, 0x368(r1) -/* 00015520 000222B0 48 00 00 01 */ bl PSMTX44Identity -/* 00015524 000222B4 81 3F 00 80 */ lwz r9, 0x80(r31) -/* 00015528 000222B8 3D 40 00 00 */ lis r10, .rodata+0xC14@ha -/* 0001552C 000222BC C1 69 00 10 */ lfs f11, 0x10(r9) -/* 00015530 000222C0 39 69 00 10 */ addi r11, r9, 0x10 -/* 00015534 000222C4 C0 09 00 14 */ lfs f0, 0x14(r9) -/* 00015538 000222C8 C1 A9 00 18 */ lfs f13, 0x18(r9) -/* 0001553C 000222CC C1 89 00 1C */ lfs f12, 0x1c(r9) -/* 00015540 000222D0 D1 7F 00 CC */ stfs f11, 0xcc(r31) -/* 00015544 000222D4 D0 1F 00 D0 */ stfs f0, 0xd0(r31) -/* 00015548 000222D8 D1 BF 00 D4 */ stfs f13, 0xd4(r31) -/* 0001554C 000222DC D1 9F 00 D8 */ stfs f12, 0xd8(r31) -/* 00015550 000222E0 C1 6B 00 1C */ lfs f11, 0x1c(r11) -/* 00015554 000222E4 C0 0B 00 10 */ lfs f0, 0x10(r11) -/* 00015558 000222E8 C1 AB 00 14 */ lfs f13, 0x14(r11) -/* 0001555C 000222EC C1 8B 00 18 */ lfs f12, 0x18(r11) -.L_00015560: -/* 00015560 000222F0 D0 1F 00 DC */ stfs f0, 0xdc(r31) -/* 00015564 000222F4 D1 BF 00 E0 */ stfs f13, 0xe0(r31) -/* 00015568 000222F8 D1 9F 00 E4 */ stfs f12, 0xe4(r31) -/* 0001556C 000222FC D1 7F 00 E8 */ stfs f11, 0xe8(r31) -/* 00015570 00022300 C0 09 00 30 */ lfs f0, 0x30(r9) -/* 00015574 00022304 C1 A9 00 34 */ lfs f13, 0x34(r9) -.L_00015578: -/* 00015578 00022308 C1 89 00 38 */ lfs f12, 0x38(r9) -/* 0001557C 0002230C C1 69 00 3C */ lfs f11, 0x3c(r9) -.L_00015580: -/* 00015580 00022310 D0 1F 00 EC */ stfs f0, 0xec(r31) -/* 00015584 00022314 D1 BF 00 F0 */ stfs f13, 0xf0(r31) -/* 00015588 00022318 D1 9F 00 F4 */ stfs f12, 0xf4(r31) -/* 0001558C 0002231C D1 7F 00 F8 */ stfs f11, 0xf8(r31) -/* 00015590 00022320 C1 4A 0C 14 */ lfs f10, .rodata+0xC14@l(r10) -.L_00015594: -/* 00015594 00022324 C1 89 00 08 */ lfs f12, 0x8(r9) -/* 00015598 00022328 C0 09 00 00 */ lfs f0, 0x0(r9) -/* 0001559C 0002232C C1 A9 00 04 */ lfs f13, 0x4(r9) -/* 000155A0 00022330 D0 1F 00 FC */ stfs f0, 0xfc(r31) -.L_000155A4: -/* 000155A4 00022334 D1 BF 01 00 */ stfs f13, 0x100(r31) -/* 000155A8 00022338 D1 9F 01 04 */ stfs f12, 0x104(r31) -.L_000155AC: -/* 000155AC 0002233C D1 5F 01 08 */ stfs f10, 0x108(r31) -/* 000155B0 00022340 80 1F 00 BC */ lwz r0, 0xbc(r31) -/* 000155B4 00022344 7C 09 03 78 */ mr r9, r0 -/* 000155B8 00022348 2C 00 00 02 */ cmpwi r0, 0x2 -/* 000155BC 0002234C 41 82 55 E4 */ beq .L_0001ABA0 -/* 000155C0 00022350 41 81 55 D0 */ bgt .L_0001AB90 -/* 000155C4 00022354 2C 09 00 00 */ cmpwi r9, 0x0 -/* 000155C8 00022358 41 82 55 DC */ beq .L_0001ABA4 -/* 000155CC 0002235C 48 01 55 F4 */ b .text+0x155F4 -/* 000155D0 00022360 2C 09 00 03 */ cmpwi r9, 0x3 -/* 000155D4 00022364 41 82 55 EC */ beq .L_0001ABC0 -/* 000155D8 00022368 48 01 55 F4 */ b .text+0x155F4 -/* 000155DC 0002236C 38 A1 00 48 */ addi r5, r1, 0x48 -.L_000155E0: -/* 000155E0 00022370 48 01 55 F8 */ b .text+0x155F8 -/* 000155E4 00022374 38 A1 00 88 */ addi r5, r1, 0x88 -/* 000155E8 00022378 48 01 55 F8 */ b .text+0x155F8 -/* 000155EC 0002237C 80 A1 03 5C */ lwz r5, 0x35c(r1) -/* 000155F0 00022380 48 01 55 F8 */ b .text+0x155F8 -/* 000155F4 00022384 38 A0 00 00 */ li r5, 0x0 -/* 000155F8 00022388 80 1F 00 C0 */ lwz r0, 0xc0(r31) -/* 000155FC 0002238C 7C 0B 03 78 */ mr r11, r0 -/* 00015600 00022390 2C 00 00 02 */ cmpwi r0, 0x2 -/* 00015604 00022394 41 82 56 2C */ beq .L_0001AC30 -/* 00015608 00022398 41 81 56 18 */ bgt find__H2ZPP10IRoadBlockZP10IRoadBlock_4_STLX01X01RCX11_X01 -/* 0001560C 0002239C 2C 0B 00 00 */ cmpwi r11, 0x0 -.L_00015610: -/* 00015610 000223A0 41 82 56 24 */ beq .L_0001AC34 -/* 00015614 000223A4 48 01 56 3C */ b .text+0x1563C -.L_00015618: -/* 00015618 000223A8 2C 0B 00 03 */ cmpwi r11, 0x3 -/* 0001561C 000223AC 41 82 56 34 */ beq .L_0001AC50 -/* 00015620 000223B0 48 01 56 3C */ b .text+0x1563C -/* 00015624 000223B4 3B A1 00 48 */ addi r29, r1, 0x48 -/* 00015628 000223B8 48 01 56 40 */ b .text+0x15640 -/* 0001562C 000223BC 3B A1 00 88 */ addi r29, r1, 0x88 -/* 00015630 000223C0 48 01 56 40 */ b .text+0x15640 -.L_00015634: -/* 00015634 000223C4 83 A1 03 5C */ lwz r29, 0x35c(r1) -/* 00015638 000223C8 48 01 56 40 */ b .text+0x15640 -/* 0001563C 000223CC 3B A0 00 00 */ li r29, 0x0 -/* 00015640 000223D0 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00015644 000223D4 40 82 56 54 */ bne .L_0001AC98 -/* 00015648 000223D8 81 3F 00 80 */ lwz r9, 0x80(r31) -/* 0001564C 000223DC 38 C9 00 50 */ addi r6, r9, 0x50 -/* 00015650 000223E0 48 01 56 58 */ b .text+0x15658 -.L_00015654: -/* 00015654 000223E4 38 C0 00 00 */ li r6, 0x0 -/* 00015658 000223E8 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0001565C 000223EC 40 82 56 6C */ bne .L_0001ACC8 -/* 00015660 000223F0 81 3F 00 80 */ lwz r9, 0x80(r31) -.L_00015664: -/* 00015664 000223F4 3B C9 00 50 */ addi r30, r9, 0x50 -.L_00015668: -/* 00015668 000223F8 48 01 56 70 */ b .text+0x15670 -.L_0001566C: -/* 0001566C 000223FC 3B C0 00 00 */ li r30, 0x0 -/* 00015670 00022400 7F E3 FB 78 */ mr r3, r31 -/* 00015674 00022404 7F 84 E3 78 */ mr r4, r28 -/* 00015678 00022408 48 01 49 D9 */ bl .text+0x149D8 -/* 0001567C 0002240C 7F A5 EB 78 */ mr r5, r29 -/* 00015680 00022410 7F C6 F3 78 */ mr r6, r30 -/* 00015684 00022414 7F E3 FB 78 */ mr r3, r31 -/* 00015688 00022418 7F 44 D3 78 */ mr r4, r26 -/* 0001568C 0002241C 48 01 4B 29 */ bl .text+0x14B28 -/* 00015690 00022420 80 81 03 60 */ lwz r4, 0x360(r1) -/* 00015694 00022424 7F E3 FB 78 */ mr r3, r31 -/* 00015698 00022428 48 01 4C 79 */ bl .text+0x14C78 -/* 0001569C 0002242C 80 81 03 64 */ lwz r4, 0x364(r1) -/* 000156A0 00022430 7F E3 FB 78 */ mr r3, r31 -/* 000156A4 00022434 48 01 4C B5 */ bl .text+0x14CB4 -/* 000156A8 00022438 3C 60 00 00 */ lis r3, TheICEManager@ha -/* 000156AC 0002243C 38 63 00 00 */ addi r3, r3, TheICEManager@l -.L_000156B0: -/* 000156B0 00022440 48 01 84 D5 */ bl .text+0x184D4 -/* 000156B4 00022444 C0 1F 00 B4 */ lfs f0, 0xb4(r31) -/* 000156B8 00022448 C1 BF 00 B8 */ lfs f13, 0xb8(r31) -/* 000156BC 0002244C EC 01 00 28 */ fsubs f0, f1, f0 -/* 000156C0 00022450 EC 21 68 28 */ fsubs f1, f1, f13 -/* 000156C4 00022454 FC 00 02 10 */ fabs f0, f0 -/* 000156C8 00022458 FC 20 0A 10 */ fabs f1, f1 -/* 000156CC 0002245C FC 01 00 00 */ fcmpu cr0, f1, f0 -/* 000156D0 00022460 41 81 57 D8 */ bgt find__H2ZPP7IPlayerZP7IPlayer_4_STLX01X01RCX11_X01 -/* 000156D4 00022464 3D 20 00 00 */ lis r9, .rodata+0xC10@ha -/* 000156D8 00022468 7F 83 E3 78 */ mr r3, r28 -/* 000156DC 0002246C C0 09 0C 10 */ lfs f0, .rodata+0xC10@l(r9) -/* 000156E0 00022470 7E A4 AB 78 */ mr r4, r21 -/* 000156E4 00022474 D0 01 03 34 */ stfs f0, 0x334(r1) -/* 000156E8 00022478 D0 01 02 F8 */ stfs f0, 0x2f8(r1) -/* 000156EC 0002247C D0 01 02 FC */ stfs f0, 0x2fc(r1) -.L_000156F0: -/* 000156F0 00022480 D0 01 03 00 */ stfs f0, 0x300(r1) -/* 000156F4 00022484 D0 01 03 04 */ stfs f0, 0x304(r1) -/* 000156F8 00022488 D0 01 03 08 */ stfs f0, 0x308(r1) -/* 000156FC 0002248C D0 01 03 0C */ stfs f0, 0x30c(r1) -/* 00015700 00022490 D0 01 03 10 */ stfs f0, 0x310(r1) -/* 00015704 00022494 D0 01 03 14 */ stfs f0, 0x314(r1) -/* 00015708 00022498 D0 01 03 18 */ stfs f0, 0x318(r1) -/* 0001570C 0002249C D0 01 03 1C */ stfs f0, 0x31c(r1) -/* 00015710 000224A0 D0 01 03 20 */ stfs f0, 0x320(r1) -/* 00015714 000224A4 D0 01 03 24 */ stfs f0, 0x324(r1) -/* 00015718 000224A8 D0 01 03 28 */ stfs f0, 0x328(r1) -/* 0001571C 000224AC D0 01 03 2C */ stfs f0, 0x32c(r1) -/* 00015720 000224B0 D0 01 03 30 */ stfs f0, 0x330(r1) -/* 00015724 000224B4 48 01 48 AD */ bl .text+0x148AC -/* 00015728 000224B8 7F 83 E3 78 */ mr r3, r28 -/* 0001572C 000224BC 7E 84 A3 78 */ mr r4, r20 -/* 00015730 000224C0 48 01 48 C9 */ bl .text+0x148C8 -.L_00015734: -/* 00015734 000224C4 80 7F 00 84 */ lwz r3, 0x84(r31) -.L_00015738: -/* 00015738 000224C8 7E A4 AB 78 */ mr r4, r21 -/* 0001573C 000224CC 48 01 48 39 */ bl .text+0x14838 -/* 00015740 000224D0 80 7F 00 84 */ lwz r3, 0x84(r31) -/* 00015744 000224D4 7E 84 A3 78 */ mr r4, r20 -.L_00015748: -/* 00015748 000224D8 48 01 48 91 */ bl .text+0x14890 -/* 0001574C 000224DC 7F 43 D3 78 */ mr r3, r26 -.L_00015750: -/* 00015750 000224E0 7E 24 8B 78 */ mr r4, r17 -/* 00015754 000224E4 48 01 48 AD */ bl .text+0x148AC -/* 00015758 000224E8 7F 43 D3 78 */ mr r3, r26 -/* 0001575C 000224EC 7E 04 83 78 */ mr r4, r16 -/* 00015760 000224F0 48 01 48 C9 */ bl .text+0x148C8 -/* 00015764 000224F4 80 7F 00 88 */ lwz r3, 0x88(r31) -/* 00015768 000224F8 7E 24 8B 78 */ mr r4, r17 -/* 0001576C 000224FC 48 01 48 39 */ bl .text+0x14838 -.L_00015770: -/* 00015770 00022500 80 7F 00 88 */ lwz r3, 0x88(r31) -/* 00015774 00022504 7E 04 83 78 */ mr r4, r16 -/* 00015778 00022508 48 01 48 91 */ bl .text+0x14890 -/* 0001577C 0002250C 81 3F 00 8C */ lwz r9, 0x8c(r31) -/* 00015780 00022510 C0 01 01 D8 */ lfs f0, 0x1d8(r1) -/* 00015784 00022514 C1 A9 00 00 */ lfs f13, 0x0(r9) -/* 00015788 00022518 D0 09 00 08 */ stfs f0, 0x8(r9) -/* 0001578C 0002251C FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00015790 00022520 41 82 57 9C */ beq .L_0001AF2C -/* 00015794 00022524 38 00 00 02 */ li r0, 0x2 -/* 00015798 00022528 B0 09 00 28 */ sth r0, 0x28(r9) -/* 0001579C 0002252C C0 01 01 DC */ lfs f0, 0x1dc(r1) -/* 000157A0 00022530 81 3F 00 8C */ lwz r9, 0x8c(r31) -.L_000157A4: -/* 000157A4 00022534 D0 09 00 0C */ stfs f0, 0xc(r9) -/* 000157A8 00022538 81 3F 00 90 */ lwz r9, 0x90(r31) -/* 000157AC 0002253C C0 01 02 08 */ lfs f0, 0x208(r1) -/* 000157B0 00022540 C1 A9 00 00 */ lfs f13, 0x0(r9) -/* 000157B4 00022544 D0 09 00 08 */ stfs f0, 0x8(r9) -/* 000157B8 00022548 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 000157BC 0002254C 41 82 57 C8 */ beq .L_0001AF84 -.L_000157C0: -/* 000157C0 00022550 38 00 00 02 */ li r0, 0x2 -.L_000157C4: -/* 000157C4 00022554 B0 09 00 28 */ sth r0, 0x28(r9) -.L_000157C8: -/* 000157C8 00022558 C0 01 02 0C */ lfs f0, 0x20c(r1) -/* 000157CC 0002255C 81 3F 00 90 */ lwz r9, 0x90(r31) -.L_000157D0: -/* 000157D0 00022560 D0 09 00 0C */ stfs f0, 0xc(r9) -/* 000157D4 00022564 48 01 59 00 */ b .text+0x15900 -/* 000157D8 00022568 3D 20 00 00 */ lis r9, .rodata+0xC10@ha -/* 000157DC 0002256C 7F 83 E3 78 */ mr r3, r28 -/* 000157E0 00022570 C0 09 0C 10 */ lfs f0, .rodata+0xC10@l(r9) -.L_000157E4: -/* 000157E4 00022574 7E A4 AB 78 */ mr r4, r21 -/* 000157E8 00022578 D0 01 03 34 */ stfs f0, 0x334(r1) -/* 000157EC 0002257C D0 01 02 F8 */ stfs f0, 0x2f8(r1) -/* 000157F0 00022580 D0 01 02 FC */ stfs f0, 0x2fc(r1) -.L_000157F4: -/* 000157F4 00022584 D0 01 03 00 */ stfs f0, 0x300(r1) -/* 000157F8 00022588 D0 01 03 04 */ stfs f0, 0x304(r1) -.L_000157FC: -/* 000157FC 0002258C D0 01 03 08 */ stfs f0, 0x308(r1) -.L_00015800: -/* 00015800 00022590 D0 01 03 0C */ stfs f0, 0x30c(r1) -.L_00015804: -/* 00015804 00022594 D0 01 03 10 */ stfs f0, 0x310(r1) -/* 00015808 00022598 D0 01 03 14 */ stfs f0, 0x314(r1) -/* 0001580C 0002259C D0 01 03 18 */ stfs f0, 0x318(r1) -/* 00015810 000225A0 D0 01 03 1C */ stfs f0, 0x31c(r1) -.L_00015814: -/* 00015814 000225A4 D0 01 03 20 */ stfs f0, 0x320(r1) -.L_00015818: -/* 00015818 000225A8 D0 01 03 24 */ stfs f0, 0x324(r1) -.L_0001581C: -/* 0001581C 000225AC D0 01 03 28 */ stfs f0, 0x328(r1) -/* 00015820 000225B0 D0 01 03 2C */ stfs f0, 0x32c(r1) -/* 00015824 000225B4 D0 01 03 30 */ stfs f0, 0x330(r1) -/* 00015828 000225B8 48 01 48 AD */ bl .text+0x148AC -/* 0001582C 000225BC 7F 83 E3 78 */ mr r3, r28 -/* 00015830 000225C0 7E 84 A3 78 */ mr r4, r20 -/* 00015834 000225C4 48 01 48 C9 */ bl .text+0x148C8 -/* 00015838 000225C8 80 7F 00 84 */ lwz r3, 0x84(r31) -/* 0001583C 000225CC 7E A4 AB 78 */ mr r4, r21 -/* 00015840 000225D0 48 01 47 89 */ bl .text+0x14788 -/* 00015844 000225D4 80 7F 00 84 */ lwz r3, 0x84(r31) -/* 00015848 000225D8 7E 84 A3 78 */ mr r4, r20 -/* 0001584C 000225DC 48 01 47 E1 */ bl .text+0x147E0 -.L_00015850: -/* 00015850 000225E0 7F 43 D3 78 */ mr r3, r26 -.L_00015854: -/* 00015854 000225E4 7E 24 8B 78 */ mr r4, r17 -/* 00015858 000225E8 48 01 48 AD */ bl .text+0x148AC -/* 0001585C 000225EC 7F 43 D3 78 */ mr r3, r26 -/* 00015860 000225F0 7E 04 83 78 */ mr r4, r16 -/* 00015864 000225F4 48 01 48 C9 */ bl .text+0x148C8 -/* 00015868 000225F8 80 7F 00 88 */ lwz r3, 0x88(r31) -/* 0001586C 000225FC 7E 24 8B 78 */ mr r4, r17 -.L_00015870: -/* 00015870 00022600 48 01 47 89 */ bl .text+0x14788 -/* 00015874 00022604 80 7F 00 88 */ lwz r3, 0x88(r31) -/* 00015878 00022608 7E 04 83 78 */ mr r4, r16 -.L_0001587C: -/* 0001587C 0002260C 48 01 47 E1 */ bl .text+0x147E0 -/* 00015880 00022610 81 3F 00 8C */ lwz r9, 0x8c(r31) -/* 00015884 00022614 C0 01 01 D8 */ lfs f0, 0x1d8(r1) -/* 00015888 00022618 C1 A9 00 08 */ lfs f13, 0x8(r9) -/* 0001588C 0002261C D0 09 00 00 */ stfs f0, 0x0(r9) -/* 00015890 00022620 FC 00 68 00 */ fcmpu cr0, f0, f13 -.L_00015894: -/* 00015894 00022624 41 82 58 A0 */ beq .L_0001B134 -.L_00015898: -/* 00015898 00022628 38 00 00 02 */ li r0, 0x2 -/* 0001589C 0002262C B0 09 00 28 */ sth r0, 0x28(r9) -/* 000158A0 00022630 81 3F 00 8C */ lwz r9, 0x8c(r31) -/* 000158A4 00022634 C0 01 01 DC */ lfs f0, 0x1dc(r1) -.L_000158A8: -/* 000158A8 00022638 C1 A9 00 0C */ lfs f13, 0xc(r9) -/* 000158AC 0002263C D0 09 00 04 */ stfs f0, 0x4(r9) -/* 000158B0 00022640 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 000158B4 00022644 41 82 58 C0 */ beq .L_0001B174 -/* 000158B8 00022648 38 00 00 02 */ li r0, 0x2 -.L_000158BC: -/* 000158BC 0002264C B0 09 00 28 */ sth r0, 0x28(r9) -/* 000158C0 00022650 81 3F 00 90 */ lwz r9, 0x90(r31) -/* 000158C4 00022654 C0 01 02 08 */ lfs f0, 0x208(r1) -/* 000158C8 00022658 C1 A9 00 08 */ lfs f13, 0x8(r9) -/* 000158CC 0002265C D0 09 00 00 */ stfs f0, 0x0(r9) -/* 000158D0 00022660 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 000158D4 00022664 41 82 58 E0 */ beq .L_0001B1B4 -/* 000158D8 00022668 38 00 00 02 */ li r0, 0x2 -/* 000158DC 0002266C B0 09 00 28 */ sth r0, 0x28(r9) -.L_000158E0: -/* 000158E0 00022670 81 3F 00 90 */ lwz r9, 0x90(r31) -/* 000158E4 00022674 C0 01 02 0C */ lfs f0, 0x20c(r1) -/* 000158E8 00022678 C1 A9 00 0C */ lfs f13, 0xc(r9) -/* 000158EC 0002267C D0 09 00 04 */ stfs f0, 0x4(r9) -/* 000158F0 00022680 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 000158F4 00022684 41 82 59 00 */ beq find__H2ZPPQ28CameraAI8DirectorZPQ28CameraAI8Director_4_STLX01X01RCX11_X01 -/* 000158F8 00022688 38 00 00 02 */ li r0, 0x2 -/* 000158FC 0002268C B0 09 00 28 */ sth r0, 0x28(r9) -.L_00015900: -/* 00015900 00022690 83 DF 00 84 */ lwz r30, 0x84(r31) -/* 00015904 00022694 7F C3 F3 78 */ mr r3, r30 -/* 00015908 00022698 48 01 43 CD */ bl .text+0x143CC -/* 0001590C 0002269C 38 7E 00 2C */ addi r3, r30, 0x2c -/* 00015910 000226A0 48 01 43 CD */ bl .text+0x143CC -/* 00015914 000226A4 38 7E 00 58 */ addi r3, r30, 0x58 -/* 00015918 000226A8 48 01 43 CD */ bl .text+0x143CC -/* 0001591C 000226AC 83 DF 00 88 */ lwz r30, 0x88(r31) -/* 00015920 000226B0 7F C3 F3 78 */ mr r3, r30 -/* 00015924 000226B4 48 01 43 CD */ bl .text+0x143CC -.L_00015928: -/* 00015928 000226B8 38 7E 00 2C */ addi r3, r30, 0x2c -/* 0001592C 000226BC 48 01 43 CD */ bl .text+0x143CC -.L_00015930: -/* 00015930 000226C0 38 7E 00 58 */ addi r3, r30, 0x58 -/* 00015934 000226C4 48 01 43 CD */ bl .text+0x143CC -/* 00015938 000226C8 80 7F 00 8C */ lwz r3, 0x8c(r31) -/* 0001593C 000226CC 48 01 43 CD */ bl .text+0x143CC -/* 00015940 000226D0 80 7F 00 90 */ lwz r3, 0x90(r31) -.L_00015944: -/* 00015944 000226D4 48 01 43 CD */ bl .text+0x143CC -/* 00015948 000226D8 81 3F 00 94 */ lwz r9, 0x94(r31) -/* 0001594C 000226DC C0 1B 00 5C */ lfs f0, 0x5c(r27) -/* 00015950 000226E0 C1 A9 00 08 */ lfs f13, 0x8(r9) -.L_00015954: -/* 00015954 000226E4 D0 09 00 00 */ stfs f0, 0x0(r9) -/* 00015958 000226E8 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 0001595C 000226EC 41 82 59 68 */ beq .L_0001B2C4 -/* 00015960 000226F0 38 00 00 02 */ li r0, 0x2 -/* 00015964 000226F4 B0 09 00 28 */ sth r0, 0x28(r9) -/* 00015968 000226F8 81 3F 00 94 */ lwz r9, 0x94(r31) -/* 0001596C 000226FC C0 1B 00 60 */ lfs f0, 0x60(r27) -/* 00015970 00022700 C1 A9 00 00 */ lfs f13, 0x0(r9) -.L_00015974: -/* 00015974 00022704 D0 09 00 08 */ stfs f0, 0x8(r9) -.L_00015978: -/* 00015978 00022708 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 0001597C 0002270C 41 82 59 88 */ beq Count__Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi311ePlayerList -/* 00015980 00022710 38 00 00 02 */ li r0, 0x2 -/* 00015984 00022714 B0 09 00 28 */ sth r0, 0x28(r9) -/* 00015988 00022718 80 7F 00 94 */ lwz r3, 0x94(r31) -/* 0001598C 0002271C 48 01 43 CD */ bl .text+0x143CC -/* 00015990 00022720 81 3F 00 98 */ lwz r9, 0x98(r31) -/* 00015994 00022724 C0 1B 00 64 */ lfs f0, 0x64(r27) -/* 00015998 00022728 C1 A9 00 08 */ lfs f13, 0x8(r9) -/* 0001599C 0002272C D0 09 00 00 */ stfs f0, 0x0(r9) -/* 000159A0 00022730 FC 00 68 00 */ fcmpu cr0, f0, f13 -.L_000159A4: -/* 000159A4 00022734 41 82 59 B0 */ beq .L_0001B354 -/* 000159A8 00022738 38 00 00 02 */ li r0, 0x2 -/* 000159AC 0002273C B0 09 00 28 */ sth r0, 0x28(r9) -/* 000159B0 00022740 81 3F 00 98 */ lwz r9, 0x98(r31) -/* 000159B4 00022744 C0 1B 00 68 */ lfs f0, 0x68(r27) -/* 000159B8 00022748 C1 A9 00 00 */ lfs f13, 0x0(r9) -/* 000159BC 0002274C D0 09 00 08 */ stfs f0, 0x8(r9) -/* 000159C0 00022750 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 000159C4 00022754 41 82 59 D0 */ beq find__H2ZQ24_STLt14_List_iterator2ZP5IBodyZQ24_STLt16_Nonconst_traits1ZP5IBodyZP5IBody_4_STLX01X01RCX11_X01 -/* 000159C8 00022758 38 00 00 02 */ li r0, 0x2 -/* 000159CC 0002275C B0 09 00 28 */ sth r0, 0x28(r9) -/* 000159D0 00022760 80 7F 00 98 */ lwz r3, 0x98(r31) -/* 000159D4 00022764 48 01 43 CD */ bl .text+0x143CC -/* 000159D8 00022768 81 3F 00 9C */ lwz r9, 0x9c(r31) -/* 000159DC 0002276C C0 1B 00 6C */ lfs f0, 0x6c(r27) -/* 000159E0 00022770 C1 A9 00 08 */ lfs f13, 0x8(r9) -/* 000159E4 00022774 D0 09 00 00 */ stfs f0, 0x0(r9) -/* 000159E8 00022778 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 000159EC 0002277C 41 82 59 F8 */ beq .L_0001B3E4 -/* 000159F0 00022780 38 00 00 02 */ li r0, 0x2 -/* 000159F4 00022784 B0 09 00 28 */ sth r0, 0x28(r9) -/* 000159F8 00022788 81 3F 00 9C */ lwz r9, 0x9c(r31) -/* 000159FC 0002278C C0 1B 00 70 */ lfs f0, 0x70(r27) -/* 00015A00 00022790 C1 A9 00 00 */ lfs f13, 0x0(r9) -/* 00015A04 00022794 D0 09 00 08 */ stfs f0, 0x8(r9) -/* 00015A08 00022798 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00015A0C 0002279C 41 82 5A 18 */ beq .L_0001B424 -/* 00015A10 000227A0 38 00 00 02 */ li r0, 0x2 -.L_00015A14: -/* 00015A14 000227A4 B0 09 00 28 */ sth r0, 0x28(r9) -.L_00015A18: -/* 00015A18 000227A8 80 7F 00 9C */ lwz r3, 0x9c(r31) -.L_00015A1C: -/* 00015A1C 000227AC 48 01 43 CD */ bl .text+0x143CC -/* 00015A20 000227B0 81 3F 00 A0 */ lwz r9, 0xa0(r31) -/* 00015A24 000227B4 C0 1B 00 74 */ lfs f0, 0x74(r27) -/* 00015A28 000227B8 C1 A9 00 08 */ lfs f13, 0x8(r9) -/* 00015A2C 000227BC D0 09 00 00 */ stfs f0, 0x0(r9) -/* 00015A30 000227C0 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00015A34 000227C4 41 82 5A 40 */ beq .L_0001B474 -/* 00015A38 000227C8 38 00 00 02 */ li r0, 0x2 -/* 00015A3C 000227CC B0 09 00 28 */ sth r0, 0x28(r9) -/* 00015A40 000227D0 81 3F 00 A0 */ lwz r9, 0xa0(r31) -/* 00015A44 000227D4 C0 1B 00 78 */ lfs f0, 0x78(r27) -/* 00015A48 000227D8 C1 A9 00 00 */ lfs f13, 0x0(r9) -/* 00015A4C 000227DC D0 09 00 08 */ stfs f0, 0x8(r9) -/* 00015A50 000227E0 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00015A54 000227E4 41 82 5A 60 */ beq .L_0001B4B4 -/* 00015A58 000227E8 38 00 00 02 */ li r0, 0x2 -/* 00015A5C 000227EC B0 09 00 28 */ sth r0, 0x28(r9) -/* 00015A60 000227F0 80 7F 00 A0 */ lwz r3, 0xa0(r31) -/* 00015A64 000227F4 3F C0 43 30 */ lis r30, 0x4330 -/* 00015A68 000227F8 48 01 43 CD */ bl .text+0x143CC -/* 00015A6C 000227FC 88 1B 00 7C */ lbz r0, 0x7c(r27) -/* 00015A70 00022800 3D 20 00 00 */ lis r9, .rodata+0xC18@ha -/* 00015A74 00022804 81 5F 00 A4 */ lwz r10, 0xa4(r31) -/* 00015A78 00022808 90 01 03 7C */ stw r0, 0x37c(r1) -/* 00015A7C 0002280C CB E9 0C 18 */ lfd f31, .rodata+0xC18@l(r9) -/* 00015A80 00022810 93 C1 03 78 */ stw r30, 0x378(r1) -/* 00015A84 00022814 C1 AA 00 08 */ lfs f13, 0x8(r10) -/* 00015A88 00022818 C8 01 03 78 */ lfd f0, 0x378(r1) -/* 00015A8C 0002281C FC 00 F8 28 */ fsub f0, f0, f31 -/* 00015A90 00022820 FC 00 00 18 */ frsp f0, f0 -/* 00015A94 00022824 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00015A98 00022828 D0 0A 00 00 */ stfs f0, 0x0(r10) -/* 00015A9C 0002282C 41 82 5A A8 */ beq .L_0001B544 -/* 00015AA0 00022830 38 00 00 02 */ li r0, 0x2 -.L_00015AA4: -/* 00015AA4 00022834 B0 0A 00 28 */ sth r0, 0x28(r10) -/* 00015AA8 00022838 88 1B 00 7D */ lbz r0, 0x7d(r27) -/* 00015AAC 0002283C 81 7F 00 A4 */ lwz r11, 0xa4(r31) -/* 00015AB0 00022840 90 01 03 7C */ stw r0, 0x37c(r1) -/* 00015AB4 00022844 C1 AB 00 00 */ lfs f13, 0x0(r11) -/* 00015AB8 00022848 93 C1 03 78 */ stw r30, 0x378(r1) -/* 00015ABC 0002284C C8 01 03 78 */ lfd f0, 0x378(r1) -/* 00015AC0 00022850 FC 00 F8 28 */ fsub f0, f0, f31 -.L_00015AC4: -/* 00015AC4 00022854 FC 00 00 18 */ frsp f0, f0 -/* 00015AC8 00022858 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00015ACC 0002285C D0 0B 00 08 */ stfs f0, 0x8(r11) -/* 00015AD0 00022860 41 82 5A DC */ beq .L_0001B5AC -/* 00015AD4 00022864 38 00 00 02 */ li r0, 0x2 -/* 00015AD8 00022868 B0 0B 00 28 */ sth r0, 0x28(r11) -/* 00015ADC 0002286C 80 7F 00 A4 */ lwz r3, 0xa4(r31) -/* 00015AE0 00022870 48 01 43 CD */ bl .text+0x143CC -.L_00015AE4: -/* 00015AE4 00022874 88 1B 00 7E */ lbz r0, 0x7e(r27) -.L_00015AE8: -/* 00015AE8 00022878 81 7F 00 A8 */ lwz r11, 0xa8(r31) -/* 00015AEC 0002287C 90 01 03 7C */ stw r0, 0x37c(r1) -/* 00015AF0 00022880 C1 AB 00 08 */ lfs f13, 0x8(r11) -/* 00015AF4 00022884 93 C1 03 78 */ stw r30, 0x378(r1) -/* 00015AF8 00022888 C8 01 03 78 */ lfd f0, 0x378(r1) -/* 00015AFC 0002288C FC 00 F8 28 */ fsub f0, f0, f31 -/* 00015B00 00022890 FC 00 00 18 */ frsp f0, f0 -/* 00015B04 00022894 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00015B08 00022898 D0 0B 00 00 */ stfs f0, 0x0(r11) -/* 00015B0C 0002289C 41 82 5B 18 */ beq .L_0001B624 -/* 00015B10 000228A0 38 00 00 02 */ li r0, 0x2 -/* 00015B14 000228A4 B0 0B 00 28 */ sth r0, 0x28(r11) -/* 00015B18 000228A8 88 1B 00 7F */ lbz r0, 0x7f(r27) -/* 00015B1C 000228AC 81 7F 00 A8 */ lwz r11, 0xa8(r31) -/* 00015B20 000228B0 90 01 03 7C */ stw r0, 0x37c(r1) -.L_00015B24: -/* 00015B24 000228B4 C1 AB 00 00 */ lfs f13, 0x0(r11) -/* 00015B28 000228B8 93 C1 03 78 */ stw r30, 0x378(r1) -/* 00015B2C 000228BC C8 01 03 78 */ lfd f0, 0x378(r1) -/* 00015B30 000228C0 FC 00 F8 28 */ fsub f0, f0, f31 -/* 00015B34 000228C4 FC 00 00 18 */ frsp f0, f0 -/* 00015B38 000228C8 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00015B3C 000228CC D0 0B 00 08 */ stfs f0, 0x8(r11) -/* 00015B40 000228D0 41 82 5B 4C */ beq .L_0001B68C -/* 00015B44 000228D4 38 00 00 02 */ li r0, 0x2 -.L_00015B48: -/* 00015B48 000228D8 B0 0B 00 28 */ sth r0, 0x28(r11) -/* 00015B4C 000228DC 80 7F 00 A8 */ lwz r3, 0xa8(r31) -/* 00015B50 000228E0 48 01 43 CD */ bl .text+0x143CC -/* 00015B54 000228E4 88 1B 00 80 */ lbz r0, 0x80(r27) -/* 00015B58 000228E8 81 7F 00 AC */ lwz r11, 0xac(r31) -/* 00015B5C 000228EC 90 01 03 7C */ stw r0, 0x37c(r1) -/* 00015B60 000228F0 C1 AB 00 08 */ lfs f13, 0x8(r11) -/* 00015B64 000228F4 93 C1 03 78 */ stw r30, 0x378(r1) -/* 00015B68 000228F8 C8 01 03 78 */ lfd f0, 0x378(r1) -/* 00015B6C 000228FC FC 00 F8 28 */ fsub f0, f0, f31 -/* 00015B70 00022900 FC 00 00 18 */ frsp f0, f0 -/* 00015B74 00022904 FC 00 68 00 */ fcmpu cr0, f0, f13 -.L_00015B78: -/* 00015B78 00022908 D0 0B 00 00 */ stfs f0, 0x0(r11) -/* 00015B7C 0002290C 41 82 5B 88 */ beq .L_0001B704 -.L_00015B80: -/* 00015B80 00022910 38 00 00 02 */ li r0, 0x2 -/* 00015B84 00022914 B0 0B 00 28 */ sth r0, 0x28(r11) -/* 00015B88 00022918 88 1B 00 81 */ lbz r0, 0x81(r27) -/* 00015B8C 0002291C 81 7F 00 AC */ lwz r11, 0xac(r31) -/* 00015B90 00022920 90 01 03 7C */ stw r0, 0x37c(r1) -.L_00015B94: -/* 00015B94 00022924 C1 AB 00 00 */ lfs f13, 0x0(r11) -/* 00015B98 00022928 93 C1 03 78 */ stw r30, 0x378(r1) -/* 00015B9C 0002292C C8 01 03 78 */ lfd f0, 0x378(r1) -/* 00015BA0 00022930 FC 00 F8 28 */ fsub f0, f0, f31 -.L_00015BA4: -/* 00015BA4 00022934 FC 00 00 18 */ frsp f0, f0 -/* 00015BA8 00022938 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00015BAC 0002293C D0 0B 00 08 */ stfs f0, 0x8(r11) -/* 00015BB0 00022940 41 82 5B BC */ beq .L_0001B76C -/* 00015BB4 00022944 38 00 00 02 */ li r0, 0x2 -/* 00015BB8 00022948 B0 0B 00 28 */ sth r0, 0x28(r11) -/* 00015BBC 0002294C 80 7F 00 AC */ lwz r3, 0xac(r31) -/* 00015BC0 00022950 48 01 43 CD */ bl .text+0x143CC -/* 00015BC4 00022954 3D 20 00 00 */ lis r9, TheICEManager+0x28@ha -/* 00015BC8 00022958 80 09 00 28 */ lwz r0, TheICEManager+0x28@l(r9) -/* 00015BCC 0002295C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00015BD0 00022960 41 82 5B E4 */ beq RightToLeftVector3__H2ZQ25UMath7Vector3ZQ25UMath7Vector3__14ConversionUtilRCX01RX11_v -/* 00015BD4 00022964 2C 00 00 05 */ cmpwi r0, 0x5 -/* 00015BD8 00022968 41 82 5B E4 */ beq .L_0001B7BC -/* 00015BDC 0002296C 2C 00 00 07 */ cmpwi r0, 0x7 -/* 00015BE0 00022970 40 82 5C 08 */ bne .L_0001B7E8 -/* 00015BE4 00022974 41 92 5B FC */ beq cr4, .L_0001B7E0 -/* 00015BE8 00022978 81 61 03 50 */ lwz r11, 0x350(r1) -/* 00015BEC 0002297C 88 1B 00 0A */ lbz r0, 0xa(r27) -/* 00015BF0 00022980 89 2B 00 0A */ lbz r9, 0xa(r11) -/* 00015BF4 00022984 7C 09 00 00 */ cmpw r9, r0 -/* 00015BF8 00022988 41 82 5C 08 */ beq .L_0001B800 -/* 00015BFC 0002298C 48 01 7B C5 */ bl .text+0x17BC4 -/* 00015C00 00022990 88 7B 00 0A */ lbz r3, 0xa(r27) -/* 00015C04 00022994 48 01 7B 51 */ bl .text+0x17B50 -/* 00015C08 00022998 80 01 03 DC */ lwz r0, 0x3dc(r1) -/* 00015C0C 0002299C 81 81 03 84 */ lwz r12, 0x384(r1) -/* 00015C10 000229A0 7C 08 03 A6 */ mtlr r0 -/* 00015C14 000229A4 B9 C1 03 88 */ lmw r14, 0x388(r1) -/* 00015C18 000229A8 E3 E1 03 D0 */ psq_l f31, 0x3d0(r1), 0, qr0 -/* 00015C1C 000229AC 7D 81 81 20 */ mtcrf 24, r12 -/* 00015C20 000229B0 38 21 03 D8 */ addi r1, r1, 0x3d8 -/* 00015C24 000229B4 4E 80 00 20 */ blr -.endfn SetDesired__8ICEMoverbT1 - -# .text:0x15C28 | size: 0x78 -.fn GetDutch__8ICEMoverf, global -/* 00015C28 000229B8 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 00015C2C 000229BC 7C 08 02 A6 */ mflr r0 -/* 00015C30 000229C0 F3 C1 00 08 */ psq_st f30, 0x8(r1), 0, qr0 -/* 00015C34 000229C4 F3 E1 00 10 */ psq_st f31, 0x10(r1), 0, qr0 -/* 00015C38 000229C8 90 01 00 1C */ stw r0, 0x1c(r1) -/* 00015C3C 000229CC 81 23 00 C4 */ lwz r9, 0xc4(r3) -/* 00015C40 000229D0 FF C0 08 90 */ fmr f30, f1 -.L_00015C44: -/* 00015C44 000229D4 2C 09 00 00 */ cmpwi r9, 0x0 -.L_00015C48: -/* 00015C48 000229D8 41 82 5C 64 */ beq .L_0001B8AC -/* 00015C4C 000229DC 88 09 00 02 */ lbz r0, 0x2(r9) -/* 00015C50 000229E0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00015C54 000229E4 41 82 5C 64 */ beq .L_0001B8B8 -/* 00015C58 000229E8 80 63 00 8C */ lwz r3, 0x8c(r3) -/* 00015C5C 000229EC 48 01 44 15 */ bl .text+0x14414 -/* 00015C60 000229F0 48 01 5C 88 */ b .text+0x15C88 -/* 00015C64 000229F4 81 23 00 8C */ lwz r9, 0x8c(r3) -/* 00015C68 000229F8 C3 E9 00 00 */ lfs f31, 0x0(r9) -/* 00015C6C 000229FC 7D 23 4B 78 */ mr r3, r9 -/* 00015C70 00022A00 48 01 44 7D */ bl .text+0x1447C -/* 00015C74 00022A04 EC 01 07 B2 */ fmuls f0, f1, f30 -/* 00015C78 00022A08 3D 20 00 00 */ lis r9, .rodata+0xC20@ha -/* 00015C7C 00022A0C C0 29 0C 20 */ lfs f1, .rodata+0xC20@l(r9) -/* 00015C80 00022A10 EC 21 F0 28 */ fsubs f1, f1, f30 -/* 00015C84 00022A14 EC 3F 00 7A */ fmadds f1, f31, f1, f0 -/* 00015C88 00022A18 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 00015C8C 00022A1C 7C 08 03 A6 */ mtlr r0 -/* 00015C90 00022A20 E3 C1 00 08 */ psq_l f30, 0x8(r1), 0, qr0 -/* 00015C94 00022A24 E3 E1 00 10 */ psq_l f31, 0x10(r1), 0, qr0 -/* 00015C98 00022A28 38 21 00 18 */ addi r1, r1, 0x18 -/* 00015C9C 00022A2C 4E 80 00 20 */ blr -.endfn GetDutch__8ICEMoverf - -# .text:0x15CA0 | size: 0x8C -.fn GetFOV__8ICEMoverf, global -/* 00015CA0 00022A30 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 00015CA4 00022A34 7C 08 02 A6 */ mflr r0 -/* 00015CA8 00022A38 F3 C1 00 10 */ psq_st f30, 0x10(r1), 0, qr0 -/* 00015CAC 00022A3C F3 E1 00 18 */ psq_st f31, 0x18(r1), 0, qr0 -/* 00015CB0 00022A40 90 01 00 24 */ stw r0, 0x24(r1) -/* 00015CB4 00022A44 81 23 00 C4 */ lwz r9, 0xc4(r3) -/* 00015CB8 00022A48 FF C0 08 90 */ fmr f30, f1 -/* 00015CBC 00022A4C 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00015CC0 00022A50 41 82 5C DC */ beq .L_0001B99C -/* 00015CC4 00022A54 88 09 00 02 */ lbz r0, 0x2(r9) -/* 00015CC8 00022A58 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00015CCC 00022A5C 41 82 5C DC */ beq .L_0001B9A8 -.L_00015CD0: -/* 00015CD0 00022A60 80 63 00 90 */ lwz r3, 0x90(r3) -/* 00015CD4 00022A64 48 01 44 15 */ bl .text+0x14414 -.L_00015CD8: -/* 00015CD8 00022A68 48 01 5D 00 */ b .text+0x15D00 -/* 00015CDC 00022A6C 81 23 00 90 */ lwz r9, 0x90(r3) -.L_00015CE0: -/* 00015CE0 00022A70 C3 E9 00 00 */ lfs f31, 0x0(r9) -/* 00015CE4 00022A74 7D 23 4B 78 */ mr r3, r9 -/* 00015CE8 00022A78 48 01 44 7D */ bl .text+0x1447C -/* 00015CEC 00022A7C 3D 20 00 00 */ lis r9, .rodata+0xC24@ha -/* 00015CF0 00022A80 EC 21 07 B2 */ fmuls f1, f1, f30 -.L_00015CF4: -/* 00015CF4 00022A84 C0 09 0C 24 */ lfs f0, .rodata+0xC24@l(r9) -/* 00015CF8 00022A88 EC 00 F0 28 */ fsubs f0, f0, f30 -/* 00015CFC 00022A8C EC 3F 08 3A */ fmadds f1, f31, f0, f1 -/* 00015D00 00022A90 FC 00 08 90 */ fmr f0, f1 -.L_00015D04: -/* 00015D04 00022A94 FD A0 00 1E */ fctiwz f13, f0 -/* 00015D08 00022A98 D9 A1 00 08 */ stfd f13, 0x8(r1) -/* 00015D0C 00022A9C 80 61 00 0C */ lwz r3, 0xc(r1) -/* 00015D10 00022AA0 54 63 04 3E */ clrlwi r3, r3, 16 -/* 00015D14 00022AA4 80 01 00 24 */ lwz r0, 0x24(r1) -/* 00015D18 00022AA8 7C 08 03 A6 */ mtlr r0 -.L_00015D1C: -/* 00015D1C 00022AAC E3 C1 00 10 */ psq_l f30, 0x10(r1), 0, qr0 -/* 00015D20 00022AB0 E3 E1 00 18 */ psq_l f31, 0x18(r1), 0, qr0 -/* 00015D24 00022AB4 38 21 00 20 */ addi r1, r1, 0x20 -/* 00015D28 00022AB8 4E 80 00 20 */ blr -.endfn GetFOV__8ICEMoverf - -# .text:0x15D2C | size: 0x100 -.fn _._8ICEMover, global -/* 00015D2C 00022ABC 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00015D30 00022AC0 7C 08 02 A6 */ mflr r0 -/* 00015D34 00022AC4 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 00015D38 00022AC8 90 01 00 14 */ stw r0, 0x14(r1) -/* 00015D3C 00022ACC 3D 20 00 00 */ lis r9, _vt.8ICEMover@ha -/* 00015D40 00022AD0 7C 7F 1B 78 */ mr r31, r3 -/* 00015D44 00022AD4 39 29 00 00 */ addi r9, r9, _vt.8ICEMover@l -/* 00015D48 00022AD8 7C 9E 23 78 */ mr r30, r4 -/* 00015D4C 00022ADC 91 3F 00 08 */ stw r9, 0x8(r31) -/* 00015D50 00022AE0 48 01 7B C5 */ bl .text+0x17BC4 -/* 00015D54 00022AE4 80 7F 00 84 */ lwz r3, 0x84(r31) -/* 00015D58 00022AE8 48 00 00 01 */ bl __builtin_delete -/* 00015D5C 00022AEC 80 7F 00 88 */ lwz r3, 0x88(r31) -/* 00015D60 00022AF0 48 00 00 01 */ bl __builtin_delete -.L_00015D64: -/* 00015D64 00022AF4 80 7F 00 8C */ lwz r3, 0x8c(r31) -/* 00015D68 00022AF8 48 00 00 01 */ bl __builtin_delete -/* 00015D6C 00022AFC 80 7F 00 90 */ lwz r3, 0x90(r31) -/* 00015D70 00022B00 48 00 00 01 */ bl __builtin_delete -/* 00015D74 00022B04 80 7F 00 94 */ lwz r3, 0x94(r31) -/* 00015D78 00022B08 48 00 00 01 */ bl __builtin_delete -/* 00015D7C 00022B0C 80 7F 00 98 */ lwz r3, 0x98(r31) -/* 00015D80 00022B10 48 00 00 01 */ bl __builtin_delete -/* 00015D84 00022B14 80 7F 00 9C */ lwz r3, 0x9c(r31) -/* 00015D88 00022B18 48 00 00 01 */ bl __builtin_delete -/* 00015D8C 00022B1C 80 7F 00 A0 */ lwz r3, 0xa0(r31) -/* 00015D90 00022B20 48 00 00 01 */ bl __builtin_delete -/* 00015D94 00022B24 80 7F 00 A4 */ lwz r3, 0xa4(r31) -/* 00015D98 00022B28 48 00 00 01 */ bl __builtin_delete -.L_00015D9C: -/* 00015D9C 00022B2C 80 7F 00 A8 */ lwz r3, 0xa8(r31) -/* 00015DA0 00022B30 48 00 00 01 */ bl __builtin_delete -.L_00015DA4: -/* 00015DA4 00022B34 80 7F 00 AC */ lwz r3, 0xac(r31) -.L_00015DA8: -/* 00015DA8 00022B38 48 00 00 01 */ bl __builtin_delete -/* 00015DAC 00022B3C 80 7F 00 B0 */ lwz r3, 0xb0(r31) -/* 00015DB0 00022B40 48 00 00 01 */ bl __builtin_delete -/* 00015DB4 00022B44 3D 60 00 00 */ lis r11, .rodata+0xC28@ha -/* 00015DB8 00022B48 81 5F 00 1C */ lwz r10, 0x1c(r31) -/* 00015DBC 00022B4C C0 0B 0C 28 */ lfs f0, .rodata+0xC28@l(r11) -/* 00015DC0 00022B50 3D 20 00 00 */ lis r9, .rodata+0xC2C@ha -/* 00015DC4 00022B54 C1 A9 0C 2C */ lfs f13, .rodata+0xC2C@l(r9) -/* 00015DC8 00022B58 3D 60 00 00 */ lis r11, _6Camera.StopUpdating@ha -/* 00015DCC 00022B5C D0 0A 00 CC */ stfs f0, 0xcc(r10) -/* 00015DD0 00022B60 80 0B 00 00 */ lwz r0, _6Camera.StopUpdating@l(r11) -/* 00015DD4 00022B64 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 00015DD8 00022B68 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00015DDC 00022B6C D1 A9 00 C8 */ stfs f13, 0xc8(r9) -/* 00015DE0 00022B70 40 82 5D F4 */ bne .L_0001BBD4 -/* 00015DE4 00022B74 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 00015DE8 00022B78 D1 A9 00 B8 */ stfs f13, 0xb8(r9) -/* 00015DEC 00022B7C 81 7F 00 1C */ lwz r11, 0x1c(r31) -/* 00015DF0 00022B80 D1 AB 00 B4 */ stfs f13, 0xb4(r11) -/* 00015DF4 00022B84 3D 20 00 00 */ lis r9, RealTimeFrames@ha -/* 00015DF8 00022B88 81 7F 00 1C */ lwz r11, 0x1c(r31) -/* 00015DFC 00022B8C 81 49 00 00 */ lwz r10, RealTimeFrames@l(r9) -/* 00015E00 00022B90 38 00 00 01 */ li r0, 0x1 -/* 00015E04 00022B94 90 0B 02 7C */ stw r0, 0x27c(r11) -/* 00015E08 00022B98 7F E3 FB 78 */ mr r3, r31 -/* 00015E0C 00022B9C 91 4B 02 88 */ stw r10, 0x288(r11) -/* 00015E10 00022BA0 7F C4 F3 78 */ mr r4, r30 -/* 00015E14 00022BA4 48 00 20 35 */ bl .L_00017E48 -/* 00015E18 00022BA8 80 01 00 14 */ lwz r0, 0x14(r1) -/* 00015E1C 00022BAC 7C 08 03 A6 */ mtlr r0 -/* 00015E20 00022BB0 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 00015E24 00022BB4 38 21 00 10 */ addi r1, r1, 0x10 -/* 00015E28 00022BB8 4E 80 00 20 */ blr -.endfn _._8ICEMover - -# .text:0x15E2C | size: 0xE8 -.fn GetEye__8ICEMoverPQ23ICE7Vector3f, global -/* 00015E2C 00022BBC 94 21 FF C0 */ stwu r1, -0x40(r1) -/* 00015E30 00022BC0 7C 08 02 A6 */ mflr r0 -/* 00015E34 00022BC4 F3 E1 00 38 */ psq_st f31, 0x38(r1), 0, qr0 -.L_00015E38: -/* 00015E38 00022BC8 BF 81 00 28 */ stmw r28, 0x28(r1) -/* 00015E3C 00022BCC 90 01 00 44 */ stw r0, 0x44(r1) -.L_00015E40: -/* 00015E40 00022BD0 7C 7F 1B 78 */ mr r31, r3 -/* 00015E44 00022BD4 7C 9C 23 78 */ mr r28, r4 -/* 00015E48 00022BD8 81 3F 00 C4 */ lwz r9, 0xc4(r31) -/* 00015E4C 00022BDC FF E0 08 90 */ fmr f31, f1 -/* 00015E50 00022BE0 2C 09 00 00 */ cmpwi r9, 0x0 -.L_00015E54: -/* 00015E54 00022BE4 41 82 5E 70 */ beq .L_0001BCC4 -.L_00015E58: -/* 00015E58 00022BE8 88 09 00 02 */ lbz r0, 0x2(r9) -/* 00015E5C 00022BEC 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00015E60 00022BF0 41 82 5E 70 */ beq .L_0001BCD0 -.L_00015E64: -/* 00015E64 00022BF4 80 7F 00 84 */ lwz r3, 0x84(r31) -/* 00015E68 00022BF8 48 01 48 E5 */ bl .text+0x148E4 -/* 00015E6C 00022BFC 48 01 5E FC */ b .text+0x15EFC -/* 00015E70 00022C00 3D 20 00 00 */ lis r9, .rodata+0xC30@ha -/* 00015E74 00022C04 80 7F 00 84 */ lwz r3, 0x84(r31) -/* 00015E78 00022C08 C0 09 0C 30 */ lfs f0, .rodata+0xC30@l(r9) -/* 00015E7C 00022C0C 3B C1 00 08 */ addi r30, r1, 0x8 -/* 00015E80 00022C10 3B A1 00 18 */ addi r29, r1, 0x18 -/* 00015E84 00022C14 7F C4 F3 78 */ mr r4, r30 -/* 00015E88 00022C18 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 00015E8C 00022C1C D0 01 00 0C */ stfs f0, 0xc(r1) -/* 00015E90 00022C20 D0 1E 00 08 */ stfs f0, 0x8(r30) -/* 00015E94 00022C24 D0 01 00 24 */ stfs f0, 0x24(r1) -/* 00015E98 00022C28 D0 01 00 14 */ stfs f0, 0x14(r1) -/* 00015E9C 00022C2C D0 01 00 18 */ stfs f0, 0x18(r1) -/* 00015EA0 00022C30 D0 01 00 1C */ stfs f0, 0x1c(r1) -/* 00015EA4 00022C34 D0 01 00 20 */ stfs f0, 0x20(r1) -/* 00015EA8 00022C38 48 01 48 AD */ bl .text+0x148AC -/* 00015EAC 00022C3C 80 7F 00 84 */ lwz r3, 0x84(r31) -/* 00015EB0 00022C40 7F A4 EB 78 */ mr r4, r29 -/* 00015EB4 00022C44 48 01 49 45 */ bl .text+0x14944 -/* 00015EB8 00022C48 3D 20 00 00 */ lis r9, .rodata+0xC34@ha -/* 00015EBC 00022C4C C1 7E 00 08 */ lfs f11, 0x8(r30) -/* 00015EC0 00022C50 C0 09 0C 34 */ lfs f0, .rodata+0xC34@l(r9) -/* 00015EC4 00022C54 7F 83 E3 78 */ mr r3, r28 -/* 00015EC8 00022C58 C1 81 00 08 */ lfs f12, 0x8(r1) -/* 00015ECC 00022C5C 7F A5 EB 78 */ mr r5, r29 -/* 00015ED0 00022C60 C1 A1 00 0C */ lfs f13, 0xc(r1) -/* 00015ED4 00022C64 EC 00 F8 28 */ fsubs f0, f0, f31 -/* 00015ED8 00022C68 ED 6B 00 32 */ fmuls f11, f11, f0 -/* 00015EDC 00022C6C 7C 64 1B 78 */ mr r4, r3 -.L_00015EE0: -/* 00015EE0 00022C70 ED 8C 00 32 */ fmuls f12, f12, f0 -/* 00015EE4 00022C74 D1 7C 00 08 */ stfs f11, 0x8(r28) -/* 00015EE8 00022C78 ED AD 00 32 */ fmuls f13, f13, f0 -/* 00015EEC 00022C7C D1 9C 00 00 */ stfs f12, 0x0(r28) -/* 00015EF0 00022C80 D1 BC 00 04 */ stfs f13, 0x4(r28) -/* 00015EF4 00022C84 FC 20 F8 90 */ fmr f1, f31 -/* 00015EF8 00022C88 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -/* 00015EFC 00022C8C 80 01 00 44 */ lwz r0, 0x44(r1) -/* 00015F00 00022C90 7C 08 03 A6 */ mtlr r0 -.L_00015F04: -/* 00015F04 00022C94 BB 81 00 28 */ lmw r28, 0x28(r1) -.L_00015F08: -/* 00015F08 00022C98 E3 E1 00 38 */ psq_l f31, 0x38(r1), 0, qr0 -/* 00015F0C 00022C9C 38 21 00 40 */ addi r1, r1, 0x40 -/* 00015F10 00022CA0 4E 80 00 20 */ blr -.endfn GetEye__8ICEMoverPQ23ICE7Vector3f - -# .text:0x15F14 | size: 0xE8 -.fn GetLook__8ICEMoverPQ23ICE7Vector3f, global -/* 00015F14 00022CA4 94 21 FF C0 */ stwu r1, -0x40(r1) -/* 00015F18 00022CA8 7C 08 02 A6 */ mflr r0 -/* 00015F1C 00022CAC F3 E1 00 38 */ psq_st f31, 0x38(r1), 0, qr0 -/* 00015F20 00022CB0 BF 81 00 28 */ stmw r28, 0x28(r1) -/* 00015F24 00022CB4 90 01 00 44 */ stw r0, 0x44(r1) -/* 00015F28 00022CB8 7C 7F 1B 78 */ mr r31, r3 -/* 00015F2C 00022CBC 7C 9C 23 78 */ mr r28, r4 -/* 00015F30 00022CC0 81 3F 00 C4 */ lwz r9, 0xc4(r31) -/* 00015F34 00022CC4 FF E0 08 90 */ fmr f31, f1 -/* 00015F38 00022CC8 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00015F3C 00022CCC 41 82 5F 58 */ beq .L_0001BE94 -/* 00015F40 00022CD0 88 09 00 03 */ lbz r0, 0x3(r9) -/* 00015F44 00022CD4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00015F48 00022CD8 41 82 5F 58 */ beq .L_0001BEA0 -/* 00015F4C 00022CDC 80 7F 00 88 */ lwz r3, 0x88(r31) -/* 00015F50 00022CE0 48 01 48 E5 */ bl .text+0x148E4 -/* 00015F54 00022CE4 48 01 5F E4 */ b .text+0x15FE4 -/* 00015F58 00022CE8 3D 20 00 00 */ lis r9, .rodata+0xC38@ha -/* 00015F5C 00022CEC 80 7F 00 88 */ lwz r3, 0x88(r31) -/* 00015F60 00022CF0 C0 09 0C 38 */ lfs f0, .rodata+0xC38@l(r9) -.L_00015F64: -/* 00015F64 00022CF4 3B C1 00 08 */ addi r30, r1, 0x8 -/* 00015F68 00022CF8 3B A1 00 18 */ addi r29, r1, 0x18 -/* 00015F6C 00022CFC 7F C4 F3 78 */ mr r4, r30 -/* 00015F70 00022D00 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 00015F74 00022D04 D0 01 00 0C */ stfs f0, 0xc(r1) -/* 00015F78 00022D08 D0 1E 00 08 */ stfs f0, 0x8(r30) -/* 00015F7C 00022D0C D0 01 00 24 */ stfs f0, 0x24(r1) -/* 00015F80 00022D10 D0 01 00 14 */ stfs f0, 0x14(r1) -/* 00015F84 00022D14 D0 01 00 18 */ stfs f0, 0x18(r1) -/* 00015F88 00022D18 D0 01 00 1C */ stfs f0, 0x1c(r1) -/* 00015F8C 00022D1C D0 01 00 20 */ stfs f0, 0x20(r1) -/* 00015F90 00022D20 48 01 48 AD */ bl .text+0x148AC -/* 00015F94 00022D24 80 7F 00 88 */ lwz r3, 0x88(r31) -.L_00015F98: -/* 00015F98 00022D28 7F A4 EB 78 */ mr r4, r29 -/* 00015F9C 00022D2C 48 01 49 45 */ bl .text+0x14944 -.L_00015FA0: -/* 00015FA0 00022D30 3D 20 00 00 */ lis r9, .rodata+0xC3C@ha -/* 00015FA4 00022D34 C1 7E 00 08 */ lfs f11, 0x8(r30) -/* 00015FA8 00022D38 C0 09 0C 3C */ lfs f0, .rodata+0xC3C@l(r9) -/* 00015FAC 00022D3C 7F 83 E3 78 */ mr r3, r28 -/* 00015FB0 00022D40 C1 81 00 08 */ lfs f12, 0x8(r1) -.L_00015FB4: -/* 00015FB4 00022D44 7F A5 EB 78 */ mr r5, r29 -/* 00015FB8 00022D48 C1 A1 00 0C */ lfs f13, 0xc(r1) -/* 00015FBC 00022D4C EC 00 F8 28 */ fsubs f0, f0, f31 -/* 00015FC0 00022D50 ED 6B 00 32 */ fmuls f11, f11, f0 -.L_00015FC4: -/* 00015FC4 00022D54 7C 64 1B 78 */ mr r4, r3 -/* 00015FC8 00022D58 ED 8C 00 32 */ fmuls f12, f12, f0 -/* 00015FCC 00022D5C D1 7C 00 08 */ stfs f11, 0x8(r28) -/* 00015FD0 00022D60 ED AD 00 32 */ fmuls f13, f13, f0 -/* 00015FD4 00022D64 D1 9C 00 00 */ stfs f12, 0x0(r28) -/* 00015FD8 00022D68 D1 BC 00 04 */ stfs f13, 0x4(r28) -/* 00015FDC 00022D6C FC 20 F8 90 */ fmr f1, f31 -/* 00015FE0 00022D70 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -/* 00015FE4 00022D74 80 01 00 44 */ lwz r0, 0x44(r1) -/* 00015FE8 00022D78 7C 08 03 A6 */ mtlr r0 -/* 00015FEC 00022D7C BB 81 00 28 */ lmw r28, 0x28(r1) -/* 00015FF0 00022D80 E3 E1 00 38 */ psq_l f31, 0x38(r1), 0, qr0 -/* 00015FF4 00022D84 38 21 00 40 */ addi r1, r1, 0x40 -/* 00015FF8 00022D88 4E 80 00 20 */ blr -.endfn GetLook__8ICEMoverPQ23ICE7Vector3f - -# .text:0x15FFC | size: 0x48 -# GetICEAnchor() -.fn GetICEAnchor__Fv, global -/* 00015FFC 00022D8C 3D 20 00 00 */ lis r9, eViews+0x68@ha -/* 00016000 00022D90 39 40 00 00 */ li r10, 0x0 -/* 00016004 00022D94 39 29 00 68 */ addi r9, r9, eViews+0x68@l -/* 00016008 00022D98 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0001600C 00022D9C 41 82 60 24 */ beq .L_0001C030 -/* 00016010 00022DA0 81 69 00 3C */ lwz r11, 0x3c(r9) -/* 00016014 00022DA4 38 09 00 3C */ addi r0, r9, 0x3c -/* 00016018 00022DA8 7C 0B 00 00 */ cmpw r11, r0 -/* 0001601C 00022DAC 41 82 60 24 */ beq .L_0001C040 -/* 00016020 00022DB0 7D 6A 5B 78 */ mr r10, r11 -/* 00016024 00022DB4 2C 0A 00 00 */ cmpwi r10, 0x0 -/* 00016028 00022DB8 38 60 00 00 */ li r3, 0x0 -/* 0001602C 00022DBC 4D 82 00 20 */ beqlr -/* 00016030 00022DC0 80 0A 00 0C */ lwz r0, 0xc(r10) -/* 00016034 00022DC4 2C 00 00 0E */ cmpwi r0, 0xe -/* 00016038 00022DC8 4C 82 00 20 */ bnelr -/* 0001603C 00022DCC 80 6A 00 80 */ lwz r3, 0x80(r10) -/* 00016040 00022DD0 4E 80 00 20 */ blr -.endfn GetICEAnchor__Fv - -# .text:0x16044 | size: 0xE48 -.fn Update__8ICEMoverf, global -/* 00016044 00022DD4 94 21 FE 40 */ stwu r1, -0x1c0(r1) -/* 00016048 00022DD8 7C 08 02 A6 */ mflr r0 -/* 0001604C 00022DDC 7D 80 00 26 */ mfcr r12 -/* 00016050 00022DE0 F3 41 01 90 */ psq_st f26, 0x190(r1), 0, qr0 -/* 00016054 00022DE4 F3 61 01 98 */ psq_st f27, 0x198(r1), 0, qr0 -.L_00016058: -/* 00016058 00022DE8 F3 81 01 A0 */ psq_st f28, 0x1a0(r1), 0, qr0 -/* 0001605C 00022DEC F3 A1 01 A8 */ psq_st f29, 0x1a8(r1), 0, qr0 -/* 00016060 00022DF0 F3 C1 01 B0 */ psq_st f30, 0x1b0(r1), 0, qr0 -/* 00016064 00022DF4 F3 E1 01 B8 */ psq_st f31, 0x1b8(r1), 0, qr0 -/* 00016068 00022DF8 BF 01 01 70 */ stmw r24, 0x170(r1) -/* 0001606C 00022DFC 90 01 01 C4 */ stw r0, 0x1c4(r1) -/* 00016070 00022E00 91 81 01 6C */ stw r12, 0x16c(r1) -/* 00016074 00022E04 3D 20 00 00 */ lis r9, TheICEManager@ha -/* 00016078 00022E08 39 29 00 00 */ addi r9, r9, TheICEManager@l -/* 0001607C 00022E0C 3C E0 43 30 */ lis r7, 0x4330 -/* 00016080 00022E10 80 09 00 7C */ lwz r0, 0x7c(r9) -/* 00016084 00022E14 3D 60 00 00 */ lis r11, .rodata+0xC40@ha -/* 00016088 00022E18 C9 AB 0C 40 */ lfd f13, .rodata+0xC40@l(r11) -/* 0001608C 00022E1C 3D 00 00 00 */ lis r8, .rodata+0xC48@ha -/* 00016090 00022E20 90 01 01 64 */ stw r0, 0x164(r1) -/* 00016094 00022E24 7C 7F 1B 78 */ mr r31, r3 -/* 00016098 00022E28 C1 88 0C 48 */ lfs f12, .rodata+0xC48@l(r8) -/* 0001609C 00022E2C FF A0 08 90 */ fmr f29, f1 -/* 000160A0 00022E30 90 E1 01 60 */ stw r7, 0x160(r1) -/* 000160A4 00022E34 3B A0 00 00 */ li r29, 0x0 -/* 000160A8 00022E38 83 49 00 24 */ lwz r26, 0x24(r9) -/* 000160AC 00022E3C C8 01 01 60 */ lfd f0, 0x160(r1) -/* 000160B0 00022E40 FC 00 68 28 */ fsub f0, f0, f13 -/* 000160B4 00022E44 FC 00 00 18 */ frsp f0, f0 -/* 000160B8 00022E48 FC 00 60 00 */ fcmpu cr0, f0, f12 -/* 000160BC 00022E4C 40 82 60 D4 */ bne .L_0001C190 -/* 000160C0 00022E50 3C 60 00 00 */ lis r3, TheGameFlowManager@ha -/* 000160C4 00022E54 38 63 00 00 */ addi r3, r3, TheGameFlowManager@l -/* 000160C8 00022E58 48 00 00 01 */ bl IsPaused__15GameFlowManager -/* 000160CC 00022E5C 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000160D0 00022E60 40 82 6E 58 */ bne .L_0001CF28 -/* 000160D4 00022E64 20 1A 00 00 */ subfic r0, r26, 0x0 -/* 000160D8 00022E68 7F C0 D1 15 */ adde. r30, r0, r26 -/* 000160DC 00022E6C 40 82 61 10 */ bne .L_0001C1EC -.L_000160E0: -/* 000160E0 00022E70 7F 43 D3 78 */ mr r3, r26 -/* 000160E4 00022E74 48 01 7E 91 */ bl .text+0x17E90 -/* 000160E8 00022E78 68 7D 00 03 */ xori r29, r3, 0x3 -/* 000160EC 00022E7C 20 1D 00 00 */ subfic r0, r29, 0x0 -/* 000160F0 00022E80 7F A0 E9 14 */ adde r29, r0, r29 -/* 000160F4 00022E84 7F 43 D3 78 */ mr r3, r26 -/* 000160F8 00022E88 48 01 7E 91 */ bl .text+0x17E90 -/* 000160FC 00022E8C 2C 03 00 02 */ cmpwi r3, 0x2 -/* 00016100 00022E90 41 82 61 10 */ beq .L_0001C210 -/* 00016104 00022E94 3D 20 00 00 */ lis r9, bMirrorICEData@ha -.L_00016108: -/* 00016108 00022E98 38 00 00 00 */ li r0, 0x0 -/* 0001610C 00022E9C 90 09 00 00 */ stw r0, bMirrorICEData@l(r9) -/* 00016110 00022EA0 38 00 00 00 */ li r0, 0x0 -/* 00016114 00022EA4 3C 60 00 00 */ lis r3, TheICEManager@ha -/* 00016118 00022EA8 90 1F 00 C8 */ stw r0, 0xc8(r31) -/* 0001611C 00022EAC 38 63 00 00 */ addi r3, r3, TheICEManager@l -/* 00016120 00022EB0 48 01 83 0D */ bl .text+0x1830C -/* 00016124 00022EB4 7C 65 1B 78 */ mr r5, r3 -/* 00016128 00022EB8 38 80 00 00 */ li r4, 0x0 -/* 0001612C 00022EBC 7F E3 FB 78 */ mr r3, r31 -/* 00016130 00022EC0 48 01 4D 51 */ bl .text+0x14D50 -/* 00016134 00022EC4 38 61 00 08 */ addi r3, r1, 0x8 -/* 00016138 00022EC8 48 00 00 01 */ bl PSMTX44Identity -/* 0001613C 00022ECC 80 1F 00 BC */ lwz r0, 0xbc(r31) -/* 00016140 00022ED0 2C 00 00 03 */ cmpwi r0, 0x3 -/* 00016144 00022ED4 41 82 61 54 */ beq .L_0001C298 -/* 00016148 00022ED8 80 1F 00 C0 */ lwz r0, 0xc0(r31) -/* 0001614C 00022EDC 2C 00 00 03 */ cmpwi r0, 0x3 -/* 00016150 00022EE0 40 82 61 80 */ bne .L_0001C2D0 -/* 00016154 00022EE4 48 01 9F D9 */ bl .text+0x19FD8 -/* 00016158 00022EE8 7C 6B 1B 79 */ mr. r11, r3 -/* 0001615C 00022EEC 41 82 6E 58 */ beq .L_0001CFB4 -/* 00016160 00022EF0 81 2B 00 00 */ lwz r9, 0x0(r11) -/* 00016164 00022EF4 A8 69 00 68 */ lha r3, 0x68(r9) -.L_00016168: -/* 00016168 00022EF8 80 09 00 6C */ lwz r0, 0x6c(r9) -.L_0001616C: -/* 0001616C 00022EFC 7C 6B 1A 14 */ add r3, r11, r3 -.L_00016170: -/* 00016170 00022F00 7C 08 03 A6 */ mtlr r0 -/* 00016174 00022F04 4E 80 00 21 */ blrl -/* 00016178 00022F08 38 81 00 08 */ addi r4, r1, 0x8 -/* 0001617C 00022F0C 48 00 00 01 */ bl PSMTX44Copy -.L_00016180: -/* 00016180 00022F10 2E 1E 00 00 */ cmpwi cr4, r30, 0x0 -/* 00016184 00022F14 41 92 61 98 */ beq cr4, .L_0001C31C -.L_00016188: -/* 00016188 00022F18 3C 60 00 00 */ lis r3, TheICEManager@ha -/* 0001618C 00022F1C 38 63 00 00 */ addi r3, r3, TheICEManager@l -/* 00016190 00022F20 48 01 84 D5 */ bl .text+0x184D4 -/* 00016194 00022F24 48 01 61 A0 */ b .text+0x161A0 -/* 00016198 00022F28 7F 43 D3 78 */ mr r3, r26 -/* 0001619C 00022F2C 48 01 7E E9 */ bl .text+0x17EE8 -/* 000161A0 00022F30 FF 80 08 90 */ fmr f28, f1 -/* 000161A4 00022F34 C0 1F 00 B8 */ lfs f0, 0xb8(r31) -/* 000161A8 00022F38 3D 20 00 00 */ lis r9, .rodata+0xC4C@ha -/* 000161AC 00022F3C C1 7F 00 B4 */ lfs f11, 0xb4(r31) -/* 000161B0 00022F40 3D 60 00 00 */ lis r11, .rodata+0xC48@ha -.L_000161B4: -/* 000161B4 00022F44 C1 A9 0C 4C */ lfs f13, .rodata+0xC4C@l(r9) -/* 000161B8 00022F48 ED 80 58 28 */ fsubs f12, f0, f11 -/* 000161BC 00022F4C C3 6B 0C 48 */ lfs f27, .rodata+0xC48@l(r11) -/* 000161C0 00022F50 FC 00 62 10 */ fabs f0, f12 -/* 000161C4 00022F54 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 000161C8 00022F58 4C 62 03 82 */ cror un, eq, lt -/* 000161CC 00022F5C 41 83 61 D8 */ bso GetAction__Q28CameraAI8Director -/* 000161D0 00022F60 EC 1C 58 28 */ fsubs f0, f28, f11 -/* 000161D4 00022F64 EF 60 60 24 */ fdivs f27, f0, f12 -/* 000161D8 00022F68 3D 20 00 00 */ lis r9, .rodata+0xC50@ha -/* 000161DC 00022F6C C3 E9 0C 50 */ lfs f31, .rodata+0xC50@l(r9) -.L_000161E0: -/* 000161E0 00022F70 FC 1C F8 00 */ fcmpu cr0, f28, f31 -/* 000161E4 00022F74 41 80 62 00 */ blt .L_0001C3E4 -/* 000161E8 00022F78 3C 80 00 00 */ lis r4, .rodata@ha -/* 000161EC 00022F7C 3C 60 00 00 */ lis r3, TheICEManager@ha -/* 000161F0 00022F80 38 84 00 00 */ addi r4, r4, .rodata@l -/* 000161F4 00022F84 38 63 00 00 */ addi r3, r3, TheICEManager@l -/* 000161F8 00022F88 7C 85 23 78 */ mr r5, r4 -/* 000161FC 00022F8C 48 01 88 7D */ bl .text+0x1887C -/* 00016200 00022F90 80 7F 00 AC */ lwz r3, 0xac(r31) -/* 00016204 00022F94 FC 20 D8 90 */ fmr f1, f27 -/* 00016208 00022F98 48 01 44 15 */ bl .text+0x14414 -/* 0001620C 00022F9C 3D 20 00 00 */ lis r9, .rodata+0xC48@ha -/* 00016210 00022FA0 FF C0 08 90 */ fmr f30, f1 -/* 00016214 00022FA4 C0 09 0C 48 */ lfs f0, .rodata+0xC48@l(r9) -/* 00016218 00022FA8 FC 1E 00 00 */ fcmpu cr0, f30, f0 -/* 0001621C 00022FAC 41 80 62 40 */ blt .L_0001C45C -/* 00016220 00022FB0 FC 1E F8 00 */ fcmpu cr0, f30, f31 -/* 00016224 00022FB4 41 80 62 2C */ blt .L_0001C450 -/* 00016228 00022FB8 FF C0 F8 90 */ fmr f30, f31 -/* 0001622C 00022FBC 3D 20 00 00 */ lis r9, .rodata+0xC54@ha -/* 00016230 00022FC0 81 7F 00 1C */ lwz r11, 0x1c(r31) -/* 00016234 00022FC4 C0 09 0C 54 */ lfs f0, .rodata+0xC54@l(r9) -/* 00016238 00022FC8 EF DE 00 32 */ fmuls f30, f30, f0 -/* 0001623C 00022FCC D3 CB 00 CC */ stfs f30, 0xcc(r11) -/* 00016240 00022FD0 3D 20 00 00 */ lis r9, .rodata+0xC50@ha -/* 00016244 00022FD4 C0 09 0C 50 */ lfs f0, .rodata+0xC50@l(r9) -/* 00016248 00022FD8 FC 1E 00 00 */ fcmpu cr0, f30, f0 -/* 0001624C 00022FDC 4C 62 0B 82 */ cror un, eq, gt -/* 00016250 00022FE0 41 83 62 58 */ bso .L_0001C4A8 -/* 00016254 00022FE4 FF C0 00 90 */ fmr f30, f0 -/* 00016258 00022FE8 80 7F 00 94 */ lwz r3, 0x94(r31) -/* 0001625C 00022FEC FC 20 D8 90 */ fmr f1, f27 -/* 00016260 00022FF0 48 01 44 15 */ bl .text+0x14414 -/* 00016264 00022FF4 3D 20 00 00 */ lis r9, .rodata+0xC48@ha -/* 00016268 00022FF8 C0 09 0C 48 */ lfs f0, .rodata+0xC48@l(r9) -.L_0001626C: -/* 0001626C 00022FFC FC 01 00 00 */ fcmpu cr0, f1, f0 -/* 00016270 00023000 41 80 62 7C */ blt .L_0001C4EC -.L_00016274: -/* 00016274 00023004 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 00016278 00023008 D0 29 00 BC */ stfs f1, 0xbc(r9) -/* 0001627C 0002300C 7F E3 FB 78 */ mr r3, r31 -/* 00016280 00023010 FC 20 D8 90 */ fmr f1, f27 -.L_00016284: -/* 00016284 00023014 48 01 5C A1 */ bl .text+0x15CA0 -/* 00016288 00023018 7C 63 1B 79 */ mr. r3, r3 -/* 0001628C 0002301C 41 82 62 A8 */ beq .L_0001C534 -/* 00016290 00023020 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha -/* 00016294 00023024 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) -/* 00016298 00023028 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0001629C 0002302C 40 82 62 A8 */ bne .L_0001C544 -/* 000162A0 00023030 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 000162A4 00023034 B0 69 00 C4 */ sth r3, 0xc4(r9) -/* 000162A8 00023038 3D 20 00 00 */ lis r9, .rodata+0xC48@ha -/* 000162AC 0002303C 38 81 00 48 */ addi r4, r1, 0x48 -/* 000162B0 00023040 C3 E9 0C 48 */ lfs f31, .rodata+0xC48@l(r9) -/* 000162B4 00023044 3B C1 00 58 */ addi r30, r1, 0x58 -/* 000162B8 00023048 7C 98 23 78 */ mr r24, r4 -/* 000162BC 0002304C 7F E3 FB 78 */ mr r3, r31 -/* 000162C0 00023050 FC 20 D8 90 */ fmr f1, f27 -/* 000162C4 00023054 D3 E1 00 48 */ stfs f31, 0x48(r1) -/* 000162C8 00023058 D3 E1 00 4C */ stfs f31, 0x4c(r1) -.L_000162CC: -/* 000162CC 0002305C 7F D9 F3 78 */ mr r25, r30 -.L_000162D0: -/* 000162D0 00023060 D3 E1 00 50 */ stfs f31, 0x50(r1) -/* 000162D4 00023064 D3 E1 00 54 */ stfs f31, 0x54(r1) -/* 000162D8 00023068 D3 E1 00 58 */ stfs f31, 0x58(r1) -/* 000162DC 0002306C D3 E1 00 5C */ stfs f31, 0x5c(r1) -/* 000162E0 00023070 D3 E1 00 60 */ stfs f31, 0x60(r1) -/* 000162E4 00023074 D3 E1 00 64 */ stfs f31, 0x64(r1) -/* 000162E8 00023078 48 01 5E 2D */ bl .text+0x15E2C -/* 000162EC 0002307C 7F E3 FB 78 */ mr r3, r31 -/* 000162F0 00023080 7F C4 F3 78 */ mr r4, r30 -/* 000162F4 00023084 FC 20 D8 90 */ fmr f1, f27 -/* 000162F8 00023088 48 01 5F 15 */ bl .text+0x15F14 -.L_000162FC: -/* 000162FC 0002308C 81 3F 00 C4 */ lwz r9, 0xc4(r31) -/* 00016300 00023090 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00016304 00023094 40 82 63 9C */ bne .L_0001C6A0 -/* 00016308 00023098 81 7F 00 80 */ lwz r11, 0x80(r31) -/* 0001630C 0002309C 39 01 00 68 */ addi r8, r1, 0x68 -/* 00016310 000230A0 3C E0 00 00 */ lis r7, .rodata+0xC50@ha -/* 00016314 000230A4 38 A1 00 78 */ addi r5, r1, 0x78 -/* 00016318 000230A8 83 CB 00 10 */ lwz r30, 0x10(r11) -/* 0001631C 000230AC 39 2B 00 10 */ addi r9, r11, 0x10 -/* 00016320 000230B0 80 09 00 0C */ lwz r0, 0xc(r9) -/* 00016324 000230B4 39 49 00 10 */ addi r10, r9, 0x10 -/* 00016328 000230B8 83 A9 00 04 */ lwz r29, 0x4(r9) -/* 0001632C 000230BC 38 CB 00 30 */ addi r6, r11, 0x30 -/* 00016330 000230C0 80 89 00 08 */ lwz r4, 0x8(r9) -/* 00016334 000230C4 38 61 00 88 */ addi r3, r1, 0x88 -.L_00016338: -/* 00016338 000230C8 93 C1 00 68 */ stw r30, 0x68(r1) -/* 0001633C 000230CC 90 08 00 0C */ stw r0, 0xc(r8) -/* 00016340 000230D0 93 A8 00 04 */ stw r29, 0x4(r8) -/* 00016344 000230D4 90 88 00 08 */ stw r4, 0x8(r8) -/* 00016348 000230D8 C1 67 0C 50 */ lfs f11, .rodata+0xC50@l(r7) -/* 0001634C 000230DC 80 09 00 10 */ lwz r0, 0x10(r9) -/* 00016350 000230E0 81 0A 00 0C */ lwz r8, 0xc(r10) -/* 00016354 000230E4 81 2A 00 04 */ lwz r9, 0x4(r10) -/* 00016358 000230E8 80 EA 00 08 */ lwz r7, 0x8(r10) -/* 0001635C 000230EC 90 01 00 78 */ stw r0, 0x78(r1) -/* 00016360 000230F0 91 05 00 0C */ stw r8, 0xc(r5) -/* 00016364 000230F4 91 25 00 04 */ stw r9, 0x4(r5) -/* 00016368 000230F8 90 E5 00 08 */ stw r7, 0x8(r5) -/* 0001636C 000230FC 80 0B 00 30 */ lwz r0, 0x30(r11) -/* 00016370 00023100 81 26 00 0C */ lwz r9, 0xc(r6) -/* 00016374 00023104 81 46 00 04 */ lwz r10, 0x4(r6) -/* 00016378 00023108 81 06 00 08 */ lwz r8, 0x8(r6) -/* 0001637C 0002310C 90 01 00 88 */ stw r0, 0x88(r1) -.L_00016380: -/* 00016380 00023110 91 23 00 0C */ stw r9, 0xc(r3) -.L_00016384: -/* 00016384 00023114 91 43 00 04 */ stw r10, 0x4(r3) -.L_00016388: -/* 00016388 00023118 91 03 00 08 */ stw r8, 0x8(r3) -/* 0001638C 0002311C C1 8B 00 08 */ lfs f12, 0x8(r11) -/* 00016390 00023120 C0 0B 00 00 */ lfs f0, 0x0(r11) -/* 00016394 00023124 C1 AB 00 04 */ lfs f13, 0x4(r11) -.L_00016398: -/* 00016398 00023128 48 01 65 F0 */ b .text+0x165F0 -/* 0001639C 0002312C 88 09 00 08 */ lbz r0, 0x8(r9) -/* 000163A0 00023130 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000163A4 00023134 40 82 65 60 */ bne .L_0001C904 -/* 000163A8 00023138 88 09 00 09 */ lbz r0, 0x9(r9) -/* 000163AC 0002313C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000163B0 00023140 41 82 63 BC */ beq .L_0001C76C -/* 000163B4 00023144 2C 1D 00 00 */ cmpwi r29, 0x0 -/* 000163B8 00023148 40 82 64 4C */ bne .L_0001C804 -/* 000163BC 0002314C 81 7F 00 80 */ lwz r11, 0x80(r31) -/* 000163C0 00023150 3D 20 00 00 */ lis r9, .rodata+0xC50@ha -/* 000163C4 00023154 C1 49 0C 50 */ lfs f10, .rodata+0xC50@l(r9) -/* 000163C8 00023158 C1 6B 00 10 */ lfs f11, 0x10(r11) -/* 000163CC 0002315C 39 2B 00 10 */ addi r9, r11, 0x10 -/* 000163D0 00023160 C0 0B 00 14 */ lfs f0, 0x14(r11) -/* 000163D4 00023164 C1 AB 00 18 */ lfs f13, 0x18(r11) -/* 000163D8 00023168 C1 8B 00 1C */ lfs f12, 0x1c(r11) -/* 000163DC 0002316C D1 61 00 68 */ stfs f11, 0x68(r1) -/* 000163E0 00023170 D0 01 00 6C */ stfs f0, 0x6c(r1) -/* 000163E4 00023174 D1 A1 00 70 */ stfs f13, 0x70(r1) -/* 000163E8 00023178 D1 81 00 74 */ stfs f12, 0x74(r1) -/* 000163EC 0002317C C1 69 00 1C */ lfs f11, 0x1c(r9) -/* 000163F0 00023180 C0 09 00 10 */ lfs f0, 0x10(r9) -/* 000163F4 00023184 C1 A9 00 14 */ lfs f13, 0x14(r9) -/* 000163F8 00023188 C1 89 00 18 */ lfs f12, 0x18(r9) -/* 000163FC 0002318C D0 01 00 78 */ stfs f0, 0x78(r1) -/* 00016400 00023190 D1 A1 00 7C */ stfs f13, 0x7c(r1) -/* 00016404 00023194 D1 81 00 80 */ stfs f12, 0x80(r1) -/* 00016408 00023198 D1 61 00 84 */ stfs f11, 0x84(r1) -/* 0001640C 0002319C C0 0B 00 30 */ lfs f0, 0x30(r11) -/* 00016410 000231A0 C1 AB 00 34 */ lfs f13, 0x34(r11) -/* 00016414 000231A4 C1 8B 00 38 */ lfs f12, 0x38(r11) -/* 00016418 000231A8 C1 6B 00 3C */ lfs f11, 0x3c(r11) -/* 0001641C 000231AC D0 01 00 88 */ stfs f0, 0x88(r1) -/* 00016420 000231B0 D1 A1 00 8C */ stfs f13, 0x8c(r1) -/* 00016424 000231B4 D1 81 00 90 */ stfs f12, 0x90(r1) -/* 00016428 000231B8 D1 61 00 94 */ stfs f11, 0x94(r1) -/* 0001642C 000231BC C1 8B 00 08 */ lfs f12, 0x8(r11) -/* 00016430 000231C0 C0 0B 00 00 */ lfs f0, 0x0(r11) -/* 00016434 000231C4 C1 AB 00 04 */ lfs f13, 0x4(r11) -/* 00016438 000231C8 D0 01 00 98 */ stfs f0, 0x98(r1) -.L_0001643C: -/* 0001643C 000231CC D1 A1 00 9C */ stfs f13, 0x9c(r1) -.L_00016440: -/* 00016440 000231D0 D1 81 00 A0 */ stfs f12, 0xa0(r1) -/* 00016444 000231D4 D1 41 00 A4 */ stfs f10, 0xa4(r1) -/* 00016448 000231D8 48 01 66 00 */ b .text+0x16600 -/* 0001644C 000231DC 81 5F 00 80 */ lwz r10, 0x80(r31) -/* 00016450 000231E0 3D 20 00 00 */ lis r9, .rodata+0xC58@ha -/* 00016454 000231E4 3D 60 00 00 */ lis r11, .rodata+0xC5C@ha -/* 00016458 000231E8 C1 89 0C 58 */ lfs f12, .rodata+0xC58@l(r9) -/* 0001645C 000231EC C0 0A 00 00 */ lfs f0, 0x0(r10) -/* 00016460 000231F0 3B C1 00 68 */ addi r30, r1, 0x68 -/* 00016464 000231F4 C1 6B 0C 5C */ lfs f11, .rodata+0xC5C@l(r11) -/* 00016468 000231F8 3B 81 00 78 */ addi r28, r1, 0x78 -/* 0001646C 000231FC C1 BF 01 0C */ lfs f13, 0x10c(r31) -/* 00016470 00023200 3B A1 00 88 */ addi r29, r1, 0x88 -/* 00016474 00023204 ED 9C 5B 3A */ fmadds f12, f28, f12, f11 -/* 00016478 00023208 C1 5F 01 10 */ lfs f10, 0x110(r31) -/* 0001647C 0002320C EC 00 68 28 */ fsubs f0, f0, f13 -/* 00016480 00023210 C1 7F 01 14 */ lfs f11, 0x114(r31) -/* 00016484 00023214 EC 00 6B 3A */ fmadds f0, f0, f12, f13 -/* 00016488 00023218 C1 3F 01 1C */ lfs f9, 0x11c(r31) -/* 0001648C 0002321C D0 1F 01 0C */ stfs f0, 0x10c(r31) -/* 00016490 00023220 7F C3 F3 78 */ mr r3, r30 -/* 00016494 00023224 C1 1F 01 20 */ lfs f8, 0x120(r31) -/* 00016498 00023228 3B 7F 01 1C */ addi r27, r31, 0x11c -/* 0001649C 0002322C C1 AA 00 04 */ lfs f13, 0x4(r10) -/* 000164A0 00023230 C0 FF 01 24 */ lfs f7, 0x124(r31) -/* 000164A4 00023234 ED AD 50 28 */ fsubs f13, f13, f10 -/* 000164A8 00023238 ED AD 53 3A */ fmadds f13, f13, f12, f10 -/* 000164AC 0002323C D1 BF 01 10 */ stfs f13, 0x110(r31) -/* 000164B0 00023240 C0 0A 00 08 */ lfs f0, 0x8(r10) -/* 000164B4 00023244 EC 00 58 28 */ fsubs f0, f0, f11 -/* 000164B8 00023248 EC 00 5B 3A */ fmadds f0, f0, f12, f11 -/* 000164BC 0002324C D0 1F 01 14 */ stfs f0, 0x114(r31) -/* 000164C0 00023250 C1 AA 00 10 */ lfs f13, 0x10(r10) -.L_000164C4: -/* 000164C4 00023254 ED AD 48 28 */ fsubs f13, f13, f9 -/* 000164C8 00023258 ED AD 4B 3A */ fmadds f13, f13, f12, f9 -/* 000164CC 0002325C D1 BF 01 1C */ stfs f13, 0x11c(r31) -.L_000164D0: -/* 000164D0 00023260 C0 0A 00 14 */ lfs f0, 0x14(r10) -/* 000164D4 00023264 EC 00 40 28 */ fsubs f0, f0, f8 -.L_000164D8: -/* 000164D8 00023268 EC 00 43 3A */ fmadds f0, f0, f12, f8 -/* 000164DC 0002326C D0 1F 01 20 */ stfs f0, 0x120(r31) -/* 000164E0 00023270 C1 AA 00 18 */ lfs f13, 0x18(r10) -/* 000164E4 00023274 ED AD 38 28 */ fsubs f13, f13, f7 -/* 000164E8 00023278 ED AD 3B 3A */ fmadds f13, f13, f12, f7 -.L_000164EC: -/* 000164EC 0002327C D1 BF 01 24 */ stfs f13, 0x124(r31) -/* 000164F0 00023280 48 00 00 01 */ bl PSMTX44Identity -/* 000164F4 00023284 7F 63 DB 78 */ mr r3, r27 -/* 000164F8 00023288 7C 64 1B 78 */ mr r4, r3 -.L_000164FC: -/* 000164FC 0002328C 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -/* 00016500 00023290 C1 9F 01 1C */ lfs f12, 0x11c(r31) -/* 00016504 00023294 7F A4 EB 78 */ mr r4, r29 -/* 00016508 00023298 C1 BF 01 20 */ lfs f13, 0x120(r31) -/* 0001650C 0002329C 7F C5 F3 78 */ mr r5, r30 -/* 00016510 000232A0 C0 1F 01 24 */ lfs f0, 0x124(r31) -/* 00016514 000232A4 7F 83 E3 78 */ mr r3, r28 -/* 00016518 000232A8 D1 81 00 68 */ stfs f12, 0x68(r1) -/* 0001651C 000232AC D1 A1 00 6C */ stfs f13, 0x6c(r1) -/* 00016520 000232B0 D0 01 00 70 */ stfs f0, 0x70(r1) -/* 00016524 000232B4 D3 E1 00 74 */ stfs f31, 0x74(r1) -/* 00016528 000232B8 48 00 00 01 */ bl bCross__FP8bVector3PC8bVector3T1 -/* 0001652C 000232BC 7F A3 EB 78 */ mr r3, r29 -/* 00016530 000232C0 7F C4 F3 78 */ mr r4, r30 -/* 00016534 000232C4 7F 85 E3 78 */ mr r5, r28 -/* 00016538 000232C8 48 00 00 01 */ bl bCross__FP8bVector3PC8bVector3T1 -/* 0001653C 000232CC 3D 20 00 00 */ lis r9, .rodata+0xC50@ha -/* 00016540 000232D0 C1 9F 01 0C */ lfs f12, 0x10c(r31) -/* 00016544 000232D4 C0 1F 01 10 */ lfs f0, 0x110(r31) -/* 00016548 000232D8 C1 BF 01 14 */ lfs f13, 0x114(r31) -/* 0001654C 000232DC C1 69 0C 50 */ lfs f11, .rodata+0xC50@l(r9) -/* 00016550 000232E0 D1 81 00 98 */ stfs f12, 0x98(r1) -/* 00016554 000232E4 D0 01 00 9C */ stfs f0, 0x9c(r1) -/* 00016558 000232E8 D1 A1 00 A0 */ stfs f13, 0xa0(r1) -/* 0001655C 000232EC 48 01 65 FC */ b .text+0x165FC -/* 00016560 000232F0 80 1F 00 CC */ lwz r0, 0xcc(r31) -/* 00016564 000232F4 39 3F 00 CC */ addi r9, r31, 0xcc -/* 00016568 000232F8 80 69 00 0C */ lwz r3, 0xc(r9) -/* 0001656C 000232FC 39 61 00 68 */ addi r11, r1, 0x68 -/* 00016570 00023300 83 C9 00 04 */ lwz r30, 0x4(r9) -/* 00016574 00023304 39 5F 00 DC */ addi r10, r31, 0xdc -/* 00016578 00023308 80 A9 00 08 */ lwz r5, 0x8(r9) -/* 0001657C 0002330C 39 01 00 78 */ addi r8, r1, 0x78 -.L_00016580: -/* 00016580 00023310 90 01 00 68 */ stw r0, 0x68(r1) -/* 00016584 00023314 38 FF 00 EC */ addi r7, r31, 0xec -/* 00016588 00023318 38 C1 00 88 */ addi r6, r1, 0x88 -/* 0001658C 0002331C 3F A0 00 00 */ lis r29, .rodata+0xC50@ha -/* 00016590 00023320 80 9F 00 DC */ lwz r4, 0xdc(r31) -/* 00016594 00023324 90 6B 00 0C */ stw r3, 0xc(r11) -/* 00016598 00023328 93 CB 00 04 */ stw r30, 0x4(r11) -/* 0001659C 0002332C 90 AB 00 08 */ stw r5, 0x8(r11) -/* 000165A0 00023330 81 6A 00 08 */ lwz r11, 0x8(r10) -/* 000165A4 00023334 80 0A 00 0C */ lwz r0, 0xc(r10) -/* 000165A8 00023338 81 2A 00 04 */ lwz r9, 0x4(r10) -.L_000165AC: -/* 000165AC 0002333C 90 81 00 78 */ stw r4, 0x78(r1) -.L_000165B0: -/* 000165B0 00023340 C1 7D 0C 50 */ lfs f11, .rodata+0xC50@l(r29) -/* 000165B4 00023344 81 5F 00 EC */ lwz r10, 0xec(r31) -/* 000165B8 00023348 90 08 00 0C */ stw r0, 0xc(r8) -/* 000165BC 0002334C 91 28 00 04 */ stw r9, 0x4(r8) -/* 000165C0 00023350 91 68 00 08 */ stw r11, 0x8(r8) -/* 000165C4 00023354 81 67 00 08 */ lwz r11, 0x8(r7) -/* 000165C8 00023358 81 27 00 04 */ lwz r9, 0x4(r7) -.L_000165CC: -/* 000165CC 0002335C 80 07 00 0C */ lwz r0, 0xc(r7) -/* 000165D0 00023360 91 41 00 88 */ stw r10, 0x88(r1) -/* 000165D4 00023364 90 06 00 0C */ stw r0, 0xc(r6) -/* 000165D8 00023368 91 66 00 08 */ stw r11, 0x8(r6) -.L_000165DC: -/* 000165DC 0002336C 91 26 00 04 */ stw r9, 0x4(r6) -/* 000165E0 00023370 81 3F 00 80 */ lwz r9, 0x80(r31) -/* 000165E4 00023374 C1 89 00 08 */ lfs f12, 0x8(r9) -/* 000165E8 00023378 C0 09 00 00 */ lfs f0, 0x0(r9) -.L_000165EC: -/* 000165EC 0002337C C1 A9 00 04 */ lfs f13, 0x4(r9) -/* 000165F0 00023380 D0 01 00 98 */ stfs f0, 0x98(r1) -/* 000165F4 00023384 D1 A1 00 9C */ stfs f13, 0x9c(r1) -/* 000165F8 00023388 D1 81 00 A0 */ stfs f12, 0xa0(r1) -/* 000165FC 0002338C D1 61 00 A4 */ stfs f11, 0xa4(r1) -/* 00016600 00023390 80 1F 00 BC */ lwz r0, 0xbc(r31) -/* 00016604 00023394 2C 00 00 02 */ cmpwi r0, 0x2 -/* 00016608 00023398 40 82 66 44 */ bne .L_0001CC4C -/* 0001660C 0002339C 81 3F 00 80 */ lwz r9, 0x80(r31) -/* 00016610 000233A0 C1 A1 00 48 */ lfs f13, 0x48(r1) -/* 00016614 000233A4 C0 09 00 00 */ lfs f0, 0x0(r9) -/* 00016618 000233A8 C1 81 00 4C */ lfs f12, 0x4c(r1) -/* 0001661C 000233AC ED AD 00 2A */ fadds f13, f13, f0 -/* 00016620 000233B0 C1 61 00 50 */ lfs f11, 0x50(r1) -/* 00016624 000233B4 D1 A1 00 48 */ stfs f13, 0x48(r1) -/* 00016628 000233B8 C0 09 00 04 */ lfs f0, 0x4(r9) -.L_0001662C: -/* 0001662C 000233BC ED 8C 00 2A */ fadds f12, f12, f0 -/* 00016630 000233C0 D1 81 00 4C */ stfs f12, 0x4c(r1) -/* 00016634 000233C4 C0 09 00 08 */ lfs f0, 0x8(r9) -/* 00016638 000233C8 ED 6B 00 2A */ fadds f11, f11, f0 -/* 0001663C 000233CC D1 61 00 50 */ stfs f11, 0x50(r1) -/* 00016640 000233D0 48 01 66 78 */ b .text+0x16678 -/* 00016644 000233D4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00016648 000233D8 40 82 66 60 */ bne .L_0001CCA8 -/* 0001664C 000233DC 7F 03 C3 78 */ mr r3, r24 -/* 00016650 000233E0 38 81 00 68 */ addi r4, r1, 0x68 -/* 00016654 000233E4 7F 05 C3 78 */ mr r5, r24 -/* 00016658 000233E8 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 -/* 0001665C 000233EC 48 01 66 78 */ b .text+0x16678 -/* 00016660 000233F0 2C 00 00 03 */ cmpwi r0, 0x3 -/* 00016664 000233F4 40 82 66 78 */ bne .L_0001CCDC -/* 00016668 000233F8 7F 03 C3 78 */ mr r3, r24 -/* 0001666C 000233FC 38 81 00 08 */ addi r4, r1, 0x8 -/* 00016670 00023400 7F 05 C3 78 */ mr r5, r24 -/* 00016674 00023404 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 -/* 00016678 00023408 80 1F 00 C0 */ lwz r0, 0xc0(r31) -/* 0001667C 0002340C 2C 00 00 02 */ cmpwi r0, 0x2 -/* 00016680 00023410 40 82 66 BC */ bne .L_0001CD3C -/* 00016684 00023414 81 3F 00 80 */ lwz r9, 0x80(r31) -/* 00016688 00023418 C1 A1 00 58 */ lfs f13, 0x58(r1) -/* 0001668C 0002341C C0 09 00 00 */ lfs f0, 0x0(r9) -.L_00016690: -/* 00016690 00023420 C1 81 00 5C */ lfs f12, 0x5c(r1) -/* 00016694 00023424 ED AD 00 2A */ fadds f13, f13, f0 -/* 00016698 00023428 C1 61 00 60 */ lfs f11, 0x60(r1) -/* 0001669C 0002342C D1 A1 00 58 */ stfs f13, 0x58(r1) -/* 000166A0 00023430 C0 09 00 04 */ lfs f0, 0x4(r9) -/* 000166A4 00023434 ED 8C 00 2A */ fadds f12, f12, f0 -/* 000166A8 00023438 D1 81 00 5C */ stfs f12, 0x5c(r1) -.L_000166AC: -/* 000166AC 0002343C C0 09 00 08 */ lfs f0, 0x8(r9) -.L_000166B0: -/* 000166B0 00023440 ED 6B 00 2A */ fadds f11, f11, f0 -.L_000166B4: -/* 000166B4 00023444 D1 61 00 60 */ stfs f11, 0x60(r1) -/* 000166B8 00023448 48 01 66 F0 */ b .text+0x166F0 -/* 000166BC 0002344C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000166C0 00023450 40 82 66 D8 */ bne .L_0001CD98 -/* 000166C4 00023454 7F 23 CB 78 */ mr r3, r25 -/* 000166C8 00023458 38 81 00 68 */ addi r4, r1, 0x68 -/* 000166CC 0002345C 7F 25 CB 78 */ mr r5, r25 -/* 000166D0 00023460 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 -/* 000166D4 00023464 48 01 66 F0 */ b .text+0x166F0 -/* 000166D8 00023468 2C 00 00 03 */ cmpwi r0, 0x3 -/* 000166DC 0002346C 40 82 66 F0 */ bne .L_0001CDCC -/* 000166E0 00023470 7F 23 CB 78 */ mr r3, r25 -/* 000166E4 00023474 38 81 00 08 */ addi r4, r1, 0x8 -/* 000166E8 00023478 7F 25 CB 78 */ mr r5, r25 -/* 000166EC 0002347C 48 00 00 01 */ bl bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 -/* 000166F0 00023480 81 3F 00 C4 */ lwz r9, 0xc4(r31) -/* 000166F4 00023484 EF 5D 07 B2 */ fmuls f26, f29, f30 -/* 000166F8 00023488 2C 09 00 00 */ cmpwi r9, 0x0 -/* 000166FC 0002348C 41 82 68 8C */ beq .L_0001CF88 -/* 00016700 00023490 88 09 00 09 */ lbz r0, 0x9(r9) -/* 00016704 00023494 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00016708 00023498 41 82 68 8C */ beq .L_0001CF94 -/* 0001670C 0002349C 3D 20 00 00 */ lis r9, .rodata+0xC48@ha -/* 00016710 000234A0 80 9F 00 80 */ lwz r4, 0x80(r31) -/* 00016714 000234A4 C3 E9 0C 48 */ lfs f31, .rodata+0xC48@l(r9) -/* 00016718 000234A8 80 7F 00 B0 */ lwz r3, 0xb0(r31) -/* 0001671C 000234AC 38 84 00 60 */ addi r4, r4, 0x60 -/* 00016720 000234B0 D3 E1 00 A8 */ stfs f31, 0xa8(r1) -/* 00016724 000234B4 D3 E1 00 AC */ stfs f31, 0xac(r1) -/* 00016728 000234B8 D3 E1 00 B0 */ stfs f31, 0xb0(r1) -/* 0001672C 000234BC D3 E1 00 B4 */ stfs f31, 0xb4(r1) -/* 00016730 000234C0 48 01 48 39 */ bl .text+0x14838 -/* 00016734 000234C4 80 7F 00 B0 */ lwz r3, 0xb0(r31) -/* 00016738 000234C8 FC 60 F8 90 */ fmr f3, f31 -/* 0001673C 000234CC FC 20 D0 90 */ fmr f1, f26 -/* 00016740 000234D0 FC 40 F8 90 */ fmr f2, f31 -/* 00016744 000234D4 48 01 49 61 */ bl .text+0x14960 -/* 00016748 000234D8 80 7F 00 B0 */ lwz r3, 0xb0(r31) -/* 0001674C 000234DC 38 81 00 A8 */ addi r4, r1, 0xa8 -/* 00016750 000234E0 48 01 48 AD */ bl .text+0x148AC -/* 00016754 000234E4 3D 60 00 00 */ lis r11, vIceAccelLagScale@ha -.L_00016758: -/* 00016758 000234E8 C0 01 00 A8 */ lfs f0, 0xa8(r1) -/* 0001675C 000234EC C1 8B 00 00 */ lfs f12, vIceAccelLagScale@l(r11) -/* 00016760 000234F0 3D 20 00 00 */ lis r9, vIceAccelLagMin@ha -/* 00016764 000234F4 C1 69 00 00 */ lfs f11, vIceAccelLagMin@l(r9) -/* 00016768 000234F8 39 4B 00 00 */ addi r10, r11, vIceAccelLagScale@l -/* 0001676C 000234FC EC 00 03 32 */ fmuls f0, f0, f12 -/* 00016770 00023500 39 69 00 00 */ addi r11, r9, vIceAccelLagMin@l -/* 00016774 00023504 ED A0 58 28 */ fsubs f13, f0, f11 -/* 00016778 00023508 D0 01 00 A8 */ stfs f0, 0xa8(r1) -/* 0001677C 0002350C FC 0D F8 00 */ fcmpu cr0, f13, f31 -.L_00016780: -/* 00016780 00023510 4C 62 0B 82 */ cror un, eq, gt -/* 00016784 00023514 41 83 67 8C */ bso .L_0001CF10 -/* 00016788 00023518 D1 61 00 A8 */ stfs f11, 0xa8(r1) -/* 0001678C 0002351C 3D 20 00 00 */ lis r9, vIceAccelLagMax@ha -/* 00016790 00023520 C0 01 00 A8 */ lfs f0, 0xa8(r1) -/* 00016794 00023524 C1 A9 00 00 */ lfs f13, vIceAccelLagMax@l(r9) -/* 00016798 00023528 39 29 00 00 */ addi r9, r9, vIceAccelLagMax@l -/* 0001679C 0002352C EC 0D 00 28 */ fsubs f0, f13, f0 -/* 000167A0 00023530 FC 00 F8 00 */ fcmpu cr0, f0, f31 -/* 000167A4 00023534 4C 62 0B 82 */ cror un, eq, gt -/* 000167A8 00023538 41 83 67 B0 */ bso .L_0001CF58 -/* 000167AC 0002353C D1 A1 00 A8 */ stfs f13, 0xa8(r1) -.L_000167B0: -/* 000167B0 00023540 C0 01 00 AC */ lfs f0, 0xac(r1) -/* 000167B4 00023544 C1 AA 00 04 */ lfs f13, 0x4(r10) -/* 000167B8 00023548 C1 6B 00 04 */ lfs f11, 0x4(r11) -.L_000167BC: -/* 000167BC 0002354C EC 00 03 72 */ fmuls f0, f0, f13 -.L_000167C0: -/* 000167C0 00023550 ED 80 58 28 */ fsubs f12, f0, f11 -/* 000167C4 00023554 D0 01 00 AC */ stfs f0, 0xac(r1) -/* 000167C8 00023558 FC 0C F8 00 */ fcmpu cr0, f12, f31 -/* 000167CC 0002355C 4C 62 0B 82 */ cror un, eq, gt -/* 000167D0 00023560 41 83 67 D8 */ bso .L_0001CFA8 -/* 000167D4 00023564 D1 61 00 AC */ stfs f11, 0xac(r1) -/* 000167D8 00023568 C1 A9 00 04 */ lfs f13, 0x4(r9) -/* 000167DC 0002356C C0 01 00 AC */ lfs f0, 0xac(r1) -/* 000167E0 00023570 EC 0D 00 28 */ fsubs f0, f13, f0 -/* 000167E4 00023574 FC 00 F8 00 */ fcmpu cr0, f0, f31 -/* 000167E8 00023578 4C 62 0B 82 */ cror un, eq, gt -/* 000167EC 0002357C 41 83 67 F4 */ bso .L_0001CFE0 -/* 000167F0 00023580 D1 A1 00 AC */ stfs f13, 0xac(r1) -/* 000167F4 00023584 C0 0A 00 08 */ lfs f0, 0x8(r10) -/* 000167F8 00023588 C1 A1 00 B0 */ lfs f13, 0xb0(r1) -.L_000167FC: -/* 000167FC 0002358C C1 6B 00 08 */ lfs f11, 0x8(r11) -/* 00016800 00023590 ED AD 00 32 */ fmuls f13, f13, f0 -/* 00016804 00023594 ED 8D 58 28 */ fsubs f12, f13, f11 -/* 00016808 00023598 D1 A1 00 B0 */ stfs f13, 0xb0(r1) -/* 0001680C 0002359C FC 0C F8 00 */ fcmpu cr0, f12, f31 -/* 00016810 000235A0 4C 62 0B 82 */ cror un, eq, gt -/* 00016814 000235A4 41 83 68 1C */ bso .L_0001D030 -/* 00016818 000235A8 D1 61 00 B0 */ stfs f11, 0xb0(r1) -/* 0001681C 000235AC C1 A9 00 08 */ lfs f13, 0x8(r9) -/* 00016820 000235B0 C0 01 00 B0 */ lfs f0, 0xb0(r1) -/* 00016824 000235B4 EC 0D 00 28 */ fsubs f0, f13, f0 -/* 00016828 000235B8 FC 00 F8 00 */ fcmpu cr0, f0, f31 -/* 0001682C 000235BC 4C 62 0B 82 */ cror un, eq, gt -/* 00016830 000235C0 41 83 68 38 */ bso .L_0001D068 -/* 00016834 000235C4 D1 A1 00 B0 */ stfs f13, 0xb0(r1) -/* 00016838 000235C8 C1 41 00 58 */ lfs f10, 0x58(r1) -.L_0001683C: -/* 0001683C 000235CC C0 C1 00 A8 */ lfs f6, 0xa8(r1) -.L_00016840: -/* 00016840 000235D0 C1 21 00 5C */ lfs f9, 0x5c(r1) -/* 00016844 000235D4 C0 E1 00 AC */ lfs f7, 0xac(r1) -/* 00016848 000235D8 ED 4A 30 28 */ fsubs f10, f10, f6 -/* 0001684C 000235DC C1 61 00 60 */ lfs f11, 0x60(r1) -/* 00016850 000235E0 C1 01 00 B0 */ lfs f8, 0xb0(r1) -/* 00016854 000235E4 ED 29 38 28 */ fsubs f9, f9, f7 -.L_00016858: -/* 00016858 000235E8 C1 A1 00 48 */ lfs f13, 0x48(r1) -/* 0001685C 000235EC C1 81 00 4C */ lfs f12, 0x4c(r1) -/* 00016860 000235F0 ED 6B 40 28 */ fsubs f11, f11, f8 -/* 00016864 000235F4 C0 01 00 50 */ lfs f0, 0x50(r1) -/* 00016868 000235F8 ED AD 30 28 */ fsubs f13, f13, f6 -/* 0001686C 000235FC ED 8C 38 28 */ fsubs f12, f12, f7 -/* 00016870 00023600 D1 41 00 58 */ stfs f10, 0x58(r1) -/* 00016874 00023604 EC 00 40 28 */ fsubs f0, f0, f8 -/* 00016878 00023608 D1 21 00 5C */ stfs f9, 0x5c(r1) -/* 0001687C 0002360C D1 61 00 60 */ stfs f11, 0x60(r1) -/* 00016880 00023610 D1 A1 00 48 */ stfs f13, 0x48(r1) -/* 00016884 00023614 D1 81 00 4C */ stfs f12, 0x4c(r1) -/* 00016888 00023618 D0 01 00 50 */ stfs f0, 0x50(r1) -/* 0001688C 0002361C 3D 20 00 00 */ lis r9, TheICEManager@ha -/* 00016890 00023620 3B C1 00 B8 */ addi r30, r1, 0xb8 -/* 00016894 00023624 3B A9 00 00 */ addi r29, r9, TheICEManager@l -/* 00016898 00023628 7F E3 FB 78 */ mr r3, r31 -/* 0001689C 0002362C FC 20 D8 90 */ fmr f1, f27 -/* 000168A0 00023630 83 7D 00 28 */ lwz r27, 0x28(r29) -/* 000168A4 00023634 48 01 5C 29 */ bl .text+0x15C28 -/* 000168A8 00023638 7F DC F3 78 */ mr r28, r30 -/* 000168AC 0002363C 3D 20 00 00 */ lis r9, .rodata+0xC60@ha -/* 000168B0 00023640 C1 A9 0C 60 */ lfs f13, .rodata+0xC60@l(r9) -/* 000168B4 00023644 7F 04 C3 78 */ mr r4, r24 -/* 000168B8 00023648 7F 25 CB 78 */ mr r5, r25 -/* 000168BC 0002364C 7F C3 F3 78 */ mr r3, r30 -/* 000168C0 00023650 EC 21 03 72 */ fmuls f1, f1, f13 -/* 000168C4 00023654 FC 00 08 1E */ fctiwz f0, f1 -/* 000168C8 00023658 D8 01 01 60 */ stfd f0, 0x160(r1) -/* 000168CC 0002365C 80 C1 01 64 */ lwz r6, 0x164(r1) -.L_000168D0: -/* 000168D0 00023660 54 C6 04 3E */ clrlwi r6, r6, 16 -/* 000168D4 00023664 48 01 3A 75 */ bl .text+0x13A74 -.L_000168D8: -/* 000168D8 00023668 80 7F 00 98 */ lwz r3, 0x98(r31) -/* 000168DC 0002366C FC 20 D8 90 */ fmr f1, f27 -/* 000168E0 00023670 48 01 44 15 */ bl .text+0x14414 -/* 000168E4 00023674 FF A0 08 90 */ fmr f29, f1 -/* 000168E8 00023678 80 7F 00 9C */ lwz r3, 0x9c(r31) -.L_000168EC: -/* 000168EC 0002367C FC 20 D8 90 */ fmr f1, f27 -/* 000168F0 00023680 48 01 44 15 */ bl .text+0x14414 -/* 000168F4 00023684 3D 20 00 00 */ lis r9, .rodata+0xC48@ha -/* 000168F8 00023688 FF E0 08 90 */ fmr f31, f1 -.L_000168FC: -/* 000168FC 0002368C C0 09 0C 48 */ lfs f0, .rodata+0xC48@l(r9) -/* 00016900 00023690 FC 1D 00 00 */ fcmpu cr0, f29, f0 -/* 00016904 00023694 4C 62 0B 82 */ cror un, eq, gt -/* 00016908 00023698 41 83 69 10 */ bso .text+0x16910 -/* 0001690C 0002369C FF A0 00 90 */ fmr f29, f0 -/* 00016910 000236A0 FC 1F 00 00 */ fcmpu cr0, f31, f0 -/* 00016914 000236A4 4C 62 0B 82 */ cror un, eq, gt -/* 00016918 000236A8 41 83 69 20 */ bso .text+0x16920 -/* 0001691C 000236AC FF E0 00 90 */ fmr f31, f0 -/* 00016920 000236B0 80 9F 00 C4 */ lwz r4, 0xc4(r31) -/* 00016924 000236B4 2C 04 00 00 */ cmpwi r4, 0x0 -/* 00016928 000236B8 41 82 69 38 */ beq .text+0x16938 -/* 0001692C 000236BC 80 84 00 0C */ lwz r4, 0xc(r4) -/* 00016930 000236C0 2C 04 00 00 */ cmpwi r4, 0x0 -/* 00016934 000236C4 40 82 69 B4 */ bne .text+0x169B4 -/* 00016938 000236C8 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 0001693C 000236CC D3 A9 00 8C */ stfs f29, 0x8c(r9) -/* 00016940 000236D0 D0 09 00 80 */ stfs f0, 0x80(r9) -/* 00016944 000236D4 D0 09 00 84 */ stfs f0, 0x84(r9) -/* 00016948 000236D8 D3 A9 00 88 */ stfs f29, 0x88(r9) -/* 0001694C 000236DC 81 7F 00 1C */ lwz r11, 0x1c(r31) -/* 00016950 000236E0 D3 AB 00 7C */ stfs f29, 0x7c(r11) -/* 00016954 000236E4 D0 0B 00 70 */ stfs f0, 0x70(r11) -/* 00016958 000236E8 D0 0B 00 74 */ stfs f0, 0x74(r11) -/* 0001695C 000236EC D3 AB 00 78 */ stfs f29, 0x78(r11) -/* 00016960 000236F0 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 00016964 000236F4 D0 09 00 AC */ stfs f0, 0xac(r9) -/* 00016968 000236F8 D0 09 00 A0 */ stfs f0, 0xa0(r9) -/* 0001696C 000236FC D0 09 00 A4 */ stfs f0, 0xa4(r9) -/* 00016970 00023700 D0 09 00 A8 */ stfs f0, 0xa8(r9) -/* 00016974 00023704 81 7F 00 1C */ lwz r11, 0x1c(r31) -/* 00016978 00023708 D0 0B 00 9C */ stfs f0, 0x9c(r11) -/* 0001697C 0002370C D0 0B 00 90 */ stfs f0, 0x90(r11) -/* 00016980 00023710 D0 0B 00 94 */ stfs f0, 0x94(r11) -/* 00016984 00023714 D0 0B 00 98 */ stfs f0, 0x98(r11) -/* 00016988 00023718 40 92 69 94 */ bne cr4, .text+0x16994 -/* 0001698C 0002371C C0 1A 00 10 */ lfs f0, 0x10(r26) -/* 00016990 00023720 48 01 69 98 */ b .text+0x16998 -/* 00016994 00023724 C0 1D 00 58 */ lfs f0, 0x58(r29) -/* 00016998 00023728 3D 20 00 00 */ lis r9, .rodata+0xC50@ha -.L_0001699C: -/* 0001699C 0002372C 80 7F 00 1C */ lwz r3, 0x1c(r31) -.L_000169A0: -/* 000169A0 00023730 C0 49 0C 50 */ lfs f2, .rodata+0xC50@l(r9) -/* 000169A4 00023734 EC 3C 00 32 */ fmuls f1, f28, f0 -/* 000169A8 00023738 7F 84 E3 78 */ mr r4, r28 -/* 000169AC 0002373C 48 00 0A 61 */ bl .L_0001740C -/* 000169B0 00023740 48 01 6B C0 */ b .text+0x16BC0 -/* 000169B4 00023744 7F A3 EB 78 */ mr r3, r29 -/* 000169B8 00023748 48 01 84 19 */ bl .text+0x18418 -/* 000169BC 0002374C 7C 63 1B 79 */ mr. r3, r3 -/* 000169C0 00023750 41 82 6B C0 */ beq .text+0x16BC0 -/* 000169C4 00023754 40 92 69 D0 */ bne cr4, .text+0x169D0 -/* 000169C8 00023758 C0 1A 00 10 */ lfs f0, 0x10(r26) -/* 000169CC 0002375C 48 01 69 D4 */ b .text+0x169D4 -.L_000169D0: -/* 000169D0 00023760 C0 1D 00 58 */ lfs f0, 0x58(r29) -/* 000169D4 00023764 EC 1C 00 32 */ fmuls f0, f28, f0 -/* 000169D8 00023768 A0 03 00 0C */ lhz r0, 0xc(r3) -/* 000169DC 0002376C EC 00 07 F2 */ fmuls f0, f0, f31 -/* 000169E0 00023770 7C 0A 07 34 */ extsh r10, r0 -/* 000169E4 00023774 FD A0 00 1E */ fctiwz f13, f0 -/* 000169E8 00023778 7C 08 03 78 */ mr r8, r0 -/* 000169EC 0002377C D9 A1 01 60 */ stfd f13, 0x160(r1) -/* 000169F0 00023780 2C 0A 00 00 */ cmpwi r10, 0x0 -/* 000169F4 00023784 81 61 01 64 */ lwz r11, 0x164(r1) -/* 000169F8 00023788 41 81 6A 04 */ bgt .text+0x16A04 -/* 000169FC 0002378C 39 60 00 00 */ li r11, 0x0 -/* 00016A00 00023790 48 01 6A 20 */ b .text+0x16A20 -/* 00016A04 00023794 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00016A08 00023798 40 80 6A 14 */ bge .text+0x16A14 -/* 00016A0C 0002379C 7D 6B 52 15 */ add. r11, r11, r10 -/* 00016A10 000237A0 41 80 6A 0C */ blt .text+0x16A0C -/* 00016A14 000237A4 7C 0B 53 D6 */ divw r0, r11, r10 -/* 00016A18 000237A8 7C 00 51 D6 */ mullw r0, r0, r10 -/* 00016A1C 000237AC 7D 60 58 50 */ subf r11, r0, r11 -/* 00016A20 000237B0 7D 09 07 34 */ extsh r9, r8 -/* 00016A24 000237B4 7D 6A 5B 79 */ mr. r10, r11 -/* 00016A28 000237B8 38 09 FF FF */ subi r0, r9, 0x1 -/* 00016A2C 000237BC 40 80 6A 34 */ bge .text+0x16A34 -.L_00016A30: -/* 00016A30 000237C0 39 40 00 00 */ li r10, 0x0 -/* 00016A34 000237C4 7C 0A 00 00 */ cmpw r10, r0 -.L_00016A38: -/* 00016A38 000237C8 40 81 6A 40 */ ble .text+0x16A40 -/* 00016A3C 000237CC 7C 0A 03 78 */ mr r10, r0 -/* 00016A40 000237D0 7C 0B 50 00 */ cmpw r11, r10 -.L_00016A44: -/* 00016A44 000237D4 40 82 6A 58 */ bne .text+0x16A58 -/* 00016A48 000237D8 1D 2A 00 18 */ mulli r9, r10, 0x18 -.L_00016A4C: -/* 00016A4C 000237DC 39 29 00 20 */ addi r9, r9, 0x20 -/* 00016A50 000237E0 7F A3 4A 14 */ add r29, r3, r9 -/* 00016A54 000237E4 48 01 6A 5C */ b .text+0x16A5C -/* 00016A58 000237E8 3B A0 00 00 */ li r29, 0x0 -.L_00016A5C: -/* 00016A5C 000237EC 2C 1D 00 00 */ cmpwi r29, 0x0 -/* 00016A60 000237F0 41 82 6B C0 */ beq .text+0x16BC0 -/* 00016A64 000237F4 C1 9D 00 00 */ lfs f12, 0x0(r29) -/* 00016A68 000237F8 3D 20 00 00 */ lis r9, .rodata+0xC64@ha -/* 00016A6C 000237FC C1 69 0C 64 */ lfs f11, .rodata+0xC64@l(r9) -/* 00016A70 00023800 3D 60 00 00 */ lis r11, .rodata+0xC68@ha -/* 00016A74 00023804 ED 8C 07 72 */ fmuls f12, f12, f29 -/* 00016A78 00023808 3D 20 00 00 */ lis r9, .rodata+0xC50@ha -/* 00016A7C 0002380C D1 81 00 A8 */ stfs f12, 0xa8(r1) -/* 00016A80 00023810 C1 0B 0C 68 */ lfs f8, .rodata+0xC68@l(r11) -/* 00016A84 00023814 C0 1D 00 04 */ lfs f0, 0x4(r29) -/* 00016A88 00023818 C1 29 0C 50 */ lfs f9, .rodata+0xC50@l(r9) -/* 00016A8C 0002381C EC 00 07 72 */ fmuls f0, f0, f29 -/* 00016A90 00023820 D0 01 00 AC */ stfs f0, 0xac(r1) -/* 00016A94 00023824 EC 00 00 32 */ fmuls f0, f0, f0 -/* 00016A98 00023828 C1 BD 00 08 */ lfs f13, 0x8(r29) -/* 00016A9C 0002382C ED 8C 03 3A */ fmadds f12, f12, f12, f0 -/* 00016AA0 00023830 ED AD 07 72 */ fmuls f13, f13, f29 -/* 00016AA4 00023834 ED 4D 63 7A */ fmadds f10, f13, f13, f12 -/* 00016AA8 00023838 D1 A1 00 B0 */ stfs f13, 0xb0(r1) -/* 00016AAC 0002383C FC 0A 58 00 */ fcmpu cr0, f10, f11 -/* 00016AB0 00023840 4C 62 03 82 */ cror un, eq, lt -/* 00016AB4 00023844 41 83 6A E4 */ bso .text+0x16AE4 -/* 00016AB8 00023848 FD A0 50 34 */ frsqrte f13, f10 -/* 00016ABC 0002384C EC 0D 03 72 */ fmuls f0, f13, f13 -/* 00016AC0 00023850 ED 8D 02 32 */ fmuls f12, f13, f8 -/* 00016AC4 00023854 EC 0A 48 3C */ fnmsubs f0, f10, f0, f9 -/* 00016AC8 00023858 ED A0 6B 3A */ fmadds f13, f0, f12, f13 -/* 00016ACC 0002385C EC 0D 03 72 */ fmuls f0, f13, f13 -/* 00016AD0 00023860 ED 8D 02 32 */ fmuls f12, f13, f8 -/* 00016AD4 00023864 EC 0A 48 3C */ fnmsubs f0, f10, f0, f9 -/* 00016AD8 00023868 ED A0 6B 3A */ fmadds f13, f0, f12, f13 -/* 00016ADC 0002386C ED AD 02 B2 */ fmuls f13, f13, f10 -/* 00016AE0 00023870 48 01 6A EC */ b .text+0x16AEC -/* 00016AE4 00023874 3D 20 00 00 */ lis r9, .rodata+0xC48@ha -/* 00016AE8 00023878 C1 A9 0C 48 */ lfs f13, .rodata+0xC48@l(r9) -/* 00016AEC 0002387C 3D 20 00 00 */ lis r9, .rodata+0xC50@ha -/* 00016AF0 00023880 3D 60 00 00 */ lis r11, .rodata+0xC64@ha -/* 00016AF4 00023884 C1 49 0C 50 */ lfs f10, .rodata+0xC50@l(r9) -/* 00016AF8 00023888 3D 40 00 00 */ lis r10, .rodata+0xC68@ha -.L_00016AFC: -/* 00016AFC 0002388C C0 0B 0C 64 */ lfs f0, .rodata+0xC64@l(r11) -/* 00016B00 00023890 ED 8A 68 28 */ fsubs f12, f10, f13 -/* 00016B04 00023894 C1 2A 0C 68 */ lfs f9, .rodata+0xC68@l(r10) -/* 00016B08 00023898 FC 0C 00 00 */ fcmpu cr0, f12, f0 -/* 00016B0C 0002389C 4C 62 03 82 */ cror un, eq, lt -/* 00016B10 000238A0 41 83 6B 40 */ bso .text+0x16B40 -/* 00016B14 000238A4 FD 60 60 34 */ frsqrte f11, f12 -/* 00016B18 000238A8 EC 0B 02 F2 */ fmuls f0, f11, f11 -/* 00016B1C 000238AC ED AB 02 72 */ fmuls f13, f11, f9 -/* 00016B20 000238B0 EC 0C 50 3C */ fnmsubs f0, f12, f0, f10 -/* 00016B24 000238B4 ED 60 5B 7A */ fmadds f11, f0, f13, f11 -/* 00016B28 000238B8 EC 0B 02 F2 */ fmuls f0, f11, f11 -.L_00016B2C: -/* 00016B2C 000238BC ED AB 02 72 */ fmuls f13, f11, f9 -/* 00016B30 000238C0 EC 0C 50 3C */ fnmsubs f0, f12, f0, f10 -/* 00016B34 000238C4 ED 60 5B 7A */ fmadds f11, f0, f13, f11 -/* 00016B38 000238C8 ED 6B 03 32 */ fmuls f11, f11, f12 -/* 00016B3C 000238CC 48 01 6B 48 */ b .text+0x16B48 -/* 00016B40 000238D0 3D 20 00 00 */ lis r9, .rodata+0xC48@ha -/* 00016B44 000238D4 C1 69 0C 48 */ lfs f11, .rodata+0xC48@l(r9) -/* 00016B48 000238D8 C1 81 00 A8 */ lfs f12, 0xa8(r1) -/* 00016B4C 000238DC 3B C1 01 08 */ addi r30, r1, 0x108 -/* 00016B50 000238E0 C1 A1 00 AC */ lfs f13, 0xac(r1) -/* 00016B54 000238E4 7F C3 F3 78 */ mr r3, r30 -/* 00016B58 000238E8 C0 01 00 B0 */ lfs f0, 0xb0(r1) -/* 00016B5C 000238EC 38 81 00 F8 */ addi r4, r1, 0xf8 -/* 00016B60 000238F0 D1 81 00 F8 */ stfs f12, 0xf8(r1) -/* 00016B64 000238F4 D1 A1 00 FC */ stfs f13, 0xfc(r1) -/* 00016B68 000238F8 D0 01 01 00 */ stfs f0, 0x100(r1) -/* 00016B6C 000238FC D1 61 01 04 */ stfs f11, 0x104(r1) -/* 00016B70 00023900 48 00 00 01 */ bl bQuaternionToMatrix__FP8bMatrix4PC11bQuaternion -/* 00016B74 00023904 C1 9D 00 0C */ lfs f12, 0xc(r29) -/* 00016B78 00023908 3D 20 00 00 */ lis r9, .rodata+0xC50@ha -/* 00016B7C 0002390C C0 49 0C 50 */ lfs f2, .rodata+0xC50@l(r9) -/* 00016B80 00023910 7F C4 F3 78 */ mr r4, r30 -/* 00016B84 00023914 ED 8C 07 72 */ fmuls f12, f12, f29 -/* 00016B88 00023918 7F 83 E3 78 */ mr r3, r28 -/* 00016B8C 0002391C D1 81 01 48 */ stfs f12, 0x148(r1) -/* 00016B90 00023920 7F 85 E3 78 */ mr r5, r28 -/* 00016B94 00023924 C1 BD 00 10 */ lfs f13, 0x10(r29) -/* 00016B98 00023928 ED AD 07 72 */ fmuls f13, f13, f29 -/* 00016B9C 0002392C D1 A1 01 4C */ stfs f13, 0x14c(r1) -/* 00016BA0 00023930 C0 1D 00 14 */ lfs f0, 0x14(r29) -/* 00016BA4 00023934 D1 81 01 38 */ stfs f12, 0x138(r1) -/* 00016BA8 00023938 EC 00 07 72 */ fmuls f0, f0, f29 -/* 00016BAC 0002393C D1 A1 01 3C */ stfs f13, 0x13c(r1) -/* 00016BB0 00023940 D0 01 01 50 */ stfs f0, 0x150(r1) -/* 00016BB4 00023944 D0 01 01 40 */ stfs f0, 0x140(r1) -.L_00016BB8: -/* 00016BB8 00023948 D0 41 01 44 */ stfs f2, 0x144(r1) -/* 00016BBC 0002394C 48 00 00 01 */ bl bMulMatrix__FP8bMatrix4PC8bMatrix4T1 -/* 00016BC0 00023950 40 92 6B D4 */ bne cr4, .text+0x16BD4 -/* 00016BC4 00023954 7F 43 D3 78 */ mr r3, r26 -.L_00016BC8: -/* 00016BC8 00023958 48 01 7E 91 */ bl .text+0x17E90 -/* 00016BCC 0002395C 2C 03 00 02 */ cmpwi r3, 0x2 -/* 00016BD0 00023960 41 82 6C 64 */ beq .text+0x16C64 -/* 00016BD4 00023964 81 3F 00 C4 */ lwz r9, 0xc4(r31) -/* 00016BD8 00023968 39 60 00 00 */ li r11, 0x0 -/* 00016BDC 0002396C 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00016BE0 00023970 41 82 6C 00 */ beq .text+0x16C00 -/* 00016BE4 00023974 88 09 00 07 */ lbz r0, 0x7(r9) -/* 00016BE8 00023978 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00016BEC 0002397C 41 82 6C 00 */ beq .text+0x16C00 -/* 00016BF0 00023980 2F 9B 00 08 */ cmpwi cr7, r27, 0x8 -/* 00016BF4 00023984 4F FE E3 82 */ cror cr7un, cr7eq, cr7lt -/* 00016BF8 00023988 7D 60 00 26 */ mfcr r11 -/* 00016BFC 0002398C 55 6B 07 FE */ clrlwi r11, r11, 31 -/* 00016C00 00023990 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00016C04 00023994 41 82 6C 18 */ beq .text+0x16C18 -/* 00016C08 00023998 80 BF 00 80 */ lwz r5, 0x80(r31) -/* 00016C0C 0002399C 7F E3 FB 78 */ mr r3, r31 -/* 00016C10 000239A0 7F 84 E3 78 */ mr r4, r28 -/* 00016C14 000239A4 48 00 3A F1 */ bl .L_0001A704 -/* 00016C18 000239A8 81 3F 00 C4 */ lwz r9, 0xc4(r31) -/* 00016C1C 000239AC 39 60 00 00 */ li r11, 0x0 -/* 00016C20 000239B0 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00016C24 000239B4 41 82 6C 44 */ beq .text+0x16C44 -/* 00016C28 000239B8 88 09 00 06 */ lbz r0, 0x6(r9) -/* 00016C2C 000239BC 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00016C30 000239C0 41 82 6C 44 */ beq .text+0x16C44 -/* 00016C34 000239C4 2F 9B 00 08 */ cmpwi cr7, r27, 0x8 -/* 00016C38 000239C8 4F FE E3 82 */ cror cr7un, cr7eq, cr7lt -/* 00016C3C 000239CC 7D 60 00 26 */ mfcr r11 -/* 00016C40 000239D0 55 6B 07 FE */ clrlwi r11, r11, 31 -/* 00016C44 000239D4 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00016C48 000239D8 41 82 6C C0 */ beq .text+0x16CC0 -/* 00016C4C 000239DC 80 BF 00 80 */ lwz r5, 0x80(r31) -/* 00016C50 000239E0 7F E3 FB 78 */ mr r3, r31 -/* 00016C54 000239E4 7F 84 E3 78 */ mr r4, r28 -/* 00016C58 000239E8 38 C5 00 50 */ addi r6, r5, 0x50 -/* 00016C5C 000239EC 48 00 38 D1 */ bl .L_0001A52C -/* 00016C60 000239F0 48 01 6C C0 */ b .text+0x16CC0 -/* 00016C64 000239F4 80 BF 00 80 */ lwz r5, 0x80(r31) -/* 00016C68 000239F8 7F E3 FB 78 */ mr r3, r31 -/* 00016C6C 000239FC 7F 84 E3 78 */ mr r4, r28 -/* 00016C70 00023A00 3B DF 00 C8 */ addi r30, r31, 0xc8 -/* 00016C74 00023A04 48 00 3A F1 */ bl .L_0001A764 -/* 00016C78 00023A08 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00016C7C 00023A0C 38 00 00 01 */ li r0, 0x1 -/* 00016C80 00023A10 40 82 6C 88 */ bne .text+0x16C88 -.L_00016C84: -/* 00016C84 00023A14 38 00 00 00 */ li r0, 0x0 -/* 00016C88 00023A18 80 BF 00 80 */ lwz r5, 0x80(r31) -/* 00016C8C 00023A1C 7F E3 FB 78 */ mr r3, r31 -/* 00016C90 00023A20 90 1F 00 C8 */ stw r0, 0xc8(r31) -/* 00016C94 00023A24 7F 84 E3 78 */ mr r4, r28 -/* 00016C98 00023A28 38 C5 00 50 */ addi r6, r5, 0x50 -/* 00016C9C 00023A2C 48 00 38 D1 */ bl .L_0001A56C -/* 00016CA0 00023A30 80 1F 00 C8 */ lwz r0, 0xc8(r31) -/* 00016CA4 00023A34 39 20 00 00 */ li r9, 0x0 -/* 00016CA8 00023A38 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00016CAC 00023A3C 40 82 6C B8 */ bne .text+0x16CB8 -/* 00016CB0 00023A40 2C 03 00 00 */ cmpwi r3, 0x0 -.L_00016CB4: -/* 00016CB4 00023A44 41 82 6C BC */ beq .text+0x16CBC -/* 00016CB8 00023A48 39 20 00 01 */ li r9, 0x1 -/* 00016CBC 00023A4C 91 3E 00 00 */ stw r9, 0x0(r30) -/* 00016CC0 00023A50 80 7F 00 A8 */ lwz r3, 0xa8(r31) -/* 00016CC4 00023A54 FC 20 D8 90 */ fmr f1, f27 -/* 00016CC8 00023A58 48 01 44 15 */ bl .text+0x14414 -/* 00016CCC 00023A5C 3D 20 00 00 */ lis r9, .rodata+0xC48@ha -/* 00016CD0 00023A60 C3 E9 0C 48 */ lfs f31, .rodata+0xC48@l(r9) -/* 00016CD4 00023A64 FC 01 F8 00 */ fcmpu cr0, f1, f31 -/* 00016CD8 00023A68 41 80 6C F0 */ blt .text+0x16CF0 -/* 00016CDC 00023A6C 3D 20 00 00 */ lis r9, .rodata+0xC5C@ha -/* 00016CE0 00023A70 81 7F 00 1C */ lwz r11, 0x1c(r31) -/* 00016CE4 00023A74 C0 09 0C 5C */ lfs f0, .rodata+0xC5C@l(r9) -/* 00016CE8 00023A78 EC 01 00 32 */ fmuls f0, f1, f0 -/* 00016CEC 00023A7C D0 0B 00 C8 */ stfs f0, 0xc8(r11) -/* 00016CF0 00023A80 80 7F 00 A4 */ lwz r3, 0xa4(r31) -/* 00016CF4 00023A84 FC 20 D8 90 */ fmr f1, f27 -/* 00016CF8 00023A88 48 01 44 15 */ bl .text+0x14414 -/* 00016CFC 00023A8C FF A0 08 90 */ fmr f29, f1 -/* 00016D00 00023A90 FC 1D F8 00 */ fcmpu cr0, f29, f31 -/* 00016D04 00023A94 41 80 6D 18 */ blt .text+0x16D18 -/* 00016D08 00023A98 3D 20 00 00 */ lis r9, .rodata+0xC6C@ha -/* 00016D0C 00023A9C C0 09 0C 6C */ lfs f0, .rodata+0xC6C@l(r9) -/* 00016D10 00023AA0 FC 1D 00 00 */ fcmpu cr0, f29, f0 -/* 00016D14 00023AA4 41 80 6D 34 */ blt .text+0x16D34 -/* 00016D18 00023AA8 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha -/* 00016D1C 00023AAC 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) -/* 00016D20 00023AB0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00016D24 00023AB4 40 82 6E 24 */ bne .text+0x16E24 -/* 00016D28 00023AB8 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 00016D2C 00023ABC D3 E9 00 B4 */ stfs f31, 0xb4(r9) -/* 00016D30 00023AC0 48 01 6E 04 */ b .text+0x16E04 -/* 00016D34 00023AC4 80 7F 00 A0 */ lwz r3, 0xa0(r31) -/* 00016D38 00023AC8 FC 20 D8 90 */ fmr f1, f27 -/* 00016D3C 00023ACC 48 01 44 15 */ bl .text+0x14414 -/* 00016D40 00023AD0 3D 20 00 00 */ lis r9, .rodata+0xC50@ha -/* 00016D44 00023AD4 FF C0 08 90 */ fmr f30, f1 -/* 00016D48 00023AD8 C3 89 0C 50 */ lfs f28, .rodata+0xC50@l(r9) -/* 00016D4C 00023ADC FC 1E E0 00 */ fcmpu cr0, f30, f28 -/* 00016D50 00023AE0 4C 62 0B 82 */ cror un, eq, gt -/* 00016D54 00023AE4 41 83 6D 5C */ bso .text+0x16D5C -/* 00016D58 00023AE8 FF C0 E0 90 */ fmr f30, f28 -/* 00016D5C 00023AEC 3D 20 00 00 */ lis r9, .rodata+0xC70@ha -/* 00016D60 00023AF0 FC 20 D8 90 */ fmr f1, f27 -/* 00016D64 00023AF4 C0 09 0C 70 */ lfs f0, .rodata+0xC70@l(r9) -/* 00016D68 00023AF8 7F E3 FB 78 */ mr r3, r31 -/* 00016D6C 00023AFC EF DE 00 32 */ fmuls f30, f30, f0 -/* 00016D70 00023B00 48 01 5C A1 */ bl .text+0x15CA0 -.L_00016D74: -/* 00016D74 00023B04 48 01 38 C9 */ bl .text+0x138C8 -/* 00016D78 00023B08 FF E0 08 90 */ fmr f31, f1 -/* 00016D7C 00023B0C FC 20 E8 90 */ fmr f1, f29 -/* 00016D80 00023B10 48 01 39 D5 */ bl .text+0x139D4 -/* 00016D84 00023B14 3D 60 00 00 */ lis r11, .rodata+0xC74@ha -/* 00016D88 00023B18 EC 1F 07 F2 */ fmuls f0, f31, f31 -/* 00016D8C 00023B1C C1 AB 0C 74 */ lfs f13, .rodata+0xC74@l(r11) -/* 00016D90 00023B20 3D 20 00 00 */ lis r9, .rodata+0xC7C@ha -/* 00016D94 00023B24 C1 89 0C 7C */ lfs f12, .rodata+0xC7C@l(r9) -/* 00016D98 00023B28 3D 60 00 00 */ lis r11, .rodata+0xC78@ha -/* 00016D9C 00023B2C EC 21 03 72 */ fmuls f1, f1, f13 -/* 00016DA0 00023B30 C1 6B 0C 78 */ lfs f11, .rodata+0xC78@l(r11) -.L_00016DA4: -/* 00016DA4 00023B34 EC 00 08 24 */ fdivs f0, f0, f1 -/* 00016DA8 00023B38 EC 00 F8 2A */ fadds f0, f0, f31 -/* 00016DAC 00023B3C ED A0 F0 28 */ fsubs f13, f0, f30 -/* 00016DB0 00023B40 EC 00 F8 28 */ fsubs f0, f0, f31 -/* 00016DB4 00023B44 EC 20 07 B2 */ fmuls f1, f0, f30 -/* 00016DB8 00023B48 FC 0D 60 00 */ fcmpu cr0, f13, f12 -/* 00016DBC 00023B4C 4C 62 03 82 */ cror un, eq, lt -/* 00016DC0 00023B50 41 83 6D CC */ bso .text+0x16DCC -/* 00016DC4 00023B54 EC 01 68 24 */ fdivs f0, f1, f13 -/* 00016DC8 00023B58 ED 60 00 2A */ fadds f11, f0, f0 -/* 00016DCC 00023B5C FC 0B 08 00 */ fcmpu cr0, f11, f1 -/* 00016DD0 00023B60 4C 62 0B 82 */ cror un, eq, gt -/* 00016DD4 00023B64 41 83 6D DC */ bso .text+0x16DDC -/* 00016DD8 00023B68 ED 61 E0 2A */ fadds f11, f1, f28 -/* 00016DDC 00023B6C 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha -/* 00016DE0 00023B70 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) -/* 00016DE4 00023B74 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00016DE8 00023B78 40 82 6E 24 */ bne .text+0x16E24 -/* 00016DEC 00023B7C 3D 20 00 00 */ lis r9, .rodata+0xC68@ha -/* 00016DF0 00023B80 EC 0B 08 2A */ fadds f0, f11, f1 -/* 00016DF4 00023B84 C1 A9 0C 68 */ lfs f13, .rodata+0xC68@l(r9) -/* 00016DF8 00023B88 81 7F 00 1C */ lwz r11, 0x1c(r31) -/* 00016DFC 00023B8C EC 00 03 72 */ fmuls f0, f0, f13 -/* 00016E00 00023B90 D0 0B 00 B4 */ stfs f0, 0xb4(r11) -/* 00016E04 00023B94 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha -/* 00016E08 00023B98 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) -/* 00016E0C 00023B9C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00016E10 00023BA0 40 82 6E 24 */ bne .text+0x16E24 -/* 00016E14 00023BA4 3D 20 00 00 */ lis r9, .rodata+0xC48@ha -/* 00016E18 00023BA8 81 7F 00 1C */ lwz r11, 0x1c(r31) -/* 00016E1C 00023BAC C0 09 0C 48 */ lfs f0, .rodata+0xC48@l(r9) -/* 00016E20 00023BB0 D0 0B 00 B8 */ stfs f0, 0xb8(r11) -/* 00016E24 00023BB4 7F 03 C3 78 */ mr r3, r24 -/* 00016E28 00023BB8 7F 24 CB 78 */ mr r4, r25 -/* 00016E2C 00023BBC 48 00 00 01 */ bl bDistBetween__FPC8bVector3T0 -/* 00016E30 00023BC0 3D 20 00 00 */ lis r9, _6Camera.StopUpdating@ha -/* 00016E34 00023BC4 80 09 00 00 */ lwz r0, _6Camera.StopUpdating@l(r9) -/* 00016E38 00023BC8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00016E3C 00023BCC 40 82 6E 48 */ bne .text+0x16E48 -/* 00016E40 00023BD0 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 00016E44 00023BD4 D0 29 00 B0 */ stfs f1, 0xb0(r9) -/* 00016E48 00023BD8 80 7F 00 1C */ lwz r3, 0x1c(r31) -/* 00016E4C 00023BDC 7F 84 E3 78 */ mr r4, r28 -/* 00016E50 00023BE0 FC 20 D0 90 */ fmr f1, f26 -/* 00016E54 00023BE4 48 00 04 ED */ bl .L_00017340 -/* 00016E58 00023BE8 80 01 01 C4 */ lwz r0, 0x1c4(r1) -/* 00016E5C 00023BEC 81 81 01 6C */ lwz r12, 0x16c(r1) -.L_00016E60: -/* 00016E60 00023BF0 7C 08 03 A6 */ mtlr r0 -/* 00016E64 00023BF4 BB 01 01 70 */ lmw r24, 0x170(r1) -/* 00016E68 00023BF8 E3 41 01 90 */ psq_l f26, 0x190(r1), 0, qr0 -/* 00016E6C 00023BFC E3 61 01 98 */ psq_l f27, 0x198(r1), 0, qr0 -/* 00016E70 00023C00 E3 81 01 A0 */ psq_l f28, 0x1a0(r1), 0, qr0 -/* 00016E74 00023C04 E3 A1 01 A8 */ psq_l f29, 0x1a8(r1), 0, qr0 -/* 00016E78 00023C08 E3 C1 01 B0 */ psq_l f30, 0x1b0(r1), 0, qr0 -/* 00016E7C 00023C0C E3 E1 01 B8 */ psq_l f31, 0x1b8(r1), 0, qr0 -/* 00016E80 00023C10 7D 80 81 20 */ mtcrf 8, r12 -/* 00016E84 00023C14 38 21 01 C0 */ addi r1, r1, 0x1c0 -/* 00016E88 00023C18 4E 80 00 20 */ blr -.endfn Update__8ICEMoverf - -# .text:0x16E8C | size: 0x30 -# ReplayNosScore(ICEAnchor*) -.fn ReplayNosScore__FP9ICEAnchor, local -/* 00016E8C 00023C1C 80 03 00 8C */ lwz r0, 0x8c(r3) -/* 00016E90 00023C20 3D 20 00 00 */ lis r9, .rodata+0xC80@ha -/* 00016E94 00023C24 C0 29 0C 80 */ lfs f1, .rodata+0xC80@l(r9) -/* 00016E98 00023C28 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00016E9C 00023C2C 4D 82 00 20 */ beqlr -/* 00016EA0 00023C30 3D 20 00 00 */ lis r9, .rodata+0xC84@ha -/* 00016EA4 00023C34 3D 60 00 00 */ lis r11, .rodata+0xC88@ha -/* 00016EA8 00023C38 C1 83 00 90 */ lfs f12, 0x90(r3) -/* 00016EAC 00023C3C C1 A9 0C 84 */ lfs f13, .rodata+0xC84@l(r9) -/* 00016EB0 00023C40 C0 0B 0C 88 */ lfs f0, .rodata+0xC88@l(r11) -/* 00016EB4 00023C44 EC 2C 03 7A */ fmadds f1, f12, f13, f0 -.L_00016EB8: -/* 00016EB8 00023C48 4E 80 00 20 */ blr -.endfn ReplayNosScore__FP9ICEAnchor - -# .text:0x16EBC | size: 0x8 -# ReplayNosMirror(ICEAnchor*) -.fn ReplayNosMirror__FP9ICEAnchor, local -/* 00016EBC 00023C4C 38 60 00 00 */ li r3, 0x0 -/* 00016EC0 00023C50 4E 80 00 20 */ blr -.endfn ReplayNosMirror__FP9ICEAnchor - -# .text:0x16EC4 | size: 0xC0 -# ReplayJumpScore(ICEAnchor*) -.fn ReplayJumpScore__FP9ICEAnchor, local -/* 00016EC4 00023C54 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 00016EC8 00023C58 7C 08 02 A6 */ mflr r0 -/* 00016ECC 00023C5C F3 E1 00 10 */ psq_st f31, 0x10(r1), 0, qr0 -.L_00016ED0: -/* 00016ED0 00023C60 90 01 00 1C */ stw r0, 0x1c(r1) -/* 00016ED4 00023C64 3D 20 00 00 */ lis r9, .rodata+0xC8C@ha -/* 00016ED8 00023C68 C0 03 00 38 */ lfs f0, 0x38(r3) -/* 00016EDC 00023C6C C0 29 0C 8C */ lfs f1, .rodata+0xC8C@l(r9) -/* 00016EE0 00023C70 FC 00 08 00 */ fcmpu cr0, f0, f1 -/* 00016EE4 00023C74 4C 62 0B 82 */ cror un, eq, gt -/* 00016EE8 00023C78 41 83 6E F8 */ bso .text+0x16EF8 -/* 00016EEC 00023C7C 3D 20 00 00 */ lis r9, .rodata+0xC90@ha -/* 00016EF0 00023C80 C3 E9 0C 90 */ lfs f31, .rodata+0xC90@l(r9) -.L_00016EF4: -/* 00016EF4 00023C84 48 01 6E FC */ b .text+0x16EFC -/* 00016EF8 00023C88 FF E0 08 90 */ fmr f31, f1 -/* 00016EFC 00023C8C 80 03 00 88 */ lwz r0, 0x88(r3) -/* 00016F00 00023C90 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00016F04 00023C94 41 82 6F 64 */ beq .text+0x16F64 -/* 00016F08 00023C98 3D 20 00 00 */ lis r9, .rodata+0xC8C@ha -/* 00016F0C 00023C9C 3D 60 00 00 */ lis r11, .rodata+0xC94@ha -/* 00016F10 00023CA0 C0 09 0C 8C */ lfs f0, .rodata+0xC8C@l(r9) -/* 00016F14 00023CA4 38 61 00 08 */ addi r3, r1, 0x8 -/* 00016F18 00023CA8 C0 2B 0C 94 */ lfs f1, .rodata+0xC94@l(r11) -/* 00016F1C 00023CAC 38 81 00 0C */ addi r4, r1, 0xc -/* 00016F20 00023CB0 D0 01 00 0C */ stfs f0, 0xc(r1) -/* 00016F24 00023CB4 38 A0 00 01 */ li r5, 0x1 -/* 00016F28 00023CB8 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 00016F2C 00023CBC 48 01 72 C1 */ bl .text+0x172C0 -/* 00016F30 00023CC0 3D 20 00 00 */ lis r9, .rodata+0xC90@ha -/* 00016F34 00023CC4 C0 01 00 08 */ lfs f0, 0x8(r1) -/* 00016F38 00023CC8 C1 89 0C 90 */ lfs f12, .rodata+0xC90@l(r9) -/* 00016F3C 00023CCC FC 00 60 00 */ fcmpu cr0, f0, f12 -.L_00016F40: -/* 00016F40 00023CD0 4C 62 03 82 */ cror un, eq, lt -/* 00016F44 00023CD4 41 83 6F 64 */ bso .text+0x16F64 -/* 00016F48 00023CD8 3D 20 00 00 */ lis r9, .rodata+0xC98@ha -/* 00016F4C 00023CDC C1 A1 00 0C */ lfs f13, 0xc(r1) -/* 00016F50 00023CE0 C0 09 0C 98 */ lfs f0, .rodata+0xC98@l(r9) -/* 00016F54 00023CE4 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 00016F58 00023CE8 4C 62 03 82 */ cror un, eq, lt -/* 00016F5C 00023CEC 41 83 6F 64 */ bso .text+0x16F64 -/* 00016F60 00023CF0 FF E0 60 90 */ fmr f31, f12 -.L_00016F64: -/* 00016F64 00023CF4 3D 20 00 00 */ lis r9, .rodata+0xC9C@ha -/* 00016F68 00023CF8 C0 29 0C 9C */ lfs f1, .rodata+0xC9C@l(r9) -/* 00016F6C 00023CFC EC 3F 00 72 */ fmuls f1, f31, f1 -/* 00016F70 00023D00 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 00016F74 00023D04 7C 08 03 A6 */ mtlr r0 -/* 00016F78 00023D08 E3 E1 00 10 */ psq_l f31, 0x10(r1), 0, qr0 -/* 00016F7C 00023D0C 38 21 00 18 */ addi r1, r1, 0x18 -/* 00016F80 00023D10 4E 80 00 20 */ blr -.endfn ReplayJumpScore__FP9ICEAnchor - -# .text:0x16F84 | size: 0x8 -# ReplayJumpMirror(ICEAnchor*) -.fn ReplayJumpMirror__FP9ICEAnchor, local -/* 00016F84 00023D14 38 60 00 00 */ li r3, 0x0 -/* 00016F88 00023D18 4E 80 00 20 */ blr -.endfn ReplayJumpMirror__FP9ICEAnchor - -# .text:0x16F8C | size: 0x54 -# ReplaySpeedScore(ICEAnchor*) -.fn ReplaySpeedScore__FP9ICEAnchor, local -/* 00016F8C 00023D1C 3D 20 00 00 */ lis r9, .rodata+0xCA4@ha -/* 00016F90 00023D20 C1 A3 00 70 */ lfs f13, 0x70(r3) -/* 00016F94 00023D24 C0 09 0C A4 */ lfs f0, .rodata+0xCA4@l(r9) -/* 00016F98 00023D28 3D 60 00 00 */ lis r11, .rodata+0xCA0@ha -/* 00016F9C 00023D2C C0 2B 0C A0 */ lfs f1, .rodata+0xCA0@l(r11) -/* 00016FA0 00023D30 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 00016FA4 00023D34 4C 62 03 82 */ cror un, eq, lt -/* 00016FA8 00023D38 4D 83 00 20 */ bsolr -/* 00016FAC 00023D3C C0 03 00 74 */ lfs f0, 0x74(r3) -/* 00016FB0 00023D40 3D 20 00 00 */ lis r9, .rodata+0xCA8@ha -/* 00016FB4 00023D44 3D 60 00 00 */ lis r11, .rodata+0xCAC@ha -/* 00016FB8 00023D48 C1 69 0C A8 */ lfs f11, .rodata+0xCA8@l(r9) -/* 00016FBC 00023D4C EC 0D 00 24 */ fdivs f0, f13, f0 -/* 00016FC0 00023D50 3D 20 00 00 */ lis r9, .rodata+0xCB0@ha -/* 00016FC4 00023D54 C1 AB 0C AC */ lfs f13, .rodata+0xCAC@l(r11) -/* 00016FC8 00023D58 C1 89 0C B0 */ lfs f12, .rodata+0xCB0@l(r9) -.L_00016FCC: -/* 00016FCC 00023D5C EC 00 6A FA */ fmadds f0, f0, f11, f13 -/* 00016FD0 00023D60 FC 00 08 2E */ fsel f0, f0, f0, f1 -/* 00016FD4 00023D64 ED AC 00 28 */ fsubs f13, f12, f0 -/* 00016FD8 00023D68 FC 2D 60 2E */ fsel f1, f13, f0, f12 -.L_00016FDC: -/* 00016FDC 00023D6C 4E 80 00 20 */ blr -.endfn ReplaySpeedScore__FP9ICEAnchor - -# .text:0x16FE0 | size: 0x8 -# ReplaySpeedMirror(ICEAnchor*) -.fn ReplaySpeedMirror__FP9ICEAnchor, local -/* 00016FE0 00023D70 38 60 00 00 */ li r3, 0x0 -/* 00016FE4 00023D74 4E 80 00 20 */ blr -.endfn ReplaySpeedMirror__FP9ICEAnchor - -# .text:0x16FE8 | size: 0x70 -# ReplayCornerScore(ICEAnchor*) -.fn ReplayCornerScore__FP9ICEAnchor, local -/* 00016FE8 00023D78 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00016FEC 00023D7C 7C 08 02 A6 */ mflr r0 -/* 00016FF0 00023D80 F3 E1 00 08 */ psq_st f31, 0x8(r1), 0, qr0 -.L_00016FF4: -/* 00016FF4 00023D84 90 01 00 14 */ stw r0, 0x14(r1) -/* 00016FF8 00023D88 3D 60 00 00 */ lis r11, .rodata+0xCB8@ha -/* 00016FFC 00023D8C C1 A3 00 70 */ lfs f13, 0x70(r3) -/* 00017000 00023D90 C0 0B 0C B8 */ lfs f0, .rodata+0xCB8@l(r11) -/* 00017004 00023D94 3D 20 00 00 */ lis r9, .rodata+0xCB4@ha -/* 00017008 00023D98 C3 E9 0C B4 */ lfs f31, .rodata+0xCB4@l(r9) -/* 0001700C 00023D9C FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 00017010 00023DA0 4C 62 03 82 */ cror un, eq, lt -/* 00017014 00023DA4 41 83 70 40 */ bso .text+0x17040 -/* 00017018 00023DA8 48 01 72 CD */ bl .text+0x172CC -/* 0001701C 00023DAC 3D 60 00 00 */ lis r11, .rodata+0xCBC@ha -/* 00017020 00023DB0 FC 20 0A 10 */ fabs f1, f1 -/* 00017024 00023DB4 C0 0B 0C BC */ lfs f0, .rodata+0xCBC@l(r11) -/* 00017028 00023DB8 3D 20 00 00 */ lis r9, .rodata+0xCC0@ha -/* 0001702C 00023DBC C1 A9 0C C0 */ lfs f13, .rodata+0xCC0@l(r9) -/* 00017030 00023DC0 EC 21 00 32 */ fmuls f1, f1, f0 -/* 00017034 00023DC4 FC 21 F8 6E */ fsel f1, f1, f1, f31 -/* 00017038 00023DC8 EC 0D 08 28 */ fsubs f0, f13, f1 -/* 0001703C 00023DCC FF E0 68 6E */ fsel f31, f0, f1, f13 -/* 00017040 00023DD0 FC 20 F8 90 */ fmr f1, f31 -/* 00017044 00023DD4 80 01 00 14 */ lwz r0, 0x14(r1) -/* 00017048 00023DD8 7C 08 03 A6 */ mtlr r0 -/* 0001704C 00023DDC E3 E1 00 08 */ psq_l f31, 0x8(r1), 0, qr0 -/* 00017050 00023DE0 38 21 00 10 */ addi r1, r1, 0x10 -.L_00017054: -/* 00017054 00023DE4 4E 80 00 20 */ blr -.endfn ReplayCornerScore__FP9ICEAnchor - -# .text:0x17058 | size: 0x34 -# ReplayCornerMirror(ICEAnchor*) -.fn ReplayCornerMirror__FP9ICEAnchor, local -/* 00017058 00023DE8 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0001705C 00023DEC 7C 08 02 A6 */ mflr r0 -/* 00017060 00023DF0 90 01 00 0C */ stw r0, 0xc(r1) -/* 00017064 00023DF4 48 01 72 CD */ bl .text+0x172CC -/* 00017068 00023DF8 3D 20 00 00 */ lis r9, .rodata+0xCC4@ha -/* 0001706C 00023DFC C0 09 0C C4 */ lfs f0, .rodata+0xCC4@l(r9) -/* 00017070 00023E00 FF 81 00 00 */ fcmpu cr7, f1, f0 -/* 00017074 00023E04 7C 60 00 26 */ mfcr r3 -/* 00017078 00023E08 54 63 EF FE */ extrwi r3, r3, 1, 28 -.L_0001707C: -/* 0001707C 00023E0C 80 01 00 0C */ lwz r0, 0xc(r1) -/* 00017080 00023E10 7C 08 03 A6 */ mtlr r0 -/* 00017084 00023E14 38 21 00 08 */ addi r1, r1, 0x8 -/* 00017088 00023E18 4E 80 00 20 */ blr -.endfn ReplayCornerMirror__FP9ICEAnchor - -# .text:0x1708C | size: 0xBC -# ReplayBurnoutScore(ICEAnchor*) -.fn ReplayBurnoutScore__FP9ICEAnchor, local -/* 0001708C 00023E1C 3D 60 00 00 */ lis r11, .rodata+0xCC8@ha -/* 00017090 00023E20 C1 03 00 70 */ lfs f8, 0x70(r3) -/* 00017094 00023E24 C1 8B 0C C8 */ lfs f12, .rodata+0xCC8@l(r11) -/* 00017098 00023E28 3D 20 00 00 */ lis r9, .rodata+0xCCC@ha -/* 0001709C 00023E2C C1 69 0C CC */ lfs f11, .rodata+0xCCC@l(r9) -/* 000170A0 00023E30 ED A8 60 28 */ fsubs f13, f8, f12 -/* 000170A4 00023E34 FD AD 62 2E */ fsel f13, f13, f8, f12 -.L_000170A8: -/* 000170A8 00023E38 EC 0B 68 28 */ fsubs f0, f11, f13 -/* 000170AC 00023E3C FC 00 5B 6E */ fsel f0, f0, f13, f11 -/* 000170B0 00023E40 FC 08 00 00 */ fcmpu cr0, f8, f0 -/* 000170B4 00023E44 41 82 70 C4 */ beq .text+0x170C4 -/* 000170B8 00023E48 3D 20 00 00 */ lis r9, .rodata+0xCD0@ha -.L_000170BC: -/* 000170BC 00023E4C C0 29 0C D0 */ lfs f1, .rodata+0xCD0@l(r9) -/* 000170C0 00023E50 4E 80 00 20 */ blr -/* 000170C4 00023E54 3D 60 00 00 */ lis r11, .rodata+0xCDC@ha -/* 000170C8 00023E58 3D 40 00 00 */ lis r10, .rodata+0xCD4@ha -/* 000170CC 00023E5C C1 AB 0C DC */ lfs f13, .rodata+0xCDC@l(r11) -/* 000170D0 00023E60 3D 20 00 00 */ lis r9, .rodata+0xCD8@ha -/* 000170D4 00023E64 C1 69 0C D8 */ lfs f11, .rodata+0xCD8@l(r9) -/* 000170D8 00023E68 3D 60 00 00 */ lis r11, .rodata+0xCD0@ha -/* 000170DC 00023E6C ED 88 68 28 */ fsubs f12, f8, f13 -/* 000170E0 00023E70 C1 2A 0C D4 */ lfs f9, .rodata+0xCD4@l(r10) -/* 000170E4 00023E74 C0 03 00 80 */ lfs f0, 0x80(r3) -/* 000170E8 00023E78 FD 8C 6A 2E */ fsel f12, f12, f8, f13 -/* 000170EC 00023E7C ED AB 60 28 */ fsubs f13, f11, f12 -/* 000170F0 00023E80 C1 4B 0C D0 */ lfs f10, .rodata+0xCD0@l(r11) -/* 000170F4 00023E84 EC 00 5A 78 */ fmsubs f0, f0, f9, f11 -.L_000170F8: -/* 000170F8 00023E88 FD AD 5B 2E */ fsel f13, f13, f12, f11 -/* 000170FC 00023E8C FC 00 50 2E */ fsel f0, f0, f0, f10 -/* 00017100 00023E90 FC 08 68 00 */ fcmpu cr0, f8, f13 -/* 00017104 00023E94 ED 8B 00 28 */ fsubs f12, f11, f0 -/* 00017108 00023E98 FD 8C 58 2E */ fsel f12, f12, f0, f11 -/* 0001710C 00023E9C 41 82 71 18 */ beq .text+0x17118 -/* 00017110 00023EA0 FC 20 60 90 */ fmr f1, f12 -/* 00017114 00023EA4 4E 80 00 20 */ blr -/* 00017118 00023EA8 3D 20 00 00 */ lis r9, .rodata+0xCE0@ha -/* 0001711C 00023EAC C1 A3 00 78 */ lfs f13, 0x78(r3) -/* 00017120 00023EB0 C0 09 0C E0 */ lfs f0, .rodata+0xCE0@l(r9) -/* 00017124 00023EB4 FC 0D 00 00 */ fcmpu cr0, f13, f0 -/* 00017128 00023EB8 4C 62 03 82 */ cror un, eq, lt -/* 0001712C 00023EBC 41 83 71 40 */ bso .text+0x17140 -/* 00017130 00023EC0 3D 20 00 00 */ lis r9, .rodata+0xCE4@ha -/* 00017134 00023EC4 C0 29 0C E4 */ lfs f1, .rodata+0xCE4@l(r9) -/* 00017138 00023EC8 EC 2C 08 2A */ fadds f1, f12, f1 -/* 0001713C 00023ECC 4E 80 00 20 */ blr -/* 00017140 00023ED0 FC 20 60 90 */ fmr f1, f12 -/* 00017144 00023ED4 4E 80 00 20 */ blr -.endfn ReplayBurnoutScore__FP9ICEAnchor - -# .text:0x17148 | size: 0x8 -# ReplayBurnoutMirror(ICEAnchor*) -.fn ReplayBurnoutMirror__FP9ICEAnchor, local -/* 00017148 00023ED8 38 60 00 00 */ li r3, 0x0 -/* 0001714C 00023EDC 4E 80 00 20 */ blr -.endfn ReplayBurnoutMirror__FP9ICEAnchor - -# .text:0x17150 | size: 0x88 -# ReplayPowerSlideScore(ICEAnchor*) -.fn ReplayPowerSlideScore__FP9ICEAnchor, local -/* 00017150 00023EE0 3D 20 00 00 */ lis r9, .rodata+0xCE8@ha -/* 00017154 00023EE4 C0 03 00 70 */ lfs f0, 0x70(r3) -/* 00017158 00023EE8 C1 A9 0C E8 */ lfs f13, .rodata+0xCE8@l(r9) -/* 0001715C 00023EEC FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00017160 00023EF0 41 81 71 70 */ bgt .text+0x17170 -/* 00017164 00023EF4 3D 20 00 00 */ lis r9, .rodata+0xCEC@ha -/* 00017168 00023EF8 C0 29 0C EC */ lfs f1, .rodata+0xCEC@l(r9) -/* 0001716C 00023EFC 4E 80 00 20 */ blr -/* 00017170 00023F00 3D 20 00 00 */ lis r9, .rodata+0xCF0@ha -/* 00017174 00023F04 3D 60 00 00 */ lis r11, .rodata+0xCF4@ha -/* 00017178 00023F08 C1 69 0C F0 */ lfs f11, .rodata+0xCF0@l(r9) -/* 0001717C 00023F0C 3D 40 00 00 */ lis r10, .rodata+0xCF8@ha -/* 00017180 00023F10 C0 03 00 84 */ lfs f0, 0x84(r3) -/* 00017184 00023F14 3D 20 00 00 */ lis r9, .rodata+0xCEC@ha -/* 00017188 00023F18 C1 8B 0C F4 */ lfs f12, .rodata+0xCF4@l(r11) -/* 0001718C 00023F1C FC 00 02 10 */ fabs f0, f0 -/* 00017190 00023F20 C1 AA 0C F8 */ lfs f13, .rodata+0xCF8@l(r10) -/* 00017194 00023F24 C1 49 0C EC */ lfs f10, .rodata+0xCEC@l(r9) -/* 00017198 00023F28 EC 00 62 F8 */ fmsubs f0, f0, f11, f12 -/* 0001719C 00023F2C EC 00 03 72 */ fmuls f0, f0, f13 -/* 000171A0 00023F30 FC 00 50 00 */ fcmpu cr0, f0, f10 -/* 000171A4 00023F34 4C 62 03 82 */ cror un, eq, lt -/* 000171A8 00023F38 41 83 71 D0 */ bso .text+0x171D0 -/* 000171AC 00023F3C 3D 20 00 00 */ lis r9, .rodata+0xCFC@ha -/* 000171B0 00023F40 3D 60 00 00 */ lis r11, .rodata+0xD00@ha -/* 000171B4 00023F44 C0 29 0C FC */ lfs f1, .rodata+0xCFC@l(r9) -/* 000171B8 00023F48 C1 AB 0D 00 */ lfs f13, .rodata+0xD00@l(r11) -/* 000171BC 00023F4C EC 20 08 2A */ fadds f1, f0, f1 -/* 000171C0 00023F50 FC 21 50 6E */ fsel f1, f1, f1, f10 -/* 000171C4 00023F54 EC 0D 08 28 */ fsubs f0, f13, f1 -/* 000171C8 00023F58 FC 20 68 6E */ fsel f1, f0, f1, f13 -/* 000171CC 00023F5C 4E 80 00 20 */ blr -/* 000171D0 00023F60 FC 20 50 90 */ fmr f1, f10 -.L_000171D4: -/* 000171D4 00023F64 4E 80 00 20 */ blr -.endfn ReplayPowerSlideScore__FP9ICEAnchor - -# .text:0x171D8 | size: 0x1C -# ReplayPowerSlideMirror(ICEAnchor*) -.fn ReplayPowerSlideMirror__FP9ICEAnchor, local -/* 000171D8 00023F68 3D 20 00 00 */ lis r9, .rodata+0xD04@ha -/* 000171DC 00023F6C C1 A3 00 84 */ lfs f13, 0x84(r3) -/* 000171E0 00023F70 C0 09 0D 04 */ lfs f0, .rodata+0xD04@l(r9) -/* 000171E4 00023F74 FF 8D 00 00 */ fcmpu cr7, f13, f0 -/* 000171E8 00023F78 7C 60 00 26 */ mfcr r3 -/* 000171EC 00023F7C 54 63 EF FE */ extrwi r3, r3, 1, 28 -/* 000171F0 00023F80 4E 80 00 20 */ blr -.endfn ReplayPowerSlideMirror__FP9ICEAnchor - -# .text:0x171F4 | size: 0x8 -.fn GetReplayCategoryNumElements__3ICEv, global -/* 000171F4 00023F84 38 60 00 06 */ li r3, 0x6 -/* 000171F8 00023F88 4E 80 00 20 */ blr -.endfn GetReplayCategoryNumElements__3ICEv - -# .text:0x171FC | size: 0x18 -.fn GetReplayCategoryHash__3ICEi, global -/* 000171FC 00023F8C 1C 63 00 18 */ mulli r3, r3, 0x18 -/* 00017200 00023F90 3D 20 00 00 */ lis r9, ReplayCategories@ha -/* 00017204 00023F94 39 29 00 00 */ addi r9, r9, ReplayCategories@l -/* 00017208 00023F98 39 29 00 04 */ addi r9, r9, 0x4 -/* 0001720C 00023F9C 7C 63 48 2E */ lwzx r3, r3, r9 -/* 00017210 00023FA0 4E 80 00 20 */ blr -.endfn GetReplayCategoryHash__3ICEi - -# .text:0x17214 | size: 0x40 -.fn GetReplayCategory__3ICEUi, global -/* 00017214 00023FA4 3D 20 00 00 */ lis r9, ReplayCategories@ha -/* 00017218 00023FA8 7C 6A 1B 78 */ mr r10, r3 -/* 0001721C 00023FAC 39 29 00 00 */ addi r9, r9, ReplayCategories@l -/* 00017220 00023FB0 39 60 00 00 */ li r11, 0x0 -/* 00017224 00023FB4 39 09 00 04 */ addi r8, r9, 0x4 -/* 00017228 00023FB8 1C 6B 00 18 */ mulli r3, r11, 0x18 -/* 0001722C 00023FBC 7C 03 40 2E */ lwzx r0, r3, r8 -/* 00017230 00023FC0 7C 0A 00 00 */ cmpw r10, r0 -/* 00017234 00023FC4 40 82 72 40 */ bne .text+0x17240 -/* 00017238 00023FC8 7C 63 4A 14 */ add r3, r3, r9 -/* 0001723C 00023FCC 4E 80 00 20 */ blr -/* 00017240 00023FD0 39 6B 00 01 */ addi r11, r11, 0x1 -/* 00017244 00023FD4 2C 0B 00 05 */ cmpwi r11, 0x5 -/* 00017248 00023FD8 40 81 72 28 */ ble .text+0x17228 -/* 0001724C 00023FDC 38 60 00 00 */ li r3, 0x0 -/* 00017250 00023FE0 4E 80 00 20 */ blr -.endfn GetReplayCategory__3ICEUi - -# .text:0x17254 | size: 0x38 -.fn WasRecentlyUsed__9ICEReplayP8ICETrack, global -/* 00017254 00023FE4 3D 20 00 00 */ lis r9, _9ICEReplay.RecentlyUsedTracks@ha -/* 00017258 00023FE8 39 60 00 00 */ li r11, 0x0 -/* 0001725C 00023FEC 39 49 00 00 */ addi r10, r9, _9ICEReplay.RecentlyUsedTracks@l -/* 00017260 00023FF0 55 60 10 3A */ slwi r0, r11, 2 -/* 00017264 00023FF4 7D 2A 00 2E */ lwzx r9, r10, r0 -.L_00017268: -/* 00017268 00023FF8 7C 03 48 00 */ cmpw r3, r9 -/* 0001726C 00023FFC 40 82 72 78 */ bne .text+0x17278 -.L_00017270: -/* 00017270 00024000 38 60 00 01 */ li r3, 0x1 -/* 00017274 00024004 4E 80 00 20 */ blr -/* 00017278 00024008 39 6B 00 01 */ addi r11, r11, 0x1 -/* 0001727C 0002400C 2C 0B 00 02 */ cmpwi r11, 0x2 -/* 00017280 00024010 40 81 72 60 */ ble .text+0x17260 -.L_00017284: -/* 00017284 00024014 38 60 00 00 */ li r3, 0x0 -/* 00017288 00024018 4E 80 00 20 */ blr -.endfn WasRecentlyUsed__9ICEReplayP8ICETrack - -# .text:0x1728C | size: 0x34 -.fn ClearRecentlyUsed__9ICEReplayv, global -/* 0001728C 0002401C 3D 20 00 00 */ lis r9, _9ICEReplay.nRecentlyUsedIndex@ha -/* 00017290 00024020 38 00 00 00 */ li r0, 0x0 -.L_00017294: -/* 00017294 00024024 90 09 00 00 */ stw r0, _9ICEReplay.nRecentlyUsedIndex@l(r9) -/* 00017298 00024028 3D 60 00 00 */ lis r11, _9ICEReplay.RecentlyUsedTracks@ha -/* 0001729C 0002402C 39 6B 00 00 */ addi r11, r11, _9ICEReplay.RecentlyUsedTracks@l -/* 000172A0 00024030 39 20 00 00 */ li r9, 0x0 -/* 000172A4 00024034 39 40 00 00 */ li r10, 0x0 -/* 000172A8 00024038 55 20 10 3A */ slwi r0, r9, 2 -/* 000172AC 0002403C 39 29 00 01 */ addi r9, r9, 0x1 -/* 000172B0 00024040 7D 4B 01 2E */ stwx r10, r11, r0 -/* 000172B4 00024044 2C 09 00 02 */ cmpwi r9, 0x2 -/* 000172B8 00024048 40 81 72 A8 */ ble .text+0x172A8 -/* 000172BC 0002404C 4E 80 00 20 */ blr -.endfn ClearRecentlyUsed__9ICEReplayv - -# .text:0x172C0 | size: 0xC -.fn PredictAverageAir__FfPfT1b, global -/* 000172C0 00024050 3D 20 00 00 */ lis r9, sPredictedAir@ha -/* 000172C4 00024054 C0 29 00 00 */ lfs f1, sPredictedAir@l(r9) -/* 000172C8 00024058 4E 80 00 20 */ blr -.endfn PredictAverageAir__FfPfT1b - -# .text:0x172CC | size: 0xC -# GetRecentCurvature() -.fn GetRecentCurvature__Fv, global -/* 000172CC 0002405C 3D 20 00 00 */ lis r9, sRecentCurvature@ha -/* 000172D0 00024060 C0 29 00 00 */ lfs f1, sRecentCurvature@l(r9) -/* 000172D4 00024064 4E 80 00 20 */ blr -.endfn GetRecentCurvature__Fv - -# .text:0x172D8 | size: 0x444 -.fn CameraCutIsGood__9ICEReplayP7ICEDatafP9ICEAnchor, global -/* 000172D8 00024068 94 21 FE 88 */ stwu r1, -0x178(r1) -/* 000172DC 0002406C 7C 08 02 A6 */ mflr r0 -/* 000172E0 00024070 F3 61 01 50 */ psq_st f27, 0x150(r1), 0, qr0 -/* 000172E4 00024074 F3 81 01 58 */ psq_st f28, 0x158(r1), 0, qr0 -/* 000172E8 00024078 F3 A1 01 60 */ psq_st f29, 0x160(r1), 0, qr0 -/* 000172EC 0002407C F3 C1 01 68 */ psq_st f30, 0x168(r1), 0, qr0 -/* 000172F0 00024080 F3 E1 01 70 */ psq_st f31, 0x170(r1), 0, qr0 -/* 000172F4 00024084 BF 01 01 30 */ stmw r24, 0x130(r1) -/* 000172F8 00024088 90 01 01 7C */ stw r0, 0x17c(r1) -/* 000172FC 0002408C 7C 78 1B 78 */ mr r24, r3 -/* 00017300 00024090 7C 9F 23 78 */ mr r31, r4 -/* 00017304 00024094 48 00 19 E9 */ bl .L_00018CEC -/* 00017308 00024098 3D 20 00 00 */ lis r9, .rodata+0xD88@ha -/* 0001730C 0002409C 7C 79 1B 79 */ mr. r25, r3 -/* 00017310 000240A0 39 69 0D 88 */ addi r11, r9, .rodata+0xD88@l -/* 00017314 000240A4 80 09 0D 88 */ lwz r0, .rodata+0xD88@l(r9) -/* 00017318 000240A8 89 4B 00 04 */ lbz r10, 0x4(r11) -/* 0001731C 000240AC 90 01 00 08 */ stw r0, 0x8(r1) -/* 00017320 000240B0 99 41 00 0C */ stb r10, 0xc(r1) -/* 00017324 000240B4 41 82 76 C8 */ beq .text+0x176C8 -/* 00017328 000240B8 39 7F 00 10 */ addi r11, r31, 0x10 -/* 0001732C 000240BC 3D 20 00 00 */ lis r9, .rodata+0xD90@ha -/* 00017330 000240C0 C0 0B 00 10 */ lfs f0, 0x10(r11) -/* 00017334 000240C4 3B C1 00 50 */ addi r30, r1, 0x50 -/* 00017338 000240C8 C1 AB 00 14 */ lfs f13, 0x14(r11) -/* 0001733C 000240CC 3B 41 00 10 */ addi r26, r1, 0x10 -.L_00017340: -/* 00017340 000240D0 C1 8B 00 18 */ lfs f12, 0x18(r11) -/* 00017344 000240D4 3B 81 00 C0 */ addi r28, r1, 0xc0 -/* 00017348 000240D8 C1 1F 00 38 */ lfs f8, 0x38(r31) -/* 0001734C 000240DC 3B 61 00 D0 */ addi r27, r1, 0xd0 -/* 00017350 000240E0 C0 FF 00 3C */ lfs f7, 0x3c(r31) -/* 00017354 000240E4 7F 44 D3 78 */ mr r4, r26 -/* 00017358 000240E8 C0 2B 00 1C */ lfs f1, 0x1c(r11) -/* 0001735C 000240EC 7F C3 F3 78 */ mr r3, r30 -/* 00017360 000240F0 C0 5F 00 10 */ lfs f2, 0x10(r31) -/* 00017364 000240F4 3B B9 00 60 */ addi r29, r25, 0x60 -/* 00017368 000240F8 C0 7F 00 14 */ lfs f3, 0x14(r31) -/* 0001736C 000240FC C0 9F 00 18 */ lfs f4, 0x18(r31) -/* 00017370 00024100 C0 DF 00 00 */ lfs f6, 0x0(r31) -/* 00017374 00024104 C0 BF 00 04 */ lfs f5, 0x4(r31) -/* 00017378 00024108 C1 7F 00 1C */ lfs f11, 0x1c(r31) -/* 0001737C 0002410C C1 5F 00 30 */ lfs f10, 0x30(r31) -/* 00017380 00024110 C1 3F 00 34 */ lfs f9, 0x34(r31) -/* 00017384 00024114 C3 FF 00 08 */ lfs f31, 0x8(r31) -/* 00017388 00024118 C3 89 0D 90 */ lfs f28, .rodata+0xD90@l(r9) -/* 0001738C 0002411C D1 61 00 1C */ stfs f11, 0x1c(r1) -/* 00017390 00024120 D0 01 00 20 */ stfs f0, 0x20(r1) -/* 00017394 00024124 D1 A1 00 24 */ stfs f13, 0x24(r1) -/* 00017398 00024128 D1 81 00 28 */ stfs f12, 0x28(r1) -/* 0001739C 0002412C D1 41 00 30 */ stfs f10, 0x30(r1) -/* 000173A0 00024130 D1 21 00 34 */ stfs f9, 0x34(r1) -/* 000173A4 00024134 D1 01 00 38 */ stfs f8, 0x38(r1) -/* 000173A8 00024138 D0 E1 00 3C */ stfs f7, 0x3c(r1) -/* 000173AC 0002413C D0 41 00 10 */ stfs f2, 0x10(r1) -/* 000173B0 00024140 D0 61 00 14 */ stfs f3, 0x14(r1) -/* 000173B4 00024144 D0 81 00 18 */ stfs f4, 0x18(r1) -/* 000173B8 00024148 D0 21 00 2C */ stfs f1, 0x2c(r1) -/* 000173BC 0002414C D0 C1 00 40 */ stfs f6, 0x40(r1) -/* 000173C0 00024150 D0 A1 00 44 */ stfs f5, 0x44(r1) -/* 000173C4 00024154 D3 E1 00 48 */ stfs f31, 0x48(r1) -/* 000173C8 00024158 D3 81 00 4C */ stfs f28, 0x4c(r1) -/* 000173CC 0002415C 48 00 00 01 */ bl eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 -/* 000173D0 00024160 38 61 00 90 */ addi r3, r1, 0x90 -/* 000173D4 00024164 7F C4 F3 78 */ mr r4, r30 -/* 000173D8 00024168 38 B9 00 40 */ addi r5, r25, 0x40 -/* 000173DC 0002416C 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 -/* 000173E0 00024170 38 61 00 A0 */ addi r3, r1, 0xa0 -/* 000173E4 00024174 7F A5 EB 78 */ mr r5, r29 -/* 000173E8 00024178 7F C4 F3 78 */ mr r4, r30 -/* 000173EC 0002417C 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 -/* 000173F0 00024180 C1 61 00 90 */ lfs f11, 0x90(r1) -/* 000173F4 00024184 38 61 00 B0 */ addi r3, r1, 0xb0 -/* 000173F8 00024188 C1 41 00 94 */ lfs f10, 0x94(r1) -/* 000173FC 0002418C 7C 64 1B 78 */ mr r4, r3 -/* 00017400 00024190 C1 21 00 98 */ lfs f9, 0x98(r1) -/* 00017404 00024194 C1 A1 00 A0 */ lfs f13, 0xa0(r1) -/* 00017408 00024198 C1 81 00 A4 */ lfs f12, 0xa4(r1) -.L_0001740C: -/* 0001740C 0002419C C0 01 00 A8 */ lfs f0, 0xa8(r1) -/* 00017410 000241A0 ED AD 58 28 */ fsubs f13, f13, f11 -.L_00017414: -/* 00017414 000241A4 ED 8C 50 28 */ fsubs f12, f12, f10 -/* 00017418 000241A8 D1 A1 00 B0 */ stfs f13, 0xb0(r1) -/* 0001741C 000241AC EC 00 48 28 */ fsubs f0, f0, f9 -/* 00017420 000241B0 D1 81 00 B4 */ stfs f12, 0xb4(r1) -/* 00017424 000241B4 D0 01 00 B8 */ stfs f0, 0xb8(r1) -/* 00017428 000241B8 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -/* 0001742C 000241BC 38 B9 01 E8 */ addi r5, r25, 0x1e8 -/* 00017430 000241C0 7F C4 F3 78 */ mr r4, r30 -/* 00017434 000241C4 7F 83 E3 78 */ mr r3, r28 -/* 00017438 000241C8 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 -/* 0001743C 000241CC 7F 83 E3 78 */ mr r3, r28 -/* 00017440 000241D0 7C 64 1B 78 */ mr r4, r3 -/* 00017444 000241D4 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -/* 00017448 000241D8 7F 03 C3 78 */ mr r3, r24 -/* 0001744C 000241DC 38 80 00 00 */ li r4, 0x0 -/* 00017450 000241E0 7F 65 DB 78 */ mr r5, r27 -/* 00017454 000241E4 48 01 35 FD */ bl .text+0x135FC -/* 00017458 000241E8 38 A1 00 E0 */ addi r5, r1, 0xe0 -/* 0001745C 000241EC 7F 03 C3 78 */ mr r3, r24 -/* 00017460 000241F0 38 80 00 00 */ li r4, 0x0 -/* 00017464 000241F4 48 01 36 75 */ bl .text+0x13674 -/* 00017468 000241F8 C1 61 00 D0 */ lfs f11, 0xd0(r1) -/* 0001746C 000241FC 38 61 00 F0 */ addi r3, r1, 0xf0 -/* 00017470 00024200 C1 41 00 D4 */ lfs f10, 0xd4(r1) -/* 00017474 00024204 7C 64 1B 78 */ mr r4, r3 -/* 00017478 00024208 C1 21 00 D8 */ lfs f9, 0xd8(r1) -/* 0001747C 0002420C C1 A1 00 E0 */ lfs f13, 0xe0(r1) -/* 00017480 00024210 C1 81 00 E4 */ lfs f12, 0xe4(r1) -/* 00017484 00024214 C0 01 00 E8 */ lfs f0, 0xe8(r1) -/* 00017488 00024218 ED AD 58 28 */ fsubs f13, f13, f11 -/* 0001748C 0002421C ED 8C 50 28 */ fsubs f12, f12, f10 -/* 00017490 00024220 D1 A1 00 F0 */ stfs f13, 0xf0(r1) -/* 00017494 00024224 EC 00 48 28 */ fsubs f0, f0, f9 -/* 00017498 00024228 D1 81 00 F4 */ stfs f12, 0xf4(r1) -/* 0001749C 0002422C D0 01 00 F8 */ stfs f0, 0xf8(r1) -/* 000174A0 00024230 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -/* 000174A4 00024234 38 A1 01 00 */ addi r5, r1, 0x100 -.L_000174A8: -/* 000174A8 00024238 7F 03 C3 78 */ mr r3, r24 -/* 000174AC 0002423C 38 80 00 01 */ li r4, 0x1 -/* 000174B0 00024240 48 01 35 FD */ bl .text+0x135FC -/* 000174B4 00024244 C1 61 00 D0 */ lfs f11, 0xd0(r1) -/* 000174B8 00024248 38 61 01 10 */ addi r3, r1, 0x110 -/* 000174BC 0002424C C1 41 00 D4 */ lfs f10, 0xd4(r1) -.L_000174C0: -/* 000174C0 00024250 7C 64 1B 78 */ mr r4, r3 -/* 000174C4 00024254 C1 21 00 D8 */ lfs f9, 0xd8(r1) -/* 000174C8 00024258 C1 A1 01 00 */ lfs f13, 0x100(r1) -/* 000174CC 0002425C C1 81 01 04 */ lfs f12, 0x104(r1) -/* 000174D0 00024260 C0 01 01 08 */ lfs f0, 0x108(r1) -.L_000174D4: -/* 000174D4 00024264 ED AD 58 28 */ fsubs f13, f13, f11 -/* 000174D8 00024268 ED 8C 50 28 */ fsubs f12, f12, f10 -.L_000174DC: -/* 000174DC 0002426C D1 A1 01 10 */ stfs f13, 0x110(r1) -/* 000174E0 00024270 EC 00 48 28 */ fsubs f0, f0, f9 -/* 000174E4 00024274 D1 81 01 14 */ stfs f12, 0x114(r1) -/* 000174E8 00024278 D0 01 01 18 */ stfs f0, 0x118(r1) -/* 000174EC 0002427C 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -/* 000174F0 00024280 7F 44 D3 78 */ mr r4, r26 -/* 000174F4 00024284 7F 65 DB 78 */ mr r5, r27 -/* 000174F8 00024288 38 61 01 20 */ addi r3, r1, 0x120 -/* 000174FC 0002428C 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 -/* 00017500 00024290 C1 A1 00 F4 */ lfs f13, 0xf4(r1) -/* 00017504 00024294 3D 20 00 00 */ lis r9, .rodata+0xDA0@ha -/* 00017508 00024298 C0 01 00 B4 */ lfs f0, 0xb4(r1) -/* 0001750C 0002429C C1 61 01 14 */ lfs f11, 0x114(r1) -/* 00017510 000242A0 C1 41 00 F0 */ lfs f10, 0xf0(r1) -/* 00017514 000242A4 EC 00 03 72 */ fmuls f0, f0, f13 -/* 00017518 000242A8 C1 21 00 C4 */ lfs f9, 0xc4(r1) -/* 0001751C 000242AC C3 C9 0D A0 */ lfs f30, .rodata+0xDA0@l(r9) -/* 00017520 000242B0 C1 81 00 B0 */ lfs f12, 0xb0(r1) -/* 00017524 000242B4 ED 29 02 F2 */ fmuls f9, f9, f11 -/* 00017528 000242B8 FC 00 F0 00 */ fcmpu cr0, f0, f30 -/* 0001752C 000242BC C1 A1 00 C0 */ lfs f13, 0xc0(r1) -/* 00017530 000242C0 ED 8C 02 BA */ fmadds f12, f12, f10, f0 -/* 00017534 000242C4 C1 01 01 10 */ lfs f8, 0x110(r1) -/* 00017538 000242C8 C0 E1 00 B8 */ lfs f7, 0xb8(r1) -/* 0001753C 000242CC C1 61 00 F8 */ lfs f11, 0xf8(r1) -/* 00017540 000242D0 ED AD 4A 3A */ fmadds f13, f13, f8, f9 -/* 00017544 000242D4 C1 41 00 C8 */ lfs f10, 0xc8(r1) -/* 00017548 000242D8 C0 01 01 18 */ lfs f0, 0x118(r1) -/* 0001754C 000242DC ED 87 62 FA */ fmadds f12, f7, f11, f12 -/* 00017550 000242E0 EF 6A 68 3A */ fmadds f27, f10, f0, f13 -/* 00017554 000242E4 41 80 76 C8 */ blt .text+0x176C8 -/* 00017558 000242E8 3D 20 00 00 */ lis r9, .rodata+0xD94@ha -/* 0001755C 000242EC C0 09 0D 94 */ lfs f0, .rodata+0xD94@l(r9) -/* 00017560 000242F0 FC 0C 00 00 */ fcmpu cr0, f12, f0 -/* 00017564 000242F4 4C 62 03 82 */ cror un, eq, lt -/* 00017568 000242F8 41 83 76 C8 */ bso .text+0x176C8 -/* 0001756C 000242FC 3D 20 00 00 */ lis r9, .rodata+0xD98@ha -/* 00017570 00024300 C0 09 0D 98 */ lfs f0, .rodata+0xD98@l(r9) -/* 00017574 00024304 FC 0C 00 00 */ fcmpu cr0, f12, f0 -/* 00017578 00024308 41 80 76 D0 */ blt .text+0x176D0 -/* 0001757C 0002430C A3 D9 00 C4 */ lhz r30, 0xc4(r25) -/* 00017580 00024310 57 DE F8 7E */ srwi r30, r30, 1 -/* 00017584 00024314 7F C3 F3 78 */ mr r3, r30 -/* 00017588 00024318 48 00 00 01 */ bl bSin__FUs -/* 0001758C 0002431C FF E0 08 90 */ fmr f31, f1 -/* 00017590 00024320 7F C3 F3 78 */ mr r3, r30 -/* 00017594 00024324 48 00 00 01 */ bl bCos__FUs -/* 00017598 00024328 3D 20 00 00 */ lis r9, .rodata+0xD9C@ha -/* 0001759C 0002432C C1 A1 00 94 */ lfs f13, 0x94(r1) -/* 000175A0 00024330 C1 49 0D 9C */ lfs f10, .rodata+0xD9C@l(r9) -/* 000175A4 00024334 EF BF 08 24 */ fdivs f29, f31, f1 -/* 000175A8 00024338 C0 01 00 90 */ lfs f0, 0x90(r1) -/* 000175AC 0002433C 3D 20 00 00 */ lis r9, .rodata+0xDA4@ha -/* 000175B0 00024340 C1 81 00 98 */ lfs f12, 0x98(r1) -/* 000175B4 00024344 C1 69 0D A4 */ lfs f11, .rodata+0xDA4@l(r9) -/* 000175B8 00024348 ED AD 03 72 */ fmuls f13, f13, f13 -/* 000175BC 0002434C EC 00 68 3A */ fmadds f0, f0, f0, f13 -/* 000175C0 00024350 ED 8C 03 3A */ fmadds f12, f12, f12, f0 -/* 000175C4 00024354 FC 0C 58 00 */ fcmpu cr0, f12, f11 -/* 000175C8 00024358 4C 62 03 82 */ cror un, eq, lt -/* 000175CC 0002435C 41 83 75 F8 */ bso .text+0x175F8 -/* 000175D0 00024360 FF C0 60 34 */ frsqrte f30, f12 -/* 000175D4 00024364 EC 1E 07 B2 */ fmuls f0, f30, f30 -/* 000175D8 00024368 ED BE 02 B2 */ fmuls f13, f30, f10 -/* 000175DC 0002436C EC 0C E0 3C */ fnmsubs f0, f12, f0, f28 -/* 000175E0 00024370 EF C0 F3 7A */ fmadds f30, f0, f13, f30 -/* 000175E4 00024374 EC 1E 07 B2 */ fmuls f0, f30, f30 -/* 000175E8 00024378 ED BE 02 B2 */ fmuls f13, f30, f10 -/* 000175EC 0002437C EC 0C E0 3C */ fnmsubs f0, f12, f0, f28 -/* 000175F0 00024380 EF C0 F3 7A */ fmadds f30, f0, f13, f30 -/* 000175F4 00024384 EF DE 03 32 */ fmuls f30, f30, f12 -/* 000175F8 00024388 C0 38 00 54 */ lfs f1, 0x54(r24) -/* 000175FC 0002438C 48 01 38 9D */ bl .text+0x1389C -/* 00017600 00024390 54 7E FC 3E */ extrwi r30, r3, 16, 15 -/* 00017604 00024394 7F C3 F3 78 */ mr r3, r30 -/* 00017608 00024398 48 00 00 01 */ bl bSin__FUs -/* 0001760C 0002439C FF E0 08 90 */ fmr f31, f1 -/* 00017610 000243A0 7F C3 F3 78 */ mr r3, r30 -/* 00017614 000243A4 48 00 00 01 */ bl bCos__FUs -/* 00017618 000243A8 C0 01 00 D4 */ lfs f0, 0xd4(r1) -/* 0001761C 000243AC 3D 60 00 00 */ lis r11, .rodata+0xDA4@ha -/* 00017620 000243B0 C1 A1 00 D0 */ lfs f13, 0xd0(r1) -/* 00017624 000243B4 3D 40 00 00 */ lis r10, .rodata+0xD9C@ha -.L_00017628: -/* 00017628 000243B8 C1 81 00 D8 */ lfs f12, 0xd8(r1) -/* 0001762C 000243BC EC 00 00 32 */ fmuls f0, f0, f0 -/* 00017630 000243C0 C1 6B 0D A4 */ lfs f11, .rodata+0xDA4@l(r11) -/* 00017634 000243C4 ED AD 03 7A */ fmadds f13, f13, f13, f0 -/* 00017638 000243C8 3D 20 00 00 */ lis r9, .rodata+0xD90@ha -/* 0001763C 000243CC ED 8C 6B 3A */ fmadds f12, f12, f12, f13 -/* 00017640 000243D0 EF FF 08 24 */ fdivs f31, f31, f1 -/* 00017644 000243D4 C1 4A 0D 9C */ lfs f10, .rodata+0xD9C@l(r10) -/* 00017648 000243D8 C1 29 0D 90 */ lfs f9, .rodata+0xD90@l(r9) -/* 0001764C 000243DC FC 0C 58 00 */ fcmpu cr0, f12, f11 -/* 00017650 000243E0 4C 62 03 82 */ cror un, eq, lt -/* 00017654 000243E4 41 83 76 84 */ bso .text+0x17684 -/* 00017658 000243E8 FD 60 60 34 */ frsqrte f11, f12 -/* 0001765C 000243EC EC 0B 02 F2 */ fmuls f0, f11, f11 -/* 00017660 000243F0 ED AB 02 B2 */ fmuls f13, f11, f10 -/* 00017664 000243F4 EC 0C 48 3C */ fnmsubs f0, f12, f0, f9 -/* 00017668 000243F8 ED 60 5B 7A */ fmadds f11, f0, f13, f11 -/* 0001766C 000243FC EC 0B 02 F2 */ fmuls f0, f11, f11 -/* 00017670 00024400 ED AB 02 B2 */ fmuls f13, f11, f10 -/* 00017674 00024404 EC 0C 48 3C */ fnmsubs f0, f12, f0, f9 -/* 00017678 00024408 ED 60 5B 7A */ fmadds f11, f0, f13, f11 -/* 0001767C 0002440C ED 6B 03 32 */ fmuls f11, f11, f12 -/* 00017680 00024410 48 01 76 8C */ b .text+0x1768C -/* 00017684 00024414 3D 20 00 00 */ lis r9, .rodata+0xDA0@ha -/* 00017688 00024418 C1 69 0D A0 */ lfs f11, .rodata+0xDA0@l(r9) -/* 0001768C 0002441C 3D 20 00 00 */ lis r9, .rodata+0xD90@ha -/* 00017690 00024420 ED 6B 07 F2 */ fmuls f11, f11, f31 -/* 00017694 00024424 C1 89 0D 90 */ lfs f12, .rodata+0xD90@l(r9) -/* 00017698 00024428 EC 1E 07 72 */ fmuls f0, f30, f29 -/* 0001769C 0002442C 3D 20 00 00 */ lis r9, .rodata+0xD9C@ha -/* 000176A0 00024430 ED 6C 58 24 */ fdivs f11, f12, f11 -/* 000176A4 00024434 C1 49 0D 9C */ lfs f10, .rodata+0xD9C@l(r9) -/* 000176A8 00024438 ED 8C 00 24 */ fdivs f12, f12, f0 -/* 000176AC 0002443C ED AB 60 28 */ fsubs f13, f11, f12 -/* 000176B0 00024440 EC 0C 58 28 */ fsubs f0, f12, f11 -/* 000176B4 00024444 FD A0 6A 10 */ fabs f13, f13 -/* 000176B8 00024448 FC 00 5B 2E */ fsel f0, f0, f12, f11 -/* 000176BC 0002444C ED AD 00 24 */ fdivs f13, f13, f0 -/* 000176C0 00024450 FC 0D 50 00 */ fcmpu cr0, f13, f10 -/* 000176C4 00024454 41 81 76 E0 */ bgt .text+0x176E0 -/* 000176C8 00024458 38 60 00 00 */ li r3, 0x0 -/* 000176CC 0002445C 48 01 76 F4 */ b .text+0x176F4 -.L_000176D0: -/* 000176D0 00024460 FC 0C F0 00 */ fcmpu cr0, f12, f30 -/* 000176D4 00024464 41 81 76 E0 */ bgt .text+0x176E0 -/* 000176D8 00024468 38 60 00 01 */ li r3, 0x1 -/* 000176DC 0002446C 48 01 76 F4 */ b .text+0x176F4 -/* 000176E0 00024470 3D 20 00 00 */ lis r9, .rodata+0xDA0@ha -/* 000176E4 00024474 C0 09 0D A0 */ lfs f0, .rodata+0xDA0@l(r9) -/* 000176E8 00024478 FF 9B 00 00 */ fcmpu cr7, f27, f0 -/* 000176EC 0002447C 7C 60 00 26 */ mfcr r3 -/* 000176F0 00024480 54 63 F7 FE */ extrwi r3, r3, 1, 29 -/* 000176F4 00024484 80 01 01 7C */ lwz r0, 0x17c(r1) -/* 000176F8 00024488 7C 08 03 A6 */ mtlr r0 -/* 000176FC 0002448C BB 01 01 30 */ lmw r24, 0x130(r1) -/* 00017700 00024490 E3 61 01 50 */ psq_l f27, 0x150(r1), 0, qr0 -/* 00017704 00024494 E3 81 01 58 */ psq_l f28, 0x158(r1), 0, qr0 -/* 00017708 00024498 E3 A1 01 60 */ psq_l f29, 0x160(r1), 0, qr0 -/* 0001770C 0002449C E3 C1 01 68 */ psq_l f30, 0x168(r1), 0, qr0 -/* 00017710 000244A0 E3 E1 01 70 */ psq_l f31, 0x170(r1), 0, qr0 -/* 00017714 000244A4 38 21 01 78 */ addi r1, r1, 0x178 -/* 00017718 000244A8 4E 80 00 20 */ blr -.endfn CameraCutIsGood__9ICEReplayP7ICEDatafP9ICEAnchor - -# .text:0x1771C | size: 0x3BC -.fn ChooseGoodCamera__9ICEReplayP9ICEAnchorP8ICEGroupi, global -/* 0001771C 000244AC 94 21 FF 68 */ stwu r1, -0x98(r1) -/* 00017720 000244B0 7C 08 02 A6 */ mflr r0 -/* 00017724 000244B4 7D 80 00 26 */ mfcr r12 -/* 00017728 000244B8 F3 41 00 68 */ psq_st f26, 0x68(r1), 0, qr0 -/* 0001772C 000244BC F3 61 00 70 */ psq_st f27, 0x70(r1), 0, qr0 -/* 00017730 000244C0 F3 81 00 78 */ psq_st f28, 0x78(r1), 0, qr0 -/* 00017734 000244C4 F3 A1 00 80 */ psq_st f29, 0x80(r1), 0, qr0 -/* 00017738 000244C8 F3 C1 00 88 */ psq_st f30, 0x88(r1), 0, qr0 -.L_0001773C: -/* 0001773C 000244CC F3 E1 00 90 */ psq_st f31, 0x90(r1), 0, qr0 -/* 00017740 000244D0 BD E1 00 24 */ stmw r15, 0x24(r1) -/* 00017744 000244D4 90 01 00 9C */ stw r0, 0x9c(r1) -/* 00017748 000244D8 91 81 00 20 */ stw r12, 0x20(r1) -/* 0001774C 000244DC 7C 92 23 78 */ mr r18, r4 -/* 00017750 000244E0 7C B7 2B 78 */ mr r23, r5 -/* 00017754 000244E4 3A 00 00 00 */ li r16, 0x0 -/* 00017758 000244E8 7C 75 1B 79 */ mr. r21, r3 -/* 0001775C 000244EC 41 82 7A A0 */ beq .text+0x17AA0 -/* 00017760 000244F0 3D 20 00 00 */ lis r9, .rodata+0xDA8@ha -/* 00017764 000244F4 56 E3 10 3A */ slwi r3, r23, 2 -/* 00017768 000244F8 C3 C9 0D A8 */ lfs f30, .rodata+0xDA8@l(r9) -/* 0001776C 000244FC 3B E0 00 00 */ li r31, 0x0 -/* 00017770 00024500 48 00 00 01 */ bl __builtin_vec_new -/* 00017774 00024504 3E 20 00 00 */ lis r17, .rodata+0xDA8@ha -/* 00017778 00024508 7C 76 1B 78 */ mr r22, r3 -/* 0001777C 0002450C 7C 10 B8 00 */ cmpw r16, r23 -/* 00017780 00024510 40 80 77 FC */ bge .text+0x177FC -/* 00017784 00024514 3D 20 00 00 */ lis r9, .rodata+0xDAC@ha -/* 00017788 00024518 3F C0 00 00 */ lis r30, Tweak_ForceICEReplay@ha -/* 0001778C 0002451C C3 E9 0D AC */ lfs f31, .rodata+0xDAC@l(r9) -/* 00017790 00024520 FF A0 F0 90 */ fmr f29, f30 -/* 00017794 00024524 1C 1F 00 14 */ mulli r0, r31, 0x14 -/* 00017798 00024528 7C 72 00 2E */ lwzx r3, r18, r0 -/* 0001779C 0002452C 48 01 72 15 */ bl .text+0x17214 -/* 000177A0 00024530 80 03 00 10 */ lwz r0, 0x10(r3) -/* 000177A4 00024534 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000177A8 00024538 41 82 77 BC */ beq .text+0x177BC -/* 000177AC 0002453C 7E A3 AB 78 */ mr r3, r21 -/* 000177B0 00024540 7C 08 03 A6 */ mtlr r0 -/* 000177B4 00024544 4E 80 00 21 */ blrl -/* 000177B8 00024548 48 01 77 C0 */ b .text+0x177C0 -/* 000177BC 0002454C C0 31 0D A8 */ lfs f1, .rodata+0xDA8@l(r17) -/* 000177C0 00024550 80 1E 00 00 */ lwz r0, Tweak_ForceICEReplay@l(r30) -/* 000177C4 00024554 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000177C8 00024558 41 82 77 D0 */ beq .text+0x177D0 -/* 000177CC 0002455C EC 21 F8 2A */ fadds f1, f1, f31 -/* 000177D0 00024560 FC 01 F8 00 */ fcmpu cr0, f1, f31 -/* 000177D4 00024564 41 80 77 E8 */ blt .text+0x177E8 -/* 000177D8 00024568 57 E0 10 3A */ slwi r0, r31, 2 -.L_000177DC: -/* 000177DC 0002456C EF DE 08 2A */ fadds f30, f30, f1 -/* 000177E0 00024570 7C 36 05 2E */ stfsx f1, r22, r0 -/* 000177E4 00024574 48 01 77 F0 */ b .text+0x177F0 -/* 000177E8 00024578 57 E0 10 3A */ slwi r0, r31, 2 -/* 000177EC 0002457C 7F B6 05 2E */ stfsx f29, r22, r0 -/* 000177F0 00024580 3B FF 00 01 */ addi r31, r31, 0x1 -/* 000177F4 00024584 7C 1F B8 00 */ cmpw r31, r23 -/* 000177F8 00024588 41 80 77 94 */ blt .text+0x17794 -/* 000177FC 0002458C 3D 20 00 00 */ lis r9, .rodata+0xDA8@ha -/* 00017800 00024590 2D 96 00 00 */ cmpwi cr3, r22, 0x0 -/* 00017804 00024594 C0 09 0D A8 */ lfs f0, .rodata+0xDA8@l(r9) -/* 00017808 00024598 FC 1E 00 00 */ fcmpu cr0, f30, f0 -/* 0001780C 0002459C 4C 62 03 82 */ cror un, eq, lt -/* 00017810 000245A0 41 83 7A 94 */ bso .text+0x17A94 -/* 00017814 000245A4 38 60 00 00 */ li r3, 0x0 -/* 00017818 000245A8 39 60 00 00 */ li r11, 0x0 -/* 0001781C 000245AC 7C 03 B8 00 */ cmpw r3, r23 -/* 00017820 000245B0 40 80 78 58 */ bge .text+0x17858 -/* 00017824 000245B4 FD A0 00 90 */ fmr f13, f0 -/* 00017828 000245B8 55 60 10 3A */ slwi r0, r11, 2 -/* 0001782C 000245BC 7C 16 04 2E */ lfsx f0, r22, r0 -/* 00017830 000245C0 FC 00 68 00 */ fcmpu cr0, f0, f13 -/* 00017834 000245C4 4C 62 03 82 */ cror un, eq, lt -/* 00017838 000245C8 41 83 78 4C */ bso .text+0x1784C -/* 0001783C 000245CC 1D 2B 00 14 */ mulli r9, r11, 0x14 -/* 00017840 000245D0 7D 32 4A 14 */ add r9, r18, r9 -/* 00017844 000245D4 80 09 00 08 */ lwz r0, 0x8(r9) -/* 00017848 000245D8 7C 63 02 14 */ add r3, r3, r0 -/* 0001784C 000245DC 39 6B 00 01 */ addi r11, r11, 0x1 -/* 00017850 000245E0 7C 0B B8 00 */ cmpw r11, r23 -/* 00017854 000245E4 41 80 78 28 */ blt .text+0x17828 -/* 00017858 000245E8 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0001785C 000245EC 40 81 7A 94 */ ble .text+0x17A94 -/* 00017860 000245F0 1C 63 00 0C */ mulli r3, r3, 0xc -/* 00017864 000245F4 3B 40 00 00 */ li r26, 0x0 -/* 00017868 000245F8 48 00 00 01 */ bl __builtin_vec_new -/* 0001786C 000245FC 7C 7B 1B 78 */ mr r27, r3 -/* 00017870 00024600 39 00 00 00 */ li r8, 0x0 -/* 00017874 00024604 7C 1A B8 00 */ cmpw r26, r23 -/* 00017878 00024608 40 80 7A 10 */ bge .text+0x17A10 -/* 0001787C 0002460C 3D 20 00 00 */ lis r9, .rodata+0xDA8@ha -/* 00017880 00024610 3D 60 00 00 */ lis r11, .rodata+0xDB8@ha -/* 00017884 00024614 C3 49 0D A8 */ lfs f26, .rodata+0xDA8@l(r9) -/* 00017888 00024618 3D 40 00 00 */ lis r10, .rodata+0xDC0@ha -/* 0001788C 0002461C 3D 20 00 00 */ lis r9, .rodata+0xDB0@ha -/* 00017890 00024620 CB AB 0D B8 */ lfd f29, .rodata+0xDB8@l(r11) -/* 00017894 00024624 C3 6A 0D C0 */ lfs f27, .rodata+0xDC0@l(r10) -/* 00017898 00024628 3D E0 43 30 */ lis r15, 0x4330 -/* 0001789C 0002462C C3 89 0D B0 */ lfs f28, .rodata+0xDB0@l(r9) -/* 000178A0 00024630 55 00 10 3A */ slwi r0, r8, 2 -/* 000178A4 00024634 3A 88 00 01 */ addi r20, r8, 0x1 -/* 000178A8 00024638 7F F6 04 2E */ lfsx f31, r22, r0 -/* 000178AC 0002463C FC 1F D0 00 */ fcmpu cr0, f31, f26 -/* 000178B0 00024640 4C 62 03 82 */ cror un, eq, lt -/* 000178B4 00024644 41 83 7A 04 */ bso .text+0x17A04 -/* 000178B8 00024648 1C 08 00 14 */ mulli r0, r8, 0x14 -/* 000178BC 0002464C 7F 59 D3 78 */ mr r25, r26 -/* 000178C0 00024650 3B 00 00 00 */ li r24, 0x0 -/* 000178C4 00024654 FE 1F E0 00 */ fcmpu cr4, f31, f28 -/* 000178C8 00024658 3A 60 00 00 */ li r19, 0x0 -/* 000178CC 0002465C 7F 92 02 14 */ add r28, r18, r0 -/* 000178D0 00024660 80 1C 00 08 */ lwz r0, 0x8(r28) -/* 000178D4 00024664 7C 18 00 00 */ cmpw r24, r0 -/* 000178D8 00024668 40 80 79 B4 */ bge .text+0x179B4 -/* 000178DC 0002466C 7F 83 E3 78 */ mr r3, r28 -/* 000178E0 00024670 7F 04 C3 78 */ mr r4, r24 -/* 000178E4 00024674 48 01 7C CD */ bl .text+0x17CCC -/* 000178E8 00024678 7C 7F 1B 78 */ mr r31, r3 -/* 000178EC 0002467C 39 60 00 00 */ li r11, 0x0 -/* 000178F0 00024680 A8 1F 00 14 */ lha r0, 0x14(r31) -/* 000178F4 00024684 39 20 00 00 */ li r9, 0x0 -/* 000178F8 00024688 34 00 FF FF */ subic. r0, r0, 0x1 -/* 000178FC 0002468C 40 80 79 04 */ bge .text+0x17904 -/* 00017900 00024690 7C 09 03 78 */ mr r9, r0 -/* 00017904 00024694 7C 0B 48 00 */ cmpw r11, r9 -/* 00017908 00024698 3B C0 00 00 */ li r30, 0x0 -/* 0001790C 0002469C 40 82 79 14 */ bne .text+0x17914 -/* 00017910 000246A0 3B DF 00 28 */ addi r30, r31, 0x28 -/* 00017914 000246A4 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 00017918 000246A8 41 82 79 AC */ beq .text+0x179AC -/* 0001791C 000246AC 88 1E 00 00 */ lbz r0, 0x0(r30) -/* 00017920 000246B0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00017924 000246B4 41 82 79 AC */ beq .text+0x179AC -/* 00017928 000246B8 80 7C 00 00 */ lwz r3, 0x0(r28) -/* 0001792C 000246BC 48 01 72 15 */ bl .text+0x17214 -/* 00017930 000246C0 80 03 00 14 */ lwz r0, 0x14(r3) -/* 00017934 000246C4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00017938 000246C8 41 82 79 4C */ beq .text+0x1794C -/* 0001793C 000246CC 7E A3 AB 78 */ mr r3, r21 -/* 00017940 000246D0 7C 08 03 A6 */ mtlr r0 -/* 00017944 000246D4 4E 80 00 21 */ blrl -/* 00017948 000246D8 48 01 79 50 */ b .text+0x17950 -/* 0001794C 000246DC 38 60 00 00 */ li r3, 0x0 -/* 00017950 000246E0 3D 20 00 00 */ lis r9, bMirrorICEData@ha -/* 00017954 000246E4 3F A0 00 00 */ lis r29, bMirrorICEData@ha -/* 00017958 000246E8 90 69 00 00 */ stw r3, bMirrorICEData@l(r9) -/* 0001795C 000246EC 4E 72 8B 82 */ cror cr4un, cr4eq, cr4gt -/* 00017960 000246F0 41 93 79 8C */ bso cr4, .text+0x1798C -.L_00017964: -/* 00017964 000246F4 C0 31 0D A8 */ lfs f1, .rodata+0xDA8@l(r17) -/* 00017968 000246F8 7F C3 F3 78 */ mr r3, r30 -/* 0001796C 000246FC 7E A4 AB 78 */ mr r4, r21 -/* 00017970 00024700 48 01 72 D9 */ bl .text+0x172D8 -/* 00017974 00024704 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00017978 00024708 41 82 79 A8 */ beq .text+0x179A8 -/* 0001797C 0002470C 7F E3 FB 78 */ mr r3, r31 -/* 00017980 00024710 48 01 72 55 */ bl .text+0x17254 -/* 00017984 00024714 2C 03 00 00 */ cmpwi r3, 0x0 -.L_00017988: -/* 00017988 00024718 40 82 79 A8 */ bne .text+0x179A8 -/* 0001798C 0002471C 1D 3A 00 0C */ mulli r9, r26, 0xc -/* 00017990 00024720 80 1D 00 00 */ lwz r0, bMirrorICEData@l(r29) -/* 00017994 00024724 3B 5A 00 01 */ addi r26, r26, 0x1 -/* 00017998 00024728 7F E9 D9 2E */ stwx r31, r9, r27 -/* 0001799C 0002472C 7D 29 DA 14 */ add r9, r9, r27 -/* 000179A0 00024730 90 09 00 08 */ stw r0, 0x8(r9) -/* 000179A4 00024734 D3 E9 00 04 */ stfs f31, 0x4(r9) -/* 000179A8 00024738 92 7D 00 00 */ stw r19, bMirrorICEData@l(r29) -/* 000179AC 0002473C 3B 18 00 01 */ addi r24, r24, 0x1 -/* 000179B0 00024740 48 01 78 D0 */ b .text+0x178D0 -/* 000179B4 00024744 7C 19 D0 51 */ subf. r0, r25, r26 -/* 000179B8 00024748 40 81 7A 04 */ ble .text+0x17A04 -/* 000179BC 0002474C 6C 00 80 00 */ xoris r0, r0, 0x8000 -/* 000179C0 00024750 90 01 00 1C */ stw r0, 0x1c(r1) -/* 000179C4 00024754 7F 2B CB 78 */ mr r11, r25 -/* 000179C8 00024758 7C 0B D0 00 */ cmpw r11, r26 -/* 000179CC 0002475C 91 E1 00 18 */ stw r15, 0x18(r1) -/* 000179D0 00024760 C8 01 00 18 */ lfd f0, 0x18(r1) -/* 000179D4 00024764 FC 00 E8 28 */ fsub f0, f0, f29 -/* 000179D8 00024768 FC 00 00 18 */ frsp f0, f0 -/* 000179DC 0002476C ED BB 00 24 */ fdivs f13, f27, f0 -/* 000179E0 00024770 40 80 7A 04 */ bge .text+0x17A04 -/* 000179E4 00024774 1D 2B 00 0C */ mulli r9, r11, 0xc -/* 000179E8 00024778 39 6B 00 01 */ addi r11, r11, 0x1 -/* 000179EC 0002477C 7C 0B D0 00 */ cmpw r11, r26 -/* 000179F0 00024780 7D 29 DA 14 */ add r9, r9, r27 -/* 000179F4 00024784 C0 09 00 04 */ lfs f0, 0x4(r9) -/* 000179F8 00024788 EC 00 03 72 */ fmuls f0, f0, f13 -/* 000179FC 0002478C D0 09 00 04 */ stfs f0, 0x4(r9) -/* 00017A00 00024790 41 80 79 E4 */ blt .text+0x179E4 -/* 00017A04 00024794 7E 88 A3 78 */ mr r8, r20 -/* 00017A08 00024798 7C 08 B8 00 */ cmpw r8, r23 -/* 00017A0C 0002479C 41 80 78 A0 */ blt .text+0x178A0 -/* 00017A10 000247A0 2C 1A 00 00 */ cmpwi r26, 0x0 -/* 00017A14 000247A4 2E 1B 00 00 */ cmpwi cr4, r27, 0x0 -/* 00017A18 000247A8 40 81 7A 88 */ ble .text+0x17A88 -.L_00017A1C: -/* 00017A1C 000247AC FC 20 F0 90 */ fmr f1, f30 -/* 00017A20 000247B0 48 00 00 01 */ bl bRandom__Ff -/* 00017A24 000247B4 39 60 00 00 */ li r11, 0x0 -/* 00017A28 000247B8 7C 0B D0 00 */ cmpw r11, r26 -/* 00017A2C 000247BC 40 80 7A 70 */ bge .text+0x17A70 -/* 00017A30 000247C0 3D 00 00 00 */ lis r8, bMirrorICEData@ha -/* 00017A34 000247C4 81 48 00 00 */ lwz r10, bMirrorICEData@l(r8) -/* 00017A38 000247C8 1C 0B 00 0C */ mulli r0, r11, 0xc -/* 00017A3C 000247CC 7D 20 DA 14 */ add r9, r0, r27 -/* 00017A40 000247D0 C0 09 00 04 */ lfs f0, 0x4(r9) -/* 00017A44 000247D4 FC 01 00 00 */ fcmpu cr0, f1, f0 -/* 00017A48 000247D8 4C 62 0B 82 */ cror un, eq, gt -.L_00017A4C: -/* 00017A4C 000247DC 41 83 7A 5C */ bso .text+0x17A5C -/* 00017A50 000247E0 7E 1B 00 2E */ lwzx r16, r27, r0 -.L_00017A54: -/* 00017A54 000247E4 81 49 00 08 */ lwz r10, 0x8(r9) -/* 00017A58 000247E8 48 01 7A 6C */ b .text+0x17A6C -/* 00017A5C 000247EC 39 6B 00 01 */ addi r11, r11, 0x1 -/* 00017A60 000247F0 EC 21 00 28 */ fsubs f1, f1, f0 -/* 00017A64 000247F4 7C 0B D0 00 */ cmpw r11, r26 -/* 00017A68 000247F8 41 80 7A 38 */ blt .text+0x17A38 -/* 00017A6C 000247FC 91 48 00 00 */ stw r10, bMirrorICEData@l(r8) -/* 00017A70 00024800 2C 10 00 00 */ cmpwi r16, 0x0 -/* 00017A74 00024804 40 82 7A 88 */ bne .text+0x17A88 -/* 00017A78 00024808 80 1B 00 08 */ lwz r0, 0x8(r27) -/* 00017A7C 0002480C 3D 20 00 00 */ lis r9, bMirrorICEData@ha -/* 00017A80 00024810 82 1B 00 00 */ lwz r16, 0x0(r27) -/* 00017A84 00024814 90 09 00 00 */ stw r0, bMirrorICEData@l(r9) -/* 00017A88 00024818 41 92 7A 94 */ beq cr4, .text+0x17A94 -/* 00017A8C 0002481C 7F 63 DB 78 */ mr r3, r27 -/* 00017A90 00024820 48 00 00 01 */ bl __builtin_vec_delete -/* 00017A94 00024824 41 8E 7A A0 */ beq cr3, .text+0x17AA0 -/* 00017A98 00024828 7E C3 B3 78 */ mr r3, r22 -/* 00017A9C 0002482C 48 00 00 01 */ bl __builtin_vec_delete -/* 00017AA0 00024830 7E 03 83 78 */ mr r3, r16 -/* 00017AA4 00024834 80 01 00 9C */ lwz r0, 0x9c(r1) -/* 00017AA8 00024838 81 81 00 20 */ lwz r12, 0x20(r1) -/* 00017AAC 0002483C 7C 08 03 A6 */ mtlr r0 -/* 00017AB0 00024840 B9 E1 00 24 */ lmw r15, 0x24(r1) -/* 00017AB4 00024844 E3 41 00 68 */ psq_l f26, 0x68(r1), 0, qr0 -/* 00017AB8 00024848 E3 61 00 70 */ psq_l f27, 0x70(r1), 0, qr0 -/* 00017ABC 0002484C E3 81 00 78 */ psq_l f28, 0x78(r1), 0, qr0 -/* 00017AC0 00024850 E3 A1 00 80 */ psq_l f29, 0x80(r1), 0, qr0 -/* 00017AC4 00024854 E3 C1 00 88 */ psq_l f30, 0x88(r1), 0, qr0 -/* 00017AC8 00024858 E3 E1 00 90 */ psq_l f31, 0x90(r1), 0, qr0 -/* 00017ACC 0002485C 7D 81 81 20 */ mtcrf 24, r12 -/* 00017AD0 00024860 38 21 00 98 */ addi r1, r1, 0x98 -/* 00017AD4 00024864 4E 80 00 20 */ blr -.endfn ChooseGoodCamera__9ICEReplayP9ICEAnchorP8ICEGroupi - -# .text:0x17AD8 | size: 0x44 -# GetOverlayIndex(unsigned char) -.fn GetOverlayIndex__FUc, local -/* 00017AD8 00024868 3D 20 00 00 */ lis r9, gIceOverlays@ha -/* 00017ADC 0002486C 39 40 00 00 */ li r10, 0x0 -/* 00017AE0 00024870 88 09 00 00 */ lbz r0, gIceOverlays@l(r9) -/* 00017AE4 00024874 39 60 00 00 */ li r11, 0x0 -/* 00017AE8 00024878 7C 03 00 00 */ cmpw r3, r0 -/* 00017AEC 0002487C 41 82 7B 14 */ beq .text+0x17B14 -/* 00017AF0 00024880 39 09 00 00 */ addi r8, r9, gIceOverlays@l -/* 00017AF4 00024884 39 6B 00 01 */ addi r11, r11, 0x1 -/* 00017AF8 00024888 2C 0B 00 04 */ cmpwi r11, 0x4 -/* 00017AFC 0002488C 41 81 7B 14 */ bgt .text+0x17B14 -/* 00017B00 00024890 55 60 18 38 */ slwi r0, r11, 3 -/* 00017B04 00024894 7D 28 00 AE */ lbzx r9, r8, r0 -/* 00017B08 00024898 7C 03 48 00 */ cmpw r3, r9 -/* 00017B0C 0002489C 40 82 7A F4 */ bne .text+0x17AF4 -/* 00017B10 000248A0 7D 6A 5B 78 */ mr r10, r11 -/* 00017B14 000248A4 7D 43 53 78 */ mr r3, r10 -/* 00017B18 000248A8 4E 80 00 20 */ blr -.endfn GetOverlayIndex__FUc - -# .text:0x17B1C | size: 0x34 -.fn GetOverlayName__3ICEUc, global -/* 00017B1C 000248AC 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 00017B20 000248B0 7C 08 02 A6 */ mflr r0 -/* 00017B24 000248B4 90 01 00 0C */ stw r0, 0xc(r1) -/* 00017B28 000248B8 48 01 7A D9 */ bl .text+0x17AD8 -/* 00017B2C 000248BC 3D 20 00 00 */ lis r9, gIceOverlays@ha -/* 00017B30 000248C0 54 63 18 38 */ slwi r3, r3, 3 -/* 00017B34 000248C4 39 29 00 00 */ addi r9, r9, gIceOverlays@l -/* 00017B38 000248C8 39 29 00 04 */ addi r9, r9, 0x4 -/* 00017B3C 000248CC 7C 63 48 2E */ lwzx r3, r3, r9 -/* 00017B40 000248D0 80 01 00 0C */ lwz r0, 0xc(r1) -/* 00017B44 000248D4 7C 08 03 A6 */ mtlr r0 -/* 00017B48 000248D8 38 21 00 08 */ addi r1, r1, 0x8 -/* 00017B4C 000248DC 4E 80 00 20 */ blr -.endfn GetOverlayName__3ICEUc - -# .text:0x17B50 | size: 0x74 -.fn ShowOverlay__3ICEUc, global -/* 00017B50 000248E0 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00017B54 000248E4 7C 08 02 A6 */ mflr r0 -/* 00017B58 000248E8 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 00017B5C 000248EC 90 01 00 14 */ stw r0, 0x14(r1) -/* 00017B60 000248F0 7C 7F 1B 79 */ mr. r31, r3 -/* 00017B64 000248F4 41 82 7B B0 */ beq .text+0x17BB0 -.L_00017B68: -/* 00017B68 000248F8 3F C0 00 00 */ lis r30, gOverlay@ha -/* 00017B6C 000248FC 88 1E 00 00 */ lbz r0, gOverlay@l(r30) -/* 00017B70 00024900 70 09 00 7F */ andi. r9, r0, 0x7f -/* 00017B74 00024904 41 82 7B 80 */ beq .text+0x17B80 -/* 00017B78 00024908 70 09 00 80 */ andi. r9, r0, 0x80 -/* 00017B7C 0002490C 41 82 7B B0 */ beq .text+0x17BB0 -/* 00017B80 00024910 38 60 00 08 */ li r3, 0x8 -/* 00017B84 00024914 48 00 00 01 */ bl __nw__5EventUi -/* 00017B88 00024918 48 00 00 01 */ bl __17ELoadingScreenOff -/* 00017B8C 0002491C 3D 20 00 00 */ lis r9, _5cFEng.mInstance@ha -/* 00017B90 00024920 9B FE 00 00 */ stb r31, gOverlay@l(r30) -/* 00017B94 00024924 83 C9 00 00 */ lwz r30, _5cFEng.mInstance@l(r9) -/* 00017B98 00024928 7F E3 FB 78 */ mr r3, r31 -/* 00017B9C 0002492C 48 01 7B 1D */ bl .text+0x17B1C -/* 00017BA0 00024930 7C 64 1B 78 */ mr r4, r3 -/* 00017BA4 00024934 38 A0 00 67 */ li r5, 0x67 -/* 00017BA8 00024938 7F C3 F3 78 */ mr r3, r30 -/* 00017BAC 0002493C 48 00 00 01 */ bl PushNoControlPackage__5cFEngPCci -/* 00017BB0 00024940 80 01 00 14 */ lwz r0, 0x14(r1) -/* 00017BB4 00024944 7C 08 03 A6 */ mtlr r0 -/* 00017BB8 00024948 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 00017BBC 0002494C 38 21 00 10 */ addi r1, r1, 0x10 -/* 00017BC0 00024950 4E 80 00 20 */ blr -.endfn ShowOverlay__3ICEUc - -# .text:0x17BC4 | size: 0x84 -.fn HideOverlay__3ICEv, global -/* 00017BC4 00024954 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 00017BC8 00024958 7C 08 02 A6 */ mflr r0 -/* 00017BCC 0002495C BF A1 00 0C */ stmw r29, 0xc(r1) -/* 00017BD0 00024960 90 01 00 1C */ stw r0, 0x1c(r1) -/* 00017BD4 00024964 3F E0 00 00 */ lis r31, gOverlay@ha -/* 00017BD8 00024968 88 1F 00 00 */ lbz r0, gOverlay@l(r31) -/* 00017BDC 0002496C 70 03 00 7F */ andi. r3, r0, 0x7f -/* 00017BE0 00024970 41 82 7C 34 */ beq .text+0x17C34 -/* 00017BE4 00024974 3F A0 00 00 */ lis r29, _5cFEng.mInstance@ha -/* 00017BE8 00024978 83 DD 00 00 */ lwz r30, _5cFEng.mInstance@l(r29) -/* 00017BEC 0002497C 48 01 7B 1D */ bl .text+0x17B1C -/* 00017BF0 00024980 7C 64 1B 78 */ mr r4, r3 -/* 00017BF4 00024984 7F C3 F3 78 */ mr r3, r30 -/* 00017BF8 00024988 48 00 00 01 */ bl IsPackagePushed__5cFEngPCc -/* 00017BFC 0002498C 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00017C00 00024990 41 82 7C 28 */ beq .text+0x17C28 -/* 00017C04 00024994 88 7F 00 00 */ lbz r3, gOverlay@l(r31) -/* 00017C08 00024998 83 DD 00 00 */ lwz r30, _5cFEng.mInstance@l(r29) -/* 00017C0C 0002499C 54 63 06 7E */ clrlwi r3, r3, 25 -/* 00017C10 000249A0 48 01 7B 1D */ bl .text+0x17B1C -/* 00017C14 000249A4 7C 64 1B 78 */ mr r4, r3 -/* 00017C18 000249A8 7F C3 F3 78 */ mr r3, r30 -.L_00017C1C: -/* 00017C1C 000249AC 48 00 00 01 */ bl PopNoControlPackage__5cFEngPCc -/* 00017C20 000249B0 38 00 00 00 */ li r0, 0x0 -/* 00017C24 000249B4 48 01 7C 30 */ b .text+0x17C30 -/* 00017C28 000249B8 88 1F 00 00 */ lbz r0, gOverlay@l(r31) -/* 00017C2C 000249BC 60 00 00 80 */ ori r0, r0, 0x80 -/* 00017C30 000249C0 98 1F 00 00 */ stb r0, gOverlay@l(r31) -/* 00017C34 000249C4 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 00017C38 000249C8 7C 08 03 A6 */ mtlr r0 -/* 00017C3C 000249CC BB A1 00 0C */ lmw r29, 0xc(r1) -/* 00017C40 000249D0 38 21 00 18 */ addi r1, r1, 0x18 -/* 00017C44 000249D4 4E 80 00 20 */ blr -.endfn HideOverlay__3ICEv - -# .text:0x17C48 | size: 0x84 -# ICEGroup::FlushAllocatedTracks -.fn FlushAllocatedTracks__8ICEGroup, global -/* 00017C48 000249D8 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 00017C4C 000249DC 7C 08 02 A6 */ mflr r0 -/* 00017C50 000249E0 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 00017C54 000249E4 90 01 00 1C */ stw r0, 0x1c(r1) -/* 00017C58 000249E8 7C 7E 1B 78 */ mr r30, r3 -/* 00017C5C 000249EC 80 7E 00 0C */ lwz r3, 0xc(r30) -/* 00017C60 000249F0 3B BE 00 0C */ addi r29, r30, 0xc -/* 00017C64 000249F4 7C 03 E8 00 */ cmpw r3, r29 -/* 00017C68 000249F8 41 82 7C B8 */ beq .text+0x17CB8 -/* 00017C6C 000249FC 88 03 00 16 */ lbz r0, 0x16(r3) -/* 00017C70 00024A00 39 20 00 01 */ li r9, 0x1 -/* 00017C74 00024A04 83 E3 00 00 */ lwz r31, 0x0(r3) -/* 00017C78 00024A08 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00017C7C 00024A0C 40 82 7C 84 */ bne .text+0x17C84 -/* 00017C80 00024A10 39 20 00 00 */ li r9, 0x0 -/* 00017C84 00024A14 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00017C88 00024A18 41 82 7C B0 */ beq .text+0x17CB0 -/* 00017C8C 00024A1C 81 23 00 04 */ lwz r9, 0x4(r3) -/* 00017C90 00024A20 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00017C94 00024A24 93 E9 00 00 */ stw r31, 0x0(r9) -/* 00017C98 00024A28 91 3F 00 04 */ stw r9, 0x4(r31) -/* 00017C9C 00024A2C 41 82 7C A4 */ beq .text+0x17CA4 -.L_00017CA0: -/* 00017CA0 00024A30 48 00 00 01 */ bl __builtin_delete -/* 00017CA4 00024A34 81 3E 00 08 */ lwz r9, 0x8(r30) -/* 00017CA8 00024A38 39 29 FF FF */ subi r9, r9, 0x1 -/* 00017CAC 00024A3C 91 3E 00 08 */ stw r9, 0x8(r30) -/* 00017CB0 00024A40 7F E3 FB 78 */ mr r3, r31 -/* 00017CB4 00024A44 48 01 7C 64 */ b .text+0x17C64 -/* 00017CB8 00024A48 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 00017CBC 00024A4C 7C 08 03 A6 */ mtlr r0 -/* 00017CC0 00024A50 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 00017CC4 00024A54 38 21 00 18 */ addi r1, r1, 0x18 -/* 00017CC8 00024A58 4E 80 00 20 */ blr -.endfn FlushAllocatedTracks__8ICEGroup - -# .text:0x17CCC | size: 0x3C -.fn GetTrack__8ICEGroupi, global -/* 00017CCC 00024A5C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00017CD0 00024A60 7C 08 02 A6 */ mflr r0 -/* 00017CD4 00024A64 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 00017CD8 00024A68 90 01 00 14 */ stw r0, 0x14(r1) -/* 00017CDC 00024A6C 3B C3 00 0C */ addi r30, r3, 0xc -/* 00017CE0 00024A70 7F C3 F3 78 */ mr r3, r30 -/* 00017CE4 00024A74 48 00 00 01 */ bl GetNode__5bListi -.L_00017CE8: -/* 00017CE8 00024A78 7C 03 F0 00 */ cmpw r3, r30 -/* 00017CEC 00024A7C 40 82 7C F4 */ bne .text+0x17CF4 -/* 00017CF0 00024A80 38 60 00 00 */ li r3, 0x0 -/* 00017CF4 00024A84 80 01 00 14 */ lwz r0, 0x14(r1) -.L_00017CF8: -/* 00017CF8 00024A88 7C 08 03 A6 */ mtlr r0 -/* 00017CFC 00024A8C BB C1 00 08 */ lmw r30, 0x8(r1) -/* 00017D00 00024A90 38 21 00 10 */ addi r1, r1, 0x10 -/* 00017D04 00024A94 4E 80 00 20 */ blr -.endfn GetTrack__8ICEGroupi - -# .text:0x17D08 | size: 0x60 -.fn GetTrack__8ICEGroupPc, global -/* 00017D08 00024A98 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 00017D0C 00024A9C 7C 08 02 A6 */ mflr r0 -/* 00017D10 00024AA0 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 00017D14 00024AA4 90 01 00 1C */ stw r0, 0x1c(r1) -/* 00017D18 00024AA8 83 E3 00 0C */ lwz r31, 0xc(r3) -/* 00017D1C 00024AAC 7C 9D 23 78 */ mr r29, r4 -/* 00017D20 00024AB0 3B C3 00 0C */ addi r30, r3, 0xc -/* 00017D24 00024AB4 7C 1F F0 00 */ cmpw r31, r30 -/* 00017D28 00024AB8 41 82 7D 50 */ beq .text+0x17D50 -.L_00017D2C: -/* 00017D2C 00024ABC 7F A3 EB 78 */ mr r3, r29 -/* 00017D30 00024AC0 38 9F 00 17 */ addi r4, r31, 0x17 -/* 00017D34 00024AC4 48 00 00 01 */ bl bStrCmp__FPCcT0 -/* 00017D38 00024AC8 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00017D3C 00024ACC 40 82 7D 48 */ bne .text+0x17D48 -/* 00017D40 00024AD0 7F E3 FB 78 */ mr r3, r31 -/* 00017D44 00024AD4 48 01 7D 54 */ b .text+0x17D54 -/* 00017D48 00024AD8 83 FF 00 00 */ lwz r31, 0x0(r31) -/* 00017D4C 00024ADC 48 01 7D 24 */ b .text+0x17D24 -/* 00017D50 00024AE0 38 60 00 00 */ li r3, 0x0 -/* 00017D54 00024AE4 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 00017D58 00024AE8 7C 08 03 A6 */ mtlr r0 -/* 00017D5C 00024AEC BB A1 00 0C */ lmw r29, 0xc(r1) -/* 00017D60 00024AF0 38 21 00 18 */ addi r1, r1, 0x18 -/* 00017D64 00024AF4 4E 80 00 20 */ blr -.endfn GetTrack__8ICEGroupPc - -# .text:0x17D68 | size: 0x84 -# ICEShakeGroup::FlushAllocatedTracks -.fn FlushAllocatedTracks__13ICEShakeGroup, global -/* 00017D68 00024AF8 94 21 FF E8 */ stwu r1, -0x18(r1) -.L_00017D6C: -/* 00017D6C 00024AFC 7C 08 02 A6 */ mflr r0 -/* 00017D70 00024B00 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 00017D74 00024B04 90 01 00 1C */ stw r0, 0x1c(r1) -/* 00017D78 00024B08 7C 7E 1B 78 */ mr r30, r3 -/* 00017D7C 00024B0C 7F DD F3 78 */ mr r29, r30 -/* 00017D80 00024B10 84 7D 00 04 */ lwzu r3, 0x4(r29) -/* 00017D84 00024B14 7C 03 E8 00 */ cmpw r3, r29 -/* 00017D88 00024B18 41 82 7D D8 */ beq .text+0x17DD8 -/* 00017D8C 00024B1C 88 03 00 0E */ lbz r0, 0xe(r3) -/* 00017D90 00024B20 39 20 00 01 */ li r9, 0x1 -/* 00017D94 00024B24 83 E3 00 00 */ lwz r31, 0x0(r3) -/* 00017D98 00024B28 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00017D9C 00024B2C 40 82 7D A4 */ bne .text+0x17DA4 -/* 00017DA0 00024B30 39 20 00 00 */ li r9, 0x0 -/* 00017DA4 00024B34 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00017DA8 00024B38 41 82 7D D0 */ beq .text+0x17DD0 -/* 00017DAC 00024B3C 81 23 00 04 */ lwz r9, 0x4(r3) -/* 00017DB0 00024B40 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00017DB4 00024B44 93 E9 00 00 */ stw r31, 0x0(r9) -/* 00017DB8 00024B48 91 3F 00 04 */ stw r9, 0x4(r31) -/* 00017DBC 00024B4C 41 82 7D C4 */ beq .text+0x17DC4 -.L_00017DC0: -/* 00017DC0 00024B50 48 00 00 01 */ bl __builtin_delete -/* 00017DC4 00024B54 81 3E 00 00 */ lwz r9, 0x0(r30) -/* 00017DC8 00024B58 39 29 FF FF */ subi r9, r9, 0x1 -/* 00017DCC 00024B5C 91 3E 00 00 */ stw r9, 0x0(r30) -/* 00017DD0 00024B60 7F E3 FB 78 */ mr r3, r31 -/* 00017DD4 00024B64 48 01 7D 84 */ b .text+0x17D84 -/* 00017DD8 00024B68 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 00017DDC 00024B6C 7C 08 03 A6 */ mtlr r0 -/* 00017DE0 00024B70 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 00017DE4 00024B74 38 21 00 18 */ addi r1, r1, 0x18 -/* 00017DE8 00024B78 4E 80 00 20 */ blr -.endfn FlushAllocatedTracks__13ICEShakeGroup - -# .text:0x17DEC | size: 0x3C -.fn GetTrack__13ICEShakeGroupi, global -/* 00017DEC 00024B7C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00017DF0 00024B80 7C 08 02 A6 */ mflr r0 -/* 00017DF4 00024B84 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 00017DF8 00024B88 90 01 00 14 */ stw r0, 0x14(r1) -/* 00017DFC 00024B8C 3B C3 00 04 */ addi r30, r3, 0x4 -/* 00017E00 00024B90 7F C3 F3 78 */ mr r3, r30 -/* 00017E04 00024B94 48 00 00 01 */ bl GetNode__5bListi -/* 00017E08 00024B98 7C 03 F0 00 */ cmpw r3, r30 -/* 00017E0C 00024B9C 40 82 7E 14 */ bne .text+0x17E14 -/* 00017E10 00024BA0 38 60 00 00 */ li r3, 0x0 -/* 00017E14 00024BA4 80 01 00 14 */ lwz r0, 0x14(r1) -/* 00017E18 00024BA8 7C 08 03 A6 */ mtlr r0 -/* 00017E1C 00024BAC BB C1 00 08 */ lmw r30, 0x8(r1) -/* 00017E20 00024BB0 38 21 00 10 */ addi r1, r1, 0x10 -/* 00017E24 00024BB4 4E 80 00 20 */ blr -.endfn GetTrack__13ICEShakeGroupi - -# .text:0x17E28 | size: 0x68 -# ICETrack::PlatEndianSwap -.fn PlatEndianSwap__8ICETrack, global -/* 00017E28 00024BB8 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00017E2C 00024BBC 7C 08 02 A6 */ mflr r0 -/* 00017E30 00024BC0 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 00017E34 00024BC4 90 01 00 14 */ stw r0, 0x14(r1) -/* 00017E38 00024BC8 7C 7F 1B 78 */ mr r31, r3 -/* 00017E3C 00024BCC 3B C0 00 00 */ li r30, 0x0 -/* 00017E40 00024BD0 38 7F 00 0C */ addi r3, r31, 0xc -.L_00017E44: -/* 00017E44 00024BD4 48 00 00 01 */ bl bEndianSwap32__FPv -.L_00017E48: -/* 00017E48 00024BD8 38 7F 00 10 */ addi r3, r31, 0x10 -/* 00017E4C 00024BDC 48 00 00 01 */ bl bEndianSwap32__FPv -/* 00017E50 00024BE0 38 7F 00 14 */ addi r3, r31, 0x14 -/* 00017E54 00024BE4 48 00 00 01 */ bl bEndianSwap16__FPv -/* 00017E58 00024BE8 48 01 7E 70 */ b .text+0x17E70 -/* 00017E5C 00024BEC 1C 7E 00 84 */ mulli r3, r30, 0x84 -/* 00017E60 00024BF0 3B DE 00 01 */ addi r30, r30, 0x1 -/* 00017E64 00024BF4 38 63 00 28 */ addi r3, r3, 0x28 -/* 00017E68 00024BF8 7C 7F 1A 14 */ add r3, r31, r3 -/* 00017E6C 00024BFC 48 01 35 21 */ bl .text+0x13520 -.L_00017E70: -/* 00017E70 00024C00 A8 1F 00 14 */ lha r0, 0x14(r31) -/* 00017E74 00024C04 7C 1E 00 00 */ cmpw r30, r0 -/* 00017E78 00024C08 41 80 7E 5C */ blt .text+0x17E5C -/* 00017E7C 00024C0C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 00017E80 00024C10 7C 08 03 A6 */ mtlr r0 -/* 00017E84 00024C14 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 00017E88 00024C18 38 21 00 10 */ addi r1, r1, 0x10 -/* 00017E8C 00024C1C 4E 80 00 20 */ blr -.endfn PlatEndianSwap__8ICETrack - -# .text:0x17E90 | size: 0x18 -# ICETrack::GetContext -.fn GetContext__8ICETrack, global -/* 00017E90 00024C20 81 23 00 08 */ lwz r9, 0x8(r3) -/* 00017E94 00024C24 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00017E98 00024C28 38 60 00 04 */ li r3, 0x4 -/* 00017E9C 00024C2C 4D 82 00 20 */ beqlr -/* 00017EA0 00024C30 80 69 00 04 */ lwz r3, 0x4(r9) -/* 00017EA4 00024C34 4E 80 00 20 */ blr -.endfn GetContext__8ICETrack - -# .text:0x17EA8 | size: 0x40 -.fn GetKeyNumber__8ICETrackf, global -/* 00017EA8 00024C38 A8 03 00 14 */ lha r0, 0x14(r3) -/* 00017EAC 00024C3C 39 23 00 38 */ addi r9, r3, 0x38 -/* 00017EB0 00024C40 34 60 FF FF */ subic. r3, r0, 0x1 -/* 00017EB4 00024C44 4C 81 00 20 */ blelr -.L_00017EB8: -/* 00017EB8 00024C48 1C 03 00 84 */ mulli r0, r3, 0x84 -/* 00017EBC 00024C4C 7C 09 04 2E */ lfsx f0, r9, r0 -/* 00017EC0 00024C50 FC 00 08 00 */ fcmpu cr0, f0, f1 -/* 00017EC4 00024C54 4C 62 03 82 */ cror un, eq, lt -.L_00017EC8: -/* 00017EC8 00024C58 4D 83 00 20 */ bsolr -/* 00017ECC 00024C5C 34 63 FF FF */ subic. r3, r3, 0x1 -/* 00017ED0 00024C60 4C 81 00 20 */ blelr -/* 00017ED4 00024C64 1C 03 00 84 */ mulli r0, r3, 0x84 -/* 00017ED8 00024C68 7C 09 04 2E */ lfsx f0, r9, r0 -/* 00017EDC 00024C6C FC 00 08 00 */ fcmpu cr0, f0, f1 -/* 00017EE0 00024C70 41 81 7E CC */ bgt .text+0x17ECC -/* 00017EE4 00024C74 4E 80 00 20 */ blr -.endfn GetKeyNumber__8ICETrackf - -# .text:0x17EE8 | size: 0x130 -# ICETrack::GetParameter -.fn GetParameter__8ICETrack, global -/* 00017EE8 00024C78 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 00017EEC 00024C7C 7C 08 02 A6 */ mflr r0 -/* 00017EF0 00024C80 F3 A1 00 10 */ psq_st f29, 0x10(r1), 0, qr0 -/* 00017EF4 00024C84 F3 C1 00 18 */ psq_st f30, 0x18(r1), 0, qr0 -/* 00017EF8 00024C88 F3 E1 00 20 */ psq_st f31, 0x20(r1), 0, qr0 -.L_00017EFC: -/* 00017EFC 00024C8C 93 E1 00 0C */ stw r31, 0xc(r1) -/* 00017F00 00024C90 90 01 00 2C */ stw r0, 0x2c(r1) -/* 00017F04 00024C94 3D 20 00 00 */ lis r9, .rodata+0xDD8@ha -/* 00017F08 00024C98 7C 7F 1B 78 */ mr r31, r3 -/* 00017F0C 00024C9C C3 C9 0D D8 */ lfs f30, .rodata+0xDD8@l(r9) -/* 00017F10 00024CA0 48 01 7E 91 */ bl .text+0x17E90 -/* 00017F14 00024CA4 7C 63 1B 79 */ mr. r3, r3 -/* 00017F18 00024CA8 40 82 7F A4 */ bne .text+0x17FA4 -/* 00017F1C 00024CAC 48 01 9F D9 */ bl .text+0x19FD8 -/* 00017F20 00024CB0 7C 7F 1B 79 */ mr. r31, r3 -/* 00017F24 00024CB4 41 82 7F F4 */ beq .text+0x17FF4 -/* 00017F28 00024CB8 81 3F 00 00 */ lwz r9, 0x0(r31) -/* 00017F2C 00024CBC 80 09 00 5C */ lwz r0, 0x5c(r9) -/* 00017F30 00024CC0 A8 69 00 58 */ lha r3, 0x58(r9) -/* 00017F34 00024CC4 7C 08 03 A6 */ mtlr r0 -/* 00017F38 00024CC8 7C 7F 1A 14 */ add r3, r31, r3 -/* 00017F3C 00024CCC 4E 80 00 21 */ blrl -/* 00017F40 00024CD0 81 3F 00 00 */ lwz r9, 0x0(r31) -/* 00017F44 00024CD4 FF C0 08 90 */ fmr f30, f1 -/* 00017F48 00024CD8 80 09 00 4C */ lwz r0, 0x4c(r9) -/* 00017F4C 00024CDC A8 69 00 48 */ lha r3, 0x48(r9) -/* 00017F50 00024CE0 7C 08 03 A6 */ mtlr r0 -/* 00017F54 00024CE4 7C 7F 1A 14 */ add r3, r31, r3 -/* 00017F58 00024CE8 4E 80 00 21 */ blrl -/* 00017F5C 00024CEC 81 3F 00 00 */ lwz r9, 0x0(r31) -/* 00017F60 00024CF0 FF A0 08 90 */ fmr f29, f1 -/* 00017F64 00024CF4 80 09 00 54 */ lwz r0, 0x54(r9) -.L_00017F68: -/* 00017F68 00024CF8 A8 69 00 50 */ lha r3, 0x50(r9) -/* 00017F6C 00024CFC 7C 08 03 A6 */ mtlr r0 -/* 00017F70 00024D00 7C 7F 1A 14 */ add r3, r31, r3 -/* 00017F74 00024D04 4E 80 00 21 */ blrl -/* 00017F78 00024D08 81 3F 00 00 */ lwz r9, 0x0(r31) -/* 00017F7C 00024D0C FF E0 08 90 */ fmr f31, f1 -/* 00017F80 00024D10 A8 69 00 48 */ lha r3, 0x48(r9) -/* 00017F84 00024D14 80 09 00 4C */ lwz r0, 0x4c(r9) -/* 00017F88 00024D18 7C 7F 1A 14 */ add r3, r31, r3 -/* 00017F8C 00024D1C 7C 08 03 A6 */ mtlr r0 -/* 00017F90 00024D20 4E 80 00 21 */ blrl -/* 00017F94 00024D24 EF DE E8 28 */ fsubs f30, f30, f29 -/* 00017F98 00024D28 EF FF 08 28 */ fsubs f31, f31, f1 -/* 00017F9C 00024D2C EF DE F8 24 */ fdivs f30, f30, f31 -/* 00017FA0 00024D30 48 01 7F F4 */ b .text+0x17FF4 -/* 00017FA4 00024D34 38 03 FF FF */ subi r0, r3, 0x1 -/* 00017FA8 00024D38 28 00 00 02 */ cmplwi r0, 0x2 -.L_00017FAC: -/* 00017FAC 00024D3C 41 81 7F F4 */ bgt .text+0x17FF4 -/* 00017FB0 00024D40 C0 1F 00 10 */ lfs f0, 0x10(r31) -/* 00017FB4 00024D44 FC 00 F0 00 */ fcmpu cr0, f0, f30 -/* 00017FB8 00024D48 4C 62 03 82 */ cror un, eq, lt -/* 00017FBC 00024D4C 41 83 7F F4 */ bso .text+0x17FF4 -/* 00017FC0 00024D50 3C 60 00 00 */ lis r3, TheICEManager@ha -/* 00017FC4 00024D54 38 63 00 00 */ addi r3, r3, TheICEManager@l -/* 00017FC8 00024D58 48 01 82 B1 */ bl .text+0x182B0 -/* 00017FCC 00024D5C C0 1F 00 0C */ lfs f0, 0xc(r31) -/* 00017FD0 00024D60 3D 20 00 00 */ lis r9, .rodata+0xDDC@ha -/* 00017FD4 00024D64 C1 BF 00 10 */ lfs f13, 0x10(r31) -/* 00017FD8 00024D68 EC 21 00 28 */ fsubs f1, f1, f0 -/* 00017FDC 00024D6C EF C1 68 24 */ fdivs f30, f1, f13 -/* 00017FE0 00024D70 C0 09 0D DC */ lfs f0, .rodata+0xDDC@l(r9) -/* 00017FE4 00024D74 FC 1E 00 00 */ fcmpu cr0, f30, f0 -/* 00017FE8 00024D78 4C 62 03 82 */ cror un, eq, lt -/* 00017FEC 00024D7C 41 83 7F F4 */ bso .text+0x17FF4 -/* 00017FF0 00024D80 FF C0 00 90 */ fmr f30, f0 -/* 00017FF4 00024D84 FC 20 F0 90 */ fmr f1, f30 -/* 00017FF8 00024D88 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 00017FFC 00024D8C 7C 08 03 A6 */ mtlr r0 -/* 00018000 00024D90 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 00018004 00024D94 E3 A1 00 10 */ psq_l f29, 0x10(r1), 0, qr0 -.L_00018008: -/* 00018008 00024D98 E3 C1 00 18 */ psq_l f30, 0x18(r1), 0, qr0 -/* 0001800C 00024D9C E3 E1 00 20 */ psq_l f31, 0x20(r1), 0, qr0 -/* 00018010 00024DA0 38 21 00 28 */ addi r1, r1, 0x28 -/* 00018014 00024DA4 4E 80 00 20 */ blr -.endfn GetParameter__8ICETrack - -# .text:0x18018 | size: 0x128 -.fn GetCameraData__8ICETrackPfN21, global -/* 00018018 00024DA8 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 0001801C 00024DAC 7C 08 02 A6 */ mflr r0 -/* 00018020 00024DB0 F3 C1 00 18 */ psq_st f30, 0x18(r1), 0, qr0 -/* 00018024 00024DB4 F3 E1 00 20 */ psq_st f31, 0x20(r1), 0, qr0 -/* 00018028 00024DB8 BF 81 00 08 */ stmw r28, 0x8(r1) -/* 0001802C 00024DBC 90 01 00 2C */ stw r0, 0x2c(r1) -/* 00018030 00024DC0 7C 7F 1B 78 */ mr r31, r3 -/* 00018034 00024DC4 7C 9D 23 78 */ mr r29, r4 -/* 00018038 00024DC8 7C BC 2B 78 */ mr r28, r5 -/* 0001803C 00024DCC 7C DE 33 78 */ mr r30, r6 -/* 00018040 00024DD0 48 01 7E E9 */ bl .text+0x17EE8 -/* 00018044 00024DD4 3D 20 00 00 */ lis r9, .rodata+0xDE0@ha -/* 00018048 00024DD8 FF E0 08 90 */ fmr f31, f1 -/* 0001804C 00024DDC C3 C9 0D E0 */ lfs f30, .rodata+0xDE0@l(r9) -/* 00018050 00024DE0 FC 1F F0 00 */ fcmpu cr0, f31, f30 -/* 00018054 00024DE4 41 80 81 10 */ blt .L_00010164 -/* 00018058 00024DE8 3D 20 00 00 */ lis r9, .rodata+0xDE4@ha -/* 0001805C 00024DEC C0 09 0D E4 */ lfs f0, .rodata+0xDE4@l(r9) -/* 00018060 00024DF0 FC 1F 00 00 */ fcmpu cr0, f31, f0 -/* 00018064 00024DF4 41 81 81 10 */ bgt .L_00010174 -/* 00018068 00024DF8 7F E3 FB 78 */ mr r3, r31 -/* 0001806C 00024DFC FC 20 F8 90 */ fmr f1, f31 -/* 00018070 00024E00 48 01 7E A9 */ bl .text+0x17EA8 -/* 00018074 00024E04 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 00018078 00024E08 41 82 80 80 */ beq .L_000100F8 -/* 0001807C 00024E0C D3 FE 00 00 */ stfs f31, 0x0(r30) -/* 00018080 00024E10 2C 1D 00 00 */ cmpwi r29, 0x0 -/* 00018084 00024E14 41 82 80 B0 */ beq .L_00010134 -/* 00018088 00024E18 FC 00 F0 90 */ fmr f0, f30 -/* 0001808C 00024E1C 2C 03 FF FF */ cmpwi r3, -0x1 -/* 00018090 00024E20 40 81 80 AC */ ble .L_0001013C -.L_00018094: -/* 00018094 00024E24 A8 1F 00 14 */ lha r0, 0x14(r31) -/* 00018098 00024E28 7C 03 00 00 */ cmpw r3, r0 -/* 0001809C 00024E2C 40 80 80 AC */ bge .L_00010148 -/* 000180A0 00024E30 1C 03 00 84 */ mulli r0, r3, 0x84 -/* 000180A4 00024E34 39 3F 00 38 */ addi r9, r31, 0x38 -/* 000180A8 00024E38 7C 09 04 2E */ lfsx f0, r9, r0 -/* 000180AC 00024E3C D0 1D 00 00 */ stfs f0, 0x0(r29) -/* 000180B0 00024E40 2C 1C 00 00 */ cmpwi r28, 0x0 -/* 000180B4 00024E44 41 82 80 E4 */ beq .L_00010198 -/* 000180B8 00024E48 3D 20 00 00 */ lis r9, .rodata+0xDE4@ha -/* 000180BC 00024E4C 35 63 00 01 */ addic. r11, r3, 0x1 -/* 000180C0 00024E50 C0 09 0D E4 */ lfs f0, .rodata+0xDE4@l(r9) -/* 000180C4 00024E54 41 80 80 E0 */ blt .L_000101A4 -/* 000180C8 00024E58 A8 1F 00 14 */ lha r0, 0x14(r31) -/* 000180CC 00024E5C 7C 0B 00 00 */ cmpw r11, r0 -/* 000180D0 00024E60 40 80 80 E0 */ bge .L_000101B0 -/* 000180D4 00024E64 1C 0B 00 84 */ mulli r0, r11, 0x84 -/* 000180D8 00024E68 39 3F 00 38 */ addi r9, r31, 0x38 -/* 000180DC 00024E6C 7C 09 04 2E */ lfsx f0, r9, r0 -/* 000180E0 00024E70 D0 1C 00 00 */ stfs f0, 0x0(r28) -/* 000180E4 00024E74 7C 60 1B 78 */ mr r0, r3 -/* 000180E8 00024E78 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000180EC 00024E7C 40 80 80 F4 */ bge .L_000101E0 -/* 000180F0 00024E80 38 00 00 00 */ li r0, 0x0 -/* 000180F4 00024E84 A9 3F 00 14 */ lha r9, 0x14(r31) -/* 000180F8 00024E88 39 29 FF FF */ subi r9, r9, 0x1 -.L_000180FC: -/* 000180FC 00024E8C 7C 09 00 00 */ cmpw r9, r0 -/* 00018100 00024E90 40 80 81 08 */ bge .L_00010208 -/* 00018104 00024E94 7D 20 4B 78 */ mr r0, r9 -/* 00018108 00024E98 7C 03 00 00 */ cmpw r3, r0 -/* 0001810C 00024E9C 41 82 81 18 */ beq .L_00010224 -/* 00018110 00024EA0 38 60 00 00 */ li r3, 0x0 -/* 00018114 00024EA4 48 01 81 24 */ b .text+0x18124 -/* 00018118 00024EA8 1C 63 00 84 */ mulli r3, r3, 0x84 -/* 0001811C 00024EAC 38 63 00 28 */ addi r3, r3, 0x28 -/* 00018120 00024EB0 7C 7F 1A 14 */ add r3, r31, r3 -/* 00018124 00024EB4 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 00018128 00024EB8 7C 08 03 A6 */ mtlr r0 -/* 0001812C 00024EBC BB 81 00 08 */ lmw r28, 0x8(r1) -/* 00018130 00024EC0 E3 C1 00 18 */ psq_l f30, 0x18(r1), 0, qr0 -/* 00018134 00024EC4 E3 E1 00 20 */ psq_l f31, 0x20(r1), 0, qr0 -/* 00018138 00024EC8 38 21 00 28 */ addi r1, r1, 0x28 -/* 0001813C 00024ECC 4E 80 00 20 */ blr -.endfn GetCameraData__8ICETrackPfN21 - -# .text:0x18140 | size: 0x54 -# ICEShakeData::PlatEndianSwap -.fn PlatEndianSwap__12ICEShakeData, global -/* 00018140 00024ED0 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00018144 00024ED4 7C 08 02 A6 */ mflr r0 -.L_00018148: -/* 00018148 00024ED8 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 0001814C 00024EDC 90 01 00 14 */ stw r0, 0x14(r1) -/* 00018150 00024EE0 7C 7E 1B 78 */ mr r30, r3 -.L_00018154: -/* 00018154 00024EE4 48 00 00 01 */ bl bEndianSwap32__FPv -/* 00018158 00024EE8 38 7E 00 04 */ addi r3, r30, 0x4 -/* 0001815C 00024EEC 48 00 00 01 */ bl bEndianSwap32__FPv -/* 00018160 00024EF0 38 7E 00 08 */ addi r3, r30, 0x8 -/* 00018164 00024EF4 48 00 00 01 */ bl bEndianSwap32__FPv -/* 00018168 00024EF8 38 7E 00 0C */ addi r3, r30, 0xc -/* 0001816C 00024EFC 48 00 00 01 */ bl bEndianSwap32__FPv -/* 00018170 00024F00 38 7E 00 10 */ addi r3, r30, 0x10 -/* 00018174 00024F04 48 00 00 01 */ bl bEndianSwap32__FPv -/* 00018178 00024F08 38 7E 00 14 */ addi r3, r30, 0x14 -.L_0001817C: -/* 0001817C 00024F0C 48 00 00 01 */ bl bEndianSwap32__FPv -/* 00018180 00024F10 80 01 00 14 */ lwz r0, 0x14(r1) -/* 00018184 00024F14 7C 08 03 A6 */ mtlr r0 -/* 00018188 00024F18 BB C1 00 08 */ lmw r30, 0x8(r1) -.L_0001818C: -/* 0001818C 00024F1C 38 21 00 10 */ addi r1, r1, 0x10 -/* 00018190 00024F20 4E 80 00 20 */ blr -.endfn PlatEndianSwap__12ICEShakeData - -# .text:0x18194 | size: 0x58 -# ICEShakeTrack::PlatEndianSwap -.fn PlatEndianSwap__13ICEShakeTrack, global -/* 00018194 00024F24 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00018198 00024F28 7C 08 02 A6 */ mflr r0 -/* 0001819C 00024F2C BF C1 00 08 */ stmw r30, 0x8(r1) -/* 000181A0 00024F30 90 01 00 14 */ stw r0, 0x14(r1) -/* 000181A4 00024F34 7C 7E 1B 78 */ mr r30, r3 -/* 000181A8 00024F38 3B E0 00 00 */ li r31, 0x0 -/* 000181AC 00024F3C 38 7E 00 0C */ addi r3, r30, 0xc -/* 000181B0 00024F40 48 00 00 01 */ bl bEndianSwap16__FPv -/* 000181B4 00024F44 48 01 81 CC */ b .text+0x181CC -/* 000181B8 00024F48 1C 7F 00 18 */ mulli r3, r31, 0x18 -/* 000181BC 00024F4C 3B FF 00 01 */ addi r31, r31, 0x1 -/* 000181C0 00024F50 38 63 00 20 */ addi r3, r3, 0x20 -/* 000181C4 00024F54 7C 7E 1A 14 */ add r3, r30, r3 -/* 000181C8 00024F58 48 01 81 41 */ bl .text+0x18140 -/* 000181CC 00024F5C A8 1E 00 0C */ lha r0, 0xc(r30) -/* 000181D0 00024F60 7C 1F 00 00 */ cmpw r31, r0 -/* 000181D4 00024F64 41 80 81 B8 */ blt .L_0001038C -/* 000181D8 00024F68 80 01 00 14 */ lwz r0, 0x14(r1) -/* 000181DC 00024F6C 7C 08 03 A6 */ mtlr r0 -/* 000181E0 00024F70 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 000181E4 00024F74 38 21 00 10 */ addi r1, r1, 0x10 -/* 000181E8 00024F78 4E 80 00 20 */ blr -.endfn PlatEndianSwap__13ICEShakeTrack - -# .text:0x181EC | size: 0xC4 -.fn __10ICEManager, global -/* 000181EC 00024F7C 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 000181F0 00024F80 7C 08 02 A6 */ mflr r0 -/* 000181F4 00024F84 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 000181F8 00024F88 90 01 00 1C */ stw r0, 0x1c(r1) -.L_000181FC: -/* 000181FC 00024F8C 3D 20 00 00 */ lis r9, .rodata+0xDE8@ha -/* 00018200 00024F90 7C 7E 1B 78 */ mr r30, r3 -/* 00018204 00024F94 3B A0 00 00 */ li r29, 0x0 -/* 00018208 00024F98 C0 09 0D E8 */ lfs f0, .rodata+0xDE8@l(r9) -/* 0001820C 00024F9C 38 00 00 03 */ li r0, 0x3 -/* 00018210 00024FA0 93 BE 00 28 */ stw r29, 0x28(r30) -.L_00018214: -/* 00018214 00024FA4 93 BE 00 2C */ stw r29, 0x2c(r30) -/* 00018218 00024FA8 3C 60 00 00 */ lis r3, .rodata@ha -/* 0001821C 00024FAC 93 BE 00 30 */ stw r29, 0x30(r30) -/* 00018220 00024FB0 38 63 00 00 */ addi r3, r3, .rodata@l -/* 00018224 00024FB4 93 BE 00 34 */ stw r29, 0x34(r30) -/* 00018228 00024FB8 93 BE 00 38 */ stw r29, 0x38(r30) -/* 0001822C 00024FBC 93 BE 00 4C */ stw r29, 0x4c(r30) -/* 00018230 00024FC0 93 BE 00 3C */ stw r29, 0x3c(r30) -/* 00018234 00024FC4 93 BE 00 40 */ stw r29, 0x40(r30) -/* 00018238 00024FC8 93 BE 00 48 */ stw r29, 0x48(r30) -/* 0001823C 00024FCC 93 BE 00 14 */ stw r29, 0x14(r30) -/* 00018240 00024FD0 93 BE 00 18 */ stw r29, 0x18(r30) -/* 00018244 00024FD4 93 BE 00 1C */ stw r29, 0x1c(r30) -/* 00018248 00024FD8 93 BE 00 20 */ stw r29, 0x20(r30) -/* 0001824C 00024FDC 93 BE 00 00 */ stw r29, 0x0(r30) -/* 00018250 00024FE0 93 BE 00 04 */ stw r29, 0x4(r30) -/* 00018254 00024FE4 93 BE 00 08 */ stw r29, 0x8(r30) -/* 00018258 00024FE8 93 BE 00 0C */ stw r29, 0xc(r30) -/* 0001825C 00024FEC 93 BE 00 10 */ stw r29, 0x10(r30) -.L_00018260: -/* 00018260 00024FF0 90 1E 00 44 */ stw r0, 0x44(r30) -/* 00018264 00024FF4 D0 1E 00 5C */ stfs f0, 0x5c(r30) -/* 00018268 00024FF8 D0 1E 00 50 */ stfs f0, 0x50(r30) -/* 0001826C 00024FFC D0 1E 00 54 */ stfs f0, 0x54(r30) -/* 00018270 00025000 D0 1E 00 58 */ stfs f0, 0x58(r30) -/* 00018274 00025004 48 00 00 01 */ bl bStringHash__FPCc -/* 00018278 00025008 9B BE 00 64 */ stb r29, 0x64(r30) -/* 0001827C 0002500C 93 BE 00 24 */ stw r29, 0x24(r30) -/* 00018280 00025010 90 7E 00 60 */ stw r3, 0x60(r30) -/* 00018284 00025014 48 01 72 8D */ bl .text+0x1728C -/* 00018288 00025018 38 00 FF FF */ li r0, -0x1 -/* 0001828C 0002501C 93 BE 00 7C */ stw r29, 0x7c(r30) -/* 00018290 00025020 90 1E 00 78 */ stw r0, 0x78(r30) -/* 00018294 00025024 7F C3 F3 78 */ mr r3, r30 -/* 00018298 00025028 93 BE 00 74 */ stw r29, 0x74(r30) -/* 0001829C 0002502C 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 000182A0 00025030 7C 08 03 A6 */ mtlr r0 -/* 000182A4 00025034 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 000182A8 00025038 38 21 00 18 */ addi r1, r1, 0x18 -/* 000182AC 0002503C 4E 80 00 20 */ blr -.endfn __10ICEManager - -# .text:0x182B0 | size: 0x5C -# ICEManager::GetTimerSeconds -.fn GetTimerSeconds__10ICEManager, global -/* 000182B0 00025040 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 000182B4 00025044 80 03 00 7C */ lwz r0, 0x7c(r3) -/* 000182B8 00025048 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000182BC 0002504C 40 82 82 CC */ bne .L_00010588 -/* 000182C0 00025050 3D 20 00 00 */ lis r9, WorldTimer@ha -/* 000182C4 00025054 80 09 00 00 */ lwz r0, WorldTimer@l(r9) -/* 000182C8 00025058 48 01 82 D4 */ b .text+0x182D4 -/* 000182CC 0002505C 3D 20 00 00 */ lis r9, RealTimer@ha -/* 000182D0 00025060 80 09 00 00 */ lwz r0, RealTimer@l(r9) -/* 000182D4 00025064 6C 00 80 00 */ xoris r0, r0, 0x8000 -/* 000182D8 00025068 90 01 00 0C */ stw r0, 0xc(r1) -/* 000182DC 0002506C 3D 60 43 30 */ lis r11, 0x4330 -/* 000182E0 00025070 3D 40 00 00 */ lis r10, .rodata+0xDF0@ha -/* 000182E4 00025074 3D 00 00 00 */ lis r8, .rodata+0xDF8@ha -/* 000182E8 00025078 91 61 00 08 */ stw r11, 0x8(r1) -/* 000182EC 0002507C C8 0A 0D F0 */ lfd f0, .rodata+0xDF0@l(r10) -/* 000182F0 00025080 C8 21 00 08 */ lfd f1, 0x8(r1) -/* 000182F4 00025084 C1 A8 0D F8 */ lfs f13, .rodata+0xDF8@l(r8) -/* 000182F8 00025088 FC 21 00 28 */ fsub f1, f1, f0 -/* 000182FC 0002508C FC 20 08 18 */ frsp f1, f1 -/* 00018300 00025090 EC 21 03 72 */ fmuls f1, f1, f13 -/* 00018304 00025094 38 21 00 10 */ addi r1, r1, 0x10 -/* 00018308 00025098 4E 80 00 20 */ blr -.endfn GetTimerSeconds__10ICEManager - -# .text:0x1830C | size: 0x8 -# ICEManager::RefreshCameraSplines -.fn RefreshCameraSplines__10ICEManager, global -/* 0001830C 0002509C 38 60 00 00 */ li r3, 0x0 -/* 00018310 000250A0 4E 80 00 20 */ blr -.endfn RefreshCameraSplines__10ICEManager - -# .text:0x18314 | size: 0x4 -# ICEManager::Update -.fn Update__10ICEManager, global -/* 00018314 000250A4 4E 80 00 20 */ blr -.endfn Update__10ICEManager - -# .text:0x18318 | size: 0x40 -.fn GetNisCameraGroup__10ICEManagerUi, global -/* 00018318 000250A8 80 03 00 14 */ lwz r0, 0x14(r3) -/* 0001831C 000250AC 39 60 00 00 */ li r11, 0x0 -/* 00018320 000250B0 7C 0B 00 00 */ cmpw r11, r0 -/* 00018324 000250B4 40 80 83 50 */ bge .L_00010674 -/* 00018328 000250B8 81 43 00 00 */ lwz r10, 0x0(r3) -/* 0001832C 000250BC 7C 08 03 78 */ mr r8, r0 -/* 00018330 000250C0 1D 2B 00 14 */ mulli r9, r11, 0x14 -/* 00018334 000250C4 7C 09 50 2E */ lwzx r0, r9, r10 -/* 00018338 000250C8 7C 69 52 14 */ add r3, r9, r10 -/* 0001833C 000250CC 7C 04 00 00 */ cmpw r4, r0 -/* 00018340 000250D0 4D 82 00 20 */ beqlr -/* 00018344 000250D4 39 6B 00 01 */ addi r11, r11, 0x1 -/* 00018348 000250D8 7C 0B 40 00 */ cmpw r11, r8 -/* 0001834C 000250DC 41 80 83 30 */ blt .L_0001067C -/* 00018350 000250E0 38 60 00 00 */ li r3, 0x0 -/* 00018354 000250E4 4E 80 00 20 */ blr -.endfn GetNisCameraGroup__10ICEManagerUi - -# .text:0x18358 | size: 0x40 -.fn GetFmvCameraGroup__10ICEManagerUi, global -/* 00018358 000250E8 80 03 00 18 */ lwz r0, 0x18(r3) -/* 0001835C 000250EC 39 60 00 00 */ li r11, 0x0 -/* 00018360 000250F0 7C 0B 00 00 */ cmpw r11, r0 -/* 00018364 000250F4 40 80 83 90 */ bge .L_000106F4 -/* 00018368 000250F8 81 43 00 04 */ lwz r10, 0x4(r3) -/* 0001836C 000250FC 7C 08 03 78 */ mr r8, r0 -/* 00018370 00025100 1D 2B 00 14 */ mulli r9, r11, 0x14 -/* 00018374 00025104 7C 09 50 2E */ lwzx r0, r9, r10 -/* 00018378 00025108 7C 69 52 14 */ add r3, r9, r10 -.L_0001837C: -/* 0001837C 0002510C 7C 04 00 00 */ cmpw r4, r0 -/* 00018380 00025110 4D 82 00 20 */ beqlr -/* 00018384 00025114 39 6B 00 01 */ addi r11, r11, 0x1 -/* 00018388 00025118 7C 0B 40 00 */ cmpw r11, r8 -/* 0001838C 0002511C 41 80 83 70 */ blt .L_000106FC -/* 00018390 00025120 38 60 00 00 */ li r3, 0x0 -/* 00018394 00025124 4E 80 00 20 */ blr -.endfn GetFmvCameraGroup__10ICEManagerUi - -# .text:0x18398 | size: 0x40 -.fn GetReplayCameraGroup__10ICEManagerUi, global -/* 00018398 00025128 80 03 00 1C */ lwz r0, 0x1c(r3) -.L_0001839C: -/* 0001839C 0002512C 39 60 00 00 */ li r11, 0x0 -.L_000183A0: -/* 000183A0 00025130 7C 0B 00 00 */ cmpw r11, r0 -/* 000183A4 00025134 40 80 83 D0 */ bge .L_00010774 -.L_000183A8: -/* 000183A8 00025138 81 43 00 08 */ lwz r10, 0x8(r3) -/* 000183AC 0002513C 7C 08 03 78 */ mr r8, r0 -/* 000183B0 00025140 1D 2B 00 14 */ mulli r9, r11, 0x14 -/* 000183B4 00025144 7C 09 50 2E */ lwzx r0, r9, r10 -/* 000183B8 00025148 7C 69 52 14 */ add r3, r9, r10 -/* 000183BC 0002514C 7C 04 00 00 */ cmpw r4, r0 -/* 000183C0 00025150 4D 82 00 20 */ beqlr -/* 000183C4 00025154 39 6B 00 01 */ addi r11, r11, 0x1 -/* 000183C8 00025158 7C 0B 40 00 */ cmpw r11, r8 -/* 000183CC 0002515C 41 80 83 B0 */ blt .L_0001077C -/* 000183D0 00025160 38 60 00 00 */ li r3, 0x0 -/* 000183D4 00025164 4E 80 00 20 */ blr -.endfn GetReplayCameraGroup__10ICEManagerUi - -# .text:0x183D8 | size: 0x40 -.fn GetGenericCameraGroup__10ICEManagerUi, global -/* 000183D8 00025168 80 03 00 20 */ lwz r0, 0x20(r3) -/* 000183DC 0002516C 39 60 00 00 */ li r11, 0x0 -/* 000183E0 00025170 7C 0B 00 00 */ cmpw r11, r0 -/* 000183E4 00025174 40 80 84 10 */ bge .L_000107F4 -/* 000183E8 00025178 81 43 00 0C */ lwz r10, 0xc(r3) -/* 000183EC 0002517C 7C 08 03 78 */ mr r8, r0 -.L_000183F0: -/* 000183F0 00025180 1D 2B 00 14 */ mulli r9, r11, 0x14 -/* 000183F4 00025184 7C 09 50 2E */ lwzx r0, r9, r10 -/* 000183F8 00025188 7C 69 52 14 */ add r3, r9, r10 -/* 000183FC 0002518C 7C 04 00 00 */ cmpw r4, r0 -.L_00018400: -/* 00018400 00025190 4D 82 00 20 */ beqlr -/* 00018404 00025194 39 6B 00 01 */ addi r11, r11, 0x1 -/* 00018408 00025198 7C 0B 40 00 */ cmpw r11, r8 -/* 0001840C 0002519C 41 80 83 F0 */ blt .L_000107FC -.L_00018410: -/* 00018410 000251A0 38 60 00 00 */ li r3, 0x0 -/* 00018414 000251A4 4E 80 00 20 */ blr -.endfn GetGenericCameraGroup__10ICEManagerUi - -# .text:0x18418 | size: 0x8C -.fn GetShakeTrack__10ICEManagerUi, global -/* 00018418 000251A8 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0001841C 000251AC 7C 08 02 A6 */ mflr r0 -/* 00018420 000251B0 BF 81 00 08 */ stmw r28, 0x8(r1) -/* 00018424 000251B4 90 01 00 1C */ stw r0, 0x1c(r1) -/* 00018428 000251B8 7C 7D 1B 78 */ mr r29, r3 -/* 0001842C 000251BC 7C 9C 23 79 */ mr. r28, r4 -/* 00018430 000251C0 41 82 84 8C */ beq .L_000108BC -.L_00018434: -/* 00018434 000251C4 80 7D 00 10 */ lwz r3, 0x10(r29) -/* 00018438 000251C8 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0001843C 000251CC 41 82 84 8C */ beq .L_000108C8 -/* 00018440 000251D0 80 03 00 00 */ lwz r0, 0x0(r3) -/* 00018444 000251D4 3B C0 00 00 */ li r30, 0x0 -/* 00018448 000251D8 7C 1E 00 00 */ cmpw r30, r0 -/* 0001844C 000251DC 40 80 84 8C */ bge .L_000108D8 -/* 00018450 000251E0 7F C4 F3 78 */ mr r4, r30 -/* 00018454 000251E4 48 01 7D ED */ bl .text+0x17DEC -/* 00018458 000251E8 7C 7F 1B 79 */ mr. r31, r3 -/* 0001845C 000251EC 41 82 84 78 */ beq .L_000108D4 -/* 00018460 000251F0 38 7F 00 0F */ addi r3, r31, 0xf -/* 00018464 000251F4 48 00 00 01 */ bl bStringHash__FPCc -/* 00018468 000251F8 7C 03 E0 00 */ cmpw r3, r28 -/* 0001846C 000251FC 40 82 84 78 */ bne .L_000108E4 -/* 00018470 00025200 7F E3 FB 78 */ mr r3, r31 -/* 00018474 00025204 48 01 84 90 */ b .text+0x18490 -/* 00018478 00025208 80 7D 00 10 */ lwz r3, 0x10(r29) -/* 0001847C 0002520C 3B DE 00 01 */ addi r30, r30, 0x1 -/* 00018480 00025210 80 03 00 00 */ lwz r0, 0x0(r3) -/* 00018484 00025214 7C 1E 00 00 */ cmpw r30, r0 -/* 00018488 00025218 41 80 84 50 */ blt .L_000108D8 -.L_0001848C: -/* 0001848C 0002521C 38 60 00 00 */ li r3, 0x0 -/* 00018490 00025220 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 00018494 00025224 7C 08 03 A6 */ mtlr r0 -/* 00018498 00025228 BB 81 00 08 */ lmw r28, 0x8(r1) -/* 0001849C 0002522C 38 21 00 18 */ addi r1, r1, 0x18 -/* 000184A0 00025230 4E 80 00 20 */ blr -.endfn GetShakeTrack__10ICEManagerUi - -# .text:0x184A4 | size: 0x30 -.fn GetCameraIndex__10ICEManagerfP8ICETrack, global -/* 000184A4 00025234 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 000184A8 00025238 7C 08 02 A6 */ mflr r0 -/* 000184AC 0002523C 90 01 00 0C */ stw r0, 0xc(r1) -/* 000184B0 00025240 7C 84 23 79 */ mr. r4, r4 -/* 000184B4 00025244 38 60 00 00 */ li r3, 0x0 -/* 000184B8 00025248 41 82 84 C4 */ beq .L_0001097C -/* 000184BC 0002524C 7C 83 23 78 */ mr r3, r4 -/* 000184C0 00025250 48 01 7E A9 */ bl .text+0x17EA8 -/* 000184C4 00025254 80 01 00 0C */ lwz r0, 0xc(r1) -/* 000184C8 00025258 7C 08 03 A6 */ mtlr r0 -/* 000184CC 0002525C 38 21 00 08 */ addi r1, r1, 0x8 -/* 000184D0 00025260 4E 80 00 20 */ blr -.endfn GetCameraIndex__10ICEManagerfP8ICETrack - -# .text:0x184D4 | size: 0x80 -# ICEManager::GetParameter -.fn GetParameter__10ICEManager, global -/* 000184D4 00025264 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 000184D8 00025268 7C 08 02 A6 */ mflr r0 -/* 000184DC 0002526C F3 E1 00 10 */ psq_st f31, 0x10(r1), 0, qr0 -/* 000184E0 00025270 93 E1 00 0C */ stw r31, 0xc(r1) -/* 000184E4 00025274 90 01 00 1C */ stw r0, 0x1c(r1) -/* 000184E8 00025278 3D 20 00 00 */ lis r9, .rodata+0xDFC@ha -/* 000184EC 0002527C 7C 7F 1B 78 */ mr r31, r3 -/* 000184F0 00025280 C3 E9 0D FC */ lfs f31, .rodata+0xDFC@l(r9) -/* 000184F4 00025284 48 01 9F D9 */ bl .text+0x19FD8 -/* 000184F8 00025288 7C 6B 1B 79 */ mr. r11, r3 -/* 000184FC 0002528C 41 82 85 38 */ beq .L_00010A34 -/* 00018500 00025290 C0 1F 00 58 */ lfs f0, 0x58(r31) -/* 00018504 00025294 FC 00 F8 00 */ fcmpu cr0, f0, f31 -/* 00018508 00025298 4C 62 03 82 */ cror un, eq, lt -/* 0001850C 0002529C 41 83 85 38 */ bso .L_00010A44 -/* 00018510 000252A0 81 2B 00 00 */ lwz r9, 0x0(r11) -/* 00018514 000252A4 A8 69 00 58 */ lha r3, 0x58(r9) -/* 00018518 000252A8 80 09 00 5C */ lwz r0, 0x5c(r9) -/* 0001851C 000252AC 7C 6B 1A 14 */ add r3, r11, r3 -/* 00018520 000252B0 7C 08 03 A6 */ mtlr r0 -/* 00018524 000252B4 4E 80 00 21 */ blrl -/* 00018528 000252B8 C0 1F 00 54 */ lfs f0, 0x54(r31) -/* 0001852C 000252BC C1 BF 00 58 */ lfs f13, 0x58(r31) -/* 00018530 000252C0 EC 21 00 28 */ fsubs f1, f1, f0 -/* 00018534 000252C4 EF E1 68 24 */ fdivs f31, f1, f13 -/* 00018538 000252C8 FC 20 F8 90 */ fmr f1, f31 -/* 0001853C 000252CC 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 00018540 000252D0 7C 08 03 A6 */ mtlr r0 -/* 00018544 000252D4 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 00018548 000252D8 E3 E1 00 10 */ psq_l f31, 0x10(r1), 0, qr0 -/* 0001854C 000252DC 38 21 00 18 */ addi r1, r1, 0x18 -/* 00018550 000252E0 4E 80 00 20 */ blr -.endfn GetParameter__10ICEManager - -# .text:0x18554 | size: 0x44 -.fn GetParameter__10ICEManageriP8ICETrack, global -/* 00018554 000252E4 7C A5 2B 79 */ mr. r5, r5 -/* 00018558 000252E8 40 82 85 68 */ bne .L_00010AC0 -/* 0001855C 000252EC 3D 20 00 00 */ lis r9, .rodata+0xE00@ha -/* 00018560 000252F0 C0 29 0E 00 */ lfs f1, .rodata+0xE00@l(r9) -/* 00018564 000252F4 4E 80 00 20 */ blr -/* 00018568 000252F8 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0001856C 000252FC 41 80 85 5C */ blt .L_00010AC8 -/* 00018570 00025300 A8 05 00 14 */ lha r0, 0x14(r5) -/* 00018574 00025304 7C 04 00 00 */ cmpw r4, r0 -/* 00018578 00025308 41 80 85 88 */ blt .L_00010B00 -/* 0001857C 0002530C 3D 20 00 00 */ lis r9, .rodata+0xE04@ha -/* 00018580 00025310 C0 29 0E 04 */ lfs f1, .rodata+0xE04@l(r9) -/* 00018584 00025314 4E 80 00 20 */ blr -/* 00018588 00025318 1C 04 00 84 */ mulli r0, r4, 0x84 -/* 0001858C 0002531C 39 25 00 38 */ addi r9, r5, 0x38 -/* 00018590 00025320 7C 29 04 2E */ lfsx f1, r9, r0 -/* 00018594 00025324 4E 80 00 20 */ blr -.endfn GetParameter__10ICEManageriP8ICETrack - -# .text:0x18598 | size: 0x7C -.fn GetIntervalSize__10ICEManagerP7ICEDataP8ICETrack, global -/* 00018598 00025328 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 0001859C 0002532C 7C 08 02 A6 */ mflr r0 -/* 000185A0 00025330 F3 E1 00 18 */ psq_st f31, 0x18(r1), 0, qr0 -/* 000185A4 00025334 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 000185A8 00025338 90 01 00 24 */ stw r0, 0x24(r1) -/* 000185AC 0002533C 7C 7D 1B 78 */ mr r29, r3 -/* 000185B0 00025340 3B C0 00 00 */ li r30, 0x0 -/* 000185B4 00025344 7C BF 2B 79 */ mr. r31, r5 -/* 000185B8 00025348 41 82 85 D4 */ beq .L_00010B8C -.L_000185BC: -/* 000185BC 0002534C 39 24 FF D8 */ subi r9, r4, 0x28 -/* 000185C0 00025350 3C 00 3E 0F */ lis r0, 0x3e0f -/* 000185C4 00025354 7D 3F 48 50 */ subf r9, r31, r9 -/* 000185C8 00025358 60 00 83 E1 */ ori r0, r0, 0x83e1 -/* 000185CC 0002535C 7D 29 01 D6 */ mullw r9, r9, r0 -/* 000185D0 00025360 7D 3E 16 70 */ srawi r30, r9, 2 -/* 000185D4 00025364 7F A3 EB 78 */ mr r3, r29 -/* 000185D8 00025368 38 9E 00 01 */ addi r4, r30, 0x1 -/* 000185DC 0002536C 7F E5 FB 78 */ mr r5, r31 -/* 000185E0 00025370 48 01 85 55 */ bl .text+0x18554 -/* 000185E4 00025374 FF E0 08 90 */ fmr f31, f1 -/* 000185E8 00025378 7F A3 EB 78 */ mr r3, r29 -/* 000185EC 0002537C 7F C4 F3 78 */ mr r4, r30 -/* 000185F0 00025380 7F E5 FB 78 */ mr r5, r31 -/* 000185F4 00025384 48 01 85 55 */ bl .text+0x18554 -/* 000185F8 00025388 EC 3F 08 28 */ fsubs f1, f31, f1 -/* 000185FC 0002538C 80 01 00 24 */ lwz r0, 0x24(r1) -/* 00018600 00025390 7C 08 03 A6 */ mtlr r0 -/* 00018604 00025394 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 00018608 00025398 E3 E1 00 18 */ psq_l f31, 0x18(r1), 0, qr0 -/* 0001860C 0002539C 38 21 00 20 */ addi r1, r1, 0x20 -/* 00018610 000253A0 4E 80 00 20 */ blr -.endfn GetIntervalSize__10ICEManagerP7ICEDataP8ICETrack - -# .text:0x18614 | size: 0x5C -# ICEManager::ChooseGenericCamera -.fn ChooseGenericCamera__10ICEManager, global -/* 00018614 000253A4 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00018618 000253A8 7C 08 02 A6 */ mflr r0 -/* 0001861C 000253AC BF C1 00 08 */ stmw r30, 0x8(r1) -/* 00018620 000253B0 90 01 00 14 */ stw r0, 0x14(r1) -/* 00018624 000253B4 7C 7F 1B 78 */ mr r31, r3 -/* 00018628 000253B8 3B C0 00 00 */ li r30, 0x0 -/* 0001862C 000253BC 80 9F 00 60 */ lwz r4, 0x60(r31) -/* 00018630 000253C0 48 01 83 D9 */ bl .text+0x183D8 -/* 00018634 000253C4 7C 63 1B 79 */ mr. r3, r3 -/* 00018638 000253C8 41 82 86 58 */ beq .L_00010C90 -/* 0001863C 000253CC 38 9F 00 64 */ addi r4, r31, 0x64 -.L_00018640: -/* 00018640 000253D0 48 01 7D 09 */ bl .text+0x17D08 -/* 00018644 000253D4 7C 7E 1B 79 */ mr. r30, r3 -/* 00018648 000253D8 41 82 86 58 */ beq .L_00010CA0 -/* 0001864C 000253DC 7F E3 FB 78 */ mr r3, r31 -/* 00018650 000253E0 48 01 82 B1 */ bl .text+0x182B0 -/* 00018654 000253E4 D0 3E 00 0C */ stfs f1, 0xc(r30) -/* 00018658 000253E8 7F C3 F3 78 */ mr r3, r30 -/* 0001865C 000253EC 80 01 00 14 */ lwz r0, 0x14(r1) -/* 00018660 000253F0 7C 08 03 A6 */ mtlr r0 -/* 00018664 000253F4 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 00018668 000253F8 38 21 00 10 */ addi r1, r1, 0x10 -/* 0001866C 000253FC 4E 80 00 20 */ blr -.endfn ChooseGenericCamera__10ICEManager - -# .text:0x18670 | size: 0x3C -.fn GetNumSceneCameraTrack__10ICEManagerUi, global -/* 00018670 00025400 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 00018674 00025404 7C 08 02 A6 */ mflr r0 -/* 00018678 00025408 93 E1 00 0C */ stw r31, 0xc(r1) -/* 0001867C 0002540C 90 01 00 14 */ stw r0, 0x14(r1) -/* 00018680 00025410 48 01 83 19 */ bl .text+0x18318 -/* 00018684 00025414 3B E0 00 00 */ li r31, 0x0 -/* 00018688 00025418 7C 63 1B 79 */ mr. r3, r3 -.L_0001868C: -/* 0001868C 0002541C 41 82 86 94 */ beq .L_00010D20 -/* 00018690 00025420 83 E3 00 08 */ lwz r31, 0x8(r3) -/* 00018694 00025424 7F E3 FB 78 */ mr r3, r31 -/* 00018698 00025428 80 01 00 14 */ lwz r0, 0x14(r1) -/* 0001869C 0002542C 7C 08 03 A6 */ mtlr r0 -/* 000186A0 00025430 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 000186A4 00025434 38 21 00 10 */ addi r1, r1, 0x10 -/* 000186A8 00025438 4E 80 00 20 */ blr -.endfn GetNumSceneCameraTrack__10ICEManagerUi - -# .text:0x186AC | size: 0x8C -# ICEManager::ChooseReplayCamera -.fn ChooseReplayCamera__10ICEManager, global -/* 000186AC 0002543C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 000186B0 00025440 7C 08 02 A6 */ mflr r0 -/* 000186B4 00025444 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 000186B8 00025448 90 01 00 14 */ stw r0, 0x14(r1) -/* 000186BC 0002544C 7C 7F 1B 78 */ mr r31, r3 -/* 000186C0 00025450 3F C0 00 00 */ lis r30, .rodata+0xE08@ha -/* 000186C4 00025454 80 1F 00 24 */ lwz r0, 0x24(r31) -/* 000186C8 00025458 C0 3E 0E 08 */ lfs f1, .rodata+0xE08@l(r30) -/* 000186CC 0002545C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000186D0 00025460 41 82 86 EC */ beq .L_00010DBC -/* 000186D4 00025464 48 01 82 B1 */ bl .text+0x182B0 -/* 000186D8 00025468 81 3F 00 24 */ lwz r9, 0x24(r31) -/* 000186DC 0002546C C0 09 00 0C */ lfs f0, 0xc(r9) -/* 000186E0 00025470 C1 A9 00 10 */ lfs f13, 0x10(r9) -/* 000186E4 00025474 EC 21 00 28 */ fsubs f1, f1, f0 -/* 000186E8 00025478 EC 21 68 24 */ fdivs f1, f1, f13 -.L_000186EC: -/* 000186EC 0002547C C0 1E 0E 08 */ lfs f0, .rodata+0xE08@l(r30) -/* 000186F0 00025480 FC 01 00 00 */ fcmpu cr0, f1, f0 -/* 000186F4 00025484 41 80 87 24 */ blt .L_00010E18 -/* 000186F8 00025488 48 01 5F FD */ bl .text+0x15FFC -/* 000186FC 0002548C 80 9F 00 08 */ lwz r4, 0x8(r31) -/* 00018700 00025490 80 BF 00 1C */ lwz r5, 0x1c(r31) -.L_00018704: -/* 00018704 00025494 48 01 77 1D */ bl .text+0x1771C -/* 00018708 00025498 7C 63 1B 79 */ mr. r3, r3 -.L_0001870C: -/* 0001870C 0002549C 41 82 87 24 */ beq .L_00010E30 -/* 00018710 000254A0 90 7F 00 24 */ stw r3, 0x24(r31) -/* 00018714 000254A4 7F E3 FB 78 */ mr r3, r31 -/* 00018718 000254A8 48 01 82 B1 */ bl .text+0x182B0 -/* 0001871C 000254AC 81 3F 00 24 */ lwz r9, 0x24(r31) -/* 00018720 000254B0 D0 29 00 0C */ stfs f1, 0xc(r9) -/* 00018724 000254B4 80 01 00 14 */ lwz r0, 0x14(r1) -/* 00018728 000254B8 7C 08 03 A6 */ mtlr r0 -/* 0001872C 000254BC BB C1 00 08 */ lmw r30, 0x8(r1) -/* 00018730 000254C0 38 21 00 10 */ addi r1, r1, 0x10 -/* 00018734 000254C4 4E 80 00 20 */ blr -.endfn ChooseReplayCamera__10ICEManager - -# .text:0x18738 | size: 0x50 -.fn GetAnimElevationFixup__10ICEManagerPQ23ICE7Vector3, global -/* 00018738 000254C8 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 0001873C 000254CC 7C 08 02 A6 */ mflr r0 -/* 00018740 000254D0 93 E1 00 0C */ stw r31, 0xc(r1) -/* 00018744 000254D4 90 01 00 14 */ stw r0, 0x14(r1) -/* 00018748 000254D8 7C 7F 1B 78 */ mr r31, r3 -/* 0001874C 000254DC 7C 83 23 78 */ mr r3, r4 -/* 00018750 000254E0 48 01 9D 8D */ bl .text+0x19D8C -/* 00018754 000254E4 FC 00 08 90 */ fmr f0, f1 -/* 00018758 000254E8 3D 20 00 00 */ lis r9, .rodata+0xE0C@ha -/* 0001875C 000254EC C0 29 0E 0C */ lfs f1, .rodata+0xE0C@l(r9) -/* 00018760 000254F0 FC 00 08 00 */ fcmpu cr0, f0, f1 -/* 00018764 000254F4 4C 62 03 82 */ cror un, eq, lt -/* 00018768 000254F8 41 83 87 74 */ bso .L_00010EDC -/* 0001876C 000254FC C0 3F 00 50 */ lfs f1, 0x50(r31) -/* 00018770 00025500 EC 20 08 28 */ fsubs f1, f0, f1 -/* 00018774 00025504 80 01 00 14 */ lwz r0, 0x14(r1) -/* 00018778 00025508 7C 08 03 A6 */ mtlr r0 -/* 0001877C 0002550C 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 00018780 00025510 38 21 00 10 */ addi r1, r1, 0x10 -/* 00018784 00025514 4E 80 00 20 */ blr -.endfn GetAnimElevationFixup__10ICEManagerPQ23ICE7Vector3 - -# .text:0x18788 | size: 0xF4 -.fn FixAnimElevation__10ICEManagerPQ23ICE7Vector3, global -/* 00018788 00025518 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 0001878C 0002551C 7C 08 02 A6 */ mflr r0 -/* 00018790 00025520 BF 81 00 18 */ stmw r28, 0x18(r1) -/* 00018794 00025524 90 01 00 2C */ stw r0, 0x2c(r1) -/* 00018798 00025528 7C 7D 1B 78 */ mr r29, r3 -/* 0001879C 0002552C 7C 9C 23 78 */ mr r28, r4 -/* 000187A0 00025530 48 01 9F D9 */ bl .text+0x19FD8 -/* 000187A4 00025534 7C 7F 1B 79 */ mr. r31, r3 -/* 000187A8 00025538 41 82 88 68 */ beq .L_00011010 -/* 000187AC 0002553C 81 3F 00 00 */ lwz r9, 0x0(r31) -/* 000187B0 00025540 A8 69 00 20 */ lha r3, 0x20(r9) -/* 000187B4 00025544 80 09 00 24 */ lwz r0, 0x24(r9) -/* 000187B8 00025548 7C 7F 1A 14 */ add r3, r31, r3 -/* 000187BC 0002554C 7C 08 03 A6 */ mtlr r0 -/* 000187C0 00025550 4E 80 00 21 */ blrl -/* 000187C4 00025554 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000187C8 00025558 41 82 88 68 */ beq .L_00011030 -/* 000187CC 0002555C 3D 20 00 00 */ lis r9, .rodata+0xE10@ha -/* 000187D0 00025560 3B C1 00 08 */ addi r30, r1, 0x8 -/* 000187D4 00025564 C0 09 0E 10 */ lfs f0, .rodata+0xE10@l(r9) -/* 000187D8 00025568 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 000187DC 0002556C D0 01 00 0C */ stfs f0, 0xc(r1) -/* 000187E0 00025570 D0 1E 00 08 */ stfs f0, 0x8(r30) -/* 000187E4 00025574 D0 01 00 14 */ stfs f0, 0x14(r1) -/* 000187E8 00025578 81 3F 00 00 */ lwz r9, 0x0(r31) -/* 000187EC 0002557C 80 09 00 6C */ lwz r0, 0x6c(r9) -/* 000187F0 00025580 A8 69 00 68 */ lha r3, 0x68(r9) -/* 000187F4 00025584 7C 08 03 A6 */ mtlr r0 -/* 000187F8 00025588 7C 7F 1A 14 */ add r3, r31, r3 -/* 000187FC 0002558C 4E 80 00 21 */ blrl -/* 00018800 00025590 7C 64 1B 78 */ mr r4, r3 -/* 00018804 00025594 7F 85 E3 78 */ mr r5, r28 -/* 00018808 00025598 7F C3 F3 78 */ mr r3, r30 -/* 0001880C 0002559C 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 -/* 00018810 000255A0 80 1D 00 28 */ lwz r0, 0x28(r29) -/* 00018814 000255A4 39 20 00 01 */ li r9, 0x1 -/* 00018818 000255A8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0001881C 000255AC 40 81 88 24 */ ble .L_00011040 -/* 00018820 000255B0 39 20 00 00 */ li r9, 0x0 -/* 00018824 000255B4 2C 09 00 00 */ cmpwi r9, 0x0 -/* 00018828 000255B8 41 82 88 50 */ beq .L_00011078 -/* 0001882C 000255BC 81 3F 00 00 */ lwz r9, 0x0(r31) -/* 00018830 000255C0 A8 69 00 68 */ lha r3, 0x68(r9) -/* 00018834 000255C4 80 09 00 6C */ lwz r0, 0x6c(r9) -/* 00018838 000255C8 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001883C 000255CC 7C 08 03 A6 */ mtlr r0 -/* 00018840 000255D0 4E 80 00 21 */ blrl -/* 00018844 000255D4 38 63 00 30 */ addi r3, r3, 0x30 -/* 00018848 000255D8 48 01 9D 8D */ bl .text+0x19D8C -/* 0001884C 000255DC D0 3D 00 50 */ stfs f1, 0x50(r29) -/* 00018850 000255E0 7F A3 EB 78 */ mr r3, r29 -/* 00018854 000255E4 7F C4 F3 78 */ mr r4, r30 -/* 00018858 000255E8 48 01 87 39 */ bl .text+0x18738 -/* 0001885C 000255EC C0 1C 00 08 */ lfs f0, 0x8(r28) -/* 00018860 000255F0 EC 00 08 2A */ fadds f0, f0, f1 -/* 00018864 000255F4 D0 1C 00 08 */ stfs f0, 0x8(r28) -/* 00018868 000255F8 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 0001886C 000255FC 7C 08 03 A6 */ mtlr r0 -/* 00018870 00025600 BB 81 00 18 */ lmw r28, 0x18(r1) -/* 00018874 00025604 38 21 00 28 */ addi r1, r1, 0x28 -.L_00018878: -/* 00018878 00025608 4E 80 00 20 */ blr -.endfn FixAnimElevation__10ICEManagerPQ23ICE7Vector3 - -# .text:0x1887C | size: 0x50 -.fn SetGenericCameraToPlay__10ICEManagerPCcT1, global -/* 0001887C 0002560C 94 21 FF E8 */ stwu r1, -0x18(r1) -.L_00018880: -/* 00018880 00025610 7C 08 02 A6 */ mflr r0 -/* 00018884 00025614 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 00018888 00025618 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0001888C 0002561C 7C 7E 1B 78 */ mr r30, r3 -.L_00018890: -/* 00018890 00025620 7C BD 2B 78 */ mr r29, r5 -/* 00018894 00025624 7C 83 23 78 */ mr r3, r4 -/* 00018898 00025628 48 00 00 01 */ bl StringHash32__6AttribPCc -/* 0001889C 0002562C 90 7E 00 60 */ stw r3, 0x60(r30) -/* 000188A0 00025630 7F A4 EB 78 */ mr r4, r29 -/* 000188A4 00025634 38 7E 00 64 */ addi r3, r30, 0x64 -/* 000188A8 00025638 38 A0 00 0D */ li r5, 0xd -/* 000188AC 0002563C 48 00 00 01 */ bl bStrNCpy__FPcPCci -/* 000188B0 00025640 38 00 00 00 */ li r0, 0x0 -/* 000188B4 00025644 98 1E 00 71 */ stb r0, 0x71(r30) -/* 000188B8 00025648 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 000188BC 0002564C 7C 08 03 A6 */ mtlr r0 -/* 000188C0 00025650 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 000188C4 00025654 38 21 00 18 */ addi r1, r1, 0x18 -/* 000188C8 00025658 4E 80 00 20 */ blr -.endfn SetGenericCameraToPlay__10ICEManagerPCcT1 - -# .text:0x188CC | size: 0x80 -.fn GetCameraData__10ICEManagerUii, global -/* 000188CC 0002565C 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 000188D0 00025660 7C 08 02 A6 */ mflr r0 -/* 000188D4 00025664 BF A1 00 1C */ stmw r29, 0x1c(r1) -/* 000188D8 00025668 90 01 00 2C */ stw r0, 0x2c(r1) -.L_000188DC: -/* 000188DC 0002566C 7C 7D 1B 78 */ mr r29, r3 -/* 000188E0 00025670 7C BF 2B 78 */ mr r31, r5 -/* 000188E4 00025674 48 01 83 19 */ bl .text+0x18318 -/* 000188E8 00025678 7C 7E 1B 79 */ mr. r30, r3 -/* 000188EC 0002567C 41 82 89 34 */ beq .L_00011220 -/* 000188F0 00025680 3C 80 00 00 */ lis r4, .rodata+0xE14@ha -/* 000188F4 00025684 7F E5 FB 78 */ mr r5, r31 -/* 000188F8 00025688 38 84 0E 14 */ addi r4, r4, .rodata+0xE14@l -/* 000188FC 0002568C 38 61 00 08 */ addi r3, r1, 0x8 -/* 00018900 00025690 4C C6 31 82 */ crclr cr1eq -/* 00018904 00025694 48 00 00 01 */ bl bSPrintf__FPcPCce -/* 00018908 00025698 7F C3 F3 78 */ mr r3, r30 -/* 0001890C 0002569C 38 81 00 08 */ addi r4, r1, 0x8 -/* 00018910 000256A0 48 01 7D 09 */ bl .text+0x17D08 -/* 00018914 000256A4 90 7D 00 24 */ stw r3, 0x24(r29) -/* 00018918 000256A8 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0001891C 000256AC 41 82 89 34 */ beq .L_00011250 -/* 00018920 000256B0 38 80 00 00 */ li r4, 0x0 -/* 00018924 000256B4 38 A0 00 00 */ li r5, 0x0 -/* 00018928 000256B8 38 C0 00 00 */ li r6, 0x0 -/* 0001892C 000256BC 48 01 80 19 */ bl .text+0x18018 -/* 00018930 000256C0 48 01 89 38 */ b .text+0x18938 -/* 00018934 000256C4 38 60 00 00 */ li r3, 0x0 -/* 00018938 000256C8 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 0001893C 000256CC 7C 08 03 A6 */ mtlr r0 -.L_00018940: -/* 00018940 000256D0 BB A1 00 1C */ lmw r29, 0x1c(r1) -/* 00018944 000256D4 38 21 00 28 */ addi r1, r1, 0x28 -/* 00018948 000256D8 4E 80 00 20 */ blr -.endfn GetCameraData__10ICEManagerUii - -# .text:0x1894C | size: 0x50 -.fn GetCameraData__10ICEManagerPP8ICETrackPfT2, global -/* 0001894C 000256DC 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 00018950 000256E0 7C 08 02 A6 */ mflr r0 -/* 00018954 000256E4 90 01 00 0C */ stw r0, 0xc(r1) -/* 00018958 000256E8 7C 84 23 79 */ mr. r4, r4 -/* 0001895C 000256EC 41 82 89 68 */ beq .L_000112C4 -/* 00018960 000256F0 80 03 00 24 */ lwz r0, 0x24(r3) -/* 00018964 000256F4 90 04 00 00 */ stw r0, 0x0(r4) -/* 00018968 000256F8 80 03 00 24 */ lwz r0, 0x24(r3) -/* 0001896C 000256FC 38 60 00 00 */ li r3, 0x0 -/* 00018970 00025700 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00018974 00025704 41 82 89 8C */ beq .L_00011300 -/* 00018978 00025708 7C A4 2B 78 */ mr r4, r5 -/* 0001897C 0002570C 7C 03 03 78 */ mr r3, r0 -/* 00018980 00025710 7C C5 33 78 */ mr r5, r6 -/* 00018984 00025714 38 C0 00 00 */ li r6, 0x0 -/* 00018988 00025718 48 01 80 19 */ bl .text+0x18018 -/* 0001898C 0002571C 80 01 00 0C */ lwz r0, 0xc(r1) -/* 00018990 00025720 7C 08 03 A6 */ mtlr r0 -/* 00018994 00025724 38 21 00 08 */ addi r1, r1, 0x8 -/* 00018998 00025728 4E 80 00 20 */ blr -.endfn GetCameraData__10ICEManagerPP8ICETrackPfT2 - -# .text:0x1899C | size: 0x80 -.fn GetNeighbour__10ICEManagerP7ICEDataiP8ICETrack, global -/* 0001899C 0002572C 7C C6 33 79 */ mr. r6, r6 -/* 000189A0 00025730 40 82 89 AC */ bne .L_0001134C -/* 000189A4 00025734 38 60 00 00 */ li r3, 0x0 -/* 000189A8 00025738 4E 80 00 20 */ blr -/* 000189AC 0002573C 39 24 FF D8 */ subi r9, r4, 0x28 -/* 000189B0 00025740 3C 00 3E 0F */ lis r0, 0x3e0f -/* 000189B4 00025744 60 00 83 E1 */ ori r0, r0, 0x83e1 -/* 000189B8 00025748 7D 26 48 50 */ subf r9, r6, r9 -/* 000189BC 0002574C 7D 29 01 D6 */ mullw r9, r9, r0 -/* 000189C0 00025750 2C 05 00 00 */ cmpwi r5, 0x0 -/* 000189C4 00025754 7D 24 16 70 */ srawi r4, r9, 2 -/* 000189C8 00025758 38 04 FF FF */ subi r0, r4, 0x1 -/* 000189CC 0002575C 41 82 89 D4 */ beq .L_000113A0 -/* 000189D0 00025760 38 04 00 01 */ addi r0, r4, 0x1 -/* 000189D4 00025764 A9 26 00 14 */ lha r9, 0x14(r6) -/* 000189D8 00025768 39 60 00 00 */ li r11, 0x0 -/* 000189DC 0002576C 7C 0B 00 00 */ cmpw r11, r0 -/* 000189E0 00025770 39 29 FF FF */ subi r9, r9, 0x1 -/* 000189E4 00025774 40 80 89 EC */ bge .L_000113D0 -/* 000189E8 00025778 7C 0B 03 78 */ mr r11, r0 -/* 000189EC 0002577C 7D 6A 5B 78 */ mr r10, r11 -/* 000189F0 00025780 7D 0B 48 51 */ subf. r8, r11, r9 -/* 000189F4 00025784 40 80 89 FC */ bge .L_000113F0 -/* 000189F8 00025788 7D 2A 4B 78 */ mr r10, r9 -/* 000189FC 0002578C 7C 00 50 00 */ cmpw r0, r10 -/* 00018A00 00025790 40 82 8A 14 */ bne .L_00011414 -/* 00018A04 00025794 1D 20 00 84 */ mulli r9, r0, 0x84 -.L_00018A08: -/* 00018A08 00025798 39 29 00 28 */ addi r9, r9, 0x28 -/* 00018A0C 0002579C 7C 66 4A 14 */ add r3, r6, r9 -/* 00018A10 000257A0 4E 80 00 20 */ blr -/* 00018A14 000257A4 38 60 00 00 */ li r3, 0x0 -/* 00018A18 000257A8 4E 80 00 20 */ blr -.endfn GetNeighbour__10ICEManagerP7ICEDataiP8ICETrack - -# .text:0x18A1C | size: 0x94 -.fn GetCameraGroup__10ICEManager10ICEContextUi, global -/* 00018A1C 000257AC 2C 04 00 01 */ cmpwi r4, 0x1 -/* 00018A20 000257B0 39 00 00 00 */ li r8, 0x0 -/* 00018A24 000257B4 39 40 00 00 */ li r10, 0x0 -/* 00018A28 000257B8 41 82 8A 5C */ beq .L_00011484 -/* 00018A2C 000257BC 41 81 8A 3C */ bgt .L_00011468 -/* 00018A30 000257C0 2C 04 00 00 */ cmpwi r4, 0x0 -/* 00018A34 000257C4 41 82 8A 50 */ beq .L_00011484 -/* 00018A38 000257C8 48 01 8A 7C */ b .text+0x18A7C -/* 00018A3C 000257CC 2C 04 00 02 */ cmpwi r4, 0x2 -/* 00018A40 000257D0 41 82 8A 68 */ beq .L_000114A8 -/* 00018A44 000257D4 2C 04 00 03 */ cmpwi r4, 0x3 -/* 00018A48 000257D8 41 82 8A 74 */ beq .L_000114BC -/* 00018A4C 000257DC 48 01 8A 7C */ b .text+0x18A7C -/* 00018A50 000257E0 81 03 00 14 */ lwz r8, 0x14(r3) -/* 00018A54 000257E4 81 43 00 00 */ lwz r10, 0x0(r3) -/* 00018A58 000257E8 48 01 8A 7C */ b .text+0x18A7C -/* 00018A5C 000257EC 81 03 00 18 */ lwz r8, 0x18(r3) -/* 00018A60 000257F0 81 43 00 04 */ lwz r10, 0x4(r3) -/* 00018A64 000257F4 48 01 8A 7C */ b .text+0x18A7C -/* 00018A68 000257F8 81 03 00 1C */ lwz r8, 0x1c(r3) -/* 00018A6C 000257FC 81 43 00 08 */ lwz r10, 0x8(r3) -/* 00018A70 00025800 48 01 8A 7C */ b .text+0x18A7C -/* 00018A74 00025804 81 03 00 20 */ lwz r8, 0x20(r3) -/* 00018A78 00025808 81 43 00 0C */ lwz r10, 0xc(r3) -/* 00018A7C 0002580C 39 60 00 00 */ li r11, 0x0 -/* 00018A80 00025810 7C 0B 40 00 */ cmpw r11, r8 -/* 00018A84 00025814 40 80 8A A8 */ bge .L_0001152C -/* 00018A88 00025818 1D 2B 00 14 */ mulli r9, r11, 0x14 -/* 00018A8C 0002581C 7C 0A 48 2E */ lwzx r0, r10, r9 -/* 00018A90 00025820 7C 6A 4A 14 */ add r3, r10, r9 -/* 00018A94 00025824 7C 05 00 00 */ cmpw r5, r0 -.L_00018A98: -/* 00018A98 00025828 4D 82 00 20 */ beqlr -/* 00018A9C 0002582C 39 6B 00 01 */ addi r11, r11, 0x1 -/* 00018AA0 00025830 7C 0B 40 00 */ cmpw r11, r8 -/* 00018AA4 00025834 41 80 8A 88 */ blt .L_0001152C -/* 00018AA8 00025838 38 60 00 00 */ li r3, 0x0 -/* 00018AAC 0002583C 4E 80 00 20 */ blr -.endfn GetCameraGroup__10ICEManager10ICEContextUi - -# .text:0x18AB0 | size: 0x104 -.fn AddCameraGroup__10ICEManager10ICEContextUi, global -/* 00018AB0 00025840 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 00018AB4 00025844 7C 08 02 A6 */ mflr r0 -/* 00018AB8 00025848 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 00018ABC 0002584C 90 01 00 1C */ stw r0, 0x1c(r1) -/* 00018AC0 00025850 7C 7F 1B 78 */ mr r31, r3 -/* 00018AC4 00025854 7C 9E 23 78 */ mr r30, r4 -/* 00018AC8 00025858 7C BD 2B 78 */ mr r29, r5 -/* 00018ACC 0002585C 48 01 8A 1D */ bl .text+0x18A1C -/* 00018AD0 00025860 7C 69 1B 79 */ mr. r9, r3 -/* 00018AD4 00025864 41 82 8A E0 */ beq .L_000115B4 -/* 00018AD8 00025868 7D 23 4B 78 */ mr r3, r9 -/* 00018ADC 0002586C 48 01 8B A0 */ b .text+0x18BA0 -/* 00018AE0 00025870 2C 1E 00 01 */ cmpwi r30, 0x1 -/* 00018AE4 00025874 41 82 8B 2C */ beq .L_00011610 -/* 00018AE8 00025878 41 81 8A F8 */ bgt .L_000115E0 -/* 00018AEC 0002587C 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 00018AF0 00025880 41 82 8B 0C */ beq .L_000115FC -/* 00018AF4 00025884 48 01 8A D8 */ b .text+0x18AD8 -/* 00018AF8 00025888 2C 1E 00 02 */ cmpwi r30, 0x2 -/* 00018AFC 0002588C 41 82 8B 4C */ beq .L_00011648 -/* 00018B00 00025890 2C 1E 00 03 */ cmpwi r30, 0x3 -/* 00018B04 00025894 41 82 8B 6C */ beq .L_00011670 -/* 00018B08 00025898 48 01 8A D8 */ b .text+0x18AD8 -/* 00018B0C 0002589C 81 5F 00 14 */ lwz r10, 0x14(r31) -/* 00018B10 000258A0 2C 0A 00 FF */ cmpwi r10, 0xff -/* 00018B14 000258A4 41 81 8B 78 */ bgt .L_0001168C -/* 00018B18 000258A8 1D 6A 00 14 */ mulli r11, r10, 0x14 -/* 00018B1C 000258AC 81 3F 00 00 */ lwz r9, 0x0(r31) -/* 00018B20 000258B0 38 0A 00 01 */ addi r0, r10, 0x1 -/* 00018B24 000258B4 90 1F 00 14 */ stw r0, 0x14(r31) -/* 00018B28 000258B8 48 01 8B 90 */ b .text+0x18B90 -/* 00018B2C 000258BC 81 5F 00 18 */ lwz r10, 0x18(r31) -/* 00018B30 000258C0 2C 0A 00 09 */ cmpwi r10, 0x9 -/* 00018B34 000258C4 41 81 8B 78 */ bgt .L_000116AC -/* 00018B38 000258C8 1D 6A 00 14 */ mulli r11, r10, 0x14 -/* 00018B3C 000258CC 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 00018B40 000258D0 38 0A 00 01 */ addi r0, r10, 0x1 -/* 00018B44 000258D4 90 1F 00 18 */ stw r0, 0x18(r31) -/* 00018B48 000258D8 48 01 8B 90 */ b .text+0x18B90 -/* 00018B4C 000258DC 81 5F 00 1C */ lwz r10, 0x1c(r31) -/* 00018B50 000258E0 2C 0A 00 31 */ cmpwi r10, 0x31 -/* 00018B54 000258E4 41 81 8B 78 */ bgt .L_000116CC -/* 00018B58 000258E8 1D 6A 00 14 */ mulli r11, r10, 0x14 -/* 00018B5C 000258EC 81 3F 00 08 */ lwz r9, 0x8(r31) -/* 00018B60 000258F0 38 0A 00 01 */ addi r0, r10, 0x1 -/* 00018B64 000258F4 90 1F 00 1C */ stw r0, 0x1c(r31) -/* 00018B68 000258F8 48 01 8B 90 */ b .text+0x18B90 -/* 00018B6C 000258FC 81 5F 00 20 */ lwz r10, 0x20(r31) -/* 00018B70 00025900 2C 0A 00 31 */ cmpwi r10, 0x31 -/* 00018B74 00025904 40 81 8B 80 */ ble .L_000116F4 -/* 00018B78 00025908 38 60 00 00 */ li r3, 0x0 -/* 00018B7C 0002590C 48 01 8B A0 */ b .text+0x18BA0 -/* 00018B80 00025910 1D 6A 00 14 */ mulli r11, r10, 0x14 -/* 00018B84 00025914 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 00018B88 00025918 38 0A 00 01 */ addi r0, r10, 0x1 -/* 00018B8C 0002591C 90 1F 00 20 */ stw r0, 0x20(r31) -/* 00018B90 00025920 7D 29 5A 14 */ add r9, r9, r11 -/* 00018B94 00025924 93 C9 00 04 */ stw r30, 0x4(r9) -.L_00018B98: -/* 00018B98 00025928 7D 23 4B 78 */ mr r3, r9 -/* 00018B9C 0002592C 93 A9 00 00 */ stw r29, 0x0(r9) -/* 00018BA0 00025930 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 00018BA4 00025934 7C 08 03 A6 */ mtlr r0 -.L_00018BA8: -/* 00018BA8 00025938 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 00018BAC 0002593C 38 21 00 18 */ addi r1, r1, 0x18 -/* 00018BB0 00025940 4E 80 00 20 */ blr -.endfn AddCameraGroup__10ICEManager10ICEContextUi - -# .text:0x18BB4 | size: 0x158 -.fn LoadCameraSet__10ICEManagerP6bChunk, global -/* 00018BB4 00025944 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 00018BB8 00025948 7C 08 02 A6 */ mflr r0 -/* 00018BBC 0002594C BE E1 00 0C */ stmw r23, 0xc(r1) -/* 00018BC0 00025950 90 01 00 34 */ stw r0, 0x34(r1) -/* 00018BC4 00025954 7C 99 23 78 */ mr r25, r4 -.L_00018BC8: -/* 00018BC8 00025958 3C 00 80 03 */ lis r0, 0x8003 -/* 00018BCC 0002595C 81 39 00 00 */ lwz r9, 0x0(r25) -/* 00018BD0 00025960 60 00 B2 01 */ ori r0, r0, 0xb201 -.L_00018BD4: -/* 00018BD4 00025964 7C 77 1B 78 */ mr r23, r3 -/* 00018BD8 00025968 3B 00 00 04 */ li r24, 0x4 -/* 00018BDC 0002596C 7C 09 00 00 */ cmpw r9, r0 -/* 00018BE0 00025970 41 82 8C 2C */ beq .L_0001180C -/* 00018BE4 00025974 7C 09 00 40 */ cmplw r9, r0 -/* 00018BE8 00025978 41 81 8C 00 */ bgt .L_000117E8 -/* 00018BEC 0002597C 3C 00 80 03 */ lis r0, 0x8003 -/* 00018BF0 00025980 60 00 B2 00 */ ori r0, r0, 0xb200 -/* 00018BF4 00025984 7C 09 00 00 */ cmpw r9, r0 -/* 00018BF8 00025988 41 82 8C 24 */ beq _._20SelectCarCameraMover -/* 00018BFC 0002598C 48 01 8C 40 */ b .text+0x18C40 -/* 00018C00 00025990 3C 00 80 03 */ lis r0, 0x8003 -/* 00018C04 00025994 60 00 B2 02 */ ori r0, r0, 0xb202 -/* 00018C08 00025998 7C 09 00 00 */ cmpw r9, r0 -/* 00018C0C 0002599C 41 82 8C 34 */ beq .L_00011840 -/* 00018C10 000259A0 3C 00 80 03 */ lis r0, 0x8003 -.L_00018C14: -/* 00018C14 000259A4 60 00 B2 03 */ ori r0, r0, 0xb203 -/* 00018C18 000259A8 7C 09 00 00 */ cmpw r9, r0 -/* 00018C1C 000259AC 41 82 8C 3C */ beq .L_00011858 -.L_00018C20: -/* 00018C20 000259B0 48 01 8C 40 */ b .text+0x18C40 -/* 00018C24 000259B4 3B 00 00 00 */ li r24, 0x0 -/* 00018C28 000259B8 48 01 8C 40 */ b .text+0x18C40 -.L_00018C2C: -/* 00018C2C 000259BC 3B 00 00 01 */ li r24, 0x1 -/* 00018C30 000259C0 48 01 8C 40 */ b .text+0x18C40 -/* 00018C34 000259C4 3B 00 00 02 */ li r24, 0x2 -/* 00018C38 000259C8 48 01 8C 40 */ b .text+0x18C40 -/* 00018C3C 000259CC 3B 00 00 03 */ li r24, 0x3 -/* 00018C40 000259D0 3B B9 00 08 */ addi r29, r25, 0x8 -/* 00018C44 000259D4 81 39 00 04 */ lwz r9, 0x4(r25) -/* 00018C48 000259D8 7D 39 4A 14 */ add r9, r25, r9 -/* 00018C4C 000259DC 39 29 00 08 */ addi r9, r9, 0x8 -/* 00018C50 000259E0 7C 1D 48 00 */ cmpw r29, r9 -/* 00018C54 000259E4 41 82 8C F8 */ beq .L_0001194C -/* 00018C58 000259E8 3B FD 00 08 */ addi r31, r29, 0x8 -/* 00018C5C 000259EC 7F E3 FB 78 */ mr r3, r31 -/* 00018C60 000259F0 48 00 00 01 */ bl bEndianSwap32__FPv -.L_00018C64: -/* 00018C64 000259F4 38 7D 00 0C */ addi r3, r29, 0xc -/* 00018C68 000259F8 48 00 00 01 */ bl bEndianSwap32__FPv -/* 00018C6C 000259FC 80 BD 00 08 */ lwz r5, 0x8(r29) -/* 00018C70 00025A00 7E E3 BB 78 */ mr r3, r23 -/* 00018C74 00025A04 7F 04 C3 78 */ mr r4, r24 -/* 00018C78 00025A08 48 01 8A B1 */ bl .text+0x18AB0 -/* 00018C7C 00025A0C 7C 7E 1B 79 */ mr. r30, r3 -/* 00018C80 00025A10 41 82 8C E8 */ beq .L_00011968 -/* 00018C84 00025A14 83 7D 00 0C */ lwz r27, 0xc(r29) -/* 00018C88 00025A18 3B 80 00 00 */ li r28, 0x0 -/* 00018C8C 00025A1C 3B FF 00 08 */ addi r31, r31, 0x8 -/* 00018C90 00025A20 7C 1C D8 00 */ cmpw r28, r27 -/* 00018C94 00025A24 40 80 8C E8 */ bge .L_0001197C -/* 00018C98 00025A28 3B 5E 00 0C */ addi r26, r30, 0xc -/* 00018C9C 00025A2C 7F E3 FB 78 */ mr r3, r31 -/* 00018CA0 00025A30 3B 9C 00 01 */ addi r28, r28, 0x1 -/* 00018CA4 00025A34 48 01 7E 29 */ bl .text+0x17E28 -/* 00018CA8 00025A38 93 DF 00 08 */ stw r30, 0x8(r31) -/* 00018CAC 00025A3C 7C 1C D8 00 */ cmpw r28, r27 -/* 00018CB0 00025A40 81 3E 00 10 */ lwz r9, 0x10(r30) -/* 00018CB4 00025A44 93 E9 00 00 */ stw r31, 0x0(r9) -/* 00018CB8 00025A48 93 FE 00 10 */ stw r31, 0x10(r30) -.L_00018CBC: -/* 00018CBC 00025A4C 91 3F 00 04 */ stw r9, 0x4(r31) -/* 00018CC0 00025A50 93 5F 00 00 */ stw r26, 0x0(r31) -/* 00018CC4 00025A54 81 3E 00 08 */ lwz r9, 0x8(r30) -/* 00018CC8 00025A58 39 29 00 01 */ addi r9, r9, 0x1 -/* 00018CCC 00025A5C 91 3E 00 08 */ stw r9, 0x8(r30) -/* 00018CD0 00025A60 A8 1F 00 14 */ lha r0, 0x14(r31) -/* 00018CD4 00025A64 20 00 00 32 */ subfic r0, r0, 0x32 -/* 00018CD8 00025A68 1C 00 00 84 */ mulli r0, r0, 0x84 -/* 00018CDC 00025A6C 20 00 19 F0 */ subfic r0, r0, 0x19f0 -/* 00018CE0 00025A70 7F FF 02 14 */ add r31, r31, r0 -/* 00018CE4 00025A74 41 80 8C 9C */ blt .L_00011980 -/* 00018CE8 00025A78 81 3D 00 04 */ lwz r9, 0x4(r29) -.L_00018CEC: -/* 00018CEC 00025A7C 7D 3D 4A 14 */ add r9, r29, r9 -/* 00018CF0 00025A80 3B A9 00 08 */ addi r29, r9, 0x8 -/* 00018CF4 00025A84 48 01 8C 44 */ b .text+0x18C44 -/* 00018CF8 00025A88 80 01 00 34 */ lwz r0, 0x34(r1) -/* 00018CFC 00025A8C 7C 08 03 A6 */ mtlr r0 -/* 00018D00 00025A90 BA E1 00 0C */ lmw r23, 0xc(r1) -/* 00018D04 00025A94 38 21 00 30 */ addi r1, r1, 0x30 -/* 00018D08 00025A98 4E 80 00 20 */ blr -.endfn LoadCameraSet__10ICEManagerP6bChunk - -# .text:0x18D0C | size: 0x1C8 -.fn UnloadCameraSet__10ICEManagerP6bChunk, global -/* 00018D0C 00025A9C 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 00018D10 00025AA0 7C 08 02 A6 */ mflr r0 -/* 00018D14 00025AA4 7D 80 00 26 */ mfcr r12 -/* 00018D18 00025AA8 BF 21 00 0C */ stmw r25, 0xc(r1) -/* 00018D1C 00025AAC 90 01 00 2C */ stw r0, 0x2c(r1) -/* 00018D20 00025AB0 91 81 00 08 */ stw r12, 0x8(r1) -/* 00018D24 00025AB4 7C 9A 23 78 */ mr r26, r4 -/* 00018D28 00025AB8 3C 00 80 03 */ lis r0, 0x8003 -/* 00018D2C 00025ABC 81 3A 00 00 */ lwz r9, 0x0(r26) -/* 00018D30 00025AC0 60 00 B2 01 */ ori r0, r0, 0xb201 -/* 00018D34 00025AC4 7C 7C 1B 78 */ mr r28, r3 -/* 00018D38 00025AC8 3B 60 00 04 */ li r27, 0x4 -/* 00018D3C 00025ACC 7C 09 00 00 */ cmpw r9, r0 -/* 00018D40 00025AD0 41 82 8D 8C */ beq .L_00011ACC -.L_00018D44: -/* 00018D44 00025AD4 7C 09 00 40 */ cmplw r9, r0 -/* 00018D48 00025AD8 41 81 8D 60 */ bgt .L_00011AA8 -/* 00018D4C 00025ADC 3C 00 80 03 */ lis r0, 0x8003 -/* 00018D50 00025AE0 60 00 B2 00 */ ori r0, r0, 0xb200 -.L_00018D54: -/* 00018D54 00025AE4 7C 09 00 00 */ cmpw r9, r0 -/* 00018D58 00025AE8 41 82 8D 84 */ beq .L_00011ADC -/* 00018D5C 00025AEC 48 01 8D A0 */ b .text+0x18DA0 -/* 00018D60 00025AF0 3C 00 80 03 */ lis r0, 0x8003 -/* 00018D64 00025AF4 60 00 B2 02 */ ori r0, r0, 0xb202 -/* 00018D68 00025AF8 7C 09 00 00 */ cmpw r9, r0 -.L_00018D6C: -/* 00018D6C 00025AFC 41 82 8D 94 */ beq .L_00011B00 -/* 00018D70 00025B00 3C 00 80 03 */ lis r0, 0x8003 -/* 00018D74 00025B04 60 00 B2 03 */ ori r0, r0, 0xb203 -/* 00018D78 00025B08 7C 09 00 00 */ cmpw r9, r0 -/* 00018D7C 00025B0C 41 82 8D 9C */ beq .L_00011B18 -/* 00018D80 00025B10 48 01 8D A0 */ b .text+0x18DA0 -/* 00018D84 00025B14 3B 60 00 00 */ li r27, 0x0 -/* 00018D88 00025B18 48 01 8D A0 */ b .text+0x18DA0 -/* 00018D8C 00025B1C 3B 60 00 01 */ li r27, 0x1 -/* 00018D90 00025B20 48 01 8D A0 */ b .text+0x18DA0 -/* 00018D94 00025B24 3B 60 00 02 */ li r27, 0x2 -/* 00018D98 00025B28 48 01 8D A0 */ b .text+0x18DA0 -/* 00018D9C 00025B2C 3B 60 00 03 */ li r27, 0x3 -/* 00018DA0 00025B30 3B DA 00 08 */ addi r30, r26, 0x8 -/* 00018DA4 00025B34 2E 1B 00 01 */ cmpwi cr4, r27, 0x1 -.L_00018DA8: -/* 00018DA8 00025B38 3B 20 00 00 */ li r25, 0x0 -/* 00018DAC 00025B3C 81 3A 00 04 */ lwz r9, 0x4(r26) -/* 00018DB0 00025B40 7D 3A 4A 14 */ add r9, r26, r9 -/* 00018DB4 00025B44 39 29 00 08 */ addi r9, r9, 0x8 -/* 00018DB8 00025B48 7C 1E 48 00 */ cmpw r30, r9 -/* 00018DBC 00025B4C 41 82 8E 38 */ beq .L_00011BF4 -/* 00018DC0 00025B50 80 BE 00 08 */ lwz r5, 0x8(r30) -/* 00018DC4 00025B54 7F 83 E3 78 */ mr r3, r28 -/* 00018DC8 00025B58 7F 64 DB 78 */ mr r4, r27 -/* 00018DCC 00025B5C 48 01 8A 1D */ bl .text+0x18A1C -/* 00018DD0 00025B60 7C 7F 1B 79 */ mr. r31, r3 -/* 00018DD4 00025B64 41 82 8E 28 */ beq .L_00011BFC -/* 00018DD8 00025B68 93 3F 00 08 */ stw r25, 0x8(r31) -/* 00018DDC 00025B6C 3B BF 00 0C */ addi r29, r31, 0xc -/* 00018DE0 00025B70 80 7F 00 0C */ lwz r3, 0xc(r31) -.L_00018DE4: -/* 00018DE4 00025B74 7C 03 E8 00 */ cmpw r3, r29 -/* 00018DE8 00025B78 41 82 8E 28 */ beq .L_00011C10 -.L_00018DEC: -/* 00018DEC 00025B7C 81 23 00 00 */ lwz r9, 0x0(r3) -/* 00018DF0 00025B80 39 40 00 01 */ li r10, 0x1 -.L_00018DF4: -/* 00018DF4 00025B84 81 63 00 04 */ lwz r11, 0x4(r3) -/* 00018DF8 00025B88 91 2B 00 00 */ stw r9, 0x0(r11) -/* 00018DFC 00025B8C 91 69 00 04 */ stw r11, 0x4(r9) -/* 00018E00 00025B90 88 03 00 16 */ lbz r0, 0x16(r3) -/* 00018E04 00025B94 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00018E08 00025B98 40 82 8E 10 */ bne .L_00011C18 -/* 00018E0C 00025B9C 39 40 00 00 */ li r10, 0x0 -/* 00018E10 00025BA0 2C 0A 00 00 */ cmpwi r10, 0x0 -/* 00018E14 00025BA4 41 82 8D E0 */ beq .L_00011BF4 -/* 00018E18 00025BA8 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00018E1C 00025BAC 41 82 8D E0 */ beq .L_00011BFC -/* 00018E20 00025BB0 48 00 00 01 */ bl __builtin_delete -/* 00018E24 00025BB4 48 01 8D E0 */ b .text+0x18DE0 -/* 00018E28 00025BB8 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 00018E2C 00025BBC 7D 3E 4A 14 */ add r9, r30, r9 -/* 00018E30 00025BC0 3B C9 00 08 */ addi r30, r9, 0x8 -/* 00018E34 00025BC4 48 01 8D AC */ b .text+0x18DAC -/* 00018E38 00025BC8 3B C0 00 00 */ li r30, 0x0 -/* 00018E3C 00025BCC 3B A0 00 00 */ li r29, 0x0 -/* 00018E40 00025BD0 41 92 8E 74 */ beq cr4, .L_00011CB4 -/* 00018E44 00025BD4 41 91 8E 54 */ bgt cr4, .L_00011C98 -/* 00018E48 00025BD8 2C 1B 00 00 */ cmpwi r27, 0x0 -/* 00018E4C 00025BDC 41 82 8E 68 */ beq .L_00011CB4 -.L_00018E50: -/* 00018E50 00025BE0 48 01 8E 94 */ b .text+0x18E94 -/* 00018E54 00025BE4 2C 1B 00 02 */ cmpwi r27, 0x2 -/* 00018E58 00025BE8 41 82 8E 80 */ beq .L_00011CD8 -/* 00018E5C 00025BEC 2C 1B 00 03 */ cmpwi r27, 0x3 -/* 00018E60 00025BF0 41 82 8E 8C */ beq .L_00011CEC -/* 00018E64 00025BF4 48 01 8E 94 */ b .text+0x18E94 -.L_00018E68: -/* 00018E68 00025BF8 83 DC 00 14 */ lwz r30, 0x14(r28) -/* 00018E6C 00025BFC 83 BC 00 00 */ lwz r29, 0x0(r28) -/* 00018E70 00025C00 48 01 8E 94 */ b .text+0x18E94 -/* 00018E74 00025C04 83 DC 00 18 */ lwz r30, 0x18(r28) -/* 00018E78 00025C08 83 BC 00 04 */ lwz r29, 0x4(r28) -.L_00018E7C: -/* 00018E7C 00025C0C 48 01 8E 94 */ b .text+0x18E94 -/* 00018E80 00025C10 83 DC 00 1C */ lwz r30, 0x1c(r28) -/* 00018E84 00025C14 83 BC 00 08 */ lwz r29, 0x8(r28) -/* 00018E88 00025C18 48 01 8E 94 */ b .text+0x18E94 -/* 00018E8C 00025C1C 83 DC 00 20 */ lwz r30, 0x20(r28) -/* 00018E90 00025C20 83 BC 00 0C */ lwz r29, 0xc(r28) -/* 00018E94 00025C24 3B E0 00 00 */ li r31, 0x0 -/* 00018E98 00025C28 7C 1F F0 00 */ cmpw r31, r30 -/* 00018E9C 00025C2C 40 80 8E B8 */ bge .L_00011D54 -/* 00018EA0 00025C30 1C 7F 00 14 */ mulli r3, r31, 0x14 -/* 00018EA4 00025C34 3B FF 00 01 */ addi r31, r31, 0x1 -/* 00018EA8 00025C38 7C 7D 1A 14 */ add r3, r29, r3 -/* 00018EAC 00025C3C 48 01 7C 49 */ bl .text+0x17C48 -/* 00018EB0 00025C40 7C 1F F0 00 */ cmpw r31, r30 -/* 00018EB4 00025C44 41 80 8E A0 */ blt .L_00011D54 -/* 00018EB8 00025C48 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 00018EBC 00025C4C 81 81 00 08 */ lwz r12, 0x8(r1) -/* 00018EC0 00025C50 7C 08 03 A6 */ mtlr r0 -/* 00018EC4 00025C54 BB 21 00 0C */ lmw r25, 0xc(r1) -.L_00018EC8: -/* 00018EC8 00025C58 7D 80 81 20 */ mtcrf 8, r12 -/* 00018ECC 00025C5C 38 21 00 28 */ addi r1, r1, 0x28 -/* 00018ED0 00025C60 4E 80 00 20 */ blr -.endfn UnloadCameraSet__10ICEManagerP6bChunk - -# .text:0x18ED4 | size: 0xA4 -.fn LoadCameraShakes__10ICEManagerP6bChunk, global -/* 00018ED4 00025C64 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 00018ED8 00025C68 7C 08 02 A6 */ mflr r0 -/* 00018EDC 00025C6C BF 61 00 0C */ stmw r27, 0xc(r1) -/* 00018EE0 00025C70 90 01 00 24 */ stw r0, 0x24(r1) -/* 00018EE4 00025C74 7C 7E 1B 78 */ mr r30, r3 -/* 00018EE8 00025C78 7C 9D 23 78 */ mr r29, r4 -/* 00018EEC 00025C7C 38 7D 00 08 */ addi r3, r29, 0x8 -/* 00018EF0 00025C80 48 00 00 01 */ bl bEndianSwap32__FPv -/* 00018EF4 00025C84 83 FE 00 10 */ lwz r31, 0x10(r30) -/* 00018EF8 00025C88 2C 1F 00 00 */ cmpwi r31, 0x0 -/* 00018EFC 00025C8C 41 82 8F 64 */ beq .L_00011E60 -/* 00018F00 00025C90 83 7D 00 08 */ lwz r27, 0x8(r29) -/* 00018F04 00025C94 3B 80 00 00 */ li r28, 0x0 -/* 00018F08 00025C98 3B DD 00 0C */ addi r30, r29, 0xc -.L_00018F0C: -/* 00018F0C 00025C9C 7C 1C D8 00 */ cmpw r28, r27 -/* 00018F10 00025CA0 40 80 8F 64 */ bge .L_00011E74 -/* 00018F14 00025CA4 3B BF 00 04 */ addi r29, r31, 0x4 -/* 00018F18 00025CA8 7F C3 F3 78 */ mr r3, r30 -/* 00018F1C 00025CAC 3B 9C 00 01 */ addi r28, r28, 0x1 -/* 00018F20 00025CB0 48 01 81 95 */ bl .text+0x18194 -/* 00018F24 00025CB4 93 FE 00 08 */ stw r31, 0x8(r30) -/* 00018F28 00025CB8 7C 1C D8 00 */ cmpw r28, r27 -/* 00018F2C 00025CBC 81 3D 00 04 */ lwz r9, 0x4(r29) -/* 00018F30 00025CC0 93 C9 00 00 */ stw r30, 0x0(r9) -/* 00018F34 00025CC4 93 DD 00 04 */ stw r30, 0x4(r29) -/* 00018F38 00025CC8 91 3E 00 04 */ stw r9, 0x4(r30) -/* 00018F3C 00025CCC 93 BE 00 00 */ stw r29, 0x0(r30) -/* 00018F40 00025CD0 81 3F 00 00 */ lwz r9, 0x0(r31) -/* 00018F44 00025CD4 39 29 00 01 */ addi r9, r9, 0x1 -/* 00018F48 00025CD8 91 3F 00 00 */ stw r9, 0x0(r31) -.L_00018F4C: -/* 00018F4C 00025CDC A8 1E 00 0C */ lha r0, 0xc(r30) -/* 00018F50 00025CE0 20 00 00 78 */ subfic r0, r0, 0x78 -/* 00018F54 00025CE4 1C 00 00 18 */ mulli r0, r0, 0x18 -/* 00018F58 00025CE8 20 00 0B 60 */ subfic r0, r0, 0xb60 -/* 00018F5C 00025CEC 7F DE 02 14 */ add r30, r30, r0 -/* 00018F60 00025CF0 41 80 8F 18 */ blt .L_00011E78 -.L_00018F64: -/* 00018F64 00025CF4 80 01 00 24 */ lwz r0, 0x24(r1) -/* 00018F68 00025CF8 7C 08 03 A6 */ mtlr r0 -/* 00018F6C 00025CFC BB 61 00 0C */ lmw r27, 0xc(r1) -/* 00018F70 00025D00 38 21 00 20 */ addi r1, r1, 0x20 -/* 00018F74 00025D04 4E 80 00 20 */ blr -.endfn LoadCameraShakes__10ICEManagerP6bChunk - -# .text:0x18F78 | size: 0x84 -.fn UnloadCameraShakes__10ICEManagerP6bChunk, global -/* 00018F78 00025D08 94 21 FF F0 */ stwu r1, -0x10(r1) -.L_00018F7C: -/* 00018F7C 00025D0C 7C 08 02 A6 */ mflr r0 -/* 00018F80 00025D10 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 00018F84 00025D14 90 01 00 14 */ stw r0, 0x14(r1) -/* 00018F88 00025D18 83 E3 00 10 */ lwz r31, 0x10(r3) -/* 00018F8C 00025D1C 38 00 00 00 */ li r0, 0x0 -/* 00018F90 00025D20 90 1F 00 00 */ stw r0, 0x0(r31) -/* 00018F94 00025D24 3B DF 00 04 */ addi r30, r31, 0x4 -/* 00018F98 00025D28 80 7F 00 04 */ lwz r3, 0x4(r31) -/* 00018F9C 00025D2C 7C 03 F0 00 */ cmpw r3, r30 -/* 00018FA0 00025D30 41 82 8F E0 */ beq .L_00011F80 -/* 00018FA4 00025D34 81 63 00 00 */ lwz r11, 0x0(r3) -/* 00018FA8 00025D38 39 40 00 01 */ li r10, 0x1 -/* 00018FAC 00025D3C 81 23 00 04 */ lwz r9, 0x4(r3) -/* 00018FB0 00025D40 91 69 00 00 */ stw r11, 0x0(r9) -/* 00018FB4 00025D44 91 2B 00 04 */ stw r9, 0x4(r11) -/* 00018FB8 00025D48 88 03 00 0E */ lbz r0, 0xe(r3) -/* 00018FBC 00025D4C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00018FC0 00025D50 40 82 8F C8 */ bne .L_00011F88 -/* 00018FC4 00025D54 39 40 00 00 */ li r10, 0x0 -/* 00018FC8 00025D58 2C 0A 00 00 */ cmpwi r10, 0x0 -/* 00018FCC 00025D5C 41 82 8F 98 */ beq .L_00011F64 -/* 00018FD0 00025D60 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00018FD4 00025D64 41 82 8F 98 */ beq .L_00011F6C -/* 00018FD8 00025D68 48 00 00 01 */ bl __builtin_delete -/* 00018FDC 00025D6C 48 01 8F 98 */ b .text+0x18F98 -/* 00018FE0 00025D70 7F E3 FB 78 */ mr r3, r31 -/* 00018FE4 00025D74 48 01 7D 69 */ bl .text+0x17D68 -/* 00018FE8 00025D78 80 01 00 14 */ lwz r0, 0x14(r1) -/* 00018FEC 00025D7C 7C 08 03 A6 */ mtlr r0 -/* 00018FF0 00025D80 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 00018FF4 00025D84 38 21 00 10 */ addi r1, r1, 0x10 -/* 00018FF8 00025D88 4E 80 00 20 */ blr -.endfn UnloadCameraShakes__10ICEManagerP6bChunk - -# .text:0x18FFC | size: 0x194 -# ICEManager::Init -.fn Init__10ICEManager, global -/* 00018FFC 00025D8C 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 00019000 00025D90 7C 08 02 A6 */ mflr r0 -/* 00019004 00025D94 BF 81 00 08 */ stmw r28, 0x8(r1) -/* 00019008 00025D98 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0001900C 00025D9C 7C 7F 1B 78 */ mr r31, r3 -/* 00019010 00025DA0 38 60 14 08 */ li r3, 0x1408 -/* 00019014 00025DA4 48 00 00 01 */ bl __builtin_vec_new -/* 00019018 00025DA8 38 00 01 00 */ li r0, 0x100 -/* 0001901C 00025DAC 39 03 00 08 */ addi r8, r3, 0x8 -/* 00019020 00025DB0 90 03 00 00 */ stw r0, 0x0(r3) -/* 00019024 00025DB4 39 40 00 00 */ li r10, 0x0 -/* 00019028 00025DB8 38 E0 00 04 */ li r7, 0x4 -.L_0001902C: -/* 0001902C 00025DBC 7D 09 43 78 */ mr r9, r8 -/* 00019030 00025DC0 39 60 00 FF */ li r11, 0xff -/* 00019034 00025DC4 38 09 00 0C */ addi r0, r9, 0xc -/* 00019038 00025DC8 91 49 00 00 */ stw r10, 0x0(r9) -/* 0001903C 00025DCC 90 09 00 10 */ stw r0, 0x10(r9) -/* 00019040 00025DD0 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00019044 00025DD4 90 E9 00 04 */ stw r7, 0x4(r9) -/* 00019048 00025DD8 39 6B FF FF */ subi r11, r11, 0x1 -/* 0001904C 00025DDC 91 49 00 08 */ stw r10, 0x8(r9) -/* 00019050 00025DE0 90 09 00 0C */ stw r0, 0xc(r9) -/* 00019054 00025DE4 39 29 00 14 */ addi r9, r9, 0x14 -/* 00019058 00025DE8 40 82 90 34 */ bne .L_0001208C -/* 0001905C 00025DEC 91 1F 00 00 */ stw r8, 0x0(r31) -/* 00019060 00025DF0 38 60 00 D0 */ li r3, 0xd0 -/* 00019064 00025DF4 48 00 00 01 */ bl __builtin_vec_new -/* 00019068 00025DF8 3B DF 00 04 */ addi r30, r31, 0x4 -/* 0001906C 00025DFC 38 00 00 0A */ li r0, 0xa -/* 00019070 00025E00 39 03 00 08 */ addi r8, r3, 0x8 -.L_00019074: -/* 00019074 00025E04 90 03 00 00 */ stw r0, 0x0(r3) -/* 00019078 00025E08 39 40 00 00 */ li r10, 0x0 -/* 0001907C 00025E0C 38 E0 00 04 */ li r7, 0x4 -/* 00019080 00025E10 7D 09 43 78 */ mr r9, r8 -/* 00019084 00025E14 39 60 00 09 */ li r11, 0x9 -/* 00019088 00025E18 3B BF 00 08 */ addi r29, r31, 0x8 -/* 0001908C 00025E1C 3B 9F 00 0C */ addi r28, r31, 0xc -/* 00019090 00025E20 38 09 00 0C */ addi r0, r9, 0xc -/* 00019094 00025E24 91 49 00 00 */ stw r10, 0x0(r9) -/* 00019098 00025E28 90 09 00 10 */ stw r0, 0x10(r9) -/* 0001909C 00025E2C 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 000190A0 00025E30 90 E9 00 04 */ stw r7, 0x4(r9) -/* 000190A4 00025E34 39 6B FF FF */ subi r11, r11, 0x1 -/* 000190A8 00025E38 91 49 00 08 */ stw r10, 0x8(r9) -.L_000190AC: -/* 000190AC 00025E3C 90 09 00 0C */ stw r0, 0xc(r9) -/* 000190B0 00025E40 39 29 00 14 */ addi r9, r9, 0x14 -/* 000190B4 00025E44 40 82 90 90 */ bne .L_00012144 -.L_000190B8: -/* 000190B8 00025E48 91 1E 00 00 */ stw r8, 0x0(r30) -.L_000190BC: -/* 000190BC 00025E4C 38 60 03 F0 */ li r3, 0x3f0 -/* 000190C0 00025E50 48 00 00 01 */ bl __builtin_vec_new -/* 000190C4 00025E54 38 00 00 32 */ li r0, 0x32 -/* 000190C8 00025E58 39 03 00 08 */ addi r8, r3, 0x8 -/* 000190CC 00025E5C 90 03 00 00 */ stw r0, 0x0(r3) -/* 000190D0 00025E60 39 40 00 00 */ li r10, 0x0 -/* 000190D4 00025E64 38 E0 00 04 */ li r7, 0x4 -/* 000190D8 00025E68 7D 09 43 78 */ mr r9, r8 -.L_000190DC: -/* 000190DC 00025E6C 39 60 00 31 */ li r11, 0x31 -/* 000190E0 00025E70 38 09 00 0C */ addi r0, r9, 0xc -/* 000190E4 00025E74 91 49 00 00 */ stw r10, 0x0(r9) -/* 000190E8 00025E78 90 09 00 10 */ stw r0, 0x10(r9) -/* 000190EC 00025E7C 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 000190F0 00025E80 90 E9 00 04 */ stw r7, 0x4(r9) -/* 000190F4 00025E84 39 6B FF FF */ subi r11, r11, 0x1 -/* 000190F8 00025E88 91 49 00 08 */ stw r10, 0x8(r9) -/* 000190FC 00025E8C 90 09 00 0C */ stw r0, 0xc(r9) -/* 00019100 00025E90 39 29 00 14 */ addi r9, r9, 0x14 -/* 00019104 00025E94 40 82 90 E0 */ bne .L_000121E4 -/* 00019108 00025E98 91 1D 00 00 */ stw r8, 0x0(r29) -/* 0001910C 00025E9C 38 60 03 F0 */ li r3, 0x3f0 -.L_00019110: -/* 00019110 00025EA0 48 00 00 01 */ bl __builtin_vec_new -/* 00019114 00025EA4 38 00 00 32 */ li r0, 0x32 -/* 00019118 00025EA8 39 03 00 08 */ addi r8, r3, 0x8 -/* 0001911C 00025EAC 90 03 00 00 */ stw r0, 0x0(r3) -/* 00019120 00025EB0 39 40 00 00 */ li r10, 0x0 -/* 00019124 00025EB4 38 E0 00 04 */ li r7, 0x4 -/* 00019128 00025EB8 7D 09 43 78 */ mr r9, r8 -/* 0001912C 00025EBC 39 60 00 31 */ li r11, 0x31 -/* 00019130 00025EC0 38 09 00 0C */ addi r0, r9, 0xc -/* 00019134 00025EC4 91 49 00 00 */ stw r10, 0x0(r9) -/* 00019138 00025EC8 90 09 00 10 */ stw r0, 0x10(r9) -/* 0001913C 00025ECC 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00019140 00025ED0 90 E9 00 04 */ stw r7, 0x4(r9) -/* 00019144 00025ED4 39 6B FF FF */ subi r11, r11, 0x1 -/* 00019148 00025ED8 91 49 00 08 */ stw r10, 0x8(r9) -/* 0001914C 00025EDC 90 09 00 0C */ stw r0, 0xc(r9) -.L_00019150: -/* 00019150 00025EE0 39 29 00 14 */ addi r9, r9, 0x14 -/* 00019154 00025EE4 40 82 91 30 */ bne .L_00012284 -/* 00019158 00025EE8 91 1C 00 00 */ stw r8, 0x0(r28) -/* 0001915C 00025EEC 38 60 00 0C */ li r3, 0xc -/* 00019160 00025EF0 48 00 00 01 */ bl __builtin_new -/* 00019164 00025EF4 39 23 00 04 */ addi r9, r3, 0x4 -/* 00019168 00025EF8 38 00 00 00 */ li r0, 0x0 -/* 0001916C 00025EFC 90 03 00 00 */ stw r0, 0x0(r3) -/* 00019170 00025F00 91 23 00 04 */ stw r9, 0x4(r3) -/* 00019174 00025F04 90 7F 00 10 */ stw r3, 0x10(r31) -/* 00019178 00025F08 91 29 00 04 */ stw r9, 0x4(r9) -/* 0001917C 00025F0C 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 00019180 00025F10 7C 08 03 A6 */ mtlr r0 -/* 00019184 00025F14 BB 81 00 08 */ lmw r28, 0x8(r1) -/* 00019188 00025F18 38 21 00 18 */ addi r1, r1, 0x18 -/* 0001918C 00025F1C 4E 80 00 20 */ blr -.endfn Init__10ICEManager - -# .text:0x19190 | size: 0x28C -# ICEManager::Resolve -.fn Resolve__10ICEManager, global -/* 00019190 00025F20 94 21 FF C8 */ stwu r1, -0x38(r1) -/* 00019194 00025F24 7C 08 02 A6 */ mflr r0 -/* 00019198 00025F28 BF 01 00 18 */ stmw r24, 0x18(r1) -/* 0001919C 00025F2C 90 01 00 3C */ stw r0, 0x3c(r1) -/* 000191A0 00025F30 7C 7F 1B 78 */ mr r31, r3 -.L_000191A4: -/* 000191A4 00025F34 3B A0 00 00 */ li r29, 0x0 -/* 000191A8 00025F38 48 01 A0 25 */ bl .text+0x1A024 -/* 000191AC 00025F3C 7C 7C 1B 78 */ mr r28, r3 -/* 000191B0 00025F40 7C 1D E0 40 */ cmplw r29, r28 -/* 000191B4 00025F44 40 80 92 7C */ bge .L_00012430 -/* 000191B8 00025F48 3B 61 00 08 */ addi r27, r1, 0x8 -/* 000191BC 00025F4C 3F 00 00 00 */ lis r24, .rodata+0xE1C@ha -.L_000191C0: -/* 000191C0 00025F50 3F 20 00 00 */ lis r25, .rodata+0xE20@ha -/* 000191C4 00025F54 3F 40 00 00 */ lis r26, .rodata+0xE28@ha -/* 000191C8 00025F58 7F A3 EB 78 */ mr r3, r29 -/* 000191CC 00025F5C 48 01 A0 41 */ bl .text+0x1A040 -.L_000191D0: -/* 000191D0 00025F60 3B BD 00 01 */ addi r29, r29, 0x1 -/* 000191D4 00025F64 7C 7E 1B 78 */ mr r30, r3 -/* 000191D8 00025F68 38 81 00 08 */ addi r4, r1, 0x8 -.L_000191DC: -/* 000191DC 00025F6C 48 01 A0 79 */ bl .text+0x1A078 -/* 000191E0 00025F70 38 98 0E 1C */ addi r4, r24, .rodata+0xE1C@l -/* 000191E4 00025F74 38 A0 00 03 */ li r5, 0x3 -/* 000191E8 00025F78 7F 63 DB 78 */ mr r3, r27 -/* 000191EC 00025F7C 48 00 00 01 */ bl bStrNICmp__FPCcT0i -/* 000191F0 00025F80 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000191F4 00025F84 38 99 0E 20 */ addi r4, r25, .rodata+0xE20@l -/* 000191F8 00025F88 38 A0 00 06 */ li r5, 0x6 -/* 000191FC 00025F8C 7F 63 DB 78 */ mr r3, r27 -/* 00019200 00025F90 41 82 92 74 */ beq .L_00012474 -/* 00019204 00025F94 48 00 00 01 */ bl bStrNICmp__FPCcT0i -/* 00019208 00025F98 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0001920C 00025F9C 38 9A 0E 28 */ addi r4, r26, .rodata+0xE28@l -/* 00019210 00025FA0 7F 63 DB 78 */ mr r3, r27 -/* 00019214 00025FA4 38 A0 00 04 */ li r5, 0x4 -/* 00019218 00025FA8 41 82 92 74 */ beq .L_0001248C -.L_0001921C: -/* 0001921C 00025FAC 48 00 00 01 */ bl bStrNICmp__FPCcT0i -/* 00019220 00025FB0 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00019224 00025FB4 7F C4 F3 78 */ mr r4, r30 -/* 00019228 00025FB8 7F E3 FB 78 */ mr r3, r31 -/* 0001922C 00025FBC 41 82 92 74 */ beq .L_000124A0 -/* 00019230 00025FC0 48 01 83 19 */ bl .text+0x18318 -/* 00019234 00025FC4 7C 63 1B 79 */ mr. r3, r3 -/* 00019238 00025FC8 40 82 92 74 */ bne .L_000124AC -/* 0001923C 00025FCC 80 1F 00 14 */ lwz r0, 0x14(r31) -/* 00019240 00025FD0 1D 60 00 14 */ mulli r11, r0, 0x14 -/* 00019244 00025FD4 2C 00 00 FF */ cmpwi r0, 0xff -/* 00019248 00025FD8 41 81 92 74 */ bgt .L_000124BC -/* 0001924C 00025FDC 81 3F 00 00 */ lwz r9, 0x0(r31) -/* 00019250 00025FE0 7D 2B 4A 14 */ add r9, r11, r9 -/* 00019254 00025FE4 90 69 00 04 */ stw r3, 0x4(r9) -/* 00019258 00025FE8 81 7F 00 14 */ lwz r11, 0x14(r31) -/* 0001925C 00025FEC 81 5F 00 00 */ lwz r10, 0x0(r31) -/* 00019260 00025FF0 1D 6B 00 14 */ mulli r11, r11, 0x14 -/* 00019264 00025FF4 7F CB 51 2E */ stwx r30, r11, r10 -/* 00019268 00025FF8 81 3F 00 14 */ lwz r9, 0x14(r31) -/* 0001926C 00025FFC 39 29 00 01 */ addi r9, r9, 0x1 -/* 00019270 00026000 91 3F 00 14 */ stw r9, 0x14(r31) -/* 00019274 00026004 7C 1D E0 40 */ cmplw r29, r28 -/* 00019278 00026008 41 80 91 C8 */ blt .L_00012440 -/* 0001927C 0002600C 3B A0 00 00 */ li r29, 0x0 -/* 00019280 00026010 7C 1D E0 40 */ cmplw r29, r28 -/* 00019284 00026014 40 80 93 14 */ bge .L_00012598 -/* 00019288 00026018 3F 40 00 00 */ lis r26, .rodata+0xE1C@ha -/* 0001928C 0002601C 3B 60 00 01 */ li r27, 0x1 -/* 00019290 00026020 7F A3 EB 78 */ mr r3, r29 -/* 00019294 00026024 48 01 A0 41 */ bl .text+0x1A040 -/* 00019298 00026028 3B BD 00 01 */ addi r29, r29, 0x1 -/* 0001929C 0002602C 7C 7E 1B 78 */ mr r30, r3 -/* 000192A0 00026030 38 81 00 08 */ addi r4, r1, 0x8 -/* 000192A4 00026034 48 01 A0 79 */ bl .text+0x1A078 -/* 000192A8 00026038 38 9A 0E 1C */ addi r4, r26, .rodata+0xE1C@l -/* 000192AC 0002603C 38 61 00 08 */ addi r3, r1, 0x8 -/* 000192B0 00026040 38 A0 00 03 */ li r5, 0x3 -/* 000192B4 00026044 48 00 00 01 */ bl bStrNICmp__FPCcT0i -/* 000192B8 00026048 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000192BC 0002604C 7F C4 F3 78 */ mr r4, r30 -/* 000192C0 00026050 7F E3 FB 78 */ mr r3, r31 -/* 000192C4 00026054 40 82 93 0C */ bne .L_000125D0 -.L_000192C8: -/* 000192C8 00026058 48 01 83 59 */ bl .text+0x18358 -/* 000192CC 0002605C 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000192D0 00026060 40 82 93 0C */ bne .L_000125DC -/* 000192D4 00026064 80 1F 00 18 */ lwz r0, 0x18(r31) -/* 000192D8 00026068 1D 60 00 14 */ mulli r11, r0, 0x14 -/* 000192DC 0002606C 2C 00 00 09 */ cmpwi r0, 0x9 -/* 000192E0 00026070 41 81 93 0C */ bgt .L_000125EC -/* 000192E4 00026074 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 000192E8 00026078 7D 2B 4A 14 */ add r9, r11, r9 -/* 000192EC 0002607C 93 69 00 04 */ stw r27, 0x4(r9) -/* 000192F0 00026080 81 7F 00 18 */ lwz r11, 0x18(r31) -/* 000192F4 00026084 81 5F 00 04 */ lwz r10, 0x4(r31) -/* 000192F8 00026088 1D 6B 00 14 */ mulli r11, r11, 0x14 -/* 000192FC 0002608C 7F CB 51 2E */ stwx r30, r11, r10 -/* 00019300 00026090 81 3F 00 18 */ lwz r9, 0x18(r31) -/* 00019304 00026094 39 29 00 01 */ addi r9, r9, 0x1 -/* 00019308 00026098 91 3F 00 18 */ stw r9, 0x18(r31) -/* 0001930C 0002609C 7C 1D E0 40 */ cmplw r29, r28 -/* 00019310 000260A0 41 80 92 90 */ blt .L_000125A0 -/* 00019314 000260A4 48 01 71 F5 */ bl .text+0x171F4 -/* 00019318 000260A8 3B A0 00 00 */ li r29, 0x0 -/* 0001931C 000260AC 7C 7C 1B 78 */ mr r28, r3 -/* 00019320 000260B0 7C 1D E0 00 */ cmpw r29, r28 -/* 00019324 000260B4 40 80 93 90 */ bge .L_000126B4 -/* 00019328 000260B8 3B 60 00 02 */ li r27, 0x2 -/* 0001932C 000260BC 7F A3 EB 78 */ mr r3, r29 -/* 00019330 000260C0 48 01 71 FD */ bl .text+0x171FC -/* 00019334 000260C4 3B BD 00 01 */ addi r29, r29, 0x1 -/* 00019338 000260C8 7C 7E 1B 78 */ mr r30, r3 -/* 0001933C 000260CC 7F E3 FB 78 */ mr r3, r31 -/* 00019340 000260D0 7F C4 F3 78 */ mr r4, r30 -/* 00019344 000260D4 48 01 83 99 */ bl .text+0x18398 -/* 00019348 000260D8 7F 9D E0 00 */ cmpw cr7, r29, r28 -/* 0001934C 000260DC 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00019350 000260E0 40 82 93 8C */ bne .L_000126DC -/* 00019354 000260E4 80 1F 00 1C */ lwz r0, 0x1c(r31) -/* 00019358 000260E8 1D 60 00 14 */ mulli r11, r0, 0x14 -/* 0001935C 000260EC 2C 00 00 31 */ cmpwi r0, 0x31 -/* 00019360 000260F0 41 81 93 8C */ bgt .L_000126EC -/* 00019364 000260F4 81 3F 00 08 */ lwz r9, 0x8(r31) -/* 00019368 000260F8 7D 2B 4A 14 */ add r9, r11, r9 -/* 0001936C 000260FC 93 69 00 04 */ stw r27, 0x4(r9) -/* 00019370 00026100 81 7F 00 1C */ lwz r11, 0x1c(r31) -/* 00019374 00026104 81 5F 00 08 */ lwz r10, 0x8(r31) -/* 00019378 00026108 1D 6B 00 14 */ mulli r11, r11, 0x14 -/* 0001937C 0002610C 7F CB 51 2E */ stwx r30, r11, r10 -/* 00019380 00026110 81 3F 00 1C */ lwz r9, 0x1c(r31) -/* 00019384 00026114 39 29 00 01 */ addi r9, r9, 0x1 -.L_00019388: -/* 00019388 00026118 91 3F 00 1C */ stw r9, 0x1c(r31) -/* 0001938C 0002611C 41 9C 93 2C */ blt cr7, .L_000126B8 -/* 00019390 00026120 3D 20 00 00 */ lis r9, GenericCategoryNames@ha -/* 00019394 00026124 3B A0 00 00 */ li r29, 0x0 -/* 00019398 00026128 3B 69 00 00 */ addi r27, r9, GenericCategoryNames@l -/* 0001939C 0002612C 3B 80 00 03 */ li r28, 0x3 -/* 000193A0 00026130 57 A0 10 3A */ slwi r0, r29, 2 -.L_000193A4: -/* 000193A4 00026134 7C 7B 00 2E */ lwzx r3, r27, r0 -/* 000193A8 00026138 3B BD 00 01 */ addi r29, r29, 0x1 -/* 000193AC 0002613C 48 00 00 01 */ bl bStringHash__FPCc -/* 000193B0 00026140 7C 7E 1B 78 */ mr r30, r3 -/* 000193B4 00026144 7F E3 FB 78 */ mr r3, r31 -/* 000193B8 00026148 7F C4 F3 78 */ mr r4, r30 -/* 000193BC 0002614C 48 01 83 D9 */ bl .text+0x183D8 -/* 000193C0 00026150 2F 9D 00 01 */ cmpwi cr7, r29, 0x1 -/* 000193C4 00026154 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000193C8 00026158 40 82 94 04 */ bne .L_000127CC -/* 000193CC 0002615C 80 1F 00 20 */ lwz r0, 0x20(r31) -/* 000193D0 00026160 1D 60 00 14 */ mulli r11, r0, 0x14 -/* 000193D4 00026164 2C 00 00 31 */ cmpwi r0, 0x31 -/* 000193D8 00026168 41 81 94 04 */ bgt .L_000127DC -/* 000193DC 0002616C 81 3F 00 0C */ lwz r9, 0xc(r31) -.L_000193E0: -/* 000193E0 00026170 7D 2B 4A 14 */ add r9, r11, r9 -/* 000193E4 00026174 93 89 00 04 */ stw r28, 0x4(r9) -/* 000193E8 00026178 81 7F 00 20 */ lwz r11, 0x20(r31) -/* 000193EC 0002617C 81 5F 00 0C */ lwz r10, 0xc(r31) -/* 000193F0 00026180 1D 6B 00 14 */ mulli r11, r11, 0x14 -/* 000193F4 00026184 7F CB 51 2E */ stwx r30, r11, r10 -/* 000193F8 00026188 81 3F 00 20 */ lwz r9, 0x20(r31) -/* 000193FC 0002618C 39 29 00 01 */ addi r9, r9, 0x1 -/* 00019400 00026190 91 3F 00 20 */ stw r9, 0x20(r31) -/* 00019404 00026194 40 9D 93 A0 */ ble cr7, .L_000127A4 -/* 00019408 00026198 80 01 00 3C */ lwz r0, 0x3c(r1) -/* 0001940C 0002619C 7C 08 03 A6 */ mtlr r0 -/* 00019410 000261A0 BB 01 00 18 */ lmw r24, 0x18(r1) -/* 00019414 000261A4 38 21 00 38 */ addi r1, r1, 0x38 -/* 00019418 000261A8 4E 80 00 20 */ blr -.endfn Resolve__10ICEManager - -# .text:0x1941C | size: 0x12C -# ICEManager::ChooseCameraPlaybackTrack -.fn ChooseCameraPlaybackTrack__10ICEManager, global -/* 0001941C 000261AC 94 21 FF C0 */ stwu r1, -0x40(r1) -/* 00019420 000261B0 7C 08 02 A6 */ mflr r0 -/* 00019424 000261B4 BF 41 00 28 */ stmw r26, 0x28(r1) -/* 00019428 000261B8 90 01 00 44 */ stw r0, 0x44(r1) -/* 0001942C 000261BC 38 00 00 00 */ li r0, 0x0 -/* 00019430 000261C0 7C 7F 1B 78 */ mr r31, r3 -/* 00019434 000261C4 90 1F 00 24 */ stw r0, 0x24(r31) -/* 00019438 000261C8 3F 40 00 00 */ lis r26, bUseOldDutch@ha -/* 0001943C 000261CC 90 1A 00 00 */ stw r0, bUseOldDutch@l(r26) -/* 00019440 000261D0 48 01 9F D9 */ bl .text+0x19FD8 -/* 00019444 000261D4 7C 7D 1B 79 */ mr. r29, r3 -/* 00019448 000261D8 41 82 94 E0 */ beq .L_00012928 -/* 0001944C 000261DC 81 3D 00 00 */ lwz r9, 0x0(r29) -/* 00019450 000261E0 A8 69 00 08 */ lha r3, 0x8(r9) -/* 00019454 000261E4 80 09 00 0C */ lwz r0, 0xc(r9) -/* 00019458 000261E8 7C 7D 1A 14 */ add r3, r29, r3 -/* 0001945C 000261EC 7C 08 03 A6 */ mtlr r0 -/* 00019460 000261F0 4E 80 00 21 */ blrl -/* 00019464 000261F4 7C 7B 1B 78 */ mr r27, r3 -/* 00019468 000261F8 7F E3 FB 78 */ mr r3, r31 -/* 0001946C 000261FC 7F 64 DB 78 */ mr r4, r27 -/* 00019470 00026200 48 01 83 19 */ bl .text+0x18318 -/* 00019474 00026204 7C 7C 1B 79 */ mr. r28, r3 -/* 00019478 00026208 41 82 95 20 */ beq .L_00012998 -/* 0001947C 0002620C 81 3D 00 00 */ lwz r9, 0x0(r29) -/* 00019480 00026210 3F C0 00 00 */ lis r30, .rodata+0xE30@ha -/* 00019484 00026214 3B DE 0E 30 */ addi r30, r30, .rodata+0xE30@l -/* 00019488 00026218 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0001948C 0002621C 80 09 00 14 */ lwz r0, 0x14(r9) -/* 00019490 00026220 7C 7D 1A 14 */ add r3, r29, r3 -/* 00019494 00026224 7C 08 03 A6 */ mtlr r0 -/* 00019498 00026228 4E 80 00 21 */ blrl -/* 0001949C 0002622C 7C 65 1B 78 */ mr r5, r3 -/* 000194A0 00026230 7F C4 F3 78 */ mr r4, r30 -/* 000194A4 00026234 38 61 00 08 */ addi r3, r1, 0x8 -/* 000194A8 00026238 4C C6 31 82 */ crclr cr1eq -/* 000194AC 0002623C 48 00 00 01 */ bl bSPrintf__FPcPCce -/* 000194B0 00026240 7F 83 E3 78 */ mr r3, r28 -.L_000194B4: -/* 000194B4 00026244 38 81 00 08 */ addi r4, r1, 0x8 -/* 000194B8 00026248 48 01 7D 09 */ bl .text+0x17D08 -/* 000194BC 0002624C 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000194C0 00026250 90 7F 00 24 */ stw r3, 0x24(r31) -/* 000194C4 00026254 40 82 94 D4 */ bne .L_00012998 -/* 000194C8 00026258 7F 63 DB 78 */ mr r3, r27 -/* 000194CC 0002625C 38 81 00 18 */ addi r4, r1, 0x18 -/* 000194D0 00026260 48 01 A0 79 */ bl .text+0x1A078 -/* 000194D4 00026264 38 00 00 01 */ li r0, 0x1 -/* 000194D8 00026268 90 1A 00 00 */ stw r0, bUseOldDutch@l(r26) -/* 000194DC 0002626C 48 01 95 20 */ b .text+0x19520 -/* 000194E0 00026270 7F E3 FB 78 */ mr r3, r31 -/* 000194E4 00026274 48 01 86 15 */ bl .text+0x18614 -/* 000194E8 00026278 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000194EC 0002627C 90 7F 00 24 */ stw r3, 0x24(r31) -/* 000194F0 00026280 40 82 95 20 */ bne .L_00012A10 -/* 000194F4 00026284 48 01 5F FD */ bl .text+0x15FFC -/* 000194F8 00026288 80 9F 00 08 */ lwz r4, 0x8(r31) -.L_000194FC: -/* 000194FC 0002628C 80 BF 00 1C */ lwz r5, 0x1c(r31) -/* 00019500 00026290 48 01 77 1D */ bl .text+0x1771C -/* 00019504 00026294 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00019508 00026298 90 7F 00 24 */ stw r3, 0x24(r31) -/* 0001950C 0002629C 41 82 95 20 */ beq .L_00012A2C -/* 00019510 000262A0 7F E3 FB 78 */ mr r3, r31 -/* 00019514 000262A4 48 01 82 B1 */ bl .text+0x182B0 -/* 00019518 000262A8 81 3F 00 24 */ lwz r9, 0x24(r31) -/* 0001951C 000262AC D0 29 00 0C */ stfs f1, 0xc(r9) -/* 00019520 000262B0 80 1F 00 24 */ lwz r0, 0x24(r31) -/* 00019524 000262B4 38 60 00 01 */ li r3, 0x1 -/* 00019528 000262B8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0001952C 000262BC 40 82 95 34 */ bne .L_00012A60 -/* 00019530 000262C0 38 60 00 00 */ li r3, 0x0 -/* 00019534 000262C4 80 01 00 44 */ lwz r0, 0x44(r1) -/* 00019538 000262C8 7C 08 03 A6 */ mtlr r0 -/* 0001953C 000262CC BB 41 00 28 */ lmw r26, 0x28(r1) -/* 00019540 000262D0 38 21 00 40 */ addi r1, r1, 0x40 -/* 00019544 000262D4 4E 80 00 20 */ blr -.endfn ChooseCameraPlaybackTrack__10ICEManager - -# .text:0x19548 | size: 0x2B0 -.fn ChooseGoodSceneCameraTrackIndex__10ICEManagerUiPCQ23ICE7Matrix4, global -/* 00019548 000262D8 94 21 FF 40 */ stwu r1, -0xc0(r1) -/* 0001954C 000262DC 7C 08 02 A6 */ mflr r0 -/* 00019550 000262E0 F3 E1 00 B8 */ psq_st f31, 0xb8(r1), 0, qr0 -/* 00019554 000262E4 BE 01 00 78 */ stmw r16, 0x78(r1) -/* 00019558 000262E8 90 01 00 C4 */ stw r0, 0xc4(r1) -/* 0001955C 000262EC 7C 74 1B 78 */ mr r20, r3 -/* 00019560 000262F0 7C 91 23 78 */ mr r17, r4 -/* 00019564 000262F4 38 61 00 08 */ addi r3, r1, 0x8 -/* 00019568 000262F8 7C B6 2B 78 */ mr r22, r5 -/* 0001956C 000262FC 7C 72 1B 78 */ mr r18, r3 -/* 00019570 00026300 3A 60 00 00 */ li r19, 0x0 -/* 00019574 00026304 48 01 9E 39 */ bl .text+0x19E38 -/* 00019578 00026308 3A A0 00 00 */ li r21, 0x0 -/* 0001957C 0002630C 80 14 00 14 */ lwz r0, 0x14(r20) -/* 00019580 00026310 7C 13 00 00 */ cmpw r19, r0 -/* 00019584 00026314 40 80 97 DC */ bge .L_00012D60 -/* 00019588 00026318 3E 00 00 00 */ lis r16, .rodata+0xE3C@ha -/* 0001958C 0002631C 1D 75 00 14 */ mulli r11, r21, 0x14 -/* 00019590 00026320 81 34 00 00 */ lwz r9, 0x0(r20) -/* 00019594 00026324 7C 0B 48 2E */ lwzx r0, r11, r9 -/* 00019598 00026328 7E EB 4A 14 */ add r23, r11, r9 -/* 0001959C 0002632C 7C 11 00 00 */ cmpw r17, r0 -/* 000195A0 00026330 40 82 97 CC */ bne .L_00012D6C -/* 000195A4 00026334 83 37 00 08 */ lwz r25, 0x8(r23) -/* 000195A8 00026338 2C 19 00 01 */ cmpwi r25, 0x1 -/* 000195AC 0002633C 40 81 97 DC */ ble .L_00012D88 -/* 000195B0 00026340 3B 40 00 00 */ li r26, 0x0 -/* 000195B4 00026344 C3 F0 0E 3C */ lfs f31, .rodata+0xE3C@l(r16) -/* 000195B8 00026348 7C 1A C8 00 */ cmpw r26, r25 -/* 000195BC 0002634C 40 80 97 CC */ bge .L_00012D88 -/* 000195C0 00026350 3B 01 00 68 */ addi r24, r1, 0x68 -/* 000195C4 00026354 7E E3 BB 78 */ mr r3, r23 -/* 000195C8 00026358 7F 44 D3 78 */ mr r4, r26 -/* 000195CC 0002635C 48 01 7C CD */ bl .text+0x17CCC -/* 000195D0 00026360 A8 03 00 14 */ lha r0, 0x14(r3) -/* 000195D4 00026364 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000195D8 00026368 40 81 97 C0 */ ble .L_00012D98 -/* 000195DC 0002636C 35 20 FF FF */ subic. r9, r0, 0x1 -/* 000195E0 00026370 39 60 00 00 */ li r11, 0x0 -.L_000195E4: -/* 000195E4 00026374 38 00 00 00 */ li r0, 0x0 -/* 000195E8 00026378 40 80 95 F0 */ bge .L_00012BD8 -/* 000195EC 0002637C 7D 20 4B 78 */ mr r0, r9 -/* 000195F0 00026380 7C 0B 00 00 */ cmpw r11, r0 -/* 000195F4 00026384 3B 80 00 00 */ li r28, 0x0 -/* 000195F8 00026388 40 82 96 00 */ bne .L_00012BF8 -/* 000195FC 0002638C 3B 83 00 28 */ addi r28, r3, 0x28 -/* 00019600 00026390 88 1C 00 01 */ lbz r0, 0x1(r28) -/* 00019604 00026394 3B A0 00 00 */ li r29, 0x0 -/* 00019608 00026398 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0001960C 0002639C 41 82 96 14 */ beq .L_00012C20 -/* 00019610 000263A0 3B A0 00 01 */ li r29, 0x1 -/* 00019614 000263A4 1F DD 00 84 */ mulli r30, r29, 0x84 -/* 00019618 000263A8 3B E1 00 48 */ addi r31, r1, 0x48 -/* 0001961C 000263AC 7F A4 EB 78 */ mr r4, r29 -/* 00019620 000263B0 7F E5 FB 78 */ mr r5, r31 -/* 00019624 000263B4 7F DB F3 78 */ mr r27, r30 -/* 00019628 000263B8 7F DC F2 14 */ add r30, r28, r30 -/* 0001962C 000263BC 7F C3 F3 78 */ mr r3, r30 -/* 00019630 000263C0 48 01 35 FD */ bl .text+0x135FC -/* 00019634 000263C4 88 1E 00 04 */ lbz r0, 0x4(r30) -/* 00019638 000263C8 2C 00 00 02 */ cmpwi r0, 0x2 -/* 0001963C 000263CC 41 82 96 5C */ beq .L_00012C98 -/* 00019640 000263D0 41 81 96 50 */ bgt .L_00012C90 -/* 00019644 000263D4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 00019648 000263D8 41 82 96 90 */ beq .L_00012CD8 -/* 0001964C 000263DC 48 01 96 B4 */ b .text+0x196B4 -/* 00019650 000263E0 2C 00 00 03 */ cmpwi r0, 0x3 -/* 00019654 000263E4 41 82 96 A4 */ beq .L_00012CF8 -/* 00019658 000263E8 48 01 96 B4 */ b .text+0x196B4 -/* 0001965C 000263EC C0 01 00 48 */ lfs f0, 0x48(r1) -/* 00019660 000263F0 C1 A1 00 4C */ lfs f13, 0x4c(r1) -/* 00019664 000263F4 C1 81 00 50 */ lfs f12, 0x50(r1) -/* 00019668 000263F8 C1 61 00 38 */ lfs f11, 0x38(r1) -/* 0001966C 000263FC C1 41 00 3C */ lfs f10, 0x3c(r1) -/* 00019670 00026400 C1 21 00 40 */ lfs f9, 0x40(r1) -/* 00019674 00026404 EC 00 58 2A */ fadds f0, f0, f11 -/* 00019678 00026408 ED AD 50 2A */ fadds f13, f13, f10 -/* 0001967C 0002640C D0 01 00 48 */ stfs f0, 0x48(r1) -/* 00019680 00026410 ED 8C 48 2A */ fadds f12, f12, f9 -/* 00019684 00026414 D1 A1 00 4C */ stfs f13, 0x4c(r1) -/* 00019688 00026418 D1 81 00 50 */ stfs f12, 0x50(r1) -/* 0001968C 0002641C 48 01 96 B4 */ b .text+0x196B4 -/* 00019690 00026420 7F E3 FB 78 */ mr r3, r31 -/* 00019694 00026424 38 81 00 08 */ addi r4, r1, 0x8 -/* 00019698 00026428 7C 65 1B 78 */ mr r5, r3 -/* 0001969C 0002642C 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 -/* 000196A0 00026430 48 01 96 B4 */ b .text+0x196B4 -/* 000196A4 00026434 7F E3 FB 78 */ mr r3, r31 -.L_000196A8: -/* 000196A8 00026438 7E C4 B3 78 */ mr r4, r22 -/* 000196AC 0002643C 7C 65 1B 78 */ mr r5, r3 -/* 000196B0 00026440 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 -/* 000196B4 00026444 7F DC DA 14 */ add r30, r28, r27 -/* 000196B8 00026448 3B E1 00 58 */ addi r31, r1, 0x58 -/* 000196BC 0002644C 7F C3 F3 78 */ mr r3, r30 -/* 000196C0 00026450 7F A4 EB 78 */ mr r4, r29 -/* 000196C4 00026454 7F E5 FB 78 */ mr r5, r31 -/* 000196C8 00026458 48 01 36 75 */ bl .text+0x13674 -/* 000196CC 0002645C 8B DE 00 05 */ lbz r30, 0x5(r30) -/* 000196D0 00026460 2C 1E 00 02 */ cmpwi r30, 0x2 -.L_000196D4: -/* 000196D4 00026464 41 82 96 F4 */ beq .L_00012DC8 -/* 000196D8 00026468 41 81 96 E8 */ bgt .L_00012DC0 -/* 000196DC 0002646C 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 000196E0 00026470 41 82 97 28 */ beq .L_00012E08 -/* 000196E4 00026474 48 01 97 4C */ b .text+0x1974C -/* 000196E8 00026478 2C 1E 00 03 */ cmpwi r30, 0x3 -/* 000196EC 0002647C 41 82 97 3C */ beq .L_00012E28 -/* 000196F0 00026480 48 01 97 4C */ b .text+0x1974C -/* 000196F4 00026484 C0 01 00 58 */ lfs f0, 0x58(r1) -/* 000196F8 00026488 C1 A1 00 5C */ lfs f13, 0x5c(r1) -/* 000196FC 0002648C C1 81 00 60 */ lfs f12, 0x60(r1) -/* 00019700 00026490 C1 61 00 38 */ lfs f11, 0x38(r1) -/* 00019704 00026494 C1 41 00 3C */ lfs f10, 0x3c(r1) -/* 00019708 00026498 C1 21 00 40 */ lfs f9, 0x40(r1) -/* 0001970C 0002649C EC 00 58 2A */ fadds f0, f0, f11 -/* 00019710 000264A0 ED AD 50 2A */ fadds f13, f13, f10 -/* 00019714 000264A4 D0 01 00 58 */ stfs f0, 0x58(r1) -/* 00019718 000264A8 ED 8C 48 2A */ fadds f12, f12, f9 -/* 0001971C 000264AC D1 A1 00 5C */ stfs f13, 0x5c(r1) -.L_00019720: -/* 00019720 000264B0 D1 81 00 60 */ stfs f12, 0x60(r1) -/* 00019724 000264B4 48 01 97 4C */ b .text+0x1974C -/* 00019728 000264B8 7F E3 FB 78 */ mr r3, r31 -.L_0001972C: -/* 0001972C 000264BC 38 81 00 08 */ addi r4, r1, 0x8 -/* 00019730 000264C0 7C 65 1B 78 */ mr r5, r3 -/* 00019734 000264C4 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 -/* 00019738 000264C8 48 01 97 4C */ b .text+0x1974C -/* 0001973C 000264CC 7F E3 FB 78 */ mr r3, r31 -/* 00019740 000264D0 7E C4 B3 78 */ mr r4, r22 -/* 00019744 000264D4 7C 65 1B 78 */ mr r5, r3 -/* 00019748 000264D8 48 00 00 01 */ bl eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 -/* 0001974C 000264DC C1 A1 00 58 */ lfs f13, 0x58(r1) -/* 00019750 000264E0 7F 03 C3 78 */ mr r3, r24 -.L_00019754: -/* 00019754 000264E4 C1 81 00 5C */ lfs f12, 0x5c(r1) -/* 00019758 000264E8 7F 04 C3 78 */ mr r4, r24 -/* 0001975C 000264EC C1 61 00 48 */ lfs f11, 0x48(r1) -/* 00019760 000264F0 C1 41 00 4C */ lfs f10, 0x4c(r1) -.L_00019764: -/* 00019764 000264F4 C0 01 00 50 */ lfs f0, 0x50(r1) -/* 00019768 000264F8 ED 6B 68 28 */ fsubs f11, f11, f13 -/* 0001976C 000264FC C1 21 00 60 */ lfs f9, 0x60(r1) -/* 00019770 00026500 ED 4A 60 28 */ fsubs f10, f10, f12 -/* 00019774 00026504 D1 61 00 68 */ stfs f11, 0x68(r1) -/* 00019778 00026508 EC 00 48 28 */ fsubs f0, f0, f9 -/* 0001977C 0002650C D1 41 00 6C */ stfs f10, 0x6c(r1) -/* 00019780 00026510 D0 01 00 70 */ stfs f0, 0x70(r1) -/* 00019784 00026514 48 00 00 01 */ bl bNormalize__FP8bVector3PC8bVector3 -/* 00019788 00026518 C1 A1 00 0C */ lfs f13, 0xc(r1) -/* 0001978C 0002651C C1 81 00 6C */ lfs f12, 0x6c(r1) -/* 00019790 00026520 C0 01 00 68 */ lfs f0, 0x68(r1) -/* 00019794 00026524 ED 8C 03 72 */ fmuls f12, f12, f13 -/* 00019798 00026528 C1 41 00 08 */ lfs f10, 0x8(r1) -/* 0001979C 0002652C C1 61 00 70 */ lfs f11, 0x70(r1) -/* 000197A0 00026530 C1 B2 00 08 */ lfs f13, 0x8(r18) -/* 000197A4 00026534 EC 00 62 BA */ fmadds f0, f0, f10, f12 -/* 000197A8 00026538 EC 0B 03 7A */ fmadds f0, f11, f13, f0 -/* 000197AC 0002653C FC 1F 00 00 */ fcmpu cr0, f31, f0 -/* 000197B0 00026540 4C 62 0B 82 */ cror un, eq, gt -/* 000197B4 00026544 41 83 97 C0 */ bso .L_00012F74 -/* 000197B8 00026548 FF E0 00 90 */ fmr f31, f0 -.L_000197BC: -/* 000197BC 0002654C 7F 53 D3 78 */ mr r19, r26 -/* 000197C0 00026550 3B 5A 00 01 */ addi r26, r26, 0x1 -/* 000197C4 00026554 7C 1A C8 00 */ cmpw r26, r25 -/* 000197C8 00026558 41 80 95 C4 */ blt .L_00012D8C -/* 000197CC 0002655C 80 14 00 14 */ lwz r0, 0x14(r20) -/* 000197D0 00026560 3A B5 00 01 */ addi r21, r21, 0x1 -/* 000197D4 00026564 7C 15 00 00 */ cmpw r21, r0 -/* 000197D8 00026568 41 80 95 8C */ blt .L_00012D64 -/* 000197DC 0002656C 7E 63 9B 78 */ mr r3, r19 -/* 000197E0 00026570 80 01 00 C4 */ lwz r0, 0xc4(r1) -/* 000197E4 00026574 7C 08 03 A6 */ mtlr r0 -.L_000197E8: -/* 000197E8 00026578 BA 01 00 78 */ lmw r16, 0x78(r1) -/* 000197EC 0002657C E3 E1 00 B8 */ psq_l f31, 0xb8(r1), 0, qr0 -/* 000197F0 00026580 38 21 00 C0 */ addi r1, r1, 0xc0 -/* 000197F4 00026584 4E 80 00 20 */ blr -.endfn ChooseGoodSceneCameraTrackIndex__10ICEManagerUiPCQ23ICE7Matrix4 - -# .text:0x197F8 | size: 0x594 -.fn GetSlope__10ICEManagerPQ23ICE7Vector3T1PfT3P7ICEDataiP8ICETrack, global -/* 000197F8 00026588 94 21 FE D8 */ stwu r1, -0x128(r1) -/* 000197FC 0002658C 7C 08 02 A6 */ mflr r0 -/* 00019800 00026590 F2 61 00 C0 */ psq_st f19, 0xc0(r1), 0, qr0 -/* 00019804 00026594 F2 81 00 C8 */ psq_st f20, 0xc8(r1), 0, qr0 -/* 00019808 00026598 F2 A1 00 D0 */ psq_st f21, 0xd0(r1), 0, qr0 -/* 0001980C 0002659C F2 C1 00 D8 */ psq_st f22, 0xd8(r1), 0, qr0 -/* 00019810 000265A0 F2 E1 00 E0 */ psq_st f23, 0xe0(r1), 0, qr0 -/* 00019814 000265A4 F3 01 00 E8 */ psq_st f24, 0xe8(r1), 0, qr0 -/* 00019818 000265A8 F3 21 00 F0 */ psq_st f25, 0xf0(r1), 0, qr0 -/* 0001981C 000265AC F3 41 00 F8 */ psq_st f26, 0xf8(r1), 0, qr0 -/* 00019820 000265B0 F3 61 01 00 */ psq_st f27, 0x100(r1), 0, qr0 -/* 00019824 000265B4 F3 81 01 08 */ psq_st f28, 0x108(r1), 0, qr0 -/* 00019828 000265B8 F3 A1 01 10 */ psq_st f29, 0x110(r1), 0, qr0 -/* 0001982C 000265BC F3 C1 01 18 */ psq_st f30, 0x118(r1), 0, qr0 -/* 00019830 000265C0 F3 E1 01 20 */ psq_st f31, 0x120(r1), 0, qr0 -/* 00019834 000265C4 BE 41 00 88 */ stmw r18, 0x88(r1) -/* 00019838 000265C8 90 01 01 2C */ stw r0, 0x12c(r1) -/* 0001983C 000265CC 3D 60 00 00 */ lis r11, .rodata+0xE40@ha -/* 00019840 000265D0 7D 1F 43 78 */ mr r31, r8 -/* 00019844 000265D4 C0 0B 0E 40 */ lfs f0, .rodata+0xE40@l(r11) -/* 00019848 000265D8 39 01 00 08 */ addi r8, r1, 0x8 -/* 0001984C 000265DC 88 1F 00 00 */ lbz r0, 0x0(r31) -/* 00019850 000265E0 7D 17 43 78 */ mr r23, r8 -/* 00019854 000265E4 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 00019858 000265E8 FF C0 00 90 */ fmr f30, f0 -/* 0001985C 000265EC D0 01 00 0C */ stfs f0, 0xc(r1) -/* 00019860 000265F0 7C 79 1B 78 */ mr r25, r3 -/* 00019864 000265F4 D0 08 00 08 */ stfs f0, 0x8(r8) -/* 00019868 000265F8 7C 96 23 78 */ mr r22, r4 -.L_0001986C: -/* 0001986C 000265FC 7C B5 2B 78 */ mr r21, r5 -/* 00019870 00026600 7C D3 33 78 */ mr r19, r6 -/* 00019874 00026604 7C F2 3B 78 */ mr r18, r7 -/* 00019878 00026608 7D 38 4B 78 */ mr r24, r9 -/* 0001987C 0002660C 7D 5A 53 78 */ mr r26, r10 -/* 00019880 00026610 2C 00 00 00 */ cmpwi r0, 0x0 -.L_00019884: -/* 00019884 00026614 D0 01 00 14 */ stfs f0, 0x14(r1) -/* 00019888 00026618 FF E0 F0 90 */ fmr f31, f30 -/* 0001988C 0002661C D0 01 00 18 */ stfs f0, 0x18(r1) -/* 00019890 00026620 3B 61 00 18 */ addi r27, r1, 0x18 -/* 00019894 00026624 D0 01 00 1C */ stfs f0, 0x1c(r1) -/* 00019898 00026628 D0 01 00 20 */ stfs f0, 0x20(r1) -/* 0001989C 0002662C D0 01 00 24 */ stfs f0, 0x24(r1) -/* 000198A0 00026630 41 82 9C FC */ beq .L_0001359C -/* 000198A4 00026634 7F E4 FB 78 */ mr r4, r31 -/* 000198A8 00026638 7F 05 C3 78 */ mr r5, r24 -/* 000198AC 0002663C 7F 46 D3 78 */ mr r6, r26 -/* 000198B0 00026640 48 01 89 9D */ bl .text+0x1899C -/* 000198B4 00026644 3A 80 00 00 */ li r20, 0x0 -/* 000198B8 00026648 7C 7C 1B 79 */ mr. r28, r3 -/* 000198BC 0002664C 41 82 9B BC */ beq .L_00013478 -/* 000198C0 00026650 88 1C 00 00 */ lbz r0, 0x0(r28) -/* 000198C4 00026654 2C 00 00 00 */ cmpwi r0, 0x0 -/* 000198C8 00026658 41 82 9B BC */ beq .L_00013484 -.L_000198CC: -/* 000198CC 0002665C 7F E3 FB 78 */ mr r3, r31 -/* 000198D0 00026660 7F 04 C3 78 */ mr r4, r24 -/* 000198D4 00026664 7F 85 E3 78 */ mr r5, r28 -/* 000198D8 00026668 6B 06 00 01 */ xori r6, r24, 0x1 -/* 000198DC 0002666C 48 01 36 ED */ bl .text+0x136EC -/* 000198E0 00026670 2C 03 00 00 */ cmpwi r3, 0x0 -/* 000198E4 00026674 41 82 9B BC */ beq .L_000134A0 -/* 000198E8 00026678 3B C1 00 28 */ addi r30, r1, 0x28 -/* 000198EC 0002667C 3B A1 00 38 */ addi r29, r1, 0x38 -/* 000198F0 00026680 D3 C1 00 84 */ stfs f30, 0x84(r1) -/* 000198F4 00026684 7F 83 E3 78 */ mr r3, r28 -/* 000198F8 00026688 D3 C1 00 28 */ stfs f30, 0x28(r1) -/* 000198FC 0002668C 38 80 00 00 */ li r4, 0x0 -/* 00019900 00026690 D3 C1 00 2C */ stfs f30, 0x2c(r1) -/* 00019904 00026694 7F C5 F3 78 */ mr r5, r30 -/* 00019908 00026698 D3 C1 00 30 */ stfs f30, 0x30(r1) -/* 0001990C 0002669C 3A 80 00 01 */ li r20, 0x1 -.L_00019910: -/* 00019910 000266A0 D3 C1 00 34 */ stfs f30, 0x34(r1) -.L_00019914: -/* 00019914 000266A4 D3 C1 00 38 */ stfs f30, 0x38(r1) -/* 00019918 000266A8 D3 C1 00 3C */ stfs f30, 0x3c(r1) -/* 0001991C 000266AC D3 C1 00 40 */ stfs f30, 0x40(r1) -/* 00019920 000266B0 D3 C1 00 44 */ stfs f30, 0x44(r1) -.L_00019924: -/* 00019924 000266B4 D3 C1 00 48 */ stfs f30, 0x48(r1) -/* 00019928 000266B8 D3 C1 00 4C */ stfs f30, 0x4c(r1) -/* 0001992C 000266BC D3 C1 00 50 */ stfs f30, 0x50(r1) -/* 00019930 000266C0 D3 C1 00 54 */ stfs f30, 0x54(r1) -/* 00019934 000266C4 D3 C1 00 58 */ stfs f30, 0x58(r1) -/* 00019938 000266C8 D3 C1 00 5C */ stfs f30, 0x5c(r1) -/* 0001993C 000266CC D3 C1 00 60 */ stfs f30, 0x60(r1) -/* 00019940 000266D0 D3 C1 00 64 */ stfs f30, 0x64(r1) -/* 00019944 000266D4 D3 C1 00 68 */ stfs f30, 0x68(r1) -/* 00019948 000266D8 D3 C1 00 6C */ stfs f30, 0x6c(r1) -/* 0001994C 000266DC D3 C1 00 70 */ stfs f30, 0x70(r1) -/* 00019950 000266E0 D3 C1 00 74 */ stfs f30, 0x74(r1) -/* 00019954 000266E4 D3 C1 00 78 */ stfs f30, 0x78(r1) -/* 00019958 000266E8 D3 C1 00 7C */ stfs f30, 0x7c(r1) -/* 0001995C 000266EC D3 C1 00 80 */ stfs f30, 0x80(r1) -/* 00019960 000266F0 48 01 35 FD */ bl .text+0x135FC -/* 00019964 000266F4 7F 83 E3 78 */ mr r3, r28 -/* 00019968 000266F8 38 80 00 01 */ li r4, 0x1 -/* 0001996C 000266FC 7F A5 EB 78 */ mr r5, r29 -/* 00019970 00026700 48 01 35 FD */ bl .text+0x135FC -/* 00019974 00026704 C1 61 00 28 */ lfs f11, 0x28(r1) -/* 00019978 00026708 7F 83 E3 78 */ mr r3, r28 -/* 0001997C 0002670C C1 41 00 2C */ lfs f10, 0x2c(r1) -/* 00019980 00026710 38 80 00 00 */ li r4, 0x0 -/* 00019984 00026714 C1 21 00 30 */ lfs f9, 0x30(r1) -/* 00019988 00026718 7F C5 F3 78 */ mr r5, r30 -/* 0001998C 0002671C C1 A1 00 38 */ lfs f13, 0x38(r1) -/* 00019990 00026720 C1 81 00 3C */ lfs f12, 0x3c(r1) -/* 00019994 00026724 C0 01 00 40 */ lfs f0, 0x40(r1) -/* 00019998 00026728 ED AD 58 28 */ fsubs f13, f13, f11 -/* 0001999C 0002672C ED 8C 50 28 */ fsubs f12, f12, f10 -/* 000199A0 00026730 D1 A1 00 48 */ stfs f13, 0x48(r1) -/* 000199A4 00026734 EC 00 48 28 */ fsubs f0, f0, f9 -.L_000199A8: -/* 000199A8 00026738 D1 81 00 4C */ stfs f12, 0x4c(r1) -/* 000199AC 0002673C D0 01 00 50 */ stfs f0, 0x50(r1) -/* 000199B0 00026740 48 01 36 75 */ bl .text+0x13674 -/* 000199B4 00026744 7F 83 E3 78 */ mr r3, r28 -/* 000199B8 00026748 38 80 00 01 */ li r4, 0x1 -/* 000199BC 0002674C 7F A5 EB 78 */ mr r5, r29 -/* 000199C0 00026750 48 01 36 75 */ bl .text+0x13674 -/* 000199C4 00026754 C1 61 00 28 */ lfs f11, 0x28(r1) -/* 000199C8 00026758 7F E3 FB 78 */ mr r3, r31 -/* 000199CC 0002675C C1 41 00 2C */ lfs f10, 0x2c(r1) -/* 000199D0 00026760 38 80 00 00 */ li r4, 0x0 -/* 000199D4 00026764 C1 21 00 30 */ lfs f9, 0x30(r1) -/* 000199D8 00026768 7F C5 F3 78 */ mr r5, r30 -/* 000199DC 0002676C C1 A1 00 38 */ lfs f13, 0x38(r1) -/* 000199E0 00026770 C1 81 00 3C */ lfs f12, 0x3c(r1) -/* 000199E4 00026774 C0 01 00 40 */ lfs f0, 0x40(r1) -.L_000199E8: -/* 000199E8 00026778 ED AD 58 28 */ fsubs f13, f13, f11 -/* 000199EC 0002677C ED 8C 50 28 */ fsubs f12, f12, f10 -/* 000199F0 00026780 D1 A1 00 68 */ stfs f13, 0x68(r1) -/* 000199F4 00026784 EC 00 48 28 */ fsubs f0, f0, f9 -/* 000199F8 00026788 D1 81 00 6C */ stfs f12, 0x6c(r1) -/* 000199FC 0002678C D0 01 00 70 */ stfs f0, 0x70(r1) -/* 00019A00 00026790 C2 7C 00 4C */ lfs f19, 0x4c(r28) -/* 00019A04 00026794 C2 9C 00 54 */ lfs f20, 0x54(r28) -/* 00019A08 00026798 C2 BC 00 50 */ lfs f21, 0x50(r28) -/* 00019A0C 0002679C C2 DC 00 58 */ lfs f22, 0x58(r28) -/* 00019A10 000267A0 48 01 35 FD */ bl .text+0x135FC -/* 00019A14 000267A4 7F E3 FB 78 */ mr r3, r31 -.L_00019A18: -/* 00019A18 000267A8 38 80 00 01 */ li r4, 0x1 -/* 00019A1C 000267AC 7F A5 EB 78 */ mr r5, r29 -/* 00019A20 000267B0 48 01 35 FD */ bl .text+0x135FC -/* 00019A24 000267B4 C1 61 00 28 */ lfs f11, 0x28(r1) -.L_00019A28: -/* 00019A28 000267B8 7F C5 F3 78 */ mr r5, r30 -/* 00019A2C 000267BC C1 41 00 2C */ lfs f10, 0x2c(r1) -/* 00019A30 000267C0 7F E3 FB 78 */ mr r3, r31 -/* 00019A34 000267C4 C1 21 00 30 */ lfs f9, 0x30(r1) -/* 00019A38 000267C8 38 80 00 00 */ li r4, 0x0 -/* 00019A3C 000267CC C1 A1 00 38 */ lfs f13, 0x38(r1) -/* 00019A40 000267D0 C1 81 00 3C */ lfs f12, 0x3c(r1) -/* 00019A44 000267D4 C0 01 00 40 */ lfs f0, 0x40(r1) -/* 00019A48 000267D8 ED AD 58 28 */ fsubs f13, f13, f11 -/* 00019A4C 000267DC ED 8C 50 28 */ fsubs f12, f12, f10 -/* 00019A50 000267E0 D1 A1 00 58 */ stfs f13, 0x58(r1) -.L_00019A54: -/* 00019A54 000267E4 EC 00 48 28 */ fsubs f0, f0, f9 -/* 00019A58 000267E8 D1 81 00 5C */ stfs f12, 0x5c(r1) -/* 00019A5C 000267EC D0 01 00 60 */ stfs f0, 0x60(r1) -/* 00019A60 000267F0 48 01 36 75 */ bl .text+0x13674 -/* 00019A64 000267F4 7F A5 EB 78 */ mr r5, r29 -/* 00019A68 000267F8 7F E3 FB 78 */ mr r3, r31 -/* 00019A6C 000267FC 38 80 00 01 */ li r4, 0x1 -/* 00019A70 00026800 48 01 36 75 */ bl .text+0x13674 -/* 00019A74 00026804 C0 01 00 38 */ lfs f0, 0x38(r1) -/* 00019A78 00026808 7F 23 CB 78 */ mr r3, r25 -/* 00019A7C 0002680C C1 A1 00 3C */ lfs f13, 0x3c(r1) -/* 00019A80 00026810 7F E4 FB 78 */ mr r4, r31 -.L_00019A84: -/* 00019A84 00026814 C1 81 00 40 */ lfs f12, 0x40(r1) -/* 00019A88 00026818 7F 45 D3 78 */ mr r5, r26 -/* 00019A8C 0002681C C1 61 00 28 */ lfs f11, 0x28(r1) -/* 00019A90 00026820 C1 41 00 2C */ lfs f10, 0x2c(r1) -/* 00019A94 00026824 C1 21 00 30 */ lfs f9, 0x30(r1) -/* 00019A98 00026828 EC 00 58 28 */ fsubs f0, f0, f11 -/* 00019A9C 0002682C C2 FF 00 4C */ lfs f23, 0x4c(r31) -/* 00019AA0 00026830 ED AD 50 28 */ fsubs f13, f13, f10 -.L_00019AA4: -/* 00019AA4 00026834 C3 1F 00 58 */ lfs f24, 0x58(r31) -/* 00019AA8 00026838 ED 8C 48 28 */ fsubs f12, f12, f9 -/* 00019AAC 0002683C C3 3F 00 54 */ lfs f25, 0x54(r31) -/* 00019AB0 00026840 C3 5F 00 50 */ lfs f26, 0x50(r31) -/* 00019AB4 00026844 D0 01 00 78 */ stfs f0, 0x78(r1) -/* 00019AB8 00026848 D1 A1 00 7C */ stfs f13, 0x7c(r1) -/* 00019ABC 0002684C D1 81 00 80 */ stfs f12, 0x80(r1) -/* 00019AC0 00026850 48 01 85 99 */ bl .text+0x18598 -/* 00019AC4 00026854 FF E0 08 90 */ fmr f31, f1 -/* 00019AC8 00026858 7F 23 CB 78 */ mr r3, r25 -/* 00019ACC 0002685C 7F 84 E3 78 */ mr r4, r28 -/* 00019AD0 00026860 7F 45 D3 78 */ mr r5, r26 -/* 00019AD4 00026864 48 01 85 99 */ bl .text+0x18598 -/* 00019AD8 00026868 EC 1F 08 2A */ fadds f0, f31, f1 -/* 00019ADC 0002686C 3D 60 00 00 */ lis r11, .rodata+0xE44@ha -/* 00019AE0 00026870 EF 9F 00 24 */ fdivs f28, f31, f0 -/* 00019AE4 00026874 3D 20 00 00 */ lis r9, .rodata+0xE48@ha -/* 00019AE8 00026878 C1 AB 0E 44 */ lfs f13, .rodata+0xE44@l(r11) -/* 00019AEC 0002687C C0 09 0E 48 */ lfs f0, .rodata+0xE48@l(r9) -/* 00019AF0 00026880 EF 6D E0 28 */ fsubs f27, f13, f28 -/* 00019AF4 00026884 FC 01 00 00 */ fcmpu cr0, f1, f0 -/* 00019AF8 00026888 4C 62 03 82 */ cror un, eq, lt -/* 00019AFC 0002688C 41 83 9B 08 */ bso .L_00013604 -/* 00019B00 00026890 EC 1F 08 24 */ fdivs f0, f31, f1 -/* 00019B04 00026894 EF 9C 00 32 */ fmuls f28, f28, f0 -/* 00019B08 00026898 57 00 10 3A */ slwi r0, r24, 2 -/* 00019B0C 0002689C 39 3F 00 14 */ addi r9, r31, 0x14 -/* 00019B10 000268A0 7F A9 04 2E */ lfsx f29, r9, r0 -/* 00019B14 000268A4 38 A1 00 58 */ addi r5, r1, 0x58 -/* 00019B18 000268A8 C0 01 00 48 */ lfs f0, 0x48(r1) -/* 00019B1C 000268AC 7E E4 BB 78 */ mr r4, r23 -/* 00019B20 000268B0 C1 A1 00 4C */ lfs f13, 0x4c(r1) -/* 00019B24 000268B4 EF FC 07 72 */ fmuls f31, f28, f29 -/* 00019B28 000268B8 C1 81 00 50 */ lfs f12, 0x50(r1) -/* 00019B2C 000268BC EC 00 07 F2 */ fmuls f0, f0, f31 -/* 00019B30 000268C0 ED AD 07 F2 */ fmuls f13, f13, f31 -/* 00019B34 000268C4 D0 01 00 08 */ stfs f0, 0x8(r1) -/* 00019B38 000268C8 ED 8C 07 F2 */ fmuls f12, f12, f31 -/* 00019B3C 000268CC D1 A1 00 0C */ stfs f13, 0xc(r1) -/* 00019B40 000268D0 EF DB 07 72 */ fmuls f30, f27, f29 -/* 00019B44 000268D4 D1 97 00 08 */ stfs f12, 0x8(r23) -/* 00019B48 000268D8 FC 20 F0 90 */ fmr f1, f30 -/* 00019B4C 000268DC 7E E3 BB 78 */ mr r3, r23 -/* 00019B50 000268E0 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -/* 00019B54 000268E4 C1 A1 00 68 */ lfs f13, 0x68(r1) -/* 00019B58 000268E8 FC 20 F0 90 */ fmr f1, f30 -/* 00019B5C 000268EC C1 81 00 6C */ lfs f12, 0x6c(r1) -/* 00019B60 000268F0 7F 63 DB 78 */ mr r3, r27 -/* 00019B64 000268F4 C0 01 00 70 */ lfs f0, 0x70(r1) -/* 00019B68 000268F8 ED AD 07 F2 */ fmuls f13, f13, f31 -/* 00019B6C 000268FC ED 8C 07 F2 */ fmuls f12, f12, f31 -/* 00019B70 00026900 D1 A1 00 18 */ stfs f13, 0x18(r1) -.L_00019B74: -/* 00019B74 00026904 EC 00 07 F2 */ fmuls f0, f0, f31 -/* 00019B78 00026908 D1 81 00 1C */ stfs f12, 0x1c(r1) -.L_00019B7C: -/* 00019B7C 0002690C D0 01 00 20 */ stfs f0, 0x20(r1) -/* 00019B80 00026910 7F 64 DB 78 */ mr r4, r27 -/* 00019B84 00026914 38 A1 00 78 */ addi r5, r1, 0x78 -/* 00019B88 00026918 48 00 00 01 */ bl bScaleAdd__FP8bVector3PC8bVector3T1f -/* 00019B8C 0002691C ED 9A C0 28 */ fsubs f12, f26, f24 -.L_00019B90: -/* 00019B90 00026920 EC 19 B8 28 */ fsubs f0, f25, f23 -/* 00019B94 00026924 ED 75 B0 28 */ fsubs f11, f21, f22 -/* 00019B98 00026928 ED B4 98 28 */ fsubs f13, f20, f19 -/* 00019B9C 0002692C EC 00 06 F2 */ fmuls f0, f0, f27 -/* 00019BA0 00026930 ED 8C 06 F2 */ fmuls f12, f12, f27 -/* 00019BA4 00026934 ED AD 07 32 */ fmuls f13, f13, f28 -/* 00019BA8 00026938 ED 6B 07 32 */ fmuls f11, f11, f28 -/* 00019BAC 0002693C ED 8C 07 72 */ fmuls f12, f12, f29 -/* 00019BB0 00026940 EC 00 07 72 */ fmuls f0, f0, f29 -/* 00019BB4 00026944 EF ED 07 7A */ fmadds f31, f13, f29, f0 -/* 00019BB8 00026948 EF CB 67 7A */ fmadds f30, f11, f29, f12 -/* 00019BBC 0002694C 2C 14 00 00 */ cmpwi r20, 0x0 -/* 00019BC0 00026950 40 82 9C FC */ bne .L_000138BC -/* 00019BC4 00026954 3D 20 00 00 */ lis r9, .rodata+0xE40@ha -/* 00019BC8 00026958 38 A1 00 28 */ addi r5, r1, 0x28 -/* 00019BCC 0002695C C0 09 0E 40 */ lfs f0, .rodata+0xE40@l(r9) -/* 00019BD0 00026960 7F E3 FB 78 */ mr r3, r31 -/* 00019BD4 00026964 38 80 00 00 */ li r4, 0x0 -/* 00019BD8 00026968 D0 01 00 64 */ stfs f0, 0x64(r1) -/* 00019BDC 0002696C D0 01 00 28 */ stfs f0, 0x28(r1) -/* 00019BE0 00026970 D0 01 00 2C */ stfs f0, 0x2c(r1) -/* 00019BE4 00026974 D0 01 00 30 */ stfs f0, 0x30(r1) -.L_00019BE8: -/* 00019BE8 00026978 D0 01 00 34 */ stfs f0, 0x34(r1) -/* 00019BEC 0002697C D0 01 00 38 */ stfs f0, 0x38(r1) -.L_00019BF0: -/* 00019BF0 00026980 D0 01 00 3C */ stfs f0, 0x3c(r1) -.L_00019BF4: -/* 00019BF4 00026984 D0 01 00 40 */ stfs f0, 0x40(r1) -/* 00019BF8 00026988 D0 01 00 44 */ stfs f0, 0x44(r1) -/* 00019BFC 0002698C D0 01 00 48 */ stfs f0, 0x48(r1) -/* 00019C00 00026990 D0 01 00 4C */ stfs f0, 0x4c(r1) -/* 00019C04 00026994 D0 01 00 50 */ stfs f0, 0x50(r1) -/* 00019C08 00026998 D0 01 00 54 */ stfs f0, 0x54(r1) -/* 00019C0C 0002699C D0 01 00 58 */ stfs f0, 0x58(r1) -/* 00019C10 000269A0 D0 01 00 5C */ stfs f0, 0x5c(r1) -/* 00019C14 000269A4 D0 01 00 60 */ stfs f0, 0x60(r1) -/* 00019C18 000269A8 48 01 35 FD */ bl .text+0x135FC -/* 00019C1C 000269AC 38 A1 00 38 */ addi r5, r1, 0x38 -/* 00019C20 000269B0 7F E3 FB 78 */ mr r3, r31 -/* 00019C24 000269B4 38 80 00 01 */ li r4, 0x1 -/* 00019C28 000269B8 48 01 35 FD */ bl .text+0x135FC -/* 00019C2C 000269BC 38 A1 00 48 */ addi r5, r1, 0x48 -/* 00019C30 000269C0 7F E3 FB 78 */ mr r3, r31 -/* 00019C34 000269C4 38 80 00 00 */ li r4, 0x0 -/* 00019C38 000269C8 48 01 36 75 */ bl .text+0x13674 -/* 00019C3C 000269CC 7F E3 FB 78 */ mr r3, r31 -/* 00019C40 000269D0 38 80 00 01 */ li r4, 0x1 -.L_00019C44: -/* 00019C44 000269D4 38 A1 00 58 */ addi r5, r1, 0x58 -.L_00019C48: -/* 00019C48 000269D8 48 01 36 75 */ bl .text+0x13674 -/* 00019C4C 000269DC C1 A1 00 28 */ lfs f13, 0x28(r1) -/* 00019C50 000269E0 57 00 10 3A */ slwi r0, r24, 2 -.L_00019C54: -/* 00019C54 000269E4 C1 81 00 38 */ lfs f12, 0x38(r1) -/* 00019C58 000269E8 39 3F 00 14 */ addi r9, r31, 0x14 -/* 00019C5C 000269EC C1 61 00 2C */ lfs f11, 0x2c(r1) -/* 00019C60 000269F0 C0 01 00 3C */ lfs f0, 0x3c(r1) -/* 00019C64 000269F4 ED 8C 68 28 */ fsubs f12, f12, f13 -/* 00019C68 000269F8 C1 A1 00 30 */ lfs f13, 0x30(r1) -/* 00019C6C 000269FC EC 00 58 28 */ fsubs f0, f0, f11 -/* 00019C70 00026A00 C0 C1 00 40 */ lfs f6, 0x40(r1) -/* 00019C74 00026A04 C1 61 00 4C */ lfs f11, 0x4c(r1) -/* 00019C78 00026A08 C1 01 00 5C */ lfs f8, 0x5c(r1) -/* 00019C7C 00026A0C EC C6 68 28 */ fsubs f6, f6, f13 -/* 00019C80 00026A10 D1 81 00 08 */ stfs f12, 0x8(r1) -/* 00019C84 00026A14 D0 01 00 0C */ stfs f0, 0xc(r1) -/* 00019C88 00026A18 ED 08 58 28 */ fsubs f8, f8, f11 -/* 00019C8C 00026A1C C1 A1 00 48 */ lfs f13, 0x48(r1) -/* 00019C90 00026A20 C1 41 00 50 */ lfs f10, 0x50(r1) -.L_00019C94: -/* 00019C94 00026A24 C1 21 00 58 */ lfs f9, 0x58(r1) -/* 00019C98 00026A28 C0 E1 00 60 */ lfs f7, 0x60(r1) -.L_00019C9C: -/* 00019C9C 00026A2C 7C 09 04 2E */ lfsx f0, r9, r0 -/* 00019CA0 00026A30 ED 29 68 28 */ fsubs f9, f9, f13 -/* 00019CA4 00026A34 C1 61 00 0C */ lfs f11, 0xc(r1) -/* 00019CA8 00026A38 EC E7 50 28 */ fsubs f7, f7, f10 -.L_00019CAC: -/* 00019CAC 00026A3C C0 9F 00 4C */ lfs f4, 0x4c(r31) -/* 00019CB0 00026A40 ED 8C 00 32 */ fmuls f12, f12, f0 -/* 00019CB4 00026A44 C1 5F 00 58 */ lfs f10, 0x58(r31) -/* 00019CB8 00026A48 ED 6B 00 32 */ fmuls f11, f11, f0 -/* 00019CBC 00026A4C C0 BF 00 54 */ lfs f5, 0x54(r31) -/* 00019CC0 00026A50 EC C6 00 32 */ fmuls f6, f6, f0 -/* 00019CC4 00026A54 C1 BF 00 50 */ lfs f13, 0x50(r31) -/* 00019CC8 00026A58 ED 29 00 32 */ fmuls f9, f9, f0 -/* 00019CCC 00026A5C D1 81 00 08 */ stfs f12, 0x8(r1) -/* 00019CD0 00026A60 ED 08 00 32 */ fmuls f8, f8, f0 -/* 00019CD4 00026A64 D1 61 00 0C */ stfs f11, 0xc(r1) -/* 00019CD8 00026A68 EC E7 00 32 */ fmuls f7, f7, f0 -/* 00019CDC 00026A6C D0 D7 00 08 */ stfs f6, 0x8(r23) -/* 00019CE0 00026A70 ED 4A 28 28 */ fsubs f10, f10, f5 -.L_00019CE4: -/* 00019CE4 00026A74 ED AD 20 28 */ fsubs f13, f13, f4 -/* 00019CE8 00026A78 D1 21 00 18 */ stfs f9, 0x18(r1) -/* 00019CEC 00026A7C D1 01 00 1C */ stfs f8, 0x1c(r1) -.L_00019CF0: -/* 00019CF0 00026A80 EF E0 03 72 */ fmuls f31, f0, f13 -/* 00019CF4 00026A84 D0 E1 00 20 */ stfs f7, 0x20(r1) -/* 00019CF8 00026A88 EF C0 02 B2 */ fmuls f30, f0, f10 -/* 00019CFC 00026A8C 80 17 00 0C */ lwz r0, 0xc(r23) -/* 00019D00 00026A90 81 77 00 04 */ lwz r11, 0x4(r23) -/* 00019D04 00026A94 81 21 00 08 */ lwz r9, 0x8(r1) -/* 00019D08 00026A98 81 57 00 08 */ lwz r10, 0x8(r23) -/* 00019D0C 00026A9C 90 16 00 0C */ stw r0, 0xc(r22) -/* 00019D10 00026AA0 91 36 00 00 */ stw r9, 0x0(r22) -/* 00019D14 00026AA4 91 76 00 04 */ stw r11, 0x4(r22) -/* 00019D18 00026AA8 91 56 00 08 */ stw r10, 0x8(r22) -/* 00019D1C 00026AAC 80 1B 00 0C */ lwz r0, 0xc(r27) -/* 00019D20 00026AB0 81 3B 00 04 */ lwz r9, 0x4(r27) -/* 00019D24 00026AB4 81 7B 00 08 */ lwz r11, 0x8(r27) -/* 00019D28 00026AB8 81 01 00 18 */ lwz r8, 0x18(r1) -/* 00019D2C 00026ABC 90 15 00 0C */ stw r0, 0xc(r21) -/* 00019D30 00026AC0 91 15 00 00 */ stw r8, 0x0(r21) -.L_00019D34: -/* 00019D34 00026AC4 91 35 00 04 */ stw r9, 0x4(r21) -/* 00019D38 00026AC8 91 75 00 08 */ stw r11, 0x8(r21) -/* 00019D3C 00026ACC D3 F3 00 00 */ stfs f31, 0x0(r19) -/* 00019D40 00026AD0 D3 D2 00 00 */ stfs f30, 0x0(r18) -/* 00019D44 00026AD4 80 01 01 2C */ lwz r0, 0x12c(r1) -/* 00019D48 00026AD8 7C 08 03 A6 */ mtlr r0 -/* 00019D4C 00026ADC BA 41 00 88 */ lmw r18, 0x88(r1) -/* 00019D50 00026AE0 E2 61 00 C0 */ psq_l f19, 0xc0(r1), 0, qr0 -/* 00019D54 00026AE4 E2 81 00 C8 */ psq_l f20, 0xc8(r1), 0, qr0 -/* 00019D58 00026AE8 E2 A1 00 D0 */ psq_l f21, 0xd0(r1), 0, qr0 -/* 00019D5C 00026AEC E2 C1 00 D8 */ psq_l f22, 0xd8(r1), 0, qr0 -/* 00019D60 00026AF0 E2 E1 00 E0 */ psq_l f23, 0xe0(r1), 0, qr0 -/* 00019D64 00026AF4 E3 01 00 E8 */ psq_l f24, 0xe8(r1), 0, qr0 -/* 00019D68 00026AF8 E3 21 00 F0 */ psq_l f25, 0xf0(r1), 0, qr0 -/* 00019D6C 00026AFC E3 41 00 F8 */ psq_l f26, 0xf8(r1), 0, qr0 -/* 00019D70 00026B00 E3 61 01 00 */ psq_l f27, 0x100(r1), 0, qr0 -.L_00019D74: -/* 00019D74 00026B04 E3 81 01 08 */ psq_l f28, 0x108(r1), 0, qr0 -/* 00019D78 00026B08 E3 A1 01 10 */ psq_l f29, 0x110(r1), 0, qr0 -.L_00019D7C: -/* 00019D7C 00026B0C E3 C1 01 18 */ psq_l f30, 0x118(r1), 0, qr0 -/* 00019D80 00026B10 E3 E1 01 20 */ psq_l f31, 0x120(r1), 0, qr0 -/* 00019D84 00026B14 38 21 01 28 */ addi r1, r1, 0x128 -/* 00019D88 00026B18 4E 80 00 20 */ blr -.endfn GetSlope__10ICEManagerPQ23ICE7Vector3T1PfT3P7ICEDataiP8ICETrack - -# .text:0x19D8C | size: 0xAC -# GetGroundElevation(const ICE::Vector3*) -.fn GetGroundElevation__FPCQ23ICE7Vector3, local -/* 00019D8C 00026B1C 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 00019D90 00026B20 7C 08 02 A6 */ mflr r0 -/* 00019D94 00026B24 93 E1 00 2C */ stw r31, 0x2c(r1) -/* 00019D98 00026B28 90 01 00 34 */ stw r0, 0x34(r1) -/* 00019D9C 00026B2C 3D 20 00 00 */ lis r9, .rodata+0xE4C@ha -/* 00019DA0 00026B30 3D 60 00 00 */ lis r11, TheGameFlowManager+0x20@ha -/* 00019DA4 00026B34 C0 09 0E 4C */ lfs f0, .rodata+0xE4C@l(r9) -.L_00019DA8: -/* 00019DA8 00026B38 7C 7F 1B 78 */ mr r31, r3 -/* 00019DAC 00026B3C 80 0B 00 20 */ lwz r0, TheGameFlowManager+0x20@l(r11) -/* 00019DB0 00026B40 D0 01 00 20 */ stfs f0, 0x20(r1) -/* 00019DB4 00026B44 2C 00 00 06 */ cmpwi r0, 0x6 -/* 00019DB8 00026B48 40 82 9E 20 */ bne .L_00013BD8 -/* 00019DBC 00026B4C C0 1F 00 04 */ lfs f0, 0x4(r31) -/* 00019DC0 00026B50 38 81 00 08 */ addi r4, r1, 0x8 -/* 00019DC4 00026B54 C1 BF 00 08 */ lfs f13, 0x8(r31) -/* 00019DC8 00026B58 3D 20 00 00 */ lis r9, .rodata+0xE50@ha -/* 00019DCC 00026B5C C1 9F 00 00 */ lfs f12, 0x0(r31) -/* 00019DD0 00026B60 FC 00 00 50 */ fneg f0, f0 -/* 00019DD4 00026B64 D1 A1 00 0C */ stfs f13, 0xc(r1) -/* 00019DD8 00026B68 38 00 00 00 */ li r0, 0x0 -/* 00019DDC 00026B6C D0 01 00 08 */ stfs f0, 0x8(r1) -/* 00019DE0 00026B70 39 60 00 03 */ li r11, 0x3 -/* 00019DE4 00026B74 D1 84 00 08 */ stfs f12, 0x8(r4) -/* 00019DE8 00026B78 38 61 00 18 */ addi r3, r1, 0x18 -/* 00019DEC 00026B7C C1 A9 0E 50 */ lfs f13, .rodata+0xE50@l(r9) -/* 00019DF0 00026B80 38 A1 00 20 */ addi r5, r1, 0x20 -/* 00019DF4 00026B84 C0 01 00 0C */ lfs f0, 0xc(r1) -/* 00019DF8 00026B88 38 C0 00 00 */ li r6, 0x0 -/* 00019DFC 00026B8C 90 01 00 18 */ stw r0, 0x18(r1) -/* 00019E00 00026B90 EC 00 68 2A */ fadds f0, f0, f13 -/* 00019E04 00026B94 91 61 00 1C */ stw r11, 0x1c(r1) -/* 00019E08 00026B98 D0 01 00 0C */ stfs f0, 0xc(r1) -/* 00019E0C 00026B9C 48 00 00 01 */ bl GetWorldHeightAtPointRigorous__13WCollisionMgrRCQ25UMath7Vector3RfPQ25UMath7Vector3 -/* 00019E10 00026BA0 2C 03 00 00 */ cmpwi r3, 0x0 -/* 00019E14 00026BA4 40 82 9E 20 */ bne .L_00013C34 -/* 00019E18 00026BA8 C0 1F 00 08 */ lfs f0, 0x8(r31) -/* 00019E1C 00026BAC D0 01 00 20 */ stfs f0, 0x20(r1) -/* 00019E20 00026BB0 C0 21 00 20 */ lfs f1, 0x20(r1) -/* 00019E24 00026BB4 80 01 00 34 */ lwz r0, 0x34(r1) -/* 00019E28 00026BB8 7C 08 03 A6 */ mtlr r0 -/* 00019E2C 00026BBC 83 E1 00 2C */ lwz r31, 0x2c(r1) -/* 00019E30 00026BC0 38 21 00 30 */ addi r1, r1, 0x30 -/* 00019E34 00026BC4 4E 80 00 20 */ blr -.endfn GetGroundElevation__FPCQ23ICE7Vector3 - -# .text:0x19E38 | size: 0xD0 -# ICEGetPlayerCarTransform(ICE::Matrix4*) -.fn ICEGetPlayerCarTransform__FPQ23ICE7Matrix4, local -/* 00019E38 00026BC8 94 21 FF B0 */ stwu r1, -0x50(r1) -/* 00019E3C 00026BCC 7C 08 02 A6 */ mflr r0 -/* 00019E40 00026BD0 BF C1 00 48 */ stmw r30, 0x48(r1) -/* 00019E44 00026BD4 90 01 00 54 */ stw r0, 0x54(r1) -/* 00019E48 00026BD8 7C 7E 1B 78 */ mr r30, r3 -/* 00019E4C 00026BDC 48 00 00 01 */ bl PSMTX44Identity -/* 00019E50 00026BE0 38 60 00 01 */ li r3, 0x1 -/* 00019E54 00026BE4 48 00 00 01 */ bl First__Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi311ePlayerList -/* 00019E58 00026BE8 7C 6B 1B 79 */ mr. r11, r3 -.L_00019E5C: -/* 00019E5C 00026BEC 41 82 9E F4 */ beq .L_00013D50 -.L_00019E60: -/* 00019E60 00026BF0 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 00019E64 00026BF4 80 09 00 14 */ lwz r0, 0x14(r9) -/* 00019E68 00026BF8 A8 69 00 10 */ lha r3, 0x10(r9) -/* 00019E6C 00026BFC 7C 08 03 A6 */ mtlr r0 -/* 00019E70 00026C00 7C 6B 1A 14 */ add r3, r11, r3 -/* 00019E74 00026C04 4E 80 00 21 */ blrl -/* 00019E78 00026C08 81 23 00 04 */ lwz r9, 0x4(r3) -/* 00019E7C 00026C0C A8 09 00 A8 */ lha r0, 0xa8(r9) -/* 00019E80 00026C10 81 29 00 AC */ lwz r9, 0xac(r9) -/* 00019E84 00026C14 7C 63 02 14 */ add r3, r3, r0 -/* 00019E88 00026C18 7D 28 03 A6 */ mtlr r9 -/* 00019E8C 00026C1C 4E 80 00 21 */ blrl -/* 00019E90 00026C20 7C 7F 1B 79 */ mr. r31, r3 -/* 00019E94 00026C24 41 82 9E F4 */ beq .L_00013D88 -/* 00019E98 00026C28 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 00019E9C 00026C2C 38 81 00 08 */ addi r4, r1, 0x8 -/* 00019EA0 00026C30 80 09 00 8C */ lwz r0, 0x8c(r9) -/* 00019EA4 00026C34 A8 69 00 88 */ lha r3, 0x88(r9) -/* 00019EA8 00026C38 7C 08 03 A6 */ mtlr r0 -/* 00019EAC 00026C3C 7C 7F 1A 14 */ add r3, r31, r3 -/* 00019EB0 00026C40 4E 80 00 21 */ blrl -/* 00019EB4 00026C44 7F C3 F3 78 */ mr r3, r30 -/* 00019EB8 00026C48 38 81 00 08 */ addi r4, r1, 0x8 -/* 00019EBC 00026C4C 48 00 00 01 */ bl bConvertFromBond__FR8bMatrix4RC8bMatrix4 -.L_00019EC0: -/* 00019EC0 00026C50 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 00019EC4 00026C54 A8 69 00 48 */ lha r3, 0x48(r9) -/* 00019EC8 00026C58 80 09 00 4C */ lwz r0, 0x4c(r9) -/* 00019ECC 00026C5C 7C 7F 1A 14 */ add r3, r31, r3 -/* 00019ED0 00026C60 7C 08 03 A6 */ mtlr r0 -/* 00019ED4 00026C64 4E 80 00 21 */ blrl -/* 00019ED8 00026C68 C0 03 00 00 */ lfs f0, 0x0(r3) -/* 00019EDC 00026C6C C1 A3 00 04 */ lfs f13, 0x4(r3) -/* 00019EE0 00026C70 C1 83 00 08 */ lfs f12, 0x8(r3) -/* 00019EE4 00026C74 FC 00 00 50 */ fneg f0, f0 -/* 00019EE8 00026C78 D1 BE 00 38 */ stfs f13, 0x38(r30) -/* 00019EEC 00026C7C D1 9E 00 30 */ stfs f12, 0x30(r30) -/* 00019EF0 00026C80 D0 1E 00 34 */ stfs f0, 0x34(r30) -/* 00019EF4 00026C84 80 01 00 54 */ lwz r0, 0x54(r1) -/* 00019EF8 00026C88 7C 08 03 A6 */ mtlr r0 -/* 00019EFC 00026C8C BB C1 00 48 */ lmw r30, 0x48(r1) -/* 00019F00 00026C90 38 21 00 50 */ addi r1, r1, 0x50 -/* 00019F04 00026C94 4E 80 00 20 */ blr -.endfn ICEGetPlayerCarTransform__FPQ23ICE7Matrix4 - -# .text:0x19F08 | size: 0x68 -# LoaderICECameras(bChunk*) -.fn LoaderICECameras__FP6bChunk, global -/* 00019F08 00026C98 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 00019F0C 00026C9C 7C 08 02 A6 */ mflr r0 -/* 00019F10 00026CA0 90 01 00 0C */ stw r0, 0xc(r1) -/* 00019F14 00026CA4 7C 64 1B 78 */ mr r4, r3 -/* 00019F18 00026CA8 3C 00 00 03 */ lis r0, 0x3 -/* 00019F1C 00026CAC 81 24 00 00 */ lwz r9, 0x0(r4) -/* 00019F20 00026CB0 60 00 B2 11 */ ori r0, r0, 0xb211 -/* 00019F24 00026CB4 7C 09 00 00 */ cmpw r9, r0 -/* 00019F28 00026CB8 40 82 9F 3C */ bne .L_00013E64 -/* 00019F2C 00026CBC 3C 60 00 00 */ lis r3, TheICEManager@ha -/* 00019F30 00026CC0 38 63 00 00 */ addi r3, r3, TheICEManager@l -/* 00019F34 00026CC4 48 01 8E D5 */ bl .text+0x18ED4 -/* 00019F38 00026CC8 48 01 9F 5C */ b .text+0x19F5C -/* 00019F3C 00026CCC 3D 29 7F FC */ addis r9, r9, 0x7ffc -/* 00019F40 00026CD0 39 29 4E 00 */ addi r9, r9, 0x4e00 -/* 00019F44 00026CD4 28 09 00 03 */ cmplwi r9, 0x3 -/* 00019F48 00026CD8 38 60 00 00 */ li r3, 0x0 -/* 00019F4C 00026CDC 41 81 9F 60 */ bgt .L_00013EAC -/* 00019F50 00026CE0 3C 60 00 00 */ lis r3, TheICEManager@ha -/* 00019F54 00026CE4 38 63 00 00 */ addi r3, r3, TheICEManager@l -/* 00019F58 00026CE8 48 01 8B B5 */ bl .text+0x18BB4 -/* 00019F5C 00026CEC 38 60 00 01 */ li r3, 0x1 -/* 00019F60 00026CF0 80 01 00 0C */ lwz r0, 0xc(r1) -/* 00019F64 00026CF4 7C 08 03 A6 */ mtlr r0 -/* 00019F68 00026CF8 38 21 00 08 */ addi r1, r1, 0x8 -/* 00019F6C 00026CFC 4E 80 00 20 */ blr -.endfn LoaderICECameras__FP6bChunk - -# .text:0x19F70 | size: 0x68 -# UnloaderICECameras(bChunk*) -.fn UnloaderICECameras__FP6bChunk, global -/* 00019F70 00026D00 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 00019F74 00026D04 7C 08 02 A6 */ mflr r0 -/* 00019F78 00026D08 90 01 00 0C */ stw r0, 0xc(r1) -/* 00019F7C 00026D0C 7C 64 1B 78 */ mr r4, r3 -/* 00019F80 00026D10 3C 00 00 03 */ lis r0, 0x3 -/* 00019F84 00026D14 81 24 00 00 */ lwz r9, 0x0(r4) -/* 00019F88 00026D18 60 00 B2 11 */ ori r0, r0, 0xb211 -/* 00019F8C 00026D1C 7C 09 00 00 */ cmpw r9, r0 -/* 00019F90 00026D20 40 82 9F A4 */ bne .L_00013F34 -/* 00019F94 00026D24 3C 60 00 00 */ lis r3, TheICEManager@ha -/* 00019F98 00026D28 38 63 00 00 */ addi r3, r3, TheICEManager@l -/* 00019F9C 00026D2C 48 01 8F 79 */ bl .text+0x18F78 -/* 00019FA0 00026D30 48 01 9F C4 */ b .text+0x19FC4 -/* 00019FA4 00026D34 3D 29 7F FC */ addis r9, r9, 0x7ffc -/* 00019FA8 00026D38 39 29 4E 00 */ addi r9, r9, 0x4e00 -/* 00019FAC 00026D3C 28 09 00 03 */ cmplwi r9, 0x3 -/* 00019FB0 00026D40 38 60 00 00 */ li r3, 0x0 -/* 00019FB4 00026D44 41 81 9F C8 */ bgt .L_00013F7C -/* 00019FB8 00026D48 3C 60 00 00 */ lis r3, TheICEManager@ha -/* 00019FBC 00026D4C 38 63 00 00 */ addi r3, r3, TheICEManager@l -/* 00019FC0 00026D50 48 01 8D 0D */ bl .text+0x18D0C -/* 00019FC4 00026D54 38 60 00 01 */ li r3, 0x1 -/* 00019FC8 00026D58 80 01 00 0C */ lwz r0, 0xc(r1) -/* 00019FCC 00026D5C 7C 08 03 A6 */ mtlr r0 -/* 00019FD0 00026D60 38 21 00 08 */ addi r1, r1, 0x8 -/* 00019FD4 00026D64 4E 80 00 20 */ blr -.endfn UnloaderICECameras__FP6bChunk - -# .text:0x19FD8 | size: 0x4C -.fn FindAnimScene__3ICEv, global -/* 00019FD8 00026D68 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 00019FDC 00026D6C 7C 08 02 A6 */ mflr r0 -/* 00019FE0 00026D70 90 01 00 0C */ stw r0, 0xc(r1) -/* 00019FE4 00026D74 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@ha -/* 00019FE8 00026D78 81 69 00 00 */ lwz r11, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@l(r9) -/* 00019FEC 00026D7C 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 00019FF0 00026D80 40 82 9F FC */ bne .L_00013FEC -/* 00019FF4 00026D84 38 60 00 00 */ li r3, 0x0 -/* 00019FF8 00026D88 48 01 A0 14 */ b .text+0x1A014 -/* 00019FFC 00026D8C 81 2B 00 04 */ lwz r9, 0x4(r11) -/* 0001A000 00026D90 A8 69 00 98 */ lha r3, 0x98(r9) -/* 0001A004 00026D94 80 09 00 9C */ lwz r0, 0x9c(r9) -/* 0001A008 00026D98 7C 6B 1A 14 */ add r3, r11, r3 -/* 0001A00C 00026D9C 7C 08 03 A6 */ mtlr r0 -/* 0001A010 00026DA0 4E 80 00 21 */ blrl -/* 0001A014 00026DA4 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0001A018 00026DA8 7C 08 03 A6 */ mtlr r0 -/* 0001A01C 00026DAC 38 21 00 08 */ addi r1, r1, 0x8 -/* 0001A020 00026DB0 4E 80 00 20 */ blr -.endfn FindAnimScene__3ICEv - -# .text:0x1A024 | size: 0x1C -.fn GetSceneCount__3ICEv, global -/* 0001A024 00026DB4 3D 20 00 00 */ lis r9, TheAnimDirectory@ha -/* 0001A028 00026DB8 38 60 00 00 */ li r3, 0x0 -/* 0001A02C 00026DBC 81 29 00 00 */ lwz r9, TheAnimDirectory@l(r9) -/* 0001A030 00026DC0 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0001A034 00026DC4 4D 82 00 20 */ beqlr -/* 0001A038 00026DC8 80 69 00 00 */ lwz r3, 0x0(r9) -/* 0001A03C 00026DCC 4E 80 00 20 */ blr -.endfn GetSceneCount__3ICEv - -# .text:0x1A040 | size: 0x38 -.fn GetSceneHash__3ICEUi, global -/* 0001A040 00026DD0 3D 20 00 00 */ lis r9, TheAnimDirectory@ha -/* 0001A044 00026DD4 7C 6B 1B 78 */ mr r11, r3 -/* 0001A048 00026DD8 80 69 00 00 */ lwz r3, TheAnimDirectory@l(r9) -/* 0001A04C 00026DDC 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0001A050 00026DE0 41 82 A0 60 */ beq .L_000140B0 -/* 0001A054 00026DE4 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001A058 00026DE8 7C 00 58 40 */ cmplw r0, r11 -/* 0001A05C 00026DEC 41 81 A0 68 */ bgt .L_000140C4 -/* 0001A060 00026DF0 38 60 00 00 */ li r3, 0x0 -/* 0001A064 00026DF4 4E 80 00 20 */ blr -/* 0001A068 00026DF8 55 69 18 38 */ slwi r9, r11, 3 -/* 0001A06C 00026DFC 7D 29 1A 14 */ add r9, r9, r3 -/* 0001A070 00026E00 80 69 00 04 */ lwz r3, 0x4(r9) -/* 0001A074 00026E04 4E 80 00 20 */ blr -.endfn GetSceneHash__3ICEUi - -# .text:0x1A078 | size: 0xF4 -.fn GetNameOfSceneHash__3ICEUiPc, global -/* 0001A078 00026E08 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 0001A07C 00026E0C 38 00 00 00 */ li r0, 0x0 -/* 0001A080 00026E10 3D 20 00 00 */ lis r9, TheAnimDirectory@ha -/* 0001A084 00026E14 98 04 00 00 */ stb r0, 0x0(r4) -/* 0001A088 00026E18 80 09 00 00 */ lwz r0, TheAnimDirectory@l(r9) -/* 0001A08C 00026E1C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0001A090 00026E20 41 82 A1 64 */ beq .L_000141F4 -/* 0001A094 00026E24 38 E0 00 00 */ li r7, 0x0 -/* 0001A098 00026E28 3C C0 00 00 */ lis r6, TheAnimDirectory@ha -/* 0001A09C 00026E2C 38 A0 00 00 */ li r5, 0x0 -/* 0001A0A0 00026E30 81 46 00 00 */ lwz r10, TheAnimDirectory@l(r6) -/* 0001A0A4 00026E34 80 0A 00 00 */ lwz r0, 0x0(r10) -/* 0001A0A8 00026E38 7C 07 00 40 */ cmplw r7, r0 -/* 0001A0AC 00026E3C 40 80 A1 64 */ bge .L_00014210 -/* 0001A0B0 00026E40 54 E9 18 38 */ slwi r9, r7, 3 -.L_0001A0B4: -/* 0001A0B4 00026E44 39 01 00 08 */ addi r8, r1, 0x8 -/* 0001A0B8 00026E48 7D 29 52 14 */ add r9, r9, r10 -.L_0001A0BC: -/* 0001A0BC 00026E4C 81 69 00 04 */ lwz r11, 0x4(r9) -/* 0001A0C0 00026E50 81 89 00 08 */ lwz r12, 0x8(r9) -/* 0001A0C4 00026E54 91 61 00 08 */ stw r11, 0x8(r1) -/* 0001A0C8 00026E58 91 81 00 0C */ stw r12, 0xc(r1) -/* 0001A0CC 00026E5C 80 01 00 08 */ lwz r0, 0x8(r1) -/* 0001A0D0 00026E60 7C 03 00 00 */ cmpw r3, r0 -/* 0001A0D4 00026E64 40 82 A1 5C */ bne .L_00014230 -/* 0001A0D8 00026E68 89 28 00 07 */ lbz r9, 0x7(r8) -/* 0001A0DC 00026E6C 39 60 00 00 */ li r11, 0x0 -/* 0001A0E0 00026E70 55 29 30 32 */ slwi r9, r9, 6 -/* 0001A0E4 00026E74 39 29 08 08 */ addi r9, r9, 0x808 -/* 0001A0E8 00026E78 7C 0A 48 AE */ lbzx r0, r10, r9 -/* 0001A0EC 00026E7C 7D 0A 4A 14 */ add r8, r10, r9 -/* 0001A0F0 00026E80 2C 00 00 5F */ cmpwi r0, 0x5f -/* 0001A0F4 00026E84 41 82 A1 08 */ beq .L_000141FC -/* 0001A0F8 00026E88 39 6B 00 01 */ addi r11, r11, 0x1 -/* 0001A0FC 00026E8C 7C 08 58 AE */ lbzx r0, r8, r11 -/* 0001A100 00026E90 2C 00 00 5F */ cmpwi r0, 0x5f -/* 0001A104 00026E94 40 82 A0 F8 */ bne .L_000141FC -/* 0001A108 00026E98 39 2B 00 01 */ addi r9, r11, 0x1 -/* 0001A10C 00026E9C 7C 08 48 AE */ lbzx r0, r8, r9 -/* 0001A110 00026EA0 7D 2B 4B 78 */ mr r11, r9 -/* 0001A114 00026EA4 2C 00 00 5F */ cmpwi r0, 0x5f -/* 0001A118 00026EA8 41 82 A1 2C */ beq .L_00014244 -/* 0001A11C 00026EAC 39 6B 00 01 */ addi r11, r11, 0x1 -/* 0001A120 00026EB0 7C 08 58 AE */ lbzx r0, r8, r11 -/* 0001A124 00026EB4 2C 00 00 5F */ cmpwi r0, 0x5f -/* 0001A128 00026EB8 40 82 A1 1C */ bne .L_00014244 -/* 0001A12C 00026EBC 7C 09 58 50 */ subf r0, r9, r11 -/* 0001A130 00026EC0 7D 2B 4B 78 */ mr r11, r9 -/* 0001A134 00026EC4 35 20 FF FF */ subic. r9, r0, 0x1 -/* 0001A138 00026EC8 41 80 A1 54 */ blt .L_0001428C -.L_0001A13C: -/* 0001A13C 00026ECC 7C 08 58 AE */ lbzx r0, r8, r11 -/* 0001A140 00026ED0 35 29 FF FF */ subic. r9, r9, 0x1 -/* 0001A144 00026ED4 39 6B 00 01 */ addi r11, r11, 0x1 -/* 0001A148 00026ED8 98 04 00 00 */ stb r0, 0x0(r4) -/* 0001A14C 00026EDC 38 84 00 01 */ addi r4, r4, 0x1 -/* 0001A150 00026EE0 40 80 A1 3C */ bge .L_0001428C -/* 0001A154 00026EE4 98 A4 00 00 */ stb r5, 0x0(r4) -/* 0001A158 00026EE8 48 01 A1 64 */ b .text+0x1A164 -/* 0001A15C 00026EEC 38 E7 00 01 */ addi r7, r7, 0x1 -/* 0001A160 00026EF0 48 01 A0 A0 */ b .text+0x1A0A0 -/* 0001A164 00026EF4 38 21 00 10 */ addi r1, r1, 0x10 -/* 0001A168 00026EF8 4E 80 00 20 */ blr -.endfn GetNameOfSceneHash__3ICEUiPc - -# .text:0x1A16C | size: 0x68 -.fn FireEventTag__3ICEi, global -/* 0001A16C 00026EFC 94 21 FF B0 */ stwu r1, -0x50(r1) -/* 0001A170 00026F00 7C 08 02 A6 */ mflr r0 -/* 0001A174 00026F04 93 E1 00 4C */ stw r31, 0x4c(r1) -/* 0001A178 00026F08 90 01 00 54 */ stw r0, 0x54(r1) -/* 0001A17C 00026F0C 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@ha -/* 0001A180 00026F10 83 E9 00 00 */ lwz r31, _Q33UTL11Collectionst9Singleton1Z4INIS.mInstance@l(r9) -.L_0001A184: -/* 0001A184 00026F14 2C 1F 00 00 */ cmpwi r31, 0x0 -/* 0001A188 00026F18 41 82 A1 C0 */ beq .L_00014348 -/* 0001A18C 00026F1C 7C 65 1B 78 */ mr r5, r3 -/* 0001A190 00026F20 3C 80 00 00 */ lis r4, .rodata+0xE54@ha -/* 0001A194 00026F24 38 84 0E 54 */ addi r4, r4, .rodata+0xE54@l -/* 0001A198 00026F28 38 61 00 08 */ addi r3, r1, 0x8 -/* 0001A19C 00026F2C 4C C6 31 82 */ crclr cr1eq -/* 0001A1A0 00026F30 48 00 00 01 */ bl bSPrintf__FPcPCce -/* 0001A1A4 00026F34 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 0001A1A8 00026F38 38 81 00 08 */ addi r4, r1, 0x8 -/* 0001A1AC 00026F3C A8 69 00 B8 */ lha r3, 0xb8(r9) -/* 0001A1B0 00026F40 80 09 00 BC */ lwz r0, 0xbc(r9) -/* 0001A1B4 00026F44 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001A1B8 00026F48 7C 08 03 A6 */ mtlr r0 -/* 0001A1BC 00026F4C 4E 80 00 21 */ blrl -/* 0001A1C0 00026F50 80 01 00 54 */ lwz r0, 0x54(r1) -/* 0001A1C4 00026F54 7C 08 03 A6 */ mtlr r0 -/* 0001A1C8 00026F58 83 E1 00 4C */ lwz r31, 0x4c(r1) -/* 0001A1CC 00026F5C 38 21 00 50 */ addi r1, r1, 0x50 -/* 0001A1D0 00026F60 4E 80 00 20 */ blr -.endfn FireEventTag__3ICEi - -# .text:0x1A1D4 | size: 0x94 -# ICECompleteEventTags() -.fn ICECompleteEventTags__Fv, global -/* 0001A1D4 00026F64 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 0001A1D8 00026F68 7C 08 02 A6 */ mflr r0 -/* 0001A1DC 00026F6C BF C1 00 18 */ stmw r30, 0x18(r1) -.L_0001A1E0: -/* 0001A1E0 00026F70 90 01 00 24 */ stw r0, 0x24(r1) -/* 0001A1E4 00026F74 3F C0 00 00 */ lis r30, TheICEManager@ha -/* 0001A1E8 00026F78 38 81 00 08 */ addi r4, r1, 0x8 -/* 0001A1EC 00026F7C 3B DE 00 00 */ addi r30, r30, TheICEManager@l -/* 0001A1F0 00026F80 38 A1 00 0C */ addi r5, r1, 0xc -/* 0001A1F4 00026F84 38 C1 00 10 */ addi r6, r1, 0x10 -/* 0001A1F8 00026F88 7F C3 F3 78 */ mr r3, r30 -/* 0001A1FC 00026F8C 48 01 89 4D */ bl .text+0x1894C -/* 0001A200 00026F90 3D 20 00 00 */ lis r9, .rodata+0xE5C@ha -/* 0001A204 00026F94 C0 21 00 0C */ lfs f1, 0xc(r1) -/* 0001A208 00026F98 C0 01 00 10 */ lfs f0, 0x10(r1) -/* 0001A20C 00026F9C 7F C3 F3 78 */ mr r3, r30 -/* 0001A210 00026FA0 C1 A9 0E 5C */ lfs f13, .rodata+0xE5C@l(r9) -/* 0001A214 00026FA4 EC 21 00 2A */ fadds f1, f1, f0 -/* 0001A218 00026FA8 80 81 00 08 */ lwz r4, 0x8(r1) -/* 0001A21C 00026FAC EC 21 03 72 */ fmuls f1, f1, f13 -/* 0001A220 00026FB0 48 01 84 A5 */ bl .text+0x184A4 -/* 0001A224 00026FB4 81 21 00 08 */ lwz r9, 0x8(r1) -/* 0001A228 00026FB8 3B C3 00 01 */ addi r30, r3, 0x1 -/* 0001A22C 00026FBC 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0001A230 00026FC0 41 82 A2 54 */ beq GetDerivative__CQ23ICE7Cubic1Df -/* 0001A234 00026FC4 AB E9 00 14 */ lha r31, 0x14(r9) -/* 0001A238 00026FC8 7C 1E F8 00 */ cmpw r30, r31 -.L_0001A23C: -/* 0001A23C 00026FCC 40 80 A2 54 */ bge .L_00014490 -/* 0001A240 00026FD0 7F C3 F3 78 */ mr r3, r30 -/* 0001A244 00026FD4 48 01 A1 6D */ bl .text+0x1A16C -/* 0001A248 00026FD8 3B DE 00 01 */ addi r30, r30, 0x1 -/* 0001A24C 00026FDC 7C 1E F8 00 */ cmpw r30, r31 -/* 0001A250 00026FE0 41 80 A2 40 */ blt .L_00014490 -/* 0001A254 00026FE4 80 01 00 24 */ lwz r0, 0x24(r1) -/* 0001A258 00026FE8 7C 08 03 A6 */ mtlr r0 -/* 0001A25C 00026FEC BB C1 00 18 */ lmw r30, 0x18(r1) -/* 0001A260 00026FF0 38 21 00 20 */ addi r1, r1, 0x20 -/* 0001A264 00026FF4 4E 80 00 20 */ blr -.endfn ICECompleteEventTags__Fv - -# .text:0x1A268 | size: 0x60 -.fn find__H2ZQ24_STLt14_List_iterator2ZPCQ26Attrib10CollectionZQ24_STLt16_Nonconst_traits1ZPCQ26Attrib10CollectionZPCQ26Attrib10Collection_4_STLX01X01RCX11_X01, weak -/* 0001A268 00026FF8 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0001A26C 00026FFC 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001A270 00027000 81 24 00 00 */ lwz r9, 0x0(r4) -/* 0001A274 00027004 90 01 00 10 */ stw r0, 0x10(r1) -/* 0001A278 00027008 7C 0A 03 78 */ mr r10, r0 -/* 0001A27C 0002700C 91 21 00 08 */ stw r9, 0x8(r1) -/* 0001A280 00027010 80 01 00 08 */ lwz r0, 0x8(r1) -/* 0001A284 00027014 39 20 00 01 */ li r9, 0x1 -/* 0001A288 00027018 7C 0B 03 78 */ mr r11, r0 -/* 0001A28C 0002701C 7C 00 50 00 */ cmpw r0, r10 -/* 0001A290 00027020 40 82 A2 98 */ bne .L_00014528 -/* 0001A294 00027024 39 20 00 00 */ li r9, 0x0 -/* 0001A298 00027028 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0001A29C 0002702C 41 82 A2 BC */ beq .L_00014558 -/* 0001A2A0 00027030 81 2B 00 08 */ lwz r9, 0x8(r11) -/* 0001A2A4 00027034 80 06 00 00 */ lwz r0, 0x0(r6) -/* 0001A2A8 00027038 7C 09 00 00 */ cmpw r9, r0 -/* 0001A2AC 0002703C 41 82 A2 BC */ beq .L_00014568 -/* 0001A2B0 00027040 80 0B 00 00 */ lwz r0, 0x0(r11) -/* 0001A2B4 00027044 90 01 00 08 */ stw r0, 0x8(r1) -/* 0001A2B8 00027048 48 01 A2 80 */ b .text+0x1A280 -/* 0001A2BC 0002704C 91 63 00 00 */ stw r11, 0x0(r3) -/* 0001A2C0 00027050 38 21 00 18 */ addi r1, r1, 0x18 -/* 0001A2C4 00027054 4E 80 00 20 */ blr -.endfn find__H2ZQ24_STLt14_List_iterator2ZPCQ26Attrib10CollectionZQ24_STLt16_Nonconst_traits1ZPCQ26Attrib10CollectionZPCQ26Attrib10Collection_4_STLX01X01RCX11_X01 - -# .text:0x1A2C8 | size: 0x60 -.fn find__H2ZQ24_STLt14_List_iterator2ZPCQ26Attrib5ClassZQ24_STLt16_Nonconst_traits1ZPCQ26Attrib5ClassZPCQ26Attrib5Class_4_STLX01X01RCX11_X01, weak -/* 0001A2C8 00027058 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0001A2CC 0002705C 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001A2D0 00027060 81 24 00 00 */ lwz r9, 0x0(r4) -/* 0001A2D4 00027064 90 01 00 10 */ stw r0, 0x10(r1) -/* 0001A2D8 00027068 7C 0A 03 78 */ mr r10, r0 -/* 0001A2DC 0002706C 91 21 00 08 */ stw r9, 0x8(r1) -/* 0001A2E0 00027070 80 01 00 08 */ lwz r0, 0x8(r1) -/* 0001A2E4 00027074 39 20 00 01 */ li r9, 0x1 -/* 0001A2E8 00027078 7C 0B 03 78 */ mr r11, r0 -/* 0001A2EC 0002707C 7C 00 50 00 */ cmpw r0, r10 -/* 0001A2F0 00027080 40 82 A2 F8 */ bne .L_000145E8 -/* 0001A2F4 00027084 39 20 00 00 */ li r9, 0x0 -/* 0001A2F8 00027088 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0001A2FC 0002708C 41 82 A3 1C */ beq .L_00014618 -/* 0001A300 00027090 81 2B 00 08 */ lwz r9, 0x8(r11) -/* 0001A304 00027094 80 06 00 00 */ lwz r0, 0x0(r6) -/* 0001A308 00027098 7C 09 00 00 */ cmpw r9, r0 -/* 0001A30C 0002709C 41 82 A3 1C */ beq .L_00014628 -/* 0001A310 000270A0 80 0B 00 00 */ lwz r0, 0x0(r11) -/* 0001A314 000270A4 90 01 00 08 */ stw r0, 0x8(r1) -/* 0001A318 000270A8 48 01 A2 E0 */ b .text+0x1A2E0 -/* 0001A31C 000270AC 91 63 00 00 */ stw r11, 0x0(r3) -.L_0001A320: -/* 0001A320 000270B0 38 21 00 18 */ addi r1, r1, 0x18 -/* 0001A324 000270B4 4E 80 00 20 */ blr -.endfn find__H2ZQ24_STLt14_List_iterator2ZPCQ26Attrib5ClassZQ24_STLt16_Nonconst_traits1ZPCQ26Attrib5ClassZPCQ26Attrib5Class_4_STLX01X01RCX11_X01 - -# .text:0x1A328 | size: 0x6C -.fn _M_erase__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescPQ24_STLt13_Rb_tree_node1ZQ26Attrib8TypeDesc, weak -/* 0001A328 000270B8 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 0001A32C 000270BC 7C 08 02 A6 */ mflr r0 -/* 0001A330 000270C0 BF 61 00 0C */ stmw r27, 0xc(r1) -/* 0001A334 000270C4 90 01 00 24 */ stw r0, 0x24(r1) -/* 0001A338 000270C8 7C 7D 1B 78 */ mr r29, r3 -/* 0001A33C 000270CC 7C 9F 23 79 */ mr. r31, r4 -.L_0001A340: -/* 0001A340 000270D0 41 82 A3 80 */ beq .L_000146C0 -/* 0001A344 000270D4 3F 60 00 00 */ lis r27, gFastMem@ha -/* 0001A348 000270D8 3F 80 00 00 */ lis r28, .rodata+0x1BC@ha -/* 0001A34C 000270DC 80 9F 00 0C */ lwz r4, 0xc(r31) -/* 0001A350 000270E0 7F A3 EB 78 */ mr r3, r29 -/* 0001A354 000270E4 48 00 00 01 */ bl _M_erase__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescPQ24_STLt13_Rb_tree_node1ZQ26Attrib8TypeDesc -/* 0001A358 000270E8 83 DF 00 08 */ lwz r30, 0x8(r31) -/* 0001A35C 000270EC 2C 1F 00 00 */ cmpwi r31, 0x0 -.L_0001A360: -/* 0001A360 000270F0 41 82 A3 78 */ beq .L_000146D8 -/* 0001A364 000270F4 7F E4 FB 78 */ mr r4, r31 -/* 0001A368 000270F8 38 7B 00 00 */ addi r3, r27, gFastMem@l -.L_0001A36C: -/* 0001A36C 000270FC 38 A0 00 24 */ li r5, 0x24 -/* 0001A370 00027100 38 DC 01 BC */ addi r6, r28, .rodata+0x1BC@l -/* 0001A374 00027104 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 0001A378 00027108 7F DF F3 79 */ mr. r31, r30 -.L_0001A37C: -/* 0001A37C 0002710C 40 82 A3 4C */ bne .L_000146C8 -/* 0001A380 00027110 80 01 00 24 */ lwz r0, 0x24(r1) -/* 0001A384 00027114 7C 08 03 A6 */ mtlr r0 -/* 0001A388 00027118 BB 61 00 0C */ lmw r27, 0xc(r1) -/* 0001A38C 0002711C 38 21 00 20 */ addi r1, r1, 0x20 -/* 0001A390 00027120 4E 80 00 20 */ blr -.endfn _M_erase__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescPQ24_STLt13_Rb_tree_node1ZQ26Attrib8TypeDesc - -# .text:0x1A394 | size: 0x7C -.fn clear__Q24_STLt10_List_base2ZPCQ26Attrib10CollectionZQ24_STLt9allocator1ZPCQ26Attrib10Collection, weak -/* 0001A394 00027124 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0001A398 00027128 7C 08 02 A6 */ mflr r0 -/* 0001A39C 0002712C BF 81 00 08 */ stmw r28, 0x8(r1) -/* 0001A3A0 00027130 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0001A3A4 00027134 7C 7E 1B 78 */ mr r30, r3 -/* 0001A3A8 00027138 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0001A3AC 0002713C 83 E9 00 00 */ lwz r31, 0x0(r9) -/* 0001A3B0 00027140 7C 1F 48 00 */ cmpw r31, r9 -/* 0001A3B4 00027144 41 82 A3 EC */ beq .L_000147A0 -/* 0001A3B8 00027148 3F 80 00 00 */ lis r28, gFastMem@ha -/* 0001A3BC 0002714C 3F A0 00 00 */ lis r29, .rodata+0x1BC@ha -/* 0001A3C0 00027150 7F E4 FB 78 */ mr r4, r31 -/* 0001A3C4 00027154 83 FF 00 00 */ lwz r31, 0x0(r31) -/* 0001A3C8 00027158 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0001A3CC 0002715C 41 82 A3 E0 */ beq .L_000147AC -/* 0001A3D0 00027160 38 7C 00 00 */ addi r3, r28, gFastMem@l -/* 0001A3D4 00027164 38 A0 00 0C */ li r5, 0xc -/* 0001A3D8 00027168 38 DD 01 BC */ addi r6, r29, .rodata+0x1BC@l -/* 0001A3DC 0002716C 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 0001A3E0 00027170 80 1E 00 04 */ lwz r0, 0x4(r30) -/* 0001A3E4 00027174 7C 1F 00 00 */ cmpw r31, r0 -/* 0001A3E8 00027178 40 82 A3 C0 */ bne .L_000147A8 -/* 0001A3EC 0002717C 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0001A3F0 00027180 91 29 00 00 */ stw r9, 0x0(r9) -/* 0001A3F4 00027184 81 7E 00 04 */ lwz r11, 0x4(r30) -/* 0001A3F8 00027188 91 6B 00 04 */ stw r11, 0x4(r11) -/* 0001A3FC 0002718C 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0001A400 00027190 7C 08 03 A6 */ mtlr r0 -/* 0001A404 00027194 BB 81 00 08 */ lmw r28, 0x8(r1) -/* 0001A408 00027198 38 21 00 18 */ addi r1, r1, 0x18 -/* 0001A40C 0002719C 4E 80 00 20 */ blr -.endfn clear__Q24_STLt10_List_base2ZPCQ26Attrib10CollectionZQ24_STLt9allocator1ZPCQ26Attrib10Collection - -# .text:0x1A410 | size: 0x7C -.fn clear__Q24_STLt10_List_base2ZPCQ26Attrib5ClassZQ24_STLt9allocator1ZPCQ26Attrib5Class, weak -/* 0001A410 000271A0 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0001A414 000271A4 7C 08 02 A6 */ mflr r0 -/* 0001A418 000271A8 BF 81 00 08 */ stmw r28, 0x8(r1) -/* 0001A41C 000271AC 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0001A420 000271B0 7C 7E 1B 78 */ mr r30, r3 -/* 0001A424 000271B4 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0001A428 000271B8 83 E9 00 00 */ lwz r31, 0x0(r9) -/* 0001A42C 000271BC 7C 1F 48 00 */ cmpw r31, r9 -/* 0001A430 000271C0 41 82 A4 68 */ beq .L_00014898 -/* 0001A434 000271C4 3F 80 00 00 */ lis r28, gFastMem@ha -/* 0001A438 000271C8 3F A0 00 00 */ lis r29, .rodata+0x1BC@ha -/* 0001A43C 000271CC 7F E4 FB 78 */ mr r4, r31 -/* 0001A440 000271D0 83 FF 00 00 */ lwz r31, 0x0(r31) -/* 0001A444 000271D4 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0001A448 000271D8 41 82 A4 5C */ beq .L_000148A4 -/* 0001A44C 000271DC 38 7C 00 00 */ addi r3, r28, gFastMem@l -/* 0001A450 000271E0 38 A0 00 0C */ li r5, 0xc -/* 0001A454 000271E4 38 DD 01 BC */ addi r6, r29, .rodata+0x1BC@l -/* 0001A458 000271E8 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 0001A45C 000271EC 80 1E 00 04 */ lwz r0, 0x4(r30) -/* 0001A460 000271F0 7C 1F 00 00 */ cmpw r31, r0 -/* 0001A464 000271F4 40 82 A4 3C */ bne .L_000148A0 -/* 0001A468 000271F8 81 3E 00 04 */ lwz r9, 0x4(r30) -.L_0001A46C: -/* 0001A46C 000271FC 91 29 00 00 */ stw r9, 0x0(r9) -/* 0001A470 00027200 81 7E 00 04 */ lwz r11, 0x4(r30) -/* 0001A474 00027204 91 6B 00 04 */ stw r11, 0x4(r11) -/* 0001A478 00027208 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0001A47C 0002720C 7C 08 03 A6 */ mtlr r0 -/* 0001A480 00027210 BB 81 00 08 */ lmw r28, 0x8(r1) -.L_0001A484: -/* 0001A484 00027214 38 21 00 18 */ addi r1, r1, 0x18 -/* 0001A488 00027218 4E 80 00 20 */ blr -.endfn clear__Q24_STLt10_List_base2ZPCQ26Attrib5ClassZQ24_STLt9allocator1ZPCQ26Attrib5Class - -# .text:0x1A48C | size: 0x120 -.fn reserve__Q24_STLt6vector2ZPCQ26Attrib8TypeDescZQ24_STLt9allocator1ZPCQ26Attrib8TypeDescUi, weak -/* 0001A48C 0002721C 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 0001A490 00027220 7C 08 02 A6 */ mflr r0 -/* 0001A494 00027224 BF 41 00 08 */ stmw r26, 0x8(r1) -/* 0001A498 00027228 90 01 00 24 */ stw r0, 0x24(r1) -/* 0001A49C 0002722C 7C 7C 1B 78 */ mr r28, r3 -/* 0001A4A0 00027230 83 BC 00 00 */ lwz r29, 0x0(r28) -/* 0001A4A4 00027234 80 1C 00 0C */ lwz r0, 0xc(r28) -/* 0001A4A8 00027238 7C 1D 00 50 */ subf r0, r29, r0 -/* 0001A4AC 0002723C 7C 00 16 70 */ srawi r0, r0, 2 -/* 0001A4B0 00027240 7C 00 20 40 */ cmplw r0, r4 -/* 0001A4B4 00027244 40 80 A5 98 */ bge .L_00014A4C -/* 0001A4B8 00027248 83 7C 00 04 */ lwz r27, 0x4(r28) -/* 0001A4BC 0002724C 2C 1D 00 00 */ cmpwi r29, 0x0 -/* 0001A4C0 00027250 7C 1D D8 50 */ subf r0, r29, r27 -/* 0001A4C4 00027254 7C 1A 16 70 */ srawi r26, r0, 2 -/* 0001A4C8 00027258 41 82 A5 4C */ beq .L_00014A14 -.L_0001A4CC: -/* 0001A4CC 0002725C 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0001A4D0 00027260 41 82 A4 F8 */ beq .L_000149C8 -/* 0001A4D4 00027264 54 9E 10 3A */ slwi r30, r4, 2 -/* 0001A4D8 00027268 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0001A4DC 0002726C 3C A0 00 00 */ lis r5, .rodata+0x1BC@ha -/* 0001A4E0 00027270 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0001A4E4 00027274 38 A5 01 BC */ addi r5, r5, .rodata+0x1BC@l -/* 0001A4E8 00027278 7F C4 F3 78 */ mr r4, r30 -/* 0001A4EC 0002727C 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 0001A4F0 00027280 7C 7F 1B 78 */ mr r31, r3 -/* 0001A4F4 00027284 48 01 A5 00 */ b .text+0x1A500 -/* 0001A4F8 00027288 3B E0 00 00 */ li r31, 0x0 -/* 0001A4FC 0002728C 3B C0 00 00 */ li r30, 0x0 -/* 0001A500 00027290 7C 1B E8 00 */ cmpw r27, r29 -/* 0001A504 00027294 41 82 A5 18 */ beq .L_00014A1C -/* 0001A508 00027298 7F A4 EB 78 */ mr r4, r29 -/* 0001A50C 0002729C 7F E3 FB 78 */ mr r3, r31 -/* 0001A510 000272A0 7C A4 D8 50 */ subf r5, r4, r27 -/* 0001A514 000272A4 48 00 00 01 */ bl memmove -/* 0001A518 000272A8 80 9C 00 00 */ lwz r4, 0x0(r28) -/* 0001A51C 000272AC 80 1C 00 0C */ lwz r0, 0xc(r28) -/* 0001A520 000272B0 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0001A524 000272B4 7C 04 00 50 */ subf r0, r4, r0 -/* 0001A528 000272B8 7C 00 16 70 */ srawi r0, r0, 2 -.L_0001A52C: -/* 0001A52C 000272BC 41 82 A5 80 */ beq .L_00014AAC -/* 0001A530 000272C0 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0001A534 000272C4 3C C0 00 00 */ lis r6, .rodata+0x1BC@ha -/* 0001A538 000272C8 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0001A53C 000272CC 54 05 10 3A */ slwi r5, r0, 2 -/* 0001A540 000272D0 38 C6 01 BC */ addi r6, r6, .rodata+0x1BC@l -/* 0001A544 000272D4 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 0001A548 000272D8 48 01 A5 80 */ b .text+0x1A580 -/* 0001A54C 000272DC 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0001A550 000272E0 41 82 A5 74 */ beq .L_00014AC4 -/* 0001A554 000272E4 54 9E 10 3A */ slwi r30, r4, 2 -/* 0001A558 000272E8 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0001A55C 000272EC 3C A0 00 00 */ lis r5, .rodata+0x1BC@ha -/* 0001A560 000272F0 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0001A564 000272F4 38 A5 01 BC */ addi r5, r5, .rodata+0x1BC@l -/* 0001A568 000272F8 7F C4 F3 78 */ mr r4, r30 -.L_0001A56C: -/* 0001A56C 000272FC 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 0001A570 00027300 48 01 A5 7C */ b .text+0x1A57C -/* 0001A574 00027304 38 60 00 00 */ li r3, 0x0 -/* 0001A578 00027308 3B C0 00 00 */ li r30, 0x0 -/* 0001A57C 0002730C 7C 7F 1B 78 */ mr r31, r3 -/* 0001A580 00027310 57 40 10 3A */ slwi r0, r26, 2 -/* 0001A584 00027314 7D 3E FA 14 */ add r9, r30, r31 -/* 0001A588 00027318 7C 00 FA 14 */ add r0, r0, r31 -.L_0001A58C: -/* 0001A58C 0002731C 91 3C 00 0C */ stw r9, 0xc(r28) -/* 0001A590 00027320 93 FC 00 00 */ stw r31, 0x0(r28) -/* 0001A594 00027324 90 1C 00 04 */ stw r0, 0x4(r28) -/* 0001A598 00027328 80 01 00 24 */ lwz r0, 0x24(r1) -/* 0001A59C 0002732C 7C 08 03 A6 */ mtlr r0 -/* 0001A5A0 00027330 BB 41 00 08 */ lmw r26, 0x8(r1) -/* 0001A5A4 00027334 38 21 00 20 */ addi r1, r1, 0x20 -/* 0001A5A8 00027338 4E 80 00 20 */ blr -.endfn reserve__Q24_STLt6vector2ZPCQ26Attrib8TypeDescZQ24_STLt9allocator1ZPCQ26Attrib8TypeDescUi - -# .text:0x1A5AC | size: 0x174 -.fn _M_insert__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescPQ24_STL18_Rb_tree_node_baseT1RCQ26Attrib8TypeDescT1, weak -/* 0001A5AC 0002733C 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0001A5B0 00027340 7C 08 02 A6 */ mflr r0 -/* 0001A5B4 00027344 BF 81 00 08 */ stmw r28, 0x8(r1) -/* 0001A5B8 00027348 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0001A5BC 0002734C 7C 9D 23 78 */ mr r29, r4 -/* 0001A5C0 00027350 7C DE 33 78 */ mr r30, r6 -/* 0001A5C4 00027354 80 1D 00 04 */ lwz r0, 0x4(r29) -/* 0001A5C8 00027358 7C 7C 1B 78 */ mr r28, r3 -/* 0001A5CC 0002735C 7C FF 3B 78 */ mr r31, r7 -/* 0001A5D0 00027360 7C 1E 00 00 */ cmpw r30, r0 -/* 0001A5D4 00027364 41 82 A5 F8 */ beq .L_00014BCC -/* 0001A5D8 00027368 2C 08 00 00 */ cmpwi r8, 0x0 -/* 0001A5DC 0002736C 40 82 A6 74 */ bne .L_00014C50 -/* 0001A5E0 00027370 2C 05 00 00 */ cmpwi r5, 0x0 -/* 0001A5E4 00027374 40 82 A5 F8 */ bne .L_00014BDC -/* 0001A5E8 00027378 81 3F 00 00 */ lwz r9, 0x0(r31) -/* 0001A5EC 0002737C 80 1E 00 10 */ lwz r0, 0x10(r30) -/* 0001A5F0 00027380 7C 09 00 40 */ cmplw r9, r0 -/* 0001A5F4 00027384 40 80 A6 74 */ bge .L_00014C68 -/* 0001A5F8 00027388 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0001A5FC 0002738C 3C A0 00 00 */ lis r5, .rodata+0x1BC@ha -.L_0001A600: -/* 0001A600 00027390 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0001A604 00027394 38 A5 01 BC */ addi r5, r5, .rodata+0x1BC@l -/* 0001A608 00027398 38 80 00 24 */ li r4, 0x24 -/* 0001A60C 0002739C 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 0001A610 000273A0 35 03 00 10 */ addic. r8, r3, 0x10 -/* 0001A614 000273A4 41 82 A6 40 */ beq .L_00014C54 -/* 0001A618 000273A8 80 1F 00 00 */ lwz r0, 0x0(r31) -/* 0001A61C 000273AC 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 0001A620 000273B0 81 7F 00 08 */ lwz r11, 0x8(r31) -/* 0001A624 000273B4 81 5F 00 0C */ lwz r10, 0xc(r31) -/* 0001A628 000273B8 90 03 00 10 */ stw r0, 0x10(r3) -/* 0001A62C 000273BC 91 28 00 04 */ stw r9, 0x4(r8) -/* 0001A630 000273C0 91 68 00 08 */ stw r11, 0x8(r8) -/* 0001A634 000273C4 91 48 00 0C */ stw r10, 0xc(r8) -/* 0001A638 000273C8 80 1F 00 10 */ lwz r0, 0x10(r31) -/* 0001A63C 000273CC 90 08 00 10 */ stw r0, 0x10(r8) -/* 0001A640 000273D0 7C 7F 1B 78 */ mr r31, r3 -/* 0001A644 000273D4 93 FE 00 08 */ stw r31, 0x8(r30) -/* 0001A648 000273D8 81 3D 00 04 */ lwz r9, 0x4(r29) -/* 0001A64C 000273DC 7C 1E 48 00 */ cmpw r30, r9 -/* 0001A650 000273E0 40 82 A6 60 */ bne .L_00014CB0 -/* 0001A654 000273E4 93 FE 00 04 */ stw r31, 0x4(r30) -/* 0001A658 000273E8 81 3D 00 04 */ lwz r9, 0x4(r29) -/* 0001A65C 000273EC 48 01 A6 D4 */ b .text+0x1A6D4 -/* 0001A660 000273F0 80 09 00 08 */ lwz r0, 0x8(r9) -/* 0001A664 000273F4 7C 1E 00 00 */ cmpw r30, r0 -/* 0001A668 000273F8 40 82 A6 D8 */ bne .L_00014D40 -/* 0001A66C 000273FC 93 E9 00 08 */ stw r31, 0x8(r9) -/* 0001A670 00027400 48 01 A6 D8 */ b .text+0x1A6D8 -/* 0001A674 00027404 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0001A678 00027408 3C A0 00 00 */ lis r5, .rodata+0x1BC@ha -/* 0001A67C 0002740C 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0001A680 00027410 38 A5 01 BC */ addi r5, r5, .rodata+0x1BC@l -/* 0001A684 00027414 38 80 00 24 */ li r4, 0x24 -/* 0001A688 00027418 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 0001A68C 0002741C 35 03 00 10 */ addic. r8, r3, 0x10 -/* 0001A690 00027420 41 82 A6 BC */ beq .L_00014D4C -/* 0001A694 00027424 80 1F 00 00 */ lwz r0, 0x0(r31) -/* 0001A698 00027428 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 0001A69C 0002742C 81 7F 00 08 */ lwz r11, 0x8(r31) -/* 0001A6A0 00027430 81 5F 00 0C */ lwz r10, 0xc(r31) -/* 0001A6A4 00027434 90 03 00 10 */ stw r0, 0x10(r3) -/* 0001A6A8 00027438 91 28 00 04 */ stw r9, 0x4(r8) -/* 0001A6AC 0002743C 91 68 00 08 */ stw r11, 0x8(r8) -/* 0001A6B0 00027440 91 48 00 0C */ stw r10, 0xc(r8) -/* 0001A6B4 00027444 80 1F 00 10 */ lwz r0, 0x10(r31) -/* 0001A6B8 00027448 90 08 00 10 */ stw r0, 0x10(r8) -/* 0001A6BC 0002744C 7C 7F 1B 78 */ mr r31, r3 -/* 0001A6C0 00027450 93 FE 00 0C */ stw r31, 0xc(r30) -/* 0001A6C4 00027454 81 3D 00 04 */ lwz r9, 0x4(r29) -/* 0001A6C8 00027458 80 09 00 0C */ lwz r0, 0xc(r9) -/* 0001A6CC 0002745C 7C 1E 00 00 */ cmpw r30, r0 -/* 0001A6D0 00027460 40 82 A6 D8 */ bne .L_00014DA8 -/* 0001A6D4 00027464 93 E9 00 0C */ stw r31, 0xc(r9) -/* 0001A6D8 00027468 38 00 00 00 */ li r0, 0x0 -/* 0001A6DC 0002746C 93 DF 00 04 */ stw r30, 0x4(r31) -/* 0001A6E0 00027470 90 1F 00 0C */ stw r0, 0xc(r31) -/* 0001A6E4 00027474 7F E3 FB 78 */ mr r3, r31 -/* 0001A6E8 00027478 90 1F 00 08 */ stw r0, 0x8(r31) -/* 0001A6EC 0002747C 80 9D 00 04 */ lwz r4, 0x4(r29) -/* 0001A6F0 00027480 38 84 00 04 */ addi r4, r4, 0x4 -/* 0001A6F4 00027484 48 00 00 01 */ bl _Rebalance__Q24_STLt10_Rb_global1ZbPQ24_STL18_Rb_tree_node_baseRPQ24_STL18_Rb_tree_node_base -/* 0001A6F8 00027488 81 3D 00 08 */ lwz r9, 0x8(r29) -/* 0001A6FC 0002748C 7F 83 E3 78 */ mr r3, r28 -/* 0001A700 00027490 39 29 00 01 */ addi r9, r9, 0x1 -.L_0001A704: -/* 0001A704 00027494 91 3D 00 08 */ stw r9, 0x8(r29) -/* 0001A708 00027498 93 FC 00 00 */ stw r31, 0x0(r28) -/* 0001A70C 0002749C 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0001A710 000274A0 7C 08 03 A6 */ mtlr r0 -/* 0001A714 000274A4 BB 81 00 08 */ lmw r28, 0x8(r1) -/* 0001A718 000274A8 38 21 00 18 */ addi r1, r1, 0x18 -/* 0001A71C 000274AC 4E 80 00 20 */ blr -.endfn _M_insert__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescPQ24_STL18_Rb_tree_node_baseT1RCQ26Attrib8TypeDescT1 - -# .text:0x1A720 | size: 0x118 -.fn insert_unique__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescRCQ26Attrib8TypeDesc, weak -/* 0001A720 000274B0 94 21 FF C8 */ stwu r1, -0x38(r1) -/* 0001A724 000274B4 7C 08 02 A6 */ mflr r0 -/* 0001A728 000274B8 BF 61 00 24 */ stmw r27, 0x24(r1) -/* 0001A72C 000274BC 90 01 00 3C */ stw r0, 0x3c(r1) -/* 0001A730 000274C0 7C 9C 23 78 */ mr r28, r4 -/* 0001A734 000274C4 7C 7D 1B 78 */ mr r29, r3 -/* 0001A738 000274C8 83 FC 00 04 */ lwz r31, 0x4(r28) -/* 0001A73C 000274CC 7C BB 2B 78 */ mr r27, r5 -/* 0001A740 000274D0 38 00 00 01 */ li r0, 0x1 -/* 0001A744 000274D4 83 DF 00 04 */ lwz r30, 0x4(r31) -/* 0001A748 000274D8 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 0001A74C 000274DC 41 82 A7 80 */ beq .L_00014ECC -/* 0001A750 000274E0 81 3B 00 00 */ lwz r9, 0x0(r27) -/* 0001A754 000274E4 7F DF F3 78 */ mr r31, r30 -/* 0001A758 000274E8 80 1F 00 10 */ lwz r0, 0x10(r31) -/* 0001A75C 000274EC 7C 00 48 10 */ subfc r0, r0, r9 -/* 0001A760 000274F0 7C 00 01 10 */ subfe r0, r0, r0 -.L_0001A764: -/* 0001A764 000274F4 7C 00 00 D1 */ neg. r0, r0 -/* 0001A768 000274F8 41 82 A7 74 */ beq .L_00014EDC -/* 0001A76C 000274FC 83 DF 00 08 */ lwz r30, 0x8(r31) -/* 0001A770 00027500 48 01 A7 78 */ b .text+0x1A778 -/* 0001A774 00027504 83 DF 00 0C */ lwz r30, 0xc(r31) -/* 0001A778 00027508 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 0001A77C 0002750C 40 82 A7 54 */ bne .L_00014ED0 -/* 0001A780 00027510 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0001A784 00027514 93 E1 00 08 */ stw r31, 0x8(r1) -/* 0001A788 00027518 41 82 A7 D0 */ beq .L_00014F58 -/* 0001A78C 0002751C 81 3C 00 04 */ lwz r9, 0x4(r28) -/* 0001A790 00027520 80 09 00 08 */ lwz r0, 0x8(r9) -/* 0001A794 00027524 7C 1F 00 00 */ cmpw r31, r0 -/* 0001A798 00027528 90 01 00 10 */ stw r0, 0x10(r1) -/* 0001A79C 0002752C 40 82 A7 C4 */ bne .L_00014F60 -/* 0001A7A0 00027530 7F 84 E3 78 */ mr r4, r28 -/* 0001A7A4 00027534 7F C5 F3 78 */ mr r5, r30 -/* 0001A7A8 00027538 7F E6 FB 78 */ mr r6, r31 -/* 0001A7AC 0002753C 7F 67 DB 78 */ mr r7, r27 -/* 0001A7B0 00027540 38 61 00 18 */ addi r3, r1, 0x18 -/* 0001A7B4 00027544 39 00 00 00 */ li r8, 0x0 -/* 0001A7B8 00027548 48 00 00 01 */ bl _M_insert__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescPQ24_STL18_Rb_tree_node_baseT1RCQ26Attrib8TypeDescT1 -.L_0001A7BC: -/* 0001A7BC 0002754C 81 21 00 18 */ lwz r9, 0x18(r1) -/* 0001A7C0 00027550 48 01 A8 04 */ b .text+0x1A804 -/* 0001A7C4 00027554 7F E3 FB 78 */ mr r3, r31 -/* 0001A7C8 00027558 48 00 00 01 */ bl _M_decrement__Q24_STLt10_Rb_global1ZbPQ24_STL18_Rb_tree_node_base -/* 0001A7CC 0002755C 90 61 00 08 */ stw r3, 0x8(r1) -/* 0001A7D0 00027560 81 61 00 08 */ lwz r11, 0x8(r1) -/* 0001A7D4 00027564 81 3B 00 00 */ lwz r9, 0x0(r27) -/* 0001A7D8 00027568 80 0B 00 10 */ lwz r0, 0x10(r11) -/* 0001A7DC 0002756C 7C 00 48 40 */ cmplw r0, r9 -/* 0001A7E0 00027570 40 80 A8 14 */ bge .L_00014FF4 -/* 0001A7E4 00027574 7F 84 E3 78 */ mr r4, r28 -/* 0001A7E8 00027578 7F C5 F3 78 */ mr r5, r30 -/* 0001A7EC 0002757C 7F E6 FB 78 */ mr r6, r31 -/* 0001A7F0 00027580 7F 67 DB 78 */ mr r7, r27 -.L_0001A7F4: -/* 0001A7F4 00027584 38 61 00 10 */ addi r3, r1, 0x10 -/* 0001A7F8 00027588 39 00 00 00 */ li r8, 0x0 -/* 0001A7FC 0002758C 48 00 00 01 */ bl _M_insert__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescPQ24_STL18_Rb_tree_node_baseT1RCQ26Attrib8TypeDescT1 -/* 0001A800 00027590 81 21 00 10 */ lwz r9, 0x10(r1) -/* 0001A804 00027594 38 00 00 01 */ li r0, 0x1 -.L_0001A808: -/* 0001A808 00027598 90 1D 00 04 */ stw r0, 0x4(r29) -/* 0001A80C 0002759C 91 3D 00 00 */ stw r9, 0x0(r29) -/* 0001A810 000275A0 48 01 A8 20 */ b .text+0x1A820 -.L_0001A814: -/* 0001A814 000275A4 38 00 00 00 */ li r0, 0x0 -/* 0001A818 000275A8 91 7D 00 00 */ stw r11, 0x0(r29) -/* 0001A81C 000275AC 90 1D 00 04 */ stw r0, 0x4(r29) -/* 0001A820 000275B0 7F A3 EB 78 */ mr r3, r29 -/* 0001A824 000275B4 80 01 00 3C */ lwz r0, 0x3c(r1) -/* 0001A828 000275B8 7C 08 03 A6 */ mtlr r0 -.L_0001A82C: -/* 0001A82C 000275BC BB 61 00 24 */ lmw r27, 0x24(r1) -/* 0001A830 000275C0 38 21 00 38 */ addi r1, r1, 0x38 -/* 0001A834 000275C4 4E 80 00 20 */ blr -.endfn insert_unique__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescRCQ26Attrib8TypeDesc - -# .text:0x1A838 | size: 0xB0 -.fn find__H2ZPP14ICollisionBodyZP14ICollisionBody_4_STLX01X01RCX11_X01, weak -/* 0001A838 000275C8 7C 03 20 50 */ subf r0, r3, r4 -/* 0001A83C 000275CC 7C 0B 26 71 */ srawi. r11, r0, 4 -/* 0001A840 000275D0 40 81 A8 84 */ ble .L_000150C4 -/* 0001A844 000275D4 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001A848 000275D8 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001A84C 000275DC 7C 00 48 00 */ cmpw r0, r9 -/* 0001A850 000275E0 4D 82 00 20 */ beqlr -/* 0001A854 000275E4 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001A858 000275E8 7C 00 48 00 */ cmpw r0, r9 -/* 0001A85C 000275EC 4D 82 00 20 */ beqlr -/* 0001A860 000275F0 84 03 00 04 */ lwzu r0, 0x4(r3) -.L_0001A864: -/* 0001A864 000275F4 7C 00 48 00 */ cmpw r0, r9 -/* 0001A868 000275F8 4D 82 00 20 */ beqlr -/* 0001A86C 000275FC 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001A870 00027600 7C 00 48 00 */ cmpw r0, r9 -/* 0001A874 00027604 4D 82 00 20 */ beqlr -/* 0001A878 00027608 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001A87C 0002760C 35 6B FF FF */ subic. r11, r11, 0x1 -/* 0001A880 00027610 41 81 A8 48 */ bgt .L_000150C8 -/* 0001A884 00027614 7C 03 20 50 */ subf r0, r3, r4 -/* 0001A888 00027618 7C 00 16 70 */ srawi r0, r0, 2 -/* 0001A88C 0002761C 2C 00 00 01 */ cmpwi r0, 0x1 -/* 0001A890 00027620 41 82 A8 D0 */ beq .L_00015160 -/* 0001A894 00027624 40 81 A8 E0 */ ble .L_00015174 -/* 0001A898 00027628 2C 00 00 02 */ cmpwi r0, 0x2 -/* 0001A89C 0002762C 41 82 A8 BC */ beq .L_00015158 -/* 0001A8A0 00027630 2C 00 00 03 */ cmpwi r0, 0x3 -/* 0001A8A4 00027634 40 82 A8 E0 */ bne .L_00015184 -/* 0001A8A8 00027638 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001A8AC 0002763C 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001A8B0 00027640 7C 09 00 00 */ cmpw r9, r0 -/* 0001A8B4 00027644 4D 82 00 20 */ beqlr -/* 0001A8B8 00027648 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001A8BC 0002764C 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001A8C0 00027650 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001A8C4 00027654 7C 09 00 00 */ cmpw r9, r0 -/* 0001A8C8 00027658 4D 82 00 20 */ beqlr -/* 0001A8CC 0002765C 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001A8D0 00027660 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001A8D4 00027664 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001A8D8 00027668 7C 00 48 00 */ cmpw r0, r9 -/* 0001A8DC 0002766C 4D 82 00 20 */ beqlr -/* 0001A8E0 00027670 7C 83 23 78 */ mr r3, r4 -/* 0001A8E4 00027674 4E 80 00 20 */ blr -.endfn find__H2ZPP14ICollisionBodyZP14ICollisionBody_4_STLX01X01RCX11_X01 - -# .text:0x1A8E8 | size: 0xB0 -.fn find__H2ZPP10IExplosionZP10IExplosion_4_STLX01X01RCX11_X01, weak -/* 0001A8E8 00027678 7C 03 20 50 */ subf r0, r3, r4 -/* 0001A8EC 0002767C 7C 0B 26 71 */ srawi. r11, r0, 4 -/* 0001A8F0 00027680 40 81 A9 34 */ ble .L_00015224 -/* 0001A8F4 00027684 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001A8F8 00027688 80 03 00 00 */ lwz r0, 0x0(r3) -.L_0001A8FC: -/* 0001A8FC 0002768C 7C 00 48 00 */ cmpw r0, r9 -/* 0001A900 00027690 4D 82 00 20 */ beqlr -/* 0001A904 00027694 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001A908 00027698 7C 00 48 00 */ cmpw r0, r9 -/* 0001A90C 0002769C 4D 82 00 20 */ beqlr -/* 0001A910 000276A0 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001A914 000276A4 7C 00 48 00 */ cmpw r0, r9 -/* 0001A918 000276A8 4D 82 00 20 */ beqlr -/* 0001A91C 000276AC 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001A920 000276B0 7C 00 48 00 */ cmpw r0, r9 -/* 0001A924 000276B4 4D 82 00 20 */ beqlr -/* 0001A928 000276B8 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001A92C 000276BC 35 6B FF FF */ subic. r11, r11, 0x1 -/* 0001A930 000276C0 41 81 A8 F8 */ bgt .L_00015228 -/* 0001A934 000276C4 7C 03 20 50 */ subf r0, r3, r4 -/* 0001A938 000276C8 7C 00 16 70 */ srawi r0, r0, 2 -.L_0001A93C: -/* 0001A93C 000276CC 2C 00 00 01 */ cmpwi r0, 0x1 -/* 0001A940 000276D0 41 82 A9 80 */ beq .L_000152C0 -/* 0001A944 000276D4 40 81 A9 90 */ ble .L_000152D4 -/* 0001A948 000276D8 2C 00 00 02 */ cmpwi r0, 0x2 -/* 0001A94C 000276DC 41 82 A9 6C */ beq .L_000152B8 -/* 0001A950 000276E0 2C 00 00 03 */ cmpwi r0, 0x3 -/* 0001A954 000276E4 40 82 A9 90 */ bne .L_000152E4 -/* 0001A958 000276E8 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001A95C 000276EC 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001A960 000276F0 7C 09 00 00 */ cmpw r9, r0 -/* 0001A964 000276F4 4D 82 00 20 */ beqlr -/* 0001A968 000276F8 38 63 00 04 */ addi r3, r3, 0x4 -.L_0001A96C: -/* 0001A96C 000276FC 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001A970 00027700 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001A974 00027704 7C 09 00 00 */ cmpw r9, r0 -/* 0001A978 00027708 4D 82 00 20 */ beqlr -/* 0001A97C 0002770C 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001A980 00027710 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001A984 00027714 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001A988 00027718 7C 00 48 00 */ cmpw r0, r9 -/* 0001A98C 0002771C 4D 82 00 20 */ beqlr -/* 0001A990 00027720 7C 83 23 78 */ mr r3, r4 -/* 0001A994 00027724 4E 80 00 20 */ blr -.endfn find__H2ZPP10IExplosionZP10IExplosion_4_STLX01X01RCX11_X01 - -# .text:0x1A998 | size: 0xB0 -.fn find__H2ZPP6IModelZP6IModel_4_STLX01X01RCX11_X01, weak -/* 0001A998 00027728 7C 03 20 50 */ subf r0, r3, r4 -/* 0001A99C 0002772C 7C 0B 26 71 */ srawi. r11, r0, 4 -/* 0001A9A0 00027730 40 81 A9 E4 */ ble .L_00015384 -/* 0001A9A4 00027734 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001A9A8 00027738 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001A9AC 0002773C 7C 00 48 00 */ cmpw r0, r9 -/* 0001A9B0 00027740 4D 82 00 20 */ beqlr -/* 0001A9B4 00027744 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001A9B8 00027748 7C 00 48 00 */ cmpw r0, r9 -/* 0001A9BC 0002774C 4D 82 00 20 */ beqlr -/* 0001A9C0 00027750 84 03 00 04 */ lwzu r0, 0x4(r3) -.L_0001A9C4: -/* 0001A9C4 00027754 7C 00 48 00 */ cmpw r0, r9 -/* 0001A9C8 00027758 4D 82 00 20 */ beqlr -/* 0001A9CC 0002775C 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001A9D0 00027760 7C 00 48 00 */ cmpw r0, r9 -/* 0001A9D4 00027764 4D 82 00 20 */ beqlr -/* 0001A9D8 00027768 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001A9DC 0002776C 35 6B FF FF */ subic. r11, r11, 0x1 -/* 0001A9E0 00027770 41 81 A9 A8 */ bgt .L_00015388 -/* 0001A9E4 00027774 7C 03 20 50 */ subf r0, r3, r4 -/* 0001A9E8 00027778 7C 00 16 70 */ srawi r0, r0, 2 -/* 0001A9EC 0002777C 2C 00 00 01 */ cmpwi r0, 0x1 -/* 0001A9F0 00027780 41 82 AA 30 */ beq .L_00015420 -.L_0001A9F4: -/* 0001A9F4 00027784 40 81 AA 40 */ ble .L_00015434 -/* 0001A9F8 00027788 2C 00 00 02 */ cmpwi r0, 0x2 -/* 0001A9FC 0002778C 41 82 AA 1C */ beq .L_00015418 -/* 0001AA00 00027790 2C 00 00 03 */ cmpwi r0, 0x3 -/* 0001AA04 00027794 40 82 AA 40 */ bne .L_00015444 -/* 0001AA08 00027798 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001AA0C 0002779C 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001AA10 000277A0 7C 09 00 00 */ cmpw r9, r0 -/* 0001AA14 000277A4 4D 82 00 20 */ beqlr -/* 0001AA18 000277A8 38 63 00 04 */ addi r3, r3, 0x4 -.L_0001AA1C: -/* 0001AA1C 000277AC 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001AA20 000277B0 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001AA24 000277B4 7C 09 00 00 */ cmpw r9, r0 -.L_0001AA28: -/* 0001AA28 000277B8 4D 82 00 20 */ beqlr -/* 0001AA2C 000277BC 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001AA30 000277C0 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001AA34 000277C4 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001AA38 000277C8 7C 00 48 00 */ cmpw r0, r9 -/* 0001AA3C 000277CC 4D 82 00 20 */ beqlr -/* 0001AA40 000277D0 7C 83 23 78 */ mr r3, r4 -/* 0001AA44 000277D4 4E 80 00 20 */ blr -.endfn find__H2ZPP6IModelZP6IModel_4_STLX01X01RCX11_X01 - -# .text:0x1AA48 | size: 0xB0 -.fn find__H2ZPP8IVehicleZP8IVehicle_4_STLX01X01RCX11_X01, weak -/* 0001AA48 000277D8 7C 03 20 50 */ subf r0, r3, r4 -/* 0001AA4C 000277DC 7C 0B 26 71 */ srawi. r11, r0, 4 -/* 0001AA50 000277E0 40 81 AA 94 */ ble .L_000154E4 -/* 0001AA54 000277E4 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001AA58 000277E8 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001AA5C 000277EC 7C 00 48 00 */ cmpw r0, r9 -/* 0001AA60 000277F0 4D 82 00 20 */ beqlr -/* 0001AA64 000277F4 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001AA68 000277F8 7C 00 48 00 */ cmpw r0, r9 -/* 0001AA6C 000277FC 4D 82 00 20 */ beqlr -/* 0001AA70 00027800 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001AA74 00027804 7C 00 48 00 */ cmpw r0, r9 -/* 0001AA78 00027808 4D 82 00 20 */ beqlr -/* 0001AA7C 0002780C 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001AA80 00027810 7C 00 48 00 */ cmpw r0, r9 -/* 0001AA84 00027814 4D 82 00 20 */ beqlr -/* 0001AA88 00027818 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001AA8C 0002781C 35 6B FF FF */ subic. r11, r11, 0x1 -/* 0001AA90 00027820 41 81 AA 58 */ bgt .L_000154E8 -/* 0001AA94 00027824 7C 03 20 50 */ subf r0, r3, r4 -/* 0001AA98 00027828 7C 00 16 70 */ srawi r0, r0, 2 -/* 0001AA9C 0002782C 2C 00 00 01 */ cmpwi r0, 0x1 -/* 0001AAA0 00027830 41 82 AA E0 */ beq .L_00015580 -/* 0001AAA4 00027834 40 81 AA F0 */ ble .L_00015594 -/* 0001AAA8 00027838 2C 00 00 02 */ cmpwi r0, 0x2 -/* 0001AAAC 0002783C 41 82 AA CC */ beq .L_00015578 -/* 0001AAB0 00027840 2C 00 00 03 */ cmpwi r0, 0x3 -/* 0001AAB4 00027844 40 82 AA F0 */ bne .L_000155A4 -/* 0001AAB8 00027848 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001AABC 0002784C 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001AAC0 00027850 7C 09 00 00 */ cmpw r9, r0 -/* 0001AAC4 00027854 4D 82 00 20 */ beqlr -.L_0001AAC8: -/* 0001AAC8 00027858 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001AACC 0002785C 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001AAD0 00027860 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001AAD4 00027864 7C 09 00 00 */ cmpw r9, r0 -/* 0001AAD8 00027868 4D 82 00 20 */ beqlr -/* 0001AADC 0002786C 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001AAE0 00027870 81 25 00 00 */ lwz r9, 0x0(r5) -.L_0001AAE4: -/* 0001AAE4 00027874 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001AAE8 00027878 7C 00 48 00 */ cmpw r0, r9 -/* 0001AAEC 0002787C 4D 82 00 20 */ beqlr -/* 0001AAF0 00027880 7C 83 23 78 */ mr r3, r4 -/* 0001AAF4 00027884 4E 80 00 20 */ blr -.endfn find__H2ZPP8IVehicleZP8IVehicle_4_STLX01X01RCX11_X01 - -# .text:0x1AAF8 | size: 0x78 -.fn clear__Q24_STLt10_List_base2ZP11IAttachableZQ33UTL3Stdt9Allocator2ZP11IAttachableZ21_type_IAttachableList, weak -/* 0001AAF8 00027888 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0001AAFC 0002788C 7C 08 02 A6 */ mflr r0 -/* 0001AB00 00027890 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 0001AB04 00027894 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0001AB08 00027898 7C 7E 1B 78 */ mr r30, r3 -/* 0001AB0C 0002789C 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0001AB10 000278A0 83 E9 00 00 */ lwz r31, 0x0(r9) -/* 0001AB14 000278A4 7C 1F 48 00 */ cmpw r31, r9 -/* 0001AB18 000278A8 41 82 AB 4C */ beq .L_00015664 -/* 0001AB1C 000278AC 3F A0 00 00 */ lis r29, gFastMem@ha -/* 0001AB20 000278B0 7F E4 FB 78 */ mr r4, r31 -/* 0001AB24 000278B4 83 FF 00 00 */ lwz r31, 0x0(r31) -/* 0001AB28 000278B8 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0001AB2C 000278BC 41 82 AB 40 */ beq .L_0001566C -/* 0001AB30 000278C0 38 7D 00 00 */ addi r3, r29, gFastMem@l -/* 0001AB34 000278C4 38 A0 00 0C */ li r5, 0xc -/* 0001AB38 000278C8 38 C0 00 00 */ li r6, 0x0 -/* 0001AB3C 000278CC 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 0001AB40 000278D0 80 1E 00 04 */ lwz r0, 0x4(r30) -/* 0001AB44 000278D4 7C 1F 00 00 */ cmpw r31, r0 -/* 0001AB48 000278D8 40 82 AB 20 */ bne .L_00015668 -/* 0001AB4C 000278DC 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0001AB50 000278E0 91 29 00 00 */ stw r9, 0x0(r9) -/* 0001AB54 000278E4 81 7E 00 04 */ lwz r11, 0x4(r30) -/* 0001AB58 000278E8 91 6B 00 04 */ stw r11, 0x4(r11) -/* 0001AB5C 000278EC 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0001AB60 000278F0 7C 08 03 A6 */ mtlr r0 -/* 0001AB64 000278F4 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 0001AB68 000278F8 38 21 00 18 */ addi r1, r1, 0x18 -/* 0001AB6C 000278FC 4E 80 00 20 */ blr -.endfn clear__Q24_STLt10_List_base2ZP11IAttachableZQ33UTL3Stdt9Allocator2ZP11IAttachableZ21_type_IAttachableList - -# .text:0x1AB70 | size: 0xB0 -.fn find__H2ZPP13IVehicleCacheZP13IVehicleCache_4_STLX01X01RCX11_X01, weak -/* 0001AB70 00027900 7C 03 20 50 */ subf r0, r3, r4 -/* 0001AB74 00027904 7C 0B 26 71 */ srawi. r11, r0, 4 -/* 0001AB78 00027908 40 81 AB BC */ ble .L_00015734 -/* 0001AB7C 0002790C 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001AB80 00027910 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001AB84 00027914 7C 00 48 00 */ cmpw r0, r9 -/* 0001AB88 00027918 4D 82 00 20 */ beqlr -/* 0001AB8C 0002791C 84 03 00 04 */ lwzu r0, 0x4(r3) -.L_0001AB90: -/* 0001AB90 00027920 7C 00 48 00 */ cmpw r0, r9 -/* 0001AB94 00027924 4D 82 00 20 */ beqlr -/* 0001AB98 00027928 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001AB9C 0002792C 7C 00 48 00 */ cmpw r0, r9 -.L_0001ABA0: -/* 0001ABA0 00027930 4D 82 00 20 */ beqlr -.L_0001ABA4: -/* 0001ABA4 00027934 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001ABA8 00027938 7C 00 48 00 */ cmpw r0, r9 -/* 0001ABAC 0002793C 4D 82 00 20 */ beqlr -/* 0001ABB0 00027940 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001ABB4 00027944 35 6B FF FF */ subic. r11, r11, 0x1 -/* 0001ABB8 00027948 41 81 AB 80 */ bgt .L_00015738 -/* 0001ABBC 0002794C 7C 03 20 50 */ subf r0, r3, r4 -.L_0001ABC0: -/* 0001ABC0 00027950 7C 00 16 70 */ srawi r0, r0, 2 -/* 0001ABC4 00027954 2C 00 00 01 */ cmpwi r0, 0x1 -/* 0001ABC8 00027958 41 82 AC 08 */ beq .L_000157D0 -/* 0001ABCC 0002795C 40 81 AC 18 */ ble .L_000157E4 -/* 0001ABD0 00027960 2C 00 00 02 */ cmpwi r0, 0x2 -/* 0001ABD4 00027964 41 82 AB F4 */ beq .L_000157C8 -/* 0001ABD8 00027968 2C 00 00 03 */ cmpwi r0, 0x3 -/* 0001ABDC 0002796C 40 82 AC 18 */ bne .L_000157F4 -/* 0001ABE0 00027970 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001ABE4 00027974 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001ABE8 00027978 7C 09 00 00 */ cmpw r9, r0 -/* 0001ABEC 0002797C 4D 82 00 20 */ beqlr -/* 0001ABF0 00027980 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001ABF4 00027984 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001ABF8 00027988 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001ABFC 0002798C 7C 09 00 00 */ cmpw r9, r0 -/* 0001AC00 00027990 4D 82 00 20 */ beqlr -/* 0001AC04 00027994 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001AC08 00027998 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001AC0C 0002799C 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001AC10 000279A0 7C 00 48 00 */ cmpw r0, r9 -/* 0001AC14 000279A4 4D 82 00 20 */ beqlr -/* 0001AC18 000279A8 7C 83 23 78 */ mr r3, r4 -/* 0001AC1C 000279AC 4E 80 00 20 */ blr -.endfn find__H2ZPP13IVehicleCacheZP13IVehicleCache_4_STLX01X01RCX11_X01 - -# .text:0x1AC20 | size: 0xB0 -.fn find__H2ZPP10IRoadBlockZP10IRoadBlock_4_STLX01X01RCX11_X01, weak -/* 0001AC20 000279B0 7C 03 20 50 */ subf r0, r3, r4 -/* 0001AC24 000279B4 7C 0B 26 71 */ srawi. r11, r0, 4 -/* 0001AC28 000279B8 40 81 AC 6C */ ble .L_00015894 -/* 0001AC2C 000279BC 81 25 00 00 */ lwz r9, 0x0(r5) -.L_0001AC30: -/* 0001AC30 000279C0 80 03 00 00 */ lwz r0, 0x0(r3) -.L_0001AC34: -/* 0001AC34 000279C4 7C 00 48 00 */ cmpw r0, r9 -/* 0001AC38 000279C8 4D 82 00 20 */ beqlr -/* 0001AC3C 000279CC 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001AC40 000279D0 7C 00 48 00 */ cmpw r0, r9 -/* 0001AC44 000279D4 4D 82 00 20 */ beqlr -/* 0001AC48 000279D8 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001AC4C 000279DC 7C 00 48 00 */ cmpw r0, r9 -.L_0001AC50: -/* 0001AC50 000279E0 4D 82 00 20 */ beqlr -/* 0001AC54 000279E4 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001AC58 000279E8 7C 00 48 00 */ cmpw r0, r9 -/* 0001AC5C 000279EC 4D 82 00 20 */ beqlr -/* 0001AC60 000279F0 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001AC64 000279F4 35 6B FF FF */ subic. r11, r11, 0x1 -/* 0001AC68 000279F8 41 81 AC 30 */ bgt .L_00015898 -/* 0001AC6C 000279FC 7C 03 20 50 */ subf r0, r3, r4 -.L_0001AC70: -/* 0001AC70 00027A00 7C 00 16 70 */ srawi r0, r0, 2 -/* 0001AC74 00027A04 2C 00 00 01 */ cmpwi r0, 0x1 -/* 0001AC78 00027A08 41 82 AC B8 */ beq .L_00015930 -/* 0001AC7C 00027A0C 40 81 AC C8 */ ble .L_00015944 -/* 0001AC80 00027A10 2C 00 00 02 */ cmpwi r0, 0x2 -/* 0001AC84 00027A14 41 82 AC A4 */ beq .L_00015928 -/* 0001AC88 00027A18 2C 00 00 03 */ cmpwi r0, 0x3 -/* 0001AC8C 00027A1C 40 82 AC C8 */ bne .L_00015954 -/* 0001AC90 00027A20 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001AC94 00027A24 80 05 00 00 */ lwz r0, 0x0(r5) -.L_0001AC98: -/* 0001AC98 00027A28 7C 09 00 00 */ cmpw r9, r0 -/* 0001AC9C 00027A2C 4D 82 00 20 */ beqlr -/* 0001ACA0 00027A30 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001ACA4 00027A34 81 23 00 00 */ lwz r9, 0x0(r3) -.L_0001ACA8: -/* 0001ACA8 00027A38 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001ACAC 00027A3C 7C 09 00 00 */ cmpw r9, r0 -/* 0001ACB0 00027A40 4D 82 00 20 */ beqlr -/* 0001ACB4 00027A44 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001ACB8 00027A48 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001ACBC 00027A4C 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001ACC0 00027A50 7C 00 48 00 */ cmpw r0, r9 -/* 0001ACC4 00027A54 4D 82 00 20 */ beqlr -.L_0001ACC8: -/* 0001ACC8 00027A58 7C 83 23 78 */ mr r3, r4 -/* 0001ACCC 00027A5C 4E 80 00 20 */ blr -.endfn find__H2ZPP10IRoadBlockZP10IRoadBlock_4_STLX01X01RCX11_X01 - -# .text:0x1ACD0 | size: 0x78 -.fn clear__Q24_STLt10_List_base2ZPcZQ33UTL3Stdt9Allocator2ZPcZ10_type_list, weak -/* 0001ACD0 00027A60 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0001ACD4 00027A64 7C 08 02 A6 */ mflr r0 -/* 0001ACD8 00027A68 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 0001ACDC 00027A6C 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0001ACE0 00027A70 7C 7E 1B 78 */ mr r30, r3 -/* 0001ACE4 00027A74 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0001ACE8 00027A78 83 E9 00 00 */ lwz r31, 0x0(r9) -/* 0001ACEC 00027A7C 7C 1F 48 00 */ cmpw r31, r9 -/* 0001ACF0 00027A80 41 82 AD 24 */ beq .L_00015A14 -/* 0001ACF4 00027A84 3F A0 00 00 */ lis r29, gFastMem@ha -/* 0001ACF8 00027A88 7F E4 FB 78 */ mr r4, r31 -/* 0001ACFC 00027A8C 83 FF 00 00 */ lwz r31, 0x0(r31) -/* 0001AD00 00027A90 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0001AD04 00027A94 41 82 AD 18 */ beq .L_00015A1C -/* 0001AD08 00027A98 38 7D 00 00 */ addi r3, r29, gFastMem@l -/* 0001AD0C 00027A9C 38 A0 00 0C */ li r5, 0xc -/* 0001AD10 00027AA0 38 C0 00 00 */ li r6, 0x0 -/* 0001AD14 00027AA4 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 0001AD18 00027AA8 80 1E 00 04 */ lwz r0, 0x4(r30) -/* 0001AD1C 00027AAC 7C 1F 00 00 */ cmpw r31, r0 -/* 0001AD20 00027AB0 40 82 AC F8 */ bne .L_00015A18 -/* 0001AD24 00027AB4 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0001AD28 00027AB8 91 29 00 00 */ stw r9, 0x0(r9) -/* 0001AD2C 00027ABC 81 7E 00 04 */ lwz r11, 0x4(r30) -/* 0001AD30 00027AC0 91 6B 00 04 */ stw r11, 0x4(r11) -/* 0001AD34 00027AC4 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0001AD38 00027AC8 7C 08 03 A6 */ mtlr r0 -/* 0001AD3C 00027ACC BB A1 00 0C */ lmw r29, 0xc(r1) -/* 0001AD40 00027AD0 38 21 00 18 */ addi r1, r1, 0x18 -/* 0001AD44 00027AD4 4E 80 00 20 */ blr -.endfn clear__Q24_STLt10_List_base2ZPcZQ33UTL3Stdt9Allocator2ZPcZ10_type_list - -# .text:0x1AD48 | size: 0xB0 -.fn find__H2ZPP8IPursuitZP8IPursuit_4_STLX01X01RCX11_X01, weak -/* 0001AD48 00027AD8 7C 03 20 50 */ subf r0, r3, r4 -/* 0001AD4C 00027ADC 7C 0B 26 71 */ srawi. r11, r0, 4 -/* 0001AD50 00027AE0 40 81 AD 94 */ ble .L_00015AE4 -/* 0001AD54 00027AE4 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001AD58 00027AE8 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001AD5C 00027AEC 7C 00 48 00 */ cmpw r0, r9 -/* 0001AD60 00027AF0 4D 82 00 20 */ beqlr -/* 0001AD64 00027AF4 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001AD68 00027AF8 7C 00 48 00 */ cmpw r0, r9 -/* 0001AD6C 00027AFC 4D 82 00 20 */ beqlr -/* 0001AD70 00027B00 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001AD74 00027B04 7C 00 48 00 */ cmpw r0, r9 -/* 0001AD78 00027B08 4D 82 00 20 */ beqlr -/* 0001AD7C 00027B0C 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001AD80 00027B10 7C 00 48 00 */ cmpw r0, r9 -/* 0001AD84 00027B14 4D 82 00 20 */ beqlr -/* 0001AD88 00027B18 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001AD8C 00027B1C 35 6B FF FF */ subic. r11, r11, 0x1 -/* 0001AD90 00027B20 41 81 AD 58 */ bgt .L_00015AE8 -/* 0001AD94 00027B24 7C 03 20 50 */ subf r0, r3, r4 -/* 0001AD98 00027B28 7C 00 16 70 */ srawi r0, r0, 2 -/* 0001AD9C 00027B2C 2C 00 00 01 */ cmpwi r0, 0x1 -/* 0001ADA0 00027B30 41 82 AD E0 */ beq .L_00015B80 -/* 0001ADA4 00027B34 40 81 AD F0 */ ble .L_00015B94 -/* 0001ADA8 00027B38 2C 00 00 02 */ cmpwi r0, 0x2 -/* 0001ADAC 00027B3C 41 82 AD CC */ beq .L_00015B78 -/* 0001ADB0 00027B40 2C 00 00 03 */ cmpwi r0, 0x3 -/* 0001ADB4 00027B44 40 82 AD F0 */ bne .L_00015BA4 -/* 0001ADB8 00027B48 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001ADBC 00027B4C 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001ADC0 00027B50 7C 09 00 00 */ cmpw r9, r0 -/* 0001ADC4 00027B54 4D 82 00 20 */ beqlr -/* 0001ADC8 00027B58 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001ADCC 00027B5C 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001ADD0 00027B60 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001ADD4 00027B64 7C 09 00 00 */ cmpw r9, r0 -/* 0001ADD8 00027B68 4D 82 00 20 */ beqlr -/* 0001ADDC 00027B6C 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001ADE0 00027B70 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001ADE4 00027B74 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001ADE8 00027B78 7C 00 48 00 */ cmpw r0, r9 -/* 0001ADEC 00027B7C 4D 82 00 20 */ beqlr -/* 0001ADF0 00027B80 7C 83 23 78 */ mr r3, r4 -/* 0001ADF4 00027B84 4E 80 00 20 */ blr -.endfn find__H2ZPP8IPursuitZP8IPursuit_4_STLX01X01RCX11_X01 - -# .text:0x1ADF8 | size: 0xB0 -.fn find__H2ZPP4IHudZP4IHud_4_STLX01X01RCX11_X01, weak -/* 0001ADF8 00027B88 7C 03 20 50 */ subf r0, r3, r4 -/* 0001ADFC 00027B8C 7C 0B 26 71 */ srawi. r11, r0, 4 -/* 0001AE00 00027B90 40 81 AE 44 */ ble .L_00015C44 -/* 0001AE04 00027B94 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001AE08 00027B98 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001AE0C 00027B9C 7C 00 48 00 */ cmpw r0, r9 -/* 0001AE10 00027BA0 4D 82 00 20 */ beqlr -/* 0001AE14 00027BA4 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001AE18 00027BA8 7C 00 48 00 */ cmpw r0, r9 -/* 0001AE1C 00027BAC 4D 82 00 20 */ beqlr -/* 0001AE20 00027BB0 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001AE24 00027BB4 7C 00 48 00 */ cmpw r0, r9 -/* 0001AE28 00027BB8 4D 82 00 20 */ beqlr -/* 0001AE2C 00027BBC 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001AE30 00027BC0 7C 00 48 00 */ cmpw r0, r9 -/* 0001AE34 00027BC4 4D 82 00 20 */ beqlr -/* 0001AE38 00027BC8 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001AE3C 00027BCC 35 6B FF FF */ subic. r11, r11, 0x1 -/* 0001AE40 00027BD0 41 81 AE 08 */ bgt .L_00015C48 -/* 0001AE44 00027BD4 7C 03 20 50 */ subf r0, r3, r4 -/* 0001AE48 00027BD8 7C 00 16 70 */ srawi r0, r0, 2 -/* 0001AE4C 00027BDC 2C 00 00 01 */ cmpwi r0, 0x1 -/* 0001AE50 00027BE0 41 82 AE 90 */ beq .L_00015CE0 -/* 0001AE54 00027BE4 40 81 AE A0 */ ble .L_00015CF4 -/* 0001AE58 00027BE8 2C 00 00 02 */ cmpwi r0, 0x2 -/* 0001AE5C 00027BEC 41 82 AE 7C */ beq .L_00015CD8 -/* 0001AE60 00027BF0 2C 00 00 03 */ cmpwi r0, 0x3 -/* 0001AE64 00027BF4 40 82 AE A0 */ bne .L_00015D04 -/* 0001AE68 00027BF8 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001AE6C 00027BFC 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001AE70 00027C00 7C 09 00 00 */ cmpw r9, r0 -/* 0001AE74 00027C04 4D 82 00 20 */ beqlr -/* 0001AE78 00027C08 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001AE7C 00027C0C 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001AE80 00027C10 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001AE84 00027C14 7C 09 00 00 */ cmpw r9, r0 -/* 0001AE88 00027C18 4D 82 00 20 */ beqlr -/* 0001AE8C 00027C1C 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001AE90 00027C20 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001AE94 00027C24 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001AE98 00027C28 7C 00 48 00 */ cmpw r0, r9 -/* 0001AE9C 00027C2C 4D 82 00 20 */ beqlr -/* 0001AEA0 00027C30 7C 83 23 78 */ mr r3, r4 -/* 0001AEA4 00027C34 4E 80 00 20 */ blr -.endfn find__H2ZPP4IHudZP4IHud_4_STLX01X01RCX11_X01 - -# .text:0x1AEA8 | size: 0xB0 -.fn find__H2ZPP7IPlayerZP7IPlayer_4_STLX01X01RCX11_X01, weak -/* 0001AEA8 00027C38 7C 03 20 50 */ subf r0, r3, r4 -/* 0001AEAC 00027C3C 7C 0B 26 71 */ srawi. r11, r0, 4 -/* 0001AEB0 00027C40 40 81 AE F4 */ ble .L_00015DA4 -/* 0001AEB4 00027C44 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001AEB8 00027C48 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001AEBC 00027C4C 7C 00 48 00 */ cmpw r0, r9 -/* 0001AEC0 00027C50 4D 82 00 20 */ beqlr -/* 0001AEC4 00027C54 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001AEC8 00027C58 7C 00 48 00 */ cmpw r0, r9 -/* 0001AECC 00027C5C 4D 82 00 20 */ beqlr -/* 0001AED0 00027C60 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001AED4 00027C64 7C 00 48 00 */ cmpw r0, r9 -/* 0001AED8 00027C68 4D 82 00 20 */ beqlr -/* 0001AEDC 00027C6C 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001AEE0 00027C70 7C 00 48 00 */ cmpw r0, r9 -/* 0001AEE4 00027C74 4D 82 00 20 */ beqlr -/* 0001AEE8 00027C78 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001AEEC 00027C7C 35 6B FF FF */ subic. r11, r11, 0x1 -/* 0001AEF0 00027C80 41 81 AE B8 */ bgt .L_00015DA8 -/* 0001AEF4 00027C84 7C 03 20 50 */ subf r0, r3, r4 -/* 0001AEF8 00027C88 7C 00 16 70 */ srawi r0, r0, 2 -/* 0001AEFC 00027C8C 2C 00 00 01 */ cmpwi r0, 0x1 -/* 0001AF00 00027C90 41 82 AF 40 */ beq .L_00015E40 -/* 0001AF04 00027C94 40 81 AF 50 */ ble .L_00015E54 -/* 0001AF08 00027C98 2C 00 00 02 */ cmpwi r0, 0x2 -/* 0001AF0C 00027C9C 41 82 AF 2C */ beq .L_00015E38 -/* 0001AF10 00027CA0 2C 00 00 03 */ cmpwi r0, 0x3 -/* 0001AF14 00027CA4 40 82 AF 50 */ bne .L_00015E64 -/* 0001AF18 00027CA8 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001AF1C 00027CAC 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001AF20 00027CB0 7C 09 00 00 */ cmpw r9, r0 -/* 0001AF24 00027CB4 4D 82 00 20 */ beqlr -/* 0001AF28 00027CB8 38 63 00 04 */ addi r3, r3, 0x4 -.L_0001AF2C: -/* 0001AF2C 00027CBC 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001AF30 00027CC0 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001AF34 00027CC4 7C 09 00 00 */ cmpw r9, r0 -/* 0001AF38 00027CC8 4D 82 00 20 */ beqlr -/* 0001AF3C 00027CCC 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001AF40 00027CD0 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001AF44 00027CD4 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001AF48 00027CD8 7C 00 48 00 */ cmpw r0, r9 -/* 0001AF4C 00027CDC 4D 82 00 20 */ beqlr -/* 0001AF50 00027CE0 7C 83 23 78 */ mr r3, r4 -/* 0001AF54 00027CE4 4E 80 00 20 */ blr -.endfn find__H2ZPP7IPlayerZP7IPlayer_4_STLX01X01RCX11_X01 - -# .text:0x1AF58 | size: 0xB0 -.fn find__H2ZPP10IRigidBodyZP10IRigidBody_4_STLX01X01RCX11_X01, weak -/* 0001AF58 00027CE8 7C 03 20 50 */ subf r0, r3, r4 -/* 0001AF5C 00027CEC 7C 0B 26 71 */ srawi. r11, r0, 4 -/* 0001AF60 00027CF0 40 81 AF A4 */ ble .L_00015F04 -/* 0001AF64 00027CF4 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001AF68 00027CF8 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001AF6C 00027CFC 7C 00 48 00 */ cmpw r0, r9 -/* 0001AF70 00027D00 4D 82 00 20 */ beqlr -/* 0001AF74 00027D04 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001AF78 00027D08 7C 00 48 00 */ cmpw r0, r9 -/* 0001AF7C 00027D0C 4D 82 00 20 */ beqlr -/* 0001AF80 00027D10 84 03 00 04 */ lwzu r0, 0x4(r3) -.L_0001AF84: -/* 0001AF84 00027D14 7C 00 48 00 */ cmpw r0, r9 -/* 0001AF88 00027D18 4D 82 00 20 */ beqlr -/* 0001AF8C 00027D1C 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001AF90 00027D20 7C 00 48 00 */ cmpw r0, r9 -/* 0001AF94 00027D24 4D 82 00 20 */ beqlr -/* 0001AF98 00027D28 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001AF9C 00027D2C 35 6B FF FF */ subic. r11, r11, 0x1 -/* 0001AFA0 00027D30 41 81 AF 68 */ bgt .L_00015F08 -/* 0001AFA4 00027D34 7C 03 20 50 */ subf r0, r3, r4 -/* 0001AFA8 00027D38 7C 00 16 70 */ srawi r0, r0, 2 -/* 0001AFAC 00027D3C 2C 00 00 01 */ cmpwi r0, 0x1 -/* 0001AFB0 00027D40 41 82 AF F0 */ beq .L_00015FA0 -/* 0001AFB4 00027D44 40 81 B0 00 */ ble .L_00015FB4 -/* 0001AFB8 00027D48 2C 00 00 02 */ cmpwi r0, 0x2 -/* 0001AFBC 00027D4C 41 82 AF DC */ beq .L_00015F98 -/* 0001AFC0 00027D50 2C 00 00 03 */ cmpwi r0, 0x3 -/* 0001AFC4 00027D54 40 82 B0 00 */ bne .L_00015FC4 -/* 0001AFC8 00027D58 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001AFCC 00027D5C 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001AFD0 00027D60 7C 09 00 00 */ cmpw r9, r0 -/* 0001AFD4 00027D64 4D 82 00 20 */ beqlr -/* 0001AFD8 00027D68 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001AFDC 00027D6C 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001AFE0 00027D70 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001AFE4 00027D74 7C 09 00 00 */ cmpw r9, r0 -/* 0001AFE8 00027D78 4D 82 00 20 */ beqlr -/* 0001AFEC 00027D7C 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001AFF0 00027D80 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001AFF4 00027D84 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001AFF8 00027D88 7C 00 48 00 */ cmpw r0, r9 -/* 0001AFFC 00027D8C 4D 82 00 20 */ beqlr -/* 0001B000 00027D90 7C 83 23 78 */ mr r3, r4 -/* 0001B004 00027D94 4E 80 00 20 */ blr -.endfn find__H2ZPP10IRigidBodyZP10IRigidBody_4_STLX01X01RCX11_X01 - -# .text:0x1B008 | size: 0x184 -.fn reserve__Q24_STLt6vector2ZQ26Hermes7HandlerZQ33UTL3Stdt9Allocator2ZQ26Hermes7HandlerZ12_type_vectorUi, weak -/* 0001B008 00027D98 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 0001B00C 00027D9C 7C 08 02 A6 */ mflr r0 -/* 0001B010 00027DA0 BF 01 00 08 */ stmw r24, 0x8(r1) -/* 0001B014 00027DA4 90 01 00 2C */ stw r0, 0x2c(r1) -/* 0001B018 00027DA8 7C 7C 1B 78 */ mr r28, r3 -/* 0001B01C 00027DAC 3D 20 38 E3 */ lis r9, 0x38e3 -/* 0001B020 00027DB0 83 FC 00 00 */ lwz r31, 0x0(r28) -/* 0001B024 00027DB4 61 29 8E 39 */ ori r9, r9, 0x8e39 -/* 0001B028 00027DB8 80 1C 00 0C */ lwz r0, 0xc(r28) -/* 0001B02C 00027DBC 7C 1F 00 50 */ subf r0, r31, r0 -/* 0001B030 00027DC0 7C 00 49 D6 */ mullw r0, r0, r9 -/* 0001B034 00027DC4 7C 00 16 70 */ srawi r0, r0, 2 -/* 0001B038 00027DC8 7C 00 20 40 */ cmplw r0, r4 -/* 0001B03C 00027DCC 40 80 B1 78 */ bge .L_000161B4 -/* 0001B040 00027DD0 83 7C 00 04 */ lwz r27, 0x4(r28) -/* 0001B044 00027DD4 2C 1F 00 00 */ cmpwi r31, 0x0 -/* 0001B048 00027DD8 7C 1F D8 50 */ subf r0, r31, r27 -/* 0001B04C 00027DDC 7C 00 49 D6 */ mullw r0, r0, r9 -/* 0001B050 00027DE0 7C 19 16 70 */ srawi r25, r0, 2 -/* 0001B054 00027DE4 41 82 B1 2C */ beq .L_00016180 -/* 0001B058 00027DE8 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0001B05C 00027DEC 41 82 B0 84 */ beq .L_000160E0 -/* 0001B060 00027DF0 1C 04 00 24 */ mulli r0, r4, 0x24 -/* 0001B064 00027DF4 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0001B068 00027DF8 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0001B06C 00027DFC 38 A0 00 00 */ li r5, 0x0 -/* 0001B070 00027E00 7C 04 03 78 */ mr r4, r0 -/* 0001B074 00027E04 7C 1A 03 78 */ mr r26, r0 -/* 0001B078 00027E08 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 0001B07C 00027E0C 7C 7D 1B 78 */ mr r29, r3 -/* 0001B080 00027E10 48 01 B0 8C */ b .text+0x1B08C -/* 0001B084 00027E14 3B A0 00 00 */ li r29, 0x0 -/* 0001B088 00027E18 3B 40 00 00 */ li r26, 0x0 -/* 0001B08C 00027E1C 7F FE FB 78 */ mr r30, r31 -/* 0001B090 00027E20 1F 19 00 24 */ mulli r24, r25, 0x24 -/* 0001B094 00027E24 7F BF EB 78 */ mr r31, r29 -/* 0001B098 00027E28 7C 1E D8 00 */ cmpw r30, r27 -/* 0001B09C 00027E2C 41 82 B0 D0 */ beq .L_0001616C -/* 0001B0A0 00027E30 3B 20 00 00 */ li r25, 0x0 -/* 0001B0A4 00027E34 2C 1F 00 00 */ cmpwi r31, 0x0 -/* 0001B0A8 00027E38 41 82 B0 C0 */ beq .L_00016168 -/* 0001B0AC 00027E3C 93 3F 00 14 */ stw r25, 0x14(r31) -/* 0001B0B0 00027E40 7F E3 FB 78 */ mr r3, r31 -/* 0001B0B4 00027E44 7F C4 F3 78 */ mr r4, r30 -/* 0001B0B8 00027E48 38 A0 00 24 */ li r5, 0x24 -/* 0001B0BC 00027E4C 48 00 00 01 */ bl bMemCpy -/* 0001B0C0 00027E50 3B DE 00 24 */ addi r30, r30, 0x24 -/* 0001B0C4 00027E54 3B FF 00 24 */ addi r31, r31, 0x24 -/* 0001B0C8 00027E58 7C 1E D8 00 */ cmpw r30, r27 -/* 0001B0CC 00027E5C 40 82 B0 A4 */ bne .L_00016170 -/* 0001B0D0 00027E60 81 7C 00 00 */ lwz r11, 0x0(r28) -/* 0001B0D4 00027E64 7F BF EB 78 */ mr r31, r29 -/* 0001B0D8 00027E68 80 1C 00 04 */ lwz r0, 0x4(r28) -/* 0001B0DC 00027E6C 7D 64 5B 78 */ mr r4, r11 -/* 0001B0E0 00027E70 81 3C 00 0C */ lwz r9, 0xc(r28) -/* 0001B0E4 00027E74 7C 0B 00 00 */ cmpw r11, r0 -/* 0001B0E8 00027E78 41 82 B0 F8 */ beq .L_000161E0 -/* 0001B0EC 00027E7C 39 6B 00 24 */ addi r11, r11, 0x24 -/* 0001B0F0 00027E80 7C 0B 00 00 */ cmpw r11, r0 -/* 0001B0F4 00027E84 40 82 B0 EC */ bne .L_000161E0 -/* 0001B0F8 00027E88 3C 00 38 E3 */ lis r0, 0x38e3 -/* 0001B0FC 00027E8C 7D 24 48 50 */ subf r9, r4, r9 -/* 0001B100 00027E90 60 00 8E 39 */ ori r0, r0, 0x8e39 -/* 0001B104 00027E94 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0001B108 00027E98 7D 29 01 D6 */ mullw r9, r9, r0 -/* 0001B10C 00027E9C 7D 25 16 70 */ srawi r5, r9, 2 -/* 0001B110 00027EA0 41 82 B1 64 */ beq .L_00016274 -/* 0001B114 00027EA4 1C A5 00 24 */ mulli r5, r5, 0x24 -/* 0001B118 00027EA8 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0001B11C 00027EAC 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0001B120 00027EB0 38 C0 00 00 */ li r6, 0x0 -/* 0001B124 00027EB4 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 0001B128 00027EB8 48 01 B1 64 */ b .text+0x1B164 -/* 0001B12C 00027EBC 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0001B130 00027EC0 41 82 B1 54 */ beq .L_00016284 -.L_0001B134: -/* 0001B134 00027EC4 1C 04 00 24 */ mulli r0, r4, 0x24 -/* 0001B138 00027EC8 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0001B13C 00027ECC 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0001B140 00027ED0 38 A0 00 00 */ li r5, 0x0 -/* 0001B144 00027ED4 7C 04 03 78 */ mr r4, r0 -/* 0001B148 00027ED8 7C 1A 03 78 */ mr r26, r0 -/* 0001B14C 00027EDC 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 0001B150 00027EE0 48 01 B1 5C */ b .text+0x1B15C -/* 0001B154 00027EE4 38 60 00 00 */ li r3, 0x0 -/* 0001B158 00027EE8 3B 40 00 00 */ li r26, 0x0 -/* 0001B15C 00027EEC 1F 19 00 24 */ mulli r24, r25, 0x24 -/* 0001B160 00027EF0 7C 7F 1B 78 */ mr r31, r3 -/* 0001B164 00027EF4 7D 38 FA 14 */ add r9, r24, r31 -/* 0001B168 00027EF8 7C 1A FA 14 */ add r0, r26, r31 -/* 0001B16C 00027EFC 90 1C 00 0C */ stw r0, 0xc(r28) -/* 0001B170 00027F00 93 FC 00 00 */ stw r31, 0x0(r28) -.L_0001B174: -/* 0001B174 00027F04 91 3C 00 04 */ stw r9, 0x4(r28) -/* 0001B178 00027F08 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 0001B17C 00027F0C 7C 08 03 A6 */ mtlr r0 -/* 0001B180 00027F10 BB 01 00 08 */ lmw r24, 0x8(r1) -/* 0001B184 00027F14 38 21 00 28 */ addi r1, r1, 0x28 -/* 0001B188 00027F18 4E 80 00 20 */ blr -.endfn reserve__Q24_STLt6vector2ZQ26Hermes7HandlerZQ33UTL3Stdt9Allocator2ZQ26Hermes7HandlerZ12_type_vectorUi - -# .text:0x1B18C | size: 0x68 -.fn _M_erase__Q24_STLt8_Rb_tree5ZPQ26Hermes13_h_HHANDLER__ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt4less1ZPQ26Hermes13_h_HHANDLER__ZQ33UTL3Stdt9Allocator2ZQ26Hermes7PortKeyZ9_type_mapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKey, weak -/* 0001B18C 00027F1C 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0001B190 00027F20 7C 08 02 A6 */ mflr r0 -/* 0001B194 00027F24 BF 81 00 08 */ stmw r28, 0x8(r1) -/* 0001B198 00027F28 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0001B19C 00027F2C 7C 7D 1B 78 */ mr r29, r3 -/* 0001B1A0 00027F30 7C 9F 23 79 */ mr. r31, r4 -/* 0001B1A4 00027F34 41 82 B1 E0 */ beq .L_00016384 -/* 0001B1A8 00027F38 3F 80 00 00 */ lis r28, gFastMem@ha -/* 0001B1AC 00027F3C 80 9F 00 0C */ lwz r4, 0xc(r31) -/* 0001B1B0 00027F40 7F A3 EB 78 */ mr r3, r29 -.L_0001B1B4: -/* 0001B1B4 00027F44 48 00 00 01 */ bl _M_erase__Q24_STLt8_Rb_tree5ZPQ26Hermes13_h_HHANDLER__ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt4less1ZPQ26Hermes13_h_HHANDLER__ZQ33UTL3Stdt9Allocator2ZQ26Hermes7PortKeyZ9_type_mapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKey -/* 0001B1B8 00027F48 83 DF 00 08 */ lwz r30, 0x8(r31) -/* 0001B1BC 00027F4C 2C 1F 00 00 */ cmpwi r31, 0x0 -/* 0001B1C0 00027F50 41 82 B1 D8 */ beq .L_00016398 -/* 0001B1C4 00027F54 7F E4 FB 78 */ mr r4, r31 -/* 0001B1C8 00027F58 38 7C 00 00 */ addi r3, r28, gFastMem@l -/* 0001B1CC 00027F5C 38 A0 00 28 */ li r5, 0x28 -/* 0001B1D0 00027F60 38 C0 00 00 */ li r6, 0x0 -/* 0001B1D4 00027F64 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 0001B1D8 00027F68 7F DF F3 79 */ mr. r31, r30 -/* 0001B1DC 00027F6C 40 82 B1 AC */ bne .L_00016388 -/* 0001B1E0 00027F70 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0001B1E4 00027F74 7C 08 03 A6 */ mtlr r0 -/* 0001B1E8 00027F78 BB 81 00 08 */ lmw r28, 0x8(r1) -/* 0001B1EC 00027F7C 38 21 00 18 */ addi r1, r1, 0x18 -/* 0001B1F0 00027F80 4E 80 00 20 */ blr -.endfn _M_erase__Q24_STLt8_Rb_tree5ZPQ26Hermes13_h_HHANDLER__ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt4less1ZPQ26Hermes13_h_HHANDLER__ZQ33UTL3Stdt9Allocator2ZQ26Hermes7PortKeyZ9_type_mapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKey - -# .text:0x1B1F4 | size: 0xB0 -.fn find__H2ZPPQ28CameraAI8DirectorZPQ28CameraAI8Director_4_STLX01X01RCX11_X01, weak -/* 0001B1F4 00027F84 7C 03 20 50 */ subf r0, r3, r4 -/* 0001B1F8 00027F88 7C 0B 26 71 */ srawi. r11, r0, 4 -/* 0001B1FC 00027F8C 40 81 B2 40 */ ble .L_0001643C -/* 0001B200 00027F90 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001B204 00027F94 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001B208 00027F98 7C 00 48 00 */ cmpw r0, r9 -/* 0001B20C 00027F9C 4D 82 00 20 */ beqlr -/* 0001B210 00027FA0 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001B214 00027FA4 7C 00 48 00 */ cmpw r0, r9 -/* 0001B218 00027FA8 4D 82 00 20 */ beqlr -/* 0001B21C 00027FAC 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001B220 00027FB0 7C 00 48 00 */ cmpw r0, r9 -/* 0001B224 00027FB4 4D 82 00 20 */ beqlr -/* 0001B228 00027FB8 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001B22C 00027FBC 7C 00 48 00 */ cmpw r0, r9 -/* 0001B230 00027FC0 4D 82 00 20 */ beqlr -/* 0001B234 00027FC4 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001B238 00027FC8 35 6B FF FF */ subic. r11, r11, 0x1 -/* 0001B23C 00027FCC 41 81 B2 04 */ bgt .L_00016440 -/* 0001B240 00027FD0 7C 03 20 50 */ subf r0, r3, r4 -/* 0001B244 00027FD4 7C 00 16 70 */ srawi r0, r0, 2 -/* 0001B248 00027FD8 2C 00 00 01 */ cmpwi r0, 0x1 -/* 0001B24C 00027FDC 41 82 B2 8C */ beq .L_000164D8 -/* 0001B250 00027FE0 40 81 B2 9C */ ble .L_000164EC -/* 0001B254 00027FE4 2C 00 00 02 */ cmpwi r0, 0x2 -/* 0001B258 00027FE8 41 82 B2 78 */ beq .L_000164D0 -/* 0001B25C 00027FEC 2C 00 00 03 */ cmpwi r0, 0x3 -/* 0001B260 00027FF0 40 82 B2 9C */ bne .L_000164FC -/* 0001B264 00027FF4 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001B268 00027FF8 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001B26C 00027FFC 7C 09 00 00 */ cmpw r9, r0 -/* 0001B270 00028000 4D 82 00 20 */ beqlr -/* 0001B274 00028004 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001B278 00028008 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001B27C 0002800C 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001B280 00028010 7C 09 00 00 */ cmpw r9, r0 -/* 0001B284 00028014 4D 82 00 20 */ beqlr -/* 0001B288 00028018 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001B28C 0002801C 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001B290 00028020 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001B294 00028024 7C 00 48 00 */ cmpw r0, r9 -/* 0001B298 00028028 4D 82 00 20 */ beqlr -/* 0001B29C 0002802C 7C 83 23 78 */ mr r3, r4 -/* 0001B2A0 00028030 4E 80 00 20 */ blr -.endfn find__H2ZPPQ28CameraAI8DirectorZPQ28CameraAI8Director_4_STLX01X01RCX11_X01 - -# .text:0x1B2A4 | size: 0x60 -.fn CreateInstance__Q33UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32G6UCrc32PQ28CameraAI8Director, weak -/* 0001B2A4 00028034 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0001B2A8 00028038 7C 08 02 A6 */ mflr r0 -/* 0001B2AC 0002803C 90 01 00 0C */ stw r0, 0xc(r1) -/* 0001B2B0 00028040 3D 20 00 00 */ lis r9, _Q43UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32_9Prototype.mHead@ha -/* 0001B2B4 00028044 81 69 00 00 */ lwz r11, _Q43UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32_9Prototype.mHead@l(r9) -/* 0001B2B8 00028048 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0001B2BC 0002804C 41 82 B2 F0 */ beq .L_000165AC -/* 0001B2C0 00028050 81 2B 00 00 */ lwz r9, 0x0(r11) -.L_0001B2C4: -/* 0001B2C4 00028054 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001B2C8 00028058 7C 09 00 00 */ cmpw r9, r0 -/* 0001B2CC 0002805C 40 82 B2 E4 */ bne .L_000165B0 -/* 0001B2D0 00028060 80 0B 00 04 */ lwz r0, 0x4(r11) -/* 0001B2D4 00028064 7C 83 23 78 */ mr r3, r4 -/* 0001B2D8 00028068 7C 08 03 A6 */ mtlr r0 -/* 0001B2DC 0002806C 4E 80 00 21 */ blrl -/* 0001B2E0 00028070 48 01 B2 F4 */ b .text+0x1B2F4 -/* 0001B2E4 00028074 81 6B 00 08 */ lwz r11, 0x8(r11) -/* 0001B2E8 00028078 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0001B2EC 0002807C 40 82 B2 C0 */ bne .L_000165AC -/* 0001B2F0 00028080 38 60 00 00 */ li r3, 0x0 -/* 0001B2F4 00028084 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0001B2F8 00028088 7C 08 03 A6 */ mtlr r0 -/* 0001B2FC 0002808C 38 21 00 08 */ addi r1, r1, 0x8 -/* 0001B300 00028090 4E 80 00 20 */ blr -.endfn CreateInstance__Q33UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32G6UCrc32PQ28CameraAI8Director - -# .text:0x1B304 | size: 0x18 -.fn Count__Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi311ePlayerList, weak -/* 0001B304 00028094 1C 63 00 30 */ mulli r3, r3, 0x30 -/* 0001B308 00028098 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@ha -/* 0001B30C 0002809C 39 29 00 00 */ addi r9, r9, _Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists@l -/* 0001B310 000280A0 7C 63 4A 14 */ add r3, r3, r9 -/* 0001B314 000280A4 80 63 00 08 */ lwz r3, 0x8(r3) -/* 0001B318 000280A8 4E 80 00 20 */ blr -.endfn Count__Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi311ePlayerList - -# .text:0x1B31C | size: 0x78 -.fn clear__Q24_STLt10_List_base2ZP5IBodyZQ33UTL3Stdt9Allocator2ZP5IBodyZ24_type_CameraAIAvoidables, weak -/* 0001B31C 000280AC 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0001B320 000280B0 7C 08 02 A6 */ mflr r0 -/* 0001B324 000280B4 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 0001B328 000280B8 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0001B32C 000280BC 7C 7E 1B 78 */ mr r30, r3 -/* 0001B330 000280C0 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0001B334 000280C4 83 E9 00 00 */ lwz r31, 0x0(r9) -/* 0001B338 000280C8 7C 1F 48 00 */ cmpw r31, r9 -/* 0001B33C 000280CC 41 82 B3 70 */ beq .L_000166AC -/* 0001B340 000280D0 3F A0 00 00 */ lis r29, gFastMem@ha -/* 0001B344 000280D4 7F E4 FB 78 */ mr r4, r31 -/* 0001B348 000280D8 83 FF 00 00 */ lwz r31, 0x0(r31) -/* 0001B34C 000280DC 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0001B350 000280E0 41 82 B3 64 */ beq .L_000166B4 -.L_0001B354: -/* 0001B354 000280E4 38 7D 00 00 */ addi r3, r29, gFastMem@l -/* 0001B358 000280E8 38 A0 00 0C */ li r5, 0xc -/* 0001B35C 000280EC 38 C0 00 00 */ li r6, 0x0 -/* 0001B360 000280F0 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 0001B364 000280F4 80 1E 00 04 */ lwz r0, 0x4(r30) -/* 0001B368 000280F8 7C 1F 00 00 */ cmpw r31, r0 -/* 0001B36C 000280FC 40 82 B3 44 */ bne .L_000166B0 -/* 0001B370 00028100 81 3E 00 04 */ lwz r9, 0x4(r30) -/* 0001B374 00028104 91 29 00 00 */ stw r9, 0x0(r9) -/* 0001B378 00028108 81 7E 00 04 */ lwz r11, 0x4(r30) -/* 0001B37C 0002810C 91 6B 00 04 */ stw r11, 0x4(r11) -/* 0001B380 00028110 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0001B384 00028114 7C 08 03 A6 */ mtlr r0 -/* 0001B388 00028118 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 0001B38C 0002811C 38 21 00 18 */ addi r1, r1, 0x18 -/* 0001B390 00028120 4E 80 00 20 */ blr -.endfn clear__Q24_STLt10_List_base2ZP5IBodyZQ33UTL3Stdt9Allocator2ZP5IBodyZ24_type_CameraAIAvoidables - -# .text:0x1B394 | size: 0x60 -.fn find__H2ZQ24_STLt14_List_iterator2ZP5IBodyZQ24_STLt16_Nonconst_traits1ZP5IBodyZP5IBody_4_STLX01X01RCX11_X01, weak -/* 0001B394 00028124 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0001B398 00028128 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001B39C 0002812C 81 24 00 00 */ lwz r9, 0x0(r4) -/* 0001B3A0 00028130 90 01 00 10 */ stw r0, 0x10(r1) -/* 0001B3A4 00028134 7C 0A 03 78 */ mr r10, r0 -/* 0001B3A8 00028138 91 21 00 08 */ stw r9, 0x8(r1) -/* 0001B3AC 0002813C 80 01 00 08 */ lwz r0, 0x8(r1) -/* 0001B3B0 00028140 39 20 00 01 */ li r9, 0x1 -/* 0001B3B4 00028144 7C 0B 03 78 */ mr r11, r0 -/* 0001B3B8 00028148 7C 00 50 00 */ cmpw r0, r10 -/* 0001B3BC 0002814C 40 82 B3 C4 */ bne .L_00016780 -/* 0001B3C0 00028150 39 20 00 00 */ li r9, 0x0 -/* 0001B3C4 00028154 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0001B3C8 00028158 41 82 B3 E8 */ beq .L_000167B0 -/* 0001B3CC 0002815C 81 2B 00 08 */ lwz r9, 0x8(r11) -/* 0001B3D0 00028160 80 06 00 00 */ lwz r0, 0x0(r6) -/* 0001B3D4 00028164 7C 09 00 00 */ cmpw r9, r0 -/* 0001B3D8 00028168 41 82 B3 E8 */ beq .L_000167C0 -/* 0001B3DC 0002816C 80 0B 00 00 */ lwz r0, 0x0(r11) -/* 0001B3E0 00028170 90 01 00 08 */ stw r0, 0x8(r1) -.L_0001B3E4: -/* 0001B3E4 00028174 48 01 B3 AC */ b .text+0x1B3AC -/* 0001B3E8 00028178 91 63 00 00 */ stw r11, 0x0(r3) -/* 0001B3EC 0002817C 38 21 00 18 */ addi r1, r1, 0x18 -/* 0001B3F0 00028180 4E 80 00 20 */ blr -.endfn find__H2ZQ24_STLt14_List_iterator2ZP5IBodyZQ24_STLt16_Nonconst_traits1ZP5IBodyZP5IBody_4_STLX01X01RCX11_X01 - -# .text:0x1B3F4 | size: 0xB0 -.fn find__H2ZPP14ITrafficCenterZP14ITrafficCenter_4_STLX01X01RCX11_X01, weak -/* 0001B3F4 00028184 7C 03 20 50 */ subf r0, r3, r4 -/* 0001B3F8 00028188 7C 0B 26 71 */ srawi. r11, r0, 4 -/* 0001B3FC 0002818C 40 81 B4 40 */ ble .L_0001683C -/* 0001B400 00028190 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001B404 00028194 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001B408 00028198 7C 00 48 00 */ cmpw r0, r9 -/* 0001B40C 0002819C 4D 82 00 20 */ beqlr -/* 0001B410 000281A0 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001B414 000281A4 7C 00 48 00 */ cmpw r0, r9 -/* 0001B418 000281A8 4D 82 00 20 */ beqlr -/* 0001B41C 000281AC 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001B420 000281B0 7C 00 48 00 */ cmpw r0, r9 -.L_0001B424: -/* 0001B424 000281B4 4D 82 00 20 */ beqlr -.L_0001B428: -/* 0001B428 000281B8 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001B42C 000281BC 7C 00 48 00 */ cmpw r0, r9 -/* 0001B430 000281C0 4D 82 00 20 */ beqlr -/* 0001B434 000281C4 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001B438 000281C8 35 6B FF FF */ subic. r11, r11, 0x1 -/* 0001B43C 000281CC 41 81 B4 04 */ bgt .L_00016840 -/* 0001B440 000281D0 7C 03 20 50 */ subf r0, r3, r4 -/* 0001B444 000281D4 7C 00 16 70 */ srawi r0, r0, 2 -/* 0001B448 000281D8 2C 00 00 01 */ cmpwi r0, 0x1 -/* 0001B44C 000281DC 41 82 B4 8C */ beq .L_000168D8 -/* 0001B450 000281E0 40 81 B4 9C */ ble .L_000168EC -/* 0001B454 000281E4 2C 00 00 02 */ cmpwi r0, 0x2 -/* 0001B458 000281E8 41 82 B4 78 */ beq .L_000168D0 -/* 0001B45C 000281EC 2C 00 00 03 */ cmpwi r0, 0x3 -/* 0001B460 000281F0 40 82 B4 9C */ bne .L_000168FC -/* 0001B464 000281F4 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001B468 000281F8 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001B46C 000281FC 7C 09 00 00 */ cmpw r9, r0 -/* 0001B470 00028200 4D 82 00 20 */ beqlr -.L_0001B474: -/* 0001B474 00028204 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001B478 00028208 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001B47C 0002820C 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001B480 00028210 7C 09 00 00 */ cmpw r9, r0 -/* 0001B484 00028214 4D 82 00 20 */ beqlr -/* 0001B488 00028218 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001B48C 0002821C 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001B490 00028220 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001B494 00028224 7C 00 48 00 */ cmpw r0, r9 -/* 0001B498 00028228 4D 82 00 20 */ beqlr -/* 0001B49C 0002822C 7C 83 23 78 */ mr r3, r4 -/* 0001B4A0 00028230 4E 80 00 20 */ blr -.endfn find__H2ZPP14ITrafficCenterZP14ITrafficCenter_4_STLX01X01RCX11_X01 - -# .text:0x1B4A4 | size: 0xB0 -.fn find__H2ZPP12IInputPlayerZP12IInputPlayer_4_STLX01X01RCX11_X01, weak -/* 0001B4A4 00028234 7C 03 20 50 */ subf r0, r3, r4 -/* 0001B4A8 00028238 7C 0B 26 71 */ srawi. r11, r0, 4 -/* 0001B4AC 0002823C 40 81 B4 F0 */ ble .L_0001699C -/* 0001B4B0 00028240 81 25 00 00 */ lwz r9, 0x0(r5) -.L_0001B4B4: -/* 0001B4B4 00028244 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001B4B8 00028248 7C 00 48 00 */ cmpw r0, r9 -/* 0001B4BC 0002824C 4D 82 00 20 */ beqlr -/* 0001B4C0 00028250 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001B4C4 00028254 7C 00 48 00 */ cmpw r0, r9 -/* 0001B4C8 00028258 4D 82 00 20 */ beqlr -/* 0001B4CC 0002825C 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001B4D0 00028260 7C 00 48 00 */ cmpw r0, r9 -/* 0001B4D4 00028264 4D 82 00 20 */ beqlr -/* 0001B4D8 00028268 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001B4DC 0002826C 7C 00 48 00 */ cmpw r0, r9 -/* 0001B4E0 00028270 4D 82 00 20 */ beqlr -/* 0001B4E4 00028274 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001B4E8 00028278 35 6B FF FF */ subic. r11, r11, 0x1 -/* 0001B4EC 0002827C 41 81 B4 B4 */ bgt .L_000169A0 -/* 0001B4F0 00028280 7C 03 20 50 */ subf r0, r3, r4 -/* 0001B4F4 00028284 7C 00 16 70 */ srawi r0, r0, 2 -/* 0001B4F8 00028288 2C 00 00 01 */ cmpwi r0, 0x1 -/* 0001B4FC 0002828C 41 82 B5 3C */ beq .L_00016A38 -/* 0001B500 00028290 40 81 B5 4C */ ble .L_00016A4C -/* 0001B504 00028294 2C 00 00 02 */ cmpwi r0, 0x2 -/* 0001B508 00028298 41 82 B5 28 */ beq .L_00016A30 -/* 0001B50C 0002829C 2C 00 00 03 */ cmpwi r0, 0x3 -/* 0001B510 000282A0 40 82 B5 4C */ bne .L_00016A5C -/* 0001B514 000282A4 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001B518 000282A8 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001B51C 000282AC 7C 09 00 00 */ cmpw r9, r0 -/* 0001B520 000282B0 4D 82 00 20 */ beqlr -/* 0001B524 000282B4 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001B528 000282B8 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001B52C 000282BC 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001B530 000282C0 7C 09 00 00 */ cmpw r9, r0 -/* 0001B534 000282C4 4D 82 00 20 */ beqlr -/* 0001B538 000282C8 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001B53C 000282CC 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001B540 000282D0 80 03 00 00 */ lwz r0, 0x0(r3) -.L_0001B544: -/* 0001B544 000282D4 7C 00 48 00 */ cmpw r0, r9 -/* 0001B548 000282D8 4D 82 00 20 */ beqlr -/* 0001B54C 000282DC 7C 83 23 78 */ mr r3, r4 -/* 0001B550 000282E0 4E 80 00 20 */ blr -.endfn find__H2ZPP12IInputPlayerZP12IInputPlayer_4_STLX01X01RCX11_X01 - -# .text:0x1B554 | size: 0x24 -.fn Copy4__H2Z8bVector4ZQ25UMath7Vector4__14ConversionUtilRX11RCX01_v, weak -/* 0001B554 000282E4 C0 04 00 00 */ lfs f0, 0x0(r4) -/* 0001B558 000282E8 D0 03 00 00 */ stfs f0, 0x0(r3) -/* 0001B55C 000282EC C1 A4 00 04 */ lfs f13, 0x4(r4) -/* 0001B560 000282F0 D1 A3 00 04 */ stfs f13, 0x4(r3) -/* 0001B564 000282F4 C0 04 00 08 */ lfs f0, 0x8(r4) -/* 0001B568 000282F8 D0 03 00 08 */ stfs f0, 0x8(r3) -/* 0001B56C 000282FC C1 A4 00 0C */ lfs f13, 0xc(r4) -/* 0001B570 00028300 D1 A3 00 0C */ stfs f13, 0xc(r3) -/* 0001B574 00028304 4E 80 00 20 */ blr -.endfn Copy4__H2Z8bVector4ZQ25UMath7Vector4__14ConversionUtilRX11RCX01_v - -# .text:0x1B578 | size: 0x28 -.fn Scale3__H1ZQ25UMath7Vector4__14ConversionUtilRX01f_v, weak -/* 0001B578 00028308 C0 03 00 00 */ lfs f0, 0x0(r3) -/* 0001B57C 0002830C C1 A3 00 04 */ lfs f13, 0x4(r3) -.L_0001B580: -/* 0001B580 00028310 C1 83 00 08 */ lfs f12, 0x8(r3) -/* 0001B584 00028314 EC 00 00 72 */ fmuls f0, f0, f1 -/* 0001B588 00028318 ED AD 00 72 */ fmuls f13, f13, f1 -/* 0001B58C 0002831C D0 03 00 00 */ stfs f0, 0x0(r3) -/* 0001B590 00028320 ED 8C 00 72 */ fmuls f12, f12, f1 -/* 0001B594 00028324 D1 A3 00 04 */ stfs f13, 0x4(r3) -/* 0001B598 00028328 D1 83 00 08 */ stfs f12, 0x8(r3) -/* 0001B59C 0002832C 4E 80 00 20 */ blr -.endfn Scale3__H1ZQ25UMath7Vector4__14ConversionUtilRX01f_v - -# .text:0x1B5A0 | size: 0x44 -.fn Make4__H1ZQ25UMath7Vector4__14ConversionUtilffff_X01, weak -/* 0001B5A0 00028330 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0001B5A4 00028334 D0 21 00 08 */ stfs f1, 0x8(r1) -/* 0001B5A8 00028338 39 61 00 08 */ addi r11, r1, 0x8 -.L_0001B5AC: -/* 0001B5AC 0002833C D0 41 00 0C */ stfs f2, 0xc(r1) -/* 0001B5B0 00028340 7C 69 1B 78 */ mr r9, r3 -/* 0001B5B4 00028344 D0 61 00 10 */ stfs f3, 0x10(r1) -/* 0001B5B8 00028348 D0 81 00 14 */ stfs f4, 0x14(r1) -/* 0001B5BC 0002834C 81 01 00 08 */ lwz r8, 0x8(r1) -/* 0001B5C0 00028350 80 EB 00 0C */ lwz r7, 0xc(r11) -/* 0001B5C4 00028354 80 0B 00 04 */ lwz r0, 0x4(r11) -/* 0001B5C8 00028358 81 4B 00 08 */ lwz r10, 0x8(r11) -/* 0001B5CC 0002835C 91 09 00 00 */ stw r8, 0x0(r9) -/* 0001B5D0 00028360 90 09 00 04 */ stw r0, 0x4(r9) -/* 0001B5D4 00028364 91 49 00 08 */ stw r10, 0x8(r9) -/* 0001B5D8 00028368 90 E9 00 0C */ stw r7, 0xc(r9) -/* 0001B5DC 0002836C 38 21 00 18 */ addi r1, r1, 0x18 -/* 0001B5E0 00028370 4E 80 00 20 */ blr -.endfn Make4__H1ZQ25UMath7Vector4__14ConversionUtilffff_X01 - -# .text:0x1B5E4 | size: 0x6C -.fn RightToLeftVector4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRCX01RX11_v, weak -/* 0001B5E4 00028374 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 0001B5E8 00028378 7C 08 02 A6 */ mflr r0 -/* 0001B5EC 0002837C BF C1 00 18 */ stmw r30, 0x18(r1) -/* 0001B5F0 00028380 90 01 00 24 */ stw r0, 0x24(r1) -/* 0001B5F4 00028384 7C 69 1B 78 */ mr r9, r3 -/* 0001B5F8 00028388 7C 9E 23 78 */ mr r30, r4 -/* 0001B5FC 0002838C C0 29 00 04 */ lfs f1, 0x4(r9) -/* 0001B600 00028390 38 61 00 08 */ addi r3, r1, 0x8 -/* 0001B604 00028394 C0 89 00 0C */ lfs f4, 0xc(r9) -/* 0001B608 00028398 C0 49 00 08 */ lfs f2, 0x8(r9) -/* 0001B60C 0002839C FC 20 08 50 */ fneg f1, f1 -/* 0001B610 000283A0 C0 69 00 00 */ lfs f3, 0x0(r9) -/* 0001B614 000283A4 48 00 00 01 */ bl Make4__H1ZQ25UMath7Vector4__14ConversionUtilffff_X01 -/* 0001B618 000283A8 39 21 00 08 */ addi r9, r1, 0x8 -/* 0001B61C 000283AC 81 01 00 08 */ lwz r8, 0x8(r1) -/* 0001B620 000283B0 80 09 00 0C */ lwz r0, 0xc(r9) -.L_0001B624: -/* 0001B624 000283B4 81 69 00 04 */ lwz r11, 0x4(r9) -/* 0001B628 000283B8 81 49 00 08 */ lwz r10, 0x8(r9) -/* 0001B62C 000283BC 90 1E 00 0C */ stw r0, 0xc(r30) -.L_0001B630: -/* 0001B630 000283C0 91 1E 00 00 */ stw r8, 0x0(r30) -/* 0001B634 000283C4 91 7E 00 04 */ stw r11, 0x4(r30) -/* 0001B638 000283C8 91 5E 00 08 */ stw r10, 0x8(r30) -/* 0001B63C 000283CC 80 01 00 24 */ lwz r0, 0x24(r1) -/* 0001B640 000283D0 7C 08 03 A6 */ mtlr r0 -/* 0001B644 000283D4 BB C1 00 18 */ lmw r30, 0x18(r1) -/* 0001B648 000283D8 38 21 00 20 */ addi r1, r1, 0x20 -/* 0001B64C 000283DC 4E 80 00 20 */ blr -.endfn RightToLeftVector4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRCX01RX11_v - -# .text:0x1B650 | size: 0xA8 -.fn RightToLeftMatrix4__H2Z8bMatrix4ZQ25UMath7Matrix4__14ConversionUtilRCX01RX11_v, weak -/* 0001B650 000283E0 94 21 FF 98 */ stwu r1, -0x68(r1) -/* 0001B654 000283E4 7C 08 02 A6 */ mflr r0 -/* 0001B658 000283E8 BF 21 00 4C */ stmw r25, 0x4c(r1) -/* 0001B65C 000283EC 90 01 00 6C */ stw r0, 0x6c(r1) -/* 0001B660 000283F0 3B C1 00 08 */ addi r30, r1, 0x8 -/* 0001B664 000283F4 7C 9D 23 78 */ mr r29, r4 -/* 0001B668 000283F8 7C 04 03 78 */ mr r4, r0 -/* 0001B66C 000283FC 7F C3 F3 78 */ mr r3, r30 -/* 0001B670 00028400 48 00 00 01 */ bl Copy4__H2Z8bVector4ZQ25UMath7Vector4__14ConversionUtilRX11RCX01_v -/* 0001B674 00028404 3B 41 00 18 */ addi r26, r1, 0x18 -/* 0001B678 00028408 7F 84 E3 78 */ mr r4, r28 -/* 0001B67C 0002840C 7F 43 D3 78 */ mr r3, r26 -/* 0001B680 00028410 48 00 00 01 */ bl Copy4__H2Z8bVector4ZQ25UMath7Vector4__14ConversionUtilRX11RCX01_v -/* 0001B684 00028414 3B 61 00 28 */ addi r27, r1, 0x28 -/* 0001B688 00028418 7F E4 FB 78 */ mr r4, r31 -.L_0001B68C: -/* 0001B68C 0002841C 7F 63 DB 78 */ mr r3, r27 -/* 0001B690 00028420 48 00 00 01 */ bl Copy4__H2Z8bVector4ZQ25UMath7Vector4__14ConversionUtilRX11RCX01_v -/* 0001B694 00028424 3B 81 00 38 */ addi r28, r1, 0x38 -/* 0001B698 00028428 7F 24 CB 78 */ mr r4, r25 -/* 0001B69C 0002842C 7F 83 E3 78 */ mr r3, r28 -/* 0001B6A0 00028430 48 00 00 01 */ bl Copy4__H2Z8bVector4ZQ25UMath7Vector4__14ConversionUtilRX11RCX01_v -/* 0001B6A4 00028434 3D 20 00 00 */ lis r9, .rodata+0xE60@ha -/* 0001B6A8 00028438 7F C3 F3 78 */ mr r3, r30 -/* 0001B6AC 0002843C C0 29 0E 60 */ lfs f1, .rodata+0xE60@l(r9) -/* 0001B6B0 00028440 48 00 00 01 */ bl Scale3__H1ZQ25UMath7Vector4__14ConversionUtilRX01f_v -/* 0001B6B4 00028444 7F C3 F3 78 */ mr r3, r30 -/* 0001B6B8 00028448 7F A4 EB 78 */ mr r4, r29 -/* 0001B6BC 0002844C 48 00 00 01 */ bl RightToLeftVector4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRCX01RX11_v -/* 0001B6C0 00028450 7F 43 D3 78 */ mr r3, r26 -.L_0001B6C4: -/* 0001B6C4 00028454 38 9D 00 10 */ addi r4, r29, 0x10 -/* 0001B6C8 00028458 48 00 00 01 */ bl RightToLeftVector4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRCX01RX11_v -/* 0001B6CC 0002845C 7F 63 DB 78 */ mr r3, r27 -/* 0001B6D0 00028460 38 9D 00 20 */ addi r4, r29, 0x20 -/* 0001B6D4 00028464 48 00 00 01 */ bl RightToLeftVector4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRCX01RX11_v -/* 0001B6D8 00028468 7F 83 E3 78 */ mr r3, r28 -/* 0001B6DC 0002846C 38 9D 00 30 */ addi r4, r29, 0x30 -/* 0001B6E0 00028470 48 00 00 01 */ bl RightToLeftVector4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRCX01RX11_v -/* 0001B6E4 00028474 80 01 00 6C */ lwz r0, 0x6c(r1) -/* 0001B6E8 00028478 7C 08 03 A6 */ mtlr r0 -/* 0001B6EC 0002847C BB 21 00 4C */ lmw r25, 0x4c(r1) -/* 0001B6F0 00028480 38 21 00 68 */ addi r1, r1, 0x68 -/* 0001B6F4 00028484 4E 80 00 20 */ blr -.endfn RightToLeftMatrix4__H2Z8bMatrix4ZQ25UMath7Matrix4__14ConversionUtilRCX01RX11_v - -# .text:0x1B6F8 | size: 0x38 -.fn Make3__H1ZQ25UMath7Vector3__14ConversionUtilfff_X01, weak -/* 0001B6F8 00028488 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0001B6FC 0002848C D0 21 00 08 */ stfs f1, 0x8(r1) -/* 0001B700 00028490 39 01 00 08 */ addi r8, r1, 0x8 -.L_0001B704: -/* 0001B704 00028494 D0 41 00 0C */ stfs f2, 0xc(r1) -/* 0001B708 00028498 7C 69 1B 78 */ mr r9, r3 -/* 0001B70C 0002849C D0 61 00 10 */ stfs f3, 0x10(r1) -/* 0001B710 000284A0 81 61 00 08 */ lwz r11, 0x8(r1) -/* 0001B714 000284A4 81 48 00 08 */ lwz r10, 0x8(r8) -/* 0001B718 000284A8 80 08 00 04 */ lwz r0, 0x4(r8) -/* 0001B71C 000284AC 91 69 00 00 */ stw r11, 0x0(r9) -/* 0001B720 000284B0 90 09 00 04 */ stw r0, 0x4(r9) -/* 0001B724 000284B4 91 49 00 08 */ stw r10, 0x8(r9) -/* 0001B728 000284B8 38 21 00 18 */ addi r1, r1, 0x18 -/* 0001B72C 000284BC 4E 80 00 20 */ blr -.endfn Make3__H1ZQ25UMath7Vector3__14ConversionUtilfff_X01 - -# .text:0x1B730 | size: 0x60 -.fn RightToLeftVector3__H2Z8bVector3ZQ25UMath7Vector3__14ConversionUtilRCX01RX11_v, weak -/* 0001B730 000284C0 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 0001B734 000284C4 7C 08 02 A6 */ mflr r0 -/* 0001B738 000284C8 BF C1 00 18 */ stmw r30, 0x18(r1) -/* 0001B73C 000284CC 90 01 00 24 */ stw r0, 0x24(r1) -/* 0001B740 000284D0 7C 69 1B 78 */ mr r9, r3 -/* 0001B744 000284D4 7C 9E 23 78 */ mr r30, r4 -/* 0001B748 000284D8 C0 29 00 04 */ lfs f1, 0x4(r9) -/* 0001B74C 000284DC 38 61 00 08 */ addi r3, r1, 0x8 -/* 0001B750 000284E0 C0 69 00 00 */ lfs f3, 0x0(r9) -/* 0001B754 000284E4 C0 49 00 08 */ lfs f2, 0x8(r9) -/* 0001B758 000284E8 FC 20 08 50 */ fneg f1, f1 -/* 0001B75C 000284EC 48 00 00 01 */ bl Make3__H1ZQ25UMath7Vector3__14ConversionUtilfff_X01 -/* 0001B760 000284F0 39 21 00 08 */ addi r9, r1, 0x8 -/* 0001B764 000284F4 81 41 00 08 */ lwz r10, 0x8(r1) -/* 0001B768 000284F8 80 09 00 08 */ lwz r0, 0x8(r9) -.L_0001B76C: -/* 0001B76C 000284FC 81 69 00 04 */ lwz r11, 0x4(r9) -/* 0001B770 00028500 90 1E 00 08 */ stw r0, 0x8(r30) -/* 0001B774 00028504 91 5E 00 00 */ stw r10, 0x0(r30) -/* 0001B778 00028508 91 7E 00 04 */ stw r11, 0x4(r30) -/* 0001B77C 0002850C 80 01 00 24 */ lwz r0, 0x24(r1) -/* 0001B780 00028510 7C 08 03 A6 */ mtlr r0 -/* 0001B784 00028514 BB C1 00 18 */ lmw r30, 0x18(r1) -/* 0001B788 00028518 38 21 00 20 */ addi r1, r1, 0x20 -/* 0001B78C 0002851C 4E 80 00 20 */ blr -.endfn RightToLeftVector3__H2Z8bVector3ZQ25UMath7Vector3__14ConversionUtilRCX01RX11_v - -# .text:0x1B790 | size: 0x24 -.fn Copy4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRX11RCX01_v, global -/* 0001B790 00028520 C0 04 00 00 */ lfs f0, 0x0(r4) -/* 0001B794 00028524 D0 03 00 00 */ stfs f0, 0x0(r3) -/* 0001B798 00028528 C1 A4 00 04 */ lfs f13, 0x4(r4) -/* 0001B79C 0002852C D1 A3 00 04 */ stfs f13, 0x4(r3) -/* 0001B7A0 00028530 C0 04 00 08 */ lfs f0, 0x8(r4) -/* 0001B7A4 00028534 D0 03 00 08 */ stfs f0, 0x8(r3) -/* 0001B7A8 00028538 C1 A4 00 0C */ lfs f13, 0xc(r4) -/* 0001B7AC 0002853C D1 A3 00 0C */ stfs f13, 0xc(r3) -/* 0001B7B0 00028540 4E 80 00 20 */ blr -.endfn Copy4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRX11RCX01_v - -# .text:0x1B7B4 | size: 0x60 -.fn RightToLeftVector3__H2ZQ25UMath7Vector3ZQ25UMath7Vector3__14ConversionUtilRCX01RX11_v, global -/* 0001B7B4 00028544 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 0001B7B8 00028548 7C 08 02 A6 */ mflr r0 -.L_0001B7BC: -/* 0001B7BC 0002854C BF C1 00 18 */ stmw r30, 0x18(r1) -/* 0001B7C0 00028550 90 01 00 24 */ stw r0, 0x24(r1) -/* 0001B7C4 00028554 7C 69 1B 78 */ mr r9, r3 -/* 0001B7C8 00028558 7C 9E 23 78 */ mr r30, r4 -/* 0001B7CC 0002855C C0 29 00 04 */ lfs f1, 0x4(r9) -/* 0001B7D0 00028560 38 61 00 08 */ addi r3, r1, 0x8 -/* 0001B7D4 00028564 C0 69 00 00 */ lfs f3, 0x0(r9) -/* 0001B7D8 00028568 C0 49 00 08 */ lfs f2, 0x8(r9) -/* 0001B7DC 0002856C FC 20 08 50 */ fneg f1, f1 -.L_0001B7E0: -/* 0001B7E0 00028570 48 00 00 01 */ bl Make3__H1ZQ25UMath7Vector3__14ConversionUtilfff_X01 -/* 0001B7E4 00028574 39 21 00 08 */ addi r9, r1, 0x8 -.L_0001B7E8: -/* 0001B7E8 00028578 81 41 00 08 */ lwz r10, 0x8(r1) -/* 0001B7EC 0002857C 80 09 00 08 */ lwz r0, 0x8(r9) -/* 0001B7F0 00028580 81 69 00 04 */ lwz r11, 0x4(r9) -/* 0001B7F4 00028584 90 1E 00 08 */ stw r0, 0x8(r30) -/* 0001B7F8 00028588 91 5E 00 00 */ stw r10, 0x0(r30) -/* 0001B7FC 0002858C 91 7E 00 04 */ stw r11, 0x4(r30) -.L_0001B800: -/* 0001B800 00028590 80 01 00 24 */ lwz r0, 0x24(r1) -/* 0001B804 00028594 7C 08 03 A6 */ mtlr r0 -/* 0001B808 00028598 BB C1 00 18 */ lmw r30, 0x18(r1) -/* 0001B80C 0002859C 38 21 00 20 */ addi r1, r1, 0x20 -.L_0001B810: -/* 0001B810 000285A0 4E 80 00 20 */ blr -.endfn RightToLeftVector3__H2ZQ25UMath7Vector3ZQ25UMath7Vector3__14ConversionUtilRCX01RX11_v - -# .text:0x1B814 | size: 0xAC -.fn RightToLeftMatrix4__H2ZQ25UMath7Matrix4ZQ25UMath7Matrix4__14ConversionUtilRCX01RX11_v, global -/* 0001B814 000285A4 94 21 FF 98 */ stwu r1, -0x68(r1) -/* 0001B818 000285A8 7C 08 02 A6 */ mflr r0 -/* 0001B81C 000285AC BF 21 00 4C */ stmw r25, 0x4c(r1) -/* 0001B820 000285B0 90 01 00 6C */ stw r0, 0x6c(r1) -/* 0001B824 000285B4 3B A1 00 08 */ addi r29, r1, 0x8 -/* 0001B828 000285B8 7C 7E 1B 78 */ mr r30, r3 -/* 0001B82C 000285BC 7C 9C 23 78 */ mr r28, r4 -/* 0001B830 000285C0 3B 61 00 18 */ addi r27, r1, 0x18 -/* 0001B834 000285C4 38 9E 00 10 */ addi r4, r30, 0x10 -/* 0001B838 000285C8 7F A3 EB 78 */ mr r3, r29 -/* 0001B83C 000285CC 48 01 B7 91 */ bl .text+0x1B790 -/* 0001B840 000285D0 3B 21 00 28 */ addi r25, r1, 0x28 -/* 0001B844 000285D4 7F 63 DB 78 */ mr r3, r27 -/* 0001B848 000285D8 38 9E 00 20 */ addi r4, r30, 0x20 -/* 0001B84C 000285DC 48 01 B7 91 */ bl .text+0x1B790 -/* 0001B850 000285E0 3B 41 00 38 */ addi r26, r1, 0x38 -/* 0001B854 000285E4 7F 23 CB 78 */ mr r3, r25 -/* 0001B858 000285E8 7F C4 F3 78 */ mr r4, r30 -/* 0001B85C 000285EC 48 01 B7 91 */ bl .text+0x1B790 -/* 0001B860 000285F0 38 9E 00 30 */ addi r4, r30, 0x30 -/* 0001B864 000285F4 7F 43 D3 78 */ mr r3, r26 -/* 0001B868 000285F8 48 01 B7 91 */ bl .text+0x1B790 -/* 0001B86C 000285FC 3D 20 00 00 */ lis r9, .rodata+0xE64@ha -/* 0001B870 00028600 7F A3 EB 78 */ mr r3, r29 -/* 0001B874 00028604 C0 29 0E 64 */ lfs f1, .rodata+0xE64@l(r9) -/* 0001B878 00028608 48 00 00 01 */ bl Scale3__H1ZQ25UMath7Vector4__14ConversionUtilRX01f_v -/* 0001B87C 0002860C 7F A3 EB 78 */ mr r3, r29 -/* 0001B880 00028610 7F 84 E3 78 */ mr r4, r28 -/* 0001B884 00028614 48 00 00 01 */ bl RightToLeftVector4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRCX01RX11_v -/* 0001B888 00028618 7F 63 DB 78 */ mr r3, r27 -/* 0001B88C 0002861C 38 9C 00 10 */ addi r4, r28, 0x10 -/* 0001B890 00028620 48 00 00 01 */ bl RightToLeftVector4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRCX01RX11_v -/* 0001B894 00028624 7F 23 CB 78 */ mr r3, r25 -/* 0001B898 00028628 38 9C 00 20 */ addi r4, r28, 0x20 -/* 0001B89C 0002862C 48 00 00 01 */ bl RightToLeftVector4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRCX01RX11_v -/* 0001B8A0 00028630 7F 43 D3 78 */ mr r3, r26 -/* 0001B8A4 00028634 38 9C 00 30 */ addi r4, r28, 0x30 -/* 0001B8A8 00028638 48 00 00 01 */ bl RightToLeftVector4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRCX01RX11_v -.L_0001B8AC: -/* 0001B8AC 0002863C 80 01 00 6C */ lwz r0, 0x6c(r1) -/* 0001B8B0 00028640 7C 08 03 A6 */ mtlr r0 -/* 0001B8B4 00028644 BB 21 00 4C */ lmw r25, 0x4c(r1) -.L_0001B8B8: -/* 0001B8B8 00028648 38 21 00 68 */ addi r1, r1, 0x68 -/* 0001B8BC 0002864C 4E 80 00 20 */ blr -.endfn RightToLeftMatrix4__H2ZQ25UMath7Matrix4ZQ25UMath7Matrix4__14ConversionUtilRCX01RX11_v - -# .text:0x1B8C0 | size: 0xB0 -.fn find__H2ZPP14IDebugWatchCarZP14IDebugWatchCar_4_STLX01X01RCX11_X01, weak -/* 0001B8C0 00028650 7C 03 20 50 */ subf r0, r3, r4 -/* 0001B8C4 00028654 7C 0B 26 71 */ srawi. r11, r0, 4 -/* 0001B8C8 00028658 40 81 B9 0C */ ble .L_000171D4 -/* 0001B8CC 0002865C 81 25 00 00 */ lwz r9, 0x0(r5) -.L_0001B8D0: -/* 0001B8D0 00028660 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001B8D4 00028664 7C 00 48 00 */ cmpw r0, r9 -/* 0001B8D8 00028668 4D 82 00 20 */ beqlr -/* 0001B8DC 0002866C 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001B8E0 00028670 7C 00 48 00 */ cmpw r0, r9 -/* 0001B8E4 00028674 4D 82 00 20 */ beqlr -/* 0001B8E8 00028678 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001B8EC 0002867C 7C 00 48 00 */ cmpw r0, r9 -/* 0001B8F0 00028680 4D 82 00 20 */ beqlr -/* 0001B8F4 00028684 84 03 00 04 */ lwzu r0, 0x4(r3) -/* 0001B8F8 00028688 7C 00 48 00 */ cmpw r0, r9 -/* 0001B8FC 0002868C 4D 82 00 20 */ beqlr -/* 0001B900 00028690 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001B904 00028694 35 6B FF FF */ subic. r11, r11, 0x1 -/* 0001B908 00028698 41 81 B8 D0 */ bgt ReplayPowerSlideMirror__FP9ICEAnchor -/* 0001B90C 0002869C 7C 03 20 50 */ subf r0, r3, r4 -/* 0001B910 000286A0 7C 00 16 70 */ srawi r0, r0, 2 -/* 0001B914 000286A4 2C 00 00 01 */ cmpwi r0, 0x1 -/* 0001B918 000286A8 41 82 B9 58 */ beq .L_00017270 -/* 0001B91C 000286AC 40 81 B9 68 */ ble .L_00017284 -/* 0001B920 000286B0 2C 00 00 02 */ cmpwi r0, 0x2 -/* 0001B924 000286B4 41 82 B9 44 */ beq .L_00017268 -/* 0001B928 000286B8 2C 00 00 03 */ cmpwi r0, 0x3 -/* 0001B92C 000286BC 40 82 B9 68 */ bne .L_00017294 -/* 0001B930 000286C0 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001B934 000286C4 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001B938 000286C8 7C 09 00 00 */ cmpw r9, r0 -/* 0001B93C 000286CC 4D 82 00 20 */ beqlr -/* 0001B940 000286D0 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001B944 000286D4 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001B948 000286D8 80 05 00 00 */ lwz r0, 0x0(r5) -/* 0001B94C 000286DC 7C 09 00 00 */ cmpw r9, r0 -/* 0001B950 000286E0 4D 82 00 20 */ beqlr -/* 0001B954 000286E4 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001B958 000286E8 81 25 00 00 */ lwz r9, 0x0(r5) -/* 0001B95C 000286EC 80 03 00 00 */ lwz r0, 0x0(r3) -/* 0001B960 000286F0 7C 00 48 00 */ cmpw r0, r9 -/* 0001B964 000286F4 4D 82 00 20 */ beqlr -/* 0001B968 000286F8 7C 83 23 78 */ mr r3, r4 -/* 0001B96C 000286FC 4E 80 00 20 */ blr -.endfn find__H2ZPP14IDebugWatchCarZP14IDebugWatchCar_4_STLX01X01RCX11_X01 - -# .text:0x1B970 | size: 0x18 -.fn Count__Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi1012eVehicleList, weak -/* 0001B970 00028700 1C 63 00 38 */ mulli r3, r3, 0x38 -/* 0001B974 00028704 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@ha -/* 0001B978 00028708 39 29 00 00 */ addi r9, r9, _Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists@l -/* 0001B97C 0002870C 7C 63 4A 14 */ add r3, r3, r9 -/* 0001B980 00028710 80 63 00 08 */ lwz r3, 0x8(r3) -/* 0001B984 00028714 4E 80 00 20 */ blr -.endfn Count__Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi1012eVehicleList - -# .text:0x1B988 | size: 0x1BC -.fn __static_initialization_and_destruction_0, local -/* 0001B988 00028718 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 0001B98C 0002871C 7C 08 02 A6 */ mflr r0 -/* 0001B990 00028720 BF C1 00 10 */ stmw r30, 0x10(r1) -/* 0001B994 00028724 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0001B998 00028728 38 00 00 00 */ li r0, 0x0 -.L_0001B99C: -/* 0001B99C 0002872C 60 00 FF FF */ ori r0, r0, 0xffff -/* 0001B9A0 00028730 7C 04 00 00 */ cmpw r4, r0 -/* 0001B9A4 00028734 40 82 BB 30 */ bne .L_000174D4 -.L_0001B9A8: -/* 0001B9A8 00028738 2C 03 00 00 */ cmpwi r3, 0x0 -/* 0001B9AC 0002873C 41 82 BB 30 */ beq .L_000174DC -/* 0001B9B0 00028740 3D 20 80 00 */ lis r9, 0x8000 -/* 0001B9B4 00028744 3C 00 7E 80 */ lis r0, 0x7e80 -/* 0001B9B8 00028748 7D 28 4B 78 */ mr r8, r9 -/* 0001B9BC 0002874C 7C 0A 03 78 */ mr r10, r0 -/* 0001B9C0 00028750 3D 60 00 00 */ lis r11, kFloatScaleUp@ha -/* 0001B9C4 00028754 3D 20 00 00 */ lis r9, kFloatScaleDown@ha -/* 0001B9C8 00028758 3C 60 00 00 */ lis r3, .rodata+0x74C@ha -/* 0001B9CC 0002875C 91 09 00 00 */ stw r8, kFloatScaleDown@l(r9) -/* 0001B9D0 00028760 91 4B 00 00 */ stw r10, kFloatScaleUp@l(r11) -/* 0001B9D4 00028764 38 63 07 4C */ addi r3, r3, .rodata+0x74C@l -/* 0001B9D8 00028768 48 00 00 01 */ bl stringhash32__FPCc -/* 0001B9DC 0002876C 3F C0 00 00 */ lis r30, _Q43UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32_9Prototype.mHead@ha -/* 0001B9E0 00028770 7C 60 1B 78 */ mr r0, r3 -/* 0001B9E4 00028774 3D 40 00 00 */ lis r10, _CDActionDrive@ha -/* 0001B9E8 00028778 3D 20 00 00 */ lis r9, Construct__13CDActionDrivePQ28CameraAI8Director@ha -/* 0001B9EC 0002877C 39 6A 00 00 */ addi r11, r10, _CDActionDrive@l -/* 0001B9F0 00028780 90 0A 00 00 */ stw r0, _CDActionDrive@l(r10) -/* 0001B9F4 00028784 39 29 00 00 */ addi r9, r9, Construct__13CDActionDrivePQ28CameraAI8Director@l -/* 0001B9F8 00028788 91 2B 00 04 */ stw r9, 0x4(r11) -/* 0001B9FC 0002878C 3C 60 00 00 */ lis r3, .rodata+0x8A8@ha -/* 0001BA00 00028790 90 01 00 08 */ stw r0, 0x8(r1) -/* 0001BA04 00028794 38 63 08 A8 */ addi r3, r3, .rodata+0x8A8@l -/* 0001BA08 00028798 91 7E 00 00 */ stw r11, _Q43UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32_9Prototype.mHead@l(r30) -/* 0001BA0C 0002879C 48 00 00 01 */ bl stringhash32__FPCc -/* 0001BA10 000287A0 7C 60 1B 78 */ mr r0, r3 -/* 0001BA14 000287A4 3D 40 00 00 */ lis r10, _CDActionTrackCar@ha -/* 0001BA18 000287A8 3D 20 00 00 */ lis r9, Construct__16CDActionTrackCarPQ28CameraAI8Director@ha -/* 0001BA1C 000287AC 39 6A 00 00 */ addi r11, r10, _CDActionTrackCar@l -/* 0001BA20 000287B0 90 0A 00 00 */ stw r0, _CDActionTrackCar@l(r10) -/* 0001BA24 000287B4 39 29 00 00 */ addi r9, r9, Construct__16CDActionTrackCarPQ28CameraAI8Director@l -/* 0001BA28 000287B8 91 2B 00 04 */ stw r9, 0x4(r11) -/* 0001BA2C 000287BC 3C 60 00 00 */ lis r3, .rodata+0x8B8@ha -.L_0001BA30: -/* 0001BA30 000287C0 90 01 00 08 */ stw r0, 0x8(r1) -/* 0001BA34 000287C4 38 63 08 B8 */ addi r3, r3, .rodata+0x8B8@l -/* 0001BA38 000287C8 91 7E 00 00 */ stw r11, _Q43UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32_9Prototype.mHead@l(r30) -/* 0001BA3C 000287CC 48 00 00 01 */ bl stringhash32__FPCc -/* 0001BA40 000287D0 7C 60 1B 78 */ mr r0, r3 -/* 0001BA44 000287D4 3D 40 00 00 */ lis r10, _CDActionTrackCop@ha -/* 0001BA48 000287D8 3D 20 00 00 */ lis r9, Construct__16CDActionTrackCopPQ28CameraAI8Director@ha -/* 0001BA4C 000287DC 39 6A 00 00 */ addi r11, r10, _CDActionTrackCop@l -/* 0001BA50 000287E0 90 0A 00 00 */ stw r0, _CDActionTrackCop@l(r10) -/* 0001BA54 000287E4 39 29 00 00 */ addi r9, r9, Construct__16CDActionTrackCopPQ28CameraAI8Director@l -/* 0001BA58 000287E8 91 2B 00 04 */ stw r9, 0x4(r11) -/* 0001BA5C 000287EC 3C 60 00 00 */ lis r3, .rodata+0x8C8@ha -/* 0001BA60 000287F0 90 01 00 08 */ stw r0, 0x8(r1) -/* 0001BA64 000287F4 38 63 08 C8 */ addi r3, r3, .rodata+0x8C8@l -/* 0001BA68 000287F8 91 7E 00 00 */ stw r11, _Q43UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32_9Prototype.mHead@l(r30) -/* 0001BA6C 000287FC 48 00 00 01 */ bl stringhash32__FPCc -/* 0001BA70 00028800 7C 60 1B 78 */ mr r0, r3 -/* 0001BA74 00028804 3D 40 00 00 */ lis r10, _CDActionShowcase@ha -/* 0001BA78 00028808 3D 20 00 00 */ lis r9, Construct__16CDActionShowcasePQ28CameraAI8Director@ha -/* 0001BA7C 0002880C 39 6A 00 00 */ addi r11, r10, _CDActionShowcase@l -/* 0001BA80 00028810 90 0A 00 00 */ stw r0, _CDActionShowcase@l(r10) -/* 0001BA84 00028814 39 29 00 00 */ addi r9, r9, Construct__16CDActionShowcasePQ28CameraAI8Director@l -/* 0001BA88 00028818 91 2B 00 04 */ stw r9, 0x4(r11) -/* 0001BA8C 0002881C 3C 60 00 00 */ lis r3, .rodata+0x8D8@ha -/* 0001BA90 00028820 90 01 00 08 */ stw r0, 0x8(r1) -/* 0001BA94 00028824 38 63 08 D8 */ addi r3, r3, .rodata+0x8D8@l -/* 0001BA98 00028828 91 7E 00 00 */ stw r11, _Q43UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32_9Prototype.mHead@l(r30) -/* 0001BA9C 0002882C 48 00 00 01 */ bl stringhash32__FPCc -/* 0001BAA0 00028830 7C 60 1B 78 */ mr r0, r3 -/* 0001BAA4 00028834 3D 40 00 00 */ lis r10, _CDActionDebug@ha -/* 0001BAA8 00028838 3D 20 00 00 */ lis r9, Construct__13CDActionDebugPQ28CameraAI8Director@ha -.L_0001BAAC: -/* 0001BAAC 0002883C 39 6A 00 00 */ addi r11, r10, _CDActionDebug@l -/* 0001BAB0 00028840 90 0A 00 00 */ stw r0, _CDActionDebug@l(r10) -/* 0001BAB4 00028844 39 29 00 00 */ addi r9, r9, Construct__13CDActionDebugPQ28CameraAI8Director@l -/* 0001BAB8 00028848 91 2B 00 04 */ stw r9, 0x4(r11) -/* 0001BABC 0002884C 3C 60 00 00 */ lis r3, .rodata+0x77C@ha -/* 0001BAC0 00028850 90 01 00 08 */ stw r0, 0x8(r1) -/* 0001BAC4 00028854 38 63 07 7C */ addi r3, r3, .rodata+0x77C@l -/* 0001BAC8 00028858 91 7E 00 00 */ stw r11, _Q43UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32_9Prototype.mHead@l(r30) -/* 0001BACC 0002885C 48 00 00 01 */ bl stringhash32__FPCc -/* 0001BAD0 00028860 7C 60 1B 78 */ mr r0, r3 -/* 0001BAD4 00028864 3D 40 00 00 */ lis r10, _CDActionIce@ha -/* 0001BAD8 00028868 3D 20 00 00 */ lis r9, Construct__11CDActionIcePQ28CameraAI8Director@ha -/* 0001BADC 0002886C 39 6A 00 00 */ addi r11, r10, _CDActionIce@l -/* 0001BAE0 00028870 90 0A 00 00 */ stw r0, _CDActionIce@l(r10) -/* 0001BAE4 00028874 39 29 00 00 */ addi r9, r9, Construct__11CDActionIcePQ28CameraAI8Director@l -/* 0001BAE8 00028878 91 2B 00 04 */ stw r9, 0x4(r11) -/* 0001BAEC 0002887C 3C 60 00 00 */ lis r3, .rodata+0x908@ha -/* 0001BAF0 00028880 91 7E 00 00 */ stw r11, _Q43UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32_9Prototype.mHead@l(r30) -/* 0001BAF4 00028884 38 63 09 08 */ addi r3, r3, .rodata+0x908@l -/* 0001BAF8 00028888 90 01 00 08 */ stw r0, 0x8(r1) -/* 0001BAFC 0002888C 48 00 00 01 */ bl stringhash32__FPCc -/* 0001BB00 00028890 3D 40 00 00 */ lis r10, _CDActionDebugWatchCar@ha -/* 0001BB04 00028894 7C 60 1B 78 */ mr r0, r3 -/* 0001BB08 00028898 39 6A 00 00 */ addi r11, r10, _CDActionDebugWatchCar@l -/* 0001BB0C 0002889C 3D 20 00 00 */ lis r9, Construct__21CDActionDebugWatchCarPQ28CameraAI8Director@ha -/* 0001BB10 000288A0 39 29 00 00 */ addi r9, r9, Construct__21CDActionDebugWatchCarPQ28CameraAI8Director@l -/* 0001BB14 000288A4 90 0A 00 00 */ stw r0, _CDActionDebugWatchCar@l(r10) -/* 0001BB18 000288A8 91 7E 00 00 */ stw r11, _Q43UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32_9Prototype.mHead@l(r30) -/* 0001BB1C 000288AC 3C 60 00 00 */ lis r3, TheICEManager@ha -/* 0001BB20 000288B0 91 2B 00 04 */ stw r9, 0x4(r11) -/* 0001BB24 000288B4 38 63 00 00 */ addi r3, r3, TheICEManager@l -/* 0001BB28 000288B8 90 01 00 08 */ stw r0, 0x8(r1) -/* 0001BB2C 000288BC 48 01 81 ED */ bl .text+0x181EC -/* 0001BB30 000288C0 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0001BB34 000288C4 7C 08 03 A6 */ mtlr r0 -/* 0001BB38 000288C8 BB C1 00 10 */ lmw r30, 0x10(r1) -/* 0001BB3C 000288CC 38 21 00 18 */ addi r1, r1, 0x18 -/* 0001BB40 000288D0 4E 80 00 20 */ blr -.endfn __static_initialization_and_destruction_0 - -# .text:0x1BB44 | size: 0x20 -.fn __8bVector3RC8bVector3, weak -/* 0001BB44 000288D4 C1 84 00 08 */ lfs f12, 0x8(r4) -/* 0001BB48 000288D8 7C 69 1B 78 */ mr r9, r3 -/* 0001BB4C 000288DC C0 04 00 00 */ lfs f0, 0x0(r4) -/* 0001BB50 000288E0 C1 A4 00 04 */ lfs f13, 0x4(r4) -/* 0001BB54 000288E4 D0 09 00 00 */ stfs f0, 0x0(r9) -/* 0001BB58 000288E8 D1 A9 00 04 */ stfs f13, 0x4(r9) -/* 0001BB5C 000288EC D1 89 00 08 */ stfs f12, 0x8(r9) -/* 0001BB60 000288F0 4E 80 00 20 */ blr -.endfn __8bVector3RC8bVector3 - -# .text:0x1BB64 | size: 0x54 -.fn _._Q33UTL3COM8IUnknown, weak -/* 0001BB64 000288F4 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 0001BB68 000288F8 7C 08 02 A6 */ mflr r0 -/* 0001BB6C 000288FC BF C1 00 08 */ stmw r30, 0x8(r1) -/* 0001BB70 00028900 90 01 00 14 */ stw r0, 0x14(r1) -/* 0001BB74 00028904 7C 7F 1B 78 */ mr r31, r3 -/* 0001BB78 00028908 3D 20 00 00 */ lis r9, _vt.Q33UTL3COM8IUnknown@ha -/* 0001BB7C 0002890C 7C 9E 23 78 */ mr r30, r4 -/* 0001BB80 00028910 39 29 00 00 */ addi r9, r9, _vt.Q33UTL3COM8IUnknown@l -/* 0001BB84 00028914 80 7F 00 00 */ lwz r3, 0x0(r31) -/* 0001BB88 00028918 7F E4 FB 78 */ mr r4, r31 -/* 0001BB8C 0002891C 91 3F 00 04 */ stw r9, 0x4(r31) -/* 0001BB90 00028920 48 00 00 01 */ bl Remove__Q43UTL3COM6Object6_IListPQ33UTL3COM8IUnknown -/* 0001BB94 00028924 73 C0 00 01 */ andi. r0, r30, 0x1 -/* 0001BB98 00028928 41 82 BB A4 */ beq .L_0001773C -/* 0001BB9C 0002892C 7F E3 FB 78 */ mr r3, r31 -/* 0001BBA0 00028930 48 00 00 01 */ bl __builtin_delete -/* 0001BBA4 00028934 80 01 00 14 */ lwz r0, 0x14(r1) -/* 0001BBA8 00028938 7C 08 03 A6 */ mtlr r0 -/* 0001BBAC 0002893C BB C1 00 08 */ lmw r30, 0x8(r1) -/* 0001BBB0 00028940 38 21 00 10 */ addi r1, r1, 0x10 -/* 0001BBB4 00028944 4E 80 00 20 */ blr -.endfn _._Q33UTL3COM8IUnknown - -# .text:0x1BBB8 | size: 0x8 -# CameraMover::GetType -.fn GetType__11CameraMover, global -/* 0001BBB8 00028948 80 63 00 0C */ lwz r3, 0xc(r3) -/* 0001BBBC 0002894C 4E 80 00 20 */ blr -.endfn GetType__11CameraMover - -# .text:0x1BBC0 | size: 0xC -# CameraMover::GetPosition -.fn GetPosition__11CameraMover, global -/* 0001BBC0 00028950 80 63 00 1C */ lwz r3, 0x1c(r3) -/* 0001BBC4 00028954 38 63 00 40 */ addi r3, r3, 0x40 -/* 0001BBC8 00028958 4E 80 00 20 */ blr -.endfn GetPosition__11CameraMover - -# .text:0x1BBCC | size: 0xC -# CameraMover::GetDirection -.fn GetDirection__11CameraMover, global -/* 0001BBCC 0002895C 80 63 00 1C */ lwz r3, 0x1c(r3) -/* 0001BBD0 00028960 38 63 00 50 */ addi r3, r3, 0x50 -.L_0001BBD4: -/* 0001BBD4 00028964 4E 80 00 20 */ blr -.endfn GetDirection__11CameraMover - -# .text:0x1BBD8 | size: 0x8 -# CameraMover::GetCamera -.fn GetCamera__11CameraMover, global -/* 0001BBD8 00028968 80 63 00 1C */ lwz r3, 0x1c(r3) -/* 0001BBDC 0002896C 4E 80 00 20 */ blr -.endfn GetCamera__11CameraMover - -# .text:0x1BBE0 | size: 0x4 -.fn SetLookBack__11CameraMoverb, global -/* 0001BBE0 00028970 4E 80 00 20 */ blr -.endfn SetLookBack__11CameraMoverb - -# .text:0x1BBE4 | size: 0x4 -.fn SetLookbackSpeed__11CameraMoverf, global -/* 0001BBE4 00028974 4E 80 00 20 */ blr -.endfn SetLookbackSpeed__11CameraMoverf - -# .text:0x1BBE8 | size: 0x4 -.fn SetDisableLag__11CameraMoverb, global -/* 0001BBE8 00028978 4E 80 00 20 */ blr -.endfn SetDisableLag__11CameraMoverb - -# .text:0x1BBEC | size: 0x4 -.fn SetPovType__11CameraMoveri, global -/* 0001BBEC 0002897C 4E 80 00 20 */ blr -.endfn SetPovType__11CameraMoveri - -# .text:0x1BBF0 | size: 0x8 -# CameraMover::IsHoodCamera -.fn IsHoodCamera__11CameraMover, global -/* 0001BBF0 00028980 38 60 00 00 */ li r3, 0x0 -/* 0001BBF4 00028984 4E 80 00 20 */ blr -.endfn IsHoodCamera__11CameraMover - -# .text:0x1BBF8 | size: 0x8 -.fn SetRenderCarPOV__19TrackCopCameraMoverb, global -/* 0001BBF8 00028988 90 83 02 4C */ stw r4, 0x24c(r3) -/* 0001BBFC 0002898C 4E 80 00 20 */ blr -.endfn SetRenderCarPOV__19TrackCopCameraMoverb - -# .text:0x1BC00 | size: 0x24 -.fn SetEye__21DebugWorldCameraMoverRC8bVector3, global -/* 0001BC00 00028990 C0 03 00 00 */ lfs f0, 0x0(r3) -/* 0001BC04 00028994 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.Eye@ha -/* 0001BC08 00028998 C1 83 00 08 */ lfs f12, 0x8(r3) -/* 0001BC0C 0002899C 39 69 00 00 */ addi r11, r9, _21DebugWorldCameraMover.Eye@l -/* 0001BC10 000289A0 C1 A3 00 04 */ lfs f13, 0x4(r3) -/* 0001BC14 000289A4 D0 09 00 00 */ stfs f0, _21DebugWorldCameraMover.Eye@l(r9) -/* 0001BC18 000289A8 D1 8B 00 08 */ stfs f12, 0x8(r11) -/* 0001BC1C 000289AC D1 AB 00 04 */ stfs f13, 0x4(r11) -/* 0001BC20 000289B0 4E 80 00 20 */ blr -.endfn SetEye__21DebugWorldCameraMoverRC8bVector3 - -# .text:0x1BC24 | size: 0x24 -.fn SetLook__21DebugWorldCameraMoverRC8bVector3, global -/* 0001BC24 000289B4 C0 03 00 00 */ lfs f0, 0x0(r3) -/* 0001BC28 000289B8 3D 20 00 00 */ lis r9, _21DebugWorldCameraMover.Look@ha -/* 0001BC2C 000289BC C1 83 00 08 */ lfs f12, 0x8(r3) -/* 0001BC30 000289C0 39 69 00 00 */ addi r11, r9, _21DebugWorldCameraMover.Look@l -/* 0001BC34 000289C4 C1 A3 00 04 */ lfs f13, 0x4(r3) -/* 0001BC38 000289C8 D0 09 00 00 */ stfs f0, _21DebugWorldCameraMover.Look@l(r9) -/* 0001BC3C 000289CC D1 8B 00 08 */ stfs f12, 0x8(r11) -/* 0001BC40 000289D0 D1 AB 00 04 */ stfs f13, 0x4(r11) -/* 0001BC44 000289D4 4E 80 00 20 */ blr -.endfn SetLook__21DebugWorldCameraMoverRC8bVector3 - -# .text:0x1BC48 | size: 0xC -# DebugWorldCameraMover::GetLook -.fn GetLook__21DebugWorldCameraMover, global -/* 0001BC48 000289D8 3C 60 00 00 */ lis r3, _21DebugWorldCameraMover.Look@ha -/* 0001BC4C 000289DC 38 63 00 00 */ addi r3, r3, _21DebugWorldCameraMover.Look@l -/* 0001BC50 000289E0 4E 80 00 20 */ blr -.endfn GetLook__21DebugWorldCameraMover - -# .text:0x1BC54 | size: 0xC -# DebugWorldCameraMover::GetEye -.fn GetEye__21DebugWorldCameraMover, global -/* 0001BC54 000289E4 3C 60 00 00 */ lis r3, _21DebugWorldCameraMover.Eye@ha -/* 0001BC58 000289E8 38 63 00 00 */ addi r3, r3, _21DebugWorldCameraMover.Eye@l -/* 0001BC5C 000289EC 4E 80 00 20 */ blr -.endfn GetEye__21DebugWorldCameraMover - -# .text:0x1BC60 | size: 0xC -# ICollisionBody::_IHandle -.fn _IHandle__14ICollisionBody, weak -/* 0001BC60 000289F0 3C 60 00 00 */ lis r3, _IHandle__14ICollisionBody@ha -/* 0001BC64 000289F4 38 63 00 00 */ addi r3, r3, _IHandle__14ICollisionBody@l -/* 0001BC68 000289F8 4E 80 00 20 */ blr -.endfn _IHandle__14ICollisionBody - -# .text:0x1BC6C | size: 0xC -# IAttachable::_IHandle -.fn _IHandle__11IAttachable, weak -/* 0001BC6C 000289FC 3C 60 00 00 */ lis r3, _IHandle__11IAttachable@ha -/* 0001BC70 00028A00 38 63 00 00 */ addi r3, r3, _IHandle__11IAttachable@l -/* 0001BC74 00028A04 4E 80 00 20 */ blr -.endfn _IHandle__11IAttachable - -# .text:0x1BC78 | size: 0x54 -.fn _._11IAttachable, weak -/* 0001BC78 00028A08 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 0001BC7C 00028A0C 7C 08 02 A6 */ mflr r0 -/* 0001BC80 00028A10 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 0001BC84 00028A14 90 01 00 14 */ stw r0, 0x14(r1) -/* 0001BC88 00028A18 7C 7F 1B 78 */ mr r31, r3 -/* 0001BC8C 00028A1C 3D 20 00 00 */ lis r9, _vt.Q33UTL3COM8IUnknown@ha -/* 0001BC90 00028A20 7C 9E 23 78 */ mr r30, r4 -/* 0001BC94 00028A24 39 29 00 00 */ addi r9, r9, _vt.Q33UTL3COM8IUnknown@l -/* 0001BC98 00028A28 80 7F 00 00 */ lwz r3, 0x0(r31) -/* 0001BC9C 00028A2C 7F E4 FB 78 */ mr r4, r31 -/* 0001BCA0 00028A30 91 3F 00 04 */ stw r9, 0x4(r31) -/* 0001BCA4 00028A34 48 00 00 01 */ bl Remove__Q43UTL3COM6Object6_IListPQ33UTL3COM8IUnknown -/* 0001BCA8 00028A38 73 C0 00 01 */ andi. r0, r30, 0x1 -/* 0001BCAC 00028A3C 41 82 BC B8 */ beq .L_00017964 -.L_0001BCB0: -/* 0001BCB0 00028A40 7F E3 FB 78 */ mr r3, r31 -/* 0001BCB4 00028A44 48 00 00 01 */ bl __builtin_delete -/* 0001BCB8 00028A48 80 01 00 14 */ lwz r0, 0x14(r1) -/* 0001BCBC 00028A4C 7C 08 03 A6 */ mtlr r0 -/* 0001BCC0 00028A50 BB C1 00 08 */ lmw r30, 0x8(r1) -.L_0001BCC4: -/* 0001BCC4 00028A54 38 21 00 10 */ addi r1, r1, 0x10 -/* 0001BCC8 00028A58 4E 80 00 20 */ blr -.endfn _._11IAttachable - -# .text:0x1BCCC | size: 0xC -# ISimable::_IHandle -.fn _IHandle__8ISimable, weak -/* 0001BCCC 00028A5C 3C 60 00 00 */ lis r3, _IHandle__8ISimable@ha -.L_0001BCD0: -/* 0001BCD0 00028A60 38 63 00 00 */ addi r3, r3, _IHandle__8ISimable@l -/* 0001BCD4 00028A64 4E 80 00 20 */ blr -.endfn _IHandle__8ISimable - -# .text:0x1BCD8 | size: 0xC -# IVehicle::_IHandle -.fn _IHandle__8IVehicle, weak -/* 0001BCD8 00028A68 3C 60 00 00 */ lis r3, _IHandle__8IVehicle@ha -/* 0001BCDC 00028A6C 38 63 00 00 */ addi r3, r3, _IHandle__8IVehicle@l -/* 0001BCE0 00028A70 4E 80 00 20 */ blr -.endfn _IHandle__8IVehicle - -# .text:0x1BCE4 | size: 0x68 -.fn _._Q28CameraAI6Action, weak -/* 0001BCE4 00028A74 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 0001BCE8 00028A78 7C 08 02 A6 */ mflr r0 -/* 0001BCEC 00028A7C BF C1 00 08 */ stmw r30, 0x8(r1) -/* 0001BCF0 00028A80 90 01 00 14 */ stw r0, 0x14(r1) -/* 0001BCF4 00028A84 3D 20 00 00 */ lis r9, _vt.Q28CameraAI6Action@ha -/* 0001BCF8 00028A88 7C 7F 1B 78 */ mr r31, r3 -/* 0001BCFC 00028A8C 7C 9E 23 78 */ mr r30, r4 -/* 0001BD00 00028A90 39 29 00 00 */ addi r9, r9, _vt.Q28CameraAI6Action@l -/* 0001BD04 00028A94 91 3F 00 14 */ stw r9, 0x14(r31) -/* 0001BD08 00028A98 38 80 00 02 */ li r4, 0x2 -/* 0001BD0C 00028A9C 48 00 00 01 */ bl _._Q43UTL3COM6Object6_IList -/* 0001BD10 00028AA0 73 C0 00 01 */ andi. r0, r30, 0x1 -/* 0001BD14 00028AA4 41 82 BD 38 */ beq .L_00017A4C -/* 0001BD18 00028AA8 2C 1F 00 00 */ cmpwi r31, 0x0 -/* 0001BD1C 00028AAC 41 82 BD 38 */ beq .L_00017A54 -/* 0001BD20 00028AB0 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0001BD24 00028AB4 7F E4 FB 78 */ mr r4, r31 -/* 0001BD28 00028AB8 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0001BD2C 00028ABC 38 A0 00 18 */ li r5, 0x18 -/* 0001BD30 00028AC0 38 C0 00 00 */ li r6, 0x0 -/* 0001BD34 00028AC4 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 0001BD38 00028AC8 80 01 00 14 */ lwz r0, 0x14(r1) -/* 0001BD3C 00028ACC 7C 08 03 A6 */ mtlr r0 -/* 0001BD40 00028AD0 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 0001BD44 00028AD4 38 21 00 10 */ addi r1, r1, 0x10 -/* 0001BD48 00028AD8 4E 80 00 20 */ blr -.endfn _._Q28CameraAI6Action - -# .text:0x1BD4C | size: 0x4 -.fn Update__Q28CameraAI6Actionf, weak -/* 0001BD4C 00028ADC 4E 80 00 20 */ blr -.endfn Update__Q28CameraAI6Actionf - -# .text:0x1BD50 | size: 0x4 -# CameraAI::Action::Reset -.fn Reset__Q28CameraAI6Action, weak -/* 0001BD50 00028AE0 4E 80 00 20 */ blr -.endfn Reset__Q28CameraAI6Action - -# .text:0x1BD54 | size: 0x4 -.fn SetSpecial__Q28CameraAI6Actionf, weak -/* 0001BD54 00028AE4 4E 80 00 20 */ blr -.endfn SetSpecial__Q28CameraAI6Actionf - -# .text:0x1BD58 | size: 0x538 -.fn __Q43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4ListRCQ43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4List, weak -/* 0001BD58 00028AE8 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 0001BD5C 00028AEC 7C 08 02 A6 */ mflr r0 -/* 0001BD60 00028AF0 7D 80 00 26 */ mfcr r12 -/* 0001BD64 00028AF4 BE E1 00 0C */ stmw r23, 0xc(r1) -/* 0001BD68 00028AF8 90 01 00 34 */ stw r0, 0x34(r1) -/* 0001BD6C 00028AFC 91 81 00 08 */ stw r12, 0x8(r1) -/* 0001BD70 00028B00 3D 20 00 00 */ lis r9, _vt.Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16@ha -/* 0001BD74 00028B04 7C 7F 1B 78 */ mr r31, r3 -/* 0001BD78 00028B08 38 00 00 00 */ li r0, 0x0 -/* 0001BD7C 00028B0C 39 29 00 00 */ addi r9, r9, _vt.Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16@l -/* 0001BD80 00028B10 90 1F 00 08 */ stw r0, 0x8(r31) -/* 0001BD84 00028B14 91 3F 00 0C */ stw r9, 0xc(r31) -/* 0001BD88 00028B18 90 1F 00 00 */ stw r0, 0x0(r31) -/* 0001BD8C 00028B1C 90 1F 00 04 */ stw r0, 0x4(r31) -/* 0001BD90 00028B20 80 04 00 08 */ lwz r0, 0x8(r4) -/* 0001BD94 00028B24 82 E4 00 00 */ lwz r23, 0x0(r4) -/* 0001BD98 00028B28 54 00 10 3A */ slwi r0, r0, 2 -/* 0001BD9C 00028B2C 7C 1A 16 70 */ srawi r26, r0, 2 -/* 0001BDA0 00028B30 7F 17 02 14 */ add r24, r23, r0 -/* 0001BDA4 00028B34 81 3F 00 08 */ lwz r9, 0x8(r31) -/* 0001BDA8 00028B38 7C 09 D0 40 */ cmplw r9, r26 -/* 0001BDAC 00028B3C 40 81 BD BC */ ble .L_00017B68 -/* 0001BDB0 00028B40 38 09 FF FF */ subi r0, r9, 0x1 -/* 0001BDB4 00028B44 90 1F 00 08 */ stw r0, 0x8(r31) -/* 0001BDB8 00028B48 48 01 BD A4 */ b .text+0x1BDA4 -/* 0001BDBC 00028B4C 3B 20 00 00 */ li r25, 0x0 -/* 0001BDC0 00028B50 80 1F 00 08 */ lwz r0, 0x8(r31) -/* 0001BDC4 00028B54 7C 04 03 78 */ mr r4, r0 -/* 0001BDC8 00028B58 7C 00 D0 40 */ cmplw r0, r26 -/* 0001BDCC 00028B5C 40 80 BF A0 */ bge .L_00017D6C -/* 0001BDD0 00028B60 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001BDD4 00028B64 38 84 00 01 */ addi r4, r4, 0x1 -/* 0001BDD8 00028B68 80 09 00 24 */ lwz r0, 0x24(r9) -/* 0001BDDC 00028B6C A8 69 00 20 */ lha r3, 0x20(r9) -/* 0001BDE0 00028B70 7C 08 03 A6 */ mtlr r0 -/* 0001BDE4 00028B74 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001BDE8 00028B78 4E 80 00 21 */ blrl -/* 0001BDEC 00028B7C 80 1F 00 04 */ lwz r0, 0x4(r31) -/* 0001BDF0 00028B80 7C 7E 1B 78 */ mr r30, r3 -/* 0001BDF4 00028B84 7C 1E 00 40 */ cmplw r30, r0 -/* 0001BDF8 00028B88 40 81 BE A8 */ ble .L_00017CA0 -/* 0001BDFC 00028B8C 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001BE00 00028B90 7F C4 F3 78 */ mr r4, r30 -/* 0001BE04 00028B94 80 09 00 34 */ lwz r0, 0x34(r9) -/* 0001BE08 00028B98 A8 69 00 30 */ lha r3, 0x30(r9) -/* 0001BE0C 00028B9C 7C 08 03 A6 */ mtlr r0 -/* 0001BE10 00028BA0 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001BE14 00028BA4 4E 80 00 21 */ blrl -/* 0001BE18 00028BA8 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001BE1C 00028BAC 7F C4 F3 78 */ mr r4, r30 -/* 0001BE20 00028BB0 38 A0 00 10 */ li r5, 0x10 -/* 0001BE24 00028BB4 83 BF 00 00 */ lwz r29, 0x0(r31) -/* 0001BE28 00028BB8 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0001BE2C 00028BBC 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0001BE30 00028BC0 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001BE34 00028BC4 83 9F 00 08 */ lwz r28, 0x8(r31) -/* 0001BE38 00028BC8 7C 08 03 A6 */ mtlr r0 -/* 0001BE3C 00028BCC 83 7F 00 04 */ lwz r27, 0x4(r31) -/* 0001BE40 00028BD0 4E 80 00 21 */ blrl -/* 0001BE44 00028BD4 93 DF 00 04 */ stw r30, 0x4(r31) -/* 0001BE48 00028BD8 7C 1D 18 00 */ cmpw r29, r3 -/* 0001BE4C 00028BDC 90 7F 00 00 */ stw r3, 0x0(r31) -/* 0001BE50 00028BE0 41 82 BE A8 */ beq .L_00017CF8 -/* 0001BE54 00028BE4 3B C0 00 00 */ li r30, 0x0 -/* 0001BE58 00028BE8 93 3F 00 08 */ stw r25, 0x8(r31) -/* 0001BE5C 00028BEC 7C 1E E0 00 */ cmpw r30, r28 -/* 0001BE60 00028BF0 2E 1D 00 00 */ cmpwi cr4, r29, 0x0 -/* 0001BE64 00028BF4 40 80 BE 84 */ bge .L_00017CE8 -/* 0001BE68 00028BF8 57 C4 10 3A */ slwi r4, r30, 2 -/* 0001BE6C 00028BFC 7F E3 FB 78 */ mr r3, r31 -/* 0001BE70 00028C00 7C 9D 22 14 */ add r4, r29, r4 -/* 0001BE74 00028C04 3B DE 00 01 */ addi r30, r30, 0x1 -/* 0001BE78 00028C08 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZPQ28CameraAI8Directori16RCPQ28CameraAI8Director -/* 0001BE7C 00028C0C 7C 1E E0 00 */ cmpw r30, r28 -/* 0001BE80 00028C10 41 80 BE 68 */ blt .L_00017CE8 -/* 0001BE84 00028C14 41 92 BE A8 */ beq cr4, .L_00017D2C -/* 0001BE88 00028C18 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001BE8C 00028C1C 7F A4 EB 78 */ mr r4, r29 -/* 0001BE90 00028C20 7F 65 DB 78 */ mr r5, r27 -.L_0001BE94: -/* 0001BE94 00028C24 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0001BE98 00028C28 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0001BE9C 00028C2C 7C 7F 1A 14 */ add r3, r31, r3 -.L_0001BEA0: -/* 0001BEA0 00028C30 7C 08 03 A6 */ mtlr r0 -/* 0001BEA4 00028C34 4E 80 00 21 */ blrl -/* 0001BEA8 00028C38 80 9F 00 08 */ lwz r4, 0x8(r31) -/* 0001BEAC 00028C3C 80 1F 00 04 */ lwz r0, 0x4(r31) -/* 0001BEB0 00028C40 7C 04 00 40 */ cmplw r4, r0 -/* 0001BEB4 00028C44 41 80 BF 90 */ blt .L_00017E44 -/* 0001BEB8 00028C48 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001BEBC 00028C4C 38 84 00 01 */ addi r4, r4, 0x1 -/* 0001BEC0 00028C50 80 09 00 24 */ lwz r0, 0x24(r9) -/* 0001BEC4 00028C54 A8 69 00 20 */ lha r3, 0x20(r9) -/* 0001BEC8 00028C58 7C 08 03 A6 */ mtlr r0 -/* 0001BECC 00028C5C 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001BED0 00028C60 4E 80 00 21 */ blrl -/* 0001BED4 00028C64 80 1F 00 04 */ lwz r0, 0x4(r31) -/* 0001BED8 00028C68 7C 7E 1B 78 */ mr r30, r3 -/* 0001BEDC 00028C6C 7C 1E 00 40 */ cmplw r30, r0 -/* 0001BEE0 00028C70 40 81 BF 90 */ ble .L_00017E70 -/* 0001BEE4 00028C74 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001BEE8 00028C78 7F C4 F3 78 */ mr r4, r30 -/* 0001BEEC 00028C7C 80 09 00 34 */ lwz r0, 0x34(r9) -/* 0001BEF0 00028C80 A8 69 00 30 */ lha r3, 0x30(r9) -/* 0001BEF4 00028C84 7C 08 03 A6 */ mtlr r0 -/* 0001BEF8 00028C88 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001BEFC 00028C8C 4E 80 00 21 */ blrl -/* 0001BF00 00028C90 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001BF04 00028C94 7F C4 F3 78 */ mr r4, r30 -/* 0001BF08 00028C98 38 A0 00 10 */ li r5, 0x10 -/* 0001BF0C 00028C9C 83 BF 00 00 */ lwz r29, 0x0(r31) -/* 0001BF10 00028CA0 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0001BF14 00028CA4 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0001BF18 00028CA8 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001BF1C 00028CAC 83 9F 00 08 */ lwz r28, 0x8(r31) -/* 0001BF20 00028CB0 7C 08 03 A6 */ mtlr r0 -/* 0001BF24 00028CB4 83 7F 00 04 */ lwz r27, 0x4(r31) -/* 0001BF28 00028CB8 4E 80 00 21 */ blrl -/* 0001BF2C 00028CBC 93 DF 00 04 */ stw r30, 0x4(r31) -/* 0001BF30 00028CC0 7C 1D 18 00 */ cmpw r29, r3 -/* 0001BF34 00028CC4 90 7F 00 00 */ stw r3, 0x0(r31) -/* 0001BF38 00028CC8 41 82 BF 90 */ beq .L_00017EC8 -/* 0001BF3C 00028CCC 3B C0 00 00 */ li r30, 0x0 -/* 0001BF40 00028CD0 93 3F 00 08 */ stw r25, 0x8(r31) -/* 0001BF44 00028CD4 7C 1E E0 00 */ cmpw r30, r28 -/* 0001BF48 00028CD8 2E 1D 00 00 */ cmpwi cr4, r29, 0x0 -/* 0001BF4C 00028CDC 40 80 BF 6C */ bge .L_00017EB8 -/* 0001BF50 00028CE0 57 C4 10 3A */ slwi r4, r30, 2 -/* 0001BF54 00028CE4 7F E3 FB 78 */ mr r3, r31 -/* 0001BF58 00028CE8 7C 9D 22 14 */ add r4, r29, r4 -/* 0001BF5C 00028CEC 3B DE 00 01 */ addi r30, r30, 0x1 -/* 0001BF60 00028CF0 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZPQ28CameraAI8Directori16RCPQ28CameraAI8Director -/* 0001BF64 00028CF4 7C 1E E0 00 */ cmpw r30, r28 -/* 0001BF68 00028CF8 41 80 BF 50 */ blt .L_00017EB8 -/* 0001BF6C 00028CFC 41 92 BF 90 */ beq cr4, .L_00017EFC -/* 0001BF70 00028D00 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001BF74 00028D04 7F A4 EB 78 */ mr r4, r29 -/* 0001BF78 00028D08 7F 65 DB 78 */ mr r5, r27 -/* 0001BF7C 00028D0C A8 69 00 18 */ lha r3, 0x18(r9) -/* 0001BF80 00028D10 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0001BF84 00028D14 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001BF88 00028D18 7C 08 03 A6 */ mtlr r0 -/* 0001BF8C 00028D1C 4E 80 00 21 */ blrl -/* 0001BF90 00028D20 81 3F 00 08 */ lwz r9, 0x8(r31) -/* 0001BF94 00028D24 39 29 00 01 */ addi r9, r9, 0x1 -/* 0001BF98 00028D28 91 3F 00 08 */ stw r9, 0x8(r31) -/* 0001BF9C 00028D2C 48 01 BD C0 */ b .text+0x1BDC0 -/* 0001BFA0 00028D30 81 3F 00 04 */ lwz r9, 0x4(r31) -/* 0001BFA4 00028D34 7C 09 D0 40 */ cmplw r9, r26 -/* 0001BFA8 00028D38 41 80 BF C0 */ blt .L_00017F68 -/* 0001BFAC 00028D3C 80 1F 00 00 */ lwz r0, 0x0(r31) -/* 0001BFB0 00028D40 7C 00 00 D0 */ neg r0, r0 -/* 0001BFB4 00028D44 7C 00 16 70 */ srawi r0, r0, 2 -/* 0001BFB8 00028D48 7C 00 48 40 */ cmplw r0, r9 -/* 0001BFBC 00028D4C 41 80 C0 D8 */ blt .L_00018094 -/* 0001BFC0 00028D50 39 60 00 00 */ li r11, 0x0 -/* 0001BFC4 00028D54 7C 0B 20 00 */ cmpw r11, r4 -/* 0001BFC8 00028D58 40 80 BF E4 */ bge .L_00017FAC -/* 0001BFCC 00028D5C 81 3F 00 08 */ lwz r9, 0x8(r31) -/* 0001BFD0 00028D60 39 6B 00 01 */ addi r11, r11, 0x1 -/* 0001BFD4 00028D64 39 29 FF FF */ subi r9, r9, 0x1 -/* 0001BFD8 00028D68 7C 0B 20 00 */ cmpw r11, r4 -/* 0001BFDC 00028D6C 41 80 BF D0 */ blt .L_00017FAC -/* 0001BFE0 00028D70 91 3F 00 08 */ stw r9, 0x8(r31) -/* 0001BFE4 00028D74 80 9F 00 00 */ lwz r4, 0x0(r31) -/* 0001BFE8 00028D78 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0001BFEC 00028D7C 41 82 C0 1C */ beq .L_00018008 -/* 0001BFF0 00028D80 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001BFF4 00028D84 80 BF 00 04 */ lwz r5, 0x4(r31) -/* 0001BFF8 00028D88 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0001BFFC 00028D8C A8 69 00 18 */ lha r3, 0x18(r9) -/* 0001C000 00028D90 7C 08 03 A6 */ mtlr r0 -/* 0001C004 00028D94 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001C008 00028D98 4E 80 00 21 */ blrl -/* 0001C00C 00028D9C 38 00 00 00 */ li r0, 0x0 -/* 0001C010 00028DA0 90 1F 00 08 */ stw r0, 0x8(r31) -/* 0001C014 00028DA4 90 1F 00 00 */ stw r0, 0x0(r31) -/* 0001C018 00028DA8 90 1F 00 04 */ stw r0, 0x4(r31) -/* 0001C01C 00028DAC 80 1F 00 04 */ lwz r0, 0x4(r31) -/* 0001C020 00028DB0 7C 1A 00 40 */ cmplw r26, r0 -/* 0001C024 00028DB4 40 81 C0 D8 */ ble .L_000180FC -/* 0001C028 00028DB8 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001C02C 00028DBC 7F 44 D3 78 */ mr r4, r26 -.L_0001C030: -/* 0001C030 00028DC0 80 09 00 34 */ lwz r0, 0x34(r9) -/* 0001C034 00028DC4 A8 69 00 30 */ lha r3, 0x30(r9) -/* 0001C038 00028DC8 7C 08 03 A6 */ mtlr r0 -/* 0001C03C 00028DCC 7C 7F 1A 14 */ add r3, r31, r3 -.L_0001C040: -/* 0001C040 00028DD0 4E 80 00 21 */ blrl -/* 0001C044 00028DD4 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001C048 00028DD8 7F 44 D3 78 */ mr r4, r26 -/* 0001C04C 00028DDC 38 A0 00 10 */ li r5, 0x10 -/* 0001C050 00028DE0 83 BF 00 00 */ lwz r29, 0x0(r31) -/* 0001C054 00028DE4 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0001C058 00028DE8 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0001C05C 00028DEC 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001C060 00028DF0 83 9F 00 08 */ lwz r28, 0x8(r31) -/* 0001C064 00028DF4 7C 08 03 A6 */ mtlr r0 -/* 0001C068 00028DF8 83 7F 00 04 */ lwz r27, 0x4(r31) -/* 0001C06C 00028DFC 4E 80 00 21 */ blrl -/* 0001C070 00028E00 93 5F 00 04 */ stw r26, 0x4(r31) -/* 0001C074 00028E04 7C 1D 18 00 */ cmpw r29, r3 -/* 0001C078 00028E08 90 7F 00 00 */ stw r3, 0x0(r31) -/* 0001C07C 00028E0C 41 82 C0 D8 */ beq .L_00018154 -/* 0001C080 00028E10 38 00 00 00 */ li r0, 0x0 -/* 0001C084 00028E14 3B C0 00 00 */ li r30, 0x0 -/* 0001C088 00028E18 90 1F 00 08 */ stw r0, 0x8(r31) -/* 0001C08C 00028E1C 7C 1E E0 00 */ cmpw r30, r28 -/* 0001C090 00028E20 2E 1D 00 00 */ cmpwi cr4, r29, 0x0 -/* 0001C094 00028E24 40 80 C0 B4 */ bge .L_00018148 -/* 0001C098 00028E28 57 C4 10 3A */ slwi r4, r30, 2 -/* 0001C09C 00028E2C 7F E3 FB 78 */ mr r3, r31 -/* 0001C0A0 00028E30 7C 9D 22 14 */ add r4, r29, r4 -/* 0001C0A4 00028E34 3B DE 00 01 */ addi r30, r30, 0x1 -/* 0001C0A8 00028E38 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZPQ28CameraAI8Directori16RCPQ28CameraAI8Director -/* 0001C0AC 00028E3C 7C 1E E0 00 */ cmpw r30, r28 -/* 0001C0B0 00028E40 41 80 C0 98 */ blt .L_00018148 -.L_0001C0B4: -/* 0001C0B4 00028E44 41 92 C0 D8 */ beq cr4, .L_0001818C -/* 0001C0B8 00028E48 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001C0BC 00028E4C 7F A4 EB 78 */ mr r4, r29 -/* 0001C0C0 00028E50 7F 65 DB 78 */ mr r5, r27 -/* 0001C0C4 00028E54 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0001C0C8 00028E58 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0001C0CC 00028E5C 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001C0D0 00028E60 7C 08 03 A6 */ mtlr r0 -/* 0001C0D4 00028E64 4E 80 00 21 */ blrl -/* 0001C0D8 00028E68 80 1F 00 08 */ lwz r0, 0x8(r31) -/* 0001C0DC 00028E6C 7E FC BB 78 */ mr r28, r23 -/* 0001C0E0 00028E70 81 7F 00 00 */ lwz r11, 0x0(r31) -/* 0001C0E4 00028E74 54 00 10 3A */ slwi r0, r0, 2 -/* 0001C0E8 00028E78 7D 2B 02 14 */ add r9, r11, r0 -/* 0001C0EC 00028E7C 48 01 C1 00 */ b .text+0x1C100 -/* 0001C0F0 00028E80 80 1C 00 00 */ lwz r0, 0x0(r28) -/* 0001C0F4 00028E84 3B 9C 00 04 */ addi r28, r28, 0x4 -/* 0001C0F8 00028E88 90 0B 00 00 */ stw r0, 0x0(r11) -/* 0001C0FC 00028E8C 39 6B 00 04 */ addi r11, r11, 0x4 -/* 0001C100 00028E90 7C 0B 48 00 */ cmpw r11, r9 -/* 0001C104 00028E94 41 82 C1 10 */ beq .L_00018214 -/* 0001C108 00028E98 7C 1C C0 00 */ cmpw r28, r24 -/* 0001C10C 00028E9C 40 82 C0 F0 */ bne .L_000181FC -/* 0001C110 00028EA0 81 5F 00 00 */ lwz r10, 0x0(r31) -/* 0001C114 00028EA4 7F 9C C0 00 */ cmpw cr7, r28, r24 -/* 0001C118 00028EA8 81 3F 00 08 */ lwz r9, 0x8(r31) -/* 0001C11C 00028EAC 55 20 10 3A */ slwi r0, r9, 2 -/* 0001C120 00028EB0 7C 0A 02 14 */ add r0, r10, r0 -/* 0001C124 00028EB4 7C 00 58 00 */ cmpw r0, r11 -/* 0001C128 00028EB8 41 82 C1 38 */ beq .L_00018260 -/* 0001C12C 00028EBC 38 09 FF FF */ subi r0, r9, 0x1 -/* 0001C130 00028EC0 90 1F 00 08 */ stw r0, 0x8(r31) -/* 0001C134 00028EC4 48 01 C1 18 */ b .text+0x1C118 -/* 0001C138 00028EC8 41 9E C2 64 */ beq cr7, .L_0001839C -/* 0001C13C 00028ECC 3A E0 00 00 */ li r23, 0x0 -/* 0001C140 00028ED0 80 9F 00 08 */ lwz r4, 0x8(r31) -/* 0001C144 00028ED4 3B 3C 00 04 */ addi r25, r28, 0x4 -/* 0001C148 00028ED8 80 1F 00 04 */ lwz r0, 0x4(r31) -/* 0001C14C 00028EDC 7C 04 00 40 */ cmplw r4, r0 -/* 0001C150 00028EE0 41 80 C2 2C */ blt .L_0001837C -/* 0001C154 00028EE4 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001C158 00028EE8 38 84 00 01 */ addi r4, r4, 0x1 -/* 0001C15C 00028EEC 80 09 00 24 */ lwz r0, 0x24(r9) -/* 0001C160 00028EF0 A8 69 00 20 */ lha r3, 0x20(r9) -/* 0001C164 00028EF4 7C 08 03 A6 */ mtlr r0 -/* 0001C168 00028EF8 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001C16C 00028EFC 4E 80 00 21 */ blrl -/* 0001C170 00028F00 80 1F 00 04 */ lwz r0, 0x4(r31) -/* 0001C174 00028F04 7C 7E 1B 78 */ mr r30, r3 -/* 0001C178 00028F08 7C 1E 00 40 */ cmplw r30, r0 -/* 0001C17C 00028F0C 40 81 C2 2C */ ble .L_000183A8 -/* 0001C180 00028F10 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001C184 00028F14 7F C4 F3 78 */ mr r4, r30 -/* 0001C188 00028F18 80 09 00 34 */ lwz r0, 0x34(r9) -/* 0001C18C 00028F1C A8 69 00 30 */ lha r3, 0x30(r9) -.L_0001C190: -/* 0001C190 00028F20 7C 08 03 A6 */ mtlr r0 -/* 0001C194 00028F24 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001C198 00028F28 4E 80 00 21 */ blrl -/* 0001C19C 00028F2C 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001C1A0 00028F30 7F C4 F3 78 */ mr r4, r30 -/* 0001C1A4 00028F34 38 A0 00 10 */ li r5, 0x10 -/* 0001C1A8 00028F38 83 BF 00 00 */ lwz r29, 0x0(r31) -/* 0001C1AC 00028F3C A8 69 00 10 */ lha r3, 0x10(r9) -/* 0001C1B0 00028F40 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0001C1B4 00028F44 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001C1B8 00028F48 83 7F 00 08 */ lwz r27, 0x8(r31) -/* 0001C1BC 00028F4C 7C 08 03 A6 */ mtlr r0 -/* 0001C1C0 00028F50 83 5F 00 04 */ lwz r26, 0x4(r31) -/* 0001C1C4 00028F54 4E 80 00 21 */ blrl -/* 0001C1C8 00028F58 93 DF 00 04 */ stw r30, 0x4(r31) -/* 0001C1CC 00028F5C 7C 1D 18 00 */ cmpw r29, r3 -/* 0001C1D0 00028F60 90 7F 00 00 */ stw r3, 0x0(r31) -/* 0001C1D4 00028F64 41 82 C2 2C */ beq .L_00018400 -/* 0001C1D8 00028F68 3B C0 00 00 */ li r30, 0x0 -/* 0001C1DC 00028F6C 92 FF 00 08 */ stw r23, 0x8(r31) -/* 0001C1E0 00028F70 7C 1E D8 00 */ cmpw r30, r27 -/* 0001C1E4 00028F74 2E 1D 00 00 */ cmpwi cr4, r29, 0x0 -/* 0001C1E8 00028F78 40 80 C2 08 */ bge .L_000183F0 -.L_0001C1EC: -/* 0001C1EC 00028F7C 57 C4 10 3A */ slwi r4, r30, 2 -/* 0001C1F0 00028F80 7F E3 FB 78 */ mr r3, r31 -/* 0001C1F4 00028F84 7C 9D 22 14 */ add r4, r29, r4 -/* 0001C1F8 00028F88 3B DE 00 01 */ addi r30, r30, 0x1 -/* 0001C1FC 00028F8C 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZPQ28CameraAI8Directori16RCPQ28CameraAI8Director -/* 0001C200 00028F90 7C 1E D8 00 */ cmpw r30, r27 -/* 0001C204 00028F94 41 80 C1 EC */ blt .L_000183F0 -/* 0001C208 00028F98 41 92 C2 2C */ beq cr4, .L_00018434 -/* 0001C20C 00028F9C 81 3F 00 0C */ lwz r9, 0xc(r31) -.L_0001C210: -/* 0001C210 00028FA0 7F A4 EB 78 */ mr r4, r29 -/* 0001C214 00028FA4 7F 45 D3 78 */ mr r5, r26 -/* 0001C218 00028FA8 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0001C21C 00028FAC 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0001C220 00028FB0 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001C224 00028FB4 7C 08 03 A6 */ mtlr r0 -/* 0001C228 00028FB8 4E 80 00 21 */ blrl -/* 0001C22C 00028FBC 81 3F 00 08 */ lwz r9, 0x8(r31) -/* 0001C230 00028FC0 81 7F 00 00 */ lwz r11, 0x0(r31) -/* 0001C234 00028FC4 55 29 10 3A */ slwi r9, r9, 2 -/* 0001C238 00028FC8 7C 09 5A 14 */ add r0, r9, r11 -/* 0001C23C 00028FCC 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0001C240 00028FD0 41 82 C2 4C */ beq .L_0001848C -/* 0001C244 00028FD4 80 1C 00 00 */ lwz r0, 0x0(r28) -/* 0001C248 00028FD8 7C 09 59 2E */ stwx r0, r9, r11 -/* 0001C24C 00028FDC 81 3F 00 08 */ lwz r9, 0x8(r31) -/* 0001C250 00028FE0 7F 3C CB 78 */ mr r28, r25 -/* 0001C254 00028FE4 7C 1C C0 00 */ cmpw r28, r24 -/* 0001C258 00028FE8 39 29 00 01 */ addi r9, r9, 0x1 -/* 0001C25C 00028FEC 91 3F 00 08 */ stw r9, 0x8(r31) -/* 0001C260 00028FF0 40 82 C1 40 */ bne .L_000183A0 -/* 0001C264 00028FF4 3D 20 00 00 */ lis r9, _vt.Q43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4List@ha -/* 0001C268 00028FF8 7F E3 FB 78 */ mr r3, r31 -/* 0001C26C 00028FFC 39 29 00 00 */ addi r9, r9, _vt.Q43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4List@l -/* 0001C270 00029000 91 3F 00 0C */ stw r9, 0xc(r31) -/* 0001C274 00029004 80 01 00 34 */ lwz r0, 0x34(r1) -/* 0001C278 00029008 81 81 00 08 */ lwz r12, 0x8(r1) -/* 0001C27C 0002900C 7C 08 03 A6 */ mtlr r0 -/* 0001C280 00029010 BA E1 00 0C */ lmw r23, 0xc(r1) -/* 0001C284 00029014 7D 80 81 20 */ mtcrf 8, r12 -/* 0001C288 00029018 38 21 00 30 */ addi r1, r1, 0x30 -/* 0001C28C 0002901C 4E 80 00 20 */ blr -.endfn __Q43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4ListRCQ43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4List - -# .text:0x1C290 | size: 0x30 -.fn __nw__Q28CameraAI8DirectorUi, global -/* 0001C290 00029020 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0001C294 00029024 7C 08 02 A6 */ mflr r0 -.L_0001C298: -/* 0001C298 00029028 90 01 00 0C */ stw r0, 0xc(r1) -/* 0001C29C 0002902C 7C 64 1B 78 */ mr r4, r3 -/* 0001C2A0 00029030 38 A0 00 00 */ li r5, 0x0 -/* 0001C2A4 00029034 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0001C2A8 00029038 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0001C2AC 0002903C 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 0001C2B0 00029040 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0001C2B4 00029044 7C 08 03 A6 */ mtlr r0 -.L_0001C2B8: -/* 0001C2B8 00029048 38 21 00 08 */ addi r1, r1, 0x8 -/* 0001C2BC 0002904C 4E 80 00 20 */ blr -.endfn __nw__Q28CameraAI8DirectorUi - -# .text:0x1C2C0 | size: 0x38 -.fn __dl__Q28CameraAI8DirectorPvUi, global -/* 0001C2C0 00029050 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0001C2C4 00029054 7C 08 02 A6 */ mflr r0 -/* 0001C2C8 00029058 90 01 00 0C */ stw r0, 0xc(r1) -/* 0001C2CC 0002905C 7C 85 23 78 */ mr r5, r4 -.L_0001C2D0: -/* 0001C2D0 00029060 7C 64 1B 79 */ mr. r4, r3 -/* 0001C2D4 00029064 41 82 C2 E8 */ beq .L_000185BC -/* 0001C2D8 00029068 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0001C2DC 0002906C 38 C0 00 00 */ li r6, 0x0 -/* 0001C2E0 00029070 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0001C2E4 00029074 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 0001C2E8 00029078 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0001C2EC 0002907C 7C 08 03 A6 */ mtlr r0 -/* 0001C2F0 00029080 38 21 00 08 */ addi r1, r1, 0x8 -/* 0001C2F4 00029084 4E 80 00 20 */ blr -.endfn __dl__Q28CameraAI8DirectorPvUi - -# .text:0x1C2F8 | size: 0x30 -.fn __nw__Q28CameraAI8DirectorUiPCc, global -/* 0001C2F8 00029088 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0001C2FC 0002908C 7C 08 02 A6 */ mflr r0 -/* 0001C300 00029090 90 01 00 0C */ stw r0, 0xc(r1) -/* 0001C304 00029094 7C 85 23 78 */ mr r5, r4 -/* 0001C308 00029098 3D 20 00 00 */ lis r9, gFastMem@ha -/* 0001C30C 0002909C 7C 64 1B 78 */ mr r4, r3 -/* 0001C310 000290A0 38 69 00 00 */ addi r3, r9, gFastMem@l -/* 0001C314 000290A4 48 00 00 01 */ bl Alloc__7FastMemUiPCc -/* 0001C318 000290A8 80 01 00 0C */ lwz r0, 0xc(r1) -.L_0001C31C: -/* 0001C31C 000290AC 7C 08 03 A6 */ mtlr r0 -/* 0001C320 000290B0 38 21 00 08 */ addi r1, r1, 0x8 -/* 0001C324 000290B4 4E 80 00 20 */ blr -.endfn __nw__Q28CameraAI8DirectorUiPCc - -# .text:0x1C328 | size: 0x38 -.fn __dl__Q28CameraAI8DirectorPvPCc, global -/* 0001C328 000290B8 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0001C32C 000290BC 7C 08 02 A6 */ mflr r0 -/* 0001C330 000290C0 90 01 00 0C */ stw r0, 0xc(r1) -/* 0001C334 000290C4 7C 86 23 78 */ mr r6, r4 -/* 0001C338 000290C8 7C 64 1B 79 */ mr. r4, r3 -/* 0001C33C 000290CC 41 82 C3 50 */ beq .L_0001868C -/* 0001C340 000290D0 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0001C344 000290D4 38 A0 00 00 */ li r5, 0x0 -/* 0001C348 000290D8 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0001C34C 000290DC 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 0001C350 000290E0 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0001C354 000290E4 7C 08 03 A6 */ mtlr r0 -/* 0001C358 000290E8 38 21 00 08 */ addi r1, r1, 0x8 -/* 0001C35C 000290EC 4E 80 00 20 */ blr -.endfn __dl__Q28CameraAI8DirectorPvPCc - -# .text:0x1C360 | size: 0x3C -.fn __dl__Q28CameraAI8DirectorPvUiPCc, global -/* 0001C360 000290F0 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0001C364 000290F4 7C 08 02 A6 */ mflr r0 -/* 0001C368 000290F8 90 01 00 0C */ stw r0, 0xc(r1) -/* 0001C36C 000290FC 7C 80 23 78 */ mr r0, r4 -/* 0001C370 00029100 7C A6 2B 78 */ mr r6, r5 -/* 0001C374 00029104 7C 64 1B 79 */ mr. r4, r3 -/* 0001C378 00029108 41 82 C3 8C */ beq .L_00018704 -/* 0001C37C 0002910C 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0001C380 00029110 7C 05 03 78 */ mr r5, r0 -/* 0001C384 00029114 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0001C388 00029118 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 0001C38C 0002911C 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0001C390 00029120 7C 08 03 A6 */ mtlr r0 -/* 0001C394 00029124 38 21 00 08 */ addi r1, r1, 0x8 -/* 0001C398 00029128 4E 80 00 20 */ blr -.endfn __dl__Q28CameraAI8DirectorPvUiPCc - -# .text:0x1C39C | size: 0x8 -.fn GetViewID__CQ28CameraAI8Director, global -/* 0001C39C 0002912C 80 63 00 04 */ lwz r3, 0x4(r3) -/* 0001C3A0 00029130 4E 80 00 20 */ blr -.endfn GetViewID__CQ28CameraAI8Director - -# .text:0x1C3A4 | size: 0x8 -# CameraAI::Director::GetAction -.fn GetAction__Q28CameraAI8Director, global -/* 0001C3A4 00029134 80 63 00 18 */ lwz r3, 0x18(r3) -/* 0001C3A8 00029138 4E 80 00 20 */ blr -.endfn GetAction__Q28CameraAI8Director - -# .text:0x1C3AC | size: 0x1C -# CameraAI::Director::IsJumping -.fn IsJumping__Q28CameraAI8Director, global -/* 0001C3AC 0002913C 3D 20 00 00 */ lis r9, .rodata+0x1960@ha -/* 0001C3B0 00029140 C1 A3 02 B8 */ lfs f13, 0x2b8(r3) -/* 0001C3B4 00029144 C0 09 19 60 */ lfs f0, .rodata+0x1960@l(r9) -/* 0001C3B8 00029148 FF 8D 00 00 */ fcmpu cr7, f13, f0 -/* 0001C3BC 0002914C 7C 60 00 26 */ mfcr r3 -/* 0001C3C0 00029150 54 63 F7 FE */ extrwi r3, r3, 1, 29 -/* 0001C3C4 00029154 4E 80 00 20 */ blr -.endfn IsJumping__Q28CameraAI8Director - -# .text:0x1C3C8 | size: 0x8 -# CameraAI::Director::IsCinematicMomement -.fn IsCinematicMomement__Q28CameraAI8Director, global -/* 0001C3C8 00029158 80 63 02 BC */ lwz r3, 0x2bc(r3) -/* 0001C3CC 0002915C 4E 80 00 20 */ blr -.endfn IsCinematicMomement__Q28CameraAI8Director - -# .text:0x1C3D0 | size: 0x8 -# CameraAI::Director::GetCinematicSlowdown -.fn GetCinematicSlowdown__Q28CameraAI8Director, global -/* 0001C3D0 00029160 C0 23 02 C0 */ lfs f1, 0x2c0(r3) -/* 0001C3D4 00029164 4E 80 00 20 */ blr -.endfn GetCinematicSlowdown__Q28CameraAI8Director - -# .text:0x1C3D8 | size: 0x8 -.fn SetCinematicSlowdown__Q28CameraAI8Directorf, global -/* 0001C3D8 00029168 D0 23 02 C0 */ stfs f1, 0x2c0(r3) -/* 0001C3DC 0002916C 4E 80 00 20 */ blr -.endfn SetCinematicSlowdown__Q28CameraAI8Directorf - -# .text:0x1C3E0 | size: 0x2C -.fn SetMinMax__9TableBaseff, weak -/* 0001C3E0 00029170 94 21 FF F8 */ stwu r1, -0x8(r1) -.L_0001C3E4: -/* 0001C3E4 00029174 7C 08 02 A6 */ mflr r0 -/* 0001C3E8 00029178 90 01 00 0C */ stw r0, 0xc(r1) -/* 0001C3EC 0002917C 7C 69 1B 78 */ mr r9, r3 -/* 0001C3F0 00029180 D0 29 00 04 */ stfs f1, 0x4(r9) -/* 0001C3F4 00029184 D0 49 00 08 */ stfs f2, 0x8(r9) -/* 0001C3F8 00029188 48 00 00 01 */ bl CalcIndexMultiplier__9TableBase -/* 0001C3FC 0002918C 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0001C400 00029190 7C 08 03 A6 */ mtlr r0 -/* 0001C404 00029194 38 21 00 08 */ addi r1, r1, 0x8 -/* 0001C408 00029198 4E 80 00 20 */ blr -.endfn SetMinMax__9TableBaseff - -# .text:0x1C40C | size: 0x64 -# MGamePlayMoment::_GetKind -.fn _GetKind__15MGamePlayMoment, weak -/* 0001C40C 0002919C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 0001C410 000291A0 7C 08 02 A6 */ mflr r0 -/* 0001C414 000291A4 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 0001C418 000291A8 90 01 00 14 */ stw r0, 0x14(r1) -/* 0001C41C 000291AC 3F C0 00 00 */ lis r30, _.tmp_2.9590@ha -/* 0001C420 000291B0 7C 7F 1B 78 */ mr r31, r3 -/* 0001C424 000291B4 80 1E 00 00 */ lwz r0, _.tmp_2.9590@l(r30) -/* 0001C428 000291B8 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0001C42C 000291BC 40 82 C4 4C */ bne .L_00018878 -/* 0001C430 000291C0 3C 60 00 00 */ lis r3, .rodata+0x6CC@ha -/* 0001C434 000291C4 38 63 06 CC */ addi r3, r3, .rodata+0x6CC@l -/* 0001C438 000291C8 48 00 00 01 */ bl stringhash32__FPCc -/* 0001C43C 000291CC 38 00 00 01 */ li r0, 0x1 -/* 0001C440 000291D0 3D 20 00 00 */ lis r9, k.9589@ha -/* 0001C444 000291D4 90 69 00 00 */ stw r3, k.9589@l(r9) -/* 0001C448 000291D8 90 1E 00 00 */ stw r0, _.tmp_2.9590@l(r30) -/* 0001C44C 000291DC 3D 20 00 00 */ lis r9, k.9589@ha -.L_0001C450: -/* 0001C450 000291E0 7F E3 FB 78 */ mr r3, r31 -/* 0001C454 000291E4 80 09 00 00 */ lwz r0, k.9589@l(r9) -/* 0001C458 000291E8 90 1F 00 00 */ stw r0, 0x0(r31) -.L_0001C45C: -/* 0001C45C 000291EC 80 01 00 14 */ lwz r0, 0x14(r1) -/* 0001C460 000291F0 7C 08 03 A6 */ mtlr r0 -/* 0001C464 000291F4 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 0001C468 000291F8 38 21 00 10 */ addi r1, r1, 0x10 -/* 0001C46C 000291FC 4E 80 00 20 */ blr -.endfn _GetKind__15MGamePlayMoment - -# .text:0x1C470 | size: 0x64 -# MICECameraFinished::_GetKind -.fn _GetKind__18MICECameraFinished, weak -/* 0001C470 00029200 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 0001C474 00029204 7C 08 02 A6 */ mflr r0 -/* 0001C478 00029208 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 0001C47C 0002920C 90 01 00 14 */ stw r0, 0x14(r1) -/* 0001C480 00029210 3F C0 00 00 */ lis r30, _.tmp_3.9634@ha -/* 0001C484 00029214 7C 7F 1B 78 */ mr r31, r3 -/* 0001C488 00029218 80 1E 00 00 */ lwz r0, _.tmp_3.9634@l(r30) -/* 0001C48C 0002921C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0001C490 00029220 40 82 C4 B0 */ bne .L_00018940 -/* 0001C494 00029224 3C 60 00 00 */ lis r3, .rodata+0x6DC@ha -/* 0001C498 00029228 38 63 06 DC */ addi r3, r3, .rodata+0x6DC@l -/* 0001C49C 0002922C 48 00 00 01 */ bl stringhash32__FPCc -/* 0001C4A0 00029230 38 00 00 01 */ li r0, 0x1 -/* 0001C4A4 00029234 3D 20 00 00 */ lis r9, k.9633@ha -.L_0001C4A8: -/* 0001C4A8 00029238 90 69 00 00 */ stw r3, k.9633@l(r9) -/* 0001C4AC 0002923C 90 1E 00 00 */ stw r0, _.tmp_3.9634@l(r30) -/* 0001C4B0 00029240 3D 20 00 00 */ lis r9, k.9633@ha -/* 0001C4B4 00029244 7F E3 FB 78 */ mr r3, r31 -/* 0001C4B8 00029248 80 09 00 00 */ lwz r0, k.9633@l(r9) -/* 0001C4BC 0002924C 90 1F 00 00 */ stw r0, 0x0(r31) -/* 0001C4C0 00029250 80 01 00 14 */ lwz r0, 0x14(r1) -/* 0001C4C4 00029254 7C 08 03 A6 */ mtlr r0 -/* 0001C4C8 00029258 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 0001C4CC 0002925C 38 21 00 10 */ addi r1, r1, 0x10 -/* 0001C4D0 00029260 4E 80 00 20 */ blr -.endfn _GetKind__18MICECameraFinished - -# .text:0x1C4D4 | size: 0x64 -# MMiscSound::_GetKind -.fn _GetKind__10MMiscSound, weak -/* 0001C4D4 00029264 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 0001C4D8 00029268 7C 08 02 A6 */ mflr r0 -/* 0001C4DC 0002926C BF C1 00 08 */ stmw r30, 0x8(r1) -/* 0001C4E0 00029270 90 01 00 14 */ stw r0, 0x14(r1) -/* 0001C4E4 00029274 3F C0 00 00 */ lis r30, _.tmp_4.9648@ha -/* 0001C4E8 00029278 7C 7F 1B 78 */ mr r31, r3 -.L_0001C4EC: -/* 0001C4EC 0002927C 80 1E 00 00 */ lwz r0, _.tmp_4.9648@l(r30) -/* 0001C4F0 00029280 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0001C4F4 00029284 40 82 C5 14 */ bne .L_00018A08 -/* 0001C4F8 00029288 3C 60 00 00 */ lis r3, .rodata+0x6F0@ha -/* 0001C4FC 0002928C 38 63 06 F0 */ addi r3, r3, .rodata+0x6F0@l -/* 0001C500 00029290 48 00 00 01 */ bl stringhash32__FPCc -/* 0001C504 00029294 38 00 00 01 */ li r0, 0x1 -/* 0001C508 00029298 3D 20 00 00 */ lis r9, k.9647@ha -/* 0001C50C 0002929C 90 69 00 00 */ stw r3, k.9647@l(r9) -/* 0001C510 000292A0 90 1E 00 00 */ stw r0, _.tmp_4.9648@l(r30) -/* 0001C514 000292A4 3D 20 00 00 */ lis r9, k.9647@ha -/* 0001C518 000292A8 7F E3 FB 78 */ mr r3, r31 -/* 0001C51C 000292AC 80 09 00 00 */ lwz r0, k.9647@l(r9) -/* 0001C520 000292B0 90 1F 00 00 */ stw r0, 0x0(r31) -/* 0001C524 000292B4 80 01 00 14 */ lwz r0, 0x14(r1) -/* 0001C528 000292B8 7C 08 03 A6 */ mtlr r0 -/* 0001C52C 000292BC BB C1 00 08 */ lmw r30, 0x8(r1) -/* 0001C530 000292C0 38 21 00 10 */ addi r1, r1, 0x10 -.L_0001C534: -/* 0001C534 000292C4 4E 80 00 20 */ blr -.endfn _GetKind__10MMiscSound - -# .text:0x1C538 | size: 0x154 -.fn push_back__Q23UTLt6Vector2ZPQ28CameraAI8Directori16RCPQ28CameraAI8Director, weak -/* 0001C538 000292C8 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 0001C53C 000292CC 7C 08 02 A6 */ mflr r0 -/* 0001C540 000292D0 7D 80 00 26 */ mfcr r12 -.L_0001C544: -/* 0001C544 000292D4 BF 41 00 10 */ stmw r26, 0x10(r1) -/* 0001C548 000292D8 90 01 00 2C */ stw r0, 0x2c(r1) -/* 0001C54C 000292DC 91 81 00 0C */ stw r12, 0xc(r1) -/* 0001C550 000292E0 7C 7F 1B 78 */ mr r31, r3 -/* 0001C554 000292E4 7C 9A 23 78 */ mr r26, r4 -/* 0001C558 000292E8 80 9F 00 08 */ lwz r4, 0x8(r31) -/* 0001C55C 000292EC 80 1F 00 04 */ lwz r0, 0x4(r31) -/* 0001C560 000292F0 7C 04 00 40 */ cmplw r4, r0 -/* 0001C564 000292F4 41 80 C6 44 */ blt .L_00018BA8 -/* 0001C568 000292F8 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001C56C 000292FC 38 84 00 01 */ addi r4, r4, 0x1 -/* 0001C570 00029300 80 09 00 24 */ lwz r0, 0x24(r9) -/* 0001C574 00029304 A8 69 00 20 */ lha r3, 0x20(r9) -/* 0001C578 00029308 7C 08 03 A6 */ mtlr r0 -/* 0001C57C 0002930C 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001C580 00029310 4E 80 00 21 */ blrl -/* 0001C584 00029314 80 1F 00 04 */ lwz r0, 0x4(r31) -/* 0001C588 00029318 7C 7E 1B 78 */ mr r30, r3 -/* 0001C58C 0002931C 7C 1E 00 40 */ cmplw r30, r0 -/* 0001C590 00029320 40 81 C6 44 */ ble .L_00018BD4 -/* 0001C594 00029324 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001C598 00029328 7F C4 F3 78 */ mr r4, r30 -/* 0001C59C 0002932C 80 09 00 34 */ lwz r0, 0x34(r9) -/* 0001C5A0 00029330 A8 69 00 30 */ lha r3, 0x30(r9) -/* 0001C5A4 00029334 7C 08 03 A6 */ mtlr r0 -/* 0001C5A8 00029338 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001C5AC 0002933C 4E 80 00 21 */ blrl -/* 0001C5B0 00029340 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001C5B4 00029344 7F C4 F3 78 */ mr r4, r30 -/* 0001C5B8 00029348 38 A0 00 10 */ li r5, 0x10 -/* 0001C5BC 0002934C 83 BF 00 00 */ lwz r29, 0x0(r31) -/* 0001C5C0 00029350 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0001C5C4 00029354 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0001C5C8 00029358 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001C5CC 0002935C 83 9F 00 08 */ lwz r28, 0x8(r31) -/* 0001C5D0 00029360 7C 08 03 A6 */ mtlr r0 -/* 0001C5D4 00029364 83 7F 00 04 */ lwz r27, 0x4(r31) -/* 0001C5D8 00029368 4E 80 00 21 */ blrl -/* 0001C5DC 0002936C 93 DF 00 04 */ stw r30, 0x4(r31) -/* 0001C5E0 00029370 7C 1D 18 00 */ cmpw r29, r3 -/* 0001C5E4 00029374 90 7F 00 00 */ stw r3, 0x0(r31) -/* 0001C5E8 00029378 41 82 C6 44 */ beq .L_00018C2C -/* 0001C5EC 0002937C 38 00 00 00 */ li r0, 0x0 -/* 0001C5F0 00029380 3B C0 00 00 */ li r30, 0x0 -/* 0001C5F4 00029384 90 1F 00 08 */ stw r0, 0x8(r31) -/* 0001C5F8 00029388 7C 1E E0 00 */ cmpw r30, r28 -/* 0001C5FC 0002938C 2E 1D 00 00 */ cmpwi cr4, r29, 0x0 -/* 0001C600 00029390 40 80 C6 20 */ bge .L_00018C20 -/* 0001C604 00029394 57 C4 10 3A */ slwi r4, r30, 2 -/* 0001C608 00029398 7F E3 FB 78 */ mr r3, r31 -/* 0001C60C 0002939C 7C 9D 22 14 */ add r4, r29, r4 -/* 0001C610 000293A0 3B DE 00 01 */ addi r30, r30, 0x1 -/* 0001C614 000293A4 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZPQ28CameraAI8Directori16RCPQ28CameraAI8Director -/* 0001C618 000293A8 7C 1E E0 00 */ cmpw r30, r28 -/* 0001C61C 000293AC 41 80 C6 04 */ blt .L_00018C20 -/* 0001C620 000293B0 41 92 C6 44 */ beq cr4, .L_00018C64 -/* 0001C624 000293B4 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001C628 000293B8 7F A4 EB 78 */ mr r4, r29 -/* 0001C62C 000293BC 7F 65 DB 78 */ mr r5, r27 -/* 0001C630 000293C0 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0001C634 000293C4 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0001C638 000293C8 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001C63C 000293CC 7C 08 03 A6 */ mtlr r0 -/* 0001C640 000293D0 4E 80 00 21 */ blrl -/* 0001C644 000293D4 81 3F 00 08 */ lwz r9, 0x8(r31) -/* 0001C648 000293D8 81 7F 00 00 */ lwz r11, 0x0(r31) -/* 0001C64C 000293DC 55 29 10 3A */ slwi r9, r9, 2 -/* 0001C650 000293E0 7C 09 5A 14 */ add r0, r9, r11 -/* 0001C654 000293E4 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0001C658 000293E8 41 82 C6 64 */ beq .L_00018CBC -/* 0001C65C 000293EC 80 1A 00 00 */ lwz r0, 0x0(r26) -/* 0001C660 000293F0 7C 09 59 2E */ stwx r0, r9, r11 -/* 0001C664 000293F4 81 3F 00 08 */ lwz r9, 0x8(r31) -/* 0001C668 000293F8 39 29 00 01 */ addi r9, r9, 0x1 -/* 0001C66C 000293FC 91 3F 00 08 */ stw r9, 0x8(r31) -/* 0001C670 00029400 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 0001C674 00029404 81 81 00 0C */ lwz r12, 0xc(r1) -.L_0001C678: -/* 0001C678 00029408 7C 08 03 A6 */ mtlr r0 -/* 0001C67C 0002940C BB 41 00 10 */ lmw r26, 0x10(r1) -/* 0001C680 00029410 7D 80 81 20 */ mtcrf 8, r12 -/* 0001C684 00029414 38 21 00 28 */ addi r1, r1, 0x28 -/* 0001C688 00029418 4E 80 00 20 */ blr -.endfn push_back__Q23UTLt6Vector2ZPQ28CameraAI8Directori16RCPQ28CameraAI8Director - -# .text:0x1C68C | size: 0x154 -.fn push_back__Q23UTLt6Vector2ZP14ITrafficCenteri16RCP14ITrafficCenter, weak -/* 0001C68C 0002941C 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 0001C690 00029420 7C 08 02 A6 */ mflr r0 -/* 0001C694 00029424 7D 80 00 26 */ mfcr r12 -/* 0001C698 00029428 BF 41 00 10 */ stmw r26, 0x10(r1) -/* 0001C69C 0002942C 90 01 00 2C */ stw r0, 0x2c(r1) -.L_0001C6A0: -/* 0001C6A0 00029430 91 81 00 0C */ stw r12, 0xc(r1) -/* 0001C6A4 00029434 7C 7F 1B 78 */ mr r31, r3 -/* 0001C6A8 00029438 7C 9A 23 78 */ mr r26, r4 -/* 0001C6AC 0002943C 80 9F 00 08 */ lwz r4, 0x8(r31) -/* 0001C6B0 00029440 80 1F 00 04 */ lwz r0, 0x4(r31) -/* 0001C6B4 00029444 7C 04 00 40 */ cmplw r4, r0 -/* 0001C6B8 00029448 41 80 C7 98 */ blt .L_00018E50 -/* 0001C6BC 0002944C 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001C6C0 00029450 38 84 00 01 */ addi r4, r4, 0x1 -/* 0001C6C4 00029454 80 09 00 24 */ lwz r0, 0x24(r9) -/* 0001C6C8 00029458 A8 69 00 20 */ lha r3, 0x20(r9) -/* 0001C6CC 0002945C 7C 08 03 A6 */ mtlr r0 -/* 0001C6D0 00029460 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001C6D4 00029464 4E 80 00 21 */ blrl -/* 0001C6D8 00029468 80 1F 00 04 */ lwz r0, 0x4(r31) -/* 0001C6DC 0002946C 7C 7E 1B 78 */ mr r30, r3 -/* 0001C6E0 00029470 7C 1E 00 40 */ cmplw r30, r0 -/* 0001C6E4 00029474 40 81 C7 98 */ ble .L_00018E7C -/* 0001C6E8 00029478 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001C6EC 0002947C 7F C4 F3 78 */ mr r4, r30 -/* 0001C6F0 00029480 80 09 00 34 */ lwz r0, 0x34(r9) -/* 0001C6F4 00029484 A8 69 00 30 */ lha r3, 0x30(r9) -/* 0001C6F8 00029488 7C 08 03 A6 */ mtlr r0 -/* 0001C6FC 0002948C 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001C700 00029490 4E 80 00 21 */ blrl -/* 0001C704 00029494 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001C708 00029498 7F C4 F3 78 */ mr r4, r30 -/* 0001C70C 0002949C 38 A0 00 10 */ li r5, 0x10 -/* 0001C710 000294A0 83 BF 00 00 */ lwz r29, 0x0(r31) -/* 0001C714 000294A4 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0001C718 000294A8 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0001C71C 000294AC 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001C720 000294B0 83 9F 00 08 */ lwz r28, 0x8(r31) -/* 0001C724 000294B4 7C 08 03 A6 */ mtlr r0 -/* 0001C728 000294B8 83 7F 00 04 */ lwz r27, 0x4(r31) -/* 0001C72C 000294BC 4E 80 00 21 */ blrl -/* 0001C730 000294C0 93 DF 00 04 */ stw r30, 0x4(r31) -/* 0001C734 000294C4 7C 1D 18 00 */ cmpw r29, r3 -/* 0001C738 000294C8 90 7F 00 00 */ stw r3, 0x0(r31) -/* 0001C73C 000294CC 41 82 C7 98 */ beq LoadCameraShakes__10ICEManagerP6bChunk -/* 0001C740 000294D0 38 00 00 00 */ li r0, 0x0 -/* 0001C744 000294D4 3B C0 00 00 */ li r30, 0x0 -/* 0001C748 000294D8 90 1F 00 08 */ stw r0, 0x8(r31) -.L_0001C74C: -/* 0001C74C 000294DC 7C 1E E0 00 */ cmpw r30, r28 -/* 0001C750 000294E0 2E 1D 00 00 */ cmpwi cr4, r29, 0x0 -/* 0001C754 000294E4 40 80 C7 74 */ bge .L_00018EC8 -/* 0001C758 000294E8 57 C4 10 3A */ slwi r4, r30, 2 -/* 0001C75C 000294EC 7F E3 FB 78 */ mr r3, r31 -/* 0001C760 000294F0 7C 9D 22 14 */ add r4, r29, r4 -/* 0001C764 000294F4 3B DE 00 01 */ addi r30, r30, 0x1 -/* 0001C768 000294F8 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZP14ITrafficCenteri16RCP14ITrafficCenter -.L_0001C76C: -/* 0001C76C 000294FC 7C 1E E0 00 */ cmpw r30, r28 -/* 0001C770 00029500 41 80 C7 58 */ blt .L_00018EC8 -/* 0001C774 00029504 41 92 C7 98 */ beq cr4, .L_00018F0C -/* 0001C778 00029508 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001C77C 0002950C 7F A4 EB 78 */ mr r4, r29 -/* 0001C780 00029510 7F 65 DB 78 */ mr r5, r27 -/* 0001C784 00029514 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0001C788 00029518 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0001C78C 0002951C 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001C790 00029520 7C 08 03 A6 */ mtlr r0 -/* 0001C794 00029524 4E 80 00 21 */ blrl -/* 0001C798 00029528 81 3F 00 08 */ lwz r9, 0x8(r31) -/* 0001C79C 0002952C 81 7F 00 00 */ lwz r11, 0x0(r31) -/* 0001C7A0 00029530 55 29 10 3A */ slwi r9, r9, 2 -/* 0001C7A4 00029534 7C 09 5A 14 */ add r0, r9, r11 -/* 0001C7A8 00029538 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0001C7AC 0002953C 41 82 C7 B8 */ beq .L_00018F64 -/* 0001C7B0 00029540 80 1A 00 00 */ lwz r0, 0x0(r26) -/* 0001C7B4 00029544 7C 09 59 2E */ stwx r0, r9, r11 -/* 0001C7B8 00029548 81 3F 00 08 */ lwz r9, 0x8(r31) -/* 0001C7BC 0002954C 39 29 00 01 */ addi r9, r9, 0x1 -/* 0001C7C0 00029550 91 3F 00 08 */ stw r9, 0x8(r31) -/* 0001C7C4 00029554 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 0001C7C8 00029558 81 81 00 0C */ lwz r12, 0xc(r1) -/* 0001C7CC 0002955C 7C 08 03 A6 */ mtlr r0 -/* 0001C7D0 00029560 BB 41 00 10 */ lmw r26, 0x10(r1) -/* 0001C7D4 00029564 7D 80 81 20 */ mtcrf 8, r12 -.L_0001C7D8: -/* 0001C7D8 00029568 38 21 00 28 */ addi r1, r1, 0x28 -/* 0001C7DC 0002956C 4E 80 00 20 */ blr -.endfn push_back__Q23UTLt6Vector2ZP14ITrafficCenteri16RCP14ITrafficCenter - -# .text:0x1C7E0 | size: 0x148 -.fn _._14ITrafficCenter, weak -/* 0001C7E0 00029570 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 0001C7E4 00029574 7C 08 02 A6 */ mflr r0 -/* 0001C7E8 00029578 BF 81 00 10 */ stmw r28, 0x10(r1) -/* 0001C7EC 0002957C 90 01 00 24 */ stw r0, 0x24(r1) -/* 0001C7F0 00029580 3D 20 00 00 */ lis r9, _vt.14ITrafficCenter@ha -/* 0001C7F4 00029584 7C 7D 1B 78 */ mr r29, r3 -/* 0001C7F8 00029588 39 29 00 00 */ addi r9, r9, _vt.14ITrafficCenter@l -/* 0001C7FC 0002958C 3D 40 00 00 */ lis r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha -/* 0001C800 00029590 91 3D 00 04 */ stw r9, 0x4(r29) -.L_0001C804: -/* 0001C804 00029594 39 6A 00 00 */ addi r11, r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l -/* 0001C808 00029598 3B C1 00 08 */ addi r30, r1, 0x8 -/* 0001C80C 0002959C 7C 9C 23 78 */ mr r28, r4 -/* 0001C810 000295A0 80 0B 00 08 */ lwz r0, 0x8(r11) -/* 0001C814 000295A4 7F C5 F3 78 */ mr r5, r30 -/* 0001C818 000295A8 80 6A 00 00 */ lwz r3, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r10) -.L_0001C81C: -/* 0001C81C 000295AC 54 00 10 3A */ slwi r0, r0, 2 -/* 0001C820 000295B0 93 A1 00 08 */ stw r29, 0x8(r1) -/* 0001C824 000295B4 7F E3 02 14 */ add r31, r3, r0 -/* 0001C828 000295B8 7F E4 FB 78 */ mr r4, r31 -/* 0001C82C 000295BC 48 00 00 01 */ bl find__H2ZPP14ITrafficCenterZP14ITrafficCenter_4_STLX01X01RCX11_X01 -/* 0001C830 000295C0 7C 03 F8 00 */ cmpw r3, r31 -/* 0001C834 000295C4 40 82 C8 40 */ bne .L_00019074 -/* 0001C838 000295C8 7F E3 FB 78 */ mr r3, r31 -/* 0001C83C 000295CC 48 01 C8 70 */ b .text+0x1C870 -/* 0001C840 000295D0 39 63 00 04 */ addi r11, r3, 0x4 -/* 0001C844 000295D4 7C 0B F8 00 */ cmpw r11, r31 -/* 0001C848 000295D8 41 82 C8 70 */ beq .L_000190B8 -/* 0001C84C 000295DC 81 2B 00 00 */ lwz r9, 0x0(r11) -/* 0001C850 000295E0 80 1E 00 00 */ lwz r0, 0x0(r30) -/* 0001C854 000295E4 7C 09 00 00 */ cmpw r9, r0 -/* 0001C858 000295E8 41 82 C8 64 */ beq .L_000190BC -/* 0001C85C 000295EC 91 23 00 00 */ stw r9, 0x0(r3) -/* 0001C860 000295F0 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001C864 000295F4 39 6B 00 04 */ addi r11, r11, 0x4 -/* 0001C868 000295F8 7C 0B F8 00 */ cmpw r11, r31 -/* 0001C86C 000295FC 40 82 C8 4C */ bne .L_000190B8 -/* 0001C870 00029600 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@ha -/* 0001C874 00029604 38 A9 00 00 */ addi r5, r9, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l -/* 0001C878 00029608 81 49 00 00 */ lwz r10, _Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable@l(r9) -/* 0001C87C 0002960C 81 05 00 08 */ lwz r8, 0x8(r5) -/* 0001C880 00029610 55 00 10 3A */ slwi r0, r8, 2 -/* 0001C884 00029614 7D 6A 02 14 */ add r11, r10, r0 -/* 0001C888 00029618 7C 03 58 00 */ cmpw r3, r11 -/* 0001C88C 0002961C 41 82 C9 04 */ beq Resolve__10ICEManager -/* 0001C890 00029620 7D 23 58 50 */ subf r9, r3, r11 -/* 0001C894 00029624 7C 0A 18 50 */ subf r0, r10, r3 -/* 0001C898 00029628 7D 3F 16 70 */ srawi r31, r9, 2 -/* 0001C89C 0002962C 7C 06 16 70 */ srawi r6, r0, 2 -/* 0001C8A0 00029630 7D 09 43 78 */ mr r9, r8 -/* 0001C8A4 00029634 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001C8A8 00029638 7C 03 58 00 */ cmpw r3, r11 -/* 0001C8AC 0002963C 40 82 C8 A4 */ bne .L_00019150 -/* 0001C8B0 00029640 7C E6 FA 14 */ add r7, r6, r31 -/* 0001C8B4 00029644 39 00 00 00 */ li r8, 0x0 -/* 0001C8B8 00029648 7C E4 3B 78 */ mr r4, r7 -/* 0001C8BC 0002964C 7C 04 48 50 */ subf r0, r4, r9 -/* 0001C8C0 00029650 7C 08 00 40 */ cmplw r8, r0 -/* 0001C8C4 00029654 40 80 C8 FC */ bge .L_000191C0 -/* 0001C8C8 00029658 7C 06 42 14 */ add r0, r6, r8 -/* 0001C8CC 0002965C 81 65 00 00 */ lwz r11, 0x0(r5) -/* 0001C8D0 00029660 54 0A 10 3A */ slwi r10, r0, 2 -/* 0001C8D4 00029664 7D 27 42 14 */ add r9, r7, r8 -/* 0001C8D8 00029668 7C 0A 5A 14 */ add r0, r10, r11 -/* 0001C8DC 0002966C 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0001C8E0 00029670 41 82 C8 F0 */ beq .L_000191D0 -/* 0001C8E4 00029674 55 29 10 3A */ slwi r9, r9, 2 -/* 0001C8E8 00029678 7C 09 58 2E */ lwzx r0, r9, r11 -/* 0001C8EC 0002967C 7C 0A 59 2E */ stwx r0, r10, r11 -/* 0001C8F0 00029680 39 08 00 01 */ addi r8, r8, 0x1 -/* 0001C8F4 00029684 81 25 00 08 */ lwz r9, 0x8(r5) -/* 0001C8F8 00029688 48 01 C8 BC */ b .text+0x1C8BC -/* 0001C8FC 0002968C 7C 1F 48 50 */ subf r0, r31, r9 -/* 0001C900 00029690 90 05 00 08 */ stw r0, 0x8(r5) -.L_0001C904: -/* 0001C904 00029694 73 80 00 01 */ andi. r0, r28, 0x1 -/* 0001C908 00029698 41 82 C9 14 */ beq .L_0001921C -/* 0001C90C 0002969C 7F A3 EB 78 */ mr r3, r29 -/* 0001C910 000296A0 48 00 00 01 */ bl __builtin_delete -/* 0001C914 000296A4 80 01 00 24 */ lwz r0, 0x24(r1) -/* 0001C918 000296A8 7C 08 03 A6 */ mtlr r0 -/* 0001C91C 000296AC BB 81 00 10 */ lmw r28, 0x10(r1) -/* 0001C920 000296B0 38 21 00 20 */ addi r1, r1, 0x20 -/* 0001C924 000296B4 4E 80 00 20 */ blr -.endfn _._14ITrafficCenter - -# .text:0x1C928 | size: 0x8 -# CDActionDrive::GetMover -.fn GetMover__13CDActionDrive, global -/* 0001C928 000296B8 80 63 00 2C */ lwz r3, 0x2c(r3) -/* 0001C92C 000296BC 4E 80 00 20 */ blr -.endfn GetMover__13CDActionDrive - -# .text:0x1C930 | size: 0x4 -.fn OnAttached__13CDActionDriveP11IAttachable, global -/* 0001C930 000296C0 4E 80 00 20 */ blr -.endfn OnAttached__13CDActionDriveP11IAttachable - -# .text:0x1C934 | size: 0x64 -# MJumpCut::_GetKind -.fn _GetKind__8MJumpCut, weak -/* 0001C934 000296C4 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 0001C938 000296C8 7C 08 02 A6 */ mflr r0 -/* 0001C93C 000296CC BF C1 00 08 */ stmw r30, 0x8(r1) -/* 0001C940 000296D0 90 01 00 14 */ stw r0, 0x14(r1) -/* 0001C944 000296D4 3F C0 00 00 */ lis r30, _.tmp_6.10705@ha -/* 0001C948 000296D8 7C 7F 1B 78 */ mr r31, r3 -/* 0001C94C 000296DC 80 1E 00 00 */ lwz r0, _.tmp_6.10705@l(r30) -/* 0001C950 000296E0 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0001C954 000296E4 40 82 C9 74 */ bne .L_000192C8 -/* 0001C958 000296E8 3C 60 00 00 */ lis r3, .rodata+0x80C@ha -/* 0001C95C 000296EC 38 63 08 0C */ addi r3, r3, .rodata+0x80C@l -/* 0001C960 000296F0 48 00 00 01 */ bl stringhash32__FPCc -/* 0001C964 000296F4 38 00 00 01 */ li r0, 0x1 -/* 0001C968 000296F8 3D 20 00 00 */ lis r9, k.10704@ha -/* 0001C96C 000296FC 90 69 00 00 */ stw r3, k.10704@l(r9) -/* 0001C970 00029700 90 1E 00 00 */ stw r0, _.tmp_6.10705@l(r30) -/* 0001C974 00029704 3D 20 00 00 */ lis r9, k.10704@ha -/* 0001C978 00029708 7F E3 FB 78 */ mr r3, r31 -/* 0001C97C 0002970C 80 09 00 00 */ lwz r0, k.10704@l(r9) -/* 0001C980 00029710 90 1F 00 00 */ stw r0, 0x0(r31) -/* 0001C984 00029714 80 01 00 14 */ lwz r0, 0x14(r1) -/* 0001C988 00029718 7C 08 03 A6 */ mtlr r0 -/* 0001C98C 0002971C BB C1 00 08 */ lmw r30, 0x8(r1) -/* 0001C990 00029720 38 21 00 10 */ addi r1, r1, 0x10 -/* 0001C994 00029724 4E 80 00 20 */ blr -.endfn _GetKind__8MJumpCut - -# .text:0x1C998 | size: 0x88 -.fn Call__Q36Hermes7Handlert13MemberHandler3Z8MJumpCutZ13CDActionDriveZ13CDActionDrivePCQ26Hermes7MessagePQ26Hermes7Handler, weak -/* 0001C998 00029728 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0001C99C 0002972C 7C 08 02 A6 */ mflr r0 -/* 0001C9A0 00029730 90 01 00 0C */ stw r0, 0xc(r1) -/* 0001C9A4 00029734 A9 04 00 02 */ lha r8, 0x2(r4) -/* 0001C9A8 00029738 7C 66 1B 78 */ mr r6, r3 -/* 0001C9AC 0002973C 2C 08 00 00 */ cmpwi r8, 0x0 -/* 0001C9B0 00029740 41 80 C9 D8 */ blt .L_00019388 -/* 0001C9B4 00029744 A9 44 00 04 */ lha r10, 0x4(r4) -/* 0001C9B8 00029748 55 09 18 38 */ slwi r9, r8, 3 -/* 0001C9BC 0002974C 81 64 00 08 */ lwz r11, 0x8(r4) -/* 0001C9C0 00029750 7C 0B 50 2E */ lwzx r0, r11, r10 -/* 0001C9C4 00029754 7D 29 02 14 */ add r9, r9, r0 -/* 0001C9C8 00029758 81 49 FF FC */ lwz r10, -0x4(r9) -/* 0001C9CC 0002975C 81 29 FF F8 */ lwz r9, -0x8(r9) -/* 0001C9D0 00029760 7D 47 53 78 */ mr r7, r10 -/* 0001C9D4 00029764 48 01 C9 DC */ b .text+0x1C9DC -/* 0001C9D8 00029768 80 E4 00 04 */ lwz r7, 0x4(r4) -/* 0001C9DC 0002976C A9 64 00 00 */ lha r11, 0x0(r4) -/* 0001C9E0 00029770 2C 08 00 00 */ cmpwi r8, 0x0 -/* 0001C9E4 00029774 38 64 00 08 */ addi r3, r4, 0x8 -/* 0001C9E8 00029778 41 80 C9 F8 */ blt .L_000193E0 -/* 0001C9EC 0002977C 7D 20 86 70 */ srawi r0, r9, 16 -/* 0001C9F0 00029780 7C 00 5A 14 */ add r0, r0, r11 -/* 0001C9F4 00029784 48 01 C9 FC */ b .text+0x1C9FC -/* 0001C9F8 00029788 7D 60 5B 78 */ mr r0, r11 -/* 0001C9FC 0002978C 80 63 00 00 */ lwz r3, 0x0(r3) -/* 0001CA00 00029790 7C C4 33 78 */ mr r4, r6 -/* 0001CA04 00029794 7C E8 03 A6 */ mtlr r7 -/* 0001CA08 00029798 7C 63 02 14 */ add r3, r3, r0 -/* 0001CA0C 0002979C 4E 80 00 21 */ blrl -/* 0001CA10 000297A0 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0001CA14 000297A4 7C 08 03 A6 */ mtlr r0 -/* 0001CA18 000297A8 38 21 00 08 */ addi r1, r1, 0x8 -/* 0001CA1C 000297AC 4E 80 00 20 */ blr -.endfn Call__Q36Hermes7Handlert13MemberHandler3Z8MJumpCutZ13CDActionDriveZ13CDActionDrivePCQ26Hermes7MessagePQ26Hermes7Handler - -# .text:0x1CA20 | size: 0x8 -# CDActionTrackCar::GetMover -.fn GetMover__16CDActionTrackCar, global -/* 0001CA20 000297B0 80 63 00 28 */ lwz r3, 0x28(r3) -/* 0001CA24 000297B4 4E 80 00 20 */ blr -.endfn GetMover__16CDActionTrackCar - -# .text:0x1CA28 | size: 0x4 -.fn SetSpecial__16CDActionTrackCarf, global -/* 0001CA28 000297B8 4E 80 00 20 */ blr -.endfn SetSpecial__16CDActionTrackCarf - -# .text:0x1CA2C | size: 0x4 -.fn OnAttached__16CDActionTrackCarP11IAttachable, global -/* 0001CA2C 000297BC 4E 80 00 20 */ blr -.endfn OnAttached__16CDActionTrackCarP11IAttachable - -# .text:0x1CA30 | size: 0x4 -# CDActionTrackCar::Reset -.fn Reset__16CDActionTrackCar, global -/* 0001CA30 000297C0 4E 80 00 20 */ blr -.endfn Reset__16CDActionTrackCar - -# .text:0x1CA34 | size: 0x8 -# CDActionTrackCop::GetMover -.fn GetMover__16CDActionTrackCop, global -/* 0001CA34 000297C4 80 63 00 28 */ lwz r3, 0x28(r3) -/* 0001CA38 000297C8 4E 80 00 20 */ blr -.endfn GetMover__16CDActionTrackCop - -# .text:0x1CA3C | size: 0x4 -.fn SetSpecial__16CDActionTrackCopf, global -/* 0001CA3C 000297CC 4E 80 00 20 */ blr -.endfn SetSpecial__16CDActionTrackCopf - -# .text:0x1CA40 | size: 0x4 -.fn OnAttached__16CDActionTrackCopP11IAttachable, global -/* 0001CA40 000297D0 4E 80 00 20 */ blr -.endfn OnAttached__16CDActionTrackCopP11IAttachable - -# .text:0x1CA44 | size: 0x4 -# CDActionTrackCop::Reset -.fn Reset__16CDActionTrackCop, global -/* 0001CA44 000297D4 4E 80 00 20 */ blr -.endfn Reset__16CDActionTrackCop - -# .text:0x1CA48 | size: 0x8 -# CDActionShowcase::GetMover -.fn GetMover__16CDActionShowcase, global -/* 0001CA48 000297D8 80 63 00 20 */ lwz r3, 0x20(r3) -/* 0001CA4C 000297DC 4E 80 00 20 */ blr -.endfn GetMover__16CDActionShowcase - -# .text:0x1CA50 | size: 0x4 -.fn SetSpecial__16CDActionShowcasef, global -/* 0001CA50 000297E0 4E 80 00 20 */ blr -.endfn SetSpecial__16CDActionShowcasef - -# .text:0x1CA54 | size: 0x4 -.fn OnAttached__16CDActionShowcaseP11IAttachable, global -/* 0001CA54 000297E4 4E 80 00 20 */ blr -.endfn OnAttached__16CDActionShowcaseP11IAttachable - -# .text:0x1CA58 | size: 0x4 -# CDActionShowcase::Reset -.fn Reset__16CDActionShowcase, global -/* 0001CA58 000297E8 4E 80 00 20 */ blr -.endfn Reset__16CDActionShowcase - -# .text:0x1CA5C | size: 0x8 -# CDActionDebug::GetMover -.fn GetMover__13CDActionDebug, global -/* 0001CA5C 000297EC 80 63 02 B4 */ lwz r3, 0x2b4(r3) -/* 0001CA60 000297F0 4E 80 00 20 */ blr -.endfn GetMover__13CDActionDebug - -# .text:0x1CA64 | size: 0x4 -.fn SetSpecial__13CDActionDebugf, global -/* 0001CA64 000297F4 4E 80 00 20 */ blr -.endfn SetSpecial__13CDActionDebugf - -# .text:0x1CA68 | size: 0x4 -# CDActionDebug::Reset -.fn Reset__13CDActionDebug, global -/* 0001CA68 000297F8 4E 80 00 20 */ blr -.endfn Reset__13CDActionDebug - -# .text:0x1CA6C | size: 0x4 -.fn SetSpecial__11CDActionIcef, global -/* 0001CA6C 000297FC 4E 80 00 20 */ blr -.endfn SetSpecial__11CDActionIcef - -# .text:0x1CA70 | size: 0x4 -.fn OnAttached__11CDActionIceP11IAttachable, global -/* 0001CA70 00029800 4E 80 00 20 */ blr -.endfn OnAttached__11CDActionIceP11IAttachable - -# .text:0x1CA74 | size: 0x4 -# CDActionIce::Reset -.fn Reset__11CDActionIce, global -/* 0001CA74 00029804 4E 80 00 20 */ blr -.endfn Reset__11CDActionIce - -# .text:0x1CA78 | size: 0x8 -# ICEMover::IsViolatingTopology -.fn IsViolatingTopology__8ICEMover, global -/* 0001CA78 00029808 80 63 00 C8 */ lwz r3, 0xc8(r3) -/* 0001CA7C 0002980C 4E 80 00 20 */ blr -.endfn IsViolatingTopology__8ICEMover - -# .text:0x1CA80 | size: 0x24 -# ICEMover::IsSmooth -.fn IsSmooth__8ICEMover, global -/* 0001CA80 00029810 81 23 00 C4 */ lwz r9, 0xc4(r3) -/* 0001CA84 00029814 38 60 00 00 */ li r3, 0x0 -/* 0001CA88 00029818 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0001CA8C 0002981C 4D 82 00 20 */ beqlr -/* 0001CA90 00029820 88 09 00 01 */ lbz r0, 0x1(r9) -/* 0001CA94 00029824 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0001CA98 00029828 4D 82 00 20 */ beqlr -/* 0001CA9C 0002982C 38 60 00 01 */ li r3, 0x1 -/* 0001CAA0 00029830 4E 80 00 20 */ blr -.endfn IsSmooth__8ICEMover - -# .text:0x1CAA4 | size: 0x8 -# ICEMover::GetICEAnchor -.fn GetICEAnchor__8ICEMover, global -/* 0001CAA4 00029834 80 63 00 80 */ lwz r3, 0x80(r3) -/* 0001CAA8 00029838 4E 80 00 20 */ blr -.endfn GetICEAnchor__8ICEMover - -# .text:0x1CAAC | size: 0xC -# IDebugWatchCar::_IHandle -.fn _IHandle__14IDebugWatchCar, weak -/* 0001CAAC 0002983C 3C 60 00 00 */ lis r3, _IHandle__14IDebugWatchCar@ha -/* 0001CAB0 00029840 38 63 00 00 */ addi r3, r3, _IHandle__14IDebugWatchCar@l -/* 0001CAB4 00029844 4E 80 00 20 */ blr -.endfn _IHandle__14IDebugWatchCar - -# .text:0x1CAB8 | size: 0x154 -.fn push_back__Q23UTLt6Vector2ZP14IDebugWatchCari16RCP14IDebugWatchCar, weak -/* 0001CAB8 00029848 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 0001CABC 0002984C 7C 08 02 A6 */ mflr r0 -/* 0001CAC0 00029850 7D 80 00 26 */ mfcr r12 -/* 0001CAC4 00029854 BF 41 00 10 */ stmw r26, 0x10(r1) -/* 0001CAC8 00029858 90 01 00 2C */ stw r0, 0x2c(r1) -/* 0001CACC 0002985C 91 81 00 0C */ stw r12, 0xc(r1) -/* 0001CAD0 00029860 7C 7F 1B 78 */ mr r31, r3 -/* 0001CAD4 00029864 7C 9A 23 78 */ mr r26, r4 -/* 0001CAD8 00029868 80 9F 00 08 */ lwz r4, 0x8(r31) -/* 0001CADC 0002986C 80 1F 00 04 */ lwz r0, 0x4(r31) -/* 0001CAE0 00029870 7C 04 00 40 */ cmplw r4, r0 -/* 0001CAE4 00029874 41 80 CB C4 */ blt .L_000196A8 -/* 0001CAE8 00029878 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001CAEC 0002987C 38 84 00 01 */ addi r4, r4, 0x1 -/* 0001CAF0 00029880 80 09 00 24 */ lwz r0, 0x24(r9) -/* 0001CAF4 00029884 A8 69 00 20 */ lha r3, 0x20(r9) -/* 0001CAF8 00029888 7C 08 03 A6 */ mtlr r0 -/* 0001CAFC 0002988C 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001CB00 00029890 4E 80 00 21 */ blrl -/* 0001CB04 00029894 80 1F 00 04 */ lwz r0, 0x4(r31) -/* 0001CB08 00029898 7C 7E 1B 78 */ mr r30, r3 -/* 0001CB0C 0002989C 7C 1E 00 40 */ cmplw r30, r0 -/* 0001CB10 000298A0 40 81 CB C4 */ ble .L_000196D4 -/* 0001CB14 000298A4 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001CB18 000298A8 7F C4 F3 78 */ mr r4, r30 -/* 0001CB1C 000298AC 80 09 00 34 */ lwz r0, 0x34(r9) -/* 0001CB20 000298B0 A8 69 00 30 */ lha r3, 0x30(r9) -/* 0001CB24 000298B4 7C 08 03 A6 */ mtlr r0 -.L_0001CB28: -/* 0001CB28 000298B8 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001CB2C 000298BC 4E 80 00 21 */ blrl -/* 0001CB30 000298C0 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001CB34 000298C4 7F C4 F3 78 */ mr r4, r30 -.L_0001CB38: -/* 0001CB38 000298C8 38 A0 00 10 */ li r5, 0x10 -/* 0001CB3C 000298CC 83 BF 00 00 */ lwz r29, 0x0(r31) -/* 0001CB40 000298D0 A8 69 00 10 */ lha r3, 0x10(r9) -/* 0001CB44 000298D4 80 09 00 14 */ lwz r0, 0x14(r9) -/* 0001CB48 000298D8 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001CB4C 000298DC 83 9F 00 08 */ lwz r28, 0x8(r31) -/* 0001CB50 000298E0 7C 08 03 A6 */ mtlr r0 -/* 0001CB54 000298E4 83 7F 00 04 */ lwz r27, 0x4(r31) -/* 0001CB58 000298E8 4E 80 00 21 */ blrl -/* 0001CB5C 000298EC 93 DF 00 04 */ stw r30, 0x4(r31) -/* 0001CB60 000298F0 7C 1D 18 00 */ cmpw r29, r3 -/* 0001CB64 000298F4 90 7F 00 00 */ stw r3, 0x0(r31) -/* 0001CB68 000298F8 41 82 CB C4 */ beq .L_0001972C -/* 0001CB6C 000298FC 38 00 00 00 */ li r0, 0x0 -/* 0001CB70 00029900 3B C0 00 00 */ li r30, 0x0 -/* 0001CB74 00029904 90 1F 00 08 */ stw r0, 0x8(r31) -/* 0001CB78 00029908 7C 1E E0 00 */ cmpw r30, r28 -/* 0001CB7C 0002990C 2E 1D 00 00 */ cmpwi cr4, r29, 0x0 -/* 0001CB80 00029910 40 80 CB A0 */ bge .L_00019720 -/* 0001CB84 00029914 57 C4 10 3A */ slwi r4, r30, 2 -/* 0001CB88 00029918 7F E3 FB 78 */ mr r3, r31 -/* 0001CB8C 0002991C 7C 9D 22 14 */ add r4, r29, r4 -/* 0001CB90 00029920 3B DE 00 01 */ addi r30, r30, 0x1 -/* 0001CB94 00029924 48 00 00 01 */ bl push_back__Q23UTLt6Vector2ZP14IDebugWatchCari16RCP14IDebugWatchCar -/* 0001CB98 00029928 7C 1E E0 00 */ cmpw r30, r28 -/* 0001CB9C 0002992C 41 80 CB 84 */ blt .L_00019720 -/* 0001CBA0 00029930 41 92 CB C4 */ beq cr4, .L_00019764 -/* 0001CBA4 00029934 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001CBA8 00029938 7F A4 EB 78 */ mr r4, r29 -/* 0001CBAC 0002993C 7F 65 DB 78 */ mr r5, r27 -/* 0001CBB0 00029940 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0001CBB4 00029944 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0001CBB8 00029948 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001CBBC 0002994C 7C 08 03 A6 */ mtlr r0 -/* 0001CBC0 00029950 4E 80 00 21 */ blrl -/* 0001CBC4 00029954 81 3F 00 08 */ lwz r9, 0x8(r31) -/* 0001CBC8 00029958 81 7F 00 00 */ lwz r11, 0x0(r31) -/* 0001CBCC 0002995C 55 29 10 3A */ slwi r9, r9, 2 -/* 0001CBD0 00029960 7C 09 5A 14 */ add r0, r9, r11 -/* 0001CBD4 00029964 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0001CBD8 00029968 41 82 CB E4 */ beq .L_000197BC -/* 0001CBDC 0002996C 80 1A 00 00 */ lwz r0, 0x0(r26) -/* 0001CBE0 00029970 7C 09 59 2E */ stwx r0, r9, r11 -/* 0001CBE4 00029974 81 3F 00 08 */ lwz r9, 0x8(r31) -/* 0001CBE8 00029978 39 29 00 01 */ addi r9, r9, 0x1 -/* 0001CBEC 0002997C 91 3F 00 08 */ stw r9, 0x8(r31) -/* 0001CBF0 00029980 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 0001CBF4 00029984 81 81 00 0C */ lwz r12, 0xc(r1) -/* 0001CBF8 00029988 7C 08 03 A6 */ mtlr r0 -/* 0001CBFC 0002998C BB 41 00 10 */ lmw r26, 0x10(r1) -/* 0001CC00 00029990 7D 80 81 20 */ mtcrf 8, r12 -/* 0001CC04 00029994 38 21 00 28 */ addi r1, r1, 0x28 -/* 0001CC08 00029998 4E 80 00 20 */ blr -.endfn push_back__Q23UTLt6Vector2ZP14IDebugWatchCari16RCP14IDebugWatchCar - -# .text:0x1CC0C | size: 0x160 -.fn _._14IDebugWatchCar, weak -/* 0001CC0C 0002999C 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 0001CC10 000299A0 7C 08 02 A6 */ mflr r0 -/* 0001CC14 000299A4 BF 81 00 10 */ stmw r28, 0x10(r1) -/* 0001CC18 000299A8 90 01 00 24 */ stw r0, 0x24(r1) -/* 0001CC1C 000299AC 3D 20 00 00 */ lis r9, _vt.14IDebugWatchCar@ha -/* 0001CC20 000299B0 7C 7D 1B 78 */ mr r29, r3 -/* 0001CC24 000299B4 39 29 00 00 */ addi r9, r9, _vt.14IDebugWatchCar@l -/* 0001CC28 000299B8 3D 40 00 00 */ lis r10, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@ha -/* 0001CC2C 000299BC 91 3D 00 04 */ stw r9, 0x4(r29) -/* 0001CC30 000299C0 39 6A 00 00 */ addi r11, r10, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@l -/* 0001CC34 000299C4 3B C1 00 08 */ addi r30, r1, 0x8 -/* 0001CC38 000299C8 7C 9C 23 78 */ mr r28, r4 -/* 0001CC3C 000299CC 80 0B 00 08 */ lwz r0, 0x8(r11) -/* 0001CC40 000299D0 7F C5 F3 78 */ mr r5, r30 -/* 0001CC44 000299D4 80 6A 00 00 */ lwz r3, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@l(r10) -/* 0001CC48 000299D8 54 00 10 3A */ slwi r0, r0, 2 -.L_0001CC4C: -/* 0001CC4C 000299DC 93 A1 00 08 */ stw r29, 0x8(r1) -/* 0001CC50 000299E0 7F E3 02 14 */ add r31, r3, r0 -/* 0001CC54 000299E4 7F E4 FB 78 */ mr r4, r31 -/* 0001CC58 000299E8 48 00 00 01 */ bl find__H2ZPP14IDebugWatchCarZP14IDebugWatchCar_4_STLX01X01RCX11_X01 -/* 0001CC5C 000299EC 7C 03 F8 00 */ cmpw r3, r31 -/* 0001CC60 000299F0 40 82 CC 6C */ bne .L_000198CC -/* 0001CC64 000299F4 7F E3 FB 78 */ mr r3, r31 -/* 0001CC68 000299F8 48 01 CC 9C */ b .text+0x1CC9C -/* 0001CC6C 000299FC 39 63 00 04 */ addi r11, r3, 0x4 -/* 0001CC70 00029A00 7C 0B F8 00 */ cmpw r11, r31 -/* 0001CC74 00029A04 41 82 CC 9C */ beq .L_00019910 -/* 0001CC78 00029A08 81 2B 00 00 */ lwz r9, 0x0(r11) -/* 0001CC7C 00029A0C 80 1E 00 00 */ lwz r0, 0x0(r30) -/* 0001CC80 00029A10 7C 09 00 00 */ cmpw r9, r0 -/* 0001CC84 00029A14 41 82 CC 90 */ beq .L_00019914 -/* 0001CC88 00029A18 91 23 00 00 */ stw r9, 0x0(r3) -/* 0001CC8C 00029A1C 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001CC90 00029A20 39 6B 00 04 */ addi r11, r11, 0x4 -/* 0001CC94 00029A24 7C 0B F8 00 */ cmpw r11, r31 -/* 0001CC98 00029A28 40 82 CC 78 */ bne .L_00019910 -/* 0001CC9C 00029A2C 3D 20 00 00 */ lis r9, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@ha -/* 0001CCA0 00029A30 38 A9 00 00 */ addi r5, r9, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@l -/* 0001CCA4 00029A34 81 49 00 00 */ lwz r10, _Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable@l(r9) -.L_0001CCA8: -/* 0001CCA8 00029A38 81 05 00 08 */ lwz r8, 0x8(r5) -/* 0001CCAC 00029A3C 55 00 10 3A */ slwi r0, r8, 2 -/* 0001CCB0 00029A40 7D 6A 02 14 */ add r11, r10, r0 -/* 0001CCB4 00029A44 7C 03 58 00 */ cmpw r3, r11 -/* 0001CCB8 00029A48 41 82 CD 30 */ beq .L_000199E8 -/* 0001CCBC 00029A4C 7D 23 58 50 */ subf r9, r3, r11 -/* 0001CCC0 00029A50 7C 0A 18 50 */ subf r0, r10, r3 -/* 0001CCC4 00029A54 7D 3F 16 70 */ srawi r31, r9, 2 -/* 0001CCC8 00029A58 7C 06 16 70 */ srawi r6, r0, 2 -/* 0001CCCC 00029A5C 7D 09 43 78 */ mr r9, r8 -/* 0001CCD0 00029A60 38 63 00 04 */ addi r3, r3, 0x4 -/* 0001CCD4 00029A64 7C 03 58 00 */ cmpw r3, r11 -/* 0001CCD8 00029A68 40 82 CC D0 */ bne .L_000199A8 -.L_0001CCDC: -/* 0001CCDC 00029A6C 7C E6 FA 14 */ add r7, r6, r31 -/* 0001CCE0 00029A70 39 00 00 00 */ li r8, 0x0 -/* 0001CCE4 00029A74 7C E4 3B 78 */ mr r4, r7 -/* 0001CCE8 00029A78 7C 04 48 50 */ subf r0, r4, r9 -/* 0001CCEC 00029A7C 7C 08 00 40 */ cmplw r8, r0 -/* 0001CCF0 00029A80 40 80 CD 28 */ bge .L_00019A18 -/* 0001CCF4 00029A84 7C 06 42 14 */ add r0, r6, r8 -/* 0001CCF8 00029A88 81 65 00 00 */ lwz r11, 0x0(r5) -/* 0001CCFC 00029A8C 54 0A 10 3A */ slwi r10, r0, 2 -/* 0001CD00 00029A90 7D 27 42 14 */ add r9, r7, r8 -/* 0001CD04 00029A94 7C 0A 5A 14 */ add r0, r10, r11 -/* 0001CD08 00029A98 2C 00 00 00 */ cmpwi r0, 0x0 -/* 0001CD0C 00029A9C 41 82 CD 1C */ beq .L_00019A28 -/* 0001CD10 00029AA0 55 29 10 3A */ slwi r9, r9, 2 -/* 0001CD14 00029AA4 7C 09 58 2E */ lwzx r0, r9, r11 -/* 0001CD18 00029AA8 7C 0A 59 2E */ stwx r0, r10, r11 -/* 0001CD1C 00029AAC 39 08 00 01 */ addi r8, r8, 0x1 -/* 0001CD20 00029AB0 81 25 00 08 */ lwz r9, 0x8(r5) -/* 0001CD24 00029AB4 48 01 CC E8 */ b .text+0x1CCE8 -/* 0001CD28 00029AB8 7C 1F 48 50 */ subf r0, r31, r9 -/* 0001CD2C 00029ABC 90 05 00 08 */ stw r0, 0x8(r5) -/* 0001CD30 00029AC0 3D 20 00 00 */ lis r9, _vt.Q33UTL3COM8IUnknown@ha -/* 0001CD34 00029AC4 80 7D 00 00 */ lwz r3, 0x0(r29) -/* 0001CD38 00029AC8 39 29 00 00 */ addi r9, r9, _vt.Q33UTL3COM8IUnknown@l -.L_0001CD3C: -/* 0001CD3C 00029ACC 7F A4 EB 78 */ mr r4, r29 -/* 0001CD40 00029AD0 91 3D 00 04 */ stw r9, 0x4(r29) -/* 0001CD44 00029AD4 48 00 00 01 */ bl Remove__Q43UTL3COM6Object6_IListPQ33UTL3COM8IUnknown -/* 0001CD48 00029AD8 73 80 00 01 */ andi. r0, r28, 0x1 -/* 0001CD4C 00029ADC 41 82 CD 58 */ beq .L_00019AA4 -/* 0001CD50 00029AE0 7F A3 EB 78 */ mr r3, r29 -/* 0001CD54 00029AE4 48 00 00 01 */ bl __builtin_delete -/* 0001CD58 00029AE8 80 01 00 24 */ lwz r0, 0x24(r1) -/* 0001CD5C 00029AEC 7C 08 03 A6 */ mtlr r0 -/* 0001CD60 00029AF0 BB 81 00 10 */ lmw r28, 0x10(r1) -/* 0001CD64 00029AF4 38 21 00 20 */ addi r1, r1, 0x20 -/* 0001CD68 00029AF8 4E 80 00 20 */ blr -.endfn _._14IDebugWatchCar - -# .text:0x1CD6C | size: 0x8 -# CDActionDebugWatchCar::GetMover -.fn GetMover__21CDActionDebugWatchCar, global -/* 0001CD6C 00029AFC 80 63 00 2C */ lwz r3, 0x2c(r3) -/* 0001CD70 00029B00 4E 80 00 20 */ blr -.endfn GetMover__21CDActionDebugWatchCar - -# .text:0x1CD74 | size: 0x4 -.fn SetSpecial__21CDActionDebugWatchCarf, global -/* 0001CD74 00029B04 4E 80 00 20 */ blr -.endfn SetSpecial__21CDActionDebugWatchCarf - -# .text:0x1CD78 | size: 0x4 -# CDActionDebugWatchCar::Reset -.fn Reset__21CDActionDebugWatchCar, global -/* 0001CD78 00029B08 4E 80 00 20 */ blr -.endfn Reset__21CDActionDebugWatchCar - -# .text:0x1CD7C | size: 0xB4 -.fn __t8tAverage1Z8bVector3i, global -/* 0001CD7C 00029B0C 94 21 FF E8 */ stwu r1, -0x18(r1) -.L_0001CD80: -/* 0001CD80 00029B10 7C 08 02 A6 */ mflr r0 -/* 0001CD84 00029B14 BF A1 00 0C */ stmw r29, 0xc(r1) -/* 0001CD88 00029B18 90 01 00 1C */ stw r0, 0x1c(r1) -/* 0001CD8C 00029B1C 7C 9E 23 78 */ mr r30, r4 -/* 0001CD90 00029B20 7C 7F 1B 78 */ mr r31, r3 -/* 0001CD94 00029B24 38 80 00 10 */ li r4, 0x10 -.L_0001CD98: -/* 0001CD98 00029B28 7F C5 F3 78 */ mr r5, r30 -/* 0001CD9C 00029B2C 3B BF 00 08 */ addi r29, r31, 0x8 -/* 0001CDA0 00029B30 48 00 00 01 */ bl __11AverageBaseii -/* 0001CDA4 00029B34 3D 20 00 00 */ lis r9, _vt.t8tAverage1Z8bVector3@ha -/* 0001CDA8 00029B38 57 C3 20 36 */ slwi r3, r30, 4 -/* 0001CDAC 00029B3C 39 29 00 00 */ addi r9, r9, _vt.t8tAverage1Z8bVector3@l -/* 0001CDB0 00029B40 91 3F 00 04 */ stw r9, 0x4(r31) -/* 0001CDB4 00029B44 48 00 00 01 */ bl __builtin_vec_new -/* 0001CDB8 00029B48 2C 1E 00 00 */ cmpwi r30, 0x0 -/* 0001CDBC 00029B4C 39 3E FF FF */ subi r9, r30, 0x1 -/* 0001CDC0 00029B50 41 82 CD D0 */ beq .L_00019B90 -/* 0001CDC4 00029B54 2C 09 00 00 */ cmpwi r9, 0x0 -/* 0001CDC8 00029B58 39 29 FF FF */ subi r9, r9, 0x1 -.L_0001CDCC: -/* 0001CDCC 00029B5C 40 82 CD C4 */ bne .L_00019B90 -/* 0001CDD0 00029B60 90 7D 00 00 */ stw r3, 0x0(r29) -/* 0001CDD4 00029B64 57 C5 20 36 */ slwi r5, r30, 4 -/* 0001CDD8 00029B68 38 80 00 00 */ li r4, 0x0 -/* 0001CDDC 00029B6C 80 7F 00 08 */ lwz r3, 0x8(r31) -/* 0001CDE0 00029B70 48 00 00 01 */ bl bMemSet -/* 0001CDE4 00029B74 81 3F 00 08 */ lwz r9, 0x8(r31) -/* 0001CDE8 00029B78 7F E3 FB 78 */ mr r3, r31 -.L_0001CDEC: -/* 0001CDEC 00029B7C C0 09 00 00 */ lfs f0, 0x0(r9) -/* 0001CDF0 00029B80 C1 A9 00 04 */ lfs f13, 0x4(r9) -/* 0001CDF4 00029B84 C1 89 00 08 */ lfs f12, 0x8(r9) -/* 0001CDF8 00029B88 D0 1F 00 1C */ stfs f0, 0x1c(r31) -/* 0001CDFC 00029B8C D1 BF 00 20 */ stfs f13, 0x20(r31) -/* 0001CE00 00029B90 D1 9F 00 24 */ stfs f12, 0x24(r31) -/* 0001CE04 00029B94 C1 69 00 08 */ lfs f11, 0x8(r9) -/* 0001CE08 00029B98 C0 09 00 00 */ lfs f0, 0x0(r9) -/* 0001CE0C 00029B9C C1 A9 00 04 */ lfs f13, 0x4(r9) -/* 0001CE10 00029BA0 D0 1F 00 0C */ stfs f0, 0xc(r31) -/* 0001CE14 00029BA4 D1 BF 00 10 */ stfs f13, 0x10(r31) -/* 0001CE18 00029BA8 D1 7F 00 14 */ stfs f11, 0x14(r31) -/* 0001CE1C 00029BAC 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 0001CE20 00029BB0 7C 08 03 A6 */ mtlr r0 -/* 0001CE24 00029BB4 BB A1 00 0C */ lmw r29, 0xc(r1) -/* 0001CE28 00029BB8 38 21 00 18 */ addi r1, r1, 0x18 -/* 0001CE2C 00029BBC 4E 80 00 20 */ blr -.endfn __t8tAverage1Z8bVector3i - -# .text:0x1CE30 | size: 0x8 -.fn GetValue__t8tAverage1Z8bVector3, global -/* 0001CE30 00029BC0 38 63 00 1C */ addi r3, r3, 0x1c -/* 0001CE34 00029BC4 4E 80 00 20 */ blr -.endfn GetValue__t8tAverage1Z8bVector3 - -# .text:0x1CE38 | size: 0x8 -# SelectCarCameraMover::GetTotalAnimationTime -.fn GetTotalAnimationTime__20SelectCarCameraMover, global -/* 0001CE38 00029BC8 C0 23 01 10 */ lfs f1, 0x110(r3) -/* 0001CE3C 00029BCC 4E 80 00 20 */ blr -.endfn GetTotalAnimationTime__20SelectCarCameraMover - -# .text:0x1CE40 | size: 0x8 -# SelectCarCameraMover::GetCurrentAnimationTime -.fn GetCurrentAnimationTime__20SelectCarCameraMover, global -/* 0001CE40 00029BD0 C0 23 01 0C */ lfs f1, 0x10c(r3) -/* 0001CE44 00029BD4 4E 80 00 20 */ blr -.endfn GetCurrentAnimationTime__20SelectCarCameraMover - -# .text:0x1CE48 | size: 0x8 -# SelectCarCameraMover::GetVAngle -.fn GetVAngle__20SelectCarCameraMover, global -/* 0001CE48 00029BD8 C0 23 00 8C */ lfs f1, 0x8c(r3) -/* 0001CE4C 00029BDC 4E 80 00 20 */ blr -.endfn GetVAngle__20SelectCarCameraMover - -# .text:0x1CE50 | size: 0x8 -# SelectCarCameraMover::GetHAngle -.fn GetHAngle__20SelectCarCameraMover, global -/* 0001CE50 00029BE0 C0 23 00 90 */ lfs f1, 0x90(r3) -/* 0001CE54 00029BE4 4E 80 00 20 */ blr -.endfn GetHAngle__20SelectCarCameraMover - -# .text:0x1CE58 | size: 0x8 -# SelectCarCameraMover::GetZoom -.fn GetZoom__20SelectCarCameraMover, global -/* 0001CE58 00029BE8 C0 23 00 94 */ lfs f1, 0x94(r3) -/* 0001CE5C 00029BEC 4E 80 00 20 */ blr -.endfn GetZoom__20SelectCarCameraMover - -# .text:0x1CE60 | size: 0x80 -.fn _._t8tAverage1Z8bVector3, global -/* 0001CE60 00029BF0 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 0001CE64 00029BF4 7C 08 02 A6 */ mflr r0 -/* 0001CE68 00029BF8 BF C1 00 08 */ stmw r30, 0x8(r1) -/* 0001CE6C 00029BFC 90 01 00 14 */ stw r0, 0x14(r1) -/* 0001CE70 00029C00 7C 7F 1B 78 */ mr r31, r3 -/* 0001CE74 00029C04 7C 9E 23 78 */ mr r30, r4 -/* 0001CE78 00029C08 88 BF 00 01 */ lbz r5, 0x1(r31) -/* 0001CE7C 00029C0C 3D 20 00 00 */ lis r9, _vt.t8tAverage1Z8bVector3@ha -/* 0001CE80 00029C10 39 29 00 00 */ addi r9, r9, _vt.t8tAverage1Z8bVector3@l -/* 0001CE84 00029C14 80 9F 00 08 */ lwz r4, 0x8(r31) -/* 0001CE88 00029C18 91 3F 00 04 */ stw r9, 0x4(r31) -/* 0001CE8C 00029C1C 54 A5 20 36 */ slwi r5, r5, 4 -/* 0001CE90 00029C20 38 C0 00 00 */ li r6, 0x0 -/* 0001CE94 00029C24 48 00 00 01 */ bl DeAllocate__11AverageBasePvUiPCc -/* 0001CE98 00029C28 3D 20 00 00 */ lis r9, _vt.11AverageBase@ha -/* 0001CE9C 00029C2C 73 C0 00 01 */ andi. r0, r30, 0x1 -/* 0001CEA0 00029C30 39 29 00 00 */ addi r9, r9, _vt.11AverageBase@l -/* 0001CEA4 00029C34 91 3F 00 04 */ stw r9, 0x4(r31) -/* 0001CEA8 00029C38 41 82 CE CC */ beq .L_00019D74 -/* 0001CEAC 00029C3C 2C 1F 00 00 */ cmpwi r31, 0x0 -/* 0001CEB0 00029C40 41 82 CE CC */ beq .L_00019D7C -/* 0001CEB4 00029C44 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0001CEB8 00029C48 7F E4 FB 78 */ mr r4, r31 -/* 0001CEBC 00029C4C 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0001CEC0 00029C50 38 A0 00 2C */ li r5, 0x2c -/* 0001CEC4 00029C54 38 C0 00 00 */ li r6, 0x0 -/* 0001CEC8 00029C58 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 0001CECC 00029C5C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 0001CED0 00029C60 7C 08 03 A6 */ mtlr r0 -/* 0001CED4 00029C64 BB C1 00 08 */ lmw r30, 0x8(r1) -/* 0001CED8 00029C68 38 21 00 10 */ addi r1, r1, 0x10 -/* 0001CEDC 00029C6C 4E 80 00 20 */ blr -.endfn _._t8tAverage1Z8bVector3 - -# .text:0x1CEE0 | size: 0xFC -.fn Recalculate__t8tAverage1Z8bVector3, global -/* 0001CEE0 00029C70 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 0001CEE4 00029C74 3D 20 00 00 */ lis r9, .rodata+0x1964@ha -/* 0001CEE8 00029C78 88 03 00 02 */ lbz r0, 0x2(r3) -/* 0001CEEC 00029C7C C0 09 19 64 */ lfs f0, .rodata+0x1964@l(r9) -/* 0001CEF0 00029C80 39 40 00 00 */ li r10, 0x0 -/* 0001CEF4 00029C84 38 E1 00 08 */ addi r7, r1, 0x8 -/* 0001CEF8 00029C88 7C 0A 00 00 */ cmpw r10, r0 -/* 0001CEFC 00029C8C D0 03 00 14 */ stfs f0, 0x14(r3) -/* 0001CF00 00029C90 D0 03 00 0C */ stfs f0, 0xc(r3) -/* 0001CF04 00029C94 D0 03 00 10 */ stfs f0, 0x10(r3) -/* 0001CF08 00029C98 40 80 CF 54 */ bge .L_00019E5C -/* 0001CF0C 00029C9C 81 03 00 08 */ lwz r8, 0x8(r3) -.L_0001CF10: -/* 0001CF10 00029CA0 55 49 20 36 */ slwi r9, r10, 4 -/* 0001CF14 00029CA4 C1 83 00 0C */ lfs f12, 0xc(r3) -/* 0001CF18 00029CA8 7C 09 44 2E */ lfsx f0, r9, r8 -/* 0001CF1C 00029CAC 7D 69 42 14 */ add r11, r9, r8 -/* 0001CF20 00029CB0 C1 4B 00 08 */ lfs f10, 0x8(r11) -/* 0001CF24 00029CB4 39 4A 00 01 */ addi r10, r10, 0x1 -.L_0001CF28: -/* 0001CF28 00029CB8 ED 8C 00 2A */ fadds f12, f12, f0 -/* 0001CF2C 00029CBC C1 6B 00 04 */ lfs f11, 0x4(r11) -/* 0001CF30 00029CC0 C1 A3 00 10 */ lfs f13, 0x10(r3) -/* 0001CF34 00029CC4 7C 0A 00 00 */ cmpw r10, r0 -/* 0001CF38 00029CC8 C0 03 00 14 */ lfs f0, 0x14(r3) -/* 0001CF3C 00029CCC ED AD 58 2A */ fadds f13, f13, f11 -/* 0001CF40 00029CD0 D1 83 00 0C */ stfs f12, 0xc(r3) -/* 0001CF44 00029CD4 EC 00 50 2A */ fadds f0, f0, f10 -/* 0001CF48 00029CD8 D1 A3 00 10 */ stfs f13, 0x10(r3) -/* 0001CF4C 00029CDC D0 03 00 14 */ stfs f0, 0x14(r3) -/* 0001CF50 00029CE0 41 80 CF 10 */ blt .L_00019E60 -/* 0001CF54 00029CE4 88 03 00 02 */ lbz r0, 0x2(r3) -.L_0001CF58: -/* 0001CF58 00029CE8 2C 00 00 01 */ cmpwi r0, 0x1 -/* 0001CF5C 00029CEC 40 80 CF 64 */ bge .L_00019EC0 -/* 0001CF60 00029CF0 38 00 00 01 */ li r0, 0x1 -/* 0001CF64 00029CF4 6C 00 80 00 */ xoris r0, r0, 0x8000 -/* 0001CF68 00029CF8 90 01 00 2C */ stw r0, 0x2c(r1) -/* 0001CF6C 00029CFC 3D 60 43 30 */ lis r11, 0x4330 -/* 0001CF70 00029D00 3D 40 00 00 */ lis r10, .rodata+0x1968@ha -/* 0001CF74 00029D04 3D 00 00 00 */ lis r8, .rodata+0x1970@ha -/* 0001CF78 00029D08 91 61 00 28 */ stw r11, 0x28(r1) -/* 0001CF7C 00029D0C C9 AA 19 68 */ lfd f13, .rodata+0x1968@l(r10) -/* 0001CF80 00029D10 C8 01 00 28 */ lfd f0, 0x28(r1) -/* 0001CF84 00029D14 C1 88 19 70 */ lfs f12, .rodata+0x1970@l(r8) -.L_0001CF88: -/* 0001CF88 00029D18 FC 00 68 28 */ fsub f0, f0, f13 -/* 0001CF8C 00029D1C C1 63 00 0C */ lfs f11, 0xc(r3) -/* 0001CF90 00029D20 FC 00 00 18 */ frsp f0, f0 -.L_0001CF94: -/* 0001CF94 00029D24 C1 43 00 10 */ lfs f10, 0x10(r3) -/* 0001CF98 00029D28 ED 8C 00 24 */ fdivs f12, f12, f0 -/* 0001CF9C 00029D2C C1 A3 00 14 */ lfs f13, 0x14(r3) -/* 0001CFA0 00029D30 ED 6B 03 32 */ fmuls f11, f11, f12 -/* 0001CFA4 00029D34 ED 4A 03 32 */ fmuls f10, f10, f12 -.L_0001CFA8: -/* 0001CFA8 00029D38 D1 61 00 18 */ stfs f11, 0x18(r1) -/* 0001CFAC 00029D3C ED AD 03 32 */ fmuls f13, f13, f12 -/* 0001CFB0 00029D40 D1 41 00 1C */ stfs f10, 0x1c(r1) -.L_0001CFB4: -/* 0001CFB4 00029D44 D1 A1 00 10 */ stfs f13, 0x10(r1) -/* 0001CFB8 00029D48 D1 A1 00 20 */ stfs f13, 0x20(r1) -/* 0001CFBC 00029D4C D1 61 00 08 */ stfs f11, 0x8(r1) -/* 0001CFC0 00029D50 D1 41 00 0C */ stfs f10, 0xc(r1) -/* 0001CFC4 00029D54 D1 63 00 1C */ stfs f11, 0x1c(r3) -/* 0001CFC8 00029D58 C0 07 00 08 */ lfs f0, 0x8(r7) -/* 0001CFCC 00029D5C D1 43 00 20 */ stfs f10, 0x20(r3) -/* 0001CFD0 00029D60 D0 03 00 24 */ stfs f0, 0x24(r3) -/* 0001CFD4 00029D64 38 21 00 30 */ addi r1, r1, 0x30 -/* 0001CFD8 00029D68 4E 80 00 20 */ blr -.endfn Recalculate__t8tAverage1Z8bVector3 - -# .text:0x1CFDC | size: 0x4C -# TableBase::CalcIndexMultiplier -.fn CalcIndexMultiplier__9TableBase, weak -/* 0001CFDC 00029D6C 94 21 FF F0 */ stwu r1, -0x10(r1) -.L_0001CFE0: -/* 0001CFE0 00029D70 81 23 00 00 */ lwz r9, 0x0(r3) -/* 0001CFE4 00029D74 C0 03 00 04 */ lfs f0, 0x4(r3) -/* 0001CFE8 00029D78 3C 00 43 30 */ lis r0, 0x4330 -/* 0001CFEC 00029D7C 39 29 FF FF */ subi r9, r9, 0x1 -/* 0001CFF0 00029D80 C1 A3 00 08 */ lfs f13, 0x8(r3) -/* 0001CFF4 00029D84 6D 29 80 00 */ xoris r9, r9, 0x8000 -/* 0001CFF8 00029D88 3D 40 00 00 */ lis r10, .rodata+0x1A28@ha -/* 0001CFFC 00029D8C 91 21 00 0C */ stw r9, 0xc(r1) -/* 0001D000 00029D90 ED AD 00 28 */ fsubs f13, f13, f0 -/* 0001D004 00029D94 C9 8A 1A 28 */ lfd f12, .rodata+0x1A28@l(r10) -/* 0001D008 00029D98 90 01 00 08 */ stw r0, 0x8(r1) -/* 0001D00C 00029D9C C8 01 00 08 */ lfd f0, 0x8(r1) -/* 0001D010 00029DA0 FC 00 60 28 */ fsub f0, f0, f12 -/* 0001D014 00029DA4 FC 00 00 18 */ frsp f0, f0 -/* 0001D018 00029DA8 EC 00 68 24 */ fdivs f0, f0, f13 -/* 0001D01C 00029DAC D0 03 00 0C */ stfs f0, 0xc(r3) -/* 0001D020 00029DB0 38 21 00 10 */ addi r1, r1, 0x10 -/* 0001D024 00029DB4 4E 80 00 20 */ blr -.endfn CalcIndexMultiplier__9TableBase - -# .text:0x1D028 | size: 0x54 -.fn _._11AverageBase, weak -/* 0001D028 00029DB8 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0001D02C 00029DBC 7C 08 02 A6 */ mflr r0 -.L_0001D030: -/* 0001D030 00029DC0 90 01 00 0C */ stw r0, 0xc(r1) -/* 0001D034 00029DC4 3D 20 00 00 */ lis r9, _vt.11AverageBase@ha -/* 0001D038 00029DC8 7C 6B 1B 78 */ mr r11, r3 -/* 0001D03C 00029DCC 39 29 00 00 */ addi r9, r9, _vt.11AverageBase@l -/* 0001D040 00029DD0 70 80 00 01 */ andi. r0, r4, 0x1 -/* 0001D044 00029DD4 91 2B 00 04 */ stw r9, 0x4(r11) -/* 0001D048 00029DD8 41 82 D0 6C */ beq .L_0001A0B4 -/* 0001D04C 00029DDC 2C 0B 00 00 */ cmpwi r11, 0x0 -/* 0001D050 00029DE0 41 82 D0 6C */ beq .L_0001A0BC -/* 0001D054 00029DE4 3C 60 00 00 */ lis r3, gFastMem@ha -/* 0001D058 00029DE8 7D 64 5B 78 */ mr r4, r11 -/* 0001D05C 00029DEC 38 63 00 00 */ addi r3, r3, gFastMem@l -/* 0001D060 00029DF0 38 A0 00 08 */ li r5, 0x8 -/* 0001D064 00029DF4 38 C0 00 00 */ li r6, 0x0 -.L_0001D068: -/* 0001D068 00029DF8 48 00 00 01 */ bl Free__7FastMemPvUiPCc -/* 0001D06C 00029DFC 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0001D070 00029E00 7C 08 03 A6 */ mtlr r0 -/* 0001D074 00029E04 38 21 00 08 */ addi r1, r1, 0x8 -/* 0001D078 00029E08 4E 80 00 20 */ blr -.endfn _._11AverageBase - -# .text:0x1D07C | size: 0x4 -# AverageBase::Recalculate -.fn Recalculate__11AverageBase, weak -/* 0001D07C 00029E0C 4E 80 00 20 */ blr -.endfn Recalculate__11AverageBase - -# .text:0x1D080 | size: 0x4 -.fn OnGrowRequest__Q23UTLt6Vector2ZPQ28CameraAI8Directori16Ui, weak -/* 0001D080 00029E10 4E 80 00 20 */ blr -.endfn OnGrowRequest__Q23UTLt6Vector2ZPQ28CameraAI8Directori16Ui - -# .text:0x1D084 | size: 0xB4 -.fn _._Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16, weak -/* 0001D084 00029E14 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 0001D088 00029E18 7C 08 02 A6 */ mflr r0 -/* 0001D08C 00029E1C BF C1 00 08 */ stmw r30, 0x8(r1) -/* 0001D090 00029E20 90 01 00 14 */ stw r0, 0x14(r1) -/* 0001D094 00029E24 7C 7F 1B 78 */ mr r31, r3 -/* 0001D098 00029E28 3D 20 00 00 */ lis r9, _vt.Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16@ha -/* 0001D09C 00029E2C 80 1F 00 08 */ lwz r0, 0x8(r31) -/* 0001D0A0 00029E30 39 29 00 00 */ addi r9, r9, _vt.Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16@l -/* 0001D0A4 00029E34 39 60 00 00 */ li r11, 0x0 -/* 0001D0A8 00029E38 7C 9E 23 78 */ mr r30, r4 -/* 0001D0AC 00029E3C 91 3F 00 0C */ stw r9, 0xc(r31) -/* 0001D0B0 00029E40 7C 0B 00 00 */ cmpw r11, r0 -/* 0001D0B4 00029E44 40 80 D0 D0 */ bge .L_0001A184 -/* 0001D0B8 00029E48 7C 09 03 78 */ mr r9, r0 -/* 0001D0BC 00029E4C 39 6B 00 01 */ addi r11, r11, 0x1 -/* 0001D0C0 00029E50 39 29 FF FF */ subi r9, r9, 0x1 -/* 0001D0C4 00029E54 7C 0B 00 00 */ cmpw r11, r0 -/* 0001D0C8 00029E58 41 80 D0 BC */ blt .L_0001A184 -/* 0001D0CC 00029E5C 91 3F 00 08 */ stw r9, 0x8(r31) -/* 0001D0D0 00029E60 80 9F 00 00 */ lwz r4, 0x0(r31) -/* 0001D0D4 00029E64 2C 04 00 00 */ cmpwi r4, 0x0 -/* 0001D0D8 00029E68 41 82 D1 08 */ beq .L_0001A1E0 -/* 0001D0DC 00029E6C 81 3F 00 0C */ lwz r9, 0xc(r31) -/* 0001D0E0 00029E70 80 BF 00 04 */ lwz r5, 0x4(r31) -/* 0001D0E4 00029E74 80 09 00 1C */ lwz r0, 0x1c(r9) -/* 0001D0E8 00029E78 A8 69 00 18 */ lha r3, 0x18(r9) -/* 0001D0EC 00029E7C 7C 08 03 A6 */ mtlr r0 -/* 0001D0F0 00029E80 7C 7F 1A 14 */ add r3, r31, r3 -/* 0001D0F4 00029E84 4E 80 00 21 */ blrl -/* 0001D0F8 00029E88 38 00 00 00 */ li r0, 0x0 -/* 0001D0FC 00029E8C 90 1F 00 08 */ stw r0, 0x8(r31) -/* 0001D100 00029E90 90 1F 00 00 */ stw r0, 0x0(r31) -/* 0001D104 00029E94 90 1F 00 04 */ stw r0, 0x4(r31) -/* 0001D108 00029E98 3D 20 00 00 */ lis r9, _vt.Q23UTLt6Vector2ZPQ28CameraAI8Directori16@ha -/* 0001D10C 00029E9C 73 C0 00 01 */ andi. r0, r30, 0x1 -/* 0001D110 00029EA0 39 29 00 00 */ addi r9, r9, _vt.Q23UTLt6Vector2ZPQ28CameraAI8Directori16@l -/* 0001D114 00029EA4 91 3F 00 0C */ stw r9, 0xc(r31) -/* 0001D118 00029EA8 41 82 D1 24 */ beq .L_0001A23C -/* 0001D11C 00029EAC 7F E3 FB 78 */ mr r3, r31 -/* 0001D120 00029EB0 48 00 00 01 */ bl __builtin_delete -/* 0001D124 00029EB4 80 01 00 14 */ lwz r0, 0x14(r1) -/* 0001D128 00029EB8 7C 08 03 A6 */ mtlr r0 -/* 0001D12C 00029EBC BB C1 00 08 */ lmw r30, 0x8(r1) -/* 0001D130 00029EC0 38 21 00 10 */ addi r1, r1, 0x10 -/* 0001D134 00029EC4 4E 80 00 20 */ blr -.endfn _._Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16 - -# .text:0x1D138 | size: 0x8 -.fn AllocVectorSpace__Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16UiUi, weak -/* 0001D138 00029EC8 38 63 00 10 */ addi r3, r3, 0x10 -/* 0001D13C 00029ECC 4E 80 00 20 */ blr -.endfn AllocVectorSpace__Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16UiUi - -# .text:0x1D140 | size: 0x4 -.fn FreeVectorSpace__Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16PPQ28CameraAI8DirectorUi, weak -/* 0001D140 00029ED0 4E 80 00 20 */ blr -.endfn FreeVectorSpace__Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16PPQ28CameraAI8DirectorUi - -# .text:0x1D144 | size: 0x8 -.fn GetGrowSize__CQ23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16Ui, weak -/* 0001D144 00029ED4 38 60 00 02 */ li r3, 0x2 -/* 0001D148 00029ED8 4E 80 00 20 */ blr -.endfn GetGrowSize__CQ23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16Ui - -# .text:0x1D14C | size: 0x8 -.fn GetMaxCapacity__CQ23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16, weak -/* 0001D14C 00029EDC 38 60 00 02 */ li r3, 0x2 -/* 0001D150 00029EE0 4E 80 00 20 */ blr -.endfn GetMaxCapacity__CQ23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16 - -# .text:0x1D154 | size: 0x20 -.fn GetGrowSize__CQ23UTLt6Vector2ZPQ28CameraAI8Directori16Ui, weak -/* 0001D154 00029EE4 81 23 00 04 */ lwz r9, 0x4(r3) -/* 0001D158 00029EE8 38 09 00 01 */ addi r0, r9, 0x1 -/* 0001D15C 00029EEC 54 00 F8 7E */ srwi r0, r0, 1 -/* 0001D160 00029EF0 7C 69 02 14 */ add r3, r9, r0 -/* 0001D164 00029EF4 7C 03 20 40 */ cmplw r3, r4 -/* 0001D168 00029EF8 4C 80 00 20 */ bgelr -/* 0001D16C 00029EFC 7C 83 23 78 */ mr r3, r4 -/* 0001D170 00029F00 4E 80 00 20 */ blr -.endfn GetGrowSize__CQ23UTLt6Vector2ZPQ28CameraAI8Directori16Ui - -# .text:0x1D174 | size: 0x8 -.fn AllocVectorSpace__Q23UTLt6Vector2ZPQ28CameraAI8Directori16UiUi, weak -/* 0001D174 00029F04 38 60 00 00 */ li r3, 0x0 -/* 0001D178 00029F08 4E 80 00 20 */ blr -.endfn AllocVectorSpace__Q23UTLt6Vector2ZPQ28CameraAI8Directori16UiUi - -# .text:0x1D17C | size: 0x4 -.fn FreeVectorSpace__Q23UTLt6Vector2ZPQ28CameraAI8Directori16PPQ28CameraAI8DirectorUi, weak -/* 0001D17C 00029F0C 4E 80 00 20 */ blr -.endfn FreeVectorSpace__Q23UTLt6Vector2ZPQ28CameraAI8Directori16PPQ28CameraAI8DirectorUi - -# .text:0x1D180 | size: 0x34 -.fn _._Q23UTLt6Vector2ZPQ28CameraAI8Directori16, weak -/* 0001D180 00029F10 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0001D184 00029F14 7C 08 02 A6 */ mflr r0 -/* 0001D188 00029F18 90 01 00 0C */ stw r0, 0xc(r1) -/* 0001D18C 00029F1C 3D 20 00 00 */ lis r9, _vt.Q23UTLt6Vector2ZPQ28CameraAI8Directori16@ha -/* 0001D190 00029F20 70 80 00 01 */ andi. r0, r4, 0x1 -/* 0001D194 00029F24 39 29 00 00 */ addi r9, r9, _vt.Q23UTLt6Vector2ZPQ28CameraAI8Directori16@l -/* 0001D198 00029F28 91 23 00 0C */ stw r9, 0xc(r3) -/* 0001D19C 00029F2C 41 82 D1 A4 */ beq .L_0001A340 -/* 0001D1A0 00029F30 48 00 00 01 */ bl __builtin_delete -/* 0001D1A4 00029F34 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0001D1A8 00029F38 7C 08 03 A6 */ mtlr r0 -/* 0001D1AC 00029F3C 38 21 00 08 */ addi r1, r1, 0x8 -/* 0001D1B0 00029F40 4E 80 00 20 */ blr -.endfn _._Q23UTLt6Vector2ZPQ28CameraAI8Directori16 - -# .text:0x1D1B4 | size: 0xC -.fn GetMaxCapacity__CQ23UTLt6Vector2ZPQ28CameraAI8Directori16, weak -/* 0001D1B4 00029F44 3C 60 7F FF */ lis r3, 0x7fff -/* 0001D1B8 00029F48 60 63 FF FF */ ori r3, r3, 0xffff -/* 0001D1BC 00029F4C 4E 80 00 20 */ blr -.endfn GetMaxCapacity__CQ23UTLt6Vector2ZPQ28CameraAI8Directori16 - -# .text:0x1D1C0 | size: 0x2C -# Camera::_GLOBAL_.I. -.fn _GLOBAL_.I.__6Camera, local -/* 0001D1C0 00029F50 94 21 FF F8 */ stwu r1, -0x8(r1) -/* 0001D1C4 00029F54 7C 08 02 A6 */ mflr r0 -/* 0001D1C8 00029F58 90 01 00 0C */ stw r0, 0xc(r1) -/* 0001D1CC 00029F5C 38 80 00 00 */ li r4, 0x0 -/* 0001D1D0 00029F60 38 60 00 01 */ li r3, 0x1 -/* 0001D1D4 00029F64 60 84 FF FF */ ori r4, r4, 0xffff -/* 0001D1D8 00029F68 48 01 B9 89 */ bl .text+0x1B988 -/* 0001D1DC 00029F6C 80 01 00 0C */ lwz r0, 0xc(r1) -/* 0001D1E0 00029F70 7C 08 03 A6 */ mtlr r0 -/* 0001D1E4 00029F74 38 21 00 08 */ addi r1, r1, 0x8 -/* 0001D1E8 00029F78 4E 80 00 20 */ blr -.endfn _GLOBAL_.I.__6Camera - -# 0x00000000..0x00001A70 | size: 0x1A70 -.rodata -.balign 8 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0xBF800000 - .4byte 0x42C80000 - .4byte 0x44960000 - .4byte 0x41200000 - .4byte 0x3F000000 - .4byte 0x461C4000 - .4byte 0x00000000 - .4byte 0x43300000 - .4byte 0x80000000 - .4byte 0x30800000 - .4byte 0x3F800000 - .4byte 0x43300000 - .4byte 0x80000000 - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x3F000000 - .4byte 0x4A523253 - .4byte 0x65727665 - .4byte 0x72000000 - .4byte 0x42C80000 - .4byte 0x3F800000 - .4byte 0x3C23D70A - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x43300000 - .4byte 0x00000000 - .4byte 0x47800000 - .4byte 0x6261645F - .4byte 0x616C6C6F - .4byte 0x63000000 - .4byte 0x76656374 - .4byte 0x6F720000 - .4byte 0x6C697374 - .4byte 0x00000000 - .4byte 0x6D617000 - .4byte 0x73657400 - .4byte 0x55436F6D - .4byte 0x4F626A65 - .4byte 0x63740000 - .4byte 0x41747472 - .4byte 0x69623A3A - .4byte 0x436F6C6C - .4byte 0x65637469 - .4byte 0x6F6E4861 - .4byte 0x73684D61 - .4byte 0x70000000 - .4byte 0x41747472 - .4byte 0x69623A3A - .4byte 0x44617461 - .4byte 0x62617365 - .4byte 0x00000000 - .4byte 0x41747472 - .4byte 0x69623A3A - .4byte 0x41727261 - .4byte 0x79000000 - .4byte 0x41747472 - .4byte 0x69623A3A - .4byte 0x436C6173 - .4byte 0x73000000 - .4byte 0x52656653 - .4byte 0x70656300 - .4byte 0x41747472 - .4byte 0x69623A3A - .4byte 0x41747472 - .4byte 0x69627574 - .4byte 0x65000000 - .4byte 0x41747472 - .4byte 0x69623A3A - .4byte 0x496E7374 - .4byte 0x616E6365 - .4byte 0x00000000 - .4byte 0x41747472 - .4byte 0x69623A3A - .4byte 0x48617368 - .4byte 0x4D617054 - .4byte 0x61626C65 - .4byte 0x00000000 - .4byte 0x41747472 - .4byte 0x69623A3A - .4byte 0x48617368 - .4byte 0x4D617000 - .4byte 0x41747472 - .4byte 0x69623A3A - .4byte 0x4578706F - .4byte 0x72744D61 - .4byte 0x6E616765 - .4byte 0x72000000 - .4byte 0x41747472 - .4byte 0x69623A3A - .4byte 0x5661756C - .4byte 0x74000000 - .4byte 0x41747472 - .4byte 0x69623A3A - .4byte 0x436F6C6C - .4byte 0x65637469 - .4byte 0x6F6E0000 - .4byte 0x41747472 - .4byte 0x69623A3A - .4byte 0x436C6173 - .4byte 0x73507269 - .4byte 0x76617465 - .4byte 0x00000000 - .4byte 0x41747472 - .4byte 0x69623A3A - .4byte 0x436C6173 - .4byte 0x73546162 - .4byte 0x6C650000 - .4byte 0x53544C00 - .4byte 0x41747472 - .4byte 0x69623A3A - .4byte 0x44617461 - .4byte 0x62617365 - .4byte 0x50726976 - .4byte 0x61746500 - .4byte 0x63616D65 - .4byte 0x7261696E - .4byte 0x666F0000 - .4byte 0x65636172 - .4byte 0x00000000 - .4byte 0x73696D73 - .4byte 0x75726661 - .4byte 0x63650000 - .4byte 0x57436F6C - .4byte 0x6C697369 - .4byte 0x6F6E5761 - .4byte 0x726E5665 - .4byte 0x63746F72 - .4byte 0x00000000 - .4byte 0x57436F6C - .4byte 0x6C697369 - .4byte 0x6F6E5665 - .4byte 0x63746F72 - .4byte 0x00000000 - .4byte 0x55436F6E - .4byte 0x7461696E - .4byte 0x65720000 - .4byte 0x53757370 - .4byte 0x656E7369 - .4byte 0x6F6E5061 - .4byte 0x72616D73 - .4byte 0x00000000 - .4byte 0x49417474 - .4byte 0x61636861 - .4byte 0x626C654C - .4byte 0x69737400 - .4byte 0x70766568 - .4byte 0x69636C65 - .4byte 0x00000000 - .4byte 0x63686173 - .4byte 0x73697300 - .4byte 0x656E6769 - .4byte 0x6E650000 - .4byte 0x696E6475 - .4byte 0x6374696F - .4byte 0x6E000000 - .4byte 0x6E6F7300 - .4byte 0x74697265 - .4byte 0x73000000 - .4byte 0x7472616E - .4byte 0x736D6973 - .4byte 0x73696F6E - .4byte 0x00000000 - .4byte 0x41494176 - .4byte 0x6F696461 - .4byte 0x626C654E - .4byte 0x65696768 - .4byte 0x626F7273 - .4byte 0x00000000 - .4byte 0x67616D65 - .4byte 0x706C6179 - .4byte 0x00000000 - .4byte 0x49445F47 - .4byte 0x43686172 - .4byte 0x61637465 - .4byte 0x724C6973 - .4byte 0x74000000 - .4byte 0x656D6974 - .4byte 0x74657264 - .4byte 0x61746100 - .4byte 0x656D6974 - .4byte 0x74657267 - .4byte 0x726F7570 - .4byte 0x00000000 - .4byte 0x49445F47 - .4byte 0x52616365 - .4byte 0x53746174 - .4byte 0x75735472 - .4byte 0x69676765 - .4byte 0x724C6973 - .4byte 0x74000000 - .4byte 0x61697665 - .4byte 0x6869636C - .4byte 0x65000000 - .4byte 0x70757273 - .4byte 0x75697465 - .4byte 0x7363616C - .4byte 0x6174696F - .4byte 0x6E000000 - .4byte 0x70757273 - .4byte 0x7569746C - .4byte 0x6576656C - .4byte 0x73000000 - .4byte 0x70757273 - .4byte 0x75697473 - .4byte 0x7570706F - .4byte 0x72740000 - .4byte 0x49526F61 - .4byte 0x64426C6F - .4byte 0x636B5665 - .4byte 0x6869636C - .4byte 0x65730000 - .4byte 0x49526F61 - .4byte 0x64426C6F - .4byte 0x636B536D - .4byte 0x61636B61 - .4byte 0x626C6573 - .4byte 0x00000000 - .4byte 0x49445F47 - .4byte 0x48616E64 - .4byte 0x6C657256 - .4byte 0x6563746F - .4byte 0x72000000 - .4byte 0x49445F53 - .4byte 0x74617465 - .4byte 0x546F5665 - .4byte 0x63746F72 - .4byte 0x73000000 - .4byte 0x49445F53 - .4byte 0x746F636B - .4byte 0x4361724D - .4byte 0x61700000 - .4byte 0x49445F4D - .4byte 0x696C6573 - .4byte 0x746F6E65 - .4byte 0x496E666F - .4byte 0x4D617000 - .4byte 0x49445F50 - .4byte 0x656E6469 - .4byte 0x6E67534D - .4byte 0x534C6973 - .4byte 0x74000000 - .4byte 0x49445F4F - .4byte 0x626A6563 - .4byte 0x74537461 - .4byte 0x74654D61 - .4byte 0x70000000 - .4byte 0x49445F41 - .4byte 0x74747269 - .4byte 0x624B6579 - .4byte 0x4C697374 - .4byte 0x00000000 - .4byte 0x4541474C - .4byte 0x343A3A53 - .4byte 0x796D626F - .4byte 0x6C456E74 - .4byte 0x72790000 - .4byte 0x43616D65 - .4byte 0x72614149 - .4byte 0x41766F69 - .4byte 0x6461626C - .4byte 0x65730000 - .4byte 0x00000000 - .4byte 0x43300000 - .4byte 0x80000000 - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x43300000 - .4byte 0x80000000 - .4byte 0x3F800000 - .4byte 0x3F800000 - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x47800000 - .4byte 0x3F800000 - .4byte 0x47800000 - .4byte 0x00000000 - .4byte 0x2E5BE6FF - .4byte 0x3F000000 - .4byte 0x3F800000 - .4byte 0x43480000 - .4byte 0x506C6179 - .4byte 0x65723143 - .4byte 0x616D6572 - .4byte 0x61000000 - .4byte 0x3C23D70A - .4byte 0x42C80000 - .4byte 0x00000000 - .4byte 0x2E5BE6FF - .4byte 0x3CCCCCCD - .4byte 0x00000000 - .4byte 0x463B8000 - .4byte 0x3F000000 - .4byte 0x00000000 - .4byte 0x3DCCCCCD - .4byte 0x3F333333 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x43300000 - .4byte 0x00000000 - .4byte 0x43360B61 - .4byte 0x3BB60B61 - .4byte 0x3F800000 - .4byte 0x2E5BE6FF - .4byte 0x3F000000 - .4byte 0x3DCCCCCD - .4byte 0x3ED9999A - .4byte 0xBF000000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x43300000 - .4byte 0x80000000 - .4byte 0x3983126F - .4byte 0x00000000 - .4byte 0x2E5BE6FF - .4byte 0x3F000000 - .4byte 0x3F800000 - .4byte 0x42C80000 - .4byte 0x3C23D70A - .4byte 0x00000000 - .4byte 0x43300000 - .4byte 0x80000000 - .4byte 0x3983126F - .4byte 0x00000000 - .4byte 0x3D4CCCCD - .4byte 0x3E800000 - .4byte 0x3F000000 - .4byte 0x3F400000 - .4byte 0x3F800000 - .4byte 0x3FC00000 - .4byte 0x43300000 - .4byte 0x80000000 - .4byte 0x3983126F - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x3F59999A - .4byte 0x2E5BE6FF - .4byte 0x3F000000 - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x42C80000 - .4byte 0x461C4000 - .4byte 0x3F000000 - .4byte 0x447A0000 - .4byte 0x3F800000 - .4byte 0x40A00000 - .4byte 0x3DCCCCCD - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x2E5BE6FF - .4byte 0x3F000000 - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x3F666666 - .4byte 0x3F000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x43300000 - .4byte 0x00000000 - .4byte 0x3D088889 - .4byte 0x3D088889 - .4byte 0x00000000 - .4byte 0x3D088889 - .4byte 0x00000000 - .4byte 0x3F333333 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0xC0000000 - .4byte 0x3F800000 - .4byte 0x43300000 - .4byte 0x80000000 - .4byte 0x3983126F - .4byte 0x3F000000 - .4byte 0xC1F00000 - .4byte 0x41F00000 - .4byte 0x43300000 - .4byte 0x80000000 - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x43300000 - .4byte 0x80000000 - .4byte 0x3F800000 - .4byte 0x3F800000 - .4byte 0x3F000000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0xC0400000 - .4byte 0x40400000 - .4byte 0xBF800000 - .4byte 0x00000000 - .4byte 0xC0C00000 - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x2E5BE6FF - .4byte 0x3F000000 - .4byte 0x3DCCCCCD - .4byte 0x40000000 - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x461C4000 - .4byte 0x43300000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x40000000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x3E800000 - .4byte 0x47800000 - .4byte 0x3DCCCCCD - .4byte 0x40000000 - .4byte 0x49445F48 - .4byte 0x65726D65 - .4byte 0x7348616E - .4byte 0x646C6572 - .4byte 0x56656374 - .4byte 0x6F720000 - .4byte 0x544F444F - .4byte 0x00000000 - .4byte 0x4D47616D - .4byte 0x65506C61 - .4byte 0x794D6F6D - .4byte 0x656E7400 - .4byte 0x4D494345 - .4byte 0x43616D65 - .4byte 0x72614669 - .4byte 0x6E697368 - .4byte 0x65640000 - .4byte 0x4D4D6973 - .4byte 0x63536F75 - .4byte 0x6E640000 - .4byte 0x636F704D - .4byte 0x61700000 - .4byte 0x636F704C - .4byte 0x69737400 - .4byte 0x766F6963 - .4byte 0x65494473 - .4byte 0x00000000 - .4byte 0x73706565 - .4byte 0x63687475 - .4byte 0x6E650000 - .4byte 0x4D556E73 - .4byte 0x7061776E - .4byte 0x436F7000 - .4byte 0x49566568 - .4byte 0x69636C65 - .4byte 0x50747273 - .4byte 0x00000000 - .4byte 0x43414D45 - .4byte 0x52410000 - .4byte 0x00000000 - .4byte 0x44524956 - .4byte 0x45000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x54524143 - .4byte 0x4B5F434F - .4byte 0x50000000 - .4byte 0x4A554D50 - .4byte 0x00000000 - .4byte 0x4D6F6D65 - .4byte 0x6E745374 - .4byte 0x726D0000 - .4byte 0x49434500 - .4byte 0x43616D65 - .4byte 0x72614669 - .4byte 0x6E697368 - .4byte 0x65640000 - .4byte 0x00000000 - .4byte 0x40A00000 - .4byte 0x544F5441 - .4byte 0x4C454400 - .4byte 0x00000000 - .4byte 0x706C6179 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x40A00000 - .4byte 0x40400000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x3F000000 - .4byte 0x3E800000 - .4byte 0x40A00000 - .4byte 0x00000000 - .4byte 0x43300000 - .4byte 0x80000000 - .4byte 0x40A00000 - .4byte 0x43444163 - .4byte 0x74696F6E - .4byte 0x54726163 - .4byte 0x6B436172 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x41200000 - .4byte 0x40400000 - .4byte 0x41A0CCCD - .4byte 0x40466666 - .4byte 0x3F800000 - .4byte 0x40800000 - .4byte 0x4D4A756D - .4byte 0x70437574 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x0000FFFF - .4byte MessageJumpCut__13CDActionDriveRC8MJumpCut - .4byte 0x43616D65 - .4byte 0x72610000 - .4byte 0x00000000 - .4byte 0x40000000 - .4byte 0x3F800000 - .4byte 0x3E99999A - .4byte 0x3DCCCCCD - .4byte 0x00000000 - .4byte 0x41A00000 - .4byte 0x3C23D70A - .4byte 0x3F800000 - .4byte 0x40A00000 - .4byte 0x3CCCCCCD - .4byte 0x40400000 - .4byte 0x3D4CCCCD - .4byte 0x00000000 - .4byte 0x40400000 - .4byte 0x2E5BE6FF - .4byte 0x3F000000 - .4byte 0x3F800000 - .4byte 0xBF000000 - .4byte 0x41200000 - .4byte 0x3E800000 - .4byte 0x3A83126F - .4byte 0x40200000 - .4byte 0x3F666666 - .4byte 0x3F400000 - .4byte 0x43FA0000 - .4byte 0x43B40000 - .4byte 0x40A00000 - .4byte 0x42340000 - .4byte 0x3DCCCCCD - .4byte 0x41A00000 - .4byte 0x54524143 - .4byte 0x4B434152 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x54524143 - .4byte 0x4B434F50 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x53484F57 - .4byte 0x43415345 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x44454255 - .4byte 0x47000000 - .4byte 0x44656275 - .4byte 0x67576F72 - .4byte 0x6C640000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x43444163 - .4byte 0x74696F6E - .4byte 0x49636500 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x44454255 - .4byte 0x47574154 - .4byte 0x43484341 - .4byte 0x52000000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x3F800000 - .4byte 0x7372632F - .4byte 0x53706565 - .4byte 0x642F496E - .4byte 0x6465702F - .4byte 0x5372632F - .4byte 0x43616D65 - .4byte 0x72612F4D - .4byte 0x6F766572 - .4byte 0x732F4375 - .4byte 0x6269632E - .4byte 0x63707000 - .4byte 0x7372632F - .4byte 0x53706565 - .4byte 0x642F496E - .4byte 0x6465702F - .4byte 0x5372632F - .4byte 0x4D697363 - .4byte 0x2F546162 - .4byte 0x6C652E68 - .4byte 0x70700000 - .4byte 0x00000000 - .4byte 0x43300000 - .4byte 0x80000000 - .4byte 0x3F800000 - .4byte 0x2E5BE6FF - .4byte 0x3F000000 - .4byte 0x42480000 - .4byte 0xBF666666 - .4byte 0x00000000 - .4byte 0x3F000000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x3E800000 - .4byte 0x3DCCCCCD - .4byte 0x00000000 - .4byte 0x43300000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x3BA3D70A - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x43300000 - .4byte 0x80000000 - .4byte 0x3DCCCCCD - .4byte 0x42200000 - .4byte 0x42C80000 - .4byte 0xBF800000 - .4byte 0x3A83126F - .4byte 0x3983126F - .4byte 0x3ECCCCCD - .4byte 0x3C23D70A - .4byte 0x3F000000 - .4byte 0x40000000 - .4byte 0x40400000 - .4byte 0x3D4CCCCD - .4byte 0x2E5BE6FF - .4byte 0x3F000000 - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x41F00000 - .4byte 0x00000000 - .4byte 0x40800000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x40A00000 - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x43300000 - .4byte 0x80000000 - .4byte 0x3F000000 - .4byte 0x40490FDB - .4byte 0x47800000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x47800000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x47800000 - .4byte 0x40400000 - .4byte 0x47800000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x40400000 - .4byte 0x40800000 - .4byte 0x40A00000 - .4byte 0x40C00000 - .4byte 0x00000000 - .4byte 0x42C80000 - .4byte 0x3F800000 - .4byte 0x47800000 - .4byte 0x00000000 - .4byte 0x43300000 - .4byte 0x80000000 - .4byte 0x2E5BE6FF - .4byte 0x3F000000 - .4byte 0x00000000 - .4byte 0x3A83126F - .4byte 0x00000000 - .4byte 0x3A83126F - .4byte 0x417F5C29 - .4byte 0x00000000 - .4byte 0x38D1B717 - .4byte 0x417F5C29 - .4byte 0x417F5C29 - .4byte 0x3C23D70A - .4byte 0x43300000 - .4byte 0x80000000 - .4byte 0x42C80000 - .4byte 0x3F800000 - .4byte 0x3F8FACD6 - .4byte 0x3FA14518 - .4byte 0x3FB504F3 - .4byte 0x3FCB2FF5 - .4byte 0x3FE411F0 - .4byte 0x40000000 - .4byte 0x400FACD6 - .4byte 0x40214518 - .4byte 0x403504F3 - .4byte 0x404B2FF5 - .4byte 0x406411F0 - .4byte 0x40800000 - .4byte 0x408FACD6 - .4byte 0x40A14518 - .4byte 0x40B504F3 - .4byte 0x40CB2FF5 - .4byte 0x40E411F0 - .4byte 0x41000000 - .4byte 0x410FACD6 - .4byte 0x41214518 - .4byte 0x413504F3 - .4byte 0x414B2FF5 - .4byte 0x416411F0 - .4byte 0x41800000 - .4byte 0x418FACD6 - .4byte 0x41A14518 - .4byte 0x41B504F3 - .4byte 0x41CB2FF5 - .4byte 0x41E411F0 - .4byte 0x42000000 - .4byte 0x420FACD6 - .4byte 0x42214518 - .4byte 0x423504F3 - .4byte 0x424B2FF5 - .4byte 0x426411F0 - .4byte 0x42800000 - .4byte 0x3F000000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x7372632F - .4byte 0x53706565 - .4byte 0x642F496E - .4byte 0x6465702F - .4byte 0x5372632F - .4byte 0x43616D65 - .4byte 0x72612F49 - .4byte 0x43452F49 - .4byte 0x43454D6F - .4byte 0x7665722E - .4byte 0x63707000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x2E5BE6FF - .4byte 0x3F000000 - .4byte 0x3F800000 - .4byte 0x43960000 - .4byte 0x40400000 - .4byte 0x40400000 - .4byte 0x40C00000 - .4byte 0x3F800000 - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x3E2AAAAB - .4byte 0x3F000000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x3D088889 - .4byte 0x00000000 - .4byte 0x3D088889 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x43300000 - .4byte 0x80000000 - .4byte 0x3D088889 - .4byte 0x3F000000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x43300000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x3F800000 - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x43300000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x38D1B717 - .4byte 0x3F800000 - .4byte 0x41F00000 - .4byte 0x41200000 - .4byte 0x3C23D70A - .4byte 0x47800000 - .4byte 0x2E5BE6FF - .4byte 0x3F000000 - .4byte 0x42140000 - .4byte 0x42C80000 - .4byte 0x3CF5C28F - .4byte 0x461C4000 - .4byte 0x3A83126F - .4byte 0x00000000 - .4byte 0x3E800000 - .4byte 0x3F000000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x40400000 - .4byte 0x3FC00000 - .4byte 0x40A00000 - .4byte 0x00000000 - .4byte 0x41200000 - .4byte 0x3F333333 - .4byte 0x3E99999A - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x40A00000 - .4byte 0x41A00000 - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0xC1200000 - .4byte 0x41A00000 - .4byte 0x00000000 - .4byte 0x3DCCCCCD - .4byte 0x3F800000 - .4byte 0xBF800000 - .4byte 0x453B8000 - .4byte 0x412FFFF5 - .4byte 0x40800000 - .4byte 0x00000000 - .4byte 0x43B40000 - .4byte 0x40A00000 - .4byte 0x3CCCCCCD - .4byte 0x3DCCCCCD - .4byte 0x3F800000 - .4byte 0x00000000 -.L_00000D08: - .4byte 0x4E4F5300 -.L_00000D0C: - .4byte 0x5265706C - .4byte 0x61794E6F - .4byte 0x73000000 -.L_00000D18: - .4byte 0x4A756D70 - .4byte 0x00000000 -.L_00000D20: - .4byte 0x5265706C - .4byte 0x61794A75 - .4byte 0x6D700000 -.L_00000D2C: - .4byte 0x53706565 - .4byte 0x64000000 -.L_00000D34: - .4byte 0x5265706C - .4byte 0x61795370 - .4byte 0x65656400 -.L_00000D40: - .4byte 0x436F726E - .4byte 0x65720000 -.L_00000D48: - .4byte 0x5265706C - .4byte 0x6179436F - .4byte 0x726E6572 - .4byte 0x00000000 -.L_00000D58: - .4byte 0x4275726E - .4byte 0x6F757400 -.L_00000D60: - .4byte 0x5265706C - .4byte 0x61794275 - .4byte 0x726E6F75 - .4byte 0x74000000 -.L_00000D70: - .4byte 0x506F7765 - .4byte 0x72536C69 - .4byte 0x64650000 -.L_00000D7C: - .4byte 0x5265706C - .4byte 0x6179536C - .4byte 0x69646500 - .4byte 0x2E2E2E2E - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0xBF000000 - .4byte 0x3F5DB22D - .4byte 0x3F000000 - .4byte 0x00000000 - .4byte 0x2E5BE6FF - .4byte 0x00000000 - .4byte 0x3DCCCCCD - .4byte 0x41200000 - .4byte 0x00000000 - .4byte 0x43300000 - .4byte 0x80000000 - .4byte 0x3F800000 -.L_00000DC4: - .4byte 0x43696E65 - .4byte 0x6D617469 - .4byte 0x63730000 -.L_00000DD0: - .4byte 0x44656275 - .4byte 0x67000000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x43300000 - .4byte 0x80000000 - .4byte 0x3983126F - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x63616D25 - .4byte 0x64000000 - .4byte 0x464D5600 - .4byte 0x7265706C - .4byte 0x61790000 - .4byte 0x636C6970 - .4byte 0x00000000 - .4byte 0x54726163 - .4byte 0x6B202564 - .4byte 0x00000000 - .4byte 0xBF800000 - .4byte 0x00000000 - .4byte 0x3F800000 - .4byte 0x358637BD - .4byte 0x00000000 - .4byte 0x40800000 - .4byte 0x6B65795F - .4byte 0x25640000 - .4byte 0x3F000000 - .4byte 0xBF800000 - .4byte 0xBF800000 - -# .rodata:0xE68 | size: 0xA0 -.obj _vt.20SelectCarCameraMover, weak - .4byte 0xFFF80000 - .4byte 0x00000000 - .4byte 0xFFF80000 - .4byte OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv - .4byte 0x00000000 - .4byte _._20SelectCarCameraMover - .4byte 0x00000000 - .4byte Update__20SelectCarCameraMoverf - .4byte 0x00000000 - .4byte Render__11CameraMoverP5eView - .4byte 0x00000000 - .4byte GetAnchor__11CameraMover - .4byte 0x00000000 - .4byte SetLookBack__11CameraMoverb - .4byte 0x00000000 - .4byte SetLookbackSpeed__11CameraMoverf - .4byte 0x00000000 - .4byte SetDisableLag__11CameraMoverb - .4byte 0x00000000 - .4byte SetPovType__11CameraMoveri - .4byte 0x00000000 - .4byte OutsidePOV__11CameraMover - .4byte 0x00000000 - .4byte RenderCarPOV__11CameraMover - .4byte 0x00000000 - .4byte MinDistToWall__11CameraMover - .4byte 0x00000000 - .4byte GetLookbackAngle__11CameraMover - .4byte 0x00000000 - .4byte ResetState__11CameraMover - .4byte 0x00000000 - .4byte Enable__11CameraMover - .4byte 0x00000000 - .4byte Disable__11CameraMover - .4byte 0x00000000 - .4byte IsHoodCamera__11CameraMover - .4byte 0x00000000 - .4byte GetTarget__11CameraMover - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.20SelectCarCameraMover - -# .rodata:0xF08 | size: 0x20 -.obj _vt.t8tAverage1Z8bVector3, weak - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte _._t8tAverage1Z8bVector3 - .4byte 0x00000000 - .4byte Recalculate__t8tAverage1Z8bVector3 - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.t8tAverage1Z8bVector3 - -# .rodata:0xF28 | size: 0x20 -.obj _vt.21CDActionDebugWatchCar.14ITrafficCenter, weak - .4byte 0xFFDC0000 - .4byte 0x00000000 - .4byte 0xFFDC0000 - .4byte GetTrafficBasis__21CDActionDebugWatchCarRQ25UMath7Matrix4RQ25UMath7Vector3 - .4byte 0xFFDC0000 - .4byte _._21CDActionDebugWatchCar - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.21CDActionDebugWatchCar.14ITrafficCenter - -# .rodata:0xF48 | size: 0x20 -.obj _vt.21CDActionDebugWatchCar.14IDebugWatchCar, weak - .4byte 0xFFE80000 - .4byte 0x00000000 - .4byte 0xFFE80000 - .4byte _._21CDActionDebugWatchCar - .4byte 0xFFE80000 - .4byte GetSimable__21CDActionDebugWatchCar - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.21CDActionDebugWatchCar.14IDebugWatchCar - -# .rodata:0xF68 | size: 0x48 -.obj _vt.21CDActionDebugWatchCar, weak - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte _._21CDActionDebugWatchCar - .4byte 0x00000000 - .4byte Update__21CDActionDebugWatchCarf - .4byte 0x00000000 - .4byte Reset__21CDActionDebugWatchCar - .4byte 0x00000000 - .4byte GetName__C21CDActionDebugWatchCar - .4byte 0x00000000 - .4byte GetNext__C21CDActionDebugWatchCar - .4byte 0x00000000 - .4byte GetMover__21CDActionDebugWatchCar - .4byte 0x00000000 - .4byte SetSpecial__21CDActionDebugWatchCarf - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.21CDActionDebugWatchCar - -# .rodata:0xFB0 | size: 0x20 -.obj _vt.14IDebugWatchCar, weak - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte _._14IDebugWatchCar - .4byte 0x00000000 - .4byte __pure_virtual - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.14IDebugWatchCar - -# .rodata:0xFD0 | size: 0xA0 -.obj _vt.8ICEMover, weak - .4byte 0xFFF80000 - .4byte 0x00000000 - .4byte 0xFFF80000 - .4byte OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv - .4byte 0x00000000 - .4byte _._8ICEMover - .4byte 0x00000000 - .4byte Update__8ICEMoverf - .4byte 0x00000000 - .4byte Render__11CameraMoverP5eView - .4byte 0x00000000 - .4byte GetAnchor__11CameraMover - .4byte 0x00000000 - .4byte SetLookBack__11CameraMoverb - .4byte 0x00000000 - .4byte SetLookbackSpeed__11CameraMoverf - .4byte 0x00000000 - .4byte SetDisableLag__11CameraMoverb - .4byte 0x00000000 - .4byte SetPovType__11CameraMoveri - .4byte 0x00000000 - .4byte OutsidePOV__11CameraMover - .4byte 0x00000000 - .4byte RenderCarPOV__11CameraMover - .4byte 0x00000000 - .4byte MinDistToWall__11CameraMover - .4byte 0x00000000 - .4byte GetLookbackAngle__11CameraMover - .4byte 0x00000000 - .4byte ResetState__11CameraMover - .4byte 0x00000000 - .4byte Enable__11CameraMover - .4byte 0x00000000 - .4byte Disable__11CameraMover - .4byte 0x00000000 - .4byte IsHoodCamera__11CameraMover - .4byte 0x00000000 - .4byte GetTarget__11CameraMover - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.8ICEMover - -# .rodata:0x1070 | size: 0x48 -.obj _vt.11CDActionIce.11IAttachable, weak - .4byte 0xFFE80000 - .4byte 0x00000000 - .4byte 0xFFE80000 - .4byte _._11CDActionIce - .4byte 0xFFE80000 - .4byte Attach__11CDActionIcePQ33UTL3COM8IUnknown - .4byte 0xFFE80000 - .4byte Detach__11CDActionIcePQ33UTL3COM8IUnknown - .4byte 0xFFE80000 - .4byte IsAttached__C11CDActionIcePCQ33UTL3COM8IUnknown - .4byte 0xFFE80000 - .4byte OnAttached__11CDActionIceP11IAttachable - .4byte 0xFFE80000 - .4byte OnDetached__11CDActionIceP11IAttachable - .4byte 0xFFE80000 - .4byte GetAttachments__C11CDActionIce - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.11CDActionIce.11IAttachable - -# .rodata:0x10B8 | size: 0x48 -.obj _vt.11CDActionIce, weak - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte _._11CDActionIce - .4byte 0x00000000 - .4byte Update__11CDActionIcef - .4byte 0x00000000 - .4byte Reset__11CDActionIce - .4byte 0x00000000 - .4byte GetName__C11CDActionIce - .4byte 0x00000000 - .4byte GetNext__C11CDActionIce - .4byte 0x00000000 - .4byte GetMover__11CDActionIce - .4byte 0x00000000 - .4byte SetSpecial__11CDActionIcef - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.11CDActionIce - -# .rodata:0x1100 | size: 0x20 -.obj _vt.13CDActionDebug.14ITrafficCenter, weak - .4byte 0xFFE80000 - .4byte 0x00000000 - .4byte 0xFFE80000 - .4byte GetTrafficBasis__13CDActionDebugRQ25UMath7Matrix4RQ25UMath7Vector3 - .4byte 0xFFE80000 - .4byte _._13CDActionDebug - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.13CDActionDebug.14ITrafficCenter - -# .rodata:0x1120 | size: 0x48 -.obj _vt.13CDActionDebug, weak - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte _._13CDActionDebug - .4byte 0x00000000 - .4byte Update__13CDActionDebugf - .4byte 0x00000000 - .4byte Reset__13CDActionDebug - .4byte 0x00000000 - .4byte GetName__C13CDActionDebug - .4byte 0x00000000 - .4byte GetNext__C13CDActionDebug - .4byte 0x00000000 - .4byte GetMover__13CDActionDebug - .4byte 0x00000000 - .4byte SetSpecial__13CDActionDebugf - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.13CDActionDebug - -# .rodata:0x1168 | size: 0xA0 -.obj _vt.19ShowcaseCameraMover, weak - .4byte 0xFFF80000 - .4byte 0x00000000 - .4byte 0xFFF80000 - .4byte OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv - .4byte 0x00000000 - .4byte _._19ShowcaseCameraMover - .4byte 0x00000000 - .4byte Update__19ShowcaseCameraMoverf - .4byte 0x00000000 - .4byte Render__11CameraMoverP5eView - .4byte 0x00000000 - .4byte GetAnchor__11CameraMover - .4byte 0x00000000 - .4byte SetLookBack__11CameraMoverb - .4byte 0x00000000 - .4byte SetLookbackSpeed__11CameraMoverf - .4byte 0x00000000 - .4byte SetDisableLag__11CameraMoverb - .4byte 0x00000000 - .4byte SetPovType__11CameraMoveri - .4byte 0x00000000 - .4byte OutsidePOV__11CameraMover - .4byte 0x00000000 - .4byte RenderCarPOV__11CameraMover - .4byte 0x00000000 - .4byte MinDistToWall__11CameraMover - .4byte 0x00000000 - .4byte GetLookbackAngle__11CameraMover - .4byte 0x00000000 - .4byte ResetState__19ShowcaseCameraMover - .4byte 0x00000000 - .4byte Enable__11CameraMover - .4byte 0x00000000 - .4byte Disable__11CameraMover - .4byte 0x00000000 - .4byte IsHoodCamera__11CameraMover - .4byte 0x00000000 - .4byte GetTarget__11CameraMover - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.19ShowcaseCameraMover - -# .rodata:0x1208 | size: 0x48 -.obj _vt.16CDActionShowcase.11IAttachable, weak - .4byte 0xFFE80000 - .4byte 0x00000000 - .4byte 0xFFE80000 - .4byte _._16CDActionShowcase - .4byte 0xFFE80000 - .4byte Attach__16CDActionShowcasePQ33UTL3COM8IUnknown - .4byte 0xFFE80000 - .4byte Detach__16CDActionShowcasePQ33UTL3COM8IUnknown - .4byte 0xFFE80000 - .4byte IsAttached__C16CDActionShowcasePCQ33UTL3COM8IUnknown - .4byte 0xFFE80000 - .4byte OnAttached__16CDActionShowcaseP11IAttachable - .4byte 0xFFE80000 - .4byte OnDetached__16CDActionShowcaseP11IAttachable - .4byte 0xFFE80000 - .4byte GetAttachments__C16CDActionShowcase - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.16CDActionShowcase.11IAttachable - -# .rodata:0x1250 | size: 0x48 -.obj _vt.16CDActionShowcase, weak - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte _._16CDActionShowcase - .4byte 0x00000000 - .4byte Update__16CDActionShowcasef - .4byte 0x00000000 - .4byte Reset__16CDActionShowcase - .4byte 0x00000000 - .4byte GetName__C16CDActionShowcase - .4byte 0x00000000 - .4byte GetNext__C16CDActionShowcase - .4byte 0x00000000 - .4byte GetMover__16CDActionShowcase - .4byte 0x00000000 - .4byte SetSpecial__16CDActionShowcasef - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.16CDActionShowcase - -# .rodata:0x1298 | size: 0x20 -.obj _vt.16CDActionTrackCop.14ITrafficCenter, weak - .4byte 0xFFE00000 - .4byte 0x00000000 - .4byte 0xFFE00000 - .4byte GetTrafficBasis__16CDActionTrackCopRQ25UMath7Matrix4RQ25UMath7Vector3 - .4byte 0xFFE00000 - .4byte _._16CDActionTrackCop - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.16CDActionTrackCop.14ITrafficCenter - -# .rodata:0x12B8 | size: 0x48 -.obj _vt.16CDActionTrackCop.11IAttachable, weak - .4byte 0xFFE80000 - .4byte 0x00000000 - .4byte 0xFFE80000 - .4byte _._16CDActionTrackCop - .4byte 0xFFE80000 - .4byte Attach__16CDActionTrackCopPQ33UTL3COM8IUnknown - .4byte 0xFFE80000 - .4byte Detach__16CDActionTrackCopPQ33UTL3COM8IUnknown - .4byte 0xFFE80000 - .4byte IsAttached__C16CDActionTrackCopPCQ33UTL3COM8IUnknown - .4byte 0xFFE80000 - .4byte OnAttached__16CDActionTrackCopP11IAttachable - .4byte 0xFFE80000 - .4byte OnDetached__16CDActionTrackCopP11IAttachable - .4byte 0xFFE80000 - .4byte GetAttachments__C16CDActionTrackCop - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.16CDActionTrackCop.11IAttachable - -# .rodata:0x1300 | size: 0x48 -.obj _vt.16CDActionTrackCop, weak - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte _._16CDActionTrackCop - .4byte 0x00000000 - .4byte Update__16CDActionTrackCopf - .4byte 0x00000000 - .4byte Reset__16CDActionTrackCop - .4byte 0x00000000 - .4byte GetName__C16CDActionTrackCop - .4byte 0x00000000 - .4byte GetNext__C16CDActionTrackCop - .4byte 0x00000000 - .4byte GetMover__16CDActionTrackCop - .4byte 0x00000000 - .4byte SetSpecial__16CDActionTrackCopf - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.16CDActionTrackCop - -# .rodata:0x1348 | size: 0x20 -.obj _vt.16CDActionTrackCar.14ITrafficCenter, weak - .4byte 0xFFE00000 - .4byte 0x00000000 - .4byte 0xFFE00000 - .4byte GetTrafficBasis__16CDActionTrackCarRQ25UMath7Matrix4RQ25UMath7Vector3 - .4byte 0xFFE00000 - .4byte _._16CDActionTrackCar - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.16CDActionTrackCar.14ITrafficCenter - -# .rodata:0x1368 | size: 0x48 -.obj _vt.16CDActionTrackCar.11IAttachable, weak - .4byte 0xFFE80000 - .4byte 0x00000000 - .4byte 0xFFE80000 - .4byte _._16CDActionTrackCar - .4byte 0xFFE80000 - .4byte Attach__16CDActionTrackCarPQ33UTL3COM8IUnknown - .4byte 0xFFE80000 - .4byte Detach__16CDActionTrackCarPQ33UTL3COM8IUnknown - .4byte 0xFFE80000 - .4byte IsAttached__C16CDActionTrackCarPCQ33UTL3COM8IUnknown - .4byte 0xFFE80000 - .4byte OnAttached__16CDActionTrackCarP11IAttachable - .4byte 0xFFE80000 - .4byte OnDetached__16CDActionTrackCarP11IAttachable - .4byte 0xFFE80000 - .4byte GetAttachments__C16CDActionTrackCar - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.16CDActionTrackCar.11IAttachable - -# .rodata:0x13B0 | size: 0x48 -.obj _vt.16CDActionTrackCar, weak - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte _._16CDActionTrackCar - .4byte 0x00000000 - .4byte Update__16CDActionTrackCarf - .4byte 0x00000000 - .4byte Reset__16CDActionTrackCar - .4byte 0x00000000 - .4byte GetName__C16CDActionTrackCar - .4byte 0x00000000 - .4byte GetNext__C16CDActionTrackCar - .4byte 0x00000000 - .4byte GetMover__16CDActionTrackCar - .4byte 0x00000000 - .4byte SetSpecial__16CDActionTrackCarf - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.16CDActionTrackCar - -# .rodata:0x13F8 | size: 0x18 -.obj _vt.13CDActionDrive.Q33Sim9Collision9IListener, weak - .4byte 0xFFE00000 - .4byte 0x00000000 - .4byte 0xFFE00000 - .4byte OnCollision__13CDActionDriveRCQ33Sim9Collision4Info - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.13CDActionDrive.Q33Sim9Collision9IListener - -# .rodata:0x1410 | size: 0x20 -.obj _vt.13CDActionDrive.14ITrafficCenter, weak - .4byte 0xFFDC0000 - .4byte 0x00000000 - .4byte 0xFFDC0000 - .4byte GetTrafficBasis__13CDActionDriveRQ25UMath7Matrix4RQ25UMath7Vector3 - .4byte 0xFFDC0000 - .4byte _._13CDActionDrive - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.13CDActionDrive.14ITrafficCenter - -# .rodata:0x1430 | size: 0x48 -.obj _vt.13CDActionDrive.11IAttachable, weak - .4byte 0xFFE80000 - .4byte 0x00000000 - .4byte 0xFFE80000 - .4byte _._13CDActionDrive - .4byte 0xFFE80000 - .4byte Attach__13CDActionDrivePQ33UTL3COM8IUnknown - .4byte 0xFFE80000 - .4byte Detach__13CDActionDrivePQ33UTL3COM8IUnknown - .4byte 0xFFE80000 - .4byte IsAttached__C13CDActionDrivePCQ33UTL3COM8IUnknown - .4byte 0xFFE80000 - .4byte OnAttached__13CDActionDriveP11IAttachable - .4byte 0xFFE80000 - .4byte OnDetached__13CDActionDriveP11IAttachable - .4byte 0xFFE80000 - .4byte GetAttachments__C13CDActionDrive - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.13CDActionDrive.11IAttachable - -# .rodata:0x1478 | size: 0x48 -.obj _vt.13CDActionDrive, weak - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte _._13CDActionDrive - .4byte 0x00000000 - .4byte Update__13CDActionDrivef - .4byte 0x00000000 - .4byte Reset__13CDActionDrive - .4byte 0x00000000 - .4byte GetName__C13CDActionDrive - .4byte 0x00000000 - .4byte GetNext__C13CDActionDrive - .4byte 0x00000000 - .4byte GetMover__13CDActionDrive - .4byte 0x00000000 - .4byte SetSpecial__13CDActionDrivef - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.13CDActionDrive - -# .rodata:0x14C0 | size: 0x20 -.obj _vt.14ITrafficCenter, weak - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte __pure_virtual - .4byte 0x00000000 - .4byte _._14ITrafficCenter - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.14ITrafficCenter - -# .rodata:0x14E0 | size: 0x18 -.obj _vt.Q28CameraAI8Director, weak - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte _._Q28CameraAI8Director - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.Q28CameraAI8Director - -# .rodata:0x14F8 | size: 0x48 -.obj _vt.Q28CameraAI6Action, weak - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte _._Q28CameraAI6Action - .4byte 0x00000000 - .4byte Update__Q28CameraAI6Actionf - .4byte 0x00000000 - .4byte Reset__Q28CameraAI6Action - .4byte 0x00000000 - .4byte __pure_virtual - .4byte 0x00000000 - .4byte __pure_virtual - .4byte 0x00000000 - .4byte __pure_virtual - .4byte 0x00000000 - .4byte SetSpecial__Q28CameraAI6Actionf - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.Q28CameraAI6Action - -# .rodata:0x1540 | size: 0x48 -.obj _vt.11IAttachable, weak - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte _._11IAttachable - .4byte 0x00000000 - .4byte __pure_virtual - .4byte 0x00000000 - .4byte __pure_virtual - .4byte 0x00000000 - .4byte __pure_virtual - .4byte 0x00000000 - .4byte __pure_virtual - .4byte 0x00000000 - .4byte __pure_virtual - .4byte 0x00000000 - .4byte __pure_virtual - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.11IAttachable - -# .rodata:0x1588 | size: 0xA0 -.obj _vt.21DebugWorldCameraMover, weak - .4byte 0xFFF80000 - .4byte 0x00000000 - .4byte 0xFFF80000 - .4byte OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv - .4byte 0x00000000 - .4byte _._21DebugWorldCameraMover - .4byte 0x00000000 - .4byte Update__21DebugWorldCameraMoverf - .4byte 0x00000000 - .4byte Render__11CameraMoverP5eView - .4byte 0x00000000 - .4byte GetAnchor__11CameraMover - .4byte 0x00000000 - .4byte SetLookBack__11CameraMoverb - .4byte 0x00000000 - .4byte SetLookbackSpeed__11CameraMoverf - .4byte 0x00000000 - .4byte SetDisableLag__11CameraMoverb - .4byte 0x00000000 - .4byte SetPovType__11CameraMoveri - .4byte 0x00000000 - .4byte OutsidePOV__11CameraMover - .4byte 0x00000000 - .4byte RenderCarPOV__11CameraMover - .4byte 0x00000000 - .4byte MinDistToWall__11CameraMover - .4byte 0x00000000 - .4byte GetLookbackAngle__11CameraMover - .4byte 0x00000000 - .4byte ResetState__11CameraMover - .4byte 0x00000000 - .4byte Enable__11CameraMover - .4byte 0x00000000 - .4byte Disable__11CameraMover - .4byte 0x00000000 - .4byte IsHoodCamera__11CameraMover - .4byte 0x00000000 - .4byte GetTarget__11CameraMover - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.21DebugWorldCameraMover - -# .rodata:0x1628 | size: 0xA0 -.obj _vt.19TrackCopCameraMover, weak - .4byte 0xFFF80000 - .4byte 0x00000000 - .4byte 0xFFF80000 - .4byte OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv - .4byte 0x00000000 - .4byte _._19TrackCopCameraMover - .4byte 0x00000000 - .4byte Update__19TrackCopCameraMoverf - .4byte 0x00000000 - .4byte Render__11CameraMoverP5eView - .4byte 0x00000000 - .4byte GetAnchor__19TrackCopCameraMover - .4byte 0x00000000 - .4byte SetLookBack__11CameraMoverb - .4byte 0x00000000 - .4byte SetLookbackSpeed__11CameraMoverf - .4byte 0x00000000 - .4byte SetDisableLag__11CameraMoverb - .4byte 0x00000000 - .4byte SetPovType__11CameraMoveri - .4byte 0x00000000 - .4byte OutsidePOV__11CameraMover - .4byte 0x00000000 - .4byte RenderCarPOV__19TrackCopCameraMover - .4byte 0x00000000 - .4byte MinDistToWall__11CameraMover - .4byte 0x00000000 - .4byte GetLookbackAngle__11CameraMover - .4byte 0x00000000 - .4byte ResetState__11CameraMover - .4byte 0x00000000 - .4byte Enable__11CameraMover - .4byte 0x00000000 - .4byte Disable__11CameraMover - .4byte 0x00000000 - .4byte IsHoodCamera__11CameraMover - .4byte 0x00000000 - .4byte GetTarget__19TrackCopCameraMover - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.19TrackCopCameraMover - -# .rodata:0x16C8 | size: 0xA0 -.obj _vt.19TrackCarCameraMover, weak - .4byte 0xFFF80000 - .4byte 0x00000000 - .4byte 0xFFF80000 - .4byte OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv - .4byte 0x00000000 - .4byte _._19TrackCarCameraMover - .4byte 0x00000000 - .4byte Update__19TrackCarCameraMoverf - .4byte 0x00000000 - .4byte Render__11CameraMoverP5eView - .4byte 0x00000000 - .4byte GetAnchor__19TrackCarCameraMover - .4byte 0x00000000 - .4byte SetLookBack__11CameraMoverb - .4byte 0x00000000 - .4byte SetLookbackSpeed__11CameraMoverf - .4byte 0x00000000 - .4byte SetDisableLag__11CameraMoverb - .4byte 0x00000000 - .4byte SetPovType__11CameraMoveri - .4byte 0x00000000 - .4byte OutsidePOV__11CameraMover - .4byte 0x00000000 - .4byte RenderCarPOV__11CameraMover - .4byte 0x00000000 - .4byte MinDistToWall__11CameraMover - .4byte 0x00000000 - .4byte GetLookbackAngle__11CameraMover - .4byte 0x00000000 - .4byte ResetState__11CameraMover - .4byte 0x00000000 - .4byte Enable__11CameraMover - .4byte 0x00000000 - .4byte Disable__11CameraMover - .4byte 0x00000000 - .4byte IsHoodCamera__11CameraMover - .4byte 0x00000000 - .4byte GetTarget__19TrackCarCameraMover - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.19TrackCarCameraMover - -# .rodata:0x1768 | size: 0xA0 -.obj _vt.25RearViewMirrorCameraMover, weak - .4byte 0xFFF80000 - .4byte 0x00000000 - .4byte 0xFFF80000 - .4byte OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv - .4byte 0x00000000 - .4byte _._25RearViewMirrorCameraMover - .4byte 0x00000000 - .4byte Update__25RearViewMirrorCameraMoverf - .4byte 0x00000000 - .4byte Render__11CameraMoverP5eView - .4byte 0x00000000 - .4byte GetAnchor__25RearViewMirrorCameraMover - .4byte 0x00000000 - .4byte SetLookBack__11CameraMoverb - .4byte 0x00000000 - .4byte SetLookbackSpeed__11CameraMoverf - .4byte 0x00000000 - .4byte SetDisableLag__11CameraMoverb - .4byte 0x00000000 - .4byte SetPovType__11CameraMoveri - .4byte 0x00000000 - .4byte OutsidePOV__11CameraMover - .4byte 0x00000000 - .4byte RenderCarPOV__11CameraMover - .4byte 0x00000000 - .4byte MinDistToWall__11CameraMover - .4byte 0x00000000 - .4byte GetLookbackAngle__11CameraMover - .4byte 0x00000000 - .4byte ResetState__11CameraMover - .4byte 0x00000000 - .4byte Enable__11CameraMover - .4byte 0x00000000 - .4byte Disable__11CameraMover - .4byte 0x00000000 - .4byte IsHoodCamera__11CameraMover - .4byte 0x00000000 - .4byte GetTarget__11CameraMover - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.25RearViewMirrorCameraMover - -# .rodata:0x1808 | size: 0xA0 -.obj _vt.16CubicCameraMover, weak - .4byte 0xFFF80000 - .4byte 0x00000000 - .4byte 0xFFF80000 - .4byte OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv - .4byte 0x00000000 - .4byte _._16CubicCameraMover - .4byte 0x00000000 - .4byte Update__16CubicCameraMoverf - .4byte 0x00000000 - .4byte Render__11CameraMoverP5eView - .4byte 0x00000000 - .4byte GetAnchor__16CubicCameraMover - .4byte 0x00000000 - .4byte SetLookBack__16CubicCameraMoverb - .4byte 0x00000000 - .4byte SetLookbackSpeed__11CameraMoverf - .4byte 0x00000000 - .4byte SetDisableLag__16CubicCameraMoverb - .4byte 0x00000000 - .4byte SetPovType__16CubicCameraMoveri - .4byte 0x00000000 - .4byte OutsidePOV__16CubicCameraMover - .4byte 0x00000000 - .4byte RenderCarPOV__16CubicCameraMover - .4byte 0x00000000 - .4byte MinDistToWall__16CubicCameraMover - .4byte 0x00000000 - .4byte GetLookbackAngle__16CubicCameraMover - .4byte 0x00000000 - .4byte ResetState__16CubicCameraMover - .4byte 0x00000000 - .4byte Enable__11CameraMover - .4byte 0x00000000 - .4byte Disable__11CameraMover - .4byte 0x00000000 - .4byte IsHoodCamera__16CubicCameraMover - .4byte 0x00000000 - .4byte GetTarget__11CameraMover - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.16CubicCameraMover - -# .rodata:0x18A8 | size: 0xA0 -.obj _vt.11CameraMover, weak - .4byte 0xFFF80000 - .4byte 0x00000000 - .4byte 0xFFF80000 - .4byte OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv - .4byte 0x00000000 - .4byte _._11CameraMover - .4byte 0x00000000 - .4byte Update__11CameraMoverf - .4byte 0x00000000 - .4byte Render__11CameraMoverP5eView - .4byte 0x00000000 - .4byte GetAnchor__11CameraMover - .4byte 0x00000000 - .4byte SetLookBack__11CameraMoverb - .4byte 0x00000000 - .4byte SetLookbackSpeed__11CameraMoverf - .4byte 0x00000000 - .4byte SetDisableLag__11CameraMoverb - .4byte 0x00000000 - .4byte SetPovType__11CameraMoveri - .4byte 0x00000000 - .4byte OutsidePOV__11CameraMover - .4byte 0x00000000 - .4byte RenderCarPOV__11CameraMover - .4byte 0x00000000 - .4byte MinDistToWall__11CameraMover - .4byte 0x00000000 - .4byte GetLookbackAngle__11CameraMover - .4byte 0x00000000 - .4byte ResetState__11CameraMover - .4byte 0x00000000 - .4byte Enable__11CameraMover - .4byte 0x00000000 - .4byte Disable__11CameraMover - .4byte 0x00000000 - .4byte IsHoodCamera__11CameraMover - .4byte 0x00000000 - .4byte GetTarget__11CameraMover - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.11CameraMover - -# .rodata:0x1948 | size: 0x18 -.obj _vt.Q33UTL3COM8IUnknown, weak - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte _._Q33UTL3COM8IUnknown - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.Q33UTL3COM8IUnknown - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x43300000 - .4byte 0x80000000 - .4byte 0x3F800000 - -# .rodata:0x1974 | size: 0x8 -.obj Tweak_JumpCamHighestAirTresh, local - .4byte 0x40200000 - .4byte 0x3FE66666 -.endobj Tweak_JumpCamHighestAirTresh - -# .rodata:0x197C | size: 0x8 -.obj Tweak_JumpCamLongestAirTresh, local - .4byte 0x41C80000 - .4byte 0x41700000 -.endobj Tweak_JumpCamLongestAirTresh - .4byte 0x00000000 - -# .rodata:0x1988 | size: 0x20 -.obj _vt.11AverageBase, weak - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte _._11AverageBase - .4byte 0x00000000 - .4byte Recalculate__11AverageBase - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.11AverageBase - -# .rodata:0x19A8 | size: 0x40 -.obj _vt.Q43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4List, weak - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte _._Q43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4List - .4byte 0x00000000 - .4byte AllocVectorSpace__Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16UiUi - .4byte 0x00000000 - .4byte FreeVectorSpace__Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16PPQ28CameraAI8DirectorUi - .4byte 0x00000000 - .4byte GetGrowSize__CQ23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16Ui - .4byte 0x00000000 - .4byte GetMaxCapacity__CQ23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16 - .4byte 0x00000000 - .4byte OnGrowRequest__Q23UTLt6Vector2ZPQ28CameraAI8Directori16Ui - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.Q43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4List - -# .rodata:0x19E8 | size: 0x40 -.obj _vt.Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16, weak - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte _._Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16 - .4byte 0x00000000 - .4byte AllocVectorSpace__Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16UiUi - .4byte 0x00000000 - .4byte FreeVectorSpace__Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16PPQ28CameraAI8DirectorUi - .4byte 0x00000000 - .4byte GetGrowSize__CQ23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16Ui - .4byte 0x00000000 - .4byte GetMaxCapacity__CQ23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16 - .4byte 0x00000000 - .4byte OnGrowRequest__Q23UTLt6Vector2ZPQ28CameraAI8Directori16Ui - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16 - .4byte 0x43300000 - .4byte 0x80000000 - -# .rodata:0x1A30 | size: 0x40 -.obj _vt.Q23UTLt6Vector2ZPQ28CameraAI8Directori16, weak - .4byte 0x00000000 - .4byte 0x00000000 - .4byte 0x00000000 - .4byte _._Q23UTLt6Vector2ZPQ28CameraAI8Directori16 - .4byte 0x00000000 - .4byte AllocVectorSpace__Q23UTLt6Vector2ZPQ28CameraAI8Directori16UiUi - .4byte 0x00000000 - .4byte FreeVectorSpace__Q23UTLt6Vector2ZPQ28CameraAI8Directori16PPQ28CameraAI8DirectorUi - .4byte 0x00000000 - .4byte GetGrowSize__CQ23UTLt6Vector2ZPQ28CameraAI8Directori16Ui - .4byte 0x00000000 - .4byte GetMaxCapacity__CQ23UTLt6Vector2ZPQ28CameraAI8Directori16 - .4byte 0x00000000 - .4byte OnGrowRequest__Q23UTLt6Vector2ZPQ28CameraAI8Directori16Ui - .4byte 0x00000000 - .4byte 0x00000000 -.endobj _vt.Q23UTLt6Vector2ZPQ28CameraAI8Directori16 - -# 0x00000000..0x00000130 | size: 0x130 -.data -.balign 8 - -# .data:0x0 | size: 0x4 -.obj kJumpTimeMultiplier, local - .4byte 0x40000000 -.endobj kJumpTimeMultiplier - -# .data:0x4 | size: 0x4 -.obj kEndJumpThreshold, local - .4byte 0x00000000 -.endobj kEndJumpThreshold - -# .data:0x8 | size: 0x4 -.obj kEndJumpValue, local - .4byte 0xBF800000 -.endobj kEndJumpValue - -# .data:0xC | size: 0x4 -.obj kEndPursuitThreshold, local - .4byte 0x00000000 -.endobj kEndPursuitThreshold - -# .data:0x10 | size: 0x4 -.obj kEndPursuitValue, local - .4byte 0xBF800000 -.endobj kEndPursuitValue - -# .data:0x14 | size: 0x4 -.obj kJumpSpeedHigh, local - .4byte 0x42C80000 -.endobj kJumpSpeedHigh - -# .data:0x18 | size: 0x4 -.obj kJumpSpeedLow, local - .4byte 0x42A00000 -.endobj kJumpSpeedLow - -# .data:0x1C | size: 0x4 -.obj old_pov.10900, local - .4byte 0xFFFFFFFF -.endobj old_pov.10900 - -# .data:0x20 | size: 0xC -.obj _force_active_TrackCar, global - .4byte IsAnyCopNear__FP12CameraAnchor - .4byte IsBeingPursued__Fi - .4byte FixWorldHeight__FPQ25UMath7Vector3i -.endobj _force_active_TrackCar - -# .data:0x2C | size: 0x4 -.obj kSelectCarFrameRate, local - .4byte 0x42700000 -.endobj kSelectCarFrameRate - -# .data:0x30 | size: 0x4 -.obj kSelectCarUpperOrbitV, local - .4byte 0x42DC0000 -.endobj kSelectCarUpperOrbitV - -# .data:0x34 | size: 0x4 -.obj kSelectCarLowerOrbitV, local - .4byte 0x42BD0000 -.endobj kSelectCarLowerOrbitV - -# .data:0x38 | size: 0x4 -.obj kSelectCarRadiusSpeedScale, local - .4byte 0x3E000000 -.endobj kSelectCarRadiusSpeedScale - -# .data:0x3C | size: 0x4 -.obj kSelectCarUpperRadius, local - .4byte 0x40D4CCCD -.endobj kSelectCarUpperRadius - -# .data:0x40 | size: 0x4 -.obj kSelectCarLowerRadius, local - .4byte 0x4094CCCD -.endobj kSelectCarLowerRadius - -# .data:0x44 | size: 0x4 -.obj kSelectCarWrapAngle, local - .4byte 0x43B40000 -.endobj kSelectCarWrapAngle - -# .data:0x48 | size: 0x4 -.obj kSelectCarDefaultRollV, local - .4byte 0x00000000 -.endobj kSelectCarDefaultRollV - -# .data:0x4C | size: 0x4 -.obj kSelectCarDefaultFOVV, local - .4byte 0x42340000 -.endobj kSelectCarDefaultFOVV - -# .data:0x50 | size: 0x4 -.obj kSelectCarDefaultLookAtZV, local - .4byte 0x3F400000 -.endobj kSelectCarDefaultLookAtZV - -# .data:0x54 | size: 0x4 -.obj kSelectCarDefaultAnimTimeV, local - .4byte 0x3F0E147B -.endobj kSelectCarDefaultAnimTimeV - -# .data:0x58 | size: 0x4 -.obj kSelectCarDefaultRollH, local - .4byte 0x00000000 -.endobj kSelectCarDefaultRollH - -# .data:0x5C | size: 0x4 -.obj kSelectCarDefaultFOVH, local - .4byte 0x42340000 -.endobj kSelectCarDefaultFOVH - -# .data:0x60 | size: 0x4 -.obj kSelectCarDefaultLookAtZH, local - .4byte 0x3F400000 -.endobj kSelectCarDefaultLookAtZH - -# .data:0x64 | size: 0x4 -.obj kSelectCarDefaultAnimTimeH, local - .4byte 0x3F0E147B -.endobj kSelectCarDefaultAnimTimeH - -# .data:0x68 | size: 0x4 -.obj kSelectCarDefaultRollZ, local - .4byte 0x00000000 -.endobj kSelectCarDefaultRollZ - -# .data:0x6C | size: 0x4 -.obj kSelectCarDefaultFOVZ, local - .4byte 0x42340000 -.endobj kSelectCarDefaultFOVZ - -# .data:0x70 | size: 0x4 -.obj kSelectCarDefaultLookAtZZ, local - .4byte 0x3F400000 -.endobj kSelectCarDefaultLookAtZZ - -# .data:0x74 | size: 0x4 -.obj kSelectCarDefaultAnimTimeZ, local - .4byte 0x3F0E147B -.endobj kSelectCarDefaultAnimTimeZ - -# .data:0x78 | size: 0x4 -.obj gPhoto_LatAng, local - .4byte 0x42B40000 -.endobj gPhoto_LatAng - -# .data:0x7C | size: 0x4 -.obj gPhoto_UpAng, local - .4byte 0x40000000 -.endobj gPhoto_UpAng - -# .data:0x80 | size: 0x4 -.obj gPhoto_Dist, local - .4byte 0x40A00000 -.endobj gPhoto_Dist - -# .data:0x84 | size: 0x4 -.obj gPhoto_DOF, local - .4byte 0x00000000 -.endobj gPhoto_DOF - -# .data:0x88 | size: 0x4 -.obj _21DebugWorldCameraMover.TurboSpeed, global - .4byte 0x4043D70A -.endobj _21DebugWorldCameraMover.TurboSpeed - -# .data:0x8C | size: 0x4 -.obj _21DebugWorldCameraMover.SuperTurboSpeed, global - .4byte 0x40E51EB8 -.endobj _21DebugWorldCameraMover.SuperTurboSpeed - -# .data:0x90 | size: 0x90 -.obj ReplayCategories, local - .rel .rodata, .L_00000D08 - .4byte 0x40DFADC5 - .rel .rodata, .L_00000D0C - .4byte 0xF6F4912B - .4byte ReplayNosScore__FP9ICEAnchor - .4byte ReplayNosMirror__FP9ICEAnchor - .rel .rodata, .L_00000D18 - .4byte 0xC9CFEAFB - .rel .rodata, .L_00000D20 - .4byte 0x17911633 - .4byte ReplayJumpScore__FP9ICEAnchor - .4byte ReplayJumpMirror__FP9ICEAnchor - .rel .rodata, .L_00000D2C - .4byte 0x41862FE6 - .rel .rodata, .L_00000D34 - .4byte 0xC0E543F7 - .4byte ReplaySpeedScore__FP9ICEAnchor - .4byte ReplaySpeedMirror__FP9ICEAnchor - .rel .rodata, .L_00000D40 - .4byte 0xA38C8885 - .rel .rodata, .L_00000D48 - .4byte 0xE12BD1A8 - .4byte ReplayCornerScore__FP9ICEAnchor - .4byte ReplayCornerMirror__FP9ICEAnchor - .rel .rodata, .L_00000D58 - .4byte 0x6512F314 - .rel .rodata, .L_00000D60 - .4byte 0x87EA4B2F - .4byte ReplayBurnoutScore__FP9ICEAnchor - .4byte ReplayBurnoutMirror__FP9ICEAnchor - .rel .rodata, .L_00000D70 - .4byte 0x9FD09E0E - .rel .rodata, .L_00000D7C - .4byte 0xD7BFCC6F - .4byte ReplayPowerSlideScore__FP9ICEAnchor - .4byte ReplayPowerSlideMirror__FP9ICEAnchor -.endobj ReplayCategories - -# .data:0x120 | size: 0x8 -.obj GenericCategoryNames, local - .rel .rodata, .L_00000DC4 - .rel .rodata, .L_00000DD0 -.endobj GenericCategoryNames - -# .data:0x128 | size: 0x4 -.obj RemoteCaffeinating, local - .4byte 0x00000000 -.endobj RemoteCaffeinating - .4byte 0x00000000 - -# 0x00000000..0x000002A0 | size: 0x2A0 -.section .bss, "wa", @nobits -.balign 8 -# .bss:0x0 | size: 0x4 -.sym value.4377, local - .skip 0x4 -.endsym value.4377 -# .bss:0x4 | size: 0x4 -.sym _.tmp_0.4378, local - .skip 0x4 -.endsym _.tmp_0.4378 -# .bss:0x8 | size: 0x10 -.sym ret.9191, local - .skip 0x10 -.endsym ret.9191 -# .bss:0x18 | size: 0x4 -.sym _.tmp_1.9192, local - .skip 0x4 -.endsym _.tmp_1.9192 -# .bss:0x1C | size: 0x4 -.sym k.9589, local - .skip 0x4 -.endsym k.9589 -# .bss:0x20 | size: 0x4 -.sym _.tmp_2.9590, local - .skip 0x4 -.endsym _.tmp_2.9590 -# .bss:0x24 | size: 0x4 -.sym k.9633, local - .skip 0x4 -.endsym k.9633 -# .bss:0x28 | size: 0x4 -.sym _.tmp_3.9634, local - .skip 0x4 -.endsym _.tmp_3.9634 -# .bss:0x2C | size: 0x4 -.sym k.9647, local - .skip 0x4 -.endsym k.9647 -# .bss:0x30 | size: 0x4 -.sym _.tmp_4.9648, local - .skip 0x4 -.endsym _.tmp_4.9648 -# .bss:0x34 | size: 0x4 -.sym k.10243, local - .skip 0x4 -.endsym k.10243 -# .bss:0x38 | size: 0x4 -.sym _.tmp_5.10244, local - .skip 0x4 -.endsym _.tmp_5.10244 -# .bss:0x3C | size: 0x4 -.sym k.10704, local - .skip 0x4 -.endsym k.10704 -# .bss:0x40 | size: 0x4 -.sym _.tmp_6.10705, local - .skip 0x4 -.endsym _.tmp_6.10705 - .skip 0x4 -# .bss:0x48 | size: 0x10 -.sym name.10838, local - .skip 0x10 -.endsym name.10838 -# .bss:0x58 | size: 0x4 -.sym _.tmp_7.10839, local - .skip 0x4 -.endsym _.tmp_7.10839 - .skip 0x4 -# .bss:0x60 | size: 0x10 -.sym name.10940, local - .skip 0x10 -.endsym name.10940 -# .bss:0x70 | size: 0x4 -.sym _.tmp_8.10941, local - .skip 0x4 -.endsym _.tmp_8.10941 - .skip 0x4 -# .bss:0x78 | size: 0x10 -.sym name.10996, local - .skip 0x10 -.endsym name.10996 -# .bss:0x88 | size: 0x4 -.sym _.tmp_9.10997, local - .skip 0x4 -.endsym _.tmp_9.10997 - .skip 0x4 -# .bss:0x90 | size: 0x10 -.sym name.11055, local - .skip 0x10 -.endsym name.11055 -# .bss:0xA0 | size: 0x4 -.sym _.tmp_10.11056, local - .skip 0x4 -.endsym _.tmp_10.11056 - .skip 0x4 -# .bss:0xA8 | size: 0x10 -.sym name.11105, local - .skip 0x10 -.endsym name.11105 -# .bss:0xB8 | size: 0x4 -.sym _.tmp_11.11106, local - .skip 0x4 -.endsym _.tmp_11.11106 - .skip 0x4 -# .bss:0xC0 | size: 0x10 -.sym name.11290, local - .skip 0x10 -.endsym name.11290 -# .bss:0xD0 | size: 0x4 -.sym _.tmp_12.11291, local - .skip 0x4 -.endsym _.tmp_12.11291 - .skip 0x4 -# .bss:0xD8 | size: 0x10 -.sym name.11403, local - .skip 0x10 -.endsym name.11403 -# .bss:0xE8 | size: 0x4 -.sym _.tmp_13.11404, local - .skip 0x4 -.endsym _.tmp_13.11404 -# .bss:0xEC | size: 0x50 -.sym _6Camera.JollyRancherResponse, global - .skip 0x50 -.endsym _6Camera.JollyRancherResponse -# .bss:0x13C | size: 0x4 -.sym kFloatScaleUp, local - .skip 0x4 -.endsym kFloatScaleUp -# .bss:0x140 | size: 0x4 -.sym kFloatScaleDown, local - .skip 0x4 -.endsym kFloatScaleDown -# .bss:0x144 | size: 0x10 -.sym sPrevPosition, local - .skip 0x10 -.endsym sPrevPosition -# .bss:0x154 | size: 0xC -.sym _CDActionDrive, local - .skip 0xC -.endsym _CDActionDrive -# .bss:0x160 | size: 0xC -.sym _CDActionTrackCar, local - .skip 0xC -.endsym _CDActionTrackCar -# .bss:0x16C | size: 0xC -.sym _CDActionTrackCop, local - .skip 0xC -.endsym _CDActionTrackCop -# .bss:0x178 | size: 0xC -.sym _CDActionShowcase, local - .skip 0xC -.endsym _CDActionShowcase -# .bss:0x184 | size: 0xC -.sym _CDActionDebug, local - .skip 0xC -.endsym _CDActionDebug -# .bss:0x190 | size: 0xC -.sym _CDActionIce, local - .skip 0xC -.endsym _CDActionIce -# .bss:0x19C | size: 0xC -.sym _CDActionDebugWatchCar, local - .skip 0xC -.endsym _CDActionDebugWatchCar -# .bss:0x1A8 | size: 0x10 -.sym gPhoto_CarPosBias, local - .skip 0x10 -.endsym gPhoto_CarPosBias -# .bss:0x1B8 | size: 0x10 -.sym _21DebugWorldCameraMover.Eye, global - .skip 0x10 -.endsym _21DebugWorldCameraMover.Eye -# .bss:0x1C8 | size: 0x10 -.sym _21DebugWorldCameraMover.Look, global - .skip 0x10 -.endsym _21DebugWorldCameraMover.Look -# .bss:0x1D8 | size: 0x10 -.sym _21DebugWorldCameraMover.Up, global - .skip 0x10 -.endsym _21DebugWorldCameraMover.Up -# .bss:0x1E8 | size: 0x80 -.sym TheICEManager, global - .skip 0x80 -.endsym TheICEManager -# .bss:0x268 | size: 0x2 -.sym aBaselineFovNoise, local - .skip 0x2 -.endsym aBaselineFovNoise - .skip 0x2 -# .bss:0x26C | size: 0x4 -.sym cameralink, local - .skip 0x4 -.endsym cameralink -# .bss:0x270 | size: 0x4 -.sym TheAvoidables, global - .skip 0x4 -.endsym TheAvoidables -# .bss:0x274 | size: 0x4 -.sym sHavePrevPosition, local - .skip 0x4 -.endsym sHavePrevPosition -# .bss:0x278 | size: 0x4 -.sym kCinematicMomementSeconds, local - .skip 0x4 -.endsym kCinematicMomementSeconds -# .bss:0x27C | size: 0x4 -.sym Tweak_ForceICEReplay, global - .skip 0x4 -.endsym Tweak_ForceICEReplay -# .bss:0x280 | size: 0x4 -.sym bMirrorICEData, global - .skip 0x4 -.endsym bMirrorICEData -# .bss:0x284 | size: 0x4 -.sym sPredictedAir, local - .skip 0x4 -.endsym sPredictedAir -# .bss:0x288 | size: 0x4 -.sym sRecentCurvature, local - .skip 0x4 -.endsym sRecentCurvature -# .bss:0x28C | size: 0x1 -.sym gOverlay, local - .skip 0x1 -.endsym gOverlay - .skip 0x3 -# .bss:0x290 | size: 0xC -.sym _9ICEReplay.RecentlyUsedTracks, global - .skip 0xC -.endsym _9ICEReplay.RecentlyUsedTracks -# .bss:0x29C | size: 0x4 -.sym _9ICEReplay.nRecentlyUsedIndex, global - .skip 0x4 -.endsym _9ICEReplay.nRecentlyUsedIndex - -# 0x00000000..0x00000004 | size: 0x4 -.section .ctors, "a" -.balign 1 - .4byte _GLOBAL_.I.__6Camera From e44588c583be923165afee33fae226e2419778c7 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 16:51:46 +0100 Subject: [PATCH 080/691] 77%: fix GameBreaker rate constant (dT*2.0f -> dT*4.0f), improves CDActionDrive::Update to 92.8% Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Src/Camera/Actions/CDActionDrive.cpp | 2 +- src/Speed/Indep/Src/Camera/CameraMover.hpp | 6 +++--- src/Speed/Indep/Src/Camera/Movers/Cubic.cpp | 21 ++++++++++++------- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index aad57987e..c31436ec5 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -442,7 +442,7 @@ void CDActionDrive::Update(float dT) { float gbScale; if (mPlayer->InGameBreaker()) { - gbScale = dT * 2.0f + mGameBreakerScale; + gbScale = dT * 4.0f + mGameBreakerScale; mGameBreakerScale = gbScale; gbScale = UMath::Min(gbScale, 1.0f); } else { diff --git a/src/Speed/Indep/Src/Camera/CameraMover.hpp b/src/Speed/Indep/Src/Camera/CameraMover.hpp index 9db41feef..1695fc9bb 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.hpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.hpp @@ -358,10 +358,10 @@ class CameraMover : public bTNode, public WCollisionMgr::ICollision virtual void SetPovType(int pov_type) {} - virtual bool OutsidePOV(); - virtual bool RenderCarPOV(); + virtual bool OutsidePOV(); + virtual float MinDistToWall(); virtual unsigned short GetLookbackAngle(); @@ -454,8 +454,8 @@ class CubicCameraMover : public CameraMover { virtual void SetLookBack(bool b); virtual void SetDisableLag(bool disable); virtual void SetPovType(int pov_type); - virtual bool OutsidePOV(); virtual bool RenderCarPOV(); + virtual bool OutsidePOV(); virtual float MinDistToWall(); virtual unsigned short GetLookbackAngle(); virtual void ResetState(); diff --git a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp index d289e91d9..adfffbb49 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp @@ -155,14 +155,19 @@ CubicCameraMover::CubicCameraMover(int nView, CameraAnchor *p_car, int pov_type, vCameraImpcatTimer.y = 0.0f; vCameraImpcatTimer.x = 0.0f; - if (smooth && bLength(&eye_movement) <= 50.0f && bDot(&direction_current, &direction_desired) >= -0.9f) { - fIgnoreSetSnapNextTimer = 1.0f; - } else { - pUp->Snap(); - pFov->Snap(); - pEye->Snap(); - pLook->Snap(); - } + if (smooth && bLength(&eye_movement) <= 50.0f && bDot(&direction_current, &direction_desired) >= -0.9f) + goto set_timer; + + pUp->Snap(); + pFov->Snap(); + pEye->Snap(); + pLook->Snap(); + goto done; + +set_timer: + fIgnoreSetSnapNextTimer = 1.0f; + +done:; } bool CubicCameraMover::IsUnderVehicle() { From 3604a2da35900ba75ce261874bb5f690a92f23b2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 16:53:56 +0100 Subject: [PATCH 081/691] 76%: fix CameraMover vtable order (RenderCarPOV before OutsidePOV) Restores correct vtable slot ordering after agent revert. Matches CDActionTrackCop ctor (1076B) and CDActionDrive ctor (1456B). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp | 2 +- src/Speed/Indep/Src/Camera/CameraMover.cpp | 2 +- src/Speed/Indep/Src/Camera/CameraMover.hpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index c31436ec5..2bd7924cb 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -415,7 +415,7 @@ void CDActionDrive::Update(float dT) { if (mCinematicMomementTimerInc) { timer = 1.0f; if (mCinematicMomementTimer < 1.0f) { - timer = mCinematicMomementTimer + dT * 2.0f / kCinematicMomementSeconds; + timer = mCinematicMomementTimer + dT / kCinematicMomementSeconds; } } else { timer = 0.0f; diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 5f1756cb7..6e1f1480d 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -846,7 +846,7 @@ void CameraMover::IsoProjectionMatrix(bMatrix4 *pMatrix, bVector3 *pEye, bVector eCreateLookAtMatrix(pMatrix, *pEye, vNewLookWorldSpace, vUp); } -double CameraMover::AdjustHeightAroundCar(const bVector3 *position, bVector3 *pCarPos, bVector3 *pForward) { +float CameraMover::AdjustHeightAroundCar(const bVector3 *position, bVector3 *pCarPos, bVector3 *pForward) { _STL::list >::const_iterator iter; for (iter = TheAvoidables->begin(); iter != TheAvoidables->end(); ++iter) { diff --git a/src/Speed/Indep/Src/Camera/CameraMover.hpp b/src/Speed/Indep/Src/Camera/CameraMover.hpp index 1695fc9bb..44b8d0e56 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.hpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.hpp @@ -384,7 +384,7 @@ class CameraMover : public bTNode, public WCollisionMgr::ICollision void TerrainVelocityNoise(bMatrix4 *world_to_camera, CameraAnchor *car, float speed_scale, float terrain_scale); static void ComputeBankedUpVector(bVector3 *up, bVector3 *eye, bVector3 *look, unsigned short bank); void IsoProjectionMatrix(bMatrix4 *pMatrix, bVector3 *pEye, bVector3 *pLook, bVector2 *pProjection); - double AdjustHeightAroundCar(const bVector3 *car_pos, bVector3 *pEye, bVector3 *pForward); + float AdjustHeightAroundCar(const bVector3 *car_pos, bVector3 *pEye, bVector3 *pForward); int MinGapCars(bMatrix4 *pMatrix, bVector3 *pLook, bVector3 *pForward); int MinGapTopology(bMatrix4 *pMatrix, bVector3 *pLook); bool EnforceMinGapToWalls(WCollider *collider, bVector3 *pCarPos, bVector3 *pCameraPos, bVector4 *pAdjust); From 73d385a6202df82170cab8627f3eff39f27b1af2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 16:54:20 +0100 Subject: [PATCH 082/691] 77%: fix cinematic timer rate (dT*4.0f/kCMS, not dT*2.0f/kCMS) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index 2bd7924cb..d55804caf 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -415,7 +415,7 @@ void CDActionDrive::Update(float dT) { if (mCinematicMomementTimerInc) { timer = 1.0f; if (mCinematicMomementTimer < 1.0f) { - timer = mCinematicMomementTimer + dT / kCinematicMomementSeconds; + timer = mCinematicMomementTimer + dT * 4.0f / kCinematicMomementSeconds; } } else { timer = 0.0f; From fe526a04503563868caff954318006b9c4ef6871 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 16:57:45 +0100 Subject: [PATCH 083/691] 76%: match SetDesiredOrientation, fix struct copy and store ordering Swapped StartAnimCameraData/GoalAnimCameraData assignment order to fix store interleaving. Moved CurrentAnimationTime before TotalAnimationTime assignment for correct store scheduling. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp index b2604adca..4dadebc17 100644 --- a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp @@ -199,9 +199,9 @@ void SelectCarCameraMover::SetCurrentOrientation(bVector3 &orbit, float roll, fl void SelectCarCameraMover::SetDesiredOrientation(bVector3 &orbit, float roll, float fov, bVector3 &lookAt, float animSpeed, float damping, int periods) { - GoalAnimCameraData = CurrentCameraData; - ControlMode = 0; StartAnimCameraData = CurrentCameraData; + ControlMode = 0; + GoalAnimCameraData = CurrentCameraData; GoalAnimCameraData.OrbitVAngle = orbit.x; GoalAnimCameraData.OrbitHAngle = orbit.y; GoalAnimCameraData.Radius = orbit.z; @@ -213,8 +213,8 @@ void SelectCarCameraMover::SetDesiredOrientation(bVector3 &orbit, float roll, fl GoalAnimCameraData.OrbitVAngle = FindBestAngleGoal(StartAnimCameraData.OrbitVAngle, GoalAnimCameraData.OrbitVAngle); GoalAnimCameraData.OrbitHAngle = FindBestAngleGoal(StartAnimCameraData.OrbitHAngle, GoalAnimCameraData.OrbitHAngle); GoalAnimCameraData.RollAngle = FindBestAngleGoal(StartAnimCameraData.RollAngle, GoalAnimCameraData.RollAngle); - TotalAnimationTime = animSpeed; CurrentAnimationTime = 0.0f; + TotalAnimationTime = animSpeed; } float SelectCarCameraMover::FindBestAngleGoal(float start, float goal) { From a121c5b9beb628dfb92e3f4b9c3e0a7e7d1f01e1 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 17:02:38 +0100 Subject: [PATCH 084/691] 76%: match tAverage dtor, improve AdjustHeightAroundCar and DebugWorld::Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix tAverage destructor to use delete[] instead of DeAllocate (+124B) - Improve AdjustHeightAroundCar scoping blocks (91.8% → 92.7%) - Improve DebugWorldCameraMover::Update (68.3% → 86.1%) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 68 ++++++++++--------- .../Indep/Src/Camera/Movers/DebugWorld.cpp | 4 +- src/Speed/Indep/Src/Misc/Table.hpp | 4 +- 3 files changed, 42 insertions(+), 34 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 6e1f1480d..04c01bd59 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -1,5 +1,6 @@ #include "CameraMover.hpp" #include "CameraAI.hpp" +#include "Speed/Indep/Libs/Support/Utility/UVector.h" Attrib::Key Attrib::Gen::ecar::ClassKey() { return 0xa5b543b7; @@ -871,38 +872,43 @@ float CameraMover::AdjustHeightAroundCar(const bVector3 *position, bVector3 *pCa float min_gap_squared = min_gap * min_gap; if (gap_squared < min_gap_squared && gap_height < box.z + box.z) { - bVector3 vCameraCarSpace; - bVector3 car_velocity; - bMatrix4 mWorldToCar; - - eInvertTransformationMatrix(&mWorldToCar, &matrix); - eMulVector(&vCameraCarSpace, &mWorldToCar, position); - - float cam_x4 = vCameraCarSpace.x * vCameraCarSpace.x; - float cam_y4 = vCameraCarSpace.y * vCameraCarSpace.y; - float box_x4 = box.x * box.x; - float box_y4 = box.y * box.y; - cam_x4 *= cam_x4; - cam_y4 *= cam_y4; - box_x4 *= box_x4; - box_y4 *= box_y4; - float m = cam_x4 / box_x4 + cam_y4 / box_y4; - - if (m < 1.0f) { - float remaining = 1.0f - m; - float sqrt_remaining = bSqrt(remaining); - float sqrt_sqrt = bSqrt(sqrt_remaining); - float new_z = sqrt_sqrt * box.z; - - if (new_z > vCameraCarSpace.z) { - vCameraCarSpace.z = new_z; - bVector3 vNewCam; - eMulVector(&vNewCam, &matrix, &vCameraCarSpace); - float zdiff = vNewCam.z - position->z; - if (zdiff > min_gap) { - zdiff = 0.0f; + { + UMath::Vector3 uvelocity; + bVector3 car_velocity; + } + { + bMatrix4 mWorldToCar; + bVector3 vCameraCarSpace; + + eInvertTransformationMatrix(&mWorldToCar, &matrix); + eMulVector(&vCameraCarSpace, &mWorldToCar, position); + + float cam_x4 = vCameraCarSpace.x * vCameraCarSpace.x; + float cam_y4 = vCameraCarSpace.y * vCameraCarSpace.y; + float box_x4 = box.x * box.x; + float box_y4 = box.y * box.y; + cam_x4 *= cam_x4; + cam_y4 *= cam_y4; + box_x4 *= box_x4; + box_y4 *= box_y4; + float m = cam_x4 / box_x4 + cam_y4 / box_y4; + + if (m < 1.0f) { + float remaining = 1.0f - m; + float sqrt_remaining = bSqrt(remaining); + float sqrt_sqrt = bSqrt(sqrt_remaining); + float new_z = sqrt_sqrt * box.z; + + if (new_z > vCameraCarSpace.z) { + vCameraCarSpace.z = new_z; + bVector3 vNewCam; + eMulVector(&vNewCam, &matrix, &vCameraCarSpace); + float zdiff = vNewCam.z - position->z; + if (zdiff > min_gap) { + zdiff = 0.0f; + } + return zdiff; } - return zdiff; } } } diff --git a/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp b/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp index b719e729a..d2b685984 100644 --- a/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp @@ -227,9 +227,9 @@ void DebugWorldCameraMover::Update(float dT) { if (ForwardInc != 0.0f) { float fi; - if (SuperTurboOn != 0) { + if (SuperTurboOn) { fi = ForwardInc * SuperTurboSpeed; - } else if (TurboOn != 0) { + } else if (TurboOn) { fi = ForwardInc * TurboSpeed; } else { fi = ForwardInc; diff --git a/src/Speed/Indep/Src/Misc/Table.hpp b/src/Speed/Indep/Src/Misc/Table.hpp index cfb00f049..223309a5b 100644 --- a/src/Speed/Indep/Src/Misc/Table.hpp +++ b/src/Speed/Indep/Src/Misc/Table.hpp @@ -135,7 +135,9 @@ template class tAverage : public AverageBase { } virtual ~tAverage() { - AverageBase::DeAllocate(pData, sizeof(T) * nSlots, nullptr); + if (pData) { + delete[] pData; + } } T *GetValue() { From 4c2fab4e790939e74d495023348796159d87ca12 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 17:05:52 +0100 Subject: [PATCH 085/691] 77%: fix ISuspension vtable (move GetCompression to entry 27, add stub) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp | 7 +++---- src/Speed/Indep/Src/Interfaces/Simables/ISuspension.h | 3 ++- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp b/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp index d2b685984..5c0a33b5f 100644 --- a/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp @@ -228,13 +228,12 @@ void DebugWorldCameraMover::Update(float dT) { if (ForwardInc != 0.0f) { float fi; if (SuperTurboOn) { - fi = ForwardInc * SuperTurboSpeed; + fi = ForwardInc * SuperTurboSpeed * dT; } else if (TurboOn) { - fi = ForwardInc * TurboSpeed; + fi = ForwardInc * TurboSpeed * dT; } else { - fi = ForwardInc; + fi = ForwardInc * dT; } - fi *= dT; bVector3 forward = *GetDirection() * fi; Eye += forward; Look += forward; diff --git a/src/Speed/Indep/Src/Interfaces/Simables/ISuspension.h b/src/Speed/Indep/Src/Interfaces/Simables/ISuspension.h index acb98eebc..4b68f0d6f 100644 --- a/src/Speed/Indep/Src/Interfaces/Simables/ISuspension.h +++ b/src/Speed/Indep/Src/Interfaces/Simables/ISuspension.h @@ -32,7 +32,7 @@ class ISuspension : public UTL::COM::IUnknown { virtual void ApplyVehicleEntryForces(bool enteringVehicle, const UMath::Vector3 &pos, bool calledfromEvent); virtual const float GetWheelRoadHeight(unsigned int i) const; virtual bool IsWheelOnGround(unsigned int i) const; - virtual float GetCompression(unsigned int i) const; + virtual void Unknown_ISuspension_0x58(); // TODO: unknown virtual virtual Meters GuessCompression(unsigned int wheelIndex, float downforce) const; virtual float GetWheelSlip(unsigned int idx) const; virtual float GetToleratedSlip(unsigned int idx) const; @@ -48,6 +48,7 @@ class ISuspension : public UTL::COM::IUnknown { virtual float CalculateUndersteerFactor() const; virtual float CalculateOversteerFactor() const; virtual Meters GetRideHeight(unsigned int wheelIndex) const; + virtual float GetCompression(unsigned int i) const; virtual float GetWheelRadius(unsigned int index) const; virtual float GetMaxSteering() const; virtual void MatchSpeed(float speed); From 8925799c3e7f580e6f74798e253514fd473fd0a6 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 17:09:13 +0100 Subject: [PATCH 086/691] 87%: improve DebugWorldCameraMover::Update matching - Use bLength/bSqrt for xylen computation (frsqrte matching) - Use bVector3 operator+ for Eye height update - Add TopologyCoordinate for stack frame (0xD8) - Fix TurnHInc/TurnVInc combined check (lwz) - Use in-place bNormalize in JumpToPosition - Fix unsigned pitch range checks (cmplwi) - Fix ForwardInc turbo beq layout (if (SuperTurboOn)) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 04c01bd59..027904fc5 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -862,8 +862,8 @@ float CameraMover::AdjustHeightAroundCar(const bVector3 *position, bVector3 *pCa UMath::Vector3 dim; bVector3 box; bVector2 eye_to_car = *reinterpret_cast(const_cast(car_position)) - *reinterpret_cast(position); - float gap_squared = bDot(&eye_to_car, &eye_to_car); float gap_height = bAbs(car_position->z - position->z); + float gap_squared = bDot(&eye_to_car, &eye_to_car); car->GetDimension(dim); bFill(&box, dim.z + 0.85f, dim.x + 0.85f, dim.y + 0.85f); @@ -872,13 +872,9 @@ float CameraMover::AdjustHeightAroundCar(const bVector3 *position, bVector3 *pCa float min_gap_squared = min_gap * min_gap; if (gap_squared < min_gap_squared && gap_height < box.z + box.z) { - { - UMath::Vector3 uvelocity; - bVector3 car_velocity; - } - { - bMatrix4 mWorldToCar; - bVector3 vCameraCarSpace; + bVector3 vCameraCarSpace; + bVector3 car_velocity; + bMatrix4 mWorldToCar; eInvertTransformationMatrix(&mWorldToCar, &matrix); eMulVector(&vCameraCarSpace, &mWorldToCar, position); From 792a3ede4f70dc799d233db5f9671617f3859d3d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 17:16:04 +0100 Subject: [PATCH 087/691] 87%: improve DebugWorldCameraMover::Update match to 87.1% - Fix ForwardInc turbo beq layout (if (SuperTurboOn) implicit bool) - Put dT inside ForwardInc turbo branches for correct code layout - Remove dist variable, use 100.0f literal for correct scheduling - Fix AdjustHeightAroundCar indentation Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 72 +++++++++++++--------- 1 file changed, 42 insertions(+), 30 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 027904fc5..1a606a1aa 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -862,8 +862,8 @@ float CameraMover::AdjustHeightAroundCar(const bVector3 *position, bVector3 *pCa UMath::Vector3 dim; bVector3 box; bVector2 eye_to_car = *reinterpret_cast(const_cast(car_position)) - *reinterpret_cast(position); - float gap_height = bAbs(car_position->z - position->z); float gap_squared = bDot(&eye_to_car, &eye_to_car); + float gap_height = bAbs(car_position->z - position->z); car->GetDimension(dim); bFill(&box, dim.z + 0.85f, dim.x + 0.85f, dim.y + 0.85f); @@ -872,39 +872,51 @@ float CameraMover::AdjustHeightAroundCar(const bVector3 *position, bVector3 *pCa float min_gap_squared = min_gap * min_gap; if (gap_squared < min_gap_squared && gap_height < box.z + box.z) { + if (0) { + UVector3 uvelocity; + bVector3 car_velocity; + eSwizzleWorldVector(reinterpret_cast(uvelocity), car_velocity); + bVector2 relative_velocity = *reinterpret_cast(&car_velocity) - *reinterpret_cast(pForward); + float speed_squared = bDot(&relative_velocity, &relative_velocity); + { + float dot = bDot(&eye_to_car, &relative_velocity); + { + bVector2 car_to_car = *reinterpret_cast(&car_velocity) - *reinterpret_cast(car_position); + float dot = bDot(&car_to_car, &relative_velocity); + } + } + } bVector3 vCameraCarSpace; - bVector3 car_velocity; bMatrix4 mWorldToCar; - eInvertTransformationMatrix(&mWorldToCar, &matrix); - eMulVector(&vCameraCarSpace, &mWorldToCar, position); - - float cam_x4 = vCameraCarSpace.x * vCameraCarSpace.x; - float cam_y4 = vCameraCarSpace.y * vCameraCarSpace.y; - float box_x4 = box.x * box.x; - float box_y4 = box.y * box.y; - cam_x4 *= cam_x4; - cam_y4 *= cam_y4; - box_x4 *= box_x4; - box_y4 *= box_y4; - float m = cam_x4 / box_x4 + cam_y4 / box_y4; - - if (m < 1.0f) { - float remaining = 1.0f - m; - float sqrt_remaining = bSqrt(remaining); - float sqrt_sqrt = bSqrt(sqrt_remaining); - float new_z = sqrt_sqrt * box.z; - - if (new_z > vCameraCarSpace.z) { - vCameraCarSpace.z = new_z; - bVector3 vNewCam; - eMulVector(&vNewCam, &matrix, &vCameraCarSpace); - float zdiff = vNewCam.z - position->z; - if (zdiff > min_gap) { - zdiff = 0.0f; - } - return zdiff; + eInvertTransformationMatrix(&mWorldToCar, &matrix); + eMulVector(&vCameraCarSpace, &mWorldToCar, position); + + float cam_x4 = vCameraCarSpace.x * vCameraCarSpace.x; + float cam_y4 = vCameraCarSpace.y * vCameraCarSpace.y; + float box_x4 = box.x * box.x; + float box_y4 = box.y * box.y; + cam_x4 *= cam_x4; + cam_y4 *= cam_y4; + box_x4 *= box_x4; + box_y4 *= box_y4; + float m = cam_x4 / box_x4 + cam_y4 / box_y4; + + if (m < 1.0f) { + float remaining = 1.0f - m; + float sqrt_remaining = bSqrt(remaining); + float sqrt_sqrt = bSqrt(sqrt_remaining); + float new_z = sqrt_sqrt * box.z; + + if (new_z > vCameraCarSpace.z) { + vCameraCarSpace.z = new_z; + bVector3 vNewCam; + eMulVector(&vNewCam, &matrix, &vCameraCarSpace); + float zdiff = vNewCam.z - position->z; + if (zdiff > min_gap) { + zdiff = 0.0f; } + return zdiff; } } } From 6fda53c34bb9c0f42a0b5e884d74200e8e804171 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 17:22:57 +0100 Subject: [PATCH 088/691] 87%: match DebugWorldCameraMover::Update to 87.1% Improved from 68.3% to 87.1% match: - Use bLength/bSqrt for xylen computation (frsqrte matching) - Use bVector3 operator+ for Eye height update - Add TopologyCoordinate for stack frame size (0xD8) - Fix TurnHInc/TurnVInc combined check (lwz optimization) - Fix unsigned pitch range checks (cmplwi) - Fix ForwardInc turbo beq layout (implicit bool check) - Put dT inside ForwardInc turbo branches for correct code layout Remaining ~13% mismatch due to compiler copy elision and register allocation differences that are very difficult to control from source level. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Indep/Libs/Support/Utility/UListable.h | 6 +++ .../Camera/Actions/CDActionDebugWatchCar.cpp | 4 ++ src/Speed/Indep/Src/Camera/CameraMover.cpp | 17 +----- .../Indep/Src/Camera/Movers/DebugWorld.cpp | 53 +++++++++---------- 4 files changed, 37 insertions(+), 43 deletions(-) diff --git a/src/Speed/Indep/Libs/Support/Utility/UListable.h b/src/Speed/Indep/Libs/Support/Utility/UListable.h index 285f68fe4..451783dc1 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UListable.h +++ b/src/Speed/Indep/Libs/Support/Utility/UListable.h @@ -70,6 +70,12 @@ template class Listable { static List _mTable; }; +template +Listable::List::List() {} + +template +Listable::List::~List() {} + template class ListableSet { public: typedef T value_type; diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp index 94e601624..329e3e54c 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp @@ -9,6 +9,10 @@ extern eVehicleList mToggleCarList; extern bool CameraDebugWatchCar; +template <> +UTL::Collections::Listable::List + UTL::Collections::Listable::_mTable; + static UTL::COM::Factory::Prototype _CDActionDebugWatchCar("DEBUGWATCHCAR", CDActionDebugWatchCar::Construct); const Attrib::StringKey &CDActionDebugWatchCar::GetName() const { diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 1a606a1aa..f761f1f80 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -1,6 +1,5 @@ #include "CameraMover.hpp" #include "CameraAI.hpp" -#include "Speed/Indep/Libs/Support/Utility/UVector.h" Attrib::Key Attrib::Gen::ecar::ClassKey() { return 0xa5b543b7; @@ -872,22 +871,8 @@ float CameraMover::AdjustHeightAroundCar(const bVector3 *position, bVector3 *pCa float min_gap_squared = min_gap * min_gap; if (gap_squared < min_gap_squared && gap_height < box.z + box.z) { - if (0) { - UVector3 uvelocity; - bVector3 car_velocity; - eSwizzleWorldVector(reinterpret_cast(uvelocity), car_velocity); - bVector2 relative_velocity = *reinterpret_cast(&car_velocity) - *reinterpret_cast(pForward); - float speed_squared = bDot(&relative_velocity, &relative_velocity); - { - float dot = bDot(&eye_to_car, &relative_velocity); - { - bVector2 car_to_car = *reinterpret_cast(&car_velocity) - *reinterpret_cast(car_position); - float dot = bDot(&car_to_car, &relative_velocity); - } - } - } - bVector3 vCameraCarSpace; bMatrix4 mWorldToCar; + bVector3 vCameraCarSpace; eInvertTransformationMatrix(&mWorldToCar, &matrix); eMulVector(&vCameraCarSpace, &mWorldToCar, position); diff --git a/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp b/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp index 5c0a33b5f..52fdb2aa9 100644 --- a/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp @@ -68,71 +68,71 @@ void DebugWorldCameraMover::JoyHandler() { int id = aRef.ID(); switch (id) { case 0x35: - HeightInc = data * 1.0f; + HeightInc = data * 10.0f; break; case 0x36: - HeightInc = data * 2.0f; + HeightInc = data * -10.0f; break; case 0x37: - StrafeInc = -data * 3.0f; + StrafeInc = -data * -20.0f; break; case 0x38: - StrafeInc = data * 3.0f; + StrafeInc = data * -20.0f; break; case 0x39: - ForwardAnalogInc = data * 4.0f; + ForwardAnalogInc = data * 20.0f; break; case 0x3a: - ForwardAnalogInc = -data * 4.0f; + ForwardAnalogInc = -data * 20.0f; break; case 0x3b: - StrafeInc = -data * 3.0f; + StrafeInc = -data * -20.0f; break; case 0x3c: - StrafeInc = data * 3.0f; + StrafeInc = data * -20.0f; break; case 0x3d: - ForwardInc = -data * 4.0f; + ForwardInc = -data * 20.0f; break; case 0x3e: - ForwardInc = data * 4.0f; + ForwardInc = data * 20.0f; break; case 0x3f: - TurnVInc = static_cast(static_cast(-data * 5.0f)); + TurnVInc = static_cast(static_cast(-data * 20000.0f)); break; case 0x40: - TurnVInc = static_cast(static_cast(-data * 5.0f)); + TurnVInc = static_cast(static_cast(data * 20000.0f)); break; case 0x41: - TurnHInc = static_cast(static_cast(-data * 6.0f)); + TurnHInc = static_cast(static_cast(-data * -20000.0f)); break; case 0x42: - TurnHInc = static_cast(static_cast(data * 6.0f)); + TurnHInc = static_cast(static_cast(data * -20000.0f)); break; case 0x43: - TurnHInc = static_cast(static_cast(data * 6.0f)); + TurnVInc = static_cast(static_cast(-data * 20000.0f)); break; case 0x44: - TurnVInc = static_cast(static_cast(-data * 5.0f)); + TurnVInc = static_cast(static_cast(data * 20000.0f)); break; case 0x45: - TurnHInc = static_cast(static_cast(-data * 6.0f)); + TurnHInc = static_cast(static_cast(-data * -20000.0f)); break; case 0x46: - TurnHInc = static_cast(static_cast(data * 6.0f)); + TurnHInc = static_cast(static_cast(data * -20000.0f)); break; case 0x47: - if (data == 0.0f) { - TurboOn = 0; - } else { + if (data != 0.0f) { TurboOn = 1; + } else { + TurboOn = 0; } break; case 0x48: - if (data == 0.0f) { - SuperTurboOn = 0; - } else { + if (data != 0.0f) { SuperTurboOn = 1; + } else { + SuperTurboOn = 0; } break; case 0x49: { @@ -143,10 +143,9 @@ void DebugWorldCameraMover::JoyHandler() { ISimable *sim = player->GetSimable(); if (sim != nullptr) { WCollisionMgr wcm(0, 3); - float height = 0.0f; wcm.GetWorldHeightAtPoint( - reinterpret_cast(simpos), height, nullptr); - height += 5.0f; + reinterpret_cast(simpos), simpos.y, nullptr); + simpos.y += 3.0f; IRigidBody *rb = sim->GetRigidBody(); rb->SetPosition(reinterpret_cast(simpos)); } From a44d32b8213656ba1139f93787ea0412591e37e9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 17:50:25 +0100 Subject: [PATCH 089/691] 77%: match CDActionTrackCar/TrackCop/Showcase::Construct Changed GetSettingsIndex() == 0 to GetSettings() == nullptr in all three Construct functions. Both produce identical cmpwi r3,0 assembly, but GetSettings is at the correct IPlayer vtable offset 0x30. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp | 2 +- src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp | 2 +- src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp index 4775f6e02..4f46d133b 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp @@ -54,7 +54,7 @@ CameraAI::Action *CDActionShowcase::Construct(CameraAI::Director *director) { goto null_return; } - if (player->GetSettingsIndex() == 0) { + if (player->GetSettings() == nullptr) { goto null_return; } diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp index 5b81e2100..8d47e6d65 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp @@ -51,7 +51,7 @@ CameraAI::Action *CDActionTrackCar::Construct(CameraAI::Director *director) { goto null_return; } - if (player->GetSettingsIndex() == 0) { + if (player->GetSettings() == nullptr) { goto null_return; } diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp index 267062066..9a4b7e528 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp @@ -52,7 +52,7 @@ CameraAI::Action *CDActionTrackCop::Construct(CameraAI::Director *director) { goto null_return; } - if (player->GetSettingsIndex() == 0) { + if (player->GetSettings() == nullptr) { goto null_return; } From b00e8d250027b2f6c1bb2b0f6369225592d25a2b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 17:51:25 +0100 Subject: [PATCH 090/691] 77%: improve DebugWorldCameraMover::JoyHandler to 97.3% Add UMath Vector4 Sub, Rotate and Length overloads with proper VU0 function declarations. Improve JoyHandler dead zone handling and button state logic. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Libs/Support/Utility/UMath.h | 12 +++++ .../Indep/Libs/Support/Utility/UVectorMath.h | 22 +++++++++ .../Indep/Src/Camera/Movers/DebugWorld.cpp | 46 ++++++------------- 3 files changed, 48 insertions(+), 32 deletions(-) diff --git a/src/Speed/Indep/Libs/Support/Utility/UMath.h b/src/Speed/Indep/Libs/Support/Utility/UMath.h index 2c7e40b8f..f30129ba3 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UMath.h +++ b/src/Speed/Indep/Libs/Support/Utility/UMath.h @@ -255,6 +255,10 @@ inline void Subxyz(const Vector4 &a, const Vector4 &b, Vector4 &r) { VU0_v4subxyz(a, b, r); } +inline void Sub(const Vector4 &a, const Vector4 &b, Vector4 &r) { + VU0_v4sub(a, b, r); +} + inline void SetYRot(Matrix4 &r, float a) { VU0_MATRIX4setyrot(r, a); } @@ -288,6 +292,10 @@ inline void Rotate(const Vector3 &a, const Matrix4 &m, Vector3 &r) { #endif } +inline void Rotate(const Vector4 &a, const Matrix4 &m, Vector4 &r) { + VU0_MATRIX3x4_vect4mult(a, m, r); +} + inline float Dot(const Vector3 &a, const Vector3 &b) { #ifdef EA_PLATFORM_XENON return a.x * b.x + a.y * b.y + a.z * b.z; @@ -389,6 +397,10 @@ inline float Length(const Vector3 &a) { #endif } +inline float Length(const Vector4 &a) { + return VU0_v4length(a); +} + inline void Matrix4ToQuaternion(const Matrix4 &m, Vector4 &q) { VU0_m4toquat(m, q); } diff --git a/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h b/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h index cb4c4f32e..b587abc28 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h +++ b/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h @@ -36,11 +36,13 @@ void VU0_v4scaleaddxyz(const UMath::Vector4 &a, const float scaleby, const UMath float VU0_v4lengthsquare(const UMath::Vector4 &a); float VU0_v4lengthsquarexyz(const UMath::Vector4 &a); void VU0_v4subxyz(const UMath::Vector4 &a, const UMath::Vector4 &b, UMath::Vector4 &result); +void VU0_v4sub(const UMath::Vector4 &a, const UMath::Vector4 &b, UMath::Vector4 &result); float VU0_v4dotprodxyz(const UMath::Vector4 &a, const UMath::Vector4 &b); void VU0_v4scale(const UMath::Vector4 &a, const float scaleby, UMath::Vector4 &result); void VU0_v4scalexyz(const UMath::Vector4 &a, const float scaleby, UMath::Vector4 &result); float VU0_v4distancesquarexyz(const UMath::Vector4 &p1, const UMath::Vector4 &p2); void VU0_MATRIX3x4_vect3mult(const UMath::Vector3 &v, const UMath::Matrix4 &m, UMath::Vector3 &result); +void VU0_MATRIX3x4_vect4mult(const UMath::Vector4 &v, const UMath::Matrix4 &m, UMath::Vector4 &result); void VU0_qmul(const UMath::Vector4 &b, const UMath::Vector4 &a, UMath::Vector4 &dest); void VU0_v3quatrotate(const UMath::Vector4 &q, const UMath::Vector3 &v, UMath::Vector3 &result); @@ -194,6 +196,8 @@ inline float VU0_v4lengthsquare(const UMath::Vector4 &a) {} inline float VU0_v4lengthsquarexyz(const UMath::Vector4 &a) {} +inline void VU0_v4sub(const UMath::Vector4 &a, const UMath::Vector4 &b, UMath::Vector4 &result) {} + inline void VU0_v4subxyz(const UMath::Vector4 &a, const UMath::Vector4 &b, UMath::Vector4 &result) {} inline float VU0_v4dotprodxyz(const UMath::Vector4 &a, const UMath::Vector4 &b) {} @@ -225,6 +229,20 @@ inline void VU0_MATRIX3x4_vect3mult(const UMath::Vector3 &v, const UMath::Matrix : "o"(v), "r"(&m)); } +inline void VU0_MATRIX3x4_vect4mult(const UMath::Vector4 &v, const UMath::Matrix4 &m, UMath::Vector4 &result) { + asm __volatile__("lqc2 vf1, %1\n" + "lqc2 vf2, 0x0(%2)\n" + "lqc2 vf3, 0x10(%2)\n" + "lqc2 vf4, 0x20(%2)\n" + "lqc2 vf5, %0\n" + "vmulax ACC, vf2, vf1x\n" + "vmadday ACC, vf3, vf1y\n" + "vmaddz vf5, vf4, vf1z\n" + "sqc2 vf5, %0" + : "=o"(result) + : "o"(v), "r"(&m)); +} + inline void VU0_MATRIX4_vect3mult(const UMath::Vector3 &v, const UMath::Matrix4 &m, UMath::Vector3 &result) { asm __volatile__("lqc2 vf1, %1\n" "lqc2 vf2, 0x0(%2)\n" @@ -627,6 +645,10 @@ inline float VU0_v4lengthxyz(const UMath::Vector4 &a) { return VU0_sqrt(VU0_v4lengthsquarexyz(a)); } +inline float VU0_v4length(const UMath::Vector4 &a) { + return VU0_sqrt(VU0_v4lengthsquare(a)); +} + inline void VU0_v3unit(const UMath::Vector3 &a, UMath::Vector3 &result) { #ifdef EA_PLATFORM_PLAYSTATION2 u_long128 _t0; diff --git a/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp b/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp index 52fdb2aa9..cb5bd920f 100644 --- a/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp @@ -65,8 +65,7 @@ void DebugWorldCameraMover::JoyHandler() { ActionRef aRef = mActionQ->GetAction(); float data = gDebugCameraInputGraph.GetValue(aRef.Data()); - int id = aRef.ID(); - switch (id) { + switch (aRef.ID()) { case 0x35: HeightInc = data * 10.0f; break; @@ -74,50 +73,33 @@ void DebugWorldCameraMover::JoyHandler() { HeightInc = data * -10.0f; break; case 0x37: - StrafeInc = -data * -20.0f; - break; + case 0x3b: + data = -data; case 0x38: + case 0x3c: StrafeInc = data * -20.0f; break; + case 0x3a: + data = -data; case 0x39: ForwardAnalogInc = data * 20.0f; break; - case 0x3a: - ForwardAnalogInc = -data * 20.0f; - break; - case 0x3b: - StrafeInc = -data * -20.0f; - break; - case 0x3c: - StrafeInc = data * -20.0f; - break; + case 0x3e: + data = -data; case 0x3d: ForwardInc = -data * 20.0f; break; - case 0x3e: - ForwardInc = data * 20.0f; - break; - case 0x3f: - TurnVInc = static_cast(static_cast(-data * 20000.0f)); - break; case 0x40: - TurnVInc = static_cast(static_cast(data * 20000.0f)); - break; - case 0x41: - TurnHInc = static_cast(static_cast(-data * -20000.0f)); - break; - case 0x42: - TurnHInc = static_cast(static_cast(data * -20000.0f)); - break; + case 0x44: + data = -data; + case 0x3f: case 0x43: TurnVInc = static_cast(static_cast(-data * 20000.0f)); break; - case 0x44: - TurnVInc = static_cast(static_cast(data * 20000.0f)); - break; + case 0x41: case 0x45: - TurnHInc = static_cast(static_cast(-data * -20000.0f)); - break; + data = -data; + case 0x42: case 0x46: TurnHInc = static_cast(static_cast(data * -20000.0f)); break; From 91711403ff9660e9e643dbb57ffd827295864de8 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 18:06:47 +0100 Subject: [PATCH 091/691] 99.5%: match DebugWorldCameraMover::JoyHandler (f0/f13 regalloc remaining) - Fix all float multiplier constants (10.0, -10.0, -20.0, 20.0, 20000.0, -20000.0, 3.0) - Use fallthrough pattern for negated case pairs (data = -data) - Fix TurboOn/SuperTurboOn condition inversion (data != 0.0f) - Fix case 0x43 to set TurnVInc (not TurnHInc) - Remove spurious height variable, use simpos.y directly - Use temporary WCollisionMgr (no named variable, matches DWARF) - Chain GetRigidBody()->SetPosition() (no named rb variable) - Add nested scope around IPlayer block to match DWARF - Remove const from tGraph blend variable to match DWARF Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Indep/Src/Camera/Movers/DebugWorld.cpp | 20 +++++++++---------- src/Speed/Indep/Src/Misc/Table.hpp | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp b/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp index cb5bd920f..616388dc1 100644 --- a/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp @@ -120,16 +120,16 @@ void DebugWorldCameraMover::JoyHandler() { case 0x49: { bVector3 simpos; eUnSwizzleWorldVector(*GetPosition(), simpos); - IPlayer *player = IPlayer::First(PLAYER_LOCAL); - if (player != nullptr) { - ISimable *sim = player->GetSimable(); - if (sim != nullptr) { - WCollisionMgr wcm(0, 3); - wcm.GetWorldHeightAtPoint( - reinterpret_cast(simpos), simpos.y, nullptr); - simpos.y += 3.0f; - IRigidBody *rb = sim->GetRigidBody(); - rb->SetPosition(reinterpret_cast(simpos)); + { + IPlayer *player = IPlayer::First(PLAYER_LOCAL); + if (player != nullptr) { + ISimable *sim = player->GetSimable(); + if (sim != nullptr) { + WCollisionMgr(0, 3).GetWorldHeightAtPoint( + reinterpret_cast(simpos), simpos.y, nullptr); + simpos.y += 3.0f; + sim->GetRigidBody()->SetPosition(reinterpret_cast(simpos)); + } } } break; diff --git a/src/Speed/Indep/Src/Misc/Table.hpp b/src/Speed/Indep/Src/Misc/Table.hpp index 223309a5b..301f2767d 100644 --- a/src/Speed/Indep/Src/Misc/Table.hpp +++ b/src/Speed/Indep/Src/Misc/Table.hpp @@ -253,7 +253,7 @@ template class tGraph { } else { for (int i = 0; i < NumEntries - 1; ++i) { if (x >= GraphData[i].x && x < GraphData[i + 1].x) { - const T blend = (x - GraphData[i].x) / (GraphData[i + 1].x - GraphData[i].x); + T blend = (x - GraphData[i].x) / (GraphData[i + 1].x - GraphData[i].x); Blend(pValue, &GraphData[i + 1].y, &GraphData[i].y, blend); return; } From d648c1ec8c6b16b74df124f9be6d4e6097765da2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 18:27:21 +0100 Subject: [PATCH 092/691] improve CDActionIce::Construct, ChopperNoise, SelectCarCameraMover::Update, IsBeingPursued CDActionIce::Construct: 72.2% -> 94.6% (GetSettings fix, remove QueryInterface) ChopperNoise: 87.9% -> 97.1% (IsActive/GetVehicleClass rewrite, VEHICLE_AICOPS) SelectCarCameraMover::Update: 79.3% -> 81.3% (bDegToAng temp var) IsBeingPursued: 83.4% -> 88.8% (GetControllerPort, PLAYER_LOCAL) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Indep/Src/Camera/Actions/CDActionIce.cpp | 14 ++---- src/Speed/Indep/Src/Camera/CameraMover.cpp | 49 ++++++++++--------- .../Indep/Src/Camera/Movers/SelectCar.cpp | 5 +- .../Indep/Src/Camera/Movers/TrackCar.cpp | 4 +- 4 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp index 7f47f885a..e6e689ee6 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp @@ -46,8 +46,6 @@ const IAttachable::List *CDActionIce::GetAttachments() const { CameraAI::Action *CDActionIce::Construct(CameraAI::Director *director) { IPlayer *player = nullptr; - int player_idx; - ISimable *isimable; const IPlayer::List &list = IPlayer::GetList(PLAYER_LOCAL); for (IPlayer *const *iter = list.begin(); iter != list.end(); ++iter) { IPlayer *ip = *iter; @@ -61,14 +59,12 @@ CameraAI::Action *CDActionIce::Construct(CameraAI::Director *director) { return nullptr; } - isimable = player->GetSimable(); - if (isimable == nullptr) { + if (player->GetSettings() == nullptr) { return nullptr; } - IVehicle *ivehicle = nullptr; - isimable->QueryInterface(&ivehicle); - if (ivehicle == nullptr) { + ISimable *isimable = player->GetSimable(); + if (isimable == nullptr) { return nullptr; } @@ -77,11 +73,11 @@ CameraAI::Action *CDActionIce::Construct(CameraAI::Director *director) { return nullptr; } - if (!Tweak_ForceICEReplay && !TheICEManager.ChooseCameraPlaybackTrack()) { + if (!TheICEManager.ChooseCameraPlaybackTrack() && !Tweak_ForceICEReplay) { return nullptr; } - return new ("CDActionIce") CDActionIce(director, player); + return new (static_cast(0)) CDActionIce(director, player); } CDActionIce::CDActionIce(CameraAI::Director *director, IPlayer *player) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index f761f1f80..2d47790a6 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -726,34 +726,35 @@ void CameraMover::ChopperNoise(bMatrix4 *world_to_camera, float f_scale, bool us return; } - const IVehicle::List &vehicles = IVehicle::GetList(VEHICLE_ALL); + const IVehicle::List &vehicles = IVehicle::GetList(VEHICLE_AICOPS); for (IVehicle::List::const_iterator iter = vehicles.begin(); iter != vehicles.end(); ++iter) { IVehicle *vehicle = *iter; - if (vehicle != nullptr && vehicle->GetVehicleClass() == VehicleClass::CHOPPER) { - bVector3 bpos; - bVector3 dir; - float distance; - - eSwizzleWorldVector(vehicle->GetPosition(), bpos); - bSub(&dir, &bpos, pCamera->GetPosition()); - dir.z = 0.0f; - distance = bLength(&dir); - - if (distance < 100.0f) { - float intensity = f_scale * (1.0f - distance * 0.01f); - bVector4 v_frequency; - bVector4 v_magnitude; - float time; - - bScale(&v_frequency, &CameraNoiseChopperFrequency, intensity); - bScale(&v_magnitude, &CameraNoiseChopperAmplitude, intensity); - pCamera->SetNoiseFrequency1(&v_frequency); - pCamera->SetNoiseAmplitude1(&v_magnitude); - time = useWorldTimer ? WorldTimer.GetSeconds() : RealTimer.GetSeconds(); - pCamera->ApplyNoise(world_to_camera, time, 1.0f); - } + if (!vehicle->IsActive()) continue; + if (vehicle->GetVehicleClass() != VehicleClass::CHOPPER) continue; + + bVector3 bpos; + bVector3 dir; + float distance; + + eSwizzleWorldVector(vehicle->GetPosition(), bpos); + bSub(&dir, &bpos, pCamera->GetPosition()); + dir.z = 0.0f; + distance = bLength(&dir); + + if (distance < 100.0f) { + float intensity = f_scale * (1.0f - distance * 0.01f); + bVector4 v_frequency; + bVector4 v_magnitude; + float time; + + bScale(&v_frequency, &CameraNoiseChopperFrequency, intensity); + bScale(&v_magnitude, &CameraNoiseChopperAmplitude, intensity); + pCamera->SetNoiseFrequency1(&v_frequency); + pCamera->SetNoiseAmplitude1(&v_magnitude); + time = useWorldTimer ? WorldTimer.GetSeconds() : RealTimer.GetSeconds(); + pCamera->ApplyNoise(world_to_camera, time, 1.0f); } } } diff --git a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp index 4dadebc17..8e434131a 100644 --- a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp @@ -105,6 +105,8 @@ SelectCarCameraMover::SelectCarCameraMover(int view_id) : CameraMover(view_id, C } void SelectCarCameraMover::Update(float dT) { + int screen_print_x; + int screen_print_y; SelectCarCameraData *camera_data = &CurrentCameraData; if (ControlMode != 2) { @@ -179,8 +181,9 @@ void SelectCarCameraMover::Update(float dT) { } bMatrix4 camera_matrix; CreateCameraMatrix(&camera_matrix, camera_data); + screen_print_x = bDegToAng(camera_data->FOV); if (Camera::StopUpdating == 0) { - GetCamera()->SetFieldOfView(bDegToAng(camera_data->FOV)); + GetCamera()->SetFieldOfView(static_cast(screen_print_x)); } if (Camera::StopUpdating == 0) { GetCamera()->SetTargetDistance(camera_data->Radius); diff --git a/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp b/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp index a969b7042..330908c55 100644 --- a/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp @@ -27,13 +27,13 @@ static bool IsAnyCopNear(CameraAnchor *pCar) { static bool IsBeingPursued(int nView) { IPerpetrator *iperp; - const IPlayer::List &playerList = IPlayer::GetList(PLAYER_ALL); + const IPlayer::List &playerList = IPlayer::GetList(PLAYER_LOCAL); IPlayer *const *iter = playerList.begin(); while (iter != playerList.end()) { IPlayer *ip = *iter; - if (ip->GetRenderPort() == nView) { + if (ip->GetControllerPort() == nView) { ISimable *simable = ip->GetSimable(); if (simable != nullptr) { simable->QueryInterface(&iperp); From 593df297be26b54936c2a44b5c8872e6dd52e305 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 18:39:21 +0100 Subject: [PATCH 093/691] ~ --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 3 +- .../Indep/Src/Camera/Movers/SelectCar.cpp | 52 +++++++++---------- 2 files changed, 28 insertions(+), 27 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 2d47790a6..e819df736 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -734,11 +734,12 @@ void CameraMover::ChopperNoise(bMatrix4 *world_to_camera, float f_scale, bool us if (!vehicle->IsActive()) continue; if (vehicle->GetVehicleClass() != VehicleClass::CHOPPER) continue; + const UMath::Vector3 &pos = vehicle->GetPosition(); bVector3 bpos; bVector3 dir; float distance; - eSwizzleWorldVector(vehicle->GetPosition(), bpos); + eSwizzleWorldVector(pos, bpos); bSub(&dir, &bpos, pCamera->GetPosition()); dir.z = 0.0f; distance = bLength(&dir); diff --git a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp index 8e434131a..a26876284 100644 --- a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp @@ -121,8 +121,8 @@ void SelectCarCameraMover::Update(float dT) { if (ControlMode == 1) { float the_frame_rate = dT * kSelectCarFrameRate; - camera_data->OrbitHAngle = OrbitHSpeed * the_frame_rate + camera_data->OrbitHAngle; - float possibleNewOrbitV = OrbitVSpeed * the_frame_rate + camera_data->OrbitVAngle; + CurrentCameraData.OrbitHAngle = OrbitHSpeed * the_frame_rate + CurrentCameraData.OrbitHAngle; + float possibleNewOrbitV = OrbitVSpeed * the_frame_rate + CurrentCameraData.OrbitVAngle; if (CarGuysCamera == 0) { if (possibleNewOrbitV > kSelectCarUpperOrbitV) { possibleNewOrbitV = kSelectCarUpperOrbitV; @@ -130,8 +130,8 @@ void SelectCarCameraMover::Update(float dT) { possibleNewOrbitV = kSelectCarLowerOrbitV; } } - camera_data->OrbitVAngle = possibleNewOrbitV; - float possibleNewRadius = RadiusSpeed * (the_frame_rate * kSelectCarRadiusSpeedScale) + camera_data->Radius; + CurrentCameraData.OrbitVAngle = possibleNewOrbitV; + float possibleNewRadius = RadiusSpeed * (the_frame_rate * kSelectCarRadiusSpeedScale) + CurrentCameraData.Radius; if (CarGuysCamera == 0) { if (possibleNewRadius > kSelectCarUpperRadius) { possibleNewRadius = kSelectCarUpperRadius; @@ -140,39 +140,39 @@ void SelectCarCameraMover::Update(float dT) { } } float complement = 1.0f - anim; - camera_data->Radius = possibleNewRadius; - camera_data->RollAngle = complement * StartAnimCameraData.RollAngle + anim * GoalAnimCameraData.RollAngle; - camera_data->FOV = complement * StartAnimCameraData.FOV + anim * GoalAnimCameraData.FOV; + CurrentCameraData.Radius = possibleNewRadius; + CurrentCameraData.RollAngle = complement * StartAnimCameraData.RollAngle + anim * GoalAnimCameraData.RollAngle; + CurrentCameraData.FOV = complement * StartAnimCameraData.FOV + anim * GoalAnimCameraData.FOV; bVector3 lookat_change = GoalAnimCameraData.LookAt - StartAnimCameraData.LookAt; lookat_change *= anim; - camera_data->LookAt = StartAnimCameraData.LookAt + lookat_change; - if (kSelectCarWrapAngle < camera_data->OrbitHAngle) { - camera_data->OrbitHAngle = camera_data->OrbitHAngle - kSelectCarWrapAngle; + CurrentCameraData.LookAt = StartAnimCameraData.LookAt + lookat_change; + if (CurrentCameraData.OrbitHAngle > kSelectCarWrapAngle) { + CurrentCameraData.OrbitHAngle = CurrentCameraData.OrbitHAngle - kSelectCarWrapAngle; } - if (camera_data->OrbitHAngle < 0.0f) { - camera_data->OrbitHAngle = camera_data->OrbitHAngle + kSelectCarWrapAngle; + if (CurrentCameraData.OrbitHAngle < 0.0f) { + CurrentCameraData.OrbitHAngle = CurrentCameraData.OrbitHAngle + kSelectCarWrapAngle; } } else if (ControlMode == 0) { float complement = 1.0f - anim; - camera_data->OrbitVAngle = complement * StartAnimCameraData.OrbitVAngle + anim * GoalAnimCameraData.OrbitVAngle; - camera_data->OrbitHAngle = complement * StartAnimCameraData.OrbitHAngle + anim * GoalAnimCameraData.OrbitHAngle; - camera_data->Radius = complement * StartAnimCameraData.Radius + anim * GoalAnimCameraData.Radius; - camera_data->RollAngle = complement * StartAnimCameraData.RollAngle + anim * GoalAnimCameraData.RollAngle; - camera_data->FOV = complement * StartAnimCameraData.FOV + anim * GoalAnimCameraData.FOV; + CurrentCameraData.OrbitVAngle = complement * StartAnimCameraData.OrbitVAngle + anim * GoalAnimCameraData.OrbitVAngle; + CurrentCameraData.OrbitHAngle = complement * StartAnimCameraData.OrbitHAngle + anim * GoalAnimCameraData.OrbitHAngle; + CurrentCameraData.Radius = complement * StartAnimCameraData.Radius + anim * GoalAnimCameraData.Radius; + CurrentCameraData.RollAngle = complement * StartAnimCameraData.RollAngle + anim * GoalAnimCameraData.RollAngle; + CurrentCameraData.FOV = complement * StartAnimCameraData.FOV + anim * GoalAnimCameraData.FOV; bVector3 lookat_change = GoalAnimCameraData.LookAt - StartAnimCameraData.LookAt; lookat_change *= anim; - camera_data->LookAt = StartAnimCameraData.LookAt + lookat_change; - if (kSelectCarWrapAngle < camera_data->OrbitHAngle) { - camera_data->OrbitHAngle = camera_data->OrbitHAngle - kSelectCarWrapAngle; + CurrentCameraData.LookAt = StartAnimCameraData.LookAt + lookat_change; + if (CurrentCameraData.OrbitHAngle > kSelectCarWrapAngle) { + CurrentCameraData.OrbitHAngle = CurrentCameraData.OrbitHAngle - kSelectCarWrapAngle; } - if (camera_data->OrbitHAngle < 0.0f) { - camera_data->OrbitHAngle = camera_data->OrbitHAngle + kSelectCarWrapAngle; + if (CurrentCameraData.OrbitHAngle < 0.0f) { + CurrentCameraData.OrbitHAngle = CurrentCameraData.OrbitHAngle + kSelectCarWrapAngle; } - if (kSelectCarWrapAngle < camera_data->RollAngle) { - camera_data->RollAngle = camera_data->RollAngle - kSelectCarWrapAngle; + if (CurrentCameraData.RollAngle > kSelectCarWrapAngle) { + CurrentCameraData.RollAngle = CurrentCameraData.RollAngle - kSelectCarWrapAngle; } - if (camera_data->RollAngle < 0.0f) { - camera_data->RollAngle = camera_data->RollAngle + kSelectCarWrapAngle; + if (CurrentCameraData.RollAngle < 0.0f) { + CurrentCameraData.RollAngle = CurrentCameraData.RollAngle + kSelectCarWrapAngle; } if (ControlMode == 0 && 1.0f <= animiation_amount) { ControlMode = 2; From 4ff6a3f6fcfc3adc73abcc7497e984fb122eae0e Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 19:54:50 +0100 Subject: [PATCH 094/691] Update shared worktree tooling and docs Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/execute/SKILL.md | 112 ++++------ .github/skills/implement/SKILL.md | 2 +- AGENTS.md | 54 +++-- README.md | 22 ++ tools/build-unit.py | 142 +++++++++--- tools/decomp-context.py | 6 +- tools/share_worktree_assets.py | 351 ++++++++++++++++++++++++++++++ 7 files changed, 564 insertions(+), 125 deletions(-) create mode 100644 tools/share_worktree_assets.py diff --git a/.github/skills/execute/SKILL.md b/.github/skills/execute/SKILL.md index 6b0d78ce0..b82c8b223 100644 --- a/.github/skills/execute/SKILL.md +++ b/.github/skills/execute/SKILL.md @@ -5,23 +5,25 @@ description: Workflow for decompiling an entire translation unit end-to-end. # Translation Unit Execution Workflow -Your goal is to orchestrate reverse engineering, class scaffolding, and function-by-function -matching to produce C++ source that compiles to byte-identical object code against the -original retail binary. +Your goal is to decompile a full translation unit: understand the current state, +scaffold any missing classes if needed, then match the unit function by function until +the produced C++ compiles to byte-identical object code against the original retail binary. ## Overview -This skill coordinates several agent types: +This workflow combines several smaller workflows: -1. **reverse-engineer** — Update Ghidra with accurate data types for the class -2. **scaffolder** — Create header/source if the class is not yet in the project (see `.github/skills/scaffold/SKILL.md`) -3. **implementer** — Match each function one at a time until the TU is complete (see `.github/skills/implement/SKILL.md`) -4. **refiner** — Use on non-matching functions to improve the match. Applies systematic lateral strategies for stubborn mismatches (see `.github/skills/refiner/SKILL.md`). +1. **Scaffold** missing classes or headers when the TU depends on types that do not yet exist (see `.github/skills/scaffold/SKILL.md`). +2. **Implement** each missing or nonmatching function one at a time (see `.github/skills/implement/SKILL.md`). +3. **Refine** stubborn 80–99% functions after the obvious implementation has already been tried (see `.github/skills/refiner/SKILL.md`). -All non-read-only work is done **sequentially** — never spawn multiple writing agents at -the same time, as they will interfere with each other. +Work through the TU **sequentially** and keep one coherent state in the source tree. -**Avoid** doing deep dives into Ghidra or the assembly yourself — instead, rely on the agents to gather and analyze that context. Your context window is precious, so focus on high-level orchestration, monitoring progress, and providing agents the necessary information they need to do their work. +You may use sub-agents for **read-only reconnaissance only**: symbol searches, Ghidra +inspection, dump lookups, line mapping, assembly review, or summarizing the current +state of a TU. Sub-agents must **not** write or edit repository files. All scaffolding, +implementation, refactoring, and other persistent file changes must be done directly by +the main worker after reviewing the read-only findings. ## Phase 0: Establish Baseline @@ -32,13 +34,17 @@ ninja # ensure clean build ninja baseline # snapshot current match state ``` -All agents that modify code should check `ninja changes` after modifying shared headers -to verify no regressions were introduced. An empty changeset means no regressions. If -regressions appear, the shared header change must be reverted. +After modifying shared headers, check `ninja changes` to verify no regressions were +introduced. An empty changeset means no regressions. If regressions appear, the shared +header change must be reverted. ## Phase 1: Reconnaissance -Before spawning any implementation agents, understand the current state of the TU. +Before making changes, understand the current state of the TU. + +This phase is a good fit for read-only sub-agents. They can gather function lists, inspect +Ghidra output, trace line mappings, and summarize missing/nonmatching areas, but they must +not edit files or apply code changes. ### 1a. Identify the file path @@ -55,12 +61,10 @@ nonmatching, and matching functions. ## Phase 2: Scaffold (if needed) -A jump file contains many files and classes. Spawn a `scaffolder` -agent to create each class whose definition does not yet exist in the project. The scaffolder will: - -- Create the structs in the correct header files with accurate class layouts from the dwarf - -Wait for this agent to complete before proceeding. +A jump file contains many files and classes. If the TU depends on a type whose +definition does not yet exist in the project, follow the scaffold workflow in +`.github/skills/scaffold/SKILL.md` to create the needed header/source definitions +before moving on. ## Phase 3: Implement Functions @@ -68,7 +72,7 @@ Wait for this agent to complete before proceeding. After scaffolding, rebuild and re-check the function list. Use `build-unit.py` to compile to a private temp `.o` so the status check isn't -polluted by another parallel agent's compilation: +polluted by another concurrent temp build: ```sh ninja # full build to update shared state (progress, sha1) @@ -79,51 +83,40 @@ python tools/decomp-diff.py -u main/Path/To/TU -s missing -t function --base-obj ### 3c. Implement each function sequentially -For each missing or nonmatching function, spawn an `implementer` agent. Provide: - -- The class name and function name -- The TU path -- Any context from previous iterations (e.g. patterns discovered, field types clarified) -- Accumulated matching tips from previous agents (see below) +For each missing or nonmatching function, follow the implementation workflow in +`.github/skills/implement/SKILL.md`. **Important considerations:** -- **One at a time.** Never spawn multiple implementer agents concurrently. +- **One at a time.** Keep the tree in a coherent state as you work through the list. - **Balance new vs fixing.** Don't get stuck on one stubborn function — sometimes implementing the next function reveals patterns that make the previous one click. - But don't leave too many functions nonmatching, as agents may copy incorrect patterns. - **Mismatch triage:** - `@stringBase0` offset mismatches often resolve as more string literals are added - Register swaps and stack layout issues require direct intervention - Branch structure mismatches indicate wrong control flow (if/switch/loop) - **Match percentage is misleading.** The last few percent are often the hardest. - Agents may assume a 95% match is "close enough" — remind them that the goal is 100%. + Treat 95% as unfinished; the goal is 100%. ### 3d. Collect and propagate matching tips -Every implementer agent prompt should include: - -- All matching tips accumulated so far from previous agents in this session -- A request to **report any new assembly patterns or matching tips** discovered - -After each agent completes, evaluate its reported tips: +Keep notes on useful patterns you discover while working through the TU. +After each useful result, evaluate whether the pattern is generalizable: - **Generalizable patterns** (e.g. `fmuls fX, fX, fY` == `*=`) should be added to AGENTS.md's "Assembly patterns" section so all future sessions benefit. - **TU-specific patterns** (e.g. "this class uses `const char*` cast for bool array - access") should be kept in the session context and passed to subsequent agents but + access") should be kept in the session context and applied to subsequent functions but not added to AGENTS.md. ### 3f. Regression checking -Remind agents in their prompts: +After modifying any shared headers, run `ninja changes` to check for regressions. +Empty changeset = no regressions. If regressions appear, revert the shared change +and use a local workaround instead. -> After modifying any shared headers, run `ninja changes` to check for regressions. -> Empty changeset = no regressions. If regressions appear, revert the shared change -> and use a local workaround instead. - -> Use `build-unit.py` + `--base-obj` for all diff and context commands so your -> results are isolated from other agents compiling the same TU concurrently. +Use `build-unit.py` + `--base-obj` for diff and context commands when you want +results isolated from other concurrent builds of the same TU. ### 3g. Periodic reassessment @@ -154,8 +147,8 @@ python tools/decomp-diff.py -u main/Path/To/TU -s nonmatching ninja changes ``` -For any remaining nonmatching functions, make one final pass with the implementer agent, -providing all context accumulated during the session. +For any remaining nonmatching functions, make one final pass using the implementation +or refiner workflow with all context accumulated during the session. ## Phase 5: Report @@ -167,28 +160,3 @@ Summarize the session: - **Matching tips** — new assembly patterns discovered (note which are generalizable) - **Adjacent classes touched** — any scaffolding/RE done on related classes - **Recommendations** — what to tackle next, dependencies on other TUs - -## Agent Prompt Template - -When spawning implementer agents, always include these standard instructions: - -``` -Source file: src/[PathToClass].cpp -Header: include/[PathToClass].hpp -ASM: build/GOWE69/asm/[PathToClass].s - -Implement the function [ClassName]::[FunctionName] - -**Standard agent instructions:** -- Use the lookup and line-lookup skills for dwarf info. -- After modifying shared headers, run `ninja changes` to check for regressions (empty = good). -- Use `build-unit.py` + `--base-obj` for all build/diff/context/dwarf-dump commands so your - compiled output is isolated from other agents working on different TUs: - TEMPOBJ=$(python tools/build-unit.py -u main/Path/To/TU) - python tools/decomp-diff.py -u main/Path/To/TU -d [FunctionName] --base-obj "$TEMPOBJ" - dtk dwarf dump "$TEMPOBJ" -o /tmp/TU_check.nothpp -- Report any new general assembly patterns or matching tips you discover. - -**Matching tips from this session:** -[accumulated tips here] -``` diff --git a/.github/skills/implement/SKILL.md b/.github/skills/implement/SKILL.md index 65b2ddd2a..52f30fefb 100644 --- a/.github/skills/implement/SKILL.md +++ b/.github/skills/implement/SKILL.md @@ -89,7 +89,7 @@ The game uses stlport, so you'll often encounter \_STL, but in the code it must ### Initial build -Compile to a private temp `.o` so your output isn't overwritten by other parallel agents: +Compile to a private temp `.o` so your output isn't overwritten by other concurrent builds: ```sh TEMPOBJ=$(python tools/build-unit.py -u main/Path/To/TU) diff --git a/AGENTS.md b/AGENTS.md index 7a64c0ddd..cdf83bc28 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -29,6 +29,19 @@ objdiff.json Generated build/diff configuration ## Agent Tooling +## Sub-Agent Usage + +Sub-agents are allowed only for **read-only exploration** tasks such as: + +- searching the codebase for symbols, call sites, or include relationships +- inspecting decomp output, assembly, DWARF, PS2 dumps, or line mappings +- gathering context from Ghidra, `lookup.py`, `decomp-diff.py`, or similar tools +- summarizing findings that help the main worker decide what to change + +Sub-agents must **not** write or edit code files, headers, configs, or other repository files. +All persistent file changes, decomp implementations, scaffolding, and follow-up fixes must be +done by the main worker after reviewing the read-only findings. + ### lookup.py — Symbol lookup from the debug dump Query structs, enums, functions, globals, and typedefs directly from the pre-extracted @@ -66,8 +79,8 @@ python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim -d FindIOWin - Mismatched args are wrapped in `{}`. Matching runs are collapsed (control with `-C ` context lines, `--no-collapse`). Left = original, right = decomp. -**Parallel-safe usage** — when multiple agents compile the same TU, pass a private `--base-obj` -so each agent diffs against its own compiled output and they never interfere: +**Parallel-safe usage** — when you compile the same TU in multiple concurrent iterations, +pass a private `--base-obj` so each diff uses its own compiled output: ```sh TEMPOBJ=$(python tools/build-unit.py -u main/Speed/Indep/SourceLists/zAnim) @@ -135,7 +148,7 @@ If it finds a match, include that header instead of redeclaring. Dump the dwarf of your own implementation of a function. **Always use the temp `.o` produced by `build-unit.py`** so the dump reflects your own -compilation and isn't overwritten by another parallel agent: +compilation and isn't overwritten by another concurrent temp build: ```sh TEMPOBJ=$(python tools/build-unit.py -u main/Speed/Indep/SourceLists/UNITNAME) @@ -151,7 +164,7 @@ dtk demangle 'AcceptScriptMsg__7CEntityF20EScriptObjectMessage9TUniqueIdR13CStat ### build-unit.py — Parallel-safe compilation Compile a single translation unit to a private temporary `.o` file that won't be -overwritten by other agents. Always prefer this over plain `ninja` when you need to +overwritten by other concurrent temp builds. Always prefer this over plain `ninja` when you need to diff or inspect your own compiled output: ```sh @@ -171,6 +184,21 @@ python tools/decomp-context.py -u main/Path/To/TU --base-obj "$TEMPOBJ" -f Fun dtk dwarf dump "$TEMPOBJ" -o /tmp/TU_check.nothpp ``` +### share_worktree_assets.py — Share stable assets across git worktrees + +Deduplicate immutable debug inputs and downloaded tool binaries across all git +worktrees while keeping per-worktree generated build files local: + +```sh +python tools/share_worktree_assets.py link --all +python tools/share_worktree_assets.py status --all +``` + +This shares extracted `orig/*` contents, `symbols/*`, root ELF / MAP files, and +downloaded tool binaries under `build/`. It does **not** share `build.ninja`, +`objdiff.json`, `compile_commands.json`, or per-worktree object outputs, so run +`python configure.py` inside each worktree after linking. + ## Code Conventions This is a **C++98** codebase compiled with ProDG (GCC under the hood). Key rules: @@ -205,24 +233,14 @@ Examples: Do not batch up multiple percentage milestones into one commit — commit as each improvement lands. -## Parallel Sub-Agent Matching - -When working on a translation unit with multiple non-matching functions, use sub-agents selectively for **simple, small, isolated** functions. The main agent should keep ownership of the harder matching work instead of delegating it away. Each sub-agent should focus on **exactly one function** — do not assign a sub-agent more than one function at a time. - -**Limit: never run more than 5 sub-agents concurrently.** Spawning too many at once causes resource contention and makes it harder to reason about progress. - -Guidelines: -- Prefer solving difficult, high-risk, or cross-cutting functions yourself. Use sub-agents only for straightforward functions with small, well-bounded edits. -- Spawn a sub-agent per function only when the functions are independent (no shared edits to the same source lines). -- Each sub-agent must use `build-unit.py` for parallel-safe compilation (never plain `ninja`). -- Do **not** sit idle waiting for sub-agents to finish. While they run, continue investigating or implementing other independent work in parallel. -- Before applying a sub-agent's result, re-read the touched area and make sure it still fits the current state of the TU. -- After a useful sub-agent result lands, check the updated match percentage and commit if it improved. - ## Matching Philosophy You should take the Ghidra decompiler output for the initial translation step, get it to compile, make sure that the dwarf of the function matches and only then look for binary matching problems in the assembly. Be aware Ghidra usually gets the order of branches incorrect in if statements (it inverts the logic and the two bodies are swapped), this needs to be fixed to achieve bytematching status. +You may use sub-agents to gather read-only context during this process, but they must not +edit files. Treat their output as analysis input for the main worker, not as a path to +delegate source changes. + The dwarf of your structs doesn't have to neccessarily match the original due to various reasons, just make sure that you copied everything correctly. Never dismiss a diff as "close enough" or "just register allocation." Every mismatched diff --git a/README.md b/README.md index 744c8c0af..b74f298fd 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,28 @@ sudo xattr -rd com.apple.quarantine '/Applications/Wine Crossover.app' - PS2: Copy `NSF.ELF` to `./orig/SLES-53558-A124/` +- Sharing large assets across git worktrees + + If you use multiple git worktrees, you can deduplicate the large immutable inputs + and downloaded tool binaries while keeping each worktree's generated build files + separate: + + ```sh + python tools/share_worktree_assets.py link --all + ``` + + This shares the ignored debug/tool assets under the git common directory, including + extracted `orig/*` contents, `symbols/*`, root ELF / MAP files, and downloaded + tool binaries under `build/`. It intentionally does **not** share `build.ninja`, + `objdiff.json`, `compile_commands.json`, or per-worktree object outputs. + + After linking shared assets into a worktree, regenerate that worktree's local build + files with: + + ```sh + python configure.py + ``` + # Diffing Once the initial build succeeds, an `objdiff.json` should exist in the project root. diff --git a/tools/build-unit.py b/tools/build-unit.py index cdc78875b..dbfacf7b7 100644 --- a/tools/build-unit.py +++ b/tools/build-unit.py @@ -29,12 +29,15 @@ import subprocess import sys import tempfile -from typing import Any, Dict, List, Optional +from typing import Any, Dict, List, Optional, Tuple, Union script_dir = os.path.dirname(os.path.realpath(__file__)) root_dir = os.path.abspath(os.path.join(script_dir, "..")) OBJDIFF_JSON = os.path.join(root_dir, "objdiff.json") BUILD_NINJA = os.path.join(root_dir, "build.ninja") +COMPILE_COMMANDS = os.path.join(root_dir, "compile_commands.json") + +Command = Union[str, List[str]] def load_objdiff() -> Dict[str, Any]: @@ -51,8 +54,24 @@ def find_unit_source(config: Dict[str, Any], unit_name: str) -> Optional[str]: return None +def find_unit_target(config: Dict[str, Any], unit_name: str) -> Optional[str]: + """Return the build target path for a unit from objdiff.json, or None.""" + for unit in config.get("units", []): + if unit["name"] == unit_name: + target = unit.get("base_path") or unit.get("target_path") + return str(target) if target else None + return None + + def get_compdb() -> Optional[List[Dict[str, Any]]]: - """Run `ninja -t compdb` and return the parsed compilation database.""" + """Load compile_commands.json, falling back to `ninja -t compdb` if needed.""" + if os.path.exists(COMPILE_COMMANDS): + try: + with open(COMPILE_COMMANDS) as f: + return json.load(f) + except json.JSONDecodeError as e: + print(f"Failed to parse compile_commands.json: {e}", file=sys.stderr) + result = subprocess.run( ["ninja", "-t", "compdb"], capture_output=True, @@ -71,27 +90,72 @@ def get_compdb() -> Optional[List[Dict[str, Any]]]: return None +def get_build_command(target_path: str) -> Optional[str]: + """Return the final ninja command used to build target_path.""" + result = subprocess.run( + ["ninja", "-t", "commands", target_path], + capture_output=True, + cwd=root_dir, + ) + if result.returncode != 0: + print( + f"ninja -t commands failed:\n{result.stderr.decode(errors='replace')}", + file=sys.stderr, + ) + return None + + commands = [line.strip() for line in result.stdout.decode().splitlines() if line.strip()] + return commands[-1] if commands else None + + def find_entry( compdb: List[Dict[str, Any]], source_path: str ) -> Optional[Dict[str, Any]]: - """Find the compdb entry whose 'file' matches source_path.""" + """Find the compdb entry whose 'file' matches source_path. + + Prefers entries whose output is a .o file (actual compiler invocations) + over auxiliary entries (e.g. hash generation). + """ abs_source = os.path.normcase(os.path.abspath(os.path.join(root_dir, source_path))) + candidates = [] for entry in compdb: file_val = entry.get("file", "") if not os.path.isabs(file_val): entry_dir = entry.get("directory", root_dir) file_val = os.path.abspath(os.path.join(entry_dir, file_val)) if os.path.normcase(file_val) == abs_source: + candidates.append(entry) + for entry in candidates: + out = entry.get("output", "") + if out.endswith(".o") or out.endswith(".obj"): return entry - return None + return candidates[0] if candidates else None + + +def get_command(entry: Dict[str, Any]) -> Command: + command = entry.get("command") + if isinstance(command, str): + return command + arguments = entry.get("arguments") + if isinstance(arguments, list): + return arguments[:] -def strip_transform_dep(command: str) -> str: + print( + "Compilation entry is missing both 'command' and 'arguments'", + file=sys.stderr, + ) + sys.exit(1) + + +def strip_transform_dep(command: Command) -> Command: """Remove the `&& python transform_dep.py ...` step from a compile command. The dependency file transformation is only needed for incremental ninja builds; it is safe to skip for one-off temp compilations. """ + if isinstance(command, list): + return command return re.sub( r"\s*&&\s*\S*python3?\S*\s+\S*transform_dep\.py\s+\S+\s+\S+", "", @@ -99,43 +163,58 @@ def strip_transform_dep(command: str) -> str: ) -def redirect_output(command: str, source_path: str, new_output: str) -> str: +def find_output_argument(command: Command) -> Optional[Tuple[int, str]]: + if isinstance(command, list): + for i in range(len(command) - 1): + if command[i] == "-o": + return i + 1, command[i + 1] + return None + + m = re.search(r"(? Command: """Replace the compiler output path in command with new_output. Handles two styles: - Direct file output (-o path/to/file.o): ngccc/ProDG, MSVC, EE-GCC - Directory output (-o path/to/dir): mwcc (MWCC outputs to a dir) """ - m = re.search(r"(?/.o automatically. - new_basedir = os.path.dirname(new_output) - return command[: m.start(1)] + new_basedir + command[m.end(1) :] + replacement = os.path.dirname(new_output) + if isinstance(command, list): + new_command = command[:] + new_command[index] = replacement + return new_command -def actual_output_path(command: str, source_path: str, new_output: str) -> str: + return command[:index] + replacement + command[index + len(o_arg) :] + + +def actual_output_path(command: Command, source_path: str, new_output: str) -> str: """Return the path where the compiled .o actually lands. For direct-file compilers this is new_output. For directory-output compilers it is /.o. """ - m = re.search(r"(? str: config = load_objdiff() source_path = find_unit_source(config, unit_name) + target_path = find_unit_target(config, unit_name) if not source_path: print( f"No source_path found for unit '{unit_name}' in objdiff.json.\n" @@ -158,6 +238,12 @@ def compile_unit(unit_name: str, output_path: str) -> str: file=sys.stderr, ) sys.exit(1) + if not target_path: + print( + f"No target_path found for unit '{unit_name}' in objdiff.json.", + file=sys.stderr, + ) + sys.exit(1) if not os.path.exists(BUILD_NINJA): print( @@ -166,21 +252,15 @@ def compile_unit(unit_name: str, output_path: str) -> str: ) sys.exit(1) - compdb = get_compdb() - if compdb is None: - sys.exit(1) - - entry = find_entry(compdb, source_path) - if entry is None: + command = get_build_command(target_path) + if command is None: print( - f"No compilation entry found for '{source_path}'.\n" - "Make sure the source file exists and `ninja all_source` has been run.", + f"No build command found for target '{target_path}'.\n" + "Make sure the unit exists and `python configure.py` has been run.", file=sys.stderr, ) sys.exit(1) - command = entry["command"] - # 1. Strip the dependency-file transform step — not needed for temp builds. command = strip_transform_dep(command) @@ -196,7 +276,7 @@ def compile_unit(unit_name: str, output_path: str) -> str: command = redirect_output(command, source_path, output_path) # 5. Run the compile. - result = subprocess.run(command, shell=True, cwd=root_dir) + result = subprocess.run(command, shell=isinstance(command, str), cwd=root_dir) if result.returncode != 0: print( f"Compilation failed (exit code {result.returncode})", file=sys.stderr diff --git a/tools/decomp-context.py b/tools/decomp-context.py index de8bafc0a..0ced57453 100644 --- a/tools/decomp-context.py +++ b/tools/decomp-context.py @@ -260,7 +260,7 @@ def check_ghidra() -> None: # Try a minimal command that lists available programs try: result = subprocess.run( - [ghidra_cmd, "list", "programs"], + [ghidra_cmd, "program", "list"], capture_output=True, timeout=15, ) @@ -275,9 +275,9 @@ def check_ghidra() -> None: print(f" Run: ghidra set-default project NeedForSpeed") if result.returncode != 0 and stderr: - print(f"WARN ghidra list programs exited {result.returncode}: {stderr}") + print(f"WARN ghidra program list exited {result.returncode}: {stderr}") except subprocess.TimeoutExpired: - print("WARN ghidra list programs timed out — Ghidra may be slow to start") + print("WARN ghidra program list timed out — Ghidra may be slow to start") except Exception as e: print(f"WARN could not verify programs: {e}") diff --git a/tools/share_worktree_assets.py b/tools/share_worktree_assets.py new file mode 100644 index 000000000..542f4b407 --- /dev/null +++ b/tools/share_worktree_assets.py @@ -0,0 +1,351 @@ +#!/usr/bin/env python3 + +""" +Share stable debug/tool assets across git worktrees. + +This keeps branch-specific generated files (`build.ninja`, `objdiff.json`, +`compile_commands.json`, object files, etc.) local to each worktree while +deduplicating large immutable assets such as extracted game files, symbol dumps, +and downloaded tool binaries under the git common directory. + +Examples: + python tools/share_worktree_assets.py status + python tools/share_worktree_assets.py status --all + python tools/share_worktree_assets.py link --all +""" + +import argparse +import filecmp +import os +import shutil +import subprocess +import sys +from dataclasses import dataclass +from typing import Dict, Iterable, List, Optional, Set + +script_dir = os.path.dirname(os.path.realpath(__file__)) +root_dir = os.path.abspath(os.path.join(script_dir, "..")) + +SHARED_ROOT_NAME = "worktree-shared" + + +@dataclass(frozen=True) +class AssetSpec: + relpath: str + kind: str + + +FIXED_ASSETS = ( + AssetSpec("NFSMWRELEASE.ELF", "file"), + AssetSpec("NFS.ELF", "file"), + AssetSpec("NFS.MAP", "file"), + AssetSpec(os.path.join("build", "tools"), "dir"), + AssetSpec(os.path.join("build", "compilers"), "dir"), + AssetSpec(os.path.join("build", "ppc_binutils"), "dir"), +) + + +def run_git(args: List[str], cwd: str) -> str: + result = subprocess.run( + ["git", *args], + cwd=cwd, + capture_output=True, + text=True, + ) + if result.returncode != 0: + print(result.stderr.strip(), file=sys.stderr) + sys.exit(result.returncode) + return result.stdout + + +def git_common_dir(cwd: str) -> str: + common = run_git(["rev-parse", "--git-common-dir"], cwd).strip() + if os.path.isabs(common): + return common + return os.path.abspath(os.path.join(cwd, common)) + + +def list_worktrees(cwd: str) -> List[str]: + output = run_git(["worktree", "list", "--porcelain"], cwd) + worktrees = [] + for line in output.splitlines(): + if line.startswith("worktree "): + worktrees.append(line.split(" ", 1)[1]) + return worktrees + + +def tracked_paths(cwd: str) -> Set[str]: + output = run_git(["ls-files"], cwd) + return {line.strip() for line in output.splitlines() if line.strip()} + + +def lexists(path: str) -> bool: + return os.path.lexists(path) + + +def same_symlink(path: str, target: str) -> bool: + return os.path.islink(path) and os.path.realpath(path) == os.path.realpath(target) + + +def remove_path(path: str) -> None: + if os.path.islink(path) or os.path.isfile(path): + os.unlink(path) + elif os.path.isdir(path): + shutil.rmtree(path) + + +def ensure_parent(path: str) -> None: + parent = os.path.dirname(path) + if parent: + os.makedirs(parent, exist_ok=True) + + +def merge_file(src: str, dst: str, relpath: str) -> None: + ensure_parent(dst) + if not os.path.exists(dst): + shutil.copy2(src, dst) + return + if not filecmp.cmp(src, dst, shallow=False): + raise RuntimeError(f"Conflicting file contents for {relpath}") + + +def merge_symlink(src: str, dst: str, relpath: str) -> None: + resolved = os.path.realpath(src) + if os.path.isdir(resolved): + merge_tree(resolved, dst, relpath) + elif os.path.isfile(resolved): + merge_file(resolved, dst, relpath) + else: + raise RuntimeError(f"Broken symlink encountered while merging {relpath}: {src}") + + +def merge_tree(src: str, dst: str, relpath: str) -> None: + for current_root, dirnames, filenames in os.walk(src): + dirnames.sort() + filenames.sort() + rel_dir = os.path.relpath(current_root, src) + target_root = dst if rel_dir == "." else os.path.join(dst, rel_dir) + os.makedirs(target_root, exist_ok=True) + + next_dirnames = [] + for dirname in dirnames: + src_dir = os.path.join(current_root, dirname) + if os.path.islink(src_dir): + dst_dir = os.path.join(target_root, dirname) + rel_entry = os.path.join(relpath, os.path.relpath(src_dir, src)) + merge_symlink(src_dir, dst_dir, rel_entry) + continue + next_dirnames.append(dirname) + dirnames[:] = next_dirnames + + for filename in filenames: + src_file = os.path.join(current_root, filename) + if os.path.islink(src_file): + dst_file = os.path.join(target_root, filename) + rel_entry = os.path.join(relpath, os.path.relpath(src_file, src)) + merge_symlink(src_file, dst_file, rel_entry) + continue + dst_file = os.path.join(target_root, filename) + rel_file = os.path.join(relpath, os.path.relpath(src_file, src)) + merge_file(src_file, dst_file, rel_file) + + +def is_tracked_path(relpath: str, tracked: Set[str]) -> bool: + prefix = relpath + os.sep + return any(path == relpath or path.startswith(prefix) for path in tracked) + + +def discover_child_assets( + worktrees: Iterable[str], + parent_relpath: str, + skip_names: Iterable[str], + tracked: Set[str], +) -> Dict[str, AssetSpec]: + specs: Dict[str, AssetSpec] = {} + skip = set(skip_names) + for worktree in worktrees: + parent = os.path.join(worktree, parent_relpath) + if not os.path.isdir(parent): + continue + for dirpath, dirnames, filenames in os.walk(parent): + dirnames.sort() + filenames.sort() + rel_dir = os.path.relpath(dirpath, parent) + if rel_dir == ".": + children = list(dirnames) + list(filenames) + for name in children: + if name in skip: + continue + child = os.path.join(dirpath, name) + relpath = os.path.join(parent_relpath, name) + if is_tracked_path(relpath, tracked): + continue + kind = "dir" if os.path.isdir(child) else "file" + specs[relpath] = AssetSpec(relpath, kind) + dirnames[:] = [] + else: + dirnames[:] = [] + return specs + + +def discover_assets(worktrees: Iterable[str], shared_root: str) -> List[AssetSpec]: + tracked: Set[str] = set() + for worktree in worktrees: + tracked.update(tracked_paths(worktree)) + + specs: Dict[str, AssetSpec] = {} + for spec in FIXED_ASSETS: + if not is_tracked_path(spec.relpath, tracked): + specs[spec.relpath] = spec + for source_root in list(worktrees) + [shared_root]: + if os.path.isdir(os.path.join(source_root, "symbols")): + specs.update( + discover_child_assets( + [source_root], "symbols", skip_names=(), tracked=tracked + ).items() + ) + if os.path.isdir(os.path.join(source_root, "orig")): + for worktree in [source_root]: + orig_root = os.path.join(worktree, "orig") + if not os.path.isdir(orig_root): + continue + for version in sorted(os.listdir(orig_root)): + version_path = os.path.join(orig_root, version) + if not os.path.isdir(version_path): + continue + child_specs = discover_child_assets( + [worktree], + os.path.join("orig", version), + skip_names=(".gitkeep",), + tracked=tracked, + ) + specs.update(child_specs.items()) + return [specs[key] for key in sorted(specs)] + + +def asset_status(path: str, shared_path: str) -> str: + if same_symlink(path, shared_path): + return "shared" + if os.path.islink(path): + return "other-symlink" + if os.path.isdir(path): + return "local-dir" + if os.path.isfile(path): + return "local-file" + return "missing" + + +def ensure_shared_asset(spec: AssetSpec, worktrees: Iterable[str], shared_root: str) -> Optional[str]: + shared_path = os.path.join(shared_root, spec.relpath) + if spec.kind == "dir": + os.makedirs(shared_path, exist_ok=True) + found = False + for worktree in worktrees: + local_path = os.path.join(worktree, spec.relpath) + if same_symlink(local_path, shared_path) or not os.path.isdir(local_path): + continue + merge_tree(local_path, shared_path, spec.relpath) + found = True + if found or os.listdir(shared_path): + return shared_path + return None + + found = False + for worktree in worktrees: + local_path = os.path.join(worktree, spec.relpath) + if same_symlink(local_path, shared_path) or not os.path.isfile(local_path): + continue + merge_file(local_path, shared_path, spec.relpath) + found = True + if found or os.path.isfile(shared_path): + return shared_path + return None + + +def link_asset(worktree: str, spec: AssetSpec, shared_path: str) -> str: + local_path = os.path.join(worktree, spec.relpath) + if same_symlink(local_path, shared_path): + return "already-shared" + + if spec.kind == "dir": + if os.path.isdir(local_path): + merge_tree(local_path, shared_path, spec.relpath) + remove_path(local_path) + elif os.path.isfile(local_path): + raise RuntimeError(f"{spec.relpath}: expected directory in {worktree}") + elif os.path.islink(local_path): + remove_path(local_path) + else: + if os.path.isfile(local_path): + merge_file(local_path, shared_path, spec.relpath) + remove_path(local_path) + elif os.path.isdir(local_path): + raise RuntimeError(f"{spec.relpath}: expected file in {worktree}") + elif os.path.islink(local_path): + remove_path(local_path) + + ensure_parent(local_path) + os.symlink(shared_path, local_path) + return "linked" + + +def print_status(worktrees: List[str], shared_root: str) -> int: + assets = discover_assets(worktrees, shared_root) + print(f"Shared asset root: {shared_root}") + for worktree in worktrees: + print(f"\n[{worktree}]") + for spec in assets: + shared_path = os.path.join(shared_root, spec.relpath) + shared_state = "seeded" if lexists(shared_path) else "unseeded" + local_state = asset_status(os.path.join(worktree, spec.relpath), shared_path) + print(f" {spec.relpath:<40} {local_state:<12} {shared_state}") + return 0 + + +def link_assets(worktrees: List[str], shared_root: str) -> int: + os.makedirs(shared_root, exist_ok=True) + assets = discover_assets(worktrees, shared_root) + for spec in assets: + shared_path = ensure_shared_asset(spec, worktrees, shared_root) + if shared_path is None: + continue + for worktree in worktrees: + status = link_asset(worktree, spec, shared_path) + print(f"{worktree}: {spec.relpath} -> {status}") + return 0 + + +def main() -> int: + parser = argparse.ArgumentParser( + description=( + "Share stable debug/tool assets across git worktrees while keeping " + "generated build outputs local to each worktree." + ) + ) + parser.add_argument( + "command", + choices=("status", "link"), + help="Inspect or create shared asset symlinks.", + ) + parser.add_argument( + "--all", + action="store_true", + help="Operate on all worktrees for this repository (default: current worktree only).", + ) + args = parser.parse_args() + + common_dir = git_common_dir(root_dir) + shared_root = os.path.join(common_dir, SHARED_ROOT_NAME) + worktrees = list_worktrees(root_dir) if args.all else [root_dir] + + try: + if args.command == "status": + return print_status(worktrees, shared_root) + return link_assets(worktrees, shared_root) + except RuntimeError as e: + print(f"Error: {e}", file=sys.stderr) + return 1 + + +if __name__ == "__main__": + sys.exit(main()) From ea02c5c4edb1bfe1c2def5655ebc13b59dea7ff1 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 20:08:09 +0100 Subject: [PATCH 095/691] AGENTS: forbid touching comparison inputs Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- AGENTS.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index cdf83bc28..b278fa09f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -42,6 +42,22 @@ Sub-agents must **not** write or edit code files, headers, configs, or other rep All persistent file changes, decomp implementations, scaffolding, and follow-up fixes must be done by the main worker after reviewing the read-only findings. +## Forbidden Changes + +Do **not** edit or otherwise touch the comparison and configuration inputs that define the +project's match metrics: + +- `config/GOWE69/symbols.txt` +- `config/GOWE69/splits.txt` +- `configure.py` + +Treat these files as read-only unless the user explicitly asks for a task that is specifically +about maintaining that infrastructure. + +Do **not** try to cheat objdiff, progress, or match metrics in any way. The goal is to improve +the real decompilation output, not to manipulate the comparison setup, hide mismatches, or make +progress numbers look better without actually matching the original code. + ### lookup.py — Symbol lookup from the debug dump Query structs, enums, functions, globals, and typedefs directly from the pre-extracted From 844fe3c054a6d863b6e2197ccdbdd8df2facddab Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 20:41:31 +0100 Subject: [PATCH 096/691] 77.3%: implement IsRightSide (95.2% match) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- AGENTS.md | 16 + config_temp/splits.txt | 1661 + config_temp/symbols.txt | 25571 ++++++++++++++++ .../Src/Camera/Actions/CDActionShowcase.cpp | 65 +- 4 files changed, 27312 insertions(+), 1 deletion(-) create mode 100644 config_temp/splits.txt create mode 100644 config_temp/symbols.txt diff --git a/AGENTS.md b/AGENTS.md index cdf83bc28..b278fa09f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -42,6 +42,22 @@ Sub-agents must **not** write or edit code files, headers, configs, or other rep All persistent file changes, decomp implementations, scaffolding, and follow-up fixes must be done by the main worker after reviewing the read-only findings. +## Forbidden Changes + +Do **not** edit or otherwise touch the comparison and configuration inputs that define the +project's match metrics: + +- `config/GOWE69/symbols.txt` +- `config/GOWE69/splits.txt` +- `configure.py` + +Treat these files as read-only unless the user explicitly asks for a task that is specifically +about maintaining that infrastructure. + +Do **not** try to cheat objdiff, progress, or match metrics in any way. The goal is to improve +the real decompilation output, not to manipulate the comparison setup, hide mismatches, or make +progress numbers look better without actually matching the original code. + ### lookup.py — Symbol lookup from the debug dump Query structs, enums, functions, globals, and typedefs directly from the pre-extracted diff --git a/config_temp/splits.txt b/config_temp/splits.txt new file mode 100644 index 000000000..3bb901e94 --- /dev/null +++ b/config_temp/splits.txt @@ -0,0 +1,1661 @@ +Sections: + .init type:code align:4 + .text type:code align:16 + .over type:code align:8 + .ctors type:data align:1 + .dtors type:data align:1 + .rodata type:rodata align:8 + .data type:data align:32 + .bss type:bss align:32 + .sdata type:data align:8 + .sbss type:bss align:8 + .sdata2 type:data align:8 + +Speed/Indep/SourceLists/zAI.cpp: + .init start:0x80003100 end:0x800034A0 + .text start:0x800034A0 end:0x80045E3C + .over start:0x803A41B8 end:0x803A41B8 + .ctors start:0x803C8B60 end:0x803C8C40 + .dtors start:0x803C8C40 end:0x803C8C60 + .rodata start:0x803C8C60 end:0x803D0710 + .data start:0x80415180 end:0x804156F4 + .bss start:0x80456560 end:0x804575C0 + .sdata start:0x804FEDC0 end:0x804FEDD0 + .sbss start:0x804FF8C0 end:0x804FF8C0 + .sdata2 start:0x804FFF40 end:0x804FFF40 + +zAnim.cpp: + .text start:0x80045E3C end:0x80050370 + .rodata start:0x803D0710 end:0x803D1494 + .data start:0x804156F4 end:0x804158D8 + .bss start:0x804575C0 end:0x80457780 + +zAttribSys.cpp: + .text start:0x80050370 end:0x8005C1F8 + .data start:0x804158D8 end:0x80416400 + .bss start:0x80457780 end:0x8045A20C + +zBWare.cpp: + .text start:0x8005C1F8 end:0x80069424 + .rodata start:0x803D1494 end:0x803D3AE4 + .data start:0x80416400 end:0x8041648C + .bss start:0x8045A20C end:0x8045AB34 + +zCamera.cpp: + .text start:0x80069424 end:0x80083604 + .rodata start:0x803D3AE4 end:0x803D3F50 + .data start:0x8041648C end:0x80417108 + .bss start:0x8045AB34 end:0x8045B0F8 + +zComms.cpp: + .text start:0x80083604 end:0x80083604 + +zDebug.cpp: + .text start:0x80083604 end:0x80083680 + .bss start:0x8045B0F8 end:0x8045B108 + +zDynamics.cpp: + .text start:0x80083680 end:0x8008A7B0 + .rodata start:0x803D3F50 end:0x803D5E28 + .bss start:0x8045B108 end:0x8045B110 + +zEagl4Anim.cpp: + .text start:0x8008A7B0 end:0x800A6128 + .rodata start:0x803D5E28 end:0x803D8A6C + .data start:0x80417108 end:0x80417634 + .bss start:0x8045B110 end:0x8045B268 + +zEAXSound.cpp: + .text start:0x800A6128 end:0x800CAF5C + .rodata start:0x803D8A6C end:0x803DD468 + .data start:0x80417634 end:0x80417F60 + .bss start:0x8045B268 end:0x8045DE60 + +zEAXSound2.cpp: + .text start:0x800CAF5C end:0x800F486C + .rodata start:0x803DD468 end:0x803DF51C + .data start:0x80417F60 end:0x8041AB34 + .bss start:0x8045DE60 end:0x80464F28 + +zEcstasy.cpp: + .text start:0x800F486C end:0x80118248 + .rodata start:0x803DF51C end:0x803E4290 + .data start:0x8041AB34 end:0x8041B5E4 + .bss start:0x80464F28 end:0x804729E0 + +zFe.cpp: + .text start:0x80118248 end:0x80142AC0 + .rodata start:0x803E4290 end:0x803EA794 + .data start:0x8041B5E4 end:0x8041BE08 + .bss start:0x804729E0 end:0x80472FBC + +zFe2.cpp: + .text start:0x80142AC0 end:0x8017FE2C + .rodata start:0x803EA794 end:0x803EB9FC + .data start:0x8041BE08 end:0x8041D060 + .bss start:0x80472FBC end:0x80473CD0 + +zFEng.cpp: + .text start:0x8017FE2C end:0x80191550 + .data start:0x8041D060 end:0x8041D1DC + .bss start:0x80473CD0 end:0x80473E74 + +zFoundation.cpp: + .text start:0x80191550 end:0x8019A1F0 + .rodata start:0x803EB9FC end:0x803ED2FC + .data start:0x8041D1DC end:0x8041D31C + .bss start:0x80473E74 end:0x80473EF8 + +zGameModes.cpp: + .text start:0x8019A1F0 end:0x8019A26C + .bss start:0x80473EF8 end:0x80473F00 + +zGameplay.cpp: + .text start:0x8019A26C end:0x801BCB0C + .rodata start:0x803ED2FC end:0x803EEF24 + .data start:0x8041D31C end:0x8041D5A4 + .bss start:0x80473F00 end:0x80473FE0 + +zLua.cpp: + .text start:0x801BCB0C end:0x801D3B44 + .rodata start:0x803EEF24 end:0x803F3EB8 + .data start:0x8041D5A4 end:0x8041D7EC + .bss start:0x80473FE0 end:0x80474024 + +zMain.cpp: + .text start:0x801D3B44 end:0x801FAB64 + .rodata start:0x803F3EB8 end:0x803F6638 + .data start:0x8041D7EC end:0x8041E598 + .bss start:0x80474024 end:0x8047FEA4 + +zMisc.cpp: + .text start:0x801FAB64 end:0x8020DEA0 + .rodata start:0x803F6638 end:0x803F9804 + .data start:0x8041E598 end:0x8041EFE8 + .bss start:0x8047FEA4 end:0x804801A4 + +zMiscSmall.cpp: + .text start:0x8020DEA0 end:0x8020DF1C + .bss start:0x804801A4 end:0x804801AC + +zMission.cpp: + .text start:0x8020DF1C end:0x8020DF98 + .bss start:0x804801AC end:0x804801D8 + +zPhysics.cpp: + .text start:0x8020DF98 end:0x80231A64 + .rodata start:0x803F9804 end:0x803FAB04 + .data start:0x8041EFE8 end:0x8041F358 + .bss start:0x804801D8 end:0x8048A1A8 + +zPhysicsBehaviors.cpp: + .text start:0x80231A64 end:0x8026B4F4 + .rodata start:0x803FAB04 end:0x80403B1C + .data start:0x8041F358 end:0x8041F7F4 + .bss start:0x8048A1A8 end:0x8048BD18 + +zPlatform.cpp: + .text start:0x8026B4F4 end:0x80272870 + .rodata start:0x80403B1C end:0x804074A4 + .data start:0x8041F7F4 end:0x80435814 + .bss start:0x8048BD18 end:0x80496A20 + +zRender.cpp: + .text start:0x80272870 end:0x802728EC + .bss start:0x80496A20 end:0x80496A28 + +zSim.cpp: + .text start:0x802728EC end:0x8028A17C + .data start:0x80435814 end:0x80435970 + .bss start:0x80496A28 end:0x80498974 + +zSpeech.cpp: + .text start:0x8028A17C end:0x802B5C44 + .rodata start:0x804074A4 end:0x8040DCC4 + .data start:0x80435970 end:0x80435FFC + .bss start:0x80498974 end:0x8049A5A4 + +zTrack.cpp: + .text start:0x802B5C44 end:0x802C5544 + .data start:0x80435FFC end:0x804374BC + .bss start:0x8049A5A4 end:0x804A5E60 + +zWorld.cpp: + .text start:0x802C5544 end:0x802ECA00 + .rodata start:0x8040DCC4 end:0x8040E370 + .data start:0x804374BC end:0x80438F80 + .bss start:0x804A5E60 end:0x804AA598 + +zWorld2.cpp: + .text start:0x802ECA00 end:0x8030EB08 + .rodata start:0x8040E370 end:0x8040FBB8 + .data start:0x80438F80 end:0x804390F0 + .bss start:0x804AA598 end:0x804AAA88 + +zOnline.cpp: + .over start:0x803A41B8 end:0x803A4294 + .bss start:0x804AAA88 end:0x804AAA90 + +zFeOverlay.cpp: + .over start:0x803A4294 end:0x803C8B60 + .data start:0x804390F0 end:0x804394D0 + .bss start:0x804AAA90 end:0x804B4DE8 + +D:/DOCUME~1/tom/LOCALS~1/Temp/crt2D1.tmp: + .data start:0x804394D0 end:0x804397D4 + +D:/DOCUME~1/tom/LOCALS~1/Temp/ppc2D2.tmp: + .text start:0x8030EB08 end:0x80310C58 + .bss start:0x804B4DE8 end:0x804B4F54 + +D:/DOCUME~1/tom/LOCALS~1/Temp/fil2D3.tmp: + .text start:0x80310C58 end:0x80311414 + +D:/DOCUME~1/tom/LOCALS~1/Temp/pro2D4.tmp: + .text start:0x80311414 end:0x80311DA8 + +inituser.c: + +D:/DOCUME~1/tom/LOCALS~1/Temp/pro2D9.tmp: + +D:/DOCUME~1/tom/LOCALS~1/Temp/tea2DA.tmp: + +FSasync.c: + .text start:0x80311DA8 end:0x803125E0 + .data start:0x804397D4 end:0x804397E0 + .bss start:0x804B4F54 end:0x804B4FC8 + +sndvd.c: + .text start:0x803125E0 end:0x80312C10 + .data start:0x804397E0 end:0x804397E8 + .bss start:0x804B4FC8 end:0x804B53A0 + +debug.c: + +ctype_.c: + +errno.c: + .text start:0x80312C10 end:0x80312C18 + +impure.c: + .data start:0x804397E8 end:0x80439AEC + +fclose.c: + .text start:0x80312C18 end:0x80312CD0 + +fflush.c: + .text start:0x80312CD0 end:0x80312DC4 + +fopen.c: + .text start:0x80312DC4 end:0x80313158 + .bss start:0x804B53A0 end:0x804B53AC + +fprintf.c: + .text start:0x80313158 end:0x803131EC + +fread.c: + +fseek.c: + .text start:0x803131EC end:0x803135D0 + +fwalk.c: + .text start:0x803135D0 end:0x80313650 + +makebuf.c: + .text start:0x80313650 end:0x803137D4 + +printf.c: + +refill.c: + .text start:0x803137D4 end:0x80313A40 + +rget.c: + +sn_buf.cpp: + .data start:0x80439AEC end:0x80439B3C + +sprintf.c: + +stdio.c: + .text start:0x80313A40 end:0x80313BA0 + +ungetc.c: + +vsprintf.c: + .text start:0x80313BA0 end:0x80313C70 + +atexit.c: + .text start:0x80313C70 end:0x80313D08 + +atoi.c: + +qsort.c: + .text start:0x80313D08 end:0x803146B8 + +rand.c: + +sn_malloc.c: + .text start:0x803146B8 end:0x80314730 + +memcmp.c: + .text start:0x80314730 end:0x803147C0 + +memcpy.c: + .text start:0x803147C0 end:0x80314864 + +memmove.c: + .text start:0x80314864 end:0x80314950 + +memset.c: + .text start:0x80314950 end:0x803149E4 + +strcasecmp.c: + .text start:0x803149E4 end:0x80314A60 + +strcat.c: + .text start:0x80314A60 end:0x80314AF0 + +strchr.c: + .text start:0x80314AF0 end:0x80314B8C + +strcmp.c: + .text start:0x80314B8C end:0x80314C34 + +strcoll.c: + .text start:0x80314C34 end:0x80314C54 + +strcpy.c: + .text start:0x80314C54 end:0x80314CD8 + +strcspn.c: + .text start:0x80314CD8 end:0x80314D48 + +strerror.c: + +strlen.c: + .text start:0x80314D48 end:0x80314DB4 + +strncasecmp.c: + .text start:0x80314DB4 end:0x80314E60 + +strncat.c: + .text start:0x80314E60 end:0x80314F0C + +strncmp.c: + .text start:0x80314F0C end:0x80314FEC + +strncpy.c: + .text start:0x80314FEC end:0x803150B8 + +strstr.c: + .text start:0x803150B8 end:0x803152A0 + +u_strerr.c: + +C:/DOCUME~1/DAVE~1.DOM/LOCALS~1/Temp/set671.tmp: + +vfprintf.c: + .text start:0x803152A0 end:0x803173D0 + .rodata start:0x8040FBB8 end:0x8040FC48 + .data start:0x80439B3C end:0x80439B68 + .bss start:0x804B53AC end:0x804B54D0 + .sdata start:0x804FEDD0 end:0x804FEDD8 + +vfprintf.c_1: + .text start:0x803173D0 end:0x80318B24 + .rodata start:0x8040FC48 end:0x8040FCD8 + .bss start:0x804B54D0 end:0x804B5550 + .sdata start:0x804FEDD8 end:0x804FEDE0 + +strtol.c: + +strtod2d.c: + .text start:0x80318B24 end:0x80318E50 + .data start:0x80439B68 end:0x80439BB0 + .sdata start:0x804FEDE0 end:0x804FF3B4 + +_tolower.c: + .text start:0x80318E50 end:0x80318E6C + +isdigit.c: + .text start:0x80318E6C end:0x80318E80 + +isspace.c: + .text start:0x80318E80 end:0x80318EC4 + +locale.c: + .rodata start:0x8040FCD8 end:0x8040FD40 + +math_support.c: + .text start:0x80318EC4 end:0x803197D8 + .rodata start:0x8040FD40 end:0x8040FED0 + +closer.c: + .text start:0x803197D8 end:0x80319828 + +fstatr.c: + .text start:0x80319828 end:0x80319880 + +lseekr.c: + .text start:0x80319880 end:0x803198D8 + +openr.c: + .text start:0x803198D8 end:0x80319934 + +readr.c: + .text start:0x80319934 end:0x8031998C + +sbrkr.c: + +writer.c: + .text start:0x8031998C end:0x803199E4 + +flags.c: + .text start:0x803199E4 end:0x80319A80 + +mbtowc_r.c: + .text start:0x80319A80 end:0x80319D9C + .data start:0x80439BB0 end:0x80439F18 + +memchr.c: + .text start:0x80319D9C end:0x80319F24 + +libgcc2.c: + .bss start:0x804B5550 end:0x804B5558 + +libgcc2.c_1: + .text start:0x80319F24 end:0x80319F64 + +libgcc2.c_2: + .text start:0x80319F64 end:0x80319FA4 + +libgcc2.c_3: + .text start:0x80319FA4 end:0x80319FE0 + +libgcc2.c_4: + .text start:0x80319FE0 end:0x8031A55C + .sdata2 start:0x804FFF40 end:0x80500040 + +libgcc2.c_5: + +libgcc2.c_6: + .text start:0x8031A55C end:0x8031A60C + +libgcc2.c_7: + .text start:0x8031A60C end:0x8031A64C + +libgcc2.c_8: + .text start:0x8031A64C end:0x8031AB80 + .sdata2 start:0x80500040 end:0x80500140 + +libgcc2.c_9: + .text start:0x8031AB80 end:0x8031ABA0 + +libgcc2.c_10: + .text start:0x8031ABA0 end:0x8031B084 + .sdata2 start:0x80500140 end:0x80500240 + +libgcc2.c_11: + .text start:0x8031B084 end:0x8031B51C + .sdata2 start:0x80500240 end:0x80500340 + +libgcc2.c_12: + .text start:0x8031B51C end:0x8031B558 + +e_acos.c: + +e_log.c: + +e_pow.c: + .text start:0x8031B558 end:0x8031BD28 + .sdata2 start:0x80500340 end:0x80500370 + +e_sqrt.c: + .text start:0x8031BD28 end:0x8031BF3C + +s_fabs.c: + .text start:0x8031BF3C end:0x8031BF78 + +ef_acos.c: + .text start:0x8031BF78 end:0x8031C1C4 + +ef_asin.c: + .text start:0x8031C1C4 end:0x8031C3F0 + +ef_atan2.c: + .text start:0x8031C3F0 end:0x8031C610 + +ef_cosh.c: + .text start:0x8031C610 end:0x8031C740 + +ef_exp.c: + .text start:0x8031C740 end:0x8031C96C + .sdata2 start:0x80500370 end:0x80500388 + +ef_fmod.c: + .text start:0x8031C96C end:0x8031CB34 + .sdata2 start:0x80500388 end:0x80500390 + +ef_log.c: + .text start:0x8031CB34 end:0x8031CDB4 + +ef_log10.c: + .text start:0x8031CDB4 end:0x8031CEC0 + +ef_pow.c: + .text start:0x8031CEC0 end:0x8031D5B4 + .sdata2 start:0x80500390 end:0x805003A8 + +ef_sinh.c: + .text start:0x8031D5B4 end:0x8031D704 + +ef_sqrt.c: + .text start:0x8031D704 end:0x8031D7FC + +sf_atan.c: + .text start:0x8031D7FC end:0x8031DA0C + .sdata2 start:0x805003A8 end:0x805003F8 + +sf_ceil.c: + .text start:0x8031DA0C end:0x8031DAD0 + +sf_cos.c: + .text start:0x8031DAD0 end:0x8031DBAC + +sf_fabs.c: + .text start:0x8031DBAC end:0x8031DBD0 + +sf_floor.c: + .text start:0x8031DBD0 end:0x8031DC98 + +sf_isnan.c: + .text start:0x8031DC98 end:0x8031DCBC + +sf_sin.c: + .text start:0x8031DCBC end:0x8031DD98 + +sf_tan.c: + .text start:0x8031DD98 end:0x8031DE18 + +sf_tanh.c: + .text start:0x8031DE18 end:0x8031DF28 + +s_scalbn.c: + .text start:0x8031DF28 end:0x8031E07C + +sf_scalbn.c: + .text start:0x8031E07C end:0x8031E198 + +sf_expm1.c: + .text start:0x8031E198 end:0x8031E4BC + +kf_cos.c: + .text start:0x8031E4BC end:0x8031E5A8 + +kf_sin.c: + .text start:0x8031E5A8 end:0x8031E654 + +kf_tan.c: + .text start:0x8031E654 end:0x8031E868 + .sdata2 start:0x805003F8 end:0x8050042C + +ef_rem_pio2.c: + .text start:0x8031E868 end:0x8031EBB8 + .sdata2 start:0x8050042C end:0x805007C4 + +s_copysign.c: + .text start:0x8031EBB8 end:0x8031EC08 + +sf_copysign.c: + .text start:0x8031EC08 end:0x8031EC3C + +kf_rem_pio2.c: + .text start:0x8031EC3C end:0x8031F5D8 + .sdata2 start:0x805007C4 end:0x80500800 + +PPCArch.c: + +allsrc.c: + .text start:0x8031F5D8 end:0x80321960 + .data start:0x80439F18 end:0x80439F40 + .bss start:0x804B5558 end:0x804BA040 + .sbss start:0x804FF8C0 end:0x804FF8D8 + .sdata2 start:0x80500800 end:0x80500828 + +OS.c: + .text start:0x80321960 end:0x80322A14 + .data start:0x80439F40 end:0x8043A138 + .bss start:0x804BA040 end:0x804BA0B0 + .sdata start:0x804FF3B4 end:0x804FF3C8 + .sbss start:0x804FF8D8 end:0x804FF910 + +OSAlarm.c: + .text start:0x80322A14 end:0x803233E0 + .data start:0x8043A138 end:0x8043A330 + .sbss start:0x804FF910 end:0x804FF918 + +OSAlloc.c: + .data start:0x8043A330 end:0x8043A6C8 + .sbss start:0x804FF918 end:0x804FF928 + +OSArena.c: + .sdata start:0x804FF3C8 end:0x804FF3D4 + .sbss start:0x804FF928 end:0x804FF930 + +OSAudioSystem.c: + .data start:0x8043A6C8 end:0x8043A748 + +OSCache.c: + .data start:0x8043A748 end:0x8043A978 + +OSContext.c: + .text start:0x803233E0 end:0x803242FC + .data start:0x8043A978 end:0x8043AB50 + +OSError.c: + .data start:0x8043AB50 end:0x8043AE70 + .bss start:0x804BA0B0 end:0x804BA100 + .sdata start:0x804FF3D4 end:0x804FF3D8 + +OSExec.c: + .text start:0x803242FC end:0x80324C5C + .data start:0x8043AE70 end:0x8043AE80 + .sdata start:0x804FF3D8 end:0x804FF3E0 + .sbss start:0x804FF930 end:0x804FF938 + +OSFont.c: + .text start:0x80324C5C end:0x8032634C + .data start:0x8043AE80 end:0x8043B990 + .sdata start:0x804FF3E0 end:0x804FF3E8 + .sbss start:0x804FF938 end:0x804FF948 + .sdata2 start:0x80500828 end:0x80500830 + +OSInterrupt.c: + .text start:0x8032634C end:0x803263B4 + .data start:0x8043B990 end:0x8043B9C0 + .sbss start:0x804FF948 end:0x804FF960 + +OSLink.c: + .data start:0x8043B9C0 end:0x8043BA10 + +OSMemory.c: + .text start:0x803263B4 end:0x80326A88 + .data start:0x8043BA10 end:0x8043BA20 + +OSMutex.c: + +OSReboot.c: + .sbss start:0x804FF960 end:0x804FF968 + +OSReset.c: + .text start:0x80326A88 end:0x8032718C + .data start:0x8043BA20 end:0x8043BA70 + .sbss start:0x804FF968 end:0x804FF978 + +OSResetSW.c: + .sbss start:0x804FF978 end:0x804FF998 + +OSRtc.c: + .text start:0x8032718C end:0x80327F54 + .bss start:0x804BA100 end:0x804BA158 + +OSSync.c: + .text start:0x80327F54 end:0x80327FD8 + +OSThread.c: + .text start:0x80327FD8 end:0x80329424 + .data start:0x8043BA70 end:0x8043C280 + .bss start:0x804BA158 end:0x804BAB60 + .sdata start:0x804FF3E8 end:0x804FF3F8 + .sbss start:0x804FF998 end:0x804FF9B0 + +OSTime.c: + .data start:0x8043C280 end:0x8043C2E0 + +OSUtf.c: + .data start:0x8043C2E0 end:0x8044D520 + +__ppc_eabi_init.cpp: + .text start:0x80329424 end:0x8032A8FC + +db.c: + .data start:0x8044D520 end:0x8044D538 + +mtx.c: + .sdata start:0x804FF3F8 end:0x804FF400 + .sdata2 start:0x80500830 end:0x80500850 + +mtxvec.c: + +mtx44.c: + .data start:0x8044D538 end:0x8044D548 + .sdata2 start:0x80500850 end:0x80500870 + +vec.c: + .sdata2 start:0x80500870 end:0x80500898 + +dvdfs.c: + .text start:0x8032A8FC end:0x8032A92C + .data start:0x8044D548 end:0x8044D938 + .sdata start:0x804FF400 end:0x804FF40C + .sbss start:0x804FF9B0 end:0x804FF9D0 + +dvd.c: + .text start:0x8032A92C end:0x8032D2AC + .data start:0x8044D938 end:0x8044DAC0 + .bss start:0x804BAB60 end:0x804BABF8 + .sdata start:0x804FF40C end:0x804FF428 + .sbss start:0x804FF9D0 end:0x804FFA30 + +dvdqueue.c: + .data start:0x8044DAC0 end:0x8044DC28 + .bss start:0x804BABF8 end:0x804BAC18 + .sdata start:0x804FF428 end:0x804FF468 + +dvderror.c: + .text start:0x8032D2AC end:0x8032D56C + .data start:0x8044DC28 end:0x8044DC70 + +dvdidutils.c: + +dvdFatal.c: + .data start:0x8044DC70 end:0x8044E020 + .sbss start:0x804FFA30 end:0x804FFA38 + .sdata2 start:0x80500898 end:0x805008A0 + +fstload.c: + .text start:0x8032D56C end:0x8032DBC0 + .data start:0x8044E020 end:0x8044E090 + .bss start:0x804BAC18 end:0x804BAC88 + .sdata start:0x804FF468 end:0x804FF478 + .sbss start:0x804FFA38 end:0x804FFA48 + +dvdlow.c: + .text start:0x8032DBC0 end:0x8032FFAC + .bss start:0x804BAC88 end:0x804BAD58 + .sdata start:0x804FF478 end:0x804FF484 + .sbss start:0x804FFA48 end:0x804FFA90 + +vi.c: + .text start:0x8032FFAC end:0x80330468 + .data start:0x8044E090 end:0x8044E478 + .bss start:0x804BAD58 end:0x804BAEA0 + .sdata start:0x804FF484 end:0x804FF494 + .sbss start:0x804FFA90 end:0x804FFB00 + +DEMOPad.c: + .data start:0x8044E478 end:0x8044E488 + .bss start:0x804BAEA0 end:0x804BAED0 + +Padclamp.c: + .text start:0x80330468 end:0x80331A64 + .rodata start:0x8040FED0 end:0x8041045C + .sdata2 start:0x805008A0 end:0x805008C4 + +Pad.c: + .text start:0x80331A64 end:0x80332834 + .data start:0x8044E488 end:0x8044E4E0 + .bss start:0x804BAED0 end:0x804BAF20 + .sdata start:0x804FF494 end:0x804FF4D0 + .sbss start:0x804FFB00 end:0x804FFB30 + +ai.c: + .text start:0x80332834 end:0x80332C54 + .data start:0x8044E4E0 end:0x8044E528 + .sbss start:0x804FFB30 end:0x804FFB70 + +ar.c: + .text start:0x80332C54 end:0x803344F0 + .data start:0x8044E528 end:0x8044E570 + .sbss start:0x804FFB70 end:0x804FFB90 + +CARDMount.c: + .text start:0x803344F0 end:0x8033662C + .data start:0x8044E570 end:0x8044E5B0 + +CARDNet.c: + +CARDBios.c: + .text start:0x8033662C end:0x80336698 + .data start:0x8044E5B0 end:0x8044E620 + .bss start:0x804BAF20 end:0x804BB160 + .sbss start:0x804FFB90 end:0x804FFBA8 + +CARDUnlock.c: + .text start:0x80336698 end:0x803378F8 + .data start:0x8044E620 end:0x8044E780 + .sdata start:0x804FF4D0 end:0x804FF4E0 + +CARDRdwr.c: + .text start:0x803378F8 end:0x80337B90 + +CARDBlock.c: + .text start:0x80337B90 end:0x80337F94 + +CARDDir.c: + .text start:0x80337F94 end:0x803383A0 + +CARDCheck.c: + .text start:0x803383A0 end:0x80339CA8 + +CARDStatEx.c: + +CARDOpen.c: + +GXInit.c: + .text start:0x80339CA8 end:0x8033B650 + .data start:0x8044E780 end:0x8044E9C0 + .bss start:0x804BB160 end:0x804BB790 + .sbss start:0x804FFBA8 end:0x804FFBC0 + .sdata2 start:0x805008C4 end:0x805008E8 + +GXFifo.c: + .text start:0x8033B650 end:0x8033D068 + .sbss start:0x804FFBC0 end:0x804FFBE0 + +GXAttr.c: + .data start:0x8044E9C0 end:0x8044EC38 + .sdata start:0x804FF4E0 end:0x804FF4F0 + +GXMisc.c: + .text start:0x8033D068 end:0x8033E510 + .data start:0x8044EC38 end:0x8044EE28 + .sbss start:0x804FFBE0 end:0x804FFBF8 + +GXGeometry.c: + +GXFrameBuf.c: + .sdata2 start:0x805008E8 end:0x805008F8 + +GXLight.c: + .data start:0x8044EE28 end:0x8044EE48 + .sdata2 start:0x805008F8 end:0x80500940 + +GXTexture.c: + .text start:0x8033E510 end:0x80341AB4 + .data start:0x8044EE48 end:0x8044F160 + .sdata start:0x804FF4F0 end:0x804FF53C + .sdata2 start:0x80500940 end:0x80500978 + +GXBump.c: + .sdata2 start:0x80500978 end:0x80500990 + +GXTev.c: + .data start:0x8044F160 end:0x8044F1D8 + +GXPixel.c: + .data start:0x8044F1D8 end:0x8044F254 + .sdata2 start:0x80500990 end:0x805009F0 + +GXDisplayList.c: + .bss start:0x804BB790 end:0x804BBD68 + .sbss start:0x804FFBF8 end:0x804FFC00 + +GXTransform.c: + .sdata2 start:0x805009F0 end:0x00000000 + +GXPerf.c: + .data start:0x8044F254 end:0x8044F340 + +EXIBios.c: + .text start:0x80341AB4 end:0x80343490 + .data start:0x8044F340 end:0x8044F450 + .bss start:0x804BBD68 end:0x804BBE28 + .sdata start:0x804FF53C end:0x804FF574 + .sbss start:0x804FFC00 end:0x804FFC08 + +EXIUart.c: + .text start:0x80343490 end:0x80343AA4 + .sbss start:0x804FFC08 end:0x804FFC18 + +SIBios.c: + .text start:0x80343AA4 end:0x803454B0 + .data start:0x8044F450 end:0x8044F568 + .bss start:0x804BBE28 end:0x804BC0C8 + .sdata start:0x804FF574 end:0x804FF588 + .sbss start:0x804FFC18 end:0x804FFC28 + +SISamplingRate.c: + .data start:0x8044F568 end:0x8044F600 + .sbss start:0x804FFC28 end:0x804FFC30 + +SISteering.c: + .text start:0x803454B0 end:0x80345564 + .data start:0x8044F600 end:0x8044F610 + .sbss start:0x804FFC30 end:0x804FFC40 + +SISteeringXfer.c: + .text start:0x80345564 end:0x803459FC + +SISteeringAuto.c: + .text start:0x803459FC end:0x80346338 + .sbss start:0x804FFC40 end:0x804FFC48 + +DebuggerDriver.c: + .text start:0x80346338 end:0x803465D0 + .sdata start:0x804FF588 end:0x804FF590 + .sbss start:0x804FFC48 end:0x804FFC60 + +AmcExi2Comm.c: + .text start:0x803465D0 end:0x803471E4 + .data start:0x8044F610 end:0x8044F754 + .sdata start:0x804FF590 end:0x804FF598 + .sbss start:0x804FFC60 end:0x804FFC80 + +AmcExi.c: + .text start:0x803471E4 end:0x803472B4 + .bss start:0x804BC0C8 end:0x804BD904 + .sdata start:0x804FF598 end:0x804FF5A0 + +avplayer.cpp: + .text start:0x803472B4 end:0x80348334 + +avsubtitle.cpp: + +audioplayer.cpp: + .text start:0x80348334 end:0x80348640 + +bigyuvswizzler.cpp: + .text start:0x80348640 end:0x80348EE4 + +bigswizzler.cpp: + .text start:0x80348EE4 end:0x8034939C + +rcmpbase.cpp: + .text start:0x8034939C end:0x8034983C + +rcmp_vp6_codec.cpp: + .text start:0x8034983C end:0x8034A348 + +rcmp_vp6_codec_chunk_types.cpp: + .text start:0x8034A348 end:0x8034A390 + +rcmp_mad_codec.cpp: + .text start:0x8034A390 end:0x8034ADB0 + +rcmp_mad_codec_chunk_types.cpp: + .text start:0x8034ADB0 end:0x8034ADE4 + .rodata start:0x8041045C end:0x80410468 + +maddec.cpp: + .text start:0x8034ADE4 end:0x8034B900 + .rodata start:0x80410468 end:0x80411358 + .bss start:0x804BD904 end:0x804BDC04 + .sbss start:0x804FFC80 end:0x804FFF40 + +maddeca.cpp: + .text start:0x8034B900 end:0x8034BAC4 + .rodata start:0x80411358 end:0x804114A8 + +madidct.cpp: + .text start:0x8034BAC4 end:0x8034C0A4 + .bss start:0x804BDC04 end:0x804BDD04 + +allocator.cpp: + .text start:0x8034C0A4 end:0x8034C160 + .sdata start:0x804FF5A0 end:0x804FF5B0 + +pb_globals.c: + .text start:0x8034C160 end:0x8034C4E4 + .bss start:0x804BDD04 end:0x804BE104 + +postproc.c: + .text start:0x8034C4E4 end:0x8034D1A8 + +quantize.c: + .text start:0x8034D1A8 end:0x8034DEC8 + .rodata start:0x804114A8 end:0x804119D0 + +simpledeblocker.c: + .rodata start:0x804119D0 end:0x80411AF4 + +vfwpbdll_if.c: + .text start:0x8034DEC8 end:0x8034E180 + +vputil.c: + .text start:0x8034E180 end:0x8034E9F4 + .data start:0x8044F754 end:0x80450094 + .bss start:0x804BE104 end:0x804BE56C + +doptsystemdependant.c: + .text start:0x8034E9F4 end:0x8034EB4C + +DSystemDependant.c: + .text start:0x8034EB4C end:0x8034EB64 + +uoptsystemdependant.c: + .text start:0x8034EB64 end:0x8034ED68 + +duck_mem.cpp: + +boolhuff.c: + +borders.c: + .text start:0x8034ED68 end:0x8034F154 + +clamp.c: + .text start:0x8034F154 end:0x8034F21C + +deblock.c: + .text start:0x8034F21C end:0x80351AC0 + +decodembs.c: + .text start:0x80351AC0 end:0x8035305C + .rodata start:0x80411AF4 end:0x80412108 + +decodemode.c: + .text start:0x8035305C end:0x80353564 + +decodemv.c: + .text start:0x80353564 end:0x80353734 + +DeInterlace.c: + .text start:0x80353734 end:0x803537FC + +dering.c: + .text start:0x803537FC end:0x80354FF0 + +DFrameR.c: + .text start:0x80354FF0 end:0x803556B0 + +FrameIni.c: + .text start:0x803556B0 end:0x80355CA8 + .rodata start:0x80412108 end:0x80412168 + +Huffman.c: + .text start:0x80355CA8 end:0x8035645C + +idctpart.c: + .rodata start:0x80412168 end:0x80412484 + +loopfilter.c: + .text start:0x8035645C end:0x80356920 + +reconstruct.c: + .text start:0x80356920 end:0x80356BB0 + +scale.c: + .text start:0x80356BB0 end:0x80357864 + +TokenEntropy.c: + .text start:0x80357864 end:0x80357928 + .rodata start:0x80412484 end:0x804124FC + +criticalpath.c: + .text start:0x80357928 end:0x8035A830 + .rodata start:0x804124FC end:0x80415180 + .data start:0x80450094 end:0x804502C4 + .bss start:0x804BE56C end:0x804FEDC0 + .sdata start:0x804FF5B0 end:0x804FF8C0 + +recon.c: + .text start:0x8035A830 end:0x8035A9B0 + +s3dlow.c: + .text start:0x8035A9B0 end:0x8035AA7C + +saems.c: + .text start:0x8035AA7C end:0x8035D4A0 + .data start:0x804502C4 end:0x80456560 + +saemsamb.c: + .text start:0x8035D4A0 end:0x8035D6BC + +saemsmbf.c: + .text start:0x8035D6BC end:0x8035DCA4 + +saemsmbm.c: + .text start:0x8035DCA4 end:0x8035DFE4 + +saemstimupdt.c: + .text start:0x8035DFE4 end:0x803A41B8 + +salloc.c: + +sattrdef.c: + +sbadd.c: + +sballoc.c: + +sbasync.c: + +sbasyncm.c: + +sbhdrcpy.c: + +sbhdrsze.c: + +sbplay.c: + +sbremove.c: + +sbvalid.c: + +scheckpo.c: + +sclnt100.c: + +sctrldry.cpp: + +sdata.c: + +sfxlevel.c: + +slowpass.c: + +smemcpy.cpp: + +smemdis.c: + +smemlmt.c: + +smemlu.c: + +smemman.c: + +sndfxbus.cpp: + +spatkey.c: + +spitch.c: + +spktplay.c: + +splysdef.c: + +spoutlat.c: + +srandom.c: + +srender.c: + +sresopat.c: + +sserver.c: + +ssine.c: + +sst.c: + +sst3dpos.c: + +sstautov.c: + +sstcrtap.c: + +sstfxlev.c: + +sstgetrp.c: + +ssthold.c: + +sstlowp.c: + +sstop.c: + +sstovrhd.c: + +sstpmult.c: + +sstqmem.c: + +sstqreqi.c: + +sstrmdry.cpp: + +sstrstat.c: + +sstsetgl.c: + +sststat.c: + +ssttmul.c: + +sstvol.c: + +ssys.cpp: + +ssysinit.c: + +ssysserv.c: + +ssysveccsismutex.cpp: + +stagpat.c: + +stimemul.c: + +stpparse.c: + +svecreal6.cpp: + +svol.c: + +lbmpeg.cpp: + +mpeghufftables.cpp: + +mpegl3base.cpp: + +sdfx.c: + +sdspmix.c: + +snddrv.c: + +sfxrevc.c: + +slinkmix.c: + +smixer.c: + +smixfilt.c: + +smixfram.c: + +smixhip.c: + +smixlowp.c: + +smixptch.c: + +smixtmul.c: + +smixvec.c: + +stretch.c: + +sx87d16.c: + +author.cpp: + +satospkr.c: + +sclcptch.c: + +sctlfilt.c: + +sdownmix.cpp: + +sexithndl.c: + +sformat.c: + +sgetdata.c: + +sgettag.c: + +slib.c: + +slinklst.c: + +smemhigh.cpp: + +SNDI_cos.c: + +SNDI_sin.c: + +soutputmap.cpp: + +sover.c: + +spantoaz.c: + +spat2hdr.c: + +spktctoh.c: + +sprofvoc.c: + +sreallocbuf.cpp: + +srrange.c: + +coda.cpp: + +setmemcpy.cpp: + +saramman.c: + +sfamplf.c: + +sfbpffir8.c: + +sfecho.c: + +sfft24.c: + +sfhpffir8.c: + +sfilter.c: + +sfir.c: + +sfir8.c: + +sflpf.c: + +sflpffir8.c: + +sfmixer.c: + +sfreson.c: + +sfrsf.c: + +sfsplit.c: + +sfsrc.c: + +sinit16.c: + +sinitut.c: + +sinitxa.c: + +smixc.c: + +supf.c: + +suplf.c: + +supmutf.c: + +supmutlf.c: + +supmutpf.c: + +suppf.c: + +supxaf.cpp: + +supxalf.cpp: + +supxapf.cpp: + +sgparse.cpp: + +SNDI_mult16.c: + +SNDI_root1x.c: + +eaxadecf.cpp: + +mtdecf.cpp: + +scrsfl.c: + +SNDI_findprime.c: + +csis.cpp: + +pathcontrol.cpp: + +pathevent.cpp: + +pathinit.cpp: + +pathreal.cpp: + +pathreal6.cpp: + +pathserv.cpp: + +pathsnd.cpp: + +pathtrack.cpp: + +pathvol.cpp: + +author.cpp_1: + +pathaction.cpp: + +pathbank.cpp: + +pathdebug.cpp: + +pathnode.cpp: + +pathrand.cpp: + +spchbank.c: + +spchdata.c: + +spchevnt.c: + +spchinit.c: + +spchpick.c: + +spchrand.c: + +spchrslv.c: + +spchrule.c: + +spchsamp.c: + +sptick.c: + +sputil.c: + +spchcsis.cpp: + +author.cpp_2: + +filesys_c.cpp: + +filesys_cc.cpp: + +filesys.cpp: + +filesysopts.cpp: + +hlafile.cpp: + +hlsfile.cpp: + +syncfile.cpp: + +device.cpp: + +dvd_device.cpp: + +hd_device.cpp: + +bigfile.cpp: + +inittmr.cpp: + +signals.cpp: + +threads.cpp: + +timerthread.cpp: + +exit.cpp: + +mutex.cpp: + +systask.cpp: + +systemvars.cpp: + +timer.cpp: + +initvblt.cpp: + +oldfontkern.cpp: + +oldfontchar.cpp: + +oldfontcreate.cpp: + +oldfontdriver.cpp: + +shpcreate.cpp: + +txldepthto.cpp: + +allocator.cpp_1: + +shpdestroy.cpp: + +abortmsg.cpp: + +shpelement.cpp: + +shpsize.cpp: + +shpclone.cpp: + +memcard_interface.cpp: + +memcard_interface_impl.cpp: + +memcard_memvectors.cpp: + +memcard_taskmanager.cpp: + +gc_memcard_interface_impl.cpp: + +gc_memcard_taskmanager.cpp: + +locale.cpp: + +memcard_utilities.cpp: + +gc_driver.cpp: + +gc_interface.cpp: + +gc_public.cpp: + +gc_tasks.cpp: + +gc_trctasks.cpp: + +interfaceimp.cpp: + +gc_blockcalculator.cpp: + +memcopy.cpp: + +memfill.cpp: + +locale.cpp_1: + +memclear.cpp: + +abortmsg.cpp_1: + +debugger.cpp: + +printvstr.cpp: + +printstr.cpp: + +printdrv.cpp: + +gc_effect.cpp: + +effectimp.cpp: + +interface.cpp: + +memvectors.cpp: + +gc_device.cpp: + +gc_interface.cpp_1: + +gc_pad.cpp: + +interfaceimp.cpp_1: + +device.cpp_1: + +effect.cpp: + +event.cpp: + +eventqueue.cpp: + +itimer.cpp: + +VM.c: + +VMPageReplacement.c: + +VMMapping.c: + +dummy.c: + +tors.c: + +tolower.c: + +vprintf.c: + +wprintf.c: + +bsearch.c: + +strrchr.c: + +wcscat.c: + +wcscpy.c: + +wcslen.c: + +VFPRINTF2.C: + +VFPRINTF2.C_1: + +wmemchr.c: + +wmemcpy.c: + +eabi.asm: + +e_exp.c: + +s_sin.c: + +k_cos.c: + +k_sin.c: + +e_rem_pio2.c: + +k_rem_pio2.c: + +s_floor.c: + +OSFatal.c: + +OSMessage.c: + +arq.c: + +AX.c: + +AXAlloc.c: + +AXAux.c: + +AXCL.c: + +AXOut.c: + +AXSPB.c: + +AXVPB.c: + +AXProf.c: + +AXComp.c: + +DSPCode.c: + +dsp.c: + +dsp_debug.c: + +dsp_task.c: + +CARDFormat.c: + +CARDCreate.c: + +CARDRead.c: + +CARDWrite.c: + +CARDDelete.c: + +CARDStat.c: + +CARDRename.c: + +eathread_semaphore.cpp: + +eathread.cpp: + +eathread_thread.cpp: + +sbpatinf.c: + +sgetpvol.c: + +sstgetpv.c: + +stimerem.c: + +VMBase.c: + +OSSemaphore.c: diff --git a/config_temp/symbols.txt b/config_temp/symbols.txt new file mode 100644 index 000000000..4a489daf6 --- /dev/null +++ b/config_temp/symbols.txt @@ -0,0 +1,25571 @@ +__start = .init:0x80003100; // type:label scope:global +__init_vm = .init:0x80003464; // type:label scope:global +__premain = .init:0x80003464; // type:label scope:global +__init_hardware = .init:0x80003468; // type:function size:0x24 scope:global +gcc2_compiled. = .text:0x800034A0; // type:label scope:local +__16AITrafficManagerGQ23Sim5Param = .text:0x800034A0; // type:function size:0x6C4 scope:global +_._16AITrafficManager = .text:0x80003B64; // type:function size:0x2B0 scope:global +Construct__16AITrafficManagerGQ23Sim5Param = .text:0x80003E14; // type:function size:0x9C scope:global +OnQueryVehicleCache__C16AITrafficManagerPC8IVehiclePC13IVehicleCache = .text:0x80003EB0; // type:function size:0x1AC scope:global +OnRemovedVehicleCache__16AITrafficManagerP8IVehicle = .text:0x8000405C; // type:function size:0x4 scope:global +OnAttached__16AITrafficManagerP11IAttachable = .text:0x80004060; // type:function size:0x94 scope:global +OnDetached__16AITrafficManagerP11IAttachable = .text:0x800040F4; // type:function size:0xDC scope:global +NextSpawn__16AITrafficManager = .text:0x800041D0; // type:function size:0x2A4 scope:global +GetAvailableTrafficVehicle__16AITrafficManagerUib = .text:0x80004474; // type:function size:0x244 scope:global +SpawnTraffic__16AITrafficManager = .text:0x800046B8; // type:function size:0x3D0 scope:global +NeedsTraffic__C16AITrafficManager = .text:0x80004A88; // type:function size:0xBC scope:global +UpdateDebug__16AITrafficManager = .text:0x80004B44; // type:function size:0x54 scope:global +SetTrafficPattern__16AITrafficManagerUi = .text:0x80004B98; // type:function size:0x13C scope:global +RandomSortTC__FP14ITrafficCenterT0 = .text:0x80004CD4; // type:function size:0x30 scope:local +FindCollisions__C16AITrafficManagerRCQ25UMath7Vector3 = .text:0x80004D04; // type:function size:0x160 scope:global +CheckRace__C16AITrafficManagerRC8WRoadNav = .text:0x80004E64; // type:function size:0xA0 scope:global +FindSpawnPoint__C16AITrafficManagerR8WRoadNav = .text:0x80004F04; // type:function size:0x2BC scope:global +ChoosePattern__16AITrafficManager = .text:0x800051C0; // type:function size:0x204 scope:global +ValidateVehicle__C16AITrafficManagerP8IVehiclef = .text:0x800053C4; // type:function size:0x1E4 scope:global +ComputeDensity__C16AITrafficManager = .text:0x800055A8; // type:function size:0x1E8 scope:global +Update__16AITrafficManagerf = .text:0x80005790; // type:function size:0x168 scope:global +FlushAllTraffic__16AITrafficManagerb = .text:0x800058F8; // type:function size:0x1D8 scope:global +OnTask__16AITrafficManagerP10HSIMTASK__f = .text:0x80005AD0; // type:function size:0x3C scope:global +OnDebugDraw__16AITrafficManager = .text:0x80005B0C; // type:function size:0x4 scope:global +__12AICopManagerGQ23Sim5Param = .text:0x80005B10; // type:function size:0x87C scope:global +_._12AICopManager = .text:0x8000638C; // type:function size:0x3E0 scope:global +Construct__12AICopManagerGQ23Sim5Param = .text:0x8000676C; // type:function size:0x74 scope:global +IsPendingSupportVehicle__C12AICopManagerP8IVehicle = .text:0x800067E0; // type:function size:0x70 scope:global +OnQueryVehicleCache__C12AICopManagerPC8IVehiclePC13IVehicleCache = .text:0x80006850; // type:function size:0x10C scope:global +OnRemovedVehicleCache__12AICopManagerP8IVehicle = .text:0x8000695C; // type:function size:0x94 scope:global +OnAttached__12AICopManagerP11IAttachable = .text:0x800069F0; // type:function size:0x1A4 scope:global +OnDetached__12AICopManagerP11IAttachable = .text:0x80006B94; // type:function size:0x2C4 scope:global +VehicleSpawningEnabled__12AICopManagerb = .text:0x80006E58; // type:function size:0xA8 scope:global +GetAvailableCopVehicleByClass__12AICopManagerG6UCrc32b = .text:0x80006F00; // type:function size:0x1FC scope:global +GetAvailableCopVehicleByName__12AICopManagerPCc = .text:0x800070FC; // type:function size:0x314 scope:global +GetActiveCopVehicleFromOutOfView__12AICopManagerG6UCrc32 = .text:0x80007410; // type:function size:0x238 scope:global +GetPursuitActivity__12AICopManagerP8ISimable = .text:0x80007648; // type:function size:0x198 scope:global +SpawnCop__12AICopManagerRQ25UMath7Vector3T1PCcbT4 = .text:0x800077E0; // type:function size:0x120 scope:global +DoesSpotOverlapCar__FRCQ25UMath7Vector3f = .text:0x80007900; // type:function size:0x170 scope:local +TrySpawnCop__12AICopManagerRCQ212AICopManager15SpawnCopRequest = .text:0x80007A70; // type:function size:0x2F8 scope:global +IsCopSpawnPending__C12AICopManager = .text:0x80007D68; // type:function size:0x58 scope:global +UpdateSpawnRequests__12AICopManager = .text:0x80007DC0; // type:function size:0xCC scope:global +MessageSetAutoSpawnMode__12AICopManagerRC20MSetCopAutoSpawnMode = .text:0x80007E8C; // type:function size:0x4 scope:global +MessageSetCopsEnabled__12AICopManagerRC15MSetCopsEnabled = .text:0x80007E90; // type:function size:0x18 scope:global +MessageForcePursuitStart__12AICopManagerRC18MForcePursuitStart = .text:0x80007EA8; // type:function size:0x3C scope:global +SetAllBustedTimersToZero__12AICopManager = .text:0x80007EE4; // type:function size:0x80 scope:global +MessageBreakerStopCops__12AICopManagerRC16MBreakerStopCops = .text:0x80007F64; // type:function size:0xEC scope:global +ApplyBreakerZones__12AICopManager = .text:0x80008050; // type:function size:0x25C scope:global +SpawnPatrolCar__12AICopManager = .text:0x800082AC; // type:function size:0x14C scope:global +GetSpawnPositionAheadOfTarget__12AICopManagerP8IPursuitRQ25UMath7Vector3T2f = .text:0x800083F8; // type:function size:0x28C scope:global +SpawnPursuitCar__12AICopManagerP8IPursuit = .text:0x80008684; // type:function size:0x1F0 scope:global +rand_point_in_circle__Fv = .text:0x80008874; // type:function size:0x114 scope:global +SpawnPursuitIVehicle__12AICopManagerP8IPursuitP8IVehicle = .text:0x80008988; // type:function size:0x7DC scope:global +SpawnPursuitCarByName__12AICopManagerP8IPursuitPCc = .text:0x80009164; // type:function size:0x8C scope:global +SpawnVehicleBehindTarget__12AICopManagerP8IPursuitP8IVehicle = .text:0x800091F0; // type:function size:0x1EC scope:global +SpawnCopCarNow__12AICopManagerP8IPursuit = .text:0x800093DC; // type:function size:0x60 scope:global +SpawnPursuitHelicopter__12AICopManagerP8IPursuit = .text:0x8000943C; // type:function size:0x2F0 scope:global +PickRoadblockSetup__Ffib = .text:0x8000972C; // type:function size:0x90 scope:global +CreateRoadBlock__12AICopManagerP8IPursuitiP8IVehiclePQ43UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10_4List = .text:0x800097BC; // type:function size:0xFE0 scope:global +RemoveActiveCopVehicle__12AICopManagerP8IVehicle = .text:0x8000A79C; // type:function size:0x178 scope:global +UpdatePatrols__12AICopManager = .text:0x8000A914; // type:function size:0x6F0 scope:global +GetHeavySupportVehicles__12AICopManagerP20GroundSupportRequest = .text:0x8000B004; // type:function size:0x25C scope:global +StartHeavySupport__12AICopManagerP8IPursuitP20GroundSupportRequest = .text:0x8000B260; // type:function size:0x200 scope:global +GetLeaderSupportVehicles__12AICopManagerP20GroundSupportRequest = .text:0x8000B460; // type:function size:0x248 scope:global +StartLeaderSupport__12AICopManagerP8IPursuitP20GroundSupportRequest = .text:0x8000B6A8; // type:function size:0x284 scope:global +UpdateSupportCops__12AICopManagerP8IPursuit = .text:0x8000B92C; // type:function size:0x27C scope:global +PursuitIsEvaded__12AICopManagerP8IPursuit = .text:0x8000BBA8; // type:function size:0x284 scope:global +CommitPursuitDetails__12AICopManagerP8IPursuit = .text:0x8000BE2C; // type:function size:0x2C0 scope:global +IsCopRequestPending__12AICopManager = .text:0x8000C0EC; // type:function size:0x130 scope:global +CanPursueRacers__12AICopManager = .text:0x8000C21C; // type:function size:0x124 scope:global +IsPlayerPursuitActive__12AICopManager = .text:0x8000C340; // type:function size:0x94 scope:global +PlayerPursuitHasCop__C12AICopManager = .text:0x8000C3D4; // type:function size:0xA8 scope:global +UpdatePursuits__12AICopManager = .text:0x8000C47C; // type:function size:0x9D4 scope:global +UpdateRoadBlocks__12AICopManager = .text:0x8000CE50; // type:function size:0x4D4 scope:global +UpdateDebug__12AICopManager = .text:0x8000D324; // type:function size:0x54 scope:global +UpdateCopPriorities__12AICopManageri = .text:0x8000D378; // type:function size:0x468 scope:global +PursueAtHeatLevel__12AICopManageri = .text:0x8000D7E0; // type:function size:0x344 scope:global +KillVehicle__FP8IVehicle = .text:0x8000DB24; // type:function size:0x5C scope:local +ResetCopsForRestart__12AICopManagerb = .text:0x8000DB80; // type:function size:0x86C scope:global +LockoutCops__12AICopManagerb = .text:0x8000E3EC; // type:function size:0x140 scope:global +NoNewPursuitsOrCops__12AICopManager = .text:0x8000E52C; // type:function size:0xC scope:global +OnTask__12AICopManagerP10HSIMTASK__f = .text:0x8000E538; // type:function size:0x90 scope:global +OnDebugDraw__12AICopManager = .text:0x8000E5C8; // type:function size:0x4 scope:global +__16AvoidableManagerGQ23Sim5Param = .text:0x8000E5CC; // type:function size:0xAC scope:global +_._16AvoidableManager = .text:0x8000E678; // type:function size:0x98 scope:global +Construct__16AvoidableManagerGQ23Sim5Param = .text:0x8000E710; // type:function size:0x74 scope:global +OnDebugDraw__16AvoidableManager = .text:0x8000E784; // type:function size:0x20 scope:global +OnTask__16AvoidableManagerP10HSIMTASK__f = .text:0x8000E7A4; // type:function size:0x38 scope:global +__11AIAvoidablePQ33UTL3COM8IUnknown = .text:0x8000E7DC; // type:function size:0xC0 scope:global +_._11AIAvoidable = .text:0x8000E89C; // type:function size:0x1BC scope:global +OnOverLap__11AIAvoidableR11AIAvoidableT1f = .text:0x8000EA58; // type:function size:0xB8 scope:global +DrawAll__11AIAvoidable = .text:0x8000EB10; // type:function size:0x4 scope:global +UpdateAllAvoidables__11AIAvoidablef = .text:0x8000EB14; // type:function size:0xB5C scope:global +Construct__12AIActionNoneP14AIActionParams = .text:0x8000F670; // type:function size:0x6C scope:global +__18AIActionTooDamagedP14AIActionParamsf = .text:0x8000F6DC; // type:function size:0x7C scope:global +OnBehaviorChange__18AIActionTooDamagedRC6UCrc32 = .text:0x8000F758; // type:function size:0x58 scope:global +Construct__18AIActionTooDamagedP14AIActionParams = .text:0x8000F7B0; // type:function size:0x4C scope:global +CanBeAttempted__18AIActionTooDamagedf = .text:0x8000F7FC; // type:function size:0x54 scope:global +BeginAction__18AIActionTooDamagedf = .text:0x8000F850; // type:function size:0x60 scope:global +FinishAction__18AIActionTooDamagedf = .text:0x8000F8B0; // type:function size:0x4 scope:global +Update__18AIActionTooDamagedf = .text:0x8000F8B4; // type:function size:0x158 scope:global +OnDebugDraw__18AIActionTooDamaged = .text:0x8000FA0C; // type:function size:0x4 scope:global +__18AIActionGetUnstuckP14AIActionParamsf = .text:0x8000FA10; // type:function size:0x70 scope:global +OnBehaviorChange__18AIActionGetUnstuckRC6UCrc32 = .text:0x8000FA80; // type:function size:0x58 scope:global +Construct__18AIActionGetUnstuckP14AIActionParams = .text:0x8000FAD8; // type:function size:0x4C scope:global +CanBeAttempted__18AIActionGetUnstuckf = .text:0x8000FB24; // type:function size:0x228 scope:global +FinishAction__18AIActionGetUnstuckf = .text:0x8000FD4C; // type:function size:0x6C scope:global +IsFinished__18AIActionGetUnstuck = .text:0x8000FDB8; // type:function size:0x3C scope:global +Update__18AIActionGetUnstuckf = .text:0x8000FDF4; // type:function size:0x84 scope:global +__15AIActionTrafficP14AIActionParamsf = .text:0x8000FE78; // type:function size:0x2D8 scope:global +_._15AIActionTraffic = .text:0x80010150; // type:function size:0x10C scope:global +Construct__15AIActionTrafficP14AIActionParams = .text:0x8001025C; // type:function size:0x4C scope:global +OnBehaviorChange__15AIActionTrafficRC6UCrc32 = .text:0x800102A8; // type:function size:0x88 scope:global +OnAccident__15AIActionTrafficP10HSIMABLE__RCQ25UMath7Vector3T2 = .text:0x80010330; // type:function size:0x168 scope:global +OnCollision__15AIActionTrafficRCQ33Sim9Collision4Info = .text:0x80010498; // type:function size:0x8C scope:global +IsFinished__15AIActionTraffic = .text:0x80010524; // type:function size:0x98 scope:global +CanBeAttempted__15AIActionTrafficf = .text:0x800105BC; // type:function size:0x15C scope:global +BeginAction__15AIActionTrafficf = .text:0x80010718; // type:function size:0x174 scope:global +FinishAction__15AIActionTrafficf = .text:0x8001088C; // type:function size:0x4 scope:global +ComputeSpeed__15AIActionTrafficff = .text:0x80010890; // type:function size:0x344 scope:global +UpdateNavPos__15AIActionTrafficf = .text:0x80010BD4; // type:function size:0x45C scope:global +ShouldPullOver__15AIActionTrafficRCQ25UMath7Vector3P8WRoadNav = .text:0x80011030; // type:function size:0x8 scope:global +Update__15AIActionTrafficf = .text:0x80011038; // type:function size:0x5B0 scope:global +OnDebugDraw__15AIActionTraffic = .text:0x800115E8; // type:function size:0x4 scope:global +MessageSetSpeed__15AIActionTrafficRC16MSetTrafficSpeed = .text:0x800115EC; // type:function size:0xAC scope:global +__22AIActionPursuitOffRoadP14AIActionParamsf = .text:0x80011698; // type:function size:0x120 scope:global +OnBehaviorChange__22AIActionPursuitOffRoadRC6UCrc32 = .text:0x800117B8; // type:function size:0x8C scope:global +Construct__22AIActionPursuitOffRoadP14AIActionParams = .text:0x80011844; // type:function size:0x4C scope:global +ShouldDoIt__22AIActionPursuitOffRoad = .text:0x80011890; // type:function size:0x21C scope:global +CanBeAttempted__22AIActionPursuitOffRoadf = .text:0x80011AAC; // type:function size:0x9C scope:global +IsFinished__22AIActionPursuitOffRoad = .text:0x80011B48; // type:function size:0x64 scope:global +BeginAction__22AIActionPursuitOffRoadf = .text:0x80011BAC; // type:function size:0x138 scope:global +FinishAction__22AIActionPursuitOffRoadf = .text:0x80011CE4; // type:function size:0x4 scope:global +UpdateRoadAffinity__22AIActionPursuitOffRoadRQ25UMath7Vector3 = .text:0x80011CE8; // type:function size:0x258 scope:global +UpdateSeparation__22AIActionPursuitOffRoadRQ25UMath7Vector3 = .text:0x80011F40; // type:function size:0x68 scope:global +UpdateAvoidWalls__22AIActionPursuitOffRoadRQ25UMath7Vector3 = .text:0x80011FA8; // type:function size:0x318 scope:global +UpdateSeek__22AIActionPursuitOffRoadRQ25UMath7Vector3 = .text:0x800122C0; // type:function size:0xB88 scope:global +Update__22AIActionPursuitOffRoadf = .text:0x80012E48; // type:function size:0x798 scope:global +OnDebugDraw__22AIActionPursuitOffRoad = .text:0x800135E0; // type:function size:0x4 scope:global +__19AIActionHeliPursuitP14AIActionParamsf = .text:0x800135E4; // type:function size:0x144 scope:global +OnCollision__19AIActionHeliPursuitRCQ33Sim9Collision4Info = .text:0x80013728; // type:function size:0x154 scope:global +Construct__19AIActionHeliPursuitP14AIActionParams = .text:0x8001387C; // type:function size:0x4C scope:global +IsFinished__19AIActionHeliPursuit = .text:0x800138C8; // type:function size:0x1C scope:global +FinishAction__19AIActionHeliPursuitf = .text:0x800138E4; // type:function size:0x14 scope:global +StartPathToPlayerCar__19AIActionHeliPursuit = .text:0x800138F8; // type:function size:0xC4 scope:global +BeginAction__19AIActionHeliPursuitf = .text:0x800139BC; // type:function size:0x20 scope:global +StraightLinePursuit__19AIActionHeliPursuit = .text:0x800139DC; // type:function size:0x570 scope:global +SkidHitPursuit__19AIActionHeliPursuit = .text:0x80013F4C; // type:function size:0x47C scope:global +SetNextPerpSearchDest__19AIActionHeliPursuit = .text:0x800143C8; // type:function size:0x250 scope:global +SearchForPerp__19AIActionHeliPursuit = .text:0x80014618; // type:function size:0x19C scope:global +Update__19AIActionHeliPursuitf = .text:0x800147B4; // type:function size:0x1C8 scope:global +OnDebugDraw__19AIActionHeliPursuit = .text:0x8001497C; // type:function size:0x4 scope:global +__16AIActionHeliExitP14AIActionParamsf = .text:0x80014980; // type:function size:0xE4 scope:global +Construct__16AIActionHeliExitP14AIActionParams = .text:0x80014A64; // type:function size:0x4C scope:global +IsFinished__16AIActionHeliExit = .text:0x80014AB0; // type:function size:0x13C scope:global +FinishAction__16AIActionHeliExitf = .text:0x80014BEC; // type:function size:0x18 scope:global +BeginAction__16AIActionHeliExitf = .text:0x80014C04; // type:function size:0x9C scope:global +Update__16AIActionHeliExitf = .text:0x80014CA0; // type:function size:0x354 scope:global +OnDebugDraw__16AIActionHeliExit = .text:0x80014FF4; // type:function size:0x4 scope:global +__17AIActionHeadOnRamP14AIActionParamsf = .text:0x80014FF8; // type:function size:0xE4 scope:global +OnBehaviorChange__17AIActionHeadOnRamRC6UCrc32 = .text:0x800150DC; // type:function size:0x8C scope:global +Construct__17AIActionHeadOnRamP14AIActionParams = .text:0x80015168; // type:function size:0x4C scope:global +CanBeAttempted__17AIActionHeadOnRamf = .text:0x800151B4; // type:function size:0xCC scope:global +IsFinished__17AIActionHeadOnRam = .text:0x80015280; // type:function size:0x40 scope:global +BeginAction__17AIActionHeadOnRamf = .text:0x800152C0; // type:function size:0xC0 scope:global +FinishAction__17AIActionHeadOnRamf = .text:0x80015380; // type:function size:0x4 scope:global +GetSeekPosition__17AIActionHeadOnRamRQ25UMath7Vector3 = .text:0x80015384; // type:function size:0x208 scope:global +GetDesiredSpeed__17AIActionHeadOnRamRQ25UMath7Vector3 = .text:0x8001558C; // type:function size:0x13C scope:global +Update__17AIActionHeadOnRamf = .text:0x800156C8; // type:function size:0x198 scope:global +OnDebugDraw__17AIActionHeadOnRam = .text:0x80015860; // type:function size:0x4 scope:global +__11AIActionRamP14AIActionParamsf = .text:0x80015864; // type:function size:0xFC scope:global +OnBehaviorChange__11AIActionRamRC6UCrc32 = .text:0x80015960; // type:function size:0xBC scope:global +Construct__11AIActionRamP14AIActionParams = .text:0x80015A1C; // type:function size:0x4C scope:global +ShouldDoIt__11AIActionRam = .text:0x80015A68; // type:function size:0x80 scope:global +CanBeAttempted__11AIActionRamf = .text:0x80015AE8; // type:function size:0x9C scope:global +IsFinished__11AIActionRam = .text:0x80015B84; // type:function size:0x64 scope:global +BeginAction__11AIActionRamf = .text:0x80015BE8; // type:function size:0xAC scope:global +FinishAction__11AIActionRamf = .text:0x80015C94; // type:function size:0x4 scope:global +GetSeekPosition__11AIActionRamRQ25UMath7Vector3b = .text:0x80015C98; // type:function size:0x5B4 scope:global +UpdateSeek__11AIActionRamRQ25UMath7Vector3T1b = .text:0x8001624C; // type:function size:0x1EC scope:global +Update__11AIActionRamf = .text:0x80016438; // type:function size:0x738 scope:global +OnDebugDraw__11AIActionRam = .text:0x80016B70; // type:function size:0x4 scope:global +Construct__17AIActionStopShortP14AIActionParams = .text:0x80016B74; // type:function size:0x4C scope:global +__17AIActionStopShortP14AIActionParamsf = .text:0x80016BC0; // type:function size:0x7C scope:global +CanBeAttempted__17AIActionStopShortf = .text:0x80016C3C; // type:function size:0x8 scope:global +OnBehaviorChange__17AIActionStopShortRC6UCrc32 = .text:0x80016C44; // type:function size:0x8C scope:global +IsFinished__17AIActionStopShort = .text:0x80016CD0; // type:function size:0x40 scope:global +Update__17AIActionStopShortf = .text:0x80016D10; // type:function size:0xF0 scope:global +Construct__14AIActionSplineP14AIActionParams = .text:0x80016E00; // type:function size:0x6C scope:global +Update__14AIActionSplinef = .text:0x80016E6C; // type:function size:0x4 scope:global +Construct__14AIActionStrafeP14AIActionParams = .text:0x80016E70; // type:function size:0x6C scope:global +Update__14AIActionStrafef = .text:0x80016EDC; // type:function size:0x4 scope:global +Construct__16AIActionAirborneP14AIActionParams = .text:0x80016EE0; // type:function size:0x4C scope:global +__16AIActionAirborneP14AIActionParamsf = .text:0x80016F2C; // type:function size:0xA8 scope:global +OnBehaviorChange__16AIActionAirborneRC6UCrc32 = .text:0x80016FD4; // type:function size:0xB8 scope:global +CanBeAttempted__16AIActionAirbornef = .text:0x8001708C; // type:function size:0xD8 scope:global +IsFinished__16AIActionAirborne = .text:0x80017164; // type:function size:0xC scope:global +Update__16AIActionAirbornef = .text:0x80017170; // type:function size:0xF4 scope:global +Construct__17AIActionJackKnifeP14AIActionParams = .text:0x80017264; // type:function size:0x4C scope:global +__17AIActionJackKnifeP14AIActionParamsf = .text:0x800172B0; // type:function size:0x180 scope:global +OnBehaviorChange__17AIActionJackKnifeRC6UCrc32 = .text:0x80017430; // type:function size:0x8C scope:global +CanBeAttempted__17AIActionJackKnifef = .text:0x800174BC; // type:function size:0x284 scope:global +Update__17AIActionJackKnifef = .text:0x80017740; // type:function size:0x2DC scope:global +MessageJackKnife__17AIActionJackKnifeRC10MJackKnife = .text:0x80017A1C; // type:function size:0x78 scope:global +__23AIActionStaticRoadBlockP14AIActionParamsf = .text:0x80017A94; // type:function size:0x7C scope:global +OnBehaviorChange__23AIActionStaticRoadBlockRC6UCrc32 = .text:0x80017B10; // type:function size:0x58 scope:global +Construct__23AIActionStaticRoadBlockP14AIActionParams = .text:0x80017B68; // type:function size:0x4C scope:global +CanBeAttempted__23AIActionStaticRoadBlockf = .text:0x80017BB4; // type:function size:0x2C scope:global +BeginAction__23AIActionStaticRoadBlockf = .text:0x80017BE0; // type:function size:0x4 scope:global +FinishAction__23AIActionStaticRoadBlockf = .text:0x80017BE4; // type:function size:0x4 scope:global +Update__23AIActionStaticRoadBlockf = .text:0x80017BE8; // type:function size:0xF0 scope:global +OnDebugDraw__23AIActionStaticRoadBlock = .text:0x80017CD8; // type:function size:0x4 scope:global +__12AIActionRaceP14AIActionParamsf = .text:0x80017CDC; // type:function size:0x16C scope:global +Construct__12AIActionRaceP14AIActionParams = .text:0x80017E48; // type:function size:0x4C scope:global +OnBehaviorChange__12AIActionRaceRC6UCrc32 = .text:0x80017E94; // type:function size:0xB8 scope:global +OnTask__12AIActionRaceP10HSIMTASK__f = .text:0x80017F4C; // type:function size:0x3C scope:global +CanBeAttempted__12AIActionRacef = .text:0x80017F88; // type:function size:0xF4 scope:global +_._12AIActionRace = .text:0x8001807C; // type:function size:0xAC scope:global +BeginAction__12AIActionRacef = .text:0x80018128; // type:function size:0x308 scope:global +FinishAction__12AIActionRacef = .text:0x80018430; // type:function size:0x70 scope:global +ComputePotentials__12AIActionRace = .text:0x800184A0; // type:function size:0xCB8 scope:global +GetSpeedLimitForCurvature__Ffff = .text:0x80019158; // type:function size:0x80 scope:global +GetSpeedLimit__Fffff = .text:0x800191D8; // type:function size:0xAC scope:global +GetPotentialSpeed__C12AIActionRaceffb = .text:0x80019284; // type:function size:0x7A8 scope:global +GetPotentialAcceleration__C12AIActionRaceffbT3 = .text:0x80019A2C; // type:function size:0x374 scope:global +GetPotentialNOS__C12AIActionRacefbf = .text:0x80019DA0; // type:function size:0x118 scope:global +CheckOffPath__12AIActionRacef = .text:0x80019EB8; // type:function size:0x2D0 scope:global +UpdateNavPos__12AIActionRacefRCQ25UMath7Vector3 = .text:0x8001A188; // type:function size:0x2B0 scope:global +CheckSpeedTraps__C12AIActionRacefffb = .text:0x8001A438; // type:function size:0x290 scope:global +Update__12AIActionRacef = .text:0x8001A6C8; // type:function size:0xF54 scope:global +OnDebugDraw__12AIActionRace = .text:0x8001B61C; // type:function size:0x4 scope:global +GetCaffeineLayerName__Fi = .text:0x8001B620; // type:function size:0x54 scope:global +__14AIVehicleEmptyRC14BehaviorParams = .text:0x8001B674; // type:function size:0x74 scope:global +Construct__14AIVehicleEmptyRC14BehaviorParams = .text:0x8001B6E8; // type:function size:0x44 scope:global +__14AIVehicleHumanRC14BehaviorParams = .text:0x8001B72C; // type:function size:0xE0 scope:global +Construct__14AIVehicleHumanRC14BehaviorParams = .text:0x8001B80C; // type:function size:0x44 scope:global +_._14AIVehicleHuman = .text:0x8001B850; // type:function size:0x1B0 scope:global +UpdateWrongWay__14AIVehicleHuman = .text:0x8001BA00; // type:function size:0x224 scope:global +SetAiControl__14AIVehicleHumanb = .text:0x8001BC24; // type:function size:0xC4 scope:global +IsDragRacing__14AIVehicleHuman = .text:0x8001BCE8; // type:function size:0x5C scope:global +IsDragSteering__14AIVehicleHuman = .text:0x8001BD44; // type:function size:0xD4 scope:global +ChangeDragLanes__14AIVehicleHumanb = .text:0x8001BE18; // type:function size:0x70 scope:global +OnDebugDraw__14AIVehicleHuman = .text:0x8001BE88; // type:function size:0x4 scope:global +Update__14AIVehicleHumanf = .text:0x8001BE8C; // type:function size:0x700 scope:global +Construct__9AIVehicleRC14BehaviorParams = .text:0x8001C58C; // type:function size:0x58 scope:global +__9AIVehicleRC14BehaviorParamsffQ23Sim8TaskMode = .text:0x8001C5E4; // type:function size:0x4A0 scope:global +_._9AIVehicle = .text:0x8001CA84; // type:function size:0x1E8 scope:global +ResetInternals__9AIVehicle = .text:0x8001CC6C; // type:function size:0xC8 scope:global +OnTaskSimulate__9AIVehiclef = .text:0x8001CD34; // type:function size:0x98 scope:global +OnClearCausality__9AIVehiclef = .text:0x8001CDCC; // type:function size:0x44 scope:global +GetAcceleration__C9AIVehiclef = .text:0x8001CE10; // type:function size:0x94 scope:global +OnUpdateAvoidable__9AIVehicleRQ25UMath7Vector3Rf = .text:0x8001CEA4; // type:function size:0x120 scope:global +DoNOS__9AIVehicle = .text:0x8001CFC4; // type:function size:0x320 scope:global +OnTask__9AIVehicleP10HSIMTASK__f = .text:0x8001D2E4; // type:function size:0x154 scope:global +OnOwnerAttached__9AIVehicleP11IAttachable = .text:0x8001D438; // type:function size:0x9C scope:global +OnOwnerDetached__9AIVehicleP11IAttachable = .text:0x8001D4D4; // type:function size:0xA0 scope:global +OnBehaviorChange__9AIVehicleRC6UCrc32 = .text:0x8001D574; // type:function size:0x12C scope:global +ClearGoal__9AIVehicle = .text:0x8001D6A0; // type:function size:0x64 scope:global +SetGoal__9AIVehicleRC6UCrc32 = .text:0x8001D704; // type:function size:0x238 scope:global +Update__9AIVehiclef = .text:0x8001D93C; // type:function size:0x184 scope:global +ResetDriveToNav__9AIVehicle14eLaneSelection = .text:0x8001DAC0; // type:function size:0x110 scope:global +ResetVehicleToRoadNav__9AIVehicleP8WRoadNav = .text:0x8001DBD0; // type:function size:0xA0 scope:global +ResetVehicleToRoadNav__9AIVehiclescf = .text:0x8001DC70; // type:function size:0xB4 scope:global +ResetVehicleToRoadPos__9AIVehicleRCQ25UMath7Vector3T1 = .text:0x8001DD24; // type:function size:0xAC scope:global +UpdateRoadNavInfo__9AIVehicle = .text:0x8001DDD0; // type:function size:0x110 scope:global +OnReverse__9AIVehiclef = .text:0x8001DEE0; // type:function size:0x204 scope:global +GetOverSteerCorrection__9AIVehiclef = .text:0x8001E0E4; // type:function size:0xC scope:global +OnSteering__9AIVehiclef = .text:0x8001E0F0; // type:function size:0x3F4 scope:global +OnGasBrake__9AIVehiclef = .text:0x8001E4E4; // type:function size:0x3E0 scope:global +OnDriving__9AIVehiclef = .text:0x8001E8C4; // type:function size:0x84 scope:global +GetPathDistanceRemaining__9AIVehicle = .text:0x8001E948; // type:function size:0x234 scope:global +ClearReverseOverride__9AIVehicle = .text:0x8001EB7C; // type:function size:0x1C scope:global +SetReverseOverride__9AIVehiclef = .text:0x8001EB98; // type:function size:0x9C scope:global +UpdateReverseOverride__9AIVehiclef = .text:0x8001EC34; // type:function size:0xA8 scope:global +GetLookAhead__9AIVehicle = .text:0x8001ECDC; // type:function size:0xDC scope:global +UpdateTargeting__9AIVehicle = .text:0x8001EDB8; // type:function size:0x70 scope:global +WorldCollision__9AIVehicleRCQ25UMath7Vector3T1 = .text:0x8001EE28; // type:function size:0x208 scope:global +OnCollision__9AIVehicleRCQ33Sim9Collision4Info = .text:0x8001F030; // type:function size:0x4 scope:global +GetWorldAvoidanceInfo__C9AIVehiclefRQ25UMath7Vector3T2 = .text:0x8001F034; // type:function size:0x454 scope:global +GetCollNav__9AIVehicleRCQ25UMath7Vector3f = .text:0x8001F488; // type:function size:0x1E0 scope:global +SetSpawned__9AIVehicle = .text:0x8001F668; // type:function size:0x1B8 scope:global +UnSpawn__9AIVehicle = .text:0x8001F820; // type:function size:0x11C scope:global +CanRespawn__9AIVehicleb = .text:0x8001F93C; // type:function size:0x68 scope:global +UpdateSimplePhysics__9AIVehiclef = .text:0x8001F9A4; // type:function size:0x7D0 scope:global +EnableSimplePhysics__9AIVehicle = .text:0x80020174; // type:function size:0x6C scope:global +DisableSimplePhysics__9AIVehicle = .text:0x800201E0; // type:function size:0x1FC scope:global +IsSimplePhysicsActive__9AIVehicle = .text:0x800203DC; // type:function size:0x5C scope:global +init_nav__C9path_spotR8WRoadNav = .text:0x80020438; // type:function size:0x1CC scope:global +init_nav__C9path_spotR8WRoadNavRCQ25UMath7Vector3 = .text:0x80020604; // type:function size:0xF4 scope:global +walk_road__11road_walkerRCQ25UMath7Vector3T1ffsi = .text:0x800206F8; // type:function size:0xBD0 scope:global +walk_all_paths__11road_walkerRC9path_spotffb = .text:0x800212C8; // type:function size:0x358 scope:global +evaluate_end__11road_walkerRC9path_spotb = .text:0x80021620; // type:function size:0x408 scope:global +UpdateRoads__9AIVehicle = .text:0x80021A28; // type:function size:0x6C4 scope:global +GetCurrentRoad__9AIVehicle = .text:0x800220EC; // type:function size:0x30 scope:global +GetFutureRoad__9AIVehicle = .text:0x8002211C; // type:function size:0x30 scope:global +GetFarFuturePosition__9AIVehicle = .text:0x8002214C; // type:function size:0x30 scope:global +GetFarFutureDirection__9AIVehicle = .text:0x8002217C; // type:function size:0x30 scope:global +GetSeekAheadPosition__9AIVehicle = .text:0x800221AC; // type:function size:0x29C scope:global +OnDebugDraw__9AIVehicle = .text:0x80022448; // type:function size:0x4 scope:global +__13AIPerpVehicleRC14BehaviorParams = .text:0x8002244C; // type:function size:0x40C scope:global +_._13AIPerpVehicle = .text:0x80022858; // type:function size:0x2EC scope:global +ComputeSkill__13AIPerpVehicle = .text:0x80022B44; // type:function size:0x21C scope:global +SetRacerInfo__13AIPerpVehicleP10GRacerInfo = .text:0x80022D60; // type:function size:0x24 scope:global +Update__13AIPerpVehiclef = .text:0x80022D84; // type:function size:0x990 scope:global +Set911CallTime__13AIPerpVehiclef = .text:0x80023714; // type:function size:0x14 scope:global +OnBehaviorChange__13AIPerpVehicleRC6UCrc32 = .text:0x80023728; // type:function size:0x20 scope:global +IsPartiallyHidden__C13AIPerpVehicleRf = .text:0x80023748; // type:function size:0x5C scope:global +SetCostToState__13AIPerpVehiclei = .text:0x800237A4; // type:function size:0x8 scope:global +GetCostToState__C13AIPerpVehicle = .text:0x800237AC; // type:function size:0x8 scope:global +SetHeat__13AIPerpVehiclef = .text:0x800237B4; // type:function size:0x364 scope:global +GetSkill__C13AIPerpVehicle = .text:0x80023B18; // type:function size:0x2C scope:global +GetCatchupCheat__C13AIPerpVehicle = .text:0x80023B44; // type:function size:0x7C scope:global +GetHeat__C13AIPerpVehicle = .text:0x80023BC0; // type:function size:0x8 scope:global +AddCostToState__13AIPerpVehiclei = .text:0x80023BC8; // type:function size:0xD4 scope:global +AddToPendingRepPointsNormal__13AIPerpVehiclei = .text:0x80023C9C; // type:function size:0xA8 scope:global +AddToPendingRepPointsFromCopDestruction__13AIPerpVehiclei = .text:0x80023D44; // type:function size:0xA8 scope:global +IsRacing__C13AIPerpVehicle = .text:0x80023DEC; // type:function size:0xBC scope:global +GetPercentRaceComplete__C13AIPerpVehicle = .text:0x80023EA8; // type:function size:0x20 scope:global +IsBeingPursued__C13AIPerpVehicle = .text:0x80023EC8; // type:function size:0xAC scope:global +OnCausedExplosion__13AIPerpVehicleP10IExplosionP8ISimable = .text:0x80023F74; // type:function size:0x228 scope:global +OnClearCausality__13AIPerpVehiclef = .text:0x8002419C; // type:function size:0x8 scope:global +OnCausedCollision__13AIPerpVehicleRCQ33Sim9Collision4InfoP8ISimableT2 = .text:0x800241A4; // type:function size:0x8C0 scope:global +GetLastTrafficHitTime__C13AIPerpVehicle = .text:0x80024A64; // type:function size:0x8 scope:global +__15AIVehicleCopCarRC14BehaviorParams = .text:0x80024A6C; // type:function size:0x80 scope:global +_._15AIVehicleCopCar = .text:0x80024AEC; // type:function size:0x98 scope:global +Construct__15AIVehicleCopCarRC14BehaviorParams = .text:0x80024B84; // type:function size:0x44 scope:global +Update__15AIVehicleCopCarf = .text:0x80024BC8; // type:function size:0x25C scope:global +IsTetheredToTarget__15AIVehicleCopCarPQ33UTL3COM8IUnknown = .text:0x80024E24; // type:function size:0x1F8 scope:global +CanSeeTarget__15AIVehicleCopCarP8AITarget = .text:0x8002501C; // type:function size:0x468 scope:global +WatchForPerps__15AIVehicleCopCar = .text:0x80025484; // type:function size:0x13C scope:global +CheckForPursuit__15AIVehicleCopCarP8IVehicle = .text:0x800255C0; // type:function size:0x260 scope:global +__12AIVehiclePidRC14BehaviorParamsffQ23Sim8TaskMode = .text:0x80025820; // type:function size:0x384 scope:global +_._12AIVehiclePid = .text:0x80025BA4; // type:function size:0x1B8 scope:global +Reset__12AIVehiclePid = .text:0x80025D5C; // type:function size:0x48 scope:global +OnGasBrake__12AIVehiclePidf = .text:0x80025DA4; // type:function size:0x3B4 scope:global +OnSteering__12AIVehiclePidf = .text:0x80026158; // type:function size:0x6FC scope:global +__16AIVehicleRacecarRC14BehaviorParams = .text:0x80026854; // type:function size:0xDC scope:global +_._16AIVehicleRacecar = .text:0x80026930; // type:function size:0xCC scope:global +StartRace__16AIVehicleRacecar11DriverStyle = .text:0x800269FC; // type:function size:0x298 scope:global +QuitRace__16AIVehicleRacecar = .text:0x80026C94; // type:function size:0x190 scope:global +PrepareForRace__16AIVehicleRacecarRC19RacePreparationInfo = .text:0x80026E24; // type:function size:0x200 scope:global +Construct__16AIVehicleRacecarRC14BehaviorParams = .text:0x80027024; // type:function size:0x44 scope:global +ShouldDoSimplePhysics__C16AIVehicleRacecar = .text:0x80027068; // type:function size:0x100 scope:global +Update__16AIVehicleRacecarf = .text:0x80027168; // type:function size:0x104 scope:global +Construct__16AIVehicleTrafficRC14BehaviorParams = .text:0x8002726C; // type:function size:0x44 scope:global +__16AIVehicleTrafficRC14BehaviorParams = .text:0x800272B0; // type:function size:0xF8 scope:global +_._16AIVehicleTraffic = .text:0x800273A8; // type:function size:0xA8 scope:global +Update__16AIVehicleTrafficf = .text:0x80027450; // type:function size:0x6C scope:global +StartDriving__16AIVehicleTrafficf = .text:0x800274BC; // type:function size:0x2B0 scope:global +__16AIVehiclePursuitRC14BehaviorParams = .text:0x8002776C; // type:function size:0x1A0 scope:global +_._16AIVehiclePursuit = .text:0x8002790C; // type:function size:0xA8 scope:global +ResetInternals__16AIVehiclePursuit = .text:0x800279B4; // type:function size:0xA8 scope:global +StartPatrol__16AIVehiclePursuit = .text:0x80027A5C; // type:function size:0x88 scope:global +StartFlee__16AIVehiclePursuit = .text:0x80027AE4; // type:function size:0x144 scope:global +StartRoadBlock__16AIVehiclePursuit = .text:0x80027C28; // type:function size:0x124 scope:global +StartPursuit__16AIVehiclePursuitP8AITargetP8ISimable = .text:0x80027D4C; // type:function size:0x170 scope:global +DoInPositionGoal__16AIVehiclePursuit = .text:0x80027EBC; // type:function size:0x24 scope:global +EndPursuit__16AIVehiclePursuit = .text:0x80027EE0; // type:function size:0x80 scope:global +StartSupportGoal__16AIVehiclePursuit = .text:0x80027F60; // type:function size:0x68 scope:global +SetSupportGoal__16AIVehiclePursuitG6UCrc32 = .text:0x80027FC8; // type:function size:0xC scope:global +GetPursuitTarget__16AIVehiclePursuit = .text:0x80027FD4; // type:function size:0x70 scope:global +PursuitRequest__16AIVehiclePursuit = .text:0x80028044; // type:function size:0x94 scope:global +Update__16AIVehiclePursuitf = .text:0x800280D8; // type:function size:0x118 scope:global +UpdateSiren__16AIVehiclePursuitf = .text:0x800281F0; // type:function size:0x670 scope:global +HeliVehicleActive__Fv = .text:0x80028860; // type:function size:0x1C scope:global +__19AIVehicleHelicopterRC14BehaviorParams = .text:0x8002887C; // type:function size:0x1D0 scope:global +_._19AIVehicleHelicopter = .text:0x80028A4C; // type:function size:0xCC scope:global +Construct__19AIVehicleHelicopterRC14BehaviorParams = .text:0x80028B18; // type:function size:0x44 scope:global +SetFuelFull__19AIVehicleHelicopter = .text:0x80028B5C; // type:function size:0xAC scope:global +SetDestinationVelocity__19AIVehicleHelicopterRCQ25UMath7Vector3 = .text:0x80028C08; // type:function size:0x74 scope:global +Update__19AIVehicleHelicopterf = .text:0x80028C7C; // type:function size:0x200 scope:global +UpdateFuel__19AIVehicleHelicopterf = .text:0x80028E7C; // type:function size:0xA8 scope:global +CanSeeTarget__19AIVehicleHelicopterP8AITarget = .text:0x80028F24; // type:function size:0x450 scope:global +StartPathToPoint__19AIVehicleHelicopterRQ25UMath7Vector3 = .text:0x80029374; // type:function size:0x74 scope:global +SteerToNav__19AIVehicleHelicopterP8WRoadNavffb = .text:0x800293E8; // type:function size:0x1E8 scope:global +FilterHeliAltitude__19AIVehicleHelicopterRQ25UMath7Vector3 = .text:0x800295D0; // type:function size:0x80 scope:global +CheckHeliSheet__19AIVehicleHelicopterRCQ25UMath7Vector3N21RQ25UMath7Vector3T4 = .text:0x80029650; // type:function size:0x35C scope:global +RestrictPointToRoadNet__19AIVehicleHelicopterRQ25UMath7Vector3 = .text:0x800299AC; // type:function size:0xE0 scope:global +AvoidCamera__19AIVehicleHelicopterRQ25UMath7Vector3 = .text:0x80029A8C; // type:function size:0x294 scope:global +OnDriving__19AIVehicleHelicopterf = .text:0x80029D20; // type:function size:0x4DC scope:global +__25AdaptivePIDControllerBase15eAdaptationRulef = .text:0x8002A1FC; // type:function size:0x154 scope:global +_._25AdaptivePIDControllerBase = .text:0x8002A350; // type:function size:0xAC scope:global +UpdateBase__25AdaptivePIDControllerBasefff = .text:0x8002A3FC; // type:function size:0x1F0 scope:global +GetOutput__25AdaptivePIDControllerBase = .text:0x8002A5EC; // type:function size:0x104 scope:global +GetNewCoefficientDerivative__25AdaptivePIDControllerBase8ePIDTermff = .text:0x8002A6F0; // type:function size:0x138 scope:global +GetSensitivityDerivative__25AdaptivePIDControllerBasef = .text:0x8002A828; // type:function size:0x84 scope:global +Sign__25AdaptivePIDControllerBasef = .text:0x8002A8AC; // type:function size:0x34 scope:global +__27AdaptivePIDControllerSimple15eAdaptationRulefii = .text:0x8002A8E0; // type:function size:0x8C scope:global +GetTerm__27AdaptivePIDControllerSimple8ePIDTerm = .text:0x8002A96C; // type:function size:0x90 scope:global +__32AdaptivePIDControllerComplicated15eAdaptationRulef = .text:0x8002A9FC; // type:function size:0x60 scope:global +Update__32AdaptivePIDControllerComplicatedffff = .text:0x8002AA5C; // type:function size:0x2C scope:global +CanAquire__8AITargetPC8ISimable = .text:0x8002AA88; // type:function size:0x68 scope:global +Register__8AITargetP8ISimable = .text:0x8002AAF0; // type:function size:0x15C scope:global +UnRegister__8AITargetP8ISimable = .text:0x8002AC4C; // type:function size:0x100 scope:global +Track__8AITargetPC8ISimable = .text:0x8002AD4C; // type:function size:0x64 scope:global +TrackAll__8AITarget = .text:0x8002ADB0; // type:function size:0x48 scope:global +__8AITargetP8ISimable = .text:0x8002ADF8; // type:function size:0x74 scope:global +_._8AITarget = .text:0x8002AE6C; // type:function size:0x64 scope:global +Clear__8AITarget = .text:0x8002AED0; // type:function size:0x78 scope:global +Aquire__8AITargetP8ISimable = .text:0x8002AF48; // type:function size:0x60 scope:global +Aquire__8AITargetRCQ25UMath7Vector3 = .text:0x8002AFA8; // type:function size:0x88 scope:global +Aquire__8AITargetRCQ25UMath7Vector3T1 = .text:0x8002B030; // type:function size:0x84 scope:global +Aquire__8AITargetPC8AITarget = .text:0x8002B0B4; // type:function size:0x68 scope:global +IsTarget__C8AITargetPC8AITarget = .text:0x8002B11C; // type:function size:0x94 scope:global +GetSpeed__C8AITarget = .text:0x8002B1B0; // type:function size:0x64 scope:global +GetLinearVelocity__C8AITarget = .text:0x8002B214; // type:function size:0x64 scope:global +TrackInternal__8AITarget = .text:0x8002B278; // type:function size:0x138 scope:global +Seek__7AISteerRQ25UMath7Vector3RCQ25UMath7Vector3N22 = .text:0x8002B3B0; // type:function size:0x28 scope:global +Pursuit__7AISteerRQ25UMath7Vector3RCQ25UMath7Vector3N32 = .text:0x8002B3D8; // type:function size:0x60 scope:global +Ram__7AISteerRQ25UMath7Vector3RCQ25UMath7Vector3fT2T2 = .text:0x8002B438; // type:function size:0x35C scope:global +LineSegSeperation__FRQ25UMath7Vector3RCQ25UMath7Vector3N31 = .text:0x8002B794; // type:function size:0x41C scope:global +Separation__7AISteerRQ25UMath7Vector3RCQ25UMath7Vector3T2fT2T2f = .text:0x8002BBB0; // type:function size:0xF0 scope:global +SetupCapsule__7AISteerPC5IBodyRQ25UMath7Vector3T2Rf = .text:0x8002BCA0; // type:function size:0x164 scope:global +Seperation__7AISteerRQ25UMath7Vector3P5IBodyT2ff = .text:0x8002BE04; // type:function size:0x3B8 scope:global +VehicleSeperation__7AISteerRQ25UMath7Vector3P8IVehicleRCQ33UTL3Stdt4list2ZP11AIAvoidableZ26_type_AIAvoidableNeighborsff = .text:0x8002C1BC; // type:function size:0x158 scope:global +GetDesiredSpeedToTarget__7AISteerff = .text:0x8002C314; // type:function size:0xAC scope:global +__8AIActionP14AIActionParamsf = .text:0x8002C3C0; // type:function size:0x9C scope:global +init__19performance_limiterf = .text:0x8002C45C; // type:function size:0x8 scope:global +update__19performance_limiterffff = .text:0x8002C464; // type:function size:0x100 scope:global +_._6AIGoal = .text:0x8002C564; // type:function size:0x108 scope:global +AddAction__6AIGoalPCc = .text:0x8002C66C; // type:function size:0xB4 scope:global +OnBehaviorChange__6AIGoalRC6UCrc32 = .text:0x8002C720; // type:function size:0x88 scope:global +ChooseAction__6AIGoalf = .text:0x8002C7A8; // type:function size:0x160 scope:global +Update__6AIGoalf = .text:0x8002C908; // type:function size:0x74 scope:global +__6AIGoalP8ISimable = .text:0x8002C97C; // type:function size:0x70 scope:global +__10AIGoalNoneP8ISimable = .text:0x8002C9EC; // type:function size:0x4C scope:global +__13AIGoalTrafficP8ISimable = .text:0x8002CA38; // type:function size:0x5C scope:global +__12AIGoalPatrolP8ISimable = .text:0x8002CA94; // type:function size:0x6C scope:global +__13AIGoalPursuitP8ISimable = .text:0x8002CB00; // type:function size:0xE0 scope:global +Update__13AIGoalPursuitf = .text:0x8002CBE0; // type:function size:0x20 scope:global +_._13AIGoalPursuit = .text:0x8002CC00; // type:function size:0x68 scope:global +__15AIGoalStopShortP8ISimable = .text:0x8002CC68; // type:function size:0x8C scope:global +__9AIGoalRamP8ISimable = .text:0x8002CCF4; // type:function size:0xAC scope:global +__9AIGoalPitP8ISimable = .text:0x8002CDA0; // type:function size:0xAC scope:global +__15AIGoalHeadOnRamP8ISimable = .text:0x8002CE4C; // type:function size:0x11C scope:global +__21AIGoalStaticRoadBlockP8ISimable = .text:0x8002CF68; // type:function size:0x5C scope:global +_._21AIGoalStaticRoadBlock = .text:0x8002CFC4; // type:function size:0x68 scope:global +__17AIGoalFleePursuitP8ISimable = .text:0x8002D02C; // type:function size:0x8C scope:global +__17AIGoalHeliPursuitP8ISimable = .text:0x8002D0B8; // type:function size:0x6C scope:global +__14AIGoalHeliExitP8ISimable = .text:0x8002D124; // type:function size:0x6C scope:global +Update__14AIGoalHeliExitf = .text:0x8002D190; // type:function size:0xBC scope:global +__11AIGoalRacerP8ISimable = .text:0x8002D24C; // type:function size:0x6C scope:global +__16PursuitFormation = .text:0x8002D2B8; // type:function size:0x5C scope:global +_._16PursuitFormation = .text:0x8002D314; // type:function size:0xB0 scope:global +Reset__16PursuitFormation = .text:0x8002D3C4; // type:function size:0x98 scope:global +AddTargetOffset__16PursuitFormationRCQ25UMath7Vector3iG6UCrc32T1 = .text:0x8002D45C; // type:function size:0x2EC scope:global +__14BoxInFormationiP8IPursuit = .text:0x8002D748; // type:function size:0x2D4 scope:global +getPosition__14BoxInFormationifRQ25UMath7Vector3 = .text:0x8002DA1C; // type:function size:0x34 scope:global +Update__14BoxInFormationfP8IPursuit = .text:0x8002DA50; // type:function size:0xD4 scope:global +__21RollingBlockFormationiP8IPursuit = .text:0x8002DB24; // type:function size:0x208 scope:global +getPosition__21RollingBlockFormationifRQ25UMath7Vector3 = .text:0x8002DD2C; // type:function size:0x34 scope:global +Update__21RollingBlockFormationfP8IPursuit = .text:0x8002DD60; // type:function size:0xD4 scope:global +__15FollowFormationi = .text:0x8002DE34; // type:function size:0x398 scope:global +__22StaggerFollowFormationi = .text:0x8002E1CC; // type:function size:0x3A0 scope:global +__12PitFormationi = .text:0x8002E56C; // type:function size:0x1CC scope:global +__13HerdFormationi = .text:0x8002E738; // type:function size:0x20C scope:global +Update__13HerdFormationfP8IPursuit = .text:0x8002E944; // type:function size:0x3D0 scope:global +Reset__20GroundSupportRequest = .text:0x8002ED14; // type:function size:0x1C8 scope:global +Update__20GroundSupportRequestf = .text:0x8002EEDC; // type:function size:0x4C scope:global +__9AIPursuitGQ23Sim5Param = .text:0x8002EF28; // type:function size:0x908 scope:global +_._9AIPursuit = .text:0x8002F830; // type:function size:0x3A8 scope:global +Construct__9AIPursuitGQ23Sim5Param = .text:0x8002FBD8; // type:function size:0x74 scope:global +GetPursuitLevelAttrib__C9AIPursuit = .text:0x8002FC4C; // type:function size:0xC4 scope:global +GetPursuitSupportAttrib__C9AIPursuit = .text:0x8002FD10; // type:function size:0xC4 scope:global +LockInPursuitAttribs__9AIPursuit = .text:0x8002FDD4; // type:function size:0x78 scope:global +CalcTotalCostToState__C9AIPursuit = .text:0x8002FE4C; // type:function size:0x74 scope:global +AddVehicleToContingent__9AIPursuitP8IVehicle = .text:0x8002FEC0; // type:function size:0x224 scope:global +OnAttached__9AIPursuitP11IAttachable = .text:0x800300E4; // type:function size:0x510 scope:global +OnDetached__9AIPursuitP11IAttachable = .text:0x800305F4; // type:function size:0x498 scope:global +IncNumCopsDestroyed__9AIPursuitP8IVehicle = .text:0x80030A8C; // type:function size:0x270 scope:global +TrackVehicleCounts__9AIPursuit = .text:0x80030CFC; // type:function size:0x120 scope:global +GetFormationType__C9AIPursuit = .text:0x80030E1C; // type:function size:0x8 scope:global +InitFormation__9AIPursuiti = .text:0x80030E24; // type:function size:0x17C scope:global +EndCurrentFormation__9AIPursuit = .text:0x80030FA0; // type:function size:0x1C scope:global +AssignCopOffset__9AIPursuitiRQ33UTL3Stdt6vector2ZP10IPursuitAIZ16_type_AIPursuersRCQ25UMath7Vector3T3RC6UCrc32b = .text:0x80030FBC; // type:function size:0xC0 scope:global +AssignChopperGoal__9AIPursuitP10IPursuitAI = .text:0x8003107C; // type:function size:0x128 scope:global +EvenOutOffsets__9AIPursuitRQ33UTL3Stdt6vector2ZQ25UMath7Vector3Z19_type_AIVector3ListRQ33UTL3Stdt6vector2ZQ29AIPursuit15FormationTargetZ27_type_AIFormationTargetList = .text:0x800311A4; // type:function size:0x5BC scope:global +AssignClosestOffsets__9AIPursuitRQ33UTL3Stdt6vector2ZQ25UMath7Vector3Z19_type_AIVector3ListRQ33UTL3Stdt6vector2ZP10IPursuitAIZ16_type_AIPursuersRQ33UTL3Stdt6vector2ZQ29AIPursuit15FormationTargetZ27_type_AIFormationTargetListb = .text:0x80031760; // type:function size:0x694 scope:global +CopAndAngleSortPredicate__FPCvT0 = .text:0x80031DF4; // type:function size:0x20 scope:local +CopAndAngleDistanceSortPredicate__FPCvT0 = .text:0x80031E14; // type:function size:0x20 scope:local +SetupCollapse__9AIPursuitRCQ33UTL3Stdt6vector2ZP10IPursuitAIZ16_type_AIPursuersiff = .text:0x80031E34; // type:function size:0x7F0 scope:global +AssignCopsInCircle__9AIPursuitP11CopAndAngleifRCQ25UMath7Vector3T4 = .text:0x80032624; // type:function size:0x22C scope:global +UpdateFormation__9AIPursuitf = .text:0x80032850; // type:function size:0xF3C scope:global +UpdateOutOfFormationOffsets__9AIPursuit = .text:0x8003378C; // type:function size:0xA88 scope:global +IsPlayerPursuit__C9AIPursuit = .text:0x80034214; // type:function size:0xB8 scope:global +ContingentHasActiveCops__C9AIPursuit = .text:0x800342CC; // type:function size:0x34 scope:global +OnTask__9AIPursuitP10HSIMTASK__f = .text:0x80034300; // type:function size:0x17E4 scope:global +IsHeliInPursuit__C9AIPursuit = .text:0x80035AE4; // type:function size:0x88 scope:global +ShouldEnd__C9AIPursuit = .text:0x80035B6C; // type:function size:0x98 scope:global +GetAdjustedCopCounts__9AIPursuitP14CopCountRecordRi = .text:0x80035C04; // type:function size:0x348 scope:global +RemoveUnwantedVehicles__9AIPursuit = .text:0x80035F4C; // type:function size:0x2A8 scope:global +FleeCopOfType__9AIPursuitG6UCrc32i = .text:0x800361F4; // type:function size:0x3B0 scope:global +CopRequest__9AIPursuit = .text:0x800365A4; // type:function size:0x404 scope:global +RequestRoadBlock__9AIPursuit = .text:0x800369A8; // type:function size:0x214 scope:global +AddRoadBlock__9AIPursuitP10IRoadBlock = .text:0x80036BBC; // type:function size:0x98 scope:global +ClearGroundSupportRequest__9AIPursuit = .text:0x80036C54; // type:function size:0x24 scope:global +SkidHitEnabled__C9AIPursuit = .text:0x80036C78; // type:function size:0xA8 scope:global +RequestGroundSupport__9AIPursuit = .text:0x80036D20; // type:function size:0x304 scope:global +IsSupportVehicle__9AIPursuitP8IVehicle = .text:0x80037024; // type:function size:0x94 scope:global +IsTarget__C9AIPursuitP8AITarget = .text:0x800370B8; // type:function size:0x24 scope:global +GetTarget__C9AIPursuit = .text:0x800370DC; // type:function size:0x8 scope:global +IsFinisherActive__C9AIPursuit = .text:0x800370E4; // type:function size:0x20 scope:global +TimeToFinisherAttempt__C9AIPursuit = .text:0x80037104; // type:function size:0x4C scope:global +BailPursuit__9AIPursuit = .text:0x80037150; // type:function size:0x48 scope:global +TimeUntilBusted__C9AIPursuit = .text:0x80037198; // type:function size:0x78 scope:global +IsAttemptingRoadBlock__C9AIPursuit = .text:0x80037210; // type:function size:0x18 scope:global +NotifyCopDamaged__9AIPursuitP8IVehicle = .text:0x80037228; // type:function size:0xD4 scope:global +OnDebugDraw__9AIPursuit = .text:0x800372FC; // type:function size:0x4 scope:global +GetGlobalPursuitLevelAttrib__Fv = .text:0x80037300; // type:function size:0x224 scope:global +IsValidPursuitCarName__FPCc = .text:0x80037524; // type:function size:0xC0 scope:global +GetRandomValidCopCar__Fv = .text:0x800375E4; // type:function size:0x170 scope:global +SpikesHit__9AIPursuitP10IVehicleAI = .text:0x80037754; // type:function size:0xF4 scope:global +EndPursuitEnteringSafehouse__9AIPursuit = .text:0x80037848; // type:function size:0x20 scope:global +UpdateJerk__9AIPursuitf = .text:0x80037868; // type:function size:0x148 scope:global +__11AIRoadBlockGQ23Sim5Param = .text:0x800379B0; // type:function size:0x240 scope:global +_._11AIRoadBlock = .text:0x80037BF0; // type:function size:0x220 scope:global +Construct__11AIRoadBlockGQ23Sim5Param = .text:0x80037E10; // type:function size:0x74 scope:global +AddVehicle__11AIRoadBlockP8IVehicle = .text:0x80037E84; // type:function size:0x8C scope:global +AddSmackable__11AIRoadBlockP17IPlaceableSceneryb = .text:0x80037F10; // type:function size:0x180 scope:global +RemoveVehicle__11AIRoadBlockP8IVehicle = .text:0x80038090; // type:function size:0x38 scope:global +ReleaseAllSmackables__11AIRoadBlock = .text:0x800380C8; // type:function size:0x8C scope:global +GetMinDistanceToTarget__11AIRoadBlockfRfPP8IVehicle = .text:0x80038154; // type:function size:0x3BC scope:global +GetNumCops__11AIRoadBlock = .text:0x80038510; // type:function size:0x14 scope:global +OnAttached__11AIRoadBlockP11IAttachable = .text:0x80038524; // type:function size:0x17C scope:global +OnDetached__11AIRoadBlockP11IAttachable = .text:0x800386A0; // type:function size:0xF0 scope:global +IsComprisedOf__11AIRoadBlockP10HSIMABLE__ = .text:0x80038790; // type:function size:0xA0 scope:global +__14AISpawnManagerff = .text:0x80038830; // type:function size:0x5C scope:global +_._14AISpawnManager = .text:0x8003888C; // type:function size:0x34 scope:global +GetBasePosition__14AISpawnManagerRQ25UMath7Vector3 = .text:0x800388C0; // type:function size:0x88 scope:global +GetBaseForwardVector__14AISpawnManagerRQ25UMath7Vector3 = .text:0x80038948; // type:function size:0x88 scope:global +RespawnAvailable__14AISpawnManagerRCQ25UMath7Vector3f = .text:0x800389D0; // type:function size:0x11C scope:global +GetSpawnPointOnSegment__14AISpawnManagerRsRcRf = .text:0x80038AEC; // type:function size:0xC8 scope:global +GetSpawnLocation__14AISpawnManagerRsRcRf = .text:0x80038BB4; // type:function size:0x168 scope:global +CheckSpawnPosition__14AISpawnManagerRCQ25UMath7Vector3biiT2 = .text:0x80038D1C; // type:function size:0x294 scope:global +RefreshSpawnData__14AISpawnManager = .text:0x80038FB0; // type:function size:0x460 scope:global +AngleTo__Q22AI4MathRCQ25UMath7Vector3N21 = .text:0x80039410; // type:function size:0xAC scope:global +TimeToIntercept__Q22AI4MathRCQ25UMath7Vector3N31 = .text:0x800394BC; // type:function size:0xD8 scope:global +TimeToImpactXZ__Q22AI4MathRCQ25UMath7Vector3T1fT1T1f = .text:0x80039594; // type:function size:0x2AC scope:global +PredictPosition__Q22AI4MathfRCQ25UMath7Vector3T2fT2fRQ25UMath7Vector3 = .text:0x80039840; // type:function size:0x150 scope:global +Construct__3GpsGQ23Sim5Param = .text:0x80039990; // type:function size:0x58 scope:global +__3Gps = .text:0x800399E8; // type:function size:0x19C scope:global +_._3Gps = .text:0x80039B84; // type:function size:0xE8 scope:global +OnTask__3GpsP10HSIMTASK__f = .text:0x80039C6C; // type:function size:0x3C scope:global +Update__3Gpsf = .text:0x80039CA8; // type:function size:0x388 scope:global +Engage__3GpsRCQ25UMath7Vector3f = .text:0x8003A030; // type:function size:0x200 scope:global +Render__3GpsP5eView = .text:0x8003A230; // type:function size:0x710 scope:global +GPS_Disengage__Fv = .text:0x8003A940; // type:function size:0x1C scope:global +GPS_Engage__FRCQ25UMath7Vector3f = .text:0x8003A95C; // type:function size:0x3C scope:global +GPS_IsEngaged__Fv = .text:0x8003A998; // type:function size:0x28 scope:global +RenderGpsArrows__FP5eView = .text:0x8003A9C0; // type:function size:0x34 scope:global +Get__CQ26Attribt7TAttrib1ZQ25UMath7Vector4Ui = .text:0x8003A9F4; // type:function size:0x50 scope:global +__lower_bound__H4ZPCUiZUiZQ24_STLt4less1ZUiZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x8003AA44; // type:function size:0x48 scope:global +__lower_bound__H4ZPCfZfZQ24_STLt4less1ZfZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x8003AA8C; // type:function size:0x4C scope:global +clear__Q24_STLt10_List_base2ZP11IAttachableZQ33UTL3Stdt9Allocator2ZP11IAttachableZ21_type_IAttachableList = .text:0x8003AAD8; // type:function size:0x78 scope:global +find__H2ZPP7IPlayerZP7IPlayer_4_STLX01X01RCX11_X01 = .text:0x8003AB50; // type:function size:0xB0 scope:global +find__H2ZPPQ23Sim7IEntityZPQ23Sim7IEntity_4_STLX01X01RCX11_X01 = .text:0x8003AC00; // type:function size:0xB0 scope:global +Get__CQ26Attribt7TAttrib1ZbUi = .text:0x8003ACB0; // type:function size:0x50 scope:global +reserve__Q24_STLt6vector2ZiZQ33UTL3Stdt9Allocator2ZiZQ26Speech14_type_voiceIDsUi = .text:0x8003AD00; // type:function size:0x11C scope:global +reserve__Q24_STLt6vector2ZQ26Speech7copPairZQ33UTL3Stdt9Allocator2ZQ26Speech7copPairZQ26Speech12_type_copMapUi = .text:0x8003AE1C; // type:function size:0x15C scope:global +find__H2ZPP8IPursuitZP8IPursuit_4_STLX01X01RCX11_X01 = .text:0x8003AF78; // type:function size:0xB0 scope:global +find__H2ZPP10IRoadBlockZP10IRoadBlock_4_STLX01X01RCX11_X01 = .text:0x8003B028; // type:function size:0xB0 scope:global +find__H2ZPP14ICollisionBodyZP14ICollisionBody_4_STLX01X01RCX11_X01 = .text:0x8003B0D8; // type:function size:0xB0 scope:global +find__H2ZPP11ISimpleBodyZP11ISimpleBody_4_STLX01X01RCX11_X01 = .text:0x8003B188; // type:function size:0xB0 scope:global +find__H2ZPP10IRigidBodyZP10IRigidBody_4_STLX01X01RCX11_X01 = .text:0x8003B238; // type:function size:0xB0 scope:global +find__H2ZPP14ITrafficCenterZP14ITrafficCenter_4_STLX01X01RCX11_X01 = .text:0x8003B2E8; // type:function size:0xB0 scope:global +find__H2ZPP12IInputPlayerZP12IInputPlayer_4_STLX01X01RCX11_X01 = .text:0x8003B398; // type:function size:0xB0 scope:global +find__H2ZPP13IVehicleCacheZP13IVehicleCache_4_STLX01X01RCX11_X01 = .text:0x8003B448; // type:function size:0xB0 scope:global +find__H2ZPP8IVehicleZP8IVehicle_4_STLX01X01RCX11_X01 = .text:0x8003B4F8; // type:function size:0xB0 scope:global +reserve__Q24_STLt6vector2ZQ26Hermes7HandlerZQ33UTL3Stdt9Allocator2ZQ26Hermes7HandlerZ12_type_vectorUi = .text:0x8003B5A8; // type:function size:0x184 scope:global +reserve__Q24_STLt6vector2Z13WCollisionTriZQ33UTL3Stdt9Allocator2Z13WCollisionTriZ22_type_WCollisionVectorUi = .text:0x8003B72C; // type:function size:0x1BC scope:global +reserve__Q24_STLt6vector2ZP18WCollisionTriBlockZQ33UTL3Stdt9Allocator2ZP18WCollisionTriBlockZ22_type_WCollisionVectorUi = .text:0x8003B8E8; // type:function size:0x11C scope:global +Get__CQ26Attribt7TAttrib1Z14GCollectionKeyUi = .text:0x8003BA04; // type:function size:0x50 scope:global +find__H2ZPP6IModelZP6IModel_4_STLX01X01RCX11_X01 = .text:0x8003BA54; // type:function size:0xB0 scope:global +__lower_bound__H4ZPCQ216AITrafficManager10PatternKeyZQ216AITrafficManager10PatternKeyZQ24_STLt4less1ZQ216AITrafficManager10PatternKeyZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x8003BB04; // type:function size:0x48 scope:global +clear__Q24_STLt10_List_base2ZP8IVehicleZQ33UTL3Stdt9Allocator2ZP8IVehicleZ17_type_TrafficList = .text:0x8003BB4C; // type:function size:0x78 scope:global +reserve__Q24_STLt6vector2ZQ216AITrafficManager10PatternKeyZQ33UTL3Stdt9Allocator2ZQ216AITrafficManager10PatternKeyZ33_type_AITrafficManager_PatternMapUi = .text:0x8003BBC4; // type:function size:0x15C scope:global +__upper_bound__H4ZPQ216AITrafficManager10PatternKeyZQ216AITrafficManager10PatternKeyZQ24_STLt4less1ZQ216AITrafficManager10PatternKeyZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x8003BD20; // type:function size:0x48 scope:global +find__H2ZQ24_STLt14_List_iterator2ZP8IVehicleZQ24_STLt16_Nonconst_traits1ZP8IVehicleZP8IVehicle_4_STLX01X01RCX11_X01 = .text:0x8003BD68; // type:function size:0x60 scope:global +Count__Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi1012eVehicleList = .text:0x8003BDC8; // type:function size:0x18 scope:global +CreateInstance__Q33UTL3COMt7Factory3ZQ23Sim5ParamZ8ISimableZ6UCrc32G6UCrc32GQ23Sim5Param = .text:0x8003BDE0; // type:function size:0x7C scope:global +__adjust_heap__H4ZPP14ITrafficCenterZiZP14ITrafficCenterZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X11X11X21X31_v = .text:0x8003BE5C; // type:function size:0x118 scope:global +make_heap__H2ZPP14ITrafficCenterZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X01X11_v = .text:0x8003BF74; // type:function size:0x78 scope:global +pop_heap__H2ZPP14ITrafficCenterZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X01X11_v = .text:0x8003BFEC; // type:function size:0x40 scope:global +__partial_sort__H3ZPP14ITrafficCenterZP14ITrafficCenterZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X01X01PX11X21_v = .text:0x8003C02C; // type:function size:0xBC scope:global +partial_sort__H2ZPP14ITrafficCenterZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X01X01X11_v = .text:0x8003C0E8; // type:function size:0x28 scope:global +__unguarded_partition__H3ZPP14ITrafficCenterZP14ITrafficCenterZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X01X11X21_X01 = .text:0x8003C110; // type:function size:0x9C scope:global +__introsort_loop__H4ZPP14ITrafficCenterZP14ITrafficCenterZiZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X01PX11X21X31_v = .text:0x8003C1AC; // type:function size:0x158 scope:global +__unguarded_linear_insert__H3ZPP14ITrafficCenterZP14ITrafficCenterZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X11X21_v = .text:0x8003C304; // type:function size:0x60 scope:global +__insertion_sort__H2ZPP14ITrafficCenterZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X01X11_v = .text:0x8003C364; // type:function size:0xA4 scope:global +__unguarded_insertion_sort_aux__H3ZPP14ITrafficCenterZP14ITrafficCenterZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X01PX11X21_v = .text:0x8003C408; // type:function size:0x54 scope:global +__final_insertion_sort__H2ZPP14ITrafficCenterZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X01X11_v = .text:0x8003C45C; // type:function size:0x6C scope:global +sort__H2ZPP14ITrafficCenterZPFP14ITrafficCenterP14ITrafficCenter_b_4_STLX01X01X11_v = .text:0x8003C4C8; // type:function size:0x84 scope:global +clear__Q24_STLt10_List_base2ZPcZQ33UTL3Stdt9Allocator2ZPcZ10_type_list = .text:0x8003C54C; // type:function size:0x78 scope:global +CreateInstance__Q33UTL3COMt7Factory3ZRCQ25Sound16AudioEventParamsZQ25Sound10AudioEventZUiUiRCQ25Sound16AudioEventParams = .text:0x8003C5C4; // type:function size:0x5C scope:global +find__H2ZPP12EAX_CarStateZP12EAX_CarState_4_STLX01X01RCX11_X01 = .text:0x8003C620; // type:function size:0xB0 scope:global +find__H2ZPP13EAX_HeliStateZP13EAX_HeliState_4_STLX01X01RCX11_X01 = .text:0x8003C6D0; // type:function size:0xB0 scope:global +find__H2ZPP4IHudZP4IHud_4_STLX01X01RCX11_X01 = .text:0x8003C780; // type:function size:0xB0 scope:global +clear__Q24_STLt10_List_base2ZQ212AICopManager15SpawnCopRequestZQ33UTL3Stdt9Allocator2ZQ212AICopManager15SpawnCopRequestZ31_type_AICopManagerSpawnRequests = .text:0x8003C830; // type:function size:0x78 scope:global +clear__Q24_STLt10_List_base2ZQ212AICopManager11BreakerZoneZQ33UTL3Stdt9Allocator2ZQ212AICopManager11BreakerZoneZ10_type_list = .text:0x8003C8A8; // type:function size:0x78 scope:global +clear__Q24_STLt10_List_base2ZP8IPursuitZQ33UTL3Stdt9Allocator2ZP8IPursuitZ26_type_AICopManagerPursuits = .text:0x8003C920; // type:function size:0x78 scope:global +clear__Q24_STLt10_List_base2ZP10IRoadBlockZQ33UTL3Stdt9Allocator2ZP10IRoadBlockZ28_type_AICopManagerRoadBlocks = .text:0x8003C998; // type:function size:0x78 scope:global +CreateInstance__Q33UTL3COMt7Factory3ZQ23Sim5ParamZQ23Sim9IActivityZ6UCrc32G6UCrc32GQ23Sim5Param = .text:0x8003CA10; // type:function size:0x7C scope:global +find__H2ZQ24_STLt14_List_iterator2ZP8IPursuitZQ24_STLt16_Nonconst_traits1ZP8IPursuitZP8IPursuit_4_STLX01X01RCX11_X01 = .text:0x8003CA8C; // type:function size:0x60 scope:global +find__H2ZQ24_STLt14_List_iterator2ZP10IRoadBlockZQ24_STLt16_Nonconst_traits1ZP10IRoadBlockZP10IRoadBlock_4_STLX01X01RCX11_X01 = .text:0x8003CAEC; // type:function size:0x60 scope:global +First__Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi311ePlayerList = .text:0x8003CB4C; // type:function size:0x30 scope:global +reserve__Q24_STLt6vector2ZP8IVehicleZQ33UTL3Stdt9Allocator2ZP8IVehicleZ41_type_AICopManagerCreateRoadBlockVehiclesUi = .text:0x8003CB7C; // type:function size:0x11C scope:global +clear__Q24_STLt10_List_base2ZP11AIAvoidableZQ33UTL3Stdt9Allocator2ZP11AIAvoidableZ26_type_AIAvoidableNeighbors = .text:0x8003CC98; // type:function size:0x78 scope:global +find__H2ZQ24_STLt14_List_iterator2ZP11AIAvoidableZQ24_STLt16_Nonconst_traits1ZP11AIAvoidableZP11AIAvoidable_4_STLX01X01RCX11_X01 = .text:0x8003CD10; // type:function size:0x60 scope:global +clear__Q24_STLt10_List_base2Z13WGridNodeElemZQ33UTL3Stdt9Allocator2Z13WGridNodeElemZ10_type_list = .text:0x8003CD70; // type:function size:0x78 scope:global +reset__t17time_delay_filter1Z18speed_delay_traitsf = .text:0x8003CDE8; // type:function size:0x38 scope:global +get_sample__Ct17time_delay_filter1Z18speed_delay_traitsf = .text:0x8003CE20; // type:function size:0x1A4 scope:global +add_sample__t17time_delay_filter1Z18speed_delay_traitsff = .text:0x8003CFC4; // type:function size:0x17C scope:global +find__H2ZPP10IExplosionZP10IExplosion_4_STLX01X01RCX11_X01 = .text:0x8003D140; // type:function size:0xB0 scope:global +CreateInstance__Q33UTL3COMt7Factory3ZP8ISimableZ6AIGoalZ6UCrc32G6UCrc32P8ISimable = .text:0x8003D1F0; // type:function size:0x60 scope:global +_M_erase__Q24_STLt8_Rb_tree5ZsZsZQ24_STLt9_Identity1ZsZQ24_STLt4less1ZsZQ33UTL3Stdt9Allocator2ZsZ9_type_setPQ24_STLt13_Rb_tree_node1Zs = .text:0x8003D250; // type:function size:0x68 scope:global +_Rotate_left__Q24_STLt10_Rb_global1ZbPQ24_STL18_Rb_tree_node_baseRPQ24_STL18_Rb_tree_node_base = .text:0x8003D2B8; // type:function size:0x60 scope:global +_Rotate_right__Q24_STLt10_Rb_global1ZbPQ24_STL18_Rb_tree_node_baseRPQ24_STL18_Rb_tree_node_base = .text:0x8003D318; // type:function size:0x60 scope:global +_Rebalance__Q24_STLt10_Rb_global1ZbPQ24_STL18_Rb_tree_node_baseRPQ24_STL18_Rb_tree_node_base = .text:0x8003D378; // type:function size:0x168 scope:global +_M_insert__Q24_STLt8_Rb_tree5ZsZsZQ24_STLt9_Identity1ZsZQ24_STLt4less1ZsZQ33UTL3Stdt9Allocator2ZsZ9_type_setPQ24_STL18_Rb_tree_node_baseT1RCsT1 = .text:0x8003D4E0; // type:function size:0x12C scope:global +_M_decrement__Q24_STLt10_Rb_global1ZbPQ24_STL18_Rb_tree_node_base = .text:0x8003D60C; // type:function size:0x70 scope:global +insert_unique__Q24_STLt8_Rb_tree5ZsZsZQ24_STLt9_Identity1ZsZQ24_STLt4less1ZsZQ33UTL3Stdt9Allocator2ZsZ9_type_setRCs = .text:0x8003D67C; // type:function size:0x118 scope:global +reserve__Q24_STLt6vector2ZQ211road_walker12start_recordZQ24_STLt9allocator1ZQ211road_walker12start_recordUi = .text:0x8003D794; // type:function size:0x1B4 scope:global +_M_increment__Q24_STLt10_Rb_global1ZbPQ24_STL18_Rb_tree_node_base = .text:0x8003D948; // type:function size:0x58 scope:global +__less__H1ZQ211road_walker12start_record_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x8003D9A0; // type:function size:0xC scope:global +__adjust_heap__H4ZPQ211road_walker12start_recordZiZQ211road_walker12start_recordZQ24_STLt4less1ZQ211road_walker12start_record_4_STLX01X11X11X21X31_v = .text:0x8003D9AC; // type:function size:0x2A4 scope:global +make_heap__H2ZPQ211road_walker12start_recordZQ24_STLt4less1ZQ211road_walker12start_record_4_STLX01X01X11_v = .text:0x8003DC50; // type:function size:0xEC scope:global +pop_heap__H2ZPQ211road_walker12start_recordZQ24_STLt4less1ZQ211road_walker12start_record_4_STLX01X01X11_v = .text:0x8003DD3C; // type:function size:0x15C scope:global +__partial_sort__H3ZPQ211road_walker12start_recordZQ211road_walker12start_recordZQ24_STLt4less1ZQ211road_walker12start_record_4_STLX01X01X01PX11X21_v = .text:0x8003DE98; // type:function size:0x1D8 scope:global +partial_sort__H2ZPQ211road_walker12start_recordZQ24_STLt4less1ZQ211road_walker12start_record_4_STLX01X01X01X11_v = .text:0x8003E070; // type:function size:0x30 scope:global +__unguarded_partition__H3ZPQ211road_walker12start_recordZQ211road_walker12start_recordZQ24_STLt4less1ZQ211road_walker12start_record_4_STLX01X01X11X21_X01 = .text:0x8003E0A0; // type:function size:0x174 scope:global +__introsort_loop__H4ZPQ211road_walker12start_recordZQ211road_walker12start_recordZiZQ24_STLt4less1ZQ211road_walker12start_record_4_STLX01X01PX11X21X31_v = .text:0x8003E214; // type:function size:0x180 scope:global +__unguarded_linear_insert__H3ZPQ211road_walker12start_recordZQ211road_walker12start_recordZQ24_STLt4less1ZQ211road_walker12start_record_4_STLX01X11X21_v = .text:0x8003E394; // type:function size:0xD8 scope:global +__insertion_sort__H2ZPQ211road_walker12start_recordZQ24_STLt4less1ZQ211road_walker12start_record_4_STLX01X01X11_v = .text:0x8003E46C; // type:function size:0x214 scope:global +__unguarded_insertion_sort_aux__H3ZPQ211road_walker12start_recordZQ211road_walker12start_recordZQ24_STLt4less1ZQ211road_walker12start_record_4_STLX01X01PX11X21_v = .text:0x8003E680; // type:function size:0xB4 scope:global +__final_insertion_sort__H2ZPQ211road_walker12start_recordZQ24_STLt4less1ZQ211road_walker12start_record_4_STLX01X01X11_v = .text:0x8003E734; // type:function size:0x7C scope:global +sort__H1ZPQ211road_walker12start_record_4_STLX01X01_v = .text:0x8003E7B0; // type:function size:0xA0 scope:global +First__Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi1012eVehicleList = .text:0x8003E850; // type:function size:0x30 scope:global +find__H2ZPP14IDebugWatchCarZP14IDebugWatchCar_4_STLX01X01RCX11_X01 = .text:0x8003E880; // type:function size:0xB0 scope:global +find__H2ZPP8ISimableZPC8ISimable_4_STLX01X01RCX11_X01 = .text:0x8003E930; // type:function size:0xB0 scope:global +find__H2ZPP8ISimableZP8ISimable_4_STLX01X01RCX11_X01 = .text:0x8003E9E0; // type:function size:0xB0 scope:global +clear__Q24_STLt10_List_base2ZP8AIActionZQ33UTL3Stdt9Allocator2ZP8AIActionZ10_type_list = .text:0x8003EA90; // type:function size:0x78 scope:global +CreateInstance__Q33UTL3COMt7Factory3ZP14AIActionParamsZ8AIActionZ6UCrc32G6UCrc32P14AIActionParams = .text:0x8003EB08; // type:function size:0x60 scope:global +reserve__Q24_STLt6vector2ZQ29AIPursuit13CopContingentZQ33UTL3Stdt9Allocator2ZQ29AIPursuit13CopContingentZ21_type_AICopContingentUi = .text:0x8003EB68; // type:function size:0x15C scope:global +reserve__Q24_STLt6vector2ZPCQ216PursuitFormation12TargetOffsetZQ33UTL3Stdt9Allocator2ZPCQ216PursuitFormation12TargetOffsetZ42_type_AIPursuitEvenOutOffsetsSourceOffsetsUi = .text:0x8003ECC4; // type:function size:0x11C scope:global +reserve__Q24_STLt6vector2ZfZQ33UTL3Stdt9Allocator2ZfZ44_type_AIPursuitAssignClosestOffsetsDistancesUi = .text:0x8003EDE0; // type:function size:0x11C scope:global +reserve__Q24_STLt6vector2ZfZQ33UTL3Stdt9Allocator2ZfZ43_type_AIPursuitAssignClosestOffsetsMaximumsUi = .text:0x8003EEFC; // type:function size:0x11C scope:global +reserve__Q24_STLt6vector2Z11CopAndAngleZQ33UTL3Stdt9Allocator2Z11CopAndAngleZ37_type_AIPursuitSetupCollapseCopAnglesUi = .text:0x8003F018; // type:function size:0x180 scope:global +reserve__Q24_STLt6vector2ZP10IPursuitAIZQ33UTL3Stdt9Allocator2ZP10IPursuitAIZ16_type_AIPursuersUi = .text:0x8003F198; // type:function size:0x11C scope:global +reserve__Q24_STLt6vector2ZQ25UMath7Vector3ZQ33UTL3Stdt9Allocator2ZQ25UMath7Vector3Z19_type_AIVector3ListUi = .text:0x8003F2B4; // type:function size:0x180 scope:global +reserve__Q24_STLt6vector2ZQ29AIPursuit15FormationTargetZQ33UTL3Stdt9Allocator2ZQ29AIPursuit15FormationTargetZ27_type_AIFormationTargetListUi = .text:0x8003F434; // type:function size:0x1A8 scope:global +__static_initialization_and_destruction_0 = .text:0x8003F5DC; // type:function size:0x24A4 scope:local +VU0_v3unit__FRCQ25UMath7Vector3RQ25UMath7Vector3 = .text:0x80041A80; // type:function size:0x40 scope:global +_._Q33UTL3COM8IUnknown = .text:0x80041AC0; // type:function size:0x54 scope:global +__8bVector3RC8bVector3 = .text:0x80041B14; // type:function size:0x20 scope:global +_IHandle__11IAttachable = .text:0x80041B34; // type:function size:0xC scope:global +_IHandle__8ISimable = .text:0x80041B40; // type:function size:0xC scope:global +push_back__Q23UTLt6Vector2ZQ33UTL11Collections10_KeyedNodei16RCQ33UTL11Collections10_KeyedNode = .text:0x80041B4C; // type:function size:0x158 scope:global +_IHandle__Q23Sim9IActivity = .text:0x80041CA4; // type:function size:0xC scope:global +_._Q23SAPt4Grid1Z11AIAvoidable = .text:0x80041CB0; // type:function size:0x164 scope:global +ClassKey__Q36Attrib3Gen13pursuitlevels = .text:0x80041E14; // type:function size:0xC scope:global +ClassKey__Q36Attrib3Gen17pursuitescalation = .text:0x80041E20; // type:function size:0xC scope:global +_IHandle__10IVehicleAI = .text:0x80041E2C; // type:function size:0xC scope:global +_._10IVehicleAI = .text:0x80041E38; // type:function size:0x54 scope:global +_IHandle__8IHumanAI = .text:0x80041E8C; // type:function size:0xC scope:global +_IHandle__12IPerpetrator = .text:0x80041E98; // type:function size:0xC scope:global +_._12IPerpetrator = .text:0x80041EA4; // type:function size:0x54 scope:global +_IHandle__6IRacer = .text:0x80041EF8; // type:function size:0xC scope:global +_IHandle__8IPursuit = .text:0x80041F04; // type:function size:0xC scope:global +_._8IPursuit = .text:0x80041F10; // type:function size:0x160 scope:global +push_back__Q23UTLt6Vector2ZP8IPursuiti16RCP8IPursuit = .text:0x80042070; // type:function size:0x154 scope:global +_IHandle__10IRoadBlock = .text:0x800421C4; // type:function size:0xC scope:global +_._10IRoadBlock = .text:0x800421D0; // type:function size:0x160 scope:global +push_back__Q23UTLt6Vector2ZP10IRoadBlocki16RCP10IRoadBlock = .text:0x80042330; // type:function size:0x154 scope:global +_IHandle__10IPursuitAI = .text:0x80042484; // type:function size:0xC scope:global +_IHandle__10ITrafficAI = .text:0x80042490; // type:function size:0xC scope:global +_IHandle__14ICollisionBody = .text:0x8004249C; // type:function size:0xC scope:global +_IHandle__5IBody = .text:0x800424A8; // type:function size:0xC scope:global +_IHandle__10IRBVehicle = .text:0x800424B4; // type:function size:0xC scope:global +_IHandle__10IRigidBody = .text:0x800424C0; // type:function size:0xC scope:global +_IHandle__11ITrafficMgr = .text:0x800424CC; // type:function size:0xC scope:global +_._11ITrafficMgr = .text:0x800424D8; // type:function size:0x6C scope:global +__as__Q36Attrib3Gen14trafficpatternRCQ26Attrib8Instance = .text:0x80042544; // type:function size:0x30 scope:global +ClassKey__Q36Attrib3Gen14trafficpattern = .text:0x80042574; // type:function size:0xC scope:global +GetPriority__C8Behavior = .text:0x80042580; // type:function size:0x8 scope:global +OnOwnerAttached__8BehaviorP11IAttachable = .text:0x80042588; // type:function size:0x4 scope:global +OnOwnerDetached__8BehaviorP11IAttachable = .text:0x8004258C; // type:function size:0x4 scope:global +OnTaskSimulate__8Behaviorf = .text:0x80042590; // type:function size:0x4 scope:global +OnBehaviorChange__8BehaviorRC6UCrc32 = .text:0x80042594; // type:function size:0x4 scope:global +OnPause__8Behavior = .text:0x80042598; // type:function size:0x4 scope:global +OnUnPause__8Behavior = .text:0x8004259C; // type:function size:0x4 scope:global +_._8Behavior = .text:0x800425A0; // type:function size:0x74 scope:global +SetMinMax__9TableBaseff = .text:0x80042614; // type:function size:0x2C scope:global +_IHandle__12IInputPlayer = .text:0x80042640; // type:function size:0xC scope:global +_IHandle__6IInput = .text:0x8004264C; // type:function size:0xC scope:global +Default__Q37Physics4Info11Performance = .text:0x80042658; // type:function size:0x18 scope:global +_IHandle__13ITransmission = .text:0x80042670; // type:function size:0xC scope:global +_IHandle__7IEngine = .text:0x8004267C; // type:function size:0xC scope:global +_IHandle__13IVehicleCache = .text:0x80042688; // type:function size:0xC scope:global +_._13IVehicleCache = .text:0x80042694; // type:function size:0x160 scope:global +push_back__Q23UTLt6Vector2ZP13IVehicleCachei16RCP13IVehicleCache = .text:0x800427F4; // type:function size:0x154 scope:global +_IHandle__11ISuspension = .text:0x80042948; // type:function size:0xC scope:global +_IHandle__14ISimpleChopper = .text:0x80042954; // type:function size:0xC scope:global +_IHandle__13IAIHelicopter = .text:0x80042960; // type:function size:0xC scope:global +_IHandle__19IArticulatedVehicle = .text:0x8004296C; // type:function size:0xC scope:global +_._Q43UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10_4List = .text:0x80042978; // type:function size:0xB4 scope:global +_IHandle__8IVehicle = .text:0x80042A2C; // type:function size:0xC scope:global +TypeName__13VehicleParams = .text:0x80042A38; // type:function size:0x64 scope:global +GetBits__C9WRoadLaneii = .text:0x80042A9C; // type:function size:0x18 scope:global +GetBitsSigned__C9WRoadLaneii = .text:0x80042AB4; // type:function size:0x1C scope:global +_._19WRoadNavWithCookies = .text:0x80042AD0; // type:function size:0x74 scope:global +_GetKind__16MSetTrafficSpeed = .text:0x80042B44; // type:function size:0x64 scope:global +_IHandle__7ICopMgr = .text:0x80042BA8; // type:function size:0xC scope:global +_._7ICopMgr = .text:0x80042BB4; // type:function size:0x6C scope:global +GetCacheName__C16AITrafficManager = .text:0x80042C20; // type:function size:0xC scope:global +_._11PartChecker = .text:0x80042C2C; // type:function size:0x34 scope:global +OnModel__11PartCheckerP6IModel = .text:0x80042C60; // type:function size:0x5C scope:global +_IHandle__11IRenderable = .text:0x80042CBC; // type:function size:0xC scope:global +_IHandle__11IDamageable = .text:0x80042CC8; // type:function size:0xC scope:global +_IHandle__6ICause = .text:0x80042CD4; // type:function size:0xC scope:global +_._6ICause = .text:0x80042CE0; // type:function size:0x10C scope:global +_._8AIAction = .text:0x80042DEC; // type:function size:0x74 scope:global +ShouldRestartWhenFinished__8AIAction = .text:0x80042E60; // type:function size:0x8 scope:global +_IHandle__8ICheater = .text:0x80042E68; // type:function size:0xC scope:global +GetSimable__C9AIVehicle = .text:0x80042E74; // type:function size:0x8 scope:global +GetVehicle__C9AIVehicle = .text:0x80042E7C; // type:function size:0x8 scope:global +GetAvoidableList__9AIVehicle = .text:0x80042E84; // type:function size:0x8 scope:global +SetAvoidableRadius__9AIVehiclef = .text:0x80042E8C; // type:function size:0x8 scope:global +GetSplinePath__9AIVehicle = .text:0x80042E94; // type:function size:0x8 scope:global +GetDriveToNav__9AIVehicle = .text:0x80042E9C; // type:function size:0x8 scope:global +GetDrivableToDriveToNav__C9AIVehicle = .text:0x80042EA4; // type:function size:0x8 scope:global +GetDriveSpeed__9AIVehicle = .text:0x80042EAC; // type:function size:0x8 scope:global +SetDriveSpeed__9AIVehiclef = .text:0x80042EB4; // type:function size:0x8 scope:global +SetDriveTarget__9AIVehicleRCQ25UMath7Vector3 = .text:0x80042EBC; // type:function size:0x20 scope:global +GetDriveTarget__9AIVehicle = .text:0x80042EDC; // type:function size:0x8 scope:global +GetDriveFlags__C9AIVehicle = .text:0x80042EE4; // type:function size:0x8 scope:global +ClearDriveFlags__9AIVehicle = .text:0x80042EEC; // type:function size:0xC scope:global +DoReverse__9AIVehicle = .text:0x80042EF8; // type:function size:0x10 scope:global +DoSteering__9AIVehicle = .text:0x80042F08; // type:function size:0x10 scope:global +DoGasBrake__9AIVehicle = .text:0x80042F18; // type:function size:0x10 scope:global +DoDriving__9AIVehicleUi = .text:0x80042F28; // type:function size:0x8 scope:global +GetReverseOverride__9AIVehicle = .text:0x80042F30; // type:function size:0x1C scope:global +GetTarget__C9AIVehicle = .text:0x80042F4C; // type:function size:0x8 scope:global +GetDrivableToTargetPos__C9AIVehicle = .text:0x80042F54; // type:function size:0x8 scope:global +GetLastSpawnTime__9AIVehicle = .text:0x80042F5C; // type:function size:0x8 scope:global +GetAttributes__C9AIVehicle = .text:0x80042F64; // type:function size:0x8 scope:global +GetTopSpeed__C9AIVehicle = .text:0x80042F6C; // type:function size:0x8 scope:global +GetPursuit__9AIVehicle = .text:0x80042F74; // type:function size:0x8 scope:global +GetRoadBlock__9AIVehicle = .text:0x80042F7C; // type:function size:0x8 scope:global +IsCurrentGoal__9AIVehicleRC6UCrc32 = .text:0x80042F84; // type:function size:0x18 scope:global +GetGoalName__9AIVehicle = .text:0x80042F9C; // type:function size:0x8 scope:global +IsCurrentAction__9AIVehicleRC6UCrc32 = .text:0x80042FA4; // type:function size:0x50 scope:global +GetActionName__9AIVehicle = .text:0x80042FF4; // type:function size:0x5C scope:global +GetSkill__C9AIVehicle = .text:0x80043050; // type:function size:0xC scope:global +GetShortcutSkill__C9AIVehicle = .text:0x8004305C; // type:function size:0xC scope:global +GetPercentRaceComplete__C9AIVehicle = .text:0x80043068; // type:function size:0xC scope:global +GetPriority__C9AIVehicle = .text:0x80043074; // type:function size:0x8 scope:global +Reset__9AIVehicle = .text:0x8004307C; // type:function size:0x3C scope:global +IsTetheredToTarget__9AIVehiclePQ33UTL3COM8IUnknown = .text:0x800430B8; // type:function size:0x8 scope:global +IsHiddenFromCars__C13AIPerpVehicle = .text:0x800430C0; // type:function size:0x8 scope:global +IsHiddenFromHelicopters__C13AIPerpVehicle = .text:0x800430C8; // type:function size:0x8 scope:global +GetPendingRepPointsNormal__C13AIPerpVehicle = .text:0x800430D0; // type:function size:0x8 scope:global +GetPendingRepPointsFromCopDestruction__C13AIPerpVehicle = .text:0x800430D8; // type:function size:0x8 scope:global +ClearPendingRepPoints__13AIPerpVehicle = .text:0x800430E0; // type:function size:0x10 scope:global +GetPursuitEscalationAttrib__13AIPerpVehicle = .text:0x800430F0; // type:function size:0x8 scope:global +GetPursuitLevelAttrib__13AIPerpVehicle = .text:0x800430F8; // type:function size:0x8 scope:global +GetPursuitSupportAttrib__13AIPerpVehicle = .text:0x80043100; // type:function size:0x8 scope:global +GetRacerInfo__C13AIPerpVehicle = .text:0x80043108; // type:function size:0x8 scope:global +GetShortcutSkill__C13AIPerpVehicle = .text:0x80043110; // type:function size:0x2C scope:global +Get911CallTime__C13AIPerpVehicle = .text:0x8004313C; // type:function size:0x8 scope:global +SetInPursuit__16AIVehiclePursuitb = .text:0x80043144; // type:function size:0x8 scope:global +GetInPursuit__16AIVehiclePursuit = .text:0x8004314C; // type:function size:0x8 scope:global +SetInFormation__16AIVehiclePursuitb = .text:0x80043154; // type:function size:0x8 scope:global +GetInFormation__16AIVehiclePursuit = .text:0x8004315C; // type:function size:0x8 scope:global +SetInPosition__16AIVehiclePursuitb = .text:0x80043164; // type:function size:0x8 scope:global +GetInPosition__16AIVehiclePursuit = .text:0x8004316C; // type:function size:0x8 scope:global +SetPursuitOffset__16AIVehiclePursuitRCQ25UMath7Vector3 = .text:0x80043174; // type:function size:0x20 scope:global +GetPursuitOffset__C16AIVehiclePursuit = .text:0x80043194; // type:function size:0x8 scope:global +SetInPositionOffset__16AIVehiclePursuitRCQ25UMath7Vector3 = .text:0x8004319C; // type:function size:0x20 scope:global +GetInPositionOffset__C16AIVehiclePursuit = .text:0x800431BC; // type:function size:0x8 scope:global +SetInPositionGoal__16AIVehiclePursuitRC6UCrc32 = .text:0x800431C4; // type:function size:0xC scope:global +GetInPositionGoal__C16AIVehiclePursuit = .text:0x800431D0; // type:function size:0x8 scope:global +SetBreaker__16AIVehiclePursuitb = .text:0x800431D8; // type:function size:0x8 scope:global +GetBreaker__16AIVehiclePursuit = .text:0x800431E0; // type:function size:0x8 scope:global +SetChicken__16AIVehiclePursuitb = .text:0x800431E8; // type:function size:0x8 scope:global +GetChicken__16AIVehiclePursuit = .text:0x800431F0; // type:function size:0x8 scope:global +SetDamagedByPerp__16AIVehiclePursuitb = .text:0x800431F8; // type:function size:0x8 scope:global +GetDamagedByPerp__16AIVehiclePursuit = .text:0x80043200; // type:function size:0x8 scope:global +GetSirenState__C16AIVehiclePursuit = .text:0x80043208; // type:function size:0x8 scope:global +GetTimeSinceTargetSeen__C16AIVehiclePursuit = .text:0x80043210; // type:function size:0x8 scope:global +ZeroTimeSinceTargetSeen__16AIVehiclePursuit = .text:0x80043218; // type:function size:0x10 scope:global +GetSupportGoal__C16AIVehiclePursuit = .text:0x80043228; // type:function size:0x8 scope:global +SetWithinEngagementRadius__16AIVehiclePursuit = .text:0x80043230; // type:function size:0xC scope:global +WasWithinEngagementRadius__C16AIVehiclePursuit = .text:0x8004323C; // type:function size:0x8 scope:global +GetSkill__C15AIVehicleCopCar = .text:0x80043244; // type:function size:0xC scope:global +GetShortcutSkill__C15AIVehicleCopCar = .text:0x80043250; // type:function size:0xC scope:global +_._Q23UTLt6Vector2ZP8IVehiclei16 = .text:0x8004325C; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP8IVehiclei10i16 = .text:0x80043290; // type:function size:0xB4 scope:global +GetNumCops__C9AIPursuit = .text:0x80043344; // type:function size:0x8 scope:global +IsPerpBusted__C9AIPursuit = .text:0x8004334C; // type:function size:0x8 scope:global +AddVehicle__9AIPursuitP8IVehicle = .text:0x80043354; // type:function size:0x38 scope:global +RemoveVehicle__9AIPursuitP8IVehicle = .text:0x8004338C; // type:function size:0x38 scope:global +GetPursuitDuration__C9AIPursuit = .text:0x800433C4; // type:function size:0x8 scope:global +GetEvadeLevel__C9AIPursuit = .text:0x800433CC; // type:function size:0x8 scope:global +GetCoolDownTimeRemaining__C9AIPursuit = .text:0x800433D4; // type:function size:0x8 scope:global +GetCoolDownTimeRequired__C9AIPursuit = .text:0x800433DC; // type:function size:0x14 scope:global +GetBackupETA__C9AIPursuit = .text:0x800433F0; // type:function size:0x8 scope:global +IsPerpInSight__C9AIPursuit = .text:0x800433F8; // type:function size:0x8 scope:global +IsPursuitBailed__C9AIPursuit = .text:0x80043400; // type:function size:0x8 scope:global +IsCollapseActive__C9AIPursuit = .text:0x80043408; // type:function size:0x8 scope:global +AttemptingToReAquire__C9AIPursuit = .text:0x80043410; // type:function size:0x30 scope:global +GetLastKnownLocation__C9AIPursuit = .text:0x80043440; // type:function size:0x8 scope:global +GetRoadBlock__C9AIPursuit = .text:0x80043448; // type:function size:0x8 scope:global +GetNearestCopInRoadblock__9AIPursuitPf = .text:0x80043450; // type:function size:0x18 scope:global +GetNumCopsDestroyed__C9AIPursuit = .text:0x80043468; // type:function size:0x8 scope:global +GetNumCopsDamaged__C9AIPursuit = .text:0x80043470; // type:function size:0x8 scope:global +GetTotalNumCopsInvolved__C9AIPursuit = .text:0x80043478; // type:function size:0x8 scope:global +GetNumCopsFullyEngaged__C9AIPursuit = .text:0x80043480; // type:function size:0x8 scope:global +NotifyRoadblockDodged__9AIPursuit = .text:0x80043488; // type:function size:0x10 scope:global +NotifyRoadblockDeployed__9AIPursuit = .text:0x80043498; // type:function size:0x10 scope:global +NotifyPropertyDamaged__9AIPursuiti = .text:0x800434A8; // type:function size:0x1C scope:global +NotifyTrafficCarHit__9AIPursuit = .text:0x800434C4; // type:function size:0x10 scope:global +NotifySpikeStripsDodged__9AIPursuiti = .text:0x800434D4; // type:function size:0x10 scope:global +NotifySpikeStripDeployed__9AIPursuit = .text:0x800434E4; // type:function size:0x10 scope:global +NotifyHeliSpikeStripDeployed__9AIPursuiti = .text:0x800434F4; // type:function size:0x10 scope:global +NotifyCopCarDeployed__9AIPursuit = .text:0x80043504; // type:function size:0x10 scope:global +NotifySupportVehicleDeployed__9AIPursuit = .text:0x80043514; // type:function size:0x10 scope:global +GetNumRoadblocksDodged__C9AIPursuit = .text:0x80043524; // type:function size:0x8 scope:global +GetNumRoadblocksDeployed__C9AIPursuit = .text:0x8004352C; // type:function size:0x8 scope:global +GetValueOfPropertyDamaged__C9AIPursuit = .text:0x80043534; // type:function size:0x8 scope:global +GetNumPropertyDamaged__C9AIPursuit = .text:0x8004353C; // type:function size:0x8 scope:global +GetNumTrafficCarsHit__C9AIPursuit = .text:0x80043544; // type:function size:0x8 scope:global +GetNumSpikeStripsDodged__C9AIPursuit = .text:0x8004354C; // type:function size:0x8 scope:global +GetNumSpikeStripsDeployed__C9AIPursuit = .text:0x80043554; // type:function size:0x8 scope:global +GetNumHeliSpikeStripDeployed__C9AIPursuit = .text:0x8004355C; // type:function size:0x8 scope:global +GetNumCopCarsDeployed__C9AIPursuit = .text:0x80043564; // type:function size:0x8 scope:global +GetNumSupportVehiclesDeployed__C9AIPursuit = .text:0x8004356C; // type:function size:0x8 scope:global +GetPursuitStatus__C9AIPursuit = .text:0x80043574; // type:function size:0x8 scope:global +GetTimeToBackupSpawned__C9AIPursuit = .text:0x8004357C; // type:function size:0x8 scope:global +PendingRoadBlockRequest__C9AIPursuit = .text:0x80043584; // type:function size:0x8 scope:global +GetNumHeliSpawns__C9AIPursuit = .text:0x8004358C; // type:function size:0x8 scope:global +GetCopDestroyedBonusMultiplier__C9AIPursuit = .text:0x80043594; // type:function size:0x8 scope:global +GetMostRecentCopDestroyedRepPoints__C9AIPursuit = .text:0x8004359C; // type:function size:0x8 scope:global +GetMostRecentCopDestroyedType__C9AIPursuit = .text:0x800435A4; // type:function size:0x10 scope:global +GetNumCopsInWave__C9AIPursuit = .text:0x800435B4; // type:function size:0x8 scope:global +GetNumCopsRemainingInWave__C9AIPursuit = .text:0x800435BC; // type:function size:0x18 scope:global +PursuitMeterCanShowBusted__C9AIPursuit = .text:0x800435D4; // type:function size:0x34 scope:global +GetIsAJerk__C9AIPursuit = .text:0x80043608; // type:function size:0x8 scope:global +GetMinDistanceToTarget__C9AIPursuit = .text:0x80043610; // type:function size:0x8 scope:global +SetBustedTimerToZero__9AIPursuit = .text:0x80043618; // type:function size:0x10 scope:global +GetEnterSafehouseOnDone__9AIPursuit = .text:0x80043628; // type:function size:0x8 scope:global +SetPursuit__11AIRoadBlockP8IPursuit = .text:0x80043630; // type:function size:0x84 scope:global +GetPursuit__11AIRoadBlock = .text:0x800436B4; // type:function size:0x8 scope:global +SetDodged__11AIRoadBlockb = .text:0x800436BC; // type:function size:0x8 scope:global +GetDodged__11AIRoadBlock = .text:0x800436C4; // type:function size:0x8 scope:global +IncNumCopsDestroyed__11AIRoadBlock = .text:0x800436CC; // type:function size:0x10 scope:global +GetNumCopsDestroyed__11AIRoadBlock = .text:0x800436DC; // type:function size:0x8 scope:global +IncNumCopsDamaged__11AIRoadBlock = .text:0x800436E4; // type:function size:0x10 scope:global +GetNumCopsDamaged__11AIRoadBlock = .text:0x800436F4; // type:function size:0x8 scope:global +GetRoadBlockCentre__11AIRoadBlock = .text:0x800436FC; // type:function size:0x8 scope:global +GetRoadBlockDir__11AIRoadBlock = .text:0x80043704; // type:function size:0x8 scope:global +SetRoadBlockCentre__11AIRoadBlockRCQ25UMath7Vector3T1 = .text:0x8004370C; // type:function size:0x3C scope:global +GetNumSpikeStrips__11AIRoadBlock = .text:0x80043748; // type:function size:0x8 scope:global +GetVehicles__C11AIRoadBlock = .text:0x80043750; // type:function size:0x8 scope:global +GetSmackables__C11AIRoadBlock = .text:0x80043758; // type:function size:0x8 scope:global +IsPerpCheating__C11AIRoadBlock = .text:0x80043760; // type:function size:0x8 scope:global +_GetKind__11MUnspawnCop = .text:0x80043768; // type:function size:0x64 scope:global +_GetKind__20MSetCopAutoSpawnMode = .text:0x800437CC; // type:function size:0x64 scope:global +_GetKind__15MSetCopsEnabled = .text:0x80043830; // type:function size:0x64 scope:global +_GetKind__18MForcePursuitStart = .text:0x80043894; // type:function size:0x64 scope:global +_GetKind__16MNotifyPlayerRep = .text:0x800438F8; // type:function size:0x64 scope:global +_GetKind__13MReqRoadBlock = .text:0x8004395C; // type:function size:0x64 scope:global +_GetKind__10MReqBackup = .text:0x800439C0; // type:function size:0x64 scope:global +_GetKind__16MBreakerStopCops = .text:0x80043A24; // type:function size:0x64 scope:global +_GetKind__12MPerpEscaped = .text:0x80043A88; // type:function size:0x64 scope:global +_GetKind__18MControlPathfinder = .text:0x80043AEC; // type:function size:0x64 scope:global +_IHandle__11IReputation = .text:0x80043B50; // type:function size:0xC scope:global +GetCacheName__C12AICopManager = .text:0x80043B5C; // type:function size:0xC scope:global +GetLockoutTimeRemaining__C12AICopManager = .text:0x80043B68; // type:function size:0x8 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z20MSetCopAutoSpawnModeZ12AICopManagerZ12AICopManagerPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x80043B70; // type:function size:0x88 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z15MSetCopsEnabledZ12AICopManagerZ12AICopManagerPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x80043BF8; // type:function size:0x88 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z16MBreakerStopCopsZ12AICopManagerZ12AICopManagerPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x80043C80; // type:function size:0x88 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z18MForcePursuitStartZ12AICopManagerZ12AICopManagerPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x80043D08; // type:function size:0x88 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP8IVehiclei16Ui = .text:0x80043D90; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP8IVehiclei16Ui = .text:0x80043D94; // type:function size:0x20 scope:global +reserve__Q23UTLt6Vector2ZP8IVehiclei16Ui = .text:0x80043DB4; // type:function size:0x14C scope:global +_._12AIActionNone = .text:0x80043F00; // type:function size:0x74 scope:global +CanBeAttempted__12AIActionNonef = .text:0x80043F74; // type:function size:0x8 scope:global +IsFinished__12AIActionNone = .text:0x80043F7C; // type:function size:0x8 scope:global +BeginAction__12AIActionNonef = .text:0x80043F84; // type:function size:0x4 scope:global +FinishAction__12AIActionNonef = .text:0x80043F88; // type:function size:0x4 scope:global +Update__12AIActionNonef = .text:0x80043F8C; // type:function size:0x4 scope:global +OnBehaviorChange__12AIActionNoneRC6UCrc32 = .text:0x80043F90; // type:function size:0x4 scope:global +_._18AIActionTooDamaged = .text:0x80043F94; // type:function size:0x74 scope:global +IsFinished__18AIActionTooDamaged = .text:0x80044008; // type:function size:0x8 scope:global +_._18AIActionGetUnstuck = .text:0x80044010; // type:function size:0x74 scope:global +BeginAction__18AIActionGetUnstuckf = .text:0x80044084; // type:function size:0x4 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z16MSetTrafficSpeedZ15AIActionTrafficZ15AIActionTrafficPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x80044088; // type:function size:0x88 scope:global +_._22AIActionPursuitOffRoad = .text:0x80044110; // type:function size:0x74 scope:global +_._19AIActionHeliPursuit = .text:0x80044184; // type:function size:0xA4 scope:global +CanBeAttempted__19AIActionHeliPursuitf = .text:0x80044228; // type:function size:0x8 scope:global +OnBehaviorChange__19AIActionHeliPursuitRC6UCrc32 = .text:0x80044230; // type:function size:0x4 scope:global +ShouldRestartWhenFinished__19AIActionHeliPursuit = .text:0x80044234; // type:function size:0x8 scope:global +_._16AIActionHeliExit = .text:0x8004423C; // type:function size:0x74 scope:global +CanBeAttempted__16AIActionHeliExitf = .text:0x800442B0; // type:function size:0x8 scope:global +OnBehaviorChange__16AIActionHeliExitRC6UCrc32 = .text:0x800442B8; // type:function size:0x4 scope:global +ShouldRestartWhenFinished__16AIActionHeliExit = .text:0x800442BC; // type:function size:0x8 scope:global +_._17AIActionHeadOnRam = .text:0x800442C4; // type:function size:0x74 scope:global +_._11AIActionRam = .text:0x80044338; // type:function size:0x74 scope:global +_._17AIActionStopShort = .text:0x800443AC; // type:function size:0x74 scope:global +BeginAction__17AIActionStopShortf = .text:0x80044420; // type:function size:0x4 scope:global +FinishAction__17AIActionStopShortf = .text:0x80044424; // type:function size:0x4 scope:global +_._14AIActionSpline = .text:0x80044428; // type:function size:0x74 scope:global +CanBeAttempted__14AIActionSplinef = .text:0x8004449C; // type:function size:0x8 scope:global +IsFinished__14AIActionSpline = .text:0x800444A4; // type:function size:0x8 scope:global +BeginAction__14AIActionSplinef = .text:0x800444AC; // type:function size:0x4 scope:global +FinishAction__14AIActionSplinef = .text:0x800444B0; // type:function size:0x4 scope:global +OnBehaviorChange__14AIActionSplineRC6UCrc32 = .text:0x800444B4; // type:function size:0x4 scope:global +_._14AIActionStrafe = .text:0x800444B8; // type:function size:0x74 scope:global +CanBeAttempted__14AIActionStrafef = .text:0x8004452C; // type:function size:0x8 scope:global +IsFinished__14AIActionStrafe = .text:0x80044534; // type:function size:0x8 scope:global +BeginAction__14AIActionStrafef = .text:0x8004453C; // type:function size:0x4 scope:global +FinishAction__14AIActionStrafef = .text:0x80044540; // type:function size:0x4 scope:global +OnBehaviorChange__14AIActionStrafeRC6UCrc32 = .text:0x80044544; // type:function size:0x4 scope:global +_._16AIActionAirborne = .text:0x80044548; // type:function size:0x74 scope:global +BeginAction__16AIActionAirbornef = .text:0x800445BC; // type:function size:0x4 scope:global +FinishAction__16AIActionAirbornef = .text:0x800445C0; // type:function size:0x4 scope:global +_GetKind__10MJackKnife = .text:0x800445C4; // type:function size:0x64 scope:global +_._17AIActionJackKnife = .text:0x80044628; // type:function size:0xA0 scope:global +IsFinished__17AIActionJackKnife = .text:0x800446C8; // type:function size:0x8 scope:global +BeginAction__17AIActionJackKnifef = .text:0x800446D0; // type:function size:0x4 scope:global +FinishAction__17AIActionJackKnifef = .text:0x800446D4; // type:function size:0x4 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z10MJackKnifeZ17AIActionJackKnifeZ17AIActionJackKnifePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800446D8; // type:function size:0x88 scope:global +_._23AIActionStaticRoadBlock = .text:0x80044760; // type:function size:0x74 scope:global +IsFinished__23AIActionStaticRoadBlock = .text:0x800447D4; // type:function size:0x8 scope:global +IsFinished__12AIActionRace = .text:0x800447DC; // type:function size:0x8 scope:global +_._14AIVehicleEmpty = .text:0x800447E4; // type:function size:0x8C scope:global +Update__14AIVehicleEmptyf = .text:0x80044870; // type:function size:0x20 scope:global +OnDebugDraw__14AIVehicleEmpty = .text:0x80044890; // type:function size:0x4 scope:global +IsPlayerSteering__14AIVehicleHuman = .text:0x80044894; // type:function size:0x3C scope:global +GetAiControl__14AIVehicleHuman = .text:0x800448D0; // type:function size:0x8 scope:global +SetWorldMoment__14AIVehicleHumanRCQ25UMath7Vector3f = .text:0x800448D8; // type:function size:0x24 scope:global +GetWorldMomentPosition__14AIVehicleHuman = .text:0x800448FC; // type:function size:0x8 scope:global +GetWorldMomentRadius__14AIVehicleHuman = .text:0x80044904; // type:function size:0x8 scope:global +ClearWorldMoment__14AIVehicleHuman = .text:0x8004490C; // type:function size:0x10 scope:global +GetSkill__C14AIVehicleHuman = .text:0x8004491C; // type:function size:0xC scope:global +IsFacingWrongWay__C14AIVehicleHuman = .text:0x80044928; // type:function size:0x8 scope:global +GetCatchupCheat__C14AIVehicleHuman = .text:0x80044930; // type:function size:0xC scope:global +_GetKind__11MPerpBusted = .text:0x8004493C; // type:function size:0x64 scope:global +__Q33UTL3Stdt3set2ZsZ9_type_set = .text:0x800449A0; // type:function size:0x74 scope:global +_._Q23UTLt6Vector2ZUii16 = .text:0x80044A14; // type:function size:0x34 scope:global +_._Q23UTLt10FastVector2ZUii16 = .text:0x80044A48; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZUii16Ui = .text:0x80044AFC; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt6Vector2ZUii16Ui = .text:0x80044B00; // type:function size:0x20 scope:global +reserve__Q23UTLt6Vector2ZUii16Ui = .text:0x80044B20; // type:function size:0x14C scope:global +_._27AdaptivePIDControllerSimple = .text:0x80044C6C; // type:function size:0x94 scope:global +_._32AdaptivePIDControllerComplicated = .text:0x80044D00; // type:function size:0x68 scope:global +GetTerm__32AdaptivePIDControllerComplicated8ePIDTerm = .text:0x80044D68; // type:function size:0x10 scope:global +GetDesiredHeightOverDest__C19AIVehicleHelicopter = .text:0x80044D78; // type:function size:0x8 scope:global +SetDesiredHeightOverDest__19AIVehicleHelicopterf = .text:0x80044D80; // type:function size:0x8 scope:global +SetLookAtPosition__19AIVehicleHelicopterGQ25UMath7Vector3 = .text:0x80044D88; // type:function size:0x20 scope:global +GetLookAtPosition__C19AIVehicleHelicopter = .text:0x80044DA8; // type:function size:0x24 scope:global +StrafeToDestIsSet__C19AIVehicleHelicopter = .text:0x80044DCC; // type:function size:0x8 scope:global +SetStrafeToDest__19AIVehicleHelicopterb = .text:0x80044DD4; // type:function size:0x8 scope:global +GetHeliSheetCoord__C19AIVehicleHelicopter = .text:0x80044DDC; // type:function size:0x8 scope:global +GetFuelTimeRemaining__19AIVehicleHelicopter = .text:0x80044DE4; // type:function size:0x8 scope:global +SetShadowScale__19AIVehicleHelicopterf = .text:0x80044DEC; // type:function size:0x8 scope:global +GetShadowScale__19AIVehicleHelicopter = .text:0x80044DF4; // type:function size:0x8 scope:global +SetDustStormIntensity__19AIVehicleHelicopterf = .text:0x80044DFC; // type:function size:0x8 scope:global +GetDustStormIntensity__19AIVehicleHelicopter = .text:0x80044E04; // type:function size:0x8 scope:global +push_back__Q23UTLt6Vector2ZP8ISimablei16RCP8ISimable = .text:0x80044E0C; // type:function size:0x154 scope:global +_._10AIGoalNone = .text:0x80044F60; // type:function size:0x68 scope:global +Construct__10AIGoalNoneP8ISimable = .text:0x80044FC8; // type:function size:0x44 scope:global +_._13AIGoalTraffic = .text:0x8004500C; // type:function size:0x68 scope:global +Construct__13AIGoalTrafficP8ISimable = .text:0x80045074; // type:function size:0x44 scope:global +_._12AIGoalPatrol = .text:0x800450B8; // type:function size:0x68 scope:global +Construct__12AIGoalPatrolP8ISimable = .text:0x80045120; // type:function size:0x44 scope:global +Construct__13AIGoalPursuitP8ISimable = .text:0x80045164; // type:function size:0x44 scope:global +_._15AIGoalStopShort = .text:0x800451A8; // type:function size:0x68 scope:global +Construct__15AIGoalStopShortP8ISimable = .text:0x80045210; // type:function size:0x44 scope:global +_._9AIGoalRam = .text:0x80045254; // type:function size:0x68 scope:global +Construct__9AIGoalRamP8ISimable = .text:0x800452BC; // type:function size:0x44 scope:global +_._9AIGoalPit = .text:0x80045300; // type:function size:0x68 scope:global +Construct__9AIGoalPitP8ISimable = .text:0x80045368; // type:function size:0x44 scope:global +Construct__14AIGoalPullOverP8ISimable = .text:0x800453AC; // type:function size:0x44 scope:global +_._15AIGoalHeadOnRam = .text:0x800453F0; // type:function size:0x68 scope:global +Construct__15AIGoalHeadOnRamP8ISimable = .text:0x80045458; // type:function size:0x44 scope:global +Construct__21AIGoalStaticRoadBlockP8ISimable = .text:0x8004549C; // type:function size:0x44 scope:global +_._17AIGoalFleePursuit = .text:0x800454E0; // type:function size:0x68 scope:global +Construct__17AIGoalFleePursuitP8ISimable = .text:0x80045548; // type:function size:0x44 scope:global +_._17AIGoalHeliPursuit = .text:0x8004558C; // type:function size:0x68 scope:global +Construct__17AIGoalHeliPursuitP8ISimable = .text:0x800455F4; // type:function size:0x44 scope:global +_._14AIGoalHeliExit = .text:0x80045638; // type:function size:0x68 scope:global +Construct__14AIGoalHeliExitP8ISimable = .text:0x800456A0; // type:function size:0x44 scope:global +_._11AIGoalRacer = .text:0x800456E4; // type:function size:0x5C scope:global +Construct__11AIGoalRacerP8ISimable = .text:0x80045740; // type:function size:0x44 scope:global +_GetKind__20MNotifyPursuitLength = .text:0x80045784; // type:function size:0x64 scope:global +Update__16PursuitFormationfP8IPursuit = .text:0x800457E8; // type:function size:0x4 scope:global +GetFinisherTolerance__16PursuitFormation = .text:0x800457EC; // type:function size:0xC scope:global +GetFinisherTime__16PursuitFormation = .text:0x800457F8; // type:function size:0xC scope:global +GetTimeToFinisher__16PursuitFormation = .text:0x80045804; // type:function size:0xC scope:global +_._14BoxInFormation = .text:0x80045810; // type:function size:0x5C scope:global +GetFinisherTime__14BoxInFormation = .text:0x8004586C; // type:function size:0x8 scope:global +_._21RollingBlockFormation = .text:0x80045874; // type:function size:0x5C scope:global +GetFinisherTime__21RollingBlockFormation = .text:0x800458D0; // type:function size:0x8 scope:global +_._15FollowFormation = .text:0x800458D8; // type:function size:0x5C scope:global +_._22StaggerFollowFormation = .text:0x80045934; // type:function size:0x5C scope:global +_._12PitFormation = .text:0x80045990; // type:function size:0x5C scope:global +GetTimeToFinisher__12PitFormation = .text:0x800459EC; // type:function size:0xC scope:global +GetFinisherTolerance__12PitFormation = .text:0x800459F8; // type:function size:0xC scope:global +_._13HerdFormation = .text:0x80045A04; // type:function size:0x5C scope:global +SegmentSphereIntersect__Q22AI4MathRCQ25UMath7Vector3N21fRQ25UMath7Vector3 = .text:0x80045A60; // type:function size:0x194 scope:global +AllocVectorSpace__Q23UTLt10FastVector2ZUii16UiUi = .text:0x80045BF4; // type:function size:0x34 scope:global +FreeVectorSpace__Q23UTLt10FastVector2ZUii16PUiUi = .text:0x80045C28; // type:function size:0x34 scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZUii16 = .text:0x80045C5C; // type:function size:0xC scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP8IVehiclei10i16UiUi = .text:0x80045C68; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP8IVehiclei10i16PP8IVehicleUi = .text:0x80045C70; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP8IVehiclei10i16Ui = .text:0x80045C74; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP8IVehiclei10i16 = .text:0x80045C7C; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP8IVehiclei16 = .text:0x80045C84; // type:function size:0xC scope:global +CalcIndexMultiplier__9TableBase = .text:0x80045C90; // type:function size:0x4C scope:global +OnGrowRequest__Q23UTLt6Vector2ZP8ISimablei16Ui = .text:0x80045CDC; // type:function size:0x4 scope:global +_._Q23UTLt11FixedVector3ZP8ISimablei10i16 = .text:0x80045CE0; // type:function size:0xB4 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP8ISimablei10i16UiUi = .text:0x80045D94; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP8ISimablei10i16PP8ISimableUi = .text:0x80045D9C; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP8ISimablei10i16Ui = .text:0x80045DA0; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP8ISimablei10i16 = .text:0x80045DA8; // type:function size:0x8 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP8ISimablei16Ui = .text:0x80045DB0; // type:function size:0x20 scope:global +_._Q23UTLt6Vector2ZP8ISimablei16 = .text:0x80045DD0; // type:function size:0x34 scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP8ISimablei16 = .text:0x80045E04; // type:function size:0xC scope:global +_GLOBAL_.I._16AITrafficManager.mTrafficMinSpawnDist = .text:0x80045E10; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x80045E3C; // type:label scope:local +__9CAnimBank = .text:0x80045E3C; // type:function size:0x44 scope:global +_._9CAnimBank = .text:0x80045E80; // type:function size:0x34 scope:global +GetNextAnimBank__FPCQ25EAGL413DynamicLoaderRi = .text:0x80045EB4; // type:function size:0x40 scope:global +GetFirstAnimBank__FPCQ25EAGL413DynamicLoader = .text:0x80045EF4; // type:function size:0x2C scope:global +Initialize__9CAnimBankPci = .text:0x80045F20; // type:function size:0xB8 scope:global +Cleanup__9CAnimBank = .text:0x80045FD8; // type:function size:0x94 scope:global +InitAnimBankSlotPool__Fv = .text:0x8004606C; // type:function size:0x64 scope:global +CloseAnimBankSlotPool__Fv = .text:0x800460D0; // type:function size:0x40 scope:global +__nw__12CNFSAnimBankUiPCc = .text:0x80046110; // type:function size:0x3C scope:global +__dl__12CNFSAnimBankPv = .text:0x8004614C; // type:function size:0x54 scope:global +__12CNFSAnimBankP6bChunk = .text:0x800461A0; // type:function size:0x44 scope:global +_._12CNFSAnimBank = .text:0x800461E4; // type:function size:0x50 scope:global +DumpAnimBanks__Fv = .text:0x80046234; // type:function size:0x78 scope:global +GetAnimFromBankByNamehash__FUiPPQ29EAGL4Anim8AnimBankPi = .text:0x800462AC; // type:function size:0xA0 scope:global +LoaderEAGLAnimations__FP6bChunk = .text:0x8004634C; // type:function size:0xAC scope:global +UnloaderEAGLAnimations__FP6bChunk = .text:0x800463F8; // type:function size:0xA8 scope:global +GetSceneMomentMarkerType__18CAnimCandidateDataUi = .text:0x800464A0; // type:function size:0x48 scope:global +GetMomentMarkerName__18CAnimCandidateDatai = .text:0x800464E8; // type:function size:0x28 scope:global +GetClosestMarker__18CAnimCandidateDataUiR8bVector3PiPfUs = .text:0x80046510; // type:function size:0x178 scope:global +ChooseArrestAnimation__FPiPci = .text:0x80046688; // type:function size:0x398 scope:global +ChooseArrestLocation__FRQ25UMath7Vector3Rf = .text:0x80046A20; // type:function size:0x284 scope:global +__19NISListenerActivity = .text:0x80046CA4; // type:function size:0x124 scope:global +_._19NISListenerActivity = .text:0x80046DC8; // type:function size:0xC8 scope:global +ArrestLevel__19NISListenerActivityi = .text:0x80046E90; // type:function size:0x4 scope:global +MessageBusted__19NISListenerActivityRC11MPerpBusted = .text:0x80046E94; // type:function size:0x1A8 scope:global +__12CAnimChooser = .text:0x8004703C; // type:function size:0x14 scope:global +_._12CAnimChooser = .text:0x80047050; // type:function size:0x34 scope:global +__9CAnimCtrl = .text:0x80047084; // type:function size:0x3C scope:global +_._9CAnimCtrl = .text:0x800470C0; // type:function size:0x4C scope:global +InitAnimCtrls__Fv = .text:0x8004710C; // type:function size:0x4C scope:global +__nw__9CAnimCtrlUiPCc = .text:0x80047158; // type:function size:0x28 scope:global +__dl__9CAnimCtrlPv = .text:0x80047180; // type:function size:0x2C scope:global +Purge__9CAnimCtrl = .text:0x800471AC; // type:function size:0x34 scope:global +Clear__9CAnimCtrl = .text:0x800471E0; // type:function size:0x88 scope:global +Cleanup__9CAnimCtrl = .text:0x80047268; // type:function size:0x7C scope:global +SetLoopRange__9CAnimCtrlUiUi = .text:0x800472E4; // type:function size:0x74 scope:global +CreateFnAnimFromBank__9CAnimCtrlPQ29EAGL4Anim8AnimBankii = .text:0x80047358; // type:function size:0x80 scope:global +CreateFnAnimFromNamehash__9CAnimCtrlUii = .text:0x800473D8; // type:function size:0x78 scope:global +AdvanceAnimTime__9CAnimCtrlf = .text:0x80047450; // type:function size:0x294 scope:global +UpdateAnimPose__9CAnimCtrlb = .text:0x800476E4; // type:function size:0x1A0 scope:global +LoadSceneCandidateData__FP6bChunk = .text:0x80047884; // type:function size:0x220 scope:global +UnloadSceneCandidateData__FP6bChunk = .text:0x80047AA4; // type:function size:0x2C scope:global +LoadSceneLoadData__FP6bChunk = .text:0x80047AD0; // type:function size:0x64 scope:global +UnloadSceneLoadData__FP6bChunk = .text:0x80047B34; // type:function size:0x2C scope:global +LoaderAnimDirectoryData__FP6bChunk = .text:0x80047B60; // type:function size:0xAC scope:global +UnloaderAnimDirectoryData__FP6bChunk = .text:0x80047C0C; // type:function size:0xAC scope:global +InitNFSAnimEngine__Fv = .text:0x80047CB8; // type:function size:0x2C scope:global +MyEAGLMallocOverride__FUiPCc = .text:0x80047CE4; // type:function size:0x6C scope:global +MyEAGLFreeOverride__FPvUi = .text:0x80047D50; // type:function size:0x20 scope:global +Init__18CAnimEngineManager = .text:0x80047D70; // type:function size:0x44 scope:global +CreateAnimEntity__18CAnimEntityFactoryi = .text:0x80047DB4; // type:function size:0x58 scope:global +EndianSwapEntityData__18CAnimEntityFactoryPvi = .text:0x80047E0C; // type:function size:0x6C scope:global +InitCharacterEffects__Fv = .text:0x80047E78; // type:function size:0x3C scope:global +CloseCharacterEffects__Fv = .text:0x80047EB4; // type:function size:0x10 scope:global +EndianSwapEntityData__25CBasicCharacterAnimEntityPvi = .text:0x80047EC4; // type:function size:0xC8 scope:global +__25CBasicCharacterAnimEntity = .text:0x80047F8C; // type:function size:0x50 scope:global +_._25CBasicCharacterAnimEntity = .text:0x80047FDC; // type:function size:0x58 scope:global +Init__25CBasicCharacterAnimEntityPvP9SpaceNode = .text:0x80048034; // type:function size:0x478 scope:global +Purge__25CBasicCharacterAnimEntity = .text:0x800484AC; // type:function size:0x8C scope:global +SetTime__25CBasicCharacterAnimEntityf = .text:0x80048538; // type:function size:0x50 scope:global +UpdateTimeStep__25CBasicCharacterAnimEntityf = .text:0x80048588; // type:function size:0x2C0 scope:global +RenderEffects__25CBasicCharacterAnimEntityP5eViewi = .text:0x80048848; // type:function size:0x3B4 scope:global +FindWorldBonePosition__25CBasicCharacterAnimEntityiP8bVector3 = .text:0x80048BFC; // type:function size:0xBC scope:global +EndianSwapEntityData__15CPropAnimEntityPvi = .text:0x80048CB8; // type:function size:0x60 scope:global +__15CPropAnimEntity = .text:0x80048D18; // type:function size:0x30 scope:global +_._15CPropAnimEntity = .text:0x80048D48; // type:function size:0x58 scope:global +Init__15CPropAnimEntityPvP9SpaceNode = .text:0x80048DA0; // type:function size:0xC4 scope:global +Purge__15CPropAnimEntity = .text:0x80048E64; // type:function size:0x54 scope:global +SetTime__15CPropAnimEntityf = .text:0x80048EB8; // type:function size:0x4 scope:global +UpdateTimeStep__15CPropAnimEntityf = .text:0x80048EBC; // type:function size:0x4 scope:global +__nw__16CWorldAnimEntityUiPCc = .text:0x80048EC0; // type:function size:0x4C scope:global +__dl__16CWorldAnimEntityPv = .text:0x80048F0C; // type:function size:0x3C scope:global +__nw__20CWorldAnimEntityTreeUiPCc = .text:0x80048F48; // type:function size:0x4C scope:global +__dl__20CWorldAnimEntityTreePv = .text:0x80048F94; // type:function size:0x3C scope:global +__nw__23WorldAnimEntityTreeInfoUiPCc = .text:0x80048FD0; // type:function size:0x4C scope:global +__dl__23WorldAnimEntityTreeInfoPv = .text:0x8004901C; // type:function size:0x3C scope:global +EndianSwapEntityData__16CWorldAnimEntityPvi = .text:0x80049058; // type:function size:0x6C scope:global +__16CWorldAnimEntity = .text:0x800490C4; // type:function size:0x30 scope:global +_._16CWorldAnimEntity = .text:0x800490F4; // type:function size:0x58 scope:global +GetAnimChannelHash__FUiUi = .text:0x8004914C; // type:function size:0x6C scope:global +Init__16CWorldAnimEntityPvP9SpaceNode = .text:0x800491B8; // type:function size:0x390 scope:global +Purge__16CWorldAnimEntity = .text:0x80049548; // type:function size:0x8C scope:global +Play__16CWorldAnimEntity = .text:0x800495D4; // type:function size:0x2C scope:global +Pause__16CWorldAnimEntity = .text:0x80049600; // type:function size:0x2C scope:global +Stop__16CWorldAnimEntity = .text:0x8004962C; // type:function size:0x2C scope:global +IsPlaying__16CWorldAnimEntity = .text:0x80049658; // type:function size:0x28 scope:global +SetTime__16CWorldAnimEntityf = .text:0x80049680; // type:function size:0x68 scope:global +UpdateTimeStep__16CWorldAnimEntityf = .text:0x800496E8; // type:function size:0x118 scope:global +CompareParentIndex__FP6bPNodeT0 = .text:0x80049800; // type:function size:0x2C scope:global +__23WorldAnimEntityTreeInfoUiRt6bPList1Z19WorldAnimEntityInfoP19WorldAnimNamedRange = .text:0x8004982C; // type:function size:0xB0 scope:global +__20CWorldAnimEntityTree = .text:0x800498DC; // type:function size:0x34 scope:global +_._20CWorldAnimEntityTree = .text:0x80049910; // type:function size:0xEC scope:global +_._23WorldAnimEntityTreeInfo = .text:0x800499FC; // type:function size:0xA8 scope:global +LoaderWorldAnimTreeMarker__FP6bChunk = .text:0x80049AA4; // type:function size:0x22C scope:global +UnloaderWorldAnimTreeMarker__FP6bChunk = .text:0x80049CD0; // type:function size:0x74 scope:global +LoaderWorldAnimEntityData__FP6bChunk = .text:0x80049D44; // type:function size:0xE0 scope:global +UnloaderWorldAnimEntityData__FP6bChunk = .text:0x80049E24; // type:function size:0xBC scope:global +LoaderWorldAnimDirectoryData__FP6bChunk = .text:0x80049EE0; // type:function size:0x160 scope:global +UnloaderWorldAnimDirectoryData__FP6bChunk = .text:0x8004A040; // type:function size:0xBC scope:global +SetTime__20CWorldAnimEntityTreef = .text:0x8004A0FC; // type:function size:0x68 scope:global +Pause__20CWorldAnimEntityTree = .text:0x8004A164; // type:function size:0x88 scope:global +Play__20CWorldAnimEntityTree = .text:0x8004A1EC; // type:function size:0x98 scope:global +Stop__20CWorldAnimEntityTree = .text:0x8004A284; // type:function size:0x88 scope:global +AnimBridgeNewDynamicLoader__FPcT0i = .text:0x8004A30C; // type:function size:0x54 scope:global +AnimBridgeDeleteDynamicLoader__FPQ25EAGL413DynamicLoader = .text:0x8004A360; // type:function size:0x2C scope:global +AnimBridgeNewTransform__FPci = .text:0x8004A38C; // type:function size:0x4C scope:global +AnimBridgeDeleteTransform__FPQ25EAGL49Transform = .text:0x8004A3D8; // type:function size:0x44 scope:global +SetAnimOriginPosition__12CAnimLocatorRC8bVector3Us = .text:0x8004A41C; // type:function size:0x2C scope:global +GetAnimOriginPosition__12CAnimLocatorP8bVector3PUsb = .text:0x8004A448; // type:function size:0x58 scope:global +GetInitialAnimMatricies__12CAnimLocatorP8bMatrix4T1b = .text:0x8004A4A0; // type:function size:0x12C scope:global +ANIM_GetWorldHeight__FRCQ25UMath7Vector3RfRQ25UMath7Vector3 = .text:0x8004A5CC; // type:function size:0x398 scope:global +IsDebugPrintEnabled__13CAnimSettings = .text:0x8004A964; // type:function size:0xC scope:global +__11CAnimPlayer = .text:0x8004A970; // type:function size:0x5C scope:global +_._11CAnimPlayer = .text:0x8004A9CC; // type:function size:0xA8 scope:global +AnimLoader_Init__Fv = .text:0x8004AA74; // type:function size:0x34 scope:global +AnimLoader_IncrementAndAlignUp__FRii = .text:0x8004AAA8; // type:function size:0x24 scope:global +AnimLoader_SizeNeeded__Fv = .text:0x8004AACC; // type:function size:0xA0 scope:global +AnimLoader_LoadResourceFile__FPCc = .text:0x8004AB6C; // type:function size:0xC8 scope:global +AnimLoader_NextStep__Fv = .text:0x8004AC34; // type:function size:0xCC scope:global +AnimLoader_Callback__Fi = .text:0x8004AD00; // type:function size:0x20 scope:global +Load__11CAnimPlayerUiib = .text:0x8004AD20; // type:function size:0x1F0 scope:global +Unload__11CAnimPlayerUi = .text:0x8004AF10; // type:function size:0x100 scope:global +IsLoaded__11CAnimPlayerUi = .text:0x8004B010; // type:function size:0x5C scope:global +CreateAnimInstance__11CAnimPlayerUiiii = .text:0x8004B06C; // type:function size:0x5C scope:global +DeleteAnimInstance__11CAnimPlayeri = .text:0x8004B0C8; // type:function size:0x20 scope:global +CreateAnimScene__11CAnimPlayerP14CAnimSceneDataiii = .text:0x8004B0E8; // type:function size:0x98 scope:global +DestroyAnimScene__11CAnimPlayeri = .text:0x8004B180; // type:function size:0x6C scope:global +CreateAndPlayAnim__11CAnimPlayerUiiii = .text:0x8004B1EC; // type:function size:0x48 scope:global +FindAnimScene__11CAnimPlayeri = .text:0x8004B234; // type:function size:0xA4 scope:global +Play__11CAnimPlayeri = .text:0x8004B2D8; // type:function size:0x34 scope:global +Stop__11CAnimPlayerib = .text:0x8004B30C; // type:function size:0x68 scope:global +UpdateTime__11CAnimPlayerf = .text:0x8004B374; // type:function size:0x40 scope:global +Init__11CAnimPlayer = .text:0x8004B3B4; // type:function size:0x8 scope:global +InitWorldAnimScene__11CAnimPlayer = .text:0x8004B3BC; // type:function size:0x78 scope:global +GetWorldAnimScene__11CAnimPlayer = .text:0x8004B434; // type:function size:0x8 scope:global +KillWorldAnimScene__11CAnimPlayerbT1 = .text:0x8004B43C; // type:function size:0xBC scope:global +StartCopDoorAnim__Fifff = .text:0x8004B4F8; // type:function size:0x78 scope:global +UpdateCopDoorPositions__Ff = .text:0x8004B570; // type:function size:0xA4 scope:global +__9CAnimPart = .text:0x8004B614; // type:function size:0x20 scope:global +_._9CAnimPart = .text:0x8004B634; // type:function size:0x40 scope:global +__dl__9CAnimPartPv = .text:0x8004B674; // type:function size:0x2C scope:global +Init__9CAnimPartP13CAnimSkeleton = .text:0x8004B6A0; // type:function size:0xD4 scope:global +Purge__9CAnimPart = .text:0x8004B774; // type:function size:0x60 scope:global +__17CarAnimationState = .text:0x8004B7D4; // type:function size:0x1C scope:global +ResetCarAnimState__FP8IVehicle = .text:0x8004B7F0; // type:function size:0x4C scope:global +FindAnimSceneData__14CAnimSceneDataUi = .text:0x8004B83C; // type:function size:0x38 scope:global +__14CAnimSceneDataP6bChunk = .text:0x8004B874; // type:function size:0x2C scope:global +_._14CAnimSceneData = .text:0x8004B8A0; // type:function size:0x78 scope:global +EndianSwapHeaderData__14CAnimSceneData = .text:0x8004B918; // type:function size:0x78 scope:global +InitHeaderData__14CAnimSceneDataPvi = .text:0x8004B990; // type:function size:0x2C scope:global +AddEntityData__14CAnimSceneDataPvi = .text:0x8004B9BC; // type:function size:0x6C scope:global +CreateAnimSceneData__FP6bChunkT0 = .text:0x8004BA28; // type:function size:0x7C scope:global +LoaderAnimSceneData__FP6bChunk = .text:0x8004BAA4; // type:function size:0xE4 scope:global +UnloaderAnimSceneData__FP6bChunk = .text:0x8004BB88; // type:function size:0x9C scope:global +__13CAnimProperty13eAnimPropertyb = .text:0x8004BC24; // type:function size:0x1C scope:global +_._13CAnimProperty = .text:0x8004BC40; // type:function size:0x34 scope:global +GetType__13CAnimProperty = .text:0x8004BC74; // type:function size:0x8 scope:global +SetEnabled__13CAnimPropertyb = .text:0x8004BC7C; // type:function size:0x8 scope:global +IsEnabled__13CAnimProperty = .text:0x8004BC84; // type:function size:0x18 scope:global +GenerateHandle__10CAnimScene = .text:0x8004BC9C; // type:function size:0x30 scope:global +__10CAnimSceneP14CAnimSceneDataiii = .text:0x8004BCCC; // type:function size:0xBC scope:global +_._10CAnimScene = .text:0x8004BD88; // type:function size:0xC0 scope:global +GetHandle__10CAnimScene = .text:0x8004BE48; // type:function size:0x8 scope:global +GetAnimID__10CAnimScene = .text:0x8004BE50; // type:function size:0x10 scope:global +GetSceneHash__10CAnimScene = .text:0x8004BE60; // type:function size:0x20 scope:global +GetSceneType__10CAnimScene = .text:0x8004BE80; // type:function size:0x10 scope:global +GetSceneName__10CAnimScenePc = .text:0x8004BE90; // type:function size:0x13C scope:global +GetCameraTrackNumber__10CAnimScene = .text:0x8004BFCC; // type:function size:0x8 scope:global +SetPropertyEnabled__10CAnimScene13eAnimPropertyb = .text:0x8004BFD4; // type:function size:0x60 scope:global +IsPropertyEnabled__10CAnimScene13eAnimProperty = .text:0x8004C034; // type:function size:0x34 scope:global +BindToGame__10CAnimScene = .text:0x8004C068; // type:function size:0xB0 scope:global +UnBindToGame__10CAnimScene = .text:0x8004C118; // type:function size:0x70 scope:global +ChangePlayStatus__10CAnimSceneQ210CAnimScene11ePlayStatus = .text:0x8004C188; // type:function size:0xD4 scope:global +Play__10CAnimScene = .text:0x8004C25C; // type:function size:0x28 scope:global +Stop__10CAnimScene = .text:0x8004C284; // type:function size:0x28 scope:global +Pause__10CAnimScene = .text:0x8004C2AC; // type:function size:0x28 scope:global +UnPause__10CAnimScene = .text:0x8004C2D4; // type:function size:0x28 scope:global +IsPlaying__10CAnimScene = .text:0x8004C2FC; // type:function size:0x14 scope:global +IsPaused__10CAnimScene = .text:0x8004C310; // type:function size:0x14 scope:global +ResetTime__10CAnimScene = .text:0x8004C324; // type:function size:0x38 scope:global +JumpToEnd__10CAnimScene = .text:0x8004C35C; // type:function size:0x38 scope:global +SetTime__10CAnimScenef = .text:0x8004C394; // type:function size:0x88 scope:global +UpdateTime__10CAnimScenef = .text:0x8004C41C; // type:function size:0x1CC scope:global +RenderEffects__10CAnimSceneP5eViewi = .text:0x8004C5E8; // type:function size:0x68 scope:global +AddProperty__10CAnimScene13eAnimPropertyb = .text:0x8004C650; // type:function size:0x68 scope:global +FindProperty__10CAnimScene13eAnimProperty = .text:0x8004C6B8; // type:function size:0x5C scope:global +Init__10CAnimScene = .text:0x8004C714; // type:function size:0x170 scope:global +Purge__10CAnimScene = .text:0x8004C884; // type:function size:0x64 scope:global +ForcePlayerToAnimCarPosition__10CAnimSceneii = .text:0x8004C8E8; // type:function size:0x4 scope:global +ClearCarAnimStates__10CAnimScene = .text:0x8004C8EC; // type:function size:0x28 scope:global +InitCarAnimStatesFromStartingPositions__10CAnimScene = .text:0x8004C914; // type:function size:0xCC scope:global +InitCarAnimStatesFromNIS__10CAnimScene = .text:0x8004C9E0; // type:function size:0x194 scope:global +SetCarAnimationPositions__10CAnimScene = .text:0x8004CB74; // type:function size:0x90 scope:global +CreateCarAnimationControllers__10CAnimScene = .text:0x8004CC04; // type:function size:0x218 scope:global +ClearCarAnimationControllers__10CAnimScene = .text:0x8004CE1C; // type:function size:0x94 scope:global +AnimatedCars_SetMainAndWheels__10CAnimSceneiP9CAnimCtrlf = .text:0x8004CEB0; // type:function size:0x164 scope:global +AnimatedCars_ResetToBeginning__10CAnimScene = .text:0x8004D014; // type:function size:0x70 scope:global +AnimatedCars_ClearLastPose__10CAnimScene = .text:0x8004D084; // type:function size:0x28 scope:global +AnimatedCars_SetTime__10CAnimScenef = .text:0x8004D0AC; // type:function size:0xA0 scope:global +AnimatedCars_Update__10CAnimScenef = .text:0x8004D14C; // type:function size:0xDC scope:global +AnimatedCars_Bind__10CAnimScene = .text:0x8004D228; // type:function size:0x188 scope:global +AnimatedCars_UnBind__10CAnimScene = .text:0x8004D3B0; // type:function size:0xBC scope:global +GetAnimEntityWithModelName__10CAnimScenePCc = .text:0x8004D46C; // type:function size:0xA4 scope:global +CreateAnimEntities__10CAnimScene = .text:0x8004D510; // type:function size:0xDC scope:global +ClearAnimEntities__10CAnimScene = .text:0x8004D5EC; // type:function size:0xB4 scope:global +RenderAnimSceneEffects__FP5eViewi = .text:0x8004D6A0; // type:function size:0x68 scope:global +__13CAnimSkeleton = .text:0x8004D708; // type:function size:0x28 scope:global +_._13CAnimSkeleton = .text:0x8004D730; // type:function size:0x28 scope:global +InitAnimSkelSlotPool__Fv = .text:0x8004D758; // type:function size:0x5C scope:global +CloseAnimSkelSlotPool__Fv = .text:0x8004D7B4; // type:function size:0x40 scope:global +__nw__13CAnimSkeletonUiPCc = .text:0x8004D7F4; // type:function size:0x3C scope:global +__dl__13CAnimSkeletonPv = .text:0x8004D830; // type:function size:0x54 scope:global +Initialize__13CAnimSkeletonPci = .text:0x8004D884; // type:function size:0x5C scope:global +Cleanup__13CAnimSkeleton = .text:0x8004D8E0; // type:function size:0x54 scope:global +DynamicLoadResolve__13CAnimSkeleton = .text:0x8004D934; // type:function size:0x9C scope:global +GetSkeletonFromList__FUi = .text:0x8004D9D0; // type:function size:0x68 scope:global +LoaderEAGLSkeletons__FP6bChunk = .text:0x8004DA38; // type:function size:0xA0 scope:global +UnloaderEAGLSkeletons__FP6bChunk = .text:0x8004DAD8; // type:function size:0x9C scope:global +__15CAnimWorldScene = .text:0x8004DB74; // type:function size:0x5C scope:global +ClearAllAnimations__15CAnimWorldScene = .text:0x8004DBD0; // type:function size:0x74 scope:global +GetAnimTreeFromHash__15CAnimWorldSceneUi = .text:0x8004DC44; // type:function size:0x2C scope:global +_._15CAnimWorldScene = .text:0x8004DC70; // type:function size:0x94 scope:global +UpdateTime__15CAnimWorldScenef = .text:0x8004DD04; // type:function size:0xA0 scope:global +InstantiateAnimTree__15CAnimWorldSceneP17WorldAnimInstance = .text:0x8004DDA4; // type:function size:0x3D8 scope:global +ControlWorldAnim__FUifbT2 = .text:0x8004E17C; // type:function size:0xB8 scope:global +StartWorldAnimations__Fv = .text:0x8004E234; // type:function size:0x150 scope:global +ResetWorldAnimations__Fv = .text:0x8004E384; // type:function size:0x98 scope:global +CloseAllGarageDoors__Fv = .text:0x8004E41C; // type:function size:0x1CC scope:global +InitAnimControlScenarios__FPP16IControlScenario = .text:0x8004E5E8; // type:function size:0xA8 scope:global +CleanControlScenarios__FPP16IControlScenario = .text:0x8004E690; // type:function size:0x6C scope:global +HandleEventMessage__25GenericNISControlScenarioP20CWorldAnimEntityTreeUiPv = .text:0x8004E6FC; // type:function size:0x178 scope:global +__nw__14CWorldAnimCtrlUiPCc = .text:0x8004E874; // type:function size:0x4C scope:global +__dl__14CWorldAnimCtrlPv = .text:0x8004E8C0; // type:function size:0x3C scope:global +__14CWorldAnimCtrl = .text:0x8004E8FC; // type:function size:0x3C scope:global +_._14CWorldAnimCtrl = .text:0x8004E938; // type:function size:0x4C scope:global +Purge__14CWorldAnimCtrl = .text:0x8004E984; // type:function size:0x34 scope:global +Clear__14CWorldAnimCtrl = .text:0x8004E9B8; // type:function size:0x7C scope:global +SetEvalTime__14CWorldAnimCtrlf = .text:0x8004EA34; // type:function size:0x8C scope:global +Cleanup__14CWorldAnimCtrl = .text:0x8004EAC0; // type:function size:0x7C scope:global +SetLoopRange__14CWorldAnimCtrlUiUi = .text:0x8004EB3C; // type:function size:0x18 scope:global +GetLoopRangeScaledStart__14CWorldAnimCtrl = .text:0x8004EB54; // type:function size:0x44 scope:global +GetLoopRangeScaledEnd__14CWorldAnimCtrl = .text:0x8004EB98; // type:function size:0x44 scope:global +CreateFnAnimFromBank__14CWorldAnimCtrlPQ29EAGL4Anim8AnimBankii = .text:0x8004EBDC; // type:function size:0x80 scope:global +CreateFnAnimFromNamehash__14CWorldAnimCtrlUii = .text:0x8004EC5C; // type:function size:0x78 scope:global +Play__14CWorldAnimCtrl = .text:0x8004ECD4; // type:function size:0xC scope:global +Stop__14CWorldAnimCtrl = .text:0x8004ECE0; // type:function size:0x18 scope:global +Pause__14CWorldAnimCtrl = .text:0x8004ECF8; // type:function size:0xC scope:global +JumpToEndForTrigger__14CWorldAnimCtrl = .text:0x8004ED04; // type:function size:0x1C scope:global +JumpToBeginForTrigger__14CWorldAnimCtrl = .text:0x8004ED20; // type:function size:0x20 scope:global +ApplySpeedModifier__14CWorldAnimCtrlf = .text:0x8004ED40; // type:function size:0x8 scope:global +AdvanceAnimTime__14CWorldAnimCtrlf = .text:0x8004ED48; // type:function size:0x358 scope:global +GetAnimLengthInSeconds__14CWorldAnimCtrl = .text:0x8004F0A0; // type:function size:0x24 scope:global +UpdateAnimPose__14CWorldAnimCtrl = .text:0x8004F0C4; // type:function size:0x13C scope:global +__nw__22WorldAnimInstanceEntryUiPCc = .text:0x8004F200; // type:function size:0x4C scope:global +__dl__22WorldAnimInstanceEntryPv = .text:0x8004F24C; // type:function size:0x3C scope:global +__26WorldAnimInstanceDirectory = .text:0x8004F288; // type:function size:0x50 scope:global +__22WorldAnimInstanceEntry = .text:0x8004F2D8; // type:function size:0x14 scope:global +GetAnimTreeInfo__26WorldAnimInstanceDirectoryUi = .text:0x8004F2EC; // type:function size:0x90 scope:global +AddLoadedAnimTreeInfo__26WorldAnimInstanceDirectoryP23WorldAnimEntityTreeInfo = .text:0x8004F37C; // type:function size:0x74 scope:global +AddLoadedAnimEntityInfo__26WorldAnimInstanceDirectoryP19WorldAnimEntityInfo = .text:0x8004F3F0; // type:function size:0x7C scope:global +RemoveAndDeleteAllAnimTreeInfos__26WorldAnimInstanceDirectory = .text:0x8004F46C; // type:function size:0x94 scope:global +RemoveAndDeleteAnimTreeInfo__26WorldAnimInstanceDirectoryUi = .text:0x8004F500; // type:function size:0x94 scope:global +RemoveEntityInfo__26WorldAnimInstanceDirectoryP19WorldAnimEntityInfo = .text:0x8004F594; // type:function size:0x84 scope:global +AddLoadedAnimInstance__26WorldAnimInstanceDirectoryP17WorldAnimInstance = .text:0x8004F618; // type:function size:0x7C scope:global +RemoveAnimInstance__26WorldAnimInstanceDirectoryP17WorldAnimInstance = .text:0x8004F694; // type:function size:0x84 scope:global +GetNumInstanceEntries__26WorldAnimInstanceDirectory = .text:0x8004F718; // type:function size:0x48 scope:global +GetNumLoadedInstances__26WorldAnimInstanceDirectory = .text:0x8004F760; // type:function size:0x50 scope:global +GetInstanceList__26WorldAnimInstanceDirectory = .text:0x8004F7B0; // type:function size:0x8 scope:global +RemoveAndDeleteAllInstanceEntries__26WorldAnimInstanceDirectory = .text:0x8004F7B8; // type:function size:0x7C scope:global +AddInstanceEntryFromInfo__26WorldAnimInstanceDirectoryP26WorldAnimInstanceEntryInfo = .text:0x8004F834; // type:function size:0xB4 scope:global +RemoveInstanceEntryAndInfo__26WorldAnimInstanceDirectoryP26WorldAnimInstanceEntryInfo = .text:0x8004F8E8; // type:function size:0xD0 scope:global +Init__26WorldAnimInstanceDirectory = .text:0x8004F9B8; // type:function size:0x124 scope:global +DeInit__26WorldAnimInstanceDirectorybT1 = .text:0x8004FADC; // type:function size:0xE8 scope:global +LoaderWorldAnimInstanceEntry__FP6bChunk = .text:0x8004FBC4; // type:function size:0xD4 scope:global +UnloaderWorldAnimInstanceEntry__FP6bChunk = .text:0x8004FC98; // type:function size:0xB0 scope:global +AddSorted__t6bTList1Z6bPNodePFP6bPNodeP6bPNode_iP6bPNode = .text:0x8004FD48; // type:function size:0x90 scope:global +__static_initialization_and_destruction_0 = .text:0x8004FDD8; // type:function size:0x24C scope:local +_._Q29EAGL4Anim17FnDefaultAnimBank = .text:0x80050024; // type:function size:0x34 scope:global +Init__Q29EAGL4Anim17FnDefaultAnimBankPQ29EAGL4Anim8AnimBank = .text:0x80050058; // type:function size:0x8 scope:global +GetNumAnims__CQ29EAGL4Anim17FnDefaultAnimBank = .text:0x80050060; // type:function size:0xC scope:global +GetAnim__Q29EAGL4Anim17FnDefaultAnimBanki = .text:0x8005006C; // type:function size:0x14 scope:global +GetAnimName__CQ29EAGL4Anim17FnDefaultAnimBanki = .text:0x80050080; // type:function size:0x14 scope:global +GetAnim__Q29EAGL4Anim17FnDefaultAnimBankPCc = .text:0x80050094; // type:function size:0x4C scope:global +GetAnimIndex__Q29EAGL4Anim17FnDefaultAnimBankPCc = .text:0x800500E0; // type:function size:0x24 scope:global +GetAttributeDictionary__CQ29EAGL4Anim17FnDefaultAnimBank = .text:0x80050104; // type:function size:0xC scope:global +_IHandle__14INISCarControl = .text:0x80050110; // type:function size:0xC scope:global +_IHandle__4INIS = .text:0x8005011C; // type:function size:0xC scope:global +_IHandle__12INISLISTENER = .text:0x80050128; // type:function size:0xC scope:global +Construct__19NISListenerActivityGQ23Sim5Param = .text:0x80050134; // type:function size:0x48 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z11MPerpBustedZ19NISListenerActivityZ19NISListenerActivityPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x8005017C; // type:function size:0x88 scope:global +_._11IAnimEntity = .text:0x80050204; // type:function size:0x34 scope:global +RenderEffects__11IAnimEntityP5eViewi = .text:0x80050238; // type:function size:0x4 scope:global +GetWorldModel__11IAnimEntity = .text:0x8005023C; // type:function size:0x8 scope:global +GetTypeID__25CBasicCharacterAnimEntity = .text:0x80050244; // type:function size:0x8 scope:global +GetInstanceNameHash__25CBasicCharacterAnimEntity = .text:0x8005024C; // type:function size:0x8 scope:global +GetSpaceNode__25CBasicCharacterAnimEntity = .text:0x80050254; // type:function size:0x8 scope:global +GetWorldModel__25CBasicCharacterAnimEntity = .text:0x8005025C; // type:function size:0x8 scope:global +GetTypeID__15CPropAnimEntity = .text:0x80050264; // type:function size:0x8 scope:global +GetInstanceNameHash__15CPropAnimEntity = .text:0x8005026C; // type:function size:0x8 scope:global +GetSpaceNode__15CPropAnimEntity = .text:0x80050274; // type:function size:0x8 scope:global +GetWorldModel__15CPropAnimEntity = .text:0x8005027C; // type:function size:0x8 scope:global +GetTimeElapsed__10CAnimScene = .text:0x80050284; // type:function size:0x8 scope:global +GetTimeStart__10CAnimScene = .text:0x8005028C; // type:function size:0x8 scope:global +GetTimeTotalLength__10CAnimScene = .text:0x80050294; // type:function size:0x8 scope:global +IsControllingCamera__10CAnimScene = .text:0x8005029C; // type:function size:0x8 scope:global +IsCameraFixingElevation__10CAnimScene = .text:0x800502A4; // type:function size:0x8 scope:global +GetSceneRotationMatrix__10CAnimScene = .text:0x800502AC; // type:function size:0x8 scope:global +GetSceneTransformMatrix__10CAnimScene = .text:0x800502B4; // type:function size:0x8 scope:global +GetTypeID__16CWorldAnimEntity = .text:0x800502BC; // type:function size:0x8 scope:global +GetInstanceNameHash__16CWorldAnimEntity = .text:0x800502C4; // type:function size:0x8 scope:global +GetSpaceNode__16CWorldAnimEntity = .text:0x800502CC; // type:function size:0x8 scope:global +GetWorldModel__16CWorldAnimEntity = .text:0x800502D4; // type:function size:0x8 scope:global +_._25GenericNISControlScenario = .text:0x800502DC; // type:function size:0x34 scope:global +_._16IControlScenario = .text:0x80050310; // type:function size:0x34 scope:global +_GLOBAL_.I.__9CAnimBank = .text:0x80050344; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x80050370; // type:label scope:local +__Q26Attrib5ClassUiRQ26Attrib12ClassPrivate = .text:0x80050370; // type:function size:0x4C scope:global +_._Q26Attrib5Class = .text:0x800503BC; // type:function size:0x84 scope:global +GetDefinition__CQ26Attrib5ClassUi = .text:0x80050440; // type:function size:0x64 scope:global +GetNumDefinitions__CQ26Attrib5Class = .text:0x800504A4; // type:function size:0xC scope:global +GetFirstDefinition__CQ26Attrib5Class = .text:0x800504B0; // type:function size:0x24 scope:global +GetNextDefinition__CQ26Attrib5ClassUi = .text:0x800504D4; // type:function size:0x8C scope:global +GetCollection__CQ26Attrib5ClassUi = .text:0x80050560; // type:function size:0x170 scope:global +GetCollectionWithDefault__CQ26Attrib5ClassUi = .text:0x800506D0; // type:function size:0x2D4 scope:global +GetNumCollections__CQ26Attrib5Class = .text:0x800509A4; // type:function size:0xC scope:global +GetFirstCollection__CQ26Attrib5Class = .text:0x800509B0; // type:function size:0x2C scope:global +GetNextCollection__CQ26Attrib5ClassUi = .text:0x800509DC; // type:function size:0x158 scope:global +SetTableBuffer__Q26Attrib5ClassPvUi = .text:0x80050B34; // type:function size:0x2EC scope:global +GetTableNodeSize__CQ26Attrib5Class = .text:0x80050E20; // type:function size:0x8 scope:global +Delete__CQ26Attrib5Class = .text:0x80050E28; // type:function size:0x110 scope:global +AddCollection__Q26Attrib5ClassPQ26Attrib10Collection = .text:0x80050F38; // type:function size:0x414 scope:global +RemoveCollection__Q26Attrib5ClassPQ26Attrib10Collection = .text:0x8005134C; // type:function size:0x5F8 scope:global +AllocLayout__CQ26Attrib5Class = .text:0x80051944; // type:function size:0x138 scope:global +CloneLayout__CQ26Attrib5ClassPv = .text:0x80051A7C; // type:function size:0xA4 scope:global +CopyLayout__CQ26Attrib5ClassPvT1 = .text:0x80051B20; // type:function size:0x34 scope:global +FreeLayout__CQ26Attrib5ClassPv = .text:0x80051B54; // type:function size:0x74 scope:global +__Q26Attrib10CollectionPQ26Attrib5ClassPCQ26Attrib10CollectionUiUi = .text:0x80051BC8; // type:function size:0x114 scope:global +__Q26Attrib10CollectionRCQ26Attrib18CollectionLoadDataPQ26Attrib5Vault = .text:0x80051CDC; // type:function size:0x454 scope:global +_._Q26Attrib10Collection = .text:0x80052130; // type:function size:0x184 scope:global +GetNode__CQ26Attrib10CollectionUiRPCQ26Attrib10Collection = .text:0x800522B4; // type:function size:0x390 scope:global +Get__CQ26Attrib10CollectionRCQ26Attrib8InstanceUi = .text:0x80052644; // type:function size:0x68 scope:global +GetData__CQ26Attrib10CollectionUiUi = .text:0x800526AC; // type:function size:0x134 scope:global +Count__CQ26Attrib10Collection = .text:0x800527E0; // type:function size:0x18 scope:global +Contains__CQ26Attrib10CollectionUi = .text:0x800527F8; // type:function size:0x35C scope:global +FirstKey__CQ26Attrib10CollectionRb = .text:0x80052B54; // type:function size:0x60 scope:global +NextKey__CQ26Attrib10CollectionUiRb = .text:0x80052BB4; // type:function size:0x390 scope:global +SetParent__Q26Attrib10CollectionUi = .text:0x80052F44; // type:function size:0x98 scope:global +AddAttribute__Q26Attrib10CollectionUiUi = .text:0x80052FDC; // type:function size:0x4C0 scope:global +RemoveAttribute__Q26Attrib10CollectionUi = .text:0x8005349C; // type:function size:0x4B8 scope:global +Clear__Q26Attrib10Collection = .text:0x80053954; // type:function size:0x288 scope:global +Clean__CQ26Attrib10Collection = .text:0x80053BDC; // type:function size:0x300 scope:global +FreeNodeData__Q26Attrib10CollectionbPvT1RCQ26Attrib8TypeDesc = .text:0x80053EDC; // type:function size:0x1D4 scope:global +Delete__CQ26Attrib10Collection = .text:0x800540B0; // type:function size:0x2C scope:global +__Q26Attrib17AttributeIteratorPCQ26Attrib10Collection = .text:0x800540DC; // type:function size:0x50 scope:global +Advance__Q26Attrib17AttributeIterator = .text:0x8005412C; // type:function size:0x58 scope:global +GetExportPolicies__Q26Attrib8Database = .text:0x80054184; // type:function size:0x194 scope:global +__Q26Attrib8DatabaseRQ26Attrib15DatabasePrivate = .text:0x80054318; // type:function size:0x14 scope:global +_._Q26Attrib8Database = .text:0x8005432C; // type:function size:0x7C scope:global +GetClass__CQ26Attrib8DatabaseUi = .text:0x800543A8; // type:function size:0x16C scope:global +GetNumIndexedTypes__CQ26Attrib8Database = .text:0x80054514; // type:function size:0xC scope:global +GetIndexedTypeDesc__CQ26Attrib8DatabaseUs = .text:0x80054520; // type:function size:0x28 scope:global +GetTypeDesc__CQ26Attrib8DatabaseUi = .text:0x80054548; // type:function size:0xDC scope:global +Delete__Q26Attrib8DatabasePCQ26Attrib10Collection = .text:0x80054624; // type:function size:0xB8 scope:global +Delete__Q26Attrib8DatabasePCQ26Attrib5Class = .text:0x800546DC; // type:function size:0xB8 scope:global +CollectGarbage__Q26Attrib8Database = .text:0x80054794; // type:function size:0x278 scope:global +AddClass__Q26Attrib8DatabasePQ26Attrib5Class = .text:0x80054A0C; // type:function size:0x414 scope:global +RemoveClass__Q26Attrib8DatabasePCQ26Attrib5Class = .text:0x80054E20; // type:function size:0x5C0 scope:global +DumpContents__CQ26Attrib8DatabaseUi = .text:0x800553E0; // type:function size:0x4 scope:global +PrepareToAddStrings__6AttribUi = .text:0x800553E4; // type:function size:0x4 scope:global +RegisterString__6AttribPCc = .text:0x800553E8; // type:function size:0x20 scope:global +KeyToString__6AttribUi = .text:0x80055408; // type:function size:0x8 scope:global +StringToKey__6AttribPCc = .text:0x80055410; // type:function size:0x20 scope:global +hash32__6AttribPCUcUiUi = .text:0x80055430; // type:function size:0x2E8 scope:local +StringHash32__6AttribPCc = .text:0x80055718; // type:function size:0x5C scope:global +hash64__6AttribPCUcUiUx = .text:0x80055774; // type:function size:0x1140 scope:local +StringHash64__6AttribPCc = .text:0x800568B4; // type:function size:0x68 scope:global +__Q26Attrib8InstancePCQ26Attrib10CollectionUiPQ33UTL3COM8IUnknown = .text:0x8005691C; // type:function size:0x54 scope:global +__Q26Attrib8InstanceRCQ26Attrib7RefSpecUiPQ33UTL3COM8IUnknown = .text:0x80056970; // type:function size:0x88 scope:global +__Q26Attrib8InstanceRCQ26Attrib8Instance = .text:0x800569F8; // type:function size:0x68 scope:global +__as__Q26Attrib8InstanceRCQ26Attrib8Instance = .text:0x80056A60; // type:function size:0x50 scope:global +_._Q26Attrib8Instance = .text:0x80056AB0; // type:function size:0xB0 scope:global +GetClass__CQ26Attrib8Instance = .text:0x80056B60; // type:function size:0x28 scope:global +GetCollection__CQ26Attrib8Instance = .text:0x80056B88; // type:function size:0x18 scope:global +GetParent__CQ26Attrib8Instance = .text:0x80056BA0; // type:function size:0x48 scope:global +SetParent__Q26Attrib8InstanceUi = .text:0x80056BE8; // type:function size:0x38 scope:global +Get__CQ26Attrib8InstanceUi = .text:0x80056C20; // type:function size:0x54 scope:global +Lookup__CQ26Attrib8InstanceUiRQ26Attrib9Attribute = .text:0x80056C74; // type:function size:0x6C scope:global +Contains__CQ26Attrib8InstanceUi = .text:0x80056CE0; // type:function size:0x34 scope:global +Iterator__CQ26Attrib8Instance = .text:0x80056D14; // type:function size:0x34 scope:global +LocalAttribCount__CQ26Attrib8Instance = .text:0x80056D48; // type:function size:0x34 scope:global +Add__Q26Attrib8InstanceUiUi = .text:0x80056D7C; // type:function size:0x40 scope:global +Remove__Q26Attrib8InstanceUi = .text:0x80056DBC; // type:function size:0x4C scope:global +Modify__Q26Attrib8InstanceUiUi = .text:0x80056E08; // type:function size:0x64 scope:global +ModifyInternal__Q26Attrib8InstanceUiUiUi = .text:0x80056E6C; // type:function size:0x100 scope:global +Unmodify__Q26Attrib8Instance = .text:0x80056F6C; // type:function size:0xA0 scope:global +GenerateUniqueKey__CQ26Attrib8InstancePCcb = .text:0x8005700C; // type:function size:0x48 scope:global +GUKeyInternal__CQ26Attrib8InstanceUiPCcb = .text:0x80057054; // type:function size:0xB8 scope:global +Change__Q26Attrib8InstancePCQ26Attrib10Collection = .text:0x8005710C; // type:function size:0xCC scope:global +Change__Q26Attrib8InstanceRCQ26Attrib7RefSpec = .text:0x800571D8; // type:function size:0x3C scope:global +ChangeWithDefault__Q26Attrib8InstanceRCQ26Attrib7RefSpec = .text:0x80057214; // type:function size:0x3C scope:global +GetAttributePointer__CQ26Attrib8InstanceUiUi = .text:0x80057250; // type:function size:0x34 scope:global +StringToAssetID__6AttribPCc = .text:0x80057284; // type:function size:0x20 scope:global +StringToTypeID__6AttribPCc = .text:0x800572A4; // type:function size:0x20 scope:global +__Q26Attrib13ExportManagerUi = .text:0x800572C4; // type:function size:0x8C scope:global +AddExportPolicy__Q26Attrib13ExportManagerUiPQ26Attrib13IExportPolicy = .text:0x80057350; // type:function size:0x3C scope:global +Seal__Q26Attrib13ExportManager = .text:0x8005738C; // type:function size:0x30 scope:global +GetExportPolicyByIndex__CQ26Attrib13ExportManagerUi = .text:0x800573BC; // type:function size:0x28 scope:global +GetExportPolicyTypeByIndex__CQ26Attrib13ExportManagerUi = .text:0x800573E4; // type:function size:0x24 scope:global +GetExportPolicyIndex__CQ26Attrib13ExportManagerUi = .text:0x80057408; // type:function size:0x84 scope:global +__Q26Attrib5VaultRQ26Attrib13ExportManagerUiPvUiPQ26Attrib17IGarbageCollector = .text:0x8005748C; // type:function size:0x304 scope:global +_._Q26Attrib5Vault = .text:0x80057790; // type:function size:0x150 scope:global +GetDependencyList__CQ26Attrib5VaultRUi = .text:0x800578E0; // type:function size:0x18 scope:global +IsAssetDependency__CQ26Attrib5VaultUi = .text:0x800578F8; // type:function size:0x24 scope:global +ResolveDependency__Q26Attrib5VaultUiPvUiPQ26Attrib17IGarbageCollector = .text:0x8005791C; // type:function size:0x50 scope:global +HasUnresolvedDependency__CQ26Attrib5Vault = .text:0x8005796C; // type:function size:0x18 scope:global +Initialize__Q26Attrib5Vault = .text:0x80057984; // type:function size:0x24C scope:global +Clean__Q26Attrib5Vault = .text:0x80057BD0; // type:function size:0xB4 scope:global +Deinitialize__Q26Attrib5Vault = .text:0x80057C84; // type:function size:0x150 scope:global +Export__Q26Attrib5VaultRCUiPvUi = .text:0x80057DD4; // type:function size:0x60 scope:global +CountExports__CQ26Attrib5Vault = .text:0x80057E34; // type:function size:0x8 scope:global +FindExportID__CQ26Attrib5VaultUi = .text:0x80057E3C; // type:function size:0x60 scope:global +GetExportType__CQ26Attrib5VaultUi = .text:0x80057E9C; // type:function size:0x64 scope:global +GetExportData__CQ26Attrib5VaultUi = .text:0x80057F00; // type:function size:0x3C scope:global +ExportsCleared__CQ26Attrib5Vault = .text:0x80057F3C; // type:function size:0x44 scope:global +AllocationAccounting__6AttribUib = .text:0x80057F80; // type:function size:0x48 scope:global +FindCollection__6AttribUiUi = .text:0x80057FC8; // type:function size:0x54 scope:global +FindCollectionWithDefault__6AttribUiUi = .text:0x8005801C; // type:function size:0x54 scope:global +GetCollectionKey__6AttribPCQ26Attrib10Collection = .text:0x80058070; // type:function size:0x18 scope:global +GetCollectionParent__6AttribPCQ26Attrib10Collection = .text:0x80058088; // type:function size:0x18 scope:global +StringToLowerCaseKey__6AttribPCc = .text:0x800580A0; // type:function size:0x80 scope:global +AdjustHashTableSize__6AttribUi = .text:0x80058120; // type:function size:0x4 scope:global +GetLength__CQ26Attrib7Private = .text:0x80058124; // type:function size:0x8 scope:global +__Q26Attrib7RefSpecRCQ26Attrib7RefSpec = .text:0x8005812C; // type:function size:0x30 scope:global +__as__Q26Attrib7RefSpecRCQ26Attrib7RefSpec = .text:0x8005815C; // type:function size:0x60 scope:global +SetCollection__Q26Attrib7RefSpecPCQ26Attrib10Collection = .text:0x800581BC; // type:function size:0x70 scope:global +GetClass__CQ26Attrib7RefSpec = .text:0x8005822C; // type:function size:0x50 scope:global +GetCollection__CQ26Attrib7RefSpec = .text:0x8005827C; // type:function size:0x7C scope:global +GetCollectionWithDefault__CQ26Attrib7RefSpec = .text:0x800582F8; // type:function size:0x6C scope:global +Clean__CQ26Attrib7RefSpec = .text:0x80058364; // type:function size:0x6C scope:global +__Q26Attrib9Attribute = .text:0x800583D0; // type:function size:0x1C scope:global +__Q26Attrib9AttributeRCQ26Attrib9Attribute = .text:0x800583EC; // type:function size:0x38 scope:global +__Q26Attrib9AttributeRCQ26Attrib8InstancePCQ26Attrib10CollectionPQ26Attrib4Node = .text:0x80058424; // type:function size:0xA4 scope:global +_._Q26Attrib9Attribute = .text:0x800584C8; // type:function size:0x88 scope:global +__as__Q26Attrib9AttributeRCQ26Attrib9Attribute = .text:0x80058550; // type:function size:0x50 scope:global +IsValid__CQ26Attrib9Attribute = .text:0x800585A0; // type:function size:0x18 scope:global +GetKey__CQ26Attrib9Attribute = .text:0x800585B8; // type:function size:0x58 scope:global +GetType__CQ26Attrib9Attribute = .text:0x80058610; // type:function size:0x44 scope:global +GetCollection__CQ26Attrib9Attribute = .text:0x80058654; // type:function size:0x8 scope:global +GetLength__CQ26Attrib9Attribute = .text:0x8005865C; // type:function size:0xAC scope:global +GetInternalPointer__CQ26Attrib9AttributeUi = .text:0x80058708; // type:function size:0x13C scope:global +__lower_bound__H4ZPCQ26Attrib10DefinitionZQ26Attrib10DefinitionZQ24_STLt4less1ZQ26Attrib10DefinitionZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80058844; // type:function size:0x48 scope:global +ScanForValidKey__H1ZQ36Attrib12ClassPrivate17CollectionHashMap_6AttribRCX01Ui_Ui = .text:0x8005888C; // type:function size:0xC0 scope:global +ScanForValidKey__H1ZQ26Attrib7HashMap_6AttribRCX01Ui_Ui = .text:0x8005894C; // type:function size:0x12C scope:global +_M_erase__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescPQ24_STLt13_Rb_tree_node1ZQ26Attrib8TypeDesc = .text:0x80058A78; // type:function size:0x6C scope:global +clear__Q24_STLt10_List_base2ZPCQ26Attrib10CollectionZQ24_STLt9allocator1ZPCQ26Attrib10Collection = .text:0x80058AE4; // type:function size:0x7C scope:global +clear__Q24_STLt10_List_base2ZPCQ26Attrib5ClassZQ24_STLt9allocator1ZPCQ26Attrib5Class = .text:0x80058B60; // type:function size:0x7C scope:global +reserve__Q24_STLt6vector2ZPCQ26Attrib8TypeDescZQ24_STLt9allocator1ZPCQ26Attrib8TypeDescUi = .text:0x80058BDC; // type:function size:0x120 scope:global +_M_insert__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescPQ24_STL18_Rb_tree_node_baseT1RCQ26Attrib8TypeDescT1 = .text:0x80058CFC; // type:function size:0x164 scope:global +insert_unique__Q24_STLt8_Rb_tree5ZQ26Attrib8TypeDescZQ26Attrib8TypeDescZQ24_STLt9_Identity1ZQ26Attrib8TypeDescZQ24_STLt4less1ZQ26Attrib8TypeDescZQ24_STLt9allocator1ZQ26Attrib8TypeDescRCQ26Attrib8TypeDesc = .text:0x80058E60; // type:function size:0x118 scope:global +find__H2ZQ24_STLt14_List_iterator2ZPCQ26Attrib10CollectionZQ24_STLt16_Nonconst_traits1ZPCQ26Attrib10CollectionZPCQ26Attrib10Collection_4_STLX01X01RCX11_X01 = .text:0x80058F78; // type:function size:0x60 scope:global +find__H2ZQ24_STLt14_List_iterator2ZPCQ26Attrib5ClassZQ24_STLt16_Nonconst_traits1ZPCQ26Attrib5ClassZPCQ26Attrib5Class_4_STLX01X01RCX11_X01 = .text:0x80058FD8; // type:function size:0x60 scope:global +__less__H1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x80059038; // type:function size:0xC scope:global +__adjust_heap__H4ZPQ36Attrib13ExportManager16ExportPolicyPairZiZQ36Attrib13ExportManager16ExportPolicyPairZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X11X11X21X31_v = .text:0x80059044; // type:function size:0x11C scope:global +make_heap__H2ZPQ36Attrib13ExportManager16ExportPolicyPairZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X01X11_v = .text:0x80059160; // type:function size:0x94 scope:global +pop_heap__H2ZPQ36Attrib13ExportManager16ExportPolicyPairZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X01X11_v = .text:0x800591F4; // type:function size:0x78 scope:global +__partial_sort__H3ZPQ36Attrib13ExportManager16ExportPolicyPairZQ36Attrib13ExportManager16ExportPolicyPairZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X01X01PX11X21_v = .text:0x8005926C; // type:function size:0xD8 scope:global +partial_sort__H2ZPQ36Attrib13ExportManager16ExportPolicyPairZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X01X01X11_v = .text:0x80059344; // type:function size:0x30 scope:global +__unguarded_partition__H3ZPQ36Attrib13ExportManager16ExportPolicyPairZQ36Attrib13ExportManager16ExportPolicyPairZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X01X11X21_X01 = .text:0x80059374; // type:function size:0x7C scope:global +__introsort_loop__H4ZPQ36Attrib13ExportManager16ExportPolicyPairZQ36Attrib13ExportManager16ExportPolicyPairZiZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X01PX11X21X31_v = .text:0x800593F0; // type:function size:0x134 scope:global +__unguarded_linear_insert__H3ZPQ36Attrib13ExportManager16ExportPolicyPairZQ36Attrib13ExportManager16ExportPolicyPairZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X11X21_v = .text:0x80059524; // type:function size:0x38 scope:global +__insertion_sort__H2ZPQ36Attrib13ExportManager16ExportPolicyPairZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X01X11_v = .text:0x8005955C; // type:function size:0xD0 scope:global +__unguarded_insertion_sort_aux__H3ZPQ36Attrib13ExportManager16ExportPolicyPairZQ36Attrib13ExportManager16ExportPolicyPairZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X01PX11X21_v = .text:0x8005962C; // type:function size:0x68 scope:global +__final_insertion_sort__H2ZPQ36Attrib13ExportManager16ExportPolicyPairZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X01X11_v = .text:0x80059694; // type:function size:0x7C scope:global +sort__H1ZPQ36Attrib13ExportManager16ExportPolicyPair_4_STLX01X01_v = .text:0x80059710; // type:function size:0xA0 scope:global +__lower_bound__H4ZPQ36Attrib13ExportManager16ExportPolicyPairZQ36Attrib13ExportManager16ExportPolicyPairZQ24_STLt4less1ZQ36Attrib13ExportManager16ExportPolicyPairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x800597B0; // type:function size:0x48 scope:global +find__H2ZPUiZUi_4_STLX01X01RCX11_X01 = .text:0x800597F8; // type:function size:0xB0 scope:global +__static_initialization_and_destruction_0 = .text:0x800598A8; // type:function size:0xC8 scope:local +GetFlag__CQ26Attrib10DefinitionUi = .text:0x80059970; // type:function size:0x18 scope:global +GetPad__CQ26Attrib5Array = .text:0x80059988; // type:function size:0x18 scope:global +GetData__CQ26Attrib5ArrayUi = .text:0x800599A0; // type:function size:0x7C scope:global +SetData__Q26Attrib5ArrayUiPv = .text:0x80059A1C; // type:function size:0x184 scope:global +__Q26Attrib5ArrayUiUiUiUib = .text:0x80059BA0; // type:function size:0x1A0 scope:global +_._Q26Attrib5Array = .text:0x80059D40; // type:function size:0x9C scope:global +__nw__Q26Attrib5ArrayUiPv = .text:0x80059DDC; // type:function size:0x8 scope:global +IsLaidOut__CQ26Attrib4Node = .text:0x80059DE4; // type:function size:0x18 scope:global +RebuildTable__Q26Attrib7HashMapUi = .text:0x80059DFC; // type:function size:0x1D0 scope:global +Transfer__Q26Attrib7HashMapRQ26Attrib4Node = .text:0x80059FCC; // type:function size:0x12C scope:global +UpdateSearchLength__Q26Attrib7HashMapUiUi = .text:0x8005A0F8; // type:function size:0x2B8 scope:global +PreFlightAdd__Q26Attrib7HashMapUiUiRUi = .text:0x8005A3B0; // type:function size:0xD4 scope:global +PostFlightAdd__Q26Attrib7HashMapUiUi = .text:0x8005A484; // type:function size:0x58 scope:global +GetKey__CQ26Attrib10Collection = .text:0x8005A4DC; // type:function size:0x8 scope:global +_._Q36Attrib12ClassPrivate17CollectionHashMap = .text:0x8005A4E4; // type:function size:0x11C scope:global +RebuildTable__t10VecHashMap5ZUiZQ26Attrib10CollectionZQ36Attrib5Class11TablePolicyb1Ui40Ui = .text:0x8005A600; // type:function size:0x2B4 scope:global +RebuildTable__t10VecHashMap5ZUiZQ26Attrib5ClassZQ36Attrib5Class11TablePolicyb0Ui16Ui = .text:0x8005A8B4; // type:function size:0x2B4 scope:global +Initialize__Q26Attrib20DatabaseExportPolicyRQ26Attrib5VaultRCUiT2PCcPvUi = .text:0x8005AB68; // type:function size:0x9C4 scope:global +IsReferenced__Q26Attrib20DatabaseExportPolicyRCQ26Attrib5VaultRCUiT2 = .text:0x8005B52C; // type:function size:0x64 scope:global +Clean__Q26Attrib20DatabaseExportPolicyRQ26Attrib5VaultRCUiT2 = .text:0x8005B590; // type:function size:0x4 scope:global +Deinitialize__Q26Attrib20DatabaseExportPolicyRQ26Attrib5VaultRCUiT2 = .text:0x8005B594; // type:function size:0x88 scope:global +Initialize__Q26Attrib17ClassExportPolicyRQ26Attrib5VaultRCUiT2PCcPvUi = .text:0x8005B61C; // type:function size:0x234 scope:global +IsReferenced__Q26Attrib17ClassExportPolicyRCQ26Attrib5VaultRCUiT2 = .text:0x8005B850; // type:function size:0x60 scope:global +Clean__Q26Attrib17ClassExportPolicyRQ26Attrib5VaultRCUiT2 = .text:0x8005B8B0; // type:function size:0x4 scope:global +Deinitialize__Q26Attrib17ClassExportPolicyRQ26Attrib5VaultRCUiT2 = .text:0x8005B8B4; // type:function size:0x90 scope:global +Initialize__Q26Attrib22CollectionExportPolicyRQ26Attrib5VaultRCUiT2PCcPvUi = .text:0x8005B944; // type:function size:0xCC scope:global +IsReferenced__Q26Attrib22CollectionExportPolicyRCQ26Attrib5VaultRCUiT2 = .text:0x8005BA10; // type:function size:0x60 scope:global +Clean__Q26Attrib22CollectionExportPolicyRQ26Attrib5VaultRCUiT2 = .text:0x8005BA70; // type:function size:0x4C scope:global +Deinitialize__Q26Attrib22CollectionExportPolicyRQ26Attrib5VaultRCUiT2 = .text:0x8005BABC; // type:function size:0x90 scope:global +__Q36Attrib12ClassPrivate17CollectionHashMapUi = .text:0x8005BB4C; // type:function size:0x2D0 scope:global +__Q26Attrib9TypeTable = .text:0x8005BE1C; // type:function size:0x78 scope:global +_._Q26Attrib15DatabasePrivate = .text:0x8005BE94; // type:function size:0x19C scope:global +_._Q26Attrib10ClassTable = .text:0x8005C030; // type:function size:0xCC scope:global +_._Q26Attrib9TypeTable = .text:0x8005C0FC; // type:function size:0xD0 scope:global +_GLOBAL_.I.__Q26Attrib5ClassUiRQ26Attrib12ClassPrivate = .text:0x8005C1CC; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x8005C1F8; // type:label scope:local +bCalculateCrc32__FPCviUi = .text:0x8005C1F8; // type:function size:0x7C scope:global +bWareInit__Fv = .text:0x8005C274; // type:function size:0x28 scope:global +bSetUserPutStringFunction__FPFiPCc_b = .text:0x8005C29C; // type:function size:0xC scope:global +HandleUserPutString__FiPCc = .text:0x8005C2A8; // type:function size:0x60 scope:global +bReleasePutString__FcPCc = .text:0x8005C308; // type:function size:0x50 scope:global +bBreak__Fv = .text:0x8005C358; // type:function size:0x34 scope:global +bIsValidPointer__FPvi = .text:0x8005C38C; // type:function size:0x14 scope:global +bGetTickerDifference__FUi = .text:0x8005C3A0; // type:function size:0x38 scope:global +bGetFixTickerDifference__FUiUi = .text:0x8005C3D8; // type:function size:0x38 scope:global +bInitTicker__Ff = .text:0x8005C410; // type:function size:0x4 scope:global +bGetTicker__Fv = .text:0x8005C414; // type:function size:0x20 scope:global +bGetTickerDifference__FUiUi = .text:0x8005C434; // type:function size:0x60 scope:global +Create__6bMutex = .text:0x8005C494; // type:function size:0x20 scope:global +Destroy__6bMutex = .text:0x8005C4B4; // type:function size:0x20 scope:global +Lock__6bMutex = .text:0x8005C4D4; // type:function size:0x20 scope:global +Unlock__6bMutex = .text:0x8005C4F4; // type:function size:0x20 scope:global +bFunkCallASync__FPCciPCvi = .text:0x8005C514; // type:function size:0xC scope:global +bFunkCallSync__FPCciPCviPvi = .text:0x8005C520; // type:function size:0x10 scope:global +bFunkDoesServerExist__FPCc = .text:0x8005C530; // type:function size:0x68 scope:global +bRefreshTweaker__Fv = .text:0x8005C598; // type:function size:0x34 scope:global +GetNode__5bListi = .text:0x8005C5CC; // type:function size:0x28 scope:global +TraversebList__5bListP5bNode = .text:0x8005C5F4; // type:function size:0x40 scope:global +Sort__5bListPFP5bNodeP5bNode_i = .text:0x8005C634; // type:function size:0xAC scope:global +MergeSort__5bListPFP5bNodeP5bNode_i = .text:0x8005C6E0; // type:function size:0x194 scope:global +bPListInit__Fi = .text:0x8005C874; // type:function size:0x64 scope:global +bPListClose__Fv = .text:0x8005C8D8; // type:function size:0x58 scope:global +Malloc__6bPNode = .text:0x8005C930; // type:function size:0x44 scope:global +Free__6bPNodePv = .text:0x8005C974; // type:function size:0x40 scope:global +bChunkLoaderFunctionNull__FP6bChunk = .text:0x8005C9B4; // type:function size:0x10 scope:global +__12bChunkLoaderUiPFP6bChunk_iT2 = .text:0x8005C9C4; // type:function size:0x54 scope:global +FindLoader__12bChunkLoaderUi = .text:0x8005CA18; // type:function size:0x4C scope:global +PlatformEndianSwap__16bChunkCarpHeader = .text:0x8005CA64; // type:function size:0x3C scope:global +bEndianSwap64__FPv = .text:0x8005CAA0; // type:function size:0x70 scope:global +bEndianSwap32__FPv = .text:0x8005CB10; // type:function size:0x24 scope:global +bEndianSwap16__FPv = .text:0x8005CB34; // type:function size:0x14 scope:global +bPlatEndianSwap__FP8bVector2 = .text:0x8005CB48; // type:function size:0x34 scope:global +bPlatEndianSwap__FP8bVector3 = .text:0x8005CB7C; // type:function size:0x3C scope:global +bPlatEndianSwap__FP8bVector4 = .text:0x8005CBB8; // type:function size:0x44 scope:global +bPlatEndianSwap__FP8bMatrix4 = .text:0x8005CBFC; // type:function size:0x44 scope:global +bDiv__Fii = .text:0x8005CC40; // type:function size:0x50 scope:global +bSetRandomSeed__FUiPUi = .text:0x8005CC90; // type:function size:0x28 scope:global +bRandom__FiPUi = .text:0x8005CCB8; // type:function size:0x44 scope:global +bRandom__FfPUi = .text:0x8005CCFC; // type:function size:0x68 scope:global +bRandom__Fi = .text:0x8005CD64; // type:function size:0x28 scope:global +bRandom__Ff = .text:0x8005CD8C; // type:function size:0x28 scope:global +bFMod__Fff = .text:0x8005CDB4; // type:function size:0x6C scope:global +bSin__FUs = .text:0x8005CE20; // type:function size:0xCC scope:global +bSin__Ff = .text:0x8005CEEC; // type:function size:0x3C scope:global +bCos__FUs = .text:0x8005CF28; // type:function size:0x28 scope:global +bSinCos__FPfT0Us = .text:0x8005CF50; // type:function size:0x150 scope:global +bASin__Ff = .text:0x8005D0A0; // type:function size:0x150 scope:global +bATan__Fff = .text:0x8005D1F0; // type:function size:0x148 scope:global +bFixATan__Fi = .text:0x8005D338; // type:function size:0xCC scope:global +bFixATan__Fii = .text:0x8005D404; // type:function size:0xAC scope:global +bConvertToBond__FR8bMatrix4RC8bMatrix4 = .text:0x8005D4B0; // type:function size:0x98 scope:global +bConvertFromBond__FR8bMatrix4RC8bMatrix4 = .text:0x8005D548; // type:function size:0x98 scope:global +bMathTimingTest__Fv = .text:0x8005D5E0; // type:function size:0x4 scope:global +bInvertMatrix__FP8bMatrix4PC8bMatrix4 = .text:0x8005D5E4; // type:function size:0x20 scope:global +fDeterminant__FP8bMatrix4 = .text:0x8005D604; // type:function size:0x1C0 scope:global +fInvertMatrix__FP8bMatrix4T0 = .text:0x8005D7C4; // type:function size:0x680 scope:global +hermite_basis__FP8bMatrix4T0ffff = .text:0x8005DE44; // type:function size:0x19C scope:global +hermite_parameter__FP8bVector4PC8bMatrix4f = .text:0x8005DFE0; // type:function size:0x44 scope:global +bMulMatrix__FP8bMatrix4PC8bMatrix4T1 = .text:0x8005E024; // type:function size:0x2C scope:global +bMulMatrix__FP8bVector4PC8bMatrix4PC8bVector4 = .text:0x8005E050; // type:function size:0x20 scope:global +bMulMatrix__FP8bVector3PC8bMatrix4PC8bVector3 = .text:0x8005E070; // type:function size:0x20 scope:global +bTransposeMatrix__FP8bMatrix4PC8bMatrix4 = .text:0x8005E090; // type:function size:0x38 scope:global +bMemCpy = .text:0x8005E0C8; // type:function size:0xA0 scope:global +bMemSet = .text:0x8005E168; // type:function size:0xCC scope:global +bMemCmp = .text:0x8005E234; // type:function size:0x40 scope:global +bOverlappedMemCpy = .text:0x8005E274; // type:function size:0x84 scope:global +bPrintfSetLocaleInfo__Fccc = .text:0x8005E2F8; // type:function size:0x18 scope:global +bFlushBufferedPutChar__Fv = .text:0x8005E310; // type:function size:0x60 scope:global +bBufferedPutChar__Fc = .text:0x8005E370; // type:function size:0x48 scope:global +bReleasePrintf__FPCce = .text:0x8005E3B8; // type:function size:0xB0 scope:global +bVPrintf__FPCcP13__va_list_tag = .text:0x8005E468; // type:function size:0x44 scope:global +bSPrintf__FPcPCce = .text:0x8005E4AC; // type:function size:0x94 scope:global +bSNPrintf__FPciPCce = .text:0x8005E540; // type:function size:0x90 scope:global +bVSPrintf__FPcPCcP13__va_list_tag = .text:0x8005E5D0; // type:function size:0x94 scope:global +bVSNPrintf__FPciPCcP13__va_list_tag = .text:0x8005E664; // type:function size:0x50 scope:global +_bOutput__FP11bOutputInfoPCcP13__va_list_tag = .text:0x8005E6B4; // type:function size:0x143C scope:global +_stuff_char__FP11bOutputInfocPi = .text:0x8005FAF0; // type:function size:0x78 scope:global +_stuff_str__FP11bOutputInfoPCciPi = .text:0x8005FB68; // type:function size:0xC4 scope:global +Slerp__C11bQuaternionR11bQuaternionRC11bQuaternionf = .text:0x8005FC2C; // type:function size:0x1B8 scope:global +bMatrixToQuaternion__FR11bQuaternionRC8bMatrix4 = .text:0x8005FDE4; // type:function size:0x290 scope:global +bNewSlotPool__FiiPCci = .text:0x80060074; // type:function size:0x40 scope:global +bDeleteSlotPool__FP8SlotPool = .text:0x800600B4; // type:function size:0x2C scope:global +bMalloc__FP8SlotPool = .text:0x800600E0; // type:function size:0x20 scope:global +bOMalloc__FP8SlotPool = .text:0x80060100; // type:function size:0x20 scope:global +bFree__FP8SlotPoolPv = .text:0x80060120; // type:function size:0x20 scope:global +bIsSlotPoolFull__FP8SlotPool = .text:0x80060140; // type:function size:0x18 scope:global +bCountFreeSlots__FP8SlotPool = .text:0x80060158; // type:function size:0x10 scope:global +bCountTotalSlots__FP8SlotPool = .text:0x80060168; // type:function size:0x8 scope:global +NewSlotPool__8SlotPooliiPCci = .text:0x80060170; // type:function size:0x88 scope:global +DeleteSlotPool__8SlotPoolP8SlotPool = .text:0x800601F8; // type:function size:0x28 scope:global +FlushSlotPool__8SlotPool = .text:0x80060220; // type:function size:0x70 scope:global +ExpandSlotPool__8SlotPooli = .text:0x80060290; // type:function size:0xA8 scope:global +GetSlotNumber__8SlotPoolPv = .text:0x80060338; // type:function size:0x50 scope:global +GetSlot__8SlotPooli = .text:0x80060388; // type:function size:0x48 scope:global +GetAllocatedSlot__8SlotPooli = .text:0x800603D0; // type:function size:0xC0 scope:global +CleanupExpandedSlotPools__8SlotPool = .text:0x80060490; // type:function size:0x144 scope:global +Malloc__8SlotPool = .text:0x800605D4; // type:function size:0xAC scope:global +FastMalloc__8SlotPool = .text:0x80060680; // type:function size:0x38 scope:global +Free__8SlotPoolPv = .text:0x800606B8; // type:function size:0x1C scope:global +Malloc__8SlotPooliPPv = .text:0x800606D4; // type:function size:0x150 scope:global +__15SlotPoolManager = .text:0x80060824; // type:function size:0x1C scope:global +NewSlotPool__15SlotPoolManageriiPCci = .text:0x80060840; // type:function size:0x74 scope:global +DeleteSlotPool__15SlotPoolManagerP8SlotPool = .text:0x800608B4; // type:function size:0x94 scope:global +CleanupExpandedSlotPools__15SlotPoolManager = .text:0x80060948; // type:function size:0x44 scope:global +bDistBetween__FPC8bVector3T0 = .text:0x8006098C; // type:function size:0x8C scope:global +bNormalize__FP8bVector2PC8bVector2 = .text:0x80060A18; // type:function size:0xA8 scope:global +bNormalize__FP8bVector3PC8bVector3 = .text:0x80060AC0; // type:function size:0xCC scope:global +bNormalize__FP8bVector3PC8bVector3f = .text:0x80060B8C; // type:function size:0xC8 scope:global +bNormalize__FP8bVector4PC8bVector4 = .text:0x80060C54; // type:function size:0xD4 scope:global +bScaleAdd__FP8bVector2PC8bVector2T1f = .text:0x80060D28; // type:function size:0x28 scope:global +bScaleAdd__FP8bVector3PC8bVector3T1f = .text:0x80060D50; // type:function size:0x38 scope:global +bScaleAdd__FP8bVector4PC8bVector4T1f = .text:0x80060D88; // type:function size:0x48 scope:global +bEqual__FPC8bVector2T0f = .text:0x80060DD0; // type:function size:0x44 scope:global +bCross__FP8bVector3PC8bVector3T1 = .text:0x80060E14; // type:function size:0x44 scope:global +bInitializeBoundingBox__FP8bVector2T0 = .text:0x80060E58; // type:function size:0x24 scope:global +bExpandBoundingBox__FP8bVector2T0PC8bVector2 = .text:0x80060E7C; // type:function size:0x4C scope:global +bBoundingBoxIsInside__FPC8bVector2N20f = .text:0x80060EC8; // type:function size:0x5C scope:global +bBoundingBoxOverlapping__FPC8bVector2N30 = .text:0x80060F24; // type:function size:0x5C scope:global +bInitializeBoundingBox__FP8bVector3T0 = .text:0x80060F80; // type:function size:0x2C scope:global +bInitializeBoundingBox__FP8bVector3T0PC8bVector3 = .text:0x80060FAC; // type:function size:0x28 scope:global +bExpandBoundingBox__FP8bVector3T0PC8bVector3f = .text:0x80060FD4; // type:function size:0xA0 scope:global +bExpandBoundingBox__FP8bVector3T0PC8bVector3T2 = .text:0x80061074; // type:function size:0x94 scope:global +bBoundingBoxIsInside__FPC8bVector3N20f = .text:0x80061108; // type:function size:0x80 scope:global +bDistToLine__FPC8bVector2N20 = .text:0x80061188; // type:function size:0x1FC scope:global +bIsPointInPoly__FPC8bVector2T0i = .text:0x80061384; // type:function size:0xBC scope:global +bIsPointInPoly__FPC8bVector2PC8bVector3i = .text:0x80061440; // type:function size:0xBC scope:global +bFunkGameCube__FPCcUcPCvl = .text:0x800614FC; // type:function size:0x4 scope:global +GetAlignmentAdjustTop__Fiii = .text:0x80061500; // type:function size:0x20 scope:global +GetAlignmentAdjustBottom__Fiii = .text:0x80061520; // type:function size:0x1C scope:global +Init__10MemoryPoolPviPCc = .text:0x8006153C; // type:function size:0xB4 scope:global +Close__10MemoryPool = .text:0x800615F0; // type:function size:0x58 scope:global +AddMemory__10MemoryPoolPvi = .text:0x80061648; // type:function size:0x38 scope:global +FreeMemory__10MemoryPoolPviPCc = .text:0x80061680; // type:function size:0x80 scope:global +AddFreeMemory__10MemoryPoolPviPCc = .text:0x80061700; // type:function size:0x170 scope:global +AllocateMemory__10MemoryPooliiiiiPi = .text:0x80061870; // type:function size:0x2EC scope:global +GetAmountFree__10MemoryPool = .text:0x80061B5C; // type:function size:0x60 scope:global +GetLargestFreeBlock__10MemoryPool = .text:0x80061BBC; // type:function size:0x68 scope:global +VerifyPoolIntegrity__10MemoryPoolb = .text:0x80061C24; // type:function size:0x1E4 scope:global +CheckFlipMemoryByAddress__FP16AllocationHeaderT0 = .text:0x80061E08; // type:function size:0x20 scope:global +CheckFlipMemoryByAllocationNumber__FP16AllocationHeaderT0 = .text:0x80061E28; // type:function size:0x8 scope:global +PrintAllocationsByAddress__10MemoryPoolii = .text:0x80061E30; // type:function size:0x120 scope:global +PrintAllocations__10MemoryPoolii = .text:0x80061F50; // type:function size:0xD8 scope:global +GetAllocations__10MemoryPoolPPvi = .text:0x80062028; // type:function size:0x74 scope:global +CheckFancyStompDetector__10MemoryPoolPCvi = .text:0x8006209C; // type:function size:0x8 scope:global +TraceNewPool__10MemoryPool = .text:0x800620A4; // type:function size:0x70 scope:global +TraceDeletePool__10MemoryPool = .text:0x80062114; // type:function size:0x38 scope:global +TraceFreeMemory__10MemoryPoolPvi = .text:0x8006214C; // type:function size:0x6C scope:global +bGetFreeMemoryPoolNum__Fv = .text:0x800621B8; // type:function size:0x58 scope:global +bReserveMemoryPool__Fi = .text:0x80062210; // type:function size:0x18 scope:global +bSetMemoryPoolOverrideInfo__FiP22MemoryPoolOverrideInfo = .text:0x80062228; // type:function size:0x20 scope:global +bInitMemoryPool__FiPviPCc = .text:0x80062248; // type:function size:0x84 scope:global +bCloseMemoryPool__Fi = .text:0x800622CC; // type:function size:0x40 scope:global +bSetMemoryPoolDebugFill__Fib = .text:0x8006230C; // type:function size:0x1C scope:global +bSetMemoryPoolDebugTracing__Fib = .text:0x80062328; // type:function size:0x84 scope:global +bSetMemoryPoolTopDirection__Fib = .text:0x800623AC; // type:function size:0x18 scope:global +bMemorySetOverflowPoolNumber__Fii = .text:0x800623C4; // type:function size:0x18 scope:global +PlatformMemoryINIT__Fv = .text:0x800623DC; // type:function size:0x8 scope:global +Init__21bVirtualMemoryManager = .text:0x800623E4; // type:function size:0x74 scope:global +Alloc__21bVirtualMemoryManager = .text:0x80062458; // type:function size:0x38 scope:global +GetVirtualMemoryPoolName__Fv = .text:0x80062490; // type:function size:0xC scope:global +GetVirtualMemoryPoolNumber__Fv = .text:0x8006249C; // type:function size:0x8 scope:global +GetVirtualMemoryAllocParams__Fv = .text:0x800624A4; // type:function size:0x28 scope:global +bMemoryInit__Fv = .text:0x800624CC; // type:function size:0x150 scope:global +bMalloc__Fii = .text:0x8006261C; // type:function size:0x2C scope:global +bWareMalloc__FiPCcii = .text:0x80062648; // type:function size:0x244 scope:global +bFree__FPv = .text:0x8006288C; // type:function size:0x180 scope:global +bGetMallocSize__FPCv = .text:0x80062A0C; // type:function size:0x18 scope:global +bGetMallocPool__FPv = .text:0x80062A24; // type:function size:0x18 scope:global +bGetMallocName__FPv = .text:0x80062A3C; // type:function size:0x18 scope:global +bCountFreeMemory__Fi = .text:0x80062A54; // type:function size:0x74 scope:global +bLargestMalloc__Fi = .text:0x80062AC8; // type:function size:0xA8 scope:global +bVerifyPoolIntegrity__Fi = .text:0x80062B70; // type:function size:0x3C scope:global +bGetMemoryPoolNum__FPCc = .text:0x80062BAC; // type:function size:0x9C scope:global +bMemoryGetAllocationNumber__Fv = .text:0x80062C48; // type:function size:0xC scope:global +bMemoryPrintAllocations__Fiii = .text:0x80062C54; // type:function size:0x30 scope:global +bMemoryPrintAllocationsByAddress__Fiii = .text:0x80062C84; // type:function size:0x38 scope:global +bMemoryGetAllocations__FiPPvi = .text:0x80062CBC; // type:function size:0x40 scope:global +Alloc__16bMemoryAllocatorUiRCQ22EA12TagValuePair = .text:0x80062CFC; // type:function size:0x90 scope:global +Free__16bMemoryAllocatorPvUi = .text:0x80062D8C; // type:function size:0x24 scope:global +AddRef__16bMemoryAllocator = .text:0x80062DB0; // type:function size:0x14 scope:global +Release__16bMemoryAllocator = .text:0x80062DC4; // type:function size:0x5C scope:global +bMemoryCreatePersistentPool__Fi = .text:0x80062E20; // type:function size:0x64 scope:global +bStringHashUpper__FPCc = .text:0x80062E84; // type:function size:0x48 scope:global +bStringHash__FPCc = .text:0x80062ECC; // type:function size:0x30 scope:global +bStringHash__FPCci = .text:0x80062EFC; // type:function size:0x30 scope:global +bStrLen__FPCc = .text:0x80062F2C; // type:function size:0x30 scope:global +bStrCpy__FPcPCc = .text:0x80062F5C; // type:function size:0x34 scope:global +bStrNCpy__FPcPCci = .text:0x80062F90; // type:function size:0x4C scope:global +bSafeStrCpy__FPcPCci = .text:0x80062FDC; // type:function size:0x58 scope:global +bStrCmp__FPCcT0 = .text:0x80063034; // type:function size:0x64 scope:global +bStrNCmp__FPCcT0i = .text:0x80063098; // type:function size:0xB0 scope:global +bStrICmp__FPCcT0 = .text:0x80063148; // type:function size:0x88 scope:global +bStrNICmp__FPCcT0i = .text:0x800631D0; // type:function size:0xFC scope:global +bStrCat__FPcPCcT1 = .text:0x800632CC; // type:function size:0x70 scope:global +bToUpper__FPc = .text:0x8006333C; // type:function size:0x38 scope:global +bStrToLong__FPCc = .text:0x80063374; // type:function size:0xF4 scope:global +bStrToFloat__FPCc = .text:0x80063468; // type:function size:0x1CC scope:global +bStrLen__FPCUs = .text:0x80063634; // type:function size:0x34 scope:global +bStrCpy__FPUsPCUs = .text:0x80063668; // type:function size:0x38 scope:global +bStrCpy__FPUsPCc = .text:0x800636A0; // type:function size:0x40 scope:global +bStrNCpy__FPUsPCci = .text:0x800636E0; // type:function size:0x58 scope:global +bStrStr__FPCcT0 = .text:0x80063738; // type:function size:0x80 scope:global +bStrIStr__FPCcT0 = .text:0x800637B8; // type:function size:0x74 scope:global +bMatchNameWithWildcard__FPCcT0 = .text:0x8006382C; // type:function size:0x140 scope:global +Init__17bSharedStringPooli = .text:0x8006396C; // type:function size:0x6C scope:global +Allocate__17bSharedStringPoolPCc = .text:0x800639D8; // type:function size:0x2B4 scope:global +Free__17bSharedStringPoolPCc = .text:0x80063C8C; // type:function size:0x1EC scope:global +bInitSharedStringPool__Fi = .text:0x80063E78; // type:function size:0x2C scope:global +bAllocateSharedString__FPCc = .text:0x80063EA4; // type:function size:0x2C scope:global +bFreeSharedString__FPCc = .text:0x80063ED0; // type:function size:0x2C scope:global +IsWhiteSpace__Fc = .text:0x80063EFC; // type:function size:0x48 scope:global +__11SpeedScriptPCci = .text:0x80063F44; // type:function size:0x50 scope:global +InitFromFile__11SpeedScriptPCc = .text:0x80063F94; // type:function size:0x68 scope:global +_._11SpeedScript = .text:0x80063FFC; // type:function size:0x84 scope:global +Error__11SpeedScriptPCce = .text:0x80064080; // type:function size:0xC0 scope:global +DefaultErrorFunction__11SpeedScriptPCc = .text:0x80064140; // type:function size:0x20 scope:global +GetPositionName__11SpeedScript = .text:0x80064160; // type:function size:0xAC scope:global +ResizeEntryTable__11SpeedScripti = .text:0x8006420C; // type:function size:0x68 scope:global +AddEntry__11SpeedScript = .text:0x80064274; // type:function size:0x84 scope:global +ParseNextWord__11SpeedScriptPcPCciPiT4 = .text:0x800642F8; // type:function size:0x180 scope:global +Init__11SpeedScriptPCcT1i = .text:0x80064478; // type:function size:0x1F8 scope:global +HandleIncludeScript__11SpeedScriptPCc = .text:0x80064670; // type:function size:0x194 scope:global +GetNextCommand__11SpeedScript = .text:0x80064804; // type:function size:0xA0 scope:global +GetNextCommand__11SpeedScriptPCc = .text:0x800648A4; // type:function size:0x5C scope:global +IsAnotherArgument__11SpeedScript = .text:0x80064900; // type:function size:0x44 scope:global +GetNextArgument__11SpeedScript = .text:0x80064944; // type:function size:0x68 scope:global +GetNextArgumentString__11SpeedScript = .text:0x800649AC; // type:function size:0x5C scope:global +GetNextArgumentInt__11SpeedScript = .text:0x80064A08; // type:function size:0xA0 scope:global +GetNextArgumentShort__11SpeedScript = .text:0x80064AA8; // type:function size:0x74 scope:global +GetNextArgumentFloat__11SpeedScript = .text:0x80064B1C; // type:function size:0x24 scope:global +GetNextArgumentVector3__11SpeedScript = .text:0x80064B40; // type:function size:0x6C scope:global +__static_initialization_and_destruction_0 = .text:0x80064BAC; // type:function size:0x174 scope:local +_._16bMemoryAllocator = .text:0x80064D20; // type:function size:0x34 scope:global +_._Q32EA9Allocator10IAllocator = .text:0x80064D54; // type:function size:0x34 scope:global +_GLOBAL_.I.bCalculateCrc32__FPCviUi = .text:0x80064D88; // type:function size:0x2C scope:local +__6Camera = .text:0x80064DB4; // type:function size:0x16C scope:global +SetCameraMatrix__6CameraRC8bMatrix4f = .text:0x80064F20; // type:function size:0x574 scope:global +CommunicateWithJollyRancher__6CameraPc = .text:0x80065494; // type:function size:0xE4 scope:global +NoiseBase__Fi = .text:0x80065578; // type:function size:0x70 scope:global +NoiseInterpolated__Ff = .text:0x800655E8; // type:function size:0xE4 scope:global +Noise__Ff = .text:0x800656CC; // type:function size:0x94 scope:global +FovRelativeAngle__6CameraUs = .text:0x80065760; // type:function size:0x70 scope:global +ApplyNoise__6CameraP8bMatrix4ff = .text:0x800657D0; // type:function size:0x2B4 scope:global +UpdateAll__6Cameraf = .text:0x80065A84; // type:function size:0x34 scope:global +CameraMoverRestartRace__Fv = .text:0x80065AB8; // type:function size:0x90 scope:global +DoesCameraTypeDisablePreculler__F16CameraMoverTypes = .text:0x80065B48; // type:function size:0x20 scope:global +__11CameraMoveri16CameraMoverTypes = .text:0x80065B68; // type:function size:0x180 scope:global +_._11CameraMover = .text:0x80065CE8; // type:function size:0x78 scope:global +Update__11CameraMoverf = .text:0x80065D60; // type:function size:0x4 scope:global +Render__11CameraMoverP5eView = .text:0x80065D64; // type:function size:0x4 scope:global +Enable__11CameraMover = .text:0x80065D68; // type:function size:0x74 scope:global +Disable__11CameraMover = .text:0x80065DDC; // type:function size:0x4C scope:global +ChopperNoise__11CameraMoverP8bMatrix4fb = .text:0x80065E28; // type:function size:0x304 scope:global +HandheldNoise__11CameraMoverP8bMatrix4fb = .text:0x8006612C; // type:function size:0x134 scope:global +TerrainVelocityNoise__11CameraMoverP8bMatrix4P12CameraAnchorff = .text:0x80066260; // type:function size:0x4A8 scope:global +ComputeBankedUpVector__11CameraMoverP8bVector3N21Us = .text:0x80066708; // type:function size:0xB0 scope:global +IsSomethingInBetween__11CameraMoverRCQ25UMath7Vector4T1 = .text:0x800667B8; // type:function size:0x150 scope:global +IsSomethingInBetween__11CameraMoverPC8bVector3T1 = .text:0x80066908; // type:function size:0x6C scope:global +MinDistToWall__11CameraMover = .text:0x80066974; // type:function size:0xC scope:global +EnforceMinGapToWalls__11CameraMoverP9WColliderP8bVector3T2P8bVector4 = .text:0x80066980; // type:function size:0x4C8 scope:global +IsoProjectionMatrix__11CameraMoverP8bMatrix4P8bVector3T2P8bVector2 = .text:0x80066E48; // type:function size:0xEC scope:global +AdjustHeightAroundCar__11CameraMoverPC8bVector3P8bVector3T2 = .text:0x80066F34; // type:function size:0x324 scope:global +DutchAroundCar__11CameraMoverP8bVector3T1 = .text:0x80067258; // type:function size:0x304 scope:global +MinGapCars__11CameraMoverP8bMatrix4P8bVector3T2 = .text:0x8006755C; // type:function size:0x220 scope:global +MinGapTopology__11CameraMoverP8bMatrix4P8bVector3 = .text:0x8006777C; // type:function size:0x524 scope:global +OnWCollide__11CameraMoverRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv = .text:0x80067CA0; // type:function size:0x34 scope:global +GetAnchorID__11CameraMover = .text:0x80067CD4; // type:function size:0x48 scope:global +FovCubicInit__11CameraMoverP8tCubic1D = .text:0x80067D1C; // type:function size:0xAC scope:global +EyeCubicInit__11CameraMoverP8tCubic3DP8bMatrix4P8bVector3 = .text:0x80067DC8; // type:function size:0x124 scope:global +LookCubicInit__11CameraMoverP8tCubic3DP8bMatrix4P8bVector3 = .text:0x80067EEC; // type:function size:0x124 scope:global +SetEyeLook__11CameraMoverP8tCubic3DT1P8tCubic1DP8bMatrix4P8bVector3 = .text:0x80068010; // type:function size:0x68 scope:global +RenderCameraMovers__FP5eView = .text:0x80068078; // type:function size:0x70 scope:global +UpdateCameraMovers__Ff = .text:0x800680E8; // type:function size:0x4F0 scope:global +Update__12CameraAnchorfRC8bMatrix4RC8bVector3T3 = .text:0x800685D8; // type:function size:0x178 scope:global +SetModel__12CameraAnchori = .text:0x80068750; // type:function size:0x78 scope:global +GetPov__12CameraAnchori = .text:0x800687C8; // type:function size:0x344 scope:global +__12CameraAnchori = .text:0x80068B0C; // type:function size:0x328 scope:global +__Q28CameraAI8Director8EVIEW_ID = .text:0x80068E34; // type:function size:0x1E8 scope:global +_._Q28CameraAI8Director = .text:0x8006901C; // type:function size:0x174 scope:global +ReleaseAction__Q28CameraAI8Director = .text:0x80069190; // type:function size:0x58 scope:global +Reset__Q28CameraAI8Director = .text:0x800691E8; // type:function size:0xA0 scope:global +SetAction__Q28CameraAI8DirectorGQ26Attrib9StringKey = .text:0x80069288; // type:function size:0x19C scope:global +AreMomentCamerasEnabled__Fv = .text:0x80069424; // type:function size:0x54 scope:local +SelectAction__Q28CameraAI8Director = .text:0x80069478; // type:function size:0x758 scope:global +TotaledStart__Q28CameraAI8Director = .text:0x80069BD0; // type:function size:0xAC scope:global +JumpStart__Q28CameraAI8Directorf = .text:0x80069C7C; // type:function size:0x14 scope:global +EndJumping__Q28CameraAI8Director = .text:0x80069C90; // type:function size:0x28 scope:global +PursuitStart__Q28CameraAI8Director = .text:0x80069CB8; // type:function size:0x1B4 scope:global +EndPursuitStart__Q28CameraAI8Director = .text:0x80069E6C; // type:function size:0x28 scope:global +Update__Q28CameraAI8Directorf = .text:0x80069E94; // type:function size:0x16C scope:global +GetMover__Q28CameraAI8Director = .text:0x8006A000; // type:function size:0x48 scope:global +FindPlayer__F8EVIEW_ID = .text:0x8006A048; // type:function size:0x88 scope:local +FindDirector__F8EVIEW_ID = .text:0x8006A0D0; // type:function size:0x44 scope:local +FindDirector__FUi = .text:0x8006A114; // type:function size:0xB8 scope:local +Update__8CameraAIf = .text:0x8006A1CC; // type:function size:0xFC scope:global +Reset__8CameraAIv = .text:0x8006A2C8; // type:function size:0x5C scope:global +SetAction__8CameraAI8EVIEW_IDPCc = .text:0x8006A324; // type:function size:0x9C scope:global +StartCinematicSlowdown__8CameraAI8EVIEW_IDf = .text:0x8006A3C0; // type:function size:0xFC scope:global +MaybeDoTotaledCam__8CameraAIP7IPlayer = .text:0x8006A4BC; // type:function size:0x94 scope:global +MaybeDoPursuitCam__8CameraAIP8IVehicle = .text:0x8006A550; // type:function size:0x114 scope:global +MaybeKillPursuitCam__8CameraAIUi = .text:0x8006A664; // type:function size:0x2C scope:global +AverageAir__FP8ISimablefPfT2 = .text:0x8006A690; // type:function size:0x7F4 scope:local +MaybeKillJumpCam__8CameraAIUi = .text:0x8006AE84; // type:function size:0x2C scope:global +MaybeDoJumpCam__8CameraAIP8ISimable = .text:0x8006AEB0; // type:function size:0x3D0 scope:global +Init__8CameraAIv = .text:0x8006B280; // type:function size:0x6C scope:global +Shutdown__8CameraAIv = .text:0x8006B2EC; // type:function size:0x164 scope:global +AddAvoidable__8CameraAIP5IBody = .text:0x8006B450; // type:function size:0xB8 scope:global +RemoveAvoidable__8CameraAIP5IBody = .text:0x8006B508; // type:function size:0xB4 scope:global +Construct__13CDActionDrivePQ28CameraAI8Director = .text:0x8006B5BC; // type:function size:0x11C scope:global +__13CDActionDrivePQ28CameraAI8DirectorP7IPlayer = .text:0x8006B6D8; // type:function size:0x5B0 scope:global +_._13CDActionDrive = .text:0x8006BC88; // type:function size:0x2A4 scope:global +Reset__13CDActionDrive = .text:0x8006BF2C; // type:function size:0x30 scope:global +OnDetached__13CDActionDriveP11IAttachable = .text:0x8006BF5C; // type:function size:0xB4 scope:global +OnCarDetached__13CDActionDrive = .text:0x8006C010; // type:function size:0x78 scope:global +OnCollision__13CDActionDriveRCQ33Sim9Collision4Info = .text:0x8006C088; // type:function size:0x198 scope:global +AquireCar__13CDActionDrive = .text:0x8006C220; // type:function size:0x2B4 scope:global +Update__13CDActionDrivef = .text:0x8006C4D4; // type:function size:0x11D4 scope:global +GetTrafficBasis__13CDActionDriveRQ25UMath7Matrix4RQ25UMath7Vector3 = .text:0x8006D6A8; // type:function size:0xA4 scope:global +MessageJumpCut__13CDActionDriveRC8MJumpCut = .text:0x8006D74C; // type:function size:0x40 scope:global +Construct__16CDActionTrackCarPQ28CameraAI8Director = .text:0x8006D78C; // type:function size:0x11C scope:global +__16CDActionTrackCarPQ28CameraAI8DirectorP7IPlayer = .text:0x8006D8A8; // type:function size:0x3FC scope:global +_._16CDActionTrackCar = .text:0x8006DCA4; // type:function size:0x258 scope:global +Reset__16CDActionTrackCar = .text:0x8006DEFC; // type:function size:0x4 scope:global +OnDetached__16CDActionTrackCarP11IAttachable = .text:0x8006DF00; // type:function size:0xB4 scope:global +OnCarDetached__16CDActionTrackCar = .text:0x8006DFB4; // type:function size:0x6C scope:global +AquireCar__16CDActionTrackCar = .text:0x8006E020; // type:function size:0x224 scope:global +Update__16CDActionTrackCarf = .text:0x8006E244; // type:function size:0x1C4 scope:global +GetTrafficBasis__16CDActionTrackCarRQ25UMath7Matrix4RQ25UMath7Vector3 = .text:0x8006E408; // type:function size:0xA4 scope:global +Construct__16CDActionTrackCopPQ28CameraAI8Director = .text:0x8006E4AC; // type:function size:0x11C scope:global +__16CDActionTrackCopPQ28CameraAI8DirectorP7IPlayer = .text:0x8006E5C8; // type:function size:0x434 scope:global +_._16CDActionTrackCop = .text:0x8006E9FC; // type:function size:0x258 scope:global +Reset__16CDActionTrackCop = .text:0x8006EC54; // type:function size:0x4 scope:global +OnDetached__16CDActionTrackCopP11IAttachable = .text:0x8006EC58; // type:function size:0xB4 scope:global +OnCarDetached__16CDActionTrackCop = .text:0x8006ED0C; // type:function size:0x6C scope:global +AquireCar__16CDActionTrackCop = .text:0x8006ED78; // type:function size:0x224 scope:global +Update__16CDActionTrackCopf = .text:0x8006EF9C; // type:function size:0x1C4 scope:global +GetTrafficBasis__16CDActionTrackCopRQ25UMath7Matrix4RQ25UMath7Vector3 = .text:0x8006F160; // type:function size:0xA4 scope:global +Construct__16CDActionShowcasePQ28CameraAI8Director = .text:0x8006F204; // type:function size:0x11C scope:global +IsRightSide__Fv = .text:0x8006F320; // type:function size:0x2B0 scope:local +__16CDActionShowcasePQ28CameraAI8DirectorP7IPlayer = .text:0x8006F5D0; // type:function size:0x2B0 scope:global +_._16CDActionShowcase = .text:0x8006F880; // type:function size:0x13C scope:global +Reset__16CDActionShowcase = .text:0x8006F9BC; // type:function size:0x4 scope:global +OnDetached__16CDActionShowcaseP11IAttachable = .text:0x8006F9C0; // type:function size:0xB4 scope:global +OnCarDetached__16CDActionShowcase = .text:0x8006FA74; // type:function size:0x6C scope:global +AquireCar__16CDActionShowcase = .text:0x8006FAE0; // type:function size:0x1D8 scope:global +Update__16CDActionShowcasef = .text:0x8006FCB8; // type:function size:0x1C4 scope:global +Construct__13CDActionDebugPQ28CameraAI8Director = .text:0x8006FE7C; // type:function size:0x44 scope:global +__13CDActionDebugPQ28CameraAI8Director = .text:0x8006FEC0; // type:function size:0x2D8 scope:global +_._13CDActionDebug = .text:0x80070198; // type:function size:0x1C8 scope:global +Reset__13CDActionDebug = .text:0x80070360; // type:function size:0x4 scope:global +Update__13CDActionDebugf = .text:0x80070364; // type:function size:0x8C scope:global +GetTrafficBasis__13CDActionDebugRQ25UMath7Matrix4RQ25UMath7Vector3 = .text:0x800703F0; // type:function size:0x68 scope:global +Construct__11CDActionIcePQ28CameraAI8Director = .text:0x80070458; // type:function size:0x144 scope:global +__11CDActionIcePQ28CameraAI8DirectorP7IPlayer = .text:0x8007059C; // type:function size:0x300 scope:global +_._11CDActionIce = .text:0x8007089C; // type:function size:0x14C scope:global +Reset__11CDActionIce = .text:0x800709E8; // type:function size:0x4 scope:global +OnDetached__11CDActionIceP11IAttachable = .text:0x800709EC; // type:function size:0xB8 scope:global +ReleaseCar__11CDActionIceb = .text:0x80070AA4; // type:function size:0x70 scope:global +AquireCar__11CDActionIce = .text:0x80070B14; // type:function size:0x208 scope:global +Update__11CDActionIcef = .text:0x80070D1C; // type:function size:0x424 scope:global +Construct__21CDActionDebugWatchCarPQ28CameraAI8Director = .text:0x80071140; // type:function size:0x58 scope:global +__21CDActionDebugWatchCarPQ28CameraAI8Director = .text:0x80071198; // type:function size:0x3D0 scope:global +_._21CDActionDebugWatchCar = .text:0x80071568; // type:function size:0x31C scope:global +Reset__21CDActionDebugWatchCar = .text:0x80071884; // type:function size:0x4 scope:global +GetSimable__21CDActionDebugWatchCar = .text:0x80071888; // type:function size:0x58 scope:global +ReleaseTarget__21CDActionDebugWatchCar = .text:0x800718E0; // type:function size:0x50 scope:global +AquireTarget__21CDActionDebugWatchCar = .text:0x80071930; // type:function size:0x1B4 scope:global +Update__21CDActionDebugWatchCarf = .text:0x80071AE4; // type:function size:0x78 scope:global +GetTrafficBasis__21CDActionDebugWatchCarRQ25UMath7Matrix4RQ25UMath7Vector3 = .text:0x80071B5C; // type:function size:0x5C scope:global +Blend__t6tTable1Z12CubicPovDataP12CubicPovDataN21f = .text:0x80071BB8; // type:function size:0x30C scope:global +bClamp__FP8bVector3PC8bVector3T1 = .text:0x80071EC4; // type:function size:0x68 scope:global +OutsidePovType__Fi = .text:0x80071F2C; // type:function size:0x2C scope:global +RenderCarPovType__Fib = .text:0x80071F58; // type:function size:0x3C scope:global +IsHoodCamera__16CubicCameraMover = .text:0x80071F94; // type:function size:0x24 scope:global +__16CubicCameraMoveriP12CameraAnchoribN34 = .text:0x80071FB8; // type:function size:0x8E4 scope:global +_._16CubicCameraMover = .text:0x8007289C; // type:function size:0x94 scope:global +MinDistToWall__16CubicCameraMover = .text:0x80072930; // type:function size:0xC scope:global +OutsidePOV__16CubicCameraMover = .text:0x8007293C; // type:function size:0x24 scope:global +RenderCarPOV__16CubicCameraMover = .text:0x80072960; // type:function size:0x28 scope:global +HighliteMode__16CubicCameraMover = .text:0x80072988; // type:function size:0x8 scope:global +SetSnapNext__16CubicCameraMover = .text:0x80072990; // type:function size:0x20 scope:global +SetPovType__16CubicCameraMoveri = .text:0x800729B0; // type:function size:0x80 scope:global +ResetState__16CubicCameraMover = .text:0x80072A30; // type:function size:0x150 scope:global +IsUnderVehicle__16CubicCameraMover = .text:0x80072B80; // type:function size:0x44C scope:global +SetForward__16CubicCameraMoverP3POVb = .text:0x80072FCC; // type:function size:0x24C scope:global +MakeSpace__16CubicCameraMoverP8bMatrix4 = .text:0x80073218; // type:function size:0x1B8 scope:global +CameraAccelCurve__16CubicCameraMoverP8bVector3 = .text:0x800733D0; // type:function size:0x2F4 scope:global +CameraSpeedHug__16CubicCameraMoverP8bVector3 = .text:0x800736C4; // type:function size:0x158 scope:global +SetDesired__16CubicCameraMoverP8bMatrix4P3POVP12CubicPovDatab = .text:0x8007381C; // type:function size:0x634 scope:global +Update__16CubicCameraMoverf = .text:0x80073E50; // type:function size:0xEC0 scope:global +__19TrackCarCameraMoveriP12CameraAnchorb = .text:0x80074D10; // type:function size:0xA8 scope:global +_._19TrackCarCameraMover = .text:0x80074DB8; // type:function size:0x88 scope:global +IsAnyCopNear__FP12CameraAnchor = .text:0x80074E40; // type:function size:0x188 scope:local +IsBeingPursued__Fi = .text:0x80074FC8; // type:function size:0xE0 scope:local +FixWorldHeight__FPQ25UMath7Vector3i = .text:0x800750A8; // type:function size:0xE4 scope:local +Init__19TrackCarCameraMover = .text:0x8007518C; // type:function size:0xA94 scope:global +GetTarget__19TrackCarCameraMover = .text:0x80075C20; // type:function size:0x24 scope:global +Update__19TrackCarCameraMoverf = .text:0x80075C44; // type:function size:0x3E0 scope:global +__6Bezier = .text:0x80076024; // type:function size:0x80 scope:global +GetPoint__6BezierP8bVector3f = .text:0x800760A4; // type:function size:0x80 scope:global +CrossXY__FPC8bVector3T0 = .text:0x80076124; // type:function size:0x1C scope:local +__19TrackCopCameraMoveriP12CameraAnchorb = .text:0x80076140; // type:function size:0xD0 scope:global +_._19TrackCopCameraMover = .text:0x80076210; // type:function size:0x94 scope:global +FindPursuitVehiclePosition__19TrackCopCameraMoverP8bVector3 = .text:0x800762A4; // type:function size:0x28C scope:global +Init__19TrackCopCameraMover = .text:0x80076530; // type:function size:0x8B0 scope:global +GetTarget__19TrackCopCameraMover = .text:0x80076DE0; // type:function size:0x24 scope:global +Update__19TrackCopCameraMoverf = .text:0x80076E04; // type:function size:0x3B4 scope:global +__21DebugWorldCameraMoveriPC8bVector3T212JoystickPort = .text:0x800771B8; // type:function size:0x114 scope:global +_._21DebugWorldCameraMover = .text:0x800772CC; // type:function size:0x78 scope:global +JoyHandler__21DebugWorldCameraMover = .text:0x80077344; // type:function size:0x420 scope:global +Update__21DebugWorldCameraMoverf = .text:0x80077764; // type:function size:0x80C scope:global +__25RearViewMirrorCameraMoveriP12CameraAnchor = .text:0x80077F70; // type:function size:0x60 scope:global +_._25RearViewMirrorCameraMover = .text:0x80077FD0; // type:function size:0x30 scope:global +Update__25RearViewMirrorCameraMoverf = .text:0x80078000; // type:function size:0x170 scope:global +__20SelectCarCameraMoveri = .text:0x80078170; // type:function size:0xE8 scope:global +_._20SelectCarCameraMover = .text:0x80078258; // type:function size:0x30 scope:global +Update__20SelectCarCameraMoverf = .text:0x80078288; // type:function size:0x524 scope:global +CreateCameraMatrix__20SelectCarCameraMoverP8bMatrix4P19SelectCarCameraData = .text:0x800787AC; // type:function size:0x170 scope:global +SetVRotateSpeed__20SelectCarCameraMoverf = .text:0x8007891C; // type:function size:0xD0 scope:global +SetHRotateSpeed__20SelectCarCameraMoverf = .text:0x800789EC; // type:function size:0xD0 scope:global +SetZoomSpeed__20SelectCarCameraMoverf = .text:0x80078ABC; // type:function size:0xD0 scope:global +SetCurrentOrientation__20SelectCarCameraMoverR8bVector3ffT1 = .text:0x80078B8C; // type:function size:0x3C scope:global +SetDesiredOrientation__20SelectCarCameraMoverR8bVector3ffT1ffi = .text:0x80078BC8; // type:function size:0x124 scope:global +FindBestAngleGoal__20SelectCarCameraMoverff = .text:0x80078CEC; // type:function size:0x78 scope:global +__19ShowcaseCameraMoveriP12CameraAnchorb = .text:0x80078D64; // type:function size:0x88 scope:global +_._19ShowcaseCameraMover = .text:0x80078DEC; // type:function size:0x30 scope:global +SetFromTweakables__19ShowcaseCameraMover = .text:0x80078E1C; // type:function size:0x5C scope:global +BuildPhotoCameraMatrix__19ShowcaseCameraMover = .text:0x80078E78; // type:function size:0x258 scope:global +ResetState__19ShowcaseCameraMover = .text:0x800790D0; // type:function size:0x1C scope:global +Update__19ShowcaseCameraMoverf = .text:0x800790EC; // type:function size:0xCC scope:global +MakeCoeffs__Q23ICE7Cubic1D = .text:0x800791B8; // type:function size:0x48 scope:global +GetVal__CQ23ICE7Cubic1Df = .text:0x80079200; // type:function size:0x20 scope:global +GetdVal__CQ23ICE7Cubic1Df = .text:0x80079220; // type:function size:0x28 scope:global +GetddVal__CQ23ICE7Cubic1Df = .text:0x80079248; // type:function size:0x20 scope:global +GetValDesired__CQ23ICE7Cubic1D = .text:0x80079268; // type:function size:0x8 scope:global +GetDerivative__CQ23ICE7Cubic1Df = .text:0x80079270; // type:function size:0x44 scope:global +GetSecondDerivative__CQ23ICE7Cubic1Df = .text:0x800792B4; // type:function size:0x48 scope:global +ClampDerivative__Q23ICE7Cubic1Df = .text:0x800792FC; // type:function size:0x60 scope:global +ClampSecondDerivative__Q23ICE7Cubic1Df = .text:0x8007935C; // type:function size:0xD4 scope:global +Update__Q23ICE7Cubic1Dfff = .text:0x80079430; // type:function size:0x144 scope:global +SetVal__Q23ICE7Cubic3DPCQ23ICE7Vector3 = .text:0x80079574; // type:function size:0x58 scope:global +SetdVal__Q23ICE7Cubic3DPCQ23ICE7Vector3 = .text:0x800795CC; // type:function size:0x58 scope:global +SetValDesired__Q23ICE7Cubic3DPCQ23ICE7Vector3 = .text:0x80079624; // type:function size:0x58 scope:global +SetdValDesired__Q23ICE7Cubic3DPCQ23ICE7Vector3 = .text:0x8007967C; // type:function size:0x1C scope:global +GetVal__CQ23ICE7Cubic3DPQ23ICE7Vector3 = .text:0x80079698; // type:function size:0x1C scope:global +GetdVal__CQ23ICE7Cubic3DPQ23ICE7Vector3 = .text:0x800796B4; // type:function size:0x1C scope:global +GetVal__CQ23ICE7Cubic3DPQ23ICE7Vector3f = .text:0x800796D0; // type:function size:0x60 scope:global +GetValDesired__CQ23ICE7Cubic3DPQ23ICE7Vector3 = .text:0x80079730; // type:function size:0x1C scope:global +Update__Q23ICE7Cubic3Dfff = .text:0x8007974C; // type:function size:0x78 scope:global +PlatEndianSwap__7ICEData = .text:0x800797C4; // type:function size:0xDC scope:global +GetEye__7ICEDataiPQ23ICE7Vector3 = .text:0x800798A0; // type:function size:0x78 scope:global +GetLook__7ICEDataiPQ23ICE7Vector3 = .text:0x80079918; // type:function size:0x78 scope:global +KeysShared__3ICEP7ICEDataiT1i = .text:0x80079990; // type:function size:0xA4 scope:global +KeysSharedSpace__3ICEP7ICEDataiT1i = .text:0x80079A34; // type:function size:0xAC scope:global +FlushAllocatedTracks__8ICEGroup = .text:0x80079AE0; // type:function size:0x84 scope:global +GetTrack__8ICEGroupi = .text:0x80079B64; // type:function size:0x3C scope:global +GetTrack__8ICEGroupPc = .text:0x80079BA0; // type:function size:0x60 scope:global +PlatEndianSwap__8ICETrack = .text:0x80079C00; // type:function size:0x68 scope:global +GetContext__8ICETrack = .text:0x80079C68; // type:function size:0x18 scope:global +GetKeyNumber__8ICETrackf = .text:0x80079C80; // type:function size:0x44 scope:global +GetParameter__8ICETrack = .text:0x80079CC4; // type:function size:0x154 scope:global +GetCameraData__8ICETrackPfN21 = .text:0x80079E18; // type:function size:0x150 scope:global +PlatEndianSwap__12ICEShakeData = .text:0x80079F68; // type:function size:0x54 scope:global +FlushAllocatedTracks__13ICEShakeGroup = .text:0x80079FBC; // type:function size:0x84 scope:global +GetTrack__13ICEShakeGroupi = .text:0x8007A040; // type:function size:0x3C scope:global +PlatEndianSwap__13ICEShakeTrack = .text:0x8007A07C; // type:function size:0x58 scope:global +Update__9ICEAnchorfRCQ23ICE7Matrix4RCQ23ICE7Vector3T3 = .text:0x8007A0D4; // type:function size:0x178 scope:global +__9ICEAnchor = .text:0x8007A24C; // type:function size:0xDC scope:global +ConvertLensLengthToFovAngle__Ff = .text:0x8007A328; // type:function size:0x2C scope:global +ConvertFovAngleToLensLength__FUs = .text:0x8007A354; // type:function size:0x6C scope:global +ConvertLensDeltaToFovDelta__Fff = .text:0x8007A3C0; // type:function size:0xC8 scope:global +ConvertApertureNumberToFStop__Ff = .text:0x8007A488; // type:function size:0xAC scope:global +CreateLookAtMatrix__FPQ23ICE7Matrix4RQ23ICE7Vector3T1Us = .text:0x8007A534; // type:function size:0x1EC scope:local +__8ICEMoveriP9ICEAnchor = .text:0x8007A720; // type:function size:0x564 scope:global +_._8ICEMover = .text:0x8007AC84; // type:function size:0x10C scope:global +EyeCubicInit__8ICEMoverPQ23ICE7Cubic3DPQ23ICE7Matrix4PQ23ICE7Vector3 = .text:0x8007AD90; // type:function size:0x13C scope:global +LookCubicInit__8ICEMoverPQ23ICE7Cubic3DPQ23ICE7Matrix4PQ23ICE7Vector3 = .text:0x8007AECC; // type:function size:0x13C scope:global +DutchCubicInit__8ICEMoverPQ23ICE7Cubic1D = .text:0x8007B008; // type:function size:0x3C scope:global +FovCubicInit__8ICEMoverPQ23ICE7Cubic1D = .text:0x8007B044; // type:function size:0xB8 scope:global +SetDesired__8ICEMoverbT1 = .text:0x8007B0FC; // type:function size:0xFC0 scope:global +GetEye__8ICEMoverPQ23ICE7Vector3f = .text:0x8007C0BC; // type:function size:0xE8 scope:global +GetLook__8ICEMoverPQ23ICE7Vector3f = .text:0x8007C1A4; // type:function size:0xE8 scope:global +GetDutch__8ICEMoverf = .text:0x8007C28C; // type:function size:0x78 scope:global +GetFOV__8ICEMoverf = .text:0x8007C304; // type:function size:0x8C scope:global +Update__8ICEMoverf = .text:0x8007C390; // type:function size:0xF1C scope:global +WasRecentlyUsed__9ICEReplayP8ICETrack = .text:0x8007D2AC; // type:function size:0x38 scope:global +ClearRecentlyUsed__9ICEReplayv = .text:0x8007D2E4; // type:function size:0x34 scope:global +GetICEAnchor__Fv = .text:0x8007D318; // type:function size:0x54 scope:local +GetGroundElevation__FPCQ23ICE7Vector3 = .text:0x8007D36C; // type:function size:0xC4 scope:global +GetAnimElevationFixup__10ICEManagerPQ23ICE7Vector3 = .text:0x8007D430; // type:function size:0x50 scope:global +FixAnimElevation__10ICEManagerPQ23ICE7Vector3 = .text:0x8007D480; // type:function size:0xF4 scope:global +__10ICEManager = .text:0x8007D574; // type:function size:0xC4 scope:global +GetTimerSeconds__10ICEManager = .text:0x8007D638; // type:function size:0x5C scope:global +RefreshCameraSplines__10ICEManager = .text:0x8007D694; // type:function size:0x8 scope:global +ICEGetPlayerCarTransform__FPQ23ICE7Matrix4 = .text:0x8007D69C; // type:function size:0xD0 scope:local +ChooseGoodSceneCameraTrackIndex__10ICEManagerUiPCQ23ICE7Matrix4 = .text:0x8007D76C; // type:function size:0x320 scope:global +SetGenericCameraToPlay__10ICEManagerPCcT1 = .text:0x8007DA8C; // type:function size:0x50 scope:global +GetNisCameraGroup__10ICEManagerUi = .text:0x8007DADC; // type:function size:0x40 scope:global +GetFmvCameraGroup__10ICEManagerUi = .text:0x8007DB1C; // type:function size:0x40 scope:global +GetReplayCameraGroup__10ICEManagerUi = .text:0x8007DB5C; // type:function size:0x40 scope:global +GetGenericCameraGroup__10ICEManagerUi = .text:0x8007DB9C; // type:function size:0x40 scope:global +GetShakeTrack__10ICEManagerUi = .text:0x8007DBDC; // type:function size:0x88 scope:global +Init__10ICEManager = .text:0x8007DC64; // type:function size:0x194 scope:global +Resolve__10ICEManager = .text:0x8007DDF8; // type:function size:0x28C scope:global +GetCameraIndex__10ICEManagerfP8ICETrack = .text:0x8007E084; // type:function size:0x30 scope:global +GetParameter__10ICEManager = .text:0x8007E0B4; // type:function size:0x80 scope:global +GetParameter__10ICEManageriP8ICETrack = .text:0x8007E134; // type:function size:0x44 scope:global +GetIntervalSize__10ICEManagerP7ICEDataP8ICETrack = .text:0x8007E178; // type:function size:0x7C scope:global +ChooseGenericCamera__10ICEManager = .text:0x8007E1F4; // type:function size:0x5C scope:global +ChooseReplayCamera__10ICEManager = .text:0x8007E250; // type:function size:0x8C scope:global +ChooseCameraPlaybackTrack__10ICEManager = .text:0x8007E2DC; // type:function size:0x12C scope:global +GetCameraData__10ICEManagerUii = .text:0x8007E408; // type:function size:0x80 scope:global +GetCameraData__10ICEManagerPP8ICETrackPfT2 = .text:0x8007E488; // type:function size:0x50 scope:global +GetNeighbour__10ICEManagerP7ICEDataiP8ICETrack = .text:0x8007E4D8; // type:function size:0x78 scope:global +GetSlope__10ICEManagerPQ23ICE7Vector3T1PfT3P7ICEDataiP8ICETrack = .text:0x8007E550; // type:function size:0x578 scope:global +Update__10ICEManager = .text:0x8007EAC8; // type:function size:0x4 scope:global +GetNumSceneCameraTrack__10ICEManagerUi = .text:0x8007EACC; // type:function size:0x3C scope:global +AddCameraGroup__10ICEManager10ICEContextUi = .text:0x8007EB08; // type:function size:0xF0 scope:global +GetCameraGroup__10ICEManager10ICEContextUi = .text:0x8007EBF8; // type:function size:0x94 scope:global +LoadCameraSet__10ICEManagerP6bChunk = .text:0x8007EC8C; // type:function size:0x158 scope:global +UnloadCameraSet__10ICEManagerP6bChunk = .text:0x8007EDE4; // type:function size:0x1C8 scope:global +LoadCameraShakes__10ICEManagerP6bChunk = .text:0x8007EFAC; // type:function size:0xA8 scope:global +UnloadCameraShakes__10ICEManagerP6bChunk = .text:0x8007F054; // type:function size:0x84 scope:global +LoaderICECameras__FP6bChunk = .text:0x8007F0D8; // type:function size:0x88 scope:global +UnloaderICECameras__FP6bChunk = .text:0x8007F160; // type:function size:0x88 scope:global +ICECompleteEventTags__Fv = .text:0x8007F1E8; // type:function size:0x94 scope:global +GetSceneCount__3ICEv = .text:0x8007F27C; // type:function size:0x1C scope:global +GetSceneHash__3ICEUi = .text:0x8007F298; // type:function size:0x6C scope:global +GetNameOfSceneHash__3ICEUiPc = .text:0x8007F304; // type:function size:0x10C scope:global +FireEventTag__3ICEi = .text:0x8007F410; // type:function size:0x68 scope:global +FindAnimScene__3ICEv = .text:0x8007F478; // type:function size:0x4C scope:global +GetOverlayIndex__FUc = .text:0x8007F4C4; // type:function size:0x44 scope:local +GetOverlayName__3ICEUc = .text:0x8007F508; // type:function size:0x34 scope:global +ShowOverlay__3ICEUc = .text:0x8007F53C; // type:function size:0x74 scope:global +HideOverlay__3ICEv = .text:0x8007F5B0; // type:function size:0x84 scope:global +GetCurrentCamera__Fv = .text:0x8007F634; // type:function size:0x30 scope:local +PredictAverageAir__FfPfT1b = .text:0x8007F664; // type:function size:0xC scope:local +GetRecentCurvature__Fv = .text:0x8007F670; // type:function size:0xC scope:local +ReplayNosScore__FP9ICEAnchor = .text:0x8007F67C; // type:function size:0x30 scope:local +ReplayNosMirror__FP9ICEAnchor = .text:0x8007F6AC; // type:function size:0x8 scope:local +ReplayJumpScore__FP9ICEAnchor = .text:0x8007F6B4; // type:function size:0xBC scope:local +ReplayJumpMirror__FP9ICEAnchor = .text:0x8007F770; // type:function size:0x8 scope:local +ReplaySpeedScore__FP9ICEAnchor = .text:0x8007F778; // type:function size:0x54 scope:local +ReplaySpeedMirror__FP9ICEAnchor = .text:0x8007F7CC; // type:function size:0x8 scope:local +ReplayCornerScore__FP9ICEAnchor = .text:0x8007F7D4; // type:function size:0x70 scope:local +ReplayCornerMirror__FP9ICEAnchor = .text:0x8007F844; // type:function size:0x34 scope:local +ReplayBurnoutScore__FP9ICEAnchor = .text:0x8007F878; // type:function size:0xA0 scope:local +ReplayBurnoutMirror__FP9ICEAnchor = .text:0x8007F918; // type:function size:0x8 scope:local +ReplayPowerSlideScore__FP9ICEAnchor = .text:0x8007F920; // type:function size:0x78 scope:local +ReplayPowerSlideMirror__FP9ICEAnchor = .text:0x8007F998; // type:function size:0x1C scope:local +GetReplayCategoryNumElements__3ICEv = .text:0x8007F9B4; // type:function size:0x8 scope:global +GetReplayCategoryHash__3ICEi = .text:0x8007F9BC; // type:function size:0x18 scope:global +GetReplayCategory__3ICEUi = .text:0x8007F9D4; // type:function size:0x40 scope:global +CameraCutIsGood__9ICEReplayP7ICEDatafP9ICEAnchor = .text:0x8007FA14; // type:function size:0x56C scope:global +ChooseGoodCamera__9ICEReplayP9ICEAnchorP8ICEGroupi = .text:0x8007FF80; // type:function size:0x3BC scope:global +find__H2ZPPQ28CameraAI8DirectorZPQ28CameraAI8Director_4_STLX01X01RCX11_X01 = .text:0x8008033C; // type:function size:0xB0 scope:global +CreateInstance__Q33UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32G6UCrc32PQ28CameraAI8Director = .text:0x800803EC; // type:function size:0x60 scope:global +Count__Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi311ePlayerList = .text:0x8008044C; // type:function size:0x18 scope:global +clear__Q24_STLt10_List_base2ZP5IBodyZQ33UTL3Stdt9Allocator2ZP5IBodyZ24_type_CameraAIAvoidables = .text:0x80080464; // type:function size:0x78 scope:global +find__H2ZQ24_STLt14_List_iterator2ZP5IBodyZQ24_STLt16_Nonconst_traits1ZP5IBodyZP5IBody_4_STLX01X01RCX11_X01 = .text:0x800804DC; // type:function size:0x60 scope:global +Copy4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRX11RCX01_v = .text:0x8008053C; // type:function size:0x24 scope:global +Scale3__H1ZQ25UMath7Vector4__14ConversionUtilRX01f_v = .text:0x80080560; // type:function size:0x28 scope:global +Make4__H1ZQ25UMath7Vector4__14ConversionUtilffff_X01 = .text:0x80080588; // type:function size:0x44 scope:global +RightToLeftVector4__H2ZQ25UMath7Vector4ZQ25UMath7Vector4__14ConversionUtilRCX01RX11_v = .text:0x800805CC; // type:function size:0x6C scope:global +RightToLeftMatrix4__H2ZQ25UMath7Matrix4ZQ25UMath7Matrix4__14ConversionUtilRCX01RX11_v = .text:0x80080638; // type:function size:0xAC scope:global +Make3__H1ZQ25UMath7Vector3__14ConversionUtilfff_X01 = .text:0x800806E4; // type:function size:0x38 scope:global +RightToLeftVector3__H2ZQ25UMath7Vector3ZQ25UMath7Vector3__14ConversionUtilRCX01RX11_v = .text:0x8008071C; // type:function size:0x60 scope:global +Copy4__H2Z8bVector4ZQ25UMath7Vector4__14ConversionUtilRX11RCX01_v = .text:0x8008077C; // type:function size:0x24 scope:global +RightToLeftMatrix4__H2Z8bMatrix4ZQ25UMath7Matrix4__14ConversionUtilRCX01RX11_v = .text:0x800807A0; // type:function size:0xAC scope:global +RightToLeftVector3__H2Z8bVector3ZQ25UMath7Vector3__14ConversionUtilRCX01RX11_v = .text:0x8008084C; // type:function size:0x60 scope:global +find__H2ZPCP8IVehicleZPC8IVehicle_4_STLX01X01RCX11_X01 = .text:0x800808AC; // type:function size:0xB0 scope:global +__static_initialization_and_destruction_0 = .text:0x8008095C; // type:function size:0xE14 scope:local +GetMatrix__C11bQuaternionR8bMatrix4 = .text:0x80081770; // type:function size:0xC0 scope:global +__Q33UTL11Collectionst8_Storage2ZPQ28CameraAI8Directori2RCQ33UTL11Collectionst8_Storage2ZPQ28CameraAI8Directori2 = .text:0x80081830; // type:function size:0x484 scope:global +_._Q43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4List = .text:0x80081CB4; // type:function size:0xB4 scope:global +_._Q28CameraAI6Action = .text:0x80081D68; // type:function size:0x68 scope:global +_IHandle__14IDebugWatchCar = .text:0x80081DD0; // type:function size:0xC scope:global +_._14IDebugWatchCar = .text:0x80081DDC; // type:function size:0x160 scope:global +push_back__Q23UTLt6Vector2ZP14IDebugWatchCari16RCP14IDebugWatchCar = .text:0x80081F3C; // type:function size:0x154 scope:global +ClassKey__Q36Attrib3Gen4ecar = .text:0x80082090; // type:function size:0xC scope:global +ClassKey__Q36Attrib3Gen10camerainfo = .text:0x8008209C; // type:function size:0xC scope:global +GetAnchor__11CameraMover = .text:0x800820A8; // type:function size:0x8 scope:global +SetLookBack__11CameraMoverb = .text:0x800820B0; // type:function size:0x4 scope:global +SetLookbackSpeed__11CameraMoverf = .text:0x800820B4; // type:function size:0x4 scope:global +SetDisableLag__11CameraMoverb = .text:0x800820B8; // type:function size:0x4 scope:global +SetPovType__11CameraMoveri = .text:0x800820BC; // type:function size:0x4 scope:global +OutsidePOV__11CameraMover = .text:0x800820C0; // type:function size:0x8 scope:global +RenderCarPOV__11CameraMover = .text:0x800820C8; // type:function size:0x8 scope:global +GetLookbackAngle__11CameraMover = .text:0x800820D0; // type:function size:0x8 scope:global +ResetState__11CameraMover = .text:0x800820D8; // type:function size:0x4 scope:global +IsHoodCamera__11CameraMover = .text:0x800820DC; // type:function size:0x8 scope:global +GetTarget__11CameraMover = .text:0x800820E4; // type:function size:0xC scope:global +GetAnchor__25RearViewMirrorCameraMover = .text:0x800820F0; // type:function size:0x8 scope:global +GetAnchor__19TrackCarCameraMover = .text:0x800820F8; // type:function size:0x8 scope:global +GetAnchor__19TrackCopCameraMover = .text:0x80082100; // type:function size:0x8 scope:global +RenderCarPOV__19TrackCopCameraMover = .text:0x80082108; // type:function size:0x8 scope:global +_._12CameraAnchor = .text:0x80082110; // type:function size:0x60 scope:global +SetLookBack__16CubicCameraMoverb = .text:0x80082170; // type:function size:0x8 scope:global +SetDisableLag__16CubicCameraMoverb = .text:0x80082178; // type:function size:0xC scope:global +GetLookbackAngle__16CubicCameraMover = .text:0x80082184; // type:function size:0x18 scope:global +GetAnchor__16CubicCameraMover = .text:0x8008219C; // type:function size:0x8 scope:global +_._11IAttachable = .text:0x800821A4; // type:function size:0x54 scope:global +_GetKind__15MGamePlayMoment = .text:0x800821F8; // type:function size:0x64 scope:global +_GetKind__18MICECameraFinished = .text:0x8008225C; // type:function size:0x64 scope:global +_GetKind__10MMiscSound = .text:0x800822C0; // type:function size:0x64 scope:global +GetGrowSize__CQ23UTLt6Vector2ZPQ28CameraAI8Directori16Ui = .text:0x80082324; // type:function size:0x20 scope:global +OnGrowRequest__Q23UTLt6Vector2ZPQ28CameraAI8Directori16Ui = .text:0x80082344; // type:function size:0x4 scope:global +push_back__Q23UTLt6Vector2ZPQ28CameraAI8Directori16RCPQ28CameraAI8Director = .text:0x80082348; // type:function size:0x154 scope:global +_._Q23UTLt6Vector2ZPQ28CameraAI8Directori16 = .text:0x8008249C; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16 = .text:0x800824D0; // type:function size:0xB4 scope:global +_._14ITrafficCenter = .text:0x80082584; // type:function size:0x148 scope:global +push_back__Q23UTLt6Vector2ZP14ITrafficCenteri16RCP14ITrafficCenter = .text:0x800826CC; // type:function size:0x154 scope:global +_GetKind__8MJumpCut = .text:0x80082820; // type:function size:0x64 scope:global +GetName__C13CDActionDrive = .text:0x80082884; // type:function size:0x74 scope:global +GetNext__C13CDActionDrive = .text:0x800828F8; // type:function size:0x2C scope:global +GetMover__13CDActionDrive = .text:0x80082924; // type:function size:0x8 scope:global +SetSpecial__13CDActionDrivef = .text:0x8008292C; // type:function size:0x28 scope:global +Attach__13CDActionDrivePQ33UTL3COM8IUnknown = .text:0x80082954; // type:function size:0x24 scope:global +Detach__13CDActionDrivePQ33UTL3COM8IUnknown = .text:0x80082978; // type:function size:0x24 scope:global +IsAttached__C13CDActionDrivePCQ33UTL3COM8IUnknown = .text:0x8008299C; // type:function size:0x24 scope:global +OnAttached__13CDActionDriveP11IAttachable = .text:0x800829C0; // type:function size:0x4 scope:global +GetAttachments__C13CDActionDrive = .text:0x800829C4; // type:function size:0x8 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z8MJumpCutZ13CDActionDriveZ13CDActionDrivePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800829CC; // type:function size:0x88 scope:global +GetName__C16CDActionTrackCar = .text:0x80082A54; // type:function size:0x74 scope:global +GetNext__C16CDActionTrackCar = .text:0x80082AC8; // type:function size:0x2C scope:global +GetMover__16CDActionTrackCar = .text:0x80082AF4; // type:function size:0x8 scope:global +SetSpecial__16CDActionTrackCarf = .text:0x80082AFC; // type:function size:0x4 scope:global +Attach__16CDActionTrackCarPQ33UTL3COM8IUnknown = .text:0x80082B00; // type:function size:0x24 scope:global +Detach__16CDActionTrackCarPQ33UTL3COM8IUnknown = .text:0x80082B24; // type:function size:0x24 scope:global +IsAttached__C16CDActionTrackCarPCQ33UTL3COM8IUnknown = .text:0x80082B48; // type:function size:0x24 scope:global +OnAttached__16CDActionTrackCarP11IAttachable = .text:0x80082B6C; // type:function size:0x4 scope:global +GetAttachments__C16CDActionTrackCar = .text:0x80082B70; // type:function size:0x8 scope:global +GetName__C16CDActionTrackCop = .text:0x80082B78; // type:function size:0x74 scope:global +GetNext__C16CDActionTrackCop = .text:0x80082BEC; // type:function size:0x2C scope:global +GetMover__16CDActionTrackCop = .text:0x80082C18; // type:function size:0x8 scope:global +SetSpecial__16CDActionTrackCopf = .text:0x80082C20; // type:function size:0x4 scope:global +Attach__16CDActionTrackCopPQ33UTL3COM8IUnknown = .text:0x80082C24; // type:function size:0x24 scope:global +Detach__16CDActionTrackCopPQ33UTL3COM8IUnknown = .text:0x80082C48; // type:function size:0x24 scope:global +IsAttached__C16CDActionTrackCopPCQ33UTL3COM8IUnknown = .text:0x80082C6C; // type:function size:0x24 scope:global +OnAttached__16CDActionTrackCopP11IAttachable = .text:0x80082C90; // type:function size:0x4 scope:global +GetAttachments__C16CDActionTrackCop = .text:0x80082C94; // type:function size:0x8 scope:global +GetName__C16CDActionShowcase = .text:0x80082C9C; // type:function size:0x74 scope:global +GetNext__C16CDActionShowcase = .text:0x80082D10; // type:function size:0x2C scope:global +GetMover__16CDActionShowcase = .text:0x80082D3C; // type:function size:0x8 scope:global +SetSpecial__16CDActionShowcasef = .text:0x80082D44; // type:function size:0x4 scope:global +Attach__16CDActionShowcasePQ33UTL3COM8IUnknown = .text:0x80082D48; // type:function size:0x24 scope:global +Detach__16CDActionShowcasePQ33UTL3COM8IUnknown = .text:0x80082D6C; // type:function size:0x24 scope:global +IsAttached__C16CDActionShowcasePCQ33UTL3COM8IUnknown = .text:0x80082D90; // type:function size:0x24 scope:global +OnAttached__16CDActionShowcaseP11IAttachable = .text:0x80082DB4; // type:function size:0x4 scope:global +GetAttachments__C16CDActionShowcase = .text:0x80082DB8; // type:function size:0x8 scope:global +GetName__C13CDActionDebug = .text:0x80082DC0; // type:function size:0x74 scope:global +GetNext__C13CDActionDebug = .text:0x80082E34; // type:function size:0x84 scope:global +GetMover__13CDActionDebug = .text:0x80082EB8; // type:function size:0x8 scope:global +SetSpecial__13CDActionDebugf = .text:0x80082EC0; // type:function size:0x4 scope:global +GetName__C11CDActionIce = .text:0x80082EC4; // type:function size:0x74 scope:global +GetNext__C11CDActionIce = .text:0x80082F38; // type:function size:0x84 scope:global +GetMover__11CDActionIce = .text:0x80082FBC; // type:function size:0x8 scope:global +SetSpecial__11CDActionIcef = .text:0x80082FC4; // type:function size:0x4 scope:global +Attach__11CDActionIcePQ33UTL3COM8IUnknown = .text:0x80082FC8; // type:function size:0x24 scope:global +Detach__11CDActionIcePQ33UTL3COM8IUnknown = .text:0x80082FEC; // type:function size:0x24 scope:global +IsAttached__C11CDActionIcePCQ33UTL3COM8IUnknown = .text:0x80083010; // type:function size:0x24 scope:global +OnAttached__11CDActionIceP11IAttachable = .text:0x80083034; // type:function size:0x4 scope:global +GetAttachments__C11CDActionIce = .text:0x80083038; // type:function size:0x8 scope:global +GetName__C21CDActionDebugWatchCar = .text:0x80083040; // type:function size:0x74 scope:global +GetNext__C21CDActionDebugWatchCar = .text:0x800830B4; // type:function size:0x5C scope:global +GetMover__21CDActionDebugWatchCar = .text:0x80083110; // type:function size:0x8 scope:global +SetSpecial__21CDActionDebugWatchCarf = .text:0x80083118; // type:function size:0x4 scope:global +_._t8tAverage1Z8bVector3 = .text:0x8008311C; // type:function size:0x7C scope:global +Recalculate__t8tAverage1Z8bVector3 = .text:0x80083198; // type:function size:0x124 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16UiUi = .text:0x800832BC; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16PPQ28CameraAI8DirectorUi = .text:0x800832C4; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16Ui = .text:0x800832C8; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16 = .text:0x800832D0; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZPQ28CameraAI8Directori16 = .text:0x800832D8; // type:function size:0xC scope:global +_._Q33UTL11Collectionst8_Storage2ZPQ28CameraAI8Directori2 = .text:0x800832E4; // type:function size:0xB4 scope:global +_._Q43UTL11Collectionst8Listable2Z14IDebugWatchCari2_4List = .text:0x80083398; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP14IDebugWatchCari16Ui = .text:0x8008344C; // type:function size:0x4 scope:global +_._11AverageBase = .text:0x80083450; // type:function size:0x54 scope:global +Recalculate__11AverageBase = .text:0x800834A4; // type:function size:0x4 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP14IDebugWatchCari2i16UiUi = .text:0x800834A8; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP14IDebugWatchCari2i16PP14IDebugWatchCarUi = .text:0x800834B0; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP14IDebugWatchCari2i16Ui = .text:0x800834B4; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP14IDebugWatchCari2i16 = .text:0x800834BC; // type:function size:0x8 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP14IDebugWatchCari16Ui = .text:0x800834C4; // type:function size:0x20 scope:global +_._Q23UTLt6Vector2ZP14IDebugWatchCari16 = .text:0x800834E4; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP14IDebugWatchCari2i16 = .text:0x80083518; // type:function size:0xB4 scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP14IDebugWatchCari16 = .text:0x800835CC; // type:function size:0xC scope:global +_GLOBAL_.I._6Camera.StopUpdating = .text:0x800835D8; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x80083604; // type:label scope:local +__static_initialization_and_destruction_0 = .text:0x80083604; // type:function size:0x50 scope:local +_GLOBAL_.I.__10DebugGraphPcfffiffb = .text:0x80083654; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x80083680; // type:label scope:local +GetForce__CQ38Dynamics9Collision8FrictionRC8UVector3fT1R8UVector3 = .text:0x80083680; // type:function size:0x150 scope:global +__Q38Dynamics9Collision6MomentRCQ25UMath7Matrix4fRCQ25UMath7Vector3N43 = .text:0x800837D0; // type:function size:0x1B8 scope:global +__Q38Dynamics9Collision6MomentPCQ28Dynamics7IEntity = .text:0x80083988; // type:function size:0x29C scope:global +SetInertia__Q38Dynamics9Collision6MomentRCQ25UMath7Vector3 = .text:0x80083C24; // type:function size:0x1C scope:global +SetMass__Q38Dynamics9Collision6Momentf = .text:0x80083C40; // type:function size:0x18 scope:global +SetCG__Q38Dynamics9Collision6MomentRCQ25UMath7Vector3 = .text:0x80083C58; // type:function size:0x1C scope:global +React__Q38Dynamics9Collision6MomentRCQ38Dynamics9Collision5Planei = .text:0x80083C74; // type:function size:0xA1C scope:global +React__Q38Dynamics9Collision6MomentRQ38Dynamics9Collision6MomentRCQ38Dynamics9Collision5Planei = .text:0x80084690; // type:function size:0x1624 scope:global +React__Q38Dynamics9Collision6MomentRQ38Dynamics9Collision6MomentRCQ38Dynamics9Collision5Jointi = .text:0x80085CB4; // type:function size:0x1120 scope:global +React__Q38Dynamics9Collision6MomentRCQ38Dynamics9Collision5Jointi = .text:0x80086DD4; // type:function size:0x83C scope:global +Constrain__Q28Dynamics12ArticulationPQ38Dynamics12Articulation8HJOINT__PQ28Dynamics7IEntityRCQ25UMath7Matrix4ffRCQ25UMath7Vector3Q38Dynamics12Articulation11eConstraint = .text:0x80087610; // type:function size:0x58 scope:global +IsJoined__Q28Dynamics12ArticulationPCQ28Dynamics7IEntityT1 = .text:0x80087668; // type:function size:0x7C scope:global +IsJoined__Q28Dynamics12ArticulationPCQ28Dynamics7IEntity = .text:0x800876E4; // type:function size:0x64 scope:global +Resolve__Q28Dynamics12Articulationv = .text:0x80087748; // type:function size:0x48 scope:global +Create__Q28Dynamics12ArticulationPQ28Dynamics7IEntityRCQ25UMath7Vector3T1T2Q38Dynamics12Articulation11eJointFlags = .text:0x80087790; // type:function size:0x90 scope:global +Release__Q28Dynamics12ArticulationPQ28Dynamics7IEntity = .text:0x80087820; // type:function size:0x80 scope:global +__Q38Dynamics12Articulation5JointPQ28Dynamics7IEntityRCQ25UMath7Vector3T1T2Q38Dynamics12Articulation11eJointFlags = .text:0x800878A0; // type:function size:0xDC scope:global +OnDebugDraw__Q38Dynamics12Articulation5Joint = .text:0x8008797C; // type:function size:0x4 scope:global +_._Q38Dynamics12Articulation5Joint = .text:0x80087980; // type:function size:0xF8 scope:global +Owns__CQ38Dynamics12Articulation5JointPCQ28Dynamics7IEntity = .text:0x80087A78; // type:function size:0x28 scope:global +Resolve__Q38Dynamics12Articulation5Joint = .text:0x80087AA0; // type:function size:0x514 scope:global +SetFulcrum__Q38Dynamics12Articulation5LeverRC8UVector3b = .text:0x80087FB4; // type:function size:0x3C8 scope:global +OnDebugDraw__Q38Dynamics12Articulation5Lever = .text:0x8008837C; // type:function size:0x4 scope:global +AddConstraint__Q38Dynamics12Articulation5JointPQ28Dynamics7IEntityRCQ25UMath7Matrix4ffRCQ25UMath7Vector3Q38Dynamics12Articulation11eConstraint = .text:0x80088380; // type:function size:0x110 scope:global +__Q38Dynamics12Articulation10ConstraintRCQ25UMath7Matrix4ffRQ38Dynamics12Articulation5LeverT4RCQ25UMath7Vector3Q38Dynamics12Articulation11eConstraint = .text:0x80088490; // type:function size:0x1A0 scope:global +Resolve__Q38Dynamics12Articulation10ConstraintRC8UVector3 = .text:0x80088630; // type:function size:0x628 scope:global +Rotate__Q38Dynamics12Articulation10ConstraintRQ38Dynamics12Articulation5LeverRCQ38Dynamics12Articulation10QuaternionT2RC8UVector3f = .text:0x80088C58; // type:function size:0x310 scope:global +OnDebugDraw__Q38Dynamics12Articulation10Constraint = .text:0x80088F68; // type:function size:0x4 scope:global +React__Q38Dynamics12Articulation10ConstraintRC8UVector3N21fRCQ38Dynamics12Articulation10QuaternionT5 = .text:0x80088F6C; // type:function size:0x3A8 scope:global +__Q38Dynamics9Collision8Geometry = .text:0x80089314; // type:function size:0xC scope:global +__Q38Dynamics9Collision8GeometryRCQ25UMath7Matrix4RCQ25UMath7Vector3T2Q48Dynamics9Collision8Geometry5ShapeT2 = .text:0x80089320; // type:function size:0x30 scope:global +Move__Q38Dynamics9Collision8GeometryRCQ25UMath7Vector3 = .text:0x80089350; // type:function size:0x48 scope:global +Set__Q38Dynamics9Collision8GeometryRCQ25UMath7Matrix4RCQ25UMath7Vector3T2Q48Dynamics9Collision8Geometry5ShapeT2 = .text:0x80089398; // type:function size:0x2C0 scope:global +BoxVsBox__Q38Dynamics9Collision8GeometryPCQ38Dynamics9Collision8GeometryT1PQ38Dynamics9Collision8Geometry = .text:0x80089658; // type:function size:0x6F8 scope:global +SphereVsBox__Q38Dynamics9Collision8GeometryPCQ38Dynamics9Collision8GeometryT1PQ38Dynamics9Collision8Geometry = .text:0x80089D50; // type:function size:0x768 scope:global +SphereVsSphere__Q38Dynamics9Collision8GeometryPCQ38Dynamics9Collision8GeometryT1PQ38Dynamics9Collision8Geometry = .text:0x8008A4B8; // type:function size:0x14C scope:global +BoxVsSphere__Q38Dynamics9Collision8GeometryPCQ38Dynamics9Collision8GeometryT1PQ38Dynamics9Collision8Geometry = .text:0x8008A604; // type:function size:0x2C scope:global +FindIntersection__Q38Dynamics9Collision8GeometryPCQ38Dynamics9Collision8GeometryT1PQ38Dynamics9Collision8Geometry = .text:0x8008A630; // type:function size:0x7C scope:global +clear__Q24_STLt10_List_base2ZPQ38Dynamics12Articulation10ConstraintZQ33UTL3Stdt9Allocator2ZPQ38Dynamics12Articulation10ConstraintZ10_type_list = .text:0x8008A6AC; // type:function size:0x78 scope:global +__static_initialization_and_destruction_0 = .text:0x8008A724; // type:function size:0x60 scope:local +_GLOBAL_.I.GetForce__CQ38Dynamics9Collision8FrictionRC8UVector3fT1R8UVector3 = .text:0x8008A784; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x8008A7B0; // type:label scope:local +Constructor__Q29EAGL4Anim8AnimBankPvPQ25EAGL413DynamicLoaderPCc = .text:0x8008A7B0; // type:function size:0x68 scope:global +Destructor__Q29EAGL4Anim8AnimBankPv = .text:0x8008A818; // type:function size:0x4 scope:global +GetAnimIndex__Q29EAGL4Anim8AnimBankPCc = .text:0x8008A81C; // type:function size:0x84 scope:global +NewFnAnim__CQ29EAGL4Anim8AnimBanki = .text:0x8008A8A0; // type:function size:0x2C scope:global +NewFnAnim__Q29EAGL4Anim8AnimBankPQ29EAGL4Anim13AnimMemoryMap = .text:0x8008A8CC; // type:function size:0x100 scope:global +FindAttribute__CQ29EAGL4Anim14AttributeBlockGQ29EAGL4Anim11AttributeId = .text:0x8008A9CC; // type:function size:0x5C scope:global +GetAttribute__CQ29EAGL4Anim14AttributeBlockGQ29EAGL4Anim11AttributeIdRPv = .text:0x8008AA28; // type:function size:0x54 scope:global +_._Q29EAGL4Anim17FnCompoundChannel = .text:0x8008AA7C; // type:function size:0xD8 scope:global +SetAnimMemoryMap__Q29EAGL4Anim17FnCompoundChannelPQ29EAGL4Anim13AnimMemoryMap = .text:0x8008AB54; // type:function size:0xA4 scope:global +EvalEvent__Q29EAGL4Anim17FnCompoundChannelffPPQ29EAGL4Anim12EventHandlerPv = .text:0x8008ABF8; // type:function size:0x17C scope:global +EvalSQT__Q29EAGL4Anim17FnCompoundChannelfPfPCQ29EAGL4Anim8BoneMask = .text:0x8008AD74; // type:function size:0x168 scope:global +EvalPose__Q29EAGL4Anim17FnCompoundChannelfPCQ29EAGL4Anim15PosePaletteBankPf = .text:0x8008AEDC; // type:function size:0x168 scope:global +EvalWeights__Q29EAGL4Anim17FnCompoundChannelfPf = .text:0x8008B044; // type:function size:0x160 scope:global +EvalVel2D__Q29EAGL4Anim17FnCompoundChannelfPf = .text:0x8008B1A4; // type:function size:0x160 scope:global +EvalState__Q29EAGL4Anim17FnCompoundChannelfPQ29EAGL4Anim5State = .text:0x8008B304; // type:function size:0x160 scope:global +FindTime__Q29EAGL4Anim17FnCompoundChannelRCQ29EAGL4Anim9StateTestfRf = .text:0x8008B464; // type:function size:0x118 scope:global +EvalPhase__Q29EAGL4Anim17FnCompoundChannelfRQ29EAGL4Anim10PhaseValue = .text:0x8008B57C; // type:function size:0xE0 scope:global +InitAnimMemoryMap__Q29EAGL4Anim15CompoundChannelPQ29EAGL4Anim13AnimMemoryMap = .text:0x8008B65C; // type:function size:0x64 scope:global +GetPhaseChan__Q29EAGL4Anim17FnCompoundChannel = .text:0x8008B6C0; // type:function size:0xF0 scope:global +UseFPS__Q29EAGL4Anim17FnCompoundChannelb = .text:0x8008B7B0; // type:function size:0x90 scope:global +HandleEvents__Q29EAGL4Anim16CsisEventChannelfPPQ29EAGL4Anim12EventHandlerPvRQ29EAGL4Anim9CsisEvent = .text:0x8008B840; // type:function size:0x188 scope:global +Eval__Q29EAGL4Anim16CsisEventChannelffRiRfPPQ29EAGL4Anim12EventHandlerPv = .text:0x8008B9C8; // type:function size:0x1A0 scope:global +_._Q29EAGL4Anim11FnDeltaChan = .text:0x8008BB68; // type:function size:0xC0 scope:global +SetAnimMemoryMap__Q29EAGL4Anim11FnDeltaChanPQ29EAGL4Anim13AnimMemoryMap = .text:0x8008BC28; // type:function size:0xD0 scope:global +EvalToPrevValues__Q29EAGL4Anim11FnDeltaChani = .text:0x8008BCF8; // type:function size:0x74 scope:global +EvalToPrevValues__Q29EAGL4Anim11FnDeltaChaniiiPCUs = .text:0x8008BD6C; // type:function size:0x78 scope:global +Eval__Q29EAGL4Anim15FnDeltaLerpChanffPf = .text:0x8008BDE4; // type:function size:0xF8 scope:global +EvalSQT__Q29EAGL4Anim15FnDeltaLerpChanfPfPCQ29EAGL4Anim8BoneMask = .text:0x8008BEDC; // type:function size:0x13C scope:global +EvalSQTMask__Q29EAGL4Anim15FnDeltaLerpChanfPfPCQ29EAGL4Anim8BoneMask = .text:0x8008C018; // type:function size:0x200 scope:global +EvalWeights__Q29EAGL4Anim15FnDeltaLerpChanfPf = .text:0x8008C218; // type:function size:0x3C scope:global +EvalVel2D__Q29EAGL4Anim15FnDeltaLerpChanfPf = .text:0x8008C254; // type:function size:0x3C scope:global +Eval__Q29EAGL4Anim15FnDeltaQuatChanffPf = .text:0x8008C290; // type:function size:0x120 scope:global +EvalSQT__Q29EAGL4Anim15FnDeltaQuatChanfPfPCQ29EAGL4Anim8BoneMask = .text:0x8008C3B0; // type:function size:0x16C scope:global +EvalSQTMask__Q29EAGL4Anim15FnDeltaQuatChanfPfPCQ29EAGL4Anim8BoneMask = .text:0x8008C51C; // type:function size:0x228 scope:global +_._Q29EAGL4Anim14FnKeyDeltaChan = .text:0x8008C744; // type:function size:0xC0 scope:global +SetAnimMemoryMap__Q29EAGL4Anim14FnKeyDeltaChanPQ29EAGL4Anim13AnimMemoryMap = .text:0x8008C804; // type:function size:0xD0 scope:global +EvalToPrevValues__Q29EAGL4Anim14FnKeyDeltaChani = .text:0x8008C8D4; // type:function size:0x54 scope:global +EvalToPrevValues__Q29EAGL4Anim14FnKeyDeltaChaniiiPCUs = .text:0x8008C928; // type:function size:0x58 scope:global +FindLowerKey__Q29EAGL4Anim14FnKeyDeltaChanf = .text:0x8008C980; // type:function size:0xF0 scope:global +Eval__Q29EAGL4Anim13FnKeyLerpChanffPf = .text:0x8008CA70; // type:function size:0x3C scope:global +EvalSQT__Q29EAGL4Anim13FnKeyLerpChanfPfPCQ29EAGL4Anim8BoneMask = .text:0x8008CAAC; // type:function size:0x1F0 scope:global +EvalSQTMask__Q29EAGL4Anim13FnKeyLerpChanfPfPCQ29EAGL4Anim8BoneMask = .text:0x8008CC9C; // type:function size:0x2B0 scope:global +Eval__Q29EAGL4Anim13FnKeyQuatChanffPf = .text:0x8008CF4C; // type:function size:0x3C scope:global +EvalSQT__Q29EAGL4Anim13FnKeyQuatChanfPfPCQ29EAGL4Anim8BoneMask = .text:0x8008CF88; // type:function size:0x39C scope:global +EvalSQTMask__Q29EAGL4Anim13FnKeyQuatChanfPfPCQ29EAGL4Anim8BoneMask = .text:0x8008D324; // type:function size:0x468 scope:global +DecompressValues__CQ29EAGL4Anim19DeltaCompressedDataiiiiPCfPf = .text:0x8008D78C; // type:function size:0x4DC scope:global +DecompressValuesIndexed__CQ29EAGL4Anim19DeltaCompressedDataiiiiPCfPfiPUsf = .text:0x8008DC68; // type:function size:0x3B4 scope:global +DecompressValues__CQ29EAGL4Anim19DeltaCompressedDataiiiPCfPfiPCUs = .text:0x8008E01C; // type:function size:0x2B4 scope:global +DecompressValuesIndexed__CQ29EAGL4Anim19DeltaCompressedDataiiPCfPfiPUsfiPCUs = .text:0x8008E2D0; // type:function size:0x2E4 scope:global +SetMallocOverride__13EAGL4InternalPFUiPCc_Pv = .text:0x8008E5B4; // type:function size:0xC scope:global +SetFreeOverride__13EAGL4InternalPFPvUi_v = .text:0x8008E5C0; // type:function size:0xC scope:global +DefaultMalloc__13EAGL4InternalUiPCc = .text:0x8008E5CC; // type:function size:0x2C scope:local +DefaultFree__13EAGL4InternalPvUi = .text:0x8008E5F8; // type:function size:0x2C scope:local +AddType__Q25EAGL415ConstructorPoolPCcPFPvPQ25EAGL413DynamicLoaderPCc_vPFPv_v = .text:0x8008E624; // type:function size:0x44 scope:global +FindConstructor__Q25EAGL415ConstructorPoolPCc = .text:0x8008E668; // type:function size:0x34 scope:global +FindDestructor__Q25EAGL415ConstructorPoolPCc = .text:0x8008E69C; // type:function size:0x38 scope:global +FindConstructor__Q25EAGL427RuntimeAllocConstructorPoolPCc = .text:0x8008E6D4; // type:function size:0x34 scope:global +FindDestructor__Q25EAGL427RuntimeAllocConstructorPoolPCc = .text:0x8008E708; // type:function size:0x38 scope:global +elfhash__5EAGL4PCc = .text:0x8008E740; // type:function size:0x4C scope:local +__Q25EAGL413DynamicLoaderPvUiPFPCcRb_Pv = .text:0x8008E78C; // type:function size:0x78 scope:global +DoVersionCheck__Q25EAGL413DynamicLoader = .text:0x8008E804; // type:function size:0x8 scope:global +_._Q25EAGL413DynamicLoader = .text:0x8008E80C; // type:function size:0x80 scope:global +Release__Q25EAGL413DynamicLoader = .text:0x8008E88C; // type:function size:0xDC scope:global +RunConstructors__Q25EAGL413DynamicLoader = .text:0x8008E968; // type:function size:0x148 scope:global +RunDestructors__Q25EAGL413DynamicLoader = .text:0x8008EAB0; // type:function size:0xD4 scope:global +Resolve__Q25EAGL413DynamicLoader = .text:0x8008EB84; // type:function size:0x514 scope:global +Initialize__Q25EAGL413DynamicLoaderPFPCcRb_Pv = .text:0x8008F098; // type:function size:0x930 scope:global +GetCount__CQ25EAGL413DynamicLoader = .text:0x8008F9C8; // type:function size:0x1C scope:global +GetSymbol__CQ25EAGL413DynamicLoaderi = .text:0x8008F9E4; // type:function size:0x174 scope:global +dlsym__FPvPCc = .text:0x8008FB58; // type:function size:0xD4 scope:local +GetNextSymbol__CQ25EAGL413DynamicLoaderPCcRiRQ35EAGL413DynamicLoader6Symbol = .text:0x8008FC2C; // type:function size:0xB4 scope:global +GetNextAddr__CQ25EAGL413DynamicLoaderPCcRiRPv = .text:0x8008FCE0; // type:function size:0x58 scope:global +__Q25EAGL410SymbolPool = .text:0x8008FD38; // type:function size:0x24 scope:global +HashFunction__Q25EAGL410SymbolPoolPCc = .text:0x8008FD5C; // type:function size:0x4C scope:global +Insert__Q25EAGL410SymbolPoolPCcPv = .text:0x8008FDA8; // type:function size:0x1C4 scope:global +AddSymbol__Q25EAGL410SymbolPoolPCcPv = .text:0x8008FF6C; // type:function size:0x80 scope:global +Search__Q25EAGL410SymbolPoolPCcRb = .text:0x8008FFEC; // type:function size:0xD4 scope:global +PostMult__Q25EAGL49TransformRCQ25EAGL49Transform = .text:0x800900C0; // type:function size:0x98 scope:global +ExtractQuatTrans__CQ25EAGL49TransformPQ25UMath7Vector4T1 = .text:0x80090158; // type:function size:0x2F0 scope:global +BuildSQT__Q25EAGL49Transformffffffffff = .text:0x80090448; // type:function size:0x108 scope:global +MultMatrix__5EAGL4PCQ25UMath7Matrix4T1PQ25UMath7Matrix4 = .text:0x80090550; // type:function size:0x344 scope:global +GetAttributes__CQ29EAGL4Anim6FnAnim = .text:0x80090894; // type:function size:0x8 scope:global +__Q29EAGL4Anim15FnAnimMemoryMap = .text:0x8009089C; // type:function size:0x20 scope:global +_._Q29EAGL4Anim15FnAnimMemoryMap = .text:0x800908BC; // type:function size:0x34 scope:global +SetAnimMemoryMap__Q29EAGL4Anim15FnAnimMemoryMapPQ29EAGL4Anim13AnimMemoryMap = .text:0x800908F0; // type:function size:0x8 scope:global +GetAnimMemoryMap__Q29EAGL4Anim15FnAnimMemoryMap = .text:0x800908F8; // type:function size:0x8 scope:global +GetAnimMemoryMap__CQ29EAGL4Anim15FnAnimMemoryMap = .text:0x80090900; // type:function size:0x8 scope:global +GetTargetCheckSum__CQ29EAGL4Anim15FnAnimMemoryMap = .text:0x80090908; // type:function size:0xC scope:global +__Q29EAGL4Anim9FnDeltaF1 = .text:0x80090914; // type:function size:0x64 scope:global +Eval__Q29EAGL4Anim9FnDeltaF1ffPf = .text:0x80090978; // type:function size:0x3C scope:global +EvalSQT__Q29EAGL4Anim9FnDeltaF1fPfPCQ29EAGL4Anim8BoneMask = .text:0x800909B4; // type:function size:0x8A8 scope:global +EvalSQTMask__Q29EAGL4Anim9FnDeltaF1fPfPCQ29EAGL4Anim8BoneMask = .text:0x8009125C; // type:function size:0xA48 scope:global +EvalWeights__Q29EAGL4Anim9FnDeltaF1fPf = .text:0x80091CA4; // type:function size:0x3C scope:global +EvalVel2D__Q29EAGL4Anim9FnDeltaF1fPf = .text:0x80091CE0; // type:function size:0x3C scope:global +InitBuffersAsRequired__Q29EAGL4Anim9FnDeltaF1 = .text:0x80091D1C; // type:function size:0x1B0 scope:global +__Q29EAGL4Anim9FnDeltaF3 = .text:0x80091ECC; // type:function size:0x64 scope:global +Eval__Q29EAGL4Anim9FnDeltaF3ffPf = .text:0x80091F30; // type:function size:0x3C scope:global +EvalSQT__Q29EAGL4Anim9FnDeltaF3fPfPCQ29EAGL4Anim8BoneMask = .text:0x80091F6C; // type:function size:0xCFC scope:global +EvalSQTMask__Q29EAGL4Anim9FnDeltaF3fPfPCQ29EAGL4Anim8BoneMask = .text:0x80092C68; // type:function size:0xE90 scope:global +EvalWeights__Q29EAGL4Anim9FnDeltaF3fPf = .text:0x80093AF8; // type:function size:0x3C scope:global +EvalVel2D__Q29EAGL4Anim9FnDeltaF3fPf = .text:0x80093B34; // type:function size:0x3C scope:global +InitBuffersAsRequired__Q29EAGL4Anim9FnDeltaF3 = .text:0x80093B70; // type:function size:0x200 scope:global +__Q29EAGL4Anim8FnDeltaQ = .text:0x80093D70; // type:function size:0x6C scope:global +_._Q29EAGL4Anim8FnDeltaQ = .text:0x80093DDC; // type:function size:0x94 scope:global +SetAnimMemoryMap__Q29EAGL4Anim8FnDeltaQPQ29EAGL4Anim13AnimMemoryMap = .text:0x80093E70; // type:function size:0x8 scope:global +GetLength__CQ29EAGL4Anim8FnDeltaQRf = .text:0x80093E78; // type:function size:0x64 scope:global +Eval__Q29EAGL4Anim8FnDeltaQffPf = .text:0x80093EDC; // type:function size:0x40 scope:global +EvalSQT__Q29EAGL4Anim8FnDeltaQfPfPCQ29EAGL4Anim8BoneMask = .text:0x80093F1C; // type:function size:0x1374 scope:global +EvalSQTMasked__Q29EAGL4Anim8FnDeltaQfPCQ29EAGL4Anim8BoneMaskPf = .text:0x80095290; // type:function size:0x1524 scope:global +__Q29EAGL4Anim12FnDeltaQFast = .text:0x800967B4; // type:function size:0x7C scope:global +_._Q29EAGL4Anim12FnDeltaQFast = .text:0x80096830; // type:function size:0x94 scope:global +SetAnimMemoryMap__Q29EAGL4Anim12FnDeltaQFastPQ29EAGL4Anim13AnimMemoryMap = .text:0x800968C4; // type:function size:0x274 scope:global +GetLength__CQ29EAGL4Anim12FnDeltaQFastRf = .text:0x80096B38; // type:function size:0x64 scope:global +Eval__Q29EAGL4Anim12FnDeltaQFastffPf = .text:0x80096B9C; // type:function size:0x3C scope:global +EvalSQT__Q29EAGL4Anim12FnDeltaQFastfPfPCQ29EAGL4Anim8BoneMask = .text:0x80096BD8; // type:function size:0xAE0 scope:global +UpdateNextQs__Q29EAGL4Anim12FnDeltaQFastPQ29EAGL4Anim10DeltaQFastiii = .text:0x800976B8; // type:function size:0x334 scope:global +EvalSQTMask__Q29EAGL4Anim12FnDeltaQFastfPfPCQ29EAGL4Anim8BoneMask = .text:0x800979EC; // type:function size:0x84C scope:global +AddDeltaMask__Q29EAGL4Anim12FnDeltaQFastPQ29EAGL4Anim18DeltaQFastPhysicalPQ29EAGL4Anim10DeltaQFastiiPQ25UMath7Vector4PCQ29EAGL4Anim8BoneMask = .text:0x80098238; // type:function size:0x210 scope:global +SubDeltaMask__Q29EAGL4Anim12FnDeltaQFastPQ29EAGL4Anim18DeltaQFastPhysicalPQ29EAGL4Anim10DeltaQFastiiPQ25UMath7Vector4PCQ29EAGL4Anim8BoneMask = .text:0x80098448; // type:function size:0x208 scope:global +UpdateNextQsMask__Q29EAGL4Anim12FnDeltaQFastPQ29EAGL4Anim10DeltaQFastiiiPCQ29EAGL4Anim8BoneMask = .text:0x80098650; // type:function size:0x39C scope:global +__Q29EAGL4Anim14FnDeltaSingleQ = .text:0x800989EC; // type:function size:0x6C scope:global +_._Q29EAGL4Anim14FnDeltaSingleQ = .text:0x80098A58; // type:function size:0xD4 scope:global +SetAnimMemoryMap__Q29EAGL4Anim14FnDeltaSingleQPQ29EAGL4Anim13AnimMemoryMap = .text:0x80098B2C; // type:function size:0x8 scope:global +GetLength__CQ29EAGL4Anim14FnDeltaSingleQRf = .text:0x80098B34; // type:function size:0x64 scope:global +Eval__Q29EAGL4Anim14FnDeltaSingleQffPf = .text:0x80098B98; // type:function size:0x40 scope:global +QuatMultXxYxZ__FRCQ25UMath7Vector4N20RQ25UMath7Vector4 = .text:0x80098BD8; // type:function size:0x94 scope:local +QuatMultXxQ__FRCQ25UMath7Vector4T0RQ25UMath7Vector4 = .text:0x80098C6C; // type:function size:0x7C scope:local +QuatMultQxZ__FRCQ25UMath7Vector4T0RQ25UMath7Vector4 = .text:0x80098CE8; // type:function size:0x78 scope:local +EvalSQT__Q29EAGL4Anim14FnDeltaSingleQfPfPCQ29EAGL4Anim8BoneMask = .text:0x80098D60; // type:function size:0x1444 scope:global +EvalSQTMasked__Q29EAGL4Anim14FnDeltaSingleQfPCQ29EAGL4Anim8BoneMaskPf = .text:0x8009A1A4; // type:function size:0x151C scope:global +Eval__Q29EAGL4Anim14FnEventBlenderffPf = .text:0x8009B6C0; // type:function size:0x11C scope:global +__Q29EAGL4Anim10FnPoseAnim = .text:0x8009B7DC; // type:function size:0x4C scope:global +SetAnimMemoryMap__Q29EAGL4Anim10FnPoseAnimPQ29EAGL4Anim13AnimMemoryMap = .text:0x8009B828; // type:function size:0x8 scope:global +GetLength__CQ29EAGL4Anim10FnPoseAnimRf = .text:0x8009B830; // type:function size:0x3C scope:global +EvalPose__Q29EAGL4Anim10FnPoseAnimfPCQ29EAGL4Anim15PosePaletteBankPf = .text:0x8009B86C; // type:function size:0x504 scope:global +Blend__Q29EAGL4Anim13FnPoseBlenderifPCfT3PfPCQ29EAGL4Anim8BoneMask = .text:0x8009BD70; // type:function size:0x42C scope:global +EvalSQT__Q29EAGL4Anim13FnPoseBlenderfPfPCQ29EAGL4Anim8BoneMask = .text:0x8009C19C; // type:function size:0xB40 scope:global +Eval__Q29EAGL4Anim13FnPoseBlenderffPf = .text:0x8009CCDC; // type:function size:0x650 scope:global +Eval__Q29EAGL4Anim16FnRawPoseChannelffPf = .text:0x8009D32C; // type:function size:0x30 scope:global +EvalSQT__Q29EAGL4Anim16FnRawPoseChannelfPfPCQ29EAGL4Anim8BoneMask = .text:0x8009D35C; // type:function size:0x30 scope:global +length__FPf = .text:0x8009D38C; // type:function size:0x30 scope:global +__Q29EAGL4Anim12FnRunBlender = .text:0x8009D3BC; // type:function size:0x78 scope:global +_._Q29EAGL4Anim12FnRunBlender = .text:0x8009D434; // type:function size:0x1E0 scope:global +EvalSQT__Q29EAGL4Anim12FnRunBlenderfPfPCQ29EAGL4Anim8BoneMask = .text:0x8009D614; // type:function size:0x250 scope:global +Eval__Q29EAGL4Anim12FnRunBlenderffPf = .text:0x8009D864; // type:function size:0x3C scope:global +SetWeight__Q29EAGL4Anim12FnRunBlenderf = .text:0x8009D8A0; // type:function size:0x550 scope:global +CycleTime__CQ29EAGL4Anim12FnRunBlenderfff = .text:0x8009DDF0; // type:function size:0xB8 scope:global +ComputeCycleIdx__CQ29EAGL4Anim12FnRunBlenderfff = .text:0x8009DEA8; // type:function size:0x60 scope:global +EvalPhase__Q29EAGL4Anim12FnRunBlenderfRQ29EAGL4Anim10PhaseValue = .text:0x8009DF08; // type:function size:0x8 scope:global +EvalVel2D__Q29EAGL4Anim12FnRunBlenderfPf = .text:0x8009DF10; // type:function size:0x1C0 scope:global +FindMatchTime__CQ29EAGL4Anim12FnRunBlenderRCQ29EAGL4Anim15MatchPhaseInputRf = .text:0x8009E0D0; // type:function size:0x2D0 scope:global +ComputeAlignQ__CQ29EAGL4Anim12FnRunBlenderPfT1RQ25UMath7Vector4 = .text:0x8009E3A0; // type:function size:0xF4 scope:global +AlignCycleBeginEnd__Q29EAGL4Anim12FnRunBlenderi = .text:0x8009E494; // type:function size:0x1E4 scope:global +AlignRootQ__CQ29EAGL4Anim12FnRunBlenderPf = .text:0x8009E678; // type:function size:0xB0 scope:global +AlignVel__CQ29EAGL4Anim12FnRunBlenderPf = .text:0x8009E728; // type:function size:0xC4 scope:global +BlendVel__CQ29EAGL4Anim12FnRunBlenderffPf = .text:0x8009E7EC; // type:function size:0x16C scope:global +BlendFacing__CQ29EAGL4Anim12FnRunBlenderffPf = .text:0x8009E958; // type:function size:0x358 scope:global +GetFrequency__CQ29EAGL4Anim12FnRunBlender = .text:0x8009ECB0; // type:function size:0x8 scope:global +ComputeRootQ__CQ29EAGL4Anim12FnRunBlenderffRQ25UMath7Vector4 = .text:0x8009ECB8; // type:function size:0x24C scope:global +ComputeBeginRootQ__CQ29EAGL4Anim12FnRunBlenderRQ25UMath7Vector4 = .text:0x8009EF04; // type:function size:0x2C scope:global +ComputeEndRootQ__CQ29EAGL4Anim12FnRunBlenderRQ25UMath7Vector4 = .text:0x8009EF30; // type:function size:0x88 scope:global +__Q29EAGL4Anim13FnStatelessF3 = .text:0x8009EFB8; // type:function size:0x44 scope:global +_._Q29EAGL4Anim13FnStatelessF3 = .text:0x8009EFFC; // type:function size:0x60 scope:global +SetAnimMemoryMap__Q29EAGL4Anim13FnStatelessF3PQ29EAGL4Anim13AnimMemoryMap = .text:0x8009F05C; // type:function size:0x8 scope:global +GetLength__CQ29EAGL4Anim13FnStatelessF3Rf = .text:0x8009F064; // type:function size:0x64 scope:global +Eval__Q29EAGL4Anim13FnStatelessF3ffPf = .text:0x8009F0C8; // type:function size:0x3C scope:global +EvalSQT__Q29EAGL4Anim13FnStatelessF3fPfPCQ29EAGL4Anim8BoneMask = .text:0x8009F104; // type:function size:0x5BC scope:global +EvalSQTMask__Q29EAGL4Anim13FnStatelessF3fPfPCQ29EAGL4Anim8BoneMaskbif = .text:0x8009F6C0; // type:function size:0x410 scope:global +EvalSQTfast__Q29EAGL4Anim13FnStatelessF3fPfPCQ29EAGL4Anim8BoneMaskbif = .text:0x8009FAD0; // type:function size:0x35C scope:global +UseFPS__Q29EAGL4Anim13FnStatelessF3b = .text:0x8009FE2C; // type:function size:0x98 scope:global +__Q29EAGL4Anim12FnStatelessQ = .text:0x8009FEC4; // type:function size:0x4C scope:global +_._Q29EAGL4Anim12FnStatelessQ = .text:0x8009FF10; // type:function size:0x60 scope:global +SetAnimMemoryMap__Q29EAGL4Anim12FnStatelessQPQ29EAGL4Anim13AnimMemoryMap = .text:0x8009FF70; // type:function size:0x8 scope:global +GetLength__CQ29EAGL4Anim12FnStatelessQRf = .text:0x8009FF78; // type:function size:0x64 scope:global +Eval__Q29EAGL4Anim12FnStatelessQffPf = .text:0x8009FFDC; // type:function size:0x3C scope:global +EvalSQT__Q29EAGL4Anim12FnStatelessQfPfPCQ29EAGL4Anim8BoneMask = .text:0x800A0018; // type:function size:0x5C8 scope:global +EvalSQTMask__Q29EAGL4Anim12FnStatelessQfPfPCQ29EAGL4Anim8BoneMaskbif = .text:0x800A05E0; // type:function size:0x37C scope:global +UseFPS__Q29EAGL4Anim12FnStatelessQb = .text:0x800A095C; // type:function size:0x98 scope:global +__Q29EAGL4Anim13FnTurnBlender = .text:0x800A09F4; // type:function size:0x64 scope:global +_._Q29EAGL4Anim13FnTurnBlender = .text:0x800A0A58; // type:function size:0xA8 scope:global +EvalSQT__Q29EAGL4Anim13FnTurnBlenderfPfPCQ29EAGL4Anim8BoneMask = .text:0x800A0B00; // type:function size:0x1C0 scope:global +Eval__Q29EAGL4Anim13FnTurnBlenderffPf = .text:0x800A0CC0; // type:function size:0x3C scope:global +SetWeight__Q29EAGL4Anim13FnTurnBlenderf = .text:0x800A0CFC; // type:function size:0x1DC scope:global +EvalPhase__Q29EAGL4Anim13FnTurnBlenderfRQ29EAGL4Anim10PhaseValue = .text:0x800A0ED8; // type:function size:0x8 scope:global +EvalVel2D__Q29EAGL4Anim13FnTurnBlenderfPf = .text:0x800A0EE0; // type:function size:0x194 scope:global +BlendVel__CQ29EAGL4Anim13FnTurnBlenderffPf = .text:0x800A1074; // type:function size:0x16C scope:global +ComputeCycleIdx__CQ29EAGL4Anim13FnTurnBlenderfff = .text:0x800A11E0; // type:function size:0x60 scope:global +ComputeAlignQ__CQ29EAGL4Anim13FnTurnBlenderPfT1RQ25UMath7Vector4 = .text:0x800A1240; // type:function size:0xF4 scope:global +AlignCycleBeginEnd__Q29EAGL4Anim13FnTurnBlenderi = .text:0x800A1334; // type:function size:0x1A4 scope:global +AlignRootQ__CQ29EAGL4Anim13FnTurnBlenderPf = .text:0x800A14D8; // type:function size:0xB0 scope:global +AlignVel__CQ29EAGL4Anim13FnTurnBlenderPf = .text:0x800A1588; // type:function size:0xC4 scope:global +BlendBeginFacing__CQ29EAGL4Anim13FnTurnBlenderPf = .text:0x800A164C; // type:function size:0x278 scope:global +CycleTime__CQ29EAGL4Anim13FnTurnBlenderfff = .text:0x800A18C4; // type:function size:0xB8 scope:global +BlendEndFacing__CQ29EAGL4Anim13FnTurnBlenderPf = .text:0x800A197C; // type:function size:0x278 scope:global +GetMemoryPoolUsageAux__Q29EAGL4Anim17MemoryPoolManager = .text:0x800A1BF4; // type:function size:0x18 scope:global +GetFreePoolSizeAux__Q29EAGL4Anim17MemoryPoolManager = .text:0x800A1C0C; // type:function size:0x48 scope:global +AllocateIdxBlock__Q29EAGL4Anim17MemoryPoolManagerUs = .text:0x800A1C54; // type:function size:0x40 scope:global +NewBlockByIdxAux__Q29EAGL4Anim17MemoryPoolManagerUs = .text:0x800A1C94; // type:function size:0x50 scope:global +NewBlockAux__Q29EAGL4Anim17MemoryPoolManagerUi = .text:0x800A1CE4; // type:function size:0x54 scope:global +ResetPoolAux__Q29EAGL4Anim17MemoryPoolManager = .text:0x800A1D38; // type:function size:0x5C scope:global +InitAux__Q29EAGL4Anim17MemoryPoolManagerUi = .text:0x800A1D94; // type:function size:0x80 scope:global +CleanupAux__Q29EAGL4Anim17MemoryPoolManager = .text:0x800A1E14; // type:function size:0x3C scope:global +NewFnAnimAux__Q29EAGL4Anim17MemoryPoolManagerQ39EAGL4Anim10AnimTypeId4Type = .text:0x800A1E50; // type:function size:0x3B8 scope:global +NewFnAnimAux__Q29EAGL4Anim17MemoryPoolManagerPQ29EAGL4Anim13AnimMemoryMap = .text:0x800A2208; // type:function size:0xB8 scope:global +InitAnimMemoryMapAux__Q29EAGL4Anim17MemoryPoolManagerPQ29EAGL4Anim13AnimMemoryMap = .text:0x800A22C0; // type:function size:0x9C scope:global +DeleteBlockByIdxAux__Q29EAGL4Anim17MemoryPoolManagerUsPv = .text:0x800A235C; // type:function size:0x1C scope:global +DeleteBlockAux__Q29EAGL4Anim17MemoryPoolManagerPv = .text:0x800A2378; // type:function size:0x20 scope:global +DeleteFnAnimAux__Q29EAGL4Anim17MemoryPoolManagerPQ29EAGL4Anim6FnAnim = .text:0x800A2398; // type:function size:0x88 scope:global +GetLength__CQ29EAGL4Anim11FnPhaseChanRf = .text:0x800A2420; // type:function size:0x3C scope:global +Eval__Q29EAGL4Anim11FnPhaseChanffPf = .text:0x800A245C; // type:function size:0x284 scope:global +SetAnimMemoryMap__Q29EAGL4Anim11FnPhaseChanPQ29EAGL4Anim13AnimMemoryMap = .text:0x800A26E0; // type:function size:0x70 scope:global +InitAnimMemoryMap__Q29EAGL4Anim8PoseAnimPQ29EAGL4Anim13AnimMemoryMap = .text:0x800A2750; // type:function size:0x44 scope:global +Eval__Q29EAGL4Anim15RawEventChannelffRiRfPPQ29EAGL4Anim12EventHandlerPv = .text:0x800A2794; // type:function size:0x1E0 scope:global +InitAnimMemoryMap__Q29EAGL4Anim14RawPoseChannelPQ29EAGL4Anim13AnimMemoryMap = .text:0x800A2974; // type:function size:0x190 scope:global +Eval__Q29EAGL4Anim14RawPoseChannelfPfbPCQ29EAGL4Anim8BoneMask = .text:0x800A2B04; // type:function size:0x28C scope:global +EvalFrame__Q29EAGL4Anim14RawPoseChanneliPfPCQ29EAGL4Anim8BoneMask = .text:0x800A2D90; // type:function size:0x1AC scope:global +Decode__CQ29EAGL4Anim14FnRawStateChanPUcT1 = .text:0x800A2F3C; // type:function size:0x154 scope:global +EvalState__Q29EAGL4Anim14FnRawStateChanfPQ29EAGL4Anim5State = .text:0x800A3090; // type:function size:0x1C8 scope:global +FindTime__Q29EAGL4Anim14FnRawStateChanRCQ29EAGL4Anim9StateTestfRf = .text:0x800A3258; // type:function size:0xE8 scope:global +FreeBuffer__Q29EAGL4Anim13ScratchBuffer = .text:0x800A3340; // type:function size:0x64 scope:global +GetScratchBuffer__Q29EAGL4Anim13ScratchBufferi = .text:0x800A33A4; // type:function size:0x14 scope:global +MirrorPose__Q29EAGL4Anim8SkeletonPfT1bPCQ29EAGL4Anim8BoneMask = .text:0x800A33B8; // type:function size:0x424 scope:global +PoseSQTToGlobal__Q29EAGL4Anim8SkeletonPfPQ25EAGL49TransformPQ29EAGL4Anim8BoneMask = .text:0x800A37DC; // type:function size:0x1FC scope:global +GetStillPose__CQ29EAGL4Anim8SkeletonPfPCQ29EAGL4Anim8BoneMask = .text:0x800A39D8; // type:function size:0x2CC scope:global +InitAnimMemoryMap__Q29EAGL4Anim11StatelessF3PQ29EAGL4Anim13AnimMemoryMap = .text:0x800A3CA4; // type:function size:0x44 scope:global +InitAnimMemoryMap__Q29EAGL4Anim10StatelessQPQ29EAGL4Anim13AnimMemoryMap = .text:0x800A3CE8; // type:function size:0x90 scope:global +MtxMult__FPQ25EAGL49TransformPCQ25EAGL49TransformT1 = .text:0x800A3D78; // type:function size:0x3C scope:local +InitInternal__Q29EAGL4Anim11InitializerUib = .text:0x800A3DB4; // type:function size:0xB8 scope:global +__static_initialization_and_destruction_0 = .text:0x800A3E6C; // type:function size:0x104 scope:local +_._Q29EAGL4Anim11FnAnimSuper = .text:0x800A3F70; // type:function size:0x34 scope:global +GetTargetCheckSum__CQ29EAGL4Anim6FnAnim = .text:0x800A3FA4; // type:function size:0x8 scope:global +UseFPS__Q29EAGL4Anim6FnAnimb = .text:0x800A3FAC; // type:function size:0x4 scope:global +Eval__Q29EAGL4Anim6FnAnimffPf = .text:0x800A3FB0; // type:function size:0x4 scope:global +GetLength__CQ29EAGL4Anim6FnAnimRf = .text:0x800A3FB4; // type:function size:0x8 scope:global +FindMatchTime__CQ29EAGL4Anim6FnAnimRCQ29EAGL4Anim15MatchPhaseInputRf = .text:0x800A3FBC; // type:function size:0x8 scope:global +EvalSQT__Q29EAGL4Anim6FnAnimfPfPCQ29EAGL4Anim8BoneMask = .text:0x800A3FC4; // type:function size:0x8 scope:global +EvalPhase__Q29EAGL4Anim6FnAnimfRQ29EAGL4Anim10PhaseValue = .text:0x800A3FCC; // type:function size:0x8 scope:global +EvalVel2D__Q29EAGL4Anim6FnAnimfPf = .text:0x800A3FD4; // type:function size:0x8 scope:global +EvalEvent__Q29EAGL4Anim6FnAnimffPPQ29EAGL4Anim12EventHandlerPv = .text:0x800A3FDC; // type:function size:0x8 scope:global +EvalWeights__Q29EAGL4Anim6FnAnimfPf = .text:0x800A3FE4; // type:function size:0x8 scope:global +EvalState__Q29EAGL4Anim6FnAnimfPQ29EAGL4Anim5State = .text:0x800A3FEC; // type:function size:0x8 scope:global +EvalPose__Q29EAGL4Anim6FnAnimfPCQ29EAGL4Anim15PosePaletteBankPf = .text:0x800A3FF4; // type:function size:0x8 scope:global +FindTime__Q29EAGL4Anim6FnAnimRCQ29EAGL4Anim9StateTestfRf = .text:0x800A3FFC; // type:function size:0x8 scope:global +GetPhaseChan__Q29EAGL4Anim6FnAnim = .text:0x800A4004; // type:function size:0x8 scope:global +_._Q29EAGL4Anim17MemoryPoolManager = .text:0x800A400C; // type:function size:0x44 scope:global +GetTargetCheckSum__CQ29EAGL4Anim17FnCompoundChannel = .text:0x800A4050; // type:function size:0xC scope:global +GetLength__CQ29EAGL4Anim17FnCompoundChannelRf = .text:0x800A405C; // type:function size:0x68 scope:global +GetTargetCheckSum__CQ29EAGL4Anim12FnStatelessQ = .text:0x800A40C4; // type:function size:0xC scope:global +GetTargetCheckSum__CQ29EAGL4Anim13FnStatelessF3 = .text:0x800A40D0; // type:function size:0xC scope:global +_._Q29EAGL4Anim10FnPoseAnim = .text:0x800A40DC; // type:function size:0x54 scope:global +GetTargetCheckSum__CQ29EAGL4Anim10FnPoseAnim = .text:0x800A4130; // type:function size:0xC scope:global +GetAttributes__CQ29EAGL4Anim17FnCompoundChannel = .text:0x800A413C; // type:function size:0xC scope:global +Eval__Q29EAGL4Anim17FnCompoundChannelffPf = .text:0x800A4148; // type:function size:0x148 scope:global +_._Q29EAGL4Anim15FnDeltaLerpChan = .text:0x800A4290; // type:function size:0x54 scope:global +_._Q29EAGL4Anim15FnDeltaQuatChan = .text:0x800A42E4; // type:function size:0x54 scope:global +_._Q29EAGL4Anim13FnKeyLerpChan = .text:0x800A4338; // type:function size:0x54 scope:global +_._Q29EAGL4Anim13FnKeyQuatChan = .text:0x800A438C; // type:function size:0x54 scope:global +__Q29EAGL4Anim11FnDeltaChan = .text:0x800A43E0; // type:function size:0x58 scope:global +GetLength__CQ29EAGL4Anim11FnDeltaChanRf = .text:0x800A4438; // type:function size:0x3C scope:global +GetLength__CQ29EAGL4Anim14FnKeyDeltaChanRf = .text:0x800A4474; // type:function size:0x54 scope:global +_._Q29EAGL4Anim18FnCsisEventChannel = .text:0x800A44C8; // type:function size:0x54 scope:global +SetAnimMemoryMap__Q29EAGL4Anim18FnCsisEventChannelPQ29EAGL4Anim13AnimMemoryMap = .text:0x800A451C; // type:function size:0x1C scope:global +EvalEvent__Q29EAGL4Anim18FnCsisEventChannelffPPQ29EAGL4Anim12EventHandlerPv = .text:0x800A4538; // type:function size:0x3C scope:global +Eval__Q29EAGL4Anim18FnCsisEventChannelffPf = .text:0x800A4574; // type:function size:0x38 scope:global +GetConstBoneIdx__Q29EAGL4Anim6DeltaQ = .text:0x800A45AC; // type:function size:0x70 scope:global +GetConstPhysical__Q29EAGL4Anim6DeltaQ = .text:0x800A461C; // type:function size:0x80 scope:global +_._Q29EAGL4Anim9FnDeltaF1 = .text:0x800A469C; // type:function size:0xD4 scope:global +SetAnimMemoryMap__Q29EAGL4Anim9FnDeltaF1PQ29EAGL4Anim13AnimMemoryMap = .text:0x800A4770; // type:function size:0x14 scope:global +GetLength__CQ29EAGL4Anim9FnDeltaF1Rf = .text:0x800A4784; // type:function size:0x64 scope:global +_._Q29EAGL4Anim9FnDeltaF3 = .text:0x800A47E8; // type:function size:0xD4 scope:global +SetAnimMemoryMap__Q29EAGL4Anim9FnDeltaF3PQ29EAGL4Anim13AnimMemoryMap = .text:0x800A48BC; // type:function size:0x14 scope:global +GetLength__CQ29EAGL4Anim9FnDeltaF3Rf = .text:0x800A48D0; // type:function size:0x64 scope:global +GetConstBoneIdx__Q29EAGL4Anim10DeltaQFast = .text:0x800A4934; // type:function size:0x70 scope:global +GetConstPhysical__Q29EAGL4Anim10DeltaQFast = .text:0x800A49A4; // type:function size:0x80 scope:global +_._Q29EAGL4Anim14FnEventBlender = .text:0x800A4A24; // type:function size:0x38 scope:global +__dl__Q29EAGL4Anim14FnEventBlenderPvUi = .text:0x800A4A5C; // type:function size:0x2C scope:global +EulF3__9EAGL4AnimRPfPf = .text:0x800A4A88; // type:function size:0x13C scope:global +QuatF4__9EAGL4AnimRPfPf = .text:0x800A4BC4; // type:function size:0x48 scope:global +TranF3__9EAGL4AnimRPfPf = .text:0x800A4C0C; // type:function size:0x38 scope:global +EulF3Interp__9EAGL4AnimfRPfT2Pf = .text:0x800A4C44; // type:function size:0x350 scope:global +QuatF4Interp__9EAGL4AnimfRPfT2Pf = .text:0x800A4F94; // type:function size:0x1E8 scope:global +TranF3Interp__9EAGL4AnimfRPfT2Pf = .text:0x800A517C; // type:function size:0xB0 scope:global +_._Q29EAGL4Anim16FnRawPoseChannel = .text:0x800A522C; // type:function size:0x54 scope:global +__dl__Q29EAGL4Anim16FnRawPoseChannelPvUi = .text:0x800A5280; // type:function size:0x2C scope:global +GetLength__CQ29EAGL4Anim16FnRawPoseChannelRf = .text:0x800A52AC; // type:function size:0x40 scope:global +_._Q29EAGL4Anim13FnPoseBlender = .text:0x800A52EC; // type:function size:0x38 scope:global +__dl__Q29EAGL4Anim13FnPoseBlenderPvUi = .text:0x800A5324; // type:function size:0x2C scope:global +_._Q29EAGL4Anim17FnRawEventChannel = .text:0x800A5350; // type:function size:0x54 scope:global +SetAnimMemoryMap__Q29EAGL4Anim17FnRawEventChannelPQ29EAGL4Anim13AnimMemoryMap = .text:0x800A53A4; // type:function size:0x1C scope:global +EvalEvent__Q29EAGL4Anim17FnRawEventChannelffPPQ29EAGL4Anim12EventHandlerPv = .text:0x800A53C0; // type:function size:0x3C scope:global +Eval__Q29EAGL4Anim17FnRawEventChannelffPf = .text:0x800A53FC; // type:function size:0x38 scope:global +_._Q29EAGL4Anim11FnPhaseChan = .text:0x800A5434; // type:function size:0x54 scope:global +GetPhaseChan__Q29EAGL4Anim11FnPhaseChan = .text:0x800A5488; // type:function size:0x8 scope:global +GetAttributes__CQ29EAGL4Anim13FnStatelessF3 = .text:0x800A5490; // type:function size:0xC scope:global +GetAttributes__CQ29EAGL4Anim12FnStatelessQ = .text:0x800A549C; // type:function size:0xC scope:global +_._Q29EAGL4Anim18FnRawLinearChannel = .text:0x800A54A8; // type:function size:0x54 scope:global +Eval__Q29EAGL4Anim18FnRawLinearChannelffPf = .text:0x800A54FC; // type:function size:0x1E8 scope:global +GetLength__CQ29EAGL4Anim18FnRawLinearChannelRf = .text:0x800A56E4; // type:function size:0x40 scope:global +_._Q29EAGL4Anim7FnGraft = .text:0x800A5724; // type:function size:0x38 scope:global +Eval__Q29EAGL4Anim7FnGraftffPf = .text:0x800A575C; // type:function size:0x94 scope:global +_._Q29EAGL4Anim12FnPoseMirror = .text:0x800A57F0; // type:function size:0x38 scope:global +Eval__Q29EAGL4Anim12FnPoseMirrorffPf = .text:0x800A5828; // type:function size:0x94 scope:global +EvalSQT__Q29EAGL4Anim12FnPoseMirrorfPfPCQ29EAGL4Anim8BoneMask = .text:0x800A58BC; // type:function size:0xAC scope:global +_._Q29EAGL4Anim7FnCycle = .text:0x800A5968; // type:function size:0x38 scope:global +Eval__Q29EAGL4Anim7FnCycleffPf = .text:0x800A59A0; // type:function size:0x1C0 scope:global +EvalEvent__Q29EAGL4Anim7FnCycleffPPQ29EAGL4Anim12EventHandlerPv = .text:0x800A5B60; // type:function size:0x1C0 scope:global +EvalSQT__Q29EAGL4Anim7FnCyclefPfPCQ29EAGL4Anim8BoneMask = .text:0x800A5D20; // type:function size:0x100 scope:global +EvalPhase__Q29EAGL4Anim7FnCyclefRQ29EAGL4Anim10PhaseValue = .text:0x800A5E20; // type:function size:0x100 scope:global +_._Q29EAGL4Anim14FnRawStateChan = .text:0x800A5F20; // type:function size:0x60 scope:global +GetLength__CQ29EAGL4Anim14FnRawStateChanRf = .text:0x800A5F80; // type:function size:0x3C scope:global +Eval__Q29EAGL4Anim14FnRawStateChanffPf = .text:0x800A5FBC; // type:function size:0x38 scope:global +__dl__Q29EAGL4Anim18FnCsisEventChannelPvUi = .text:0x800A5FF4; // type:function size:0x2C scope:global +__dl__Q29EAGL4Anim17FnRawEventChannelPvUi = .text:0x800A6020; // type:function size:0x2C scope:global +__dl__Q29EAGL4Anim18FnRawLinearChannelPvUi = .text:0x800A604C; // type:function size:0x2C scope:global +__dl__Q29EAGL4Anim7FnGraftPvUi = .text:0x800A6078; // type:function size:0x2C scope:global +__dl__Q29EAGL4Anim12FnPoseMirrorPvUi = .text:0x800A60A4; // type:function size:0x2C scope:global +__dl__Q29EAGL4Anim7FnCyclePvUi = .text:0x800A60D0; // type:function size:0x2C scope:global +_GLOBAL_.I.Constructor__Q29EAGL4Anim8AnimBankPvPQ25EAGL413DynamicLoaderPCc = .text:0x800A60FC; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x800A6128; // type:label scope:local +__18AudioMemoryManager = .text:0x800A6128; // type:function size:0x20 scope:global +InitMemoryPool__18AudioMemoryManager15eAUDMEMPOOLTYPEi = .text:0x800A6148; // type:function size:0x64 scope:global +AllocateMemory__18AudioMemoryManageriPCcb = .text:0x800A61AC; // type:function size:0xB0 scope:global +FreeMemory__18AudioMemoryManagerPv = .text:0x800A625C; // type:function size:0x28 scope:global +AllocateMemoryChar__18AudioMemoryManageriPCcb = .text:0x800A6284; // type:function size:0x20 scope:global +g_EAXIsPaused__Fv = .text:0x800A62A4; // type:function size:0x24 scope:global +START_321Countdown__8EAXSound = .text:0x800A62C8; // type:function size:0x84 scope:global +AreResourceLoadsPending__8EAXSound = .text:0x800A634C; // type:function size:0x28 scope:global +QueueNISButtonThrough__8EAXSoundUii = .text:0x800A6374; // type:function size:0xE8 scope:global +QueueNISStream__8EAXSoundUiiPFUii_v = .text:0x800A645C; // type:function size:0x70 scope:global +IsNISStreamQueued__8EAXSound = .text:0x800A64CC; // type:function size:0x58 scope:global +NISFinished__8EAXSound = .text:0x800A6524; // type:function size:0xA8 scope:global +PlayNIS__8EAXSound = .text:0x800A65CC; // type:function size:0x58 scope:global +PlayUISoundFX__8EAXSound18eMenuSoundTriggers = .text:0x800A6624; // type:function size:0x8C scope:global +StopUISoundFX__8EAXSound18eMenuSoundTriggers = .text:0x800A66B0; // type:function size:0x84 scope:global +SetCsisName__8EAXSoundP7SndBase = .text:0x800A6734; // type:function size:0x78 scope:global +SetCsisName__8EAXSoundPc = .text:0x800A67AC; // type:function size:0xC scope:global +__8EAXSound = .text:0x800A67B8; // type:function size:0xA0 scope:global +_._8EAXSound = .text:0x800A6858; // type:function size:0x1D4 scope:global +GetPointerCallback__8EAXSoundi = .text:0x800A6A2C; // type:function size:0x48 scope:global +SetSFXOutCallback__8EAXSoundiPi = .text:0x800A6A74; // type:function size:0x58 scope:global +SetSFXInputCallback__8EAXSoundiPi = .text:0x800A6ACC; // type:function size:0x60 scope:global +GetStateRefCount__8EAXSoundi = .text:0x800A6B2C; // type:function size:0x24 scope:global +SetSFXBaseObject__8EAXSoundP8SFX_Base14eMAINMAPSTATESii = .text:0x800A6B50; // type:function size:0x10C scope:global +GetSFXBase_Object__8EAXSoundi = .text:0x800A6C5C; // type:function size:0x90 scope:global +GetSndBase_Object__8EAXSoundi = .text:0x800A6CEC; // type:function size:0xC0 scope:global +GetCurMusicVolume__8EAXSound = .text:0x800A6DAC; // type:function size:0x34 scope:global +ReInitMasterVolumes__8EAXSound = .text:0x800A6DE0; // type:function size:0x4 scope:global +UpdateVolumes__8EAXSoundP13AudioSettingsf = .text:0x800A6DE4; // type:function size:0x74 scope:global +Random__8EAXSoundi = .text:0x800A6E58; // type:function size:0x2C scope:global +Random__8EAXSoundf = .text:0x800A6E84; // type:function size:0x28 scope:global +UpdateSongInfo__8EAXSound = .text:0x800A6EAC; // type:function size:0x4 scope:global +InitializeDriver__8EAXSound = .text:0x800A6EB0; // type:function size:0x3D4 scope:global +RefreshLocalAttr__8EAXSound = .text:0x800A7284; // type:function size:0x2E4 scope:global +InitializeSoundBootLoad__8EAXSound = .text:0x800A7568; // type:function size:0xE4 scope:global +StartNewGamePlay__8EAXSound = .text:0x800A764C; // type:function size:0x334 scope:global +InitializeInGame__8EAXSound = .text:0x800A7980; // type:function size:0x110 scope:global +InitializeFrontEnd__8EAXSound = .text:0x800A7A90; // type:function size:0x234 scope:global +MixMapReadyCallback__8EAXSound = .text:0x800A7CC4; // type:function size:0x68 scope:global +AttachPlayerCars__8EAXSound = .text:0x800A7D2C; // type:function size:0xD8 scope:global +InitEATRAX__8EAXSound = .text:0x800A7E04; // type:function size:0x20 scope:global +PlayFEMusic__8EAXSoundi = .text:0x800A7E24; // type:function size:0x80 scope:global +Update__8EAXSoundf = .text:0x800A7EA4; // type:function size:0x4F0 scope:global +CommitAssets__8EAXSound = .text:0x800A8394; // type:function size:0x68 scope:global +GetPlayerTunerCar__8EAXSoundi = .text:0x800A83FC; // type:function size:0x38 scope:global +SpawnHelicopter__8EAXSoundP13EAX_HeliState = .text:0x800A8434; // type:function size:0x8C scope:global +DestroyEAXHeli__8EAXSoundP13EAX_HeliState = .text:0x800A84C0; // type:function size:0x58 scope:global +DestroyEAXCar__8EAXSoundP12EAX_CarState = .text:0x800A8518; // type:function size:0xE0 scope:global +LoadFrontEndSoundBanks__8EAXSoundPFi_vi = .text:0x800A85F8; // type:function size:0x180 scope:global +UnloadFrontEndSoundBanks__8EAXSound = .text:0x800A8778; // type:function size:0x1F8 scope:global +g_LoadSndAsset__FGQ26Attrib9StringKey12eSNDDATAPATH12eSNDDATATYPE = .text:0x800A8970; // type:function size:0xA4 scope:global +LoadCommonIngameFiles__Fv = .text:0x800A8A14; // type:function size:0x5C8 scope:global +StopSND11__8EAXSound = .text:0x800A8FDC; // type:function size:0x4 scope:global +StartSND11__8EAXSound = .text:0x800A8FE0; // type:function size:0x4 scope:global +LoadInGameSoundBanks__8EAXSoundPFi_vi = .text:0x800A8FE4; // type:function size:0x1E8 scope:global +CloseSound__8EAXSound = .text:0x800A91CC; // type:function size:0xCC scope:global +UnLoadInGameSoundBanks__8EAXSound = .text:0x800A9298; // type:function size:0x1E4 scope:global +ReStartRace__8EAXSoundb = .text:0x800A947C; // type:function size:0x13C scope:global +InitializeSoundDriver__Fv = .text:0x800A95B8; // type:function size:0x7C scope:global +InitializeSoundLoad__Fv = .text:0x800A9634; // type:function size:0x28 scope:global +LoadAemsFrontEnd__FPFi_vi = .text:0x800A965C; // type:function size:0x54 scope:global +UnloadAemsFrontEnd__Fv = .text:0x800A96B0; // type:function size:0x38 scope:global +SoundPause__Fb16eSNDPAUSE_REASON = .text:0x800A96E8; // type:function size:0x4 scope:global +FESoundControl__FbPCc = .text:0x800A96EC; // type:function size:0x82C scope:global +SetSoundControlState__Fb12eSNDCTLSTATEPCc = .text:0x800A9F18; // type:function size:0x2D0 scope:global +LoadAemsInGame__FPFi_vi = .text:0x800AA1E8; // type:function size:0x54 scope:global +UnloadAemsInGame__Fv = .text:0x800AA23C; // type:function size:0x38 scope:global +CloseSound__Fv = .text:0x800AA274; // type:function size:0x38 scope:global +GetDefaultPlatformAudioMode__8EAXSound = .text:0x800AA2AC; // type:function size:0x24 scope:global +SetAudioModeFromMemoryCard__8EAXSound13eSndAudioMode = .text:0x800AA2D0; // type:function size:0x24 scope:global +GetFreeSlot__14BankSlotSystem15eBANK_SLOT_TYPE = .text:0x800AA2F4; // type:function size:0x70 scope:global +DestroySlots__14BankSlotSystem = .text:0x800AA364; // type:function size:0xDC scope:global +__14EAXAemsManager = .text:0x800AA440; // type:function size:0x148 scope:global +_._14EAXAemsManager = .text:0x800AA588; // type:function size:0x1A0 scope:global +AreResourceLoadsPending__14EAXAemsManager = .text:0x800AA728; // type:function size:0x48 scope:global +Init__14EAXAemsManager = .text:0x800AA770; // type:function size:0xF4 scope:global +InitSPUram__14EAXAemsManager = .text:0x800AA864; // type:function size:0x44 scope:global +AddEventSystem__14EAXAemsManager7eEVTSYS12eSNDDATAPATH = .text:0x800AA8A8; // type:function size:0x130 scope:global +EvtSysLoadCallback__14EAXAemsManagerii = .text:0x800AA9D8; // type:function size:0x28 scope:global +GetCallbackEventSys__14EAXAemsManager = .text:0x800AAA00; // type:function size:0x14 scope:global +SubscribeEventSys__Fv = .text:0x800AAA14; // type:function size:0x58 scope:global +UnloadSndData__14EAXAemsManagerGQ26Attrib9StringKey = .text:0x800AAA6C; // type:function size:0x6C scope:global +UnloadSndData__14EAXAemsManageri = .text:0x800AAAD8; // type:function size:0x1B0 scope:global +RemoveBankListing__14EAXAemsManageri = .text:0x800AAC88; // type:function size:0x650 scope:global +RemoveAEMSBank__14EAXAemsManager = .text:0x800AB2D8; // type:function size:0x30 scope:global +AddAemsBank__14EAXAemsManager = .text:0x800AB308; // type:function size:0x98 scope:global +SetupNextLoad__14EAXAemsManager = .text:0x800AB3A0; // type:function size:0x3F0 scope:global +ResetBankLoadParams__14EAXAemsManager = .text:0x800AB790; // type:function size:0x4C scope:global +InitiateLoad__14EAXAemsManager = .text:0x800AB7DC; // type:function size:0x3EC scope:global +CheckForCompleteAsyncLoad__14EAXAemsManager = .text:0x800ABBC8; // type:function size:0x8C scope:global +CompleteAsyncLoad__14EAXAemsManager = .text:0x800ABC54; // type:function size:0x60 scope:global +ResolvePendingAsyncLoads__14EAXAemsManager = .text:0x800ABCB4; // type:function size:0x4 scope:global +Update__14EAXAemsManager = .text:0x800ABCB8; // type:function size:0x770 scope:global +AsyncResidentAllocCB__14EAXAemsManageri = .text:0x800AC428; // type:function size:0x1D0 scope:global +ResidentAllocCB__14EAXAemsManagerPvii = .text:0x800AC5F8; // type:function size:0xCC scope:global +DataLoadCB__14EAXAemsManagerii = .text:0x800AC6C4; // type:function size:0x140 scope:global +ResolveCurrentDataMemory__14EAXAemsManager = .text:0x800AC804; // type:function size:0xA8 scope:global +AddBankListing__14EAXAemsManagerR18stAssetDescription = .text:0x800AC8AC; // type:function size:0x168 scope:global +IsAssetInList__14EAXAemsManagerGQ26Attrib9StringKey = .text:0x800ACA14; // type:function size:0x64 scope:global +IsAssetLoaded__14EAXAemsManagerGQ26Attrib9StringKey = .text:0x800ACA78; // type:function size:0x84 scope:global +QueueFileLoad__14EAXAemsManagerR15stSndAssetQueue15eBANK_SLOT_TYPE = .text:0x800ACAFC; // type:function size:0x2E0 scope:global +InitializeSlots__14EAXAemsManagerb = .text:0x800ACDDC; // type:function size:0xB0 scope:global +DestroySlots__14EAXAemsManagerb = .text:0x800ACE8C; // type:function size:0x68 scope:global +RegisterSlots__14EAXAemsManager15eBANK_SLOT_TYPEiiib = .text:0x800ACEF4; // type:function size:0x1FC scope:global +__11EAXFrontEnd = .text:0x800AD0F0; // type:function size:0x130 scope:global +_._11EAXFrontEnd = .text:0x800AD220; // type:function size:0x114 scope:global +AttachSFXOBJ__11EAXFrontEndP8SFX_Base18eSFXOBJ_MAIN_TYPES = .text:0x800AD334; // type:function size:0x10 scope:global +Initialize__11EAXFrontEnd = .text:0x800AD344; // type:function size:0x4 scope:global +Stop__11EAXFrontEnd18eMenuSoundTriggers = .text:0x800AD348; // type:function size:0x64 scope:global +Play__11EAXFrontEnd18eMenuSoundTriggers = .text:0x800AD3AC; // type:function size:0x264 scope:global +Play__11EAXFrontEndPv = .text:0x800AD610; // type:function size:0x1B0 scope:global +Update__11EAXFrontEndPv = .text:0x800AD7C0; // type:function size:0x20 scope:global +GetEventPointer__11EAXFrontEndi = .text:0x800AD7E0; // type:function size:0x8 scope:global +UpdateDriveOn__11EAXFrontEnd = .text:0x800AD7E8; // type:function size:0x4 scope:global +SetFEDrivingCarState__11EAXFrontEndP8bVector3T1P6Camerai = .text:0x800AD7EC; // type:function size:0x4 scope:global +DestroyAllDriveOnSnds__11EAXFrontEnd = .text:0x800AD7F0; // type:function size:0x4 scope:global +__9EAXCommon = .text:0x800AD7F4; // type:function size:0xD4 scope:global +_._9EAXCommon = .text:0x800AD8C8; // type:function size:0x58 scope:global +AttachSFXOBJ__9EAXCommonP8SFX_Base18eSFXOBJ_MAIN_TYPES = .text:0x800AD920; // type:function size:0x10 scope:global +MsgPlayMiscSound__9EAXCommonRC10MMiscSound = .text:0x800AD930; // type:function size:0x10C scope:global +Initialize__9EAXCommon = .text:0x800ADA3C; // type:function size:0x4 scope:global +Stop__9EAXCommon18eMenuSoundTriggers = .text:0x800ADA40; // type:function size:0x4 scope:global +Play__9EAXCommon18eMenuSoundTriggers = .text:0x800ADA44; // type:function size:0x1EC scope:global +Play__9EAXCommonPv = .text:0x800ADC30; // type:function size:0x1B0 scope:global +Update__9EAXCommonPv = .text:0x800ADDE0; // type:function size:0xA0 scope:global +GetEventPointer__9EAXCommoni = .text:0x800ADE80; // type:function size:0x8 scope:global +GetStateInfo__C13EAXAITunerCar = .text:0x800ADE88; // type:function size:0xC scope:global +GetStateName__C13EAXAITunerCar = .text:0x800ADE94; // type:function size:0xC scope:global +CreateState__13EAXAITunerCarUi = .text:0x800ADEA0; // type:function size:0x5C scope:global +__13EAXAITunerCar = .text:0x800ADEFC; // type:function size:0x54 scope:global +_._13EAXAITunerCar = .text:0x800ADF50; // type:function size:0x68 scope:global +SFXMessage__13EAXAITunerCar15eSFXMessageTypeUiUi = .text:0x800ADFB8; // type:function size:0x34 scope:global +UpdateCarPhysics__13EAXAITunerCar = .text:0x800ADFEC; // type:function size:0x20 scope:global +UpdateParams__13EAXAITunerCarf = .text:0x800AE00C; // type:function size:0x40 scope:global +ProcessEvent__13EAXAITunerCarP7emEvent = .text:0x800AE04C; // type:function size:0x4 scope:global +UpdatAIDriveBy__13EAXAITunerCarf = .text:0x800AE050; // type:function size:0x2C8 scope:global +GetStateInfo__C9EAXCopCar = .text:0x800AE318; // type:function size:0xC scope:global +GetStateName__C9EAXCopCar = .text:0x800AE324; // type:function size:0xC scope:global +CreateState__9EAXCopCarUi = .text:0x800AE330; // type:function size:0x78 scope:global +GetStateInfo__C8EAXTruck = .text:0x800AE3A8; // type:function size:0xC scope:global +GetStateName__C8EAXTruck = .text:0x800AE3B4; // type:function size:0xC scope:global +CreateState__8EAXTruckUi = .text:0x800AE3C0; // type:function size:0x78 scope:global +UpdateParams__8EAXTruckf = .text:0x800AE438; // type:function size:0x44 scope:global +UpdateParams__9EAXCopCarf = .text:0x800AE47C; // type:function size:0x44 scope:global +Attach__9EAXCopCarPv = .text:0x800AE4C0; // type:function size:0x70 scope:global +GetStateInfo__C13EAXTrafficCar = .text:0x800AE530; // type:function size:0xC scope:global +GetStateName__C13EAXTrafficCar = .text:0x800AE53C; // type:function size:0xC scope:global +CreateState__13EAXTrafficCarUi = .text:0x800AE548; // type:function size:0x5C scope:global +__13EAXTrafficCar = .text:0x800AE5A4; // type:function size:0x3C scope:global +_._13EAXTrafficCar = .text:0x800AE5E0; // type:function size:0x58 scope:global +Attach__13EAXTrafficCarPv = .text:0x800AE638; // type:function size:0x34 scope:global +Detach__13EAXTrafficCar = .text:0x800AE66C; // type:function size:0x38 scope:global +GetStateInfo__C11EAXTunerCar = .text:0x800AE6A4; // type:function size:0xC scope:global +GetStateName__C11EAXTunerCar = .text:0x800AE6B0; // type:function size:0xC scope:global +CreateState__11EAXTunerCarUi = .text:0x800AE6BC; // type:function size:0x5C scope:global +__11EAXTunerCar = .text:0x800AE718; // type:function size:0x60 scope:global +_._11EAXTunerCar = .text:0x800AE778; // type:function size:0x58 scope:global +PreLoadAssets__11EAXTunerCar = .text:0x800AE7D0; // type:function size:0x4 scope:global +ProcessSoundSphere__11EAXTunerCarUiiP8bVector3f = .text:0x800AE7D4; // type:function size:0x4 scope:global +SFXMessage__11EAXTunerCar15eSFXMessageTypeUiUi = .text:0x800AE7D8; // type:function size:0x88 scope:global +DebugPrintSkidBar__FiiPci = .text:0x800AE860; // type:function size:0x4 scope:global +UpdateRotation__11EAXTunerCar = .text:0x800AE864; // type:function size:0x28 scope:global +UpdatePov__11EAXTunerCar = .text:0x800AE88C; // type:function size:0xA0 scope:global +FirstUpdate__11EAXTunerCarf = .text:0x800AE92C; // type:function size:0xC scope:global +UpdateParams__11EAXTunerCarf = .text:0x800AE938; // type:function size:0x8C scope:global +DistanceToView__5SoundPC8bVector3 = .text:0x800AE9C4; // type:function size:0x1FC scope:global +IsPrimaryTarget__5SoundUi = .text:0x800AEBC0; // type:function size:0x178 scope:global +PlayScrape__Q25Sound14CollisionEventRCQ25Sound16AudioEventParams = .text:0x800AED38; // type:function size:0x128 scope:global +Play__Q25Sound14CollisionEventRCQ25Sound16AudioEventParams = .text:0x800AEE60; // type:function size:0x11C scope:global +__Q25Sound14CollisionEventRCQ25Sound16AudioEventParamsb = .text:0x800AEF7C; // type:function size:0x338 scope:global +Update__Q25Sound14CollisionEventRC8bVector3N21f = .text:0x800AF2B4; // type:function size:0xD0 scope:global +InitAsScrape__Q25Sound14CollisionEventRCQ36Attrib3Gen11audioscrape = .text:0x800AF384; // type:function size:0xC4 scope:global +InitAsImpact__Q25Sound14CollisionEventRCQ36Attrib3Gen11audioimpact = .text:0x800AF448; // type:function size:0x38C scope:global +Release__Q25Sound14CollisionEvent = .text:0x800AF7D4; // type:function size:0x8C scope:global +_._Q25Sound14CollisionEvent = .text:0x800AF860; // type:function size:0x90 scope:global +SetOwner__Q25Sound14CollisionEventP11CSTATE_Base = .text:0x800AF8F0; // type:function size:0x8 scope:global +GetCollisionDescription__5SoundRCQ26Attrib9StringKey = .text:0x800AF8F8; // type:function size:0x10C scope:global +__9cPathLine = .text:0x800AFA04; // type:function size:0x38 scope:global +_._9cPathLine = .text:0x800AFA3C; // type:function size:0x28 scope:global +Initialize__9cPathLineffi = .text:0x800AFA64; // type:function size:0x64 scope:global +ClearStages__9cPathLine = .text:0x800AFAC8; // type:function size:0x6C scope:global +AddStage__9cPathLineffi10eCURVETYPE = .text:0x800AFB34; // type:function size:0xF0 scope:global +AddLinkedStage__9cPathLinefi10eCURVETYPE = .text:0x800AFC24; // type:function size:0x68 scope:global +Update__9cPathLinef = .text:0x800AFC8C; // type:function size:0x210 scope:global +__11cInterpLine = .text:0x800AFE9C; // type:function size:0x34 scope:global +_._11cInterpLine = .text:0x800AFED0; // type:function size:0x28 scope:global +Initialize__11cInterpLineffi10eCURVETYPE = .text:0x800AFEF8; // type:function size:0x78 scope:global +Update__11cInterpLineff = .text:0x800AFF70; // type:function size:0x4C scope:global +Update__11cInterpLinef = .text:0x800AFFBC; // type:function size:0x17C scope:global +__5Slopeffff = .text:0x800B0138; // type:function size:0x30 scope:global +_._5Slope = .text:0x800B0168; // type:function size:0x28 scope:global +Initialize__5Slopeffff = .text:0x800B0190; // type:function size:0x4C scope:global +GetValue__5Slopef = .text:0x800B01DC; // type:function size:0x34 scope:global +Regenerate__5Slope = .text:0x800B0210; // type:function size:0x54 scope:global +GetClosestPlayerCar__FPC8bVector3 = .text:0x800B0264; // type:function size:0x30 scope:global +GetClosestPlayerCar__FPC8bVector3bRi = .text:0x800B0294; // type:function size:0x138 scope:global +GetClosestCopCarToCamera__Fv = .text:0x800B03CC; // type:function size:0x98 scope:global +GetPlayerCarInRadius__FR8bVector3f = .text:0x800B0464; // type:function size:0x110 scope:global +IsCarInRadius__FP12EAX_CarStatePC8bVector3f = .text:0x800B0574; // type:function size:0x54 scope:global +__14EAXSND8Wrapper = .text:0x800B05C8; // type:function size:0x30 scope:global +_._14EAXSND8Wrapper = .text:0x800B05F8; // type:function size:0x70 scope:global +Initialize__14EAXSND8Wrapper = .text:0x800B0668; // type:function size:0x158 scope:global +ReInit__14EAXSND8Wrapper = .text:0x800B07C0; // type:function size:0x70 scope:global +STUPID__14EAXSND8Wrapper = .text:0x800B0830; // type:function size:0x4 scope:global +Update__14EAXSND8Wrapper = .text:0x800B0834; // type:function size:0x20 scope:global +SetAudioModeFromMemoryCard__14EAXSND8Wrapper13eSndAudioMode = .text:0x800B0854; // type:function size:0xE4 scope:global +SetAudioRenderMode__14EAXSND8Wrapper13eSndAudioMode = .text:0x800B0938; // type:function size:0xB4 scope:global +SetSnd8RenderMode__14EAXSND8Wrapper13eSndAudioMode = .text:0x800B09EC; // type:function size:0xAC scope:global +GetDefaultPlatformAudioMode__14EAXSND8Wrapper = .text:0x800B0A98; // type:function size:0x54 scope:global +GetRoadNoiseTransitionVol__F22FXROADNOISE_TRANSITION = .text:0x800B0AEC; // type:function size:0x4C scope:global +GetStichTypeName__F10STICH_TYPE = .text:0x800B0B38; // type:function size:0xC scope:global +__15cSTICH_PlayBack = .text:0x800B0B44; // type:function size:0xB8 scope:global +_._15cSTICH_PlayBack = .text:0x800B0BFC; // type:function size:0xD0 scope:global +QueueSampleRequest__15cSTICH_PlayBackR15SampleQueueItem = .text:0x800B0CCC; // type:function size:0x174 scope:global +KillSample__FP14cSampleWarpper = .text:0x800B0E40; // type:function size:0x20 scope:local +RemoveFromList__15cSTICH_PlayBackG15SampleQueueItem = .text:0x800B0E60; // type:function size:0x174 scope:global +Prune__15cSTICH_PlayBack10STICH_TYPEii = .text:0x800B0FD4; // type:function size:0x1A8 scope:global +AddStich__15cSTICH_PlayBack10STICH_TYPER9SND_Stich = .text:0x800B117C; // type:function size:0x58 scope:global +GetStich__15cSTICH_PlayBack10STICH_TYPEi = .text:0x800B11D4; // type:function size:0x38 scope:global +Update__15cSTICH_PlayBackf = .text:0x800B120C; // type:function size:0x98 scope:global +DestroyAllStichs__15cSTICH_PlayBack = .text:0x800B12A4; // type:function size:0xF4 scope:global +__13cStichWrapperRC9SND_Stich = .text:0x800B1398; // type:function size:0x58 scope:global +_._13cStichWrapper = .text:0x800B13F0; // type:function size:0x58 scope:global +__nw__13cStichWrapperUi = .text:0x800B1448; // type:function size:0x30 scope:global +__dl__13cStichWrapperPv = .text:0x800B1478; // type:function size:0x3C scope:global +Play__13cStichWrapperiii = .text:0x800B14B4; // type:function size:0x34 scope:global +Play__13cStichWrapperPC10SND_Params = .text:0x800B14E8; // type:function size:0x180 scope:global +Update__13cStichWrapperPC10SND_Params = .text:0x800B1668; // type:function size:0xF0 scope:global +Destroy__13cStichWrapper = .text:0x800B1758; // type:function size:0xA8 scope:global +__14cSampleWarpperR13SND_SampleRef = .text:0x800B1800; // type:function size:0x20 scope:global +_._14cSampleWarpper = .text:0x800B1820; // type:function size:0x15C scope:global +__nw__14cSampleWarpperUi = .text:0x800B197C; // type:function size:0x50 scope:global +__dl__14cSampleWarpperPv = .text:0x800B19CC; // type:function size:0x3C scope:global +Destroy__14cSampleWarpper = .text:0x800B1A08; // type:function size:0x1D0 scope:global +Initialize__14cSampleWarpper = .text:0x800B1BD8; // type:function size:0xC scope:global +Update__14cSampleWarpperPC10SND_Params = .text:0x800B1BE4; // type:function size:0x398 scope:global +Play__14cSampleWarpperPC10SND_Params = .text:0x800B1F7C; // type:function size:0x868 scope:global +Prune__14cSampleWarpper10STICH_TYPEii = .text:0x800B27E4; // type:function size:0x1A0 scope:global +__11cStitchLoopUi = .text:0x800B2984; // type:function size:0x10C scope:global +_._11cStitchLoop = .text:0x800B2A90; // type:function size:0x8C scope:global +Update__11cStitchLoopPC10SND_Paramsf = .text:0x800B2B1C; // type:function size:0x130 scope:global +LoaderSoundStichs__FP6bChunk = .text:0x800B2C4C; // type:function size:0x188 scope:global +UnloaderSoundStichs__FP6bChunk = .text:0x800B2DD4; // type:function size:0x5C scope:global +__12SndAITrigger = .text:0x800B2E30; // type:function size:0x74 scope:global +_._12SndAITrigger = .text:0x800B2EA4; // type:function size:0x48 scope:global +Initialize__12SndAITriggeri = .text:0x800B2EEC; // type:function size:0x4C scope:global +BeginTrigger__12SndAITrigger = .text:0x800B2F38; // type:function size:0x14 scope:global +EndTrigger__12SndAITrigger = .text:0x800B2F4C; // type:function size:0x14 scope:global +Update__12SndAITriggerff = .text:0x800B2F60; // type:function size:0x110 scope:global +__17SndAIStateManager = .text:0x800B3070; // type:function size:0x80 scope:global +_._17SndAIStateManager = .text:0x800B30F0; // type:function size:0x98 scope:global +Initialize__17SndAIStateManagerP14SFXCTL_Physics = .text:0x800B3188; // type:function size:0x1A4 scope:global +Update__17SndAIStateManagerf = .text:0x800B332C; // type:function size:0x2E8 scope:global +UpdateState__17SndAIStateManagerf = .text:0x800B3614; // type:function size:0x200 scope:global +SwitchState__17SndAIStateManager12SND_AI_STATE = .text:0x800B3814; // type:function size:0x24 scope:global +GeneratePotentialStates__17SndAIStateManagerPb = .text:0x800B3838; // type:function size:0x12C scope:global +InitServices__9SoundConnv = .text:0x800B3964; // type:function size:0x4 scope:global +RestoreServices__9SoundConnv = .text:0x800B3968; // type:function size:0x4 scope:global +Construct__12CarSoundConnRCQ23Sim14ConnectionData = .text:0x800B396C; // type:function size:0x44 scope:global +__12CarSoundConnRCQ23Sim14ConnectionData = .text:0x800B39B0; // type:function size:0x250 scope:global +_._12CarSoundConn = .text:0x800B3C00; // type:function size:0x310 scope:global +OnStatusCheck__12CarSoundConn = .text:0x800B3F10; // type:function size:0x30 scope:global +UpdateState__12CarSoundConnf = .text:0x800B3F40; // type:function size:0x6F8 scope:global +Construct__13HeliSoundConnRCQ23Sim14ConnectionData = .text:0x800B4638; // type:function size:0x44 scope:global +__13HeliSoundConnRCQ23Sim14ConnectionData = .text:0x800B467C; // type:function size:0x3C0 scope:global +_._13HeliSoundConn = .text:0x800B4A3C; // type:function size:0x2D4 scope:global +UpdateState__13HeliSoundConnf = .text:0x800B4D10; // type:function size:0x218 scope:global +UpdateServices__9SoundConnf = .text:0x800B4F28; // type:function size:0xA8 scope:global +Add__Q26Speech6copMapP10HSIMABLE__P6EAXCop = .text:0x800B4FD0; // type:function size:0x288 scope:global +Remove__Q26Speech6copMapP10HSIMABLE__ = .text:0x800B5258; // type:function size:0xC0 scope:global +ModifyHandle__Q26Speech6copMapP10HSIMABLE__T1 = .text:0x800B5318; // type:function size:0x50 scope:global +Find__CQ26Speech6copMapP10HSIMABLE__ = .text:0x800B5368; // type:function size:0x7C scope:global +Add__Q26Speech15SpeechHashIDMapUi18SPCHType_1_EventID = .text:0x800B53E4; // type:function size:0x1F4 scope:global +GetID__Q26Speech15SpeechHashIDMapUi = .text:0x800B55D8; // type:function size:0x3C scope:global +GetHash__Q26Speech15SpeechHashIDMap18SPCHType_1_EventID = .text:0x800B5614; // type:function size:0x8C scope:global +Init__Q26Speech12EventHistory = .text:0x800B56A0; // type:function size:0x2C8 scope:global +Find__Q26Speech12EventHistory18SPCHType_1_EventID = .text:0x800B5968; // type:function size:0x94 scope:global +GetCount__Q26Speech12EventHistory18SPCHType_1_EventID = .text:0x800B59FC; // type:function size:0x34 scope:global +GetTime__Q26Speech12EventHistory18SPCHType_1_EventID = .text:0x800B5A30; // type:function size:0x50 scope:global +Touch__Q26Speech12EventHistory18SPCHType_1_EventIDUs = .text:0x800B5A80; // type:function size:0x80 scope:global +Reset__Q26Speech12EventHistory = .text:0x800B5B00; // type:function size:0x3C scope:global +Destruct__Q26Speech16SpeechSampleDataPQ26Speech16SpeechSampleData = .text:0x800B5B3C; // type:function size:0x2C scope:global +Construct__Q26Speech16SpeechSampleDataP26SPCHType_SampleRequestDataUib = .text:0x800B5B68; // type:function size:0xB8 scope:global +__Q26Speech20ScheduledSpeechEvent = .text:0x800B5C20; // type:function size:0x80 scope:global +_._Q26Speech20ScheduledSpeechEvent = .text:0x800B5CA0; // type:function size:0x1A4 scope:global +__nw__Q26Speech20ScheduledSpeechEventUiUi = .text:0x800B5E44; // type:function size:0x88 scope:global +__dl__Q26Speech20ScheduledSpeechEventPv = .text:0x800B5ECC; // type:function size:0x3C scope:global +sort_nested_priority__Q26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEventT1 = .text:0x800B5F08; // type:function size:0x68 scope:global +GetData__Q26Speech20ScheduledSpeechEventPUi = .text:0x800B5F70; // type:function size:0x18 scope:global +ReserveSample__Q26Speech20ScheduledSpeechEvent = .text:0x800B5F88; // type:function size:0x18 scope:global +AddSample__Q26Speech20ScheduledSpeechEventPQ26Speech16SpeechSampleDataUc = .text:0x800B5FA0; // type:function size:0x40 scope:global +IsWorldDataStreaming__FUi = .text:0x800B5FE0; // type:function size:0x6C scope:global +AssignAudioStreamHandle__FUi = .text:0x800B604C; // type:function size:0x10 scope:global +__18EAXS_StreamManager = .text:0x800B605C; // type:function size:0x48 scope:global +_._18EAXS_StreamManager = .text:0x800B60A4; // type:function size:0xA4 scope:global +InitializeStreams__18EAXS_StreamManager9eGAMEMODE = .text:0x800B6148; // type:function size:0x18C scope:global +GetStreamChannel__18EAXS_StreamManageri = .text:0x800B62D4; // type:function size:0x20 scope:global +AddStreamChannel__18EAXS_StreamManagerP18EAXS_StreamChannel9eSTRMTYPE = .text:0x800B62F4; // type:function size:0x1C scope:global +RemoveStreamChannel__18EAXS_StreamManager9eSTRMTYPE = .text:0x800B6310; // type:function size:0x4 scope:global +__18EAXS_StreamChannel = .text:0x800B6314; // type:function size:0x3C scope:global +InitParams__18EAXS_StreamChannelP18EAXS_StreamManager = .text:0x800B6350; // type:function size:0xB4 scope:global +_._18EAXS_StreamChannel = .text:0x800B6404; // type:function size:0x48 scope:global +SetupBigFileStuff__18EAXS_StreamChannelPCcl = .text:0x800B644C; // type:function size:0x40 scope:global +AddToStrmReq__18EAXS_StreamChannelPCcli = .text:0x800B648C; // type:function size:0x44 scope:global +InitChannel__18EAXS_StreamChanneliii9eSTRMTYPE = .text:0x800B64D0; // type:function size:0x68 scope:global +ProcessTrackStreamerOn__18EAXS_StreamChannel = .text:0x800B6538; // type:function size:0xC scope:global +ProcessTrackStreamerOff__18EAXS_StreamChannel = .text:0x800B6544; // type:function size:0xC scope:global +__14SndStrmWrapper = .text:0x800B6550; // type:function size:0x14 scope:global +Create__14SndStrmWrapperiii = .text:0x800B6564; // type:function size:0xB0 scope:global +CreateStream__14SndStrmWrapperiiPciPv = .text:0x800B6614; // type:function size:0x90 scope:global +IsPlaying__14SndStrmWrapper = .text:0x800B66A4; // type:function size:0x7C scope:global +GetCurrentTime__14SndStrmWrapper = .text:0x800B6720; // type:function size:0x44 scope:global +GetTimeRemaining__14SndStrmWrapper = .text:0x800B6764; // type:function size:0x44 scope:global +AlmostDone__14SndStrmWrapper = .text:0x800B67A8; // type:function size:0x84 scope:global +Stop__14SndStrmWrapper = .text:0x800B682C; // type:function size:0x34 scope:global +AddToStream__14SndStrmWrapperPCcli = .text:0x800B6860; // type:function size:0x40 scope:global +AddToStream__14SndStrmWrapperiPvii = .text:0x800B68A0; // type:function size:0x28 scope:global +ModifyHold__14SndStrmWrapperii = .text:0x800B68C8; // type:function size:0x28 scope:global +SetVol__14SndStrmWrapperib = .text:0x800B68F0; // type:function size:0x94 scope:global +SetAz__14SndStrmWrapperi = .text:0x800B6984; // type:function size:0x78 scope:global +RampVol__14SndStrmWrapperii = .text:0x800B69FC; // type:function size:0xA4 scope:global +SetLowPass__14SndStrmWrapperi = .text:0x800B6AA0; // type:function size:0x48 scope:global +GetStatus__14SndStrmWrapperP15SNDSTREAMSTATUS = .text:0x800B6AE8; // type:function size:0x48 scope:global +GetRequestStatus__14SndStrmWrapperiP16SNDREQUESTSTATUS = .text:0x800B6B30; // type:function size:0x48 scope:global +GetTimeBuffered__14SndStrmWrapper = .text:0x800B6B78; // type:function size:0x34 scope:global +Pause__14SndStrmWrapper = .text:0x800B6BAC; // type:function size:0x3C scope:global +Resume__14SndStrmWrapper = .text:0x800B6BE8; // type:function size:0x3C scope:global +_._14SndStrmWrapper = .text:0x800B6C24; // type:function size:0x64 scope:global +DestroyStream__14SndStrmWrapper = .text:0x800B6C88; // type:function size:0x5C scope:global +PurgeStream__14SndStrmWrapper = .text:0x800B6CE4; // type:function size:0x34 scope:global +validatehandle__FiPP15STREAMHEADERtagPP12TAPSTRUCTtag = .text:0x800B6D18; // type:function size:0x40 scope:local +inbetween__FPcN20 = .text:0x800B6D58; // type:function size:0x40 scope:local +decbufferusage__FP15STREAMHEADERtagi = .text:0x800B6D98; // type:function size:0x80 scope:local +getfreerequest__FP15STREAMHEADERtag = .text:0x800B6E18; // type:function size:0x88 scope:local +queuerequest__FP15STREAMHEADERtagP16REQUESTSTRUCTtag = .text:0x800B6EA0; // type:function size:0x7C scope:local +locaterequest__FP15STREAMHEADERtagi = .text:0x800B6F1C; // type:function size:0x50 scope:local +freerequest__FP15STREAMHEADERtagP16REQUESTSTRUCTtag = .text:0x800B6F6C; // type:function size:0x80 scope:local +filterchunk__FP15STREAMHEADERtagP14STREAMCHUNKHDR = .text:0x800B6FEC; // type:function size:0x78 scope:local +parsechunks__FP15STREAMHEADERtag = .text:0x800B7064; // type:function size:0x2DC scope:local +opencallback__FiiPv = .text:0x800B7340; // type:function size:0x8C scope:local +closecallback__FiiPv = .text:0x800B73CC; // type:function size:0x5C scope:local +readcallback__FiiPv = .text:0x800B7428; // type:function size:0x104 scope:local +startnextrequest__FP15STREAMHEADERtagi = .text:0x800B752C; // type:function size:0x164 scope:local +restartstream__FP15STREAMHEADERtagi = .text:0x800B7690; // type:function size:0x3E8 scope:local +STREAM_overhead__Fiii = .text:0x800B7A78; // type:function size:0x20 scope:global +STREAM_create__FiiiPvi = .text:0x800B7A98; // type:function size:0x268 scope:global +STREAM_setfilter__Fiiiii = .text:0x800B7D00; // type:function size:0xBC scope:global +STREAM_destroy__Fi = .text:0x800B7DBC; // type:function size:0x94 scope:global +STREAM_setpriority__Fiii = .text:0x800B7E50; // type:function size:0x50 scope:global +STREAM_setgreedylevel__Fii = .text:0x800B7EA0; // type:function size:0x74 scope:global +STREAM_setgreedystate__Fii = .text:0x800B7F14; // type:function size:0x68 scope:global +STREAM_taphandle__Fii = .text:0x800B7F7C; // type:function size:0x6C scope:global +STREAM_queuefile__FiPCcii = .text:0x800B7FE8; // type:function size:0xF4 scope:global +STREAM_queuemem__FiPvii = .text:0x800B80DC; // type:function size:0x164 scope:global +STREAM_cancelrequest__Fii = .text:0x800B8240; // type:function size:0x2C0 scope:global +STREAM_kill__Fi = .text:0x800B8500; // type:function size:0x23C scope:global +STREAM_get__Fi = .text:0x800B873C; // type:function size:0x168 scope:global +STREAM_release__FiP14STREAMCHUNKHDR = .text:0x800B88A4; // type:function size:0x130 scope:global +STREAM_gettable__Fi = .text:0x800B89D4; // type:function size:0x40 scope:global +STREAM_state__Fi = .text:0x800B8A14; // type:function size:0x40 scope:global +STREAM_isendofstream__Fi = .text:0x800B8A54; // type:function size:0x5C scope:global +STREAM_buffersize__Fi = .text:0x800B8AB0; // type:function size:0x48 scope:global +GetTypeInfo__C6SFXCTL = .text:0x800B8AF8; // type:function size:0xC scope:global +GetTypeName__C6SFXCTL = .text:0x800B8B04; // type:function size:0xC scope:global +__6SFXCTL = .text:0x800B8B10; // type:function size:0x44 scope:global +_._6SFXCTL = .text:0x800B8B54; // type:function size:0x58 scope:global +InitSFX__6SFXCTL = .text:0x800B8BAC; // type:function size:0x4 scope:global +UpdateParams__6SFXCTLf = .text:0x800B8BB0; // type:function size:0x4 scope:global +GetTypeInfo__C12SFXCTL_Wheel = .text:0x800B8BB4; // type:function size:0xC scope:global +GetTypeName__C12SFXCTL_Wheel = .text:0x800B8BC0; // type:function size:0xC scope:global +CreateObject__12SFXCTL_WheelUi = .text:0x800B8BCC; // type:function size:0x5C scope:global +__12SFXCTL_Wheel = .text:0x800B8C28; // type:function size:0x22C scope:global +_._12SFXCTL_Wheel = .text:0x800B8E54; // type:function size:0x8C scope:global +UpdateParams__12SFXCTL_Wheelf = .text:0x800B8EE0; // type:function size:0x34 scope:global +InitSFX__12SFXCTL_Wheel = .text:0x800B8F14; // type:function size:0x140 scope:global +GenerateWheelPosition__12SFXCTL_Wheel = .text:0x800B9054; // type:function size:0x190 scope:global +UpdateTireParams__12SFXCTL_Wheel = .text:0x800B91E4; // type:function size:0x3CC scope:global +GetWheelPos__12SFXCTL_Wheelii = .text:0x800B95B0; // type:function size:0x4C scope:global +GenerateTerrainTypes__12SFXCTL_Wheel = .text:0x800B95FC; // type:function size:0x3D8 scope:global +GetTypeInfo__C15SFXCTL_Shifting = .text:0x800B99D4; // type:function size:0xC scope:global +GetTypeName__C15SFXCTL_Shifting = .text:0x800B99E0; // type:function size:0xC scope:global +CreateObject__15SFXCTL_ShiftingUi = .text:0x800B99EC; // type:function size:0x5C scope:global +__15SFXCTL_Shifting = .text:0x800B9A48; // type:function size:0x98 scope:global +_._15SFXCTL_Shifting = .text:0x800B9AE0; // type:function size:0xA4 scope:global +UpdateMixerOutputs__15SFXCTL_Shifting = .text:0x800B9B84; // type:function size:0x5C scope:global +GetController__15SFXCTL_Shiftingi = .text:0x800B9BE0; // type:function size:0x14 scope:global +AttachController__15SFXCTL_ShiftingP6SFXCTL = .text:0x800B9BF4; // type:function size:0x58 scope:global +SetupSFX__15SFXCTL_ShiftingP11CSTATE_Base = .text:0x800B9C4C; // type:function size:0x54 scope:global +InitSFX__15SFXCTL_Shifting = .text:0x800B9CA0; // type:function size:0x88 scope:global +UpdateGearShiftState__15SFXCTL_Shiftingf = .text:0x800B9D28; // type:function size:0xB60 scope:global +UpdateParams__15SFXCTL_Shiftingf = .text:0x800BA888; // type:function size:0xA8 scope:global +UpdateTorque__15SFXCTL_Shiftingf = .text:0x800BA930; // type:function size:0xA8 scope:global +UpdateRPM__15SFXCTL_Shiftingf = .text:0x800BA9D8; // type:function size:0xA8 scope:global +GetShiftingRPM__15SFXCTL_Shifting = .text:0x800BAA80; // type:function size:0x8 scope:global +GetShiftingTRQ__15SFXCTL_Shifting = .text:0x800BAA88; // type:function size:0x8 scope:global +GetShiftingVOL__15SFXCTL_Shifting = .text:0x800BAA90; // type:function size:0x8 scope:global +BeginUpShift__15SFXCTL_Shifting = .text:0x800BAA98; // type:function size:0x3B0 scope:global +FillGraphFromSpline__FRCQ25UMath7Matrix4P8bVector2iff = .text:0x800BAE48; // type:function size:0xE0 scope:global +BeginDownShift__15SFXCTL_Shifting = .text:0x800BAF28; // type:function size:0x190 scope:global +PostShiftFX_Update__15SFXCTL_Shiftingf = .text:0x800BB0B8; // type:function size:0xB4 scope:global +PostShiftFX_End__15SFXCTL_Shifting = .text:0x800BB16C; // type:function size:0x24 scope:global +PostShiftFX_Init__15SFXCTL_Shifting = .text:0x800BB190; // type:function size:0x130 scope:global +CleanUpShiftFX__15SFXCTL_Shifting = .text:0x800BB2C0; // type:function size:0x38 scope:global +GetCurGear__15SFXCTL_Shifting = .text:0x800BB2F8; // type:function size:0x10 scope:global +GetLastGear__15SFXCTL_Shifting = .text:0x800BB308; // type:function size:0x10 scope:global +GetTypeInfo__C13SFXCTL_Engine = .text:0x800BB318; // type:function size:0xC scope:global +GetTypeName__C13SFXCTL_Engine = .text:0x800BB324; // type:function size:0xC scope:global +CreateObject__13SFXCTL_EngineUi = .text:0x800BB330; // type:function size:0x5C scope:global +__13SFXCTL_Engine = .text:0x800BB38C; // type:function size:0x228 scope:global +_._13SFXCTL_Engine = .text:0x800BB5B4; // type:function size:0xC4 scope:global +MessageVehicleDestroyed__13SFXCTL_EngineRC23MNotifyVehicleDestroyed = .text:0x800BB678; // type:function size:0x18C scope:global +MsgCountdownDone__13SFXCTL_EngineRC14MCountdownDone = .text:0x800BB804; // type:function size:0x18 scope:global +SetupSFX__13SFXCTL_EngineP11CSTATE_Base = .text:0x800BB81C; // type:function size:0x4C scope:global +InitSFX__13SFXCTL_Engine = .text:0x800BB868; // type:function size:0x1D0 scope:global +GetController__13SFXCTL_Enginei = .text:0x800BBA38; // type:function size:0x54 scope:global +AttachController__13SFXCTL_EngineP6SFXCTL = .text:0x800BBA8C; // type:function size:0x94 scope:global +UpdateParams__13SFXCTL_Enginef = .text:0x800BBB20; // type:function size:0x3D4 scope:global +UpdateFilterFX__13SFXCTL_Engine = .text:0x800BBEF4; // type:function size:0x134 scope:global +UpdateCompression__13SFXCTL_Enginef = .text:0x800BC028; // type:function size:0xD0 scope:global +UpdateRedlining__13SFXCTL_Enginef = .text:0x800BC0F8; // type:function size:0x268 scope:global +UpdateVolume__13SFXCTL_Enginef = .text:0x800BC360; // type:function size:0xB8 scope:global +UpdateRPM__13SFXCTL_Enginef = .text:0x800BC418; // type:function size:0x2CC scope:global +UpdateTorque__13SFXCTL_Enginef = .text:0x800BC6E4; // type:function size:0xE4 scope:global +UpdateEngineLFO_FX__13SFXCTL_Enginef = .text:0x800BC7C8; // type:function size:0x338 scope:global +ShouldTurnOnClutch__13SFXCTL_Engine = .text:0x800BCB00; // type:function size:0x8C scope:global +UpdateClutchState__13SFXCTL_Engine = .text:0x800BCB8C; // type:function size:0x30 scope:global +UpdateNIS__14SFXCTL_Physicsff = .text:0x800BCBBC; // type:function size:0x638 scope:global +MsgRevEngine__14SFXCTL_PhysicsRC12MAIEngineRev = .text:0x800BD1F4; // type:function size:0x54 scope:global +MsgRevOff__14SFXCTL_PhysicsRC12MAIEngineRev = .text:0x800BD248; // type:function size:0x14 scope:global +__14NIS_RevManager = .text:0x800BD25C; // type:function size:0x58 scope:global +_._14NIS_RevManager = .text:0x800BD2B4; // type:function size:0x7C scope:global +OpenNISRevData__14NIS_RevManagerUi = .text:0x800BD330; // type:function size:0x16C scope:global +StartNISReving__14NIS_RevManager = .text:0x800BD49C; // type:function size:0x4 scope:global +Start321Reving__14NIS_RevManager = .text:0x800BD4A0; // type:function size:0x80 scope:global +CloseNIS__14NIS_RevManager = .text:0x800BD520; // type:function size:0x90 scope:global +Update__14NIS_RevManagerf = .text:0x800BD5B0; // type:function size:0x1A8 scope:global +GetTypeInfo__C17SFXCTL_AccelTrans = .text:0x800BD758; // type:function size:0xC scope:global +GetTypeName__C17SFXCTL_AccelTrans = .text:0x800BD764; // type:function size:0xC scope:global +CreateObject__17SFXCTL_AccelTransUi = .text:0x800BD770; // type:function size:0x5C scope:global +__17SFXCTL_AccelTrans = .text:0x800BD7CC; // type:function size:0x64 scope:global +_._17SFXCTL_AccelTrans = .text:0x800BD830; // type:function size:0x80 scope:global +SetupSFX__17SFXCTL_AccelTransP11CSTATE_Base = .text:0x800BD8B0; // type:function size:0x58 scope:global +InitSFX__17SFXCTL_AccelTrans = .text:0x800BD908; // type:function size:0x4C scope:global +GetController__17SFXCTL_AccelTransi = .text:0x800BD954; // type:function size:0x2C scope:global +AttachController__17SFXCTL_AccelTransP6SFXCTL = .text:0x800BD980; // type:function size:0x68 scope:global +UpdateParams__17SFXCTL_AccelTransf = .text:0x800BD9E8; // type:function size:0xE8 scope:global +UpdateRPM__17SFXCTL_AccelTransf = .text:0x800BDAD0; // type:function size:0x84 scope:global +UpdateTRQ__17SFXCTL_AccelTransf = .text:0x800BDB54; // type:function size:0x7C scope:global +UpdateState__17SFXCTL_AccelTransf = .text:0x800BDBD0; // type:function size:0x25C scope:global +BeginAccelTrans__17SFXCTL_AccelTrans = .text:0x800BDE2C; // type:function size:0xA4 scope:global +BeginAccelTrans_Idle__17SFXCTL_AccelTrans = .text:0x800BDED0; // type:function size:0xC4 scope:global +ShouldBeginAccelTrans_Idle__17SFXCTL_AccelTrans = .text:0x800BDF94; // type:function size:0x118 scope:global +ShouldBeginAccelTrans__17SFXCTL_AccelTrans = .text:0x800BE0AC; // type:function size:0xCC scope:global +ShouldPlayEngOffSweet__17SFXCTL_AccelTrans = .text:0x800BE178; // type:function size:0x74 scope:global +Destroy__17SFXCTL_AccelTrans = .text:0x800BE1EC; // type:function size:0x4 scope:global +GetTypeInfo__C18SFXCTL_HybridMotor = .text:0x800BE1F0; // type:function size:0xC scope:global +GetTypeName__C18SFXCTL_HybridMotor = .text:0x800BE1FC; // type:function size:0xC scope:global +CreateObject__18SFXCTL_HybridMotorUi = .text:0x800BE208; // type:function size:0x5C scope:global +__18SFXCTL_HybridMotor = .text:0x800BE264; // type:function size:0x154 scope:global +_._18SFXCTL_HybridMotor = .text:0x800BE3B8; // type:function size:0x68 scope:global +SetupSFX__18SFXCTL_HybridMotorP11CSTATE_Base = .text:0x800BE420; // type:function size:0x148 scope:global +InitSFX__18SFXCTL_HybridMotor = .text:0x800BE568; // type:function size:0x3C scope:global +GetController__18SFXCTL_HybridMotori = .text:0x800BE5A4; // type:function size:0x44 scope:global +AttachController__18SFXCTL_HybridMotorP6SFXCTL = .text:0x800BE5E8; // type:function size:0x80 scope:global +UpdateDeltaRPM__18SFXCTL_HybridMotor = .text:0x800BE668; // type:function size:0x15C scope:global +UpdateParams__18SFXCTL_HybridMotorf = .text:0x800BE7C4; // type:function size:0x100 scope:global +UpdateSingleMixEng__18SFXCTL_HybridMotorf = .text:0x800BE8C4; // type:function size:0x5D4 scope:global +UpdateDualMixEng__18SFXCTL_HybridMotorf = .text:0x800BEE98; // type:function size:0x674 scope:global +UpdateVolumeRedlining__18SFXCTL_HybridMotor = .text:0x800BF50C; // type:function size:0x11C scope:global +UpdateMixerOutputs__18SFXCTL_HybridMotor = .text:0x800BF628; // type:function size:0x260 scope:global +GetTypeInfo__C14SFXCTL_Physics = .text:0x800BF888; // type:function size:0xC scope:global +GetTypeName__C14SFXCTL_Physics = .text:0x800BF894; // type:function size:0xC scope:global +CreateObject__14SFXCTL_PhysicsUi = .text:0x800BF8A0; // type:function size:0x5C scope:global +__14SFXCTL_Physics = .text:0x800BF8FC; // type:function size:0x1E0 scope:global +_._14SFXCTL_Physics = .text:0x800BFADC; // type:function size:0x88 scope:global +UpdateParams__14SFXCTL_Physicsf = .text:0x800BFB64; // type:function size:0x370 scope:global +SetupSFX__14SFXCTL_PhysicsP11CSTATE_Base = .text:0x800BFED4; // type:function size:0x34 scope:global +InitSFX__14SFXCTL_Physics = .text:0x800BFF08; // type:function size:0xC0 scope:global +UpdateMixerOutputs__14SFXCTL_Physics = .text:0x800BFFC8; // type:function size:0x4BC scope:global +GetTypeInfo__C16SFXCTL_AIPhysics = .text:0x800C0484; // type:function size:0xC scope:global +GetTypeName__C16SFXCTL_AIPhysics = .text:0x800C0490; // type:function size:0xC scope:global +CreateObject__16SFXCTL_AIPhysicsUi = .text:0x800C049C; // type:function size:0x5C scope:global +__16SFXCTL_AIPhysics = .text:0x800C04F8; // type:function size:0x7C scope:global +_._16SFXCTL_AIPhysics = .text:0x800C0574; // type:function size:0x68 scope:global +SetupSFX__16SFXCTL_AIPhysicsP11CSTATE_Base = .text:0x800C05DC; // type:function size:0x20 scope:global +InitSFX__16SFXCTL_AIPhysics = .text:0x800C05FC; // type:function size:0x44 scope:global +UpdateParams__16SFXCTL_AIPhysicsf = .text:0x800C0640; // type:function size:0x270 scope:global +GenDeltaRPM__16SFXCTL_AIPhysics = .text:0x800C08B0; // type:function size:0x1C4 scope:global +UpdateRPM__16SFXCTL_AIPhysicsf = .text:0x800C0A74; // type:function size:0x154 scope:global +UpdateAccel__16SFXCTL_AIPhysicsf = .text:0x800C0BC8; // type:function size:0xA0 scope:global +UpdateTorque__16SFXCTL_AIPhysicsf = .text:0x800C0C68; // type:function size:0x60 scope:global +SuggestGear__16SFXCTL_AIPhysics = .text:0x800C0CC8; // type:function size:0xD4 scope:global +GetController__16SFXCTL_AIPhysicsi = .text:0x800C0D9C; // type:function size:0x14 scope:global +AttachController__16SFXCTL_AIPhysicsP6SFXCTL = .text:0x800C0DB0; // type:function size:0x58 scope:global +UpdateGear__16SFXCTL_AIPhysics = .text:0x800C0E08; // type:function size:0x17C scope:global +Destroy__16SFXCTL_AIPhysics = .text:0x800C0F84; // type:function size:0x4 scope:global +GetTypeInfo__C19SFXCTL_TruckPhysics = .text:0x800C0F88; // type:function size:0xC scope:global +GetTypeName__C19SFXCTL_TruckPhysics = .text:0x800C0F94; // type:function size:0xC scope:global +CreateObject__19SFXCTL_TruckPhysicsUi = .text:0x800C0FA0; // type:function size:0x78 scope:global +GetTypeInfo__C13SFXCTL_Tunnel = .text:0x800C1018; // type:function size:0xC scope:global +GetTypeName__C13SFXCTL_Tunnel = .text:0x800C1024; // type:function size:0xC scope:global +CreateObject__13SFXCTL_TunnelUi = .text:0x800C1030; // type:function size:0x5C scope:global +__13SFXCTL_Tunnel = .text:0x800C108C; // type:function size:0x13C scope:global +_._13SFXCTL_Tunnel = .text:0x800C11C8; // type:function size:0x68 scope:global +SetupSFX__13SFXCTL_TunnelP11CSTATE_Base = .text:0x800C1230; // type:function size:0x20 scope:global +InitSFX__13SFXCTL_Tunnel = .text:0x800C1250; // type:function size:0x6C scope:global +GetController__13SFXCTL_Tunneli = .text:0x800C12BC; // type:function size:0x8 scope:global +AttachController__13SFXCTL_TunnelP6SFXCTL = .text:0x800C12C4; // type:function size:0x4 scope:global +UpdateDriveBySnds__13SFXCTL_Tunnelf = .text:0x800C12C8; // type:function size:0x754 scope:global +GetTunnelType__13SFXCTL_TunnelR8bVector318eTrackPathZoneType = .text:0x800C1A1C; // type:function size:0x88 scope:global +UpdateParams__13SFXCTL_Tunnelf = .text:0x800C1AA4; // type:function size:0xA4 scope:global +UpdateIsInTunnel__13SFXCTL_Tunnelf = .text:0x800C1B48; // type:function size:0x264 scope:global +UpdateOcclusion__13SFXCTL_Tunnelf = .text:0x800C1DAC; // type:function size:0x254 scope:global +UpdateMixerOutputs__13SFXCTL_Tunnel = .text:0x800C2000; // type:function size:0xD4 scope:global +UpdateCityVerb__13SFXCTL_Tunnelf = .text:0x800C20D4; // type:function size:0x128 scope:global +Destroy__13SFXCTL_Tunnel = .text:0x800C21FC; // type:function size:0x4 scope:global +EndTunnelVerb__13SFXCTL_Tunnel = .text:0x800C2200; // type:function size:0x44 scope:global +AdjustReverbOffset__13SFXCTL_Tunneli = .text:0x800C2244; // type:function size:0xE4 scope:global +SetCurrentReverbType__13SFXCTL_Tunnel9eREVERBFXi = .text:0x800C2328; // type:function size:0xA8 scope:global +UpdateReflectionParams__13SFXCTL_Tunnelf = .text:0x800C23D0; // type:function size:0x3CC scope:global +GetTypeInfo__C16SFXCTL_MasterVol = .text:0x800C279C; // type:function size:0xC scope:global +GetTypeName__C16SFXCTL_MasterVol = .text:0x800C27A8; // type:function size:0xC scope:global +CreateObject__16SFXCTL_MasterVolUi = .text:0x800C27B4; // type:function size:0x5C scope:global +__16SFXCTL_MasterVol = .text:0x800C2810; // type:function size:0x50 scope:global +_._16SFXCTL_MasterVol = .text:0x800C2860; // type:function size:0x58 scope:global +InitSFX__16SFXCTL_MasterVol = .text:0x800C28B8; // type:function size:0x4 scope:global +UpdateParams__16SFXCTL_MasterVolf = .text:0x800C28BC; // type:function size:0x380 scope:global +GetTypeInfo__C16SFXCTL_GameState = .text:0x800C2C3C; // type:function size:0xC scope:global +GetTypeName__C16SFXCTL_GameState = .text:0x800C2C48; // type:function size:0xC scope:global +CreateObject__16SFXCTL_GameStateUi = .text:0x800C2C54; // type:function size:0x78 scope:global +UpdateMixerOutputs__16SFXCTL_GameState = .text:0x800C2CCC; // type:function size:0x4C scope:global +GetTypeInfo__C15SFXCTL_3DColPos = .text:0x800C2D18; // type:function size:0xC scope:global +GetTypeName__C15SFXCTL_3DColPos = .text:0x800C2D24; // type:function size:0xC scope:global +CreateObject__15SFXCTL_3DColPosUi = .text:0x800C2D30; // type:function size:0x78 scope:global +GetTypeInfo__C18SFXCTL_3DScrapePos = .text:0x800C2DA8; // type:function size:0xC scope:global +GetTypeName__C18SFXCTL_3DScrapePos = .text:0x800C2DB4; // type:function size:0xC scope:global +CreateObject__18SFXCTL_3DScrapePosUi = .text:0x800C2DC0; // type:function size:0x78 scope:global +GetTypeInfo__C15SFXCTL_3DCarPos = .text:0x800C2E38; // type:function size:0xC scope:global +GetTypeName__C15SFXCTL_3DCarPos = .text:0x800C2E44; // type:function size:0xC scope:global +CreateObject__15SFXCTL_3DCarPosUi = .text:0x800C2E50; // type:function size:0x5C scope:global +__15SFXCTL_3DCarPos = .text:0x800C2EAC; // type:function size:0x3C scope:global +_._15SFXCTL_3DCarPos = .text:0x800C2EE8; // type:function size:0x58 scope:global +GetTypeInfo__C15SFXCTL_3DObjPos = .text:0x800C2F40; // type:function size:0xC scope:global +GetTypeName__C15SFXCTL_3DObjPos = .text:0x800C2F4C; // type:function size:0xC scope:global +CreateObject__15SFXCTL_3DObjPosUi = .text:0x800C2F58; // type:function size:0x5C scope:global +__15SFXCTL_3DObjPos = .text:0x800C2FB4; // type:function size:0x7C scope:global +_._15SFXCTL_3DObjPos = .text:0x800C3030; // type:function size:0x58 scope:global +SetPlayerRef__15SFXCTL_3DObjPosi = .text:0x800C3088; // type:function size:0x8 scope:global +SetCameraAngle__15SFXCTL_3DObjPos = .text:0x800C3090; // type:function size:0xF0 scope:global +GenerateSinglePlayerMix__15SFXCTL_3DObjPos = .text:0x800C3180; // type:function size:0x5D0 scope:global +Generate3DParams__15SFXCTL_3DObjPosi = .text:0x800C3750; // type:function size:0x198 scope:global +AssignPositionVector__15SFXCTL_3DObjPosP8bVector3 = .text:0x800C38E8; // type:function size:0x8 scope:global +AssignDirectionVector__15SFXCTL_3DObjPosPC8bVector3 = .text:0x800C38F0; // type:function size:0x8 scope:global +AssignVelocityVector__15SFXCTL_3DObjPosPC8bVector3 = .text:0x800C38F8; // type:function size:0x8 scope:global +Detach__15SFXCTL_3DObjPos = .text:0x800C3900; // type:function size:0x10 scope:global +UpdateParams__15SFXCTL_3DObjPosf = .text:0x800C3910; // type:function size:0xCC scope:global +UpdateDoppler__15SFXCTL_3DObjPosif = .text:0x800C39DC; // type:function size:0x348 scope:global +GetTypeInfo__C17SFXCTL_Pathfinder = .text:0x800C3D24; // type:function size:0xC scope:global +GetTypeName__C17SFXCTL_Pathfinder = .text:0x800C3D30; // type:function size:0xC scope:global +CreateObject__17SFXCTL_PathfinderUi = .text:0x800C3D3C; // type:function size:0x5C scope:global +__17SFXCTL_Pathfinder = .text:0x800C3D98; // type:function size:0x78 scope:global +_._17SFXCTL_Pathfinder = .text:0x800C3E10; // type:function size:0xC8 scope:global +GetController__17SFXCTL_Pathfinderi = .text:0x800C3ED8; // type:function size:0x8 scope:global +AttachController__17SFXCTL_PathfinderP6SFXCTL = .text:0x800C3EE0; // type:function size:0x4 scope:global +UpdateParams__17SFXCTL_Pathfinderf = .text:0x800C3EE4; // type:function size:0x84 scope:global +UpdateMixerOutputs__17SFXCTL_Pathfinder = .text:0x800C3F68; // type:function size:0x4 scope:global +SetupSFX__17SFXCTL_PathfinderP11CSTATE_Base = .text:0x800C3F6C; // type:function size:0xC scope:global +CrossMapNodeParam__17SFXCTL_Pathfinderii = .text:0x800C3F78; // type:function size:0x78 scope:global +SongProgressCallback__17SFXCTL_Pathfinderii = .text:0x800C3FF0; // type:function size:0x13C scope:global +EventReleaseCallback__17SFXCTL_PathfinderPv15PATHEVENTRESULT = .text:0x800C412C; // type:function size:0x4 scope:global +EventActionCallback__17SFXCTL_Pathfinderiii = .text:0x800C4130; // type:function size:0x1AC scope:global +InitSFX__17SFXCTL_Pathfinder = .text:0x800C42DC; // type:function size:0x78 scope:global +InitPFParms__17SFXCTL_PathfinderP9stPFParmsii = .text:0x800C4354; // type:function size:0xF4 scope:global +CreateTrack__17SFXCTL_Pathfinderi = .text:0x800C4448; // type:function size:0xAC scope:global +GetHandle__17SFXCTL_Pathfinderi = .text:0x800C44F4; // type:function size:0x50 scope:global +DetachStreamInstance__17SFXCTL_PathfinderP9stPFParms = .text:0x800C4544; // type:function size:0x84 scope:global +AttachStreamInstance__17SFXCTL_PathfinderP9stPFParms = .text:0x800C45C8; // type:function size:0xA0 scope:global +DestroyTrack__17SFXCTL_PathfinderP9stPFParms = .text:0x800C4668; // type:function size:0x148 scope:global +GetTypeInfo__C16SFXCTL_3DHeliPos = .text:0x800C47B0; // type:function size:0xC scope:global +GetTypeName__C16SFXCTL_3DHeliPos = .text:0x800C47BC; // type:function size:0xC scope:global +CreateObject__16SFXCTL_3DHeliPosUi = .text:0x800C47C8; // type:function size:0x78 scope:global +GetTypeInfo__C17SFXCTL_Helicopter = .text:0x800C4840; // type:function size:0xC scope:global +GetTypeName__C17SFXCTL_Helicopter = .text:0x800C484C; // type:function size:0xC scope:global +CreateObject__17SFXCTL_HelicopterUi = .text:0x800C4858; // type:function size:0x5C scope:global +__17SFXCTL_Helicopter = .text:0x800C48B4; // type:function size:0x90 scope:global +_._17SFXCTL_Helicopter = .text:0x800C4944; // type:function size:0x58 scope:global +GetController__17SFXCTL_Helicopteri = .text:0x800C499C; // type:function size:0x14 scope:global +AttachController__17SFXCTL_HelicopterP6SFXCTL = .text:0x800C49B0; // type:function size:0x58 scope:global +SetupSFX__17SFXCTL_HelicopterP11CSTATE_Base = .text:0x800C4A08; // type:function size:0x20 scope:global +InitSFX__17SFXCTL_Helicopter = .text:0x800C4A28; // type:function size:0x94 scope:global +Detach__17SFXCTL_Helicopter = .text:0x800C4ABC; // type:function size:0xC scope:global +UpdateParams__17SFXCTL_Helicopterf = .text:0x800C4AC8; // type:function size:0x190 scope:global +reserve__Q24_STLt6vector2ZUiZQ33UTL3Stdt9Allocator2ZUiZ18_type_ResAllocListUi = .text:0x800C4C58; // type:function size:0x11C scope:global +reserve__Q24_STLt6vector2ZP12EAX_CarStateZQ33UTL3Stdt9Allocator2ZP12EAX_CarStateZ18_type_RefCountListUi = .text:0x800C4D74; // type:function size:0x11C scope:global +find__H2ZPP14ISndAttachableZP14ISndAttachable_4_STLX01X01RCX11_X01 = .text:0x800C4E90; // type:function size:0xB0 scope:global +find__H2ZQ24_STLt14_List_iterator2ZiZQ24_STLt16_Nonconst_traits1ZiZi_4_STLX01X01RCX11_X01 = .text:0x800C4F40; // type:function size:0x60 scope:global +clear__Q24_STLt10_List_base2Z10stBankSlotZQ33UTL3Stdt9Allocator2Z10stBankSlotZ20_type_BankSlotSystem = .text:0x800C4FA0; // type:function size:0x84 scope:global +clear__Q24_STLt10_List_base2Z15stSndAssetQueueZQ33UTL3Stdt9Allocator2Z15stSndAssetQueueZ19_type_SndAssetQueue = .text:0x800C5024; // type:function size:0x78 scope:global +_M_create_nodes__Q24_STLt11_Deque_base2ZP19stSndDataLoadParamsZQ33UTL3Stdt9Allocator2ZP19stSndDataLoadParamsZ16_type_AsyncQueuePPP19stSndDataLoadParamsT1 = .text:0x800C509C; // type:function size:0x58 scope:global +_M_initialize_map__Q24_STLt11_Deque_base2ZP19stSndDataLoadParamsZQ33UTL3Stdt9Allocator2ZP19stSndDataLoadParamsZ16_type_AsyncQueueUi = .text:0x800C50F4; // type:function size:0xF0 scope:global +_M_destroy_nodes__Q24_STLt11_Deque_base2ZP19stSndDataLoadParamsZQ33UTL3Stdt9Allocator2ZP19stSndDataLoadParamsZ16_type_AsyncQueuePPP19stSndDataLoadParamsT1 = .text:0x800C51E4; // type:function size:0x60 scope:global +_._Q24_STLt11_Deque_base2ZP19stSndDataLoadParamsZQ33UTL3Stdt9Allocator2ZP19stSndDataLoadParamsZ16_type_AsyncQueue = .text:0x800C5244; // type:function size:0x7C scope:global +_M_fill_insert__Q24_STLt6vector2ZPcZQ33UTL3Stdt9Allocator2ZPcZ16_type_EvtSystemsPPcUiRCPc = .text:0x800C52C0; // type:function size:0x270 scope:global +clear__Q24_STLt10_List_base2Z15SampleQueueItemZQ33UTL3Stdt9Allocator2Z15SampleQueueItemZ10_type_list = .text:0x800C5530; // type:function size:0x78 scope:global +find__H2ZPP14cSampleWarpperZP14cSampleWarpper_4_STLX01X01RCX11_X01 = .text:0x800C55A8; // type:function size:0xB0 scope:global +clear__Q24_STLt10_List_base2ZP14cSampleWarpperZQ33UTL3Stdt9Allocator2ZP14cSampleWarpperZ10_type_list = .text:0x800C5658; // type:function size:0x78 scope:global +find__H2ZPP12CarSoundConnZP12CarSoundConn_4_STLX01X01RCX11_X01 = .text:0x800C56D0; // type:function size:0xB0 scope:global +find__H2ZPP13HeliSoundConnZP13HeliSoundConn_4_STLX01X01RCX11_X01 = .text:0x800C5780; // type:function size:0xB0 scope:global +__upper_bound__H4ZPQ26Speech7copPairZQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x800C5830; // type:function size:0x48 scope:global +__lower_bound__H4ZPQ26Speech7copPairZQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x800C5878; // type:function size:0x48 scope:global +__less__H1ZQ26Speech7copPair_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x800C58C0; // type:function size:0xC scope:global +__adjust_heap__H4ZPQ26Speech7copPairZiZQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPair_4_STLX01X11X11X21X31_v = .text:0x800C58CC; // type:function size:0x11C scope:global +make_heap__H2ZPQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPair_4_STLX01X01X11_v = .text:0x800C59E8; // type:function size:0x90 scope:global +pop_heap__H2ZPQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPair_4_STLX01X01X11_v = .text:0x800C5A78; // type:function size:0x60 scope:global +__partial_sort__H3ZPQ26Speech7copPairZQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPair_4_STLX01X01X01PX11X21_v = .text:0x800C5AD8; // type:function size:0xD8 scope:global +partial_sort__H2ZPQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPair_4_STLX01X01X01X11_v = .text:0x800C5BB0; // type:function size:0x30 scope:global +__unguarded_partition__H3ZPQ26Speech7copPairZQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPair_4_STLX01X01X11X21_X01 = .text:0x800C5BE0; // type:function size:0x6C scope:global +__introsort_loop__H4ZPQ26Speech7copPairZQ26Speech7copPairZiZQ24_STLt4less1ZQ26Speech7copPair_4_STLX01X01PX11X21X31_v = .text:0x800C5C4C; // type:function size:0x134 scope:global +__unguarded_linear_insert__H3ZPQ26Speech7copPairZQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPair_4_STLX01X11X21_v = .text:0x800C5D80; // type:function size:0x44 scope:global +__insertion_sort__H2ZPQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPair_4_STLX01X01X11_v = .text:0x800C5DC4; // type:function size:0xC0 scope:global +__unguarded_insertion_sort_aux__H3ZPQ26Speech7copPairZQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPair_4_STLX01X01PX11X21_v = .text:0x800C5E84; // type:function size:0x68 scope:global +__final_insertion_sort__H2ZPQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPair_4_STLX01X01X11_v = .text:0x800C5EEC; // type:function size:0x7C scope:global +sort__H1ZPQ26Speech7copPair_4_STLX01X01_v = .text:0x800C5F68; // type:function size:0xA0 scope:global +__lower_bound__H4ZPCQ26Speech7copPairZQ26Speech7copPairZQ24_STLt4less1ZQ26Speech7copPairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x800C6008; // type:function size:0x48 scope:global +__upper_bound__H4ZPQ26Speech15SpeechEventPairZQ26Speech15SpeechEventPairZQ24_STLt4less1ZQ26Speech15SpeechEventPairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x800C6050; // type:function size:0x48 scope:global +__lower_bound__H4ZPQ26Speech15SpeechEventPairZQ26Speech15SpeechEventPairZQ24_STLt4less1ZQ26Speech15SpeechEventPairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x800C6098; // type:function size:0x48 scope:global +__upper_bound__H4ZPQ26Speech11HistoryPairZQ26Speech11HistoryPairZQ24_STLt4less1ZQ26Speech11HistoryPairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x800C60E0; // type:function size:0x54 scope:global +__lower_bound__H4ZPQ26Speech11HistoryPairZQ26Speech11HistoryPairZQ24_STLt4less1ZQ26Speech11HistoryPairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x800C6134; // type:function size:0x54 scope:global +smooth__H1Zf_X01X01X01X01_X01 = .text:0x800C6188; // type:function size:0x28 scope:global +smooth__H1Zf_X01X01X01_X01 = .text:0x800C61B0; // type:function size:0x28 scope:global +smooth__H1Zi_X01X01X01_X01 = .text:0x800C61D8; // type:function size:0x28 scope:global +smooth__H1Zi_X01X01X01X01_X01 = .text:0x800C6200; // type:function size:0x28 scope:global +__static_initialization_and_destruction_0 = .text:0x800C6228; // type:function size:0x2444 scope:local +__as__Q36Attrib3Gen10simsurfaceRCQ26Attrib8Instance = .text:0x800C866C; // type:function size:0x30 scope:global +ClassKey__Q36Attrib3Gen10simsurface = .text:0x800C869C; // type:function size:0xC scope:global +Compress__CQ23Sim6PacketPQ23Sim6Packet = .text:0x800C86A8; // type:function size:0x8 scope:global +Decompress__CQ23Sim6PacketPQ23Sim6Packet = .text:0x800C86B0; // type:function size:0x8 scope:global +_._Q23Sim6Packet = .text:0x800C86B8; // type:function size:0x34 scope:global +_._12AudioMemBase = .text:0x800C86EC; // type:function size:0x34 scope:global +_._Q25Sound10AudioEvent = .text:0x800C8720; // type:function size:0x68 scope:global +Update__Q25Sound10AudioEventRC8bVector3N21f = .text:0x800C8788; // type:function size:0x50 scope:global +Pause__Q25Sound14CollisionEventb = .text:0x800C87D8; // type:function size:0x4 scope:global +ClassKey__Q36Attrib3Gen6speech = .text:0x800C87DC; // type:function size:0xC scope:global +_._Q25Sound5Wheel = .text:0x800C87E8; // type:function size:0x54 scope:global +ClassKey__Q36Attrib3Gen11engineaudio = .text:0x800C883C; // type:function size:0xC scope:global +push_back__Q23UTLt6Vector2ZP12EAX_CarStatei16RCP12EAX_CarState = .text:0x800C8848; // type:function size:0x154 scope:global +__12EAX_CarStatePCQ26Attrib10CollectionQ25Sound7ContextUiP10HSIMABLE__ = .text:0x800C899C; // type:function size:0x51C scope:global +push_back__Q23UTLt6Vector2ZP13EAX_HeliStatei16RCP13EAX_HeliState = .text:0x800C8EB8; // type:function size:0x154 scope:global +ClassKey__Q36Attrib3Gen11audiosystem = .text:0x800C900C; // type:function size:0xC scope:global +Clear__18stAssetDescription = .text:0x800C9018; // type:function size:0x80 scope:global +Clear__10stBankSlot = .text:0x800C9098; // type:function size:0x30 scope:global +Clear__19stSndDataLoadParams = .text:0x800C90C8; // type:function size:0x108 scope:global +InitChannel__18EAXS_StreamChanneliiPci9eSTRMTYPE = .text:0x800C91D0; // type:function size:0x8 scope:global +SetQueueReqInitiated__18EAXS_StreamChannelb = .text:0x800C91D8; // type:function size:0x4 scope:global +_._Q33UTL3Stdt5deque2ZP19stSndDataLoadParamsZ16_type_AsyncQueue = .text:0x800C91DC; // type:function size:0xB0 scope:global +__Q33UTL3Stdt5deque2ZP19stSndDataLoadParamsZ16_type_AsyncQueue = .text:0x800C928C; // type:function size:0x60 scope:global +Play__11EAXTunerCarPv = .text:0x800C92EC; // type:function size:0x8 scope:global +_._9EAXCopCar = .text:0x800C92F4; // type:function size:0x4C scope:global +_._8EAXTruck = .text:0x800C9340; // type:function size:0x4C scope:global +_GetKind__16MNotifyMusicFlow = .text:0x800C938C; // type:function size:0x64 scope:global +OnReceive__12CarSoundConnPQ23Sim6Packet = .text:0x800C93F0; // type:function size:0x4 scope:global +OnClose__12CarSoundConn = .text:0x800C93F4; // type:function size:0x40 scope:global +SetAssetsLoaded__12CarSoundConnP12CarSoundConn = .text:0x800C9434; // type:function size:0x24 scope:global +_._Q29SoundConn15Pkt_Car_Service = .text:0x800C9458; // type:function size:0x78 scope:global +ConnectionClass__Q29SoundConn15Pkt_Car_Service = .text:0x800C94D0; // type:function size:0x64 scope:global +Size__Q29SoundConn15Pkt_Car_Service = .text:0x800C9534; // type:function size:0x8 scope:global +Type__Q29SoundConn15Pkt_Car_Service = .text:0x800C953C; // type:function size:0x20 scope:global +_._Q29SoundConn16Pkt_Heli_Service = .text:0x800C955C; // type:function size:0x34 scope:global +ConnectionClass__Q29SoundConn16Pkt_Heli_Service = .text:0x800C9590; // type:function size:0x64 scope:global +Size__Q29SoundConn16Pkt_Heli_Service = .text:0x800C95F4; // type:function size:0x8 scope:global +Type__Q29SoundConn16Pkt_Heli_Service = .text:0x800C95FC; // type:function size:0x20 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z10MMiscSoundZ9EAXCommonZ9EAXCommonPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800C961C; // type:function size:0x88 scope:global +ClassKey__Q36Attrib3Gen15aud_stitch_loop = .text:0x800C96A4; // type:function size:0xC scope:global +push_back__Q23UTLt6Vector2Z15SampleQueueItemi16RC15SampleQueueItem = .text:0x800C96B0; // type:function size:0x158 scope:global +GetStichList__15cSTICH_PlayBack10STICH_TYPE = .text:0x800C9808; // type:function size:0x10 scope:global +push_back__Q23UTLt6Vector2ZP14cSampleWarpperi16RCP14cSampleWarpper = .text:0x800C9818; // type:function size:0x154 scope:global +_GetKind__12MAIEngineRev = .text:0x800C996C; // type:function size:0x64 scope:global +GetPhysTRQ__14SFXCTL_Physics = .text:0x800C99D0; // type:function size:0x8 scope:global +UpdateMixerOutputs__16SFXCTL_AIPhysics = .text:0x800C99D8; // type:function size:0x4 scope:global +_._19SFXCTL_TruckPhysics = .text:0x800C99DC; // type:function size:0x4C scope:global +push_back__Q23UTLt6Vector2ZP12CarSoundConni16RCP12CarSoundConn = .text:0x800C9A28; // type:function size:0x154 scope:global +OnReceive__13HeliSoundConnPQ23Sim6Packet = .text:0x800C9B7C; // type:function size:0x4 scope:global +OnClose__13HeliSoundConn = .text:0x800C9B80; // type:function size:0x40 scope:global +OnStatusCheck__13HeliSoundConn = .text:0x800C9BC0; // type:function size:0x8 scope:global +push_back__Q23UTLt6Vector2ZP13HeliSoundConni16RCP13HeliSoundConn = .text:0x800C9BC8; // type:function size:0x154 scope:global +GetEngRPM__13SFXCTL_Engine = .text:0x800C9D1C; // type:function size:0x8 scope:global +GetSmoothedEngRPM__13SFXCTL_Engine = .text:0x800C9D24; // type:function size:0x8 scope:global +GetEngTorque__13SFXCTL_Engine = .text:0x800C9D2C; // type:function size:0x8 scope:global +GetSmoothedEngTorque__13SFXCTL_Engine = .text:0x800C9D34; // type:function size:0x8 scope:global +_GetKind__23MNotifyVehicleDestroyed = .text:0x800C9D3C; // type:function size:0x64 scope:global +_GetKind__14MCountdownDone = .text:0x800C9DA0; // type:function size:0x64 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z14MCountdownDoneZ13SFXCTL_EngineZ13SFXCTL_EnginePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800C9E04; // type:function size:0x88 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z23MNotifyVehicleDestroyedZ13SFXCTL_EngineZ13SFXCTL_EnginePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800C9E8C; // type:function size:0x88 scope:global +_IHandle__10ICountdown = .text:0x800C9F14; // type:function size:0xC scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z12MAIEngineRevZ14SFXCTL_PhysicsZ14SFXCTL_PhysicsPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800C9F20; // type:function size:0x88 scope:global +_GetKind__15MPursuitBreaker = .text:0x800C9FA8; // type:function size:0x64 scope:global +_._16SFXCTL_GameState = .text:0x800CA00C; // type:function size:0x4C scope:global +_._15SFXCTL_3DColPos = .text:0x800CA058; // type:function size:0x58 scope:global +_._18SFXCTL_3DScrapePos = .text:0x800CA0B0; // type:function size:0x58 scope:global +_._16SFXCTL_3DHeliPos = .text:0x800CA108; // type:function size:0x58 scope:global +__dl__12AudioMemBasePv = .text:0x800CA160; // type:function size:0x2C scope:global +Reset__Q25Sound5Wheel = .text:0x800CA18C; // type:function size:0x7C scope:global +Reset__Q25Sound6Engine = .text:0x800CA208; // type:function size:0x2C scope:global +_._Q43UTL11Collectionst8Listable2Z12EAX_CarStatei10_4List = .text:0x800CA234; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP12EAX_CarStatei16Ui = .text:0x800CA2E8; // type:function size:0x4 scope:global +_._Q43UTL11Collectionst8Listable2Z13EAX_HeliStatei10_4List = .text:0x800CA2EC; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP13EAX_HeliStatei16Ui = .text:0x800CA3A0; // type:function size:0x4 scope:global +Alloc__17CSISCoreAllocatorUiPCcUi = .text:0x800CA3A4; // type:function size:0x28 scope:global +Alloc__17CSISCoreAllocatorUiPCcUiUiUi = .text:0x800CA3CC; // type:function size:0x40 scope:global +Free__17CSISCoreAllocatorPvUi = .text:0x800CA40C; // type:function size:0x28 scope:global +_._Q43UTL11Collectionst11ListableSet4Z14cSampleWarpperi25Z10STICH_TYPEUi3_4List = .text:0x800CA434; // type:function size:0xB4 scope:global +_._Q43UTL11Collectionst8Listable2Z12CarSoundConni10_4List = .text:0x800CA4E8; // type:function size:0xB4 scope:global +SType__Q29SoundConn15Pkt_Car_Service = .text:0x800CA59C; // type:function size:0x58 scope:global +SType__Q29SoundConn16Pkt_Heli_Service = .text:0x800CA5F4; // type:function size:0x58 scope:global +OnGrowRequest__Q23UTLt6Vector2Z15SampleQueueItemi16Ui = .text:0x800CA64C; // type:function size:0x4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP14cSampleWarpperi16Ui = .text:0x800CA650; // type:function size:0x4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP12CarSoundConni16Ui = .text:0x800CA654; // type:function size:0x4 scope:global +_._Q43UTL11Collectionst8Listable2Z13HeliSoundConni10_4List = .text:0x800CA658; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP13HeliSoundConni16Ui = .text:0x800CA70C; // type:function size:0x4 scope:global +_._12PF_Allocator = .text:0x800CA710; // type:function size:0x34 scope:global +Alloc__12PF_AllocatorUiRCQ22EA12TagValuePair = .text:0x800CA744; // type:function size:0x34 scope:global +Free__12PF_AllocatorPvUi = .text:0x800CA778; // type:function size:0x28 scope:global +AddRef__12PF_Allocator = .text:0x800CA7A0; // type:function size:0x14 scope:global +Release__12PF_Allocator = .text:0x800CA7B4; // type:function size:0x5C scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP13HeliSoundConni10i16UiUi = .text:0x800CA810; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP13HeliSoundConni10i16PP13HeliSoundConnUi = .text:0x800CA818; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP13HeliSoundConni10i16Ui = .text:0x800CA81C; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP13HeliSoundConni10i16 = .text:0x800CA824; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP12CarSoundConni10i16UiUi = .text:0x800CA82C; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP12CarSoundConni10i16PP12CarSoundConnUi = .text:0x800CA834; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP12CarSoundConni10i16Ui = .text:0x800CA838; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP12CarSoundConni10i16 = .text:0x800CA840; // type:function size:0x8 scope:global +_._Q23UTLt11FixedVector3Z15SampleQueueItemi43i16 = .text:0x800CA848; // type:function size:0xB4 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3Z15SampleQueueItemi43i16UiUi = .text:0x800CA8FC; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3Z15SampleQueueItemi43i16P15SampleQueueItemUi = .text:0x800CA904; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3Z15SampleQueueItemi43i16Ui = .text:0x800CA908; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3Z15SampleQueueItemi43i16 = .text:0x800CA910; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP14cSampleWarpperi25i16UiUi = .text:0x800CA918; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP14cSampleWarpperi25i16PP14cSampleWarpperUi = .text:0x800CA920; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP14cSampleWarpperi25i16Ui = .text:0x800CA924; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP14cSampleWarpperi25i16 = .text:0x800CA92C; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP13EAX_HeliStatei10i16UiUi = .text:0x800CA934; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP13EAX_HeliStatei10i16PP13EAX_HeliStateUi = .text:0x800CA93C; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP13EAX_HeliStatei10i16Ui = .text:0x800CA940; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP13EAX_HeliStatei10i16 = .text:0x800CA948; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP12EAX_CarStatei10i16UiUi = .text:0x800CA950; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP12EAX_CarStatei10i16PP12EAX_CarStateUi = .text:0x800CA958; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP12EAX_CarStatei10i16Ui = .text:0x800CA95C; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP12EAX_CarStatei10i16 = .text:0x800CA964; // type:function size:0x8 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP12EAX_CarStatei16Ui = .text:0x800CA96C; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP13EAX_HeliStatei16Ui = .text:0x800CA98C; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2Z15SampleQueueItemi16Ui = .text:0x800CA9AC; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP14cSampleWarpperi16Ui = .text:0x800CA9CC; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP12CarSoundConni16Ui = .text:0x800CA9EC; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP13HeliSoundConni16Ui = .text:0x800CAA0C; // type:function size:0x20 scope:global +_._Q23UTLt6Vector2Z15SampleQueueItemi16 = .text:0x800CAA2C; // type:function size:0x34 scope:global +_._Q23UTLt6Vector2ZP14cSampleWarpperi16 = .text:0x800CAA60; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP14cSampleWarpperi25i16 = .text:0x800CAA94; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2ZP12EAX_CarStatei16 = .text:0x800CAB48; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP12EAX_CarStatei10i16 = .text:0x800CAB7C; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2ZP13EAX_HeliStatei16 = .text:0x800CAC30; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP13EAX_HeliStatei10i16 = .text:0x800CAC64; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2ZP12CarSoundConni16 = .text:0x800CAD18; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP12CarSoundConni10i16 = .text:0x800CAD4C; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2ZP13HeliSoundConni16 = .text:0x800CAE00; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP13HeliSoundConni10i16 = .text:0x800CAE34; // type:function size:0xB4 scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP13HeliSoundConni16 = .text:0x800CAEE8; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP12CarSoundConni16 = .text:0x800CAEF4; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2Z15SampleQueueItemi16 = .text:0x800CAF00; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP14cSampleWarpperi16 = .text:0x800CAF0C; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP13EAX_HeliStatei16 = .text:0x800CAF18; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP12EAX_CarStatei16 = .text:0x800CAF24; // type:function size:0xC scope:global +_GLOBAL_.I.DEBUG_360MEM = .text:0x800CAF30; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x800CAF5C; // type:label scope:local +GetStateInfo__C6EAXCar = .text:0x800CAF5C; // type:function size:0xC scope:global +GetStateName__C6EAXCar = .text:0x800CAF68; // type:function size:0xC scope:global +CreateState__6EAXCarUi = .text:0x800CAF74; // type:function size:0x3C scope:global +__6EAXCar = .text:0x800CAFB0; // type:function size:0x178 scope:global +_._6EAXCar = .text:0x800CB128; // type:function size:0x9C scope:global +GetEngineAttributes__6EAXCar = .text:0x800CB1C4; // type:function size:0x1C scope:global +UpgradeIntervals__Fiii = .text:0x800CB1E0; // type:function size:0xBC scope:global +Attach__6EAXCarPv = .text:0x800CB29C; // type:function size:0x320 scope:global +GenerateUpgradedEngine__FP12EAX_CarStatei = .text:0x800CB5BC; // type:function size:0x188 scope:global +Detach__6EAXCar = .text:0x800CB744; // type:function size:0x28 scope:global +ProcessUpdate__6EAXCar = .text:0x800CB76C; // type:function size:0x2C scope:global +UpdateParams__6EAXCarf = .text:0x800CB798; // type:function size:0x64 scope:global +UpdateRotation__6EAXCar = .text:0x800CB7FC; // type:function size:0x10 scope:global +GetVelocityMagnitudeMPH__6EAXCar = .text:0x800CB80C; // type:function size:0x84 scope:global +IsHoodCameraOn__6EAXCar = .text:0x800CB890; // type:function size:0x24 scope:global +IsBumperCameraOn__6EAXCar = .text:0x800CB8B4; // type:function size:0x24 scope:global +UpdatePov__6EAXCar = .text:0x800CB8D8; // type:function size:0xC scope:global +SFXMessage__6EAXCar15eSFXMessageTypeUiUi = .text:0x800CB8E4; // type:function size:0xC scope:global +SetNewSndCamAction__FGQ26Attrib9StringKey8EVIEW_ID = .text:0x800CB8F0; // type:function size:0x4C scope:global +UpdateCameras__9SndCamera = .text:0x800CB93C; // type:function size:0x610 scope:global +GetCam__9SndCamerai = .text:0x800CBF4C; // type:function size:0x30 scope:global +GetTypeInfo__C7SndBase = .text:0x800CBF7C; // type:function size:0xC scope:global +__7SndBase = .text:0x800CBF88; // type:function size:0x64 scope:global +_._7SndBase = .text:0x800CBFEC; // type:function size:0x1C4 scope:global +GetDMixOutput__7SndBasei15DMX_PRESET_TYPE = .text:0x800CC1B0; // type:function size:0xAC scope:global +GetTypeName__C7SndBase = .text:0x800CC25C; // type:function size:0xC scope:global +SetupSFX__7SndBaseP11CSTATE_Base = .text:0x800CC268; // type:function size:0x38 scope:global +LoadAsset__7SndBaseGQ26Attrib9StringKey12eSNDDATAPATH12eSNDDATATYPE15eBANK_SLOT_TYPEb = .text:0x800CC2A0; // type:function size:0xD4 scope:global +LoadAsset__7SndBaseR15stSndAssetQueue15eBANK_SLOT_TYPE = .text:0x800CC374; // type:function size:0x28 scope:global +RegisterSFX__Fv = .text:0x800CC39C; // type:function size:0x2F8 scope:global +RegisterStates__Fv = .text:0x800CC694; // type:function size:0xA0 scope:global +GetStateInfo__C11CSTATE_Base = .text:0x800CC734; // type:function size:0xC scope:global +GetStateName__C11CSTATE_Base = .text:0x800CC740; // type:function size:0xC scope:global +CreateState__11CSTATE_BaseUi = .text:0x800CC74C; // type:function size:0x3C scope:global +__11CSTATE_Base = .text:0x800CC788; // type:function size:0x50 scope:global +Setup__11CSTATE_Basei = .text:0x800CC7D8; // type:function size:0x44 scope:global +_._11CSTATE_Base = .text:0x800CC81C; // type:function size:0x60 scope:global +DisconnectMixMap__11CSTATE_Base = .text:0x800CC87C; // type:function size:0xEC scope:global +SafeConnectOrphanObjects__11CSTATE_Base = .text:0x800CC968; // type:function size:0xB4 scope:global +CreateSFXObjs__11CSTATE_Base = .text:0x800CCA1C; // type:function size:0x54 scope:global +ForceCreateSFXCtrls__11CSTATE_Basei = .text:0x800CCA70; // type:function size:0x54 scope:global +CreateSFXCtrls__11CSTATE_Base = .text:0x800CCAC4; // type:function size:0x150 scope:global +SortSFXCtl__11CSTATE_Base = .text:0x800CCC14; // type:function size:0x128 scope:global +NewSFXObj__11CSTATE_Basei = .text:0x800CCD3C; // type:function size:0x98 scope:global +NewSFXCtrl__11CSTATE_Basei = .text:0x800CCDD4; // type:function size:0xB8 scope:global +HasCtrlBeenAdded__11CSTATE_Basei = .text:0x800CCE8C; // type:function size:0x74 scope:global +LoadData__11CSTATE_Base = .text:0x800CCF00; // type:function size:0x54 scope:global +ProcessUpdate__11CSTATE_Base = .text:0x800CCF54; // type:function size:0x54 scope:global +UpdateParams__11CSTATE_Basef = .text:0x800CCFA8; // type:function size:0x104 scope:global +Destroy__11CSTATE_Base = .text:0x800CD0AC; // type:function size:0xB4 scope:global +GetSFXObject__11CSTATE_Basei = .text:0x800CD160; // type:function size:0x30 scope:global +GetSFXCTLObject__11CSTATE_Basei = .text:0x800CD190; // type:function size:0x2C scope:global +IsDataLoaded__11CSTATE_Base = .text:0x800CD1BC; // type:function size:0x80 scope:global +Attach__11CSTATE_BasePv = .text:0x800CD23C; // type:function size:0x7C scope:global +Detach__11CSTATE_Base = .text:0x800CD2B8; // type:function size:0x244 scope:global +GetStateInfo__C16CSTATE_Collision = .text:0x800CD4FC; // type:function size:0xC scope:global +GetStateName__C16CSTATE_Collision = .text:0x800CD508; // type:function size:0xC scope:global +CreateState__16CSTATE_CollisionUi = .text:0x800CD514; // type:function size:0x5C scope:global +__16CSTATE_Collision = .text:0x800CD570; // type:function size:0x44 scope:global +_._16CSTATE_Collision = .text:0x800CD5B4; // type:function size:0x94 scope:global +Attach__16CSTATE_CollisionPv = .text:0x800CD648; // type:function size:0x2C scope:global +Detach__16CSTATE_Collision = .text:0x800CD674; // type:function size:0x68 scope:global +GetStateInfo__C11CSTATE_Main = .text:0x800CD6DC; // type:function size:0xC scope:global +GetStateName__C11CSTATE_Main = .text:0x800CD6E8; // type:function size:0xC scope:global +CreateState__11CSTATE_MainUi = .text:0x800CD6F4; // type:function size:0x5C scope:global +__11CSTATE_Main = .text:0x800CD750; // type:function size:0x3C scope:global +_._11CSTATE_Main = .text:0x800CD78C; // type:function size:0x58 scope:global +GetStateInfo__C14CSTATE_DriveBy = .text:0x800CD7E4; // type:function size:0xC scope:global +GetStateName__C14CSTATE_DriveBy = .text:0x800CD7F0; // type:function size:0xC scope:global +CreateState__14CSTATE_DriveByUi = .text:0x800CD7FC; // type:function size:0x5C scope:global +__14CSTATE_DriveBy = .text:0x800CD858; // type:function size:0x74 scope:global +_._14CSTATE_DriveBy = .text:0x800CD8CC; // type:function size:0x58 scope:global +Attach__14CSTATE_DriveByPv = .text:0x800CD924; // type:function size:0x60 scope:global +Detach__14CSTATE_DriveBy = .text:0x800CD984; // type:function size:0x30 scope:global +GetStateInfo__C12CSTATE_Music = .text:0x800CD9B4; // type:function size:0xC scope:global +GetStateName__C12CSTATE_Music = .text:0x800CD9C0; // type:function size:0xC scope:global +CreateState__12CSTATE_MusicUi = .text:0x800CD9CC; // type:function size:0x5C scope:global +__12CSTATE_Music = .text:0x800CDA28; // type:function size:0x3C scope:global +_._12CSTATE_Music = .text:0x800CDA64; // type:function size:0x58 scope:global +GetStateInfo__C17CSTATE_Helicopter = .text:0x800CDABC; // type:function size:0xC scope:global +GetStateName__C17CSTATE_Helicopter = .text:0x800CDAC8; // type:function size:0xC scope:global +CreateState__17CSTATE_HelicopterUi = .text:0x800CDAD4; // type:function size:0x5C scope:global +__17CSTATE_Helicopter = .text:0x800CDB30; // type:function size:0x44 scope:global +_._17CSTATE_Helicopter = .text:0x800CDB74; // type:function size:0x58 scope:global +UpdateParams__17CSTATE_Helicopterf = .text:0x800CDBCC; // type:function size:0x114 scope:global +Attach__17CSTATE_HelicopterPv = .text:0x800CDCE0; // type:function size:0x2C scope:global +Detach__17CSTATE_Helicopter = .text:0x800CDD0C; // type:function size:0x48 scope:global +__14CSTATEMGR_Base = .text:0x800CDD54; // type:function size:0x38 scope:global +_._14CSTATEMGR_Base = .text:0x800CDD8C; // type:function size:0x44 scope:global +DisconnectMixMap__14CSTATEMGR_Base = .text:0x800CDDD0; // type:function size:0x50 scope:global +SafeConnectOrphanObjects__14CSTATEMGR_Base = .text:0x800CDE20; // type:function size:0x50 scope:global +Initialize__14CSTATEMGR_Base14eMAINMAPSTATES = .text:0x800CDE70; // type:function size:0x8 scope:global +RegisterSFXCTL__14CSTATEMGR_BasePQ27SndBase8TypeInfo = .text:0x800CDE78; // type:function size:0x4C scope:global +RegisterSTATE__14CSTATEMGR_BasePQ211CSTATE_Base9StateInfo = .text:0x800CDEC4; // type:function size:0x4C scope:global +RegisterSFX__14CSTATEMGR_BasePQ27SndBase8TypeInfo = .text:0x800CDF10; // type:function size:0x4C scope:global +ClearClassLists__14CSTATEMGR_Base = .text:0x800CDF5C; // type:function size:0xC0 scope:global +IsDataLoaded__14CSTATEMGR_Base = .text:0x800CE01C; // type:function size:0x58 scope:global +CreateSFX__14CSTATEMGR_Baseii = .text:0x800CE074; // type:function size:0x164 scope:global +CreateSFXCTL__14CSTATEMGR_Baseii = .text:0x800CE1D8; // type:function size:0x164 scope:global +CreateState__14CSTATEMGR_Baseii = .text:0x800CE33C; // type:function size:0x134 scope:global +EnterWorld__14CSTATEMGR_Base12eSndGameMode = .text:0x800CE470; // type:function size:0xC scope:global +GetFreeState__14CSTATEMGR_BasePv = .text:0x800CE47C; // type:function size:0x2C scope:global +UpdateParams__14CSTATEMGR_Basef = .text:0x800CE4A8; // type:function size:0xA0 scope:global +ProcessUpdate__14CSTATEMGR_Base = .text:0x800CE548; // type:function size:0x60 scope:global +GetStateObj__14CSTATEMGR_Basei = .text:0x800CE5A8; // type:function size:0x2C scope:global +GetStateObj__14CSTATEMGR_BasePv = .text:0x800CE5D4; // type:function size:0x2C scope:global +ExitWorld__14CSTATEMGR_Base = .text:0x800CE600; // type:function size:0x94 scope:global +GetAttachedStateCount__14CSTATEMGR_Base = .text:0x800CE694; // type:function size:0x30 scope:global +__19CSTATEMGR_PlayerCar = .text:0x800CE6C4; // type:function size:0x3C scope:global +_._19CSTATEMGR_PlayerCar = .text:0x800CE700; // type:function size:0x58 scope:global +EnterWorld__19CSTATEMGR_PlayerCar12eSndGameMode = .text:0x800CE758; // type:function size:0x198 scope:global +UpdateParams__19CSTATEMGR_PlayerCarf = .text:0x800CE8F0; // type:function size:0x20 scope:global +GetTypeInfo__C16SFXCTL_3DRearPos = .text:0x800CE910; // type:function size:0xC scope:global +GetTypeName__C16SFXCTL_3DRearPos = .text:0x800CE91C; // type:function size:0xC scope:global +CreateObject__16SFXCTL_3DRearPosUi = .text:0x800CE928; // type:function size:0x78 scope:global +InitSFX__16SFXCTL_3DRearPos = .text:0x800CE9A0; // type:function size:0x80 scope:global +UpdateParams__16SFXCTL_3DRearPosf = .text:0x800CEA20; // type:function size:0x1C8 scope:global +__20CSTATEMGR_TrafficCar = .text:0x800CEBE8; // type:function size:0x50 scope:global +_._20CSTATEMGR_TrafficCar = .text:0x800CEC38; // type:function size:0x58 scope:global +EnterWorld__20CSTATEMGR_TrafficCar12eSndGameMode = .text:0x800CEC90; // type:function size:0x74 scope:global +UpdateParams__20CSTATEMGR_TrafficCarf = .text:0x800CED04; // type:function size:0x44 scope:global +DebugDisplayTrafficConnections__20CSTATEMGR_TrafficCar = .text:0x800CED48; // type:function size:0xAC scope:global +__15CSTATEMGR_AICar = .text:0x800CEDF4; // type:function size:0x50 scope:global +_._15CSTATEMGR_AICar = .text:0x800CEE44; // type:function size:0x58 scope:global +UpdateParams__15CSTATEMGR_AICarf = .text:0x800CEE9C; // type:function size:0x44 scope:global +DebugDisplayAIConnections__15CSTATEMGR_AICar = .text:0x800CEEE0; // type:function size:0x4 scope:global +EnterWorld__15CSTATEMGR_AICar12eSndGameMode = .text:0x800CEEE4; // type:function size:0xCC scope:global +QueueSlots__15CSTATEMGR_AICar = .text:0x800CEFB0; // type:function size:0xD0 scope:global +__19CSTATEMGR_Collision = .text:0x800CF080; // type:function size:0x3C scope:global +_._19CSTATEMGR_Collision = .text:0x800CF0BC; // type:function size:0x58 scope:global +EnterWorld__19CSTATEMGR_Collision12eSndGameMode = .text:0x800CF114; // type:function size:0x74 scope:global +UpdateParams__19CSTATEMGR_Collisionf = .text:0x800CF188; // type:function size:0x20 scope:global +GetCollisionPriority__FPQ25Sound14CollisionEvent = .text:0x800CF1A8; // type:function size:0x1C8 scope:global +GetFreeState__19CSTATEMGR_CollisionPv = .text:0x800CF370; // type:function size:0x1DC scope:global +__14CSTATEMGR_Main = .text:0x800CF54C; // type:function size:0x3C scope:global +_._14CSTATEMGR_Main = .text:0x800CF588; // type:function size:0x58 scope:global +EnterWorld__14CSTATEMGR_Main12eSndGameMode = .text:0x800CF5E0; // type:function size:0x8C scope:global +__17CSTATEMGR_DriveBy = .text:0x800CF66C; // type:function size:0x44 scope:global +_._17CSTATEMGR_DriveBy = .text:0x800CF6B0; // type:function size:0x58 scope:global +TestSmackableForWoosh__FP6IModeli = .text:0x800CF708; // type:function size:0x438 scope:global +TestAllSmackablesForWhoosh__Fv = .text:0x800CFB40; // type:function size:0x1B0 scope:global +UpdateParams__17CSTATEMGR_DriveByf = .text:0x800CFCF0; // type:function size:0x2B4 scope:global +EnterWorld__17CSTATEMGR_DriveBy12eSndGameMode = .text:0x800CFFA4; // type:function size:0x74 scope:global +GetFreeState__17CSTATEMGR_DriveByPv = .text:0x800D0018; // type:function size:0x10C scope:global +__15CSTATEMGR_Music = .text:0x800D0124; // type:function size:0x3C scope:global +_._15CSTATEMGR_Music = .text:0x800D0160; // type:function size:0x58 scope:global +EnterWorld__15CSTATEMGR_Music12eSndGameMode = .text:0x800D01B8; // type:function size:0x80 scope:global +__20CSTATEMGR_Helicopter = .text:0x800D0238; // type:function size:0x3C scope:global +_._20CSTATEMGR_Helicopter = .text:0x800D0274; // type:function size:0x58 scope:global +EnterWorld__20CSTATEMGR_Helicopter12eSndGameMode = .text:0x800D02CC; // type:function size:0x60 scope:global +GetStateInfo__C18CSTATE_WorldObject = .text:0x800D032C; // type:function size:0xC scope:global +GetStateName__C18CSTATE_WorldObject = .text:0x800D0338; // type:function size:0xC scope:global +CreateState__18CSTATE_WorldObjectUi = .text:0x800D0344; // type:function size:0x5C scope:global +AddWorldObject__16CSTATEMGR_Envirofff17WORLDOBJECT_TYPES = .text:0x800D03A0; // type:function size:0xB8 scope:global +RegisterWorldObjects__16CSTATEMGR_Enviro = .text:0x800D0458; // type:function size:0xC0 scope:global +__18CSTATE_WorldObject = .text:0x800D0518; // type:function size:0x44 scope:global +_._18CSTATE_WorldObject = .text:0x800D055C; // type:function size:0x60 scope:global +Attach__18CSTATE_WorldObjectPv = .text:0x800D05BC; // type:function size:0x2C scope:global +Detach__18CSTATE_WorldObject = .text:0x800D05E8; // type:function size:0x28 scope:global +__16CSTATEMGR_Enviro = .text:0x800D0610; // type:function size:0x70 scope:global +_._16CSTATEMGR_Enviro = .text:0x800D0680; // type:function size:0xE4 scope:global +EnterWorld__16CSTATEMGR_Enviro12eSndGameMode = .text:0x800D0764; // type:function size:0x74 scope:global +UpdateParams__16CSTATEMGR_Envirof = .text:0x800D07D8; // type:function size:0x154 scope:global +__15CSTATEMGR_Truck = .text:0x800D092C; // type:function size:0x44 scope:global +_._15CSTATEMGR_Truck = .text:0x800D0970; // type:function size:0x58 scope:global +EnterWorld__15CSTATEMGR_Truck12eSndGameMode = .text:0x800D09C8; // type:function size:0x7C scope:global +__18CSTATEMGR_CarState = .text:0x800D0A44; // type:function size:0x58 scope:global +_._18CSTATEMGR_CarState = .text:0x800D0A9C; // type:function size:0x58 scope:global +UpdateParams__18CSTATEMGR_CarStatef = .text:0x800D0AF4; // type:function size:0x1FC scope:global +sort_engine_priority__FUiUi = .text:0x800D0CF0; // type:function size:0xD8 scope:global +ResetCarBanks__18CSTATEMGR_CarState = .text:0x800D0DC8; // type:function size:0x1C4 scope:global +ResolveCarBanks__18CSTATEMGR_CarState = .text:0x800D0F8C; // type:function size:0x1D54 scope:global +DestroyCar__18CSTATEMGR_CarStateP12EAX_CarState = .text:0x800D2CE0; // type:function size:0x3B4 scope:global +AddMapping__18CSTATEMGR_CarStateUiUi = .text:0x800D3094; // type:function size:0x19C scope:global +__16CSTATEMGR_CopCar = .text:0x800D3230; // type:function size:0x58 scope:global +_._16CSTATEMGR_CopCar = .text:0x800D3288; // type:function size:0x58 scope:global +UpdateParams__16CSTATEMGR_CopCarf = .text:0x800D32E0; // type:function size:0x38 scope:global +EnterWorld__16CSTATEMGR_CopCar12eSndGameMode = .text:0x800D3318; // type:function size:0x8C scope:global +__6CARSFX = .text:0x800D33A4; // type:function size:0x44 scope:global +_._6CARSFX = .text:0x800D33E8; // type:function size:0x58 scope:global +GetTypeInfo__C10SFX_Common = .text:0x800D3440; // type:function size:0xC scope:global +GetTypeName__C10SFX_Common = .text:0x800D344C; // type:function size:0xC scope:global +CreateObject__10SFX_CommonUi = .text:0x800D3458; // type:function size:0x5C scope:global +__10SFX_Common = .text:0x800D34B4; // type:function size:0xE0 scope:global +_._10SFX_Common = .text:0x800D3594; // type:function size:0x128 scope:global +AttachController__10SFX_CommonP6SFXCTL = .text:0x800D36BC; // type:function size:0x4 scope:global +Destroy__10SFX_Common = .text:0x800D36C0; // type:function size:0x4 scope:global +MsgPlayMiscSound__10SFX_CommonRC10MMiscSound = .text:0x800D36C4; // type:function size:0x30C scope:global +UpdateParams__10SFX_Commonf = .text:0x800D39D0; // type:function size:0x4 scope:global +ProcessUpdate__10SFX_Common = .text:0x800D39D4; // type:function size:0x318 scope:global +GetTypeInfo__C12CARSFX_Shift = .text:0x800D3CEC; // type:function size:0xC scope:global +GetTypeName__C12CARSFX_Shift = .text:0x800D3CF8; // type:function size:0xC scope:global +CreateObject__12CARSFX_ShiftUi = .text:0x800D3D04; // type:function size:0x5C scope:global +__12CARSFX_Shift = .text:0x800D3D60; // type:function size:0x68 scope:global +_._12CARSFX_Shift = .text:0x800D3DC8; // type:function size:0x60 scope:global +UpdateMixerOutputs__12CARSFX_Shift = .text:0x800D3E28; // type:function size:0x30 scope:global +SetupSFX__12CARSFX_ShiftP11CSTATE_Base = .text:0x800D3E58; // type:function size:0x48 scope:global +InitSFX__12CARSFX_Shift = .text:0x800D3EA0; // type:function size:0x18 scope:global +Destroy__12CARSFX_Shift = .text:0x800D3EB8; // type:function size:0x15C scope:global +GetController__12CARSFX_Shifti = .text:0x800D4014; // type:function size:0x44 scope:global +AttachController__12CARSFX_ShiftP6SFXCTL = .text:0x800D4058; // type:function size:0x84 scope:global +UpdateParams__12CARSFX_Shiftf = .text:0x800D40DC; // type:function size:0x2A8 scope:global +PlayGearWhine__12CARSFX_Shift = .text:0x800D4384; // type:function size:0x234 scope:global +PlayDisengageSnd__12CARSFX_Shift = .text:0x800D45B8; // type:function size:0x1FC scope:global +PlayEngageSnd__12CARSFX_Shift = .text:0x800D47B4; // type:function size:0x1FC scope:global +PlayAccelSnd__12CARSFX_Shift = .text:0x800D49B0; // type:function size:0x1D8 scope:global +PlayDecelSnd__12CARSFX_Shift = .text:0x800D4B88; // type:function size:0x1D8 scope:global +PlayShiftSnd__12CARSFX_Shift = .text:0x800D4D60; // type:function size:0x2A0 scope:global +PlayBrakesMashed__12CARSFX_Shift = .text:0x800D5000; // type:function size:0x180 scope:global +ProcessUpdate__12CARSFX_Shift = .text:0x800D5180; // type:function size:0x168 scope:global +GetTypeInfo__C12CARSFX_Turbo = .text:0x800D52E8; // type:function size:0xC scope:global +GetTypeName__C12CARSFX_Turbo = .text:0x800D52F4; // type:function size:0xC scope:global +CreateObject__12CARSFX_TurboUi = .text:0x800D5300; // type:function size:0x5C scope:global +__12CARSFX_Turbo = .text:0x800D535C; // type:function size:0x88 scope:global +_._12CARSFX_Turbo = .text:0x800D53E4; // type:function size:0x84 scope:global +GetController__12CARSFX_Turboi = .text:0x800D5468; // type:function size:0x44 scope:global +AttachController__12CARSFX_TurboP6SFXCTL = .text:0x800D54AC; // type:function size:0x84 scope:global +SetupSFX__12CARSFX_TurboP11CSTATE_Base = .text:0x800D5530; // type:function size:0x40 scope:global +InitSFX__12CARSFX_Turbo = .text:0x800D5570; // type:function size:0xE0 scope:global +Detach__12CARSFX_Turbo = .text:0x800D5650; // type:function size:0x48 scope:global +Destroy__12CARSFX_Turbo = .text:0x800D5698; // type:function size:0xA0 scope:global +UpdateParams__12CARSFX_Turbof = .text:0x800D5738; // type:function size:0x1AC scope:global +ProcessUpdate__12CARSFX_Turbo = .text:0x800D58E4; // type:function size:0x2A0 scope:global +PlayBlowoff__12CARSFX_Turboiiiii = .text:0x800D5B84; // type:function size:0x2AC scope:global +IsBlowOffDone__12CARSFX_Turbo = .text:0x800D5E30; // type:function size:0x80 scope:global +UpdateBlowOff__12CARSFX_Turbof = .text:0x800D5EB0; // type:function size:0xC0 scope:global +StopBlowOff__12CARSFX_Turbo = .text:0x800D5F70; // type:function size:0x64 scope:global +PlaySpl__12CARSFX_Turboiiiii = .text:0x800D5FD4; // type:function size:0x1CC scope:global +ResetSpool__12CARSFX_Turbo = .text:0x800D61A0; // type:function size:0x10 scope:global +UpdateSpool__12CARSFX_Turbof = .text:0x800D61B0; // type:function size:0x260 scope:global +GetTypeInfo__C19CARSFX_SparkChatter = .text:0x800D6410; // type:function size:0xC scope:global +GetTypeName__C19CARSFX_SparkChatter = .text:0x800D641C; // type:function size:0xC scope:global +CreateObject__19CARSFX_SparkChatterUi = .text:0x800D6428; // type:function size:0x5C scope:global +__19CARSFX_SparkChatter = .text:0x800D6484; // type:function size:0x80 scope:global +_._19CARSFX_SparkChatter = .text:0x800D6504; // type:function size:0x60 scope:global +GetController__19CARSFX_SparkChatteri = .text:0x800D6564; // type:function size:0x2C scope:global +AttachController__19CARSFX_SparkChatterP6SFXCTL = .text:0x800D6590; // type:function size:0x6C scope:global +SetupSFX__19CARSFX_SparkChatterP11CSTATE_Base = .text:0x800D65FC; // type:function size:0x58 scope:global +InitSFX__19CARSFX_SparkChatter = .text:0x800D6654; // type:function size:0x13C scope:global +SparkChatCreateCallBack__19CARSFX_SparkChatterPQ24Csis5ClassPQ24Csis9ParameterPv = .text:0x800D6790; // type:function size:0x70 scope:global +SparkChatUpdateCallBack__19CARSFX_SparkChatterPQ24Csis9ParameterPv = .text:0x800D6800; // type:function size:0x2C scope:global +SparkChatDestroyCallBack__19CARSFX_SparkChatterPQ24Csis5ClassPv = .text:0x800D682C; // type:function size:0x60 scope:global +UpdateMixerOutputs__19CARSFX_SparkChatter = .text:0x800D688C; // type:function size:0x34 scope:global +ReceiveSparkChatterInputs__19CARSFX_SparkChatterPQ24Csis20CAR_SputOutputStruct = .text:0x800D68C0; // type:function size:0xC scope:global +Destroy__19CARSFX_SparkChatter = .text:0x800D68CC; // type:function size:0x60 scope:global +UpdateParams__19CARSFX_SparkChatterf = .text:0x800D692C; // type:function size:0xC4 scope:global +ProcessUpdate__19CARSFX_SparkChatter = .text:0x800D69F0; // type:function size:0x1E8 scope:global +GetTypeInfo__C16CARSFX_RoadNoise = .text:0x800D6BD8; // type:function size:0xC scope:global +GetTypeName__C16CARSFX_RoadNoise = .text:0x800D6BE4; // type:function size:0xC scope:global +CreateObject__16CARSFX_RoadNoiseUi = .text:0x800D6BF0; // type:function size:0x5C scope:global +__16CARSFX_RoadNoise = .text:0x800D6C4C; // type:function size:0x90 scope:global +_._16CARSFX_RoadNoise = .text:0x800D6CDC; // type:function size:0x60 scope:global +Detach__16CARSFX_RoadNoise = .text:0x800D6D3C; // type:function size:0x34 scope:global +GetController__16CARSFX_RoadNoisei = .text:0x800D6D70; // type:function size:0x44 scope:global +AttachController__16CARSFX_RoadNoiseP6SFXCTL = .text:0x800D6DB4; // type:function size:0x84 scope:global +SetupSFX__16CARSFX_RoadNoiseP11CSTATE_Base = .text:0x800D6E38; // type:function size:0x20 scope:global +InitSFX__16CARSFX_RoadNoise = .text:0x800D6E58; // type:function size:0x1BC scope:global +Destroy__16CARSFX_RoadNoise = .text:0x800D7014; // type:function size:0x124 scope:global +UpdateParams__16CARSFX_RoadNoisef = .text:0x800D7138; // type:function size:0x20 scope:global +ProcessUpdate__16CARSFX_RoadNoise = .text:0x800D7158; // type:function size:0xC40 scope:global +MapLoopToVolume__16CARSFX_RoadNoise16FXROADNOISE_LOOP = .text:0x800D7D98; // type:function size:0x94 scope:global +PlayTransition__16CARSFX_RoadNoise22FXROADNOISE_TRANSITIONi = .text:0x800D7E2C; // type:function size:0x2D0 scope:global +GenerateRoadNoise__16CARSFX_RoadNoise = .text:0x800D80FC; // type:function size:0x4D8 scope:global +Play__16CARSFX_RoadNoise16FXROADNOISE_LOOPi = .text:0x800D85D4; // type:function size:0x188 scope:global +GetTypeInfo__C20SFXCTL_3DLeftWindPos = .text:0x800D875C; // type:function size:0xC scope:global +GetTypeName__C20SFXCTL_3DLeftWindPos = .text:0x800D8768; // type:function size:0xC scope:global +CreateObject__20SFXCTL_3DLeftWindPosUi = .text:0x800D8774; // type:function size:0x78 scope:global +GetTypeInfo__C21SFXCTL_3DRightWindPos = .text:0x800D87EC; // type:function size:0xC scope:global +GetTypeName__C21SFXCTL_3DRightWindPos = .text:0x800D87F8; // type:function size:0xC scope:global +CreateObject__21SFXCTL_3DRightWindPosUi = .text:0x800D8804; // type:function size:0x78 scope:global +GetTypeInfo__C16CARSFX_WindNoise = .text:0x800D887C; // type:function size:0xC scope:global +GetTypeName__C16CARSFX_WindNoise = .text:0x800D8888; // type:function size:0xC scope:global +CreateObject__16CARSFX_WindNoiseUi = .text:0x800D8894; // type:function size:0x5C scope:global +__16CARSFX_WindNoise = .text:0x800D88F0; // type:function size:0x98 scope:global +_._16CARSFX_WindNoise = .text:0x800D8988; // type:function size:0x60 scope:global +Destroy__16CARSFX_WindNoise = .text:0x800D89E8; // type:function size:0x54 scope:global +GetController__16CARSFX_WindNoisei = .text:0x800D8A3C; // type:function size:0x24 scope:global +AttachController__16CARSFX_WindNoiseP6SFXCTL = .text:0x800D8A60; // type:function size:0x68 scope:global +UpdateMasterVolume__16CARSFX_WindNoise = .text:0x800D8AC8; // type:function size:0x8 scope:global +SetupSFX__16CARSFX_WindNoiseP11CSTATE_Base = .text:0x800D8AD0; // type:function size:0x4C scope:global +InitSFX__16CARSFX_WindNoise = .text:0x800D8B1C; // type:function size:0x194 scope:global +ProcessUpdate__16CARSFX_WindNoise = .text:0x800D8CB0; // type:function size:0x38 scope:global +UpdateParams__16CARSFX_WindNoisef = .text:0x800D8CE8; // type:function size:0x31C scope:global +UpdateCSISParams__16CARSFX_WindNoise = .text:0x800D9004; // type:function size:0x208 scope:global +GetTypeInfo__C18CARSFX_WindWeather = .text:0x800D920C; // type:function size:0xC scope:global +GetTypeName__C18CARSFX_WindWeather = .text:0x800D9218; // type:function size:0xC scope:global +CreateObject__18CARSFX_WindWeatherUi = .text:0x800D9224; // type:function size:0x5C scope:global +__18CARSFX_WindWeather = .text:0x800D9280; // type:function size:0x48 scope:global +_._18CARSFX_WindWeather = .text:0x800D92C8; // type:function size:0x60 scope:global +SetupSFX__18CARSFX_WindWeatherP11CSTATE_Base = .text:0x800D9328; // type:function size:0x20 scope:global +InitSFX__18CARSFX_WindWeather = .text:0x800D9348; // type:function size:0x18 scope:global +Destroy__18CARSFX_WindWeather = .text:0x800D9360; // type:function size:0x54 scope:global +UpdateParams__18CARSFX_WindWeatherf = .text:0x800D93B4; // type:function size:0xE0 scope:global +Play__18CARSFX_WindWeather = .text:0x800D9494; // type:function size:0xC4 scope:global +ProcessUpdate__18CARSFX_WindWeather = .text:0x800D9558; // type:function size:0xD4 scope:global +GetTypeInfo__C12CARSFX_Skids = .text:0x800D962C; // type:function size:0xC scope:global +GetTypeName__C12CARSFX_Skids = .text:0x800D9638; // type:function size:0xC scope:global +CreateObject__12CARSFX_SkidsUi = .text:0x800D9644; // type:function size:0x5C scope:global +__12CARSFX_Skids = .text:0x800D96A0; // type:function size:0x4C scope:global +_._12CARSFX_Skids = .text:0x800D96EC; // type:function size:0x60 scope:global +Destroy__12CARSFX_Skids = .text:0x800D974C; // type:function size:0x5C scope:global +GetController__12CARSFX_Skidsi = .text:0x800D97A8; // type:function size:0x44 scope:global +AttachController__12CARSFX_SkidsP6SFXCTL = .text:0x800D97EC; // type:function size:0x124 scope:global +SetupSFX__12CARSFX_SkidsP11CSTATE_Base = .text:0x800D9910; // type:function size:0x20 scope:global +InitSFX__12CARSFX_Skids = .text:0x800D9930; // type:function size:0x1C4 scope:global +Detach__12CARSFX_Skids = .text:0x800D9AF4; // type:function size:0x54 scope:global +UpdateMixerOutputs__12CARSFX_Skids = .text:0x800D9B48; // type:function size:0x140 scope:global +ProcessUpdate__12CARSFX_Skids = .text:0x800D9C88; // type:function size:0x564 scope:global +GetTypeInfo__C22SFXCTL_3DRightWheelPos = .text:0x800DA1EC; // type:function size:0xC scope:global +GetTypeName__C22SFXCTL_3DRightWheelPos = .text:0x800DA1F8; // type:function size:0xC scope:global +CreateObject__22SFXCTL_3DRightWheelPosUi = .text:0x800DA204; // type:function size:0x78 scope:global +GetTypeInfo__C21SFXCTL_3DLeftWheelPos = .text:0x800DA27C; // type:function size:0xC scope:global +GetTypeName__C21SFXCTL_3DLeftWheelPos = .text:0x800DA288; // type:function size:0xC scope:global +CreateObject__21SFXCTL_3DLeftWheelPosUi = .text:0x800DA294; // type:function size:0x78 scope:global +GetTypeInfo__C19CARSFX_TrafficSkids = .text:0x800DA30C; // type:function size:0xC scope:global +GetTypeName__C19CARSFX_TrafficSkids = .text:0x800DA318; // type:function size:0xC scope:global +CreateObject__19CARSFX_TrafficSkidsUi = .text:0x800DA324; // type:function size:0x5C scope:global +__19CARSFX_TrafficSkids = .text:0x800DA380; // type:function size:0x3C scope:global +_._19CARSFX_TrafficSkids = .text:0x800DA3BC; // type:function size:0x58 scope:global +Detach__19CARSFX_TrafficSkids = .text:0x800DA414; // type:function size:0x20 scope:global +GetController__19CARSFX_TrafficSkidsi = .text:0x800DA434; // type:function size:0x14 scope:global +__17CARSFX_EngineBase = .text:0x800DA448; // type:function size:0x60 scope:global +_._17CARSFX_EngineBase = .text:0x800DA4A8; // type:function size:0xA4 scope:global +Detach__17CARSFX_EngineBase = .text:0x800DA54C; // type:function size:0x80 scope:global +UpdateParams__17CARSFX_EngineBasef = .text:0x800DA5CC; // type:function size:0x4 scope:global +SetupSFX__17CARSFX_EngineBaseP11CSTATE_Base = .text:0x800DA5D0; // type:function size:0x20 scope:global +InitSFX__17CARSFX_EngineBase = .text:0x800DA5F0; // type:function size:0x18 scope:global +Destroy__17CARSFX_EngineBase = .text:0x800DA608; // type:function size:0x4 scope:global +ProcessUpdate__17CARSFX_EngineBase = .text:0x800DA60C; // type:function size:0x34 scope:global +InitializeEngine__17CARSFX_EngineBase = .text:0x800DA640; // type:function size:0x4 scope:global +SetEngineParams__17CARSFX_EngineBase = .text:0x800DA644; // type:function size:0x4 scope:global +GetTypeInfo__C17CARSFX_AEMSEngine = .text:0x800DA648; // type:function size:0xC scope:global +GetTypeName__C17CARSFX_AEMSEngine = .text:0x800DA654; // type:function size:0xC scope:global +CreateObject__17CARSFX_AEMSEngineUi = .text:0x800DA660; // type:function size:0x5C scope:global +__17CARSFX_AEMSEngine = .text:0x800DA6BC; // type:function size:0x74 scope:global +_._17CARSFX_AEMSEngine = .text:0x800DA730; // type:function size:0x58 scope:global +UpdateParams__17CARSFX_AEMSEnginef = .text:0x800DA788; // type:function size:0x20 scope:global +SetupSFX__17CARSFX_AEMSEngineP11CSTATE_Base = .text:0x800DA7A8; // type:function size:0x20 scope:global +InitSFX__17CARSFX_AEMSEngine = .text:0x800DA7C8; // type:function size:0x188 scope:global +GetController__17CARSFX_AEMSEnginei = .text:0x800DA950; // type:function size:0x2C scope:global +AttachController__17CARSFX_AEMSEngineP6SFXCTL = .text:0x800DA97C; // type:function size:0x6C scope:global +SetEngineParams__17CARSFX_AEMSEngine = .text:0x800DA9E8; // type:function size:0x2CC scope:global +__18CARSFX_GinsuEngine = .text:0x800DACB4; // type:function size:0x98 scope:global +_._18CARSFX_GinsuEngine = .text:0x800DAD4C; // type:function size:0x124 scope:global +GetController__18CARSFX_GinsuEnginei = .text:0x800DAE70; // type:function size:0x64 scope:global +AttachController__18CARSFX_GinsuEngineP6SFXCTL = .text:0x800DAED4; // type:function size:0xA4 scope:global +SetupSFX__18CARSFX_GinsuEngineP11CSTATE_Base = .text:0x800DAF78; // type:function size:0x20 scope:global +InitSFX__18CARSFX_GinsuEngine = .text:0x800DAF98; // type:function size:0x4C scope:global +Detach__18CARSFX_GinsuEngine = .text:0x800DAFE4; // type:function size:0x90 scope:global +StartupGinsu__18CARSFX_GinsuEngine = .text:0x800DB074; // type:function size:0x19C scope:global +GetGinsuData__FPCc = .text:0x800DB210; // type:function size:0x90 scope:global +InitializeEngine__18CARSFX_GinsuEngine = .text:0x800DB2A0; // type:function size:0x258 scope:global +SetEngineParams__18CARSFX_GinsuEngine = .text:0x800DB4F8; // type:function size:0x47C scope:global +GetTypeInfo__C21CARSFX_SingleGinsuEng = .text:0x800DB974; // type:function size:0xC scope:global +GetTypeName__C21CARSFX_SingleGinsuEng = .text:0x800DB980; // type:function size:0xC scope:global +CreateObject__21CARSFX_SingleGinsuEngUi = .text:0x800DB98C; // type:function size:0x5C scope:global +__21CARSFX_SingleGinsuEng = .text:0x800DB9E8; // type:function size:0x3C scope:global +_._21CARSFX_SingleGinsuEng = .text:0x800DBA24; // type:function size:0x58 scope:global +SetGinsuParams__21CARSFX_SingleGinsuEng = .text:0x800DBA7C; // type:function size:0x1D4 scope:global +GetTypeInfo__C19CARSFX_DualGinsuEng = .text:0x800DBC50; // type:function size:0xC scope:global +GetTypeName__C19CARSFX_DualGinsuEng = .text:0x800DBC5C; // type:function size:0xC scope:global +CreateObject__19CARSFX_DualGinsuEngUi = .text:0x800DBC68; // type:function size:0x5C scope:global +__19CARSFX_DualGinsuEng = .text:0x800DBCC4; // type:function size:0x3C scope:global +_._19CARSFX_DualGinsuEng = .text:0x800DBD00; // type:function size:0x58 scope:global +SetGinsuParams__19CARSFX_DualGinsuEng = .text:0x800DBD58; // type:function size:0x320 scope:global +GetTypeInfo__C18CARSFX_PreColWoosh = .text:0x800DC078; // type:function size:0xC scope:global +GetTypeName__C18CARSFX_PreColWoosh = .text:0x800DC084; // type:function size:0xC scope:global +CreateObject__18CARSFX_PreColWooshUi = .text:0x800DC090; // type:function size:0x5C scope:global +__18CARSFX_PreColWoosh = .text:0x800DC0EC; // type:function size:0x170 scope:global +_._18CARSFX_PreColWoosh = .text:0x800DC25C; // type:function size:0xB8 scope:global +InitSFX__18CARSFX_PreColWoosh = .text:0x800DC314; // type:function size:0x60 scope:global +Destroy__18CARSFX_PreColWoosh = .text:0x800DC374; // type:function size:0x4 scope:global +MsgBarrier__18CARSFX_PreColWooshRC16MAudioReflection = .text:0x800DC378; // type:function size:0x8C scope:global +MsgBarrierHit__18CARSFX_PreColWooshRC16MAudioReflection = .text:0x800DC404; // type:function size:0x40 scope:global +BailOnWoosh__18CARSFX_PreColWoosh = .text:0x800DC444; // type:function size:0x60 scope:global +Detach__18CARSFX_PreColWoosh = .text:0x800DC4A4; // type:function size:0x4 scope:global +UpdateParams__18CARSFX_PreColWooshf = .text:0x800DC4A8; // type:function size:0x2C0 scope:global +ProcessUpdate__18CARSFX_PreColWoosh = .text:0x800DC768; // type:function size:0x10C scope:global +GetTypeInfo__C14CARSFX_Nitrous = .text:0x800DC874; // type:function size:0xC scope:global +GetTypeName__C14CARSFX_Nitrous = .text:0x800DC880; // type:function size:0xC scope:global +CreateObject__14CARSFX_NitrousUi = .text:0x800DC88C; // type:function size:0x5C scope:global +__14CARSFX_Nitrous = .text:0x800DC8E8; // type:function size:0x58 scope:global +_._14CARSFX_Nitrous = .text:0x800DC940; // type:function size:0x6C scope:global +GetController__14CARSFX_Nitrousi = .text:0x800DC9AC; // type:function size:0x2C scope:global +AttachController__14CARSFX_NitrousP6SFXCTL = .text:0x800DC9D8; // type:function size:0x68 scope:global +SetupSFX__14CARSFX_NitrousP11CSTATE_Base = .text:0x800DCA40; // type:function size:0x54 scope:global +InitSFX__14CARSFX_Nitrous = .text:0x800DCA94; // type:function size:0x20 scope:global +Play__14CARSFX_Nitrousiii = .text:0x800DCAB4; // type:function size:0x1E4 scope:global +Stop__14CARSFX_Nitrous = .text:0x800DCC98; // type:function size:0x54 scope:global +PlayPurge__14CARSFX_Nitrous = .text:0x800DCCEC; // type:function size:0x128 scope:global +Destroy__14CARSFX_Nitrous = .text:0x800DCE14; // type:function size:0x80 scope:global +UpdateParams__14CARSFX_Nitrousf = .text:0x800DCE94; // type:function size:0x140 scope:global +ProcessUpdate__14CARSFX_Nitrous = .text:0x800DCFD4; // type:function size:0x2C0 scope:global +GetTypeInfo__C11CARSFX_Rain = .text:0x800DD294; // type:function size:0xC scope:global +GetTypeName__C11CARSFX_Rain = .text:0x800DD2A0; // type:function size:0xC scope:global +CreateObject__11CARSFX_RainUi = .text:0x800DD2AC; // type:function size:0x5C scope:global +__11CARSFX_Rain = .text:0x800DD308; // type:function size:0x60 scope:global +_._11CARSFX_Rain = .text:0x800DD368; // type:function size:0x60 scope:global +GetController__11CARSFX_Raini = .text:0x800DD3C8; // type:function size:0x14 scope:global +AttachController__11CARSFX_RainP6SFXCTL = .text:0x800DD3DC; // type:function size:0x58 scope:global +SetupSFX__11CARSFX_RainP11CSTATE_Base = .text:0x800DD434; // type:function size:0x20 scope:global +InitSFX__11CARSFX_Rain = .text:0x800DD454; // type:function size:0x18 scope:global +Play__11CARSFX_Rain = .text:0x800DD46C; // type:function size:0xF0 scope:global +Stop__11CARSFX_Rain = .text:0x800DD55C; // type:function size:0x58 scope:global +Destroy__11CARSFX_Rain = .text:0x800DD5B4; // type:function size:0x58 scope:global +QueueWeatherStream__11CARSFX_Rain = .text:0x800DD60C; // type:function size:0x294 scope:global +UpdateParams__11CARSFX_Rainf = .text:0x800DD8A0; // type:function size:0x208 scope:global +UpdateMixerOutputs__11CARSFX_Rain = .text:0x800DDAA8; // type:function size:0x38 scope:global +ProcessUpdate__11CARSFX_Rain = .text:0x800DDAE0; // type:function size:0x130 scope:global +GetTypeInfo__C16SFXObj_Collision = .text:0x800DDC10; // type:function size:0xC scope:global +GetTypeName__C16SFXObj_Collision = .text:0x800DDC1C; // type:function size:0xC scope:global +CreateObject__16SFXObj_CollisionUi = .text:0x800DDC28; // type:function size:0x5C scope:global +__16SFXObj_Collision = .text:0x800DDC84; // type:function size:0xD8 scope:global +_._16SFXObj_Collision = .text:0x800DDD5C; // type:function size:0x60 scope:global +SetupSFX__16SFXObj_CollisionP11CSTATE_Base = .text:0x800DDDBC; // type:function size:0x34 scope:global +InitSFX__16SFXObj_Collision = .text:0x800DDDF0; // type:function size:0x518 scope:global +Detach__16SFXObj_Collision = .text:0x800DE308; // type:function size:0x34 scope:global +UpdateParams__16SFXObj_Collisionf = .text:0x800DE33C; // type:function size:0x214 scope:global +ProcessUpdate__16SFXObj_Collision = .text:0x800DE550; // type:function size:0x29C scope:global +GetController__16SFXObj_Collisioni = .text:0x800DE7EC; // type:function size:0x2C scope:global +AttachController__16SFXObj_CollisionP6SFXCTL = .text:0x800DE818; // type:function size:0x6C scope:global +Destroy__16SFXObj_Collision = .text:0x800DE884; // type:function size:0x8C scope:global +GetTypeInfo__C12SFXObj_Woosh = .text:0x800DE910; // type:function size:0xC scope:global +GetTypeName__C12SFXObj_Woosh = .text:0x800DE91C; // type:function size:0xC scope:global +CreateObject__12SFXObj_WooshUi = .text:0x800DE928; // type:function size:0x5C scope:global +GetWooshBlockSizeParams__F14eDRIVE_BY_TYPER17STICH_WHOOSH_TYPERiT2 = .text:0x800DE984; // type:function size:0xF8 scope:global +__12SFXObj_Woosh = .text:0x800DEA7C; // type:function size:0x6C scope:global +_._12SFXObj_Woosh = .text:0x800DEAE8; // type:function size:0x60 scope:global +Detach__12SFXObj_Woosh = .text:0x800DEB48; // type:function size:0x58 scope:global +SetupSFX__12SFXObj_WooshP11CSTATE_Base = .text:0x800DEBA0; // type:function size:0x34 scope:global +InitSFX__12SFXObj_Woosh = .text:0x800DEBD4; // type:function size:0x360 scope:global +UpdateParams__12SFXObj_Wooshf = .text:0x800DEF34; // type:function size:0x8C scope:global +ProcessUpdate__12SFXObj_Woosh = .text:0x800DEFC0; // type:function size:0x168 scope:global +GetController__12SFXObj_Wooshi = .text:0x800DF128; // type:function size:0x14 scope:global +AttachController__12SFXObj_WooshP6SFXCTL = .text:0x800DF13C; // type:function size:0x54 scope:global +Destroy__12SFXObj_Woosh = .text:0x800DF190; // type:function size:0x58 scope:global +GetTypeInfo__C17SFXCTL_3DWooshPos = .text:0x800DF1E8; // type:function size:0xC scope:global +GetTypeName__C17SFXCTL_3DWooshPos = .text:0x800DF1F4; // type:function size:0xC scope:global +CreateObject__17SFXCTL_3DWooshPosUi = .text:0x800DF200; // type:function size:0x78 scope:global +GetTypeInfo__C15SFXObj_Ambience = .text:0x800DF278; // type:function size:0xC scope:global +GetTypeName__C15SFXObj_Ambience = .text:0x800DF284; // type:function size:0xC scope:global +CreateObject__15SFXObj_AmbienceUi = .text:0x800DF290; // type:function size:0x5C scope:global +__15SFXObj_Ambience = .text:0x800DF2EC; // type:function size:0x3C scope:global +_._15SFXObj_Ambience = .text:0x800DF328; // type:function size:0x58 scope:global +InitSFX__15SFXObj_Ambience = .text:0x800DF380; // type:function size:0x4C scope:global +Destroy__15SFXObj_Ambience = .text:0x800DF3CC; // type:function size:0x4 scope:global +UpdateParams__15SFXObj_Ambiencef = .text:0x800DF3D0; // type:function size:0x4 scope:global +GetTypeInfo__C13SFXObj_Speech = .text:0x800DF3D4; // type:function size:0xC scope:global +GetTypeName__C13SFXObj_Speech = .text:0x800DF3E0; // type:function size:0xC scope:global +CreateObject__13SFXObj_SpeechUi = .text:0x800DF3EC; // type:function size:0x5C scope:global +__13SFXObj_Speech = .text:0x800DF448; // type:function size:0x74 scope:global +_._13SFXObj_Speech = .text:0x800DF4BC; // type:function size:0x7C scope:global +InitSFX__13SFXObj_Speech = .text:0x800DF538; // type:function size:0x78 scope:global +Destroy__13SFXObj_Speech = .text:0x800DF5B0; // type:function size:0x4 scope:global +GetController__13SFXObj_Speechi = .text:0x800DF5B4; // type:function size:0x14 scope:global +AttachController__13SFXObj_SpeechP6SFXCTL = .text:0x800DF5C8; // type:function size:0x58 scope:global +UpdateParams__13SFXObj_Speechf = .text:0x800DF620; // type:function size:0x138 scope:global +GetTypeInfo__C22SFXCTL_3DVoiceActorPos = .text:0x800DF758; // type:function size:0xC scope:global +GetTypeName__C22SFXCTL_3DVoiceActorPos = .text:0x800DF764; // type:function size:0xC scope:global +CreateObject__22SFXCTL_3DVoiceActorPosUi = .text:0x800DF770; // type:function size:0x78 scope:global +GetTypeInfo__C12SFXObj_FEHUD = .text:0x800DF7E8; // type:function size:0xC scope:global +GetTypeName__C12SFXObj_FEHUD = .text:0x800DF7F4; // type:function size:0xC scope:global +CreateObject__12SFXObj_FEHUDUi = .text:0x800DF800; // type:function size:0x5C scope:global +__12SFXObj_FEHUD = .text:0x800DF85C; // type:function size:0x3C scope:global +_._12SFXObj_FEHUD = .text:0x800DF898; // type:function size:0x78 scope:global +InitSFX__12SFXObj_FEHUD = .text:0x800DF910; // type:function size:0x4C scope:global +Destroy__12SFXObj_FEHUD = .text:0x800DF95C; // type:function size:0x4 scope:global +UpdateMixerOutputs__12SFXObj_FEHUD = .text:0x800DF960; // type:function size:0x4C scope:global +IsPlayerGoingFastEnough__Ffi = .text:0x800DF9AC; // type:function size:0x50 scope:global +GetTypeInfo__C20CARSFX_TrafficEngine = .text:0x800DF9FC; // type:function size:0xC scope:global +GetTypeName__C20CARSFX_TrafficEngine = .text:0x800DFA08; // type:function size:0xC scope:global +CreateObject__20CARSFX_TrafficEngineUi = .text:0x800DFA14; // type:function size:0x5C scope:global +__20CARSFX_TrafficEngine = .text:0x800DFA70; // type:function size:0x4C scope:global +_._20CARSFX_TrafficEngine = .text:0x800DFABC; // type:function size:0x60 scope:global +GetController__20CARSFX_TrafficEnginei = .text:0x800DFB1C; // type:function size:0x14 scope:global +AttachController__20CARSFX_TrafficEngineP6SFXCTL = .text:0x800DFB30; // type:function size:0x54 scope:global +InitSFX__20CARSFX_TrafficEngine = .text:0x800DFB84; // type:function size:0x58 scope:global +InitEngine__20CARSFX_TrafficEngine = .text:0x800DFBDC; // type:function size:0x178 scope:global +Detach__20CARSFX_TrafficEngine = .text:0x800DFD54; // type:function size:0xB4 scope:global +Destroy__20CARSFX_TrafficEngine = .text:0x800DFE08; // type:function size:0x58 scope:global +ProcessUpdate__20CARSFX_TrafficEngine = .text:0x800DFE60; // type:function size:0x26C scope:global +GetTypeInfo__C19SFXCTL_3DTrafficPos = .text:0x800E00CC; // type:function size:0xC scope:global +GetTypeName__C19SFXCTL_3DTrafficPos = .text:0x800E00D8; // type:function size:0xC scope:global +CreateObject__19SFXCTL_3DTrafficPosUi = .text:0x800E00E4; // type:function size:0x78 scope:global +GetTypeInfo__C18CARSFX_TrafficHorn = .text:0x800E015C; // type:function size:0xC scope:global +GetTypeName__C18CARSFX_TrafficHorn = .text:0x800E0168; // type:function size:0xC scope:global +CreateObject__18CARSFX_TrafficHornUi = .text:0x800E0174; // type:function size:0x5C scope:global +GetTypeInfo__C16CARSFX_TruckHorn = .text:0x800E01D0; // type:function size:0xC scope:global +GetTypeName__C16CARSFX_TruckHorn = .text:0x800E01DC; // type:function size:0xC scope:global +CreateObject__16CARSFX_TruckHornUi = .text:0x800E01E8; // type:function size:0x78 scope:global +__18CARSFX_TrafficHorn = .text:0x800E0260; // type:function size:0xC4 scope:global +_._18CARSFX_TrafficHorn = .text:0x800E0324; // type:function size:0x68 scope:global +Destroy__18CARSFX_TrafficHorn = .text:0x800E038C; // type:function size:0x20 scope:global +Detach__18CARSFX_TrafficHorn = .text:0x800E03AC; // type:function size:0x20 scope:global +UpdateParams__18CARSFX_TrafficHornf = .text:0x800E03CC; // type:function size:0x214 scope:global +ProcessUpdate__18CARSFX_TrafficHorn = .text:0x800E05E0; // type:function size:0x20 scope:global +GetController__18CARSFX_TrafficHorni = .text:0x800E0600; // type:function size:0x14 scope:global +AttachController__18CARSFX_TrafficHornP6SFXCTL = .text:0x800E0614; // type:function size:0x54 scope:global +StartHonkHorn__18CARSFX_TrafficHorn = .text:0x800E0668; // type:function size:0x4 scope:global +StopHonkHorn__18CARSFX_TrafficHorn = .text:0x800E066C; // type:function size:0x38 scope:global +EndCarHonk__18CARSFX_TrafficHorn = .text:0x800E06A4; // type:function size:0x44 scope:global +UpdateMixerOutputs__18CARSFX_TrafficHorn = .text:0x800E06E8; // type:function size:0x28 scope:global +CSIS_BeginHonk__18CARSFX_TrafficHorni = .text:0x800E0710; // type:function size:0x148 scope:global +CSIS_EndHonk__18CARSFX_TrafficHorn = .text:0x800E0858; // type:function size:0x6C scope:global +CSIS_UpdateHOnk__18CARSFX_TrafficHorn = .text:0x800E08C4; // type:function size:0x130 scope:global +IsHonking__18CARSFX_TrafficHorn = .text:0x800E09F4; // type:function size:0x18 scope:global +IsPlayerCarInRange__18CARSFX_TrafficHorni = .text:0x800E0A0C; // type:function size:0x2A0 scope:global +GetTypeInfo__C19CARSFX_TrafficWoosh = .text:0x800E0CAC; // type:function size:0xC scope:global +GetTypeName__C19CARSFX_TrafficWoosh = .text:0x800E0CB8; // type:function size:0xC scope:global +CreateObject__19CARSFX_TrafficWooshUi = .text:0x800E0CC4; // type:function size:0x5C scope:global +__19CARSFX_TrafficWoosh = .text:0x800E0D20; // type:function size:0x50 scope:global +_._19CARSFX_TrafficWoosh = .text:0x800E0D70; // type:function size:0x60 scope:global +Destroy__19CARSFX_TrafficWoosh = .text:0x800E0DD0; // type:function size:0x58 scope:global +Detach__19CARSFX_TrafficWoosh = .text:0x800E0E28; // type:function size:0x58 scope:global +UpdateParams__19CARSFX_TrafficWooshf = .text:0x800E0E80; // type:function size:0x228 scope:global +GetWooshSample__19CARSFX_TrafficWoosh = .text:0x800E10A8; // type:function size:0x4C scope:global +IsPlayerCarInRadius__19CARSFX_TrafficWoosh = .text:0x800E10F4; // type:function size:0x44 scope:global +ProcessUpdate__19CARSFX_TrafficWoosh = .text:0x800E1138; // type:function size:0x10C scope:global +GetPlayerSpeedRelativeToUs__19CARSFX_TrafficWoosh = .text:0x800E1244; // type:function size:0x10C scope:global +GetTypeInfo__C16CARSFX_BottomOut = .text:0x800E1350; // type:function size:0xC scope:global +GetTypeName__C16CARSFX_BottomOut = .text:0x800E135C; // type:function size:0xC scope:global +CreateObject__16CARSFX_BottomOutUi = .text:0x800E1368; // type:function size:0x5C scope:global +__16CARSFX_BottomOut = .text:0x800E13C4; // type:function size:0x9C scope:global +_._16CARSFX_BottomOut = .text:0x800E1460; // type:function size:0x60 scope:global +InitSFX__16CARSFX_BottomOut = .text:0x800E14C0; // type:function size:0x18 scope:global +Destroy__16CARSFX_BottomOut = .text:0x800E14D8; // type:function size:0xCC scope:global +LandJumpPlay__16CARSFX_BottomOutfb = .text:0x800E15A4; // type:function size:0x190 scope:global +BottomOutPlay__16CARSFX_BottomOutUi = .text:0x800E1734; // type:function size:0x108 scope:global +Detach__16CARSFX_BottomOut = .text:0x800E183C; // type:function size:0xCC scope:global +UpdateParams__16CARSFX_BottomOutf = .text:0x800E1908; // type:function size:0x6E0 scope:global +ProcessUpdate__16CARSFX_BottomOut = .text:0x800E1FE8; // type:function size:0x2A0 scope:global +GetTypeInfo__C13SFXObj_Reverb = .text:0x800E2288; // type:function size:0xC scope:global +GetTypeName__C13SFXObj_Reverb = .text:0x800E2294; // type:function size:0xC scope:global +CreateObject__13SFXObj_ReverbUi = .text:0x800E22A0; // type:function size:0x5C scope:global +__13SFXObj_Reverb = .text:0x800E22FC; // type:function size:0x60 scope:global +_._13SFXObj_Reverb = .text:0x800E235C; // type:function size:0x60 scope:global +GetController__13SFXObj_Reverbi = .text:0x800E23BC; // type:function size:0x14 scope:global +AttachController__13SFXObj_ReverbP6SFXCTL = .text:0x800E23D0; // type:function size:0x58 scope:global +SetupLoadData__13SFXObj_Reverb = .text:0x800E2428; // type:function size:0x88 scope:global +SetupSFX__13SFXObj_ReverbP11CSTATE_Base = .text:0x800E24B0; // type:function size:0x4C scope:global +InitSFX__13SFXObj_Reverb = .text:0x800E24FC; // type:function size:0x174 scope:global +UpdateParams__13SFXObj_Reverbf = .text:0x800E2670; // type:function size:0x94 scope:global +ProcessUpdate__13SFXObj_Reverb = .text:0x800E2704; // type:function size:0xA8 scope:global +Destroy__13SFXObj_Reverb = .text:0x800E27AC; // type:function size:0xA8 scope:global +GetTypeInfo__C12CARSFX_Siren = .text:0x800E2854; // type:function size:0xC scope:global +GetTypeName__C12CARSFX_Siren = .text:0x800E2860; // type:function size:0xC scope:global +CreateObject__12CARSFX_SirenUi = .text:0x800E286C; // type:function size:0x5C scope:global +__12CARSFX_Siren = .text:0x800E28C8; // type:function size:0x48 scope:global +_._12CARSFX_Siren = .text:0x800E2910; // type:function size:0x60 scope:global +Detach__12CARSFX_Siren = .text:0x800E2970; // type:function size:0x34 scope:global +Destroy__12CARSFX_Siren = .text:0x800E29A4; // type:function size:0x54 scope:global +GetController__12CARSFX_Sireni = .text:0x800E29F8; // type:function size:0x8 scope:global +AttachController__12CARSFX_SirenP6SFXCTL = .text:0x800E2A00; // type:function size:0x4 scope:global +SetupSFX__12CARSFX_SirenP11CSTATE_Base = .text:0x800E2A04; // type:function size:0x20 scope:global +InitSFX__12CARSFX_Siren = .text:0x800E2A24; // type:function size:0xA0 scope:global +UpdateParams__12CARSFX_Sirenf = .text:0x800E2AC4; // type:function size:0xC8 scope:global +ProcessUpdate__12CARSFX_Siren = .text:0x800E2B8C; // type:function size:0x2C0 scope:global +UpdateSirenState__12CARSFX_Sirenf = .text:0x800E2E4C; // type:function size:0x84 scope:global +GetTypeInfo__C17SFXObj_Pathfinder = .text:0x800E2ED0; // type:function size:0xC scope:global +GetTypeName__C17SFXObj_Pathfinder = .text:0x800E2EDC; // type:function size:0xC scope:global +CreateObject__17SFXObj_PathfinderUi = .text:0x800E2EE8; // type:function size:0x5C scope:global +__17SFXObj_Pathfinder = .text:0x800E2F44; // type:function size:0x54 scope:global +GetController__17SFXObj_Pathfinderi = .text:0x800E2F98; // type:function size:0x14 scope:global +AttachController__17SFXObj_PathfinderP6SFXCTL = .text:0x800E2FAC; // type:function size:0x54 scope:global +GetTypeInfo__C15SFXObj_PFEATrax = .text:0x800E3000; // type:function size:0xC scope:global +GetTypeName__C15SFXObj_PFEATrax = .text:0x800E300C; // type:function size:0xC scope:global +CreateObject__15SFXObj_PFEATraxUi = .text:0x800E3018; // type:function size:0x5C scope:global +__15SFXObj_PFEATrax = .text:0x800E3074; // type:function size:0x4F8 scope:global +_._15SFXObj_PFEATrax = .text:0x800E356C; // type:function size:0xF0 scope:global +RestartRace__15SFXObj_PFEATrax = .text:0x800E365C; // type:function size:0x64 scope:global +SendPathEvent__15SFXObj_PFEATrax = .text:0x800E36C0; // type:function size:0x150 scope:global +SwapInteractiveProjects__15SFXObj_PFEATrax = .text:0x800E3810; // type:function size:0x10 scope:global +StartLicensedMusic__15SFXObj_PFEATraxUi = .text:0x800E3820; // type:function size:0x318 scope:global +StartAmbience__15SFXObj_PFEATraxUi = .text:0x800E3B38; // type:function size:0x138 scope:global +StartInteractiveMusic__15SFXObj_PFEATraxUi = .text:0x800E3C70; // type:function size:0x168 scope:global +Stop__15SFXObj_PFEATrax = .text:0x800E3DD8; // type:function size:0x60 scope:global +Destroy__15SFXObj_PFEATrax = .text:0x800E3E38; // type:function size:0xE0 scope:global +InitializeEATrax__Fb = .text:0x800E3F18; // type:function size:0x158 scope:global +MessageInitSongsList__15SFXObj_PFEATraxRC18MControlPathfinder = .text:0x800E4070; // type:function size:0x50 scope:global +GenEATraxState__15SFXObj_PFEATrax = .text:0x800E40C0; // type:function size:0x4C scope:global +GenMusicType__15SFXObj_PFEATrax = .text:0x800E410C; // type:function size:0xF4 scope:global +TestToPursuit__15SFXObj_PFEATrax = .text:0x800E4200; // type:function size:0xC8 scope:global +TestToLicensed__15SFXObj_PFEATraxb = .text:0x800E42C8; // type:function size:0x36C scope:global +TestToAmbience__15SFXObj_PFEATrax = .text:0x800E4634; // type:function size:0x2E0 scope:global +UpdateInGame__15SFXObj_PFEATraxf = .text:0x800E4914; // type:function size:0x314 scope:global +UpdateAmbience__15SFXObj_PFEATraxf = .text:0x800E4C28; // type:function size:0x140 scope:global +UpdatePursuitBreaker__15SFXObj_PFEATraxf = .text:0x800E4D68; // type:function size:0x1E4 scope:global +UpdateParams__15SFXObj_PFEATraxf = .text:0x800E4F4C; // type:function size:0x36C scope:global +ProcessUpdate__15SFXObj_PFEATrax = .text:0x800E52B8; // type:function size:0x298 scope:global +SetupSFX__15SFXObj_PFEATraxP11CSTATE_Base = .text:0x800E5550; // type:function size:0xF0 scope:global +SetupLoadData__15SFXObj_PFEATrax = .text:0x800E5640; // type:function size:0xE8 scope:global +InitSFX__15SFXObj_PFEATrax = .text:0x800E5728; // type:function size:0x194 scope:global +GenNextMusicTrackID__15SFXObj_PFEATrax = .text:0x800E58BC; // type:function size:0x2E8 scope:global +NotifyChyron__15SFXObj_PFEATrax = .text:0x800E5BA4; // type:function size:0x8C scope:global +MessageStartPathfinder__15SFXObj_PFEATraxRC18MControlPathfinder = .text:0x800E5C30; // type:function size:0x18C scope:global +MessageSendPathEvent__15SFXObj_PFEATraxRC18MControlPathfinder = .text:0x800E5DBC; // type:function size:0x118 scope:global +MessageSendPathControl__15SFXObj_PFEATraxRC18MControlPathfinder = .text:0x800E5ED4; // type:function size:0x70 scope:global +MessagePartUpdate__15SFXObj_PFEATraxRC18MControlPathfinder = .text:0x800E5F44; // type:function size:0x38 scope:global +MessagePerpBusted__15SFXObj_PFEATraxRC11MPerpBusted = .text:0x800E5F7C; // type:function size:0x4 scope:global +MessageInteractiveDone__15SFXObj_PFEATraxRC18MControlPathfinder = .text:0x800E5F80; // type:function size:0x10 scope:global +MessageSwapInteractive__15SFXObj_PFEATraxRC18MControlPathfinder = .text:0x800E5F90; // type:function size:0x3C scope:global +GetTypeInfo__C17SFXObj_Helicopter = .text:0x800E5FCC; // type:function size:0xC scope:global +GetTypeName__C17SFXObj_Helicopter = .text:0x800E5FD8; // type:function size:0xC scope:global +CreateObject__17SFXObj_HelicopterUi = .text:0x800E5FE4; // type:function size:0x5C scope:global +__17SFXObj_Helicopter = .text:0x800E6040; // type:function size:0x7C scope:global +_._17SFXObj_Helicopter = .text:0x800E60BC; // type:function size:0x60 scope:global +SetupSFX__17SFXObj_HelicopterP11CSTATE_Base = .text:0x800E611C; // type:function size:0x20 scope:global +InitSFX__17SFXObj_Helicopter = .text:0x800E613C; // type:function size:0x264 scope:global +Detach__17SFXObj_Helicopter = .text:0x800E63A0; // type:function size:0x34 scope:global +GetController__17SFXObj_Helicopteri = .text:0x800E63D4; // type:function size:0x14 scope:global +AttachController__17SFXObj_HelicopterP6SFXCTL = .text:0x800E63E8; // type:function size:0x54 scope:global +Destroy__17SFXObj_Helicopter = .text:0x800E643C; // type:function size:0x54 scope:global +UpdateParams__17SFXObj_Helicopterf = .text:0x800E6490; // type:function size:0x4 scope:global +ProcessUpdate__17SFXObj_Helicopter = .text:0x800E6494; // type:function size:0x278 scope:global +GetTypeInfo__C16SFXObj_NISStream = .text:0x800E670C; // type:function size:0xC scope:global +GetTypeName__C16SFXObj_NISStream = .text:0x800E6718; // type:function size:0xC scope:global +CreateObject__16SFXObj_NISStreamUi = .text:0x800E6724; // type:function size:0x5C scope:global +GenerateNISAnimHashMap__Fv = .text:0x800E6780; // type:function size:0x7F8 scope:global +GetCsisEventIndex__FUi = .text:0x800E6F78; // type:function size:0x34 scope:global +__16SFXObj_NISStream = .text:0x800E6FAC; // type:function size:0x68 scope:global +_._16SFXObj_NISStream = .text:0x800E7014; // type:function size:0x78 scope:global +InitSFX__16SFXObj_NISStream = .text:0x800E708C; // type:function size:0x84 scope:global +QueueNISStream__16SFXObj_NISStreamUiiPFUii_vb = .text:0x800E7110; // type:function size:0x38 scope:global +StopStream__16SFXObj_NISStream = .text:0x800E7148; // type:function size:0x28 scope:global +QueueNISStream__16SFXObj_NISStreamUiibT3 = .text:0x800E7170; // type:function size:0x614 scope:global +NISActivityDone__16SFXObj_NISStream = .text:0x800E7784; // type:function size:0x74 scope:global +StartNIS__16SFXObj_NISStream = .text:0x800E77F8; // type:function size:0x6C scope:global +UpdateParams__16SFXObj_NISStreamf = .text:0x800E7864; // type:function size:0x16C scope:global +PlayNISStream__16SFXObj_NISStream = .text:0x800E79D0; // type:function size:0x60 scope:global +Destroy__16SFXObj_NISStream = .text:0x800E7A30; // type:function size:0x4 scope:global +GetTypeInfo__C17SFXObj_MomentStrm = .text:0x800E7A34; // type:function size:0xC scope:global +GetTypeName__C17SFXObj_MomentStrm = .text:0x800E7A40; // type:function size:0xC scope:global +CreateObject__17SFXObj_MomentStrmUi = .text:0x800E7A4C; // type:function size:0x5C scope:global +__17SFXObj_MomentStrm = .text:0x800E7AA8; // type:function size:0x1DC scope:global +_._17SFXObj_MomentStrm = .text:0x800E7C84; // type:function size:0x188 scope:global +SetupSFX__17SFXObj_MomentStrmP11CSTATE_Base = .text:0x800E7E0C; // type:function size:0x20 scope:global +InitSFX__17SFXObj_MomentStrm = .text:0x800E7E2C; // type:function size:0x364 scope:global +GetController__17SFXObj_MomentStrmi = .text:0x800E8190; // type:function size:0x14 scope:global +AttachController__17SFXObj_MomentStrmP6SFXCTL = .text:0x800E81A4; // type:function size:0x58 scope:global +Destroy__17SFXObj_MomentStrm = .text:0x800E81FC; // type:function size:0x4 scope:global +ShouldStreamPlay__17SFXObj_MomentStrmUibf = .text:0x800E8200; // type:function size:0x284 scope:global +CommitStreamReq__17SFXObj_MomentStrmGQ25UMath7Vector4Ui = .text:0x800E8484; // type:function size:0x20C scope:global +ReceiveMoment__17SFXObj_MomentStrmRC15MGamePlayMoment = .text:0x800E8690; // type:function size:0x1C4 scope:global +CBPlayMomentStream__17SFXObj_MomentStrm = .text:0x800E8854; // type:function size:0xF8 scope:global +UpdateParams__17SFXObj_MomentStrmf = .text:0x800E894C; // type:function size:0x370 scope:global +ProcessUpdate__17SFXObj_MomentStrm = .text:0x800E8CBC; // type:function size:0x10 scope:global +ReceivePursuitBreaker__17SFXObj_MomentStrmRC15MPursuitBreaker = .text:0x800E8CCC; // type:function size:0x368 scope:global +GetTypeInfo__C18SFXCTL_3DMomentPos = .text:0x800E9034; // type:function size:0xC scope:global +GetTypeName__C18SFXCTL_3DMomentPos = .text:0x800E9040; // type:function size:0xC scope:global +CreateObject__18SFXCTL_3DMomentPosUi = .text:0x800E904C; // type:function size:0x78 scope:global +GetTypeInfo__C20SFXCTL_3DFountainPos = .text:0x800E90C4; // type:function size:0xC scope:global +GetTypeName__C20SFXCTL_3DFountainPos = .text:0x800E90D0; // type:function size:0xC scope:global +CreateObject__20SFXCTL_3DFountainPosUi = .text:0x800E90DC; // type:function size:0x78 scope:global +GetTypeInfo__C18SFXObj_WorldObject = .text:0x800E9154; // type:function size:0xC scope:global +GetTypeName__C18SFXObj_WorldObject = .text:0x800E9160; // type:function size:0xC scope:global +CreateObject__18SFXObj_WorldObjectUi = .text:0x800E916C; // type:function size:0x5C scope:global +__18SFXObj_WorldObject = .text:0x800E91C8; // type:function size:0x70 scope:global +_._18SFXObj_WorldObject = .text:0x800E9238; // type:function size:0x58 scope:global +Destroy__18SFXObj_WorldObject = .text:0x800E9290; // type:function size:0x54 scope:global +ProcessUpdate__18SFXObj_WorldObject = .text:0x800E92E4; // type:function size:0x180 scope:global +GetController__18SFXObj_WorldObjecti = .text:0x800E9464; // type:function size:0x14 scope:global +AttachController__18SFXObj_WorldObjectP6SFXCTL = .text:0x800E9478; // type:function size:0x54 scope:global +InitSFX__18SFXObj_WorldObject = .text:0x800E94CC; // type:function size:0x19C scope:global +Detach__18SFXObj_WorldObject = .text:0x800E9668; // type:function size:0x94 scope:global +GetTypeInfo__C14SFXObj_TruckFX = .text:0x800E96FC; // type:function size:0xC scope:global +GetTypeName__C14SFXObj_TruckFX = .text:0x800E9708; // type:function size:0xC scope:global +CreateObject__14SFXObj_TruckFXUi = .text:0x800E9714; // type:function size:0x5C scope:global +__14SFXObj_TruckFX = .text:0x800E9770; // type:function size:0x58 scope:global +_._14SFXObj_TruckFX = .text:0x800E97C8; // type:function size:0x60 scope:global +Destroy__14SFXObj_TruckFX = .text:0x800E9828; // type:function size:0x54 scope:global +SetupSFX__14SFXObj_TruckFXP11CSTATE_Base = .text:0x800E987C; // type:function size:0x20 scope:global +UpdateParams__14SFXObj_TruckFXf = .text:0x800E989C; // type:function size:0x4E8 scope:global +ProcessUpdate__14SFXObj_TruckFX = .text:0x800E9D84; // type:function size:0x150 scope:global +GetController__14SFXObj_TruckFXi = .text:0x800E9ED4; // type:function size:0x8 scope:global +AttachController__14SFXObj_TruckFXP6SFXCTL = .text:0x800E9EDC; // type:function size:0x4 scope:global +InitSFX__14SFXObj_TruckFX = .text:0x800E9EE0; // type:function size:0x28 scope:global +Detach__14SFXObj_TruckFX = .text:0x800E9F08; // type:function size:0x34 scope:global +GetTypeInfo__C17CARSFX_TruckWoosh = .text:0x800E9F3C; // type:function size:0xC scope:global +GetTypeName__C17CARSFX_TruckWoosh = .text:0x800E9F48; // type:function size:0xC scope:global +CreateObject__17CARSFX_TruckWooshUi = .text:0x800E9F54; // type:function size:0x5C scope:global +__17CARSFX_TruckWoosh = .text:0x800E9FB0; // type:function size:0x9C scope:global +_._17CARSFX_TruckWoosh = .text:0x800EA04C; // type:function size:0x68 scope:global +GetController__17CARSFX_TruckWooshi = .text:0x800EA0B4; // type:function size:0x14 scope:global +AttachController__17CARSFX_TruckWooshP6SFXCTL = .text:0x800EA0C8; // type:function size:0x58 scope:global +InitSFX__17CARSFX_TruckWoosh = .text:0x800EA120; // type:function size:0x7C scope:global +IsPlayerCarInRadius__17CARSFX_TruckWoosh = .text:0x800EA19C; // type:function size:0x3C scope:global +UpdateParams__17CARSFX_TruckWooshf = .text:0x800EA1D8; // type:function size:0xBC scope:global +GetWooshSample__17CARSFX_TruckWoosh = .text:0x800EA294; // type:function size:0xEC scope:global +GetTypeInfo__C19SFXCTL_3DTrailerPos = .text:0x800EA380; // type:function size:0xC scope:global +GetTypeName__C19SFXCTL_3DTrailerPos = .text:0x800EA38C; // type:function size:0xC scope:global +CreateObject__19SFXCTL_3DTrailerPosUi = .text:0x800EA398; // type:function size:0x78 scope:global +SetupLoadData__14CARSFX_Nitrous = .text:0x800EA410; // type:function size:0xBC scope:global +SetupLoadData__12CARSFX_Shift = .text:0x800EA4CC; // type:function size:0x1BC scope:global +SetupLoadData__19CARSFX_SparkChatter = .text:0x800EA688; // type:function size:0x94 scope:global +SetupLoadData__12CARSFX_Turbo = .text:0x800EA71C; // type:function size:0xBC scope:global +SetupLoadData__12CARSFX_Skids = .text:0x800EA7D8; // type:function size:0xB8 scope:global +SetupLoadData__17CARSFX_AEMSEngine = .text:0x800EA890; // type:function size:0xF4 scope:global +SetupLoadData__21CARSFX_SingleGinsuEng = .text:0x800EA984; // type:function size:0xC4 scope:global +SetupLoadData__19CARSFX_DualGinsuEng = .text:0x800EAA48; // type:function size:0x10C scope:global +SetupLoadData__10SFX_Common = .text:0x800EAB54; // type:function size:0x10C scope:global +swapbytes__FPUc = .text:0x800EAC60; // type:function size:0x24 scope:local +AdjustEndienness__FP15GinsuDataLayout = .text:0x800EAC84; // type:function size:0x98 scope:local +DecodeBlock__14GinsuSynthDatai = .text:0x800EAD1C; // type:function size:0x120 scope:global +__14GinsuSynthData = .text:0x800EAE3C; // type:function size:0x38 scope:global +BindToData__14GinsuSynthDataPv = .text:0x800EAE74; // type:function size:0x154 scope:global +FrequencyToSample__C14GinsuSynthDataf = .text:0x800EAFC8; // type:function size:0x1B0 scope:global +CycleToSample__C14GinsuSynthDataf = .text:0x800EB178; // type:function size:0x190 scope:global +CyclePeriod__C14GinsuSynthDataf = .text:0x800EB308; // type:function size:0x25C scope:global +SampleToCycle__C14GinsuSynthDatai = .text:0x800EB564; // type:function size:0x36C scope:global +GetSamples__14GinsuSynthDataiiPs = .text:0x800EB8D0; // type:function size:0xF4 scope:global +PacketReleaseCallback__14GinsuSynthesisPvT1 = .text:0x800EB9C4; // type:function size:0x2C scope:global +HandlePacketRelease__14GinsuSynthesisPs = .text:0x800EB9F0; // type:function size:0x790 scope:global +GetMemblockSize__14GinsuSynthesis = .text:0x800EC180; // type:function size:0x28 scope:global +__14GinsuSynthesisPvi = .text:0x800EC1A8; // type:function size:0xA4 scope:global +_._14GinsuSynthesis = .text:0x800EC24C; // type:function size:0x68 scope:global +SetSynthData__14GinsuSynthesisR14GinsuSynthData = .text:0x800EC2B4; // type:function size:0x1C4 scope:global +StartSynthesis__14GinsuSynthesisf = .text:0x800EC478; // type:function size:0x174 scope:global +UpdateFrequency__14GinsuSynthesisff = .text:0x800EC5EC; // type:function size:0xDC scope:global +GetCurrentPitch__14GinsuSynthesis = .text:0x800EC6C8; // type:function size:0x8C scope:global +StopSynthesis__14GinsuSynthesis = .text:0x800EC754; // type:function size:0x4C scope:global +__9NFSMixMap = .text:0x800EC7A0; // type:function size:0x30 scope:global +_._9NFSMixMap = .text:0x800EC7D0; // type:function size:0x44 scope:global +DestroyMainMixMap__9NFSMixMap = .text:0x800EC814; // type:function size:0x1A4 scope:global +AssignSFXCallbacks__9NFSMixMapPFi_PiPFiPi_vPFiPi_bPFi_iPFv_v = .text:0x800EC9B8; // type:function size:0x3C scope:global +SETSFXID__9NFSMixMapiPi = .text:0x800EC9F4; // type:function size:0x34 scope:global +InitMixMap__9NFSMixMapPiP9NFSMixMap = .text:0x800ECA28; // type:function size:0x68 scope:global +ResetMapData__9NFSMixMap = .text:0x800ECA90; // type:function size:0x160 scope:global +SetupStateRefCount__9NFSMixMap = .text:0x800ECBF0; // type:function size:0x90 scope:global +PreProcessMixMap__9NFSMixMap = .text:0x800ECC80; // type:function size:0x574 scope:global +AllocateMixerMemory__9NFSMixMap = .text:0x800ED1F4; // type:function size:0x378 scope:global +GetNextInputBlock__9NFSMixMapb = .text:0x800ED56C; // type:function size:0x48 scope:global +GetNextEvtMixCtlProc__9NFSMixMapb = .text:0x800ED5B4; // type:function size:0x28 scope:global +GetNextEvtMixCtlShared__9NFSMixMapb = .text:0x800ED5DC; // type:function size:0x28 scope:global +GetNextEvtMixCtlUnique__9NFSMixMapb = .text:0x800ED604; // type:function size:0x48 scope:global +GetNext3DMixCtlProc__9NFSMixMapb = .text:0x800ED64C; // type:function size:0x28 scope:global +GetNext3DMixCtlShared__9NFSMixMapb = .text:0x800ED674; // type:function size:0x28 scope:global +GetNext3DMixCtlUnique__9NFSMixMapb = .text:0x800ED69C; // type:function size:0x28 scope:global +GetNextMasterMixProc__9NFSMixMapb = .text:0x800ED6C4; // type:function size:0x28 scope:global +GetNextMasterMixShared__9NFSMixMapb = .text:0x800ED6EC; // type:function size:0x28 scope:global +GetNextMasterMixUnique__9NFSMixMapb = .text:0x800ED714; // type:function size:0x28 scope:global +GetNextSubMixProc__9NFSMixMapb = .text:0x800ED73C; // type:function size:0x28 scope:global +GetNextSubMixUnique__9NFSMixMapb = .text:0x800ED764; // type:function size:0x28 scope:global +GetNextSubMixShared__9NFSMixMapb = .text:0x800ED78C; // type:function size:0x28 scope:global +GetNextMapState__9NFSMixMapb = .text:0x800ED7B4; // type:function size:0x24 scope:global +GetCurveDataPtr__9NFSMixMapP14stMixCtlParams = .text:0x800ED7D8; // type:function size:0xD0 scope:global +AddScaleIDs__9NFSMixMapP14stMixCtlParamsi = .text:0x800ED8A8; // type:function size:0x114 scope:global +AddScaleIDs__9NFSMixMapP14stMixEvtParamsi = .text:0x800ED9BC; // type:function size:0x120 scope:global +GetProcessMixCtlPtr__9NFSMixMapb = .text:0x800EDADC; // type:function size:0x28 scope:global +AssignMixCtlDataPtrs__9NFSMixMapP12stMixCtlProcP14stMixCtlParamsii = .text:0x800EDB04; // type:function size:0xAC scope:global +GetMasterChannelOutputArrayPtr__9NFSMixMapi = .text:0x800EDBB0; // type:function size:0x20 scope:global +GetMasterChannelInputPtr__9NFSMixMapi = .text:0x800EDBD0; // type:function size:0x1C scope:global +GetSubChannelInputPtr__9NFSMixMapi = .text:0x800EDBEC; // type:function size:0x1C scope:global +GetMapStateCopies__9NFSMixMapi = .text:0x800EDC08; // type:function size:0x28 scope:global +CreateMainMapState__9NFSMixMap14eMAINMAPSTATESii = .text:0x800EDC30; // type:function size:0xDC scope:global +AllocateInputArrays__9NFSMixMap = .text:0x800EDD0C; // type:function size:0x48C scope:global +GetObjectPtr__9NFSMixMapibT2 = .text:0x800EE198; // type:function size:0x1EC scope:global +ConnectMixMap__9NFSMixMap = .text:0x800EE384; // type:function size:0x1BC scope:global +SetupStateProcArrays__9NFSMixMap = .text:0x800EE540; // type:function size:0xA8 scope:global +InitMainMapStates__9NFSMixMap = .text:0x800EE5E8; // type:function size:0x34 scope:global +ProcessMixMap__9NFSMixMapf10eCamStates = .text:0x800EE61C; // type:function size:0x194 scope:global +UpdateSubChannels__9NFSMixMap = .text:0x800EE7B0; // type:function size:0xCC scope:global +UpdateMasterChannels__9NFSMixMap = .text:0x800EE87C; // type:function size:0xD8 scope:global +MixMasterChannels__9NFSMixMap = .text:0x800EE954; // type:function size:0x31C scope:global +UpdateEvtMixCtls__9NFSMixMap = .text:0x800EEC70; // type:function size:0x18C scope:global +UpdateLFOEvent__9NFSMixMapP15stEvtMixCtlProc = .text:0x800EEDFC; // type:function size:0x4 scope:global +UpdateATREvent__9NFSMixMapP15stEvtMixCtlProc = .text:0x800EEE00; // type:function size:0x3F8 scope:global +UpdateASREvent__9NFSMixMapP15stEvtMixCtlProc = .text:0x800EF1F8; // type:function size:0x22C scope:global +UpdateAREvent__9NFSMixMapP15stEvtMixCtlProc = .text:0x800EF424; // type:function size:0x1E4 scope:global +Update3DMixCtls__9NFSMixMap = .text:0x800EF608; // type:function size:0x860 scope:global +__14NFSMixMapState = .text:0x800EFE68; // type:function size:0x14 scope:global +Initialize__14NFSMixMapStateP9NFSMixMapiii = .text:0x800EFE7C; // type:function size:0x64 scope:global +GetStateRefCount__14NFSMixMapState = .text:0x800EFEE0; // type:function size:0xC scope:global +_._14NFSMixMapState = .text:0x800EFEEC; // type:function size:0x34 scope:global +GetMixCtlProc__14NFSMixMapStateii = .text:0x800EFF20; // type:function size:0x38 scope:global +Get3DMixCtlProc__14NFSMixMapStateii = .text:0x800EFF58; // type:function size:0x38 scope:global +GetEvtMixCtlProc__14NFSMixMapStateii = .text:0x800EFF90; // type:function size:0x38 scope:global +GetSubMixChProc__14NFSMixMapStateii = .text:0x800EFFC8; // type:function size:0x38 scope:global +GetMasterMixChProc__14NFSMixMapStateii = .text:0x800F0000; // type:function size:0x38 scope:global +CreateMixCtls__14NFSMixMapState = .text:0x800F0038; // type:function size:0x1C0 scope:global +CreateSubMixChannels__14NFSMixMapState = .text:0x800F01F8; // type:function size:0x150 scope:global +CreateMasterMixChannels__14NFSMixMapState = .text:0x800F0348; // type:function size:0x22C scope:global +CreateEvtMixCtls__14NFSMixMapState = .text:0x800F0574; // type:function size:0x1F8 scope:global +Create3DMixCtls__14NFSMixMapState = .text:0x800F076C; // type:function size:0x1B0 scope:global +InitializeSubChannels__14NFSMixMapState = .text:0x800F091C; // type:function size:0x170 scope:global +InitializeMasterChannels__14NFSMixMapState = .text:0x800F0A8C; // type:function size:0x228 scope:global +GetMixMapProc__14NFSMixMapStatei = .text:0x800F0CB4; // type:function size:0x10 scope:global +SetFirstStateInst__14NFSMixMapStateP14NFSMixMapState = .text:0x800F0CC4; // type:function size:0x8 scope:global +AddMixState__14NFSMixMapStateiP14NFSMixMapState = .text:0x800F0CCC; // type:function size:0xA4 scope:global +__12NFSMixMaster = .text:0x800F0D70; // type:function size:0x58 scope:global +_._12NFSMixMaster = .text:0x800F0DC8; // type:function size:0x8C scope:global +DestroyMainMainMap__12NFSMixMaster = .text:0x800F0E54; // type:function size:0x98 scope:global +CreateMainMainMap__12NFSMixMaster9eRACETYPE = .text:0x800F0EEC; // type:function size:0x60 scope:global +LoadMixMapFile__12NFSMixMaster7eMMTYPEPc = .text:0x800F0F4C; // type:function size:0xE8 scope:global +LoadDataCallback__12NFSMixMasterii = .text:0x800F1034; // type:function size:0x4 scope:global +DestroyMap__12NFSMixMaster = .text:0x800F1038; // type:function size:0x24 scope:global +InitMixMap__12NFSMixMasteri = .text:0x800F105C; // type:function size:0x16C scope:global +AssignSFXCallbacks__12NFSMixMasterPFi_PiPFiPi_vPFiPi_bPFi_iPFv_v = .text:0x800F11C8; // type:function size:0x20 scope:global +ProcessMixMap__12NFSMixMasterf10eCamStates = .text:0x800F11E8; // type:function size:0x44 scope:global +GetCentsFromPitchMult__11NFSMixShapef = .text:0x800F122C; // type:function size:0xD4 scope:global +GetIntPitchMultFromCents__11NFSMixShapei = .text:0x800F1300; // type:function size:0x5C scope:global +GetPitchMultFromCents__11NFSMixShapei = .text:0x800F135C; // type:function size:0xF0 scope:global +GetQ15FromHundredthsdB__11NFSMixShapei = .text:0x800F144C; // type:function size:0x7C scope:global +GetdBFromQ15__11NFSMixShapei = .text:0x800F14C8; // type:function size:0x104 scope:global +GetFloatFromHundredthsdB__11NFSMixShapei = .text:0x800F15CC; // type:function size:0x50 scope:global +GetCurveOutput__11NFSMixShape11eMIXTABLEIDib = .text:0x800F161C; // type:function size:0x248 scope:global +GetAzimShapeOutput__11NFSMixShape11eMIXTABLEIDT1Pii = .text:0x800F1864; // type:function size:0x7C scope:global +reserve__Q24_STLt6vector2ZP8WTriggerZQ33UTL3Stdt9Allocator2ZP8WTriggerZ12_type_vectorUi = .text:0x800F18E0; // type:function size:0x11C scope:global +clear__Q24_STLt10_List_base2ZP11WorldObjectZQ33UTL3Stdt9Allocator2ZP11WorldObjectZ10_type_list = .text:0x800F19FC; // type:function size:0x78 scope:global +__adjust_heap__H4ZPUiZiZUiZPFUiUi_b_4_STLX01X11X11X21X31_v = .text:0x800F1A74; // type:function size:0x118 scope:global +make_heap__H2ZPUiZPFUiUi_b_4_STLX01X01X11_v = .text:0x800F1B8C; // type:function size:0x78 scope:global +pop_heap__H2ZPUiZPFUiUi_b_4_STLX01X01X11_v = .text:0x800F1C04; // type:function size:0x40 scope:global +__partial_sort__H3ZPUiZUiZPFUiUi_b_4_STLX01X01X01PX11X21_v = .text:0x800F1C44; // type:function size:0xBC scope:global +partial_sort__H2ZPUiZPFUiUi_b_4_STLX01X01X01X11_v = .text:0x800F1D00; // type:function size:0x28 scope:global +__unguarded_partition__H3ZPUiZUiZPFUiUi_b_4_STLX01X01X11X21_X01 = .text:0x800F1D28; // type:function size:0x9C scope:global +__introsort_loop__H4ZPUiZUiZiZPFUiUi_b_4_STLX01X01PX11X21X31_v = .text:0x800F1DC4; // type:function size:0x158 scope:global +__unguarded_linear_insert__H3ZPUiZUiZPFUiUi_b_4_STLX01X11X21_v = .text:0x800F1F1C; // type:function size:0x60 scope:global +__insertion_sort__H2ZPUiZPFUiUi_b_4_STLX01X01X11_v = .text:0x800F1F7C; // type:function size:0xA4 scope:global +__unguarded_insertion_sort_aux__H3ZPUiZUiZPFUiUi_b_4_STLX01X01PX11X21_v = .text:0x800F2020; // type:function size:0x54 scope:global +__final_insertion_sort__H2ZPUiZPFUiUi_b_4_STLX01X01X11_v = .text:0x800F2074; // type:function size:0x6C scope:global +sort__H2ZPUiZPFUiUi_b_4_STLX01X01X11_v = .text:0x800F20E0; // type:function size:0x84 scope:global +find__H2ZP17EngineMappingPairZ17EngineMappingPair_4_STLX01X01RCX11_X01 = .text:0x800F2164; // type:function size:0x1A0 scope:global +__static_initialization_and_destruction_0 = .text:0x800F2304; // type:function size:0xBE0 scope:local +ClassKey__Q36Attrib3Gen11audioimpact = .text:0x800F2EE4; // type:function size:0xC scope:global +ClassKey__Q36Attrib3Gen8pvehicle = .text:0x800F2EF0; // type:function size:0xC scope:global +_GetKind__16MAudioReflection = .text:0x800F2EFC; // type:function size:0x64 scope:global +PreLoadAssets__11CSTATE_Base = .text:0x800F2F60; // type:function size:0x4 scope:global +GetController__7SndBasei = .text:0x800F2F64; // type:function size:0x8 scope:global +AttachController__7SndBaseP6SFXCTL = .text:0x800F2F6C; // type:function size:0x4 scope:global +SetupLoadData__7SndBase = .text:0x800F2F70; // type:function size:0x34 scope:global +InitSFX__7SndBase = .text:0x800F2FA4; // type:function size:0x18 scope:global +Destroy__7SndBase = .text:0x800F2FBC; // type:function size:0x4 scope:global +UpdateParams__7SndBasef = .text:0x800F2FC0; // type:function size:0x4 scope:global +ProcessUpdate__7SndBase = .text:0x800F2FC4; // type:function size:0x4 scope:global +Detach__7SndBase = .text:0x800F2FC8; // type:function size:0x4 scope:global +UpdateMixerOutputs__7SndBase = .text:0x800F2FCC; // type:function size:0x4 scope:global +_._8SFX_Base = .text:0x800F2FD0; // type:function size:0x58 scope:global +Debug__17CARSFX_EngineBase = .text:0x800F3028; // type:function size:0x4 scope:global +ClassKey__Q36Attrib3Gen8turbosfx = .text:0x800F302C; // type:function size:0xC scope:global +PreLoadAssets__6EAXCar = .text:0x800F3038; // type:function size:0x4 scope:global +ProcessSoundSphere__6EAXCarUiiP8bVector3f = .text:0x800F303C; // type:function size:0x4 scope:global +UpdateCarPhysics__6EAXCar = .text:0x800F3040; // type:function size:0x4 scope:global +StartHonkHorn__6EAXCar = .text:0x800F3044; // type:function size:0x4 scope:global +StopHonkHorn__6EAXCar = .text:0x800F3048; // type:function size:0x4 scope:global +IsHonking__6EAXCar = .text:0x800F304C; // type:function size:0x8 scope:global +GetEngineUpgradeLevel__6EAXCar = .text:0x800F3054; // type:function size:0x8 scope:global +_._14ISndAttachable = .text:0x800F305C; // type:function size:0x140 scope:global +__14ISndAttachable = .text:0x800F319C; // type:function size:0x170 scope:global +_._21SFXCTL_3DLeftWheelPos = .text:0x800F330C; // type:function size:0x58 scope:global +_._22SFXCTL_3DRightWheelPos = .text:0x800F3364; // type:function size:0x58 scope:global +_._21SFXCTL_3DRightWindPos = .text:0x800F33BC; // type:function size:0x58 scope:global +_._20SFXCTL_3DLeftWindPos = .text:0x800F3414; // type:function size:0x58 scope:global +_._19SFXCTL_3DTrafficPos = .text:0x800F346C; // type:function size:0x4C scope:global +_._16CARSFX_TruckHorn = .text:0x800F34B8; // type:function size:0x4C scope:global +GetController__16CARSFX_TruckHorni = .text:0x800F3504; // type:function size:0x8 scope:global +_._20SFXCTL_3DFountainPos = .text:0x800F350C; // type:function size:0x58 scope:global +_._17SFXCTL_3DWooshPos = .text:0x800F3564; // type:function size:0x58 scope:global +GetController__16SFXObj_NISStreami = .text:0x800F35BC; // type:function size:0x8 scope:global +AttachController__16SFXObj_NISStreamP6SFXCTL = .text:0x800F35C4; // type:function size:0x4 scope:global +ProcessUpdate__16SFXObj_NISStream = .text:0x800F35C8; // type:function size:0x4 scope:global +_._18SFXCTL_3DMomentPos = .text:0x800F35CC; // type:function size:0x4C scope:global +Clear__Q213SFXObj_Reverb15ReverbStructure = .text:0x800F3618; // type:function size:0x10 scope:global +_._19SFXCTL_3DTrailerPos = .text:0x800F3628; // type:function size:0x4C scope:global +GetController__15SFXObj_Ambiencei = .text:0x800F3674; // type:function size:0x8 scope:global +AttachController__15SFXObj_AmbienceP6SFXCTL = .text:0x800F367C; // type:function size:0x4 scope:global +ProcessUpdate__15SFXObj_Ambience = .text:0x800F3680; // type:function size:0x4 scope:global +InitSFX__10SFX_Common = .text:0x800F3684; // type:function size:0x4 scope:global +ProcessUpdate__13SFXObj_Speech = .text:0x800F3688; // type:function size:0x4 scope:global +_._22SFXCTL_3DVoiceActorPos = .text:0x800F368C; // type:function size:0x4C scope:global +GetController__12SFXObj_FEHUDi = .text:0x800F36D8; // type:function size:0x8 scope:global +AttachController__12SFXObj_FEHUDP6SFXCTL = .text:0x800F36E0; // type:function size:0x4 scope:global +_._17SFXObj_Pathfinder = .text:0x800F36E4; // type:function size:0x58 scope:global +push_back__Q23UTLt6Vector2ZP14ISndAttachablei16RCP14ISndAttachable = .text:0x800F373C; // type:function size:0x154 scope:global +GetPosition__11WorldObject = .text:0x800F3890; // type:function size:0x8 scope:global +GetType__11WorldObject = .text:0x800F3898; // type:function size:0x8 scope:global +_._16SFXCTL_3DRearPos = .text:0x800F38A0; // type:function size:0x58 scope:global +_._Q23UTLt11FixedVector3ZUii8i16 = .text:0x800F38F8; // type:function size:0xB4 scope:global +push_back__Q23UTLt6Vector2ZUii16RCUi = .text:0x800F39AC; // type:function size:0x154 scope:global +push_back__Q23UTLt6Vector2ZQ218CSTATEMGR_CarState14EngToCarStructi16RCQ218CSTATEMGR_CarState14EngToCarStruct = .text:0x800F3B00; // type:function size:0x158 scope:global +push_back__Q23UTLt6Vector2Z17EngineMappingPairi16RC17EngineMappingPair = .text:0x800F3C58; // type:function size:0x158 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z10MMiscSoundZ10SFX_CommonZ10SFX_CommonPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800F3DB0; // type:function size:0x88 scope:global +_._14GinsuSynthData = .text:0x800F3E38; // type:function size:0x44 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z16MAudioReflectionZ18CARSFX_PreColWooshZ18CARSFX_PreColWooshPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800F3E7C; // type:function size:0x88 scope:global +ClassKey__Q36Attrib3Gen15aud_moment_strm = .text:0x800F3F04; // type:function size:0xC scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z18MControlPathfinderZ15SFXObj_PFEATraxZ15SFXObj_PFEATraxPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800F3F10; // type:function size:0x88 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z11MPerpBustedZ15SFXObj_PFEATraxZ15SFXObj_PFEATraxPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800F3F98; // type:function size:0x88 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z15MGamePlayMomentZ17SFXObj_MomentStrmZ17SFXObj_MomentStrmPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800F4020; // type:function size:0x88 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z15MPursuitBreakerZ17SFXObj_MomentStrmZ17SFXObj_MomentStrmPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x800F40A8; // type:function size:0x88 scope:global +_._Q23UTLt6Vector2ZQ217SFXObj_MomentStrm18stMomentDecriptioni16 = .text:0x800F4130; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZQ217SFXObj_MomentStrm18stMomentDecriptioni64i16 = .text:0x800F4164; // type:function size:0xB4 scope:global +GetGrowSize__CQ23UTLt6Vector2ZQ217SFXObj_MomentStrm18stMomentDecriptioni16Ui = .text:0x800F4218; // type:function size:0x20 scope:global +OnGrowRequest__Q23UTLt6Vector2ZQ217SFXObj_MomentStrm18stMomentDecriptioni16Ui = .text:0x800F4238; // type:function size:0x4 scope:global +push_back__Q23UTLt6Vector2ZQ217SFXObj_MomentStrm18stMomentDecriptioni16RCQ217SFXObj_MomentStrm18stMomentDecription = .text:0x800F423C; // type:function size:0x170 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZUii8i16UiUi = .text:0x800F43AC; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZUii8i16PUiUi = .text:0x800F43B4; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZUii8i16Ui = .text:0x800F43B8; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZUii8i16 = .text:0x800F43C0; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZQ217SFXObj_MomentStrm18stMomentDecriptioni64i16UiUi = .text:0x800F43C8; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZQ217SFXObj_MomentStrm18stMomentDecriptioni64i16PQ217SFXObj_MomentStrm18stMomentDecriptionUi = .text:0x800F43D0; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZQ217SFXObj_MomentStrm18stMomentDecriptioni64i16Ui = .text:0x800F43D4; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZQ217SFXObj_MomentStrm18stMomentDecriptioni64i16 = .text:0x800F43DC; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZQ217SFXObj_MomentStrm18stMomentDecriptioni16 = .text:0x800F43E4; // type:function size:0xC scope:global +_._Q43UTL11Collectionst8Listable2Z14ISndAttachablei15_4List = .text:0x800F43F0; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP14ISndAttachablei16Ui = .text:0x800F44A4; // type:function size:0x4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZQ218CSTATEMGR_CarState14EngToCarStructi16Ui = .text:0x800F44A8; // type:function size:0x4 scope:global +OnGrowRequest__Q23UTLt6Vector2Z17EngineMappingPairi16Ui = .text:0x800F44AC; // type:function size:0x4 scope:global +_._Q23UTLt11FixedVector3ZQ218CSTATEMGR_CarState14EngToCarStructi24i16 = .text:0x800F44B0; // type:function size:0xB4 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZQ218CSTATEMGR_CarState14EngToCarStructi24i16UiUi = .text:0x800F4564; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZQ218CSTATEMGR_CarState14EngToCarStructi24i16PQ218CSTATEMGR_CarState14EngToCarStructUi = .text:0x800F456C; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZQ218CSTATEMGR_CarState14EngToCarStructi24i16Ui = .text:0x800F4570; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZQ218CSTATEMGR_CarState14EngToCarStructi24i16 = .text:0x800F4578; // type:function size:0x8 scope:global +_._Q23UTLt11FixedVector3Z17EngineMappingPairi24i16 = .text:0x800F4580; // type:function size:0xB4 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3Z17EngineMappingPairi24i16UiUi = .text:0x800F4634; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3Z17EngineMappingPairi24i16P17EngineMappingPairUi = .text:0x800F463C; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3Z17EngineMappingPairi24i16Ui = .text:0x800F4640; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3Z17EngineMappingPairi24i16 = .text:0x800F4648; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP14ISndAttachablei15i16UiUi = .text:0x800F4650; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP14ISndAttachablei15i16PP14ISndAttachableUi = .text:0x800F4658; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP14ISndAttachablei15i16Ui = .text:0x800F465C; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP14ISndAttachablei15i16 = .text:0x800F4664; // type:function size:0x8 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP14ISndAttachablei16Ui = .text:0x800F466C; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2ZQ218CSTATEMGR_CarState14EngToCarStructi16Ui = .text:0x800F468C; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2Z17EngineMappingPairi16Ui = .text:0x800F46AC; // type:function size:0x20 scope:global +_._Q23UTLt6Vector2ZP14ISndAttachablei16 = .text:0x800F46CC; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP14ISndAttachablei15i16 = .text:0x800F4700; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2Z17EngineMappingPairi16 = .text:0x800F47B4; // type:function size:0x34 scope:global +_._Q23UTLt6Vector2ZQ218CSTATEMGR_CarState14EngToCarStructi16 = .text:0x800F47E8; // type:function size:0x34 scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZQ218CSTATEMGR_CarState14EngToCarStructi16 = .text:0x800F481C; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2Z17EngineMappingPairi16 = .text:0x800F4828; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP14ISndAttachablei16 = .text:0x800F4834; // type:function size:0xC scope:global +_GLOBAL_.I._6EAXCar.g_ShiftInfo = .text:0x800F4840; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x800F486C; // type:label scope:local +eInitEngine__Fv = .text:0x800F486C; // type:function size:0x78 scope:global +ePreDisplay__Fv = .text:0x800F48E4; // type:function size:0xF0 scope:global +ePostDisplay__Fv = .text:0x800F49D4; // type:function size:0x38 scope:global +eNotifyTextureLoading__FP11TexturePackP11TextureInfob = .text:0x800F4A0C; // type:function size:0x3C scope:global +eFixUpTables__Fv = .text:0x800F4A48; // type:function size:0x6C scope:global +eAllocateFrameMallocBuffers__FUi = .text:0x800F4AB4; // type:function size:0x74 scope:global +eSwapFrameMallocBuffers__Fv = .text:0x800F4B28; // type:function size:0xD0 scope:global +SetupSceneryCullInfo__FP5eViewR15SceneryCullInfoi = .text:0x800F4BF8; // type:function size:0xD0 scope:global +eSwapDynamicFrameMemory__Fv = .text:0x800F4CC8; // type:function size:0x4 scope:global +eGetOtherEcstacyTexture__FUi = .text:0x800F4CCC; // type:function size:0x54 scope:global +eIsWidescreen__Fv = .text:0x800F4D20; // type:function size:0x8 scope:global +InitStreamingPacks__Fv = .text:0x800F4D28; // type:function size:0x60 scope:global +PrintStreamingPackMemoryWarning__FPCcii = .text:0x800F4D88; // type:function size:0x28 scope:global +ScanHashTableKey32__FUiPviii = .text:0x800F4DB0; // type:function size:0xB0 scope:global +ScanHashTableKey8__FUcPviii = .text:0x800F4E60; // type:function size:0xB0 scope:global +GetHeaderMemoryEntries__14eStreamingPackPPvi = .text:0x800F4F10; // type:function size:0x40 scope:global +__17eStreamPackLoaderiPFP6bChunkP15eStreamingEntryP14eStreamingPack_vT2PFP37eStreamingPackHeaderLoadingInfoPhase1_vPFP37eStreamingPackHeaderLoadingInfoPhase2_vPFP14eStreamingPack_v = .text:0x800F4F50; // type:function size:0x40 scope:global +GetMemoryEntries__17eStreamPackLoaderPUiiPPvi = .text:0x800F4F90; // type:function size:0x8C scope:global +GetLoadedStreamingPack__17eStreamPackLoaderPCc = .text:0x800F501C; // type:function size:0x88 scope:global +GetLoadedStreamingPack__17eStreamPackLoaderUi = .text:0x800F50A4; // type:function size:0x8C scope:global +GetStreamingEntry__17eStreamPackLoaderUiP14eStreamingPack = .text:0x800F5130; // type:function size:0x54 scope:global +GetStreamingEntry__17eStreamPackLoaderUi = .text:0x800F5184; // type:function size:0x60 scope:global +GetAlignedChunkDataPtr__17eStreamPackLoaderPUc = .text:0x800F51E4; // type:function size:0x14 scope:global +GetStreamPackLoadingTable__17eStreamPackLoader = .text:0x800F51F8; // type:function size:0x4C scope:global +InternalLoadedStreamingEntryCallback__17eStreamPackLoaderPviT1 = .text:0x800F5244; // type:function size:0x1F0 scope:global +InternalLoadStreamingEntry__17eStreamPackLoaderP23eStreamingPackLoadTableP14eStreamingPackP15eStreamingEntry = .text:0x800F5434; // type:function size:0x1B8 scope:global +eStreamPackLoaderSortLoadEntries__FP24eStreamPackLoadEntryInfoT0 = .text:0x800F55EC; // type:function size:0x40 scope:global +LoadStreamingEntry__17eStreamPackLoaderPUiiPFPv_vPvi = .text:0x800F562C; // type:function size:0x1C4 scope:global +InternalUnloadStreamingEntry__17eStreamPackLoaderP14eStreamingPackP15eStreamingEntry = .text:0x800F57F0; // type:function size:0xA0 scope:global +UnloadStreamingEntry__17eStreamPackLoaderUiP14eStreamingPack = .text:0x800F5890; // type:function size:0xA8 scope:global +UnloadStreamingEntry__17eStreamPackLoaderPUii = .text:0x800F5938; // type:function size:0x5C scope:global +UnloadAllStreamingEntries__17eStreamPackLoaderPCc = .text:0x800F5994; // type:function size:0x7C scope:global +IsLoading__17eStreamPackLoaderPCc = .text:0x800F5A10; // type:function size:0x90 scope:global +TestLoadStreamingEntry__17eStreamPackLoaderPUiiib = .text:0x800F5AA0; // type:function size:0x32C scope:global +DefragmentAllocation__17eStreamPackLoaderPv = .text:0x800F5DCC; // type:function size:0x108 scope:global +WaitForLoadingToFinish__17eStreamPackLoaderPCc = .text:0x800F5ED4; // type:function size:0x5C scope:global +CreateStreamingPack__17eStreamPackLoaderPCcPFPv_vPvi = .text:0x800F5F30; // type:function size:0x174 scope:global +InternalLoadingHeaderPhase1Callback__17eStreamPackLoaderPviT1 = .text:0x800F60A4; // type:function size:0x140 scope:global +InternalLoadingHeaderPhase2Callback__17eStreamPackLoaderPviT1 = .text:0x800F61E4; // type:function size:0x134 scope:global +InternalLoadingHeaderPhase3Callback__17eStreamPackLoaderPv = .text:0x800F6318; // type:function size:0x60 scope:global +DeleteStreamingPack__17eStreamPackLoaderPCc = .text:0x800F6378; // type:function size:0xD4 scope:global +AddReplacementTextureTableFixup__FP24eReplacementTextureTablei = .text:0x800F644C; // type:function size:0x80 scope:global +RemoveReplacementTextureTableFixup__FP24eReplacementTextureTable = .text:0x800F64CC; // type:function size:0x60 scope:global +eFixupReplacementTextureTables__Fv = .text:0x800F652C; // type:function size:0x9C scope:global +eFixupReplacementTexturesAfterUnloading__FP11TextureInfo = .text:0x800F65C8; // type:function size:0x74 scope:global +Init__6eModelUi = .text:0x800F663C; // type:function size:0x58 scope:global +UnInit__6eModel = .text:0x800F6694; // type:function size:0x74 scope:global +ReconnectSolid__6eModelP16eSolidListHeader = .text:0x800F6708; // type:function size:0x44 scope:global +ConnectSolid__6eModelP6eSolid = .text:0x800F674C; // type:function size:0x70 scope:global +AttachReplacementTextureTable__6eModelP24eReplacementTextureTableii = .text:0x800F67BC; // type:function size:0x54 scope:global +RestoreReplacementTextureTable__6eModelPPP11TextureInfo = .text:0x800F6810; // type:function size:0x68 scope:global +ApplyReplacementTextureTable__6eModelPPP11TextureInfo = .text:0x800F6878; // type:function size:0x130 scope:global +GetBoundingBox__6eModelP8bVector3T1 = .text:0x800F69A8; // type:function size:0x58 scope:global +GetPivotPosition__6eModel = .text:0x800F6A00; // type:function size:0x1C scope:global +GetPivotMatrix__6eModel = .text:0x800F6A1C; // type:function size:0x1C scope:global +ReplaceLightMaterial__6eModelUiP14eLightMaterial = .text:0x800F6A38; // type:function size:0x2C scope:global +GetPostionMarker__6eModelP15ePositionMarker = .text:0x800F6A64; // type:function size:0x34 scope:global +GetPostionMarker__6eModelUi = .text:0x800F6A98; // type:function size:0x34 scope:global +eInitModels__Fv = .text:0x800F6ACC; // type:function size:0x3C scope:global +NotifySolidLoader__FP16eSolidListHeader = .text:0x800F6B08; // type:function size:0x104 scope:global +NotifySolidUnloader__FP6eSolid = .text:0x800F6C0C; // type:function size:0x128 scope:global +eSmoothNormals__FPP6eModeli = .text:0x800F6D34; // type:function size:0xA8 scope:global +GetBoundingBox__6eSolidP8bVector3T1 = .text:0x800F6DDC; // type:function size:0x34 scope:global +FixTextureTable__6eSolid = .text:0x800F6E10; // type:function size:0x88 scope:global +FixLightMaterialTable__6eSolid = .text:0x800F6E98; // type:function size:0x60 scope:global +EmptySolidTextureFixupInfo__FP16eSolidListHeader = .text:0x800F6EF8; // type:function size:0x94 scope:global +RebuildSolidTextureFixupInfo__FP16eSolidListHeader = .text:0x800F6F8C; // type:function size:0x194 scope:global +eSolidNotifyTextureMoving__FP11TexturePackP11TextureInfo = .text:0x800F7120; // type:function size:0xFC scope:global +eSolidNotifyTextureLoading__FP11TexturePackP11TextureInfob = .text:0x800F721C; // type:function size:0x2A4 scope:global +NotifyTextureLoading__6eSolidP11TexturePack = .text:0x800F74C0; // type:function size:0xA0 scope:global +NotifyTextureUnloading__6eSolidP11TexturePack = .text:0x800F7560; // type:function size:0x9C scope:global +NotifyTextureMoving__6eSolidP11TexturePack = .text:0x800F75FC; // type:function size:0x58 scope:global +NotifyTextureMoving__6eSolidP11TexturePackP11TextureInfo = .text:0x800F7654; // type:function size:0x54 scope:global +ReplaceLightMaterial__6eSolidUiP14eLightMaterial = .text:0x800F76A8; // type:function size:0x44 scope:global +GetPostionMarker__6eSolidP15ePositionMarker = .text:0x800F76EC; // type:function size:0x5C scope:global +GetPostionMarker__6eSolidUi = .text:0x800F7748; // type:function size:0x58 scope:global +SmoothNormals__6eSolidPP13eSmoothVertexi = .text:0x800F77A0; // type:function size:0x290 scope:global +eSmoothNormals__FPP6eSolidi = .text:0x800F7A30; // type:function size:0x1B4 scope:global +InternalLoaderSolidHeaderChunks__FP6bChunk = .text:0x800F7BE4; // type:function size:0x1E0 scope:global +InternalLoaderSolidChunks__FP6bChunkP16eSolidListHeader = .text:0x800F7DC4; // type:function size:0x628 scope:global +InternalUnloaderSolidHeaderChunks__FP6bChunk = .text:0x800F83EC; // type:function size:0xF0 scope:global +InternalUnloaderSolidChunks__FP6bChunkP16eSolidListHeader = .text:0x800F84DC; // type:function size:0x1E4 scope:global +LoaderSolidList__FP6bChunk = .text:0x800F86C0; // type:function size:0xD4 scope:global +UnloaderSolidList__FP6bChunk = .text:0x800F8794; // type:function size:0xB4 scope:global +SolidLoadedStreamingEntryCallback__FP6bChunkP15eStreamingEntryP14eStreamingPack = .text:0x800F8848; // type:function size:0x6C scope:global +SolidUnloadedStreamingEntryCallback__FP6bChunkP15eStreamingEntryP14eStreamingPack = .text:0x800F88B4; // type:function size:0x48 scope:global +eLoadStreamingSolid__FPUiiPFPv_vPvi = .text:0x800F88FC; // type:function size:0x4C scope:global +eUnloadStreamingSolid__FPUii = .text:0x800F8948; // type:function size:0x30 scope:global +eWaitForStreamingSolidPackLoading__FPCc = .text:0x800F8978; // type:function size:0x2C scope:global +eLoadStreamingSolidPack__FPCcPFPv_vPvi = .text:0x800F89A4; // type:function size:0x50 scope:global +SolidLoadingStreamingPackPhase1__FP37eStreamingPackHeaderLoadingInfoPhase1 = .text:0x800F89F4; // type:function size:0x68 scope:global +SolidLoadingStreamingPackPhase2__FP37eStreamingPackHeaderLoadingInfoPhase2 = .text:0x800F8A5C; // type:function size:0x8C scope:global +eUnloadStreamingSolidPack__FPCc = .text:0x800F8AE8; // type:function size:0x2C scope:global +SolidUnloadingStreamingPack__FP14eStreamingPack = .text:0x800F8B14; // type:function size:0x24 scope:global +eInitSolids__Fv = .text:0x800F8B38; // type:function size:0x34 scope:global +GetSolidIndexEntry__FP16eSolidListHeaderUi = .text:0x800F8B6C; // type:function size:0x44 scope:global +eFindSolid__FUi = .text:0x800F8BB0; // type:function size:0x24 scope:global +eFindSolid__FUiP16eSolidListHeader = .text:0x800F8BD4; // type:function size:0x110 scope:global +LoaderLights__FP6bChunk = .text:0x800F8CE4; // type:function size:0x578 scope:global +UnloaderLights__FP6bChunk = .text:0x800F925C; // type:function size:0x1C0 scope:global +SetSelectCarLighting__Fifi = .text:0x800F941C; // type:function size:0x4 scope:global +SphericalToCartesian__FP8bVector3fff = .text:0x800F9420; // type:function size:0xF0 scope:global +CartesianToSpherical__FP8bVector3fff = .text:0x800F9510; // type:function size:0xFC scope:global +elRotateLightContext__FP20eDynamicLightContextT0P8bMatrix4 = .text:0x800F960C; // type:function size:0x1A4 scope:global +elSetupEnvMap__FP20eDynamicLightContextP8bMatrix4T1P8bVector4 = .text:0x800F97B0; // type:function size:0x214 scope:global +elResetLightContext__FP20eDynamicLightContext = .text:0x800F99C4; // type:function size:0x28 scope:global +elSetupLights__FP20eDynamicLightContextP15eShaperLightRigP8bVector3P8bMatrix4T3P5eView = .text:0x800F99EC; // type:function size:0x4E4 scope:global +elSetupLightContext__FP20eDynamicLightContextP15eShaperLightRigP8bMatrix4T2P8bVector4P5eView = .text:0x800F9ED0; // type:function size:0x94 scope:global +elCloneLightContext__FP20eDynamicLightContextP8bMatrix4T1P8bVector4P5eViewT0 = .text:0x800F9F64; // type:function size:0x58 scope:global +UpdateLightFlareParameters__Fv = .text:0x800F9FBC; // type:function size:0x20C scope:global +indep_fpow__Fff = .text:0x800FA1C8; // type:function size:0x20 scope:global +eGetNextLightFlareInPool__FUi = .text:0x800FA1E8; // type:function size:0x48 scope:global +eInitLightFlarePool__Fv = .text:0x800FA230; // type:function size:0x74 scope:global +eRenderLightFlarePool__FP5eView = .text:0x800FA2A4; // type:function size:0x1B8 scope:global +eResestLightFlarePool__Fv = .text:0x800FA45C; // type:function size:0xE4 scope:global +eLightUpdateTextures__Fv = .text:0x800FA540; // type:function size:0x5C scope:global +eRenderLightFlare__FP5eViewP11eLightFlareP8bMatrix4f19eLightReflexionType9flareTypefUif = .text:0x800FA59C; // type:function size:0xD1C scope:global +eRenderWorldLightFlares__FP5eView9flareType = .text:0x800FB2B8; // type:function size:0x128 scope:global +RestoreShaperRig__FP15eShaperLightRigUiT0 = .text:0x800FB3E0; // type:function size:0x88 scope:global +AddQuickDynamicLight__FP15eShaperLightRigUiffffP8bVector3 = .text:0x800FB468; // type:function size:0x64 scope:global +AdjustQuickDynamicLight__FP15eShaperLightRigP8bVector3 = .text:0x800FB4CC; // type:function size:0xC scope:global +BuildData__14eLightMaterial = .text:0x800FB4D8; // type:function size:0x20 scope:global +elGetLightMaterial__FUi = .text:0x800FB4F8; // type:function size:0x6C scope:global +elGetDefaultLightMaterial__Fv = .text:0x800FB564; // type:function size:0xC scope:global +elInit__Fv = .text:0x800FB570; // type:function size:0x38 scope:global +elBeginFrame__Fv = .text:0x800FB5A8; // type:function size:0x4 scope:global +__5eView = .text:0x800FB5AC; // type:function size:0x9C scope:global +GetVisibleState__5eViewPC8bVector3T1P8bMatrix4 = .text:0x800FB648; // type:function size:0x20 scope:global +GetVisibleState__5eViewP6eModelP8bMatrix4 = .text:0x800FB668; // type:function size:0x54 scope:global +GetPixelSize__5eViewff = .text:0x800FB6BC; // type:function size:0x48 scope:global +GetPixelSize__5eViewPC8bVector3f = .text:0x800FB704; // type:function size:0x10C scope:global +GetPixelSize__5eViewPC8bVector3T1 = .text:0x800FB810; // type:function size:0x190 scope:global +BiasMatrixForZSorting__5eViewP8bMatrix4f = .text:0x800FB9A0; // type:function size:0x124 scope:global +AttachCameraMover__5eViewP11CameraMover = .text:0x800FBAC4; // type:function size:0x38 scope:global +UnattachCameraMover__5eViewP11CameraMover = .text:0x800FBAFC; // type:function size:0x30 scope:global +eInitTextures__Fv = .text:0x800FBB2C; // type:function size:0x4C scope:global +SetDuplicateTextureWarning__Fi = .text:0x800FBB78; // type:function size:0xC scope:global +FindVRAMData__FUi = .text:0x800FBB84; // type:function size:0x34 scope:global +InternalLoadTexturePackHeaderChunks__FP6bChunk = .text:0x800FBBB8; // type:function size:0x300 scope:global +InternalUnloadTexturePackHeaderChunks__FP6bChunk = .text:0x800FBEB8; // type:function size:0x128 scope:global +InternalLoadVRAMDataChunks__FP6bChunk = .text:0x800FBFE0; // type:function size:0x8C scope:global +LoaderTexturePack__FP6bChunk = .text:0x800FC06C; // type:function size:0x274 scope:global +UnloaderTexturePack__FP6bChunk = .text:0x800FC2E0; // type:function size:0xD8 scope:global +__11TexturePackP17TexturePackHeaderiPCcT3 = .text:0x800FC3B8; // type:function size:0xCC scope:global +_._11TexturePack = .text:0x800FC484; // type:function size:0x64 scope:global +AttachTextureTable__11TexturePackP11TextureInfoP19TextureInfoPlatInfoi = .text:0x800FC4E8; // type:function size:0x74 scope:global +UnattachTextureTable__11TexturePackP11TextureInfoP19TextureInfoPlatInfoi = .text:0x800FC55C; // type:function size:0x74 scope:global +AttachTextureInfo__11TexturePackP11TextureInfoP19TextureInfoPlatInfoP17TextureIndexEntry = .text:0x800FC5D0; // type:function size:0xDC scope:global +UnattachTextureInfo__11TexturePackP11TextureInfoP19TextureInfoPlatInfoP17TextureIndexEntry = .text:0x800FC6AC; // type:function size:0x90 scope:global +AssignTextureData__11TexturePackPcii = .text:0x800FC73C; // type:function size:0x128 scope:global +UnAssignTextureData__11TexturePackii = .text:0x800FC864; // type:function size:0x144 scope:global +GetTextureIndexEntry__11TexturePackUi = .text:0x800FC9A8; // type:function size:0x54 scope:global +GetLoadedTexture__11TexturePackUi = .text:0x800FC9FC; // type:function size:0xA4 scope:global +GetTexture__11TexturePackUi = .text:0x800FCAA0; // type:function size:0x34 scope:global +eCreateTextureInfo__Fv = .text:0x800FCAD4; // type:function size:0x48 scope:global +eDestroyTextureInfo__FP11TextureInfo = .text:0x800FCB1C; // type:function size:0x48 scope:global +__15TextureAnimPackP11TexturePackP11TextureAnimP16TextureAnimEntryii = .text:0x800FCB64; // type:function size:0x74 scope:global +_._15TextureAnimPack = .text:0x800FCBD8; // type:function size:0xC0 scope:global +InitAnims__15TextureAnimPack = .text:0x800FCC98; // type:function size:0xC0 scope:global +UpdateTextureAnimations__Fv = .text:0x800FCD58; // type:function size:0x1D4 scope:global +TextureLoadedStreamingEntryCallback__FP6bChunkP15eStreamingEntryP14eStreamingPack = .text:0x800FCF2C; // type:function size:0x11C scope:global +TextureUnloadedStreamingEntryCallback__FP6bChunkP15eStreamingEntryP14eStreamingPack = .text:0x800FD048; // type:function size:0x124 scope:global +eLoadStreamingTexture__FPUiiPFPv_vPvi = .text:0x800FD16C; // type:function size:0x4C scope:global +eUnloadStreamingTexture__FPUii = .text:0x800FD1B8; // type:function size:0x30 scope:global +eWaitForStreamingTexturePackLoading__FPCc = .text:0x800FD1E8; // type:function size:0x2C scope:global +eUnloadAllStreamingTextures__FPCc = .text:0x800FD214; // type:function size:0x2C scope:global +eIsStreamingTexturePackLoaded__FPCc = .text:0x800FD240; // type:function size:0x3C scope:global +eLoadStreamingTexturePack__FPCcPFPv_vPvi = .text:0x800FD27C; // type:function size:0x50 scope:global +TextureLoadingStreamingPackPhase1__FP37eStreamingPackHeaderLoadingInfoPhase1 = .text:0x800FD2CC; // type:function size:0x68 scope:global +TextureLoadingStreamingPackPhase2__FP37eStreamingPackHeaderLoadingInfoPhase2 = .text:0x800FD334; // type:function size:0x74 scope:global +eUnloadStreamingTexturePack__FPCc = .text:0x800FD3A8; // type:function size:0x2C scope:global +TextureUnloadingStreamingPack__FP14eStreamingPack = .text:0x800FD3D4; // type:function size:0x24 scope:global +GetScroll__11TextureInfoffif = .text:0x800FD3F8; // type:function size:0xA4 scope:global +MaybePrintUnusedTextures__Fv = .text:0x800FD49C; // type:function size:0x4 scope:global +GetTextureInfo__FUiii = .text:0x800FD4A0; // type:function size:0x184 scope:global +FixupTextureInfo__FP11TextureInfoUiP11TexturePackb = .text:0x800FD624; // type:function size:0xBC scope:global +FixupTextureInfoNull__FP11TextureInfoUiP11TexturePackb = .text:0x800FD6E0; // type:function size:0x98 scope:global +LoaderSun__FP6bChunk = .text:0x800FD778; // type:function size:0x188 scope:global +SetCurrentSunInfo__FUi = .text:0x800FD900; // type:function size:0x13C scope:global +SetCurrentSunInfo__Fv = .text:0x800FDA3C; // type:function size:0x58 scope:global +UnloaderSun__FP6bChunk = .text:0x800FDA94; // type:function size:0x38 scope:global +SunTrackLoader__Fv = .text:0x800FDACC; // type:function size:0xA8 scope:global +SunTrackUnloader__Fv = .text:0x800FDB74; // type:function size:0x24 scope:global +RenderSunAsFlare__Fv = .text:0x800FDB98; // type:function size:0x28C scope:global +GetSunIntensity__FP5eView = .text:0x800FDE24; // type:function size:0x5C scope:global +GetSunPos__FP5eViewPfN21 = .text:0x800FDE80; // type:function size:0x98 scope:global +Add__11DefragFixerPvii = .text:0x800FDF18; // type:function size:0x84 scope:global +Fix__11DefragFixerPv = .text:0x800FDF9C; // type:function size:0x78 scope:global +IsRainDisabled__Fv = .text:0x800FE014; // type:function size:0x58 scope:global +SetParticleSystemStats__Fiiiiiiii = .text:0x800FE06C; // type:function size:0x3C scope:global +PrintParticleSystemStats__Fv = .text:0x800FE0A8; // type:function size:0x4 scope:global +cb_PreRetrace__FUl = .text:0x800FE0AC; // type:function size:0x4 scope:global +cb_PostRetrace__FUl = .text:0x800FE0B0; // type:function size:0x38 scope:global +eInitEnginePlat__Fv = .text:0x800FE0E8; // type:function size:0x48 scope:global +eSetDisplaySystem__Fi = .text:0x800FE130; // type:function size:0x68 scope:global +InitSlotPools__Fv = .text:0x800FE198; // type:function size:0x4C scope:global +epInitViews__Fv = .text:0x800FE1E4; // type:function size:0x204 scope:global +eGetCurrentViewMode__Fv = .text:0x800FE3E8; // type:function size:0xC scope:global +eUpdateViewMode__Fv = .text:0x800FE3F4; // type:function size:0x14C scope:global +MaybeChangeViewMode__Fv = .text:0x800FE540; // type:function size:0x4D4 scope:global +eFixUpTablesPlat__Fv = .text:0x800FEA14; // type:function size:0xD0 scope:global +EnvMapTextureLoadedCallback__Fi = .text:0x800FEAE4; // type:function size:0x80 scope:global +eInitFEEnvMapPlat__Fv = .text:0x800FEB64; // type:function size:0x90 scope:global +eRemoveFEEnvMapPlat__Fv = .text:0x800FEBF4; // type:function size:0x12C scope:global +SetupSceneryCullInfoPlat__FP5eViewR15SceneryCullInfo = .text:0x800FED20; // type:function size:0x40 scope:global +eClampTopLeft__Fbi = .text:0x800FED60; // type:function size:0x8 scope:global +__5ePoly = .text:0x800FED68; // type:function size:0xA4 scope:global +IsSunInFrustrum__FP5eView = .text:0x800FEE0C; // type:function size:0xFC scope:global +eDisplayFrame__Fv = .text:0x800FEF08; // type:function size:0xCE4 scope:global +eGetScreenWidth__Fv = .text:0x800FFBEC; // type:function size:0xC scope:global +eGetScreenHeight__Fv = .text:0x800FFBF8; // type:function size:0xC scope:global +GetTextureInfo__13eRenderTarget = .text:0x800FFC04; // type:function size:0x18 scope:global +eGetRenderTargetTextureInfo__Fi = .text:0x800FFC1C; // type:function size:0x54 scope:global +eGetCurrentRenderTarget__Fv = .text:0x800FFC70; // type:function size:0xC scope:global +eSetCurrentRenderTarget__FP13eRenderTarget = .text:0x800FFC7C; // type:function size:0x230 scope:global +eGetRenderTarget__Fi = .text:0x800FFEAC; // type:function size:0x14 scope:global +eWaitUntilRenderingDone__Fv = .text:0x800FFEC0; // type:function size:0x54 scope:global +CalculateH__FUs = .text:0x800FFF14; // type:function size:0x70 scope:global +CreateViewMatricies__FP5eViewfff = .text:0x800FFF84; // type:function size:0x688 scope:global +SetScreenBuffers__Fv = .text:0x8010060C; // type:function size:0x5C4 scope:global +epRenderStrips__FP5eViewP6eSolidP8bMatrix4P13eLightContextUiT2 = .text:0x80100BD0; // type:function size:0x470 scope:global +FEBeginBatchRender__18eViewPlatInterfacei = .text:0x80101040; // type:function size:0x10 scope:global +FEEndBatchRender__18eViewPlatInterface = .text:0x80101050; // type:function size:0x10 scope:global +Render__18eViewPlatInterfaceP6eModelP8bMatrix4P13eLightContextUiT2 = .text:0x80101060; // type:function size:0xBC scope:global +Render__18eViewPlatInterfaceP5ePolyP11TextureInfoP8bMatrix4if = .text:0x8010111C; // type:function size:0x74 scope:global +FERender__18eViewPlatInterfaceP5ePolyP11TextureInfoT2i = .text:0x80101190; // type:function size:0x20 scope:global +Render__18eViewPlatInterfaceP5ePolyP11TextureInfoT2i = .text:0x801011B0; // type:function size:0x54 scope:global +FERender__18eViewPlatInterfaceP5ePolyP11TextureInfoi = .text:0x80101204; // type:function size:0x20 scope:global +Render__18eViewPlatInterfaceP5ePolyP11TextureInfoi = .text:0x80101224; // type:function size:0x584 scope:global +DisplayRVMs__FP5eView = .text:0x801017A8; // type:function size:0x184 scope:global +eFacePixelate__FP5eView = .text:0x8010192C; // type:function size:0x38C scope:global +eDisplayLetterBoxes__Fv = .text:0x80101CB8; // type:function size:0x264 scope:global +eDisplaySafezone__Fv = .text:0x80101F1C; // type:function size:0xC scope:global +eInitGX__Fv = .text:0x80101F28; // type:function size:0xA4 scope:global +__InitRenderMode__Fv = .text:0x80101FCC; // type:function size:0x258 scope:global +__InitMem__Fv = .text:0x80102224; // type:function size:0x78 scope:global +__InitGXlite__Fv = .text:0x8010229C; // type:function size:0x154 scope:global +__InitGX__Fv = .text:0x801023F0; // type:function size:0x280 scope:global +__InitVI__Fv = .text:0x80102670; // type:function size:0x60 scope:global +__InitMatrices__Fv = .text:0x801026D0; // type:function size:0x1FC scope:global +eRecalculateOthographicProjection__Fif = .text:0x801028CC; // type:function size:0x2CC scope:global +eSetOrthographicScreenQuadProjection__FP13eRenderTarget = .text:0x80102B98; // type:function size:0xF8 scope:global +eSetOrthographicMatrixToHW__Fv = .text:0x80102C90; // type:function size:0x44 scope:global +eBeginScene__Fv = .text:0x80102CD4; // type:function size:0x26C scope:global +eEndScene__Fv = .text:0x80102F40; // type:function size:0x68 scope:global +VIAdvanceFrame__Fv = .text:0x80102FA8; // type:function size:0x84 scope:global +eCopyDisp__FUc = .text:0x8010302C; // type:function size:0x74 scope:global +eDLSaveContext__FUc = .text:0x801030A0; // type:function size:0x54 scope:global +eSetBackgroundColor__FG8_GXColor = .text:0x801030F4; // type:function size:0x34 scope:global +eSetPixelFormat__Fii = .text:0x80103128; // type:function size:0x7C scope:global +eSetScissor__Fiiii = .text:0x801031A4; // type:function size:0xA8 scope:global +eSetCopyFilter__F9FILTER_IDi = .text:0x8010324C; // type:function size:0x48 scope:global +eDrawStartup__Fv = .text:0x80103294; // type:function size:0x64 scope:global +eExStartup__Fv = .text:0x801032F8; // type:function size:0x194 scope:global +eWaitRetrace__FUi = .text:0x8010348C; // type:function size:0x60 scope:global +sync_cb__FUs = .text:0x801034EC; // type:function size:0xC scope:global +eEmitSync__FUc = .text:0x801034F8; // type:function size:0x50 scope:global +cb_DrawDone__Fv = .text:0x80103548; // type:function size:0x10 scope:global +eSendDrawDone__FUc = .text:0x80103558; // type:function size:0x44 scope:global +eIsDrawDone__Fv = .text:0x8010359C; // type:function size:0xC scope:global +IsSyncValid__Fv = .text:0x801035A8; // type:function size:0x58 scope:local +eWaitDrawDone__Fv = .text:0x80103600; // type:function size:0xCC scope:global +KeepAlive__Fv = .text:0x801036CC; // type:function size:0xBC scope:local +eStallWorkaround__FUc = .text:0x80103788; // type:function size:0x54 scope:global +eDiagnoseHang__Fv = .text:0x801037DC; // type:function size:0xF8 scope:global +eHangMetric__FUc = .text:0x801038D4; // type:function size:0xB8 scope:global +eScreenQuadReplace__FP5eViewi = .text:0x8010398C; // type:function size:0x3F0 scope:global +eMotionBlurEffect__FP5eView = .text:0x80103D7C; // type:function size:0x88C scope:global +eRenderSky__FP5eView = .text:0x80104608; // type:function size:0x254 scope:global +eEURGB60ModeCheck__Fv = .text:0x8010485C; // type:function size:0x1E8 scope:global +eProgressiveScanModeCheck__Fv = .text:0x80104A44; // type:function size:0x21C scope:global +eProgressiveScan_EURGB60SetMode__Fii = .text:0x80104C60; // type:function size:0xEC scope:global +eProgressiveScan_EURGB60Proceed__Fi = .text:0x80104D4C; // type:function size:0x394 scope:global +eNTSCInterlace_PALSetMode__Fii = .text:0x801050E0; // type:function size:0xE8 scope:global +eNTSCInterlace_PALProceed__Fi = .text:0x801051C8; // type:function size:0x3A4 scope:global +eProgressiveScan_EURGB60DialogBox__Fi = .text:0x8010556C; // type:function size:0x738 scope:global +eDEMOInitROMFont__Fv = .text:0x80105CA4; // type:function size:0xD4 scope:global +eDEMODeleteROMFont__Fv = .text:0x80105D78; // type:function size:0x50 scope:global +eDrawFontChar__Fiiiii = .text:0x80105DC8; // type:function size:0x108 scope:local +eLoadSheet__FPv11_GXTexMapID = .text:0x80105ED0; // type:function size:0x140 scope:local +eDEMORFPuts__FsssPc = .text:0x80106010; // type:function size:0x1A4 scope:global +eDEMORFPrintf__FsssPce = .text:0x801061B4; // type:function size:0xC0 scope:global +eDEMOBeforeRender__Fv = .text:0x80106274; // type:function size:0x88 scope:global +eDEMODoneRender__Fv = .text:0x801062FC; // type:function size:0x4C scope:global +eDEMOSetupScrnSpc__Fllf = .text:0x80106348; // type:function size:0xB0 scope:global +eDEMOInitCaption__Flll = .text:0x801063F8; // type:function size:0x84 scope:global +eSetCulling__F11_GXCullMode = .text:0x8010647C; // type:function size:0x40 scope:global +eResetZBuffering__Fv = .text:0x801064BC; // type:function size:0x40 scope:global +eSetZBuffering__FUcUc = .text:0x801064FC; // type:function size:0x68 scope:global +eSetZCompLoc__FUc = .text:0x80106564; // type:function size:0x50 scope:global +eSetColourUpdate__FUcUc = .text:0x801065B4; // type:function size:0x7C scope:global +_alphaTestFunc__Fv = .text:0x80106630; // type:function size:0x74 scope:local +eSetAlphaTest__FUc = .text:0x801066A4; // type:function size:0x34 scope:global +eSetBlendMode__FP11TextureInfoUc = .text:0x801066D8; // type:function size:0x198 scope:global +eResetBlendMode__Fv = .text:0x80106870; // type:function size:0x50 scope:global +eSetBlendModeSrcInvSrc__Fv = .text:0x801068C0; // type:function size:0x54 scope:global +eSetBlendModeSrcAlphaOne__Fv = .text:0x80106914; // type:function size:0x50 scope:global +eSetBlendModeNone__Fv = .text:0x80106964; // type:function size:0x54 scope:global +__14cCaptureBuffer = .text:0x801069B8; // type:function size:0x34 scope:global +_._14cCaptureBuffer = .text:0x801069EC; // type:function size:0x4C scope:global +Init__14cCaptureBufferiiiiii = .text:0x80106A38; // type:function size:0x13C scope:global +Destroy__14cCaptureBuffer = .text:0x80106B74; // type:function size:0x58 scope:global +CaptureEFB__14cCaptureBufferii9_GXTexFmt = .text:0x80106BCC; // type:function size:0xC4 scope:global +AddHorizonFogEntryPOS__Ffff = .text:0x80106C90; // type:function size:0xA8 scope:global +AddHorizonFogEntryCLR__FUi = .text:0x80106D38; // type:function size:0x34 scope:global +AddHorizonFogEntryUVS__Fff = .text:0x80106D6C; // type:function size:0xA4 scope:global +GenerateHorizonFogDisplayList__FPPvPUl9_GXVtxFmt = .text:0x80106E10; // type:function size:0x31C scope:global +eInitHorizonFogDisplayList__Fv = .text:0x8010712C; // type:function size:0x34 scope:global +__10cSphereMap = .text:0x80107160; // type:function size:0x13C scope:global +_._10cSphereMap = .text:0x8010729C; // type:function size:0x8C scope:global +Init__10cSphereMapiiiiii = .text:0x80107328; // type:function size:0x20C scope:global +Destroy__10cSphereMap = .text:0x80107534; // type:function size:0xA8 scope:global +BuildSphereMap__10cSphereMap = .text:0x801075DC; // type:function size:0x5C scope:global +genSphere__10cSphereMapPPvPUlUs9_GXVtxFmt = .text:0x80107638; // type:function size:0x49C scope:global +clrSphere__10cSphereMapPPvPUl = .text:0x80107AD4; // type:function size:0x4 scope:global +genSphereMap__10cSphereMapPP9_GXTexObjP9_GXTexObjPvUl = .text:0x80107AD8; // type:function size:0x800 scope:global +__12cSpecularMap = .text:0x801082D8; // type:function size:0x64 scope:global +_._12cSpecularMap = .text:0x8010833C; // type:function size:0x8C scope:global +Init__12cSpecularMap = .text:0x801083C8; // type:function size:0x60 scope:global +__15cQuarterSizeMap = .text:0x80108428; // type:function size:0x58 scope:global +_._15cQuarterSizeMap = .text:0x80108480; // type:function size:0x60 scope:global +Init__15cQuarterSizeMapiii = .text:0x801084E0; // type:function size:0x78 scope:global +eSetFogConstantZero__Fv = .text:0x80108558; // type:function size:0x64 scope:global +eSetFogConstantColour__Fv = .text:0x801085BC; // type:function size:0x154 scope:global +eSetupFog__FP5eView = .text:0x80108710; // type:function size:0x184 scope:global +eSetFogEnable__Fi = .text:0x80108894; // type:function size:0xC8 scope:global +eSetFogState__FP11TextureInfo12_GXBlendMode = .text:0x8010895C; // type:function size:0x80 scope:global +eSetFogEnableState__Fi = .text:0x801089DC; // type:function size:0xC scope:global +eSetFogBrightnessConstant__Ff = .text:0x801089E8; // type:function size:0xC scope:global +eLoadTevSwapTable__Fv = .text:0x801089F4; // type:function size:0x94 scope:global +eSetTevSwapStage__F13_GXTevStageIDii = .text:0x80108A88; // type:function size:0x40 scope:global +eResetTevSwapStages__Fv = .text:0x80108AC8; // type:function size:0x60 scope:global +eForceResetTevSwapStages__Fv = .text:0x80108B28; // type:function size:0xA8 scope:global +eResetIndirectTextureSetup__Fv = .text:0x80108BD0; // type:function size:0x54 scope:global +eFlushTextureBucketList__Fv = .text:0x80108C24; // type:function size:0xCC scope:global +eSubmitMesh__FP11eStripEntryUsP5eViewP6eSolidUiP11TextureInfoP8bMatrix4P13eLightContextP14eLightMaterialT6P18eDataRenderDynamic = .text:0x80108CF0; // type:function size:0x13C scope:global +InitSlotPoolsEx__Fv = .text:0x80108E2C; // type:function size:0x78 scope:global +gain__Fff = .text:0x80108EA4; // type:function size:0x50 scope:global +eResetContrastSurface__Fv = .text:0x80108EF4; // type:function size:0x368 scope:global +eInitContrastSurface__Fv = .text:0x8010925C; // type:function size:0xFC scope:global +epCalculateLocalDirectionalPOS16__FPUiT0iPUsPiPUciiP14eLightMaterialP13eLightContext = .text:0x80109358; // type:function size:0x818 scope:global +CreatePlatInfo__27eLightMaterialPlatInterface = .text:0x80109B70; // type:function size:0x48 scope:global +UpdatePlatInfo__27eLightMaterialPlatInterface = .text:0x80109BB8; // type:function size:0x7FC scope:global +elInitPlat__Fv = .text:0x8010A3B4; // type:function size:0x3C scope:global +GetLightID__Fi = .text:0x8010A3F0; // type:function size:0x8C scope:global +gx_LightColour__FRC8bVector4 = .text:0x8010A47C; // type:function size:0xBC scope:global +gx_LightAmbient__Fi = .text:0x8010A538; // type:function size:0x70 scope:global +gx_Lighting__Fv = .text:0x8010A5A8; // type:function size:0x104 scope:global +PlatConvertColor__FUi = .text:0x8010A6AC; // type:function size:0x20 scope:global +eInitEnvMap__Fv = .text:0x8010A6CC; // type:function size:0xBC scope:global +UpdateCameras__7eEnvMapP8bVector3T1 = .text:0x8010A788; // type:function size:0x2FC scope:global +eGetEnvMap__Fv = .text:0x8010AA84; // type:function size:0xC scope:global +eDisplayEnvRenderTargets__FP5eView = .text:0x8010AA90; // type:function size:0x24 scope:global +eMathInit__Fv = .text:0x8010AAB4; // type:function size:0x48 scope:global +eCopyMatrix__FP8bMatrix4T0 = .text:0x8010AAFC; // type:function size:0x2C scope:global +eMulMatrix__FP8bMatrix4N20 = .text:0x8010AB28; // type:function size:0x30 scope:global +eMulVector__FP8bVector4PC8bMatrix4PC8bVector4 = .text:0x8010AB58; // type:function size:0x74 scope:global +eMulVector__FP8bVector3PC8bMatrix4PC8bVector3 = .text:0x8010ABCC; // type:function size:0x74 scope:global +eProject__FfffPA3_fPfN44 = .text:0x8010AC40; // type:function size:0x10C scope:global +eRotTransPers__FP8bVector3PC8bVector3P8bMatrix4T2ffffff = .text:0x8010AD4C; // type:function size:0xF8 scope:global +eCreateAxisRotationMatrix__FP8bMatrix4R8bVector3Us = .text:0x8010AE44; // type:function size:0xF4 scope:global +eCreateLookAtMatrix__FP8bMatrix4R8bVector3N21 = .text:0x8010AF38; // type:function size:0x1C4 scope:global +eSin__Ff = .text:0x8010B0FC; // type:function size:0xD4 scope:global +eCreateRotationZ__FP8bMatrix4Us = .text:0x8010B1D0; // type:function size:0xDC scope:global +eRotateX__FP8bMatrix4T0Us = .text:0x8010B2AC; // type:function size:0xF4 scope:global +eRotateY__FP8bMatrix4T0Us = .text:0x8010B3A0; // type:function size:0xF4 scope:global +eRotateZ__FP8bMatrix4T0Us = .text:0x8010B494; // type:function size:0x4C scope:global +eTranslate__FP8bMatrix4T0P8bVector3 = .text:0x8010B4E0; // type:function size:0x84 scope:global +eCreateTranslationMatrix__FP8bMatrix4R8bVector3 = .text:0x8010B564; // type:function size:0x60 scope:global +eInvertMatrix__FP8bMatrix4T0 = .text:0x8010B5C4; // type:function size:0x38 scope:global +eInvertTransformationMatrix__FP8bMatrix4PC8bMatrix4 = .text:0x8010B5FC; // type:function size:0x108 scope:global +eInvertRotationMatrix__FP8bMatrix4T0 = .text:0x8010B704; // type:function size:0x54 scope:global +ePowf__Fff = .text:0x8010B758; // type:function size:0x20 scope:global +eConvertToGX34__FRA2_A3_fR8bMatrix4 = .text:0x8010B778; // type:function size:0x70 scope:global +eLoadPosMtxImm__FR8bMatrix412_GXPosNrmMtx = .text:0x8010B7E8; // type:function size:0x60 scope:global +psReset__F15PS_ResetOptions = .text:0x8010B848; // type:function size:0x38 scope:global +psGouraud__Fv = .text:0x8010B880; // type:function size:0x160 scope:global +psReplaceNoAlpha__Fv = .text:0x8010B9E0; // type:function size:0x120 scope:global +psModulate__Fv = .text:0x8010BB00; // type:function size:0x1C0 scope:global +psMotionBlur__Fv = .text:0x8010BCC0; // type:function size:0x130 scope:global +psGlowBloom__FUc = .text:0x8010BDF0; // type:function size:0x1B8 scope:global +psDepthTexture__Fv = .text:0x8010BFA8; // type:function size:0xE8 scope:global +psDepthOfField__FUc = .text:0x8010C090; // type:function size:0x19C scope:global +psIntensityReplacement__FG8_GXColor = .text:0x8010C22C; // type:function size:0x11C scope:global +psIntensityAccumulate__FG8_GXColor = .text:0x8010C348; // type:function size:0x11C scope:global +psTint__Fv = .text:0x8010C464; // type:function size:0x130 scope:global +psFEMultiTexture__Fv = .text:0x8010C594; // type:function size:0x270 scope:global +psMWScreenContrast__Fv = .text:0x8010C804; // type:function size:0x458 scope:global +psRVM__Fv = .text:0x8010CC5C; // type:function size:0x180 scope:global +ps_Lighting__Fiii = .text:0x8010CDDC; // type:function size:0xD0 scope:global +ps_Lighting2VertexChannels__Fi = .text:0x8010CEAC; // type:function size:0xDC scope:global +ps_NoLighting__Fii = .text:0x8010CF88; // type:function size:0xA8 scope:global +ps_Model__F19eModelPixelShaderIdP14eLightMateriali = .text:0x8010D030; // type:function size:0xA2C scope:global +vsReset__Fi = .text:0x8010DA5C; // type:function size:0x14 scope:global +vsResetTexGen__Fii = .text:0x8010DA70; // type:function size:0x3C scope:global +vsScreen__Fi = .text:0x8010DAAC; // type:function size:0xAC scope:global +vsModel__Fii = .text:0x8010DB58; // type:function size:0x7EC scope:global +vsScreenMultiTexture__Fi = .text:0x8010E344; // type:function size:0x60 scope:global +vsVtxAttrFmt__Fi = .text:0x8010E3A4; // type:function size:0x278 scope:global +eBeginStrip__FP11TextureInfoiP8bMatrix4 = .text:0x8010E61C; // type:function size:0x7C scope:global +eEndStrip__FP5eView = .text:0x8010E698; // type:function size:0x140 scope:global +rgbatoargb__FPUc = .text:0x8010E7D8; // type:function size:0x30 scope:local +eAddColour__FUi = .text:0x8010E808; // type:function size:0x4C scope:global +eAddUV__Fff = .text:0x8010E854; // type:function size:0x30 scope:global +eAddVertex__FRC8bVector3 = .text:0x8010E884; // type:function size:0x44 scope:global +exAddColour__FUi = .text:0x8010E8C8; // type:function size:0x20 scope:global +exAddUV__Fff = .text:0x8010E8E8; // type:function size:0x20 scope:global +exAddVertex__FRC8bVector3 = .text:0x8010E908; // type:function size:0x20 scope:global +exBeginStrip__FP11TextureInfoiP8bMatrix4 = .text:0x8010E928; // type:function size:0x20 scope:global +exEndStrip__FP5eView = .text:0x8010E948; // type:function size:0x20 scope:global +FixStripEntryTable__14eSolidPlatInfoP6eSolidPUcT2 = .text:0x8010E968; // type:function size:0x38 scope:global +LoaderPlatChunks__19eSolidPlatInterfaceP6bChunk = .text:0x8010E9A0; // type:function size:0x98 scope:global +UnloaderPlatChunks__19eSolidPlatInterfaceP6bChunk = .text:0x8010EA38; // type:function size:0x10 scope:global +FixPlatInfo__19eSolidPlatInterface = .text:0x8010EA48; // type:function size:0x34 scope:global +UnFixPlatInfo__19eSolidPlatInterface = .text:0x8010EA7C; // type:function size:0x34 scope:global +SetSmoothVertex__19eSolidPlatInterfaceUifff = .text:0x8010EAB0; // type:function size:0x4 scope:global +eLoadSolidListPlatChunks__FP6bChunk = .text:0x8010EAB4; // type:function size:0x34 scope:global +eUnloadSolidListPlatChunks__FP6bChunk = .text:0x8010EAE8; // type:function size:0x34 scope:global +GetPlaneState__FPC8bVector4PC8bVector3 = .text:0x8010EB1C; // type:function size:0x54 scope:global +TransformBound__FP8bMatrix4P8bVector3T1 = .text:0x8010EB70; // type:function size:0x110 scope:global +GetVisibleStateSB__18eViewPlatInterfacePC8bVector3T1P8bMatrix4 = .text:0x8010EC80; // type:function size:0x1C4 scope:global +GetVisibleStateSB__18eViewPlatInterfacePC8bVector3P8bMatrix4 = .text:0x8010EE44; // type:function size:0x64 scope:global +GetScreenPosition__18eViewPlatInterfaceP8bVector3PC8bVector3 = .text:0x8010EEA8; // type:function size:0x5C scope:global +CalculateViewMatricies__13eViewPlatInfoP5eViewfff = .text:0x8010EF04; // type:function size:0x54 scope:global +GetPixelWidth__18eViewPlatInterface = .text:0x8010EF58; // type:function size:0xC scope:global +GimmeMyViewPlatInfo__18eViewPlatInterfacei = .text:0x8010EF64; // type:function size:0x14 scope:global +Get__16IVisualTreatment = .text:0x8010EF78; // type:function size:0xC scope:global +__20IVisualTreatmentPlat = .text:0x8010EF84; // type:function size:0x30 scope:global +_._20IVisualTreatmentPlat = .text:0x8010EFB4; // type:function size:0x20 scope:global +OpenVisualTreatment__Fv = .text:0x8010EFD4; // type:function size:0x58 scope:global +CloseVisualTreatment__Fv = .text:0x8010F02C; // type:function size:0x44 scope:global +RenderMWVisualLook__20IVisualTreatmentPlatP5eView = .text:0x8010F070; // type:function size:0xEC scope:global +UpdateIndirectTexture__20IVisualTreatmentPlat = .text:0x8010F15C; // type:function size:0x26C scope:global +GetNumParticleTextures__Fv = .text:0x8010F3C8; // type:function size:0x8 scope:global +IsAShittyEffect__FUi = .text:0x8010F3D0; // type:function size:0x38 scope:global +ExpandVector__FPC9smVector3P8bVector3 = .text:0x8010F408; // type:function size:0xB8 scope:global +CompressVector__FPC8bVector3P9smVector3 = .text:0x8010F4C0; // type:function size:0xF8 scope:global +NotifyLibOfDeletion__FPvP12EmitterGroup = .text:0x8010F5B8; // type:function size:0xC scope:global +GetNumParticles__12EmitterGroup = .text:0x8010F5C4; // type:function size:0x38 scope:global +GetConstraintBasis__F24EffectParticleConstraintR8bVector4T1RUsP8bMatrix4 = .text:0x8010F5FC; // type:function size:0x348 scope:global +OrphanParticlesFromThisEmitter__13EmitterSystemP7Emitter = .text:0x8010F944; // type:function size:0x44 scope:global +KillParticlesFromThisEmitter__13EmitterSystemP7Emitter = .text:0x8010F988; // type:function size:0x54 scope:global +KillEverything__13EmitterSystem = .text:0x8010F9DC; // type:function size:0x8C scope:global +InitParticleSlotPool__Fv = .text:0x8010FA68; // type:function size:0x48 scope:global +InitEmitterSlotPool__Fv = .text:0x8010FAB0; // type:function size:0x48 scope:global +InitEmitterGroupSlotPool__Fv = .text:0x8010FAF8; // type:function size:0x48 scope:global +ServiceWorldEffects__13EmitterSystem = .text:0x8010FB40; // type:function size:0x154 scope:global +RefreshWorldEffects__13EmitterSystem = .text:0x8010FC94; // type:function size:0xE0 scope:global +ExpandFXSlotPools__Fv = .text:0x8010FD74; // type:function size:0x64 scope:global +CollapseFXSlotPools__Fv = .text:0x8010FDD8; // type:function size:0xF8 scope:global +EmitterSystem_OnStartNIS__Fv = .text:0x8010FED0; // type:function size:0x58 scope:global +EmitterSystem_OnEndNis__Fv = .text:0x8010FF28; // type:function size:0x58 scope:global +__24EmitterDataAttribWrapperPCQ26Attrib10Collection = .text:0x8010FF80; // type:function size:0x7C scope:global +__25EmitterGroupAttribWrapperPCQ26Attrib10Collection = .text:0x8010FFFC; // type:function size:0x50 scope:global +GetFloatColor__FUiR8bVector4 = .text:0x8011004C; // type:function size:0xAC scope:global +CalculateBases__24EmitterDataAttribWrapper = .text:0x801100F8; // type:function size:0x1A0 scope:global +__7EmitterPCQ26Attrib10CollectionP12EmitterGroup = .text:0x80110298; // type:function size:0xDC scope:global +_._7Emitter = .text:0x80110374; // type:function size:0xE8 scope:global +GetInitialParticleColorAndSize__C7EmitterPC8bMatrix4T1P15EmitterParticle = .text:0x8011045C; // type:function size:0x1C8 scope:global +GetDiscVelocity__C7EmitterRfN21RUi = .text:0x80110624; // type:function size:0x194 scope:global +GetConeVelocity__C7EmitterRfN21RUi = .text:0x801107B8; // type:function size:0x188 scope:global +CalcParticleListIndex__7Emitter = .text:0x80110940; // type:function size:0x18 scope:global +GetAnimatedUVs__F23EffectParticleAnimationiPUiT2 = .text:0x80110958; // type:function size:0x1D4 scope:global +GetStandardUVs__7EmitterPUiT1 = .text:0x80110B2C; // type:function size:0x14 scope:global +__12EmitterGroupPCQ26Attrib10CollectionUi = .text:0x80110B40; // type:function size:0xC8 scope:global +_._12EmitterGroup = .text:0x80110C08; // type:function size:0xB4 scope:global +SetEmitters__12EmitterGroupUi = .text:0x80110CBC; // type:function size:0x258 scope:global +UnloadEmitters__12EmitterGroupb = .text:0x80110F14; // type:function size:0xB4 scope:global +NumEmitters__C12EmitterGroup = .text:0x80110FC8; // type:function size:0x28 scope:global +GetAttributes__C7Emitter = .text:0x80110FF0; // type:function size:0x8 scope:global +MakeOneShot__12EmitterGroupb = .text:0x80110FF8; // type:function size:0xC8 scope:global +SetLocalWorld__12EmitterGroupPC8bMatrix4 = .text:0x801110C0; // type:function size:0x5C scope:global +SetInheritVelocity__12EmitterGroupPC8bVector3 = .text:0x8011111C; // type:function size:0x30 scope:global +Enable__12EmitterGroup = .text:0x8011114C; // type:function size:0x34 scope:global +Disable__12EmitterGroup = .text:0x80111180; // type:function size:0x34 scope:global +EndianSwap__14EmitterLibrary = .text:0x801111B4; // type:function size:0x40 scope:global +GetLibraryNumTriggers__20EmitterLibraryHeaderi = .text:0x801111F4; // type:function size:0x60 scope:global +GetLibraryTriggers__20EmitterLibraryHeaderi = .text:0x80111254; // type:function size:0x50 scope:global +GetLibrary__20EmitterLibraryHeaderi = .text:0x801112A4; // type:function size:0x4C scope:global +EndianSwap__20EmitterLibraryHeader = .text:0x801112F0; // type:function size:0xE8 scope:global +GetNewParticle__13EmitterSystemP7Emitter = .text:0x801113D8; // type:function size:0x1D0 scope:global +KillParticle__13EmitterSystemP7EmitterP15EmitterParticle = .text:0x801115A8; // type:function size:0x74 scope:global +CreateEmitterGroup__13EmitterSystemRCQ26Attrib9StringKeyUi = .text:0x8011161C; // type:function size:0x6C scope:global +CreateEmitterGroup__13EmitterSystemRCUiUi = .text:0x80111688; // type:function size:0x6C scope:global +CreateEmitterGroup__13EmitterSystemPCQ26Attrib10CollectionUi = .text:0x801116F4; // type:function size:0x35C scope:global +AddEmitterGroup__13EmitterSystemP12EmitterGroup = .text:0x80111A50; // type:function size:0x74 scope:global +RemoveEmitterGroup__13EmitterSystemP12EmitterGroup = .text:0x80111AC4; // type:function size:0x58 scope:global +UpdateInterestPoints__13EmitterSystem = .text:0x80111B1C; // type:function size:0x84 scope:global +UpdateParticles__13EmitterSystemf = .text:0x80111BA0; // type:function size:0x71C scope:global +FindLibrary__13EmitterSystemUi = .text:0x801122BC; // type:function size:0x7C scope:global +AddLibrary__13EmitterSystemP14EmitterLibrary = .text:0x80112338; // type:function size:0x2A0 scope:global +RemoveLibrary__13EmitterSystemP14EmitterLibrary = .text:0x801125D8; // type:function size:0xE0 scope:global +__13EmitterSystem = .text:0x801126B8; // type:function size:0xDC scope:global +PlatRotateScaleParticle__FP15EmitterParticleRQ25UMath7Vector3N41 = .text:0x80112794; // type:function size:0x154 scope:global +afxGetWorldViewMatrix__FP5eViewP8bMatrix4 = .text:0x801128E8; // type:function size:0x24 scope:global +Render__13EmitterSystemP5eView = .text:0x8011290C; // type:function size:0x2B8 scope:global +Init__13EmitterSystem = .text:0x80112BC4; // type:function size:0x28 scope:global +GetEmitterData__13EmitterSystemPCQ26Attrib10Collection = .text:0x80112BEC; // type:function size:0x194 scope:global +GetEmitterGroup__13EmitterSystemPCQ26Attrib10Collection = .text:0x80112D80; // type:function size:0x194 scope:global +IsCloseEnough__C13EmitterSystemPC8bVector3fif = .text:0x80112F14; // type:function size:0x18C scope:global +IsCloseEnough__C13EmitterSystemPC8bVector4fif = .text:0x801130A0; // type:function size:0x44 scope:global +IsCloseEnough__C13EmitterSystemP12EmitterGroupif = .text:0x801130E4; // type:function size:0x40 scope:global +UpdateTriggers__Fv = .text:0x80113124; // type:function size:0xB8 scope:global +GetEmitterGroupsToTrigger__FR8bVector3PP14EmitterLibrary = .text:0x801131DC; // type:function size:0x168 scope:global +Loader__13EmitterSystemP6bChunk = .text:0x80113344; // type:function size:0x1A0 scope:global +Unloader__13EmitterSystemP6bChunk = .text:0x801134E4; // type:function size:0x134 scope:global +TexturePageLoader__13EmitterSystemP6bChunk = .text:0x80113618; // type:function size:0xBC scope:global +TexturePageUnloader__13EmitterSystemP6bChunk = .text:0x801136D4; // type:function size:0x40 scope:global +SetTexturePageRanges__13EmitterSystemiP16TexturePageRange = .text:0x80113714; // type:function size:0x14 scope:global +HandleFXTriggers__Fv = .text:0x80113728; // type:function size:0x1C4 scope:global +KillEffectsMatchingFlag__13EmitterSystemUi = .text:0x801138EC; // type:function size:0x80 scope:global +CleanParticlesOnRaceRestart__Fv = .text:0x8011396C; // type:function size:0x2C scope:global +SubscribeToDeletion__12EmitterGroupPvPFPvP12EmitterGroup_v = .text:0x80113998; // type:function size:0xC scope:global +UnSubscribe__12EmitterGroup = .text:0x801139A4; // type:function size:0x10 scope:global +DeleteEmitters__12EmitterGroup = .text:0x801139B4; // type:function size:0x80 scope:global +Update__13EmitterSystemf = .text:0x80113A34; // type:function size:0x138 scope:global +Update__12EmitterGroupf = .text:0x80113B6C; // type:function size:0x1B0 scope:global +Update__14EmitterControlfP7EmitterRf = .text:0x80113D1C; // type:function size:0x3A8 scope:global +Update__7EmitterfRf = .text:0x801140C4; // type:function size:0x50 scope:global +SpawnParticles__7Emitterff = .text:0x80114114; // type:function size:0xADC scope:global +__lower_bound__H4ZPQ213EmitterSystem8LibEntryZQ213EmitterSystem8LibEntryZQ24_STLt4less1ZQ213EmitterSystem8LibEntryZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80114BF0; // type:function size:0x48 scope:global +__upper_bound__H4ZPQ213EmitterSystem8LibEntryZQ213EmitterSystem8LibEntryZQ24_STLt4less1ZQ213EmitterSystem8LibEntryZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80114C38; // type:function size:0x48 scope:global +reserve__Q24_STLt6vector2ZQ213EmitterSystem8LibEntryZQ33UTL3Stdt9Allocator2ZQ213EmitterSystem8LibEntryZ12_type_vectorUi = .text:0x80114C80; // type:function size:0x15C scope:global +_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP24EmitterDataAttribWrapperZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP24EmitterDataAttribWrapperZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP24EmitterDataAttribWrapperZ9_type_mapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZP24EmitterDataAttribWrapperT1 = .text:0x80114DDC; // type:function size:0x13C scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP24EmitterDataAttribWrapperZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP24EmitterDataAttribWrapperZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP24EmitterDataAttribWrapperZ9_type_mapRCQ24_STLt4pair2ZCUiZP24EmitterDataAttribWrapper = .text:0x80114F18; // type:function size:0x118 scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP24EmitterDataAttribWrapperZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP24EmitterDataAttribWrapperZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP24EmitterDataAttribWrapperZ9_type_mapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZP24EmitterDataAttribWrapperZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZP24EmitterDataAttribWrapperRCQ24_STLt4pair2ZCUiZP24EmitterDataAttribWrapper = .text:0x80115030; // type:function size:0x26C scope:global +_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP25EmitterGroupAttribWrapperZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP25EmitterGroupAttribWrapperZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP25EmitterGroupAttribWrapperZ9_type_mapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZP25EmitterGroupAttribWrapperT1 = .text:0x8011529C; // type:function size:0x13C scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP25EmitterGroupAttribWrapperZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP25EmitterGroupAttribWrapperZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP25EmitterGroupAttribWrapperZ9_type_mapRCQ24_STLt4pair2ZCUiZP25EmitterGroupAttribWrapper = .text:0x801153D8; // type:function size:0x118 scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP25EmitterGroupAttribWrapperZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP25EmitterGroupAttribWrapperZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP25EmitterGroupAttribWrapperZ9_type_mapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZP25EmitterGroupAttribWrapperZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZP25EmitterGroupAttribWrapperRCQ24_STLt4pair2ZCUiZP25EmitterGroupAttribWrapper = .text:0x801154F0; // type:function size:0x26C scope:global +__static_initialization_and_destruction_0 = .text:0x8011575C; // type:function size:0x11C0 scope:local +GetPtr__11LoadedTableUi = .text:0x8011691C; // type:function size:0x10 scope:global +Init__20GrandSceneryCullInfo = .text:0x8011692C; // type:function size:0xC scope:global +Init__11DefragFixer = .text:0x80116938; // type:function size:0x14 scope:global +ClassKey__Q36Attrib3Gen15light_flares_cg = .text:0x8011694C; // type:function size:0xC scope:global +__Q33UTL3Stdt3map3ZUiZP24EmitterDataAttribWrapperZ9_type_map = .text:0x80116958; // type:function size:0x74 scope:global +__Q33UTL3Stdt3map3ZUiZP25EmitterGroupAttribWrapperZ9_type_map = .text:0x801169CC; // type:function size:0x74 scope:global +Flush__14eTextureBucket = .text:0x80116A40; // type:function size:0x80 scope:global +Render__11eDataRenderP11TextureInfo = .text:0x80116AC0; // type:function size:0x175C scope:global +_GLOBAL_.I.ePolySlotPool = .text:0x8011821C; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x80118248; // type:label scope:local +__6UIMainP21ScreenConstructorData = .text:0x80118248; // type:function size:0x4C scope:global +NotificationMessage__6UIMainUlP8FEObjectUlUl = .text:0x80118294; // type:function size:0x264 scope:global +Setup__6UIMain = .text:0x801184F8; // type:function size:0x350 scope:global +UpdateProfileData__6UIMain = .text:0x80118848; // type:function size:0x244 scope:global +React__7OMAudioPCcUiP8FEObjectUiUi = .text:0x80118A8C; // type:function size:0x28 scope:global +React__7OMVideoPCcUiP8FEObjectUiUi = .text:0x80118AB4; // type:function size:0x28 scope:global +React__10OMGameplayPCcUiP8FEObjectUiUi = .text:0x80118ADC; // type:function size:0x28 scope:global +React__8OMPlayerPCcUiP8FEObjectUiUi = .text:0x80118B04; // type:function size:0x28 scope:global +React__12OMControllerPCcUiP8FEObjectUiUi = .text:0x80118B2C; // type:function size:0x28 scope:global +React__8OMEATraxPCcUiP8FEObjectUiUi = .text:0x80118B54; // type:function size:0x28 scope:global +React__9OMCreditsPCcUiP8FEObjectUiUi = .text:0x80118B7C; // type:function size:0x28 scope:global +Act__14AOSFXMasterVolPCcUi = .text:0x80118BA4; // type:function size:0x9C scope:global +Draw__14AOSFXMasterVol = .text:0x80118C40; // type:function size:0x5C scope:global +SetInitialValues__14AOSFXMasterVol = .text:0x80118C9C; // type:function size:0x54 scope:global +Act__22AOInteractiveMusicModePCcUi = .text:0x80118CF0; // type:function size:0xA0 scope:global +Draw__22AOInteractiveMusicMode = .text:0x80118D90; // type:function size:0x68 scope:global +Act__17AOEATraxMusicModePCcUi = .text:0x80118DF8; // type:function size:0xA0 scope:global +Draw__17AOEATraxMusicMode = .text:0x80118E98; // type:function size:0x68 scope:global +Act__8AOCarVolPCcUi = .text:0x80118F00; // type:function size:0x9C scope:global +Draw__8AOCarVol = .text:0x80118F9C; // type:function size:0x5C scope:global +SetInitialValues__8AOCarVol = .text:0x80118FF8; // type:function size:0x54 scope:global +Act__11AOSpeechVolPCcUi = .text:0x8011904C; // type:function size:0x9C scope:global +Draw__11AOSpeechVol = .text:0x801190E8; // type:function size:0x5C scope:global +SetInitialValues__11AOSpeechVol = .text:0x80119144; // type:function size:0x54 scope:global +Act__12AOFEMusicVolPCcUi = .text:0x80119198; // type:function size:0xBC scope:global +Draw__12AOFEMusicVol = .text:0x80119254; // type:function size:0x5C scope:global +SetInitialValues__12AOFEMusicVol = .text:0x801192B0; // type:function size:0x54 scope:global +Act__12AOIGMusicVolPCcUi = .text:0x80119304; // type:function size:0x9C scope:global +Draw__12AOIGMusicVol = .text:0x801193A0; // type:function size:0x5C scope:global +SetInitialValues__12AOIGMusicVol = .text:0x801193FC; // type:function size:0x54 scope:global +Act__11AOAudioModePCcUi = .text:0x80119450; // type:function size:0xF4 scope:global +Draw__11AOAudioMode = .text:0x80119544; // type:function size:0x98 scope:global +Act__12VOWideScreenPCcUi = .text:0x801195DC; // type:function size:0x9C scope:global +Draw__12VOWideScreen = .text:0x80119678; // type:function size:0x68 scope:global +Act__8GODamagePCcUi = .text:0x801196E0; // type:function size:0x9C scope:global +Draw__8GODamage = .text:0x8011977C; // type:function size:0x68 scope:global +Act__10GOAutoSavePCcUi = .text:0x801197E4; // type:function size:0xD0 scope:global +Draw__10GOAutoSave = .text:0x801198B4; // type:function size:0x68 scope:global +Act__10GOJumpCamsPCcUi = .text:0x8011991C; // type:function size:0x9C scope:global +Draw__10GOJumpCams = .text:0x801199B8; // type:function size:0x68 scope:global +Act__10GORearviewPCcUi = .text:0x80119A20; // type:function size:0x9C scope:global +Draw__10GORearview = .text:0x80119ABC; // type:function size:0x68 scope:global +Act__13GOSpeedoUnitsPCcUi = .text:0x80119B24; // type:function size:0xB4 scope:global +Draw__13GOSpeedoUnits = .text:0x80119BD8; // type:function size:0x68 scope:global +Act__15GORacingMiniMapPCcUi = .text:0x80119C40; // type:function size:0xC4 scope:global +Draw__15GORacingMiniMap = .text:0x80119D04; // type:function size:0x98 scope:global +Act__18GOExploringMiniMapPCcUi = .text:0x80119D9C; // type:function size:0xC4 scope:global +Draw__18GOExploringMiniMap = .text:0x80119E60; // type:function size:0x98 scope:global +Act__14POTransmissionPCcUi = .text:0x80119EF8; // type:function size:0xDC scope:global +Draw__14POTransmission = .text:0x80119FD4; // type:function size:0x8C scope:global +Act__10PODriveCamPCcUi = .text:0x8011A060; // type:function size:0x108 scope:global +Draw__10PODriveCam = .text:0x8011A168; // type:function size:0xD0 scope:global +Act__8POGaugesPCcUi = .text:0x8011A238; // type:function size:0xC4 scope:global +Draw__8POGauges = .text:0x8011A2FC; // type:function size:0x74 scope:global +Act__10POPositionPCcUi = .text:0x8011A370; // type:function size:0xC4 scope:global +Draw__10POPosition = .text:0x8011A434; // type:function size:0x74 scope:global +Act__7POScorePCcUi = .text:0x8011A4A8; // type:function size:0xC4 scope:global +Draw__7POScore = .text:0x8011A56C; // type:function size:0x74 scope:global +Act__11POSplitTimePCcUi = .text:0x8011A5E0; // type:function size:0xC8 scope:global +Draw__11POSplitTime = .text:0x8011A6A8; // type:function size:0xD0 scope:global +Act__13POLeaderBoardPCcUi = .text:0x8011A778; // type:function size:0xC4 scope:global +Draw__13POLeaderBoard = .text:0x8011A83C; // type:function size:0x74 scope:global +Act__11COVibrationPCcUi = .text:0x8011A8B0; // type:function size:0x228 scope:global +Draw__11COVibration = .text:0x8011AAD8; // type:function size:0x78 scope:global +UnsetFocus__11COVibration = .text:0x8011AB50; // type:function size:0x98 scope:global +SetFocus__11COVibrationPCc = .text:0x8011ABE8; // type:function size:0xD0 scope:global +Act__8COConfigPCcUi = .text:0x8011ACB8; // type:function size:0x154 scope:global +Draw__8COConfig = .text:0x8011AE0C; // type:function size:0x94 scope:global +__13UIOptionsMainP21ScreenConstructorData = .text:0x8011AEA0; // type:function size:0x8C scope:global +NotificationMessage__13UIOptionsMainUlP8FEObjectUlUl = .text:0x8011AF2C; // type:function size:0x374 scope:global +Setup__13UIOptionsMain = .text:0x8011B2A0; // type:function size:0x284 scope:global +ExitOptions__13UIOptionsMainPCc = .text:0x8011B524; // type:function size:0x7C scope:global +GetPlayerToEditForOptions__Fv = .text:0x8011B5A0; // type:function size:0xC scope:global +SetPlayerToEditForOptions__Fi = .text:0x8011B5AC; // type:function size:0xC scope:global +__15UIOptionsScreenP21ScreenConstructorData = .text:0x8011B5B8; // type:function size:0xFC scope:global +_._15UIOptionsScreen = .text:0x8011B6B4; // type:function size:0xB8 scope:global +NotificationMessage__15UIOptionsScreenUlP8FEObjectUlUl = .text:0x8011B76C; // type:function size:0x580 scope:global +Setup__15UIOptionsScreen = .text:0x8011BCEC; // type:function size:0x158 scope:global +SetupAudio__15UIOptionsScreen = .text:0x8011BE44; // type:function size:0x284 scope:global +SetupVideo__15UIOptionsScreen = .text:0x8011C0C8; // type:function size:0x114 scope:global +SetupGameplay__15UIOptionsScreen = .text:0x8011C1DC; // type:function size:0x2B8 scope:global +SetupPlayer__15UIOptionsScreen = .text:0x8011C494; // type:function size:0x3B4 scope:global +SetupOnline__15UIOptionsScreen = .text:0x8011C848; // type:function size:0x5C scope:global +RestoreDefaults__15UIOptionsScreen = .text:0x8011C8A4; // type:function size:0x10C scope:global +OptionsDidNotChange__15UIOptionsScreen = .text:0x8011C9B0; // type:function size:0xBC scope:global +RestoreOriginals__15UIOptionsScreen = .text:0x8011CA6C; // type:function size:0x1D0 scope:global +TogglePlayer__15UIOptionsScreenb = .text:0x8011CC3C; // type:function size:0x15C scope:global +ShouldShowAutoSave__15UIOptionsScreen = .text:0x8011CD98; // type:function size:0xB4 scope:global +__17UIOptionsTrailersP21ScreenConstructorData = .text:0x8011CE4C; // type:function size:0x44 scope:global +NotificationMessage__17UIOptionsTrailersUlP8FEObjectUlUl = .text:0x8011CE90; // type:function size:0x1B4 scope:global +Setup__17UIOptionsTrailers = .text:0x8011D044; // type:function size:0xA4 scope:global +__19UIOptionsControllerP21ScreenConstructorData = .text:0x8011D0E8; // type:function size:0x178 scope:global +_._19UIOptionsController = .text:0x8011D260; // type:function size:0x9C scope:global +OptionsDidNotChange__19UIOptionsController = .text:0x8011D2FC; // type:function size:0xB0 scope:global +NotificationMessage__19UIOptionsControllerUlP8FEObjectUlUl = .text:0x8011D3AC; // type:function size:0x3E8 scope:global +Setup__19UIOptionsController = .text:0x8011D794; // type:function size:0x168 scope:global +SetupControllerConfig__19UIOptionsController = .text:0x8011D8FC; // type:function size:0x230 scope:global +DetectControllers__19UIOptionsController = .text:0x8011DB2C; // type:function size:0x48 scope:global +ClearLoadedControllerTexture__19UIOptionsController = .text:0x8011DB74; // type:function size:0x38 scope:global +FinishLoadingTexCallback__19UIOptionsController = .text:0x8011DBAC; // type:function size:0x3C scope:global +MyFinishLoadingControllerTextureCallbackBridge__FUi = .text:0x8011DBE8; // type:function size:0x20 scope:global +CalcControllerTextureToLoad__19UIOptionsController = .text:0x8011DC08; // type:function size:0x90 scope:global +PrepToShowControllerConfig__19UIOptionsController = .text:0x8011DC98; // type:function size:0xE4 scope:global +ShowControllerConfig__19UIOptionsController = .text:0x8011DD7C; // type:function size:0x30 scope:global +HideControllerConfig__19UIOptionsController = .text:0x8011DDAC; // type:function size:0x44 scope:global +RestoreOriginals__19UIOptionsController = .text:0x8011DDF0; // type:function size:0x80 scope:global +TogglePlayer__19UIOptionsController = .text:0x8011DE70; // type:function size:0x110 scope:global +__9PauseMenuP21ScreenConstructorData = .text:0x8011DF80; // type:function size:0x88 scope:global +_._9PauseMenu = .text:0x8011E008; // type:function size:0x98 scope:global +NotifySoundMessage__9PauseMenuUl18eMenuSoundTriggers = .text:0x8011E0A0; // type:function size:0x28 scope:global +NotificationMessage__9PauseMenuUlP8FEObjectUlUl = .text:0x8011E0C8; // type:function size:0x4B4 scope:global +IsTuningAvailable__9PauseMenu = .text:0x8011E57C; // type:function size:0xCC scope:global +Setup__9PauseMenu = .text:0x8011E648; // type:function size:0xE8 scope:global +SetupOptions__9PauseMenu = .text:0x8011E730; // type:function size:0xD84 scope:global +SetupOnlineOptions__9PauseMenu = .text:0x8011F4B4; // type:function size:0x6C scope:global +__18UITrackMapStreamer = .text:0x8011F520; // type:function size:0x1D4 scope:global +_._18UITrackMapStreamer = .text:0x8011F6F4; // type:function size:0xCC scope:global +MakeSpaceInPoolCallback__18UITrackMapStreamer = .text:0x8011F7C0; // type:function size:0x40 scope:global +Init__18UITrackMapStreamerP15GRaceParametersP12FEMultiImageii = .text:0x8011F800; // type:function size:0xAC scope:global +MapPackLoadCallback__18UITrackMapStreamerUi = .text:0x8011F8AC; // type:function size:0x20 scope:global +MapLoadCallback__18UITrackMapStreamerUi = .text:0x8011F8CC; // type:function size:0x2C scope:global +CalcMapTextureHash__18UITrackMapStreamer = .text:0x8011F8F8; // type:function size:0x64 scope:global +SetMapPackLoaded__18UITrackMapStreamer = .text:0x8011F95C; // type:function size:0x78 scope:global +SetMapLoaded__18UITrackMapStreamerUi = .text:0x8011F9D4; // type:function size:0xB8 scope:global +UpdateMap__18UITrackMapStreamer = .text:0x8011FA8C; // type:function size:0x160 scope:global +CalcBoundsForRace__18UITrackMapStreamerR8bVector2T1 = .text:0x8011FBEC; // type:function size:0x84 scope:global +UpdateAnimation__18UITrackMapStreamer = .text:0x8011FC70; // type:function size:0x4C scope:global +GetZoomFactor__18UITrackMapStreamer = .text:0x8011FCBC; // type:function size:0x54 scope:global +GetPan__18UITrackMapStreamerR8bVector2 = .text:0x8011FD10; // type:function size:0x64 scope:global +ZoomTo__18UITrackMapStreamerRC8bVector2 = .text:0x8011FD74; // type:function size:0x24 scope:global +PanTo__18UITrackMapStreamerRC8bVector2 = .text:0x8011FD98; // type:function size:0x24 scope:global +ZoomToTrack__18UITrackMapStreamer = .text:0x8011FDBC; // type:function size:0x94 scope:global +PanToTrack__18UITrackMapStreamer = .text:0x8011FE50; // type:function size:0xA4 scope:global +SetZoom__18UITrackMapStreamerRC8bVector2 = .text:0x8011FEF4; // type:function size:0x58 scope:global +SetPan__18UITrackMapStreamerRC8bVector2 = .text:0x8011FF4C; // type:function size:0x58 scope:global +SetZoomSpeed__18UITrackMapStreamerf = .text:0x8011FFA4; // type:function size:0xC scope:global +SetPanSpeed__18UITrackMapStreamerf = .text:0x8011FFB0; // type:function size:0xC scope:global +ResetZoom__18UITrackMapStreamerb = .text:0x8011FFBC; // type:function size:0x88 scope:global +ResetPan__18UITrackMapStreamerb = .text:0x80120044; // type:function size:0x88 scope:global +AddTrackSlot__14UIEATraxScreenP12ScrollerSlotUii = .text:0x801200CC; // type:function size:0x68 scope:global +__14UIEATraxScreenP21ScreenConstructorData = .text:0x80120134; // type:function size:0x100 scope:global +_._14UIEATraxScreen = .text:0x80120234; // type:function size:0xF4 scope:global +RefreshHeader__14UIEATraxScreen = .text:0x80120328; // type:function size:0x48 scope:global +GetPlaybilityString__14UIEATraxScreenUc = .text:0x80120370; // type:function size:0x64 scope:global +GetStateString__14UIEATraxScreenUc = .text:0x801203D4; // type:function size:0x34 scope:global +SetupSongList__14UIEATraxScreen = .text:0x80120408; // type:function size:0x3A0 scope:global +ScrollOrderState__14UIEATraxScreenUl = .text:0x801207A8; // type:function size:0xA8 scope:global +ScrollTracks__14UIEATraxScreenUl = .text:0x80120850; // type:function size:0x68 scope:global +ScrollTrackPlayability__14UIEATraxScreenUl = .text:0x801208B8; // type:function size:0x164 scope:global +MoveTrack__14UIEATraxScreenUl = .text:0x80120A1C; // type:function size:0xE0 scope:global +PreviewSong__14UIEATraxScreen = .text:0x80120AFC; // type:function size:0x9C scope:global +ReInsertSong__14UIEATraxScreen = .text:0x80120B98; // type:function size:0xD0 scope:global +NotificationMessage__14UIEATraxScreenUlP8FEObjectUlUl = .text:0x80120C68; // type:function size:0x364 scope:global +OptionsDidNotChange__14UIEATraxScreen = .text:0x80120FCC; // type:function size:0x6C scope:global +RestoreOriginals__14UIEATraxScreen = .text:0x80121038; // type:function size:0x58 scope:global +__15uiRapSheetLoginP21ScreenConstructorData = .text:0x80121090; // type:function size:0x58 scope:global +NotificationMessage__15uiRapSheetLoginUlP8FEObjectUlUl = .text:0x801210E8; // type:function size:0x160 scope:global +Setup__15uiRapSheetLogin = .text:0x80121248; // type:function size:0x68 scope:global +__14uiRapSheetMainP21ScreenConstructorData = .text:0x801212B0; // type:function size:0x4C scope:global +NotificationMessage__14uiRapSheetMainUlP8FEObjectUlUl = .text:0x801212FC; // type:function size:0x24C scope:global +RefreshHeader__14uiRapSheetMain = .text:0x80121548; // type:function size:0x230 scope:global +__12uiRapSheetRSP21ScreenConstructorData = .text:0x80121778; // type:function size:0x44 scope:global +NotificationMessage__12uiRapSheetRSUlP8FEObjectUlUl = .text:0x801217BC; // type:function size:0x4C scope:global +RefreshHeader__12uiRapSheetRS = .text:0x80121808; // type:function size:0x49C scope:global +Update__19RapSheetUSArraySlotP10ArrayDatumb = .text:0x80121CA4; // type:function size:0x74 scope:global +__12uiRapSheetUSP21ScreenConstructorData = .text:0x80121D18; // type:function size:0x134 scope:global +NotificationMessage__12uiRapSheetUSUlP8FEObjectUlUl = .text:0x80121E4C; // type:function size:0x80 scope:global +Setup__12uiRapSheetUS = .text:0x80121ECC; // type:function size:0x3F0 scope:global +RefreshHeader__12uiRapSheetUS = .text:0x801222BC; // type:function size:0x224 scope:global +ToggleView__12uiRapSheetUS = .text:0x801224E0; // type:function size:0x30 scope:global +Update__19RapSheetVDArraySlotP10ArrayDatumb = .text:0x80122510; // type:function size:0x120 scope:global +__12uiRapSheetVDP21ScreenConstructorData = .text:0x80122630; // type:function size:0x1DC scope:global +NotificationMessage__12uiRapSheetVDUlP8FEObjectUlUl = .text:0x8012280C; // type:function size:0x5C scope:global +Setup__12uiRapSheetVD = .text:0x80122868; // type:function size:0x30C scope:global +RefreshHeader__12uiRapSheetVD = .text:0x80122B74; // type:function size:0x1FC scope:global +Update__20RapSheetCTSArraySlotP10ArrayDatumb = .text:0x80122D70; // type:function size:0x74 scope:global +__13uiRapSheetCTSP21ScreenConstructorData = .text:0x80122DE4; // type:function size:0x12C scope:global +NotificationMessage__13uiRapSheetCTSUlP8FEObjectUlUl = .text:0x80122F10; // type:function size:0x5C scope:global +Setup__13uiRapSheetCTS = .text:0x80122F6C; // type:function size:0x394 scope:global +RefreshHeader__13uiRapSheetCTS = .text:0x80123300; // type:function size:0x11C scope:global +__13uiRapSheetTEPP21ScreenConstructorData = .text:0x8012341C; // type:function size:0x50 scope:global +NotificationMessage__13uiRapSheetTEPUlP8FEObjectUlUl = .text:0x8012346C; // type:function size:0x27C scope:global +Setup__13uiRapSheetTEP = .text:0x801236E8; // type:function size:0x36C scope:global +__12uiRapSheetPDP21ScreenConstructorData = .text:0x80123A54; // type:function size:0x50 scope:global +NotificationMessage__12uiRapSheetPDUlP8FEObjectUlUl = .text:0x80123AA4; // type:function size:0x4C scope:global +Setup__12uiRapSheetPD = .text:0x80123AF0; // type:function size:0x214 scope:global +__18uiRapSheetRankingsP21ScreenConstructorData = .text:0x80123D04; // type:function size:0x50 scope:global +NotificationMessage__18uiRapSheetRankingsUlP8FEObjectUlUl = .text:0x80123D54; // type:function size:0x240 scope:global +RefreshHeader__18uiRapSheetRankings = .text:0x80123F94; // type:function size:0x120 scope:global +Setup__18uiRapSheetRankings = .text:0x801240B4; // type:function size:0x144 scope:global +PrintRanking__18uiRapSheetRankingsUiUi19ePursuitDetailTypes = .text:0x801241F8; // type:function size:0xC8 scope:global +Update__25RapSheetRankingsArraySlotP10ArrayDatumb = .text:0x801242C0; // type:function size:0xF8 scope:global +Update__30RapSheetRankingsTimerArraySlotP10ArrayDatumb = .text:0x801243B8; // type:function size:0x118 scope:global +__24uiRapSheetRankingsDetailP21ScreenConstructorData = .text:0x801244D0; // type:function size:0x1C4 scope:global +NotificationMessage__24uiRapSheetRankingsDetailUlP8FEObjectUlUl = .text:0x80124694; // type:function size:0xE8 scope:global +Setup__24uiRapSheetRankingsDetail = .text:0x8012477C; // type:function size:0x664 scope:global +RefreshHeader__24uiRapSheetRankingsDetail = .text:0x80124DE0; // type:function size:0xF0 scope:global +UpdateHighlight__24uiRapSheetRankingsDetail = .text:0x80124ED0; // type:function size:0x98 scope:global +React__12RepSheetIconPCcUiP8FEObjectUiUi = .text:0x80124F68; // type:function size:0x20 scope:global +__14uiRepSheetMainP21ScreenConstructorData = .text:0x80124F88; // type:function size:0x108 scope:global +_._14uiRepSheetMain = .text:0x80125090; // type:function size:0xC8 scope:global +NotifySoundMessage__14uiRepSheetMainUl18eMenuSoundTriggers = .text:0x80125158; // type:function size:0x28 scope:global +NotificationMessage__14uiRepSheetMainUlP8FEObjectUlUl = .text:0x80125180; // type:function size:0x268 scope:global +Setup__14uiRepSheetMain = .text:0x801253E8; // type:function size:0x298 scope:global +NotifyTextureLoaded__14uiRepSheetMain = .text:0x80125680; // type:function size:0x30 scope:global +GetDefeatedTexture__14uiRepSheetMain = .text:0x801256B0; // type:function size:0x138 scope:global +UpdateInfo__14uiRepSheetMain = .text:0x801257E8; // type:function size:0x538 scope:global +ScrollRival__14uiRepSheetMain10eScrollDir = .text:0x80125D20; // type:function size:0x114 scope:global +NotificationMessage__9RaceDatumUlP8FEObjectUlUl = .text:0x80125E34; // type:function size:0x2C scope:global +__20UISafehouseRaceSheetP21ScreenConstructorData = .text:0x80125E60; // type:function size:0x17C scope:global +_._20UISafehouseRaceSheet = .text:0x80125FDC; // type:function size:0x114 scope:global +NotifySoundMessage__20UISafehouseRaceSheetUl18eMenuSoundTriggers = .text:0x801260F0; // type:function size:0x58 scope:global +NotificationMessage__20UISafehouseRaceSheetUlP8FEObjectUlUl = .text:0x80126148; // type:function size:0x2B4 scope:global +RefreshHeader__20UISafehouseRaceSheet = .text:0x801263FC; // type:function size:0x6F0 scope:global +AddRace__20UISafehouseRaceSheetP15GRaceParameters = .text:0x80126AEC; // type:function size:0xC0 scope:global +Setup__20UISafehouseRaceSheet = .text:0x80126BAC; // type:function size:0x218 scope:global +ToggleList__20UISafehouseRaceSheet = .text:0x80126DC4; // type:function size:0x4 scope:global +__15uiRepSheetRivalP21ScreenConstructorData = .text:0x80126DC8; // type:function size:0xC4 scope:global +_._15uiRepSheetRival = .text:0x80126E8C; // type:function size:0x70 scope:global +NotifySoundMessage__15uiRepSheetRivalUl18eMenuSoundTriggers = .text:0x80126EFC; // type:function size:0x28 scope:global +NotificationMessage__15uiRepSheetRivalUlP8FEObjectUlUl = .text:0x80126F24; // type:function size:0x1EC scope:global +Setup__15uiRepSheetRival = .text:0x80127110; // type:function size:0x1B8 scope:global +NotifyTextureLoaded__15uiRepSheetRival = .text:0x801272C8; // type:function size:0x38 scope:global +GetDefeatedTexture__15uiRepSheetRival = .text:0x80127300; // type:function size:0xFC scope:global +RefreshHeader__15uiRepSheetRival = .text:0x801273FC; // type:function size:0x210 scope:global +SetupRace__15uiRepSheetRivalUiP15GRaceParameters = .text:0x8012760C; // type:function size:0x154 scope:global +__18uiRepSheetRivalBioP21ScreenConstructorData = .text:0x80127760; // type:function size:0x118 scope:global +NotificationMessage__18uiRepSheetRivalBioUlP8FEObjectUlUl = .text:0x80127878; // type:function size:0x264 scope:global +RefreshHeader__18uiRepSheetRivalBio = .text:0x80127ADC; // type:function size:0x188 scope:global +Setup__18uiRepSheetRivalBio = .text:0x80127C64; // type:function size:0x8C scope:global +NotificationMessage__14MilestoneDatumUlP8FEObjectUlUl = .text:0x80127CF0; // type:function size:0x38 scope:global +__20uiRepSheetMilestonesP21ScreenConstructorData = .text:0x80127D28; // type:function size:0x16C scope:global +NotifySoundMessage__20uiRepSheetMilestonesUl18eMenuSoundTriggers = .text:0x80127E94; // type:function size:0x58 scope:global +NotificationMessage__20uiRepSheetMilestonesUlP8FEObjectUlUl = .text:0x80127EEC; // type:function size:0x504 scope:global +Setup__20uiRepSheetMilestones = .text:0x801283F0; // type:function size:0x1C0 scope:global +RefreshTrack__20uiRepSheetMilestones = .text:0x801285B0; // type:function size:0x114 scope:global +AddMilestone__20uiRepSheetMilestonesP10GMilestone = .text:0x801286C4; // type:function size:0x94 scope:global +AddSpeedtrap__20uiRepSheetMilestonesP10GSpeedTrap = .text:0x80128758; // type:function size:0x80 scope:global +RefreshHeader__20uiRepSheetMilestones = .text:0x801287D8; // type:function size:0x498 scope:global +NotificationMessage__11BountyDatumUlP8FEObjectUlUl = .text:0x80128C70; // type:function size:0x44 scope:global +__16uiRepSheetBountyP21ScreenConstructorData = .text:0x80128CB4; // type:function size:0x16C scope:global +NotifySoundMessage__16uiRepSheetBountyUl18eMenuSoundTriggers = .text:0x80128E20; // type:function size:0x40 scope:global +NotificationMessage__16uiRepSheetBountyUlP8FEObjectUlUl = .text:0x80128E60; // type:function size:0x480 scope:global +Setup__16uiRepSheetBounty = .text:0x801292E0; // type:function size:0x1A0 scope:global +RefreshTrack__16uiRepSheetBounty = .text:0x80129480; // type:function size:0xE4 scope:global +RefreshHeader__16uiRepSheetBounty = .text:0x80129564; // type:function size:0x284 scope:global +__23uiRepSheetRivalStreamerPCcb = .text:0x801297E8; // type:function size:0xC0 scope:global +_._23uiRepSheetRivalStreamer = .text:0x801298A8; // type:function size:0xA0 scope:global +MakeSpaceInPoolCallback__23uiRepSheetRivalStreamer = .text:0x80129948; // type:function size:0x40 scope:global +TexturePackLoadedCallback__23uiRepSheetRivalStreamer = .text:0x80129988; // type:function size:0x28 scope:global +Init__23uiRepSheetRivalStreamerUiP7FEImageN22 = .text:0x801299B0; // type:function size:0x64 scope:global +LoadTextures__23uiRepSheetRivalStreamer = .text:0x80129A14; // type:function size:0x8C scope:global +UnloadTextures__23uiRepSheetRivalStreamer = .text:0x80129AA0; // type:function size:0x44 scope:global +CalcTexturesToLoad__23uiRepSheetRivalStreamerPUii = .text:0x80129AE4; // type:function size:0x10C scope:global +TexturesLoadedCallback__23uiRepSheetRivalStreamer = .text:0x80129BF0; // type:function size:0x128 scope:global +__23uiSafehouseRegionUnlockP21ScreenConstructorData = .text:0x80129D18; // type:function size:0x58 scope:global +_._23uiSafehouseRegionUnlock = .text:0x80129D70; // type:function size:0x50 scope:global +NotificationMessage__23uiSafehouseRegionUnlockUlP8FEObjectUlUl = .text:0x80129DC0; // type:function size:0x34 scope:global +Setup__23uiSafehouseRegionUnlock = .text:0x80129DF4; // type:function size:0xE4 scope:global +Init__19uiRepSheetRivalFlow = .text:0x80129ED8; // type:function size:0x38 scope:global +Get__19uiRepSheetRivalFlow = .text:0x80129F10; // type:function size:0xC scope:global +__19uiRepSheetRivalFlow = .text:0x80129F1C; // type:function size:0x1C scope:global +StartFlow__19uiRepSheetRivalFlowi = .text:0x80129F38; // type:function size:0x28 scope:global +Next__19uiRepSheetRivalFlow = .text:0x80129F60; // type:function size:0x2B8 scope:global +Draw__7CopItem = .text:0x8012A218; // type:function size:0x88 scope:global +Draw__8HeliItem = .text:0x8012A2A0; // type:function size:0xC4 scope:global +Act__14ItemTypeTogglePCcUi = .text:0x8012A364; // type:function size:0x88 scope:global +CheckMouse__14ItemTypeTogglePCcff = .text:0x8012A3EC; // type:function size:0x54 scope:global +Draw__14ItemTypeToggle = .text:0x8012A440; // type:function size:0xC4 scope:global +Position__14ItemTypeToggle = .text:0x8012A504; // type:function size:0x54 scope:global +UnsetFocus__14ItemTypeToggle = .text:0x8012A558; // type:function size:0xA4 scope:global +SetIcon__14ItemTypeToggleP7FEImageUiUi = .text:0x8012A5FC; // type:function size:0xA0 scope:global +Show__14ItemTypeToggle = .text:0x8012A69C; // type:function size:0x34 scope:global +Hide__14ItemTypeToggle = .text:0x8012A6D0; // type:function size:0x34 scope:global +SetGPSing__8WorldMapP5GIcon = .text:0x8012A704; // type:function size:0x38 scope:global +ClearGPSing__8WorldMap = .text:0x8012A73C; // type:function size:0x44 scope:global +__8WorldMapP21ScreenConstructorData = .text:0x8012A780; // type:function size:0x120 scope:global +_._8WorldMap = .text:0x8012A8A0; // type:function size:0x164 scope:global +NotificationMessage__8WorldMapUlP8FEObjectUlUl = .text:0x8012AA04; // type:function size:0x87C scope:global +ScrollZoom__8WorldMap10eScrollDir = .text:0x8012B280; // type:function size:0x100 scope:global +GetZoomFactor__8WorldMap19eWorldMapZoomLevels = .text:0x8012B380; // type:function size:0x50 scope:global +UpdateIconVisibility__8WorldMap17eWorldMapItemTypeb = .text:0x8012B3D0; // type:function size:0xA8 scope:global +ClearItems__8WorldMap = .text:0x8012B478; // type:function size:0xE0 scope:global +ClampToMapBounds__8WorldMapRfT1 = .text:0x8012B558; // type:function size:0xD8 scope:global +UpdateAnalogInput__8WorldMap = .text:0x8012B630; // type:function size:0x13C scope:global +UpdateCursor__8WorldMapb = .text:0x8012B76C; // type:function size:0x358 scope:global +MoveCursor__8WorldMapff = .text:0x8012BAC4; // type:function size:0x31C scope:global +SnapCursor__8WorldMap = .text:0x8012BDE0; // type:function size:0x1B4 scope:global +PanToCursor__8WorldMapf = .text:0x8012BF94; // type:function size:0x1A0 scope:global +PanToPlayer__8WorldMap = .text:0x8012C134; // type:function size:0x104 scope:global +Setup__8WorldMap = .text:0x8012C238; // type:function size:0x2FC scope:global +AddMapItemOption__8WorldMapUi17eWorldMapItemType = .text:0x8012C534; // type:function size:0x15C scope:global +AddPlayerCar__8WorldMap = .text:0x8012C690; // type:function size:0x180 scope:global +AddCops__8WorldMap = .text:0x8012C810; // type:function size:0x3C8 scope:global +AddRoadBlocks__8WorldMap = .text:0x8012CBD8; // type:function size:0x250 scope:global +AddIcon__8WorldMap17eWorldMapItemTypeUiP5GIcon = .text:0x8012CE28; // type:function size:0x160 scope:global +AddIcons__8WorldMapQ25GIcon4Type = .text:0x8012CF88; // type:function size:0xF0 scope:global +SetupNavigation__8WorldMap = .text:0x8012D078; // type:function size:0x54 scope:global +SetupEvent__8WorldMap = .text:0x8012D0CC; // type:function size:0x9C scope:global +SetupPursuit__8WorldMap = .text:0x8012D168; // type:function size:0x84 scope:global +ConvertPos__8WorldMapR8bVector2 = .text:0x8012D1EC; // type:function size:0x68 scope:global +ConvertRot__8WorldMapR8bVector2 = .text:0x8012D254; // type:function size:0x54 scope:global +DrawItemType__8WorldMap = .text:0x8012D2A8; // type:function size:0xB8 scope:global +DrawItemStats__8WorldMap = .text:0x8012D360; // type:function size:0x268 scope:global +RefreshHeader__8WorldMap = .text:0x8012D5C8; // type:function size:0x314 scope:global +NotificationMessage__8SMSDatumUlP8FEObjectUlUl = .text:0x8012D8DC; // type:function size:0x20 scope:global +Update__7SMSSlotP10ArrayDatumb = .text:0x8012D8FC; // type:function size:0x80 scope:global +__5uiSMSP21ScreenConstructorData = .text:0x8012D97C; // type:function size:0x1D4 scope:global +SortSMS__FP11SMSSortNodeT0 = .text:0x8012DB50; // type:function size:0x20 scope:global +Setup__5uiSMS = .text:0x8012DB70; // type:function size:0x35C scope:global +AddSMSDatum__5uiSMSP10SMSMessage = .text:0x8012DECC; // type:function size:0xC8 scope:global +AddSMSSlot__5uiSMSUi = .text:0x8012DF94; // type:function size:0xD8 scope:global +RefreshHeader__5uiSMS = .text:0x8012E06C; // type:function size:0x114 scope:global +NotificationMessage__5uiSMSUlP8FEObjectUlUl = .text:0x8012E180; // type:function size:0x43C scope:global +NotifySoundMessage__5uiSMSUl18eMenuSoundTriggers = .text:0x8012E5BC; // type:function size:0x68 scope:global +ScrollBoxes__5uiSMS10eScrollDir = .text:0x8012E624; // type:function size:0x30 scope:global +__12uiSMSMessageP21ScreenConstructorData = .text:0x8012E654; // type:function size:0xC0 scope:global +_._12uiSMSMessage = .text:0x8012E714; // type:function size:0x98 scope:global +Setup__12uiSMSMessage = .text:0x8012E7AC; // type:function size:0x114 scope:global +RefreshHeader__12uiSMSMessage = .text:0x8012E8C0; // type:function size:0x88 scope:global +NotifySoundMessage__12uiSMSMessageUl18eMenuSoundTriggers = .text:0x8012E948; // type:function size:0x50 scope:global +NotificationMessage__12uiSMSMessageUlP8FEObjectUlUl = .text:0x8012E998; // type:function size:0x20C scope:global +__12uiCareerCribP21ScreenConstructorData = .text:0x8012EBA4; // type:function size:0x44 scope:global +NotificationMessage__12uiCareerCribUlP8FEObjectUlUl = .text:0x8012EBE8; // type:function size:0x200 scope:global +Setup__12uiCareerCrib = .text:0x8012EDE8; // type:function size:0x340 scope:global +__15uiCareerManagerP21ScreenConstructorData = .text:0x8012F128; // type:function size:0x44 scope:global +NotificationMessage__15uiCareerManagerUlP8FEObjectUlUl = .text:0x8012F16C; // type:function size:0xF8 scope:global +Setup__15uiCareerManager = .text:0x8012F264; // type:function size:0x2A8 scope:global +__15FEGameWonScreenP21ScreenConstructorData = .text:0x8012F50C; // type:function size:0x2D8 scope:global +_._15FEGameWonScreen = .text:0x8012F7E4; // type:function size:0x30 scope:global +NotificationMessage__15FEGameWonScreenUlP8FEObjectUlUl = .text:0x8012F814; // type:function size:0x30 scope:global +QueuePackageSwitchForNextScreen__15FEGameWonScreen = .text:0x8012F844; // type:function size:0xE0 scope:global +Initialize__15FEGameWonScreen = .text:0x8012F924; // type:function size:0x10 scope:global +__11UnicodeFile = .text:0x8012F934; // type:function size:0x18 scope:global +_._11UnicodeFile = .text:0x8012F94C; // type:function size:0x40 scope:global +Load__11UnicodeFilePCc = .text:0x8012F98C; // type:function size:0x9C scope:global +Unload__11UnicodeFile = .text:0x8012FA28; // type:function size:0x40 scope:global +First__11UnicodeFile = .text:0x8012FA68; // type:function size:0x34 scope:global +Next__11UnicodeFile = .text:0x8012FA9C; // type:function size:0xB4 scope:global +FixEndian__11UnicodeFile = .text:0x8012FB50; // type:function size:0x48 scope:global +FixEOLs__11UnicodeFile = .text:0x8012FB98; // type:function size:0x40 scope:global +LineWrap__11UnicodeFilei = .text:0x8012FBD8; // type:function size:0xD0 scope:global +__9uiCreditsP21ScreenConstructorData = .text:0x8012FCA8; // type:function size:0xCC scope:global +NotificationMessage__9uiCreditsUlP8FEObjectUlUl = .text:0x8012FD74; // type:function size:0x3E4 scope:global +__19ControllerUnpluggedP21ScreenConstructorData = .text:0x80130158; // type:function size:0x50 scope:global +_._19ControllerUnplugged = .text:0x801301A8; // type:function size:0x30 scope:global +NotificationMessage__19ControllerUnpluggedUlP8FEObjectUlUl = .text:0x801301D8; // type:function size:0xAC scope:global +Setup__19ControllerUnplugged = .text:0x80130284; // type:function size:0x58 scope:global +__13cFEngJoyInput = .text:0x801302DC; // type:function size:0x88 scope:global +FlushActions__13cFEngJoyInput = .text:0x80130364; // type:function size:0x7C scope:global +JoyDisable__13cFEngJoyInput12JoystickPortb = .text:0x801303E0; // type:function size:0x98 scope:global +IsJoyPluggedIn__13cFEngJoyInput12JoystickPort = .text:0x80130478; // type:function size:0x28 scope:global +JoyEnable__13cFEngJoyInput12JoystickPortb = .text:0x801304A0; // type:function size:0xC0 scope:global +IsJoyEnabled__13cFEngJoyInput12JoystickPort = .text:0x80130560; // type:function size:0x7C scope:global +SetRequiredJoy__13cFEngJoyInput12JoystickPortb = .text:0x801305DC; // type:function size:0x38 scope:global +CheckUnplugged__13cFEngJoyInput = .text:0x80130614; // type:function size:0x1CC scope:global +HandleJoy__13cFEngJoyInput = .text:0x801307E0; // type:function size:0x300 scope:global +GetJoyPadMask__13cFEngJoyInputUc = .text:0x80130AE0; // type:function size:0x44 scope:global +FEngFindObject__FPCcUi = .text:0x80130B24; // type:function size:0x5C scope:global +FEngFindGroup__FPCcUi = .text:0x80130B80; // type:function size:0x38 scope:global +FEngSetInvisible__FP8FEObject = .text:0x80130BB8; // type:function size:0x74 scope:global +FEngSetVisible__FP8FEObject = .text:0x80130C2C; // type:function size:0x7C scope:global +FEngSetAllObjectsInPackageVisibility__FPCcb = .text:0x80130CA8; // type:function size:0x68 scope:global +FEngSetScript__FP8FEObjectUib = .text:0x80130D10; // type:function size:0x60 scope:global +FEngSetScript__FPCcUiUib = .text:0x80130D70; // type:function size:0x3C scope:global +FEngGetScript__FP8FEObjectUi = .text:0x80130DAC; // type:function size:0x30 scope:global +FEngGetScript__FPCcUiUi = .text:0x80130DDC; // type:function size:0x34 scope:global +FEngIsScriptSet__FPCcUiUi = .text:0x80130E10; // type:function size:0x34 scope:global +FEngIsScriptSet__FP8FEObjectUi = .text:0x80130E44; // type:function size:0x30 scope:global +FEngIsScriptRunning__FPCcUiUi = .text:0x80130E74; // type:function size:0x34 scope:global +FEngIsScriptRunning__FP8FEObjectUi = .text:0x80130EA8; // type:function size:0x3C scope:global +FEngSetRotationZ__FP8FEObjectf = .text:0x80130EE4; // type:function size:0xC0 scope:global +FEngSetMultiImageRot__FP12FEMultiImagef = .text:0x80130FA4; // type:function size:0x20 scope:global +FEngSetMultiImageBottomRightUVs__FP12FEMultiImageR9FEVector2i = .text:0x80130FC4; // type:function size:0x9C scope:global +FEngGetTopLeft__FP8FEObjectRfT1 = .text:0x80131060; // type:function size:0x1A4 scope:global +FEngSetTopLeft__FP8FEObjectff = .text:0x80131204; // type:function size:0x174 scope:global +FEngGetBottomRight__FP8FEObjectRfT1 = .text:0x80131378; // type:function size:0x1A4 scope:global +FEngSetBottomRight__FP8FEObjectff = .text:0x8013151C; // type:function size:0xE4 scope:global +FEngGetCenter__FP8FEObjectRfT1 = .text:0x80131600; // type:function size:0x190 scope:global +FEngSetCenter__FP8FEObjectff = .text:0x80131790; // type:function size:0x158 scope:global +FEngGetScaleX__FP8FEObject = .text:0x801318E8; // type:function size:0xC4 scope:global +FEngGetScaleY__FP8FEObject = .text:0x801319AC; // type:function size:0xC4 scope:global +FEngSetScaleX__FP8FEObjectf = .text:0x80131A70; // type:function size:0x100 scope:global +FEngSetScaleY__FP8FEObjectf = .text:0x80131B70; // type:function size:0x100 scope:global +FEngGetSize__FP8FEObjectRfT1 = .text:0x80131C70; // type:function size:0xF8 scope:global +FEngSetSize__FP8FEObjectff = .text:0x80131D68; // type:function size:0x6C scope:global +FEngGetBottomRightUV__FP7FEImageRfT1 = .text:0x80131DD4; // type:function size:0xAC scope:global +FEngSetBottomRightUV__FP7FEImageff = .text:0x80131E80; // type:function size:0xC0 scope:global +FEngSetColor__FP8FEObjectUi = .text:0x80131F40; // type:function size:0x44 scope:global +FEngGetObjectColor__FP8FEObject = .text:0x80131F84; // type:function size:0x68 scope:global +FixInvertedRect__FR6FERect = .text:0x80131FEC; // type:function size:0x3C scope:global +FEngTestForIntersection__FffP8FEObject = .text:0x80132028; // type:function size:0xC8 scope:global +FEngGet2DExtentsForMouse__FP8FEObjectR6FERectG9FEVector2 = .text:0x801320F0; // type:function size:0x200 scope:global +FEngFindImage__FPCci = .text:0x801322F0; // type:function size:0x38 scope:global +FEngGetTextureHash__FP7FEImage = .text:0x80132328; // type:function size:0x18 scope:global +FEngSetTextureHash__FP7FEImageUi = .text:0x80132340; // type:function size:0x28 scope:global +FEngSetButtonTexture__FP7FEImageUi = .text:0x80132368; // type:function size:0x28 scope:global +FEngFindString__FPCci = .text:0x80132390; // type:function size:0x38 scope:global +FEngSetLanguageHash__FP8FEStringUi = .text:0x801323C8; // type:function size:0x78 scope:global +FEngSetLanguageHash__FPCcUiUi = .text:0x80132440; // type:function size:0x98 scope:global +FESetString__FP8FEStringPCs = .text:0x801324D8; // type:function size:0x50 scope:global +DoFEngPrintf__FP8FEStringPci = .text:0x80132528; // type:function size:0x6C scope:local +DoFEngPrintf__FP8FEStringPCcP13__va_list_tag = .text:0x80132594; // type:function size:0x54 scope:local +FEPrintf__FP8FEStringPCce = .text:0x801325E8; // type:function size:0xAC scope:global +FEPrintf__FPCciT0e = .text:0x80132694; // type:function size:0x148 scope:global +FEPrintf__FPCcP8FEObjectT0e = .text:0x801327DC; // type:function size:0x138 scope:global +FEngSNPrintf__FPciPCce = .text:0x80132914; // type:function size:0x94 scope:global +FEngSetMovieName__FP7FEMoviePCc = .text:0x801329A8; // type:function size:0x44 scope:global +FEngSetCurrentButton__FPCcUi = .text:0x801329EC; // type:function size:0x8C scope:global +FEngGetCurrentButton__FPCc = .text:0x80132A78; // type:function size:0x48 scope:global +FEngSetButtonState__FPCcUib = .text:0x80132AC0; // type:function size:0xA8 scope:global +GetMovieNameEnum__FPCc = .text:0x80132B68; // type:function size:0x68 scope:local +CalculateMovieFilename__FPciPCc10eLanguages = .text:0x80132BD0; // type:function size:0xB0 scope:local +Callback__16FEngMovieStarterP8FEObject = .text:0x80132C80; // type:function size:0x174 scope:global +Callback__16FEngMovieStopperP8FEObject = .text:0x80132DF4; // type:function size:0x4C scope:global +Callback__17FEngHidePCObjectsP8FEObject = .text:0x80132E40; // type:function size:0x60 scope:global +Callback__27FEngTransferFlagsToChildrenP8FEObject = .text:0x80132EA0; // type:function size:0x98 scope:global +Callback__22RenderObjectDisconnectP8FEObject = .text:0x80132F38; // type:function size:0x2C scope:global +Callback__17ObjectDirtySetterP8FEObject = .text:0x80132F64; // type:function size:0x40 scope:global +Callback__22ObjectVisibilitySetterP8FEObject = .text:0x80132FA4; // type:function size:0x3C scope:global +GetBaseName__FPcPCc = .text:0x80132FE0; // type:function size:0xAC scope:local +__18cFEngGameInterface = .text:0x8013308C; // type:function size:0x24 scope:global +_._18cFEngGameInterface = .text:0x801330B0; // type:function size:0x34 scope:global +LoadResources__18cFEngGameInterfaceP9FEPackagelP17FEResourceRequest = .text:0x801330E4; // type:function size:0xF0 scope:global +UnloadResources__18cFEngGameInterfaceP9FEPackagelP17FEResourceRequest = .text:0x801331D4; // type:function size:0x64 scope:global +NotificationMessage__18cFEngGameInterfaceUlP8FEObjectUlUl = .text:0x80133238; // type:function size:0x6C scope:global +NotifySoundMessage__18cFEngGameInterfaceUlP8FEObjectUlUl = .text:0x801332A4; // type:function size:0x4C scope:global +GenerateRenderContext__18cFEngGameInterfaceUsP8FEObject = .text:0x801332F0; // type:function size:0x28 scope:global +GetContextTransform__18cFEngGameInterfaceUsR9FEMatrix4 = .text:0x80133318; // type:function size:0xD8 scope:global +RenderObject__18cFEngGameInterfaceP8FEObject = .text:0x801333F0; // type:function size:0xC4 scope:global +GetViewTransformation__18cFEngGameInterfaceP9FEMatrix4 = .text:0x801334B4; // type:function size:0x24 scope:global +BeginPackageRendering__18cFEngGameInterfaceP9FEPackage = .text:0x801334D8; // type:function size:0xB0 scope:global +EndPackageRendering__18cFEngGameInterfaceP9FEPackage = .text:0x80133588; // type:function size:0x28 scope:global +PackageWasLoaded__18cFEngGameInterfaceP9FEPackage = .text:0x801335B0; // type:function size:0x124 scope:global +PackageWillUnload__18cFEngGameInterfaceP9FEPackage = .text:0x801336D4; // type:function size:0x90 scope:global +HackClearCache__FP9FEPackage = .text:0x80133764; // type:function size:0x60 scope:global +GetPackageData__18cFEngGameInterfacePCcPPUcRb = .text:0x801337C4; // type:function size:0x3C scope:global +GetJoyPadMask__18cFEngGameInterfaceUc = .text:0x80133800; // type:function size:0x28 scope:global +GetMouseInfo__18cFEngGameInterfaceR11FEMouseInfo = .text:0x80133828; // type:function size:0x4 scope:global +DoesPointTouchObject__18cFEngGameInterfaceffP8FEObject = .text:0x8013382C; // type:function size:0x24 scope:global +OutputWarning__18cFEngGameInterfacePCc17FEng_WarningLevel = .text:0x80133850; // type:function size:0x4 scope:global +Init__5cFEng = .text:0x80133854; // type:function size:0x4C scope:global +__5cFEng = .text:0x801338A0; // type:function size:0x70 scope:global +PushErrorPackage__5cFEngPCciUl = .text:0x80133910; // type:function size:0x14C scope:global +PopErrorPackage__5cFEng = .text:0x80133A5C; // type:function size:0xD0 scope:global +PopErrorPackage__5cFEngi = .text:0x80133B2C; // type:function size:0xB0 scope:global +PauseAllSystems__5cFEng = .text:0x80133BDC; // type:function size:0x64 scope:global +ResumeAllSystems__5cFEngb = .text:0x80133C40; // type:function size:0x84 scope:global +QueuePackagePush__5cFEngPCciUlb = .text:0x80133CC4; // type:function size:0xF4 scope:global +QueuePackagePop__5cFEngi = .text:0x80133DB8; // type:function size:0xE8 scope:global +QueuePackageSwitch__5cFEngPCciUlb = .text:0x80133EA0; // type:function size:0xFC scope:global +PushNoControlPackage__5cFEngPCc19FE_PACKAGE_PRIORITY = .text:0x80133F9C; // type:function size:0x2C scope:global +PopNoControlPackage__5cFEngPCc = .text:0x80133FC8; // type:function size:0x44 scope:global +Service__5cFEng = .text:0x8013400C; // type:function size:0x74 scope:global +ServiceFengOnly__5cFEng = .text:0x80134080; // type:function size:0x2C scope:global +DrawForeground__5cFEng = .text:0x801340AC; // type:function size:0x24 scope:global +FindPackageWithControl__5cFEng = .text:0x801340D0; // type:function size:0x38 scope:global +FindPackageAtBase__5cFEng = .text:0x80134108; // type:function size:0x1C scope:global +FindPackageActive__5cFEngPCc = .text:0x80134124; // type:function size:0x28 scope:global +FindPackageIdle__5cFEngPCc = .text:0x8013414C; // type:function size:0x24 scope:global +FindPackage__5cFEngPCc = .text:0x80134170; // type:function size:0x9C scope:global +IsPackagePushed__5cFEngPCc = .text:0x8013420C; // type:function size:0x70 scope:global +IsPackageInControl__5cFEngPCc = .text:0x8013427C; // type:function size:0x50 scope:global +PrintLoadedPackages__5cFEng = .text:0x801342CC; // type:function size:0x4 scope:global +QueueMessage__5cFEngUiPCcP8FEObjectUi = .text:0x801342D0; // type:function size:0xA4 scope:global +QueueGameMessage__5cFEngUiPCcUi = .text:0x80134374; // type:function size:0x28 scope:global +QueueGameMessagePkg__5cFEngUiP9FEPackage = .text:0x8013439C; // type:function size:0x34 scope:global +QueuePackageMessage__5cFEngUiPCcP8FEObject = .text:0x801343D0; // type:function size:0x3C scope:global +QueueSoundMessage__5cFEngUiPCc = .text:0x8013440C; // type:function size:0x54 scope:global +MakeLoadedPackagesDirty__5cFEng = .text:0x80134460; // type:function size:0x78 scope:global +__9FEManager = .text:0x801344D8; // type:function size:0x5C scope:global +Init__9FEManager = .text:0x80134534; // type:function size:0x98 scope:global +InitInput__9FEManager = .text:0x801345CC; // type:function size:0x38 scope:global +Get__9FEManager = .text:0x80134604; // type:function size:0xC scope:global +GetGarageType__9FEManager = .text:0x80134610; // type:function size:0x8 scope:global +SetGarageType__9FEManager11eGarageType = .text:0x80134618; // type:function size:0x38 scope:global +GetGarageNameFromType__9FEManager = .text:0x80134650; // type:function size:0x90 scope:global +GetGaragePrefixFromType__9FEManager11eGarageType = .text:0x801346E0; // type:function size:0x7C scope:global +IsOkayToRequestPauseSimulation__9FEManageribT2 = .text:0x8013475C; // type:function size:0x2F0 scope:global +ShouldPauseSimulation__9FEManagerb = .text:0x80134A4C; // type:function size:0x90 scope:global +RequestPauseSimulation__9FEManagerPCc = .text:0x80134ADC; // type:function size:0x24 scope:global +RequestUnPauseSimulation__9FEManagerPCc = .text:0x80134B00; // type:function size:0x14 scope:global +WantControllerError__9FEManageri = .text:0x80134B14; // type:function size:0x190 scope:global +WaitingForControllerError__9FEManager = .text:0x80134CA4; // type:function size:0x34 scope:global +StartFE__9FEManager = .text:0x80134CD8; // type:function size:0x108 scope:global +StopFE__9FEManager = .text:0x80134DE0; // type:function size:0x54 scope:global +Render__9FEManager = .text:0x80134E34; // type:function size:0x38 scope:global +SteeringWheels_StopAllForces__Fv = .text:0x80134E6C; // type:function size:0xB0 scope:global +GetPortsPlayer__Fi = .text:0x80134F1C; // type:function size:0x54 scope:global +Update__9FEManager = .text:0x80134F70; // type:function size:0x36C scope:global +SetEATraxSecondButton__9FEManager = .text:0x801352DC; // type:function size:0xCC scope:global +__16FEAnyMovieScreenP21ScreenConstructorData = .text:0x801353A8; // type:function size:0xF8 scope:global +_._16FEAnyMovieScreen = .text:0x801354A0; // type:function size:0xA8 scope:global +Create__16FEAnyMovieScreenP21ScreenConstructorData = .text:0x80135548; // type:function size:0x38 scope:global +NotificationMessage__16FEAnyMovieScreenUlP8FEObjectUlUl = .text:0x80135580; // type:function size:0xB0 scope:global +LaunchMovie__16FEAnyMovieScreenPCcT1 = .text:0x80135630; // type:function size:0x68 scope:global +PlaySafehouseIntroMovie__16FEAnyMovieScreen = .text:0x80135698; // type:function size:0x40 scope:global +DismissMovie__16FEAnyMovieScreen = .text:0x801356D8; // type:function size:0x8C scope:global +SetMovieName__16FEAnyMovieScreenPCc = .text:0x80135764; // type:function size:0x30 scope:global +GetFEngPackageName__16FEAnyMovieScreen = .text:0x80135794; // type:function size:0x3C scope:global +__19FEAnyTutorialScreenP21ScreenConstructorData = .text:0x801357D0; // type:function size:0x2BC scope:global +Create__19FEAnyTutorialScreenP21ScreenConstructorData = .text:0x80135A8C; // type:function size:0x38 scope:global +_._19FEAnyTutorialScreen = .text:0x80135AC4; // type:function size:0x58 scope:global +NotificationMessage__19FEAnyTutorialScreenUlP8FEObjectUlUl = .text:0x80135B1C; // type:function size:0x94 scope:global +LaunchMovie__19FEAnyTutorialScreenPCcT1 = .text:0x80135BB0; // type:function size:0x68 scope:global +DismissMovie__19FEAnyTutorialScreenb = .text:0x80135C18; // type:function size:0x5C scope:global +SetMovieName__19FEAnyTutorialScreenPCc = .text:0x80135C74; // type:function size:0x30 scope:global +SetPackageName__19FEAnyTutorialScreenPCc = .text:0x80135CA4; // type:function size:0x3C scope:global +GamecubeMaybeAllocateFromCarLoader__FiPCci = .text:0x80135CE0; // type:function size:0xA0 scope:global +MoviePlayer_Bypass__Fv = .text:0x80135D80; // type:function size:0x3C scope:global +MoviePlayer_Play__Fv = .text:0x80135DBC; // type:function size:0x48 scope:global +Alloc__20ShapeMemoryAllocatorUiRCQ22EA12TagValuePair = .text:0x80135E04; // type:function size:0x10C scope:global +Free__20ShapeMemoryAllocatorPvUi = .text:0x80135F10; // type:function size:0x80 scope:global +AddRef__20ShapeMemoryAllocator = .text:0x80135F90; // type:function size:0x14 scope:global +Release__20ShapeMemoryAllocator = .text:0x80135FA4; // type:function size:0x5C scope:global +RCMP_PlayerAllocAlign__FPCciiii = .text:0x80136000; // type:function size:0xC8 scope:global +RCMP_PlayerFree__FPv = .text:0x801360C8; // type:function size:0x80 scope:global +MoviePlayer_StartUp__Fv = .text:0x80136148; // type:function size:0x48 scope:global +MoviePlayer_ShutDown__Fv = .text:0x80136190; // type:function size:0x5C scope:global +__11MoviePlayeri = .text:0x801361EC; // type:function size:0xF0 scope:global +_._11MoviePlayer = .text:0x801362DC; // type:function size:0x6C scope:global +Init__11MoviePlayerRQ211MoviePlayer8Settings = .text:0x80136348; // type:function size:0xA0 scope:global +ResetTimer__11MoviePlayer = .text:0x801363E8; // type:function size:0x34 scope:global +Play__11MoviePlayer = .text:0x8013641C; // type:function size:0x154 scope:global +Stop__11MoviePlayer = .text:0x80136570; // type:function size:0x30 scope:global +GetMovieCategoryVolume__11MoviePlayer = .text:0x801365A0; // type:function size:0xB4 scope:global +GetFirstFrame__11MoviePlayer = .text:0x80136654; // type:function size:0x50 scope:global +Update__11MoviePlayer = .text:0x801366A4; // type:function size:0x12C scope:global +UpdateFunction__11MoviePlayer = .text:0x801367D0; // type:function size:0xFC scope:global +GetMillisecondsPerFrame__11MoviePlayer = .text:0x801368CC; // type:function size:0x30 scope:global +HandleFatalError__11MoviePlayer = .text:0x801368FC; // type:function size:0x4 scope:global +GiveTheMoviePlayerBandwidth__Fv = .text:0x80136900; // type:function size:0x2C scope:global +__9SubTitler = .text:0x8013692C; // type:function size:0x3C scope:global +_._9SubTitler = .text:0x80136968; // type:function size:0x4C scope:global +ShouldShowSubTitles__9SubTitlerPCc = .text:0x801369B4; // type:function size:0x48 scope:global +BeginningMovie__9SubTitlerPCcT1 = .text:0x801369FC; // type:function size:0x58 scope:global +Load__9SubTitlerPCcT1 = .text:0x80136A54; // type:function size:0x190 scope:global +Unload__9SubTitler = .text:0x80136BE4; // type:function size:0x40 scope:global +GetElapsedTime__9SubTitler = .text:0x80136C24; // type:function size:0x74 scope:global +Update__9SubTitlerUi = .text:0x80136C98; // type:function size:0x130 scope:global +Start__9SubTitler = .text:0x80136DC8; // type:function size:0x30 scope:global +NotifyFirstFrame__9SubTitler = .text:0x80136DF8; // type:function size:0x30 scope:global +RefreshText__9SubTitler = .text:0x80136E28; // type:function size:0x228 scope:global +SetIsTutorialMovie__9SubTitlerPCc = .text:0x80137050; // type:function size:0xB4 scope:global +CreateUIProfileManager__FP21ScreenConstructorData = .text:0x80137104; // type:function size:0x38 scope:global +__16UIProfileManagerP21ScreenConstructorData = .text:0x8013713C; // type:function size:0x6C scope:global +Refresh__16UIProfileManager = .text:0x801371A8; // type:function size:0x100 scope:global +NotificationMessage__16UIProfileManagerUlP8FEObjectUlUl = .text:0x801372A8; // type:function size:0xB0 scope:global +Setup__16UIProfileManager = .text:0x80137358; // type:function size:0x174 scope:global +CreateUIDeleteProfile__FP21ScreenConstructorData = .text:0x801374CC; // type:function size:0x38 scope:global +__15UIDeleteProfileP21ScreenConstructorData = .text:0x80137504; // type:function size:0x6C scope:global +Setup__15UIDeleteProfile = .text:0x80137570; // type:function size:0xF0 scope:global +Refresh__15UIDeleteProfile = .text:0x80137660; // type:function size:0xD0 scope:global +NotificationMessage__15UIDeleteProfileUlP8FEObjectUlUl = .text:0x80137730; // type:function size:0x7C scope:global +CaptureJoyOp__F27MemoryCardJoyLoggableEvents = .text:0x801377AC; // type:function size:0x28 scope:global +ReplayJoyOp__Fv = .text:0x801377D4; // type:function size:0x3C scope:global +Delete__Q211RealmcIface16MemcardInterfacePCcPCw = .text:0x80137810; // type:function size:0x20 scope:global +__Q211RealmcIface8GameInfoPCwUibT3 = .text:0x80137830; // type:function size:0x20 scope:global +Load__Q211RealmcIface16MemcardInterfacePCcPcT2PCwPCQ211RealmcIface9TitleInfo = .text:0x80137850; // type:function size:0x20 scope:global +InitMemoryCard__Fv = .text:0x80137870; // type:function size:0x8C scope:global +__17MemoryCardMessagePCwUiPPCw = .text:0x801378FC; // type:function size:0x6C scope:global +__10MemoryCard = .text:0x80137968; // type:function size:0x14C scope:global +IsCardAvailable__10MemoryCard = .text:0x80137AB4; // type:function size:0x3C scope:global +SetExtraParam__10MemoryCardQ210MemoryCard8SaveTypePCcPvUi = .text:0x80137AF0; // type:function size:0x24 scope:global +InitCommand__10MemoryCardi = .text:0x80137B14; // type:function size:0x18 scope:global +RequestTask__10MemoryCardiPCc = .text:0x80137B2C; // type:function size:0xC scope:global +ProcessTask__10MemoryCard = .text:0x80137B38; // type:function size:0x94 scope:global +IsCardBusy__10MemoryCard = .text:0x80137BCC; // type:function size:0x7C scope:global +Init__10MemoryCard = .text:0x80137C48; // type:function size:0x1D0 scope:global +StartBootSequence__10MemoryCard = .text:0x80137E18; // type:function size:0x40 scope:global +EndBootSequence__10MemoryCard = .text:0x80137E58; // type:function size:0x38 scope:global +LoadLocale__10MemoryCard10eLanguages = .text:0x80137E90; // type:function size:0x140 scope:global +GetPrefixLength__10MemoryCard = .text:0x80137FD0; // type:function size:0x28 scope:global +GetPrefix__10MemoryCard = .text:0x80137FF8; // type:function size:0x24 scope:global +GetLocaleString__10MemoryCardi = .text:0x8013801C; // type:function size:0x30 scope:global +SetMessageMode__10MemoryCardUib = .text:0x8013804C; // type:function size:0x40 scope:global +Tick__10MemoryCardi = .text:0x8013808C; // type:function size:0x1F8 scope:global +MessageDone__10MemoryCardQ211RealmcIface14MessageChoices = .text:0x80138284; // type:function size:0x44 scope:global +BootupCheck__10MemoryCardPCc = .text:0x801382C8; // type:function size:0xB0 scope:global +ShouldDoAutoSave__10MemoryCardb = .text:0x80138378; // type:function size:0xE8 scope:global +StartAutoSave__10MemoryCardb = .text:0x80138460; // type:function size:0xB0 scope:global +DoAutoSave__10MemoryCard = .text:0x80138510; // type:function size:0x84 scope:global +EndAutoSave__10MemoryCard = .text:0x80138594; // type:function size:0x64 scope:global +StartListingOldSaveFiles__10MemoryCard = .text:0x801385F8; // type:function size:0x28 scope:global +EndListingOldSaveFiles__10MemoryCard = .text:0x80138620; // type:function size:0xA0 scope:global +SetMonitor__10MemoryCardb = .text:0x801386C0; // type:function size:0x70 scope:global +SetAutoSaveEnabled__10MemoryCardb = .text:0x80138730; // type:function size:0x17C scope:global +ShowOnlyAutoSaveMessages__10MemoryCard = .text:0x801388AC; // type:function size:0x124 scope:global +ShowMessages__10MemoryCardb = .text:0x801389D0; // type:function size:0x3C scope:global +CheckCard__10MemoryCardi = .text:0x80138A0C; // type:function size:0x48 scope:global +Save__10MemoryCardPCc = .text:0x80138A54; // type:function size:0x110 scope:global +List__10MemoryCardPCcPQ211RealmcIface9TitleInfo = .text:0x80138B64; // type:function size:0xA4 scope:global +Load__10MemoryCardPCc = .text:0x80138C08; // type:function size:0x100 scope:global +Delete__10MemoryCardPCc = .text:0x80138D08; // type:function size:0x8C scope:global +ListOldSaveFilesNGC__10MemoryCard = .text:0x80138D94; // type:function size:0x64 scope:global +ReleasePendingMessage__10MemoryCard = .text:0x80138DF8; // type:function size:0x40 scope:global +HandleAutoSaveError__10MemoryCard = .text:0x80138E38; // type:function size:0x64 scope:global +HandleAutoSaveOverwriteMessage__10MemoryCard = .text:0x80138E9C; // type:function size:0x64 scope:global +ShowAutoSaveIcon__10MemoryCard = .text:0x80138F00; // type:function size:0x1A4 scope:global +HideAutoSaveIcon__10MemoryCard = .text:0x801390A4; // type:function size:0x8C scope:global +IsAutoSaveIconVisible__10MemoryCard = .text:0x80139130; // type:function size:0xAC scope:global +DisplayStatus__Fi = .text:0x801391DC; // type:function size:0x4 scope:global +GetMemcard__16MemcardCallbacks = .text:0x801391E0; // type:function size:0xC scope:global +GetScreen__16MemcardCallbacks = .text:0x801391EC; // type:function size:0x10 scope:global +ShowMessage__16MemcardCallbacksPCwUiPPCw = .text:0x801391FC; // type:function size:0x1EC scope:global +ClearMessage__16MemcardCallbacks = .text:0x801393E8; // type:function size:0x88 scope:global +BootupCheckDone__16MemcardCallbacksQ211RealmcIface10CardStatusGQ211RealmcIface18BootupCheckResults = .text:0x80139470; // type:function size:0x1C8 scope:global +SaveCheckDone__16MemcardCallbacksQ211RealmcIface10TaskResultQ211RealmcIface10CardStatus = .text:0x80139638; // type:function size:0x38 scope:global +SaveDone__16MemcardCallbacksPCc = .text:0x80139670; // type:function size:0x21C scope:global +CheckLoadedData__16MemcardCallbacksPCc = .text:0x8013988C; // type:function size:0x3C scope:global +LoadDone__16MemcardCallbacksPCc = .text:0x801398C8; // type:function size:0x32C scope:global +DeleteDone__16MemcardCallbacksPCc = .text:0x80139BF4; // type:function size:0xD0 scope:global +ClearEntries__16MemcardCallbacks = .text:0x80139CC4; // type:function size:0x38 scope:global +FoundEntry__16MemcardCallbacksPCQ211RealmcIface9EntryInfo = .text:0x80139CFC; // type:function size:0x200 scope:global +FindEntriesDone__16MemcardCallbacksQ211RealmcIface10CardStatus = .text:0x80139EFC; // type:function size:0x140 scope:global +Retry__16MemcardCallbacksQ211RealmcIface10CardStatus = .text:0x8013A03C; // type:function size:0x94 scope:global +Failed__16MemcardCallbacksQ211RealmcIface10TaskResultQ211RealmcIface10CardStatus = .text:0x8013A0D0; // type:function size:0x47C scope:global +CardChanged__16MemcardCallbacksQ211RealmcIface10TaskResultQ211RealmcIface10CardStatus = .text:0x8013A54C; // type:function size:0x78 scope:global +CardChecked__16MemcardCallbacksPCQ211RealmcIface8CardInfo = .text:0x8013A5C4; // type:function size:0x29C scope:global +CardRemoved__16MemcardCallbacks = .text:0x8013A860; // type:function size:0x118 scope:global +SetAutosaveDone__16MemcardCallbacksQ211RealmcIface10TaskResultQ211RealmcIface10CardStatusQ211RealmcIface13AutosaveState = .text:0x8013A978; // type:function size:0x2A0 scope:global +SetMonitorDone__16MemcardCallbacksQ211RealmcIface10CardStatusQ211RealmcIface12MonitorState = .text:0x8013AC18; // type:function size:0x120 scope:global +LoadReady__16MemcardCallbacksPCcUiUiRPcT4 = .text:0x8013AD38; // type:function size:0xD4 scope:global +EmulateMemoryCardLibrary__10IJoyHelperi = .text:0x8013AE0C; // type:function size:0x2DC scope:global +DisplayUnicode__FPCw = .text:0x8013B0E8; // type:function size:0x1C scope:global +DisplayMessage__FPCwUiPPCw = .text:0x8013B104; // type:function size:0x5C scope:global +NotificationMessage__13UIMemcardBootUlP8FEObjectUlUl = .text:0x8013B160; // type:function size:0x110 scope:global +NotifySoundMessage__13UIMemcardBootUl18eMenuSoundTriggers = .text:0x8013B270; // type:function size:0x8 scope:global +CreateMemCardBootScreen__FP21ScreenConstructorData = .text:0x8013B278; // type:function size:0x80 scope:global +CreateMemcardMainMenu__FP21ScreenConstructorData = .text:0x8013B2F8; // type:function size:0x58 scope:global +__13UIMemcardMainP21ScreenConstructorData = .text:0x8013B350; // type:function size:0x5C scope:global +DoSelect__13UIMemcardMainPCc = .text:0x8013B3AC; // type:function size:0x94 scope:global +ListDone__13UIMemcardMain = .text:0x8013B440; // type:function size:0x1DC scope:global +NotificationMessage__13UIMemcardMainUlP8FEObjectUlUl = .text:0x8013B61C; // type:function size:0x42C scope:global +__17UIMemcardKeyboardP21ScreenConstructorData = .text:0x8013BA48; // type:function size:0xAC scope:global +Setup__17UIMemcardKeyboard = .text:0x8013BAF4; // type:function size:0x94 scope:global +ShowKeyboard__17UIMemcardKeyboard = .text:0x8013BB88; // type:function size:0x8C scope:global +NotificationMessage__17UIMemcardKeyboardUlP8FEObjectUlUl = .text:0x8013BC14; // type:function size:0x48 scope:global +__13UIMemcardBaseP21ScreenConstructorData = .text:0x8013BC5C; // type:function size:0x74 scope:global +_._13UIMemcardBase = .text:0x8013BCD0; // type:function size:0xF4 scope:global +Abort__13UIMemcardBase = .text:0x8013BDC4; // type:function size:0x38 scope:global +AddItem__13UIMemcardBasePCcT1ii = .text:0x8013BDFC; // type:function size:0x8C scope:global +IsProfile__13UIMemcardBasePCc = .text:0x8013BE88; // type:function size:0x34 scope:global +EmptyFileList__13UIMemcardBase = .text:0x8013BEBC; // type:function size:0x54 scope:global +InitCompleteDoList__13UIMemcardBase = .text:0x8013BF10; // type:function size:0x9C scope:global +InitComplete__13UIMemcardBase = .text:0x8013BFAC; // type:function size:0x3D0 scope:global +ExitComplete__13UIMemcardBase = .text:0x8013C37C; // type:function size:0x454 scope:global +NotifySoundMessage__13UIMemcardBaseUl18eMenuSoundTriggers = .text:0x8013C7D0; // type:function size:0x38 scope:global +NotificationMessage__13UIMemcardBaseUlP8FEObjectUlUl = .text:0x8013C808; // type:function size:0x2DC scope:global +HandleButtonPressed__13UIMemcardBaseUlP8FEObjectUlUlb = .text:0x8013CAE4; // type:function size:0x484 scope:global +HideAllButtons__13UIMemcardBase = .text:0x8013CF68; // type:function size:0x70 scope:global +ShowButton__13UIMemcardBaseibPs = .text:0x8013CFD8; // type:function size:0x108 scope:global +SetButtonText__13UIMemcardBasePsN21 = .text:0x8013D0E0; // type:function size:0x154 scope:global +SetMessage__13UIMemcardBasePs = .text:0x8013D234; // type:function size:0x7C scope:global +ShowOK__13UIMemcardBaseUiUi = .text:0x8013D2B0; // type:function size:0xF4 scope:global +ShowYesNo__13UIMemcardBaseUiUi = .text:0x8013D3A4; // type:function size:0x10C scope:global +SetScreenVisible__13UIMemcardBasebi = .text:0x8013D4B0; // type:function size:0xF0 scope:global +SetIcon__13UIMemcardBaseUi = .text:0x8013D5A0; // type:function size:0x5C scope:global +TranslateButton__13UIMemcardBaseP8FEObject = .text:0x8013D5FC; // type:function size:0x9C scope:global +SetupPromptNoProfileFound__13UIMemcardBase = .text:0x8013D698; // type:function size:0x2C scope:global +SetupPromptSaveConfirm__13UIMemcardBase = .text:0x8013D6C4; // type:function size:0xB0 scope:global +SetupAutoSaveConfirmPrompt__13UIMemcardBase = .text:0x8013D774; // type:function size:0x190 scope:global +SetupPromptForSave__13UIMemcardBase = .text:0x8013D904; // type:function size:0x80 scope:global +SetupPromptCorruptProfile__13UIMemcardBase = .text:0x8013D984; // type:function size:0x64 scope:global +SetupPromptAutoSaveEnableFailedNoCard__13UIMemcardBase = .text:0x8013D9E8; // type:function size:0x2C scope:global +Setup__13UIMemcardBase = .text:0x8013DA14; // type:function size:0x6C scope:global +SetStringCheckingCard__13UIMemcardBase = .text:0x8013DA80; // type:function size:0x7C scope:global +ShowKeyboard__13UIMemcardBase = .text:0x8013DAFC; // type:function size:0x44 scope:global +DoSaveFlow__13UIMemcardBasei = .text:0x8013DB40; // type:function size:0x220 scope:global +SetMessageBlurbText__13UIMemcardBasePs = .text:0x8013DD60; // type:function size:0x54 scope:global +SetMessageBlurbText__13UIMemcardBasePc = .text:0x8013DDB4; // type:function size:0x68 scope:global +SetMessageBlurbText__13UIMemcardBaseUi = .text:0x8013DE1C; // type:function size:0x68 scope:global +FindScreenSize__13UIMemcardBasePCw = .text:0x8013DE84; // type:function size:0xF0 scope:global +GetAutoSaveWarning__13UIMemcardBase = .text:0x8013DF74; // type:function size:0xC scope:global +GetAutoSaveWarning2__13UIMemcardBase = .text:0x8013DF80; // type:function size:0xC scope:global +ShowMessage__13UIMemcardBaseP17MemoryCardMessage = .text:0x8013DF8C; // type:function size:0x3C scope:global +ShowMessage__13UIMemcardBasePCwUiT1N21 = .text:0x8013DFC8; // type:function size:0x13C scope:global +ActivateChild__13UIMemcardBase = .text:0x8013E104; // type:function size:0x2C scope:global +PopChild__13UIMemcardBase = .text:0x8013E130; // type:function size:0x64 scope:global +HandleAutoSaveError__13UIMemcardBase = .text:0x8013E194; // type:function size:0x114 scope:global +HandleAutoSaveOverwriteMessage__13UIMemcardBase = .text:0x8013E2A8; // type:function size:0x98 scope:global +__13UIMemcardListP21ScreenConstructorData = .text:0x8013E340; // type:function size:0x26C scope:global +_._13UIMemcardList = .text:0x8013E5AC; // type:function size:0xE4 scope:global +CreateMemcardListFiles__FP21ScreenConstructorData = .text:0x8013E690; // type:function size:0x4C scope:global +NotificationMessage__13UIMemcardListUlP8FEObjectUlUl = .text:0x8013E6DC; // type:function size:0x328 scope:global +AddItem__13UIMemcardListPCcT1ii = .text:0x8013EA04; // type:function size:0x11C scope:global +MemcardEnter__FPCcT0UiPFPv_vPvUiUi = .text:0x8013EB20; // type:function size:0x120 scope:global +MemcardExit__FUi = .text:0x8013EC40; // type:function size:0xB0 scope:global +MemcardGetCurrentUIOperation__Fv = .text:0x8013ECF0; // type:function size:0x10 scope:global +__static_initialization_and_destruction_0 = .text:0x8013ED00; // type:function size:0xDC scope:local +__as__9FEVector2RC9FEVector2 = .text:0x8013EDDC; // type:function size:0x18 scope:global +__as__9FEVector3RC9FEVector3 = .text:0x8013EDF4; // type:function size:0x20 scope:global +SetTime__5Timerf = .text:0x8013EE14; // type:function size:0x30 scope:global +_._16FEObjectCallback = .text:0x8013EE44; // type:function size:0x34 scope:global +UnloadUnreferencedLibrary__15FEGameInterfaceP9FEPackage = .text:0x8013EE78; // type:function size:0x8 scope:global +RenderObjectList__15FEGameInterfaceP17FEObjectListEntryUl = .text:0x8013EE80; // type:function size:0x60 scope:global +DrawMousePointer__15FEGameInterfaceR7FEMouse = .text:0x8013EEE0; // type:function size:0x4 scope:global +SetCellData__15FEGameInterfaceP13FECodeListBoxUlUl = .text:0x8013EEE4; // type:function size:0x8 scope:global +DebugMessageQueued__15FEGameInterfaceUlP8FEObjectP9FEPackageT2Ul = .text:0x8013EEEC; // type:function size:0x4 scope:global +DebugMessageProcessed__15FEGameInterfaceUlP8FEObjectT2P9FEPackageUl = .text:0x8013EEF0; // type:function size:0x4 scope:global +DebugMessageBeginUpdate__15FEGameInterface = .text:0x8013EEF4; // type:function size:0x4 scope:global +DebugMessageEndUpdate__15FEGameInterface = .text:0x8013EEF8; // type:function size:0x4 scope:global +Enable__8FEWidget = .text:0x8013EEFC; // type:function size:0xC scope:global +Disable__8FEWidget = .text:0x8013EF08; // type:function size:0xC scope:global +SetPosX__8FEWidgetf = .text:0x8013EF14; // type:function size:0x20 scope:global +SetPosY__8FEWidgetf = .text:0x8013EF34; // type:function size:0x20 scope:global +_._6UIMain = .text:0x8013EF54; // type:function size:0x98 scope:global +_._7OMAudio = .text:0x8013EFEC; // type:function size:0x34 scope:global +_._7OMVideo = .text:0x8013F020; // type:function size:0x34 scope:global +_._10OMGameplay = .text:0x8013F054; // type:function size:0x34 scope:global +_._8OMPlayer = .text:0x8013F088; // type:function size:0x34 scope:global +_._12OMController = .text:0x8013F0BC; // type:function size:0x34 scope:global +_._8OMEATrax = .text:0x8013F0F0; // type:function size:0x34 scope:global +_._9OMCredits = .text:0x8013F124; // type:function size:0x34 scope:global +_._14AOSFXMasterVol = .text:0x8013F158; // type:function size:0x40 scope:global +_._22AOInteractiveMusicMode = .text:0x8013F198; // type:function size:0x34 scope:global +_._17AOEATraxMusicMode = .text:0x8013F1CC; // type:function size:0x34 scope:global +_._8AOCarVol = .text:0x8013F200; // type:function size:0x40 scope:global +_._11AOSpeechVol = .text:0x8013F240; // type:function size:0x40 scope:global +_._12AOFEMusicVol = .text:0x8013F280; // type:function size:0x40 scope:global +_._12AOIGMusicVol = .text:0x8013F2C0; // type:function size:0x40 scope:global +_._11AOAudioMode = .text:0x8013F300; // type:function size:0x34 scope:global +_._12VOWideScreen = .text:0x8013F334; // type:function size:0x34 scope:global +_._8GODamage = .text:0x8013F368; // type:function size:0x34 scope:global +_._10GOAutoSave = .text:0x8013F39C; // type:function size:0x34 scope:global +_._10GOJumpCams = .text:0x8013F3D0; // type:function size:0x34 scope:global +_._10GORearview = .text:0x8013F404; // type:function size:0x34 scope:global +_._13GOSpeedoUnits = .text:0x8013F438; // type:function size:0x34 scope:global +_._15GORacingMiniMap = .text:0x8013F46C; // type:function size:0x34 scope:global +_._18GOExploringMiniMap = .text:0x8013F4A0; // type:function size:0x34 scope:global +_._14POTransmission = .text:0x8013F4D4; // type:function size:0x34 scope:global +_._10PODriveCam = .text:0x8013F508; // type:function size:0x34 scope:global +_._8POGauges = .text:0x8013F53C; // type:function size:0x34 scope:global +_._10POPosition = .text:0x8013F570; // type:function size:0x34 scope:global +_._7POScore = .text:0x8013F5A4; // type:function size:0x34 scope:global +_._11POSplitTime = .text:0x8013F5D8; // type:function size:0x34 scope:global +_._13POLeaderBoard = .text:0x8013F60C; // type:function size:0x34 scope:global +_._11COVibration = .text:0x8013F640; // type:function size:0x34 scope:global +_._8COConfig = .text:0x8013F674; // type:function size:0x34 scope:global +_._13UIOptionsMain = .text:0x8013F6A8; // type:function size:0x98 scope:global +SetFlag__5GIconUi = .text:0x8013F740; // type:function size:0x10 scope:global +ClearFlag__5GIconUi = .text:0x8013F750; // type:function size:0x10 scope:global +Clear__15MemoryCardSetup = .text:0x8013F760; // type:function size:0x38 scope:global +Clear__Q26Realmc15SystemInterface = .text:0x8013F798; // type:function size:0x18 scope:global +_._10MainCareer = .text:0x8013F7B0; // type:function size:0x34 scope:global +React__10MainCareerPCcUiP8FEObjectUiUi = .text:0x8013F7E4; // type:function size:0x50 scope:global +_._9Challenge = .text:0x8013F834; // type:function size:0x34 scope:global +React__9ChallengePCcUiP8FEObjectUiUi = .text:0x8013F868; // type:function size:0xB4 scope:global +_._13MainQuickRace = .text:0x8013F91C; // type:function size:0x34 scope:global +React__13MainQuickRacePCcUiP8FEObjectUiUi = .text:0x8013F950; // type:function size:0x28 scope:global +_._13MainCustomize = .text:0x8013F978; // type:function size:0x34 scope:global +React__13MainCustomizePCcUiP8FEObjectUiUi = .text:0x8013F9AC; // type:function size:0x28 scope:global +_._18MainProfileManager = .text:0x8013F9D4; // type:function size:0x34 scope:global +React__18MainProfileManagerPCcUiP8FEObjectUiUi = .text:0x8013FA08; // type:function size:0x28 scope:global +_._11MainOptions = .text:0x8013FA30; // type:function size:0x34 scope:global +React__11MainOptionsPCcUiP8FEObjectUiUi = .text:0x8013FA64; // type:function size:0x28 scope:global +_._17UIOptionsTrailers = .text:0x8013FA8C; // type:function size:0x98 scope:global +_._12ArrayScripts = .text:0x8013FB24; // type:function size:0x34 scope:global +_GetKind__20MNotifyRaceAbandoned = .text:0x8013FB58; // type:function size:0x64 scope:global +_._13pm_ResumeRace = .text:0x8013FBBC; // type:function size:0x34 scope:global +React__13pm_ResumeRacePCcUiP8FEObjectUiUi = .text:0x8013FBF0; // type:function size:0x58 scope:global +_._17pm_ResumeFreeRoam = .text:0x8013FC48; // type:function size:0x34 scope:global +React__17pm_ResumeFreeRoamPCcUiP8FEObjectUiUi = .text:0x8013FC7C; // type:function size:0x58 scope:global +_._14pm_RestartRace = .text:0x8013FCD4; // type:function size:0x34 scope:global +React__14pm_RestartRacePCcUiP8FEObjectUiUi = .text:0x8013FD08; // type:function size:0x98 scope:global +_._18pm_SwitchToOptions = .text:0x8013FDA0; // type:function size:0x34 scope:global +React__18pm_SwitchToOptionsPCcUiP8FEObjectUiUi = .text:0x8013FDD4; // type:function size:0x58 scope:global +_._17pm_SwitchToTuning = .text:0x8013FE2C; // type:function size:0x34 scope:global +React__17pm_SwitchToTuningPCcUiP8FEObjectUiUi = .text:0x8013FE60; // type:function size:0xA4 scope:global +_._15pm_QuitMainMenu = .text:0x8013FF04; // type:function size:0x34 scope:global +React__15pm_QuitMainMenuPCcUiP8FEObjectUiUi = .text:0x8013FF38; // type:function size:0x98 scope:global +_._16pm_QuitQuickRace = .text:0x8013FFD0; // type:function size:0x34 scope:global +React__16pm_QuitQuickRacePCcUiP8FEObjectUiUi = .text:0x80140004; // type:function size:0x98 scope:global +_._21pm_QuitRaceToFreeRoam = .text:0x8014009C; // type:function size:0x34 scope:global +React__21pm_QuitRaceToFreeRoamPCcUiP8FEObjectUiUi = .text:0x801400D0; // type:function size:0x98 scope:global +_._15pm_QuitRaceToFE = .text:0x80140168; // type:function size:0x34 scope:global +React__15pm_QuitRaceToFEPCcUiP8FEObjectUiUi = .text:0x8014019C; // type:function size:0x12C scope:global +MakeSpaceInPoolCallbackBridge__18UITrackMapStreameri = .text:0x801402C8; // type:function size:0x20 scope:global +_._17ScrollerDatumNode = .text:0x801402E8; // type:function size:0x34 scope:global +_._16ScrollerSlotNode = .text:0x8014031C; // type:function size:0x34 scope:global +_._12ScrollerSlot = .text:0x80140350; // type:function size:0x90 scope:global +_._20JukeBoxScrollerDatum = .text:0x801403E0; // type:function size:0x90 scope:global +_._19JukeBoxScrollerSlot = .text:0x80140470; // type:function size:0x90 scope:global +_._15uiRapSheetLogin = .text:0x80140500; // type:function size:0x30 scope:global +_._14uiRapSheetMain = .text:0x80140530; // type:function size:0x8C scope:global +_._12uiRapSheetRS = .text:0x801405BC; // type:function size:0x30 scope:global +ClassKey__Q36Attrib3Gen8frontend = .text:0x801405EC; // type:function size:0xC scope:global +_._15RapSheetUSDatum = .text:0x801405F8; // type:function size:0x34 scope:global +NotificationMessage__15RapSheetUSDatumUlP8FEObjectUlUl = .text:0x8014062C; // type:function size:0x4 scope:global +_._19RapSheetUSArraySlot = .text:0x80140630; // type:function size:0x34 scope:global +_._12uiRapSheetUS = .text:0x80140664; // type:function size:0xF0 scope:global +_._15RapSheetVDDatum = .text:0x80140754; // type:function size:0x34 scope:global +NotificationMessage__15RapSheetVDDatumUlP8FEObjectUlUl = .text:0x80140788; // type:function size:0x4 scope:global +_._19RapSheetVDArraySlot = .text:0x8014078C; // type:function size:0x34 scope:global +_._12uiRapSheetVD = .text:0x801407C0; // type:function size:0xF0 scope:global +_._16RapSheetCTSDatum = .text:0x801408B0; // type:function size:0x34 scope:global +NotificationMessage__16RapSheetCTSDatumUlP8FEObjectUlUl = .text:0x801408E4; // type:function size:0x4 scope:global +_._20RapSheetCTSArraySlot = .text:0x801408E8; // type:function size:0x34 scope:global +_._13uiRapSheetCTS = .text:0x8014091C; // type:function size:0xF0 scope:global +_._13uiRapSheetTEP = .text:0x80140A0C; // type:function size:0x8C scope:global +_._12uiRapSheetPD = .text:0x80140A98; // type:function size:0x30 scope:global +_._18uiRapSheetRankings = .text:0x80140AC8; // type:function size:0x30 scope:global +_._21RapSheetRankingsDatum = .text:0x80140AF8; // type:function size:0x34 scope:global +NotificationMessage__21RapSheetRankingsDatumUlP8FEObjectUlUl = .text:0x80140B2C; // type:function size:0x4 scope:global +_._25RapSheetRankingsArraySlot = .text:0x80140B30; // type:function size:0x34 scope:global +_._30RapSheetRankingsTimerArraySlot = .text:0x80140B64; // type:function size:0x34 scope:global +_._24uiRapSheetRankingsDetail = .text:0x80140B98; // type:function size:0xF0 scope:global +MakeSpaceInPoolCallbackBridge__23uiRepSheetRivalStreameri = .text:0x80140C88; // type:function size:0x20 scope:global +TexturePackLoadedCallbackBridge__23uiRepSheetRivalStreamerPv = .text:0x80140CA8; // type:function size:0x20 scope:global +TexturesLoadedCallbackBridge__23uiRepSheetRivalStreamerPv = .text:0x80140CC8; // type:function size:0x20 scope:global +_._12RepSheetIcon = .text:0x80140CE8; // type:function size:0x34 scope:global +TextureLoadedCallback__14uiRepSheetMainUi = .text:0x80140D1C; // type:function size:0x20 scope:global +TextureLoadedCallback__15uiRepSheetRivalUi = .text:0x80140D3C; // type:function size:0x20 scope:global +_._9RaceDatum = .text:0x80140D5C; // type:function size:0x34 scope:global +_._7MapItem = .text:0x80140D90; // type:function size:0x34 scope:global +UpdatePos__7MapItemR8bVector2 = .text:0x80140DC4; // type:function size:0x2C scope:global +UpdateScale__7MapItemf = .text:0x80140DF0; // type:function size:0x38 scope:global +Draw__7MapItem = .text:0x80140E28; // type:function size:0x4 scope:global +Show__7MapItem = .text:0x80140E2C; // type:function size:0x24 scope:global +Hide__7MapItem = .text:0x80140E50; // type:function size:0x24 scope:global +ResetSize__7MapItem = .text:0x80140E74; // type:function size:0x30 scope:global +_._7CopItem = .text:0x80140EA4; // type:function size:0x34 scope:global +_._8HeliItem = .text:0x80140ED8; // type:function size:0x34 scope:global +UpdatePos__8HeliItemR8bVector2 = .text:0x80140F0C; // type:function size:0x4C scope:global +UpdateScale__8HeliItemf = .text:0x80140F58; // type:function size:0x54 scope:global +Show__8HeliItem = .text:0x80140FAC; // type:function size:0x38 scope:global +Hide__8HeliItem = .text:0x80140FE4; // type:function size:0x38 scope:global +ResetSize__8HeliItem = .text:0x8014101C; // type:function size:0x40 scope:global +_._14ItemTypeToggle = .text:0x8014105C; // type:function size:0x34 scope:global +GetScale__t10FixedPoint3ZUsi10Ui2 = .text:0x80141090; // type:function size:0x58 scope:global +_._19uiRepSheetRivalFlow = .text:0x801410E8; // type:function size:0x34 scope:global +_GetKind__18MFlowReadyForOutro = .text:0x8014111C; // type:function size:0x64 scope:global +_._18uiRepSheetRivalBio = .text:0x80141180; // type:function size:0x50 scope:global +IsFlagSet__C10GSpeedTrapUi = .text:0x801411D0; // type:function size:0x18 scope:global +IsFlagClear__C10GSpeedTrapUi = .text:0x801411E8; // type:function size:0x14 scope:global +_._14MilestoneDatum = .text:0x801411FC; // type:function size:0x34 scope:global +GetType__14MilestoneDatum = .text:0x80141230; // type:function size:0x8 scope:global +_._14SpeedTrapDatum = .text:0x80141238; // type:function size:0x34 scope:global +GetType__14SpeedTrapDatum = .text:0x8014126C; // type:function size:0x8 scope:global +_._20uiRepSheetMilestones = .text:0x80141274; // type:function size:0x12C scope:global +_._11BountyDatum = .text:0x801413A0; // type:function size:0x34 scope:global +_._16uiRepSheetBounty = .text:0x801413D4; // type:function size:0x12C scope:global +_._8SMSDatum = .text:0x80141500; // type:function size:0x34 scope:global +_._7SMSSlot = .text:0x80141534; // type:function size:0x34 scope:global +_._5uiSMS = .text:0x80141568; // type:function size:0xF0 scope:global +_._12uiCareerCrib = .text:0x80141658; // type:function size:0x98 scope:global +_._15CResumeFreeRoam = .text:0x801416F0; // type:function size:0x34 scope:global +React__15CResumeFreeRoamPCcUiP8FEObjectUiUi = .text:0x80141724; // type:function size:0xB0 scope:global +_._10CCarSelect = .text:0x801417D4; // type:function size:0x34 scope:global +React__10CCarSelectPCcUiP8FEObjectUiUi = .text:0x80141808; // type:function size:0x4C scope:global +_._9CRapSheet = .text:0x80141854; // type:function size:0x34 scope:global +React__9CRapSheetPCcUiP8FEObjectUiUi = .text:0x80141888; // type:function size:0x60 scope:global +_._6CTop15 = .text:0x801418E8; // type:function size:0x34 scope:global +React__6CTop15PCcUiP8FEObjectUiUi = .text:0x8014191C; // type:function size:0x64 scope:global +_._5CSave = .text:0x80141980; // type:function size:0x34 scope:global +React__5CSavePCcUiP8FEObjectUiUi = .text:0x801419B4; // type:function size:0x48 scope:global +_._15uiCareerManager = .text:0x801419FC; // type:function size:0x98 scope:global +_._13CResumeCareer = .text:0x80141A94; // type:function size:0x34 scope:global +React__13CResumeCareerPCcUiP8FEObjectUiUi = .text:0x80141AC8; // type:function size:0x10C scope:global +_._15CStartNewCareer = .text:0x80141BD4; // type:function size:0x34 scope:global +React__15CStartNewCareerPCcUiP8FEObjectUiUi = .text:0x80141C08; // type:function size:0xC8 scope:global +_._11CLoadCareer = .text:0x80141CD0; // type:function size:0x34 scope:global +React__11CLoadCareerPCcUiP8FEObjectUiUi = .text:0x80141D04; // type:function size:0x80 scope:global +_._9uiCredits = .text:0x80141D84; // type:function size:0x50 scope:global +_._16FEngMovieStarter = .text:0x80141DD4; // type:function size:0x34 scope:global +_._16FEngMovieStopper = .text:0x80141E08; // type:function size:0x34 scope:global +_._17FEngHidePCObjects = .text:0x80141E3C; // type:function size:0x34 scope:global +_._27FEngTransferFlagsToChildren = .text:0x80141E70; // type:function size:0x34 scope:global +_._22RenderObjectDisconnect = .text:0x80141EA4; // type:function size:0x34 scope:global +_._17ObjectDirtySetter = .text:0x80141ED8; // type:function size:0x34 scope:global +_._22ObjectVisibilitySetter = .text:0x80141F0C; // type:function size:0x34 scope:global +_._24FEngSetGroupLanguageHash = .text:0x80141F40; // type:function size:0x34 scope:global +Callback__24FEngSetGroupLanguageHashP8FEObject = .text:0x80141F74; // type:function size:0x3C scope:global +_._17FEngGroupFEPrintf = .text:0x80141FB0; // type:function size:0x34 scope:global +Callback__17FEngGroupFEPrintfP8FEObject = .text:0x80141FE4; // type:function size:0x40 scope:global +_._20ShapeMemoryAllocator = .text:0x80142024; // type:function size:0x34 scope:global +_._6PMSave = .text:0x80142058; // type:function size:0x34 scope:global +React__6PMSavePCcUiP8FEObjectUiUi = .text:0x8014208C; // type:function size:0x48 scope:global +_._6PMLoad = .text:0x801420D4; // type:function size:0x34 scope:global +React__6PMLoadPCcUiP8FEObjectUiUi = .text:0x80142108; // type:function size:0x50 scope:global +_._8PMDelete = .text:0x80142158; // type:function size:0x34 scope:global +React__8PMDeletePCcUiP8FEObjectUiUi = .text:0x8014218C; // type:function size:0x48 scope:global +_._11PMCreateNew = .text:0x801421D4; // type:function size:0x34 scope:global +React__11PMCreateNewPCcUiP8FEObjectUiUi = .text:0x80142208; // type:function size:0x48 scope:global +_._16UIProfileManager = .text:0x80142250; // type:function size:0x98 scope:global +_._15UIDeleteProfile = .text:0x801422E8; // type:function size:0x98 scope:global +_._17UIMemcardKeyboard = .text:0x80142380; // type:function size:0x30 scope:global +Abort__17UIMemcardKeyboard = .text:0x801423B0; // type:function size:0x4 scope:global +DoSelect__13UIMemcardBasePCc = .text:0x801423B4; // type:function size:0x4 scope:global +_._13UIMemcardMain = .text:0x801423B8; // type:function size:0x30 scope:global +_._7MyMutex = .text:0x801423E8; // type:function size:0x50 scope:global +CreateInstance__7MyMutex = .text:0x80142438; // type:function size:0x78 scope:global +AddRef__7MyMutex = .text:0x801424B0; // type:function size:0x14 scope:global +Release__7MyMutex = .text:0x801424C4; // type:function size:0x5C scope:global +Lock__7MyMutex = .text:0x80142520; // type:function size:0x24 scope:global +Unlock__7MyMutex = .text:0x80142544; // type:function size:0x24 scope:global +_._8MyThread = .text:0x80142568; // type:function size:0x64 scope:global +CreateInstance__8MyThread = .text:0x801425CC; // type:function size:0x74 scope:global +AddRef__8MyThread = .text:0x80142640; // type:function size:0x14 scope:global +Release__8MyThread = .text:0x80142654; // type:function size:0x5C scope:global +SetStackSize__8MyThreadUi = .text:0x801426B0; // type:function size:0x8 scope:global +Begin__8MyThreadPFPv_i = .text:0x801426B8; // type:function size:0x60 scope:global +WaitForEnd__8MyThreadi = .text:0x80142718; // type:function size:0x4C scope:global +Sleep__8MyThreadi = .text:0x80142764; // type:function size:0x24 scope:global +SetPriority__8MyThreadi = .text:0x80142788; // type:function size:0x30 scope:global +_._13UIMemcardBoot = .text:0x801427B8; // type:function size:0x30 scope:global +_._11FEMemWidget = .text:0x801427E8; // type:function size:0x90 scope:global +_._8FEWidget = .text:0x80142878; // type:function size:0x34 scope:global +SetPos__8FEWidgetR8bVector2 = .text:0x801428AC; // type:function size:0x20 scope:global +SetTopLeftX__8FEWidgetf = .text:0x801428CC; // type:function size:0x8 scope:global +SetTopLeftY__8FEWidgetf = .text:0x801428D4; // type:function size:0x8 scope:global +_._10IconOption = .text:0x801428DC; // type:function size:0x34 scope:global +_._10ArrayDatum = .text:0x80142910; // type:function size:0x34 scope:global +NotificationMessage__10ArrayDatumUlP8FEObjectUlUl = .text:0x80142944; // type:function size:0x4 scope:global +_._13ScrollerDatum = .text:0x80142948; // type:function size:0x90 scope:global +RaiseToPower__H1i10_i_i = .text:0x801429D8; // type:function size:0x38 scope:global +EntryProc__8MyThreadPv = .text:0x80142A10; // type:function size:0x60 scope:global +SetTopLeft__8FEWidgetR8bVector2 = .text:0x80142A70; // type:function size:0x14 scope:global +GetEntryFunc__8MyThread = .text:0x80142A84; // type:function size:0x8 scope:global +IsActive__8MyThread = .text:0x80142A8C; // type:function size:0x8 scope:global +_GLOBAL_.I.gOnlineMainMenu = .text:0x80142A94; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x80142AC0; // type:label scope:local +__10HudElementPCcUx = .text:0x80142AC0; // type:function size:0x40 scope:global +RegisterString__10HudElementUi = .text:0x80142B00; // type:function size:0x58 scope:global +RegisterImage__10HudElementUi = .text:0x80142B58; // type:function size:0x58 scope:global +RegisterMultiImage__10HudElementUi = .text:0x80142BB0; // type:function size:0x58 scope:global +RegisterObject__10HudElementUi = .text:0x80142C08; // type:function size:0x58 scope:global +RegisterGroup__10HudElementUi = .text:0x80142C60; // type:function size:0x8C scope:global +Toggle__10HudElementUx = .text:0x80142CEC; // type:function size:0x8C scope:global +__12GetAwayMeterPQ33UTL3COM6ObjectPCci = .text:0x80142D78; // type:function size:0xDC scope:global +Update__12GetAwayMeterP7IPlayer = .text:0x80142E54; // type:function size:0x4 scope:global +__13RadarDetectorPQ33UTL3COM6ObjectPCci = .text:0x80142E58; // type:function size:0x14C scope:global +Update__13RadarDetectorP7IPlayer = .text:0x80142FA4; // type:function size:0x67C scope:global +__9HeatMeterPQ33UTL3COM6ObjectPCci = .text:0x80143620; // type:function size:0xF8 scope:global +Update__9HeatMeterP7IPlayer = .text:0x80143718; // type:function size:0x28C scope:global +SetVehicleHeat__9HeatMeterf = .text:0x801439A4; // type:function size:0x1C scope:global +SetPursuitHeat__9HeatMeterf = .text:0x801439C0; // type:function size:0x1C scope:global +__11CostToStatePQ33UTL3COM6ObjectPCci = .text:0x801439DC; // type:function size:0x104 scope:global +Update__11CostToStateP7IPlayer = .text:0x80143AE0; // type:function size:0x104 scope:global +SetCostToState__11CostToStatei = .text:0x80143BE4; // type:function size:0x38 scope:global +__10ReputationPQ33UTL3COM6ObjectPCci = .text:0x80143C1C; // type:function size:0xD8 scope:global +Update__10ReputationP7IPlayer = .text:0x80143CF4; // type:function size:0xCC scope:global +SetReputationCareer__10Reputationi = .text:0x80143DC0; // type:function size:0x1C scope:global +SetReputationPursuit__10Reputationi = .text:0x80143DDC; // type:function size:0x4 scope:global +Init__21ChoppedMiniMapManager = .text:0x80143DE0; // type:function size:0x48 scope:global +__21ChoppedMiniMapManageri = .text:0x80143E28; // type:function size:0x58 scope:global +Loader__21ChoppedMiniMapManagerP6bChunk = .text:0x80143E80; // type:function size:0x88 scope:global +Unloader__21ChoppedMiniMapManagerP6bChunk = .text:0x80143F08; // type:function size:0x70 scope:global +SetMapHeader__21ChoppedMiniMapManagerPc = .text:0x80143F78; // type:function size:0x30 scope:global +GetTextureName__21ChoppedMiniMapManagerPcii = .text:0x80143FA8; // type:function size:0x40 scope:global +UncompressMaps__21ChoppedMiniMapManagerPsi = .text:0x80143FE8; // type:function size:0x1B0 scope:global +GetVehicleVectors__FP8bVector2T0P8ISimable = .text:0x80144198; // type:function size:0xE8 scope:global +LoaderMiniMap__FP6bChunk = .text:0x80144280; // type:function size:0x2C scope:local +UnloaderMiniMap__FP6bChunk = .text:0x801442AC; // type:function size:0x2C scope:local +__7MinimapPCci = .text:0x801442D8; // type:function size:0x3E4 scope:global +_._7Minimap = .text:0x801446BC; // type:function size:0xD4 scope:global +SetupMinimap__7MinimapP7IPlayer = .text:0x80144790; // type:function size:0x684 scope:global +RefreshMapItems__7Minimap = .text:0x80144E14; // type:function size:0x8C scope:global +ConvertPos__7MinimapR8bVector2T1P9TrackInfo = .text:0x80144EA0; // type:function size:0x40 scope:global +Update__7MinimapP7IPlayer = .text:0x80144EE0; // type:function size:0x268 scope:global +UpdateTrackMapArt__7Minimap = .text:0x80145148; // type:function size:0x90 scope:global +UpdateElementArt__7MinimapP8bVector2T1P8FEObjectb = .text:0x801451D8; // type:function size:0x2B0 scope:global +UpdateCopElements__7MinimapP8IVehicle = .text:0x80145488; // type:function size:0x464 scope:global +UpdateAiRacerElements__7Minimap = .text:0x801458EC; // type:function size:0x100 scope:global +UpdatePlayer2Element__7Minimap = .text:0x801459EC; // type:function size:0x84 scope:global +UpdateIconElement__7MinimapP7FEImageP5GIcon = .text:0x80145A70; // type:function size:0xD4 scope:global +UpdateRaceElements__7Minimap = .text:0x80145B44; // type:function size:0x20 scope:global +AdjustForWidescreen__7Minimapb = .text:0x80145B64; // type:function size:0xB4 scope:global +UpdateMiniMapItems__7Minimap = .text:0x80145C18; // type:function size:0xB0 scope:global +InitStaticMiniMapItems__7Minimap = .text:0x80145CC8; // type:function size:0x4 scope:global +UpdateGameplayIcons__7MinimapP7IPlayer = .text:0x80145CCC; // type:function size:0x160 scope:global +__9CountdownPQ33UTL3COM6ObjectPCci = .text:0x80145E2C; // type:function size:0xE4 scope:global +Update__9CountdownP7IPlayer = .text:0x80145F10; // type:function size:0x3DC scope:global +BeginCountdown__9Countdown = .text:0x801462EC; // type:function size:0x38 scope:global +IsActive__9Countdown = .text:0x80146324; // type:function size:0x18 scope:global +GetSecondsBeforeRaceStart__9Countdown = .text:0x8014633C; // type:function size:0x98 scope:global +__14GenericMessagePQ33UTL3COM6ObjectPCci = .text:0x801463D4; // type:function size:0xD8 scope:global +Update__14GenericMessageP7IPlayer = .text:0x801464AC; // type:function size:0xDC scope:global +RequestGenericMessage__14GenericMessagePCcbUiUiUi23GenericMessage_Priority = .text:0x80146588; // type:function size:0x1BC scope:global +RequestGenericMessageZoomOut__14GenericMessageUi = .text:0x80146744; // type:function size:0x64 scope:global +IsGenericMessageShowing__14GenericMessage = .text:0x801467A8; // type:function size:0x18 scope:global +__15RaceOverMessagePQ33UTL3COM6ObjectPCci = .text:0x801467C0; // type:function size:0x88 scope:global +Update__15RaceOverMessageP7IPlayer = .text:0x80146848; // type:function size:0x11C scope:global +RequestRaceOverMessage__15RaceOverMessageP7IPlayer = .text:0x80146964; // type:function size:0x628 scope:global +DismissRaceOverMessage__15RaceOverMessage = .text:0x80146F8C; // type:function size:0x10 scope:global +__12NitrousGaugePQ33UTL3COM6ObjectPCci = .text:0x80146F9C; // type:function size:0xC4 scope:global +Update__12NitrousGaugeP7IPlayer = .text:0x80147060; // type:function size:0x90 scope:global +SetNos__12NitrousGaugef = .text:0x801470F0; // type:function size:0xDC scope:global +__17SpeedBreakerMeterPQ33UTL3COM6ObjectPCci = .text:0x801471CC; // type:function size:0x124 scope:global +Update__17SpeedBreakerMeterP7IPlayer = .text:0x801472F0; // type:function size:0x1D8 scope:global +SetPursuitLevel__17SpeedBreakerMeterf = .text:0x801474C8; // type:function size:0x1C scope:global +__15EngineTempGaugePQ33UTL3COM6ObjectPCci = .text:0x801474E4; // type:function size:0xE4 scope:global +Update__15EngineTempGaugeP7IPlayer = .text:0x801475C8; // type:function size:0x1D0 scope:global +SetEngineTemp__15EngineTempGaugef = .text:0x80147798; // type:function size:0x1C scope:global +__11SpeedometerPQ33UTL3COM6ObjectPCci = .text:0x801477B4; // type:function size:0x114 scope:global +Update__11SpeedometerP7IPlayer = .text:0x801478C8; // type:function size:0x1E8 scope:global +CalcAngleForRPM__Fff = .text:0x80147AB0; // type:function size:0xA4 scope:local +__10TachometerPQ33UTL3COM6ObjectPCci = .text:0x80147B54; // type:function size:0x180 scope:global +Update__10TachometerP7IPlayer = .text:0x80147CD4; // type:function size:0x280 scope:global +GetLetterForGear__10Tachometer6GearID = .text:0x80147F54; // type:function size:0x94 scope:global +__10WrongWIndiPQ33UTL3COM6ObjectPCci = .text:0x80147FE8; // type:function size:0xA8 scope:global +Update__10WrongWIndiP7IPlayer = .text:0x80148090; // type:function size:0x1D8 scope:global +SetWrongWay__10WrongWIndib = .text:0x80148268; // type:function size:0x44 scope:global +__15RaceInformationPQ33UTL3COM6ObjectPCci = .text:0x801482AC; // type:function size:0x1A0 scope:global +Update__15RaceInformationP7IPlayer = .text:0x8014844C; // type:function size:0x29C scope:global +__11LeaderBoardPQ33UTL3COM6ObjectPCci = .text:0x801486E8; // type:function size:0x254 scope:global +Update__11LeaderBoardP7IPlayer = .text:0x8014893C; // type:function size:0x550 scope:global +SetRacerName__11LeaderBoardiPCc = .text:0x80148E8C; // type:function size:0x3C scope:global +SetRacerNum__11LeaderBoardii = .text:0x80148EC8; // type:function size:0x18 scope:global +SetRacerTotalPoints__11LeaderBoardif = .text:0x80148EE0; // type:function size:0x18 scope:global +SetRacerNumLapsCompleted__11LeaderBoardiifP7IPlayer = .text:0x80148EF8; // type:function size:0x88 scope:global +SetRacerPercentComplete__11LeaderBoardiffP7IPlayer = .text:0x80148F80; // type:function size:0x1D4 scope:global +SetRacerHasHeadset__11LeaderBoardib = .text:0x80149154; // type:function size:0x18 scope:global +ShowSplitTime__11LeaderBoardP7IPlayer = .text:0x8014916C; // type:function size:0x2E4 scope:global +ShowLapTime__C11LeaderBoardP7IPlayer = .text:0x80149450; // type:function size:0x144 scope:global +__14MilestoneBoardPQ33UTL3COM6ObjectPCci = .text:0x80149594; // type:function size:0x1F4 scope:global +Update__14MilestoneBoardP7IPlayer = .text:0x80149788; // type:function size:0x55C scope:global +GetNumIncompleteMilestones__C14MilestoneBoard = .text:0x80149CE4; // type:function size:0x44 scope:global +GetNumCompleteMilestones__C14MilestoneBoard = .text:0x80149D28; // type:function size:0x44 scope:global +GetNextVisibleMilestone__C14MilestoneBoard = .text:0x80149D6C; // type:function size:0x84 scope:global +GetFirstIncompleteMilestone__C14MilestoneBoard = .text:0x80149DF0; // type:function size:0x40 scope:global +SetMilestoneComplete__14MilestoneBoardib = .text:0x80149E30; // type:function size:0x10 scope:global +SetMilestoneCurrValue__14MilestoneBoardif = .text:0x80149E40; // type:function size:0xDC scope:global +GetIsMilestoneComplete__C14MilestoneBoardi = .text:0x80149F1C; // type:function size:0x24 scope:global +__12PursuitBoardPQ33UTL3COM6ObjectPCci = .text:0x80149F40; // type:function size:0x2D8 scope:global +Update__12PursuitBoardP7IPlayer = .text:0x8014A218; // type:function size:0x91C scope:global +SetInPursuit__12PursuitBoardb = .text:0x8014AB34; // type:function size:0x14 scope:global +SetIsHiding__12PursuitBoardb = .text:0x8014AB48; // type:function size:0x14 scope:global +SetTimeUntilHidden__12PursuitBoardf = .text:0x8014AB5C; // type:function size:0x14 scope:global +SetTimeUntilBusted__12PursuitBoardfb = .text:0x8014AB70; // type:function size:0xFC scope:global +SetTimeUntilBackup__12PursuitBoardf = .text:0x8014AC6C; // type:function size:0x14 scope:global +SetIsInView__12PursuitBoardb = .text:0x8014AC80; // type:function size:0x14 scope:global +SetPursuitDuration__12PursuitBoardf = .text:0x8014AC94; // type:function size:0x2C scope:global +SetCooldownTimeRemaining__12PursuitBoardf = .text:0x8014ACC0; // type:function size:0x14 scope:global +SetCooldownTimeRequired__12PursuitBoardf = .text:0x8014ACD4; // type:function size:0x8 scope:global +SetNumCopsInPursuit__12PursuitBoardi = .text:0x8014ACDC; // type:function size:0x108 scope:global +SetNumCopsDestroyed__12PursuitBoardiG6UCrc32ii = .text:0x8014ADE4; // type:function size:0x2C4 scope:global +SetNumCopsDamaged__12PursuitBoardi = .text:0x8014B0A8; // type:function size:0x70 scope:global +SetTotalNumCopsInvolved__12PursuitBoardi = .text:0x8014B118; // type:function size:0x14 scope:global +SetHeliInvolvedInPursuit__12PursuitBoardb = .text:0x8014B12C; // type:function size:0x14 scope:global +SetPursuitRep__12PursuitBoardi = .text:0x8014B140; // type:function size:0x14 scope:global +__13TimeExtensionPQ33UTL3COM6ObjectPCci = .text:0x8014B154; // type:function size:0x9C scope:global +Update__13TimeExtensionP7IPlayer = .text:0x8014B1F0; // type:function size:0x59C scope:global +RequestTimeExtensionMessage__13TimeExtensionP7IPlayerf = .text:0x8014B78C; // type:function size:0xC0 scope:global +__11BustedMeterPQ33UTL3COM6ObjectPCci = .text:0x8014B84C; // type:function size:0x98 scope:global +Update__11BustedMeterP7IPlayer = .text:0x8014B8E4; // type:function size:0x4 scope:global +__10TurboMeterPQ33UTL3COM6ObjectPCci = .text:0x8014B8E8; // type:function size:0xEC scope:global +Update__10TurboMeterP7IPlayer = .text:0x8014B9D4; // type:function size:0xC0 scope:global +CalcNeedleAngle__10TurboMeterfff = .text:0x8014BA94; // type:function size:0x24 scope:global +SetInductionPsi__10TurboMeterf = .text:0x8014BAB8; // type:function size:0x1C scope:global +__15MenuZoneTriggerPQ33UTL3COM6ObjectPCci = .text:0x8014BAD4; // type:function size:0xE0 scope:global +Update__15MenuZoneTriggerP7IPlayer = .text:0x8014BBB4; // type:function size:0xFC scope:global +ShouldSeeMenuZoneCluster__15MenuZoneTrigger = .text:0x8014BCB0; // type:function size:0x18 scope:global +IsPlayerInsideTrigger__15MenuZoneTrigger = .text:0x8014BCC8; // type:function size:0x2C scope:global +EnterTrigger__15MenuZoneTriggerP16GRuntimeInstance = .text:0x8014BCF4; // type:function size:0x78 scope:global +EnterTrigger__15MenuZoneTriggerPCc = .text:0x8014BD6C; // type:function size:0x64 scope:global +ExitTrigger__15MenuZoneTrigger = .text:0x8014BDD0; // type:function size:0x34 scope:global +RequestEventInfoDialog__15MenuZoneTriggeri = .text:0x8014BE04; // type:function size:0x80 scope:global +RequestZoneInfoDialog__15MenuZoneTriggeri = .text:0x8014BE84; // type:function size:0xB8 scope:global +IsType__15MenuZoneTriggerPCc = .text:0x8014BF3C; // type:function size:0x2C scope:global +RequestDoAction__15MenuZoneTrigger = .text:0x8014BF68; // type:function size:0x100 scope:global +HideDPadButton__15MenuZoneTrigger = .text:0x8014C068; // type:function size:0x24C scope:global +PulseDPadButton__15MenuZoneTriggerQ215MenuZoneTrigger29ENGAGE_DPAD_ELEMENT_DIRECTIONP8FEObject = .text:0x8014C2B4; // type:function size:0x170 scope:global +__18HudResourceManager = .text:0x8014C424; // type:function size:0x20 scope:global +GetHudTexPackFilename__18HudResourceManager14ePlayerHudType = .text:0x8014C444; // type:function size:0x50 scope:global +GetCarPart__18HudResourceManager14ePlayerHudType11CAR_SLOT_ID = .text:0x8014C494; // type:function size:0xC8 scope:global +GetCustomHudColour__18HudResourceManager14ePlayerHudType11CAR_SLOT_ID = .text:0x8014C55C; // type:function size:0xB8 scope:global +GetCustomHudTexPackFilename__18HudResourceManager14ePlayerHudTypePc = .text:0x8014C614; // type:function size:0xAC scope:global +GetHudFengName__18HudResourceManager14ePlayerHudType = .text:0x8014C6C0; // type:function size:0x7C scope:global +ChooseMinimapTextureName__18HudResourceManager14ePlayerHudTypePcUiT2Ui = .text:0x8014C73C; // type:function size:0x190 scope:global +ChooseLoadableTextures__18HudResourceManager14ePlayerHudTypeRiRf = .text:0x8014C8CC; // type:function size:0x560 scope:global +LoadRequiredResources__18HudResourceManager14ePlayerHudTypePCc = .text:0x8014CE2C; // type:function size:0xD0 scope:global +LoadingCompleteCallback__18HudResourceManager = .text:0x8014CEFC; // type:function size:0x210 scope:global +LoadedCustomHudTexturePackCallback__18HudResourceManager = .text:0x8014D10C; // type:function size:0xC0 scope:global +LoadedCustomHudTexturesCallback__18HudResourceManager = .text:0x8014D1CC; // type:function size:0x14C scope:global +UnloadRequiredResources__18HudResourceManager14ePlayerHudType = .text:0x8014D318; // type:function size:0x178 scope:global +AreResourcesLoaded__18HudResourceManager14ePlayerHudType = .text:0x8014D490; // type:function size:0x68 scope:global +__7FEngHud14ePlayerHudTypePCcP7IPlayeri = .text:0x8014D4F8; // type:function size:0x64C scope:global +_._7FEngHud = .text:0x8014DB44; // type:function size:0x6A0 scope:global +Update__7FEngHudP7IPlayerf = .text:0x8014E1E4; // type:function size:0xA28 scope:global +FadeAll__7FEngHudb = .text:0x8014EC0C; // type:function size:0xB4 scope:global +SetInPursuit__7FEngHudb = .text:0x8014ECC0; // type:function size:0x14 scope:global +JoyDisable__7FEngHud = .text:0x8014ECD4; // type:function size:0x68 scope:global +JoyEnable__7FEngHud = .text:0x8014ED3C; // type:function size:0x78 scope:global +JoyHandle__7FEngHudP7IPlayer = .text:0x8014EDB4; // type:function size:0x4B4 scope:global +DetermineHudFeatures__7FEngHudP7IPlayer = .text:0x8014F268; // type:function size:0x6B0 scope:global +AreResourcesLoaded__7FEngHud = .text:0x8014F918; // type:function size:0x2C scope:global +SetHudFeatures__7FEngHudUx = .text:0x8014F944; // type:function size:0x45C scope:global +SetWideScreenMode__7FEngHud = .text:0x8014FDA0; // type:function size:0xB4 scope:global +HideEverySingleHud__Fv = .text:0x8014FE54; // type:function size:0x70 scope:global +RefreshMiniMapItems__7FEngHud = .text:0x8014FEC4; // type:function size:0x2C scope:global +ShouldRearViewMirrorBeVisible__7FEngHud8EVIEW_ID = .text:0x8014FEF0; // type:function size:0x170 scope:global +ChooseMaxRpmTextureNumber__7FEngHudf = .text:0x80150060; // type:function size:0x50 scope:global +__12ShiftUpdaterPQ33UTL3COM6ObjectPCci = .text:0x801500B0; // type:function size:0x134 scope:global +Update__12ShiftUpdaterP7IPlayer = .text:0x801501E4; // type:function size:0x294 scope:global +__14DragTachometerPQ33UTL3COM6ObjectPCci = .text:0x80150478; // type:function size:0x1FC scope:global +Update__14DragTachometerP7IPlayer = .text:0x80150674; // type:function size:0x200 scope:global +CalcAngleForRPMDrag__14DragTachometerff = .text:0x80150874; // type:function size:0x7C scope:global +__11InfractionsPQ33UTL3COM6ObjectPCci = .text:0x801508F0; // type:function size:0x118 scope:global +Update__11InfractionsP7IPlayer = .text:0x80150A08; // type:function size:0xB0 scope:global +RequestInfraction__11InfractionsPCc = .text:0x80150AB8; // type:function size:0xD0 scope:global +__28PostPursuitInfractionsScreenP21ScreenConstructorData = .text:0x80150B88; // type:function size:0x39C scope:global +_._28PostPursuitInfractionsScreen = .text:0x80150F24; // type:function size:0x5C scope:global +NotifyBustedTextureLoaded__28PostPursuitInfractionsScreen = .text:0x80150F80; // type:function size:0x30 scope:global +CalcBustedTexture__28PostPursuitInfractionsScreen = .text:0x80150FB0; // type:function size:0x134 scope:global +NotificationMessage__28PostPursuitInfractionsScreenUlP8FEObjectUlUl = .text:0x801510E4; // type:function size:0x314 scope:global +__10FadeScreenP21ScreenConstructorData = .text:0x801513F8; // type:function size:0x3C scope:global +_._10FadeScreen = .text:0x80151434; // type:function size:0x30 scope:global +NotificationMessage__10FadeScreenUlP8FEObjectUlUl = .text:0x80151464; // type:function size:0x54 scope:global +IsFadeScreenOn__10FadeScreen = .text:0x801514B8; // type:function size:0x48 scope:global +__19BustedOverlayScreenP21ScreenConstructorData = .text:0x80151500; // type:function size:0x310 scope:global +_._19BustedOverlayScreen = .text:0x80151810; // type:function size:0x30 scope:global +__6ChyronP21ScreenConstructorData = .text:0x80151840; // type:function size:0x44 scope:global +InitChyron__Fv = .text:0x80151884; // type:function size:0x30 scope:global +CreateChyronScreen__FP21ScreenConstructorData = .text:0x801518B4; // type:function size:0x2C scope:global +NotificationMessage__6ChyronUlP8FEObjectUlUl = .text:0x801518E0; // type:function size:0xAC scope:global +Start__6Chyron = .text:0x8015198C; // type:function size:0x328 scope:global +DismissChyron__Fv = .text:0x80151CB4; // type:function size:0x50 scope:global +SummonChyron__FPcN20 = .text:0x80151D04; // type:function size:0xC4 scope:global +CreateFEKeyboard__FP21ScreenConstructorData = .text:0x80151DC8; // type:function size:0x38 scope:global +__10FEKeyboardP21ScreenConstructorData = .text:0x80151E00; // type:function size:0x70 scope:global +Dispose__10FEKeyboardb = .text:0x80151E70; // type:function size:0xB0 scope:global +NotificationMessage__10FEKeyboardUlP8FEObjectUlUl = .text:0x80151F20; // type:function size:0x348 scope:global +Initialize__10FEKeyboard = .text:0x80152268; // type:function size:0x33C scope:global +GetCase__10FEKeyboard = .text:0x801525A4; // type:function size:0x34 scope:global +UpdateVisuals__10FEKeyboard = .text:0x801525D8; // type:function size:0x1A8 scope:global +UpdateStringVisual__10FEKeyboard = .text:0x80152780; // type:function size:0x1C8 scope:global +UpdateCursorPosition__10FEKeyboard = .text:0x80152948; // type:function size:0xD8 scope:global +MoveCursor__10FEKeyboardi = .text:0x80152A20; // type:function size:0x68 scope:global +SetString__10FEKeyboardPc = .text:0x80152A88; // type:function size:0x28 scope:global +SetMaxLength__10FEKeyboardi = .text:0x80152AB0; // type:function size:0x14 scope:global +IsKeyButton__10FEKeyboardP8FEObject = .text:0x80152AC4; // type:function size:0x2C scope:global +IsSymbol__10FEKeyboardc = .text:0x80152AF0; // type:function size:0x88 scope:global +IsNotOkForEmail__10FEKeyboardc = .text:0x80152B78; // type:function size:0x78 scope:global +IsNumericSymbol__10FEKeyboardc = .text:0x80152BF0; // type:function size:0x60 scope:global +IsEmailSymbol__10FEKeyboardc = .text:0x80152C50; // type:function size:0x68 scope:global +AppendLetter__10FEKeyboardi = .text:0x80152CB8; // type:function size:0x38 scope:global +GetLetterMap__10FEKeyboardi = .text:0x80152CF0; // type:function size:0x150 scope:global +AppendSpace__10FEKeyboard = .text:0x80152E40; // type:function size:0x30 scope:global +AppendBackspace__10FEKeyboard = .text:0x80152E70; // type:function size:0xB0 scope:global +AppendChar__10FEKeyboardc = .text:0x80152F20; // type:function size:0xEC scope:global +ToggleCapsLock__10FEKeyboard = .text:0x8015300C; // type:function size:0x5C scope:global +ToggleShift__10FEKeyboard = .text:0x80153068; // type:function size:0x4C scope:global +ToggleSpecialCharacters__10FEKeyboard = .text:0x801530B4; // type:function size:0x70 scope:global +__8RaceStatP8FEStringT1 = .text:0x80153124; // type:function size:0x50 scope:global +__10StatsPanel = .text:0x80153174; // type:function size:0x34 scope:global +Reset__10StatsPanel = .text:0x801531A8; // type:function size:0x74 scope:global +Draw__10StatsPanelUi = .text:0x8015321C; // type:function size:0x140 scope:global +AddStat__10StatsPanelP8RaceStat = .text:0x8015335C; // type:function size:0x7C scope:global +AddInfoStat__10StatsPanelUiUi = .text:0x801533D8; // type:function size:0x10C scope:global +AddGenericStat__10StatsPanelfUiUiPCc = .text:0x801534E4; // type:function size:0x124 scope:global +AddTimerStat__10StatsPanelfUi = .text:0x80153608; // type:function size:0x11C scope:global +__21PostRaceResultsScreenP21ScreenConstructorData = .text:0x80153724; // type:function size:0x208 scope:global +_._21PostRaceResultsScreen = .text:0x8015392C; // type:function size:0xD8 scope:global +Setup__21PostRaceResultsScreen = .text:0x80153A04; // type:function size:0x2C0 scope:global +SetupResults__21PostRaceResultsScreen = .text:0x80153CC4; // type:function size:0x440 scope:global +SetupStat_NosUsed__21PostRaceResultsScreen = .text:0x80154104; // type:function size:0xFC scope:global +SetupStat_TopSpeed__21PostRaceResultsScreen = .text:0x80154200; // type:function size:0x108 scope:global +SetupStat_AverageSpeed__21PostRaceResultsScreen = .text:0x80154308; // type:function size:0x108 scope:global +SetupStat_TimeBehind__21PostRaceResultsScreen = .text:0x80154410; // type:function size:0xC4 scope:global +SetupStat_LapVariance__21PostRaceResultsScreen = .text:0x801544D4; // type:function size:0xB0 scope:global +SetupStat_StageVariance__21PostRaceResultsScreen = .text:0x80154584; // type:function size:0x2C scope:global +SetupStat_TrafficCollisions__21PostRaceResultsScreen = .text:0x801545B0; // type:function size:0xD0 scope:global +SetupStat_ZeroToSixty__21PostRaceResultsScreen = .text:0x80154680; // type:function size:0xCC scope:global +SetupStat_QuarterMile__21PostRaceResultsScreen = .text:0x8015474C; // type:function size:0xCC scope:global +SetupStat_PerfectShifts__21PostRaceResultsScreen = .text:0x80154818; // type:function size:0xE0 scope:global +SetupStat_AccumulatedSpeed__21PostRaceResultsScreen = .text:0x801548F8; // type:function size:0xF4 scope:global +SetupStat_SpeedVariance__21PostRaceResultsScreen = .text:0x801549EC; // type:function size:0x10C scope:global +SetupStat_SpeedBehind__21PostRaceResultsScreen = .text:0x80154AF8; // type:function size:0xF0 scope:global +SetupRacerStats__21PostRaceResultsScreeniP10GRacerInfo = .text:0x80154BE8; // type:function size:0x250 scope:global +SetupLapStats__21PostRaceResultsScreeniP10GRacerInfo = .text:0x80154E38; // type:function size:0xAC4 scope:global +NotificationMessage__21PostRaceResultsScreenUlP8FEObjectUlUl = .text:0x801558FC; // type:function size:0x598 scope:global +NotifySoundMessage__21PostRaceResultsScreenUl18eMenuSoundTriggers = .text:0x80155E94; // type:function size:0xAC scope:global +PopulateData__11PursuitDataP8IPursuitP12IPerpetratori = .text:0x80155F40; // type:function size:0x1AC scope:global +AddMilestone__11PursuitDataP10GMilestone = .text:0x801560EC; // type:function size:0x30 scope:global +GetMilestone__C11PursuitDatai = .text:0x8015611C; // type:function size:0x20 scope:global +ClearData__11PursuitData = .text:0x8015613C; // type:function size:0x58 scope:global +__19PursuitResultsDatumQ219PursuitResultsDatum23PursuitResultsDatumTypeUiffQ219PursuitResultsDatum28PursuitResultsDatumCheckType = .text:0x80156194; // type:function size:0x94 scope:global +NotificationMessage__19PursuitResultsDatumUlP8FEObjectUlUl = .text:0x80156228; // type:function size:0x4 scope:global +__23PursuitResultsArraySlotP8FEObjectP8FEStringT2P7FEImageT4 = .text:0x8015622C; // type:function size:0x64 scope:global +Update__23PursuitResultsArraySlotP10ArrayDatumb = .text:0x80156290; // type:function size:0x3AC scope:global +__21PostRacePursuitScreenP21ScreenConstructorData = .text:0x8015663C; // type:function size:0x1CC scope:global +_._21PostRacePursuitScreen = .text:0x80156808; // type:function size:0x164 scope:global +Initialize__21PostRacePursuitScreen = .text:0x8015696C; // type:function size:0x1EC scope:global +SetupInfractions__21PostRacePursuitScreen = .text:0x80156B58; // type:function size:0x294 scope:global +SetupMilestones__21PostRacePursuitScreen = .text:0x80156DEC; // type:function size:0x254 scope:global +SetupPursuit__21PostRacePursuitScreen = .text:0x80157040; // type:function size:0x23C scope:global +NotificationMessage__21PostRacePursuitScreenUlP8FEObjectUlUl = .text:0x8015727C; // type:function size:0x1CC scope:global +__24PostRaceMilestonesScreenP21ScreenConstructorData = .text:0x80157448; // type:function size:0x70 scope:global +_._24PostRaceMilestonesScreen = .text:0x801574B8; // type:function size:0x30 scope:global +NotificationMessage__24PostRaceMilestonesScreenUlP8FEObjectUlUl = .text:0x801574E8; // type:function size:0x188 scope:global +StartMilestoneAnimations__24PostRaceMilestonesScreen = .text:0x80157670; // type:function size:0xF0 scope:global +StartChallengeAnimations__24PostRaceMilestonesScreen = .text:0x80157760; // type:function size:0x194 scope:global +StartBountyAnimations__24PostRaceMilestonesScreenb = .text:0x801578F4; // type:function size:0x120 scope:global +StartAnimations__24PostRaceMilestonesScreenbifPCc = .text:0x80157A14; // type:function size:0x150 scope:global +StartMilestoneDoneAnimations__24PostRaceMilestonesScreen = .text:0x80157B64; // type:function size:0xC4 scope:global +SetMilestoneAnimationScriptHash__24PostRaceMilestonesScreenbi = .text:0x80157C28; // type:function size:0x178 scope:global +__27SillyTextureStreamerManagerPCc = .text:0x80157DA0; // type:function size:0x80 scope:global +_._27SillyTextureStreamerManager = .text:0x80157E20; // type:function size:0xA4 scope:global +MakeSpaceInPoolCallback__27SillyTextureStreamerManager = .text:0x80157EC4; // type:function size:0x3C scope:global +LoadCallback__27SillyTextureStreamerManager = .text:0x80157F00; // type:function size:0xE4 scope:global +Load__27SillyTextureStreamerManagerUiP7FEImage = .text:0x80157FE4; // type:function size:0x78 scope:global +UnloadAll__27SillyTextureStreamerManager = .text:0x8015805C; // type:function size:0x6C scope:global +__17PhotoFinishScreenP21ScreenConstructorData = .text:0x801580C8; // type:function size:0x194 scope:global +_._17PhotoFinishScreen = .text:0x8015825C; // type:function size:0xCC scope:global +NotificationMessage__17PhotoFinishScreenUlP8FEObjectUlUl = .text:0x80158328; // type:function size:0x8B8 scope:global +Setup__17PhotoFinishScreen = .text:0x80158BE0; // type:function size:0x63C scope:global +Create__17PhotoFinishScreenP21ScreenConstructorData = .text:0x8015921C; // type:function size:0x38 scope:global +__12SixDaysLaterP21ScreenConstructorData = .text:0x80159254; // type:function size:0x98 scope:global +NotificationMessage__12SixDaysLaterUlP8FEObjectUlUl = .text:0x801592EC; // type:function size:0x108 scope:global +Init__15BootFlowManager = .text:0x801593F4; // type:function size:0x44 scope:global +Destroy__15BootFlowManager = .text:0x80159438; // type:function size:0x6C scope:global +Get__15BootFlowManager = .text:0x801594A4; // type:function size:0xC scope:global +__15BootFlowManager = .text:0x801594B0; // type:function size:0x290 scope:global +FindScreen__15BootFlowManagerPCc = .text:0x80159740; // type:function size:0x60 scope:global +FindScreenSubStr__15BootFlowManagerPCc = .text:0x801597A0; // type:function size:0x60 scope:global +JumpToHead__15BootFlowManager = .text:0x80159800; // type:function size:0x30 scope:global +JumpToScreen__15BootFlowManagerPCc = .text:0x80159830; // type:function size:0x84 scope:global +DoAttract__15BootFlowManager = .text:0x801598B4; // type:function size:0x50 scope:global +ChangeToNextBootFlowScreen__15BootFlowManageri = .text:0x80159904; // type:function size:0x64 scope:global +__12SplashScreenP21ScreenConstructorData = .text:0x80159968; // type:function size:0x25C scope:global +_._12SplashScreen = .text:0x80159BC4; // type:function size:0xAC scope:global +CalculateLastJoyEventTime__12SplashScreen = .text:0x80159C70; // type:function size:0xEC scope:global +NotificationMessage__12SplashScreenUlP8FEObjectUlUl = .text:0x80159D5C; // type:function size:0x274 scope:global +__11MovieScreenP21ScreenConstructorData = .text:0x80159FD0; // type:function size:0xF0 scope:global +NotificationMessage__11MovieScreenUlP8FEObjectUlUl = .text:0x8015A0C0; // type:function size:0x168 scope:global +LoadingTips_FinishLoadingTexBridge__FUi = .text:0x8015A228; // type:function size:0x44 scope:local +__11LoadingTipsP21ScreenConstructorData = .text:0x8015A26C; // type:function size:0xA0 scope:global +_._11LoadingTips = .text:0x8015A30C; // type:function size:0x54 scope:global +NotificationMessage__11LoadingTipsUlP8FEObjectUlUl = .text:0x8015A360; // type:function size:0x104 scope:global +StartLoadingTipImage__11LoadingTips = .text:0x8015A464; // type:function size:0x64 scope:global +ShowTipInfo__11LoadingTips = .text:0x8015A4C8; // type:function size:0xE4 scope:global +WhatTipScreenShouldIUseToday__11LoadingTipsQ213LoadingScreen18LoadingScreenTypes = .text:0x8015A5AC; // type:function size:0x68 scope:global +GetARandomTipScreen__11LoadingTipsQ213LoadingScreen18LoadingScreenTypes = .text:0x8015A614; // type:function size:0x130 scope:global +TipTestLastCarWithTwoStrikes__11LoadingTipsQ213LoadingScreen18LoadingScreenTypes = .text:0x8015A744; // type:function size:0x118 scope:global +TipTestFirstTimeOutOfSafeHouse__11LoadingTipsQ213LoadingScreen18LoadingScreenTypes = .text:0x8015A85C; // type:function size:0xB4 scope:global +TipTestFirstTimeIntoSafeHouse__11LoadingTipsQ213LoadingScreen18LoadingScreenTypes = .text:0x8015A910; // type:function size:0x40 scope:global +AllowInput__11LoadingTips = .text:0x8015A950; // type:function size:0x60 scope:global +GetGameTip__11LoadingTips9eGameTips = .text:0x8015A9B0; // type:function size:0x2C scope:global +InitLoadingTipsScreen__11LoadingTips = .text:0x8015A9DC; // type:function size:0x30 scope:global +FinishLoadingTexCallback__11LoadingTipsUi = .text:0x8015AA0C; // type:function size:0x20 scope:global +__13LoadingScreenP21ScreenConstructorData = .text:0x8015AA2C; // type:function size:0xF0 scope:global +_._13LoadingScreen = .text:0x8015AB1C; // type:function size:0x90 scope:global +InitLoadingScreen__13LoadingScreen = .text:0x8015ABAC; // type:function size:0x30 scope:global +__20LanguageSelectScreenP21ScreenConstructorData = .text:0x8015ABDC; // type:function size:0x8C scope:global +_._20LanguageSelectScreen = .text:0x8015AC68; // type:function size:0x98 scope:global +NotificationMessage__20LanguageSelectScreenUlP8FEObjectUlUl = .text:0x8015AD00; // type:function size:0x20 scope:global +__23LoadingControllerScreenP21ScreenConstructorData = .text:0x8015AD20; // type:function size:0x94 scope:global +_._23LoadingControllerScreen = .text:0x8015ADB4; // type:function size:0x44 scope:global +SetupControllerConfig__23LoadingControllerScreen = .text:0x8015ADF8; // type:function size:0x228 scope:global +ShowControllerConfig__23LoadingControllerScreen = .text:0x8015B020; // type:function size:0x38 scope:global +HideControllerConfig__23LoadingControllerScreen = .text:0x8015B058; // type:function size:0x4C scope:global +FinishLoadingControllerTextureCallback__23LoadingControllerScreenUi = .text:0x8015B0A4; // type:function size:0x20 scope:global +FinishLoadingControllerTextureCallbackBridge__FUi = .text:0x8015B0C4; // type:function size:0x2C scope:global +PrepToShowControllerConfig__23LoadingControllerScreen = .text:0x8015B0F0; // type:function size:0xC4 scope:global +ClearLoadedControllerTexture__23LoadingControllerScreen = .text:0x8015B1B4; // type:function size:0x38 scope:global +NotificationMessage__23LoadingControllerScreenUlP8FEObjectUlUl = .text:0x8015B1EC; // type:function size:0x4 scope:global +InitLoadingControllerScreen__23LoadingControllerScreen = .text:0x8015B1F0; // type:function size:0x30 scope:global +__Q219nsEngageEventDialog17EngageEventDialogP21ScreenConstructorData = .text:0x8015B220; // type:function size:0x4BC scope:global +_._Q219nsEngageEventDialog17EngageEventDialog = .text:0x8015B6DC; // type:function size:0x74 scope:global +NotifyTheGameAcceptEvent__Q219nsEngageEventDialog17EngageEventDialog = .text:0x8015B750; // type:function size:0x64 scope:global +NotifyTheGameDeclineEvent__Q219nsEngageEventDialog17EngageEventDialog = .text:0x8015B7B4; // type:function size:0x64 scope:global +NotificationMessage__Q219nsEngageEventDialog17EngageEventDialogUlP8FEObjectUlUl = .text:0x8015B818; // type:function size:0xBC scope:global +__20InGameAnyMovieScreenP21ScreenConstructorData = .text:0x8015B8D4; // type:function size:0xE8 scope:global +_._20InGameAnyMovieScreen = .text:0x8015B9BC; // type:function size:0x68 scope:global +Create__20InGameAnyMovieScreenP21ScreenConstructorData = .text:0x8015BA24; // type:function size:0x38 scope:global +NotificationMessage__20InGameAnyMovieScreenUlP8FEObjectUlUl = .text:0x8015BA5C; // type:function size:0xC0 scope:global +IsPlaying__20InGameAnyMovieScreen = .text:0x8015BB1C; // type:function size:0xC scope:global +LaunchMovie__20InGameAnyMovieScreenPCc = .text:0x8015BB28; // type:function size:0x98 scope:global +DismissMovie__20InGameAnyMovieScreen = .text:0x8015BBC0; // type:function size:0x8C scope:global +SetMovieName__20InGameAnyMovieScreenPCc = .text:0x8015BC4C; // type:function size:0x30 scope:global +GetFEngPackageName__20InGameAnyMovieScreen = .text:0x8015BC7C; // type:function size:0x3C scope:global +__23InGameAnyTutorialScreenP21ScreenConstructorData = .text:0x8015BCB8; // type:function size:0x2B4 scope:global +Create__23InGameAnyTutorialScreenP21ScreenConstructorData = .text:0x8015BF6C; // type:function size:0x38 scope:global +NotificationMessage__23InGameAnyTutorialScreenUlP8FEObjectUlUl = .text:0x8015BFA4; // type:function size:0x8C scope:global +_._23InGameAnyTutorialScreen = .text:0x8015C030; // type:function size:0x5C scope:global +LaunchMovie__23InGameAnyTutorialScreenPCcT1 = .text:0x8015C08C; // type:function size:0xB0 scope:global +DismissMovie__23InGameAnyTutorialScreen = .text:0x8015C13C; // type:function size:0xA8 scope:global +SetMovieName__23InGameAnyTutorialScreenPCc = .text:0x8015C1E4; // type:function size:0x30 scope:global +SetPackageName__23InGameAnyTutorialScreenPCc = .text:0x8015C214; // type:function size:0x3C scope:global +GetLanguageInfo__F10eLanguages = .text:0x8015C250; // type:function size:0x38 scope:global +GetLanguageName__F10eLanguages = .text:0x8015C288; // type:function size:0x38 scope:global +GetLocalizedPercentSign__Fv = .text:0x8015C2C0; // type:function size:0x64 scope:global +InitLocalization__Fv = .text:0x8015C324; // type:function size:0x140 scope:global +LanguageHasChanged__F10eLanguages = .text:0x8015C464; // type:function size:0x6C scope:global +LoadLanguageResources__FbN30 = .text:0x8015C4D0; // type:function size:0x268 scope:global +SetCurrentLanguage__F10eLanguages = .text:0x8015C738; // type:function size:0x118 scope:global +LoadCurrentLanguage__Fv = .text:0x8015C850; // type:function size:0x24 scope:global +GetCurrentLanguage__Fv = .text:0x8015C874; // type:function size:0xC scope:global +WideToCharString__FPcUiPCs = .text:0x8015C880; // type:function size:0x70 scope:global +PackedStringToWideString__FPUsiPCc = .text:0x8015C8F0; // type:function size:0x54 scope:global +WideStringToPackedString__FPciPCUs = .text:0x8015C944; // type:function size:0x3C scope:global +__as__12FEWideStringPCc = .text:0x8015C980; // type:function size:0x48 scope:global +SearchForString__FUi = .text:0x8015C9C8; // type:function size:0xB4 scope:local +DoesStringExist__FUi = .text:0x8015CA7C; // type:function size:0x30 scope:global +GetLocalizedString__FUi = .text:0x8015CAAC; // type:function size:0x34 scope:global +GetLocalizedString__FPcUiUi = .text:0x8015CAE0; // type:function size:0x44 scope:global +GetTranslatedString__Fi = .text:0x8015CB24; // type:function size:0x20 scope:global +GetLocalizedWideString__FPsiUi = .text:0x8015CB44; // type:function size:0x50 scope:global +LoaderLanguage__FP6bChunk = .text:0x8015CB94; // type:function size:0x11C scope:global +UnloaderLanguage__FP6bChunk = .text:0x8015CCB0; // type:function size:0x48 scope:global +PlatEndianSwap__17WideCharHistogram = .text:0x8015CCF8; // type:function size:0x54 scope:global +PackString__17WideCharHistogramPciPCUs = .text:0x8015CD4C; // type:function size:0x170 scope:global +UnpackString__17WideCharHistogramPUsiPCc = .text:0x8015CEBC; // type:function size:0xB4 scope:global +StartRace__11RaceStarter = .text:0x8015CF70; // type:function size:0x9C scope:global +SetControllerConfig__11RaceStarteri12JoystickPort = .text:0x8015D00C; // type:function size:0x4 scope:global +StartSkipFERace__11RaceStarter = .text:0x8015D010; // type:function size:0x1EC scope:global +StartCareerFreeRoam__11RaceStarter = .text:0x8015D1FC; // type:function size:0x3C scope:global +__14feDialogConfig = .text:0x8015D238; // type:function size:0x8C scope:global +NotifySoundMessage__14feDialogScreenUl18eMenuSoundTriggers = .text:0x8015D2C4; // type:function size:0xB8 scope:global +NotificationMessage__14feDialogScreenUlP8FEObjectUlUl = .text:0x8015D37C; // type:function size:0x36C scope:global +__14feDialogScreenP21ScreenConstructorData = .text:0x8015D6E8; // type:function size:0xCC scope:global +_._14feDialogScreen = .text:0x8015D7B4; // type:function size:0x68 scope:global +BuildFromConfig__14feDialogScreen = .text:0x8015D81C; // type:function size:0x4D8 scope:global +DialogCreater__FP21ScreenConstructorData = .text:0x8015DCF4; // type:function size:0x38 scope:global +DismissDialog__15DialogInterfacei = .text:0x8015DD2C; // type:function size:0xA0 scope:global +ShowDialog__15DialogInterfaceP14feDialogConfig = .text:0x8015DDCC; // type:function size:0x1D8 scope:global +FormatMessage__FPciPCcP13__va_list_tag = .text:0x8015DFA4; // type:function size:0x28 scope:local +ShowOk__15DialogInterfacePCcT112eDialogTitleT1P13__va_list_tag = .text:0x8015DFCC; // type:function size:0xA0 scope:global +ShowOk__15DialogInterfacePCcT112eDialogTitleUie = .text:0x8015E06C; // type:function size:0xC0 scope:global +ShowOneButton__15DialogInterfacePCcT112eDialogTitleUiUiUibT1P13__va_list_tag = .text:0x8015E12C; // type:function size:0x98 scope:global +ShowOneButton__15DialogInterfacePCcT112eDialogTitleUiUiUiUie = .text:0x8015E1C4; // type:function size:0xD4 scope:global +ShowOneButton__15DialogInterfacePCcT112eDialogTitleUiUiUie = .text:0x8015E298; // type:function size:0xD4 scope:global +ShowTwoButtons__15DialogInterfacePCcT112eDialogTitleUiUiUiUiUib19eDialogFirstButtonsT1P13__va_list_tag = .text:0x8015E36C; // type:function size:0xDC scope:global +ShowTwoButtons__15DialogInterfacePCcT112eDialogTitleUiUiUiUiUi19eDialogFirstButtonsT1e = .text:0x8015E448; // type:function size:0xB4 scope:global +ShowTwoButtons__15DialogInterfacePCcT112eDialogTitleUiUiUiUiUi19eDialogFirstButtonsUie = .text:0x8015E4FC; // type:function size:0xF0 scope:global +ShowTwoButtons__15DialogInterfacePCcT112eDialogTitleUiUiUiUi19eDialogFirstButtonsUie = .text:0x8015E5EC; // type:function size:0xEC scope:global +ShowThreeButtons__15DialogInterfacePCcT112eDialogTitleUiUiUiUiUiUiUi19eDialogFirstButtonsT1P13__va_list_tag = .text:0x8015E6D8; // type:function size:0xB8 scope:global +ShowThreeButtons__15DialogInterfacePCcT112eDialogTitleUiUiUiUiUiUiUi19eDialogFirstButtonsUie = .text:0x8015E790; // type:function size:0xF8 scope:global +__18KeyboardEditString = .text:0x8015E888; // type:function size:0x70 scope:global +SyncEditIntoPacked__18KeyboardEditString = .text:0x8015E8F8; // type:function size:0x2C scope:global +GetEditedString__18KeyboardEditString = .text:0x8015E924; // type:function size:0x30 scope:global +EndCapture__18KeyboardEditString = .text:0x8015E954; // type:function size:0x64 scope:global +GetStringForDisplay__18KeyboardEditStringPci = .text:0x8015E9B8; // type:function size:0x64 scope:global +RevertToOriginalString__18KeyboardEditString = .text:0x8015EA1C; // type:function size:0x40 scope:global +_._19FEngTextInputObject = .text:0x8015EA5C; // type:function size:0x48 scope:global +ReturnPressed__19FEngTextInputObject = .text:0x8015EAA4; // type:function size:0xA8 scope:global +EscapePressed__19FEngTextInputObject = .text:0x8015EB4C; // type:function size:0x84 scope:global +RedrawString__19FEngTextInputObjectb = .text:0x8015EBD0; // type:function size:0x144 scope:global +Notify__19FEngTextInputObjectUi = .text:0x8015ED14; // type:function size:0x4C scope:global +__7cSlider = .text:0x8015ED60; // type:function size:0x58 scope:global +Update__7cSliderUl = .text:0x8015EDB8; // type:function size:0xC0 scope:global +Init__7cSliderPCcT1fffff = .text:0x8015EE78; // type:function size:0xA8 scope:global +InitObjects__7cSliderPCcT1 = .text:0x8015EF20; // type:function size:0x114 scope:global +InitValues__7cSliderfffff = .text:0x8015F034; // type:function size:0x2C scope:global +Draw__7cSlider = .text:0x8015F060; // type:function size:0x17C scope:global +ToggleVisible__7cSliderb = .text:0x8015F1DC; // type:function size:0x74 scope:global +SetValue__7cSliderf = .text:0x8015F250; // type:function size:0x28 scope:global +Highlight__7cSlider = .text:0x8015F278; // type:function size:0x78 scope:global +UnHighlight__7cSlider = .text:0x8015F2F0; // type:function size:0x78 scope:global +SetPos__7cSliderff = .text:0x8015F368; // type:function size:0x58 scope:global +Init__14TwoStageSliderPCcT1ffffff = .text:0x8015F3C0; // type:function size:0xB8 scope:global +InitObjects__14TwoStageSliderPCcT1 = .text:0x8015F478; // type:function size:0x68 scope:global +InitValues__14TwoStageSliderffffff = .text:0x8015F4E0; // type:function size:0x68 scope:global +ToggleVisible__14TwoStageSliderb = .text:0x8015F548; // type:function size:0x4C scope:global +Draw__14TwoStageSlider = .text:0x8015F594; // type:function size:0x1C8 scope:global +SaveSomeData__FPvT0iT0 = .text:0x8015F75C; // type:function size:0x3C scope:global +LoadSomeData__FPvT0iT0 = .text:0x8015F798; // type:function size:0x38 scope:global +__18FEKeyboardSettings = .text:0x8015F7D0; // type:function size:0x38 scope:global +Default__14PlayerSettings = .text:0x8015F808; // type:function size:0x44 scope:global +__eq__C14PlayerSettingsRC14PlayerSettings = .text:0x8015F84C; // type:function size:0x2C scope:global +DefaultFromOptionsScreen__14PlayerSettings = .text:0x8015F878; // type:function size:0x44 scope:global +GetControllerAttribs__C14PlayerSettings18eControllerAttribsb = .text:0x8015F8BC; // type:function size:0x78 scope:global +ScrollDriveCam__14PlayerSettingsi = .text:0x8015F934; // type:function size:0x88 scope:global +Default__16GameplaySettings = .text:0x8015F9BC; // type:function size:0x84 scope:global +IsMapItemEnabled__16GameplaySettings17eWorldMapItemType = .text:0x8015FA40; // type:function size:0x18 scope:global +SetMapItem__16GameplaySettings17eWorldMapItemTypeb = .text:0x8015FA58; // type:function size:0x28 scope:global +__eq__C16GameplaySettingsRC16GameplaySettings = .text:0x8015FA80; // type:function size:0x2C scope:global +Default__13VideoSettings = .text:0x8015FAAC; // type:function size:0x28 scope:global +__eq__C13VideoSettingsRC13VideoSettings = .text:0x8015FAD4; // type:function size:0x2C scope:global +Default__13AudioSettings = .text:0x8015FB00; // type:function size:0x88 scope:global +__eq__C13AudioSettingsRC13AudioSettings = .text:0x8015FB88; // type:function size:0xF4 scope:global +Default__15OptionsSettings = .text:0x8015FC7C; // type:function size:0x58 scope:global +Default__14CareerSettings = .text:0x8015FCD4; // type:function size:0xA8 scope:global +GetSMSMessage__14CareerSettingsUi = .text:0x8015FD7C; // type:function size:0x24 scope:global +GetSMSSortOrder__14CareerSettings = .text:0x8015FDA0; // type:function size:0x14 scope:global +IsVoice__10SMSMessage = .text:0x8015FDB4; // type:function size:0x44 scope:global +SpendCash__14CareerSettingsi = .text:0x8015FDF8; // type:function size:0x24 scope:global +StartNewCareer__14CareerSettingsb = .text:0x8015FE1C; // type:function size:0x1E4 scope:global +TryAwardDemoMarker__14CareerSettings = .text:0x80160000; // type:function size:0x6C scope:global +ResumeCareer__14CareerSettings = .text:0x8016006C; // type:function size:0x234 scope:global +AwardOneTimeCashBonus__14CareerSettingsb = .text:0x801602A0; // type:function size:0x24 scope:global +SetPlayerHasBeatenTheGame__14CareerSettings = .text:0x801602C4; // type:function size:0x10 scope:global +GenerateCaseFileName__14CareerSettings = .text:0x801602D4; // type:function size:0x70 scope:global +SaveToBuffer__14CareerSettingsPvT1 = .text:0x80160344; // type:function size:0xE0 scope:global +LoadFromBuffer__14CareerSettingsPvT1 = .text:0x80160424; // type:function size:0x100 scope:global +GetSaveBufferSize__14CareerSettingsb = .text:0x80160524; // type:function size:0x14 scope:global +SaveRaceData__14CareerSettingsPvT1 = .text:0x80160538; // type:function size:0x108 scope:global +SaveUnlockData__14CareerSettingsPvT1 = .text:0x80160640; // type:function size:0x58 scope:global +SaveGameplayData__14CareerSettingsPvT1 = .text:0x80160698; // type:function size:0x6C scope:global +LoadRaceData__14CareerSettingsPvT1 = .text:0x80160704; // type:function size:0x134 scope:global +LoadUnlockData__14CareerSettingsPvT1 = .text:0x80160838; // type:function size:0x58 scope:global +LoadGameplayData__14CareerSettingsPvT1 = .text:0x80160890; // type:function size:0x58 scope:global +__11UserProfile = .text:0x801608E8; // type:function size:0x124 scope:global +_._11UserProfile = .text:0x80160A0C; // type:function size:0x68 scope:global +SetProfileName__11UserProfilePCcb = .text:0x80160A74; // type:function size:0xC8 scope:global +GetProfileName__11UserProfile = .text:0x80160B3C; // type:function size:0x4 scope:global +IsProfileNamed__11UserProfile = .text:0x80160B40; // type:function size:0x8 scope:global +Default__11UserProfileib = .text:0x80160B48; // type:function size:0x56C scope:global +CommitHighScoresPauseQuit__11UserProfile = .text:0x801610B4; // type:function size:0x28 scope:global +CommitPursuitInfo__11UserProfileP8IPursuitUiUiUi = .text:0x801610DC; // type:function size:0x28 scope:global +WriteProfileHash__11UserProfilePvT1iT1 = .text:0x80161104; // type:function size:0x84 scope:global +VerifyProfileHash__11UserProfilePvT1i = .text:0x80161188; // type:function size:0x80 scope:global +SaveToBuffer__11UserProfilePvi = .text:0x80161208; // type:function size:0x168 scope:global +LoadFromBuffer__11UserProfilePvibi = .text:0x80161370; // type:function size:0x1FC scope:global +GetSaveBufferSize__11UserProfileb = .text:0x8016156C; // type:function size:0x44 scope:global +__17cFrontendDatabase = .text:0x801615B0; // type:function size:0x120 scope:global +Default__17cFrontendDatabase = .text:0x801616D0; // type:function size:0x12C scope:global +DefaultProfile__17cFrontendDatabase = .text:0x801617FC; // type:function size:0xCC scope:global +DefaultRaceSettings__17cFrontendDatabase = .text:0x801618C8; // type:function size:0x80 scope:global +NotifyDeleteCar__17cFrontendDatabaseUi = .text:0x80161948; // type:function size:0x6C scope:global +SetPlayersJoystickPort__17cFrontendDatabaseiSc = .text:0x801619B4; // type:function size:0x64 scope:global +GetDefaultCar__17cFrontendDatabase = .text:0x80161A18; // type:function size:0x15C scope:global +CreateMultiplayerProfile__17cFrontendDatabasei = .text:0x80161B74; // type:function size:0x5C scope:global +DeleteMultiplayerProfile__17cFrontendDatabasei = .text:0x80161BD0; // type:function size:0xDC scope:global +AllocBackupDB__17cFrontendDatabaseb = .text:0x80161CAC; // type:function size:0x70 scope:global +DeallocBackupDB__17cFrontendDatabase = .text:0x80161D1C; // type:function size:0x40 scope:global +RestoreFromBackupDB__17cFrontendDatabase = .text:0x80161D5C; // type:function size:0x58 scope:global +BackupCarStable__17cFrontendDatabase = .text:0x80161DB4; // type:function size:0x70 scope:global +IsCarStableDirty__17cFrontendDatabase = .text:0x80161E24; // type:function size:0x80 scope:global +RefreshCurrentRide__17cFrontendDatabase = .text:0x80161EA4; // type:function size:0xAC scope:global +GetQuickRaceSettings__17cFrontendDatabaseQ25GRace4Type = .text:0x80161F50; // type:function size:0x30 scope:global +IsFinalEpicChase__17cFrontendDatabase = .text:0x80161F80; // type:function size:0x80 scope:global +GetRandomRaceOptions__17cFrontendDatabaseP12RaceSettingsQ25GRace4Type = .text:0x80162000; // type:function size:0x9C scope:global +FillCustomRace__17cFrontendDatabaseP11GRaceCustomP12RaceSettings = .text:0x8016209C; // type:function size:0xFC scope:global +BuildCurrentRideForPlayer__17cFrontendDatabaseiP8RideInfo = .text:0x80162198; // type:function size:0xA0 scope:global +NotifyExitRaceToFrontend__17cFrontendDatabase15eExitRacePlaces = .text:0x80162238; // type:function size:0x34 scope:global +GetUserProfileSaveSize__17cFrontendDatabaseb = .text:0x8016226C; // type:function size:0x24 scope:global +SaveUserProfileToBuffer__17cFrontendDatabasePvi = .text:0x80162290; // type:function size:0x24 scope:global +LoadUserProfileFromBuffer__17cFrontendDatabasePvii = .text:0x801622B4; // type:function size:0x7C scope:global +GetChallengeHeaderHash__17cFrontendDatabaseUi = .text:0x80162330; // type:function size:0x2C scope:global +GetChallengeDescHash__17cFrontendDatabaseUi = .text:0x8016235C; // type:function size:0x2C scope:global +GetBountyIconHash__17cFrontendDatabaseUi = .text:0x80162388; // type:function size:0x30 scope:global +GetBountyHeaderHash__17cFrontendDatabaseUi = .text:0x801623B8; // type:function size:0x2C scope:global +GetBountyDescHash__17cFrontendDatabaseUi = .text:0x801623E4; // type:function size:0x2C scope:global +GetMilestoneHeaderHash__17cFrontendDatabaseUi = .text:0x80162410; // type:function size:0x2C scope:global +GetMilestoneDescHash__17cFrontendDatabaseUi = .text:0x8016243C; // type:function size:0x2C scope:global +GetMilestoneIconHash__17cFrontendDatabaseUib = .text:0x80162468; // type:function size:0x2D4 scope:global +SetMilestoneDescriptionString__C17cFrontendDatabasePciffb = .text:0x8016273C; // type:function size:0x270 scope:global +IsMilestoneTimeFormat__C17cFrontendDatabasei = .text:0x801629AC; // type:function size:0x30 scope:global +GetRaceNameHash__17cFrontendDatabaseQ25GRace4Type = .text:0x801629DC; // type:function size:0x9C scope:global +GetRaceIconHash__17cFrontendDatabaseQ25GRace4Type = .text:0x80162A78; // type:function size:0x9C scope:global +GetSafehouseIconHash__17cFrontendDatabasePCc = .text:0x80162B14; // type:function size:0x98 scope:global +__19GameCompletionStats = .text:0x80162BAC; // type:function size:0x24 scope:global +GetGameCompletionStats__17cFrontendDatabase = .text:0x80162BD0; // type:function size:0x4A0 scope:global +InitFrontendDatabase__Fv = .text:0x80163070; // type:function size:0x44 scope:global +GetMikeMannBuild__Fv = .text:0x801630B4; // type:function size:0xC scope:global +GetIsCollectorsEdition__Fv = .text:0x801630C0; // type:function size:0xC scope:global +FixDot__FPci = .text:0x801630CC; // type:function size:0x30 scope:global +CalcLanguageHash__FPCcP15GRaceParameters = .text:0x801630FC; // type:function size:0x68 scope:global +Default__12RaceSettings = .text:0x80163164; // type:function size:0x64 scope:global +CommitHighScoresPauseQuit__18HighScoresDatabase = .text:0x801631C8; // type:function size:0x10 scope:global +CommitPursuitInfo__18HighScoresDatabaseP8IPursuitUiiUi = .text:0x801631D8; // type:function size:0x6E0 scope:global +CalcPursuitRank__18HighScoresDatabase19ePursuitDetailTypesb = .text:0x801638B8; // type:function size:0x398 scope:global +GetPreviouslyPursuedCarNameHash__C18HighScoresDatabase = .text:0x80163C50; // type:function size:0x24 scope:global +GetCareerCST__C18HighScoresDatabase12RAP_CTS_ITEMRiRUi = .text:0x80163C74; // type:function size:0x14C scope:global +Default__18HighScoresDatabase = .text:0x80163DC0; // type:function size:0x28 scope:global +GeneratePursuitID__22TopEvadedPursuitDetail = .text:0x80163DE8; // type:function size:0x88 scope:global +IncValue__19CareerPursuitScores19ePursuitDetailTypesi = .text:0x80163E70; // type:function size:0x2C scope:global +GetValue__C19CareerPursuitScores19ePursuitDetailTypes = .text:0x80163E9C; // type:function size:0x8C scope:global +GetPOVTypeFromPlayerCamera__F22ePlayerSettingsCameras = .text:0x80163F28; // type:function size:0x7C scope:global +IsPlayerCameraSelectable__F8POVTypes = .text:0x80163FA4; // type:function size:0x2C8 scope:global +GetPlayerCameraFromPOVType__F8POVTypes = .text:0x8016426C; // type:function size:0x7C scope:global +AdjustStableHeat_EvadePursuit__Fi = .text:0x801642E8; // type:function size:0x80 scope:global +AdjustStableHeat_EventWin__Fi = .text:0x80164368; // type:function size:0x80 scope:global +AdjustStableImpound_EventWin__Fi = .text:0x801643E8; // type:function size:0x9C scope:global +AdjustStableImpound_EvadePursuit__Fi = .text:0x80164484; // type:function size:0x84 scope:global +__13FEPlayerCarDB = .text:0x80164508; // type:function size:0xC8 scope:global +_._13FEPlayerCarDB = .text:0x801645D0; // type:function size:0x28 scope:global +GetCarRecordByHandle__13FEPlayerCarDBUi = .text:0x801645F8; // type:function size:0x30 scope:global +GetCarByIndex__13FEPlayerCarDBi = .text:0x80164628; // type:function size:0x1C scope:global +CreateNewCarRecord__13FEPlayerCarDB = .text:0x80164644; // type:function size:0x64 scope:global +CanCreateNewCarRecord__13FEPlayerCarDB = .text:0x801646A8; // type:function size:0x30 scope:global +CanCreateNewCustomizationRecord__13FEPlayerCarDB = .text:0x801646D8; // type:function size:0x34 scope:global +CreateNewCustomizationRecord__13FEPlayerCarDB = .text:0x8016470C; // type:function size:0x68 scope:global +CreateNewCareerRecord__13FEPlayerCarDB = .text:0x80164774; // type:function size:0x70 scope:global +GetNumInfraction__13FEPlayerCarDBQ218GInfractionManager14InfractionTypeb = .text:0x801647E4; // type:function size:0x88 scope:global +GetTotalNumInfractions__13FEPlayerCarDBb = .text:0x8016486C; // type:function size:0x78 scope:global +GetNumInfractionsOnCar__13FEPlayerCarDBUib = .text:0x801648E4; // type:function size:0x60 scope:global +GetTotalBounty__13FEPlayerCarDB = .text:0x80164944; // type:function size:0x54 scope:global +GetTotalEvadedPursuits__13FEPlayerCarDB = .text:0x80164998; // type:function size:0x54 scope:global +GetTotalBustedPursuits__13FEPlayerCarDB = .text:0x801649EC; // type:function size:0x54 scope:global +GetNumImpoundedCars__13FEPlayerCarDB = .text:0x80164A40; // type:function size:0x44 scope:global +GetTotalFines__13FEPlayerCarDBb = .text:0x80164A84; // type:function size:0x48 scope:global +GetNumCareerCarsWithARecord__13FEPlayerCarDB = .text:0x80164ACC; // type:function size:0x44 scope:global +ForAllCareerRecordsSum__13FEPlayerCarDBRCQ213FEPlayerCarDB10MyCallback = .text:0x80164B10; // type:function size:0xBC scope:global +BackupSoldCarHistory__13FEPlayerCarDBUc = .text:0x80164BCC; // type:function size:0x80 scope:global +GetPreferedCarName__13FEPlayerCarDB = .text:0x80164C4C; // type:function size:0xC0 scope:global +GetNumQuickRaceCars__13FEPlayerCarDB = .text:0x80164D0C; // type:function size:0x28 scope:global +GetNumCareerCars__13FEPlayerCarDB = .text:0x80164D34; // type:function size:0x28 scope:global +GetNumPurchasedCars__13FEPlayerCarDB = .text:0x80164D5C; // type:function size:0x8C scope:global +GetNumAvailableCareerCars__13FEPlayerCarDB = .text:0x80164DE8; // type:function size:0xA8 scope:global +GetNumCars__13FEPlayerCarDBUi = .text:0x80164E90; // type:function size:0x7C scope:global +CreateNewCustomCar__13FEPlayerCarDBUi = .text:0x80164F0C; // type:function size:0x50 scope:global +AwardRivalCar__13FEPlayerCarDBUi = .text:0x80164F5C; // type:function size:0x1BC scope:global +CreateNewCareerCar__13FEPlayerCarDBUi = .text:0x80165118; // type:function size:0x98 scope:global +CreateNewPresetCar__13FEPlayerCarDBPCc = .text:0x801651B0; // type:function size:0x1DC scope:global +CreateCar__13FEPlayerCarDBUii = .text:0x8016538C; // type:function size:0xF0 scope:global +DeleteCustomCar__13FEPlayerCarDBUi = .text:0x8016547C; // type:function size:0x28 scope:global +DeleteCareerCar__13FEPlayerCarDBUib = .text:0x801654A4; // type:function size:0x28 scope:global +DeleteCar__13FEPlayerCarDBUiUib = .text:0x801654CC; // type:function size:0xE4 scope:global +DeleteAllCars__13FEPlayerCarDB = .text:0x801655B0; // type:function size:0x20 scope:global +DeleteAllCustomizations__13FEPlayerCarDB = .text:0x801655D0; // type:function size:0x24 scope:global +DeleteAllCareerRecords__13FEPlayerCarDB = .text:0x801655F4; // type:function size:0x28 scope:global +IsBonusCar__13FEPlayerCarDBPCc = .text:0x8016561C; // type:function size:0xD8 scope:global +Default__13FEPlayerCarDB = .text:0x801656F4; // type:function size:0x36C scope:global +SaveToBuffer__13FEPlayerCarDBPci = .text:0x80165A60; // type:function size:0x44 scope:global +LoadFromBuffer__13FEPlayerCarDBPci = .text:0x80165AA4; // type:function size:0x3C scope:global +GetSaveBufferSize__13FEPlayerCarDB = .text:0x80165AE0; // type:function size:0xC scope:global +AwardBonusCars__13FEPlayerCarDB = .text:0x80165AEC; // type:function size:0x54 scope:global +SetCarToPreset__13FEPlayerCarDBUiP9PresetCar = .text:0x80165B40; // type:function size:0x68 scope:global +BuildRideForPlayer__13FEPlayerCarDBUiiP8RideInfo = .text:0x80165BA8; // type:function size:0x80 scope:global +GetCustomizationRecordByHandle__13FEPlayerCarDBUc = .text:0x80165C28; // type:function size:0x24 scope:global +GetCareerRecordByHandle__13FEPlayerCarDBUc = .text:0x80165C4C; // type:function size:0x3C scope:global +WriteRecordIntoPhysics__13FEPlayerCarDBUiRQ36Attrib3Gen8pvehicle = .text:0x80165C88; // type:function size:0x64 scope:global +__11FECarRecord = .text:0x80165CEC; // type:function size:0x2C scope:global +__as__11FECarRecordRC11FECarRecord = .text:0x80165D18; // type:function size:0x20 scope:global +Default__11FECarRecord = .text:0x80165D38; // type:function size:0x180 scope:global +GetType__11FECarRecord = .text:0x80165EB8; // type:function size:0xA8 scope:global +GetCost__11FECarRecord = .text:0x80165F60; // type:function size:0x7C scope:global +GetReleaseFromImpoundCost__11FECarRecord = .text:0x80165FDC; // type:function size:0x60 scope:global +GetNameHash__11FECarRecord = .text:0x8016603C; // type:function size:0xE4 scope:global +GetLogoHash__11FECarRecord = .text:0x80166120; // type:function size:0xE8 scope:global +GetManuLogoHash__11FECarRecord = .text:0x80166208; // type:function size:0x90 scope:global +GetManufacturerName__11FECarRecord = .text:0x80166298; // type:function size:0x308 scope:global +MatchesFilter__11FECarRecordi = .text:0x801665A0; // type:function size:0x4C scope:global +GetDebugName__11FECarRecord = .text:0x801665EC; // type:function size:0x7C scope:global +GetFECarNameHashFromFEKey__FUi = .text:0x80166668; // type:function size:0x44 scope:global +Default__21FECustomizationRecord = .text:0x801666AC; // type:function size:0x90 scope:global +WriteRecordIntoPhysics__C21FECustomizationRecordRQ36Attrib3Gen8pvehicle = .text:0x8016673C; // type:function size:0x3C scope:global +WritePhysicsIntoRecord__21FECustomizationRecordRCQ36Attrib3Gen8pvehicle = .text:0x80166778; // type:function size:0x2C scope:global +GetInstalledPart__C21FECustomizationRecord7CarTypei = .text:0x801667A4; // type:function size:0x30 scope:global +SetInstalledPart__21FECustomizationRecordiP7CarPart = .text:0x801667D4; // type:function size:0x6C scope:global +WriteRecordIntoRide__C21FECustomizationRecordP8RideInfo = .text:0x80166840; // type:function size:0x60 scope:global +WriteRideIntoRecord__21FECustomizationRecordPC8RideInfo = .text:0x801668A0; // type:function size:0x58 scope:global +__21FECustomizationRecord = .text:0x801668F8; // type:function size:0x74 scope:global +BecomePreset__21FECustomizationRecordP9PresetCar = .text:0x8016696C; // type:function size:0xB0 scope:global +__17FEInfractionsDataUi = .text:0x80166A1C; // type:function size:0x104 scope:global +NumInfractions__C17FEInfractionsData = .text:0x80166B20; // type:function size:0x44 scope:global +__apl__17FEInfractionsDataRC17FEInfractionsData = .text:0x80166B64; // type:function size:0x84 scope:global +GetValue__C17FEInfractionsDataQ218GInfractionManager14InfractionType = .text:0x80166BE8; // type:function size:0xA4 scope:global +GetFineValue__C17FEInfractionsData = .text:0x80166C8C; // type:function size:0x464 scope:global +Default__13FEImpoundData = .text:0x801670F0; // type:function size:0x2C scope:global +BecomeImpounded__13FEImpoundDataQ213FEImpoundData15eImpoundReasons = .text:0x8016711C; // type:function size:0x18 scope:global +NotifyPlayerPaidToRelease__13FEImpoundData = .text:0x80167134; // type:function size:0x14 scope:global +NotifyPlayerUsedMarkerToRelease__13FEImpoundData = .text:0x80167148; // type:function size:0x20 scope:global +NotifyWin__13FEImpoundData = .text:0x80167168; // type:function size:0x64 scope:global +NotifyBusted__13FEImpoundData = .text:0x801671CC; // type:function size:0x30 scope:global +NotifyEvade__13FEImpoundData = .text:0x801671FC; // type:function size:0x74 scope:global +CanAddMaxBusted__13FEImpoundData = .text:0x80167270; // type:function size:0x3C scope:global +AddMaxBusted__13FEImpoundData = .text:0x801672AC; // type:function size:0x30 scope:global +Default__14FECareerRecord = .text:0x801672DC; // type:function size:0xC0 scope:global +SetVehicleHeat__14FECareerRecordf = .text:0x8016739C; // type:function size:0x8 scope:global +GetVehicleHeat__14FECareerRecord = .text:0x801673A4; // type:function size:0x8 scope:global +AdjustHeatOnEventWin__14FECareerRecord = .text:0x801673AC; // type:function size:0x88 scope:global +AdjustHeatOnEvadePursuit__14FECareerRecord = .text:0x80167434; // type:function size:0x88 scope:global +AdjustHeatOnDecalApplied__14FECareerRecordf = .text:0x801674BC; // type:function size:0xA0 scope:global +AdjustHeatOnPaintApplied__14FECareerRecordf = .text:0x8016755C; // type:function size:0xA0 scope:global +AdjustHeatOnVinylApplied__14FECareerRecordf = .text:0x801675FC; // type:function size:0xA0 scope:global +AdjustHeatOnBodyKitApplied__14FECareerRecordf = .text:0x8016769C; // type:function size:0xA0 scope:global +AdjustHeatOnHoodApplied__14FECareerRecordf = .text:0x8016773C; // type:function size:0xA0 scope:global +AdjustHeatOnRimApplied__14FECareerRecordf = .text:0x801677DC; // type:function size:0xA0 scope:global +AdjustHeatOnRimPaintApplied__14FECareerRecordf = .text:0x8016787C; // type:function size:0xA0 scope:global +AdjustHeatOnRoofScoopApplied__14FECareerRecordf = .text:0x8016791C; // type:function size:0xA0 scope:global +AdjustHeatOnSpoilerApplied__14FECareerRecordf = .text:0x801679BC; // type:function size:0xA0 scope:global +AdjustHeatOnWindowTintApplied__14FECareerRecordf = .text:0x80167A5C; // type:function size:0xA0 scope:global +CommitPursuitCarData__14FECareerRecordUiUib = .text:0x80167AFC; // type:function size:0x78 scope:global +WaiveIncractions__14FECareerRecordUi = .text:0x80167B74; // type:function size:0xB0 scope:global +ServeAllIncractions__14FECareerRecord = .text:0x80167C24; // type:function size:0x6C scope:global +GetNumInfraction__C14FECareerRecordQ218GInfractionManager14InfractionTypeb = .text:0x80167C90; // type:function size:0x34 scope:global +Initialize__14FERenderObject = .text:0x80167CC4; // type:function size:0x5C scope:global +__14FERenderObjectP8FEObjectP11TextureInfo = .text:0x80167D20; // type:function size:0x58 scope:global +_._14FERenderObject = .text:0x80167D78; // type:function size:0x74 scope:global +SetTransform__14FERenderObjectP8bMatrix4 = .text:0x80167DEC; // type:function size:0x28 scope:global +__nw__13FERenderEPolyUi = .text:0x80167E14; // type:function size:0x84 scope:global +__dl__13FERenderEPolyPv = .text:0x80167E98; // type:function size:0x78 scope:global +AddPoly__14FERenderObjectfffffffffPUiP19FEPackageRenderInfo = .text:0x80167F10; // type:function size:0x1C0 scope:global +AddPoly__14FERenderObjectfffffffffPUiP11TextureInfoP19FEPackageRenderInfo = .text:0x801680D0; // type:function size:0x44 scope:global +AddPolyWithRotatedMask__14FERenderObjectfffffffffffffffffPUiP11TextureInfoT19_ = .text:0x80168114; // type:function size:0x244 scope:global +V4Mult__FRC8bVector4f = .text:0x80168358; // type:function size:0x38 scope:global +AddPoly__14FERenderObjectfffffffffPUiP10FEClipInfoP19FEPackageRenderInfo = .text:0x80168390; // type:function size:0x4A8 scope:global +Render__14FERenderObject = .text:0x80168838; // type:function size:0xB8 scope:global +Clear__14FERenderObjectP19FEPackageRenderInfo = .text:0x801688F0; // type:function size:0x70 scope:global +ClipGeneral__14FERenderObjectP10FEClipInfoP8bVector3P8bVector2P8bVector4T2T3T4 = .text:0x80168960; // type:function size:0x6F4 scope:global +ClipLeft__FP8bVector3P8bVector2P8bVector4T0T1T2Uif = .text:0x80169054; // type:function size:0x5B8 scope:global +ClipTop__FP8bVector3P8bVector2P8bVector4T0T1T2Uif = .text:0x8016960C; // type:function size:0x5B8 scope:global +ClipRight__FP8bVector3P8bVector2P8bVector4T0T1T2Uif = .text:0x80169BC4; // type:function size:0x5B8 scope:global +ClipBottom__FP8bVector3P8bVector2P8bVector4T0T1T2Uif = .text:0x8016A17C; // type:function size:0x5B8 scope:global +ClipAligned__14FERenderObjectP10FEClipInfoP8bVector3P8bVector2P8bVector4T2T3T4 = .text:0x8016A734; // type:function size:0xF4 scope:global +FEngColorToEpolyColor__FG7FEColor = .text:0x8016A828; // type:function size:0x50 scope:global +next_power_of_2__FUi = .text:0x8016A878; // type:function size:0x34 scope:global +MakeRenderMatrix__11cFEngRenderP9FEObjDataP8bMatrix4R7FEColorif = .text:0x8016A8AC; // type:function size:0x2FC scope:global +RenderMovie__11cFEngRenderP7FEMovieP14FERenderObjectP19FEPackageRenderInfo = .text:0x8016ABA8; // type:function size:0x3C scope:global +rotate_uvs__FP8bVector2fff = .text:0x8016ABE4; // type:function size:0x1C8 scope:local +RenderMultiImage__11cFEngRenderP12FEMultiImageP14FERenderObjectP19FEPackageRenderInfo = .text:0x8016ADAC; // type:function size:0x46C scope:global +RenderImage__11cFEngRenderP7FEImageP14FERenderObjectP19FEPackageRenderInfo = .text:0x8016B218; // type:function size:0x258 scope:global +RenderCBVImage__11cFEngRenderP14FEColoredImageP14FERenderObjectP19FEPackageRenderInfo = .text:0x8016B470; // type:function size:0x2D8 scope:global +RenderString__11cFEngRenderP8FEStringP14FERenderObjectP19FEPackageRenderInfo = .text:0x8016B748; // type:function size:0x21C scope:global +RenderModel__11cFEngRenderP7FEModelP14FERenderObject = .text:0x8016B964; // type:function size:0x4 scope:global +RenderObject__11cFEngRenderP8FEObjectP19FEPackageRenderInfo = .text:0x8016B968; // type:function size:0x140 scope:global +RemoveCachedRender__11cFEngRenderP8FEObjectP19FEPackageRenderInfo = .text:0x8016BAA8; // type:function size:0x58 scope:global +FindCachedRender__11cFEngRenderP8FEObject = .text:0x8016BB00; // type:function size:0x8 scope:global +CreateCachedRender__11cFEngRenderP8FEObjectP11TextureInfo = .text:0x8016BB08; // type:function size:0x48 scope:global +__11cFEngRender = .text:0x8016BB50; // type:function size:0x70 scope:global +GetRenderContext__11cFEngRenderUs = .text:0x8016BBC0; // type:function size:0x10 scope:global +GenerateRenderContext__11cFEngRenderUsP8FEObject = .text:0x8016BBD0; // type:function size:0x13C scope:global +PrepForPackage__11cFEngRenderP9FEPackage = .text:0x8016BD0C; // type:function size:0x1C scope:global +PackageFinished__11cFEngRenderP9FEPackage = .text:0x8016BD28; // type:function size:0x4 scope:global +AddToRenderList__11cFEngRenderP8FEObject = .text:0x8016BD2C; // type:function size:0xB0 scope:global +SetLoadingScreenPackageName__FPCc = .text:0x8016BDDC; // type:function size:0xC scope:global +GetLoadingScreenPackageName__Fv = .text:0x8016BDE8; // type:function size:0xC scope:global +CreateMainMenu__FP21ScreenConstructorData = .text:0x8016BDF4; // type:function size:0x38 scope:local +CreateSubMenu__FP21ScreenConstructorData = .text:0x8016BE2C; // type:function size:0xF4 scope:local +CreateCommonPauseMenu__FP21ScreenConstructorData = .text:0x8016BF20; // type:function size:0x60 scope:local +CreateOptionsScreen__FP21ScreenConstructorData = .text:0x8016BF80; // type:function size:0x38 scope:local +CreateQRBrief__FP21ScreenConstructorData = .text:0x8016BFB8; // type:function size:0x38 scope:local +CreateQRTrackSelect__FP21ScreenConstructorData = .text:0x8016BFF0; // type:function size:0x38 scope:local +CreateQRTrackOptions__FP21ScreenConstructorData = .text:0x8016C028; // type:function size:0x38 scope:local +CreateQRCarSelect__FP21ScreenConstructorData = .text:0x8016C060; // type:function size:0x38 scope:local +CreateQRPressStart__FP21ScreenConstructorData = .text:0x8016C098; // type:function size:0x38 scope:local +CreateQRChallengeSeries__FP21ScreenConstructorData = .text:0x8016C0D0; // type:function size:0x38 scope:local +CreateShowcase__FP21ScreenConstructorData = .text:0x8016C108; // type:function size:0x38 scope:local +CreateFadeScreen__FP21ScreenConstructorData = .text:0x8016C140; // type:function size:0x38 scope:local +CreateWorldMap__FP21ScreenConstructorData = .text:0x8016C178; // type:function size:0x38 scope:local +CreateSMS__FP21ScreenConstructorData = .text:0x8016C1B0; // type:function size:0x38 scope:local +CreateSMSMessage__FP21ScreenConstructorData = .text:0x8016C1E8; // type:function size:0x38 scope:local +CreateControllerUnplugged__FP21ScreenConstructorData = .text:0x8016C220; // type:function size:0x38 scope:local +CreateMovieScreen__FP21ScreenConstructorData = .text:0x8016C258; // type:function size:0x38 scope:local +CreateSplashScreen__FP21ScreenConstructorData = .text:0x8016C290; // type:function size:0x38 scope:local +CreateLoadingTipsScreen__FP21ScreenConstructorData = .text:0x8016C2C8; // type:function size:0x2C scope:local +CreateLanguageSelectScreen__FP21ScreenConstructorData = .text:0x8016C2F4; // type:function size:0x38 scope:local +CreateSixDaysLaterScreen__FP21ScreenConstructorData = .text:0x8016C32C; // type:function size:0x38 scope:local +CreateEngageEventDialog__FP21ScreenConstructorData = .text:0x8016C364; // type:function size:0x38 scope:local +CreateUISafeHouseRaceSheet__FP21ScreenConstructorData = .text:0x8016C39C; // type:function size:0x38 scope:local +CreateUIRapSheetLogin__FP21ScreenConstructorData = .text:0x8016C3D4; // type:function size:0x38 scope:local +CreateUIRapSheetMain__FP21ScreenConstructorData = .text:0x8016C40C; // type:function size:0x38 scope:local +CreateUIRapSheetRS__FP21ScreenConstructorData = .text:0x8016C444; // type:function size:0x38 scope:local +CreateUIRapSheetUS__FP21ScreenConstructorData = .text:0x8016C47C; // type:function size:0x38 scope:local +CreateUIRapSheetVD__FP21ScreenConstructorData = .text:0x8016C4B4; // type:function size:0x38 scope:local +CreateUIRapSheetCTS__FP21ScreenConstructorData = .text:0x8016C4EC; // type:function size:0x38 scope:local +CreateUIRapSheetTEP__FP21ScreenConstructorData = .text:0x8016C524; // type:function size:0x38 scope:local +CreateUIRapSheetPD__FP21ScreenConstructorData = .text:0x8016C55C; // type:function size:0x38 scope:local +CreateUIRapSheetRankings__FP21ScreenConstructorData = .text:0x8016C594; // type:function size:0x38 scope:local +CreateUIRapSheetRankingsDetail__FP21ScreenConstructorData = .text:0x8016C5CC; // type:function size:0x38 scope:local +CreateUISafeHouseRepSheetMain__FP21ScreenConstructorData = .text:0x8016C604; // type:function size:0x38 scope:local +CreateUISafeHouseRivalChallenge__FP21ScreenConstructorData = .text:0x8016C63C; // type:function size:0x38 scope:local +CreateUISafeHouseRivalBio__FP21ScreenConstructorData = .text:0x8016C674; // type:function size:0x38 scope:local +CreateUISafeHouseMilestones__FP21ScreenConstructorData = .text:0x8016C6AC; // type:function size:0x38 scope:local +CreateUISafeHouseRegionUnlock__FP21ScreenConstructorData = .text:0x8016C6E4; // type:function size:0x38 scope:local +CreateUISafeHouseBounty__FP21ScreenConstructorData = .text:0x8016C71C; // type:function size:0x38 scope:local +CreateUISafeHouseMarkers__FP21ScreenConstructorData = .text:0x8016C754; // type:function size:0x38 scope:local +CreateGameWonScreen__FP21ScreenConstructorData = .text:0x8016C78C; // type:function size:0x38 scope:local +CreateDebugCarCustomize__FP21ScreenConstructorData = .text:0x8016C7C4; // type:function size:0x38 scope:local +CreateMyCarsManager__FP21ScreenConstructorData = .text:0x8016C7FC; // type:function size:0x38 scope:local +CreateCustomizeMainScreen__FP21ScreenConstructorData = .text:0x8016C834; // type:function size:0x38 scope:local +CreateCustomizeSubScreen__FP21ScreenConstructorData = .text:0x8016C86C; // type:function size:0x38 scope:local +CreateCustomizeShoppingCartScreen__FP21ScreenConstructorData = .text:0x8016C8A4; // type:function size:0x38 scope:local +CreateCustomizePartsScreen__FP21ScreenConstructorData = .text:0x8016C8DC; // type:function size:0x38 scope:local +CreateCustomHUDColorScreen__FP21ScreenConstructorData = .text:0x8016C914; // type:function size:0x38 scope:local +CreateDecalsScreen__FP21ScreenConstructorData = .text:0x8016C94C; // type:function size:0x38 scope:local +CreateNumbersScreen__FP21ScreenConstructorData = .text:0x8016C984; // type:function size:0x38 scope:local +CreatePaintScreen__FP21ScreenConstructorData = .text:0x8016C9BC; // type:function size:0x38 scope:local +CreateRimmingScreen__FP21ScreenConstructorData = .text:0x8016C9F4; // type:function size:0x38 scope:local +CreateSpoilersScreen__FP21ScreenConstructorData = .text:0x8016CA2C; // type:function size:0x38 scope:local +CreateCustomizePerformanceScreen__FP21ScreenConstructorData = .text:0x8016CA64; // type:function size:0x38 scope:local +CreateCustomTuningScreen__FP21ScreenConstructorData = .text:0x8016CA9C; // type:function size:0x38 scope:local +CreatePostRaceResultsScreen__FP21ScreenConstructorData = .text:0x8016CAD4; // type:function size:0x38 scope:local +CreateBustedOverlayScreen__FP21ScreenConstructorData = .text:0x8016CB0C; // type:function size:0x38 scope:local +CreatePostRacePursuitScreen__FP21ScreenConstructorData = .text:0x8016CB44; // type:function size:0x38 scope:local +CreatePostRaceMilestonesScreen__FP21ScreenConstructorData = .text:0x8016CB7C; // type:function size:0x38 scope:local +CreateCreditsScreen__FP21ScreenConstructorData = .text:0x8016CBB4; // type:function size:0x38 scope:local +CreateUIEATraxScreen__FP21ScreenConstructorData = .text:0x8016CBEC; // type:function size:0x38 scope:local +CreateLoadingScreen__FP21ScreenConstructorData = .text:0x8016CC24; // type:function size:0x2C scope:local +CreateLoadingControllerScreen__FP21ScreenConstructorData = .text:0x8016CC50; // type:function size:0x2C scope:local +CreateOptionsControllerScreen__FP21ScreenConstructorData = .text:0x8016CC7C; // type:function size:0x38 scope:local +ScreenFactory__FUiP9FEPackagei = .text:0x8016CCB4; // type:function size:0xC8 scope:local +FindScreenCreateData__FUi = .text:0x8016CD7C; // type:function size:0x64 scope:local +FindScreenButtonDatum__FUi = .text:0x8016CDE0; // type:function size:0x78 scope:local +FindAvailableButtonDatum__Fv = .text:0x8016CE58; // type:function size:0x34 scope:local +FEngGetLastButton__FPCc = .text:0x8016CE8C; // type:function size:0x38 scope:global +FEngSetLastButton__FPCcUc = .text:0x8016CEC4; // type:function size:0x70 scope:global +FEngSetCreateCallback__FPCcPFP21ScreenConstructorData_P10MenuScreen = .text:0x8016CF34; // type:function size:0x64 scope:global +__13FEPackageDataP6bChunk = .text:0x8016CF98; // type:function size:0xB0 scope:global +_._13FEPackageData = .text:0x8016D048; // type:function size:0x80 scope:global +Activate__13FEPackageDataP9FEPackagei = .text:0x8016D0C8; // type:function size:0x70 scope:global +UnActivate__13FEPackageData = .text:0x8016D138; // type:function size:0x9C scope:global +Close__13FEPackageData = .text:0x8016D1D4; // type:function size:0x94 scope:global +GetDataChunk__13FEPackageData = .text:0x8016D268; // type:function size:0x88 scope:global +GetNameHash__13FEPackageData = .text:0x8016D2F0; // type:function size:0xF4 scope:global +NotificationMessage__13FEPackageDataUlP8FEObjectUlUl = .text:0x8016D3E4; // type:function size:0x2C scope:global +NotifySoundMessage__13FEPackageDataUlP8FEObjectUlUl = .text:0x8016D410; // type:function size:0x2C scope:global +Init__16FEPackageManager = .text:0x8016D43C; // type:function size:0x54 scope:global +Get__16FEPackageManager = .text:0x8016D490; // type:function size:0xC scope:global +BroadcastMessage__16FEPackageManagerUl = .text:0x8016D49C; // type:function size:0xE0 scope:global +GetActiveScreensChecksum__16FEPackageManager = .text:0x8016D57C; // type:function size:0x88 scope:global +FEngGetActiveScreensChecksum__Fv = .text:0x8016D604; // type:function size:0x24 scope:global +NotifySoundMessage__16FEPackageManagerUlP8FEObjectUlUl = .text:0x8016D628; // type:function size:0x88 scope:global +NotificationMessage__16FEPackageManagerUlP8FEObjectUlUl = .text:0x8016D6B0; // type:function size:0x88 scope:global +GetBasePkgName__16FEPackageManagerPCc = .text:0x8016D738; // type:function size:0x64 scope:global +FindPackage__16FEPackageManagerPCc = .text:0x8016D79C; // type:function size:0x34 scope:global +GetPackageData__16FEPackageManagerPCc = .text:0x8016D7D0; // type:function size:0x34 scope:global +CloseAllPackages__16FEPackageManageri = .text:0x8016D804; // type:function size:0x7C scope:global +GetVisibility__16FEPackageManagerPCc = .text:0x8016D880; // type:function size:0x44 scope:global +FindScreen__16FEPackageManagerPCc = .text:0x8016D8C4; // type:function size:0x34 scope:global +FindFEPackageData__16FEPackageManagerP6bChunk = .text:0x8016D8F8; // type:function size:0x2C scope:global +FindFEPackageData__16FEPackageManagerPCc = .text:0x8016D924; // type:function size:0x98 scope:global +SetPackageDataArg__16FEPackageManagerPCci = .text:0x8016D9BC; // type:function size:0x4C scope:global +PackageWasLoaded__16FEPackageManagerP9FEPackage = .text:0x8016DA08; // type:function size:0x44 scope:global +PackageWillBeUnloaded__16FEPackageManagerP9FEPackage = .text:0x8016DA4C; // type:function size:0x30 scope:global +Loader__16FEPackageManagerP6bChunkb = .text:0x8016DA7C; // type:function size:0x90 scope:global +UnLoader__16FEPackageManagerP6bChunkb = .text:0x8016DB0C; // type:function size:0x8C scope:global +ErrorTick__16FEPackageManager = .text:0x8016DB98; // type:function size:0x28 scope:global +Tick__16FEPackageManager = .text:0x8016DBC0; // type:function size:0x28 scope:global +HACK_FEPkgMgr_GetPackageRenderInfo__FP9FEPackage = .text:0x8016DBE8; // type:function size:0x1C scope:global +FEngFindScreen__FPCc = .text:0x8016DC04; // type:function size:0x34 scope:global +LoaderFEngPackage__FP6bChunk = .text:0x8016DC38; // type:function size:0x74 scope:global +UnloaderFEngPackage__FP6bChunk = .text:0x8016DCAC; // type:function size:0x74 scope:global +FindExtraFontData__FUi = .text:0x8016DD20; // type:function size:0x38 scope:global +FindFont__FUi = .text:0x8016DD58; // type:function size:0x70 scope:global +LoaderFEngFont__FP6bChunk = .text:0x8016DDC8; // type:function size:0x7C scope:global +UnloaderFEngFont__FP6bChunk = .text:0x8016DE44; // type:function size:0x6C scope:global +__8FEngFontP6bChunk = .text:0x8016DEB0; // type:function size:0x184 scope:global +_._8FEngFont = .text:0x8016E034; // type:function size:0x44 scope:global +NotifyTextureLoading__8FEngFontP11TexturePackb = .text:0x8016E078; // type:function size:0x50 scope:global +FEngFontNotifyTextureLoading__FP11TexturePackb = .text:0x8016E0C8; // type:function size:0x58 scope:global +IsJoyEventTexture__8FEngFontPCsUl = .text:0x8016E120; // type:function size:0x58 scope:global +SkipJoyEventTexture__8FEngFontPCsUl = .text:0x8016E178; // type:function size:0x50 scope:global +GetJoyEventTextureWidth__8FEngFontPCs = .text:0x8016E1C8; // type:function size:0x64 scope:global +GetJoyEventTextureInfo__8FEngFontPCs = .text:0x8016E22C; // type:function size:0xC4 scope:global +HandleJoyEventTexture__8FEngFontPCsffPUiP14FERenderObjectRfP19FEPackageRenderInfo = .text:0x8016E2F0; // type:function size:0x170 scope:global +RenderString__8FEngFontRC7FEColorPCsP8FEStringP8bMatrix4P14FERenderObjectP19FEPackageRenderInfo = .text:0x8016E460; // type:function size:0x624 scope:global +GetNextWordWidth__8FEngFontPCsUl = .text:0x8016EA84; // type:function size:0xA0 scope:global +GetCharacterWidth__8FEngFontssUl = .text:0x8016EB24; // type:function size:0x174 scope:global +GetLineWidth__8FEngFontPCsUlUlb = .text:0x8016EC98; // type:function size:0x158 scope:global +GetTextWidth__8FEngFontPCsUl = .text:0x8016EDF0; // type:function size:0xC8 scope:global +GetHeight__8FEngFont = .text:0x8016EEB8; // type:function size:0x8 scope:global +GetTextHeight__8FEngFontPCsiUlUlb = .text:0x8016EEC0; // type:function size:0x210 scope:global +ConvertCharacter__8FEngFontUs = .text:0x8016F0D0; // type:function size:0x48 scope:global +CalculateXOffset__8FEngFontUif = .text:0x8016F118; // type:function size:0x38 scope:global +CalculateYOffset__8FEngFontUif = .text:0x8016F150; // type:function size:0x38 scope:global +__10MenuScreenP21ScreenConstructorData = .text:0x8016F188; // type:function size:0x1D8 scope:global +_._10MenuScreen = .text:0x8016F360; // type:function size:0x178 scope:global +BaseNotify__10MenuScreenUlP8FEObjectUlUl = .text:0x8016F4D8; // type:function size:0x9C scope:global +FEngGetEditedString__10MenuScreen = .text:0x8016F574; // type:function size:0x10 scope:global +FEngEndTextInput__10MenuScreen = .text:0x8016F584; // type:function size:0x48 scope:global +FEngBeginTextInput__10MenuScreenUiUiPCcT3Ui = .text:0x8016F5CC; // type:function size:0x120 scope:global +CheckKeyboard__10MenuScreenUi = .text:0x8016F6EC; // type:function size:0xF8 scope:global +BaseNotifySound__10MenuScreenUlP8FEObjectUlUl = .text:0x8016F7E4; // type:function size:0xEC8 scope:global +FindButtonNameHashForFEString__Fii12JoystickPort = .text:0x801706AC; // type:function size:0x68 scope:global +FEngMapJoyParamToJoyport__Fi = .text:0x80170714; // type:function size:0x44 scope:global +FEngMapJoyportToJoyParam__Fi = .text:0x80170758; // type:function size:0x44 scope:global +FEngSNMakeHidden__FPciPCc = .text:0x8017079C; // type:function size:0x70 scope:global +FEngSNMakeHidden__FPciPUs = .text:0x8017080C; // type:function size:0x70 scope:global +FEngTickSinglePackage__FPCcUi = .text:0x8017087C; // type:function size:0x70 scope:global +FEngHashString__FPCce = .text:0x801708EC; // type:function size:0xB4 scope:global +SetScript__12ScrollerSlotUi = .text:0x801709A0; // type:function size:0x7C scope:global +FindSize__12ScrollerSlot = .text:0x80170A1C; // type:function size:0xD4 scope:global +Show__12ScrollerSlot = .text:0x80170AF0; // type:function size:0x60 scope:global +Hide__12ScrollerSlot = .text:0x80170B50; // type:function size:0x60 scope:global +__11ScrollerinaPCcN21bN34 = .text:0x80170BB0; // type:function size:0x13C scope:global +AddSlot__11ScrollerinaP12ScrollerSlot = .text:0x80170CEC; // type:function size:0x70 scope:global +AddData__11ScrollerinaP13ScrollerDatum = .text:0x80170D5C; // type:function size:0x58 scope:global +FindDatumInSlot__11ScrollerinaP12ScrollerSlot = .text:0x80170DB4; // type:function size:0x64 scope:global +FindSlotWithDatum__11ScrollerinaP13ScrollerDatum = .text:0x80170E18; // type:function size:0x6C scope:global +ScrollNext__11Scrollerina = .text:0x80170E84; // type:function size:0x84 scope:global +ScrollPrev__11Scrollerina = .text:0x80170F08; // type:function size:0x84 scope:global +Scroll__11Scrollerina10eScrollDir = .text:0x80170F8C; // type:function size:0x140 scope:global +ScrollWrapped__11Scrollerina10eScrollDir = .text:0x801710CC; // type:function size:0x16C scope:global +MoveSelected__11Scrollerina10eScrollDirb = .text:0x80171238; // type:function size:0x1D8 scope:global +ScrollSelection__11Scrollerina10eScrollDir = .text:0x80171410; // type:function size:0x110 scope:global +SyncViewToSelection__11Scrollerina = .text:0x80171520; // type:function size:0xD8 scope:global +SetDisabledScripts__11Scrollerina = .text:0x801715F8; // type:function size:0x74 scope:global +Print__11Scrollerina = .text:0x8017166C; // type:function size:0xD4 scope:global +DrawScrollBar__11Scrollerina = .text:0x80171740; // type:function size:0x64 scope:global +Update__11Scrollerinab = .text:0x801717A4; // type:function size:0x50 scope:global +Enable__11ScrollerinaP13ScrollerDatum = .text:0x801717F4; // type:function size:0x78 scope:global +CountListIndices__11Scrollerina = .text:0x8017186C; // type:function size:0x84 scope:global +GetNodeIndex__11ScrollerinaP13ScrollerDatum = .text:0x801718F0; // type:function size:0x30 scope:global +GetNodeIndex__11ScrollerinaP12ScrollerSlot = .text:0x80171920; // type:function size:0x34 scope:global +SetSelected__11ScrollerinaP12ScrollerSlot = .text:0x80171954; // type:function size:0x90 scope:global +FindSize__11Scrollerina = .text:0x801719E4; // type:function size:0x190 scope:global +__10IconOptionUiUiUi = .text:0x80171B74; // type:function size:0xAC scope:global +SetFEngObject__10IconOptionP8FEObject = .text:0x80171C20; // type:function size:0x5C scope:global +StartScale__10IconOptionff = .text:0x80171C7C; // type:function size:0x58 scope:global +__9IconPanelPCcN31b = .text:0x80171CD4; // type:function size:0xB4 scope:global +AddOption__9IconPanelP10IconOption = .text:0x80171D88; // type:function size:0xE4 scope:global +Act__9IconPanelUiP8FEObjectUiUi = .text:0x80171E6C; // type:function size:0x68 scope:global +GetOption__9IconPaneli = .text:0x80171ED4; // type:function size:0x40 scope:global +GetOptionIndex__9IconPanelP10IconOption = .text:0x80171F14; // type:function size:0x44 scope:global +SetSelection__9IconPanelP10IconOption = .text:0x80171F58; // type:function size:0x84 scope:global +SetInitialPos__9IconPanel = .text:0x80171FDC; // type:function size:0x18C scope:global +Scroll__9IconPanel10eScrollDir = .text:0x80172168; // type:function size:0xDC scope:global +ScrollWrapped__9IconPanel10eScrollDir = .text:0x80172244; // type:function size:0xD4 scope:global +Update__9IconPanel = .text:0x80172318; // type:function size:0x20 scope:global +AnimateList__9IconPanel = .text:0x80172338; // type:function size:0x38 scope:global +AnimateSelected__9IconPanelRfT1 = .text:0x80172370; // type:function size:0x1A0 scope:global +__12IconScrollerPCcN31f = .text:0x80172510; // type:function size:0x180 scope:global +Update__12IconScroller = .text:0x80172690; // type:function size:0x160 scope:global +AddInitialBookEnds__12IconScroller = .text:0x801727F0; // type:function size:0xBC scope:global +AddOption__12IconScrollerP10IconOption = .text:0x801728AC; // type:function size:0x158 scope:global +SetInitialPos__12IconScrolleri = .text:0x80172A04; // type:function size:0x200 scope:global +SetSelection__12IconScrollerP10IconOption = .text:0x80172C04; // type:function size:0xE4 scope:global +RemoveAll__12IconScroller = .text:0x80172CE8; // type:function size:0xB8 scope:global +GetOptionIndex__12IconScrollerP10IconOption = .text:0x80172DA0; // type:function size:0x54 scope:global +Scroll__12IconScroller10eScrollDir = .text:0x80172DF4; // type:function size:0xE0 scope:global +ScrollWrapped__12IconScroller10eScrollDir = .text:0x80172ED4; // type:function size:0xE8 scope:global +ClipEdges__12IconScrollerP10IconOptionf = .text:0x80172FBC; // type:function size:0x60 scope:global +Scale__12IconScrollerffff = .text:0x8017301C; // type:function size:0xA0 scope:global +PositionOption__12IconScrollerP10IconOption = .text:0x801730BC; // type:function size:0x20C scope:global +UpdateFade__12IconScrollerP10IconOptionf = .text:0x801732C8; // type:function size:0x284 scope:global +UpdateArrows__12IconScroller = .text:0x8017354C; // type:function size:0x84 scope:global +__16IconScrollerMenuP21ScreenConstructorData = .text:0x801735D0; // type:function size:0xD0 scope:global +NotificationMessage__16IconScrollerMenuUlP8FEObjectUlUl = .text:0x801736A0; // type:function size:0x4E0 scope:global +NotifySoundMessage__16IconScrollerMenuUl18eMenuSoundTriggers = .text:0x80173B80; // type:function size:0x38 scope:global +StorePrevNotification__16IconScrollerMenuUiP8FEObjectUiUi = .text:0x80173BB8; // type:function size:0x14 scope:global +RefreshHeader__16IconScrollerMenu = .text:0x80173BCC; // type:function size:0x168 scope:global +AddOption__16IconScrollerMenuP10IconOption = .text:0x80173D34; // type:function size:0x38 scope:global +__12ArrayScripts = .text:0x80173D6C; // type:function size:0x78 scope:global +__9ArraySlotP8FEObject = .text:0x80173DE4; // type:function size:0x20 scope:global +Update__9ArraySlotP10ArrayDatumb = .text:0x80173E04; // type:function size:0x124 scope:global +__14ImageArraySlotP7FEImage = .text:0x80173F28; // type:function size:0x3C scope:global +SetTexture__14ImageArraySlotUi = .text:0x80173F64; // type:function size:0x24 scope:global +Update__14ImageArraySlotP10ArrayDatumb = .text:0x80173F88; // type:function size:0x44 scope:global +__10ArrayDatumUiUi = .text:0x80173FCC; // type:function size:0x34 scope:global +__13ArrayScrollerPCciib = .text:0x80174000; // type:function size:0xE8 scope:global +RefreshHeader__13ArrayScroller = .text:0x801740E8; // type:function size:0xB8 scope:global +AddSlot__13ArrayScrollerP9ArraySlot = .text:0x801741A0; // type:function size:0x24 scope:global +AddDatum__13ArrayScrollerP10ArrayDatum = .text:0x801741C4; // type:function size:0x48 scope:global +SetSelection__13ArrayScrollerP10ArrayDatumi = .text:0x8017420C; // type:function size:0x7C scope:global +ForceSelectionOnScreen__13ArrayScrollerii = .text:0x80174288; // type:function size:0x40 scope:global +ScrollHor__13ArrayScroller10eScrollDir = .text:0x801742C8; // type:function size:0x1AC scope:global +ScrollVer__13ArrayScroller10eScrollDir = .text:0x80174474; // type:function size:0x26C scope:global +UpdateScrollbar__13ArrayScroller = .text:0x801746E0; // type:function size:0x88 scope:global +GetSlotAt__13ArrayScrolleri = .text:0x80174768; // type:function size:0x54 scope:global +GetDatumAt__13ArrayScrolleri = .text:0x801747BC; // type:function size:0x54 scope:global +SetInitialPosition__13ArrayScrolleri = .text:0x80174810; // type:function size:0xC8 scope:global +UpdateMouse__13ArrayScroller = .text:0x801748D8; // type:function size:0x4 scope:global +ClearData__13ArrayScroller = .text:0x801748DC; // type:function size:0x7C scope:global +NotificationMessage__13ArrayScrollerUlP8FEObjectUlUl = .text:0x80174958; // type:function size:0xF8 scope:global +__17ArrayScrollerMenuP21ScreenConstructorDataiib = .text:0x80174A50; // type:function size:0x70 scope:global +NotificationMessage__17ArrayScrollerMenuUlP8FEObjectUlUl = .text:0x80174AC0; // type:function size:0x24 scope:global +NotifySoundMessage__17ArrayScrollerMenuUl18eMenuSoundTriggers = .text:0x80174AE4; // type:function size:0xA0 scope:global +RefreshHeader__17ArrayScrollerMenu = .text:0x80174B84; // type:function size:0x24 scope:global +__12UIWidgetMenuP21ScreenConstructorData = .text:0x80174BA8; // type:function size:0x1EC scope:global +NotificationMessage__12UIWidgetMenuUlP8FEObjectUlUl = .text:0x80174D94; // type:function size:0x374 scope:global +NotifySoundMessage__12UIWidgetMenuUl18eMenuSoundTriggers = .text:0x80175108; // type:function size:0x44 scope:global +StorePrevNotification__12UIWidgetMenuUiP8FEObjectUiUi = .text:0x8017514C; // type:function size:0x14 scope:global +GetWidget__12UIWidgetMenuUi = .text:0x80175160; // type:function size:0x38 scope:global +Scroll__12UIWidgetMenu10eScrollDir = .text:0x80175198; // type:function size:0x218 scope:global +ScrollWrapped__12UIWidgetMenu10eScrollDir = .text:0x801753B0; // type:function size:0x298 scope:global +AddButtonOption__12UIWidgetMenuP14FEButtonWidget = .text:0x80175648; // type:function size:0x120 scope:global +AddToggleOption__12UIWidgetMenuP14FEToggleWidgetb = .text:0x80175768; // type:function size:0x1BC scope:global +AddSliderOption__12UIWidgetMenuP14FESliderWidgetb = .text:0x80175924; // type:function size:0x1E8 scope:global +GetCurrentFEString__12UIWidgetMenuPCc = .text:0x80175B0C; // type:function size:0x6C scope:global +GetCurrentFEImage__12UIWidgetMenuPCc = .text:0x80175B78; // type:function size:0x9C scope:global +GetCurrentFEObject__12UIWidgetMenuPCc = .text:0x80175C14; // type:function size:0x6C scope:global +ClearWidgets__12UIWidgetMenu = .text:0x80175C80; // type:function size:0xD8 scope:global +RefreshWidgets__12UIWidgetMenu = .text:0x80175D58; // type:function size:0x54 scope:global +SetInitialOption__12UIWidgetMenui = .text:0x80175DAC; // type:function size:0x1EC scope:global +SetOption__12UIWidgetMenuP8FEWidget = .text:0x80175F98; // type:function size:0x88 scope:global +SetInitialPositions__12UIWidgetMenu = .text:0x80176020; // type:function size:0x9C scope:global +Reposition__12UIWidgetMenu = .text:0x801760BC; // type:function size:0x128 scope:global +Reset__12UIWidgetMenu = .text:0x801761E4; // type:function size:0x58 scope:global +UpdateCursorPos__12UIWidgetMenu = .text:0x8017623C; // type:function size:0xC0 scope:global +IncrementStartPos__12UIWidgetMenu = .text:0x801762FC; // type:function size:0x20 scope:global +SyncViewToSelection__12UIWidgetMenu = .text:0x8017631C; // type:function size:0xD0 scope:global +GetWidgetIndex__12UIWidgetMenuP8FEWidget = .text:0x801763EC; // type:function size:0x30 scope:global +__8FEWidgetP8FEObjectbT2 = .text:0x8017641C; // type:function size:0x58 scope:global +__14FEButtonWidgetb = .text:0x80176474; // type:function size:0x60 scope:global +CheckMouse__14FEButtonWidgetPCcff = .text:0x801764D4; // type:function size:0x60 scope:global +Position__14FEButtonWidget = .text:0x80176534; // type:function size:0xD4 scope:global +Show__14FEButtonWidget = .text:0x80176608; // type:function size:0x40 scope:global +Hide__14FEButtonWidget = .text:0x80176648; // type:function size:0x40 scope:global +SetFocus__14FEButtonWidgetPCc = .text:0x80176688; // type:function size:0x68 scope:global +UnsetFocus__14FEButtonWidget = .text:0x801766F0; // type:function size:0x58 scope:global +__12FEStatWidgetb = .text:0x80176748; // type:function size:0x74 scope:global +Position__12FEStatWidget = .text:0x801767BC; // type:function size:0x16C scope:global +Show__12FEStatWidget = .text:0x80176928; // type:function size:0x48 scope:global +Hide__12FEStatWidget = .text:0x80176970; // type:function size:0x48 scope:global +SetPosX__12FEStatWidgetf = .text:0x801769B8; // type:function size:0x78 scope:global +SetPosY__12FEStatWidgetf = .text:0x80176A30; // type:function size:0x78 scope:global +__14FEToggleWidgetb = .text:0x80176AA8; // type:function size:0x60 scope:global +CheckMouse__14FEToggleWidgetPCcff = .text:0x80176B08; // type:function size:0x4 scope:global +Position__14FEToggleWidget = .text:0x80176B0C; // type:function size:0x94 scope:global +Enable__14FEToggleWidget = .text:0x80176BA0; // type:function size:0x4C scope:global +Disable__14FEToggleWidget = .text:0x80176BEC; // type:function size:0x50 scope:global +SetScript__14FEToggleWidgetUi = .text:0x80176C3C; // type:function size:0x80 scope:global +Show__14FEToggleWidget = .text:0x80176CBC; // type:function size:0x58 scope:global +Hide__14FEToggleWidget = .text:0x80176D14; // type:function size:0x58 scope:global +SetFocus__14FEToggleWidgetPCc = .text:0x80176D6C; // type:function size:0x48 scope:global +UnsetFocus__14FEToggleWidget = .text:0x80176DB4; // type:function size:0x28 scope:global +BlinkArrows__14FEToggleWidgetUi = .text:0x80176DDC; // type:function size:0x4 scope:global +__14FESliderWidgetb = .text:0x80176DE0; // type:function size:0x50 scope:global +Position__14FESliderWidget = .text:0x80176E30; // type:function size:0x18C scope:global +Show__14FESliderWidget = .text:0x80176FBC; // type:function size:0x5C scope:global +Hide__14FESliderWidget = .text:0x80177018; // type:function size:0x5C scope:global +Enable__14FESliderWidget = .text:0x80177074; // type:function size:0xC scope:global +Disable__14FESliderWidget = .text:0x80177080; // type:function size:0x20 scope:global +SetFocus__14FESliderWidgetPCc = .text:0x801770A0; // type:function size:0x70 scope:global +UnsetFocus__14FESliderWidget = .text:0x80177110; // type:function size:0x60 scope:global +UpdateSlider__14FESliderWidgetUi = .text:0x80177170; // type:function size:0x68 scope:global +__11FEScrollBarPCcT1bN23 = .text:0x801771D8; // type:function size:0x274 scope:global +SetGroupVisible__11FEScrollBarb = .text:0x8017744C; // type:function size:0xB4 scope:global +Update__11FEScrollBariiii = .text:0x80177500; // type:function size:0xB0 scope:global +SetPosResized__11FEScrollBariii = .text:0x801775B0; // type:function size:0x234 scope:global +SetArrowVisibility__11FEScrollBarib = .text:0x801777E4; // type:function size:0x70 scope:global +SetVisible__11FEScrollBarP8FEObject = .text:0x80177854; // type:function size:0x44 scope:global +SetInvisible__11FEScrollBarP8FEObject = .text:0x80177898; // type:function size:0x44 scope:global +SetArrow1Dim__11FEScrollBarb = .text:0x801778DC; // type:function size:0x44 scope:global +SetArrow2Dim__11FEScrollBarb = .text:0x80177920; // type:function size:0x44 scope:global +__13CTextScroller = .text:0x80177964; // type:function size:0x40 scope:global +_._13CTextScroller = .text:0x801779A4; // type:function size:0x4C scope:global +Initialise__13CTextScrollerP10MenuScreeniiPcP8FEngFont = .text:0x801779F0; // type:function size:0x4C scope:global +SetTextHash__13CTextScrollerUi = .text:0x80177A3C; // type:function size:0x78 scope:global +SetText__13CTextScrollerPs = .text:0x80177AB4; // type:function size:0x228 scope:global +Scroll__13CTextScrolleri = .text:0x80177CDC; // type:function size:0x64 scope:global +HandleNotificationMessage__13CTextScrollerUi = .text:0x80177D40; // type:function size:0x64 scope:global +Display__13CTextScrolleri = .text:0x80177DA4; // type:function size:0xEC scope:global +AddLine__13CTextScrollerPsi = .text:0x80177E90; // type:function size:0xAC scope:global +WordWrapCountLinesAndChars__13CTextScrollerPsT1RiT3 = .text:0x80177F3C; // type:function size:0x34 scope:global +WordWrapAddLines__13CTextScrollerPsT1bPi = .text:0x80177F70; // type:function size:0x210 scope:global +FindCR__13CTextScrollerPs = .text:0x80178180; // type:function size:0x50 scope:global +FindEND__13CTextScrollerPs = .text:0x801781D0; // type:function size:0x20 scope:global +UpdateScrollBar__13CTextScroller = .text:0x801781F0; // type:function size:0x44 scope:global +BeginCarCustomize__F20eCustomizeEntryPointP11FECarRecord = .text:0x80178234; // type:function size:0x7C scope:global +CustomizeIsInBackRoom__Fv = .text:0x801782B0; // type:function size:0xC scope:global +CustomizeSetInBackRoom__Fb = .text:0x801782BC; // type:function size:0xC scope:global +CustomizeIsInPerformance__Fv = .text:0x801782C8; // type:function size:0xC scope:global +CustomizeSetInPerformance__Fb = .text:0x801782D4; // type:function size:0xC scope:global +CustomizeIsInParts__Fv = .text:0x801782E0; // type:function size:0xC scope:global +CustomizeSetInParts__Fb = .text:0x801782EC; // type:function size:0xC scope:global +__12TuningSliderQ37Physics7Tunings4PathUiUib = .text:0x801782F8; // type:function size:0x94 scope:global +Act__12TuningSliderPCcUi = .text:0x8017838C; // type:function size:0xFC scope:global +CheckMouse__12TuningSliderPCcff = .text:0x80178488; // type:function size:0x4 scope:global +Draw__12TuningSlider = .text:0x8017848C; // type:function size:0xDC scope:global +Position__12TuningSlider = .text:0x80178568; // type:function size:0x4 scope:global +SetFocus__12TuningSliderPCc = .text:0x8017856C; // type:function size:0x6C scope:global +UnsetFocus__12TuningSlider = .text:0x801785D8; // type:function size:0x88 scope:global +SetSliderGroup__12TuningSliderPCcUi = .text:0x80178660; // type:function size:0x38 scope:global +InitSliderObjects__12TuningSliderPCcT1 = .text:0x80178698; // type:function size:0x88 scope:global +SetSliderValues__12TuningSliderffff = .text:0x80178720; // type:function size:0xA8 scope:global +__18CustomTuningScreenP21ScreenConstructorData = .text:0x801787C8; // type:function size:0x9C scope:global +NotificationMessage__18CustomTuningScreenUlP8FEObjectUlUl = .text:0x80178864; // type:function size:0x334 scope:global +ScrollTypes__18CustomTuningScreen10eScrollDir = .text:0x80178B98; // type:function size:0x70 scope:global +DrawSettingName__18CustomTuningScreenUi = .text:0x80178C08; // type:function size:0x88 scope:global +IsTuningAvailable__18CustomTuningScreenP13FEPlayerCarDBP11FECarRecordQ37Physics7Tunings4Path = .text:0x80178C90; // type:function size:0x168 scope:global +GetNameForPath__18CustomTuningScreenQ37Physics7Tunings4Pathb = .text:0x80178DF8; // type:function size:0xA8 scope:global +GetHelpForPath__18CustomTuningScreenQ37Physics7Tunings4PathbT2 = .text:0x80178EA0; // type:function size:0x150 scope:global +AddTuningSlider__18CustomTuningScreenP13FEPlayerCarDBP11FECarRecordQ37Physics7Tunings4Pathb = .text:0x80178FF0; // type:function size:0x1C8 scope:global +Setup__18CustomTuningScreen = .text:0x801791B8; // type:function size:0x220 scope:global +SetSlidersForType__18CustomTuningScreen = .text:0x801793D8; // type:function size:0xC0 scope:global +ShowHelpBlurb__18CustomTuningScreen = .text:0x80179498; // type:function size:0xF4 scope:global +HideHelpBlurb__18CustomTuningScreen = .text:0x8017958C; // type:function size:0x88 scope:global +StoreSettings__18CustomTuningScreen = .text:0x80179614; // type:function size:0xA4 scope:global +SettingsDidNotChange__18CustomTuningScreen = .text:0x801796B8; // type:function size:0x6C scope:global +DefaultUnlockData__Fv = .text:0x80179724; // type:function size:0xA0 scope:global +UnlockUnlockableThing__F17eUnlockableEntityUiiPCc = .text:0x801797C4; // type:function size:0x68 scope:global +MarkUnlockableThingSeen__F17eUnlockableEntityUi = .text:0x8017982C; // type:function size:0x8C scope:global +DoesCategoryHaveNewUnlock__F17eUnlockableEntity = .text:0x801798B8; // type:function size:0x3D0 scope:global +IsUnlockableUnlocked__17QuickRaceUnlocker14eUnlockFilters17eUnlockableEntityiib = .text:0x80179C88; // type:function size:0xD0 scope:global +IsCarPartUnlocked__17QuickRaceUnlocker14eUnlockFiltersiP7CarPartib = .text:0x80179D58; // type:function size:0xC8 scope:global +IsPerfPackageUnlocked__17QuickRaceUnlocker14eUnlockFiltersQ37Physics8Upgrades4Typeiib = .text:0x80179E20; // type:function size:0x8C scope:global +IsTrackUnlocked__17QuickRaceUnlocker14eUnlockFiltersii = .text:0x80179EAC; // type:function size:0x98 scope:global +IsCarUnlocked__17QuickRaceUnlocker14eUnlockFiltersUii = .text:0x80179F44; // type:function size:0x5D8 scope:global +IsBackroomAvailable__17QuickRaceUnlocker14eUnlockFilters17eUnlockableEntityii = .text:0x8017A51C; // type:function size:0x8 scope:global +IsUnlockableUnlocked__14OnlineUnlocker14eUnlockFilters17eUnlockableEntityib = .text:0x8017A524; // type:function size:0x34 scope:global +IsCarPartUnlocked__14OnlineUnlocker14eUnlockFiltersiP7CarPartb = .text:0x8017A558; // type:function size:0x34 scope:global +IsPerfPackageUnlocked__14OnlineUnlocker14eUnlockFiltersQ37Physics8Upgrades4Typeib = .text:0x8017A58C; // type:function size:0x34 scope:global +IsTrackUnlocked__14OnlineUnlocker14eUnlockFiltersi = .text:0x8017A5C0; // type:function size:0xB0 scope:global +IsCarUnlocked__14OnlineUnlocker14eUnlockFiltersUi = .text:0x8017A670; // type:function size:0x24 scope:global +IsBackroomAvailable__14OnlineUnlocker14eUnlockFilters17eUnlockableEntityi = .text:0x8017A694; // type:function size:0x24 scope:global +IsUnlockableUnlocked__14CareerUnlocker14eUnlockFilters17eUnlockableEntityib = .text:0x8017A6B8; // type:function size:0x17C scope:global +IsCarPartUnlocked__14CareerUnlocker14eUnlockFiltersiP7CarPartb = .text:0x8017A834; // type:function size:0xC4 scope:global +IsPerfPackageUnlocked__14CareerUnlocker14eUnlockFiltersQ37Physics8Upgrades4Typeib = .text:0x8017A8F8; // type:function size:0x88 scope:global +IsTrackUnlocked__14CareerUnlocker14eUnlockFiltersi = .text:0x8017A980; // type:function size:0x70 scope:global +IsCarUnlocked__14CareerUnlocker14eUnlockFiltersUi = .text:0x8017A9F0; // type:function size:0xF4 scope:global +IsBackroomAvailable__14CareerUnlocker14eUnlockFilters17eUnlockableEntityi = .text:0x8017AAE4; // type:function size:0x4D4 scope:global +IsUnlockableUnlocked__12UnlockSystem14eUnlockFilters17eUnlockableEntityiib = .text:0x8017AFB8; // type:function size:0x104 scope:global +IsCarPartUnlocked__12UnlockSystem14eUnlockFiltersiP7CarPartib = .text:0x8017B0BC; // type:function size:0x104 scope:global +IsPerfPackageUnlocked__12UnlockSystem14eUnlockFiltersQ37Physics8Upgrades4Typeiib = .text:0x8017B1C0; // type:function size:0x104 scope:global +IsTrackUnlocked__12UnlockSystem14eUnlockFiltersii = .text:0x8017B2C4; // type:function size:0xE4 scope:global +IsCarUnlocked__12UnlockSystem14eUnlockFiltersUii = .text:0x8017B3A8; // type:function size:0x114 scope:global +IsBackroomAvailable__12UnlockSystem14eUnlockFilters17eUnlockableEntityi = .text:0x8017B4BC; // type:function size:0xD4 scope:global +IsUnlockableNew__12UnlockSystem14eUnlockFilters17eUnlockableEntityi = .text:0x8017B590; // type:function size:0xB4 scope:global +ClearNewUnlock__12UnlockSystem17eUnlockableEntityUi = .text:0x8017B644; // type:function size:0x44 scope:global +MapCarPartToUnlockable__FiP7CarPart = .text:0x8017B688; // type:function size:0x14C scope:global +MapPerfPkgToUnlockable__FQ37Physics8Upgrades4Type = .text:0x8017B7D4; // type:function size:0x7C scope:global +LookupFEPartInfo__F17eUnlockableEntityi = .text:0x8017B850; // type:function size:0x218 scope:global +GetPerfPackageCost__12UnlockSystem14eUnlockFiltersQ37Physics8Upgrades4Typeii = .text:0x8017BA68; // type:function size:0x6C scope:global +GetCarPartCost__12UnlockSystem14eUnlockFiltersiP7CarParti = .text:0x8017BAD4; // type:function size:0x74 scope:global +IsEventAvailable__12UnlockSystemUi = .text:0x8017BB48; // type:function size:0xF8 scope:global +IsBonusCarCEOnly__12UnlockSystemUi = .text:0x8017BC40; // type:function size:0xC4 scope:global +IsUnlockableAvailable__12UnlockSystemUi = .text:0x8017BD04; // type:function size:0x58 scope:global +__15FEMarkerManager = .text:0x8017BD5C; // type:function size:0x30 scope:global +Default__15FEMarkerManager = .text:0x8017BD8C; // type:function size:0x4C scope:global +GetMarkerForLaterSelection__15FEMarkerManageriRQ215FEMarkerManager15ePossibleMarkerRi = .text:0x8017BDD8; // type:function size:0x20 scope:global +AddMarkerForLaterSelection__15FEMarkerManagerQ215FEMarkerManager15ePossibleMarkeri = .text:0x8017BDF8; // type:function size:0x44 scope:global +ClearMarkersForLaterSelection__15FEMarkerManager = .text:0x8017BE3C; // type:function size:0x3C scope:global +AddMarkerToInventory__15FEMarkerManagerQ215FEMarkerManager15ePossibleMarkeri = .text:0x8017BE78; // type:function size:0x40 scope:global +UtilizeMarker__15FEMarkerManagerQ215FEMarkerManager15ePossibleMarkeri = .text:0x8017BEB8; // type:function size:0x54 scope:global +UtilizeMarker__15FEMarkerManagerUi = .text:0x8017BF0C; // type:function size:0x13C scope:global +UtilizeMarker__15FEMarkerManagerQ37Physics8Upgrades4Type = .text:0x8017C048; // type:function size:0x9C scope:global +IsMarkerAvailable__15FEMarkerManagerQ215FEMarkerManager15ePossibleMarkeri = .text:0x8017C0E4; // type:function size:0x64 scope:global +GetNumCustomizeMarkers__15FEMarkerManager = .text:0x8017C148; // type:function size:0x54 scope:global +GetNumMarkers__15FEMarkerManagerQ215FEMarkerManager15ePossibleMarkeri = .text:0x8017C19C; // type:function size:0x64 scope:global +ConvertBigBangMarkerAward__15FEMarkerManagerPCcT1 = .text:0x8017C200; // type:function size:0x8C scope:global +AwardMarker__15FEMarkerManagerRQ36Attrib3Gen8gameplayb = .text:0x8017C28C; // type:function size:0x1C4 scope:global +SaveToBuffer__15FEMarkerManagerPc = .text:0x8017C450; // type:function size:0x3C scope:global +LoadFromBuffer__15FEMarkerManagerPc = .text:0x8017C48C; // type:function size:0x34 scope:global +ConvertBigBangUpgradeAward__FPCc = .text:0x8017C4C0; // type:function size:0x68 scope:global +AwardUnlockUpgrade__FRQ36Attrib3Gen8gameplay = .text:0x8017C528; // type:function size:0xFC scope:global +ClearAllNewStatus__Fv = .text:0x8017C624; // type:function size:0x4C scope:global +Last__Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi311ePlayerList = .text:0x8017C670; // type:function size:0x38 scope:global +reserve__Q24_STLt6vector2ZPQ25Sound10stSongInfoZQ24_STLt9allocator1ZPQ25Sound10stSongInfoUi = .text:0x8017C6A8; // type:function size:0x120 scope:global +__static_initialization_and_destruction_0 = .text:0x8017C7C8; // type:function size:0x1E0 scope:local +_._10HudElement = .text:0x8017C9A8; // type:function size:0x74 scope:global +Update__10HudElementP7IPlayer = .text:0x8017CA1C; // type:function size:0x4 scope:global +NotifySoundMessage__10MenuScreenUl18eMenuSoundTriggers = .text:0x8017CA20; // type:function size:0x8 scope:global +_IHandle__4IHud = .text:0x8017CA28; // type:function size:0xC scope:global +_._4IHud = .text:0x8017CA34; // type:function size:0x160 scope:global +push_back__Q23UTLt6Vector2ZP4IHudi16RCP4IHud = .text:0x8017CB94; // type:function size:0x154 scope:global +_IHandle__16IRaceOverMessage = .text:0x8017CCE8; // type:function size:0xC scope:global +_IHandle__15IGenericMessage = .text:0x8017CCF4; // type:function size:0xC scope:global +_IHandle__12ISpeedometer = .text:0x8017CD00; // type:function size:0xC scope:global +_IHandle__11ITachometer = .text:0x8017CD0C; // type:function size:0xC scope:global +_._11ITachometer = .text:0x8017CD18; // type:function size:0x54 scope:global +_IHandle__13IShiftUpdater = .text:0x8017CD6C; // type:function size:0xC scope:global +_IHandle__15ITachometerDrag = .text:0x8017CD78; // type:function size:0xC scope:global +_IHandle__11ITurbometer = .text:0x8017CD84; // type:function size:0xC scope:global +_IHandle__16IEngineTempGauge = .text:0x8017CD90; // type:function size:0xC scope:global +_IHandle__4INos = .text:0x8017CD9C; // type:function size:0xC scope:global +_IHandle__18ISpeedBreakerMeter = .text:0x8017CDA8; // type:function size:0xC scope:global +_IHandle__13IGetAwayMeter = .text:0x8017CDB4; // type:function size:0xC scope:global +_IHandle__13IPursuitBoard = .text:0x8017CDC0; // type:function size:0xC scope:global +_IHandle__15IMilestoneBoard = .text:0x8017CDCC; // type:function size:0xC scope:global +_IHandle__12IBustedMeter = .text:0x8017CDD8; // type:function size:0xC scope:global +_IHandle__14ITimeExtension = .text:0x8017CDE4; // type:function size:0xC scope:global +_IHandle__16IRaceInformation = .text:0x8017CDF0; // type:function size:0xC scope:global +_IHandle__12ILeaderBoard = .text:0x8017CDFC; // type:function size:0xC scope:global +_IHandle__12ICostToState = .text:0x8017CE08; // type:function size:0xC scope:global +_IHandle__9IWrongWay = .text:0x8017CE14; // type:function size:0xC scope:global +_IHandle__10IHeatMeter = .text:0x8017CE20; // type:function size:0xC scope:global +_IHandle__16IMenuZoneTrigger = .text:0x8017CE2C; // type:function size:0xC scope:global +_IHandle__14IRadarDetector = .text:0x8017CE38; // type:function size:0xC scope:global +_IHandle__12IInfractions = .text:0x8017CE44; // type:function size:0xC scope:global +_._12GetAwayMeter = .text:0x8017CE50; // type:function size:0x98 scope:global +SetGetAwayDistance__12GetAwayMeterf = .text:0x8017CEE8; // type:function size:0x8 scope:global +_._13RadarDetector = .text:0x8017CEF0; // type:function size:0x98 scope:global +SetTarget__13RadarDetectorQ214IRadarDetector11RadarTargetff = .text:0x8017CF88; // type:function size:0x18 scope:global +SetInPursuit__13RadarDetectorb = .text:0x8017CFA0; // type:function size:0x8 scope:global +SetIsCoolingDown__13RadarDetectorb = .text:0x8017CFA8; // type:function size:0x8 scope:global +Default__Q27Physics7Tunings = .text:0x8017CFB0; // type:function size:0x28 scope:global +_._Q213FEPlayerCarDB10MyCallback = .text:0x8017CFD8; // type:function size:0x34 scope:global +_._9HeatMeter = .text:0x8017D00C; // type:function size:0x98 scope:global +_._11CostToState = .text:0x8017D0A4; // type:function size:0x98 scope:global +SetInPursuit__11CostToStateb = .text:0x8017D13C; // type:function size:0x8 scope:global +_._10Reputation = .text:0x8017D144; // type:function size:0x98 scope:global +_._7cSlider = .text:0x8017D1DC; // type:function size:0x34 scope:global +_._14TwoStageSlider = .text:0x8017D210; // type:function size:0x34 scope:global +_._14FEButtonWidget = .text:0x8017D244; // type:function size:0x34 scope:global +SetPos__14FEButtonWidgetR8bVector2 = .text:0x8017D278; // type:function size:0x64 scope:global +_._12FEStatWidget = .text:0x8017D2DC; // type:function size:0x34 scope:global +Act__12FEStatWidgetPCcUi = .text:0x8017D310; // type:function size:0x4 scope:global +CheckMouse__12FEStatWidgetPCcff = .text:0x8017D314; // type:function size:0x4 scope:global +SetFocus__12FEStatWidgetPCc = .text:0x8017D318; // type:function size:0x4 scope:global +UnsetFocus__12FEStatWidget = .text:0x8017D31C; // type:function size:0x4 scope:global +SetPos__12FEStatWidgetR8bVector2 = .text:0x8017D320; // type:function size:0x64 scope:global +_._14FEToggleWidget = .text:0x8017D384; // type:function size:0x34 scope:global +_._14FESliderWidget = .text:0x8017D3B8; // type:function size:0x40 scope:global +_._9IconPanel = .text:0x8017D3F8; // type:function size:0x8C scope:global +RemoveAll__9IconPanel = .text:0x8017D484; // type:function size:0x74 scope:global +GetHead__9IconPanel = .text:0x8017D4F8; // type:function size:0x8 scope:global +IsHead__9IconPanelP10IconOption = .text:0x8017D500; // type:function size:0x14 scope:global +IsTail__9IconPanelP10IconOption = .text:0x8017D514; // type:function size:0x14 scope:global +IsEndOfList__9IconPanelP10IconOption = .text:0x8017D528; // type:function size:0x10 scope:global +_._16FEScrollyBookEnd = .text:0x8017D538; // type:function size:0x34 scope:global +React__16FEScrollyBookEndPCcUiP8FEObjectUiUi = .text:0x8017D56C; // type:function size:0x4 scope:global +_._12IconScroller = .text:0x8017D570; // type:function size:0x8C scope:global +GetHead__12IconScroller = .text:0x8017D5FC; // type:function size:0xC scope:global +IsHead__12IconScrollerP10IconOption = .text:0x8017D608; // type:function size:0x18 scope:global +IsTail__12IconScrollerP10IconOption = .text:0x8017D620; // type:function size:0x18 scope:global +IsEndOfList__12IconScrollerP10IconOption = .text:0x8017D638; // type:function size:0x28 scope:global +_._16IconScrollerMenu = .text:0x8017D660; // type:function size:0x98 scope:global +_._9ArraySlot = .text:0x8017D6F8; // type:function size:0x34 scope:global +_._14ImageArraySlot = .text:0x8017D72C; // type:function size:0x34 scope:global +_._13ArrayScroller = .text:0x8017D760; // type:function size:0xE4 scope:global +_._17ArrayScrollerMenu = .text:0x8017D844; // type:function size:0xF0 scope:global +_._12UIWidgetMenu = .text:0x8017D934; // type:function size:0x8C scope:global +Setup__12UIWidgetMenu = .text:0x8017D9C0; // type:function size:0x4 scope:global +Release__7FEngHud = .text:0x8017D9C4; // type:function size:0x44 scope:global +IsHudVisible__7FEngHud = .text:0x8017DA08; // type:function size:0x20 scope:global +HideAll__7FEngHud = .text:0x8017DA28; // type:function size:0x28 scope:global +SetHasTurbo__7FEngHudb = .text:0x8017DA50; // type:function size:0x8 scope:global +_._18HudResourceManager = .text:0x8017DA58; // type:function size:0x34 scope:global +LoadingCompleteCallbackBridge__18HudResourceManageri = .text:0x8017DA8C; // type:function size:0x20 scope:global +LoadingCompleteCallbackBridge__18HudResourceManagerUi = .text:0x8017DAAC; // type:function size:0x20 scope:global +LoadedCustomHudTexturePackCallbackBridge__18HudResourceManagerUi = .text:0x8017DACC; // type:function size:0x20 scope:global +LoadedCustomHudTexturesCallbackBridge__18HudResourceManagerUi = .text:0x8017DAEC; // type:function size:0x20 scope:global +IsFlagSet__C5GIconUi = .text:0x8017DB0C; // type:function size:0x18 scope:global +_._9Countdown = .text:0x8017DB24; // type:function size:0x98 scope:global +_._14GenericMessage = .text:0x8017DBBC; // type:function size:0x98 scope:global +GetCurrentGenericMessagePriority__14GenericMessage = .text:0x8017DC54; // type:function size:0x8 scope:global +_._15RaceOverMessage = .text:0x8017DC5C; // type:function size:0x98 scope:global +ShouldShowRaceOverMessage__15RaceOverMessage = .text:0x8017DCF4; // type:function size:0x8 scope:global +_._16FEPackageManager = .text:0x8017DCFC; // type:function size:0x8C scope:global +_._12NitrousGauge = .text:0x8017DD88; // type:function size:0x98 scope:global +_._17SpeedBreakerMeter = .text:0x8017DE20; // type:function size:0x98 scope:global +_._15EngineTempGauge = .text:0x8017DEB8; // type:function size:0x98 scope:global +_._11Speedometer = .text:0x8017DF50; // type:function size:0x98 scope:global +SetSpeed__11Speedometerf = .text:0x8017DFE8; // type:function size:0x8 scope:global +_._10Tachometer = .text:0x8017DFF0; // type:function size:0x98 scope:global +SetRpm__10Tachometerf = .text:0x8017E088; // type:function size:0x8 scope:global +SetRevLimiter__10Tachometerff = .text:0x8017E090; // type:function size:0xC scope:global +SetShifting__10Tachometerb = .text:0x8017E09C; // type:function size:0x8 scope:global +SetInPerfectLaunchRange__10Tachometerb = .text:0x8017E0A4; // type:function size:0x8 scope:global +SetGear__10Tachometer6GearID14ShiftPotentialb = .text:0x8017E0AC; // type:function size:0x34 scope:global +_._10WrongWIndi = .text:0x8017E0E0; // type:function size:0x98 scope:global +_._15RaceInformation = .text:0x8017E178; // type:function size:0x98 scope:global +SetNumRacers__15RaceInformationi = .text:0x8017E210; // type:function size:0x8 scope:global +SetNumLaps__15RaceInformationi = .text:0x8017E218; // type:function size:0x8 scope:global +SetPlayerPosition__15RaceInformationi = .text:0x8017E220; // type:function size:0x8 scope:global +SetPlayerLapNumber__15RaceInformationi = .text:0x8017E228; // type:function size:0x18 scope:global +SetPlayerLapTime__15RaceInformationf = .text:0x8017E240; // type:function size:0x8 scope:global +SetSuddenDeathMode__15RaceInformationb = .text:0x8017E248; // type:function size:0x8 scope:global +SetPlayerPercentComplete__15RaceInformationf = .text:0x8017E250; // type:function size:0x8 scope:global +SetPlayerTollboothsCrossed__15RaceInformationi = .text:0x8017E258; // type:function size:0x8 scope:global +SetNumTollbooths__15RaceInformationi = .text:0x8017E260; // type:function size:0x8 scope:global +_._11LeaderBoard = .text:0x8017E268; // type:function size:0x98 scope:global +SetNumRacers__11LeaderBoardi = .text:0x8017E300; // type:function size:0x8 scope:global +SetNumLaps__11LeaderBoardi = .text:0x8017E308; // type:function size:0x8 scope:global +SetPlayerIndex__11LeaderBoardi = .text:0x8017E310; // type:function size:0x8 scope:global +SetRacerIsBusted__11LeaderBoardib = .text:0x8017E318; // type:function size:0x10 scope:global +SetRacerIsKoed__11LeaderBoardib = .text:0x8017E328; // type:function size:0x10 scope:global +_._14MilestoneBoard = .text:0x8017E338; // type:function size:0x98 scope:global +SetInPursuit__14MilestoneBoardb = .text:0x8017E3D0; // type:function size:0x8 scope:global +SetChallengeSeries__14MilestoneBoardb = .text:0x8017E3D8; // type:function size:0x8 scope:global +SetNumberOfMilestones__14MilestoneBoardi = .text:0x8017E3E0; // type:function size:0x8 scope:global +SetMilestoneIconHash__14MilestoneBoardii = .text:0x8017E3E8; // type:function size:0x10 scope:global +SetMilestoneType__14MilestoneBoardiUi = .text:0x8017E3F8; // type:function size:0x10 scope:global +SetMilestoneGoal__14MilestoneBoardif = .text:0x8017E408; // type:function size:0x10 scope:global +SetMilestoneHeaderHash__14MilestoneBoardii = .text:0x8017E418; // type:function size:0x10 scope:global +MakeSpaceInPoolCallbackBridge__27SillyTextureStreamerManageri = .text:0x8017E428; // type:function size:0x20 scope:global +LoadCallbackBridge__27SillyTextureStreamerManagerUi = .text:0x8017E448; // type:function size:0x20 scope:global +_._8RaceStat = .text:0x8017E468; // type:function size:0x34 scope:global +_._8InfoStat = .text:0x8017E49C; // type:function size:0x34 scope:global +Draw__8InfoStat = .text:0x8017E4D0; // type:function size:0x40 scope:global +_._11GenericStat = .text:0x8017E510; // type:function size:0x34 scope:global +Draw__11GenericStat = .text:0x8017E544; // type:function size:0x9C scope:global +_._9TimerStat = .text:0x8017E5E0; // type:function size:0x34 scope:global +Draw__9TimerStat = .text:0x8017E614; // type:function size:0x5C scope:global +_._13GenericResult = .text:0x8017E670; // type:function size:0x34 scope:global +Draw__13GenericResult = .text:0x8017E6A4; // type:function size:0x13C scope:global +_._14RaceResultStat = .text:0x8017E7E0; // type:function size:0x34 scope:global +Draw__14RaceResultStat = .text:0x8017E814; // type:function size:0x120 scope:global +_._7LapStat = .text:0x8017E934; // type:function size:0x34 scope:global +Draw__7LapStat = .text:0x8017E968; // type:function size:0x138 scope:global +_._9StageStat = .text:0x8017EAA0; // type:function size:0x34 scope:global +Draw__9StageStat = .text:0x8017EAD4; // type:function size:0x108 scope:global +_._9SpeedStat = .text:0x8017EBDC; // type:function size:0x34 scope:global +Draw__9SpeedStat = .text:0x8017EC10; // type:function size:0xE0 scope:global +_._13TollboothStat = .text:0x8017ECF0; // type:function size:0x34 scope:global +Draw__13TollboothStat = .text:0x8017ED24; // type:function size:0x138 scope:global +_._10StatsPanel = .text:0x8017EE5C; // type:function size:0x8C scope:global +_._19PursuitResultsDatum = .text:0x8017EEE8; // type:function size:0x34 scope:global +_._23PursuitResultsArraySlot = .text:0x8017EF1C; // type:function size:0x34 scope:global +_._12PursuitBoard = .text:0x8017EF50; // type:function size:0x98 scope:global +_._13TimeExtension = .text:0x8017EFE8; // type:function size:0x98 scope:global +SetPlayerLapTime__13TimeExtensionf = .text:0x8017F080; // type:function size:0x8 scope:global +_._11BustedMeter = .text:0x8017F088; // type:function size:0x98 scope:global +SetInPursuit__11BustedMeterb = .text:0x8017F120; // type:function size:0x8 scope:global +SetIsHiding__11BustedMeterb = .text:0x8017F128; // type:function size:0x8 scope:global +SetTimeUntilBusted__11BustedMeterf = .text:0x8017F130; // type:function size:0x8 scope:global +SetIsBusted__11BustedMeterb = .text:0x8017F138; // type:function size:0x20 scope:global +_._10TurboMeter = .text:0x8017F158; // type:function size:0x98 scope:global +_._15MenuZoneTrigger = .text:0x8017F1F0; // type:function size:0x98 scope:global +RequestCingularLogo__15MenuZoneTrigger = .text:0x8017F288; // type:function size:0xC scope:global +_GetKind__15MEnterSafeHouse = .text:0x8017F294; // type:function size:0x64 scope:global +_._14DragTachometer = .text:0x8017F2F8; // type:function size:0xB8 scope:global +SetRpm__14DragTachometerf = .text:0x8017F3B0; // type:function size:0x8 scope:global +SetRevLimiter__14DragTachometerff = .text:0x8017F3B8; // type:function size:0xC scope:global +SetGear__14DragTachometer6GearID14ShiftPotentialb = .text:0x8017F3C4; // type:function size:0x14 scope:global +SetInPerfectLaunchRange__14DragTachometerb = .text:0x8017F3D8; // type:function size:0x8 scope:global +SetShifting__14DragTachometerb = .text:0x8017F3E0; // type:function size:0x8 scope:global +_._12ShiftUpdater = .text:0x8017F3E8; // type:function size:0x98 scope:global +SetGear__12ShiftUpdater6GearID11ShiftStatus14ShiftPotentialb = .text:0x8017F480; // type:function size:0x5C scope:global +SetEngineBlown__12ShiftUpdaterb = .text:0x8017F4DC; // type:function size:0x8 scope:global +SetEngineTemp__12ShiftUpdaterf = .text:0x8017F4E4; // type:function size:0x8 scope:global +_._11Infractions = .text:0x8017F4EC; // type:function size:0x98 scope:global +Create__28PostPursuitInfractionsScreenP21ScreenConstructorData = .text:0x8017F584; // type:function size:0x38 scope:global +TextureLoadedCallback__28PostPursuitInfractionsScreenUi = .text:0x8017F5BC; // type:function size:0x20 scope:global +NotificationMessage__19BustedOverlayScreenUlP8FEObjectUlUl = .text:0x8017F5DC; // type:function size:0x4 scope:global +_._6Chyron = .text:0x8017F5E0; // type:function size:0x34 scope:global +_._10FEKeyboard = .text:0x8017F614; // type:function size:0x30 scope:global +_._12SixDaysLater = .text:0x8017F644; // type:function size:0x30 scope:global +_GetKind__18MNotifyMessageDone = .text:0x8017F674; // type:function size:0x64 scope:global +_._14BootFlowScreen = .text:0x8017F6D8; // type:function size:0x34 scope:global +_._15BootFlowManager = .text:0x8017F70C; // type:function size:0x8C scope:global +NotifySoundMessage__12SplashScreenUl18eMenuSoundTriggers = .text:0x8017F798; // type:function size:0x18 scope:global +_._11MovieScreen = .text:0x8017F7B0; // type:function size:0x50 scope:global +NotificationMessage__13LoadingScreenUlP8FEObjectUlUl = .text:0x8017F800; // type:function size:0x4 scope:global +_._11Scrollerina = .text:0x8017F804; // type:function size:0xD8 scope:global +Setup__20LanguageSelectScreen = .text:0x8017F8DC; // type:function size:0x4 scope:global +_GetKind__23MAcceptEnterCareerEvent = .text:0x8017F8E0; // type:function size:0x64 scope:global +_GetKind__24MDeclineEnterCareerEvent = .text:0x8017F944; // type:function size:0x64 scope:global +_GetKind__20MNotifyMovieFinished = .text:0x8017F9A8; // type:function size:0x64 scope:global +_._3MD5 = .text:0x8017FA0C; // type:function size:0x34 scope:global +Reset__3MD5 = .text:0x8017FA40; // type:function size:0x40 scope:global +ClassKey__Q36Attrib3Gen10presetride = .text:0x8017FA80; // type:function size:0xC scope:global +ClassKey__Q36Attrib3Gen9fecooling = .text:0x8017FA8C; // type:function size:0xC scope:global +ClassKey__Q36Attrib3Gen11infractions = .text:0x8017FA98; // type:function size:0xC scope:global +_._Q313FEPlayerCarDB74GetNumInfraction__13FEPlayerCarDBQ218GInfractionManager14InfractionTypeb.0_13NumInfraction.35650 = .text:0x8017FAA4; // type:function size:0x34 scope:local +Callback__CQ313FEPlayerCarDB74GetNumInfraction__13FEPlayerCarDBQ218GInfractionManager14InfractionTypeb.0_13NumInfractionRC14FECareerRecord.35649 = .text:0x8017FAD8; // type:function size:0x30 scope:local +_._Q313FEPlayerCarDB42GetTotalNumInfractions__13FEPlayerCarDBb.0_19TotalNumInfractions.35670 = .text:0x8017FB08; // type:function size:0x34 scope:local +Callback__CQ313FEPlayerCarDB42GetTotalNumInfractions__13FEPlayerCarDBb.0_19TotalNumInfractionsRC14FECareerRecord.35669 = .text:0x8017FB3C; // type:function size:0x34 scope:local +_._Q313FEPlayerCarDB33GetTotalBounty__13FEPlayerCarDB.0_6Bounty.35689 = .text:0x8017FB70; // type:function size:0x34 scope:local +Callback__CQ313FEPlayerCarDB33GetTotalBounty__13FEPlayerCarDB.0_6BountyRC14FECareerRecord.35688 = .text:0x8017FBA4; // type:function size:0x8 scope:local +_._Q313FEPlayerCarDB41GetTotalEvadedPursuits__13FEPlayerCarDB.0_14EvadedPursuits.35706 = .text:0x8017FBAC; // type:function size:0x34 scope:local +Callback__CQ313FEPlayerCarDB41GetTotalEvadedPursuits__13FEPlayerCarDB.0_14EvadedPursuitsRC14FECareerRecord.35705 = .text:0x8017FBE0; // type:function size:0x8 scope:local +_._Q313FEPlayerCarDB41GetTotalBustedPursuits__13FEPlayerCarDB.0_14BustedPursuits.35723 = .text:0x8017FBE8; // type:function size:0x34 scope:local +Callback__CQ313FEPlayerCarDB41GetTotalBustedPursuits__13FEPlayerCarDB.0_14BustedPursuitsRC14FECareerRecord.35722 = .text:0x8017FC1C; // type:function size:0x8 scope:local +_._Q313FEPlayerCarDB38GetNumImpoundedCars__13FEPlayerCarDB.0_11IsImpounded.35740 = .text:0x8017FC24; // type:function size:0x34 scope:local +Callback__CQ313FEPlayerCarDB38GetNumImpoundedCars__13FEPlayerCarDB.0_11IsImpoundedRC14FECareerRecord.35739 = .text:0x8017FC58; // type:function size:0x18 scope:local +_._Q313FEPlayerCarDB33GetTotalFines__13FEPlayerCarDBb.0_5Fines.35758 = .text:0x8017FC70; // type:function size:0x34 scope:local +Callback__CQ313FEPlayerCarDB33GetTotalFines__13FEPlayerCarDBb.0_5FinesRC14FECareerRecord.35757 = .text:0x8017FCA4; // type:function size:0x34 scope:local +_._Q313FEPlayerCarDB46GetNumCareerCarsWithARecord__13FEPlayerCarDB.0_7NumCars.35774 = .text:0x8017FCD8; // type:function size:0x34 scope:local +Callback__CQ313FEPlayerCarDB46GetNumCareerCarsWithARecord__13FEPlayerCarDB.0_7NumCarsRC14FECareerRecord.35773 = .text:0x8017FD0C; // type:function size:0x8 scope:local +_._12TuningSlider = .text:0x8017FD14; // type:function size:0x44 scope:global +_._18CustomTuningScreen = .text:0x8017FD58; // type:function size:0xA8 scope:global +_GLOBAL_.I.__10HudElementPCcUx = .text:0x8017FE00; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x8017FE2C; // type:label scope:local +SetCount__11FEButtonMapUl = .text:0x8017FE2C; // type:function size:0x64 scope:global +GetButtonFrom__11FEButtonMapP8FEObjectlP15FEGameInterface16FEButtonWrapMode = .text:0x8017FE90; // type:function size:0x264 scope:global +ComputeButtonLocation__11FEButtonMapP8FEObjectP15FEGameInterfaceR9FEVector2 = .text:0x801800F4; // type:function size:0xC4 scope:global +__13FECodeListBox = .text:0x801801B8; // type:function size:0xD4 scope:global +__13FECodeListBoxRC13FECodeListBoxb = .text:0x8018028C; // type:function size:0xE8 scope:global +CopyProperties__13FECodeListBoxRC13FECodeListBox = .text:0x80180374; // type:function size:0x218 scope:global +_._13FECodeListBox = .text:0x8018058C; // type:function size:0x74 scope:global +Initialize__13FECodeListBoxUlUl = .text:0x80180600; // type:function size:0x224 scope:global +Clone__13FECodeListBoxb = .text:0x80180824; // type:function size:0x48 scope:global +FillAllCells__13FECodeListBox = .text:0x8018086C; // type:function size:0x248 scope:global +SetTotalNumColumns__13FECodeListBoxUl = .text:0x80180AB4; // type:function size:0x44 scope:global +SetTotalNumRows__13FECodeListBoxUl = .text:0x80180AF8; // type:function size:0x44 scope:global +AllocateStrings__13FECodeListBoxUlUl = .text:0x80180B3C; // type:function size:0x1D8 scope:global +ScrollSelection__13FECodeListBoxll = .text:0x80180D14; // type:function size:0x64 scope:global +Update__13FECodeListBoxf = .text:0x80180D78; // type:function size:0x88 scope:global +DefaultSelectCallback__13FECodeListBoxP13FECodeListBox = .text:0x80180E00; // type:function size:0x70 scope:global +AllocateString__13FECodeListBox = .text:0x80180E70; // type:function size:0x28 scope:global +DeallocateString__13FECodeListBoxPs = .text:0x80180E98; // type:function size:0x1C scope:global +GetRealColumn__C13FECodeListBoxl = .text:0x80180EB4; // type:function size:0x78 scope:global +GetRealRow__C13FECodeListBoxl = .text:0x80180F2C; // type:function size:0x78 scope:global +CheckMovement__13FECodeListBoxlllll = .text:0x80180FA4; // type:function size:0x11C scope:global +MakeMove__13FECodeListBoxlRUlT2UlUl = .text:0x801810C0; // type:function size:0x1B0 scope:global +ScrollSelection__13FECodeListBoxlRUlT2UlUlb = .text:0x80181270; // type:function size:0x984 scope:global +CalculateCurrentFromTarget__13FECodeListBoxUlUlUl = .text:0x80181BF4; // type:function size:0x70 scope:global +SetCellColor__13FECodeListBoxUlUlUlUlUl = .text:0x80181C64; // type:function size:0xA0 scope:global +SetCellScale__13FECodeListBoxUlUlRC7FEPointUlUl = .text:0x80181D04; // type:function size:0xB0 scope:global +SetCellJustification__13FECodeListBoxUlUlUlUlUl = .text:0x80181DB4; // type:function size:0xA4 scope:global +__as__11FEEventListR11FEEventList = .text:0x80181E58; // type:function size:0x48 scope:global +SetCount__11FEEventListl = .text:0x80181EA0; // type:function size:0xD4 scope:global +__7FEGroupRC7FEGroupbT2 = .text:0x80181F74; // type:function size:0xB4 scope:global +FindChildRecursive__C7FEGroupUl = .text:0x80182028; // type:function size:0x7C scope:global +__8FEJoyPad = .text:0x801820A4; // type:function size:0x30 scope:global +Reset__8FEJoyPad = .text:0x801820D4; // type:function size:0x30 scope:global +Update__8FEJoyPadUlUl = .text:0x80182104; // type:function size:0x60 scope:global +WasPressed__8FEJoyPadUl = .text:0x80182164; // type:function size:0x34 scope:global +WasHeld__8FEJoyPadUl = .text:0x80182198; // type:function size:0x30 scope:global +HeldFor__8FEJoyPadUl = .text:0x801821C8; // type:function size:0x44 scope:global +WasReleased__8FEJoyPadUl = .text:0x8018220C; // type:function size:0x30 scope:global +DecrementHold__8FEJoyPadUlUl = .text:0x8018223C; // type:function size:0x4C scope:global +FEKeyInterp__FP8FEScriptUclP8FEObject = .text:0x80182288; // type:function size:0x6C scope:global +FEKeyInterp__FP10FEKeyTracklPv = .text:0x801822F4; // type:function size:0x58 scope:global +FEKeyInterpFast__FP10FEKeyTracklPv = .text:0x8018234C; // type:function size:0x94 scope:global +FEInterpLinear__FP8FEScriptUclPv = .text:0x801823E0; // type:function size:0x40 scope:global +FEInterpLinear__FP10FEKeyTracklPv = .text:0x80182420; // type:function size:0x668 scope:global +FELerpInteger__FllfPlT3 = .text:0x80182A88; // type:function size:0x64 scope:global +FELerpFloat__FfffPfT3 = .text:0x80182AEC; // type:function size:0x18 scope:global +FELerpVector2__FR9FEVector2T0fP9FEVector2T3 = .text:0x80182B04; // type:function size:0x3C scope:global +FELerpVector3__FR9FEVector3T0fP9FEVector3T3 = .text:0x80182B40; // type:function size:0x58 scope:global +FELerpQuaternion__FR12FEQuaternionT0fP12FEQuaternionT3 = .text:0x80182B98; // type:function size:0x51C scope:global +FELerpColor__FR7FEColorT0fP7FEColorT3 = .text:0x801830B4; // type:function size:0x160 scope:global +FEInterpNone__FP8FEScriptUclPv = .text:0x80183214; // type:function size:0x40 scope:global +FEInterpNone__FP10FEKeyTracklPv = .text:0x80183254; // type:function size:0xC0 scope:global +__as__10FEKeyTrackR10FEKeyTrack = .text:0x80183314; // type:function size:0x154 scope:global +__nw__9FEKeyNodeUi = .text:0x80183468; // type:function size:0x12C scope:global +__dl__9FEKeyNodePv = .text:0x80183594; // type:function size:0xE4 scope:global +GetKeyAt__10FEKeyTrackl = .text:0x80183678; // type:function size:0x7C scope:global +GetDeltaKeyAt__10FEKeyTrackl = .text:0x801836F4; // type:function size:0x74 scope:global +FEUpperCase__Fc = .text:0x80183768; // type:function size:0x18 scope:global +FEStricmp__FPCcT0 = .text:0x80183780; // type:function size:0x64 scope:global +__6FENode = .text:0x801837E4; // type:function size:0x30 scope:global +_._6FENode = .text:0x80183814; // type:function size:0x64 scope:global +SetName__6FENodePCc = .text:0x80183878; // type:function size:0x8C scope:global +AddNode__9FEMinListP9FEMinNodeT1 = .text:0x80183904; // type:function size:0x6C scope:global +RemNode__9FEMinListP9FEMinNode = .text:0x80183970; // type:function size:0x7C scope:global +RemHead__9FEMinList = .text:0x801839EC; // type:function size:0x3C scope:global +FindNode__C9FEMinListUl = .text:0x80183A28; // type:function size:0x34 scope:global +FindNode__C6FEListPCcP6FENode = .text:0x80183A5C; // type:function size:0x9C scope:global +FindNode__C6FEListPCc = .text:0x80183AF8; // type:function size:0x24 scope:global +FEHash__FPCc = .text:0x80183B1C; // type:function size:0x38 scope:global +FEHashUpper__FPCc = .text:0x80183B54; // type:function size:0x64 scope:global +__9FEListBox = .text:0x80183BB8; // type:function size:0xB0 scope:global +_._9FEListBox = .text:0x80183C68; // type:function size:0x48 scope:global +Terminate__9FEListBox = .text:0x80183CB0; // type:function size:0x54 scope:global +SetNumColumns__9FEListBoxUl = .text:0x80183D04; // type:function size:0x1B8 scope:global +SetNumRows__9FEListBoxUl = .text:0x80183EBC; // type:function size:0x17C scope:global +SetCellType__9FEListBoxUl = .text:0x80184038; // type:function size:0x78 scope:global +SetCellString__9FEListBoxPCs = .text:0x801840B0; // type:function size:0x98 scope:global +IncrementCellByColumn__9FEListBox = .text:0x80184148; // type:function size:0x40 scope:global +ScrollSelection__9FEListBoxll = .text:0x80184188; // type:function size:0x450 scope:global +Update__9FEListBoxf = .text:0x801845D8; // type:function size:0x140 scope:global +SetAutoWrap__9FEListBoxb = .text:0x80184718; // type:function size:0x28 scope:global +InitializeListEntry__9FEListBoxP15FEListEntryDataUl = .text:0x80184740; // type:function size:0x28 scope:global +InitializeCell__9FEListBoxP13FEListBoxCellUl = .text:0x80184768; // type:function size:0x84 scope:global +CleanupColumns__9FEListBox = .text:0x801847EC; // type:function size:0x50 scope:global +CleanupRows__9FEListBox = .text:0x8018483C; // type:function size:0x50 scope:global +CleanupCells__9FEListBox = .text:0x8018488C; // type:function size:0xA0 scope:global +RecalculateCummulative__9FEListBox = .text:0x8018492C; // type:function size:0x7C scope:global +CompleteScroll__9FEListBox = .text:0x801849A8; // type:function size:0x68 scope:global +GetMatrix__12FEQuaternionP9FEMatrix4 = .text:0x80184A10; // type:function size:0xC4 scope:global +Identify__9FEMatrix4 = .text:0x80184AD4; // type:function size:0x54 scope:global +FEMultMatrix__FP9FEMatrix4PC9FEMatrix4T1 = .text:0x80184B28; // type:function size:0x280 scope:global +FEMultMatrix__FP9FEVector3PC9FEMatrix4PC9FEVector3 = .text:0x80184DA8; // type:function size:0x7C scope:global +_._10FEResponse = .text:0x80184E24; // type:function size:0x40 scope:global +__as__10FEResponseR10FEResponse = .text:0x80184E64; // type:function size:0x80 scope:global +SetParam__10FEResponsePCc = .text:0x80184EE4; // type:function size:0x60 scope:global +ReleaseParam__10FEResponse = .text:0x80184F44; // type:function size:0x68 scope:global +_._17FEMessageResponse = .text:0x80184FAC; // type:function size:0x58 scope:global +__nw__17FEMessageResponseUi = .text:0x80185004; // type:function size:0x150 scope:global +__dl__17FEMessageResponsePv = .text:0x80185154; // type:function size:0xE4 scope:global +PurgeResponses__17FEMessageResponse = .text:0x80185238; // type:function size:0x7C scope:global +SetCount__17FEMessageResponseUl = .text:0x801852B4; // type:function size:0x120 scope:global +FindResponse__C17FEMessageResponseUl = .text:0x801853D4; // type:function size:0x40 scope:global +FindConditionBranchTarget__C17FEMessageResponseUl = .text:0x80185414; // type:function size:0x90 scope:global +__7FEMouse = .text:0x801854A4; // type:function size:0x30 scope:global +Reset__7FEMouse = .text:0x801854D4; // type:function size:0x30 scope:global +Update__7FEMouseR11FEMouseInfoUl = .text:0x80185504; // type:function size:0xAC scope:global +IsDown__7FEMouseUs = .text:0x801855B0; // type:function size:0x18 scope:global +Allocate__15FEMsgTargetListUl = .text:0x801855C8; // type:function size:0xB8 scope:global +AppendTarget__15FEMsgTargetListP8FEObject = .text:0x80185680; // type:function size:0x5C scope:global +GetMessageTargets__9FEPackageUl = .text:0x801856DC; // type:function size:0x40 scope:global +__7FEngine = .text:0x8018571C; // type:function size:0x128 scope:global +SetNumJoyPads__7FEngineUc = .text:0x80185844; // type:function size:0xA0 scope:global +SetExecution__7FEngineb = .text:0x801858E4; // type:function size:0x28 scope:global +SetProcessInput__7FEngineP9FEPackageb = .text:0x8018590C; // type:function size:0x10 scope:global +SetInitialState__7FEngine = .text:0x8018591C; // type:function size:0x90 scope:global +LoadPackage__7FEnginePCvb = .text:0x801859AC; // type:function size:0x84 scope:global +UnloadPackage__7FEngineP9FEPackage = .text:0x80185A30; // type:function size:0x194 scope:global +UnloadLibraryPackage__7FEngineP9FEPackage = .text:0x80185BC4; // type:function size:0xC8 scope:global +PushPackage__7FEnginePCcUcUl = .text:0x80185C8C; // type:function size:0x1A4 scope:global +AddToIdleList__7FEngineP9FEPackage = .text:0x80185E30; // type:function size:0x2C scope:global +FindIdlePackage__C7FEnginePCc = .text:0x80185E5C; // type:function size:0x24 scope:global +GetFirstLibrary__C7FEngine = .text:0x80185E80; // type:function size:0x8 scope:global +AddToLibraryList__7FEngineP9FEPackage = .text:0x80185E88; // type:function size:0x2C scope:global +RemoveFromLibraryList__7FEngineP9FEPackage = .text:0x80185EB4; // type:function size:0x24 scope:global +FindLibraryPackage__C7FEngineUl = .text:0x80185ED8; // type:function size:0x60 scope:global +Update__7FEnginelUi = .text:0x80185F38; // type:function size:0x308 scope:global +ProcessPadsForPackage__7FEngineP9FEPackage = .text:0x80186240; // type:function size:0xC08 scope:global +UpdateMouseState__7FEngineP9FEPackageP18FEObjectMouseStateff = .text:0x80186E48; // type:function size:0x2D8 scope:global +ProcessMouseForPackage__7FEngineP9FEPackage = .text:0x80187120; // type:function size:0xE4 scope:global +Render__7FEngine = .text:0x80187204; // type:function size:0x1D0 scope:global +RenderGroup__7FEngineP7FEGroupR9FEMatrix4T2Us = .text:0x801873D4; // type:function size:0x1CC scope:global +RenderObject__7FEngineP8FEObjectR9FEMatrix4Us = .text:0x801875A0; // type:function size:0xF8 scope:global +ForAllObjects__7FEngineR16FEObjectCallback = .text:0x80187698; // type:function size:0x60 scope:global +QueueMessage__7FEngineUlP8FEObjectP9FEPackageT2Ul = .text:0x801876F8; // type:function size:0xCC scope:global +SendMessageToGame__7FEngineUlP8FEObjectP9FEPackageUl = .text:0x801877C4; // type:function size:0x44 scope:global +QueuePackageSwitch__7FEnginePCcUl = .text:0x80187808; // type:function size:0x28 scope:global +QueuePackagePush__7FEnginePCcUl = .text:0x80187830; // type:function size:0x28 scope:global +QueuePackagePop__7FEngine = .text:0x80187858; // type:function size:0x2C scope:global +QueuePackageCommand__7FEnginelUlPCc = .text:0x80187884; // type:function size:0x100 scope:global +QueuePackageUserTransfer__7FEngineP9FEPackagebUl = .text:0x80187984; // type:function size:0xA8 scope:global +ProcessMessageQueue__7FEngine = .text:0x80187A2C; // type:function size:0x368 scope:global +ProcessListBoxResponses__7FEngineP8FEObjectP9FEPackageUl = .text:0x80187D94; // type:function size:0xAC scope:global +ProcessCodeListBoxResponses__7FEngineP8FEObjectP9FEPackageUl = .text:0x80187E40; // type:function size:0xAC scope:global +ProcessObjectMessage__7FEngineP8FEObjectP9FEPackageUlUl = .text:0x80187EEC; // type:function size:0xA0 scope:global +ProcessGlobalMessage__7FEngineP9FEPackageUlUl = .text:0x80187F8C; // type:function size:0x58 scope:global +ProcessResponses__7FEngineP17FEMessageResponseP8FEObjectP9FEPackageUl = .text:0x80187FE4; // type:function size:0x494 scope:global +FindPackageWithControl__7FEngine = .text:0x80188478; // type:function size:0x2C scope:global +FindQueuedNodeWithControl__7FEngine = .text:0x801884A4; // type:function size:0x2C scope:global +ProcessPackageCommands__7FEngine = .text:0x801884D0; // type:function size:0x254 scope:global +GetNumPackagesBelowPriority__7FEngineUc = .text:0x80188724; // type:function size:0x84 scope:global +RecordLastPackageButton__7FEngineUlUl = .text:0x801887A8; // type:function size:0x74 scope:global +RecallLastPackageButton__7FEngineUl = .text:0x8018881C; // type:function size:0x38 scope:global +RecordPackageMarker__7FEnginePCc = .text:0x80188854; // type:function size:0x50 scope:global +RecallPackageMarker__7FEngine = .text:0x801888A4; // type:function size:0x30 scope:global +ClearPackageMarkers__7FEngine = .text:0x801888D4; // type:function size:0x2C scope:global +InitFEngMemoryPool__Fv = .text:0x80188900; // type:function size:0x9C scope:global +FEngMalloc__FUiPCci = .text:0x8018899C; // type:function size:0x60 scope:global +FEngMemCpy__FPvPCvi = .text:0x801889FC; // type:function size:0x20 scope:global +FEngMemSet__FPvii = .text:0x80188A1C; // type:function size:0x20 scope:global +FEngStrCpy__FPcPCc = .text:0x80188A3C; // type:function size:0x20 scope:global +FEngStrLen__FPCc = .text:0x80188A5C; // type:function size:0x20 scope:global +FEngStrICmp__FPCcT0 = .text:0x80188A7C; // type:function size:0x20 scope:global +FEngAbs__Ff = .text:0x80188A9C; // type:function size:0x8 scope:global +FEngSqrt__Ff = .text:0x80188AA4; // type:function size:0x60 scope:global +FEngSin__Ff = .text:0x80188B04; // type:function size:0x20 scope:global +FEngACos__Ff = .text:0x80188B24; // type:function size:0x54 scope:global +Close__Ffff = .text:0x80188B78; // type:function size:0x28 scope:local +Close__Flll = .text:0x80188BA0; // type:function size:0x2C scope:local +__8FEObject = .text:0x80188BCC; // type:function size:0x8C scope:global +__8FEObjectRC8FEObjectb = .text:0x80188C58; // type:function size:0x238 scope:global +_._8FEObject = .text:0x80188E90; // type:function size:0xC0 scope:global +SetDataSize__8FEObjectUl = .text:0x80188F50; // type:function size:0x5C scope:global +SetName__8FEObjectPCc = .text:0x80188FAC; // type:function size:0x88 scope:global +FindScript__C8FEObjectUl = .text:0x80189034; // type:function size:0x34 scope:global +SetupMoveToTracks__8FEObject = .text:0x80189068; // type:function size:0x330 scope:global +SetCurrentScript__8FEObjectP8FEScript = .text:0x80189398; // type:function size:0x2C scope:global +FindResponse__C8FEObjectUl = .text:0x801893C4; // type:function size:0x28 scope:global +SetTrackValue__8FEObject18FEKeyTrack_IndicesRC9FEVector3b = .text:0x801893EC; // type:function size:0x14C scope:global +SetTrackValue__8FEObject18FEKeyTrack_IndicesRC9FEVector2b = .text:0x80189538; // type:function size:0x138 scope:global +SetTrackValue__8FEObject18FEKeyTrack_IndicesRC7FEColorb = .text:0x80189670; // type:function size:0xE4 scope:global +SetPosition__8FEObjectRC9FEVector3b = .text:0x80189754; // type:function size:0x12C scope:global +SetRotation__8FEObjectRC12FEQuaternionb = .text:0x80189880; // type:function size:0x144 scope:global +SetColor__8FEObjectRC7FEColorb = .text:0x801899C4; // type:function size:0x154 scope:global +SetScript__8FEObjectUlb = .text:0x80189B18; // type:function size:0x40 scope:global +SetScript__8FEObjectP8FEScriptb = .text:0x80189B58; // type:function size:0x50 scope:global +GetDataOffset__8FEObject18FEKeyTrack_Indices = .text:0x80189BA8; // type:function size:0xD4 scope:global +Clone__8FEObjectb = .text:0x80189C7C; // type:function size:0x48 scope:global +Callback__18PackageInitStateCBP8FEObject = .text:0x80189CC4; // type:function size:0x60 scope:global +__9FEPackage = .text:0x80189D24; // type:function size:0xF4 scope:global +_._9FEPackage = .text:0x80189E18; // type:function size:0x1BC scope:global +SetFilename__9FEPackagePCc = .text:0x80189FD4; // type:function size:0x70 scope:global +Startup__9FEPackageP15FEGameInterface = .text:0x8018A044; // type:function size:0x74 scope:global +Shutdown__9FEPackageP15FEGameInterface = .text:0x8018A0B8; // type:function size:0x48 scope:global +InitializePackage__9FEPackage = .text:0x8018A100; // type:function size:0x44 scope:global +FindResponse__9FEPackageUl = .text:0x8018A144; // type:function size:0x28 scope:global +ForAllChildren__9FEPackageP7FEGroupR16FEObjectCallback = .text:0x8018A16C; // type:function size:0x98 scope:global +ForAllObjects__9FEPackageR16FEObjectCallback = .text:0x8018A204; // type:function size:0x98 scope:global +FindObjectByHash__9FEPackageUl = .text:0x8018A29C; // type:function size:0x54 scope:global +FindObjectByGUID__9FEPackageUl = .text:0x8018A2F0; // type:function size:0x54 scope:global +IssueScriptMessages__9FEPackageP7FEngineP8FEObjectP8FEScriptll = .text:0x8018A344; // type:function size:0x21C scope:global +UpdateGroup__9FEPackageP7FEGroupl = .text:0x8018A560; // type:function size:0x6C scope:global +UpdateObject__9FEPackageP8FEObjectl = .text:0x8018A5CC; // type:function size:0x4B4 scope:global +UpdateObjectTracks__9FEPackageP8FEObjectP8FEScript = .text:0x8018AA80; // type:function size:0x1DC scope:global +Update__9FEPackageP7FEnginel = .text:0x8018AC5C; // type:function size:0x98 scope:global +SetCurrentButton__9FEPackageP8FEObjectb = .text:0x8018ACF4; // type:function size:0xC8 scope:global +Callback__17ResourceConnectorP8FEObject = .text:0x8018ADBC; // type:function size:0x84 scope:global +ConnectListBoxResources__17ResourceConnectorP9FEListBox = .text:0x8018AE40; // type:function size:0x13C scope:global +ConnectObjectResources__9FEPackage = .text:0x8018AF7C; // type:function size:0x54 scope:global +__18FEObjectMouseState = .text:0x8018AFD0; // type:function size:0x24 scope:global +_._18FEObjectMouseState = .text:0x8018AFF4; // type:function size:0x28 scope:global +BuildMouseObjectStateList__9FEPackage = .text:0x8018B01C; // type:function size:0x130 scope:global +OffsetCalculatron__FUlP8FEObjectR7FEPoint = .text:0x8018B14C; // type:function size:0xE0 scope:global +AddMouseObjectState__9FEPackageP8FEObject = .text:0x8018B22C; // type:function size:0x12C scope:global +UpdateMouseObjectOffsets__9FEPackageP8FEObject = .text:0x8018B358; // type:function size:0x11C scope:global +SetNumLibraryRefs__9FEPackageUl = .text:0x8018B474; // type:function size:0xD4 scope:global +FindLibraryReference__C9FEPackageUl = .text:0x8018B548; // type:function size:0x40 scope:global +AddPackage__13FEPackageListP9FEPackage = .text:0x8018B588; // type:function size:0x48 scope:global +RemovePackage__13FEPackageListP9FEPackage = .text:0x8018B5D0; // type:function size:0x50 scope:global +ReplaceParentLinks__13FEPackageListPC9FEPackageT1 = .text:0x8018B620; // type:function size:0x2C scope:global +__15FEPackageReader = .text:0x8018B64C; // type:function size:0x30 scope:global +_._15FEPackageReader = .text:0x8018B67C; // type:function size:0x28 scope:global +Reset__15FEPackageReader = .text:0x8018B6A4; // type:function size:0x34 scope:global +Load__15FEPackageReaderPCvP15FEGameInterfaceP7FEnginebN24 = .text:0x8018B6D8; // type:function size:0x140 scope:global +FindChild__15FEPackageReaderP7FEChunkUl = .text:0x8018B818; // type:function size:0xB8 scope:global +GetTypeSize__15FEPackageReaderUl = .text:0x8018B8D0; // type:function size:0x80 scope:global +ReadTypeSizes__15FEPackageReader = .text:0x8018B950; // type:function size:0x7C scope:global +ReadHeaderChunk__15FEPackageReader = .text:0x8018B9CC; // type:function size:0x17C scope:global +ReadReferencedPackagesChunk__15FEPackageReader = .text:0x8018BB48; // type:function size:0x1B8 scope:global +ReadLibraryRefsChunk__15FEPackageReader = .text:0x8018BD00; // type:function size:0x140 scope:global +ReadResourceChunk__15FEPackageReader = .text:0x8018BE40; // type:function size:0x2FC scope:global +ReadPackageResponseChunk__15FEPackageReader = .text:0x8018C13C; // type:function size:0x74 scope:global +ReadObjectChunk__15FEPackageReader = .text:0x8018C1B0; // type:function size:0x3C4 scope:global +CreateObject__15FEPackageReaderUl = .text:0x8018C574; // type:function size:0x318 scope:global +ReadObjectTags__15FEPackageReaderP5FETagUl = .text:0x8018C88C; // type:function size:0x514 scope:global +ProcessStringTag__15FEPackageReaderP5FETag = .text:0x8018CDA0; // type:function size:0x1E8 scope:global +ProcessImageTag__15FEPackageReaderP5FETag = .text:0x8018CF88; // type:function size:0x44 scope:global +ProcessMultiImageTag__15FEPackageReaderP5FETag = .text:0x8018CFCC; // type:function size:0x148 scope:global +ProcessListBoxTag__15FEPackageReaderP5FETag = .text:0x8018D114; // type:function size:0x560 scope:global +ProcessCodeListBoxTag__15FEPackageReaderP5FETag = .text:0x8018D674; // type:function size:0x2A0 scope:global +ReadScriptTags__15FEPackageReaderP5FETagUl = .text:0x8018D914; // type:function size:0x8B0 scope:global +ReadMessageResponseTags__15FEPackageReaderP5FETagUlb = .text:0x8018E1C4; // type:function size:0x260 scope:global +ReadMessageTargetListChunk__15FEPackageReader = .text:0x8018E424; // type:function size:0x208 scope:global +FindReferencedObject__15FEPackageReaderUlPP8FEObjectPP9FEPackage = .text:0x8018E62C; // type:function size:0x90 scope:global +ReferenceList__9FERefListP9FERefList = .text:0x8018E6BC; // type:function size:0x88 scope:global +AddNode__9FERefListP9FEMinNodeT1 = .text:0x8018E744; // type:function size:0x60 scope:global +RemNode__9FERefListP9FEMinNode = .text:0x8018E7A4; // type:function size:0x70 scope:global +RemHead__9FERefList = .text:0x8018E814; // type:function size:0x3C scope:global +GetNumElements__9FERefList = .text:0x8018E850; // type:function size:0x5C scope:global +Init__8FEScript = .text:0x8018E8AC; // type:function size:0x24 scope:global +_._8FEScript = .text:0x8018E8D0; // type:function size:0xEC scope:global +__8FEScriptR8FEScriptb = .text:0x8018E9BC; // type:function size:0x220 scope:global +__nw__8FEScriptUi = .text:0x8018EBDC; // type:function size:0x14C scope:global +__dl__8FEScriptPv = .text:0x8018ED28; // type:function size:0xE4 scope:global +SetName__8FEScriptPCc = .text:0x8018EE0C; // type:function size:0x88 scope:global +SetTrackCount__8FEScriptl = .text:0x8018EE94; // type:function size:0x158 scope:global +FindTrack__C8FEScript18FEKeyTrack_Indices = .text:0x8018EFEC; // type:function size:0x54 scope:global +AllocBlock__10FESlotNode = .text:0x8018F040; // type:function size:0xAC scope:global +FreeBlock__10FESlotNodePUc = .text:0x8018F0EC; // type:function size:0x40 scope:global +Alloc__10FESlotPool = .text:0x8018F12C; // type:function size:0xD8 scope:global +Free__10FESlotPoolPUc = .text:0x8018F204; // type:function size:0xB4 scope:global +Alloc__11FEMultiPoolUl = .text:0x8018F2B8; // type:function size:0xCC scope:global +Free__11FEMultiPoolPUc = .text:0x8018F384; // type:function size:0xA0 scope:global +__8FEStringRC8FEStringb = .text:0x8018F424; // type:function size:0x88 scope:global +SetLabel__8FEStringPCc = .text:0x8018F4AC; // type:function size:0xB8 scope:global +CreateBaseObjectType__9FETypeLibPCc = .text:0x8018F564; // type:function size:0x1BC scope:global +CreateImageObjectType__9FETypeLibPCc = .text:0x8018F720; // type:function size:0xC8 scope:global +CreateMultiImageObjectType__9FETypeLibPCc = .text:0x8018F7E8; // type:function size:0x138 scope:global +Startup__9FETypeLib = .text:0x8018F920; // type:function size:0x31C scope:global +FindType__9FETypeLibUl = .text:0x8018FC3C; // type:function size:0x20 scope:global +SetDefault__11FEFieldNodePv = .text:0x8018FC5C; // type:function size:0x70 scope:global +AddField__10FETypeNodePCcl = .text:0x8018FCCC; // type:function size:0xA0 scope:global +UpdateOffsets__10FETypeNode = .text:0x8018FD6C; // type:function size:0x2C scope:global +GetField__10FETypeNodePCc = .text:0x8018FD98; // type:function size:0x58 scope:global +__7FEColorUl = .text:0x8018FDF0; // type:function size:0x28 scope:global +__opUl__C7FEColor = .text:0x8018FE18; // type:function size:0xB0 scope:global +__as__7FEColorRC7FEColor = .text:0x8018FEC8; // type:function size:0x28 scope:global +__apl__7FEColorRC7FEColor = .text:0x8018FEF0; // type:function size:0x48 scope:global +__mi__C7FEColorRC7FEColor = .text:0x8018FF38; // type:function size:0x78 scope:global +GetStringLength__FPCs = .text:0x8018FFB0; // type:function size:0x38 scope:global +__12FEWideString = .text:0x8018FFE8; // type:function size:0x40 scope:global +__12FEWideStringRC12FEWideString = .text:0x80190028; // type:function size:0x48 scope:global +_._12FEWideString = .text:0x80190070; // type:function size:0x4C scope:global +__as__12FEWideStringRC12FEWideString = .text:0x801900BC; // type:function size:0x58 scope:global +__as__12FEWideStringPCs = .text:0x80190114; // type:function size:0x58 scope:global +Length__C12FEWideString = .text:0x8019016C; // type:function size:0x24 scope:global +SetLength__12FEWideStringUl = .text:0x80190190; // type:function size:0x70 scope:global +AllocateString__12FEWideStringUl = .text:0x80190200; // type:function size:0x3C scope:global +GetTexture__12FEMultiImageUl = .text:0x8019023C; // type:function size:0x20 scope:global +SetUVs__12FEMultiImageUlG9FEVector2T2 = .text:0x8019025C; // type:function size:0x50 scope:global +GetUVs__12FEMultiImageUlR9FEVector2T2 = .text:0x801902AC; // type:function size:0x50 scope:global +CopyString__H1Zs_PsPCX01_v = .text:0x801902FC; // type:function size:0x3C scope:global +CopyString__H1Zs_PsPCX01Ul_v = .text:0x80190338; // type:function size:0x64 scope:global +SortObjects__t14FEObjectSorter1i1024 = .text:0x8019039C; // type:function size:0x13C scope:global +__11FEImageData = .text:0x801904D8; // type:function size:0x5C scope:global +__static_initialization_and_destruction_0 = .text:0x80190534; // type:function size:0x1BC scope:local +__ml__12FEQuaternionRC12FEQuaternion = .text:0x801906F0; // type:function size:0xD4 scope:global +_._9FEMinNode = .text:0x801907C4; // type:function size:0x34 scope:global +_._9FEMinList = .text:0x801907F8; // type:function size:0x4C scope:global +Purge__9FEMinList = .text:0x80190844; // type:function size:0x58 scope:global +_._6FEList = .text:0x8019089C; // type:function size:0x4C scope:global +_._9FERefList = .text:0x801908E8; // type:function size:0x58 scope:global +GetHead__C9FERefList = .text:0x80190940; // type:function size:0x38 scope:global +Purge__9FERefList = .text:0x80190978; // type:function size:0x58 scope:global +_._9FEKeyNode = .text:0x801909D0; // type:function size:0x34 scope:global +_._18PackageInitStateCB = .text:0x80190A04; // type:function size:0x34 scope:global +GetPCellData__9FEListBoxUlUl = .text:0x80190A38; // type:function size:0x1C scope:global +_._8FEString = .text:0x80190A54; // type:function size:0x60 scope:global +Clone__8FEStringb = .text:0x80190AB4; // type:function size:0x48 scope:global +_._7FEGroup = .text:0x80190AFC; // type:function size:0x4C scope:global +Clone__7FEGroupb = .text:0x80190B48; // type:function size:0x4C scope:global +_._t10FEPoolNode2Z9FEKeyNodei256 = .text:0x80190B94; // type:function size:0xC0 scope:global +_._t10FEPoolNode2Z17FEMessageResponsei64 = .text:0x80190C54; // type:function size:0xC0 scope:global +_._11FEFieldNode = .text:0x80190D14; // type:function size:0x54 scope:global +_._10FETypeNode = .text:0x80190D68; // type:function size:0x4C scope:global +_._16FEPackageCommand = .text:0x80190DB4; // type:function size:0x20 scope:global +_._13FEMessageNode = .text:0x80190DD4; // type:function size:0x34 scope:global +_._7FEImage = .text:0x80190E08; // type:function size:0x30 scope:global +Clone__7FEImageb = .text:0x80190E38; // type:function size:0x64 scope:global +_._12FEMultiImage = .text:0x80190E9C; // type:function size:0x30 scope:global +Clone__12FEMultiImageb = .text:0x80190ECC; // type:function size:0x70 scope:global +_._10FESlotNode = .text:0x80190F3C; // type:function size:0x64 scope:global +_._10FESlotPool = .text:0x80190FA0; // type:function size:0x5C scope:global +_._14FEColoredImage = .text:0x80190FFC; // type:function size:0x30 scope:global +Clone__14FEColoredImageb = .text:0x8019102C; // type:function size:0x70 scope:global +_._7FEMovie = .text:0x8019109C; // type:function size:0x30 scope:global +Clone__7FEMovieb = .text:0x801910CC; // type:function size:0x64 scope:global +_._12FEFindByHash = .text:0x80191130; // type:function size:0x34 scope:global +Callback__12FEFindByHashP8FEObject = .text:0x80191164; // type:function size:0x24 scope:global +_._12FEFindByGUID = .text:0x80191188; // type:function size:0x34 scope:global +Callback__12FEFindByGUIDP8FEObject = .text:0x801911BC; // type:function size:0x24 scope:global +_._28MouseStateArrayOffsetUpdater = .text:0x801911E0; // type:function size:0x34 scope:global +Callback__28MouseStateArrayOffsetUpdaterP8FEObject = .text:0x80191214; // type:function size:0x34 scope:global +_._17ResourceConnector = .text:0x80191248; // type:function size:0x34 scope:global +_._23MouseStateObjectCounter = .text:0x8019127C; // type:function size:0x34 scope:global +Callback__23MouseStateObjectCounterP8FEObject = .text:0x801912B0; // type:function size:0x20 scope:global +_._22MouseStateArrayBuilder = .text:0x801912D0; // type:function size:0x34 scope:global +Callback__22MouseStateArrayBuilderP8FEObject = .text:0x80191304; // type:function size:0x34 scope:global +_._11FEAnimImage = .text:0x80191338; // type:function size:0x30 scope:global +Clone__11FEAnimImageb = .text:0x80191368; // type:function size:0x70 scope:global +_._13FESimpleImage = .text:0x801913D8; // type:function size:0x30 scope:global +Clone__13FESimpleImageb = .text:0x80191408; // type:function size:0x5C scope:global +_._t10FEPoolNode2Z8FEScripti32 = .text:0x80191464; // type:function size:0xC0 scope:global +_GLOBAL_.I.FEDirection_Message = .text:0x80191524; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x80191550; // type:label scope:local +Evaluate__11UBezierLiteRCQ25UMath7Matrix4fRQ25UMath7Vector4 = .text:0x80191550; // type:function size:0x160 scope:global +rasin = .text:0x801916B0; // type:function size:0x2C scope:global +rsqrt = .text:0x801916DC; // type:function size:0x60 scope:global +v3length = .text:0x8019173C; // type:function size:0x38 scope:global +rsincos = .text:0x80191774; // type:function size:0x5C scope:global +v3crossprod = .text:0x801917D0; // type:function size:0x40 scope:global +v3unit = .text:0x80191810; // type:function size:0x90 scope:global +v3sub = .text:0x801918A0; // type:function size:0x4C scope:global +v3add = .text:0x801918EC; // type:function size:0x4C scope:global +MATRIX4_multxrot = .text:0x80191938; // type:function size:0x118 scope:global +MATRIX4_multyrot = .text:0x80191A50; // type:function size:0x118 scope:global +MATRIX4_multzrot = .text:0x80191B68; // type:function size:0x118 scope:global +UDataGroupEncodeTag__FUibPc = .text:0x80191C80; // type:function size:0xB4 scope:global +SearchTagArray__FRPC9TagStructUiUi = .text:0x80191D34; // type:function size:0xE8 scope:local +SearchTagArray__FRPC5UDataUiUi = .text:0x80191E1C; // type:function size:0x20 scope:local +SearchTagArray__FRPC6UGroupUiUi = .text:0x80191E3C; // type:function size:0x20 scope:local +ResolveOffsets__C5UDataRC18UGroupResolverData = .text:0x80191E5C; // type:function size:0xA4 scope:global +Deserialize__6UGroupPCvbUi = .text:0x80191F00; // type:function size:0x44 scope:global +Deserialize__6UGroupUiPCUiPPCvUi = .text:0x80191F44; // type:function size:0x4C scope:global +GroupCountType__C6UGroupUi = .text:0x80191F90; // type:function size:0x8C scope:global +GroupLocateFirst__C6UGroupUiUiUi = .text:0x8019201C; // type:function size:0xBC scope:global +GroupLocateTag__C6UGroupUi = .text:0x801920D8; // type:function size:0xB8 scope:global +DataCountType__C6UGroupUi = .text:0x80192190; // type:function size:0xA0 scope:global +DataLocateFirst__C6UGroupUiUiUi = .text:0x80192230; // type:function size:0xCC scope:global +DataLocateTag__C6UGroupUi = .text:0x801922FC; // type:function size:0xD8 scope:global +ProcessBreadthFirst__C6UGroupRQ26UGroup9Processor = .text:0x801923D4; // type:function size:0x120 scope:global +ResolveOffsets__C6UGroupRC18UGroupResolverData = .text:0x801924F4; // type:function size:0x160 scope:global +GetArray__C6UGroup = .text:0x80192654; // type:function size:0x24 scope:global +Ceil__5UMathf = .text:0x80192678; // type:function size:0x60 scope:global +Mod__5UMathff = .text:0x801926D8; // type:function size:0x20 scope:global +IsNaN__5UMathf = .text:0x801926F8; // type:function size:0x30 scope:global +BuildRotate__FRQ25UMath7Matrix4ffff = .text:0x80192728; // type:function size:0x194 scope:global +OrthoInverse__FRQ25UMath7Matrix4 = .text:0x801928BC; // type:function size:0x94 scope:global +__7FastMem = .text:0x80192950; // type:function size:0x4 scope:global +Init__7FastMem = .text:0x80192954; // type:function size:0xB8 scope:global +Alloc__7FastMemUiPCc = .text:0x80192A0C; // type:function size:0xC0 scope:global +Free__7FastMemPvUiPCc = .text:0x80192ACC; // type:function size:0x40 scope:global +CoreAlloc__7FastMemUiPCc = .text:0x80192B0C; // type:function size:0x28 scope:global +CoreFree__7FastMemPv = .text:0x80192B34; // type:function size:0x24 scope:global +SplitOrExpand__7FastMemUi = .text:0x80192B58; // type:function size:0x84 scope:global +AssignToFree__7FastMemUi = .text:0x80192BDC; // type:function size:0xC4 scope:global +CreateBlock__7FastMemUi = .text:0x80192CA0; // type:function size:0x10C scope:global +DumpRecord__7FastMem = .text:0x80192DAC; // type:function size:0x4 scope:global +compare_entry_string__FPCvT0 = .text:0x80192DB0; // type:function size:0x28 scope:local +compare_entry_number__FPCvT0 = .text:0x80192DD8; // type:function size:0x10 scope:local +__14StringToNumberP19StringToNumberEntry = .text:0x80192DE8; // type:function size:0x128 scope:global +ConvertNumberToString__14StringToNumberi = .text:0x80192F10; // type:function size:0x98 scope:global +BinarySearch__14StringToNumberi = .text:0x80192FA8; // type:function size:0x68 scope:global +VU0_v3crossprod__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 = .text:0x80193010; // type:function size:0x3C scope:global +VU0_v4crossprodxyz__FRCQ25UMath7Vector4T0RQ25UMath7Vector4 = .text:0x8019304C; // type:function size:0x3C scope:global +VU0_v3dotprod__FRCQ25UMath7Vector3T0 = .text:0x80193088; // type:function size:0x20 scope:global +VU0_v4dotprod__FRCQ25UMath7Vector4T0 = .text:0x801930A8; // type:function size:0x20 scope:global +VU0_v4dotprodxyz__FRCQ25UMath7Vector4T0 = .text:0x801930C8; // type:function size:0x20 scope:global +VU0_v3add__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 = .text:0x801930E8; // type:function size:0x24 scope:global +VU0_v4add__FRCQ25UMath7Vector4T0RQ25UMath7Vector4 = .text:0x8019310C; // type:function size:0x24 scope:global +VU0_v4addxyz__FRCQ25UMath7Vector4T0RQ25UMath7Vector4 = .text:0x80193130; // type:function size:0x24 scope:global +VU0_v3sub__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 = .text:0x80193154; // type:function size:0x24 scope:global +VU0_v4sub__FRCQ25UMath7Vector4T0RQ25UMath7Vector4 = .text:0x80193178; // type:function size:0x24 scope:global +VU0_v4subxyz__FRCQ25UMath7Vector4T0RQ25UMath7Vector4 = .text:0x8019319C; // type:function size:0x24 scope:global +VU0_v3scale__FRCQ25UMath7Vector3fRQ25UMath7Vector3 = .text:0x801931C0; // type:function size:0x1C scope:global +VU0_v3scale__FRCQ25UMath7Vector3T0RQ25UMath7Vector3 = .text:0x801931DC; // type:function size:0x24 scope:global +VU0_v4scale__FRCQ25UMath7Vector4fRQ25UMath7Vector4 = .text:0x80193200; // type:function size:0x1C scope:global +VU0_v4scalexyz__FRCQ25UMath7Vector4fRQ25UMath7Vector4 = .text:0x8019321C; // type:function size:0x1C scope:global +VU0_v4scalexyz__FRCQ25UMath7Vector4T0RQ25UMath7Vector4 = .text:0x80193238; // type:function size:0x24 scope:global +VU0_v3addscale__FRCQ25UMath7Vector3T0fRQ25UMath7Vector3 = .text:0x8019325C; // type:function size:0x2C scope:global +VU0_v4addscale__FRCQ25UMath7Vector4T0fRQ25UMath7Vector4 = .text:0x80193288; // type:function size:0x2C scope:global +VU0_v4addscalexyz__FRCQ25UMath7Vector4T0fRQ25UMath7Vector4 = .text:0x801932B4; // type:function size:0x2C scope:global +VU0_v3scaleadd__FRCQ25UMath7Vector3fT0RQ25UMath7Vector3 = .text:0x801932E0; // type:function size:0x2C scope:global +VU0_v4scaleaddxyz__FRCQ25UMath7Vector4fT0RQ25UMath7Vector4 = .text:0x8019330C; // type:function size:0x2C scope:global +VU0_v4scaleadd__FRCQ25UMath7Vector4fT0RQ25UMath7Vector4 = .text:0x80193338; // type:function size:0x2C scope:global +VU0_v3distancesquare__FRCQ25UMath7Vector3T0 = .text:0x80193364; // type:function size:0x28 scope:global +VU0_v4distancesquarexyz__FRCQ25UMath7Vector4T0 = .text:0x8019338C; // type:function size:0x28 scope:global +VU0_v3distancesquarexz__FRCQ25UMath7Vector3T0 = .text:0x801933B4; // type:function size:0x24 scope:global +VU0_v3lengthsquare__FRCQ25UMath7Vector3 = .text:0x801933D8; // type:function size:0x18 scope:global +VU0_v4lengthsquare__FRCQ25UMath7Vector4 = .text:0x801933F0; // type:function size:0x18 scope:global +VU0_v4lengthsquarexyz__FRCQ25UMath7Vector4 = .text:0x80193408; // type:function size:0x18 scope:global +VU0_sqrt__Ff = .text:0x80193420; // type:function size:0x38 scope:global +VU0_rsqrt__Ff = .text:0x80193458; // type:function size:0x40 scope:global +VU0_MATRIX4_vect3mult__FRCQ25UMath7Vector3RCQ25UMath7Matrix4RQ25UMath7Vector3 = .text:0x80193498; // type:function size:0x54 scope:global +VU0_MATRIX4_vect4mult__FRCQ25UMath7Vector4RCQ25UMath7Matrix4RQ25UMath7Vector4 = .text:0x801934EC; // type:function size:0x54 scope:global +VU0_MATRIX4_vect4mult__FPCQ25UMath7Vector4RCQ25UMath7Matrix4PQ25UMath7Vector4i = .text:0x80193540; // type:function size:0x64 scope:global +VU0_MATRIX3x4_vect3mult__FRCQ25UMath7Vector3RCQ25UMath7Matrix4RQ25UMath7Vector3 = .text:0x801935A4; // type:function size:0x44 scope:global +VU0_MATRIX3x4_vect4mult__FRCQ25UMath7Vector4RCQ25UMath7Matrix4RQ25UMath7Vector4 = .text:0x801935E8; // type:function size:0x44 scope:global +VU0_v3quatrotate__FRCQ25UMath7Vector4RCQ25UMath7Vector3RQ25UMath7Vector3 = .text:0x8019362C; // type:function size:0xA0 scope:global +VU0_v3quatrotate_xlate__FRCQ25UMath7Vector4RCQ25UMath7Vector3T1RQ25UMath7Vector3 = .text:0x801936CC; // type:function size:0xB4 scope:global +VU0_MATRIX4setyrot__FRQ25UMath7Matrix4f = .text:0x80193780; // type:function size:0x94 scope:global +VU0_m4toquat__FRCQ25UMath7Matrix4RQ25UMath7Vector4 = .text:0x80193814; // type:function size:0x24C scope:global +VU0_Matrix4ToEuler__FRCQ25UMath7Matrix4RQ25UMath7Vector3 = .text:0x80193A60; // type:function size:0x154 scope:global +VU0_Atan2__Fff = .text:0x80193BB4; // type:function size:0xC0 scope:global +GetFoundationVideoMode__Fv = .text:0x80193C74; // type:function size:0xC scope:global +__7USpline = .text:0x80193C80; // type:function size:0x100 scope:global +_._7USpline = .text:0x80193D80; // type:function size:0x84 scope:global +GetBasisMatrix__7USplineQ27USpline10SplineType = .text:0x80193E04; // type:function size:0x28 scope:global +Get2ndBasisMatrix__7USplineQ27USpline10SplineType = .text:0x80193E2C; // type:function size:0x28 scope:global +GetTangentBasisMatrix__7USplineQ27USpline10SplineType = .text:0x80193E54; // type:function size:0x28 scope:global +BuildSplineEx__7USplineRCQ25UMath7Vector3N31 = .text:0x80193E7C; // type:function size:0xEC scope:global +EvaluateSpline__7USplinefRQ25UMath7Vector4 = .text:0x80193F68; // type:function size:0x180 scope:global +EvaluateTangent__7USplinefRQ25UMath7Vector4 = .text:0x801940E8; // type:function size:0x44 scope:global +EvaluateDerivative__7USplinefRQ25UMath7Vector4 = .text:0x8019412C; // type:function size:0x160 scope:global +Evaluate2ndDerivative__7USplinefRQ25UMath7Vector4 = .text:0x8019428C; // type:function size:0x160 scope:global +EvaluateCurvatureXZ__7USplinef = .text:0x801943EC; // type:function size:0xD4 scope:global +__Q43UTL3COM6Object6_IListUi = .text:0x801944C0; // type:function size:0x40 scope:global +_._Q43UTL3COM6Object6_IList = .text:0x80194500; // type:function size:0x84 scope:global +Add__Q43UTL3COM6Object6_IListPvPQ33UTL3COM8IUnknown = .text:0x80194584; // type:function size:0x288 scope:global +Find__Q43UTL3COM6Object6_IListPv = .text:0x8019480C; // type:function size:0x78 scope:global +Remove__Q43UTL3COM6Object6_IListPQ33UTL3COM8IUnknown = .text:0x80194884; // type:function size:0xDC scope:global +Search__Q33UTL11Collections10_KeyedNodePQ33UTL11Collections10_KeyedNodeT1Ui = .text:0x80194960; // type:function size:0x64 scope:global +EventSeqEngineResolver__4CARPPC5UDataPC6UGroup = .text:0x801949C4; // type:function size:0x98 scope:local +EventSeqSystemResolver__4CARPPC5UDataPC6UGroup = .text:0x80194A5C; // type:function size:0x84 scope:local +EventSeqStateResolver__4CARPPC5UDataPC6UGroup = .text:0x80194AE0; // type:function size:0x98 scope:local +EventSeqActionResolver__4CARPPC5UDataPC6UGroup = .text:0x80194B78; // type:function size:0x9C scope:local +EventListResolver__4CARPPC5UDataPC6UGroup = .text:0x80194C14; // type:function size:0x8C scope:local +StimulusFilterResolver__4CARPPC5UDataPC6UGroup = .text:0x80194CA0; // type:function size:0x9C scope:local +CollisionInstanceResolver__4CARPPC5UDataPC6UGroup = .text:0x80194D3C; // type:function size:0x78 scope:local +AddUDataTagResolver__4CARPUiPFPC5UDataPC6UGroup_v = .text:0x80194DB4; // type:function size:0x1D4 scope:global +ResolveData__4CARPPC6UGroupPC5UData = .text:0x80194F88; // type:function size:0xAC scope:global +InitResolvers__4CARPv = .text:0x80195034; // type:function size:0xF0 scope:global +ResolveTagReferences__4CARPPC6UGroupUi = .text:0x80195124; // type:function size:0xDC scope:global +__Q24CARP12TagReferencePC6UGroup = .text:0x80195200; // type:function size:0x200 scope:global +hash32__FPCUcUiUi = .text:0x80195400; // type:function size:0x2E8 scope:local +stringhash32__FPCc = .text:0x801956E8; // type:function size:0x5C scope:global +sinf__FGQ24CARP11ExprValType = .text:0x80195744; // type:function size:0x40 scope:local +cosf__FGQ24CARP11ExprValType = .text:0x80195784; // type:function size:0x40 scope:local +tanf__FGQ24CARP11ExprValType = .text:0x801957C4; // type:function size:0x40 scope:local +asinf__FGQ24CARP11ExprValType = .text:0x80195804; // type:function size:0x40 scope:local +acosf__FGQ24CARP11ExprValType = .text:0x80195844; // type:function size:0x40 scope:local +atanf__FGQ24CARP11ExprValType = .text:0x80195884; // type:function size:0x40 scope:local +atan2f__FGQ24CARP11ExprValTypeT0 = .text:0x801958C4; // type:function size:0x44 scope:local +sinhf__FGQ24CARP11ExprValType = .text:0x80195908; // type:function size:0x40 scope:local +coshf__FGQ24CARP11ExprValType = .text:0x80195948; // type:function size:0x40 scope:local +tanhf__FGQ24CARP11ExprValType = .text:0x80195988; // type:function size:0x40 scope:local +expf__FGQ24CARP11ExprValType = .text:0x801959C8; // type:function size:0x40 scope:local +logf__FGQ24CARP11ExprValType = .text:0x80195A08; // type:function size:0x40 scope:local +log10f__FGQ24CARP11ExprValType = .text:0x80195A48; // type:function size:0x40 scope:local +fmodf__FGQ24CARP11ExprValTypeT0 = .text:0x80195A88; // type:function size:0x44 scope:local +powf__FGQ24CARP11ExprValTypeT0 = .text:0x80195ACC; // type:function size:0x44 scope:local +sqrtf__FGQ24CARP11ExprValType = .text:0x80195B10; // type:function size:0x40 scope:local +ceilf__FGQ24CARP11ExprValType = .text:0x80195B50; // type:function size:0x40 scope:local +fabsf__FGQ24CARP11ExprValType = .text:0x80195B90; // type:function size:0x2C scope:local +floorf__FGQ24CARP11ExprValType = .text:0x80195BBC; // type:function size:0x40 scope:local +roundf__FGQ24CARP11ExprValType = .text:0x80195BFC; // type:function size:0x78 scope:local +hypotf__FGQ24CARP11ExprValTypeT0 = .text:0x80195C74; // type:function size:0x5C scope:local +hypot3d__FGQ24CARP11ExprValTypeN20 = .text:0x80195CD0; // type:function size:0x6C scope:local +InitializeTables__Fv = .text:0x80195D3C; // type:function size:0x26B4 scope:local +ExpressionEvaluator__4CARPPCQ24CARP10ExpressionPFUiUiPCvPCQ24CARP11ExprValType_Q24CARP11ExprValTypePCvPCQ24CARP11ExprValType = .text:0x801983F0; // type:function size:0x6F4 scope:global +__14StringRegistry = .text:0x80198AE4; // type:function size:0x30 scope:global +__10StringPool = .text:0x80198B14; // type:function size:0x14 scope:global +clear__Q24_STLt10_List_base2ZQ25UMath7Vector4ZQ24_STLt9allocator1ZQ25UMath7Vector4 = .text:0x80198B28; // type:function size:0x7C scope:global +reserve__Q24_STLt6vector2ZQ43UTL3COM6Object6_IPairZQ33UTL3Stdt9Allocator2ZQ43UTL3COM6Object6_IPairZ16_type_UComObjectUi = .text:0x80198BA4; // type:function size:0x15C scope:global +__upper_bound__H4ZPQ43UTL3COM6Object6_IPairZQ43UTL3COM6Object6_IPairZQ24_STLt4less1ZQ43UTL3COM6Object6_IPairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80198D00; // type:function size:0x48 scope:global +__lower_bound__H4ZPQ43UTL3COM6Object6_IPairZQ43UTL3COM6Object6_IPairZQ24_STLt4less1ZQ43UTL3COM6Object6_IPairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80198D48; // type:function size:0x48 scope:global +find_if__H2ZPQ43UTL3COM6Object6_IPairZQ53UTL3COM6Object6_IPair7_Finder_4_STLX01X01X11_X01 = .text:0x80198D90; // type:function size:0xB8 scope:global +__lower_bound__H4ZPQ33UTL11Collections10_KeyedNodeZQ33UTL11Collections10_KeyedNodeZQ24_STLt4less1ZQ33UTL11Collections10_KeyedNodeZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80198E48; // type:function size:0x48 scope:global +__lower_bound__H4ZPQ24CARP15TagResolverNodeZQ24CARP15TagResolverNodeZQ24_STLt4less1ZQ24CARP15TagResolverNodeZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80198E90; // type:function size:0x48 scope:global +reserve__Q24_STLt6vector2ZQ24CARP15TagResolverNodeZQ24_STLt9allocator1ZQ24CARP15TagResolverNodeUi = .text:0x80198ED8; // type:function size:0x160 scope:global +__less__H1ZQ24CARP15TagResolverNode_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x80199038; // type:function size:0xC scope:global +__adjust_heap__H4ZPQ24CARP15TagResolverNodeZiZQ24CARP15TagResolverNodeZQ24_STLt4less1ZQ24CARP15TagResolverNode_4_STLX01X11X11X21X31_v = .text:0x80199044; // type:function size:0x11C scope:global +make_heap__H2ZPQ24CARP15TagResolverNodeZQ24_STLt4less1ZQ24CARP15TagResolverNode_4_STLX01X01X11_v = .text:0x80199160; // type:function size:0x94 scope:global +pop_heap__H2ZPQ24CARP15TagResolverNodeZQ24_STLt4less1ZQ24CARP15TagResolverNode_4_STLX01X01X11_v = .text:0x801991F4; // type:function size:0x78 scope:global +__partial_sort__H3ZPQ24CARP15TagResolverNodeZQ24CARP15TagResolverNodeZQ24_STLt4less1ZQ24CARP15TagResolverNode_4_STLX01X01X01PX11X21_v = .text:0x8019926C; // type:function size:0xD8 scope:global +partial_sort__H2ZPQ24CARP15TagResolverNodeZQ24_STLt4less1ZQ24CARP15TagResolverNode_4_STLX01X01X01X11_v = .text:0x80199344; // type:function size:0x30 scope:global +__unguarded_partition__H3ZPQ24CARP15TagResolverNodeZQ24CARP15TagResolverNodeZQ24_STLt4less1ZQ24CARP15TagResolverNode_4_STLX01X01X11X21_X01 = .text:0x80199374; // type:function size:0x7C scope:global +__introsort_loop__H4ZPQ24CARP15TagResolverNodeZQ24CARP15TagResolverNodeZiZQ24_STLt4less1ZQ24CARP15TagResolverNode_4_STLX01X01PX11X21X31_v = .text:0x801993F0; // type:function size:0x134 scope:global +__unguarded_linear_insert__H3ZPQ24CARP15TagResolverNodeZQ24CARP15TagResolverNodeZQ24_STLt4less1ZQ24CARP15TagResolverNode_4_STLX01X11X21_v = .text:0x80199524; // type:function size:0x38 scope:global +__insertion_sort__H2ZPQ24CARP15TagResolverNodeZQ24_STLt4less1ZQ24CARP15TagResolverNode_4_STLX01X01X11_v = .text:0x8019955C; // type:function size:0xD0 scope:global +__unguarded_insertion_sort_aux__H3ZPQ24CARP15TagResolverNodeZQ24CARP15TagResolverNodeZQ24_STLt4less1ZQ24CARP15TagResolverNode_4_STLX01X01PX11X21_v = .text:0x8019962C; // type:function size:0x68 scope:global +__final_insertion_sort__H2ZPQ24CARP15TagResolverNodeZQ24_STLt4less1ZQ24CARP15TagResolverNode_4_STLX01X01X11_v = .text:0x80199694; // type:function size:0x7C scope:global +sort__H1ZPQ24CARP15TagResolverNode_4_STLX01X01_v = .text:0x80199710; // type:function size:0xA0 scope:global +__less__H1Z8FuncDesc_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x801997B0; // type:function size:0xC scope:global +__adjust_heap__H4ZP8FuncDescZiZ8FuncDescZQ24_STLt4less1Z8FuncDesc_4_STLX01X11X11X21X31_v = .text:0x801997BC; // type:function size:0x120 scope:global +make_heap__H2ZP8FuncDescZQ24_STLt4less1Z8FuncDesc_4_STLX01X01X11_v = .text:0x801998DC; // type:function size:0x94 scope:global +pop_heap__H2ZP8FuncDescZQ24_STLt4less1Z8FuncDesc_4_STLX01X01X11_v = .text:0x80199970; // type:function size:0x80 scope:global +__partial_sort__H3ZP8FuncDescZ8FuncDescZQ24_STLt4less1Z8FuncDesc_4_STLX01X01X01PX11X21_v = .text:0x801999F0; // type:function size:0xD8 scope:global +partial_sort__H2ZP8FuncDescZQ24_STLt4less1Z8FuncDesc_4_STLX01X01X01X11_v = .text:0x80199AC8; // type:function size:0x30 scope:global +__unguarded_partition__H3ZP8FuncDescZ8FuncDescZQ24_STLt4less1Z8FuncDesc_4_STLX01X01X11X21_X01 = .text:0x80199AF8; // type:function size:0x7C scope:global +__introsort_loop__H4ZP8FuncDescZ8FuncDescZiZQ24_STLt4less1Z8FuncDesc_4_STLX01X01PX11X21X31_v = .text:0x80199B74; // type:function size:0x134 scope:global +__unguarded_linear_insert__H3ZP8FuncDescZ8FuncDescZQ24_STLt4less1Z8FuncDesc_4_STLX01X11X21_v = .text:0x80199CA8; // type:function size:0x38 scope:global +__insertion_sort__H2ZP8FuncDescZQ24_STLt4less1Z8FuncDesc_4_STLX01X01X11_v = .text:0x80199CE0; // type:function size:0xD0 scope:global +__unguarded_insertion_sort_aux__H3ZP8FuncDescZ8FuncDescZQ24_STLt4less1Z8FuncDesc_4_STLX01X01PX11X21_v = .text:0x80199DB0; // type:function size:0x68 scope:global +__final_insertion_sort__H2ZP8FuncDescZQ24_STLt4less1Z8FuncDesc_4_STLX01X01X11_v = .text:0x80199E18; // type:function size:0x7C scope:global +sort__H1ZP8FuncDesc_4_STLX01X01_v = .text:0x80199E94; // type:function size:0xA0 scope:global +__lower_bound__H4ZP8FuncDescZ8FuncDescZQ24_STLt4less1Z8FuncDescZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80199F34; // type:function size:0x48 scope:global +__static_initialization_and_destruction_0 = .text:0x80199F7C; // type:function size:0x184 scope:local +StartGroup__Q26UGroup9ProcessorPC6UGroup = .text:0x8019A100; // type:function size:0x8 scope:global +ProcessData__Q26UGroup9ProcessorPC6UGroupPC5UData = .text:0x8019A108; // type:function size:0x8 scope:global +EndGroup__Q26UGroup9ProcessorPC6UGroup = .text:0x8019A110; // type:function size:0x4 scope:global +StartGroup__Q24CARP12CarpResolverPC6UGroup = .text:0x8019A114; // type:function size:0xB0 scope:global +_GLOBAL_.I.Evaluate__11UBezierLiteRCQ25UMath7Matrix4fRQ25UMath7Vector4 = .text:0x8019A1C4; // type:function size:0x2C scope:local +__static_initialization_and_destruction_0 = .text:0x8019A1F0; // type:function size:0x50 scope:local +_GLOBAL_.I.aEmotionalSummaryTypeStrings = .text:0x8019A240; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x8019A26C; // type:label scope:local +__16GRuntimeInstanceRCUi15GameplayObjType = .text:0x8019A26C; // type:function size:0xBC scope:global +_._16GRuntimeInstance = .text:0x8019A328; // type:function size:0x98 scope:global +SetConnectionBuffer__16GRuntimeInstancePQ216GRuntimeInstance17ConnectedInstanceUi = .text:0x8019A3C0; // type:function size:0x10 scope:global +AllocateConnectionBuffer__16GRuntimeInstanceUi = .text:0x8019A3D0; // type:function size:0x48 scope:global +ConnectToInstance__16GRuntimeInstanceRCUiiP16GRuntimeInstance = .text:0x8019A418; // type:function size:0x54 scope:global +LockConnections__16GRuntimeInstance = .text:0x8019A46C; // type:function size:0x48 scope:global +GetConnectedInstance__C16GRuntimeInstanceRCUii = .text:0x8019A4B4; // type:function size:0x8C scope:global +ResetConnections__16GRuntimeInstance = .text:0x8019A540; // type:function size:0x18 scope:global +DisconnectInstances__16GRuntimeInstance = .text:0x8019A558; // type:function size:0x68 scope:global +MakePackedKey__C16GRuntimeInstanceUii = .text:0x8019A5C0; // type:function size:0x20 scope:global +AddToTypeList__16GRuntimeInstance15GameplayObjType = .text:0x8019A5E0; // type:function size:0x48 scope:global +RemoveFromTypeList__16GRuntimeInstance = .text:0x8019A628; // type:function size:0x68 scope:global +GetConnectionCount__C16GRuntimeInstance = .text:0x8019A690; // type:function size:0x8 scope:global +GetConnectionAt__C16GRuntimeInstanceUi = .text:0x8019A698; // type:function size:0x14 scope:global +IsDerivedFromTemplate__C16GRuntimeInstanceUi = .text:0x8019A6AC; // type:function size:0xA4 scope:global +GetPosition__16GRuntimeInstanceRQ25UMath7Vector3 = .text:0x8019A750; // type:function size:0x94 scope:global +GetDirection__16GRuntimeInstanceRQ25UMath7Vector3 = .text:0x8019A7E4; // type:function size:0x8C scope:global +__14GCollectionKeyP16GRuntimeInstance = .text:0x8019A870; // type:function size:0x3C scope:global +__opP16GRuntimeInstance__C14GCollectionKey = .text:0x8019A8AC; // type:function size:0x2C scope:global +__8GTriggerRCUi = .text:0x8019A8D8; // type:function size:0x9F0 scope:global +_._8GTrigger = .text:0x8019B2C8; // type:function size:0x108 scope:global +GetTargetActivity__8GTrigger = .text:0x8019B3D0; // type:function size:0x34 scope:global +AddActivationReference__8GTrigger = .text:0x8019B404; // type:function size:0x3C scope:global +RemoveActivationReference__8GTrigger = .text:0x8019B440; // type:function size:0x40 scope:global +CreateParticleEffect__8GTriggerPCcRQ25UMath7Vector3 = .text:0x8019B480; // type:function size:0xE4 scope:global +CreateAllParticleEffects__8GTrigger = .text:0x8019B564; // type:function size:0x184 scope:global +ClearParticleEffects__8GTrigger = .text:0x8019B6E8; // type:function size:0x74 scope:global +EnableParticleEffects__8GTriggerb = .text:0x8019B75C; // type:function size:0x74 scope:global +RefreshParticleEffects__8GTrigger = .text:0x8019B7D0; // type:function size:0x40 scope:global +NotifyEmitterGroupDelete__8GTriggerPvP12EmitterGroup = .text:0x8019B810; // type:function size:0x30 scope:global +Enable__8GTriggerb = .text:0x8019B840; // type:function size:0x104 scope:global +GetPosition__8GTriggerRQ25UMath7Vector3 = .text:0x8019B944; // type:function size:0x20 scope:global +NotifySimableTrigger__8GTriggerP8ISimablei = .text:0x8019B964; // type:function size:0x1C4 scope:global +Reset__8GTrigger = .text:0x8019BB28; // type:function size:0x50 scope:global +ShowIcon__8GTrigger = .text:0x8019BB78; // type:function size:0x48 scope:global +HideIcon__8GTrigger = .text:0x8019BBC0; // type:function size:0x48 scope:global +MarkAsInside__8GTriggerP8ISimable = .text:0x8019BC08; // type:function size:0x170 scope:global +MarkAsOutside__8GTriggerP8ISimable = .text:0x8019BD78; // type:function size:0x78 scope:global +IsInside__8GTriggerP8ISimable = .text:0x8019BDF0; // type:function size:0x54 scope:global +__7GMarkerRCUi = .text:0x8019BE44; // type:function size:0x210 scope:global +_._7GMarker = .text:0x8019C054; // type:function size:0x68 scope:global +__9GActivityRCUi = .text:0x8019C0BC; // type:function size:0x64 scope:global +_._9GActivity = .text:0x8019C120; // type:function size:0x148 scope:global +GatherStatesAndHandlers__9GActivity = .text:0x8019C268; // type:function size:0x280 scope:global +StoreHandlers__9GActivityP6GStatePQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVector = .text:0x8019C4E8; // type:function size:0x1D0 scope:global +CollectionIsStateForActivity__9GActivityP6GState = .text:0x8019C6B8; // type:function size:0xE0 scope:global +CollectionIsHandlerForState__9GActivityP6GStateP8GHandler = .text:0x8019C798; // type:function size:0x1AC scope:global +RegisterMessageHandlers__9GActivityP6GState = .text:0x8019C944; // type:function size:0xE8 scope:global +UnregisterMessageHandlers__9GActivity = .text:0x8019CA2C; // type:function size:0xD8 scope:global +ActivateReferencedTriggers__9GActivitybP16GRuntimeInstance = .text:0x8019CB04; // type:function size:0x10C scope:global +Run__9GActivity = .text:0x8019CC10; // type:function size:0xB8 scope:global +Suspend__9GActivity = .text:0x8019CCC8; // type:function size:0x88 scope:global +Reset__9GActivity = .text:0x8019CD50; // type:function size:0x64 scope:global +GetStateByName__9GActivityPCc = .text:0x8019CDB4; // type:function size:0xB4 scope:global +EnterState__9GActivityP6GState = .text:0x8019CE68; // type:function size:0xAC scope:global +ChangeStateFromScript__9GActivityP9lua_State = .text:0x8019CF14; // type:function size:0x84 scope:global +HandleLocalMessage__9GActivityG6UCrc32 = .text:0x8019CF98; // type:function size:0xFC scope:global +PushActivityVars__9GActivityP9lua_State = .text:0x8019D094; // type:function size:0xB0 scope:global +ClearActivityVars__9GActivityP9lua_State = .text:0x8019D144; // type:function size:0x58 scope:global +BuildActivityTables__9GActivityP9lua_State = .text:0x8019D19C; // type:function size:0xA4 scope:global +HandleMessage__9GActivityP22LuaMessageDeliveryInfo = .text:0x8019D240; // type:function size:0x160 scope:global +SerializeVars__9GActivityb = .text:0x8019D3A0; // type:function size:0x290 scope:global +DeserializeVars__9GActivity = .text:0x8019D630; // type:function size:0x21C scope:global +__11GRaceStatus = .text:0x8019D84C; // type:function size:0x2D0 scope:global +_._11GRaceStatus = .text:0x8019DB1C; // type:function size:0x244 scope:global +Init__11GRaceStatus = .text:0x8019DD60; // type:function size:0x40 scope:global +Shutdown__11GRaceStatus = .text:0x8019DDA0; // type:function size:0x5C scope:global +EnableBinBarriers__11GRaceStatus = .text:0x8019DDFC; // type:function size:0x2C scope:global +RefreshBinWhileInGame__11GRaceStatus = .text:0x8019DE28; // type:function size:0xC scope:global +EnterBin__11GRaceStatusUi = .text:0x8019DE34; // type:function size:0xC0 scope:global +CalculateRankings__11GRaceStatus = .text:0x8019DEF4; // type:function size:0x1A0 scope:global +SortCheckPointRankings__11GRaceStatus = .text:0x8019E094; // type:function size:0x108 scope:global +Update__11GRaceStatusf = .text:0x8019E19C; // type:function size:0x538 scope:global +CanUnspawnRoamer__C11GRaceStatusPC8IVehicle = .text:0x8019E6D4; // type:function size:0x184 scope:global +OnQueryVehicleCache__C11GRaceStatusPC8IVehiclePC13IVehicleCache = .text:0x8019E858; // type:function size:0x1AC scope:global +OnRemovedVehicleCache__11GRaceStatusP8IVehicle = .text:0x8019EA04; // type:function size:0x4 scope:global +SetRaceContext__11GRaceStatusQ25GRace7Context = .text:0x8019EA08; // type:function size:0x8 scope:global +GetRacerInfo__11GRaceStatusi = .text:0x8019EA10; // type:function size:0x10 scope:global +GetRacerInfo__11GRaceStatusP8ISimable = .text:0x8019EA20; // type:function size:0xA8 scope:global +GetWinningPlayerInfo__11GRaceStatus = .text:0x8019EAC8; // type:function size:0xE0 scope:global +GetRacerCount__C11GRaceStatus = .text:0x8019EBA8; // type:function size:0x8 scope:global +StartMasterTimer__11GRaceStatus = .text:0x8019EBB0; // type:function size:0x58 scope:global +StopMasterTimer__11GRaceStatus = .text:0x8019EC08; // type:function size:0x24 scope:global +GetRaceTimeElapsed__C11GRaceStatus = .text:0x8019EC2C; // type:function size:0x3C scope:global +GetRaceTimeRemaining__C11GRaceStatus = .text:0x8019EC68; // type:function size:0x8C scope:global +ClearRacers__11GRaceStatus = .text:0x8019ECF4; // type:function size:0xBC scope:global +AddSimablePlayer__11GRaceStatusP8ISimable = .text:0x8019EDB0; // type:function size:0x2C4 scope:global +AddRacer__11GRaceStatusP16GRuntimeInstance = .text:0x8019F074; // type:function size:0x230 scope:global +SetRaceActivity__11GRaceStatusP9GActivity = .text:0x8019F2A4; // type:function size:0x38 scope:global +EnableBarriers__11GRaceStatus = .text:0x8019F2DC; // type:function size:0x90 scope:global +DisableBarriers__11GRaceStatus = .text:0x8019F36C; // type:function size:0x3C scope:global +SetRoaming__11GRaceStatus = .text:0x8019F3A8; // type:function size:0x2F4 scope:global +SetRacing__11GRaceStatus = .text:0x8019F69C; // type:function size:0x1AC scope:global +NotifyScriptWhenLoaded__11GRaceStatus = .text:0x8019F848; // type:function size:0x100 scope:global +AddAvailableEventToMap__11GRaceStatusP16GRuntimeInstanceT1 = .text:0x8019F948; // type:function size:0x4 scope:global +AddSpeedTrapToMap__11GRaceStatusP16GRuntimeInstance = .text:0x8019F94C; // type:function size:0x4 scope:global +AwardBonusTime__11GRaceStatusf = .text:0x8019F950; // type:function size:0x94 scope:global +ClearCheckpoints__11GRaceStatus = .text:0x8019F9E4; // type:function size:0x50 scope:global +AddCheckpoint__11GRaceStatusP16GRuntimeInstance = .text:0x8019FA34; // type:function size:0x150 scope:global +SetNextCheckpointPos__11GRaceStatusP16GRuntimeInstance = .text:0x8019FB84; // type:function size:0x180 scope:global +DetermineRaceSegmentLength__11GRaceStatusPCQ25UMath7Vector4T1ii = .text:0x8019FD04; // type:function size:0x5DC scope:global +DetermineRaceLength__11GRaceStatus = .text:0x801A02E0; // type:function size:0x394 scope:global +NotNumeric__Fc = .text:0x801A0674; // type:function size:0x50 scope:global +SplitChars__FPcPPPcPFc_i = .text:0x801A06C4; // type:function size:0x150 scope:global +ParseFloat__FPc = .text:0x801A0814; // type:function size:0xCC scope:global +ParseArray__FPCcPfi = .text:0x801A08E0; // type:function size:0x1D8 scope:global +ParseCatchUpData__11GRaceStatusPCcT1 = .text:0x801A0AB8; // type:function size:0x54 scope:global +GetAdaptiveDifficutly__C11GRaceStatus = .text:0x801A0B0C; // type:function size:0x20 scope:global +SyncronizeAdaptiveBonus__11GRaceStatus = .text:0x801A0B2C; // type:function size:0x70 scope:global +UpdateAdaptiveDifficulty__11GRaceStatusQ211GRaceStatus19eAdaptiveGainReasonP8ISimable = .text:0x801A0B9C; // type:function size:0x900 scope:global +ComputeCatchUpSkill__11GRaceStatusP10GRacerInfoP8PidErrorPfT3b = .text:0x801A149C; // type:function size:0x338 scope:global +MakeDefaultCatchUpData__11GRaceStatus = .text:0x801A17D4; // type:function size:0x48 scope:global +MakeCatchUpData__11GRaceStatus = .text:0x801A181C; // type:function size:0x7C scope:global +ClearTimes__11GRaceStatus = .text:0x801A1898; // type:function size:0xA8 scope:global +SetLapTime__11GRaceStatusiif = .text:0x801A1940; // type:function size:0x18 scope:global +GetLapTime__11GRaceStatusiib = .text:0x801A1958; // type:function size:0x74 scope:global +SetCheckpointTime__11GRaceStatusiiif = .text:0x801A19CC; // type:function size:0x20 scope:global +GetLapPosition__11GRaceStatusiib = .text:0x801A19EC; // type:function size:0xB4 scope:global +GetBestLapTime__11GRaceStatusi = .text:0x801A1AA0; // type:function size:0xA8 scope:global +GetWorstLapTime__11GRaceStatusi = .text:0x801A1B48; // type:function size:0xA8 scope:global +GetRaceSpeedTrapSpeed__11GRaceStatusii = .text:0x801A1BF0; // type:function size:0x3C scope:global +GetRaceSpeedTrapPosition__11GRaceStatusii = .text:0x801A1C2C; // type:function size:0x3C scope:global +GetBestSpeedTrapSpeed__11GRaceStatusi = .text:0x801A1C68; // type:function size:0x9C scope:global +GetWorstSpeedTrapSpeed__11GRaceStatusi = .text:0x801A1D04; // type:function size:0x9C scope:global +GetRaceTollboothTime__11GRaceStatusii = .text:0x801A1DA0; // type:function size:0x3C scope:global +RaceAbandoned__11GRaceStatus = .text:0x801A1DDC; // type:function size:0xB8 scope:global +FinalizeRaceStats__11GRaceStatus = .text:0x801A1E94; // type:function size:0x78 scope:global +CreateVehicle__10GRacerInfoUi = .text:0x801A1F0C; // type:function size:0x384 scope:global +IsBehind__C10GRacerInfoRC10GRacerInfo = .text:0x801A2290; // type:function size:0x19C scope:global +CalcAverageSpeed__C10GRacerInfo = .text:0x801A242C; // type:function size:0x50 scope:global +SetSimable__10GRacerInfoP8ISimable = .text:0x801A247C; // type:function size:0x1C scope:global +KnockOut__10GRacerInfo = .text:0x801A2498; // type:function size:0x60 scope:global +TotalVehicle__10GRacerInfo = .text:0x801A24F8; // type:function size:0x60 scope:global +Busted__10GRacerInfo = .text:0x801A2558; // type:function size:0x60 scope:global +ChallengeComplete__10GRacerInfo = .text:0x801A25B8; // type:function size:0xC scope:global +ForceStop__10GRacerInfo = .text:0x801A25C4; // type:function size:0xA4 scope:global +BlowEngine__10GRacerInfo = .text:0x801A2668; // type:function size:0x60 scope:global +SetName__10GRacerInfoPCc = .text:0x801A26C8; // type:function size:0x8 scope:global +SetRanking__10GRacerInfoi = .text:0x801A26D0; // type:function size:0x8 scope:global +AddToPointTotal__10GRacerInfof = .text:0x801A26D8; // type:function size:0x30 scope:global +SetIndex__10GRacerInfoi = .text:0x801A2708; // type:function size:0x8 scope:global +Update__10GRacerInfof = .text:0x801A2710; // type:function size:0x44C scope:global +GetHudPctRaceComplete__C10GRacerInfo = .text:0x801A2B5C; // type:function size:0x6C scope:global +UpdateSplits__10GRacerInfo = .text:0x801A2BC8; // type:function size:0x10C scope:global +IsAudioLoading__11GRaceStatus = .text:0x801A2CD4; // type:function size:0xEC scope:global +IsModelsLoading__11GRaceStatus = .text:0x801A2DC0; // type:function size:0xEC scope:global +IsLoading__11GRaceStatus = .text:0x801A2EAC; // type:function size:0x64 scope:global +GetSegmentLength__11GRaceStatusii = .text:0x801A2F10; // type:function size:0x30 scope:global +SaveStartPosition__10GRacerInfo = .text:0x801A2F40; // type:function size:0x1B4 scope:global +RestoreStartPosition__10GRacerInfo = .text:0x801A30F4; // type:function size:0x118 scope:global +ForceStartPosition__10GRacerInfoRCQ25UMath7Vector3T1 = .text:0x801A320C; // type:function size:0x3C scope:global +StartRace__10GRacerInfo = .text:0x801A3248; // type:function size:0x6C scope:global +StartLap__10GRacerInfoi = .text:0x801A32B4; // type:function size:0x60 scope:global +StartCheckpoint__10GRacerInfoi = .text:0x801A3314; // type:function size:0x74 scope:global +NotifySpeedTrapTriggered__10GRacerInfof = .text:0x801A3388; // type:function size:0x34 scope:global +FinishRace__10GRacerInfo = .text:0x801A33BC; // type:function size:0xA8 scope:global +AreStatsReady__C10GRacerInfo = .text:0x801A3464; // type:function size:0x48 scope:global +ChooseRandomName__10GRacerInfo = .text:0x801A34AC; // type:function size:0xE0 scope:global +ChooseBossName__10GRacerInfo = .text:0x801A358C; // type:function size:0xB4 scope:global +ChooseRacerName__10GRacerInfo = .text:0x801A3640; // type:function size:0x78 scope:global +FinalizeRaceStats__10GRacerInfo = .text:0x801A36B8; // type:function size:0x344 scope:global +__13GRaceDatabase = .text:0x801A39FC; // type:function size:0xB4 scope:global +Init__13GRaceDatabase = .text:0x801A3AB0; // type:function size:0x38 scope:global +BuildBinList__13GRaceDatabase = .text:0x801A3AE8; // type:function size:0x54 scope:global +StoreBinList__13GRaceDatabaseP8GRaceBin = .text:0x801A3B3C; // type:function size:0xE8 scope:global +SerializeBins__13GRaceDatabasePUc = .text:0x801A3C24; // type:function size:0x9C scope:global +DeserializeBins__13GRaceDatabasePUc = .text:0x801A3CC0; // type:function size:0x7C scope:global +RefreshBinProgress__13GRaceDatabase = .text:0x801A3D3C; // type:function size:0x50 scope:global +BuildRaceList__13GRaceDatabase = .text:0x801A3D8C; // type:function size:0x98 scope:global +StoreRaceList__13GRaceDatabaseP15GRaceParameters = .text:0x801A3E24; // type:function size:0x100 scope:global +CollectionIsRaceActivity__13GRaceDatabaseRQ36Attrib3Gen8gameplay = .text:0x801A3F24; // type:function size:0x158 scope:global +CollectionIsRaceBin__13GRaceDatabaseRQ36Attrib3Gen8gameplay = .text:0x801A407C; // type:function size:0x104 scope:global +NotifyVaultUnloading__13GRaceDatabaseP6GVault = .text:0x801A4180; // type:function size:0x8C scope:global +NotifyVaultLoaded__13GRaceDatabaseP6GVault = .text:0x801A420C; // type:function size:0x6C scope:global +GetRaceCount__13GRaceDatabase = .text:0x801A4278; // type:function size:0x10 scope:global +GetRaceParameters__13GRaceDatabaseUi = .text:0x801A4288; // type:function size:0x30 scope:global +GetRaceFromActivity__13GRaceDatabaseP9GActivity = .text:0x801A42B8; // type:function size:0x3C scope:global +GetRaceFromHash__13GRaceDatabaseUi = .text:0x801A42F4; // type:function size:0x70 scope:global +GetRaceFromKey__13GRaceDatabaseUi = .text:0x801A4364; // type:function size:0x70 scope:global +GetBinCount__13GRaceDatabase = .text:0x801A43D4; // type:function size:0x8 scope:global +GetBin__13GRaceDatabaseUi = .text:0x801A43DC; // type:function size:0x10 scope:global +GetBinNumber__13GRaceDatabasei = .text:0x801A43EC; // type:function size:0x70 scope:global +AllocCustomRace__13GRaceDatabaseP15GRaceParameters = .text:0x801A445C; // type:function size:0x74 scope:global +FreeCustomRace__13GRaceDatabaseP11GRaceCustom = .text:0x801A44D0; // type:function size:0x40 scope:global +DestroyCustomRace__13GRaceDatabaseP11GRaceCustom = .text:0x801A4510; // type:function size:0xAC scope:global +ClearStartupRace__13GRaceDatabase = .text:0x801A45BC; // type:function size:0x50 scope:global +SetStartupRace__13GRaceDatabaseP11GRaceCustomQ25GRace7Context = .text:0x801A460C; // type:function size:0x60 scope:global +GetStartupRace__13GRaceDatabase = .text:0x801A466C; // type:function size:0x8 scope:global +GetStartupRaceContext__13GRaceDatabase = .text:0x801A4674; // type:function size:0x8 scope:global +BuildScoreList__13GRaceDatabase = .text:0x801A467C; // type:function size:0x44 scope:global +UpdateRaceScore__13GRaceDatabaseb = .text:0x801A46C0; // type:function size:0x368 scope:global +ClearRaceScores__13GRaceDatabase = .text:0x801A4A28; // type:function size:0x124 scope:global +GetScoreInfo__13GRaceDatabaseUi = .text:0x801A4B4C; // type:function size:0x40 scope:global +CheckRaceScoreFlags__13GRaceDatabaseUiQ213GRaceDatabase10ScoreFlags = .text:0x801A4B8C; // type:function size:0x50 scope:global +ResetCareerCompleteFlag__13GRaceDatabaseUi = .text:0x801A4BDC; // type:function size:0x2C scope:global +LoadBestScores__13GRaceDatabaseP13GRaceSaveInfoUi = .text:0x801A4C08; // type:function size:0xA8 scope:global +GetNextDDayRace__13GRaceDatabase = .text:0x801A4CB0; // type:function size:0x84 scope:global +GetCollectionKey__C15GRaceParameters = .text:0x801A4D34; // type:function size:0x4C scope:global +GetRaceLengthMeters__C15GRaceParameters = .text:0x801A4D80; // type:function size:0x6C scope:global +GetReputation__C15GRaceParameters = .text:0x801A4DEC; // type:function size:0x150 scope:global +GetCashValue__C15GRaceParameters = .text:0x801A4F3C; // type:function size:0x144 scope:global +GetLocalizationTag__C15GRaceParameters = .text:0x801A5080; // type:function size:0x6C scope:global +GetNumLaps__C15GRaceParameters = .text:0x801A50EC; // type:function size:0x6C scope:global +GetEventID__C15GRaceParameters = .text:0x801A5158; // type:function size:0x68 scope:global +GetRivalBestTime__C15GRaceParameters = .text:0x801A51C0; // type:function size:0xB8 scope:global +GetChallengeGoal__C15GRaceParameters = .text:0x801A5278; // type:function size:0x144 scope:global +GetInitiallyUnlockedQuickRace__C15GRaceParameters = .text:0x801A53BC; // type:function size:0x70 scope:global +GetInitiallyUnlockedOnline__C15GRaceParameters = .text:0x801A542C; // type:function size:0x70 scope:global +GetInitiallyUnlockedChallenge__C15GRaceParameters = .text:0x801A549C; // type:function size:0x70 scope:global +GetIsDDayRace__C15GRaceParameters = .text:0x801A550C; // type:function size:0x70 scope:global +GetIsBossRace__C15GRaceParameters = .text:0x801A557C; // type:function size:0x70 scope:global +GetIsMarkerRace__C15GRaceParameters = .text:0x801A55EC; // type:function size:0x70 scope:global +GetIsPursuitRace__C15GRaceParameters = .text:0x801A565C; // type:function size:0x70 scope:global +GetIsLoopingRace__C15GRaceParameters = .text:0x801A56CC; // type:function size:0x70 scope:global +GetRankPlayersByPoints__C15GRaceParameters = .text:0x801A573C; // type:function size:0x70 scope:global +GetRankPlayersByDistance__C15GRaceParameters = .text:0x801A57AC; // type:function size:0x70 scope:global +GetCopsEnabled__C15GRaceParameters = .text:0x801A581C; // type:function size:0x70 scope:global +GetScriptedCopsInRace__C15GRaceParameters = .text:0x801A588C; // type:function size:0x70 scope:global +GetNeverInQuickRace__C15GRaceParameters = .text:0x801A58FC; // type:function size:0x70 scope:global +GetIsChallengeSeriesRace__C15GRaceParameters = .text:0x801A596C; // type:function size:0x70 scope:global +GetIsCollectorsEditionRace__C15GRaceParameters = .text:0x801A59DC; // type:function size:0x70 scope:global +GetTimeLimit__C15GRaceParameters = .text:0x801A5A4C; // type:function size:0x54 scope:global +GetMaxHeatLevel__C15GRaceParameters = .text:0x801A5AA0; // type:function size:0x54 scope:global +GetNoPostRaceScreen__C15GRaceParameters = .text:0x801A5AF4; // type:function size:0x54 scope:global +GetUseWorldHeatInRace__C15GRaceParameters = .text:0x801A5B48; // type:function size:0x54 scope:global +GetForceHeatLevel__C15GRaceParameters = .text:0x801A5B9C; // type:function size:0x78 scope:global +GetMaxRaceHeatLevel__C15GRaceParameters = .text:0x801A5C14; // type:function size:0x54 scope:global +GetInitialPlayerSpeed__C15GRaceParameters = .text:0x801A5C68; // type:function size:0x54 scope:global +GetIsRollingStart__C15GRaceParameters = .text:0x801A5CBC; // type:function size:0x54 scope:global +GetIsEpicPursuitRace__C15GRaceParameters = .text:0x801A5D10; // type:function size:0x54 scope:global +GetPlayerCarType__C15GRaceParameters = .text:0x801A5D64; // type:function size:0x54 scope:global +GetPlayerCarPerformance__C15GRaceParameters = .text:0x801A5DB8; // type:function size:0x54 scope:global +GetKnockoutsPerLap__C15GRaceParameters = .text:0x801A5E0C; // type:function size:0x54 scope:global +GetCatchUp__C15GRaceParameters = .text:0x801A5E60; // type:function size:0x54 scope:global +GetCatchUpOverride__C15GRaceParameters = .text:0x801A5EB4; // type:function size:0x54 scope:global +GetCatchUpSkill__C15GRaceParameters = .text:0x801A5F08; // type:function size:0x54 scope:global +GetCatchUpSpread__C15GRaceParameters = .text:0x801A5F5C; // type:function size:0x54 scope:global +GetCatchUpIntegral__C15GRaceParameters = .text:0x801A5FB0; // type:function size:0x54 scope:global +GetCatchUpDerivative__C15GRaceParameters = .text:0x801A6004; // type:function size:0x54 scope:global +GetNumCheckpoints__C15GRaceParameters = .text:0x801A6058; // type:function size:0x5C scope:global +GetCheckpointsVisible__C15GRaceParameters = .text:0x801A60B4; // type:function size:0x54 scope:global +GetNumShortcuts__C15GRaceParameters = .text:0x801A6108; // type:function size:0x5C scope:global +GetNumBarrierExemptions__C15GRaceParameters = .text:0x801A6164; // type:function size:0x5C scope:global +GetBarrierCount__C15GRaceParameters = .text:0x801A61C0; // type:function size:0x5C scope:global +GetTrafficPattern__C15GRaceParameters = .text:0x801A621C; // type:function size:0x54 scope:global +GetPhotoFinishCamera__C15GRaceParameters = .text:0x801A6270; // type:function size:0x54 scope:global +GetPhotoFinishTexture__C15GRaceParameters = .text:0x801A62C4; // type:function size:0x54 scope:global +GetTimeOfDay__C15GRaceParameters = .text:0x801A6318; // type:function size:0x54 scope:global +GetStartTime__C15GRaceParameters = .text:0x801A636C; // type:function size:0x54 scope:global +GetStartPercent__C15GRaceParameters = .text:0x801A63C0; // type:function size:0x54 scope:global +BlockUntilLoaded__15GRaceParameters = .text:0x801A6414; // type:function size:0x68 scope:global +GetIsLoaded__C15GRaceParameters = .text:0x801A647C; // type:function size:0x64 scope:global +__15GRaceParametersUiP14GRaceIndexData = .text:0x801A64E0; // type:function size:0x168 scope:global +_._15GRaceParameters = .text:0x801A6648; // type:function size:0xA8 scope:global +GenerateIndex__15GRaceParametersP14GRaceIndexData = .text:0x801A66F0; // type:function size:0x690 scope:global +NotifyParentVaultUnloading__15GRaceParameters = .text:0x801A6D80; // type:function size:0x80 scope:global +NotifyParentVaultLoaded__15GRaceParameters = .text:0x801A6E00; // type:function size:0xB0 scope:global +GetGameplayObj__C15GRaceParameters = .text:0x801A6EB0; // type:function size:0x8 scope:global +GetActivity__C15GRaceParameters = .text:0x801A6EB8; // type:function size:0x24 scope:global +GetChildVault__C15GRaceParameters = .text:0x801A6EDC; // type:function size:0x8 scope:global +GetParentVault__C15GRaceParameters = .text:0x801A6EE4; // type:function size:0x8 scope:global +GetBoundingBox__C15GRaceParametersRQ25UMath7Vector2T1 = .text:0x801A6EEC; // type:function size:0x370 scope:global +GetChallengeType__C15GRaceParameters = .text:0x801A725C; // type:function size:0xC4 scope:global +GetRaceType__C15GRaceParameters = .text:0x801A7320; // type:function size:0xE8 scope:global +GetRegion__C15GRaceParameters = .text:0x801A7408; // type:function size:0xE4 scope:global +ExtractPosition__C15GRaceParametersRQ36Attrib3Gen8gameplayRQ25UMath7Vector3 = .text:0x801A74EC; // type:function size:0x98 scope:global +ExtractDirection__C15GRaceParametersRQ36Attrib3Gen8gameplayRQ25UMath7Vector3f = .text:0x801A7584; // type:function size:0x18C scope:global +GetEventHash__C15GRaceParameters = .text:0x801A7710; // type:function size:0xA8 scope:global +GetIsAvailable__C15GRaceParametersQ25GRace7Context = .text:0x801A77B8; // type:function size:0x10C scope:global +GetIsSunsetRace__C15GRaceParameters = .text:0x801A78C4; // type:function size:0xA0 scope:global +GetIsMiddayRace__C15GRaceParameters = .text:0x801A7964; // type:function size:0xBC scope:global +SetupTimeOfDay__15GRaceParameters = .text:0x801A7A20; // type:function size:0x60 scope:global +GetTrafficDensity__C15GRaceParameters = .text:0x801A7A80; // type:function size:0x90 scope:global +GetDifficulty__C15GRaceParameters = .text:0x801A7B10; // type:function size:0xB0 scope:global +GetCopDensity__C15GRaceParameters = .text:0x801A7BC0; // type:function size:0xE8 scope:global +GetCanBeReversed__C15GRaceParameters = .text:0x801A7CA8; // type:function size:0x84 scope:global +GetOpponentChar__C15GRaceParametersUi = .text:0x801A7D2C; // type:function size:0xCC scope:global +GetNumOpponents__C15GRaceParameters = .text:0x801A7DF8; // type:function size:0x98 scope:global +GetStartPosition__C15GRaceParametersRQ25UMath7Vector3 = .text:0x801A7E90; // type:function size:0x134 scope:global +GetStartDirection__C15GRaceParametersRQ25UMath7Vector3 = .text:0x801A7FC4; // type:function size:0x13C scope:global +HasFinishLine__C15GRaceParameters = .text:0x801A8100; // type:function size:0xA0 scope:global +GetFinishPosition__C15GRaceParametersRQ25UMath7Vector3 = .text:0x801A81A0; // type:function size:0x134 scope:global +GetFinishDirection__C15GRaceParametersRQ25UMath7Vector3 = .text:0x801A82D4; // type:function size:0x13C scope:global +GetCheckpointPosition__C15GRaceParametersUiRQ25UMath7Vector3 = .text:0x801A8410; // type:function size:0x138 scope:global +GetCheckpointDirection__C15GRaceParametersUiRQ25UMath7Vector3 = .text:0x801A8548; // type:function size:0x140 scope:global +GetShortcut__C15GRaceParametersUi = .text:0x801A8688; // type:function size:0x98 scope:global +GetBarrierExemption__C15GRaceParametersUi = .text:0x801A8720; // type:function size:0x98 scope:global +GetBarrierName__C15GRaceParametersUi = .text:0x801A87B8; // type:function size:0xAC scope:global +GetBarrierIsFlipped__C15GRaceParametersUi = .text:0x801A8864; // type:function size:0xB4 scope:global +__11GRaceCustomRC15GRaceParameters = .text:0x801A8918; // type:function size:0x10C scope:global +_._11GRaceCustom = .text:0x801A8A24; // type:function size:0x9C scope:global +CreateRaceActivity__11GRaceCustom = .text:0x801A8AC0; // type:function size:0x670 scope:global +GetRaceActivity__C11GRaceCustom = .text:0x801A9130; // type:function size:0x8 scope:global +GetCheckpointPosition__C11GRaceCustomUiRQ25UMath7Vector3 = .text:0x801A9138; // type:function size:0x58 scope:global +GetCheckpointDirection__C11GRaceCustomUiRQ25UMath7Vector3 = .text:0x801A9190; // type:function size:0x130 scope:global +SetReversed__11GRaceCustomb = .text:0x801A92C0; // type:function size:0x8 scope:global +SetNumLaps__11GRaceCustomi = .text:0x801A92C8; // type:function size:0x34 scope:global +SetTrafficDensity__11GRaceCustomi = .text:0x801A92FC; // type:function size:0x54 scope:global +SetNumOpponents__11GRaceCustomi = .text:0x801A9350; // type:function size:0x8 scope:global +SetDifficulty__11GRaceCustomQ25GRace10Difficulty = .text:0x801A9358; // type:function size:0x74 scope:global +SetCatchUp__11GRaceCustomb = .text:0x801A93CC; // type:function size:0x34 scope:global +SetCopsEnabled__11GRaceCustomb = .text:0x801A9400; // type:function size:0x34 scope:global +SetForceHeatLevel__11GRaceCustomi = .text:0x801A9434; // type:function size:0x34 scope:global +__8GRaceBinUi = .text:0x801A9468; // type:function size:0xC8 scope:global +GetCollectionKey__C8GRaceBin = .text:0x801A9530; // type:function size:0x20 scope:global +GetChildVault__C8GRaceBin = .text:0x801A9550; // type:function size:0x8 scope:global +GetBinNumber__C8GRaceBin = .text:0x801A9558; // type:function size:0x40 scope:global +GetBaseOpenWorldHeat__C8GRaceBin = .text:0x801A9598; // type:function size:0x40 scope:global +GetMaxOpenWorldHeat__C8GRaceBin = .text:0x801A95D8; // type:function size:0x40 scope:global +GetScaleOpenWorldHeat__C8GRaceBin = .text:0x801A9618; // type:function size:0x40 scope:global +GetBossRaceCount__C8GRaceBin = .text:0x801A9658; // type:function size:0x54 scope:global +GetBossRaceHash__C8GRaceBinUi = .text:0x801A96AC; // type:function size:0x60 scope:global +GetWorldRaceCount__C8GRaceBin = .text:0x801A970C; // type:function size:0x54 scope:global +GetWorldRaceHash__C8GRaceBinUi = .text:0x801A9760; // type:function size:0x60 scope:global +GetBaselineUnlockCount__C8GRaceBin = .text:0x801A97C0; // type:function size:0x54 scope:global +GetBaselineUnlock__C8GRaceBinUi = .text:0x801A9814; // type:function size:0x40 scope:global +GetBarrierCount__C8GRaceBin = .text:0x801A9854; // type:function size:0x54 scope:global +GetBarrierName__C8GRaceBinUi = .text:0x801A98A8; // type:function size:0x58 scope:global +GetBarrierIsFlipped__C8GRaceBinUi = .text:0x801A9900; // type:function size:0x60 scope:global +EnableBarriers__8GRaceBin = .text:0x801A9960; // type:function size:0x84 scope:global +DisableBarriers__8GRaceBin = .text:0x801A99E4; // type:function size:0x3C scope:global +GetRequiredBounty__C8GRaceBin = .text:0x801A9A20; // type:function size:0x40 scope:global +GetRequiredChallenges__C8GRaceBin = .text:0x801A9A60; // type:function size:0x40 scope:global +GetRequiredRaceWins__C8GRaceBin = .text:0x801A9AA0; // type:function size:0x40 scope:global +GetCompletedChallenges__C8GRaceBin = .text:0x801A9AE0; // type:function size:0x8 scope:global +GetAwardedRaceWins__C8GRaceBin = .text:0x801A9AE8; // type:function size:0x8 scope:global +Serialize__8GRaceBinPUc = .text:0x801A9AF0; // type:function size:0x34 scope:global +Deserialize__8GRaceBinPUc = .text:0x801A9B24; // type:function size:0x2C scope:global +SetCompletedChallenges__8GRaceBini = .text:0x801A9B50; // type:function size:0x8 scope:global +SetRacesWon__8GRaceBini = .text:0x801A9B58; // type:function size:0x8 scope:global +RefreshProgress__8GRaceBin = .text:0x801A9B60; // type:function size:0x15C scope:global +SimulateDDayComplete__13GRaceDatabase = .text:0x801A9CBC; // type:function size:0x4 scope:global +__10GCharacterRCUi = .text:0x801A9CC0; // type:function size:0x158 scope:global +_._10GCharacter = .text:0x801A9E18; // type:function size:0xC8 scope:global +OnAttached__10GCharacterP11IAttachable = .text:0x801A9EE0; // type:function size:0x54 scope:global +OnDetached__10GCharacterP11IAttachable = .text:0x801A9F34; // type:function size:0x118 scope:global +Spawn__10GCharacterRCQ25UMath7Vector3T1P7GMarkerf = .text:0x801AA04C; // type:function size:0xF8 scope:global +SpawnPending__C10GCharacter = .text:0x801AA144; // type:function size:0x18 scope:global +IsSpawned__C10GCharacter = .text:0x801AA15C; // type:function size:0x18 scope:global +ReleaseVehicle__10GCharacter = .text:0x801AA174; // type:function size:0x9C scope:global +Unspawn__10GCharacter = .text:0x801AA210; // type:function size:0x7C scope:global +UnspawnWhenOffscreen__10GCharacter = .text:0x801AA28C; // type:function size:0x98 scope:global +IsNoLongerUseful__C10GCharacter = .text:0x801AA324; // type:function size:0x270 scope:global +AttemptSpawn__10GCharacter = .text:0x801AA594; // type:function size:0x4C0 scope:global +GetSpawnedVehicle__C10GCharacter = .text:0x801AAA54; // type:function size:0x8 scope:global +GetName__C10GCharacter = .text:0x801AAA5C; // type:function size:0x70 scope:global +__6GStateRCUi = .text:0x801AAACC; // type:function size:0x40 scope:global +_._6GState = .text:0x801AAB0C; // type:function size:0x68 scope:global +__8GHandlerRCUi = .text:0x801AAB74; // type:function size:0x48 scope:global +_._8GHandler = .text:0x801AABBC; // type:function size:0x7C scope:global +Attach__8GHandlerP9lua_State = .text:0x801AAC38; // type:function size:0x138 scope:global +Detach__8GHandlerP9lua_State = .text:0x801AAD70; // type:function size:0x64 scope:global +NotifyBytecodeFlushed__8GHandler = .text:0x801AADD4; // type:function size:0xC scope:global +MessagePassesFilters__8GHandlerP22LuaMessageDeliveryInfo = .text:0x801AADE0; // type:function size:0x1C4 scope:global +HandleMessage__8GHandlerP22LuaMessageDeliveryInfo = .text:0x801AAFA4; // type:function size:0x20 scope:global +ExecuteScriptedHandler__8GHandlerP22LuaMessageDeliveryInfo = .text:0x801AAFC4; // type:function size:0xA4 scope:global +Init__8GManagerPCc = .text:0x801AB068; // type:function size:0x44 scope:global +__8GManagerPCc = .text:0x801AB0AC; // type:function size:0x3A8 scope:global +_._8GManager = .text:0x801AB454; // type:function size:0x414 scope:global +InitializeVaults__8GManager = .text:0x801AB868; // type:function size:0x17C scope:global +InitializeRaceStreaming__8GManager = .text:0x801AB9E4; // type:function size:0x84 scope:global +BuildVaultTable__8GManagerP20AttribVaultPackImage = .text:0x801ABA68; // type:function size:0xB0 scope:global +FindVault__8GManagerPCc = .text:0x801ABB18; // type:function size:0x90 scope:global +FindVaultContaining__8GManagerUi = .text:0x801ABBA8; // type:function size:0xE4 scope:global +LoadVaultSync__8GManagerP6GVault = .text:0x801ABC8C; // type:function size:0x148 scope:global +GetAvailableBinSlot__8GManager = .text:0x801ABDD4; // type:function size:0x44 scope:global +GetAvailableRaceSlot__8GManager = .text:0x801ABE18; // type:function size:0x44 scope:global +LoadCoreVault__8GManagerP20AttribVaultPackImage = .text:0x801ABE5C; // type:function size:0x3C scope:global +PreloadTransientVaults__8GManagerP20AttribVaultPackImage = .text:0x801ABE98; // type:function size:0xC8 scope:global +FindKeyReductionShifts__8GManager = .text:0x801ABF60; // type:function size:0x1BC scope:global +FindUniqueKeyShift__8GManagerPUiUiUi = .text:0x801AC11C; // type:function size:0xF4 scope:global +AllocateIcons__8GManager = .text:0x801AC210; // type:function size:0x40 scope:global +ReleaseIcons__8GManager = .text:0x801AC250; // type:function size:0x48 scope:global +AllocateObjectStateStorage__8GManager = .text:0x801AC298; // type:function size:0x48 scope:global +ReleaseObjectStateStorage__8GManager = .text:0x801AC2E0; // type:function size:0xBC scope:global +DefragObjectStateStorage__8GManager = .text:0x801AC39C; // type:function size:0x2D0 scope:global +AllocObjectStateBlock__8GManagerUiUib = .text:0x801AC66C; // type:function size:0x220 scope:global +GetObjectStateBlock__8GManagerUi = .text:0x801AC88C; // type:function size:0xC8 scope:global +ClearObjectStateBlock__8GManagerUi = .text:0x801AC954; // type:function size:0x124 scope:global +ClearAllSessionData__8GManager = .text:0x801ACA78; // type:function size:0x6C scope:global +SaveGameplayData__8GManagerPUcUi = .text:0x801ACAE4; // type:function size:0x2BC scope:global +LoadGameplayData__8GManagerPUcUi = .text:0x801ACDA0; // type:function size:0x35C scope:global +ResetAllGameplayData__8GManager = .text:0x801AD0FC; // type:function size:0xF4 scope:global +AllocateStreamingBuffers__8GManager = .text:0x801AD1F0; // type:function size:0x1D4 scope:global +AllocateInstanceMap__8GManager = .text:0x801AD3C4; // type:function size:0x118 scope:global +ReleaseInstanceMap__8GManager = .text:0x801AD4DC; // type:function size:0x4C scope:global +UnloadCoreVault__8GManager = .text:0x801AD528; // type:function size:0x2C scope:global +UnloadTransientVaults__8GManager = .text:0x801AD554; // type:function size:0x88 scope:global +ReleaseStreamingBuffers__8GManager = .text:0x801AD5DC; // type:function size:0x70 scope:global +DestroyVaults__8GManager = .text:0x801AD64C; // type:function size:0x94 scope:global +BeginGameplay__8GManager = .text:0x801AD6E0; // type:function size:0x14C scope:global +EndGameplay__8GManager = .text:0x801AD82C; // type:function size:0xC8 scope:global +PreBeginGameplay__8GManager = .text:0x801AD8F4; // type:function size:0x74 scope:global +GetInGameplay__C8GManager = .text:0x801AD968; // type:function size:0x8 scope:global +Update__8GManagerf = .text:0x801AD970; // type:function size:0x7C scope:global +GetPlayerPursuitInterfaces__8GManagerRP8IPursuitRP12IPerpetrator = .text:0x801AD9EC; // type:function size:0xD8 scope:global +UpdatePursuit__8GManager = .text:0x801ADAC4; // type:function size:0x2D4 scope:global +UpdateTriggerAvailability__8GManager = .text:0x801ADD98; // type:function size:0xD4 scope:global +UpdateIconVisibility__8GManager = .text:0x801ADE6C; // type:function size:0x210 scope:global +NotifyWorldService__8GManager = .text:0x801AE07C; // type:function size:0x214 scope:global +NotifyCollisionPackLoaded__8GManagerib = .text:0x801AE290; // type:function size:0x5C scope:global +AttachCharacter__8GManagerP10GCharacter = .text:0x801AE2EC; // type:function size:0x170 scope:global +DetachCharacter__8GManagerP10GCharacter = .text:0x801AE45C; // type:function size:0x78 scope:global +UnspawnAllCharacters__8GManager = .text:0x801AE4D4; // type:function size:0x74 scope:global +TrackValue__8GManagerPCcf = .text:0x801AE548; // type:function size:0x1BC scope:global +IncValue__8GManagerPCc = .text:0x801AE704; // type:function size:0xD8 scope:global +GetValue__8GManagerPCc = .text:0x801AE7DC; // type:function size:0x94 scope:global +GetValue__8GManagerUi = .text:0x801AE870; // type:function size:0x70 scope:global +GetBestValue__8GManagerUi = .text:0x801AE8E0; // type:function size:0x70 scope:global +GetIsBiggerValueBetter__8GManagerUi = .text:0x801AE950; // type:function size:0x74 scope:global +OnQueryVehicleCache__C8GManagerPC8IVehiclePC13IVehicleCache = .text:0x801AE9C4; // type:function size:0x26C scope:global +OnRemovedVehicleCache__8GManagerP8IVehicle = .text:0x801AEC30; // type:function size:0x118 scope:global +RegisterInstance__8GManagerP16GRuntimeInstance = .text:0x801AED48; // type:function size:0xCC scope:global +UnregisterInstance__8GManagerP16GRuntimeInstance = .text:0x801AEE14; // type:function size:0x94 scope:global +FindInstance__C8GManagerUi = .text:0x801AEEA8; // type:function size:0x64 scope:global +ConnectRuntimeInstances__8GManager = .text:0x801AEF0C; // type:function size:0x10C scope:global +ConnectInstanceReferences__8GManagerP16GRuntimeInstanceRCQ36Attrib3Gen8gameplay = .text:0x801AF018; // type:function size:0x178 scope:global +ConnectChildren__8GManagerP16GRuntimeInstance = .text:0x801AF190; // type:function size:0xCC scope:global +GetStrippedNameKey__8GManagerPCc = .text:0x801AF25C; // type:function size:0x64 scope:global +ResetMilestoneTrackingInfo__8GManager = .text:0x801AF2C0; // type:function size:0x260 scope:global +LoadMilestoneInfo__8GManagerP17MilestoneTypeInfoUi = .text:0x801AF520; // type:function size:0xE8 scope:global +SaveMilestoneInfo__8GManagerP17MilestoneTypeInfo = .text:0x801AF608; // type:function size:0x98 scope:global +StartActivities__8GManager = .text:0x801AF6A0; // type:function size:0x104 scope:global +StartWorldActivities__8GManagerb = .text:0x801AF7A4; // type:function size:0xE0 scope:global +StartBinActivity__8GManagerP8GRaceBin = .text:0x801AF884; // type:function size:0x54 scope:global +SuspendAllBinActivities__8GManager = .text:0x801AF8D8; // type:function size:0x98 scope:global +StartRaceFromInGame__8GManagerUi = .text:0x801AF970; // type:function size:0xB0 scope:global +CalcMapCoordsForMarker__8GManagerUiR8bVector2Rf = .text:0x801AFA20; // type:function size:0x280 scope:global +WarpToMarker__8GManagerUib = .text:0x801AFCA0; // type:function size:0x148 scope:global +RefreshWorldParticleEffects__8GManager = .text:0x801AFDE8; // type:function size:0x94 scope:global +GetNumMilestones__8GManager = .text:0x801AFE7C; // type:function size:0x8 scope:global +GetMilestone__8GManagerUi = .text:0x801AFE84; // type:function size:0x10 scope:global +GetFirstMilestone__8GManagerbUi = .text:0x801AFE94; // type:function size:0x30 scope:global +GetNextMilestone__8GManagerP10GMilestonebUi = .text:0x801AFEC4; // type:function size:0x68 scope:global +EnableBinMilestones__8GManagerUi = .text:0x801AFF2C; // type:function size:0x64 scope:global +NotifyPursuitStarted__8GManager = .text:0x801AFF90; // type:function size:0x8C scope:global +NotifyPursuitEnded__8GManagerb = .text:0x801B001C; // type:function size:0x90 scope:global +GetNumSpeedTraps__8GManager = .text:0x801B00AC; // type:function size:0x8 scope:global +GetSpeedTrap__8GManagerUi = .text:0x801B00B4; // type:function size:0x10 scope:global +GetFirstSpeedTrap__8GManagerbUi = .text:0x801B00C4; // type:function size:0x30 scope:global +GetNextSpeedTrap__8GManagerP10GSpeedTrapbUi = .text:0x801B00F4; // type:function size:0xB0 scope:global +EnableBinSpeedTraps__8GManagerUi = .text:0x801B01A4; // type:function size:0x6C scope:global +RefreshSpeedTrapIcons__8GManager = .text:0x801B0210; // type:function size:0xA4 scope:global +GatherInstanceKeys__8GManagerRQ36Attrib3Gen8gameplayRQ33UTL3Stdt4list2ZUiZ22_type_ID_AttribKeyListUi = .text:0x801B02B4; // type:function size:0x1C0 scope:global +FindBountySpawnPoints__8GManager = .text:0x801B0474; // type:function size:0x144 scope:global +GetNumBountySpawnMarkers__C8GManager = .text:0x801B05B8; // type:function size:0x8 scope:global +GetBountySpawnMarker__C8GManagerUi = .text:0x801B05C0; // type:function size:0x24 scope:global +GetBountySpawnMarkerTag__C8GManagerUi = .text:0x801B05E4; // type:function size:0xA0 scope:global +NotifyGameZonesChanged__Fv = .text:0x801B0684; // type:function size:0x40 scope:global +NotifyTrackMarkersChanged__Fv = .text:0x801B06C4; // type:function size:0x40 scope:global +RefreshZoneIcons__8GManager = .text:0x801B0704; // type:function size:0xF4 scope:global +AddIconForTrackMarker__8GManagerP19TrackPositionMarkerUi = .text:0x801B07F8; // type:function size:0xA4 scope:global +RefreshTrackMarkerIcons__8GManager = .text:0x801B089C; // type:function size:0x68 scope:global +RefreshEngageTriggerIcons__8GManager = .text:0x801B0904; // type:function size:0xD8 scope:global +HidePursuitBreakerIcon__8GManagerRCQ25UMath7Vector3f = .text:0x801B09DC; // type:function size:0xB4 scope:global +RestorePursuitBreakerIcons__8GManageri = .text:0x801B0A90; // type:function size:0x9C scope:global +AllocIcon__8GManagerQ25GIcon4TypeRCQ25UMath7Vector3fb = .text:0x801B0B2C; // type:function size:0xAC scope:global +FreeDisposableIcons__8GManagerQ25GIcon4Type = .text:0x801B0BD8; // type:function size:0x88 scope:global +FreeIcon__8GManagerP5GIcon = .text:0x801B0C60; // type:function size:0x5C scope:global +FreeIconAt__8GManagerUi = .text:0x801B0CBC; // type:function size:0x11C scope:global +Compare__Q38GManager48GatherVisibleIcons__8GManagerPP5GIconP7IPlayer.0_8IconSortPCvT1.35326 = .text:0x801B0DD8; // type:function size:0x10 scope:local +GatherVisibleIcons__8GManagerPP5GIconP7IPlayer = .text:0x801B0DE8; // type:function size:0x1B8 scope:global +GetIsIconVisible__8GManagerP5GIcon = .text:0x801B0FA0; // type:function size:0x44 scope:global +SpawnAllLoadedSectionIcons__8GManager = .text:0x801B0FE4; // type:function size:0xC0 scope:global +SpawnSectionIcons__8GManageri = .text:0x801B10A4; // type:function size:0x8C scope:global +UnspawnSectionIcons__8GManageri = .text:0x801B1130; // type:function size:0x8C scope:global +UnspawnAllIcons__8GManager = .text:0x801B11BC; // type:function size:0x50 scope:global +FreeAllIcons__8GManager = .text:0x801B120C; // type:function size:0x44 scope:global +AllocateMilestones__8GManager = .text:0x801B1250; // type:function size:0x1AC scope:global +ReleaseMilestones__8GManager = .text:0x801B13FC; // type:function size:0x44 scope:global +ResetMilestones__8GManager = .text:0x801B1440; // type:function size:0x13C scope:global +SaveMilestones__8GManagerP10GMilestone = .text:0x801B157C; // type:function size:0x40 scope:global +LoadMilestones__8GManagerP10GMilestoneUi = .text:0x801B15BC; // type:function size:0x9C scope:global +AllocateSpeedTraps__8GManager = .text:0x801B1658; // type:function size:0x1AC scope:global +ReleaseSpeedTraps__8GManager = .text:0x801B1804; // type:function size:0x44 scope:global +ResetSpeedTraps__8GManager = .text:0x801B1848; // type:function size:0x13C scope:global +SaveSpeedTraps__8GManagerP10GSpeedTrap = .text:0x801B1984; // type:function size:0x40 scope:global +LoadSpeedTraps__8GManagerP10GSpeedTrapUi = .text:0x801B19C4; // type:function size:0x9C scope:global +ServicePendingCharacters__8GManager = .text:0x801B1A60; // type:function size:0x64 scope:global +UnspawnUselessCharacters__8GManager = .text:0x801B1AC4; // type:function size:0x5C scope:global +RecursivePreloadCharacterCars__8GManagerP16GRuntimeInstanceb = .text:0x801B1B20; // type:function size:0x184 scope:global +PreloadStockCarsForActivity__8GManagerP9GActivity = .text:0x801B1CA4; // type:function size:0xA8 scope:global +ReserveStockCar__8GManagerPCc = .text:0x801B1D4C; // type:function size:0x280 scope:global +StockCarsLoaded__8GManager = .text:0x801B1FCC; // type:function size:0xBC scope:global +ClearStockCars__8GManager = .text:0x801B2088; // type:function size:0xC4 scope:global +GetStockCar__8GManagerPCc = .text:0x801B214C; // type:function size:0x108 scope:global +GetRandomEmergencyStockCar__8GManager = .text:0x801B2254; // type:function size:0x360 scope:global +ReleaseStockCar__8GManagerP8ISimable = .text:0x801B25B4; // type:function size:0x158 scope:global +SetTimer__8GManagerPCcf = .text:0x801B270C; // type:function size:0xC8 scope:global +KillTimer__8GManagerPCc = .text:0x801B27D4; // type:function size:0x64 scope:global +ResetTimers__8GManager = .text:0x801B2838; // type:function size:0x48 scope:global +UpdateTimers__8GManagerf = .text:0x801B2880; // type:function size:0x58 scope:global +SaveTimerInfo__8GManagerP14SavedTimerInfo = .text:0x801B28D8; // type:function size:0x58 scope:global +LoadTimerInfo__8GManagerP14SavedTimerInfoUi = .text:0x801B2930; // type:function size:0x60 scope:global +SaveSMSInfo__8GManagerPi = .text:0x801B2990; // type:function size:0x90 scope:global +LoadSMSInfo__8GManagerPiUi = .text:0x801B2A20; // type:function size:0xA0 scope:global +GetHasPendingSMS__C8GManager = .text:0x801B2AC0; // type:function size:0x70 scope:global +CanPlaySMS__C8GManager = .text:0x801B2B30; // type:function size:0x208 scope:global +AddSMS__8GManageri = .text:0x801B2D38; // type:function size:0x124 scope:global +DispatchSMSMessage__8GManageri = .text:0x801B2E5C; // type:function size:0x7C scope:global +UpdatePendingSMS__8GManager = .text:0x801B2ED8; // type:function size:0x118 scope:global +PushSMSToInbox__8GManager = .text:0x801B2FF0; // type:function size:0x140 scope:global +GetRespawnMarker__8GManager = .text:0x801B3130; // type:function size:0x158 scope:global +GetRespawnLocation__8GManagerRQ25UMath7Vector3T1 = .text:0x801B3288; // type:function size:0x248 scope:global +__6GTimer = .text:0x801B34D0; // type:function size:0x38 scope:global +_._6GTimer = .text:0x801B3508; // type:function size:0x28 scope:global +Start__6GTimer = .text:0x801B3530; // type:function size:0x40 scope:global +Stop__6GTimer = .text:0x801B3570; // type:function size:0x38 scope:global +Reset__6GTimerf = .text:0x801B35A8; // type:function size:0x34 scope:global +GetTime__C6GTimer = .text:0x801B35DC; // type:function size:0x50 scope:global +SetTime__6GTimerf = .text:0x801B362C; // type:function size:0x10 scope:global +__11GEventTimer = .text:0x801B363C; // type:function size:0x30 scope:global +_._11GEventTimer = .text:0x801B366C; // type:function size:0x28 scope:global +Reset__11GEventTimer = .text:0x801B3694; // type:function size:0x2C scope:global +Start__11GEventTimer = .text:0x801B36C0; // type:function size:0x18 scope:global +Stop__11GEventTimer = .text:0x801B36D8; // type:function size:0x18 scope:global +SetInterval__11GEventTimerf = .text:0x801B36F0; // type:function size:0x14 scope:global +Update__11GEventTimerf = .text:0x801B3704; // type:function size:0xA4 scope:global +SetName__11GEventTimerPCc = .text:0x801B37A8; // type:function size:0x44 scope:global +Serialize__11GEventTimerP14SavedTimerInfo = .text:0x801B37EC; // type:function size:0x4C scope:global +Deserialize__11GEventTimerP14SavedTimerInfo = .text:0x801B3838; // type:function size:0x64 scope:global +__6GVaultP20AttribVaultPackEntryPCc = .text:0x801B389C; // type:function size:0x6C scope:global +_._6GVault = .text:0x801B3908; // type:function size:0x50 scope:global +LoadResident__6GVaultP20AttribVaultPackImage = .text:0x801B3958; // type:function size:0x11C scope:global +PreloadTransient__6GVaultP20AttribVaultPackImagei = .text:0x801B3A74; // type:function size:0x130 scope:global +InitTransient__6GVaultPUcT1 = .text:0x801B3BA4; // type:function size:0x158 scope:global +CreateGameplayObjects__6GVault = .text:0x801B3CFC; // type:function size:0x54 scope:global +DestroyGameplayObjects__6GVault = .text:0x801B3D50; // type:function size:0x3C scope:global +LoadSyncTransient__6GVault = .text:0x801B3D8C; // type:function size:0x2C scope:global +Unload__6GVault = .text:0x801B3DB8; // type:function size:0x1A0 scope:global +GetName__C6GVault = .text:0x801B3F58; // type:function size:0x8 scope:global +GetAttribVault__C6GVault = .text:0x801B3F60; // type:function size:0x8 scope:global +GetObjectCount__C6GVault = .text:0x801B3F68; // type:function size:0x8 scope:global +GetFootprint__C6GVault = .text:0x801B3F70; // type:function size:0x18 scope:global +GetDataOffset__C6GVault = .text:0x801B3F88; // type:function size:0x8 scope:global +GetDataSize__C6GVault = .text:0x801B3F90; // type:function size:0x8 scope:global +GetLoadDataOffset__C6GVault = .text:0x801B3F98; // type:function size:0x8 scope:global +GetLoadDataSize__C6GVault = .text:0x801B3FA0; // type:function size:0x8 scope:global +IsLoaded__C6GVault = .text:0x801B3FA8; // type:function size:0x18 scope:global +IsResident__C6GVault = .text:0x801B3FC0; // type:function size:0xC scope:global +IsTransient__C6GVault = .text:0x801B3FCC; // type:function size:0x10 scope:global +IsRaceBin__C6GVault = .text:0x801B3FDC; // type:function size:0xC scope:global +SetRaceBin__6GVault = .text:0x801B3FE8; // type:function size:0x10 scope:global +__12GObjectBlockP6GVaultPUc = .text:0x801B3FF8; // type:function size:0x3C scope:global +_._12GObjectBlock = .text:0x801B4034; // type:function size:0x98 scope:global +Initialize__12GObjectBlockUi = .text:0x801B40CC; // type:function size:0x9C scope:global +CalcSpaceRequired__12GObjectBlockP6GVaultPUi = .text:0x801B4168; // type:function size:0xD8 scope:global +CollectionIsInstanceOfTemplate__12GObjectBlockRQ36Attrib3Gen8gameplayT1 = .text:0x801B4240; // type:function size:0xFC scope:global +CalcNumConnections__12GObjectBlockUi = .text:0x801B433C; // type:function size:0x218 scope:global +__18GInfractionManager = .text:0x801B4554; // type:function size:0x20 scope:global +Init__18GInfractionManager = .text:0x801B4574; // type:function size:0x38 scope:global +PursuitStarted__18GInfractionManager = .text:0x801B45AC; // type:function size:0x1C scope:global +ReportInfraction__18GInfractionManagerQ218GInfractionManager14InfractionType = .text:0x801B45C8; // type:function size:0xFC scope:global +GetNumInfractions__18GInfractionManager = .text:0x801B46C4; // type:function size:0x28 scope:global +DidInfractionOccur__18GInfractionManagerQ218GInfractionManager14InfractionType = .text:0x801B46EC; // type:function size:0x18 scope:global +__10GMilestone = .text:0x801B4704; // type:function size:0x30 scope:global +GetCurrentValue__C10GMilestone = .text:0x801B4734; // type:function size:0x2C scope:global +GetBounty__C10GMilestone = .text:0x801B4760; // type:function size:0xFC scope:global +GetLocalizationTag__C10GMilestone = .text:0x801B485C; // type:function size:0xCC scope:global +GetJumpMarkerKey__C10GMilestone = .text:0x801B4928; // type:function size:0x9C scope:global +Init__10GMilestoneUi = .text:0x801B49C4; // type:function size:0x24 scope:global +Reset__10GMilestone = .text:0x801B49E8; // type:function size:0x134 scope:global +Unlock__10GMilestone = .text:0x801B4B1C; // type:function size:0x18 scope:global +ValueMeetsGoal__10GMilestonef = .text:0x801B4B34; // type:function size:0x38 scope:global +NotifyProgress__10GMilestonef = .text:0x801B4B6C; // type:function size:0x58 scope:global +NotifyPursuitOver__10GMilestoneb = .text:0x801B4BC4; // type:function size:0x1A4 scope:global +__10GSpeedTrap = .text:0x801B4D68; // type:function size:0x30 scope:global +GetBounty__C10GSpeedTrap = .text:0x801B4D98; // type:function size:0xFC scope:global +GetTrapTrigger__C10GSpeedTrap = .text:0x801B4E94; // type:function size:0x38 scope:global +GetJumpMarkerKey__C10GSpeedTrap = .text:0x801B4ECC; // type:function size:0x9C scope:global +Init__10GSpeedTrapUi = .text:0x801B4F68; // type:function size:0x24 scope:global +Reset__10GSpeedTrap = .text:0x801B4F8C; // type:function size:0x118 scope:global +Unlock__10GSpeedTrap = .text:0x801B50A4; // type:function size:0x10 scope:global +Activate__10GSpeedTrap = .text:0x801B50B4; // type:function size:0x10 scope:global +NotifyTriggered__10GSpeedTrapf = .text:0x801B50C4; // type:function size:0x78 scope:global +__5GIconQ25GIcon4TypeRCQ25UMath7Vector3f = .text:0x801B513C; // type:function size:0xC0 scope:global +_._5GIcon = .text:0x801B51FC; // type:function size:0xA0 scope:global +Spawn__5GIcon = .text:0x801B529C; // type:function size:0xE8 scope:global +Unspawn__5GIcon = .text:0x801B5384; // type:function size:0x70 scope:global +FindSection__5GIcon = .text:0x801B53F4; // type:function size:0x98 scope:global +SnapToGround__5GIcon = .text:0x801B548C; // type:function size:0xF4 scope:global +NotifyEmitterGroupDelete__5GIconPvP12EmitterGroup = .text:0x801B5580; // type:function size:0x18 scope:global +CreateParticleEffect__5GIconUi = .text:0x801B5598; // type:function size:0x84 scope:global +ReleaseParticleEffect__5GIcon = .text:0x801B561C; // type:function size:0x44 scope:global +RefreshEffects__5GIcon = .text:0x801B5660; // type:function size:0x5C scope:global +CreateGeometry__5GIconUi = .text:0x801B56BC; // type:function size:0x58 scope:global +ReleaseGeometry__5GIcon = .text:0x801B5714; // type:function size:0x44 scope:global +SetPosition__5GIcon = .text:0x801B5758; // type:function size:0x114 scope:global +Enable__5GIcon = .text:0x801B586C; // type:function size:0x84 scope:global +Disable__5GIcon = .text:0x801B58F0; // type:function size:0x58 scope:global +__less__H1ZQ216GRuntimeInstance17ConnectedInstance_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x801B5948; // type:function size:0xC scope:global +__adjust_heap__H4ZPQ216GRuntimeInstance17ConnectedInstanceZiZQ216GRuntimeInstance17ConnectedInstanceZQ24_STLt4less1ZQ216GRuntimeInstance17ConnectedInstance_4_STLX01X11X11X21X31_v = .text:0x801B5954; // type:function size:0x11C scope:global +make_heap__H2ZPQ216GRuntimeInstance17ConnectedInstanceZQ24_STLt4less1ZQ216GRuntimeInstance17ConnectedInstance_4_STLX01X01X11_v = .text:0x801B5A70; // type:function size:0x90 scope:global +pop_heap__H2ZPQ216GRuntimeInstance17ConnectedInstanceZQ24_STLt4less1ZQ216GRuntimeInstance17ConnectedInstance_4_STLX01X01X11_v = .text:0x801B5B00; // type:function size:0x60 scope:global +__partial_sort__H3ZPQ216GRuntimeInstance17ConnectedInstanceZQ216GRuntimeInstance17ConnectedInstanceZQ24_STLt4less1ZQ216GRuntimeInstance17ConnectedInstance_4_STLX01X01X01PX11X21_v = .text:0x801B5B60; // type:function size:0xD8 scope:global +partial_sort__H2ZPQ216GRuntimeInstance17ConnectedInstanceZQ24_STLt4less1ZQ216GRuntimeInstance17ConnectedInstance_4_STLX01X01X01X11_v = .text:0x801B5C38; // type:function size:0x30 scope:global +__unguarded_partition__H3ZPQ216GRuntimeInstance17ConnectedInstanceZQ216GRuntimeInstance17ConnectedInstanceZQ24_STLt4less1ZQ216GRuntimeInstance17ConnectedInstance_4_STLX01X01X11X21_X01 = .text:0x801B5C68; // type:function size:0x6C scope:global +__introsort_loop__H4ZPQ216GRuntimeInstance17ConnectedInstanceZQ216GRuntimeInstance17ConnectedInstanceZiZQ24_STLt4less1ZQ216GRuntimeInstance17ConnectedInstance_4_STLX01X01PX11X21X31_v = .text:0x801B5CD4; // type:function size:0x134 scope:global +__unguarded_linear_insert__H3ZPQ216GRuntimeInstance17ConnectedInstanceZQ216GRuntimeInstance17ConnectedInstanceZQ24_STLt4less1ZQ216GRuntimeInstance17ConnectedInstance_4_STLX01X11X21_v = .text:0x801B5E08; // type:function size:0x44 scope:global +__insertion_sort__H2ZPQ216GRuntimeInstance17ConnectedInstanceZQ24_STLt4less1ZQ216GRuntimeInstance17ConnectedInstance_4_STLX01X01X11_v = .text:0x801B5E4C; // type:function size:0xC0 scope:global +__unguarded_insertion_sort_aux__H3ZPQ216GRuntimeInstance17ConnectedInstanceZQ216GRuntimeInstance17ConnectedInstanceZQ24_STLt4less1ZQ216GRuntimeInstance17ConnectedInstance_4_STLX01X01PX11X21_v = .text:0x801B5F0C; // type:function size:0x68 scope:global +__final_insertion_sort__H2ZPQ216GRuntimeInstance17ConnectedInstanceZQ24_STLt4less1ZQ216GRuntimeInstance17ConnectedInstance_4_STLX01X01X11_v = .text:0x801B5F74; // type:function size:0x7C scope:global +sort__H1ZPQ216GRuntimeInstance17ConnectedInstance_4_STLX01X01_v = .text:0x801B5FF0; // type:function size:0xA0 scope:global +reserve__Q24_STLt6vector2ZP8ISimableZQ33UTL3Stdt9Allocator2ZP8ISimableZ19_type_ID_SimObjListUi = .text:0x801B6090; // type:function size:0x11C scope:global +_M_erase__Q24_STLt8_Rb_tree5ZP6GStateZQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZQ24_STLt4less1ZP6GStateZQ33UTL3Stdt9Allocator2ZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZ23_type_ID_StateToVectorsPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVector = .text:0x801B61AC; // type:function size:0x90 scope:global +Advance__t15GObjectIterator1Z6GState = .text:0x801B623C; // type:function size:0x44 scope:global +__t15GObjectIterator1Z6GStateUi = .text:0x801B6280; // type:function size:0x5C scope:global +_M_insert__Q24_STLt8_Rb_tree5ZP6GStateZQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZQ24_STLt4less1ZP6GStateZQ33UTL3Stdt9Allocator2ZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZ23_type_ID_StateToVectorsPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorT1 = .text:0x801B62DC; // type:function size:0x144 scope:global +insert_unique__Q24_STLt8_Rb_tree5ZP6GStateZQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZQ24_STLt4less1ZP6GStateZQ33UTL3Stdt9Allocator2ZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZ23_type_ID_StateToVectorsRCQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVector = .text:0x801B6420; // type:function size:0x118 scope:global +insert_unique__Q24_STLt8_Rb_tree5ZP6GStateZQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZQ24_STLt4less1ZP6GStateZQ33UTL3Stdt9Allocator2ZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZ23_type_ID_StateToVectorsGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorRCQ24_STLt4pair2ZCP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVector = .text:0x801B6538; // type:function size:0x26C scope:global +reserve__Q24_STLt6vector2ZP8GHandlerZQ33UTL3Stdt9Allocator2ZP8GHandlerZ23_type_ID_GHandlerVectorUi = .text:0x801B67A4; // type:function size:0x11C scope:global +Advance__t15GObjectIterator1Z8GHandler = .text:0x801B68C0; // type:function size:0x44 scope:global +__t15GObjectIterator1Z8GHandlerUi = .text:0x801B6904; // type:function size:0x5C scope:global +FindObject__H1Z8GTrigger_16GRuntimeInstanceUi_PX01 = .text:0x801B6960; // type:function size:0x70 scope:global +find__H2ZPCP7IPlayerZPC7IPlayer_4_STLX01X01RCX11_X01 = .text:0x801B69D0; // type:function size:0xB0 scope:global +Advance__t15GObjectIterator1Z8GTrigger = .text:0x801B6A80; // type:function size:0x44 scope:global +__t15GObjectIterator1Z8GTriggerUi = .text:0x801B6AC4; // type:function size:0x5C scope:global +_M_erase__Q24_STLt8_Rb_tree5Z11PathSegmentZ11PathSegmentZQ24_STLt9_Identity1Z11PathSegmentZQ24_STLt4less1Z11PathSegmentZQ33UTL3Stdt9Allocator2Z11PathSegmentZ17_type_ID_PATH_SETPQ24_STLt13_Rb_tree_node1Z11PathSegment = .text:0x801B6B20; // type:function size:0x74 scope:global +_M_erase__Q24_STLt8_Rb_tree5ZsZsZQ24_STLt9_Identity1ZsZQ24_STLt4less1ZsZQ33UTL3Stdt9Allocator2ZsZ17_type_ID_ROAD_SETPQ24_STLt13_Rb_tree_node1Zs = .text:0x801B6B94; // type:function size:0x68 scope:global +_M_insert__Q24_STLt8_Rb_tree5ZsZsZQ24_STLt9_Identity1ZsZQ24_STLt4less1ZsZQ33UTL3Stdt9Allocator2ZsZ17_type_ID_ROAD_SETPQ24_STL18_Rb_tree_node_baseT1RCsT1 = .text:0x801B6BFC; // type:function size:0x12C scope:global +insert_unique__Q24_STLt8_Rb_tree5ZsZsZQ24_STLt9_Identity1ZsZQ24_STLt4less1ZsZQ33UTL3Stdt9Allocator2ZsZ17_type_ID_ROAD_SETRCs = .text:0x801B6D28; // type:function size:0x118 scope:global +_M_copy__Q24_STLt8_Rb_tree5ZsZsZQ24_STLt9_Identity1ZsZQ24_STLt4less1ZsZQ33UTL3Stdt9Allocator2ZsZ17_type_ID_ROAD_SETPQ24_STLt13_Rb_tree_node1ZsT1 = .text:0x801B6E40; // type:function size:0x110 scope:global +__Q33UTL3Stdt3set2ZsZ17_type_ID_ROAD_SETRCQ33UTL3Stdt3set2ZsZ17_type_ID_ROAD_SET = .text:0x801B6F50; // type:function size:0xFC scope:global +_M_insert__Q24_STLt8_Rb_tree5Z11PathSegmentZ11PathSegmentZQ24_STLt9_Identity1Z11PathSegmentZQ24_STLt4less1Z11PathSegmentZQ33UTL3Stdt9Allocator2Z11PathSegmentZ17_type_ID_PATH_SETPQ24_STL18_Rb_tree_node_baseT1RC11PathSegmentT1 = .text:0x801B704C; // type:function size:0x148 scope:global +insert_unique__Q24_STLt8_Rb_tree5Z11PathSegmentZ11PathSegmentZQ24_STLt9_Identity1Z11PathSegmentZQ24_STLt4less1Z11PathSegmentZQ33UTL3Stdt9Allocator2Z11PathSegmentZ17_type_ID_PATH_SETRC11PathSegment = .text:0x801B7194; // type:function size:0x11C scope:global +__less__H1Zs_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x801B72B0; // type:function size:0xC scope:global +insert_unique__Q24_STLt8_Rb_tree5ZsZsZQ24_STLt9_Identity1ZsZQ24_STLt4less1ZsZQ33UTL3Stdt9Allocator2ZsZ17_type_ID_ROAD_SETGQ24_STLt17_Rb_tree_iterator2ZsZQ24_STLt16_Nonconst_traits1ZsRCs = .text:0x801B72BC; // type:function size:0x260 scope:global +__set_difference__H4ZQ24_STLt17_Rb_tree_iterator2ZsZQ24_STLt13_Const_traits1ZsZQ24_STLt17_Rb_tree_iterator2ZsZQ24_STLt13_Const_traits1ZsZQ24_STLt15insert_iterator1ZQ33UTL3Stdt3set2ZsZ17_type_ID_ROAD_SETZQ24_STLt4less1Zs_4_STLX01X01X11X11X21X31_X21 = .text:0x801B751C; // type:function size:0x19C scope:global +set_difference__H3ZQ24_STLt17_Rb_tree_iterator2ZsZQ24_STLt13_Const_traits1ZsZQ24_STLt17_Rb_tree_iterator2ZsZQ24_STLt13_Const_traits1ZsZQ24_STLt15insert_iterator1ZQ33UTL3Stdt3set2ZsZ17_type_ID_ROAD_SET_4_STLX01X01X11X11X21_X21 = .text:0x801B76B8; // type:function size:0x9C scope:global +FindObject__H1Z9GActivity_16GRuntimeInstanceUi_PX01 = .text:0x801B7754; // type:function size:0x6C scope:global +FindObject__H1Z10GCharacter_16GRuntimeInstanceUi_PX01 = .text:0x801B77C0; // type:function size:0x70 scope:global +FindObject__H1Z7GMarker_16GRuntimeInstanceUi_PX01 = .text:0x801B7830; // type:function size:0x70 scope:global +SetAttribute__H1Zi_11GRaceCustomUiRCX01Ui_v = .text:0x801B78A0; // type:function size:0xD8 scope:global +SetAttribute__H1Zb_11GRaceCustomUiRCX01Ui_v = .text:0x801B7978; // type:function size:0xD8 scope:global +_M_erase__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP8ISimableZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP8ISimableZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP8ISimableZ20_type_ID_StockCarMapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCUiZP8ISimable = .text:0x801B7A50; // type:function size:0x68 scope:global +_M_erase__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZ17MilestoneTypeInfoZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZ17MilestoneTypeInfoZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2Z17MilestoneTypeInfoZ25_type_ID_MilestoneInfoMapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCUiZ17MilestoneTypeInfo = .text:0x801B7AB8; // type:function size:0x68 scope:global +_M_erase__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeaderZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeaderZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP22ObjectStateBlockHeaderZ23_type_ID_ObjectStateMapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeader = .text:0x801B7B20; // type:function size:0x68 scope:global +clear__Q24_STLt10_List_base2ZiZQ33UTL3Stdt9Allocator2ZiZ23_type_ID_PendingSMSList = .text:0x801B7B88; // type:function size:0x78 scope:global +reserve__Q24_STLt6vector2ZP10GCharacterZQ33UTL3Stdt9Allocator2ZP10GCharacterZ23_type_ID_GCharacterListUi = .text:0x801B7C00; // type:function size:0x11C scope:global +__less__H1ZUi_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x801B7D1C; // type:function size:0xC scope:global +__adjust_heap__H4ZPUiZiZUiZQ24_STLt4less1ZUi_4_STLX01X11X11X21X31_v = .text:0x801B7D28; // type:function size:0xCC scope:global +make_heap__H2ZPUiZQ24_STLt4less1ZUi_4_STLX01X01X11_v = .text:0x801B7DF4; // type:function size:0x7C scope:global +pop_heap__H2ZPUiZQ24_STLt4less1ZUi_4_STLX01X01X11_v = .text:0x801B7E70; // type:function size:0x48 scope:global +__partial_sort__H3ZPUiZUiZQ24_STLt4less1ZUi_4_STLX01X01X01PX11X21_v = .text:0x801B7EB8; // type:function size:0xB8 scope:global +partial_sort__H2ZPUiZQ24_STLt4less1ZUi_4_STLX01X01X01X11_v = .text:0x801B7F70; // type:function size:0x30 scope:global +__unguarded_partition__H3ZPUiZUiZQ24_STLt4less1ZUi_4_STLX01X01X11X21_X01 = .text:0x801B7FA0; // type:function size:0x50 scope:global +__introsort_loop__H4ZPUiZUiZiZQ24_STLt4less1ZUi_4_STLX01X01PX11X21X31_v = .text:0x801B7FF0; // type:function size:0x124 scope:global +__unguarded_linear_insert__H3ZPUiZUiZQ24_STLt4less1ZUi_4_STLX01X11X21_v = .text:0x801B8114; // type:function size:0x28 scope:global +__insertion_sort__H2ZPUiZQ24_STLt4less1ZUi_4_STLX01X01X11_v = .text:0x801B813C; // type:function size:0x9C scope:global +__unguarded_insertion_sort_aux__H3ZPUiZUiZQ24_STLt4less1ZUi_4_STLX01X01PX11X21_v = .text:0x801B81D8; // type:function size:0x58 scope:global +__final_insertion_sort__H2ZPUiZQ24_STLt4less1ZUi_4_STLX01X01X11_v = .text:0x801B8230; // type:function size:0x7C scope:global +sort__H1ZPUi_4_STLX01X01_v = .text:0x801B82AC; // type:function size:0xA0 scope:global +__equal_to__H1ZUi_4_STLPX01_Q24_STLt8equal_to1ZX01 = .text:0x801B834C; // type:function size:0xC scope:global +unique_copy__H2ZPUiZPUi_4_STLX01X01X11_X11 = .text:0x801B8358; // type:function size:0x88 scope:global +__less__H1ZP22ObjectStateBlockHeader_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x801B83E0; // type:function size:0xC scope:global +__adjust_heap__H4ZPP22ObjectStateBlockHeaderZiZP22ObjectStateBlockHeaderZQ24_STLt4less1ZP22ObjectStateBlockHeader_4_STLX01X11X11X21X31_v = .text:0x801B83EC; // type:function size:0xCC scope:global +make_heap__H2ZPP22ObjectStateBlockHeaderZQ24_STLt4less1ZP22ObjectStateBlockHeader_4_STLX01X01X11_v = .text:0x801B84B8; // type:function size:0x7C scope:global +pop_heap__H2ZPP22ObjectStateBlockHeaderZQ24_STLt4less1ZP22ObjectStateBlockHeader_4_STLX01X01X11_v = .text:0x801B8534; // type:function size:0x48 scope:global +__partial_sort__H3ZPP22ObjectStateBlockHeaderZP22ObjectStateBlockHeaderZQ24_STLt4less1ZP22ObjectStateBlockHeader_4_STLX01X01X01PX11X21_v = .text:0x801B857C; // type:function size:0xB8 scope:global +partial_sort__H2ZPP22ObjectStateBlockHeaderZQ24_STLt4less1ZP22ObjectStateBlockHeader_4_STLX01X01X01X11_v = .text:0x801B8634; // type:function size:0x30 scope:global +__unguarded_partition__H3ZPP22ObjectStateBlockHeaderZP22ObjectStateBlockHeaderZQ24_STLt4less1ZP22ObjectStateBlockHeader_4_STLX01X01X11X21_X01 = .text:0x801B8664; // type:function size:0x50 scope:global +__introsort_loop__H4ZPP22ObjectStateBlockHeaderZP22ObjectStateBlockHeaderZiZQ24_STLt4less1ZP22ObjectStateBlockHeader_4_STLX01X01PX11X21X31_v = .text:0x801B86B4; // type:function size:0x124 scope:global +__unguarded_linear_insert__H3ZPP22ObjectStateBlockHeaderZP22ObjectStateBlockHeaderZQ24_STLt4less1ZP22ObjectStateBlockHeader_4_STLX01X11X21_v = .text:0x801B87D8; // type:function size:0x28 scope:global +__insertion_sort__H2ZPP22ObjectStateBlockHeaderZQ24_STLt4less1ZP22ObjectStateBlockHeader_4_STLX01X01X11_v = .text:0x801B8800; // type:function size:0x9C scope:global +__unguarded_insertion_sort_aux__H3ZPP22ObjectStateBlockHeaderZP22ObjectStateBlockHeaderZQ24_STLt4less1ZP22ObjectStateBlockHeader_4_STLX01X01PX11X21_v = .text:0x801B889C; // type:function size:0x58 scope:global +__final_insertion_sort__H2ZPP22ObjectStateBlockHeaderZQ24_STLt4less1ZP22ObjectStateBlockHeader_4_STLX01X01X11_v = .text:0x801B88F4; // type:function size:0x7C scope:global +sort__H1ZPP22ObjectStateBlockHeader_4_STLX01X01_v = .text:0x801B8970; // type:function size:0xA0 scope:global +_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeaderZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeaderZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP22ObjectStateBlockHeaderZ23_type_ID_ObjectStateMapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeaderT1 = .text:0x801B8A10; // type:function size:0x13C scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeaderZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeaderZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP22ObjectStateBlockHeaderZ23_type_ID_ObjectStateMapRCQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeader = .text:0x801B8B4C; // type:function size:0x118 scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeaderZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeaderZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP22ObjectStateBlockHeaderZ23_type_ID_ObjectStateMapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeaderZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeaderRCQ24_STLt4pair2ZCUiZP22ObjectStateBlockHeader = .text:0x801B8C64; // type:function size:0x26C scope:global +_Rebalance_for_erase__Q24_STLt10_Rb_global1ZbPQ24_STL18_Rb_tree_node_baseRPQ24_STL18_Rb_tree_node_baseN22 = .text:0x801B8ED0; // type:function size:0x3F4 scope:global +Advance__t15GObjectIterator1Z9GActivity = .text:0x801B92C4; // type:function size:0x44 scope:global +__t15GObjectIterator1Z9GActivityUi = .text:0x801B9308; // type:function size:0x5C scope:global +find__H2ZPP10GCharacterZP10GCharacter_4_STLX01X01RCX11_X01 = .text:0x801B9364; // type:function size:0xB0 scope:global +Get__H1Z14GCollectionKey_CQ26Attrib9AttributeUi_RCX01 = .text:0x801B9414; // type:function size:0x50 scope:global +_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZ17MilestoneTypeInfoZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZ17MilestoneTypeInfoZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2Z17MilestoneTypeInfoZ25_type_ID_MilestoneInfoMapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZ17MilestoneTypeInfoT1 = .text:0x801B9464; // type:function size:0x17C scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZ17MilestoneTypeInfoZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZ17MilestoneTypeInfoZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2Z17MilestoneTypeInfoZ25_type_ID_MilestoneInfoMapRCQ24_STLt4pair2ZCUiZ17MilestoneTypeInfo = .text:0x801B95E0; // type:function size:0x118 scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZ17MilestoneTypeInfoZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZ17MilestoneTypeInfoZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2Z17MilestoneTypeInfoZ25_type_ID_MilestoneInfoMapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZ17MilestoneTypeInfoZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZ17MilestoneTypeInfoRCQ24_STLt4pair2ZCUiZ17MilestoneTypeInfo = .text:0x801B96F8; // type:function size:0x26C scope:global +clear__Q24_STLt10_List_base2ZUiZQ33UTL3Stdt9Allocator2ZUiZ22_type_ID_AttribKeyList = .text:0x801B9964; // type:function size:0x78 scope:global +_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP8ISimableZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP8ISimableZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP8ISimableZ20_type_ID_StockCarMapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZP8ISimableT1 = .text:0x801B99DC; // type:function size:0x13C scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP8ISimableZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP8ISimableZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP8ISimableZ20_type_ID_StockCarMapRCQ24_STLt4pair2ZCUiZP8ISimable = .text:0x801B9B18; // type:function size:0x118 scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP8ISimableZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP8ISimableZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP8ISimableZ20_type_ID_StockCarMapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZP8ISimableZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZP8ISimableRCQ24_STLt4pair2ZCUiZP8ISimable = .text:0x801B9C30; // type:function size:0x26C scope:global +reserve__Q24_STLt6vector2ZQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZP8ISimableZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZP8ISimableZQ33UTL3Stdt9Allocator2ZQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZP8ISimableZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZP8ISimableZ12_type_vectorUi = .text:0x801B9E9C; // type:function size:0x154 scope:global +GetPaddedObjectSize__H1Z8GTrigger_v_Ui = .text:0x801B9FF0; // type:function size:0x8 scope:local +DeleteObjects__H1Z8GTrigger_12GObjectBlock_v = .text:0x801B9FF8; // type:function size:0xA8 scope:global +GetPaddedObjectSize__H1Z7GMarker_v_Ui = .text:0x801BA0A0; // type:function size:0x8 scope:local +DeleteObjects__H1Z7GMarker_12GObjectBlock_v = .text:0x801BA0A8; // type:function size:0xA8 scope:global +GetPaddedObjectSize__H1Z10GCharacter_v_Ui = .text:0x801BA150; // type:function size:0x8 scope:local +DeleteObjects__H1Z10GCharacter_12GObjectBlock_v = .text:0x801BA158; // type:function size:0xA8 scope:global +GetPaddedObjectSize__H1Z9GActivity_v_Ui = .text:0x801BA200; // type:function size:0x8 scope:local +DeleteObjects__H1Z9GActivity_12GObjectBlock_v = .text:0x801BA208; // type:function size:0xA8 scope:global +GetPaddedObjectSize__H1Z6GState_v_Ui = .text:0x801BA2B0; // type:function size:0x8 scope:local +DeleteObjects__H1Z6GState_12GObjectBlock_v = .text:0x801BA2B8; // type:function size:0xA8 scope:global +GetPaddedObjectSize__H1Z8GHandler_v_Ui = .text:0x801BA360; // type:function size:0x8 scope:local +DeleteObjects__H1Z8GHandler_12GObjectBlock_v = .text:0x801BA368; // type:function size:0xA8 scope:global +FindInstances__H1Z8GHandler_P6GVaultPQ33UTL3Stdt4list2ZUiZ22_type_ID_AttribKeyListPUiT2_Ui = .text:0x801BA410; // type:function size:0x204 scope:local +CreateObjects__H1Z8GHandler_12GObjectBlockP6GVaultPUc_Ui = .text:0x801BA614; // type:function size:0x19C scope:global +FindInstances__H1Z6GState_P6GVaultPQ33UTL3Stdt4list2ZUiZ22_type_ID_AttribKeyListPUiT2_Ui = .text:0x801BA7B0; // type:function size:0x204 scope:local +CreateObjects__H1Z6GState_12GObjectBlockP6GVaultPUc_Ui = .text:0x801BA9B4; // type:function size:0x19C scope:global +FindInstances__H1Z9GActivity_P6GVaultPQ33UTL3Stdt4list2ZUiZ22_type_ID_AttribKeyListPUiT2_Ui = .text:0x801BAB50; // type:function size:0x204 scope:local +CreateObjects__H1Z9GActivity_12GObjectBlockP6GVaultPUc_Ui = .text:0x801BAD54; // type:function size:0x198 scope:global +FindInstances__H1Z10GCharacter_P6GVaultPQ33UTL3Stdt4list2ZUiZ22_type_ID_AttribKeyListPUiT2_Ui = .text:0x801BAEEC; // type:function size:0x204 scope:local +CreateObjects__H1Z10GCharacter_12GObjectBlockP6GVaultPUc_Ui = .text:0x801BB0F0; // type:function size:0x19C scope:global +FindInstances__H1Z7GMarker_P6GVaultPQ33UTL3Stdt4list2ZUiZ22_type_ID_AttribKeyListPUiT2_Ui = .text:0x801BB28C; // type:function size:0x204 scope:local +CreateObjects__H1Z7GMarker_12GObjectBlockP6GVaultPUc_Ui = .text:0x801BB490; // type:function size:0x19C scope:global +FindInstances__H1Z8GTrigger_P6GVaultPQ33UTL3Stdt4list2ZUiZ22_type_ID_AttribKeyListPUiT2_Ui = .text:0x801BB62C; // type:function size:0x204 scope:local +CreateObjects__H1Z8GTrigger_12GObjectBlockP6GVaultPUc_Ui = .text:0x801BB830; // type:function size:0x19C scope:global +__static_initialization_and_destruction_0 = .text:0x801BB9CC; // type:function size:0x12C scope:local +ClassKey__Q36Attrib3Gen8gameplay = .text:0x801BBAF8; // type:function size:0xC scope:global +ClassKey__Q36Attrib3Gen14milestonetypes = .text:0x801BBB04; // type:function size:0xC scope:global +__Q33UTL3Stdt3map3ZUiZP8ISimableZ20_type_ID_StockCarMap = .text:0x801BBB10; // type:function size:0x74 scope:global +__Q33UTL3Stdt3map3ZUiZ17MilestoneTypeInfoZ25_type_ID_MilestoneInfoMap = .text:0x801BBB84; // type:function size:0x74 scope:global +__Q33UTL3Stdt3map3ZUiZP22ObjectStateBlockHeaderZ23_type_ID_ObjectStateMap = .text:0x801BBBF8; // type:function size:0x74 scope:global +GetCacheName__C8GManager = .text:0x801BBC6C; // type:function size:0xC scope:global +GetType__C7GMarker = .text:0x801BBC78; // type:function size:0x8 scope:global +GetType__C8GTrigger = .text:0x801BBC80; // type:function size:0x8 scope:global +_IHandle__21IMessageFilterContext = .text:0x801BBC88; // type:function size:0xC scope:global +_._22LuaMessageDeliveryInfo = .text:0x801BBC94; // type:function size:0x90 scope:global +GetLuaState__C22LuaMessageDeliveryInfo = .text:0x801BBD24; // type:function size:0x8 scope:global +GetActivity__C22LuaMessageDeliveryInfo = .text:0x801BBD2C; // type:function size:0x8 scope:global +GetHandler__C22LuaMessageDeliveryInfo = .text:0x801BBD34; // type:function size:0x8 scope:global +GetMessage__C22LuaMessageDeliveryInfo = .text:0x801BBD3C; // type:function size:0x8 scope:global +_GetKind__13MTriggerEnter = .text:0x801BBD44; // type:function size:0x64 scope:global +_GetKind__12MTriggerExit = .text:0x801BBDA8; // type:function size:0x64 scope:global +_GetKind__14MTriggerInside = .text:0x801BBE0C; // type:function size:0x64 scope:global +__Q33UTL3Stdt3map3ZP6GStateZQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorZ23_type_ID_StateToVectors = .text:0x801BBE70; // type:function size:0x74 scope:global +GetType__C9GActivity = .text:0x801BBEE4; // type:function size:0x8 scope:global +ClearAll__10GRacerInfo = .text:0x801BBEEC; // type:function size:0x1D8 scope:global +SetIsLoading__11GRaceStatusb = .text:0x801BC0C4; // type:function size:0x8 scope:global +EnterSuddenDeath__11GRaceStatus = .text:0x801BC0CC; // type:function size:0xC scope:global +SetTaskTime__11GRaceStatusf = .text:0x801BC0D8; // type:function size:0x8 scope:global +SetActivelyRacing__11GRaceStatusb = .text:0x801BC0E0; // type:function size:0x8 scope:global +SetHasBeenWon__11GRaceStatusb = .text:0x801BC0E8; // type:function size:0x8 scope:global +GetCacheName__C11GRaceStatus = .text:0x801BC0F0; // type:function size:0xC scope:global +GetType__C6GState = .text:0x801BC0FC; // type:function size:0x8 scope:global +_GetKind__11MStateEnter = .text:0x801BC104; // type:function size:0x64 scope:global +_GetKind__10MStateExit = .text:0x801BC168; // type:function size:0x64 scope:global +GetType__C8GHandler = .text:0x801BC1CC; // type:function size:0x8 scope:global +__Q33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVectorRCQ33UTL3Stdt6vector2ZP8GHandlerZ23_type_ID_GHandlerVector = .text:0x801BC1D4; // type:function size:0xAC scope:global +GetType__C10GCharacter = .text:0x801BC280; // type:function size:0x8 scope:global +Attach__10GCharacterPQ33UTL3COM8IUnknown = .text:0x801BC288; // type:function size:0x24 scope:global +Detach__10GCharacterPQ33UTL3COM8IUnknown = .text:0x801BC2AC; // type:function size:0x24 scope:global +IsAttached__C10GCharacterPCQ33UTL3COM8IUnknown = .text:0x801BC2D0; // type:function size:0x24 scope:global +GetAttachments__C10GCharacter = .text:0x801BC2F4; // type:function size:0x8 scope:global +IsFlagSet__C10GCharacterUs = .text:0x801BC2FC; // type:function size:0x18 scope:global +_GetKind__15MNotifyRaceTime = .text:0x801BC314; // type:function size:0x64 scope:global +_GetKind__22MNotifyRaceTimeSecTick = .text:0x801BC378; // type:function size:0x64 scope:global +_GetKind__22MNotifyRaceTimeExpired = .text:0x801BC3DC; // type:function size:0x64 scope:global +_GetKind__16MLoadingComplete = .text:0x801BC440; // type:function size:0x64 scope:global +_IHandle__8IAudible = .text:0x801BC4A4; // type:function size:0xC scope:global +__Q33UTL3Stdt3set2ZsZ17_type_ID_ROAD_SET = .text:0x801BC4B0; // type:function size:0x74 scope:global +_._11PathSegment = .text:0x801BC524; // type:function size:0x9C scope:global +__Q33UTL3Stdt3set2Z11PathSegmentZ17_type_ID_PATH_SET = .text:0x801BC5C0; // type:function size:0x74 scope:global +EnsureLoaded__C15GRaceParameters = .text:0x801BC634; // type:function size:0x68 scope:global +GetNormalizedLower__t13FloatingPoint5Zsi10i3i5i11 = .text:0x801BC69C; // type:function size:0x58 scope:global +GetNormalizedUpper__t13FloatingPoint5Zsi10i3i5i11 = .text:0x801BC6F4; // type:function size:0x58 scope:global +_GetKind__24MNotifyMilestoneProgress = .text:0x801BC74C; // type:function size:0x64 scope:global +_GetKind__17MEnteringGameplay = .text:0x801BC7B0; // type:function size:0x64 scope:global +_GetKind__12MNotifyTimer = .text:0x801BC814; // type:function size:0x64 scope:global +_._25PreloadingAttribAllocator = .text:0x801BC878; // type:function size:0x54 scope:global +Allocate__25PreloadingAttribAllocatorUiPCc = .text:0x801BC8CC; // type:function size:0x50 scope:global +Free__25PreloadingAttribAllocatorPvUiPCc = .text:0x801BC91C; // type:function size:0x48 scope:global +_._27BlockLoadingAttribAllocator = .text:0x801BC964; // type:function size:0x54 scope:global +Allocate__27BlockLoadingAttribAllocatorUiPCc = .text:0x801BC9B8; // type:function size:0x40 scope:global +Free__27BlockLoadingAttribAllocatorPvUiPCc = .text:0x801BC9F8; // type:function size:0x30 scope:global +_GetKind__23MNotifyMilestoneReached = .text:0x801BCA28; // type:function size:0x64 scope:global +_._22LoggingAttribAllocator = .text:0x801BCA8C; // type:function size:0x54 scope:global +_GLOBAL_.I._16GRuntimeInstance.sRingListHead = .text:0x801BCAE0; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x801BCB0C; // type:label scope:local +LuaRealloc = .text:0x801BCB0C; // type:function size:0x54 scope:global +LuaFree = .text:0x801BCB60; // type:function size:0x48 scope:global +LuaPanic = .text:0x801BCBA8; // type:function size:0x24 scope:global +__10LuaRuntimeUi = .text:0x801BCBCC; // type:function size:0xD0 scope:global +_._10LuaRuntime = .text:0x801BCC9C; // type:function size:0x138 scope:global +Init__10LuaRuntimeUi = .text:0x801BCDD4; // type:function size:0x44 scope:global +Shutdown__10LuaRuntime = .text:0x801BCE18; // type:function size:0x44 scope:global +CreateState__10LuaRuntime = .text:0x801BCE5C; // type:function size:0x90 scope:global +Alloc__10LuaRuntimeUi = .text:0x801BCEEC; // type:function size:0x2A4 scope:global +Free__10LuaRuntimePvUi = .text:0x801BD190; // type:function size:0x268 scope:global +TakeResetSnapshot__10LuaRuntime = .text:0x801BD3F8; // type:function size:0xF0 scope:global +FreeResetSnapshot__10LuaRuntime = .text:0x801BD4E8; // type:function size:0x48 scope:global +BeginDelivery__10LuaRuntime = .text:0x801BD530; // type:function size:0x10 scope:global +EndDelivery__10LuaRuntime = .text:0x801BD540; // type:function size:0x40 scope:global +Realloc__10LuaRuntimeP9lua_StatePvUiUi12LuaAllocType = .text:0x801BD580; // type:function size:0x8C scope:global +ResetHeap__10LuaRuntime = .text:0x801BD60C; // type:function size:0x148 scope:global +FreeEmergencyAllocations__10LuaRuntime = .text:0x801BD754; // type:function size:0x74 scope:global +PackIdentifier__10LuaRuntimePCcPUc = .text:0x801BD7C8; // type:function size:0xD0 scope:global +UnpackIdentifier__10LuaRuntimePCUcPc = .text:0x801BD898; // type:function size:0xA4 scope:global +SerializeTable__10LuaRuntimeP9lua_StatePUcb = .text:0x801BD93C; // type:function size:0x4A0 scope:global +DeserializeTable__10LuaRuntimeP9lua_StatePUcb = .text:0x801BDDDC; // type:function size:0x378 scope:global +DumpStack__10LuaRuntimeP9lua_State = .text:0x801BE154; // type:function size:0x1D8 scope:global +HandleGlobalIndex__10LuaRuntimeP9lua_State = .text:0x801BE32C; // type:function size:0xAC scope:global +__13LuaPostOffice = .text:0x801BE3D8; // type:function size:0x7C scope:global +_._13LuaPostOffice = .text:0x801BE454; // type:function size:0x158 scope:global +Init__13LuaPostOffice = .text:0x801BE5AC; // type:function size:0x38 scope:global +Shutdown__13LuaPostOffice = .text:0x801BE5E4; // type:function size:0x44 scope:global +RouteMessage__13LuaPostOfficeP22LuaMessageDeliveryInfo = .text:0x801BE628; // type:function size:0x34C scope:global +RegisterHandler__13LuaPostOfficeUiP9GActivity = .text:0x801BE974; // type:function size:0x294 scope:global +UnregisterHandler__13LuaPostOfficeUiP9GActivity = .text:0x801BEC08; // type:function size:0x1B0 scope:global +BuildMessageTable__22LuaMessageDeliveryInfo = .text:0x801BEDB8; // type:function size:0x64 scope:global +BindRawFunction__FP9lua_StatePCcPFP9lua_State_iT1 = .text:0x801BEE1C; // type:function size:0x64 scope:local +BindVoidFunction__FP9lua_StatePCcPFv_vT1 = .text:0x801BEE80; // type:function size:0x74 scope:local +__10LuaBindery = .text:0x801BEEF4; // type:function size:0x4 scope:global +_._10LuaBindery = .text:0x801BEEF8; // type:function size:0x28 scope:global +Init__10LuaBindery = .text:0x801BEF20; // type:function size:0x38 scope:global +Shutdown__10LuaBindery = .text:0x801BEF58; // type:function size:0x44 scope:global +LoadMetatable__10LuaBinderyP9lua_StatePCc = .text:0x801BEF9C; // type:function size:0x5C scope:global +AttachMetatable__10LuaBinderyP9lua_StatePCc = .text:0x801BEFF8; // type:function size:0x38 scope:global +GetGlobalTable__10LuaBinderyP9lua_StatePCc = .text:0x801BF030; // type:function size:0x90 scope:global +SetInGlobalTable__10LuaBinderyP9lua_StatePCc = .text:0x801BF0C0; // type:function size:0x54 scope:global +Table_Randomize__FP9lua_State = .text:0x801BF114; // type:function size:0xD4 scope:local +BindToGameCode__10LuaBinderyP9lua_State = .text:0x801BF1E8; // type:function size:0x119C scope:global +PushAttribValueFloat__FRC19LuaAttribAccessInfo = .text:0x801C0384; // type:function size:0x44 scope:local +PushAttribValueDouble__FRC19LuaAttribAccessInfo = .text:0x801C03C8; // type:function size:0x48 scope:local +PushAttribValueInt64__FRC19LuaAttribAccessInfo = .text:0x801C0410; // type:function size:0x50 scope:local +PushAttribValueInt32__FRC19LuaAttribAccessInfo = .text:0x801C0460; // type:function size:0x68 scope:local +PushAttribValueInt16__FRC19LuaAttribAccessInfo = .text:0x801C04C8; // type:function size:0x68 scope:local +PushAttribValueInt8__FRC19LuaAttribAccessInfo = .text:0x801C0530; // type:function size:0x6C scope:local +PushAttribValueUInt64__FRC19LuaAttribAccessInfo = .text:0x801C059C; // type:function size:0xA4 scope:local +PushAttribValueUInt32__FRC19LuaAttribAccessInfo = .text:0x801C0640; // type:function size:0x64 scope:local +PushAttribValueUInt16__FRC19LuaAttribAccessInfo = .text:0x801C06A4; // type:function size:0x64 scope:local +PushAttribValueUInt8__FRC19LuaAttribAccessInfo = .text:0x801C0708; // type:function size:0x64 scope:local +PushAttribValueBool__FRC19LuaAttribAccessInfo = .text:0x801C076C; // type:function size:0x50 scope:local +PushAttribValueStringKey__FRC19LuaAttribAccessInfo = .text:0x801C07BC; // type:function size:0x50 scope:local +PushAttribValueText__FRC19LuaAttribAccessInfo = .text:0x801C080C; // type:function size:0x44 scope:local +PushAttribValueChar__FRC19LuaAttribAccessInfo = .text:0x801C0850; // type:function size:0x4C scope:local +PushAttribValueRefSpec__FRC19LuaAttribAccessInfo = .text:0x801C089C; // type:function size:0x7C scope:local +IsSameInstance__FPC16GRuntimeInstanceT0 = .text:0x801C0918; // type:function size:0xAC scope:local +GRuntimeInstanceMeta__index__FP9lua_State = .text:0x801C09C4; // type:function size:0x108 scope:local +GRuntimeInstanceMeta__newindex__FP9lua_State = .text:0x801C0ACC; // type:function size:0xB8 scope:local +GRuntimeInstanceMeta__eq__FP9lua_State = .text:0x801C0B84; // type:function size:0xA8 scope:local +LuaAttribArrayInfoMeta__index__FP9lua_State = .text:0x801C0C2C; // type:function size:0x160 scope:local +LuaAttribArrayInfoMeta__newindex__FP9lua_State = .text:0x801C0D8C; // type:function size:0x8 scope:local +LuaAttribArrayInfoMeta__eq__FP9lua_State = .text:0x801C0D94; // type:function size:0xC8 scope:local +__13LuaAttributes = .text:0x801C0E5C; // type:function size:0x54 scope:global +_._13LuaAttributes = .text:0x801C0EB0; // type:function size:0x9C scope:global +Init__13LuaAttributes = .text:0x801C0F4C; // type:function size:0x38 scope:global +Shutdown__13LuaAttributes = .text:0x801C0F84; // type:function size:0x44 scope:global +BuildAttributeTypeTable__13LuaAttributes = .text:0x801C0FC8; // type:function size:0x174 scope:global +PushAttributeValue__13LuaAttributesRC19LuaAttribAccessInfob = .text:0x801C113C; // type:function size:0x164 scope:global +SetAttributeValue__13LuaAttributesRC19LuaAttribAccessInfo = .text:0x801C12A0; // type:function size:0xCC scope:global +BindAccessors__13LuaAttributesP9lua_State = .text:0x801C136C; // type:function size:0x180 scope:global +Activity_Run__FP16GRuntimeInstance = .text:0x801C14EC; // type:function size:0x54 scope:global +Activity_Suspend__FP16GRuntimeInstance = .text:0x801C1540; // type:function size:0x20 scope:global +Audio_SetFlag__FPCcb = .text:0x801C1560; // type:function size:0x18C scope:global +Audio_IsCopSpeechPlaying__Fv = .text:0x801C16EC; // type:function size:0x24 scope:global +Bin_GetNumChallengesPassed__Fi = .text:0x801C1710; // type:function size:0x40 scope:global +Bin_GetNumRacesWon__Fi = .text:0x801C1750; // type:function size:0x40 scope:global +Camera_SetGenericCamera__FPCcT0 = .text:0x801C1790; // type:function size:0x18C scope:global +MiniMap_AddEngagedRace__FP16GRuntimeInstance = .text:0x801C191C; // type:function size:0x3C scope:global +NIS_Play__FP16GRuntimeInstancePCcT1iT1T1 = .text:0x801C1958; // type:function size:0xD0 scope:global +Movie_PlayHackE3FMV__Fv = .text:0x801C1A28; // type:function size:0x4 scope:global +Debug_Print__FPCc = .text:0x801C1A2C; // type:function size:0xC scope:global +Debug_PrintInstance__FP16GRuntimeInstance = .text:0x801C1A38; // type:function size:0xC scope:global +Demo_SetRaceCompleteForFE__FP16GRuntimeInstance = .text:0x801C1A44; // type:function size:0x4 scope:global +Demo_StorePursuitRepForFE__FP16GRuntimeInstance = .text:0x801C1A48; // type:function size:0x4 scope:global +HUD_ShowMessage__FPCc = .text:0x801C1A4C; // type:function size:0x128 scope:global +HUD_ShowTimeExtension__Ff = .text:0x801C1B74; // type:function size:0x54 scope:global +Math_RandomInt__Fi = .text:0x801C1BC8; // type:function size:0x24 scope:global +Platform_IsNextGen__Fv = .text:0x801C1BEC; // type:function size:0x8 scope:global +Game_GetSimTime__Fv = .text:0x801C1BF4; // type:function size:0x20 scope:global +Game_AddPlayer__FP8IVehicle = .text:0x801C1C14; // type:function size:0x108 scope:local +Game_FindPerformanceCandidates__FRQ33UTL3Stdt4list2ZUiZ10_type_listUiRCQ37Physics4Info11Performance = .text:0x801C1D1C; // type:function size:0x5B0 scope:local +Game_MaxUniqueOpponents__Fv = .text:0x801C22CC; // type:function size:0x8 scope:global +Game_SetSplitGrid__Fv = .text:0x801C22D4; // type:function size:0x318 scope:global +Game_InitRacers__FP16GRuntimeInstance = .text:0x801C25EC; // type:function size:0x94C scope:global +Game_KnockoutRacer__FP8ISimable = .text:0x801C2F38; // type:function size:0x148 scope:global +Game_DetachCameraFromRacer__FP8ISimable = .text:0x801C3080; // type:function size:0x40 scope:global +Game_WarpPlayerToTrigger__FP16GRuntimeInstance = .text:0x801C30C0; // type:function size:0x100 scope:global +Game_SetPlayerStartPosition__FP16GRuntimeInstance = .text:0x801C31C0; // type:function size:0xBC scope:global +Game_ResetTrigger__FP16GRuntimeInstance = .text:0x801C327C; // type:function size:0x28 scope:global +Game_ShowTriggerIcon__FP16GRuntimeInstance = .text:0x801C32A4; // type:function size:0x28 scope:global +Game_HideTriggerIcon__FP16GRuntimeInstance = .text:0x801C32CC; // type:function size:0x28 scope:global +Game_SpawnCop__FP16GRuntimeInstancePCcbT2 = .text:0x801C32F4; // type:function size:0xC0 scope:global +Game_SpawnCharacter__FP16GRuntimeInstanceN20f = .text:0x801C33B4; // type:function size:0x8C scope:global +Game_UnspawnCharacter__FP16GRuntimeInstance = .text:0x801C3440; // type:function size:0x20 scope:global +Game_SendCharacterStimulus__FP16GRuntimeInstancePCc = .text:0x801C3460; // type:function size:0x11C scope:global +Game_SetRacerLapsLeft__Fii = .text:0x801C357C; // type:function size:0x2C scope:global +Game_SetRacerGoal__FiP16GRuntimeInstance = .text:0x801C35A8; // type:function size:0x158 scope:global +Game_NotifyCheckpointReached__FP8ISimablei = .text:0x801C3700; // type:function size:0x6C scope:global +Game_NotifyLapFinished__FP8ISimablei = .text:0x801C376C; // type:function size:0x1B8 scope:global +Game_NotifyRaceFinished__FP8ISimable = .text:0x801C3924; // type:function size:0x550 scope:global +Game_GetRacerIndex__FP8ISimable = .text:0x801C3E74; // type:function size:0xA4 scope:global +Game_RacerIsHuman__Fi = .text:0x801C3F18; // type:function size:0x70 scope:global +Game_PlayerIsLocal__FP8ISimable = .text:0x801C3F88; // type:function size:0x88 scope:global +Game_GetRacerElement__Fi = .text:0x801C4010; // type:function size:0x68 scope:global +Game_GetRacerCharacter__Fi = .text:0x801C4078; // type:function size:0x30 scope:global +Game_GetNumRacers__Fv = .text:0x801C40A8; // type:function size:0x28 scope:global +Game_GetSimableSpeedKmh__FP8ISimable = .text:0x801C40D0; // type:function size:0x74 scope:global +Game_IsActiveSpeedTrap__FP16GRuntimeInstance = .text:0x801C4144; // type:function size:0x128 scope:global +Game_IsActiveMenuGate__FP16GRuntimeInstance = .text:0x801C426C; // type:function size:0x98 scope:global +Game_NotifySpeedTrapTriggered__FP16GRuntimeInstanceT0P8ISimablef = .text:0x801C4304; // type:function size:0x2A4 scope:global +Game_NotifyRacePlacement__FP16GRuntimeInstanceP8ISimablei = .text:0x801C45A8; // type:function size:0x8C scope:global +Game_SaveStartPositions__Fv = .text:0x801C4634; // type:function size:0x54 scope:global +Game_RestoreStartPositions__Fv = .text:0x801C4688; // type:function size:0x1DC scope:global +Game_SetRaceActivity__FP16GRuntimeInstance = .text:0x801C4864; // type:function size:0x2C scope:global +Game_StartRace__FP16GRuntimeInstance = .text:0x801C4890; // type:function size:0x390 scope:global +Game_StartRaceTimers__Fv = .text:0x801C4C20; // type:function size:0x60 scope:global +Game_AbandonRace__Fv = .text:0x801C4C80; // type:function size:0x118 scope:global +Game_EnterPostRaceFlow__Fv = .text:0x801C4D98; // type:function size:0xE8 scope:global +Game_SetCopsEnabled__Fb = .text:0x801C4E80; // type:function size:0x70 scope:global +Game_NoNewPursuitsOrCops__Fv = .text:0x801C4EF0; // type:function size:0x44 scope:global +Game_ForcePursuitStart__Fi = .text:0x801C4F34; // type:function size:0x94 scope:global +Game_EnterEngagableTrigger__FP16GRuntimeInstance = .text:0x801C4FC8; // type:function size:0x38 scope:global +Game_ExitEngagableTrigger__FP16GRuntimeInstance = .text:0x801C5000; // type:function size:0x38 scope:global +Game_EnterGateZone__FP16GRuntimeInstancePCc = .text:0x801C5038; // type:function size:0x9C scope:global +Game_ExitGateZone__FP16GRuntimeInstancePCc = .text:0x801C50D4; // type:function size:0x8C scope:global +Game_DoZoneMenuAction__FP16GRuntimeInstance = .text:0x801C5160; // type:function size:0xFC scope:global +Game_ShowRaceOverSummary__Fv = .text:0x801C525C; // type:function size:0x50 scope:global +Game_HideRaceOverSummary__Fv = .text:0x801C52AC; // type:function size:0x4 scope:global +Game_SetAllStaging__Fb = .text:0x801C52B0; // type:function size:0x13C scope:global +Game_JackKnife__FP16GRuntimeInstance = .text:0x801C53EC; // type:function size:0xA8 scope:global +Game_SetTrafficSpeed__FP16GRuntimeInstanceff = .text:0x801C5494; // type:function size:0xD0 scope:global +Game_ShowPauseMenu__Fv = .text:0x801C5564; // type:function size:0x34 scope:global +Game_AwardCash__FP8ISimablef = .text:0x801C5598; // type:function size:0x20 scope:global +Game_AwardPoints__FP8ISimablef = .text:0x801C55B8; // type:function size:0xD8 scope:global +Game_ChallengeCompleted__Fv = .text:0x801C5690; // type:function size:0x6C scope:global +Game_UnlockRace__FP16GRuntimeInstance = .text:0x801C56FC; // type:function size:0xE8 scope:global +Game_IsRaceUnlocked__FP16GRuntimeInstance = .text:0x801C57E4; // type:function size:0x64 scope:global +Game_IsRaceCompleted__FP16GRuntimeInstance = .text:0x801C5848; // type:function size:0x64 scope:global +Game_AllRacersDone__Fv = .text:0x801C58AC; // type:function size:0x98 scope:global +Game_AllHumanPlayersDone__Fv = .text:0x801C5944; // type:function size:0x120 scope:global +Debug_ShowScreenMessage__FPCcf = .text:0x801C5A64; // type:function size:0xCC scope:global +Game_AwardPlayerBounty__Fi = .text:0x801C5B30; // type:function size:0x170 scope:global +Game_GetPlayerBounty__Fv = .text:0x801C5CA0; // type:function size:0xF4 scope:global +Game_NotifyCountdownDone__Fv = .text:0x801C5D94; // type:function size:0xD4 scope:global +Game_ResetCopsForRestart__Fv = .text:0x801C5E68; // type:function size:0x58 scope:global +Game_JumpToCarLot__Fv = .text:0x801C5EC0; // type:function size:0x40 scope:global +Game_JumpToSafeHouse__Fv = .text:0x801C5F00; // type:function size:0x34 scope:global +Game_GetPlayerElement__Fi = .text:0x801C5F34; // type:function size:0x64 scope:global +Game_BlowEngine__FP8ISimable = .text:0x801C5F98; // type:function size:0x64 scope:global +Game_ChallengeComplete__FP8ISimable = .text:0x801C5FFC; // type:function size:0x3C scope:global +Game_SabotageEngine__FP8ISimablef = .text:0x801C6038; // type:function size:0x74 scope:global +Game_ForceAIControl__Fi = .text:0x801C60AC; // type:function size:0x94 scope:global +Game_ClearAIControl__Fi = .text:0x801C6140; // type:function size:0x94 scope:global +Game_SetTimer__FPCcf = .text:0x801C61D4; // type:function size:0x2C scope:global +Game_KillTimer__FPCc = .text:0x801C6200; // type:function size:0x2C scope:global +Game_ShowGPS__Fb = .text:0x801C622C; // type:function size:0x2C scope:global +Game_NavigatePlayerTo__FP16GRuntimeInstanceT0fb = .text:0x801C6258; // type:function size:0x74 scope:global +Game_SimableDistance__FP8ISimableP16GRuntimeInstance = .text:0x801C62CC; // type:function size:0xA8 scope:global +Game_SimableAngle__FP8ISimableP16GRuntimeInstance = .text:0x801C6374; // type:function size:0x9C scope:global +Debug_Assert__FbPCc = .text:0x801C6410; // type:function size:0x4 scope:global +Game_NotifyFinished__FP16GRuntimeInstance = .text:0x801C6414; // type:function size:0x78 scope:global +Game_IsOnlineGame__Fv = .text:0x801C648C; // type:function size:0x14 scope:global +Game_IsLANGame__Fv = .text:0x801C64A0; // type:function size:0x14 scope:global +Game_SkipCareerIntro__Fv = .text:0x801C64B4; // type:function size:0x88 scope:global +Game_SetChanceOfRain__Ff = .text:0x801C653C; // type:function size:0x7C scope:global +Game_DoFade__Fv = .text:0x801C65B8; // type:function size:0x2C scope:global +Game_IntroduceRival__Fv = .text:0x801C65E4; // type:function size:0x4 scope:global +Game_PlayTutorial__Fv = .text:0x801C65E8; // type:function size:0x19C scope:global +Game_DoSafeHouseIntro__FP16GRuntimeInstance = .text:0x801C6784; // type:function size:0x8C scope:global +Game_IsCareerMode__Fv = .text:0x801C6810; // type:function size:0x38 scope:global +Game_IsSplitScreen__Fv = .text:0x801C6848; // type:function size:0x2C scope:global +Game_AllowEngageEvents__Fv = .text:0x801C6874; // type:function size:0x10 scope:global +Game_AllowMenuGates__Fv = .text:0x801C6884; // type:function size:0x10 scope:global +Game_AllowEngageSafehouse__Fv = .text:0x801C6894; // type:function size:0x10 scope:global +Game_SetHasRapSheet__Fv = .text:0x801C68A4; // type:function size:0x1C scope:global +Game_SetWorldHeat__Ff = .text:0x801C68C0; // type:function size:0x9C scope:global +FE_ShowLosingPostRaceScreen__Fv = .text:0x801C695C; // type:function size:0x24 scope:global +FE_ShowWinningPostRaceScreen__Fv = .text:0x801C6980; // type:function size:0x24 scope:global +FE_ShowPostRaceScreen__Fb = .text:0x801C69A4; // type:function size:0x220 scope:global +FE_ShowOnlinePostRaceScreen__Fv = .text:0x801C6BC4; // type:function size:0x8 scope:global +FE_ShowSpeedTrapScreen__Fff = .text:0x801C6BCC; // type:function size:0x84 scope:global +Game_SetTimeOfDay__FP16GRuntimeInstance = .text:0x801C6C50; // type:function size:0x80 scope:global +Game_ReloadWorld__FP16GRuntimeInstance = .text:0x801C6CD0; // type:function size:0x38 scope:global +Game_PreventPlayerBeingBusted__Fv = .text:0x801C6D08; // type:function size:0x54 scope:global +Game_DoSpecialSetup__FP16GRuntimeInstance = .text:0x801C6D5C; // type:function size:0x9C scope:global +Game_DoSpecialFinalization__FP16GRuntimeInstance = .text:0x801C6DF8; // type:function size:0x34 scope:global +Game_CalculateRanking__FP8ISimablei = .text:0x801C6E2C; // type:function size:0xE4 scope:global +Game_WarpToMarkerWhenRoaming__FP16GRuntimeInstance = .text:0x801C6F10; // type:function size:0x3C scope:global +negindex = .text:0x801C6F4C; // type:function size:0x6C scope:local +luaA_index = .text:0x801C6FB8; // type:function size:0x3C scope:local +luaA_indexAcceptable = .text:0x801C6FF4; // type:function size:0x50 scope:local +lua_atpanic = .text:0x801C7044; // type:function size:0x10 scope:global +lua_gettop = .text:0x801C7054; // type:function size:0x14 scope:global +lua_settop = .text:0x801C7068; // type:function size:0x70 scope:global +lua_insert = .text:0x801C70D8; // type:function size:0x68 scope:global +lua_pushvalue = .text:0x801C7140; // type:function size:0x4C scope:global +lua_type = .text:0x801C718C; // type:function size:0x34 scope:global +lua_isnumber = .text:0x801C71C0; // type:function size:0x58 scope:global +lua_isstring = .text:0x801C7218; // type:function size:0x30 scope:global +lua_tonumber = .text:0x801C7248; // type:function size:0x54 scope:global +lua_toboolean = .text:0x801C729C; // type:function size:0x54 scope:global +lua_tostring = .text:0x801C72F0; // type:function size:0x78 scope:global +lua_touserdata = .text:0x801C7368; // type:function size:0x54 scope:global +lua_userdatalen = .text:0x801C73BC; // type:function size:0x54 scope:global +lua_topointer = .text:0x801C7410; // type:function size:0x88 scope:global +lua_pushnil = .text:0x801C7498; // type:function size:0x1C scope:global +lua_pushnumber = .text:0x801C74B4; // type:function size:0x20 scope:global +lua_pushlstring = .text:0x801C74D4; // type:function size:0x48 scope:global +lua_pushstring = .text:0x801C751C; // type:function size:0x50 scope:global +lua_pushvfstring = .text:0x801C756C; // type:function size:0x20 scope:global +lua_pushfstring = .text:0x801C758C; // type:function size:0x94 scope:global +lua_pushcclosure = .text:0x801C7620; // type:function size:0xA4 scope:global +lua_pushboolean = .text:0x801C76C4; // type:function size:0x30 scope:global +lua_pushlightuserdata = .text:0x801C76F4; // type:function size:0x20 scope:global +lua_gettable = .text:0x801C7714; // type:function size:0x58 scope:global +lua_rawget = .text:0x801C776C; // type:function size:0x50 scope:global +lua_rawgeti = .text:0x801C77BC; // type:function size:0x5C scope:global +lua_newtable = .text:0x801C7818; // type:function size:0x50 scope:global +lua_getmetatable = .text:0x801C7868; // type:function size:0x94 scope:global +lua_settable = .text:0x801C78FC; // type:function size:0x50 scope:global +lua_rawset = .text:0x801C794C; // type:function size:0x5C scope:global +lua_rawseti = .text:0x801C79A8; // type:function size:0x60 scope:global +lua_setmetatable = .text:0x801C7A08; // type:function size:0x84 scope:global +lua_call = .text:0x801C7A8C; // type:function size:0x30 scope:global +f_call = .text:0x801C7ABC; // type:function size:0x28 scope:local +lua_pcall = .text:0x801C7AE4; // type:function size:0x84 scope:global +lua_load = .text:0x801C7B68; // type:function size:0x60 scope:global +lua_setgcthreshold = .text:0x801C7BC8; // type:function size:0x30 scope:global +lua_error = .text:0x801C7BF8; // type:function size:0x24 scope:global +lua_next = .text:0x801C7C1C; // type:function size:0x60 scope:global +lua_concat = .text:0x801C7C7C; // type:function size:0x98 scope:global +lua_newuserdata = .text:0x801C7D14; // type:function size:0x50 scope:global +currentpc = .text:0x801C7D64; // type:function size:0x4C scope:local +currentline = .text:0x801C7DB0; // type:function size:0x64 scope:local +luaG_inithooks = .text:0x801C7E14; // type:function size:0x50 scope:global +lua_getstack = .text:0x801C7E64; // type:function size:0xA0 scope:global +getluaproto = .text:0x801C7F04; // type:function size:0x28 scope:local +funcinfo = .text:0x801C7F2C; // type:function size:0xA0 scope:local +travglobals = .text:0x801C7FCC; // type:function size:0x84 scope:local +info_tailcall = .text:0x801C8050; // type:function size:0x80 scope:local +auxgetinfo = .text:0x801C80D0; // type:function size:0x160 scope:local +lua_getinfo = .text:0x801C8230; // type:function size:0x118 scope:global +precheck = .text:0x801C8348; // type:function size:0x54 scope:local +checkopenop = .text:0x801C839C; // type:function size:0x50 scope:local +checkRK = .text:0x801C83EC; // type:function size:0x34 scope:local +luaG_symbexec = .text:0x801C8420; // type:function size:0x434 scope:local +luaG_checkcode = .text:0x801C8854; // type:function size:0x28 scope:global +kname = .text:0x801C887C; // type:function size:0x38 scope:local +getobjname = .text:0x801C88B4; // type:function size:0x13C scope:local +getfuncname = .text:0x801C89F0; // type:function size:0x9C scope:local +isinstack = .text:0x801C8A8C; // type:function size:0x34 scope:local +luaG_typeerror = .text:0x801C8AC0; // type:function size:0xC8 scope:global +luaG_concaterror = .text:0x801C8B88; // type:function size:0x38 scope:global +luaG_aritherror = .text:0x801C8BC0; // type:function size:0x5C scope:global +luaG_ordererror = .text:0x801C8C1C; // type:function size:0x74 scope:global +addinfo = .text:0x801C8C90; // type:function size:0x88 scope:local +luaG_errormsg = .text:0x801C8D18; // type:function size:0xC0 scope:global +luaG_runerror = .text:0x801C8DD8; // type:function size:0xB8 scope:global +seterrorobj = .text:0x801C8E90; // type:function size:0xB4 scope:local +luaD_throw = .text:0x801C8F44; // type:function size:0x44 scope:global +luaD_rawrunprotected = .text:0x801C8F88; // type:function size:0x78 scope:global +restore_stack_limit = .text:0x801C9000; // type:function size:0x70 scope:local +correctstack = .text:0x801C9070; // type:function size:0x90 scope:local +luaD_reallocstack = .text:0x801C9100; // type:function size:0x70 scope:global +luaD_reallocCI = .text:0x801C9170; // type:function size:0x70 scope:global +luaD_growstack = .text:0x801C91E0; // type:function size:0x44 scope:global +luaD_growCI = .text:0x801C9224; // type:function size:0x6C scope:local +luaD_callhook = .text:0x801C9290; // type:function size:0xF4 scope:global +adjust_varargs = .text:0x801C9384; // type:function size:0x190 scope:local +tryfuncTM = .text:0x801C9514; // type:function size:0xD0 scope:local +luaD_precall = .text:0x801C95E4; // type:function size:0x1CC scope:global +callrethooks = .text:0x801C97B0; // type:function size:0x88 scope:local +luaD_poscall = .text:0x801C9838; // type:function size:0xD0 scope:global +luaD_call = .text:0x801C9908; // type:function size:0xB0 scope:global +luaD_pcall = .text:0x801C99B8; // type:function size:0xA4 scope:global +f_parser = .text:0x801C9A5C; // type:function size:0xAC scope:local +luaD_protectedparser = .text:0x801C9B08; // type:function size:0x9C scope:global +luaF_newCclosure = .text:0x801C9BA4; // type:function size:0x68 scope:global +luaF_newLclosure = .text:0x801C9C0C; // type:function size:0x7C scope:global +luaF_findupval = .text:0x801C9C88; // type:function size:0x98 scope:global +luaF_close = .text:0x801C9D20; // type:function size:0x78 scope:global +luaF_newproto = .text:0x801C9D98; // type:function size:0xA0 scope:global +luaF_getlocalname = .text:0x801C9E38; // type:function size:0x7C scope:global +luaM_setallocator = .text:0x801C9EB4; // type:function size:0x14 scope:global +luaM_realloc = .text:0x801C9EC8; // type:function size:0x108 scope:global +luaO_log2 = .text:0x801C9FD0; // type:function size:0xA4 scope:global +luaO_rawequalObj = .text:0x801CA074; // type:function size:0x94 scope:global +luaO_str2d = .text:0x801CA108; // type:function size:0x9C scope:global +pushstr = .text:0x801CA1A4; // type:function size:0x80 scope:local +luaO_pushvfstring = .text:0x801CA224; // type:function size:0x30C scope:global +luaO_pushfstring = .text:0x801CA530; // type:function size:0x94 scope:global +luaO_chunkid = .text:0x801CA5C4; // type:function size:0x138 scope:global +default_panic = .text:0x801CA6FC; // type:function size:0x8 scope:local +mallocstate = .text:0x801CA704; // type:function size:0x40 scope:local +freestate = .text:0x801CA744; // type:function size:0x2C scope:local +stack_init = .text:0x801CA770; // type:function size:0xCC scope:local +freestack = .text:0x801CA83C; // type:function size:0x60 scope:local +f_luaopen = .text:0x801CA89C; // type:function size:0x178 scope:local +preinit_state = .text:0x801CAA14; // type:function size:0x4C scope:local +close_state = .text:0x801CAA60; // type:function size:0xB8 scope:local +lua_open = .text:0x801CAB18; // type:function size:0x88 scope:global +callallgcTM = .text:0x801CABA0; // type:function size:0x20 scope:local +lua_close = .text:0x801CABC0; // type:function size:0x88 scope:global +luaS_freeall = .text:0x801CAC48; // type:function size:0x38 scope:global +luaS_resize = .text:0x801CAC80; // type:function size:0xEC scope:global +newlstr = .text:0x801CAD6C; // type:function size:0xE4 scope:local +luaS_newlstr = .text:0x801CAE50; // type:function size:0xE0 scope:global +luaS_newudata = .text:0x801CAF30; // type:function size:0x78 scope:global +hashnum = .text:0x801CAFA8; // type:function size:0x50 scope:local +luaH_mainposition = .text:0x801CAFF8; // type:function size:0xD8 scope:global +arrayindex = .text:0x801CB0D0; // type:function size:0x74 scope:local +luaH_index = .text:0x801CB144; // type:function size:0xBC scope:local +luaH_next = .text:0x801CB200; // type:function size:0x12C scope:global +computesizes = .text:0x801CB32C; // type:function size:0xC4 scope:local +numuse = .text:0x801CB3F0; // type:function size:0x170 scope:local +setarrayvector = .text:0x801CB560; // type:function size:0x74 scope:local +setnodevector = .text:0x801CB5D4; // type:function size:0xE0 scope:local +resize = .text:0x801CB6B4; // type:function size:0x1B4 scope:local +rehash = .text:0x801CB868; // type:function size:0x5C scope:local +luaH_new = .text:0x801CB8C4; // type:function size:0xA4 scope:global +newkey = .text:0x801CB968; // type:function size:0x130 scope:local +luaH_getany = .text:0x801CBA98; // type:function size:0x7C scope:local +luaH_getnum = .text:0x801CBB14; // type:function size:0xB4 scope:global +luaH_getstr = .text:0x801CBBC8; // type:function size:0x5C scope:global +luaH_get = .text:0x801CBC24; // type:function size:0x90 scope:global +luaH_set = .text:0x801CBCB4; // type:function size:0x84 scope:global +luaH_setnum = .text:0x801CBD38; // type:function size:0x90 scope:global +luaT_init = .text:0x801CBDC8; // type:function size:0x84 scope:global +luaT_gettm = .text:0x801CBE4C; // type:function size:0x58 scope:global +luaT_gettmbyobj = .text:0x801CBEA4; // type:function size:0x5C scope:global +unexpectedEOZ = .text:0x801CBF00; // type:function size:0x34 scope:local +ezgetc = .text:0x801CBF34; // type:function size:0x7C scope:local +ezread = .text:0x801CBFB0; // type:function size:0x40 scope:local +LoadBlock = .text:0x801CBFF0; // type:function size:0x70 scope:local +LoadVector = .text:0x801CC060; // type:function size:0x9C scope:local +LoadInt = .text:0x801CC0FC; // type:function size:0x5C scope:local +LoadSize = .text:0x801CC158; // type:function size:0x2C scope:local +LoadNumber = .text:0x801CC184; // type:function size:0x2C scope:local +LoadString = .text:0x801CC1B0; // type:function size:0x70 scope:local +LoadCode = .text:0x801CC220; // type:function size:0x6C scope:local +LoadLocals = .text:0x801CC28C; // type:function size:0xA8 scope:local +LoadLines = .text:0x801CC334; // type:function size:0x6C scope:local +LoadUpvalues = .text:0x801CC3A0; // type:function size:0xAC scope:local +LoadConstants = .text:0x801CC44C; // type:function size:0x14C scope:local +LoadFunction = .text:0x801CC598; // type:function size:0xF4 scope:local +LoadSignature = .text:0x801CC68C; // type:function size:0x7C scope:local +TestSize = .text:0x801CC708; // type:function size:0x60 scope:local +LoadHeader = .text:0x801CC768; // type:function size:0x1C8 scope:local +LoadChunk = .text:0x801CC930; // type:function size:0x38 scope:local +luaU_undump = .text:0x801CC968; // type:function size:0x6C scope:global +luaU_endianness = .text:0x801CC9D4; // type:function size:0x8 scope:global +luaV_tonumber = .text:0x801CC9DC; // type:function size:0x70 scope:global +luaV_tostring = .text:0x801CCA4C; // type:function size:0x80 scope:global +traceexec = .text:0x801CCACC; // type:function size:0x134 scope:local +callTMres = .text:0x801CCC00; // type:function size:0xA4 scope:local +callTM = .text:0x801CCCA4; // type:function size:0xAC scope:local +luaV_index = .text:0x801CCD50; // type:function size:0xB0 scope:local +luaV_getnotable = .text:0x801CCE00; // type:function size:0x9C scope:local +luaV_gettable = .text:0x801CCE9C; // type:function size:0x9C scope:global +luaV_settable = .text:0x801CCF38; // type:function size:0x130 scope:global +call_binTM = .text:0x801CD068; // type:function size:0xA8 scope:local +get_compTM = .text:0x801CD110; // type:function size:0xE0 scope:local +call_orderTM = .text:0x801CD1F0; // type:function size:0xBC scope:local +luaV_strcmp = .text:0x801CD2AC; // type:function size:0x90 scope:local +luaV_lessthan = .text:0x801CD33C; // type:function size:0xB4 scope:global +luaV_lessequal = .text:0x801CD3F0; // type:function size:0xF0 scope:local +luaV_equalval = .text:0x801CD4E0; // type:function size:0x138 scope:global +luaV_concat = .text:0x801CD618; // type:function size:0x1E0 scope:global +Arith = .text:0x801CD7F8; // type:function size:0x1A4 scope:local +luaV_execute = .text:0x801CD99C; // type:function size:0xFCC scope:global +luaZ_fill = .text:0x801CE968; // type:function size:0x74 scope:global +luaZ_lookahead = .text:0x801CE9DC; // type:function size:0x68 scope:global +luaZ_init = .text:0x801CEA44; // type:function size:0x1C scope:global +luaZ_read = .text:0x801CEA60; // type:function size:0xBC scope:global +luaZ_openspace = .text:0x801CEB1C; // type:function size:0x60 scope:global +luaL_argerror = .text:0x801CEB7C; // type:function size:0xC8 scope:global +luaL_where = .text:0x801CEC44; // type:function size:0x88 scope:global +luaL_error = .text:0x801CECCC; // type:function size:0xCC scope:global +luaL_newmetatable = .text:0x801CED98; // type:function size:0xB4 scope:global +luaL_getmetatable = .text:0x801CEE4C; // type:function size:0x38 scope:global +luaL_checkudata = .text:0x801CEE84; // type:function size:0x9C scope:global +checkint = .text:0x801CEF20; // type:function size:0x70 scope:local +getsizes = .text:0x801CEF90; // type:function size:0xC4 scope:local +luaL_getn = .text:0x801CF054; // type:function size:0x10C scope:global +getS = .text:0x801CF160; // type:function size:0x28 scope:local +luaL_loadbuffer = .text:0x801CF188; // type:function size:0x34 scope:global +callalert = .text:0x801CF1BC; // type:function size:0xB8 scope:local +aux_do = .text:0x801CF274; // type:function size:0x54 scope:local +lua_dobuffer = .text:0x801CF2C8; // type:function size:0x38 scope:global +luaX_init = .text:0x801CF300; // type:function size:0x4 scope:global +luaY_parser = .text:0x801CF304; // type:function size:0x8 scope:global +luaC_separateudata = .text:0x801CF30C; // type:function size:0x8 scope:global +luaC_callGCTM = .text:0x801CF314; // type:function size:0x4 scope:global +luaC_sweep = .text:0x801CF318; // type:function size:0x4 scope:global +luaC_link = .text:0x801CF31C; // type:function size:0x4 scope:global +_M_erase__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZPvZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZPvZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZPvZ23_type_LuaLargeFreeBlockPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCUiZPv = .text:0x801CF320; // type:function size:0x68 scope:global +clear__Q24_STLt10_List_base2ZPvZQ33UTL3Stdt9Allocator2ZPvZ23_type_LuaEmergencyAlloc = .text:0x801CF388; // type:function size:0x78 scope:global +_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZPvZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZPvZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZPvZ23_type_LuaLargeFreeBlockPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZPvT1 = .text:0x801CF400; // type:function size:0x13C scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZPvZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZPvZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZPvZ23_type_LuaLargeFreeBlockRCQ24_STLt4pair2ZCUiZPv = .text:0x801CF53C; // type:function size:0x118 scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZPvZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZPvZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZPvZ23_type_LuaLargeFreeBlockGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZPvZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZPvRCQ24_STLt4pair2ZCUiZPv = .text:0x801CF654; // type:function size:0x26C scope:global +_M_erase__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZ32_type_ID_LuaMessageSubscriberMapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityList = .text:0x801CF8C0; // type:function size:0x90 scope:global +_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZ32_type_ID_LuaMessageSubscriberMapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListT1 = .text:0x801CF950; // type:function size:0x144 scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZ32_type_ID_LuaMessageSubscriberMapRCQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityList = .text:0x801CFA94; // type:function size:0x118 scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZ32_type_ID_LuaMessageSubscriberMapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListRCQ24_STLt4pair2ZCUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityList = .text:0x801CFBAC; // type:function size:0x26C scope:global +reserve__Q24_STLt6vector2ZP9GActivityZQ33UTL3Stdt9Allocator2ZP9GActivityZ24_type_ID_LuaActivityListUi = .text:0x801CFE18; // type:function size:0x11C scope:global +find__H2ZPP9GActivityZP9GActivity_4_STLX01X01RCX11_X01 = .text:0x801CFF34; // type:function size:0xB0 scope:global +BindVoidFunction__H1ZP16GRuntimeInstance_P9lua_StatePCcPFX01_vT1_v = .text:0x801CFFE4; // type:function size:0x74 scope:local +VoidFunctionArg2Thunk__H2ZPCcZb_P9lua_State_i = .text:0x801D0058; // type:function size:0x70 scope:local +BindVoidFunction__H2ZPCcZb_P9lua_StatePCcPFX01X11_vT1_v = .text:0x801D00C8; // type:function size:0x74 scope:local +BindFunction__H1Zb_P9lua_StatePCcPFv_X01T1_v = .text:0x801D013C; // type:function size:0x74 scope:local +FunctionArg1Thunk__H2ZiZi_P9lua_State_i = .text:0x801D01B0; // type:function size:0x84 scope:local +BindFunction__H2ZiZi_P9lua_StatePCcPFX11_X01T1_v = .text:0x801D0234; // type:function size:0x74 scope:local +VoidFunctionArg2Thunk__H2ZPCcZPCc_P9lua_State_i = .text:0x801D02A8; // type:function size:0x64 scope:local +BindVoidFunction__H2ZPCcZPCc_P9lua_StatePCcPFX01X11_vT1_v = .text:0x801D030C; // type:function size:0x74 scope:local +VoidFunctionArg6Thunk__H6ZP16GRuntimeInstanceZPCcZPCcZiZPCcZPCc_P9lua_State_i = .text:0x801D0380; // type:function size:0xC8 scope:local +BindVoidFunction__H6ZP16GRuntimeInstanceZPCcZPCcZiZPCcZPCc_P9lua_StatePCcPFX01X11X21X31X41X51_vT1_v = .text:0x801D0448; // type:function size:0x74 scope:local +BindVoidFunction__H1ZPCc_P9lua_StatePCcPFX01_vT1_v = .text:0x801D04BC; // type:function size:0x74 scope:local +VoidFunctionArg2Thunk__H2ZPCcZf_P9lua_State_i = .text:0x801D0530; // type:function size:0x60 scope:local +BindVoidFunction__H2ZPCcZf_P9lua_StatePCcPFX01X11_vT1_v = .text:0x801D0590; // type:function size:0x74 scope:local +BindVoidFunction__H1Zf_P9lua_StatePCcPFX01_vT1_v = .text:0x801D0604; // type:function size:0x74 scope:local +VoidFunctionArg2Thunk__H2ZP8ISimableZf_P9lua_State_i = .text:0x801D0678; // type:function size:0xAC scope:local +BindVoidFunction__H2ZP8ISimableZf_P9lua_StatePCcPFX01X11_vT1_v = .text:0x801D0724; // type:function size:0x74 scope:local +BindVoidFunction__H1ZP8ISimable_P9lua_StatePCcPFX01_vT1_v = .text:0x801D0798; // type:function size:0x74 scope:local +BindVoidFunction__H1Zi_P9lua_StatePCcPFX01_vT1_v = .text:0x801D080C; // type:function size:0x74 scope:local +VoidFunctionArg2Thunk__H2ZiZP16GRuntimeInstance_P9lua_State_i = .text:0x801D0880; // type:function size:0x78 scope:local +BindVoidFunction__H2ZiZP16GRuntimeInstance_P9lua_StatePCcPFX01X11_vT1_v = .text:0x801D08F8; // type:function size:0x74 scope:local +VoidFunctionArg2Thunk__H2ZiZi_P9lua_State_i = .text:0x801D096C; // type:function size:0x74 scope:local +BindVoidFunction__H2ZiZi_P9lua_StatePCcPFX01X11_vT1_v = .text:0x801D09E0; // type:function size:0x74 scope:local +VoidFunctionArg3Thunk__H3ZP16GRuntimeInstanceZP8ISimableZi_P9lua_State_i = .text:0x801D0A54; // type:function size:0xD8 scope:local +BindVoidFunction__H3ZP16GRuntimeInstanceZP8ISimableZi_P9lua_StatePCcPFX01X11X21_vT1_v = .text:0x801D0B2C; // type:function size:0x74 scope:local +VoidFunctionArg4Thunk__H4ZP16GRuntimeInstanceZP16GRuntimeInstanceZP8ISimableZf_P9lua_State_i = .text:0x801D0BA0; // type:function size:0xEC scope:local +BindVoidFunction__H4ZP16GRuntimeInstanceZP16GRuntimeInstanceZP8ISimableZf_P9lua_StatePCcPFX01X11X21X31_vT1_v = .text:0x801D0C8C; // type:function size:0x74 scope:local +VoidFunctionArg2Thunk__H2ZP8ISimableZi_P9lua_State_i = .text:0x801D0D00; // type:function size:0xB8 scope:local +BindVoidFunction__H2ZP8ISimableZi_P9lua_StatePCcPFX01X11_vT1_v = .text:0x801D0DB8; // type:function size:0x74 scope:local +BindVoidFunction__H1Zb_P9lua_StatePCcPFX01_vT1_v = .text:0x801D0E2C; // type:function size:0x74 scope:local +VoidFunctionArg2Thunk__H2ZP16GRuntimeInstanceZPCc_P9lua_State_i = .text:0x801D0EA0; // type:function size:0x70 scope:local +BindVoidFunction__H2ZP16GRuntimeInstanceZPCc_P9lua_StatePCcPFX01X11_vT1_v = .text:0x801D0F10; // type:function size:0x74 scope:local +VoidFunctionArg3Thunk__H3ZP16GRuntimeInstanceZfZf_P9lua_State_i = .text:0x801D0F84; // type:function size:0x8C scope:local +BindVoidFunction__H3ZP16GRuntimeInstanceZfZf_P9lua_StatePCcPFX01X11X21_vT1_v = .text:0x801D1010; // type:function size:0x74 scope:local +VoidFunctionArg4Thunk__H4ZP16GRuntimeInstanceZPCcZbZb_P9lua_State_i = .text:0x801D1084; // type:function size:0xB0 scope:local +BindVoidFunction__H4ZP16GRuntimeInstanceZPCcZbZb_P9lua_StatePCcPFX01X11X21X31_vT1_v = .text:0x801D1134; // type:function size:0x74 scope:local +VoidFunctionArg4Thunk__H4ZP16GRuntimeInstanceZP16GRuntimeInstanceZP16GRuntimeInstanceZf_P9lua_State_i = .text:0x801D11A8; // type:function size:0xAC scope:local +BindVoidFunction__H4ZP16GRuntimeInstanceZP16GRuntimeInstanceZP16GRuntimeInstanceZf_P9lua_StatePCcPFX01X11X21X31_vT1_v = .text:0x801D1254; // type:function size:0x74 scope:local +FunctionArg1Thunk__H2ZbZP16GRuntimeInstance_P9lua_State_i = .text:0x801D12C8; // type:function size:0x6C scope:local +BindFunction__H2ZbZP16GRuntimeInstance_P9lua_StatePCcPFX11_X01T1_v = .text:0x801D1334; // type:function size:0x74 scope:local +BindFunction__H1Zf_P9lua_StatePCcPFv_X01T1_v = .text:0x801D13A8; // type:function size:0x74 scope:local +FunctionArg1Thunk__H2ZiZP8ISimable_P9lua_State_i = .text:0x801D141C; // type:function size:0xBC scope:local +BindFunction__H2ZiZP8ISimable_P9lua_StatePCcPFX11_X01T1_v = .text:0x801D14D8; // type:function size:0x74 scope:local +FunctionArg1Thunk__H2ZP8ISimableZi_P9lua_State_i = .text:0x801D154C; // type:function size:0x9C scope:local +BindFunction__H2ZP8ISimableZi_P9lua_StatePCcPFX11_X01T1_v = .text:0x801D15E8; // type:function size:0x74 scope:local +FunctionArg1Thunk__H2ZP16GRuntimeInstanceZi_P9lua_State_i = .text:0x801D165C; // type:function size:0x98 scope:local +BindFunction__H2ZP16GRuntimeInstanceZi_P9lua_StatePCcPFX11_X01T1_v = .text:0x801D16F4; // type:function size:0x74 scope:local +BindFunction__H1Zi_P9lua_StatePCcPFv_X01T1_v = .text:0x801D1768; // type:function size:0x74 scope:local +FunctionArg1Thunk__H2ZfZP8ISimable_P9lua_State_i = .text:0x801D17DC; // type:function size:0x98 scope:local +BindFunction__H2ZfZP8ISimable_P9lua_StatePCcPFX11_X01T1_v = .text:0x801D1874; // type:function size:0x74 scope:local +FunctionArg1Thunk__H2ZbZi_P9lua_State_i = .text:0x801D18E8; // type:function size:0x64 scope:local +BindFunction__H2ZbZi_P9lua_StatePCcPFX11_X01T1_v = .text:0x801D194C; // type:function size:0x74 scope:local +FunctionArg1Thunk__H2ZbZP8ISimable_P9lua_State_i = .text:0x801D19C0; // type:function size:0x9C scope:local +BindFunction__H2ZbZP8ISimable_P9lua_StatePCcPFX11_X01T1_v = .text:0x801D1A5C; // type:function size:0x74 scope:local +FunctionArg2Thunk__H3ZfZP8ISimableZP16GRuntimeInstance_P9lua_State_i = .text:0x801D1AD0; // type:function size:0xC4 scope:local +BindFunction__H3ZfZP8ISimableZP16GRuntimeInstance_P9lua_StatePCcPFX11X21_X01T1_v = .text:0x801D1B94; // type:function size:0x74 scope:local +BindSingleton__H1Z11GRaceStatus_P9lua_StatePCcPX01T1_v = .text:0x801D1C08; // type:function size:0x68 scope:local +BindVoidMethod__H1Z11GRaceStatus_P9lua_StatePCcT1PMX01FPX01_v_v = .text:0x801D1C70; // type:function size:0x84 scope:local +BindVoidMethod__H2Z11GRaceStatusZP16GRuntimeInstance_P9lua_StatePCcT1PMX01FPX01X11_v_v = .text:0x801D1CF4; // type:function size:0x84 scope:local +VoidMethodArg2Thunk__H3Z11GRaceStatusZP16GRuntimeInstanceZP16GRuntimeInstance_P9lua_State_i = .text:0x801D1D78; // type:function size:0xE8 scope:local +BindVoidMethod__H3Z11GRaceStatusZP16GRuntimeInstanceZP16GRuntimeInstance_P9lua_StatePCcT1PMX01FPX01X11X21_v_v = .text:0x801D1E60; // type:function size:0x84 scope:local +BindVoidMethod__H2Z11GRaceStatusZb_P9lua_StatePCcT1PMX01FPX01X11_v_v = .text:0x801D1EE4; // type:function size:0x84 scope:local +BindVoidMethod__H2Z11GRaceStatusZf_P9lua_StatePCcT1PMX01FPX01X11_v_v = .text:0x801D1F68; // type:function size:0x84 scope:local +BindMethod__H2ZbZ8ISimable_P9lua_StatePCcT1PMX11CFPCX11_X01_v = .text:0x801D1FEC; // type:function size:0x84 scope:local +VoidFunctionArg4Thunk__H4ZP16GRuntimeInstanceZP16GRuntimeInstanceZfZb_P9lua_State_i = .text:0x801D2070; // type:function size:0xB8 scope:local +BindVoidFunction__H4ZP16GRuntimeInstanceZP16GRuntimeInstanceZfZb_P9lua_StatePCcPFX01X11X21X31_vT1_v = .text:0x801D2128; // type:function size:0x74 scope:local +VoidFunctionArg2Thunk__H2ZbZPCc_P9lua_State_i = .text:0x801D219C; // type:function size:0x70 scope:local +BindVoidFunction__H2ZbZPCc_P9lua_StatePCcPFX01X11_vT1_v = .text:0x801D220C; // type:function size:0x74 scope:local +FunctionArg2Thunk__H3ZiZP8ISimableZi_P9lua_State_i = .text:0x801D2280; // type:function size:0xE4 scope:local +BindFunction__H3ZiZP8ISimableZi_P9lua_StatePCcPFX11X21_X01T1_v = .text:0x801D2364; // type:function size:0x74 scope:local +Get__H1Zf_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D23D8; // type:function size:0x50 scope:global +Get__H1Zd_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D2428; // type:function size:0x50 scope:global +Get__H1Zx_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D2478; // type:function size:0x50 scope:global +Get__H1Zi_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D24C8; // type:function size:0x50 scope:global +Get__H1Zs_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D2518; // type:function size:0x50 scope:global +Get__H1ZSc_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D2568; // type:function size:0x50 scope:global +Get__H1ZUx_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D25B8; // type:function size:0x50 scope:global +Get__H1ZUi_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D2608; // type:function size:0x50 scope:global +Get__H1ZUs_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D2658; // type:function size:0x50 scope:global +Get__H1ZUc_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D26A8; // type:function size:0x50 scope:global +Get__H1Zb_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D26F8; // type:function size:0x50 scope:global +Get__H1ZQ26Attrib9StringKey_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D2748; // type:function size:0x50 scope:global +Get__H1ZPCc_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D2798; // type:function size:0x50 scope:global +Get__H1Zc_CQ26Attrib9AttributeUi_RCX01 = .text:0x801D27E8; // type:function size:0x50 scope:global +_M_erase__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZ18LuaAttribAccessorsZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZ18LuaAttribAccessorsZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2Z18LuaAttribAccessorsZ9_type_mapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCUiZ18LuaAttribAccessors = .text:0x801D2838; // type:function size:0x68 scope:global +_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZ18LuaAttribAccessorsZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZ18LuaAttribAccessorsZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2Z18LuaAttribAccessorsZ9_type_mapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZ18LuaAttribAccessorsT1 = .text:0x801D28A0; // type:function size:0x14C scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZ18LuaAttribAccessorsZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZ18LuaAttribAccessorsZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2Z18LuaAttribAccessorsZ9_type_mapRCQ24_STLt4pair2ZCUiZ18LuaAttribAccessors = .text:0x801D29EC; // type:function size:0x118 scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZ18LuaAttribAccessorsZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZ18LuaAttribAccessorsZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2Z18LuaAttribAccessorsZ9_type_mapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZ18LuaAttribAccessorsZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZ18LuaAttribAccessorsRCQ24_STLt4pair2ZCUiZ18LuaAttribAccessors = .text:0x801D2B04; // type:function size:0x26C scope:global +clear__Q24_STLt10_List_base2ZUiZQ33UTL3Stdt9Allocator2ZUiZ10_type_list = .text:0x801D2D70; // type:function size:0x78 scope:global +reserve__Q24_STLt6vector2ZUiZQ33UTL3Stdt9Allocator2ZUiZ19_type_ShuffleVectorUi = .text:0x801D2DE8; // type:function size:0x11C scope:global +__static_initialization_and_destruction_0 = .text:0x801D2F04; // type:function size:0x50 scope:local +__Q33UTL3Stdt3map3ZUiZPvZ23_type_LuaLargeFreeBlock = .text:0x801D2F54; // type:function size:0x74 scope:global +__Q33UTL3Stdt3map3ZUiZQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListZ32_type_ID_LuaMessageSubscriberMap = .text:0x801D2FC8; // type:function size:0x74 scope:global +__Q33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityListRCQ33UTL3Stdt6vector2ZP9GActivityZ24_type_ID_LuaActivityList = .text:0x801D303C; // type:function size:0xAC scope:global +_IHandle__13IOnlinePlayer = .text:0x801D30E8; // type:function size:0xC scope:global +__Q33UTL3Stdt3map3ZUiZ18LuaAttribAccessorsZ9_type_map = .text:0x801D30F4; // type:function size:0x74 scope:global +Thunk__10VoidBinderP9lua_State = .text:0x801D3168; // type:function size:0x30 scope:global +_IHandle__13IEngineDamage = .text:0x801D3198; // type:function size:0xC scope:global +_GetKind__12MNISComplete = .text:0x801D31A4; // type:function size:0x64 scope:global +_GetKind__16MNotifySpeedTrap = .text:0x801D3208; // type:function size:0x64 scope:global +_GetKind__20MNotifyRacePlacement = .text:0x801D326C; // type:function size:0x64 scope:global +_GetKind__17MNotifyKnockedOut = .text:0x801D32D0; // type:function size:0x64 scope:global +_GetKind__22MNotifyChallengePassed = .text:0x801D3334; // type:function size:0x64 scope:global +_GetKind__15MNotifyFinished = .text:0x801D3398; // type:function size:0x64 scope:global +Thunk__Q210VoidBindert4Arg11ZP16GRuntimeInstanceP9lua_State = .text:0x801D33FC; // type:function size:0x60 scope:global +Thunk__t6Binder1ZbP9lua_State = .text:0x801D345C; // type:function size:0x48 scope:global +Thunk__Q210VoidBindert4Arg11ZPCcP9lua_State = .text:0x801D34A4; // type:function size:0x4C scope:global +Thunk__Q210VoidBindert4Arg11ZfP9lua_State = .text:0x801D34F0; // type:function size:0x4C scope:global +Thunk__Q210VoidBindert4Arg11ZP8ISimableP9lua_State = .text:0x801D353C; // type:function size:0x90 scope:global +Thunk__Q210VoidBindert4Arg11ZiP9lua_State = .text:0x801D35CC; // type:function size:0x58 scope:global +Thunk__Q210VoidBindert4Arg11ZbP9lua_State = .text:0x801D3624; // type:function size:0x5C scope:global +Thunk__t6Binder1ZfP9lua_State = .text:0x801D3680; // type:function size:0x44 scope:global +Thunk__t6Binder1ZiP9lua_State = .text:0x801D36C4; // type:function size:0x68 scope:global +ThunkMethod__t16VoidMethodBinder1Z11GRaceStatusP9lua_State = .text:0x801D372C; // type:function size:0xAC scope:global +ThunkMethod__Q2t16VoidMethodBinder1Z11GRaceStatust4Arg11ZP16GRuntimeInstanceP9lua_State = .text:0x801D37D8; // type:function size:0xC8 scope:global +ThunkMethod__Q2t16VoidMethodBinder1Z11GRaceStatust4Arg11ZbP9lua_State = .text:0x801D38A0; // type:function size:0xC8 scope:global +ThunkMethod__Q2t16VoidMethodBinder1Z11GRaceStatust4Arg11ZfP9lua_State = .text:0x801D3968; // type:function size:0xB8 scope:global +ThunkMethod__t12MethodBinder2ZbZ8ISimableP9lua_State = .text:0x801D3A20; // type:function size:0xF8 scope:global +_GLOBAL_.I.LuaRealloc = .text:0x801D3B18; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x801D3B44; // type:label scope:local +__8E911Call = .text:0x801D3B44; // type:function size:0x1C scope:global +_._8E911Call = .text:0x801D3B60; // type:function size:0x38 scope:global +GetEventName__C8E911Call = .text:0x801D3B98; // type:function size:0xC scope:global +E911Call_MakeEvent_Callback__FPCv = .text:0x801D3BA4; // type:function size:0x28 scope:local +E911Call_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D3BCC; // type:function size:0x38 scope:local +E911Call_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D3C04; // type:function size:0x4 scope:local +__11EAcceleratefffiiiUiP8WTrigger = .text:0x801D3C08; // type:function size:0x3C scope:global +_._11EAccelerate = .text:0x801D3C44; // type:function size:0x284 scope:global +GetEventName__C11EAccelerate = .text:0x801D3EC8; // type:function size:0xC scope:global +EAccelerate_MakeEvent_Callback__FPCv = .text:0x801D3ED4; // type:function size:0x5C scope:local +EAccelerate_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D3F30; // type:function size:0x100 scope:local +EAccelerate_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D4030; // type:function size:0x4 scope:local +__7EAddSMSi = .text:0x801D4034; // type:function size:0x20 scope:global +_._7EAddSMS = .text:0x801D4054; // type:function size:0x84 scope:global +GetEventName__C7EAddSMS = .text:0x801D40D8; // type:function size:0xC scope:global +EAddSMS_MakeEvent_Callback__FPCv = .text:0x801D40E4; // type:function size:0x38 scope:local +EAddSMS_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D411C; // type:function size:0x64 scope:local +EAddSMS_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D4180; // type:function size:0x4 scope:local +__12EAIEngineRevUiUiUi = .text:0x801D4184; // type:function size:0x15C scope:global +_._12EAIEngineRev = .text:0x801D42E0; // type:function size:0x38 scope:global +GetEventName__C12EAIEngineRev = .text:0x801D4318; // type:function size:0xC scope:global +EAIEngineRev_MakeEvent_Callback__FPCv = .text:0x801D4324; // type:function size:0x44 scope:local +EAIEngineRev_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D4368; // type:function size:0xE4 scope:local +EAIEngineRev_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D444C; // type:function size:0x4 scope:local +__19EAudioRigidBodyTest = .text:0x801D4450; // type:function size:0x1C scope:global +_._19EAudioRigidBodyTest = .text:0x801D446C; // type:function size:0x38 scope:global +GetEventName__C19EAudioRigidBodyTest = .text:0x801D44A4; // type:function size:0xC scope:global +EAudioRigidBodyTest_MakeEvent_Callback__FPCv = .text:0x801D44B0; // type:function size:0x28 scope:local +__19EAudioSmackableTestf = .text:0x801D44D8; // type:function size:0x20 scope:global +_._19EAudioSmackableTest = .text:0x801D44F8; // type:function size:0x38 scope:global +GetEventName__C19EAudioSmackableTest = .text:0x801D4530; // type:function size:0xC scope:global +EAudioSmackableTest_MakeEvent_Callback__FPCv = .text:0x801D453C; // type:function size:0x38 scope:local +__15EAudioWorldTest = .text:0x801D4574; // type:function size:0x1C scope:global +_._15EAudioWorldTest = .text:0x801D4590; // type:function size:0x2B0 scope:global +GetEventName__C15EAudioWorldTest = .text:0x801D4840; // type:function size:0xC scope:global +EAudioWorldTest_MakeEvent_Callback__FPCv = .text:0x801D484C; // type:function size:0x28 scope:local +__9EAutoSave = .text:0x801D4874; // type:function size:0x1C scope:global +_._9EAutoSave = .text:0x801D4890; // type:function size:0x7C scope:global +GetEventName__C9EAutoSave = .text:0x801D490C; // type:function size:0xC scope:global +EAutoSave_MakeEvent_Callback__FPCv = .text:0x801D4918; // type:function size:0x28 scope:local +EAutoSave_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D4940; // type:function size:0x38 scope:local +EAutoSave_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D4978; // type:function size:0x4 scope:local +__13EAwardUpgradeUi = .text:0x801D497C; // type:function size:0x14C scope:global +_._13EAwardUpgrade = .text:0x801D4AC8; // type:function size:0x38 scope:global +GetEventName__C13EAwardUpgrade = .text:0x801D4B00; // type:function size:0xC scope:global +EAwardUpgrade_MakeEvent_Callback__FPCv = .text:0x801D4B0C; // type:function size:0x38 scope:local +__12EBailPursuitii = .text:0x801D4B44; // type:function size:0x24 scope:global +_._12EBailPursuit = .text:0x801D4B68; // type:function size:0xD4 scope:global +GetEventName__C12EBailPursuit = .text:0x801D4C3C; // type:function size:0xC scope:global +EBailPursuit_MakeEvent_Callback__FPCv = .text:0x801D4C48; // type:function size:0x3C scope:local +EBailPursuit_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D4C84; // type:function size:0x80 scope:local +EBailPursuit_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D4D04; // type:function size:0x4 scope:local +__12EBecomeAiCar = .text:0x801D4D08; // type:function size:0x1C scope:global +_._12EBecomeAiCar = .text:0x801D4D24; // type:function size:0x198 scope:global +GetEventName__C12EBecomeAiCar = .text:0x801D4EBC; // type:function size:0xC scope:global +EBecomeAiCar_MakeEvent_Callback__FPCv = .text:0x801D4EC8; // type:function size:0x28 scope:local +EBecomeAiCar_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D4EF0; // type:function size:0x38 scope:local +EBecomeAiCar_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D4F28; // type:function size:0x4 scope:local +__16EBecomePlayerCar = .text:0x801D4F2C; // type:function size:0x1C scope:global +_._16EBecomePlayerCar = .text:0x801D4F48; // type:function size:0x158 scope:global +GetEventName__C16EBecomePlayerCar = .text:0x801D50A0; // type:function size:0xC scope:global +EBecomePlayerCar_MakeEvent_Callback__FPCv = .text:0x801D50AC; // type:function size:0x28 scope:local +EBecomePlayerCar_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D50D4; // type:function size:0x38 scope:local +EBecomePlayerCar_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D510C; // type:function size:0x4 scope:local +__17EBecomePursuitCarUi = .text:0x801D5110; // type:function size:0x20 scope:global +_._17EBecomePursuitCar = .text:0x801D5130; // type:function size:0x118 scope:global +GetEventName__C17EBecomePursuitCar = .text:0x801D5248; // type:function size:0xC scope:global +EBecomePursuitCar_MakeEvent_Callback__FPCv = .text:0x801D5254; // type:function size:0x30 scope:local +EBecomePursuitCar_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D5284; // type:function size:0x40 scope:local +EBecomePursuitCar_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D52C4; // type:function size:0x4 scope:local +__16EBreakerStopCopsffGQ25UMath7Vector4 = .text:0x801D52C8; // type:function size:0x48 scope:global +_._16EBreakerStopCops = .text:0x801D5310; // type:function size:0x124 scope:global +GetEventName__C16EBreakerStopCops = .text:0x801D5434; // type:function size:0xC scope:global +EBreakerStopCops_MakeEvent_Callback__FPCv = .text:0x801D5440; // type:function size:0x6C scope:local +EBreakerStopCops_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D54AC; // type:function size:0xA8 scope:local +EBreakerStopCops_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D5554; // type:function size:0x4 scope:local +__18ECameraPhotoFinish = .text:0x801D5558; // type:function size:0x1C scope:global +_._18ECameraPhotoFinish = .text:0x801D5574; // type:function size:0xDC scope:global +GetEventName__C18ECameraPhotoFinish = .text:0x801D5650; // type:function size:0xC scope:global +ECameraPhotoFinish_MakeEvent_Callback__FPCv = .text:0x801D565C; // type:function size:0x28 scope:local +ECameraPhotoFinish_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D5684; // type:function size:0x38 scope:local +ECameraPhotoFinish_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D56BC; // type:function size:0x4 scope:local +__12ECameraShake = .text:0x801D56C0; // type:function size:0x1C scope:global +_._12ECameraShake = .text:0x801D56DC; // type:function size:0xAC scope:global +GetEventName__C12ECameraShake = .text:0x801D5788; // type:function size:0xC scope:global +ECameraShake_MakeEvent_Callback__FPCv = .text:0x801D5794; // type:function size:0x28 scope:local +ECameraShake_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D57BC; // type:function size:0x38 scope:local +ECameraShake_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D57F4; // type:function size:0x4 scope:local +__9ECellCalli = .text:0x801D57F8; // type:function size:0x20 scope:global +_._9ECellCall = .text:0x801D5818; // type:function size:0x188 scope:global +GetEventName__C9ECellCall = .text:0x801D59A0; // type:function size:0xC scope:global +ECellCall_MakeEvent_Callback__FPCv = .text:0x801D59AC; // type:function size:0x38 scope:local +ECellCall_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D59E4; // type:function size:0x64 scope:local +ECellCall_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D5A48; // type:function size:0x4 scope:local +__12EChangeStateUiUi = .text:0x801D5A4C; // type:function size:0x24 scope:global +_._12EChangeState = .text:0x801D5A70; // type:function size:0x94 scope:global +GetEventName__C12EChangeState = .text:0x801D5B04; // type:function size:0xC scope:global +EChangeState_MakeEvent_Callback__FPCv = .text:0x801D5B10; // type:function size:0x3C scope:local +__16ECinematicMomentPCcT1f = .text:0x801D5B4C; // type:function size:0x28 scope:global +_._16ECinematicMoment = .text:0x801D5B74; // type:function size:0x9C scope:global +GetEventName__C16ECinematicMoment = .text:0x801D5C10; // type:function size:0xC scope:global +ECinematicMoment_MakeEvent_Callback__FPCv = .text:0x801D5C1C; // type:function size:0x40 scope:local +ECinematicMoment_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D5C5C; // type:function size:0x80 scope:local +ECinematicMoment_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D5CDC; // type:function size:0x48 scope:local +__10ECollisionGQ33Sim9Collision4Info = .text:0x801D5D24; // type:function size:0x70 scope:global +_._10ECollision = .text:0x801D5D94; // type:function size:0x264 scope:global +GetEventName__C10ECollision = .text:0x801D5FF8; // type:function size:0xC scope:global +__18ECommitAudioAssets = .text:0x801D6004; // type:function size:0x1C scope:global +_._18ECommitAudioAssets = .text:0x801D6020; // type:function size:0x70 scope:global +GetEventName__C18ECommitAudioAssets = .text:0x801D6090; // type:function size:0xC scope:global +ECommitAudioAssets_MakeEvent_Callback__FPCv = .text:0x801D609C; // type:function size:0x28 scope:local +__19ECommitRenderAssets = .text:0x801D60C4; // type:function size:0x1C scope:global +_._19ECommitRenderAssets = .text:0x801D60E0; // type:function size:0x6C scope:global +GetEventName__C19ECommitRenderAssets = .text:0x801D614C; // type:function size:0xC scope:global +ECommitRenderAssets_MakeEvent_Callback__FPCv = .text:0x801D6158; // type:function size:0x28 scope:local +__13EDamageLightsG6UCrc32Ui = .text:0x801D6180; // type:function size:0x28 scope:global +_._13EDamageLights = .text:0x801D61A8; // type:function size:0x104 scope:global +GetEventName__C13EDamageLights = .text:0x801D62AC; // type:function size:0xC scope:global +EDamageLights_MakeEvent_Callback__FPCv = .text:0x801D62B8; // type:function size:0x48 scope:local +EDamageLights_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D6300; // type:function size:0x68 scope:local +EDamageLights_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D6368; // type:function size:0x4 scope:local +__11EDDaySpeech = .text:0x801D636C; // type:function size:0x1C scope:global +_._11EDDaySpeech = .text:0x801D6388; // type:function size:0x5C scope:global +GetEventName__C11EDDaySpeech = .text:0x801D63E4; // type:function size:0xC scope:global +EDDaySpeech_MakeEvent_Callback__FPCv = .text:0x801D63F0; // type:function size:0x28 scope:local +EDDaySpeech_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D6418; // type:function size:0x38 scope:local +EDDaySpeech_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D6450; // type:function size:0x4 scope:local +__11EDebugPrintPCc = .text:0x801D6454; // type:function size:0x48 scope:global +_._11EDebugPrint = .text:0x801D649C; // type:function size:0x38 scope:global +GetEventName__C11EDebugPrint = .text:0x801D64D4; // type:function size:0xC scope:global +EDebugPrint_MakeEvent_Callback__FPCv = .text:0x801D64E0; // type:function size:0x38 scope:local +EDebugPrint_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D6518; // type:function size:0x5C scope:local +EDebugPrint_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D6574; // type:function size:0x28 scope:local +__19EDebugScreenMessagePCcfii = .text:0x801D659C; // type:function size:0x68 scope:global +_._19EDebugScreenMessage = .text:0x801D6604; // type:function size:0x38 scope:global +GetEventName__C19EDebugScreenMessage = .text:0x801D663C; // type:function size:0xC scope:global +EDebugScreenMessage_MakeEvent_Callback__FPCv = .text:0x801D6648; // type:function size:0x44 scope:local +EDebugScreenMessage_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D668C; // type:function size:0xB0 scope:local +EDebugScreenMessage_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D673C; // type:function size:0x28 scope:local +__15EDeliverMessagePQ26Hermes7MessageG6UCrc32 = .text:0x801D6764; // type:function size:0x54 scope:global +_._15EDeliverMessage = .text:0x801D67B8; // type:function size:0x70 scope:global +GetEventName__C15EDeliverMessage = .text:0x801D6828; // type:function size:0xC scope:global +EDeliverMessage_MakeEvent_Callback__FPCv = .text:0x801D6834; // type:function size:0x48 scope:local +__15EDestroyVehicleUi = .text:0x801D687C; // type:function size:0x20 scope:global +_._15EDestroyVehicle = .text:0x801D689C; // type:function size:0xDC scope:global +GetEventName__C15EDestroyVehicle = .text:0x801D6978; // type:function size:0xC scope:global +EDestroyVehicle_MakeEvent_Callback__FPCv = .text:0x801D6984; // type:function size:0x30 scope:local +EDestroyVehicle_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D69B4; // type:function size:0x40 scope:local +EDestroyVehicle_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D69F4; // type:function size:0x4 scope:local +__22EDisablePursuitVehicleUi = .text:0x801D69F8; // type:function size:0x20 scope:global +_._22EDisablePursuitVehicle = .text:0x801D6A18; // type:function size:0xD8 scope:global +GetEventName__C22EDisablePursuitVehicle = .text:0x801D6AF0; // type:function size:0xC scope:global +EDisablePursuitVehicle_MakeEvent_Callback__FPCv = .text:0x801D6AFC; // type:function size:0x30 scope:local +EDisablePursuitVehicle_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D6B2C; // type:function size:0x40 scope:local +EDisablePursuitVehicle_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D6B6C; // type:function size:0x4 scope:local +__15EDisableTriggerPQ24CARP7Trigger = .text:0x801D6B70; // type:function size:0x20 scope:global +_._15EDisableTrigger = .text:0x801D6B90; // type:function size:0x80 scope:global +GetEventName__C15EDisableTrigger = .text:0x801D6C10; // type:function size:0xC scope:global +EDisableTrigger_MakeEvent_Callback__FPCv = .text:0x801D6C1C; // type:function size:0x38 scope:local +EDisableTrigger_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D6C54; // type:function size:0x5C scope:local +EDisableTrigger_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D6CB0; // type:function size:0x28 scope:local +__14EDispIntroRace = .text:0x801D6CD8; // type:function size:0x1C scope:global +_._14EDispIntroRace = .text:0x801D6CF4; // type:function size:0x5C scope:global +GetEventName__C14EDispIntroRace = .text:0x801D6D50; // type:function size:0xC scope:global +EDispIntroRace_MakeEvent_Callback__FPCv = .text:0x801D6D5C; // type:function size:0x28 scope:local +EDispIntroRace_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D6D84; // type:function size:0x38 scope:local +EDispIntroRace_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D6DBC; // type:function size:0x4 scope:local +__14EDynamicRegioniGQ25UMath7Vector4N22Ui = .text:0x801D6DC0; // type:function size:0xA0 scope:global +_._14EDynamicRegion = .text:0x801D6E60; // type:function size:0xC0 scope:global +GetEventName__C14EDynamicRegion = .text:0x801D6F20; // type:function size:0xC scope:global +EDynamicRegion_MakeEvent_Callback__FPCv = .text:0x801D6F2C; // type:function size:0xC4 scope:local +EDynamicRegion_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D6FF0; // type:function size:0xF0 scope:local +EDynamicRegion_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D70E0; // type:function size:0x4 scope:local +__16EEnableAIPhysicsUifUi = .text:0x801D70E4; // type:function size:0x28 scope:global +_._16EEnableAIPhysics = .text:0x801D710C; // type:function size:0x1DC scope:global +GetEventName__C16EEnableAIPhysics = .text:0x801D72E8; // type:function size:0xC scope:global +EEnableAIPhysics_MakeEvent_Callback__FPCv = .text:0x801D72F4; // type:function size:0x40 scope:local +__23EEnableCollisionElementiPQ24CARP15CollisionObject = .text:0x801D7334; // type:function size:0x24 scope:global +_._23EEnableCollisionElement = .text:0x801D7358; // type:function size:0x74 scope:global +GetEventName__C23EEnableCollisionElement = .text:0x801D73CC; // type:function size:0xC scope:global +EEnableCollisionElement_MakeEvent_Callback__FPCv = .text:0x801D73D8; // type:function size:0x3C scope:local +EEnableCollisionElement_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D7414; // type:function size:0x78 scope:local +EEnableCollisionElement_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D748C; // type:function size:0x28 scope:local +__15EEnableModelingiUi = .text:0x801D74B4; // type:function size:0x24 scope:global +_._15EEnableModeling = .text:0x801D74D8; // type:function size:0x104 scope:global +GetEventName__C15EEnableModeling = .text:0x801D75DC; // type:function size:0xC scope:global +EEnableModeling_MakeEvent_Callback__FPCv = .text:0x801D75E8; // type:function size:0x40 scope:local +EEnableModeling_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D7628; // type:function size:0x6C scope:local +EEnableModeling_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D7694; // type:function size:0x4 scope:local +__14EEnableTriggerPQ24CARP7Trigger = .text:0x801D7698; // type:function size:0x20 scope:global +_._14EEnableTrigger = .text:0x801D76B8; // type:function size:0x80 scope:global +GetEventName__C14EEnableTrigger = .text:0x801D7738; // type:function size:0xC scope:global +EEnableTrigger_MakeEvent_Callback__FPCv = .text:0x801D7744; // type:function size:0x38 scope:local +EEnableTrigger_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D777C; // type:function size:0x5C scope:local +EEnableTrigger_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D77D8; // type:function size:0x28 scope:local +__11EEndCarStopiUi = .text:0x801D7800; // type:function size:0x24 scope:global +_._11EEndCarStop = .text:0x801D7824; // type:function size:0xE8 scope:global +GetEventName__C11EEndCarStop = .text:0x801D790C; // type:function size:0xC scope:global +EEndCarStop_MakeEvent_Callback__FPCv = .text:0x801D7918; // type:function size:0x40 scope:local +EEndCarStop_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D7958; // type:function size:0x6C scope:local +EEndCarStop_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D79C4; // type:function size:0x4 scope:local +__12EEngineBlownP10HSIMABLE__ = .text:0x801D79C8; // type:function size:0x20 scope:global +_._12EEngineBlown = .text:0x801D79E8; // type:function size:0x20C scope:global +GetEventName__C12EEngineBlown = .text:0x801D7BF4; // type:function size:0xC scope:global +EEngineBlown_MakeEvent_Callback__FPCv = .text:0x801D7C00; // type:function size:0x38 scope:local +__9EEnterBini = .text:0x801D7C38; // type:function size:0x164 scope:global +_._9EEnterBin = .text:0x801D7D9C; // type:function size:0x38 scope:global +GetEventName__C9EEnterBin = .text:0x801D7DD4; // type:function size:0xC scope:global +EEnterBin_MakeEvent_Callback__FPCv = .text:0x801D7DE0; // type:function size:0x38 scope:local +EEnterBin_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D7E18; // type:function size:0x64 scope:local +EEnterBin_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D7E7C; // type:function size:0x4 scope:local +__22EEnterEngagableTriggerP16GRuntimeInstance = .text:0x801D7E80; // type:function size:0x20 scope:global +_._22EEnterEngagableTrigger = .text:0x801D7EA0; // type:function size:0xE4 scope:global +GetEventName__C22EEnterEngagableTrigger = .text:0x801D7F84; // type:function size:0xC scope:global +EEnterEngagableTrigger_MakeEvent_Callback__FPCv = .text:0x801D7F90; // type:function size:0x38 scope:local +EEnterEngagableTrigger_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D7FC8; // type:function size:0x5C scope:local +EEnterEngagableTrigger_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D8024; // type:function size:0x28 scope:local +__21EExitEngagableTriggerP16GRuntimeInstance = .text:0x801D804C; // type:function size:0x20 scope:global +_._21EExitEngagableTrigger = .text:0x801D806C; // type:function size:0xE0 scope:global +GetEventName__C21EExitEngagableTrigger = .text:0x801D814C; // type:function size:0xC scope:global +EExitEngagableTrigger_MakeEvent_Callback__FPCv = .text:0x801D8158; // type:function size:0x38 scope:local +EExitEngagableTrigger_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D8190; // type:function size:0x5C scope:local +EExitEngagableTrigger_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D81EC; // type:function size:0x28 scope:local +__26EFadeScreenNoLoadingBarOff = .text:0x801D8214; // type:function size:0x6C scope:global +_._26EFadeScreenNoLoadingBarOff = .text:0x801D8280; // type:function size:0x38 scope:global +GetEventName__C26EFadeScreenNoLoadingBarOff = .text:0x801D82B8; // type:function size:0xC scope:global +EFadeScreenNoLoadingBarOff_MakeEvent_Callback__FPCv = .text:0x801D82C4; // type:function size:0x28 scope:local +EFadeScreenNoLoadingBarOff_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D82EC; // type:function size:0x38 scope:local +EFadeScreenNoLoadingBarOff_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D8324; // type:function size:0x4 scope:local +__25EFadeScreenNoLoadingBarOn = .text:0x801D8328; // type:function size:0x7C scope:global +_._25EFadeScreenNoLoadingBarOn = .text:0x801D83A4; // type:function size:0x38 scope:global +GetEventName__C25EFadeScreenNoLoadingBarOn = .text:0x801D83DC; // type:function size:0xC scope:global +EFadeScreenNoLoadingBarOn_MakeEvent_Callback__FPCv = .text:0x801D83E8; // type:function size:0x28 scope:local +EFadeScreenNoLoadingBarOn_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D8410; // type:function size:0x38 scope:local +EFadeScreenNoLoadingBarOn_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D8448; // type:function size:0x4 scope:local +__14EFadeScreenOffi = .text:0x801D844C; // type:function size:0x4C scope:global +_._14EFadeScreenOff = .text:0x801D8498; // type:function size:0x1A0 scope:global +GetEventName__C14EFadeScreenOff = .text:0x801D8638; // type:function size:0xC scope:global +EFadeScreenOff_MakeEvent_Callback__FPCv = .text:0x801D8644; // type:function size:0x38 scope:local +__13EFadeScreenOnb = .text:0x801D867C; // type:function size:0x158 scope:global +_._13EFadeScreenOn = .text:0x801D87D4; // type:function size:0x38 scope:global +GetEventName__C13EFadeScreenOn = .text:0x801D880C; // type:function size:0xC scope:global +EFadeScreenOn_MakeEvent_Callback__FPCv = .text:0x801D8818; // type:function size:0x38 scope:local +__14EFireEventListPQ24CARP9EventListii = .text:0x801D8850; // type:function size:0x74 scope:global +_._14EFireEventList = .text:0x801D88C4; // type:function size:0xA0 scope:global +GetEventName__C14EFireEventList = .text:0x801D8964; // type:function size:0xC scope:global +EFireEventList_MakeEvent_Callback__FPCv = .text:0x801D8970; // type:function size:0x40 scope:local +EFireEventList_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D89B0; // type:function size:0x94 scope:local +EFireEventList_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D8A44; // type:function size:0x28 scope:local +__18EFireRandomTriggerPQ24CARP7TriggerfT1fT1fT1fUi = .text:0x801D8A6C; // type:function size:0x40 scope:global +_._18EFireRandomTrigger = .text:0x801D8AAC; // type:function size:0x120 scope:global +GetEventName__C18EFireRandomTrigger = .text:0x801D8BCC; // type:function size:0xC scope:global +EFireRandomTrigger_MakeEvent_Callback__FPCv = .text:0x801D8BD8; // type:function size:0x5C scope:local +EFireRandomTrigger_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D8C34; // type:function size:0x108 scope:local +EFireRandomTrigger_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D8D3C; // type:function size:0x68 scope:local +__26EFireTriggerSpeedConditionPQ24CARP7TriggerfiUi = .text:0x801D8DA4; // type:function size:0x2C scope:global +_._26EFireTriggerSpeedCondition = .text:0x801D8DD0; // type:function size:0x12C scope:global +GetEventName__C26EFireTriggerSpeedCondition = .text:0x801D8EFC; // type:function size:0xC scope:global +EFireTriggerSpeedCondition_MakeEvent_Callback__FPCv = .text:0x801D8F08; // type:function size:0x48 scope:local +EFireTriggerSpeedCondition_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D8F50; // type:function size:0x9C scope:local +EFireTriggerSpeedCondition_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D8FEC; // type:function size:0x28 scope:local +__13EForceCarStopiUi = .text:0x801D9014; // type:function size:0x24 scope:global +_._13EForceCarStop = .text:0x801D9038; // type:function size:0xF8 scope:global +GetEventName__C13EForceCarStop = .text:0x801D9130; // type:function size:0xC scope:global +EForceCarStop_MakeEvent_Callback__FPCv = .text:0x801D913C; // type:function size:0x40 scope:local +EForceCarStop_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D917C; // type:function size:0x6C scope:local +EForceCarStop_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D91E8; // type:function size:0x4 scope:local +__12EGPSFinished = .text:0x801D91EC; // type:function size:0x1C scope:global +_._12EGPSFinished = .text:0x801D9208; // type:function size:0x38 scope:global +GetEventName__C12EGPSFinished = .text:0x801D9240; // type:function size:0xC scope:global +EGPSFinished_MakeEvent_Callback__FPCv = .text:0x801D924C; // type:function size:0x28 scope:local +__8EGPSLost = .text:0x801D9274; // type:function size:0x1C scope:global +_._8EGPSLost = .text:0x801D9290; // type:function size:0x10C scope:global +GetEventName__C8EGPSLost = .text:0x801D939C; // type:function size:0xC scope:global +EGPSLost_MakeEvent_Callback__FPCv = .text:0x801D93A8; // type:function size:0x28 scope:local +__17EGTriggerInternalUiiUi = .text:0x801D93D0; // type:function size:0xD8 scope:global +_._17EGTriggerInternal = .text:0x801D94A8; // type:function size:0x38 scope:global +GetEventName__C17EGTriggerInternal = .text:0x801D94E0; // type:function size:0xC scope:global +EGTriggerInternal_MakeEvent_Callback__FPCv = .text:0x801D94EC; // type:function size:0x48 scope:local +__11EHideObjectUi = .text:0x801D9534; // type:function size:0x20 scope:global +_._11EHideObject = .text:0x801D9554; // type:function size:0xB4 scope:global +GetEventName__C11EHideObject = .text:0x801D9608; // type:function size:0xC scope:global +EHideObject_MakeEvent_Callback__FPCv = .text:0x801D9614; // type:function size:0x30 scope:local +EHideObject_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D9644; // type:function size:0x40 scope:local +EHideObject_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D9684; // type:function size:0x4 scope:local +__9EHidePartG6UCrc32Ui = .text:0x801D9688; // type:function size:0x28 scope:global +_._9EHidePart = .text:0x801D96B0; // type:function size:0xB8 scope:global +GetEventName__C9EHidePart = .text:0x801D9768; // type:function size:0xC scope:global +EHidePart_MakeEvent_Callback__FPCv = .text:0x801D9774; // type:function size:0x48 scope:local +EHidePart_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D97BC; // type:function size:0x68 scope:local +EHidePart_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D9824; // type:function size:0x4 scope:local +__20EHideRaceOverMessageP7IPlayer = .text:0x801D9828; // type:function size:0x9C scope:global +_._20EHideRaceOverMessage = .text:0x801D98C4; // type:function size:0x38 scope:global +GetEventName__C20EHideRaceOverMessage = .text:0x801D98FC; // type:function size:0xC scope:global +EHideRaceOverMessage_MakeEvent_Callback__FPCv = .text:0x801D9908; // type:function size:0x38 scope:local +EHideRaceOverMessage_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D9940; // type:function size:0x5C scope:local +EHideRaceOverMessage_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D999C; // type:function size:0x28 scope:local +__14EJointDetachedP10HSIMABLE__ = .text:0x801D99C4; // type:function size:0x20 scope:global +_._14EJointDetached = .text:0x801D99E4; // type:function size:0x15C scope:global +GetEventName__C14EJointDetached = .text:0x801D9B40; // type:function size:0xC scope:global +EJointDetached_MakeEvent_Callback__FPCv = .text:0x801D9B4C; // type:function size:0x38 scope:local +__19EJumpToStrategyFlow = .text:0x801D9B84; // type:function size:0x1C scope:global +_._19EJumpToStrategyFlow = .text:0x801D9BA0; // type:function size:0x5C scope:global +GetEventName__C19EJumpToStrategyFlow = .text:0x801D9BFC; // type:function size:0xC scope:global +EJumpToStrategyFlow_MakeEvent_Callback__FPCv = .text:0x801D9C08; // type:function size:0x28 scope:local +EJumpToStrategyFlow_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D9C30; // type:function size:0x38 scope:local +EJumpToStrategyFlow_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D9C68; // type:function size:0x4 scope:local +__10EKillJointUi = .text:0x801D9C6C; // type:function size:0x20 scope:global +_._10EKillJoint = .text:0x801D9C8C; // type:function size:0xD8 scope:global +GetEventName__C10EKillJoint = .text:0x801D9D64; // type:function size:0xC scope:global +EKillJoint_MakeEvent_Callback__FPCv = .text:0x801D9D70; // type:function size:0x30 scope:local +EKillJoint_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D9DA0; // type:function size:0x40 scope:local +EKillJoint_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D9DE0; // type:function size:0x4 scope:local +__11EKillObjectUiUi = .text:0x801D9DE4; // type:function size:0x24 scope:global +_._11EKillObject = .text:0x801D9E08; // type:function size:0xB4 scope:global +GetEventName__C11EKillObject = .text:0x801D9EBC; // type:function size:0xC scope:global +EKillObject_MakeEvent_Callback__FPCv = .text:0x801D9EC8; // type:function size:0x38 scope:local +EKillObject_MakeEvent_LuaBinding__FP9lua_State = .text:0x801D9F00; // type:function size:0x48 scope:local +EKillObject_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801D9F48; // type:function size:0x4 scope:local +__14EKnockoutRacerP10GRacerInfo = .text:0x801D9F4C; // type:function size:0x20 scope:global +_._14EKnockoutRacer = .text:0x801D9F6C; // type:function size:0x204 scope:global +GetEventName__C14EKnockoutRacer = .text:0x801DA170; // type:function size:0xC scope:global +EKnockoutRacer_MakeEvent_Callback__FPCv = .text:0x801DA17C; // type:function size:0x38 scope:local +__17ELoadingScreenOff = .text:0x801DA1B4; // type:function size:0x8C scope:global +_._17ELoadingScreenOff = .text:0x801DA240; // type:function size:0x7C scope:global +GetEventName__C17ELoadingScreenOff = .text:0x801DA2BC; // type:function size:0xC scope:global +ELoadingScreenOff_MakeEvent_Callback__FPCv = .text:0x801DA2C8; // type:function size:0x28 scope:local +__16ELoadingScreenOnQ213LoadingScreen18LoadingScreenTypes = .text:0x801DA2F0; // type:function size:0x16C scope:global +_._16ELoadingScreenOn = .text:0x801DA45C; // type:function size:0x38 scope:global +GetEventName__C16ELoadingScreenOn = .text:0x801DA494; // type:function size:0xC scope:global +ELoadingScreenOn_MakeEvent_Callback__FPCv = .text:0x801DA4A0; // type:function size:0x38 scope:local +__9ELoadLostUi = .text:0x801DA4D8; // type:function size:0x20 scope:global +_._9ELoadLost = .text:0x801DA4F8; // type:function size:0x1D8 scope:global +GetEventName__C9ELoadLost = .text:0x801DA6D0; // type:function size:0xC scope:global +ELoadLost_MakeEvent_Callback__FPCv = .text:0x801DA6DC; // type:function size:0x30 scope:local +ELoadLost_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DA70C; // type:function size:0x40 scope:local +ELoadLost_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DA74C; // type:function size:0x4 scope:local +__10EMissShiftP10HSIMABLE__f = .text:0x801DA750; // type:function size:0x24 scope:global +_._10EMissShift = .text:0x801DA774; // type:function size:0xE8 scope:global +GetEventName__C10EMissShift = .text:0x801DA85C; // type:function size:0xC scope:global +EMissShift_MakeEvent_Callback__FPCv = .text:0x801DA868; // type:function size:0x3C scope:local +__11EMomentStrmGQ25UMath7Vector4N21UiPCcUi = .text:0x801DA8A4; // type:function size:0xA4 scope:global +_._11EMomentStrm = .text:0x801DA948; // type:function size:0x1B4 scope:global +GetEventName__C11EMomentStrm = .text:0x801DAAFC; // type:function size:0xC scope:global +EMomentStrm_MakeEvent_Callback__FPCv = .text:0x801DAB08; // type:function size:0xC8 scope:local +EMomentStrm_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DABD0; // type:function size:0x100 scope:local +EMomentStrm_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DACD0; // type:function size:0x28 scope:local +__16ENISAeroDynamicsf = .text:0x801DACF8; // type:function size:0x24 scope:global +_._16ENISAeroDynamics = .text:0x801DAD1C; // type:function size:0x38 scope:global +GetEventName__C16ENISAeroDynamics = .text:0x801DAD54; // type:function size:0xC scope:global +ENISAeroDynamics_MakeEvent_Callback__FPCv = .text:0x801DAD60; // type:function size:0x38 scope:local +ENISAeroDynamics_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DAD98; // type:function size:0x58 scope:local +ENISAeroDynamics_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DADF0; // type:function size:0x4 scope:local +__13ENISBrakelockUiUiUi = .text:0x801DADF4; // type:function size:0xF8 scope:global +_._13ENISBrakelock = .text:0x801DAEEC; // type:function size:0x38 scope:global +GetEventName__C13ENISBrakelock = .text:0x801DAF24; // type:function size:0xC scope:global +ENISBrakelock_MakeEvent_Callback__FPCv = .text:0x801DAF30; // type:function size:0x44 scope:local +ENISBrakelock_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DAF74; // type:function size:0xE0 scope:local +ENISBrakelock_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DB054; // type:function size:0x4 scope:local +__11ENISBurnoutfUi = .text:0x801DB058; // type:function size:0xD0 scope:global +_._11ENISBurnout = .text:0x801DB128; // type:function size:0x38 scope:global +GetEventName__C11ENISBurnout = .text:0x801DB160; // type:function size:0xC scope:global +ENISBurnout_MakeEvent_Callback__FPCv = .text:0x801DB16C; // type:function size:0x40 scope:local +ENISBurnout_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DB1AC; // type:function size:0x60 scope:local +ENISBurnout_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DB20C; // type:function size:0x4 scope:local +__18ENISCarDamageResetUi = .text:0x801DB210; // type:function size:0xC8 scope:global +_._18ENISCarDamageReset = .text:0x801DB2D8; // type:function size:0x38 scope:global +GetEventName__C18ENISCarDamageReset = .text:0x801DB310; // type:function size:0xC scope:global +ENISCarDamageReset_MakeEvent_Callback__FPCv = .text:0x801DB31C; // type:function size:0x30 scope:local +ENISCarDamageReset_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DB34C; // type:function size:0x40 scope:local +ENISCarDamageReset_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DB38C; // type:function size:0x4 scope:local +__12ENISCarPitchffUi = .text:0x801DB390; // type:function size:0xD8 scope:global +_._12ENISCarPitch = .text:0x801DB468; // type:function size:0x38 scope:global +GetEventName__C12ENISCarPitch = .text:0x801DB4A0; // type:function size:0xC scope:global +ENISCarPitch_MakeEvent_Callback__FPCv = .text:0x801DB4AC; // type:function size:0x44 scope:local +ENISCarPitch_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DB4F0; // type:function size:0x80 scope:local +ENISCarPitch_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DB570; // type:function size:0x4 scope:local +__11ENISCarRollffUi = .text:0x801DB574; // type:function size:0xD8 scope:global +_._11ENISCarRoll = .text:0x801DB64C; // type:function size:0x38 scope:global +GetEventName__C11ENISCarRoll = .text:0x801DB684; // type:function size:0xC scope:global +ENISCarRoll_MakeEvent_Callback__FPCv = .text:0x801DB690; // type:function size:0x44 scope:local +ENISCarRoll_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DB6D4; // type:function size:0x80 scope:local +ENISCarRoll_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DB754; // type:function size:0x4 scope:local +__12ENISCarShakeffffUi = .text:0x801DB758; // type:function size:0xE8 scope:global +_._12ENISCarShake = .text:0x801DB840; // type:function size:0x38 scope:global +GetEventName__C12ENISCarShake = .text:0x801DB878; // type:function size:0xC scope:global +ENISCarShake_MakeEvent_Callback__FPCv = .text:0x801DB884; // type:function size:0x4C scope:local +ENISCarShake_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DB8D0; // type:function size:0xB8 scope:local +ENISCarShake_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DB988; // type:function size:0x4 scope:local +__14ENISConstraintfUi = .text:0x801DB98C; // type:function size:0xD0 scope:global +_._14ENISConstraint = .text:0x801DBA5C; // type:function size:0x38 scope:global +GetEventName__C14ENISConstraint = .text:0x801DBA94; // type:function size:0xC scope:global +ENISConstraint_MakeEvent_Callback__FPCv = .text:0x801DBAA0; // type:function size:0x40 scope:local +ENISConstraint_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DBAE0; // type:function size:0x60 scope:local +ENISConstraint_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DBB40; // type:function size:0x4 scope:local +__15ENISCopCarDoorsifff = .text:0x801DBB44; // type:function size:0x60 scope:global +_._15ENISCopCarDoors = .text:0x801DBBA4; // type:function size:0x38 scope:global +GetEventName__C15ENISCopCarDoors = .text:0x801DBBDC; // type:function size:0xC scope:global +ENISCopCarDoors_MakeEvent_Callback__FPCv = .text:0x801DBBE8; // type:function size:0x44 scope:local +ENISCopCarDoors_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DBC2C; // type:function size:0xB0 scope:local +ENISCopCarDoors_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DBCDC; // type:function size:0x4 scope:local +__13ENISCopLightsiffff = .text:0x801DBCE0; // type:function size:0x68 scope:global +_._13ENISCopLights = .text:0x801DBD48; // type:function size:0x38 scope:global +GetEventName__C13ENISCopLights = .text:0x801DBD80; // type:function size:0xC scope:global +ENISCopLights_MakeEvent_Callback__FPCv = .text:0x801DBD8C; // type:function size:0x48 scope:local +ENISCopLights_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DBDD4; // type:function size:0xCC scope:local +ENISCopLights_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DBEA0; // type:function size:0x4 scope:local +__10ENISDetachfUi = .text:0x801DBEA4; // type:function size:0x24 scope:global +_._10ENISDetach = .text:0x801DBEC8; // type:function size:0xE0 scope:global +GetEventName__C10ENISDetach = .text:0x801DBFA8; // type:function size:0xC scope:global +ENISDetach_MakeEvent_Callback__FPCv = .text:0x801DBFB4; // type:function size:0x40 scope:local +ENISDetach_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DBFF4; // type:function size:0x60 scope:local +ENISDetach_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DC054; // type:function size:0x4 scope:local +__10ENISDetaili = .text:0x801DC058; // type:function size:0x20 scope:global +_._10ENISDetail = .text:0x801DC078; // type:function size:0xB0 scope:global +GetEventName__C10ENISDetail = .text:0x801DC128; // type:function size:0xC scope:global +ENISDetail_MakeEvent_Callback__FPCv = .text:0x801DC134; // type:function size:0x38 scope:local +ENISDetail_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DC16C; // type:function size:0x64 scope:local +ENISDetail_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DC1D0; // type:function size:0x4 scope:local +__11ENISFakeFarf = .text:0x801DC1D4; // type:function size:0x20 scope:global +_._11ENISFakeFar = .text:0x801DC1F4; // type:function size:0x38 scope:global +GetEventName__C11ENISFakeFar = .text:0x801DC22C; // type:function size:0xC scope:global +ENISFakeFar_MakeEvent_Callback__FPCv = .text:0x801DC238; // type:function size:0x38 scope:local +ENISFakeFar_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DC270; // type:function size:0x58 scope:local +ENISFakeFar_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DC2C8; // type:function size:0x4 scope:local +__10ENISFreezei = .text:0x801DC2CC; // type:function size:0x90 scope:global +_._10ENISFreeze = .text:0x801DC35C; // type:function size:0x38 scope:global +GetEventName__C10ENISFreeze = .text:0x801DC394; // type:function size:0xC scope:global +ENISFreeze_MakeEvent_Callback__FPCv = .text:0x801DC3A0; // type:function size:0x38 scope:local +ENISFreeze_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DC3D8; // type:function size:0x64 scope:local +ENISFreeze_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DC43C; // type:function size:0x4 scope:local +__17ENISHideCharacterPCci = .text:0x801DC440; // type:function size:0x10C scope:global +_._17ENISHideCharacter = .text:0x801DC54C; // type:function size:0x38 scope:global +GetEventName__C17ENISHideCharacter = .text:0x801DC584; // type:function size:0xC scope:global +ENISHideCharacter_MakeEvent_Callback__FPCv = .text:0x801DC590; // type:function size:0x3C scope:local +ENISHideCharacter_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DC5CC; // type:function size:0x78 scope:local +ENISHideCharacter_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DC644; // type:function size:0x28 scope:local +__10ENISLightsUiUiUi = .text:0x801DC66C; // type:function size:0x148 scope:global +_._10ENISLights = .text:0x801DC7B4; // type:function size:0x38 scope:global +GetEventName__C10ENISLights = .text:0x801DC7EC; // type:function size:0xC scope:global +ENISLights_MakeEvent_Callback__FPCv = .text:0x801DC7F8; // type:function size:0x44 scope:local +ENISLights_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DC83C; // type:function size:0xE0 scope:local +ENISLights_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DC91C; // type:function size:0x4 scope:local +__14ENISMotionBluri = .text:0x801DC920; // type:function size:0x20 scope:global +_._14ENISMotionBlur = .text:0x801DC940; // type:function size:0x38 scope:global +GetEventName__C14ENISMotionBlur = .text:0x801DC978; // type:function size:0xC scope:global +ENISMotionBlur_MakeEvent_Callback__FPCv = .text:0x801DC984; // type:function size:0x38 scope:local +ENISMotionBlur_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DC9BC; // type:function size:0x64 scope:local +ENISMotionBlur_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DCA20; // type:function size:0x4 scope:local +__14ENISNeutralRevUiffUi = .text:0x801DCA24; // type:function size:0x114 scope:global +_._14ENISNeutralRev = .text:0x801DCB38; // type:function size:0x38 scope:global +GetEventName__C14ENISNeutralRev = .text:0x801DCB70; // type:function size:0xC scope:global +ENISNeutralRev_MakeEvent_Callback__FPCv = .text:0x801DCB7C; // type:function size:0x48 scope:local +ENISNeutralRev_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DCBC4; // type:function size:0xC8 scope:local +ENISNeutralRev_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DCC8C; // type:function size:0x4 scope:local +__9ENISNitroUiUi = .text:0x801DCC90; // type:function size:0xF8 scope:global +_._9ENISNitro = .text:0x801DCD88; // type:function size:0x38 scope:global +GetEventName__C9ENISNitro = .text:0x801DCDC0; // type:function size:0xC scope:global +ENISNitro_MakeEvent_Callback__FPCv = .text:0x801DCDCC; // type:function size:0x40 scope:local +ENISNitro_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DCE0C; // type:function size:0x98 scope:local +ENISNitro_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DCEA4; // type:function size:0x4 scope:local +__13ENISNukeSmackffff = .text:0x801DCEA8; // type:function size:0x2C scope:global +_._13ENISNukeSmack = .text:0x801DCED4; // type:function size:0xB4 scope:global +GetEventName__C13ENISNukeSmack = .text:0x801DCF88; // type:function size:0xC scope:global +ENISNukeSmack_MakeEvent_Callback__FPCv = .text:0x801DCF94; // type:function size:0x44 scope:local +ENISNukeSmack_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DCFD8; // type:function size:0xB0 scope:local +ENISNukeSmack_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DD088; // type:function size:0x4 scope:local +__18ENISOverlayMessagePCcT1 = .text:0x801DD08C; // type:function size:0xA4 scope:global +_._18ENISOverlayMessage = .text:0x801DD130; // type:function size:0x38 scope:global +GetEventName__C18ENISOverlayMessage = .text:0x801DD168; // type:function size:0xC scope:global +ENISOverlayMessage_MakeEvent_Callback__FPCv = .text:0x801DD174; // type:function size:0x3C scope:local +ENISOverlayMessage_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DD1B0; // type:function size:0x70 scope:local +ENISOverlayMessage_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DD220; // type:function size:0x48 scope:local +__12ENISPixelateiff = .text:0x801DD268; // type:function size:0x54 scope:global +_._12ENISPixelate = .text:0x801DD2BC; // type:function size:0x38 scope:global +GetEventName__C12ENISPixelate = .text:0x801DD2F4; // type:function size:0xC scope:global +ENISPixelate_MakeEvent_Callback__FPCv = .text:0x801DD300; // type:function size:0x40 scope:local +ENISPixelate_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DD340; // type:function size:0x94 scope:local +ENISPixelate_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DD3D4; // type:function size:0x4 scope:local +__14ENISPlayEffectPCcffffff = .text:0x801DD3D8; // type:function size:0x38 scope:global +_._14ENISPlayEffect = .text:0x801DD410; // type:function size:0x13C scope:global +GetEventName__C14ENISPlayEffect = .text:0x801DD54C; // type:function size:0xC scope:global +ENISPlayEffect_MakeEvent_Callback__FPCv = .text:0x801DD558; // type:function size:0x50 scope:local +ENISPlayEffect_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DD5A8; // type:function size:0xFC scope:local +ENISPlayEffect_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DD6A4; // type:function size:0x28 scope:local +__8ENISRainf = .text:0x801DD6CC; // type:function size:0x54 scope:global +_._8ENISRain = .text:0x801DD720; // type:function size:0x38 scope:global +GetEventName__C8ENISRain = .text:0x801DD758; // type:function size:0xC scope:global +ENISRain_MakeEvent_Callback__FPCv = .text:0x801DD764; // type:function size:0x38 scope:local +ENISRain_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DD79C; // type:function size:0x58 scope:local +ENISRain_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DD7F4; // type:function size:0x4 scope:local +__12ENISReattachiUi = .text:0x801DD7F8; // type:function size:0x24 scope:global +_._12ENISReattach = .text:0x801DD81C; // type:function size:0x134 scope:global +GetEventName__C12ENISReattach = .text:0x801DD950; // type:function size:0xC scope:global +ENISReattach_MakeEvent_Callback__FPCv = .text:0x801DD95C; // type:function size:0x40 scope:local +ENISReattach_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DD99C; // type:function size:0x6C scope:local +ENISReattach_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DDA08; // type:function size:0x4 scope:local +__13ENISRoadNoisei = .text:0x801DDA0C; // type:function size:0x24 scope:global +_._13ENISRoadNoise = .text:0x801DDA30; // type:function size:0x38 scope:global +GetEventName__C13ENISRoadNoise = .text:0x801DDA68; // type:function size:0xC scope:global +ENISRoadNoise_MakeEvent_Callback__FPCv = .text:0x801DDA74; // type:function size:0x38 scope:local +ENISRoadNoise_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DDAAC; // type:function size:0x64 scope:local +ENISRoadNoise_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DDB10; // type:function size:0x4 scope:local +__15ENISScreenFlashf = .text:0x801DDB14; // type:function size:0x58 scope:global +_._15ENISScreenFlash = .text:0x801DDB6C; // type:function size:0x38 scope:global +GetEventName__C15ENISScreenFlash = .text:0x801DDBA4; // type:function size:0xC scope:global +ENISScreenFlash_MakeEvent_Callback__FPCv = .text:0x801DDBB0; // type:function size:0x38 scope:local +ENISScreenFlash_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DDBE8; // type:function size:0x58 scope:local +ENISScreenFlash_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DDC40; // type:function size:0x4 scope:local +__12ENISSteeringffUi = .text:0x801DDC44; // type:function size:0xE4 scope:global +_._12ENISSteering = .text:0x801DDD28; // type:function size:0x38 scope:global +GetEventName__C12ENISSteering = .text:0x801DDD60; // type:function size:0xC scope:global +ENISSteering_MakeEvent_Callback__FPCv = .text:0x801DDD6C; // type:function size:0x44 scope:local +ENISSteering_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DDDB0; // type:function size:0x80 scope:local +ENISSteering_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DDE30; // type:function size:0x4 scope:local +__15ENISStopEffects = .text:0x801DDE34; // type:function size:0x58 scope:global +_._15ENISStopEffects = .text:0x801DDE8C; // type:function size:0x38 scope:global +GetEventName__C15ENISStopEffects = .text:0x801DDEC4; // type:function size:0xC scope:global +ENISStopEffects_MakeEvent_Callback__FPCv = .text:0x801DDED0; // type:function size:0x28 scope:local +ENISStopEffects_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DDEF8; // type:function size:0x38 scope:local +ENISStopEffects_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DDF30; // type:function size:0x4 scope:local +__13ENISTimeOfDayffff = .text:0x801DDF34; // type:function size:0x2C scope:global +_._13ENISTimeOfDay = .text:0x801DDF60; // type:function size:0x38 scope:global +GetEventName__C13ENISTimeOfDay = .text:0x801DDF98; // type:function size:0xC scope:global +ENISTimeOfDay_MakeEvent_Callback__FPCv = .text:0x801DDFA4; // type:function size:0x44 scope:local +ENISTimeOfDay_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DDFE8; // type:function size:0xB0 scope:local +ENISTimeOfDay_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DE098; // type:function size:0x4 scope:local +__14ENISVisualLookfffiff = .text:0x801DE09C; // type:function size:0x1A8 scope:global +_._14ENISVisualLook = .text:0x801DE244; // type:function size:0x38 scope:global +GetEventName__C14ENISVisualLook = .text:0x801DE27C; // type:function size:0xC scope:global +ENISVisualLook_MakeEvent_Callback__FPCv = .text:0x801DE288; // type:function size:0x4C scope:local +ENISVisualLook_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DE2D4; // type:function size:0xE8 scope:local +ENISVisualLook_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DE3BC; // type:function size:0x4 scope:local +__17ENISWolrdGeometryPCci = .text:0x801DE3C0; // type:function size:0x8C scope:global +_._17ENISWolrdGeometry = .text:0x801DE44C; // type:function size:0x38 scope:global +GetEventName__C17ENISWolrdGeometry = .text:0x801DE484; // type:function size:0xC scope:global +ENISWolrdGeometry_MakeEvent_Callback__FPCv = .text:0x801DE490; // type:function size:0x3C scope:local +ENISWolrdGeometry_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DE4CC; // type:function size:0x78 scope:local +ENISWolrdGeometry_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DE544; // type:function size:0x28 scope:local +__20ENISWorldAnimTriggerPCcfii = .text:0x801DE56C; // type:function size:0xFC scope:global +_._20ENISWorldAnimTrigger = .text:0x801DE668; // type:function size:0x38 scope:global +GetEventName__C20ENISWorldAnimTrigger = .text:0x801DE6A0; // type:function size:0xC scope:global +ENISWorldAnimTrigger_MakeEvent_Callback__FPCv = .text:0x801DE6AC; // type:function size:0x44 scope:local +ENISWorldAnimTrigger_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DE6F0; // type:function size:0xB0 scope:local +ENISWorldAnimTrigger_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DE7A0; // type:function size:0x28 scope:local +__6EPauseiii = .text:0x801DE7C8; // type:function size:0x28 scope:global +_._6EPause = .text:0x801DE7F0; // type:function size:0x14C scope:global +GetEventName__C6EPause = .text:0x801DE93C; // type:function size:0xC scope:global +EPause_MakeEvent_Callback__FPCv = .text:0x801DE948; // type:function size:0x40 scope:local +__14EPerfectLaunchP10HSIMABLE__f = .text:0x801DE988; // type:function size:0x24 scope:global +_._14EPerfectLaunch = .text:0x801DE9AC; // type:function size:0x18C scope:global +GetEventName__C14EPerfectLaunch = .text:0x801DEB38; // type:function size:0xC scope:global +EPerfectLaunch_MakeEvent_Callback__FPCv = .text:0x801DEB44; // type:function size:0x3C scope:local +__13EPerfectShiftP10HSIMABLE__f = .text:0x801DEB80; // type:function size:0x24 scope:global +_._13EPerfectShift = .text:0x801DEBA4; // type:function size:0x10C scope:global +GetEventName__C13EPerfectShift = .text:0x801DECB0; // type:function size:0xC scope:global +EPerfectShift_MakeEvent_Callback__FPCv = .text:0x801DECBC; // type:function size:0x3C scope:local +__11EPlayEndNISPCc = .text:0x801DECF8; // type:function size:0x48 scope:global +_._11EPlayEndNIS = .text:0x801DED40; // type:function size:0x88 scope:global +GetEventName__C11EPlayEndNIS = .text:0x801DEDC8; // type:function size:0xC scope:global +EPlayEndNIS_MakeEvent_Callback__FPCv = .text:0x801DEDD4; // type:function size:0x38 scope:local +EPlayEndNIS_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DEE0C; // type:function size:0x5C scope:local +EPlayEndNIS_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DEE68; // type:function size:0x28 scope:local +__15EPlayerAirborneP10HSIMABLE__ = .text:0x801DEE90; // type:function size:0x20 scope:global +_._15EPlayerAirborne = .text:0x801DEEB0; // type:function size:0xC4 scope:global +GetEventName__C15EPlayerAirborne = .text:0x801DEF74; // type:function size:0xC scope:global +EPlayerAirborne_MakeEvent_Callback__FPCv = .text:0x801DEF80; // type:function size:0x38 scope:local +__12EPlayerShiftP10HSIMABLE__11ShiftStatusb6GearIDT4 = .text:0x801DEFB8; // type:function size:0x30 scope:global +_._12EPlayerShift = .text:0x801DEFE8; // type:function size:0x10C scope:global +GetEventName__C12EPlayerShift = .text:0x801DF0F4; // type:function size:0xC scope:global +EPlayerShift_MakeEvent_Callback__FPCv = .text:0x801DF100; // type:function size:0x48 scope:local +__19EPlayerTriggeredNOSP10HSIMABLE__ = .text:0x801DF148; // type:function size:0x20 scope:global +_._19EPlayerTriggeredNOS = .text:0x801DF168; // type:function size:0x198 scope:global +GetEventName__C19EPlayerTriggeredNOS = .text:0x801DF300; // type:function size:0xC scope:global +EPlayerTriggeredNOS_MakeEvent_Callback__FPCv = .text:0x801DF30C; // type:function size:0x38 scope:local +__17EPlayObjectEffectPCcG6UCrc32fT2UiUiUiGQ25UMath7Vector4 = .text:0x801DF344; // type:function size:0x74 scope:global +_._17EPlayObjectEffect = .text:0x801DF3B8; // type:function size:0x524 scope:global +GetEventName__C17EPlayObjectEffect = .text:0x801DF8DC; // type:function size:0xC scope:global +EPlayObjectEffect_MakeEvent_Callback__FPCv = .text:0x801DF8E8; // type:function size:0x94 scope:local +EPlayObjectEffect_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DF97C; // type:function size:0x178 scope:local +EPlayObjectEffect_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DFAF4; // type:function size:0x28 scope:local +__14EPlayRaceMoviePCc = .text:0x801DFB1C; // type:function size:0xE8 scope:global +_._14EPlayRaceMovie = .text:0x801DFC04; // type:function size:0x38 scope:global +GetEventName__C14EPlayRaceMovie = .text:0x801DFC3C; // type:function size:0xC scope:global +EPlayRaceMovie_MakeEvent_Callback__FPCv = .text:0x801DFC48; // type:function size:0x38 scope:local +EPlayRaceMovie_MakeEvent_LuaBinding__FP9lua_State = .text:0x801DFC80; // type:function size:0x5C scope:local +EPlayRaceMovie_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801DFCDC; // type:function size:0x28 scope:local +__12EPlayRaceNISP7GMarkerPCcT2iiT2T2 = .text:0x801DFD04; // type:function size:0x880 scope:global +_._12EPlayRaceNIS = .text:0x801E0584; // type:function size:0x38 scope:global +GetEventName__C12EPlayRaceNIS = .text:0x801E05BC; // type:function size:0xC scope:global +EPlayRaceNIS_MakeEvent_Callback__FPCv = .text:0x801E05C8; // type:function size:0x50 scope:local +EPlayRaceNIS_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E0618; // type:function size:0xE4 scope:local +EPlayRaceNIS_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E06FC; // type:function size:0x78 scope:local +__20EProcessAreaStimulusG6UCrc32N21fGQ25UMath7Vector4 = .text:0x801E0774; // type:function size:0x5C scope:global +_._20EProcessAreaStimulus = .text:0x801E07D0; // type:function size:0x154 scope:global +GetEventName__C20EProcessAreaStimulus = .text:0x801E0924; // type:function size:0xC scope:global +EProcessAreaStimulus_MakeEvent_Callback__FPCv = .text:0x801E0930; // type:function size:0x90 scope:local +EProcessAreaStimulus_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E09C0; // type:function size:0xDC scope:local +EProcessAreaStimulus_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E0A9C; // type:function size:0x4 scope:local +__16EProcessStimulusG6UCrc32N21UiUi = .text:0x801E0AA0; // type:function size:0x3C scope:global +_._16EProcessStimulus = .text:0x801E0ADC; // type:function size:0x204 scope:global +GetEventName__C16EProcessStimulus = .text:0x801E0CE0; // type:function size:0xC scope:global +EProcessStimulus_MakeEvent_Callback__FPCv = .text:0x801E0CEC; // type:function size:0x6C scope:local +EProcessStimulus_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E0D58; // type:function size:0xA0 scope:local +EProcessStimulus_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E0DF8; // type:function size:0x4 scope:local +__15EPursuitBreakeri = .text:0x801E0DFC; // type:function size:0x1D4 scope:global +_._15EPursuitBreaker = .text:0x801E0FD0; // type:function size:0x38 scope:global +GetEventName__C15EPursuitBreaker = .text:0x801E1008; // type:function size:0xC scope:global +EPursuitBreaker_MakeEvent_Callback__FPCv = .text:0x801E1014; // type:function size:0x38 scope:local +__9EQuitDemo17DemoDiscEndReason = .text:0x801E104C; // type:function size:0xA8 scope:global +_._9EQuitDemo = .text:0x801E10F4; // type:function size:0x38 scope:global +GetEventName__C9EQuitDemo = .text:0x801E112C; // type:function size:0xC scope:global +EQuitDemo_MakeEvent_Callback__FPCv = .text:0x801E1138; // type:function size:0x38 scope:local +__9EQuitToFE11eGarageTypePCc = .text:0x801E1170; // type:function size:0x58 scope:global +_._9EQuitToFE = .text:0x801E11C8; // type:function size:0x43C scope:global +GetEventName__C9EQuitToFE = .text:0x801E1604; // type:function size:0xC scope:global +EQuitToFE_MakeEvent_Callback__FPCv = .text:0x801E1610; // type:function size:0x3C scope:local +__13ERaceSheetOff = .text:0x801E164C; // type:function size:0x1C scope:global +_._13ERaceSheetOff = .text:0x801E1668; // type:function size:0x68 scope:global +GetEventName__C13ERaceSheetOff = .text:0x801E16D0; // type:function size:0xC scope:global +ERaceSheetOff_MakeEvent_Callback__FPCv = .text:0x801E16DC; // type:function size:0x28 scope:local +__12ERaceSheetOni = .text:0x801E1704; // type:function size:0xE0 scope:global +_._12ERaceSheetOn = .text:0x801E17E4; // type:function size:0x38 scope:global +GetEventName__C12ERaceSheetOn = .text:0x801E181C; // type:function size:0xC scope:global +ERaceSheetOn_MakeEvent_Callback__FPCv = .text:0x801E1828; // type:function size:0x38 scope:local +__16ERandomEventListPQ24CARP9EventList = .text:0x801E1860; // type:function size:0x20 scope:global +_._16ERandomEventList = .text:0x801E1880; // type:function size:0xBC scope:global +GetEventName__C16ERandomEventList = .text:0x801E193C; // type:function size:0xC scope:global +ERandomEventList_MakeEvent_Callback__FPCv = .text:0x801E1948; // type:function size:0x38 scope:local +ERandomEventList_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E1980; // type:function size:0x5C scope:local +ERandomEventList_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E19DC; // type:function size:0x28 scope:local +__16ERandomExplosioniiP8WTrigger = .text:0x801E1A04; // type:function size:0x28 scope:global +_._16ERandomExplosion = .text:0x801E1A2C; // type:function size:0x38 scope:global +GetEventName__C16ERandomExplosion = .text:0x801E1A64; // type:function size:0xC scope:global +ERandomExplosion_MakeEvent_Callback__FPCv = .text:0x801E1A70; // type:function size:0x44 scope:local +ERandomExplosion_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E1AB4; // type:function size:0x88 scope:local +ERandomExplosion_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E1B3C; // type:function size:0x4 scope:local +__11EReloadGameP16GRuntimeInstance = .text:0x801E1B40; // type:function size:0x80 scope:global +_._11EReloadGame = .text:0x801E1BC0; // type:function size:0xA4 scope:global +GetEventName__C11EReloadGame = .text:0x801E1C64; // type:function size:0xC scope:global +EReloadGame_MakeEvent_Callback__FPCv = .text:0x801E1C70; // type:function size:0x38 scope:local +EReloadGame_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E1CA8; // type:function size:0x5C scope:local +EReloadGame_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E1D04; // type:function size:0x28 scope:local +__10EReloadHud = .text:0x801E1D2C; // type:function size:0x1C scope:global +_._10EReloadHud = .text:0x801E1D48; // type:function size:0x308 scope:global +GetEventName__C10EReloadHud = .text:0x801E2050; // type:function size:0xC scope:global +EReloadHud_MakeEvent_Callback__FPCv = .text:0x801E205C; // type:function size:0x28 scope:local +EReloadHud_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E2084; // type:function size:0x38 scope:local +EReloadHud_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E20BC; // type:function size:0x4 scope:local +__17EReportInfractionQ218GInfractionManager14InfractionType = .text:0x801E20C0; // type:function size:0x20 scope:global +_._17EReportInfraction = .text:0x801E20E0; // type:function size:0x1F4 scope:global +GetEventName__C17EReportInfraction = .text:0x801E22D4; // type:function size:0xC scope:global +EReportInfraction_MakeEvent_Callback__FPCv = .text:0x801E22E0; // type:function size:0x38 scope:local +__23EReportMilestoneAtStakeP10GMilestone = .text:0x801E2318; // type:function size:0x12C scope:global +_._23EReportMilestoneAtStake = .text:0x801E2444; // type:function size:0x38 scope:global +GetEventName__C23EReportMilestoneAtStake = .text:0x801E247C; // type:function size:0xC scope:global +EReportMilestoneAtStake_MakeEvent_Callback__FPCv = .text:0x801E2488; // type:function size:0x38 scope:local +EReportMilestoneAtStake_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E24C0; // type:function size:0x5C scope:local +EReportMilestoneAtStake_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E251C; // type:function size:0x28 scope:local +__23ERequestEventInfoDialogiP16GRuntimeInstance = .text:0x801E2544; // type:function size:0x24 scope:global +_._23ERequestEventInfoDialog = .text:0x801E2568; // type:function size:0x78 scope:global +GetEventName__C23ERequestEventInfoDialog = .text:0x801E25E0; // type:function size:0xC scope:global +ERequestEventInfoDialog_MakeEvent_Callback__FPCv = .text:0x801E25EC; // type:function size:0x3C scope:local +ERequestEventInfoDialog_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E2628; // type:function size:0x78 scope:local +ERequestEventInfoDialog_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E26A0; // type:function size:0x28 scope:local +__15EResetPlayerCar = .text:0x801E26C8; // type:function size:0x1C scope:global +_._15EResetPlayerCar = .text:0x801E26E4; // type:function size:0xAC scope:global +GetEventName__C15EResetPlayerCar = .text:0x801E2790; // type:function size:0xC scope:global +EResetPlayerCar_MakeEvent_Callback__FPCv = .text:0x801E279C; // type:function size:0x28 scope:local +EResetPlayerCar_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E27C4; // type:function size:0x38 scope:local +EResetPlayerCar_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E27FC; // type:function size:0x4 scope:local +__11EResetProps = .text:0x801E2800; // type:function size:0x1C scope:global +_._11EResetProps = .text:0x801E281C; // type:function size:0x5C scope:global +GetEventName__C11EResetProps = .text:0x801E2878; // type:function size:0xC scope:global +EResetProps_MakeEvent_Callback__FPCv = .text:0x801E2884; // type:function size:0x28 scope:local +EResetProps_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E28AC; // type:function size:0x38 scope:local +EResetProps_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E28E4; // type:function size:0x4 scope:local +__15EResetSequencerUi = .text:0x801E28E8; // type:function size:0x20 scope:global +_._15EResetSequencer = .text:0x801E2908; // type:function size:0xB8 scope:global +GetEventName__C15EResetSequencer = .text:0x801E29C0; // type:function size:0xC scope:global +EResetSequencer_MakeEvent_Callback__FPCv = .text:0x801E29CC; // type:function size:0x30 scope:local +EResetSequencer_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E29FC; // type:function size:0x40 scope:local +EResetSequencer_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E2A3C; // type:function size:0x4 scope:local +__12EResetSystemG6UCrc32UiUi = .text:0x801E2A40; // type:function size:0x2C scope:global +_._12EResetSystem = .text:0x801E2A6C; // type:function size:0x138 scope:global +GetEventName__C12EResetSystem = .text:0x801E2BA4; // type:function size:0xC scope:global +EResetSystem_MakeEvent_Callback__FPCv = .text:0x801E2BB0; // type:function size:0x50 scope:local +EResetSystem_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E2C00; // type:function size:0x70 scope:local +EResetSystem_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E2C70; // type:function size:0x4 scope:local +__12ERestartRace = .text:0x801E2C74; // type:function size:0x150 scope:global +_._12ERestartRace = .text:0x801E2DC4; // type:function size:0x10C scope:global +GetEventName__C12ERestartRace = .text:0x801E2ED0; // type:function size:0xC scope:global +ERestartRace_MakeEvent_Callback__FPCv = .text:0x801E2EDC; // type:function size:0x28 scope:local +__14EScheduleEventPQ24CARP9EventListf = .text:0x801E2F04; // type:function size:0x24 scope:global +_._14EScheduleEvent = .text:0x801E2F28; // type:function size:0xD0 scope:global +GetEventName__C14EScheduleEvent = .text:0x801E2FF8; // type:function size:0xC scope:global +EScheduleEvent_MakeEvent_Callback__FPCv = .text:0x801E3004; // type:function size:0x3C scope:local +EScheduleEvent_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E3040; // type:function size:0x6C scope:local +EScheduleEvent_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E30AC; // type:function size:0x28 scope:local +__20EScheduleEventUpdatePvPQ24CARP9EventListifi = .text:0x801E30D4; // type:function size:0x30 scope:global +_._20EScheduleEventUpdate = .text:0x801E3104; // type:function size:0x104 scope:global +GetEventName__C20EScheduleEventUpdate = .text:0x801E3208; // type:function size:0xC scope:global +EScheduleEventUpdate_MakeEvent_Callback__FPCv = .text:0x801E3214; // type:function size:0x48 scope:local +__20ESetCopAutoSpawnModei = .text:0x801E325C; // type:function size:0x20 scope:global +_._20ESetCopAutoSpawnMode = .text:0x801E327C; // type:function size:0xB8 scope:global +GetEventName__C20ESetCopAutoSpawnMode = .text:0x801E3334; // type:function size:0xC scope:global +ESetCopAutoSpawnMode_MakeEvent_Callback__FPCv = .text:0x801E3340; // type:function size:0x38 scope:local +ESetCopAutoSpawnMode_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E3378; // type:function size:0x64 scope:local +ESetCopAutoSpawnMode_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E33DC; // type:function size:0x4 scope:local +__18ESetPlayerCarResetiPQ24CARP7Trigger = .text:0x801E33E0; // type:function size:0x24 scope:global +_._18ESetPlayerCarReset = .text:0x801E3404; // type:function size:0x174 scope:global +GetEventName__C18ESetPlayerCarReset = .text:0x801E3578; // type:function size:0xC scope:global +ESetPlayerCarReset_MakeEvent_Callback__FPCv = .text:0x801E3584; // type:function size:0x3C scope:local +ESetPlayerCarReset_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E35C0; // type:function size:0x78 scope:local +ESetPlayerCarReset_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E3638; // type:function size:0x28 scope:local +__24ESetPlayerCollisionCachei = .text:0x801E3660; // type:function size:0x20 scope:global +_._24ESetPlayerCollisionCache = .text:0x801E3680; // type:function size:0x38 scope:global +GetEventName__C24ESetPlayerCollisionCache = .text:0x801E36B8; // type:function size:0xC scope:global +ESetPlayerCollisionCache_MakeEvent_Callback__FPCv = .text:0x801E36C4; // type:function size:0x30 scope:local +ESetPlayerCollisionCache_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E36F4; // type:function size:0x40 scope:local +ESetPlayerCollisionCache_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E3734; // type:function size:0x4 scope:local +__11ESetSimRateff = .text:0x801E3738; // type:function size:0x24 scope:global +_._11ESetSimRate = .text:0x801E375C; // type:function size:0x38 scope:global +GetEventName__C11ESetSimRate = .text:0x801E3794; // type:function size:0xC scope:global +ESetSimRate_MakeEvent_Callback__FPCv = .text:0x801E37A0; // type:function size:0x3C scope:local +ESetSimRate_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E37DC; // type:function size:0x78 scope:local +ESetSimRate_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E3854; // type:function size:0x4 scope:local +__12EShockObjectfUi = .text:0x801E3858; // type:function size:0x24 scope:global +_._12EShockObject = .text:0x801E387C; // type:function size:0xE0 scope:global +GetEventName__C12EShockObject = .text:0x801E395C; // type:function size:0xC scope:global +EShockObject_MakeEvent_Callback__FPCv = .text:0x801E3968; // type:function size:0x40 scope:local +EShockObject_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E39A8; // type:function size:0x60 scope:local +EShockObject_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E3A08; // type:function size:0x4 scope:local +__20EShowMarketingScreeni = .text:0x801E3A0C; // type:function size:0xA0 scope:global +_._20EShowMarketingScreen = .text:0x801E3AAC; // type:function size:0x38 scope:global +GetEventName__C20EShowMarketingScreen = .text:0x801E3AE4; // type:function size:0xC scope:global +EShowMarketingScreen_MakeEvent_Callback__FPCv = .text:0x801E3AF0; // type:function size:0x38 scope:local +EShowMarketingScreen_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E3B28; // type:function size:0x64 scope:local +EShowMarketingScreen_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E3B8C; // type:function size:0x4 scope:local +__18EShowMessageScreenUi = .text:0x801E3B90; // type:function size:0x50 scope:global +_._18EShowMessageScreen = .text:0x801E3BE0; // type:function size:0x78 scope:global +GetEventName__C18EShowMessageScreen = .text:0x801E3C58; // type:function size:0xC scope:global +EShowMessageScreen_MakeEvent_Callback__FPCv = .text:0x801E3C64; // type:function size:0x38 scope:local +EShowMessageScreen_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E3C9C; // type:function size:0x90 scope:local +EShowMessageScreen_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E3D2C; // type:function size:0x4 scope:local +__15EShowMilestonesi = .text:0x801E3D30; // type:function size:0x120 scope:global +_._15EShowMilestones = .text:0x801E3E50; // type:function size:0x38 scope:global +GetEventName__C15EShowMilestones = .text:0x801E3E88; // type:function size:0xC scope:global +EShowMilestones_MakeEvent_Callback__FPCv = .text:0x801E3E94; // type:function size:0x38 scope:local +__18EShowRaceCountdown = .text:0x801E3ECC; // type:function size:0x1C scope:global +_._18EShowRaceCountdown = .text:0x801E3EE8; // type:function size:0xE4 scope:global +GetEventName__C18EShowRaceCountdown = .text:0x801E3FCC; // type:function size:0xC scope:global +EShowRaceCountdown_MakeEvent_Callback__FPCv = .text:0x801E3FD8; // type:function size:0x28 scope:local +EShowRaceCountdown_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E4000; // type:function size:0x38 scope:local +EShowRaceCountdown_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E4038; // type:function size:0x4 scope:local +__20EShowRaceOverMessageP7IPlayer = .text:0x801E403C; // type:function size:0x20 scope:global +_._20EShowRaceOverMessage = .text:0x801E405C; // type:function size:0x108 scope:global +GetEventName__C20EShowRaceOverMessage = .text:0x801E4164; // type:function size:0xC scope:global +EShowRaceOverMessage_MakeEvent_Callback__FPCv = .text:0x801E4170; // type:function size:0x38 scope:local +EShowRaceOverMessage_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E41A8; // type:function size:0x5C scope:local +EShowRaceOverMessage_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E4204; // type:function size:0x28 scope:local +__12EShowResults12FERESULTTYPEb = .text:0x801E422C; // type:function size:0x204 scope:global +_._12EShowResults = .text:0x801E4430; // type:function size:0x38 scope:global +GetEventName__C12EShowResults = .text:0x801E4468; // type:function size:0xC scope:global +EShowResults_MakeEvent_Callback__FPCv = .text:0x801E4474; // type:function size:0x3C scope:local +__8EShowSMSi = .text:0x801E44B0; // type:function size:0x11C scope:global +_._8EShowSMS = .text:0x801E45CC; // type:function size:0x38 scope:global +GetEventName__C8EShowSMS = .text:0x801E4604; // type:function size:0xC scope:global +EShowSMS_MakeEvent_Callback__FPCv = .text:0x801E4610; // type:function size:0x38 scope:local +EShowSMS_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E4648; // type:function size:0x64 scope:local +EShowSMS_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E46AC; // type:function size:0x4 scope:local +__18EShowTimeExtensionP7IPlayerf = .text:0x801E46B0; // type:function size:0x24 scope:global +_._18EShowTimeExtension = .text:0x801E46D4; // type:function size:0xBC scope:global +GetEventName__C18EShowTimeExtension = .text:0x801E4790; // type:function size:0xC scope:global +EShowTimeExtension_MakeEvent_Callback__FPCv = .text:0x801E479C; // type:function size:0x3C scope:local +EShowTimeExtension_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E47D8; // type:function size:0x6C scope:local +EShowTimeExtension_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E4844; // type:function size:0x28 scope:local +__9ESimulatePQ33UTL3COM8IUnknown = .text:0x801E486C; // type:function size:0x20 scope:global +_._9ESimulate = .text:0x801E488C; // type:function size:0x5C scope:global +GetEventName__C9ESimulate = .text:0x801E48E8; // type:function size:0xC scope:global +ESimulate_MakeEvent_Callback__FPCv = .text:0x801E48F4; // type:function size:0x38 scope:local +__13ESndGameStateib = .text:0x801E492C; // type:function size:0x24 scope:global +_._13ESndGameState = .text:0x801E4950; // type:function size:0x6C scope:global +GetEventName__C13ESndGameState = .text:0x801E49BC; // type:function size:0xC scope:global +ESndGameState_MakeEvent_Callback__FPCv = .text:0x801E49C8; // type:function size:0x3C scope:local +ESndGameState_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E4A04; // type:function size:0x84 scope:local +ESndGameState_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E4A88; // type:function size:0x4 scope:local +__15ESpawnExplosionG6UCrc32fffUiUiUiUiUiUi = .text:0x801E4A8C; // type:function size:0x58 scope:global +_._15ESpawnExplosion = .text:0x801E4AE4; // type:function size:0x32C scope:global +GetEventName__C15ESpawnExplosion = .text:0x801E4E10; // type:function size:0xC scope:global +ESpawnExplosion_MakeEvent_Callback__FPCv = .text:0x801E4E1C; // type:function size:0x6C scope:local +ESpawnExplosion_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E4E88; // type:function size:0x228 scope:local +ESpawnExplosion_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E50B0; // type:function size:0x4 scope:local +__14ESpawnFragmentG6UCrc32N31UifUiUiUiUiUiUiGQ25UMath7Vector4T13_ = .text:0x801E50B4; // type:function size:0xCC scope:global +_._14ESpawnFragment = .text:0x801E5180; // type:function size:0x874 scope:global +GetEventName__C14ESpawnFragment = .text:0x801E59F4; // type:function size:0xC scope:global +ESpawnFragment_MakeEvent_Callback__FPCv = .text:0x801E5A00; // type:function size:0xF4 scope:local +ESpawnFragment_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E5AF4; // type:function size:0x2E8 scope:local +ESpawnFragment_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E5DDC; // type:function size:0x4 scope:local +__15ESpawnSmackableGQ25UMath7Vector3P8HMODEL__GQ25UMath7Vector4bP8WTriggerUi = .text:0x801E5DE0; // type:function size:0x160 scope:global +_._15ESpawnSmackable = .text:0x801E5F40; // type:function size:0x344 scope:global +GetEventName__C15ESpawnSmackable = .text:0x801E6284; // type:function size:0xC scope:global +ESpawnSmackable_MakeEvent_Callback__FPCv = .text:0x801E6290; // type:function size:0x9C scope:local +__17EStopObjectEffectG6UCrc32Ui = .text:0x801E632C; // type:function size:0x28 scope:global +_._17EStopObjectEffect = .text:0x801E6354; // type:function size:0xD4 scope:global +GetEventName__C17EStopObjectEffect = .text:0x801E6428; // type:function size:0xC scope:global +EStopObjectEffect_MakeEvent_Callback__FPCv = .text:0x801E6434; // type:function size:0x48 scope:local +EStopObjectEffect_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E647C; // type:function size:0x68 scope:local +EStopObjectEffect_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E64E4; // type:function size:0x4 scope:local +__18EStopObjectEffectsUi = .text:0x801E64E8; // type:function size:0x20 scope:global +_._18EStopObjectEffects = .text:0x801E6508; // type:function size:0xB4 scope:global +GetEventName__C18EStopObjectEffects = .text:0x801E65BC; // type:function size:0xC scope:global +EStopObjectEffects_MakeEvent_Callback__FPCv = .text:0x801E65C8; // type:function size:0x30 scope:local +EStopObjectEffects_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E65F8; // type:function size:0x40 scope:local +EStopObjectEffects_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E6638; // type:function size:0x4 scope:local +__15ETerminateMusic = .text:0x801E663C; // type:function size:0x1C scope:global +_._15ETerminateMusic = .text:0x801E6658; // type:function size:0xA4 scope:global +GetEventName__C15ETerminateMusic = .text:0x801E66FC; // type:function size:0xC scope:global +ETerminateMusic_MakeEvent_Callback__FPCv = .text:0x801E6708; // type:function size:0x28 scope:local +ETerminateMusic_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E6730; // type:function size:0x38 scope:local +ETerminateMusic_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E6768; // type:function size:0x4 scope:local +__5ETipsii = .text:0x801E676C; // type:function size:0x24 scope:global +_._5ETips = .text:0x801E6790; // type:function size:0x38 scope:global +GetEventName__C5ETips = .text:0x801E67C8; // type:function size:0xC scope:global +ETips_MakeEvent_Callback__FPCv = .text:0x801E67D4; // type:function size:0x3C scope:local +ETips_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E6810; // type:function size:0x80 scope:local +ETips_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E6890; // type:function size:0x4 scope:local +__10ETireBlownP10HSIMABLE__Ui = .text:0x801E6894; // type:function size:0x24 scope:global +_._10ETireBlown = .text:0x801E68B8; // type:function size:0x274 scope:global +GetEventName__C10ETireBlown = .text:0x801E6B2C; // type:function size:0xC scope:global +ETireBlown_MakeEvent_Callback__FPCv = .text:0x801E6B38; // type:function size:0x3C scope:local +__14ETirePuncturedP10HSIMABLE__Ui = .text:0x801E6B74; // type:function size:0x24 scope:global +_._14ETirePunctured = .text:0x801E6B98; // type:function size:0x270 scope:global +GetEventName__C14ETirePunctured = .text:0x801E6E08; // type:function size:0xC scope:global +ETirePunctured_MakeEvent_Callback__FPCv = .text:0x801E6E14; // type:function size:0x3C scope:local +__17ETriggerMomentNISPCcUi = .text:0x801E6E50; // type:function size:0x24 scope:global +_._17ETriggerMomentNIS = .text:0x801E6E74; // type:function size:0x14C scope:global +GetEventName__C17ETriggerMomentNIS = .text:0x801E6FC0; // type:function size:0xC scope:global +ETriggerMomentNIS_MakeEvent_Callback__FPCv = .text:0x801E6FCC; // type:function size:0x40 scope:local +ETriggerMomentNIS_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E700C; // type:function size:0x64 scope:local +ETriggerMomentNIS_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E7070; // type:function size:0x28 scope:local +__12ETuneVehicleUiPCQ27Physics7Tunings = .text:0x801E7098; // type:function size:0x24 scope:global +_._12ETuneVehicle = .text:0x801E70BC; // type:function size:0xE8 scope:global +GetEventName__C12ETuneVehicle = .text:0x801E71A4; // type:function size:0xC scope:global +ETuneVehicle_MakeEvent_Callback__FPCv = .text:0x801E71B0; // type:function size:0x3C scope:local +__8EUnPause = .text:0x801E71EC; // type:function size:0x1C scope:global +_._8EUnPause = .text:0x801E7208; // type:function size:0xC4 scope:global +GetEventName__C8EUnPause = .text:0x801E72CC; // type:function size:0xC scope:global +EUnPause_MakeEvent_Callback__FPCv = .text:0x801E72D8; // type:function size:0x28 scope:local +__17EVehicleDestroyedP10HSIMABLE__ = .text:0x801E7300; // type:function size:0x20 scope:global +_._17EVehicleDestroyed = .text:0x801E7320; // type:function size:0x228 scope:global +GetEventName__C17EVehicleDestroyed = .text:0x801E7548; // type:function size:0xC scope:global +EVehicleDestroyed_MakeEvent_Callback__FPCv = .text:0x801E7554; // type:function size:0x38 scope:local +__13EVehicleResetUiGQ25UMath7Vector3T2 = .text:0x801E758C; // type:function size:0x58 scope:global +_._13EVehicleReset = .text:0x801E75E4; // type:function size:0x11C scope:global +GetEventName__C13EVehicleReset = .text:0x801E7700; // type:function size:0xC scope:global +EVehicleReset_MakeEvent_Callback__FPCv = .text:0x801E770C; // type:function size:0x80 scope:local +__11EWakeObjectUi = .text:0x801E778C; // type:function size:0x20 scope:global +_._11EWakeObject = .text:0x801E77AC; // type:function size:0x158 scope:global +GetEventName__C11EWakeObject = .text:0x801E7904; // type:function size:0xC scope:global +EWakeObject_MakeEvent_Callback__FPCv = .text:0x801E7910; // type:function size:0x30 scope:local +EWakeObject_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E7940; // type:function size:0x40 scope:local +EWakeObject_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E7980; // type:function size:0x4 scope:local +__12EWorldMapOff = .text:0x801E7984; // type:function size:0x1C scope:global +_._12EWorldMapOff = .text:0x801E79A0; // type:function size:0x80 scope:global +GetEventName__C12EWorldMapOff = .text:0x801E7A20; // type:function size:0xC scope:global +EWorldMapOff_MakeEvent_Callback__FPCv = .text:0x801E7A2C; // type:function size:0x28 scope:local +__11EWorldMapOn = .text:0x801E7A54; // type:function size:0x8C scope:global +_._11EWorldMapOn = .text:0x801E7AE0; // type:function size:0x38 scope:global +GetEventName__C11EWorldMapOn = .text:0x801E7B18; // type:function size:0xC scope:global +EWorldMapOn_MakeEvent_Callback__FPCv = .text:0x801E7B24; // type:function size:0x28 scope:local +EWorldMapOn_MakeEvent_LuaBinding__FP9lua_State = .text:0x801E7B4C; // type:function size:0x38 scope:local +EWorldMapOn_ResolveEvent_Callback__FPvPC6UGroup = .text:0x801E7B84; // type:function size:0x4 scope:local +LookupEvent__13RegisterEventUi = .text:0x801E7B88; // type:function size:0x50 scope:global +ResolveEvent__13RegisterEventUi = .text:0x801E7BD8; // type:function size:0x50 scope:global +GetLuaBinding__13RegisterEventUi = .text:0x801E7C28; // type:function size:0x50 scope:global +BindMessagesToLua__12EventManagerRQ33UTL3Stdt6vector2ZPQ26Hermes13_h_HHANDLER__ZQ26Hermes28_type_ID_HermesHandlerVector = .text:0x801E7C78; // type:function size:0x1E14 scope:global +QSimTime__5QueryPCQ33UTL3COM8IUnknownT1PCvUiPv = .text:0x801E9A8C; // type:function size:0x34 scope:global +QSimTime_Resolver__5QueryPvPC6UGroup = .text:0x801E9AC0; // type:function size:0x4 scope:local +QSimTime_ByteSwapper__5QueryPv = .text:0x801E9AC4; // type:function size:0x4 scope:local +Invoke__5QueryUiPCQ33UTL3COM8IUnknownT2PCvUiPv = .text:0x801E9AC8; // type:function size:0x80 scope:global +LookupQueryFunc__5QueryUi = .text:0x801E9B48; // type:function size:0x48 scope:global +ResolveStaticData__5QueryPCvPC6UGroup = .text:0x801E9B90; // type:function size:0x60 scope:global +ByteSwapStaticData__5QueryPCv = .text:0x801E9BF0; // type:function size:0x58 scope:global +DefaultDataArea__6AttribUi = .text:0x801E9C48; // type:function size:0xC scope:global +Lookup__Q26Attrib8TypeDescUi = .text:0x801E9C54; // type:function size:0x8C scope:global +NameToType__Q26Attrib8TypeDescPCc = .text:0x801E9CE0; // type:function size:0x20 scope:global +__9ActionRefP10ActionData = .text:0x801E9D00; // type:function size:0x8 scope:global +__10ActionDataifi = .text:0x801E9D08; // type:function size:0x14 scope:global +getActionIDString__F8ActionID = .text:0x801E9D1C; // type:function size:0x2C scope:global +__11ActionQueueb = .text:0x801E9D48; // type:function size:0x1FC scope:global +__11ActionQueueiUiPCcb = .text:0x801E9F44; // type:function size:0x210 scope:global +_._11ActionQueue = .text:0x801EA154; // type:function size:0x16C scope:global +IsConnected__C11ActionQueue = .text:0x801EA2C0; // type:function size:0x1C scope:global +IO_SetConnected__11ActionQueueb = .text:0x801EA2DC; // type:function size:0x8C scope:global +IO_Flush__11ActionQueue = .text:0x801EA368; // type:function size:0x54 scope:global +Init__11ActionQueueiUi = .text:0x801EA3BC; // type:function size:0xCC scope:global +SetPort__11ActionQueuei = .text:0x801EA488; // type:function size:0x24 scope:global +SetConfig__11ActionQueueUiPCc = .text:0x801EA4AC; // type:function size:0x2C scope:global +IsEnabled__C11ActionQueue = .text:0x801EA4D8; // type:function size:0x18 scope:global +Enable__11ActionQueueb = .text:0x801EA4F0; // type:function size:0x6C scope:global +FetchCurrentValues__11ActionQueueP11InputDevice = .text:0x801EA55C; // type:function size:0x1E8 scope:global +FindActionQueue__11ActionQueuei = .text:0x801EA744; // type:function size:0x44 scope:global +AssignUniqueID__11ActionQueue = .text:0x801EA788; // type:function size:0x44 scope:global +IO_UpdateFromDevice__11ActionQueue = .text:0x801EA7CC; // type:function size:0x2B0 scope:global +OnActivationChange__11ActionQueue = .text:0x801EAA7C; // type:function size:0xC0 scope:global +IsEmpty__11ActionQueue = .text:0x801EAB3C; // type:function size:0x10 scope:global +ReceiveAction__11ActionQueueR10ActionData = .text:0x801EAB4C; // type:function size:0x188 scope:global +PopAction__11ActionQueue = .text:0x801EACD4; // type:function size:0x40 scope:global +Flush__11ActionQueue = .text:0x801EAD14; // type:function size:0x80 scope:global +GetAction__11ActionQueue = .text:0x801EAD94; // type:function size:0x70 scope:global +BeginJoylogFrame__11ActionQueue = .text:0x801EAE04; // type:function size:0xA0 scope:global +EndJoylogFrame__11ActionQueue = .text:0x801EAEA4; // type:function size:0x44 scope:global +__12InputMappingP11InputDevicePCQ26Attrib10Collection = .text:0x801EAEE8; // type:function size:0x294 scope:global +_._12InputMapping = .text:0x801EB17C; // type:function size:0x78 scope:global +__12DeviceScalar = .text:0x801EB1F4; // type:function size:0x28 scope:global +InitializeDeviceScalar__12DeviceScalar16DeviceScalarTypePCcPfT3 = .text:0x801EB21C; // type:function size:0x4C scope:global +__11InputDevicei = .text:0x801EB268; // type:function size:0x54 scope:global +_._11InputDevice = .text:0x801EB2BC; // type:function size:0x68 scope:global +DeviceHasChanged__11InputDevice = .text:0x801EB324; // type:function size:0x94 scope:global +DeviceHasAnyActivity__11InputDevice = .text:0x801EB3B8; // type:function size:0x80 scope:global +SaveCurrentState__11InputDevice = .text:0x801EB438; // type:function size:0x8C scope:global +RestoreToState__11InputDevicePf = .text:0x801EB4C4; // type:function size:0x68 scope:global +__9SimRandom = .text:0x801EB52C; // type:function size:0x14 scope:global +_._9SimRandom = .text:0x801EB540; // type:function size:0x48 scope:global +Reset__9SimRandom = .text:0x801EB588; // type:function size:0x7C scope:global +SimRandom_Generate__9SimRandom = .text:0x801EB604; // type:function size:0x30 scope:global +Init__12EventManager = .text:0x801EB634; // type:function size:0x40 scope:global +Reset__12EventManager = .text:0x801EB674; // type:function size:0x28 scope:global +RunEvents__12EventManager = .text:0x801EB69C; // type:function size:0x88 scope:global +FireEventList__12EventManagerPCQ24CARP9EventListb = .text:0x801EB724; // type:function size:0x98 scope:global +FireOneEvent__12EventManagerPCQ24CARP9EventListUib = .text:0x801EB7BC; // type:function size:0x78 scope:global +ListHasEvent__12EventManagerPCQ24CARP9EventListUiPPCQ24CARP15EventStaticData = .text:0x801EB834; // type:function size:0x50 scope:global +EventsQueued__12EventManager = .text:0x801EB884; // type:function size:0x20 scope:global +GetEmbeddedObjectSize__H1ZCc_PX01_Ui = .text:0x801EB8A4; // type:function size:0x24 scope:local +GetEmbeddedObjectSize__H1ZQ26Hermes7Message_PX01_Ui = .text:0x801EB8C8; // type:function size:0x8 scope:local +__nw__5EventUi = .text:0x801EB8D0; // type:function size:0x1C scope:global +__dl__5EventPvUi = .text:0x801EB8EC; // type:function size:0x18 scope:global +StimulusFilterLookup__FUiUiPCvPCQ24CARP11ExprValType = .text:0x801EB904; // type:function size:0x8C scope:local +Init__14EventSequencerf = .text:0x801EB990; // type:function size:0x18 scope:global +Reset__14EventSequencerf = .text:0x801EB9A8; // type:function size:0xC scope:global +Update__14EventSequencerf = .text:0x801EB9B4; // type:function size:0x98 scope:global +UpdateDelta__14EventSequencerf = .text:0x801EBA4C; // type:function size:0x44 scope:global +RegisterEngines__14EventSequencerPC6UGroup = .text:0x801EBA90; // type:function size:0x144 scope:local +UnregisterEngines__14EventSequencerPC6UGroup = .text:0x801EBBD4; // type:function size:0x24C scope:local +FindEngineData__14EventSequencerG6UCrc32 = .text:0x801EBE20; // type:function size:0x9C scope:local +Create__14EventSequencerPQ33UTL3COM6ObjectPQ214EventSequencer8IContextPC5UDataff = .text:0x801EBEBC; // type:function size:0x310 scope:global +Create__14EventSequencerPQ33UTL3COM6ObjectPQ214EventSequencer8IContextG6UCrc32ff = .text:0x801EC1CC; // type:function size:0x74 scope:global +PrepareBinary__14EventSequencerPCv = .text:0x801EC240; // type:function size:0x40 scope:global +StringToID__14EventSequencerPCc = .text:0x801EC280; // type:function size:0x20 scope:global +EraseActiveSystem__14EventSequencerUi = .text:0x801EC2A0; // type:function size:0x80 scope:local +ID__CQ214EventSequencer6System = .text:0x801EC320; // type:function size:0x60 scope:global +GetContext__CQ214EventSequencer6System = .text:0x801EC380; // type:function size:0xC scope:global +SetState__Q214EventSequencer6SystemfUi = .text:0x801EC38C; // type:function size:0x158 scope:global +IsInAction__CQ214EventSequencer6System = .text:0x801EC4E4; // type:function size:0x18 scope:global +IsPaused__CQ214EventSequencer6System = .text:0x801EC4FC; // type:function size:0x20 scope:global +GetActionRate__CQ214EventSequencer6System = .text:0x801EC51C; // type:function size:0x8 scope:global +Flush__Q214EventSequencer6System = .text:0x801EC524; // type:function size:0x7C scope:global +Stop__Q214EventSequencer6SystemfbPQ214EventSequencer8IContext = .text:0x801EC5A0; // type:function size:0x64 scope:global +Complete__Q214EventSequencer6SystemfbPQ214EventSequencer8IContext = .text:0x801EC604; // type:function size:0x88 scope:global +Pause__Q214EventSequencer6SystemfPQ214EventSequencer8IContext = .text:0x801EC68C; // type:function size:0x5C scope:global +Resume__Q214EventSequencer6SystemfPQ214EventSequencer8IContext = .text:0x801EC6E8; // type:function size:0x78 scope:global +Reset__Q214EventSequencer6SystemffPQ214EventSequencer8IContext = .text:0x801EC760; // type:function size:0x58 scope:global +ProcessStimulus__Q214EventSequencer6SystemUifPQ214EventSequencer8IContextQ214EventSequencer9QueueMode = .text:0x801EC7B8; // type:function size:0x310 scope:global +FireEventTag__CQ214EventSequencer6SystemUiPQ214EventSequencer8IContext = .text:0x801ECAC8; // type:function size:0xD0 scope:global +__Q214EventSequencer6SystemPQ214EventSequencer6EnginePCQ24CARP14EventSeqSystemff = .text:0x801ECB98; // type:function size:0x40 scope:global +_._Q214EventSequencer6System = .text:0x801ECBD8; // type:function size:0x54 scope:global +Update__Q214EventSequencer6SystemUif = .text:0x801ECC2C; // type:function size:0xEC scope:global +TerminateAction__Q214EventSequencer6SystemUiUifbPQ214EventSequencer8IContext = .text:0x801ECD18; // type:function size:0x120 scope:global +InvokeStimulus__Q214EventSequencer6SystemUifPQ214EventSequencer8IContext = .text:0x801ECE38; // type:function size:0x134 scope:global +FireActionEventList__CQ214EventSequencer6SystembUiPQ214EventSequencer8IContext = .text:0x801ECF6C; // type:function size:0x118 scope:global +FireTimedEvents__CQ214EventSequencer6Systemff = .text:0x801ED084; // type:function size:0x11C scope:global +Relocate__Q214EventSequencer6SystemUi = .text:0x801ED1A0; // type:function size:0x40 scope:global +Unload__Q214EventSequencer6System = .text:0x801ED1E0; // type:function size:0x64 scope:global +InternalReset__Q214EventSequencer6Systemff = .text:0x801ED244; // type:function size:0x198 scope:global +GetActiveIndex__CQ214EventSequencer6System = .text:0x801ED3DC; // type:function size:0x4C scope:global +ExecuteFilter__CQ214EventSequencer6SystemPCQ24CARP13EventSeqStateUiPQ214EventSequencer8IContext = .text:0x801ED428; // type:function size:0x10C scope:global +LoaderEventSequence__FP6bChunk = .text:0x801ED534; // type:function size:0xF4 scope:global +UnloaderEventSequence__FP6bChunk = .text:0x801ED628; // type:function size:0xC0 scope:global +__9Schedulerf = .text:0x801ED6E8; // type:function size:0x17C scope:global +Init__9Schedulerf = .text:0x801ED864; // type:function size:0x54 scope:global +AddSchedule__9SchedulerP8Schedule = .text:0x801ED8B8; // type:function size:0x70 scope:global +RunNormalSpeed__9SchedulerUi = .text:0x801ED928; // type:function size:0x148 scope:global +GetTargetTimer__9Scheduler = .text:0x801EDA70; // type:function size:0x14 scope:global +Run__9Schedulerb = .text:0x801EDA84; // type:function size:0x1B8 scope:global +Synchronize__9SchedulerG5Timer = .text:0x801EDC3C; // type:function size:0x24 scope:global +__8Schedulei = .text:0x801EDC60; // type:function size:0xD0 scope:global +_._8Schedule = .text:0x801EDD30; // type:function size:0xD4 scope:global +AddTask__8ScheduleiPQ25Event10StaticDataUsbii = .text:0x801EDE04; // type:function size:0xE4 scope:global +RemoveTask__8Schedulei = .text:0x801EDEE8; // type:function size:0xD0 scope:global +EmptiestBucket__8Schedule = .text:0x801EDFB8; // type:function size:0xEC scope:global +RunTasks__8ScheduleiUs = .text:0x801EE0A4; // type:function size:0xF8 scope:global +Process__24Schedule_OncePerGameLoopiUs = .text:0x801EE19C; // type:function size:0x24 scope:global +Process__16Schedule_SimRateiUs = .text:0x801EE1C0; // type:function size:0x24 scope:global +Process__20Schedule_HalfSimRateiUs = .text:0x801EE1E4; // type:function size:0x24 scope:global +Process__23Schedule_QuarterSimRateiUs = .text:0x801EE208; // type:function size:0x24 scope:global +__13VirtualMemory = .text:0x801EE22C; // type:function size:0x4 scope:global +__tcf_0 = .text:0x801EE230; // type:function size:0x4 scope:local +GetIOModule__8IOModule = .text:0x801EE234; // type:function size:0x5C scope:global +EnableUpdating__8IOModuleb = .text:0x801EE290; // type:function size:0xC scope:global +__8IOModule = .text:0x801EE29C; // type:function size:0x28 scope:global +CheckUnplugged__8IOModule = .text:0x801EE2C4; // type:function size:0x2F8 scope:global +PollDevices__8IOModule = .text:0x801EE5BC; // type:function size:0x74 scope:global +Update__8IOModule = .text:0x801EE630; // type:function size:0x58 scope:global +CreateDevices__8IOModule = .text:0x801EE688; // type:function size:0x168 scope:global +UpdateAllDevices__8IOModule = .text:0x801EE7F0; // type:function size:0xD8 scope:global +HaveAnyDevicesChanged__8IOModule = .text:0x801EE8C8; // type:function size:0xA8 scope:global +Initialize__8IOModule = .text:0x801EE970; // type:function size:0x20 scope:global +IsJoystickTypeWheel__F12JoystickPort = .text:0x801EE990; // type:function size:0x7C scope:global +Run__16InputEffectStatef = .text:0x801EEA0C; // type:function size:0x70 scope:global +Push__16InputEffectStatePQ29RealInput6Effect = .text:0x801EEA7C; // type:function size:0x128 scope:global +MyEnumDeviceCallback__FPQ29RealInput6DeviceUiPQ29RealInput9Interface = .text:0x801EEBA4; // type:function size:0x38 scope:local +InitEffects__Fv = .text:0x801EEBDC; // type:function size:0x60 scope:local +InitPads__Fv = .text:0x801EEC3C; // type:function size:0x80 scope:local +UpdatePads__Ff = .text:0x801EECBC; // type:function size:0x404 scope:local +ReleasePads__Fv = .text:0x801EF0C0; // type:function size:0x3C scope:local +Initialize__10GameDevice = .text:0x801EF0FC; // type:function size:0x94 scope:global +IsConnected__10GameDevice = .text:0x801EF190; // type:function size:0x8C scope:global +StartVibration__10GameDevice = .text:0x801EF21C; // type:function size:0xC4 scope:global +StopVibration__10GameDevice = .text:0x801EF2E0; // type:function size:0x38 scope:global +PollDevice__10GameDevice = .text:0x801EF318; // type:function size:0x544 scope:global +GetNumDeviceScalar__10GameDevice = .text:0x801EF85C; // type:function size:0x8 scope:global +__10GameDevicei = .text:0x801EF864; // type:function size:0x150 scope:global +_._10GameDevice = .text:0x801EF9B4; // type:function size:0xB0 scope:global +PauseEffects__10GameDevice = .text:0x801EFA64; // type:function size:0x5C scope:global +ResumeEffects__10GameDevice = .text:0x801EFAC0; // type:function size:0x58 scope:global +ResetEffects__10GameDevice = .text:0x801EFB18; // type:function size:0xE8 scope:global +BeginUpdate__10GameDevice = .text:0x801EFC00; // type:function size:0x24 scope:global +EndUpdate__10GameDevice = .text:0x801EFC24; // type:function size:0x4 scope:global +UpdateRoadNoise__10GameDevicebRC10SimSurfacef = .text:0x801EFC28; // type:function size:0x4 scope:global +UpdateTireSkid__10GameDevicebRC10SimSurfacef = .text:0x801EFC2C; // type:function size:0x4 scope:global +UpdateTireSlip__10GameDevicebRC10SimSurfacef = .text:0x801EFC30; // type:function size:0x4 scope:global +UpdateRPM__10GameDevicefff = .text:0x801EFC34; // type:function size:0x4 scope:global +UpdateShiftPotential__10GameDevice14ShiftPotential = .text:0x801EFC38; // type:function size:0x4 scope:global +UpdateEngineBlown__10GameDeviceb = .text:0x801EFC3C; // type:function size:0x4 scope:global +UpdateNOS__10GameDevicebf = .text:0x801EFC40; // type:function size:0x4 scope:global +UpdateShifting__10GameDeviceb = .text:0x801EFC44; // type:function size:0x4 scope:global +ReportCollision__10GameDeviceRCQ33Sim9Collision4Infob = .text:0x801EFC48; // type:function size:0x538 scope:global +UpdateForces__19SteeringWheelDeviceP7IPlayer = .text:0x801F0180; // type:function size:0x85C scope:global +StopAllForces__19SteeringWheelDevice = .text:0x801F09DC; // type:function size:0xC0 scope:global +ReadInput__19SteeringWheelDevicePf = .text:0x801F0A9C; // type:function size:0x460 scope:global +InitWheelSupport__19SteeringWheelDevice = .text:0x801F0EFC; // type:function size:0x8C scope:global +PollWheels__19SteeringWheelDevice = .text:0x801F0F88; // type:function size:0x30 scope:global +ConvertWheelRotation__19SteeringWheelDevicei = .text:0x801F0FB8; // type:function size:0xAC scope:global +ScaledForceParam__19SteeringWheelDevicef = .text:0x801F1064; // type:function size:0x10 scope:global +IsConnected__19SteeringWheelDevice = .text:0x801F1074; // type:function size:0x40 scope:global +GetSteeringType__19SteeringWheelDevice = .text:0x801F10B4; // type:function size:0x48 scope:global +WheelConnected__19SteeringWheelDevicei = .text:0x801F10FC; // type:function size:0x2C scope:global +EmbedField__H1ZCc_12EventManagerP5EventPX01_PX01 = .text:0x801F1128; // type:function size:0x80 scope:global +EmbedField__H1ZQ26Hermes7Message_12EventManagerP5EventPX01_PX01 = .text:0x801F11A8; // type:function size:0x80 scope:global +SearchPackedBinaryTree__H2ZCUiZUi_UiPX01X11_Ui = .text:0x801F1228; // type:function size:0x54 scope:global +reserve__Q24_STLt6vector2ZPQ26Hermes13_h_HHANDLER__ZQ33UTL3Stdt9Allocator2ZPQ26Hermes13_h_HHANDLER__ZQ26Hermes28_type_ID_HermesHandlerVectorUi = .text:0x801F127C; // type:function size:0x11C scope:global +find__H2ZPP11ActionQueueZP11ActionQueue_4_STLX01X01RCX11_X01 = .text:0x801F1398; // type:function size:0xB0 scope:global +clear__Q24_STLt10_List_base2Z13InputMapEntryZQ33UTL3Stdt9Allocator2Z13InputMapEntryZ10_type_list = .text:0x801F1448; // type:function size:0x78 scope:global +Get__H1Z20ControllerDataRecord_CQ26Attrib9AttributeUi_RCX01 = .text:0x801F14C0; // type:function size:0x50 scope:global +SearchPackedBinaryTree__H2ZCQ24CARP9QueryDescZUi_UiPX01X11_Ui = .text:0x801F1510; // type:function size:0x58 scope:global +_M_insert__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataZQ24_STLt4less1Z6UCrc32ZQ24_STLt9allocator1ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZC6UCrc32ZPC5UDataT1 = .text:0x801F1568; // type:function size:0x144 scope:global +insert_unique__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataZQ24_STLt4less1Z6UCrc32ZQ24_STLt9allocator1ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataRCQ24_STLt4pair2ZC6UCrc32ZPC5UData = .text:0x801F16AC; // type:function size:0x118 scope:global +insert_unique__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataZQ24_STLt4less1Z6UCrc32ZQ24_STLt9allocator1ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataRCQ24_STLt4pair2ZC6UCrc32ZPC5UData = .text:0x801F17C4; // type:function size:0x26C scope:global +_M_erase__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataZQ24_STLt4less1Z6UCrc32ZQ24_STLt9allocator1ZQ24_STLt4pair2ZC6UCrc32ZPC5UDataPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZC6UCrc32ZPC5UData = .text:0x801F1A30; // type:function size:0x6C scope:global +clear__Q24_STLt10_List_base2Z10TaskRecordZQ33UTL3Stdt9Allocator2Z10TaskRecordZ10_type_list = .text:0x801F1A9C; // type:function size:0x78 scope:global +CreateInstance__Q33UTL3COMt7Factory3ZiZ11InputDeviceZ6UCrc32G6UCrc32i = .text:0x801F1B14; // type:function size:0x60 scope:global +__static_initialization_and_destruction_0 = .text:0x801F1B74; // type:function size:0x518 scope:local +_._5Event = .text:0x801F208C; // type:function size:0x38 scope:global +IsConnected__11InputDevice = .text:0x801F20C4; // type:function size:0x8 scope:global +IsWheel__11InputDevice = .text:0x801F20CC; // type:function size:0x8 scope:global +GetInterfaces__11InputDevice = .text:0x801F20D4; // type:function size:0x8 scope:global +GetSecondaryDevice__11InputDevice = .text:0x801F20DC; // type:function size:0x8 scope:global +_IHandle__7IPlayer = .text:0x801F20E4; // type:function size:0xC scope:global +_IHandle__Q23Sim13IStateManager = .text:0x801F20F0; // type:function size:0xC scope:global +_IHandle__10IResetable = .text:0x801F20FC; // type:function size:0xC scope:global +_._Q29WorldConn13Pkt_Body_Send = .text:0x801F2108; // type:function size:0x34 scope:global +ConnectionClass__Q29WorldConn13Pkt_Body_Send = .text:0x801F213C; // type:function size:0x64 scope:global +Size__Q29WorldConn13Pkt_Body_Send = .text:0x801F21A0; // type:function size:0x8 scope:global +Type__Q29WorldConn13Pkt_Body_Send = .text:0x801F21A8; // type:function size:0x20 scope:global +_IHandle__13INISCarEngine = .text:0x801F21C8; // type:function size:0xC scope:global +HandleMessage_LuaBinding__12MAIEngineRevRC12MAIEngineRev = .text:0x801F21D4; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__16MAudioReflectionRC16MAudioReflection = .text:0x801F22D0; // type:function size:0xFC scope:global +_IHandle__Q217CollisionGeometry10IBoundable = .text:0x801F23CC; // type:function size:0xC scope:global +HandleMessage_LuaBinding__16MBreakerStopCopsRC16MBreakerStopCops = .text:0x801F23D8; // type:function size:0xFC scope:global +_IHandle__Q214EventSequencer7IEngine = .text:0x801F24D4; // type:function size:0xC scope:global +_._Q214EventSequencer7IEngine = .text:0x801F24E0; // type:function size:0x10C scope:global +_IHandle__18IDamageableVehicle = .text:0x801F25EC; // type:function size:0xC scope:global +_IHandle__13ISceneryModel = .text:0x801F25F8; // type:function size:0xC scope:global +TypeName__15SmackableParams = .text:0x801F2604; // type:function size:0x64 scope:global +_GetKind__18MNotifyEngineBlown = .text:0x801F2668; // type:function size:0x64 scope:global +HandleMessage_LuaBinding__18MNotifyEngineBlownRC18MNotifyEngineBlown = .text:0x801F26CC; // type:function size:0xFC scope:global +_GetKind__18MEnterRaceOverFlow = .text:0x801F27C8; // type:function size:0x64 scope:global +HandleMessage_LuaBinding__18MEnterRaceOverFlowRC18MEnterRaceOverFlow = .text:0x801F282C; // type:function size:0xFC scope:global +_IHandle__9IFeedback = .text:0x801F2928; // type:function size:0xC scope:global +HandleMessage_LuaBinding__16MSetTrafficSpeedRC16MSetTrafficSpeed = .text:0x801F2934; // type:function size:0xFC scope:global +_IHandle__15IDynamicsEntity = .text:0x801F2A30; // type:function size:0xC scope:global +HandleMessage_LuaBinding__15MGamePlayMomentRC15MGamePlayMoment = .text:0x801F2A3C; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__20MNotifyMovieFinishedRC20MNotifyMovieFinished = .text:0x801F2B38; // type:function size:0xFC scope:global +TypeName__15ExplosionParams = .text:0x801F2C34; // type:function size:0x64 scope:global +HandleMessage_LuaBinding__10MMiscSoundRC10MMiscSound = .text:0x801F2C98; // type:function size:0xFC scope:global +_GetKind__12MRestartRace = .text:0x801F2D94; // type:function size:0x64 scope:global +HandleMessage_LuaBinding__12MRestartRaceRC12MRestartRace = .text:0x801F2DF8; // type:function size:0xFC scope:global +_._16Schedule_SimRate = .text:0x801F2EF4; // type:function size:0x5C scope:global +_._20Schedule_HalfSimRate = .text:0x801F2F50; // type:function size:0x5C scope:global +_._23Schedule_QuarterSimRate = .text:0x801F2FAC; // type:function size:0x5C scope:global +_._24Schedule_OncePerGameLoop = .text:0x801F3008; // type:function size:0x5C scope:global +HandleMessage_LuaBinding__20MSetCopAutoSpawnModeRC20MSetCopAutoSpawnMode = .text:0x801F3064; // type:function size:0xFC scope:global +_GetKind__14MEnterFreeRoam = .text:0x801F3160; // type:function size:0x64 scope:global +HandleMessage_LuaBinding__14MEnterFreeRoamRC14MEnterFreeRoam = .text:0x801F31C4; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__18MFlowReadyForOutroRC18MFlowReadyForOutro = .text:0x801F32C0; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__16MNotifyMusicFlowRC16MNotifyMusicFlow = .text:0x801F33BC; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__23MNotifyVehicleDestroyedRC23MNotifyVehicleDestroyed = .text:0x801F34B8; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__23MAcceptEnterCareerEventRC23MAcceptEnterCareerEvent = .text:0x801F35B4; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__18MControlPathfinderRC18MControlPathfinder = .text:0x801F36B0; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__14MCountdownDoneRC14MCountdownDone = .text:0x801F37AC; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__24MDeclineEnterCareerEventRC24MDeclineEnterCareerEvent = .text:0x801F38A8; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__17MEnteringGameplayRC17MEnteringGameplay = .text:0x801F39A4; // type:function size:0xFC scope:global +_GetKind__18MEnterPostRaceFlow = .text:0x801F3AA0; // type:function size:0x64 scope:global +HandleMessage_LuaBinding__18MEnterPostRaceFlowRC18MEnterPostRaceFlow = .text:0x801F3B04; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__15MEnterSafeHouseRC15MEnterSafeHouse = .text:0x801F3C00; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__18MForcePursuitStartRC18MForcePursuitStart = .text:0x801F3CFC; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__18MICECameraFinishedRC18MICECameraFinished = .text:0x801F3DF8; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__10MJackKnifeRC10MJackKnife = .text:0x801F3EF4; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__8MJumpCutRC8MJumpCut = .text:0x801F3FF0; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__16MLoadingCompleteRC16MLoadingComplete = .text:0x801F40EC; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__12MNISCompleteRC12MNISComplete = .text:0x801F41E8; // type:function size:0xFC scope:global +_GetKind__23MNotifyCellCallComplete = .text:0x801F42E4; // type:function size:0x64 scope:global +HandleMessage_LuaBinding__23MNotifyCellCallCompleteRC23MNotifyCellCallComplete = .text:0x801F4348; // type:function size:0xFC scope:global +_GetKind__22MNotifyCellCallStarted = .text:0x801F4444; // type:function size:0x64 scope:global +HandleMessage_LuaBinding__22MNotifyCellCallStartedRC22MNotifyCellCallStarted = .text:0x801F44A8; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__22MNotifyChallengePassedRC22MNotifyChallengePassed = .text:0x801F45A4; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__15MNotifyFinishedRC15MNotifyFinished = .text:0x801F46A0; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__17MNotifyKnockedOutRC17MNotifyKnockedOut = .text:0x801F479C; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__18MNotifyMessageDoneRC18MNotifyMessageDone = .text:0x801F4898; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__24MNotifyMilestoneProgressRC24MNotifyMilestoneProgress = .text:0x801F4994; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__23MNotifyMilestoneReachedRC23MNotifyMilestoneReached = .text:0x801F4A90; // type:function size:0xFC scope:global +_GetKind__21MNotifyOnlineRaceOver = .text:0x801F4B8C; // type:function size:0x64 scope:global +HandleMessage_LuaBinding__21MNotifyOnlineRaceOverRC21MNotifyOnlineRaceOver = .text:0x801F4BF0; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__16MNotifyPlayerRepRC16MNotifyPlayerRep = .text:0x801F4CEC; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__20MNotifyPursuitLengthRC20MNotifyPursuitLength = .text:0x801F4DE8; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__20MNotifyRaceAbandonedRC20MNotifyRaceAbandoned = .text:0x801F4EE4; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__20MNotifyRacePlacementRC20MNotifyRacePlacement = .text:0x801F4FE0; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__15MNotifyRaceTimeRC15MNotifyRaceTime = .text:0x801F50DC; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__22MNotifyRaceTimeExpiredRC22MNotifyRaceTimeExpired = .text:0x801F51D8; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__22MNotifyRaceTimeSecTickRC22MNotifyRaceTimeSecTick = .text:0x801F52D4; // type:function size:0xFC scope:global +_GetKind__14MNotifySimTick = .text:0x801F53D0; // type:function size:0x64 scope:global +HandleMessage_LuaBinding__14MNotifySimTickRC14MNotifySimTick = .text:0x801F5434; // type:function size:0xFC scope:global +_GetKind__19MNotifySpeechStatus = .text:0x801F5530; // type:function size:0x64 scope:global +HandleMessage_LuaBinding__19MNotifySpeechStatusRC19MNotifySpeechStatus = .text:0x801F5594; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__16MNotifySpeedTrapRC16MNotifySpeedTrap = .text:0x801F5690; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__12MNotifyTimerRC12MNotifyTimer = .text:0x801F578C; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__11MPerpBustedRC11MPerpBusted = .text:0x801F5888; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__12MPerpEscapedRC12MPerpEscaped = .text:0x801F5984; // type:function size:0xFC scope:global +_GetKind__19MPlayerEnterPursuit = .text:0x801F5A80; // type:function size:0x64 scope:global +HandleMessage_LuaBinding__19MPlayerEnterPursuitRC19MPlayerEnterPursuit = .text:0x801F5AE4; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__15MPursuitBreakerRC15MPursuitBreaker = .text:0x801F5BE0; // type:function size:0xFC scope:global +_GetKind__12MPursuitOver = .text:0x801F5CDC; // type:function size:0x64 scope:global +HandleMessage_LuaBinding__12MPursuitOverRC12MPursuitOver = .text:0x801F5D40; // type:function size:0xFC scope:global +_GetKind__15MQuitToFrontEnd = .text:0x801F5E3C; // type:function size:0x64 scope:global +HandleMessage_LuaBinding__15MQuitToFrontEndRC15MQuitToFrontEnd = .text:0x801F5EA0; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__10MReqBackupRC10MReqBackup = .text:0x801F5F9C; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__13MReqRoadBlockRC13MReqRoadBlock = .text:0x801F6098; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__15MSetCopsEnabledRC15MSetCopsEnabled = .text:0x801F6194; // type:function size:0xFC scope:global +_GetKind__9MSpawnCop = .text:0x801F6290; // type:function size:0x64 scope:global +HandleMessage_LuaBinding__9MSpawnCopRC9MSpawnCop = .text:0x801F62F4; // type:function size:0xFC scope:global +_GetKind__13MSpawnTraffic = .text:0x801F63F0; // type:function size:0x64 scope:global +HandleMessage_LuaBinding__13MSpawnTrafficRC13MSpawnTraffic = .text:0x801F6454; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__11MStateEnterRC11MStateEnter = .text:0x801F6550; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__10MStateExitRC10MStateExit = .text:0x801F664C; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__13MTriggerEnterRC13MTriggerEnter = .text:0x801F6748; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__12MTriggerExitRC12MTriggerExit = .text:0x801F6844; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__14MTriggerInsideRC14MTriggerInside = .text:0x801F6940; // type:function size:0xFC scope:global +HandleMessage_LuaBinding__11MUnspawnCopRC11MUnspawnCop = .text:0x801F6A3C; // type:function size:0xFC scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z14MEnterFreeRoamPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6B38; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z22MNotifyRaceTimeSecTickPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6B60; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z24MNotifyMilestoneProgressPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6B88; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z16MNotifyPlayerRepPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6BB0; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z23MNotifyMilestoneReachedPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6BD8; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z12MTriggerExitPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6C00; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z18MICECameraFinishedPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6C28; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z23MNotifyCellCallCompletePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6C50; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z17MEnteringGameplayPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6C78; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z18MNotifyEngineBlownPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6CA0; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z10MJackKnifePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6CC8; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z16MNotifyMusicFlowPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6CF0; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z14MTriggerInsidePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6D18; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z11MPerpBustedPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6D40; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z11MUnspawnCopPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6D68; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z15MNotifyFinishedPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6D90; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z22MNotifyChallengePassedPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6DB8; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z16MAudioReflectionPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6DE0; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z8MJumpCutPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6E08; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z18MFlowReadyForOutroPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6E30; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z22MNotifyCellCallStartedPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6E58; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z12MNISCompletePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6E80; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z15MQuitToFrontEndPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6EA8; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z20MNotifyMovieFinishedPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6ED0; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z15MNotifyRaceTimePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6EF8; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z23MAcceptEnterCareerEventPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6F20; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z20MNotifyRaceAbandonedPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6F48; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z15MSetCopsEnabledPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6F70; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z15MEnterSafeHousePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6F98; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z18MEnterRaceOverFlowPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6FC0; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z12MAIEngineRevPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F6FE8; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z23MNotifyVehicleDestroyedPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7010; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z20MNotifyRacePlacementPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7038; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z19MNotifySpeechStatusPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7060; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z13MReqRoadBlockPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7088; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z14MNotifySimTickPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F70B0; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z16MLoadingCompletePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F70D8; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z16MBreakerStopCopsPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7100; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z13MSpawnTrafficPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7128; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z13MTriggerEnterPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7150; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z18MNotifyMessageDonePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7178; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z11MStateEnterPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F71A0; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z16MNotifySpeedTrapPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F71C8; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z18MEnterPostRaceFlowPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F71F0; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z12MRestartRacePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7218; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z16MSetTrafficSpeedPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7240; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z18MControlPathfinderPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7268; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z24MDeclineEnterCareerEventPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7290; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z12MPerpEscapedPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F72B8; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z12MPursuitOverPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F72E0; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z10MStateExitPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7308; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z22MNotifyRaceTimeExpiredPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7330; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z21MNotifyOnlineRaceOverPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7358; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z15MGamePlayMomentPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7380; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z19MPlayerEnterPursuitPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F73A8; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z15MPursuitBreakerPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F73D0; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z20MSetCopAutoSpawnModePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F73F8; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z10MMiscSoundPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7420; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z14MCountdownDonePCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7448; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z20MNotifyPursuitLengthPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7470; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z18MForcePursuitStartPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7498; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z9MSpawnCopPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F74C0; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z10MReqBackupPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F74E8; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z12MNotifyTimerPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7510; // type:function size:0x28 scope:global +Call__Q36Hermes7Handlert13StaticHandler1Z17MNotifyKnockedOutPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x801F7538; // type:function size:0x28 scope:global +push_back__Q23UTLt6Vector2ZP11ActionQueuei16RCP11ActionQueue = .text:0x801F7560; // type:function size:0x154 scope:global +_._Q214EventSequencer6Engine = .text:0x801F76B4; // type:function size:0x198 scope:global +Release__Q214EventSequencer6Engine = .text:0x801F784C; // type:function size:0x44 scope:global +Name__CQ214EventSequencer6Engine = .text:0x801F7890; // type:function size:0x1C scope:global +Relocate__Q214EventSequencer6EngineUi = .text:0x801F78AC; // type:function size:0x74 scope:global +Unload__Q214EventSequencer6Engine = .text:0x801F7920; // type:function size:0x6C scope:global +GetContext__CQ214EventSequencer6Engine = .text:0x801F798C; // type:function size:0x8 scope:global +SetContext__Q214EventSequencer6EnginePQ214EventSequencer8IContext = .text:0x801F7994; // type:function size:0x8 scope:global +NumSystems__CQ214EventSequencer6Engine = .text:0x801F799C; // type:function size:0x8 scope:global +GetSystemID__CQ214EventSequencer6EngineUi = .text:0x801F79A4; // type:function size:0x30 scope:global +GetSystemByIndex__CQ214EventSequencer6EngineUi = .text:0x801F79D4; // type:function size:0x24 scope:global +FindSystem__CQ214EventSequencer6EngineUi = .text:0x801F79F8; // type:function size:0xC4 scope:global +AnySystemInAction__CQ214EventSequencer6Engine = .text:0x801F7ABC; // type:function size:0x8C scope:global +SetAllSystemsState__Q214EventSequencer6EnginefUi = .text:0x801F7B48; // type:function size:0x70 scope:global +ProcessStimulus__Q214EventSequencer6EngineUiUifPQ214EventSequencer8IContextQ214EventSequencer9QueueMode = .text:0x801F7BB8; // type:function size:0x7C scope:global +ProcessStimulus__Q214EventSequencer6EngineUifPQ214EventSequencer8IContextQ214EventSequencer9QueueMode = .text:0x801F7C34; // type:function size:0x94 scope:global +Trigger__Q214EventSequencer6EnginefPQ214EventSequencer8IContextQ214EventSequencer9QueueMode = .text:0x801F7CC8; // type:function size:0x94 scope:global +FireEventTag__Q214EventSequencer6EngineUiPQ214EventSequencer8IContext = .text:0x801F7D5C; // type:function size:0x7C scope:global +Flush__Q214EventSequencer6Engine = .text:0x801F7DD8; // type:function size:0x50 scope:global +Stop__Q214EventSequencer6EnginefbPQ214EventSequencer8IContext = .text:0x801F7E28; // type:function size:0x78 scope:global +Complete__Q214EventSequencer6EnginefbPQ214EventSequencer8IContext = .text:0x801F7EA0; // type:function size:0x78 scope:global +Pause__Q214EventSequencer6EnginefPQ214EventSequencer8IContext = .text:0x801F7F18; // type:function size:0x70 scope:global +Resume__Q214EventSequencer6EnginefPQ214EventSequencer8IContext = .text:0x801F7F88; // type:function size:0x70 scope:global +Reset__Q214EventSequencer6Enginef = .text:0x801F7FF8; // type:function size:0xAC scope:global +SetVerbose__Q214EventSequencer6Engineb = .text:0x801F80A4; // type:function size:0x8 scope:global +_IHandle__14ISteeringWheel = .text:0x801F80AC; // type:function size:0xC scope:global +_._19SteeringWheelDevice = .text:0x801F80B8; // type:function size:0x60 scope:global +Construct__10GameDevicei = .text:0x801F8118; // type:function size:0x44 scope:global +IsWheel__10GameDevice = .text:0x801F815C; // type:function size:0x4C scope:global +GetInterfaces__10GameDevice = .text:0x801F81A8; // type:function size:0x8 scope:global +GetSecondaryDevice__10GameDevice = .text:0x801F81B0; // type:function size:0x18 scope:global +OnGrowRequest__Q23UTLt6Vector2ZQ33UTL11Collections10_KeyedNodei16Ui = .text:0x801F81C8; // type:function size:0x4 scope:global +SType__Q29WorldConn13Pkt_Body_Send = .text:0x801F81CC; // type:function size:0x58 scope:global +BuildMessageTable__12MAIEngineRevP9lua_StatePCQ26Hermes7Message = .text:0x801F8224; // type:function size:0x15C scope:global +BuildMessageTable__16MAudioReflectionP9lua_StatePCQ26Hermes7Message = .text:0x801F8380; // type:function size:0xCC scope:global +_._Q43UTL11Collectionst8Listable2Z11ActionQueuei20_4List = .text:0x801F844C; // type:function size:0xB4 scope:global +BuildMessageTable__16MBreakerStopCopsP9lua_StatePCQ26Hermes7Message = .text:0x801F8500; // type:function size:0xA4 scope:global +_._Q43UTL11Collectionst12Instanceable3ZPQ214EventSequencer9HENGINE__ZQ214EventSequencer7IEnginei434_5_List = .text:0x801F85A4; // type:function size:0xB4 scope:global +BuildMessageTable__18MNotifyEngineBlownP9lua_StatePCQ26Hermes7Message = .text:0x801F8658; // type:function size:0xC0 scope:global +BuildMessageTable__18MEnterRaceOverFlowP9lua_StatePCQ26Hermes7Message = .text:0x801F8718; // type:function size:0x20 scope:global +BuildMessageTable__16MSetTrafficSpeedP9lua_StatePCQ26Hermes7Message = .text:0x801F8738; // type:function size:0xC8 scope:global +BuildMessageTable__15MGamePlayMomentP9lua_StatePCQ26Hermes7Message = .text:0x801F8800; // type:function size:0x108 scope:global +BuildMessageTable__20MNotifyMovieFinishedP9lua_StatePCQ26Hermes7Message = .text:0x801F8908; // type:function size:0x20 scope:global +BuildMessageTable__10MMiscSoundP9lua_StatePCQ26Hermes7Message = .text:0x801F8928; // type:function size:0x7C scope:global +BuildMessageTable__12MRestartRaceP9lua_StatePCQ26Hermes7Message = .text:0x801F89A4; // type:function size:0x20 scope:global +BuildMessageTable__20MSetCopAutoSpawnModeP9lua_StatePCQ26Hermes7Message = .text:0x801F89C4; // type:function size:0x58 scope:global +BuildMessageTable__14MEnterFreeRoamP9lua_StatePCQ26Hermes7Message = .text:0x801F8A1C; // type:function size:0x20 scope:global +BuildMessageTable__18MFlowReadyForOutroP9lua_StatePCQ26Hermes7Message = .text:0x801F8A3C; // type:function size:0x20 scope:global +BuildMessageTable__16MNotifyMusicFlowP9lua_StatePCQ26Hermes7Message = .text:0x801F8A5C; // type:function size:0x7C scope:global +BuildMessageTable__23MNotifyVehicleDestroyedP9lua_StatePCQ26Hermes7Message = .text:0x801F8AD8; // type:function size:0xC0 scope:global +BuildMessageTable__23MAcceptEnterCareerEventP9lua_StatePCQ26Hermes7Message = .text:0x801F8B98; // type:function size:0x20 scope:global +BuildMessageTable__18MControlPathfinderP9lua_StatePCQ26Hermes7Message = .text:0x801F8BB8; // type:function size:0x120 scope:global +BuildMessageTable__14MCountdownDoneP9lua_StatePCQ26Hermes7Message = .text:0x801F8CD8; // type:function size:0x20 scope:global +BuildMessageTable__24MDeclineEnterCareerEventP9lua_StatePCQ26Hermes7Message = .text:0x801F8CF8; // type:function size:0x20 scope:global +BuildMessageTable__17MEnteringGameplayP9lua_StatePCQ26Hermes7Message = .text:0x801F8D18; // type:function size:0x20 scope:global +BuildMessageTable__18MEnterPostRaceFlowP9lua_StatePCQ26Hermes7Message = .text:0x801F8D38; // type:function size:0x20 scope:global +BuildMessageTable__15MEnterSafeHouseP9lua_StatePCQ26Hermes7Message = .text:0x801F8D58; // type:function size:0x58 scope:global +BuildMessageTable__18MForcePursuitStartP9lua_StatePCQ26Hermes7Message = .text:0x801F8DB0; // type:function size:0x7C scope:global +BuildMessageTable__18MICECameraFinishedP9lua_StatePCQ26Hermes7Message = .text:0x801F8E2C; // type:function size:0x20 scope:global +BuildMessageTable__10MJackKnifeP9lua_StatePCQ26Hermes7Message = .text:0x801F8E4C; // type:function size:0x20 scope:global +BuildMessageTable__8MJumpCutP9lua_StatePCQ26Hermes7Message = .text:0x801F8E6C; // type:function size:0x78 scope:global +BuildMessageTable__16MLoadingCompleteP9lua_StatePCQ26Hermes7Message = .text:0x801F8EE4; // type:function size:0x20 scope:global +BuildMessageTable__12MNISCompleteP9lua_StatePCQ26Hermes7Message = .text:0x801F8F04; // type:function size:0x58 scope:global +BuildMessageTable__23MNotifyCellCallCompleteP9lua_StatePCQ26Hermes7Message = .text:0x801F8F5C; // type:function size:0x20 scope:global +BuildMessageTable__22MNotifyCellCallStartedP9lua_StatePCQ26Hermes7Message = .text:0x801F8F7C; // type:function size:0x20 scope:global +BuildMessageTable__22MNotifyChallengePassedP9lua_StatePCQ26Hermes7Message = .text:0x801F8F9C; // type:function size:0x58 scope:global +BuildMessageTable__15MNotifyFinishedP9lua_StatePCQ26Hermes7Message = .text:0x801F8FF4; // type:function size:0x88 scope:global +BuildMessageTable__17MNotifyKnockedOutP9lua_StatePCQ26Hermes7Message = .text:0x801F907C; // type:function size:0xC0 scope:global +BuildMessageTable__18MNotifyMessageDoneP9lua_StatePCQ26Hermes7Message = .text:0x801F913C; // type:function size:0x20 scope:global +BuildMessageTable__24MNotifyMilestoneProgressP9lua_StatePCQ26Hermes7Message = .text:0x801F915C; // type:function size:0x80 scope:global +BuildMessageTable__23MNotifyMilestoneReachedP9lua_StatePCQ26Hermes7Message = .text:0x801F91DC; // type:function size:0x80 scope:global +BuildMessageTable__21MNotifyOnlineRaceOverP9lua_StatePCQ26Hermes7Message = .text:0x801F925C; // type:function size:0x58 scope:global +BuildMessageTable__16MNotifyPlayerRepP9lua_StatePCQ26Hermes7Message = .text:0x801F92B4; // type:function size:0x10C scope:global +BuildMessageTable__20MNotifyPursuitLengthP9lua_StatePCQ26Hermes7Message = .text:0x801F93C0; // type:function size:0xE8 scope:global +BuildMessageTable__20MNotifyRaceAbandonedP9lua_StatePCQ26Hermes7Message = .text:0x801F94A8; // type:function size:0x20 scope:global +BuildMessageTable__20MNotifyRacePlacementP9lua_StatePCQ26Hermes7Message = .text:0x801F94C8; // type:function size:0x164 scope:global +BuildMessageTable__15MNotifyRaceTimeP9lua_StatePCQ26Hermes7Message = .text:0x801F962C; // type:function size:0xA8 scope:global +BuildMessageTable__22MNotifyRaceTimeExpiredP9lua_StatePCQ26Hermes7Message = .text:0x801F96D4; // type:function size:0x20 scope:global +BuildMessageTable__22MNotifyRaceTimeSecTickP9lua_StatePCQ26Hermes7Message = .text:0x801F96F4; // type:function size:0x58 scope:global +BuildMessageTable__14MNotifySimTickP9lua_StatePCQ26Hermes7Message = .text:0x801F974C; // type:function size:0x80 scope:global +BuildMessageTable__19MNotifySpeechStatusP9lua_StatePCQ26Hermes7Message = .text:0x801F97CC; // type:function size:0x88 scope:global +BuildMessageTable__16MNotifySpeedTrapP9lua_StatePCQ26Hermes7Message = .text:0x801F9854; // type:function size:0x140 scope:global +BuildMessageTable__12MNotifyTimerP9lua_StatePCQ26Hermes7Message = .text:0x801F9994; // type:function size:0x58 scope:global +BuildMessageTable__11MPerpBustedP9lua_StatePCQ26Hermes7Message = .text:0x801F99EC; // type:function size:0xC0 scope:global +BuildMessageTable__12MPerpEscapedP9lua_StatePCQ26Hermes7Message = .text:0x801F9AAC; // type:function size:0xC0 scope:global +BuildMessageTable__19MPlayerEnterPursuitP9lua_StatePCQ26Hermes7Message = .text:0x801F9B6C; // type:function size:0x20 scope:global +BuildMessageTable__15MPursuitBreakerP9lua_StatePCQ26Hermes7Message = .text:0x801F9B8C; // type:function size:0x58 scope:global +BuildMessageTable__12MPursuitOverP9lua_StatePCQ26Hermes7Message = .text:0x801F9BE4; // type:function size:0xC0 scope:global +BuildMessageTable__15MQuitToFrontEndP9lua_StatePCQ26Hermes7Message = .text:0x801F9CA4; // type:function size:0x20 scope:global +BuildMessageTable__10MReqBackupP9lua_StatePCQ26Hermes7Message = .text:0x801F9CC4; // type:function size:0x7C scope:global +BuildMessageTable__13MReqRoadBlockP9lua_StatePCQ26Hermes7Message = .text:0x801F9D40; // type:function size:0x7C scope:global +BuildMessageTable__15MSetCopsEnabledP9lua_StatePCQ26Hermes7Message = .text:0x801F9DBC; // type:function size:0x58 scope:global +BuildMessageTable__9MSpawnCopP9lua_StatePCQ26Hermes7Message = .text:0x801F9E14; // type:function size:0xF0 scope:global +BuildMessageTable__13MSpawnTrafficP9lua_StatePCQ26Hermes7Message = .text:0x801F9F04; // type:function size:0xA0 scope:global +BuildMessageTable__11MStateEnterP9lua_StatePCQ26Hermes7Message = .text:0x801F9FA4; // type:function size:0x20 scope:global +BuildMessageTable__10MStateExitP9lua_StatePCQ26Hermes7Message = .text:0x801F9FC4; // type:function size:0x20 scope:global +BuildMessageTable__13MTriggerEnterP9lua_StatePCQ26Hermes7Message = .text:0x801F9FE4; // type:function size:0x118 scope:global +BuildMessageTable__12MTriggerExitP9lua_StatePCQ26Hermes7Message = .text:0x801FA0FC; // type:function size:0x118 scope:global +BuildMessageTable__14MTriggerInsideP9lua_StatePCQ26Hermes7Message = .text:0x801FA214; // type:function size:0x118 scope:global +BuildMessageTable__11MUnspawnCopP9lua_StatePCQ26Hermes7Message = .text:0x801FA32C; // type:function size:0x10C scope:global +Retain__Q26Attrib37AICollisionReactionRecord_TypeHandlerPv = .text:0x801FA438; // type:function size:0x8 scope:global +Clone__Q26Attrib37AICollisionReactionRecord_TypeHandlerPv = .text:0x801FA440; // type:function size:0x4C scope:global +Clean__Q26Attrib37AICollisionReactionRecord_TypeHandlerPv = .text:0x801FA48C; // type:function size:0x24 scope:global +Release__Q26Attrib37AICollisionReactionRecord_TypeHandlerPv = .text:0x801FA4B0; // type:function size:0x24 scope:global +Retain__Q26Attrib26Attrib_RefSpec_TypeHandlerPv = .text:0x801FA4D4; // type:function size:0x8 scope:global +Clone__Q26Attrib26Attrib_RefSpec_TypeHandlerPv = .text:0x801FA4DC; // type:function size:0x64 scope:global +Clean__Q26Attrib26Attrib_RefSpec_TypeHandlerPv = .text:0x801FA540; // type:function size:0x24 scope:global +Release__Q26Attrib26Attrib_RefSpec_TypeHandlerPv = .text:0x801FA564; // type:function size:0x24 scope:global +Retain__Q26Attrib27CollisionStream_TypeHandlerPv = .text:0x801FA588; // type:function size:0x8 scope:global +Clone__Q26Attrib27CollisionStream_TypeHandlerPv = .text:0x801FA590; // type:function size:0x48 scope:global +Clean__Q26Attrib27CollisionStream_TypeHandlerPv = .text:0x801FA5D8; // type:function size:0x24 scope:global +Release__Q26Attrib27CollisionStream_TypeHandlerPv = .text:0x801FA5FC; // type:function size:0x24 scope:global +Retain__Q26Attrib31EffectLinkageRecord_TypeHandlerPv = .text:0x801FA620; // type:function size:0x8 scope:global +Clone__Q26Attrib31EffectLinkageRecord_TypeHandlerPv = .text:0x801FA628; // type:function size:0x5C scope:global +Clean__Q26Attrib31EffectLinkageRecord_TypeHandlerPv = .text:0x801FA684; // type:function size:0x38 scope:global +Release__Q26Attrib31EffectLinkageRecord_TypeHandlerPv = .text:0x801FA6BC; // type:function size:0x38 scope:global +Retain__Q26Attrib28TireEffectRecord_TypeHandlerPv = .text:0x801FA6F4; // type:function size:0x8 scope:global +Clone__Q26Attrib28TireEffectRecord_TypeHandlerPv = .text:0x801FA6FC; // type:function size:0x50 scope:global +Clean__Q26Attrib28TireEffectRecord_TypeHandlerPv = .text:0x801FA74C; // type:function size:0x24 scope:global +Release__Q26Attrib28TireEffectRecord_TypeHandlerPv = .text:0x801FA770; // type:function size:0x24 scope:global +Retain__Q26Attrib32TrafficPatternRecord_TypeHandlerPv = .text:0x801FA794; // type:function size:0x8 scope:global +Clone__Q26Attrib32TrafficPatternRecord_TypeHandlerPv = .text:0x801FA79C; // type:function size:0x58 scope:global +Clean__Q26Attrib32TrafficPatternRecord_TypeHandlerPv = .text:0x801FA7F4; // type:function size:0x24 scope:global +Release__Q26Attrib32TrafficPatternRecord_TypeHandlerPv = .text:0x801FA818; // type:function size:0x24 scope:global +Retain__Q26Attrib24UpgradeSpecs_TypeHandlerPv = .text:0x801FA83C; // type:function size:0x8 scope:global +Clone__Q26Attrib24UpgradeSpecs_TypeHandlerPv = .text:0x801FA844; // type:function size:0x48 scope:global +Clean__Q26Attrib24UpgradeSpecs_TypeHandlerPv = .text:0x801FA88C; // type:function size:0x24 scope:global +Release__Q26Attrib24UpgradeSpecs_TypeHandlerPv = .text:0x801FA8B0; // type:function size:0x24 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP11ActionQueuei16Ui = .text:0x801FA8D4; // type:function size:0x4 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei434i16UiUi = .text:0x801FA8D8; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei434i16PQ33UTL11Collections10_KeyedNodeUi = .text:0x801FA8E0; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei434i16Ui = .text:0x801FA8E4; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei434i16 = .text:0x801FA8EC; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP11ActionQueuei20i16UiUi = .text:0x801FA8F4; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP11ActionQueuei20i16PP11ActionQueueUi = .text:0x801FA8FC; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP11ActionQueuei20i16Ui = .text:0x801FA900; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP11ActionQueuei20i16 = .text:0x801FA908; // type:function size:0x8 scope:global +GetGrowSize__CQ23UTLt6Vector2ZQ33UTL11Collections10_KeyedNodei16Ui = .text:0x801FA910; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP11ActionQueuei16Ui = .text:0x801FA930; // type:function size:0x20 scope:global +_._Q23UTLt6Vector2ZP11ActionQueuei16 = .text:0x801FA950; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP11ActionQueuei20i16 = .text:0x801FA984; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2ZQ33UTL11Collections10_KeyedNodei16 = .text:0x801FAA38; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei434i16 = .text:0x801FAA6C; // type:function size:0xB4 scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP11ActionQueuei16 = .text:0x801FAB20; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZQ33UTL11Collections10_KeyedNodei16 = .text:0x801FAB2C; // type:function size:0xC scope:global +_GLOBAL_.I.__8E911Call = .text:0x801FAB38; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x801FAB64; // type:label scope:local +InitBasisMatricies__Fv = .text:0x801FAB64; // type:function size:0x1B8 scope:global +FixupEndpoints__11QuickSpline = .text:0x801FAD1C; // type:function size:0x270 scope:global +MemoryImageLoad__11QuickSplineP8bVector4 = .text:0x801FAF8C; // type:function size:0x54 scope:global +HasKink__11QuickSpline = .text:0x801FAFE0; // type:function size:0x14C scope:global +LoaderQuickSpline__FP6bChunk = .text:0x801FB12C; // type:function size:0x138 scope:global +UnloadSpline__FP11QuickSpline = .text:0x801FB264; // type:function size:0x6C scope:global +UnloaderQuickSpline__FP6bChunk = .text:0x801FB2D0; // type:function size:0x7C scope:global +IsAmerica__11BuildRegionv = .text:0x801FB34C; // type:function size:0x8 scope:global +IsEurope__11BuildRegionv = .text:0x801FB354; // type:function size:0x8 scope:global +IsEuropeFr__11BuildRegionv = .text:0x801FB35C; // type:function size:0x8 scope:global +IsEuropeGer__11BuildRegionv = .text:0x801FB364; // type:function size:0x8 scope:global +IsJapan__11BuildRegionv = .text:0x801FB36C; // type:function size:0x8 scope:global +IsKorea__11BuildRegionv = .text:0x801FB374; // type:function size:0x8 scope:global +IsPal__11BuildRegionv = .text:0x801FB37C; // type:function size:0x20 scope:global +ShowLanguageSelect__11BuildRegionv = .text:0x801FB39C; // type:function size:0x8 scope:global +FastMemEmergencyInitialization__FRUiRPCcT0T0 = .text:0x801FB3A4; // type:function size:0x2C scope:global +SeedRandomNumber__Fv = .text:0x801FB3D0; // type:function size:0x70 scope:global +InitBigFiles__Fv = .text:0x801FB440; // type:function size:0x4C scope:global +Main_MyAssert__FPCce = .text:0x801FB48C; // type:function size:0x4C scope:local +InitializeEverything__FiPPc = .text:0x801FB4D8; // type:function size:0x19C scope:global +WriteFreekerBaseAddressBeacon__Fv = .text:0x801FB674; // type:function size:0x4 scope:global +DisplayDebugScreenPrints__Fv = .text:0x801FB678; // type:function size:0x4 scope:global +VerifyJoylogChecksum__Fv = .text:0x801FB67C; // type:function size:0x1E4 scope:global +Main_AnimateFrame__Ff = .text:0x801FB860; // type:function size:0x138 scope:local +Main_SkipFrame__Fi = .text:0x801FB998; // type:function size:0x20 scope:global +Main_DisplayFrame__Fv = .text:0x801FB9B8; // type:function size:0x94 scope:global +CheckTweakerTriggers__Fv = .text:0x801FBA4C; // type:function size:0x4 scope:global +MainLoopCheckForFatalDiscError__Fv = .text:0x801FBA50; // type:function size:0x4 scope:global +MiniMainLoop__Fv = .text:0x801FBA54; // type:function size:0xC8 scope:global +MainLoop__Ff = .text:0x801FBB1C; // type:function size:0x178 scope:global +main = .text:0x801FBC94; // type:function size:0x158 scope:global +LoaderStub__FP6bChunk = .text:0x801FBDEC; // type:function size:0x50 scope:local +CallChunkLoader__FP6bChunk = .text:0x801FBE3C; // type:function size:0x9C scope:global +CallChunkUnloader__FP6bChunk = .text:0x801FBED8; // type:function size:0x9C scope:global +LoadChunks__FP6bChunkiPCc = .text:0x801FBF74; // type:function size:0x64 scope:global +UnloadChunks__FP6bChunkiPCc = .text:0x801FBFD8; // type:function size:0x108 scope:global +ScratchPadMemCpy__FPvPCvUi = .text:0x801FC0E0; // type:function size:0x20 scope:global +MoveChunksRange__FP6bChunkiiPCc = .text:0x801FC100; // type:function size:0xB4 scope:global +MoveChunks__FP6bChunkT0iPCc = .text:0x801FC1B4; // type:function size:0x180 scope:global +LoadEmbeddedChunks__FP6bChunkiPCc = .text:0x801FC334; // type:function size:0x44 scope:global +EndianSwapChunkHeader__FP6bChunk = .text:0x801FC378; // type:function size:0x34 scope:global +EndianSwapChunkHeadersRecursive__FP6bChunki = .text:0x801FC3AC; // type:function size:0x24 scope:global +EndianSwapChunkHeadersRecursive__FP6bChunkT0 = .text:0x801FC3D0; // type:function size:0x8C scope:global +IsTempChunk__FP6bChunk = .text:0x801FC45C; // type:function size:0x8 scope:global +SplitPermTempChunks__FbP6bChunkiPUcii = .text:0x801FC464; // type:function size:0x168 scope:global +ClobberPermChunks__FP6bChunki = .text:0x801FC5CC; // type:function size:0x88 scope:global +LoadTempPermChunks__FPP6bChunkPiiPCc = .text:0x801FC654; // type:function size:0x124 scope:global +PostLoadFixup__Fv = .text:0x801FC778; // type:function size:0x48 scope:global +InitResourceLoader__Fv = .text:0x801FC7C0; // type:function size:0x3C scope:global +__12ResourceFilePCc16ResourceFileTypeiii = .text:0x801FC7FC; // type:function size:0xC8 scope:global +SetAllocationParams__12ResourceFileiPCc = .text:0x801FC8C4; // type:function size:0x38 scope:global +AllocateMemory__12ResourceFileb = .text:0x801FC8FC; // type:function size:0x98 scope:global +FreeMemory__12ResourceFile = .text:0x801FC994; // type:function size:0x4C scope:global +BeginLoading__12ResourceFilePFPv_vPv = .text:0x801FC9E0; // type:function size:0x90 scope:global +ManualUnload__12ResourceFile = .text:0x801FCA70; // type:function size:0x40 scope:global +ManualReload__12ResourceFileP6bChunk = .text:0x801FCAB0; // type:function size:0x38 scope:global +_._12ResourceFile = .text:0x801FCAE8; // type:function size:0x7C scope:global +LoadResourceIfFileTransferFinished__12ResourceFile = .text:0x801FCB64; // type:function size:0x118 scope:global +FileTransferCallback__12ResourceFilePvi = .text:0x801FCC7C; // type:function size:0x10 scope:global +CreateResourceFile__FPCc16ResourceFileTypeiii = .text:0x801FCC8C; // type:function size:0x7C scope:global +LoadResourceFile__FPCc16ResourceFileTypeiPFPv_vPvii = .text:0x801FCD08; // type:function size:0x4C scope:global +UnloadResourceFile__FP12ResourceFile = .text:0x801FCD54; // type:function size:0x64 scope:global +ServiceResourceLoading__Fv = .text:0x801FCDB8; // type:function size:0x110 scope:global +IsResourceLoadingComplete__Fv = .text:0x801FCEC8; // type:function size:0x28 scope:global +WaitForResourceLoadingComplete__Fv = .text:0x801FCEF0; // type:function size:0x48 scope:global +SetDelayedResourceCallback__FPFPv_vPv = .text:0x801FCF38; // type:function size:0x2C scope:global +FindResourceFile__F16ResourceFileType = .text:0x801FCF64; // type:function size:0x38 scope:global +IsCurrentlyHotChunking__Fv = .text:0x801FCF9C; // type:function size:0x1C scope:global +LoaderWCollisionPack__FP6bChunk = .text:0x801FCFB8; // type:function size:0x4C scope:global +UnloaderWCollisionPack__FP6bChunk = .text:0x801FD004; // type:function size:0x4C scope:global +LoaderColourCube__FP6bChunk = .text:0x801FD050; // type:function size:0x1C scope:global +UnloaderColourCube__FP6bChunk = .text:0x801FD06C; // type:function size:0x1C scope:global +__6VMFile = .text:0x801FD088; // type:function size:0x58 scope:global +GetVMFile__Fv = .text:0x801FD0E0; // type:function size:0x34 scope:global +MoveFileIntoVirtualMemoryThenLoadChunks__Fii = .text:0x801FD114; // type:function size:0x128 scope:global +UnloadFileFromVirtualMemory__FP6VMFile = .text:0x801FD23C; // type:function size:0x68 scope:global +LoadFileIntoVirtualMemory__FPCcbT1 = .text:0x801FD2A4; // type:function size:0xEC scope:global +AddDepFile__FPCcPvUi = .text:0x801FD390; // type:function size:0xF0 scope:global +RemoveDepFile__FPCc = .text:0x801FD480; // type:function size:0xF8 scope:global +AddVault__FPCcPvUi = .text:0x801FD578; // type:function size:0x384 scope:global +RemoveVault__FPCc = .text:0x801FD8FC; // type:function size:0x108 scope:global +OverrideAllocator__11AttribAllocP16IAttribAllocator = .text:0x801FDA04; // type:function size:0x40 scope:global +RenderTrackMarkers__FP5eView = .text:0x801FDA44; // type:function size:0x4 scope:global +CalculateSimMode__Fv = .text:0x801FDA48; // type:function size:0x64 scope:global +GetBuildVersionName__FPc = .text:0x801FDAAC; // type:function size:0x28 scope:global +CodeOverlayLoadedFrontendCallback__Fii = .text:0x801FDAD4; // type:function size:0x50 scope:global +CodeOverlayLoadingFrontend__FPFi_vi = .text:0x801FDB24; // type:function size:0x15C scope:global +CodeOverlayUnloadingFrontend__Fv = .text:0x801FDC80; // type:function size:0x4 scope:global +CodeOverlayLoadingGame__Fv = .text:0x801FDC84; // type:function size:0x138 scope:global +CodeOverlayUnloadingGame__Fv = .text:0x801FDDBC; // type:function size:0x70 scope:global +ActivateMemorySponge__Fv = .text:0x801FDE2C; // type:function size:0x3C scope:global +DeactivateMemorySponge__Fv = .text:0x801FDE68; // type:function size:0x18 scope:global +LoadMemoryFileCallback__Fii = .text:0x801FDE80; // type:function size:0x20 scope:global +LoadMemoryFile__FPCc = .text:0x801FDEA0; // type:function size:0x60 scope:global +BlockUntilMemoryFileLoaded__FPv = .text:0x801FDF00; // type:function size:0x4C scope:global +UnloadMemoryFile__FPv = .text:0x801FDF4C; // type:function size:0x3C scope:global +SetLeakDetector__Fv = .text:0x801FDF88; // type:function size:0x48 scope:global +CheckLeakDetector__FPCc = .text:0x801FDFD0; // type:function size:0x4 scope:global +MaybeDoMemoryProfile__Fv = .text:0x801FDFD4; // type:function size:0x4 scope:global +BeginGameFlowLoadRegion__Fv = .text:0x801FDFD8; // type:function size:0x28 scope:global +CheckForHolesInMemory__Fv = .text:0x801FE000; // type:function size:0x2C scope:global +BeginLoading__12RegionLoader = .text:0x801FE02C; // type:function size:0x134 scope:global +GetTODFilename__F10eTimeOfDayPCcPci = .text:0x801FE160; // type:function size:0x9C scope:global +LoadHandler__12RegionLoader = .text:0x801FE1FC; // type:function size:0x290 scope:global +FinishedLoading__12RegionLoader = .text:0x801FE48C; // type:function size:0xB8 scope:global +Unload__12RegionLoader = .text:0x801FE544; // type:function size:0x194 scope:global +BeginGameFlowLoadTrack__Fv = .text:0x801FE6D8; // type:function size:0x28 scope:global +BeginLoading__11TrackLoader = .text:0x801FE700; // type:function size:0x5C scope:global +LoadHandler__11TrackLoader = .text:0x801FE75C; // type:function size:0xA4 scope:global +FinishedLoading__11TrackLoader = .text:0x801FE800; // type:function size:0x3C scope:global +Unload__11TrackLoader = .text:0x801FE83C; // type:function size:0x170 scope:global +EnableBarrierSceneryGroup__FPCcb = .text:0x801FE9AC; // type:function size:0x70 scope:global +InitTopologyAndSceneryGroups__Fv = .text:0x801FEA1C; // type:function size:0x28 scope:global +InitTopologyAndSceneryGroups__11TrackLoader = .text:0x801FEA44; // type:function size:0x50 scope:global +CloseTopologyAndSceneryGroups__Fv = .text:0x801FEA94; // type:function size:0x28 scope:global +CloseTopologyAndSceneryGroups__11TrackLoader = .text:0x801FEABC; // type:function size:0x44 scope:global +RedoTopologyAndSceneryGroups__Fv = .text:0x801FEB00; // type:function size:0x54 scope:global +BeginGameFlowUnloadTrack__Fi = .text:0x801FEB54; // type:function size:0x74 scope:global +GameFlowClearFEngLoadingScreen__Fv = .text:0x801FEBC8; // type:function size:0x28 scope:global +FinishedGameLoading__Fv = .text:0x801FEBF0; // type:function size:0x16C scope:global +WaitForSimulation__Fv = .text:0x801FED5C; // type:function size:0x6C scope:global +BeginWorldLoad__Fv = .text:0x801FEDC8; // type:function size:0x18C scope:global +__15GameFlowManager = .text:0x801FEF54; // type:function size:0x2C scope:global +SetSingleFunction__15GameFlowManagerPFi_vPCci = .text:0x801FEF80; // type:function size:0x38 scope:global +SetWaitingForCallback__15GameFlowManagerPCci = .text:0x801FEFB8; // type:function size:0x3C scope:global +ClearWaitingForCallback__15GameFlowManager = .text:0x801FEFF4; // type:function size:0x18 scope:global +Service__15GameFlowManager = .text:0x801FF00C; // type:function size:0x84 scope:global +SetState__15GameFlowManager13GameFlowState = .text:0x801FF090; // type:function size:0x8 scope:global +InitializeSingleAttributeVault__FPvPCcPPUcUi = .text:0x801FF098; // type:function size:0x1A4 scope:global +LoadFrontEndVault__Fb = .text:0x801FF23C; // type:function size:0xE8 scope:global +LoadFrontend__15GameFlowManager = .text:0x801FF324; // type:function size:0x50 scope:global +UnloadFrontEndVault__Fv = .text:0x801FF374; // type:function size:0xE8 scope:global +UnloadFrontend__15GameFlowManager = .text:0x801FF45C; // type:function size:0x34 scope:global +LoadTrack__15GameFlowManager = .text:0x801FF490; // type:function size:0x34 scope:global +ReloadTrack__15GameFlowManager = .text:0x801FF4C4; // type:function size:0x24 scope:global +UnloadTrack__15GameFlowManager = .text:0x801FF4E8; // type:function size:0x24 scope:global +CheckForDemoDiscTimeout__15GameFlowManager = .text:0x801FF50C; // type:function size:0x4 scope:global +IsPaused__15GameFlowManager = .text:0x801FF510; // type:function size:0x2C scope:global +LoadGlobalAChunks__Fv = .text:0x801FF53C; // type:function size:0x64 scope:global +LoadGlobalChunks__Fv = .text:0x801FF5A0; // type:function size:0x3C4 scope:global +DelayWaitForLoadingScreen__Fv = .text:0x801FF964; // type:function size:0x70 scope:global +GameFlowLoadingFrontEndPart3__Fi = .text:0x801FF9D4; // type:function size:0x5C scope:global +GameFlowLoadingFrontEndPart2__Fi = .text:0x801FFA30; // type:function size:0x58 scope:global +GameFlowLoadGarageScreen__FPFi_vi = .text:0x801FFA88; // type:function size:0x8C scope:global +GameFlowLoadingFrontEndPart1__Fi = .text:0x801FFB14; // type:function size:0x58 scope:global +BeginGameFlowLoadingFrontEnd__Fv = .text:0x801FFB6C; // type:function size:0x15C scope:global +EndGameFlowLoadingFrontEnd__Fv = .text:0x801FFCC8; // type:function size:0x5C scope:global +BeginGameFlowUnloadingFrontEnd__Fv = .text:0x801FFD24; // type:function size:0x168 scope:global +HandleTrackStreamerLoadingBar__Fv = .text:0x801FFE8C; // type:function size:0xB4 scope:global +BootLoadingScreen__Fv = .text:0x801FFF40; // type:function size:0x84 scope:global +GetChunkName__Fi = .text:0x801FFFC4; // type:function size:0x98 scope:global +GetIndex__9tEnvelopef = .text:0x8020005C; // type:function size:0x58 scope:global +OutOfRange__9tEnvelopef = .text:0x802000B4; // type:function size:0x38 scope:global +GetSlope__9tEnvelopei = .text:0x802000EC; // type:function size:0x50 scope:global +GetValue__9tEnvelopef = .text:0x8020013C; // type:function size:0x84 scope:global +GetAmplitude__7tShaker = .text:0x802001C0; // type:function size:0x40 scope:global +StartShaking__7tShakerP8bVector3ff = .text:0x80200200; // type:function size:0x48 scope:global +Update__7tShakerf = .text:0x80200248; // type:function size:0x60 scope:global +GetValue__7tShakerP8bVector3 = .text:0x802002A8; // type:function size:0x90 scope:global +UpdateCameraShakers__Ff = .text:0x80200338; // type:function size:0x58 scope:global +ResetCameraShakers__Fv = .text:0x80200390; // type:function size:0x5C scope:global +GetShake__FiP8bVector3 = .text:0x802003EC; // type:function size:0x30 scope:global +ApplyCameraShake__FiP8bMatrix4 = .text:0x8020041C; // type:function size:0x148 scope:global +ForceCameraShake__FiP8bVector3 = .text:0x80200564; // type:function size:0x40 scope:global +MaybeCameraShake__FiP8bVector3 = .text:0x802005A4; // type:function size:0x180 scope:global +__12JoylogBufferPCci = .text:0x80200724; // type:function size:0x5C scope:global +SaveBuffer__12JoylogBuffer = .text:0x80200780; // type:function size:0x54 scope:global +LoadBuffer__12JoylogBufferi = .text:0x802007D4; // type:function size:0x90 scope:global +AddData__12JoylogBufferiii = .text:0x80200864; // type:function size:0x130 scope:global +GetData__12JoylogBufferii = .text:0x80200994; // type:function size:0x124 scope:global +AddEntry__12JoylogBufferP17JoylogBufferEntryi = .text:0x80200AB8; // type:function size:0x64 scope:global +GetEntry__12JoylogBufferP17JoylogBufferEntryi = .text:0x80200B1C; // type:function size:0x48 scope:global +GetEntry__12JoylogBufferP17JoylogBufferEntryPUc = .text:0x80200B64; // type:function size:0x64 scope:global +PrintNearbyJoylogEntries__12JoylogBufferi = .text:0x80200BC8; // type:function size:0x8C scope:global +StopReplaying__6Joylog = .text:0x80200C54; // type:function size:0x24 scope:global +LoadReadAheadBuffer__6Joylog = .text:0x80200C78; // type:function size:0x48 scope:global +ReadAheadFromChannel__6JoylogPvii = .text:0x80200CC0; // type:function size:0xDC scope:global +FreeReadAheadBuffer__6Joylog = .text:0x80200D9C; // type:function size:0x40 scope:global +GetData__6Joylogi13JoylogChannel = .text:0x80200DDC; // type:function size:0x74 scope:global +GetSignedData__6Joylogi13JoylogChannel = .text:0x80200E50; // type:function size:0x38 scope:global +GetData__6JoylogPvi13JoylogChannel = .text:0x80200E88; // type:function size:0x58 scope:global +AddData__6Joylogii13JoylogChannel = .text:0x80200EE0; // type:function size:0x48 scope:global +AddData__6JoylogPCvi13JoylogChannel = .text:0x80200F28; // type:function size:0x5C scope:global +AddOrGetData__6JoylogUii13JoylogChannel = .text:0x80200F84; // type:function size:0x6C scope:global +AddOrGetData__6Joylogf13JoylogChannel = .text:0x80200FF0; // type:function size:0x7C scope:global +AddOrGetData__6JoylogPc13JoylogChannel = .text:0x8020106C; // type:function size:0xC0 scope:global +AddOrGetData__6JoylogPUs13JoylogChannel = .text:0x8020112C; // type:function size:0xC8 scope:global +Init__6Joylog = .text:0x802011F4; // type:function size:0xFC scope:global +Save__6Joylog = .text:0x802012F0; // type:function size:0x30 scope:global +IsCapturing__6Joylog = .text:0x80201320; // type:function size:0xC scope:global +IsReplaying__6Joylog = .text:0x8020132C; // type:function size:0xC scope:global +JoylogPutStringFunction__FiPCc = .text:0x80201338; // type:function size:0x78 scope:global +DumpJoylogPrint__Fv = .text:0x802013B0; // type:function size:0x78 scope:global +WriteJoylogFileHeader__Fv = .text:0x80201428; // type:function size:0x164 scope:global +InitJoylog__Fv = .text:0x8020158C; // type:function size:0x50 scope:global +ServiceJoylog__Fv = .text:0x802015DC; // type:function size:0x44 scope:global +GetQueuedFileDebugTime__Fv = .text:0x80201620; // type:function size:0x2C scope:global +IsQueuedFileJoyloggable__FPCc = .text:0x8020164C; // type:function size:0x34 scope:global +SetQueuedFileMinPriority__Fi = .text:0x80201680; // type:function size:0xC scope:global +__10QueuedFilePvPCciiT1T1P16QueuedFileParams = .text:0x8020168C; // type:function size:0x16C scope:global +_._10QueuedFile = .text:0x802017F8; // type:function size:0x4C scope:global +BeginRead__10QueuedFile = .text:0x80201844; // type:function size:0x100 scope:global +ReadDoneCallback__10QueuedFile = .text:0x80201944; // type:function size:0x54 scope:global +TestAddQueuedFile__16QueuedFileBundleP10QueuedFile = .text:0x80201998; // type:function size:0x1B4 scope:global +BeginRead__16QueuedFileBundle = .text:0x80201B4C; // type:function size:0xA0 scope:global +ReadCallback__16QueuedFileBundlei = .text:0x80201BEC; // type:function size:0xCC scope:global +CheckQueuedFileCallbacks__Fv = .text:0x80201CB8; // type:function size:0x1B4 scope:global +StartQueuedFileReading__Fv = .text:0x80201E6C; // type:function size:0x220 scope:global +ServiceQueuedFiles__Fv = .text:0x8020208C; // type:function size:0x24 scope:global +IsQueuedFileBusy__Fv = .text:0x802020B0; // type:function size:0x30 scope:global +BlockWhileQueuedFileBusy__Fv = .text:0x802020E0; // type:function size:0x48 scope:global +InitQueuedFiles__Fv = .text:0x80202128; // type:function size:0x3C scope:global +GetQueuedFileSize__FPCc = .text:0x80202164; // type:function size:0x20 scope:global +AddQueuedFile__FPvPCciiPFPvi_vT0P16QueuedFileParams = .text:0x80202184; // type:function size:0xDC scope:global +AddQueuedFile2__FPvPCciiPFPviPv_vT0T0P16QueuedFileParams = .text:0x80202260; // type:function size:0x98 scope:global +bSyncTaskRun__Fv = .text:0x802022F8; // type:function size:0x20 scope:global +bThreadYield__Fi = .text:0x80202318; // type:function size:0x20 scope:global +bIsMainThread__Fv = .text:0x80202338; // type:function size:0x24 scope:global +bFileGetFilenameHash__FPCc = .text:0x8020235C; // type:function size:0x88 scope:global +ServiceFileStats__Fv = .text:0x802023E4; // type:function size:0x4 scope:global +GetRealFileOpenFlags__F13bFileOpenMode = .text:0x802023E8; // type:function size:0x2C scope:global +AddMemoryFile__FPv = .text:0x80202414; // type:function size:0xAC scope:global +RemoveMemoryFile__FPv = .text:0x802024C0; // type:function size:0x14 scope:global +FindMemoryFileEntry__FPCc = .text:0x802024D4; // type:function size:0x7C scope:global +AsyncCloseFileCallback__FiiPv = .text:0x80202550; // type:function size:0x20 scope:global +AsyncCloseFile__Fi = .text:0x80202570; // type:function size:0x34 scope:global +FindHandle__20CachedRealFileHandlePCc = .text:0x802025A4; // type:function size:0x88 scope:global +AddHandle__20CachedRealFileHandlePCcii = .text:0x8020262C; // type:function size:0xA4 scope:global +RemoveUnusedHandle__20CachedRealFileHandle = .text:0x802026D0; // type:function size:0x98 scope:global +FlushUnusedHandle__20CachedRealFileHandlePCc = .text:0x80202768; // type:function size:0x68 scope:global +FlushUnusedHandles__20CachedRealFileHandleb = .text:0x802027D0; // type:function size:0x28 scope:global +bFileFlushCachedFiles__Fv = .text:0x802027F8; // type:function size:0x24 scope:global +bFileFlushCacheFile__FPCc = .text:0x8020281C; // type:function size:0x20 scope:global +bInitDisculatorDriver__FPCcT0 = .text:0x8020283C; // type:function size:0x4C scope:global +Create__16DisculatorDriverPCcT1 = .text:0x80202888; // type:function size:0xB4 scope:global +Init__16DisculatorDriver = .text:0x8020293C; // type:function size:0x58 scope:global +Restore__16DisculatorDriver = .text:0x80202994; // type:function size:0x4 scope:global +Open__16DisculatorDriverPCciPi = .text:0x80202998; // type:function size:0x118 scope:global +Close__16DisculatorDriveri = .text:0x80202AB0; // type:function size:0x3C scope:global +Read__16DisculatorDriveriPvUiPQ28RealFile12DeviceDriveri = .text:0x80202AEC; // type:function size:0x174 scope:global +Write__16DisculatorDriveriPCvUiPQ28RealFile12DeviceDriveri = .text:0x80202C60; // type:function size:0x8 scope:global +Seek__16DisculatorDriveriUxiPQ28RealFile12DeviceDriveri = .text:0x80202C68; // type:function size:0x34 scope:global +Getsize__16DisculatorDriveri = .text:0x80202C9C; // type:function size:0xC scope:global +QueryLocation__16DisculatorDriveri = .text:0x80202CA8; // type:function size:0xC scope:global +LoadGiantFiles__16DisculatorDriverPCcT1 = .text:0x80202CB4; // type:function size:0x1C4 scope:global +FindDirectoryEntry__16DisculatorDriverPCc = .text:0x80202E78; // type:function size:0x13C scope:global +__5bFilePCc13bFileOpenMode = .text:0x80202FB4; // type:function size:0x15C scope:global +_._5bFile = .text:0x80203110; // type:function size:0xCC scope:global +OpenLowLevel__5bFile = .text:0x802031DC; // type:function size:0x10C scope:global +MaybeAddCachedHandle__5bFile = .text:0x802032E8; // type:function size:0x68 scope:global +Seek__5bFileii = .text:0x80203350; // type:function size:0x4C scope:global +ReadAsync__5bFilePviPFPv_vT1 = .text:0x8020339C; // type:function size:0x1CC scope:global +FlushWriteBuffer__5bFile = .text:0x80203568; // type:function size:0x58 scope:global +Write__5bFilePCvi = .text:0x802035C0; // type:function size:0xE4 scope:global +CallbackFunctionOpen__5bFileiiPv = .text:0x802036A4; // type:function size:0xCC scope:global +CallbackFunctionRead__5bFileiiPv = .text:0x80203770; // type:function size:0x8C scope:global +HandleCompletedCallbacks__5bFile = .text:0x802037FC; // type:function size:0x10C scope:global +bInitFileSystem__Fv = .text:0x80203908; // type:function size:0x5C scope:global +bServiceFileSystem__Fv = .text:0x80203964; // type:function size:0x34 scope:global +bWaitUntilAsyncDone__FP5bFile = .text:0x80203998; // type:function size:0x44 scope:global +bOpen__FPCcii = .text:0x802039DC; // type:function size:0x74 scope:global +bClose__FP5bFile = .text:0x80203A50; // type:function size:0x44 scope:global +bFileSize__FP5bFile = .text:0x80203A94; // type:function size:0x20 scope:global +bFileSize__FPCc = .text:0x80203AB4; // type:function size:0x54 scope:global +bFileExists__FPCc = .text:0x80203B08; // type:function size:0x58 scope:global +bReadAsync__FP5bFilePviPFPv_vT1 = .text:0x80203B60; // type:function size:0x34 scope:global +bRead__FP5bFilePvi = .text:0x80203B94; // type:function size:0x3C scope:global +bSeek__FP5bFileii = .text:0x80203BD0; // type:function size:0x28 scope:global +bIsAsyncDone__FP5bFile = .text:0x80203BF8; // type:function size:0x4C scope:global +bWrite__FP5bFilePCvi = .text:0x80203C44; // type:function size:0x20 scope:global +bGetFile__FPCcPii = .text:0x80203C64; // type:function size:0xDC scope:global +bFPrintf__FP5bFilePCce = .text:0x80203D40; // type:function size:0x114 scope:global +bAppendToFile__FPCcPvi = .text:0x80203E54; // type:function size:0x58 scope:global +bFileRunTimingTest__Fv = .text:0x80203EAC; // type:function size:0xC scope:global +Compare__FPUcT0i = .text:0x80203EB8; // type:function size:0x40 scope:local +ShortMove__FPUcT0i = .text:0x80203EF8; // type:function size:0x1C scope:local +__11JLZHashPooli = .text:0x80203F14; // type:function size:0x74 scope:global +_._11JLZHashPool = .text:0x80203F88; // type:function size:0x5C scope:global +GetTableHash__FPUc = .text:0x80203FE4; // type:function size:0x30 scope:local +Update__11JLZHashPoolPUci = .text:0x80204014; // type:function size:0xE4 scope:global +FindList__11JLZHashPoolPUc = .text:0x802040F8; // type:function size:0x3C scope:global +JLZCompress__FPUciT0 = .text:0x80204134; // type:function size:0x294 scope:global +JLZDecompress__FPUcT0 = .text:0x802043C8; // type:function size:0x158 scope:global +HUFF_decompress__FPUcT0 = .text:0x80204520; // type:function size:0xD40 scope:local +HUFF_decode__FPvPCv = .text:0x80205260; // type:function size:0x2C scope:global +HUFF_writebits__FP17HuffEncodeContextP13HUFFMemStructUiUi = .text:0x8020528C; // type:function size:0xDC scope:local +HUFF_treechase__FP17HuffEncodeContextUiUi = .text:0x80205368; // type:function size:0x70 scope:local +HUFF_maketree__FP17HuffEncodeContext = .text:0x802053D8; // type:function size:0x1C4 scope:local +HUFF_minrep__FP17HuffEncodeContextUiUi = .text:0x8020559C; // type:function size:0xE8 scope:local +HUFF_writenum__FP17HuffEncodeContextP13HUFFMemStructUi = .text:0x80205684; // type:function size:0x1A4 scope:local +HUFF_writeexp__FP17HuffEncodeContextP13HUFFMemStructUi = .text:0x80205828; // type:function size:0x70 scope:local +HUFF_writecode__FP17HuffEncodeContextP13HUFFMemStructUi = .text:0x80205898; // type:function size:0x48 scope:local +HUFF_init__FP17HuffEncodeContext = .text:0x802058E0; // type:function size:0x124 scope:local +HUFF_analysis__FP17HuffEncodeContextUiUi = .text:0x80205A04; // type:function size:0xAB4 scope:local +HUFF_pack__FP17HuffEncodeContextP13HUFFMemStructUi = .text:0x802064B8; // type:function size:0x438 scope:local +HUFF_packfile__FP17HuffEncodeContextP13HUFFMemStructT1i = .text:0x802068F0; // type:function size:0x1BC scope:local +HUFF_encode__FPvPCvi = .text:0x80206AAC; // type:function size:0x80 scope:global +HUFFDecompress__FPUcT0 = .text:0x80206B2C; // type:function size:0x60 scope:global +HUFFCompress__FPUciT0 = .text:0x80206B8C; // type:function size:0x6C scope:global +RAWDecompress__FPUcT0 = .text:0x80206BF8; // type:function size:0x68 scope:global +RAWCompress__FPUciT0 = .text:0x80206C60; // type:function size:0x74 scope:global +OldLZDecompress__FPUcT0 = .text:0x80206CD4; // type:function size:0x174 scope:global +LZGetMaxCompressedSize__FUi = .text:0x80206E48; // type:function size:0xC scope:global +LZByteSwapHeader__FP8LZHeader = .text:0x80206E54; // type:function size:0x44 scope:global +LZValidHeader__FP8LZHeader = .text:0x80206E98; // type:function size:0x84 scope:global +LZCompress__FPUcUiT0 = .text:0x80206F1C; // type:function size:0x80 scope:global +LZDecompress__FPUcT0 = .text:0x80206F9C; // type:function size:0xA4 scope:global +Update__3MD5PCvi = .text:0x80207040; // type:function size:0xD8 scope:global +GetRaw__3MD5 = .text:0x80207118; // type:function size:0x54 scope:global +_Transform__3MD5 = .text:0x8020716C; // type:function size:0x98C scope:global +_Final__3MD5 = .text:0x80207AF8; // type:function size:0x114 scope:global +Contains__5vAABBfff = .text:0x80207C0C; // type:function size:0x60 scope:global +SwapEndian__9vAABBTree = .text:0x80207C6C; // type:function size:0xD8 scope:global +QueryLeafHelper__9vAABBTreeP5vAABBfff = .text:0x80207D44; // type:function size:0xD8 scope:global +QueryLeaf__9vAABBTreefff = .text:0x80207E1C; // type:function size:0x9C scope:global +MakeCoeffs__8tCubic1D = .text:0x80207EB8; // type:function size:0x48 scope:global +GetVal__8tCubic1Df = .text:0x80207F00; // type:function size:0x20 scope:global +GetdVal__8tCubic1Df = .text:0x80207F20; // type:function size:0x28 scope:global +GetddVal__8tCubic1Df = .text:0x80207F48; // type:function size:0x20 scope:global +GetDerivative__8tCubic1Df = .text:0x80207F68; // type:function size:0x44 scope:global +GetSecondDerivative__8tCubic1Df = .text:0x80207FAC; // type:function size:0x48 scope:global +ClampDerivative__8tCubic1Df = .text:0x80207FF4; // type:function size:0x60 scope:global +ClampSecondDerivative__8tCubic1Df = .text:0x80208054; // type:function size:0xD4 scope:global +Update__8tCubic1Dfff = .text:0x80208128; // type:function size:0x144 scope:global +SetValDesired__8tCubic2DP8bVector2 = .text:0x8020826C; // type:function size:0x3C scope:global +GetVal__8tCubic2DP8bVector2 = .text:0x802082A8; // type:function size:0x14 scope:global +SetVal__8tCubic3DPC8bVector3 = .text:0x802082BC; // type:function size:0x58 scope:global +SetdVal__8tCubic3DP8bVector3 = .text:0x80208314; // type:function size:0x58 scope:global +SetValDesired__8tCubic3DP8bVector3 = .text:0x8020836C; // type:function size:0x58 scope:global +GetVal__8tCubic3DP8bVector3 = .text:0x802083C4; // type:function size:0x1C scope:global +GetValDesired__8tCubic3DP8bVector3 = .text:0x802083E0; // type:function size:0x1C scope:global +Update__8tCubic3Dfff = .text:0x802083FC; // type:function size:0x78 scope:global +SplineSeek__6cPointP8tCubic1Dfff = .text:0x80208474; // type:function size:0x120 scope:global +SplineSeek__6cPointP8tCubic2Df = .text:0x80208594; // type:function size:0x58 scope:global +__builtin_new = .text:0x802085EC; // type:function size:0x24 scope:global +__builtin_vec_new = .text:0x80208610; // type:function size:0x24 scope:global +__builtin_delete = .text:0x80208634; // type:function size:0x20 scope:global +__builtin_vec_delete = .text:0x80208654; // type:function size:0x20 scope:global +Clear__10StompEntryPv = .text:0x80208674; // type:function size:0x104 scope:global +ClearAll__10StompEntryPv = .text:0x80208778; // type:function size:0x50 scope:global +InitStomper__Fv = .text:0x802087C8; // type:function size:0x38 scope:global +__7Stomper = .text:0x80208800; // type:function size:0x48 scope:global +Clear__7Stomper = .text:0x80208848; // type:function size:0x58 scope:global +ResetRenderEggs__Fv = .text:0x802088A0; // type:function size:0x30 scope:global +ActivateAnyRenderEggs__Fv = .text:0x802088D0; // type:function size:0x4 scope:global +__10EasterEggs = .text:0x802088D4; // type:function size:0x40 scope:global +_._10EasterEggs = .text:0x80208914; // type:function size:0x34 scope:global +Activate__10EasterEggs = .text:0x80208948; // type:function size:0x94 scope:global +UnActivate__10EasterEggs = .text:0x802089DC; // type:function size:0x68 scope:global +ClearNonPersistent__10EasterEggs = .text:0x80208A44; // type:function size:0x40 scope:global +ActivateEasterEgg__10EasterEggsi = .text:0x80208A84; // type:function size:0x19C scope:global +HandleJoy__10EasterEggs = .text:0x80208C20; // type:function size:0x1D0 scope:global +ClearButtons__10EasterEggs = .text:0x80208DF0; // type:function size:0xC scope:global +IsEasterEggUnlocked__10EasterEggsUiUi = .text:0x80208DFC; // type:function size:0x54 scope:global +IsEasterEggUnlocked__10EasterEggs17EasterEggsSpecial = .text:0x80208E50; // type:function size:0x24 scope:global +ClearGroup__10EasterEggsUi = .text:0x80208E74; // type:function size:0x4C scope:global +TriggerSpecial__10EasterEggsUi = .text:0x80208EC0; // type:function size:0x4 scope:global +GetValue__5Tablef = .text:0x80208EC4; // type:function size:0xE0 scope:global +Blend__t6tTable1Z8bVector2P8bVector2N21f = .text:0x80208FA4; // type:function size:0x4C scope:global +Blend__t6tTable1Z8bVector4P8bVector4N21f = .text:0x80208FF0; // type:function size:0x6C scope:global +Blend__t6tTable1ZfPfN21f = .text:0x8020905C; // type:function size:0x24 scope:global +Blend__t6tGraph1ZfPfN21f = .text:0x80209080; // type:function size:0x24 scope:global +__5GraphP8bVector2i = .text:0x802090A4; // type:function size:0x10 scope:global +GetValue__5Graphf = .text:0x802090B4; // type:function size:0xDC scope:global +Allocate__11AverageBaseUiPCc = .text:0x80209190; // type:function size:0x30 scope:global +DeAllocate__11AverageBasePvUiPCc = .text:0x802091C0; // type:function size:0x3C scope:global +__11AverageBaseii = .text:0x802091FC; // type:function size:0x28 scope:global +__7Average = .text:0x80209224; // type:function size:0x5C scope:global +__7Averagei = .text:0x80209280; // type:function size:0x6C scope:global +Init__7Averagei = .text:0x802092EC; // type:function size:0x9C scope:global +_._7Average = .text:0x80209388; // type:function size:0x90 scope:global +Recalculate__7Average = .text:0x80209418; // type:function size:0x9C scope:global +Record__7Averagef = .text:0x802094B4; // type:function size:0xA4 scope:global +Reset__7Averagef = .text:0x80209558; // type:function size:0x70 scope:global +Flush__7Averagef = .text:0x802095C8; // type:function size:0x70 scope:global +GetLastRecordedValue__C7Average = .text:0x80209638; // type:function size:0x3C scope:global +__13AverageWindowff = .text:0x80209674; // type:function size:0xA0 scope:global +_._13AverageWindow = .text:0x80209714; // type:function size:0x80 scope:global +Reset__13AverageWindowf = .text:0x80209794; // type:function size:0x98 scope:global +Record__13AverageWindowff = .text:0x8020982C; // type:function size:0x1A0 scope:global +Record__8PidErrorffbT3 = .text:0x802099CC; // type:function size:0xA8 scope:global +GetVideoMode__Fv = .text:0x80209A74; // type:function size:0xC scope:global +SetVideoMode__F10VIDEO_MODE = .text:0x80209A80; // type:function size:0x14 scope:global +GetBuildRegionVideoMode__Fv = .text:0x80209A94; // type:function size:0x2C scope:global +GetRealTimeElapsedFromQuantized__Fi = .text:0x80209AC0; // type:function size:0x3C scope:global +GetQuantizedRealTimeElapsed__Ff = .text:0x80209AFC; // type:function size:0x2C scope:global +PrepareRealTimestep__Ff = .text:0x80209B28; // type:function size:0x36C scope:global +AdvanceRealTime__Fv = .text:0x80209E94; // type:function size:0xDC scope:global +ResetWorldTime__Fv = .text:0x80209F70; // type:function size:0xCC scope:global +PrepareWorldTimestep__Ff = .text:0x8020A03C; // type:function size:0x24 scope:global +AdvanceWorldTime__Fv = .text:0x8020A060; // type:function size:0x154 scope:global +GetDebugRealTime__Fv = .text:0x8020A1B4; // type:function size:0xEC scope:global +IntToString2__FPciib = .text:0x8020A2A0; // type:function size:0x88 scope:local +PrintToString__FPciiiii = .text:0x8020A328; // type:function size:0x51C scope:local +GetHoursMinsSeconds__5TimerPiN31 = .text:0x8020A844; // type:function size:0x9C scope:global +PrintToString__5TimerPci = .text:0x8020A8E0; // type:function size:0x114 scope:global +RegisterHandler__Q26Hermes11PortMessageRQ26Hermes7Handler = .text:0x8020A9F4; // type:function size:0x230 scope:global +UnregisterHandler__Q26Hermes11PortMessagePQ26Hermes13_h_HHANDLER__ = .text:0x8020AC24; // type:function size:0xD8 scope:global +SetIDFilter__Q26Hermes11PortMessagePQ26Hermes13_h_HHANDLER__b = .text:0x8020ACFC; // type:function size:0x30 scope:global +HandleMessage__Q26Hermes11PortMessagePQ26Hermes7Message = .text:0x8020AD2C; // type:function size:0x88 scope:global +Init__Q26Hermes6System = .text:0x8020ADB4; // type:function size:0x2F8 scope:global +CreateKey__Q26Hermes6SystemG6UCrc32T1 = .text:0x8020B0AC; // type:function size:0x19C scope:global +AddPortMessage__Q26Hermes6SystemUxPQ26Hermes11PortMessage = .text:0x8020B248; // type:function size:0x41C scope:global +RemovePortMessage__Q26Hermes6SystemUx = .text:0x8020B664; // type:function size:0x700 scope:global +FindPortMessage__Q26Hermes6SystemUx = .text:0x8020BD64; // type:function size:0x1C8 scope:global +GetPortKeyMap__Q26Hermes6System = .text:0x8020BF2C; // type:function size:0x8 scope:global +Post__Q26Hermes7MessageG6UCrc32 = .text:0x8020BF34; // type:function size:0x50 scope:global +Deliver__Q26Hermes7Message = .text:0x8020BF84; // type:function size:0x6C scope:global +_AddToPort__Q26Hermes7HandlerG6UCrc32 = .text:0x8020BFF0; // type:function size:0x1EC scope:global +Destroy__Q26Hermes7HandlerPQ26Hermes13_h_HHANDLER__ = .text:0x8020C1DC; // type:function size:0x1DC scope:global +SetIDFilter__Q26Hermes7HandlerPQ26Hermes13_h_HHANDLER__b = .text:0x8020C3B8; // type:function size:0xD0 scope:global +_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZ10FileRecordZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZ10FileRecordZQ24_STLt4less1ZUiZQ24_STLt9allocator1ZQ24_STLt4pair2ZCUiZ10FileRecordPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZ10FileRecordT1 = .text:0x8020C488; // type:function size:0x174 scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZ10FileRecordZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZ10FileRecordZQ24_STLt4less1ZUiZQ24_STLt9allocator1ZQ24_STLt4pair2ZCUiZ10FileRecordRCQ24_STLt4pair2ZCUiZ10FileRecord = .text:0x8020C5FC; // type:function size:0x118 scope:global +_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZPQ26Attrib5VaultZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZPQ26Attrib5VaultZQ24_STLt4less1ZUiZQ24_STLt9allocator1ZQ24_STLt4pair2ZCUiZPQ26Attrib5VaultPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZPQ26Attrib5VaultT1 = .text:0x8020C714; // type:function size:0x144 scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZPQ26Attrib5VaultZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZPQ26Attrib5VaultZQ24_STLt4less1ZUiZQ24_STLt9allocator1ZQ24_STLt4pair2ZCUiZPQ26Attrib5VaultRCQ24_STLt4pair2ZCUiZPQ26Attrib5Vault = .text:0x8020C858; // type:function size:0x118 scope:global +_M_insert__Q24_STLt8_Rb_tree5ZPQ26Hermes13_h_HHANDLER__ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt4less1ZPQ26Hermes13_h_HHANDLER__ZQ33UTL3Stdt9Allocator2ZQ26Hermes7PortKeyZ9_type_mapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyT1 = .text:0x8020C970; // type:function size:0x17C scope:global +insert_unique__Q24_STLt8_Rb_tree5ZPQ26Hermes13_h_HHANDLER__ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt4less1ZPQ26Hermes13_h_HHANDLER__ZQ33UTL3Stdt9Allocator2ZQ26Hermes7PortKeyZ9_type_mapRCQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKey = .text:0x8020CAEC; // type:function size:0x118 scope:global +insert_unique__Q24_STLt8_Rb_tree5ZPQ26Hermes13_h_HHANDLER__ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt4less1ZPQ26Hermes13_h_HHANDLER__ZQ33UTL3Stdt9Allocator2ZQ26Hermes7PortKeyZ9_type_mapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyRCQ24_STLt4pair2ZCPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKey = .text:0x8020CC04; // type:function size:0x26C scope:global +__8VaultMap = .text:0x8020CE70; // type:function size:0x78 scope:global +__7FileMap = .text:0x8020CEE8; // type:function size:0x78 scope:global +__static_initialization_and_destruction_0 = .text:0x8020CF60; // type:function size:0x5A4 scope:local +__Q33UTL3Stdt3map3ZPQ26Hermes13_h_HHANDLER__ZQ26Hermes7PortKeyZ9_type_map = .text:0x8020D504; // type:function size:0x74 scope:global +RebuildTable__t10VecHashMap5ZUxZQ26Hermes11PortMessageZt17TablePolicy_Fixed2PFUi_Pv26DefaultTableAllocFunc__FUiPFPvUi_v27DefaultTableFreeFunc__FPvUib0Ui16Ui = .text:0x8020D578; // type:function size:0x2C8 scope:global +LoadHandler__12RegionLoaderi = .text:0x8020D840; // type:function size:0x20 scope:global +Allocate__15HighAttribAllocUiPCc = .text:0x8020D860; // type:function size:0x40 scope:global +Free__15HighAttribAllocPvUiPCc = .text:0x8020D8A0; // type:function size:0x3C scope:global +Reset__7tShaker = .text:0x8020D8DC; // type:function size:0x3C scope:global +SortByPriority__10QueuedFileP10QueuedFileT1 = .text:0x8020D918; // type:function size:0x1C scope:global +ReadDoneCallback__10QueuedFilePv = .text:0x8020D934; // type:function size:0x20 scope:global +__dl__16QueuedFileBundlePv = .text:0x8020D954; // type:function size:0x2C scope:global +ReadCallbackBridge__16QueuedFileBundlePvi = .text:0x8020D980; // type:function size:0x4C scope:global +GetName__Q28RealFile12DeviceDriver = .text:0x8020D9CC; // type:function size:0x4 scope:global +GetOptimalReadSize__Q28RealFile12DeviceDriver = .text:0x8020D9D0; // type:function size:0x8 scope:global +__dl__20CachedRealFileHandlePv = .text:0x8020D9D8; // type:function size:0x2C scope:global +__dl__18OpenDisculatorFilePv = .text:0x8020DA04; // type:function size:0x2C scope:global +_._16DisculatorDriver = .text:0x8020DA30; // type:function size:0x34 scope:global +Remove__16DisculatorDriverPCc = .text:0x8020DA64; // type:function size:0x8 scope:global +Getspace__16DisculatorDriver = .text:0x8020DA6C; // type:function size:0xC scope:global +ReleaseData__20FileGarbageCollectorUiPvUi = .text:0x8020DA78; // type:function size:0x7C scope:global +ReleaseData__21VaultGarbageCollectorUiPvUi = .text:0x8020DAF4; // type:function size:0x44 scope:global +Allocate__22DefaultAttribAllocatorUiPCc = .text:0x8020DB38; // type:function size:0x28 scope:global +Free__22DefaultAttribAllocatorPvUiPCc = .text:0x8020DB60; // type:function size:0x28 scope:global +_._Q28RealFile12DeviceDriver = .text:0x8020DB88; // type:function size:0x34 scope:global +Init__Q28RealFile12DeviceDriver = .text:0x8020DBBC; // type:function size:0x8 scope:global +Restore__Q28RealFile12DeviceDriver = .text:0x8020DBC4; // type:function size:0x4 scope:global +Write__Q28RealFile12DeviceDriveriPCvUiPQ28RealFile12DeviceDriveri = .text:0x8020DBC8; // type:function size:0x8 scope:global +QueryLocation__Q28RealFile12DeviceDriveri = .text:0x8020DBD0; // type:function size:0xC scope:global +Remove__Q28RealFile12DeviceDriverPCc = .text:0x8020DBDC; // type:function size:0x8 scope:global +Getspace__Q28RealFile12DeviceDriver = .text:0x8020DBE4; // type:function size:0xC scope:global +_GLOBAL_.I.BasisMatrixInitDone = .text:0x8020DBF0; // type:function size:0x2C scope:local +InitConfig__Fv = .text:0x8020DC1C; // type:function size:0x1C scope:global +JoylogConfigItems__Fv = .text:0x8020DC38; // type:function size:0x220 scope:global +LoadConfigItems__Fv = .text:0x8020DE58; // type:function size:0x20 scope:global +SaveConfigItems__Fv = .text:0x8020DE78; // type:function size:0x20 scope:global +FirstBreakpoint__Fv = .text:0x8020DE98; // type:function size:0x4 scope:global +MainLoopBreakpoint__Fv = .text:0x8020DE9C; // type:function size:0x4 scope:global +__static_initialization_and_destruction_0 = .text:0x8020DEA0; // type:function size:0x50 scope:local +_GLOBAL_.I.SHAPE_clut = .text:0x8020DEF0; // type:function size:0x2C scope:local +__static_initialization_and_destruction_0 = .text:0x8020DF1C; // type:function size:0x50 scope:local +_GLOBAL_.I.DrawMissionComponents__Fv = .text:0x8020DF6C; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x8020DF98; // type:label scope:local +__16SmackableTriggerP8HMODEL__bRCQ25UMath7Matrix4RCQ25UMath7Vector3Ui = .text:0x8020DF98; // type:function size:0x160 scope:global +Fire__16SmackableTrigger = .text:0x8020E0F8; // type:function size:0x28 scope:global +Disable__16SmackableTrigger = .text:0x8020E120; // type:function size:0x38 scope:global +Enable__16SmackableTrigger = .text:0x8020E158; // type:function size:0x38 scope:global +IsEnabled__C16SmackableTrigger = .text:0x8020E190; // type:function size:0x1C scope:global +GetObjectMatrix__C16SmackableTriggerRQ25UMath7Matrix4 = .text:0x8020E1AC; // type:function size:0x17C scope:global +Move__16SmackableTriggerRCQ25UMath7Matrix4RCQ25UMath7Vector3b = .text:0x8020E328; // type:function size:0x74 scope:global +_._16SmackableTrigger = .text:0x8020E39C; // type:function size:0xAC scope:global +Construct__9ExplosionGQ23Sim5Param = .text:0x8020E448; // type:function size:0x134 scope:global +__9ExplosionRC15ExplosionParamsGQ23Sim5Param = .text:0x8020E57C; // type:function size:0x39C scope:global +_._9Explosion = .text:0x8020E918; // type:function size:0x1C4 scope:global +OnBehaviorChange__9ExplosionRC6UCrc32 = .text:0x8020EADC; // type:function size:0xA4 scope:global +OnCollide__9ExplosionP10IRigidBodyffRCQ38Dynamics9Collision8Geometry = .text:0x8020EB80; // type:function size:0x174 scope:global +GetRadius__C9Explosion = .text:0x8020ECF4; // type:function size:0x64 scope:global +TestCollisions__9Explosionf = .text:0x8020ED58; // type:function size:0x1F4 scope:global +OnTaskSimulate__9Explosionf = .text:0x8020EF4C; // type:function size:0xC4 scope:global +UpdateListing__8PVehicle = .text:0x8020F010; // type:function size:0x1208 scope:global +Launch__8PVehicle = .text:0x80210218; // type:function size:0x90 scope:global +GetPerfectLaunch__C8PVehicle = .text:0x802102A8; // type:function size:0x74 scope:global +SetStaging__8PVehicleb = .text:0x8021031C; // type:function size:0x58 scope:global +SetDriverStyle__8PVehicle11DriverStyle = .text:0x80210374; // type:function size:0x70 scope:global +SetDriverClass__8PVehicle11DriverClass = .text:0x802103E4; // type:function size:0x44 scope:global +OnTask__8PVehicleP10HSIMTASK__f = .text:0x80210428; // type:function size:0x38 scope:global +__Q28PVehicle8ResourceRCQ36Attrib3Gen8pvehiclebT2 = .text:0x80210460; // type:function size:0xE4 scope:global +CleanResources__8PVehicle = .text:0x80210544; // type:function size:0xBC scope:global +CanInstancesShareResourceCost__F7CarType = .text:0x80210600; // type:function size:0x34 scope:global +CountResources__8PVehicle = .text:0x80210634; // type:function size:0x1B4 scope:global +MakeRoom__8PVehicleP13IVehicleCacheRCQ33UTL3Stdt4list2ZQ28PVehicle8ResourceZ10_type_list = .text:0x802107E8; // type:function size:0xEF4 scope:global +Construct__8PVehicleGQ23Sim5Param = .text:0x802116DC; // type:function size:0x634 scope:global +__8PVehicle11DriverClassRCQ36Attrib3Gen8pvehicleRCQ25UMath7Vector3T3PCQ217CollisionGeometry6BoundsPC21FECustomizationRecordRCQ28PVehicle8ResourcePCQ37Physics4Info11PerformancePCc = .text:0x80211D10; // type:function size:0x6E4 scope:global +Kill__8PVehicle = .text:0x802123F4; // type:function size:0x6C scope:global +OnBehaviorChange__8PVehicleRC6UCrc32 = .text:0x80212460; // type:function size:0x358 scope:global +LookupBehaviorSignature__C8PVehicleRCQ26Attrib9StringKey = .text:0x802127B8; // type:function size:0x628 scope:global +LoadBehaviors__8PVehicleRCQ25UMath7Vector3RCQ25UMath7Matrix4 = .text:0x80212DE0; // type:function size:0x578 scope:global +_._8PVehicle = .text:0x80213358; // type:function size:0x350 scope:global +SetBehaviorOverride__8PVehicleG6UCrc32T1 = .text:0x802136A8; // type:function size:0x118 scope:global +RemoveBehaviorOverride__8PVehicleG6UCrc32 = .text:0x802137C0; // type:function size:0xF8 scope:global +Reset__8PVehicle = .text:0x802138B8; // type:function size:0x48 scope:global +SetVehicleOnGround__8PVehicleRCQ25UMath7Vector3T1 = .text:0x80213900; // type:function size:0x774 scope:global +OnAttributeChange__8PVehiclePCQ26Attrib10CollectionUi = .text:0x80214074; // type:function size:0x4 scope:global +OnEnableModeling__8PVehicle = .text:0x80214078; // type:function size:0x4 scope:global +OnDisableModeling__8PVehicle = .text:0x8021407C; // type:function size:0x5C scope:global +SetSpeed__8PVehiclef = .text:0x802140D8; // type:function size:0x170 scope:global +CommitBehaviorOverrides__8PVehicle = .text:0x80214248; // type:function size:0x38 scope:global +IsLoading__C8PVehicle = .text:0x80214280; // type:function size:0xD4 scope:global +DoDebug__8PVehiclef = .text:0x80214354; // type:function size:0x4 scope:global +UpdateLocalVelocities__8PVehicle = .text:0x80214358; // type:function size:0x198 scope:global +CheckOffWorld__8PVehicle = .text:0x802144F0; // type:function size:0x174 scope:global +DoStaging__8PVehiclef = .text:0x80214664; // type:function size:0x114 scope:global +OnTaskSimulate__8PVehiclef = .text:0x80214778; // type:function size:0x484 scope:global +OnExplosion__8PVehicleRCQ25UMath7Vector3T1fP10IExplosion = .text:0x80214BFC; // type:function size:0x2E0 scope:global +OnTaskFX__8PVehiclef = .text:0x80214EDC; // type:function size:0x1D4 scope:global +SetDynamicData__8PVehiclePCQ214EventSequencer6SystemP16EventDynamicData = .text:0x802150B0; // type:function size:0x2A4 scope:global +GlareOn__8PVehicleQ29VehicleFX2ID = .text:0x80215354; // type:function size:0x10 scope:global +GlareOff__8PVehicleQ29VehicleFX2ID = .text:0x80215364; // type:function size:0x10 scope:global +DebugObject__8PVehicle = .text:0x80215374; // type:function size:0x20 scope:global +ReloadBehaviors__8PVehicle = .text:0x80215394; // type:function size:0xC0 scope:global +SetAnimating__8PVehicleb = .text:0x80215454; // type:function size:0xC4 scope:global +Activate__8PVehicle = .text:0x80215518; // type:function size:0x48 scope:global +Deactivate__8PVehicle = .text:0x80215560; // type:function size:0x3C scope:global +SetPhysicsMode__8PVehicle11PhysicsMode = .text:0x8021559C; // type:function size:0x94 scope:global +OnBeginMode__8PVehicle11PhysicsMode = .text:0x80215630; // type:function size:0x2C8 scope:global +OnEndMode__8PVehicle11PhysicsMode = .text:0x802158F8; // type:function size:0x290 scope:global +GetTunings__C8PVehicle = .text:0x80215B88; // type:function size:0xE0 scope:global +SetTunings__8PVehicleRCQ27Physics7Tunings = .text:0x80215C68; // type:function size:0x40 scope:global +OnDebugDraw__8PVehicle = .text:0x80215CA8; // type:function size:0x4 scope:global +ComputeHeading__8PVehiclePQ25UMath7Vector3 = .text:0x80215CAC; // type:function size:0x160 scope:global +ForceStopOn__8PVehiclec = .text:0x80215E0C; // type:function size:0x4C scope:global +ForceStopOff__8PVehiclec = .text:0x80215E58; // type:function size:0x50 scope:global +Add__Q213PhysicsObject9BehaviorsP8Behavior = .text:0x80215EA8; // type:function size:0x110 scope:global +Remove__Q213PhysicsObject9BehaviorsP8Behavior = .text:0x80215FB8; // type:function size:0x11C scope:global +__13PhysicsObjectRCQ26Attrib8Instance11SimableTypeUiUi = .text:0x802160D4; // type:function size:0x584 scope:global +__13PhysicsObjectPCcT111SimableTypeP10HSIMABLE__Ui = .text:0x80216658; // type:function size:0x59C scope:global +_._13PhysicsObject = .text:0x80216BF4; // type:function size:0x598 scope:global +GetTransform__C13PhysicsObjectRQ25UMath7Matrix4 = .text:0x8021718C; // type:function size:0x148 scope:global +GetLinearVelocity__C13PhysicsObjectRQ25UMath7Vector3 = .text:0x802172D4; // type:function size:0x88 scope:global +GetAngularVelocity__C13PhysicsObjectRQ25UMath7Vector3 = .text:0x8021735C; // type:function size:0x88 scope:global +GetDimension__C13PhysicsObjectRQ25UMath7Vector3 = .text:0x802173E4; // type:function size:0x64 scope:global +GetCausalityTime__C13PhysicsObject = .text:0x80217448; // type:function size:0x64 scope:global +SetCausality__13PhysicsObjectP8HCAUSE__f = .text:0x802174AC; // type:function size:0x78 scope:global +GetCausality__C13PhysicsObject = .text:0x80217524; // type:function size:0x60 scope:global +OnAttached__13PhysicsObjectP11IAttachable = .text:0x80217584; // type:function size:0x84 scope:global +OnDetached__13PhysicsObjectP11IAttachable = .text:0x80217608; // type:function size:0x84 scope:global +OnService__13PhysicsObjectP13HSIMSERVICE__PQ23Sim6Packet = .text:0x8021768C; // type:function size:0x144 scope:global +OnTask__13PhysicsObjectP10HSIMTASK__f = .text:0x802177D0; // type:function size:0xD8 scope:global +Kill__13PhysicsObject = .text:0x802178A8; // type:function size:0x1D4 scope:global +SetOwnerObject__13PhysicsObjectP8ISimable = .text:0x80217A7C; // type:function size:0x1C scope:global +IsOwnedByPlayer__C13PhysicsObject = .text:0x80217A98; // type:function size:0x138 scope:global +IsOwnedBy__C13PhysicsObjectP8ISimable = .text:0x80217BD0; // type:function size:0xE8 scope:global +DebugObject__13PhysicsObject = .text:0x80217CB8; // type:function size:0x50 scope:global +OnBehaviorChange__13PhysicsObjectRC6UCrc32 = .text:0x80217D08; // type:function size:0x1CC scope:global +IsBehaviorActive__C13PhysicsObjectRC6UCrc32 = .text:0x80217ED4; // type:function size:0x98 scope:global +PauseBehavior__13PhysicsObjectRC6UCrc32b = .text:0x80217F6C; // type:function size:0x15C scope:global +ResetBehavior__13PhysicsObjectRC6UCrc32 = .text:0x802180C8; // type:function size:0x16C scope:global +ReleaseBehaviors__13PhysicsObject = .text:0x80218234; // type:function size:0x198 scope:global +ReleaseBehavior__13PhysicsObjectRC6UCrc32 = .text:0x802183CC; // type:function size:0x30C scope:global +FindBehavior__13PhysicsObjectRC6UCrc32 = .text:0x802186D8; // type:function size:0x160 scope:global +LoadBehavior__13PhysicsObjectRC6UCrc32T1GQ23Sim5Param = .text:0x80218838; // type:function size:0x1F0 scope:global +Attach__13PhysicsObjectPQ33UTL3COM8IUnknown = .text:0x80218A28; // type:function size:0x108 scope:global +DetachAll__13PhysicsObject = .text:0x80218B30; // type:function size:0x74 scope:global +Detach__13PhysicsObjectPQ33UTL3COM8IUnknown = .text:0x80218BA4; // type:function size:0x8C scope:global +DetachEntity__13PhysicsObject = .text:0x80218C30; // type:function size:0x5C scope:global +AttachEntity__13PhysicsObjectPQ23Sim7IEntity = .text:0x80218C8C; // type:function size:0x60 scope:global +ProcessStimulus__13PhysicsObjectUi = .text:0x80218CEC; // type:function size:0x98 scope:global +GetDropTimer__FRCQ36Attrib3Gen9smackable = .text:0x80218D84; // type:function size:0xB0 scope:local +Simplify__9Smackable = .text:0x80218E34; // type:function size:0x298 scope:global +TrySimplify__9Smackable = .text:0x802190CC; // type:function size:0x70 scope:global +Construct__9SmackableGQ23Sim5Param = .text:0x8021913C; // type:function size:0x3E8 scope:global +__9SmackableRCQ25UMath7Matrix4RCQ36Attrib3Gen9smackablePCQ217CollisionGeometry6BoundsbP6IModelT4T4 = .text:0x80219524; // type:function size:0xC30 scope:global +SetDynamicData__9SmackablePCQ214EventSequencer6SystemP16EventDynamicData = .text:0x8021A154; // type:function size:0x2C scope:global +OnExplosion__9SmackableRCQ25UMath7Vector3T1fP10IExplosion = .text:0x8021A180; // type:function size:0x2D8 scope:global +OnBehaviorChange__9SmackableRC6UCrc32 = .text:0x8021A458; // type:function size:0x224 scope:global +_._9Smackable = .text:0x8021A67C; // type:function size:0x3EC scope:global +DoImpactStimulus__9SmackableUif = .text:0x8021AA68; // type:function size:0x154 scope:global +OnImpact__9SmackableffQ43Sim9Collision4Info13CollisionTypeP8ISimable = .text:0x8021ABBC; // type:function size:0x17C scope:global +OnCollision__9SmackableRCQ33Sim9Collision4Info = .text:0x8021AD38; // type:function size:0x22C scope:global +InView__C9Smackable = .text:0x8021AF64; // type:function size:0x48 scope:global +IsRenderable__C9Smackable = .text:0x8021AFAC; // type:function size:0x18 scope:global +DistanceToView__C9Smackable = .text:0x8021AFC4; // type:function size:0x4C scope:global +Kill__9Smackable = .text:0x8021B010; // type:function size:0xE8 scope:global +Dropout__9Smackable = .text:0x8021B0F8; // type:function size:0xB8 scope:global +ValidateWorld__9Smackable = .text:0x8021B1B0; // type:function size:0xE4 scope:global +ShouldDie__9Smackable = .text:0x8021B294; // type:function size:0xC0 scope:global +CanRetrigger__C9Smackable = .text:0x8021B354; // type:function size:0x88 scope:global +ProcessDeath__9Smackablef = .text:0x8021B3DC; // type:function size:0x1F4 scope:global +ProcessDropout__9Smackablef = .text:0x8021B5D0; // type:function size:0x10C scope:global +ProcessOffWorld__9Smackablef = .text:0x8021B6DC; // type:function size:0xF0 scope:global +OnTask__9SmackableP10HSIMTASK__f = .text:0x8021B7CC; // type:function size:0x38 scope:global +OnDetached__9SmackableP11IAttachable = .text:0x8021B804; // type:function size:0xAC scope:global +CalcSimplificationWeight__9Smackable = .text:0x8021B8B0; // type:function size:0x13C scope:global +Manage__9Smackablef = .text:0x8021B9EC; // type:function size:0x4C scope:global +OnTaskSimulate__9Smackablef = .text:0x8021BA38; // type:function size:0x128 scope:global +__Q29Smackable7Managerf = .text:0x8021BB60; // type:function size:0xAC scope:global +_._Q29Smackable7Manager = .text:0x8021BC0C; // type:function size:0xA4 scope:global +OnTask__Q29Smackable7ManagerP10HSIMTASK__f = .text:0x8021BCB0; // type:function size:0x6C scope:global +Construct__11RBSmackableRC14BehaviorParams = .text:0x8021BD1C; // type:function size:0x104 scope:global +__11RBSmackableRC14BehaviorParamsRC15RBComplexParams = .text:0x8021BE20; // type:function size:0x21C scope:global +ShouldSleep__C11RBSmackable = .text:0x8021C03C; // type:function size:0x44 scope:global +_._11RBSmackable = .text:0x8021C080; // type:function size:0xDC scope:global +OnTaskSimulate__11RBSmackablef = .text:0x8021C15C; // type:function size:0x38 scope:global +CanCollideWith__C11RBSmackableRC9RigidBody = .text:0x8021C194; // type:function size:0x50 scope:global +CanCollideWithGround__C11RBSmackable = .text:0x8021C1E4; // type:function size:0x58 scope:global +CanCollideWithWorld__C11RBSmackable = .text:0x8021C23C; // type:function size:0xE0 scope:global +__5WheelUi = .text:0x8021C31C; // type:function size:0x194 scope:global +UpdateTime__5Wheelf = .text:0x8021C4B0; // type:function size:0x40 scope:global +UpdateSurface__5WheelRC10SimSurface = .text:0x8021C4F0; // type:function size:0x6C scope:global +Reset__5Wheel = .text:0x8021C55C; // type:function size:0x1A4 scope:global +UpdatePosition__5WheelRCQ25UMath7Vector3T1RCQ25UMath7Matrix4T1ffbPC9WColliderf = .text:0x8021C700; // type:function size:0x1D0 scope:global +InitPosition__5WheelRC10IRigidBodyf = .text:0x8021C8D0; // type:function size:0x180 scope:global +__15VehicleBehaviorRC14BehaviorParamsUi = .text:0x8021CA50; // type:function size:0x68 scope:global +InitializeVehicleGlobals__13VehicleSystemv = .text:0x8021CAB8; // type:function size:0x4 scope:local +InitializeGlobals__13VehicleSystemv = .text:0x8021CABC; // type:function size:0x4 scope:local +Init__13VehicleSystemv = .text:0x8021CAC0; // type:function size:0x24 scope:local +Shutdown__13VehicleSystemv = .text:0x8021CAE4; // type:function size:0x4 scope:local +__8BehaviorRC14BehaviorParamsUi = .text:0x8021CAE8; // type:function size:0x140 scope:global +Pause__8Behaviorb = .text:0x8021CC28; // type:function size:0x6C scope:global +__Q217CollisionGeometry10BoundsPackP6bChunk = .text:0x8021CC94; // type:function size:0x3BC scope:global +Find__Q217CollisionGeometry11CollectionsPC6bChunk = .text:0x8021D050; // type:function size:0x2C scope:global +Find__Q217CollisionGeometry11CollectionsG6UCrc32 = .text:0x8021D07C; // type:function size:0x64 scope:global +CreateJoint__17CollisionGeometryPQ217CollisionGeometry10IBoundableG6UCrc32T1T2PQ25UMath7Vector3T5Ui = .text:0x8021D0E0; // type:function size:0xE7C scope:global +GetRoot__CQ217CollisionGeometry10Collection = .text:0x8021DF5C; // type:function size:0x1C scope:global +GetChild__CQ217CollisionGeometry10CollectionPCQ217CollisionGeometry6BoundsG6UCrc32 = .text:0x8021DF78; // type:function size:0x54 scope:global +GetChild__CQ217CollisionGeometry10CollectionPCQ217CollisionGeometry6BoundsUi = .text:0x8021DFCC; // type:function size:0x38 scope:global +GetPointCloud__CQ217CollisionGeometry10CollectionPCQ217CollisionGeometry6Bounds = .text:0x8021E004; // type:function size:0x6C scope:global +GetBounds__CQ217CollisionGeometry10CollectionG6UCrc32 = .text:0x8021E070; // type:function size:0x70 scope:global +Init__Q217CollisionGeometry10Collection = .text:0x8021E0E0; // type:function size:0x280 scope:global +AddTo__CQ217CollisionGeometry10CollectionPQ217CollisionGeometry10IBoundablePCQ217CollisionGeometry6BoundsRC10SimSurfaceb = .text:0x8021E360; // type:function size:0xD0 scope:global +AddNode__CQ217CollisionGeometry10CollectionPQ217CollisionGeometry10IBoundablePCQ217CollisionGeometry6BoundsRC10SimSurfaceb = .text:0x8021E430; // type:function size:0x630 scope:global +Lookup__17CollisionGeometryG6UCrc32 = .text:0x8021EA60; // type:function size:0x34 scope:global +LoaderBounds__FP6bChunk = .text:0x8021EA94; // type:function size:0x84 scope:global +UnloaderBounds__FP6bChunk = .text:0x8021EB18; // type:function size:0xE4 scope:global +FindOrAdd__17SmokeableSectionQi = .text:0x8021EBFC; // type:function size:0x268 scope:global +Find__17SmokeableSectionQi = .text:0x8021EE64; // type:function size:0x50 scope:global +ResetPropTimers__Fv = .text:0x8021EEB4; // type:function size:0x20 scope:global +__14HeirarchyModelG7bHash32PCQ217CollisionGeometry6BoundsG6UCrc32P14HeirarchyModelPCQ26Attrib10CollectionPC14ModelHeirarchyUib = .text:0x8021EED4; // type:function size:0x2F4 scope:global +SetCameraAvoidable__14HeirarchyModelb = .text:0x8021F1C8; // type:function size:0x98 scope:global +OnRemoveOffScreen__14HeirarchyModelf = .text:0x8021F260; // type:function size:0xCC scope:global +OnProcessFrame__14HeirarchyModelf = .text:0x8021F32C; // type:function size:0x64 scope:global +HidePart__14HeirarchyModelRC6UCrc32 = .text:0x8021F390; // type:function size:0x48 scope:global +ShowPart__14HeirarchyModelRC6UCrc32 = .text:0x8021F3D8; // type:function size:0x48 scope:global +IsPartVisible__C14HeirarchyModelRC6UCrc32 = .text:0x8021F420; // type:function size:0x58 scope:global +FindHeirarchyChild__C14HeirarchyModelRC6UCrc32 = .text:0x8021F478; // type:function size:0x78 scope:global +SpawnModel__14HeirarchyModelG6UCrc32N21 = .text:0x8021F4F0; // type:function size:0x150 scope:global +_._14HeirarchyModel = .text:0x8021F640; // type:function size:0x140 scope:global +OnBeginDraw__14HeirarchyModel = .text:0x8021F780; // type:function size:0x6C scope:global +OnEndDraw__14HeirarchyModel = .text:0x8021F7EC; // type:function size:0x54 scope:global +GetTransform__C14HeirarchyModelRQ25UMath7Matrix4 = .text:0x8021F840; // type:function size:0x110 scope:global +GetAngularVelocity__C14HeirarchyModelRQ25UMath7Vector3 = .text:0x8021F950; // type:function size:0xD4 scope:global +RemoveTrigger__14HeirarchyModel = .text:0x8021FA24; // type:function size:0x44 scope:global +DisableTrigger__14HeirarchyModel = .text:0x8021FA68; // type:function size:0x2C scope:global +SetTrigger__14HeirarchyModelRCQ25UMath7Matrix4b = .text:0x8021FA94; // type:function size:0x1A8 scope:global +OnUpdateAvoidable__14HeirarchyModelRQ25UMath7Vector3Rf = .text:0x8021FC3C; // type:function size:0x144 scope:global +PlaceTrigger__14HeirarchyModelRCQ25UMath7Matrix4b = .text:0x8021FD80; // type:function size:0x44 scope:global +OnEndSimulation__14HeirarchyModel = .text:0x8021FDC4; // type:function size:0x18 scope:global +OnBeginSimulation__14HeirarchyModel = .text:0x8021FDDC; // type:function size:0xF0 scope:global +OnDraw__14HeirarchyModelPQ23Sim6Packet = .text:0x8021FECC; // type:function size:0x24 scope:global +__16PlaceableSceneryG7bHash32PCQ217CollisionGeometry6BoundsPCQ26Attrib10CollectionPC14ModelHeirarchy = .text:0x8021FEF0; // type:function size:0xF8 scope:global +ReleaseModel__16PlaceableScenery = .text:0x8021FFE8; // type:function size:0x38 scope:global +Construct__16PlaceableSceneryPCcUi = .text:0x80220020; // type:function size:0x16C scope:global +PickUp__16PlaceableScenery = .text:0x8022018C; // type:function size:0x7C scope:global +Place__16PlaceableSceneryRCQ25UMath7Matrix4b = .text:0x80220208; // type:function size:0x258 scope:global +__18SmackableAvoidableP14HeirarchyModel = .text:0x80220460; // type:function size:0x70 scope:global +OnUpdateAvoidable__18SmackableAvoidableRQ25UMath7Vector3Rf = .text:0x802204D0; // type:function size:0x38 scope:global +__12SceneryModelP16SmokeableSpawnerPCQ217CollisionGeometry6BoundsPCQ26Attrib10Collectionb = .text:0x80220508; // type:function size:0x144 scope:global +_._12SceneryModel = .text:0x8022064C; // type:function size:0x10C scope:global +ShowInstance__12SceneryModelb = .text:0x80220758; // type:function size:0x5C scope:global +OnBeginDraw__12SceneryModel = .text:0x802207B4; // type:function size:0x34 scope:global +HideModel__12SceneryModel = .text:0x802207E8; // type:function size:0x34 scope:global +EndOverride__12SceneryModel = .text:0x8022081C; // type:function size:0x24 scope:global +StartOverride__12SceneryModel = .text:0x80220840; // type:function size:0x24 scope:global +GetTransform__C12SceneryModelRQ25UMath7Matrix4 = .text:0x80220864; // type:function size:0xD4 scope:global +InitScene__12SceneryModel = .text:0x80220938; // type:function size:0x180 scope:global +GetSceneryTransform__C12SceneryModelRQ25UMath7Matrix4 = .text:0x80220AB8; // type:function size:0x1EC scope:global +OnEndSimulation__12SceneryModel = .text:0x80220CA4; // type:function size:0x20 scope:global +Construct__12SceneryModelP16SmokeableSpawnerPCQ26Attrib10Collectionb = .text:0x80220CC4; // type:function size:0x158 scope:global +WakeUp__12SceneryModel = .text:0x80220E1C; // type:function size:0x78 scope:global +RestoreScene__12SceneryModel = .text:0x80220E94; // type:function size:0x20 scope:global +ReleaseModel__12SceneryModel = .text:0x80220EB4; // type:function size:0x58 scope:global +InitSystem__12SceneryModel = .text:0x80220F0C; // type:function size:0x20 scope:global +RestoreSystem__12SceneryModel = .text:0x80220F2C; // type:function size:0x20 scope:global +OnUnload__20SmokeableSpawnerPack = .text:0x80220F4C; // type:function size:0xCC scope:global +EndianSwap__20SmokeableSpawnerPack = .text:0x80221018; // type:function size:0x7C scope:global +OnMoved__20SmokeableSpawnerPack = .text:0x80221094; // type:function size:0x50 scope:global +OnLoad__20SmokeableSpawnerPackUi = .text:0x802210E4; // type:function size:0x184 scope:global +FindAttributes__16SmokeableSpawnerG6UCrc32 = .text:0x80221268; // type:function size:0x2C scope:global +Init__16SmokeableSpawner = .text:0x80221294; // type:function size:0x38 scope:global +EndianSwap__16SmokeableSpawner = .text:0x802212CC; // type:function size:0xD0 scope:global +OnUnload__16SmokeableSpawner = .text:0x8022139C; // type:function size:0x5C scope:global +GetRenderHeirarchy__C16SmokeableSpawner = .text:0x802213F8; // type:function size:0x78 scope:global +GetRenderMesh__C16SmokeableSpawner = .text:0x80221470; // type:function size:0xA4 scope:global +ShowInstance__C16SmokeableSpawner = .text:0x80221514; // type:function size:0x40 scope:global +IsInstanceVisible__C16SmokeableSpawner = .text:0x80221554; // type:function size:0x40 scope:global +HideInstance__C16SmokeableSpawner = .text:0x80221594; // type:function size:0x40 scope:global +OnMoved__16SmokeableSpawner = .text:0x802215D4; // type:function size:0x14 scope:global +OnLoad__16SmokeableSpawnerUib = .text:0x802215E8; // type:function size:0x7C scope:global +Loader__20SmokeableSpawnerPackP6bChunk = .text:0x80221664; // type:function size:0xD4 scope:global +Unloader__20SmokeableSpawnerPackP6bChunk = .text:0x80221738; // type:function size:0x80 scope:global +CreateInstance__17IPlaceableSceneryPCcUi = .text:0x802217B8; // type:function size:0x34 scope:global +FindPartMap__FQ37Physics8Upgrades4Type = .text:0x802217EC; // type:function size:0x4C scope:global +DownGradeInternal__FRQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Type = .text:0x80221838; // type:function size:0x168 scope:local +BlendParts__H1Z8AxlePair_RCQ26Attrib9AttributeT0UifRQ26Attrib9Attribute_v = .text:0x802219A0; // type:function size:0x174 scope:global +ScalePart__H1Z8AxlePair_RQ26Attrib9AttributeUif_v = .text:0x80221B14; // type:function size:0x104 scope:global +__10PUJunkNodeRCQ26Attrib7RefSpecRCQ36Attrib3Gen7junkmanUi = .text:0x80221C18; // type:function size:0x23C scope:global +__10PUPartNodeRCQ26Attrib7RefSpecT1f = .text:0x80221E54; // type:function size:0x2E0 scope:global +GetPercent__Q27Physics8UpgradesRCQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Type = .text:0x80222134; // type:function size:0xA8 scope:global +GetLevel__Q27Physics8UpgradesRCQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Type = .text:0x802221DC; // type:function size:0x90 scope:global +GetPackage__Q27Physics8UpgradesRCQ36Attrib3Gen8pvehicleRQ37Physics8Upgrades7Package = .text:0x8022226C; // type:function size:0x90 scope:global +SetPackage__Q27Physics8UpgradesRQ36Attrib3Gen8pvehicleRCQ37Physics8Upgrades7Package = .text:0x802222FC; // type:function size:0x114 scope:global +GetJunkman__Q27Physics8UpgradesRCQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Type = .text:0x80222410; // type:function size:0x60 scope:global +CanInstallJunkman__Q27Physics8UpgradesRCQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Type = .text:0x80222470; // type:function size:0x14C scope:global +SetJunkman__Q27Physics8UpgradesRQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Type = .text:0x802225BC; // type:function size:0x4C4 scope:global +ApplyPreset__Q27Physics8UpgradesRQ36Attrib3Gen8pvehicleRCQ36Attrib3Gen10presetride = .text:0x80222A80; // type:function size:0x1D8 scope:global +RemovePart__Q27Physics8UpgradesRQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Type = .text:0x80222C58; // type:function size:0x90 scope:global +RemoveJunkman__Q27Physics8UpgradesRQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Type = .text:0x80222CE8; // type:function size:0x9C scope:global +Validate__Q27Physics8UpgradesRCQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Type = .text:0x80222D84; // type:function size:0x144 scope:global +Validate__Q27Physics8UpgradesRCQ36Attrib3Gen8pvehicle = .text:0x80222EC8; // type:function size:0x58 scope:global +GetMaxLevel__Q27Physics8UpgradesRCQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Type = .text:0x80222F20; // type:function size:0x90 scope:global +SetMaximum__Q27Physics8UpgradesRQ36Attrib3Gen8pvehicle = .text:0x80222FB0; // type:function size:0x74 scope:global +UpgradeInternal__FRQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Typeif = .text:0x80223024; // type:function size:0x598 scope:local +SetLevel__Q27Physics8UpgradesRQ36Attrib3Gen8pvehicleQ37Physics8Upgrades4Typei = .text:0x802235BC; // type:function size:0x12C scope:global +Clear__Q27Physics8UpgradesRQ36Attrib3Gen8pvehicle = .text:0x802236E8; // type:function size:0x2C scope:global +MatchPerformance__Q27Physics8UpgradesRQ36Attrib3Gen8pvehicleRCQ37Physics4Info11Performance = .text:0x80223714; // type:function size:0x3A0 scope:global +Flush__Q27Physics8Upgradesv = .text:0x80223AB4; // type:function size:0x28 scope:global +AerodynamicDownforce__Q27Physics4InfoRCQ36Attrib3Gen7chassisf = .text:0x80223ADC; // type:function size:0x20 scope:global +EngineInertia__Q27Physics4InfoRCQ36Attrib3Gen6engineb = .text:0x80223AFC; // type:function size:0x40 scope:global +InductionType__Q27Physics4InfoRCQ36Attrib3Gen8pvehicle = .text:0x80223B3C; // type:function size:0x90 scope:global +InductionType__Q27Physics4InfoRCQ36Attrib3Gen9induction = .text:0x80223BCC; // type:function size:0x48 scope:global +HasNos__Q27Physics4InfoRCQ36Attrib3Gen8pvehicle = .text:0x80223C14; // type:function size:0xB4 scope:global +HasRunflatTires__Q27Physics4InfoRCQ36Attrib3Gen8pvehicle = .text:0x80223CC8; // type:function size:0x8 scope:global +NosBoost__Q27Physics4InfoRCQ36Attrib3Gen3nosPCQ27Physics7Tunings = .text:0x80223CD0; // type:function size:0x34 scope:global +NosCapacity__Q27Physics4InfoRCQ36Attrib3Gen3nosPCQ27Physics7Tunings = .text:0x80223D04; // type:function size:0x2C scope:global +InductionRPM__Q27Physics4InfoRCQ36Attrib3Gen6engineRCQ36Attrib3Gen9inductionPCQ27Physics7Tunings = .text:0x80223D30; // type:function size:0x78 scope:global +InductionBoost__Q27Physics4InfoRCQ36Attrib3Gen6engineRCQ36Attrib3Gen9inductionffPCQ27Physics7TuningsPf = .text:0x80223DA8; // type:function size:0x304 scope:global +Torque__Q27Physics4InfoRCQ36Attrib3Gen6enginef = .text:0x802240AC; // type:function size:0x1BC scope:global +WheelDiameter__Q27Physics4InfoRCQ36Attrib3Gen5tiresb = .text:0x80224268; // type:function size:0x58 scope:global +WheelDiameter__Q27Physics4InfoRCQ36Attrib3Gen8pvehicleb = .text:0x802242C0; // type:function size:0xA0 scope:global +MaxInductedPower__Q27Physics4InfoRCQ36Attrib3Gen8pvehiclePCQ27Physics7Tunings = .text:0x80224360; // type:function size:0x238 scope:global +AvgInductedTorque__Q27Physics4InfoRCQ36Attrib3Gen6engineRCQ36Attrib3Gen9inductionRCQ36Attrib3Gen12transmissionbPCQ27Physics7Tunings = .text:0x80224598; // type:function size:0x254 scope:global +MaxInductedTorque__Q27Physics4InfoRCQ36Attrib3Gen6engineRCQ36Attrib3Gen9inductionRfPCQ27Physics7Tunings = .text:0x802247EC; // type:function size:0x1A8 scope:global +MaxInductedTorque__Q27Physics4InfoRCQ36Attrib3Gen8pvehicleRfPCQ27Physics7Tunings = .text:0x80224994; // type:function size:0x110 scope:global +MaxTorque__Q27Physics4InfoRCQ36Attrib3Gen6engineRf = .text:0x80224AA4; // type:function size:0x170 scope:global +Redline__Q27Physics4InfoRCQ36Attrib3Gen6engine = .text:0x80224C14; // type:function size:0xC scope:global +Redline__Q27Physics4InfoRCQ36Attrib3Gen8pvehicle = .text:0x80224C20; // type:function size:0x98 scope:global +ShiftPoints__Q27Physics4InfoRCQ36Attrib3Gen12transmissionRCQ36Attrib3Gen6engineRCQ36Attrib3Gen9inductionPfT4Ui = .text:0x80224CB8; // type:function size:0x338 scope:global +Speedometer__Q27Physics4InfoRCQ36Attrib3Gen12transmissionRCQ36Attrib3Gen6engineRCQ36Attrib3Gen5tiresf6GearIDPCQ27Physics7Tunings = .text:0x80224FF0; // type:function size:0x1A4 scope:global +NumFowardGears__Q27Physics4InfoRCQ36Attrib3Gen12transmission = .text:0x80225194; // type:function size:0x38 scope:global +NumFowardGears__Q27Physics4InfoRCQ36Attrib3Gen8pvehicle = .text:0x802251CC; // type:function size:0x90 scope:global +Fetch__9PerfStatsRCQ36Attrib3Gen8pvehicleP8bVector2Pi = .text:0x8022525C; // type:function size:0x8A4 scope:global +Print__9PerfLevelPCc = .text:0x80225B00; // type:function size:0x4 scope:global +Rate__9PerfLevel = .text:0x80225B04; // type:function size:0x17C scope:global +Analyze__9PerfLevelRCQ36Attrib3Gen8pvehicle = .text:0x80225C80; // type:function size:0x58 scope:global +FindLimits__C15PerformanceMapsfR9PerfStats = .text:0x80225CD8; // type:function size:0x11C scope:global +Init__Q27Physics4Infov = .text:0x80225DF4; // type:function size:0x830 scope:global +HasPerformanceRatings__Q27Physics4InfoRCQ36Attrib3Gen8pvehicle = .text:0x80226624; // type:function size:0xA0 scope:global +ComputeAccelerationTable__Q27Physics4InfoRCQ36Attrib3Gen8pvehicleRfPfi = .text:0x802266C4; // type:function size:0x57C scope:global +EstimatePerformance__Q27Physics4InfoRCQ36Attrib3Gen8pvehicleRQ37Physics4Info11Performance = .text:0x80226C40; // type:function size:0x3BC scope:global +ComputePerformance__Q27Physics4InfoRCQ36Attrib3Gen8pvehicleRQ37Physics4Info11Performance = .text:0x80226FFC; // type:function size:0x128 scope:global +GetStockPerformance__Q27Physics4InfoRCQ36Attrib3Gen8pvehicleRQ37Physics4Info11Performance = .text:0x80227124; // type:function size:0xD0 scope:global +GetMaximumPerformance__Q27Physics4InfoRCQ36Attrib3Gen8pvehicleRQ37Physics4Info11Performance = .text:0x802271F4; // type:function size:0xD0 scope:global +FindPerformanceCandidates__Q27Physics4InfoRCQ37Physics4Info11PerformanceT1RQ33UTL3Stdt4list2ZUiZ10_type_list = .text:0x802272C4; // type:function size:0x124 scope:global +LowerLimit__Q27Physics7TuningsQ37Physics7Tunings4Path = .text:0x802273E8; // type:function size:0x14 scope:global +UpperLimit__Q27Physics7TuningsQ37Physics7Tunings4Path = .text:0x802273FC; // type:function size:0x18 scope:global +find__H2ZPP11IDisposableZP11IDisposable_4_STLX01X01RCX11_X01 = .text:0x80227414; // type:function size:0xB0 scope:global +find__H2ZPP10ISpikeableZP10ISpikeable_4_STLX01X01RCX11_X01 = .text:0x802274C4; // type:function size:0xB0 scope:global +clear__Q24_STLt10_List_base2ZQ28PVehicle8ResourceZQ33UTL3Stdt9Allocator2ZQ28PVehicle8ResourceZ10_type_list = .text:0x80227574; // type:function size:0x78 scope:global +__adjust_heap__H4ZPQ28PVehicle10ManageNodeZiZQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X11X11X21X31_v = .text:0x802275EC; // type:function size:0x20C scope:global +make_heap__H2ZPQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X01X11_v = .text:0x802277F8; // type:function size:0xB8 scope:global +pop_heap__H2ZPQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X01X11_v = .text:0x802278B0; // type:function size:0xCC scope:global +__partial_sort__H3ZPQ28PVehicle10ManageNodeZQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X01X01PX11X21_v = .text:0x8022797C; // type:function size:0x178 scope:global +partial_sort__H2ZPQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X01X01X11_v = .text:0x80227AF4; // type:function size:0x28 scope:global +__unguarded_partition__H3ZPQ28PVehicle10ManageNodeZQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X01X11X21_X01 = .text:0x80227B1C; // type:function size:0x104 scope:global +__introsort_loop__H4ZPQ28PVehicle10ManageNodeZQ28PVehicle10ManageNodeZiZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X01PX11X21X31_v = .text:0x80227C20; // type:function size:0x1AC scope:global +__unguarded_linear_insert__H3ZPQ28PVehicle10ManageNodeZQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X11X21_v = .text:0x80227DCC; // type:function size:0xB4 scope:global +__insertion_sort__H2ZPQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X01X11_v = .text:0x80227E80; // type:function size:0x170 scope:global +__unguarded_insertion_sort_aux__H3ZPQ28PVehicle10ManageNodeZQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X01PX11X21_v = .text:0x80227FF0; // type:function size:0x88 scope:global +__final_insertion_sort__H2ZPQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X01X11_v = .text:0x80228078; // type:function size:0x78 scope:global +sort__H2ZPQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNodeRCQ28PVehicle10ManageNode_b_4_STLX01X01X11_v = .text:0x802280F0; // type:function size:0x90 scope:global +find_if__H2ZPQ28PVehicle10ManageNodeZPFRCQ28PVehicle10ManageNode_b_4_STLX01X01X11_X01 = .text:0x80228180; // type:function size:0x134 scope:global +_M_erase__Q24_STLt8_Rb_tree5Z7CarTypeZQ24_STLt4pair2ZC7CarTypeZUiZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC7CarTypeZUiZQ24_STLt4less1Z7CarTypeZQ33UTL3Stdt9Allocator2ZUiZ9_type_mapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZC7CarTypeZUi = .text:0x802282B4; // type:function size:0x68 scope:global +_M_insert__Q24_STLt8_Rb_tree5Z7CarTypeZQ24_STLt4pair2ZC7CarTypeZUiZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC7CarTypeZUiZQ24_STLt4less1Z7CarTypeZQ33UTL3Stdt9Allocator2ZUiZ9_type_mapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZC7CarTypeZUiT1 = .text:0x8022831C; // type:function size:0x13C scope:global +insert_unique__Q24_STLt8_Rb_tree5Z7CarTypeZQ24_STLt4pair2ZC7CarTypeZUiZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC7CarTypeZUiZQ24_STLt4less1Z7CarTypeZQ33UTL3Stdt9Allocator2ZUiZ9_type_mapRCQ24_STLt4pair2ZC7CarTypeZUi = .text:0x80228458; // type:function size:0x118 scope:global +insert_unique__Q24_STLt8_Rb_tree5Z7CarTypeZQ24_STLt4pair2ZC7CarTypeZUiZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC7CarTypeZUiZQ24_STLt4less1Z7CarTypeZQ33UTL3Stdt9Allocator2ZUiZ9_type_mapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZC7CarTypeZUiZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZC7CarTypeZUiRCQ24_STLt4pair2ZC7CarTypeZUi = .text:0x80228570; // type:function size:0x268 scope:global +_M_erase__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32Z6UCrc32ZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32Z6UCrc32ZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2Z6UCrc32Z26_type_ID_PVehicleChangeReqPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZC6UCrc32Z6UCrc32 = .text:0x802287D8; // type:function size:0x68 scope:global +_M_insert__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32Z6UCrc32ZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32Z6UCrc32ZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2Z6UCrc32Z26_type_ID_PVehicleChangeReqPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZC6UCrc32Z6UCrc32T1 = .text:0x80228840; // type:function size:0x13C scope:global +insert_unique__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32Z6UCrc32ZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32Z6UCrc32ZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2Z6UCrc32Z26_type_ID_PVehicleChangeReqRCQ24_STLt4pair2ZC6UCrc32Z6UCrc32 = .text:0x8022897C; // type:function size:0x118 scope:global +insert_unique__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32Z6UCrc32ZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32Z6UCrc32ZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2Z6UCrc32Z26_type_ID_PVehicleChangeReqGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZC6UCrc32Z6UCrc32ZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZC6UCrc32Z6UCrc32RCQ24_STLt4pair2ZC6UCrc32Z6UCrc32 = .text:0x80228A94; // type:function size:0x26C scope:global +find__H2ZQ24_STLt14_List_iterator2ZP8BehaviorZQ24_STLt16_Nonconst_traits1ZP8BehaviorZP8Behavior_4_STLX01X01RCX11_X01 = .text:0x80228D00; // type:function size:0x60 scope:global +find__H2ZPQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_NodeZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Node_4_STLX01X01RCX11_X01 = .text:0x80228D60; // type:function size:0xB0 scope:global +clear__Q24_STLt10_List_base2ZP8BehaviorZQ33UTL3Stdt9Allocator2ZP8BehaviorZ16_type_UContainer = .text:0x80228E10; // type:function size:0x78 scope:global +_M_erase__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP8BehaviorZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP8BehaviorZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP8BehaviorZ20_type_ID_POMechanicsPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCUiZP8Behavior = .text:0x80228E88; // type:function size:0x68 scope:global +clear__Q24_STLt10_List_base2ZP8BehaviorZQ33UTL3Stdt9Allocator2ZP8BehaviorZ20_type_ID_POBehaviors = .text:0x80228EF0; // type:function size:0x78 scope:global +_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP8BehaviorZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP8BehaviorZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP8BehaviorZ20_type_ID_POMechanicsPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZP8BehaviorT1 = .text:0x80228F68; // type:function size:0x13C scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP8BehaviorZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP8BehaviorZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP8BehaviorZ20_type_ID_POMechanicsRCQ24_STLt4pair2ZCUiZP8Behavior = .text:0x802290A4; // type:function size:0x118 scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP8BehaviorZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP8BehaviorZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP8BehaviorZ20_type_ID_POMechanicsGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZP8BehaviorZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZP8BehaviorRCQ24_STLt4pair2ZCUiZP8Behavior = .text:0x802291BC; // type:function size:0x26C scope:global +CreateInstance__Q33UTL3COMt7Factory3ZRC14BehaviorParamsZ8BehaviorZ6UCrc32G6UCrc32RC14BehaviorParams = .text:0x80229428; // type:function size:0x60 scope:global +find__H2ZPP9SmackableZP9Smackable_4_STLX01X01RCX11_X01 = .text:0x80229488; // type:function size:0xB0 scope:global +__adjust_heap__H4ZPP9SmackableZiZP9SmackableZPFPC9SmackablePC9Smackable_b_4_STLX01X11X11X21X31_v = .text:0x80229538; // type:function size:0x118 scope:global +make_heap__H2ZPP9SmackableZPFPC9SmackablePC9Smackable_b_4_STLX01X01X11_v = .text:0x80229650; // type:function size:0x78 scope:global +pop_heap__H2ZPP9SmackableZPFPC9SmackablePC9Smackable_b_4_STLX01X01X11_v = .text:0x802296C8; // type:function size:0x40 scope:global +__partial_sort__H3ZPP9SmackableZP9SmackableZPFPC9SmackablePC9Smackable_b_4_STLX01X01X01PX11X21_v = .text:0x80229708; // type:function size:0xBC scope:global +partial_sort__H2ZPP9SmackableZPFPC9SmackablePC9Smackable_b_4_STLX01X01X01X11_v = .text:0x802297C4; // type:function size:0x28 scope:global +__unguarded_partition__H3ZPP9SmackableZP9SmackableZPFPC9SmackablePC9Smackable_b_4_STLX01X01X11X21_X01 = .text:0x802297EC; // type:function size:0x9C scope:global +__introsort_loop__H4ZPP9SmackableZP9SmackableZiZPFPC9SmackablePC9Smackable_b_4_STLX01X01PX11X21X31_v = .text:0x80229888; // type:function size:0x158 scope:global +__unguarded_linear_insert__H3ZPP9SmackableZP9SmackableZPFPC9SmackablePC9Smackable_b_4_STLX01X11X21_v = .text:0x802299E0; // type:function size:0x60 scope:global +__insertion_sort__H2ZPP9SmackableZPFPC9SmackablePC9Smackable_b_4_STLX01X01X11_v = .text:0x80229A40; // type:function size:0xA4 scope:global +__unguarded_insertion_sort_aux__H3ZPP9SmackableZP9SmackableZPFPC9SmackablePC9Smackable_b_4_STLX01X01PX11X21_v = .text:0x80229AE4; // type:function size:0x54 scope:global +__final_insertion_sort__H2ZPP9SmackableZPFPC9SmackablePC9Smackable_b_4_STLX01X01X11_v = .text:0x80229B38; // type:function size:0x6C scope:global +sort__H2ZPP9SmackableZPFPC9SmackablePC9Smackable_b_4_STLX01X01X11_v = .text:0x80229BA4; // type:function size:0x84 scope:global +__upper_bound__H4ZPQ317CollisionGeometry10BoundsPack4PairZQ317CollisionGeometry10BoundsPack4PairZQ24_STLt4less1ZQ317CollisionGeometry10BoundsPack4PairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80229C28; // type:function size:0x48 scope:global +__lower_bound__H4ZPQ317CollisionGeometry10BoundsPack4PairZQ317CollisionGeometry10BoundsPack4PairZQ24_STLt4less1ZQ317CollisionGeometry10BoundsPack4PairZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80229C70; // type:function size:0x48 scope:global +reserve__Q24_STLt6vector2ZQ317CollisionGeometry10BoundsPack4PairZQ33UTL3Stdt9Allocator2ZQ317CollisionGeometry10BoundsPack4PairZ26_type_CollisionBoundsTableUi = .text:0x80229CB8; // type:function size:0x15C scope:global +ScalePart__H1Zf_RQ26Attrib9AttributeUif_v = .text:0x80229E14; // type:function size:0xD0 scope:global +ScalePart__H1Zi_RQ26Attrib9AttributeUif_v = .text:0x80229EE4; // type:function size:0x104 scope:global +BlendParts__H1Zf_RCQ26Attrib9AttributeT0UifRQ26Attrib9Attribute_v = .text:0x80229FE8; // type:function size:0x128 scope:global +BlendParts__H1Zi_RCQ26Attrib9AttributeT0UifRQ26Attrib9Attribute_v = .text:0x8022A110; // type:function size:0x178 scope:global +Get__H1ZQ26Attrib7RefSpec_CQ26Attrib9AttributeUi_RCX01 = .text:0x8022A288; // type:function size:0x50 scope:global +clear__Q24_STLt10_List_base2Z9PerfLevelZQ33UTL3Stdt9Allocator2Z9PerfLevelZ21_type_PerformanceMaps = .text:0x8022A2D8; // type:function size:0x78 scope:global +__static_initialization_and_destruction_0 = .text:0x8022A350; // type:function size:0x1F3C scope:local +_._16PlaceableScenery = .text:0x8022C28C; // type:function size:0xE8 scope:global +_._8ISimable = .text:0x8022C374; // type:function size:0x10C scope:global +_IHandle__Q23Sim7IEntity = .text:0x8022C480; // type:function size:0xC scope:global +_IHandle__17ITriggerableModel = .text:0x8022C48C; // type:function size:0xC scope:global +_._17ITriggerableModel = .text:0x8022C498; // type:function size:0x54 scope:global +push_back__Q23UTLt6Vector2ZP6IModeli16RCP6IModel = .text:0x8022C4EC; // type:function size:0x154 scope:global +_._11IRenderable = .text:0x8022C640; // type:function size:0x54 scope:global +_IHandle__12IExplodeable = .text:0x8022C694; // type:function size:0xC scope:global +_._12IExplodeable = .text:0x8022C6A0; // type:function size:0x54 scope:global +_IHandle__10IExplosion = .text:0x8022C6F4; // type:function size:0xC scope:global +_._10IExplosion = .text:0x8022C700; // type:function size:0x160 scope:global +push_back__Q23UTLt6Vector2ZP10IExplosioni16RCP10IExplosion = .text:0x8022C860; // type:function size:0x154 scope:global +__as__Q36Attrib3Gen8pvehicleRCQ26Attrib8Instance = .text:0x8022C9B4; // type:function size:0x30 scope:global +push_back__Q23UTLt6Vector2ZP12IInputPlayeri16RCP12IInputPlayer = .text:0x8022C9E4; // type:function size:0x154 scope:global +_IHandle__11IRaceEngine = .text:0x8022CB38; // type:function size:0xC scope:global +_._8IVehicle = .text:0x8022CB44; // type:function size:0x180 scope:global +push_back__Q23UTLt6Vector2ZP14ICollisionBodyi16RCP14ICollisionBody = .text:0x8022CCC4; // type:function size:0x154 scope:global +_._5IBody = .text:0x8022CE18; // type:function size:0x54 scope:global +_IHandle__11ISimpleBody = .text:0x8022CE6C; // type:function size:0xC scope:global +push_back__Q23UTLt6Vector2ZP11ISimpleBodyi16RCP11ISimpleBody = .text:0x8022CE78; // type:function size:0x154 scope:global +push_back__Q23UTLt6Vector2ZP10IRigidBodyi16RCP10IRigidBody = .text:0x8022CFCC; // type:function size:0x154 scope:global +_IHandle__11IDisposable = .text:0x8022D120; // type:function size:0xC scope:global +_._11IDisposable = .text:0x8022D12C; // type:function size:0x160 scope:global +push_back__Q23UTLt6Vector2ZP11IDisposablei16RCP11IDisposable = .text:0x8022D28C; // type:function size:0x154 scope:global +_IHandle__17IPlaceableScenery = .text:0x8022D3E0; // type:function size:0xC scope:global +push_back__Q23UTLt6Vector2ZP17IRecordablePlayeri16RCP17IRecordablePlayer = .text:0x8022D3EC; // type:function size:0x154 scope:global +push_back__Q23UTLt6Vector2ZP10ISpikeablei16RCP10ISpikeable = .text:0x8022D540; // type:function size:0x154 scope:global +_IHandle__Q214EventSequencer8IContext = .text:0x8022D694; // type:function size:0xC scope:global +_._Q214EventSequencer8IContext = .text:0x8022D6A0; // type:function size:0x54 scope:global +__Q33UTL3Stdt3map3ZUiZP8BehaviorZ20_type_ID_POMechanics = .text:0x8022D6F4; // type:function size:0x74 scope:global +Reset__13PhysicsObject = .text:0x8022D768; // type:function size:0x24 scope:global +GetEventSequencer__13PhysicsObject = .text:0x8022D78C; // type:function size:0x8 scope:global +GetEntity__C13PhysicsObject = .text:0x8022D794; // type:function size:0x8 scope:global +IsPlayer__C13PhysicsObject = .text:0x8022D79C; // type:function size:0x18 scope:global +GetPlayer__C13PhysicsObject = .text:0x8022D7B4; // type:function size:0x8 scope:global +GetSimableType__C13PhysicsObject = .text:0x8022D7BC; // type:function size:0x8 scope:global +GetAttributes__C13PhysicsObject = .text:0x8022D7C4; // type:function size:0x8 scope:global +IsRigidBodySimple__C13PhysicsObject = .text:0x8022D7CC; // type:function size:0x48 scope:global +IsRigidBodyComplex__C13PhysicsObject = .text:0x8022D814; // type:function size:0x3C scope:global +GetWPos__13PhysicsObject = .text:0x8022D850; // type:function size:0x8 scope:global +GetWPos__C13PhysicsObject = .text:0x8022D858; // type:function size:0x8 scope:global +GetOwnerHandle__C13PhysicsObject = .text:0x8022D860; // type:function size:0x8 scope:global +GetOwner__C13PhysicsObject = .text:0x8022D868; // type:function size:0x58 scope:global +GetRigidBody__13PhysicsObject = .text:0x8022D8C0; // type:function size:0x8 scope:global +GetRigidBody__C13PhysicsObject = .text:0x8022D8C8; // type:function size:0x8 scope:global +GetPosition__C13PhysicsObject = .text:0x8022D8D0; // type:function size:0x4C scope:global +GetWorldID__C13PhysicsObject = .text:0x8022D91C; // type:function size:0x8 scope:global +IsAttached__C13PhysicsObjectPCQ33UTL3COM8IUnknown = .text:0x8022D924; // type:function size:0x34 scope:global +GetAttachments__C13PhysicsObject = .text:0x8022D958; // type:function size:0x18 scope:global +Reset__Q213PhysicsObject9Behaviors = .text:0x8022D970; // type:function size:0x7C scope:global +TypeName__8AIParams = .text:0x8022D9EC; // type:function size:0x64 scope:global +TypeName__15RBComplexParams = .text:0x8022DA50; // type:function size:0x64 scope:global +TypeName__14RBSimpleParams = .text:0x8022DAB4; // type:function size:0x64 scope:global +TypeName__16SuspensionParams = .text:0x8022DB18; // type:function size:0x64 scope:global +TypeName__12EngineParams = .text:0x8022DB7C; // type:function size:0x64 scope:global +TypeName__12DamageParams = .text:0x8022DBE0; // type:function size:0x64 scope:global +_._15VehicleBehavior = .text:0x8022DC44; // type:function size:0x74 scope:global +GetSource__C9Explosion = .text:0x8022DCB8; // type:function size:0x8 scope:global +GetExpansionSpeed__C9Explosion = .text:0x8022DCC0; // type:function size:0x8 scope:global +GetMaximumRadius__C9Explosion = .text:0x8022DCC8; // type:function size:0x8 scope:global +GetOrigin__C9Explosion = .text:0x8022DCD0; // type:function size:0x4C scope:global +HasDamage__C9Explosion = .text:0x8022DD1C; // type:function size:0x8 scope:global +GetTargets__C9Explosion = .text:0x8022DD24; // type:function size:0x8 scope:global +SetCausality__9ExplosionP8HCAUSE__f = .text:0x8022DD2C; // type:function size:0xC scope:global +GetCausality__C9Explosion = .text:0x8022DD38; // type:function size:0x8 scope:global +GetCausalityTime__C9Explosion = .text:0x8022DD40; // type:function size:0x8 scope:global +GetModel__9Explosion = .text:0x8022DD48; // type:function size:0x8 scope:global +GetModel__C9Explosion = .text:0x8022DD50; // type:function size:0x8 scope:global +_IHandle__8IEffects = .text:0x8022DD58; // type:function size:0xC scope:global +_._Q29WorldConn13Pkt_Body_Open = .text:0x8022DD64; // type:function size:0x34 scope:global +ConnectionClass__Q29WorldConn13Pkt_Body_Open = .text:0x8022DD98; // type:function size:0x64 scope:global +Size__Q29WorldConn13Pkt_Body_Open = .text:0x8022DDFC; // type:function size:0x8 scope:global +Type__Q29WorldConn13Pkt_Body_Open = .text:0x8022DE04; // type:function size:0x20 scope:global +_._Q28PVehicle14ManagementList = .text:0x8022DE24; // type:function size:0xB4 scope:global +__Q33UTL3Stdt3map3Z6UCrc32Z6UCrc32Z26_type_ID_PVehicleChangeReq = .text:0x8022DED8; // type:function size:0x74 scope:global +sort_remove_resources__Q28PVehicle10ManageNodeRCQ28PVehicle10ManageNodeT1 = .text:0x8022DF4C; // type:function size:0x50 scope:global +sort_remove_instances__Q28PVehicle10ManageNodeRCQ28PVehicle10ManageNodeT1 = .text:0x8022DF9C; // type:function size:0x50 scope:global +sort_by_keep__Q28PVehicle10ManageNodeRCQ28PVehicle10ManageNodeT1 = .text:0x8022DFEC; // type:function size:0x44 scope:global +is_kept__Q28PVehicle10ManageNodeRCQ28PVehicle10ManageNode = .text:0x8022E030; // type:function size:0x10 scope:global +GetPosition__C8PVehicle = .text:0x8022E040; // type:function size:0x4C scope:global +GetSimable__C8PVehicle = .text:0x8022E08C; // type:function size:0x8 scope:global +GetSimable__8PVehicle = .text:0x8022E094; // type:function size:0x8 scope:global +GetVehicleAttributes__C8PVehicle = .text:0x8022E09C; // type:function size:0x8 scope:global +GetVehicleClass__C8PVehicle = .text:0x8022E0A4; // type:function size:0x8 scope:global +GetVehicleName__C8PVehicle = .text:0x8022E0AC; // type:function size:0xC scope:global +GetVehicleKey__C8PVehicle = .text:0x8022E0B8; // type:function size:0x24 scope:global +GetDriverClass__C8PVehicle = .text:0x8022E0DC; // type:function size:0x8 scope:global +GetDriverStyle__C8PVehicle = .text:0x8022E0E4; // type:function size:0x8 scope:global +GetForceStop__8PVehicle = .text:0x8022E0EC; // type:function size:0xC scope:global +IsOffWorld__C8PVehicle = .text:0x8022E0F8; // type:function size:0x8 scope:global +GetModelType__C8PVehicle = .text:0x8022E100; // type:function size:0x8 scope:global +IsSpooled__C8PVehicle = .text:0x8022E108; // type:function size:0xC scope:global +IsStaging__C8PVehicle = .text:0x8022E114; // type:function size:0x8 scope:global +GetOffscreenTime__C8PVehicle = .text:0x8022E11C; // type:function size:0x8 scope:global +GetOnScreenTime__C8PVehicle = .text:0x8022E124; // type:function size:0x8 scope:global +InShock__C8PVehicle = .text:0x8022E12C; // type:function size:0x5C scope:global +IsDestroyed__C8PVehicle = .text:0x8022E188; // type:function size:0x48 scope:global +GetAbsoluteSpeed__C8PVehicle = .text:0x8022E1D0; // type:function size:0x8 scope:global +GetSpeedometer__C8PVehicle = .text:0x8022E1D8; // type:function size:0x8 scope:global +GetSpeed__C8PVehicle = .text:0x8022E1E0; // type:function size:0x8 scope:global +IsGlareOn__8PVehicleQ29VehicleFX2ID = .text:0x8022E1E8; // type:function size:0x18 scope:global +IsCollidingWithSoftBarrier__8PVehicle = .text:0x8022E200; // type:function size:0x8 scope:global +IsAnimating__C8PVehicle = .text:0x8022E208; // type:function size:0x8 scope:global +IsActive__C8PVehicle = .text:0x8022E210; // type:function size:0x18 scope:global +GetPhysicsMode__C8PVehicle = .text:0x8022E228; // type:function size:0x8 scope:global +GetCacheName__C8PVehicle = .text:0x8022E230; // type:function size:0x8 scope:global +GetAIVehiclePtr__C8PVehicle = .text:0x8022E238; // type:function size:0x8 scope:global +GetSlipAngle__C8PVehicle = .text:0x8022E240; // type:function size:0x8 scope:global +GetLocalVelocity__C8PVehicle = .text:0x8022E248; // type:function size:0x8 scope:global +GetCustomizations__C8PVehicle = .text:0x8022E250; // type:function size:0x8 scope:global +GetPerformance__C8PVehicleRQ37Physics4Info11Performance = .text:0x8022E258; // type:function size:0x24 scope:global +GetEventSequencer__8PVehicle = .text:0x8022E27C; // type:function size:0x8 scope:global +GetModel__8PVehicle = .text:0x8022E284; // type:function size:0x48 scope:global +GetModel__C8PVehicle = .text:0x8022E2CC; // type:function size:0x48 scope:global +push_back__Q23UTLt6Vector2ZP8IVehiclei16RCP8IVehicle = .text:0x8022E314; // type:function size:0x154 scope:global +_._Q23UTLt6Vector2ZQ28PVehicle10ManageNodei16 = .text:0x8022E468; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZQ28PVehicle10ManageNodei10i16 = .text:0x8022E49C; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZQ28PVehicle10ManageNodei16Ui = .text:0x8022E550; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt6Vector2ZQ28PVehicle10ManageNodei16Ui = .text:0x8022E554; // type:function size:0x20 scope:global +reserve__Q23UTLt6Vector2ZQ28PVehicle10ManageNodei16Ui = .text:0x8022E574; // type:function size:0x174 scope:global +__Q33UTL3Stdt3map3Z7CarTypeZUiZ9_type_map = .text:0x8022E6E8; // type:function size:0x74 scope:global +push_back__Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei16RCQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Node = .text:0x8022E75C; // type:function size:0x158 scope:global +ClassKey__Q36Attrib3Gen9smackable = .text:0x8022E8B4; // type:function size:0xC scope:global +ClassKey__Q36Attrib3Gen14rigidbodyspecs = .text:0x8022E8C0; // type:function size:0xC scope:global +_._t16BehaviorSpecsPtr1ZQ36Attrib3Gen14rigidbodyspecs = .text:0x8022E8CC; // type:function size:0x7C scope:global +SimplifySort__9SmackablePC9SmackableT1 = .text:0x8022E948; // type:function size:0x40 scope:global +IsRequired__C9Smackable = .text:0x8022E988; // type:function size:0x8 scope:global +HidePart__9SmackableRC6UCrc32 = .text:0x8022E990; // type:function size:0x4 scope:global +ShowPart__9SmackableRC6UCrc32 = .text:0x8022E994; // type:function size:0x4 scope:global +IsPartVisible__C9SmackableRC6UCrc32 = .text:0x8022E998; // type:function size:0x8 scope:global +GetModelHandle__C9Smackable = .text:0x8022E9A0; // type:function size:0x18 scope:global +GetModel__C9Smackable = .text:0x8022E9B8; // type:function size:0x8 scope:global +GetModel__9Smackable = .text:0x8022E9C0; // type:function size:0x8 scope:global +GetEventSequencer__9Smackable = .text:0x8022E9C8; // type:function size:0x48 scope:global +push_back__Q23UTLt6Vector2ZP9Smackablei16RCP9Smackable = .text:0x8022EA10; // type:function size:0x154 scope:global +Find__Q317CollisionGeometry10BoundsPack5TableG6UCrc32 = .text:0x8022EB64; // type:function size:0x84 scope:global +_._Q210RenderConn18Pkt_Smackable_Open = .text:0x8022EBE8; // type:function size:0x34 scope:global +ConnectionClass__Q210RenderConn18Pkt_Smackable_Open = .text:0x8022EC1C; // type:function size:0x64 scope:global +Size__Q210RenderConn18Pkt_Smackable_Open = .text:0x8022EC80; // type:function size:0x8 scope:global +Type__Q210RenderConn18Pkt_Smackable_Open = .text:0x8022EC88; // type:function size:0x20 scope:global +_._18SmackableAvoidable = .text:0x8022ECA8; // type:function size:0x5C scope:global +GetDimension__C14HeirarchyModelRQ25UMath7Vector3 = .text:0x8022ED04; // type:function size:0xCC scope:global +GetAttributes__C14HeirarchyModel = .text:0x8022EDD0; // type:function size:0x8 scope:global +GetWorldID__C14HeirarchyModel = .text:0x8022EDD8; // type:function size:0x20 scope:global +GetLinearVelocity__C14HeirarchyModelRQ25UMath7Vector3 = .text:0x8022EDF8; // type:function size:0x20 scope:global +Destroy__16PlaceableScenery = .text:0x8022EE18; // type:function size:0x20 scope:global +OnRemoveOffScreen__16PlaceableSceneryf = .text:0x8022EE38; // type:function size:0x8 scope:global +IsHidden__C12SceneryModel = .text:0x8022EE40; // type:function size:0x48 scope:global +IsExcluded__C12SceneryModelUi = .text:0x8022EE88; // type:function size:0x28 scope:global +GetSpawnerID__C12SceneryModel = .text:0x8022EEB0; // type:function size:0x18 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZQ28PVehicle10ManageNodei10i16UiUi = .text:0x8022EEC8; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZQ28PVehicle10ManageNodei10i16PQ28PVehicle10ManageNodeUi = .text:0x8022EED0; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZQ28PVehicle10ManageNodei10i16Ui = .text:0x8022EED4; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZQ28PVehicle10ManageNodei10i16 = .text:0x8022EEDC; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZQ28PVehicle10ManageNodei16 = .text:0x8022EEE4; // type:function size:0xC scope:global +reserve__Q23UTLt6Vector2ZPQ23Sim7IEntityi16Ui = .text:0x8022EEF0; // type:function size:0x14C scope:global +reserve__Q23UTLt6Vector2ZP7IPlayeri16Ui = .text:0x8022F03C; // type:function size:0x14C scope:global +_._Q43UTL11Collectionst12Instanceable3ZP10HSIMABLE__Z8ISimablei160_5_List = .text:0x8022F188; // type:function size:0xB4 scope:global +_._Q43UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3_4List = .text:0x8022F23C; // type:function size:0xB4 scope:global +_._Q43UTL11Collectionst11ListableSet4ZQ23Sim7IEntityi8Z11eEntityListUi4_4List = .text:0x8022F2F0; // type:function size:0xB4 scope:global +_._Q43UTL11Collectionst12Instanceable3ZP11HACTIVITY__ZQ23Sim9IActivityi40_5_List = .text:0x8022F3A4; // type:function size:0xB4 scope:global +_._Q43UTL11Collectionst12Instanceable3ZP8HMODEL__Z6IModeli434_5_List = .text:0x8022F458; // type:function size:0xB4 scope:global +_._Q43UTL11Collectionst8Listable2Z6IModeli434_4List = .text:0x8022F50C; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP6IModeli16Ui = .text:0x8022F5C0; // type:function size:0x4 scope:global +_._Q43UTL11Collectionst8Listable2Z10IExplosioni96_4List = .text:0x8022F5C4; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP10IExplosioni16Ui = .text:0x8022F678; // type:function size:0x4 scope:global +_._Q43UTL11Collectionst8Listable2Z12IInputPlayeri8_4List = .text:0x8022F67C; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP12IInputPlayeri16Ui = .text:0x8022F730; // type:function size:0x4 scope:global +_._Q43UTL11Collectionst8Listable2Z13IVehicleCachei18_4List = .text:0x8022F734; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP13IVehicleCachei16Ui = .text:0x8022F7E8; // type:function size:0x4 scope:global +_._Q43UTL11Collectionst8Listable2Z14ICollisionBodyi160_4List = .text:0x8022F7EC; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP14ICollisionBodyi16Ui = .text:0x8022F8A0; // type:function size:0x4 scope:global +_._Q43UTL11Collectionst8Listable2Z11ISimpleBodyi96_4List = .text:0x8022F8A4; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP11ISimpleBodyi16Ui = .text:0x8022F958; // type:function size:0x4 scope:global +_._Q43UTL11Collectionst8Listable2Z10IRigidBodyi160_4List = .text:0x8022F95C; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP10IRigidBodyi16Ui = .text:0x8022FA10; // type:function size:0x4 scope:global +_._Q43UTL11Collectionst12Instanceable3ZP8HCAUSE__Z6ICausei10_5_List = .text:0x8022FA14; // type:function size:0xB4 scope:global +_._Q43UTL11Collectionst8Listable2Z8IPursuiti8_4List = .text:0x8022FAC8; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP8IPursuiti16Ui = .text:0x8022FB7C; // type:function size:0x4 scope:global +_._Q43UTL11Collectionst8Listable2Z10IRoadBlocki8_4List = .text:0x8022FB80; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP10IRoadBlocki16Ui = .text:0x8022FC34; // type:function size:0x4 scope:global +_._Q43UTL11Collectionst8Listable2Z14ITrafficCenteri8_4List = .text:0x8022FC38; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP14ITrafficCenteri16Ui = .text:0x8022FCEC; // type:function size:0x4 scope:global +_._Q43UTL11Collectionst8Listable2Z11IDisposablei160_4List = .text:0x8022FCF0; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP11IDisposablei16Ui = .text:0x8022FDA4; // type:function size:0x4 scope:global +_._17IPlaceableScenery = .text:0x8022FDA8; // type:function size:0x70 scope:global +_._Q43UTL11Collectionst8Listable2Z17IRecordablePlayeri8_4List = .text:0x8022FE18; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP17IRecordablePlayeri16Ui = .text:0x8022FECC; // type:function size:0x4 scope:global +_._Q43UTL11Collectionst8Listable2Z10ISpikeablei10_4List = .text:0x8022FED0; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP10ISpikeablei16Ui = .text:0x8022FF84; // type:function size:0x4 scope:global +_._Q43UTL11Collectionst8Listable2Z4IHudi2_4List = .text:0x8022FF88; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP4IHudi16Ui = .text:0x8023003C; // type:function size:0x4 scope:global +_._Q33UTL11Collectionst8_Storage2ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei160 = .text:0x80230040; // type:function size:0xB4 scope:global +SType__Q29WorldConn13Pkt_Body_Open = .text:0x802300F4; // type:function size:0x58 scope:global +OnGrowRequest__Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei16Ui = .text:0x8023014C; // type:function size:0x4 scope:global +_._Q43UTL11Collectionst8Listable2Z9Smackablei160_4List = .text:0x80230150; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP9Smackablei16Ui = .text:0x80230204; // type:function size:0x4 scope:global +SType__Q210RenderConn18Pkt_Smackable_Open = .text:0x80230208; // type:function size:0x58 scope:global +OnGrowRequest__Q23UTLt6Vector2ZPQ23Sim7IEntityi16Ui = .text:0x80230260; // type:function size:0x4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP7IPlayeri16Ui = .text:0x80230264; // type:function size:0x4 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP9Smackablei160i16UiUi = .text:0x80230268; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP9Smackablei160i16PP9SmackableUi = .text:0x80230270; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP9Smackablei160i16Ui = .text:0x80230274; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP9Smackablei160i16 = .text:0x8023027C; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei160i16UiUi = .text:0x80230284; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei160i16PQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_NodeUi = .text:0x8023028C; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei160i16Ui = .text:0x80230290; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei160i16 = .text:0x80230298; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP4IHudi2i16UiUi = .text:0x802302A0; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP4IHudi2i16PP4IHudUi = .text:0x802302A8; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP4IHudi2i16Ui = .text:0x802302AC; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP4IHudi2i16 = .text:0x802302B4; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP10ISpikeablei10i16UiUi = .text:0x802302BC; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP10ISpikeablei10i16PP10ISpikeableUi = .text:0x802302C4; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP10ISpikeablei10i16Ui = .text:0x802302C8; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP10ISpikeablei10i16 = .text:0x802302D0; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP17IRecordablePlayeri8i16UiUi = .text:0x802302D8; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP17IRecordablePlayeri8i16PP17IRecordablePlayerUi = .text:0x802302E0; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP17IRecordablePlayeri8i16Ui = .text:0x802302E4; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP17IRecordablePlayeri8i16 = .text:0x802302EC; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP11IDisposablei160i16UiUi = .text:0x802302F4; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP11IDisposablei160i16PP11IDisposableUi = .text:0x802302FC; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP11IDisposablei160i16Ui = .text:0x80230300; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP11IDisposablei160i16 = .text:0x80230308; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP14ITrafficCenteri8i16UiUi = .text:0x80230310; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP14ITrafficCenteri8i16PP14ITrafficCenterUi = .text:0x80230318; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP14ITrafficCenteri8i16Ui = .text:0x8023031C; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP14ITrafficCenteri8i16 = .text:0x80230324; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP10IRoadBlocki8i16UiUi = .text:0x8023032C; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP10IRoadBlocki8i16PP10IRoadBlockUi = .text:0x80230334; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP10IRoadBlocki8i16Ui = .text:0x80230338; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP10IRoadBlocki8i16 = .text:0x80230340; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP8IPursuiti8i16UiUi = .text:0x80230348; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP8IPursuiti8i16PP8IPursuitUi = .text:0x80230350; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP8IPursuiti8i16Ui = .text:0x80230354; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP8IPursuiti8i16 = .text:0x8023035C; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei10i16UiUi = .text:0x80230364; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei10i16PQ33UTL11Collections10_KeyedNodeUi = .text:0x8023036C; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei10i16Ui = .text:0x80230370; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei10i16 = .text:0x80230378; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP10IRigidBodyi160i16UiUi = .text:0x80230380; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP10IRigidBodyi160i16PP10IRigidBodyUi = .text:0x80230388; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP10IRigidBodyi160i16Ui = .text:0x8023038C; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP10IRigidBodyi160i16 = .text:0x80230394; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP11ISimpleBodyi96i16UiUi = .text:0x8023039C; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP11ISimpleBodyi96i16PP11ISimpleBodyUi = .text:0x802303A4; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP11ISimpleBodyi96i16Ui = .text:0x802303A8; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP11ISimpleBodyi96i16 = .text:0x802303B0; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP14ICollisionBodyi160i16UiUi = .text:0x802303B8; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP14ICollisionBodyi160i16PP14ICollisionBodyUi = .text:0x802303C0; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP14ICollisionBodyi160i16Ui = .text:0x802303C4; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP14ICollisionBodyi160i16 = .text:0x802303CC; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP13IVehicleCachei18i16UiUi = .text:0x802303D4; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP13IVehicleCachei18i16PP13IVehicleCacheUi = .text:0x802303DC; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP13IVehicleCachei18i16Ui = .text:0x802303E0; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP13IVehicleCachei18i16 = .text:0x802303E8; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP12IInputPlayeri8i16UiUi = .text:0x802303F0; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP12IInputPlayeri8i16PP12IInputPlayerUi = .text:0x802303F8; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP12IInputPlayeri8i16Ui = .text:0x802303FC; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP12IInputPlayeri8i16 = .text:0x80230404; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP10IExplosioni96i16UiUi = .text:0x8023040C; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP10IExplosioni96i16PP10IExplosionUi = .text:0x80230414; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP10IExplosioni96i16Ui = .text:0x80230418; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP10IExplosioni96i16 = .text:0x80230420; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP6IModeli434i16UiUi = .text:0x80230428; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP6IModeli434i16PP6IModelUi = .text:0x80230430; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP6IModeli434i16Ui = .text:0x80230434; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP6IModeli434i16 = .text:0x8023043C; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei40i16UiUi = .text:0x80230444; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei40i16PQ33UTL11Collections10_KeyedNodeUi = .text:0x8023044C; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei40i16Ui = .text:0x80230450; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei40i16 = .text:0x80230458; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZPQ23Sim7IEntityi8i16UiUi = .text:0x80230460; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZPQ23Sim7IEntityi8i16PPQ23Sim7IEntityUi = .text:0x80230468; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZPQ23Sim7IEntityi8i16Ui = .text:0x8023046C; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZPQ23Sim7IEntityi8i16 = .text:0x80230474; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP7IPlayeri8i16UiUi = .text:0x8023047C; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP7IPlayeri8i16PP7IPlayerUi = .text:0x80230484; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP7IPlayeri8i16Ui = .text:0x80230488; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP7IPlayeri8i16 = .text:0x80230490; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei160i16UiUi = .text:0x80230498; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei160i16PQ33UTL11Collections10_KeyedNodeUi = .text:0x802304A0; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei160i16Ui = .text:0x802304A4; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei160i16 = .text:0x802304AC; // type:function size:0x8 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP6IModeli16Ui = .text:0x802304B4; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP10IExplosioni16Ui = .text:0x802304D4; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP12IInputPlayeri16Ui = .text:0x802304F4; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP13IVehicleCachei16Ui = .text:0x80230514; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP14ICollisionBodyi16Ui = .text:0x80230534; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP11ISimpleBodyi16Ui = .text:0x80230554; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP10IRigidBodyi16Ui = .text:0x80230574; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP8IPursuiti16Ui = .text:0x80230594; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP10IRoadBlocki16Ui = .text:0x802305B4; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP14ITrafficCenteri16Ui = .text:0x802305D4; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP11IDisposablei16Ui = .text:0x802305F4; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP17IRecordablePlayeri16Ui = .text:0x80230614; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP10ISpikeablei16Ui = .text:0x80230634; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP4IHudi16Ui = .text:0x80230654; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei16Ui = .text:0x80230674; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP9Smackablei16Ui = .text:0x80230694; // type:function size:0x20 scope:global +_._Q23UTLt6Vector2ZP10IExplosioni16 = .text:0x802306B4; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP10IExplosioni96i16 = .text:0x802306E8; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2ZP11IDisposablei16 = .text:0x8023079C; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP11IDisposablei160i16 = .text:0x802307D0; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2ZP10IRigidBodyi16 = .text:0x80230884; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP10IRigidBodyi160i16 = .text:0x802308B8; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2ZP14ICollisionBodyi16 = .text:0x8023096C; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP14ICollisionBodyi160i16 = .text:0x802309A0; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2ZP11ISimpleBodyi16 = .text:0x80230A54; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP11ISimpleBodyi96i16 = .text:0x80230A88; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2ZPQ23Sim7IEntityi16 = .text:0x80230B3C; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZPQ23Sim7IEntityi8i16 = .text:0x80230B70; // type:function size:0xB4 scope:global +GetGrowSize__CQ23UTLt6Vector2ZPQ23Sim7IEntityi16Ui = .text:0x80230C24; // type:function size:0x20 scope:global +_._Q23UTLt6Vector2ZP7IPlayeri16 = .text:0x80230C44; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP7IPlayeri8i16 = .text:0x80230C78; // type:function size:0xB4 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP7IPlayeri16Ui = .text:0x80230D2C; // type:function size:0x20 scope:global +_._Q23UTLt6Vector2ZP17IRecordablePlayeri16 = .text:0x80230D4C; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP17IRecordablePlayeri8i16 = .text:0x80230D80; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2ZP12IInputPlayeri16 = .text:0x80230E34; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP12IInputPlayeri8i16 = .text:0x80230E68; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2ZP6IModeli16 = .text:0x80230F1C; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP6IModeli434i16 = .text:0x80230F50; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2ZP8IPursuiti16 = .text:0x80231004; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP8IPursuiti8i16 = .text:0x80231038; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2ZP10IRoadBlocki16 = .text:0x802310EC; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP10IRoadBlocki8i16 = .text:0x80231120; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2ZP4IHudi16 = .text:0x802311D4; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP4IHudi2i16 = .text:0x80231208; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2ZP13IVehicleCachei16 = .text:0x802312BC; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP13IVehicleCachei18i16 = .text:0x802312F0; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2ZP14ITrafficCenteri16 = .text:0x802313A4; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP14ITrafficCenteri8i16 = .text:0x802313D8; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2ZP10ISpikeablei16 = .text:0x8023148C; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP10ISpikeablei10i16 = .text:0x802314C0; // type:function size:0xB4 scope:global +_._Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei160i16 = .text:0x80231574; // type:function size:0xB4 scope:global +_._Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei40i16 = .text:0x80231628; // type:function size:0xB4 scope:global +_._Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei10i16 = .text:0x802316DC; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei16 = .text:0x80231790; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei160i16 = .text:0x802317C4; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2ZP9Smackablei16 = .text:0x80231878; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP9Smackablei160i16 = .text:0x802318AC; // type:function size:0xB4 scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP9Smackablei16 = .text:0x80231960; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei16 = .text:0x8023196C; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP4IHudi16 = .text:0x80231978; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP10ISpikeablei16 = .text:0x80231984; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP17IRecordablePlayeri16 = .text:0x80231990; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP11IDisposablei16 = .text:0x8023199C; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP14ITrafficCenteri16 = .text:0x802319A8; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP10IRoadBlocki16 = .text:0x802319B4; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP8IPursuiti16 = .text:0x802319C0; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP10IRigidBodyi16 = .text:0x802319CC; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP11ISimpleBodyi16 = .text:0x802319D8; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP14ICollisionBodyi16 = .text:0x802319E4; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP13IVehicleCachei16 = .text:0x802319F0; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP12IInputPlayeri16 = .text:0x802319FC; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP10IExplosioni16 = .text:0x80231A08; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP6IModeli16 = .text:0x80231A14; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZPQ23Sim7IEntityi16 = .text:0x80231A20; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP7IPlayeri16 = .text:0x80231A2C; // type:function size:0xC scope:global +_GLOBAL_.I.__16SmackableTriggerP8HMODEL__bRCQ25UMath7Matrix4RCQ25UMath7Vector3Ui = .text:0x80231A38; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x80231A64; // type:label scope:local +Construct__9RigidBodyRC14BehaviorParams = .text:0x80231A64; // type:function size:0x104 scope:global +__Q29RigidBody8Volatile = .text:0x80231B68; // type:function size:0x18 scope:global +__Q29RigidBody4MeshRC10SimSurfacePCQ25UMath7Vector4UiG6UCrc32b = .text:0x80231B80; // type:function size:0xA0 scope:global +_._Q29RigidBody4Mesh = .text:0x80231C20; // type:function size:0x80 scope:global +Enable__Q29RigidBody4Meshb = .text:0x80231CA0; // type:function size:0x28 scope:global +Create__Q29RigidBody8MeshListRC10SimSurfacePCQ25UMath7Vector4UiG6UCrc32b = .text:0x80231CC8; // type:function size:0xA4 scope:global +Create__Q29RigidBody8PrimListRCQ25UMath7Vector3T1RC10SimSurfaceQ48Dynamics9Collision8Geometry5ShapeRCQ25UMath7Vector4UiRC6UCrc32 = .text:0x80231D6C; // type:function size:0x180 scope:global +Enable__Q29RigidBody9Primitiveb = .text:0x80231EEC; // type:function size:0x28 scope:global +Prepare__Q29RigidBody9PrimitiveRCQ29RigidBody8Volatile = .text:0x80231F14; // type:function size:0x4C scope:global +SetCollision__CQ29RigidBody9PrimitiveRCQ29RigidBody8VolatileRQ38Dynamics9Collision8Geometry = .text:0x80231F60; // type:function size:0x230 scope:global +InitRigidBodySystem__9RigidBody = .text:0x80232190; // type:function size:0x4 scope:global +ShutdownRigidBodySystem__9RigidBody = .text:0x80232194; // type:function size:0x4 scope:global +Add__6RBGridUiR9RigidBodyRCQ25UMath7Vector3f = .text:0x80232198; // type:function size:0x5D0 scope:global +Remove__6RBGridP6RBGrid = .text:0x80232768; // type:function size:0x2C scope:global +__9RigidBodyRC14BehaviorParamsRC15RBComplexParams = .text:0x80232794; // type:function size:0xB40 scope:global +_._9RigidBody = .text:0x802332D4; // type:function size:0x4E4 scope:global +Reset__9RigidBody = .text:0x802337B8; // type:function size:0x38 scope:global +SetOrientation__9RigidBodyRCQ25UMath7Matrix4 = .text:0x802337F0; // type:function size:0x43C scope:global +SetOrientation__9RigidBodyRCQ25UMath7Vector4 = .text:0x80233C2C; // type:function size:0x498 scope:global +DistributeMass__9RigidBody = .text:0x802340C4; // type:function size:0xEC scope:global +EnableCollisionGeometries__9RigidBodyG6UCrc32b = .text:0x802341B0; // type:function size:0xB0 scope:global +SetPosition__9RigidBodyRCQ25UMath7Vector3 = .text:0x80234260; // type:function size:0x28 scope:global +SetLinearVelocity__9RigidBodyRCQ25UMath7Vector3 = .text:0x80234288; // type:function size:0x28 scope:global +SetAngularVelocity__9RigidBodyRCQ25UMath7Vector3 = .text:0x802342B0; // type:function size:0x28 scope:global +SetRadius__9RigidBodyf = .text:0x802342D8; // type:function size:0x10 scope:global +AttachedToWorld__9RigidBodybf = .text:0x802342E8; // type:function size:0x38 scope:global +Detach__9RigidBody = .text:0x80234320; // type:function size:0xBC scope:global +SetInertiaTensor__9RigidBodyRCQ25UMath7Vector3 = .text:0x802343DC; // type:function size:0x24 scope:global +SetMass__9RigidBodyf = .text:0x80234400; // type:function size:0x6C scope:global +AddCollisionPrimitive__9RigidBodyG6UCrc32RCQ25UMath7Vector3fT2RC10SimSurfaceRCQ25UMath7Vector4Q217CollisionGeometry10BoundFlags = .text:0x8023446C; // type:function size:0xB8 scope:global +AddCollisionMesh__9RigidBodyG6UCrc32PCQ25UMath7Vector4UiRC10SimSurfaceQ217CollisionGeometry10BoundFlagsb = .text:0x80234524; // type:function size:0x38 scope:global +CreateGeometries__9RigidBody = .text:0x8023455C; // type:function size:0x16C scope:global +PlaceObject__9RigidBodyRCQ25UMath7Matrix4RCQ25UMath7Vector3 = .text:0x802346C8; // type:function size:0xFC scope:global +GetOrientToGround__C9RigidBody = .text:0x802347C4; // type:function size:0x30 scope:global +GetPointVelocity__C9RigidBodyRCQ25UMath7Vector3RQ25UMath7Vector3 = .text:0x802347F4; // type:function size:0x88 scope:global +OnEndFrame__9RigidBodyf = .text:0x8023487C; // type:function size:0xE8 scope:global +DisableTriggering__9RigidBody = .text:0x80234964; // type:function size:0x18 scope:global +IsTriggering__C9RigidBody = .text:0x8023497C; // type:function size:0x24 scope:global +EnableTriggering__9RigidBody = .text:0x802349A0; // type:function size:0x18 scope:global +DisableModeling__9RigidBody = .text:0x802349B8; // type:function size:0x14 scope:global +EnableModeling__9RigidBody = .text:0x802349CC; // type:function size:0x78 scope:global +OnBeginFrame__9RigidBodyf = .text:0x80234A44; // type:function size:0xE4 scope:global +DoDrag__9RigidBody = .text:0x80234B28; // type:function size:0x37C scope:global +ConvertLocalToWorld__C9RigidBodyRQ25UMath7Vector3b = .text:0x80234EA4; // type:function size:0x68 scope:global +ConvertWorldToLocal__C9RigidBodyRQ25UMath7Vector3b = .text:0x80234F0C; // type:function size:0x124 scope:global +Resolve__9RigidBodyRCQ25UMath7Vector3T1 = .text:0x80235030; // type:function size:0x78 scope:global +ResolveTorque__9RigidBodyRCQ25UMath7Vector3 = .text:0x802350A8; // type:function size:0x64 scope:global +ResolveForce__9RigidBodyRCQ25UMath7Vector3 = .text:0x8023510C; // type:function size:0x64 scope:global +ResolveTorque__9RigidBodyRCQ25UMath7Vector3T1 = .text:0x80235170; // type:function size:0xB0 scope:global +ResolveForce__9RigidBodyRCQ25UMath7Vector3T1 = .text:0x80235220; // type:function size:0xC0 scope:global +Debug__9RigidBody = .text:0x802352E0; // type:function size:0x4 scope:global +DoIntegration__9RigidBodyf = .text:0x802352E4; // type:function size:0x7C4 scope:global +ResolveGroundCollision__9RigidBodyPC15CollisionPacketi = .text:0x80235AA8; // type:function size:0x550 scope:global +SetAnimating__9RigidBodyb = .text:0x80235FF8; // type:function size:0x38 scope:global +CanCollideWith__C9RigidBodyRC9RigidBody = .text:0x80236030; // type:function size:0x54 scope:global +CanCollideWithGround__C9RigidBody = .text:0x80236084; // type:function size:0x34 scope:global +DoInstanceCollision2d__9RigidBodyf = .text:0x802360B8; // type:function size:0x89C scope:global +ModifyCollision__9RigidBodyRC10SimSurfaceRCQ38Dynamics9Collision5PlaneRQ38Dynamics9Collision6Moment = .text:0x80236954; // type:function size:0x20 scope:global +IsImmobile__C9RigidBody = .text:0x80236974; // type:function size:0x44 scope:global +ModifyCollision__9RigidBodyRC9RigidBodyRCQ38Dynamics9Collision5PlaneRQ38Dynamics9Collision6Moment = .text:0x802369B8; // type:function size:0x110 scope:global +Separate__9RigidBodyR9RigidBodybT1T2RCQ25UMath7Vector3RQ25UMath7Vector3fT2 = .text:0x80236AC8; // type:function size:0x248 scope:global +ResolveObjectCollision__9RigidBodyR9RigidBodyT1RCQ29RigidBody9PrimitiveT3RCQ25UMath7Vector3T5fb = .text:0x80236D10; // type:function size:0xA5C scope:global +ResolveWorldOBBCollision__9RigidBodyRCQ25UMath7Vector3T1PQ33Sim9Collision4InfoPCQ38Dynamics9Collision8GeometryT1RC10SimSurfaceT6 = .text:0x8023776C; // type:function size:0x538 scope:global +ResolveWorldCollision__9RigidBodyRCQ25UMath7Vector3T1PQ33Sim9Collision4InfoPCQ26Attrib10CollectionRC10SimSurfaceRC8UVector3 = .text:0x80237CA4; // type:function size:0x450 scope:global +OnObjectOverlap__9RigidBodyR9RigidBodyT1f = .text:0x802380F4; // type:function size:0x1F8 scope:global +UpdateCollider__9RigidBody = .text:0x802382EC; // type:function size:0x98 scope:global +CanCollideWithWorld__C9RigidBody = .text:0x80238384; // type:function size:0x9C scope:global +OnWCollide__9RigidBodyRCQ213WCollisionMgr18WorldCollisionInfoRCQ25UMath7Vector3Pv = .text:0x80238420; // type:function size:0x234 scope:global +DoWorldCollisions__9RigidBodyf = .text:0x80238654; // type:function size:0xAC scope:global +DoBarrierCollision__9RigidBodyf = .text:0x80238700; // type:function size:0x20C scope:global +DoInstanceCollision__9RigidBodyf = .text:0x8023890C; // type:function size:0x38 scope:global +DoInstanceCollision3d__9RigidBodyf = .text:0x80238944; // type:function size:0x13C scope:global +DoObbCollision__9RigidBodyf = .text:0x80238A80; // type:function size:0x39C scope:global +ShouldSleep__C9RigidBody = .text:0x80238E1C; // type:function size:0x9C scope:global +Accelerate__9RigidBodyRCQ25UMath7Vector3f = .text:0x80238EB8; // type:function size:0x40 scope:global +AddCollisionSphere__9RigidBodyfRCQ25UMath7Vector3RC10SimSurfaceUiRC6UCrc32 = .text:0x80238EF8; // type:function size:0x64 scope:global +AddCollisionBox__9RigidBodyRCQ25UMath7Vector3T1RC10SimSurfaceRCQ25UMath7Vector4UiRC6UCrc32 = .text:0x80238F5C; // type:function size:0xBC scope:global +CanCollideWithObjects__C9RigidBody = .text:0x80239018; // type:function size:0x4C scope:global +OnTaskSimulate__9RigidBodyf = .text:0x80239064; // type:function size:0x4 scope:global +OnDebugDraw__9RigidBody = .text:0x80239068; // type:function size:0x4 scope:global +GetTriggerFlags__C9RigidBody = .text:0x8023906C; // type:function size:0x70 scope:global +PushSP__9RigidBodyPv = .text:0x802390DC; // type:function size:0x2C scope:global +PopSP__9RigidBody = .text:0x80239108; // type:function size:0x2C scope:global +Update__9RigidBodyf = .text:0x80239134; // type:function size:0x564 scope:global +Damp__9RigidBodyf = .text:0x80239698; // type:function size:0x84 scope:global +UpdateGrid__9RigidBodyRiT1 = .text:0x8023971C; // type:function size:0x130 scope:global +Get__9RigidBodyUi = .text:0x8023984C; // type:function size:0x38 scope:global +AssignSlot__9RigidBody = .text:0x80239884; // type:function size:0x30 scope:global +Construct__15SimpleRigidBodyRC14BehaviorParams = .text:0x802398B4; // type:function size:0xE4 scope:global +__Q215SimpleRigidBody8Volatile = .text:0x80239998; // type:function size:0x4 scope:global +__15SimpleRigidBodyRC14BehaviorParamsRC14RBSimpleParams = .text:0x8023999C; // type:function size:0x4A4 scope:global +_._15SimpleRigidBody = .text:0x80239E40; // type:function size:0x38C scope:global +GetOwner__C15SimpleRigidBody = .text:0x8023A1CC; // type:function size:0x8 scope:global +RecalcOrientMat__C15SimpleRigidBodyRQ25UMath7Matrix4 = .text:0x8023A1D4; // type:function size:0xE4 scope:global +GetForwardVector__C15SimpleRigidBodyRQ25UMath7Vector3 = .text:0x8023A2B8; // type:function size:0x70 scope:global +GetRightVector__C15SimpleRigidBodyRQ25UMath7Vector3 = .text:0x8023A328; // type:function size:0x70 scope:global +GetUpVector__C15SimpleRigidBodyRQ25UMath7Vector3 = .text:0x8023A398; // type:function size:0x70 scope:global +SetOrientation__15SimpleRigidBodyRCQ25UMath7Matrix4 = .text:0x8023A408; // type:function size:0x2C scope:global +SetOrientation__15SimpleRigidBodyRCQ25UMath7Vector4 = .text:0x8023A434; // type:function size:0x2C scope:global +GetScalarVelocity__C15SimpleRigidBody = .text:0x8023A460; // type:function size:0x30 scope:global +Accelerate__15SimpleRigidBodyRCQ25UMath7Vector3f = .text:0x8023A490; // type:function size:0x40 scope:global +ApplyFriction__15SimpleRigidBody = .text:0x8023A4D0; // type:function size:0x60 scope:global +OnDebugDraw__15SimpleRigidBody = .text:0x8023A530; // type:function size:0x4 scope:global +DoIntegration__15SimpleRigidBodyf = .text:0x8023A534; // type:function size:0x194 scope:global +DoSRBCollisions__15SimpleRigidBodyP15SimpleRigidBody = .text:0x8023A6C8; // type:function size:0x5E4 scope:global +DoRBCollisions__15SimpleRigidBodyf = .text:0x8023ACAC; // type:function size:0x5E4 scope:global +GetPointVelocity__C15SimpleRigidBodyRCQ25UMath7Vector3RQ25UMath7Vector3 = .text:0x8023B290; // type:function size:0x64 scope:global +PlaceObject__15SimpleRigidBodyRCQ25UMath7Matrix4RCQ25UMath7Vector3 = .text:0x8023B2F4; // type:function size:0xA8 scope:global +ConvertLocalToWorld__C15SimpleRigidBodyRQ25UMath7Vector3b = .text:0x8023B39C; // type:function size:0x58 scope:global +ConvertWorldToLocal__C15SimpleRigidBodyRQ25UMath7Vector3b = .text:0x8023B3F4; // type:function size:0x88 scope:global +Resolve__15SimpleRigidBodyRCQ25UMath7Vector3T1 = .text:0x8023B47C; // type:function size:0x38 scope:global +ResolveForce__15SimpleRigidBodyRCQ25UMath7Vector3 = .text:0x8023B4B4; // type:function size:0xAC scope:global +ResolveForce__15SimpleRigidBodyRCQ25UMath7Vector3T1 = .text:0x8023B560; // type:function size:0x38 scope:global +ResolveTorque__15SimpleRigidBodyRCQ25UMath7Vector3 = .text:0x8023B598; // type:function size:0x4 scope:global +GetTriggerFlags__C15SimpleRigidBody = .text:0x8023B59C; // type:function size:0x120 scope:global +Update__15SimpleRigidBodyfPv = .text:0x8023B6BC; // type:function size:0x230 scope:global +Get__15SimpleRigidBodyUi = .text:0x8023B8EC; // type:function size:0x38 scope:global +AssignSlot__15SimpleRigidBody = .text:0x8023B924; // type:function size:0x30 scope:global +Construct__9RBVehicleRC14BehaviorParams = .text:0x8023B954; // type:function size:0x104 scope:global +__9RBVehicleRC14BehaviorParamsRC15RBComplexParams = .text:0x8023BA58; // type:function size:0x30C scope:global +GetNumContactPoints__C9RBVehicle = .text:0x8023BD64; // type:function size:0x60 scope:global +IsInGroundContact__C9RBVehicle = .text:0x8023BDC4; // type:function size:0x78 scope:global +CanCollideWith__C9RBVehicleRC9RigidBody = .text:0x8023BE3C; // type:function size:0x38 scope:global +OnBeginFrame__9RBVehiclef = .text:0x8023BE74; // type:function size:0x268 scope:global +OnTaskSimulate__9RBVehiclef = .text:0x8023C0DC; // type:function size:0x164 scope:global +PlaceObject__9RBVehicleRCQ25UMath7Matrix4RCQ25UMath7Vector3 = .text:0x8023C240; // type:function size:0x38 scope:global +ShouldSleep__C9RBVehicle = .text:0x8023C278; // type:function size:0xC4 scope:global +ModifyCollision__9RBVehicleRC10SimSurfaceRCQ38Dynamics9Collision5PlaneRQ38Dynamics9Collision6Moment = .text:0x8023C33C; // type:function size:0x21C scope:global +ChooseReaction__C9RBVehicleRCQ38Dynamics9Collision5Plane = .text:0x8023C558; // type:function size:0x14C scope:global +ModifyCollision__9RBVehicleRC9RigidBodyRCQ38Dynamics9Collision5PlaneRQ38Dynamics9Collision6Moment = .text:0x8023C6A4; // type:function size:0x4E8 scope:global +OnBehaviorChange__9RBVehicleRC6UCrc32 = .text:0x8023CB8C; // type:function size:0x70 scope:global +CanCollideWithGround__C9RBVehicle = .text:0x8023CBFC; // type:function size:0x104 scope:global +GetTriggerFlags__C9RBVehicle = .text:0x8023CD00; // type:function size:0xB4 scope:global +CanCollideWithWorld__C9RBVehicle = .text:0x8023CDB4; // type:function size:0x120 scope:global +Construct__9RBTractorRC14BehaviorParams = .text:0x8023CED4; // type:function size:0x104 scope:global +SetHitch__9RBTractorb = .text:0x8023CFD8; // type:function size:0x28C scope:global +ModifyCollision__9RBTractorRC9RigidBodyRCQ38Dynamics9Collision5PlaneRQ38Dynamics9Collision6Moment = .text:0x8023D264; // type:function size:0x68 scope:global +OnBehaviorChange__9RBTractorRC6UCrc32 = .text:0x8023D2CC; // type:function size:0x80 scope:global +OnQueryVehicleCache__C9RBTractorPC8IVehiclePC13IVehicleCache = .text:0x8023D34C; // type:function size:0x4C scope:global +OnRemovedVehicleCache__9RBTractorP8IVehicle = .text:0x8023D398; // type:function size:0x54 scope:global +OnOwnerDetached__9RBTractorP11IAttachable = .text:0x8023D3EC; // type:function size:0x9C scope:global +CanCollideWith__C9RBTractorRC9RigidBody = .text:0x8023D488; // type:function size:0x70 scope:global +UpdateTrailer__9RBTractorf = .text:0x8023D4F8; // type:function size:0x388 scope:global +OnTask__9RBTractorP10HSIMTASK__f = .text:0x8023D880; // type:function size:0x84 scope:global +PlaceObject__9RBTractorRCQ25UMath7Matrix4RCQ25UMath7Vector3 = .text:0x8023D904; // type:function size:0x70 scope:global +_._9RBTractor = .text:0x8023D974; // type:function size:0x29C scope:global +__9RBTractorRC14BehaviorParamsRC15RBComplexParams = .text:0x8023DC10; // type:function size:0x440 scope:global +Pose__9RBTractor = .text:0x8023E050; // type:function size:0x130 scope:global +__9RBTrailerRC14BehaviorParamsRC15RBComplexParams = .text:0x8023E180; // type:function size:0x9C scope:global +Construct__9RBTrailerRC14BehaviorParams = .text:0x8023E21C; // type:function size:0x104 scope:global +ModifyCollision__9RBTrailerRC9RigidBodyRCQ38Dynamics9Collision5PlaneRQ38Dynamics9Collision6Moment = .text:0x8023E320; // type:function size:0x68 scope:global +Construct__5RBCopRC14BehaviorParams = .text:0x8023E388; // type:function size:0x104 scope:global +__5RBCopRC14BehaviorParamsRC15RBComplexParams = .text:0x8023E48C; // type:function size:0x9C scope:global +_._5RBCop = .text:0x8023E528; // type:function size:0xC8 scope:global +ModifyCollision__5RBCopRC9RigidBodyRCQ38Dynamics9Collision5PlaneRQ38Dynamics9Collision6Moment = .text:0x8023E5F0; // type:function size:0x20 scope:global +ModifyCollision__5RBCopRC10SimSurfaceRCQ38Dynamics9Collision5PlaneRQ38Dynamics9Collision6Moment = .text:0x8023E610; // type:function size:0x20 scope:global +__7EffectsRC14BehaviorParams = .text:0x8023E630; // type:function size:0x154 scope:global +_._7Effects = .text:0x8023E784; // type:function size:0x108 scope:global +Reset__7Effects = .text:0x8023E88C; // type:function size:0x24 scope:global +OnPause__7Effects = .text:0x8023E8B0; // type:function size:0x24 scope:global +OnTaskSimulate__7Effectsf = .text:0x8023E8D4; // type:function size:0x38 scope:global +OnBehaviorChange__7EffectsRC6UCrc32 = .text:0x8023E90C; // type:function size:0x58 scope:global +DoScrape__7EffectsRC10SimSurfaceRCQ25UMath7Vector3N22UiP10HSIMABLE__ = .text:0x8023E964; // type:function size:0x3B4 scope:global +DoHit__7EffectsRC10SimSurfacefRCQ25UMath7Vector3N23UiP10HSIMABLE__ = .text:0x8023ED18; // type:function size:0x3CC scope:global +OnScrapeWorld__7EffectsRC10SimSurfaceRCQ25UMath7Vector3N22 = .text:0x8023F0E4; // type:function size:0x2C scope:global +OnHitWorld__7EffectsRC10SimSurfacefRCQ25UMath7Vector3N23 = .text:0x8023F110; // type:function size:0x2C scope:global +OnScrapeObject__7EffectsRC10SimSurfaceRCQ25UMath7Vector3N22P10HSIMABLE__ = .text:0x8023F13C; // type:function size:0x2C scope:global +OnHitObject__7EffectsRC10SimSurfacefRCQ25UMath7Vector3N23P10HSIMABLE__ = .text:0x8023F168; // type:function size:0x2C scope:global +OnScrapeGround__7EffectsRC10SimSurfaceRCQ25UMath7Vector3N22 = .text:0x8023F194; // type:function size:0x2C scope:global +OnHitGround__7EffectsRC10SimSurfacefRCQ25UMath7Vector3N23 = .text:0x8023F1C0; // type:function size:0x2C scope:global +OnCollision__7EffectsRCQ33Sim9Collision4Info = .text:0x8023F1EC; // type:function size:0x280 scope:global +__14EffectsVehicleRC14BehaviorParams = .text:0x8023F46C; // type:function size:0x54 scope:global +__10EffectsCarRC14BehaviorParams = .text:0x8023F4C0; // type:function size:0x6C scope:global +OnBehaviorChange__10EffectsCarRC6UCrc32 = .text:0x8023F52C; // type:function size:0x68 scope:global +OnHitGround__10EffectsCarRC10SimSurfacefRCQ25UMath7Vector3N23 = .text:0x8023F594; // type:function size:0x1D4 scope:global +OnScrapeGround__10EffectsCarRC10SimSurfaceRCQ25UMath7Vector3N22 = .text:0x8023F768; // type:function size:0x1B4 scope:global +__13EffectsPlayerRC14BehaviorParams = .text:0x8023F91C; // type:function size:0x54 scope:global +__16EffectsSmackableRC14BehaviorParams = .text:0x8023F970; // type:function size:0x54 scope:global +OnCollision__16EffectsSmackableRCQ33Sim9Collision4Info = .text:0x8023F9C4; // type:function size:0xEC scope:global +__15EffectsFragmentRC14BehaviorParams = .text:0x8023FAB0; // type:function size:0x54 scope:global +Construct__13DamageVehicleRC14BehaviorParams = .text:0x8023FB04; // type:function size:0xB4 scope:global +__13DamageVehicleRC14BehaviorParamsRC12DamageParams = .text:0x8023FBB8; // type:function size:0x344 scope:global +ResetParts__13DamageVehicle = .text:0x8023FEFC; // type:function size:0x80 scope:global +OnBehaviorChange__13DamageVehicleRC6UCrc32 = .text:0x8023FF7C; // type:function size:0xA4 scope:global +_._13DamageVehicle = .text:0x80240020; // type:function size:0x14C scope:global +OnCollision__13DamageVehicleRCQ33Sim9Collision4Info = .text:0x8024016C; // type:function size:0x2C8 scope:global +SetDynamicData__13DamageVehiclePCQ214EventSequencer6SystemP16EventDynamicData = .text:0x80240434; // type:function size:0x78 scope:global +GetDamageRecord__C13DamageVehicleQ210DamageZone2ID = .text:0x802404AC; // type:function size:0xEC scope:global +OnImpact__13DamageVehicleRCQ25UMath7Vector3T1ffRC10SimSurfaceP8ISimable = .text:0x80240598; // type:function size:0x684 scope:global +OnTaskSimulate__13DamageVehiclef = .text:0x80240C1C; // type:function size:0x64 scope:global +Reset__13DamageVehicle = .text:0x80240C80; // type:function size:0x10 scope:global +Destroy__13DamageVehicle = .text:0x80240C90; // type:function size:0xB8 scope:global +ResetDamage__13DamageVehicle = .text:0x80240D48; // type:function size:0x16C scope:global +SetShockForce__13DamageVehiclef = .text:0x80240EB4; // type:function size:0xC8 scope:global +SetInShock__13DamageVehiclef = .text:0x80240F7C; // type:function size:0x6C scope:global +Construct__11DamageRacerRC14BehaviorParams = .text:0x80240FE8; // type:function size:0xB4 scope:global +__11DamageRacerRC14BehaviorParamsRC12DamageParams = .text:0x8024109C; // type:function size:0x230 scope:global +_._11DamageRacer = .text:0x802412CC; // type:function size:0x1D0 scope:global +GetTireDamage__C11DamageRacerUi = .text:0x8024149C; // type:function size:0x1C scope:global +GetNumBlowouts__C11DamageRacer = .text:0x802414B8; // type:function size:0x2C scope:global +Puncture__11DamageRacerUi = .text:0x802414E4; // type:function size:0xB0 scope:global +IsLightDamaged__C11DamageRacerQ29VehicleFX2ID = .text:0x80241594; // type:function size:0x94 scope:global +GetZoneDamage__C11DamageRacer = .text:0x80241628; // type:function size:0x60 scope:global +CanDamageVisuals__C11DamageRacer = .text:0x80241688; // type:function size:0x2C scope:global +OnTaskSimulate__11DamageRacerf = .text:0x802416B4; // type:function size:0xC4 scope:global +OnBehaviorChange__11DamageRacerRC6UCrc32 = .text:0x80241778; // type:function size:0x60 scope:global +ResetDamage__11DamageRacer = .text:0x802417D8; // type:function size:0x4C scope:global +Construct__14DamageDragsterRC14BehaviorParams = .text:0x80241824; // type:function size:0xB4 scope:global +__14DamageDragsterRC14BehaviorParamsRC12DamageParams = .text:0x802418D8; // type:function size:0x84 scope:global +CheckTotaling__14DamageDragsterRCQ33Sim9Collision4Info = .text:0x8024195C; // type:function size:0x18C scope:global +OnCollision__14DamageDragsterRCQ33Sim9Collision4Info = .text:0x80241AE8; // type:function size:0x3C scope:global +Construct__10DamageHeliRC14BehaviorParams = .text:0x80241B24; // type:function size:0xB4 scope:global +__10DamageHeliRC14BehaviorParamsRC12DamageParams = .text:0x80241BD8; // type:function size:0x84 scope:global +_._10DamageHeli = .text:0x80241C5C; // type:function size:0xA4 scope:global +DoAutoDestruct__10DamageHeli = .text:0x80241D00; // type:function size:0x4 scope:global +Reset__10DamageHeli = .text:0x80241D04; // type:function size:0x30 scope:global +OnTaskSimulate__10DamageHelif = .text:0x80241D34; // type:function size:0x44 scope:global +Construct__12DamageCopCarRC14BehaviorParams = .text:0x80241D78; // type:function size:0xB4 scope:global +__12DamageCopCarRC14BehaviorParamsRC12DamageParams = .text:0x80241E2C; // type:function size:0xC0 scope:global +_._12DamageCopCar = .text:0x80241EEC; // type:function size:0xB0 scope:global +ResetDamage__12DamageCopCar = .text:0x80241F9C; // type:function size:0x38 scope:global +OnTask__12DamageCopCarP10HSIMTASK__f = .text:0x80241FD4; // type:function size:0xCC scope:global +CheckUpright__12DamageCopCarf = .text:0x802420A0; // type:function size:0x27C scope:global +OnImpact__12DamageCopCarRCQ25UMath7Vector3T1ffRC10SimSurfaceP8ISimable = .text:0x8024231C; // type:function size:0x130 scope:global +Construct__6PInputRC14BehaviorParams = .text:0x8024244C; // type:function size:0x44 scope:global +__6PInputRC14BehaviorParams = .text:0x80242490; // type:function size:0xB8 scope:global +_._6PInput = .text:0x80242548; // type:function size:0xA8 scope:global +OnTaskSimulate__6PInputf = .text:0x802425F0; // type:function size:0x4 scope:global +Reset__6PInput = .text:0x802425F4; // type:function size:0x38 scope:global +ClearInput__6PInput = .text:0x8024262C; // type:function size:0xB0 scope:global +Construct__11InputPlayerRC14BehaviorParams = .text:0x802426DC; // type:function size:0x44 scope:global +__11InputPlayerRC14BehaviorParams = .text:0x80242720; // type:function size:0x23C scope:global +OnBehaviorChange__11InputPlayerRC6UCrc32 = .text:0x8024295C; // type:function size:0x58 scope:global +_._11InputPlayer = .text:0x802429B4; // type:function size:0x1C4 scope:global +Reset__11InputPlayer = .text:0x80242B78; // type:function size:0x4C scope:global +ClearInput__11InputPlayer = .text:0x80242BC4; // type:function size:0x58 scope:global +FlushInput__11InputPlayer = .text:0x80242C1C; // type:function size:0x24 scope:global +OnTaskSimulate__11InputPlayerf = .text:0x80242C40; // type:function size:0x140 scope:global +BlockInput__11InputPlayerb = .text:0x80242D80; // type:function size:0x50 scope:global +FetchInput__11InputPlayer = .text:0x80242DD0; // type:function size:0x87C scope:global +DoAutoBraking__11InputPlayerff = .text:0x8024364C; // type:function size:0x1B0 scope:global +DoShifting__11InputPlayeri = .text:0x802437FC; // type:function size:0x19C scope:global +DoAutoReverse__11InputPlayerff = .text:0x80243998; // type:function size:0x1B4 scope:global +IsAutomaticShift__C11InputPlayer = .text:0x80243B4C; // type:function size:0xF0 scope:global +__15InputPlayerDragRC14BehaviorParams = .text:0x80243C3C; // type:function size:0x60 scope:global +FetchInput__15InputPlayerDrag = .text:0x80243C9C; // type:function size:0x20 scope:global +OnAction__15InputPlayerDragRC9ActionRef = .text:0x80243CBC; // type:function size:0xE0 scope:global +__8InputNISRC14BehaviorParams = .text:0x80243D9C; // type:function size:0x54 scope:global +__7ChassisRC14BehaviorParams = .text:0x80243DF0; // type:function size:0x2B4 scope:global +GuessCompression__C7ChassisUif = .text:0x802440A4; // type:function size:0x4C scope:global +GetRenderMotion__C7Chassis = .text:0x802440F0; // type:function size:0xC scope:global +GetRideHeight__C7ChassisUi = .text:0x802440FC; // type:function size:0x20 scope:global +CalculateUndersteerFactor__C7Chassis = .text:0x8024411C; // type:function size:0x19C scope:global +ComputeMaxSlip__C7ChassisRCQ27Chassis5State = .text:0x802442B8; // type:function size:0x78 scope:global +DoTireHeat__7ChassisRCQ27Chassis5State = .text:0x80244330; // type:function size:0x120 scope:global +CalculateOversteerFactor__C7Chassis = .text:0x80244450; // type:function size:0x13C scope:global +OnTaskSimulate__7Chassisf = .text:0x8024458C; // type:function size:0x4 scope:global +ComputeLateralGripScale__C7ChassisRCQ27Chassis5State = .text:0x80244590; // type:function size:0xA0 scope:global +ComputeTractionScale__C7ChassisRCQ27Chassis5State = .text:0x80244630; // type:function size:0xC0 scope:global +DoSleep__7ChassisRCQ27Chassis5State = .text:0x802446F0; // type:function size:0x40C scope:global +OnBehaviorChange__7ChassisRC6UCrc32 = .text:0x80244AFC; // type:function size:0x130 scope:global +ComputeAckerman__C7ChassisfRCQ27Chassis5StatePQ25UMath7Vector4T3 = .text:0x80244C2C; // type:function size:0x1EC scope:global +SetCOG__7Chassisff = .text:0x80244E18; // type:function size:0x174 scope:global +ComputeState__C7ChassisfRQ27Chassis5State = .text:0x80244F8C; // type:function size:0x654 scope:global +DoAerodynamics__7ChassisRCQ27Chassis5StateffffPCQ27Physics7Tunings = .text:0x802455E0; // type:function size:0x380 scope:global +DoJumpStabilizer__7ChassisRCQ27Chassis5State = .text:0x80245960; // type:function size:0x5B8 scope:global +__Q215SuspensionRacer4TirefiPCQ36Attrib3Gen5tiresPCQ36Attrib3Gen6brakes = .text:0x80245F18; // type:function size:0x118 scope:global +BeginFrame__Q215SuspensionRacer4Tireffff = .text:0x80246030; // type:function size:0x7C scope:global +EndFrame__Q215SuspensionRacer4Tiref = .text:0x802460AC; // type:function size:0x4 scope:global +ComputeLateralForce__Q215SuspensionRacer4Tireff = .text:0x802460B0; // type:function size:0x178 scope:global +GetPilotFactor__Q215SuspensionRacer4Tiref = .text:0x80246228; // type:function size:0xA8 scope:global +CheckForBrakeLock__Q215SuspensionRacer4Tiref = .text:0x802462D0; // type:function size:0xE0 scope:global +CheckSign__Q215SuspensionRacer4Tire = .text:0x802463B0; // type:function size:0x9C scope:global +UpdateFree__Q215SuspensionRacer4Tiref = .text:0x8024644C; // type:function size:0x134 scope:global +UpdateLoaded__Q215SuspensionRacer4Tirefffff = .text:0x80246580; // type:function size:0x780 scope:global +Construct__15SuspensionRacerRC14BehaviorParams = .text:0x80246D00; // type:function size:0xB4 scope:global +__15SuspensionRacerRC14BehaviorParamsRC16SuspensionParams = .text:0x80246DB4; // type:function size:0x754 scope:global +_._15SuspensionRacer = .text:0x80247508; // type:function size:0x134 scope:global +CreateTires__15SuspensionRacer = .text:0x8024763C; // type:function size:0x218 scope:global +OnBehaviorChange__15SuspensionRacerRC6UCrc32 = .text:0x80247854; // type:function size:0xD8 scope:global +OnAttributeChange__15SuspensionRacerPCQ26Attrib10CollectionUi = .text:0x8024792C; // type:function size:0x4 scope:global +GetRideHeight__C15SuspensionRacerUi = .text:0x80247930; // type:function size:0x70 scope:global +GetWheelAngularVelocity__C15SuspensionRaceri = .text:0x802479A0; // type:function size:0x6C scope:global +DoAerobatics__15SuspensionRacerRQ27Chassis5State = .text:0x80247A0C; // type:function size:0x20 scope:global +OnTaskSimulate__15SuspensionRacerf = .text:0x80247A2C; // type:function size:0x39C scope:global +MatchSpeed__15SuspensionRacerf = .text:0x80247DC8; // type:function size:0x90 scope:global +GetWheelCenterPos__C15SuspensionRacerUi = .text:0x80247E58; // type:function size:0xE0 scope:global +Reset__15SuspensionRacer = .text:0x80247F38; // type:function size:0x1F4 scope:global +OnCollision__15SuspensionRacerRCQ33Sim9Collision4Info = .text:0x8024812C; // type:function size:0x3CC scope:global +DoHumanSteering__15SuspensionRacerRQ27Chassis5State = .text:0x802484F8; // type:function size:0x1F4 scope:global +CalculateMaxSteering__15SuspensionRacerRQ27Chassis5StateQ214ISteeringWheel12SteeringType = .text:0x802486EC; // type:function size:0x298 scope:global +CalculateSteeringSpeed__15SuspensionRacerRQ27Chassis5State = .text:0x80248984; // type:function size:0xB0 scope:global +DoAISteering__15SuspensionRacerRQ27Chassis5State = .text:0x80248A34; // type:function size:0x44 scope:global +DoSteering__15SuspensionRacerRQ27Chassis5StateRQ25UMath7Vector3T2 = .text:0x80248A78; // type:function size:0xE4 scope:global +Update__Q215SuspensionRacer7Burnoutfffif = .text:0x80248B5C; // type:function size:0x2EC scope:global +DoWallSteer__15SuspensionRacerRQ27Chassis5State = .text:0x80248E48; // type:function size:0x1BC scope:global +YawFrictionBoost__Ffffff = .text:0x80249004; // type:function size:0xAC scope:global +CalcYawControlLimit__C15SuspensionRacerf = .text:0x802490B0; // type:function size:0x1F0 scope:global +DoDrifting__15SuspensionRacerRCQ27Chassis5State = .text:0x802492A0; // type:function size:0x614 scope:global +TuneWheelParams__15SuspensionRacerRQ27Chassis5State = .text:0x802498B4; // type:function size:0x5F0 scope:global +CalcSplit__Q215SuspensionRacer12Differentialb = .text:0x80249EA4; // type:function size:0x168 scope:global +DoDriveForces__15SuspensionRacerRQ27Chassis5State = .text:0x8024A00C; // type:function size:0x55C scope:global +DoWheelForces__15SuspensionRacerRQ27Chassis5State = .text:0x8024A568; // type:function size:0xC54 scope:global +OnDebugDraw__15SuspensionRacer = .text:0x8024B1BC; // type:function size:0x4 scope:global +__Q217SuspensionTraffic4TirefiPCQ36Attrib3Gen5tiresPCQ36Attrib3Gen6brakes = .text:0x8024B1C0; // type:function size:0xC0 scope:global +BeginFrame__Q217SuspensionTraffic4Tire = .text:0x8024B280; // type:function size:0x3C scope:global +EndFrame__Q217SuspensionTraffic4Tiref = .text:0x8024B2BC; // type:function size:0x4 scope:global +UpdateFree__Q217SuspensionTraffic4Tiref = .text:0x8024B2C0; // type:function size:0x50 scope:global +UpdateLoaded__Q217SuspensionTraffic4Tireffff = .text:0x8024B310; // type:function size:0x358 scope:global +Construct__17SuspensionTrafficRC14BehaviorParams = .text:0x8024B668; // type:function size:0xB4 scope:global +__17SuspensionTrafficRC14BehaviorParamsRC16SuspensionParams = .text:0x8024B71C; // type:function size:0x834 scope:global +_._17SuspensionTraffic = .text:0x8024BF50; // type:function size:0xFC scope:global +OnBehaviorChange__17SuspensionTrafficRC6UCrc32 = .text:0x8024C04C; // type:function size:0xD8 scope:global +OnTaskSimulate__17SuspensionTrafficf = .text:0x8024C124; // type:function size:0x150 scope:global +GetWheelCenterPos__C17SuspensionTrafficUi = .text:0x8024C274; // type:function size:0xE0 scope:global +MatchSpeed__17SuspensionTrafficf = .text:0x8024C354; // type:function size:0x2C scope:global +Reset__17SuspensionTraffic = .text:0x8024C380; // type:function size:0x104 scope:global +DoSimpleAero__17SuspensionTrafficRQ27Chassis5State = .text:0x8024C484; // type:function size:0x88 scope:global +DoHP2Steering__17SuspensionTrafficRQ27Chassis5State = .text:0x8024C50C; // type:function size:0x20 scope:global +DoSteering__17SuspensionTrafficRQ27Chassis5StateRQ25UMath7Vector3T2 = .text:0x8024C52C; // type:function size:0xA0 scope:global +DoDriveForces__17SuspensionTrafficRQ27Chassis5State = .text:0x8024C5CC; // type:function size:0xF0 scope:global +DoWheelForces__17SuspensionTrafficRQ27Chassis5State = .text:0x8024C6BC; // type:function size:0xAA4 scope:global +__Q216SuspensionSimple4TirefiPCQ36Attrib3Gen5tiresPCQ36Attrib3Gen6brakes = .text:0x8024D160; // type:function size:0xE4 scope:global +BeginFrame__Q216SuspensionSimple4Tirefff = .text:0x8024D244; // type:function size:0x50 scope:global +EndFrame__Q216SuspensionSimple4Tiref = .text:0x8024D294; // type:function size:0x4 scope:global +UpdateFree__Q216SuspensionSimple4Tiref = .text:0x8024D298; // type:function size:0x88 scope:global +UpdateLoaded__Q216SuspensionSimple4Tireffffff = .text:0x8024D320; // type:function size:0x7B4 scope:global +Construct__16SuspensionSimpleRC14BehaviorParams = .text:0x8024DAD4; // type:function size:0xB4 scope:global +__16SuspensionSimpleRC14BehaviorParamsRC16SuspensionParams = .text:0x8024DB88; // type:function size:0x74C scope:global +_._16SuspensionSimple = .text:0x8024E2D4; // type:function size:0x11C scope:global +OnAttributeChange__16SuspensionSimplePCQ26Attrib10CollectionUi = .text:0x8024E3F0; // type:function size:0x4 scope:global +CreateTires__16SuspensionSimple = .text:0x8024E3F4; // type:function size:0x21C scope:global +OnBehaviorChange__16SuspensionSimpleRC6UCrc32 = .text:0x8024E610; // type:function size:0x108 scope:global +MatchSpeed__16SuspensionSimplef = .text:0x8024E718; // type:function size:0x60 scope:global +DoAerobatics__16SuspensionSimpleRQ27Chassis5State = .text:0x8024E778; // type:function size:0x2C scope:global +OnTaskSimulate__16SuspensionSimplef = .text:0x8024E7A4; // type:function size:0x440 scope:global +GetWheelCenterPos__C16SuspensionSimpleUi = .text:0x8024EBE4; // type:function size:0xE0 scope:global +Reset__16SuspensionSimple = .text:0x8024ECC4; // type:function size:0x18C scope:global +OnCollision__16SuspensionSimpleRCQ33Sim9Collision4Info = .text:0x8024EE50; // type:function size:0x1C0 scope:global +DoSteering__16SuspensionSimpleRQ27Chassis5StateRQ25UMath7Vector3T2 = .text:0x8024F010; // type:function size:0x124 scope:global +DoWallSteer__16SuspensionSimpleRQ27Chassis5State = .text:0x8024F134; // type:function size:0x124 scope:global +DoDriveForces__16SuspensionSimpleRQ27Chassis5State = .text:0x8024F258; // type:function size:0x1DC scope:global +DoWheelForces__16SuspensionSimpleRQ27Chassis5State = .text:0x8024F434; // type:function size:0xB2C scope:global +__Q217SuspensionTrailer4TirefiPCQ36Attrib3Gen5tiresPCQ36Attrib3Gen6brakes = .text:0x8024FF60; // type:function size:0xC4 scope:global +BeginFrame__Q217SuspensionTrailer4Tire = .text:0x80250024; // type:function size:0x3C scope:global +EndFrame__Q217SuspensionTrailer4Tiref = .text:0x80250060; // type:function size:0x4 scope:global +UpdateFree__Q217SuspensionTrailer4Tiref = .text:0x80250064; // type:function size:0x4C scope:global +UpdateLoaded__Q217SuspensionTrailer4Tireffff = .text:0x802500B0; // type:function size:0x348 scope:global +Construct__17SuspensionTrailerRC14BehaviorParams = .text:0x802503F8; // type:function size:0xB4 scope:global +__17SuspensionTrailerRC14BehaviorParamsRC16SuspensionParams = .text:0x802504AC; // type:function size:0x71C scope:global +_._17SuspensionTrailer = .text:0x80250BC8; // type:function size:0xF0 scope:global +OnBehaviorChange__17SuspensionTrailerRC6UCrc32 = .text:0x80250CB8; // type:function size:0xC0 scope:global +MatchSpeed__17SuspensionTrailerf = .text:0x80250D78; // type:function size:0x2C scope:global +ComputeState__C17SuspensionTrailerfRQ27Chassis5State = .text:0x80250DA4; // type:function size:0x188 scope:global +OnTaskSimulate__17SuspensionTrailerf = .text:0x80250F2C; // type:function size:0x114 scope:global +GetWheelCenterPos__C17SuspensionTrailerUi = .text:0x80251040; // type:function size:0xE0 scope:global +Reset__17SuspensionTrailer = .text:0x80251120; // type:function size:0x114 scope:global +DoSimpleAero__17SuspensionTrailerRQ27Chassis5State = .text:0x80251234; // type:function size:0x88 scope:global +DoWheelForces__17SuspensionTrailerRQ27Chassis5State = .text:0x802512BC; // type:function size:0x878 scope:global +__Q216SuspensionSpline4Tiref = .text:0x80251B34; // type:function size:0x8C scope:global +BeginFrame__Q216SuspensionSpline4Tire = .text:0x80251BC0; // type:function size:0x34 scope:global +EndFrame__Q216SuspensionSpline4Tiref = .text:0x80251BF4; // type:function size:0x4 scope:global +UpdateFree__Q216SuspensionSpline4Tiref = .text:0x80251BF8; // type:function size:0x24 scope:global +UpdateLoaded__Q216SuspensionSpline4Tireffff = .text:0x80251C1C; // type:function size:0xA0 scope:global +Construct__16SuspensionSplineRC14BehaviorParams = .text:0x80251CBC; // type:function size:0xB4 scope:global +__16SuspensionSplineRC14BehaviorParamsRC16SuspensionParams = .text:0x80251D70; // type:function size:0x80C scope:global +_._16SuspensionSpline = .text:0x8025257C; // type:function size:0x114 scope:global +OnBehaviorChange__16SuspensionSplineRC6UCrc32 = .text:0x80252690; // type:function size:0xD8 scope:global +OnTaskSimulate__16SuspensionSplinef = .text:0x80252768; // type:function size:0x330 scope:global +RestoreState__16SuspensionSpline = .text:0x80252A98; // type:function size:0xB4 scope:global +GetWheelBase__16SuspensionSplinePfT1 = .text:0x80252B4C; // type:function size:0x84 scope:global +NISCarTweaks__16SuspensionSplinef = .text:0x80252BD0; // type:function size:0x2A4 scope:global +SetNISPosition__16SuspensionSplineRCQ25UMath7Matrix4bf = .text:0x80252E74; // type:function size:0x7AC scope:global +GetWheelCenterPos__C16SuspensionSplineUi = .text:0x80253620; // type:function size:0xE0 scope:global +MatchSpeed__16SuspensionSplinef = .text:0x80253700; // type:function size:0x4C scope:global +Reset__16SuspensionSpline = .text:0x8025374C; // type:function size:0x180 scope:global +DoSteering__16SuspensionSplineRQ27Chassis5StateRQ25UMath7Vector3T2 = .text:0x802538CC; // type:function size:0x190 scope:global +DoWheelForces__16SuspensionSplineRQ27Chassis5State = .text:0x80253A5C; // type:function size:0xB54 scope:global +Construct__11EngineRacerRC14BehaviorParams = .text:0x802545B0; // type:function size:0x44 scope:global +__11EngineRacerRC14BehaviorParams = .text:0x802545F4; // type:function size:0xA18 scope:global +_._11EngineRacer = .text:0x8025500C; // type:function size:0x1A0 scope:global +GetHorsePower__C11EngineRacer = .text:0x802551AC; // type:function size:0x6C scope:global +OnBehaviorChange__11EngineRacerRC6UCrc32 = .text:0x80255218; // type:function size:0xBC scope:global +Sabotage__11EngineRacerf = .text:0x802552D4; // type:function size:0x8C scope:global +Blow__11EngineRacer = .text:0x80255360; // type:function size:0x68 scope:global +OnAttributeChange__11EngineRacerPCQ26Attrib10CollectionUi = .text:0x802553C8; // type:function size:0x4 scope:global +Reset__11EngineRacer = .text:0x802553CC; // type:function size:0xA0 scope:global +GetEngineTorque__C11EngineRacerf = .text:0x8025546C; // type:function size:0x88 scope:global +GuessGear__C11EngineRacerf = .text:0x802554F4; // type:function size:0xD8 scope:global +GuessRPM__C11EngineRacerf6GearID = .text:0x802555CC; // type:function size:0x15C scope:global +MatchSpeed__11EngineRacerf = .text:0x80255728; // type:function size:0xC0 scope:global +GetBrakingTorque__C11EngineRacerff = .text:0x802557E8; // type:function size:0x224 scope:global +CalcShiftPoints__11EngineRacer = .text:0x80255A0C; // type:function size:0xC8 scope:global +AutoShift__11EngineRacer = .text:0x80255AD4; // type:function size:0x30C scope:global +FindShiftPotential__C11EngineRacer6GearIDf = .text:0x80255DE0; // type:function size:0x1A4 scope:global +UpdateShiftPotential__11EngineRacer6GearIDf = .text:0x80255F84; // type:function size:0x20 scope:global +SportShift__11EngineRacer6GearID = .text:0x80255FA4; // type:function size:0xD8 scope:global +OnGearChange__11EngineRacer6GearID = .text:0x8025607C; // type:function size:0x100 scope:global +DoGearChange__11EngineRacer6GearIDb = .text:0x8025617C; // type:function size:0xE0 scope:global +GetDifferentialAngularVelocity__C11EngineRacerb = .text:0x8025625C; // type:function size:0x228 scope:global +GetDriveWheelSlippage__C11EngineRacer = .text:0x80256484; // type:function size:0x13C scope:global +SetDifferentialAngularVelocity__11EngineRacerf = .text:0x802565C0; // type:function size:0x2E0 scope:global +CalcSpeedometer__C11EngineRacerfUi = .text:0x802568A0; // type:function size:0x70 scope:global +GetMaxSpeedometer__C11EngineRacer = .text:0x80256910; // type:function size:0xC0 scope:global +GetSpeedometer__C11EngineRacer = .text:0x802569D0; // type:function size:0x38 scope:global +LimitFreeWheels__11EngineRacerf = .text:0x80256A08; // type:function size:0x184 scope:global +Engine_SmoothRPM__Fb6GearIDffff = .text:0x80256B8C; // type:function size:0xAC scope:global +DoECU__11EngineRacer = .text:0x80256C38; // type:function size:0x164 scope:global +DoNos__11EngineRacerPCQ27Physics7Tuningsfb = .text:0x80256D9C; // type:function size:0x460 scope:global +DoInduction__11EngineRacerPCQ27Physics7Tuningsf = .text:0x802571FC; // type:function size:0x290 scope:global +DoThrottle__11EngineRacer = .text:0x8025748C; // type:function size:0x80 scope:global +DoShifting__11EngineRacerf = .text:0x8025750C; // type:function size:0x120 scope:global +OnTaskSimulate__11EngineRacerf = .text:0x8025762C; // type:function size:0xE7C scope:global +GetShiftPoint__C11EngineRacer6GearIDT1 = .text:0x802584A8; // type:function size:0x48 scope:global +__14EngineDragsterRC14BehaviorParams = .text:0x802584F0; // type:function size:0x148 scope:global +Construct__14EngineDragsterRC14BehaviorParams = .text:0x80258638; // type:function size:0x44 scope:global +Reset__14EngineDragster = .text:0x8025867C; // type:function size:0x44 scope:global +Repair__14EngineDragster = .text:0x802586C0; // type:function size:0x1C scope:global +Blow__14EngineDragster = .text:0x802586DC; // type:function size:0x4C scope:global +OnBehaviorChange__14EngineDragsterRC6UCrc32 = .text:0x80258728; // type:function size:0x60 scope:global +GetEngineTorque__C14EngineDragsterf = .text:0x80258788; // type:function size:0x100 scope:global +OnTaskSimulate__14EngineDragsterf = .text:0x80258888; // type:function size:0x16C scope:global +OnGearChange__14EngineDragster6GearID = .text:0x802589F4; // type:function size:0x194 scope:global +UpdateShiftPotential__14EngineDragster6GearIDf = .text:0x80258B88; // type:function size:0x238 scope:global +CalcPotentialShiftBonus__C14EngineDragsterf6GearIDT2 = .text:0x80258DC0; // type:function size:0x1C8 scope:global +ComputeEngineHeat__14EngineDragsterf = .text:0x80258F88; // type:function size:0x19C scope:global +Construct__12EngineSplineRC14BehaviorParams = .text:0x80259124; // type:function size:0x44 scope:global +__12EngineSplineRC14BehaviorParams = .text:0x80259168; // type:function size:0x968 scope:global +_._12EngineSpline = .text:0x80259AD0; // type:function size:0x140 scope:global +RestoreState__12EngineSpline = .text:0x80259C10; // type:function size:0x40 scope:global +GetHorsePower__C12EngineSpline = .text:0x80259C50; // type:function size:0x58 scope:global +OnBehaviorChange__12EngineSplineRC6UCrc32 = .text:0x80259CA8; // type:function size:0x8C scope:global +OnAttributeChange__12EngineSplinePCQ26Attrib10CollectionUi = .text:0x80259D34; // type:function size:0x4 scope:global +Reset__12EngineSpline = .text:0x80259D38; // type:function size:0x44 scope:global +GetTorquePoint__C12EngineSplinef = .text:0x80259D7C; // type:function size:0x84 scope:global +MatchSpeed__12EngineSplinef = .text:0x80259E00; // type:function size:0x240 scope:global +CalcShiftPoints__12EngineSpline = .text:0x8025A040; // type:function size:0x3C scope:global +GetShiftUpRPM__12EngineSplinei = .text:0x8025A07C; // type:function size:0x10 scope:global +GetShiftDownRPM__12EngineSplinei = .text:0x8025A08C; // type:function size:0x10 scope:global +AutoShift__12EngineSpline = .text:0x8025A09C; // type:function size:0x2C0 scope:global +Shift__12EngineSpline6GearID = .text:0x8025A35C; // type:function size:0xEC scope:global +GetDifferentialAngularVelocity__C12EngineSpline = .text:0x8025A448; // type:function size:0x140 scope:global +CalcSpeedometer__C12EngineSplinefUi = .text:0x8025A588; // type:function size:0x38 scope:global +GetMaxSpeedometer__C12EngineSpline = .text:0x8025A5C0; // type:function size:0xC0 scope:global +GetSpeedometer__C12EngineSpline = .text:0x8025A680; // type:function size:0x38 scope:global +OnTaskSimulate__12EngineSplinef = .text:0x8025A6B8; // type:function size:0x428 scope:global +GetShiftPoint__C12EngineSpline6GearIDT1 = .text:0x8025AAE0; // type:function size:0x48 scope:global +Construct__13SimpleChopperRC14BehaviorParams = .text:0x8025AB28; // type:function size:0xB4 scope:global +__13SimpleChopperRC14BehaviorParamsRC12EngineParams = .text:0x8025ABDC; // type:function size:0x410 scope:global +_._13SimpleChopper = .text:0x8025AFEC; // type:function size:0xD0 scope:global +Reset__13SimpleChopper = .text:0x8025B0BC; // type:function size:0x4 scope:global +OnBehaviorChange__13SimpleChopperRC6UCrc32 = .text:0x8025B0C0; // type:function size:0xA4 scope:global +SetTorqueToMatchPitchAndRoll__13SimpleChopperRQ25UMath7Vector3T1 = .text:0x8025B164; // type:function size:0x490 scope:global +OnTaskSimulate__13SimpleChopperf = .text:0x8025B5F4; // type:function size:0x5F4 scope:global +Construct__13EngineTrafficRC14BehaviorParams = .text:0x8025BBE8; // type:function size:0x44 scope:global +__13EngineTrafficRC14BehaviorParams = .text:0x8025BC2C; // type:function size:0x5B4 scope:global +_._13EngineTraffic = .text:0x8025C1E0; // type:function size:0x108 scope:global +GetMaxHorsePower__C13EngineTraffic = .text:0x8025C2E8; // type:function size:0x8 scope:global +GetHorsePower__C13EngineTraffic = .text:0x8025C2F0; // type:function size:0x58 scope:global +OnBehaviorChange__13EngineTrafficRC6UCrc32 = .text:0x8025C348; // type:function size:0x8C scope:global +OnAttributeChange__13EngineTrafficPCQ26Attrib10CollectionUi = .text:0x8025C3D4; // type:function size:0x4 scope:global +Reset__13EngineTraffic = .text:0x8025C3D8; // type:function size:0x64 scope:global +GetTorquePoint__C13EngineTrafficf = .text:0x8025C43C; // type:function size:0x30 scope:global +MatchSpeed__13EngineTrafficf = .text:0x8025C46C; // type:function size:0x1FC scope:global +GetBrakingTorque__C13EngineTrafficff = .text:0x8025C668; // type:function size:0x224 scope:global +CalcShiftPoints__13EngineTraffic = .text:0x8025C88C; // type:function size:0x108 scope:global +AutoShift__13EngineTraffic = .text:0x8025C994; // type:function size:0x228 scope:global +Shift__13EngineTraffic6GearID = .text:0x8025CBBC; // type:function size:0xEC scope:global +GetDifferentialAngularVelocity__C13EngineTraffic = .text:0x8025CCA8; // type:function size:0x1A8 scope:global +GetMaxSpeedometer__C13EngineTraffic = .text:0x8025CE50; // type:function size:0x94 scope:global +GetSpeedometer__C13EngineTraffic = .text:0x8025CEE4; // type:function size:0x58 scope:global +DoShifting__13EngineTrafficf = .text:0x8025CF3C; // type:function size:0x70 scope:global +OnTaskSimulate__13EngineTrafficf = .text:0x8025CFAC; // type:function size:0x5A4 scope:global +GetShiftPoint__C13EngineTraffic6GearIDT1 = .text:0x8025D550; // type:function size:0x48 scope:global +__Q211DrawVehicle4PartP6IModelUiPCQ217CollisionGeometry6BoundsPCQ26Attrib10CollectionG6UCrc32 = .text:0x8025D598; // type:function size:0x110 scope:global +_._Q211DrawVehicle4Part = .text:0x8025D6A8; // type:function size:0x104 scope:global +GetTransform__CQ211DrawVehicle4PartRQ25UMath7Matrix4 = .text:0x8025D7AC; // type:function size:0xF8 scope:global +OnProcessFrame__Q211DrawVehicle4Partf = .text:0x8025D8A4; // type:function size:0xEC scope:global +RemoveTrigger__Q211DrawVehicle4Part = .text:0x8025D990; // type:function size:0x44 scope:global +CreateTrigger__Q211DrawVehicle4PartRCQ25UMath7Matrix4 = .text:0x8025D9D4; // type:function size:0x154 scope:global +OnBeginSimulation__Q211DrawVehicle4Part = .text:0x8025DB28; // type:function size:0x158 scope:global +OnDraw__Q211DrawVehicle4PartPQ23Sim6Packet = .text:0x8025DC80; // type:function size:0x1C scope:global +OnBeginDraw__Q211DrawVehicle4Part = .text:0x8025DC9C; // type:function size:0x4 scope:global +OnEndDraw__Q211DrawVehicle4Part = .text:0x8025DCA0; // type:function size:0x64 scope:global +PlaceTrigger__Q211DrawVehicle4PartRCQ25UMath7Matrix4b = .text:0x8025DD04; // type:function size:0x48 scope:global +__11DrawVehicleRC14BehaviorParams = .text:0x8025DD4C; // type:function size:0x450 scope:global +_._11DrawVehicle = .text:0x8025E19C; // type:function size:0x384 scope:global +SetCausality__11DrawVehicleP8HCAUSE__f = .text:0x8025E520; // type:function size:0xC scope:global +GetCausality__C11DrawVehicle = .text:0x8025E52C; // type:function size:0x8 scope:global +EnumerateChildren__C11DrawVehiclePQ26IModel10Enumerator = .text:0x8025E534; // type:function size:0x130 scope:global +GetChildModel__C11DrawVehicleG6UCrc32 = .text:0x8025E664; // type:function size:0xF4 scope:global +SpawnModel__11DrawVehicleG6UCrc32N21 = .text:0x8025E758; // type:function size:0x114 scope:global +ReleaseModel__11DrawVehicle = .text:0x8025E86C; // type:function size:0x38 scope:global +ReleaseChildModels__11DrawVehicle = .text:0x8025E8A4; // type:function size:0xA8 scope:global +GetName__C11DrawVehicle = .text:0x8025E94C; // type:function size:0x54 scope:global +IsHidden__C11DrawVehicle = .text:0x8025E9A0; // type:function size:0x3C scope:global +HideModel__11DrawVehicle = .text:0x8025E9DC; // type:function size:0x38 scope:global +StopEffects__11DrawVehicle = .text:0x8025EA14; // type:function size:0xA8 scope:global +PlayEffect__11DrawVehicleG6UCrc32PCQ26Attrib10CollectionRCQ25UMath7Vector3T3b = .text:0x8025EABC; // type:function size:0x198 scope:global +StopEffect__11DrawVehicleG6UCrc32 = .text:0x8025EC54; // type:function size:0xE4 scope:global +Construct__8DrawHeliRC14BehaviorParams = .text:0x8025ED38; // type:function size:0x44 scope:global +__8DrawHeliRC14BehaviorParams = .text:0x8025ED7C; // type:function size:0x220 scope:global +OnBehaviorChange__8DrawHeliRC6UCrc32 = .text:0x8025EF9C; // type:function size:0x58 scope:global +_._8DrawHeli = .text:0x8025EFF4; // type:function size:0xF8 scope:global +OnTask__8DrawHeliP10HSIMTASK__f = .text:0x8025F0EC; // type:function size:0x24C scope:global +OnService__8DrawHeliRQ210RenderConn16Pkt_Heli_Service = .text:0x8025F338; // type:function size:0xB4 scope:global +OnService__8DrawHeliP13HSIMSERVICE__PQ23Sim6Packet = .text:0x8025F3EC; // type:function size:0x84 scope:global +__7DrawCarRC14BehaviorParams14CarRenderUsage = .text:0x8025F470; // type:function size:0x25C scope:global +IsHidden__C7DrawCar = .text:0x8025F6CC; // type:function size:0x58 scope:global +HideModel__7DrawCar = .text:0x8025F724; // type:function size:0x34 scope:global +ReleaseModel__7DrawCar = .text:0x8025F758; // type:function size:0x48 scope:global +ReleaseChildModels__7DrawCar = .text:0x8025F7A0; // type:function size:0x68 scope:global +IsPartVisible__C7DrawCarRC6UCrc32 = .text:0x8025F808; // type:function size:0x70 scope:global +HidePart__7DrawCarRC6UCrc32 = .text:0x8025F878; // type:function size:0x150 scope:global +ShowPart__7DrawCarRC6UCrc32 = .text:0x8025F9C8; // type:function size:0x10C scope:global +OnBehaviorChange__7DrawCarRC6UCrc32 = .text:0x8025FAD4; // type:function size:0x104 scope:global +_._7DrawCar = .text:0x8025FBD8; // type:function size:0x118 scope:global +OnService__7DrawCarRQ210RenderConn15Pkt_Car_Service = .text:0x8025FCF0; // type:function size:0x684 scope:global +OnService__7DrawCarP13HSIMSERVICE__PQ23Sim6Packet = .text:0x80260374; // type:function size:0x8C scope:global +Construct__11DrawTrafficRC14BehaviorParams = .text:0x80260400; // type:function size:0x44 scope:global +__11DrawTrafficRC14BehaviorParams = .text:0x80260444; // type:function size:0x70 scope:global +__18DrawPerformanceCarRC14BehaviorParams14CarRenderUsage = .text:0x802604B4; // type:function size:0x9C scope:global +OnBehaviorChange__18DrawPerformanceCarRC6UCrc32 = .text:0x80260550; // type:function size:0x80 scope:global +OnService__18DrawPerformanceCarRQ210RenderConn15Pkt_Car_Service = .text:0x802605D0; // type:function size:0x290 scope:global +Construct__10DrawNISCarRC14BehaviorParams = .text:0x80260860; // type:function size:0x44 scope:global +__10DrawNISCarRC14BehaviorParams = .text:0x802608A4; // type:function size:0x70 scope:global +Construct__10DrawCopCarRC14BehaviorParams = .text:0x80260914; // type:function size:0x44 scope:global +__10DrawCopCarRC14BehaviorParams = .text:0x80260958; // type:function size:0x70 scope:global +Construct__11DrawRaceCarRC14BehaviorParams = .text:0x802609C8; // type:function size:0xDC scope:global +__11DrawRaceCarRC14BehaviorParams14CarRenderUsage = .text:0x80260AA4; // type:function size:0x84 scope:global +OnBehaviorChange__11DrawRaceCarRC6UCrc32 = .text:0x80260B28; // type:function size:0x68 scope:global +OnService__11DrawRaceCarRQ210RenderConn15Pkt_Car_Service = .text:0x80260B90; // type:function size:0x58 scope:global +__8SoundCarRC14BehaviorParamsQ25Sound7Context = .text:0x80260BE8; // type:function size:0x3C0 scope:global +_._8SoundCar = .text:0x80260FA8; // type:function size:0xF8 scope:global +OnService__8SoundCarRQ29SoundConn15Pkt_Car_Service = .text:0x802610A0; // type:function size:0x700 scope:global +OnBehaviorChange__8SoundCarRC6UCrc32 = .text:0x802617A0; // type:function size:0x160 scope:global +OnService__8SoundCarP13HSIMSERVICE__PQ23Sim6Packet = .text:0x80261900; // type:function size:0x80 scope:global +__12SoundTrafficRC14BehaviorParamsQ25Sound7Context = .text:0x80261980; // type:function size:0x70 scope:global +Construct__12SoundTrafficRC14BehaviorParams = .text:0x802619F0; // type:function size:0xDC scope:global +LocateTrailer__12SoundTraffic = .text:0x80261ACC; // type:function size:0xB0 scope:global +OnBehaviorChange__12SoundTrafficRC6UCrc32 = .text:0x80261B7C; // type:function size:0x50 scope:global +OnService__12SoundTrafficRQ29SoundConn15Pkt_Car_Service = .text:0x80261BCC; // type:function size:0x38 scope:global +__8SoundCopRC14BehaviorParams = .text:0x80261C04; // type:function size:0x94 scope:global +Construct__8SoundCopRC14BehaviorParams = .text:0x80261C98; // type:function size:0x44 scope:global +OnBehaviorChange__8SoundCopRC6UCrc32 = .text:0x80261CDC; // type:function size:0x90 scope:global +OnService__8SoundCopRQ29SoundConn15Pkt_Car_Service = .text:0x80261D6C; // type:function size:0xDC scope:global +__10SoundRacerRC14BehaviorParamsQ25Sound7Context = .text:0x80261E48; // type:function size:0x90 scope:global +Construct__10SoundRacerRC14BehaviorParams = .text:0x80261ED8; // type:function size:0xB4 scope:global +OnServiceTire__10SoundRacerRQ29SoundConn15Pkt_Car_ServiceUiQ25Sound11WheelConfig = .text:0x80261F8C; // type:function size:0x5C scope:global +OnService__10SoundRacerRQ29SoundConn15Pkt_Car_Service = .text:0x80261FE8; // type:function size:0x90 scope:global +OnBehaviorChange__10SoundRacerRC6UCrc32 = .text:0x80262078; // type:function size:0x90 scope:global +Construct__8ResetCarRC14BehaviorParams = .text:0x80262108; // type:function size:0x44 scope:global +__8ResetCarRC14BehaviorParams = .text:0x8026214C; // type:function size:0x13C scope:global +_._8ResetCar = .text:0x80262288; // type:function size:0xF0 scope:global +OnBehaviorChange__8ResetCarRC6UCrc32 = .text:0x80262378; // type:function size:0xA4 scope:global +ValidTerrain__C8ResetCarUi = .text:0x8026241C; // type:function size:0x110 scope:global +CanRecord__C8ResetCar = .text:0x8026252C; // type:function size:0xF4 scope:global +ShouldReset__C8ResetCar = .text:0x80262620; // type:function size:0x90 scope:global +TrackState__8ResetCarf = .text:0x802626B0; // type:function size:0x13C scope:global +CheckZone__8ResetCar18eTrackPathZoneType = .text:0x802627EC; // type:function size:0x17C scope:global +Check__8ResetCarf = .text:0x80262968; // type:function size:0x190 scope:global +OnTask__8ResetCarP10HSIMTASK__f = .text:0x80262AF8; // type:function size:0x44 scope:global +Reset__8ResetCar = .text:0x80262B3C; // type:function size:0x74 scope:global +ResetTo__8ResetCarRCQ25UMath7Vector3T1b = .text:0x80262BB0; // type:function size:0x150 scope:global +FindNearestRoad__C8ResetCarP11ResetCookie = .text:0x80262D00; // type:function size:0x33C scope:global +ResetVehicle__8ResetCarb = .text:0x8026303C; // type:function size:0x204 scope:global +Construct__9SoundHeliRC14BehaviorParams = .text:0x80263240; // type:function size:0x44 scope:global +__9SoundHeliRC14BehaviorParams = .text:0x80263284; // type:function size:0x120 scope:global +_._9SoundHeli = .text:0x802633A4; // type:function size:0xCC scope:global +OnService__9SoundHeliRQ29SoundConn15Pkt_Car_Service = .text:0x80263470; // type:function size:0x4 scope:global +OnBehaviorChange__9SoundHeliRC6UCrc32 = .text:0x80263474; // type:function size:0x4 scope:global +OnService__9SoundHeliP13HSIMSERVICE__PQ23Sim6Packet = .text:0x80263478; // type:function size:0x48 scope:global +__10SpikeStripRC14BehaviorParams = .text:0x802634C0; // type:function size:0x84 scope:global +OnBehaviorChange__10SpikeStripRC6UCrc32 = .text:0x80263544; // type:function size:0x78 scope:global +SetupBody__10SpikeStrip = .text:0x802635BC; // type:function size:0x44 scope:global +OnCollide__10SpikeStripRCQ38Dynamics9Collision8GeometryP10IRigidBodyf = .text:0x80263600; // type:function size:0x1FC scope:global +OnTaskSimulate__10SpikeStripf = .text:0x802637FC; // type:function size:0x2E4 scope:global +_Alloc__t10ScratchPtr1ZQ29RigidBody8Volatile = .text:0x80263AE0; // type:function size:0x6C scope:global +__t10ScratchPtr1ZQ29RigidBody8Volatile = .text:0x80263B4C; // type:function size:0x4C scope:global +_._t10ScratchPtr1ZQ29RigidBody8Volatile = .text:0x80263B98; // type:function size:0x34 scope:global +__less__H1Z15CollisionPacket_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x80263BCC; // type:function size:0xC scope:global +__adjust_heap__H4ZP15CollisionPacketZiZ15CollisionPacketZQ24_STLt4less1Z15CollisionPacket_4_STLX01X11X11X21X31_v = .text:0x80263BD8; // type:function size:0x248 scope:global +make_heap__H2ZP15CollisionPacketZQ24_STLt4less1Z15CollisionPacket_4_STLX01X01X11_v = .text:0x80263E20; // type:function size:0xE8 scope:global +pop_heap__H2ZP15CollisionPacketZQ24_STLt4less1Z15CollisionPacket_4_STLX01X01X11_v = .text:0x80263F08; // type:function size:0x138 scope:global +__partial_sort__H3ZP15CollisionPacketZ15CollisionPacketZQ24_STLt4less1Z15CollisionPacket_4_STLX01X01X01PX11X21_v = .text:0x80264040; // type:function size:0x1D8 scope:global +partial_sort__H2ZP15CollisionPacketZQ24_STLt4less1Z15CollisionPacket_4_STLX01X01X01X11_v = .text:0x80264218; // type:function size:0x30 scope:global +__unguarded_partition__H3ZP15CollisionPacketZ15CollisionPacketZQ24_STLt4less1Z15CollisionPacket_4_STLX01X01X11X21_X01 = .text:0x80264248; // type:function size:0x144 scope:global +__introsort_loop__H4ZP15CollisionPacketZ15CollisionPacketZiZQ24_STLt4less1Z15CollisionPacket_4_STLX01X01PX11X21X31_v = .text:0x8026438C; // type:function size:0x1A0 scope:global +__unguarded_linear_insert__H3ZP15CollisionPacketZ15CollisionPacketZQ24_STLt4less1Z15CollisionPacket_4_STLX01X11X21_v = .text:0x8026452C; // type:function size:0xB0 scope:global +__insertion_sort__H2ZP15CollisionPacketZQ24_STLt4less1Z15CollisionPacket_4_STLX01X01X11_v = .text:0x802645DC; // type:function size:0x1E0 scope:global +__unguarded_insertion_sort_aux__H3ZP15CollisionPacketZ15CollisionPacketZQ24_STLt4less1Z15CollisionPacket_4_STLX01X01PX11X21_v = .text:0x802647BC; // type:function size:0xA4 scope:global +__final_insertion_sort__H2ZP15CollisionPacketZQ24_STLt4less1Z15CollisionPacket_4_STLX01X01X11_v = .text:0x80264860; // type:function size:0x88 scope:global +sort__H1ZP15CollisionPacket_4_STLX01X01_v = .text:0x802648E8; // type:function size:0xAC scope:global +Push__t10ScratchPtr1ZQ29RigidBody8VolatilePv = .text:0x80264994; // type:function size:0x4 scope:global +Pop__t10ScratchPtr1ZQ29RigidBody8Volatile = .text:0x80264998; // type:function size:0x4 scope:global +_Alloc__t10ScratchPtr1ZQ215SimpleRigidBody8Volatile = .text:0x8026499C; // type:function size:0x6C scope:global +__t10ScratchPtr1ZQ215SimpleRigidBody8Volatile = .text:0x80264A08; // type:function size:0x4C scope:global +_._t10ScratchPtr1ZQ215SimpleRigidBody8Volatile = .text:0x80264A54; // type:function size:0x34 scope:global +Push__t10ScratchPtr1ZQ215SimpleRigidBody8VolatilePv = .text:0x80264A88; // type:function size:0x4 scope:global +Pop__t10ScratchPtr1ZQ215SimpleRigidBody8Volatile = .text:0x80264A8C; // type:function size:0x4 scope:global +Get__H1Z19EffectLinkageRecord_CQ26Attrib9AttributeUi_RCX01 = .text:0x80264A90; // type:function size:0x50 scope:global +clear__Q24_STLt10_List_base2Z6UCrc32ZQ33UTL3Stdt9Allocator2Z6UCrc32Z10_type_list = .text:0x80264AE0; // type:function size:0x78 scope:global +clear__Q24_STLt10_List_base2ZPQ211DrawVehicle6EffectZQ33UTL3Stdt9Allocator2ZPQ211DrawVehicle6EffectZ10_type_list = .text:0x80264B58; // type:function size:0x78 scope:global +_M_erase__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZiZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZiZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2ZiZ9_type_mapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZC6UCrc32Zi = .text:0x80264BD0; // type:function size:0x68 scope:global +_M_insert__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZiZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZiZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2ZiZ9_type_mapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZC6UCrc32ZiT1 = .text:0x80264C38; // type:function size:0x13C scope:global +insert_unique__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZiZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZiZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2ZiZ9_type_mapRCQ24_STLt4pair2ZC6UCrc32Zi = .text:0x80264D74; // type:function size:0x118 scope:global +insert_unique__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZiZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZiZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2ZiZ9_type_mapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZC6UCrc32ZiZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZC6UCrc32ZiRCQ24_STLt4pair2ZC6UCrc32Zi = .text:0x80264E8C; // type:function size:0x26C scope:global +__static_initialization_and_destruction_0 = .text:0x802650F8; // type:function size:0x1170 scope:local +_._13EffectsPlayer = .text:0x80266268; // type:function size:0x80 scope:global +_._14EngineDragster = .text:0x802662E8; // type:function size:0x104 scope:global +_._12IInputPlayer = .text:0x802663EC; // type:function size:0x160 scope:global +_._13ITransmission = .text:0x8026654C; // type:function size:0x54 scope:global +_IHandle__17IDragTransmission = .text:0x802665A0; // type:function size:0xC scope:global +_IHandle__10ITiptronic = .text:0x802665AC; // type:function size:0xC scope:global +_._10ITiptronic = .text:0x802665B8; // type:function size:0x54 scope:global +_IHandle__11IInductable = .text:0x8026660C; // type:function size:0xC scope:global +_._11IInductable = .text:0x80266618; // type:function size:0x54 scope:global +_._7IEngine = .text:0x8026666C; // type:function size:0x54 scope:global +_IHandle__11IDragEngine = .text:0x802666C0; // type:function size:0xC scope:global +_._11IDragEngine = .text:0x802666CC; // type:function size:0x54 scope:global +_._11IRaceEngine = .text:0x80266720; // type:function size:0x54 scope:global +_._19IArticulatedVehicle = .text:0x80266774; // type:function size:0x54 scope:global +ClassKey__Q36Attrib3Gen12chopperspecs = .text:0x802667C8; // type:function size:0xC scope:global +ClassKey__Q36Attrib3Gen11damagespecs = .text:0x802667D4; // type:function size:0xC scope:global +ClassKey__Q36Attrib3Gen5tires = .text:0x802667E0; // type:function size:0xC scope:global +ClassKey__Q36Attrib3Gen7chassis = .text:0x802667EC; // type:function size:0xC scope:global +ClassKey__Q36Attrib3Gen6brakes = .text:0x802667F8; // type:function size:0xC scope:global +ClassKey__Q36Attrib3Gen6engine = .text:0x80266804; // type:function size:0xC scope:global +ClassKey__Q36Attrib3Gen12transmission = .text:0x80266810; // type:function size:0xC scope:global +ClassKey__Q36Attrib3Gen9induction = .text:0x8026681C; // type:function size:0xC scope:global +ClassKey__Q36Attrib3Gen3nos = .text:0x80266828; // type:function size:0xC scope:global +_._14ICollisionBody = .text:0x80266834; // type:function size:0x160 scope:global +_._11ISimpleBody = .text:0x80266994; // type:function size:0x160 scope:global +_._10IRigidBody = .text:0x80266AF4; // type:function size:0x160 scope:global +_._15IDynamicsEntity = .text:0x80266C54; // type:function size:0x60 scope:global +IsModeling__C9RigidBody = .text:0x80266CB4; // type:function size:0x20 scope:global +IsSleeping__C9RigidBody = .text:0x80266CD4; // type:function size:0x1C scope:global +GetWorldMomentScale__C9RigidBody = .text:0x80266CF0; // type:function size:0xC scope:global +GetGroundMomentScale__C9RigidBody = .text:0x80266CFC; // type:function size:0xC scope:global +SetCenterOfGravity__9RigidBodyRCQ25UMath7Vector3 = .text:0x80266D08; // type:function size:0x20 scope:global +GetCenterOfGravity__C9RigidBody = .text:0x80266D28; // type:function size:0x8 scope:global +HasHadCollision__C9RigidBody = .text:0x80266D30; // type:function size:0x2C scope:global +HasHadWorldCollision__C9RigidBody = .text:0x80266D5C; // type:function size:0x2C scope:global +HasHadObjectCollision__C9RigidBody = .text:0x80266D88; // type:function size:0x2C scope:global +IsAttachedToWorld__C9RigidBody = .text:0x80266DB4; // type:function size:0x2C scope:global +IsAnchored__C9RigidBody = .text:0x80266DE0; // type:function size:0x2C scope:global +SetAnchored__9RigidBodyb = .text:0x80266E0C; // type:function size:0x48 scope:global +GetInertiaTensor__C9RigidBody = .text:0x80266E54; // type:function size:0x10 scope:global +IsInGroundContact__C9RigidBody = .text:0x80266E64; // type:function size:0x20 scope:global +GetNumContactPoints__C9RigidBody = .text:0x80266E84; // type:function size:0x14 scope:global +GetGroundNormal__C9RigidBody = .text:0x80266E98; // type:function size:0x8 scope:global +SetForce__9RigidBodyRCQ25UMath7Vector3 = .text:0x80266EA0; // type:function size:0x28 scope:global +GetForce__C9RigidBody = .text:0x80266EC8; // type:function size:0x10 scope:global +GetTorque__C9RigidBody = .text:0x80266ED8; // type:function size:0x10 scope:global +SetTorque__9RigidBodyRCQ25UMath7Vector3 = .text:0x80266EE8; // type:function size:0x28 scope:global +GetGravity__C9RigidBody = .text:0x80266F10; // type:function size:0xC scope:global +GetRightVector__C9RigidBody = .text:0x80266F1C; // type:function size:0x10 scope:global +GetUpVector__C9RigidBody = .text:0x80266F2C; // type:function size:0x10 scope:global +GetForwardVector__C9RigidBody = .text:0x80266F3C; // type:function size:0x10 scope:global +GetMatrix4__C9RigidBody = .text:0x80266F4C; // type:function size:0x10 scope:global +GetRotation__C9RigidBody = .text:0x80266F5C; // type:function size:0x10 scope:global +SetRotation__9RigidBodyRCQ25UMath7Matrix4 = .text:0x80266F6C; // type:function size:0xCC scope:global +GetPrincipalInertia__C9RigidBody = .text:0x80267038; // type:function size:0x10 scope:global +GetGeometryNode__C9RigidBody = .text:0x80267048; // type:function size:0x8 scope:global +GetOwner__C9RigidBody = .text:0x80267050; // type:function size:0x8 scope:global +IsSimple__C9RigidBody = .text:0x80267058; // type:function size:0x8 scope:global +GetSimableType__C9RigidBody = .text:0x80267060; // type:function size:0x8 scope:global +GetIndex__C9RigidBody = .text:0x80267068; // type:function size:0x10 scope:global +GetRadius__C9RigidBody = .text:0x80267078; // type:function size:0x10 scope:global +GetMass__C9RigidBody = .text:0x80267088; // type:function size:0x10 scope:global +GetOOMass__C9RigidBody = .text:0x80267098; // type:function size:0x10 scope:global +GetPosition__C9RigidBody = .text:0x802670A8; // type:function size:0x10 scope:global +GetLinearVelocity__C9RigidBody = .text:0x802670B8; // type:function size:0x10 scope:global +GetAngularVelocity__C9RigidBody = .text:0x802670C8; // type:function size:0x10 scope:global +GetSpeed__C9RigidBody = .text:0x802670D8; // type:function size:0x30 scope:global +GetSpeedXZ__C9RigidBody = .text:0x80267108; // type:function size:0x38 scope:global +GetRightVector__C9RigidBodyRQ25UMath7Vector3 = .text:0x80267140; // type:function size:0x28 scope:global +GetUpVector__C9RigidBodyRQ25UMath7Vector3 = .text:0x80267168; // type:function size:0x28 scope:global +GetForwardVector__C9RigidBodyRQ25UMath7Vector3 = .text:0x80267190; // type:function size:0x28 scope:global +GetMatrix4__C9RigidBodyRQ25UMath7Matrix4 = .text:0x802671B8; // type:function size:0x74 scope:global +GetWCollider__C9RigidBody = .text:0x8026722C; // type:function size:0x8 scope:global +ModifyXPos__9RigidBodyf = .text:0x80267234; // type:function size:0x18 scope:global +ModifyYPos__9RigidBodyf = .text:0x8026724C; // type:function size:0x18 scope:global +ModifyZPos__9RigidBodyf = .text:0x80267264; // type:function size:0x18 scope:global +GetOrientation__C9RigidBody = .text:0x8026727C; // type:function size:0xC scope:global +GetDimension__C9RigidBodyRQ25UMath7Vector3 = .text:0x80267288; // type:function size:0x20 scope:global +GetDimension__C9RigidBody = .text:0x802672A8; // type:function size:0x24 scope:global +DoPenetration__9RigidBodyRC9RigidBody = .text:0x802672CC; // type:function size:0x8 scope:global +_._Q23SAPt4Grid1Z9RigidBody = .text:0x802672D4; // type:function size:0x164 scope:global +OnTaskSimulate__15SimpleRigidBodyf = .text:0x80267438; // type:function size:0x4 scope:global +Reset__15SimpleRigidBody = .text:0x8026743C; // type:function size:0x4 scope:global +ModifyFlags__15SimpleRigidBodyUiUi = .text:0x80267440; // type:function size:0x2C scope:global +CanCollideWithSRB__C15SimpleRigidBody = .text:0x8026746C; // type:function size:0x18 scope:global +CanCollideWithRB__C15SimpleRigidBody = .text:0x80267484; // type:function size:0x18 scope:global +CanHitTrigger__C15SimpleRigidBody = .text:0x8026749C; // type:function size:0x14 scope:global +GetCollisionMap__C15SimpleRigidBody = .text:0x802674B0; // type:function size:0x20 scope:global +GetCollisionMap__15SimpleRigidBody = .text:0x802674D0; // type:function size:0x20 scope:global +IsSimple__C15SimpleRigidBody = .text:0x802674F0; // type:function size:0x8 scope:global +GetSimableType__C15SimpleRigidBody = .text:0x802674F8; // type:function size:0x50 scope:global +GetIndex__C15SimpleRigidBody = .text:0x80267548; // type:function size:0x10 scope:global +GetRadius__C15SimpleRigidBody = .text:0x80267558; // type:function size:0x10 scope:global +GetMass__C15SimpleRigidBody = .text:0x80267568; // type:function size:0x10 scope:global +GetOOMass__C15SimpleRigidBody = .text:0x80267578; // type:function size:0x1C scope:global +GetPosition__C15SimpleRigidBody = .text:0x80267594; // type:function size:0x10 scope:global +GetLinearVelocity__C15SimpleRigidBody = .text:0x802675A4; // type:function size:0x10 scope:global +GetAngularVelocity__C15SimpleRigidBody = .text:0x802675B4; // type:function size:0x10 scope:global +GetSpeed__C15SimpleRigidBody = .text:0x802675C4; // type:function size:0x40 scope:global +GetSpeedXZ__C15SimpleRigidBody = .text:0x80267604; // type:function size:0x4C scope:global +GetWCollider__C15SimpleRigidBody = .text:0x80267650; // type:function size:0x8 scope:global +SetPosition__15SimpleRigidBodyRCQ25UMath7Vector3 = .text:0x80267658; // type:function size:0x28 scope:global +SetLinearVelocity__15SimpleRigidBodyRCQ25UMath7Vector3 = .text:0x80267680; // type:function size:0x28 scope:global +SetAngularVelocity__15SimpleRigidBodyRCQ25UMath7Vector3 = .text:0x802676A8; // type:function size:0x28 scope:global +SetRadius__15SimpleRigidBodyf = .text:0x802676D0; // type:function size:0x10 scope:global +SetMass__15SimpleRigidBodyf = .text:0x802676E0; // type:function size:0x10 scope:global +ModifyXPos__15SimpleRigidBodyf = .text:0x802676F0; // type:function size:0x18 scope:global +ModifyYPos__15SimpleRigidBodyf = .text:0x80267708; // type:function size:0x18 scope:global +ModifyZPos__15SimpleRigidBodyf = .text:0x80267720; // type:function size:0x18 scope:global +ResolveTorque__15SimpleRigidBodyRCQ25UMath7Vector3T1 = .text:0x80267738; // type:function size:0x4 scope:global +GetMatrix4__C15SimpleRigidBodyRQ25UMath7Matrix4 = .text:0x8026773C; // type:function size:0x20 scope:global +GetOrientation__C15SimpleRigidBody = .text:0x8026775C; // type:function size:0xC scope:global +GetDimension__C15SimpleRigidBodyRQ25UMath7Vector3 = .text:0x80267768; // type:function size:0x1C scope:global +GetDimension__C15SimpleRigidBody = .text:0x80267784; // type:function size:0x44 scope:global +HasHadCollision__C15SimpleRigidBody = .text:0x802677C8; // type:function size:0x8 scope:global +Debug__15SimpleRigidBody = .text:0x802677D0; // type:function size:0x4 scope:global +_._11IDamageable = .text:0x802677D4; // type:function size:0x54 scope:global +_._18IDamageableVehicle = .text:0x80267828; // type:function size:0x54 scope:global +_IHandle__6IModel = .text:0x8026787C; // type:function size:0xC scope:global +_._6IModel = .text:0x80267888; // type:function size:0x214 scope:global +_._9RBVehicle = .text:0x80267A9C; // type:function size:0x100 scope:global +SetCollisionMass__9RBVehiclef = .text:0x80267B9C; // type:function size:0x8 scope:global +SetCollisionCOG__9RBVehicleRCQ25UMath7Vector3 = .text:0x80267BA4; // type:function size:0x20 scope:global +SetPlayerReactions__9RBVehicleRCQ36Attrib3Gen18collisionreactions = .text:0x80267BC4; // type:function size:0x24 scope:global +GetPlayerReactions__C9RBVehicle = .text:0x80267BE8; // type:function size:0x8 scope:global +EnableObjectCollisions__9RBVehicleb = .text:0x80267BF0; // type:function size:0x8 scope:global +SetInvulnerability__9RBVehicle16eInvulnerablitiyf = .text:0x80267BF8; // type:function size:0xC scope:global +GetInvulnerability__C9RBVehicle = .text:0x80267C04; // type:function size:0x8 scope:global +DoPenetration__9RBVehicleRC9RigidBody = .text:0x80267C0C; // type:function size:0x48 scope:global +SetInvulnerability__9RBTractor16eInvulnerablitiyf = .text:0x80267C54; // type:function size:0xAC scope:global +GetTrailer__C9RBTractor = .text:0x80267D00; // type:function size:0x8 scope:global +IsHitched__C9RBTractor = .text:0x80267D08; // type:function size:0x8 scope:global +GetCacheName__C9RBTractor = .text:0x80267D10; // type:function size:0xC scope:global +_._9RBTrailer = .text:0x80267D1C; // type:function size:0xC8 scope:global +_._t16BehaviorSpecsPtr1ZQ36Attrib3Gen11damagespecs = .text:0x80267DE4; // type:function size:0x7C scope:global +IsLightDamaged__C13DamageVehicleQ29VehicleFX2ID = .text:0x80267E60; // type:function size:0x6C scope:global +DamageLight__13DamageVehicleQ29VehicleFX2IDb = .text:0x80267ECC; // type:function size:0x70 scope:global +GetHealth__C13DamageVehicle = .text:0x80267F3C; // type:function size:0x44 scope:global +GetZoneDamage__C13DamageVehicle = .text:0x80267F80; // type:function size:0x10 scope:global +InShock__C13DamageVehicle = .text:0x80267F90; // type:function size:0x8 scope:global +IsDestroyed__C13DamageVehicle = .text:0x80267F98; // type:function size:0x20 scope:global +CanDamageVisuals__C13DamageVehicle = .text:0x80267FB8; // type:function size:0x8 scope:global +Find__C12EffectLookupUiRCQ26Attrib9Attribute = .text:0x80267FC0; // type:function size:0x64 scope:global +_._14EffectsVehicle = .text:0x80268024; // type:function size:0x80 scope:global +Construct__14EffectsVehicleRC14BehaviorParams = .text:0x802680A4; // type:function size:0x44 scope:global +_._10EffectsCar = .text:0x802680E8; // type:function size:0x80 scope:global +Construct__10EffectsCarRC14BehaviorParams = .text:0x80268168; // type:function size:0x44 scope:global +Construct__13EffectsPlayerRC14BehaviorParams = .text:0x802681AC; // type:function size:0x44 scope:global +_._16EffectsSmackable = .text:0x802681F0; // type:function size:0x80 scope:global +Construct__16EffectsSmackableRC14BehaviorParams = .text:0x80268270; // type:function size:0x44 scope:global +_._15EffectsFragment = .text:0x802682B4; // type:function size:0x80 scope:global +Construct__15EffectsFragmentRC14BehaviorParams = .text:0x80268334; // type:function size:0x44 scope:global +_._Q210RenderConn12Pkt_Car_Open = .text:0x80268378; // type:function size:0x34 scope:global +ConnectionClass__Q210RenderConn12Pkt_Car_Open = .text:0x802683AC; // type:function size:0x64 scope:global +Size__Q210RenderConn12Pkt_Car_Open = .text:0x80268410; // type:function size:0x8 scope:global +Type__Q210RenderConn12Pkt_Car_Open = .text:0x80268418; // type:function size:0x20 scope:global +_._Q210RenderConn13Pkt_Heli_Open = .text:0x80268438; // type:function size:0x34 scope:global +ConnectionClass__Q210RenderConn13Pkt_Heli_Open = .text:0x8026846C; // type:function size:0x64 scope:global +Size__Q210RenderConn13Pkt_Heli_Open = .text:0x802684D0; // type:function size:0x8 scope:global +Type__Q210RenderConn13Pkt_Heli_Open = .text:0x802684D8; // type:function size:0x20 scope:global +_._Q210RenderConn24Pkt_VehicleFragment_Open = .text:0x802684F8; // type:function size:0x34 scope:global +ConnectionClass__Q210RenderConn24Pkt_VehicleFragment_Open = .text:0x8026852C; // type:function size:0x64 scope:global +Size__Q210RenderConn24Pkt_VehicleFragment_Open = .text:0x80268590; // type:function size:0x8 scope:global +Type__Q210RenderConn24Pkt_VehicleFragment_Open = .text:0x80268598; // type:function size:0x20 scope:global +_IHandle__10ISpikeable = .text:0x802685B8; // type:function size:0xC scope:global +_._10ISpikeable = .text:0x802685C4; // type:function size:0x160 scope:global +ClassKey__Q36Attrib3Gen7effects = .text:0x80268724; // type:function size:0xC scope:global +_._14DamageDragster = .text:0x80268730; // type:function size:0xB0 scope:global +SetControlSteering__6PInputf = .text:0x802687E0; // type:function size:0x8 scope:global +SetControlGas__6PInputf = .text:0x802687E8; // type:function size:0x8 scope:global +SetControlBrake__6PInputf = .text:0x802687F0; // type:function size:0x8 scope:global +GetControls__C6PInput = .text:0x802687F8; // type:function size:0x8 scope:global +SetControlHandBrake__6PInputf = .text:0x80268800; // type:function size:0x8 scope:global +GetControlHandBrake__C6PInput = .text:0x80268808; // type:function size:0x20 scope:global +SetControlActionButton__6PInputb = .text:0x80268828; // type:function size:0x8 scope:global +GetControlActionButton__C6PInput = .text:0x80268830; // type:function size:0x18 scope:global +SetControlSteeringVertical__6PInputf = .text:0x80268848; // type:function size:0x8 scope:global +SetControlBanking__6PInputf = .text:0x80268850; // type:function size:0x8 scope:global +GetControlBanking__6PInput = .text:0x80268858; // type:function size:0x8 scope:global +SetControlNOS__6PInputb = .text:0x80268860; // type:function size:0x8 scope:global +IsLookBackButtonPressed__C6PInput = .text:0x80268868; // type:function size:0x8 scope:global +IsPullBackButtonPressed__C6PInput = .text:0x80268870; // type:function size:0x8 scope:global +IsAutomaticShift__C6PInput = .text:0x80268878; // type:function size:0x8 scope:global +SetControlStrafeVertical__6PInputf = .text:0x80268880; // type:function size:0x8 scope:global +SetControlStrafeHorizontal__6PInputf = .text:0x80268888; // type:function size:0x8 scope:global +IsBlocked__C11InputPlayer = .text:0x80268890; // type:function size:0x8 scope:global +IsLookBackButtonPressed__C11InputPlayer = .text:0x80268898; // type:function size:0x1C scope:global +IsPullBackButtonPressed__C11InputPlayer = .text:0x802688B4; // type:function size:0x1C scope:global +OnAction__11InputPlayerRC9ActionRef = .text:0x802688D0; // type:function size:0x8 scope:global +_._15InputPlayerDrag = .text:0x802688D8; // type:function size:0x8C scope:global +Construct__15InputPlayerDragRC14BehaviorParams = .text:0x80268964; // type:function size:0x44 scope:global +_._8InputNIS = .text:0x802689A8; // type:function size:0x80 scope:global +Construct__8InputNISRC14BehaviorParams = .text:0x80268A28; // type:function size:0x44 scope:global +_._t16BehaviorSpecsPtr1ZQ36Attrib3Gen7chassis = .text:0x80268A6C; // type:function size:0x7C scope:global +_._7Chassis = .text:0x80268AE8; // type:function size:0xC4 scope:global +_._5Wheel = .text:0x80268BAC; // type:function size:0x60 scope:global +_._t16BehaviorSpecsPtr1ZQ36Attrib3Gen5tires = .text:0x80268C0C; // type:function size:0x7C scope:global +_._t16BehaviorSpecsPtr1ZQ36Attrib3Gen6brakes = .text:0x80268C88; // type:function size:0x7C scope:global +_._t16BehaviorSpecsPtr1ZQ36Attrib3Gen12transmission = .text:0x80268D04; // type:function size:0x7C scope:global +GetWheelTraction__C15SuspensionRacerUi = .text:0x80268D80; // type:function size:0x14 scope:global +GetWheelRadius__C15SuspensionRacerUi = .text:0x80268D94; // type:function size:0x14 scope:global +GetWheelSlip__C15SuspensionRacerUi = .text:0x80268DA8; // type:function size:0x14 scope:global +GetToleratedSlip__C15SuspensionRacerUi = .text:0x80268DBC; // type:function size:0x14 scope:global +GetWheelSkid__C15SuspensionRacerUi = .text:0x80268DD0; // type:function size:0x14 scope:global +GetWheelLoad__C15SuspensionRacerUi = .text:0x80268DE4; // type:function size:0x14 scope:global +SetWheelAngularVelocity__15SuspensionRacerif = .text:0x80268DF8; // type:function size:0x14 scope:global +GetNumWheels__C15SuspensionRacer = .text:0x80268E0C; // type:function size:0x8 scope:global +GetWheelPos__C15SuspensionRacerUi = .text:0x80268E14; // type:function size:0x14 scope:global +GetWheelLocalPos__C15SuspensionRacerUi = .text:0x80268E28; // type:function size:0x14 scope:global +ApplyVehicleEntryForces__15SuspensionRacerbRCQ25UMath7Vector3T1 = .text:0x80268E3C; // type:function size:0x4 scope:global +GetWheelRoadHeight__C15SuspensionRacerUi = .text:0x80268E40; // type:function size:0x14 scope:global +GetCompression__C15SuspensionRacerUi = .text:0x80268E54; // type:function size:0x14 scope:global +GetWheelRoadNormal__C15SuspensionRacerUi = .text:0x80268E68; // type:function size:0x14 scope:global +IsWheelOnGround__C15SuspensionRacerUi = .text:0x80268E7C; // type:function size:0x28 scope:global +GetWheelRoadSurface__C15SuspensionRacerUi = .text:0x80268EA4; // type:function size:0x14 scope:global +GetWheelVelocity__C15SuspensionRacerUi = .text:0x80268EB8; // type:function size:0x14 scope:global +GetNumWheelsOnGround__C15SuspensionRacer = .text:0x80268ECC; // type:function size:0x8 scope:global +GetWheelSteer__C15SuspensionRacerUi = .text:0x80268ED4; // type:function size:0x30 scope:global +GetMaxSteering__C15SuspensionRacer = .text:0x80268F04; // type:function size:0x14 scope:global +GetWheelSlipAngle__C15SuspensionRacerUi = .text:0x80268F18; // type:function size:0x14 scope:global +Reset__Q215SuspensionRacer8Steering = .text:0x80268F2C; // type:function size:0x88 scope:global +GetWheelAngularVelocity__C17SuspensionTraffici = .text:0x80268FB4; // type:function size:0x14 scope:global +GetWheelRadius__C17SuspensionTrafficUi = .text:0x80268FC8; // type:function size:0x14 scope:global +GetWheelSlip__C17SuspensionTrafficUi = .text:0x80268FDC; // type:function size:0x14 scope:global +GetToleratedSlip__C17SuspensionTrafficUi = .text:0x80268FF0; // type:function size:0xC scope:global +GetWheelSkid__C17SuspensionTrafficUi = .text:0x80268FFC; // type:function size:0x14 scope:global +GetWheelLoad__C17SuspensionTrafficUi = .text:0x80269010; // type:function size:0x14 scope:global +GetWheelTraction__C17SuspensionTrafficUi = .text:0x80269024; // type:function size:0x2C scope:global +SetWheelAngularVelocity__17SuspensionTrafficif = .text:0x80269050; // type:function size:0x4 scope:global +GetNumWheels__C17SuspensionTraffic = .text:0x80269054; // type:function size:0x8 scope:global +GetWheelPos__C17SuspensionTrafficUi = .text:0x8026905C; // type:function size:0x14 scope:global +GetWheelLocalPos__C17SuspensionTrafficUi = .text:0x80269070; // type:function size:0x14 scope:global +ApplyVehicleEntryForces__17SuspensionTrafficbRCQ25UMath7Vector3T1 = .text:0x80269084; // type:function size:0x4 scope:global +GetWheelRoadHeight__C17SuspensionTrafficUi = .text:0x80269088; // type:function size:0x14 scope:global +GetCompression__C17SuspensionTrafficUi = .text:0x8026909C; // type:function size:0x14 scope:global +GetWheelRoadNormal__C17SuspensionTrafficUi = .text:0x802690B0; // type:function size:0x14 scope:global +IsWheelOnGround__C17SuspensionTrafficUi = .text:0x802690C4; // type:function size:0x28 scope:global +GetWheelRoadSurface__C17SuspensionTrafficUi = .text:0x802690EC; // type:function size:0x14 scope:global +GetWheelVelocity__C17SuspensionTrafficUi = .text:0x80269100; // type:function size:0x14 scope:global +GetNumWheelsOnGround__C17SuspensionTraffic = .text:0x80269114; // type:function size:0x8 scope:global +GetWheelSteer__C17SuspensionTrafficUi = .text:0x8026911C; // type:function size:0x14 scope:global +GetMaxSteering__C17SuspensionTraffic = .text:0x80269130; // type:function size:0x14 scope:global +GetWheelSlipAngle__C17SuspensionTrafficUi = .text:0x80269144; // type:function size:0x14 scope:global +GetWheelTraction__C16SuspensionSimpleUi = .text:0x80269158; // type:function size:0x14 scope:global +GetWheelAngularVelocity__C16SuspensionSimplei = .text:0x8026916C; // type:function size:0x14 scope:global +GetWheelRadius__C16SuspensionSimpleUi = .text:0x80269180; // type:function size:0x14 scope:global +GetWheelSlip__C16SuspensionSimpleUi = .text:0x80269194; // type:function size:0x14 scope:global +GetToleratedSlip__C16SuspensionSimpleUi = .text:0x802691A8; // type:function size:0x14 scope:global +GetWheelLoad__C16SuspensionSimpleUi = .text:0x802691BC; // type:function size:0x14 scope:global +GetWheelSkid__C16SuspensionSimpleUi = .text:0x802691D0; // type:function size:0x14 scope:global +SetWheelAngularVelocity__16SuspensionSimpleif = .text:0x802691E4; // type:function size:0x14 scope:global +GetNumWheels__C16SuspensionSimple = .text:0x802691F8; // type:function size:0x8 scope:global +GetWheelPos__C16SuspensionSimpleUi = .text:0x80269200; // type:function size:0x14 scope:global +GetWheelLocalPos__C16SuspensionSimpleUi = .text:0x80269214; // type:function size:0x14 scope:global +ApplyVehicleEntryForces__16SuspensionSimplebRCQ25UMath7Vector3T1 = .text:0x80269228; // type:function size:0x4 scope:global +GetWheelRoadHeight__C16SuspensionSimpleUi = .text:0x8026922C; // type:function size:0x14 scope:global +GetCompression__C16SuspensionSimpleUi = .text:0x80269240; // type:function size:0x14 scope:global +GetWheelRoadNormal__C16SuspensionSimpleUi = .text:0x80269254; // type:function size:0x14 scope:global +IsWheelOnGround__C16SuspensionSimpleUi = .text:0x80269268; // type:function size:0x28 scope:global +GetWheelRoadSurface__C16SuspensionSimpleUi = .text:0x80269290; // type:function size:0x14 scope:global +GetWheelVelocity__C16SuspensionSimpleUi = .text:0x802692A4; // type:function size:0x14 scope:global +GetNumWheelsOnGround__C16SuspensionSimple = .text:0x802692B8; // type:function size:0x8 scope:global +GetWheelSteer__C16SuspensionSimpleUi = .text:0x802692C0; // type:function size:0x30 scope:global +GetMaxSteering__C16SuspensionSimple = .text:0x802692F0; // type:function size:0x14 scope:global +GetWheelSlipAngle__C16SuspensionSimpleUi = .text:0x80269304; // type:function size:0x14 scope:global +GetWheelAngularVelocity__C17SuspensionTraileri = .text:0x80269318; // type:function size:0x14 scope:global +GetWheelRadius__C17SuspensionTrailerUi = .text:0x8026932C; // type:function size:0x14 scope:global +GetWheelSlip__C17SuspensionTrailerUi = .text:0x80269340; // type:function size:0x14 scope:global +GetToleratedSlip__C17SuspensionTrailerUi = .text:0x80269354; // type:function size:0xC scope:global +GetWheelLoad__C17SuspensionTrailerUi = .text:0x80269360; // type:function size:0x14 scope:global +GetWheelSkid__C17SuspensionTrailerUi = .text:0x80269374; // type:function size:0x14 scope:global +GetWheelTraction__C17SuspensionTrailerUi = .text:0x80269388; // type:function size:0x2C scope:global +SetWheelAngularVelocity__17SuspensionTrailerif = .text:0x802693B4; // type:function size:0x4 scope:global +GetNumWheels__C17SuspensionTrailer = .text:0x802693B8; // type:function size:0x8 scope:global +GetWheelPos__C17SuspensionTrailerUi = .text:0x802693C0; // type:function size:0x14 scope:global +GetWheelLocalPos__C17SuspensionTrailerUi = .text:0x802693D4; // type:function size:0x14 scope:global +ApplyVehicleEntryForces__17SuspensionTrailerbRCQ25UMath7Vector3T1 = .text:0x802693E8; // type:function size:0x4 scope:global +GetWheelRoadHeight__C17SuspensionTrailerUi = .text:0x802693EC; // type:function size:0x14 scope:global +GetCompression__C17SuspensionTrailerUi = .text:0x80269400; // type:function size:0x14 scope:global +GetWheelRoadNormal__C17SuspensionTrailerUi = .text:0x80269414; // type:function size:0x14 scope:global +IsWheelOnGround__C17SuspensionTrailerUi = .text:0x80269428; // type:function size:0x28 scope:global +GetWheelRoadSurface__C17SuspensionTrailerUi = .text:0x80269450; // type:function size:0x14 scope:global +GetWheelVelocity__C17SuspensionTrailerUi = .text:0x80269464; // type:function size:0x14 scope:global +GetNumWheelsOnGround__C17SuspensionTrailer = .text:0x80269478; // type:function size:0x8 scope:global +GetWheelSteer__C17SuspensionTrailerUi = .text:0x80269480; // type:function size:0xC scope:global +GetMaxSteering__C17SuspensionTrailer = .text:0x8026948C; // type:function size:0xC scope:global +GetWheelSlipAngle__C17SuspensionTrailerUi = .text:0x80269498; // type:function size:0x38 scope:global +SetBurnout__16SuspensionSplinef = .text:0x802694D0; // type:function size:0x8 scope:global +GetBurnout__C16SuspensionSpline = .text:0x802694D8; // type:function size:0x8 scope:global +SetBrakeLock__16SuspensionSplinebT1 = .text:0x802694E0; // type:function size:0xC scope:global +SetConstraintAngle__16SuspensionSplinef = .text:0x802694EC; // type:function size:0x40 scope:global +SetSteering__16SuspensionSplineff = .text:0x8026952C; // type:function size:0x74 scope:global +SetAnimPitch__16SuspensionSplineff = .text:0x802695A0; // type:function size:0xFC scope:global +GetAnimPitch__C16SuspensionSpline = .text:0x8026969C; // type:function size:0x8 scope:global +SetAnimRoll__16SuspensionSplineff = .text:0x802696A4; // type:function size:0xFC scope:global +GetAnimRoll__C16SuspensionSpline = .text:0x802697A0; // type:function size:0x8 scope:global +SetAnimShake__16SuspensionSplineffff = .text:0x802697A8; // type:function size:0x104 scope:global +GetAnimShake__C16SuspensionSpline = .text:0x802698AC; // type:function size:0x8 scope:global +GetWheelAngularVelocity__C16SuspensionSplinei = .text:0x802698B4; // type:function size:0x14 scope:global +GetWheelRadius__C16SuspensionSplineUi = .text:0x802698C8; // type:function size:0x14 scope:global +GetWheelSlip__C16SuspensionSplineUi = .text:0x802698DC; // type:function size:0x14 scope:global +GetToleratedSlip__C16SuspensionSplineUi = .text:0x802698F0; // type:function size:0xC scope:global +GetWheelSkid__C16SuspensionSplineUi = .text:0x802698FC; // type:function size:0x14 scope:global +GetWheelLoad__C16SuspensionSplineUi = .text:0x80269910; // type:function size:0x14 scope:global +GetWheelTraction__C16SuspensionSplineUi = .text:0x80269924; // type:function size:0x30 scope:global +SetWheelAngularVelocity__16SuspensionSplineif = .text:0x80269954; // type:function size:0x4 scope:global +GetNumWheels__C16SuspensionSpline = .text:0x80269958; // type:function size:0x8 scope:global +GetWheelPos__C16SuspensionSplineUi = .text:0x80269960; // type:function size:0x14 scope:global +GetWheelLocalPos__C16SuspensionSplineUi = .text:0x80269974; // type:function size:0x14 scope:global +ApplyVehicleEntryForces__16SuspensionSplinebRCQ25UMath7Vector3T1 = .text:0x80269988; // type:function size:0x4 scope:global +GetWheelRoadHeight__C16SuspensionSplineUi = .text:0x8026998C; // type:function size:0x14 scope:global +GetCompression__C16SuspensionSplineUi = .text:0x802699A0; // type:function size:0x14 scope:global +GetWheelRoadNormal__C16SuspensionSplineUi = .text:0x802699B4; // type:function size:0x14 scope:global +IsWheelOnGround__C16SuspensionSplineUi = .text:0x802699C8; // type:function size:0x28 scope:global +GetWheelRoadSurface__C16SuspensionSplineUi = .text:0x802699F0; // type:function size:0x14 scope:global +GetWheelVelocity__C16SuspensionSplineUi = .text:0x80269A04; // type:function size:0x14 scope:global +GetNumWheelsOnGround__C16SuspensionSpline = .text:0x80269A18; // type:function size:0x8 scope:global +GetWheelSteer__C16SuspensionSplineUi = .text:0x80269A20; // type:function size:0x1C scope:global +GetMaxSteering__C16SuspensionSpline = .text:0x80269A3C; // type:function size:0x8 scope:global +GetWheelSlipAngle__C16SuspensionSplineUi = .text:0x80269A44; // type:function size:0x14 scope:global +_._t16BehaviorSpecsPtr1ZQ36Attrib3Gen3nos = .text:0x80269A58; // type:function size:0x7C scope:global +_._t16BehaviorSpecsPtr1ZQ36Attrib3Gen9induction = .text:0x80269AD4; // type:function size:0x7C scope:global +_._t16BehaviorSpecsPtr1ZQ36Attrib3Gen6engine = .text:0x80269B50; // type:function size:0x7C scope:global +GetPerfectLaunchRange__11EngineRacerRf = .text:0x80269BCC; // type:function size:0x74 scope:global +GetMaxHorsePower__C11EngineRacer = .text:0x80269C40; // type:function size:0x8 scope:global +GetMinHorsePower__C11EngineRacer = .text:0x80269C48; // type:function size:0x50 scope:global +GetRPM__C11EngineRacer = .text:0x80269C98; // type:function size:0x8 scope:global +GetMaxRPM__C11EngineRacer = .text:0x80269CA0; // type:function size:0xC scope:global +GetPeakTorqueRPM__C11EngineRacer = .text:0x80269CAC; // type:function size:0x8 scope:global +GetRedline__C11EngineRacer = .text:0x80269CB4; // type:function size:0xC scope:global +GetMinRPM__C11EngineRacer = .text:0x80269CC0; // type:function size:0xC scope:global +GetNOSCapacity__C11EngineRacer = .text:0x80269CCC; // type:function size:0x8 scope:global +GetNOSBoost__C11EngineRacer = .text:0x80269CD4; // type:function size:0x8 scope:global +IsNOSEngaged__C11EngineRacer = .text:0x80269CDC; // type:function size:0x20 scope:global +HasNOS__C11EngineRacer = .text:0x80269CFC; // type:function size:0x34 scope:global +GetNOSFlowRate__C11EngineRacer = .text:0x80269D30; // type:function size:0xC scope:global +ChargeNOS__11EngineRacerf = .text:0x80269D3C; // type:function size:0x9C scope:global +IsEngineBraking__11EngineRacer = .text:0x80269DD8; // type:function size:0x8 scope:global +IsShiftingGear__11EngineRacer = .text:0x80269DE0; // type:function size:0x1C scope:global +IsReversing__C11EngineRacer = .text:0x80269DFC; // type:function size:0x10 scope:global +InductionType__C11EngineRacer = .text:0x80269E0C; // type:function size:0x24 scope:global +GetInductionPSI__C11EngineRacer = .text:0x80269E30; // type:function size:0x8 scope:global +InductionSpool__C11EngineRacer = .text:0x80269E38; // type:function size:0x8 scope:global +GetMaxInductionPSI__C11EngineRacer = .text:0x80269E40; // type:function size:0xC scope:global +IsBlown__C11EngineRacer = .text:0x80269E4C; // type:function size:0x8 scope:global +Repair__11EngineRacer = .text:0x80269E54; // type:function size:0x18 scope:global +IsSabotaged__C11EngineRacer = .text:0x80269E6C; // type:function size:0x1C scope:global +GetDriveTorque__C11EngineRacer = .text:0x80269E88; // type:function size:0x8 scope:global +GetTopGear__C11EngineRacer = .text:0x80269E90; // type:function size:0x24 scope:global +GetGear__C11EngineRacer = .text:0x80269EB4; // type:function size:0x8 scope:global +IsGearChanging__C11EngineRacer = .text:0x80269EBC; // type:function size:0x1C scope:global +Shift__11EngineRacer6GearID = .text:0x80269ED8; // type:function size:0x24 scope:global +GetShiftStatus__C11EngineRacer = .text:0x80269EFC; // type:function size:0x8 scope:global +GetShiftPotential__C11EngineRacer = .text:0x80269F04; // type:function size:0x8 scope:global +UseRevLimiter__C11EngineRacer = .text:0x80269F0C; // type:function size:0x8 scope:global +GetNumGearRatios__C11EngineRacer = .text:0x80269F14; // type:function size:0x24 scope:global +SportShift__14EngineDragster6GearID = .text:0x80269F38; // type:function size:0x8 scope:global +GetShiftBoost__C14EngineDragster = .text:0x80269F40; // type:function size:0x8C scope:global +GetOverRev__C14EngineDragster = .text:0x80269FCC; // type:function size:0x8 scope:global +GetHeat__C14EngineDragster = .text:0x80269FD4; // type:function size:0x40 scope:global +UseRevLimiter__C14EngineDragster = .text:0x8026A014; // type:function size:0x48 scope:global +GetDriveTorque__C12EngineSpline = .text:0x8026A05C; // type:function size:0xC scope:global +GetMaxHorsePower__C12EngineSpline = .text:0x8026A068; // type:function size:0x8 scope:global +GetMinHorsePower__C12EngineSpline = .text:0x8026A070; // type:function size:0x50 scope:global +GetRPM__C12EngineSpline = .text:0x8026A0C0; // type:function size:0x8 scope:global +GetMaxRPM__C12EngineSpline = .text:0x8026A0C8; // type:function size:0xC scope:global +GetPeakTorqueRPM__C12EngineSpline = .text:0x8026A0D4; // type:function size:0x8 scope:global +GetRedline__C12EngineSpline = .text:0x8026A0DC; // type:function size:0xC scope:global +GetMinRPM__C12EngineSpline = .text:0x8026A0E8; // type:function size:0xC scope:global +GetNOSCapacity__C12EngineSpline = .text:0x8026A0F4; // type:function size:0x8 scope:global +IsNOSEngaged__C12EngineSpline = .text:0x8026A0FC; // type:function size:0x8 scope:global +HasNOS__C12EngineSpline = .text:0x8026A104; // type:function size:0x20 scope:global +GetNOSFlowRate__C12EngineSpline = .text:0x8026A124; // type:function size:0xC scope:global +ChargeNOS__12EngineSplinef = .text:0x8026A130; // type:function size:0x48 scope:global +GetNOSBoost__C12EngineSpline = .text:0x8026A178; // type:function size:0xC scope:global +IsEngineBraking__12EngineSpline = .text:0x8026A184; // type:function size:0x8 scope:global +IsShiftingGear__12EngineSpline = .text:0x8026A18C; // type:function size:0x1C scope:global +IsReversing__C12EngineSpline = .text:0x8026A1A8; // type:function size:0x10 scope:global +GetTopGear__C12EngineSpline = .text:0x8026A1B8; // type:function size:0x24 scope:global +GetGear__C12EngineSpline = .text:0x8026A1DC; // type:function size:0x8 scope:global +IsGearChanging__C12EngineSpline = .text:0x8026A1E4; // type:function size:0x1C scope:global +GetShiftStatus__C12EngineSpline = .text:0x8026A200; // type:function size:0x8 scope:global +GetShiftPotential__C12EngineSpline6GearIDf = .text:0x8026A208; // type:function size:0x8 scope:global +GetShiftPotential__C12EngineSpline = .text:0x8026A210; // type:function size:0x8 scope:global +SetNitro__12EngineSplineb = .text:0x8026A218; // type:function size:0x8 scope:global +SetNeutralRev__12EngineSplinebff = .text:0x8026A220; // type:function size:0x24 scope:global +GetNumGearRatios__C12EngineSpline = .text:0x8026A244; // type:function size:0x24 scope:global +_._t16BehaviorSpecsPtr1ZQ36Attrib3Gen12chopperspecs = .text:0x8026A268; // type:function size:0x7C scope:global +_._t16BehaviorSpecsPtr1ZQ36Attrib3Gen8pvehicle = .text:0x8026A2E4; // type:function size:0x7C scope:global +GetPower__C13SimpleChopper = .text:0x8026A360; // type:function size:0xC scope:global +GetRPM__C13SimpleChopper = .text:0x8026A36C; // type:function size:0xC scope:global +GetMaxRPM__C13SimpleChopper = .text:0x8026A378; // type:function size:0xC scope:global +GetRedline__C13SimpleChopper = .text:0x8026A384; // type:function size:0xC scope:global +GetMinRPM__C13SimpleChopper = .text:0x8026A390; // type:function size:0xC scope:global +GetMinGearRPM__C13SimpleChopperi = .text:0x8026A39C; // type:function size:0xC scope:global +MatchSpeed__13SimpleChopperf = .text:0x8026A3A8; // type:function size:0x4 scope:global +GetNOSCapacity__C13SimpleChopper = .text:0x8026A3AC; // type:function size:0xC scope:global +IsNOSEngaged__C13SimpleChopper = .text:0x8026A3B8; // type:function size:0x8 scope:global +HasNOS__C13SimpleChopper = .text:0x8026A3C0; // type:function size:0x8 scope:global +SetDesiredVelocity__13SimpleChopperRCQ25UMath7Vector3 = .text:0x8026A3C8; // type:function size:0x20 scope:global +GetDesiredVelocity__13SimpleChopperRQ25UMath7Vector3 = .text:0x8026A3E8; // type:function size:0x20 scope:global +MaxDeceleration__13SimpleChopperb = .text:0x8026A408; // type:function size:0x8 scope:global +SetDesiredFacingVector__13SimpleChopperRCQ25UMath7Vector3 = .text:0x8026A410; // type:function size:0x20 scope:global +GetDesiredFacingVector__13SimpleChopperRQ25UMath7Vector3 = .text:0x8026A430; // type:function size:0x20 scope:global +GetMinHorsePower__C13EngineTraffic = .text:0x8026A450; // type:function size:0x50 scope:global +GetRPM__C13EngineTraffic = .text:0x8026A4A0; // type:function size:0x8 scope:global +GetMaxRPM__C13EngineTraffic = .text:0x8026A4A8; // type:function size:0xC scope:global +GetPeakTorqueRPM__C13EngineTraffic = .text:0x8026A4B4; // type:function size:0x8 scope:global +GetRedline__C13EngineTraffic = .text:0x8026A4BC; // type:function size:0xC scope:global +GetMinRPM__C13EngineTraffic = .text:0x8026A4C8; // type:function size:0xC scope:global +GetNOSCapacity__C13EngineTraffic = .text:0x8026A4D4; // type:function size:0xC scope:global +IsNOSEngaged__C13EngineTraffic = .text:0x8026A4E0; // type:function size:0x8 scope:global +HasNOS__C13EngineTraffic = .text:0x8026A4E8; // type:function size:0x8 scope:global +GetNOSFlowRate__C13EngineTraffic = .text:0x8026A4F0; // type:function size:0xC scope:global +ChargeNOS__13EngineTrafficf = .text:0x8026A4FC; // type:function size:0x4 scope:global +GetNOSBoost__C13EngineTraffic = .text:0x8026A500; // type:function size:0xC scope:global +IsEngineBraking__13EngineTraffic = .text:0x8026A50C; // type:function size:0x8 scope:global +IsShiftingGear__13EngineTraffic = .text:0x8026A514; // type:function size:0x1C scope:global +IsReversing__C13EngineTraffic = .text:0x8026A530; // type:function size:0x10 scope:global +InductionType__C13EngineTraffic = .text:0x8026A540; // type:function size:0x8 scope:global +GetInductionPSI__C13EngineTraffic = .text:0x8026A548; // type:function size:0xC scope:global +InductionSpool__C13EngineTraffic = .text:0x8026A554; // type:function size:0xC scope:global +GetMaxInductionPSI__C13EngineTraffic = .text:0x8026A560; // type:function size:0xC scope:global +GetDriveTorque__C13EngineTraffic = .text:0x8026A56C; // type:function size:0x8 scope:global +GetTopGear__C13EngineTraffic = .text:0x8026A574; // type:function size:0x24 scope:global +GetGear__C13EngineTraffic = .text:0x8026A598; // type:function size:0x8 scope:global +IsGearChanging__C13EngineTraffic = .text:0x8026A5A0; // type:function size:0x1C scope:global +GetShiftStatus__C13EngineTraffic = .text:0x8026A5BC; // type:function size:0x8 scope:global +GetShiftPotential__C13EngineTraffic6GearIDf = .text:0x8026A5C4; // type:function size:0x8 scope:global +GetShiftPotential__C13EngineTraffic = .text:0x8026A5CC; // type:function size:0x8 scope:global +GetNumGearRatios__C13EngineTraffic = .text:0x8026A5D4; // type:function size:0x24 scope:global +_._Q211DrawVehicle6Effect = .text:0x8026A5F8; // type:function size:0x70 scope:global +GetModelHandle__C11DrawVehicle = .text:0x8026A668; // type:function size:0x8 scope:global +GetModel__C11DrawVehicle = .text:0x8026A670; // type:function size:0x8 scope:global +GetModel__11DrawVehicle = .text:0x8026A678; // type:function size:0x8 scope:global +OnProcessFrame__11DrawVehiclef = .text:0x8026A680; // type:function size:0x4 scope:global +GetLinearVelocity__C11DrawVehicleRQ25UMath7Vector3 = .text:0x8026A684; // type:function size:0x38 scope:global +GetAngularVelocity__C11DrawVehicleRQ25UMath7Vector3 = .text:0x8026A6BC; // type:function size:0x38 scope:global +GetTransform__C11DrawVehicleRQ25UMath7Matrix4 = .text:0x8026A6F4; // type:function size:0x38 scope:global +GetPartName__C11DrawVehicle = .text:0x8026A72C; // type:function size:0x14 scope:global +GetWorldID__C11DrawVehicle = .text:0x8026A740; // type:function size:0x38 scope:global +GetCollisionGeometry__C11DrawVehicle = .text:0x8026A778; // type:function size:0x8 scope:global +GetAttributes__C11DrawVehicle = .text:0x8026A780; // type:function size:0x38 scope:global +GetSimable__C11DrawVehicle = .text:0x8026A7B8; // type:function size:0x8 scope:global +GetRootModel__C11DrawVehicle = .text:0x8026A7C0; // type:function size:0x8 scope:global +GetParentModel__C11DrawVehicle = .text:0x8026A7C8; // type:function size:0x8 scope:global +IsRootModel__C11DrawVehicle = .text:0x8026A7D0; // type:function size:0x8 scope:global +GetEventSequencer__11DrawVehicle = .text:0x8026A7D8; // type:function size:0x38 scope:global +GetCausalityTime__C11DrawVehicle = .text:0x8026A810; // type:function size:0x8 scope:global +Attach__11DrawVehiclePQ33UTL3COM8IUnknown = .text:0x8026A818; // type:function size:0x24 scope:global +Detach__11DrawVehiclePQ33UTL3COM8IUnknown = .text:0x8026A83C; // type:function size:0x24 scope:global +IsAttached__C11DrawVehiclePCQ33UTL3COM8IUnknown = .text:0x8026A860; // type:function size:0x24 scope:global +OnAttached__11DrawVehicleP11IAttachable = .text:0x8026A884; // type:function size:0x4 scope:global +OnDetached__11DrawVehicleP11IAttachable = .text:0x8026A888; // type:function size:0x4 scope:global +GetAttachments__C11DrawVehicle = .text:0x8026A88C; // type:function size:0x8 scope:global +GetAttributes__CQ211DrawVehicle4Part = .text:0x8026A894; // type:function size:0x8 scope:global +HidePart__8DrawHeliRC6UCrc32 = .text:0x8026A89C; // type:function size:0x4 scope:global +ShowPart__8DrawHeliRC6UCrc32 = .text:0x8026A8A0; // type:function size:0x4 scope:global +IsPartVisible__C8DrawHeliRC6UCrc32 = .text:0x8026A8A4; // type:function size:0x8 scope:global +InView__C8DrawHeli = .text:0x8026A8AC; // type:function size:0x8 scope:global +IsRenderable__C8DrawHeli = .text:0x8026A8B4; // type:function size:0x30 scope:global +DistanceToView__C8DrawHeli = .text:0x8026A8E4; // type:function size:0x8 scope:global +Reset__8DrawHeli = .text:0x8026A8EC; // type:function size:0x4 scope:global +OnTaskSimulate__8DrawHelif = .text:0x8026A8F0; // type:function size:0x4 scope:global +__Q33UTL3Stdt3map3Z6UCrc32ZiZ9_type_map = .text:0x8026A8F4; // type:function size:0x74 scope:global +InView__C7DrawCar = .text:0x8026A968; // type:function size:0x8 scope:global +IsRenderable__C7DrawCar = .text:0x8026A970; // type:function size:0x30 scope:global +DistanceToView__C7DrawCar = .text:0x8026A9A0; // type:function size:0x8 scope:global +Reset__7DrawCar = .text:0x8026A9A8; // type:function size:0x4 scope:global +OnTaskSimulate__7DrawCarf = .text:0x8026A9AC; // type:function size:0x4 scope:global +_._11DrawTraffic = .text:0x8026A9B0; // type:function size:0x98 scope:global +_._18DrawPerformanceCar = .text:0x8026AA48; // type:function size:0x98 scope:global +_._10DrawNISCar = .text:0x8026AAE0; // type:function size:0x98 scope:global +_._10DrawCopCar = .text:0x8026AB78; // type:function size:0x98 scope:global +_._11DrawRaceCar = .text:0x8026AC10; // type:function size:0x98 scope:global +_._Q29SoundConn12Pkt_Car_Open = .text:0x8026ACA8; // type:function size:0x34 scope:global +ConnectionClass__Q29SoundConn12Pkt_Car_Open = .text:0x8026ACDC; // type:function size:0x64 scope:global +Size__Q29SoundConn12Pkt_Car_Open = .text:0x8026AD40; // type:function size:0x8 scope:global +Type__Q29SoundConn12Pkt_Car_Open = .text:0x8026AD48; // type:function size:0x20 scope:global +_._Q29SoundConn13Pkt_Heli_Open = .text:0x8026AD68; // type:function size:0x34 scope:global +ConnectionClass__Q29SoundConn13Pkt_Heli_Open = .text:0x8026AD9C; // type:function size:0x64 scope:global +Size__Q29SoundConn13Pkt_Heli_Open = .text:0x8026AE00; // type:function size:0x8 scope:global +Type__Q29SoundConn13Pkt_Heli_Open = .text:0x8026AE08; // type:function size:0x20 scope:global +_IHandle__9ICarAudio = .text:0x8026AE28; // type:function size:0xC scope:global +_._9ICarAudio = .text:0x8026AE34; // type:function size:0x54 scope:global +Reset__8SoundCar = .text:0x8026AE88; // type:function size:0x4 scope:global +OnTaskSimulate__8SoundCarf = .text:0x8026AE8C; // type:function size:0x4 scope:global +IsAudible__C8SoundCar = .text:0x8026AE90; // type:function size:0x30 scope:global +GetRPM__C8SoundCar = .text:0x8026AEC0; // type:function size:0x8 scope:global +OnServiceTire__8SoundCarRQ29SoundConn15Pkt_Car_ServiceUiQ25Sound11WheelConfig = .text:0x8026AEC8; // type:function size:0x4 scope:global +_._12SoundTraffic = .text:0x8026AECC; // type:function size:0x8C scope:global +_._8SoundCop = .text:0x8026AF58; // type:function size:0x8C scope:global +_._10SoundRacer = .text:0x8026AFE4; // type:function size:0x8C scope:global +HasResetPosition__8ResetCar = .text:0x8026B070; // type:function size:0x18 scope:global +SetResetPosition__8ResetCarRCQ25UMath7Vector3T1 = .text:0x8026B088; // type:function size:0x118 scope:global +ClearResetPosition__8ResetCar = .text:0x8026B1A0; // type:function size:0x14 scope:global +IsAudible__C9SoundHeli = .text:0x8026B1B4; // type:function size:0x30 scope:global +Reset__9SoundHeli = .text:0x8026B1E4; // type:function size:0x4 scope:global +OnTaskSimulate__9SoundHelif = .text:0x8026B1E8; // type:function size:0x4 scope:global +_._10SpikeStrip = .text:0x8026B1EC; // type:function size:0x74 scope:global +Reset__10SpikeStrip = .text:0x8026B260; // type:function size:0x4 scope:global +Construct__10SpikeStripRC14BehaviorParams = .text:0x8026B264; // type:function size:0x44 scope:global +SetStatus__Q29RigidBody8VolatileUi = .text:0x8026B2A8; // type:function size:0x10 scope:global +RemoveStatus__Q29RigidBody8VolatileUi = .text:0x8026B2B8; // type:function size:0x10 scope:global +GetStatus__CQ29RigidBody8VolatileUi = .text:0x8026B2C8; // type:function size:0x18 scope:global +__as__Q36Attrib3Gen18collisionreactionsRCQ26Attrib8Instance = .text:0x8026B2E0; // type:function size:0x30 scope:global +SType__Q210RenderConn12Pkt_Car_Open = .text:0x8026B310; // type:function size:0x58 scope:global +SType__Q210RenderConn13Pkt_Heli_Open = .text:0x8026B368; // type:function size:0x58 scope:global +SType__Q210RenderConn24Pkt_VehicleFragment_Open = .text:0x8026B3C0; // type:function size:0x58 scope:global +SType__Q29SoundConn12Pkt_Car_Open = .text:0x8026B418; // type:function size:0x58 scope:global +SType__Q29SoundConn13Pkt_Heli_Open = .text:0x8026B470; // type:function size:0x58 scope:global +_GLOBAL_.I._t10ScratchPtr1ZQ29RigidBody8Volatile.mWorkSpace = .text:0x8026B4C8; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x8026B4F4; // type:label scope:local +FlushCaches__Fv = .text:0x8026B4F4; // type:function size:0x20 scope:global +EnableInterrupts__Fv = .text:0x8026B514; // type:function size:0x20 scope:global +InitPlatform__Fv = .text:0x8026B534; // type:function size:0x140 scope:global +InitDisplaySystem__Fv = .text:0x8026B674; // type:function size:0x50 scope:global +bDoWithStack = .text:0x8026B6C4; // type:function size:0x8 scope:global +FinishedRenderingFEngLayer__Fv = .text:0x8026B6CC; // type:function size:0x4 scope:global +GC_GetOSLanguage__Fv = .text:0x8026B6D0; // type:function size:0x58 scope:global +CheckReset__Fi = .text:0x8026B728; // type:function size:0x64 scope:global +DVDValidErrorState__Fi = .text:0x8026B78C; // type:function size:0x64 scope:global +DVDErrorTask__FPvi = .text:0x8026B7F0; // type:function size:0x770 scope:global +ServicePlatform__Fv = .text:0x8026BF60; // type:function size:0x4 scope:global +eInitTexture__Fv = .text:0x8026BF64; // type:function size:0x4 scope:global +eSetTexture__FP11TextureInfoi = .text:0x8026BF68; // type:function size:0x94 scope:global +eUnSwizzle8bitPalette__FPUi = .text:0x8026BFFC; // type:function size:0x4 scope:global +eSwizzle8bitPalette__FPUi = .text:0x8026C000; // type:function size:0x4 scope:global +SetPlatInfo__24TextureInfoPlatInterfaceP19TextureInfoPlatInfo = .text:0x8026C004; // type:function size:0x8 scope:global +Init__24TextureInfoPlatInterface = .text:0x8026C00C; // type:function size:0x64 scope:global +Close__24TextureInfoPlatInterface = .text:0x8026C070; // type:function size:0x4 scope:global +LockImage__24TextureInfoPlatInterface15TextureLockType = .text:0x8026C074; // type:function size:0x8 scope:global +UnlockImage__24TextureInfoPlatInterfacePv = .text:0x8026C07C; // type:function size:0x4 scope:global +LockPalette__24TextureInfoPlatInterface15TextureLockType = .text:0x8026C080; // type:function size:0xB0 scope:global +UnlockPalette__24TextureInfoPlatInterfacePv = .text:0x8026C130; // type:function size:0xAC scope:global +CreateAnimData__24TextureInfoPlatInterface = .text:0x8026C1DC; // type:function size:0x48 scope:global +ReleaseAnimData__24TextureInfoPlatInterfacePv = .text:0x8026C224; // type:function size:0x28 scope:global +SetAnimData__24TextureInfoPlatInterfacePv = .text:0x8026C24C; // type:function size:0x40 scope:global +HasClut__19TextureInfoPlatInfo = .text:0x8026C28C; // type:function size:0x1C scope:global +SetImage__19TextureInfoPlatInfoiiiiPvT5ii = .text:0x8026C2A8; // type:function size:0x1DC scope:global +SetImage__19TextureInfoPlatInfoP11TextureInfo = .text:0x8026C484; // type:function size:0x70 scope:global +AutoCalibrateWheel__Fi = .text:0x8026C4F4; // type:function size:0x80 scope:global +ActualReadJoystickData__Fv = .text:0x8026C574; // type:function size:0x634 scope:global +PlatformInitJoystick__Fv = .text:0x8026CBA8; // type:function size:0x80 scope:global +ReadLGWheelDataForProgressiveMenu__Fv = .text:0x8026CC28; // type:function size:0x30 scope:global +ReadLGWheelButtonsForProgressiveMenu__Fi = .text:0x8026CC58; // type:function size:0x5C scope:global +IsWheelActiveForProgressiveMenu__Fi = .text:0x8026CCB4; // type:function size:0x40 scope:global +eBuildSunPoly__FP5ePolyP8SunLayerfff = .text:0x8026CCF4; // type:function size:0x230 scope:global +eBuildSunPolyFix__FP5ePolyP8SunLayerfff = .text:0x8026CF24; // type:function size:0x290 scope:global +eUpdateSunPolyFix__FP5ePolyP8SunLayerfff = .text:0x8026D1B4; // type:function size:0xDC scope:global +eCalcSunVisibility__FP5eViewff = .text:0x8026D290; // type:function size:0x168 scope:global +eRenderSun__FP5eView = .text:0x8026D3F8; // type:function size:0x274 scope:global +eInitSunPat__Fv = .text:0x8026D66C; // type:function size:0x78 scope:global +afxBeginBillboardedParticles__FP5eView = .text:0x8026D6E4; // type:function size:0xBC scope:global +afxBeginBillboardedParticleBatch__FP11TextureInfo = .text:0x8026D7A0; // type:function size:0x40 scope:global +afxEndBillboardedParticleBatch__FP11TextureInfofi = .text:0x8026D7E0; // type:function size:0x8 scope:global +afxEndBillboardedParticles__Fv = .text:0x8026D7E8; // type:function size:0x8 scope:global +PlatGetViewVectors__FP5eViewRQ25UMath7Vector3N21 = .text:0x8026D7F0; // type:function size:0x6C scope:global +PlatStartParticleRender__FP5eViewP11TextureInfoUi = .text:0x8026D85C; // type:function size:0x38 scope:global +PlatEndParticleRender__Fv = .text:0x8026D894; // type:function size:0x34 scope:global +PlatAddParticle__FRC15EmitterParticleRCQ25UMath7Vector3T1UiP8bVector4T4 = .text:0x8026D8C8; // type:function size:0x260 scope:global +__15DemoDiscManager = .text:0x8026DB28; // type:function size:0x18 scope:global +Init__15DemoDiscManageriPPc = .text:0x8026DB40; // type:function size:0x4 scope:global +SetEndReason__15DemoDiscManager17DemoDiscEndReason = .text:0x8026DB44; // type:function size:0x4 scope:global +FillInTextureInfo__11MoviePlayerPUiP11TextureInfoPQ29RealShape5Shape = .text:0x8026DB48; // type:function size:0x18 scope:global +GCDrawMovie__Fv = .text:0x8026DB60; // type:function size:0x30 scope:global +PlatSetFirstMovieFrame__FP11TextureInfoPQ29RealShape5Shapeb = .text:0x8026DB90; // type:function size:0x54 scope:global +RCMP_GetMaxFramesOutStanding__Fv = .text:0x8026DBE4; // type:function size:0x8 scope:global +PlatFinishMovie__Fv = .text:0x8026DBEC; // type:function size:0x44 scope:global +__7GCHW_VDPQ29RealShape5Shapeb = .text:0x8026DC30; // type:function size:0x198 scope:global +_._7GCHW_VD = .text:0x8026DDC8; // type:function size:0x44 scope:global +iDraw__7GCHW_VD = .text:0x8026DE0C; // type:function size:0x550 scope:global +__6Wheels = .text:0x8026E35C; // type:function size:0x68 scope:global +ReadAll__6Wheels = .text:0x8026E3C4; // type:function size:0x164 scope:global +ButtonIsPressed__6WheelslUl = .text:0x8026E528; // type:function size:0x20 scope:global +IsConnected__6Wheelsl = .text:0x8026E548; // type:function size:0x18 scope:global +PedalsConnected__6Wheelsl = .text:0x8026E560; // type:function size:0x14 scope:global +__4Ramp = .text:0x8026E574; // type:function size:0x30 scope:global +__8Periodic = .text:0x8026E5A4; // type:function size:0x30 scope:global +DownloadForce__8PeriodicllRUlUcUlUlUcUsUsUssUlUlUcUc = .text:0x8026E5D4; // type:function size:0x12C scope:global +UpdateForce__8PeriodicllUcUlUlUcUsUsUssUlUlUcUc = .text:0x8026E700; // type:function size:0xE4 scope:global +__8LGWheels = .text:0x8026E7E4; // type:function size:0x84 scope:global +InitVars__8LGWheelsl = .text:0x8026E868; // type:function size:0x98 scope:global +ReadAll__8LGWheels = .text:0x8026E900; // type:function size:0xB0 scope:global +StopForce__8LGWheelsll = .text:0x8026E9B0; // type:function size:0x40C scope:global +IsConnected__8LGWheelsl = .text:0x8026EDBC; // type:function size:0x24 scope:global +IsPlaying__8LGWheelsll = .text:0x8026EDE0; // type:function size:0x108 scope:global +ButtonIsPressed__8LGWheelslUl = .text:0x8026EEE8; // type:function size:0x24 scope:global +PedalsConnected__8LGWheelsl = .text:0x8026EF0C; // type:function size:0x24 scope:global +PlayAutoCalibAndSpringForce__8LGWheelsl = .text:0x8026EF30; // type:function size:0x12C scope:global +PlaySpringForce__8LGWheelslScUcs = .text:0x8026F05C; // type:function size:0x1E0 scope:global +StopSpringForce__8LGWheelsl = .text:0x8026F23C; // type:function size:0x24 scope:global +SameSpringForceParams__8LGWheelslScUcs = .text:0x8026F260; // type:function size:0x44 scope:global +PlayConstantForce__8LGWheelslsUs = .text:0x8026F2A4; // type:function size:0x1B0 scope:global +StopConstantForce__8LGWheelsl = .text:0x8026F454; // type:function size:0x24 scope:global +SameConstantForceParams__8LGWheelslsUs = .text:0x8026F478; // type:function size:0x34 scope:global +PlayDamperForce__8LGWheelsls = .text:0x8026F4AC; // type:function size:0x1D4 scope:global +StopDamperForce__8LGWheelsl = .text:0x8026F680; // type:function size:0x24 scope:global +SameDamperForceParams__8LGWheelsls = .text:0x8026F6A4; // type:function size:0x1C scope:global +PlayFrontalCollisionForce__8LGWheelslUc = .text:0x8026F6C0; // type:function size:0x1B8 scope:global +SameFrontalCollisionForceParams__8LGWheelsls = .text:0x8026F878; // type:function size:0x1C scope:global +PlayDirtRoadEffect__8LGWheelslUc = .text:0x8026F894; // type:function size:0x204 scope:global +StopDirtRoadEffect__8LGWheelsl = .text:0x8026FA98; // type:function size:0x24 scope:global +SameDirtRoadEffectParams__8LGWheelsls = .text:0x8026FABC; // type:function size:0x1C scope:global +PlayBumpyRoadEffect__8LGWheelslUc = .text:0x8026FAD8; // type:function size:0x204 scope:global +StopBumpyRoadEffect__8LGWheelsl = .text:0x8026FCDC; // type:function size:0x24 scope:global +SameBumpyRoadEffectParams__8LGWheelsls = .text:0x8026FD00; // type:function size:0x1C scope:global +PlaySlipperyRoadEffect__8LGWheelsls = .text:0x8026FD1C; // type:function size:0x258 scope:global +StopSlipperyRoadEffect__8LGWheelsl = .text:0x8026FF74; // type:function size:0x24 scope:global +SameSlipperyRoadEffectParams__8LGWheelsls = .text:0x8026FF98; // type:function size:0x1C scope:global +PlaySurfaceEffect__8LGWheelslUcUcUs = .text:0x8026FFB4; // type:function size:0x330 scope:global +StopSurfaceEffect__8LGWheelsl = .text:0x802702E4; // type:function size:0x24 scope:global +SameSurfaceEffectParams__8LGWheelslUcUcUs = .text:0x80270308; // type:function size:0x40 scope:global +PlayCarAirborne__8LGWheelsl = .text:0x80270348; // type:function size:0x1B4 scope:global +StopCarAirborne__8LGWheelsl = .text:0x802704FC; // type:function size:0x24 scope:global +__5Force = .text:0x80270520; // type:function size:0x30 scope:global +InitVars__5Force = .text:0x80270550; // type:function size:0x44 scope:global +Start__5Forcell = .text:0x80270594; // type:function size:0x94 scope:global +Stop__5Forcell = .text:0x80270628; // type:function size:0x94 scope:global +Destroy__5Forcell = .text:0x802706BC; // type:function size:0x9C scope:global +__8Constant = .text:0x80270758; // type:function size:0x30 scope:global +DownloadForce__8ConstantllRUlUlUlsUsUlUlUcUc = .text:0x80270788; // type:function size:0x110 scope:global +UpdateForce__8ConstantllUlUlsUsUlUlUcUc = .text:0x80270898; // type:function size:0xCC scope:global +__9Condition = .text:0x80270964; // type:function size:0x30 scope:global +DownloadForce__9ConditionllRUlUcUlUlScUcUcUcss = .text:0x80270994; // type:function size:0x124 scope:global +UpdateForce__9ConditionllUcUlUlScUcUcUcss = .text:0x80270AB8; // type:function size:0xDC scope:global +AddSpark__14XSpriteManagerRC10NGParticleP11TextureInfo = .text:0x80270B94; // type:function size:0x174 scope:global +RenderAll__14XSpriteManagerP5eView = .text:0x80270D08; // type:function size:0xF4 scope:global +__9CGEmitterPCQ26Attrib10CollectionRC14XenonEffectDef = .text:0x80270DFC; // type:function size:0x114 scope:global +GetNextParticle__12ParticleList = .text:0x80270F10; // type:function size:0x28 scope:global +GeneratePolys__12ParticleList = .text:0x80270F38; // type:function size:0xD0 scope:global +SpawnParticles__9CGEmitterff = .text:0x80271008; // type:function size:0x4FC scope:global +AgeParticles__12ParticleListf = .text:0x80271504; // type:function size:0x140 scope:global +__8NGEffectRC14XenonEffectDef = .text:0x80271644; // type:function size:0x118 scope:global +UpdateXenonEmitters__Ff = .text:0x8027175C; // type:function size:0x510 scope:global +DrawXenonEmitters__FP5eView = .text:0x80271C6C; // type:function size:0x4 scope:global +ClearXenonEmitters__Fv = .text:0x80271C70; // type:function size:0x5C scope:global +AddXenonEffect__FP12EmitterGroupPCQ26Attrib10CollectionPCQ25UMath7Matrix4PCQ25UMath7Vector4 = .text:0x80271CCC; // type:function size:0x4A4 scope:global +GetPrefix__13MemoryCardImp = .text:0x80272170; // type:function size:0xC scope:global +ConstructSaveInfo__13MemoryCardImpQ210MemoryCard8SaveTypePCci = .text:0x8027217C; // type:function size:0xD8 scope:global +DestructSaveInfo__13MemoryCardImp = .text:0x80272254; // type:function size:0x40 scope:global +GetMemcard__Fv = .text:0x80272294; // type:function size:0xC scope:global +BootupCheckDone__13MemoryCardImpQ211RealmcIface10CardStatusPQ211RealmcIface18BootupCheckResults = .text:0x802722A0; // type:function size:0xA0 scope:global +reserve__Q24_STLt6vector2Z14XenonEffectDefZQ33UTL3Stdt9Allocator2Z14XenonEffectDefZ20_type_XenonEffectDefUi = .text:0x80272340; // type:function size:0x1DC scope:global +__static_initialization_and_destruction_0 = .text:0x8027251C; // type:function size:0x154 scope:local +Init__7VMStats = .text:0x80272670; // type:function size:0x30 scope:global +Init__14VMStatsManagerPCc = .text:0x802726A0; // type:function size:0x80 scope:global +_._9CGEmitter = .text:0x80272720; // type:function size:0x6C scope:global +_GLOBAL_.I.snProfilerEnable = .text:0x8027278C; // type:function size:0x2C scope:local +InitServices__10RenderConnv = .text:0x802727B8; // type:function size:0x20 scope:global +RestoreServices__10RenderConnv = .text:0x802727D8; // type:function size:0x24 scope:global +UpdateLoading__10RenderConnv = .text:0x802727FC; // type:function size:0x20 scope:global +UpdateServices__10RenderConnf = .text:0x8027281C; // type:function size:0x54 scope:global +__static_initialization_and_destruction_0 = .text:0x80272870; // type:function size:0x50 scope:local +_GLOBAL_.I.ColourConvertXBoxToPS2__Fi = .text:0x802728C0; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x802728EC; // type:label scope:local +__3OBB = .text:0x802728EC; // type:function size:0x4 scope:global +_._3OBB = .text:0x802728F0; // type:function size:0x48 scope:global +Reset__3OBBRCQ25UMath7Matrix4RCQ25UMath7Vector3T2 = .text:0x80272938; // type:function size:0xE8 scope:global +CheckOBBOverlap__3OBBP3OBB = .text:0x80272A20; // type:function size:0x16C scope:global +BoxVsBox__3OBBP3OBBN21 = .text:0x80272B8C; // type:function size:0x280 scope:global +SphereVsBox__3OBBP3OBBN21 = .text:0x80272E0C; // type:function size:0x308 scope:global +SphereVsSphere__3OBBP3OBBN21 = .text:0x80273114; // type:function size:0x138 scope:global +CheckOBBOverlapAndFindIntersection__3OBBP3OBB = .text:0x8027324C; // type:function size:0xAC scope:global +ValidateHeap__Q23Sim9SubSystembT1 = .text:0x802732F8; // type:function size:0x4 scope:global +InitTimers__Q23Sim8Internalv = .text:0x802732FC; // type:function size:0x38 scope:global +__7SimTaskUifPQ23Sim9ITaskablefQ23Sim8TaskMode = .text:0x80273334; // type:function size:0xAC scope:global +Link__7SimTask = .text:0x802733E0; // type:function size:0x90 scope:global +UnLink__7SimTask = .text:0x80273470; // type:function size:0x44 scope:global +_._7SimTask = .text:0x802734B4; // type:function size:0x68 scope:global +Run__7SimTaskff = .text:0x8027351C; // type:function size:0x11C scope:global +UpdateAll__7SimTaskff = .text:0x80273638; // type:function size:0x68 scope:global +__9SimSystem = .text:0x802736A0; // type:function size:0x360 scope:global +_._9SimSystem = .text:0x80273A00; // type:function size:0x206C scope:global +DistanceToCamera__C9SimSystemRCQ25UMath7Vector3 = .text:0x80275A6C; // type:function size:0x8C scope:global +FetchCameras__9SimSystem = .text:0x80275AF8; // type:function size:0x1EC scope:global +OnTask__9SimSystemP10HSIMTASK__f = .text:0x80275CE4; // type:function size:0x154 scope:global +CollectGarbage__9SimSystem = .text:0x80275E38; // type:function size:0xC34 scope:global +RunAllTasks__9SimSystemf = .text:0x80276A6C; // type:function size:0x28 scope:global +UpdateFrame__9SimSystem = .text:0x80276A94; // type:function size:0x1F8 scope:global +PauseFFB__FP7IPlayer = .text:0x80276C8C; // type:function size:0x74 scope:local +ClearInput__FP7IPlayer = .text:0x80276D00; // type:function size:0xA4 scope:local +PauseInput__9SimSystemb = .text:0x80276DA4; // type:function size:0x174 scope:global +SetState__9SimSystemQ23Sim5State = .text:0x80276F18; // type:function size:0x14 scope:global +ModifyTask__9SimSystemP10HSIMTASK__f = .text:0x80276F2C; // type:function size:0x34 scope:global +AddTask__9SimSystemRC6UCrc32fPQ23Sim9ITaskablefQ23Sim8TaskMode = .text:0x80276F60; // type:function size:0x164 scope:global +RemoveTask__9SimSystemP10HSIMTASK__PQ23Sim9ITaskable = .text:0x802770C4; // type:function size:0x3C scope:global +Start__9SimSystemG6UCrc32 = .text:0x80277100; // type:function size:0x50 scope:global +GetRB__C15SimCollisionMapi = .text:0x80277150; // type:function size:0x24 scope:global +GetSRB__C15SimCollisionMapi = .text:0x80277174; // type:function size:0x24 scope:global +GetOrderedBody__C15SimCollisionMapi = .text:0x80277198; // type:function size:0x34 scope:global +AddListener__Q23Sim9CollisionPQ33Sim9Collision9IListenerP10HSIMABLE__PCc = .text:0x802771CC; // type:function size:0x3B0 scope:global +AddListener__Q23Sim9CollisionPQ33Sim9Collision9IListenerPCQ33UTL3COM8IUnknownPCc = .text:0x8027757C; // type:function size:0x3C4 scope:global +RemoveListener__Q23Sim9CollisionPQ33Sim9Collision9IListenerPCQ33UTL3COM8IUnknown = .text:0x80277940; // type:function size:0x188 scope:global +RemoveListener__Q23Sim9CollisionPQ33Sim9Collision9IListener = .text:0x80277AC8; // type:function size:0x180 scope:global +AddParticipant__Q23Sim9CollisionP10HSIMABLE__ = .text:0x80277C48; // type:function size:0x1E4 scope:global +RemoveParticipant__Q23Sim9CollisionP10HSIMABLE__ = .text:0x80277E2C; // type:function size:0x1CC scope:global +Respond__Q23Sim9CollisionRCQ33Sim9Collision4Info = .text:0x80277FF8; // type:function size:0x154 scope:global +__tcf_0 = .text:0x8027814C; // type:function size:0x2C scope:local +GetRandom__3Simv = .text:0x80278178; // type:function size:0x5C scope:global +Exists__3Simv = .text:0x802781D4; // type:function size:0x1C scope:global +GetState__3Simv = .text:0x802781F0; // type:function size:0x1C scope:global +Update__Q23Sim8Internalv = .text:0x8027820C; // type:function size:0x28 scope:global +Update__3Simv = .text:0x80278234; // type:function size:0x58 scope:global +GetFrameTimeElapsed__3Simv = .text:0x8027828C; // type:function size:0x28 scope:global +GetTimeStep__3Simv = .text:0x802782B4; // type:function size:0x24 scope:global +GetSpeed__3Simv = .text:0x802782D8; // type:function size:0x24 scope:global +GetTime__3Simv = .text:0x802782FC; // type:function size:0xC scope:global +Shutdown__3Simv = .text:0x80278308; // type:function size:0x138 scope:global +GetUserMode__3Simv = .text:0x80278440; // type:function size:0xC scope:global +CheckHeap__Q23Sim8Internalv = .text:0x8027844C; // type:function size:0x4 scope:global +Init__3SimG6UCrc32Q23Sim9eUserMode = .text:0x80278450; // type:function size:0xDC scope:global +CanSpawnRigidBody__3SimRCQ25UMath7Vector3b = .text:0x8027852C; // type:function size:0x1CC scope:global +CanSpawnSimpleRigidBody__3SimRCQ25UMath7Vector3b = .text:0x802786F8; // type:function size:0x130 scope:global +StartProfile__3Simv = .text:0x80278828; // type:function size:0x20 scope:global +Suspend__3Simv = .text:0x80278848; // type:function size:0x34 scope:global +SetStream__3SimRCQ25UMath7Vector3b = .text:0x8027887C; // type:function size:0xC8 scope:global +AddTask__3SimRC6UCrc32fPQ23Sim9ITaskablefQ23Sim8TaskMode = .text:0x80278944; // type:function size:0x3C scope:global +RemoveTask__3SimP10HSIMTASK__PQ23Sim9ITaskable = .text:0x80278980; // type:function size:0x34 scope:global +ModifyTask__3SimP10HSIMTASK__f = .text:0x802789B4; // type:function size:0x2C scope:global +DistanceToCamera__3SimRCQ25UMath7Vector3 = .text:0x802789E0; // type:function size:0x40 scope:global +ProfileTask__3SimP10HSIMTASK__PCc = .text:0x80278A20; // type:function size:0x4 scope:global +GetTick__3Simv = .text:0x80278A24; // type:function size:0xC scope:global +Util_GenerateMatrix__FRCQ25UMath7Vector3PCQ25UMath7Vector3 = .text:0x80278A30; // type:function size:0x190 scope:global +Util_GenerateCarTensor__FffffRCQ25UMath7Vector3 = .text:0x80278BC0; // type:function size:0xD8 scope:global +Lookup__10SimSurfaceRC6UCrc32 = .text:0x80278C98; // type:function size:0x3C scope:global +__10SimSurfaceRCUi = .text:0x80278CD4; // type:function size:0x94 scope:global +__10SimSurfacePCQ26Attrib10Collection = .text:0x80278D68; // type:function size:0x7C scope:global +GetParentSurface__C10SimSurface = .text:0x80278DE4; // type:function size:0x90 scope:global +UpdateSystem__10SimSurface = .text:0x80278E74; // type:function size:0x4 scope:global +InitSystem__10SimSurface = .text:0x80278E78; // type:function size:0x8C scope:global +__11LocalPlayerGQ23Sim5Param = .text:0x80278F04; // type:function size:0x528 scope:global +ReleaseHud__11LocalPlayer = .text:0x8027942C; // type:function size:0x54 scope:global +GetSettings__C11LocalPlayer = .text:0x80279480; // type:function size:0x30 scope:global +SetHud__11LocalPlayer14ePlayerHudType = .text:0x802794B0; // type:function size:0x98 scope:global +OnAttached__11LocalPlayerP11IAttachable = .text:0x80279548; // type:function size:0x8C scope:global +OnDetached__11LocalPlayerP11IAttachable = .text:0x802795D4; // type:function size:0xF0 scope:global +_._11LocalPlayer = .text:0x802796C4; // type:function size:0x274 scope:global +SetGameBreaker__11LocalPlayerb = .text:0x80279938; // type:function size:0x58 scope:global +CanDoGameBreaker__11LocalPlayer = .text:0x80279990; // type:function size:0x140 scope:global +ToggleGameBreaker__11LocalPlayer = .text:0x80279AD0; // type:function size:0x90 scope:global +CanRechargeNOS__C11LocalPlayer = .text:0x80279B60; // type:function size:0x10 scope:global +ResetGameBreaker__11LocalPlayerb = .text:0x80279B70; // type:function size:0x44 scope:global +DoGameBreaker__11LocalPlayerff = .text:0x80279BB4; // type:function size:0x190 scope:global +UpdateHud__11LocalPlayerf = .text:0x80279D44; // type:function size:0x1C08 scope:global +DoRadar__11LocalPlayerbT1 = .text:0x8027B94C; // type:function size:0x798 scope:global +UpdateNeighbourhood__11LocalPlayer = .text:0x8027C0E4; // type:function size:0x11C scope:global +CanDoFFB__C11LocalPlayer = .text:0x8027C200; // type:function size:0x178 scope:global +DoFFB__11LocalPlayer = .text:0x8027C378; // type:function size:0x6F4 scope:global +OnTask__11LocalPlayerP10HSIMTASK__f = .text:0x8027CA6C; // type:function size:0x9C scope:global +GetFFB__11LocalPlayer = .text:0x8027CB08; // type:function size:0x8 scope:global +GetSteeringDevice__11LocalPlayer = .text:0x8027CB10; // type:function size:0x8 scope:global +SetControllerPort__11LocalPlayeri = .text:0x8027CB18; // type:function size:0x130 scope:global +OnCollision__11LocalPlayerRCQ33Sim9Collision4Info = .text:0x8027CC48; // type:function size:0x178 scope:global +__Q23Sim8ActivityUi = .text:0x8027CDC0; // type:function size:0x3C4 scope:global +_._Q23Sim8Activity = .text:0x8027D184; // type:function size:0x3E4 scope:global +DetachAll__Q23Sim8Activity = .text:0x8027D568; // type:function size:0x58 scope:global +Release__Q23Sim8Activity = .text:0x8027D5C0; // type:function size:0x1B4 scope:global +__Q23Sim6ObjectUi = .text:0x8027D774; // type:function size:0xC0 scope:global +_._Q23Sim6Object = .text:0x8027D834; // type:function size:0xB0 scope:global +ModifyTask__Q23Sim6ObjectP10HSIMTASK__f = .text:0x8027D8E4; // type:function size:0x24 scope:global +AddTask__Q23Sim6ObjectRC6UCrc32ffQ23Sim8TaskMode = .text:0x8027D908; // type:function size:0x48 scope:global +RemoveTask__Q23Sim6ObjectP10HSIMTASK__ = .text:0x8027D950; // type:function size:0x3C scope:global +CheckService__CQ23Sim6ObjectP13HSIMSERVICE__ = .text:0x8027D98C; // type:function size:0x24 scope:global +OpenService__Q23Sim6ObjectG6UCrc32PQ23Sim6Packet = .text:0x8027D9B0; // type:function size:0x50 scope:global +CloseService__Q23Sim6ObjectP13HSIMSERVICE__ = .text:0x8027DA00; // type:function size:0x38 scope:global +__Q23Sim6Entity = .text:0x8027DA38; // type:function size:0x39C scope:global +_._Q23Sim6Entity = .text:0x8027DDD4; // type:function size:0x454 scope:global +Kill__Q23Sim6Entity = .text:0x8027E228; // type:function size:0x1B4 scope:global +OnDetached__Q23Sim6EntityP11IAttachable = .text:0x8027E3DC; // type:function size:0x54 scope:global +SetPosition__CQ23Sim6EntityRCQ25UMath7Vector3 = .text:0x8027E430; // type:function size:0x7C scope:global +Attach__Q23Sim6EntityPQ33UTL3COM8IUnknown = .text:0x8027E4AC; // type:function size:0xE4 scope:global +Detach__Q23Sim6EntityPQ33UTL3COM8IUnknown = .text:0x8027E590; // type:function size:0x74 scope:global +GetPosition__CQ23Sim6Entity = .text:0x8027E604; // type:function size:0x4C scope:global +AttachPhysics__Q23Sim6EntityP8ISimable = .text:0x8027E650; // type:function size:0x60 scope:global +DetachPhysics__Q23Sim6Entity = .text:0x8027E6B0; // type:function size:0x58 scope:global +__Q23Sim6EffectUiPCQ26Attrib10Collection = .text:0x8027E708; // type:function size:0xD0 scope:global +Fire__Q23Sim6EffectPCQ26Attrib10CollectionRCQ25UMath7Vector3T2UiT1T1Ui = .text:0x8027E7D8; // type:function size:0xB8 scope:global +Stop__Q23Sim6Effect = .text:0x8027E890; // type:function size:0x44 scope:global +OnService__Q23Sim6EffectP13HSIMSERVICE__PQ23Sim6Packet = .text:0x8027E8D4; // type:function size:0x74 scope:global +Set__Q23Sim6EffectPCQ26Attrib10CollectionRCQ25UMath7Vector3T2T1bUi = .text:0x8027E948; // type:function size:0x158 scope:global +__Q23Sim10ConnectionRCQ23Sim14ConnectionData = .text:0x8027EAA0; // type:function size:0x34 scope:global +_._Q23Sim10Connection = .text:0x8027EAD4; // type:function size:0x64 scope:global +DoStatusCheck__Q23Sim10Connection = .text:0x8027EB38; // type:function size:0x4C scope:global +Close__Q23Sim10Connection = .text:0x8027EB84; // type:function size:0x4C scope:global +Service__Q23Sim10ConnectionPQ23Sim6Packet = .text:0x8027EBD0; // type:function size:0x50 scope:global +OpenService__3SimG6UCrc32PQ23Sim12IServiceablePQ23Sim6Packet = .text:0x8027EC20; // type:function size:0x78 scope:global +SendService__3SimG6UCrc32PQ23Sim6Packet = .text:0x8027EC98; // type:function size:0x50 scope:global +CheckService__3SimP13HSIMSERVICE__ = .text:0x8027ECE8; // type:function size:0x30 scope:global +CloseService__3SimP13HSIMSERVICE__ = .text:0x8027ED18; // type:function size:0x28 scope:global +_._Q23Sim11Attachments = .text:0x8027ED40; // type:function size:0x8C scope:global +Attach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown = .text:0x8027EDCC; // type:function size:0x208 scope:global +Detach__Q23Sim11AttachmentsPQ33UTL3COM8IUnknown = .text:0x8027EFD4; // type:function size:0x194 scope:global +IsAttached__CQ23Sim11AttachmentsPCQ33UTL3COM8IUnknown = .text:0x8027F168; // type:function size:0x88 scope:global +DetachAll__Q23Sim11Attachments = .text:0x8027F1F0; // type:function size:0x4C scope:global +__Q23Sim5ModelP6IModelPCQ217CollisionGeometry6BoundsG6UCrc32Ui = .text:0x8027F23C; // type:function size:0x5AC scope:global +_._Q23Sim5Model = .text:0x8027F7E8; // type:function size:0x634 scope:global +GetLinearVelocity__CQ23Sim5ModelRQ25UMath7Vector3 = .text:0x8027FE1C; // type:function size:0x64 scope:global +GetAngularVelocity__CQ23Sim5ModelRQ25UMath7Vector3 = .text:0x8027FE80; // type:function size:0x64 scope:global +SetDynamicData__Q23Sim5ModelPCQ214EventSequencer6SystemP16EventDynamicData = .text:0x8027FEE4; // type:function size:0x10C scope:global +StartSequencer__Q23Sim5ModelG6UCrc32 = .text:0x8027FFF0; // type:function size:0x68 scope:global +ReleaseSequencer__Q23Sim5Model = .text:0x80280058; // type:function size:0x54 scope:global +BeginDraw__Q23Sim5ModelG6UCrc32PQ23Sim6Packet = .text:0x802800AC; // type:function size:0x60 scope:global +GetWorldID__CQ23Sim5Model = .text:0x8028010C; // type:function size:0xC scope:global +EndSimulation__Q23Sim5Model = .text:0x80280118; // type:function size:0x58 scope:global +EndDraw__Q23Sim5Model = .text:0x80280170; // type:function size:0x68 scope:global +Attach__Q23Sim5ModelPQ33UTL3COM8IUnknown = .text:0x802801D8; // type:function size:0x98 scope:global +Detach__Q23Sim5ModelPQ33UTL3COM8IUnknown = .text:0x80280270; // type:function size:0x34 scope:global +IsAttached__CQ23Sim5ModelPCQ33UTL3COM8IUnknown = .text:0x802802A4; // type:function size:0x34 scope:global +GetAttachments__CQ23Sim5Model = .text:0x802802D8; // type:function size:0x18 scope:global +OnAttached__Q23Sim5ModelP11IAttachable = .text:0x802802F0; // type:function size:0x22C scope:global +OnDetached__Q23Sim5ModelP11IAttachable = .text:0x8028051C; // type:function size:0x19C scope:global +ReleaseModel__Q23Sim5Model = .text:0x802806B8; // type:function size:0x1E4 scope:global +OnService__Q23Sim5ModelP13HSIMSERVICE__PQ23Sim6Packet = .text:0x8028089C; // type:function size:0x5C scope:global +ReleaseChildModels__Q23Sim5Model = .text:0x802808F8; // type:function size:0xC0 scope:global +GetChildModel__CQ23Sim5ModelG6UCrc32 = .text:0x802809B8; // type:function size:0x98 scope:global +EnumerateChildren__CQ23Sim5ModelPQ26IModel10Enumerator = .text:0x80280A50; // type:function size:0x6C scope:global +IsHidden__CQ23Sim5Model = .text:0x80280ABC; // type:function size:0x10 scope:global +HideModel__Q23Sim5Model = .text:0x80280ACC; // type:function size:0x34 scope:global +PlayEffect__Q23Sim5ModelG6UCrc32PCQ26Attrib10CollectionRCQ25UMath7Vector3T3b = .text:0x80280B00; // type:function size:0x174 scope:global +StopEffects__Q23Sim5Model = .text:0x80280C74; // type:function size:0x80 scope:global +StopEffect__Q23Sim5ModelG6UCrc32 = .text:0x80280CF4; // type:function size:0xC4 scope:global +__9QuickGameGQ23Sim5Param = .text:0x80280DB8; // type:function size:0x388 scope:global +_._9QuickGame = .text:0x80281140; // type:function size:0x268 scope:global +ShouldPauseInput__9QuickGame = .text:0x802813A8; // type:function size:0x58 scope:global +RaceReset__9QuickGame = .text:0x80281400; // type:function size:0x78 scope:global +OnUpdate__9QuickGamef = .text:0x80281478; // type:function size:0x4 scope:global +OnTask__9QuickGameP10HSIMTASK__f = .text:0x8028147C; // type:function size:0x3C scope:global +Construct__9QuickGameGQ23Sim5Param = .text:0x802814B8; // type:function size:0x74 scope:global +CreatePlayers__9QuickGame = .text:0x8028152C; // type:function size:0x1A4 scope:global +OnQueryVehicleCache__C9QuickGamePC8IVehiclePC13IVehicleCache = .text:0x802816D0; // type:function size:0xD4 scope:global +OnRemovedVehicleCache__9QuickGameP8IVehicle = .text:0x802817A4; // type:function size:0x4 scope:global +CreateCars__9QuickGameRCQ25UMath7Vector3 = .text:0x802817A8; // type:function size:0x774 scope:global +OnManageTime__9QuickGameff = .text:0x80281F1C; // type:function size:0x234 scope:global +OnBeginState__9QuickGame = .text:0x80282150; // type:function size:0x20C scope:global +IsStateDone__C9QuickGame = .text:0x8028235C; // type:function size:0x36C scope:global +CanSimulate__9QuickGame = .text:0x802826C8; // type:function size:0x128 scope:global +OnManageState__9QuickGameQ23Sim5State = .text:0x802827F0; // type:function size:0x7C scope:global +HandleSkipFEOptions__9QuickGame = .text:0x8028286C; // type:function size:0x164 scope:global +Construct__10CareerGameGQ23Sim5Param = .text:0x802829D0; // type:function size:0x74 scope:global +__10CareerGameGQ23Sim5Param = .text:0x80282A44; // type:function size:0xB4 scope:global +_._10CareerGame = .text:0x80282AF8; // type:function size:0xBC scope:global +__6NISCarG6UCrc32P8IVehicle = .text:0x80282BB4; // type:function size:0x14 scope:global +_._6NISCar = .text:0x80282BC8; // type:function size:0x5C scope:global +__11NISActivity = .text:0x80282C24; // type:function size:0x3CC scope:global +_._11NISActivity = .text:0x80282FF0; // type:function size:0x4FC scope:global +GetScene__C11NISActivity = .text:0x802834EC; // type:function size:0x4C scope:global +GetAnimScene__C11NISActivity = .text:0x80283538; // type:function size:0x6C scope:global +OnDetached__11NISActivityP11IAttachable = .text:0x802835A4; // type:function size:0x58 scope:global +OnQueryVehicleCache__C11NISActivityPC8IVehiclePC13IVehicleCache = .text:0x802835FC; // type:function size:0xC0 scope:global +OnRemovedVehicleCache__11NISActivityP8IVehicle = .text:0x802836BC; // type:function size:0x4 scope:global +RemoveCar__11NISActivityP8IVehicle = .text:0x802836C0; // type:function size:0x15C scope:global +AddCar__11NISActivityG6UCrc32P8IVehicle = .text:0x8028381C; // type:function size:0x204 scope:global +GetCar__11NISActivityG6UCrc32 = .text:0x80283A20; // type:function size:0x9C scope:global +StartLocation__11NISActivityRCQ25UMath7Vector3f = .text:0x80283ABC; // type:function size:0x80 scope:global +StartLocationInRenderCoords__11NISActivityRC8bVector3Us = .text:0x80283B3C; // type:function size:0x98 scope:global +GetStartLocation__11NISActivity = .text:0x80283BD4; // type:function size:0x8 scope:global +GetStartCameraLocation__11NISActivity = .text:0x80283BDC; // type:function size:0x98 scope:global +SetPreMovie__11NISActivityPCc = .text:0x80283C74; // type:function size:0x58 scope:global +SetPostMovie__11NISActivityPCc = .text:0x80283CCC; // type:function size:0x58 scope:global +GetNISStartLocation__11NISActivityRQ25UMath7Vector3 = .text:0x80283D24; // type:function size:0x110 scope:global +Load__11NISActivityQ212CAnimChooser5eTypePCcib = .text:0x80283E34; // type:function size:0x61C scope:global +Unload__11NISActivity = .text:0x80284450; // type:function size:0x90 scope:global +GetCustomCar__FPc = .text:0x802844E0; // type:function size:0x84 scope:global +PrepareVehicles__11NISActivityi = .text:0x80284564; // type:function size:0x690 scope:global +SetDynamicData__11NISActivityPCQ214EventSequencer6SystemP16EventDynamicData = .text:0x80284BF4; // type:function size:0x13C scope:global +UpdatePreloading__11NISActivity = .text:0x80284D30; // type:function size:0xA0 scope:global +NISStreamTimeCallback__11NISActivityUii = .text:0x80284DD0; // type:function size:0xC scope:global +IsAudioStreamQueued__11NISActivity = .text:0x80284DDC; // type:function size:0x28 scope:global +IsValidModelToNuke__FPC6IModel = .text:0x80284E04; // type:function size:0x1BC scope:local +NIS_NukeSmackablesWithinRange__FRCQ25UMath7Vector3f = .text:0x80284FC0; // type:function size:0xDC scope:global +IsCarListLoaded__11NISActivity = .text:0x8028509C; // type:function size:0x100 scope:global +UpdateLoading__11NISActivity = .text:0x8028519C; // type:function size:0x33C scope:global +OnMovieComplete__11NISActivityRC20MNotifyMovieFinished = .text:0x802854D8; // type:function size:0x68 scope:global +Play__11NISActivity = .text:0x80285540; // type:function size:0x1CC scope:global +StartEvents__11NISActivity = .text:0x8028570C; // type:function size:0x88 scope:global +FireEventTag__11NISActivityPCc = .text:0x80285794; // type:function size:0x5C scope:global +Pause__11NISActivity = .text:0x802857F0; // type:function size:0xC scope:global +UnPause__11NISActivity = .text:0x802857FC; // type:function size:0xC scope:global +UpdatePlaying__11NISActivityf = .text:0x80285808; // type:function size:0x264 scope:global +ResetEvents__11NISActivityf = .text:0x80285A6C; // type:function size:0x184 scope:global +ServiceLoads__11NISActivity = .text:0x80285BF0; // type:function size:0x40 scope:global +Release__11NISActivity = .text:0x80285C30; // type:function size:0x23C scope:global +JoyHandle__11NISActivityP7IPlayer = .text:0x80285E6C; // type:function size:0x15C scope:global +OnTask__11NISActivityP10HSIMTASK__f = .text:0x80285FC8; // type:function size:0x124 scope:global +SkipOverNIS__11NISActivity = .text:0x802860EC; // type:function size:0x140 scope:global +__16GameplayActivityGQ23Sim5Param = .text:0x8028622C; // type:function size:0x10C scope:global +_._16GameplayActivity = .text:0x80286338; // type:function size:0xBC scope:global +Construct__16GameplayActivityGQ23Sim5Param = .text:0x802863F4; // type:function size:0x74 scope:global +OnTask__16GameplayActivityP10HSIMTASK__f = .text:0x80286468; // type:function size:0xC0 scope:global +clear__Q24_STLt10_List_base2Z23WGridManagedDynamicElemZQ33UTL3Stdt9Allocator2Z23WGridManagedDynamicElemZ10_type_list = .text:0x80286528; // type:function size:0x78 scope:global +find_if__H2ZPQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_NodeZPFRCQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Node_b_4_STLX01X01X11_X01 = .text:0x802865A0; // type:function size:0x11C scope:global +find_if__H2ZPQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_NodeZPFRCQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Node_b_4_STLX01X01X11_X01 = .text:0x802866BC; // type:function size:0x11C scope:global +find_if__H2ZPQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_NodeZPFRCQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Node_b_4_STLX01X01X11_X01 = .text:0x802867D8; // type:function size:0x11C scope:global +find_if__H2ZPQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_NodeZPFRCQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Node_b_4_STLX01X01X11_X01 = .text:0x802868F4; // type:function size:0x11C scope:global +reserve__Q24_STLt6vector2ZP10HSIMABLE__ZQ33UTL3Stdt9Allocator2ZP10HSIMABLE__Z26_type_CollisionParticipantUi = .text:0x80286A10; // type:function size:0x11C scope:global +reserve__Q24_STLt6vector2ZQ43Sim8Internal11CDispatcher4NodeZQ33UTL3Stdt9Allocator2ZQ43Sim8Internal11CDispatcher4NodeZ23_type_CollisionListenerUi = .text:0x80286B2C; // type:function size:0x16C scope:global +__lower_bound__H4ZPQ43Sim8Internal11CDispatcher4NodeZQ43Sim8Internal11CDispatcher4NodeZQ24_STLt4less1ZQ43Sim8Internal11CDispatcher4NodeZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80286C98; // type:function size:0x48 scope:global +find_if__H2ZPCQ43Sim8Internal11CDispatcher4NodeZQ43Sim8Internal11CDispatcher6Finder_4_STLX01X01X11_X01 = .text:0x80286CE0; // type:function size:0x234 scope:global +__lower_bound__H4ZPP10HSIMABLE__ZP10HSIMABLE__ZQ24_STLt4less1ZP10HSIMABLE__Zi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80286F14; // type:function size:0x48 scope:global +__upper_bound__H4ZPQ43Sim8Internal11CDispatcher4NodeZQ43Sim8Internal11CDispatcher4NodeZQ24_STLt4less1ZQ43Sim8Internal11CDispatcher4NodeZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x80286F5C; // type:function size:0x48 scope:global +find_if__H2ZPQ43Sim8Internal11CDispatcher4NodeZQ43Sim8Internal11CDispatcher6Finder_4_STLX01X01X11_X01 = .text:0x80286FA4; // type:function size:0x234 scope:global +__upper_bound__H4ZPP10HSIMABLE__ZP10HSIMABLE__ZQ24_STLt4less1ZP10HSIMABLE__Zi_4_STLX01X01RCX11X21PX31_X01 = .text:0x802871D8; // type:function size:0x48 scope:global +find__H2ZPQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_NodeZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Node_4_STLX01X01RCX11_X01 = .text:0x80287220; // type:function size:0xB0 scope:global +find__H2ZPQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_NodeZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Node_4_STLX01X01RCX11_X01 = .text:0x802872D0; // type:function size:0xB0 scope:global +CreateInstance__Q33UTL3COMt7Factory3ZRCQ23Sim14ConnectionDataZQ23Sim10ConnectionZ6UCrc32G6UCrc32RCQ23Sim14ConnectionData = .text:0x80287380; // type:function size:0x60 scope:global +CreateInstance__Q33UTL3COMt7Factory3ZPQ23Sim6PacketZiZ6UCrc32G6UCrc32PQ23Sim6Packet = .text:0x802873E0; // type:function size:0x60 scope:global +find__H2ZQ24_STLt14_List_iterator2ZP11IAttachableZQ24_STLt16_Nonconst_traits1ZP11IAttachableZP11IAttachable_4_STLX01X01RCX11_X01 = .text:0x80287440; // type:function size:0x60 scope:global +find__H2ZPQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_NodeZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Node_4_STLX01X01RCX11_X01 = .text:0x802874A0; // type:function size:0xB0 scope:global +reserve__Q24_STLt6vector2ZP6IModelZQ33UTL3Stdt9Allocator2ZP6IModelZ22_type_SimModelChildrenUi = .text:0x80287550; // type:function size:0x11C scope:global +CreateInstance__Q33UTL3COMt7Factory3ZQ23Sim5ParamZQ23Sim7IEntityZ6UCrc32G6UCrc32GQ23Sim5Param = .text:0x8028766C; // type:function size:0x7C scope:global +_M_erase__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZP6NISCarZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZP6NISCarZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2ZP6NISCarZ9_type_mapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZC6UCrc32ZP6NISCar = .text:0x802876E8; // type:function size:0x68 scope:global +_M_insert__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZP6NISCarZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZP6NISCarZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2ZP6NISCarZ9_type_mapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZC6UCrc32ZP6NISCarT1 = .text:0x80287750; // type:function size:0x13C scope:global +insert_unique__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZP6NISCarZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZP6NISCarZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2ZP6NISCarZ9_type_mapRCQ24_STLt4pair2ZC6UCrc32ZP6NISCar = .text:0x8028788C; // type:function size:0x118 scope:global +insert_unique__Q24_STLt8_Rb_tree5Z6UCrc32ZQ24_STLt4pair2ZC6UCrc32ZP6NISCarZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZC6UCrc32ZP6NISCarZQ24_STLt4less1Z6UCrc32ZQ33UTL3Stdt9Allocator2ZP6NISCarZ9_type_mapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZC6UCrc32ZP6NISCarZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZC6UCrc32ZP6NISCarRCQ24_STLt4pair2ZC6UCrc32ZP6NISCar = .text:0x802879A4; // type:function size:0x26C scope:global +__static_initialization_and_destruction_0 = .text:0x80287C10; // type:function size:0x7A4 scope:local +_._7IPlayer = .text:0x802883B4; // type:function size:0x180 scope:global +_._Q23Sim7IEntity = .text:0x80288534; // type:function size:0x180 scope:global +_IHandle__Q23Sim12IServiceable = .text:0x802886B4; // type:function size:0xC scope:global +_._Q23Sim12IServiceable = .text:0x802886C0; // type:function size:0x54 scope:global +_IHandle__Q23Sim9ITaskable = .text:0x80288714; // type:function size:0xC scope:global +_._Q23Sim9ITaskable = .text:0x80288720; // type:function size:0x54 scope:global +OnService__Q23Sim6ObjectP13HSIMSERVICE__PQ23Sim6Packet = .text:0x80288774; // type:function size:0x8 scope:global +OnTask__Q23Sim6ObjectP10HSIMTASK__f = .text:0x8028877C; // type:function size:0x8 scope:global +_._Q23Sim9IActivity = .text:0x80288784; // type:function size:0x10C scope:global +Attach__Q23Sim8ActivityPQ33UTL3COM8IUnknown = .text:0x80288890; // type:function size:0x34 scope:global +Detach__Q23Sim8ActivityPQ33UTL3COM8IUnknown = .text:0x802888C4; // type:function size:0x34 scope:global +IsAttached__CQ23Sim8ActivityPCQ33UTL3COM8IUnknown = .text:0x802888F8; // type:function size:0x34 scope:global +OnAttached__Q23Sim8ActivityP11IAttachable = .text:0x8028892C; // type:function size:0x4 scope:global +OnDetached__Q23Sim8ActivityP11IAttachable = .text:0x80288930; // type:function size:0x4 scope:global +GetAttachments__CQ23Sim8Activity = .text:0x80288934; // type:function size:0x18 scope:global +_IHandle__Q23Sim12ITimeManager = .text:0x8028894C; // type:function size:0xC scope:global +_._Q23Sim12ITimeManager = .text:0x80288958; // type:function size:0x54 scope:global +_._Q23Sim13IStateManager = .text:0x802889AC; // type:function size:0x54 scope:global +GetSimable__CQ23Sim6Entity = .text:0x80288A00; // type:function size:0x8 scope:global +IsAttached__CQ23Sim6EntityPCQ33UTL3COM8IUnknown = .text:0x80288A08; // type:function size:0x24 scope:global +OnAttached__Q23Sim6EntityP11IAttachable = .text:0x80288A2C; // type:function size:0x4 scope:global +GetAttachments__CQ23Sim6Entity = .text:0x80288A30; // type:function size:0x8 scope:global +_._Q23Sim6Effect = .text:0x80288A38; // type:function size:0x70 scope:global +__Q33UTL3Stdt6vector2ZP6IModelZ22_type_SimModelChildrenRCQ33UTL3Stdt6vector2ZP6IModelZ22_type_SimModelChildren = .text:0x80288AA8; // type:function size:0xAC scope:global +_._Q33Sim5Model6Effect = .text:0x80288B54; // type:function size:0x70 scope:global +SpawnModel__Q23Sim5ModelG6UCrc32N21 = .text:0x80288BC4; // type:function size:0x8 scope:global +GetEventSequencer__Q23Sim5Model = .text:0x80288BCC; // type:function size:0x8 scope:global +InView__CQ23Sim5Model = .text:0x80288BD4; // type:function size:0x8 scope:global +DistanceToView__CQ23Sim5Model = .text:0x80288BDC; // type:function size:0x8 scope:global +GetPartName__CQ23Sim5Model = .text:0x80288BE4; // type:function size:0x10 scope:global +GetRootModel__CQ23Sim5Model = .text:0x80288BF4; // type:function size:0x18 scope:global +GetParentModel__CQ23Sim5Model = .text:0x80288C0C; // type:function size:0x8 scope:global +GetCollisionGeometry__CQ23Sim5Model = .text:0x80288C14; // type:function size:0x8 scope:global +GetSimable__CQ23Sim5Model = .text:0x80288C1C; // type:function size:0x8 scope:global +IsRootModel__CQ23Sim5Model = .text:0x80288C24; // type:function size:0x8 scope:global +HidePart__Q23Sim5ModelRC6UCrc32 = .text:0x80288C2C; // type:function size:0x4 scope:global +ShowPart__Q23Sim5ModelRC6UCrc32 = .text:0x80288C30; // type:function size:0x4 scope:global +IsPartVisible__CQ23Sim5ModelRC6UCrc32 = .text:0x80288C34; // type:function size:0x8 scope:global +SetCausality__Q23Sim5ModelP8HCAUSE__f = .text:0x80288C3C; // type:function size:0xC scope:global +GetCausality__CQ23Sim5Model = .text:0x80288C48; // type:function size:0x8 scope:global +GetCausalityTime__CQ23Sim5Model = .text:0x80288C50; // type:function size:0x8 scope:global +OnBeginSimulation__Q23Sim5Model = .text:0x80288C58; // type:function size:0x4 scope:global +OnEndSimulation__Q23Sim5Model = .text:0x80288C5C; // type:function size:0x4 scope:global +OnBeginDraw__Q23Sim5Model = .text:0x80288C60; // type:function size:0x4 scope:global +OnEndDraw__Q23Sim5Model = .text:0x80288C64; // type:function size:0x4 scope:global +ClassKey__Q36Attrib3Gen6system = .text:0x80288C68; // type:function size:0xC scope:global +ClassKey__Q36Attrib3Gen10controller = .text:0x80288C74; // type:function size:0xC scope:global +_._Q29WorldConn15Pkt_Effect_Send = .text:0x80288C80; // type:function size:0x34 scope:global +ConnectionClass__Q29WorldConn15Pkt_Effect_Send = .text:0x80288CB4; // type:function size:0x64 scope:global +Size__Q29WorldConn15Pkt_Effect_Send = .text:0x80288D18; // type:function size:0x8 scope:global +Type__Q29WorldConn15Pkt_Effect_Send = .text:0x80288D20; // type:function size:0x20 scope:global +_._Q29WorldConn15Pkt_Effect_Open = .text:0x80288D40; // type:function size:0x34 scope:global +ConnectionClass__Q29WorldConn15Pkt_Effect_Open = .text:0x80288D74; // type:function size:0x64 scope:global +Size__Q29WorldConn15Pkt_Effect_Open = .text:0x80288DD8; // type:function size:0x8 scope:global +Type__Q29WorldConn15Pkt_Effect_Open = .text:0x80288DE0; // type:function size:0x20 scope:global +IsDirty__C7SimTask = .text:0x80288E00; // type:function size:0xC scope:global +DoFetchInput__9SimSystemP12IInputPlayer = .text:0x80288E0C; // type:function size:0x34 scope:global +is_dead__Q53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_NodeRCQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Node = .text:0x80288E40; // type:function size:0x10 scope:global +push_back__Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei16RCQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Node = .text:0x80288E50; // type:function size:0x158 scope:global +is_dead__Q53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_NodeRCQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Node = .text:0x80288FA8; // type:function size:0x10 scope:global +push_back__Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei16RCQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Node = .text:0x80288FB8; // type:function size:0x158 scope:global +is_dead__Q53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_NodeRCQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Node = .text:0x80289110; // type:function size:0x10 scope:global +is_dead__Q53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_NodeRCQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Node = .text:0x80289120; // type:function size:0x10 scope:global +push_back__Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei16RCQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Node = .text:0x80289130; // type:function size:0x158 scope:global +Construct__11LocalPlayerGQ23Sim5Param = .text:0x80289288; // type:function size:0x74 scope:global +SetRenderPort__11LocalPlayeri = .text:0x802892FC; // type:function size:0x8 scope:global +GetRenderPort__C11LocalPlayer = .text:0x80289304; // type:function size:0x8 scope:global +GetSettingsIndex__C11LocalPlayer = .text:0x8028930C; // type:function size:0x8 scope:global +SetSettings__11LocalPlayeri = .text:0x80289314; // type:function size:0x8 scope:global +GetHud__C11LocalPlayer = .text:0x8028931C; // type:function size:0x8 scope:global +GetControllerPort__C11LocalPlayer = .text:0x80289324; // type:function size:0x8 scope:global +GetSimable__C11LocalPlayer = .text:0x8028932C; // type:function size:0x8 scope:global +IsLocal__C11LocalPlayer = .text:0x80289334; // type:function size:0x8 scope:global +GetPosition__C11LocalPlayer = .text:0x8028933C; // type:function size:0x20 scope:global +SetPosition__11LocalPlayerRCQ25UMath7Vector3 = .text:0x8028935C; // type:function size:0x20 scope:global +InGameBreaker__C11LocalPlayer = .text:0x8028937C; // type:function size:0x8 scope:global +ChargeGameBreaker__11LocalPlayerf = .text:0x80289384; // type:function size:0x48 scope:global +_._4INIS = .text:0x802893CC; // type:function size:0x6C scope:global +_IHandle__10IGameState = .text:0x80289438; // type:function size:0xC scope:global +_._10IGameState = .text:0x80289444; // type:function size:0x6C scope:global +push_back__Q23UTLt6Vector2ZPQ23Sim7IEntityi16RCPQ23Sim7IEntity = .text:0x802894B0; // type:function size:0x154 scope:global +push_back__Q23UTLt6Vector2ZP7IPlayeri16RCP7IPlayer = .text:0x80289604; // type:function size:0x154 scope:global +InGameBreaker__C9QuickGame = .text:0x80289758; // type:function size:0x8 scope:global +GetCacheName__C9QuickGame = .text:0x80289760; // type:function size:0xC scope:global +Match__10CarBuilderRCQ37Physics4Info11Performance = .text:0x8028976C; // type:function size:0xB8 scope:global +_._16CAnimMomentScene = .text:0x80289824; // type:function size:0x34 scope:global +GetSceneHash__16CAnimMomentScene = .text:0x80289858; // type:function size:0x8 scope:global +GetCameraTrackNumber__16CAnimMomentScene = .text:0x80289860; // type:function size:0x8 scope:global +IsControllingCamera__16CAnimMomentScene = .text:0x80289868; // type:function size:0x8 scope:global +IsCameraFixingElevation__16CAnimMomentScene = .text:0x80289870; // type:function size:0x8 scope:global +SetTime__16CAnimMomentScenef = .text:0x80289878; // type:function size:0x4 scope:global +Pause__16CAnimMomentScene = .text:0x8028987C; // type:function size:0x8 scope:global +UnPause__16CAnimMomentScene = .text:0x80289884; // type:function size:0x8 scope:global +IsPlaying__16CAnimMomentScene = .text:0x8028988C; // type:function size:0x8 scope:global +GetTimeStart__16CAnimMomentScene = .text:0x80289894; // type:function size:0xC scope:global +GetTimeTotalLength__16CAnimMomentScene = .text:0x802898A0; // type:function size:0x8 scope:global +GetTimeElapsed__16CAnimMomentScene = .text:0x802898A8; // type:function size:0x8 scope:global +GetSceneRotationMatrix__16CAnimMomentScene = .text:0x802898B0; // type:function size:0x8 scope:global +GetSceneTransformMatrix__16CAnimMomentScene = .text:0x802898B8; // type:function size:0x8 scope:global +__Q33UTL3Stdt3map3Z6UCrc32ZP6NISCarZ9_type_map = .text:0x802898C0; // type:function size:0x74 scope:global +Construct__11NISActivityGQ23Sim5Param = .text:0x80289934; // type:function size:0x5C scope:global +GetType__11NISActivity = .text:0x80289990; // type:function size:0x8 scope:global +IsLoaded__C11NISActivity = .text:0x80289998; // type:function size:0x14 scope:global +IsPlaying__C11NISActivity = .text:0x802899AC; // type:function size:0x14 scope:global +InMovie__C11NISActivity = .text:0x802899C0; // type:function size:0x20 scope:global +StartPlayingNow__11NISActivity = .text:0x802899E0; // type:function size:0x60 scope:global +GetCacheName__C11NISActivity = .text:0x80289A40; // type:function size:0xC scope:global +IsWorldMomement__C11NISActivity = .text:0x80289A4C; // type:function size:0x14 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z20MNotifyMovieFinishedZ11NISActivityZ11NISActivityPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x80289A60; // type:function size:0x88 scope:global +_._Q33UTL11Collectionst8_Storage2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei40 = .text:0x80289AE8; // type:function size:0xB4 scope:global +_._Q33UTL11Collectionst8_Storage2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei8 = .text:0x80289B9C; // type:function size:0xB4 scope:global +_._Q33UTL11Collectionst8_Storage2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei434 = .text:0x80289C50; // type:function size:0xB4 scope:global +SType__Q29WorldConn15Pkt_Effect_Send = .text:0x80289D04; // type:function size:0x58 scope:global +SType__Q29WorldConn15Pkt_Effect_Open = .text:0x80289D5C; // type:function size:0x58 scope:global +OnGrowRequest__Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei16Ui = .text:0x80289DB4; // type:function size:0x4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei16Ui = .text:0x80289DB8; // type:function size:0x4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei16Ui = .text:0x80289DBC; // type:function size:0x4 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei434i16UiUi = .text:0x80289DC0; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei434i16PQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_NodeUi = .text:0x80289DC8; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei434i16Ui = .text:0x80289DCC; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei434i16 = .text:0x80289DD4; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei8i16UiUi = .text:0x80289DDC; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei8i16PQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_NodeUi = .text:0x80289DE4; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei8i16Ui = .text:0x80289DE8; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei8i16 = .text:0x80289DF0; // type:function size:0x8 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei40i16UiUi = .text:0x80289DF8; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei40i16PQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_NodeUi = .text:0x80289E00; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei40i16Ui = .text:0x80289E04; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei40i16 = .text:0x80289E0C; // type:function size:0x8 scope:global +GetGrowSize__CQ23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei16Ui = .text:0x80289E14; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei16Ui = .text:0x80289E34; // type:function size:0x20 scope:global +GetGrowSize__CQ23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei16Ui = .text:0x80289E54; // type:function size:0x20 scope:global +_._Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei16 = .text:0x80289E74; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei40i16 = .text:0x80289EA8; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei16 = .text:0x80289F5C; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei8i16 = .text:0x80289F90; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei16 = .text:0x8028A044; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei434i16 = .text:0x8028A078; // type:function size:0xB4 scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei16 = .text:0x8028A12C; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei16 = .text:0x8028A138; // type:function size:0xC scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei16 = .text:0x8028A144; // type:function size:0xC scope:global +_GLOBAL_.I.__3OBB = .text:0x8028A150; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x8028A17C; // type:label scope:local +CSISAllocatorMemAlloc__FUi = .text:0x8028A17C; // type:function size:0x28 scope:local +CSISAllocatorMemFree__FPv = .text:0x8028A1A4; // type:function size:0x2C scope:local +ScheduleSpeechPartII__Q26Speech7ManagerUiPvRQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter = .text:0x8028A1D0; // type:function size:0x5C0 scope:global +IndirectSpeechEvent__Q26Speech7ManagerPQ26Speech20ScheduledSpeechEventb = .text:0x8028A790; // type:function size:0x12C scope:global +Destroy__Q26Speech7Manager = .text:0x8028A8BC; // type:function size:0x1B4 scope:global +Init__Q26Speech7Manager11SPEECH_MODE = .text:0x8028AA70; // type:function size:0x354 scope:global +Init2__Q26Speech7Manager = .text:0x8028ADC4; // type:function size:0xFE0 scope:global +AttachSFXOBJ__Q26Speech7Manager17SpeechModuleIndexP8SFX_Base18eSFXOBJ_MAIN_TYPES = .text:0x8028BDA4; // type:function size:0x38 scope:global +GetSpeechModule__Q26Speech7Manageri = .text:0x8028BDDC; // type:function size:0x24 scope:global +IsPlaying__Q26Speech7Manager17SpeechModuleIndex = .text:0x8028BE00; // type:function size:0x4C scope:global +IsCopSpeechPlaying__Q26Speech7Manager18SPCHType_1_EventID = .text:0x8028BE4C; // type:function size:0x38 scope:global +IsCopSpeechBusy__Q26Speech7Manager = .text:0x8028BE84; // type:function size:0x74 scope:global +GetTimeSinceLastEvent__Q26Speech7Manager17SpeechModuleIndex = .text:0x8028BEF8; // type:function size:0x68 scope:global +SpchLibAbort__Q26Speech7ManagerPCce = .text:0x8028BF60; // type:function size:0xA0 scope:global +SampleRequestCallback__Q26Speech7ManagerP26SPCHType_SampleRequestData = .text:0x8028C000; // type:function size:0x570 scope:global +TestSentenceRuleCallback__Q26Speech7ManagerP9EventSpeciii = .text:0x8028C570; // type:function size:0x8 scope:global +ReparmCallback__Q26Speech7ManageriPUi = .text:0x8028C578; // type:function size:0x8 scope:global +SetSentenceRuleCallback__Q26Speech7ManagerP9EventSpeciii = .text:0x8028C580; // type:function size:0x4 scope:global +EventRuleCallback__Q26Speech7ManagerP9EventSpec = .text:0x8028C584; // type:function size:0x8 scope:global +LoadSpeechBank__Q26Speech7ManagerP17CLUMP_IDX_FILEtagRiT2PQ26Speech11SPEECH_BANK = .text:0x8028C58C; // type:function size:0x13C scope:global +AddHeaders__Q26Speech7ManagerPPcPQ26Speech11SPEECH_BANKiPQ26Speech6Module = .text:0x8028C6C8; // type:function size:0xE4 scope:global +GetTicker__Q26Speech7Manager = .text:0x8028C7AC; // type:function size:0x6C scope:global +Update__Q26Speech7Managerf = .text:0x8028C818; // type:function size:0x364 scope:global +PopulateHashMap__Q26Speech7Manager = .text:0x8028CB7C; // type:function size:0x114 scope:global +IsCacheable__Q26Speech7Manager18SPCHType_1_EventID = .text:0x8028CC90; // type:function size:0xB8 scope:global +HasBeenSaid__Q26Speech7Manager18SPCHType_1_EventID = .text:0x8028CD48; // type:function size:0x68 scope:global +InteruptedAndNotDelayed__6SpeechPQ26Speech20ScheduledSpeechEvent = .text:0x8028CDB0; // type:function size:0xF0 scope:local +ServiceInterruptEvents__Q26Speech7Manager = .text:0x8028CEA0; // type:function size:0x65C scope:global +ServiceFilteredEvents__Q26Speech7Manager = .text:0x8028D4FC; // type:function size:0x3C8 scope:global +Deduce__Q26Speech7Manager = .text:0x8028D8C4; // type:function size:0x900 scope:global +ClearPlayback__Q26Speech7Manager = .text:0x8028E1C4; // type:function size:0xD0 scope:global +RecallSpeechEvent__Q26Speech7Manager18SPCHType_1_EventID = .text:0x8028E294; // type:function size:0xEC scope:global +ResetGlobalHistory__Q26Speech7Manager = .text:0x8028E380; // type:function size:0x34 scope:global +Expire__Q26Speech7ManagerPQ26Speech20ScheduledSpeechEvent = .text:0x8028E3B4; // type:function size:0x84 scope:global +IsQueued__Q26Speech7Manager18SPCHType_1_EventIDi = .text:0x8028E438; // type:function size:0xA0 scope:global +IsEventDead__Q26Speech7ManagerPQ26Speech20ScheduledSpeechEvent = .text:0x8028E4D8; // type:function size:0x140 scope:global +NotifyEventCompletion__Q26Speech7ManagerPQ26Speech20ScheduledSpeechEventb = .text:0x8028E618; // type:function size:0x1F8 scope:global +GetNextEvent__Q26Speech7Manager = .text:0x8028E810; // type:function size:0x288 scope:global +PostValidate__Q26Speech7ManagerPQ26Speech20ScheduledSpeechEventUi = .text:0x8028EA98; // type:function size:0x8BC scope:global +PreValidate__Q26Speech7ManagerRQ26Speech20ScheduledSpeechEvent = .text:0x8028F354; // type:function size:0x1B0 scope:global +__tcf_0 = .text:0x8028F504; // type:function size:0x2C scope:local +CanPlayback__Q26Speech7ManagerRQ36Attrib3Gen6speech = .text:0x8028F530; // type:function size:0x12C scope:global +FlushSpeechForActor__Q26Speech7ManagerP12EAXCharacter = .text:0x8028F65C; // type:function size:0xF8 scope:global +CalcProbPlayback__Q26Speech7Manager = .text:0x8028F754; // type:function size:0x9C scope:global +__Q26Speech6Module = .text:0x8028F7F0; // type:function size:0x5C scope:global +_._Q26Speech6Module = .text:0x8028F84C; // type:function size:0x44 scope:global +GetBankOffset__Q26Speech6Modulei = .text:0x8028F890; // type:function size:0x48 scope:global +AttachSFXOBJ__Q26Speech6ModuleP8SFX_Base18eSFXOBJ_MAIN_TYPES = .text:0x8028F8D8; // type:function size:0x78 scope:global +DonePlaying__Q26Speech6Module = .text:0x8028F950; // type:function size:0x24 scope:global +PurgeSpeech__Q26Speech6Module = .text:0x8028F974; // type:function size:0x24 scope:global +PlayStream__Q26Speech6Modulei = .text:0x8028F998; // type:function size:0x8 scope:global +UnPause__Q26Speech6Module = .text:0x8028F9A0; // type:function size:0x24 scope:global +ReleaseResource__Q26Speech6Module = .text:0x8028F9C4; // type:function size:0x24 scope:global +__Q26Speech10GameSpeech = .text:0x8028F9E8; // type:function size:0x10C scope:global +_._Q26Speech10GameSpeech = .text:0x8028FAF4; // type:function size:0x25C scope:global +Init__Q26Speech10GameSpeechi = .text:0x8028FD50; // type:function size:0x3C0 scope:global +LoadingCallback__Q26Speech10GameSpeechii = .text:0x80290110; // type:function size:0x1A0 scope:global +LoadBanks__Q26Speech10GameSpeech = .text:0x802902B0; // type:function size:0xD0 scope:global +TestSentenceRuleCallback__Q26Speech10GameSpeechiii = .text:0x80290380; // type:function size:0x8 scope:global +SetSentenceRuleCallback__Q26Speech10GameSpeechiii = .text:0x80290388; // type:function size:0x8 scope:global +EventRuleCallback__Q26Speech10GameSpeechi = .text:0x80290390; // type:function size:0x8 scope:global +Unlocked__6SpeechPQ26Speech16SpeechSampleData = .text:0x80290398; // type:function size:0x4C scope:local +Update__Q26Speech10GameSpeech = .text:0x802903E4; // type:function size:0x53C scope:global +CheckNextEvent__Q26Speech10GameSpeech = .text:0x80290920; // type:function size:0xA8 scope:global +IssuePlayback__Q26Speech10GameSpeechPQ26Speech20ScheduledSpeechEvent = .text:0x802909C8; // type:function size:0x56C scope:global +ClearCompletedRequests__Q26Speech10GameSpeech = .text:0x80290F34; // type:function size:0x18C scope:global +ReleaseResource__Q26Speech10GameSpeech = .text:0x802910C0; // type:function size:0x34 scope:global +SampleRequestCallback__Q26Speech10GameSpeechP26SPCHType_SampleRequestData = .text:0x802910F4; // type:function size:0x24 scope:global +IssueSampleRequests__Q26Speech10GameSpeech = .text:0x80291118; // type:function size:0x1F0 scope:global +RadioChirp__Q26Speech10GameSpeechUc = .text:0x80291308; // type:function size:0xE8 scope:global +UpdateChirps__Q26Speech10GameSpeech = .text:0x802913F0; // type:function size:0x84 scope:global +GetVolForSpeaker__Q26Speech10GameSpeechi = .text:0x80291474; // type:function size:0x17C scope:global +__Q26Speech10SED_NISSFX = .text:0x802915F0; // type:function size:0xB8 scope:global +_._Q26Speech10SED_NISSFX = .text:0x802916A8; // type:function size:0x1F4 scope:global +Init__Q26Speech10SED_NISSFXi = .text:0x8029189C; // type:function size:0x408 scope:global +LoadingCallback__Q26Speech10SED_NISSFXii = .text:0x80291CA4; // type:function size:0xD8 scope:global +LoadBanks__Q26Speech10SED_NISSFX = .text:0x80291D7C; // type:function size:0xE4 scope:global +TestSentenceRuleCallback__Q26Speech10SED_NISSFXiii = .text:0x80291E60; // type:function size:0x8 scope:global +SetSentenceRuleCallback__Q26Speech10SED_NISSFXiii = .text:0x80291E68; // type:function size:0x8 scope:global +EventRuleCallback__Q26Speech10SED_NISSFXi = .text:0x80291E70; // type:function size:0x8 scope:global +QueStream__Q26Speech10SED_NISSFX12eNISSFX_TYPEPFv_vb = .text:0x80291E78; // type:function size:0xF0 scope:global +SampleRequestCallback__Q26Speech10SED_NISSFXP26SPCHType_SampleRequestData = .text:0x80291F68; // type:function size:0xE8 scope:global +PlayStream__Q26Speech10SED_NISSFXi = .text:0x80292050; // type:function size:0x70 scope:global +ClearStream__Q26Speech10SED_NISSFX = .text:0x802920C0; // type:function size:0x50 scope:global +Update__Q26Speech10SED_NISSFX = .text:0x80292110; // type:function size:0x244 scope:global +__Q26Speech5Cache = .text:0x80292354; // type:function size:0x50 scope:global +Init__Q26Speech5Cachei = .text:0x802923A4; // type:function size:0x35C scope:global +Dump__Q26Speech5Cache = .text:0x80292700; // type:function size:0x1FC scope:global +GetEventPool__Q26Speech5Cache = .text:0x802928FC; // type:function size:0x8 scope:global +_._Q26Speech5Cache = .text:0x80292904; // type:function size:0x70 scope:global +IsCached__Q26Speech5CacheP26SPCHType_SampleRequestDatab = .text:0x80292974; // type:function size:0x20C scope:global +CreateKey__Q26Speech5Cacheii = .text:0x80292B80; // type:function size:0x19C scope:global +GetUncached__Q26Speech5CachePQ26Speech6ModuleP26SPCHType_SampleRequestData = .text:0x80292D1C; // type:function size:0x618 scope:global +GetSample__Q26Speech5CachePQ26Speech6ModuleP26SPCHType_SampleRequestData = .text:0x80293334; // type:function size:0x224 scope:global +LoadSample__Q26Speech5CachePQ26Speech6ModuleP26SPCHType_SampleRequestData = .text:0x80293558; // type:function size:0x504 scope:global +LoadedSampleDataCB__Q26Speech5Cacheii = .text:0x80293A5C; // type:function size:0x50 scope:global +Alloc__Q26Speech5CacheiUi = .text:0x80293AAC; // type:function size:0x7C scope:global +Free__Q26Speech5CachePv = .text:0x80293B28; // type:function size:0x28 scope:global +MakeSpaceFor__Q26Speech5CacheP26SPCHType_SampleRequestDatab = .text:0x80293B50; // type:function size:0x208 scope:global +TossSample__Q26Speech5CachePQ26Speech16SpeechSampleData = .text:0x80293D58; // type:function size:0x7E0 scope:global +FlushUncached__Q26Speech5Cache = .text:0x80294538; // type:function size:0x798 scope:global +FlushLRU__Q26Speech5Cache = .text:0x80294CD0; // type:function size:0x74C scope:global +FlushAllUnlocked__Q26Speech5Cache = .text:0x8029541C; // type:function size:0x740 scope:global +FlushInactiveSpeakers__Q26Speech5Cache = .text:0x80295B5C; // type:function size:0x7B8 scope:global +DebugPrintAllocations__Q26Speech5Cache = .text:0x80296314; // type:function size:0x1A8 scope:global +Validate__Q26Speech5Cache = .text:0x802964BC; // type:function size:0x4 scope:global +DebugPrints__Q26Speech5Cache = .text:0x802964C0; // type:function size:0x4 scope:global +__12EAXCharacteriP10HSIMABLE__ii = .text:0x802964C4; // type:function size:0x84 scope:global +__nw__12EAXCharacterUi = .text:0x80296548; // type:function size:0x58 scope:global +__dl__12EAXCharacterPv = .text:0x802965A0; // type:function size:0x38 scope:global +Reset__12EAXCharacter = .text:0x802965D8; // type:function size:0x4C scope:global +_._12EAXCharacter = .text:0x80296624; // type:function size:0x34 scope:global +Update__12EAXCharacter = .text:0x80296658; // type:function size:0x17C scope:global +Ack__12EAXCharacter = .text:0x802967D4; // type:function size:0x60 scope:global +Deny__12EAXCharacter = .text:0x80296834; // type:function size:0x84 scope:global +InterruptStatic__12EAXCharacter = .text:0x802968B8; // type:function size:0x38 scope:global +InterruptExpletive__12EAXCharacter = .text:0x802968F0; // type:function size:0x40 scope:global +InterruptViolent__12EAXCharacter = .text:0x80296930; // type:function size:0x40 scope:global +InterruptComposedLow__12EAXCharacter = .text:0x80296970; // type:function size:0x4C scope:global +InterruptComposedHigh__12EAXCharacter = .text:0x802969BC; // type:function size:0x4C scope:global +DriverHistory__12EAXCharacter = .text:0x80296A08; // type:function size:0x4C scope:global +HeatJump__12EAXCharacterQ24Csis15Type_heat_level = .text:0x80296A54; // type:function size:0x5C scope:global +_._11EAXDispatch = .text:0x80296AB0; // type:function size:0x50 scope:global +Update__11EAXDispatch = .text:0x80296B00; // type:function size:0x34 scope:global +BackupReply__11EAXDispatchP6EAXCopii = .text:0x80296B34; // type:function size:0xC0 scope:global +ArrestReply__11EAXDispatch = .text:0x80296BF4; // type:function size:0x40 scope:global +PursuitUpdate__11EAXDispatchP6EAXCop = .text:0x80296C34; // type:function size:0x88 scope:global +PursuitEscalationGeneric__11EAXDispatch = .text:0x80296CBC; // type:function size:0x68 scope:global +PursuitEscalation__11EAXDispatch = .text:0x80296D24; // type:function size:0x228 scope:global +BackupUpdate__11EAXDispatchP6EAXCopi = .text:0x80296F4C; // type:function size:0x54 scope:global +BreakAway__11EAXDispatch = .text:0x80296FA0; // type:function size:0xFC scope:global +GoAhead__11EAXDispatch = .text:0x8029709C; // type:function size:0x40 scope:global +TimeExpired__11EAXDispatch = .text:0x802970DC; // type:function size:0x40 scope:global +Report911__11EAXDispatchQ24Csis17Type_pursuit_type = .text:0x8029711C; // type:function size:0x170 scope:global +RBUpdate__11EAXDispatchP6EAXCopSc = .text:0x8029728C; // type:function size:0xA4 scope:global +RBReply__11EAXDispatchP6EAXCopScUi = .text:0x80297330; // type:function size:0x108 scope:global +JurisShift__11EAXDispatchQ24Csis17Type_jurisdiction = .text:0x80297438; // type:function size:0x5C scope:global +BackupETA__11EAXDispatch = .text:0x80297494; // type:function size:0x190 scope:global +VehicleDescription__11EAXDispatch = .text:0x80297624; // type:function size:0x7C scope:global +NoVehicleDescription__11EAXDispatch = .text:0x802976A0; // type:function size:0x40 scope:global +SubRBReply__11EAXDispatch = .text:0x802976E0; // type:function size:0x40 scope:global +_._13EAXAirSupport = .text:0x80297720; // type:function size:0x50 scope:global +Update__13EAXAirSupport = .text:0x80297770; // type:function size:0x140 scope:global +GetCauseOfBailout__13EAXAirSupport = .text:0x802978B0; // type:function size:0x140 scope:global +SelfStrategy__13EAXAirSupporti = .text:0x802979F0; // type:function size:0x44 scope:global +JoinRB__13EAXAirSupport = .text:0x80297A34; // type:function size:0x4C scope:global +LostVisual__13EAXAirSupport = .text:0x80297A80; // type:function size:0x6C scope:global +IntentToBail__13EAXAirSupport = .text:0x80297AEC; // type:function size:0x58 scope:global +Bailout__13EAXAirSupport = .text:0x80297B44; // type:function size:0x58 scope:global +Swarming__13EAXAirSupport = .text:0x80297B9C; // type:function size:0x40 scope:global +Spotter__13EAXAirSupport = .text:0x80297BDC; // type:function size:0x40 scope:global +HazardAlert__13EAXAirSupportQ24Csis27Type_heli_hazard_alert_type = .text:0x80297C1C; // type:function size:0x44 scope:global +BullhornArrest__13EAXAirSupport = .text:0x80297C60; // type:function size:0x58 scope:global +QuadrantMoving__13EAXAirSupport = .text:0x80297CB8; // type:function size:0x40 scope:global +Quadrant__13EAXAirSupport = .text:0x80297CF8; // type:function size:0x40 scope:global +__6EAXCopiP10HSIMABLE__ii = .text:0x80297D38; // type:function size:0x160 scope:global +_._6EAXCop = .text:0x80297E98; // type:function size:0x58 scope:global +Update__6EAXCop = .text:0x80297EF0; // type:function size:0x4BC scope:global +SetRank__6EAXCopi = .text:0x802983AC; // type:function size:0x84 scope:global +SwapVoices__6EAXCopP6EAXCop = .text:0x80298430; // type:function size:0xE0 scope:global +SetActive__6EAXCopb = .text:0x80298510; // type:function size:0x354 scope:global +IsPrimary__6EAXCop = .text:0x80298864; // type:function size:0x28 scope:global +Reset__6EAXCop = .text:0x8029888C; // type:function size:0x58 scope:global +Collision__6EAXCopifP6EAXCop = .text:0x802988E4; // type:function size:0x180 scope:global +AttemptVehicleStop__6EAXCop = .text:0x80298A64; // type:function size:0x254 scope:global +Spotter__6EAXCop = .text:0x80298CB8; // type:function size:0x68 scope:global +SpotterReply__6EAXCop = .text:0x80298D20; // type:function size:0x68 scope:global +Reply911__6EAXCop = .text:0x80298D88; // type:function size:0x40 scope:global +ReinitiatePursuit__6EAXCop = .text:0x80298DC8; // type:function size:0x100 scope:global +VehicleReport__6EAXCop = .text:0x80298EC8; // type:function size:0x164 scope:global +InitiatePursuit__6EAXCop = .text:0x8029902C; // type:function size:0x68 scope:global +LocationReport__6EAXCop = .text:0x80299094; // type:function size:0xD8 scope:global +SelfStrategy__6EAXCopi = .text:0x8029916C; // type:function size:0x124 scope:global +CallforEV__6EAXCopUi = .text:0x80299290; // type:function size:0xE4 scope:global +InitialCallForBackup__6EAXCop = .text:0x80299374; // type:function size:0xAC scope:global +GetBackupTypeFromDispatch__6EAXCopi = .text:0x80299420; // type:function size:0x6C scope:global +CallForBackup__6EAXCopi = .text:0x8029948C; // type:function size:0x7C scope:global +BackupReminder__6EAXCopi = .text:0x80299508; // type:function size:0x7C scope:global +BackupArrives__6EAXCop = .text:0x80299584; // type:function size:0x84 scope:global +PrimaryEngage__6EAXCop = .text:0x80299608; // type:function size:0x84 scope:global +UnitBackupReply__6EAXCop = .text:0x8029968C; // type:function size:0x40 scope:global +NegativeBackupReply__6EAXCop = .text:0x802996CC; // type:function size:0x40 scope:global +InitiateStrategy__6EAXCopi = .text:0x8029970C; // type:function size:0xB8 scope:global +CallToPosition__6EAXCopP6EAXCop = .text:0x802997C4; // type:function size:0x114 scope:global +CallToPositionReminder__6EAXCop = .text:0x802998D8; // type:function size:0x6C scope:global +StrategyExecute__6EAXCop = .text:0x80299944; // type:function size:0x6C scope:global +IntentToRam__6EAXCop = .text:0x802999B0; // type:function size:0x6C scope:global +AnticipateSuccess__6EAXCop = .text:0x80299A1C; // type:function size:0x40 scope:global +AnticipateFail__6EAXCop = .text:0x80299A5C; // type:function size:0x40 scope:global +LostSuspect__6EAXCop = .text:0x80299A9C; // type:function size:0x6C scope:global +Arrest__6EAXCop = .text:0x80299B08; // type:function size:0x6C scope:global +LostVisual__6EAXCop = .text:0x80299B74; // type:function size:0x6C scope:global +RegainVisual__6EAXCop = .text:0x80299BE0; // type:function size:0x6C scope:global +OutcomeFail__6EAXCops = .text:0x80299C4C; // type:function size:0x84 scope:global +StrategyReset__6EAXCopb = .text:0x80299CD0; // type:function size:0x84 scope:global +SwarmingReply__6EAXCop = .text:0x80299D54; // type:function size:0x38 scope:global +Bullhorn__6EAXCop = .text:0x80299D8C; // type:function size:0x58 scope:global +PreBullhorn__6EAXCop = .text:0x80299DE4; // type:function size:0x40 scope:global +BullhornArrest__6EAXCop = .text:0x80299E24; // type:function size:0x84 scope:global +SuspectBehavior__6EAXCop = .text:0x80299EA8; // type:function size:0x68 scope:global +SuspectConfirmed__6EAXCop = .text:0x80299F10; // type:function size:0x68 scope:global +SuspectOutrun__6EAXCop = .text:0x80299F78; // type:function size:0x70 scope:global +SuspectUTurn__6EAXCop = .text:0x80299FE8; // type:function size:0x70 scope:global +FocusChange__6EAXCop = .text:0x8029A058; // type:function size:0x70 scope:global +Impact_Suspect_World__6EAXCop = .text:0x8029A0C8; // type:function size:0xB4 scope:global +Impact_Suspect_Semi__6EAXCop = .text:0x8029A17C; // type:function size:0x78 scope:global +Impact_Suspect_Train__6EAXCop = .text:0x8029A1F4; // type:function size:0x78 scope:global +Impact_Suspect_Guardrail__6EAXCop = .text:0x8029A26C; // type:function size:0x74 scope:global +Impact_Suspect_GasStation__6EAXCop = .text:0x8029A2E0; // type:function size:0x64 scope:global +Impact_Suspect_Spikebelt__6EAXCop = .text:0x8029A344; // type:function size:0xB0 scope:global +Impact_Suspect_Traffic__6EAXCopQ24Csis14Type_intensity = .text:0x8029A3F4; // type:function size:0x44 scope:global +SuspectRollover__6EAXCopQ24Csis14Type_intensity = .text:0x8029A438; // type:function size:0x44 scope:global +SuspectAirborne__6EAXCopQ24Csis14Type_intensity = .text:0x8029A47C; // type:function size:0x44 scope:global +SuspectSpunout__6EAXCopQ24Csis14Type_intensity = .text:0x8029A4C0; // type:function size:0x44 scope:global +SuspectBrake__6EAXCop = .text:0x8029A504; // type:function size:0x40 scope:global +UnitDisabled__6EAXCopi = .text:0x8029A544; // type:function size:0x80 scope:global +PursuitUpdateReply__6EAXCop = .text:0x8029A5C4; // type:function size:0x40 scope:global +Bailout__6EAXCop = .text:0x8029A604; // type:function size:0x6C scope:global +DenyBailout__6EAXCop = .text:0x8029A670; // type:function size:0x40 scope:global +LoBailout__6EAXCop = .text:0x8029A6B0; // type:function size:0x6C scope:global +HiBailout__6EAXCop = .text:0x8029A71C; // type:function size:0x6C scope:global +BailoutBadRoad__6EAXCop = .text:0x8029A788; // type:function size:0x6C scope:global +BailoutTraffic__6EAXCop = .text:0x8029A7F4; // type:function size:0x6C scope:global +CallForRB__6EAXCop = .text:0x8029A860; // type:function size:0x90 scope:global +CallForSubRB__6EAXCop = .text:0x8029A8F0; // type:function size:0x50 scope:global +RBReminder__6EAXCop = .text:0x8029A940; // type:function size:0x6C scope:global +NegRBReply__6EAXCop = .text:0x8029A9AC; // type:function size:0x6C scope:global +RBApproach__6EAXCop = .text:0x8029AA18; // type:function size:0x98 scope:global +RBEngage__6EAXCopb = .text:0x8029AAB0; // type:function size:0x80 scope:global +RBAverted__6EAXCop = .text:0x8029AB30; // type:function size:0x40 scope:global +PursuitApproaching__6EAXCop = .text:0x8029AB70; // type:function size:0x68 scope:global +HeadOn__6EAXCopQ24Csis14Type_intensity = .text:0x8029ABD8; // type:function size:0x44 scope:global +TBoned__6EAXCopQ24Csis14Type_intensity = .text:0x8029AC1C; // type:function size:0x44 scope:global +SideSwiped__6EAXCopQ24Csis14Type_intensity = .text:0x8029AC60; // type:function size:0x44 scope:global +RearEnded__6EAXCopQ24Csis14Type_intensity = .text:0x8029ACA4; // type:function size:0x44 scope:global +Spotted__6EAXCop = .text:0x8029ACE8; // type:function size:0x88 scope:global +DirectionChange__6EAXCop = .text:0x8029AD70; // type:function size:0x64 scope:global +CallForSwarming__6EAXCop = .text:0x8029ADD4; // type:function size:0x40 scope:global +SpotterWanted__6EAXCop = .text:0x8029AE14; // type:function size:0x40 scope:global +Offroad__6EAXCopUib = .text:0x8029AE54; // type:function size:0x58 scope:global +WeatherReport__6EAXCop = .text:0x8029AEAC; // type:function size:0x40 scope:global +__Q26Speech10SpeechFlow = .text:0x8029AEEC; // type:function size:0x28 scope:global +ChangeStateTo__Q26Speech10SpeechFlowi = .text:0x8029AF14; // type:function size:0x18 scope:global +_._Q26Speech10SpeechFlow = .text:0x8029AF2C; // type:function size:0x34 scope:global +OnCopRemoved__Q26Speech10SpeechFlowP6EAXCop = .text:0x8029AF60; // type:function size:0x4 scope:global +OnCopAdded__Q26Speech10SpeechFlowP6EAXCop = .text:0x8029AF64; // type:function size:0x4 scope:global +__Q26Speech11PursuitFlow = .text:0x8029AF68; // type:function size:0xE4 scope:global +_._Q26Speech11PursuitFlow = .text:0x8029B04C; // type:function size:0x54 scope:global +OnCopRemoved__Q26Speech11PursuitFlowP6EAXCop = .text:0x8029B0A0; // type:function size:0x7C scope:global +Update__Q26Speech11PursuitFlow = .text:0x8029B11C; // type:function size:0x1B8 scope:global +CullCheck__Q26Speech11PursuitFlow = .text:0x8029B2D4; // type:function size:0x50 scope:global +Reset__Q26Speech11PursuitFlow = .text:0x8029B324; // type:function size:0x5C scope:global +Reacquire__Q26Speech11PursuitFlow = .text:0x8029B380; // type:function size:0x60 scope:global +RequiresRestart__Q26Speech11PursuitFlow = .text:0x8029B3E0; // type:function size:0xA0 scope:global +CloseInCheck__Q26Speech11PursuitFlow = .text:0x8029B480; // type:function size:0x22C scope:global +PrimaryBranch__Q26Speech11PursuitFlow = .text:0x8029B6AC; // type:function size:0x3D4 scope:global +PlayerStopped__Q26Speech11PursuitFlow = .text:0x8029BA80; // type:function size:0x260 scope:global +SpotterBranch__Q26Speech11PursuitFlow = .text:0x8029BCE0; // type:function size:0x34C scope:global +ScriptedBranch__Q26Speech11PursuitFlow = .text:0x8029C02C; // type:function size:0xD8 scope:global +LostWhileSpotterWait__Q26Speech11PursuitFlow = .text:0x8029C104; // type:function size:0xE4 scope:global +SpotterWait__Q26Speech11PursuitFlow = .text:0x8029C1E8; // type:function size:0x260 scope:global +Bailout__Q26Speech11PursuitFlow = .text:0x8029C448; // type:function size:0x98 scope:global +ChangeTarget__Q26Speech11PursuitFlow = .text:0x8029C4E0; // type:function size:0xA4 scope:global +Terminal__Q26Speech11PursuitFlow = .text:0x8029C584; // type:function size:0x190 scope:global +IsTransitionable__Q26Speech11PursuitFlow = .text:0x8029C714; // type:function size:0x14 scope:global +MessageEventComplete__Q26Speech11PursuitFlowRC19MNotifySpeechStatus = .text:0x8029C728; // type:function size:0xD8 scope:global +__Q26Speech12StrategyFlow = .text:0x8029C800; // type:function size:0x1F8 scope:global +_._Q26Speech12StrategyFlow = .text:0x8029C9F8; // type:function size:0x74 scope:global +Reset__Q26Speech12StrategyFlow = .text:0x8029CA6C; // type:function size:0x64 scope:global +Update__Q26Speech12StrategyFlow = .text:0x8029CAD0; // type:function size:0x1A8 scope:global +CullCheck__Q26Speech12StrategyFlow = .text:0x8029CC78; // type:function size:0x58 scope:global +SoloCheck__Q26Speech12StrategyFlow = .text:0x8029CCD0; // type:function size:0x460 scope:global +CallToPos__Q26Speech12StrategyFlow = .text:0x8029D130; // type:function size:0x248 scope:global +ReqBackup__Q26Speech12StrategyFlow = .text:0x8029D378; // type:function size:0x6A8 scope:global +Waiting__Q26Speech12StrategyFlow = .text:0x8029DA20; // type:function size:0x770 scope:global +Outrun__Q26Speech12StrategyFlow = .text:0x8029E190; // type:function size:0x6F0 scope:global +Lost__Q26Speech12StrategyFlow = .text:0x8029E880; // type:function size:0x50 scope:global +Terminal__Q26Speech12StrategyFlow = .text:0x8029E8D0; // type:function size:0x7C scope:global +IsTransitionable__Q26Speech12StrategyFlow = .text:0x8029E94C; // type:function size:0x24 scope:global +Outcome__Q26Speech12StrategyFlow = .text:0x8029E970; // type:function size:0x1B4 scope:global +MessageReqBackup__Q26Speech12StrategyFlowRC10MReqBackup = .text:0x8029EB24; // type:function size:0x70 scope:global +MessageBackupDenied__Q26Speech12StrategyFlowRC10MReqBackup = .text:0x8029EB94; // type:function size:0x70 scope:global +MessageEventComplete__Q26Speech12StrategyFlowRC19MNotifySpeechStatus = .text:0x8029EC04; // type:function size:0x70 scope:global +__Q26Speech8Observer = .text:0x8029EC74; // type:function size:0x35C scope:global +_._Q26Speech8Observer = .text:0x8029EFD0; // type:function size:0xC4 scope:global +Update__Q26Speech8Observer = .text:0x8029F094; // type:function size:0x6C scope:global +CullCheck__Q26Speech8Observer = .text:0x8029F100; // type:function size:0x34 scope:global +IsTransitionable__Q26Speech8Observer = .text:0x8029F134; // type:function size:0x8 scope:global +Reset__Q26Speech8Observer = .text:0x8029F13C; // type:function size:0xF4 scope:global +Observe__Q26Speech8Observeriif = .text:0x8029F230; // type:function size:0x168 scope:global +Process__Q26Speech8Observer = .text:0x8029F398; // type:function size:0x220 scope:global +CalcFWVec_Road_Car__Q26Speech8Observer = .text:0x8029F5B8; // type:function size:0x14C scope:global +GasStationAftermath__Q26Speech8Observer = .text:0x8029F704; // type:function size:0x110 scope:global +AssessArrest__Q26Speech8Observer = .text:0x8029F814; // type:function size:0x2A8 scope:global +AssessLOS__Q26Speech8Observer = .text:0x8029FABC; // type:function size:0x30C scope:global +NotifyAirborne__Q26Speech8Observerff = .text:0x8029FDC8; // type:function size:0xA0 scope:global +AssessFlippage__Q26Speech8Observer = .text:0x8029FE68; // type:function size:0x16C scope:global +Assess180__Q26Speech8Observer = .text:0x8029FFD4; // type:function size:0x3EC scope:global +AssessOutcome__Q26Speech8Observer = .text:0x802A03C0; // type:function size:0x528 scope:global +AssessBraking__Q26Speech8Observer = .text:0x802A08E8; // type:function size:0x314 scope:global +AssessOutrun__Q26Speech8Observer = .text:0x802A0BFC; // type:function size:0x380 scope:global +AssessOffroad__Q26Speech8Observer = .text:0x802A0F7C; // type:function size:0xF8 scope:global +MessageEventComplete__Q26Speech8ObserverRC19MNotifySpeechStatus = .text:0x802A1074; // type:function size:0x358 scope:global +MessageBlewPastCop__Q26Speech8ObserverRC15MGamePlayMoment = .text:0x802A13CC; // type:function size:0x1DC scope:global +MessageTunnelUpdate__Q26Speech8ObserverRC10MMiscSound = .text:0x802A15A8; // type:function size:0xC4 scope:global +MessageGamePlayMoment__Q26Speech8ObserverRC15MGamePlayMoment = .text:0x802A166C; // type:function size:0x1F4 scope:global +__Q26Speech13RoadblockFlow = .text:0x802A1860; // type:function size:0x208 scope:global +_._Q26Speech13RoadblockFlow = .text:0x802A1A68; // type:function size:0x74 scope:global +NailedSomethingInRB__Q26Speech13RoadblockFlowUi = .text:0x802A1ADC; // type:function size:0x3C scope:global +MessageRoadBlockDodged__Q26Speech13RoadblockFlowRC13MReqRoadBlock = .text:0x802A1B18; // type:function size:0x38 scope:global +SyncRoadblock__Q26Speech13RoadblockFlow = .text:0x802A1B50; // type:function size:0x3F0 scope:global +Update__Q26Speech13RoadblockFlow = .text:0x802A1F40; // type:function size:0x34 scope:global +MessageReqHeliJoinRB__Q26Speech13RoadblockFlowRC13MReqRoadBlock = .text:0x802A1F74; // type:function size:0x60 scope:global +MessagePositionUpdate__Q26Speech13RoadblockFlowRC13MReqRoadBlock = .text:0x802A1FD4; // type:function size:0x1C scope:global +Request__Q26Speech13RoadblockFlow = .text:0x802A1FF0; // type:function size:0x258 scope:global +Setup__Q26Speech13RoadblockFlow = .text:0x802A2248; // type:function size:0x254 scope:global +Approach__Q26Speech13RoadblockFlow = .text:0x802A249C; // type:function size:0x64 scope:global +Effect__Q26Speech13RoadblockFlow = .text:0x802A2500; // type:function size:0x364 scope:global +Service__Q26Speech13RoadblockFlow = .text:0x802A2864; // type:function size:0xF4 scope:global +Terminal__Q26Speech13RoadblockFlow = .text:0x802A2958; // type:function size:0x24 scope:global +Reset__Q26Speech13RoadblockFlow = .text:0x802A297C; // type:function size:0x50 scope:global +IsTransitionable__Q26Speech13RoadblockFlow = .text:0x802A29CC; // type:function size:0x8 scope:global +__Q26Speech9MusicFlow = .text:0x802A29D4; // type:function size:0x334 scope:global +_._Q26Speech9MusicFlow = .text:0x802A2D08; // type:function size:0x94 scope:global +MessageNewPart__Q26Speech9MusicFlowRC16MNotifyMusicFlow = .text:0x802A2D9C; // type:function size:0xA8 scope:global +MessageInitFlow__Q26Speech9MusicFlowRC16MNotifyMusicFlow = .text:0x802A2E44; // type:function size:0xD4 scope:global +MessageTerminate__Q26Speech9MusicFlowRC16MNotifyMusicFlow = .text:0x802A2F18; // type:function size:0x38 scope:global +MessageDone__Q26Speech9MusicFlowRC16MNotifyMusicFlow = .text:0x802A2F50; // type:function size:0x34 scope:global +MessageX360UserTunes__Q26Speech9MusicFlowRC16MNotifyMusicFlow = .text:0x802A2F84; // type:function size:0x1C scope:global +Reacquire__Q26Speech9MusicFlow = .text:0x802A2FA0; // type:function size:0xC0 scope:global +Update__Q26Speech9MusicFlow = .text:0x802A3060; // type:function size:0x324 scope:global +UpdateIntensity__Q26Speech9MusicFlowf = .text:0x802A3384; // type:function size:0x44 scope:global +Waiting__Q26Speech9MusicFlow = .text:0x802A33C8; // type:function size:0xD0 scope:global +Neutral__Q26Speech9MusicFlow = .text:0x802A3498; // type:function size:0x448 scope:global +Lose__Q26Speech9MusicFlow = .text:0x802A38E0; // type:function size:0x3BC scope:global +Win__Q26Speech9MusicFlow = .text:0x802A3C9C; // type:function size:0x338 scope:global +Elude__Q26Speech9MusicFlow = .text:0x802A3FD4; // type:function size:0x158 scope:global +Terminal__Q26Speech9MusicFlow = .text:0x802A412C; // type:function size:0x4C scope:global +IsTransitionable__Q26Speech9MusicFlow = .text:0x802A4178; // type:function size:0x8 scope:global +ChangeStateTo__Q26Speech9MusicFlowi = .text:0x802A4180; // type:function size:0x178 scope:global +Reset__Q26Speech9MusicFlow = .text:0x802A42F8; // type:function size:0x40 scope:global +__7SoundAI = .text:0x802A4338; // type:function size:0xA2C scope:global +_._7SoundAI = .text:0x802A4D64; // type:function size:0x404 scope:global +MessagePerpBusted__7SoundAIRC11MPerpBusted = .text:0x802A5168; // type:function size:0xA4 scope:global +MessageAIPerpBusted__7SoundAIRC11MPerpBusted = .text:0x802A520C; // type:function size:0x50 scope:global +MessageInfraction__7SoundAIRC10MMiscSound = .text:0x802A525C; // type:function size:0xC scope:global +MessageRestart__7SoundAIRC12MRestartRace = .text:0x802A5268; // type:function size:0x50 scope:global +MessageUnspawnCop__7SoundAIRC11MUnspawnCop = .text:0x802A52B8; // type:function size:0x98 scope:global +MessageTireBlown__7SoundAIRC15MGamePlayMoment = .text:0x802A5350; // type:function size:0x94 scope:global +OnVehicleAdded__7SoundAIP8IVehicle = .text:0x802A53E4; // type:function size:0x2C scope:global +OnVehicleRemoved__7SoundAIP8IVehicle = .text:0x802A5410; // type:function size:0x98 scope:global +OnCollision__7SoundAIRCQ33Sim9Collision4Info = .text:0x802A54A8; // type:function size:0x1674 scope:global +GetCopInRB__7SoundAI = .text:0x802A6B1C; // type:function size:0xDC scope:global +GetRandomActiveCop__7SoundAIib = .text:0x802A6BF8; // type:function size:0x750 scope:global +GetRandomCop__7SoundAIi = .text:0x802A7348; // type:function size:0x520 scope:global +OnAttached__7SoundAIP11IAttachable = .text:0x802A7868; // type:function size:0x58 scope:global +OnDetached__7SoundAIP11IAttachable = .text:0x802A78C0; // type:function size:0x144 scope:global +Construct__7SoundAIGQ23Sim5Param = .text:0x802A7A04; // type:function size:0x94 scope:global +GetRoadblock__7SoundAI = .text:0x802A7A98; // type:function size:0xD0 scope:global +IsMusicActive__7SoundAI = .text:0x802A7B68; // type:function size:0x58 scope:global +OnTask__7SoundAIP10HSIMTASK__f = .text:0x802A7BC0; // type:function size:0x19C scope:global +DealWithDeadAir__7SoundAI = .text:0x802A7D5C; // type:function size:0x278 scope:global +UpdateStateMachines__7SoundAI = .text:0x802A7FD4; // type:function size:0x1D8 scope:global +AttemptReattachPursuit__7SoundAI = .text:0x802A81AC; // type:function size:0x2D4 scope:global +SyncPursuit__7SoundAI = .text:0x802A8480; // type:function size:0x76C scope:global +TerminatePursuit__7SoundAIQ27SoundAI11BailoutType = .text:0x802A8BEC; // type:function size:0x1B8 scope:global +ResetPursuit__7SoundAIb = .text:0x802A8DA4; // type:function size:0x1AC scope:global +ShuffleActors__7SoundAI = .text:0x802A8F50; // type:function size:0x7DC scope:global +IsHeadingValid__7SoundAI = .text:0x802A972C; // type:function size:0x28 scope:global +SyncPlayers__7SoundAI = .text:0x802A9754; // type:function size:0xA8C scope:global +Force911State__7SoundAI = .text:0x802AA1E0; // type:function size:0x110 scope:global +SyncCarsToActors__7SoundAI = .text:0x802AA2F0; // type:function size:0xD2C scope:global +SyncFormations__7SoundAI = .text:0x802AB01C; // type:function size:0x34C scope:global +FindFurthestCop__7SoundAIb = .text:0x802AB368; // type:function size:0x11C scope:global +FindClosestCop__7SoundAIbT1 = .text:0x802AB484; // type:function size:0x128 scope:global +RemoveCop__7SoundAIP10HSIMABLE__ = .text:0x802AB5AC; // type:function size:0x4C0 scope:global +AddNewHeli__7SoundAIP8IVehicle = .text:0x802ABA6C; // type:function size:0xEC scope:global +GetBattalionFromRoadID__7SoundAIi = .text:0x802ABB58; // type:function size:0x7C scope:global +GetBattalionFromKey__7SoundAIUi = .text:0x802ABBD4; // type:function size:0x88 scope:global +AddNewCop__7SoundAIP8IVehicle = .text:0x802ABC5C; // type:function size:0x5EC scope:global +MakeLeader__7SoundAIP6EAXCop = .text:0x802AC248; // type:function size:0x4D8 scope:global +GetCallsign__7SoundAIQ24Csis22Type_speaker_battalion = .text:0x802AC720; // type:function size:0x18C scope:global +RandomizeCallsign__7SoundAIRQ26Speech8voiceIDsQ24Csis25Type_speaker_call_sign_idT2 = .text:0x802AC8AC; // type:function size:0x1D0 scope:global +GetVoice__7SoundAIi = .text:0x802ACA7C; // type:function size:0x154 scope:global +GetCop__7SoundAIi = .text:0x802ACBD0; // type:function size:0x7C scope:global +RandomBailoutDeny__7SoundAIP6EAXCop = .text:0x802ACC4C; // type:function size:0x10C scope:global +CalcPlayerDirection__7SoundAIb = .text:0x802ACD58; // type:function size:0x124 scope:global +ForceGlobalVoiceChange__7SoundAI = .text:0x802ACE7C; // type:function size:0xF4 scope:global +Release__7SoundAI = .text:0x802ACF70; // type:function size:0x40 scope:global +GetCustomized__7SoundAIP8IVehicleRQ27SoundAI17CarCustomizations = .text:0x802ACFB0; // type:function size:0x3E8 scope:global +IsHighIntensity__7SoundAI = .text:0x802AD398; // type:function size:0x38 scope:global +GetTimeLastNailedCop__7SoundAI = .text:0x802AD3D0; // type:function size:0x2DC scope:global +SMSCellCall__10MiscSpeechi = .text:0x802AD6AC; // type:function size:0x54 scope:global +IsVehicleTypeOK__10MiscSpeech = .text:0x802AD700; // type:function size:0x128 scope:global +MapSMSToSPCHEnums__10MiscSpeechiRQ24Csis14CellCallStruct = .text:0x802AD828; // type:function size:0x1BC scope:global +GetSPAMLocation__10MiscSpeechiRQ24Csis22Type_offroad_moment_id = .text:0x802AD9E4; // type:function size:0x22C scope:global +GetLocation__10MiscSpeech9RoadNamesRQ24Csis20Type_location_regionRQ24Csis13Type_location = .text:0x802ADC10; // type:function size:0x744 scope:global +Bailout__10MiscSpeechi = .text:0x802AE354; // type:function size:0x9C scope:global +LostSuspect__10MiscSpeechi = .text:0x802AE3F0; // type:function size:0xB8 scope:global +Unit911Reply__10MiscSpeechi = .text:0x802AE4A8; // type:function size:0x74 scope:global +MoreDetails__10MiscSpeechi = .text:0x802AE51C; // type:function size:0x74 scope:global +RBWarning__10MiscSpeech = .text:0x802AE590; // type:function size:0x38 scope:global +RBPosition__10MiscSpeechi = .text:0x802AE5C8; // type:function size:0x5C scope:global +RBEngaged__10MiscSpeechb = .text:0x802AE624; // type:function size:0x74 scope:global +RBAverted__10MiscSpeech = .text:0x802AE698; // type:function size:0x80 scope:global +SwarmingReply__10MiscSpeech = .text:0x802AE718; // type:function size:0x38 scope:global +SwarmingReplyFollow__10MiscSpeech = .text:0x802AE750; // type:function size:0x38 scope:global +QuadrantForming__10MiscSpeech = .text:0x802AE788; // type:function size:0x38 scope:global +SuspectPossiblyGone__10MiscSpeech = .text:0x802AE7C0; // type:function size:0x38 scope:global +QuadrantMoving__10MiscSpeech = .text:0x802AE7F8; // type:function size:0x38 scope:global +OtherLead__10MiscSpeech = .text:0x802AE830; // type:function size:0x38 scope:global +PossibleSuspect__10MiscSpeech = .text:0x802AE868; // type:function size:0x38 scope:global +WrongSuspect__10MiscSpeech = .text:0x802AE8A0; // type:function size:0x38 scope:global +D_Day__10MiscSpeech = .text:0x802AE8D8; // type:function size:0x38 scope:global +DispIntroRace__10MiscSpeech = .text:0x802AE910; // type:function size:0x38 scope:global +clear__Q24_STLt10_List_base2Z18SPCHType_1_EventIDZQ33UTL3Stdt9Allocator2Z18SPCHType_1_EventIDZ10_type_list = .text:0x802AE948; // type:function size:0x78 scope:global +reserve__Q24_STLt6vector2ZQ26Speech17SPCHSampleRequestZQ33UTL3Stdt9Allocator2ZQ26Speech17SPCHSampleRequestZQ26Speech19_type_SampleReqListUi = .text:0x802AE9C0; // type:function size:0x1E4 scope:global +__less__H1ZPQ26Speech20ScheduledSpeechEvent_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x802AEBA4; // type:function size:0xC scope:global +__adjust_heap__H4ZPPQ26Speech20ScheduledSpeechEventZiZPQ26Speech20ScheduledSpeechEventZQ24_STLt4less1ZPQ26Speech20ScheduledSpeechEvent_4_STLX01X11X11X21X31_v = .text:0x802AEBB0; // type:function size:0xCC scope:global +make_heap__H2ZPPQ26Speech20ScheduledSpeechEventZQ24_STLt4less1ZPQ26Speech20ScheduledSpeechEvent_4_STLX01X01X11_v = .text:0x802AEC7C; // type:function size:0x7C scope:global +pop_heap__H2ZPPQ26Speech20ScheduledSpeechEventZQ24_STLt4less1ZPQ26Speech20ScheduledSpeechEvent_4_STLX01X01X11_v = .text:0x802AECF8; // type:function size:0x48 scope:global +__partial_sort__H3ZPPQ26Speech20ScheduledSpeechEventZPQ26Speech20ScheduledSpeechEventZQ24_STLt4less1ZPQ26Speech20ScheduledSpeechEvent_4_STLX01X01X01PX11X21_v = .text:0x802AED40; // type:function size:0xB8 scope:global +partial_sort__H2ZPPQ26Speech20ScheduledSpeechEventZQ24_STLt4less1ZPQ26Speech20ScheduledSpeechEvent_4_STLX01X01X01X11_v = .text:0x802AEDF8; // type:function size:0x30 scope:global +__unguarded_partition__H3ZPPQ26Speech20ScheduledSpeechEventZPQ26Speech20ScheduledSpeechEventZQ24_STLt4less1ZPQ26Speech20ScheduledSpeechEvent_4_STLX01X01X11X21_X01 = .text:0x802AEE28; // type:function size:0x50 scope:global +__introsort_loop__H4ZPPQ26Speech20ScheduledSpeechEventZPQ26Speech20ScheduledSpeechEventZiZQ24_STLt4less1ZPQ26Speech20ScheduledSpeechEvent_4_STLX01X01PX11X21X31_v = .text:0x802AEE78; // type:function size:0x124 scope:global +__unguarded_linear_insert__H3ZPPQ26Speech20ScheduledSpeechEventZPQ26Speech20ScheduledSpeechEventZQ24_STLt4less1ZPQ26Speech20ScheduledSpeechEvent_4_STLX01X11X21_v = .text:0x802AEF9C; // type:function size:0x28 scope:global +__insertion_sort__H2ZPPQ26Speech20ScheduledSpeechEventZQ24_STLt4less1ZPQ26Speech20ScheduledSpeechEvent_4_STLX01X01X11_v = .text:0x802AEFC4; // type:function size:0x9C scope:global +__unguarded_insertion_sort_aux__H3ZPPQ26Speech20ScheduledSpeechEventZPQ26Speech20ScheduledSpeechEventZQ24_STLt4less1ZPQ26Speech20ScheduledSpeechEvent_4_STLX01X01PX11X21_v = .text:0x802AF060; // type:function size:0x58 scope:global +__final_insertion_sort__H2ZPPQ26Speech20ScheduledSpeechEventZQ24_STLt4less1ZPQ26Speech20ScheduledSpeechEvent_4_STLX01X01X11_v = .text:0x802AF0B8; // type:function size:0x7C scope:global +sort__H1ZPPQ26Speech20ScheduledSpeechEvent_4_STLX01X01_v = .text:0x802AF134; // type:function size:0xA0 scope:global +__as__Q24_STLt6vector2ZPQ26Speech20ScheduledSpeechEventZQ33UTL3Stdt9Allocator2ZPQ26Speech20ScheduledSpeechEventZQ26Speech21_type_SchedSpchEventsRCQ24_STLt6vector2ZPQ26Speech20ScheduledSpeechEventZQ33UTL3Stdt9Allocator2ZPQ26Speech20ScheduledSpeechEventZQ26Speech21_type_SchedSpchEvents = .text:0x802AF1D4; // type:function size:0x164 scope:global +find_if__H2ZPPQ26Speech20ScheduledSpeechEventZPFPQ26Speech20ScheduledSpeechEvent_b_4_STLX01X01X11_X01 = .text:0x802AF338; // type:function size:0x110 scope:global +__adjust_heap__H4ZPPQ26Speech20ScheduledSpeechEventZiZPQ26Speech20ScheduledSpeechEventZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X11X11X21X31_v = .text:0x802AF448; // type:function size:0x118 scope:global +make_heap__H2ZPPQ26Speech20ScheduledSpeechEventZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X01X11_v = .text:0x802AF560; // type:function size:0x78 scope:global +pop_heap__H2ZPPQ26Speech20ScheduledSpeechEventZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X01X11_v = .text:0x802AF5D8; // type:function size:0x40 scope:global +__partial_sort__H3ZPPQ26Speech20ScheduledSpeechEventZPQ26Speech20ScheduledSpeechEventZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X01X01PX11X21_v = .text:0x802AF618; // type:function size:0xBC scope:global +partial_sort__H2ZPPQ26Speech20ScheduledSpeechEventZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X01X01X11_v = .text:0x802AF6D4; // type:function size:0x28 scope:global +__unguarded_partition__H3ZPPQ26Speech20ScheduledSpeechEventZPQ26Speech20ScheduledSpeechEventZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X01X11X21_X01 = .text:0x802AF6FC; // type:function size:0x9C scope:global +__introsort_loop__H4ZPPQ26Speech20ScheduledSpeechEventZPQ26Speech20ScheduledSpeechEventZiZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X01PX11X21X31_v = .text:0x802AF798; // type:function size:0x158 scope:global +__unguarded_linear_insert__H3ZPPQ26Speech20ScheduledSpeechEventZPQ26Speech20ScheduledSpeechEventZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X11X21_v = .text:0x802AF8F0; // type:function size:0x60 scope:global +__insertion_sort__H2ZPPQ26Speech20ScheduledSpeechEventZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X01X11_v = .text:0x802AF950; // type:function size:0xA4 scope:global +__unguarded_insertion_sort_aux__H3ZPPQ26Speech20ScheduledSpeechEventZPQ26Speech20ScheduledSpeechEventZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X01PX11X21_v = .text:0x802AF9F4; // type:function size:0x54 scope:global +__final_insertion_sort__H2ZPPQ26Speech20ScheduledSpeechEventZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X01X11_v = .text:0x802AFA48; // type:function size:0x6C scope:global +sort__H2ZPPQ26Speech20ScheduledSpeechEventZPFPCQ26Speech20ScheduledSpeechEventPCQ26Speech20ScheduledSpeechEvent_b_4_STLX01X01X11_v = .text:0x802AFAB4; // type:function size:0x84 scope:global +_M_create_nodes__Q24_STLt11_Deque_base2ZiZQ24_STLt9allocator1ZiPPiT1 = .text:0x802AFB38; // type:function size:0x5C scope:global +_M_initialize_map__Q24_STLt11_Deque_base2ZiZQ24_STLt9allocator1ZiUi = .text:0x802AFB94; // type:function size:0xF4 scope:global +_M_destroy_nodes__Q24_STLt11_Deque_base2ZiZQ24_STLt9allocator1ZiPPiT1 = .text:0x802AFC88; // type:function size:0x64 scope:global +_._Q24_STLt11_Deque_base2ZiZQ24_STLt9allocator1Zi = .text:0x802AFCEC; // type:function size:0x80 scope:global +clear__Q24_STLt5deque2ZiZQ24_STLt9allocator1Zi = .text:0x802AFD6C; // type:function size:0xC8 scope:global +reserve__Q24_STLt6vector2ZPQ26Speech16SpeechSampleDataZQ33UTL3Stdt9Allocator2ZPQ26Speech16SpeechSampleDataZQ26Speech21_type_SpeechSampleVecUi = .text:0x802AFE34; // type:function size:0x11C scope:global +_M_reallocate_map__Q24_STLt5deque2ZiZQ24_STLt9allocator1ZiUib = .text:0x802AFF50; // type:function size:0x1C0 scope:global +_M_push_back_aux_v__Q24_STLt5deque2ZiZQ24_STLt9allocator1ZiRCi = .text:0x802B0110; // type:function size:0xA8 scope:global +_M_pop_front_aux__Q24_STLt5deque2ZiZQ24_STLt9allocator1Zi = .text:0x802B01B8; // type:function size:0x6C scope:global +find_if__H2ZPPQ26Speech16SpeechSampleDataZPFPQ26Speech16SpeechSampleData_b_4_STLX01X01X11_X01 = .text:0x802B0224; // type:function size:0x110 scope:global +__less__H1ZQ26Speech17SPCHSampleRequest_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x802B0334; // type:function size:0xC scope:global +__adjust_heap__H4ZPQ26Speech17SPCHSampleRequestZiZQ26Speech17SPCHSampleRequestZQ24_STLt4less1ZQ26Speech17SPCHSampleRequest_4_STLX01X11X11X21X31_v = .text:0x802B0340; // type:function size:0x324 scope:global +make_heap__H2ZPQ26Speech17SPCHSampleRequestZQ24_STLt4less1ZQ26Speech17SPCHSampleRequest_4_STLX01X01X11_v = .text:0x802B0664; // type:function size:0x110 scope:global +pop_heap__H2ZPQ26Speech17SPCHSampleRequestZQ24_STLt4less1ZQ26Speech17SPCHSampleRequest_4_STLX01X01X11_v = .text:0x802B0774; // type:function size:0x1B0 scope:global +__partial_sort__H3ZPQ26Speech17SPCHSampleRequestZQ26Speech17SPCHSampleRequestZQ24_STLt4less1ZQ26Speech17SPCHSampleRequest_4_STLX01X01X01PX11X21_v = .text:0x802B0924; // type:function size:0x24C scope:global +partial_sort__H2ZPQ26Speech17SPCHSampleRequestZQ24_STLt4less1ZQ26Speech17SPCHSampleRequest_4_STLX01X01X01X11_v = .text:0x802B0B70; // type:function size:0x30 scope:global +__unguarded_partition__H3ZPQ26Speech17SPCHSampleRequestZQ26Speech17SPCHSampleRequestZQ24_STLt4less1ZQ26Speech17SPCHSampleRequest_4_STLX01X01X11X21_X01 = .text:0x802B0BA0; // type:function size:0x1B4 scope:global +__introsort_loop__H4ZPQ26Speech17SPCHSampleRequestZQ26Speech17SPCHSampleRequestZiZQ24_STLt4less1ZQ26Speech17SPCHSampleRequest_4_STLX01X01PX11X21X31_v = .text:0x802B0D54; // type:function size:0x1B8 scope:global +__unguarded_linear_insert__H3ZPQ26Speech17SPCHSampleRequestZQ26Speech17SPCHSampleRequestZQ24_STLt4less1ZQ26Speech17SPCHSampleRequest_4_STLX01X11X21_v = .text:0x802B0F0C; // type:function size:0x104 scope:global +__insertion_sort__H2ZPQ26Speech17SPCHSampleRequestZQ24_STLt4less1ZQ26Speech17SPCHSampleRequest_4_STLX01X01X11_v = .text:0x802B1010; // type:function size:0x27C scope:global +__unguarded_insertion_sort_aux__H3ZPQ26Speech17SPCHSampleRequestZQ26Speech17SPCHSampleRequestZQ24_STLt4less1ZQ26Speech17SPCHSampleRequest_4_STLX01X01PX11X21_v = .text:0x802B128C; // type:function size:0xCC scope:global +__final_insertion_sort__H2ZPQ26Speech17SPCHSampleRequestZQ24_STLt4less1ZQ26Speech17SPCHSampleRequest_4_STLX01X01X11_v = .text:0x802B1358; // type:function size:0x88 scope:global +sort__H1ZPQ26Speech17SPCHSampleRequest_4_STLX01X01_v = .text:0x802B13E0; // type:function size:0xAC scope:global +clear__Q24_STLt10_List_base2ZiZQ33UTL3Stdt9Allocator2ZiZ10_type_list = .text:0x802B148C; // type:function size:0x78 scope:global +ScheduleSpeech__H1ZQ24Csis17AcknowledgeStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1504; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis32Interrupts_StaticInterruptStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1540; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis29Interrupts_InterruptRamStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B157C; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis33Interrupts_InterruptRamHighStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B15B8; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis26Interrupts_InterruptStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B15F4; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis33AnytimeEvents_DriverHistoryStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1630; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis28AnytimeEvents_HeatJumpStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B166C; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis28Backup_DispBackupReplyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B16A8; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis28Arrest_DispArrestReplyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B16E4; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis37AnytimeEvents_DispPursuitUpdateStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1720; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis34AnytimeEvents_DispPursEscGenStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B175C; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis41AnytimeEvents_DispPursuitEscalationStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1798; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis29Backup_DispBackupUpdateStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B17D4; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis33AnytimeEvents_DispBreakAwayStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1810; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis23Setup_DispGoAheadStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B184C; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis35AnytimeEvents_DispTimeExpiredStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1888; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis33AnytimeEvents_Disp911ReportStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B18C4; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis34StaticRoadblock_DispRBUpdateStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1900; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis33StaticRoadblock_DispRBReplyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B193C; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis34AnytimeEvents_DispJurisShiftStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1978; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis22Backup_DispBUETAStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B19B4; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis26Setup_DispVehDescripStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B19F0; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis28Setup_DispNoVehDescripStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1A2C; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis31StaticRoadblock_DispSubRBStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1A68; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis35HeliSpecific_HeliSelfStrategyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1AA4; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis33HeliSpecific_HeliLostVisualStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1AE0; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis35HeliSpecific_HeliIntentToBailStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1B1C; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis30HeliSpecific_HeliBailoutStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1B58; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis31HeliSpecific_HeliSwarmingStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1B94; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis30HeliSpecific_HeliSpotterStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1BD0; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis34HeliSpecific_HeliHazardAlertStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1C0C; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis37HeliSpecific_HeliBullhornArrestStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1C48; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis37HeliSpecific_HeliQuadrentMovingStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1C84; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis31HeliSpecific_HeliQuadrentStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1CC0; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis25Setup_PrimaryEngageStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1CFC; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis24Setup_AttmptVehStpStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1D38; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis19Setup_SpotterStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1D74; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis24Setup_SpotterReplyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1DB0; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis32AnytimeEvents_Unit911ReplyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1DEC; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis25Setup_ReInitPursuitStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1E28; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis25Setup_VehicleReportStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1E64; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis23Setup_InitPursuitStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1EA0; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis26Setup_LocationReportStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1EDC; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis24Setup_SelfStrategyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1F18; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis29AnytimeEvents_CallForEVStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1F54; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis31Setup_InitialCallForBU_MSStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1F90; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis28Setup_InitialCallForBUStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B1FCC; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis22Backup_CallForBUStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2008; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis23Backup_BUReminderStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2044; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis22Backup_BUArrivesStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2080; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis24Backup_UnitBUReplyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B20BC; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis28Backup_NegativeBUReplyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B20F8; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis34RollingStrategy_InitStrategyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2134; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis36RollingStrategy_CallToPositionStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2170; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis39RollingStrategy_CallToPositionRemStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B21AC; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis37RollingStrategy_StrategyExecuteStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B21E8; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis31AnytimeEvents_IntentToRamStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2224; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis31Outcome_AnticipateSuccessStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2260; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis28Outcome_AnticipateFailStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B229C; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis31AnytimeEvents_LostSuspectStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B22D8; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis19Arrest_ArrestStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2314; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis30AnytimeEvents_LostVisualStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2350; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis32AnytimeEvents_RegainVisualStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B238C; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis25Outcome_OutcomeFailStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B23C8; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis27Outcome_StrategyResetStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2404; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis29ExtraCops_SwarmingReplyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2440; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis20Setup_BullhornStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B247C; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis26Setup_BullhornPrefixStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B24B8; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis27Arrest_BullhornArrestStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B24F4; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis36AnytimeEvents_SuspectBehaviourStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2530; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis28Setup_SuspectConfirmedStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B256C; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis33AnytimeEvents_SuspectOutrunStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B25A8; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis32AnytimeEvents_SuspectUTurnStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B25E4; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis31AnytimeEvents_FocusChangeStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2620; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis34AnytimeEvents_CollisionWorldStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B265C; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis34AnytimeEvents_CollWorld_CiviStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2698; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis34AnytimeEvents_CollWorld_FlipStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B26D4; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis33AnytimeEvents_CollWorld_AirStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2710; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis34AnytimeEvents_CollWorld_SpinStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B274C; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis32AnytimeEvents_SuspectBrakeStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2788; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis32AnytimeEvents_UnitDisabledStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B27C4; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis36AnytimeEvents_PursuitUpdateRepStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2800; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis27AnytimeEvents_BailoutStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B283C; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis31AnytimeEvents_BailoutDenyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2878; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis31StaticRoadblock_CallForRBStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B28B4; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis35StaticRoadblock_CallForRB_subStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B28F0; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis32StaticRoadblock_RBReminderStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B292C; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis37StaticRoadblock_NegativeRBReplyStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2968; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis32StaticRoadblock_RBApproachStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B29A4; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis30StaticRoadblock_RBEngageStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B29E0; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis31StaticRoadblock_RBAvertedStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2A1C; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis40StaticRoadblock_PursuitApproachingStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2A58; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis32Interrupts_InterruptRam_HOStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2A94; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis32Interrupts_InterruptRam_TBStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2AD0; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis32Interrupts_InterruptRam_SSStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2B0C; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis32Interrupts_InterruptRam_REStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2B48; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis27AnytimeEvents_SpottedStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2B84; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis33AnytimeEvents_DirectionHighStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2BC0; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis28Backup_CallForSwarmingStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2BFC; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis25Setup_SpotterWantedStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2C38; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis33AnytimeEvents_OffroadMomentStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2C74; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis33AnytimeEvents_WeatherReportStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B2CB0; // type:function size:0x3C scope:global +reserve__Q24_STLt6vector2ZP6EAXCopZQ33UTL3Stdt9Allocator2ZP6EAXCopZQ26Speech13_type_copListUi = .text:0x802B2CEC; // type:function size:0x11C scope:global +__less__H1ZP6EAXCop_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x802B2E08; // type:function size:0xC scope:global +__adjust_heap__H4ZPP6EAXCopZiZP6EAXCopZQ24_STLt4less1ZP6EAXCop_4_STLX01X11X11X21X31_v = .text:0x802B2E14; // type:function size:0xCC scope:global +make_heap__H2ZPP6EAXCopZQ24_STLt4less1ZP6EAXCop_4_STLX01X01X11_v = .text:0x802B2EE0; // type:function size:0x7C scope:global +pop_heap__H2ZPP6EAXCopZQ24_STLt4less1ZP6EAXCop_4_STLX01X01X11_v = .text:0x802B2F5C; // type:function size:0x48 scope:global +__partial_sort__H3ZPP6EAXCopZP6EAXCopZQ24_STLt4less1ZP6EAXCop_4_STLX01X01X01PX11X21_v = .text:0x802B2FA4; // type:function size:0xB8 scope:global +partial_sort__H2ZPP6EAXCopZQ24_STLt4less1ZP6EAXCop_4_STLX01X01X01X11_v = .text:0x802B305C; // type:function size:0x30 scope:global +__unguarded_partition__H3ZPP6EAXCopZP6EAXCopZQ24_STLt4less1ZP6EAXCop_4_STLX01X01X11X21_X01 = .text:0x802B308C; // type:function size:0x50 scope:global +__introsort_loop__H4ZPP6EAXCopZP6EAXCopZiZQ24_STLt4less1ZP6EAXCop_4_STLX01X01PX11X21X31_v = .text:0x802B30DC; // type:function size:0x124 scope:global +__unguarded_linear_insert__H3ZPP6EAXCopZP6EAXCopZQ24_STLt4less1ZP6EAXCop_4_STLX01X11X21_v = .text:0x802B3200; // type:function size:0x28 scope:global +__insertion_sort__H2ZPP6EAXCopZQ24_STLt4less1ZP6EAXCop_4_STLX01X01X11_v = .text:0x802B3228; // type:function size:0x9C scope:global +__unguarded_insertion_sort_aux__H3ZPP6EAXCopZP6EAXCopZQ24_STLt4less1ZP6EAXCop_4_STLX01X01PX11X21_v = .text:0x802B32C4; // type:function size:0x58 scope:global +__final_insertion_sort__H2ZPP6EAXCopZQ24_STLt4less1ZP6EAXCop_4_STLX01X01X11_v = .text:0x802B331C; // type:function size:0x7C scope:global +sort__H1ZPP6EAXCop_4_STLX01X01_v = .text:0x802B3398; // type:function size:0xA0 scope:global +clear__Q24_STLt10_List_base2ZQ26Speech17SpeechObservationZQ33UTL3Stdt9Allocator2ZQ26Speech17SpeechObservationZQ26Speech18_type_observations = .text:0x802B3438; // type:function size:0x78 scope:global +find_if__H2ZPP8IVehicleZQ26Speech13ComComparator_4_STLX01X01X11_X01 = .text:0x802B34B0; // type:function size:0x234 scope:global +reserve__Q24_STLt6vector2ZP6EAXCopZQ33UTL3Stdt9Allocator2ZP6EAXCopZ12_type_vectorUi = .text:0x802B36E4; // type:function size:0x11C scope:global +reserve__Q24_STLt6vector2ZP8IVehicleZQ33UTL3Stdt9Allocator2ZP8IVehicleZ18_type_IVehiclePtrsUi = .text:0x802B3800; // type:function size:0x11C scope:global +ScheduleSpeech__H1ZQ24Csis14CellCallStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B391C; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis23Setup_MoreDetailsStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3958; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis25ExtraCops_RBWarningStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3994; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis26ExtraCops_RBPositionStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B39D0; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis29ExtraCops_ExtraRBEngageStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3A0C; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis30ExtraCops_ExtraRBAvertedStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3A48; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis35ExtraCops_SwarmingReplyFollowStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3A84; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis31ExtraCops_QuadrentFormingStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3AC0; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis35ExtraCops_SuspectPossiblyGoneStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3AFC; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis30ExtraCops_QuadrentMovingStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3B38; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis25ExtraCops_OtherLeadStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3B74; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis31ExtraCops_PossibleSuspectStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3BB0; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis28ExtraCops_WrongSuspectStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3BEC; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis11D_DayStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3C28; // type:function size:0x3C scope:global +ScheduleSpeech__H1ZQ24Csis19DispIntroRaceStruct_Q26Speech7ManagerRX01RQ24Csis11InterfaceIdRQ24Csis14FunctionHandleP12EAXCharacter_v = .text:0x802B3C64; // type:function size:0x3C scope:global +__static_initialization_and_destruction_0 = .text:0x802B3CA0; // type:function size:0x844 scope:local +_._Q26Speech15SpeechSampleVec = .text:0x802B44E4; // type:function size:0x80 scope:global +_._Q26Speech10VoiceUsage = .text:0x802B4564; // type:function size:0x170 scope:global +_._Q26Speech15SchedSpchEvents = .text:0x802B46D4; // type:function size:0x80 scope:global +_._Q26Speech7copList = .text:0x802B4754; // type:function size:0x80 scope:global +_._Q26Speech12observations = .text:0x802B47D4; // type:function size:0x74 scope:global +GetNumBanks__Q26Speech6Module = .text:0x802B4848; // type:function size:0x8 scope:global +GetFilename__Q26Speech6Module = .text:0x802B4850; // type:function size:0x18 scope:global +QueStream__Q26Speech6Module12eNISSFX_TYPEPFv_vb = .text:0x802B4868; // type:function size:0x8 scope:global +IsStreamQueued__Q26Speech6Module = .text:0x802B4870; // type:function size:0x8 scope:global +GetCSIptr__Q26Speech10GameSpeech = .text:0x802B4878; // type:function size:0xC scope:global +GetChannel__Q26Speech10GameSpeech = .text:0x802B4884; // type:function size:0xC scope:global +GetEventDat__Q26Speech10GameSpeech = .text:0x802B4890; // type:function size:0xC scope:global +IsDataLoaded__Q26Speech10GameSpeech = .text:0x802B489C; // type:function size:0x18 scope:global +GetState__Q26Speech10SpeechFlow = .text:0x802B48B4; // type:function size:0x8 scope:global +Reset__Q26Speech10SpeechFlow = .text:0x802B48BC; // type:function size:0x4C scope:global +IsBusy__Q26Speech10SpeechFlow = .text:0x802B4908; // type:function size:0x18 scope:global +ClassKey__Q36Attrib3Gen10speechtune = .text:0x802B4920; // type:function size:0xC scope:global +GetHandle__12EAXCharacter = .text:0x802B492C; // type:function size:0x8 scope:global +SetHandle__12EAXCharacterP10HSIMABLE__ = .text:0x802B4934; // type:function size:0x8 scope:global +GetSpeakerID__12EAXCharacter = .text:0x802B493C; // type:function size:0x8 scope:global +GetCallsign__12EAXCharacter = .text:0x802B4944; // type:function size:0x8 scope:global +GetUnitNumber__12EAXCharacter = .text:0x802B494C; // type:function size:0x8 scope:global +SetCallsign__12EAXCharacteri = .text:0x802B4954; // type:function size:0x8 scope:global +SetUnitNumber__12EAXCharacteri = .text:0x802B495C; // type:function size:0x8 scope:global +SetSpeakerID__12EAXCharacteri = .text:0x802B4964; // type:function size:0x8 scope:global +SetPosition__12EAXCharacterRCQ25UMath7Vector3 = .text:0x802B496C; // type:function size:0x20 scope:global +GetPosition__12EAXCharacter = .text:0x802B498C; // type:function size:0x24 scope:global +SetSpeed__12EAXCharacterf = .text:0x802B49B0; // type:function size:0x8 scope:global +GetDistance__12EAXCharacter = .text:0x802B49B8; // type:function size:0x8 scope:global +GetHealth__12EAXCharacter = .text:0x802B49C0; // type:function size:0x8 scope:global +IsActive__12EAXCharacter = .text:0x802B49C8; // type:function size:0x8 scope:global +SetActive__12EAXCharacterb = .text:0x802B49D0; // type:function size:0x8 scope:global +GetSpeed__12EAXCharacter = .text:0x802B49D8; // type:function size:0x8 scope:global +IsDead__12EAXCharacter = .text:0x802B49E0; // type:function size:0x8 scope:global +HasLOS__12EAXCharacter = .text:0x802B49E8; // type:function size:0x8 scope:global +SetLOS__12EAXCharacterb = .text:0x802B49F0; // type:function size:0x8 scope:global +GetRandomizedCode__12EAXCharacter = .text:0x802B49F8; // type:function size:0x8 scope:global +IsHeli__6EAXCop = .text:0x802B4A00; // type:function size:0x8 scope:global +IsCross__6EAXCop = .text:0x802B4A08; // type:function size:0x14 scope:global +SetInFormation__6EAXCopb = .text:0x802B4A1C; // type:function size:0x8 scope:global +GetInFormation__6EAXCop = .text:0x802B4A24; // type:function size:0x8 scope:global +SetInPosition__6EAXCopb = .text:0x802B4A2C; // type:function size:0x8 scope:global +GetInPosition__6EAXCop = .text:0x802B4A34; // type:function size:0x8 scope:global +SetTgtOffset__6EAXCopRCQ25UMath7Vector3 = .text:0x802B4A3C; // type:function size:0x20 scope:global +GetTgtOffset__6EAXCop = .text:0x802B4A5C; // type:function size:0x24 scope:global +GetRank__6EAXCop = .text:0x802B4A80; // type:function size:0x18 scope:global +JustHitTraffic__6EAXCop = .text:0x802B4A98; // type:function size:0x10 scope:global +WasRammed__6EAXCop = .text:0x802B4AA8; // type:function size:0x1C scope:global +GetTimesRammed__6EAXCop = .text:0x802B4AC4; // type:function size:0x8 scope:global +GetTimeLastSeen__6EAXCop = .text:0x802B4ACC; // type:function size:0x4C scope:global +GetTimeAirborne__6EAXCop = .text:0x802B4B18; // type:function size:0x4C scope:global +GetTimeLastRammed__6EAXCop = .text:0x802B4B64; // type:function size:0x4C scope:global +GetTimeLastClosing__6EAXCop = .text:0x802B4BB0; // type:function size:0x4C scope:global +IsAhead__6EAXCop = .text:0x802B4BFC; // type:function size:0x30 scope:global +SetAhead__6EAXCopb = .text:0x802B4C2C; // type:function size:0x8 scope:global +IsHeli__13EAXAirSupport = .text:0x802B4C34; // type:function size:0x8 scope:global +GetCSIptr__Q26Speech10SED_NISSFX = .text:0x802B4C3C; // type:function size:0xC scope:global +GetChannel__Q26Speech10SED_NISSFX = .text:0x802B4C48; // type:function size:0xC scope:global +GetEventDat__Q26Speech10SED_NISSFX = .text:0x802B4C54; // type:function size:0xC scope:global +IsDataLoaded__Q26Speech10SED_NISSFX = .text:0x802B4C60; // type:function size:0xC scope:global +_._t12VecHashMap644ZQ26Speech16SpeechSampleDataZQ26Speech22TablePolicy_FixedAudiob0Ui100 = .text:0x802B4C6C; // type:function size:0x74 scope:global +_._Q26Speech13SpchSampleMap = .text:0x802B4CE0; // type:function size:0x58 scope:global +RebuildTable__t10VecHashMap5ZUxZQ26Speech16SpeechSampleDataZQ26Speech22TablePolicy_FixedAudiob0Ui100Ui = .text:0x802B4D38; // type:function size:0x29C scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z19MNotifySpeechStatusZQ26Speech11PursuitFlowZQ26Speech11PursuitFlowPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B4FD4; // type:function size:0x88 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z10MReqBackupZQ26Speech12StrategyFlowZQ26Speech12StrategyFlowPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B505C; // type:function size:0x88 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z19MNotifySpeechStatusZQ26Speech12StrategyFlowZQ26Speech12StrategyFlowPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B50E4; // type:function size:0x88 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z15MGamePlayMomentZQ26Speech8ObserverZQ26Speech8ObserverPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B516C; // type:function size:0x88 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z19MNotifySpeechStatusZQ26Speech8ObserverZQ26Speech8ObserverPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B51F4; // type:function size:0x88 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z10MMiscSoundZQ26Speech8ObserverZQ26Speech8ObserverPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B527C; // type:function size:0x88 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z13MReqRoadBlockZQ26Speech13RoadblockFlowZQ26Speech13RoadblockFlowPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B5304; // type:function size:0x88 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z16MNotifyMusicFlowZQ26Speech9MusicFlowZQ26Speech9MusicFlowPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B538C; // type:function size:0x88 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z11MPerpBustedZ7SoundAIZ7SoundAIPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B5414; // type:function size:0x88 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z12MRestartRaceZ7SoundAIZ7SoundAIPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B549C; // type:function size:0x88 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z10MMiscSoundZ7SoundAIZ7SoundAIPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B5524; // type:function size:0x88 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z11MUnspawnCopZ7SoundAIZ7SoundAIPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B55AC; // type:function size:0x88 scope:global +Call__Q36Hermes7Handlert13MemberHandler3Z15MGamePlayMomentZ7SoundAIZ7SoundAIPCQ26Hermes7MessagePQ26Hermes7Handler = .text:0x802B5634; // type:function size:0x88 scope:global +_._Q26Speech15SpeechHashIDMap = .text:0x802B56BC; // type:function size:0xE0 scope:global +_._Q26Speech12EventHistory = .text:0x802B579C; // type:function size:0xE0 scope:global +_._Q26Speech13SPCHEventList = .text:0x802B587C; // type:function size:0x84 scope:global +_._Q26Speech13SampleReqList = .text:0x802B5900; // type:function size:0xB0 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZQ26Speech11HistoryPairi264i16UiUi = .text:0x802B59B0; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZQ26Speech11HistoryPairi264i16PQ26Speech11HistoryPairUi = .text:0x802B59B8; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZQ26Speech11HistoryPairi264i16Ui = .text:0x802B59BC; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZQ26Speech11HistoryPairi264i16 = .text:0x802B59C4; // type:function size:0x8 scope:global +OnGrowRequest__Q23UTLt6Vector2ZQ26Speech11HistoryPairi16Ui = .text:0x802B59CC; // type:function size:0x4 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZQ26Speech15SpeechEventPairi264i16UiUi = .text:0x802B59D0; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZQ26Speech15SpeechEventPairi264i16PQ26Speech15SpeechEventPairUi = .text:0x802B59D8; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZQ26Speech15SpeechEventPairi264i16Ui = .text:0x802B59DC; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZQ26Speech15SpeechEventPairi264i16 = .text:0x802B59E4; // type:function size:0x8 scope:global +OnGrowRequest__Q23UTLt6Vector2ZQ26Speech15SpeechEventPairi16Ui = .text:0x802B59EC; // type:function size:0x4 scope:global +_._Q23UTLt6Vector2ZQ26Speech15SpeechEventPairi16 = .text:0x802B59F0; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZQ26Speech15SpeechEventPairi264i16 = .text:0x802B5A24; // type:function size:0xB4 scope:global +_._Q23UTLt6Vector2ZQ26Speech11HistoryPairi16 = .text:0x802B5AD8; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZQ26Speech11HistoryPairi264i16 = .text:0x802B5B0C; // type:function size:0xB4 scope:global +GetGrowSize__CQ23UTLt6Vector2ZQ26Speech11HistoryPairi16Ui = .text:0x802B5BC0; // type:function size:0x20 scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZQ26Speech11HistoryPairi16 = .text:0x802B5BE0; // type:function size:0xC scope:global +GetGrowSize__CQ23UTLt6Vector2ZQ26Speech15SpeechEventPairi16Ui = .text:0x802B5BEC; // type:function size:0x20 scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZQ26Speech15SpeechEventPairi16 = .text:0x802B5C0C; // type:function size:0xC scope:global +_GLOBAL_.I.VALIDATE_SED_GENERATE = .text:0x802B5C18; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x802B5C44; // type:label scope:local +SetPoints__11SkidSegmentP8bVector3T1 = .text:0x802B5C44; // type:function size:0x7C scope:global +GetPoints__11SkidSegmentP8bVector3T1 = .text:0x802B5CC0; // type:function size:0xC8 scope:global +GetEndPoints__11SkidSegmentP8bVector3T1 = .text:0x802B5D88; // type:function size:0xD8 scope:global +__7SkidSetP9SkidMakerP8bVector3T2if = .text:0x802B5E60; // type:function size:0xDC scope:global +_._7SkidSet = .text:0x802B5F3C; // type:function size:0x74 scope:global +AddSegment__7SkidSetP8bVector3T1bf = .text:0x802B5FB0; // type:function size:0x2F0 scope:global +FinishedAddingSkids__7SkidSet = .text:0x802B62A0; // type:function size:0x24 scope:global +Render__7SkidSetP5eViewUc = .text:0x802B62C4; // type:function size:0x180 scope:global +CreateNewSkidSet__FP9SkidMakerP8bVector3T1if = .text:0x802B6444; // type:function size:0xC4 scope:global +MakeSkid__9SkidMakerP3CarP8bVector3T2if = .text:0x802B6508; // type:function size:0x160 scope:global +MakeNoSkid__9SkidMaker = .text:0x802B6668; // type:function size:0x2C scope:global +InitSkids__Fi = .text:0x802B6694; // type:function size:0xBC scope:global +CloseSkids__Fv = .text:0x802B6750; // type:function size:0x64 scope:global +DeleteThisSkid__FP7SkidSet = .text:0x802B67B4; // type:function size:0x3C scope:global +DeleteAllSkids__Fv = .text:0x802B67F0; // type:function size:0x60 scope:global +RenderSkids__FP5eViewP4Clan = .text:0x802B6850; // type:function size:0x158 scope:global +InitClans__Fv = .text:0x802B69A8; // type:function size:0x50 scope:global +FlushClans__Fv = .text:0x802B69F8; // type:function size:0x5C scope:global +CloseClans__Fv = .text:0x802B6A54; // type:function size:0x48 scope:global +GetClan__FP8bVector3 = .text:0x802B6A9C; // type:function size:0x154 scope:global +RenderClans__FP5eView = .text:0x802B6BF0; // type:function size:0xD4 scope:global +__4ClanP8bVector3Ui = .text:0x802B6CC4; // type:function size:0x68 scope:global +_._4Clan = .text:0x802B6D2C; // type:function size:0x8C scope:global +GetNumTrackOBBs__Fv = .text:0x802B6DB8; // type:function size:0xC scope:global +GetTrackOBB__Fi = .text:0x802B6DC4; // type:function size:0x14 scope:global +LoaderTrackOBB__FP6bChunk = .text:0x802B6DD8; // type:function size:0xC4 scope:global +UnloaderTrackOBB__FP6bChunk = .text:0x802B6E9C; // type:function size:0x38 scope:global +EstablishRemoteCaffeineConnection__Fv = .text:0x802B6ED4; // type:function size:0x4 scope:global +GetElevation__18TopologyCoordinatePC8bVector3P11TerrainTypeP8bVector3Pb = .text:0x802B6ED8; // type:function size:0x104 scope:global +HasTopology__18TopologyCoordinatePC8bVector2 = .text:0x802B6FDC; // type:function size:0x54 scope:global +LoaderTrackPositionMarkers__FP6bChunk = .text:0x802B7030; // type:function size:0xD4 scope:global +UnloaderTrackPositionMarkers__FP6bChunk = .text:0x802B7104; // type:function size:0x94 scope:global +GetNumTrackPositionMarkers__FiUi = .text:0x802B7198; // type:function size:0x50 scope:global +ForEachTrackPositionMarker__FPFP19TrackPositionMarkerUi_bUi = .text:0x802B71E8; // type:function size:0x60 scope:global +GetTrackPositionMarker__FiUii = .text:0x802B7248; // type:function size:0x58 scope:global +GetTrackPositionMarker__FUii = .text:0x802B72A0; // type:function size:0x48 scope:global +GetTrackInfo__9TrackInfoi = .text:0x802B72E8; // type:function size:0x54 scope:global +LoaderTrackInfo__9TrackInfoP6bChunk = .text:0x802B733C; // type:function size:0x1F8 scope:global +UnloaderTrackInfo__9TrackInfoP6bChunk = .text:0x802B7534; // type:function size:0x38 scope:global +DoLinesIntersect__FRC8bVector2N30 = .text:0x802B756C; // type:function size:0xA0 scope:global +Clear__16TrackPathManager = .text:0x802B760C; // type:function size:0x64 scope:global +Loader__16TrackPathManagerP6bChunk = .text:0x802B7670; // type:function size:0x1DC scope:global +Unloader__16TrackPathManagerP6bChunk = .text:0x802B784C; // type:function size:0x6C scope:global +DisableAllBarriers__16TrackPathManager = .text:0x802B78B8; // type:function size:0x38 scope:global +EnableBarriers__16TrackPathManagerPCc = .text:0x802B78F0; // type:function size:0xA0 scope:global +BuildZoneInfoTable__16TrackPathManager = .text:0x802B7990; // type:function size:0xA0 scope:global +FindZone__16TrackPathManagerPC8bVector218eTrackPathZoneTypeP13TrackPathZone = .text:0x802B7A30; // type:function size:0x298 scope:global +ResetZoneVisitInfos__16TrackPathManager = .text:0x802B7CC8; // type:function size:0x2C scope:global +IsPointInside__13TrackPathZonePC8bVector2 = .text:0x802B7CF4; // type:function size:0x30 scope:global +TrackPathInitRemoteCaffeineConnection__Fv = .text:0x802B7D24; // type:function size:0x4 scope:global +LoaderTrackPath__FP6bChunk = .text:0x802B7D28; // type:function size:0x2C scope:global +UnloaderTrackPath__FP6bChunk = .text:0x802B7D54; // type:function size:0x2C scope:global +GetSegmentNextTo__13TrackPathZoneP8bVector2N21 = .text:0x802B7D80; // type:function size:0x284 scope:global +__12TSMemoryPooliiPCci = .text:0x802B8004; // type:function size:0x208 scope:global +GetNewNode__12TSMemoryPooliibPCc = .text:0x802B820C; // type:function size:0x58 scope:global +RemoveNode__12TSMemoryPoolP12TSMemoryNode = .text:0x802B8264; // type:function size:0x1C scope:global +Malloc__12TSMemoryPooliPCcbT3i = .text:0x802B8280; // type:function size:0x384 scope:global +Free__12TSMemoryPoolPv = .text:0x802B8604; // type:function size:0x174 scope:global +GetAmountFree__12TSMemoryPool = .text:0x802B8778; // type:function size:0x20 scope:global +GetLargestFreeBlock__12TSMemoryPool = .text:0x802B8798; // type:function size:0x8C scope:global +GetNextNode__12TSMemoryPoolbP12TSMemoryNode = .text:0x802B8824; // type:function size:0x4C scope:global +GetNextFreeNode__12TSMemoryPoolbP12TSMemoryNode = .text:0x802B8870; // type:function size:0x58 scope:global +GetNextAllocatedNode__12TSMemoryPoolbP12TSMemoryNode = .text:0x802B88C8; // type:function size:0x58 scope:global +GetPoolChecksum__12TSMemoryPool = .text:0x802B8920; // type:function size:0x8 scope:global +DebugPrint__12TSMemoryPool = .text:0x802B8928; // type:function size:0x18 scope:global +LoaderTrackStreamer__FP6bChunk = .text:0x802B8940; // type:function size:0x2C scope:global +UnloaderTrackStreamer__FP6bChunk = .text:0x802B896C; // type:function size:0x2C scope:global +RefreshTrackStreamer__Fv = .text:0x802B8998; // type:function size:0x28 scope:global +__13TrackStreamer = .text:0x802B89C0; // type:function size:0x12C scope:global +Loader__13TrackStreamerP6bChunk = .text:0x802B8AEC; // type:function size:0x2B4 scope:global +Unloader__13TrackStreamerP6bChunk = .text:0x802B8DA0; // type:function size:0xC0 scope:global +ClearCurrentZones__13TrackStreamer = .text:0x802B8E60; // type:function size:0xC8 scope:global +InitMemoryPool__13TrackStreameri = .text:0x802B8F28; // type:function size:0x64 scope:global +GetMemoryPoolSize__13TrackStreamer = .text:0x802B8F8C; // type:function size:0x58 scope:global +CountUserAllocations__13TrackStreamerPPCc = .text:0x802B8FE4; // type:function size:0xE0 scope:global +FindSection__13TrackStreameri = .text:0x802B90C4; // type:function size:0x44 scope:global +FindSectionByAddress__13TrackStreameri = .text:0x802B9108; // type:function size:0x7C scope:global +GetCombinedSectionNumber__13TrackStreameri = .text:0x802B9184; // type:function size:0xC4 scope:global +InitRegion__13TrackStreamerPCcb = .text:0x802B9248; // type:function size:0x148 scope:global +HibernateStreamingSections__13TrackStreamer = .text:0x802B9390; // type:function size:0xC scope:global +FlushHibernatingSections__13TrackStreamer = .text:0x802B939C; // type:function size:0x58 scope:global +AllocateMemory__13TrackStreamerP21TrackStreamingSectioni = .text:0x802B93F4; // type:function size:0x40 scope:global +LoadDiscBundle__13TrackStreamerP17DiscBundleSection = .text:0x802B9434; // type:function size:0xA0 scope:global +DiscBundleLoadedCallback__13TrackStreamerii = .text:0x802B94D4; // type:function size:0x2C scope:global +DiscBundleLoadedCallback__13TrackStreamerP17DiscBundleSection = .text:0x802B9500; // type:function size:0x8C scope:global +LoadSection__13TrackStreamerP21TrackStreamingSection = .text:0x802B958C; // type:function size:0xD0 scope:global +ActivateSection__13TrackStreamerP21TrackStreamingSection = .text:0x802B965C; // type:function size:0xA8 scope:global +UnactivateSection__13TrackStreamerP21TrackStreamingSection = .text:0x802B9704; // type:function size:0x74 scope:global +WillUnloadBlock__13TrackStreamerP21TrackStreamingSection = .text:0x802B9778; // type:function size:0x34 scope:global +UnloadSection__13TrackStreamerP21TrackStreamingSection = .text:0x802B97AC; // type:function size:0xA8 scope:global +NeedsGameStateActivation__13TrackStreamerP21TrackStreamingSection = .text:0x802B9854; // type:function size:0x8 scope:global +SectionLoadedCallback__13TrackStreamerii = .text:0x802B985C; // type:function size:0x2C scope:global +SectionLoadedCallback__13TrackStreamerP21TrackStreamingSection = .text:0x802B9888; // type:function size:0xF8 scope:global +EmptyCaffeineLayers__13TrackStreamer = .text:0x802B9980; // type:function size:0x10 scope:global +SetLoadingPhase__13TrackStreamerQ213TrackStreamer13eLoadingPhase = .text:0x802B9990; // type:function size:0x48 scope:global +UnloadLeastRecentlyUsedSection__13TrackStreamer = .text:0x802B99D8; // type:function size:0xA8 scope:global +JettisonSection__13TrackStreamerP21TrackStreamingSection = .text:0x802B9A80; // type:function size:0xF8 scope:global +JettisonLeastImportantSection__13TrackStreamer = .text:0x802B9B78; // type:function size:0x44 scope:global +ChooseSectionToJettison__13TrackStreamer = .text:0x802B9BBC; // type:function size:0x280 scope:global +UnJettisonSections__13TrackStreamer = .text:0x802B9E3C; // type:function size:0x5C scope:global +BuildHoleMovements__13TrackStreamerP12HoleMovementiiiPii = .text:0x802B9E98; // type:function size:0x7C8 scope:global +DoHoleFilling__13TrackStreameri = .text:0x802BA660; // type:function size:0x260 scope:global +SetStreamingPosition__13TrackStreameriPC8bVector3 = .text:0x802BA8C0; // type:function size:0x60 scope:global +PredictStreamingPosition__13TrackStreameriPC8bVector3N22b = .text:0x802BA920; // type:function size:0x54 scope:global +GetPredictedZone__13TrackStreamerP22StreamingPositionEntry = .text:0x802BA974; // type:function size:0x294 scope:global +ClearStreamingPositions__13TrackStreamer = .text:0x802BAC08; // type:function size:0x2C scope:global +RemoveCurrentStreamingSections__13TrackStreamer = .text:0x802BAC34; // type:function size:0x70 scope:global +AddCurrentStreamingSections__13TrackStreamerPsii = .text:0x802BACA4; // type:function size:0x128 scope:global +DetermineStreamingSections__13TrackStreamer = .text:0x802BADCC; // type:function size:0x1A4 scope:global +AllocateSectionMemory__13TrackStreamerPi = .text:0x802BAF70; // type:function size:0x2FC scope:global +FreeSectionMemory__13TrackStreamer = .text:0x802BB26C; // type:function size:0x80 scope:global +HandleMemoryAllocation__13TrackStreamer = .text:0x802BB2EC; // type:function size:0x1F4 scope:global +AllocateUserMemory__13TrackStreameriPCci = .text:0x802BB4E0; // type:function size:0x5C scope:global +FreeUserMemory__13TrackStreamerPv = .text:0x802BB53C; // type:function size:0x44 scope:global +IsUserMemory__13TrackStreamerPv = .text:0x802BB580; // type:function size:0x34 scope:global +MakeSpaceInPool__13TrackStreamerib = .text:0x802BB5B4; // type:function size:0xAC scope:global +MakeSpaceInPool__13TrackStreameriPFi_vi = .text:0x802BB660; // type:function size:0x90 scope:global +ReadyToMakeSpaceInPool__13TrackStreamer = .text:0x802BB6F0; // type:function size:0x54 scope:global +DetermineCurrentZones__13TrackStreamerPs = .text:0x802BB744; // type:function size:0x108 scope:global +ServiceGameState__13TrackStreamer = .text:0x802BB84C; // type:function size:0xC4 scope:global +ServiceNonGameState__13TrackStreamer = .text:0x802BB910; // type:function size:0x38 scope:global +BlockUntilLoadingComplete__13TrackStreamer = .text:0x802BB948; // type:function size:0x34 scope:global +WaitForCurrentLoadingToComplete__13TrackStreamer = .text:0x802BB97C; // type:function size:0x80 scope:global +IsLoadingInProgress__13TrackStreamer = .text:0x802BB9FC; // type:function size:0x6C scope:global +AreAllSectionsActivated__13TrackStreamer = .text:0x802BBA68; // type:function size:0x38 scope:global +RefreshLoading__13TrackStreamer = .text:0x802BBAA0; // type:function size:0x48 scope:global +HandleZoneSwitching__13TrackStreamer = .text:0x802BBAE8; // type:function size:0x60 scope:global +SwitchZones__13TrackStreamerPs = .text:0x802BBB48; // type:function size:0x30C scope:global +HandleLoading__13TrackStreamer = .text:0x802BBE54; // type:function size:0x250 scope:global +GetLoadingPriority__13TrackStreamerP21TrackStreamingSectionP22StreamingPositionEntryb = .text:0x802BC0A4; // type:function size:0x2C4 scope:global +AssignLoadingPriority__13TrackStreamer = .text:0x802BC368; // type:function size:0xC0 scope:global +CalculateLoadingBacklog__13TrackStreamer = .text:0x802BC428; // type:function size:0xDC scope:global +StartLoadingSections__13TrackStreamer = .text:0x802BC504; // type:function size:0x118 scope:global +FinishedLoading__13TrackStreamer = .text:0x802BC61C; // type:function size:0xA4 scope:global +PlotLoadingMarker__13TrackStreamerP22StreamingPositionEntry = .text:0x802BC6C0; // type:function size:0xC scope:global +CheckLoadingBar__13TrackStreamer = .text:0x802BC6CC; // type:function size:0x32C scope:global +GetSectionToActivate__13TrackStreameri = .text:0x802BC9F8; // type:function size:0xAC scope:global +HandleSectionActivation__13TrackStreamer = .text:0x802BCAA4; // type:function size:0x8C scope:global +UnloadEverything__13TrackStreamer = .text:0x802BCB30; // type:function size:0x90 scope:global +BuildSceneryOverrideHashTable__Fv = .text:0x802BCBC0; // type:function size:0x68 scope:global +FindSceneryHeirarchyByName__FUi = .text:0x802BCC28; // type:function size:0x9C scope:global +GetSceneryOverrideInfo__Fi = .text:0x802BCCC4; // type:function size:0x14 scope:global +AssignOverrides__19SceneryOverrideInfoP20ScenerySectionHeader = .text:0x802BCCD8; // type:function size:0x368 scope:global +AssignOverrides__19SceneryOverrideInfo = .text:0x802BD040; // type:function size:0x40 scope:global +LoadPrecullerBooBooScript__FPCcb = .text:0x802BD080; // type:function size:0x188 scope:global +LoadPrecullerBooBooScripts__Fv = .text:0x802BD208; // type:function size:0x2C scope:global +LoaderSceneryGroup__FP6bChunk = .text:0x802BD234; // type:function size:0xD0 scope:global +UnloaderSceneryGroup__FP6bChunk = .text:0x802BD304; // type:function size:0x70 scope:global +FindSceneryGroup__FUi = .text:0x802BD374; // type:function size:0x34 scope:global +EnableSceneryGroup__FUib = .text:0x802BD3A8; // type:function size:0xE4 scope:global +DisableSceneryGroup__FUi = .text:0x802BD48C; // type:function size:0x80 scope:global +DisableAllSceneryGroups__Fv = .text:0x802BD50C; // type:function size:0xA0 scope:global +GetScenerySectionHeader__Fi = .text:0x802BD5AC; // type:function size:0x28 scope:global +LoaderScenery__FP6bChunk = .text:0x802BD5D4; // type:function size:0xA5C scope:global +UnloaderScenery__FP6bChunk = .text:0x802BE030; // type:function size:0x380 scope:global +FindSceneryInfo__FUi = .text:0x802BE3B0; // type:function size:0x6C scope:global +FindSceneryInstance__FUi = .text:0x802BE41C; // type:function size:0x7C scope:global +RenderVisibleSectionBoundary__FP22VisibleSectionBoundaryP5eView = .text:0x802BE498; // type:function size:0x378 scope:global +RenderVisibleZones__FP5eView = .text:0x802BE810; // type:function size:0x70 scope:global +InitVisibleZones__Fv = .text:0x802BE880; // type:function size:0x68 scope:global +CloseVisibleZones__Fv = .text:0x802BE8E8; // type:function size:0xB0 scope:global +IsInTable__FPsii = .text:0x802BE998; // type:function size:0x38 scope:global +ToggleIsInTable__FPsiii = .text:0x802BE9D0; // type:function size:0x70 scope:global +DrawAScenery__20ScenerySectionHeaderiP15SceneryCullInfoi = .text:0x802BEA40; // type:function size:0x830 scope:global +TreeCull__20ScenerySectionHeaderP15SceneryCullInfo = .text:0x802BF270; // type:function size:0x128 scope:global +WhatSectionsShouldWeDraw__20GrandSceneryCullInfoPsiP15SceneryCullInfo = .text:0x802BF398; // type:function size:0x268 scope:global +CullView__20GrandSceneryCullInfoP15SceneryCullInfo = .text:0x802BF600; // type:function size:0x88 scope:global +DoCulling__20GrandSceneryCullInfo = .text:0x802BF688; // type:function size:0x2CC scope:global +StuffScenery__20GrandSceneryCullInfoP5eViewi = .text:0x802BF954; // type:function size:0x27C scope:global +ServicePreculler__Fv = .text:0x802BFBD0; // type:function size:0x4 scope:global +Get2PlayerSectionNumber__FiPCc = .text:0x802BFBD4; // type:function size:0x104 scope:global +Get2PlayerSectionNumber__Fi = .text:0x802BFCD8; // type:function size:0x28 scope:global +Get1PlayerSectionNumber__FiPCc = .text:0x802BFD00; // type:function size:0xA8 scope:global +GetBoundarySectionNumber__FiPCc = .text:0x802BFDA8; // type:function size:0x70 scope:global +LoaderVisibleSections__FP6bChunk = .text:0x802BFE18; // type:function size:0x2C scope:global +UnloaderVisibleSections__FP6bChunk = .text:0x802BFE44; // type:function size:0x2C scope:global +GetScenerySectionName__FPci = .text:0x802BFE70; // type:function size:0x88 scope:global +GetScenerySectionName__Fi = .text:0x802BFEF8; // type:function size:0x44 scope:global +MyIsPointInPoly__FPC8bVector2T0i = .text:0x802BFF3C; // type:function size:0xBC scope:local +IsPointInside__22VisibleSectionBoundaryPC8bVector2 = .text:0x802BFFF8; // type:function size:0x68 scope:global +GetDistanceOutside__22VisibleSectionBoundaryPC8bVector2f = .text:0x802C0060; // type:function size:0xD8 scope:global +AddVisibleSection__22DrivableScenerySectioni = .text:0x802C0138; // type:function size:0x84 scope:global +IsSectionVisible__22DrivableScenerySectioni = .text:0x802C01BC; // type:function size:0x44 scope:global +RemoveVisibleSection__22DrivableScenerySectioni = .text:0x802C0200; // type:function size:0x98 scope:global +SortVisibleSections__22DrivableScenerySection = .text:0x802C0298; // type:function size:0x64 scope:global +FindLoadingSection__21VisibleSectionManageri = .text:0x802C02FC; // type:function size:0x6C scope:global +GetSectionsToLoad__21VisibleSectionManagerP14LoadingSectionPsi = .text:0x802C0368; // type:function size:0x240 scope:global +__21VisibleSectionManager = .text:0x802C05A8; // type:function size:0x11C scope:global +AllocateUserInfo__21VisibleSectionManageri = .text:0x802C06C4; // type:function size:0x80 scope:global +UnallocateUserInfo__21VisibleSectionManageri = .text:0x802C0744; // type:function size:0x54 scope:global +ActivateOverlay__21VisibleSectionManagerPCc = .text:0x802C0798; // type:function size:0xDC scope:global +ActivateOverlay__21VisibleSectionManagerP21VisibleSectionOverlayT1 = .text:0x802C0874; // type:function size:0x12C scope:global +UnactivateOverlay__21VisibleSectionManager = .text:0x802C09A0; // type:function size:0x68 scope:global +Loader__21VisibleSectionManagerP6bChunk = .text:0x802C0A08; // type:function size:0x424 scope:global +Unloader__21VisibleSectionManagerP6bChunk = .text:0x802C0E2C; // type:function size:0x84 scope:global +FindBoundary__21VisibleSectionManageri = .text:0x802C0EB0; // type:function size:0x50 scope:global +FindClosestBoundary__21VisibleSectionManagerPC8bVector2Pf = .text:0x802C0F00; // type:function size:0xEC scope:global +FindBoundary__21VisibleSectionManagerPC8bVector2 = .text:0x802C0FEC; // type:function size:0xA8 scope:global +FindDrivableSection__21VisibleSectionManagerPC8bVector2 = .text:0x802C1094; // type:function size:0xBC scope:global +FindDrivableSection__21VisibleSectionManageri = .text:0x802C1150; // type:function size:0x2C scope:global +GetGroupInfo__21VisibleSectionManagerPCc = .text:0x802C117C; // type:function size:0x78 scope:global +EnableGroup__21VisibleSectionManagerUi = .text:0x802C11F4; // type:function size:0x30 scope:global +LoaderWeatherMan__FP6bChunk = .text:0x802C1224; // type:function size:0x124 scope:global +UnloaderWeatherMan__FP6bChunk = .text:0x802C1348; // type:function size:0x84 scope:global +AddRegion__FP13GenericRegion = .text:0x802C13CC; // type:function size:0x74 scope:global +RemoveRegion__FP13GenericRegion = .text:0x802C1440; // type:function size:0x14 scope:global +DepthRegion__FP13GenericRegionT0 = .text:0x802C1454; // type:function size:0x1EC scope:global +CalculateRegionInfo__11RegionQueryP5eView10RegionTypei = .text:0x802C1640; // type:function size:0x4B8 scope:global +GetClosestRegionInView__FP5eViewP8bVector3Pf = .text:0x802C1AF8; // type:function size:0x25C scope:global +__14ScreenEffectDB = .text:0x802C1D54; // type:function size:0xCC scope:global +Update__14ScreenEffectDBf = .text:0x802C1E20; // type:function size:0x70 scope:global +AddScreenEffect__14ScreenEffectDB16ScreenEffectTypeffff = .text:0x802C1E90; // type:function size:0x44 scope:global +AddScreenEffect__14ScreenEffectDB16ScreenEffectTypeP15ScreenEffectDefUi19ScreenEffectControl = .text:0x802C1ED4; // type:function size:0x210 scope:global +AddPaletteEffect__14ScreenEffectDB19ScreenEffectPalette = .text:0x802C20E4; // type:function size:0x30 scope:global +AddPaletteEffect__14ScreenEffectDBP22ScreenEffectPaletteDef = .text:0x802C2114; // type:function size:0x78 scope:global +InitScreenEFX__Fv = .text:0x802C218C; // type:function size:0x4 scope:global +TickSFX__Fv = .text:0x802C2190; // type:function size:0x5C scope:global +UpdateAllScreenEFX__Fv = .text:0x802C21EC; // type:function size:0x84 scope:global +FlushAccumulationBuffer__Fv = .text:0x802C2270; // type:function size:0x10 scope:global +AccumulationBufferFlushed__Fv = .text:0x802C2280; // type:function size:0x10 scope:global +QueryFlushAccumulationBuffer__Fv = .text:0x802C2290; // type:function size:0xC scope:global +DoTinting__FP5eView = .text:0x802C229C; // type:function size:0x108 scope:global +DoTunnelBloom__FP5eView = .text:0x802C23A4; // type:function size:0x748 scope:global +emEventManagerInit__Fv = .text:0x802C2AEC; // type:function size:0x5C scope:global +LoaderEventManager__FP6bChunk = .text:0x802C2B48; // type:function size:0x230 scope:global +UnloaderEventManager__FP6bChunk = .text:0x802C2D78; // type:function size:0xC4 scope:global +emAddHandler__FPFP7emEvent_vUi = .text:0x802C2E3C; // type:function size:0xE8 scope:global +emRemoveHandler__FPFP7emEvent_v = .text:0x802C2F24; // type:function size:0x9C scope:global +emAddEvent__F8EVENT_ID = .text:0x802C2FC0; // type:function size:0x8C scope:global +emProcessAllEvents__Fv = .text:0x802C304C; // type:function size:0x22C scope:global +emTriggerEventsInSection__FP8bVector3i = .text:0x802C3278; // type:function size:0x158 scope:global +__less__H1Zi_4_STLPX01_Q24_STLt4less1ZX01 = .text:0x802C33D0; // type:function size:0xC scope:global +__adjust_heap__H4ZPiZiZiZQ24_STLt4less1Zi_4_STLX01X11X11X21X31_v = .text:0x802C33DC; // type:function size:0xCC scope:global +make_heap__H2ZPiZQ24_STLt4less1Zi_4_STLX01X01X11_v = .text:0x802C34A8; // type:function size:0x7C scope:global +pop_heap__H2ZPiZQ24_STLt4less1Zi_4_STLX01X01X11_v = .text:0x802C3524; // type:function size:0x48 scope:global +__partial_sort__H3ZPiZiZQ24_STLt4less1Zi_4_STLX01X01X01PX11X21_v = .text:0x802C356C; // type:function size:0xB8 scope:global +partial_sort__H2ZPiZQ24_STLt4less1Zi_4_STLX01X01X01X11_v = .text:0x802C3624; // type:function size:0x30 scope:global +__unguarded_partition__H3ZPiZiZQ24_STLt4less1Zi_4_STLX01X01X11X21_X01 = .text:0x802C3654; // type:function size:0x50 scope:global +__introsort_loop__H4ZPiZiZiZQ24_STLt4less1Zi_4_STLX01X01PX11X21X31_v = .text:0x802C36A4; // type:function size:0x124 scope:global +__unguarded_linear_insert__H3ZPiZiZQ24_STLt4less1Zi_4_STLX01X11X21_v = .text:0x802C37C8; // type:function size:0x28 scope:global +__insertion_sort__H2ZPiZQ24_STLt4less1Zi_4_STLX01X01X11_v = .text:0x802C37F0; // type:function size:0x9C scope:global +__unguarded_insertion_sort_aux__H3ZPiZiZQ24_STLt4less1Zi_4_STLX01X01PX11X21_v = .text:0x802C388C; // type:function size:0x58 scope:global +__final_insertion_sort__H2ZPiZQ24_STLt4less1Zi_4_STLX01X01X11_v = .text:0x802C38E4; // type:function size:0x7C scope:global +sort__H1ZPi_4_STLX01X01_v = .text:0x802C3960; // type:function size:0xA0 scope:global +_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP14ModelHeirarchyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP14ModelHeirarchyZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP14ModelHeirarchyZ9_type_mapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZP14ModelHeirarchyT1 = .text:0x802C3A00; // type:function size:0x13C scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP14ModelHeirarchyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP14ModelHeirarchyZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP14ModelHeirarchyZ9_type_mapRCQ24_STLt4pair2ZCUiZP14ModelHeirarchy = .text:0x802C3B3C; // type:function size:0x118 scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP14ModelHeirarchyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP14ModelHeirarchyZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP14ModelHeirarchyZ9_type_mapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZP14ModelHeirarchyZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZP14ModelHeirarchyRCQ24_STLt4pair2ZCUiZP14ModelHeirarchy = .text:0x802C3C54; // type:function size:0x26C scope:global +__Q33UTL3Stdt3map3ZUiZP14ModelHeirarchyZ9_type_map = .text:0x802C3EC0; // type:function size:0x74 scope:global +__static_initialization_and_destruction_0 = .text:0x802C3F34; // type:function size:0x1440 scope:local +ClearTable__9bBitTable = .text:0x802C5374; // type:function size:0x30 scope:global +ReadyToMakeSpaceInPoolBridge__13TrackStreameri = .text:0x802C53A4; // type:function size:0x20 scope:global +OverrideMalloc__12TSMemoryPoolPviPCcii = .text:0x802C53C4; // type:function size:0x94 scope:global +OverrideFree__12TSMemoryPoolPvT1 = .text:0x802C5458; // type:function size:0x24 scope:global +OverrideGetAmountFree__12TSMemoryPoolPv = .text:0x802C547C; // type:function size:0x20 scope:global +OverrideGetLargestFreeBlock__12TSMemoryPoolPv = .text:0x802C549C; // type:function size:0x20 scope:global +GetSectionNumber__22PrecullerBooBooManagerR8bVector3 = .text:0x802C54BC; // type:function size:0x3C scope:global +GetByte__22PrecullerBooBooManageri = .text:0x802C54F8; // type:function size:0xC scope:global +GetBit__22PrecullerBooBooManageri = .text:0x802C5504; // type:function size:0x14 scope:global +_GLOBAL_.I.SetPoints__11SkidSegmentP8bVector3T1 = .text:0x802C5518; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x802C5544; // type:label scope:local +__5World = .text:0x802C5544; // type:function size:0xB4 scope:global +_._5World = .text:0x802C55F8; // type:function size:0xA0 scope:global +ResetTimeScale__5World = .text:0x802C5698; // type:function size:0x2C scope:global +World_DEBUGStartLocation__FRQ25UMath7Vector3T0 = .text:0x802C56C4; // type:function size:0x3A0 scope:global +HideNonRaceSmackable__FP6IModel = .text:0x802C5A64; // type:function size:0x8C scope:local +World_RestoreProps__Fv = .text:0x802C5AF0; // type:function size:0x198 scope:global +World_Service__Fv = .text:0x802C5C88; // type:function size:0xB4 scope:global +World_Init__Fv = .text:0x802C5D3C; // type:function size:0x94 scope:local +World_Shutdown__Fv = .text:0x802C5DD0; // type:function size:0x48 scope:local +GetPlayerByIndex__6Playeri = .text:0x802C5E18; // type:function size:0x8 scope:global +InitWithDefaults__14RaceParameters = .text:0x802C5E20; // type:function size:0x110 scope:global +Init__21DebugVehicleSelection = .text:0x802C5F30; // type:function size:0x44 scope:global +__21DebugVehicleSelection = .text:0x802C5F74; // type:function size:0x1F0 scope:global +_._21DebugVehicleSelection = .text:0x802C6164; // type:function size:0x1E4 scope:global +Service__21DebugVehicleSelection = .text:0x802C6348; // type:function size:0x78 scope:global +InitSelectionList__21DebugVehicleSelection = .text:0x802C63C0; // type:function size:0x228 scope:global +SwitchPlayerVehicle__21DebugVehicleSelectionPCc = .text:0x802C65E8; // type:function size:0x168 scope:global +Init__10DebugWorld = .text:0x802C6750; // type:function size:0x44 scope:global +__10DebugWorld = .text:0x802C6794; // type:function size:0x10 scope:global +Service__10DebugWorld = .text:0x802C67A4; // type:function size:0x34 scope:global +ReadHotPositionScript__FPCcP16SavedHotPositioni = .text:0x802C67D8; // type:function size:0x114 scope:global +SaveHotPositionScript__FPCcP16SavedHotPositioni = .text:0x802C68EC; // type:function size:0xAC scope:global +HandleSaveHotPosition__10DebugWorld = .text:0x802C6998; // type:function size:0x19C scope:global +HandleJumpToHotPosition__10DebugWorld = .text:0x802C6B34; // type:function size:0x15C scope:global +__19SmackableRenderConnRCQ23Sim14ConnectionData = .text:0x802C6C90; // type:function size:0x168 scope:global +_._19SmackableRenderConn = .text:0x802C6DF8; // type:function size:0xB4 scope:global +Update__19SmackableRenderConnf = .text:0x802C6EAC; // type:function size:0x1F8 scope:global +UpdateAll__19SmackableRenderConnf = .text:0x802C70A4; // type:function size:0xA0 scope:global +SmackableRender_Init__Fv = .text:0x802C7144; // type:function size:0x4 scope:global +SmackableRender_Shutdown__Fv = .text:0x802C7148; // type:function size:0x4 scope:global +SmackableRender_Service__Ff = .text:0x802C714C; // type:function size:0x20 scope:global +GetNumCarEffectMarkerHashes__F17CarEffectPositionRi = .text:0x802C716C; // type:function size:0x34 scope:global +GetCarEffectMarkerHashes__F17CarEffectPosition = .text:0x802C71A0; // type:function size:0x14 scope:global +InitPart__13CarPartCuller17eCullableCarPartsPC8bVector3 = .text:0x802C71B4; // type:function size:0x140 scope:global +CullParts__13CarPartCullerP8bVector3Us = .text:0x802C72F4; // type:function size:0x344 scope:global +SetNISRaceDriverVisible__Fi = .text:0x802C7638; // type:function size:0xC scope:global +InitCarRender__Fv = .text:0x802C7644; // type:function size:0x94 scope:global +InitCarEffects__Fv = .text:0x802C76D8; // type:function size:0xD0 scope:global +CloseCarEffects__Fv = .text:0x802C77A8; // type:function size:0x28 scope:global +InitStandardModels__Fv = .text:0x802C77D0; // type:function size:0x58 scope:global +__20FrontEndRenderingCarP8RideInfoi = .text:0x802C7828; // type:function size:0x13C scope:global +LookupWheelPosition__20FrontEndRenderingCarUiP8bVector4 = .text:0x802C7964; // type:function size:0xC0 scope:global +LookupWheelRadius__20FrontEndRenderingCarUiRf = .text:0x802C7A24; // type:function size:0x60 scope:global +ReInit__20FrontEndRenderingCarP8RideInfo = .text:0x802C7A84; // type:function size:0xD4 scope:global +_._20FrontEndRenderingCar = .text:0x802C7B58; // type:function size:0x98 scope:global +__13CarRenderInfoP8RideInfo = .text:0x802C7BF0; // type:function size:0x1318 scope:global +_._13CarRenderInfo = .text:0x802C8F08; // type:function size:0x1F0 scope:global +Init__13CarRenderInfo = .text:0x802C90F8; // type:function size:0x54 scope:global +Refresh__13CarRenderInfo = .text:0x802C914C; // type:function size:0xB8 scope:global +SetPlayerDamage__13CarRenderInfoRCQ210DamageZone4Info = .text:0x802C9204; // type:function size:0x2AC scope:global +SetCarDamageState__13CarRenderInfobUiUi = .text:0x802C94B0; // type:function size:0xB0 scope:global +SetCarGlassDamageState__13CarRenderInfobQ213CarRenderInfo19CarReplacementTexIDUiUi = .text:0x802C9560; // type:function size:0x58 scope:global +SetDamageInfo__13CarRenderInfoRCQ210DamageZone4Info = .text:0x802C95B8; // type:function size:0xA4 scope:global +FindCarPart__13CarRenderInfoi = .text:0x802C965C; // type:function size:0x38 scope:global +HideCarPart__13CarRenderInfoib = .text:0x802C9694; // type:function size:0x7C scope:global +UpdateCarParts__13CarRenderInfo = .text:0x802C9710; // type:function size:0x8A8 scope:global +UpdateWheelYRenderOffset__13CarRenderInfo = .text:0x802C9FB8; // type:function size:0x36C scope:global +SwitchSkin__13CarRenderInfoP8RideInfo = .text:0x802CA324; // type:function size:0x220 scope:global +UpdateDecalTextures__13CarRenderInfoP8RideInfo = .text:0x802CA544; // type:function size:0x428 scope:global +UpdateCarReplacementTextures__13CarRenderInfo = .text:0x802CA96C; // type:function size:0xD8 scope:global +UpdateLightStateTextures__13CarRenderInfo = .text:0x802CAA44; // type:function size:0x42C scope:global +CreateCarLightFlares__13CarRenderInfo = .text:0x802CAE70; // type:function size:0x2EC scope:global +RenderTextureHeadlights__13CarRenderInfoP5eViewP8bMatrix4Ui = .text:0x802CB15C; // type:function size:0x1E8 scope:global +coplightflicker__Ffi = .text:0x802CB344; // type:function size:0x94 scope:global +coplightflicker2__Ffii = .text:0x802CB3D8; // type:function size:0x144 scope:global +RenderFlaresOnCar__13CarRenderInfoP5eViewPC8bVector3PC8bMatrix4iii = .text:0x802CB51C; // type:function size:0xB5C scope:global +TireFace__FP8bMatrix4P5eView = .text:0x802CC078; // type:function size:0xE0 scope:global +Render__13CarRenderInfoP5eViewPC8bVector3PC8bMatrix4P8bMatrix4N24Uiiif11CARPART_LODT11_ = .text:0x802CC158; // type:function size:0x2B7C scope:global +cmpl__FPCvT0 = .text:0x802CECD4; // type:function size:0x6C scope:global +cmph__FPCvT0 = .text:0x802CED40; // type:function size:0x2C scope:global +make_chain__FPPfiPFPCvPCv_i = .text:0x802CED6C; // type:function size:0xE8 scope:global +ch2d__FPPfi = .text:0x802CEE54; // type:function size:0x68 scope:global +convex_hull__13CarRenderInfoP8bVector3PC9WColliderRiffi = .text:0x802CEEBC; // type:function size:0x364 scope:global +smooth_shadow_corners__Fi = .text:0x802CF220; // type:function size:0x2AC scope:global +sh_Setup__FP8bVector3 = .text:0x802CF4CC; // type:function size:0x254 scope:global +DrawKeithProjShadow__13CarRenderInfoP5eViewPC8bVector3P8bMatrix4N23i = .text:0x802CF720; // type:function size:0x69C scope:global +DrawAmbientShadow__13CarRenderInfoP5eViewPC8bVector3fP8bMatrix4N24 = .text:0x802CFDBC; // type:function size:0x9F4 scope:global +RenderPart__13CarRenderInfoP5eViewP12CarPartModelP8bMatrix4P20eDynamicLightContextUi = .text:0x802D07B0; // type:function size:0x74 scope:global +InitEmitterPositions__13CarRenderInfoP8bVector4 = .text:0x802D0824; // type:function size:0x548 scope:global +GetEmitterPositions__13CarRenderInfoRt6bSList1Z18CarEmitterPositionPCUii = .text:0x802D0D6C; // type:function size:0x108 scope:global +UpdateEnvironmentMapCameras__Fv = .text:0x802D0E74; // type:function size:0x228 scope:global +RefreshAllFrontEndCarRenderInfos__F7CarType = .text:0x802D109C; // type:function size:0x78 scope:global +RenderFrontEndCars__FP5eViewi = .text:0x802D1114; // type:function size:0x198 scope:global +RenderFEFlares__FP5eViewi = .text:0x802D12AC; // type:function size:0x4 scope:global +RenderVehicleFlares__FP5eViewii = .text:0x802D12B0; // type:function size:0x20 scope:global +DrawTestCars__FP5eViewi = .text:0x802D12D0; // type:function size:0x20 scope:global +CarRender_Service__Ff = .text:0x802D12F0; // type:function size:0x34 scope:global +__Q217VehicleRenderConn6EffectPC8bMatrix4 = .text:0x802D1324; // type:function size:0x44 scope:global +_._Q217VehicleRenderConn6Effect = .text:0x802D1368; // type:function size:0x80 scope:global +Stop__Q217VehicleRenderConn6Effect = .text:0x802D13E8; // type:function size:0x2C scope:global +HandleEmitterGroupDelete__FPvP12EmitterGroup = .text:0x802D1414; // type:function size:0x10 scope:global +Fire__CQ217VehicleRenderConn6EffectPC8bMatrix4UifPC8bVector3 = .text:0x802D1424; // type:function size:0x138 scope:global +Update__Q217VehicleRenderConn6EffectPC8bMatrix4UiffPC8bVector3 = .text:0x802D155C; // type:function size:0x1AC scope:global +__17VehicleRenderConnRCQ23Sim14ConnectionData7CarType = .text:0x802D1708; // type:function size:0x220 scope:global +OnClose__17VehicleRenderConn = .text:0x802D1928; // type:function size:0x40 scope:global +IsViewAnchor__C17VehicleRenderConnP5eView = .text:0x802D1968; // type:function size:0x88 scope:global +IsViewAnchor__C17VehicleRenderConn = .text:0x802D19F0; // type:function size:0x60 scope:global +CheckForRain__C17VehicleRenderConnP5eView = .text:0x802D1A50; // type:function size:0x168 scope:global +CheckForRain__C17VehicleRenderConn = .text:0x802D1BB8; // type:function size:0x60 scope:global +Find__17VehicleRenderConnUi = .text:0x802D1C18; // type:function size:0x44 scope:global +HandleEvent__17VehicleRenderConnQ217VehicleRenderConn7EventID = .text:0x802D1C5C; // type:function size:0x54 scope:global +FetchData__17VehicleRenderConnf = .text:0x802D1CB0; // type:function size:0x7C scope:global +UpdateLoading__17VehicleRenderConn = .text:0x802D1D2C; // type:function size:0xAC scope:global +_._17VehicleRenderConn = .text:0x802D1DD8; // type:function size:0x1BC scope:global +CanRender__C17VehicleRenderConn = .text:0x802D1F94; // type:function size:0x28 scope:global +FindPart__17VehicleRenderConn11CAR_PART_ID = .text:0x802D1FBC; // type:function size:0x48 scope:global +HidePart__17VehicleRenderConn11CAR_PART_ID = .text:0x802D2004; // type:function size:0x4C scope:global +ShowPart__17VehicleRenderConn11CAR_PART_ID = .text:0x802D2050; // type:function size:0x30 scope:global +CanUpdate__C17VehicleRenderConn = .text:0x802D2080; // type:function size:0x14 scope:global +Update__17VehicleRenderConnf = .text:0x802D2094; // type:function size:0x44 scope:global +SetupLoading__17VehicleRenderConnb = .text:0x802D20D8; // type:function size:0x6C scope:global +OnLoaded__17VehicleRenderConnP13CarRenderInfo = .text:0x802D2144; // type:function size:0x198 scope:global +RefreshRenderInfo__17VehicleRenderConn = .text:0x802D22DC; // type:function size:0x24 scope:global +SkinSlotToMask__Fi = .text:0x802D2300; // type:function size:0x10 scope:global +Load__17VehicleRenderConnUi14CarRenderUsagebPC21FECustomizationRecord = .text:0x802D2310; // type:function size:0x184 scope:global +Unload__17VehicleRenderConn = .text:0x802D2494; // type:function size:0xB0 scope:global +RenderAll__17VehicleRenderConnP5eViewi = .text:0x802D2544; // type:function size:0x80 scope:global +GetRenderMatrix__17VehicleRenderConnP8bMatrix4 = .text:0x802D25C4; // type:function size:0x98 scope:global +RenderFlares__17VehicleRenderConnP5eViewii = .text:0x802D265C; // type:function size:0x480 scope:global +RefreshAllRenderInfo__F7CarType = .text:0x802D2ADC; // type:function size:0x98 scope:global +NotifyTireStateEffectOfEmitterDelete__FPvP12EmitterGroup = .text:0x802D2B74; // type:function size:0x2C scope:global +KillSkidsOnRaceRestart__Fv = .text:0x802D2BA0; // type:function size:0x4C scope:global +FreeUpFX__Q29TireState6Effect = .text:0x802D2BEC; // type:function size:0x5C scope:global +LazyInit__Q29TireState6Effect = .text:0x802D2C48; // type:function size:0x11C scope:global +Set__Q29TireState6EffectRC16TireEffectRecord = .text:0x802D2D64; // type:function size:0x38 scope:global +Update__Q29TireState6EffectfPC8bVector3PC8bMatrix4fRC8bVector4 = .text:0x802D2D9C; // type:function size:0x1C0 scope:global +__9TireState = .text:0x802D2F5C; // type:function size:0x210 scope:global +_._9TireState = .text:0x802D316C; // type:function size:0xAC scope:global +bRotateVector__FP8bVector3PC8bMatrix4T0 = .text:0x802D3218; // type:function size:0x7C scope:global +KillSkids__9TireState = .text:0x802D3294; // type:function size:0x24 scope:global +DoSkids__9TireStatefPC8bVector3PC8bMatrix4T3f = .text:0x802D32B8; // type:function size:0x290 scope:global +DoFX__9TireStatefffPC8bVector3PC8bMatrix4f = .text:0x802D3548; // type:function size:0x174 scope:global +SetSurface__9TireStateRC10SimSurface = .text:0x802D36BC; // type:function size:0x1BC scope:global +UpdateWorld__9TireStatePC9WColliderbT2 = .text:0x802D3878; // type:function size:0xFC scope:global +HidePart__Q210RenderConn15Pkt_Car_ServiceRC6UCrc32 = .text:0x802D3974; // type:function size:0x64 scope:global +Construct__13CarRenderConnRCQ23Sim14ConnectionData = .text:0x802D39D8; // type:function size:0x7C scope:global +__13CarRenderConnRCQ23Sim14ConnectionData7CarTypePQ210RenderConn12Pkt_Car_Open = .text:0x802D3A54; // type:function size:0x478 scope:global +OnAttributeChange__13CarRenderConnPCQ26Attrib10CollectionUi = .text:0x802D3ECC; // type:function size:0x4 scope:global +_._13CarRenderConn = .text:0x802D3ED0; // type:function size:0x1A4 scope:global +TestVisibility__13CarRenderConnf = .text:0x802D4074; // type:function size:0xA4 scope:global +OnEvent__13CarRenderConnQ217VehicleRenderConn7EventID = .text:0x802D4118; // type:function size:0x54 scope:global +UpdateSteering__13CarRenderConnfRCQ210RenderConn15Pkt_Car_Service = .text:0x802D416C; // type:function size:0x180 scope:global +UpdateParts__13CarRenderConnfRCQ210RenderConn15Pkt_Car_Service = .text:0x802D42EC; // type:function size:0xE8 scope:global +AddRoadNoise__13CarRenderConnfUiRC15RoadNoiseRecord = .text:0x802D43D4; // type:function size:0x274 scope:global +UpdateRoadNoise__13CarRenderConnffRCQ210RenderConn15Pkt_Car_Service = .text:0x802D4648; // type:function size:0x210 scope:global +UpdateEngineAnimation__13CarRenderConnfRCQ210RenderConn15Pkt_Car_Service = .text:0x802D4858; // type:function size:0x640 scope:global +UpdateBodyAnimation__13CarRenderConnfRCQ210RenderConn15Pkt_Car_Service = .text:0x802D4E98; // type:function size:0x3CC scope:global +UpdateContrails__13CarRenderConnRCQ210RenderConn15Pkt_Car_Servicef = .text:0x802D5264; // type:function size:0xC8 scope:global +UpdateTires__13CarRenderConnffRCQ210RenderConn15Pkt_Car_Service = .text:0x802D532C; // type:function size:0x9AC scope:global +StopEffect__FPQ217VehicleRenderConn6Effect = .text:0x802D5CD8; // type:function size:0x20 scope:local +UpdateEffects__13CarRenderConnRCQ210RenderConn15Pkt_Car_Servicef = .text:0x802D5CF8; // type:function size:0x37C scope:global +Update__13CarRenderConnRCQ210RenderConn15Pkt_Car_Servicef = .text:0x802D6074; // type:function size:0x294 scope:global +BuildRenderMatrix__13CarRenderConnf = .text:0x802D6308; // type:function size:0x1BC scope:global +UpdateRenderMatrix__13CarRenderConnf = .text:0x802D64C4; // type:function size:0x3CC scope:global +Hide__13CarRenderConnb = .text:0x802D6890; // type:function size:0xD4 scope:global +OnFetch__13CarRenderConnf = .text:0x802D6964; // type:function size:0x1A4 scope:global +OnLoaded__13CarRenderConnP13CarRenderInfo = .text:0x802D6B08; // type:function size:0x23C scope:global +GetRenderMatrix__13CarRenderConnP8bMatrix4 = .text:0x802D6D44; // type:function size:0x24 scope:global +OnRender__13CarRenderConnP5eViewi = .text:0x802D6D68; // type:function size:0x548 scope:global +Construct__14HeliRenderConnRCQ23Sim14ConnectionData = .text:0x802D72B0; // type:function size:0x7C scope:global +__14HeliRenderConnRCQ23Sim14ConnectionData7CarTypePQ210RenderConn13Pkt_Heli_Open = .text:0x802D732C; // type:function size:0xB0 scope:global +Update__14HeliRenderConnRCQ210RenderConn16Pkt_Heli_Servicef = .text:0x802D73DC; // type:function size:0xD4 scope:global +OnFetch__14HeliRenderConnf = .text:0x802D74B0; // type:function size:0xAC scope:global +OnRender__14HeliRenderConnP5eViewi = .text:0x802D755C; // type:function size:0x260 scope:global +__19VehicleFragmentConnRCQ23Sim14ConnectionData = .text:0x802D77BC; // type:function size:0xC8 scope:global +UpdateModel__19VehicleFragmentConn = .text:0x802D7884; // type:function size:0x4A8 scope:global +_._19VehicleFragmentConn = .text:0x802D7D2C; // type:function size:0xC8 scope:global +Update__19VehicleFragmentConnf = .text:0x802D7DF4; // type:function size:0xC4 scope:global +FetchData__19VehicleFragmentConnf = .text:0x802D7EB8; // type:function size:0xD0 scope:global +SkyInitModel__FP6eModelP8bMatrix4Ui = .text:0x802D7F88; // type:function size:0x260 scope:global +RefreshCurrentSkyTextures__Fv = .text:0x802D81E8; // type:function size:0x5C scope:global +SkyLoadCallback__FUi = .text:0x802D8244; // type:function size:0x48 scope:global +InitSkyHash__FPFi_vi = .text:0x802D828C; // type:function size:0x130 scope:global +NotifySkyLoader__Fv = .text:0x802D83BC; // type:function size:0x90 scope:global +UnloadSkyTextures__Fv = .text:0x802D844C; // type:function size:0x4C scope:global +NotifySkyUnloader__Fv = .text:0x802D8498; // type:function size:0x4C scope:global +ReplaceSkyTextures__F9SKY_LAYER = .text:0x802D84E4; // type:function size:0xAC scope:global +StuffSkyLayer__FP5eView9SKY_LAYER = .text:0x802D8590; // type:function size:0x2B8 scope:global +StuffSpecular__FP5eView = .text:0x802D8848; // type:function size:0x2E8 scope:global +GetLayerMod__FP5eView9SKY_LAYERPfN32 = .text:0x802D8B30; // type:function size:0xE0 scope:global +__9SpaceNodeP9SpaceNode = .text:0x802D8C10; // type:function size:0xE0 scope:global +_._9SpaceNode = .text:0x802D8CF0; // type:function size:0xA4 scope:global +SetParent__9SpaceNodeP9SpaceNode = .text:0x802D8D94; // type:function size:0x50 scope:global +RemoveFromParent__9SpaceNode = .text:0x802D8DE4; // type:function size:0x30 scope:global +AddChild__9SpaceNodeP9SpaceNode = .text:0x802D8E14; // type:function size:0x40 scope:global +RemoveChild__9SpaceNodeP9SpaceNode = .text:0x802D8E54; // type:function size:0x38 scope:global +RemoveAllChildren__9SpaceNode = .text:0x802D8E8C; // type:function size:0x44 scope:global +Lock__9SpaceNode = .text:0x802D8ED0; // type:function size:0x10 scope:global +Unlock__9SpaceNode = .text:0x802D8EE0; // type:function size:0x5C scope:global +ReallySetDirty__9SpaceNode = .text:0x802D8F3C; // type:function size:0x58 scope:global +Update__9SpaceNode = .text:0x802D8F94; // type:function size:0x160 scope:global +CreateSpaceNode__FP9SpaceNode = .text:0x802D90F4; // type:function size:0x48 scope:global +DeleteSpaceNode__FP9SpaceNode = .text:0x802D913C; // type:function size:0x20 scope:global +ServiceSpaceNodes__Fv = .text:0x802D915C; // type:function size:0x70 scope:global +InitSpaceNodes__Fv = .text:0x802D91CC; // type:function size:0x4C scope:global +GetCarPartFromSlot__F11CAR_SLOT_ID = .text:0x802D9218; // type:function size:0x14 scope:global +ConvertVinylGroupNumberToVinylType__Fi = .text:0x802D922C; // type:function size:0xC4 scope:global +LoaderCarInfo__FP6bChunk = .text:0x802D92F0; // type:function size:0x790 scope:global +UnloaderCarInfo__FP6bChunk = .text:0x802D9A80; // type:function size:0x94 scope:global +GetAttribute__7CarPartUiP16CarPartAttribute = .text:0x802D9B14; // type:function size:0xC8 scope:global +GetFirstAppliedAttribute__7CarPartUi = .text:0x802D9BDC; // type:function size:0x24 scope:global +GetNextAppliedAttribute__7CarPartUiP16CarPartAttribute = .text:0x802D9C00; // type:function size:0x20 scope:global +HasAppliedAttribute__7CarPartUi = .text:0x802D9C20; // type:function size:0x30 scope:global +GetAppliedAttributeString__7CarPartUiPCc = .text:0x802D9C50; // type:function size:0x50 scope:global +GetAppliedAttributeIParam__7CarPartUii = .text:0x802D9CA0; // type:function size:0x40 scope:global +GetAppliedAttributeUParam__7CarPartUiUi = .text:0x802D9CE0; // type:function size:0x40 scope:global +GetModelNameHash__17CarPartModelTableUiii = .text:0x802D9D20; // type:function size:0xB8 scope:global +GetName__7CarPart = .text:0x802D9DD8; // type:function size:0x18 scope:global +GetCarTypeNameHash__7CarPart = .text:0x802D9DF0; // type:function size:0x18 scope:global +MapCarTypeNameHashToIndex__FUi = .text:0x802D9E08; // type:function size:0x4C scope:global +GetModelNameHash__7CarPartii = .text:0x802D9E54; // type:function size:0xA8 scope:global +GetPartIndex__15CarPartDatabaseP7CarPart = .text:0x802D9EFC; // type:function size:0x58 scope:global +GetCarPartByIndex__15CarPartDatabasei = .text:0x802D9F54; // type:function size:0x44 scope:global +NewGetNumCarParts__15CarPartDatabase7CarTypeiUii = .text:0x802D9F98; // type:function size:0x70 scope:global +NewGetCarPart__15CarPartDatabase7CarTypeiUiP7CarParti = .text:0x802DA008; // type:function size:0x1D4 scope:global +NewGetFirstCarPart__15CarPartDatabase7CarTypeiUii = .text:0x802DA1DC; // type:function size:0x28 scope:global +NewGetNextCarPart__15CarPartDatabaseP7CarPart7CarTypeiUii = .text:0x802DA204; // type:function size:0x34 scope:global +GetCarType__15CarPartDatabaseUi = .text:0x802DA238; // type:function size:0x64 scope:global +GetCarTypeName__F7CarType = .text:0x802DA29C; // type:function size:0x20 scope:global +GetCarTypeInfoFromHash__FUi = .text:0x802DA2BC; // type:function size:0x38 scope:global +GetTypesFromSlot__F11CAR_SLOT_ID7CarType = .text:0x802DA2F4; // type:function size:0xDC scope:global +Init__8RideInfo7CarType14CarRenderUsageii = .text:0x802DA3D0; // type:function size:0x188 scope:global +GetSpecialLODRangeForCarSlot__8RideInfoiP11CARPART_LODT2b = .text:0x802DA558; // type:function size:0x9C scope:global +FindPartWithLevel__F7CarType11CAR_SLOT_IDi = .text:0x802DA5F4; // type:function size:0x94 scope:global +SetUpgradePart__8RideInfo11CAR_SLOT_IDi = .text:0x802DA688; // type:function size:0x60 scope:global +SetStockParts__8RideInfo = .text:0x802DA6E8; // type:function size:0x278 scope:global +GenerateMissingCarParts__Fv = .text:0x802DA960; // type:function size:0xC scope:global +SetRandomParts__8RideInfo = .text:0x802DA96C; // type:function size:0x1D8 scope:global +SetRandomPart__8RideInfo11CAR_SLOT_IDi = .text:0x802DAB44; // type:function size:0x1DC scope:global +SetRandomPaint__8RideInfo = .text:0x802DAD20; // type:function size:0xC4 scope:global +GetPart__C8RideInfoi = .text:0x802DADE4; // type:function size:0x10 scope:global +SetPart__8RideInfoiP7CarPartb = .text:0x802DADF4; // type:function size:0x3A0 scope:global +UpdatePartsEnabled__8RideInfo = .text:0x802DB194; // type:function size:0xC8 scope:global +IsPartEnabled__8RideInfoi = .text:0x802DB25C; // type:function size:0x10 scope:global +GetSkinNameHash__8RideInfo = .text:0x802DB26C; // type:function size:0x68 scope:global +SetCompositeNameHash__8RideInfoi = .text:0x802DB2D4; // type:function size:0xDC scope:global +GetCompositeSkinNameHash__8RideInfo = .text:0x802DB3B0; // type:function size:0x8 scope:global +SetCompositeSkinNameHash__8RideInfoUi = .text:0x802DB3B8; // type:function size:0x34 scope:global +GetCompositeWheelNameHash__8RideInfo = .text:0x802DB3EC; // type:function size:0x8 scope:global +SetCompositeWheelNameHash__8RideInfoUi = .text:0x802DB3F4; // type:function size:0x8 scope:global +GetCompositeSpinnerNameHash__8RideInfo = .text:0x802DB3FC; // type:function size:0x8 scope:global +SetCompositeSpinnerNameHash__8RideInfoUi = .text:0x802DB404; // type:function size:0x8 scope:global +IsUsingCompositeSkin__8RideInfo = .text:0x802DB40C; // type:function size:0x30 scope:global +DumpForPreset__8RideInfoP11FECarRecord = .text:0x802DB43C; // type:function size:0x58 scope:global +LoaderFEPresetCars__FP6bChunk = .text:0x802DB494; // type:function size:0xEC scope:global +UnloaderFEPresetCars__FP6bChunk = .text:0x802DB580; // type:function size:0x4C scope:global +GetNumPresetCars__Fv = .text:0x802DB5CC; // type:function size:0x2C scope:global +GetPresetCarAt__Fi = .text:0x802DB5F8; // type:function size:0x2C scope:global +FindFEPresetCar__FUi = .text:0x802DB624; // type:function size:0x60 scope:global +FillWithPreset__8RideInfoUi = .text:0x802DB684; // type:function size:0xF0 scope:global +UsedCarTextureAddToTable__FPUiiiUi = .text:0x802DB774; // type:function size:0x58 scope:global +GetUsedCarTextureInfo__FP18UsedCarTextureInfoP8RideInfoi = .text:0x802DB7CC; // type:function size:0xDE8 scope:global +CarInfo_GetMaxCompositingBufferSize__Fv = .text:0x802DC5B4; // type:function size:0x8 scope:global +CarInfo_GetResourcePool__Fb = .text:0x802DC5BC; // type:function size:0x48 scope:global +CarInfo_GetResourceCost__F7CarTypebT1 = .text:0x802DC604; // type:function size:0x90 scope:global +CarInfo_IsSkinned__F7CarType = .text:0x802DC694; // type:function size:0xBC scope:global +GetNumCarPartIDNames__Fv = .text:0x802DC750; // type:function size:0x8 scope:global +GetCarPartNameFromID__Fi = .text:0x802DC758; // type:function size:0x8C scope:global +GetCarPartIDFromCrc__FG6UCrc32 = .text:0x802DC7E4; // type:function size:0xAC scope:global +GetNumCarSlotIDNames__Fv = .text:0x802DC890; // type:function size:0x8 scope:global +GetCarSlotNameFromID__Fi = .text:0x802DC898; // type:function size:0x8C scope:global +__17LoadedTexturePackPCci = .text:0x802DC924; // type:function size:0x70 scope:global +_._17LoadedTexturePack = .text:0x802DC994; // type:function size:0x4C scope:global +__15LoadedSolidPackPCc = .text:0x802DC9E0; // type:function size:0x50 scope:global +_._15LoadedSolidPack = .text:0x802DCA30; // type:function size:0x4C scope:global +__15LoadedSkinLayerUi = .text:0x802DCA7C; // type:function size:0x1C scope:global +__10LoadedSkinP8RideInfoii = .text:0x802DCA98; // type:function size:0x7C scope:global +GetTextureHashes__10LoadedSkinPUiii = .text:0x802DCB14; // type:function size:0x78 scope:global +__11LoadedWheelP8RideInfob = .text:0x802DCB8C; // type:function size:0x1AC scope:global +__9LoadedCarP8RideInfoii = .text:0x802DCD38; // type:function size:0x28 scope:global +GatherModelHashes__FP8RideInfoPUiiiii = .text:0x802DCD60; // type:function size:0x118 scope:global +GetModelHashes__9LoadedCarPUii = .text:0x802DCE78; // type:function size:0x244 scope:global +__14LoadedRideInfoP8RideInfoiii = .text:0x802DD0BC; // type:function size:0x154 scope:global +InitCarLoader__Fv = .text:0x802DD210; // type:function size:0x9C scope:global +__9CarLoader = .text:0x802DD2AC; // type:function size:0x9C scope:global +SetLoadingMode__9CarLoaderQ29CarLoader12eLoadingModei = .text:0x802DD348; // type:function size:0x18 scope:global +SetMemoryPoolSize__9CarLoaderi = .text:0x802DD360; // type:function size:0x130 scope:global +GetMemoryEntries__9CarLoaderP17LoadedTexturePackPPvi = .text:0x802DD490; // type:function size:0x3C scope:global +GetMemoryEntries__9CarLoaderP15LoadedSolidPackPPvi = .text:0x802DD4CC; // type:function size:0x68 scope:global +PrintMemoryUsage__9CarLoaderb = .text:0x802DD534; // type:function size:0x208 scope:global +AllocateSolidPack__9CarLoaderPCc = .text:0x802DD73C; // type:function size:0x78 scope:global +UnallocateSolidPack__9CarLoaderP15LoadedSolidPack = .text:0x802DD7B4; // type:function size:0x10 scope:global +LoadSolidPack__9CarLoaderP15LoadedSolidPacki = .text:0x802DD7C4; // type:function size:0x120 scope:global +LoadedSolidPackCallback__9CarLoaderP15LoadedSolidPack = .text:0x802DD8E4; // type:function size:0x28 scope:global +UnloadSolidPack__9CarLoaderP15LoadedSolidPack = .text:0x802DD90C; // type:function size:0x90 scope:global +AllocateTexturePack__9CarLoaderPCci = .text:0x802DD99C; // type:function size:0x80 scope:global +UnallocateTexturePack__9CarLoaderP17LoadedTexturePack = .text:0x802DDA1C; // type:function size:0x10 scope:global +LoadTexturePack__9CarLoaderP17LoadedTexturePacki = .text:0x802DDA2C; // type:function size:0x8C scope:global +LoadedTexturePackCallback__9CarLoaderP17LoadedTexturePack = .text:0x802DDAB8; // type:function size:0x28 scope:global +UnloadTexturePack__9CarLoaderP17LoadedTexturePack = .text:0x802DDAE0; // type:function size:0x84 scope:global +LoadCar__9CarLoaderP9LoadedCar = .text:0x802DDB64; // type:function size:0xE8 scope:global +LoadedCarCallback__9CarLoaderP9LoadedCar = .text:0x802DDC4C; // type:function size:0x28 scope:global +UnloadCar__9CarLoaderP9LoadedCar = .text:0x802DDC74; // type:function size:0xA8 scope:global +LoadAllWheelModels__9CarLoader = .text:0x802DDD1C; // type:function size:0x134 scope:global +LoadedWheelModelsCallback__9CarLoader = .text:0x802DDE50; // type:function size:0x50 scope:global +LoadAllWheelTextures__9CarLoader = .text:0x802DDEA0; // type:function size:0x134 scope:global +LoadedWheelTexturesCallback__9CarLoader = .text:0x802DDFD4; // type:function size:0x90 scope:global +UnloadWheel__9CarLoaderP11LoadedWheel = .text:0x802DE064; // type:function size:0x84 scope:global +GetMemoryEntries__9CarLoaderP11LoadedWheelPPvi = .text:0x802DE0E8; // type:function size:0xB0 scope:global +LoadAllTexturesFromPack__9CarLoaderPCci = .text:0x802DE198; // type:function size:0x170 scope:global +LoadedAllTexturesFromPackCallback__9CarLoader = .text:0x802DE308; // type:function size:0x84 scope:global +LoadSkin__9CarLoaderP10LoadedSkini = .text:0x802DE38C; // type:function size:0x140 scope:global +LoadedSkinCallback__9CarLoaderP10LoadedSkin = .text:0x802DE4CC; // type:function size:0x78 scope:global +CompositeSkin__9CarLoaderP10LoadedSkin = .text:0x802DE544; // type:function size:0xA8 scope:global +UnloadSkinTemporaries__9CarLoaderP10LoadedSkini = .text:0x802DE5EC; // type:function size:0xD0 scope:global +UnloadSkinPerms__9CarLoaderP10LoadedSkin = .text:0x802DE6BC; // type:function size:0x74 scope:global +UnloadSkin__9CarLoaderP10LoadedSkin = .text:0x802DE730; // type:function size:0x64 scope:global +GetMemoryEntries__9CarLoaderP10LoadedSkinPPvi = .text:0x802DE794; // type:function size:0xB0 scope:global +AllocateSkinLayers__9CarLoaderPUiiPP15LoadedSkinLayeriPCc = .text:0x802DE844; // type:function size:0x13C scope:global +UnallocateSkinLayers__9CarLoaderPP15LoadedSkinLayeri = .text:0x802DE980; // type:function size:0x38 scope:global +LoadSkinLayers__9CarLoaderPUiiPP15LoadedSkinLayeri = .text:0x802DE9B8; // type:function size:0x54 scope:global +LoadedSkinLayers__9CarLoaderPP15LoadedSkinLayeri = .text:0x802DEA0C; // type:function size:0x40 scope:global +UnloadSkinLayers__9CarLoaderPUiiPP15LoadedSkinLayeri = .text:0x802DEA4C; // type:function size:0xA8 scope:global +GetMemoryEntries__9CarLoaderP15LoadedSkinLayerPPvi = .text:0x802DEAF4; // type:function size:0x74 scope:global +FindLoadedSolidPack__9CarLoaderPCc = .text:0x802DEB68; // type:function size:0x60 scope:global +FindLoadedTexturePack__9CarLoaderPCc = .text:0x802DEBC8; // type:function size:0x60 scope:global +FindLoadedSkinLayer__9CarLoaderUi = .text:0x802DEC28; // type:function size:0x2C scope:global +FindLoadedRideInfo__9CarLoaderi = .text:0x802DEC54; // type:function size:0x2C scope:global +FindLoadedRideInfo__9CarLoaderP8RideInfo = .text:0x802DEC80; // type:function size:0x8 scope:global +Load__9CarLoaderP8RideInfo = .text:0x802DEC88; // type:function size:0xB8 scope:global +Unload__9CarLoaderi = .text:0x802DED40; // type:function size:0xA8 scope:global +IsLoaded__9CarLoaderi = .text:0x802DEDE8; // type:function size:0x50 scope:global +IsLoaded__9CarLoaderP14LoadedRideInfo = .text:0x802DEE38; // type:function size:0x7C scope:global +AllocateRideInfo__9CarLoaderP8RideInfoi = .text:0x802DEEB4; // type:function size:0x244 scope:global +UnallocateRideInfo__9CarLoaderP14LoadedRideInfo = .text:0x802DF0F8; // type:function size:0x34 scope:global +UnloadRideInfo__9CarLoaderP14LoadedRideInfoi = .text:0x802DF12C; // type:function size:0x114 scope:global +UnloadEverything__9CarLoader = .text:0x802DF240; // type:function size:0xB8 scope:global +UnloadOverflowedResources__9CarLoader = .text:0x802DF2F8; // type:function size:0x50 scope:global +UnloadUnallocatedRideInfos__9CarLoaderi = .text:0x802DF348; // type:function size:0x58 scope:global +UnloadAllSkinTemporaries__9CarLoader = .text:0x802DF3A0; // type:function size:0xA8 scope:global +GetMemoryEntries__9CarLoaderP9LoadedCarPPvi = .text:0x802DF448; // type:function size:0x64 scope:global +RemoveSomethingFromCarMemoryPool__9CarLoaderb = .text:0x802DF4AC; // type:function size:0x160 scope:global +MakeSpaceInPool__9CarLoaderi = .text:0x802DF60C; // type:function size:0x64 scope:global +MakeSpaceInCarMemoryPool__9CarLoaderiib = .text:0x802DF670; // type:function size:0x1B8 scope:global +MoveDefragmentAllocation__FPv = .text:0x802DF828; // type:function size:0x1A8 scope:global +DefragmentAllocation__9CarLoaderPv = .text:0x802DF9D0; // type:function size:0x140 scope:global +AllocateDefragmentStorage__9CarLoader = .text:0x802DFB10; // type:function size:0x130 scope:global +FreeDefragmentStorage__9CarLoader = .text:0x802DFC40; // type:function size:0x6C scope:global +DefragmentPool__9CarLoader = .text:0x802DFCAC; // type:function size:0x2AC scope:global +BeginLoading__9CarLoaderPFUi_vUi = .text:0x802DFF58; // type:function size:0x7C scope:global +ServiceLoading__9CarLoader = .text:0x802DFFD4; // type:function size:0x2E4 scope:global +CallUserCallback__9CarLoaderi = .text:0x802E02B8; // type:function size:0x50 scope:global +LoadingDoneCallback__9CarLoader = .text:0x802E0308; // type:function size:0x28 scope:global +LoadedSolidPackCallbackBridge__9CarLoaderUi = .text:0x802E0330; // type:function size:0x2C scope:global +LoadedSolidPackCallbackBridge__9CarLoaderi = .text:0x802E035C; // type:function size:0x2C scope:global +LoadedTexturePackCallbackBridge__9CarLoaderUi = .text:0x802E0388; // type:function size:0x2C scope:global +LoadedCarCallbackBridge__9CarLoaderUi = .text:0x802E03B4; // type:function size:0x2C scope:global +LoadedWheelModelsCallbackBridge__9CarLoaderUi = .text:0x802E03E0; // type:function size:0x28 scope:global +LoadedWheelTexturesCallbackBridge__9CarLoaderUi = .text:0x802E0408; // type:function size:0x28 scope:global +LoadedAllTexturesFromPackCallbackBridge__9CarLoaderUi = .text:0x802E0430; // type:function size:0x28 scope:global +LoadedSkinCallbackBridge__9CarLoaderUi = .text:0x802E0458; // type:function size:0x2C scope:global +GetSkinCompositeParams__FUi = .text:0x802E0484; // type:function size:0x88 scope:global +CompareCompositeParams__FP19SkinCompositeParamsT0 = .text:0x802E050C; // type:function size:0x108 scope:global +IsInSkinCompositeCache__FP19SkinCompositeParams = .text:0x802E0614; // type:function size:0x4C scope:global +UpdateSkinCompositeCache__FP19SkinCompositeParams = .text:0x802E0660; // type:function size:0x48 scope:global +FlushFromSkinCompositeCache__FUi = .text:0x802E06A8; // type:function size:0x34 scope:global +ScaleColours__FUiUi = .text:0x802E06DC; // type:function size:0x1B4 scope:global +GetBlendColour__FPUiPfib = .text:0x802E0890; // type:function size:0x1F4 scope:global +RemapColour__FUiPUi = .text:0x802E0A84; // type:function size:0xD0 scope:global +CompositeSkin32__FP19SkinCompositeParams = .text:0x802E0B54; // type:function size:0x370 scope:global +CompositeSkin__FP19SkinCompositeParams = .text:0x802E0EC4; // type:function size:0x850 scope:global +DumpPreComp__FP14VinylLayerInfoP11TextureInfo = .text:0x802E1714; // type:function size:0xD4 scope:global +GetHoodSpoilerHash__FP8RideInfo = .text:0x802E17E8; // type:function size:0x8 scope:global +GetHoodSpoilerMaskHash__FP8RideInfo = .text:0x802E17F0; // type:function size:0x8 scope:global +GetWheelTextureHash__FP8RideInfo = .text:0x802E17F8; // type:function size:0x60 scope:global +GetWheelTextureMaskHash__FP8RideInfo = .text:0x802E1858; // type:function size:0x60 scope:global +GetSpinnerTextureHash__FP8RideInfo = .text:0x802E18B8; // type:function size:0x58 scope:global +GetSpinnerTextureMaskHash__FP8RideInfo = .text:0x802E1910; // type:function size:0x70 scope:global +GetVinylLayerHash__FP8RideInfoi = .text:0x802E1980; // type:function size:0x50 scope:global +GetVinylLayerHash__FP7CarPart7CarTypei = .text:0x802E19D0; // type:function size:0xD0 scope:global +GetVinylLayerMaskHash__FP8RideInfoi = .text:0x802E1AA0; // type:function size:0xC4 scope:global +CompositeSkin__FP8RideInfo = .text:0x802E1B64; // type:function size:0x4D0 scope:global +GetTempCarSkinTextures__FPUiiiP8RideInfo = .text:0x802E2034; // type:function size:0x1BC scope:global +CompositeWheel8__FP11TextureInfoN20Ui = .text:0x802E21F0; // type:function size:0x24C scope:global +CompositeWheel32__FP11TextureInfoN20Ui = .text:0x802E243C; // type:function size:0x184 scope:global +CompositeWheel__FP8RideInfoUiUiUi11CAR_SLOT_ID = .text:0x802E25C0; // type:function size:0x1E8 scope:global +CompositeRim__FP8RideInfo = .text:0x802E27A8; // type:function size:0x5C scope:global +__10WorldModelUiP8bMatrix4b = .text:0x802E2804; // type:function size:0x80 scope:global +__10WorldModelP9SpaceNodePUib = .text:0x802E2884; // type:function size:0xB0 scope:global +__10WorldModelPC14ModelHeirarchyUib = .text:0x802E2934; // type:function size:0x50 scope:global +Construct__10WorldModelP9SpaceNodeP8bMatrix4PC14ModelHeirarchyUib = .text:0x802E2984; // type:function size:0x114 scope:global +_._10WorldModel = .text:0x802E2A98; // type:function size:0xAC scope:global +GetModel__10WorldModel = .text:0x802E2B44; // type:function size:0x3C scope:global +AttachReplacementTextureTable__10WorldModelP24eReplacementTextureTablei = .text:0x802E2B80; // type:function size:0x60 scope:global +GetLocalBoundingBox__10WorldModelP8bVector3T1 = .text:0x802E2BE0; // type:function size:0x7C scope:global +InitWorldModels__Fv = .text:0x802E2C5C; // type:function size:0x3C scope:global +CloseWorldModels__Fv = .text:0x802E2C98; // type:function size:0x74 scope:global +RenderNode__10WorldModelPC14ModelHeirarchyUiP5eViewiP8bMatrix4PC8bMatrix4 = .text:0x802E2D0C; // type:function size:0xF4 scope:global +RenderModel__10WorldModelP6eModelP5eViewiP8bMatrix4PC8bMatrix4 = .text:0x802E2E00; // type:function size:0x384 scope:global +Render__10WorldModelP5eViewi = .text:0x802E3184; // type:function size:0x2C8 scope:global +RenderWorldModels__FP5eViewi = .text:0x802E344C; // type:function size:0x1C4 scope:global +initnet__FPUciii = .text:0x802E3610; // type:function size:0x8C scope:global +unbiasnet__Fv = .text:0x802E369C; // type:function size:0x68 scope:global +inxbuild__Fv = .text:0x802E3704; // type:function size:0x1A4 scope:global +inxsearch__Fiiii = .text:0x802E38A8; // type:function size:0x1A4 scope:global +contest__Fiiii = .text:0x802E3A4C; // type:function size:0x13C scope:local +altersingle__Fiiiiii = .text:0x802E3B88; // type:function size:0x94 scope:local +alterneigh__Fiiiiii = .text:0x802E3C1C; // type:function size:0x1CC scope:local +learn__Fv = .text:0x802E3DE8; // type:function size:0x2BC scope:global +nqGetPaletteEntry__FiRUcN31 = .text:0x802E40A4; // type:function size:0x74 scope:global +TempInits__Fv = .text:0x802E4118; // type:function size:0x4 scope:global +SetRainBase__Fv = .text:0x802E411C; // type:function size:0x80 scope:global +__4RainP5eView8RainType = .text:0x802E419C; // type:function size:0x1D8 scope:global +Init__4Rain8RainTypef = .text:0x802E4374; // type:function size:0x178 scope:global +SetOverRideRainIntensity__Ff = .text:0x802E44EC; // type:function size:0xC scope:global +AttachRainCurtain__4Rainffffffffffff = .text:0x802E44F8; // type:function size:0x4 scope:global +CreateWindRotMatrix__FP5eViewP8bMatrix4iT1 = .text:0x802E44FC; // type:function size:0x1A4 scope:global +__12OnScreenRain = .text:0x802E46A0; // type:function size:0x4 scope:global +AmIinATunnel__FP5eViewi = .text:0x802E46A4; // type:function size:0x48 scope:global +SetLocation__14FacePixelationR8bVector3 = .text:0x802E46EC; // type:function size:0x24 scope:global +GetData__14FacePixelationPfN31 = .text:0x802E4710; // type:function size:0x2C scope:global +__14FacePixelationP5eView = .text:0x802E473C; // type:function size:0x1C scope:global +Render__14FacePixelation = .text:0x802E4758; // type:function size:0x6C scope:global +GetVertices__8HeliPolyP8bVector3 = .text:0x802E47C4; // type:function size:0xDC scope:global +EndianSwap__11HeliSection = .text:0x802E48A0; // type:function size:0xAC scope:global +GetElevation__19HeliSheetCoordinateRC8bVector2P8bVector3Pb = .text:0x802E494C; // type:function size:0x1C4 scope:global +__16HeliSheetManager = .text:0x802E4B10; // type:function size:0x10 scope:global +Loader__16HeliSheetManagerP6bChunk = .text:0x802E4B20; // type:function size:0x80 scope:global +Unloader__16HeliSheetManagerP6bChunk = .text:0x802E4BA0; // type:function size:0x3C scope:global +FindHeliPoly__16HeliSheetManagerRC8bVector2 = .text:0x802E4BDC; // type:function size:0x2A4 scope:global +LoaderHeliSheet__FP6bChunk = .text:0x802E4E80; // type:function size:0x2C scope:global +UnloaderHeliSheet__FP6bChunk = .text:0x802E4EAC; // type:function size:0x2C scope:global +Init__15SimpleModelAnimv = .text:0x802E4ED8; // type:function size:0x4C scope:global +Reset__15SimpleModelAnimv = .text:0x802E4F24; // type:function size:0x68 scope:global +Update__15SimpleModelAnimv = .text:0x802E4F8C; // type:function size:0x98 scope:global +Animate__15SimpleModelAnimP6eModelP6eSolidP8bMatrix4 = .text:0x802E5024; // type:function size:0x18C scope:global +__17ParameterMapLayer = .text:0x802E51B0; // type:function size:0x30 scope:global +_._17ParameterMapLayer = .text:0x802E51E0; // type:function size:0x88 scope:global +Load__17ParameterMapLayerPP6bChunk = .text:0x802E5268; // type:function size:0x3A4 scope:global +Unload__17ParameterMapLayer = .text:0x802E560C; // type:function size:0x54 scope:global +AddParameterAccessor__17ParameterMapLayerP17ParameterAccessor = .text:0x802E5660; // type:function size:0x1C scope:global +RemoveParameterAccessor__17ParameterMapLayerP17ParameterAccessor = .text:0x802E567C; // type:function size:0x14 scope:global +GetParameterData__17ParameterMapLayerff = .text:0x802E5690; // type:function size:0x6C scope:global +GetDataFloat__17ParameterMapLayeriPv = .text:0x802E56FC; // type:function size:0x2C scope:global +GetDataInt__17ParameterMapLayeriPv = .text:0x802E5728; // type:function size:0x24 scope:global +GetParameterSetIndexFromQuadData8__17ParameterMapLayerff = .text:0x802E574C; // type:function size:0xE8 scope:global +GetParameterSetIndexFromQuadData16__17ParameterMapLayerff = .text:0x802E5834; // type:function size:0xE8 scope:global +GetFieldPointer__17ParameterMapLayerii = .text:0x802E591C; // type:function size:0x88 scope:global +__tcf_0 = .text:0x802E59A4; // type:function size:0x2C scope:local +GetParameterMapsManager__Fv = .text:0x802E59D0; // type:function size:0x5C scope:global +__tcf_1 = .text:0x802E5A2C; // type:function size:0x70 scope:local +GetAutoParameterAccessors__Fv = .text:0x802E5A9C; // type:function size:0x58 scope:global +DumpAutoParameterAccessorsList__Fv = .text:0x802E5AF4; // type:function size:0x4 scope:global +__17ParameterAccessorPCc = .text:0x802E5AF8; // type:function size:0x8C scope:global +_._17ParameterAccessor = .text:0x802E5B84; // type:function size:0x74 scope:global +SetLayer__17ParameterAccessorP17ParameterMapLayer = .text:0x802E5BF8; // type:function size:0xB0 scope:global +ClearLayer__17ParameterAccessor = .text:0x802E5CA8; // type:function size:0x24 scope:global +CaptureData__17ParameterAccessorff = .text:0x802E5CCC; // type:function size:0x3C scope:global +ClearData__17ParameterAccessor = .text:0x802E5D08; // type:function size:0xC scope:global +GetDataFloat__17ParameterAccessori = .text:0x802E5D14; // type:function size:0x48 scope:global +GetDataInt__17ParameterAccessori = .text:0x802E5D5C; // type:function size:0x44 scope:global +SetUpForNewLayer__17ParameterAccessor = .text:0x802E5DA0; // type:function size:0x4 scope:global +__22ParameterAccessorBlendPCc = .text:0x802E5DA4; // type:function size:0x48 scope:global +_._22ParameterAccessorBlend = .text:0x802E5DEC; // type:function size:0x30 scope:global +CaptureData__22ParameterAccessorBlendfff = .text:0x802E5E1C; // type:function size:0x1B4 scope:global +ClearData__22ParameterAccessorBlend = .text:0x802E5FD0; // type:function size:0x50 scope:global +SetUpForNewLayer__22ParameterAccessorBlend = .text:0x802E6020; // type:function size:0x58 scope:global +CaptureData__22ParameterAccessorBlendff = .text:0x802E6078; // type:function size:0x4 scope:global +__32ParameterAccessorBlendByDistancePCc = .text:0x802E607C; // type:function size:0x54 scope:global +_._32ParameterAccessorBlendByDistance = .text:0x802E60D0; // type:function size:0x30 scope:global +CaptureData__32ParameterAccessorBlendByDistancefff = .text:0x802E6100; // type:function size:0xFC scope:global +SetUpForNewLayer__32ParameterAccessorBlendByDistance = .text:0x802E61FC; // type:function size:0x3C scope:global +CaptureData__32ParameterAccessorBlendByDistanceff = .text:0x802E6238; // type:function size:0x4 scope:global +__20ParameterMapsManager = .text:0x802E623C; // type:function size:0x10 scope:global +_._20ParameterMapsManager = .text:0x802E624C; // type:function size:0x9C scope:global +AddLayer__20ParameterMapsManagerP17ParameterMapLayer = .text:0x802E62E8; // type:function size:0x18 scope:global +UnloadAllLayers__20ParameterMapsManager = .text:0x802E6300; // type:function size:0x74 scope:global +GetDataForLayer__20ParameterMapsManagerUiP17ParameterAccessori = .text:0x802E6374; // type:function size:0x64 scope:global +LoaderParameterMaps__FP6bChunk = .text:0x802E63D8; // type:function size:0x124 scope:global +UnloaderParameterMaps__FP6bChunk = .text:0x802E64FC; // type:function size:0x4C scope:global +GetValueFromSpline__FfP8bMatrix4 = .text:0x802E6548; // type:function size:0x60 scope:global +SetMiddleGrayValue__Ff = .text:0x802E65A8; // type:function size:0x4 scope:global +__16IVisualTreatment = .text:0x802E65AC; // type:function size:0x500 scope:global +_._16IVisualTreatment = .text:0x802E6AAC; // type:function size:0x9C scope:global +Reset__16IVisualTreatment = .text:0x802E6B48; // type:function size:0x94 scope:global +TriggerPulse__16IVisualTreatmentf = .text:0x802E6BDC; // type:function size:0x88 scope:global +SetNosEngaged__16IVisualTreatmentb = .text:0x802E6C64; // type:function size:0x5C scope:global +SetPursuitBreakerTarget__16IVisualTreatmentf = .text:0x802E6CC0; // type:function size:0x24 scope:global +BlendVisualLookAttribute__16IVisualTreatmentR8bMatrix4ffPMQ36Attrib3Gen10visuallookCFPCQ36Attrib3Gen10visuallook_RCQ25UMath7Matrix4 = .text:0x802E6CE4; // type:function size:0x1C8 scope:global +BlendVisualLookAttribute__16IVisualTreatmentRfffPMQ36Attrib3Gen10visuallookCFPCQ36Attrib3Gen10visuallook_RCf = .text:0x802E6EAC; // type:function size:0xC8 scope:global +BlendVisualLookAttribute__16IVisualTreatmentR8bVector4ffPMQ36Attrib3Gen10visuallookCFPCQ36Attrib3Gen10visuallook_RCQ25UMath7Vector4 = .text:0x802E6F74; // type:function size:0x134 scope:global +UpdateVisualLook__16IVisualTreatment = .text:0x802E70A8; // type:function size:0x100 scope:global +TriggerUves__16IVisualTreatment = .text:0x802E71A8; // type:function size:0x148 scope:global +UpdateHeat__16IVisualTreatmentP5eViewfb = .text:0x802E72F0; // type:function size:0x58C scope:global +Update__16IVisualTreatmentP5eView = .text:0x802E787C; // type:function size:0x238 scope:global +GetMaps__9VehicleFXv = .text:0x802E7AB4; // type:function size:0xC scope:global +LookupID__9VehicleFXG6UCrc32 = .text:0x802E7AC0; // type:function size:0x60 scope:global +__26VehiclePartDamageBehaviourP13CarRenderInfo = .text:0x802E7B20; // type:function size:0xD8 scope:global +_._26VehiclePartDamageBehaviour = .text:0x802E7BF8; // type:function size:0xCC scope:global +Init__26VehiclePartDamageBehaviour = .text:0x802E7CC4; // type:function size:0xF8 scope:global +InitAnimationPivot__26VehiclePartDamageBehaviourUiPCc = .text:0x802E7DBC; // type:function size:0x5C scope:global +Reset__26VehiclePartDamageBehaviour = .text:0x802E7E18; // type:function size:0x90 scope:global +FindPositionMarker__26VehiclePartDamageBehaviourPCc = .text:0x802E7EA8; // type:function size:0x8 scope:global +DamageZone__26VehiclePartDamageBehaviourii = .text:0x802E7EB0; // type:function size:0xE0 scope:global +ApplyDamage__26VehiclePartDamageBehaviour = .text:0x802E7F90; // type:function size:0x4C scope:global +ManageGlassDamage__26VehiclePartDamageBehaviour = .text:0x802E7FDC; // type:function size:0xD0 scope:global +GetPartMatrix__26VehiclePartDamageBehaviourUi = .text:0x802E80AC; // type:function size:0x24 scope:global +IsPartHidden__26VehiclePartDamageBehaviourUi = .text:0x802E80D0; // type:function size:0x24 scope:global +HidePart__26VehiclePartDamageBehaviourUi = .text:0x802E80F4; // type:function size:0x20 scope:global +Pose__26VehiclePartDamageBehaviourP8bMatrix4 = .text:0x802E8114; // type:function size:0x50 scope:global +Update__26VehiclePartDamageBehaviourP8bMatrix4 = .text:0x802E8164; // type:function size:0x1B0 scope:global +CalcPartRotation__26VehiclePartDamageBehaviourP8bMatrix4ffff = .text:0x802E8314; // type:function size:0x338 scope:global +AnimatePart__26VehiclePartDamageBehaviourUiRC8bVector3P8bMatrix4 = .text:0x802E864C; // type:function size:0x230 scope:global +DamageVehicle__26VehiclePartDamageBehaviourRCQ210DamageZone4Info = .text:0x802E887C; // type:function size:0x74 scope:global +UnitTest__26VehiclePartDamageBehaviour = .text:0x802E88F0; // type:function size:0xA0 scope:global +__21VehiclePartDamageZoneiPQ221VehiclePartDamageZone25DamageZoneSlotMapDataType = .text:0x802E8990; // type:function size:0x1C8 scope:global +Reset__21VehiclePartDamageZone = .text:0x802E8B58; // type:function size:0xC scope:global +GetSlotNum__C21VehiclePartDamageZone = .text:0x802E8B64; // type:function size:0x14 scope:global +GetSlotID__C21VehiclePartDamageZonei = .text:0x802E8B78; // type:function size:0x10 scope:global +_._21VehiclePartDamageZone = .text:0x802E8B88; // type:function size:0x9C scope:global +SetDamageLevel__21VehiclePartDamageZoneUs = .text:0x802E8C24; // type:function size:0x8 scope:global +__17VehicleDamagePartP13CarRenderInfoi = .text:0x802E8C2C; // type:function size:0xD8 scope:global +_._17VehicleDamagePart = .text:0x802E8D04; // type:function size:0x54 scope:global +Reset__17VehicleDamagePart = .text:0x802E8D58; // type:function size:0x1C scope:global +InitVehicleDamage__Fv = .text:0x802E8D74; // type:function size:0x5C scope:global +reserve__Q24_STLt6vector2ZPCcZQ33UTL3Stdt9Allocator2ZPCcZ12_type_vectorUi = .text:0x802E8DD0; // type:function size:0x11C scope:global +find__H2ZPP17VehicleRenderConnZP17VehicleRenderConn_4_STLX01X01RCX11_X01 = .text:0x802E8EEC; // type:function size:0xB0 scope:global +reserve__Q24_STLt6vector2ZiZQ33UTL3Stdt9Allocator2ZiZ12_type_vectorUi = .text:0x802E8F9C; // type:function size:0x11C scope:global +__15CarPartDatabase = .text:0x802E90B8; // type:function size:0x1CC scope:global +__static_initialization_and_destruction_0 = .text:0x802E9284; // type:function size:0x2BA0 scope:local +InitQuantizers__13OnlineManager = .text:0x802EBE24; // type:function size:0x4 scope:global +OnQueryVehicleCache__C21DebugVehicleSelectionPC8IVehiclePC13IVehicleCache = .text:0x802EBE28; // type:function size:0x8 scope:global +GetCacheName__C21DebugVehicleSelection = .text:0x802EBE30; // type:function size:0xC scope:global +OnRemovedVehicleCache__21DebugVehicleSelectionP8IVehicle = .text:0x802EBE3C; // type:function size:0x4 scope:global +__20eDynamicLightContext = .text:0x802EBE40; // type:function size:0x4 scope:global +_._Q210RenderConn15Pkt_Car_Service = .text:0x802EBE44; // type:function size:0x34 scope:global +ConnectionClass__Q210RenderConn15Pkt_Car_Service = .text:0x802EBE78; // type:function size:0x64 scope:global +Size__Q210RenderConn15Pkt_Car_Service = .text:0x802EBEDC; // type:function size:0x8 scope:global +Type__Q210RenderConn15Pkt_Car_Service = .text:0x802EBEE4; // type:function size:0x20 scope:global +_._Q210RenderConn16Pkt_Heli_Service = .text:0x802EBF04; // type:function size:0x34 scope:global +ConnectionClass__Q210RenderConn16Pkt_Heli_Service = .text:0x802EBF38; // type:function size:0x64 scope:global +Size__Q210RenderConn16Pkt_Heli_Service = .text:0x802EBF9C; // type:function size:0x8 scope:global +Type__Q210RenderConn16Pkt_Heli_Service = .text:0x802EBFA4; // type:function size:0x20 scope:global +_._Q210RenderConn27Pkt_VehicleFragment_Service = .text:0x802EBFC4; // type:function size:0x34 scope:global +ConnectionClass__Q210RenderConn27Pkt_VehicleFragment_Service = .text:0x802EBFF8; // type:function size:0x64 scope:global +Size__Q210RenderConn27Pkt_VehicleFragment_Service = .text:0x802EC05C; // type:function size:0x8 scope:global +Type__Q210RenderConn27Pkt_VehicleFragment_Service = .text:0x802EC064; // type:function size:0x20 scope:global +_._Q210RenderConn21Pkt_Smackable_Service = .text:0x802EC084; // type:function size:0x34 scope:global +ConnectionClass__Q210RenderConn21Pkt_Smackable_Service = .text:0x802EC0B8; // type:function size:0x64 scope:global +Size__Q210RenderConn21Pkt_Smackable_Service = .text:0x802EC11C; // type:function size:0x8 scope:global +Type__Q210RenderConn21Pkt_Smackable_Service = .text:0x802EC124; // type:function size:0x20 scope:global +SetDirty__9SpaceNode = .text:0x802EC144; // type:function size:0x2C scope:global +OnClose__19SmackableRenderConn = .text:0x802EC170; // type:function size:0x40 scope:global +OnStatusCheck__19SmackableRenderConn = .text:0x802EC1B0; // type:function size:0x8 scope:global +Construct__19SmackableRenderConnRCQ23Sim14ConnectionData = .text:0x802EC1B8; // type:function size:0x44 scope:global +_._27IVehiclePartDamageBehaviour = .text:0x802EC1FC; // type:function size:0x34 scope:global +OnStatusCheck__17VehicleRenderConn = .text:0x802EC230; // type:function size:0x14 scope:global +OnEvent__17VehicleRenderConnQ217VehicleRenderConn7EventID = .text:0x802EC244; // type:function size:0x4 scope:global +__as__Q36Attrib3Gen5tiresRCQ26Attrib8Instance = .text:0x802EC248; // type:function size:0x30 scope:global +_._14HeliRenderConn = .text:0x802EC278; // type:function size:0x68 scope:global +OnClose__19VehicleFragmentConn = .text:0x802EC2E0; // type:function size:0x40 scope:global +OnStatusCheck__19VehicleFragmentConn = .text:0x802EC320; // type:function size:0x8 scope:global +Construct__19VehicleFragmentConnRCQ23Sim14ConnectionData = .text:0x802EC328; // type:function size:0x44 scope:global +ClassKey__Q36Attrib3Gen12emittergroup = .text:0x802EC36C; // type:function size:0xC scope:global +push_back__Q23UTLt6Vector2ZP17VehicleRenderConni16RCP17VehicleRenderConn = .text:0x802EC378; // type:function size:0x154 scope:global +ClassKey__Q36Attrib3Gen10visuallook = .text:0x802EC4CC; // type:function size:0xC scope:global +BlackBloomCurve__CQ36Attrib3Gen10visuallook = .text:0x802EC4D8; // type:function size:0xC scope:global +BlackBloomIntensity__CQ36Attrib3Gen10visuallook = .text:0x802EC4E4; // type:function size:0xC scope:global +ColourBloomCurve__CQ36Attrib3Gen10visuallook = .text:0x802EC4F0; // type:function size:0xC scope:global +ColourBloomIntensity__CQ36Attrib3Gen10visuallook = .text:0x802EC4FC; // type:function size:0xC scope:global +ColourBloomTint__CQ36Attrib3Gen10visuallook = .text:0x802EC508; // type:function size:0xC scope:global +Desaturation__CQ36Attrib3Gen10visuallook = .text:0x802EC514; // type:function size:0xC scope:global +DetailMapCurve__CQ36Attrib3Gen10visuallook = .text:0x802EC520; // type:function size:0x8 scope:global +DetailMapIntensity__CQ36Attrib3Gen10visuallook = .text:0x802EC528; // type:function size:0xC scope:global +ClassKey__Q36Attrib3Gen16visuallookeffect = .text:0x802EC534; // type:function size:0xC scope:global +IsActive__16VisualLookEffect = .text:0x802EC540; // type:function size:0x20 scope:global +UpdateActive__16VisualLookEffectf = .text:0x802EC560; // type:function size:0x12C scope:global +SType__Q210RenderConn15Pkt_Car_Service = .text:0x802EC68C; // type:function size:0x58 scope:global +SType__Q210RenderConn16Pkt_Heli_Service = .text:0x802EC6E4; // type:function size:0x58 scope:global +SType__Q210RenderConn27Pkt_VehicleFragment_Service = .text:0x802EC73C; // type:function size:0x58 scope:global +SType__Q210RenderConn21Pkt_Smackable_Service = .text:0x802EC794; // type:function size:0x58 scope:global +_._Q43UTL11Collectionst8Listable2Z17VehicleRenderConni10_4List = .text:0x802EC7EC; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP17VehicleRenderConni16Ui = .text:0x802EC8A0; // type:function size:0x4 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP17VehicleRenderConni10i16UiUi = .text:0x802EC8A4; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP17VehicleRenderConni10i16PP17VehicleRenderConnUi = .text:0x802EC8AC; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP17VehicleRenderConni10i16Ui = .text:0x802EC8B0; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP17VehicleRenderConni10i16 = .text:0x802EC8B8; // type:function size:0x8 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP17VehicleRenderConni16Ui = .text:0x802EC8C0; // type:function size:0x20 scope:global +_._Q23UTLt6Vector2ZP17VehicleRenderConni16 = .text:0x802EC8E0; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP17VehicleRenderConni10i16 = .text:0x802EC914; // type:function size:0xB4 scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP17VehicleRenderConni16 = .text:0x802EC9C8; // type:function size:0xC scope:global +_GLOBAL_.I.SuperEasyAIMode = .text:0x802EC9D4; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x802ECA00; // type:label scope:local +__9WColliderQ29WCollider14eColliderShapeUiUi = .text:0x802ECA00; // type:function size:0x234 scope:global +_._9WCollider = .text:0x802ECC34; // type:function size:0x240 scope:global +Get__9WColliderUi = .text:0x802ECE74; // type:function size:0xA8 scope:global +Create__9WColliderUiQ29WCollider14eColliderShapeUiUi = .text:0x802ECF1C; // type:function size:0x150 scope:global +Destroy__9WColliderP9WCollider = .text:0x802ED06C; // type:function size:0x134 scope:global +InvalidateIntersectingColliders__9WColliderRCQ25UMath7Vector4 = .text:0x802ED1A0; // type:function size:0x98 scope:global +CalcNewRegionSizeFromRequested__FbRCQ25UMath7Vector3fT1fT1RQ25UMath7Vector3Rf = .text:0x802ED238; // type:function size:0x14C scope:local +Refresh__9WColliderRCQ25UMath7Vector3fb = .text:0x802ED384; // type:function size:0x184 scope:global +PrepareRegion__9WColliderUi = .text:0x802ED508; // type:function size:0x120 scope:global +IsEmpty__C9WCollider = .text:0x802ED628; // type:function size:0x30 scope:global +Clear__9WCollider = .text:0x802ED658; // type:function size:0x44 scope:global +ClearLists__9WColliderUi = .text:0x802ED69C; // type:function size:0x244 scope:global +EmptyLists__9WColliderUi = .text:0x802ED8E0; // type:function size:0x2E4 scope:global +ReserveLists__9WColliderUi = .text:0x802EDBC4; // type:function size:0x74 scope:global +Validate__C9WCollider = .text:0x802EDC38; // type:function size:0x18 scope:global +GetUpdateMask__9WColliderRCQ25UMath7Vector3f = .text:0x802EDC50; // type:function size:0x74 scope:global +InRegion__C9WColliderRCQ25UMath7Vector3f = .text:0x802EDCC4; // type:function size:0x64 scope:global +InvalidateAllCachedData__9WCollider = .text:0x802EDD28; // type:function size:0x64 scope:global +MakeMatrix__C16WCollisionObjectRQ25UMath7Matrix4b = .text:0x802EDD8C; // type:function size:0xC0 scope:global +CalcSphericalRadius__C18WCollisionInstance = .text:0x802EDE4C; // type:function size:0x44 scope:global +CalcPosition__C18WCollisionInstanceRQ25UMath7Vector3 = .text:0x802EDE90; // type:function size:0xF4 scope:global +MakeMatrix__C18WCollisionInstanceRQ25UMath7Matrix4b = .text:0x802EDF84; // type:function size:0x114 scope:global +__16WCollisionAssets = .text:0x802EE098; // type:function size:0xDC scope:global +_._16WCollisionAssets = .text:0x802EE174; // type:function size:0x1D4 scope:global +Init__16WCollisionAssetsPC6UGroupPC5UData = .text:0x802EE348; // type:function size:0x18C scope:global +Shutdown__16WCollisionAssets = .text:0x802EE4D4; // type:function size:0x70 scope:global +SetExclusionFlags__16WCollisionAssetsP14WCollisionPack = .text:0x802EE544; // type:function size:0xE8 scope:global +SetExclusionFlags__16WCollisionAssets = .text:0x802EE62C; // type:function size:0x54 scope:global +AddPackLoadCallback__16WCollisionAssetsPFib_v = .text:0x802EE680; // type:function size:0x24 scope:global +RemovePackLoadCallback__16WCollisionAssetsPFib_v = .text:0x802EE6A4; // type:function size:0x6C scope:global +LoadCollisionPack__16WCollisionAssetsP6bChunk = .text:0x802EE710; // type:function size:0xEC scope:global +UnLoadCollisionPack__16WCollisionAssetsP6bChunk = .text:0x802EE7FC; // type:function size:0xC0 scope:global +Instance__C16WCollisionAssetsUi = .text:0x802EE8BC; // type:function size:0x50 scope:global +Object__C16WCollisionAssetsUi = .text:0x802EE90C; // type:function size:0x118 scope:global +AddObject__16WCollisionAssetsP16WCollisionObject = .text:0x802EEA24; // type:function size:0xE4 scope:global +CreateObject__16WCollisionAssetsRCQ25UMath7Vector3RCQ25UMath7Matrix4b = .text:0x802EEB08; // type:function size:0x2AC scope:global +Trigger__C16WCollisionAssetsUi = .text:0x802EEDB4; // type:function size:0x8 scope:global +AddTrigger__16WCollisionAssetsP8WTrigger = .text:0x802EEDBC; // type:function size:0x2C scope:global +RemoveTrigger__16WCollisionAssetsP8WTrigger = .text:0x802EEDE8; // type:function size:0x88 scope:global +__14WCollisionPackP6bChunk = .text:0x802EEE70; // type:function size:0x54 scope:global +_._14WCollisionPack = .text:0x802EEEC4; // type:function size:0x58 scope:global +Init__14WCollisionPackP6bChunk = .text:0x802EEF1C; // type:function size:0xC4 scope:global +DeInit__14WCollisionPack = .text:0x802EEFE0; // type:function size:0x1C scope:global +Resolve__17WCollisionArticle = .text:0x802EEFFC; // type:function size:0x88 scope:global +Resolve__14WCollisionPackPC6UGroupUi = .text:0x802EF084; // type:function size:0x1EC scope:global +Instance__C14WCollisionPackUs = .text:0x802EF270; // type:function size:0x10 scope:global +Object__C14WCollisionPackUs = .text:0x802EF280; // type:function size:0x10 scope:global +FindFaceInTriStrip__13WCollisionMgrRCQ25UMath7Vector3PC21WCollisionStripSpherePC15WCollisionStripR13WCollisionTri = .text:0x802EF290; // type:function size:0x8EC scope:global +CalcCollisionFaceNormal__FPQ25UMath7Vector3PQ25UMath7Vector4 = .text:0x802EFB7C; // type:function size:0x134 scope:local +FindFaceInTriStrip__13WCollisionMgrRCQ25UMath7Matrix4RCQ25UMath7Vector3PC21WCollisionStripSpherePC15WCollisionStripRfR13WCollisionTri = .text:0x802EFCB0; // type:function size:0x6B4 scope:global +FindFaceInCInst__13WCollisionMgrRCQ25UMath7Vector3RC18WCollisionInstanceR13WCollisionTriRf = .text:0x802F0364; // type:function size:0x4B4 scope:global +FindFaceInCInst__13WCollisionMgrRCQ25UMath7Matrix4RCQ25UMath7Vector3RC18WCollisionInstanceR13WCollisionTriRf = .text:0x802F0818; // type:function size:0x59C scope:global +GetWorldHeightAtPoint__13WCollisionMgrRCQ25UMath7Vector3RfPQ25UMath7Vector3 = .text:0x802F0DB4; // type:function size:0x228 scope:global +GetWorldHeightAtPointRigorous__13WCollisionMgrRCQ25UMath7Vector3RfPQ25UMath7Vector3 = .text:0x802F0FDC; // type:function size:0x1DC scope:global +__tcf_0 = .text:0x802F11B8; // type:function size:0x4 scope:local +CheckHitWorld__13WCollisionMgrPCQ25UMath7Vector4RQ213WCollisionMgr18WorldCollisionInfoUi = .text:0x802F11BC; // type:function size:0x644 scope:global +__tcf_1 = .text:0x802F1800; // type:function size:0x4 scope:local +GetWorldNormal__13WCollisionMgrPC27WCollisionInstanceCacheListPC21WCollisionBarrierListPCQ25UMath7Vector4RQ213WCollisionMgr18WorldCollisionInfo = .text:0x802F1804; // type:function size:0x404 scope:global +ClosestCollisionInfo__13WCollisionMgrPCQ25UMath7Vector4RCQ213WCollisionMgr18WorldCollisionInfoT2RQ213WCollisionMgr18WorldCollisionInfo = .text:0x802F1C08; // type:function size:0x1A8 scope:global +GetInstanceListGuts__13WCollisionMgrRCQ23UTLt6Vector2ZUii16R27WCollisionInstanceCacheListRCQ25UMath7Vector3fb = .text:0x802F1DB0; // type:function size:0x430 scope:global +GetInstanceList__13WCollisionMgrR27WCollisionInstanceCacheListRCQ25UMath7Vector3fb = .text:0x802F21E0; // type:function size:0x23C scope:global +GetInstanceListGuts__13WCollisionMgrRCQ23UTLt6Vector2ZUii16R27WCollisionInstanceCacheListPCQ25UMath7Vector4 = .text:0x802F241C; // type:function size:0x644 scope:global +GetInstanceList__13WCollisionMgrR27WCollisionInstanceCacheListPCQ25UMath7Vector4 = .text:0x802F2A60; // type:function size:0x220 scope:global +GetObjectListGuts__13WCollisionMgrRCQ23UTLt6Vector2ZUii16R20WCollisionObjectListRCQ25UMath7Vector3f = .text:0x802F2C80; // type:function size:0x3B0 scope:global +GetObjectList__13WCollisionMgrR20WCollisionObjectListRCQ25UMath7Vector3f = .text:0x802F3030; // type:function size:0x240 scope:global +BuildGeomFromWorldObb__13WCollisionMgrRC16WCollisionObjectfRQ38Dynamics9Collision8GeometryRQ25UMath7Vector3R8WSurface = .text:0x802F3270; // type:function size:0x11C scope:global +Collide__13WCollisionMgrPQ38Dynamics9Collision8GeometryPC21WCollisionBarrierListPQ213WCollisionMgr17ICollisionHandlerPvb = .text:0x802F338C; // type:function size:0x580 scope:global +Collide__13WCollisionMgrPQ38Dynamics9Collision8GeometryPC27WCollisionInstanceCacheListPQ213WCollisionMgr17ICollisionHandlerPv = .text:0x802F390C; // type:function size:0x3B0 scope:global +GetClosestIntersectingBarrier__13WCollisionMgrRC21WCollisionBarrierListPCQ25UMath7Vector4RQ213WCollisionMgr18WorldCollisionInfo = .text:0x802F3CBC; // type:function size:0x1B0 scope:global +GetBarrierNormal__13WCollisionMgrRC27WCollisionInstanceCacheListPCQ25UMath7Vector4RQ213WCollisionMgr18WorldCollisionInfo = .text:0x802F3E6C; // type:function size:0x3D0 scope:global +GetBarrierList__13WCollisionMgrR21WCollisionBarrierListRC27WCollisionInstanceCacheListRCQ25UMath7Vector3f = .text:0x802F423C; // type:function size:0x9A4 scope:global +GetBarrierNormal__13WCollisionMgrRC21WCollisionBarrierListPCQ25UMath7Vector4RQ213WCollisionMgr18WorldCollisionInfo = .text:0x802F4BE0; // type:function size:0xF0 scope:global +GetTriList__13WCollisionMgrRC27WCollisionInstanceCacheListRCQ25UMath7Vector3fR17WCollisionTriList = .text:0x802F4CD0; // type:function size:0xB94 scope:global +__5WGridRCQ25UMath7Vector4UiUif = .text:0x802F5864; // type:function size:0xB4 scope:global +_._5WGrid = .text:0x802F5918; // type:function size:0x44 scope:global +Init__5WGridPC6UGroup = .text:0x802F595C; // type:function size:0x230 scope:global +Shutdown__5WGrid = .text:0x802F5B8C; // type:function size:0x110 scope:global +FindNodes__C5WGridRCQ25UMath7Vector3fRQ23UTLt6Vector2ZUii16 = .text:0x802F5C9C; // type:function size:0x5C scope:global +FindNodesBox__C5WGridPCQ25UMath7Vector4RQ23UTLt6Vector2ZUii16 = .text:0x802F5CF8; // type:function size:0x300 scope:global +FindNodes__C5WGridPCQ25UMath7Vector4RQ23UTLt6Vector2ZUii16 = .text:0x802F5FF8; // type:function size:0xD80 scope:global +__23WGridManagedDynamicElemPQ25UMath7Vector4PCQ25UMath7Vector4RC13WGridNodeElem = .text:0x802F6D78; // type:function size:0x78 scope:global +Update__23WGridManagedDynamicElem = .text:0x802F6DF0; // type:function size:0x41C scope:global +AddElem__23WGridManagedDynamicElemPCQ25UMath7Vector4T118WGridNode_ElemTypeUi = .text:0x802F720C; // type:function size:0x4DC scope:global +UpdateElems__23WGridManagedDynamicElem = .text:0x802F76E8; // type:function size:0x74 scope:global +TotalSize__C9WGridNode = .text:0x802F775C; // type:function size:0x28 scope:global +__11AStarSearchP8WRoadNavPCQ25UMath7Vector3T2PCc = .text:0x802F7784; // type:function size:0x4E8 scope:global +_._11AStarSearch = .text:0x802F7C6C; // type:function size:0xC0 scope:global +IsGoal__11AStarSearchP9AStarNode = .text:0x802F7D2C; // type:function size:0x48 scope:global +FindOpenNode__11AStarSearchPC9WRoadNodei = .text:0x802F7D74; // type:function size:0x48 scope:global +FindClosedNode__11AStarSearchPC9WRoadNodei = .text:0x802F7DBC; // type:function size:0x48 scope:global +AStarCheckFlip__11AStarSearchP9AStarNodeT1 = .text:0x802F7E04; // type:function size:0xB4 scope:global +Admissible__11AStarSearchPC12WRoadSegmentbQ28WRoadNav9EPathType = .text:0x802F7EB8; // type:function size:0x1D0 scope:global +Service__11AStarSearchf = .text:0x802F8088; // type:function size:0x80C scope:global +__10PathFinder = .text:0x802F8894; // type:function size:0xF8 scope:global +_._10PathFinder = .text:0x802F898C; // type:function size:0x158 scope:global +Construct__10PathFinderGQ23Sim5Param = .text:0x802F8AE4; // type:function size:0x64 scope:global +Service__10PathFinderf = .text:0x802F8B48; // type:function size:0xC4 scope:global +ServiceAll__10PathFinder = .text:0x802F8C0C; // type:function size:0x4C scope:global +OnTask__10PathFinderP10HSIMTASK__f = .text:0x802F8C58; // type:function size:0x44 scope:global +Cancel__10PathFinderP8WRoadNav = .text:0x802F8C9C; // type:function size:0x80 scope:global +Pending__10PathFinderP8WRoadNav = .text:0x802F8D1C; // type:function size:0x2C scope:global +Submit__10PathFinderP8WRoadNavPCQ25UMath7Vector3T2PCc = .text:0x802F8D48; // type:function size:0xA4 scope:global +Init__12WRoadNetwork = .text:0x802F8DEC; // type:function size:0x380 scope:global +Shutdown__12WRoadNetwork = .text:0x802F916C; // type:function size:0x50 scope:global +SegmentCrossesBarrier__12WRoadNetworkP12WRoadSegmentP16TrackPathBarrier = .text:0x802F91BC; // type:function size:0x20C scope:global +ResetRaceSegments__12WRoadNetwork = .text:0x802F93C8; // type:function size:0x4C scope:global +FlagSegmentRaceDirection__12WRoadNetworkii = .text:0x802F9414; // type:function size:0x88 scope:global +AddRaceSegments__12WRoadNetworkP8WRoadNav = .text:0x802F949C; // type:function size:0xA4 scope:global +ResetShortcuts__12WRoadNetwork = .text:0x802F9540; // type:function size:0x84 scope:global +FirstShortcutInPath__8WRoadNav = .text:0x802F95C4; // type:function size:0x74 scope:global +ResolveShortcuts__12WRoadNetwork = .text:0x802F9638; // type:function size:0x16C scope:global +ResetBarriers__12WRoadNetwork = .text:0x802F97A4; // type:function size:0x44 scope:global +ResolveBarriers__12WRoadNetwork = .text:0x802F97E8; // type:function size:0x5D0 scope:global +GetSegmentNodes__12WRoadNetworkRC12WRoadSegmentPPC9WRoadNode = .text:0x802F9DB8; // type:function size:0x30 scope:global +GetSegmentProfile__12WRoadNetworkRC12WRoadSegmenti = .text:0x802F9DE8; // type:function size:0x48 scope:global +GetSegmentProfiles__12WRoadNetworkRC12WRoadSegmentPPC12WRoadProfile = .text:0x802F9E30; // type:function size:0x98 scope:global +GetSegmentTrafficLaneRightSide__12WRoadNetworkRC12WRoadSegmenti = .text:0x802F9EC8; // type:function size:0x50 scope:global +GetSegmentTrafficLaneInd__12WRoadNetworkRC12WRoadSegmenti = .text:0x802F9F18; // type:function size:0x90 scope:global +GetSegmentNumTrafficLanes__12WRoadNetworkRC12WRoadSegment = .text:0x802F9FA8; // type:function size:0xE0 scope:global +GetSegmentForwardVector__12WRoadNetworkiRQ25UMath7Vector3 = .text:0x802FA088; // type:function size:0x38 scope:global +GetSegmentForwardVector__12WRoadNetworkRC12WRoadSegmentRQ25UMath7Vector3 = .text:0x802FA0C0; // type:function size:0xB0 scope:global +GetSegmentEndPoints__12WRoadNetworkRC12WRoadSegmentRQ25UMath7Vector3T2 = .text:0x802FA170; // type:function size:0x78 scope:global +GetSegmentOppNode__12WRoadNetworkiPC9WRoadNode = .text:0x802FA1E8; // type:function size:0x38 scope:global +GetSegmentOppNode__12WRoadNetworkRC12WRoadSegmentPC9WRoadNode = .text:0x802FA220; // type:function size:0x4C scope:global +GetPointOnSegment__12WRoadNetworkRC12WRoadSegmentfRQ25UMath7Vector3 = .text:0x802FA26C; // type:function size:0xA8 scope:global +GetPointOnSegment__12WRoadNetworkRCQ25UMath7Vector3T1RC12WRoadSegmentfRQ25UMath7Vector3 = .text:0x802FA314; // type:function size:0x6C scope:global +BuildSegmentSpline__12WRoadNetworkRC12WRoadSegmentR7USpline = .text:0x802FA380; // type:function size:0x2B0 scope:global +__tcf_2 = .text:0x802FA630; // type:function size:0x2C scope:local +GetPointAndVecOnSegment__12WRoadNetworkRC12WRoadSegmentfRQ25UMath7Vector3T3 = .text:0x802FA65C; // type:function size:0xD8 scope:global +GetSegmentPointIntersect__12WRoadNetworkRC12WRoadSegmentRCQ25UMath7Vector3RQ25UMath7Vector3b = .text:0x802FA734; // type:function size:0x9C scope:global +GetLinePointIntersect__12WRoadNetworkRCQ25UMath7Vector3N21RQ25UMath7Vector3b = .text:0x802FA7D0; // type:function size:0x188 scope:global +__tcf_4 = .text:0x802FA958; // type:function size:0x2C scope:local +GetSegmentCurveStep__12WRoadNetworkRCQ25UMath7Vector3T1RC12WRoadSegmentfRQ25UMath7Vector3 = .text:0x802FA984; // type:function size:0x308 scope:global +__8WRoadNav = .text:0x802FAC8C; // type:function size:0x94 scope:global +_._8WRoadNav = .text:0x802FAD20; // type:function size:0xC0 scope:global +SetCookieTrail__8WRoadNavPt11CookieTrail2Z9NavCookiei32 = .text:0x802FADE0; // type:function size:0x1C scope:global +SetCookieTrail__8WRoadNavb = .text:0x802FADFC; // type:function size:0x60 scope:global +ClearCookieTrail__8WRoadNav = .text:0x802FAE5C; // type:function size:0x28 scope:global +ResetCookieTrail__8WRoadNav = .text:0x802FAE84; // type:function size:0x3C scope:global +MaybeAllocatePathSegments__8WRoadNav = .text:0x802FAEC0; // type:function size:0x40 scope:global +SetPathType__8WRoadNavQ28WRoadNav9EPathType = .text:0x802FAF00; // type:function size:0x8 scope:global +Reset__8WRoadNav = .text:0x802FAF08; // type:function size:0x214 scope:global +OnPath__C8WRoadNav = .text:0x802FB11C; // type:function size:0x13C scope:global +GetNextOffset__8WRoadNavRCQ25UMath7Vector3RfRcRb = .text:0x802FB258; // type:function size:0x6E4 scope:global +SnapToSelectableLane__8WRoadNav = .text:0x802FB93C; // type:function size:0x40 scope:global +SnapToSelectableLane__8WRoadNavf = .text:0x802FB97C; // type:function size:0x30 scope:global +SnapToSelectableLane__8WRoadNavfic = .text:0x802FB9AC; // type:function size:0x814 scope:global +Reverse__8WRoadNav = .text:0x802FC1C0; // type:function size:0xEC scope:global +GetNumTrafficLanes__C12WRoadProfileb = .text:0x802FC2AC; // type:function size:0xB8 scope:global +GetNthTrafficLane__C12WRoadProfileib = .text:0x802FC364; // type:function size:0x124 scope:global +GetNthTrafficLaneFromCurb__C12WRoadProfileib = .text:0x802FC488; // type:function size:0x11C scope:global +GetRightMostTrafficEntrance__12WRoadNetworkii = .text:0x802FC5A4; // type:function size:0x44C scope:global +PullOver__8WRoadNav = .text:0x802FC9F0; // type:function size:0x2E0 scope:global +GetNextTraffic__8WRoadNavRCQ25UMath7Vector3RfRcRb = .text:0x802FCCD0; // type:function size:0x974 scope:global +RebuildSplines__8WRoadNavPC12WRoadSegment = .text:0x802FD644; // type:function size:0x88 scope:global +EvaluateSplines__8WRoadNavPC12WRoadSegment = .text:0x802FD6CC; // type:function size:0x1A4 scope:global +UpdateCookieTrail__8WRoadNavf = .text:0x802FD870; // type:function size:0x420 scope:global +IncNavPosition__8WRoadNavfRCQ25UMath7Vector3f = .text:0x802FDC90; // type:function size:0x140 scope:global +PrivateIncNavPosition__8WRoadNavfRCQ25UMath7Vector3 = .text:0x802FDDD0; // type:function size:0x4FC scope:global +ClosestCookieAhead__8WRoadNavRCQ25UMath7Vector3P9NavCookie = .text:0x802FE2CC; // type:function size:0x30 scope:global +ClosestCookieAhead__8WRoadNavRCQ25UMath7Vector3P9NavCookieiT2 = .text:0x802FE2FC; // type:function size:0x174 scope:global +CookieCutter__8WRoadNavR9NavCookieRCQ25UMath7Vector3fbUi = .text:0x802FE470; // type:function size:0x140 scope:global +ClampCookieCentres__8WRoadNavP9NavCookiei = .text:0x802FE5B0; // type:function size:0x7C scope:global +TimeToClosestApproach__FRCQ25UMath7Vector3N30Pf = .text:0x802FE62C; // type:function size:0x160 scope:local +FetchAvoidables__C8WRoadNavPP5IBodyi = .text:0x802FE78C; // type:function size:0x324 scope:global +HolePunchAvoidables__8WRoadNavP9NavCookieiff = .text:0x802FEAB0; // type:function size:0xBA4 scope:global +UpdateOccludedPosition__8WRoadNavb = .text:0x802FF654; // type:function size:0x1110 scope:global +FindClosestOnSpline__8WRoadNavRCQ25UMath7Vector3RQ25UMath7Vector3Rffi = .text:0x80300764; // type:function size:0x1D4 scope:global +FindClosestSegmentInd__8WRoadNavRCQ25UMath7Vector3T1fRQ25UMath7Vector3Rf = .text:0x80300938; // type:function size:0x9C4 scope:global +InitFromOtherNav__8WRoadNavP8WRoadNavb = .text:0x803012FC; // type:function size:0xE4 scope:global +InitLaneOffset__8WRoadNavRCQ25UMath7Vector3 = .text:0x803013E0; // type:function size:0x45C scope:global +InitAtSegment__8WRoadNavscf = .text:0x8030183C; // type:function size:0x330 scope:global +InitAtSegment__8WRoadNavsfRCQ25UMath7Vector3T3b = .text:0x80301B6C; // type:function size:0x220 scope:global +InitAtSegment__8WRoadNavsRCQ25UMath7Vector3T2b = .text:0x80301D8C; // type:function size:0xE8 scope:global +IsWrongWay__C8WRoadNav = .text:0x80301E74; // type:function size:0xAC scope:global +FindClosestOnPath__C8WRoadNavRCQ25UMath7Vector3PQ25UMath7Vector3T2PUsPf = .text:0x80301F20; // type:function size:0x314 scope:global +InitAtPath__8WRoadNavRCQ25UMath7Vector3b = .text:0x80302234; // type:function size:0x80 scope:global +InitAtPoint__8WRoadNavRCQ25UMath7Vector3T1bf = .text:0x803022B4; // type:function size:0x7C scope:global +SetControlPos__8WRoadNavRC12WRoadSegmentb = .text:0x80302330; // type:function size:0x3E8 scope:global +SetStartEndControls__8WRoadNavRC12WRoadSegment = .text:0x80302718; // type:function size:0x44 scope:global +IsDrivable__C8WRoadNavi = .text:0x8030275C; // type:function size:0x20 scope:global +IsSelectable__C8WRoadNavi = .text:0x8030277C; // type:function size:0x20 scope:global +DetermineVehicleHalfWidth__8WRoadNav = .text:0x8030279C; // type:function size:0x150 scope:global +SetVehicle__8WRoadNavP9AIVehicle = .text:0x803028EC; // type:function size:0x24 scope:global +SetBoundPos__8WRoadNavRC12WRoadSegmentfb = .text:0x80302910; // type:function size:0x738 scope:global +SetStartEndPos__8WRoadNavRC12WRoadSegmentff = .text:0x80303048; // type:function size:0x58 scope:global +ChangeLanes__8WRoadNavff = .text:0x803030A0; // type:function size:0xF8 scope:global +ChangeDragDecision__8WRoadNavi = .text:0x80303198; // type:function size:0x684 scope:global +IncLane__8WRoadNavi = .text:0x8030381C; // type:function size:0x3D0 scope:global +ChangeDragLanes__8WRoadNavi = .text:0x80303BEC; // type:function size:0x50C scope:global +UpdateLaneChange__8WRoadNavf = .text:0x803040F8; // type:function size:0x74 scope:global +GetRoadSpeechId__8WRoadNav = .text:0x8030416C; // type:function size:0xA4 scope:global +GetShortcutNumber__8WRoadNav = .text:0x80304210; // type:function size:0xF0 scope:global +IsOnLegalRoad__8WRoadNav = .text:0x80304300; // type:function size:0x9C scope:global +GetSegmentShortcutNumber__12WRoadNetworkPC12WRoadSegment = .text:0x8030439C; // type:function size:0x38 scope:global +MakeShortcutDecision__8WRoadNaviPUiT2 = .text:0x803043D4; // type:function size:0x1E4 scope:global +CancelPathFinding__8WRoadNav = .text:0x803045B8; // type:function size:0x54 scope:global +FindPath__8WRoadNavPCQ25UMath7Vector3T1Pc = .text:0x8030460C; // type:function size:0x8C scope:global +FindPathNow__8WRoadNavPCQ25UMath7Vector3T1Pc = .text:0x80304698; // type:function size:0x68 scope:global +FindingPath__8WRoadNav = .text:0x80304700; // type:function size:0x50 scope:global +GetPathDistanceRemaining__8WRoadNav = .text:0x80304750; // type:function size:0x154 scope:global +CanTrafficSpawn__8WRoadNav = .text:0x803048A4; // type:function size:0x1CC scope:global +CookieTrailCurvature__8WRoadNavRCQ25UMath7Vector3T1 = .text:0x80304A70; // type:function size:0x504 scope:global +IsPointInCookieTrail__8WRoadNavRCQ25UMath7Vector3f = .text:0x80304F74; // type:function size:0x178 scope:global +IsSegmentInCookieTrail__8WRoadNavib = .text:0x803050EC; // type:function size:0x9C scope:global +IsSegmentInPath__8WRoadNavi = .text:0x80305188; // type:function size:0x4C scope:global +GetAttachedDirectionalSegment__FPC9WRoadNodes = .text:0x803051D4; // type:function size:0x60 scope:global +__8WTrigger = .text:0x80305234; // type:function size:0x38 scope:global +__8WTriggerRCQ25UMath7Matrix4RCQ25UMath7Vector3PQ24CARP9EventListUi = .text:0x8030526C; // type:function size:0x11C scope:global +_._8WTrigger = .text:0x80305388; // type:function size:0x9C scope:global +FireEvents__8WTriggerP10HSIMABLE__ = .text:0x80305424; // type:function size:0xDC scope:global +HasEvent__C8WTriggerUiPPCQ24CARP15EventStaticData = .text:0x80305500; // type:function size:0x34 scope:global +TestDirection__C8WTriggerRCQ25UMath7Vector3 = .text:0x80305534; // type:function size:0x3C scope:global +UpdateBox__8WTriggerRCQ25UMath7Matrix4RCQ25UMath7Vector3 = .text:0x80305570; // type:function size:0x19C scope:global +UpdatePos__8WTriggerRCQ25UMath7Vector3Ui = .text:0x8030570C; // type:function size:0x80 scope:global +__15WTriggerManager = .text:0x8030578C; // type:function size:0x5C scope:global +_._15WTriggerManager = .text:0x803057E8; // type:function size:0x68 scope:global +Init__15WTriggerManager = .text:0x80305850; // type:function size:0xBC scope:global +Restart__15WTriggerManager = .text:0x8030590C; // type:function size:0x78 scope:global +SubmitForFire__15WTriggerManagerR8WTriggerP10HSIMABLE__ = .text:0x80305984; // type:function size:0x104 scope:global +ProcessRB__15WTriggerManagerP10IRigidBodyf = .text:0x80305A88; // type:function size:0x534 scope:global +ProcessSRB__15WTriggerManagerP10IRigidBodyf = .text:0x80305FBC; // type:function size:0x590 scope:global +CheckCollideRB__C15WTriggerManagerPC10IRigidBodyPC8WTriggerf = .text:0x8030654C; // type:function size:0x3C8 scope:global +CheckCollideSRB__C15WTriggerManagerPC10IRigidBodyPC8WTriggerf = .text:0x80306914; // type:function size:0x414 scope:global +GetIntersectingTriggers__C15WTriggerManagerRCQ25UMath7Vector3fP12WTriggerList = .text:0x80306D28; // type:function size:0x570 scope:global +DeleteRefs__15WTriggerManagerPC8WTrigger = .text:0x80307298; // type:function size:0xE4 scope:global +ClearAllFireOnExit__15WTriggerManager = .text:0x8030737C; // type:function size:0x6C scope:global +Update__15WTriggerManagerf = .text:0x803073E8; // type:function size:0x230 scope:global +LoaderTrigger__FP6bChunk = .text:0x80307618; // type:function size:0x8 scope:global +UnloaderTrigger__FP6bChunk = .text:0x80307620; // type:function size:0x8 scope:global +__6WWorld = .text:0x80307628; // type:function size:0x60 scope:global +Init__6WWorld = .text:0x80307688; // type:function size:0x58 scope:global +Loader__6WWorldP6bChunk = .text:0x803076E0; // type:function size:0x64 scope:global +Unloader__6WWorldP6bChunk = .text:0x80307744; // type:function size:0x34 scope:global +LoaderCarpWGrid__FP6bChunk = .text:0x80307778; // type:function size:0x2C scope:global +UnloaderCarpWGrid__FP6bChunk = .text:0x803077A4; // type:function size:0x2C scope:global +Open__6WWorld = .text:0x803077D0; // type:function size:0xF4 scope:global +Close__6WWorld = .text:0x803078C4; // type:function size:0x20 scope:global +SegmentIntersect__10WWorldMathPCQ25UMath7Vector4T1PQ25UMath7Vector4 = .text:0x803078E4; // type:function size:0x11C scope:global +IntersectCircle__10WWorldMathfffffffRfT8 = .text:0x80307A00; // type:function size:0x18C scope:global +NearestPointLine2D__10WWorldMathRCQ25UMath7Vector4PCQ25UMath7Vector4RQ25UMath7Vector4 = .text:0x80307B8C; // type:function size:0xA0 scope:global +NearestPointLine2D3__10WWorldMathRCQ25UMath7Vector3N21RQ25UMath7Vector3 = .text:0x80307C2C; // type:function size:0x9C scope:global +GetPlaneY__10WWorldMathRCQ25UMath7Vector3N21 = .text:0x80307CC8; // type:function size:0x54 scope:global +IntersectSegPlane__10WWorldMathRCQ25UMath7Vector3N31RQ25UMath7Vector3Rf = .text:0x80307D1C; // type:function size:0xF0 scope:global +MakeSegSpaceMatrix__10WWorldMathRCQ25UMath7Vector3T1RQ25UMath7Matrix4 = .text:0x80307E0C; // type:function size:0x234 scope:global +InitSystem__8WSurface = .text:0x80308040; // type:function size:0x4 scope:global +FindClosestFace__9WWorldPosPC9WColliderRCQ25UMath7Vector3b = .text:0x80308044; // type:function size:0x3C scope:global +FindClosestFace__9WWorldPosRCQ25UMath7Vector3b = .text:0x80308080; // type:function size:0x2C scope:global +FindClosestFaceInternal__9WWorldPosPC27WCollisionInstanceCacheListRCQ25UMath7Vector3b = .text:0x803080AC; // type:function size:0x228 scope:global +FindClosestFaceInternal__9WWorldPosRC27WCollisionInstanceCacheListRCQ25UMath7Vector3 = .text:0x803082D4; // type:function size:0x28C scope:global +FindClosestFace__9WWorldPosRC17WCollisionTriListRCQ25UMath7Vector3b = .text:0x80308560; // type:function size:0x4CC scope:global +FindClosestFace__9WWorldPosRC27WCollisionInstanceCacheListRCQ25UMath7Vector3T2 = .text:0x80308A2C; // type:function size:0x160 scope:global +Update__9WWorldPosRCQ25UMath7Vector3RQ25UMath7Vector4bPC9WColliderT3 = .text:0x80308B8C; // type:function size:0x214 scope:global +HeightAtPoint__C9WWorldPosRCQ25UMath7Vector3 = .text:0x80308DA0; // type:function size:0x180 scope:global +FindSurface__9WWorldPosRC17WCollisionArticle = .text:0x80308F20; // type:function size:0x28 scope:global +__Q29WorldConn6Server = .text:0x80308F48; // type:function size:0x3C scope:global +_._Q29WorldConn6Server = .text:0x80308F84; // type:function size:0xB8 scope:global +LockID__Q29WorldConn6ServerUi = .text:0x8030903C; // type:function size:0x1B4 scope:global +UnlockID__Q29WorldConn6ServerUi = .text:0x803091F0; // type:function size:0x114 scope:global +__Q29WorldConn9ReferenceUi = .text:0x80309304; // type:function size:0x50 scope:global +_._Q29WorldConn9Reference = .text:0x80309354; // type:function size:0x50 scope:global +Set__Q29WorldConn9ReferenceUi = .text:0x803093A4; // type:function size:0x48 scope:global +Lock__Q29WorldConn9Reference = .text:0x803093EC; // type:function size:0x60 scope:global +Unlock__Q29WorldConn9Reference = .text:0x8030944C; // type:function size:0x5C scope:global +World_UpdateBody__FPQ23Sim6Packet = .text:0x803094A8; // type:function size:0x50 scope:global +Construct__13WorldBodyConnRCQ23Sim14ConnectionData = .text:0x803094F8; // type:function size:0x44 scope:global +__13WorldBodyConnRCQ23Sim14ConnectionData = .text:0x8030953C; // type:function size:0x94 scope:global +_._13WorldBodyConn = .text:0x803095D0; // type:function size:0x8C scope:global +Update__13WorldBodyConnf = .text:0x8030965C; // type:function size:0x1B8 scope:global +FetchData__13WorldBodyConnf = .text:0x80309814; // type:function size:0xA0 scope:global +ChooseAudioAttributes__FRCQ36Attrib3Gen7effectsPC8bMatrix4PC8bVector3 = .text:0x803098B4; // type:function size:0x1C4 scope:local +Construct__15WorldEffectConnRCQ23Sim14ConnectionData = .text:0x80309A78; // type:function size:0x4C scope:global +HandleWorldEffectEmitterGroupDelete__FPvP12EmitterGroup = .text:0x80309AC4; // type:function size:0xC scope:global +__15WorldEffectConnRCQ23Sim14ConnectionDataPCQ29WorldConn15Pkt_Effect_Open = .text:0x80309AD0; // type:function size:0x1C4 scope:global +_._15WorldEffectConn = .text:0x80309C94; // type:function size:0xE4 scope:global +Update__15WorldEffectConnf = .text:0x80309D78; // type:function size:0x850 scope:global +FetchData__15WorldEffectConnf = .text:0x8030A5C8; // type:function size:0xA0 scope:global +World_OneShotEffect__FPQ23Sim6Packet = .text:0x8030A668; // type:function size:0x920 scope:global +UpdateServices__9WorldConnf = .text:0x8030AF88; // type:function size:0x34 scope:global +InitServices__9WorldConnv = .text:0x8030AFBC; // type:function size:0x44 scope:global +RestoreServices__9WorldConnv = .text:0x8030B000; // type:function size:0x58 scope:global +GetSystemName__10DamageZoneQ210DamageZone2ID = .text:0x8030B058; // type:function size:0x38 scope:global +GetDamageStimulus__10DamageZoneUi = .text:0x8030B090; // type:function size:0x1C scope:global +GetImpactStimulus__10DamageZoneUi = .text:0x8030B0AC; // type:function size:0x1C scope:global +GetTimeOfDaySuffix__F10eTimeOfDay = .text:0x8030B0C8; // type:function size:0x34 scope:global +NeedsSeperateTODStreamingFile__FPCc = .text:0x8030B0FC; // type:function size:0x60 scope:global +GetCurrentTimeOfDay__Fv = .text:0x8030B15C; // type:function size:0xC scope:global +TickOverTimeOfday__Fv = .text:0x8030B168; // type:function size:0x4 scope:global +ApplyTimeOfDayTickOver__Fv = .text:0x8030B16C; // type:function size:0x30 scope:global +SetCurrentTimeOfDay__Ff = .text:0x8030B19C; // type:function size:0x4 scope:global +find__H2ZPP9WColliderZP9WCollider_4_STLX01X01RCX11_X01 = .text:0x8030B1A0; // type:function size:0xB0 scope:global +_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP9WColliderZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP9WColliderZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP9WColliderZ9_type_mapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZP9WColliderT1 = .text:0x8030B250; // type:function size:0x13C scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP9WColliderZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP9WColliderZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP9WColliderZ9_type_mapRCQ24_STLt4pair2ZCUiZP9WCollider = .text:0x8030B38C; // type:function size:0x118 scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP9WColliderZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP9WColliderZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP9WColliderZ9_type_mapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZP9WColliderZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZP9WColliderRCQ24_STLt4pair2ZCUiZP9WCollider = .text:0x8030B4A4; // type:function size:0x26C scope:global +reserve__Q24_STLt6vector2Z26WCollisionBarrierListEntryZQ33UTL3Stdt9Allocator2Z26WCollisionBarrierListEntryZ22_type_WCollisionVectorUi = .text:0x8030B710; // type:function size:0x1DC scope:global +_M_fill_insert__Q24_STLt6vector2ZPC18WCollisionInstanceZQ33UTL3Stdt9Allocator2ZPC18WCollisionInstanceZ26_type_WCollisionWarnVectorPPC18WCollisionInstanceUiRCPC18WCollisionInstance = .text:0x8030B8EC; // type:function size:0x270 scope:global +_M_fill_insert__Q24_STLt6vector2Z26WCollisionBarrierListEntryZQ33UTL3Stdt9Allocator2Z26WCollisionBarrierListEntryZ22_type_WCollisionVectorP26WCollisionBarrierListEntryUiRC26WCollisionBarrierListEntry = .text:0x8030BB5C; // type:function size:0x7AC scope:global +_M_fill_insert__Q24_STLt6vector2ZPC16WCollisionObjectZQ33UTL3Stdt9Allocator2ZPC16WCollisionObjectZ22_type_WCollisionVectorPPC16WCollisionObjectUiRCPC16WCollisionObject = .text:0x8030C308; // type:function size:0x270 scope:global +reserve__Q24_STLt6vector2ZPC18WCollisionInstanceZQ33UTL3Stdt9Allocator2ZPC18WCollisionInstanceZ26_type_WCollisionWarnVectorUi = .text:0x8030C578; // type:function size:0x11C scope:global +reserve__Q24_STLt6vector2ZPC16WCollisionObjectZQ33UTL3Stdt9Allocator2ZPC16WCollisionObjectZ22_type_WCollisionVectorUi = .text:0x8030C694; // type:function size:0x11C scope:global +_M_erase__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP24ManagedCollisionInstanceZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP24ManagedCollisionInstanceZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP24ManagedCollisionInstanceZ9_type_mapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCUiZP24ManagedCollisionInstance = .text:0x8030C7B0; // type:function size:0x68 scope:global +_M_erase__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP16WCollisionObjectZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP16WCollisionObjectZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP16WCollisionObjectZ9_type_mapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCUiZP16WCollisionObject = .text:0x8030C818; // type:function size:0x68 scope:global +_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP16WCollisionObjectZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP16WCollisionObjectZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP16WCollisionObjectZ9_type_mapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZP16WCollisionObjectT1 = .text:0x8030C880; // type:function size:0x13C scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP16WCollisionObjectZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP16WCollisionObjectZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP16WCollisionObjectZ9_type_mapRCQ24_STLt4pair2ZCUiZP16WCollisionObject = .text:0x8030C9BC; // type:function size:0x118 scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZP16WCollisionObjectZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZP16WCollisionObjectZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZP16WCollisionObjectZ9_type_mapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZP16WCollisionObjectZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZP16WCollisionObjectRCQ24_STLt4pair2ZCUiZP16WCollisionObject = .text:0x8030CAD4; // type:function size:0x26C scope:global +__upper_bound__H4ZP26WCollisionBarrierListEntryZ26WCollisionBarrierListEntryZQ24_STLt4less1Z26WCollisionBarrierListEntryZi_4_STLX01X01RCX11X21PX31_X01 = .text:0x8030CD40; // type:function size:0x58 scope:global +AddSorted__t6bTList1Z9AStarNodePFP9AStarNodeP9AStarNode_iP9AStarNode = .text:0x8030CD98; // type:function size:0x90 scope:global +_M_erase__Q24_STLt8_Rb_tree5ZUsZUsZQ24_STLt9_Identity1ZUsZQ24_STLt4less1ZUsZQ33UTL3Stdt9Allocator2ZUsZ9_type_setPQ24_STLt13_Rb_tree_node1ZUs = .text:0x8030CE28; // type:function size:0x68 scope:global +_M_insert__Q24_STLt8_Rb_tree5ZUsZUsZQ24_STLt9_Identity1ZUsZQ24_STLt4less1ZUsZQ33UTL3Stdt9Allocator2ZUsZ9_type_setPQ24_STL18_Rb_tree_node_baseT1RCUsT1 = .text:0x8030CE90; // type:function size:0x12C scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUsZUsZQ24_STLt9_Identity1ZUsZQ24_STLt4less1ZUsZQ33UTL3Stdt9Allocator2ZUsZ9_type_setRCUs = .text:0x8030CFBC; // type:function size:0x118 scope:global +_M_erase__Q24_STLt8_Rb_tree5Z13FireOnExitRecZ13FireOnExitRecZQ24_STLt9_Identity1Z13FireOnExitRecZQ24_STLt4less1Z13FireOnExitRecZQ24_STLt9allocator1Z13FireOnExitRecPQ24_STLt13_Rb_tree_node1Z13FireOnExitRec = .text:0x8030D0D4; // type:function size:0x6C scope:global +_M_insert__Q24_STLt8_Rb_tree5Z13FireOnExitRecZ13FireOnExitRecZQ24_STLt9_Identity1Z13FireOnExitRecZQ24_STLt4less1Z13FireOnExitRecZQ24_STLt9allocator1Z13FireOnExitRecPQ24_STL18_Rb_tree_node_baseT1RC13FireOnExitRecT1 = .text:0x8030D140; // type:function size:0x164 scope:global +insert_unique__Q24_STLt8_Rb_tree5Z13FireOnExitRecZ13FireOnExitRecZQ24_STLt9_Identity1Z13FireOnExitRecZQ24_STLt4less1Z13FireOnExitRecZQ24_STLt9allocator1Z13FireOnExitRecRC13FireOnExitRec = .text:0x8030D2A4; // type:function size:0x150 scope:global +_M_erase__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4BodyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4BodyZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZPQ39WorldConn6Server4BodyZ24_type_WorldConnServerMapPQ24_STLt13_Rb_tree_node1ZQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4Body = .text:0x8030D3F4; // type:function size:0x68 scope:global +_M_insert__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4BodyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4BodyZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZPQ39WorldConn6Server4BodyZ24_type_WorldConnServerMapPQ24_STL18_Rb_tree_node_baseT1RCQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4BodyT1 = .text:0x8030D45C; // type:function size:0x13C scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4BodyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4BodyZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZPQ39WorldConn6Server4BodyZ24_type_WorldConnServerMapRCQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4Body = .text:0x8030D598; // type:function size:0x118 scope:global +insert_unique__Q24_STLt8_Rb_tree5ZUiZQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4BodyZQ24_STLt10_Select1st1ZQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4BodyZQ24_STLt4less1ZUiZQ33UTL3Stdt9Allocator2ZPQ39WorldConn6Server4BodyZ24_type_WorldConnServerMapGQ24_STLt17_Rb_tree_iterator2ZQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4BodyZQ24_STLt16_Nonconst_traits1ZQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4BodyRCQ24_STLt4pair2ZCUiZPQ39WorldConn6Server4Body = .text:0x8030D6B0; // type:function size:0x26C scope:global +__Q33UTL3Stdt3map3ZUiZP9WColliderZ9_type_map = .text:0x8030D91C; // type:function size:0x74 scope:global +__static_initialization_and_destruction_0 = .text:0x8030D990; // type:function size:0x5C0 scope:local +clear_all__17WCollisionTriList = .text:0x8030DF50; // type:function size:0x100 scope:global +ClassKey__Q36Attrib3Gen5world = .text:0x8030E050; // type:function size:0xC scope:global +push_back__Q23UTLt6Vector2ZP9WCollideri16RCP9WCollider = .text:0x8030E05C; // type:function size:0x154 scope:global +__Q33UTL3Stdt3map3ZUiZP24ManagedCollisionInstanceZ9_type_map = .text:0x8030E1B0; // type:function size:0x74 scope:global +__Q33UTL3Stdt3map3ZUiZP16WCollisionObjectZ9_type_map = .text:0x8030E224; // type:function size:0x74 scope:global +IsOccluded__C8WRoadNav = .text:0x8030E298; // type:function size:0x34 scope:global +__dl__9AStarNodePv = .text:0x8030E2CC; // type:function size:0x2C scope:global +_._Q24_STLt3set3ZUsZQ24_STLt4less1ZUsZQ33UTL3Stdt9Allocator2ZUsZ9_type_set = .text:0x8030E2F8; // type:function size:0x94 scope:global +__Q33UTL3Stdt3set2ZUsZ9_type_set = .text:0x8030E38C; // type:function size:0x74 scope:global +_._14FireOnExitList = .text:0x8030E400; // type:function size:0xB0 scope:global +__14FireOnExitList = .text:0x8030E4B0; // type:function size:0x78 scope:global +_._Q29WorldConn16Pkt_Body_Service = .text:0x8030E528; // type:function size:0x34 scope:global +ConnectionClass__Q29WorldConn16Pkt_Body_Service = .text:0x8030E55C; // type:function size:0x64 scope:global +Size__Q29WorldConn16Pkt_Body_Service = .text:0x8030E5C0; // type:function size:0x8 scope:global +Type__Q29WorldConn16Pkt_Body_Service = .text:0x8030E5C8; // type:function size:0x20 scope:global +_._Q29WorldConn18Pkt_Effect_Service = .text:0x8030E5E8; // type:function size:0x34 scope:global +ConnectionClass__Q29WorldConn18Pkt_Effect_Service = .text:0x8030E61C; // type:function size:0x64 scope:global +Size__Q29WorldConn18Pkt_Effect_Service = .text:0x8030E680; // type:function size:0x8 scope:global +Type__Q29WorldConn18Pkt_Effect_Service = .text:0x8030E688; // type:function size:0x20 scope:global +__Q33UTL3Stdt3map3ZUiZPQ39WorldConn6Server4BodyZ24_type_WorldConnServerMap = .text:0x8030E6A8; // type:function size:0x74 scope:global +GetFrame__CQ29WorldConn6Server = .text:0x8030E71C; // type:function size:0xC scope:global +OnClose__13WorldBodyConn = .text:0x8030E728; // type:function size:0x40 scope:global +OnStatusCheck__13WorldBodyConn = .text:0x8030E768; // type:function size:0x8 scope:global +OnClose__15WorldEffectConn = .text:0x8030E770; // type:function size:0x40 scope:global +OnStatusCheck__15WorldEffectConn = .text:0x8030E7B0; // type:function size:0x8 scope:global +_._Q43UTL11Collectionst8Listable2Z9WCollideri100_4List = .text:0x8030E7B8; // type:function size:0xB4 scope:global +OnGrowRequest__Q23UTLt6Vector2ZP9WCollideri16Ui = .text:0x8030E86C; // type:function size:0x4 scope:global +SType__Q29WorldConn16Pkt_Body_Service = .text:0x8030E870; // type:function size:0x58 scope:global +SType__Q29WorldConn18Pkt_Effect_Service = .text:0x8030E8C8; // type:function size:0x58 scope:global +AllocVectorSpace__Q23UTLt11FixedVector3ZP9WCollideri100i16UiUi = .text:0x8030E920; // type:function size:0x8 scope:global +FreeVectorSpace__Q23UTLt11FixedVector3ZP9WCollideri100i16PP9WColliderUi = .text:0x8030E928; // type:function size:0x4 scope:global +GetGrowSize__CQ23UTLt11FixedVector3ZP9WCollideri100i16Ui = .text:0x8030E92C; // type:function size:0x8 scope:global +GetMaxCapacity__CQ23UTLt11FixedVector3ZP9WCollideri100i16 = .text:0x8030E934; // type:function size:0x8 scope:global +GetGrowSize__CQ23UTLt6Vector2ZP9WCollideri16Ui = .text:0x8030E93C; // type:function size:0x20 scope:global +_._Q23UTLt6Vector2ZP9WCollideri16 = .text:0x8030E95C; // type:function size:0x34 scope:global +_._Q23UTLt11FixedVector3ZP9WCollideri100i16 = .text:0x8030E990; // type:function size:0xB4 scope:global +GetMaxCapacity__CQ23UTLt6Vector2ZP9WCollideri16 = .text:0x8030EA44; // type:function size:0xC scope:global +_GLOBAL_.I.Tweak_colliderDraws = .text:0x8030EA50; // type:function size:0x2C scope:local +DBcallback = .text:0x8030EB08; // type:label scope:local +EnableMetroTRKInterrupts = .text:0x8030EBF8; // type:label scope:global +SNDebugInit = .text:0x8030EC5C; // type:label scope:global +SNDebugBoot = .text:0x8030EEAC; // type:label scope:global +cmdNop = .text:0x8030EFD4; // type:label scope:global +cmdRecvMem = .text:0x8030F0A8; // type:label scope:global +cmdSendMem = .text:0x8030F144; // type:label scope:global +cmdThreadList = .text:0x8030F320; // type:label scope:local +cmdReset = .text:0x8030F444; // type:label scope:global +tunerprotocol = .text:0x8030F494; // type:label scope:global +cmdGo = .text:0x8030F614; // type:label scope:global +proviewtty = .text:0x8030F7C8; // type:label scope:global +checkexternal = .text:0x8031019C; // type:label scope:global +ISIentry = .text:0x80310370; // type:label scope:global +DSIentry = .text:0x80310388; // type:label scope:global +snIsSNTDEV = .text:0x803104B4; // type:label scope:global +snFileserver = .text:0x80310AF0; // type:label scope:global +cmdFS_ACK = .text:0x80310C04; // type:label scope:local +FS_Continue = .text:0x80310C24; // type:label scope:local +cmdFS_STOP = .text:0x80310C58; // type:label scope:local +cmdFS_HostDisconnect = .text:0x80310C6C; // type:label scope:local +snInitFileserver = .text:0x80310CF0; // type:label scope:global +PCinit = .text:0x80310DE0; // type:label scope:global +PCcreat = .text:0x80310DE8; // type:label scope:global +PCopen = .text:0x80310DF0; // type:label scope:global +PCclose = .text:0x80310DF8; // type:label scope:global +PCread = .text:0x80310E00; // type:label scope:global +PCwrite = .text:0x80310E08; // type:label scope:global +PClseek = .text:0x80310E10; // type:label scope:global +PCsync = .text:0x80310E18; // type:label scope:local +PCreadAsync = .text:0x80310E20; // type:label scope:global +PCwriteAsync = .text:0x80310E28; // type:label scope:global +PCreadAsync2 = .text:0x80310E30; // type:label scope:global +PCwriteAsync2 = .text:0x80310E38; // type:label scope:global +SNInitComm = .text:0x80310E40; // type:label scope:global +SNInitInterrupts = .text:0x80310F94; // type:label scope:global +SNQueryData = .text:0x80310FDC; // type:label scope:global +SNRead = .text:0x80311064; // type:label scope:global +SNWrite = .text:0x80311220; // type:label scope:global +SNOpen = .text:0x803113B8; // type:label scope:global +SNClose = .text:0x803113BC; // type:label scope:global +SNHandler = .text:0x803113C0; // type:label scope:local +SNSelect = .text:0x80311414; // type:label scope:local +SNDeselect = .text:0x8031142C; // type:label scope:local +SNWiggleSelect = .text:0x80311440; // type:label scope:local +SNSync = .text:0x80311468; // type:label scope:local +SNRead8 = .text:0x8031147C; // type:label scope:local +SNWrite8 = .text:0x803114BC; // type:label scope:local +SNRead32 = .text:0x803114F0; // type:label scope:local +SNWrite32 = .text:0x8031152C; // type:label scope:local +SNDVDRead_init = .text:0x8031155C; // type:label scope:global +SNDVDReadAsync_next = .text:0x803115AC; // type:label scope:global +SNDVDReadSync_next = .text:0x8031161C; // type:label scope:global +SNDVDWrite_init = .text:0x80311684; // type:label scope:global +SNDVDWriteAsync_next = .text:0x803116E8; // type:label scope:global +SNDVDWriteSync_next = .text:0x80311758; // type:label scope:global +SNDVDWriteNoDMA_next = .text:0x803117C0; // type:label scope:global +snProfInit = .text:0x80311870; // type:label scope:global +snProfile = .text:0x80311954; // type:label scope:global +snProfSetRange = .text:0x803119E8; // type:label scope:global +snProfSetFlagValue = .text:0x80311A00; // type:label scope:global +snProfSetFlags = .text:0x80311A10; // type:label scope:global +snProfClrFlags = .text:0x80311A28; // type:label scope:global +PPCMtdec = .text:0x80311BE4; // type:label scope:global +__cvt_fp2unsigned = .text:0x80311C50; // type:label scope:global +__shr2u = .text:0x80311C98; // type:label scope:global +__div2i = .text:0x80311C9C; // type:label scope:global +__shl2i = .text:0x80311CA0; // type:label scope:global +__mod2i = .text:0x80311CA4; // type:label scope:global +__shr2i = .text:0x80311CA8; // type:label scope:global +__div2u = .text:0x80311CAC; // type:label scope:global +__mod2u = .text:0x80311CB0; // type:label scope:global +__va_arg = .text:0x80311CB4; // type:label scope:global +gcc2_compiled. = .text:0x80311DA8; // type:label scope:local +PCwriteAsyncInit = .text:0x80311DA8; // type:function size:0x8 scope:global +DoFSReadHeader = .text:0x80311DB0; // type:function size:0x8C scope:local +InitReadCounts = .text:0x80311E3C; // type:function size:0x5C scope:local +PCreadAsyncNext = .text:0x80311E98; // type:function size:0x8C scope:local +PCreadAsyncInit = .text:0x80311F24; // type:function size:0xA4 scope:global +ReadSyncNext = .text:0x80311FC8; // type:function size:0xA0 scope:local +CompletePCreadAsync = .text:0x80312068; // type:function size:0x184 scope:local +PCrwAsyncFSACK = .text:0x803121EC; // type:function size:0xA8 scope:local +PCrwSyncFSACK = .text:0x80312294; // type:function size:0xD8 scope:local +CompleteAsync = .text:0x8031236C; // type:function size:0x54 scope:global +PCrwAsyncNextPh = .text:0x803123C0; // type:function size:0x74 scope:global +EXI2TCHandler = .text:0x80312434; // type:function size:0x13C scope:local +SNInitEXI2TCHandler = .text:0x80312570; // type:function size:0x70 scope:global +gcc2_compiled. = .text:0x803125E0; // type:label scope:local +DisDvdBP = .text:0x803125E0; // type:function size:0x20 scope:local +EnaDvdBP = .text:0x80312600; // type:function size:0x24 scope:local +ForceDvdTcIrq = .text:0x80312624; // type:function size:0x88 scope:local +ForceDvdDeIrq = .text:0x803126AC; // type:function size:0x44 scope:local +DvdCallback = .text:0x803126F0; // type:function size:0x80 scope:local +CheckSeekOffset = .text:0x80312770; // type:function size:0x20 scope:local +DSIExcHandler = .text:0x80312790; // type:function size:0xB4 scope:local +NotDvdDsi = .text:0x803127F0; // type:label scope:local +DSIHandler = .text:0x80312844; // type:function size:0x274 scope:local +SNDVDEmuInit = .text:0x80312AB8; // type:function size:0x20 scope:global +SNDVDEmuInitDSIHandler = .text:0x80312AD8; // type:function size:0x7C scope:global +SNDVDEmuControl = .text:0x80312B54; // type:function size:0xBC scope:global +gcc2_compiled. = .text:0x80312C10; // type:label scope:local +__errno = .text:0x80312C10; // type:function size:0x8 scope:global +gcc2_compiled. = .text:0x80312C18; // type:label scope:local +fclose = .text:0x80312C18; // type:function size:0xB8 scope:global +gcc2_compiled. = .text:0x80312CD0; // type:label scope:local +fflush = .text:0x80312CD0; // type:function size:0xF4 scope:global +gcc2_compiled. = .text:0x80312DC4; // type:label scope:local +snstd = .text:0x80312DC4; // type:function size:0x5C scope:local +_sn_sinit = .text:0x80312E20; // type:function size:0xB0 scope:global +_sn_sfp = .text:0x80312ED0; // type:function size:0x144 scope:global +_fopen_r = .text:0x80313014; // type:function size:0xEC scope:global +fopen = .text:0x80313100; // type:function size:0x30 scope:global +_cleanup_r = .text:0x80313130; // type:function size:0x28 scope:global +gcc2_compiled. = .text:0x80313158; // type:label scope:local +fprintf = .text:0x80313158; // type:function size:0x94 scope:global +gcc2_compiled. = .text:0x803131EC; // type:label scope:local +fseek = .text:0x803131EC; // type:function size:0x3E4 scope:global +gcc2_compiled. = .text:0x803135D0; // type:label scope:local +_fwalk = .text:0x803135D0; // type:function size:0x80 scope:global +gcc2_compiled. = .text:0x80313650; // type:label scope:local +__smakebuf = .text:0x80313650; // type:function size:0xD8 scope:global +printf = .text:0x80313728; // type:function size:0xAC scope:global +gcc2_compiled. = .text:0x803137D4; // type:label scope:local +lflush = .text:0x803137D4; // type:function size:0x20 scope:local +__srefill = .text:0x803137F4; // type:function size:0x174 scope:global +sprintf = .text:0x80313968; // type:function size:0xD8 scope:global +gcc2_compiled. = .text:0x80313A40; // type:label scope:local +__sread = .text:0x80313A40; // type:function size:0x64 scope:global +__swrite = .text:0x80313AA4; // type:function size:0x70 scope:global +__sseek = .text:0x80313B14; // type:function size:0x64 scope:global +__sclose = .text:0x80313B78; // type:function size:0x28 scope:global +gcc2_compiled. = .text:0x80313BA0; // type:label scope:local +vsprintf = .text:0x80313BA0; // type:function size:0x5C scope:global +vsnprintf = .text:0x80313BFC; // type:function size:0x74 scope:global +gcc2_compiled. = .text:0x80313C70; // type:label scope:local +atexit = .text:0x80313C70; // type:function size:0x98 scope:global +gcc2_compiled. = .text:0x80313D08; // type:label scope:local +qsort = .text:0x80313D08; // type:function size:0x98C scope:global +rand = .text:0x80314694; // type:function size:0x24 scope:global +gcc2_compiled. = .text:0x803146B8; // type:label scope:local +malloc = .text:0x803146B8; // type:function size:0x3C scope:global +free = .text:0x803146F4; // type:function size:0x3C scope:global +gcc2_compiled. = .text:0x80314730; // type:label scope:local +memcmp = .text:0x80314730; // type:function size:0x90 scope:global +gcc2_compiled. = .text:0x803147C0; // type:label scope:local +memcpy = .text:0x803147C0; // type:function size:0xA4 scope:global +gcc2_compiled. = .text:0x80314864; // type:label scope:local +memmove = .text:0x80314864; // type:function size:0xEC scope:global +gcc2_compiled. = .text:0x80314950; // type:label scope:local +memset = .text:0x80314950; // type:function size:0x94 scope:global +gcc2_compiled. = .text:0x803149E4; // type:label scope:local +strcasecmp = .text:0x803149E4; // type:function size:0x7C scope:global +gcc2_compiled. = .text:0x80314A60; // type:label scope:local +strcat = .text:0x80314A60; // type:function size:0x90 scope:global +gcc2_compiled. = .text:0x80314AF0; // type:label scope:local +strchr = .text:0x80314AF0; // type:function size:0x9C scope:global +gcc2_compiled. = .text:0x80314B8C; // type:label scope:local +strcmp = .text:0x80314B8C; // type:function size:0xA8 scope:global +gcc2_compiled. = .text:0x80314C34; // type:label scope:local +strcoll = .text:0x80314C34; // type:function size:0x20 scope:global +gcc2_compiled. = .text:0x80314C54; // type:label scope:local +strcpy = .text:0x80314C54; // type:function size:0x84 scope:global +gcc2_compiled. = .text:0x80314CD8; // type:label scope:local +strcspn = .text:0x80314CD8; // type:function size:0x70 scope:global +gcc2_compiled. = .text:0x80314D48; // type:label scope:local +strlen = .text:0x80314D48; // type:function size:0x6C scope:global +gcc2_compiled. = .text:0x80314DB4; // type:label scope:local +strncasecmp = .text:0x80314DB4; // type:function size:0xAC scope:global +gcc2_compiled. = .text:0x80314E60; // type:label scope:local +strncat = .text:0x80314E60; // type:function size:0xAC scope:global +gcc2_compiled. = .text:0x80314F0C; // type:label scope:local +strncmp = .text:0x80314F0C; // type:function size:0xE0 scope:global +gcc2_compiled. = .text:0x80314FEC; // type:label scope:local +strncpy = .text:0x80314FEC; // type:function size:0xCC scope:global +gcc2_compiled. = .text:0x803150B8; // type:label scope:local +strstr = .text:0x803150B8; // type:function size:0x68 scope:global +setjmp = .text:0x80315120; // type:function size:0xBC scope:global +longjmp = .text:0x803151DC; // type:function size:0xC4 scope:global +gcc2_compiled. = .text:0x803152A0; // type:label scope:local +strround = .text:0x803152A0; // type:function size:0x5C scope:global +strrev = .text:0x803152FC; // type:function size:0x4C scope:global +itoa = .text:0x80315348; // type:function size:0x7C scope:global +fftoa = .text:0x803153C4; // type:function size:0x4E8 scope:global +_vfwrite = .text:0x803158AC; // type:function size:0xD4 scope:local +vfprintf = .text:0x80315980; // type:function size:0xD8 scope:global +_vfprintf_r = .text:0x80315A58; // type:function size:0x17F0 scope:global +add_separators = .text:0x80317248; // type:function size:0x188 scope:global +gcc2_compiled. = .text:0x803173D0; // type:label scope:local +_vfwrite = .text:0x803173D0; // type:function size:0xD4 scope:local +_vfiprintf_r = .text:0x803174A4; // type:function size:0x1680 scope:global +gcc2_compiled. = .text:0x80318B24; // type:label scope:local +strtod = .text:0x80318B24; // type:function size:0x32C scope:global +gcc2_compiled. = .text:0x80318E50; // type:label scope:local +_tolower = .text:0x80318E50; // type:function size:0x1C scope:global +gcc2_compiled. = .text:0x80318E6C; // type:label scope:local +isdigit = .text:0x80318E6C; // type:function size:0x14 scope:global +gcc2_compiled. = .text:0x80318E80; // type:label scope:local +isspace = .text:0x80318E80; // type:function size:0x14 scope:global +_localeconv_r = .text:0x80318E94; // type:function size:0xC scope:global +localeconv = .text:0x80318EA0; // type:function size:0x24 scope:global +gcc2_compiled. = .text:0x80318EC4; // type:label scope:local +sn_floor = .text:0x80318EC4; // type:function size:0x174 scope:global +sn_fmod = .text:0x80319038; // type:function size:0x35C scope:global +sn_log = .text:0x80319394; // type:function size:0x2FC scope:global +sn_log10 = .text:0x80319690; // type:function size:0x148 scope:global +gcc2_compiled. = .text:0x803197D8; // type:label scope:local +_close_r = .text:0x803197D8; // type:function size:0x50 scope:global +gcc2_compiled. = .text:0x80319828; // type:label scope:local +_fstat_r = .text:0x80319828; // type:function size:0x58 scope:global +gcc2_compiled. = .text:0x80319880; // type:label scope:local +_lseek_r = .text:0x80319880; // type:function size:0x58 scope:global +gcc2_compiled. = .text:0x803198D8; // type:label scope:local +_open_r = .text:0x803198D8; // type:function size:0x5C scope:global +gcc2_compiled. = .text:0x80319934; // type:label scope:local +_read_r = .text:0x80319934; // type:function size:0x58 scope:global +gcc2_compiled. = .text:0x8031998C; // type:label scope:local +_write_r = .text:0x8031998C; // type:function size:0x58 scope:global +gcc2_compiled. = .text:0x803199E4; // type:label scope:local +__sflags = .text:0x803199E4; // type:function size:0x9C scope:global +gcc2_compiled. = .text:0x80319A80; // type:label scope:local +_mbtowc_r = .text:0x80319A80; // type:function size:0x31C scope:global +gcc2_compiled. = .text:0x80319D9C; // type:label scope:local +memchr = .text:0x80319D9C; // type:function size:0xC0 scope:global +__do_global_ctors = .text:0x80319E5C; // type:function size:0x90 scope:global +__main = .text:0x80319EEC; // type:function size:0x38 scope:global +gcc2_compiled. = .text:0x80319F24; // type:label scope:local +__ashldi3 = .text:0x80319F24; // type:function size:0x40 scope:global +gcc2_compiled. = .text:0x80319F64; // type:label scope:local +__ashrdi3 = .text:0x80319F64; // type:function size:0x40 scope:global +gcc2_compiled. = .text:0x80319FA4; // type:label scope:local +__cmpdi2 = .text:0x80319FA4; // type:function size:0x3C scope:global +gcc2_compiled. = .text:0x80319FE0; // type:label scope:local +__divdi3 = .text:0x80319FE0; // type:function size:0x57C scope:global +gcc2_compiled. = .text:0x8031A55C; // type:label scope:local +__floatdisf = .text:0x8031A55C; // type:function size:0xB0 scope:global +gcc2_compiled. = .text:0x8031A60C; // type:label scope:local +__lshrdi3 = .text:0x8031A60C; // type:function size:0x40 scope:global +gcc2_compiled. = .text:0x8031A64C; // type:label scope:local +__moddi3 = .text:0x8031A64C; // type:function size:0x534 scope:global +gcc2_compiled. = .text:0x8031AB80; // type:label scope:local +__pure_virtual = .text:0x8031AB80; // type:function size:0x20 scope:global +gcc2_compiled. = .text:0x8031ABA0; // type:label scope:local +__udivdi3 = .text:0x8031ABA0; // type:function size:0x4E4 scope:global +gcc2_compiled. = .text:0x8031B084; // type:label scope:local +__umoddi3 = .text:0x8031B084; // type:function size:0x498 scope:global +gcc2_compiled. = .text:0x8031B51C; // type:label scope:local +__default_terminate = .text:0x8031B51C; // type:function size:0x10 scope:global +__terminate = .text:0x8031B52C; // type:function size:0x2C scope:global +gcc2_compiled. = .text:0x8031B558; // type:label scope:local +pow = .text:0x8031B558; // type:function size:0x7D0 scope:global +gcc2_compiled. = .text:0x8031BD28; // type:label scope:local +sqrt = .text:0x8031BD28; // type:function size:0x214 scope:global +gcc2_compiled. = .text:0x8031BF3C; // type:label scope:local +fabs = .text:0x8031BF3C; // type:function size:0x3C scope:global +gcc2_compiled. = .text:0x8031BF78; // type:label scope:local +acosf = .text:0x8031BF78; // type:function size:0x24C scope:global +gcc2_compiled. = .text:0x8031C1C4; // type:label scope:local +asinf = .text:0x8031C1C4; // type:function size:0x22C scope:global +gcc2_compiled. = .text:0x8031C3F0; // type:label scope:local +atan2f = .text:0x8031C3F0; // type:function size:0x220 scope:global +gcc2_compiled. = .text:0x8031C610; // type:label scope:local +coshf = .text:0x8031C610; // type:function size:0x130 scope:global +gcc2_compiled. = .text:0x8031C740; // type:label scope:local +expf = .text:0x8031C740; // type:function size:0x22C scope:global +gcc2_compiled. = .text:0x8031C96C; // type:label scope:local +fmodf = .text:0x8031C96C; // type:function size:0x1C8 scope:global +gcc2_compiled. = .text:0x8031CB34; // type:label scope:local +logf = .text:0x8031CB34; // type:function size:0x280 scope:global +gcc2_compiled. = .text:0x8031CDB4; // type:label scope:local +log10f = .text:0x8031CDB4; // type:function size:0x10C scope:global +gcc2_compiled. = .text:0x8031CEC0; // type:label scope:local +powf = .text:0x8031CEC0; // type:function size:0x6F4 scope:global +gcc2_compiled. = .text:0x8031D5B4; // type:label scope:local +sinhf = .text:0x8031D5B4; // type:function size:0x150 scope:global +gcc2_compiled. = .text:0x8031D704; // type:label scope:local +sqrtf = .text:0x8031D704; // type:function size:0xF8 scope:global +gcc2_compiled. = .text:0x8031D7FC; // type:label scope:local +atanf = .text:0x8031D7FC; // type:function size:0x210 scope:global +gcc2_compiled. = .text:0x8031DA0C; // type:label scope:local +ceilf = .text:0x8031DA0C; // type:function size:0xC4 scope:global +gcc2_compiled. = .text:0x8031DAD0; // type:label scope:local +cosf = .text:0x8031DAD0; // type:function size:0xDC scope:global +gcc2_compiled. = .text:0x8031DBAC; // type:label scope:local +fabsf = .text:0x8031DBAC; // type:function size:0x24 scope:global +gcc2_compiled. = .text:0x8031DBD0; // type:label scope:local +floorf = .text:0x8031DBD0; // type:function size:0xC8 scope:global +gcc2_compiled. = .text:0x8031DC98; // type:label scope:local +isnanf = .text:0x8031DC98; // type:function size:0x24 scope:global +gcc2_compiled. = .text:0x8031DCBC; // type:label scope:local +sinf = .text:0x8031DCBC; // type:function size:0xDC scope:global +gcc2_compiled. = .text:0x8031DD98; // type:label scope:local +tanf = .text:0x8031DD98; // type:function size:0x80 scope:global +gcc2_compiled. = .text:0x8031DE18; // type:label scope:local +tanhf = .text:0x8031DE18; // type:function size:0x110 scope:global +gcc2_compiled. = .text:0x8031DF28; // type:label scope:local +scalbn = .text:0x8031DF28; // type:function size:0x154 scope:global +gcc2_compiled. = .text:0x8031E07C; // type:label scope:local +scalbnf = .text:0x8031E07C; // type:function size:0x11C scope:global +gcc2_compiled. = .text:0x8031E198; // type:label scope:local +expm1f = .text:0x8031E198; // type:function size:0x324 scope:global +gcc2_compiled. = .text:0x8031E4BC; // type:label scope:local +__kernel_cosf = .text:0x8031E4BC; // type:function size:0xEC scope:global +gcc2_compiled. = .text:0x8031E5A8; // type:label scope:local +__kernel_sinf = .text:0x8031E5A8; // type:function size:0xAC scope:global +gcc2_compiled. = .text:0x8031E654; // type:label scope:local +__kernel_tanf = .text:0x8031E654; // type:function size:0x214 scope:global +gcc2_compiled. = .text:0x8031E868; // type:label scope:local +__ieee754_rem_pio2f = .text:0x8031E868; // type:function size:0x350 scope:global +gcc2_compiled. = .text:0x8031EBB8; // type:label scope:local +copysign = .text:0x8031EBB8; // type:function size:0x50 scope:global +gcc2_compiled. = .text:0x8031EC08; // type:label scope:local +copysignf = .text:0x8031EC08; // type:function size:0x34 scope:global +gcc2_compiled. = .text:0x8031EC3C; // type:label scope:local +__kernel_rem_pio2f = .text:0x8031EC3C; // type:function size:0x884 scope:global +PPCMfmsr = .text:0x8031F4C0; // type:function size:0x8 scope:global +PPCMtmsr = .text:0x8031F4C8; // type:function size:0x8 scope:global +PPCMfhid0 = .text:0x8031F4D0; // type:function size:0x8 scope:global +PPCMthid0 = .text:0x8031F4D8; // type:function size:0x8 scope:global +PPCMfl2cr = .text:0x8031F4E0; // type:function size:0x8 scope:global +PPCMtl2cr = .text:0x8031F4E8; // type:function size:0x8 scope:global +PPCSync = .text:0x8031F4F0; // type:function size:0x8 scope:global +PPCHalt = .text:0x8031F4F8; // type:function size:0x14 scope:global +PPCMtmmcr0 = .text:0x8031F50C; // type:function size:0x8 scope:global +PPCMtmmcr1 = .text:0x8031F514; // type:function size:0x8 scope:global +PPCMtpmc1 = .text:0x8031F51C; // type:function size:0x8 scope:global +PPCMtpmc2 = .text:0x8031F524; // type:function size:0x8 scope:global +PPCMtpmc3 = .text:0x8031F52C; // type:function size:0x8 scope:global +PPCMtpmc4 = .text:0x8031F534; // type:function size:0x8 scope:global +PPCMffpscr = .text:0x8031F53C; // type:function size:0x20 scope:global +PPCMtfpscr = .text:0x8031F55C; // type:function size:0x28 scope:global +PPCMfhid2 = .text:0x8031F584; // type:function size:0x8 scope:global +PPCMthid2 = .text:0x8031F58C; // type:function size:0x8 scope:global +PPCMfwpar = .text:0x8031F594; // type:function size:0xC scope:global +PPCMtwpar = .text:0x8031F5A0; // type:function size:0x8 scope:global +PPCDisableSpeculation = .text:0x8031F5A8; // type:function size:0x28 scope:global +PPCSetFpNonIEEEMode = .text:0x8031F5D0; // type:function size:0x8 scope:global +SteeringResetCallback = .text:0x8031F5D8; // type:function size:0x24 scope:local +HandlePedals = .text:0x8031F5FC; // type:function size:0x200 scope:local +HandleTriggers = .text:0x8031F7FC; // type:function size:0x24C scope:local +CookValues = .text:0x8031FA48; // type:function size:0x104 scope:local +SteeringSamplingCallback = .text:0x8031FB4C; // type:function size:0xB4 scope:local +InitDevice = .text:0x8031FC00; // type:function size:0x140 scope:local +LGInit = .text:0x8031FD40; // type:function size:0x9C scope:global +LGOpen = .text:0x8031FDDC; // type:function size:0x15C scope:global +LGClose = .text:0x8031FF38; // type:function size:0x80 scope:global +LGRead = .text:0x8031FFB8; // type:function size:0xEC scope:global +LGDownloadForceEffect = .text:0x803200A4; // type:function size:0xCC scope:global +LGUpdateForceEffect = .text:0x80320170; // type:function size:0xD0 scope:global +LGStartForceEffect = .text:0x80320240; // type:function size:0xBC scope:global +LGStopForceEffect = .text:0x803202FC; // type:function size:0xBC scope:global +LGDestroyForceEffect = .text:0x803203B8; // type:function size:0xBC scope:global +VDevice_Init = .text:0x80320474; // type:function size:0x70 scope:local +VDevice_RecalcGammaTable = .text:0x803204E4; // type:function size:0xD8 scope:local +VDevice_DownloadEffect = .text:0x803205BC; // type:function size:0xBC scope:local +VDevice_UpdateEffect = .text:0x80320678; // type:function size:0x44 scope:local +VDevice_DestroyEffect = .text:0x803206BC; // type:function size:0x28 scope:local +VDevice_StartEffect = .text:0x803206E4; // type:function size:0x40 scope:local +VDevice_StopEffect = .text:0x80320724; // type:function size:0x40 scope:local +VDevice_Initialize = .text:0x80320764; // type:function size:0x34 scope:local +VDevice_Shutdown = .text:0x80320798; // type:function size:0x34 scope:local +VDevice_GetFreeEffect = .text:0x803207CC; // type:function size:0x74 scope:local +Effect_Init = .text:0x80320840; // type:function size:0x114 scope:local +Effect_UpdateEffect = .text:0x80320954; // type:function size:0x328 scope:local +Effect_StartEffect = .text:0x80320C7C; // type:function size:0x48 scope:local +Effect_StopEffect = .text:0x80320CC4; // type:function size:0x14 scope:local +Effect_Update = .text:0x80320CD8; // type:function size:0x3E0 scope:local +Effect_PerformEnvelope = .text:0x803210B8; // type:function size:0xC4 scope:local +Effect_PolarToRect = .text:0x8032117C; // type:function size:0xB4 scope:local +Effect_UpdateSpring = .text:0x80321230; // type:function size:0xA0 scope:local +Effect_UpdateDamper = .text:0x803212D0; // type:function size:0x60 scope:local +SimThread_Init = .text:0x80321330; // type:function size:0x144 scope:local +SimThread_Step = .text:0x80321474; // type:function size:0x39C scope:local +__OSFPRInit = .text:0x80321810; // type:function size:0x128 scope:global +OSGetConsoleType = .text:0x80321938; // type:function size:0x28 scope:global +InquiryCallback = .text:0x80321960; // type:function size:0x3C scope:local +OSInit = .text:0x8032199C; // type:function size:0x4E0 scope:global +OSExceptionInit = .text:0x80321E7C; // type:function size:0x280 scope:local +__OSDBIntegrator = .text:0x803220FC; // type:function size:0x24 scope:local +__OSDBINTSTART = .text:0x803220FC; // type:label scope:global +__OSDBJump = .text:0x80322120; // type:function size:0x4 scope:local +__OSDBINTEND = .text:0x80322120; // type:label scope:global +__OSDBJUMPSTART = .text:0x80322120; // type:label scope:global +__OSSetExceptionHandler = .text:0x80322124; // type:function size:0x1C scope:global +__OSDBJUMPEND = .text:0x80322124; // type:label scope:global +__OSGetExceptionHandler = .text:0x80322140; // type:function size:0x14 scope:global +OSExceptionVector = .text:0x80322154; // type:function size:0x9C scope:local +__OSEVStart = .text:0x80322154; // type:label scope:global +__DBVECTOR = .text:0x803221AC; // type:label scope:global +__OSEVSetNumber = .text:0x803221BC; // type:label scope:global +__OSEVEnd = .text:0x803221EC; // type:label scope:global +OSDefaultExceptionHandler = .text:0x803221F0; // type:function size:0x58 scope:global +__OSPSInit = .text:0x80322248; // type:function size:0x54 scope:global +__OSGetDIConfig = .text:0x8032229C; // type:function size:0x14 scope:global +OSRegisterVersion = .text:0x803222B0; // type:function size:0x2C scope:global +OSInitAlarm = .text:0x803222DC; // type:function size:0x58 scope:global +OSCreateAlarm = .text:0x80322334; // type:function size:0x10 scope:global +InsertAlarm = .text:0x80322344; // type:function size:0x250 scope:local +OSSetAlarm = .text:0x80322594; // type:function size:0x68 scope:global +OSSetPeriodicAlarm = .text:0x803225FC; // type:function size:0x7C scope:global +OSCancelAlarm = .text:0x80322678; // type:function size:0x11C scope:global +DecrementerExceptionCallback = .text:0x80322794; // type:function size:0x230 scope:local +DecrementerExceptionHandler = .text:0x803229C4; // type:function size:0x50 scope:local +OnReset = .text:0x80322A14; // type:function size:0xA0 scope:local +OSAllocFromHeap = .text:0x80322AB4; // type:function size:0xFC scope:global +OSSetCurrentHeap = .text:0x80322BB0; // type:function size:0x10 scope:global +OSInitAlloc = .text:0x80322BC0; // type:function size:0x70 scope:global +OSCreateHeap = .text:0x80322C30; // type:function size:0x6C scope:global +OSGetArenaHi = .text:0x80322C9C; // type:function size:0x8 scope:global +OSGetArenaLo = .text:0x80322CA4; // type:function size:0x8 scope:global +OSSetArenaHi = .text:0x80322CAC; // type:function size:0x8 scope:global +OSSetArenaLo = .text:0x80322CB4; // type:function size:0x8 scope:global +OSAllocFromArenaLo = .text:0x80322CBC; // type:function size:0x2C scope:global +__OSInitAudioSystem = .text:0x80322CE8; // type:function size:0x1BC scope:global +__OSStopAudioSystem = .text:0x80322EA4; // type:function size:0xD8 scope:global +DCEnable = .text:0x80322F7C; // type:function size:0x14 scope:global +DCInvalidateRange = .text:0x80322F90; // type:function size:0x2C scope:global +DCFlushRange = .text:0x80322FBC; // type:function size:0x30 scope:global +DCStoreRange = .text:0x80322FEC; // type:function size:0x30 scope:global +DCFlushRangeNoSync = .text:0x8032301C; // type:function size:0x2C scope:global +DCStoreRangeNoSync = .text:0x80323048; // type:function size:0x2C scope:global +ICInvalidateRange = .text:0x80323074; // type:function size:0x34 scope:global +ICFlashInvalidate = .text:0x803230A8; // type:function size:0x10 scope:global +ICEnable = .text:0x803230B8; // type:function size:0x14 scope:global +LCDisable = .text:0x803230CC; // type:function size:0x28 scope:global +L2GlobalInvalidate = .text:0x803230F4; // type:function size:0x98 scope:global +DMAErrorHandler = .text:0x8032318C; // type:function size:0x160 scope:global +__OSCacheInit = .text:0x803232EC; // type:function size:0xF4 scope:global +__OSLoadFPUContext = .text:0x803233E0; // type:function size:0x124 scope:local +__OSSaveFPUContext = .text:0x80323504; // type:function size:0x128 scope:local +OSSaveFPUContext = .text:0x8032362C; // type:function size:0x8 scope:global +OSSetCurrentContext = .text:0x80323634; // type:function size:0x5C scope:global +OSGetCurrentContext = .text:0x80323690; // type:function size:0xC scope:global +OSSaveContext = .text:0x8032369C; // type:function size:0x80 scope:global +OSLoadContext = .text:0x8032371C; // type:function size:0xD8 scope:global +OSGetStackPointer = .text:0x803237F4; // type:function size:0x8 scope:global +OSClearContext = .text:0x803237FC; // type:function size:0x24 scope:global +OSInitContext = .text:0x80323820; // type:function size:0xBC scope:global +OSDumpContext = .text:0x803238DC; // type:function size:0x2A8 scope:global +OSSwitchFPUContext = .text:0x80323B84; // type:function size:0x84 scope:local +__OSContextInit = .text:0x80323C08; // type:function size:0x48 scope:global +OSReport = .text:0x80323C50; // type:function size:0x80 scope:global +OSPanic = .text:0x80323CD0; // type:function size:0x12C scope:global +OSSetErrorHandler = .text:0x80323DFC; // type:function size:0x218 scope:global +__OSUnhandledException = .text:0x80324014; // type:function size:0x2E8 scope:global +PackArgs = .text:0x803242FC; // type:function size:0x188 scope:local +Run = .text:0x80324484; // type:function size:0x3C scope:local +ReadDisc = .text:0x803244C0; // type:function size:0x6C scope:local +Callback = .text:0x8032452C; // type:function size:0xC scope:local +__OSGetExecParams = .text:0x80324538; // type:function size:0x40 scope:global +GetApploaderPosition = .text:0x80324578; // type:function size:0xC4 scope:local +__OSBootDolSimple = .text:0x8032463C; // type:function size:0x484 scope:global +__OSBootDol = .text:0x80324AC0; // type:function size:0x19C scope:global +GetFontCode = .text:0x80324C5C; // type:function size:0x174 scope:local +Decode = .text:0x80324DD0; // type:function size:0x174 scope:local +OSGetFontEncode = .text:0x80324F44; // type:function size:0x64 scope:global +ReadFont = .text:0x80324FA8; // type:function size:0x324 scope:local +ParseStringS = .text:0x803252CC; // type:function size:0x13C scope:local +ExpandFontSheet = .text:0x80325408; // type:function size:0x3AC scope:local +OSInitFont = .text:0x803257B4; // type:function size:0x20C scope:global +OSGetFontTexture = .text:0x803259C0; // type:function size:0x170 scope:global +OSDisableInterrupts = .text:0x80325B30; // type:function size:0x14 scope:global +__RAS_OSDisableInterrupts_begin = .text:0x80325B30; // type:label scope:global +__RAS_OSDisableInterrupts_end = .text:0x80325B3C; // type:label scope:global +OSEnableInterrupts = .text:0x80325B44; // type:function size:0x14 scope:global +OSRestoreInterrupts = .text:0x80325B58; // type:function size:0x24 scope:global +__OSSetInterruptHandler = .text:0x80325B7C; // type:function size:0x1C scope:global +__OSGetInterruptHandler = .text:0x80325B98; // type:function size:0x14 scope:global +__OSInterruptInit = .text:0x80325BAC; // type:function size:0x74 scope:global +SetInterruptMask = .text:0x80325C20; // type:function size:0x2D8 scope:local +__OSMaskInterrupts = .text:0x80325EF8; // type:function size:0x88 scope:global +__OSUnmaskInterrupts = .text:0x80325F80; // type:function size:0x88 scope:global +__OSDispatchInterrupt = .text:0x80326008; // type:function size:0x344 scope:global +ExternalInterruptHandler = .text:0x8032634C; // type:function size:0x50 scope:local +__OSModuleInit = .text:0x8032639C; // type:function size:0x18 scope:global +OnReset = .text:0x803263B4; // type:function size:0x3C scope:local +MEMIntrruptHandler = .text:0x803263F0; // type:function size:0x6C scope:local +Config24MB = .text:0x8032645C; // type:function size:0x80 scope:local +Config48MB = .text:0x803264DC; // type:function size:0x80 scope:local +RealMode = .text:0x8032655C; // type:function size:0x18 scope:local +__OSInitMemoryProtection = .text:0x80326574; // type:function size:0x118 scope:global +OSInitMutex = .text:0x8032668C; // type:function size:0x38 scope:global +OSLockMutex = .text:0x803266C4; // type:function size:0xDC scope:global +OSUnlockMutex = .text:0x803267A0; // type:function size:0xC8 scope:global +__OSUnlockAllMutex = .text:0x80326868; // type:function size:0x70 scope:global +__OSReboot = .text:0x803268D8; // type:function size:0x70 scope:global +OSGetSaveRegion = .text:0x80326948; // type:function size:0x14 scope:global +OSRegisterResetFunction = .text:0x8032695C; // type:function size:0x84 scope:global +__OSCallResetFunctions = .text:0x803269E0; // type:function size:0xA8 scope:global +Reset = .text:0x80326A88; // type:function size:0x70 scope:local +KillThreads = .text:0x80326AF8; // type:function size:0x68 scope:local +__OSDoHotReset = .text:0x80326B60; // type:function size:0x48 scope:global +OSResetSystem = .text:0x80326BA8; // type:function size:0x200 scope:global +OSGetResetCode = .text:0x80326DA8; // type:function size:0x38 scope:global +__OSResetSWInterruptHandler = .text:0x80326DE0; // type:function size:0xF4 scope:global +OSGetResetButtonState = .text:0x80326ED4; // type:function size:0x298 scope:global +OSGetResetSwitchState = .text:0x8032716C; // type:function size:0x20 scope:global +WriteSramCallback = .text:0x8032718C; // type:function size:0x60 scope:local +WriteSram = .text:0x803271EC; // type:function size:0x118 scope:local +__OSInitSram = .text:0x80327304; // type:function size:0x13C scope:global +__OSLockSram = .text:0x80327440; // type:function size:0x5C scope:global +__OSLockSramEx = .text:0x8032749C; // type:function size:0x5C scope:global +UnlockSram = .text:0x803274F8; // type:function size:0x33C scope:local +__OSUnlockSram = .text:0x80327834; // type:function size:0x24 scope:global +__OSUnlockSramEx = .text:0x80327858; // type:function size:0x24 scope:global +__OSSyncSram = .text:0x8032787C; // type:function size:0x10 scope:global +__OSReadROM = .text:0x8032788C; // type:function size:0x124 scope:global +OSGetSoundMode = .text:0x803279B0; // type:function size:0x80 scope:global +OSSetSoundMode = .text:0x80327A30; // type:function size:0xA4 scope:global +OSGetProgressiveMode = .text:0x80327AD4; // type:function size:0x70 scope:global +OSSetProgressiveMode = .text:0x80327B44; // type:function size:0xA4 scope:global +OSGetEuRgb60Mode = .text:0x80327BE8; // type:function size:0x70 scope:global +OSSetEuRgb60Mode = .text:0x80327C58; // type:function size:0xA4 scope:global +OSGetWirelessID = .text:0x80327CFC; // type:function size:0x84 scope:global +OSSetWirelessID = .text:0x80327D80; // type:function size:0xAC scope:global +OSGetGbsMode = .text:0x80327E2C; // type:function size:0x70 scope:global +OSSetGbsMode = .text:0x80327E9C; // type:function size:0xB8 scope:global +SystemCallVector = .text:0x80327F54; // type:function size:0x20 scope:local +__OSSystemCallVectorStart = .text:0x80327F54; // type:label scope:global +__OSSystemCallVectorEnd = .text:0x80327F70; // type:label scope:global +__OSInitSystemCall = .text:0x80327F74; // type:function size:0x64 scope:global +DefaultSwitchThreadCallback = .text:0x80327FD8; // type:function size:0x4 scope:local +__OSThreadInit = .text:0x80327FDC; // type:function size:0x158 scope:global +OSInitThreadQueue = .text:0x80328134; // type:function size:0x10 scope:global +OSGetCurrentThread = .text:0x80328144; // type:function size:0xC scope:global +OSIsThreadTerminated = .text:0x80328150; // type:function size:0x34 scope:global +OSDisableScheduler = .text:0x80328184; // type:function size:0x40 scope:global +OSEnableScheduler = .text:0x803281C4; // type:function size:0x40 scope:global +UnsetRun = .text:0x80328204; // type:function size:0x68 scope:local +__OSGetEffectivePriority = .text:0x8032826C; // type:function size:0x3C scope:global +SetEffectivePriority = .text:0x803282A8; // type:function size:0x1C0 scope:local +__OSPromoteThread = .text:0x80328468; // type:function size:0x50 scope:global +SelectThread = .text:0x803284B8; // type:function size:0x228 scope:local +__OSReschedule = .text:0x803286E0; // type:function size:0x30 scope:global +OSYieldThread = .text:0x80328710; // type:function size:0x3C scope:global +OSCreateThread = .text:0x8032874C; // type:function size:0x1E8 scope:global +OSExitThread = .text:0x80328934; // type:function size:0xE4 scope:global +OSCancelThread = .text:0x80328A18; // type:function size:0x1BC scope:global +OSResumeThread = .text:0x80328BD4; // type:function size:0x288 scope:global +OSSuspendThread = .text:0x80328E5C; // type:function size:0x170 scope:global +OSSleepThread = .text:0x80328FCC; // type:function size:0xEC scope:global +OSWakeupThread = .text:0x803290B8; // type:function size:0x104 scope:global +OSSetThreadPriority = .text:0x803291BC; // type:function size:0xC0 scope:global +OSClearStack = .text:0x8032927C; // type:function size:0xAC scope:global +OSGetTime = .text:0x80329328; // type:function size:0x18 scope:global +OSGetTick = .text:0x80329340; // type:function size:0x8 scope:global +__OSGetSystemTime = .text:0x80329348; // type:function size:0x64 scope:global +__OSTimeToSystemTime = .text:0x803293AC; // type:function size:0x58 scope:global +__init_user = .text:0x80329404; // type:function size:0x20 scope:global +__init_cpp = .text:0x80329424; // type:function size:0x54 scope:local +abort = .text:0x80329478; // type:function size:0x20 scope:global +exit = .text:0x80329498; // type:function size:0x54 scope:global +_ExitProcess = .text:0x803294EC; // type:function size:0x20 scope:global +DBInit = .text:0x8032950C; // type:function size:0x28 scope:global +__DBExceptionDestinationAux = .text:0x80329534; // type:function size:0x48 scope:global +__DBExceptionDestination = .text:0x8032957C; // type:function size:0x10 scope:global +__DBIsExceptionMarked = .text:0x8032958C; // type:function size:0x1C scope:global +DBPrintf = .text:0x803295A8; // type:function size:0x50 scope:global +PSMTXIdentity = .text:0x803295F8; // type:function size:0x2C scope:global +PSMTXConcat = .text:0x80329624; // type:function size:0xCC scope:global +PSMTXInvXpose = .text:0x803296F0; // type:function size:0xC8 scope:global +PSMTXRotRad = .text:0x803297B8; // type:function size:0x70 scope:global +PSMTXRotTrig = .text:0x80329828; // type:function size:0xB0 scope:global +PSMTXTrans = .text:0x803298D8; // type:function size:0x34 scope:global +PSMTXTransApply = .text:0x8032990C; // type:function size:0x4C scope:global +PSMTXScale = .text:0x80329958; // type:function size:0x28 scope:global +C_MTXLookAt = .text:0x80329980; // type:function size:0x18C scope:global +C_MTXLightFrustum = .text:0x80329B0C; // type:function size:0x94 scope:global +C_MTXLightPerspective = .text:0x80329BA0; // type:function size:0xCC scope:global +PSMTXMultVec = .text:0x80329C6C; // type:function size:0x54 scope:global +C_MTXPerspective = .text:0x80329CC0; // type:function size:0xD0 scope:global +C_MTXOrtho = .text:0x80329D90; // type:function size:0x98 scope:global +PSMTX44Identity = .text:0x80329E28; // type:function size:0x34 scope:global +PSMTX44Copy = .text:0x80329E5C; // type:function size:0x44 scope:global +PSMTX44Concat = .text:0x80329EA0; // type:function size:0x104 scope:global +PSMTX44Transpose = .text:0x80329FA4; // type:function size:0x64 scope:global +C_MTX44Inverse = .text:0x8032A008; // type:function size:0x3F0 scope:global +PSVECNormalize = .text:0x8032A3F8; // type:function size:0x44 scope:global +PSVECCrossProduct = .text:0x8032A43C; // type:function size:0x3C scope:global +__DVDFSInit = .text:0x8032A478; // type:function size:0x38 scope:global +DVDConvertPathToEntrynum = .text:0x8032A4B0; // type:function size:0x2F4 scope:global +DVDFastOpen = .text:0x8032A7A4; // type:function size:0x74 scope:global +DVDClose = .text:0x8032A818; // type:function size:0x24 scope:global +DVDReadAsyncPrio = .text:0x8032A83C; // type:function size:0xC0 scope:global +cbForReadAsync = .text:0x8032A8FC; // type:function size:0x30 scope:local +defaultOptionalCommandChecker = .text:0x8032A92C; // type:function size:0x4 scope:local +DVDInit = .text:0x8032A930; // type:function size:0xD8 scope:global +stateReadingFST = .text:0x8032AA08; // type:function size:0x94 scope:local +cbForStateReadingFST = .text:0x8032AA9C; // type:function size:0x80 scope:local +cbForStateError = .text:0x8032AB1C; // type:function size:0xAC scope:local +stateTimeout = .text:0x8032ABC8; // type:function size:0x34 scope:local +stateGettingError = .text:0x8032ABFC; // type:function size:0x28 scope:local +CategorizeError = .text:0x8032AC24; // type:function size:0xB4 scope:local +cbForStateGettingError = .text:0x8032ACD8; // type:function size:0x264 scope:local +cbForUnrecoveredError = .text:0x8032AF3C; // type:function size:0x5C scope:local +cbForUnrecoveredErrorRetry = .text:0x8032AF98; // type:function size:0x80 scope:local +stateGoToRetry = .text:0x8032B018; // type:function size:0x28 scope:local +cbForStateGoToRetry = .text:0x8032B040; // type:function size:0x140 scope:local +stateCheckID = .text:0x8032B180; // type:function size:0xE0 scope:local +stateCheckID3 = .text:0x8032B260; // type:function size:0x34 scope:local +stateCheckID2a = .text:0x8032B294; // type:function size:0x34 scope:local +cbForStateCheckID2a = .text:0x8032B2C8; // type:function size:0x68 scope:local +stateCheckID2 = .text:0x8032B330; // type:function size:0x38 scope:local +cbForStateCheckID1 = .text:0x8032B368; // type:function size:0xFC scope:local +cbForStateCheckID2 = .text:0x8032B464; // type:function size:0xD8 scope:local +cbForStateCheckID3 = .text:0x8032B53C; // type:function size:0xF0 scope:local +AlarmHandler = .text:0x8032B62C; // type:function size:0x44 scope:local +stateCoverClosed = .text:0x8032B670; // type:function size:0xD4 scope:local +stateCoverClosed_CMD = .text:0x8032B744; // type:function size:0x30 scope:local +cbForStateCoverClosed = .text:0x8032B774; // type:function size:0x64 scope:local +stateMotorStopped = .text:0x8032B7D8; // type:function size:0x28 scope:local +cbForStateMotorStopped = .text:0x8032B800; // type:function size:0xEC scope:local +stateReady = .text:0x8032B8EC; // type:function size:0x2E8 scope:local +stateBusy = .text:0x8032BBD4; // type:function size:0x340 scope:local +cbForStateBusy = .text:0x8032BF14; // type:function size:0x658 scope:local +DVDReadAbsAsyncPrio = .text:0x8032C56C; // type:function size:0xDC scope:global +DVDReadAbsAsyncForBS = .text:0x8032C648; // type:function size:0xD0 scope:global +DVDReadDiskID = .text:0x8032C718; // type:function size:0xD4 scope:global +DVDCancelStreamAsync = .text:0x8032C7EC; // type:function size:0xBC scope:global +DVDInquiryAsync = .text:0x8032C8A8; // type:function size:0xD0 scope:global +DVDReset = .text:0x8032C978; // type:function size:0x44 scope:global +DVDGetCommandBlockStatus = .text:0x8032C9BC; // type:function size:0x4C scope:global +DVDGetDriveStatus = .text:0x8032CA08; // type:function size:0xAC scope:global +DVDSetAutoInvalidation = .text:0x8032CAB4; // type:function size:0x10 scope:global +DVDResume = .text:0x8032CAC4; // type:function size:0x50 scope:global +DVDCancelAsync = .text:0x8032CB14; // type:function size:0x27C scope:global +DVDCancel = .text:0x8032CD90; // type:function size:0xAC scope:global +cbForCancelSync = .text:0x8032CE3C; // type:function size:0x24 scope:local +DVDGetCurrentDiskID = .text:0x8032CE60; // type:function size:0x8 scope:global +DVDCheckDisk = .text:0x8032CE68; // type:function size:0xF8 scope:global +__DVDPrepareResetAsync = .text:0x8032CF60; // type:function size:0x11C scope:global +__DVDTestAlarm = .text:0x8032D07C; // type:function size:0x38 scope:global +__DVDClearWaitingQueue = .text:0x8032D0B4; // type:function size:0x38 scope:global +__DVDPushWaitingQueue = .text:0x8032D0EC; // type:function size:0x68 scope:global +__DVDPopWaitingQueue = .text:0x8032D154; // type:function size:0xA0 scope:global +__DVDCheckWaitingQueue = .text:0x8032D1F4; // type:function size:0x58 scope:global +__DVDDequeueWaitingQueue = .text:0x8032D24C; // type:function size:0x60 scope:global +ErrorCode2Num = .text:0x8032D2AC; // type:function size:0x11C scope:local +__DVDStoreErrorCode = .text:0x8032D3C8; // type:function size:0x7C scope:global +DVDCompareDiskID = .text:0x8032D444; // type:function size:0xF8 scope:global +__DVDPrintFatalMessage = .text:0x8032D53C; // type:function size:0x30 scope:global +cb = .text:0x8032D56C; // type:function size:0xD8 scope:local +__fstLoad = .text:0x8032D644; // type:function size:0x168 scope:global +__DVDInitWA = .text:0x8032D7AC; // type:function size:0x40 scope:global +__DVDInterruptHandler = .text:0x8032D7EC; // type:function size:0x2E0 scope:global +AlarmHandler = .text:0x8032DACC; // type:function size:0x84 scope:local +AlarmHandlerForTimeout = .text:0x8032DB50; // type:function size:0x70 scope:local +Read = .text:0x8032DBC0; // type:function size:0x110 scope:local +SeekTwiceBeforeRead = .text:0x8032DCD0; // type:function size:0x80 scope:local +DVDLowRead = .text:0x8032DD50; // type:function size:0x298 scope:global +DVDLowSeek = .text:0x8032DFE8; // type:function size:0x94 scope:global +DVDLowWaitCoverClose = .text:0x8032E07C; // type:function size:0x2C scope:global +DVDLowReadDiskID = .text:0x8032E0A8; // type:function size:0xA4 scope:global +DVDLowStopMotor = .text:0x8032E14C; // type:function size:0x8C scope:global +DVDLowRequestError = .text:0x8032E1D8; // type:function size:0x8C scope:global +DVDLowInquiry = .text:0x8032E264; // type:function size:0x9C scope:global +DVDLowAudioStream = .text:0x8032E300; // type:function size:0x98 scope:global +DVDLowRequestAudioStatus = .text:0x8032E398; // type:function size:0x8C scope:global +DVDLowAudioBufferConfig = .text:0x8032E424; // type:function size:0x9C scope:global +DVDLowReset = .text:0x8032E4C0; // type:function size:0xBC scope:global +DVDLowBreak = .text:0x8032E57C; // type:function size:0x14 scope:global +DVDLowClearCallback = .text:0x8032E590; // type:function size:0x1C scope:global +__DVDLowSetWAType = .text:0x8032E5AC; // type:function size:0x44 scope:global +__DVDLowTestAlarm = .text:0x8032E5F0; // type:function size:0x38 scope:global +__VIRetraceHandler = .text:0x8032E628; // type:function size:0x274 scope:local +VISetPreRetraceCallback = .text:0x8032E89C; // type:function size:0x44 scope:global +VISetPostRetraceCallback = .text:0x8032E8E0; // type:function size:0x44 scope:global +getTiming = .text:0x8032E924; // type:function size:0xA8 scope:local +__VIInit = .text:0x8032E9CC; // type:function size:0x204 scope:global +VIInit = .text:0x8032EBD0; // type:function size:0x4B0 scope:global +VIWaitForRetrace = .text:0x8032F080; // type:function size:0x54 scope:global +setFbbRegs = .text:0x8032F0D4; // type:function size:0x2D4 scope:local +setVerticalRegs = .text:0x8032F3A8; // type:function size:0x1A0 scope:local +VIConfigure = .text:0x8032F548; // type:function size:0x808 scope:global +VIFlush = .text:0x8032FD50; // type:function size:0x130 scope:global +VISetNextFrameBuffer = .text:0x8032FE80; // type:function size:0x6C scope:global +VISetBlack = .text:0x8032FEEC; // type:function size:0x7C scope:global +VIGetRetraceCount = .text:0x8032FF68; // type:function size:0x8 scope:global +GetCurrentDisplayPosition = .text:0x8032FF70; // type:function size:0x3C scope:local +getCurrentFieldEvenOdd = .text:0x8032FFAC; // type:function size:0x68 scope:local +VIGetNextField = .text:0x80330014; // type:function size:0x9C scope:global +VIGetCurrentLine = .text:0x803300B0; // type:function size:0x98 scope:global +VIGetTvFormat = .text:0x80330148; // type:function size:0x68 scope:global +VIGetDTVStatus = .text:0x803301B0; // type:function size:0x3C scope:global +__VIDisplayPositionToXY = .text:0x803301EC; // type:function size:0x21C scope:global +__VIGetCurrentPosition = .text:0x80330408; // type:function size:0x60 scope:global +ClampStick = .text:0x80330468; // type:function size:0x130 scope:local +PADClamp = .text:0x80330598; // type:function size:0x114 scope:global +UpdateOrigin = .text:0x803306AC; // type:function size:0x1A4 scope:local +PADOriginCallback = .text:0x80330850; // type:function size:0xC4 scope:local +PADOriginUpdateCallback = .text:0x80330914; // type:function size:0xCC scope:local +PADProbeCallback = .text:0x803309E0; // type:function size:0xD8 scope:local +PADTypeAndStatusCallback = .text:0x80330AB8; // type:function size:0x32C scope:local +PADReceiveCheckCallback = .text:0x80330DE4; // type:function size:0x140 scope:local +PADReset = .text:0x80330F24; // type:function size:0x110 scope:global +PADRecalibrate = .text:0x80331034; // type:function size:0x114 scope:global +PADInit = .text:0x80331148; // type:function size:0x150 scope:global +PADRead = .text:0x80331298; // type:function size:0x300 scope:global +PADControlAllMotors = .text:0x80331598; // type:function size:0xCC scope:global +PADControlMotor = .text:0x80331664; // type:function size:0xB8 scope:global +PADSetSpec = .text:0x8033171C; // type:function size:0x60 scope:global +SPEC0_MakeStatus = .text:0x8033177C; // type:function size:0x174 scope:local +SPEC1_MakeStatus = .text:0x803318F0; // type:function size:0x174 scope:local +SPEC2_MakeStatus = .text:0x80331A64; // type:function size:0x470 scope:local +PADSetAnalogMode = .text:0x80331ED4; // type:function size:0x74 scope:global +OnReset = .text:0x80331F48; // type:function size:0xBC scope:local +SamplingHandler = .text:0x80332004; // type:function size:0x60 scope:local +PADSetSamplingCallback = .text:0x80332064; // type:function size:0x54 scope:global +__PADDisableRecalibration = .text:0x803320B8; // type:function size:0x7C scope:global +AIRegisterDMACallback = .text:0x80332134; // type:function size:0x44 scope:global +AIInitDMA = .text:0x80332178; // type:function size:0x88 scope:global +AIStartDMA = .text:0x80332200; // type:function size:0x18 scope:global +AIStopDMA = .text:0x80332218; // type:function size:0x18 scope:global +AISetStreamPlayState = .text:0x80332230; // type:function size:0xD8 scope:global +AIGetStreamPlayState = .text:0x80332308; // type:function size:0x10 scope:global +AISetDSPSampleRate = .text:0x80332318; // type:function size:0xE0 scope:global +AIGetDSPSampleRate = .text:0x803323F8; // type:function size:0x14 scope:global +__AI_set_stream_sample_rate = .text:0x8033240C; // type:function size:0xD4 scope:local +AIGetStreamSampleRate = .text:0x803324E0; // type:function size:0x10 scope:global +AISetStreamVolLeft = .text:0x803324F0; // type:function size:0x1C scope:global +AIGetStreamVolLeft = .text:0x8033250C; // type:function size:0x10 scope:global +AISetStreamVolRight = .text:0x8033251C; // type:function size:0x1C scope:global +AIGetStreamVolRight = .text:0x80332538; // type:function size:0x10 scope:global +AIInit = .text:0x80332548; // type:function size:0x16C scope:global +__AISHandler = .text:0x803326B4; // type:function size:0x7C scope:local +__AIDHandler = .text:0x80332730; // type:function size:0xAC scope:local +__AICallbackStackSwitch = .text:0x803327DC; // type:function size:0x58 scope:local +__AI_SRC_INIT = .text:0x80332834; // type:function size:0x1E4 scope:local +ARRegisterDMACallback = .text:0x80332A18; // type:function size:0x44 scope:global +ARGetDMAStatus = .text:0x80332A5C; // type:function size:0x3C scope:global +ARStartDMA = .text:0x80332A98; // type:function size:0xF0 scope:global +ARInit = .text:0x80332B88; // type:function size:0xC4 scope:global +ARGetBaseAddress = .text:0x80332C4C; // type:function size:0x8 scope:global +__ARHandler = .text:0x80332C54; // type:function size:0x78 scope:local +__ARClearInterrupt = .text:0x80332CCC; // type:function size:0x20 scope:global +__ARGetInterruptStatus = .text:0x80332CEC; // type:function size:0x10 scope:global +__ARChecksize = .text:0x80332CFC; // type:function size:0x17F4 scope:local +IsCard = .text:0x803344F0; // type:function size:0xCC scope:local +CARDProbeEx = .text:0x803345BC; // type:function size:0x17C scope:global +DoMount = .text:0x80334738; // type:function size:0x454 scope:local +__CARDMountCallback = .text:0x80334B8C; // type:function size:0x138 scope:global +CARDMountAsync = .text:0x80334CC4; // type:function size:0x1A0 scope:global +CARDMount = .text:0x80334E64; // type:function size:0x48 scope:global +DoUnmount = .text:0x80334EAC; // type:function size:0x9C scope:local +CARDUnmount = .text:0x80334F48; // type:function size:0xAC scope:global +CARDSetAttributesAsync = .text:0x80334FF4; // type:function size:0xE4 scope:global +CARDSetAttributes = .text:0x803350D8; // type:function size:0x48 scope:global +__CARDDefaultApiCallback = .text:0x80335120; // type:function size:0x4 scope:global +__CARDSyncCallback = .text:0x80335124; // type:function size:0x34 scope:global +__CARDExtHandler = .text:0x80335158; // type:function size:0xD8 scope:global +__CARDExiHandler = .text:0x80335230; // type:function size:0x118 scope:global +__CARDTxHandler = .text:0x80335348; // type:function size:0xA8 scope:global +__CARDUnlockedHandler = .text:0x803353F0; // type:function size:0x84 scope:global +__CARDEnableInterrupt = .text:0x80335474; // type:function size:0xC0 scope:global +__CARDReadStatus = .text:0x80335534; // type:function size:0xF0 scope:global +__CARDReadVendorID = .text:0x80335624; // type:function size:0xF0 scope:global +__CARDClearStatus = .text:0x80335714; // type:function size:0xAC scope:global +TimeoutHandler = .text:0x803357C0; // type:function size:0xA4 scope:local +Retry = .text:0x80335864; // type:function size:0x2A0 scope:local +UnlockedCallback = .text:0x80335B04; // type:function size:0x110 scope:local +__CARDStart = .text:0x80335C14; // type:function size:0x224 scope:local +__CARDReadSegment = .text:0x80335E38; // type:function size:0x134 scope:global +__CARDWritePage = .text:0x80335F6C; // type:function size:0x13C scope:global +__CARDEraseSector = .text:0x803360A8; // type:function size:0x110 scope:global +CARDInit = .text:0x803361B8; // type:function size:0xAC scope:global +__CARDGetFontEncode = .text:0x80336264; // type:function size:0x8 scope:global +__CARDSetDiskID = .text:0x8033626C; // type:function size:0x38 scope:global +__CARDGetControlBlock = .text:0x803362A4; // type:function size:0xB8 scope:global +__CARDPutControlBlock = .text:0x8033635C; // type:function size:0x64 scope:global +CARDFreeBlocks = .text:0x803363C0; // type:function size:0x150 scope:global +CARDGetSectorSize = .text:0x80336510; // type:function size:0x84 scope:global +__CARDSync = .text:0x80336594; // type:function size:0x98 scope:global +OnReset = .text:0x8033662C; // type:function size:0x50 scope:local +CARDGetFastMode = .text:0x8033667C; // type:function size:0x1C scope:global +bitrev = .text:0x80336698; // type:function size:0x16C scope:local +ReadArrayUnlock = .text:0x80336804; // type:function size:0x144 scope:local +DummyLen = .text:0x80336948; // type:function size:0xC4 scope:local +__CARDUnlock = .text:0x80336A0C; // type:function size:0xB58 scope:global +InitCallback = .text:0x80337564; // type:function size:0x70 scope:local +DoneCallback = .text:0x803375D4; // type:function size:0x324 scope:local +BlockReadCallback = .text:0x803378F8; // type:function size:0xDC scope:local +__CARDRead = .text:0x803379D4; // type:function size:0x64 scope:global +BlockWriteCallback = .text:0x80337A38; // type:function size:0xE8 scope:local +__CARDWrite = .text:0x80337B20; // type:function size:0x68 scope:global +__CARDGetFatBlock = .text:0x80337B88; // type:function size:0x8 scope:global +WriteCallback = .text:0x80337B90; // type:function size:0xD4 scope:local +EraseCallback = .text:0x80337C64; // type:function size:0xC8 scope:local +__CARDAllocBlock = .text:0x80337D2C; // type:function size:0x118 scope:global +__CARDFreeBlock = .text:0x80337E44; // type:function size:0x9C scope:global +__CARDUpdateFatBlock = .text:0x80337EE0; // type:function size:0xAC scope:global +__CARDGetDirBlock = .text:0x80337F8C; // type:function size:0x8 scope:global +WriteCallback = .text:0x80337F94; // type:function size:0xD0 scope:local +EraseCallback = .text:0x80338064; // type:function size:0xC8 scope:local +__CARDUpdateDir = .text:0x8033812C; // type:function size:0xC4 scope:global +__CARDCheckSum = .text:0x803381F0; // type:function size:0x1B0 scope:global +VerifyID = .text:0x803383A0; // type:function size:0x284 scope:local +VerifyDir = .text:0x80338624; // type:function size:0x240 scope:local +VerifyFAT = .text:0x80338864; // type:function size:0x284 scope:local +__CARDVerify = .text:0x80338AE8; // type:function size:0x8C scope:global +CARDCheckExAsync = .text:0x80338B74; // type:function size:0x590 scope:global +CARDCheck = .text:0x80339104; // type:function size:0x54 scope:global +__CARDGetStatusEx = .text:0x80339158; // type:function size:0xA4 scope:global +__CARDSetStatusExAsync = .text:0x803391FC; // type:function size:0x29C scope:global +__CARDCompareFileName = .text:0x80339498; // type:function size:0x68 scope:global +__CARDAccess = .text:0x80339500; // type:function size:0x94 scope:global +__CARDIsWritable = .text:0x80339594; // type:function size:0x134 scope:global +__CARDIsReadable = .text:0x803396C8; // type:function size:0xF4 scope:global +__CARDGetFileNo = .text:0x803397BC; // type:function size:0x150 scope:global +CARDFastOpen = .text:0x8033990C; // type:function size:0x104 scope:global +CARDOpen = .text:0x80339A10; // type:function size:0x11C scope:global +CARDClose = .text:0x80339B2C; // type:function size:0x54 scope:global +__CARDIsOpened = .text:0x80339B80; // type:function size:0x8 scope:global +__GXDefaultTexRegionCallback = .text:0x80339B88; // type:function size:0xFC scope:local +__GXDefaultTlutRegionCallback = .text:0x80339C84; // type:function size:0x24 scope:local +__GXShutdown = .text:0x80339CA8; // type:function size:0x190 scope:local +__GXInitRevisionBits = .text:0x80339E38; // type:function size:0x1A4 scope:global +GXInit = .text:0x80339FDC; // type:function size:0x600 scope:global +__GXInitGX = .text:0x8033A5DC; // type:function size:0x938 scope:global +GXCPInterruptHandler = .text:0x8033AF14; // type:function size:0x134 scope:local +GXInitFifoBase = .text:0x8033B048; // type:function size:0x6C scope:global +GXInitFifoPtrs = .text:0x8033B0B4; // type:function size:0x70 scope:global +GXInitFifoLimits = .text:0x8033B124; // type:function size:0xC scope:global +GXSetCPUFifo = .text:0x8033B130; // type:function size:0x128 scope:global +GXSetGPFifo = .text:0x8033B258; // type:function size:0x1A0 scope:global +GXSaveCPUFifo = .text:0x8033B3F8; // type:function size:0x34 scope:global +__GXSaveCPUFifoAux = .text:0x8033B42C; // type:function size:0xC8 scope:global +GXGetGPStatus = .text:0x8033B4F4; // type:function size:0x50 scope:global +GXSetBreakPtCallback = .text:0x8033B544; // type:function size:0x44 scope:global +__GXFifoInit = .text:0x8033B588; // type:function size:0x4C scope:global +__GXFifoReadEnable = .text:0x8033B5D4; // type:function size:0x24 scope:local +__GXFifoReadDisable = .text:0x8033B5F8; // type:function size:0x24 scope:local +__GXFifoLink = .text:0x8033B61C; // type:function size:0x34 scope:local +__GXWriteFifoIntEnable = .text:0x8033B650; // type:function size:0x30 scope:local +__GXWriteFifoIntReset = .text:0x8033B680; // type:function size:0x30 scope:local +GXGetCPUFifo = .text:0x8033B6B0; // type:function size:0x8 scope:global +GXGetGPFifo = .text:0x8033B6B8; // type:function size:0x8 scope:global +GXSetVtxDesc = .text:0x8033B6C0; // type:function size:0x26C scope:global +GXSetVtxDescv = .text:0x8033B92C; // type:function size:0x288 scope:global +__GXSetVCD = .text:0x8033BBB4; // type:function size:0xBC scope:global +__GXCalculateVLim = .text:0x8033BC70; // type:function size:0x124 scope:global +GXGetVtxDesc = .text:0x8033BD94; // type:function size:0x1B4 scope:global +GXClearVtxDesc = .text:0x8033BF48; // type:function size:0x38 scope:global +GXSetVtxAttrFmt = .text:0x8033BF80; // type:function size:0x25C scope:global +GXSetVtxAttrFmtv = .text:0x8033C1DC; // type:function size:0x280 scope:global +__GXSetVAT = .text:0x8033C45C; // type:function size:0x88 scope:global +GXGetVtxAttrFmt = .text:0x8033C4E4; // type:function size:0x280 scope:global +GXSetArray = .text:0x8033C764; // type:function size:0x44 scope:global +GXInvalidateVtxCache = .text:0x8033C7A8; // type:function size:0x10 scope:global +GXSetTexCoordGen2 = .text:0x8033C7B8; // type:function size:0x280 scope:global +GXSetNumTexGens = .text:0x8033CA38; // type:function size:0x3C scope:global +GXSetMisc = .text:0x8033CA74; // type:function size:0x94 scope:global +GXFlush = .text:0x8033CB08; // type:function size:0x5C scope:global +GXResetWriteGatherPipe = .text:0x8033CB64; // type:function size:0x34 scope:global +__GXAbort = .text:0x8033CB98; // type:function size:0x16C scope:global +GXSetDrawSync = .text:0x8033CD04; // type:function size:0xB4 scope:global +GXReadDrawSync = .text:0x8033CDB8; // type:function size:0xC scope:global +GXSetDrawDone = .text:0x8033CDC4; // type:function size:0x98 scope:global +GXDrawDone = .text:0x8033CE5C; // type:function size:0x80 scope:global +GXPixModeSync = .text:0x8033CEDC; // type:function size:0x24 scope:global +GXPokeAlphaMode = .text:0x8033CF00; // type:function size:0x14 scope:global +GXPokeAlphaRead = .text:0x8033CF14; // type:function size:0x20 scope:global +GXPokeAlphaUpdate = .text:0x8033CF34; // type:function size:0x18 scope:global +GXPokeBlendMode = .text:0x8033CF4C; // type:function size:0x64 scope:global +GXPokeColorUpdate = .text:0x8033CFB0; // type:function size:0x18 scope:global +GXPokeDstAlpha = .text:0x8033CFC8; // type:function size:0x24 scope:global +GXPokeDither = .text:0x8033CFEC; // type:function size:0x18 scope:global +GXPokeZMode = .text:0x8033D004; // type:function size:0x20 scope:global +GXSetDrawSyncCallback = .text:0x8033D024; // type:function size:0x44 scope:global +GXTokenInterruptHandler = .text:0x8033D068; // type:function size:0x88 scope:local +GXSetDrawDoneCallback = .text:0x8033D0F0; // type:function size:0x44 scope:global +GXFinishInterruptHandler = .text:0x8033D134; // type:function size:0x80 scope:local +__GXPEInit = .text:0x8033D1B4; // type:function size:0x74 scope:global +__GXSetDirtyState = .text:0x8033D228; // type:function size:0x80 scope:global +GXBegin = .text:0x8033D2A8; // type:function size:0xD0 scope:global +__GXSendFlushPrim = .text:0x8033D378; // type:function size:0x88 scope:global +GXSetLineWidth = .text:0x8033D400; // type:function size:0x40 scope:global +GXSetPointSize = .text:0x8033D440; // type:function size:0x40 scope:global +GXEnableTexOffsets = .text:0x8033D480; // type:function size:0x48 scope:global +GXSetCullMode = .text:0x8033D4C8; // type:function size:0x28 scope:global +GXSetCoPlanar = .text:0x8033D4F0; // type:function size:0x34 scope:global +__GXSetGenMode = .text:0x8033D524; // type:function size:0x24 scope:global +GXAdjustForOverscan = .text:0x8033D548; // type:function size:0x144 scope:global +GXSetDispCopySrc = .text:0x8033D68C; // type:function size:0x7C scope:global +GXSetTexCopySrc = .text:0x8033D708; // type:function size:0x7C scope:global +GXSetDispCopyDst = .text:0x8033D784; // type:function size:0x34 scope:global +GXSetTexCopyDst = .text:0x8033D7B8; // type:function size:0x130 scope:global +GXSetDispCopyFrame2Field = .text:0x8033D8E8; // type:function size:0x24 scope:global +GXSetCopyClamp = .text:0x8033D90C; // type:function size:0x58 scope:global +GXSetDispCopyYScale = .text:0x8033D964; // type:function size:0xCC scope:global +GXSetCopyClear = .text:0x8033DA30; // type:function size:0x78 scope:global +GXSetCopyFilter = .text:0x8033DAA8; // type:function size:0x208 scope:global +GXSetDispCopyGamma = .text:0x8033DCB0; // type:function size:0x14 scope:global +GXCopyDisp = .text:0x8033DCC4; // type:function size:0x168 scope:global +GXCopyTex = .text:0x8033DE2C; // type:function size:0x18C scope:global +GXClearBoundingBox = .text:0x8033DFB8; // type:function size:0x38 scope:global +GXInitLightAttnA = .text:0x8033DFF0; // type:function size:0x10 scope:global +GXInitLightAttnK = .text:0x8033E000; // type:function size:0x10 scope:global +GXInitLightSpot = .text:0x8033E010; // type:function size:0x190 scope:global +GXInitLightPos = .text:0x8033E1A0; // type:function size:0x10 scope:global +GXInitLightDir = .text:0x8033E1B0; // type:function size:0x1C scope:global +GXInitLightColor = .text:0x8033E1CC; // type:function size:0xC scope:global +GXLoadLightObjImm = .text:0x8033E1D8; // type:function size:0x7C scope:global +GXSetChanAmbColor = .text:0x8033E254; // type:function size:0xE8 scope:global +GXSetChanMatColor = .text:0x8033E33C; // type:function size:0xE8 scope:global +GXSetNumChans = .text:0x8033E424; // type:function size:0x3C scope:global +GXSetChanCtrl = .text:0x8033E460; // type:function size:0xB0 scope:global +__GXGetTexTileShift = .text:0x8033E510; // type:function size:0x64 scope:local +GXGetTexBufferSize = .text:0x8033E574; // type:function size:0x15C scope:global +__GetImageTileCount = .text:0x8033E6D0; // type:function size:0xC8 scope:global +GXInitTexObj = .text:0x8033E798; // type:function size:0x24C scope:global +GXInitTexObjCI = .text:0x8033E9E4; // type:function size:0x48 scope:global +GXInitTexObjLOD = .text:0x8033EA2C; // type:function size:0x164 scope:global +GXGetTexObjData = .text:0x8033EB90; // type:function size:0xC scope:global +GXGetTexObjWidth = .text:0x8033EB9C; // type:function size:0x10 scope:global +GXGetTexObjHeight = .text:0x8033EBAC; // type:function size:0x10 scope:global +GXGetTexObjFmt = .text:0x8033EBBC; // type:function size:0x8 scope:global +GXGetTexObjMipMap = .text:0x8033EBC4; // type:function size:0x18 scope:global +GXLoadTexObjPreLoaded = .text:0x8033EBDC; // type:function size:0x17C scope:global +GXLoadTexObj = .text:0x8033ED58; // type:function size:0x54 scope:global +GXInitTlutObj = .text:0x8033EDAC; // type:function size:0x38 scope:global +GXLoadTlut = .text:0x8033EDE4; // type:function size:0x98 scope:global +GXInitTexCacheRegion = .text:0x8033EE7C; // type:function size:0xF4 scope:global +GXInitTlutRegion = .text:0x8033EF70; // type:function size:0x38 scope:global +GXInvalidateTexAll = .text:0x8033EFA8; // type:function size:0x48 scope:global +GXSetTexRegionCallback = .text:0x8033EFF0; // type:function size:0x14 scope:global +GXSetTlutRegionCallback = .text:0x8033F004; // type:function size:0x14 scope:global +__SetSURegs = .text:0x8033F018; // type:function size:0xA0 scope:local +__GXSetSUTexRegs = .text:0x8033F0B8; // type:function size:0x17C scope:global +__GXSetTmemConfig = .text:0x8033F234; // type:function size:0x354 scope:global +GXSetTevIndirect = .text:0x8033F588; // type:function size:0x6C scope:global +GXSetIndTexMtx = .text:0x8033F5F4; // type:function size:0x178 scope:global +GXSetIndTexCoordScale = .text:0x8033F76C; // type:function size:0x144 scope:global +GXSetIndTexOrder = .text:0x8033F8B0; // type:function size:0xEC scope:global +GXSetNumIndStages = .text:0x8033F99C; // type:function size:0x24 scope:global +GXSetTevDirect = .text:0x8033F9C0; // type:function size:0x48 scope:global +GXSetTevIndRepeat = .text:0x8033FA08; // type:function size:0x48 scope:global +__GXUpdateBPMask = .text:0x8033FA50; // type:function size:0x4 scope:global +__GXSetIndirectMask = .text:0x8033FA54; // type:function size:0x30 scope:global +__GXFlushTextureState = .text:0x8033FA84; // type:function size:0x24 scope:global +GXSetTevOp = .text:0x8033FAA8; // type:function size:0x8C scope:global +GXSetTevColorIn = .text:0x8033FB34; // type:function size:0x44 scope:global +GXSetTevAlphaIn = .text:0x8033FB78; // type:function size:0x44 scope:global +GXSetTevColorOp = .text:0x8033FBBC; // type:function size:0x68 scope:global +GXSetTevAlphaOp = .text:0x8033FC24; // type:function size:0x68 scope:global +GXSetTevKColor = .text:0x8033FC8C; // type:function size:0x64 scope:global +GXSetTevKColorSel = .text:0x8033FCF0; // type:function size:0x5C scope:global +GXSetTevKAlphaSel = .text:0x8033FD4C; // type:function size:0x5C scope:global +GXSetTevSwapMode = .text:0x8033FDA8; // type:function size:0x48 scope:global +GXSetTevSwapModeTable = .text:0x8033FDF0; // type:function size:0x80 scope:global +GXSetAlphaCompare = .text:0x8033FE70; // type:function size:0x44 scope:global +GXSetZTexture = .text:0x8033FEB4; // type:function size:0x8C scope:global +GXSetTevOrder = .text:0x8033FF40; // type:function size:0x19C scope:global +GXSetNumTevStages = .text:0x803400DC; // type:function size:0x28 scope:global +GXSetFog = .text:0x80340104; // type:function size:0x214 scope:global +GXSetFogRangeAdj = .text:0x80340318; // type:function size:0x124 scope:global +GXSetBlendMode = .text:0x8034043C; // type:function size:0x54 scope:global +GXSetColorUpdate = .text:0x80340490; // type:function size:0x2C scope:global +GXSetAlphaUpdate = .text:0x803404BC; // type:function size:0x2C scope:global +GXSetZMode = .text:0x803404E8; // type:function size:0x34 scope:global +GXSetZCompLoc = .text:0x8034051C; // type:function size:0x34 scope:global +GXSetPixelFmt = .text:0x80340550; // type:function size:0xD4 scope:global +GXSetDither = .text:0x80340624; // type:function size:0x2C scope:global +GXSetDstAlpha = .text:0x80340650; // type:function size:0x3C scope:global +GXSetFieldMask = .text:0x8034068C; // type:function size:0x38 scope:global +GXSetFieldMode = .text:0x803406C4; // type:function size:0x78 scope:global +GXBeginDisplayList = .text:0x8034073C; // type:function size:0xCC scope:global +GXEndDisplayList = .text:0x80340808; // type:function size:0xC4 scope:global +GXCallDisplayList = .text:0x803408CC; // type:function size:0x70 scope:global +GXSetProjection = .text:0x8034093C; // type:function size:0xA4 scope:global +GXSetProjectionv = .text:0x803409E0; // type:function size:0x8C scope:global +GXLoadPosMtxImm = .text:0x80340A6C; // type:function size:0x50 scope:global +GXLoadNrmMtxImm = .text:0x80340ABC; // type:function size:0x50 scope:global +GXSetCurrentMtx = .text:0x80340B0C; // type:function size:0x34 scope:global +GXLoadTexMtxImm = .text:0x80340B40; // type:function size:0xB4 scope:global +__GXSetViewport = .text:0x80340BF4; // type:function size:0x90 scope:global +GXSetViewportJitter = .text:0x80340C84; // type:function size:0x58 scope:global +GXSetViewport = .text:0x80340CDC; // type:function size:0x48 scope:global +GXSetScissor = .text:0x80340D24; // type:function size:0x78 scope:global +GXSetScissorBoxOffset = .text:0x80340D9C; // type:function size:0x40 scope:global +GXSetClipMode = .text:0x80340DDC; // type:function size:0x28 scope:global +__GXSetMatrixIndex = .text:0x80340E04; // type:function size:0x84 scope:global +GXSetGPMetric = .text:0x80340E88; // type:function size:0x848 scope:global +GXReadGPMetric = .text:0x803416D0; // type:function size:0x1A8 scope:global +GXClearGPMetric = .text:0x80341878; // type:function size:0x10 scope:global +GXReadPixMetric = .text:0x80341888; // type:function size:0x138 scope:global +GXClearPixMetric = .text:0x803419C0; // type:function size:0x30 scope:global +GXReadXfRasMetric = .text:0x803419F0; // type:function size:0xC4 scope:global +SetExiInterruptMask = .text:0x80341AB4; // type:function size:0xF4 scope:local +EXIImm = .text:0x80341BA8; // type:function size:0x25C scope:global +EXIImmEx = .text:0x80341E04; // type:function size:0xA0 scope:global +EXIDma = .text:0x80341EA4; // type:function size:0xEC scope:global +EXISync = .text:0x80341F90; // type:function size:0x24C scope:global +EXIClearInterrupts = .text:0x803421DC; // type:function size:0x48 scope:global +EXISetExiCallback = .text:0x80342224; // type:function size:0x7C scope:global +__EXIProbe = .text:0x803422A0; // type:function size:0x174 scope:local +EXIProbe = .text:0x80342414; // type:function size:0x80 scope:global +EXIProbeEx = .text:0x80342494; // type:function size:0xB4 scope:global +EXIAttach = .text:0x80342548; // type:function size:0x10C scope:global +EXIDetach = .text:0x80342654; // type:function size:0xBC scope:global +EXISelect = .text:0x80342710; // type:function size:0x12C scope:global +EXIDeselect = .text:0x8034283C; // type:function size:0x110 scope:global +EXIIntrruptHandler = .text:0x8034294C; // type:function size:0xC8 scope:local +TCIntrruptHandler = .text:0x80342A14; // type:function size:0x218 scope:local +EXTIntrruptHandler = .text:0x80342C2C; // type:function size:0xD0 scope:local +EXIInit = .text:0x80342CFC; // type:function size:0x1D4 scope:global +EXILock = .text:0x80342ED0; // type:function size:0xF4 scope:global +EXIUnlock = .text:0x80342FC4; // type:function size:0xDC scope:global +EXIGetState = .text:0x803430A0; // type:function size:0x18 scope:global +UnlockedHandler = .text:0x803430B8; // type:function size:0x28 scope:local +EXIGetID = .text:0x803430E0; // type:function size:0x3B0 scope:global +ProbeBarnacle = .text:0x80343490; // type:function size:0x18C scope:local +__OSEnableBarnacle = .text:0x8034361C; // type:function size:0x1BC scope:global +InitializeUART = .text:0x803437D8; // type:function size:0x70 scope:global +WriteUARTN = .text:0x80343848; // type:function size:0x200 scope:global +SIBusy = .text:0x80343A48; // type:function size:0x20 scope:global +SIIsChanBusy = .text:0x80343A68; // type:function size:0x3C scope:global +CompleteTransfer = .text:0x80343AA4; // type:function size:0x2FC scope:local +SIInterruptHandler = .text:0x80343DA0; // type:function size:0x344 scope:local +SIEnablePollingInterrupt = .text:0x803440E4; // type:function size:0x98 scope:local +SIRegisterPollingHandler = .text:0x8034417C; // type:function size:0xCC scope:global +SIUnregisterPollingHandler = .text:0x80344248; // type:function size:0xF4 scope:global +SIInit = .text:0x8034433C; // type:function size:0xB4 scope:global +__SITransfer = .text:0x803443F0; // type:function size:0x20C scope:local +SIGetStatus = .text:0x803445FC; // type:function size:0x7C scope:global +SISetCommand = .text:0x80344678; // type:function size:0x14 scope:global +SITransferCommands = .text:0x8034468C; // type:function size:0x10 scope:global +SISetXY = .text:0x8034469C; // type:function size:0x6C scope:global +SIEnablePolling = .text:0x80344708; // type:function size:0x9C scope:global +SIDisablePolling = .text:0x803447A4; // type:function size:0x6C scope:global +SIGetResponseRaw = .text:0x80344810; // type:function size:0xD4 scope:local +SIGetResponse = .text:0x803448E4; // type:function size:0xC4 scope:global +AlarmHandler = .text:0x803449A8; // type:function size:0x8C scope:local +SITransfer = .text:0x80344A34; // type:function size:0x16C scope:global +GetTypeCallback = .text:0x80344BA0; // type:function size:0x298 scope:local +SIGetType = .text:0x80344E38; // type:function size:0x1C4 scope:global +SIGetTypeAsync = .text:0x80344FFC; // type:function size:0x13C scope:global +SIDecodeType = .text:0x80345138; // type:function size:0x14C scope:global +SIProbe = .text:0x80345284; // type:function size:0x24 scope:global +SISetSamplingRate = .text:0x803452A8; // type:function size:0xE4 scope:global +SIRefreshSamplingRate = .text:0x8034538C; // type:function size:0x24 scope:global +DefaultCallback = .text:0x803453B0; // type:function size:0x4 scope:local +ResetProc = .text:0x803453B4; // type:function size:0x48 scope:local +SIResetSteeringAsync = .text:0x803453FC; // type:function size:0xB4 scope:global +OnReset = .text:0x803454B0; // type:function size:0xB4 scope:local +__SISteeringHandler = .text:0x80345564; // type:function size:0xF0 scope:local +TypeAndStatusCallback = .text:0x80345654; // type:function size:0x11C scope:local +__SISteeringTransfer = .text:0x80345770; // type:function size:0x74 scope:global +__SISteeringEnable = .text:0x803457E4; // type:function size:0x68 scope:global +__SISteeringDisable = .text:0x8034584C; // type:function size:0x40 scope:global +SIReadSteering = .text:0x8034588C; // type:function size:0x170 scope:global +SamplingHandler = .text:0x803459FC; // type:function size:0x60 scope:local +SISetSteeringSamplingCallback = .text:0x80345A5C; // type:function size:0x54 scope:global +SIControlSteering = .text:0x80345AB0; // type:function size:0xA0 scope:global +DBClose = .text:0x80345B50; // type:function size:0x4 scope:global +DBOpen = .text:0x80345B54; // type:function size:0x4 scope:global +DBWrite = .text:0x80345B58; // type:function size:0x260 scope:global +DBRead = .text:0x80345DB8; // type:function size:0x8C scope:global +DBQueryData = .text:0x80345E44; // type:function size:0x9C scope:global +DBInitInterrupts = .text:0x80345EE0; // type:function size:0x54 scope:global +DBInitComm = .text:0x80345F34; // type:function size:0x78 scope:global +DBGHandler = .text:0x80345FAC; // type:function size:0x40 scope:local +MWCallback = .text:0x80345FEC; // type:function size:0x3C scope:local +DBGReadStatus = .text:0x80346028; // type:function size:0xAC scope:local +DBGWrite = .text:0x803460D4; // type:function size:0xDC scope:local +DBGRead = .text:0x803461B0; // type:function size:0xDC scope:local +DBGReadMailbox = .text:0x8034628C; // type:function size:0xAC scope:local +DBGEXIImm = .text:0x80346338; // type:function size:0x298 scope:local +EXI2_CallBack = .text:0x803465D0; // type:function size:0x40 scope:local +EXI2_Init = .text:0x80346610; // type:function size:0xBC scope:global +EXI2_EnableInterrupts = .text:0x803466CC; // type:function size:0x2C scope:global +EXI2_Poll = .text:0x803466F8; // type:function size:0x108 scope:global +EXI2_ReadN = .text:0x80346800; // type:function size:0x2BC scope:global +EXI2_WriteN = .text:0x80346ABC; // type:function size:0x1B0 scope:global +EXI2_Reserve = .text:0x80346C6C; // type:function size:0x4 scope:global +EXI2_Unreserve = .text:0x80346C70; // type:function size:0x4 scope:global +AmcEXIImm = .text:0x80346C74; // type:function size:0x244 scope:global +AmcEXISync = .text:0x80346EB8; // type:function size:0x198 scope:global +AmcEXIClearInterrupts = .text:0x80347050; // type:function size:0x40 scope:global +AmcEXISetExiCallback = .text:0x80347090; // type:function size:0x6C scope:global +AmcEXISelect = .text:0x803470FC; // type:function size:0x80 scope:global +AmcEXIDeselect = .text:0x8034717C; // type:function size:0x68 scope:global +AmcDebugIntHandler = .text:0x803471E4; // type:function size:0x50 scope:local +AmcEXIEnableInterrupts = .text:0x80347234; // type:function size:0x40 scope:global +AmcEXIInit = .text:0x80347274; // type:function size:0x40 scope:global +gcc2_compiled. = .text:0x803472B4; // type:label scope:local +__Q24RCMP9AV_PLAYERPCciQ34RCMP9AV_PLAYER9LOAD_ENUMQ34RCMP9AV_PLAYER10SOUND_ENUM = .text:0x803472B4; // type:function size:0x98 scope:global +Init__Q24RCMP9AV_PLAYERPCciiiT1iiiQ34RCMP9AV_PLAYER9LOAD_ENUMQ34RCMP9AV_PLAYER10SOUND_ENUM = .text:0x8034734C; // type:function size:0x438 scope:global +_._Q24RCMP9AV_PLAYER = .text:0x80347784; // type:function size:0x1C8 scope:global +GetFirstFrame__Q24RCMP9AV_PLAYERUii = .text:0x8034794C; // type:function size:0x290 scope:global +GetFrame__Q24RCMP9AV_PLAYERf = .text:0x80347BDC; // type:function size:0x84 scope:global +IsTimeForDecode__Q24RCMP9AV_PLAYER = .text:0x80347C60; // type:function size:0x9C scope:global +IsAudioFinished__Q24RCMP9AV_PLAYER = .text:0x80347CFC; // type:function size:0x34 scope:global +SetSpeed__Q24RCMP9AV_PLAYERUi = .text:0x80347D30; // type:function size:0xFC scope:global +Pause__Q24RCMP9AV_PLAYER = .text:0x80347E2C; // type:function size:0x24 scope:global +UnPause__Q24RCMP9AV_PLAYER = .text:0x80347E50; // type:function size:0x24 scope:global +SetVol__Q24RCMP9AV_PLAYERUi = .text:0x80347E74; // type:function size:0x34 scope:global +SyncedAudioTime__Q24RCMP9AV_PLAYER = .text:0x80347EA8; // type:function size:0x128 scope:global +GetRCMPChunk__Q24RCMP9AV_PLAYERPQ24RCMP7DECODERPPQ24RCMP5CHUNK = .text:0x80347FD0; // type:function size:0x21C scope:global +StaticGetRCMPChunk__Q24RCMP9AV_PLAYERPQ24RCMP7DECODERPQ24RCMP8STREAMERPPQ24RCMP5CHUNK = .text:0x803481EC; // type:function size:0x2C scope:global +ReleaseRCMPChunk__Q24RCMP9AV_PLAYERPQ24RCMP5CHUNK = .text:0x80348218; // type:function size:0x28 scope:global +StaticReleaseRCMPChunk__Q24RCMP9AV_PLAYERPQ24RCMP7DECODERPQ24RCMP8STREAMERPQ24RCMP5CHUNK = .text:0x80348240; // type:function size:0x28 scope:global +Update__Q24RCMP11AV_MS_TIMER = .text:0x80348268; // type:function size:0xCC scope:global +gcc2_compiled. = .text:0x80348334; // type:label scope:local +__Q24RCMP12AUDIO_PLAYERii = .text:0x80348334; // type:function size:0xE8 scope:global +_._Q24RCMP12AUDIO_PLAYER = .text:0x8034841C; // type:function size:0x78 scope:global +SetSpeed__Q24RCMP12AUDIO_PLAYERUi = .text:0x80348494; // type:function size:0x5C scope:global +StartSound__Q24RCMP12AUDIO_PLAYER = .text:0x803484F0; // type:function size:0x58 scope:global +SetVol__Q24RCMP12AUDIO_PLAYERUi = .text:0x80348548; // type:function size:0x88 scope:global +IsAudioFinished__Q24RCMP12AUDIO_PLAYER = .text:0x803485D0; // type:function size:0x70 scope:global +gcc2_compiled. = .text:0x80348640; // type:label scope:local +DELETE_tBigYUVSwizzler__FP15tBigYUVSwizzler = .text:0x80348640; // type:function size:0x4C scope:global +NEW_tBigYUVSwizzlerTexture__FP9_GXTexObjN20 = .text:0x8034868C; // type:function size:0x1C8 scope:global +tBigYUVSwizzler_DrawSetup__FP15tBigYUVSwizzlerP9_GXTexObjN21 = .text:0x80348854; // type:function size:0x690 scope:global +gcc2_compiled. = .text:0x80348EE4; // type:label scope:local +CON_tTileSize2d__FP11tTileSize2dUlUlUlUl = .text:0x80348EE4; // type:function size:0x3C scope:local +CON_tPixAdr2d__FP9tPixAdr2dUlUlP11tTileSize2d = .text:0x80348F20; // type:function size:0x78 scope:local +GC_swizzleGetPixelOffset16__Fiii = .text:0x80348F98; // type:function size:0x30 scope:local +DELETE_tBigSwizzler__FP12tBigSwizzler = .text:0x80348FC8; // type:function size:0x60 scope:global +NEW_tBigSwizzlerTexture__FP9_GXTexObj = .text:0x80349028; // type:function size:0x374 scope:global +gcc2_compiled. = .text:0x8034939C; // type:label scope:local +__Q24RCMP11RCMP_SYSTEM = .text:0x8034939C; // type:function size:0x20 scope:global +__Q24RCMP7DECODERPCQ24RCMP11CODEC_IDATA = .text:0x803493BC; // type:function size:0x74 scope:global +_._Q24RCMP7DECODER = .text:0x80349430; // type:function size:0x58 scope:global +ChooseCodec__Q24RCMP7DECODERPQ24RCMP5CODECPQ24RCMP5CHUNK = .text:0x80349488; // type:function size:0x48 scope:global +FreeChosenCodec__Q24RCMP7DECODER = .text:0x803494D0; // type:function size:0x58 scope:global +GetCurrentFrameNumber__Q24RCMP7DECODER = .text:0x80349528; // type:function size:0x48 scope:global +GetFrameRate__Q24RCMP7DECODER = .text:0x80349570; // type:function size:0x4C scope:global +GetFrame__Q24RCMP7DECODERUi = .text:0x803495BC; // type:function size:0x8C scope:global +ReleaseFrame__Q24RCMP7DECODERPQ24RCMP5FRAME = .text:0x80349648; // type:function size:0x38 scope:global +GetChunk__Q24RCMP7DECODER = .text:0x80349680; // type:function size:0x58 scope:global +ReleaseChunk__Q24RCMP7DECODERPQ24RCMP5CHUNK = .text:0x803496D8; // type:function size:0x34 scope:global +__Q24RCMP5CHUNK = .text:0x8034970C; // type:function size:0x18 scope:global +__Q24RCMP11CODEC_IDATA = .text:0x80349724; // type:function size:0x20 scope:global +__Q24RCMP11CODEC_IDATAPQ24RCMP8STREAMERPFPQ24RCMP7DECODERPQ24RCMP8STREAMERPPQ24RCMP5CHUNK_vPFPQ24RCMP7DECODERPQ24RCMP8STREAMERPQ24RCMP5CHUNK_vUi = .text:0x80349744; // type:function size:0x18 scope:global +__static_initialization_and_destruction_0 = .text:0x8034975C; // type:function size:0x54 scope:local +_._Q24RCMP11RCMP_SYSTEM = .text:0x803497B0; // type:function size:0x34 scope:global +_GLOBAL_.I.__Q24RCMP11RCMP_SYSTEM = .text:0x803497E4; // type:function size:0x2C scope:local +_GLOBAL_.D.__Q24RCMP11RCMP_SYSTEM = .text:0x80349810; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x8034983C; // type:label scope:local +GetChunkType__FPQ24RCMP5CHUNK = .text:0x8034983C; // type:function size:0x20 scope:local +__9VP6_FRAMEUiUi = .text:0x8034985C; // type:function size:0x88 scope:global +_._9VP6_FRAME = .text:0x803498E4; // type:function size:0x6C scope:global +__18VP6_CODEC_INTERNAL = .text:0x80349950; // type:function size:0xBC scope:global +_._18VP6_CODEC_INTERNAL = .text:0x80349A0C; // type:function size:0x148 scope:global +Init__18VP6_CODEC_INTERNALPQ24RCMP7DECODERPQ24RCMP5CHUNK = .text:0x80349B54; // type:function size:0x18 scope:global +GetCurrentFrameNumber__18VP6_CODEC_INTERNAL = .text:0x80349B6C; // type:function size:0x8 scope:global +GetFrameRate__18VP6_CODEC_INTERNAL = .text:0x80349B74; // type:function size:0x8 scope:global +GetFrame__18VP6_CODEC_INTERNALUi = .text:0x80349B7C; // type:function size:0x2B4 scope:global +ReleaseFrame__18VP6_CODEC_INTERNALPQ24RCMP5FRAME = .text:0x80349E30; // type:function size:0x60 scope:global +DecodeChunk__18VP6_CODEC_INTERNALPQ24RCMP5CHUNK = .text:0x80349E90; // type:function size:0xEC scope:global +GetFrameFromList__18VP6_CODEC_INTERNAL = .text:0x80349F7C; // type:function size:0xA4 scope:global +GetNextChunk__18VP6_CODEC_INTERNALPPQ24RCMP5CHUNK = .text:0x8034A020; // type:function size:0x44 scope:global +ReleaseChunk__18VP6_CODEC_INTERNALPQ24RCMP5CHUNK = .text:0x8034A064; // type:function size:0x2C scope:global +VP6_CODEC_create__4RCMPv = .text:0x8034A090; // type:function size:0x4C scope:global +__static_initialization_and_destruction_0 = .text:0x8034A0DC; // type:function size:0x5C scope:local +_._Q24RCMP5CODEC = .text:0x8034A138; // type:function size:0x40 scope:global +Alloc__11MyAllocatorUiRCQ22EA12TagValuePair = .text:0x8034A178; // type:function size:0x88 scope:global +Free__11MyAllocatorPvUi = .text:0x8034A200; // type:function size:0x44 scope:global +AddRef__11MyAllocator = .text:0x8034A244; // type:function size:0x14 scope:global +Release__11MyAllocator = .text:0x8034A258; // type:function size:0x64 scope:global +_._11MyAllocator = .text:0x8034A2BC; // type:function size:0x34 scope:global +_GLOBAL_.I.__9VP6_FRAMEUiUi = .text:0x8034A2F0; // type:function size:0x2C scope:local +_GLOBAL_.D.__9VP6_FRAMEUiUi = .text:0x8034A31C; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x8034A348; // type:label scope:local +VP6_CODEC_is_head_chunk_for_codec__4RCMPUi = .text:0x8034A348; // type:function size:0x18 scope:global +VP6_CODEC_is_chunk_for_codec__4RCMPUi = .text:0x8034A360; // type:function size:0x30 scope:global +gcc2_compiled. = .text:0x8034A390; // type:label scope:local +GetChunkType__FPQ24RCMP5CHUNK = .text:0x8034A390; // type:function size:0x20 scope:local +__9MAD_FRAMEUiUi = .text:0x8034A3B0; // type:function size:0x84 scope:global +_._9MAD_FRAME = .text:0x8034A434; // type:function size:0x6C scope:global +__18MAD_CODEC_INTERNAL = .text:0x8034A4A0; // type:function size:0x58 scope:global +_._18MAD_CODEC_INTERNAL = .text:0x8034A4F8; // type:function size:0x138 scope:global +Init__18MAD_CODEC_INTERNALPQ24RCMP7DECODERPQ24RCMP5CHUNK = .text:0x8034A630; // type:function size:0x1C scope:global +GetCurrentFrameNumber__18MAD_CODEC_INTERNAL = .text:0x8034A64C; // type:function size:0x8 scope:global +GetFrameRate__18MAD_CODEC_INTERNAL = .text:0x8034A654; // type:function size:0x8 scope:global +GetNextChunk__18MAD_CODEC_INTERNALPPQ24RCMP5CHUNK = .text:0x8034A65C; // type:function size:0x44 scope:global +ReleaseChunk__18MAD_CODEC_INTERNALPQ24RCMP5CHUNK = .text:0x8034A6A0; // type:function size:0x2C scope:global +DecodeChunk__18MAD_CODEC_INTERNALPQ24RCMP5CHUNK = .text:0x8034A6CC; // type:function size:0x3C4 scope:global +GetFrame__18MAD_CODEC_INTERNALUi = .text:0x8034AA90; // type:function size:0x12C scope:global +CreateKorM__18MAD_CODEC_INTERNAL = .text:0x8034ABBC; // type:function size:0xA4 scope:global +CreateE__18MAD_CODEC_INTERNAL = .text:0x8034AC60; // type:function size:0xA4 scope:global +ReleaseFrame__18MAD_CODEC_INTERNALPQ24RCMP5FRAME = .text:0x8034AD04; // type:function size:0x60 scope:global +MAD_CODEC_create__4RCMPv = .text:0x8034AD64; // type:function size:0x4C scope:global +gcc2_compiled. = .text:0x8034ADB0; // type:label scope:local +MAD_CODEC_is_chunk_for_codec__4RCMPUi = .text:0x8034ADB0; // type:function size:0x34 scope:global +gcc2_compiled. = .text:0x8034ADE4; // type:label scope:local +madinit__Fv = .text:0x8034ADE4; // type:function size:0x2BC scope:local +discardbits__Fi = .text:0x8034B0A0; // type:function size:0x58 scope:local +getdelta__Fv = .text:0x8034B0F8; // type:function size:0x44 scope:local +dcblock__FPii = .text:0x8034B13C; // type:function size:0x5C scope:local +getluma__FPCUciPii = .text:0x8034B198; // type:function size:0x98 scope:local +getchroma__FPCUciPii = .text:0x8034B230; // type:function size:0x98 scope:local +setluma__FPCiPUci = .text:0x8034B2C8; // type:function size:0x120 scope:local +setchroma__FPCiPUci = .text:0x8034B3E8; // type:function size:0xA0 scope:local +MAD_initdecode__FPCUsii = .text:0x8034B488; // type:function size:0x140 scope:global +MAD_decodemacroblock__FPCUcN20PUcN23i = .text:0x8034B5C8; // type:function size:0x338 scope:global +gcc2_compiled. = .text:0x8034B900; // type:label scope:local +discardbits__Fi = .text:0x8034B900; // type:function size:0x58 scope:local +madvlcdecode = .text:0x8034B958; // type:function size:0x16C scope:global +gcc2_compiled. = .text:0x8034BAC4; // type:label scope:local +IdctColumn = .text:0x8034BAC4; // type:function size:0x278 scope:local +IdctRow = .text:0x8034BD3C; // type:function size:0x204 scope:local +idctcompute = .text:0x8034BF40; // type:function size:0x164 scope:global +gcc2_compiled. = .text:0x8034C0A4; // type:label scope:local +SetAllocator__3Vp6PQ32EA9Allocator10IAllocator = .text:0x8034C0A4; // type:function size:0x8 scope:global +Alloc__3Vp6i = .text:0x8034C0AC; // type:function size:0x64 scope:global +Free__3Vp6Pv = .text:0x8034C110; // type:function size:0x50 scope:global +gcc2_compiled. = .text:0x8034C160; // type:label scope:local +VP6_DeleteTmpBuffers = .text:0x8034C160; // type:function size:0xA4 scope:global +VP6_AllocateTmpBuffers = .text:0x8034C204; // type:function size:0xD0 scope:global +VP6_DeletePBInstance = .text:0x8034C2D4; // type:function size:0x60 scope:global +VP6_CreatePBInstance = .text:0x8034C334; // type:function size:0x12C scope:global +VP6_VPInitLibrary = .text:0x8034C460; // type:function size:0x80 scope:global +VP6_VPDeInitLibrary = .text:0x8034C4E0; // type:function size:0x4 scope:global +gcc2_compiled. = .text:0x8034C4E4; // type:label scope:local +InitPostProcessing = .text:0x8034C4E4; // type:function size:0xE8 scope:global +DeletePostProcBuffers = .text:0x8034C5CC; // type:function size:0xBC scope:global +AllocatePostProcBuffers = .text:0x8034C688; // type:function size:0x158 scope:global +ChangePostProcConfiguration = .text:0x8034C7E0; // type:function size:0xF8 scope:global +CreatePostProcInstance = .text:0x8034C8D8; // type:function size:0x68 scope:global +DeletePostProcInstance = .text:0x8034C940; // type:function size:0x48 scope:global +SetPPInterlacedMode = .text:0x8034C988; // type:function size:0x8 scope:global +SetDeInterlaceMode = .text:0x8034C990; // type:function size:0x8 scope:global +SetAddNoiseMode = .text:0x8034C998; // type:function size:0x8 scope:global +UpdateFragQIndex = .text:0x8034C9A0; // type:function size:0x54 scope:global +gaussian = .text:0x8034C9F4; // type:function size:0x70 scope:global +PlaneAddNoise_C = .text:0x8034CA64; // type:function size:0x26C scope:global +PostProcess = .text:0x8034CCD0; // type:function size:0x4D8 scope:global +gcc2_compiled. = .text:0x8034D1A8; // type:label scope:local +VP6_InitQTables = .text:0x8034D1A8; // type:function size:0x74 scope:global +VP6_BuildQuantIndex_Generic = .text:0x8034D21C; // type:function size:0x3C scope:global +VP6_init_dequantizer = .text:0x8034D258; // type:function size:0xD0 scope:global +VP6_UpdateQ = .text:0x8034D328; // type:function size:0x68 scope:global +DeleteQuantizerBuffers = .text:0x8034D390; // type:function size:0x5C scope:local +AllocateQuantizerBuffers = .text:0x8034D3EC; // type:function size:0x88 scope:local +VP6_DeleteQuantizer = .text:0x8034D474; // type:function size:0x48 scope:global +VP6_CreateQuantizer = .text:0x8034D4BC; // type:function size:0x6C scope:global +FilterHoriz_Simple_C = .text:0x8034D528; // type:function size:0xF0 scope:global +FilterVert_Simple_C = .text:0x8034D618; // type:function size:0x108 scope:global +SimpleDeblockFrame = .text:0x8034D720; // type:function size:0x21C scope:global +VP6_StartDecoder = .text:0x8034D93C; // type:function size:0xCC scope:global +VP6_SetPbParam = .text:0x8034DA08; // type:function size:0xFC scope:global +VP6_GetYUVConfig = .text:0x8034DB04; // type:function size:0x3C4 scope:global +VP6_DecodeFrameToYUV_internal = .text:0x8034DEC8; // type:function size:0x198 scope:local +VP6_DecodeFrameToYUV = .text:0x8034E060; // type:function size:0xBC scope:global +VP6_StopDecoder = .text:0x8034E11C; // type:function size:0x64 scope:global +gcc2_compiled. = .text:0x8034E180; // type:label scope:local +ClearSysState_C = .text:0x8034E180; // type:function size:0x4 scope:global +AverageBlock_C = .text:0x8034E184; // type:function size:0xBC scope:global +SubtractBlock_C = .text:0x8034E240; // type:function size:0x9C scope:global +CopyBlock_C = .text:0x8034E2DC; // type:function size:0x28 scope:global +Copy12x12_C = .text:0x8034E304; // type:function size:0x78 scope:global +InitVPUtil = .text:0x8034E37C; // type:function size:0x24 scope:global +FilterBlock1d = .text:0x8034E3A0; // type:function size:0xEC scope:global +FilterBlock2dFirstPass = .text:0x8034E48C; // type:function size:0xEC scope:global +FilterBlock2dSecondPass = .text:0x8034E578; // type:function size:0xF0 scope:global +FilterBlock2d = .text:0x8034E668; // type:function size:0x74 scope:global +FilterBlock2dBil_FirstPass = .text:0x8034E6DC; // type:function size:0x9C scope:global +FilterBlock1dBil_8 = .text:0x8034E778; // type:function size:0x90 scope:global +FilterBlock2dBil_SecondPass_8 = .text:0x8034E808; // type:function size:0x98 scope:global +FilterBlock2dBil_8 = .text:0x8034E8A0; // type:function size:0x68 scope:global +FilterBlockBil_8_C = .text:0x8034E908; // type:function size:0xEC scope:global +gcc2_compiled. = .text:0x8034E9F4; // type:label scope:local +PostProcMachineSpecificConfig = .text:0x8034E9F4; // type:function size:0x158 scope:global +gcc2_compiled. = .text:0x8034EB4C; // type:label scope:local +VP6_GetProcessorFrequency = .text:0x8034EB4C; // type:function size:0x8 scope:global +VP6_DMachineSpecificConfig = .text:0x8034EB54; // type:function size:0x10 scope:global +gcc2_compiled. = .text:0x8034EB64; // type:label scope:local +fillidctconstants = .text:0x8034EB64; // type:function size:0x4 scope:global +UtilMachineSpecificConfig = .text:0x8034EB68; // type:function size:0x168 scope:global +duck_malloc = .text:0x8034ECD0; // type:function size:0x20 scope:global +duck_free = .text:0x8034ECF0; // type:function size:0x20 scope:global +VP6_StartDecode = .text:0x8034ED10; // type:function size:0x58 scope:global +gcc2_compiled. = .text:0x8034ED68; // type:label scope:local +UpdateUMVBorder = .text:0x8034ED68; // type:function size:0x2C0 scope:global +CopyFrame = .text:0x8034F028; // type:function size:0x12C scope:global +gcc2_compiled. = .text:0x8034F154; // type:label scope:local +ClampLevels_C = .text:0x8034F154; // type:function size:0xC8 scope:global +gcc2_compiled. = .text:0x8034F21C; // type:label scope:local +SetupDeblockValueArray_Generic = .text:0x8034F21C; // type:function size:0xAC scope:global +SetupDeblocker = .text:0x8034F2C8; // type:function size:0x70 scope:global +DeblockVerticalEdgesInLoopFilteredBand = .text:0x8034F338; // type:function size:0x384 scope:global +DeblockLoopFilteredBand_C = .text:0x8034F6BC; // type:function size:0x828 scope:global +DeblockVerticalEdgesInNonFilteredBand = .text:0x8034FEE4; // type:function size:0x3E8 scope:global +DeblockVerticalEdgesInNonFilteredBandNewFilter = .text:0x803502CC; // type:function size:0x2B8 scope:global +DeblockNonFilteredBand_C = .text:0x80350584; // type:function size:0x8D0 scope:global +DeblockNonFilteredBandNewFilter_C = .text:0x80350E54; // type:function size:0x6E8 scope:global +DeblockPlane = .text:0x8035153C; // type:function size:0x1F8 scope:global +DeblockPlaneNew = .text:0x80351734; // type:function size:0x12C scope:global +DeblockFrame = .text:0x80351860; // type:function size:0x12C scope:global +DeblockFrameInterlaced = .text:0x8035198C; // type:function size:0x134 scope:global +gcc2_compiled. = .text:0x80351AC0; // type:label scope:local +BuildScanOrder = .text:0x80351AC0; // type:function size:0x98 scope:global +BoolTreeToHuffCodes = .text:0x80351B58; // type:function size:0x15C scope:global +ZerosBoolTreeToHuffCodes = .text:0x80351CB4; // type:function size:0x118 scope:global +ConvertBoolTrees = .text:0x80351DCC; // type:function size:0x258 scope:global +VP6_ConfigureEntropyDecoder = .text:0x80352024; // type:function size:0x2E0 scope:global +VP6_ResetLeftContext = .text:0x80352304; // type:function size:0xA0 scope:global +VP6_ResetAboveContext = .text:0x803523A4; // type:function size:0x194 scope:global +VP6_ReadTokensPredictA = .text:0x80352538; // type:function size:0x7E0 scope:global +VP6_DecodeFrameMbs = .text:0x80352D18; // type:function size:0x344 scope:global +gcc2_compiled. = .text:0x8035305C; // type:label scope:local +VP6_BuildModeTree = .text:0x8035305C; // type:function size:0x2B8 scope:global +VP6_decodeModeDiff = .text:0x80353314; // type:function size:0x100 scope:global +VP6_DecodeModeProbs = .text:0x80353414; // type:function size:0x150 scope:global +gcc2_compiled. = .text:0x80353564; // type:label scope:local +VP6_ConfigureMvEntropyDecoder = .text:0x80353564; // type:function size:0x1D0 scope:global +gcc2_compiled. = .text:0x80353734; // type:label scope:local +CFastDeInterlace = .text:0x80353734; // type:function size:0xC8 scope:global +gcc2_compiled. = .text:0x803537FC; // type:label scope:local +DeringBlockStrong_C = .text:0x803537FC; // type:function size:0x710 scope:global +DeringBlockWeak_C = .text:0x80353F0C; // type:function size:0x284 scope:global +DeringFrame = .text:0x80354190; // type:function size:0x610 scope:global +DeringFrameInterlaced = .text:0x803547A0; // type:function size:0x850 scope:global +gcc2_compiled. = .text:0x80354FF0; // type:label scope:local +InitHeaderBuffer = .text:0x80354FF0; // type:function size:0x44 scope:global +ReadHeaderBits = .text:0x80355034; // type:function size:0x88 scope:global +LoadFrameHeader = .text:0x803550BC; // type:function size:0x568 scope:local +VP6_LoadFrame = .text:0x80355624; // type:function size:0x3C scope:global +VP6_bitread = .text:0x80355660; // type:function size:0x50 scope:global +gcc2_compiled. = .text:0x803556B0; // type:label scope:local +VP6_DeleteFragmentInfo = .text:0x803556B0; // type:function size:0xEC scope:global +VP6_AllocateFragmentInfo = .text:0x8035579C; // type:function size:0x1A4 scope:global +VP6_DeleteFrameInfo = .text:0x80355940; // type:function size:0x88 scope:global +VP6_AllocateFrameInfo = .text:0x803559C8; // type:function size:0xBC scope:global +VP6_InitFrameDetails = .text:0x80355A84; // type:function size:0x214 scope:global +VP6_InitialiseConfiguration = .text:0x80355C98; // type:function size:0x10 scope:global +gcc2_compiled. = .text:0x80355CA8; // type:label scope:local +InsertSorted = .text:0x80355CA8; // type:function size:0x88 scope:local +VP6_BuildHuffTree = .text:0x80355D30; // type:function size:0x1A0 scope:global +VP6_BuildHuffLookupTable = .text:0x80355ED0; // type:function size:0x7C scope:global +VP6_CreateCodeArray = .text:0x80355F4C; // type:function size:0xDC scope:global +dequant_slow10 = .text:0x80356028; // type:function size:0x154 scope:global +IDct10 = .text:0x8035617C; // type:function size:0x2E0 scope:global +gcc2_compiled. = .text:0x8035645C; // type:label scope:local +SetupBoundingValueArray_Generic = .text:0x8035645C; // type:function size:0xAC scope:global +FilterHoriz_Generic = .text:0x80356508; // type:function size:0x70 scope:global +FilterVert_Generic = .text:0x80356578; // type:function size:0x98 scope:global +FilteringHoriz_8_C = .text:0x80356610; // type:function size:0xB0 scope:global +FilteringVert_8_C = .text:0x803566C0; // type:function size:0xD8 scope:global +FilteringHoriz_12_C = .text:0x80356798; // type:function size:0xB0 scope:global +FilteringVert_12_C = .text:0x80356848; // type:function size:0xD8 scope:global +gcc2_compiled. = .text:0x80356920; // type:label scope:local +SatUnsigned8 = .text:0x80356920; // type:function size:0x15C scope:global +ScalarReconInterHalfPixel2 = .text:0x80356A7C; // type:function size:0x134 scope:global +gcc2_compiled. = .text:0x80356BB0; // type:label scope:local +HorizontalLine_Copy = .text:0x80356BB0; // type:function size:0x38 scope:global +NullScale = .text:0x80356BE8; // type:function size:0x4 scope:global +HorizontalLine_4_5_Scale_C = .text:0x80356BEC; // type:function size:0xF8 scope:global +VerticalBand_4_5_Scale_C = .text:0x80356CE4; // type:function size:0xB4 scope:global +LastVerticalBand_4_5_Scale_C = .text:0x80356D98; // type:function size:0x88 scope:global +HorizontalLine_3_5_Scale_C = .text:0x80356E20; // type:function size:0xF8 scope:global +VerticalBand_3_5_Scale_C = .text:0x80356F18; // type:function size:0xB4 scope:global +LastVerticalBand_3_5_Scale_C = .text:0x80356FCC; // type:function size:0x98 scope:global +HorizontalLine_1_2_Scale_C = .text:0x80357064; // type:function size:0x4C scope:global +VerticalBand_1_2_Scale_C = .text:0x803570B0; // type:function size:0x3C scope:global +LastVerticalBand_1_2_Scale_C = .text:0x803570EC; // type:function size:0x28 scope:global +AnyRatio_2D_Scale = .text:0x80357114; // type:function size:0x280 scope:global +AnyRatioFrameScale = .text:0x80357394; // type:function size:0x270 scope:global +CenterImage = .text:0x80357604; // type:function size:0x1A8 scope:global +ScaleOrCenter = .text:0x803577AC; // type:function size:0xB8 scope:global +gcc2_compiled. = .text:0x80357864; // type:label scope:local +VP6_ConfigureContexts = .text:0x80357864; // type:function size:0xC4 scope:global +gcc2_compiled. = .text:0x80357928; // type:label scope:local +VP6_DecodeBool = .text:0x80357928; // type:function size:0xA4 scope:global +VP6_DecodeBool128 = .text:0x803579CC; // type:function size:0x7C scope:global +nDecodeBool = .text:0x80357A48; // type:function size:0x94 scope:global +VP6_DecodeBlock = .text:0x80357ADC; // type:function size:0x1278 scope:global +VP6_DecodeMacroBlock = .text:0x80358D54; // type:function size:0x2E0 scope:global +VP6_DecodeBlockMode = .text:0x80359034; // type:function size:0x84 scope:global +VP6_DecodeMode = .text:0x803590B8; // type:function size:0x12C scope:global +VP6_decodeModeAndMotionVector = .text:0x803591E4; // type:function size:0x370 scope:global +VP6_decodeMotionVector = .text:0x80359554; // type:function size:0x258 scope:global +VP6_FindNearestandNextNearest = .text:0x803597AC; // type:function size:0x150 scope:global +VP6_PredictFilteredBlock = .text:0x803598FC; // type:function size:0x2E4 scope:global +VP6_ReconstructBlock = .text:0x80359BE0; // type:function size:0xF0 scope:global +ScalarReconIntra_GC = .text:0x80359CD0; // type:function size:0x54 scope:global +intra_loop = .text:0x80359CE4; // type:label scope:local +ScalarReconInter_GC = .text:0x80359D24; // type:function size:0x5C scope:global +inter_loop = .text:0x80359D2C; // type:label scope:local +ReconBlock_GC = .text:0x80359D80; // type:function size:0x5C scope:global +block_loop = .text:0x80359D88; // type:label scope:local +IDct64_GC = .text:0x80359DDC; // type:function size:0x6CC scope:global +idctcolumn64 = .text:0x80359F5C; // type:label scope:local +idct64_resume = .text:0x80359FF0; // type:label scope:local +idct64_loop = .text:0x8035A3A4; // type:label scope:local +idct64_scale = .text:0x8035A41C; // type:label scope:local +IDct1_GC = .text:0x8035A4A8; // type:function size:0x40 scope:global +UnpackBlock_GC = .text:0x8035A4E8; // type:function size:0x38 scope:global +unpack_loop = .text:0x8035A4F0; // type:label scope:local +FilterBlock1dBil_GC = .text:0x8035A520; // type:function size:0x84 scope:global +filt1d_loop = .text:0x8035A540; // type:label scope:local +FilterBlock2dBil_GC = .text:0x8035A5A4; // type:function size:0x104 scope:global +filt2d_loop1 = .text:0x8035A5CC; // type:label scope:local +filt2d_loop2 = .text:0x8035A644; // type:label scope:local +FilterBlock_GC = .text:0x8035A6A8; // type:function size:0x188 scope:global +gcc2_compiled. = .text:0x8035A830; // type:label scope:local +Var16Point = .text:0x8035A830; // type:function size:0x70 scope:global +VP6_PredictFiltered = .text:0x8035A8A0; // type:function size:0x110 scope:global +gcc2_compiled. = .text:0x8035A9B0; // type:label scope:local +SND3dpos = .text:0x8035A9B0; // type:function size:0xCC scope:global +gcc2_compiled. = .text:0x8035AA7C; // type:label scope:local +SNDAEMSI_UpdateClassDestructor__FPQ27AemsDef20ClassDestructorState = .text:0x8035AA7C; // type:function size:0x14 scope:global +SNDAEMSI_UpdateClassData__FPQ27AemsDef14ClassDataState = .text:0x8035AA90; // type:function size:0x8 scope:global +SNDAEMSI_UpdateGlobalVariable__FPQ27AemsDef19GlobalVariableState = .text:0x8035AA98; // type:function size:0x8 scope:global +SNDAEMSI_updatecreate__FPQ27AemsDef11CREATESTATE = .text:0x8035AAA0; // type:function size:0x14 scope:global +SNDAEMSI_updatedestroy__FPQ27AemsDef12DESTROYSTATE = .text:0x8035AAB4; // type:function size:0x254 scope:global +UpdateCallFunction__FPQ27AemsDef17CallFunctionState = .text:0x8035AD08; // type:function size:0xBC scope:global +UpdateControlClass__FPQ27AemsDef17ControlClassState = .text:0x8035ADC4; // type:function size:0x1CC scope:global +UpdateSetGlobalVariable__FPQ27AemsDef22SetGlobalVariableState = .text:0x8035AF90; // type:function size:0x68 scope:global +SNDAEMSI_updatecounter__FPQ27AemsDef12COUNTERSTATE = .text:0x8035AFF8; // type:function size:0x7C scope:global +SNDAEMSI_updaterandom__FPQ27AemsDef11RANDOMSTATE = .text:0x8035B074; // type:function size:0x5C scope:global +SNDAEMSI_updaterandomshuffle__FPQ27AemsDef18RANDOMSHUFFLESTATE = .text:0x8035B0D0; // type:function size:0x10C scope:global +SNDAEMSI_updaterandomweighted__FPQ27AemsDef19RANDOMWEIGHTEDSTATE = .text:0x8035B1DC; // type:function size:0xB4 scope:global +SNDAEMSI_updaterangetrig__FPQ27AemsDef14RANGETRIGSTATE = .text:0x8035B290; // type:function size:0x74 scope:global +SNDAEMSI_updatedelaytrig__FPQ27AemsDef14DELAYTRIGSTATE = .text:0x8035B304; // type:function size:0xA4 scope:global +SNDAEMSI_updatestategen__FPQ27AemsDef13STATEGENSTATE = .text:0x8035B3A8; // type:function size:0x60 scope:global +SNDAEMSI_updatemerge__FPQ27AemsDef14MERGETRIGSTATE = .text:0x8035B408; // type:function size:0x44 scope:global +SNDAEMSI_envelopeprogramsegment__FPQ27AemsDef13ENVELOPESTATE = .text:0x8035B44C; // type:function size:0x3C scope:global +SNDAEMSI_updateenvelope__FPQ27AemsDef13ENVELOPESTATE = .text:0x8035B488; // type:function size:0x188 scope:global +SNDAEMSI_updatetable__FPQ27AemsDef10TABLESTATE = .text:0x8035B610; // type:function size:0x254 scope:global +SNDAEMSI_updatedelayline__FPQ27AemsDef14DELAYLINESTATE = .text:0x8035B864; // type:function size:0x114 scope:global +SNDAEMSI_updatemux__FPQ27AemsDef8MUXSTATE = .text:0x8035B978; // type:function size:0x30 scope:global +SNDAEMSI_updatedemux__FPQ27AemsDef10DEMUXSTATE = .text:0x8035B9A8; // type:function size:0x50 scope:global +SNDAEMSI_updatemin__FPQ27AemsDef8MINSTATE = .text:0x8035B9F8; // type:function size:0x44 scope:global +SNDAEMSI_updatemin2__FPQ27AemsDef9MIN2STATE = .text:0x8035BA3C; // type:function size:0x1C scope:global +SNDAEMSI_updatemax__FPQ27AemsDef8MAXSTATE = .text:0x8035BA58; // type:function size:0x44 scope:global +SNDAEMSI_updatemax2__FPQ27AemsDef9MAX2STATE = .text:0x8035BA9C; // type:function size:0x1C scope:global +SNDAEMSI_updatescale__FPQ27AemsDef10SCALESTATE = .text:0x8035BAB8; // type:function size:0xBC scope:global +SNDAEMSI_updatescale2__FPQ27AemsDef11SCALE2STATE = .text:0x8035BB74; // type:function size:0x9C scope:global +SNDAEMSI_updateadd__FPQ27AemsDef8ADDSTATE = .text:0x8035BC10; // type:function size:0x3C scope:global +SNDAEMSI_updateadd2__FPQ27AemsDef9ADD2STATE = .text:0x8035BC4C; // type:function size:0x10 scope:global +SNDAEMSI_updatesubtract__FPQ27AemsDef13SUBTRACTSTATE = .text:0x8035BC5C; // type:function size:0x10 scope:global +SNDAEMSI_updatemultiply__FPQ27AemsDef13MULTIPLYSTATE = .text:0x8035BC6C; // type:function size:0x10 scope:global +SNDAEMSI_updatedivide__FPQ27AemsDef11DIVIDESTATE = .text:0x8035BC7C; // type:function size:0x20 scope:global +SNDAEMSI_updatemodulo__FPQ27AemsDef11MODULOSTATE = .text:0x8035BC9C; // type:function size:0x28 scope:global +SNDAEMSI_bankinputstub__Fii = .text:0x8035BCC4; // type:function size:0x4 scope:global +SNDAEMSI_bankpitchmult__Fii = .text:0x8035BCC8; // type:function size:0x5C scope:global +SNDAEMSI_banktimemult__Fii = .text:0x8035BD24; // type:function size:0x58 scope:global +SNDAEMSI_bankvol__Fii = .text:0x8035BD7C; // type:function size:0xE8 scope:global +SNDAEMSI_bankazimuth__Fii = .text:0x8035BE64; // type:function size:0x40 scope:global +SNDAEMSI_bankfxwet0__Fii = .text:0x8035BEA4; // type:function size:0xA4 scope:global +SNDAEMSI_banklowpass__Fii = .text:0x8035BF48; // type:function size:0x48 scope:global +SNDAEMSI_bankhighpass__Fii = .text:0x8035BF90; // type:function size:0x48 scope:global +SNDAEMSI_bankdrylevel__Fii = .text:0x8035BFD8; // type:function size:0x9C scope:global +SNDAEMSI_optpitchmult__FP11SNDPLAYOPTSi = .text:0x8035C074; // type:function size:0x30 scope:global +SNDAEMSI_opttimemult__FP11SNDPLAYOPTSi = .text:0x8035C0A4; // type:function size:0x24 scope:global +SNDAEMSI_optvol__FP11SNDPLAYOPTSi = .text:0x8035C0C8; // type:function size:0x28 scope:global +SNDAEMSI_optazimuth__FP11SNDPLAYOPTSi = .text:0x8035C0F0; // type:function size:0x8 scope:global +SNDAEMSI_optfxwet0__FP11SNDPLAYOPTSi = .text:0x8035C0F8; // type:function size:0x28 scope:global +SNDAEMSI_optlowpass__FP11SNDPLAYOPTSi = .text:0x8035C120; // type:function size:0x30 scope:global +SNDAEMSI_opthighpass__FP11SNDPLAYOPTSi = .text:0x8035C150; // type:function size:0x30 scope:global +SNDAEMSI_optdrylevel__FP11SNDPLAYOPTSi = .text:0x8035C180; // type:function size:0x28 scope:global +SNDAEMSI_optstub__FP11SNDPLAYOPTSi = .text:0x8035C1A8; // type:function size:0x4 scope:global +SNDAEMSI_playerplaybank__FPQ27AemsDef11PLAYERSTATEPQ27AemsDef11SAMPLEENTRY = .text:0x8035C1AC; // type:function size:0xB0 scope:global +SNDAEMSI_playerstopbank__FPQ27AemsDef11PLAYERSTATE = .text:0x8035C25C; // type:function size:0x24 scope:global +SNDAEMSI_playerpausebank__FGQ27AemsDef12PLAYERHANDLE = .text:0x8035C280; // type:function size:0x40 scope:global +SNDAEMSI_playerunpausebank__FPQ27AemsDef11PLAYERSTATE = .text:0x8035C2C0; // type:function size:0xA8 scope:global +SNDAEMSI_playerresetoutputs__FPQ27AemsDef11PLAYERSTATE = .text:0x8035C368; // type:function size:0x38 scope:global +SNDAEMSI_playerupdatebank__FPQ27AemsDef11PLAYERSTATE = .text:0x8035C3A0; // type:function size:0x1E0 scope:global +SNDAEMSI_updateplayer__FPQ27AemsDef11PLAYERSTATE = .text:0x8035C580; // type:function size:0x1FC scope:global +SNDAEMSI_updateoscillator__FPQ27AemsDef15OSCILLATORSTATE = .text:0x8035C77C; // type:function size:0x220 scope:global +SNDAEMSI_updateramp__FPQ27AemsDef9RAMPSTATE = .text:0x8035C99C; // type:function size:0x1AC scope:global +SNDAEMSI_updateaddmax__FPQ27AemsDef11ADDMAXSTATE = .text:0x8035CB48; // type:function size:0x4C scope:global +SNDAEMSI_updatesubtractmin__FPQ27AemsDef16SUBTRACTMINSTATE = .text:0x8035CB94; // type:function size:0x24 scope:global +SNDAEMSI_updatemultiplymax__FPQ27AemsDef16MULTIPLYMAXSTATE = .text:0x8035CBB8; // type:function size:0x24 scope:global +UpdateFunction__FPQ27AemsDef13FunctionState = .text:0x8035CBDC; // type:function size:0x14 scope:global +SNDAEMSI_SetGlobalVariable__FPQ24Csis9ParameterPv = .text:0x8035CBF0; // type:function size:0xC scope:global +SNDAEMSI_SetClassDestructor__FPQ24Csis5ClassPv = .text:0x8035CBFC; // type:function size:0xC scope:global +SNDAEMSI_SetClassData__FPQ24Csis9ParameterPv = .text:0x8035CC08; // type:function size:0x34 scope:global +CsisFunctionCallback__FPQ24Csis9ParameterPv = .text:0x8035CC3C; // type:function size:0x3C scope:global +SNDAEMSI_CreateModuleInstance__FPQ24Csis5ClassPQ24Csis9ParameterPv = .text:0x8035CC78; // type:function size:0x1DC scope:global +SNDAEMSI_restore__Fv = .text:0x8035CE54; // type:function size:0x58 scope:global +SNDAEMS_removemodulebank = .text:0x8035CEAC; // type:function size:0x1CC scope:global +SNDAEMSI_stopmodulebanks__Fv = .text:0x8035D078; // type:function size:0xC4 scope:global +SNDAEMSI_createmodulebankhandle__Fv = .text:0x8035D13C; // type:function size:0x28 scope:global +SNDAEMSI_resolvemodulebank__FPQ27AemsDef10ModuleBankPQ27AemsDef15FUNCFIXUPHEADERPci = .text:0x8035D164; // type:function size:0x33C scope:global +gcc2_compiled. = .text:0x8035D4A0; // type:label scope:local +SNDAEMS_addmodulebank = .text:0x8035D4A0; // type:function size:0x1B8 scope:global +__static_initialization_and_destruction_0 = .text:0x8035D658; // type:function size:0x38 scope:local +_GLOBAL_.I.SNDAEMS_addmodulebank = .text:0x8035D690; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x8035D6BC; // type:label scope:local +SNDAEMSI_almbabortload__Fv = .text:0x8035D6BC; // type:function size:0x5C scope:global +SNDAEMSI_almbservice__Fv = .text:0x8035D718; // type:function size:0x3E8 scope:global +SNDAEMS_asyncloadmodulebank = .text:0x8035DB00; // type:function size:0x16C scope:global +SNDAEMS_asyncloadmodulebankdone = .text:0x8035DC6C; // type:function size:0x38 scope:global +gcc2_compiled. = .text:0x8035DCA4; // type:label scope:local +SNDAEMSI_almbmservice__Fv = .text:0x8035DCA4; // type:function size:0x20C scope:global +SNDAEMS_asyncloadmodulebankmem = .text:0x8035DEB0; // type:function size:0x120 scope:global +SNDAEMS_asyncloadmodulebankmemdone = .text:0x8035DFD0; // type:function size:0x14 scope:global +gcc2_compiled. = .text:0x8035DFE4; // type:label scope:local +SNDAEMSI_timerupdate__FPv = .text:0x8035DFE4; // type:function size:0x78 scope:global +gcc2_compiled. = .text:0x8035E05C; // type:label scope:local +SNDVOICEI_isreserved__Fii = .text:0x8035E05C; // type:function size:0x40 scope:global +SNDVOICEI_alloc__FiiPiii = .text:0x8035E09C; // type:function size:0x3C0 scope:global +SNDVOICEI_free__Fi = .text:0x8035E45C; // type:function size:0x1A0 scope:global +SNDVOICEI_get__Fi = .text:0x8035E5FC; // type:function size:0x54 scope:global +gcc2_compiled. = .text:0x8035E650; // type:label scope:local +SND_attrsetdef = .text:0x8035E650; // type:function size:0x98 scope:global +gcc2_compiled. = .text:0x8035E6E8; // type:label scope:local +SNDBANKI_userdatacallback__FP15SNDIPATCHHEADERii = .text:0x8035E6E8; // type:function size:0xD0 scope:global +SNDbankadd = .text:0x8035E7B8; // type:function size:0x214 scope:global +gcc2_compiled. = .text:0x8035E9CC; // type:label scope:local +SNDBANKI_alloc__Fv = .text:0x8035E9CC; // type:function size:0x44 scope:global +SNDBANKI_getppatch__FP8BANKVER5i = .text:0x8035EA10; // type:function size:0x40 scope:global +gcc2_compiled. = .text:0x8035EA50; // type:label scope:local +SNDBANKI_abortload__Fv = .text:0x8035EA50; // type:function size:0x118 scope:global +SNDBANKI_asyncresolve__Fv = .text:0x8035EB68; // type:function size:0xC4 scope:global +SNDBANKI_asynccompletereads__Fv = .text:0x8035EC2C; // type:function size:0xC8 scope:global +SNDBANKI_asyncissuereads__Fv = .text:0x8035ECF4; // type:function size:0x108 scope:global +SNDBANKI_asyncxferhdr__Fv = .text:0x8035EDFC; // type:function size:0x124 scope:global +SNDBANKI_asynccompletedownload__Fv = .text:0x8035EF20; // type:function size:0xAC scope:global +SNDBANKI_asyncissuedownloads__Fv = .text:0x8035EFCC; // type:function size:0x148 scope:global +SNDBANKI_asyncprocess__Fv = .text:0x8035F114; // type:function size:0x30 scope:global +SNDBANKI_asyncserver__Fv = .text:0x8035F144; // type:function size:0xB8 scope:global +SNDBANKI_asyncservice__Fv = .text:0x8035F1FC; // type:function size:0x1F0 scope:global +SNDBANK_asyncloadi__FPciPviPFi_Pvb = .text:0x8035F3EC; // type:function size:0x20C scope:global +SNDBANK_asyncload = .text:0x8035F5F8; // type:function size:0x24 scope:global +SNDBANK_asyncdone = .text:0x8035F61C; // type:function size:0x34 scope:global +gcc2_compiled. = .text:0x8035F650; // type:label scope:local +SNDBANKI_asyncloadmemresolve__Fv = .text:0x8035F650; // type:function size:0xB4 scope:global +SNDBANKI_asyncloadmem100hz__Fv = .text:0x8035F704; // type:function size:0xD4 scope:global +SNDBANK_asyncloadmem = .text:0x8035F7D8; // type:function size:0xFC scope:global +SNDBANK_asyncloadmemdone = .text:0x8035F8D4; // type:function size:0x14 scope:global +gcc2_compiled. = .text:0x8035F8E8; // type:label scope:local +SNDbankheadercopy = .text:0x8035F8E8; // type:function size:0x74 scope:global +gcc2_compiled. = .text:0x8035F95C; // type:label scope:local +SNDbankheadersize = .text:0x8035F95C; // type:function size:0x18 scope:global +gcc2_compiled. = .text:0x8035F974; // type:label scope:local +SNDBANK_play = .text:0x8035F974; // type:function size:0x98 scope:global +gcc2_compiled. = .text:0x8035FA0C; // type:label scope:local +SNDbankremove = .text:0x8035FA0C; // type:function size:0x194 scope:global +gcc2_compiled. = .text:0x8035FBA0; // type:label scope:local +SNDBANKI_valid__Fi = .text:0x8035FBA0; // type:function size:0x5C scope:global +gcc2_compiled. = .text:0x8035FBFC; // type:label scope:local +SNDI_checkplayopts__FP11SNDPLAYOPTS = .text:0x8035FBFC; // type:function size:0x2C scope:global +gcc2_compiled. = .text:0x8035FC28; // type:label scope:local +SNDSYS_add100hzclient = .text:0x8035FC28; // type:function size:0x38 scope:global +SNDSYS_remove100hzclient = .text:0x8035FC60; // type:function size:0xD4 scope:global +gcc2_compiled. = .text:0x8035FD34; // type:label scope:local +SNDCTRL_drylevel = .text:0x8035FD34; // type:function size:0xB8 scope:global +gcc2_compiled. = .text:0x8035FDEC; // type:label scope:local +gcc2_compiled. = .text:0x8035FDEC; // type:label scope:local +SNDfxlevel = .text:0x8035FDEC; // type:function size:0x104 scope:global +gcc2_compiled. = .text:0x8035FEF0; // type:label scope:local +SNDCTRL_lowpass = .text:0x8035FEF0; // type:function size:0x68 scope:global +gcc2_compiled. = .text:0x8035FF58; // type:label scope:local +MemCpy__Q23Snd4UtilPvPCvUi = .text:0x8035FF58; // type:function size:0x1F8 scope:global +gcc2_compiled. = .text:0x80360150; // type:label scope:local +SNDmemlimits = .text:0x80360150; // type:function size:0x48 scope:global +gcc2_compiled. = .text:0x80360198; // type:label scope:local +SNDmemlargestunused = .text:0x80360198; // type:function size:0x40 scope:global +gcc2_compiled. = .text:0x803601D8; // type:label scope:local +SNDMEMI_constrain__FPUiPi = .text:0x803601D8; // type:function size:0x2C scope:global +SNDMEMI_init__FPvi = .text:0x80360204; // type:function size:0x68 scope:global +SNDMEMI_restore__Fv = .text:0x8036026C; // type:function size:0x20 scope:global +SNDMEMI_allocz__Fi = .text:0x8036028C; // type:function size:0x204 scope:global +SNDMEMI_free__FPv = .text:0x80360490; // type:function size:0xC0 scope:global +_._Q23Snd17GlobalFxProcessor = .text:0x80360550; // type:function size:0x88 scope:global +CreateInstance__Q23Snd17GlobalFxProcessorQ23Snd6DeviceiPPQ23Snd17GlobalFxProcessor = .text:0x803605D8; // type:function size:0xAC scope:global +Release__Q23Snd17GlobalFxProcessor = .text:0x80360684; // type:function size:0x28 scope:global +SetCustom__Q23Snd17GlobalFxProcessorPv = .text:0x803606AC; // type:function size:0x58 scope:global +Reset__Q23Snd17GlobalFxProcessor = .text:0x80360704; // type:function size:0x5C scope:global +gcc2_compiled. = .text:0x80360760; // type:label scope:local +iSNDpatchkey__FiPi = .text:0x80360760; // type:function size:0xAC scope:global +gcc2_compiled. = .text:0x8036080C; // type:label scope:local +SNDpitchmult = .text:0x8036080C; // type:function size:0x94 scope:global +gcc2_compiled. = .text:0x803608A0; // type:label scope:local +SNDPKTPLAYI_gethighchannel__Fii = .text:0x803608A0; // type:function size:0x54 scope:global +SNDPKTPLAYI_overhead__Fi = .text:0x803608F4; // type:function size:0xC scope:global +SNDPKTPLAY_overhead = .text:0x80360900; // type:function size:0x34 scope:global +SNDPKTPLAY_create = .text:0x80360934; // type:function size:0xF4 scope:global +SNDPKTPLAY_start = .text:0x80360A28; // type:function size:0x458 scope:global +SNDPKTPLAY_submit = .text:0x80360E80; // type:function size:0x128 scope:global +SNDPKTPLAY_submitspace = .text:0x80360FA8; // type:function size:0x60 scope:global +SNDPKTPLAY_framesoutstanding = .text:0x80361008; // type:function size:0x24 scope:global +SNDPKTPLAY_purge = .text:0x8036102C; // type:function size:0x8 scope:global +SNDPKTPLAY_stop = .text:0x80361034; // type:function size:0xA0 scope:global +SNDPKTPLAY_destroy = .text:0x803610D4; // type:function size:0x54 scope:global +SNDPKTPLAYI_get__FiiPiT2 = .text:0x80361128; // type:function size:0x23C scope:global +SNDPKTPLAYI_freeframes__Fiii = .text:0x80361364; // type:function size:0x6C scope:global +SNDPKTPLAYI_flushcallbackdata__Fv = .text:0x803613D0; // type:function size:0xB0 scope:global +gcc2_compiled. = .text:0x80361480; // type:label scope:local +SNDplaysetdef = .text:0x80361480; // type:function size:0x58 scope:global +gcc2_compiled. = .text:0x803614D8; // type:label scope:local +SNDPROFILE_outputlatency = .text:0x803614D8; // type:function size:0x38 scope:global +gcc2_compiled. = .text:0x80361510; // type:label scope:local +SNDI_randomseed__FUi = .text:0x80361510; // type:function size:0x34 scope:global +iSNDrandom__Fv = .text:0x80361544; // type:function size:0x108 scope:global +gcc2_compiled. = .text:0x8036164C; // type:label scope:local +SNDI_validrendermode__FPiP15SNDIPATCHHEADER = .text:0x8036164C; // type:function size:0xBC scope:global +gcc2_compiled. = .text:0x80361708; // type:label scope:local +SNDBANKI_asyncresolvepatch__FiP11TAGGEDPATCHPcPi = .text:0x80361708; // type:function size:0x84 scope:global +gcc2_compiled. = .text:0x8036178C; // type:label scope:local +SNDSYSI_variabletimerservice__Fv = .text:0x8036178C; // type:function size:0x6C scope:global +SNDSYSI_100hzserver__Fv = .text:0x803617F8; // type:function size:0x260 scope:global +DefaultMutexLockFn__3Sndv = .text:0x80361A58; // type:function size:0x20 scope:global +DefaultMutexUnlockFn__3Sndv = .text:0x80361A78; // type:function size:0x20 scope:global +SNDSYS_entercritical = .text:0x80361A98; // type:function size:0x40 scope:global +SNDSYS_leavecritical = .text:0x80361AD8; // type:function size:0x40 scope:global +__static_initialization_and_destruction_0 = .text:0x80361B18; // type:function size:0x28 scope:local +_GLOBAL_.I.SNDSYSI_variabletimerservice__Fv = .text:0x80361B40; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x80361B6C; // type:label scope:local +iSNDsin__Fi = .text:0x80361B6C; // type:function size:0x80 scope:global +gcc2_compiled. = .text:0x80361BEC; // type:label scope:local +StreamRemoveFaders__3SndP16SNDSTREAMCHANNEL = .text:0x80361BEC; // type:function size:0x78 scope:global +SNDSTRMI_startstream__FP16SNDSTREAMCHANNEL = .text:0x80361C64; // type:function size:0x298 scope:global +SNDSTRMI_calcdatarate__FP15SNDSAMPLEFORMAT = .text:0x80361EFC; // type:function size:0x78 scope:global +SNDSTRMI_destroyall__Fv = .text:0x80361F74; // type:function size:0x5C scope:global +SNDSTRMI_getstreamptr__Fi = .text:0x80361FD0; // type:function size:0x34 scope:global +SNDSTRMI_removerequest__Fi = .text:0x80362004; // type:function size:0x68 scope:global +SNDSTRMI_releasecallback__FPvT0 = .text:0x8036206C; // type:function size:0x3C scope:global +SNDSTRMI_framescallback__FiiPv = .text:0x803620A8; // type:function size:0xA8 scope:global +SNDSTRMI_parseheader__FiP14STREAMCHUNKHDR = .text:0x80362150; // type:function size:0x23C scope:global +SNDSTRMI_parsedata__FP16SNDSTREAMCHANNELP14STREAMCHUNKHDR = .text:0x8036238C; // type:function size:0x118 scope:global +SNDSTRMI_parsechunk__FiP14STREAMCHUNKHDR = .text:0x803624A4; // type:function size:0x78 scope:global +SNDSTRMI_isheld__FP16SNDSTREAMCHANNEL = .text:0x8036251C; // type:function size:0xDC scope:global +SNDSTRMI_service__Fv = .text:0x803625F8; // type:function size:0x180 scope:global +SNDSTRMI_numcreated__Fv = .text:0x80362778; // type:function size:0x48 scope:global +SNDSTRMI_create__FP11SNDPLAYOPTSiiPviii = .text:0x803627C0; // type:function size:0x360 scope:global +SNDSTRMI_queue__FiiPcii = .text:0x80362B20; // type:function size:0x120 scope:global +SNDSTRM_create = .text:0x80362C40; // type:function size:0x28 scope:global +SNDSTRM_destroy = .text:0x80362C68; // type:function size:0xBC scope:global +SNDSTRM_queuefile = .text:0x80362D24; // type:function size:0x24 scope:global +SNDSTRM_purge = .text:0x80362D48; // type:function size:0x138 scope:global +gcc2_compiled. = .text:0x80362E80; // type:label scope:local +SNDSTRM_setazimuth = .text:0x80362E80; // type:function size:0x2B4 scope:global +gcc2_compiled. = .text:0x80363134; // type:label scope:local +StreamFader__3SndPv = .text:0x80363134; // type:function size:0x154 scope:global +SNDSTRM_autovol = .text:0x80363288; // type:function size:0x184 scope:global +gcc2_compiled. = .text:0x8036340C; // type:label scope:local +SNDSTRM_createtap = .text:0x8036340C; // type:function size:0x40 scope:global +gcc2_compiled. = .text:0x8036344C; // type:label scope:local +SNDSTRM_fxlevel = .text:0x8036344C; // type:function size:0xFC scope:global +gcc2_compiled. = .text:0x80363548; // type:label scope:local +SNDSTRMI_getrequestptr__Fi = .text:0x80363548; // type:function size:0x78 scope:global +gcc2_compiled. = .text:0x803635C0; // type:label scope:local +SNDSTRM_modifyhold = .text:0x803635C0; // type:function size:0x58 scope:global +gcc2_compiled. = .text:0x80363618; // type:label scope:local +SNDSTRM_lowpass = .text:0x80363618; // type:function size:0x50 scope:global +gcc2_compiled. = .text:0x80363668; // type:label scope:local +SNDstop = .text:0x80363668; // type:function size:0x60 scope:global +gcc2_compiled. = .text:0x803636C8; // type:label scope:local +SNDSTRM_overheadtap = .text:0x803636C8; // type:function size:0x48 scope:global +SNDSTRM_overhead = .text:0x80363710; // type:function size:0x44 scope:global +gcc2_compiled. = .text:0x80363754; // type:label scope:local +SNDSTRM_pitchmult = .text:0x80363754; // type:function size:0x5C scope:global +gcc2_compiled. = .text:0x803637B0; // type:label scope:local +SNDSTRM_queuemem = .text:0x803637B0; // type:function size:0x2C scope:global +gcc2_compiled. = .text:0x803637DC; // type:label scope:local +SNDSTRM_queuerequestid = .text:0x803637DC; // type:function size:0x2C scope:global +gcc2_compiled. = .text:0x80363808; // type:label scope:local +SNDSTRM_drylevel = .text:0x80363808; // type:function size:0x50 scope:global +gcc2_compiled. = .text:0x80363858; // type:label scope:local +SNDSTRM_requeststatus = .text:0x80363858; // type:function size:0x214 scope:global +gcc2_compiled. = .text:0x80363A6C; // type:label scope:local +SNDSTRM_setgreedylevel = .text:0x80363A6C; // type:function size:0x4C scope:global +gcc2_compiled. = .text:0x80363AB8; // type:label scope:local +SNDSTRM_status = .text:0x80363AB8; // type:function size:0xE0 scope:global +gcc2_compiled. = .text:0x80363B98; // type:label scope:local +SNDSTRM_timemult = .text:0x80363B98; // type:function size:0x6C scope:global +gcc2_compiled. = .text:0x80363C04; // type:label scope:local +SNDSTRM_setvol = .text:0x80363C04; // type:function size:0x24C scope:global +gcc2_compiled. = .text:0x80363E50; // type:label scope:local +SetMaxBanks__Q23Snd6Systemi = .text:0x80363E50; // type:function size:0x74 scope:global +CapOutputMode__Q23Snd6SystemQ23Snd10OutputModePb = .text:0x80363EC4; // type:function size:0xA4 scope:global +SetOutputMode__Q23Snd6SystemQ23Snd10OutputMode = .text:0x80363F68; // type:function size:0x78 scope:global +SetOutputSampleRate__Q23Snd6SystemQ23Snd6Devicei = .text:0x80363FE0; // type:function size:0xE0 scope:global +SetVoices__Q23Snd6SystemQ23Snd6Devicei = .text:0x803640C0; // type:function size:0x10C scope:global +SetSndInitsAram__Q23Snd6Systemb = .text:0x803641CC; // type:function size:0x74 scope:global +Init__Q23Snd6Systemi = .text:0x80364240; // type:function size:0x238 scope:global +ReInit__Q23Snd6System = .text:0x80364478; // type:function size:0x178 scope:global +IsInited__Q23Snd6System = .text:0x803645F0; // type:function size:0x18 scope:global +Restore__Q23Snd6System = .text:0x80364608; // type:function size:0x30 scope:global +SetHeap__Q23Snd6MemoryQ23Snd6DevicePvi = .text:0x80364638; // type:function size:0xB0 scope:global +SetHeapThreshold__Q23Snd6MemoryQ23Snd6Devicef = .text:0x803646E8; // type:function size:0xA8 scope:global +gcc2_compiled. = .text:0x80364790; // type:label scope:local +SNDSYS_getopts__FP10SNDSYSOPTS = .text:0x80364790; // type:function size:0x154 scope:global +SNDSYS_setopts__FP10SNDSYSOPTS = .text:0x803648E4; // type:function size:0x12C scope:global +SNDSYSI_init__FPvii = .text:0x80364A10; // type:function size:0x138 scope:global +SNDSYS_restore__Fv = .text:0x80364B48; // type:function size:0xF8 scope:global +SNDSYSI_chanpubinit__Fv = .text:0x80364C40; // type:function size:0x100 scope:global +SNDSYSI_updatesso__FP10SNDSYSOPTS = .text:0x80364D40; // type:function size:0xD4 scope:global +gcc2_compiled. = .text:0x80364E14; // type:label scope:local +iSNDserveraddclient__FPFv_v = .text:0x80364E14; // type:function size:0x2C scope:global +iSNDserverremoveclient__FPFv_v = .text:0x80364E40; // type:function size:0x9C scope:global +SNDSYS_service = .text:0x80364EDC; // type:function size:0x78 scope:global +gcc2_compiled. = .text:0x80364F54; // type:label scope:local +CsisMutexLock__3Sndv = .text:0x80364F54; // type:function size:0x20 scope:global +CsisMutexUnlock__3Sndv = .text:0x80364F74; // type:function size:0x20 scope:global +VectorToCsisMutex__Q23Snd6System = .text:0x80364F94; // type:function size:0x3C scope:global +gcc2_compiled. = .text:0x80364FD0; // type:label scope:local +SNDBANKI_findfreekey__Fv = .text:0x80364FD0; // type:function size:0x84 scope:global +SNDBANKI_playtimbre__FiiPvP11SNDPLAYOPTSP15SNDIPATCHHEADERiii = .text:0x80365054; // type:function size:0x640 scope:global +SNDBANKI_playpatch__FPvP11TAGGEDPATCHiiP11SNDPLAYOPTS = .text:0x80365694; // type:function size:0x260 scope:global +gcc2_compiled. = .text:0x803658F4; // type:label scope:local +SNDCTRL_timemult = .text:0x803658F4; // type:function size:0x98 scope:global +gcc2_compiled. = .text:0x8036598C; // type:label scope:local +SNDI_parsetimbre__FPPvP15SNDIPATCHHEADER = .text:0x8036598C; // type:function size:0x6A4 scope:global +gcc2_compiled. = .text:0x80366030; // type:label scope:local +SNDREAL6_systemtask__3SndPvi = .text:0x80366030; // type:function size:0x20 scope:local +SNDREAL6_abortmsg__3SndPc = .text:0x80366050; // type:function size:0x4 scope:global +VectorToReal6__Q23Snd6System = .text:0x80366054; // type:function size:0x74 scope:global +gcc2_compiled. = .text:0x803660C8; // type:label scope:local +SNDvol = .text:0x803660C8; // type:function size:0x11C scope:global +SetVol__Q23Snd3Hali = .text:0x803661E4; // type:function size:0x8C scope:global +__static_initialization_and_destruction_0 = .text:0x80366270; // type:function size:0x28 scope:local +_GLOBAL_.I._3Snd.MPEGuse_MMX = .text:0x80366298; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x803662C4; // type:label scope:local +SetCustomFx__Q23Snd3HalPvT1 = .text:0x803662C4; // type:function size:0x50 scope:global +Reset__Q23Snd3HalPv = .text:0x80366314; // type:function size:0x44 scope:global +SNDPLATFORM_setfxlevel__Fii = .text:0x80366358; // type:function size:0xC4 scope:global +gcc2_compiled. = .text:0x8036641C; // type:label scope:local +SNDDRV_DSPMixerResetChannel__FP16SNDDRVMIXCHANNEL = .text:0x8036641C; // type:function size:0x44 scope:global +SNDDRV_DSPMixerSetPan__FP6_AXVPBPfUsi = .text:0x80366460; // type:function size:0xD8 scope:global +SNDDRV_DSPMixerSetAuxBus__FP6_AXVPBUsi = .text:0x80366538; // type:function size:0x74 scope:global +SNDDRV_DSPMixerInit__Fi = .text:0x803665AC; // type:function size:0x54 scope:global +SNDDRV_DSPMixerInitChannel__FP6_AXVPBUliUsUsPfUsi = .text:0x80366600; // type:function size:0x1F4 scope:global +SNDDRV_DSPMixerReleaseChannel__FP6_AXVPB = .text:0x803667F4; // type:function size:0x1C scope:global +SNDDRV_DSPMixerSetVol__FP6_AXVPBi = .text:0x80366810; // type:function size:0x28 scope:global +SNDDRV_DSPMixerUpdate__Fv = .text:0x80366838; // type:function size:0x42C scope:global +gcc2_compiled. = .text:0x80366C64; // type:label scope:local +SNDDRV_freenextframe__Fv = .text:0x80366C64; // type:function size:0xA4 scope:global +SNDDRV_mixvoicefree__Fi = .text:0x80366D08; // type:function size:0x2C scope:global +SNDDRV_callbackdropvoice__FPv = .text:0x80366D34; // type:function size:0xE8 scope:global +SNDDRV_allocateaxvoice__Fi = .text:0x80366E1C; // type:function size:0x274 scope:global +SNDDRV_freeaxvoice__Fii = .text:0x80367090; // type:function size:0x114 scope:global +SNDDRV_dmaslotenter__Fi = .text:0x803671A4; // type:function size:0x8C scope:global +SNDDRV_dmcallback__FUl = .text:0x80367230; // type:function size:0x4C scope:global +SNDDRV_dmapost__FUlPvT1Uli = .text:0x8036727C; // type:function size:0x120 scope:global +SNDDRV_restoredma__Fi = .text:0x8036739C; // type:function size:0x98 scope:global +SNDDRV_audiocallback__FPvT0 = .text:0x80367434; // type:function size:0x190 scope:global +SNDDRV_initmixer__Fv = .text:0x803675C4; // type:function size:0xF0 scope:global +SNDDRV_restoremixer__Fv = .text:0x803676B4; // type:function size:0x8C scope:global +SNDDRV_fillbufwithpackets__FiP13SNDDRVPKTCHANP7CHANPUB = .text:0x80367740; // type:function size:0x224 scope:global +SNDDRV_thread__FPv = .text:0x80367964; // type:function size:0x13C scope:global +SNDPLATFORM_outputcaps__Fv = .text:0x80367AA0; // type:function size:0xB8 scope:global +SNDPLATFORM_outputset__Fv = .text:0x80367B58; // type:function size:0x1F0 scope:global +SNDPLATFORM_init__F9StartMode = .text:0x80367D48; // type:function size:0x318 scope:global +SNDPLATFORM_restore__F9StartMode = .text:0x80368060; // type:function size:0x98 scope:global +iSNDserve__Fv = .text:0x803680F8; // type:function size:0x384 scope:global +SNDPLATFORM_getvoicerange__FiPiT1 = .text:0x8036847C; // type:function size:0x44 scope:global +SNDPLATFORM_asyncresolvetimbre__FP15SNDIPATCHHEADERPcPi = .text:0x803684C0; // type:function size:0x38 scope:global +SNDPLATFORM_playtimbre__FP15SNDIPATCHHEADERPviiii = .text:0x803684F8; // type:function size:0x4D8 scope:global +SNDDRV_getmastervoice__Fi = .text:0x803689D0; // type:function size:0x30 scope:global +SNDDRV_getsamplechan__Fi = .text:0x80368A00; // type:function size:0x64 scope:global +SNDPLATFORM_packetoverhead__Fv = .text:0x80368A64; // type:function size:0x8 scope:global +SNDPLATFORM_packetplaycreate__FiPv = .text:0x80368A6C; // type:function size:0xC4 scope:global +SNDPLATFORM_packetplay__FiiiiiP15SNDSAMPLEFORMATP13SNDSAMPLEATTR = .text:0x80368B30; // type:function size:0x2E8 scope:global +SNDPLATFORM_packetplaydestroy__Fi = .text:0x80368E18; // type:function size:0x84 scope:global +SNDPLATFORM_outputlatency__Fv = .text:0x80368E9C; // type:function size:0x8 scope:global +SetVolInternal__Q23Snd3Hali = .text:0x80368EA4; // type:function size:0x14C scope:global +SetDry__Q23Snd3Hali = .text:0x80368FF0; // type:function size:0x3C scope:global +SetPan__Q23Snd3Hali = .text:0x8036902C; // type:function size:0x1F0 scope:global +SNDPLATFORM_setpitch__Fi = .text:0x8036921C; // type:function size:0x158 scope:global +SNDPLATFORM_timemult__Fii = .text:0x80369374; // type:function size:0x8C scope:global +SNDPLATFORM_lowpass__Fii = .text:0x80369400; // type:function size:0xF0 scope:global +SNDPLATFORM_highpass__Fii = .text:0x803694F0; // type:function size:0x88 scope:global +SNDPLATFORM_getcurframe__Fi = .text:0x80369578; // type:function size:0xB0 scope:global +SNDPLATFORM_stop__Fi = .text:0x80369628; // type:function size:0x15C scope:global +SNDPLATFORM_filteradd__FiP12SNDFILTERDEF = .text:0x80369784; // type:function size:0x98 scope:global +SNDPLATFORM_memalloc__Fii = .text:0x8036981C; // type:function size:0x44 scope:global +SNDPLATFORM_memfree__FiUi = .text:0x80369860; // type:function size:0x4C scope:global +SNDPLATFORM_memlimits__Fii = .text:0x803698AC; // type:function size:0x54 scope:global +SNDPLATFORM_memlargestunused__FPi = .text:0x80369900; // type:function size:0x38 scope:global +SNDPLATFORM_download__FiPvT1i = .text:0x80369938; // type:function size:0x54 scope:global +SNDPLATFORM_downloadcomplete__Fi = .text:0x8036998C; // type:function size:0xA8 scope:global +SNDI_mutexalloc__Fv = .text:0x80369A34; // type:function size:0x28 scope:global +SNDI_mutexfree__Fv = .text:0x80369A5C; // type:function size:0x4 scope:global +SNDI_mutexlock__Fv = .text:0x80369A60; // type:function size:0x28 scope:global +SNDI_mutexunlock__Fv = .text:0x80369A88; // type:function size:0x28 scope:global +SNDPLATFORM_ModeSetUp__FP10SNDSYSOPTSQ23Snd10OutputMode = .text:0x80369AB0; // type:function size:0x44 scope:global +gcc2_compiled. = .text:0x80369AF4; // type:label scope:local +MIX_getwetbuffer = .text:0x80369AF4; // type:function size:0x14 scope:global +remap__Fiii = .text:0x80369B08; // type:function size:0x28 scope:global +SNDMIXI_modlapifxadd = .text:0x80369B30; // type:function size:0x358 scope:global +SNDMIXI_restorefx2__FiP16BUSNODE_INSTANCE = .text:0x80369E88; // type:function size:0x13C scope:global +SNDMIXI_initfx__FiPviP16BUSNODE_INSTANCE = .text:0x80369FC4; // type:function size:0x50C scope:global +MIX_createFxglobals = .text:0x8036A4D0; // type:function size:0xA4 scope:global +MIX_destroyFxglobals = .text:0x8036A574; // type:function size:0xB4 scope:global +MIX_initreverb = .text:0x8036A628; // type:function size:0x20C scope:global +MIX_restorereverb = .text:0x8036A834; // type:function size:0x114 scope:global +gcc2_compiled. = .text:0x8036A948; // type:label scope:local +SNDSYS_linkmaincpumixer = .text:0x8036A948; // type:function size:0x84 scope:global +gcc2_compiled. = .text:0x8036A9CC; // type:label scope:local +MIXI_interpolateto0__FPfT0 = .text:0x8036A9CC; // type:function size:0x1A0 scope:global +MIXI_interpolatemix = .text:0x8036AB6C; // type:function size:0x1C8 scope:global +SNDMIX_setmasterlowpass = .text:0x8036AD34; // type:function size:0x4 scope:global +SNDMIXI_volramp__FP11SNDMIXVOICE = .text:0x8036AD38; // type:function size:0x230 scope:global +SNDI_New__FUi = .text:0x8036AF68; // type:function size:0x20 scope:global +SNDI_Delete__FPv = .text:0x8036AF88; // type:function size:0x20 scope:global +MIX_create = .text:0x8036AFA8; // type:function size:0x2C0 scope:global +MIX_destroy = .text:0x8036B268; // type:function size:0xD8 scope:global +MIX_reset = .text:0x8036B340; // type:function size:0x2C scope:global +MIX_playinit = .text:0x8036B36C; // type:function size:0x214 scope:global +MIX_play = .text:0x8036B580; // type:function size:0xA4 scope:global +MIXI_stop__Fi = .text:0x8036B624; // type:function size:0x40 scope:global +MIX_stop = .text:0x8036B664; // type:function size:0x100 scope:global +SNDMIX_setdrygain = .text:0x8036B764; // type:function size:0x34 scope:global +SNDMIX_setwetgain = .text:0x8036B798; // type:function size:0x34 scope:global +MIX_audioslice = .text:0x8036B7CC; // type:function size:0x3B8 scope:global +gcc2_compiled. = .text:0x8036BB84; // type:label scope:local +MIX_filteradd = .text:0x8036BB84; // type:function size:0x88 scope:global +gcc2_compiled. = .text:0x8036BC0C; // type:label scope:local +MIX_getframe = .text:0x8036BC0C; // type:function size:0x48 scope:global +gcc2_compiled. = .text:0x8036BC54; // type:label scope:local +MIX_sethighpass = .text:0x8036BC54; // type:function size:0xD0 scope:global +gcc2_compiled. = .text:0x8036BD24; // type:label scope:local +MIX_setlowpass = .text:0x8036BD24; // type:function size:0x14C scope:global +gcc2_compiled. = .text:0x8036BE70; // type:label scope:local +MIX_setpitch = .text:0x8036BE70; // type:function size:0xBC scope:global +gcc2_compiled. = .text:0x8036BF2C; // type:label scope:local +MIX_settimemult = .text:0x8036BF2C; // type:function size:0x3C scope:global +gcc2_compiled. = .text:0x8036BF68; // type:label scope:local +gcc2_compiled. = .text:0x8036BF68; // type:label scope:local +crossfade__FPfN20ii = .text:0x8036BF68; // type:function size:0x11C scope:local +determineaction__FifPPUcPf = .text:0x8036C084; // type:function size:0x14C scope:local +applyaction__FP16TIMESTRETCHSTATEPPfi = .text:0x8036C1D0; // type:function size:0x154 scope:local +transferframes__FP16TIMESTRETCHSTATEPiPPf = .text:0x8036C324; // type:function size:0x9C scope:local +stretchframesneeded__FPvi = .text:0x8036C3C0; // type:function size:0x124 scope:global +stretch__FPviPfT2 = .text:0x8036C4E4; // type:function size:0x148 scope:global +SFILTER_timestretchsetratio__FP16TIMESTRETCHSTATEi = .text:0x8036C62C; // type:function size:0x40 scope:global +SFILTER_timestretch__FPviT0T0i = .text:0x8036C66C; // type:function size:0x140 scope:global +SFILTER_timestretchrestore__FPv = .text:0x8036C7AC; // type:function size:0x44 scope:global +SFILTER_timestretchinit__FP16TIMESTRETCHSTATEPUci = .text:0x8036C7F0; // type:function size:0xC4 scope:global +gcc2_compiled. = .text:0x8036C8B4; // type:label scope:local +decode16x87 = .text:0x8036C8B4; // type:function size:0x58 scope:global +gcc2_compiled. = .text:0x8036C90C; // type:label scope:local +gcc2_compiled. = .text:0x8036C90C; // type:label scope:local +SNDI_equalpower__FP11SNDGAINPAIRfff = .text:0x8036C90C; // type:function size:0x6C scope:global +SNDI_precalcaztospkrvol__Fv = .text:0x8036C978; // type:function size:0x408 scope:global +SNDI_aztospkrvol__FiPf = .text:0x8036CD80; // type:function size:0x9C scope:global +SNDI_freespkrtable__Fv = .text:0x8036CE1C; // type:function size:0x40 scope:global +SNDI_spkrconfig__Fv = .text:0x8036CE5C; // type:function size:0x1B4 scope:global +gcc2_compiled. = .text:0x8036D010; // type:label scope:local +iSNDdetunetolinear__Fi = .text:0x8036D010; // type:function size:0x8C scope:global +iSNDcalcpitch__Fi = .text:0x8036D09C; // type:function size:0xD4 scope:global +gcc2_compiled. = .text:0x8036D170; // type:label scope:local +SNDCTRL_filteradd = .text:0x8036D170; // type:function size:0x68 scope:global +gcc2_compiled. = .text:0x8036D1D8; // type:label scope:local +SetDefaultAzimuths__Q23Snd4UtilP7CHANPUB = .text:0x8036D1D8; // type:function size:0x70 scope:global +gcc2_compiled. = .text:0x8036D248; // type:label scope:local +SNDREAL_exithandler__Fv = .text:0x8036D248; // type:function size:0x20 scope:global +gcc2_compiled. = .text:0x8036D268; // type:label scope:local +SNDI_getb__FPvi = .text:0x8036D268; // type:function size:0x80 scope:global +gcc2_compiled. = .text:0x8036D2E8; // type:label scope:local +SNDI_gettag__FP10SNDTAGINFO = .text:0x8036D2E8; // type:function size:0xEC scope:global +gcc2_compiled. = .text:0x8036D3D4; // type:label scope:local +iSNDcalcvol__Fi = .text:0x8036D3D4; // type:function size:0x168 scope:global +gcc2_compiled. = .text:0x8036D53C; // type:label scope:local +SNDLINKI_init__FP11SNDLINKLIST = .text:0x8036D53C; // type:function size:0x14 scope:global +SNDLINKI_push__FP11SNDLINKLISTP11SNDLINKNODE = .text:0x8036D550; // type:function size:0x3C scope:global +SNDLINKI_pushtail__FP11SNDLINKLISTP11SNDLINKNODE = .text:0x8036D58C; // type:function size:0x3C scope:global +SNDLINKI_pop__FP11SNDLINKLIST = .text:0x8036D5C8; // type:function size:0x40 scope:global +SNDLINKI_remove__FP11SNDLINKLISTP11SNDLINKNODE = .text:0x8036D608; // type:function size:0x60 scope:global +gcc2_compiled. = .text:0x8036D668; // type:label scope:local +SNDMEM_gethighwater = .text:0x8036D668; // type:function size:0x20 scope:global +gcc2_compiled. = .text:0x8036D688; // type:label scope:local +SNDI_cos__Ff = .text:0x8036D688; // type:function size:0x98 scope:global +gcc2_compiled. = .text:0x8036D720; // type:label scope:local +SNDI_sin__Ff = .text:0x8036D720; // type:function size:0x94 scope:global +gcc2_compiled. = .text:0x8036D7B4; // type:label scope:local +SNDover = .text:0x8036D7B4; // type:function size:0x24 scope:global +gcc2_compiled. = .text:0x8036D7D8; // type:label scope:local +SNDI_pantoazimuth__Fi = .text:0x8036D7D8; // type:function size:0x14 scope:global +gcc2_compiled. = .text:0x8036D7EC; // type:label scope:local +SNDI_patchtohdr__FPvP11TAGGEDPATCHP15SNDSAMPLEFORMATP13SNDSAMPLEATTRP13SNDSAMPLEDESCPUc = .text:0x8036D7EC; // type:function size:0x51C scope:global +gcc2_compiled. = .text:0x8036DD08; // type:label scope:local +SNDPKTPLAYI_voicetopackethandle__Fi = .text:0x8036DD08; // type:function size:0x88 scope:global +gcc2_compiled. = .text:0x8036DD90; // type:label scope:local +SNDPROFILEI_voicesinrange__Fi = .text:0x8036DD90; // type:function size:0x6C scope:global +SNDPROFILE_voices = .text:0x8036DDFC; // type:function size:0x58 scope:global +gcc2_compiled. = .text:0x8036DE54; // type:label scope:local +ReallocBuf__Q23Snd4UtilPPvPiii = .text:0x8036DE54; // type:function size:0x94 scope:global +gcc2_compiled. = .text:0x8036DEE8; // type:label scope:local +randrange__Fi = .text:0x8036DEE8; // type:function size:0x5C scope:global +gcc2_compiled. = .text:0x8036DF44; // type:label scope:local +CODASetNew__3SndPFUi_Pv = .text:0x8036DF44; // type:function size:0xC scope:global +CODASetDelete__3SndPFPv_v = .text:0x8036DF50; // type:function size:0xC scope:global +gcc2_compiled. = .text:0x8036DF5C; // type:label scope:local +SetMemCpy__Q33Snd4Coda6SystemPFPvPCvUi_Pv = .text:0x8036DF5C; // type:function size:0x10 scope:global +gcc2_compiled. = .text:0x8036DF6C; // type:label scope:local +SNDARAM_init__Fi = .text:0x8036DF6C; // type:function size:0x50 scope:global +SNDARAM_setpool__FUii = .text:0x8036DFBC; // type:function size:0x54 scope:global +SNDARAM_restore__Fv = .text:0x8036E010; // type:function size:0x50 scope:global +SNDARAM_constrain__FPUiPi = .text:0x8036E060; // type:function size:0x50 scope:global +SNDARAM_largestfree__FPUi = .text:0x8036E0B0; // type:function size:0x17C scope:global +SNDARAM_alloc__Fi = .text:0x8036E22C; // type:function size:0x1C4 scope:global +SNDARAM_free__FUi = .text:0x8036E3F0; // type:function size:0x9C scope:global +gcc2_compiled. = .text:0x8036E48C; // type:label scope:local +SFILTER_amplf__FPviT0T0i = .text:0x8036E48C; // type:function size:0x94 scope:global +SFILTER_createAMPLF__FP10AMPLFSTATE = .text:0x8036E520; // type:function size:0x40 scope:global +SFILTER_modifyAMPLF__FP10AMPLFSTATEPi = .text:0x8036E560; // type:function size:0x44 scope:global +gcc2_compiled. = .text:0x8036E5A4; // type:label scope:local +SFILTER_bpfFIR8__FPviT0T0i = .text:0x8036E5A4; // type:function size:0x80 scope:global +SFILTER_createBPFFIR8__FP8BPFSTATE = .text:0x8036E624; // type:function size:0x54 scope:global +SFILTER_modifyBPFFIR8__FP8BPFSTATEPi = .text:0x8036E678; // type:function size:0xB8 scope:global +gcc2_compiled. = .text:0x8036E730; // type:label scope:local +SFILTER_echo__FPviT0T0i = .text:0x8036E730; // type:function size:0x1C4 scope:global +SFILTER_echorestore__FPv = .text:0x8036E8F4; // type:function size:0x44 scope:global +SFILTER_createECHO__FP9ECHOSTATE = .text:0x8036E938; // type:function size:0x44 scope:global +SFILTER_modifyECHO__FP9ECHOSTATEPi = .text:0x8036E97C; // type:function size:0xC4 scope:global +gcc2_compiled. = .text:0x8036EA40; // type:label scope:local +SFILTER_ft24_32__FPviT0T0i = .text:0x8036EA40; // type:function size:0x60 scope:global +SFILTER_ft24_32init__FP12FT24_32STATE = .text:0x8036EAA0; // type:function size:0x18 scope:global +gcc2_compiled. = .text:0x8036EAB8; // type:label scope:local +SFILTER_hpfFIR8__FPviT0T0i = .text:0x8036EAB8; // type:function size:0x80 scope:global +SFILTER_createHPFFIR8__FP8HPFSTATE = .text:0x8036EB38; // type:function size:0x54 scope:global +SFILTER_modifyHPFFIR8__FP8HPFSTATEPi = .text:0x8036EB8C; // type:function size:0x84 scope:global +gcc2_compiled. = .text:0x8036EC10; // type:label scope:local +SFILTER_add = .text:0x8036EC10; // type:function size:0x68 scope:global +SFILTER_remove = .text:0x8036EC78; // type:function size:0x7C scope:global +SFILTER_connect = .text:0x8036ECF4; // type:function size:0xC8 scope:global +gcc2_compiled. = .text:0x8036EDBC; // type:label scope:local +calcFIRCoeffs__FP11SNDFIRSTATEi = .text:0x8036EDBC; // type:function size:0x3A8 scope:global +gcc2_compiled. = .text:0x8036F164; // type:label scope:local +SNDI_fir8init__FP11SNDFIRSTATE = .text:0x8036F164; // type:function size:0x2C scope:global +SNDI_fir8__FP11SNDFIRSTATEiPvT2 = .text:0x8036F190; // type:function size:0xC0 scope:global +gcc2_compiled. = .text:0x8036F250; // type:label scope:local +SFILTER_lpfRC__FPviT0T0i = .text:0x8036F250; // type:function size:0xA8 scope:global +SFILTER_createLPFRC__FP10LPFRCSTATE = .text:0x8036F2F8; // type:function size:0x40 scope:global +SFILTER_modifyLPFRC__FP10LPFRCSTATEPi = .text:0x8036F338; // type:function size:0xD0 scope:global +gcc2_compiled. = .text:0x8036F408; // type:label scope:local +SFILTER_lpfFIR8__FPviT0T0i = .text:0x8036F408; // type:function size:0x7C scope:global +SFILTER_createLPFFIR8__FP8LPFSTATE = .text:0x8036F484; // type:function size:0x54 scope:global +SFILTER_modifyLPFFIR8__FP8LPFSTATEPi = .text:0x8036F4D8; // type:function size:0x88 scope:global +gcc2_compiled. = .text:0x8036F560; // type:label scope:local +SFILTER_mixer__FPviT0T0i = .text:0x8036F560; // type:function size:0xEC scope:global +SFILTER_mixerrestore__FPv = .text:0x8036F64C; // type:function size:0x2C scope:global +SFILTER_createMIX__FP10MIXERSTATE = .text:0x8036F678; // type:function size:0x44 scope:global +gcc2_compiled. = .text:0x8036F6BC; // type:label scope:local +resonx87__FP10RESONSTATEiPvT2 = .text:0x8036F6BC; // type:function size:0x130 scope:global +SFILTER_reson__FPviT0T0i = .text:0x8036F7EC; // type:function size:0x80 scope:global +SFILTER_createRESON__FP10RESONSTATE = .text:0x8036F86C; // type:function size:0x48 scope:global +SFILTER_modifyRESON__FP10RESONSTATEPi = .text:0x8036F8B4; // type:function size:0x158 scope:global +gcc2_compiled. = .text:0x8036FA0C; // type:label scope:local +SFILTER_rsfsetpitch__FP8RSFSTATEi = .text:0x8036FA0C; // type:function size:0x8 scope:global +SFILTER_rsf__FPviT0T0i = .text:0x8036FA14; // type:function size:0x2D8 scope:global +SFILTER_rsfinit__FP8RSFSTATEii = .text:0x8036FCEC; // type:function size:0x5C scope:global +gcc2_compiled. = .text:0x8036FD48; // type:label scope:local +SFILTER_splitter__FPviT0T0i = .text:0x8036FD48; // type:function size:0x100 scope:global +SFILTER_splitrestore__FPv = .text:0x8036FE48; // type:function size:0x2C scope:global +SFILTER_createSPLIT__FP10SPLITSTATE = .text:0x8036FE74; // type:function size:0x50 scope:global +gcc2_compiled. = .text:0x8036FEC4; // type:label scope:local +SFILTER_src__FPviT0T0i = .text:0x8036FEC4; // type:function size:0x50 scope:global +SFILTER_initSOURCE__FP8SRCSTATEPv = .text:0x8036FF14; // type:function size:0x1C scope:global +SFILTER_createSOURCE__FP8SRCSTATE = .text:0x8036FF30; // type:function size:0x28 scope:global +gcc2_compiled. = .text:0x8036FF58; // type:label scope:local +MIXI_initunpack16 = .text:0x8036FF58; // type:function size:0x48 scope:global +gcc2_compiled. = .text:0x8036FFA0; // type:label scope:local +MIXI_initunpackmt = .text:0x8036FFA0; // type:function size:0x60 scope:global +gcc2_compiled. = .text:0x80370000; // type:label scope:local +MIXI_initunpackxa = .text:0x80370000; // type:function size:0x48 scope:global +gcc2_compiled. = .text:0x80370048; // type:label scope:local +mixc = .text:0x80370048; // type:function size:0x30 scope:global +gcc2_compiled. = .text:0x80370078; // type:label scope:local +SFILTER_unpackfgetframe__FPv = .text:0x80370078; // type:function size:0x8 scope:global +SFILTER_unpackf__FPviT0T0i = .text:0x80370080; // type:function size:0xD8 scope:global +SFILTER_unpackfinit__FPvP16UNPACKINITPARAMS = .text:0x80370158; // type:function size:0x40 scope:global +gcc2_compiled. = .text:0x80370198; // type:label scope:local +SFILTER_unpacklfgetframe__FPv = .text:0x80370198; // type:function size:0x8 scope:global +SFILTER_unpacklf__FPviT0T0i = .text:0x803701A0; // type:function size:0xBC scope:global +SFILTER_unpacklfinit__FPvP16UNPACKINITPARAMS = .text:0x8037025C; // type:function size:0x44 scope:global +gcc2_compiled. = .text:0x803702A0; // type:label scope:local +SFILTER_unpackgetframemtf__FPv = .text:0x803702A0; // type:function size:0x8 scope:global +SFILTER_unpackmtf__FPviT0T0i = .text:0x803702A8; // type:function size:0x90 scope:global +SFILTER_unpackmtfrestore__FPv = .text:0x80370338; // type:function size:0x2C scope:global +SFILTER_unpackmtfinit__FPvP16UNPACKINITPARAMS = .text:0x80370364; // type:function size:0x100 scope:global +gcc2_compiled. = .text:0x80370464; // type:label scope:local +SFILTER_unpackgetframemtlf__FPv = .text:0x80370464; // type:function size:0x8 scope:global +SFILTER_unpackmtlf__FPviT0T0i = .text:0x8037046C; // type:function size:0xC8 scope:global +SFILTER_unpackmtlfrestore__FPv = .text:0x80370534; // type:function size:0x2C scope:global +SFILTER_unpackmtlfinit__FPvP16UNPACKINITPARAMS = .text:0x80370560; // type:function size:0xE0 scope:global +gcc2_compiled. = .text:0x80370640; // type:label scope:local +SFILTER_unpackmtpf__FPviT0T0i = .text:0x80370640; // type:function size:0x258 scope:global +SFILTER_unpackmtpfrestore__FPv = .text:0x80370898; // type:function size:0x2C scope:global +SFILTER_unpackmtpfinit__FPvP16UNPACKINITPARAMS = .text:0x803708C4; // type:function size:0x90 scope:global +gcc2_compiled. = .text:0x80370954; // type:label scope:local +SFILTER_unpackpf__FPviT0T0i = .text:0x80370954; // type:function size:0x130 scope:global +SFILTER_unpackpfinit__FPvP16UNPACKINITPARAMS = .text:0x80370A84; // type:function size:0x74 scope:global +gcc2_compiled. = .text:0x80370AF8; // type:label scope:local +SFILTER_unpackxaf__FPviT0T0i = .text:0x80370AF8; // type:function size:0x94 scope:global +SFILTER_unpackgetframexaf__FPv = .text:0x80370B8C; // type:function size:0x8 scope:global +SFILTER_unpackxafrestore__FPv = .text:0x80370B94; // type:function size:0x2C scope:global +SFILTER_unpackxafinit__FPvP16UNPACKINITPARAMS = .text:0x80370BC0; // type:function size:0x90 scope:global +gcc2_compiled. = .text:0x80370C50; // type:label scope:local +SFILTER_unpackxalf__FPviT0T0i = .text:0x80370C50; // type:function size:0x288 scope:global +SFILTER_unpackgetframexalf__FPv = .text:0x80370ED8; // type:function size:0x8 scope:global +SFILTER_unpackxalfrestore__FPv = .text:0x80370EE0; // type:function size:0x2C scope:global +SFILTER_unpackxalfinit__FPvP16UNPACKINITPARAMS = .text:0x80370F0C; // type:function size:0xD8 scope:global +gcc2_compiled. = .text:0x80370FE4; // type:label scope:local +SFILTER_unpackxapf__FPviT0T0i = .text:0x80370FE4; // type:function size:0x1B8 scope:global +SFILTER_unpackxapfrestore__FPv = .text:0x8037119C; // type:function size:0x2C scope:global +SFILTER_unpackxapfinit__FPvP16UNPACKINITPARAMS = .text:0x803711C8; // type:function size:0x90 scope:global +gcc2_compiled. = .text:0x80371258; // type:label scope:local +SNDI_patchtohdrgen__FPvPQ29Sndgendef14GENTAGGEDPATCHP15SNDSAMPLEFORMATP13SNDSAMPLEATTRP13SNDSAMPLEDESC = .text:0x80371258; // type:function size:0x208 scope:global +gcc2_compiled. = .text:0x80371460; // type:label scope:local +SNDI_findmult16__Fii = .text:0x80371460; // type:function size:0x34 scope:global +gcc2_compiled. = .text:0x80371494; // type:label scope:local +SNDI_rootof1plusx__Ff = .text:0x80371494; // type:function size:0x90 scope:global +gcc2_compiled. = .text:0x80371524; // type:label scope:local +process_raw_block__3SndPQ23Snd10MXAPACKETF = .text:0x80371524; // type:function size:0x11C scope:global +decodexac__3SndPQ23Snd10MXAPACKETF = .text:0x80371640; // type:function size:0x150 scope:global +__nw__Q23Snd12CEAXABLKDecfUi = .text:0x80371790; // type:function size:0x2C scope:global +__dl__Q23Snd12CEAXABLKDecfPv = .text:0x803717BC; // type:function size:0x2C scope:global +__Q23Snd12CEAXABLKDecf = .text:0x803717E8; // type:function size:0x28 scope:global +Feed__Q23Snd12CEAXABLKDecfPvii = .text:0x80371810; // type:function size:0x3C scope:global +Decode__Q23Snd12CEAXABLKDecfPPfi = .text:0x8037184C; // type:function size:0x1B8 scope:global +GetState__Q23Snd12CEAXABLKDecf = .text:0x80371A04; // type:function size:0x30 scope:global +SetState__Q23Snd12CEAXABLKDecfPQ23Snd8XAFSTATE = .text:0x80371A34; // type:function size:0x14 scope:global +gcc2_compiled. = .text:0x80371A48; // type:label scope:local +__nw__Q23Snd10CMTBLKDecfUi = .text:0x80371A48; // type:function size:0x2C scope:global +__dl__Q23Snd10CMTBLKDecfPv = .text:0x80371A74; // type:function size:0x2C scope:global +getbits__3SndPQ23Snd15UTALKSTATE_CODAi = .text:0x80371AA0; // type:function size:0x60 scope:local +discardbits__3SndPQ23Snd15UTALKSTATE_CODAi = .text:0x80371B00; // type:function size:0x48 scope:global +readsamples__3SndPQ23Snd15UTALKSTATE_CODAiPfi = .text:0x80371B48; // type:function size:0x1F8 scope:global +interpolate__3SndPf = .text:0x80371D40; // type:function size:0x68 scope:local +reftolpc__3SndPfT1 = .text:0x80371DA8; // type:function size:0xF4 scope:local +filter__3SndPQ23Snd15UTALKSTATE_CODAii = .text:0x80371E9C; // type:function size:0x5C0 scope:local +initmut__Q23Snd10CMTBLKDecfPUcPQ23Snd15UTALKSTATE_CODAi = .text:0x8037245C; // type:function size:0x170 scope:global +decodemut__3SndPQ23Snd15UTALKSTATE_CODA = .text:0x803725CC; // type:function size:0x3F8 scope:global +__Q23Snd10CMTBLKDecf = .text:0x803729C4; // type:function size:0x30 scope:global +Feed__Q23Snd10CMTBLKDecfPvii = .text:0x803729F4; // type:function size:0x90 scope:global +Decode__Q23Snd10CMTBLKDecfPPfi = .text:0x80372A84; // type:function size:0x228 scope:global +GetState__Q23Snd10CMTBLKDecf = .text:0x80372CAC; // type:function size:0x40 scope:global +SetState__Q23Snd10CMTBLKDecfPQ23Snd8MTFSTATEi = .text:0x80372CEC; // type:function size:0x1C scope:global +SetCodecVersion__Q23Snd10CMTBLKDecfi = .text:0x80372D08; // type:function size:0x8 scope:global +gcc2_compiled. = .text:0x80372D10; // type:label scope:local +rsflc = .text:0x80372D10; // type:function size:0xC4 scope:global +gcc2_compiled. = .text:0x80372DD4; // type:label scope:local +SNDI_cheapsqrt__Fi = .text:0x80372DD4; // type:function size:0x38 scope:global +SNDI_findprime__Fii = .text:0x80372E0C; // type:function size:0xC4 scope:global +__Q24Csis14FunctionHandle = .text:0x80372ED0; // type:function size:0xC scope:global +Set__Q24Csis14FunctionHandlePCQ24Csis11InterfaceId = .text:0x80372EDC; // type:function size:0x48 scope:global +SetFast__Q24Csis14FunctionHandlePCQ24Csis11InterfaceId = .text:0x80372F24; // type:function size:0xEC scope:global +Valid__Q24Csis14FunctionHandle = .text:0x80373010; // type:function size:0x50 scope:global +__Q24Csis11ClassHandle = .text:0x80373060; // type:function size:0xC scope:global +Set__Q24Csis11ClassHandlePCQ24Csis11InterfaceId = .text:0x8037306C; // type:function size:0x48 scope:global +SetFast__Q24Csis11ClassHandlePCQ24Csis11InterfaceId = .text:0x803730B4; // type:function size:0xEC scope:global +Valid__Q24Csis11ClassHandle = .text:0x803731A0; // type:function size:0x50 scope:global +SetFast__Q24Csis20GlobalVariableHandlePCQ24Csis11InterfaceId = .text:0x803731F0; // type:function size:0xEC scope:global +Valid__Q24Csis20GlobalVariableHandle = .text:0x803732DC; // type:function size:0x50 scope:global +SendParameters__Q24Csis9ClassDataPQ24Csis9Parameter = .text:0x8037332C; // type:function size:0x54 scope:global +SetAllocator__Q24Csis6SystemPQ32EA9Allocator14ICoreAllocator = .text:0x80373380; // type:function size:0x48 scope:global +Alloc__Q24Csis6Systemi = .text:0x803733C8; // type:function size:0x40 scope:global +Free__Q24Csis6SystemPv = .text:0x80373408; // type:function size:0x38 scope:global +AllocFast__Q24Csis6Systemi = .text:0x80373440; // type:function size:0x4C scope:global +FreeFast__Q24Csis6SystemPv = .text:0x8037348C; // type:function size:0x44 scope:global +Init__Q24Csis6System = .text:0x803734D0; // type:function size:0x108 scope:global +Lock__Q24Csis6System = .text:0x803735D8; // type:function size:0x2C scope:global +Unlock__Q24Csis6System = .text:0x80373604; // type:function size:0x2C scope:global +Subscribe__Q24Csis6SystemPv = .text:0x80373630; // type:function size:0x188 scope:global +Unsubscribe__Q24Csis6SystemPv = .text:0x803737B8; // type:function size:0xE8 scope:global +Call__Q24Csis8FunctionPQ24Csis14FunctionHandlePv = .text:0x803738A0; // type:function size:0x48 scope:global +CallFast__Q24Csis8FunctionPQ24Csis14FunctionHandlePv = .text:0x803738E8; // type:function size:0x74 scope:global +Subscribe__Q24Csis8FunctionPQ24Csis14FunctionHandlePQ24Csis14FunctionClient = .text:0x8037395C; // type:function size:0x48 scope:global +SubscribeFast__Q24Csis8FunctionPQ24Csis14FunctionHandlePQ24Csis14FunctionClient = .text:0x803739A4; // type:function size:0x64 scope:global +UnsubscribeFast__Q24Csis8FunctionPQ24Csis14FunctionHandlePQ24Csis14FunctionClient = .text:0x80373A08; // type:function size:0x7C scope:global +CreateInstance__Q24Csis5ClassPQ24Csis11ClassHandlePvPPQ24Csis5Class = .text:0x80373A84; // type:function size:0x50 scope:global +CreateInstanceFast__Q24Csis5ClassPQ24Csis11ClassHandlePvPPQ24Csis5Class = .text:0x80373AD4; // type:function size:0xB8 scope:global +Release__Q24Csis5Class = .text:0x80373B8C; // type:function size:0x40 scope:global +ReleaseFast__Q24Csis5Class = .text:0x80373BCC; // type:function size:0xC8 scope:global +GetRefCount__Q24Csis5ClassPi = .text:0x80373C94; // type:function size:0x10 scope:global +SetMemberData__Q24Csis5ClassPv = .text:0x80373CA4; // type:function size:0x48 scope:global +SetMemberDataFast__Q24Csis5ClassPv = .text:0x80373CEC; // type:function size:0x24 scope:global +SubscribeConstructorFast__Q24Csis5ClassPQ24Csis11ClassHandlePQ24Csis22ClassConstructorClient = .text:0x80373D10; // type:function size:0x64 scope:global +UnsubscribeConstructor__Q24Csis5ClassPQ24Csis11ClassHandlePQ24Csis22ClassConstructorClient = .text:0x80373D74; // type:function size:0x48 scope:global +UnsubscribeConstructorFast__Q24Csis5ClassPQ24Csis11ClassHandlePQ24Csis22ClassConstructorClient = .text:0x80373DBC; // type:function size:0x7C scope:global +SubscribeDestructor__Q24Csis5ClassPQ24Csis21ClassDestructorClient = .text:0x80373E38; // type:function size:0x48 scope:global +SubscribeDestructorFast__Q24Csis5ClassPQ24Csis21ClassDestructorClient = .text:0x80373E80; // type:function size:0x3C scope:global +UnsubscribeDestructor__Q24Csis5ClassPQ24Csis21ClassDestructorClient = .text:0x80373EBC; // type:function size:0x48 scope:global +UnsubscribeDestructorFast__Q24Csis5ClassPQ24Csis21ClassDestructorClient = .text:0x80373F04; // type:function size:0xCC scope:global +SubscribeMemberData__Q24Csis5ClassPQ24Csis14FunctionClient = .text:0x80373FD0; // type:function size:0x48 scope:global +SubscribeMemberDataFast__Q24Csis5ClassPQ24Csis14FunctionClient = .text:0x80374018; // type:function size:0x3C scope:global +UnsubscribeMemberData__Q24Csis5ClassPQ24Csis14FunctionClient = .text:0x80374054; // type:function size:0x48 scope:global +UnsubscribeMemberDataFast__Q24Csis5ClassPQ24Csis14FunctionClient = .text:0x8037409C; // type:function size:0xCC scope:global +SetFast__Q24Csis14GlobalVariablePQ24Csis20GlobalVariableHandlePv = .text:0x80374168; // type:function size:0x88 scope:global +SubscribeFast__Q24Csis14GlobalVariablePQ24Csis20GlobalVariableHandlePQ24Csis14FunctionClient = .text:0x803741F0; // type:function size:0x78 scope:global +UnsubscribeFast__Q24Csis14GlobalVariablePQ24Csis20GlobalVariableHandlePQ24Csis14FunctionClient = .text:0x80374268; // type:function size:0x7C scope:global +__static_initialization_and_destruction_0 = .text:0x803742E4; // type:function size:0x28 scope:local +_._Q24Csis24IAllocatorToICoreAdaptor = .text:0x8037430C; // type:function size:0x10 scope:global +Release__Q24Csis24IAllocatorToICoreAdaptor = .text:0x8037431C; // type:function size:0x70 scope:global +Alloc__Q24Csis24IAllocatorToICoreAdaptorUiRCQ22EA12TagValuePair = .text:0x8037438C; // type:function size:0x48 scope:global +Free__Q24Csis24IAllocatorToICoreAdaptorPvUi = .text:0x803743D4; // type:function size:0x40 scope:global +AddRef__Q24Csis24IAllocatorToICoreAdaptor = .text:0x80374414; // type:function size:0x8 scope:global +Alloc__Q24Csis24ICoreToIAllocatorAdaptorUiPCcUi = .text:0x8037441C; // type:function size:0x54 scope:global +Alloc__Q24Csis24ICoreToIAllocatorAdaptorUiPCcUiUiUi = .text:0x80374470; // type:function size:0x54 scope:global +Free__Q24Csis24ICoreToIAllocatorAdaptorPvUi = .text:0x803744C4; // type:function size:0x40 scope:global +_GLOBAL_.I._4Csis.gIsAllocSet = .text:0x80374504; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x80374530; // type:label scope:local +PATH_control__FiUi = .text:0x80374530; // type:function size:0xC4 scope:global +PATH_pause__FiUc = .text:0x803745F4; // type:function size:0xEC scope:global +PATH_trackstatus__FUi = .text:0x803746E0; // type:function size:0x24 scope:global +PATH_status__FiP10PATHSTATUS = .text:0x80374704; // type:function size:0x78 scope:global +PATHI_status__FP9PATHTRACKP10PATHSTATUS = .text:0x8037477C; // type:function size:0x48 scope:global +PATH_stop__Fi = .text:0x803747C4; // type:function size:0xB4 scope:global +PATHI_stop__FP9PATHTRACK = .text:0x80374878; // type:function size:0x5C scope:global +gcc2_compiled. = .text:0x803748D4; // type:label scope:local +PATHI_addevent__FUiP9PATHEVENT = .text:0x803748D4; // type:function size:0x164 scope:global +PATH_event__FiUi = .text:0x80374A38; // type:function size:0x134 scope:global +PATH_clearallevents__Fi = .text:0x80374B6C; // type:function size:0xAC scope:global +PATHI_copyevent__FP9PATHEVENT = .text:0x80374C18; // type:function size:0xAC scope:global +PATHI_releaseevent__Fi15PATHEVENTRESULT = .text:0x80374CC4; // type:function size:0x134 scope:global +PATHI_removeevent__FP9PATHEVENT = .text:0x80374DF8; // type:function size:0xBC scope:global +PATHI_moveevent__FP9PATHEVENTT0 = .text:0x80374EB4; // type:function size:0x5C scope:global +PATHI_seteventfilter__FP9PATHEVENTi = .text:0x80374F10; // type:function size:0x70 scope:global +PATHI_clearalleventfilters__Fv = .text:0x80374F80; // type:function size:0x5C scope:global +PATHI_serviceevent__Fi = .text:0x80374FDC; // type:function size:0xB8 scope:global +PATHI_serviceeventqueue__Fv = .text:0x80375094; // type:function size:0x100 scope:global +PATHI_eventtakespriority__Fi = .text:0x80375194; // type:function size:0x118 scope:global +gcc2_compiled. = .text:0x803752AC; // type:label scope:local +PATHI_lock__Fv = .text:0x803752AC; // type:function size:0x4C scope:global +PATHI_unlock__Fv = .text:0x803752F8; // type:function size:0x30 scope:global +PATHI_init__Fv = .text:0x80375328; // type:function size:0xBC scope:global +PATH_shutdown__Fv = .text:0x803753E4; // type:function size:0xFC scope:global +PATHI_memalloc__Fi = .text:0x803754E0; // type:function size:0x3C scope:global +PATHI_memfree__FPv = .text:0x8037551C; // type:function size:0x30 scope:global +PATH_addmapfile__FPc = .text:0x8037554C; // type:function size:0x244 scope:global +PATH_callbacks__FPFii_vPFPv15PATHEVENTRESULT_vPFiii_v = .text:0x80375790; // type:function size:0x10 scope:global +PATH_destroy__Fi = .text:0x803757A0; // type:function size:0x12C scope:global +PATH_setnamedvalue__FiPci = .text:0x803758CC; // type:function size:0x154 scope:global +PATH_gettrackimp__Fi = .text:0x80375A20; // type:function size:0x34 scope:global +PATHI_bytesperms__Fi = .text:0x80375A54; // type:function size:0x174 scope:global +gcc2_compiled. = .text:0x80375BC8; // type:label scope:local +__10PathToReal = .text:0x80375BC8; // type:function size:0x24 scope:global +_._10PathToReal = .text:0x80375BEC; // type:function size:0x34 scope:global +Alloc__16PathToIAllocatori = .text:0x80375C20; // type:function size:0x54 scope:global +Free__16PathToIAllocatorPv = .text:0x80375C74; // type:function size:0x48 scope:global +PATH_setallocator__FPQ32EA9Allocator10IAllocatorRCQ22EA12TagValuePair = .text:0x80375CBC; // type:function size:0x40 scope:global +__static_initialization_and_destruction_0 = .text:0x80375CFC; // type:function size:0x34 scope:local +_._Q24Path11IPathToReal = .text:0x80375D30; // type:function size:0x34 scope:global +SetAbortMessageFunc__Q24Path11IPathToRealPFPCce_v = .text:0x80375D64; // type:function size:0x8 scope:global +SetDebugPrintFunc__Q24Path11IPathToRealPFPCce_i = .text:0x80375D6C; // type:function size:0x8 scope:global +SetLogPrintFunc__Q24Path11IPathToRealPFPCce_i = .text:0x80375D74; // type:function size:0x8 scope:global +SetSynchMode__Q24Path11IPathToRealQ24Path9SynchMode = .text:0x80375D7C; // type:function size:0x8 scope:global +GetSynchMode__Q24Path11IPathToReal = .text:0x80375D84; // type:function size:0x8 scope:global +_GLOBAL_.I._16PathToIAllocator.memimp = .text:0x80375D8C; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x80375DB8; // type:label scope:local +PATH_vectortoreal6__Fv = .text:0x80375DB8; // type:function size:0x54 scope:global +__nw__11PathToReal6Ui = .text:0x80375E0C; // type:function size:0x20 scope:global +__dl__11PathToReal6Pv = .text:0x80375E2C; // type:function size:0x20 scope:global +__11PathToReal6 = .text:0x80375E4C; // type:function size:0x74 scope:global +_._11PathToReal6 = .text:0x80375EC0; // type:function size:0x70 scope:global +TaskService__11PathToReal6Pvi = .text:0x80375F30; // type:function size:0x20 scope:global +GetMinStreamBufferSize__11PathToReal6i = .text:0x80375F50; // type:function size:0x30 scope:global +GetMilliseconds__11PathToReal6 = .text:0x80375F80; // type:function size:0xAC scope:global +FileExists__11PathToReal6PCc = .text:0x8037602C; // type:function size:0x24 scope:global +FileSize__11PathToReal6PCc = .text:0x80376050; // type:function size:0x24 scope:global +LoadFile__11PathToReal6PCcRii = .text:0x80376074; // type:function size:0xA0 scope:global +LoadFileSync__11PathToReal6PCci = .text:0x80376114; // type:function size:0x30 scope:global +LoadFileDone__11PathToReal6iRPc = .text:0x80376144; // type:function size:0x8 scope:global +gcc2_compiled. = .text:0x8037614C; // type:label scope:local +PATH_milliseconds__Fv = .text:0x8037614C; // type:function size:0x44 scope:global +PATHI_switchproject__Fii = .text:0x80376190; // type:function size:0x60 scope:global +PATHI_switchvoice__FUi = .text:0x803761F0; // type:function size:0x8C scope:global +PATHI_sortprojects__Fv = .text:0x8037627C; // type:function size:0x1BC scope:global +PATHI_serviceproject__Fv = .text:0x80376438; // type:function size:0x2B8 scope:global +PATHI_service__Fc = .text:0x803766F0; // type:function size:0x90 scope:global +PATHI_servicetask__Fv = .text:0x80376780; // type:function size:0x24 scope:global +PATHI_servicetimer__Fv = .text:0x803767A4; // type:function size:0x4C scope:global +gcc2_compiled. = .text:0x803767F0; // type:label scope:local +PATH_vectortosnd__Fv = .text:0x803767F0; // type:function size:0x54 scope:global +CreateStreamTrack__Q24Path9PathToSndPPQ24Path10IPathTrackifi = .text:0x80376844; // type:function size:0x194 scope:global +CreateBankTrack__Q24Path9PathToSndPPQ24Path10IPathTracki = .text:0x803769D8; // type:function size:0x44 scope:global +__nw__Q24Path9PathToSndUi = .text:0x80376A1C; // type:function size:0x20 scope:global +__dl__Q24Path9PathToSndPv = .text:0x80376A3C; // type:function size:0x20 scope:global +__Q24Path9PathToSnd = .text:0x80376A5C; // type:function size:0x44 scope:global +_._Q24Path9PathToSnd = .text:0x80376AA0; // type:function size:0x60 scope:global +GetDefaultPlayOpts__Q24Path9PathToSndPv = .text:0x80376B00; // type:function size:0x24 scope:global +__Q24Path12PathTrackSnd = .text:0x80376B24; // type:function size:0x8C scope:global +_._Q24Path12PathTrackSnd = .text:0x80376BB0; // type:function size:0x4C scope:global +GetPitchMult__Q24Path12PathTrackSnd = .text:0x80376BFC; // type:function size:0xC scope:global +GetStretchMult__Q24Path12PathTrackSnd = .text:0x80376C08; // type:function size:0xC scope:global +GetPathStatus__Q24Path12PathTrackSndP10PATHSTATUS = .text:0x80376C14; // type:function size:0x1C8 scope:global +ReadyForNewRequest__Q24Path12PathTrackSnd = .text:0x80376DDC; // type:function size:0x50 scope:global +TimeBuffered__Q24Path12PathTrackSnd = .text:0x80376E2C; // type:function size:0x8 scope:global +GetVolume__Q24Path12PathTrackSnd = .text:0x80376E34; // type:function size:0x8 scope:global +SetVolume__Q24Path12PathTrackSndi = .text:0x80376E3C; // type:function size:0x74 scope:global +SetDryLevel__Q24Path12PathTrackSndi = .text:0x80376EB0; // type:function size:0x8 scope:global +SetFXSendLevel__Q24Path12PathTrackSndii = .text:0x80376EB8; // type:function size:0x8 scope:global +SetPitchMult__Q24Path12PathTrackSndi = .text:0x80376EC0; // type:function size:0x74 scope:global +SetStretchMult__Q24Path12PathTrackSndi = .text:0x80376F34; // type:function size:0x78 scope:global +SetName__Q24Path12PathTrackSndPCc = .text:0x80376FAC; // type:function size:0x28 scope:global +Pause__Q24Path12PathTrackSndi = .text:0x80376FD4; // type:function size:0x84 scope:global +__nw__Q24Path16PathTrackSndBankUi = .text:0x80377058; // type:function size:0x20 scope:global +__dl__Q24Path16PathTrackSndBankPv = .text:0x80377078; // type:function size:0x20 scope:global +__Q24Path16PathTrackSndBanki = .text:0x80377098; // type:function size:0xA8 scope:global +_._Q24Path16PathTrackSndBank = .text:0x80377140; // type:function size:0x8C scope:global +AttachSubBank__Q24Path16PathTrackSndBankii = .text:0x803771CC; // type:function size:0xA0 scope:global +DetachSubBank__Q24Path16PathTrackSndBanki = .text:0x8037726C; // type:function size:0x78 scope:global +CheckStatus__Q24Path16PathTrackSndBank = .text:0x803772E4; // type:function size:0x20C scope:global +SetVolume__Q24Path16PathTrackSndBanki = .text:0x803774F0; // type:function size:0x64 scope:global +SetDryLevel__Q24Path16PathTrackSndBanki = .text:0x80377554; // type:function size:0x64 scope:global +SetFXSendLevel__Q24Path16PathTrackSndBankii = .text:0x803775B8; // type:function size:0x68 scope:global +SetPitchMult__Q24Path16PathTrackSndBanki = .text:0x80377620; // type:function size:0x64 scope:global +SetStretchMult__Q24Path16PathTrackSndBanki = .text:0x80377684; // type:function size:0x60 scope:global +TimeRemaining__Q24Path16PathTrackSndBanki = .text:0x803776E4; // type:function size:0x18 scope:global +Play__Q24Path16PathTrackSndBankiUiiiUi = .text:0x803776FC; // type:function size:0x114 scope:global +Stop__Q24Path16PathTrackSndBank = .text:0x80377810; // type:function size:0x6C scope:global +AddSubBank__Q24Path16PathTrackSndBankiPv = .text:0x8037787C; // type:function size:0x60 scope:global +AddSubBankDone__Q24Path16PathTrackSndBanki = .text:0x803778DC; // type:function size:0x54 scope:global +GetSubBankPtr__Q24Path16PathTrackSndBanki = .text:0x80377930; // type:function size:0x78 scope:global +GetAvailSubBankPtr__Q24Path16PathTrackSndBank = .text:0x803779A8; // type:function size:0x74 scope:global +RemoveSubBank__Q24Path16PathTrackSndBanki = .text:0x80377A1C; // type:function size:0x90 scope:global +DetachSubBankHeader__Q24Path16PathTrackSndBankii = .text:0x80377AAC; // type:function size:0x90 scope:global +__nw__Q24Path18PathTrackSndStreamUi = .text:0x80377B3C; // type:function size:0x20 scope:global +__dl__Q24Path18PathTrackSndStreamPv = .text:0x80377B5C; // type:function size:0x20 scope:global +__Q24Path18PathTrackSndStreami = .text:0x80377B7C; // type:function size:0xCC scope:global +_._Q24Path18PathTrackSndStream = .text:0x80377C48; // type:function size:0x7C scope:global +AttachStreamInstance__Q24Path18PathTrackSndStreamiPc = .text:0x80377CC4; // type:function size:0x30 scope:global +DetachStreamInstance__Q24Path18PathTrackSndStreamRPc = .text:0x80377CF4; // type:function size:0x34 scope:global +GetPathStatus__Q24Path18PathTrackSndStreamP10PATHSTATUS = .text:0x80377D28; // type:function size:0x47C scope:global +CheckStatus__Q24Path18PathTrackSndStream = .text:0x803781A4; // type:function size:0x2A0 scope:global +SetVolume__Q24Path18PathTrackSndStreami = .text:0x80378444; // type:function size:0x94 scope:global +SetDryLevel__Q24Path18PathTrackSndStreami = .text:0x803784D8; // type:function size:0x5C scope:global +SetFXSendLevel__Q24Path18PathTrackSndStreamii = .text:0x80378534; // type:function size:0x64 scope:global +ModifyHold__Q24Path18PathTrackSndStreami = .text:0x80378598; // type:function size:0x28 scope:global +SetPitchMult__Q24Path18PathTrackSndStreami = .text:0x803785C0; // type:function size:0x64 scope:global +SetStretchMult__Q24Path18PathTrackSndStreami = .text:0x80378624; // type:function size:0x60 scope:global +StreamCache__Q24Path18PathTrackSndStreamPci = .text:0x80378684; // type:function size:0xC scope:global +TimeRemaining__Q24Path18PathTrackSndStreami = .text:0x80378690; // type:function size:0x44 scope:global +Play__Q24Path18PathTrackSndStreamiUiiiUi = .text:0x803786D4; // type:function size:0x118 scope:global +Stop__Q24Path18PathTrackSndStream = .text:0x803787EC; // type:function size:0x60 scope:global +SetFilePath__Q24Path18PathTrackSndStreamPc = .text:0x8037884C; // type:function size:0x5C scope:global +_._Q24Path10IPathToSnd = .text:0x803788A8; // type:function size:0x34 scope:global +UpdateStatus__Q24Path12PathTrackSnd = .text:0x803788DC; // type:function size:0xC scope:global +StreamCache__Q24Path12PathTrackSndPci = .text:0x803788E8; // type:function size:0x4 scope:global +ModifyHold__Q24Path12PathTrackSndi = .text:0x803788EC; // type:function size:0x8 scope:global +gcc2_compiled. = .text:0x803788F4; // type:label scope:local +PATH_createstreamtrack__FiPci = .text:0x803788F4; // type:function size:0x7C scope:global +PATH_createstreamimp__Fiif = .text:0x80378970; // type:function size:0x1A8 scope:global +PATHI_createtrack__FiPc = .text:0x80378B18; // type:function size:0x74 scope:global +PATHI_inittrack__FiPc = .text:0x80378B8C; // type:function size:0x2A8 scope:global +PATHI_gettrackptr__FUi = .text:0x80378E34; // type:function size:0xA8 scope:global +PATHI_getmastertrack__Fv = .text:0x80378EDC; // type:function size:0xBC scope:global +PATH_numtracks__FUi = .text:0x80378F98; // type:function size:0x74 scope:global +PATHI_mainvoice__FP9PATHTRACKi = .text:0x8037900C; // type:function size:0x98 scope:global +PATHI_statusall__Fi = .text:0x803790A4; // type:function size:0xE4 scope:global +__Q24Path10IPathTrack = .text:0x80379188; // type:function size:0x58 scope:global +_._Q24Path10IPathTrack = .text:0x803791E0; // type:function size:0x34 scope:global +GetNumSubBanks__Q24Path10IPathTrack = .text:0x80379214; // type:function size:0x1C scope:global +GetMaxSubBanks__Q24Path10IPathTrack = .text:0x80379230; // type:function size:0x8 scope:global +GetSubBankPtr__Q24Path10IPathTracki = .text:0x80379238; // type:function size:0x8 scope:global +GetAvailSubBankPtr__Q24Path10IPathTrack = .text:0x80379240; // type:function size:0x8 scope:global +AddSubBank__Q24Path10IPathTrackiPv = .text:0x80379248; // type:function size:0x8 scope:global +AddSubBankDone__Q24Path10IPathTracki = .text:0x80379250; // type:function size:0x8 scope:global +DetachSubBankHeader__Q24Path10IPathTrackii = .text:0x80379258; // type:function size:0x8 scope:global +RemoveSubBank__Q24Path10IPathTracki = .text:0x80379260; // type:function size:0x8 scope:global +SetTrackInfo__Q24Path10IPathTrackP13PATHTRACKINFO = .text:0x80379268; // type:function size:0x8 scope:global +GetVolume__Q24Path10IPathTrack = .text:0x80379270; // type:function size:0x8 scope:global +GetDryLevel__Q24Path10IPathTrack = .text:0x80379278; // type:function size:0x8 scope:global +GetFXSendLevel__Q24Path10IPathTracki = .text:0x80379280; // type:function size:0x8 scope:global +GetHandle__Q24Path10IPathTrack = .text:0x80379288; // type:function size:0x8 scope:global +GetPlayOpts__Q24Path10IPathTrack = .text:0x80379290; // type:function size:0x8 scope:global +SetFilePath__Q24Path10IPathTrackPc = .text:0x80379298; // type:function size:0x4 scope:global +gcc2_compiled. = .text:0x8037929C; // type:label scope:local +PATH_volume__FiSc = .text:0x8037929C; // type:function size:0x128 scope:global +PATHI_volume__FP9PATHTRACKSc = .text:0x803793C4; // type:function size:0x84 scope:global +PATHI_fade__FP9PATHTRACKiii = .text:0x80379448; // type:function size:0xCC scope:global +PATHI_customsfxfade__FP9PATHTRACKiii = .text:0x80379514; // type:function size:0x68 scope:global +PATHI_customdrylevelfade__FP9PATHTRACKiii = .text:0x8037957C; // type:function size:0x64 scope:global +PATHI_custompitchfade__FP9PATHTRACKiii = .text:0x803795E0; // type:function size:0x88 scope:global +PATHI_customstretchfade__FP9PATHTRACKiii = .text:0x80379668; // type:function size:0x8C scope:global +PATHI_setfadevolume__FP9PATHTRACK = .text:0x803796F4; // type:function size:0x2A4 scope:global +PATHI_setsfxfadevolume__FP9PATHTRACK = .text:0x80379998; // type:function size:0x254 scope:global +PATHI_setdrylevelfadevolume__FP9PATHTRACK = .text:0x80379BEC; // type:function size:0x244 scope:global +PATHI_setpitchfadevolume__FP9PATHTRACK = .text:0x80379E30; // type:function size:0x244 scope:global +PATHI_setstretchfadevolume__FP9PATHTRACK = .text:0x8037A074; // type:function size:0x244 scope:global +gcc2_compiled. = .text:0x8037A2B8; // type:label scope:local +PATHI_serviceaction__FP9PATHEVENTP10PATHACTION = .text:0x8037A2B8; // type:function size:0xCB4 scope:global +PATHI_conditiondone__FP10PATHACTIONiT0 = .text:0x8037AF6C; // type:function size:0x88 scope:global +PATHI_restoretolastwhile__FP10PATHACTIONP9PATHEVENT = .text:0x8037AFF4; // type:function size:0x9C scope:global +PATHI_trackstatus__FP9PATHTRACK = .text:0x8037B090; // type:function size:0x11C scope:global +PATHI_getvalue__FiiP9PATHTRACKP9PATHEVENT = .text:0x8037B1AC; // type:function size:0x3D4 scope:global +PATHI_setvalue__FiiiP9PATHTRACKP9PATHEVENT = .text:0x8037B580; // type:function size:0x2C0 scope:global +PATHI_loadbank__FP9PATHTRACKi = .text:0x8037B840; // type:function size:0x334 scope:global +PATHI_subbankready__FP9PATHTRACKi = .text:0x8037BB74; // type:function size:0x184 scope:global +PATHI_loadbankdata__FP9PATHTRACKii = .text:0x8037BCF8; // type:function size:0x18C scope:global +PATHI_unloadbank__FP9PATHTRACKi = .text:0x8037BE84; // type:function size:0x168 scope:global +PATHI_unloadmostneglectedsubbank__FP9PATHTRACK = .text:0x8037BFEC; // type:function size:0xC0 scope:global +PATHI_printf__FPce = .text:0x8037C0AC; // type:function size:0x4C scope:global +gcc2_compiled. = .text:0x8037C0F8; // type:label scope:local +PATHI_sampleoffset__Fi = .text:0x8037C0F8; // type:function size:0x78 scope:global +PATHI_beatinfo__FP9PATHTRACKP12PATHBEATINFO = .text:0x8037C170; // type:function size:0xDC scope:global +PATHI_calcwaitbeat__FiiiP12PATHBEATINFO = .text:0x8037C24C; // type:function size:0x150 scope:global +PATHI_choosesynchtime__FiRC12PATHFINDNODERC12PATHBEATINFORUi = .text:0x8037C39C; // type:function size:0x2A8 scope:global +PATHI_timeremaining__FP9PATHTRACK = .text:0x8037C644; // type:function size:0x6C scope:global +PATHI_pickclosestbranch__FiiP14PATHFINDBRANCH = .text:0x8037C6B0; // type:function size:0x7C scope:global +PATHI_nextnode__Fiii = .text:0x8037C72C; // type:function size:0x134 scope:global +PATHI_enternode__Fiiii = .text:0x8037C860; // type:function size:0x2AC scope:global +PATHI_routenode__Fii = .text:0x8037CB0C; // type:function size:0xA4 scope:global +PATHI_seeknextnode__Fi = .text:0x8037CBB0; // type:function size:0x234 scope:global +PATHI_queuenode__FP9PATHTRACK = .text:0x8037CDE4; // type:function size:0x380 scope:global +gcc2_compiled. = .text:0x8037D164; // type:label scope:local +PATHI_random__Fv = .text:0x8037D164; // type:function size:0x108 scope:global +gcc2_compiled. = .text:0x8037D26C; // type:label scope:local +iSPCH_InitBanks__Fv = .text:0x8037D26C; // type:function size:0x28 scope:global +SPCH_GetBankPtrMemSize__Fi = .text:0x8037D294; // type:function size:0x8 scope:global +SPCH_InitBankMem__FiPc = .text:0x8037D29C; // type:function size:0x48 scope:global +iSPCH_FindInsertPosition__FP10VOXBANKHDR = .text:0x8037D2E4; // type:function size:0x18C scope:local +iSPCH_FindBank__FUsRi = .text:0x8037D470; // type:function size:0x98 scope:global +iSPCH_FindSubBank__FUsUsRi = .text:0x8037D508; // type:function size:0xCC scope:global +iSPCH_TestSubBankBounds__FiUi = .text:0x8037D5D4; // type:function size:0x50 scope:global +iSPCH_FindBankIndexFromHandle__Fi = .text:0x8037D624; // type:function size:0x4C scope:global +iSPCHBank_AddToQueue__FP10VOXBANKHDRi = .text:0x8037D670; // type:function size:0x88 scope:global +iSPCHBank_GetSampleTimeInQueue__FP10VOXBANKHDRi = .text:0x8037D6F8; // type:function size:0x9C scope:global +iSPCH_GetStartSample__FUiii = .text:0x8037D794; // type:function size:0x2C scope:global +iSPCH_SetCycleBits__FP10VOXBANKHDR = .text:0x8037D7C0; // type:function size:0xE0 scope:global +SPCH_AddBank__FPc = .text:0x8037D8A0; // type:function size:0xE8 scope:global +gcc2_compiled. = .text:0x8037D988; // type:label scope:local +gcc2_compiled. = .text:0x8037D988; // type:label scope:local +SPCH_MakeEventSpec__Fiii = .text:0x8037D988; // type:function size:0x1C scope:global +iSPCH_SearchEventDat__FP7VoxDatai = .text:0x8037D9A4; // type:function size:0x48 scope:local +iSPCH_FindEventDatInfo__FP9EventSpecPP12EventDatInfo = .text:0x8037D9EC; // type:function size:0x64 scope:global +iSPCH_FindEvent__FP9EventSpec = .text:0x8037DA50; // type:function size:0x54 scope:global +iSPCH_FindEventChannel__FP9EventSpecPUi = .text:0x8037DAA4; // type:function size:0x50 scope:global +iSPCH_GetDatID__FP9EventSpecPUi = .text:0x8037DAF4; // type:function size:0x54 scope:global +iSPCH_GetGlobalMatchParmsArray__FP9EventSpecPPUc = .text:0x8037DB48; // type:function size:0x68 scope:global +iSPCH_InitEventDat__Fv = .text:0x8037DBB0; // type:function size:0x30 scope:global +iSPCH_GetFilterLength__FP9EventSpec = .text:0x8037DBE0; // type:function size:0x48 scope:global +iSPCH_InitEventQueue__Fv = .text:0x8037DC28; // type:function size:0xCC scope:global +iSPCH_FindEventSlot__FUiUi = .text:0x8037DCF4; // type:function size:0x128 scope:local +iSPCH_CheckLastEventIndex__FUi = .text:0x8037DE1C; // type:function size:0x24 scope:local +iSPCH_AddEvent__FPUi = .text:0x8037DE40; // type:function size:0x180 scope:global +SPCH_AddEventV__Fiie = .text:0x8037DFC0; // type:function size:0x14C scope:global +iSPCH_InitFollowData__FP19SPCHType_FollowData = .text:0x8037E10C; // type:function size:0x10 scope:local +iSPCH_EventInFollowGroup__FUsP19SPCHType_FollowData = .text:0x8037E11C; // type:function size:0x50 scope:local +iSPCH_ChooseEventSearch__FP19SPCHType_FollowDataUi = .text:0x8037E16C; // type:function size:0x1C0 scope:local +iSPCH_ChooseEvent__FUi = .text:0x8037E32C; // type:function size:0x160 scope:local +iSPCH_ClearEvent__Fi = .text:0x8037E48C; // type:function size:0xA0 scope:global +iSPCH_ClearOldEvents__Fi = .text:0x8037E52C; // type:function size:0xC4 scope:local +iSPCH_Callback_EventRule__FP9EventSpec = .text:0x8037E5F0; // type:function size:0x40 scope:local +SPCH_PlayLastEvent__FUi = .text:0x8037E630; // type:function size:0xA0 scope:global +SPCH_Play__FUi = .text:0x8037E6D0; // type:function size:0x7C scope:global +SPCH_Choose__FUi = .text:0x8037E74C; // type:function size:0xC8 scope:global +gcc2_compiled. = .text:0x8037E814; // type:label scope:local +SPCH_SetMemCallbacks__FPFUi_PvPFPv_v = .text:0x8037E814; // type:function size:0x14 scope:global +iSPCH_MemAlloc__FUi = .text:0x8037E828; // type:function size:0x40 scope:global +iSPCH_MemFree__FPv = .text:0x8037E868; // type:function size:0x34 scope:global +iSPCH_InitInGame__Fv = .text:0x8037E89C; // type:function size:0x34 scope:global +SPCH_GetSampleDataRate__Fii15CompressionType = .text:0x8037E8D0; // type:function size:0x6C scope:global +SPCH_InitRuleCallbacks__FPFP9EventSpeciii_iPFP9EventSpeciii_v = .text:0x8037E93C; // type:function size:0x2C scope:global +iSPCH_InitCallbacks__Fv = .text:0x8037E968; // type:function size:0x24 scope:local +SPCH_InitReparmCallback__FPFiPUi_i = .text:0x8037E98C; // type:function size:0x24 scope:global +SPCH_InitEventRuleCallback__FPFP9EventSpec_24SPCHType_EventRuleResult = .text:0x8037E9B0; // type:function size:0x24 scope:global +SPCH_Init__FPFP26SPCHType_SampleRequestData_iUii = .text:0x8037E9D4; // type:function size:0xEC scope:global +gcc2_compiled. = .text:0x8037EAC0; // type:label scope:local +SPCH_GetEventDatInfo__FPcPiT1 = .text:0x8037EAC0; // type:function size:0x14 scope:global +iSPCH_PostMatchParmValue__FP11VoxSentenceP9VoxPhrasePUc = .text:0x8037EAD4; // type:function size:0x88 scope:local +iSPCH_HasMatchParmToPost__FP9VoxPhrase = .text:0x8037EB5C; // type:function size:0x54 scope:local +iSPCH_MatchSample__FP11VoxSentenceP9VoxPhrasePUiPUc = .text:0x8037EBB0; // type:function size:0x130 scope:local +iSPCH_GetPhraseBank__FP9VoxPhrasePUiP14PhrasePickInfo = .text:0x8037ECE0; // type:function size:0xF8 scope:local +iSPCH_ClearCycleBit__FP10VOXBANKHDRi = .text:0x8037EDD8; // type:function size:0x60 scope:local +iSPCH_TestBit__FPUci = .text:0x8037EE38; // type:function size:0x38 scope:local +iSPCH_CheckTemplateSample__FP14PhrasePickInfoP10VOXBANKHDRi = .text:0x8037EE70; // type:function size:0x98 scope:local +iSPCH_SampleExists__FP14PhrasePickInfoP10VOXBANKHDRi = .text:0x8037EF08; // type:function size:0xA8 scope:local +iSPCH_AddSampleToValidPicks__FP16SentencePickInfoi = .text:0x8037EFB0; // type:function size:0x30 scope:local +iSPCH_BankHasValidSamples__FP9VoxPhraseP10VOXBANKHDRPUi = .text:0x8037EFE0; // type:function size:0x8C scope:local +iSPCH_ChooseSamples__FP16SentencePickInfoP11VoxSentenceP14PhrasePickInfoP9VoxPhrasePUi = .text:0x8037F06C; // type:function size:0x19C scope:local +iSPCH_ConvertTime__Fi = .text:0x8037F208; // type:function size:0x24 scope:local +iSPCH_SentenceLength__FP11VoxSentenceP16SentencePickInfo = .text:0x8037F22C; // type:function size:0x98 scope:local +iSPCH_DecodeWeight__FUc = .text:0x8037F2C4; // type:function size:0x1C scope:global +iSPCH_OrderSentences__FP8VoxEventPc = .text:0x8037F2E0; // type:function size:0x134 scope:local +iSPCH_RepeatEvent__FP8VoxEventUi = .text:0x8037F414; // type:function size:0x48 scope:local +iSPCH_ShortRuleStatus__FP11VoxSentencei = .text:0x8037F45C; // type:function size:0x44 scope:local +iSPCH_InitMatchParmIO__FP11VoxSentence = .text:0x8037F4A0; // type:function size:0x54 scope:local +iSPCH_MatchParmInputsSet__FP11VoxSentenceP9VoxPhrase = .text:0x8037F4F4; // type:function size:0x9C scope:local +iSPCH_TestMatchParms__FP16SentencePickInfoP11VoxSentence = .text:0x8037F590; // type:function size:0x1B8 scope:local +iSPCH_SentenceGetChoices__FP16SentencePickInfoP11VoxSentencePUii = .text:0x8037F748; // type:function size:0x130 scope:local +iSPCH_RandomizeSentencePicks__FP11VoxSentenceP16SentencePickInfo = .text:0x8037F878; // type:function size:0x98 scope:local +iSPCH_IterateChoice__FP11VoxSentenceP16SentencePickInfo = .text:0x8037F910; // type:function size:0x80 scope:local +iSPCH_ChooseSentenceIteratively__FP11VoxSentenceP16SentencePickInfoi = .text:0x8037F990; // type:function size:0x104 scope:local +iSPCH_PickPhraseSample__FP14PhrasePickInfo = .text:0x8037FA94; // type:function size:0x44 scope:local +iSPCH_PostGlobalMatchParms__FP9EventSpecP16SentencePickInfoP11VoxSentence = .text:0x8037FAD8; // type:function size:0x104 scope:local +iSPCH_SentenceMakeChoice__FP9EventSpecP16SentencePickInfoP11VoxSentenceii = .text:0x8037FBDC; // type:function size:0xC8 scope:local +iSPCH_ConstantRuleSet__FP9EventSpecP8VoxEventP11VoxSentence = .text:0x8037FCA4; // type:function size:0x144 scope:local +iSPCH_MakeSampleRequests__FP8VoxEventP11VoxSentenceP9EventSpec = .text:0x8037FDE8; // type:function size:0x20C scope:local +iSPCH_InitSentencePickInfo__FP16SentencePickInfo = .text:0x8037FFF4; // type:function size:0x2C scope:local +iSPCH_ClearSentenceChoiceChannel__FUi = .text:0x80380020; // type:function size:0xB4 scope:global +iSPCH_InitSentenceChoice__Fv = .text:0x803800D4; // type:function size:0x88 scope:global +iSPCH_SaveChosenSentence__FP16SentencePickInfoUiP8VoxEventP11VoxSentenceiPUi = .text:0x8038015C; // type:function size:0x154 scope:local +iSPCH_OneChosen__FUi = .text:0x803802B0; // type:function size:0x18 scope:global +iSPCH_PlayChosen__FUi = .text:0x803802C8; // type:function size:0xF4 scope:global +iSPCH_TestValidParm__FUiUii = .text:0x803803BC; // type:function size:0x40 scope:local +iSPCH_SentenceIsContextMatch__FP8VoxEventP11VoxSentencePUi = .text:0x803803FC; // type:function size:0xF8 scope:local +iSPCH_CheckFrequency__FP11VoxSentence = .text:0x803804F4; // type:function size:0x44 scope:local +iSPCH_ChooseSentence__FPUi = .text:0x80380538; // type:function size:0x350 scope:global +iSPCH_ChooseSingleSentence__Fi = .text:0x80380888; // type:function size:0xC8 scope:global +SPCH_SetPreLoadTicks__Fi = .text:0x80380950; // type:function size:0xC scope:global +gcc2_compiled. = .text:0x8038095C; // type:label scope:local +iSPCH_EACrandom__Fv = .text:0x8038095C; // type:function size:0x108 scope:global +iSPCH_EACseedrandom__FUi = .text:0x80380A64; // type:function size:0x54 scope:local +iSPCH_FindRandInQueue__FUsiUs = .text:0x80380AB8; // type:function size:0xA8 scope:local +iSPCH_AddRandToQueue__FUsUs = .text:0x80380B60; // type:function size:0x40 scope:local +iSPCH_InitRandom__FUi = .text:0x80380BA0; // type:function size:0xB0 scope:global +iSPCH_Rand__Fii = .text:0x80380C50; // type:function size:0xE0 scope:global +gcc2_compiled. = .text:0x80380D30; // type:label scope:local +SPCH_ClearMatchParmSettings__FUl = .text:0x80380D30; // type:function size:0x9C scope:global +iSPCH_BindData__FPcUi = .text:0x80380DCC; // type:function size:0x100 scope:local +SPCH_AddEventDB__FPcUi = .text:0x80380ECC; // type:function size:0x48 scope:global +gcc2_compiled. = .text:0x80380F14; // type:label scope:local +iSPCH_SentenceUsesParm__FP11VoxSentencei = .text:0x80380F14; // type:function size:0xB8 scope:local +iSPCH_GetRuleID__FP8VoxEventi = .text:0x80380FCC; // type:function size:0x4C scope:global +iSPCH_RuleSet__FP9EventSpecP8VoxEventiPUi = .text:0x80381018; // type:function size:0x114 scope:global +iSPCH_GetRuleSettings__FP9EventSpecP8VoxEventPUiT2 = .text:0x8038112C; // type:function size:0x1BC scope:global +iSPCH_GetSentenceRuleSettings__FP8VoxEventiPUiT2 = .text:0x803812E8; // type:function size:0xA8 scope:local +iSPCH_CheckSentenceRules__FP8VoxEventiUiUi = .text:0x80381390; // type:function size:0x60 scope:global +gcc2_compiled. = .text:0x803813F0; // type:label scope:local +iSPCH_GetSampleParmAddr__FP10VOXBANKHDRi = .text:0x803813F0; // type:function size:0x30 scope:global +iSPCH_GetSampleSizeData__FP10VOXBANKHDRiPUiT2 = .text:0x80381420; // type:function size:0x88 scope:global +gcc2_compiled. = .text:0x803814A8; // type:label scope:local +SPCHEXT_gettick__Fv = .text:0x803814A8; // type:function size:0x38 scope:global +gcc2_compiled. = .text:0x803814E0; // type:label scope:local +SPCH_GetExtVecs__Fv = .text:0x803814E0; // type:function size:0xC scope:global +gcc2_compiled. = .text:0x803814EC; // type:label scope:local +iSPCH_CsisCb__FPQ24Csis9ParameterPv = .text:0x803814EC; // type:function size:0x8C scope:local +iSPCH_InitCsis__FPv = .text:0x80381578; // type:function size:0xDC scope:global +gcc2_compiled. = .text:0x80381654; // type:label scope:local +gcc2_compiled. = .text:0x80381654; // type:label scope:local +FILESYS_opstatus = .text:0x80381654; // type:function size:0x20 scope:global +FILESYS_completeop = .text:0x80381674; // type:function size:0x20 scope:global +FILESYS_open = .text:0x80381694; // type:function size:0x20 scope:global +FILESYS_close = .text:0x803816B4; // type:function size:0x20 scope:global +FILESYS_read = .text:0x803816D4; // type:function size:0x20 scope:global +STREAM_overhead = .text:0x803816F4; // type:function size:0x20 scope:global +STREAM_create = .text:0x80381714; // type:function size:0x20 scope:global +STREAM_destroy = .text:0x80381734; // type:function size:0x20 scope:global +STREAM_setgreedylevel = .text:0x80381754; // type:function size:0x20 scope:global +STREAM_queuefile = .text:0x80381774; // type:function size:0x20 scope:global +STREAM_queuemem = .text:0x80381794; // type:function size:0x20 scope:global +STREAM_kill = .text:0x803817B4; // type:function size:0x20 scope:global +STREAM_get = .text:0x803817D4; // type:function size:0x20 scope:global +STREAM_release = .text:0x803817F4; // type:function size:0x20 scope:global +STREAM_gettable = .text:0x80381814; // type:function size:0x20 scope:global +STREAM_state = .text:0x80381834; // type:function size:0x20 scope:global +STREAM_buffersize = .text:0x80381854; // type:function size:0x20 scope:global +gcc2_compiled. = .text:0x80381874; // type:label scope:local +_FILESYS_opstatus__Fi = .text:0x80381874; // type:function size:0x20 scope:global +_FILESYS_completeop__Fi = .text:0x80381894; // type:function size:0x20 scope:global +_FILESYS_open__FPCcUiiPv = .text:0x803818B4; // type:function size:0x20 scope:global +_FILESYS_close__FiiPv = .text:0x803818D4; // type:function size:0x20 scope:global +_FILESYS_read__FiiPviiT2 = .text:0x803818F4; // type:function size:0x20 scope:global +_STREAM_overhead__Fiii = .text:0x80381914; // type:function size:0x20 scope:global +_STREAM_create__FiiiPvi = .text:0x80381934; // type:function size:0x20 scope:global +_STREAM_destroy__Fi = .text:0x80381954; // type:function size:0x20 scope:global +_STREAM_setgreedylevel__Fii = .text:0x80381974; // type:function size:0x20 scope:global +_STREAM_queuefile__FiPCcii = .text:0x80381994; // type:function size:0x20 scope:global +_STREAM_queuemem__FiPvii = .text:0x803819B4; // type:function size:0x20 scope:global +_STREAM_kill__Fi = .text:0x803819D4; // type:function size:0x20 scope:global +_STREAM_get__Fi = .text:0x803819F4; // type:function size:0x20 scope:global +_STREAM_release__FiP14STREAMCHUNKHDR = .text:0x80381A14; // type:function size:0x20 scope:global +_STREAM_gettable__Fi = .text:0x80381A34; // type:function size:0x20 scope:global +_STREAM_state__Fi = .text:0x80381A54; // type:function size:0x20 scope:global +_STREAM_buffersize__Fi = .text:0x80381A74; // type:function size:0x20 scope:global +gcc2_compiled. = .text:0x80381A94; // type:label scope:local +__Q28RealFile12DeviceDriverPCc = .text:0x80381A94; // type:function size:0x3C scope:global +iDefaultFilesysCallbackFunc__FiiPv = .text:0x80381AD0; // type:function size:0x4 scope:local +GetDevice__13FILEOPERATIONi = .text:0x80381AD4; // type:function size:0x18 scope:global +Find__18FileOperationQueueib = .text:0x80381AEC; // type:function size:0xFC scope:global +iStartDevice__FP10FILEDEVICE = .text:0x80381BE8; // type:function size:0x174 scope:local +iGetNextOpId__13FILEOPERATIONP10FILEDEVICE = .text:0x80381D5C; // type:function size:0x88 scope:global +__13FILEOPERATIONiPvP10FILEDEVICE = .text:0x80381DE4; // type:function size:0xAC scope:global +__nw__13FILEOPERATIONUi = .text:0x80381E90; // type:function size:0x88 scope:global +SetName__13FILEOPERATIONPCc = .text:0x80381F18; // type:function size:0xE8 scope:global +Cancel__13FILEOPERATIONP10FILEDEVICE = .text:0x80382000; // type:function size:0x128 scope:global +iAllocateFileSysHandle__Fv = .text:0x80382128; // type:function size:0x90 scope:local +iFreeFileSysHandle__FP13FILESYSHANDLE = .text:0x803821B8; // type:function size:0x78 scope:local +iOpenFileSysHandle__FPCciP10FILEDEVICE = .text:0x80382230; // type:function size:0x1D8 scope:local +iCloseFileSysHandle__FP13FILESYSHANDLE = .text:0x80382408; // type:function size:0x54 scope:local +iGetOpFromHandle__FP10FILEDEVICEiPi = .text:0x8038245C; // type:function size:0xA4 scope:local +AddToQueue__13FILEOPERATION = .text:0x80382500; // type:function size:0xFC scope:global +iDeviceCommandProcessorThreadFunc__FPv = .text:0x803825FC; // type:function size:0x190 scope:local +FILE_init__FPvi = .text:0x8038278C; // type:function size:0x338 scope:global +FILE_overhead__Fv = .text:0x80382AC4; // type:function size:0x48 scope:global +FILE_restore__Fv = .text:0x80382B0C; // type:function size:0xC8 scope:global +FILESYS_opstatus__Fi = .text:0x80382BD4; // type:function size:0x90 scope:global +FILESYS_waitop__Fi = .text:0x80382C64; // type:function size:0xE4 scope:global +FILESYS_completeop64__Fi = .text:0x80382D48; // type:function size:0xD0 scope:global +FILESYS_completeop__Fi = .text:0x80382E18; // type:function size:0x24 scope:global +FILESYS_callbackop__FiPFiiPv_v = .text:0x80382E3C; // type:function size:0x80 scope:global +FILESYS_priorityop__Fii = .text:0x80382EBC; // type:function size:0x74 scope:global +FILESYS_exists__FPCciPv = .text:0x80382F30; // type:function size:0x7C scope:global +FILESYS_open__FPCcUiiPv = .text:0x80382FAC; // type:function size:0x90 scope:global +FILESYS_close__FiiPv = .text:0x8038303C; // type:function size:0x68 scope:global +FILESYS_read__FiiPviiT2 = .text:0x803830A4; // type:function size:0xA8 scope:global +FILESYS_readlarge__FiUxPvUxiT2 = .text:0x8038314C; // type:function size:0xA0 scope:global +FILESYS_write__FiiPviiT2 = .text:0x803831EC; // type:function size:0x98 scope:global +FILESYS_size__FiiPv = .text:0x80383284; // type:function size:0x68 scope:global +FILESYS_atomic__FPFiPv_iP10FILEDEVICEiPv = .text:0x803832EC; // type:function size:0x88 scope:global +GetInfoFastByName__8RealFilePCcUiRUxT3 = .text:0x80383374; // type:function size:0x94 scope:global +GetInfoFastByHandle__8RealFileiRUxT2 = .text:0x80383408; // type:function size:0x6C scope:global +FILE_nametodevice__FPCc = .text:0x80383474; // type:function size:0x13C scope:global +SetSearchPath__8RealFilePCc = .text:0x803835B0; // type:function size:0x110 scope:global +AddSearchLocation__8RealFilePCcb = .text:0x803836C0; // type:function size:0x130 scope:global +AddDevice__8RealFilePQ28RealFile12DeviceDriver = .text:0x803837F0; // type:function size:0xA4 scope:global +RemoveDevice__8RealFileUi = .text:0x80383894; // type:function size:0x1F8 scope:global +__static_initialization_and_destruction_0 = .text:0x80383A8C; // type:function size:0x74 scope:local +_._13FILEOPERATION = .text:0x80383B00; // type:function size:0x34 scope:global +_._11FILESYSINFO = .text:0x80383B34; // type:function size:0x174 scope:global +_._14ExistOperation = .text:0x80383CA8; // type:function size:0x34 scope:global +Exec__14ExistOperationP10FILEDEVICE = .text:0x80383CDC; // type:function size:0x64 scope:global +Complete__14ExistOperation = .text:0x80383D40; // type:function size:0x58 scope:global +_._13OpenOperation = .text:0x80383D98; // type:function size:0x34 scope:global +Exec__13OpenOperationP10FILEDEVICE = .text:0x80383DCC; // type:function size:0x50 scope:global +Complete__13OpenOperation = .text:0x80383E1C; // type:function size:0x90 scope:global +_._14CloseOperation = .text:0x80383EAC; // type:function size:0x34 scope:global +Exec__14CloseOperationP10FILEDEVICE = .text:0x80383EE0; // type:function size:0xC scope:global +Complete__14CloseOperation = .text:0x80383EEC; // type:function size:0x2C scope:global +Cancel__14CloseOperationP10FILEDEVICE = .text:0x80383F18; // type:function size:0x4 scope:global +_._13ReadOperation = .text:0x80383F1C; // type:function size:0x34 scope:global +Exec__13ReadOperationP10FILEDEVICE = .text:0x80383F50; // type:function size:0x180 scope:global +Complete__13ReadOperation = .text:0x803840D0; // type:function size:0xC scope:global +_._18ReadLargeOperation = .text:0x803840DC; // type:function size:0x34 scope:global +Exec__18ReadLargeOperationP10FILEDEVICE = .text:0x80384110; // type:function size:0x194 scope:global +Complete__18ReadLargeOperation = .text:0x803842A4; // type:function size:0xC scope:global +_._14WriteOperation = .text:0x803842B0; // type:function size:0x34 scope:global +Exec__14WriteOperationP10FILEDEVICE = .text:0x803842E4; // type:function size:0x104 scope:global +Complete__14WriteOperation = .text:0x803843E8; // type:function size:0xC scope:global +_._13SizeOperation = .text:0x803843F4; // type:function size:0x34 scope:global +Exec__13SizeOperationP10FILEDEVICE = .text:0x80384428; // type:function size:0x20 scope:global +Complete__13SizeOperation = .text:0x80384448; // type:function size:0xC scope:global +_._14NullFileDriver = .text:0x80384454; // type:function size:0x34 scope:global +Open__14NullFileDriverPCciPi = .text:0x80384488; // type:function size:0x8 scope:global +Close__14NullFileDriveri = .text:0x80384490; // type:function size:0x4 scope:global +Read__14NullFileDriveriPvUiPQ28RealFile12DeviceDriveri = .text:0x80384494; // type:function size:0x8 scope:global +Seek__14NullFileDriveriUxiPQ28RealFile12DeviceDriveri = .text:0x8038449C; // type:function size:0xC scope:global +Getsize__14NullFileDriveri = .text:0x803844A8; // type:function size:0xC scope:global +_GLOBAL_.I.__Q28RealFile12DeviceDriverPCc = .text:0x803844B4; // type:function size:0x2C scope:local +_GLOBAL_.D.__Q28RealFile12DeviceDriverPCc = .text:0x803844E0; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x8038450C; // type:label scope:local +FILE_getopts__FP11FILESYSOPTS = .text:0x8038450C; // type:function size:0x54 scope:global +FILE_setopts__FP11FILESYSOPTS = .text:0x80384560; // type:function size:0x68 scope:global +__static_initialization_and_destruction_0 = .text:0x803845C8; // type:function size:0x3C scope:local +_GLOBAL_.I.FILE_getopts__FP11FILESYSOPTS = .text:0x80384604; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x80384630; // type:label scope:local +queueadd__FP12REQUESTQUEUEP16REQUESTSTRUCTtag = .text:0x80384630; // type:function size:0x6C scope:local +queuefetch__FP12REQUESTQUEUE = .text:0x8038469C; // type:function size:0x5C scope:local +newrequestid__FP16REQUESTSTRUCTtag = .text:0x803846F8; // type:function size:0x30 scope:local +locaterequest__Fi = .text:0x80384728; // type:function size:0x48 scope:local +releaserequest__FP16REQUESTSTRUCTtag = .text:0x80384770; // type:function size:0x80 scope:local +finishrequest__FP16REQUESTSTRUCTtag = .text:0x803847F0; // type:function size:0x80 scope:local +loadfileclosecallback__FiiPv = .text:0x80384870; // type:function size:0x38 scope:local +loadfilereadcallback__FiiPv = .text:0x803848A8; // type:function size:0xFC scope:local +loadfilesizecallback__FiiPv = .text:0x803849A4; // type:function size:0x1A8 scope:local +loadfileopencallback__FiiPv = .text:0x80384B4C; // type:function size:0x120 scope:local +ASYNCFILE_init__Fii = .text:0x80384C6C; // type:function size:0x188 scope:global +ASYNCFILE_load__FPCci = .text:0x80384DF4; // type:function size:0xB0 scope:global +ASYNCFILE_release__FiPPvPi = .text:0x80384EA4; // type:function size:0x124 scope:global +__static_initialization_and_destruction_0 = .text:0x80384FC8; // type:function size:0x40 scope:local +_GLOBAL_.I.ASYNCFILE_init__Fii = .text:0x80385008; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x80385034; // type:label scope:local +FILE_exists__FPCc = .text:0x80385034; // type:function size:0x24 scope:global +filesizeatom__FiPv = .text:0x80385058; // type:function size:0x6C scope:local +FILE_size__FPCc = .text:0x803850C4; // type:function size:0x48 scope:global +gcc2_compiled. = .text:0x8038510C; // type:label scope:local +FILESYS_opensync__FPCcUii = .text:0x8038510C; // type:function size:0x3C scope:global +FILESYS_readsync__FiiPvii = .text:0x80385148; // type:function size:0x60 scope:global +FILESYS_writesync__FiiPvii = .text:0x803851A8; // type:function size:0x3C scope:global +FILESYS_closesync__Fii = .text:0x803851E4; // type:function size:0x4C scope:global +FILESYS_sizesync__Fii = .text:0x80385230; // type:function size:0x3C scope:global +FILESYS_existssync__FPCci = .text:0x8038526C; // type:function size:0x4C scope:global +gcc2_compiled. = .text:0x803852B8; // type:label scope:local +gcc2_compiled. = .text:0x803852B8; // type:label scope:local +QEndOp__Fv = .text:0x803852B8; // type:function size:0x34 scope:local +AyncDVDRead__FP11DVDFileInfo = .text:0x803852EC; // type:function size:0x1B4 scope:local +StartNonAlignedAyncRead__FP11DVDFileInfoPvll = .text:0x803854A0; // type:function size:0x1B8 scope:local +AyncDVDCallback__FlP11DVDFileInfo = .text:0x80385658; // type:function size:0x30 scope:local +_AllocateDvdFileHandle__21GcDvdFileDeviceDriver = .text:0x80385688; // type:function size:0x4C scope:global +_FreeDvdFileHandle__21GcDvdFileDeviceDriverP13DvdFileHandle = .text:0x803856D4; // type:function size:0x64 scope:global +Init__21GcDvdFileDeviceDriver = .text:0x80385738; // type:function size:0x114 scope:global +Restore__21GcDvdFileDeviceDriver = .text:0x8038584C; // type:function size:0x44 scope:global +Open__21GcDvdFileDeviceDriverPCciPi = .text:0x80385890; // type:function size:0xF4 scope:global +Close__21GcDvdFileDeviceDriveri = .text:0x80385984; // type:function size:0x40 scope:global +Read__21GcDvdFileDeviceDriveriPvUiPQ28RealFile12DeviceDriveri = .text:0x803859C4; // type:function size:0xF4 scope:global +Seek__21GcDvdFileDeviceDriveriUxiPQ28RealFile12DeviceDriveri = .text:0x80385AB8; // type:function size:0x9C scope:global +Getsize__21GcDvdFileDeviceDriveri = .text:0x80385B54; // type:function size:0x10 scope:global +QueryLocation__21GcDvdFileDeviceDriveri = .text:0x80385B64; // type:function size:0xC scope:global +__static_initialization_and_destruction_0 = .text:0x80385B70; // type:function size:0xEC scope:local +_._21GcDvdFileDeviceDriver = .text:0x80385C5C; // type:function size:0x94 scope:global +_GLOBAL_.I._AllocateDvdFileHandle__21GcDvdFileDeviceDriver = .text:0x80385CF0; // type:function size:0x2C scope:local +_GLOBAL_.D._AllocateDvdFileHandle__21GcDvdFileDeviceDriver = .text:0x80385D1C; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x80385D48; // type:label scope:local +Init__20GcHdFileDeviceDriver = .text:0x80385D48; // type:function size:0x24 scope:global +Open__20GcHdFileDeviceDriverPCciPi = .text:0x80385D6C; // type:function size:0xB8 scope:global +Close__20GcHdFileDeviceDriveri = .text:0x80385E24; // type:function size:0x24 scope:global +Read__20GcHdFileDeviceDriveriPvUiPQ28RealFile12DeviceDriveri = .text:0x80385E48; // type:function size:0x2C scope:global +Write__20GcHdFileDeviceDriveriPCvUiPQ28RealFile12DeviceDriveri = .text:0x80385E74; // type:function size:0x2C scope:global +Seek__20GcHdFileDeviceDriveriUxiPQ28RealFile12DeviceDriveri = .text:0x80385EA0; // type:function size:0x5C scope:global +Getsize__20GcHdFileDeviceDriveri = .text:0x80385EFC; // type:function size:0x70 scope:global +__static_initialization_and_destruction_0 = .text:0x80385F6C; // type:function size:0x74 scope:local +_._20GcHdFileDeviceDriver = .text:0x80385FE0; // type:function size:0x34 scope:global +Restore__20GcHdFileDeviceDriver = .text:0x80386014; // type:function size:0x4 scope:global +Getspace__20GcHdFileDeviceDriver = .text:0x80386018; // type:function size:0xC scope:global +_GLOBAL_.I.Init__20GcHdFileDeviceDriver = .text:0x80386024; // type:function size:0x2C scope:local +_GLOBAL_.D.Init__20GcHdFileDeviceDriver = .text:0x80386050; // type:function size:0x2C scope:local +TIMER_init__Fi = .text:0x8038607C; // type:function size:0x10C scope:global +TIMER_restore__Fv = .text:0x80386188; // type:function size:0x40 scope:global +ttDoTimerMsg__Fv = .text:0x803861C8; // type:function size:0x68 scope:global +AlarmHandler__FP7OSAlarmP9OSContext = .text:0x80386230; // type:function size:0x24 scope:local +gcc2_compiled. = .text:0x80386254; // type:label scope:local +SIGNAL_create__FP6SIGNAL = .text:0x80386254; // type:function size:0x30 scope:global +SIGNAL_set__FP6SIGNAL = .text:0x80386284; // type:function size:0x2C scope:global +SIGNAL_wait__FP6SIGNAL = .text:0x803862B0; // type:function size:0x2C scope:global +SIGNAL_destroy__FP6SIGNAL = .text:0x803862DC; // type:function size:0x2C scope:global +gcc2_compiled. = .text:0x80386308; // type:label scope:local +ThreadRealPriority2GCPriority__Fi = .text:0x80386308; // type:function size:0x78 scope:local +THREAD_init__Fv = .text:0x80386380; // type:function size:0x24 scope:global +THREAD_create__FP6THREADPFPv_iPvT2ii = .text:0x803863A4; // type:function size:0x7C scope:global +THREAD_destroy__FP6THREAD = .text:0x80386420; // type:function size:0x54 scope:global +AlarmHandler__FP7OSAlarmP9OSContext = .text:0x80386474; // type:function size:0x24 scope:local +THREAD_yield64__Fx = .text:0x80386498; // type:function size:0x80 scope:local +THREAD_yield__Fi = .text:0x80386518; // type:function size:0x60 scope:global +THREAD_iscurrent__FP6THREAD = .text:0x80386578; // type:function size:0x60 scope:global +THREAD_setpriority__FP6THREADi = .text:0x803865D8; // type:function size:0x60 scope:global +THREAD_testexit__FP6THREAD = .text:0x80386638; // type:function size:0x4C scope:global +THREAD_waitexit__FP6THREADi = .text:0x80386684; // type:function size:0x48 scope:global +gcc2_compiled. = .text:0x803866CC; // type:label scope:local +ttInit__Fv = .text:0x803866CC; // type:function size:0x88 scope:global +ttKill__Fv = .text:0x80386754; // type:function size:0x38 scope:global +ttMsg__F8TIMERMSG = .text:0x8038678C; // type:function size:0x30 scope:global +TimerThreadFunc__FPv = .text:0x803867BC; // type:function size:0x70 scope:local +SYSTEM_addexit__FPFv_v = .text:0x8038682C; // type:function size:0x6C scope:global +gcc2_compiled. = .text:0x80386898; // type:label scope:local +__Q210RealSystem5Mutex = .text:0x80386898; // type:function size:0x34 scope:global +Create__Q210RealSystem5Mutex = .text:0x803868CC; // type:function size:0x24 scope:global +Destroy__Q210RealSystem5Mutex = .text:0x803868F0; // type:function size:0x4 scope:global +Lock__Q210RealSystem5Mutex = .text:0x803868F4; // type:function size:0x24 scope:global +Unlock__Q210RealSystem5Mutex = .text:0x80386918; // type:function size:0x24 scope:global +gcc2_compiled. = .text:0x8038693C; // type:label scope:local +SYNCTASK_add__FPFPvi_viiPv = .text:0x8038693C; // type:function size:0xE0 scope:global +SYNCTASK_del__FPFPvi_v = .text:0x80386A1C; // type:function size:0x5C scope:global +SYNCTASK_run__Fv = .text:0x80386A78; // type:function size:0xC0 scope:global +gcc2_compiled. = .text:0x80386B38; // type:label scope:local +gcc2_compiled. = .text:0x80386B38; // type:label scope:local +TIMER_gettick__Fv = .text:0x80386B38; // type:function size:0x8 scope:global +ttDoVTimerMsg__Fv = .text:0x80386B40; // type:function size:0x5C scope:global +gcc2_compiled. = .text:0x80386B9C; // type:label scope:local +findkern16__11RealFontOldiPCQ211RealFontOld8FontKernUi = .text:0x80386B9C; // type:function size:0x40 scope:local +findkern12__11RealFontOldiPCQ211RealFontOld8FontKernUii = .text:0x80386BDC; // type:function size:0x44 scope:local +GetKern__CQ211RealFontOld4FontPCQ211RealFontOld5Glyphw = .text:0x80386C20; // type:function size:0x94 scope:global +gcc2_compiled. = .text:0x80386CB4; // type:label scope:local +BSearch__11RealFontOldwPCQ211RealFontOld5GlyphUii = .text:0x80386CB4; // type:function size:0x40 scope:global +gcc2_compiled. = .text:0x80386CF4; // type:label scope:local +Create__Q211RealFontOld4FontPv = .text:0x80386CF4; // type:function size:0x4C scope:global +Destroy__Q211RealFontOld4FontPQ211RealFontOld4Font = .text:0x80386D40; // type:function size:0x3C scope:global +gcc2_compiled. = .text:0x80386D7C; // type:label scope:local +Init__Q29RealShape12CreateStruct = .text:0x80386D7C; // type:function size:0xC8 scope:global +__Q29RealShape12CreateStruct = .text:0x80386E44; // type:function size:0x30 scope:global +GetNumberOfColours__9RealShapei = .text:0x80386E74; // type:function size:0x28 scope:local +GetCreateSize__Q29RealShape14TextureElementRCQ29RealShape12CreateStruct = .text:0x80386E9C; // type:function size:0x124 scope:global +GetCreateSize__Q29RealShape11ClutElementRCQ29RealShape12CreateStruct = .text:0x80386FC0; // type:function size:0x8C scope:global +GetCreateSize__Q29RealShape11ClipElementRCQ29RealShape12CreateStruct = .text:0x8038704C; // type:function size:0x8 scope:global +GetCreateSize__Q29RealShape14CommentElementRCQ29RealShape12CreateStruct = .text:0x80387054; // type:function size:0xC scope:global +GetCreateSize__Q29RealShape11EaglElementRCQ29RealShape12CreateStruct = .text:0x80387060; // type:function size:0xC scope:global +GetCreateSize__Q29RealShape15HotSpotsElementRCQ29RealShape12CreateStruct = .text:0x8038706C; // type:function size:0x18 scope:global +GetCreateSize__Q29RealShape5ShapeRCQ29RealShape12CreateStruct = .text:0x80387084; // type:function size:0x120 scope:global +CreateAt__Q29RealShape12ShapeElementRCQ29RealShape12CreateStruct = .text:0x803871A4; // type:function size:0xBC scope:global +CreateAt__Q29RealShape14TextureElementRCQ29RealShape12CreateStruct = .text:0x80387260; // type:function size:0x2C0 scope:global +CreateAt__Q29RealShape11ClutElementRCQ29RealShape12CreateStruct = .text:0x80387520; // type:function size:0xB8 scope:global +CreateAt__Q29RealShape11ClipElementRCQ29RealShape12CreateStruct = .text:0x803875D8; // type:function size:0x80 scope:global +CreateAt__Q29RealShape15HotSpotsElementRCQ29RealShape12CreateStruct = .text:0x80387658; // type:function size:0x80 scope:global +CreateAt__Q29RealShape11EaglElementRCQ29RealShape12CreateStruct = .text:0x803876D8; // type:function size:0x88 scope:global +CreateAt__Q29RealShape14CommentElementRCQ29RealShape12CreateStruct = .text:0x80387760; // type:function size:0x60 scope:global +Create__Q29RealShape5ShapeRCQ29RealShape12CreateStructi = .text:0x803877C0; // type:function size:0x88 scope:global +CreateAt__Q29RealShape5ShapePQ29RealShape5ShapeRCQ29RealShape12CreateStruct = .text:0x80387848; // type:function size:0x22C scope:global +gcc2_compiled. = .text:0x80387A74; // type:label scope:local +SetAllocator__Q29RealShape11GraphObjectPQ32EA9Allocator10IAllocator = .text:0x80387A74; // type:function size:0x8 scope:global +sAlloc__Q29RealShape9MemObjectPCcUiiiiPci = .text:0x80387A7C; // type:function size:0xD4 scope:global +sFree__Q29RealShape9MemObjectPv = .text:0x80387B50; // type:function size:0x40 scope:global +gcc2_compiled. = .text:0x80387B90; // type:label scope:local +Destroy__Q29RealShape12ShapeElementPQ29RealShape12ShapeElement = .text:0x80387B90; // type:function size:0xA0 scope:global +gcc2_compiled. = .text:0x80387C30; // type:label scope:local +GetElementType__CQ29RealShape12ShapeElement = .text:0x80387C30; // type:function size:0xCC scope:global +GetTexture__CQ29RealShape5Shape = .text:0x80387CFC; // type:function size:0x24 scope:global +GetElement__CQ29RealShape5Shapei = .text:0x80387D20; // type:function size:0x68 scope:global +gcc2_compiled. = .text:0x80387D88; // type:label scope:local +CreateInstance__Q211RealmcIface16MemcardInterfacePQ26Realmc15SystemInterfacePQ211RealmcIface14IGameInterfacePQ211RealmcIface8GameInfo = .text:0x80387D88; // type:function size:0x74 scope:global +__Q211RealmcIface16MemcardInterfacePQ26Realmc15SystemInterfacePQ211RealmcIface14IGameInterfacePQ211RealmcIface8GameInfo = .text:0x80387DFC; // type:function size:0x64 scope:global +BootupCheck__Q211RealmcIface16MemcardInterfacePCQ211RealmcIface17BootupCheckParamsUiPPCcPw = .text:0x80387E60; // type:function size:0x24 scope:global +Save__Q211RealmcIface16MemcardInterfacePCcN21PCQ211RealmcIface8SaveInfoPCQ211RealmcIface9TitleInfo = .text:0x80387E84; // type:function size:0x3C scope:global +Load__Q211RealmcIface16MemcardInterfacePCcPcT2PCUwPCQ211RealmcIface9TitleInfoT4 = .text:0x80387EC0; // type:function size:0x60 scope:global +Delete__Q211RealmcIface16MemcardInterfacePCcPCUw = .text:0x80387F20; // type:function size:0x24 scope:global +FindEntries__Q211RealmcIface16MemcardInterfacePCcPCQ211RealmcIface9TitleInfo = .text:0x80387F44; // type:function size:0x54 scope:global +MessageDone__Q211RealmcIface16MemcardInterfaceQ211RealmcIface14MessageChoices = .text:0x80387F98; // type:function size:0x24 scope:global +CheckCard__Q211RealmcIface16MemcardInterfaceQ211RealmcIface6CardId = .text:0x80387FBC; // type:function size:0x24 scope:global +SetAutosave__Q211RealmcIface16MemcardInterfaceQ211RealmcIface13AutosaveStateUiPPQ211RealmcIface7SaveReqPCcQ211RealmcIface6CardId = .text:0x80387FE0; // type:function size:0x24 scope:global +SetMonitor__Q211RealmcIface16MemcardInterfaceQ211RealmcIface12MonitorState = .text:0x80388004; // type:function size:0x24 scope:global +SetMessage__Q211RealmcIface16MemcardInterfaceQ211RealmcIface12MessageStateUi = .text:0x80388028; // type:function size:0x24 scope:global +Update__Q211RealmcIface16MemcardInterfaceUi = .text:0x8038804C; // type:function size:0x24 scope:global +IsResettable__Q211RealmcIface16MemcardInterface = .text:0x80388070; // type:function size:0xC scope:global +Clear__Q211RealmcIface17BootupCheckParams = .text:0x8038807C; // type:function size:0x1C scope:global +Clear__Q211RealmcIface18BootupCheckResults = .text:0x80388098; // type:function size:0x18 scope:global +__Q211RealmcIface8CardInfo = .text:0x803880B0; // type:function size:0x30 scope:global +Clear__Q211RealmcIface8CardInfo = .text:0x803880E0; // type:function size:0x28 scope:global +__Q211RealmcIface9EntryInfo = .text:0x80388108; // type:function size:0x3C scope:global +Clear__Q211RealmcIface9EntryInfo = .text:0x80388144; // type:function size:0x60 scope:global +__Q211RealmcIface8GameInfoPCUwUibT3 = .text:0x803881A4; // type:function size:0x70 scope:global +__Q211RealmcIface10GcSaveInfo = .text:0x80388214; // type:function size:0x30 scope:global +Clear__Q211RealmcIface10GcSaveInfo = .text:0x80388244; // type:function size:0x20 scope:global +__Q211RealmcIface11Ps2SaveInfo = .text:0x80388264; // type:function size:0x30 scope:global +Clear__Q211RealmcIface11Ps2SaveInfo = .text:0x80388294; // type:function size:0x34 scope:global +__Q211RealmcIface8SaveInfo = .text:0x803882C8; // type:function size:0x48 scope:global +Clear__Q211RealmcIface8SaveInfo = .text:0x80388310; // type:function size:0x50 scope:global +__Q211RealmcIface7SaveReq = .text:0x80388360; // type:function size:0x30 scope:global +Clear__Q211RealmcIface7SaveReq = .text:0x80388390; // type:function size:0x10 scope:global +__Q211RealmcIface8TimeInfo = .text:0x803883A0; // type:function size:0x30 scope:global +Clear__Q211RealmcIface8TimeInfo = .text:0x803883D0; // type:function size:0x14 scope:global +Clear__Q211RealmcIface9TitleInfo = .text:0x803883E4; // type:function size:0x18 scope:global +Init__Q211RealmcIface9TitleInfoQ211RealmcIface9TitleTypeUiQ211RealmcIface8NameTypeQ211RealmcIface10DataFormat = .text:0x803883FC; // type:function size:0x14 scope:global +__Q211RealmcIface12XboxSaveInfo = .text:0x80388410; // type:function size:0x30 scope:global +Clear__Q211RealmcIface12XboxSaveInfo = .text:0x80388440; // type:function size:0x10 scope:global +gcc2_compiled. = .text:0x80388450; // type:label scope:local +MessageDone__Q211RealmcIface20MemcardInterfaceImplQ211RealmcIface14MessageChoices = .text:0x80388450; // type:function size:0x98 scope:global +Update__Q211RealmcIface20MemcardInterfaceImplUi = .text:0x803884E8; // type:function size:0x15C scope:global +SetMessage__Q211RealmcIface20MemcardInterfaceImplQ211RealmcIface12MessageStateUi = .text:0x80388644; // type:function size:0x60 scope:global +_ShowGuidelinesMessage__Q211RealmcIface20MemcardInterfaceImplPCQ46Realmc7Message10DetailInfo3Trc = .text:0x803886A4; // type:function size:0xA0 scope:global +_ClearMessage__Q211RealmcIface20MemcardInterfaceImpl = .text:0x80388744; // type:function size:0x7C scope:global +_TranslateTaskResult__Q211RealmcIface20MemcardInterfaceImplQ26Realmc10TaskResult = .text:0x803887C0; // type:function size:0x50 scope:global +_TranslateCardStatus__Q211RealmcIface20MemcardInterfaceImplQ26Realmc10CardStatus = .text:0x80388810; // type:function size:0x15C scope:global +ClearTask__Q211RealmcIface20MemcardInterfaceImpl = .text:0x8038896C; // type:function size:0x50 scope:global +TaskManagerBootupCheck__Q211RealmcIface20MemcardInterfaceImplPCQ211RealmcIface17BootupCheckParamsUiPPCcPw = .text:0x803889BC; // type:function size:0x24 scope:global +TaskManagerFindEntries__Q211RealmcIface20MemcardInterfaceImplPCcPCQ211RealmcIface9TitleInfo = .text:0x803889E0; // type:function size:0x24 scope:global +TaskManagerLoad__Q211RealmcIface20MemcardInterfaceImplPCcPcT2PCUwT4PCQ211RealmcIface9TitleInfo = .text:0x80388A04; // type:function size:0x24 scope:global +TaskManagerSave__Q211RealmcIface20MemcardInterfaceImplPCcN21PCQ211RealmcIface8SaveInfoPCQ211RealmcIface9TitleInfo = .text:0x80388A28; // type:function size:0x24 scope:global +TaskManagerDelete__Q211RealmcIface20MemcardInterfaceImplPCcPCUw = .text:0x80388A4C; // type:function size:0x40 scope:global +TaskManagerCheckCard__Q211RealmcIface20MemcardInterfaceImplQ211RealmcIface6CardId = .text:0x80388A8C; // type:function size:0x24 scope:global +TaskManagerSetAutosave__Q211RealmcIface20MemcardInterfaceImplQ211RealmcIface13AutosaveStateUiPPQ211RealmcIface7SaveReqPCcQ211RealmcIface6CardId = .text:0x80388AB0; // type:function size:0x24 scope:global +TaskManagerSetMonitor__Q211RealmcIface20MemcardInterfaceImplQ211RealmcIface12MonitorState = .text:0x80388AD4; // type:function size:0x30 scope:global +gcc2_compiled. = .text:0x80388B04; // type:label scope:local +SetMemAllocator__6RealmcPQ32EA9Allocator10IAllocator = .text:0x80388B04; // type:function size:0x8 scope:global +AllocateMemSize__6RealmcPCciiii = .text:0x80388B0C; // type:function size:0x74 scope:global +FreeMemSize__6RealmcPvi = .text:0x80388B80; // type:function size:0x40 scope:global +gcc2_compiled. = .text:0x80388BC0; // type:label scope:local +__Q211RealmcIface11TaskManagerPQ211RealmcIface20MemcardInterfaceImplPQ211RealmcIface14IGameInterface = .text:0x80388BC0; // type:function size:0x74 scope:global +BootupCheck__Q211RealmcIface11TaskManagerPCQ211RealmcIface17BootupCheckParamsUiPPCcPw = .text:0x80388C34; // type:function size:0x174 scope:global +Load__Q211RealmcIface11TaskManagerPCcPcT2PCUwT4PCQ211RealmcIface9TitleInfo = .text:0x80388DA8; // type:function size:0x2A0 scope:global +FindEntries__Q211RealmcIface11TaskManagerPCcPCQ211RealmcIface9TitleInfo = .text:0x80389048; // type:function size:0x12C scope:global +Save__Q211RealmcIface11TaskManagerPCcN21PCQ211RealmcIface8SaveInfoPCQ211RealmcIface9TitleInfo = .text:0x80389174; // type:function size:0xB8 scope:global +Delete__Q211RealmcIface11TaskManagerUiPPCcPCUw = .text:0x8038922C; // type:function size:0xC8 scope:global +SetAutosave__Q211RealmcIface11TaskManagerQ211RealmcIface13AutosaveStateUiPPQ211RealmcIface7SaveReqPCcQ211RealmcIface6CardId = .text:0x803892F4; // type:function size:0xB8 scope:global +CheckCard__Q211RealmcIface11TaskManagerQ211RealmcIface6CardId = .text:0x803893AC; // type:function size:0x80 scope:global +SetMonitor__Q211RealmcIface11TaskManagerQ211RealmcIface12MonitorState = .text:0x8038942C; // type:function size:0xEC scope:global +FoundEntry__Q211RealmcIface11TaskManagerPQ211RealmcIface9EntryInfo = .text:0x80389518; // type:function size:0xAC scope:global +ClearEntries__Q211RealmcIface11TaskManager = .text:0x803895C4; // type:function size:0x44 scope:global +_StartTask__Q211RealmcIface11TaskManager = .text:0x80389608; // type:function size:0x2B8 scope:global +CompleteTask__Q211RealmcIface11TaskManagerQ211RealmcIface10TaskResultQ211RealmcIface10CardStatusPv = .text:0x803898C0; // type:function size:0xBC8 scope:global +_ClearOldMsgs__Q211RealmcIface11TaskManager = .text:0x8038A488; // type:function size:0x14 scope:global +_ClearTaskList__Q211RealmcIface11TaskManager = .text:0x8038A49C; // type:function size:0x8C scope:global +_InitTaskList__Q211RealmcIface11TaskManager = .text:0x8038A528; // type:function size:0x20 scope:global +_HasStatusChanged__Q211RealmcIface11TaskManagerQ211RealmcIface10CardStatus = .text:0x8038A548; // type:function size:0x58 scope:global +gcc2_compiled. = .text:0x8038A5A0; // type:label scope:local +_ChangeToRealmcCardId__11RealmcIfaceQ211RealmcIface6CardId = .text:0x8038A5A0; // type:function size:0x3C scope:global +_SplitPath__11RealmcIfacePCcPc = .text:0x8038A5DC; // type:function size:0x98 scope:global +__Q211RealmcIface20MemcardInterfaceImplPQ26Realmc15SystemInterfacePQ211RealmcIface14IGameInterfacePQ211RealmcIface8GameInfo = .text:0x8038A674; // type:function size:0x248 scope:global +BootupCheck__Q211RealmcIface20MemcardInterfaceImplPCQ211RealmcIface17BootupCheckParams = .text:0x8038A8BC; // type:function size:0x1C0 scope:global +SaveCheck__Q211RealmcIface20MemcardInterfaceImplPCcUiPPQ211RealmcIface7SaveReq = .text:0x8038AA7C; // type:function size:0x1A8 scope:global +Save__Q211RealmcIface20MemcardInterfaceImplPCcN21PCQ211RealmcIface8SaveInfo = .text:0x8038AC24; // type:function size:0x228 scope:global +Load__Q211RealmcIface20MemcardInterfaceImplPCcPcT2PCUwT4 = .text:0x8038AE4C; // type:function size:0x100 scope:global +LoadAlternate__Q211RealmcIface20MemcardInterfaceImplPCcPcT2PCUwT4PCQ211RealmcIface9TitleInfo = .text:0x8038AF4C; // type:function size:0x128 scope:global +Delete__Q211RealmcIface20MemcardInterfaceImplPCcPCUw = .text:0x8038B074; // type:function size:0xA4 scope:global +DeleteMultiple__Q211RealmcIface20MemcardInterfaceImplUiPPCcPCUw = .text:0x8038B118; // type:function size:0xD8 scope:global +FindEntries__Q211RealmcIface20MemcardInterfaceImplPCc = .text:0x8038B1F0; // type:function size:0xB4 scope:global +FindEntriesAlternate__Q211RealmcIface20MemcardInterfaceImplPCcPCQ211RealmcIface9TitleInfo = .text:0x8038B2A4; // type:function size:0xD4 scope:global +CheckCard__Q211RealmcIface20MemcardInterfaceImplQ211RealmcIface6CardId = .text:0x8038B378; // type:function size:0xA4 scope:global +SetActiveCard__Q211RealmcIface20MemcardInterfaceImplQ211RealmcIface6CardId = .text:0x8038B41C; // type:function size:0x60 scope:global +SetAutosave__Q211RealmcIface20MemcardInterfaceImplQ211RealmcIface13AutosaveStateUiPPQ211RealmcIface7SaveReqPCcQ211RealmcIface6CardId = .text:0x8038B47C; // type:function size:0x10C scope:global +_ProcessBootupCheck__Q211RealmcIface20MemcardInterfaceImplPCQ26Realmc7Message = .text:0x8038B588; // type:function size:0x180 scope:global +_ProcessCheckCard__Q211RealmcIface20MemcardInterfaceImplPCQ26Realmc7Message = .text:0x8038B708; // type:function size:0x10C scope:global +_ProcessSave__Q211RealmcIface20MemcardInterfaceImplPCQ26Realmc7Message = .text:0x8038B814; // type:function size:0x238 scope:global +_ProcessLoad__Q211RealmcIface20MemcardInterfaceImplPCQ26Realmc7Message = .text:0x8038BA4C; // type:function size:0x5C4 scope:global +_ProcessDelete__Q211RealmcIface20MemcardInterfaceImplPCQ26Realmc7Message = .text:0x8038C010; // type:function size:0x3E0 scope:global +_ProcessFindEntries__Q211RealmcIface20MemcardInterfaceImplPCQ26Realmc7Message = .text:0x8038C3F0; // type:function size:0x1CC scope:global +_ProcessSetAutosave__Q211RealmcIface20MemcardInterfaceImplPCQ26Realmc7Message = .text:0x8038C5BC; // type:function size:0x17C scope:global +_ProcessGuidelinesMessage__Q211RealmcIface20MemcardInterfaceImplPCQ26Realmc7Message = .text:0x8038C738; // type:function size:0x28C scope:global +_CheckForCardRemoval__Q211RealmcIface20MemcardInterfaceImpl = .text:0x8038C9C4; // type:function size:0x70 scope:global +_DisableAutosave__Q211RealmcIface20MemcardInterfaceImpl = .text:0x8038CA34; // type:function size:0x78 scope:global +_CalcSignature__Q211RealmcIface20MemcardInterfaceImplPCvUi = .text:0x8038CAAC; // type:function size:0x28 scope:global +CalcSaveSize__Q211RealmcIface20MemcardInterfaceImplPCQ211RealmcIface8SaveInfoQ211RealmcIface10DataFormat = .text:0x8038CAD4; // type:function size:0x158 scope:global +_MakeInsufficientSpaceMessage__Q211RealmcIface20MemcardInterfaceImplUiPPQ211RealmcIface7SaveReq = .text:0x8038CC2C; // type:function size:0x28C scope:global +_ReleaseInsufficientSpaceMessage__Q211RealmcIface20MemcardInterfaceImpl = .text:0x8038CEB8; // type:function size:0x5C scope:global +Clear__Q211RealmcIface10FileHeader = .text:0x8038CF14; // type:function size:0x6C scope:global +_._Q26Realmc9GCMessage = .text:0x8038CF80; // type:function size:0x34 scope:global +Init__Q26Realmc9GCMessage = .text:0x8038CFB4; // type:function size:0x20 scope:global +_SetMsgOptions__Q26Realmc9GCMessagei = .text:0x8038CFD4; // type:function size:0x78 scope:global +_LcGetSlotString__Q26Realmc9GCMessagei = .text:0x8038D04C; // type:function size:0x14 scope:global +Clear__Q26Realmc9GCMessage = .text:0x8038D060; // type:function size:0x28 scope:global +gcc2_compiled. = .text:0x8038D088; // type:label scope:local +FilterGuidelinesMessage__Q211RealmcIface11TaskManagerPCQ26Realmc7Message = .text:0x8038D088; // type:function size:0x130 scope:global +gcc2_compiled. = .text:0x8038D1B8; // type:label scope:local +SetLocaleGetStrCallback__Q26Realmc6LocalePFi_PCc = .text:0x8038D1B8; // type:function size:0x8 scope:global +GetString__Q26Realmc6LocaleiPce = .text:0x8038D1C0; // type:function size:0x434 scope:global +GetWstrLength__Q26Realmc6LocalePCUw = .text:0x8038D5F4; // type:function size:0x30 scope:global +Ascii2Unicode__11RealmcUtilsPwPCc = .text:0x8038D624; // type:function size:0xD4 scope:global +Crc32__11RealmcUtilsPCvi = .text:0x8038D6F8; // type:function size:0x7C scope:global +strrstr__11RealmcUtilsPcT1 = .text:0x8038D774; // type:function size:0x64 scope:local +Wildcard__11RealmcUtilsPcT1 = .text:0x8038D7D8; // type:function size:0x240 scope:global +gcc2_compiled. = .text:0x8038DA18; // type:label scope:local +__Q26Realmc8GCDriverPCQ26Realmc15SystemInterface = .text:0x8038DA18; // type:function size:0x204 scope:global +_._Q26Realmc8GCDriver = .text:0x8038DC1C; // type:function size:0xA0 scope:global +ConvertCardResult__Q26Realmc8GCDriveri = .text:0x8038DCBC; // type:function size:0x100 scope:global +FindFreeFileDescriptor__Q26Realmc8GCDriver = .text:0x8038DDBC; // type:function size:0x28 scope:global +ConvertFileHandleToDescriptor__Q26Realmc8GCDriverPQ26Realmc18OpenFileDescriptor = .text:0x8038DDE4; // type:function size:0x8 scope:global +CardExists__Q26Realmc8GCDriverRCQ26Realmc6CardID = .text:0x8038DDEC; // type:function size:0xA4 scope:global +GetFileBlocks__Q26Realmc8GCDriverRCQ26Realmc6CardIDPCQ26Realmc8FileInfoPUi = .text:0x8038DE90; // type:function size:0x88 scope:global +GetSectorSize__Q26Realmc8GCDriverRCQ26Realmc6CardID = .text:0x8038DF18; // type:function size:0x138 scope:global +CardRemovalCallback__Q26Realmc8GCDriverll = .text:0x8038E050; // type:function size:0xC scope:global +Mount__Q26Realmc8GCDriverRCQ26Realmc6CardID = .text:0x8038E05C; // type:function size:0x184 scope:global +Unmount__Q26Realmc8GCDriverRCQ26Realmc6CardID = .text:0x8038E1E0; // type:function size:0x94 scope:global +OpenFile__Q26Realmc8GCDriverRCQ26Realmc6CardIDPCQ26Realmc8FileInfoQ26Realmc12FileOpenModePPQ26Realmc18OpenFileDescriptor = .text:0x8038E274; // type:function size:0x2B4 scope:global +WriteHeaderData__Q26Realmc8GCDriverPQ26Realmc16GcFileDescriptor = .text:0x8038E528; // type:function size:0x1A8 scope:global +GetBannerSize__Q26Realmc8GCDriverPCQ26Realmc8FileInfo = .text:0x8038E6D0; // type:function size:0x1C scope:global +GetIconSize__Q26Realmc8GCDriverPCQ26Realmc8FileInfo = .text:0x8038E6EC; // type:function size:0x30 scope:global +WriteFile__Q26Realmc8GCDriverPQ26Realmc18OpenFileDescriptorPviPi = .text:0x8038E71C; // type:function size:0x208 scope:global +FlushWriteBuffer__Q26Realmc8GCDriverPQ26Realmc18OpenFileDescriptor = .text:0x8038E924; // type:function size:0x100 scope:global +SetHeaderInfo__Q26Realmc8GCDriverPQ26Realmc16GcFileDescriptor = .text:0x8038EA24; // type:function size:0x248 scope:global +ReadFile__Q26Realmc8GCDriverPQ26Realmc18OpenFileDescriptorPviPi = .text:0x8038EC6C; // type:function size:0x1D0 scope:global +CloseFile__Q26Realmc8GCDriverPQ26Realmc18OpenFileDescriptor = .text:0x8038EE3C; // type:function size:0x124 scope:global +GetOpenFileSize__Q26Realmc8GCDriverPQ26Realmc18OpenFileDescriptor = .text:0x8038EF60; // type:function size:0x24 scope:global +GetFreeCardSpace__Q26Realmc8GCDriverRCQ26Realmc6CardIDPiT2 = .text:0x8038EF84; // type:function size:0x78 scope:global +DeleteFile__Q26Realmc8GCDriverRCQ26Realmc6CardIDPCQ26Realmc8FileInfo = .text:0x8038EFFC; // type:function size:0xB4 scope:global +FormatCard__Q26Realmc8GCDriverRCQ26Realmc6CardID = .text:0x8038F0B0; // type:function size:0x6C scope:global +IsCardPresent__Q26Realmc8GCDriver = .text:0x8038F11C; // type:function size:0x8 scope:global +WasCardPresent__Q26Realmc8GCDriver = .text:0x8038F124; // type:function size:0x8 scope:global +ResetWasCardPresent__Q26Realmc8GCDriver = .text:0x8038F12C; // type:function size:0xC scope:global +IsOurFile__Q26Realmc8GCDriverPCcT1 = .text:0x8038F138; // type:function size:0x64 scope:global +FindFirst__Q26Realmc8GCDriverRCQ26Realmc6CardIDPQ26Realmc14FindInfoStruct = .text:0x8038F19C; // type:function size:0x80 scope:global +FindNext__Q26Realmc8GCDriver = .text:0x8038F21C; // type:function size:0x104 scope:global +Seek__Q26Realmc8GCDriverPQ26Realmc18OpenFileDescriptoriQ26Realmc8SeekFrom = .text:0x8038F320; // type:function size:0x11C scope:global +SetAttributes__Q26Realmc8GCDriverGQ26Realmc6CardIDPcQ26Realmc13FileAttribute = .text:0x8038F43C; // type:function size:0x70 scope:global +FindFileNumber__Q26Realmc8GCDriverPcPi = .text:0x8038F4AC; // type:function size:0xD8 scope:global +NGCSportsBioSeek__Q26Realmc8GCDriverPQ26Realmc16GcFileDescriptoriQ26Realmc8SeekFrom = .text:0x8038F584; // type:function size:0x50 scope:global +NGCSportsBioRead__Q26Realmc8GCDriverPQ26Realmc16GcFileDescriptorPviPi = .text:0x8038F5D4; // type:function size:0xC8 scope:global +NGCSportsBioWrite__Q26Realmc8GCDriverPQ26Realmc16GcFileDescriptorPviPi = .text:0x8038F69C; // type:function size:0xDC scope:global +NGCSportsBioClose__Q26Realmc8GCDriverPQ26Realmc16GcFileDescriptor = .text:0x8038F778; // type:function size:0x78 scope:global +NGCSportsBioCreate__Q26Realmc8GCDriverPQ26Realmc16GcFileDescriptor = .text:0x8038F7F0; // type:function size:0x11C scope:global +RecordIplDataChecksum__Q26Realmc8GCDriverPQ26Realmc16GcFileDescriptor = .text:0x8038F90C; // type:function size:0x108 scope:global +VerifyIplDataChecksum__Q26Realmc8GCDriverPQ26Realmc16GcFileDescriptor = .text:0x8038FA14; // type:function size:0xDC scope:global +_._Q26Realmc12DeviceDriver = .text:0x8038FAF0; // type:function size:0x38 scope:global +Clear__Q26Realmc17CmnFileDescriptor = .text:0x8038FB28; // type:function size:0x48 scope:global +Init__Q26Realmc17CmnFileDescriptorRCQ26Realmc6CardIDRCQ26Realmc8FileInfoQ26Realmc12FileOpenMode = .text:0x8038FB70; // type:function size:0x5C scope:global +Clear__Q26Realmc12GcFileHeader = .text:0x8038FBCC; // type:function size:0x18 scope:global +Clear__Q26Realmc16GcFileDescriptor = .text:0x8038FBE4; // type:function size:0x88 scope:global +Init__Q26Realmc16GcFileDescriptorRCQ26Realmc6CardIDRCQ26Realmc8FileInfoQ26Realmc12FileOpenMode = .text:0x8038FC6C; // type:function size:0xA4 scope:global +gcc2_compiled. = .text:0x8038FD10; // type:label scope:local +CreateInstance__Q26Realmc9InterfaceRCQ26Realmc15SystemInterface = .text:0x8038FD10; // type:function size:0x80 scope:global +__Q26Realmc11GCInterfaceRCQ26Realmc15SystemInterface = .text:0x8038FD90; // type:function size:0x18C scope:global +_._Q26Realmc11GCInterface = .text:0x8038FF1C; // type:function size:0x118 scope:global +TaskThread__Q26Realmc11GCInterfacePv = .text:0x80390034; // type:function size:0x2C0 scope:global +__tcf_0 = .text:0x803902F4; // type:function size:0x14 scope:local +GetMessage__Q26Realmc11GCInterfacei = .text:0x80390308; // type:function size:0x170 scope:global +SendMessage__Q26Realmc11GCInterfaceQ26Realmc11UserMessagei = .text:0x80390478; // type:function size:0x78 scope:global +ConvertUmsgToOption__Q26Realmc11GCInterfaceQ26Realmc11UserMessageiQ26Realmc6TaskID = .text:0x803904F0; // type:function size:0xD8 scope:global +CheckCard__Q26Realmc11GCInterfaceRCQ26Realmc6CardID = .text:0x803905C8; // type:function size:0x2C scope:global +ClearTask__Q26Realmc11GCInterface = .text:0x803905F4; // type:function size:0xCC scope:global +__static_initialization_and_destruction_0 = .text:0x803906C0; // type:function size:0x998 scope:local +Init__Q26Realmc6GcTaskb = .text:0x80391058; // type:function size:0x28 scope:global +Clear__Q26Realmc7TaskTrc = .text:0x80391080; // type:function size:0x14 scope:global +Clear__Q26Realmc16TaskTrcStartGame = .text:0x80391094; // type:function size:0x54 scope:global +Clear__Q26Realmc18TaskTrcGetCardInfo = .text:0x803910E8; // type:function size:0x40 scope:global +Clear__Q26Realmc15TaskTrcSaveFile = .text:0x80391128; // type:function size:0x5C scope:global +Clear__Q26Realmc16TaskTrcListFiles = .text:0x80391184; // type:function size:0x50 scope:global +Clear__Q26Realmc15TaskTrcLoadFile = .text:0x803911D4; // type:function size:0x50 scope:global +Clear__Q26Realmc17TaskTrcDeleteFile = .text:0x80391224; // type:function size:0x4C scope:global +IsBusy__Q26Realmc11GCInterface = .text:0x80391270; // type:function size:0x1C scope:global +GetBlockSize__Q26Realmc11GCInterfaceRCQ26Realmc6CardID = .text:0x8039128C; // type:function size:0x24 scope:global +GetBlockCalculator__Q26Realmc11GCInterface = .text:0x803912B0; // type:function size:0xC scope:global +CheckForAutosaveCardRemoval__Q26Realmc11GCInterface = .text:0x803912BC; // type:function size:0x50 scope:global +ResetAutosaveCardDetection__Q26Realmc11GCInterface = .text:0x8039130C; // type:function size:0x24 scope:global +_._Q26Realmc15BlockCalculator = .text:0x80391330; // type:function size:0x34 scope:global +StartTask__Q26Realmc11TaskManagerPQ26Realmc4Task = .text:0x80391364; // type:function size:0x90 scope:global +EndTask__Q26Realmc11TaskManagerPQ26Realmc4Task = .text:0x803913F4; // type:function size:0x70 scope:global +UpdateCurrentTask__Q26Realmc11TaskManager = .text:0x80391464; // type:function size:0x4 scope:global +Init__Q26Realmc7TaskTrcb = .text:0x80391468; // type:function size:0x68 scope:global +IsPublicTrcTask__Q26Realmc11TaskManagerPQ26Realmc4Task = .text:0x803914D0; // type:function size:0x34 scope:global +TrcSingletonAssert__Q26Realmc11TaskManagerPQ26Realmc4Task = .text:0x80391504; // type:function size:0x14 scope:global +_GLOBAL_.I._6Realmc.ROOT_DIRECTORY_NAME = .text:0x80391518; // type:function size:0x2C scope:local +_GLOBAL_.D._6Realmc.ROOT_DIRECTORY_NAME = .text:0x80391544; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x80391570; // type:label scope:local +TrcStartGame__Q26Realmc11GCInterfaceRCQ26Realmc13StartGameInfo = .text:0x80391570; // type:function size:0x170 scope:global +TrcCardExists__Q26Realmc11GCInterfaceRCQ26Realmc6CardID = .text:0x803916E0; // type:function size:0xEC scope:global +TrcGetCardInfo__Q26Realmc11GCInterfaceRCQ26Realmc6CardID = .text:0x803917CC; // type:function size:0x104 scope:global +TrcLoadFile__Q26Realmc11GCInterfaceRCQ26Realmc6CardIDRCQ26Realmc8FileInfo = .text:0x803918D0; // type:function size:0x13C scope:global +TrcSaveFile__Q26Realmc11GCInterfaceRCQ26Realmc6CardIDRCQ26Realmc8FileInfoQ26Realmc12SaveTaskTypeUiUi = .text:0x80391A0C; // type:function size:0x16C scope:global +TrcListFiles__Q26Realmc11GCInterfaceRCQ26Realmc6CardIDRCQ26Realmc8FileInfoQ26Realmc12ListTaskType = .text:0x80391B78; // type:function size:0x13C scope:global +TrcDeleteFile__Q26Realmc11GCInterfaceRCQ26Realmc6CardIDRCQ26Realmc8FileInfo = .text:0x80391CB4; // type:function size:0x13C scope:global +GetCardName__Q26Realmc11GCInterfaceRCQ26Realmc6CardID = .text:0x80391DF0; // type:function size:0x30 scope:global +GetCardName__Q26Realmc11GCInterfaceRCQ26Realmc6CardIDPwi = .text:0x80391E20; // type:function size:0xE4 scope:global +CardExists__Q26Realmc11GCInterfaceRCQ26Realmc6CardID = .text:0x80391F04; // type:function size:0xC0 scope:global +GetCardInfo__Q26Realmc11GCInterfaceRCQ26Realmc6CardID = .text:0x80391FC4; // type:function size:0xBC scope:global +Mount__Q26Realmc11GCInterfaceRCQ26Realmc6CardID = .text:0x80392080; // type:function size:0xBC scope:global +Unmount__Q26Realmc11GCInterfaceRCQ26Realmc6CardID = .text:0x8039213C; // type:function size:0xBC scope:global +OpenFile__Q26Realmc11GCInterfaceRCQ26Realmc6CardIDRCQ26Realmc8FileInfoQ26Realmc12FileOpenMode = .text:0x803921F8; // type:function size:0xCC scope:global +CloseFile__Q26Realmc11GCInterfacePQ26Realmc18OpenFileDescriptor = .text:0x803922C4; // type:function size:0xB8 scope:global +Read__Q26Realmc11GCInterfacePQ26Realmc18OpenFileDescriptorPvi = .text:0x8039237C; // type:function size:0xCC scope:global +Write__Q26Realmc11GCInterfacePQ26Realmc18OpenFileDescriptorPvi = .text:0x80392448; // type:function size:0xCC scope:global +Seek__Q26Realmc11GCInterfacePQ26Realmc18OpenFileDescriptoriQ26Realmc8SeekFrom = .text:0x80392514; // type:function size:0xC8 scope:global +Flush__Q26Realmc11GCInterfacePQ26Realmc18OpenFileDescriptor = .text:0x803925DC; // type:function size:0xB8 scope:global +DeleteFile__Q26Realmc11GCInterfaceRCQ26Realmc6CardIDPCcT2 = .text:0x80392694; // type:function size:0xD0 scope:global +SetFileAttribute__Q26Realmc11GCInterfaceRCQ26Realmc6CardIDPCcT2Q26Realmc13FileAttribute = .text:0x80392764; // type:function size:0xD8 scope:global +FindFile__Q26Realmc11GCInterfaceRCQ26Realmc6CardIDPCcT2 = .text:0x8039283C; // type:function size:0xD4 scope:global +gcc2_compiled. = .text:0x80392910; // type:label scope:local +UpdateTaskCardExists__Q26Realmc11GCInterface = .text:0x80392910; // type:function size:0x10C scope:global +UpdateTaskGetCardInfo__Q26Realmc11GCInterface = .text:0x80392A1C; // type:function size:0xD0 scope:global +UpdateTaskMount__Q26Realmc11GCInterface = .text:0x80392AEC; // type:function size:0x12C scope:global +UpdateTaskUnmount__Q26Realmc11GCInterface = .text:0x80392C18; // type:function size:0xE4 scope:global +UpdateTaskOpen__Q26Realmc11GCInterface = .text:0x80392CFC; // type:function size:0x140 scope:global +UpdateTaskClose__Q26Realmc11GCInterface = .text:0x80392E3C; // type:function size:0xF4 scope:global +UpdateTaskRead__Q26Realmc11GCInterface = .text:0x80392F30; // type:function size:0x170 scope:global +UpdateTaskWrite__Q26Realmc11GCInterface = .text:0x803930A0; // type:function size:0x164 scope:global +UpdateTaskSeek__Q26Realmc11GCInterface = .text:0x80393204; // type:function size:0xE0 scope:global +UpdateTaskFlush__Q26Realmc11GCInterface = .text:0x803932E4; // type:function size:0xC0 scope:global +UpdateTaskDelete__Q26Realmc11GCInterface = .text:0x803933A4; // type:function size:0x17C scope:global +UpdateTaskSetAttribute__Q26Realmc11GCInterface = .text:0x80393520; // type:function size:0x124 scope:global +UpdateTaskFindFile__Q26Realmc11GCInterface = .text:0x80393644; // type:function size:0x264 scope:global +Find__Q26Realmc11GCInterfaceRCQ26Realmc6CardIDPCcb = .text:0x803938A8; // type:function size:0x1B0 scope:global +Clear__Q26Realmc14FindInfoStruct = .text:0x80393A58; // type:function size:0x60 scope:global +gcc2_compiled. = .text:0x80393AB8; // type:label scope:local +UpdateTaskTrcStartGame__Q26Realmc11GCInterface = .text:0x80393AB8; // type:function size:0x7F0 scope:global +UpdateTaskTrcCardExists__Q26Realmc11GCInterface = .text:0x803942A8; // type:function size:0x32C scope:global +UpdateTaskTrcGetCardInfo__Q26Realmc11GCInterface = .text:0x803945D4; // type:function size:0x378 scope:global +UpdateTaskTrcLoadFile__Q26Realmc11GCInterface = .text:0x8039494C; // type:function size:0xEC4 scope:global +UpdateTaskTrcSaveCheck__Q26Realmc11GCInterface = .text:0x80395810; // type:function size:0x8DC scope:global +UpdateTaskTrcSaveFile__Q26Realmc11GCInterface = .text:0x803960EC; // type:function size:0xD94 scope:global +UpdateTaskTrcDeleteFile__Q26Realmc11GCInterface = .text:0x80396E80; // type:function size:0x7F8 scope:global +UpdateTaskTrcListFiles__Q26Realmc11GCInterface = .text:0x80397678; // type:function size:0x480 scope:global +UpdateTaskTrcMount__Q26Realmc11GCInterface = .text:0x80397AF8; // type:function size:0x214 scope:global +UpdateTaskTrcFormat__Q26Realmc11GCInterface = .text:0x80397D0C; // type:function size:0x4A8 scope:global +UpdateTaskShowCardStatusMessage__Q26Realmc11GCInterface = .text:0x803981B4; // type:function size:0x34C scope:global +UpdateTaskTrcCheckSpace__Q26Realmc11GCInterface = .text:0x80398500; // type:function size:0x488 scope:global +gcc2_compiled. = .text:0x80398988; // type:label scope:local +GetVersionNumber__6RealmcRPCs = .text:0x80398988; // type:function size:0x74 scope:local +CheckMessageCompatibility__Q26Realmc12InterfaceImp = .text:0x803989FC; // type:function size:0x88 scope:global +__Q26Realmc12InterfaceImpRCQ26Realmc15SystemInterface = .text:0x80398A84; // type:function size:0xE8 scope:global +_._Q26Realmc12InterfaceImp = .text:0x80398B6C; // type:function size:0xC8 scope:global +AddRef__Q26Realmc12InterfaceImp = .text:0x80398C34; // type:function size:0x14 scope:global +Release__Q26Realmc12InterfaceImp = .text:0x80398C48; // type:function size:0x8C scope:global +_._Q26Realmc13BaseInterface = .text:0x80398CD4; // type:function size:0x34 scope:global +gcc2_compiled. = .text:0x80398D08; // type:label scope:local +__Q26Realmc18BlockCalculatorImp = .text:0x80398D08; // type:function size:0x44 scope:global +Init__Q26Realmc18BlockCalculatorImpPQ26Realmc8GCDriverUi = .text:0x80398D4C; // type:function size:0x50 scope:global +Clear__Q26Realmc18BlockCalculatorImp = .text:0x80398D9C; // type:function size:0x14 scope:global +SetFileInfo__Q26Realmc18BlockCalculatorImpRCQ26Realmc6CardIDRCQ26Realmc8FileInfo = .text:0x80398DB0; // type:function size:0x54 scope:global +_._Q26Realmc18BlockCalculatorImp = .text:0x80398E04; // type:function size:0x34 scope:global +GetResult__Q26Realmc18BlockCalculatorImp = .text:0x80398E38; // type:function size:0x8 scope:global +gcc2_compiled. = .text:0x80398E40; // type:label scope:local +MEM_copy__FPvPCvi = .text:0x80398E40; // type:function size:0x1F8 scope:global +gcc2_compiled. = .text:0x80399038; // type:label scope:local +MEM_fill__FPvUii = .text:0x80399038; // type:function size:0x144 scope:global +gcc2_compiled. = .text:0x8039917C; // type:label scope:local +LOCALE_getstate__FPCv11LOCALESTATE = .text:0x8039917C; // type:function size:0xD8 scope:global +LOCALE_setstate__FPv11LOCALESTATEi = .text:0x80399254; // type:function size:0x18 scope:global +compare__FPCvT0 = .text:0x8039926C; // type:function size:0x1C scope:local +getstringidbyindex__FUsPC12LOCALE_INDEX = .text:0x80399288; // type:function size:0x88 scope:local +LOCALE_getstrA__FPCvi = .text:0x80399310; // type:function size:0x13C scope:global +LOCALE_create__FPvi = .text:0x8039944C; // type:function size:0x114 scope:global +gcc2_compiled. = .text:0x80399560; // type:label scope:local +MEM_clear__FPvi = .text:0x80399560; // type:function size:0x28 scope:global +gcc2_compiled. = .text:0x80399588; // type:label scope:local +REAL_abortmessage__FPCce = .text:0x80399588; // type:function size:0xD8 scope:global +SYSTEM_abortmessage__FPCce = .text:0x80399660; // type:function size:0xD8 scope:local +DEBUG_break__Fv = .text:0x80399738; // type:function size:0x34 scope:global +gcc2_compiled. = .text:0x8039976C; // type:label scope:local +PRINT_string__F12PRINTCHANNELPCce = .text:0x8039976C; // type:function size:0x94 scope:global +PRINT_vstring__F12PRINTCHANNELPCcP13__va_list_tag = .text:0x80399800; // type:function size:0x9C scope:global +gcc2_compiled. = .text:0x8039989C; // type:label scope:local +PRINT_console__F12PRINTCHANNELPCc = .text:0x8039989C; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x803998C8; // type:label scope:local +__Q39RealInput6Effect4Info = .text:0x803998C8; // type:function size:0xC scope:global +__Q29RealInput8GcEffect = .text:0x803998D4; // type:function size:0x4C scope:global +_._Q29RealInput8GcEffect = .text:0x80399920; // type:function size:0x68 scope:global +Init__Q29RealInput8GcEffectPQ29RealInput6DevicePQ39RealInput6Effect4Info = .text:0x80399988; // type:function size:0x6C scope:global +Release__Q29RealInput8GcEffect = .text:0x803999F4; // type:function size:0x20 scope:global +Start__Q29RealInput8GcEffect = .text:0x80399A14; // type:function size:0x3C scope:global +Stop__Q29RealInput8GcEffect = .text:0x80399A50; // type:function size:0x58 scope:global +GetStatus__Q29RealInput8GcEffect = .text:0x80399AA8; // type:function size:0x1C scope:global +SetInfo__Q29RealInput8GcEffectPQ39RealInput6Effect4Info = .text:0x80399AC4; // type:function size:0x64 scope:global +gcc2_compiled. = .text:0x80399B28; // type:label scope:local +__Q29RealInput9EffectImp = .text:0x80399B28; // type:function size:0x54 scope:global +Init__Q29RealInput9EffectImpPQ29RealInput6DevicePQ39RealInput6Effect4Info = .text:0x80399B7C; // type:function size:0x20 scope:global +Release__Q29RealInput9EffectImp = .text:0x80399B9C; // type:function size:0xC scope:global +_._Q29RealInput9EffectImp = .text:0x80399BA8; // type:function size:0x54 scope:global +Start__Q29RealInput9EffectImp = .text:0x80399BFC; // type:function size:0x4 scope:global +Stop__Q29RealInput9EffectImp = .text:0x80399C00; // type:function size:0x4 scope:global +GetStatus__Q29RealInput9EffectImp = .text:0x80399C04; // type:function size:0x8 scope:global +GetDevice__Q29RealInput9EffectImp = .text:0x80399C0C; // type:function size:0x8 scope:global +GetInfo__Q29RealInput9EffectImpPQ39RealInput6Effect4Info = .text:0x80399C14; // type:function size:0x34 scope:global +SetInfo__Q29RealInput9EffectImpPQ39RealInput6Effect4Info = .text:0x80399C48; // type:function size:0x4 scope:global +gcc2_compiled. = .text:0x80399C4C; // type:label scope:local +CreateInstance__Q29RealInput9InterfaceRCQ29RealInput13ConfigOptions = .text:0x80399C4C; // type:function size:0x64 scope:global +AddRef__Q29RealInput9Interface = .text:0x80399CB0; // type:function size:0x8 scope:global +Release__Q29RealInput9Interface = .text:0x80399CB8; // type:function size:0x8 scope:global +Update__Q29RealInput9Interface = .text:0x80399CC0; // type:function size:0x4 scope:global +GetPad__Q29RealInput9Interface = .text:0x80399CC4; // type:function size:0x8 scope:global +GetMouse__Q29RealInput9Interface = .text:0x80399CCC; // type:function size:0x8 scope:global +GetKeyboard__Q29RealInput9Interface = .text:0x80399CD4; // type:function size:0x8 scope:global +GetEvent__Q29RealInput9Interface = .text:0x80399CDC; // type:function size:0x8 scope:global +_._Q29RealInput9Interface = .text:0x80399CE4; // type:function size:0x34 scope:global +gcc2_compiled. = .text:0x80399D18; // type:label scope:local +ReleaseAllocator__9RealInputv = .text:0x80399D18; // type:function size:0x48 scope:global +SetAllocator__9RealInputPQ32EA9Allocator10IAllocator = .text:0x80399D60; // type:function size:0x48 scope:global +GetAllocator__9RealInputv = .text:0x80399DA8; // type:function size:0x8 scope:global +AllocateMemSize__9RealInputPCciiii = .text:0x80399DB0; // type:function size:0xBC scope:global +FreeMemSize__9RealInputPvi = .text:0x80399E6C; // type:function size:0x50 scope:global +gcc2_compiled. = .text:0x80399EBC; // type:label scope:local +__Q29RealInput8GcDeviceQ39RealInput6Device4TypePQ29RealInput11GcInterface = .text:0x80399EBC; // type:function size:0x4C scope:global +_._Q29RealInput8GcDevice = .text:0x80399F08; // type:function size:0x54 scope:global +GetPortNum__Q29RealInput8GcDevice = .text:0x80399F5C; // type:function size:0x8 scope:global +SetPortNum__Q29RealInput8GcDevicei = .text:0x80399F64; // type:function size:0x8 scope:global +_._Q29RealInput9DeviceImp = .text:0x80399F6C; // type:function size:0x54 scope:global +Acquire__Q29RealInput9DeviceImp = .text:0x80399FC0; // type:function size:0x8 scope:global +Release__Q29RealInput9DeviceImp = .text:0x80399FC8; // type:function size:0x8 scope:global +Update__Q29RealInput9DeviceImp = .text:0x80399FD0; // type:function size:0x8 scope:global +gcc2_compiled. = .text:0x80399FD8; // type:label scope:local +GCPADVBLUpdate__9RealInputv = .text:0x80399FD8; // type:function size:0x7C scope:local +__Q29RealInput11GcInterfaceRCQ29RealInput13ConfigOptions = .text:0x8039A054; // type:function size:0xDC scope:global +_._Q29RealInput11GcInterface = .text:0x8039A130; // type:function size:0xC0 scope:global +GetUnusedEffectSlot__Q29RealInput11GcInterface = .text:0x8039A1F0; // type:function size:0x4C scope:global +EnumerateDevices__Q29RealInput11GcInterface = .text:0x8039A23C; // type:function size:0x18C scope:global +gcc2_compiled. = .text:0x8039A3C8; // type:label scope:local +__Q29RealInput5GcPadPQ29RealInput11GcInterfaceUiPV9PADStatus = .text:0x8039A3C8; // type:function size:0xEC scope:global +_._Q29RealInput5GcPad = .text:0x8039A4B4; // type:function size:0x8C scope:global +Update__Q29RealInput5GcPad = .text:0x8039A540; // type:function size:0x434 scope:global +CreateEffect__Q29RealInput5GcPadPQ39RealInput6Effect4Info = .text:0x8039A974; // type:function size:0xA0 scope:global +GetEffect__Q29RealInput5GcPad = .text:0x8039AA14; // type:function size:0x8 scope:global +gcc2_compiled. = .text:0x8039AA1C; // type:label scope:local +__Q29RealInput12InterfaceImpRCQ29RealInput13ConfigOptions = .text:0x8039AA1C; // type:function size:0xD8 scope:global +_._Q29RealInput12InterfaceImp = .text:0x8039AAF4; // type:function size:0xA8 scope:global +AddRef__Q29RealInput12InterfaceImp = .text:0x8039AB9C; // type:function size:0x14 scope:global +Release__Q29RealInput12InterfaceImp = .text:0x8039ABB0; // type:function size:0x70 scope:global +Update__Q29RealInput12InterfaceImp = .text:0x8039AC20; // type:function size:0x84 scope:global +GetEvent__Q29RealInput12InterfaceImp = .text:0x8039ACA4; // type:function size:0x34 scope:global +RegisterDevice__Q29RealInput12InterfaceImpPQ29RealInput9DeviceImp = .text:0x8039ACD8; // type:function size:0x64 scope:global +UnRegisterDevice__Q29RealInput12InterfaceImpPQ29RealInput9DeviceImp = .text:0x8039AD3C; // type:function size:0xA4 scope:global +GetPad__Q29RealInput12InterfaceImp = .text:0x8039ADE0; // type:function size:0x8 scope:global +GetMouse__Q29RealInput12InterfaceImp = .text:0x8039ADE8; // type:function size:0x8 scope:global +GetKeyboard__Q29RealInput12InterfaceImp = .text:0x8039ADF0; // type:function size:0x8 scope:global +__Q29RealInput6DeviceQ29RealInput8PlatformQ39RealInput6Device4Type = .text:0x8039ADF8; // type:function size:0x4C scope:global +_._Q29RealInput6Device = .text:0x8039AE44; // type:function size:0x38 scope:global +InitData__Q29RealInput6Device = .text:0x8039AE7C; // type:function size:0x50 scope:global +GetData__Q29RealInput6Device = .text:0x8039AECC; // type:function size:0x8 scope:global +Acquire__Q29RealInput6Device = .text:0x8039AED4; // type:function size:0x8 scope:global +Release__Q29RealInput6Device = .text:0x8039AEDC; // type:function size:0x8 scope:global +Update__Q29RealInput6Device = .text:0x8039AEE4; // type:function size:0x8 scope:global +CreateEffect__Q29RealInput6DevicePQ39RealInput6Effect4Info = .text:0x8039AEEC; // type:function size:0x8 scope:global +GetEffect__Q29RealInput6Device = .text:0x8039AEF4; // type:function size:0x8 scope:global +GetKeyState__Q29RealInput6DeviceUi = .text:0x8039AEFC; // type:function size:0x8 scope:global +gcc2_compiled. = .text:0x8039AF04; // type:label scope:local +__Q29RealInput6Effect = .text:0x8039AF04; // type:function size:0x14 scope:global +_._Q29RealInput6Effect = .text:0x8039AF18; // type:function size:0x38 scope:global +Start__Q29RealInput6Effect = .text:0x8039AF50; // type:function size:0x4 scope:global +Stop__Q29RealInput6Effect = .text:0x8039AF54; // type:function size:0x4 scope:global +GetStatus__Q29RealInput6Effect = .text:0x8039AF58; // type:function size:0x8 scope:global +GetDevice__Q29RealInput6Effect = .text:0x8039AF60; // type:function size:0x8 scope:global +GetInfo__Q29RealInput6EffectPQ39RealInput6Effect4Info = .text:0x8039AF68; // type:function size:0x4 scope:global +SetInfo__Q29RealInput6EffectPQ39RealInput6Effect4Info = .text:0x8039AF6C; // type:function size:0x4 scope:global +gcc2_compiled. = .text:0x8039AF70; // type:label scope:local +__Q29RealInput5Event = .text:0x8039AF70; // type:function size:0x30 scope:global +_._Q29RealInput5Event = .text:0x8039AFA0; // type:function size:0x38 scope:global +gcc2_compiled. = .text:0x8039AFD8; // type:label scope:local +__Q29RealInput10EventQueueUi = .text:0x8039AFD8; // type:function size:0xE0 scope:global +_._Q29RealInput10EventQueue = .text:0x8039B0B8; // type:function size:0xA8 scope:global +Clear__Q29RealInput10EventQueue = .text:0x8039B160; // type:function size:0xC scope:global +AddEvent__Q29RealInput10EventQueuePQ29RealInput5Event = .text:0x8039B16C; // type:function size:0xA4 scope:global +GetEvent__Q29RealInput10EventQueue = .text:0x8039B210; // type:function size:0x28 scope:global +gcc2_compiled. = .text:0x8039B238; // type:label scope:local +GetTime__Q29RealInput6ITimer = .text:0x8039B238; // type:function size:0x20 scope:global +VMInit = .text:0x8039B258; // type:function size:0x9C scope:global +__VMGetNumPagesInMRAM = .text:0x8039B2F4; // type:function size:0x8 scope:global +VMGetARAMSize = .text:0x8039B2FC; // type:function size:0x8 scope:global +VMGetARAMBase = .text:0x8039B304; // type:function size:0x8 scope:global +__VMAllocMRAMSwapSpace = .text:0x8039B30C; // type:function size:0x30 scope:global +__VMSwapPageIn = .text:0x8039B33C; // type:function size:0x1FC scope:global +__VMGetPageToReplace = .text:0x8039B538; // type:function size:0x44 scope:global +__VMPageReplacementLRU = .text:0x8039B57C; // type:function size:0x1D0 scope:global +__VMPageReplacementRandom = .text:0x8039B74C; // type:function size:0x94 scope:global +__VMPageReplacementFIFO = .text:0x8039B7E0; // type:function size:0x6C scope:global +VMAlloc = .text:0x8039B84C; // type:function size:0x100 scope:global +__VMTranslateVMPageToARAMPage = .text:0x8039B94C; // type:function size:0x40 scope:global +__VMDoesMappingExist = .text:0x8039B98C; // type:function size:0x20 scope:global +__VMMappingErrorAlert = .text:0x8039B9AC; // type:function size:0x38 scope:global +__VMSetARAMPageAsDirty = .text:0x8039B9E4; // type:function size:0x18 scope:global +__VMIsARAMPageDirty = .text:0x8039B9FC; // type:function size:0x14 scope:global +__VMAllocVirtualToARAMLUT = .text:0x8039BA10; // type:function size:0xA8 scope:global +__VMAllocARAMToVirtualLUT = .text:0x8039BAB8; // type:function size:0xA0 scope:global +gcc2_compiled. = .text:0x8039BB58; // type:label scope:local +__sn_serialp = .text:0x8039BB58; // type:function size:0x5C scope:global +_write = .text:0x8039BBB4; // type:function size:0x50 scope:global +write = .text:0x8039BC04; // type:function size:0x20 scope:global +close = .text:0x8039BC24; // type:function size:0x20 scope:global +fstat = .text:0x8039BC44; // type:function size:0x10 scope:global +lseek = .text:0x8039BC54; // type:function size:0x20 scope:global +read = .text:0x8039BC74; // type:function size:0x20 scope:global +open = .text:0x8039BC94; // type:function size:0xA4 scope:global +gcc2_compiled. = .text:0x8039BD38; // type:label scope:local +tolower = .text:0x8039BD38; // type:function size:0x1C scope:global +gcc2_compiled. = .text:0x8039BD54; // type:label scope:local +vprintf = .text:0x8039BD54; // type:function size:0x34 scope:global +gcc2_compiled. = .text:0x8039BD88; // type:label scope:local +bsearch = .text:0x8039BD88; // type:function size:0x98 scope:global +gcc2_compiled. = .text:0x8039BE20; // type:label scope:local +strrchr = .text:0x8039BE20; // type:function size:0x4C scope:global +gcc2_compiled. = .text:0x8039BE6C; // type:label scope:local +wcscat = .text:0x8039BE6C; // type:function size:0x68 scope:global +gcc2_compiled. = .text:0x8039BED4; // type:label scope:local +wcscpy = .text:0x8039BED4; // type:function size:0x58 scope:global +gcc2_compiled. = .text:0x8039BF2C; // type:label scope:local +wcslen = .text:0x8039BF2C; // type:function size:0x28 scope:global +_savegpr_14 = .text:0x8039BF54; // type:function size:0x4C scope:global +_savegpr_15 = .text:0x8039BF58; // type:function size:0x48 scope:global +_savegpr_16 = .text:0x8039BF5C; // type:function size:0x44 scope:global +_savegpr_17 = .text:0x8039BF60; // type:function size:0x40 scope:global +_savegpr_18 = .text:0x8039BF64; // type:function size:0x3C scope:global +_savegpr_19 = .text:0x8039BF68; // type:function size:0x38 scope:global +_savegpr_20 = .text:0x8039BF6C; // type:function size:0x34 scope:global +_savegpr_21 = .text:0x8039BF70; // type:function size:0x30 scope:global +_savegpr_22 = .text:0x8039BF74; // type:function size:0x2C scope:global +_savegpr_23 = .text:0x8039BF78; // type:function size:0x28 scope:global +_savegpr_24 = .text:0x8039BF7C; // type:function size:0x24 scope:global +_savegpr_25 = .text:0x8039BF80; // type:function size:0x20 scope:global +_savegpr_26 = .text:0x8039BF84; // type:function size:0x1C scope:global +_savegpr_27 = .text:0x8039BF88; // type:function size:0x18 scope:global +_savegpr_28 = .text:0x8039BF8C; // type:function size:0x14 scope:global +_savegpr_29 = .text:0x8039BF90; // type:function size:0x10 scope:global +_savegpr_30 = .text:0x8039BF94; // type:function size:0xC scope:global +_savegpr_31 = .text:0x8039BF98; // type:function size:0x8 scope:global +_restgpr_14 = .text:0x8039BFA0; // type:function size:0x4C scope:global +_restgpr_15 = .text:0x8039BFA4; // type:function size:0x48 scope:global +_restgpr_16 = .text:0x8039BFA8; // type:function size:0x44 scope:global +_restgpr_17 = .text:0x8039BFAC; // type:function size:0x40 scope:global +_restgpr_18 = .text:0x8039BFB0; // type:function size:0x3C scope:global +_restgpr_19 = .text:0x8039BFB4; // type:function size:0x38 scope:global +_restgpr_20 = .text:0x8039BFB8; // type:function size:0x34 scope:global +_restgpr_21 = .text:0x8039BFBC; // type:function size:0x30 scope:global +_restgpr_22 = .text:0x8039BFC0; // type:function size:0x2C scope:global +_restgpr_23 = .text:0x8039BFC4; // type:function size:0x28 scope:global +_restgpr_24 = .text:0x8039BFC8; // type:function size:0x24 scope:global +_restgpr_25 = .text:0x8039BFCC; // type:function size:0x20 scope:global +_restgpr_26 = .text:0x8039BFD0; // type:function size:0x1C scope:global +_restgpr_27 = .text:0x8039BFD4; // type:function size:0x18 scope:global +_restgpr_28 = .text:0x8039BFD8; // type:function size:0x14 scope:global +_restgpr_29 = .text:0x8039BFDC; // type:function size:0x10 scope:global +_restgpr_30 = .text:0x8039BFE0; // type:function size:0xC scope:global +_restgpr_31 = .text:0x8039BFE4; // type:function size:0x8 scope:global +gcc2_compiled. = .text:0x8039BFEC; // type:label scope:local +exp = .text:0x8039BFEC; // type:function size:0x27C scope:global +gcc2_compiled. = .text:0x8039C268; // type:label scope:local +sin = .text:0x8039C268; // type:function size:0xE0 scope:global +gcc2_compiled. = .text:0x8039C348; // type:label scope:local +__kernel_cos = .text:0x8039C348; // type:function size:0xF4 scope:global +gcc2_compiled. = .text:0x8039C43C; // type:label scope:local +__kernel_sin = .text:0x8039C43C; // type:function size:0xAC scope:global +gcc2_compiled. = .text:0x8039C4E8; // type:label scope:local +__ieee754_rem_pio2 = .text:0x8039C4E8; // type:function size:0x364 scope:global +gcc2_compiled. = .text:0x8039C84C; // type:label scope:local +__kernel_rem_pio2 = .text:0x8039C84C; // type:function size:0x888 scope:global +gcc2_compiled. = .text:0x8039D0D4; // type:label scope:local +floor = .text:0x8039D0D4; // type:function size:0x15C scope:global +OSInitMessageQueue = .text:0x8039D230; // type:function size:0x60 scope:global +OSSendMessage = .text:0x8039D290; // type:function size:0xC8 scope:global +OSReceiveMessage = .text:0x8039D358; // type:function size:0xDC scope:global +__ARQServiceQueueLo = .text:0x8039D434; // type:function size:0x100 scope:global +__ARQCallbackHack = .text:0x8039D534; // type:function size:0x4 scope:global +__ARQInterruptServiceRoutine = .text:0x8039D538; // type:function size:0xCC scope:global +ARQInit = .text:0x8039D604; // type:function size:0x70 scope:global +ARQPostRequest = .text:0x8039D674; // type:function size:0x15C scope:global +ARQRemoveRequest = .text:0x8039D7D0; // type:function size:0xE8 scope:global +AXInit = .text:0x8039D8B8; // type:function size:0x24 scope:global +AXInitEx = .text:0x8039D8DC; // type:function size:0x4C scope:global +AXQuit = .text:0x8039D928; // type:function size:0x34 scope:global +__AXGetStackHead = .text:0x8039D95C; // type:function size:0x18 scope:global +__AXServiceCallbackStack = .text:0x8039D974; // type:function size:0x74 scope:global +__AXAllocInit = .text:0x8039D9E8; // type:function size:0xB4 scope:global +__AXAllocQuit = .text:0x8039DA9C; // type:function size:0xB4 scope:global +__AXPushFreeStack = .text:0x8039DB50; // type:function size:0x20 scope:global +__AXPushCallbackStack = .text:0x8039DB70; // type:function size:0x10 scope:global +__AXPopCallbackStack = .text:0x8039DB80; // type:function size:0x1C scope:global +__AXRemoveFromStack = .text:0x8039DB9C; // type:function size:0x94 scope:global +AXFreeVoice = .text:0x8039DC30; // type:function size:0x80 scope:global +AXAcquireVoice = .text:0x8039DCB0; // type:function size:0x174 scope:global +__AXAuxInit = .text:0x8039DE24; // type:function size:0xE4 scope:global +__AXAuxQuit = .text:0x8039DF08; // type:function size:0x10 scope:global +__AXGetAuxAInput = .text:0x8039DF18; // type:function size:0x34 scope:global +__AXGetAuxAInputDpl2 = .text:0x8039DF4C; // type:function size:0x20 scope:global +__AXGetAuxAOutput = .text:0x8039DF6C; // type:function size:0x1C scope:global +__AXGetAuxAOutputDpl2R = .text:0x8039DF88; // type:function size:0x20 scope:global +__AXGetAuxAOutputDpl2Ls = .text:0x8039DFA8; // type:function size:0x20 scope:global +__AXGetAuxAOutputDpl2Rs = .text:0x8039DFC8; // type:function size:0x20 scope:global +__AXGetAuxBInput = .text:0x8039DFE8; // type:function size:0x34 scope:global +__AXGetAuxBOutput = .text:0x8039E01C; // type:function size:0x1C scope:global +__AXGetAuxBForDPL2 = .text:0x8039E038; // type:function size:0x1C scope:global +__AXGetAuxBOutputDPL2 = .text:0x8039E054; // type:function size:0x1C scope:global +__AXProcessAux = .text:0x8039E070; // type:function size:0x23C scope:global +AXRegisterAuxACallback = .text:0x8039E2AC; // type:function size:0xC scope:global +__AXGetCommandListCycles = .text:0x8039E2B8; // type:function size:0x8 scope:global +__AXGetCommandListAddress = .text:0x8039E2C0; // type:function size:0x3C scope:global +__AXNextFrame = .text:0x8039E2FC; // type:function size:0x6B0 scope:global +__AXClInit = .text:0x8039E9AC; // type:function size:0x24 scope:global +__AXClQuit = .text:0x8039E9D0; // type:function size:0x4 scope:global +AXSetMode = .text:0x8039E9D4; // type:function size:0x14 scope:global +AXSetCompressor = .text:0x8039E9E8; // type:function size:0x8 scope:global +__AXOutNewFrame = .text:0x8039E9F0; // type:function size:0x1B8 scope:global +__AXOutAiCallback = .text:0x8039EBA8; // type:function size:0xBC scope:global +__AXDSPInitCallback = .text:0x8039EC64; // type:function size:0xC scope:local +__AXDSPResumeCallback = .text:0x8039EC70; // type:function size:0x58 scope:local +__AXDSPDoneCallback = .text:0x8039ECC8; // type:function size:0x2C scope:local +__AXOutInitDSP = .text:0x8039ECF4; // type:function size:0xCC scope:global +__AXOutInit = .text:0x8039EDC0; // type:function size:0x3A0 scope:global +__AXOutQuit = .text:0x8039F160; // type:function size:0x58 scope:global +__AXGetStudio = .text:0x8039F1B8; // type:function size:0xC scope:global +__AXPrintStudio = .text:0x8039F1C4; // type:function size:0x3F8 scope:global +__AXSPBInit = .text:0x8039F5BC; // type:function size:0x2C scope:global +__AXSPBQuit = .text:0x8039F5E8; // type:function size:0x4 scope:global +__AXDepopVoice = .text:0x8039F5EC; // type:function size:0x94 scope:global +__AXGetNumVoices = .text:0x8039F680; // type:function size:0x8 scope:global +__AXServiceVPB = .text:0x8039F688; // type:function size:0x74C scope:global +__AXSyncPBs = .text:0x8039FDD4; // type:function size:0x278 scope:global +__AXGetPBs = .text:0x803A004C; // type:function size:0xC scope:global +__AXSetPBDefault = .text:0x803A0058; // type:function size:0x44 scope:global +__AXVPBInit = .text:0x803A009C; // type:function size:0x204 scope:global +__AXVPBQuit = .text:0x803A02A0; // type:function size:0x4 scope:global +AXSetVoiceSrcType = .text:0x803A02A4; // type:function size:0xC4 scope:global +AXSetVoiceState = .text:0x803A0368; // type:function size:0x5C scope:global +AXSetVoiceAddr = .text:0x803A03C4; // type:function size:0x110 scope:global +AXSetVoiceAdpcm = .text:0x803A04D4; // type:function size:0xA4 scope:global +AXSetVoiceSrcRatio = .text:0x803A0578; // type:function size:0x98 scope:global +AXSetVoiceAdpcmLoop = .text:0x803A0610; // type:function size:0x6C scope:global +__AXGetCurrentProfile = .text:0x803A067C; // type:function size:0x48 scope:global +DSPCheckMailToDSP = .text:0x803A06C4; // type:function size:0x10 scope:global +DSPCheckMailFromDSP = .text:0x803A06D4; // type:function size:0x10 scope:global +DSPReadMailFromDSP = .text:0x803A06E4; // type:function size:0x18 scope:global +DSPSendMailToDSP = .text:0x803A06FC; // type:function size:0x14 scope:global +DSPInit = .text:0x803A0710; // type:function size:0xC4 scope:global +DSPCheckInit = .text:0x803A07D4; // type:function size:0x8 scope:global +DSPAddTask = .text:0x803A07DC; // type:function size:0x70 scope:global +DSPCancelTask = .text:0x803A084C; // type:function size:0x40 scope:global +DSPAssertTask = .text:0x803A088C; // type:function size:0xC8 scope:global +__DSP_debug_printf = .text:0x803A0954; // type:function size:0x50 scope:global +__DSPHandler = .text:0x803A09A4; // type:function size:0x424 scope:global +__DSP_exec_task = .text:0x803A0DC8; // type:function size:0x1A0 scope:global +__DSP_boot_task = .text:0x803A0F68; // type:function size:0x18C scope:global +__DSP_insert_task = .text:0x803A10F4; // type:function size:0xA0 scope:global +__DSP_remove_task = .text:0x803A1194; // type:function size:0x94 scope:global +FormatCallback = .text:0x803A1228; // type:function size:0x144 scope:local +__CARDFormatRegionAsync = .text:0x803A136C; // type:function size:0x658 scope:global +CARDFormat = .text:0x803A19C4; // type:function size:0x54 scope:global +CreateCallbackFat = .text:0x803A1A18; // type:function size:0x130 scope:local +CARDCreateAsync = .text:0x803A1B48; // type:function size:0x220 scope:global +CARDCreate = .text:0x803A1D68; // type:function size:0x48 scope:global +__CARDSeek = .text:0x803A1DB0; // type:function size:0x1B8 scope:global +ReadCallback = .text:0x803A1F68; // type:function size:0x130 scope:local +CARDReadAsync = .text:0x803A2098; // type:function size:0x144 scope:global +CARDRead = .text:0x803A21DC; // type:function size:0x48 scope:global +WriteCallback = .text:0x803A2224; // type:function size:0x170 scope:local +EraseCallback = .text:0x803A2394; // type:function size:0xB0 scope:local +CARDWriteAsync = .text:0x803A2444; // type:function size:0x114 scope:global +CARDWrite = .text:0x803A2558; // type:function size:0x48 scope:global +DeleteCallback = .text:0x803A25A0; // type:function size:0xA4 scope:local +CARDFastDeleteAsync = .text:0x803A2644; // type:function size:0x12C scope:global +CARDFastDelete = .text:0x803A2770; // type:function size:0x48 scope:global +CARDDeleteAsync = .text:0x803A27B8; // type:function size:0x110 scope:global +CARDDelete = .text:0x803A28C8; // type:function size:0x48 scope:global +UpdateIconOffsets = .text:0x803A2910; // type:function size:0x1F8 scope:local +CARDGetStatus = .text:0x803A2B08; // type:function size:0x114 scope:global +CARDSetStatusAsync = .text:0x803A2C1C; // type:function size:0x174 scope:global +CARDSetStatus = .text:0x803A2D90; // type:function size:0x48 scope:global +gcc2_compiled. = .text:0x803A2DD8; // type:label scope:local +__15EASemaphoreData = .text:0x803A2DD8; // type:function size:0x44 scope:global +__Q32EA6Thread19SemaphoreParametersibPCc = .text:0x803A2E1C; // type:function size:0x8 scope:global +__Q32EA6Thread9Semaphorei = .text:0x803A2E24; // type:function size:0x54 scope:global +_._Q32EA6Thread9Semaphore = .text:0x803A2E78; // type:function size:0x28 scope:global +Init__Q32EA6Thread9SemaphorePCQ32EA6Thread19SemaphoreParameters = .text:0x803A2EA0; // type:function size:0x38 scope:global +Wait__Q32EA6Thread9SemaphoreRCUi = .text:0x803A2ED8; // type:function size:0xC0 scope:global +Post__Q32EA6Thread9Semaphorei = .text:0x803A2F98; // type:function size:0x54 scope:global +ThreadSleep__Q22EA6ThreadRCUi = .text:0x803A2FEC; // type:function size:0x20 scope:global +GetThreadTime__Q22EA6Threadv = .text:0x803A300C; // type:function size:0x4C scope:global +__static_initialization_and_destruction_0 = .text:0x803A3058; // type:function size:0x28 scope:local +_GLOBAL_.I.AllocateThreadDynamicData__Q22EA6Threadv = .text:0x803A3080; // type:function size:0x2C scope:local +gcc2_compiled. = .text:0x803A30AC; // type:label scope:local +SNDBANK_patchinfo = .text:0x803A30AC; // type:function size:0xE4 scope:global +gcc2_compiled. = .text:0x803A3190; // type:label scope:local +SNDCTRL_getprogvol = .text:0x803A3190; // type:function size:0x94 scope:global +gcc2_compiled. = .text:0x803A3224; // type:label scope:local +SNDSTRM_getprogvol = .text:0x803A3224; // type:function size:0x98 scope:global +gcc2_compiled. = .text:0x803A32BC; // type:label scope:local +SNDtimeremaining = .text:0x803A32BC; // type:function size:0xDC scope:global +VMBASEInit = .text:0x803A3398; // type:function size:0xCC scope:global +VMBASESetPageTableEntry = .text:0x803A3464; // type:function size:0x94 scope:global +VMBASEClearPageTableEntry = .text:0x803A34F8; // type:function size:0x8C scope:global +VMBASEIsPageValid = .text:0x803A3584; // type:function size:0x28 scope:global +VMBASEIsPageReferenced = .text:0x803A35AC; // type:function size:0x28 scope:global +VMBASEIsPageDirty = .text:0x803A35D4; // type:function size:0x28 scope:global +VMBASESetPageReferenced = .text:0x803A35FC; // type:function size:0x90 scope:global +__VMBASEClearPageFromTLB = .text:0x803A368C; // type:function size:0x10 scope:global +VMBASEGetVirtualAddrFromPageInMRAM = .text:0x803A369C; // type:function size:0x10 scope:global +__VMBASESetVirtualAddressForPageInMRAM = .text:0x803A36AC; // type:function size:0x10 scope:global +VMBASEIsPageLocked = .text:0x803A36BC; // type:function size:0xC scope:global +VMBASESetPageLocked = .text:0x803A36C8; // type:function size:0x28 scope:global +__VMBASESetSwapPageCallback = .text:0x803A36F0; // type:function size:0x8 scope:global +__VMBASEInitPageTable = .text:0x803A36F8; // type:function size:0x3C scope:global +__VMBASEInitLockedPageTable = .text:0x803A3734; // type:function size:0x30 scope:global +__VMBASEInitReversePageTable = .text:0x803A3764; // type:function size:0x30 scope:global +__VMBASEInvalidatePageTable = .text:0x803A3794; // type:function size:0x158 scope:global +__VMBASEInvalidateLockedPageTable = .text:0x803A38EC; // type:function size:0xD8 scope:global +__VMBASEInvalidateReversePageTable = .text:0x803A39C4; // type:function size:0x78 scope:global +__VMBASEVirtualAddrToPageTableAddr = .text:0x803A3A3C; // type:function size:0x18 scope:global +__VMBASEInvalidateEntireTLB = .text:0x803A3A54; // type:function size:0x58 scope:global +__VMBASESetupVMRegisters = .text:0x803A3AAC; // type:function size:0x54 scope:global +__VMBASESetupSDR1 = .text:0x803A3B00; // type:function size:0x48 scope:local +__VMBASESetupVMRegisters_SetSDR1 = .text:0x803A3B18; // type:label scope:global +__VMBASESetupVMRegisters_End = .text:0x803A3B40; // type:label scope:global +__VMBASESetupExceptionHandlers = .text:0x803A3B48; // type:function size:0x17C scope:global +__VMBASEDSIExceptionHandler = .text:0x803A3CC4; // type:function size:0xF4 scope:local +__VMBASEDSIExceptionHandler_SetOriginalInstruction = .text:0x803A3DB0; // type:label scope:global +__VMBASEDSIExceptionHandler_SetBranchBack = .text:0x803A3DB4; // type:label scope:global +__VMBASEDSIServiceExceptionPrep = .text:0x803A3DB8; // type:function size:0x50 scope:global +__VMBASEDSIServiceException = .text:0x803A3E08; // type:function size:0x64 scope:global +__VMBASEISIExceptionHandler = .text:0x803A3E6C; // type:function size:0xF4 scope:local +__VMBASEISIExceptionHandler_SetOriginalInstruction = .text:0x803A3F58; // type:label scope:global +__VMBASEISIExceptionHandler_SetBranchBack = .text:0x803A3F5C; // type:label scope:global +__VMBASEISIServiceExceptionPrep = .text:0x803A3F60; // type:function size:0x4C scope:global +__VMBASEISIServiceException = .text:0x803A3FAC; // type:function size:0x58 scope:global +OSInitSemaphore = .text:0x803A4004; // type:function size:0x58 scope:global +OSWaitSemaphore = .text:0x803A405C; // type:function size:0x70 scope:global +OSTryWaitSemaphore = .text:0x803A40CC; // type:function size:0x54 scope:global +OSSignalSemaphore = .text:0x803A4120; // type:function size:0x60 scope:global +IsClutType__Q29RealShape15TexelTypeHelperQ29RealShape9TexelType = .text:0x803A4180; // type:function size:0x24 scope:global +GetDepth__Q29RealShape15TexelTypeHelperQ29RealShape9TexelType = .text:0x803A41A4; // type:function size:0x14 scope:global +gcc2_compiled. = .over:0x803A41B8; // type:label scope:local +__static_initialization_and_destruction_0 = .over:0x803A41B8; // type:function size:0x50 scope:local +_overlay_start = .over:0x803A41B8; // type:object scope:global +_GLOBAL_.I.__OSBusClock = .over:0x803A4208; // type:function size:0x2C scope:local +gcc2_compiled. = .over:0x803A4294; // type:label scope:local +FindScreenInfo__FPCci = .over:0x803A4294; // type:function size:0x330 scope:local +GetCurrentGarageName__Fv = .over:0x803A45C4; // type:function size:0xB0 scope:local +FindGarageCameraInfo__FPCc = .over:0x803A4674; // type:function size:0xCC scope:local +FindGarageEntryCameraInfo__Fv = .over:0x803A4740; // type:function size:0x28 scope:local +FindGarageFinalCameraInfo__Fv = .over:0x803A4768; // type:function size:0x28 scope:local +FindScreenCameraInfo__FUi = .over:0x803A4790; // type:function size:0xF0 scope:local +HaveAttributesChanged__FRQ36Attrib3Gen8frontend = .over:0x803A4880; // type:function size:0x8 scope:local +Init__16FEGeometryModelsPc = .over:0x803A4888; // type:function size:0x208 scope:global +UnInit__16FEGeometryModels = .over:0x803A4A90; // type:function size:0x80 scope:global +Render__16FEGeometryModelsP5eViewP8bMatrix4Ui = .over:0x803A4B10; // type:function size:0xF4 scope:global +__16GarageMainScreenP21ScreenConstructorDataiP8RideInfoi = .over:0x803A4C04; // type:function size:0x278 scope:global +_._16GarageMainScreen = .over:0x803A4E7C; // type:function size:0xD4 scope:global +GetInstance__16GarageMainScreen = .over:0x803A4F50; // type:function size:0x28 scope:global +EnableCarRendering__16GarageMainScreen = .over:0x803A4F78; // type:function size:0x18 scope:global +DisableCarRendering__16GarageMainScreen = .over:0x803A4F90; // type:function size:0x18 scope:global +IsCarRendering__16GarageMainScreen = .over:0x803A4FA8; // type:function size:0x24 scope:global +HandleTick__16GarageMainScreenUl = .over:0x803A4FCC; // type:function size:0x3E4 scope:global +SetRideInfo__16GarageMainScreenP8RideInfo19eSetRideInfoReasons = .over:0x803A53B0; // type:function size:0xCC scope:global +CancelCarLoad__16GarageMainScreen = .over:0x803A547C; // type:function size:0x30 scope:global +UpdateCurrentCameraView__16GarageMainScreenb = .over:0x803A54AC; // type:function size:0x18C scope:global +RefreshBackground__16GarageMainScreen = .over:0x803A5638; // type:function size:0xAC scope:global +BackgroundLoaded__16GarageMainScreeni = .over:0x803A56E4; // type:function size:0x90 scope:global +GetCarRotationX__16GarageMainScreen = .over:0x803A5774; // type:function size:0x54 scope:global +GetCarRotationY__16GarageMainScreen = .over:0x803A57C8; // type:function size:0x54 scope:global +GetCarRotationZ__16GarageMainScreen = .over:0x803A581C; // type:function size:0x54 scope:global +GetGeometryZAngle__16GarageMainScreen = .over:0x803A5870; // type:function size:0x64 scope:global +GetGeometryXPos__16GarageMainScreen = .over:0x803A58D4; // type:function size:0x44 scope:global +GetGeometryYPos__16GarageMainScreen = .over:0x803A5918; // type:function size:0x54 scope:global +GetGeometryZPos__16GarageMainScreen = .over:0x803A596C; // type:function size:0x44 scope:global +UpdateRenderingCarParameters__16GarageMainScreenP20FrontEndRenderingCar = .over:0x803A59B0; // type:function size:0x4A4 scope:global +HandleRender__16GarageMainScreenUi = .over:0x803A5E54; // type:function size:0x13C scope:global +HandleShowPackage__16GarageMainScreenUi = .over:0x803A5F90; // type:function size:0x78 scope:global +HandleHidePackage__16GarageMainScreenUi = .over:0x803A6008; // type:function size:0x10 scope:global +HandleJoyEvents__16GarageMainScreen = .over:0x803A6018; // type:function size:0x34C scope:global +NotificationMessage__16GarageMainScreenUlP8FEObjectUlUl = .over:0x803A6364; // type:function size:0xB0 scope:global +CreateGarageMainScreen__FP21ScreenConstructorData = .over:0x803A6414; // type:function size:0x48 scope:global +__15GarageCarLoader = .over:0x803A645C; // type:function size:0x78 scope:global +_._15GarageCarLoader = .over:0x803A64D4; // type:function size:0x40 scope:global +Init__15GarageCarLoader = .over:0x803A6514; // type:function size:0x18 scope:global +CleanUp__15GarageCarLoader = .over:0x803A652C; // type:function size:0x84 scope:global +CancelCarLoad__15GarageCarLoader = .over:0x803A65B0; // type:function size:0x38 scope:global +LoadRideInfo__15GarageCarLoaderP8RideInfo = .over:0x803A65E8; // type:function size:0x104 scope:global +GetCurrentRideInfo__15GarageCarLoader = .over:0x803A66EC; // type:function size:0x1C scope:global +Switch__15GarageCarLoader = .over:0x803A6708; // type:function size:0xC scope:global +Update__15GarageCarLoader = .over:0x803A6714; // type:function size:0x10C scope:global +__tcf_0 = .over:0x803A6820; // type:function size:0x2C scope:local +GetGarageCarLoader__Fv = .over:0x803A684C; // type:function size:0x5C scope:global +InitGarageCarLoaders__Fv = .over:0x803A68A8; // type:function size:0x24 scope:global +CleanUpGarageCarLoaders__Fv = .over:0x803A68CC; // type:function size:0x24 scope:global +UpdateGarageCarLoaders__Fv = .over:0x803A68F0; // type:function size:0x24 scope:global +FindWhichScreenToUpdate__9CarViewer18eCarViewerWhichCar = .over:0x803A6914; // type:function size:0x50 scope:global +SetRideInfo__9CarViewerP8RideInfo19eSetRideInfoReasons18eCarViewerWhichCar = .over:0x803A6964; // type:function size:0xCC scope:global +CancelCarLoad__9CarViewer18eCarViewerWhichCar = .over:0x803A6A30; // type:function size:0x24 scope:global +GetRideInfo__9CarViewer18eCarViewerWhichCar = .over:0x803A6A54; // type:function size:0xC scope:global +HideAllCars__9CarViewer = .over:0x803A6A60; // type:function size:0x3C scope:global +ShowAllCars__9CarViewer = .over:0x803A6A9C; // type:function size:0x3C scope:global +ShowCarScreen__9CarViewer = .over:0x803A6AD8; // type:function size:0x54 scope:global +__9UIQRBriefP21ScreenConstructorData = .over:0x803A6B2C; // type:function size:0x144 scope:global +RefreshHeader__9UIQRBrief = .over:0x803A6C70; // type:function size:0x408 scope:global +UpdateSliders__9UIQRBrief = .over:0x803A7078; // type:function size:0x18C scope:global +Setup__9UIQRBrief = .over:0x803A7204; // type:function size:0x298 scope:global +NotificationMessage__9UIQRBriefUlP8FEObjectUlUl = .over:0x803A749C; // type:function size:0x464 scope:global +GetRandomCar__9UIQRBrief = .over:0x803A7900; // type:function size:0x44 scope:global +GetRandomTrack__9UIQRBrief = .over:0x803A7944; // type:function size:0x44 scope:global +_SetQRMode__Fi = .over:0x803A7988; // type:function size:0xC scope:local +__12UIQRMainMenuP21ScreenConstructorData = .over:0x803A7994; // type:function size:0x4C scope:global +RefreshHeader__12UIQRMainMenu = .over:0x803A79E0; // type:function size:0x5C scope:global +Setup__12UIQRMainMenu = .over:0x803A7A3C; // type:function size:0x174 scope:global +NotificationMessage__12UIQRMainMenuUlP8FEObjectUlUl = .over:0x803A7BB0; // type:function size:0x154 scope:global +__14UIQRModeSelectP21ScreenConstructorData = .over:0x803A7D04; // type:function size:0x4C scope:global +RefreshHeader__14UIQRModeSelect = .over:0x803A7D50; // type:function size:0x98 scope:global +Setup__14UIQRModeSelect = .over:0x803A7DE8; // type:function size:0x308 scope:global +NotificationMessage__14UIQRModeSelectUlP8FEObjectUlUl = .over:0x803A80F0; // type:function size:0x130 scope:global +__15UIQRTrackSelectP21ScreenConstructorData = .over:0x803A8220; // type:function size:0x64 scope:global +_._15UIQRTrackSelect = .over:0x803A8284; // type:function size:0x80 scope:global +Setup__15UIQRTrackSelect = .over:0x803A8304; // type:function size:0x118 scope:global +NotificationMessage__15UIQRTrackSelectUlP8FEObjectUlUl = .over:0x803A841C; // type:function size:0x2DC scope:global +SetSelectedTrack__15UIQRTrackSelectP15GRaceParameters = .over:0x803A86F8; // type:function size:0x58 scope:global +IsRaceValidForMike__15UIQRTrackSelectP15GRaceParameters = .over:0x803A8750; // type:function size:0xB8 scope:global +TryToAddTrack__15UIQRTrackSelectP15GRaceParametersii = .over:0x803A8808; // type:function size:0x174 scope:global +BuildPresetTrackList__15UIQRTrackSelect = .over:0x803A897C; // type:function size:0x1D4 scope:global +RefreshHeader__15UIQRTrackSelect = .over:0x803A8B50; // type:function size:0x684 scope:global +ScrollTracks__15UIQRTrackSelect10eScrollDir = .over:0x803A91D4; // type:function size:0xB8 scope:global +ScrollRegions__15UIQRTrackSelect10eScrollDir = .over:0x803A928C; // type:function size:0xA4 scope:global +__16UIQRTrackOptionsP21ScreenConstructorData = .over:0x803A9330; // type:function size:0x84 scope:global +NotificationMessage__16UIQRTrackOptionsUlP8FEObjectUlUl = .over:0x803A93B4; // type:function size:0x280 scope:global +Setup__16UIQRTrackOptions = .over:0x803A9634; // type:function size:0x19C scope:global +BoilerPlateOnline__16UIQRTrackOptionsRCb = .over:0x803A97D0; // type:function size:0x4 scope:global +SetupCircuit__16UIQRTrackOptions = .over:0x803A97D4; // type:function size:0x1B4 scope:global +SetupSprint__16UIQRTrackOptions = .over:0x803A9988; // type:function size:0x184 scope:global +SetupDrag__16UIQRTrackOptions = .over:0x803A9B0C; // type:function size:0x128 scope:global +SetupKnockout__16UIQRTrackOptions = .over:0x803A9C34; // type:function size:0x270 scope:global +SetupSpeedTrap__16UIQRTrackOptions = .over:0x803A9EA4; // type:function size:0x1F4 scope:global +SetupTollbooth__16UIQRTrackOptions = .over:0x803AA098; // type:function size:0x138 scope:global +__24QRCarSelectBustedManagerPCci = .over:0x803AA1D0; // type:function size:0x30 scope:global +_._24QRCarSelectBustedManager = .over:0x803AA200; // type:function size:0x6C scope:global +IsImpoundInfoVisible__24QRCarSelectBustedManager = .over:0x803AA26C; // type:function size:0x28 scope:global +ShowImpoundedTexture__24QRCarSelectBustedManager = .over:0x803AA294; // type:function size:0x1C scope:global +NotificationMessage__24QRCarSelectBustedManagerUlP8FEObjectUlUl = .over:0x803AA2B0; // type:function size:0x204 scope:global +TextureLoadedCallback__24QRCarSelectBustedManager = .over:0x803AA4B4; // type:function size:0xDC scope:global +LoadImpoundTexture__24QRCarSelectBustedManager = .over:0x803AA590; // type:function size:0x16C scope:global +SetSelectedCar__24QRCarSelectBustedManagerP11FECarRecord = .over:0x803AA6FC; // type:function size:0xF0 scope:global +RefreshHeader__24QRCarSelectBustedManager = .over:0x803AA7EC; // type:function size:0x4AC scope:global +CalcGameOver__24QRCarSelectBustedManager = .over:0x803AAC98; // type:function size:0x78 scope:global +MaybeReleaseCar__24QRCarSelectBustedManager = .over:0x803AAD10; // type:function size:0x22C scope:global +MaybeAddImpoundBox__24QRCarSelectBustedManager = .over:0x803AAF3C; // type:function size:0x13C scope:global +__13UIQRCarSelectP21ScreenConstructorData = .over:0x803AB078; // type:function size:0x2DC scope:global +_._13UIQRCarSelect = .over:0x803AB354; // type:function size:0xA0 scope:global +IsCarImpounded__13UIQRCarSelectUi = .over:0x803AB3F4; // type:function size:0x6C scope:global +CommitChangeStartRace__13UIQRCarSelectb = .over:0x803AB460; // type:function size:0x44 scope:global +NotificationMessage__13UIQRCarSelectUlP8FEObjectUlUl = .over:0x803AB4A4; // type:function size:0x13E8 scope:global +NotifySoundMessage__13UIQRCarSelectUl18eMenuSoundTriggers = .over:0x803AC88C; // type:function size:0x70 scope:global +Setup__13UIQRCarSelect = .over:0x803AC8FC; // type:function size:0x2B0 scope:global +InitStatsSliders__13UIQRCarSelect = .over:0x803ACBAC; // type:function size:0xE0 scope:global +UpdateSliders__13UIQRCarSelect = .over:0x803ACC8C; // type:function size:0x2A4 scope:global +GetFilterType__13UIQRCarSelect = .over:0x803ACF30; // type:function size:0x88 scope:global +SetupForPlayer__13UIQRCarSelecti = .over:0x803ACFB8; // type:function size:0x144 scope:global +GetBonusUnlockText__13UIQRCarSelectP11FECarRecord = .over:0x803AD0FC; // type:function size:0xDC scope:global +GetBonusUnlockBinNumber__13UIQRCarSelectP11FECarRecord = .over:0x803AD1D8; // type:function size:0x174 scope:global +RefreshHeader__13UIQRCarSelect = .over:0x803AD34C; // type:function size:0xAFC scope:global +ChooseTransmission__13UIQRCarSelect = .over:0x803ADE48; // type:function size:0x90 scope:global +GetSelectedCarRecord__13UIQRCarSelect = .over:0x803ADED8; // type:function size:0x58 scope:global +SetSelectedCar__13UIQRCarSelectP13SelectableCari = .over:0x803ADF30; // type:function size:0x124 scope:global +SortCarsByUnlock__FP13SelectableCarT0 = .over:0x803AE054; // type:function size:0x124 scope:global +IsValidMikeMannCar__FP11FECarRecordUi = .over:0x803AE178; // type:function size:0xE0 scope:global +RefreshBonusCarList__13UIQRCarSelect = .over:0x803AE258; // type:function size:0x7C8 scope:global +RefreshCarList__13UIQRCarSelect = .over:0x803AEA20; // type:function size:0x1B0 scope:global +ClearCarList__13UIQRCarSelect = .over:0x803AEBD0; // type:function size:0x54 scope:global +ScrollCars__13UIQRCarSelect10eScrollDir = .over:0x803AEC24; // type:function size:0x88 scope:global +ScrollLists__13UIQRCarSelect10eScrollDir = .over:0x803AECAC; // type:function size:0xDC scope:global +OnlineActOnSelect__13UIQRCarSelect = .over:0x803AED88; // type:function size:0x74 scope:global +__14uiQRPressStartP21ScreenConstructorData = .over:0x803AEDFC; // type:function size:0x58 scope:global +_._14uiQRPressStart = .over:0x803AEE54; // type:function size:0x30 scope:global +NotificationMessage__14uiQRPressStartUlP8FEObjectUlUl = .over:0x803AEE84; // type:function size:0x204 scope:global +Setup__14uiQRPressStart = .over:0x803AF088; // type:function size:0x80 scope:global +NotificationMessage__14ChallengeDatumUlP8FEObjectUlUl = .over:0x803AF108; // type:function size:0x3C scope:global +__19UIQRChallengeSeriesP21ScreenConstructorData = .over:0x803AF144; // type:function size:0x108 scope:global +_._19UIQRChallengeSeries = .over:0x803AF24C; // type:function size:0x114 scope:global +NotifySoundMessage__19UIQRChallengeSeriesUl18eMenuSoundTriggers = .over:0x803AF360; // type:function size:0x48 scope:global +NotificationMessage__19UIQRChallengeSeriesUlP8FEObjectUlUl = .over:0x803AF3A8; // type:function size:0x2A4 scope:global +ChooseTransmission__19UIQRChallengeSeries = .over:0x803AF64C; // type:function size:0x84 scope:global +RefreshHeader__19UIQRChallengeSeries = .over:0x803AF6D0; // type:function size:0x554 scope:global +AddRace__19UIQRChallengeSeriesP15GRaceParameters = .over:0x803AFC24; // type:function size:0xB8 scope:global +IsRaceValidForMike__19UIQRChallengeSeriesP15GRaceParameters = .over:0x803AFCDC; // type:function size:0x118 scope:global +Setup__19UIQRChallengeSeries = .over:0x803AFDF4; // type:function size:0x188 scope:global +__8ShowcaseP21ScreenConstructorData = .over:0x803AFF7C; // type:function size:0x308 scope:global +_._8Showcase = .over:0x803B0284; // type:function size:0x50 scope:global +NotificationMessage__8ShowcaseUlP8FEObjectUlUl = .over:0x803B02D4; // type:function size:0x9C scope:global +TakeControl__19CarCustomizeManager20eCustomizeEntryPointP11FECarRecord = .over:0x803B0370; // type:function size:0x1AC scope:global +RelinquishControl__19CarCustomizeManager = .over:0x803B051C; // type:function size:0x7C scope:global +CanTradeIn__19CarCustomizeManagerP14SelectablePart = .over:0x803B0598; // type:function size:0x68 scope:global +AddToCart__19CarCustomizeManagerP14SelectablePart = .over:0x803B0600; // type:function size:0x240 scope:global +RemoveFromCart__19CarCustomizeManagerP16ShoppingCartItem = .over:0x803B0840; // type:function size:0x74 scope:global +IsPartTypeInCart__19CarCustomizeManagerP14SelectablePart = .over:0x803B08B4; // type:function size:0x68 scope:global +IsPartTypeInCart__19CarCustomizeManagerUi = .over:0x803B091C; // type:function size:0x6C scope:global +IsPartTypeInCart__19CarCustomizeManagerQ37Physics8Upgrades4Type = .over:0x803B0988; // type:function size:0x68 scope:global +IsPartInCart__19CarCustomizeManagerP14SelectablePart = .over:0x803B09F0; // type:function size:0x74 scope:global +GetActivePartFromSlot__19CarCustomizeManagerUi = .over:0x803B0A64; // type:function size:0x58 scope:global +GetCartTotal__19CarCustomizeManager20eCustomizeCartTotals = .over:0x803B0ABC; // type:function size:0x168 scope:global +Checkout__19CarCustomizeManager = .over:0x803B0C24; // type:function size:0x200 scope:global +DoesCartHaveActiveParts__19CarCustomizeManager = .over:0x803B0E24; // type:function size:0x70 scope:global +GetPartPrice__19CarCustomizeManagerP14SelectablePart = .over:0x803B0E94; // type:function size:0xD4 scope:global +SetTempColoredPart__19CarCustomizeManagerP14SelectablePart = .over:0x803B0F68; // type:function size:0x58 scope:global +ClearTempColoredPart__19CarCustomizeManager = .over:0x803B0FC0; // type:function size:0x58 scope:global +GetStockCarPart__19CarCustomizeManagerUi = .over:0x803B1018; // type:function size:0x80 scope:global +ResetToStockCarParts__19CarCustomizeManager = .over:0x803B1098; // type:function size:0x8C scope:global +ResetPreview__19CarCustomizeManager = .over:0x803B1124; // type:function size:0x12C scope:global +PreviewPart__19CarCustomizeManageriP7CarPart = .over:0x803B1250; // type:function size:0x90 scope:global +InstallPart__19CarCustomizeManageriP7CarPart = .over:0x803B12E0; // type:function size:0x68 scope:global +GetInstalledCarPart__19CarCustomizeManageri = .over:0x803B1348; // type:function size:0x64 scope:global +PreviewPerfPkg__19CarCustomizeManagerQ37Physics8Upgrades4Typei = .over:0x803B13AC; // type:function size:0x64 scope:global +InstallPerfPkg__19CarCustomizeManagerQ37Physics8Upgrades4Typei = .over:0x803B1410; // type:function size:0xE0 scope:global +IsJunkmanInstalled__19CarCustomizeManagerQ37Physics8Upgrades4Type = .over:0x803B14F0; // type:function size:0x60 scope:global +GetInstalledPerfPkg__19CarCustomizeManagerQ37Physics8Upgrades4Type = .over:0x803B1550; // type:function size:0x50 scope:global +GetMaxPackages__19CarCustomizeManagerQ37Physics8Upgrades4Type = .over:0x803B15A0; // type:function size:0x50 scope:global +GetNumPackages__19CarCustomizeManagerQ37Physics8Upgrades4Type = .over:0x803B15F0; // type:function size:0x24 scope:global +MaxOutPerformance__19CarCustomizeManager = .over:0x803B1614; // type:function size:0x234 scope:global +GetPerformanceRating__19CarCustomizeManager22ePerformanceRatingTypeb = .over:0x803B1848; // type:function size:0x114 scope:global +UpdateHeatOnVehicle__19CarCustomizeManagerP14SelectablePartP14FECareerRecord = .over:0x803B195C; // type:function size:0x1AC scope:global +GetUnlockFilter__19CarCustomizeManager = .over:0x803B1B08; // type:function size:0x5C scope:global +GetUnlockHash__19CarCustomizeManager18eCustomizeCategoryi = .over:0x803B1B64; // type:function size:0x280 scope:global +IsPartInstalled__19CarCustomizeManagerP14SelectablePart = .over:0x803B1DE4; // type:function size:0x88 scope:global +IsPartLocked__19CarCustomizeManagerP14SelectableParti = .over:0x803B1E6C; // type:function size:0x158 scope:global +IsPartNew__19CarCustomizeManagerP14SelectableParti = .over:0x803B1FC4; // type:function size:0x80 scope:global +IsCategoryNew__19CarCustomizeManagerUi = .over:0x803B2044; // type:function size:0x4E0 scope:global +IsCategoryLocked__19CarCustomizeManagerUib = .over:0x803B2524; // type:function size:0x518 scope:global +IsRimCategoryLocked__19CarCustomizeManagerUib = .over:0x803B2A3C; // type:function size:0x25C scope:global +IsVinylCategoryLocked__19CarCustomizeManagerUib = .over:0x803B2C98; // type:function size:0x1E8 scope:global +GetMinInnerRadius__19CarCustomizeManager = .over:0x803B2E80; // type:function size:0x40 scope:global +GetMaxInnerRadius__19CarCustomizeManager = .over:0x803B2EC0; // type:function size:0x40 scope:global +GetCarPartList__19CarCustomizeManageriRt6bTList1Z14SelectablePartUi = .over:0x803B2F00; // type:function size:0x478 scope:global +GetPerformancePartsList__19CarCustomizeManagerQ37Physics8Upgrades4TypeRt6bTList1Z14SelectablePart = .over:0x803B3378; // type:function size:0x164 scope:global +CanInstallJunkman__19CarCustomizeManagerQ37Physics8Upgrades4Type = .over:0x803B34DC; // type:function size:0x24 scope:global +IsCareerMode__19CarCustomizeManager = .over:0x803B3500; // type:function size:0x30 scope:global +IsTurbo__19CarCustomizeManager = .over:0x803B3530; // type:function size:0x9C scope:global +GetActualHeat__19CarCustomizeManager = .over:0x803B35CC; // type:function size:0x58 scope:global +GetPreviewHeat__19CarCustomizeManagerP14SelectablePart = .over:0x803B3624; // type:function size:0x154 scope:global +GetNumCustomizeMarkers__19CarCustomizeManager = .over:0x803B3778; // type:function size:0x40 scope:global +IsCastrolCar__19CarCustomizeManager = .over:0x803B37B8; // type:function size:0x40 scope:global +IsRotaryCar__19CarCustomizeManager = .over:0x803B37F8; // type:function size:0x40 scope:global +IsHeroCar__19CarCustomizeManager = .over:0x803B3838; // type:function size:0x30 scope:global +GetCartHeat__19CarCustomizeManager = .over:0x803B3868; // type:function size:0xEC scope:global +TranslateCustomizeCatToMarker__F18eCustomizeCategory = .over:0x803B3954; // type:function size:0x18C scope:global +GetMarkerNameFromCategory__F18eCustomizeCategory = .over:0x803B3AE0; // type:function size:0x240 scope:global +GetNumMarkersFromCategory__F18eCustomizeCategory = .over:0x803B3D20; // type:function size:0x124 scope:global +__14CustomizeMeter = .over:0x803B3E44; // type:function size:0x68 scope:global +Init__14CustomizeMeterPCcT1ffff = .over:0x803B3EAC; // type:function size:0xD0 scope:global +SetCurrent__14CustomizeMeterf = .over:0x803B3F7C; // type:function size:0x20 scope:global +SetPreview__14CustomizeMeterf = .over:0x803B3F9C; // type:function size:0x28 scope:global +Draw__14CustomizeMeter = .over:0x803B3FC4; // type:function size:0x184 scope:global +SetVisibility__14CustomizeMeterb = .over:0x803B4148; // type:function size:0x38 scope:global +Show__18FEShoppingCartItem = .over:0x803B4180; // type:function size:0x3C scope:global +Hide__18FEShoppingCartItem = .over:0x803B41BC; // type:function size:0x3C scope:global +Draw__18FEShoppingCartItem = .over:0x803B41F8; // type:function size:0x178 scope:global +Position__18FEShoppingCartItem = .over:0x803B4370; // type:function size:0x148 scope:global +SetFocus__18FEShoppingCartItemPCc = .over:0x803B44B8; // type:function size:0x98 scope:global +UnsetFocus__18FEShoppingCartItem = .over:0x803B4550; // type:function size:0x9C scope:global +SetCheckScripts__18FEShoppingCartItem = .over:0x803B45EC; // type:function size:0x58 scope:global +SetActiveScripts__18FEShoppingCartItem = .over:0x803B4644; // type:function size:0x40 scope:global +DrawPartName__18FEShoppingCartItem = .over:0x803B4684; // type:function size:0xC48 scope:global +GetPerfPkgCatHash__18FEShoppingCartItemQ37Physics8Upgrades4Type = .over:0x803B52CC; // type:function size:0xCC scope:global +GetPerfPkgLevelHash__18FEShoppingCartItemi = .over:0x803B5398; // type:function size:0x88 scope:global +GetCarPartCatHash__18FEShoppingCartItemUi = .over:0x803B5420; // type:function size:0x1B0 scope:global +__21CustomizeShoppingCartP21ScreenConstructorData = .over:0x803B55D0; // type:function size:0x74 scope:global +NotificationMessage__21CustomizeShoppingCartUlP8FEObjectUlUl = .over:0x803B5644; // type:function size:0x28C scope:global +ShowShoppingCart__21CustomizeShoppingCartPCc = .over:0x803B58D0; // type:function size:0x44 scope:global +ExitShoppingCart__21CustomizeShoppingCart = .over:0x803B5914; // type:function size:0x5C scope:global +IsSlotIDNumberDecal__21CustomizeShoppingCarti = .over:0x803B5970; // type:function size:0x2C scope:global +ToggleAllNumberDecals__21CustomizeShoppingCart = .over:0x803B599C; // type:function size:0x9C scope:global +ToggleChecked__21CustomizeShoppingCart = .over:0x803B5A38; // type:function size:0xA0 scope:global +CanCheckout__21CustomizeShoppingCart = .over:0x803B5AD8; // type:function size:0x80 scope:global +SetMarkerData__21CustomizeShoppingCartiP16ShoppingCartItemi = .over:0x803B5B58; // type:function size:0xD4 scope:global +GetNumMarkersSpending__21CustomizeShoppingCartUi = .over:0x803B5C2C; // type:function size:0x48 scope:global +SetMarkerAmounts__21CustomizeShoppingCart = .over:0x803B5C74; // type:function size:0x3C8 scope:global +RefreshHeader__21CustomizeShoppingCart = .over:0x803B603C; // type:function size:0x424 scope:global +AddItem__21CustomizeShoppingCartP16ShoppingCartItem = .over:0x803B6460; // type:function size:0x1A8 scope:global +ClearUncheckedItems__21CustomizeShoppingCart = .over:0x803B6608; // type:function size:0xDC scope:global +UncheckAllItems__21CustomizeShoppingCart = .over:0x803B66E4; // type:function size:0x98 scope:global +SetMarkerImages__21CustomizeShoppingCart = .over:0x803B677C; // type:function size:0x26C scope:global +Setup__21CustomizeShoppingCart = .over:0x803B69E8; // type:function size:0x148 scope:global +__23CustomizeCategoryScreenP21ScreenConstructorData = .over:0x803B6B30; // type:function size:0xE0 scope:global +_._23CustomizeCategoryScreen = .over:0x803B6C10; // type:function size:0xA4 scope:global +RefreshHeader__23CustomizeCategoryScreen = .over:0x803B6CB4; // type:function size:0x228 scope:global +AddCustomOption__23CustomizeCategoryScreenPCcUiUiUi = .over:0x803B6EDC; // type:function size:0x114 scope:global +NotificationMessage__23CustomizeCategoryScreenUlP8FEObjectUlUl = .over:0x803B6FF0; // type:function size:0x2B4 scope:global +React__18SetStockPartOptionPCcUiP8FEObjectUiUi = .over:0x803B72A4; // type:function size:0x5C scope:global +__12CustomizeSubP21ScreenConstructorData = .over:0x803B7300; // type:function size:0x60 scope:global +NotificationMessage__12CustomizeSubUlP8FEObjectUlUl = .over:0x803B7360; // type:function size:0x5BC scope:global +RefreshHeader__12CustomizeSub = .over:0x803B791C; // type:function size:0x208 scope:global +FindInCartOption__12CustomizeSub = .over:0x803B7B24; // type:function size:0x38 scope:global +Setup__12CustomizeSub = .over:0x803B7B5C; // type:function size:0xF4 scope:global +SetupParts__12CustomizeSub = .over:0x803B7C50; // type:function size:0x204 scope:global +SetupPerformance__12CustomizeSub = .over:0x803B7E54; // type:function size:0x2CC scope:global +SetupVisual__12CustomizeSub = .over:0x803B8120; // type:function size:0x238 scope:global +GetRimBrandIndex__12CustomizeSubUi = .over:0x803B8358; // type:function size:0x120 scope:global +SetupRimBrands__12CustomizeSub = .over:0x803B8478; // type:function size:0x3A0 scope:global +GetVinylGroupIndex__12CustomizeSubi = .over:0x803B8818; // type:function size:0x8C scope:global +SetupVinylGroups__12CustomizeSub = .over:0x803B88A4; // type:function size:0x3A4 scope:global +SetupDecalLocations__12CustomizeSub = .over:0x803B8C48; // type:function size:0x19C scope:global +SetupDecalPositions__12CustomizeSub = .over:0x803B8DE4; // type:function size:0x26C scope:global +__13CustomizeMainP21ScreenConstructorData = .over:0x803B9050; // type:function size:0xC4 scope:global +SwitchRooms__13CustomizeMain = .over:0x803B9114; // type:function size:0x148 scope:global +NotificationMessage__13CustomizeMainUlP8FEObjectUlUl = .over:0x803B925C; // type:function size:0x328 scope:global +SetScreenNames__13CustomizeMain = .over:0x803B9584; // type:function size:0x1B8 scope:global +RefreshHeader__13CustomizeMain = .over:0x803B973C; // type:function size:0xD0 scope:global +SetTitle__13CustomizeMainb = .over:0x803B980C; // type:function size:0x104 scope:global +Setup__13CustomizeMain = .over:0x803B9910; // type:function size:0xBC scope:global +BuildOptionsList__13CustomizeMain = .over:0x803B99CC; // type:function size:0x12C scope:global +__25CustomizationScreenHelperPCc = .over:0x803B9AF8; // type:function size:0xB0 scope:global +DrawTitle__25CustomizationScreenHelper = .over:0x803B9BA8; // type:function size:0xC8 scope:global +SetCareerStatusIcon__25CustomizationScreenHelper19eCustomizePartState = .over:0x803B9C70; // type:function size:0x140 scope:global +SetPlayerCarStatusIcon__25CustomizationScreenHelper19eCustomizePartState = .over:0x803B9DB0; // type:function size:0xC8 scope:global +SetCashVisibility__25CustomizationScreenHelperb = .over:0x803B9E78; // type:function size:0x50 scope:global +SetUnlockOverlayState__25CustomizationScreenHelperbUi = .over:0x803B9EC8; // type:function size:0x70 scope:global +SetCareerStuff__25CustomizationScreenHelperP14SelectablePartUiUi = .over:0x803B9F38; // type:function size:0x238 scope:global +SetPartStatus__25CustomizationScreenHelperP14SelectablePartUiii = .over:0x803BA170; // type:function size:0x148 scope:global +FlashStatusIcon__25CustomizationScreenHelper19eCustomizePartStateb = .over:0x803BA2B8; // type:function size:0x94 scope:global +__19CustomizationScreenP21ScreenConstructorData = .over:0x803BA34C; // type:function size:0xA0 scope:global +_._19CustomizationScreen = .over:0x803BA3EC; // type:function size:0xC8 scope:global +NotificationMessage__19CustomizationScreenUlP8FEObjectUlUl = .over:0x803BA4B4; // type:function size:0x470 scope:global +RefreshHeader__19CustomizationScreen = .over:0x803BA924; // type:function size:0x1C8 scope:global +AddPartOption__19CustomizationScreenP14SelectablePartUiUiUiUib = .over:0x803BAAEC; // type:function size:0x80 scope:global +FindInCartPart__19CustomizationScreen = .over:0x803BAB6C; // type:function size:0x5C scope:global +FindMatchingOption__19CustomizationScreenP14SelectablePart = .over:0x803BABC8; // type:function size:0x88 scope:global +UnLoadCustomHUDPacksAndTextures__Fv = .over:0x803BAC50; // type:function size:0xC8 scope:global +__14CustomizePartsP21ScreenConstructorData = .over:0x803BAD18; // type:function size:0x11C scope:global +_._14CustomizeParts = .over:0x803BAE34; // type:function size:0x64 scope:global +NotificationMessage__14CustomizePartsUlP8FEObjectUlUl = .over:0x803BAE98; // type:function size:0x430 scope:global +Setup__14CustomizeParts = .over:0x803BB2C8; // type:function size:0x6AC scope:global +LoadHudTextures__14CustomizeParts = .over:0x803BB974; // type:function size:0x28 scope:global +LoadNextHudTexturePack__14CustomizeParts = .over:0x803BB99C; // type:function size:0x7C scope:global +TexturePackLoadedCallback__14CustomizeParts = .over:0x803BBA18; // type:function size:0xEC scope:global +TextureLoadedCallback__14CustomizeParts = .over:0x803BBB04; // type:function size:0x90 scope:global +ShowHudObjects__14CustomizeParts = .over:0x803BBB94; // type:function size:0x58 scope:global +SetHUDTextures__14CustomizeParts = .over:0x803BBBEC; // type:function size:0x1B0 scope:global +SetHUDColors__14CustomizeParts = .over:0x803BBD9C; // type:function size:0x2F4 scope:global +RefreshHeader__14CustomizeParts = .over:0x803BC090; // type:function size:0x1EC scope:global +__16CustomizeSpoilerP21ScreenConstructorData = .over:0x803BC27C; // type:function size:0x6C scope:global +NotificationMessage__16CustomizeSpoilerUlP8FEObjectUlUl = .over:0x803BC2E8; // type:function size:0x1C8 scope:global +Setup__16CustomizeSpoiler = .over:0x803BC4B0; // type:function size:0xD4 scope:global +BuildPartOptionListFromFilter__16CustomizeSpoilerP7CarPart = .over:0x803BC584; // type:function size:0x2B8 scope:global +RefreshHeader__16CustomizeSpoiler = .over:0x803BC83C; // type:function size:0x1C0 scope:global +ScrollFilters__16CustomizeSpoiler10eScrollDir = .over:0x803BC9FC; // type:function size:0x90 scope:global +__14HUDLayerOptionUiUiUi = .over:0x803BCA8C; // type:function size:0x84 scope:global +__17CustomizeHUDColorP21ScreenConstructorData = .over:0x803BCB10; // type:function size:0x74 scope:global +_._17CustomizeHUDColor = .over:0x803BCB84; // type:function size:0xAC scope:global +NotificationMessage__17CustomizeHUDColorUlP8FEObjectUlUl = .over:0x803BCC30; // type:function size:0x2A0 scope:global +ScrollColors__17CustomizeHUDColor10eScrollDir = .over:0x803BCED0; // type:function size:0x138 scope:global +AddLayerOption__17CustomizeHUDColorUiUiUi = .over:0x803BD008; // type:function size:0x58 scope:global +Setup__17CustomizeHUDColor = .over:0x803BD060; // type:function size:0x138 scope:global +SetInitialColors__17CustomizeHUDColor = .over:0x803BD198; // type:function size:0x2B0 scope:global +SetHUDTextures__17CustomizeHUDColor = .over:0x803BD448; // type:function size:0x1EC scope:global +RefreshHeader__17CustomizeHUDColor = .over:0x803BD634; // type:function size:0x10C scope:global +BuildColorOptions__17CustomizeHUDColor = .over:0x803BD740; // type:function size:0x334 scope:global +__13CustomizeRimsP21ScreenConstructorData = .over:0x803BDA74; // type:function size:0x54 scope:global +NotificationMessage__13CustomizeRimsUlP8FEObjectUlUl = .over:0x803BDAC8; // type:function size:0x168 scope:global +ScrollRimSizes__13CustomizeRims10eScrollDir = .over:0x803BDC30; // type:function size:0xCC scope:global +Setup__13CustomizeRims = .over:0x803BDCFC; // type:function size:0xFC scope:global +BuildRimsList__13CustomizeRimsi = .over:0x803BDDF8; // type:function size:0x270 scope:global +RefreshHeader__13CustomizeRims = .over:0x803BE068; // type:function size:0x108 scope:global +GetCategoryBrandHash__13CustomizeRims = .over:0x803BE170; // type:function size:0xF8 scope:global +__14CustomizePaintP21ScreenConstructorData = .over:0x803BE268; // type:function size:0xC4 scope:global +NotifySoundMessage__14CustomizePaintUl18eMenuSoundTriggers = .over:0x803BE32C; // type:function size:0x84 scope:global +NotificationMessage__14CustomizePaintUlP8FEObjectUlUl = .over:0x803BE3B0; // type:function size:0x520 scope:global +FindInCartPart__14CustomizePaint = .over:0x803BE8D0; // type:function size:0x74 scope:global +FindMatchingOption__14CustomizePaintP14SelectablePart = .over:0x803BE944; // type:function size:0x9C scope:global +AddVinylAndColorsToCart__14CustomizePaint = .over:0x803BE9E0; // type:function size:0xBC scope:global +ScrollFilters__14CustomizePaint10eScrollDir = .over:0x803BEA9C; // type:function size:0x208 scope:global +Setup__14CustomizePaint = .over:0x803BECA4; // type:function size:0x1A4 scope:global +SetupBasePaint__14CustomizePaint = .over:0x803BEE48; // type:function size:0x24 scope:global +SetupRimPaint__14CustomizePaint = .over:0x803BEE6C; // type:function size:0x5C scope:global +SetupVinylColor__14CustomizePaint = .over:0x803BEEC8; // type:function size:0x18C scope:global +CalcBrandHash__14CustomizePaintP7CarPart = .over:0x803BF054; // type:function size:0xB0 scope:global +BuildSwatchList__14CustomizePaintUi = .over:0x803BF104; // type:function size:0x3F0 scope:global +RefreshHeader__14CustomizePaint = .over:0x803BF4F4; // type:function size:0x384 scope:global +__15CustomizeDecalsP21ScreenConstructorData = .over:0x803BF878; // type:function size:0x4C scope:global +NotificationMessage__15CustomizeDecalsUlP8FEObjectUlUl = .over:0x803BF8C4; // type:function size:0x1C4 scope:global +GetSlotIDFromCategory__15CustomizeDecals = .over:0x803BFA88; // type:function size:0x158 scope:global +RefreshHeader__15CustomizeDecals = .over:0x803BFBE0; // type:function size:0x17C scope:global +BuildDecalList__15CustomizeDecalsUi = .over:0x803BFD5C; // type:function size:0x384 scope:global +Setup__15CustomizeDecals = .over:0x803C00E0; // type:function size:0x248 scope:global +__16CustomizeNumbersP21ScreenConstructorData = .over:0x803C0328; // type:function size:0x9C scope:global +NotificationMessage__16CustomizeNumbersUlP8FEObjectUlUl = .over:0x803C03C4; // type:function size:0x7D8 scope:global +UnsetShoppingCart__16CustomizeNumbers = .over:0x803C0B9C; // type:function size:0x64 scope:global +ScrollNumbers__16CustomizeNumbers10eScrollDir = .over:0x803C0C00; // type:function size:0x1C0 scope:global +RefreshHeader__16CustomizeNumbers = .over:0x803C0DC0; // type:function size:0x334 scope:global +Setup__16CustomizeNumbers = .over:0x803C10F4; // type:function size:0x320 scope:global +__20CustomizePerformanceP21ScreenConstructorData = .over:0x803C1414; // type:function size:0x70 scope:global +NotifySoundMessage__20CustomizePerformanceUl18eMenuSoundTriggers = .over:0x803C1484; // type:function size:0x88 scope:global +NotificationMessage__20CustomizePerformanceUlP8FEObjectUlUl = .over:0x803C150C; // type:function size:0x118 scope:global +GetPerfPkgDesc__20CustomizePerformanceQ37Physics8Upgrades4Typeiib = .over:0x803C1624; // type:function size:0x22C scope:global +GetPerfPkgBrand__20CustomizePerformanceQ37Physics8Upgrades4Typeii = .over:0x803C1850; // type:function size:0x4F4 scope:global +RefreshHeader__20CustomizePerformance = .over:0x803C1D44; // type:function size:0x3A0 scope:global +Setup__20CustomizePerformance = .over:0x803C20E4; // type:function size:0x6D4 scope:global +NotificationMessage__8CarDatumUlP8FEObjectUlUl = .over:0x803C27B8; // type:function size:0xDC scope:global +__13MyCarsManagerP21ScreenConstructorData = .over:0x803C2894; // type:function size:0xA0 scope:global +NotifySoundMessage__13MyCarsManagerUl18eMenuSoundTriggers = .over:0x803C2934; // type:function size:0x48 scope:global +NotificationMessage__13MyCarsManagerUlP8FEObjectUlUl = .over:0x803C297C; // type:function size:0x430 scope:global +Setup__13MyCarsManager = .over:0x803C2DAC; // type:function size:0x14C scope:global +CanAddMoreCars__13MyCarsManager = .over:0x803C2EF8; // type:function size:0x80 scope:global +RefreshCarList__13MyCarsManager = .over:0x803C2F78; // type:function size:0x184 scope:global +RefreshHeader__13MyCarsManager = .over:0x803C30FC; // type:function size:0x1CC scope:global +UpdateSliders__13MyCarsManager = .over:0x803C32C8; // type:function size:0x198 scope:global +UpdateCar__13MyCarsManager = .over:0x803C3460; // type:function size:0xE0 scope:global +SortCarsByName__FP8DebugCarT0 = .over:0x803C3540; // type:function size:0x7C scope:global +__23DebugCarCustomizeScreenP21ScreenConstructorData = .over:0x803C35BC; // type:function size:0x154 scope:global +_._23DebugCarCustomizeScreen = .over:0x803C3710; // type:function size:0x170 scope:global +FindElement__23DebugCarCustomizeScreenRt6bTList1ZQ223DebugCarCustomizeScreen14DebugCarOptioni = .over:0x803C3880; // type:function size:0x28 scope:global +BuildOptionsLists__23DebugCarCustomizeScreen = .over:0x803C38A8; // type:function size:0x180 scope:global +LoadCurrentCar__23DebugCarCustomizeScreen = .over:0x803C3A28; // type:function size:0x100 scope:global +RebuildPartsList__23DebugCarCustomizeScreen = .over:0x803C3B28; // type:function size:0x17C scope:global +NewPreviewPart__23DebugCarCustomizeScreen = .over:0x803C3CA4; // type:function size:0x9C scope:global +InstallPreviewingPart__23DebugCarCustomizeScreen = .over:0x803C3D40; // type:function size:0x9C scope:global +DumpPresetRide__23DebugCarCustomizeScreen = .over:0x803C3DDC; // type:function size:0x70 scope:global +Redraw__23DebugCarCustomizeScreen = .over:0x803C3E4C; // type:function size:0x288 scope:global +NotificationMessage__23DebugCarCustomizeScreenUlP8FEObjectUlUl = .over:0x803C40D4; // type:function size:0x428 scope:global +__17FEMarkerSelectionP21ScreenConstructorData = .over:0x803C44FC; // type:function size:0x29C scope:global +SetUnlockIcon__17FEMarkerSelection17eUnlockableEntityUi = .over:0x803C4798; // type:function size:0x164 scope:global +NotificationMessage__17FEMarkerSelectionUlP8FEObjectUlUl = .over:0x803C48FC; // type:function size:0x2F4 scope:global +GetButtonIndex__17FEMarkerSelectionUi = .over:0x803C4BF0; // type:function size:0xA0 scope:global +GetSelectedButtonIndex__17FEMarkerSelection = .over:0x803C4C90; // type:function size:0x4C scope:global +GetMarkerSelectInfo__FQ215FEMarkerManager15ePossibleMarker = .over:0x803C4CDC; // type:function size:0x38 scope:global +GetIconHashForType__17FEMarkerSelectionQ215FEMarkerManager15ePossibleMarker = .over:0x803C4D14; // type:function size:0x28 scope:global +GetCategoryIconHashForType__17FEMarkerSelectionQ215FEMarkerManager15ePossibleMarker = .over:0x803C4D3C; // type:function size:0x28 scope:global +GetNameHashForType__17FEMarkerSelectionQ215FEMarkerManager15ePossibleMarker = .over:0x803C4D64; // type:function size:0x28 scope:global +GetCategoryNameHashForType__17FEMarkerSelectionQ215FEMarkerManager15ePossibleMarker = .over:0x803C4D8C; // type:function size:0x28 scope:global +GetBlurbHashForType__17FEMarkerSelectionQ215FEMarkerManager15ePossibleMarker = .over:0x803C4DB4; // type:function size:0x28 scope:global +GetCategoryBlurbHashForType__17FEMarkerSelectionQ215FEMarkerManager15ePossibleMarker = .over:0x803C4DDC; // type:function size:0x28 scope:global +GetNumSelected__17FEMarkerSelection = .over:0x803C4E04; // type:function size:0x54 scope:global +Redraw__17FEMarkerSelection = .over:0x803C4E58; // type:function size:0x29C scope:global +__static_initialization_and_destruction_0 = .over:0x803C50F4; // type:function size:0xD0 scope:local +GetCarTypeInfo__F7CarType = .over:0x803C51C4; // type:function size:0x14 scope:global +_._14SelectablePart = .over:0x803C51D8; // type:function size:0x34 scope:global +GetPart__14SelectablePart = .over:0x803C520C; // type:function size:0x8 scope:global +GetSlotID__14SelectablePart = .over:0x803C5214; // type:function size:0x8 scope:global +GetUpgradeLevel__14SelectablePart = .over:0x803C521C; // type:function size:0x8 scope:global +GetPhysicsType__14SelectablePart = .over:0x803C5224; // type:function size:0x8 scope:global +IsPerformancePkg__14SelectablePart = .over:0x803C522C; // type:function size:0x8 scope:global +GetPartState__14SelectablePart = .over:0x803C5234; // type:function size:0x8 scope:global +GetPrice__14SelectablePart = .over:0x803C523C; // type:function size:0x8 scope:global +IsJunkmanPart__14SelectablePart = .over:0x803C5244; // type:function size:0x8 scope:global +_._16ShoppingCartItem = .over:0x803C524C; // type:function size:0x98 scope:global +_._14CustomizeMeter = .over:0x803C52E4; // type:function size:0x34 scope:global +_._18FEShoppingCartItem = .over:0x803C5318; // type:function size:0x34 scope:global +_._21CustomizeShoppingCart = .over:0x803C534C; // type:function size:0x98 scope:global +_._19CustomizeMainOption = .over:0x803C53E4; // type:function size:0x34 scope:global +React__19CustomizeMainOptionPCcUiP8FEObjectUiUi = .over:0x803C5418; // type:function size:0x4C scope:global +IsStockOption__19CustomizeMainOption = .over:0x803C5464; // type:function size:0x8 scope:global +Setup__23CustomizeCategoryScreen = .over:0x803C546C; // type:function size:0x4 scope:global +_._18SetStockPartOption = .over:0x803C5470; // type:function size:0x7C scope:global +IsStockOption__18SetStockPartOption = .over:0x803C54EC; // type:function size:0x8 scope:global +_._12CustomizeSub = .over:0x803C54F4; // type:function size:0x30 scope:global +_._13CustomizeMain = .over:0x803C5524; // type:function size:0x30 scope:global +_._19CustomizePartOption = .over:0x803C5554; // type:function size:0x7C scope:global +React__19CustomizePartOptionPCcUiP8FEObjectUiUi = .over:0x803C55D0; // type:function size:0x4 scope:global +_._25CustomizationScreenHelper = .over:0x803C55D4; // type:function size:0x40 scope:global +GetSelectedPart__19CustomizationScreen = .over:0x803C5614; // type:function size:0xC scope:global +TexturePackLoadedCallbackAccessor__14CustomizePartsUi = .over:0x803C5620; // type:function size:0x20 scope:global +TextureLoadedCallbackAccessor__14CustomizePartsUi = .over:0x803C5640; // type:function size:0x20 scope:global +_._16CustomizeSpoiler = .over:0x803C5660; // type:function size:0x30 scope:global +_._14HUDLayerOption = .over:0x803C5690; // type:function size:0xD0 scope:global +React__14HUDLayerOptionPCcUiP8FEObjectUiUi = .over:0x803C5760; // type:function size:0x4 scope:global +_._14HUDColorOption = .over:0x803C5764; // type:function size:0x34 scope:global +React__14HUDColorOptionPCcUiP8FEObjectUiUi = .over:0x803C5798; // type:function size:0x4 scope:global +_._13CustomizeRims = .over:0x803C579C; // type:function size:0x30 scope:global +_._19CustomizePaintDatum = .over:0x803C57CC; // type:function size:0x7C scope:global +_._14CustomizePaint = .over:0x803C5848; // type:function size:0x140 scope:global +GetSelectedPart__14CustomizePaint = .over:0x803C5988; // type:function size:0xC scope:global +_._15CustomizeDecals = .over:0x803C5994; // type:function size:0x30 scope:global +_._16CustomizeNumbers = .over:0x803C59C4; // type:function size:0xEC scope:global +_._20CustomizePerformance = .over:0x803C5AB0; // type:function size:0x44 scope:global +TextureLoadedCallbackAccessor__24QRCarSelectBustedManagerUi = .over:0x803C5AF4; // type:function size:0x20 scope:global +_._9UIQRBrief = .over:0x803C5B14; // type:function size:0xB8 scope:global +_._12UIQRMainMenu = .over:0x803C5BCC; // type:function size:0x98 scope:global +_._9QuickPlay = .over:0x803C5C64; // type:function size:0x34 scope:global +React__9QuickPlayPCcUiP8FEObjectUiUi = .over:0x803C5C98; // type:function size:0x34 scope:global +_._10CustomRace = .over:0x803C5CCC; // type:function size:0x34 scope:global +React__10CustomRacePCcUiP8FEObjectUiUi = .over:0x803C5D00; // type:function size:0x34 scope:global +_._11SplitScreen = .over:0x803C5D34; // type:function size:0x34 scope:global +React__11SplitScreenPCcUiP8FEObjectUiUi = .over:0x803C5D68; // type:function size:0x34 scope:global +_._14UIQRModeSelect = .over:0x803C5D9C; // type:function size:0x98 scope:global +_._8MSOption = .over:0x803C5E34; // type:function size:0x34 scope:global +React__8MSOptionPCcUiP8FEObjectUiUi = .over:0x803C5E68; // type:function size:0x24 scope:global +_._16UIQRTrackOptions = .over:0x803C5E8C; // type:function size:0x8C scope:global +_._12NumOpponents = .over:0x803C5F18; // type:function size:0x34 scope:global +Act__12NumOpponentsPCcUi = .over:0x803C5F4C; // type:function size:0x114 scope:global +Draw__12NumOpponents = .over:0x803C6060; // type:function size:0x68 scope:global +_._7AISkill = .over:0x803C60C8; // type:function size:0x34 scope:global +Act__7AISkillPCcUi = .over:0x803C60FC; // type:function size:0xD0 scope:global +Draw__7AISkill = .over:0x803C61CC; // type:function size:0xA0 scope:global +_._7CatchUp = .over:0x803C626C; // type:function size:0x34 scope:global +Act__7CatchUpPCcUi = .over:0x803C62A0; // type:function size:0xB4 scope:global +Draw__7CatchUp = .over:0x803C6354; // type:function size:0x78 scope:global +_._12TrafficLevel = .over:0x803C63CC; // type:function size:0x34 scope:global +Act__12TrafficLevelPCcUi = .over:0x803C6400; // type:function size:0xD0 scope:global +Draw__12TrafficLevel = .over:0x803C64D0; // type:function size:0xB4 scope:global +_._7NumLaps = .over:0x803C6584; // type:function size:0x34 scope:global +Act__7NumLapsPCcUi = .over:0x803C65B8; // type:function size:0xD0 scope:global +Draw__7NumLaps = .over:0x803C6688; // type:function size:0x68 scope:global +_._14TrackDirection = .over:0x803C66F0; // type:function size:0x34 scope:global +Act__14TrackDirectionPCcUi = .over:0x803C6724; // type:function size:0xB8 scope:global +Draw__14TrackDirection = .over:0x803C67DC; // type:function size:0x78 scope:global +_._14ChallengeDatum = .over:0x803C6854; // type:function size:0x34 scope:global +_._8CarDatum = .over:0x803C6888; // type:function size:0x34 scope:global +_._13MyCarsManager = .over:0x803C68BC; // type:function size:0x104 scope:global +_._17FEMarkerSelection = .over:0x803C69C0; // type:function size:0x50 scope:global +_GLOBAL_.I.RenderLookAtPoint = .over:0x803C6A10; // type:function size:0x2C scope:local +_vt.17FEMarkerSelection = .over:0x803C7F80; // type:object size:0x28 scope:global +_vt.23DebugCarCustomizeScreen = .over:0x803C7FA8; // type:object size:0x28 scope:global +_vt.13MyCarsManager.13ArrayScroller = .over:0x803C7FD0; // type:object size:0x28 scope:global +_vt.13MyCarsManager = .over:0x803C7FF8; // type:object size:0x28 scope:global +_vt.8CarDatum = .over:0x803C8020; // type:object size:0x20 scope:global +_vt.19UIQRChallengeSeries.13ArrayScroller = .over:0x803C8040; // type:object size:0x28 scope:global +_vt.19UIQRChallengeSeries = .over:0x803C8068; // type:object size:0x28 scope:global +_vt.14ChallengeDatum = .over:0x803C8090; // type:object size:0x20 scope:global +_vt.14uiQRPressStart = .over:0x803C80B0; // type:object size:0x28 scope:global +_vt.8Showcase = .over:0x803C80D8; // type:object size:0x28 scope:global +_vt.14TrackDirection = .over:0x803C8100; // type:object size:0x88 scope:global +_vt.7NumLaps = .over:0x803C8188; // type:object size:0x88 scope:global +_vt.12TrafficLevel = .over:0x803C8210; // type:object size:0x88 scope:global +_vt.7CatchUp = .over:0x803C8298; // type:object size:0x88 scope:global +_vt.7AISkill = .over:0x803C8320; // type:object size:0x88 scope:global +_vt.12NumOpponents = .over:0x803C83A8; // type:object size:0x88 scope:global +_vt.16UIQRTrackOptions = .over:0x803C8430; // type:object size:0x30 scope:global +_vt.8MSOption = .over:0x803C8460; // type:object size:0x20 scope:global +_vt.14UIQRModeSelect = .over:0x803C8480; // type:object size:0x38 scope:global +_vt.11SplitScreen = .over:0x803C84B8; // type:object size:0x20 scope:global +_vt.10CustomRace = .over:0x803C84D8; // type:object size:0x20 scope:global +_vt.9QuickPlay = .over:0x803C84F8; // type:object size:0x20 scope:global +_vt.12UIQRMainMenu = .over:0x803C8518; // type:object size:0x38 scope:global +_vt.9UIQRBrief = .over:0x803C8550; // type:object size:0x28 scope:global +_vt.15UIQRTrackSelect = .over:0x803C8578; // type:object size:0x30 scope:global +_vt.13UIQRCarSelect = .over:0x803C85A8; // type:object size:0x28 scope:global +_vt.24QRCarSelectBustedManager = .over:0x803C85D0; // type:object size:0x18 scope:global +_vt.20CustomizePerformance = .over:0x803C85E8; // type:object size:0x50 scope:global +_vt.16CustomizeNumbers = .over:0x803C8638; // type:object size:0x28 scope:global +_vt.15CustomizeDecals = .over:0x803C8660; // type:object size:0x50 scope:global +_vt.14CustomizePaint = .over:0x803C86B0; // type:object size:0x50 scope:global +_vt.19CustomizePaintDatum = .over:0x803C8700; // type:object size:0x20 scope:global +_vt.13CustomizeRims = .over:0x803C8720; // type:object size:0x50 scope:global +_vt.17CustomizeHUDColor = .over:0x803C8770; // type:object size:0x50 scope:global +_vt.14HUDColorOption = .over:0x803C87C0; // type:object size:0x20 scope:global +_vt.14HUDLayerOption = .over:0x803C87E0; // type:object size:0x20 scope:global +_vt.16CustomizeSpoiler = .over:0x803C8800; // type:object size:0x50 scope:global +_vt.14CustomizeParts = .over:0x803C8850; // type:object size:0x50 scope:global +_vt.19CustomizationScreen = .over:0x803C88A0; // type:object size:0x50 scope:global +_vt.25CustomizationScreenHelper = .over:0x803C88F0; // type:object size:0x18 scope:global +_vt.19CustomizePartOption = .over:0x803C8908; // type:object size:0x20 scope:global +_vt.13CustomizeMain = .over:0x803C8928; // type:object size:0x38 scope:global +_vt.12CustomizeSub = .over:0x803C8960; // type:object size:0x38 scope:global +_vt.18SetStockPartOption = .over:0x803C8998; // type:object size:0x28 scope:global +_vt.23CustomizeCategoryScreen = .over:0x803C89C0; // type:object size:0x38 scope:global +_vt.19CustomizeMainOption = .over:0x803C89F8; // type:object size:0x28 scope:global +_vt.21CustomizeShoppingCart = .over:0x803C8A20; // type:object size:0x30 scope:global +_vt.18FEShoppingCartItem = .over:0x803C8A50; // type:object size:0x80 scope:global +_vt.14CustomizeMeter = .over:0x803C8AD0; // type:object size:0x18 scope:global +_vt.16ShoppingCartItem = .over:0x803C8AE8; // type:object size:0x18 scope:global +_vt.14SelectablePart = .over:0x803C8B00; // type:object size:0x18 scope:global +_vt.16GarageMainScreen = .over:0x803C8B18; // type:object size:0x28 scope:global +_overlay_end = .over:0x803C8B50; // type:object scope:global +__CTOR_LIST__ = .ctors:0x803C8B60; // type:object scope:global +__DTOR_LIST__ = .dtors:0x803C8C40; // type:object scope:global +base_pos.37555 = .rodata:0x803CA68C; // type:object size:0x30 scope:local +priority.37568 = .rodata:0x803CA6C4; // type:object size:0x14 scope:local +base_pos.37575 = .rodata:0x803CA6EC; // type:object size:0x3C scope:local +_vt.3Gps.11IAttachable = .rodata:0x803CAC20; // type:object size:0x48 scope:global +_vt.3Gps.Q23Sim9IActivity = .rodata:0x803CAC68; // type:object size:0x38 scope:global +_vt.3Gps.Q23Sim9ITaskable = .rodata:0x803CACA0; // type:object size:0x20 scope:global +_vt.3Gps = .rodata:0x803CACC0; // type:object size:0x20 scope:global +_vt.13HerdFormation = .rodata:0x803CACE0; // type:object size:0x38 scope:global +_vt.12PitFormation = .rodata:0x803CAD18; // type:object size:0x38 scope:global +_vt.22StaggerFollowFormation = .rodata:0x803CAD50; // type:object size:0x38 scope:global +_vt.15FollowFormation = .rodata:0x803CAD88; // type:object size:0x38 scope:global +_vt.21RollingBlockFormation = .rodata:0x803CADC0; // type:object size:0x38 scope:global +_vt.14BoxInFormation = .rodata:0x803CADF8; // type:object size:0x38 scope:global +_vt.16PursuitFormation = .rodata:0x803CAE30; // type:object size:0x38 scope:global +_vt.11AIGoalRacer = .rodata:0x803CAE68; // type:object size:0x30 scope:global +_vt.14AIGoalHeliExit = .rodata:0x803CAE98; // type:object size:0x30 scope:global +_vt.17AIGoalHeliPursuit = .rodata:0x803CAEC8; // type:object size:0x30 scope:global +_vt.17AIGoalFleePursuit = .rodata:0x803CAEF8; // type:object size:0x30 scope:global +_vt.21AIGoalStaticRoadBlock = .rodata:0x803CAF28; // type:object size:0x30 scope:global +_vt.15AIGoalHeadOnRam = .rodata:0x803CAF58; // type:object size:0x30 scope:global +_vt.9AIGoalPit = .rodata:0x803CAF88; // type:object size:0x30 scope:global +_vt.9AIGoalRam = .rodata:0x803CAFB8; // type:object size:0x30 scope:global +_vt.15AIGoalStopShort = .rodata:0x803CAFE8; // type:object size:0x30 scope:global +_vt.13AIGoalPursuit = .rodata:0x803CB018; // type:object size:0x30 scope:global +_vt.12AIGoalPatrol = .rodata:0x803CB048; // type:object size:0x30 scope:global +_vt.13AIGoalTraffic = .rodata:0x803CB078; // type:object size:0x30 scope:global +_vt.10AIGoalNone = .rodata:0x803CB0A8; // type:object size:0x30 scope:global +_vt.19AIVehicleHelicopter.13IAIHelicopter = .rodata:0x803CB0D8; // type:object size:0xA0 scope:global +_vt.19AIVehicleHelicopter.11AIAvoidable = .rodata:0x803CB178; // type:object size:0x20 scope:global +_vt.19AIVehicleHelicopter.10IVehicleAI = .rodata:0x803CB198; // type:object size:0x1C0 scope:global +_vt.19AIVehicleHelicopter.Q23Sim9ITaskable = .rodata:0x803CB358; // type:object size:0x20 scope:global +_vt.19AIVehicleHelicopter.10IPursuitAI = .rodata:0x803CB378; // type:object size:0x130 scope:global +_vt.19AIVehicleHelicopter = .rodata:0x803CB4A8; // type:object size:0xC0 scope:global +_vt.16AIVehicleTraffic.11AIAvoidable = .rodata:0x803CB568; // type:object size:0x20 scope:global +_vt.16AIVehicleTraffic.10IVehicleAI = .rodata:0x803CB588; // type:object size:0x1C0 scope:global +_vt.16AIVehicleTraffic.Q23Sim9ITaskable = .rodata:0x803CB748; // type:object size:0x20 scope:global +_vt.16AIVehicleTraffic.10ITrafficAI = .rodata:0x803CB768; // type:object size:0x20 scope:global +_vt.16AIVehicleTraffic = .rodata:0x803CB788; // type:object size:0xB0 scope:global +_vt.32AdaptivePIDControllerComplicated = .rodata:0x803CB838; // type:object size:0x20 scope:global +_vt.27AdaptivePIDControllerSimple = .rodata:0x803CB858; // type:object size:0x20 scope:global +_vt.25AdaptivePIDControllerBase = .rodata:0x803CB878; // type:object size:0x20 scope:global +_vt.Q23UTLt10FastVector2ZUii16 = .rodata:0x803CB8A8; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZUii16 = .rodata:0x803CB8E8; // type:object size:0x40 scope:global +_vt.14AIVehicleHuman.8IHumanAI = .rodata:0x803CB928; // type:object size:0x60 scope:global +_vt.14AIVehicleHuman.6IRacer = .rodata:0x803CB988; // type:object size:0x30 scope:global +_vt.14AIVehicleHuman.8ICheater = .rodata:0x803CB9B8; // type:object size:0x20 scope:global +_vt.14AIVehicleHuman.6ICause = .rodata:0x803CB9D8; // type:object size:0x28 scope:global +_vt.14AIVehicleHuman.12IPerpetrator = .rodata:0x803CBA00; // type:object size:0xD0 scope:global +_vt.14AIVehicleHuman.11AIAvoidable = .rodata:0x803CBAD0; // type:object size:0x20 scope:global +_vt.14AIVehicleHuman.10IVehicleAI = .rodata:0x803CBAF0; // type:object size:0x1C0 scope:global +_vt.14AIVehicleHuman.Q23Sim9ITaskable = .rodata:0x803CBCB0; // type:object size:0x20 scope:global +_vt.14AIVehicleHuman = .rodata:0x803CBCD0; // type:object size:0xB0 scope:global +_vt.14AIVehicleEmpty.11AIAvoidable = .rodata:0x803CBD80; // type:object size:0x20 scope:global +_vt.14AIVehicleEmpty.10IVehicleAI = .rodata:0x803CBDA0; // type:object size:0x1C0 scope:global +_vt.14AIVehicleEmpty.Q23Sim9ITaskable = .rodata:0x803CBF60; // type:object size:0x20 scope:global +_vt.14AIVehicleEmpty = .rodata:0x803CBF80; // type:object size:0xB0 scope:global +_vt.12AIActionRace.Q23Sim9ITaskable = .rodata:0x803CC030; // type:object size:0x20 scope:global +_vt.12AIActionRace = .rodata:0x803CC050; // type:object size:0x60 scope:global +_vt.23AIActionStaticRoadBlock.Q23Sim9ITaskable = .rodata:0x803CC0B0; // type:object size:0x20 scope:global +_vt.23AIActionStaticRoadBlock = .rodata:0x803CC0D0; // type:object size:0x60 scope:global +_vt.17AIActionJackKnife.Q23Sim9ITaskable = .rodata:0x803CC130; // type:object size:0x20 scope:global +_vt.17AIActionJackKnife = .rodata:0x803CC150; // type:object size:0x58 scope:global +_vt.16AIActionAirborne.Q23Sim9ITaskable = .rodata:0x803CC1A8; // type:object size:0x20 scope:global +_vt.16AIActionAirborne = .rodata:0x803CC1C8; // type:object size:0x58 scope:global +_vt.14AIActionStrafe.Q23Sim9ITaskable = .rodata:0x803CC220; // type:object size:0x20 scope:global +_vt.14AIActionStrafe = .rodata:0x803CC240; // type:object size:0x58 scope:global +_vt.14AIActionSpline.Q23Sim9ITaskable = .rodata:0x803CC298; // type:object size:0x20 scope:global +_vt.14AIActionSpline = .rodata:0x803CC2B8; // type:object size:0x58 scope:global +_vt.17AIActionStopShort.Q23Sim9ITaskable = .rodata:0x803CC310; // type:object size:0x20 scope:global +_vt.17AIActionStopShort = .rodata:0x803CC330; // type:object size:0x58 scope:global +_vt.11AIActionRam.Q23Sim9ITaskable = .rodata:0x803CC388; // type:object size:0x20 scope:global +_vt.11AIActionRam = .rodata:0x803CC3A8; // type:object size:0x60 scope:global +_vt.17AIActionHeadOnRam.Q23Sim9ITaskable = .rodata:0x803CC408; // type:object size:0x20 scope:global +_vt.17AIActionHeadOnRam = .rodata:0x803CC428; // type:object size:0x60 scope:global +_vt.16AIActionHeliExit.Q23Sim9ITaskable = .rodata:0x803CC488; // type:object size:0x20 scope:global +_vt.16AIActionHeliExit = .rodata:0x803CC4A8; // type:object size:0x60 scope:global +_vt.19AIActionHeliPursuit.Q33Sim9Collision9IListener = .rodata:0x803CC508; // type:object size:0x18 scope:global +_vt.19AIActionHeliPursuit.Q23Sim9ITaskable = .rodata:0x803CC520; // type:object size:0x20 scope:global +_vt.19AIActionHeliPursuit = .rodata:0x803CC540; // type:object size:0x60 scope:global +_vt.22AIActionPursuitOffRoad.Q23Sim9ITaskable = .rodata:0x803CC5A0; // type:object size:0x20 scope:global +_vt.22AIActionPursuitOffRoad = .rodata:0x803CC5C0; // type:object size:0x60 scope:global +_vt.15AIActionTraffic.Q33Sim9Collision9IListener = .rodata:0x803CC620; // type:object size:0x18 scope:global +_vt.15AIActionTraffic.Q23Sim9ITaskable = .rodata:0x803CC638; // type:object size:0x20 scope:global +_vt.15AIActionTraffic = .rodata:0x803CC658; // type:object size:0x60 scope:global +_vt.18AIActionGetUnstuck.Q23Sim9ITaskable = .rodata:0x803CC6B8; // type:object size:0x20 scope:global +_vt.18AIActionGetUnstuck = .rodata:0x803CC6D8; // type:object size:0x58 scope:global +_vt.18AIActionTooDamaged.Q23Sim9ITaskable = .rodata:0x803CC730; // type:object size:0x20 scope:global +_vt.18AIActionTooDamaged = .rodata:0x803CC750; // type:object size:0x60 scope:global +_vt.12AIActionNone.Q23Sim9ITaskable = .rodata:0x803CC7B0; // type:object size:0x20 scope:global +_vt.12AIActionNone = .rodata:0x803CC7D0; // type:object size:0x58 scope:global +_vt.16AvoidableManager.11IAttachable = .rodata:0x803CC828; // type:object size:0x48 scope:global +_vt.16AvoidableManager.Q23Sim9IActivity = .rodata:0x803CC870; // type:object size:0x38 scope:global +_vt.16AvoidableManager.Q23Sim9ITaskable = .rodata:0x803CC8A8; // type:object size:0x20 scope:global +_vt.16AvoidableManager = .rodata:0x803CC8C8; // type:object size:0x28 scope:global +_vt.12AICopManager.13IVehicleCache = .rodata:0x803CC8F0; // type:object size:0x30 scope:global +_vt.12AICopManager.7ICopMgr = .rodata:0x803CC920; // type:object size:0x88 scope:global +_vt.12AICopManager.14AISpawnManager = .rodata:0x803CC9A8; // type:object size:0x18 scope:global +_vt.12AICopManager.11IAttachable = .rodata:0x803CC9C0; // type:object size:0x48 scope:global +_vt.12AICopManager.Q23Sim9IActivity = .rodata:0x803CCA08; // type:object size:0x38 scope:global +_vt.12AICopManager.Q23Sim9ITaskable = .rodata:0x803CCA40; // type:object size:0x20 scope:global +_vt.12AICopManager = .rodata:0x803CCA60; // type:object size:0x28 scope:global +_vt.11AIRoadBlock.10IRoadBlock = .rodata:0x803CCA88; // type:object size:0xC8 scope:global +_vt.11AIRoadBlock.11IAttachable = .rodata:0x803CCB50; // type:object size:0x48 scope:global +_vt.11AIRoadBlock.Q23Sim9IActivity = .rodata:0x803CCB98; // type:object size:0x38 scope:global +_vt.11AIRoadBlock.Q23Sim9ITaskable = .rodata:0x803CCBD0; // type:object size:0x20 scope:global +_vt.11AIRoadBlock = .rodata:0x803CCBF0; // type:object size:0x20 scope:global +_vt.8AITarget = .rodata:0x803CCC10; // type:object size:0x18 scope:global +_vt.9AIPursuit.8IPursuit = .rodata:0x803CCC28; // type:object size:0x298 scope:global +_vt.9AIPursuit.11IAttachable = .rodata:0x803CCEC0; // type:object size:0x48 scope:global +_vt.9AIPursuit.Q23Sim9IActivity = .rodata:0x803CCF08; // type:object size:0x38 scope:global +_vt.9AIPursuit.Q23Sim9ITaskable = .rodata:0x803CCF40; // type:object size:0x20 scope:global +_vt.9AIPursuit = .rodata:0x803CCF60; // type:object size:0x28 scope:global +_vt.15AIVehicleCopCar.11AIAvoidable = .rodata:0x803CCF88; // type:object size:0x20 scope:global +_vt.15AIVehicleCopCar.Q23Sim9ITaskable = .rodata:0x803CCFA8; // type:object size:0x20 scope:global +_vt.15AIVehicleCopCar.10IVehicleAI = .rodata:0x803CCFC8; // type:object size:0x1C0 scope:global +_vt.15AIVehicleCopCar.10IPursuitAI = .rodata:0x803CD188; // type:object size:0x130 scope:global +_vt.15AIVehicleCopCar = .rodata:0x803CD2B8; // type:object size:0xB8 scope:global +_vt.16AIVehiclePursuit.11AIAvoidable = .rodata:0x803CD370; // type:object size:0x20 scope:global +_vt.16AIVehiclePursuit.10IVehicleAI = .rodata:0x803CD390; // type:object size:0x1C0 scope:global +_vt.16AIVehiclePursuit.Q23Sim9ITaskable = .rodata:0x803CD550; // type:object size:0x20 scope:global +_vt.16AIVehiclePursuit.10IPursuitAI = .rodata:0x803CD570; // type:object size:0x130 scope:global +_vt.16AIVehiclePursuit = .rodata:0x803CD6A0; // type:object size:0xB8 scope:global +_vt.16AIVehicleRacecar.8ICheater = .rodata:0x803CD758; // type:object size:0x20 scope:global +_vt.16AIVehicleRacecar.6ICause = .rodata:0x803CD778; // type:object size:0x28 scope:global +_vt.16AIVehicleRacecar.12IPerpetrator = .rodata:0x803CD7A0; // type:object size:0xD0 scope:global +_vt.16AIVehicleRacecar.11AIAvoidable = .rodata:0x803CD870; // type:object size:0x20 scope:global +_vt.16AIVehicleRacecar.10IVehicleAI = .rodata:0x803CD890; // type:object size:0x1C0 scope:global +_vt.16AIVehicleRacecar.Q23Sim9ITaskable = .rodata:0x803CDA50; // type:object size:0x20 scope:global +_vt.16AIVehicleRacecar = .rodata:0x803CDA70; // type:object size:0xB0 scope:global +_vt.16AIVehicleRacecar.6IRacer = .rodata:0x803CDB20; // type:object size:0x30 scope:global +_vt.13AIPerpVehicle.11AIAvoidable = .rodata:0x803CDB50; // type:object size:0x20 scope:global +_vt.13AIPerpVehicle.Q23Sim9ITaskable = .rodata:0x803CDB70; // type:object size:0x20 scope:global +_vt.13AIPerpVehicle.8ICheater = .rodata:0x803CDB90; // type:object size:0x20 scope:global +_vt.13AIPerpVehicle.10IVehicleAI = .rodata:0x803CDBB0; // type:object size:0x1C0 scope:global +_vt.13AIPerpVehicle.6ICause = .rodata:0x803CDD70; // type:object size:0x28 scope:global +_vt.13AIPerpVehicle.12IPerpetrator = .rodata:0x803CDD98; // type:object size:0xD0 scope:global +_vt.13AIPerpVehicle = .rodata:0x803CDE68; // type:object size:0xB0 scope:global +_vt.12AIVehiclePid.11AIAvoidable = .rodata:0x803CDF18; // type:object size:0x20 scope:global +_vt.12AIVehiclePid.10IVehicleAI = .rodata:0x803CDF38; // type:object size:0x1C0 scope:global +_vt.12AIVehiclePid.Q23Sim9ITaskable = .rodata:0x803CE0F8; // type:object size:0x20 scope:global +_vt.12AIVehiclePid = .rodata:0x803CE118; // type:object size:0xB0 scope:global +_vt.9AIVehicle.Q23Sim9ITaskable = .rodata:0x803CE1C8; // type:object size:0x20 scope:global +_vt.9AIVehicle.11AIAvoidable = .rodata:0x803CE1E8; // type:object size:0x20 scope:global +_vt.9AIVehicle.10IVehicleAI = .rodata:0x803CE208; // type:object size:0x1C0 scope:global +_vt.9AIVehicle = .rodata:0x803CE3C8; // type:object size:0xB0 scope:global +_vt.6AIGoal = .rodata:0x803CE478; // type:object size:0x30 scope:global +_vt.8AIAction.Q23Sim9ITaskable = .rodata:0x803CE4A8; // type:object size:0x20 scope:global +_vt.8AIAction = .rodata:0x803CE4C8; // type:object size:0x58 scope:global +_vt.6ICause = .rodata:0x803CE520; // type:object size:0x28 scope:global +_vt.11PartChecker = .rodata:0x803CE548; // type:object size:0x20 scope:global +_vt.16AITrafficManager.13IVehicleCache = .rodata:0x803CE568; // type:object size:0x30 scope:global +_vt.16AITrafficManager.11ITrafficMgr = .rodata:0x803CE598; // type:object size:0x20 scope:global +_vt.16AITrafficManager.11IAttachable = .rodata:0x803CE5B8; // type:object size:0x48 scope:global +_vt.16AITrafficManager.Q23Sim9IActivity = .rodata:0x803CE600; // type:object size:0x38 scope:global +_vt.16AITrafficManager.Q23Sim9ITaskable = .rodata:0x803CE638; // type:object size:0x20 scope:global +_vt.16AITrafficManager = .rodata:0x803CE658; // type:object size:0x28 scope:global +_vt.7ICopMgr = .rodata:0x803CE680; // type:object size:0x88 scope:global +_vt.19WRoadNavWithCookies = .rodata:0x803CE708; // type:object size:0x18 scope:global +_vt.Q43UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10_4List = .rodata:0x803CE720; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP8IVehiclei10i16 = .rodata:0x803CE760; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP8IVehiclei16 = .rodata:0x803CE7A0; // type:object size:0x40 scope:global +_vt.13IVehicleCache = .rodata:0x803CE7E0; // type:object size:0x30 scope:global +_vt.8Behavior.Q23Sim9ITaskable = .rodata:0x803CE810; // type:object size:0x20 scope:global +_vt.8Behavior = .rodata:0x803CE830; // type:object size:0x60 scope:global +_vt.14AISpawnManager = .rodata:0x803CE890; // type:object size:0x18 scope:global +_vt.11ITrafficMgr = .rodata:0x803CE8A8; // type:object size:0x20 scope:global +_vt.10IRoadBlock = .rodata:0x803CE8C8; // type:object size:0xC8 scope:global +_vt.8IPursuit = .rodata:0x803CE990; // type:object size:0x298 scope:global +_vt.12IPerpetrator = .rodata:0x803CEC28; // type:object size:0xD0 scope:global +_vt.10IVehicleAI = .rodata:0x803CECF8; // type:object size:0x1C0 scope:global +_vt.11AIAvoidable = .rodata:0x803CEEB8; // type:object size:0x20 scope:global +_vt.Q33UTL3COM8IUnknown = .rodata:0x803CEED8; // type:object size:0x18 scope:global +Tweak_TrafficOffScreenDistance = .rodata:0x803CF1D8; // type:object size:0x2C scope:local +Tweak_TrafficOffScreenTime = .rodata:0x803CF204; // type:object size:0x2C scope:local +Tweak_TrafficDensitySpawnRates = .rodata:0x803CF230; // type:object size:0x2C scope:local +Tweak_OffWorldAccel = .rodata:0x803CF25C; // type:object size:0x8 scope:local +Tweak_OffWorldSpeed = .rodata:0x803CF264; // type:object size:0x8 scope:local +Tweak_AdaptiveSkillUp = .rodata:0x803CF26C; // type:object size:0xC scope:local +Tweak_AdaptiveSkillDown = .rodata:0x803CF278; // type:object size:0xC scope:local +Tweak_QuickRaceSkills = .rodata:0x803CF284; // type:object size:0xC scope:local +Tweak_QuickRaceSkillsNoGlue = .rodata:0x803CF290; // type:object size:0xC scope:local +Tweak_CatchupGlueSkill = .rodata:0x803CF29C; // type:object size:0xC scope:local +Tweak_SlowDownGlueSkill = .rodata:0x803CF2A8; // type:object size:0xC scope:local +Tweak_CatchupCheatSkill = .rodata:0x803CF2B4; // type:object size:0xC scope:local +_vt.Q23UTLt11FixedVector3ZP8ISimablei10i16 = .rodata:0x803CF2C0; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP8ISimablei16 = .rodata:0x803CF308; // type:object size:0x40 scope:global +_vt.25GenericNISControlScenario = .rodata:0x803D0220; // type:object size:0x20 scope:global +_vt.15CAnimWorldScene = .rodata:0x803D0240; // type:object size:0x18 scope:global +_vt.20CWorldAnimEntityTree = .rodata:0x803D0258; // type:object size:0x18 scope:global +_vt.23WorldAnimEntityTreeInfo = .rodata:0x803D0270; // type:object size:0x18 scope:global +_vt.16CWorldAnimEntity = .rodata:0x803D0288; // type:object size:0x60 scope:global +_vt.10CAnimScene = .rodata:0x803D02E8; // type:object size:0x80 scope:global +_vt.14CAnimSceneData = .rodata:0x803D0368; // type:object size:0x18 scope:global +_vt.15CPropAnimEntity = .rodata:0x803D0380; // type:object size:0x60 scope:global +_vt.25CBasicCharacterAnimEntity = .rodata:0x803D03E0; // type:object size:0x60 scope:global +_vt.11IAnimEntity = .rodata:0x803D0440; // type:object size:0x58 scope:global +_vt.11CAnimPlayer = .rodata:0x803D0498; // type:object size:0x18 scope:global +_vt.19NISListenerActivity.12INISLISTENER = .rodata:0x803D04B0; // type:object size:0x20 scope:global +_vt.19NISListenerActivity.11IAttachable = .rodata:0x803D04D0; // type:object size:0x48 scope:global +_vt.19NISListenerActivity.Q23Sim9IActivity = .rodata:0x803D0518; // type:object size:0x38 scope:global +_vt.19NISListenerActivity.Q23Sim9ITaskable = .rodata:0x803D0550; // type:object size:0x20 scope:global +_vt.19NISListenerActivity = .rodata:0x803D0570; // type:object size:0x20 scope:global +_vt.12CAnimChooser = .rodata:0x803D0590; // type:object size:0x18 scope:global +_vt.12CNFSAnimBank = .rodata:0x803D05A8; // type:object size:0x18 scope:global +_vt.9CAnimBank = .rodata:0x803D05C0; // type:object size:0x18 scope:global +_vt.Q29EAGL4Anim17FnDefaultAnimBank = .rodata:0x803D05D8; // type:object size:0x50 scope:global +_vt.13CAnimProperty = .rodata:0x803D0628; // type:object size:0x18 scope:global +MarkerNameList = .rodata:0x803D0710; // type:object size:0x24C scope:local +_vt.16IControlScenario = .rodata:0x803D0960; // type:object size:0x20 scope:global +_vt.Q26Attrib22CollectionExportPolicy = .rodata:0x803D0D00; // type:object size:0x30 scope:global +_vt.Q26Attrib17ClassExportPolicy = .rodata:0x803D0D30; // type:object size:0x30 scope:global +_vt.Q26Attrib20DatabaseExportPolicy = .rodata:0x803D0D60; // type:object size:0x30 scope:global +_vt.Q26Attrib8Database = .rodata:0x803D0D90; // type:object size:0x18 scope:global +_vt.Q26Attrib15DatabasePrivate = .rodata:0x803D0E00; // type:object size:0x18 scope:global +_vt.16bMemoryAllocator = .rodata:0x803D1450; // type:object size:0x38 scope:global +bCrcTable = .rodata:0x803D1494; // type:object size:0x400 scope:local +statetable = .rodata:0x803D1894; // type:object size:0x5B scope:local +_vt.Q32EA9Allocator10IAllocator = .rodata:0x803D18F0; // type:object size:0x38 scope:global +_vt.t8tAverage1Z8bVector3 = .rodata:0x803D2D80; // type:object size:0x20 scope:global +_vt.21CDActionDebugWatchCar.14ITrafficCenter = .rodata:0x803D2DA0; // type:object size:0x20 scope:global +_vt.21CDActionDebugWatchCar.14IDebugWatchCar = .rodata:0x803D2DC0; // type:object size:0x20 scope:global +_vt.21CDActionDebugWatchCar = .rodata:0x803D2DE0; // type:object size:0x48 scope:global +_vt.11CDActionIce.11IAttachable = .rodata:0x803D2E28; // type:object size:0x48 scope:global +_vt.11CDActionIce = .rodata:0x803D2E70; // type:object size:0x48 scope:global +_vt.13CDActionDebug.14ITrafficCenter = .rodata:0x803D2EB8; // type:object size:0x20 scope:global +_vt.13CDActionDebug = .rodata:0x803D2ED8; // type:object size:0x48 scope:global +_vt.16CDActionShowcase.11IAttachable = .rodata:0x803D2F20; // type:object size:0x48 scope:global +_vt.16CDActionShowcase = .rodata:0x803D2F68; // type:object size:0x48 scope:global +_vt.16CDActionTrackCop.14ITrafficCenter = .rodata:0x803D2FB0; // type:object size:0x20 scope:global +_vt.16CDActionTrackCop.11IAttachable = .rodata:0x803D2FD0; // type:object size:0x48 scope:global +_vt.16CDActionTrackCop = .rodata:0x803D3018; // type:object size:0x48 scope:global +_vt.16CDActionTrackCar.14ITrafficCenter = .rodata:0x803D3060; // type:object size:0x20 scope:global +_vt.16CDActionTrackCar.11IAttachable = .rodata:0x803D3080; // type:object size:0x48 scope:global +_vt.16CDActionTrackCar = .rodata:0x803D30C8; // type:object size:0x48 scope:global +_vt.13CDActionDrive.Q33Sim9Collision9IListener = .rodata:0x803D3110; // type:object size:0x18 scope:global +_vt.13CDActionDrive.14ITrafficCenter = .rodata:0x803D3128; // type:object size:0x20 scope:global +_vt.13CDActionDrive.11IAttachable = .rodata:0x803D3148; // type:object size:0x48 scope:global +_vt.13CDActionDrive = .rodata:0x803D3190; // type:object size:0x48 scope:global +_vt.14ITrafficCenter = .rodata:0x803D31D8; // type:object size:0x20 scope:global +_vt.8ICEMover = .rodata:0x803D31F8; // type:object size:0xA0 scope:global +_vt.Q33Sim9Collision9IListener = .rodata:0x803D3298; // type:object size:0x18 scope:global +_vt.11IAttachable = .rodata:0x803D32B0; // type:object size:0x48 scope:global +_vt.19ShowcaseCameraMover = .rodata:0x803D32F8; // type:object size:0xA0 scope:global +_vt.16CubicCameraMover = .rodata:0x803D3398; // type:object size:0xA0 scope:global +_vt.20SelectCarCameraMover = .rodata:0x803D3438; // type:object size:0xA0 scope:global +_vt.19TrackCopCameraMover = .rodata:0x803D34D8; // type:object size:0xA0 scope:global +_vt.19TrackCarCameraMover = .rodata:0x803D3578; // type:object size:0xA0 scope:global +_vt.25RearViewMirrorCameraMover = .rodata:0x803D3618; // type:object size:0xA0 scope:global +_vt.21DebugWorldCameraMover = .rodata:0x803D36B8; // type:object size:0xA0 scope:global +_vt.11CameraMover = .rodata:0x803D3758; // type:object size:0xA0 scope:global +_vt.14IDebugWatchCar = .rodata:0x803D37F8; // type:object size:0x20 scope:global +_vt.Q28CameraAI6Action = .rodata:0x803D3818; // type:object size:0x48 scope:global +_vt.Q28CameraAI8Director = .rodata:0x803D3860; // type:object size:0x18 scope:global +_vt.Q43UTL11Collectionst8Listable2ZQ28CameraAI8Directori2_4List = .rodata:0x803D3878; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZPQ28CameraAI8Directori2i16 = .rodata:0x803D38B8; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZPQ28CameraAI8Directori16 = .rodata:0x803D38F8; // type:object size:0x40 scope:global +RemoteCaffeinating = .rodata:0x803D3AE4; // type:object size:0x4 scope:local +Tweak_JumpCamHighestAirTresh = .rodata:0x803D3AEC; // type:object size:0x8 scope:local +Tweak_JumpCamLongestAirTresh = .rodata:0x803D3AF4; // type:object size:0x8 scope:local +Tweak_JumpCamPositionSpeedMult = .rodata:0x803D3AFC; // type:object size:0x10 scope:local +TrackCarIsoZoomDistance = .rodata:0x803D3B0C; // type:object size:0xC scope:local +TrackCarLookOffsetX = .rodata:0x803D3B18; // type:object size:0xC scope:local +TrackCarLookOffsetY = .rodata:0x803D3B24; // type:object size:0xC scope:local +TrackCarLookOffsetZ = .rodata:0x803D3B30; // type:object size:0xC scope:local +TrackCarEyeOffsetZ = .rodata:0x803D3B3C; // type:object size:0x10 scope:local +_vt.11AverageBase = .rodata:0x803D3B50; // type:object size:0x20 scope:global +_vt.Q43UTL11Collectionst8Listable2Z14IDebugWatchCari2_4List = .rodata:0x803D3B70; // type:object size:0x40 scope:global +_vt.Q33UTL11Collectionst8_Storage2ZPQ28CameraAI8Directori2 = .rodata:0x803D3BB0; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP14IDebugWatchCari2i16 = .rodata:0x803D3BF8; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP14IDebugWatchCari16 = .rodata:0x803D3C38; // type:object size:0x40 scope:global +algos.3467 = .rodata:0x803D3F50; // type:object size:0x24 scope:local +_vt.Q38Dynamics12Articulation5Joint = .rodata:0x803D3F80; // type:object size:0x18 scope:global +_vt.Q38Dynamics12Articulation10Constraint = .rodata:0x803D3F98; // type:object size:0x18 scope:global +_vt.Q38Dynamics12Articulation5Lever = .rodata:0x803D3FB0; // type:object size:0x18 scope:global +_Q25EAGL413DynamicLoader.AnimBankType = .rodata:0x803D428C; // type:object size:0xE scope:global +_Q25EAGL413DynamicLoader.SkeletonType = .rodata:0x803D42A4; // type:object size:0x9 scope:global +_vt.Q29EAGL4Anim14FnRawStateChan = .rodata:0x803D49F8; // type:object size:0xA8 scope:global +_vt.Q29EAGL4Anim7FnCycle = .rodata:0x803D4AA0; // type:object size:0x90 scope:global +_vt.Q29EAGL4Anim12FnPoseMirror = .rodata:0x803D4B30; // type:object size:0x90 scope:global +_vt.Q29EAGL4Anim7FnGraft = .rodata:0x803D4BC0; // type:object size:0x90 scope:global +_vt.Q29EAGL4Anim18FnRawLinearChannel = .rodata:0x803D4C50; // type:object size:0xA8 scope:global +_vt.Q29EAGL4Anim13FnTurnBlender = .rodata:0x803D4CF8; // type:object size:0x90 scope:global +_vt.Q29EAGL4Anim12FnRunBlender = .rodata:0x803D4D88; // type:object size:0x90 scope:global +_vt.Q29EAGL4Anim11FnPhaseChan = .rodata:0x803D4E18; // type:object size:0xA8 scope:global +_vt.Q29EAGL4Anim17FnRawEventChannel = .rodata:0x803D4EC0; // type:object size:0xA8 scope:global +_vt.Q29EAGL4Anim13FnPoseBlender = .rodata:0x803D4F68; // type:object size:0x90 scope:global +_vt.Q29EAGL4Anim16FnRawPoseChannel = .rodata:0x803D4FF8; // type:object size:0xA8 scope:global +_vt.Q29EAGL4Anim14FnEventBlender = .rodata:0x803D50A0; // type:object size:0x90 scope:global +_vt.Q29EAGL4Anim14FnDeltaSingleQ = .rodata:0x803D5130; // type:object size:0xB0 scope:global +_vt.Q29EAGL4Anim12FnDeltaQFast = .rodata:0x803D51E0; // type:object size:0xA8 scope:global +_vt.Q29EAGL4Anim8FnDeltaQ = .rodata:0x803D5288; // type:object size:0xB0 scope:global +_vt.Q29EAGL4Anim9FnDeltaF3 = .rodata:0x803D5338; // type:object size:0xA8 scope:global +_vt.Q29EAGL4Anim9FnDeltaF1 = .rodata:0x803D53E0; // type:object size:0xA8 scope:global +_vt.Q29EAGL4Anim18FnCsisEventChannel = .rodata:0x803D5488; // type:object size:0xA8 scope:global +_vt.Q29EAGL4Anim13FnKeyQuatChan = .rodata:0x803D5530; // type:object size:0xA8 scope:global +_vt.Q29EAGL4Anim13FnKeyLerpChan = .rodata:0x803D55D8; // type:object size:0xA8 scope:global +_vt.Q29EAGL4Anim14FnKeyDeltaChan = .rodata:0x803D5680; // type:object size:0xA8 scope:global +_vt.Q29EAGL4Anim15FnDeltaQuatChan = .rodata:0x803D5728; // type:object size:0xA8 scope:global +_vt.Q29EAGL4Anim15FnDeltaLerpChan = .rodata:0x803D57D0; // type:object size:0xA8 scope:global +_vt.Q29EAGL4Anim11FnDeltaChan = .rodata:0x803D5878; // type:object size:0xA8 scope:global +_vt.Q29EAGL4Anim10FnPoseAnim = .rodata:0x803D5920; // type:object size:0xA8 scope:global +_vt.Q29EAGL4Anim13FnStatelessF3 = .rodata:0x803D59C8; // type:object size:0xA8 scope:global +_vt.Q29EAGL4Anim12FnStatelessQ = .rodata:0x803D5A70; // type:object size:0xA8 scope:global +_vt.Q29EAGL4Anim17FnCompoundChannel = .rodata:0x803D5B18; // type:object size:0xA8 scope:global +_vt.Q29EAGL4Anim17MemoryPoolManager = .rodata:0x803D5BC0; // type:object size:0x80 scope:global +_vt.Q29EAGL4Anim15FnAnimMemoryMap = .rodata:0x803D5C40; // type:object size:0xA8 scope:global +_vt.Q29EAGL4Anim11FnAnimSuper = .rodata:0x803D5CE8; // type:object size:0x18 scope:global +gRuntimeAllocType = .rodata:0x803D5E28; // type:object size:0x10 scope:local +_14EAXAemsManager.m_SlotSizes = .rodata:0x803D6B78; // type:object size:0x20 scope:global +_vt.17SFXCTL_Helicopter = .rodata:0x803D7838; // type:object size:0x78 scope:global +_vt.16SFXCTL_3DHeliPos = .rodata:0x803D78B0; // type:object size:0x98 scope:global +_vt.18SFXCTL_3DScrapePos = .rodata:0x803D7948; // type:object size:0x98 scope:global +_vt.15SFXCTL_3DColPos = .rodata:0x803D79E0; // type:object size:0x98 scope:global +_vt.16SFXCTL_GameState = .rodata:0x803D7A78; // type:object size:0x78 scope:global +_vt.16SFXCTL_MasterVol = .rodata:0x803D7AF0; // type:object size:0x78 scope:global +_vt.13SFXCTL_Tunnel = .rodata:0x803D7B68; // type:object size:0x78 scope:global +_vt.18SFXCTL_HybridMotor = .rodata:0x803D7BE0; // type:object size:0x78 scope:global +_vt.17SFXCTL_AccelTrans = .rodata:0x803D7C58; // type:object size:0x78 scope:global +_vt.13SFXCTL_Engine = .rodata:0x803D7CD0; // type:object size:0xC0 scope:global +_vt.15SFXCTL_Shifting = .rodata:0x803D7D90; // type:object size:0x78 scope:global +_vt.12SFXCTL_Wheel = .rodata:0x803D7E08; // type:object size:0x78 scope:global +_vt.13HeliSoundConn = .rodata:0x803D7E80; // type:object size:0x30 scope:global +_vt.19SFXCTL_TruckPhysics = .rodata:0x803D7EB0; // type:object size:0x80 scope:global +_vt.16SFXCTL_AIPhysics = .rodata:0x803D7F30; // type:object size:0x80 scope:global +_vt.14SFXCTL_Physics = .rodata:0x803D7FB0; // type:object size:0x80 scope:global +_vt.Q29SoundConn16Pkt_Heli_Service = .rodata:0x803D8030; // type:object size:0x40 scope:global +_vt.Q29SoundConn15Pkt_Car_Service = .rodata:0x803D8070; // type:object size:0x40 scope:global +_vt.12CarSoundConn = .rodata:0x803D80B0; // type:object size:0x30 scope:global +_vt.17SFXCTL_Pathfinder = .rodata:0x803D80E0; // type:object size:0x78 scope:global +_vt.14NIS_RevManager = .rodata:0x803D8158; // type:object size:0x18 scope:global +_vt.15SFXCTL_3DCarPos = .rodata:0x803D8170; // type:object size:0x98 scope:global +_vt.15SFXCTL_3DObjPos = .rodata:0x803D8208; // type:object size:0x98 scope:global +_vt.6SFXCTL = .rodata:0x803D82A0; // type:object size:0x78 scope:global +_vt.15cSTICH_PlayBack = .rodata:0x803D8318; // type:object size:0x18 scope:global +_vt.13cStichWrapper = .rodata:0x803D8330; // type:object size:0x18 scope:global +_vt.8EAXTruck = .rodata:0x803D8348; // type:object size:0xB0 scope:global +_vt.9EAXCopCar = .rodata:0x803D83F8; // type:object size:0xB0 scope:global +_vt.13EAXAITunerCar = .rodata:0x803D84A8; // type:object size:0xB0 scope:global +_vt.17SndAIStateManager = .rodata:0x803D8558; // type:object size:0x18 scope:global +_vt.13EAXTrafficCar = .rodata:0x803D8570; // type:object size:0x68 scope:global +_vt.11EAXTunerCar = .rodata:0x803D85D8; // type:object size:0xB8 scope:global +_vt.14EAXAemsManager = .rodata:0x803D8690; // type:object size:0x18 scope:global +_vt.18EAXS_StreamChannel = .rodata:0x803D86A8; // type:object size:0x38 scope:global +_vt.18EAXS_StreamManager = .rodata:0x803D86E0; // type:object size:0x18 scope:global +_vt.9EAXCommon = .rodata:0x803D86F8; // type:object size:0x48 scope:global +_vt.11EAXFrontEnd = .rodata:0x803D8740; // type:object size:0x48 scope:global +_vt.14EAXSND8Wrapper = .rodata:0x803D8788; // type:object size:0x18 scope:global +_vt.8EAXSound = .rodata:0x803D87A0; // type:object size:0x18 scope:global +_vt.Q25Sound14CollisionEvent = .rodata:0x803D87B8; // type:object size:0x30 scope:global +_vt.Q25Sound10AudioEvent = .rodata:0x803D87E8; // type:object size:0x30 scope:global +_vt.12AudioMemBase = .rodata:0x803D8818; // type:object size:0x18 scope:global +_vt.Q23Sim6Packet = .rodata:0x803D8830; // type:object size:0x40 scope:global +TWK_SND_SteeringMonitor = .rodata:0x803D8A6C; // type:object size:0x18 scope:local +TWK_SND_AccelMonitor = .rodata:0x803D8A84; // type:object size:0x18 scope:local +TWK_SND_DeccelMonitor = .rodata:0x803D8A9C; // type:object size:0x18 scope:local +TWK_SND_ThrottleMonitor = .rodata:0x803D8AB4; // type:object size:0x18 scope:local +MIN_StateSustainTime = .rodata:0x803D8ACC; // type:object size:0x1C scope:local +UP_SHIFTING_TRQ_ATTACH_INITIAL_PERCENT = .rodata:0x803D8AE8; // type:object size:0x10 scope:local +UP_SHIFTING_TRQ_ATTACK_TIME = .rodata:0x803D8AF8; // type:object size:0x10 scope:local +REDLINE_ENG_FADE = .rodata:0x803D8B08; // type:object size:0x8 scope:local +REDLINE_REDSAMP_FADE = .rodata:0x803D8B10; // type:object size:0x8 scope:local +SND_AI_RPM_Lengths_FINE = .rodata:0x803D8B18; // type:object size:0x24 scope:local +SND_AI_SHORT_TRACK_RPM_Lengths_FINE = .rodata:0x803D8B3C; // type:object size:0x24 scope:local +SND_AI_DRIFT_RPM_Lengths_FINE = .rodata:0x803D8B60; // type:object size:0x24 scope:local +SND_AI_DOWNSHIFT_RPMS = .rodata:0x803D8B84; // type:object size:0x24 scope:local +_vt.12PF_Allocator = .rodata:0x803D8BA8; // type:object size:0x38 scope:global +_vt.Q43UTL11Collectionst8Listable2Z13HeliSoundConni10_4List = .rodata:0x803D8BE0; // type:object size:0x40 scope:global +_vt.Q43UTL11Collectionst8Listable2Z12CarSoundConni10_4List = .rodata:0x803D8C20; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3Z15SampleQueueItemi43i16 = .rodata:0x803D8C60; // type:object size:0x40 scope:global +_vt.Q43UTL11Collectionst11ListableSet4Z14cSampleWarpperi25Z10STICH_TYPEUi3_4List = .rodata:0x803D8CA0; // type:object size:0x40 scope:global +_vt.17CSISCoreAllocator = .rodata:0x803D8CE0; // type:object size:0x28 scope:global +_vt.Q43UTL11Collectionst8Listable2Z13EAX_HeliStatei10_4List = .rodata:0x803D8D08; // type:object size:0x40 scope:global +_vt.Q43UTL11Collectionst8Listable2Z12EAX_CarStatei10_4List = .rodata:0x803D8D48; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP13HeliSoundConni10i16 = .rodata:0x803D8D90; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP13HeliSoundConni16 = .rodata:0x803D8DD0; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP12CarSoundConni10i16 = .rodata:0x803D8E10; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP12CarSoundConni16 = .rodata:0x803D8E50; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2Z15SampleQueueItemi16 = .rodata:0x803D8E90; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP14cSampleWarpperi25i16 = .rodata:0x803D8ED0; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP14cSampleWarpperi16 = .rodata:0x803D8F10; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP13EAX_HeliStatei10i16 = .rodata:0x803D8F50; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP13EAX_HeliStatei16 = .rodata:0x803D8F90; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP12EAX_CarStatei10i16 = .rodata:0x803D8FD0; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP12EAX_CarStatei16 = .rodata:0x803D9010; // type:object size:0x40 scope:global +_vt.12NFSMixMaster = .rodata:0x803DB030; // type:object size:0x18 scope:global +_vt.9NFSMixMap = .rodata:0x803DB048; // type:object size:0x28 scope:global +_vt.14NFSMixMapState = .rodata:0x803DB070; // type:object size:0x20 scope:global +_vt.14GinsuSynthesis = .rodata:0x803DB090; // type:object size:0x18 scope:global +_vt.14GinsuSynthData = .rodata:0x803DB0A8; // type:object size:0x18 scope:global +_vt.16CSTATEMGR_CopCar = .rodata:0x803DB0C0; // type:object size:0x50 scope:global +_vt.15CSTATEMGR_Truck = .rodata:0x803DB110; // type:object size:0x50 scope:global +_vt.20CSTATEMGR_Helicopter = .rodata:0x803DB160; // type:object size:0x50 scope:global +_vt.15CSTATEMGR_Music = .rodata:0x803DB1B0; // type:object size:0x50 scope:global +_vt.17CSTATEMGR_DriveBy = .rodata:0x803DB200; // type:object size:0x50 scope:global +_vt.14CSTATEMGR_Main = .rodata:0x803DB250; // type:object size:0x50 scope:global +_vt.19CSTATEMGR_Collision = .rodata:0x803DB2A0; // type:object size:0x50 scope:global +_vt.15CSTATEMGR_AICar = .rodata:0x803DB2F0; // type:object size:0x50 scope:global +_vt.20CSTATEMGR_TrafficCar = .rodata:0x803DB340; // type:object size:0x50 scope:global +_vt.18CSTATEMGR_CarState = .rodata:0x803DB390; // type:object size:0x50 scope:global +_vt.Q23UTLt11FixedVector3ZUii8i16 = .rodata:0x803DB3E0; // type:object size:0x40 scope:global +_vt.16SFXCTL_3DRearPos = .rodata:0x803DB420; // type:object size:0x98 scope:global +_vt.19CSTATEMGR_PlayerCar = .rodata:0x803DB4B8; // type:object size:0x50 scope:global +_vt.16CSTATEMGR_Enviro = .rodata:0x803DB508; // type:object size:0x50 scope:global +_vt.18CSTATE_WorldObject = .rodata:0x803DB558; // type:object size:0x68 scope:global +_vt.11WorldObject = .rodata:0x803DB5C0; // type:object size:0x20 scope:global +_vt.14CSTATE_DriveBy = .rodata:0x803DB5E0; // type:object size:0x68 scope:global +_vt.17CSTATE_Helicopter = .rodata:0x803DB648; // type:object size:0x68 scope:global +_vt.12CSTATE_Music = .rodata:0x803DB6B0; // type:object size:0x68 scope:global +_vt.16CSTATE_Collision = .rodata:0x803DB718; // type:object size:0x68 scope:global +_vt.11CSTATE_Main = .rodata:0x803DB780; // type:object size:0x68 scope:global +_vt.15SFXObj_PFEATrax = .rodata:0x803DB7E8; // type:object size:0x98 scope:global +_vt.17SFXObj_Pathfinder = .rodata:0x803DB880; // type:object size:0x78 scope:global +_vt.12SFXObj_FEHUD = .rodata:0x803DB8F8; // type:object size:0x78 scope:global +_vt.22SFXCTL_3DVoiceActorPos = .rodata:0x803DB970; // type:object size:0x98 scope:global +_vt.13SFXObj_Speech = .rodata:0x803DBA08; // type:object size:0x78 scope:global +_vt.10SFX_Common = .rodata:0x803DBA80; // type:object size:0x78 scope:global +_vt.15SFXObj_Ambience = .rodata:0x803DBAF8; // type:object size:0x78 scope:global +_vt.16CARSFX_BottomOut = .rodata:0x803DBB70; // type:object size:0x78 scope:global +_vt.19SFXCTL_3DTrailerPos = .rodata:0x803DBBE8; // type:object size:0x98 scope:global +_vt.17CARSFX_TruckWoosh = .rodata:0x803DBC80; // type:object size:0x88 scope:global +_vt.14SFXObj_TruckFX = .rodata:0x803DBD08; // type:object size:0x78 scope:global +_vt.13SFXObj_Reverb = .rodata:0x803DBD80; // type:object size:0x78 scope:global +_vt.18SFXCTL_3DMomentPos = .rodata:0x803DBDF8; // type:object size:0x98 scope:global +_vt.17SFXObj_MomentStrm = .rodata:0x803DBE90; // type:object size:0x78 scope:global +_vt.Q23UTLt11FixedVector3ZQ217SFXObj_MomentStrm18stMomentDecriptioni64i16 = .rodata:0x803DBF08; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZQ217SFXObj_MomentStrm18stMomentDecriptioni16 = .rodata:0x803DBF48; // type:object size:0x40 scope:global +_vt.16SFXObj_NISStream = .rodata:0x803DBF88; // type:object size:0x78 scope:global +_vt.17SFXObj_Helicopter = .rodata:0x803DC000; // type:object size:0x78 scope:global +_vt.17SFXCTL_3DWooshPos = .rodata:0x803DC078; // type:object size:0x98 scope:global +_vt.12SFXObj_Woosh = .rodata:0x803DC110; // type:object size:0x78 scope:global +_vt.16SFXObj_Collision = .rodata:0x803DC188; // type:object size:0x78 scope:global +_vt.18SFXObj_WorldObject = .rodata:0x803DC200; // type:object size:0x78 scope:global +_vt.20SFXCTL_3DFountainPos = .rodata:0x803DC278; // type:object size:0x98 scope:global +_vt.19CARSFX_TrafficWoosh = .rodata:0x803DC310; // type:object size:0x88 scope:global +_vt.16CARSFX_TruckHorn = .rodata:0x803DC398; // type:object size:0x90 scope:global +_vt.18CARSFX_TrafficHorn = .rodata:0x803DC428; // type:object size:0x90 scope:global +_vt.19SFXCTL_3DTrafficPos = .rodata:0x803DC4B8; // type:object size:0x98 scope:global +_vt.20CARSFX_TrafficEngine = .rodata:0x803DC550; // type:object size:0x78 scope:global +_vt.14CARSFX_Nitrous = .rodata:0x803DC5C8; // type:object size:0x78 scope:global +_vt.12CARSFX_Siren = .rodata:0x803DC640; // type:object size:0x78 scope:global +_vt.18CARSFX_PreColWoosh = .rodata:0x803DC6B8; // type:object size:0x78 scope:global +_vt.11CARSFX_Rain = .rodata:0x803DC730; // type:object size:0x80 scope:global +_vt.18CARSFX_WindWeather = .rodata:0x803DC7B0; // type:object size:0x80 scope:global +_vt.16CARSFX_WindNoise = .rodata:0x803DC830; // type:object size:0x80 scope:global +_vt.20SFXCTL_3DLeftWindPos = .rodata:0x803DC8B0; // type:object size:0x98 scope:global +_vt.21SFXCTL_3DRightWindPos = .rodata:0x803DC948; // type:object size:0x98 scope:global +_vt.12CARSFX_Turbo = .rodata:0x803DC9E0; // type:object size:0x78 scope:global +_vt.19CARSFX_SparkChatter = .rodata:0x803DCA58; // type:object size:0x78 scope:global +_vt.12CARSFX_Shift = .rodata:0x803DCAD0; // type:object size:0x78 scope:global +_vt.16CARSFX_RoadNoise = .rodata:0x803DCB48; // type:object size:0x78 scope:global +_vt.19CARSFX_TrafficSkids = .rodata:0x803DCBC0; // type:object size:0x78 scope:global +_vt.12CARSFX_Skids = .rodata:0x803DCC38; // type:object size:0x78 scope:global +_vt.22SFXCTL_3DRightWheelPos = .rodata:0x803DCCB0; // type:object size:0x98 scope:global +_vt.21SFXCTL_3DLeftWheelPos = .rodata:0x803DCD48; // type:object size:0x98 scope:global +_vt.14CSTATEMGR_Base = .rodata:0x803DCDE0; // type:object size:0x50 scope:global +_vt.6EAXCar = .rodata:0x803DCE30; // type:object size:0xB0 scope:global +_vt.21CARSFX_SingleGinsuEng = .rodata:0x803DCEE0; // type:object size:0x98 scope:global +_vt.19CARSFX_DualGinsuEng = .rodata:0x803DCF78; // type:object size:0x98 scope:global +_vt.18CARSFX_GinsuEngine = .rodata:0x803DD010; // type:object size:0x98 scope:global +_vt.17CARSFX_AEMSEngine = .rodata:0x803DD0A8; // type:object size:0x90 scope:global +_vt.17CARSFX_EngineBase = .rodata:0x803DD138; // type:object size:0x90 scope:global +_vt.6CARSFX = .rodata:0x803DD1C8; // type:object size:0x78 scope:global +_vt.8SFX_Base = .rodata:0x803DD240; // type:object size:0x78 scope:global +_vt.7SndBase = .rodata:0x803DD2B8; // type:object size:0x78 scope:global +_vt.11CSTATE_Base = .rodata:0x803DD330; // type:object size:0x68 scope:global +V8CopEngines = .rodata:0x803DD468; // type:object size:0x10 scope:local +_vt.Q23UTLt11FixedVector3ZQ218CSTATEMGR_CarState14EngToCarStructi24i16 = .rodata:0x803DD478; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3Z17EngineMappingPairi24i16 = .rodata:0x803DD4B8; // type:object size:0x40 scope:global +_vt.14ISndAttachable = .rodata:0x803DD4F8; // type:object size:0x20 scope:global +_vt.Q43UTL11Collectionst8Listable2Z14ISndAttachablei15_4List = .rodata:0x803DD518; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZQ218CSTATEMGR_CarState14EngToCarStructi16 = .rodata:0x803DD558; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2Z17EngineMappingPairi16 = .rodata:0x803DD598; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP14ISndAttachablei15i16 = .rodata:0x803DD5D8; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP14ISndAttachablei16 = .rodata:0x803DD618; // type:object size:0x40 scope:global +_vt.15cQuarterSizeMap = .rodata:0x803DF3D8; // type:object size:0x18 scope:global +_vt.12cSpecularMap = .rodata:0x803DF3F0; // type:object size:0x18 scope:global +_vt.10cSphereMap = .rodata:0x803DF408; // type:object size:0x18 scope:global +_vt.14cCaptureBuffer = .rodata:0x803DF420; // type:object size:0x18 scope:global +PADMASKS = .rodata:0x803DF51C; // type:object size:0x10 scope:local +TweakSphereMapClr = .rodata:0x803DF52C; // type:object size:0x4 scope:local +_vt.11FEMemWidget = .rodata:0x803E2010; // type:object size:0x18 scope:global +_vt.13UIMemcardBoot = .rodata:0x803E2028; // type:object size:0x48 scope:global +_vt.16MemcardCallbacks = .rodata:0x803E2070; // type:object size:0xA8 scope:global +_vt.8MyThread = .rodata:0x803E2118; // type:object size:0x58 scope:global +_vt.7MyMutex = .rodata:0x803E2170; // type:object size:0x40 scope:global +_vt.13UIMemcardMain = .rodata:0x803E21B0; // type:object size:0x48 scope:global +_vt.13UIMemcardBase = .rodata:0x803E21F8; // type:object size:0x48 scope:global +_vt.17UIMemcardKeyboard = .rodata:0x803E2240; // type:object size:0x38 scope:global +_vt.13UIMemcardList = .rodata:0x803E2278; // type:object size:0x28 scope:global +_vt.15UIDeleteProfile = .rodata:0x803E22A0; // type:object size:0x38 scope:global +_vt.16UIProfileManager = .rodata:0x803E22D8; // type:object size:0x38 scope:global +_vt.11PMCreateNew = .rodata:0x803E2310; // type:object size:0x20 scope:global +_vt.8PMDelete = .rodata:0x803E2330; // type:object size:0x20 scope:global +_vt.6PMLoad = .rodata:0x803E2350; // type:object size:0x20 scope:global +_vt.6PMSave = .rodata:0x803E2370; // type:object size:0x20 scope:global +_vt.20ShapeMemoryAllocator = .rodata:0x803E2390; // type:object size:0x38 scope:global +_vt.18cFEngGameInterface = .rodata:0x803E23C8; // type:object size:0xE0 scope:global +_vt.17FEngGroupFEPrintf = .rodata:0x803E24A8; // type:object size:0x20 scope:global +_vt.24FEngSetGroupLanguageHash = .rodata:0x803E24C8; // type:object size:0x20 scope:global +_vt.22ObjectVisibilitySetter = .rodata:0x803E24E8; // type:object size:0x20 scope:global +_vt.17ObjectDirtySetter = .rodata:0x803E2508; // type:object size:0x20 scope:global +_vt.22RenderObjectDisconnect = .rodata:0x803E2528; // type:object size:0x20 scope:global +_vt.27FEngTransferFlagsToChildren = .rodata:0x803E2548; // type:object size:0x20 scope:global +_vt.17FEngHidePCObjects = .rodata:0x803E2568; // type:object size:0x20 scope:global +_vt.16FEngMovieStopper = .rodata:0x803E2588; // type:object size:0x20 scope:global +_vt.16FEngMovieStarter = .rodata:0x803E25A8; // type:object size:0x20 scope:global +_vt.19ControllerUnplugged = .rodata:0x803E25C8; // type:object size:0x28 scope:global +_vt.9uiCredits = .rodata:0x803E25F0; // type:object size:0x28 scope:global +_vt.11CLoadCareer = .rodata:0x803E2618; // type:object size:0x20 scope:global +_vt.15CStartNewCareer = .rodata:0x803E2638; // type:object size:0x20 scope:global +_vt.13CResumeCareer = .rodata:0x803E2658; // type:object size:0x20 scope:global +_vt.15uiCareerManager = .rodata:0x803E2678; // type:object size:0x38 scope:global +_vt.5CSave = .rodata:0x803E26B0; // type:object size:0x20 scope:global +_vt.6CTop15 = .rodata:0x803E26D0; // type:object size:0x20 scope:global +_vt.9CRapSheet = .rodata:0x803E26F0; // type:object size:0x20 scope:global +_vt.10CCarSelect = .rodata:0x803E2710; // type:object size:0x20 scope:global +_vt.15CResumeFreeRoam = .rodata:0x803E2730; // type:object size:0x20 scope:global +_vt.12uiCareerCrib = .rodata:0x803E2750; // type:object size:0x38 scope:global +_vt.12uiSMSMessage = .rodata:0x803E2788; // type:object size:0x28 scope:global +_vt.5uiSMS.13ArrayScroller = .rodata:0x803E27B0; // type:object size:0x28 scope:global +_vt.5uiSMS = .rodata:0x803E27D8; // type:object size:0x28 scope:global +_vt.7SMSSlot = .rodata:0x803E2800; // type:object size:0x20 scope:global +_vt.8SMSDatum = .rodata:0x803E2820; // type:object size:0x20 scope:global +_vt.23uiSafehouseRegionUnlock = .rodata:0x803E2840; // type:object size:0x28 scope:global +_vt.16uiRepSheetBounty.13ArrayScroller = .rodata:0x803E2868; // type:object size:0x28 scope:global +_vt.16uiRepSheetBounty = .rodata:0x803E2890; // type:object size:0x28 scope:global +_vt.11BountyDatum = .rodata:0x803E28B8; // type:object size:0x20 scope:global +_vt.19FEAnyTutorialScreen = .rodata:0x803E28D8; // type:object size:0x28 scope:global +_vt.20uiRepSheetMilestones.13ArrayScroller = .rodata:0x803E2900; // type:object size:0x28 scope:global +_vt.20uiRepSheetMilestones = .rodata:0x803E2928; // type:object size:0x28 scope:global +_vt.14SpeedTrapDatum = .rodata:0x803E2950; // type:object size:0x28 scope:global +_vt.14MilestoneDatum = .rodata:0x803E2978; // type:object size:0x28 scope:global +_vt.18uiRepSheetRivalBio = .rodata:0x803E29A0; // type:object size:0x28 scope:global +_vt.19uiRepSheetRivalFlow = .rodata:0x803E29C8; // type:object size:0x18 scope:global +_vt.8WorldMap = .rodata:0x803E29E0; // type:object size:0x30 scope:global +_vt.14ItemTypeToggle = .rodata:0x803E2A10; // type:object size:0x80 scope:global +_vt.8HeliItem = .rodata:0x803E2A90; // type:object size:0x48 scope:global +_vt.7CopItem = .rodata:0x803E2AD8; // type:object size:0x48 scope:global +_vt.7MapItem = .rodata:0x803E2B20; // type:object size:0x48 scope:global +_vt.20UISafehouseRaceSheet.13ArrayScroller = .rodata:0x803E2B68; // type:object size:0x28 scope:global +_vt.20UISafehouseRaceSheet = .rodata:0x803E2B90; // type:object size:0x28 scope:global +_vt.9RaceDatum = .rodata:0x803E2BB8; // type:object size:0x20 scope:global +_vt.15uiRepSheetRival = .rodata:0x803E2BD8; // type:object size:0x28 scope:global +_vt.14uiRepSheetMain = .rodata:0x803E2C00; // type:object size:0x38 scope:global +_vt.12RepSheetIcon = .rodata:0x803E2C38; // type:object size:0x20 scope:global +_vt.23uiRepSheetRivalStreamer = .rodata:0x803E2C58; // type:object size:0x18 scope:global +_vt.24uiRapSheetRankingsDetail.13ArrayScroller = .rodata:0x803E2C70; // type:object size:0x28 scope:global +_vt.24uiRapSheetRankingsDetail = .rodata:0x803E2C98; // type:object size:0x28 scope:global +_vt.30RapSheetRankingsTimerArraySlot = .rodata:0x803E2CC0; // type:object size:0x20 scope:global +_vt.25RapSheetRankingsArraySlot = .rodata:0x803E2CE0; // type:object size:0x20 scope:global +_vt.21RapSheetRankingsDatum = .rodata:0x803E2D00; // type:object size:0x20 scope:global +_vt.18uiRapSheetRankings = .rodata:0x803E2D20; // type:object size:0x28 scope:global +_vt.12uiRapSheetPD = .rodata:0x803E2D48; // type:object size:0x28 scope:global +_vt.13uiRapSheetTEP = .rodata:0x803E2D70; // type:object size:0x30 scope:global +_vt.13uiRapSheetCTS.13ArrayScroller = .rodata:0x803E2DA0; // type:object size:0x28 scope:global +_vt.13uiRapSheetCTS = .rodata:0x803E2DC8; // type:object size:0x28 scope:global +_vt.20RapSheetCTSArraySlot = .rodata:0x803E2DF0; // type:object size:0x20 scope:global +_vt.16RapSheetCTSDatum = .rodata:0x803E2E10; // type:object size:0x20 scope:global +_vt.12uiRapSheetVD.13ArrayScroller = .rodata:0x803E2E30; // type:object size:0x28 scope:global +_vt.12uiRapSheetVD = .rodata:0x803E2E58; // type:object size:0x28 scope:global +_vt.19RapSheetVDArraySlot = .rodata:0x803E2E80; // type:object size:0x20 scope:global +_vt.15RapSheetVDDatum = .rodata:0x803E2EA0; // type:object size:0x20 scope:global +_vt.12uiRapSheetUS.13ArrayScroller = .rodata:0x803E2EC0; // type:object size:0x28 scope:global +_vt.12uiRapSheetUS = .rodata:0x803E2EE8; // type:object size:0x28 scope:global +_vt.19RapSheetUSArraySlot = .rodata:0x803E2F10; // type:object size:0x20 scope:global +_vt.15RapSheetUSDatum = .rodata:0x803E2F30; // type:object size:0x20 scope:global +_vt.12uiRapSheetRS = .rodata:0x803E2F50; // type:object size:0x28 scope:global +_vt.14uiRapSheetMain = .rodata:0x803E2F78; // type:object size:0x30 scope:global +_vt.15uiRapSheetLogin = .rodata:0x803E2FA8; // type:object size:0x28 scope:global +_vt.14UIEATraxScreen = .rodata:0x803E2FD0; // type:object size:0x28 scope:global +_vt.19JukeBoxScrollerSlot = .rodata:0x803E2FF8; // type:object size:0x18 scope:global +_vt.20JukeBoxScrollerDatum = .rodata:0x803E3010; // type:object size:0x18 scope:global +_vt.12ScrollerSlot = .rodata:0x803E3028; // type:object size:0x18 scope:global +_vt.16ScrollerSlotNode = .rodata:0x803E3040; // type:object size:0x18 scope:global +_vt.17ScrollerDatumNode = .rodata:0x803E3058; // type:object size:0x18 scope:global +_vt.18UITrackMapStreamer = .rodata:0x803E3070; // type:object size:0x18 scope:global +_vt.15pm_QuitRaceToFE = .rodata:0x803E3088; // type:object size:0x20 scope:global +_vt.21pm_QuitRaceToFreeRoam = .rodata:0x803E30A8; // type:object size:0x20 scope:global +_vt.16pm_QuitQuickRace = .rodata:0x803E30C8; // type:object size:0x20 scope:global +_vt.15pm_QuitMainMenu = .rodata:0x803E30E8; // type:object size:0x20 scope:global +_vt.17pm_SwitchToTuning = .rodata:0x803E3108; // type:object size:0x20 scope:global +_vt.18pm_SwitchToOptions = .rodata:0x803E3128; // type:object size:0x20 scope:global +_vt.14pm_RestartRace = .rodata:0x803E3148; // type:object size:0x20 scope:global +_vt.17pm_ResumeFreeRoam = .rodata:0x803E3168; // type:object size:0x20 scope:global +_vt.13pm_ResumeRace = .rodata:0x803E3188; // type:object size:0x20 scope:global +_vt.12ArrayScripts = .rodata:0x803E31A8; // type:object size:0x18 scope:global +_vt.15FEGameWonScreen = .rodata:0x803E31C0; // type:object size:0x28 scope:global +_vt.9PauseMenu = .rodata:0x803E31E8; // type:object size:0x38 scope:global +_vt.16FEAnyMovieScreen = .rodata:0x803E3220; // type:object size:0x28 scope:global +_vt.17UIOptionsTrailers = .rodata:0x803E3248; // type:object size:0x38 scope:global +_vt.19UIOptionsController = .rodata:0x803E3280; // type:object size:0x30 scope:global +_vt.15UIOptionsScreen = .rodata:0x803E32B0; // type:object size:0x30 scope:global +_vt.11MainOptions = .rodata:0x803E32E0; // type:object size:0x20 scope:global +_vt.18MainProfileManager = .rodata:0x803E3300; // type:object size:0x20 scope:global +_vt.13MainCustomize = .rodata:0x803E3320; // type:object size:0x20 scope:global +_vt.13MainQuickRace = .rodata:0x803E3340; // type:object size:0x20 scope:global +_vt.9Challenge = .rodata:0x803E3360; // type:object size:0x20 scope:global +_vt.10MainCareer = .rodata:0x803E3380; // type:object size:0x20 scope:global +_vt.13UIOptionsMain = .rodata:0x803E33A0; // type:object size:0x38 scope:global +_vt.8COConfig = .rodata:0x803E33D8; // type:object size:0x88 scope:global +_vt.11COVibration = .rodata:0x803E3460; // type:object size:0x88 scope:global +_vt.13POLeaderBoard = .rodata:0x803E34E8; // type:object size:0x88 scope:global +_vt.11POSplitTime = .rodata:0x803E3570; // type:object size:0x88 scope:global +_vt.7POScore = .rodata:0x803E35F8; // type:object size:0x88 scope:global +_vt.10POPosition = .rodata:0x803E3680; // type:object size:0x88 scope:global +_vt.8POGauges = .rodata:0x803E3708; // type:object size:0x88 scope:global +_vt.10PODriveCam = .rodata:0x803E3790; // type:object size:0x88 scope:global +_vt.14POTransmission = .rodata:0x803E3818; // type:object size:0x88 scope:global +_vt.18GOExploringMiniMap = .rodata:0x803E38A0; // type:object size:0x88 scope:global +_vt.15GORacingMiniMap = .rodata:0x803E3928; // type:object size:0x88 scope:global +_vt.13GOSpeedoUnits = .rodata:0x803E39B0; // type:object size:0x88 scope:global +_vt.10GORearview = .rodata:0x803E3A38; // type:object size:0x88 scope:global +_vt.10GOJumpCams = .rodata:0x803E3AC0; // type:object size:0x88 scope:global +_vt.10GOAutoSave = .rodata:0x803E3B48; // type:object size:0x88 scope:global +_vt.8GODamage = .rodata:0x803E3BD0; // type:object size:0x88 scope:global +_vt.12VOWideScreen = .rodata:0x803E3C58; // type:object size:0x88 scope:global +_vt.11AOAudioMode = .rodata:0x803E3CE0; // type:object size:0x88 scope:global +_vt.12AOIGMusicVol = .rodata:0x803E3D68; // type:object size:0x90 scope:global +_vt.12AOFEMusicVol = .rodata:0x803E3DF8; // type:object size:0x90 scope:global +_vt.11AOSpeechVol = .rodata:0x803E3E88; // type:object size:0x90 scope:global +_vt.8AOCarVol = .rodata:0x803E3F18; // type:object size:0x90 scope:global +_vt.17AOEATraxMusicMode = .rodata:0x803E3FA8; // type:object size:0x88 scope:global +_vt.22AOInteractiveMusicMode = .rodata:0x803E4030; // type:object size:0x88 scope:global +_vt.14AOSFXMasterVol = .rodata:0x803E40B8; // type:object size:0x90 scope:global +_vt.9OMCredits = .rodata:0x803E4148; // type:object size:0x20 scope:global +_vt.8OMEATrax = .rodata:0x803E4168; // type:object size:0x20 scope:global +_vt.12OMController = .rodata:0x803E4188; // type:object size:0x20 scope:global +_vt.8OMPlayer = .rodata:0x803E41A8; // type:object size:0x20 scope:global +_vt.10OMGameplay = .rodata:0x803E41C8; // type:object size:0x20 scope:global +_vt.7OMVideo = .rodata:0x803E41E8; // type:object size:0x20 scope:global +_vt.7OMAudio = .rodata:0x803E4208; // type:object size:0x20 scope:global +_vt.6UIMain = .rodata:0x803E4228; // type:object size:0x38 scope:global +_vt.16FEObjectCallback = .rodata:0x803E4260; // type:object size:0x20 scope:global +gButtonIDs = .rodata:0x803E4290; // type:object size:0xC scope:local +gButtonTextIDs = .rodata:0x803E429C; // type:object size:0xC scope:local +_vt.13ScrollerDatum = .rodata:0x803E42A8; // type:object size:0x18 scope:global +_vt.10ArrayDatum = .rodata:0x803E42C0; // type:object size:0x20 scope:global +_vt.10IconOption = .rodata:0x803E42E0; // type:object size:0x20 scope:global +_vt.8FEWidget = .rodata:0x803E4300; // type:object size:0x80 scope:global +_10FEKeyboard.mLetterMap = .rodata:0x803E59E5; // type:object size:0x2D0 scope:global +gTradeInFactor = .rodata:0x803E89B0; // type:object size:0x4 scope:global +_vt.18CustomTuningScreen = .rodata:0x803E8BC0; // type:object size:0x30 scope:global +_vt.12TuningSlider = .rodata:0x803E8BF0; // type:object size:0x88 scope:global +_vt.Q313FEPlayerCarDB46GetNumCareerCarsWithARecord__13FEPlayerCarDB.0_7NumCars = .rodata:0x803E8C78; // type:object size:0x20 scope:global +_vt.Q313FEPlayerCarDB33GetTotalFines__13FEPlayerCarDBb.0_5Fines = .rodata:0x803E8C98; // type:object size:0x20 scope:global +_vt.Q313FEPlayerCarDB38GetNumImpoundedCars__13FEPlayerCarDB.0_11IsImpounded = .rodata:0x803E8CB8; // type:object size:0x20 scope:global +_vt.Q313FEPlayerCarDB41GetTotalBustedPursuits__13FEPlayerCarDB.0_14BustedPursuits = .rodata:0x803E8CD8; // type:object size:0x20 scope:global +_vt.Q313FEPlayerCarDB41GetTotalEvadedPursuits__13FEPlayerCarDB.0_14EvadedPursuits = .rodata:0x803E8CF8; // type:object size:0x20 scope:global +_vt.Q313FEPlayerCarDB33GetTotalBounty__13FEPlayerCarDB.0_6Bounty = .rodata:0x803E8D18; // type:object size:0x20 scope:global +_vt.Q313FEPlayerCarDB42GetTotalNumInfractions__13FEPlayerCarDBb.0_19TotalNumInfractions = .rodata:0x803E8D38; // type:object size:0x20 scope:global +_vt.Q313FEPlayerCarDB74GetNumInfraction__13FEPlayerCarDBQ218GInfractionManager14InfractionTypeb.0_13NumInfraction = .rodata:0x803E8D58; // type:object size:0x20 scope:global +_vt.3MD5 = .rodata:0x803E8D78; // type:object size:0x18 scope:global +_vt.23InGameAnyTutorialScreen = .rodata:0x803E8D90; // type:object size:0x28 scope:global +_vt.20InGameAnyMovieScreen = .rodata:0x803E8DB8; // type:object size:0x28 scope:global +_vt.Q219nsEngageEventDialog17EngageEventDialog = .rodata:0x803E8DE0; // type:object size:0x28 scope:global +_vt.23LoadingControllerScreen = .rodata:0x803E8E08; // type:object size:0x28 scope:global +_vt.20LanguageSelectScreen = .rodata:0x803E8E30; // type:object size:0x38 scope:global +_vt.11Scrollerina = .rodata:0x803E8E68; // type:object size:0x20 scope:global +_vt.11LoadingTips = .rodata:0x803E8E88; // type:object size:0x28 scope:global +_vt.13LoadingScreen = .rodata:0x803E8EB0; // type:object size:0x28 scope:global +_vt.11MovieScreen = .rodata:0x803E8ED8; // type:object size:0x28 scope:global +_vt.12SplashScreen = .rodata:0x803E8F00; // type:object size:0x28 scope:global +_vt.15BootFlowManager = .rodata:0x803E8F28; // type:object size:0x18 scope:global +_vt.14BootFlowScreen = .rodata:0x803E8F40; // type:object size:0x18 scope:global +_vt.12SixDaysLater = .rodata:0x803E8F58; // type:object size:0x28 scope:global +_vt.10FEKeyboard = .rodata:0x803E8F80; // type:object size:0x28 scope:global +_vt.6Chyron = .rodata:0x803E8FA8; // type:object size:0x28 scope:global +_vt.19BustedOverlayScreen = .rodata:0x803E8FD0; // type:object size:0x28 scope:global +_vt.14feDialogScreen = .rodata:0x803E8FF8; // type:object size:0x28 scope:global +_vt.28PostPursuitInfractionsScreen = .rodata:0x803E9020; // type:object size:0x28 scope:global +_vt.11Infractions.12IInfractions = .rodata:0x803E9048; // type:object size:0x20 scope:global +_vt.11Infractions = .rodata:0x803E9068; // type:object size:0x20 scope:global +_vt.12ShiftUpdater.13IShiftUpdater = .rodata:0x803E9088; // type:object size:0x30 scope:global +_vt.12ShiftUpdater = .rodata:0x803E90B8; // type:object size:0x20 scope:global +_vt.14DragTachometer.15ITachometerDrag = .rodata:0x803E90D8; // type:object size:0x18 scope:global +_vt.14DragTachometer.11ITachometer = .rodata:0x803E90F0; // type:object size:0x40 scope:global +_vt.14DragTachometer = .rodata:0x803E9130; // type:object size:0x20 scope:global +_vt.10FadeScreen = .rodata:0x803E9150; // type:object size:0x28 scope:global +_vt.15MenuZoneTrigger.16IMenuZoneTrigger = .rodata:0x803E9178; // type:object size:0x68 scope:global +_vt.15MenuZoneTrigger = .rodata:0x803E91E0; // type:object size:0x20 scope:global +_vt.10TurboMeter.11ITurbometer = .rodata:0x803E9200; // type:object size:0x20 scope:global +_vt.10TurboMeter = .rodata:0x803E9220; // type:object size:0x20 scope:global +_vt.11BustedMeter.12IBustedMeter = .rodata:0x803E9240; // type:object size:0x38 scope:global +_vt.11BustedMeter = .rodata:0x803E9278; // type:object size:0x20 scope:global +_vt.13TimeExtension.14ITimeExtension = .rodata:0x803E9298; // type:object size:0x28 scope:global +_vt.13TimeExtension = .rodata:0x803E92C0; // type:object size:0x20 scope:global +_vt.12PursuitBoard.13IPursuitBoard = .rodata:0x803E92E0; // type:object size:0x90 scope:global +_vt.12PursuitBoard = .rodata:0x803E9370; // type:object size:0x20 scope:global +_vt.24PostRaceMilestonesScreen = .rodata:0x803E9390; // type:object size:0x28 scope:global +_vt.21PostRacePursuitScreen.13ArrayScroller = .rodata:0x803E93B8; // type:object size:0x28 scope:global +_vt.21PostRacePursuitScreen = .rodata:0x803E93E0; // type:object size:0x28 scope:global +_vt.23PursuitResultsArraySlot = .rodata:0x803E9408; // type:object size:0x20 scope:global +_vt.19PursuitResultsDatum = .rodata:0x803E9428; // type:object size:0x20 scope:global +_vt.21PostRaceResultsScreen = .rodata:0x803E9448; // type:object size:0x28 scope:global +_vt.10StatsPanel = .rodata:0x803E9470; // type:object size:0x18 scope:global +_vt.13TollboothStat = .rodata:0x803E9488; // type:object size:0x80 scope:global +_vt.9SpeedStat = .rodata:0x803E9508; // type:object size:0x80 scope:global +_vt.9StageStat = .rodata:0x803E9588; // type:object size:0x80 scope:global +_vt.7LapStat = .rodata:0x803E9608; // type:object size:0x80 scope:global +_vt.14RaceResultStat = .rodata:0x803E9688; // type:object size:0x80 scope:global +_vt.13GenericResult = .rodata:0x803E9708; // type:object size:0x80 scope:global +_vt.9TimerStat = .rodata:0x803E9788; // type:object size:0x80 scope:global +_vt.11GenericStat = .rodata:0x803E9808; // type:object size:0x80 scope:global +_vt.8InfoStat = .rodata:0x803E9888; // type:object size:0x80 scope:global +_vt.8RaceStat = .rodata:0x803E9908; // type:object size:0x80 scope:global +_vt.17PhotoFinishScreen = .rodata:0x803E9988; // type:object size:0x28 scope:global +_vt.14MilestoneBoard.15IMilestoneBoard = .rodata:0x803E99B0; // type:object size:0x60 scope:global +_vt.14MilestoneBoard = .rodata:0x803E9A10; // type:object size:0x20 scope:global +_vt.11LeaderBoard.12ILeaderBoard = .rodata:0x803E9A30; // type:object size:0x70 scope:global +_vt.11LeaderBoard = .rodata:0x803E9AA0; // type:object size:0x20 scope:global +_vt.15RaceInformation.16IRaceInformation = .rodata:0x803E9AC0; // type:object size:0x60 scope:global +_vt.15RaceInformation = .rodata:0x803E9B20; // type:object size:0x20 scope:global +_vt.10WrongWIndi.9IWrongWay = .rodata:0x803E9B40; // type:object size:0x20 scope:global +_vt.10WrongWIndi = .rodata:0x803E9B60; // type:object size:0x20 scope:global +_vt.10Tachometer.11ITachometer = .rodata:0x803E9B80; // type:object size:0x40 scope:global +_vt.10Tachometer = .rodata:0x803E9BC0; // type:object size:0x20 scope:global +_vt.11Speedometer.12ISpeedometer = .rodata:0x803E9BE0; // type:object size:0x20 scope:global +_vt.11Speedometer = .rodata:0x803E9C00; // type:object size:0x20 scope:global +_vt.15EngineTempGauge.16IEngineTempGauge = .rodata:0x803E9C20; // type:object size:0x20 scope:global +_vt.15EngineTempGauge = .rodata:0x803E9C40; // type:object size:0x20 scope:global +_vt.17SpeedBreakerMeter.18ISpeedBreakerMeter = .rodata:0x803E9C60; // type:object size:0x20 scope:global +_vt.17SpeedBreakerMeter = .rodata:0x803E9C80; // type:object size:0x20 scope:global +_vt.12NitrousGauge.4INos = .rodata:0x803E9CA0; // type:object size:0x20 scope:global +_vt.12NitrousGauge = .rodata:0x803E9CC0; // type:object size:0x20 scope:global +_vt.16FEPackageManager = .rodata:0x803E9CE0; // type:object size:0x18 scope:global +_vt.13FEPackageData = .rodata:0x803E9CF8; // type:object size:0x18 scope:global +_vt.15RaceOverMessage.16IRaceOverMessage = .rodata:0x803E9D10; // type:object size:0x30 scope:global +_vt.15RaceOverMessage = .rodata:0x803E9D40; // type:object size:0x20 scope:global +_vt.14GenericMessage.15IGenericMessage = .rodata:0x803E9D60; // type:object size:0x38 scope:global +_vt.14GenericMessage = .rodata:0x803E9D98; // type:object size:0x20 scope:global +_vt.9Countdown.10ICountdown = .rodata:0x803E9DB8; // type:object size:0x30 scope:global +_vt.9Countdown = .rodata:0x803E9DE8; // type:object size:0x20 scope:global +_vt.7Minimap = .rodata:0x803E9E08; // type:object size:0x20 scope:global +_vt.18HudResourceManager = .rodata:0x803E9E28; // type:object size:0x18 scope:global +_vt.7FEngHud = .rodata:0x803E9E40; // type:object size:0x70 scope:global +_vt.12UIWidgetMenu = .rodata:0x803E9EB0; // type:object size:0x30 scope:global +_vt.17ArrayScrollerMenu.13ArrayScroller = .rodata:0x803E9EE0; // type:object size:0x28 scope:global +_vt.17ArrayScrollerMenu = .rodata:0x803E9F08; // type:object size:0x28 scope:global +_vt.13ArrayScroller = .rodata:0x803E9F30; // type:object size:0x28 scope:global +_vt.14ImageArraySlot = .rodata:0x803E9F58; // type:object size:0x20 scope:global +_vt.9ArraySlot = .rodata:0x803E9F78; // type:object size:0x20 scope:global +_vt.16IconScrollerMenu = .rodata:0x803E9F98; // type:object size:0x38 scope:global +_vt.12IconScroller = .rodata:0x803E9FD0; // type:object size:0x90 scope:global +_vt.16FEScrollyBookEnd = .rodata:0x803EA060; // type:object size:0x20 scope:global +_vt.9IconPanel = .rodata:0x803EA080; // type:object size:0x80 scope:global +_vt.14FESliderWidget = .rodata:0x803EA100; // type:object size:0x90 scope:global +_vt.14FEToggleWidget = .rodata:0x803EA190; // type:object size:0x88 scope:global +_vt.12FEStatWidget = .rodata:0x803EA218; // type:object size:0x80 scope:global +_vt.14FEButtonWidget = .rodata:0x803EA298; // type:object size:0x80 scope:global +_vt.14TwoStageSlider = .rodata:0x803EA318; // type:object size:0x70 scope:global +_vt.7cSlider = .rodata:0x803EA388; // type:object size:0x60 scope:global +_vt.10Reputation.11IReputation = .rodata:0x803EA3E8; // type:object size:0x28 scope:global +_vt.10Reputation = .rodata:0x803EA410; // type:object size:0x20 scope:global +_vt.11CostToState.12ICostToState = .rodata:0x803EA430; // type:object size:0x28 scope:global +_vt.11CostToState = .rodata:0x803EA458; // type:object size:0x20 scope:global +_vt.9HeatMeter.10IHeatMeter = .rodata:0x803EA478; // type:object size:0x28 scope:global +_vt.9HeatMeter = .rodata:0x803EA4A0; // type:object size:0x20 scope:global +_vt.Q213FEPlayerCarDB10MyCallback = .rodata:0x803EA4C0; // type:object size:0x20 scope:global +_vt.13RadarDetector.14IRadarDetector = .rodata:0x803EA4E0; // type:object size:0x30 scope:global +_vt.13RadarDetector = .rodata:0x803EA510; // type:object size:0x20 scope:global +_vt.12GetAwayMeter.13IGetAwayMeter = .rodata:0x803EA530; // type:object size:0x20 scope:global +_vt.12GetAwayMeter = .rodata:0x803EA550; // type:object size:0x20 scope:global +_vt.11ITachometer = .rodata:0x803EA570; // type:object size:0x40 scope:global +_vt.4IHud = .rodata:0x803EA5B0; // type:object size:0x70 scope:global +_vt.10MenuScreen = .rodata:0x803EA620; // type:object size:0x28 scope:global +_vt.10HudElement = .rodata:0x803EA648; // type:object size:0x20 scope:global +DriveConfigs = .rodata:0x803EA794; // type:object size:0x28 scope:local +HudConfigs = .rodata:0x803EA7BC; // type:object size:0x28 scope:local +FEKeyTypeSize = .rodata:0x803EA920; // type:object size:0x1C scope:global +FETrackOffsets = .rodata:0x803EAC10; // type:object size:0x2C scope:global +_vt.t10FEPoolNode2Z8FEScripti32 = .rodata:0x803EAE10; // type:object size:0x18 scope:global +_vt.13FESimpleImage = .rodata:0x803EAE28; // type:object size:0x20 scope:global +_vt.11FEAnimImage = .rodata:0x803EAE48; // type:object size:0x20 scope:global +_vt.22MouseStateArrayBuilder = .rodata:0x803EAE68; // type:object size:0x20 scope:global +_vt.23MouseStateObjectCounter = .rodata:0x803EAE88; // type:object size:0x20 scope:global +_vt.17ResourceConnector = .rodata:0x803EAEA8; // type:object size:0x20 scope:global +_vt.28MouseStateArrayOffsetUpdater = .rodata:0x803EAEC8; // type:object size:0x20 scope:global +_vt.12FEFindByGUID = .rodata:0x803EAEE8; // type:object size:0x20 scope:global +_vt.12FEFindByHash = .rodata:0x803EAF08; // type:object size:0x20 scope:global +_vt.7FEMovie = .rodata:0x803EAF28; // type:object size:0x20 scope:global +_vt.14FEColoredImage = .rodata:0x803EAF48; // type:object size:0x20 scope:global +_vt.10FESlotPool = .rodata:0x803EAF68; // type:object size:0x18 scope:global +_vt.10FESlotNode = .rodata:0x803EAF80; // type:object size:0x18 scope:global +_vt.12FEMultiImage = .rodata:0x803EAF98; // type:object size:0x20 scope:global +_vt.7FEImage = .rodata:0x803EAFB8; // type:object size:0x20 scope:global +_vt.13FEMessageNode = .rodata:0x803EAFD8; // type:object size:0x18 scope:global +_vt.16FEPackageCommand = .rodata:0x803EAFF0; // type:object size:0x18 scope:global +_vt.10FETypeNode = .rodata:0x803EB008; // type:object size:0x18 scope:global +_vt.11FEFieldNode = .rodata:0x803EB020; // type:object size:0x18 scope:global +_vt.t10FEPoolNode2Z17FEMessageResponsei64 = .rodata:0x803EB038; // type:object size:0x18 scope:global +_vt.t10FEPoolNode2Z9FEKeyNodei256 = .rodata:0x803EB050; // type:object size:0x18 scope:global +_vt.7FEGroup = .rodata:0x803EB068; // type:object size:0x20 scope:global +_vt.8FEString = .rodata:0x803EB088; // type:object size:0x20 scope:global +_vt.13FECodeListBox = .rodata:0x803EB0A8; // type:object size:0x20 scope:global +_vt.9FEListBox = .rodata:0x803EB0C8; // type:object size:0x20 scope:global +_vt.9FEPackage = .rodata:0x803EB0E8; // type:object size:0x18 scope:global +_vt.18PackageInitStateCB = .rodata:0x803EB100; // type:object size:0x20 scope:global +_vt.8FEObject = .rodata:0x803EB120; // type:object size:0x20 scope:global +_vt.17FEMessageResponse = .rodata:0x803EB140; // type:object size:0x18 scope:global +_vt.8FEScript = .rodata:0x803EB158; // type:object size:0x18 scope:global +_vt.9FEKeyNode = .rodata:0x803EB170; // type:object size:0x18 scope:global +_vt.9FERefList = .rodata:0x803EB188; // type:object size:0x18 scope:global +_vt.6FEList = .rodata:0x803EB1A0; // type:object size:0x18 scope:global +_vt.9FEMinList = .rodata:0x803EB1B8; // type:object size:0x18 scope:global +_vt.6FENode = .rodata:0x803EB1D0; // type:object size:0x18 scope:global +_vt.9FEMinNode = .rodata:0x803EB1E8; // type:object size:0x18 scope:global +_Q25UMath7Vector2.kZero = .rodata:0x803EB374; // type:object size:0x8 scope:global +_Q25UMath7Vector3.kZero = .rodata:0x803EB37C; // type:object size:0xC scope:global +_Q25UMath7Vector4.kZero = .rodata:0x803EB388; // type:object size:0x10 scope:global +_Q25UMath7Vector4.kIdentity = .rodata:0x803EB398; // type:object size:0x10 scope:global +_Q25UMath7Matrix4.kIdentity = .rodata:0x803EB3B0; // type:object size:0x40 scope:global +_vt.Q24CARP12CarpResolver = .rodata:0x803EB960; // type:object size:0x28 scope:global +_vt.Q26UGroup9Processor = .rodata:0x803EB988; // type:object size:0x28 scope:global +_Infinity_ = .rodata:0x803EB9B4; // type:object size:0x4 scope:local +fBezierBasisMat = .rodata:0x803EB9BC; // type:object size:0x40 scope:local +fCatRomBasisMat = .rodata:0x803EB9FC; // type:object size:0x40 scope:local +fBezierTanBasisMat = .rodata:0x803EBA3C; // type:object size:0x40 scope:local +fCatRomTanBasisMat = .rodata:0x803EBA7C; // type:object size:0x40 scope:local +fBezier2ndBasisMat = .rodata:0x803EBABC; // type:object size:0x40 scope:local +fCatRom2ndBasisMat = .rodata:0x803EBAFC; // type:object size:0x40 scope:local +_13GRaceDatabase.sDDayRaces = .rodata:0x803EC79C; // type:object size:0x28 scope:global +TWEAK_SpeedingLimit = .rodata:0x803ECF58; // type:object size:0x4 scope:global +TWEAK_RacingLimit = .rodata:0x803ECF5C; // type:object size:0x4 scope:global +TWEAK_RecklessDrivingLimit = .rodata:0x803ECF60; // type:object size:0x4 scope:global +_vt.27BlockLoadingAttribAllocator = .rodata:0x803ED020; // type:object size:0x28 scope:global +_vt.25PreloadingAttribAllocator = .rodata:0x803ED048; // type:object size:0x28 scope:global +_vt.10GCharacter.11IAttachable = .rodata:0x803ED070; // type:object size:0x48 scope:global +_vt.10GCharacter = .rodata:0x803ED0B8; // type:object size:0x20 scope:global +_vt.8GHandler = .rodata:0x803ED0D8; // type:object size:0x20 scope:global +_vt.6GState = .rodata:0x803ED0F8; // type:object size:0x20 scope:global +_vt.11GRaceStatus = .rodata:0x803ED118; // type:object size:0x30 scope:global +_vt.11GRaceCustom = .rodata:0x803ED148; // type:object size:0x28 scope:global +_vt.15GRaceParameters = .rodata:0x803ED170; // type:object size:0x28 scope:global +_vt.9GActivity = .rodata:0x803ED198; // type:object size:0x20 scope:global +_vt.22LuaMessageDeliveryInfo = .rodata:0x803ED1B8; // type:object size:0x38 scope:global +_vt.8GTrigger = .rodata:0x803ED1F0; // type:object size:0x20 scope:global +_vt.7GMarker = .rodata:0x803ED210; // type:object size:0x20 scope:global +_vt.8GManager = .rodata:0x803ED230; // type:object size:0x30 scope:global +_vt.16GRuntimeInstance = .rodata:0x803ED260; // type:object size:0x20 scope:global +Tweak_GlueSpreadData_Low = .rodata:0x803ED2AC; // type:object size:0x14 scope:local +Tweak_GlueSpreadData_High = .rodata:0x803ED2C0; // type:object size:0x14 scope:local +Tweak_GlueStrengthData_Low = .rodata:0x803ED2D4; // type:object size:0x14 scope:local +Tweak_GlueStrengthData_High = .rodata:0x803ED2E8; // type:object size:0x14 scope:local +Tweak_QuickRaceGlue = .rodata:0x803ED2FC; // type:object size:0xC scope:local +_vt.22LoggingAttribAllocator = .rodata:0x803ED308; // type:object size:0x28 scope:global +luaO_nilobject = .rodata:0x803EEF1C; // type:object size:0x8 scope:global +log_8.33993 = .rodata:0x803EEF24; // type:object size:0xFF scope:local +luaP_opmodes = .rodata:0x803EF048; // type:object size:0x23 scope:global +luaT_typenames = .rodata:0x803EF128; // type:object size:0x24 scope:global +luaT_eventname.34129 = .rodata:0x803EF1B0; // type:object size:0x3C scope:local +_vt.10GameDevice.9IFeedback = .rodata:0x803F2520; // type:object size:0x88 scope:global +_vt.10GameDevice = .rodata:0x803F25A8; // type:object size:0x80 scope:global +_vt.19SteeringWheelDevice = .rodata:0x803F2628; // type:object size:0x38 scope:global +_vt.Q214EventSequencer6Engine = .rodata:0x803F2660; // type:object size:0xD0 scope:global +_vt.11EWorldMapOn = .rodata:0x803F2730; // type:object size:0x20 scope:global +_vt.12EWorldMapOff = .rodata:0x803F2750; // type:object size:0x20 scope:global +_vt.11EWakeObject = .rodata:0x803F2770; // type:object size:0x20 scope:global +_vt.13EVehicleReset = .rodata:0x803F2790; // type:object size:0x20 scope:global +_vt.17EVehicleDestroyed = .rodata:0x803F27B0; // type:object size:0x20 scope:global +_vt.8EUnPause = .rodata:0x803F27D0; // type:object size:0x20 scope:global +_vt.12ETuneVehicle = .rodata:0x803F27F0; // type:object size:0x20 scope:global +_vt.17ETriggerMomentNIS = .rodata:0x803F2810; // type:object size:0x20 scope:global +_vt.14ETirePunctured = .rodata:0x803F2830; // type:object size:0x20 scope:global +_vt.10ETireBlown = .rodata:0x803F2850; // type:object size:0x20 scope:global +_vt.5ETips = .rodata:0x803F2870; // type:object size:0x20 scope:global +_vt.15ETerminateMusic = .rodata:0x803F2890; // type:object size:0x20 scope:global +_vt.18EStopObjectEffects = .rodata:0x803F28B0; // type:object size:0x20 scope:global +_vt.17EStopObjectEffect = .rodata:0x803F28D0; // type:object size:0x20 scope:global +_vt.15ESpawnSmackable = .rodata:0x803F28F0; // type:object size:0x20 scope:global +_vt.14ESpawnFragment = .rodata:0x803F2910; // type:object size:0x20 scope:global +_vt.15ESpawnExplosion = .rodata:0x803F2930; // type:object size:0x20 scope:global +_vt.9ESimulate = .rodata:0x803F2950; // type:object size:0x20 scope:global +_vt.18EShowTimeExtension = .rodata:0x803F2970; // type:object size:0x20 scope:global +_vt.8EShowSMS = .rodata:0x803F2990; // type:object size:0x20 scope:global +_vt.12EShowResults = .rodata:0x803F29B0; // type:object size:0x20 scope:global +_vt.18EShowRaceCountdown = .rodata:0x803F29D0; // type:object size:0x20 scope:global +_vt.15EShowMilestones = .rodata:0x803F29F0; // type:object size:0x20 scope:global +_vt.18EShowMessageScreen = .rodata:0x803F2A10; // type:object size:0x20 scope:global +_vt.20EShowMarketingScreen = .rodata:0x803F2A30; // type:object size:0x20 scope:global +_vt.12EShockObject = .rodata:0x803F2A50; // type:object size:0x20 scope:global +_vt.11ESetSimRate = .rodata:0x803F2A70; // type:object size:0x20 scope:global +_vt.24ESetPlayerCollisionCache = .rodata:0x803F2A90; // type:object size:0x20 scope:global +_vt.18ESetPlayerCarReset = .rodata:0x803F2AB0; // type:object size:0x20 scope:global +_vt.20ESetCopAutoSpawnMode = .rodata:0x803F2AD0; // type:object size:0x20 scope:global +_vt.14EScheduleEvent = .rodata:0x803F2AF0; // type:object size:0x20 scope:global +_vt.20EScheduleEventUpdate = .rodata:0x803F2B10; // type:object size:0x20 scope:global +_vt.24Schedule_OncePerGameLoop = .rodata:0x803F2B30; // type:object size:0x20 scope:global +_vt.23Schedule_QuarterSimRate = .rodata:0x803F2B50; // type:object size:0x20 scope:global +_vt.20Schedule_HalfSimRate = .rodata:0x803F2B70; // type:object size:0x20 scope:global +_vt.16Schedule_SimRate = .rodata:0x803F2B90; // type:object size:0x20 scope:global +_vt.8Schedule = .rodata:0x803F2BB0; // type:object size:0x20 scope:global +_vt.12ERestartRace = .rodata:0x803F2BD0; // type:object size:0x20 scope:global +_vt.12EResetSystem = .rodata:0x803F2BF0; // type:object size:0x20 scope:global +_vt.15EResetSequencer = .rodata:0x803F2C10; // type:object size:0x20 scope:global +_vt.11EResetProps = .rodata:0x803F2C30; // type:object size:0x20 scope:global +_vt.15EResetPlayerCar = .rodata:0x803F2C50; // type:object size:0x20 scope:global +_vt.23ERequestEventInfoDialog = .rodata:0x803F2C70; // type:object size:0x20 scope:global +_vt.23EReportMilestoneAtStake = .rodata:0x803F2C90; // type:object size:0x20 scope:global +_vt.17EReportInfraction = .rodata:0x803F2CB0; // type:object size:0x20 scope:global +_vt.10EReloadHud = .rodata:0x803F2CD0; // type:object size:0x20 scope:global +_vt.11EReloadGame = .rodata:0x803F2CF0; // type:object size:0x20 scope:global +_vt.16ERandomExplosion = .rodata:0x803F2D10; // type:object size:0x20 scope:global +_vt.16ERandomEventList = .rodata:0x803F2D30; // type:object size:0x20 scope:global +_vt.12ERaceSheetOn = .rodata:0x803F2D50; // type:object size:0x20 scope:global +_vt.13ERaceSheetOff = .rodata:0x803F2D70; // type:object size:0x20 scope:global +_vt.9EQuitDemo = .rodata:0x803F2D90; // type:object size:0x20 scope:global +_vt.9EQuitToFE = .rodata:0x803F2DB0; // type:object size:0x20 scope:global +_vt.15EPursuitBreaker = .rodata:0x803F2DD0; // type:object size:0x20 scope:global +_vt.20EProcessAreaStimulus = .rodata:0x803F2DF0; // type:object size:0x20 scope:global +_vt.16EProcessStimulus = .rodata:0x803F2E10; // type:object size:0x20 scope:global +_vt.14EPlayRaceMovie = .rodata:0x803F2E30; // type:object size:0x20 scope:global +_vt.17EPlayObjectEffect = .rodata:0x803F2E50; // type:object size:0x20 scope:global +_vt.19EPlayerTriggeredNOS = .rodata:0x803F2E70; // type:object size:0x20 scope:global +_vt.12EPlayerShift = .rodata:0x803F2E90; // type:object size:0x20 scope:global +_vt.15EPlayerAirborne = .rodata:0x803F2EB0; // type:object size:0x20 scope:global +_vt.11EPlayEndNIS = .rodata:0x803F2ED0; // type:object size:0x20 scope:global +_vt.12EPlayRaceNIS = .rodata:0x803F2EF0; // type:object size:0x20 scope:global +_vt.13EPerfectShift = .rodata:0x803F2F10; // type:object size:0x20 scope:global +_vt.14EPerfectLaunch = .rodata:0x803F2F30; // type:object size:0x20 scope:global +_vt.6EPause = .rodata:0x803F2F50; // type:object size:0x20 scope:global +_vt.20ENISWorldAnimTrigger = .rodata:0x803F2F70; // type:object size:0x20 scope:global +_vt.17ENISWolrdGeometry = .rodata:0x803F2F90; // type:object size:0x20 scope:global +_vt.14ENISVisualLook = .rodata:0x803F2FB0; // type:object size:0x20 scope:global +_vt.13ENISTimeOfDay = .rodata:0x803F2FD0; // type:object size:0x20 scope:global +_vt.15ENISStopEffects = .rodata:0x803F2FF0; // type:object size:0x20 scope:global +_vt.12ENISSteering = .rodata:0x803F3010; // type:object size:0x20 scope:global +_vt.15ENISScreenFlash = .rodata:0x803F3030; // type:object size:0x20 scope:global +_vt.13ENISRoadNoise = .rodata:0x803F3050; // type:object size:0x20 scope:global +_vt.12ENISReattach = .rodata:0x803F3070; // type:object size:0x20 scope:global +_vt.8ENISRain = .rodata:0x803F3090; // type:object size:0x20 scope:global +_vt.14ENISPlayEffect = .rodata:0x803F30B0; // type:object size:0x20 scope:global +_vt.12ENISPixelate = .rodata:0x803F30D0; // type:object size:0x20 scope:global +_vt.18ENISOverlayMessage = .rodata:0x803F30F0; // type:object size:0x20 scope:global +_vt.13ENISNukeSmack = .rodata:0x803F3110; // type:object size:0x20 scope:global +_vt.9ENISNitro = .rodata:0x803F3130; // type:object size:0x20 scope:global +_vt.14ENISNeutralRev = .rodata:0x803F3150; // type:object size:0x20 scope:global +_vt.14ENISMotionBlur = .rodata:0x803F3170; // type:object size:0x20 scope:global +_vt.10ENISLights = .rodata:0x803F3190; // type:object size:0x20 scope:global +_vt.17ENISHideCharacter = .rodata:0x803F31B0; // type:object size:0x20 scope:global +_vt.10ENISFreeze = .rodata:0x803F31D0; // type:object size:0x20 scope:global +_vt.11ENISFakeFar = .rodata:0x803F31F0; // type:object size:0x20 scope:global +_vt.10ENISDetail = .rodata:0x803F3210; // type:object size:0x20 scope:global +_vt.10ENISDetach = .rodata:0x803F3230; // type:object size:0x20 scope:global +_vt.13ENISCopLights = .rodata:0x803F3250; // type:object size:0x20 scope:global +_vt.15ENISCopCarDoors = .rodata:0x803F3270; // type:object size:0x20 scope:global +_vt.14ENISConstraint = .rodata:0x803F3290; // type:object size:0x20 scope:global +_vt.12ENISCarShake = .rodata:0x803F32B0; // type:object size:0x20 scope:global +_vt.11ENISCarRoll = .rodata:0x803F32D0; // type:object size:0x20 scope:global +_vt.12ENISCarPitch = .rodata:0x803F32F0; // type:object size:0x20 scope:global +_vt.18ENISCarDamageReset = .rodata:0x803F3310; // type:object size:0x20 scope:global +_vt.11ENISBurnout = .rodata:0x803F3330; // type:object size:0x20 scope:global +_vt.13ENISBrakelock = .rodata:0x803F3350; // type:object size:0x20 scope:global +_vt.16ENISAeroDynamics = .rodata:0x803F3370; // type:object size:0x20 scope:global +_vt.11EMomentStrm = .rodata:0x803F3390; // type:object size:0x20 scope:global +_vt.10EMissShift = .rodata:0x803F33B0; // type:object size:0x20 scope:global +_vt.9ELoadLost = .rodata:0x803F33D0; // type:object size:0x20 scope:global +_vt.16ELoadingScreenOn = .rodata:0x803F33F0; // type:object size:0x20 scope:global +_vt.17ELoadingScreenOff = .rodata:0x803F3410; // type:object size:0x20 scope:global +_vt.14EKnockoutRacer = .rodata:0x803F3430; // type:object size:0x20 scope:global +_vt.11EKillObject = .rodata:0x803F3450; // type:object size:0x20 scope:global +_vt.10EKillJoint = .rodata:0x803F3470; // type:object size:0x20 scope:global +_vt.19EJumpToStrategyFlow = .rodata:0x803F3490; // type:object size:0x20 scope:global +_vt.14EJointDetached = .rodata:0x803F34B0; // type:object size:0x20 scope:global +_vt.20EHideRaceOverMessage = .rodata:0x803F34D0; // type:object size:0x20 scope:global +_vt.9EHidePart = .rodata:0x803F34F0; // type:object size:0x20 scope:global +_vt.11EHideObject = .rodata:0x803F3510; // type:object size:0x20 scope:global +_vt.17EGTriggerInternal = .rodata:0x803F3530; // type:object size:0x20 scope:global +_vt.8EGPSLost = .rodata:0x803F3550; // type:object size:0x20 scope:global +_vt.12EGPSFinished = .rodata:0x803F3570; // type:object size:0x20 scope:global +_vt.13EForceCarStop = .rodata:0x803F3590; // type:object size:0x20 scope:global +_vt.26EFireTriggerSpeedCondition = .rodata:0x803F35B0; // type:object size:0x20 scope:global +_vt.18EFireRandomTrigger = .rodata:0x803F35D0; // type:object size:0x20 scope:global +_vt.14EFireEventList = .rodata:0x803F35F0; // type:object size:0x20 scope:global +_vt.13EFadeScreenOn = .rodata:0x803F3610; // type:object size:0x20 scope:global +_vt.14EFadeScreenOff = .rodata:0x803F3630; // type:object size:0x20 scope:global +_vt.25EFadeScreenNoLoadingBarOn = .rodata:0x803F3650; // type:object size:0x20 scope:global +_vt.26EFadeScreenNoLoadingBarOff = .rodata:0x803F3670; // type:object size:0x20 scope:global +_vt.21EExitEngagableTrigger = .rodata:0x803F3690; // type:object size:0x20 scope:global +_vt.22EEnterEngagableTrigger = .rodata:0x803F36B0; // type:object size:0x20 scope:global +_vt.9EEnterBin = .rodata:0x803F36D0; // type:object size:0x20 scope:global +_vt.12EEngineBlown = .rodata:0x803F36F0; // type:object size:0x20 scope:global +_vt.20EShowRaceOverMessage = .rodata:0x803F3710; // type:object size:0x20 scope:global +_vt.11EEndCarStop = .rodata:0x803F3730; // type:object size:0x20 scope:global +_vt.14EEnableTrigger = .rodata:0x803F3750; // type:object size:0x20 scope:global +_vt.15EEnableModeling = .rodata:0x803F3770; // type:object size:0x20 scope:global +_vt.23EEnableCollisionElement = .rodata:0x803F3790; // type:object size:0x20 scope:global +_vt.16EEnableAIPhysics = .rodata:0x803F37B0; // type:object size:0x20 scope:global +_vt.14EDynamicRegion = .rodata:0x803F37D0; // type:object size:0x20 scope:global +_vt.14EDispIntroRace = .rodata:0x803F37F0; // type:object size:0x20 scope:global +_vt.15EDisableTrigger = .rodata:0x803F3810; // type:object size:0x20 scope:global +_vt.22EDisablePursuitVehicle = .rodata:0x803F3830; // type:object size:0x20 scope:global +_vt.15EDestroyVehicle = .rodata:0x803F3850; // type:object size:0x20 scope:global +_vt.15EDeliverMessage = .rodata:0x803F3870; // type:object size:0x20 scope:global +_vt.19EDebugScreenMessage = .rodata:0x803F3890; // type:object size:0x20 scope:global +_vt.11EDebugPrint = .rodata:0x803F38B0; // type:object size:0x20 scope:global +_vt.11EDDaySpeech = .rodata:0x803F38D0; // type:object size:0x20 scope:global +_vt.13EDamageLights = .rodata:0x803F38F0; // type:object size:0x20 scope:global +_vt.19ECommitRenderAssets = .rodata:0x803F3910; // type:object size:0x20 scope:global +_vt.18ECommitAudioAssets = .rodata:0x803F3930; // type:object size:0x20 scope:global +_vt.10ECollision = .rodata:0x803F3950; // type:object size:0x20 scope:global +_vt.16ECinematicMoment = .rodata:0x803F3970; // type:object size:0x20 scope:global +_vt.12EChangeState = .rodata:0x803F3990; // type:object size:0x20 scope:global +_vt.Q214EventSequencer7IEngine = .rodata:0x803F39B0; // type:object size:0xD0 scope:global +_vt.9ECellCall = .rodata:0x803F3A80; // type:object size:0x20 scope:global +_vt.13ESndGameState = .rodata:0x803F3AA0; // type:object size:0x20 scope:global +_vt.12ECameraShake = .rodata:0x803F3AC0; // type:object size:0x20 scope:global +_vt.18ECameraPhotoFinish = .rodata:0x803F3AE0; // type:object size:0x20 scope:global +_vt.16EBreakerStopCops = .rodata:0x803F3B00; // type:object size:0x20 scope:global +_vt.17EBecomePursuitCar = .rodata:0x803F3B20; // type:object size:0x20 scope:global +_vt.16EBecomePlayerCar = .rodata:0x803F3B40; // type:object size:0x20 scope:global +_vt.12EBecomeAiCar = .rodata:0x803F3B60; // type:object size:0x20 scope:global +_vt.12EBailPursuit = .rodata:0x803F3B80; // type:object size:0x20 scope:global +_vt.13EAwardUpgrade = .rodata:0x803F3BA0; // type:object size:0x20 scope:global +_vt.9EAutoSave = .rodata:0x803F3BC0; // type:object size:0x20 scope:global +_vt.15EAudioWorldTest = .rodata:0x803F3BE0; // type:object size:0x20 scope:global +_vt.19EAudioSmackableTest = .rodata:0x803F3C00; // type:object size:0x20 scope:global +_vt.19EAudioRigidBodyTest = .rodata:0x803F3C20; // type:object size:0x20 scope:global +_vt.12EAIEngineRev = .rodata:0x803F3C40; // type:object size:0x20 scope:global +_vt.Q29WorldConn13Pkt_Body_Send = .rodata:0x803F3C60; // type:object size:0x40 scope:global +_vt.7EAddSMS = .rodata:0x803F3CA0; // type:object size:0x20 scope:global +_vt.11EAccelerate = .rodata:0x803F3CC0; // type:object size:0x20 scope:global +_vt.11InputDevice = .rodata:0x803F3CE0; // type:object size:0x80 scope:global +_vt.8E911Call = .rodata:0x803F3D60; // type:object size:0x20 scope:global +_vt.5Event = .rodata:0x803F3D80; // type:object size:0x20 scope:global +gEventKeyOrderTable = .rodata:0x803F3EB8; // type:object size:0x284 scope:local +device_infos = .rodata:0x803F424C; // type:object size:0x2E4 scope:local +_5Query.gQueryKeyOrderTable = .rodata:0x803F4530; // type:object size:0x4 scope:local +_vt.Q26Attrib24UpgradeSpecs_TypeHandler = .rodata:0x803F4538; // type:object size:0x30 scope:global +_vt.Q26Attrib32TrafficPatternRecord_TypeHandler = .rodata:0x803F4568; // type:object size:0x30 scope:global +_vt.Q26Attrib28TireEffectRecord_TypeHandler = .rodata:0x803F4598; // type:object size:0x30 scope:global +_vt.Q26Attrib31EffectLinkageRecord_TypeHandler = .rodata:0x803F45C8; // type:object size:0x30 scope:global +_vt.Q26Attrib27CollisionStream_TypeHandler = .rodata:0x803F45F8; // type:object size:0x30 scope:global +_vt.Q26Attrib26Attrib_RefSpec_TypeHandler = .rodata:0x803F4628; // type:object size:0x30 scope:global +_vt.Q26Attrib37AICollisionReactionRecord_TypeHandler = .rodata:0x803F4658; // type:object size:0x30 scope:global +_vt.Q43UTL11Collectionst12Instanceable3ZPQ214EventSequencer9HENGINE__ZQ214EventSequencer7IEnginei434_5_List = .rodata:0x803F4688; // type:object size:0x40 scope:global +_vt.Q43UTL11Collectionst8Listable2Z11ActionQueuei20_4List = .rodata:0x803F46C8; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei434i16 = .rodata:0x803F4778; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP11ActionQueuei20i16 = .rodata:0x803F47B8; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP11ActionQueuei16 = .rodata:0x803F47F8; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZQ33UTL11Collections10_KeyedNodei16 = .rodata:0x803F4838; // type:object size:0x40 scope:global +_vt.16DisculatorDriver = .rodata:0x803F64F0; // type:object size:0x80 scope:global +_vt.15HighAttribAlloc = .rodata:0x803F6570; // type:object size:0x20 scope:global +_vt.10EasterEggs = .rodata:0x803F6590; // type:object size:0x18 scope:global +_vt.13AverageWindow = .rodata:0x803F65A8; // type:object size:0x20 scope:global +_vt.7Average = .rodata:0x803F65C8; // type:object size:0x20 scope:global +fShakeIntensityCoeffs = .rodata:0x803F6638; // type:object size:0x18 scope:local +fCutiePetootieX = .rodata:0x803F6650; // type:object size:0x4 scope:local +fCutiePetootieY = .rodata:0x803F6654; // type:object size:0x4 scope:local +fCutiePetootieZ = .rodata:0x803F6658; // type:object size:0x4 scope:local +_vt.Q28RealFile12DeviceDriver = .rodata:0x803F6660; // type:object size:0x80 scope:global +_vt.22DefaultAttribAllocator = .rodata:0x803F66E0; // type:object size:0x20 scope:global +_vt.21VaultGarbageCollector = .rodata:0x803F6700; // type:object size:0x18 scope:global +_vt.20FileGarbageCollector = .rodata:0x803F6718; // type:object size:0x18 scope:global +_vt.12SceneryModel.13ISceneryModel = .rodata:0x803F7758; // type:object size:0x40 scope:global +_vt.12SceneryModel.17ITriggerableModel = .rodata:0x803F7798; // type:object size:0x20 scope:global +_vt.12SceneryModel.5IBody = .rodata:0x803F77B8; // type:object size:0x48 scope:global +_vt.12SceneryModel.Q214EventSequencer8IContext = .rodata:0x803F7800; // type:object size:0x20 scope:global +_vt.12SceneryModel.6IModel = .rodata:0x803F7820; // type:object size:0x110 scope:global +_vt.12SceneryModel.11IAttachable = .rodata:0x803F7930; // type:object size:0x48 scope:global +_vt.12SceneryModel.Q23Sim9ITaskable = .rodata:0x803F7978; // type:object size:0x20 scope:global +_vt.12SceneryModel = .rodata:0x803F7998; // type:object size:0x58 scope:global +_vt.16PlaceableScenery.17ITriggerableModel = .rodata:0x803F79F0; // type:object size:0x20 scope:global +_vt.16PlaceableScenery.5IBody = .rodata:0x803F7A10; // type:object size:0x48 scope:global +_vt.16PlaceableScenery.Q214EventSequencer8IContext = .rodata:0x803F7A58; // type:object size:0x20 scope:global +_vt.16PlaceableScenery.11IAttachable = .rodata:0x803F7A78; // type:object size:0x48 scope:global +_vt.16PlaceableScenery.Q23Sim9ITaskable = .rodata:0x803F7AC0; // type:object size:0x20 scope:global +_vt.16PlaceableScenery.6IModel = .rodata:0x803F7AE0; // type:object size:0x110 scope:global +_vt.16PlaceableScenery = .rodata:0x803F7BF0; // type:object size:0x58 scope:global +_vt.16PlaceableScenery.17IPlaceableScenery = .rodata:0x803F7C48; // type:object size:0x30 scope:global +_vt.14HeirarchyModel.17ITriggerableModel = .rodata:0x803F7C78; // type:object size:0x20 scope:global +_vt.14HeirarchyModel.5IBody = .rodata:0x803F7C98; // type:object size:0x48 scope:global +_vt.14HeirarchyModel.Q214EventSequencer8IContext = .rodata:0x803F7CE0; // type:object size:0x20 scope:global +_vt.14HeirarchyModel.6IModel = .rodata:0x803F7D00; // type:object size:0x110 scope:global +_vt.14HeirarchyModel.11IAttachable = .rodata:0x803F7E10; // type:object size:0x48 scope:global +_vt.14HeirarchyModel.Q23Sim9ITaskable = .rodata:0x803F7E58; // type:object size:0x20 scope:global +_vt.14HeirarchyModel = .rodata:0x803F7E78; // type:object size:0x58 scope:global +_vt.18SmackableAvoidable = .rodata:0x803F7ED0; // type:object size:0x20 scope:global +_vt.Q210RenderConn18Pkt_Smackable_Open = .rodata:0x803F7EF0; // type:object size:0x40 scope:global +_vt.11RBSmackable.Q217CollisionGeometry10IBoundable = .rodata:0x803F7F30; // type:object size:0x30 scope:global +_vt.11RBSmackable.15IDynamicsEntity = .rodata:0x803F7F60; // type:object size:0x18 scope:global +_vt.11RBSmackable.14ICollisionBody = .rodata:0x803F7F78; // type:object size:0x160 scope:global +_vt.11RBSmackable.10IRigidBody = .rodata:0x803F80D8; // type:object size:0x168 scope:global +_vt.11RBSmackable.Q23Sim9ITaskable = .rodata:0x803F8240; // type:object size:0x20 scope:global +_vt.11RBSmackable = .rodata:0x803F8260; // type:object size:0xC0 scope:global +_vt.9Smackable.5IBody = .rodata:0x803F8320; // type:object size:0x48 scope:global +_vt.9Smackable.11IAttachable = .rodata:0x803F8368; // type:object size:0x48 scope:global +_vt.9Smackable = .rodata:0x803F83B0; // type:object size:0x50 scope:global +_vt.9Smackable.Q23Sim9ITaskable = .rodata:0x803F8400; // type:object size:0x20 scope:global +_vt.9Smackable.12IExplodeable = .rodata:0x803F8420; // type:object size:0x20 scope:global +_vt.9Smackable.Q214EventSequencer8IContext = .rodata:0x803F8440; // type:object size:0x20 scope:global +_vt.9Smackable.8ISimable = .rodata:0x803F8460; // type:object size:0x130 scope:global +_vt.9Smackable.11IRenderable = .rodata:0x803F8590; // type:object size:0x48 scope:global +_vt.9Smackable.11IDisposable = .rodata:0x803F85D8; // type:object size:0x20 scope:global +_vt.9Smackable.Q33Sim9Collision9IListener = .rodata:0x803F85F8; // type:object size:0x18 scope:global +_vt.Q29Smackable7Manager.11IAttachable = .rodata:0x803F8610; // type:object size:0x48 scope:global +_vt.Q29Smackable7Manager.Q23Sim9IActivity = .rodata:0x803F8658; // type:object size:0x38 scope:global +_vt.Q29Smackable7Manager.Q23Sim9ITaskable = .rodata:0x803F8690; // type:object size:0x20 scope:global +_vt.Q29Smackable7Manager = .rodata:0x803F86B0; // type:object size:0x20 scope:global +_vt.8PVehicle.14IAttributeable = .rodata:0x803F86D0; // type:object size:0x18 scope:global +_vt.8PVehicle.12IExplodeable = .rodata:0x803F86E8; // type:object size:0x20 scope:global +_vt.8PVehicle.Q214EventSequencer8IContext = .rodata:0x803F8708; // type:object size:0x20 scope:global +_vt.8PVehicle.8IVehicle = .rodata:0x803F8728; // type:object size:0x1C8 scope:global +_vt.8PVehicle.11IAttachable = .rodata:0x803F88F0; // type:object size:0x48 scope:global +_vt.8PVehicle.5IBody = .rodata:0x803F8938; // type:object size:0x48 scope:global +_vt.8PVehicle.8ISimable = .rodata:0x803F8980; // type:object size:0x130 scope:global +_vt.8PVehicle.Q23Sim9ITaskable = .rodata:0x803F8AB0; // type:object size:0x20 scope:global +_vt.8PVehicle = .rodata:0x803F8AD0; // type:object size:0x40 scope:global +_vt.Q28PVehicle14ManagementList = .rodata:0x803F8B10; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZQ28PVehicle10ManageNodei10i16 = .rodata:0x803F8B50; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZQ28PVehicle10ManageNodei16 = .rodata:0x803F8B90; // type:object size:0x40 scope:global +_vt.Q29WorldConn13Pkt_Body_Open = .rodata:0x803F8BD0; // type:object size:0x40 scope:global +_vt.9Explosion.11IAttachable = .rodata:0x803F8C10; // type:object size:0x48 scope:global +_vt.9Explosion.5IBody = .rodata:0x803F8C58; // type:object size:0x48 scope:global +_vt.9Explosion.Q23Sim9ITaskable = .rodata:0x803F8CA0; // type:object size:0x20 scope:global +_vt.9Explosion = .rodata:0x803F8CC0; // type:object size:0x38 scope:global +_vt.9Explosion.8ISimable = .rodata:0x803F8CF8; // type:object size:0x130 scope:global +_vt.9Explosion.10IExplosion = .rodata:0x803F8E28; // type:object size:0x60 scope:global +_vt.15VehicleBehavior.Q23Sim9ITaskable = .rodata:0x803F8E88; // type:object size:0x20 scope:global +_vt.15VehicleBehavior = .rodata:0x803F8EA8; // type:object size:0x60 scope:global +_vt.13PhysicsObject.11IAttachable = .rodata:0x803F8F08; // type:object size:0x48 scope:global +_vt.13PhysicsObject.5IBody = .rodata:0x803F8F50; // type:object size:0x48 scope:global +_vt.13PhysicsObject.8ISimable = .rodata:0x803F8F98; // type:object size:0x130 scope:global +_vt.13PhysicsObject.Q23Sim9ITaskable = .rodata:0x803F90C8; // type:object size:0x20 scope:global +_vt.13PhysicsObject = .rodata:0x803F90E8; // type:object size:0x38 scope:global +_vt.Q214EventSequencer8IContext = .rodata:0x803F9120; // type:object size:0x20 scope:global +_vt.11IDisposable = .rodata:0x803F9140; // type:object size:0x20 scope:global +_vt.5IBody = .rodata:0x803F9160; // type:object size:0x48 scope:global +_vt.8IVehicle = .rodata:0x803F91A8; // type:object size:0x1C8 scope:global +_vt.10IExplosion = .rodata:0x803F9370; // type:object size:0x60 scope:global +_vt.12IExplodeable = .rodata:0x803F93D0; // type:object size:0x20 scope:global +_vt.11IRenderable = .rodata:0x803F93F0; // type:object size:0x48 scope:global +_vt.17ITriggerableModel = .rodata:0x803F9438; // type:object size:0x20 scope:global +_vt.8ISimable = .rodata:0x803F9458; // type:object size:0x130 scope:global +TuningLimits = .rodata:0x803F9804; // type:object size:0x38 scope:local +_vt.Q43UTL11Collectionst8Listable2Z9Smackablei160_4List = .rodata:0x803F9840; // type:object size:0x40 scope:global +_vt.Q33UTL11Collectionst8_Storage2ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei160 = .rodata:0x803F9880; // type:object size:0x40 scope:global +_vt.Q43UTL11Collectionst8Listable2Z4IHudi2_4List = .rodata:0x803F98C0; // type:object size:0x40 scope:global +_vt.Q43UTL11Collectionst8Listable2Z10ISpikeablei10_4List = .rodata:0x803F9900; // type:object size:0x40 scope:global +_vt.Q43UTL11Collectionst8Listable2Z17IRecordablePlayeri8_4List = .rodata:0x803F9940; // type:object size:0x40 scope:global +_vt.17IPlaceableScenery = .rodata:0x803F9980; // type:object size:0x30 scope:global +_vt.Q43UTL11Collectionst8Listable2Z11IDisposablei160_4List = .rodata:0x803F99B0; // type:object size:0x40 scope:global +_vt.Q43UTL11Collectionst8Listable2Z14ITrafficCenteri8_4List = .rodata:0x803F99F0; // type:object size:0x40 scope:global +_vt.Q43UTL11Collectionst8Listable2Z10IRoadBlocki8_4List = .rodata:0x803F9A30; // type:object size:0x40 scope:global +_vt.Q43UTL11Collectionst8Listable2Z8IPursuiti8_4List = .rodata:0x803F9A70; // type:object size:0x40 scope:global +_vt.Q43UTL11Collectionst12Instanceable3ZP8HCAUSE__Z6ICausei10_5_List = .rodata:0x803F9AB0; // type:object size:0x40 scope:global +_vt.Q43UTL11Collectionst8Listable2Z10IRigidBodyi160_4List = .rodata:0x803F9AF0; // type:object size:0x40 scope:global +_vt.Q43UTL11Collectionst8Listable2Z11ISimpleBodyi96_4List = .rodata:0x803F9B30; // type:object size:0x40 scope:global +_vt.Q43UTL11Collectionst8Listable2Z14ICollisionBodyi160_4List = .rodata:0x803F9B70; // type:object size:0x40 scope:global +_vt.Q43UTL11Collectionst8Listable2Z13IVehicleCachei18_4List = .rodata:0x803F9BB0; // type:object size:0x40 scope:global +_vt.Q43UTL11Collectionst8Listable2Z12IInputPlayeri8_4List = .rodata:0x803F9BF0; // type:object size:0x40 scope:global +_vt.Q43UTL11Collectionst8Listable2Z10IExplosioni96_4List = .rodata:0x803F9C30; // type:object size:0x40 scope:global +_vt.Q43UTL11Collectionst8Listable2Z6IModeli434_4List = .rodata:0x803F9C70; // type:object size:0x40 scope:global +_vt.Q43UTL11Collectionst12Instanceable3ZP8HMODEL__Z6IModeli434_5_List = .rodata:0x803F9CB0; // type:object size:0x40 scope:global +_vt.Q43UTL11Collectionst12Instanceable3ZP11HACTIVITY__ZQ23Sim9IActivityi40_5_List = .rodata:0x803F9CF0; // type:object size:0x40 scope:global +_vt.Q43UTL11Collectionst11ListableSet4ZQ23Sim7IEntityi8Z11eEntityListUi4_4List = .rodata:0x803F9D30; // type:object size:0x40 scope:global +_vt.Q43UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3_4List = .rodata:0x803F9D70; // type:object size:0x40 scope:global +_vt.Q43UTL11Collectionst12Instanceable3ZP10HSIMABLE__Z8ISimablei160_5_List = .rodata:0x803F9DB0; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP9Smackablei160i16 = .rodata:0x803F9DF0; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP9Smackablei16 = .rodata:0x803F9E30; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei160i16 = .rodata:0x803F9E70; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160_9Collector5_Nodei16 = .rodata:0x803F9EB0; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP4IHudi2i16 = .rodata:0x803F9EF0; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP4IHudi16 = .rodata:0x803F9F30; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP10ISpikeablei10i16 = .rodata:0x803F9F70; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP10ISpikeablei16 = .rodata:0x803F9FB0; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP17IRecordablePlayeri8i16 = .rodata:0x803F9FF0; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP17IRecordablePlayeri16 = .rodata:0x803FA030; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP11IDisposablei160i16 = .rodata:0x803FA070; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP11IDisposablei16 = .rodata:0x803FA0B0; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP14ITrafficCenteri8i16 = .rodata:0x803FA0F0; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP14ITrafficCenteri16 = .rodata:0x803FA130; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP10IRoadBlocki8i16 = .rodata:0x803FA170; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP10IRoadBlocki16 = .rodata:0x803FA1B0; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP8IPursuiti8i16 = .rodata:0x803FA1F0; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP8IPursuiti16 = .rodata:0x803FA230; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei10i16 = .rodata:0x803FA270; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP10IRigidBodyi160i16 = .rodata:0x803FA2B0; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP10IRigidBodyi16 = .rodata:0x803FA2F0; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP11ISimpleBodyi96i16 = .rodata:0x803FA330; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP11ISimpleBodyi16 = .rodata:0x803FA370; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP14ICollisionBodyi160i16 = .rodata:0x803FA3B0; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP14ICollisionBodyi16 = .rodata:0x803FA3F0; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP13IVehicleCachei18i16 = .rodata:0x803FA430; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP13IVehicleCachei16 = .rodata:0x803FA470; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP12IInputPlayeri8i16 = .rodata:0x803FA4B0; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP12IInputPlayeri16 = .rodata:0x803FA4F0; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP10IExplosioni96i16 = .rodata:0x803FA530; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP10IExplosioni16 = .rodata:0x803FA570; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP6IModeli434i16 = .rodata:0x803FA5B0; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP6IModeli16 = .rodata:0x803FA5F0; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei40i16 = .rodata:0x803FA630; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZPQ23Sim7IEntityi8i16 = .rodata:0x803FA670; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZPQ23Sim7IEntityi16 = .rodata:0x803FA6B0; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP7IPlayeri8i16 = .rodata:0x803FA6F0; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP7IPlayeri16 = .rodata:0x803FA730; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZQ33UTL11Collections10_KeyedNodei160i16 = .rodata:0x803FA770; // type:object size:0x40 scope:global +diagnols.14250 = .rodata:0x803FAB04; // type:object size:0x80 scope:local +_vt.10SpikeStrip.Q23Sim9ITaskable = .rodata:0x803FBEC8; // type:object size:0x20 scope:global +_vt.10SpikeStrip = .rodata:0x803FBEE8; // type:object size:0x60 scope:global +_vt.9SoundHeli.8IAudible = .rodata:0x803FBF48; // type:object size:0x20 scope:global +_vt.9SoundHeli.Q23Sim9ITaskable = .rodata:0x803FBF68; // type:object size:0x20 scope:global +_vt.9SoundHeli = .rodata:0x803FBF88; // type:object size:0x60 scope:global +_vt.8ResetCar.10IResetable = .rodata:0x803FBFE8; // type:object size:0x38 scope:global +_vt.8ResetCar.Q23Sim9ITaskable = .rodata:0x803FC020; // type:object size:0x20 scope:global +_vt.8ResetCar = .rodata:0x803FC040; // type:object size:0x60 scope:global +_vt.10SoundRacer.8IAudible = .rodata:0x803FC0A0; // type:object size:0x20 scope:global +_vt.10SoundRacer.9ICarAudio = .rodata:0x803FC0C0; // type:object size:0x20 scope:global +_vt.10SoundRacer.Q23Sim9ITaskable = .rodata:0x803FC0E0; // type:object size:0x20 scope:global +_vt.10SoundRacer = .rodata:0x803FC100; // type:object size:0x70 scope:global +_vt.8SoundCop.8IAudible = .rodata:0x803FC170; // type:object size:0x20 scope:global +_vt.8SoundCop.9ICarAudio = .rodata:0x803FC190; // type:object size:0x20 scope:global +_vt.8SoundCop.Q23Sim9ITaskable = .rodata:0x803FC1B0; // type:object size:0x20 scope:global +_vt.8SoundCop = .rodata:0x803FC1D0; // type:object size:0x70 scope:global +_vt.12SoundTraffic.8IAudible = .rodata:0x803FC240; // type:object size:0x20 scope:global +_vt.12SoundTraffic.9ICarAudio = .rodata:0x803FC260; // type:object size:0x20 scope:global +_vt.12SoundTraffic.Q23Sim9ITaskable = .rodata:0x803FC280; // type:object size:0x20 scope:global +_vt.12SoundTraffic = .rodata:0x803FC2A0; // type:object size:0x70 scope:global +_vt.8SoundCar.8IAudible = .rodata:0x803FC310; // type:object size:0x20 scope:global +_vt.8SoundCar.9ICarAudio = .rodata:0x803FC330; // type:object size:0x20 scope:global +_vt.8SoundCar.Q23Sim9ITaskable = .rodata:0x803FC350; // type:object size:0x20 scope:global +_vt.8SoundCar = .rodata:0x803FC370; // type:object size:0x70 scope:global +_vt.9ICarAudio = .rodata:0x803FC3E0; // type:object size:0x20 scope:global +_vt.Q29SoundConn13Pkt_Heli_Open = .rodata:0x803FC400; // type:object size:0x40 scope:global +_vt.Q29SoundConn12Pkt_Car_Open = .rodata:0x803FC440; // type:object size:0x40 scope:global +_vt.11DrawRaceCar.11IAttachable = .rodata:0x803FC480; // type:object size:0x48 scope:global +_vt.11DrawRaceCar.6IModel = .rodata:0x803FC4C8; // type:object size:0x110 scope:global +_vt.11DrawRaceCar.11IRenderable = .rodata:0x803FC5D8; // type:object size:0x48 scope:global +_vt.11DrawRaceCar.Q23Sim9ITaskable = .rodata:0x803FC620; // type:object size:0x20 scope:global +_vt.11DrawRaceCar = .rodata:0x803FC640; // type:object size:0x70 scope:global +_vt.10DrawCopCar.11IAttachable = .rodata:0x803FC6B0; // type:object size:0x48 scope:global +_vt.10DrawCopCar.6IModel = .rodata:0x803FC6F8; // type:object size:0x110 scope:global +_vt.10DrawCopCar.11IRenderable = .rodata:0x803FC808; // type:object size:0x48 scope:global +_vt.10DrawCopCar.Q23Sim9ITaskable = .rodata:0x803FC850; // type:object size:0x20 scope:global +_vt.10DrawCopCar = .rodata:0x803FC870; // type:object size:0x70 scope:global +_vt.10DrawNISCar.11IAttachable = .rodata:0x803FC8E0; // type:object size:0x48 scope:global +_vt.10DrawNISCar.6IModel = .rodata:0x803FC928; // type:object size:0x110 scope:global +_vt.10DrawNISCar.11IRenderable = .rodata:0x803FCA38; // type:object size:0x48 scope:global +_vt.10DrawNISCar.Q23Sim9ITaskable = .rodata:0x803FCA80; // type:object size:0x20 scope:global +_vt.10DrawNISCar = .rodata:0x803FCAA0; // type:object size:0x70 scope:global +_vt.18DrawPerformanceCar.11IAttachable = .rodata:0x803FCB10; // type:object size:0x48 scope:global +_vt.18DrawPerformanceCar.6IModel = .rodata:0x803FCB58; // type:object size:0x110 scope:global +_vt.18DrawPerformanceCar.11IRenderable = .rodata:0x803FCC68; // type:object size:0x48 scope:global +_vt.18DrawPerformanceCar.Q23Sim9ITaskable = .rodata:0x803FCCB0; // type:object size:0x20 scope:global +_vt.18DrawPerformanceCar = .rodata:0x803FCCD0; // type:object size:0x70 scope:global +_vt.11DrawTraffic.11IAttachable = .rodata:0x803FCD40; // type:object size:0x48 scope:global +_vt.11DrawTraffic.6IModel = .rodata:0x803FCD88; // type:object size:0x110 scope:global +_vt.11DrawTraffic.11IRenderable = .rodata:0x803FCE98; // type:object size:0x48 scope:global +_vt.11DrawTraffic.Q23Sim9ITaskable = .rodata:0x803FCEE0; // type:object size:0x20 scope:global +_vt.11DrawTraffic = .rodata:0x803FCF00; // type:object size:0x70 scope:global +_vt.7DrawCar.11IAttachable = .rodata:0x803FCF70; // type:object size:0x48 scope:global +_vt.7DrawCar.6IModel = .rodata:0x803FCFB8; // type:object size:0x110 scope:global +_vt.7DrawCar.11IRenderable = .rodata:0x803FD0C8; // type:object size:0x48 scope:global +_vt.7DrawCar.Q23Sim9ITaskable = .rodata:0x803FD110; // type:object size:0x20 scope:global +_vt.7DrawCar = .rodata:0x803FD130; // type:object size:0x70 scope:global +_vt.8DrawHeli.11IAttachable = .rodata:0x803FD1A0; // type:object size:0x48 scope:global +_vt.8DrawHeli.6IModel = .rodata:0x803FD1E8; // type:object size:0x110 scope:global +_vt.8DrawHeli.11IRenderable = .rodata:0x803FD2F8; // type:object size:0x48 scope:global +_vt.8DrawHeli.Q23Sim9ITaskable = .rodata:0x803FD340; // type:object size:0x20 scope:global +_vt.8DrawHeli = .rodata:0x803FD360; // type:object size:0x68 scope:global +_vt.11DrawVehicle.11IAttachable = .rodata:0x803FD3C8; // type:object size:0x48 scope:global +_vt.11DrawVehicle.6IModel = .rodata:0x803FD410; // type:object size:0x110 scope:global +_vt.11DrawVehicle.11IRenderable = .rodata:0x803FD520; // type:object size:0x48 scope:global +_vt.11DrawVehicle.Q23Sim9ITaskable = .rodata:0x803FD568; // type:object size:0x20 scope:global +_vt.11DrawVehicle = .rodata:0x803FD588; // type:object size:0x68 scope:global +_vt.Q211DrawVehicle6Effect = .rodata:0x803FD5F0; // type:object size:0x20 scope:global +_vt.Q211DrawVehicle4Part.17ITriggerableModel = .rodata:0x803FD610; // type:object size:0x20 scope:global +_vt.Q211DrawVehicle4Part.Q214EventSequencer8IContext = .rodata:0x803FD630; // type:object size:0x20 scope:global +_vt.Q211DrawVehicle4Part.6IModel = .rodata:0x803FD650; // type:object size:0x110 scope:global +_vt.Q211DrawVehicle4Part.11IAttachable = .rodata:0x803FD760; // type:object size:0x48 scope:global +_vt.Q211DrawVehicle4Part.Q23Sim9ITaskable = .rodata:0x803FD7A8; // type:object size:0x20 scope:global +_vt.Q211DrawVehicle4Part = .rodata:0x803FD7C8; // type:object size:0x48 scope:global +_vt.13EngineTraffic.Q23Sim9ITaskable = .rodata:0x803FD810; // type:object size:0x20 scope:global +_vt.13EngineTraffic = .rodata:0x803FD830; // type:object size:0x98 scope:global +_vt.13EngineTraffic.13ITransmission = .rodata:0x803FD8C8; // type:object size:0x70 scope:global +_vt.13EngineTraffic.7IEngine = .rodata:0x803FD938; // type:object size:0x90 scope:global +_vt.13EngineTraffic.14IAttributeable = .rodata:0x803FD9C8; // type:object size:0x18 scope:global +_vt.13SimpleChopper.Q23Sim9ITaskable = .rodata:0x803FD9E0; // type:object size:0x20 scope:global +_vt.13SimpleChopper.14ISimpleChopper = .rodata:0x803FDA00; // type:object size:0x40 scope:global +_vt.13SimpleChopper = .rodata:0x803FDA40; // type:object size:0xB0 scope:global +_vt.12EngineSpline.Q23Sim9ITaskable = .rodata:0x803FDAF0; // type:object size:0x20 scope:global +_vt.12EngineSpline = .rodata:0x803FDB10; // type:object size:0x78 scope:global +_vt.12EngineSpline.13INISCarEngine = .rodata:0x803FDB88; // type:object size:0x30 scope:global +_vt.12EngineSpline.7IEngine = .rodata:0x803FDBB8; // type:object size:0x90 scope:global +_vt.12EngineSpline.13ITransmission = .rodata:0x803FDC48; // type:object size:0x70 scope:global +_vt.12EngineSpline.14IAttributeable = .rodata:0x803FDCB8; // type:object size:0x18 scope:global +_vt.14EngineDragster.11IRaceEngine = .rodata:0x803FDCD0; // type:object size:0x20 scope:global +_vt.14EngineDragster.11IInductable = .rodata:0x803FDCF0; // type:object size:0x38 scope:global +_vt.14EngineDragster.7IEngine = .rodata:0x803FDD28; // type:object size:0x90 scope:global +_vt.14EngineDragster.13ITransmission = .rodata:0x803FDDB8; // type:object size:0x70 scope:global +_vt.14EngineDragster.Q23Sim9ITaskable = .rodata:0x803FDE28; // type:object size:0x20 scope:global +_vt.14EngineDragster.11IDragEngine = .rodata:0x803FDE48; // type:object size:0x28 scope:global +_vt.14EngineDragster.17IDragTransmission = .rodata:0x803FDE70; // type:object size:0x20 scope:global +_vt.14EngineDragster.10ITiptronic = .rodata:0x803FDE90; // type:object size:0x20 scope:global +_vt.14EngineDragster.13IEngineDamage = .rodata:0x803FDEB0; // type:object size:0x40 scope:global +_vt.14EngineDragster = .rodata:0x803FDEF0; // type:object size:0xB8 scope:global +_vt.11EngineRacer.Q23Sim9ITaskable = .rodata:0x803FDFA8; // type:object size:0x20 scope:global +_vt.11EngineRacer = .rodata:0x803FDFC8; // type:object size:0xB8 scope:global +_vt.11EngineRacer.10ITiptronic = .rodata:0x803FE080; // type:object size:0x20 scope:global +_vt.11EngineRacer.13IEngineDamage = .rodata:0x803FE0A0; // type:object size:0x40 scope:global +_vt.11EngineRacer.11IInductable = .rodata:0x803FE0E0; // type:object size:0x38 scope:global +_vt.11EngineRacer.13ITransmission = .rodata:0x803FE118; // type:object size:0x70 scope:global +_vt.11EngineRacer.7IEngine = .rodata:0x803FE188; // type:object size:0x90 scope:global +_vt.11EngineRacer.11IRaceEngine = .rodata:0x803FE218; // type:object size:0x20 scope:global +_vt.11EngineRacer.14IAttributeable = .rodata:0x803FE238; // type:object size:0x18 scope:global +_vt.16SuspensionSpline.14INISCarControl = .rodata:0x803FE250; // type:object size:0x80 scope:global +_vt.16SuspensionSpline.11ISuspension = .rodata:0x803FE2D0; // type:object size:0x100 scope:global +_vt.16SuspensionSpline.Q23Sim9ITaskable = .rodata:0x803FE3D0; // type:object size:0x20 scope:global +_vt.16SuspensionSpline = .rodata:0x803FE3F0; // type:object size:0x68 scope:global +_vt.17SuspensionTrailer.11ISuspension = .rodata:0x803FE458; // type:object size:0x100 scope:global +_vt.17SuspensionTrailer.Q23Sim9ITaskable = .rodata:0x803FE558; // type:object size:0x20 scope:global +_vt.17SuspensionTrailer = .rodata:0x803FE578; // type:object size:0x60 scope:global +_vt.16SuspensionSimple.Q33Sim9Collision9IListener = .rodata:0x803FE5D8; // type:object size:0x18 scope:global +_vt.16SuspensionSimple.14IAttributeable = .rodata:0x803FE5F0; // type:object size:0x18 scope:global +_vt.16SuspensionSimple.11ISuspension = .rodata:0x803FE608; // type:object size:0x100 scope:global +_vt.16SuspensionSimple.Q23Sim9ITaskable = .rodata:0x803FE708; // type:object size:0x20 scope:global +_vt.16SuspensionSimple = .rodata:0x803FE728; // type:object size:0x60 scope:global +_vt.17SuspensionTraffic.11ISuspension = .rodata:0x803FE788; // type:object size:0x100 scope:global +_vt.17SuspensionTraffic.Q23Sim9ITaskable = .rodata:0x803FE888; // type:object size:0x20 scope:global +_vt.17SuspensionTraffic = .rodata:0x803FE8A8; // type:object size:0x60 scope:global +_vt.15SuspensionRacer.Q33Sim9Collision9IListener = .rodata:0x803FE908; // type:object size:0x18 scope:global +_vt.15SuspensionRacer.14IAttributeable = .rodata:0x803FE920; // type:object size:0x18 scope:global +_vt.15SuspensionRacer.11ISuspension = .rodata:0x803FE938; // type:object size:0x100 scope:global +_vt.15SuspensionRacer.Q23Sim9ITaskable = .rodata:0x803FEA38; // type:object size:0x20 scope:global +_vt.15SuspensionRacer = .rodata:0x803FEA58; // type:object size:0x68 scope:global +_vt.14IAttributeable = .rodata:0x803FEAC0; // type:object size:0x18 scope:global +_vt.7Chassis.Q23Sim9ITaskable = .rodata:0x803FEAD8; // type:object size:0x20 scope:global +_vt.7Chassis.11ISuspension = .rodata:0x803FEAF8; // type:object size:0x100 scope:global +_vt.7Chassis = .rodata:0x803FEBF8; // type:object size:0x60 scope:global +_vt.8InputNIS.6IInput = .rodata:0x803FEC58; // type:object size:0x98 scope:global +_vt.8InputNIS.Q23Sim9ITaskable = .rodata:0x803FECF0; // type:object size:0x20 scope:global +_vt.8InputNIS = .rodata:0x803FED10; // type:object size:0x70 scope:global +_vt.15InputPlayerDrag.6IInput = .rodata:0x803FED80; // type:object size:0x98 scope:global +_vt.15InputPlayerDrag.Q23Sim9ITaskable = .rodata:0x803FEE18; // type:object size:0x20 scope:global +_vt.15InputPlayerDrag = .rodata:0x803FEE38; // type:object size:0x78 scope:global +_vt.15InputPlayerDrag.12IInputPlayer = .rodata:0x803FEEB0; // type:object size:0x40 scope:global +_vt.11InputPlayer.Q23Sim9ITaskable = .rodata:0x803FEEF0; // type:object size:0x20 scope:global +_vt.11InputPlayer = .rodata:0x803FEF10; // type:object size:0x78 scope:global +_vt.11InputPlayer.6IInput = .rodata:0x803FEF88; // type:object size:0x98 scope:global +_vt.11InputPlayer.12IInputPlayer = .rodata:0x803FF020; // type:object size:0x40 scope:global +_vt.6PInput.Q23Sim9ITaskable = .rodata:0x803FF060; // type:object size:0x20 scope:global +_vt.6PInput.6IInput = .rodata:0x803FF080; // type:object size:0x98 scope:global +_vt.6PInput = .rodata:0x803FF118; // type:object size:0x70 scope:global +_vt.12DamageCopCar.Q214EventSequencer8IContext = .rodata:0x803FF188; // type:object size:0x20 scope:global +_vt.12DamageCopCar.18IDamageableVehicle = .rodata:0x803FF1A8; // type:object size:0x28 scope:global +_vt.12DamageCopCar = .rodata:0x803FF1D0; // type:object size:0x70 scope:global +_vt.12DamageCopCar.11IDamageable = .rodata:0x803FF240; // type:object size:0x58 scope:global +_vt.12DamageCopCar.Q23Sim9ITaskable = .rodata:0x803FF298; // type:object size:0x20 scope:global +_vt.10DamageHeli.Q214EventSequencer8IContext = .rodata:0x803FF2B8; // type:object size:0x20 scope:global +_vt.10DamageHeli.18IDamageableVehicle = .rodata:0x803FF2D8; // type:object size:0x28 scope:global +_vt.10DamageHeli.11IDamageable = .rodata:0x803FF300; // type:object size:0x58 scope:global +_vt.10DamageHeli.Q23Sim9ITaskable = .rodata:0x803FF358; // type:object size:0x20 scope:global +_vt.10DamageHeli = .rodata:0x803FF378; // type:object size:0x70 scope:global +_vt.14DamageDragster.10ISpikeable = .rodata:0x803FF3E8; // type:object size:0x30 scope:global +_vt.14DamageDragster.Q214EventSequencer8IContext = .rodata:0x803FF418; // type:object size:0x20 scope:global +_vt.14DamageDragster.18IDamageableVehicle = .rodata:0x803FF438; // type:object size:0x28 scope:global +_vt.14DamageDragster.11IDamageable = .rodata:0x803FF460; // type:object size:0x58 scope:global +_vt.14DamageDragster.Q23Sim9ITaskable = .rodata:0x803FF4B8; // type:object size:0x20 scope:global +_vt.14DamageDragster = .rodata:0x803FF4D8; // type:object size:0x70 scope:global +_vt.14DamageDragster.Q33Sim9Collision9IListener = .rodata:0x803FF548; // type:object size:0x18 scope:global +_vt.11DamageRacer.Q214EventSequencer8IContext = .rodata:0x803FF560; // type:object size:0x20 scope:global +_vt.11DamageRacer.Q23Sim9ITaskable = .rodata:0x803FF580; // type:object size:0x20 scope:global +_vt.11DamageRacer.18IDamageableVehicle = .rodata:0x803FF5A0; // type:object size:0x28 scope:global +_vt.11DamageRacer.10ISpikeable = .rodata:0x803FF5C8; // type:object size:0x30 scope:global +_vt.11DamageRacer.11IDamageable = .rodata:0x803FF5F8; // type:object size:0x58 scope:global +_vt.11DamageRacer = .rodata:0x803FF650; // type:object size:0x70 scope:global +_vt.10ISpikeable = .rodata:0x803FF6C0; // type:object size:0x30 scope:global +_vt.Q210RenderConn24Pkt_VehicleFragment_Open = .rodata:0x803FF6F0; // type:object size:0x40 scope:global +_vt.Q210RenderConn13Pkt_Heli_Open = .rodata:0x803FF730; // type:object size:0x40 scope:global +_vt.Q210RenderConn12Pkt_Car_Open = .rodata:0x803FF770; // type:object size:0x40 scope:global +_vt.15EffectsFragment.Q23Sim9ITaskable = .rodata:0x803FF7B0; // type:object size:0x20 scope:global +_vt.15EffectsFragment = .rodata:0x803FF7D0; // type:object size:0x90 scope:global +_vt.16EffectsSmackable.Q23Sim9ITaskable = .rodata:0x803FF860; // type:object size:0x20 scope:global +_vt.16EffectsSmackable = .rodata:0x803FF880; // type:object size:0x90 scope:global +_vt.16EffectsSmackable.Q33Sim9Collision9IListener = .rodata:0x803FF910; // type:object size:0x18 scope:global +_vt.13EffectsPlayer.Q23Sim9ITaskable = .rodata:0x803FF928; // type:object size:0x20 scope:global +_vt.13EffectsPlayer = .rodata:0x803FF948; // type:object size:0x90 scope:global +_vt.10EffectsCar.Q23Sim9ITaskable = .rodata:0x803FF9D8; // type:object size:0x20 scope:global +_vt.10EffectsCar = .rodata:0x803FF9F8; // type:object size:0x90 scope:global +_vt.14EffectsVehicle.Q23Sim9ITaskable = .rodata:0x803FFA88; // type:object size:0x20 scope:global +_vt.14EffectsVehicle = .rodata:0x803FFAA8; // type:object size:0x90 scope:global +_vt.7Effects.Q23Sim9ITaskable = .rodata:0x803FFB38; // type:object size:0x20 scope:global +_vt.7Effects.Q33Sim9Collision9IListener = .rodata:0x803FFB58; // type:object size:0x18 scope:global +_vt.7Effects = .rodata:0x803FFB70; // type:object size:0x90 scope:global +_vt.13DamageVehicle.Q33Sim9Collision9IListener = .rodata:0x803FFC00; // type:object size:0x18 scope:global +_vt.13DamageVehicle.Q214EventSequencer8IContext = .rodata:0x803FFC18; // type:object size:0x20 scope:global +_vt.13DamageVehicle.18IDamageableVehicle = .rodata:0x803FFC38; // type:object size:0x28 scope:global +_vt.13DamageVehicle.11IDamageable = .rodata:0x803FFC60; // type:object size:0x58 scope:global +_vt.13DamageVehicle.Q23Sim9ITaskable = .rodata:0x803FFCB8; // type:object size:0x20 scope:global +_vt.13DamageVehicle = .rodata:0x803FFCD8; // type:object size:0x70 scope:global +_vt.5RBCop.10IRBVehicle = .rodata:0x803FFD48; // type:object size:0x50 scope:global +_vt.5RBCop.Q217CollisionGeometry10IBoundable = .rodata:0x803FFD98; // type:object size:0x30 scope:global +_vt.5RBCop.15IDynamicsEntity = .rodata:0x803FFDC8; // type:object size:0x18 scope:global +_vt.5RBCop.14ICollisionBody = .rodata:0x803FFDE0; // type:object size:0x160 scope:global +_vt.5RBCop.10IRigidBody = .rodata:0x803FFF40; // type:object size:0x168 scope:global +_vt.5RBCop.Q23Sim9ITaskable = .rodata:0x804000A8; // type:object size:0x20 scope:global +_vt.5RBCop = .rodata:0x804000C8; // type:object size:0xC0 scope:global +_vt.9RBTrailer.10IRBVehicle = .rodata:0x80400188; // type:object size:0x50 scope:global +_vt.9RBTrailer.Q217CollisionGeometry10IBoundable = .rodata:0x804001D8; // type:object size:0x30 scope:global +_vt.9RBTrailer.15IDynamicsEntity = .rodata:0x80400208; // type:object size:0x18 scope:global +_vt.9RBTrailer.14ICollisionBody = .rodata:0x80400220; // type:object size:0x160 scope:global +_vt.9RBTrailer.10IRigidBody = .rodata:0x80400380; // type:object size:0x168 scope:global +_vt.9RBTrailer.Q23Sim9ITaskable = .rodata:0x804004E8; // type:object size:0x20 scope:global +_vt.9RBTrailer = .rodata:0x80400508; // type:object size:0xC0 scope:global +_vt.9RBTractor.13IVehicleCache = .rodata:0x804005C8; // type:object size:0x30 scope:global +_vt.9RBTractor.19IArticulatedVehicle = .rodata:0x804005F8; // type:object size:0x38 scope:global +_vt.9RBTractor.10IRBVehicle = .rodata:0x80400630; // type:object size:0x50 scope:global +_vt.9RBTractor.Q217CollisionGeometry10IBoundable = .rodata:0x80400680; // type:object size:0x30 scope:global +_vt.9RBTractor.15IDynamicsEntity = .rodata:0x804006B0; // type:object size:0x18 scope:global +_vt.9RBTractor.14ICollisionBody = .rodata:0x804006C8; // type:object size:0x160 scope:global +_vt.9RBTractor.10IRigidBody = .rodata:0x80400828; // type:object size:0x168 scope:global +_vt.9RBTractor.Q23Sim9ITaskable = .rodata:0x80400990; // type:object size:0x20 scope:global +_vt.9RBTractor = .rodata:0x804009B0; // type:object size:0xC0 scope:global +_vt.9RBVehicle.Q217CollisionGeometry10IBoundable = .rodata:0x80400A70; // type:object size:0x30 scope:global +_vt.9RBVehicle.15IDynamicsEntity = .rodata:0x80400AA0; // type:object size:0x18 scope:global +_vt.9RBVehicle.Q23Sim9ITaskable = .rodata:0x80400AB8; // type:object size:0x20 scope:global +_vt.9RBVehicle = .rodata:0x80400AD8; // type:object size:0xC0 scope:global +_vt.9RBVehicle.10IRBVehicle = .rodata:0x80400B98; // type:object size:0x50 scope:global +_vt.9RBVehicle.14ICollisionBody = .rodata:0x80400BE8; // type:object size:0x160 scope:global +_vt.9RBVehicle.10IRigidBody = .rodata:0x80400D48; // type:object size:0x168 scope:global +_vt.6IModel = .rodata:0x80400EB0; // type:object size:0x110 scope:global +_vt.18IDamageableVehicle = .rodata:0x80400FC0; // type:object size:0x28 scope:global +_vt.11IDamageable = .rodata:0x80400FE8; // type:object size:0x58 scope:global +_vt.15SimpleRigidBody.Q23Sim9ITaskable = .rodata:0x80401040; // type:object size:0x20 scope:global +_vt.15SimpleRigidBody.11ISimpleBody = .rodata:0x80401060; // type:object size:0x48 scope:global +_vt.15SimpleRigidBody = .rodata:0x804010A8; // type:object size:0x70 scope:global +_vt.15SimpleRigidBody.10IRigidBody = .rodata:0x80401118; // type:object size:0x168 scope:global +_vt.9RigidBody.Q213WCollisionMgr17ICollisionHandler = .rodata:0x80401280; // type:object size:0x18 scope:global +_vt.9RigidBody.15IDynamicsEntity = .rodata:0x80401298; // type:object size:0x18 scope:global +_vt.9RigidBody.Q23Sim9ITaskable = .rodata:0x804012B0; // type:object size:0x20 scope:global +_vt.9RigidBody.10IRigidBody = .rodata:0x804012D0; // type:object size:0x168 scope:global +_vt.9RigidBody.Q217CollisionGeometry10IBoundable = .rodata:0x80401438; // type:object size:0x30 scope:global +_vt.9RigidBody.Q28Dynamics7IEntity = .rodata:0x80401468; // type:object size:0x80 scope:global +_vt.9RigidBody.14ICollisionBody = .rodata:0x804014E8; // type:object size:0x160 scope:global +_vt.9RigidBody = .rodata:0x80401648; // type:object size:0xC0 scope:global +_vt.15IDynamicsEntity = .rodata:0x80401708; // type:object size:0x18 scope:global +_vt.Q213WCollisionMgr17ICollisionHandler = .rodata:0x80401720; // type:object size:0x18 scope:global +_vt.10IRigidBody = .rodata:0x80401738; // type:object size:0x168 scope:global +_vt.11ISimpleBody = .rodata:0x804018A0; // type:object size:0x48 scope:global +_vt.14ICollisionBody = .rodata:0x804018E8; // type:object size:0x160 scope:global +_vt.19IArticulatedVehicle = .rodata:0x80401A48; // type:object size:0x38 scope:global +_vt.11IRaceEngine = .rodata:0x80401A80; // type:object size:0x20 scope:global +_vt.11IDragEngine = .rodata:0x80401AA0; // type:object size:0x28 scope:global +_vt.7IEngine = .rodata:0x80401AC8; // type:object size:0x90 scope:global +_vt.11IInductable = .rodata:0x80401B58; // type:object size:0x38 scope:global +_vt.10ITiptronic = .rodata:0x80401B90; // type:object size:0x20 scope:global +_vt.13ITransmission = .rodata:0x80401BB0; // type:object size:0x70 scope:global +_vt.12IInputPlayer = .rodata:0x80401C20; // type:object size:0x40 scope:global +_vt.Q28Dynamics7IEntity = .rodata:0x80401C60; // type:object size:0x80 scope:global +SmoothRPMDecel = .rodata:0x804020F4; // type:object size:0x8 scope:local +FEngDiscErrorPackage = .rodata:0x80403B1C; // type:object size:0xE scope:local +PADMASKS = .rodata:0x80403B2C; // type:object size:0x10 scope:local +_vt.16GameplayActivity.11IAttachable = .rodata:0x80404B70; // type:object size:0x48 scope:global +_vt.16GameplayActivity.Q23Sim9IActivity = .rodata:0x80404BB8; // type:object size:0x38 scope:global +_vt.16GameplayActivity.Q23Sim9ITaskable = .rodata:0x80404BF0; // type:object size:0x20 scope:global +_vt.16GameplayActivity = .rodata:0x80404C10; // type:object size:0x20 scope:global +_vt.11NISActivity.13IVehicleCache = .rodata:0x80404C30; // type:object size:0x30 scope:global +_vt.11NISActivity.Q214EventSequencer8IContext = .rodata:0x80404C60; // type:object size:0x20 scope:global +_vt.11NISActivity.4INIS = .rodata:0x80404C80; // type:object size:0xE0 scope:global +_vt.11NISActivity.11IAttachable = .rodata:0x80404D60; // type:object size:0x48 scope:global +_vt.11NISActivity.Q23Sim9IActivity = .rodata:0x80404DA8; // type:object size:0x38 scope:global +_vt.11NISActivity.Q23Sim9ITaskable = .rodata:0x80404DE0; // type:object size:0x20 scope:global +_vt.11NISActivity = .rodata:0x80404E00; // type:object size:0x20 scope:global +_vt.16CAnimMomentScene = .rodata:0x80404E20; // type:object size:0x80 scope:global +_vt.10CareerGame.10IGameState = .rodata:0x80404EA0; // type:object size:0x28 scope:global +_vt.10CareerGame.13IVehicleCache = .rodata:0x80404EC8; // type:object size:0x30 scope:global +_vt.10CareerGame.Q23Sim13IStateManager = .rodata:0x80404EF8; // type:object size:0x28 scope:global +_vt.10CareerGame.Q23Sim12ITimeManager = .rodata:0x80404F20; // type:object size:0x20 scope:global +_vt.10CareerGame.11IAttachable = .rodata:0x80404F40; // type:object size:0x48 scope:global +_vt.10CareerGame.Q23Sim9IActivity = .rodata:0x80404F88; // type:object size:0x38 scope:global +_vt.10CareerGame.Q23Sim9ITaskable = .rodata:0x80404FC0; // type:object size:0x20 scope:global +_vt.10CareerGame = .rodata:0x80404FE0; // type:object size:0x20 scope:global +_vt.9QuickGame.10IGameState = .rodata:0x80405000; // type:object size:0x28 scope:global +_vt.9QuickGame.13IVehicleCache = .rodata:0x80405028; // type:object size:0x30 scope:global +_vt.9QuickGame.Q23Sim13IStateManager = .rodata:0x80405058; // type:object size:0x28 scope:global +_vt.9QuickGame.Q23Sim12ITimeManager = .rodata:0x80405080; // type:object size:0x20 scope:global +_vt.9QuickGame.11IAttachable = .rodata:0x804050A0; // type:object size:0x48 scope:global +_vt.9QuickGame.Q23Sim9IActivity = .rodata:0x804050E8; // type:object size:0x38 scope:global +_vt.9QuickGame.Q23Sim9ITaskable = .rodata:0x80405120; // type:object size:0x20 scope:global +_vt.9QuickGame = .rodata:0x80405140; // type:object size:0x20 scope:global +_vt.10IGameState = .rodata:0x80405160; // type:object size:0x28 scope:global +_vt.4INIS = .rodata:0x80405188; // type:object size:0xE0 scope:global +_vt.11LocalPlayer = .rodata:0x80405268; // type:object size:0x28 scope:global +_vt.11LocalPlayer.Q23Sim9ITaskable = .rodata:0x80405290; // type:object size:0x20 scope:global +_vt.11LocalPlayer.Q33Sim9Collision9IListener = .rodata:0x804052B0; // type:object size:0x18 scope:global +_vt.11LocalPlayer.11IAttachable = .rodata:0x804052C8; // type:object size:0x48 scope:global +_vt.11LocalPlayer.Q23Sim7IEntity = .rodata:0x80405310; // type:object size:0x60 scope:global +_vt.11LocalPlayer.7IPlayer = .rodata:0x80405370; // type:object size:0xB8 scope:global +_vt.9SimSystem = .rodata:0x80405428; // type:object size:0x20 scope:global +_vt.Q29WorldConn15Pkt_Effect_Open = .rodata:0x80405448; // type:object size:0x40 scope:global +_vt.Q29WorldConn15Pkt_Effect_Send = .rodata:0x80405488; // type:object size:0x40 scope:global +_vt.Q23Sim5Model.Q214EventSequencer8IContext = .rodata:0x804054C8; // type:object size:0x20 scope:global +_vt.Q23Sim5Model.6IModel = .rodata:0x804054E8; // type:object size:0x110 scope:global +_vt.Q23Sim5Model.11IAttachable = .rodata:0x804055F8; // type:object size:0x48 scope:global +_vt.Q23Sim5Model.Q23Sim9ITaskable = .rodata:0x80405640; // type:object size:0x20 scope:global +_vt.Q23Sim5Model = .rodata:0x80405660; // type:object size:0x48 scope:global +_vt.Q33Sim5Model6Effect = .rodata:0x804056A8; // type:object size:0x20 scope:global +_vt.Q23Sim6Effect = .rodata:0x804056C8; // type:object size:0x20 scope:global +_vt.Q23Sim6Entity.11IAttachable = .rodata:0x804056E8; // type:object size:0x48 scope:global +_vt.Q23Sim6Entity.Q23Sim7IEntity = .rodata:0x80405730; // type:object size:0x60 scope:global +_vt.Q23Sim6Entity.Q23Sim9ITaskable = .rodata:0x80405790; // type:object size:0x20 scope:global +_vt.Q23Sim6Entity = .rodata:0x804057B0; // type:object size:0x28 scope:global +_vt.Q23Sim10Connection = .rodata:0x804057D8; // type:object size:0x28 scope:global +_vt.Q23Sim13IStateManager = .rodata:0x80405800; // type:object size:0x28 scope:global +_vt.Q23Sim12ITimeManager = .rodata:0x80405828; // type:object size:0x20 scope:global +_vt.Q23Sim8Activity.11IAttachable = .rodata:0x80405848; // type:object size:0x48 scope:global +_vt.Q23Sim8Activity.Q23Sim9IActivity = .rodata:0x80405890; // type:object size:0x38 scope:global +_vt.Q23Sim8Activity.Q23Sim9ITaskable = .rodata:0x804058C8; // type:object size:0x20 scope:global +_vt.Q23Sim8Activity = .rodata:0x804058E8; // type:object size:0x20 scope:global +_vt.Q23Sim9IActivity = .rodata:0x80405908; // type:object size:0x38 scope:global +_vt.Q23Sim6Object.Q23Sim9ITaskable = .rodata:0x80405940; // type:object size:0x20 scope:global +_vt.Q23Sim6Object = .rodata:0x80405960; // type:object size:0x20 scope:global +_vt.Q23Sim9ITaskable = .rodata:0x80405980; // type:object size:0x20 scope:global +_vt.Q23Sim12IServiceable = .rodata:0x804059A0; // type:object size:0x20 scope:global +_vt.Q23Sim7IEntity = .rodata:0x804059C0; // type:object size:0x60 scope:global +_vt.7IPlayer = .rodata:0x80405A20; // type:object size:0xB8 scope:global +_vt.Q23Sim11Attachments = .rodata:0x80405AD8; // type:object size:0x18 scope:global +_vt.Q33UTL11Collectionst8_Storage2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei434 = .rodata:0x80405BD0; // type:object size:0x40 scope:global +_vt.Q33UTL11Collectionst8_Storage2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei8 = .rodata:0x80405C10; // type:object size:0x40 scope:global +_vt.Q33UTL11Collectionst8_Storage2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei40 = .rodata:0x80405C50; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei434i16 = .rodata:0x80405C90; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434_9Collector5_Nodei16 = .rodata:0x80405CD0; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei8i16 = .rodata:0x80405D10; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8_9Collector5_Nodei16 = .rodata:0x80405D50; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei40i16 = .rodata:0x80405D90; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZQ53UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40_9Collector5_Nodei16 = .rodata:0x80405DD0; // type:object size:0x40 scope:global +speed_test.28362 = .rodata:0x804074A4; // type:object size:0x2C scope:local +SPEECHFLOW_DISPLAY = .rodata:0x80407A7C; // type:object size:0x4 scope:global +_7SoundAI.heat_cutoffs = .rodata:0x80407A80; // type:object size:0x20 scope:global +_vt.Q26Speech9MusicFlow = .rodata:0x80407CD8; // type:object size:0x58 scope:global +_vt.Q26Speech13RoadblockFlow = .rodata:0x80407D30; // type:object size:0x58 scope:global +_vt.Q26Speech12StrategyFlow = .rodata:0x80407D88; // type:object size:0xA0 scope:global +_vt.Q26Speech11PursuitFlow = .rodata:0x80407E28; // type:object size:0x58 scope:global +_vt.Q26Speech5Cache = .rodata:0x80407E80; // type:object size:0x18 scope:global +_vt.Q26Speech13SpchSampleMap = .rodata:0x80407E98; // type:object size:0x18 scope:global +_vt.Q26Speech10SED_NISSFX = .rodata:0x80407EB0; // type:object size:0xA8 scope:global +_vt.13EAXAirSupport = .rodata:0x80407F58; // type:object size:0x450 scope:global +_vt.11EAXDispatch = .rodata:0x804083A8; // type:object size:0x110 scope:global +_vt.6EAXCop = .rodata:0x804084B8; // type:object size:0x420 scope:global +_vt.12EAXCharacter = .rodata:0x804088D8; // type:object size:0x110 scope:global +_vt.7SoundAI.Q33Sim9Collision9IListener = .rodata:0x804089E8; // type:object size:0x18 scope:global +_vt.7SoundAI.11IAttachable = .rodata:0x80408A00; // type:object size:0x48 scope:global +_vt.7SoundAI.Q23Sim9IActivity = .rodata:0x80408A48; // type:object size:0x38 scope:global +_vt.7SoundAI.Q23Sim9ITaskable = .rodata:0x80408A80; // type:object size:0x20 scope:global +_vt.7SoundAI = .rodata:0x80408AA0; // type:object size:0x20 scope:global +_vt.Q26Speech8Observer = .rodata:0x80408AC0; // type:object size:0x60 scope:global +_vt.Q26Speech10SpeechFlow = .rodata:0x80408B20; // type:object size:0x58 scope:global +_vt.Q26Speech10GameSpeech = .rodata:0x80408B78; // type:object size:0xA8 scope:global +_vt.Q26Speech6Module = .rodata:0x80408C20; // type:object size:0xA8 scope:global +_vt.Q26Speech12observations = .rodata:0x80408CC8; // type:object size:0x18 scope:global +_vt.Q26Speech7copList = .rodata:0x80408CE0; // type:object size:0x18 scope:global +_vt.Q26Speech15SchedSpchEvents = .rodata:0x80408CF8; // type:object size:0x18 scope:global +_vt.Q26Speech15SpeechSampleVec = .rodata:0x80408D10; // type:object size:0x18 scope:global +_vt.Q26Speech12EventHistory.12AudioMemBase = .rodata:0x80408DD8; // type:object size:0x18 scope:global +_vt.Q26Speech12EventHistory = .rodata:0x80408DF0; // type:object size:0x40 scope:global +_vt.Q26Speech13SampleReqList = .rodata:0x80408E30; // type:object size:0x18 scope:global +_vt.Q26Speech13SPCHEventList = .rodata:0x80408E48; // type:object size:0x18 scope:global +_vt.Q26Speech15SpeechHashIDMap.12AudioMemBase = .rodata:0x80408E60; // type:object size:0x18 scope:global +_vt.Q26Speech15SpeechHashIDMap = .rodata:0x80408E78; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZQ26Speech11HistoryPairi264i16 = .rodata:0x80408EB8; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZQ26Speech11HistoryPairi16 = .rodata:0x80408EF8; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZQ26Speech15SpeechEventPairi264i16 = .rodata:0x80408F38; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZQ26Speech15SpeechEventPairi16 = .rodata:0x80408F78; // type:object size:0x40 scope:global +_vt.32ParameterAccessorBlendByDistance = .rodata:0x8040D190; // type:object size:0x48 scope:global +_vt.22ParameterAccessorBlend = .rodata:0x8040D1D8; // type:object size:0x48 scope:global +_vt.17ParameterAccessor = .rodata:0x8040D220; // type:object size:0x40 scope:global +_vt.19VehicleFragmentConn = .rodata:0x8040D260; // type:object size:0x28 scope:global +_vt.14HeliRenderConn = .rodata:0x8040D288; // type:object size:0x50 scope:global +_vt.13CarRenderConn.14IAttributeable = .rodata:0x8040D2D8; // type:object size:0x18 scope:global +_vt.13CarRenderConn = .rodata:0x8040D2F0; // type:object size:0x50 scope:global +_vt.17VehicleRenderConn = .rodata:0x8040D340; // type:object size:0x50 scope:global +_vt.26VehiclePartDamageBehaviour = .rodata:0x8040D390; // type:object size:0x60 scope:global +_vt.27IVehiclePartDamageBehaviour = .rodata:0x8040D3F0; // type:object size:0x60 scope:global +_vt.19SmackableRenderConn = .rodata:0x8040D450; // type:object size:0x28 scope:global +_vt.9SpaceNode = .rodata:0x8040D478; // type:object size:0x18 scope:global +_vt.Q210RenderConn21Pkt_Smackable_Service = .rodata:0x8040D490; // type:object size:0x40 scope:global +_vt.Q210RenderConn27Pkt_VehicleFragment_Service = .rodata:0x8040D4D0; // type:object size:0x40 scope:global +_vt.Q210RenderConn16Pkt_Heli_Service = .rodata:0x8040D510; // type:object size:0x40 scope:global +_vt.Q210RenderConn15Pkt_Car_Service = .rodata:0x8040D550; // type:object size:0x40 scope:global +_vt.21DebugVehicleSelection = .rodata:0x8040D590; // type:object size:0x30 scope:global +FXMarkerNameHashMappings = .rodata:0x8040DCC4; // type:object size:0x230 scope:local +TweakBrakeMarkerY = .rodata:0x8040DEF4; // type:object size:0x8 scope:local +CarBodyLodSwapSize = .rodata:0x8040DEFC; // type:object size:0x14 scope:local +TrafficCarBodyLodSwapSize = .rodata:0x8040DF10; // type:object size:0x14 scope:local +_vt.Q43UTL11Collectionst8Listable2Z17VehicleRenderConni10_4List = .rodata:0x8040DF28; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP17VehicleRenderConni10i16 = .rodata:0x8040DF68; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP17VehicleRenderConni16 = .rodata:0x8040DFA8; // type:object size:0x40 scope:global +offsets.10648 = .rodata:0x8040E370; // type:object size:0x80 scope:local +up.24862 = .rodata:0x8040EDA0; // type:object size:0xC scope:local +up.24887 = .rodata:0x8040EDC0; // type:object size:0xC scope:local +_vt.15WorldEffectConn = .rodata:0x8040EE48; // type:object size:0x28 scope:global +_vt.13WorldBodyConn = .rodata:0x8040EE70; // type:object size:0x28 scope:global +_vt.Q29WorldConn6Server = .rodata:0x8040EE98; // type:object size:0x20 scope:global +_vt.Q29WorldConn18Pkt_Effect_Service = .rodata:0x8040EEB8; // type:object size:0x40 scope:global +_vt.Q29WorldConn16Pkt_Body_Service = .rodata:0x8040EEF8; // type:object size:0x40 scope:global +_vt.10PathFinder.11IAttachable = .rodata:0x8040EF38; // type:object size:0x48 scope:global +_vt.10PathFinder.Q23Sim9IActivity = .rodata:0x8040EF80; // type:object size:0x38 scope:global +_vt.10PathFinder.Q23Sim9ITaskable = .rodata:0x8040EFB8; // type:object size:0x20 scope:global +_vt.10PathFinder = .rodata:0x8040EFD8; // type:object size:0x20 scope:global +_vt.11AStarSearch = .rodata:0x8040EFF8; // type:object size:0x18 scope:global +_vt.8WRoadNav = .rodata:0x8040F010; // type:object size:0x18 scope:global +drivable_lanes = .rodata:0x8040F0B8; // type:object size:0x20 scope:local +selectable_lanes = .rodata:0x8040F0D8; // type:object size:0x20 scope:local +_vt.Q43UTL11Collectionst8Listable2Z9WCollideri100_4List = .rodata:0x8040F0F8; // type:object size:0x40 scope:global +_vt.Q23UTLt11FixedVector3ZP9WCollideri100i16 = .rodata:0x8040F138; // type:object size:0x40 scope:global +_vt.Q23UTLt6Vector2ZP9WCollideri16 = .rodata:0x8040F178; // type:object size:0x40 scope:global +_ctype_ = .rodata:0x8040F1D8; // type:object size:0x101 scope:global +blanks.29 = .rodata:0x8040FBB8; // type:object size:0x10 scope:local +zeroes.30 = .rodata:0x8040FBC8; // type:object size:0x10 scope:local +blanks.12 = .rodata:0x8040FC48; // type:object size:0x10 scope:local +zeroes.13 = .rodata:0x8040FC58; // type:object size:0x10 scope:local +lconv = .rodata:0x8040FCD8; // type:object size:0x30 scope:local +Zero = .rodata:0x8040FD40; // type:object size:0x10 scope:local +...rodata.0 = .rodata:0x8040FED0; // type:label scope:local +ClampRegion = .rodata:0x8040FED0; // type:object size:0xA scope:local +_vt.Q24RCMP7DECODER = .rodata:0x80410158; // type:object size:0x18 scope:global +_vt.Q24RCMP11RCMP_SYSTEM = .rodata:0x80410170; // type:object size:0x18 scope:global +_vt.18VP6_CODEC_INTERNAL = .rodata:0x80410230; // type:object size:0x40 scope:global +_vt.Q24RCMP5CODEC = .rodata:0x80410270; // type:object size:0x40 scope:global +_vt.11MyAllocator = .rodata:0x804102B0; // type:object size:0x38 scope:global +_vt.18MAD_CODEC_INTERNAL = .rodata:0x80410400; // type:object size:0x40 scope:global +_88_GLOBAL_.N.D__env_egami_rcmp_dev_source_decoder_cmn_rcmp_mad_codec_chunk_types.cppczaaaa.ChunkTypes = .rodata:0x8041045C; // type:object size:0xC scope:local +encodetbl1 = .rodata:0x80410468; // type:object size:0x5F0 scope:local +encodetbl2 = .rodata:0x80410A58; // type:object size:0x800 scope:local +quanttbl = .rodata:0x80411258; // type:object size:0x100 scope:local +zigzag = .rodata:0x80411358; // type:object size:0x100 scope:local +VP6_QThreshTable = .rodata:0x804114A8; // type:object size:0x100 scope:local +VP6_UvQThreshTable = .rodata:0x804115A8; // type:object size:0x100 scope:local +VP6_DcQuant = .rodata:0x804116A8; // type:object size:0x80 scope:global +VP6_UvDcQuant = .rodata:0x80411728; // type:object size:0x80 scope:local +dequant_index = .rodata:0x804117A8; // type:object size:0x100 scope:local +transIndexC = .rodata:0x804118A8; // type:object size:0x100 scope:local +DeblockLimitValuesV1 = .rodata:0x804119D0; // type:object size:0x100 scope:local +VP6_TokenExtraBits2 = .rodata:0x80411AF4; // type:object size:0xC0 scope:local +VP6_CoeffToBand = .rodata:0x80411BB4; // type:object size:0x104 scope:global +VP6_ModeVq = .rodata:0x80411CB8; // type:object size:0x3C0 scope:global +VP6_BaselineXmittedProbs = .rodata:0x80412078; // type:object size:0x50 scope:global +VP6_MvUpdateProbs = .rodata:0x804120C8; // type:object size:0x22 scope:global +DefaultMvShortProbs = .rodata:0x804120EA; // type:object size:0xE scope:global +DefaultMvLongProbs = .rodata:0x804120F8; // type:object size:0x10 scope:global +NearMacroBlocks = .rodata:0x80412108; // type:object size:0x60 scope:local +dequant_index = .rodata:0x80412168; // type:object size:0x100 scope:local +VP6_DcUpdateProbs = .rodata:0x80412268; // type:object size:0x16 scope:global +ScanBandUpdateProbs = .rodata:0x80412280; // type:object size:0x40 scope:global +ZrlUpdateProbs = .rodata:0x804122C0; // type:object size:0x1C scope:global +ZeroRunProbDefaults = .rodata:0x804122DC; // type:object size:0x1C scope:global +VP6_AcUpdateProbs = .rodata:0x804122F8; // type:object size:0x18C scope:global +VP6_DcNodeEqs = .rodata:0x80412484; // type:object size:0x78 scope:local +VP6_HuffTokenMinVal = .rodata:0x804124FC; // type:object size:0x30 scope:local +VP6_CoeffToHuffBand = .rodata:0x8041252C; // type:object size:0x104 scope:local +DefaultNonInterlacedScanBands = .rodata:0x80412630; // type:object size:0x40 scope:global +DefaultInterlacedScanBands = .rodata:0x80412670; // type:object size:0x40 scope:global +VP6_Mode2Frame = .rodata:0x804126B0; // type:object size:0x40 scope:global +loMaskTbl_VP60 = .rodata:0x804126F0; // type:object size:0x84 scope:local +_3Snd.gChannelToVoiceIndexLut = .rodata:0x80412908; // type:object size:0x24 scope:global +_3Snd.gAzimuthFoldDownLut = .rodata:0x80412CC8; // type:object size:0x90 scope:global +_3Snd.gAzimuthSpacingsLut = .rodata:0x80412D58; // type:object size:0x24 scope:global +_vt.Q24Csis24ICoreToIAllocatorAdaptor = .rodata:0x804130B0; // type:object size:0x28 scope:global +_vt.Q24Csis24IAllocatorToICoreAdaptor = .rodata:0x804130D8; // type:object size:0x38 scope:global +_vt.10PathToReal = .rodata:0x80413168; // type:object size:0x78 scope:global +_vt.Q24Path11IPathToReal = .rodata:0x804131E0; // type:object size:0x78 scope:global +_vt.11PathToReal6 = .rodata:0x80413278; // type:object size:0x78 scope:global +_vt.Q24Path16PathTrackSndBank = .rodata:0x80413370; // type:object size:0x138 scope:global +_vt.Q24Path18PathTrackSndStream = .rodata:0x804134A8; // type:object size:0x138 scope:global +_vt.Q24Path12PathTrackSnd = .rodata:0x804135E0; // type:object size:0x128 scope:global +_vt.Q24Path9PathToSnd = .rodata:0x80413708; // type:object size:0x30 scope:global +_vt.Q24Path10IPathToSnd = .rodata:0x80413738; // type:object size:0x30 scope:global +_vt.Q24Path10IPathTrack = .rodata:0x80413778; // type:object size:0x128 scope:global +_vt.13SizeOperation = .rodata:0x80413AE0; // type:object size:0x30 scope:global +_vt.14WriteOperation = .rodata:0x80413B10; // type:object size:0x30 scope:global +_vt.18ReadLargeOperation = .rodata:0x80413B40; // type:object size:0x30 scope:global +_vt.13ReadOperation = .rodata:0x80413B70; // type:object size:0x30 scope:global +_vt.14CloseOperation = .rodata:0x80413BA0; // type:object size:0x30 scope:global +_vt.13OpenOperation = .rodata:0x80413BD0; // type:object size:0x30 scope:global +_vt.14ExistOperation = .rodata:0x80413C00; // type:object size:0x30 scope:global +_vt.13FILEOPERATION = .rodata:0x80413C30; // type:object size:0x30 scope:global +_vt.14NullFileDriver = .rodata:0x80413C68; // type:object size:0x80 scope:global +_vt.21GcDvdFileDeviceDriver = .rodata:0x80413DB0; // type:object size:0x80 scope:global +_vt.20GcHdFileDeviceDriver = .rodata:0x80413E38; // type:object size:0x80 scope:global +_9RealShape.gTexelTypeToBpp = .rodata:0x80414010; // type:object size:0x100 scope:local +_vt.Q26Realmc9GCMessage = .rodata:0x804143E0; // type:object size:0x18 scope:global +_vt.Q26Realmc8GCDriver = .rodata:0x80414450; // type:object size:0x18 scope:global +_vt.Q26Realmc16GcFileDescriptor = .rodata:0x80414468; // type:object size:0x20 scope:global +_vt.Q26Realmc17CmnFileDescriptor = .rodata:0x80414488; // type:object size:0x20 scope:global +_vt.Q26Realmc12DeviceDriver = .rodata:0x804144A8; // type:object size:0x18 scope:global +_vt.Q26Realmc11GCInterface = .rodata:0x80414530; // type:object size:0x110 scope:global +_vt.Q26Realmc17TaskTrcDeleteFile = .rodata:0x80414640; // type:object size:0x20 scope:global +_vt.Q26Realmc15TaskTrcLoadFile = .rodata:0x80414660; // type:object size:0x20 scope:global +_vt.Q26Realmc16TaskTrcListFiles = .rodata:0x80414680; // type:object size:0x20 scope:global +_vt.Q26Realmc15TaskTrcSaveFile = .rodata:0x804146A0; // type:object size:0x20 scope:global +_vt.Q26Realmc18TaskTrcGetCardInfo = .rodata:0x804146C0; // type:object size:0x20 scope:global +_vt.Q26Realmc16TaskTrcStartGame = .rodata:0x804146E0; // type:object size:0x20 scope:global +_vt.Q26Realmc7TaskTrc = .rodata:0x80414700; // type:object size:0x20 scope:global +_vt.Q26Realmc6GcTask = .rodata:0x80414720; // type:object size:0x18 scope:global +_vt.Q26Realmc11TaskManager = .rodata:0x80414738; // type:object size:0x28 scope:global +_vt.Q26Realmc15BlockCalculator = .rodata:0x80414760; // type:object size:0x30 scope:global +_vt.Q26Realmc12InterfaceImp = .rodata:0x804147F0; // type:object size:0x110 scope:global +_vt.Q26Realmc13BaseInterface = .rodata:0x80414900; // type:object size:0xE8 scope:global +_vt.Q26Realmc18BlockCalculatorImp = .rodata:0x804149E8; // type:object size:0x30 scope:global +_vt.Q29RealInput8GcEffect = .rodata:0x80414B40; // type:object size:0x58 scope:global +_vt.Q29RealInput9EffectImp = .rodata:0x80414B98; // type:object size:0x58 scope:global +_vt.Q29RealInput9Interface = .rodata:0x80414BF0; // type:object size:0x50 scope:global +_vt.Q29RealInput8GcDevice = .rodata:0x80414C40; // type:object size:0x50 scope:global +_vt.Q29RealInput9DeviceImp = .rodata:0x80414C90; // type:object size:0x50 scope:global +_vt.Q29RealInput11GcInterface = .rodata:0x80414CE0; // type:object size:0x50 scope:global +_vt.Q29RealInput5GcPad = .rodata:0x80414D30; // type:object size:0x50 scope:global +_vt.Q29RealInput12InterfaceImp = .rodata:0x80414D80; // type:object size:0x50 scope:global +_vt.Q29RealInput6Device = .rodata:0x80414DD0; // type:object size:0x50 scope:global +_vt.Q29RealInput6Effect = .rodata:0x80414E20; // type:object size:0x48 scope:global +_vt.Q29RealInput5Event = .rodata:0x80414E68; // type:object size:0x18 scope:global +_vt.Q29RealInput10EventQueue = .rodata:0x80414E80; // type:object size:0x18 scope:global +RandomSortTCDir = .data:0x8041522C; // type:object size:0x4 scope:local +_7ICopMgr.mDisableCops = .data:0x8041525C; // type:object size:0x4 scope:global +_12AICopManager.mCopMinSpawnDist = .data:0x80415264; // type:object size:0x4 scope:global +_12AICopManager.mCopMaxSpawnDist = .data:0x80415268; // type:object size:0x4 scope:global +TheOneCopManager = .data:0x8041526C; // type:object size:0x4 scope:global +ebrakegoals = .data:0x80415270; // type:object size:0x4 scope:global +coebrakegoals = .data:0x80415274; // type:object size:0x8 scope:global +ramgoals = .data:0x8041527C; // type:object size:0x8 scope:global +hrblockgoals = .data:0x80415284; // type:object size:0x10 scope:global +crossfollowgoals = .data:0x80415294; // type:object size:0x4 scope:global +crossbrakegoals = .data:0x80415298; // type:object size:0x4 scope:global +crossvblockgoals = .data:0x8041529C; // type:object size:0xC scope:global +_Q23SAPt4Grid1Z11AIAvoidable.mRootX = .data:0x804152AC; // type:object size:0x4 scope:global +_Q23SAPt4Grid1Z11AIAvoidable.mRootZ = .data:0x804152B0; // type:object size:0x4 scope:global +aAIStoppingDist = .data:0x804152B4; // type:object size:0x8 scope:global +brakeLeft.32036 = .data:0x804152BC; // type:object size:0x4 scope:local +NeverIgnoreHeliSheet = .data:0x804152C4; // type:object size:0x4 scope:global +Exit_Height = .data:0x804152CC; // type:object size:0x4 scope:global +brakeLeft.32301 = .data:0x804152D0; // type:object size:0x4 scope:local +brakeLeft.32341 = .data:0x804152D4; // type:object size:0x4 scope:local +kActionJackKnifeSpeed = .data:0x804152D8; // type:object size:0x4 scope:global +aNosScaleData = .data:0x804152E4; // type:object size:0x8 scope:global +aSpeedScaleData = .data:0x804152EC; // type:object size:0x8 scope:global +aSpeedScaleDataDrag = .data:0x804152F4; // type:object size:0x8 scope:global +aAccelScaleData = .data:0x804152FC; // type:object size:0x8 scope:global +aAccelScaleDataDrag = .data:0x80415304; // type:object size:0x8 scope:global +AiCatchupAccelerationData = .data:0x8041530C; // type:object size:0x10 scope:global +aCorneringScaleData = .data:0x8041531C; // type:object size:0x8 scope:global +aAiNavLookAheadData = .data:0x80415324; // type:object size:0x8 scope:global +aAiDragNavLookAheadData = .data:0x8041532C; // type:object size:0x8 scope:global +aAiSeparationMin = .data:0x80415334; // type:object size:0x14 scope:global +aHumanNavLookAheadData = .data:0x80415354; // type:object size:0x8 scope:global +aHumanDragNavLookAheadData = .data:0x8041535C; // type:object size:0x8 scope:global +bToggleAiControl = .data:0x80415364; // type:object size:0x4 scope:global +TotalWalkPathTime = .data:0x80415368; // type:object size:0x4 scope:global +_13AIPerpVehicle.mStagger = .data:0x8041536C; // type:object size:0x4 scope:global +nThrottleIntegralTerms = .data:0x80415378; // type:object size:0x4 scope:global +nThrottleDerivativeTerms = .data:0x8041537C; // type:object size:0x4 scope:global +PidProportionalData = .data:0x80415380; // type:object size:0x28 scope:global +PidDerivativeData = .data:0x804153A8; // type:object size:0x28 scope:global +PidIntegralData = .data:0x804153D0; // type:object size:0x28 scope:global +_16AIVehicleTraffic.mStagger = .data:0x80415408; // type:object size:0x4 scope:global +_16AIVehiclePursuit.mStagger = .data:0x8041540C; // type:object size:0x4 scope:global +gHeliVehicle = .data:0x80415410; // type:object size:0x4 scope:global +kHeliVisualSphere = .data:0x80415418; // type:object size:0x4 scope:global +height.36345 = .data:0x80415424; // type:object size:0x4 scope:local +bIgnoreHeliSheet = .data:0x80415428; // type:object size:0x4 scope:global +_Q43UTL3COMt7Factory3ZP14AIActionParamsZ8AIActionZ6UCrc32_9Prototype.mHead = .data:0x8041542C; // type:object size:0x4 scope:global +_Q43UTL3COMt7Factory3ZP8ISimableZ6AIGoalZ6UCrc32_9Prototype.mHead = .data:0x80415430; // type:object size:0x4 scope:global +kBustedHUDTime = .data:0x80415434; // type:object size:0x4 scope:global +_14AISpawnManager.mMaxGatherDist = .data:0x8041547C; // type:object size:0x4 scope:global +_14AISpawnManager.mNumSpawnSegments = .data:0x80415480; // type:object size:0x4 scope:global +lastSpawnLane.38662 = .data:0x80415484; // type:object size:0x4 scope:local +currentSegmentIndex.38672 = .data:0x80415488; // type:object size:0x4 scope:local +spawnSegmentIndex.38673 = .data:0x8041548C; // type:object size:0x4 scope:local +currentSpawnIndex.38674 = .data:0x80415490; // type:object size:0x4 scope:local +_Q33UTL11Collectionst9Singleton1Z3Gps.mInstance = .data:0x80415494; // type:object size:0x4 scope:global +AnimBankSlotPool = .data:0x804154C0; // type:object size:0x4 scope:global +AnimBankSlotPoolInitialized = .data:0x804154C4; // type:object size:0x4 scope:global +SpecialCarList1 = .data:0x804154C8; // type:object size:0x20 scope:global +SpecialCarList2 = .data:0x804154E8; // type:object size:0x20 scope:global +SpecialCarList3 = .data:0x80415508; // type:object size:0x20 scope:global +SpecialCarList4 = .data:0x80415528; // type:object size:0x20 scope:global +SpecialCarList5 = .data:0x80415548; // type:object size:0x20 scope:global +SpecialCarList6 = .data:0x80415568; // type:object size:0x20 scope:global +SpecialCarList7 = .data:0x80415588; // type:object size:0x20 scope:global +SpecialCarList8 = .data:0x804155A8; // type:object size:0x20 scope:global +SpecialCarList9 = .data:0x804155C8; // type:object size:0x20 scope:global +TheAnimCandidateData = .data:0x804155EC; // type:object size:0x4 scope:global +AngleBonusValue = .data:0x804155F0; // type:object size:0x4 scope:global +g_TriggerMomentNISTime = .data:0x80415670; // type:object size:0x4 scope:global +Tweak_TriggerMomentAlways = .data:0x80415674; // type:object size:0x4 scope:global +AnimCtrlSlotPool = .data:0x80415680; // type:object size:0x4 scope:global +Anim_Apply_Trans = .data:0x80415688; // type:object size:0x4 scope:global +Anim_Apply_Rots = .data:0x8041568C; // type:object size:0x4 scope:global +Anim_Apply_Scales = .data:0x80415690; // type:object size:0x4 scope:global +TheAnimDirectory = .data:0x80415694; // type:object size:0x4 scope:global +RenderCharacterShadows = .data:0x80415698; // type:object size:0x4 scope:global +CharacterShadowTexture = .data:0x8041569C; // type:object size:0x4 scope:global +BoneMap = .data:0x804156A0; // type:object size:0x50 scope:global +DisableWorldAnimations = .data:0x804156F0; // type:object size:0x4 scope:global +NumWorldAnimEntities = .data:0x804156F4; // type:object size:0x4 scope:local +MaxNumWorldAnimEntities = .data:0x804156F8; // type:object size:0x4 scope:local +NumWorldAnimEntityTrees = .data:0x804156FC; // type:object size:0x4 scope:local +MaxNumWorldAnimEntityTrees = .data:0x80415700; // type:object size:0x4 scope:local +NumWorldAnimEntityTreeInfos = .data:0x80415704; // type:object size:0x4 scope:local +MaxNumWorldAnimEntityTreeInfos = .data:0x80415708; // type:object size:0x4 scope:local +gNISSceneAngle = .data:0x8041570C; // type:object size:0x2 scope:global +_11CAnimPlayer.m_audioQueued = .data:0x80415710; // type:object size:0x4 scope:global +_13CAnimSettings.mDebugPrintEnabled = .data:0x80415714; // type:object size:0x4 scope:global +_11CAnimMarker.mMarkerHash_StartCountdown = .data:0x80415718; // type:object size:0x4 scope:global +gAnimLoader_InProgress = .data:0x8041571C; // type:object size:0x4 scope:local +gAnimLoader_CurSharedFilePosition = .data:0x80415720; // type:object size:0x4 scope:local +gAnimLoader_CurSceneFilePosition = .data:0x80415724; // type:object size:0x4 scope:local +gAnimLoader_MemPointer = .data:0x80415728; // type:object size:0x4 scope:local +gAnimLoader_MovingPointer = .data:0x8041572C; // type:object size:0x4 scope:local +gAnimLoader_UsingMemoryPool = .data:0x80415730; // type:object size:0x4 scope:local +gAnimCfg_Small_NIS_Size = .data:0x80415734; // type:object size:0x4 scope:global +gCopCarDoorAnim_CurrentTime = .data:0x80415738; // type:object size:0x10 scope:global +gCopCarDoorAnim_AnimLength = .data:0x80415748; // type:object size:0x10 scope:global +gCopCarDoorAnim_StartPos = .data:0x80415758; // type:object size:0x10 scope:global +gCopCarDoorAnim_Delta = .data:0x80415768; // type:object size:0x10 scope:global +AnimPartSlotPool = .data:0x80415778; // type:object size:0x4 scope:global +bEnableNisTextDisplay = .data:0x80415784; // type:object size:0x4 scope:global +_26CAnimEntityCreationContext.mIsRaceStart = .data:0x80415788; // type:object size:0x4 scope:global +_10CAnimScene.mHandleCounter = .data:0x80415790; // type:object size:0x4 scope:global +Car_Name = .data:0x80415794; // type:object size:0x100 scope:global +AnimSkelSlotPool = .data:0x80415894; // type:object size:0x4 scope:global +AnimSkelSlotPoolInitialized = .data:0x80415898; // type:object size:0x4 scope:global +PrintWorldAnimationStuff = .data:0x8041589C; // type:object size:0x4 scope:global +NumWorldAnimCtrls = .data:0x804158A4; // type:object size:0x4 scope:local +MaxNumWorldAnimCtrls = .data:0x804158A8; // type:object size:0x4 scope:local +NumWorldAnimInstanceEntries = .data:0x804158AC; // type:object size:0x4 scope:local +MaxWorldAnimInstances = .data:0x804158B0; // type:object size:0x4 scope:local +_6Attrib.gSearchCacheLines = .data:0x804158D8; // type:object size:0x4 scope:local +_6Attrib.gTotalAttribNodes = .data:0x804158DC; // type:object size:0x4 scope:local +_6Attrib.gByValueBytes = .data:0x804158E0; // type:object size:0x4 scope:local +_6Attrib.gDatabaseSelfDestruct = .data:0x804158E8; // type:object size:0x4 scope:local +_Q26Attrib8Database.sThis = .data:0x804158EC; // type:object size:0x4 scope:global +_6Attrib.gDatabaseExportPolicy = .data:0x804158F0; // type:object size:0x4 scope:local +_6Attrib.gClassExportPolicy = .data:0x804158F4; // type:object size:0x4 scope:local +_6Attrib.gCollectionExportPolicy = .data:0x804158F8; // type:object size:0x4 scope:local +_6Attrib.gExportPolicies = .data:0x804158FC; // type:object size:0x4 scope:local +gGUKindexer.4751 = .data:0x80415900; // type:object size:0x4 scope:local +_6Attrib.gPeakMemory = .data:0x80415904; // type:object size:0x4 scope:local +_6Attrib.gCurrMemory = .data:0x80415908; // type:object size:0x4 scope:local +EnableReleasePrintf = .data:0x80415938; // type:object size:0x4 scope:global +UserPutStringFunction = .data:0x8041593C; // type:object size:0x4 scope:global +InUserPutStringFunction = .data:0x80415940; // type:object size:0x4 scope:global +bPNodeSlotPool = .data:0x8041594C; // type:object size:0x4 scope:global +bPListWantToClose = .data:0x80415950; // type:object size:0x4 scope:global +bDefaultSeed = .data:0x80415958; // type:object size:0x4 scope:global +bASinTable = .data:0x8041595C; // type:object size:0x688 scope:global +bFastATanTable = .data:0x80415FE4; // type:object size:0x204 scope:global +bFixATanTableLow = .data:0x804161EA; // type:object size:0x102 scope:global +bFixATanTableHigh = .data:0x804162EC; // type:object size:0x102 scope:global +_nan_table = .data:0x804163F0; // type:object size:0x10 scope:global +nullstr = .data:0x80416400; // type:object size:0x4 scope:local +badptr = .data:0x80416404; // type:object size:0x4 scope:local +g_locale = .data:0x80416408; // type:object size:0x3 scope:local +bPutCharBufferPos = .data:0x8041640C; // type:object size:0x4 scope:local +bVSPrintfTime = .data:0x80416410; // type:object size:0x4 scope:global +bVSPrintfCount = .data:0x80416414; // type:object size:0x4 scope:global +bMemoryAutomaticVerifyPoolIntegrity = .data:0x80416418; // type:object size:0x4 scope:global +bMemoryRandomFillPattern = .data:0x80416430; // type:object size:0x4 scope:global +bMemoryTracing = .data:0x80416438; // type:object size:0x4 scope:global +bMemoryBreakOnAllocationNumber = .data:0x8041643C; // type:object size:0x4 scope:global +bMemoryAllocationNumber = .data:0x80416440; // type:object size:0x4 scope:global +found_memory_stomp_once.3842 = .data:0x80416448; // type:object size:0x4 scope:local +pTraceDebugText = .data:0x80416450; // type:object size:0x4 scope:global +TraceDebugLine = .data:0x80416454; // type:object size:0x4 scope:global +MemoryInitialized = .data:0x80416458; // type:object size:0x4 scope:global +MemoryPoolZeroSize = .data:0x8041645C; // type:object size:0x4 scope:global +bMemoryPersistentPoolNumber = .data:0x80416460; // type:object size:0x4 scope:global +_6Camera.StopUpdating = .data:0x80416488; // type:object size:0x4 scope:global +cameralink.3469 = .data:0x8041648C; // type:object size:0x4 scope:local +bStreamingPositionFromICE = .data:0x804164C4; // type:object size:0x4 scope:global +JR2ServerExists = .data:0x804164CC; // type:object size:0x4 scope:global +WeHaveCheckedIfJR2ServerExists = .data:0x804164D0; // type:object size:0x4 scope:global +LastUpdateTimeCaffeine = .data:0x804164D4; // type:object size:0x4 scope:global +LastUpdateTimeJR2 = .data:0x804164D8; // type:object size:0x4 scope:global +CameraDebugWatchCar = .data:0x8041652C; // type:object size:0x4 scope:global +Tweak_EnableICEAuthoring = .data:0x80416530; // type:object size:0x4 scope:global +Tweak_ForceICEReplay = .data:0x80416534; // type:object size:0x4 scope:global +TheAvoidables = .data:0x80416550; // type:object size:0x4 scope:global +_Q43UTL3COMt7Factory3ZPQ28CameraAI8DirectorZQ28CameraAI6ActionZ6UCrc32_9Prototype.mHead = .data:0x80416554; // type:object size:0x4 scope:global +kCinematicMomementSeconds = .data:0x8041655C; // type:object size:0x4 scope:local +gCinematicMomementCamera = .data:0x80416560; // type:object size:0x4 scope:global +gGameBreakerCamera = .data:0x80416564; // type:object size:0x4 scope:global +gCamCloseToRoadBlock = .data:0x80416568; // type:object size:0x4 scope:global +old_pov.29797 = .data:0x8041656C; // type:object size:0x4 scope:local +mToggleCar = .data:0x80416570; // type:object size:0x4 scope:global +mToggleCarList = .data:0x80416574; // type:object size:0x4 scope:global +CubicBumper = .data:0x80416578; // type:object size:0x160 scope:global +CubicHood = .data:0x804166D8; // type:object size:0x160 scope:global +CubicOutsideNear = .data:0x80416838; // type:object size:0x160 scope:global +CubicOutsideFar = .data:0x80416998; // type:object size:0x160 scope:global +CubicSuperFar = .data:0x80416AF8; // type:object size:0x160 scope:global +CubicDrift = .data:0x80416C58; // type:object size:0x160 scope:global +CubicPursuit = .data:0x80416DB8; // type:object size:0x160 scope:global +PovHandheldNoiseScale = .data:0x80416F18; // type:object size:0x1C scope:global +PovHandheldChopperScale = .data:0x80416F34; // type:object size:0x1C scope:global +PovVelocityNoiseScale = .data:0x80416F50; // type:object size:0x1C scope:global +PovTerrainNoiseScale = .data:0x80416F6C; // type:object size:0x1C scope:global +CameraAccelerationCurve = .data:0x80416F88; // type:object size:0x14 scope:global +CameraGearChangingCurve = .data:0x80416F9C; // type:object size:0x24 scope:global +CameraImpcatCurveH = .data:0x80416FC0; // type:object size:0x14 scope:global +CameraImpcatCurveV = .data:0x80416FD4; // type:object size:0x14 scope:global +TrackCopCameraMover_IdleSim = .data:0x80416FF0; // type:object size:0x4 scope:global +gDebugCameraSetEye = .data:0x80416FF8; // type:object size:0x4 scope:global +gDebugCameraSetLook = .data:0x80416FFC; // type:object size:0x4 scope:global +_21DebugWorldCameraMover.TurboSpeed = .data:0x80417000; // type:object size:0x4 scope:global +_21DebugWorldCameraMover.SuperTurboSpeed = .data:0x80417004; // type:object size:0x4 scope:global +_21DebugWorldCameraMover.TurboOn = .data:0x8041700C; // type:object size:0x4 scope:global +_21DebugWorldCameraMover.SuperTurboOn = .data:0x80417010; // type:object size:0x4 scope:global +fDebugCameraInputData = .data:0x80417014; // type:object size:0x28 scope:global +RVMnearz = .data:0x8041703C; // type:object size:0x4 scope:global +RVMfarz = .data:0x80417040; // type:object size:0x4 scope:global +bMirrorICEData = .data:0x80417044; // type:object size:0x4 scope:global +bUseOldDutch = .data:0x80417048; // type:object size:0x4 scope:global +GenericCategoryNames = .data:0x8041704C; // type:object size:0x8 scope:local +gIceOverlays = .data:0x8041705C; // type:object size:0x28 scope:global +gOverlay = .data:0x80417084; // type:object size:0x1 scope:local +_Q38Dynamics12Articulation5Joint.mNextHandle = .data:0x804170C8; // type:object size:0x4 scope:global +_13EAGL4Internal.gEAGL4ANIM_Malloc = .data:0x804170F4; // type:object size:0x4 scope:global +_13EAGL4Internal.gEAGL4ANIM_Free = .data:0x804170F8; // type:object size:0x4 scope:global +_13EAGL4Internal.EAGL4Malloc = .data:0x804170FC; // type:object size:0x4 scope:global +_13EAGL4Internal.EAGL4Free = .data:0x80417100; // type:object size:0x4 scope:global +_5EAGL4.hashhead = .data:0x80417108; // type:object size:0x4 scope:local +_5EAGL4.INIT_TABLE_SIZE = .data:0x80417114; // type:object size:0x4 scope:global +_Q29EAGL4Anim6FnAnim.gReverseDeltaSumEnabled = .data:0x80417118; // type:object size:0x4 scope:global +_Q29EAGL4Anim13FnAnimFactory.mpFactory = .data:0x8041711C; // type:object size:0x4 scope:global +i.6840 = .data:0x80417120; // type:object size:0x4 scope:local +_Q29EAGL4Anim17MemoryPoolManager.gDefaultMemoryManager = .data:0x80417124; // type:object size:0x4 scope:global +_Q29EAGL4Anim17MemoryPoolManager.gMemoryManager = .data:0x80417128; // type:object size:0x4 scope:global +_Q29EAGL4Anim17MemoryPoolManager.gFreeListSize = .data:0x8041712C; // type:object size:0x32 scope:global +_9EAGL4Anim.MatrixMultiply = .data:0x80417160; // type:object size:0x4 scope:global +_Q29EAGL4Anim17MemoryPoolManager.gMemoryPool = .data:0x80417168; // type:object size:0x4 scope:global +_Q29EAGL4Anim17MemoryPoolManager.gMemoryPoolFree = .data:0x8041716C; // type:object size:0x4 scope:global +_Q29EAGL4Anim17MemoryPoolManager.gMemoryPoolSize = .data:0x80417170; // type:object size:0x4 scope:global +_Q29EAGL4Anim17MemoryPoolManager.gMaxIdx = .data:0x80417174; // type:object size:0x2 scope:global +_Q29EAGL4Anim17MemoryPoolManager.gFreeList = .data:0x80417178; // type:object size:0x68 scope:global +_Q29EAGL4Anim17MemoryPoolManager.gSizeFreeList = .data:0x804171E0; // type:object size:0x400 scope:global +PlayerUpgrade.14976 = .data:0x80417634; // type:object size:0x4 scope:local +AudioMemoryPool = .data:0x80417650; // type:object size:0x4 scope:global +gbHasStartNewGamePlayBeenProcessed = .data:0x80417690; // type:object size:0x4 scope:global +gnHasStartLoadFEBeenProcessed = .data:0x80417694; // type:object size:0x4 scope:global +gIsPauseForPause = .data:0x80417698; // type:object size:0x4 scope:global +g_pEAXSound = .data:0x8041769C; // type:object size:0x4 scope:global +g_pcsCSISAllocString = .data:0x804176A8; // type:object size:0x4 scope:global +NullPointer = .data:0x804176AC; // type:object size:0x4 scope:global +g_fMasterSFXVolume = .data:0x804176B0; // type:object size:0x4 scope:global +g_iMasterSFXVolume = .data:0x804176B4; // type:object size:0x4 scope:global +SoundRandomSeed = .data:0x804176DC; // type:object size:0x4 scope:global +gb_DORESTART_RACE = .data:0x804176E0; // type:object size:0x4 scope:global +gb_Is321 = .data:0x804176E4; // type:object size:0x4 scope:global +g_ActiveCtlStates = .data:0x804176E8; // type:object size:0x4 scope:global +g_PrevActiveCtlStates = .data:0x804176EC; // type:object size:0x4 scope:global +g_ActiveSFXStates = .data:0x804176F0; // type:object size:0x4 scope:global +g_PrevActiveSFXStates = .data:0x804176F4; // type:object size:0x4 scope:global +g_CtlStateActions = .data:0x804176F8; // type:object size:0x48 scope:global +g_SliderValue = .data:0x80417740; // type:object size:0x4 scope:global +bIsAnFEToIngameTransition = .data:0x80417744; // type:object size:0x4 scope:global +bHasStartNewGameOccured = .data:0x80417748; // type:object size:0x4 scope:global +bIsMapInQueuedFileLoad = .data:0x8041774C; // type:object size:0x4 scope:global +DisableSoundUpdate = .data:0x8041776C; // type:object size:0x4 scope:global +bStreamBlockState = .data:0x80417778; // type:object size:0x4 scope:global +bAudioInterrupt = .data:0x8041777C; // type:object size:0x4 scope:global +bStreamReadTiming = .data:0x80417780; // type:object size:0x4 scope:global +uStreamBlockTicks = .data:0x80417784; // type:object size:0x4 scope:global +uStreamReadTicks = .data:0x80417788; // type:object size:0x4 scope:global +uAudioInterruptTicks = .data:0x8041778C; // type:object size:0x4 scope:global +bHasDataLoadOccured = .data:0x804177B8; // type:object size:0x4 scope:global +RUN_SOUND_STATE = .data:0x804177C0; // type:object size:0x4 scope:global +DISABLE_SLOT_LOADING = .data:0x804177D4; // type:object size:0x4 scope:global +g_DataPaths = .data:0x804177D8; // type:object size:0x34 scope:global +StartBankLoadTicks = .data:0x8041780C; // type:object size:0x4 scope:global +Debug_Common_FE_OFF = .data:0x8041781C; // type:object size:0x4 scope:global +_13EAXAITunerCar.s_StateInfo = .data:0x80417830; // type:object size:0x10 scope:global +_9EAXCopCar.s_StateInfo = .data:0x80417844; // type:object size:0x10 scope:global +_8EAXTruck.s_StateInfo = .data:0x80417854; // type:object size:0x10 scope:global +_13EAXTrafficCar.s_StateInfo = .data:0x80417864; // type:object size:0x10 scope:global +_11EAXTunerCar.s_StateInfo = .data:0x80417874; // type:object size:0x10 scope:global +counter.33705 = .data:0x80417890; // type:object size:0x4 scope:local +MAIN_SAMPLERATE = .data:0x80417894; // type:object size:0x4 scope:global +RoadNoiseVolumes = .data:0x804178C0; // type:object size:0x24 scope:global +_15cSTICH_PlayBack.mSampleRefSlotPool = .data:0x804178E8; // type:object size:0x4 scope:global +_15cSTICH_PlayBack.mStitchSlotPool = .data:0x804178EC; // type:object size:0x4 scope:global +GlobalStichSizes = .data:0x804178F4; // type:object size:0x4 scope:global +_Q43UTL3COMt7Factory3ZRCQ25Sound16AudioEventParamsZQ25Sound10AudioEventZUi9Prototype.mHead = .data:0x804178FC; // type:object size:0x4 scope:global +btestprint = .data:0x80417900; // type:object size:0x4 scope:global +INCREASE_MUSICSTREAM_BLOCKS = .data:0x80417904; // type:object size:0x4 scope:global +INCREASE_NISSFXSTRM_BLOCKS = .data:0x80417908; // type:object size:0x4 scope:global +gpEAXS_StrmMgr = .data:0x8041790C; // type:object size:0x4 scope:global +utickreadcallback = .data:0x80417914; // type:object size:0x4 scope:global +uTicksSinceLastAudioReadBailed = .data:0x80417918; // type:object size:0x4 scope:global +_6SFXCTL.s_TypeInfo = .data:0x8041791C; // type:object size:0x10 scope:global +PRINT_SKID_FX_DEBUG = .data:0x8041792C; // type:object size:0x4 scope:global +_12SFXCTL_Wheel.s_TypeInfo = .data:0x80417930; // type:object size:0x10 scope:global +gfTireOffsetDist = .data:0x80417940; // type:object size:0x4 scope:global +gfTireFwdOffsetDist = .data:0x80417944; // type:object size:0x4 scope:global +gWheelSlipSensitivity = .data:0x80417948; // type:object size:0x8 scope:global +gWheelLoadThreshold = .data:0x80417950; // type:object size:0x8 scope:global +DOWN_SHIFTING_REV_PERCENT = .data:0x80417958; // type:object size:0x4 scope:global +DOWN_SHIFTING_REV_RAMP_TIME = .data:0x8041795C; // type:object size:0x4 scope:global +_15SFXCTL_Shifting.s_TypeInfo = .data:0x80417960; // type:object size:0x10 scope:global +_13SFXCTL_Engine.s_TypeInfo = .data:0x80417970; // type:object size:0x10 scope:global +g_pNISRevMgr = .data:0x80417998; // type:object size:0x4 scope:global +_17SFXCTL_AccelTrans.s_TypeInfo = .data:0x8041799C; // type:object size:0x10 scope:global +_18SFXCTL_HybridMotor.s_TypeInfo = .data:0x804179B8; // type:object size:0x10 scope:global +_14SFXCTL_Physics.s_TypeInfo = .data:0x804179C8; // type:object size:0x10 scope:global +_16SFXCTL_AIPhysics.s_TypeInfo = .data:0x804179D8; // type:object size:0x10 scope:global +_19SFXCTL_TruckPhysics.s_TypeInfo = .data:0x804179EC; // type:object size:0x10 scope:global +_13SFXCTL_Tunnel.m_PlayerZoneType = .data:0x80417A08; // type:object size:0x4 scope:global +TickerTimeStart = .data:0x80417A10; // type:object size:0x4 scope:global +TickerTimeAccum = .data:0x80417A14; // type:object size:0x4 scope:global +_13SFXCTL_Tunnel.s_TypeInfo = .data:0x80417A18; // type:object size:0x10 scope:global +TimeBetweenOcclusionTests = .data:0x80417A28; // type:object size:0x4 scope:global +MaxDistanceToOccludeTest = .data:0x80417A2C; // type:object size:0x4 scope:global +_16SFXCTL_MasterVol.s_TypeInfo = .data:0x80417A30; // type:object size:0x10 scope:global +_16SFXCTL_GameState.s_TypeInfo = .data:0x80417A44; // type:object size:0x10 scope:global +_15SFXCTL_3DColPos.s_TypeInfo = .data:0x80417A54; // type:object size:0x10 scope:global +_18SFXCTL_3DScrapePos.s_TypeInfo = .data:0x80417A64; // type:object size:0x10 scope:global +_15SFXCTL_3DCarPos.s_TypeInfo = .data:0x80417A74; // type:object size:0x10 scope:global +_15SFXCTL_3DObjPos.s_TypeInfo = .data:0x80417A84; // type:object size:0x10 scope:global +_15SFXCTL_3DObjPos.m_pv2AzimRefDir = .data:0x80417A94; // type:object size:0x4 scope:global +_15SFXCTL_3DObjPos.m_pv2AzimRefPos = .data:0x80417A98; // type:object size:0x4 scope:global +_15SFXCTL_3DObjPos.m_CameraAngle = .data:0x80417A9C; // type:object size:0x2 scope:global +POSMIXTYPE = .data:0x80417AB8; // type:object size:0x4 scope:global +_17SFXCTL_Pathfinder.m_pPFParms = .data:0x80417AC4; // type:object size:0x10 scope:global +_17SFXCTL_Pathfinder.s_TypeInfo = .data:0x80417AD4; // type:object size:0x10 scope:global +_17SFXCTL_Pathfinder.m_curinteractive = .data:0x80417AE4; // type:object size:0x4 scope:global +PFXMAP = .data:0x80417AE8; // type:object size:0x2A0 scope:global +_16SFXCTL_3DHeliPos.s_TypeInfo = .data:0x80417D88; // type:object size:0x10 scope:global +_17SFXCTL_Helicopter.s_TypeInfo = .data:0x80417D98; // type:object size:0x10 scope:global +_6EAXCar.g_ShiftInfo = .data:0x80417E2C; // type:object size:0x4 scope:global +_6EAXCar.g_TurboInfo = .data:0x80417E30; // type:object size:0x4 scope:global +_6EAXCar.s_StateInfo = .data:0x80417E34; // type:object size:0x10 scope:global +_9SndCamera.m_pCams = .data:0x80417E4C; // type:object size:0x8 scope:global +_9SndCamera.m_CurCamState = .data:0x80417E54; // type:object size:0x8 scope:global +_9SndCamera.m_PrevCamState = .data:0x80417E5C; // type:object size:0x8 scope:global +_9SndCamera.NumPlayers = .data:0x80417E68; // type:object size:0x4 scope:global +_9SndCamera.m_WorldCarVel = .data:0x80417E6C; // type:object size:0x8 scope:global +_9SndCamera.m_PLayerCars = .data:0x80417E74; // type:object size:0x8 scope:global +_7SndBase.s_TypeInfo = .data:0x80417EA0; // type:object size:0x10 scope:global +_7SndBase.m_fDeltaTime = .data:0x80417EB0; // type:object size:0x4 scope:global +_7SndBase.m_fRunningTime = .data:0x80417EB4; // type:object size:0x4 scope:global +_11CSTATE_Base.s_StateInfo = .data:0x80417EB8; // type:object size:0x10 scope:global +_16CSTATE_Collision.s_StateInfo = .data:0x80417ECC; // type:object size:0x10 scope:global +_11CSTATE_Main.s_StateInfo = .data:0x80417EDC; // type:object size:0x10 scope:global +_14CSTATE_DriveBy.s_StateInfo = .data:0x80417EEC; // type:object size:0x10 scope:global +_12CSTATE_Music.s_StateInfo = .data:0x80417EFC; // type:object size:0x10 scope:global +_17CSTATE_Helicopter.s_StateInfo = .data:0x80417F0C; // type:object size:0x10 scope:global +_19CSTATEMGR_PlayerCar.IsTruck = .data:0x80417F1C; // type:object size:0x4 scope:global +_16SFXCTL_3DRearPos.s_TypeInfo = .data:0x80417F20; // type:object size:0x10 scope:global +DEBUG_TRAFFIC_CAR_CONNECTIONS = .data:0x80417F30; // type:object size:0x4 scope:global +DEBUG_AI_CAR_CONNECTIONS = .data:0x80417F34; // type:object size:0x4 scope:global +_15CSTATEMGR_AICar.bUsingGinsu = .data:0x80417F38; // type:object size:0x4 scope:global +CAMERA_WOOSH_OFFSET = .data:0x80417F40; // type:object size:0x4 scope:global +_18CSTATE_WorldObject.s_StateInfo = .data:0x80417F44; // type:object size:0x10 scope:global +_18CSTATEMGR_CarState.CopsCanBeInGame = .data:0x80417F54; // type:object size:0x4 scope:global +DEBUG_CAR_BANK_TEST_CASE = .data:0x80417F58; // type:object size:0x4 scope:global +ForcePrintResolveInfo = .data:0x80417F5C; // type:object size:0x4 scope:global +LastV8Used.30949 = .data:0x80417F60; // type:object size:0x4 scope:local +_10SFX_Common.s_TypeInfo = .data:0x80417F64; // type:object size:0x10 scope:global +_12CARSFX_Shift.s_TypeInfo = .data:0x80417F78; // type:object size:0x10 scope:global +gnMemLeakTurboBLOWOFFCountTest = .data:0x80417F88; // type:object size:0x4 scope:global +gnMemLeakTurboSPOOLCountTest = .data:0x80417F8C; // type:object size:0x4 scope:global +MIN_TORQUE_FOR_BLOWOFF = .data:0x80417F90; // type:object size:0x4 scope:global +_12CARSFX_Turbo.s_TypeInfo = .data:0x80417F94; // type:object size:0x10 scope:global +_19CARSFX_SparkChatter.s_TypeInfo = .data:0x80417FA4; // type:object size:0x10 scope:global +_16CARSFX_RoadNoise.s_TypeInfo = .data:0x80417FB8; // type:object size:0x10 scope:global +_20SFXCTL_3DLeftWindPos.s_TypeInfo = .data:0x80417FCC; // type:object size:0x10 scope:global +_21SFXCTL_3DRightWindPos.s_TypeInfo = .data:0x80417FDC; // type:object size:0x10 scope:global +_16CARSFX_WindNoise.s_TypeInfo = .data:0x80417FEC; // type:object size:0x10 scope:global +_18CARSFX_WindWeather.s_TypeInfo = .data:0x80418008; // type:object size:0x10 scope:global +_12CARSFX_Skids.s_TypeInfo = .data:0x80418018; // type:object size:0x10 scope:global +_22SFXCTL_3DRightWheelPos.s_TypeInfo = .data:0x80418028; // type:object size:0x10 scope:global +_21SFXCTL_3DLeftWheelPos.s_TypeInfo = .data:0x80418038; // type:object size:0x10 scope:global +_19CARSFX_TrafficSkids.s_TypeInfo = .data:0x80418048; // type:object size:0x10 scope:global +ntestrefcount = .data:0x8041806C; // type:object size:0x4 scope:global +_17CARSFX_AEMSEngine.s_TypeInfo = .data:0x80418070; // type:object size:0x10 scope:global +AI_ENGINE_PITCH_OFFSET.31583 = .data:0x80418080; // type:object size:0x4 scope:local +_21CARSFX_SingleGinsuEng.s_TypeInfo = .data:0x8041808C; // type:object size:0x10 scope:global +_19CARSFX_DualGinsuEng.s_TypeInfo = .data:0x8041809C; // type:object size:0x10 scope:global +_18CARSFX_PreColWoosh.s_TypeInfo = .data:0x804180AC; // type:object size:0x10 scope:global +LastRandom.31722 = .data:0x804180BC; // type:object size:0x4 scope:local +_14CARSFX_Nitrous.s_TypeInfo = .data:0x804180C0; // type:object size:0x10 scope:global +_11CARSFX_Rain.s_TypeInfo = .data:0x804180D4; // type:object size:0x10 scope:global +_16SFXObj_Collision.s_TypeInfo = .data:0x804180E4; // type:object size:0x10 scope:global +_12SFXObj_Woosh.s_TypeInfo = .data:0x804180F4; // type:object size:0x10 scope:global +LastRandom.33304 = .data:0x80418104; // type:object size:0x4 scope:local +LastRandom.33305 = .data:0x80418108; // type:object size:0x4 scope:local +LastRandom.33306 = .data:0x8041810C; // type:object size:0x4 scope:local +LastRandom.33307 = .data:0x80418110; // type:object size:0x4 scope:local +LastRandom.33308 = .data:0x80418114; // type:object size:0x4 scope:local +LastRandom.33309 = .data:0x80418118; // type:object size:0x4 scope:local +LastRandom.33310 = .data:0x8041811C; // type:object size:0x4 scope:local +LastRandom.33311 = .data:0x80418120; // type:object size:0x4 scope:local +_17SFXCTL_3DWooshPos.s_TypeInfo = .data:0x80418124; // type:object size:0x10 scope:global +_15SFXObj_Ambience.s_TypeInfo = .data:0x80418134; // type:object size:0x10 scope:global +_13SFXObj_Speech.s_TypeInfo = .data:0x80418144; // type:object size:0x10 scope:global +_22SFXCTL_3DVoiceActorPos.s_TypeInfo = .data:0x80418154; // type:object size:0x10 scope:global +_12SFXObj_FEHUD.s_TypeInfo = .data:0x80418164; // type:object size:0x10 scope:global +g_LastTrafficHonkTime = .data:0x80418174; // type:object size:0x4 scope:global +_20CARSFX_TrafficEngine.s_TypeInfo = .data:0x80418178; // type:object size:0x10 scope:global +_19SFXCTL_3DTrafficPos.s_TypeInfo = .data:0x8041818C; // type:object size:0x10 scope:global +_18CARSFX_TrafficHorn.s_TypeInfo = .data:0x8041819C; // type:object size:0x10 scope:global +_16CARSFX_TruckHorn.s_TypeInfo = .data:0x804181AC; // type:object size:0x10 scope:global +HonkingCarCnt.33639 = .data:0x804181BC; // type:object size:0x4 scope:local +_19CARSFX_TrafficWoosh.s_TypeInfo = .data:0x804181C0; // type:object size:0x10 scope:global +LastRandom.33712 = .data:0x804181D0; // type:object size:0x4 scope:local +DOT_PROD_FOR_HEAVY_LEAN = .data:0x804181D4; // type:object size:0x4 scope:global +JumpLandingVolumes = .data:0x804181D8; // type:object size:0x10 scope:global +_16CARSFX_BottomOut.s_TypeInfo = .data:0x804181E8; // type:object size:0x10 scope:global +LastRandom.33749 = .data:0x804181F8; // type:object size:0x4 scope:local +LastRandom.33750 = .data:0x804181FC; // type:object size:0x4 scope:local +LastRandom.33754 = .data:0x80418200; // type:object size:0x4 scope:local +_13SFXObj_Reverb.s_TypeInfo = .data:0x80418204; // type:object size:0x10 scope:global +ReverbZoneCrossMap = .data:0x80418214; // type:object size:0x30 scope:global +csfxedit = .data:0x80418244; // type:object size:0x30 scope:global +_13SFXObj_Reverb.m_EchoBuffer = .data:0x80418274; // type:object size:0x4 scope:global +_12CARSFX_Siren.s_TypeInfo = .data:0x80418280; // type:object size:0x10 scope:global +PURSUIT_TO_LIC_DELAY = .data:0x804182A8; // type:object size:0x4 scope:global +_17SFXObj_Pathfinder.s_TypeInfo = .data:0x804182B0; // type:object size:0x10 scope:global +AmbientCrossMap = .data:0x804182C0; // type:object size:0x38 scope:global +_15SFXObj_PFEATrax.s_TypeInfo = .data:0x804182FC; // type:object size:0x10 scope:global +_17SFXObj_Helicopter.s_TypeInfo = .data:0x8041830C; // type:object size:0x10 scope:global +_16SFXObj_NISStream.m_bNISAudioStreamReady = .data:0x8041831C; // type:object size:0x4 scope:global +_16SFXObj_NISStream.m_bNISButtonThroughAnimationReady = .data:0x80418320; // type:object size:0x4 scope:global +_16SFXObj_NISStream.m_bNISButtonThroughReady = .data:0x80418324; // type:object size:0x4 scope:global +_16SFXObj_NISStream.m_bIsButtonThrough = .data:0x80418328; // type:object size:0x4 scope:global +_16SFXObj_NISStream.m_mstimeelapsed = .data:0x8041832C; // type:object size:0x4 scope:global +_16SFXObj_NISStream.m_mslengthofstream = .data:0x80418330; // type:object size:0x4 scope:global +g_laststartanimid = .data:0x80418334; // type:object size:0x4 scope:global +g_bWasLastNISaStart = .data:0x80418338; // type:object size:0x4 scope:global +_16SFXObj_NISStream.s_TypeInfo = .data:0x80418340; // type:object size:0x10 scope:global +_17SFXObj_MomentStrm.s_TypeInfo = .data:0x80418350; // type:object size:0x10 scope:global +_17SFXObj_MomentStrm.bHoldStream = .data:0x80418368; // type:object size:0x4 scope:global +_17SFXObj_MomentStrm.m_TimeBeforeRetrigger = .data:0x8041836C; // type:object size:0x4 scope:global +g_MomentStream = .data:0x80418370; // type:object size:0x4 scope:global +_18SFXCTL_3DMomentPos.s_TypeInfo = .data:0x80418374; // type:object size:0x10 scope:global +_20SFXCTL_3DFountainPos.s_TypeInfo = .data:0x80418384; // type:object size:0x10 scope:global +_18SFXObj_WorldObject.s_TypeInfo = .data:0x80418394; // type:object size:0x10 scope:global +_14SFXObj_TruckFX.s_TypeInfo = .data:0x804183A4; // type:object size:0x10 scope:global +_17CARSFX_TruckWoosh.s_TypeInfo = .data:0x804183B4; // type:object size:0x10 scope:global +_19SFXCTL_3DTrailerPos.s_TypeInfo = .data:0x804183C4; // type:object size:0x10 scope:global +xafilterf = .data:0x804183E0; // type:object size:0x20 scope:local +xatablef = .data:0x80418400; // type:object size:0x400 scope:local +_4Csis.SIRENId = .data:0x80418800; // type:object size:0x8 scope:global +_4Csis.SIREN_BEDId = .data:0x80418808; // type:object size:0x8 scope:global +_4Csis.Sputter_MessageId = .data:0x80418810; // type:object size:0x8 scope:global +_4Csis.CARId = .data:0x80418818; // type:object size:0x8 scope:global +_4Csis.CAR_SWTNId = .data:0x80418820; // type:object size:0x8 scope:global +_4Csis.CAR_WHINEId = .data:0x80418828; // type:object size:0x8 scope:global +_4Csis.CAR_TRANNYId = .data:0x80418830; // type:object size:0x8 scope:global +_4Csis.CAR_SputterId = .data:0x80418838; // type:object size:0x8 scope:global +_4Csis.CAR_SputOutputId = .data:0x80418840; // type:object size:0x8 scope:global +_4Csis.FX_ROADNOISEId = .data:0x80418848; // type:object size:0x8 scope:global +_4Csis.FX_ROADNOISE_TRANSId = .data:0x80418850; // type:object size:0x8 scope:global +_4Csis.ENV_STATICId = .data:0x80418858; // type:object size:0x8 scope:global +_4Csis.FX_MAIN_MEMId = .data:0x80418860; // type:object size:0x8 scope:global +_4Csis.FX_WINDId = .data:0x80418868; // type:object size:0x8 scope:global +_4Csis.FX_WIND_WeatherId = .data:0x80418870; // type:object size:0x8 scope:global +_4Csis.FX_TRAFFICId = .data:0x80418878; // type:object size:0x8 scope:global +_4Csis.FX_TRUCK_FXId = .data:0x80418880; // type:object size:0x8 scope:global +_4Csis.PlayCommonSampleId = .data:0x80418888; // type:object size:0x8 scope:global +_4Csis.PlayFrontEndSampleId = .data:0x80418890; // type:object size:0x8 scope:global +_4Csis.PlayFrontEndSample_RSId = .data:0x80418898; // type:object size:0x8 scope:global +_4Csis.FEDriveOnId = .data:0x804188A0; // type:object size:0x8 scope:global +_4Csis.FX_NITROUSId = .data:0x804188A8; // type:object size:0x8 scope:global +_4Csis.FX_PURGEId = .data:0x804188B0; // type:object size:0x8 scope:global +_4Csis.FX_SHIFTING_01Id = .data:0x804188B8; // type:object size:0x8 scope:global +_4Csis.FX_SPARKCHATTERId = .data:0x804188C0; // type:object size:0x8 scope:global +_4Csis.FX_SKIDId = .data:0x804188C8; // type:object size:0x8 scope:global +_4Csis.FX_HydraulicId = .data:0x804188D0; // type:object size:0x8 scope:global +_4Csis.FX_HelicopterId = .data:0x804188D8; // type:object size:0x8 scope:global +_4Csis.FX_Hydr_BounceId = .data:0x804188E0; // type:object size:0x8 scope:global +_4Csis.FX_WeatherId = .data:0x804188E8; // type:object size:0x8 scope:global +_4Csis.FX_CameraId = .data:0x804188F0; // type:object size:0x8 scope:global +_4Csis.FX_UVESId = .data:0x804188F8; // type:object size:0x8 scope:global +_4Csis.FX_RadarId = .data:0x80418900; // type:object size:0x8 scope:global +_4Csis.FX_ScrapeId = .data:0x80418908; // type:object size:0x8 scope:global +_4Csis.AEMS_StichCollisionId = .data:0x80418910; // type:object size:0x8 scope:global +_4Csis.AEMS_StichWooshId = .data:0x80418918; // type:object size:0x8 scope:global +_4Csis.AEMS_StichStaticId = .data:0x80418920; // type:object size:0x8 scope:global +_4Csis.FX_TURBO_01Id = .data:0x80418928; // type:object size:0x8 scope:global +_4Csis.NIS_Select_StartId = .data:0x80418930; // type:object size:0x8 scope:global +_4Csis.SoundFX_SelectId = .data:0x80418938; // type:object size:0x8 scope:global +_4Csis.NIS_Select_BlacklistId = .data:0x80418940; // type:object size:0x8 scope:global +_4Csis.NIS_Select_EndId = .data:0x80418948; // type:object size:0x8 scope:global +szMixMapFiles = .data:0x80418968; // type:object size:0x10 scope:global +g_DMIX_DummyOutputBlock = .data:0x80418990; // type:object size:0x40 scope:global +g_DMIX_DummyInputBlock = .data:0x804189D0; // type:object size:0x40 scope:global +_9NFSMixMap.mGetOutPtrCB = .data:0x80418A10; // type:object size:0x4 scope:global +_9NFSMixMap.mSetSFXOutCB = .data:0x80418A14; // type:object size:0x4 scope:global +_9NFSMixMap.mSetSFXInCB = .data:0x80418A18; // type:object size:0x4 scope:global +_9NFSMixMap.mGetStateRefCnt = .data:0x80418A1C; // type:object size:0x4 scope:global +_9NFSMixMap.mMapReadyCB = .data:0x80418A20; // type:object size:0x4 scope:global +DUMMYINPUT = .data:0x80418A24; // type:object size:0x4 scope:global +F_DT_FRAME_LOCK = .data:0x80418A28; // type:object size:0x4 scope:global +DOPPLER_SMOOTHING_FACTOR = .data:0x80418A2C; // type:object size:0x4 scope:global +g_dBToQ15XForm = .data:0x80418A34; // type:object size:0x968 scope:global +g_Q15todBXForm = .data:0x8041939C; // type:object size:0x800 scope:global +g_nArrayCosTable = .data:0x80419B9C; // type:object size:0x804 scope:global +g_fPitchSemitoneTable = .data:0x8041A3A0; // type:object size:0x30 scope:global +g_fPitchCentTable = .data:0x8041A3D0; // type:object size:0x190 scope:global +nDBreturn = .data:0x8041A564; // type:object size:0x4 scope:global +ndBShift = .data:0x8041A568; // type:object size:0x4 scope:global +ndBRem = .data:0x8041A56C; // type:object size:0x4 scope:global +ePolySlotPool = .data:0x8041A5A4; // type:object size:0x4 scope:global +WaitUntilRenderingDoneDisabled = .data:0x8041A5A8; // type:object size:0x4 scope:global +WaitForFrameBufferSwapDisabled = .data:0x8041A5AC; // type:object size:0x4 scope:global +renderModifier = .data:0x8041A5B0; // type:object size:0x4 scope:global +FrameMemoryBufferSize = .data:0x8041A5B4; // type:object size:0x4 scope:global +CurrentBufferStart = .data:0x8041A5B8; // type:object size:0x4 scope:global +CurrentBufferPos = .data:0x8041A5BC; // type:object size:0x4 scope:global +CurrentBufferEnd = .data:0x8041A5C0; // type:object size:0x4 scope:global +FrameMallocAllocNum = .data:0x8041A5C8; // type:object size:0x4 scope:global +FrameMallocFailed = .data:0x8041A5CC; // type:object size:0x4 scope:global +FrameMallocFailAmount = .data:0x8041A5D0; // type:object size:0x4 scope:global +FrameMallocMaxFailAmount = .data:0x8041A5D4; // type:object size:0x4 scope:global +Eframelargest = .data:0x8041A5D8; // type:object size:0x4 scope:global +Eframecurrent = .data:0x8041A5DC; // type:object size:0x4 scope:global +numOtherTex = .data:0x8041A5E0; // type:object size:0x4 scope:global +AllowCompressedStreamingTexturesInThisPoolNum = .data:0x8041A5E4; // type:object size:0x4 scope:global +eStreamingPackSlotPool = .data:0x8041A5E8; // type:object size:0x4 scope:global +eModelSlotPool = .data:0x8041A5EC; // type:object size:0x4 scope:global +NumReplacementTextureTableFixups = .data:0x8041A5F0; // type:object size:0x4 scope:global +MaxNotifyTimeLoad = .data:0x8041A5F4; // type:object size:0x4 scope:global +MaxNotifyTimeUnload = .data:0x8041A5F8; // type:object size:0x4 scope:global +TotalNotifyTimeLoad = .data:0x8041A5FC; // type:object size:0x4 scope:global +TotalNotifyTimeUnload = .data:0x8041A600; // type:object size:0x4 scope:global +TotalNotifyTime = .data:0x8041A604; // type:object size:0x4 scope:global +NumNotifyLoads = .data:0x8041A608; // type:object size:0x4 scope:global +NumNotifyUnloads = .data:0x8041A60C; // type:object size:0x4 scope:global +AllowDuplicateSolids = .data:0x8041A610; // type:object size:0x4 scope:global +eDisableFixUpTables = .data:0x8041A614; // type:object size:0x4 scope:global +eDirtySolids = .data:0x8041A618; // type:object size:0x4 scope:global +eDirtyTextures = .data:0x8041A61C; // type:object size:0x4 scope:global +eDirtyAnimations = .data:0x8041A620; // type:object size:0x4 scope:global +TotalFindSolidTime = .data:0x8041A628; // type:object size:0x4 scope:global +DefaultLightMaterial = .data:0x8041A63C; // type:object size:0x4 scope:global +reflectionStretch = .data:0x8041A640; // type:object size:0x4 scope:global +MINreflectionStretch = .data:0x8041A644; // type:object size:0x4 scope:global +MAXreflectionStretch = .data:0x8041A648; // type:object size:0x4 scope:global +TweakLightMaterial = .data:0x8041A658; // type:object size:0x4 scope:global +PrintLightQuery = .data:0x8041A66C; // type:object size:0x4 scope:global +WorldLightDirectionVector = .data:0x8041A678; // type:object size:0x10 scope:global +eLightFlareTextureNameHashes = .data:0x8041A69C; // type:object size:0xC scope:global +SingleLightFlareParameters = .data:0x8041A6B0; // type:object size:0x3C8 scope:global +LightFlareParametersNeedUpdating = .data:0x8041AA78; // type:object size:0x4 scope:global +LightFlareParameterIndicies = .data:0x8041AA7C; // type:object size:0xB0 scope:global +DrawLightFlares = .data:0x8041AB2C; // type:object size:0x4 scope:global +ActivePoolIndex = .data:0x8041AB30; // type:object size:0x4 scope:global +done.16761 = .data:0x8041AB34; // type:object size:0x4 scope:local +blink = .data:0x8041AB38; // type:object size:0x10 scope:global +time.16768 = .data:0x8041AB48; // type:object size:0xC scope:local +LightFlareEnvmapExpandSize = .data:0x8041AB54; // type:object size:0x4 scope:global +FlareRot = .data:0x8041AB64; // type:object size:0x4 scope:global +FlareSweep = .data:0x8041AB68; // type:object size:0x4 scope:global +RainInTheHeadlights = .data:0x8041AB6C; // type:object size:0x4 scope:global +DefaultTextureInfo = .data:0x8041AB74; // type:object size:0x4 scope:global +DuplicateTextureWarningEnabled = .data:0x8041AB78; // type:object size:0x4 scope:global +TexturePackSlotPool = .data:0x8041AB7C; // type:object size:0x4 scope:global +PrevLoadedTexturePack = .data:0x8041AB80; // type:object size:0x4 scope:global +SunInfoTable = .data:0x8041AB84; // type:object size:0x4 scope:global +NumSunInfo = .data:0x8041AB88; // type:object size:0x4 scope:global +SunInfo = .data:0x8041AB8C; // type:object size:0x4 scope:global +pVisualTreatmentPlat = .data:0x8041ABDC; // type:object size:0x4 scope:global +EnableRainIn2P = .data:0x8041ABE0; // type:object size:0x4 scope:global +IsPal50Mode = .data:0x8041ABEC; // type:object size:0x4 scope:global +xfbHcrt = .data:0x8041ABF0; // type:object size:0x4 scope:global +efbHcrt = .data:0x8041ABF4; // type:object size:0x4 scope:global +efbxfbRatio = .data:0x8041ABF8; // type:object size:0x4 scope:global +PALefbxfbFOVscl = .data:0x8041ABFC; // type:object size:0x4 scope:global +PALefbxfbAspect = .data:0x8041AC00; // type:object size:0x4 scope:global +eGXZFmt16 = .data:0x8041AC04; // type:object size:0x4 scope:global +eGXPixelFmt888 = .data:0x8041AC08; // type:object size:0x4 scope:global +eGXPixelFmt6666 = .data:0x8041AC0C; // type:object size:0x4 scope:global +eGXPixelFmt565AA = .data:0x8041AC10; // type:object size:0x4 scope:global +Global3DAspectRatio = .data:0x8041AC14; // type:object size:0x4 scope:global +WaitBufferSwapTime = .data:0x8041AC1C; // type:object size:0x4 scope:global +VifTime = .data:0x8041AC20; // type:object size:0x4 scope:global +dummy_vif_time = .data:0x8041AC24; // type:object size:0x4 scope:global +FastForwardEnabled = .data:0x8041AC28; // type:object size:0x4 scope:global +FastForwardRate = .data:0x8041AC2C; // type:object size:0x4 scope:global +EnableTexturing = .data:0x8041AC30; // type:object size:0x4 scope:global +DrawWireframe = .data:0x8041AC34; // type:object size:0x4 scope:global +eFrameCounter = .data:0x8041AC38; // type:object size:0x4 scope:global +eCurrentVideoMode = .data:0x8041AC3C; // type:object size:0x4 scope:global +pTextureInfoRVMInfo = .data:0x8041AC40; // type:object size:0x4 scope:global +pTextureInfoRVMMask = .data:0x8041AC44; // type:object size:0x4 scope:global +pTextureInfoCarSelectEnvMap = .data:0x8041AC48; // type:object size:0x4 scope:global +pTextureInfoRadialBlur = .data:0x8041AC4C; // type:object size:0x4 scope:global +pTextureInfoRadialMask = .data:0x8041AC50; // type:object size:0x4 scope:global +pTextureInfoWhite16x16 = .data:0x8041AC54; // type:object size:0x4 scope:global +pTextureInfoWhite16x16NoAlpha = .data:0x8041AC58; // type:object size:0x4 scope:global +ScreenWidth = .data:0x8041AC5C; // type:object size:0x4 scope:global +ScreenHeight = .data:0x8041AC60; // type:object size:0x4 scope:global +EnableLODZ = .data:0x8041AC64; // type:object size:0x4 scope:global +EnableMinimalEnvMap = .data:0x8041AC68; // type:object size:0x4 scope:global +EnableEnvMap = .data:0x8041AC6C; // type:object size:0x4 scope:global +EnvmapTargetNames = .data:0x8041AC78; // type:object size:0x1C scope:global +CurrentRenderTarget = .data:0x8041AC94; // type:object size:0x4 scope:global +CurrentViewMode = .data:0x8041ACA0; // type:object size:0x4 scope:global +RenderingViewMode = .data:0x8041ACA4; // type:object size:0x4 scope:global +TweakerViewMode = .data:0x8041ACA8; // type:object size:0x4 scope:global +g_original_amount_free = .data:0x8041ACD4; // type:object size:0x4 scope:global +g_original_largest_malloc = .data:0x8041ACD8; // type:object size:0x4 scope:global +do_dumpFastMem = .data:0x8041ACDC; // type:object size:0x4 scope:global +RenderCars_psReset = .data:0x8041ACE0; // type:object size:0x4 scope:global +PreFE_psReset = .data:0x8041ACE4; // type:object size:0x4 scope:global +epRenderStrips_psReset = .data:0x8041ACEC; // type:object size:0x4 scope:global +epRenderStrips_ps_NoLighting = .data:0x8041ACF0; // type:object size:0x4 scope:global +UpdateVTIndirectTexture = .data:0x8041ACF4; // type:object size:0x4 scope:global +lastactive.31181 = .data:0x8041AD00; // type:object size:0x4 scope:local +lastactive.31182 = .data:0x8041AD04; // type:object size:0x4 scope:local +__sync_token = .data:0x8041AD08; // type:object size:0x2 scope:global +EnableHarmonicClear = .data:0x8041AD0C; // type:object size:0x4 scope:global +DOF_color = .data:0x8041AD2C; // type:object size:0x4 scope:global +DOF_depth_curve = .data:0x8041AD30; // type:object size:0x4 scope:global +DOF_znear = .data:0x8041AD34; // type:object size:0x4 scope:global +DOF_zfar = .data:0x8041AD38; // type:object size:0x4 scope:global +DOF_startz = .data:0x8041AD3C; // type:object size:0x4 scope:global +DOF_endz = .data:0x8041AD40; // type:object size:0x4 scope:global +BLOOM_intensity_clip = .data:0x8041AD44; // type:object size:0x1 scope:global +BLOOM_intensity_sub = .data:0x8041AD45; // type:object size:0x4 scope:global +BLOOM_intensity_add = .data:0x8041AD49; // type:object size:0x4 scope:global +downSampledWidth.31276 = .data:0x8041AD50; // type:object size:0x4 scope:local +downSampledHeight.31277 = .data:0x8041AD54; // type:object size:0x4 scope:local +bProgressiveScan = .data:0x8041AD58; // type:object size:0x1 scope:global +bEURGB60 = .data:0x8041AD59; // type:object size:0x1 scope:global +_firstFrame = .data:0x8041AD5C; // type:object size:0x4 scope:global +_frameBuffer1 = .data:0x8041AD60; // type:object size:0x4 scope:global +_frameBuffer2 = .data:0x8041AD64; // type:object size:0x4 scope:global +_currentBuffer = .data:0x8041AD68; // type:object size:0x4 scope:global +_GxInitialized = .data:0x8041AD6C; // type:object size:0x4 scope:global +e_bDither = .data:0x8041AD70; // type:object size:0x1 scope:local +_defaultFIFO = .data:0x8041AD74; // type:object size:0x4 scope:global +_defaultFIFOObj = .data:0x8041AD78; // type:object size:0x4 scope:global +bHangDiagnose = .data:0x8041AD7C; // type:object size:0x1 scope:global +e_sync = .data:0x8041AD7E; // type:object size:0x2 scope:global +e_endsync = .data:0x8041AD80; // type:object size:0x2 scope:global +last_sync_token = .data:0x8041AD84; // type:object size:0x2 scope:global +e_resync = .data:0x8041AD88; // type:object size:0x4 scope:global +e_keepalive = .data:0x8041AD8C; // type:object size:0x4 scope:global +bStallWorkaround = .data:0x8041AD94; // type:object size:0x1 scope:global +bDLSaveContext = .data:0x8041AD95; // type:object size:0x1 scope:global +CopyFilter = .data:0x8041AD96; // type:object size:0x4D scope:global +bESyncError = .data:0x8041ADE3; // type:object size:0x1 scope:global +eMAX_ITERATIONS = .data:0x8041ADE4; // type:object size:0x4 scope:global +bNoWait = .data:0x8041ADF0; // type:object size:0x1 scope:global +bAlwaysCopyDisp = .data:0x8041ADF1; // type:object size:0x1 scope:global +e_retrace_count = .data:0x8041ADF4; // type:object size:0x4 scope:global +WasPal50.31308 = .data:0x8041ADF8; // type:object size:0x4 scope:local +WasWidescreen.31309 = .data:0x8041ADFC; // type:object size:0x4 scope:local +bFirstTime.31319 = .data:0x8041AE00; // type:object size:0x1 scope:local +_enabled.31332 = .data:0x8041AE01; // type:object size:0x1 scope:local +prevPFmt.31339 = .data:0x8041AE04; // type:object size:0x4 scope:local +_pformats.31340 = .data:0x8041AE08; // type:object size:0xC scope:local +prevZFmt.31341 = .data:0x8041AE14; // type:object size:0x4 scope:local +_zformats.31342 = .data:0x8041AE18; // type:object size:0x10 scope:local +_xOrig.31346 = .data:0x8041AE28; // type:object size:0x4 scope:local +_yOrig.31347 = .data:0x8041AE2C; // type:object size:0x4 scope:local +_wd.31348 = .data:0x8041AE30; // type:object size:0x4 scope:local +_ht.31349 = .data:0x8041AE34; // type:object size:0x4 scope:local +bDrawDoneEncountered = .data:0x8041AE38; // type:object size:0x1 scope:local +_enabled.31410 = .data:0x8041AE39; // type:object size:0x1 scope:local +DrawSmear = .data:0x8041AE54; // type:object size:0x4 scope:global +SmearInvert = .data:0x8041AE58; // type:object size:0x4 scope:global +NOStimer = .data:0x8041AE64; // type:object size:0x4 scope:global +SmearStage2 = .data:0x8041AE68; // type:object size:0x4 scope:global +num_smears = .data:0x8041AE6C; // type:object size:0x4 scope:global +SmearSubStageEnable = .data:0x8041AE70; // type:object size:0x18 scope:global +SmearDistances = .data:0x8041AE88; // type:object size:0x18 scope:global +SmearAlphas = .data:0x8041AEA0; // type:object size:0x18 scope:global +SmearRGBs = .data:0x8041AEB8; // type:object size:0x48 scope:global +SmearDistModNOS = .data:0x8041AF00; // type:object size:0x4 scope:global +SmearR = .data:0x8041AF04; // type:object size:0x4 scope:global +SmearG = .data:0x8041AF08; // type:object size:0x4 scope:global +SmearB = .data:0x8041AF0C; // type:object size:0x4 scope:global +Rsub = .data:0x8041AF10; // type:object size:0x4 scope:global +Gsub = .data:0x8041AF14; // type:object size:0x4 scope:global +Bsub = .data:0x8041AF18; // type:object size:0x4 scope:global +SmearMaxAlphaScale = .data:0x8041AF2C; // type:object size:0x4 scope:global +SmearMinSpeed = .data:0x8041AF30; // type:object size:0x4 scope:global +SmearMaxSpeed = .data:0x8041AF34; // type:object size:0x4 scope:global +SmearAlphaScale = .data:0x8041AF38; // type:object size:0x4 scope:global +SmearDistanceMultiplier = .data:0x8041AF3C; // type:object size:0x4 scope:global +SmearNOSAlphaBonus = .data:0x8041AF40; // type:object size:0x4 scope:global +useTweakablePoly = .data:0x8041AF44; // type:object size:0x4 scope:global +polyTweakDX = .data:0x8041AF48; // type:object size:0x4 scope:global +polyTweakDW = .data:0x8041AF4C; // type:object size:0x4 scope:global +polyTweakDY = .data:0x8041AF50; // type:object size:0x4 scope:global +polyTweakDH = .data:0x8041AF54; // type:object size:0x4 scope:global +polyTweakSX = .data:0x8041AF58; // type:object size:0x4 scope:global +polyTweakSW = .data:0x8041AF5C; // type:object size:0x4 scope:global +polyTweakSY = .data:0x8041AF60; // type:object size:0x4 scope:global +polyTweakSH = .data:0x8041AF64; // type:object size:0x4 scope:global +NOStime.31435 = .data:0x8041AF68; // type:object size:0x4 scope:local +NOSfade.31436 = .data:0x8041AF6C; // type:object size:0x4 scope:local +TweakDumpSkyLayerColors = .data:0x8041AF84; // type:object size:0x4 scope:global +FogCurrentBrightness = .data:0x8041AFA4; // type:object size:0x4 scope:local +prevMode.31506 = .data:0x8041AFA8; // type:object size:0x4 scope:local +prevTest = .data:0x8041AFAC; // type:object size:0x1 scope:global +prevWrite = .data:0x8041AFAD; // type:object size:0x1 scope:global +prev.31519 = .data:0x8041AFAE; // type:object size:0x1 scope:local +prevRGB.31523 = .data:0x8041AFAF; // type:object size:0x1 scope:local +prevAlpha.31524 = .data:0x8041AFB0; // type:object size:0x1 scope:local +_alphaOn = .data:0x8041AFB1; // type:object size:0x1 scope:local +_alphaRef = .data:0x8041AFB2; // type:object size:0x1 scope:local +prevMode = .data:0x8041AFB4; // type:object size:0x4 scope:local +prevSrc = .data:0x8041AFB8; // type:object size:0x4 scope:local +prevDst = .data:0x8041AFBC; // type:object size:0x4 scope:local +FogEnableState = .data:0x8041AFD0; // type:object size:0x4 scope:local +prevFogDistance = .data:0x8041AFD4; // type:object size:0x4 scope:local +prevFogColour = .data:0x8041AFD8; // type:object size:0x4 scope:local +fog_red = .data:0x8041AFDC; // type:object size:0x1 scope:global +fog_green = .data:0x8041AFDD; // type:object size:0x1 scope:global +fog_blue = .data:0x8041AFDE; // type:object size:0x1 scope:global +fog_enable.31705 = .data:0x8041AFE0; // type:object size:0x4 scope:local +eTevSwapModeTable = .data:0x8041AFE4; // type:object size:0x10 scope:local +eTevSwapColorChannelTable = .data:0x8041AFF4; // type:object size:0x10 scope:local +eTevSwapSelectionTable = .data:0x8041B004; // type:object size:0x10 scope:local +lastTevSwapStageID = .data:0x8041B01C; // type:object size:0x4 scope:local +eTextureBucketSlotPool = .data:0x8041B020; // type:object size:0x4 scope:global +eDataRenderSlotPool = .data:0x8041B024; // type:object size:0x4 scope:global +g_NumTextureBuckets = .data:0x8041B02C; // type:object size:0x4 scope:global +SphericalPS = .data:0x8041B030; // type:object size:0x4 scope:global +testl1 = .data:0x8041B04C; // type:object size:0x8 scope:global +testl2 = .data:0x8041B054; // type:object size:0x8 scope:global +testl3 = .data:0x8041B05C; // type:object size:0x8 scope:global +teste1 = .data:0x8041B064; // type:object size:0x8 scope:global +teste2 = .data:0x8041B06C; // type:object size:0x8 scope:global +teste3 = .data:0x8041B074; // type:object size:0x8 scope:global +testc0 = .data:0x8041B07C; // type:object size:0x8 scope:global +testc1 = .data:0x8041B084; // type:object size:0x8 scope:global +cBfW = .data:0x8041B08C; // type:object size:0x4 scope:local +PrintSolidViewLocalWorldTest = .data:0x8041B09C; // type:object size:0x4 scope:global +pPrevSolid.31826 = .data:0x8041B0A0; // type:object size:0x4 scope:local +pPrevView.31827 = .data:0x8041B0A4; // type:object size:0x4 scope:local +pPrevLocalWorld.31828 = .data:0x8041B0A8; // type:object size:0x4 scope:local +position_table.31830 = .data:0x8041B0B0; // type:object size:0x4 scope:local +position_table_16.31831 = .data:0x8041B0B4; // type:object size:0x4 scope:local +normal_table.31832 = .data:0x8041B0B8; // type:object size:0x4 scope:local +colour_table0.31833 = .data:0x8041B0BC; // type:object size:0x4 scope:local +colour_table1.31834 = .data:0x8041B0C0; // type:object size:0x4 scope:local +uv_table.31835 = .data:0x8041B0C4; // type:object size:0x4 scope:local +g_contrast_gain = .data:0x8041B0D0; // type:object size:0x10 scope:global +g_contrast_res = .data:0x8041B0E0; // type:object size:0x4 scope:global +b_alpha_shift = .data:0x8041B0E4; // type:object size:0x4 scope:global +b_red_shift = .data:0x8041B0E8; // type:object size:0x4 scope:global +b_green_shift = .data:0x8041B0EC; // type:object size:0x4 scope:global +b_blue_shift = .data:0x8041B0F0; // type:object size:0x4 scope:global +zero_red = .data:0x8041B0F8; // type:object size:0x4 scope:global +zero_blue = .data:0x8041B0FC; // type:object size:0x4 scope:global +zero_green = .data:0x8041B100; // type:object size:0x4 scope:global +zero_alpha = .data:0x8041B104; // type:object size:0x4 scope:global +arn_EnableDiffuse = .data:0x8041B108; // type:object size:0x4 scope:global +arn_EnableAlpha = .data:0x8041B10C; // type:object size:0x4 scope:global +arn_EnableSpec = .data:0x8041B110; // type:object size:0x4 scope:global +arn_EnableEnv = .data:0x8041B114; // type:object size:0x4 scope:global +hack_LightColourScale = .data:0x8041B11C; // type:object size:0x4 scope:global +hack_SpecScale = .data:0x8041B120; // type:object size:0x4 scope:global +arn_HackAlpha = .data:0x8041B124; // type:object size:0x4 scope:global +arn_AlphaMin = .data:0x8041B128; // type:object size:0x4 scope:global +arn_AlphaMax = .data:0x8041B12C; // type:object size:0x4 scope:global +hack_SpecScale_InGame = .data:0x8041B134; // type:object size:0x4 scope:global +eLightMaterialPlatInfoSlotPool = .data:0x8041B138; // type:object size:0x4 scope:global +arnMinA = .data:0x8041B144; // type:object size:0x4 scope:global +arnMaxA = .data:0x8041B148; // type:object size:0x4 scope:global +arnEnvMax = .data:0x8041B14C; // type:object size:0x4 scope:global +LARGE_NUMBER.31899 = .data:0x8041B150; // type:object size:0x4 scope:local +EnvMapScreenZ = .data:0x8041B154; // type:object size:0x4 scope:global +HackDirArray = .data:0x8041B158; // type:object size:0xC0 scope:global +HackDirArrayUp = .data:0x8041B218; // type:object size:0xC0 scope:global +EnableEnvMapFacesNum = .data:0x8041B2D8; // type:object size:0x8 scope:global +EnableEnvMapFaces = .data:0x8041B2E0; // type:object size:0x120 scope:global +ForceFERenderStates = .data:0x8041B408; // type:object size:0x4 scope:global +prevPShader = .data:0x8041B40C; // type:object size:0x4 scope:local +KColorOne = .data:0x8041B410; // type:object size:0x4 scope:local +KColorGrey = .data:0x8041B414; // type:object size:0x4 scope:local +KColorWorldSpecular = .data:0x8041B41C; // type:object size:0x4 scope:global +KColorSky = .data:0x8041B420; // type:object size:0x4 scope:global +GlowBloomEnhanceColor = .data:0x8041B424; // type:object size:0x4 scope:global +MiniMapClip = .data:0x8041B428; // type:object size:0x4 scope:global +MWDesaturation = .data:0x8041B42C; // type:object size:0x4 scope:global +MWPulseBrightness = .data:0x8041B430; // type:object size:0x4 scope:global +MWColourTint = .data:0x8041B434; // type:object size:0x4 scope:global +TEV2_BlackBloomIndirectMtx = .data:0x8041B438; // type:object size:0x18 scope:global +TEV3_ColourBloomIndirectMtx = .data:0x8041B450; // type:object size:0x18 scope:global +CurrentLightingMode = .data:0x8041B46C; // type:object size:0x4 scope:global +_lightMasks = .data:0x8041B470; // type:object size:0x14 scope:local +prevopt.32084 = .data:0x8041B484; // type:object size:0x4 scope:local +prevopt.32088 = .data:0x8041B488; // type:object size:0x4 scope:local +prevopt.32092 = .data:0x8041B48C; // type:object size:0x4 scope:local +TweakKColorSky = .data:0x8041B490; // type:object size:0x4 scope:global +KShadowRGBA = .data:0x8041B494; // type:object size:0x4 scope:global +prevVShader = .data:0x8041B498; // type:object size:0x4 scope:local +e_current_strip = .data:0x8041B4A0; // type:object size:0x4 scope:global +e_strip_texture_info = .data:0x8041B4A8; // type:object size:0x4 scope:global +e_current_strip_vert = .data:0x8041B4AC; // type:object size:0x4 scope:global +e_current_strip_uv = .data:0x8041B4B0; // type:object size:0x4 scope:global +e_current_strip_col = .data:0x8041B4B4; // type:object size:0x4 scope:global +TestMWPulseBrightness = .data:0x8041B4C0; // type:object size:0x4 scope:global +black_bloom_color_scale = .data:0x8041B4D0; // type:object size:0x4 scope:global +colour_bloom_color_scale = .data:0x8041B4D4; // type:object size:0x4 scope:global +CrappyStuffThatCantShip = .data:0x8041B4F0; // type:object size:0xC scope:global +_13EmitterSystem.mTextureRanges = .data:0x8041B4FC; // type:object size:0x4 scope:global +_13EmitterSystem.mNumTextureRanges = .data:0x8041B500; // type:object size:0x4 scope:global +EmitterRandomSeed = .data:0x8041B504; // type:object size:0x4 scope:global +ParticleSlotPool = .data:0x8041B508; // type:object size:0x4 scope:global +EmitterSlotPool = .data:0x8041B50C; // type:object size:0x4 scope:global +EmitterGroupSlotPool = .data:0x8041B510; // type:object size:0x4 scope:global +IsInNIS = .data:0x8041B514; // type:object size:0x4 scope:global +warn_once.33294 = .data:0x8041B518; // type:object size:0x4 scope:local +warn_once.33364 = .data:0x8041B51C; // type:object size:0x4 scope:local +random_seed.33848 = .data:0x8041B528; // type:object size:0x4 scope:local +aseed.33912 = .data:0x8041B52C; // type:object size:0x4 scope:local +gOnlineMainMenu = .data:0x8041B5CC; // type:object size:0x4 scope:global +_15UIOptionsScreen.PlayerToEdit = .data:0x8041B5D0; // type:object size:0x4 scope:global +_19UIOptionsController.PortToConfigure = .data:0x8041B5D4; // type:object size:0x4 scope:global +_19UIOptionsController.isWheelConfig = .data:0x8041B5D8; // type:object size:0x4 scope:global +_9PauseMenu.mSelectionHash = .data:0x8041B5E0; // type:object size:0x4 scope:global +pInstance = .data:0x8041B5E4; // type:object size:0x4 scope:local +_18uiRapSheetRankings.career_view = .data:0x8041B5E8; // type:object size:0x4 scope:global +_24uiRapSheetRankingsDetail.career_view = .data:0x8041B5EC; // type:object size:0x4 scope:global +selection = .data:0x8041B5F0; // type:object size:0x4 scope:local +iCurrentViewBin = .data:0x8041B5F4; // type:object size:0x4 scope:global +theRace = .data:0x8041B5F8; // type:object size:0x4 scope:global +theMilestone = .data:0x8041B60C; // type:object size:0x4 scope:global +gTUTORIAL_MOVIE_PURSUIT = .data:0x8041B610; // type:object size:0x4 scope:global +gTUTORIAL_MOVIE_BOUNTY = .data:0x8041B614; // type:object size:0x4 scope:global +_19uiRepSheetRivalFlow.mInstance = .data:0x8041B618; // type:object size:0x4 scope:global +ScreenNames = .data:0x8041B61C; // type:object size:0x20 scope:global +_8WorldMap.mGPSingIcon = .data:0x8041B640; // type:object size:0x4 scope:global +the_msg = .data:0x8041B644; // type:object size:0x4 scope:local +_15FEGameWonScreen.mCurrentScreen = .data:0x8041B64C; // type:object size:0x4 scope:global +MapJoyEventToFEPad = .data:0x8041B650; // type:object size:0x1C0 scope:local +_13cFEngJoyInput.mInstance = .data:0x8041B810; // type:object size:0x4 scope:global +sMovieNameMap = .data:0x8041B814; // type:object size:0x150 scope:local +_18cFEngGameInterface.pInstance = .data:0x8041B964; // type:object size:0x4 scope:global +FEngPleaseRenderSinglePackage = .data:0x8041B968; // type:object size:0x4 scope:global +_5cFEng.mInstance = .data:0x8041B96C; // type:object size:0x4 scope:global +_9FEManager.mInstance = .data:0x8041B970; // type:object size:0x4 scope:global +_9FEManager.mPauseRequest = .data:0x8041B974; // type:object size:0x4 scope:global +_9FEManager.mPauseReason = .data:0x8041B978; // type:object size:0x20 scope:global +DrawFEng = .data:0x8041B99C; // type:object size:0x4 scope:global +SummonChyronNow = .data:0x8041B9A0; // type:object size:0x4 scope:global +_16FEAnyMovieScreen.MovieFilename = .data:0x8041B9A4; // type:object size:0x40 scope:global +_19FEAnyTutorialScreen.MovieFilename = .data:0x8041B9E4; // type:object size:0x40 scope:global +_19FEAnyTutorialScreen.PackageFilename = .data:0x8041BA24; // type:object size:0x40 scope:global +_19FEAnyTutorialScreen.PackageSet = .data:0x8041BA64; // type:object size:0x4 scope:global +FEAnyTutorialScreenName = .data:0x8041BA68; // type:object size:0x4 scope:local +gMoviePlayer = .data:0x8041BA6C; // type:object size:0x4 scope:global +gMovieStartTime = .data:0x8041BA70; // type:object size:0x4 scope:global +IsMovieTimerPrintf = .data:0x8041BA78; // type:object size:0x4 scope:global +MovieVolumeArray = .data:0x8041BA7C; // type:object size:0x130 scope:global +RCMPDecodeBuffer = .data:0x8041BBAC; // type:object size:0x4 scope:global +recurse.35407 = .data:0x8041BBB0; // type:object size:0x4 scope:local +_9SubTitler.gCurrentSubtitler_ = .data:0x8041BBB4; // type:object size:0x4 scope:global +_13MemoryCardImp.gEntryType = .data:0x8041BBB8; // type:object size:0xC scope:global +_10MemoryCard.s_pThis = .data:0x8041BBC4; // type:object size:0x4 scope:global +pSystem.35755 = .data:0x8041BBC8; // type:object size:0x4 scope:local +sOpName.36228 = .data:0x8041BBD0; // type:object size:0x8 scope:local +TWK_RadarDetectorMinThreshold = .data:0x8041BC60; // type:object size:0x4 scope:global +_13RadarDetector.mStaticRange = .data:0x8041BC64; // type:object size:0x4 scope:global +gChoppedMiniMapManager = .data:0x8041BC68; // type:object size:0x4 scope:global +MinimapShowNonPursuitCops = .data:0x8041BC84; // type:object size:0x4 scope:global +MinimapShowPursuitCops = .data:0x8041BC88; // type:object size:0x4 scope:global +MinimapPivotX = .data:0x8041BC8C; // type:object size:0x4 scope:global +MinimapPivotY = .data:0x8041BC90; // type:object size:0x4 scope:global +MinimapDispX = .data:0x8041BC94; // type:object size:0x4 scope:global +MinimapMaxSpeed = .data:0x8041BC9C; // type:object size:0x4 scope:global +_7Minimap.kGameplayIconInfo = .data:0x8041BCA0; // type:object size:0x168 scope:global +RaceOverFinishStrings = .data:0x8041BE08; // type:object size:0x20 scope:local +warningPulseMinRpm = .data:0x8041BE28; // type:object size:0x4 scope:global +_18HudResourceManager.mPhase = .data:0x8041BE30; // type:object size:0x4 scope:global +_18HudResourceManager.mCustIndex = .data:0x8041BE34; // type:object size:0x4 scope:global +_18HudResourceManager.mTachLinesHash = .data:0x8041BE38; // type:object size:0x4 scope:global +_18HudResourceManager.pMiniMapTexture = .data:0x8041BE3C; // type:object size:0x4 scope:global +_18HudResourceManager.LoadingResourcesForHudType = .data:0x8041BE40; // type:object size:0x4 scope:global +_18HudResourceManager.mPackageName = .data:0x8041BE44; // type:object size:0x4 scope:global +_7FEngHud.bIsRestartingRace = .data:0x8041BE48; // type:object size:0x4 scope:global +ChyronScreenPtr = .data:0x8041BE4C; // type:object size:0x4 scope:local +_6Chyron.mTitle = .data:0x8041BE50; // type:object size:0x4 scope:global +_6Chyron.mArtist = .data:0x8041BE54; // type:object size:0x4 scope:global +_6Chyron.mAlbum = .data:0x8041BE58; // type:object size:0x4 scope:global +KeyboardActive = .data:0x8041BE60; // type:object size:0x4 scope:global +gFEKeyboard = .data:0x8041BE64; // type:object size:0x4 scope:global +_17PhotoFinishScreen.mSpeedtrapSpeed = .data:0x8041BE6C; // type:object size:0x4 scope:global +_17PhotoFinishScreen.mSpeedtrapBounty = .data:0x8041BE70; // type:object size:0x4 scope:global +_17PhotoFinishScreen.mRestartSelected = .data:0x8041BE74; // type:object size:0x4 scope:global +_17PhotoFinishScreen.mActive = .data:0x8041BE78; // type:object size:0x4 scope:global +sBootFlowNTSC = .data:0x8041BE80; // type:object size:0x1C scope:local +sBootFlowPAL = .data:0x8041BE9C; // type:object size:0x1C scope:local +sBootFlowWideScreen = .data:0x8041BEB8; // type:object size:0x1C scope:local +sBootFlowPALWidescreen = .data:0x8041BED4; // type:object size:0x1C scope:local +_15BootFlowManager.mInstance = .data:0x8041BEF0; // type:object size:0x4 scope:global +SplashScreenMovieTimeout = .data:0x8041BEF4; // type:object size:0x4 scope:global +SplashScreenTotalTimeout = .data:0x8041BEF8; // type:object size:0x4 scope:global +MovieData = .data:0x8041BEFC; // type:object size:0xC8 scope:global +IsDebugPlayMovie = .data:0x8041BFC4; // type:object size:0x4 scope:global +GameTipInfoTable = .data:0x8041BFC8; // type:object size:0x1C0 scope:local +_11LoadingTips.mLoadingTipsScreenPtr = .data:0x8041C188; // type:object size:0x4 scope:global +_11LoadingTips.mDoneShowingLoadingTips = .data:0x8041C18C; // type:object size:0x4 scope:global +_11LoadingTips.mDoneLoading = .data:0x8041C190; // type:object size:0x4 scope:global +_13LoadingScreen.mLoadingScreenPtr = .data:0x8041C194; // type:object size:0x4 scope:global +_23LoadingControllerScreen.mLoadingControllerScreenPtr = .data:0x8041C19C; // type:object size:0x4 scope:global +gInGameMoviePlaying = .data:0x8041C1A0; // type:object size:0x4 scope:global +_20InGameAnyMovieScreen.MovieFilename = .data:0x8041C1A4; // type:object size:0x40 scope:global +_23InGameAnyTutorialScreen.MovieFilename = .data:0x8041C1E4; // type:object size:0x40 scope:global +_23InGameAnyTutorialScreen.PackageFilename = .data:0x8041C224; // type:object size:0x40 scope:global +_23InGameAnyTutorialScreen.PackageSet = .data:0x8041C264; // type:object size:0x4 scope:global +InGameTutorialScreenName = .data:0x8041C268; // type:object size:0x4 scope:local +LanguageMemoryPoolNumber = .data:0x8041C26C; // type:object size:0x4 scope:global +pLanguageMemoryPoolMemory = .data:0x8041C270; // type:object size:0x4 scope:global +LanguageMemoryPoolSize = .data:0x8041C274; // type:object size:0x4 scope:global +FontSizeInfoTable = .data:0x8041C278; // type:object size:0x48 scope:global +EuropeanFontNameInfo = .data:0x8041C2C0; // type:object size:0x6C scope:global +EnglishLocaleInfo = .data:0x8041C32C; // type:object size:0x3 scope:global +FrenchLocaleInfo = .data:0x8041C32F; // type:object size:0x3 scope:global +GermanLocaleInfo = .data:0x8041C332; // type:object size:0x3 scope:global +ItalianLocaleInfo = .data:0x8041C335; // type:object size:0x3 scope:global +SpanishLocaleInfo = .data:0x8041C338; // type:object size:0x3 scope:global +DutchLocaleInfo = .data:0x8041C33B; // type:object size:0x3 scope:global +SwedishLocaleInfo = .data:0x8041C33E; // type:object size:0x3 scope:global +PolishLocaleInfo = .data:0x8041C341; // type:object size:0x3 scope:global +FinnishLocaleInfo = .data:0x8041C344; // type:object size:0x3 scope:global +DanishLocaleInfo = .data:0x8041C347; // type:object size:0x3 scope:global +LanguageInfoTable = .data:0x8041C34C; // type:object size:0xF0 scope:global +CurrentLanguage = .data:0x8041C43C; // type:object size:0x4 scope:global +pLanguageResourceFile = .data:0x8041C440; // type:object size:0x4 scope:global +pLanguageResourceFile_VM = .data:0x8041C444; // type:object size:0x4 scope:global +NumStringRecords = .data:0x8041C448; // type:object size:0x4 scope:global +PackedStringTable = .data:0x8041C44C; // type:object size:0x4 scope:global +RecordTable = .data:0x8041C450; // type:object size:0x4 scope:global +pWideCharHistogram = .data:0x8041C454; // type:object size:0x4 scope:global +DisableWideStringHistogram = .data:0x8041C460; // type:object size:0x4 scope:global +gDialogHandle = .data:0x8041C46C; // type:object size:0x4 scope:local +g_KBDelaySeconds = .data:0x8041C470; // type:object size:0x4 scope:global +g_MaxSongs = .data:0x8041C47C; // type:object size:0x4 scope:global +song_info_loaded.34751 = .data:0x8041C480; // type:object size:0x4 scope:local +FEDatabase = .data:0x8041C484; // type:object size:0x4 scope:global +prevModelNameHash.35592 = .data:0x8041C494; // type:object size:0x4 scope:local +modelNameKey.35593 = .data:0x8041C498; // type:object size:0x4 scope:local +g_fImpoundPercentageOfOriginalCost = .data:0x8041C49C; // type:object size:0x4 scope:global +g_MaximumMaximumTimesBusted = .data:0x8041C4A0; // type:object size:0x4 scope:global +mpobFERenderObjectSlotPool = .data:0x8041C4A4; // type:object size:0x4 scope:global +FERenderEPolySlotPool = .data:0x8041C4A8; // type:object size:0x4 scope:global +FERenderEPolySlotPoolOverflow = .data:0x8041C4AC; // type:object size:0x4 scope:global +_11cFEngRender.mInstance = .data:0x8041C4B0; // type:object size:0x4 scope:global +ObjectSortLastZ = .data:0x8041C4B4; // type:object size:0x4 scope:global +ObjectSortRenderingPackage = .data:0x8041C4B8; // type:object size:0x4 scope:global +gLoadinScreenPackageName = .data:0x8041C4BC; // type:object size:0x4 scope:global +ScreenFactoryData = .data:0x8041C4C0; // type:object size:0x448 scope:local +ScreenButtonData = .data:0x8041C908; // type:object size:0x258 scope:local +_13FEPackageData.mInScreenConstructor = .data:0x8041CB60; // type:object size:0x4 scope:global +_16FEPackageManager.mInstance = .data:0x8041CB64; // type:object size:0x4 scope:global +FontReplacementTable = .data:0x8041CB68; // type:object size:0x8 scope:global +ExtraFontDataTable = .data:0x8041CB70; // type:object size:0x30 scope:global +g_pOLCurrentScreen = .data:0x8041CBAC; // type:object size:0x4 scope:global +Button_Action_Hashes_GAMECUBE = .data:0x8041CBC0; // type:object size:0x154 scope:global +Button_Action_Hashes_GAMECUBE_Wheel = .data:0x8041CD14; // type:object size:0x154 scope:global +gTUTORIAL_MOVIE_DRAG = .data:0x8041CE6C; // type:object size:0x4 scope:local +gTUTORIAL_MOVIE_SPEEDTRAP = .data:0x8041CE70; // type:object size:0x4 scope:local +g_bCustomizeInBackRoom = .data:0x8041CE7C; // type:object size:0x4 scope:global +g_bCustomizeInPerformance = .data:0x8041CE80; // type:object size:0x4 scope:global +g_bCustomizeInParts = .data:0x8041CE84; // type:object size:0x4 scope:global +g_TheCustomizeEntryPoint = .data:0x8041CE88; // type:object size:0x4 scope:global +g_pCustomizeCarRecordToUse = .data:0x8041CE8C; // type:object size:0x4 scope:global +unlockType.38610 = .data:0x8041CE90; // type:object size:0xFC scope:local +unlockType.38626 = .data:0x8041CF8C; // type:object size:0x90 scope:local +FEDirection_Message = .data:0x8041D040; // type:object size:0x20 scope:global +PassWrapMode = .data:0x8041D060; // type:object size:0x14 scope:local +_13FECodeListBox.mpDefaultCallback = .data:0x8041D074; // type:object size:0x4 scope:global +_7FEngine.SysGUID = .data:0x8041D07C; // type:object size:0x4 scope:global +ImpulseDir = .data:0x8041D080; // type:object size:0x20 scope:local +PadButtonHash = .data:0x8041D0A0; // type:object size:0x4C scope:local +PadButtonHeldHash = .data:0x8041D0EC; // type:object size:0x8 scope:local +PadReleasedHash = .data:0x8041D0F4; // type:object size:0x4C scope:local +FEngMemoryPoolNumber = .data:0x8041D140; // type:object size:0x4 scope:global +pFEngMemoryPoolMemory = .data:0x8041D144; // type:object size:0x4 scope:global +FEngMemoryPoolSize = .data:0x8041D148; // type:object size:0x4 scope:global +FEngMemoryPoolTracingEnabled = .data:0x8041D150; // type:object size:0x4 scope:global +_8FEObject.pDestructorCallback = .data:0x8041D154; // type:object size:0x4 scope:global +_9FEPackage.uHoldDirtyFlags = .data:0x8041D158; // type:object size:0x4 scope:global +_8FEString.pLabelCallback = .data:0x8041D15C; // type:object size:0x4 scope:global +FEColor1Name = .data:0x8041D160; // type:object size:0x4 scope:local +FEColor2Name = .data:0x8041D164; // type:object size:0x4 scope:local +FEColor3Name = .data:0x8041D168; // type:object size:0x4 scope:local +FEColor4Name = .data:0x8041D16C; // type:object size:0x4 scope:local +FEFrameNumName = .data:0x8041D170; // type:object size:0x4 scope:local +SN_DSI = .data:0x8041D1C0; // type:object size:0x4 scope:global +SN_ISI = .data:0x8041D1C4; // type:object size:0x4 scope:global +SN_ALIGNMENT = .data:0x8041D1C8; // type:object size:0x4 scope:global +SN_FPE = .data:0x8041D1CC; // type:object size:0x4 scope:global +gMasterVideoMode = .data:0x8041D1DC; // type:object size:0x4 scope:local +UFoundation_AssertMessage = .data:0x8041D1E0; // type:object size:0x4 scope:global +_4CARP.gResolversSorted = .data:0x8041D1E8; // type:object size:0x4 scope:local +_4CARP.gHaveInitialized = .data:0x8041D1EC; // type:object size:0x4 scope:local +_4CARP.gDiagnosticFunc = .data:0x8041D1F4; // type:object size:0x4 scope:local +_4CARP.gResolving = .data:0x8041D1F8; // type:object size:0x4 scope:local +_4CARP.gDeltaAddress = .data:0x8041D1FC; // type:object size:0x4 scope:local +gInited = .data:0x8041D200; // type:object size:0x4 scope:local +_16GRuntimeInstance.sRingListHead = .data:0x8041D2B8; // type:object size:0x18 scope:global +_11GRaceStatus.fObj = .data:0x8041D30C; // type:object size:0x4 scope:global +_13GRaceDatabase.mObj = .data:0x8041D318; // type:object size:0x4 scope:global +typeTable.32142 = .data:0x8041D31C; // type:object size:0x58 scope:local +regionTable.32149 = .data:0x8041D374; // type:object size:0x18 scope:local +TWEAK_ShowGameplayMilestoneValues = .data:0x8041D394; // type:object size:0x4 scope:global +TWEAK_ShowAllGameplayIcons = .data:0x8041D398; // type:object size:0x4 scope:global +_8GManager.mObj = .data:0x8041D39C; // type:object size:0x4 scope:global +xLeft.34877 = .data:0x8041D3A4; // type:object size:0x4 scope:local +yTop.34878 = .data:0x8041D3A8; // type:object size:0x4 scope:local +line.34880 = .data:0x8041D3B0; // type:object size:0x4 scope:local +milestoneNames.34881 = .data:0x8041D3B4; // type:object size:0x24 scope:local +_18GInfractionManager.mObj = .data:0x8041D3D8; // type:object size:0x4 scope:global +_5GIcon.kEffectInfo = .data:0x8041D3DC; // type:object size:0xCC scope:global +sNumSpawned = .data:0x8041D4A8; // type:object size:0x4 scope:local +kObjectTemplateKey.37622 = .data:0x8041D4AC; // type:object size:0x18 scope:local +kObjectTemplateKey.37635 = .data:0x8041D4C4; // type:object size:0x18 scope:local +kObjectTemplateKey.37642 = .data:0x8041D4DC; // type:object size:0x18 scope:local +kObjectTemplateKey.37649 = .data:0x8041D4F4; // type:object size:0x18 scope:local +kObjectTemplateKey.37656 = .data:0x8041D50C; // type:object size:0x18 scope:local +kObjectTemplateKey.37663 = .data:0x8041D524; // type:object size:0x18 scope:local +_10LuaRuntime.mObj = .data:0x8041D580; // type:object size:0x4 scope:global +_13LuaPostOffice.fObj = .data:0x8041D590; // type:object size:0x4 scope:global +_10LuaBindery.fObj = .data:0x8041D59C; // type:object size:0x4 scope:global +_13LuaAttributes.fObj = .data:0x8041D5A0; // type:object size:0x4 scope:global +accessorTable.11371 = .data:0x8041D5A4; // type:object size:0xC0 scope:local +flagMapping.32877 = .data:0x8041D6D0; // type:object size:0x48 scope:local +kDisableNIS.32896 = .data:0x8041D718; // type:object size:0x4 scope:local +kPrintScriptMessages = .data:0x8041D71C; // type:object size:0x4 scope:local +sRealloc = .data:0x8041D724; // type:object size:0x4 scope:local +sFree = .data:0x8041D728; // type:object size:0x4 scope:local +fOverwroteDefaultsFacingScale.37496 = .data:0x8041D7EC; // type:object size:0x4 scope:local +fDefaultFacingScale.37497 = .data:0x8041D7F0; // type:object size:0x4 scope:local +fOverwroteDefaultsGrazingScale.37498 = .data:0x8041D7F4; // type:object size:0x4 scope:local +fDefaultGrazingScale.37499 = .data:0x8041D7F8; // type:object size:0x4 scope:local +wason.38444 = .data:0x8041D7FC; // type:object size:0x4 scope:local +prev_mode.38445 = .data:0x8041D800; // type:object size:0x4 scope:local +gMakeEventCallbacks = .data:0x8041D808; // type:object size:0x284 scope:local +gResolveEventCallbacks = .data:0x8041DA8C; // type:object size:0x284 scope:local +gEventLuaBindings = .data:0x8041DD10; // type:object size:0x284 scope:local +_5Query.gQueryFunctionTable = .data:0x8041DF94; // type:object size:0x4 scope:local +_5Query.gQueryResolverTable = .data:0x8041DF98; // type:object size:0x4 scope:local +_5Query.gQueryByteSwapperTable = .data:0x8041DF9C; // type:object size:0x4 scope:local +_6Attrib.kTypeHandlerCount = .data:0x8041DFA4; // type:object size:0x4 scope:local +_6Attrib.kTypeHandlerIds = .data:0x8041DFA8; // type:object size:0x20 scope:local +_6Attrib.kTypeHandlers = .data:0x8041DFC8; // type:object size:0x20 scope:local +GameActionToStringTable = .data:0x8041DFE8; // type:object size:0x458 scope:global +_11ActionQueue.sInJoylogFrame = .data:0x8041E440; // type:object size:0x4 scope:global +_Q43UTL3COMt7Factory3ZiZ11InputDeviceZ6UCrc32_9Prototype.mHead = .data:0x8041E444; // type:object size:0x4 scope:global +gMemoryBuffer = .data:0x8041E448; // type:object size:0x4 scope:local +gCreationPoint = .data:0x8041E44C; // type:object size:0x4 scope:local +gDeletionPoint = .data:0x8041E450; // type:object size:0x4 scope:local +gHighWaterMem = .data:0x8041E454; // type:object size:0x4 scope:local +_12EventManager.fgCurrentEvent = .data:0x8041E458; // type:object size:0x4 scope:global +_12EventManager.fgHaltCurrentList = .data:0x8041E45C; // type:object size:0x4 scope:global +_14EventSequencer.gNumActiveSystems = .data:0x8041E460; // type:object size:0x4 scope:local +_14EventSequencer.gLastUpdateTime = .data:0x8041E464; // type:object size:0x4 scope:local +LOCK_TO_30 = .data:0x8041E468; // type:object size:0x4 scope:global +_9Scheduler.fgScheduler = .data:0x8041E46C; // type:object size:0x4 scope:global +inputsys = .data:0x8041E47C; // type:object size:0x4 scope:global +input_buzz = .data:0x8041E480; // type:object size:0x20 scope:local +input_effects = .data:0x8041E4A0; // type:object size:0x10 scope:local +_10GameDevice.mCount = .data:0x8041E4B0; // type:object size:0x4 scope:global +gShowPortInfo = .data:0x8041E4B4; // type:object size:0x4 scope:global +pad_ticker = .data:0x8041E4B8; // type:object size:0x4 scope:local +pad_elapsed_ms = .data:0x8041E4BC; // type:object size:0x4 scope:local +_19SteeringWheelDevice.lgwheels = .data:0x8041E4C0; // type:object size:0x4 scope:global +previousVelocity.55375 = .data:0x8041E4C8; // type:object size:0x10 scope:local +timeAtCollision.55376 = .data:0x8041E4D8; // type:object size:0x10 scope:local +BasisMatrixInitDone = .data:0x8041E508; // type:object size:0x4 scope:global +ExitTheGameFlag = .data:0x8041E594; // type:object size:0x4 scope:global +last_frame_count = .data:0x8041E598; // type:object size:0x4 scope:local +g_discErrorNumber = .data:0x8041E59C; // type:object size:0x4 scope:global +g_discErrorOccured = .data:0x8041E5A0; // type:object size:0x4 scope:global +CurrentLoopCounter = .data:0x8041E5A8; // type:object size:0x4 scope:global +TimeDifferenceInMicroseconds = .data:0x8041E5B4; // type:object size:0x4 scope:global +TimeDifferenceInMiliseconds = .data:0x8041E5B8; // type:object size:0x4 scope:global +TimeDifferenceInSeconds = .data:0x8041E5BC; // type:object size:0x4 scope:global +MicrosecondsToMiliseconds = .data:0x8041E5C0; // type:object size:0x4 scope:global +MilisecondsToSeconds = .data:0x8041E5C4; // type:object size:0x4 scope:global +InitializeEverythingTicks = .data:0x8041E5C8; // type:object size:0x4 scope:global +RenderTimingStart = .data:0x8041E5F4; // type:object size:0x4 scope:global +RenderTimingEnd = .data:0x8041E5F8; // type:object size:0x4 scope:global +FrameTimingStartTime = .data:0x8041E5FC; // type:object size:0x4 scope:global +FrameTimingEndTime = .data:0x8041E600; // type:object size:0x4 scope:global +TweakerPauseCamera = .data:0x8041E61C; // type:object size:0x4 scope:global +camera_dt.28476 = .data:0x8041E620; // type:object size:0x4 scope:local +last_sim_tick_animated.28477 = .data:0x8041E624; // type:object size:0x4 scope:local +last_render_frame_animated.28478 = .data:0x8041E628; // type:object size:0x4 scope:local +gFramesToSkip = .data:0x8041E62C; // type:object size:0x4 scope:global +timeStep.28488 = .data:0x8041E630; // type:object size:0x4 scope:local +Tweak_FullSpeedMode = .data:0x8041E634; // type:object size:0x4 scope:global +twkDumpProfileMarks = .data:0x8041E638; // type:object size:0x4 scope:global +recursion_checker.28498 = .data:0x8041E63C; // type:object size:0x4 scope:local +previous_ticks.28499 = .data:0x8041E640; // type:object size:0x4 scope:local +PrintFreeMem.28503 = .data:0x8041E644; // type:object size:0x4 scope:local +NumResourcesBeingLoaded = .data:0x8041E648; // type:object size:0x4 scope:global +NumDelayedResourceCallbacks = .data:0x8041E64C; // type:object size:0x4 scope:global +ChunkMovementOffset = .data:0x8041E650; // type:object size:0x4 scope:global +LoaderTable = .data:0x8041E654; // type:object size:0x68 scope:global +UnloaderTable = .data:0x8041E6BC; // type:object size:0x68 scope:global +MoveChunkMemcpyTime = .data:0x8041E724; // type:object size:0x4 scope:global +MoveChunkMemcpyAmount = .data:0x8041E728; // type:object size:0x4 scope:global +PrintChunkLevel = .data:0x8041E730; // type:object size:0x4 scope:global +PostLoadFixupDisabled = .data:0x8041E734; // type:object size:0x4 scope:global +ResourceFileSlotPool = .data:0x8041E738; // type:object size:0x4 scope:global +CurrentlyHotChunking = .data:0x8041E73C; // type:object size:0x4 scope:global +_11AttribAlloc.mAllocator = .data:0x8041E740; // type:object size:0x4 scope:global +WheelsModelPackFilename = .data:0x8041E744; // type:object size:0x4 scope:global +SpoilerModelPackFilename = .data:0x8041E748; // type:object size:0x4 scope:global +SpoilerCarreraModelPackFilename = .data:0x8041E74C; // type:object size:0x4 scope:global +SpoilerHatchModelPackFilename = .data:0x8041E750; // type:object size:0x4 scope:global +SpoilerPorschesModelPackFilename = .data:0x8041E754; // type:object size:0x4 scope:global +RoofScoopModelPackFilename = .data:0x8041E758; // type:object size:0x4 scope:global +BrakesModelPackFilename = .data:0x8041E75C; // type:object size:0x4 scope:global +BrakesTexturePackFilename = .data:0x8041E760; // type:object size:0x4 scope:global +CarTexturePackFilename = .data:0x8041E764; // type:object size:0x4 scope:global +WheelsTexturePackFilename = .data:0x8041E768; // type:object size:0x4 scope:global +DynamicTexturePackFilename = .data:0x8041E76C; // type:object size:0x4 scope:global +HudDragTexturePackFilename = .data:0x8041E770; // type:object size:0x4 scope:global +HudSingleRaceTexturePackFilename = .data:0x8041E774; // type:object size:0x4 scope:global +HudSplitScreenTexturePackFilename = .data:0x8041E778; // type:object size:0x4 scope:global +HudDragSplitScreenTexturePackFilename = .data:0x8041E77C; // type:object size:0x4 scope:global +LoadingBootName = .data:0x8041E780; // type:object size:0x4 scope:global +LoadingControllerScreenPackageName = .data:0x8041E784; // type:object size:0x4 scope:global +pFrontEndVirtualMemBundle = .data:0x8041E788; // type:object size:0x4 scope:global +CarLoaderPoolSizes = .data:0x8041E78C; // type:object size:0x8 scope:global +CodeOverlayMemoryPoolNumber = .data:0x8041E794; // type:object size:0x4 scope:global +EnableCodeOverlayDebuggingOnly = .data:0x8041E798; // type:object size:0x4 scope:global +EnableCodeOverlay = .data:0x8041E79C; // type:object size:0x4 scope:global +CodeOverlayCallback = .data:0x8041E7A0; // type:object size:0x4 scope:global +CodeOverlayFirstTime = .data:0x8041E7A4; // type:object size:0x4 scope:global +FreeMemoryEnteringGame = .data:0x8041E7A8; // type:object size:0x4 scope:global +RealTimeFramesEnteringGame = .data:0x8041E7AC; // type:object size:0x4 scope:global +LeakDetectorFreeMemory = .data:0x8041E7B4; // type:object size:0x4 scope:global +LeakDetectorLargestAlloc = .data:0x8041E7B8; // type:object size:0x4 scope:global +LeakDetectorAllocationNumber = .data:0x8041E7BC; // type:object size:0x4 scope:global +InGameMemoryFile = .data:0x8041E7C4; // type:object size:0x4 scope:global +dummy.32338 = .data:0x8041E7C8; // type:object size:0x4 scope:local +gDatabaseVault = .data:0x8041E7CC; // type:object size:0x4 scope:local +sFrontEndVault = .data:0x8041E7D0; // type:object size:0x4 scope:local +sFrontEndVaultData = .data:0x8041E7D4; // type:object size:0x4 scope:local +sFrontEndVaultHigh = .data:0x8041E7D8; // type:object size:0x4 scope:local +GlobalMemoryFile = .data:0x8041E7E0; // type:object size:0x4 scope:global +FinishedLoadingGlobalSuccesful = .data:0x8041E7E8; // type:object size:0x4 scope:global +TrackStreamerLoadingBarUp = .data:0x8041E7EC; // type:object size:0x4 scope:global +ChunkNameTable = .data:0x8041E7F8; // type:object size:0x8 scope:global +buffer_num.32546 = .data:0x8041E800; // type:object size:0x4 scope:local +SmallRumblePoints = .data:0x8041E808; // type:object size:0x20 scope:global +BigRumblePoints = .data:0x8041E828; // type:object size:0x20 scope:global +ShockSwayRumblePoints = .data:0x8041E848; // type:object size:0x18 scope:global +RoadNoisePoints0 = .data:0x8041E860; // type:object size:0x18 scope:global +RoadNoisePoints1 = .data:0x8041E878; // type:object size:0x18 scope:global +BinaryRumblePoints = .data:0x8041E890; // type:object size:0x10 scope:global +SingleRoadBumpRumblePoints = .data:0x8041E8A0; // type:object size:0x10 scope:global +DoubleRoadBumpRumblePoints = .data:0x8041E8B0; // type:object size:0x20 scope:global +ShakeAmplitudePoints = .data:0x8041E8D0; // type:object size:0x28 scope:global +GearGrindPoints = .data:0x8041E8F8; // type:object size:0x18 scope:global +EngineHeatPoints = .data:0x8041E910; // type:object size:0x10 scope:global +EngineRevPoints = .data:0x8041E920; // type:object size:0x10 scope:global +NOSPoints = .data:0x8041E930; // type:object size:0x10 scope:global +DriftPoints = .data:0x8041E940; // type:object size:0x10 scope:global +BurnoutPoints = .data:0x8041E950; // type:object size:0x18 scope:global +EnableJoylog = .data:0x8041E968; // type:object size:0x4 scope:global +SaveJoylog = .data:0x8041E96C; // type:object size:0x4 scope:global +CurrentJoylogThrottleBuffer = .data:0x8041E970; // type:object size:0x4 scope:global +NFSJoylogChannelInfoTable = .data:0x8041E974; // type:object size:0xA8 scope:global +_6Joylog.ReplayingFlag = .data:0x8041EA1C; // type:object size:0x4 scope:global +_6Joylog.CapturingFlag = .data:0x8041EA20; // type:object size:0x4 scope:global +_6Joylog.pReplayingBuffer = .data:0x8041EA24; // type:object size:0x4 scope:global +_6Joylog.pCapturingBuffer = .data:0x8041EA28; // type:object size:0x4 scope:global +_6Joylog.ReadAheadBufferSize = .data:0x8041EA2C; // type:object size:0x4 scope:global +_6Joylog.ReadAheadBufferPos = .data:0x8041EA30; // type:object size:0x4 scope:global +_6Joylog.ReadAheadBuffer = .data:0x8041EA34; // type:object size:0x4 scope:global +total_captured.32815 = .data:0x8041EA3C; // type:object size:0x4 scope:local +QueuedFileDefaultPriority = .data:0x8041EA4C; // type:object size:0x4 scope:global +QueuedFileMinPriority = .data:0x8041EA50; // type:object size:0x4 scope:global +QueuedFileMinPriorityTimeoutCounter = .data:0x8041EA54; // type:object size:0x4 scope:global +QueuedFileJoylogEnabled = .data:0x8041EA58; // type:object size:0x4 scope:global +QueuedFileDebugTimeStart = .data:0x8041EA5C; // type:object size:0x4 scope:global +QueuedFileSlotPool = .data:0x8041EA60; // type:object size:0x4 scope:global +_10QueuedFile.CurrentHandle = .data:0x8041EA64; // type:object size:0x4 scope:global +_10QueuedFile.DecompressionTableBot = .data:0x8041EA68; // type:object size:0x4 scope:global +_10QueuedFile.DecompressionTableTop = .data:0x8041EA6C; // type:object size:0x4 scope:global +EnableQueuedFileBundle = .data:0x8041EA70; // type:object size:0x4 scope:global +QueuedFileNumReadsInProgress = .data:0x8041EA74; // type:object size:0x4 scope:global +bFileSlotPool = .data:0x8041EA78; // type:object size:0x4 scope:global +_20CachedRealFileHandle.NumInstances = .data:0x8041EA80; // type:object size:0x4 scope:global +OpenDisculatorFileSlotPool = .data:0x8041EA84; // type:object size:0x4 scope:global +_16DisculatorDriver.sDisculatorDriver = .data:0x8041EA88; // type:object size:0x4 scope:global +bFileNumInstances = .data:0x8041EA94; // type:object size:0x4 scope:global +_5bFile.TotalNumPendingCallbacks = .data:0x8041EA98; // type:object size:0x4 scope:global +ZERO = .data:0x8041EAA8; // type:object size:0x4 scope:local +hexChars.33689 = .data:0x8041EAAC; // type:object size:0x11 scope:local +bCartoonMode = .data:0x8041EAE8; // type:object size:0x4 scope:global +sWireFrame = .data:0x8041EAEC; // type:object size:0x24 scope:global +sPixelClamp = .data:0x8041EB10; // type:object size:0x18 scope:global +sFlatShaded = .data:0x8041EB28; // type:object size:0x18 scope:global +sFlatOrange = .data:0x8041EB40; // type:object size:0x18 scope:global +sWireOrange = .data:0x8041EB58; // type:object size:0x24 scope:global +sBigHead = .data:0x8041EB7C; // type:object size:0xC scope:global +sCartoonMode = .data:0x8041EB88; // type:object size:0x3C scope:global +sCoolFog = .data:0x8041EBC4; // type:object size:0x18 scope:global +sChromeCars = .data:0x8041EBDC; // type:object size:0x48 scope:global +StomperTable = .data:0x8041EC28; // type:object size:0x1C scope:global +pStomper = .data:0x8041EC44; // type:object size:0x4 scope:global +StaticEasterEggsTable.34218 = .data:0x8041EC48; // type:object size:0x78 scope:local +FrameCounter = .data:0x8041ECC0; // type:object size:0x4 scope:global +LastFrameCounterTick = .data:0x8041ECC4; // type:object size:0x4 scope:global +CurrentVideoMode = .data:0x8041ECC8; // type:object size:0x4 scope:global +RealTimeFrames = .data:0x8041ECCC; // type:object size:0x4 scope:global +RealTime = .data:0x8041ECD0; // type:object size:0x4 scope:global +RealTimeFramesElapsed = .data:0x8041ECD4; // type:object size:0x4 scope:global +RealTimeElapsedQuantized = .data:0x8041ECD8; // type:object size:0x4 scope:global +RealTimeElapsedFrame = .data:0x8041ECDC; // type:object size:0x4 scope:global +RealTimeElapsedError = .data:0x8041ECE0; // type:object size:0x4 scope:global +RealLoopCounter = .data:0x8041ECE4; // type:object size:0x4 scope:global +DefaultLimitMinimumVideoTimeElapsed = .data:0x8041ECE8; // type:object size:0x4 scope:global +MaxTicksPerTimestep = .data:0x8041ECEC; // type:object size:0x4 scope:global +SeenTimerProblem.34444 = .data:0x8041ECF0; // type:object size:0x4 scope:local +SavedTimeDifferenceInMicroseconds.34445 = .data:0x8041ECF4; // type:object size:0x4 scope:local +SavedTimeDifferenceInMiliseconds.34446 = .data:0x8041ECF8; // type:object size:0x4 scope:local +SavedTimeDifferenceInSeconds.34447 = .data:0x8041ECFC; // type:object size:0x4 scope:local +Saved_start_video_time_elapsed.34448 = .data:0x8041ED00; // type:object size:0x4 scope:local +Saved_high_nibble.34449 = .data:0x8041ED04; // type:object size:0x4 scope:local +HadBadTimeDifferenceInMiliseconds.34450 = .data:0x8041ED08; // type:object size:0x4 scope:local +HadBadTimeDifferenceInSeconds.34451 = .data:0x8041ED0C; // type:object size:0x4 scope:local +HadBad_start_video_time_elapsed.34452 = .data:0x8041ED10; // type:object size:0x4 scope:local +HadBad_video_time_elapsed.34453 = .data:0x8041ED14; // type:object size:0x4 scope:local +HadBad_MicrosecondsToMiliseconds.34454 = .data:0x8041ED18; // type:object size:0x4 scope:local +HadBad_MilisecondsToSeconds.34455 = .data:0x8041ED1C; // type:object size:0x4 scope:local +WorldTimeSeconds = .data:0x8041ED20; // type:object size:0x4 scope:global +WorldTime = .data:0x8041ED24; // type:object size:0x4 scope:global +WorldTimeFrames = .data:0x8041ED28; // type:object size:0x4 scope:global +WorldTimeFramesElapsed = .data:0x8041ED2C; // type:object size:0x4 scope:global +WorldTimeElapsed = .data:0x8041ED30; // type:object size:0x4 scope:global +WorldTimeElapsedFrame = .data:0x8041ED34; // type:object size:0x4 scope:global +WorldLoopCounter = .data:0x8041ED38; // type:object size:0x4 scope:global +NeedToPrepareWorldTimestep = .data:0x8041ED3C; // type:object size:0x4 scope:global +_Q26Hermes7Handler.mKeyNext = .data:0x8041ED48; // type:object size:0x4 scope:global +_Q26Hermes6System.mObj = .data:0x8041ED4C; // type:object size:0x4 scope:global +TotalNumHermesHandlers = .data:0x8041ED50; // type:object size:0x4 scope:global +BuildVersionChangelistName = .data:0x8041ED7C; // type:object size:0x4 scope:global +EmergencySaveMemory = .data:0x8041ED90; // type:object size:0x4 scope:global +SkipFE = .data:0x8041ED94; // type:object size:0x4 scope:global +SkipFETrackNumber = .data:0x8041ED98; // type:object size:0x4 scope:global +SkipFERaceID = .data:0x8041ED9C; // type:object size:0x10 scope:global +SkipFEPlayerCar = .data:0x8041EDAC; // type:object size:0x4 scope:global +SkipFEPlayer2Car = .data:0x8041EDB0; // type:object size:0x4 scope:global +SkipFEPlayerPerformance = .data:0x8041EDB4; // type:object size:0x4 scope:global +SkipFEOpponentPresetRide = .data:0x8041EDB8; // type:object size:0x4 scope:global +SkipFESplitScreen = .data:0x8041EDBC; // type:object size:0x4 scope:global +SkipFENumPlayerCars = .data:0x8041EDC4; // type:object size:0x4 scope:global +SkipFENumAICars = .data:0x8041EDC8; // type:object size:0x4 scope:global +SkipFENumLaps = .data:0x8041EDCC; // type:object size:0x4 scope:global +SkipFETrackDirection = .data:0x8041EDD0; // type:object size:0x4 scope:global +SkipFEMaxCops = .data:0x8041EDD4; // type:object size:0x4 scope:global +SkipFEDisableCops = .data:0x8041EDD8; // type:object size:0x4 scope:global +SkipFEHelicopter = .data:0x8041EDDC; // type:object size:0x4 scope:global +SkipFEPovType1 = .data:0x8041EDE0; // type:object size:0x4 scope:global +SkipFETrafficDensity = .data:0x8041EDE4; // type:object size:0x4 scope:global +SkipFEDisableTraffic = .data:0x8041EDE8; // type:object size:0x4 scope:global +SkipFETrafficOncoming = .data:0x8041EDEC; // type:object size:0x4 scope:global +SkipFERaceType = .data:0x8041EDF0; // type:object size:0x4 scope:global +SkipFEPoint2Point = .data:0x8041EDF4; // type:object size:0x4 scope:global +SkipFEDifficulty = .data:0x8041EDF8; // type:object size:0x4 scope:global +SkipFEDamageEnabled = .data:0x8041EDFC; // type:object size:0x4 scope:global +SkipFEOverrideStartPosition = .data:0x8041EE00; // type:object size:0x4 scope:global +SkipNISs = .data:0x8041EE08; // type:object size:0x4 scope:global +SkipFELanguage = .data:0x8041EE0C; // type:object size:0x4 scope:global +SkipFEControllerConfig1 = .data:0x8041EE10; // type:object size:0x4 scope:global +SkipFEControllerConfig2 = .data:0x8041EE14; // type:object size:0x4 scope:global +bRumbleEnabled = .data:0x8041EE20; // type:object size:0x4 scope:global +gVerboseTesterOutput = .data:0x8041EE2C; // type:object size:0x4 scope:global +PrecipitationEnable = .data:0x8041EE30; // type:object size:0x4 scope:global +TimeOfDaySwapEnable = .data:0x8041EE34; // type:object size:0x4 scope:global +EnableParticleSystem = .data:0x8041EE38; // type:object size:0x4 scope:global +DebugCameraNearPlane = .data:0x8041EE44; // type:object size:0x4 scope:global +IsSoundEnabled = .data:0x8041EE4C; // type:object size:0x4 scope:global +IsAudioStreamingEnabled = .data:0x8041EE50; // type:object size:0x4 scope:global +IsSpeechEnabled = .data:0x8041EE54; // type:object size:0x4 scope:global +IsNISAudioEnabled = .data:0x8041EE58; // type:object size:0x4 scope:global +ShutJosieUp = .data:0x8041EE5C; // type:object size:0x4 scope:global +IsMemcardEnabled = .data:0x8041EE60; // type:object size:0x4 scope:global +IsAutoSaveEnabled = .data:0x8041EE64; // type:object size:0x4 scope:global +AnimCfg_DisableAnimations = .data:0x8041EE6C; // type:object size:0x4 scope:global +AnimCfg_DebugOutput = .data:0x8041EE84; // type:object size:0x4 scope:global +AnimCfg_DisableWorldAnimations = .data:0x8041EE88; // type:object size:0x4 scope:global +OnlineEnabled = .data:0x8041EE9C; // type:object size:0x4 scope:global +DisableCommunication = .data:0x8041EEAC; // type:object size:0x4 scope:global +UnlockAllThings = .data:0x8041EEB0; // type:object size:0x4 scope:global +SkipCareerIntro = .data:0x8041EEB4; // type:object size:0x4 scope:global +SkipDDayRaces = .data:0x8041EEB8; // type:object size:0x4 scope:global +ShowAllCarsInFE = .data:0x8041EEBC; // type:object size:0x4 scope:global +ShowAllPresetsInFE = .data:0x8041EEC4; // type:object size:0x4 scope:global +MikeMannBuild = .data:0x8041EEC8; // type:object size:0x4 scope:global +IsCollectorsEdition = .data:0x8041EECC; // type:object size:0x4 scope:global +CarGuysCamera = .data:0x8041EED4; // type:object size:0x4 scope:global +DoScreenPrintf = .data:0x8041EEE8; // type:object size:0x4 scope:global +SkipMovies = .data:0x8041EEEC; // type:object size:0x4 scope:global +_Q33UTL11Collectionst9Singleton1Z7ICopMgr.mInstance = .data:0x8041EF88; // type:object size:0x4 scope:global +_Q33UTL11Collectionst9Singleton1Z10IGameState.mInstance = .data:0x8041EF8C; // type:object size:0x4 scope:global +_Q33UTL11Collectionst9Singleton1Z11ITrafficMgr.mInstance = .data:0x8041EF90; // type:object size:0x4 scope:global +_Q33UTL11Collectionst9Countable1Z17IPlaceableScenery._mCount = .data:0x8041EF94; // type:object size:0x4 scope:global +_Q43UTL3COMt7Factory3ZQ23Sim5ParamZ8ISimableZ6UCrc32_9Prototype.mHead = .data:0x8041EF98; // type:object size:0x4 scope:global +_Q43UTL3COMt7Factory3ZQ23Sim5ParamZQ23Sim9IActivityZ6UCrc32_9Prototype.mHead = .data:0x8041EF9C; // type:object size:0x4 scope:global +Tweak_TuningAero = .data:0x8041EFDC; // type:object size:0x4 scope:global +Tweak_UseTweakerTunings = .data:0x8041EFE0; // type:object size:0x4 scope:global +Smackable_RigidCount = .data:0x8041EFE8; // type:object size:0x4 scope:local +_Q33UTL11Collectionst9Singleton1ZQ29Smackable7Manager.mInstance = .data:0x8041EFEC; // type:object size:0x4 scope:global +_13VehicleSystem.ENABLE_ROLL_STOPS_THRESHOLD = .data:0x8041F008; // type:object size:0x4 scope:global +_13VehicleSystem.PAD_DEAD_ZONE = .data:0x8041F020; // type:object size:0x4 scope:global +_Q43UTL3COMt7Factory3ZRC14BehaviorParamsZ8BehaviorZ6UCrc32_9Prototype.mHead = .data:0x8041F054; // type:object size:0x4 scope:global +_12SceneryModel.mSceneryCount = .data:0x8041F078; // type:object size:0x4 scope:global +TheSmackableClass = .data:0x8041F07C; // type:object size:0x4 scope:local +put_maps = .data:0x8041F080; // type:object size:0xE0 scope:global +Physics_Info_initialized = .data:0x8041F164; // type:object size:0x4 scope:local +_t10ScratchPtr1ZQ29RigidBody8Volatile.mWorkSpace = .data:0x8041F1A4; // type:object size:0x4 scope:global +_9RigidBody.mCount = .data:0x8041F1A8; // type:object size:0x4 scope:global +_Q23SAPt4Grid1Z9RigidBody.mRootX = .data:0x8041F1AC; // type:object size:0x4 scope:global +_Q23SAPt4Grid1Z9RigidBody.mRootZ = .data:0x8041F1B0; // type:object size:0x4 scope:global +_9RigidBody.mOnSP = .data:0x8041F1B4; // type:object size:0x4 scope:global +_t10ScratchPtr1ZQ215SimpleRigidBody8Volatile.mWorkSpace = .data:0x8041F1B8; // type:object size:0x4 scope:global +_15SimpleRigidBody.mCount = .data:0x8041F1BC; // type:object size:0x4 scope:global +TractionVsSpeed = .data:0x8041F228; // type:object size:0x28 scope:global +GripVsSpeed = .data:0x8041F250; // type:object size:0x28 scope:global +AeroDropOff = .data:0x8041F278; // type:object size:0x4 scope:global +AeroDropOffMin = .data:0x8041F27C; // type:object size:0x4 scope:global +OffThrottleDragFactor = .data:0x8041F280; // type:object size:0x4 scope:global +OffThrottleDragCenterHeight = .data:0x8041F284; // type:object size:0x4 scope:global +ZeroDegreeTable = .data:0x8041F288; // type:object size:0x18 scope:global +TwoDegreeTable = .data:0x8041F2A0; // type:object size:0x18 scope:global +FourDegreeTable = .data:0x8041F2B8; // type:object size:0x18 scope:global +SixDegreeTable = .data:0x8041F2D0; // type:object size:0x18 scope:global +EightDegreeTable = .data:0x8041F2E8; // type:object size:0x18 scope:global +TenDegreeTable = .data:0x8041F300; // type:object size:0x18 scope:global +TwelveDegreeTable = .data:0x8041F318; // type:object size:0x18 scope:global +LoadSensitivityTable = .data:0x8041F330; // type:object size:0x1C scope:global +BrakingTorque = .data:0x8041F350; // type:object size:0x4 scope:global +EBrakingTorque = .data:0x8041F354; // type:object size:0x4 scope:global +StaticToDynamicBrakeForceRatio.32494 = .data:0x8041F358; // type:object size:0x4 scope:local +BrakeLockAngularVelocityFactor.32495 = .data:0x8041F35C; // type:object size:0x4 scope:local +RollingFriction = .data:0x8041F360; // type:object size:0x4 scope:global +WheelMomentOfInertia = .data:0x8041F364; // type:object size:0x4 scope:global +BrakeSteeringRangeMultiplier = .data:0x8041F368; // type:object size:0x4 scope:global +SteeringRangeData = .data:0x8041F374; // type:object size:0x28 scope:global +SteeringInputRangeData = .data:0x8041F39C; // type:object size:0x18 scope:global +SteeringSpeedData = .data:0x8041F3B4; // type:object size:0x28 scope:global +SteeringWheelRangeData = .data:0x8041F3DC; // type:object size:0x28 scope:global +SteeringInputSpeedData = .data:0x8041F404; // type:object size:0x18 scope:global +SteeringInputData = .data:0x8041F41C; // type:object size:0x18 scope:global +JoystickInputToSteerRemap1 = .data:0x8041F434; // type:object size:0x54 scope:global +JoystickInputToSteerRemap2 = .data:0x8041F488; // type:object size:0x54 scope:global +JoystickInputToSteerRemap3 = .data:0x8041F4DC; // type:object size:0x54 scope:global +JoystickInputToSteerRemapDrift = .data:0x8041F530; // type:object size:0x54 scope:global +BurnoutFrictionData = .data:0x8041F584; // type:object size:0x30 scope:global +BurnOutCancelSlipValue = .data:0x8041F5B4; // type:object size:0x4 scope:global +BurnOutYawCancel = .data:0x8041F5B8; // type:object size:0x4 scope:global +BurnOutAllowTime = .data:0x8041F5BC; // type:object size:0x4 scope:global +BurnOutMaxSpeed = .data:0x8041F5C0; // type:object size:0x4 scope:global +BurnOutFishTailTime = .data:0x8041F5C4; // type:object size:0x4 scope:global +BurnOutFishTails = .data:0x8041F5C8; // type:object size:0x4 scope:global +EBrakeYawControlMin = .data:0x8041F5CC; // type:object size:0x4 scope:global +EBrakeYawControlOnSpeed = .data:0x8041F5D0; // type:object size:0x4 scope:global +EBrakeYawControlOffSpeed = .data:0x8041F5D4; // type:object size:0x4 scope:global +EBrake180Yaw = .data:0x8041F5D8; // type:object size:0x4 scope:global +EBrake180Speed = .data:0x8041F5DC; // type:object size:0x4 scope:global +LowSpeedSpeed = .data:0x8041F5E0; // type:object size:0x4 scope:global +HighSpeedSpeed = .data:0x8041F5E4; // type:object size:0x4 scope:global +MaxYawBonus = .data:0x8041F5E8; // type:object size:0x4 scope:global +LowSpeedYawBoost = .data:0x8041F5EC; // type:object size:0x4 scope:global +HighSpeedYawBoost = .data:0x8041F5F0; // type:object size:0x4 scope:global +YawEBrakeThreshold = .data:0x8041F5F4; // type:object size:0x4 scope:global +YawAngleThreshold = .data:0x8041F5F8; // type:object size:0x4 scope:global +DriftRearFrictionData = .data:0x8041F608; // type:object size:0x28 scope:global +printit = .data:0x8041F630; // type:object size:0x4 scope:local +TrailerCorneringForceTable = .data:0x8041F634; // type:object size:0x1C scope:global +gNIS_AeroDynamics = .data:0x8041F650; // type:object size:0x4 scope:global +Tweak_InfiniteNOS = .data:0x8041F654; // type:object size:0x4 scope:global +ClutchStiffness = .data:0x8041F658; // type:object size:0x4 scope:global +ClutchPlayData = .data:0x8041F65C; // type:object size:0x28 scope:global +ClutchLimiter = .data:0x8041F684; // type:object size:0x4 scope:global +Max_Chopper_Accel = .data:0x8041F688; // type:object size:0x4 scope:global +Min_Chopper_Accel = .data:0x8041F68C; // type:object size:0x4 scope:global +Chopper_Ratio = .data:0x8041F690; // type:object size:0x4 scope:global +Vehicle_Part_Count = .data:0x8041F69C; // type:object size:0x4 scope:local +snProfilerEnable = .data:0x8041F728; // type:object size:0x4 scope:global +egAlphaA = .data:0x8041F738; // type:object size:0x4 scope:global +egAlphaB = .data:0x8041F73C; // type:object size:0x4 scope:global +egAlphaC = .data:0x8041F740; // type:object size:0x4 scope:global +egAlphaD = .data:0x8041F744; // type:object size:0x4 scope:global +egAlphaF = .data:0x8041F748; // type:object size:0x4 scope:global +s_OpenCover_ErrorText = .data:0x8041F74C; // type:object size:0xA8 scope:global +resetButtonPressed.25896 = .data:0x8041F7F4; // type:object size:0x4 scope:local +queuedSavingResetButtonPressed.25897 = .data:0x8041F7F8; // type:object size:0x4 scope:local +resetMode.25898 = .data:0x8041F7FC; // type:object size:0x4 scope:local +softwareResetCheckStarted.25899 = .data:0x8041F800; // type:object size:0x4 scope:local +num_queued_resets.25901 = .data:0x8041F804; // type:object size:0x4 scope:local +eAnimTextureSlotPool = .data:0x8041F808; // type:object size:0x4 scope:global +pTexPrev = .data:0x8041F80C; // type:object size:0x4 scope:global +stagePrev.26088 = .data:0x8041F810; // type:object size:0x4 scope:local +plat_lgwheels = .data:0x8041F814; // type:object size:0x4 scope:global +JoystickRingBufferTop = .data:0x8041F824; // type:object size:0x4 scope:global +JoystickRingBufferBottom = .data:0x8041F828; // type:object size:0x4 scope:global +JoystickInitialized = .data:0x8041F830; // type:object size:0x4 scope:global +SunPosX = .data:0x8041F840; // type:object size:0x4 scope:global +SunPosY = .data:0x8041F844; // type:object size:0x4 scope:global +SunVisibility = .data:0x8041F848; // type:object size:0x4 scope:global +DoSunVisibility = .data:0x8041F850; // type:object size:0x4 scope:global +SunMaxIntensity = .data:0x8041F854; // type:object size:0x4 scope:global +bin_globala_bun = .data:0x8041F8C4; // type:object size:0x15E74 scope:global +randomSeed = .data:0x80435738; // type:object size:0x4 scope:local +gComment1 = .data:0x80435740; // type:object size:0x4 scope:global +_7RRandom.fastRandom = .data:0x80435768; // type:object size:0x4 scope:global +_7RRandom.randSeed = .data:0x8043576C; // type:object size:0x4 scope:global +_Q23Sim8Internal.mRenderFrame = .data:0x80435814; // type:object size:0x4 scope:local +_Q23Sim8Internal.mFrameTime = .data:0x80435818; // type:object size:0x4 scope:local +_Q23Sim8Internal.mWorkspace = .data:0x8043581C; // type:object size:0x4 scope:local +_Q23Sim8Internal.mStackFrame = .data:0x80435820; // type:object size:0x4 scope:local +_Q33UTL11Collectionst9Countable1Z7SimTask._mCount = .data:0x80435828; // type:object size:0x4 scope:global +_7SimTask.mNextHandle = .data:0x8043582C; // type:object size:0x4 scope:global +_Q23Sim9SubSystem.mHead = .data:0x80435830; // type:object size:0x4 scope:global +_Q23Sim8Internal.mUserMode = .data:0x80435838; // type:object size:0x4 scope:local +_Q33UTL11Collectionst9Singleton1ZQ33Sim8Internal11CDispatcher.mInstance = .data:0x8043583C; // type:object size:0x4 scope:global +TheSurfaceClass = .data:0x80435848; // type:object size:0x4 scope:local +_10SimSurface.mUnknown = .data:0x80435850; // type:object size:0x4 scope:global +_10SimSurface.mNullSpec = .data:0x80435854; // type:object size:0x4 scope:global +Tweak_GameBreakerRechargeTime = .data:0x80435884; // type:object size:0x4 scope:global +Tweak_GameBreakerRechargeSpeed = .data:0x80435888; // type:object size:0x4 scope:global +Tweak_InfiniteRaceBreaker = .data:0x8043588C; // type:object size:0x4 scope:global +Tweak_GameBreakerCollisionMass = .data:0x80435890; // type:object size:0x4 scope:global +_Q33UTL11Collectionst9Countable1ZQ23Sim6Object._mCount = .data:0x80435894; // type:object size:0x4 scope:global +_Q43UTL3COMt7Factory3ZQ23Sim5ParamZQ23Sim7IEntityZ6UCrc32_9Prototype.mHead = .data:0x80435898; // type:object size:0x4 scope:global +_Q43UTL3COMt7Factory3ZRCQ23Sim14ConnectionDataZQ23Sim10ConnectionZ6UCrc32_9Prototype.mHead = .data:0x8043589C; // type:object size:0x4 scope:global +_Q43UTL3COMt7Factory3ZPQ23Sim6PacketZiZ6UCrc32_9Prototype.mHead = .data:0x804358A0; // type:object size:0x4 scope:global +_Q33UTL11Collectionst9Countable1ZQ23Sim10Connection._mCount = .data:0x804358A4; // type:object size:0x4 scope:global +bSawLoadingScreen = .data:0x804358AC; // type:object size:0x4 scope:global +Tweak_GameSpeed = .data:0x804358B4; // type:object size:0x4 scope:global +_Q33UTL11Collectionst9Singleton1Z4INIS.mInstance = .data:0x804358C4; // type:object size:0x4 scope:global +NisNamesToDisablePreculler = .data:0x804358C8; // type:object size:0x4 scope:global +_11NISActivity.mElapsedmsAudioTime = .data:0x804358CC; // type:object size:0x4 scope:global +Tweak_EnableNISMomements = .data:0x804358D0; // type:object size:0x4 scope:global +gSpeechSeed = .data:0x80435970; // type:object size:0x4 scope:local +SPEECH_DISPLAY_HISTORY = .data:0x80435978; // type:object size:0x4 scope:global +_Q26Speech7Manager.m_SpeechModule = .data:0x80435980; // type:object size:0x8 scope:global +_Q26Speech7Manager.m_speechMode = .data:0x80435988; // type:object size:0x4 scope:global +_Q26Speech7Manager.m_numberSpeechBanks = .data:0x8043598C; // type:object size:0x4 scope:global +_Q26Speech7Manager.m_SPEECH_initted = .data:0x80435990; // type:object size:0x4 scope:global +_Q26Speech7Manager.m_SPEECH_bankPtrMem = .data:0x80435994; // type:object size:0x4 scope:global +_Q26Speech7Manager.m_speechDisable = .data:0x80435998; // type:object size:0x4 scope:global +_Q26Speech7Manager.m_gameSpeechInitted = .data:0x8043599C; // type:object size:0x4 scope:global +_Q26Speech7Manager.m_NISAudioInitted = .data:0x804359A0; // type:object size:0x4 scope:global +_Q26Speech7Manager.m_clock_in_ms = .data:0x804359A4; // type:object size:0x4 scope:global +_Q26Speech7Manager.m_timestep = .data:0x804359A8; // type:object size:0x4 scope:global +_Q26Speech7Manager.m_deadair = .data:0x804359AC; // type:object size:0x4 scope:global +_Q26Speech7Manager.mCurrentEvent = .data:0x804359B0; // type:object size:0x4 scope:global +_Q26Speech7Manager.m_frameindex = .data:0x804359B4; // type:object size:0x2 scope:global +_Q26Speech7Manager.mProbPlayback = .data:0x804359B8; // type:object size:0x4 scope:global +_Q26Speech7Manager.mLastSpeakerID = .data:0x804359BC; // type:object size:0x2 scope:global +max_samplerequests.25590 = .data:0x804359C0; // type:object size:0x4 scope:local +TRACKSTREAMER_BACKLOG_THRESH = .data:0x804359D0; // type:object size:0x4 scope:global +_Q26Speech10GameSpeech.m_tempCharPtr = .data:0x804359D4; // type:object size:0x4 scope:global +_Q26Speech10GameSpeech.m_clumpIdx = .data:0x804359D8; // type:object size:0x4 scope:global +_Q26Speech10GameSpeech.m_csisData = .data:0x804359DC; // type:object size:0x4 scope:global +_Q26Speech10GameSpeech.m_channel = .data:0x804359E0; // type:object size:0x4 scope:global +_Q26Speech10GameSpeech.m_eventDat = .data:0x804359E4; // type:object size:0x4 scope:global +req_timer.26707 = .data:0x804359E8; // type:object size:0x4 scope:local +_Q26Speech10SED_NISSFX.m_tempCharPtr = .data:0x804359EC; // type:object size:0x4 scope:global +_Q26Speech10SED_NISSFX.m_clumpIdx = .data:0x804359F0; // type:object size:0x4 scope:global +_Q26Speech10SED_NISSFX.m_csisData = .data:0x804359F4; // type:object size:0x4 scope:global +_Q26Speech10SED_NISSFX.m_channel = .data:0x804359F8; // type:object size:0x4 scope:global +_Q26Speech10SED_NISSFX.m_eventDat = .data:0x804359FC; // type:object size:0x4 scope:global +_Q26Speech10SED_NISSFX.m_dataIsLoaded = .data:0x80435A00; // type:object size:0x4 scope:global +SpeechMemoryPool = .data:0x80435A04; // type:object size:0x4 scope:global +SPEECH_CACHE_STATS = .data:0x80435A08; // type:object size:0x4 scope:global +PRINT_SPEECH_CACHE_IO = .data:0x80435A0C; // type:object size:0x4 scope:global +flushcount_uncached = .data:0x80435A10; // type:object size:0x4 scope:local +flushcount_lru = .data:0x80435A14; // type:object size:0x4 scope:local +flushcount_inactive_spkrs = .data:0x80435A18; // type:object size:0x4 scope:local +flushcount_all = .data:0x80435A1C; // type:object size:0x4 scope:local +_4Csis.AcknowledgeId = .data:0x80435A20; // type:object size:0x8 scope:global +_4Csis.Setup_SpotterId = .data:0x80435A28; // type:object size:0x8 scope:global +_4Csis.Setup_SpotterWantedId = .data:0x80435A30; // type:object size:0x8 scope:global +_4Csis.Setup_SpotterReplyId = .data:0x80435A38; // type:object size:0x8 scope:global +_4Csis.Setup_AttmptVehStpId = .data:0x80435A40; // type:object size:0x8 scope:global +_4Csis.Setup_DispGoAheadId = .data:0x80435A48; // type:object size:0x8 scope:global +_4Csis.Setup_PrimaryEngageId = .data:0x80435A50; // type:object size:0x8 scope:global +_4Csis.Setup_InitPursuitId = .data:0x80435A58; // type:object size:0x8 scope:global +_4Csis.Setup_SuspectConfirmedId = .data:0x80435A60; // type:object size:0x8 scope:global +_4Csis.Setup_ReInitPursuitId = .data:0x80435A68; // type:object size:0x8 scope:global +_4Csis.Setup_VehicleReportId = .data:0x80435A70; // type:object size:0x8 scope:global +_4Csis.Setup_VehicleReportTagId = .data:0x80435A78; // type:object size:0x8 scope:global +_4Csis.Setup_DispVehDescripId = .data:0x80435A80; // type:object size:0x8 scope:global +_4Csis.Setup_DispVehDescripVinylsId = .data:0x80435A88; // type:object size:0x8 scope:global +_4Csis.Setup_DispNoVehDescripId = .data:0x80435A90; // type:object size:0x8 scope:global +_4Csis.Setup_DispCustPaintId = .data:0x80435A98; // type:object size:0x8 scope:global +_4Csis.Setup_MoreDetailsId = .data:0x80435AA0; // type:object size:0x8 scope:global +_4Csis.Setup_LocationReportId = .data:0x80435AA8; // type:object size:0x8 scope:global +_4Csis.Setup_BullhornPrefixId = .data:0x80435AB0; // type:object size:0x8 scope:global +_4Csis.Setup_BullhornId = .data:0x80435AB8; // type:object size:0x8 scope:global +_4Csis.Setup_SelfStrategyId = .data:0x80435AC0; // type:object size:0x8 scope:global +_4Csis.Setup_InitialCallForBUId = .data:0x80435AC8; // type:object size:0x8 scope:global +_4Csis.Setup_InitialCallForBU_MSId = .data:0x80435AD0; // type:object size:0x8 scope:global +_4Csis.Backup_CallForBUId = .data:0x80435AD8; // type:object size:0x8 scope:global +_4Csis.Backup_UnitBUReplyId = .data:0x80435AE0; // type:object size:0x8 scope:global +_4Csis.Backup_DispBackupReplyId = .data:0x80435AE8; // type:object size:0x8 scope:global +_4Csis.Backup_CallForSwarmingId = .data:0x80435AF0; // type:object size:0x8 scope:global +_4Csis.Backup_DispBUETAId = .data:0x80435AF8; // type:object size:0x8 scope:global +_4Csis.Backup_DispHeliBUETAId = .data:0x80435B00; // type:object size:0x8 scope:global +_4Csis.Backup_BUReminderId = .data:0x80435B08; // type:object size:0x8 scope:global +_4Csis.Backup_NegativeBUReplyId = .data:0x80435B10; // type:object size:0x8 scope:global +_4Csis.Backup_DispBackupUpdateId = .data:0x80435B18; // type:object size:0x8 scope:global +_4Csis.Backup_BUArrivesId = .data:0x80435B20; // type:object size:0x8 scope:global +_4Csis.StaticRoadblock_CallForRBId = .data:0x80435B28; // type:object size:0x8 scope:global +_4Csis.StaticRoadblock_RBReminderId = .data:0x80435B30; // type:object size:0x8 scope:global +_4Csis.StaticRoadblock_NegativeRBReplyId = .data:0x80435B38; // type:object size:0x8 scope:global +_4Csis.StaticRoadblock_DispRBReplyId = .data:0x80435B40; // type:object size:0x8 scope:global +_4Csis.StaticRoadblock_DispRBUpdateId = .data:0x80435B48; // type:object size:0x8 scope:global +_4Csis.StaticRoadblock_PursuitApproachingId = .data:0x80435B50; // type:object size:0x8 scope:global +_4Csis.StaticRoadblock_RBApproachId = .data:0x80435B58; // type:object size:0x8 scope:global +_4Csis.StaticRoadblock_RBEngageId = .data:0x80435B60; // type:object size:0x8 scope:global +_4Csis.StaticRoadblock_RBAvertedId = .data:0x80435B68; // type:object size:0x8 scope:global +_4Csis.StaticRoadblock_CallForRB_subId = .data:0x80435B70; // type:object size:0x8 scope:global +_4Csis.StaticRoadblock_DispSubRBId = .data:0x80435B78; // type:object size:0x8 scope:global +_4Csis.Projectile_CallForSafetyId = .data:0x80435B80; // type:object size:0x8 scope:global +_4Csis.Projectile_ProjectileLaunchId = .data:0x80435B88; // type:object size:0x8 scope:global +_4Csis.Projectile_ProjectileHitId = .data:0x80435B90; // type:object size:0x8 scope:global +_4Csis.Projectile_ProjectileMissId = .data:0x80435B98; // type:object size:0x8 scope:global +_4Csis.RollingStrategy_InitStrategyId = .data:0x80435BA0; // type:object size:0x8 scope:global +_4Csis.RollingStrategy_CallToPositionId = .data:0x80435BA8; // type:object size:0x8 scope:global +_4Csis.RollingStrategy_CallToPositionRemId = .data:0x80435BB0; // type:object size:0x8 scope:global +_4Csis.RollingStrategy_StrategyExecuteId = .data:0x80435BB8; // type:object size:0x8 scope:global +_4Csis.Outcome_AnticipateFailId = .data:0x80435BC0; // type:object size:0x8 scope:global +_4Csis.Outcome_AnticipateSuccessId = .data:0x80435BC8; // type:object size:0x8 scope:global +_4Csis.Outcome_OutcomeFailId = .data:0x80435BD0; // type:object size:0x8 scope:global +_4Csis.Outcome_StrategyResetId = .data:0x80435BD8; // type:object size:0x8 scope:global +_4Csis.Arrest_BullhornArrestId = .data:0x80435BE0; // type:object size:0x8 scope:global +_4Csis.Arrest_ArrestId = .data:0x80435BE8; // type:object size:0x8 scope:global +_4Csis.Arrest_DispArrestReplyId = .data:0x80435BF0; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_CollisionWorldId = .data:0x80435BF8; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_CollWorld_CiviId = .data:0x80435C00; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_CollWorld_SpinId = .data:0x80435C08; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_CollWorld_AirId = .data:0x80435C10; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_CollWorld_FlipId = .data:0x80435C18; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_DispPursuitUpdateId = .data:0x80435C20; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_PursuitUpdateRepId = .data:0x80435C28; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_Disp911ReportId = .data:0x80435C30; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_Disp911CsPntId = .data:0x80435C38; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_Disp911NoDescripId = .data:0x80435C40; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_Unit911ReplyId = .data:0x80435C48; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_SuspectUTurnId = .data:0x80435C50; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_SuspectOutrunId = .data:0x80435C58; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_LostVisualId = .data:0x80435C60; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_RegainVisualId = .data:0x80435C68; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_LostSuspectId = .data:0x80435C70; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_DispBreakAwayId = .data:0x80435C78; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_DispTimeExpiredId = .data:0x80435C80; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_DispPursuitEscalationId = .data:0x80435C88; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_DispPursEscGenId = .data:0x80435C90; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_UnitDisabledId = .data:0x80435C98; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_CallForEVId = .data:0x80435CA0; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_DispEVReplyId = .data:0x80435CA8; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_IntentToRamId = .data:0x80435CB0; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_BailoutId = .data:0x80435CB8; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_BailoutDenyId = .data:0x80435CC0; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_FocusChangeId = .data:0x80435CC8; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_SuspectBehaviourId = .data:0x80435CD0; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_DriverHistoryId = .data:0x80435CD8; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_OffroadMomentId = .data:0x80435CE0; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_SpottedId = .data:0x80435CE8; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_SuspectBrakeId = .data:0x80435CF0; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_WeatherReportId = .data:0x80435CF8; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_HeatJumpId = .data:0x80435D00; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_DirectionHighId = .data:0x80435D08; // type:object size:0x8 scope:global +_4Csis.AnytimeEvents_DispJurisShiftId = .data:0x80435D10; // type:object size:0x8 scope:global +_4Csis.HeliSpecific_HeliSelfStrategyId = .data:0x80435D18; // type:object size:0x8 scope:global +_4Csis.HeliSpecific_HeliLostVisualId = .data:0x80435D20; // type:object size:0x8 scope:global +_4Csis.HeliSpecific_HeliIntentToBailId = .data:0x80435D28; // type:object size:0x8 scope:global +_4Csis.HeliSpecific_HeliBailoutId = .data:0x80435D30; // type:object size:0x8 scope:global +_4Csis.HeliSpecific_HeliSwarmingId = .data:0x80435D38; // type:object size:0x8 scope:global +_4Csis.HeliSpecific_HeliSpotterId = .data:0x80435D40; // type:object size:0x8 scope:global +_4Csis.HeliSpecific_HeliHazardAlertId = .data:0x80435D48; // type:object size:0x8 scope:global +_4Csis.HeliSpecific_HeliQuadrentId = .data:0x80435D50; // type:object size:0x8 scope:global +_4Csis.HeliSpecific_HeliQuadrentMovingId = .data:0x80435D58; // type:object size:0x8 scope:global +_4Csis.HeliSpecific_HeliBullhornArrestId = .data:0x80435D60; // type:object size:0x8 scope:global +_4Csis.E3_Events_E3_SetupId = .data:0x80435D68; // type:object size:0x8 scope:global +_4Csis.Interrupts_InterruptId = .data:0x80435D70; // type:object size:0x8 scope:global +_4Csis.Interrupts_InterruptRamId = .data:0x80435D78; // type:object size:0x8 scope:global +_4Csis.Interrupts_InterruptRam_REId = .data:0x80435D80; // type:object size:0x8 scope:global +_4Csis.Interrupts_InterruptRam_HOId = .data:0x80435D88; // type:object size:0x8 scope:global +_4Csis.Interrupts_InterruptRam_SSId = .data:0x80435D90; // type:object size:0x8 scope:global +_4Csis.Interrupts_InterruptRam_TBId = .data:0x80435D98; // type:object size:0x8 scope:global +_4Csis.Interrupts_InterruptRamHighId = .data:0x80435DA0; // type:object size:0x8 scope:global +_4Csis.Interrupts_StaticInterruptId = .data:0x80435DA8; // type:object size:0x8 scope:global +_4Csis.Interrupts_RegainVisualInterruptId = .data:0x80435DB0; // type:object size:0x8 scope:global +_4Csis.CellCallId = .data:0x80435DB8; // type:object size:0x8 scope:global +_4Csis.ExtraCops_SwarmingReplyId = .data:0x80435DC0; // type:object size:0x8 scope:global +_4Csis.ExtraCops_SuperPursuitReplyId = .data:0x80435DC8; // type:object size:0x8 scope:global +_4Csis.ExtraCops_SwarmingReplyFollowId = .data:0x80435DD0; // type:object size:0x8 scope:global +_4Csis.ExtraCops_QuadrentFormingId = .data:0x80435DD8; // type:object size:0x8 scope:global +_4Csis.ExtraCops_SuspectPossiblyGoneId = .data:0x80435DE0; // type:object size:0x8 scope:global +_4Csis.ExtraCops_QuadrentMovingId = .data:0x80435DE8; // type:object size:0x8 scope:global +_4Csis.ExtraCops_OtherLeadId = .data:0x80435DF0; // type:object size:0x8 scope:global +_4Csis.ExtraCops_PossibleSuspectId = .data:0x80435DF8; // type:object size:0x8 scope:global +_4Csis.ExtraCops_WrongSuspectId = .data:0x80435E00; // type:object size:0x8 scope:global +_4Csis.ExtraCops_SuspectGoneId = .data:0x80435E08; // type:object size:0x8 scope:global +_4Csis.ExtraCops_RBWarningId = .data:0x80435E10; // type:object size:0x8 scope:global +_4Csis.ExtraCops_RBPositionId = .data:0x80435E18; // type:object size:0x8 scope:global +_4Csis.ExtraCops_ExtraRBEngageId = .data:0x80435E20; // type:object size:0x8 scope:global +_4Csis.ExtraCops_ExtraRBAvertedId = .data:0x80435E28; // type:object size:0x8 scope:global +_4Csis.Cross_CrossBUReplyId = .data:0x80435E30; // type:object size:0x8 scope:global +_4Csis.Cross_CrossFailReplyId = .data:0x80435E38; // type:object size:0x8 scope:global +_4Csis.Cross_CrossRBFailReplyId = .data:0x80435E40; // type:object size:0x8 scope:global +_4Csis.Cross_CrossPursuitEscId = .data:0x80435E48; // type:object size:0x8 scope:global +_4Csis.Cross_CrossSelfStrategyId = .data:0x80435E50; // type:object size:0x8 scope:global +_4Csis.Cross_CrossMultiStrategyId = .data:0x80435E58; // type:object size:0x8 scope:global +_4Csis.Cross_CrossBailoutDeny_subId = .data:0x80435E60; // type:object size:0x8 scope:global +_4Csis.D_DayId = .data:0x80435E68; // type:object size:0x8 scope:global +_4Csis.DispIntroRaceId = .data:0x80435E70; // type:object size:0x8 scope:global +datapts.29390 = .data:0x80435E8C; // type:object size:0x1 scope:local +spkrID911.29413 = .data:0x80435E90; // type:object size:0x4 scope:local +gXMP_DOWNSTATE = .data:0x80435E94; // type:object size:0x4 scope:global +MUSICFLOW_DISPLAY = .data:0x80435E98; // type:object size:0x4 scope:global +_7SoundAI.mRefCount = .data:0x80435E9C; // type:object size:0x4 scope:global +_Q33UTL11Collectionst9Singleton1Z7SoundAI.mInstance = .data:0x80435EA0; // type:object size:0x4 scope:global +DESTROY_COPS_ON_INACTIVITY = .data:0x80435EA8; // type:object size:0x4 scope:local +FORCE_VOICE_RANDOMIZATION = .data:0x80435EAC; // type:object size:0x4 scope:global +prev_heat.30802 = .data:0x80435EB0; // type:object size:0x4 scope:local +dir_tracking.30959 = .data:0x80435EB4; // type:object size:0x4 scope:local +ColourHashToSoundColourMap = .data:0x80435EB8; // type:object size:0x68 scope:global +NumberOfColourHashToSoundColourMaps = .data:0x80435F20; // type:object size:0x4 scope:global +SkidSetSlotPool = .data:0x80435F48; // type:object size:0x4 scope:global +PlotSkidsInCaffeine = .data:0x80435F4C; // type:object size:0x4 scope:global +PlotSkidPointsInCaffeine = .data:0x80435F50; // type:object size:0x4 scope:global +ClanSlotPool = .data:0x80435F54; // type:object size:0x4 scope:global +NumTrackOBBs = .data:0x80435F58; // type:object size:0x4 scope:global +TrackOBBTable = .data:0x80435F5C; // type:object size:0x4 scope:global +_9TrackInfo.TrackInfoTable = .data:0x80435F68; // type:object size:0x4 scope:global +_9TrackInfo.NumTrackInfo = .data:0x80435F6C; // type:object size:0x4 scope:global +_9TrackInfo.LoadedTrackInfo = .data:0x80435F74; // type:object size:0x4 scope:global +zoneB = .data:0x80435F7C; // type:object size:0x8 scope:global +TrackStreamerRemoteCaffeinating = .data:0x80435FEC; // type:object size:0x4 scope:global +ForceHoleFillerMethod = .data:0x80435FF8; // type:object size:0x4 scope:global +prev_need_loading_bar.26275 = .data:0x80435FFC; // type:object size:0x4 scope:local +ForceAllSceneryDetailLevels = .data:0x80436000; // type:object size:0x4 scope:global +EnvMapShadowExtraHeight = .data:0x80436008; // type:object size:0x4 scope:global +CurrentZoneNumber = .data:0x8043600C; // type:object size:0x4 scope:global +ModelConnectionCallback = .data:0x80436010; // type:object size:0x4 scope:global +ModelDisconnectionCallback = .data:0x80436014; // type:object size:0x4 scope:global +SectionConnectionCallback = .data:0x80436018; // type:object size:0x4 scope:global +SectionDisconnectionCallback = .data:0x8043601C; // type:object size:0x4 scope:global +SeeulatorToolActive = .data:0x80436020; // type:object size:0x4 scope:global +ScenerySectionToBlink = .data:0x80436024; // type:object size:0x4 scope:global +ShowSectionBoarder = .data:0x80436028; // type:object size:0x4 scope:global +SeeulatorRefreshTrackStreamer = .data:0x8043602C; // type:object size:0x4 scope:global +LightTable = .data:0x80436034; // type:object size:0x4 scope:global +MaxSceneryLightContexts = .data:0x80436038; // type:object size:0x4 scope:global +SceneryLightContextTable = .data:0x8043603C; // type:object size:0x4 scope:global +SceneryOverrideInfoTable = .data:0x80436040; // type:object size:0x4 scope:global +NumSceneryOverrideInfos = .data:0x80436044; // type:object size:0x4 scope:global +SceneryGroupEnabledTable = .data:0x8043604C; // type:object size:0x1000 scope:global +pVisibleZoneBoundaryModel = .data:0x8043704C; // type:object size:0x4 scope:global +PrecullerMode = .data:0x80437050; // type:object size:0x4 scope:global +DisablePrecullerCounter = .data:0x80437054; // type:object size:0x4 scope:global +pDebugModel = .data:0x80437060; // type:object size:0x4 scope:global +ScenerySectionLODOffset = .data:0x80437068; // type:object size:0x4 scope:global +initialized.26964 = .data:0x8043706C; // type:object size:0x4 scope:local +counter.26985 = .data:0x80437070; // type:object size:0x4 scope:local +pSectionD9 = .data:0x80437074; // type:object size:0x4 scope:global +pSectionC14 = .data:0x80437078; // type:object size:0x4 scope:global +VisibleGroupInfoTable = .data:0x8043707C; // type:object size:0x28 scope:global +RegionCount = .data:0x804370A4; // type:object size:0x24 scope:global +WeatherUseCoolFogValues = .data:0x804370C8; // type:object size:0x4 scope:global +BaseFogFalloff = .data:0x804370CC; // type:object size:0x4 scope:global +BaseFogFalloffX = .data:0x804370D0; // type:object size:0x4 scope:global +BaseFogFalloffY = .data:0x804370D4; // type:object size:0x4 scope:global +BaseWeatherFog = .data:0x804370D8; // type:object size:0x4 scope:global +BaseWeatherFogStart = .data:0x804370DC; // type:object size:0x4 scope:global +BaseWeatherFogColourR = .data:0x804370E0; // type:object size:0x4 scope:global +BaseWeatherFogColourG = .data:0x804370E4; // type:object size:0x4 scope:global +BaseWeatherFogColourB = .data:0x804370E8; // type:object size:0x4 scope:global +oldDistFogColour.27397 = .data:0x80437100; // type:object size:0x4 scope:local +oldDistFogPower.27398 = .data:0x80437104; // type:object size:0x4 scope:local +oldDistFogStart.27399 = .data:0x80437108; // type:object size:0x4 scope:local +debugflash = .data:0x80437124; // type:object size:0x4 scope:global +ticS.27592 = .data:0x80437128; // type:object size:0x4 scope:local +FACflush = .data:0x80437134; // type:object size:0x4 scope:global +GlareFalloff = .data:0x8043713C; // type:object size:0x4 scope:global +GlareFallon = .data:0x80437140; // type:object size:0x4 scope:global +TUNHEIGHT = .data:0x80437150; // type:object size:0x4 scope:global +regionB.27617 = .data:0x80437154; // type:object size:0x8 scope:local +EventSlotPool = .data:0x8043715C; // type:object size:0x4 scope:global +EventHandlerSlotPool = .data:0x80437160; // type:object size:0x4 scope:global +CurrentEventQueue = .data:0x80437164; // type:object size:0x4 scope:global +CurrentlyHandlingEvent = .data:0x80437168; // type:object size:0x4 scope:global +UglyTimestepHack = .data:0x80437248; // type:object size:0x4 scope:global +pCurrentWorld = .data:0x80437250; // type:object size:0x4 scope:global +g_tweakIsBurnout = .data:0x80437288; // type:object size:0x4 scope:global +g_tweakIsDriftRace = .data:0x8043728C; // type:object size:0x4 scope:global +g_tweakIsDragRace = .data:0x80437290; // type:object size:0x4 scope:global +g_tweakIsShortTrackRace = .data:0x80437294; // type:object size:0x4 scope:global +_21DebugVehicleSelection.mThis = .data:0x804372A8; // type:object size:0x4 scope:global +_21DebugVehicleSelection.mOnOff = .data:0x804372AC; // type:object size:0x4 scope:global +ChangePlayerVehicle = .data:0x804372B0; // type:object size:0x4 scope:global +_10DebugWorld.mThis = .data:0x804372B4; // type:object size:0x4 scope:global +_10DebugWorld.mOnOff = .data:0x804372B8; // type:object size:0x4 scope:global +SaveHotPosition = .data:0x804372BC; // type:object size:0x4 scope:global +JumpToHotPosition = .data:0x804372C0; // type:object size:0x4 scope:global +culldiv = .data:0x804372C4; // type:object size:0x4 scope:global +pCurrentPartCullingPlaneInfo = .data:0x804372C8; // type:object size:0x4 scope:global +CarPartModelPool = .data:0x804372D8; // type:object size:0x4 scope:global +NISCopCarDriverVisible = .data:0x804372E0; // type:object size:0x4 scope:global +NISRaceDriverVisible = .data:0x804372E4; // type:object size:0x4 scope:global +AlphaWritesEnabled = .data:0x804372EC; // type:object size:0x4 scope:global +WheelPivotTranslationAmount = .data:0x804372F0; // type:object size:0x4 scope:global +WheelStandardWidth = .data:0x804372F4; // type:object size:0x4 scope:global +WheelStandardRadius = .data:0x804372F8; // type:object size:0x4 scope:global +DrawCars = .data:0x804372FC; // type:object size:0x4 scope:global +DrawCarsReflections = .data:0x80437300; // type:object size:0x4 scope:global +DrawCarShadow = .data:0x80437304; // type:object size:0x4 scope:global +ForceHeadlightsOn = .data:0x8043730C; // type:object size:0x4 scope:global +ForceBrakelightsOn = .data:0x80437310; // type:object size:0x4 scope:global +ForceReverselightsOn = .data:0x80437314; // type:object size:0x4 scope:global +PrintQueryLightMat = .data:0x80437320; // type:object size:0x4 scope:global +ForceCarLOD = .data:0x80437330; // type:object size:0x4 scope:global +ForceTireLOD = .data:0x80437334; // type:object size:0x4 scope:global +CarEffectParameters = .data:0x80437338; // type:object size:0xE8 scope:global +CarEmitterPositionSlotPool = .data:0x80437420; // type:object size:0x4 scope:global +TweakKitWheelOffsetFront = .data:0x8043743C; // type:object size:0x4 scope:global +TweakKitWheelOffsetRear = .data:0x80437440; // type:object size:0x4 scope:global +hOffX = .data:0x80437448; // type:object size:0x4 scope:global +hOffY = .data:0x8043744C; // type:object size:0x4 scope:global +hRad1x = .data:0x80437464; // type:object size:0x4 scope:global +hRad2x = .data:0x80437468; // type:object size:0x4 scope:global +hRad1y = .data:0x8043746C; // type:object size:0x4 scope:global +hRad2y = .data:0x80437470; // type:object size:0x4 scope:global +hRad0x = .data:0x80437474; // type:object size:0x4 scope:global +hRad3x = .data:0x80437478; // type:object size:0x4 scope:global +hRad0y = .data:0x8043747C; // type:object size:0x4 scope:global +hRad3y = .data:0x80437480; // type:object size:0x4 scope:global +hcL = .data:0x80437490; // type:object size:0x4 scope:global +cpr = .data:0x80437494; // type:object size:0x4 scope:global +cpb = .data:0x80437498; // type:object size:0x4 scope:global +cpw = .data:0x8043749C; // type:object size:0x4 scope:global +copm = .data:0x804374A0; // type:object size:0x4 scope:global +copt = .data:0x804374A4; // type:object size:0x4 scope:global +copModulo = .data:0x804374A8; // type:object size:0x4 scope:global +copWhitemul = .data:0x804374AC; // type:object size:0x4 scope:global +copoffsetr = .data:0x804374B0; // type:object size:0x4 scope:global +copoffsetb = .data:0x804374B4; // type:object size:0x4 scope:global +copoffsetw = .data:0x804374B8; // type:object size:0x4 scope:global +counter.31665 = .data:0x804374BC; // type:object size:0x4 scope:local +counter.31669 = .data:0x804374C0; // type:object size:0x4 scope:local +gTWEAKER_NISLightEnabled = .data:0x804374C4; // type:object size:0x4 scope:global +gTWEAKER_NISLightIntensity = .data:0x804374C8; // type:object size:0x4 scope:global +gTWEAKER_NISLightPosX = .data:0x804374CC; // type:object size:0x4 scope:global +gTWEAKER_NISLightPosY = .data:0x804374D0; // type:object size:0x4 scope:global +gTWEAKER_NISLightPosZ = .data:0x804374D4; // type:object size:0x4 scope:global +HackTime = .data:0x804374D8; // type:object size:0x4 scope:global +Lightslot = .data:0x804374DC; // type:object size:0x4 scope:global +enX = .data:0x804374E0; // type:object size:0x4 scope:global +enY = .data:0x804374E4; // type:object size:0x4 scope:global +enZ = .data:0x804374E8; // type:object size:0x4 scope:global +FaceCos = .data:0x804374EC; // type:object size:0x4 scope:global +TireFaceIt = .data:0x804374F0; // type:object size:0x4 scope:global +PointCloud = .data:0x804374F8; // type:object size:0x100 scope:global +FancyCarShadowEdgeMult = .data:0x804375F8; // type:object size:0x4 scope:global +car_elevation = .data:0x804375FC; // type:object size:0x4 scope:global +car_elevation_scale = .data:0x80437600; // type:object size:0x4 scope:global +dshad = .data:0x80437608; // type:object size:0x4 scope:global +heliScale = .data:0x8043760C; // type:object size:0x4 scope:global +_17VehicleRenderConn.mOpenSkinSlots = .data:0x80437620; // type:object size:0x4 scope:global +FlareDiv = .data:0x80437624; // type:object size:0x4 scope:global +Tweak_DisableRoadNoise = .data:0x80437628; // type:object size:0x4 scope:global +NumTimesRenderTestPlayerCar = .data:0x8043762C; // type:object size:0x4 scope:global +MainSkyScale = .data:0x80437634; // type:object size:0x4 scope:global +skylayer = .data:0x8043763C; // type:object size:0xA0 scope:global +DrawSky = .data:0x804376DC; // type:object size:0x4 scope:global +DrawSkyEnvMap = .data:0x804376E0; // type:object size:0x4 scope:global +UserSkyLoadCallback = .data:0x80437700; // type:object size:0x4 scope:global +bSkyTexturesLoaded = .data:0x80437704; // type:object size:0x4 scope:global +SpecularOffset = .data:0x80437708; // type:object size:0x2 scope:global +deblayer = .data:0x8043770C; // type:object size:0x14 scope:global +matAng.33578 = .data:0x80437720; // type:object size:0x2 scope:local +MinSkySpecular = .data:0x80437724; // type:object size:0x4 scope:global +MaxSkySpecular = .data:0x80437728; // type:object size:0x4 scope:global +SkyRenderForceOvercast = .data:0x8043772C; // type:object size:0x4 scope:global +SpaceNodeSlotPool = .data:0x80437730; // type:object size:0x4 scope:global +CarPartStringTable = .data:0x80437738; // type:object size:0x4 scope:global +CarPartStringTableSize = .data:0x8043773C; // type:object size:0x4 scope:global +CarPartTypeNameHashTable = .data:0x80437740; // type:object size:0x4 scope:global +CarPartTypeNameHashTableSize = .data:0x80437744; // type:object size:0x4 scope:global +CarPartPartsTable = .data:0x80437748; // type:object size:0x4 scope:global +CarPartModelsTable = .data:0x8043774C; // type:object size:0x4 scope:global +MasterCarPartPack = .data:0x80437750; // type:object size:0x4 scope:global +CarPartSlotMap = .data:0x80437754; // type:object size:0x22C scope:global +CarTypeInfoArray = .data:0x80437980; // type:object size:0x4 scope:global +CarTypeInfoArrayUpdated = .data:0x80437984; // type:object size:0x4 scope:global +CarSlotAnimHookupTable = .data:0x80437988; // type:object size:0x4 scope:global +CarSlotAnimHideOpenTable = .data:0x8043798C; // type:object size:0x4 scope:global +CarSlotAnimHideClosedTable = .data:0x80437990; // type:object size:0x4 scope:global +DefaultSlotTypeNameTable = .data:0x80437994; // type:object size:0x4 scope:global +SlotTypeOverrideTable = .data:0x80437998; // type:object size:0x4 scope:global +NumSlotTypeOverrides = .data:0x8043799C; // type:object size:0x4 scope:global +MissingCarPartTable = .data:0x804379A0; // type:object size:0xA50 scope:global +CarMemoryInfoTable = .data:0x804383F4; // type:object size:0x90 scope:global +CarSlotIDNames = .data:0x80438484; // type:object size:0x458 scope:global +CarLoaderMemoryPoolNumber = .data:0x804388DC; // type:object size:0x4 scope:global +UsePrecompositeVinyls = .data:0x804388E4; // type:object size:0x4 scope:global +LoadedTexturePackSlotPool = .data:0x804388E8; // type:object size:0x4 scope:global +LoadedSolidPackSlotPool = .data:0x804388EC; // type:object size:0x4 scope:global +LoadedSkinLayerSlotPool = .data:0x804388F0; // type:object size:0x4 scope:global +LoadedRideInfoSlotPool = .data:0x804388F4; // type:object size:0x4 scope:global +_14LoadedRideInfo.sNextID = .data:0x804388F8; // type:object size:0x4 scope:global +lastTime.35170 = .data:0x804388FC; // type:object size:0x4 scope:local +last_result_was_textures.35424 = .data:0x80438900; // type:object size:0x4 scope:local +loop_number.35434 = .data:0x80438904; // type:object size:0x4 scope:local +CarLoaderServiceLoadingDepth = .data:0x80438908; // type:object size:0x4 scope:global +swatch_offset_init = .data:0x80438918; // type:object size:0x4 scope:global +swatch_offset_count = .data:0x8043891C; // type:object size:0x10 scope:global +WorldModelSlotPool = .data:0x8043892C; // type:object size:0x4 scope:global +netsize = .data:0x80438930; // type:object size:0x4 scope:global +RAINX = .data:0x80438944; // type:object size:0x4 scope:global +RAINY = .data:0x80438948; // type:object size:0x4 scope:global +RAINZ = .data:0x8043894C; // type:object size:0x4 scope:global +RAINZconstant = .data:0x80438950; // type:object size:0x4 scope:global +RAINwindEffect = .data:0x804389AC; // type:object size:0x4 scope:global +RAINRadiusX = .data:0x804389BC; // type:object size:0x4 scope:global +RAINRadiusY = .data:0x804389C0; // type:object size:0x4 scope:global +RAINRadiusZ = .data:0x804389C4; // type:object size:0x4 scope:global +twkCloudsMinAmount = .data:0x804389F0; // type:object size:0x4 scope:global +rainOverrideIntensity = .data:0x80438A18; // type:object size:0x4 scope:global +windAng = .data:0x80438A28; // type:object size:0x4 scope:global +swayMax = .data:0x80438A2C; // type:object size:0x4 scope:global +FogControlOverRide = .data:0x80438AAC; // type:object size:0x4 scope:global +_14FacePixelation.mPixelationOn = .data:0x80438AB0; // type:object size:0x4 scope:global +_14FacePixelation.mWidth = .data:0x80438AB4; // type:object size:0x4 scope:global +_14FacePixelation.mHeight = .data:0x80438AB8; // type:object size:0x4 scope:global +gSimpleSolidHashList = .data:0x80438ABC; // type:object size:0x28 scope:global +VehicleDamagePartSlotPool = .data:0x80438AF0; // type:object size:0x4 scope:global +VehiclePartDamageZoneSlotPool = .data:0x80438AF4; // type:object size:0x4 scope:global +_26VehiclePartDamageBehaviour.mSlotZoneMapList = .data:0x80438AF8; // type:object size:0x3C0 scope:global +_26VehiclePartDamageBehaviour.mBreakableWindowInfoList = .data:0x80438EB8; // type:object size:0x50 scope:global +unitTestDelay = .data:0x80438F10; // type:object size:0x4 scope:local +uniTestLevel = .data:0x80438F14; // type:object size:0x4 scope:local +_16WCollisionAssets.sWCollisionAssets = .data:0x80438F58; // type:object size:0x4 scope:global +_16WCollisionAssets.sOriginalTriggerData = .data:0x80438F60; // type:object size:0x4 scope:global +_16WCollisionAssets.sSavedTriggerData = .data:0x80438F64; // type:object size:0x4 scope:global +_16WCollisionAssets.mCollisionPackList = .data:0x80438F68; // type:object size:0x4 scope:global +_13WCollisionMgr.fIterCount = .data:0x80438F70; // type:object size:0x2 scope:global +_5WGrid.fgGrid = .data:0x80438F74; // type:object size:0x4 scope:global +_5WGrid.fgMapGroup = .data:0x80438F78; // type:object size:0x4 scope:global +iMaxNumNodes.10751 = .data:0x80438F80; // type:object size:0x4 scope:local +_12WRoadNetwork.fgRoadNetwork = .data:0x80438FC8; // type:object size:0x4 scope:global +_12WRoadNetwork.fProfiles = .data:0x80438FCC; // type:object size:0x4 scope:global +_12WRoadNetwork.fNodes = .data:0x80438FD0; // type:object size:0x4 scope:global +_12WRoadNetwork.fSegments = .data:0x80438FD4; // type:object size:0x4 scope:global +_12WRoadNetwork.fRoads = .data:0x80438FDC; // type:object size:0x4 scope:global +_12WRoadNetwork.fSegmentStamp = .data:0x80438FE0; // type:object size:0x4 scope:global +_12WRoadNetwork.nRoadMemoryUsage = .data:0x80438FE4; // type:object size:0x4 scope:global +_12WRoadNetwork.nNodeMemoryUsage = .data:0x80438FE8; // type:object size:0x4 scope:global +_12WRoadNetwork.nProfileMemoryUsage = .data:0x80438FEC; // type:object size:0x4 scope:global +_12WRoadNetwork.nSegmentMemoryUsage = .data:0x80438FF0; // type:object size:0x4 scope:global +_12WRoadNetwork.nIntersectionMemoryUsage = .data:0x80438FF4; // type:object size:0x4 scope:global +_12WRoadNetwork.nTotalMemoryUsage = .data:0x80438FF8; // type:object size:0x4 scope:global +bPathFinderPrints = .data:0x80438FFC; // type:object size:0x4 scope:global +AStarNodeSlotPool = .data:0x80439004; // type:object size:0x4 scope:global +AStarSearchSlotPool = .data:0x80439008; // type:object size:0x4 scope:global +ASTAR_METRIC_SCALE = .data:0x80439014; // type:object size:0x4 scope:global +_10PathFinder.pInstance = .data:0x80439018; // type:object size:0x4 scope:global +bAiRandomTurns = .data:0x8043901C; // type:object size:0x4 scope:global +_15WTriggerManager.fgTriggerManager = .data:0x80439020; // type:object size:0x4 scope:global +_6WWorld.fgWorld = .data:0x80439024; // type:object size:0x4 scope:global +_9WorldConn.world_refcount = .data:0x8043902C; // type:object size:0x4 scope:local +gTheTimeOfDay = .data:0x80439030; // type:object size:0x4 scope:global +desiredTOD = .data:0x80439034; // type:object size:0x4 scope:local +carPosX = .data:0x804390E4; // type:object size:0x4 scope:global +carPosY = .data:0x804390E8; // type:object size:0x4 scope:global +CarSelectTireSteerAngle = .data:0x804390EC; // type:object size:0x4 scope:global +sNumTicksSinceUserMovedCamera = .data:0x804390F0; // type:object size:0x4 scope:local +sNumTicksBeforeCamMovesBackToScreenPosition = .data:0x804390F4; // type:object size:0x4 scope:local +CarRotateSpeed = .data:0x804390F8; // type:object size:0x4 scope:local +bPass1 = .data:0x804390FC; // type:object size:0x4 scope:local +bAutoMovement = .data:0x80439100; // type:object size:0x4 scope:local +cam_blur = .data:0x80439104; // type:object size:0x4 scope:local +zoomIn.27766 = .data:0x80439108; // type:object size:0x4 scope:local +zoomOut.27767 = .data:0x8043910C; // type:object size:0x4 scope:local +_9CarViewer.haveLoadedOnce = .data:0x80439110; // type:object size:0x4 scope:global +QRMode = .data:0x80439114; // type:object size:0x4 scope:global +ValidForMikeMann.29465 = .data:0x80439118; // type:object size:0x2C scope:local +goddamcrap.29466 = .data:0x80439144; // type:object size:0x8 scope:local +_13UIQRCarSelect.ForceCar = .data:0x8043914C; // type:object size:0x4 scope:global +_24QRCarSelectBustedManager.bPlayerJustGotBusted = .data:0x80439150; // type:object size:0x4 scope:global +CheatBustedCount = .data:0x80439158; // type:object size:0x4 scope:global +CheatMaxBusted = .data:0x8043915C; // type:object size:0x4 scope:global +CheatImpounded = .data:0x80439160; // type:object size:0x4 scope:global +CheatCanAddImpoundBox = .data:0x80439164; // type:object size:0x4 scope:global +CheatReleaseFromImpoundMarker = .data:0x80439168; // type:object size:0x4 scope:global +CheatReleasable = .data:0x8043916C; // type:object size:0x4 scope:global +theChallengeRace = .data:0x80439170; // type:object size:0x4 scope:global +gTUTORIAL_MOVIE_TOLLBOOTH = .data:0x80439174; // type:object size:0x4 scope:local +_8Showcase.FromPackage = .data:0x80439178; // type:object size:0x4 scope:global +_8Showcase.FromArgs = .data:0x8043917C; // type:object size:0x4 scope:global +_8Showcase.FromIndex = .data:0x80439180; // type:object size:0x4 scope:global +_8Showcase.BlackListNumber = .data:0x80439184; // type:object size:0x4 scope:global +_8Showcase.FromFilter = .data:0x80439188; // type:object size:0x4 scope:global +g_bCustomizeManagerHasControl = .data:0x8043918C; // type:object size:0x4 scope:global +g_bTestCareerCustomization = .data:0x80439190; // type:object size:0x4 scope:global +g_pCustomizeMainPkg = .data:0x80439194; // type:object size:0x4 scope:global +g_pCustomizeSubPkg = .data:0x80439198; // type:object size:0x4 scope:global +g_pCustomizeSubTopPkg = .data:0x8043919C; // type:object size:0x4 scope:global +g_pCustomizePartsPkg = .data:0x804391A0; // type:object size:0x4 scope:global +g_pCustomizePerfPkg = .data:0x804391A4; // type:object size:0x4 scope:global +g_pCustomizeDecalsPkg = .data:0x804391A8; // type:object size:0x4 scope:global +g_pCustomizePaintPkg = .data:0x804391AC; // type:object size:0x4 scope:global +g_pCustomizeRimsPkg = .data:0x804391B0; // type:object size:0x4 scope:global +g_pCustomizeHudPkg = .data:0x804391B4; // type:object size:0x4 scope:global +g_pCustomizeHudColorPkg = .data:0x804391B8; // type:object size:0x4 scope:global +g_pCustomizeSpoilerPkg = .data:0x804391BC; // type:object size:0x4 scope:global +g_pCustomizeShoppingCartPkg = .data:0x804391C0; // type:object size:0x4 scope:global +_21CustomizeShoppingCart.pParentPkg = .data:0x804391C4; // type:object size:0x4 scope:global +phys_type.30541 = .data:0x804391C8; // type:object size:0x1C scope:local +markers.30542 = .data:0x804391E4; // type:object size:0x1C scope:local +slot_id.30543 = .data:0x80439200; // type:object size:0x14 scope:local +markers.30544 = .data:0x80439214; // type:object size:0x14 scope:local +_14CustomizeParts.TexturePackLoaded = .data:0x80439228; // type:object size:0x4 scope:global +_15CustomizeDecals.CurrentDecalLocation = .data:0x8043922C; // type:object size:0x4 scope:global +_16CustomizeNumbers.bShowcaseOn = .data:0x80439230; // type:object size:0x4 scope:global +gLookupCarSlotID = .data:0x80439238; // type:object size:0x4 scope:local +MarkerSelectInfos = .data:0x80439240; // type:object size:0x24C scope:global +__SN_Libsn_version_59 = .data:0x804394D0; // type:label scope:local +__SN_Libsn_version = .data:0x804394D4; // type:label scope:global +LinkFiddle = .data:0x804394D8; // type:label scope:local +SN_BUFFERED_TTY = .data:0x804394F4; // type:label scope:global +bConnected = .data:0x804394FC; // type:label scope:global +snProfHdr = .data:0x80439790; // type:label scope:global +g_nRWasyncPhase = .data:0x804397D0; // type:object size:0x4 scope:global +g_FSCBFunc = .data:0x804397D4; // type:object size:0x4 scope:local +g_nEXI2TCCnt = .data:0x804397D8; // type:object size:0x4 scope:local +g_nDbgFsAsyncCnt = .data:0x804397DC; // type:object size:0x4 scope:global +g_hDVD = .data:0x804397E0; // type:object size:0x4 scope:local +impure_data = .data:0x804397E8; // type:object size:0x304 scope:local +_sn_IO_buf = .data:0x80439AEC; // type:object size:0x50 scope:local +lower.9 = .data:0x80439B3C; // type:object size:0x25 scope:local +powersOf10 = .data:0x80439B68; // type:object size:0x48 scope:local +JIS_state_table = .data:0x80439BB0; // type:object size:0x1B0 scope:local +JIS_action_table = .data:0x80439D60; // type:object size:0x1B0 scope:local +__terminate_func = .data:0x80439F10; // type:object size:0x4 scope:global +a$1517 = .data:0x80439F18; // type:object size:0x28 scope:local +...data.0 = .data:0x80439F40; // type:label scope:local +@1 = .data:0x80439F40; // type:object size:0x44 scope:local +@105 = .data:0x80439F84; // type:object size:0xD scope:local +@106 = .data:0x80439F94; // type:object size:0x16 scope:local +@107 = .data:0x80439FAC; // type:object size:0xC scope:local +@108 = .data:0x80439FB8; // type:object size:0x9 scope:local +@109 = .data:0x80439FC4; // type:object size:0x10 scope:local +@110 = .data:0x80439FD4; // type:object size:0xB scope:local +@111 = .data:0x80439FE0; // type:object size:0xE scope:local +@112 = .data:0x80439FF0; // type:object size:0xD scope:local +@113 = .data:0x8043A000; // type:object size:0xD scope:local +@114 = .data:0x8043A010; // type:object size:0xD scope:local +@115 = .data:0x8043A020; // type:object size:0x19 scope:local +@117 = .data:0x8043A03C; // type:object size:0xE scope:local +@118 = .data:0x8043A04C; // type:object size:0x15 scope:local +__OSExceptionLocations = .data:0x8043A064; // type:object size:0x3C scope:local +@152 = .data:0x8043A0A0; // type:object size:0x1B scope:local +@153 = .data:0x8043A0BC; // type:object size:0x2E scope:local +@154 = .data:0x8043A0EC; // type:object size:0x2F scope:local +@155 = .data:0x8043A11C; // type:object size:0x1B scope:local +...data.0 = .data:0x8043A138; // type:label scope:local +ResetFunctionInfo = .data:0x8043A138; // type:object size:0x10 scope:local +@50 = .data:0x8043A148; // type:object size:0x89 scope:local +@51 = .data:0x8043A1D4; // type:object size:0x59 scope:local +@52 = .data:0x8043A230; // type:object size:0x59 scope:local +@53 = .data:0x8043A28C; // type:object size:0x52 scope:local +@54 = .data:0x8043A2E0; // type:object size:0x50 scope:local +...data.0 = .data:0x8043A330; // type:label scope:local +@354 = .data:0x8043A330; // type:object size:0x24 scope:local +@355 = .data:0x8043A354; // type:object size:0x37 scope:local +@356 = .data:0x8043A38C; // type:object size:0x28 scope:local +@357 = .data:0x8043A3B4; // type:object size:0x4F scope:local +@358 = .data:0x8043A404; // type:object size:0x3E scope:local +@359 = .data:0x8043A444; // type:object size:0x37 scope:local +@360 = .data:0x8043A47C; // type:object size:0x49 scope:local +@361 = .data:0x8043A4C8; // type:object size:0x33 scope:local +@362 = .data:0x8043A4FC; // type:object size:0x3D scope:local +@363 = .data:0x8043A53C; // type:object size:0x39 scope:local +@364 = .data:0x8043A578; // type:object size:0x45 scope:local +@365 = .data:0x8043A5C0; // type:object size:0x5F scope:local +@366 = .data:0x8043A620; // type:object size:0x2C scope:local +@385 = .data:0x8043A64C; // type:object size:0x12 scope:local +@386 = .data:0x8043A660; // type:object size:0x12 scope:local +@387 = .data:0x8043A674; // type:object size:0x1A scope:local +@388 = .data:0x8043A690; // type:object size:0x13 scope:local +@389 = .data:0x8043A6A4; // type:object size:0x10 scope:local +@390 = .data:0x8043A6B4; // type:object size:0xE scope:local +DSPInitCode = .data:0x8043A6C8; // type:object size:0x80 scope:local +...data.0 = .data:0x8043A748; // type:label scope:local +@63 = .data:0x8043A748; // type:object size:0x29 scope:local +@84 = .data:0x8043A774; // type:object size:0x18 scope:local +@85 = .data:0x8043A78C; // type:object size:0x1B scope:local +@86 = .data:0x8043A7A8; // type:object size:0x30 scope:local +@87 = .data:0x8043A7D8; // type:object size:0x3C scope:local +@88 = .data:0x8043A814; // type:object size:0x37 scope:local +@89 = .data:0x8043A84C; // type:object size:0x3F scope:local +@90 = .data:0x8043A88C; // type:object size:0x29 scope:local +@91 = .data:0x8043A8B8; // type:object size:0x1D scope:local +@92 = .data:0x8043A8D8; // type:object size:0x19 scope:local +@104 = .data:0x8043A8F4; // type:object size:0x19 scope:local +@105 = .data:0x8043A910; // type:object size:0x19 scope:local +@106 = .data:0x8043A92C; // type:object size:0x16 scope:local +@107 = .data:0x8043A944; // type:object size:0x2E scope:local +...data.0 = .data:0x8043A978; // type:label scope:local +@61 = .data:0x8043A978; // type:object size:0x44 scope:local +@62 = .data:0x8043A9BC; // type:object size:0x30 scope:local +@63 = .data:0x8043A9EC; // type:object size:0x2F scope:local +@64 = .data:0x8043AA1C; // type:object size:0x2F scope:local +@65 = .data:0x8043AA4C; // type:object size:0x11 scope:local +@66 = .data:0x8043AA60; // type:object size:0x21 scope:local +@67 = .data:0x8043AA84; // type:object size:0x12 scope:local +@68 = .data:0x8043AA98; // type:object size:0x19 scope:local +@69 = .data:0x8043AAB4; // type:object size:0x12 scope:local +@70 = .data:0x8043AAC8; // type:object size:0x1D scope:local +@71 = .data:0x8043AAE8; // type:object size:0x26 scope:local +@72 = .data:0x8043AB10; // type:object size:0x1C scope:local +@76 = .data:0x8043AB2C; // type:object size:0x23 scope:local +...data.0 = .data:0x8043AB50; // type:label scope:local +@13 = .data:0x8043AB50; // type:object size:0x16 scope:local +@14 = .data:0x8043AB68; // type:object size:0x26 scope:local +@15 = .data:0x8043AB90; // type:object size:0x1C scope:local +@74 = .data:0x8043ABAC; // type:object size:0x1D scope:local +@75 = .data:0x8043ABCC; // type:object size:0x17 scope:local +@77 = .data:0x8043ABE4; // type:object size:0x31 scope:local +@78 = .data:0x8043AC18; // type:object size:0x10 scope:local +@79 = .data:0x8043AC28; // type:object size:0x60 scope:local +@80 = .data:0x8043AC88; // type:object size:0x4C scope:local +@81 = .data:0x8043ACD4; // type:object size:0x62 scope:local +@82 = .data:0x8043AD38; // type:object size:0x60 scope:local +@83 = .data:0x8043AD98; // type:object size:0x1F scope:local +@84 = .data:0x8043ADB8; // type:object size:0x1F scope:local +@85 = .data:0x8043ADD8; // type:object size:0x1B scope:local +@86 = .data:0x8043ADF4; // type:object size:0x35 scope:local +@87 = .data:0x8043AE2C; // type:object size:0x40 scope:local +@115 = .data:0x8043AE70; // type:object size:0xB scope:local +HankakuToCode = .data:0x8043AE80; // type:object size:0x180 scope:local +Zenkaku2Code = .data:0x8043B000; // type:object size:0x98A scope:local +InterruptPrioTable = .data:0x8043B990; // type:object size:0x2C scope:local +@62 = .data:0x8043B9C0; // type:object size:0x25 scope:local +@189 = .data:0x8043B9E8; // type:object size:0x27 scope:local +ResetFunctionInfo = .data:0x8043BA10; // type:object size:0x10 scope:local +@153 = .data:0x8043BA20; // type:object size:0x4E scope:local +...data.0 = .data:0x8043BA70; // type:label scope:local +@831 = .data:0x8043BA70; // type:object size:0x5F scope:local +@832 = .data:0x8043BAD0; // type:object size:0xB scope:local +@834 = .data:0x8043BADC; // type:object size:0x5F scope:local +@835 = .data:0x8043BB3C; // type:object size:0x46 scope:local +@836 = .data:0x8043BB84; // type:object size:0x7E scope:local +@837 = .data:0x8043BC04; // type:object size:0x7E scope:local +@838 = .data:0x8043BC84; // type:object size:0x7A scope:local +@839 = .data:0x8043BD00; // type:object size:0x7A scope:local +@840 = .data:0x8043BD7C; // type:object size:0x51 scope:local +@841 = .data:0x8043BDD0; // type:object size:0x71 scope:local +@842 = .data:0x8043BE44; // type:object size:0x39 scope:local +@843 = .data:0x8043BE80; // type:object size:0x49 scope:local +@844 = .data:0x8043BECC; // type:object size:0x51 scope:local +@845 = .data:0x8043BF20; // type:object size:0x52 scope:local +@846 = .data:0x8043BF74; // type:object size:0x59 scope:local +@847 = .data:0x8043BFD0; // type:object size:0x42 scope:local +@848 = .data:0x8043C014; // type:object size:0x3A scope:local +@849 = .data:0x8043C050; // type:object size:0x3A scope:local +@850 = .data:0x8043C08C; // type:object size:0x44 scope:local +@851 = .data:0x8043C0D0; // type:object size:0x44 scope:local +@852 = .data:0x8043C114; // type:object size:0x3B scope:local +@853 = .data:0x8043C150; // type:object size:0x3F scope:local +@854 = .data:0x8043C190; // type:object size:0x67 scope:local +@855 = .data:0x8043C1F8; // type:object size:0x45 scope:local +@856 = .data:0x8043C240; // type:object size:0x3D scope:local +YearDays = .data:0x8043C280; // type:object size:0x30 scope:local +LeapYearDays = .data:0x8043C2B0; // type:object size:0x30 scope:local +...data.0 = .data:0x8043C2E0; // type:label scope:local +UcsAnsiTable = .data:0x8043C2E0; // type:object size:0x40 scope:local +Ucs00 = .data:0x8043C320; // type:object size:0x200 scope:local +Ucs03 = .data:0x8043C520; // type:object size:0x200 scope:local +Ucs04 = .data:0x8043C720; // type:object size:0x200 scope:local +Ucs20 = .data:0x8043C920; // type:object size:0x200 scope:local +Ucs21 = .data:0x8043CB20; // type:object size:0x200 scope:local +Ucs22 = .data:0x8043CD20; // type:object size:0x200 scope:local +Ucs23 = .data:0x8043CF20; // type:object size:0x200 scope:local +Ucs25 = .data:0x8043D120; // type:object size:0x200 scope:local +Ucs26 = .data:0x8043D320; // type:object size:0x200 scope:local +Ucs30 = .data:0x8043D520; // type:object size:0x200 scope:local +Ucs4E = .data:0x8043D720; // type:object size:0x200 scope:local +Ucs4F = .data:0x8043D920; // type:object size:0x200 scope:local +Ucs50 = .data:0x8043DB20; // type:object size:0x200 scope:local +Ucs51 = .data:0x8043DD20; // type:object size:0x200 scope:local +Ucs52 = .data:0x8043DF20; // type:object size:0x200 scope:local +Ucs53 = .data:0x8043E120; // type:object size:0x200 scope:local +Ucs54 = .data:0x8043E320; // type:object size:0x200 scope:local +Ucs55 = .data:0x8043E520; // type:object size:0x200 scope:local +Ucs56 = .data:0x8043E720; // type:object size:0x200 scope:local +Ucs57 = .data:0x8043E920; // type:object size:0x200 scope:local +Ucs58 = .data:0x8043EB20; // type:object size:0x200 scope:local +Ucs59 = .data:0x8043ED20; // type:object size:0x200 scope:local +Ucs5A = .data:0x8043EF20; // type:object size:0x200 scope:local +Ucs5B = .data:0x8043F120; // type:object size:0x200 scope:local +Ucs5C = .data:0x8043F320; // type:object size:0x200 scope:local +Ucs5D = .data:0x8043F520; // type:object size:0x200 scope:local +Ucs5E = .data:0x8043F720; // type:object size:0x200 scope:local +Ucs5F = .data:0x8043F920; // type:object size:0x200 scope:local +Ucs60 = .data:0x8043FB20; // type:object size:0x200 scope:local +Ucs61 = .data:0x8043FD20; // type:object size:0x200 scope:local +Ucs62 = .data:0x8043FF20; // type:object size:0x200 scope:local +Ucs63 = .data:0x80440120; // type:object size:0x200 scope:local +Ucs64 = .data:0x80440320; // type:object size:0x200 scope:local +Ucs65 = .data:0x80440520; // type:object size:0x200 scope:local +Ucs66 = .data:0x80440720; // type:object size:0x200 scope:local +Ucs67 = .data:0x80440920; // type:object size:0x200 scope:local +Ucs68 = .data:0x80440B20; // type:object size:0x200 scope:local +Ucs69 = .data:0x80440D20; // type:object size:0x200 scope:local +Ucs6A = .data:0x80440F20; // type:object size:0x200 scope:local +Ucs6B = .data:0x80441120; // type:object size:0x200 scope:local +Ucs6C = .data:0x80441320; // type:object size:0x200 scope:local +Ucs6D = .data:0x80441520; // type:object size:0x200 scope:local +Ucs6E = .data:0x80441720; // type:object size:0x200 scope:local +Ucs6F = .data:0x80441920; // type:object size:0x200 scope:local +Ucs70 = .data:0x80441B20; // type:object size:0x200 scope:local +Ucs71 = .data:0x80441D20; // type:object size:0x200 scope:local +Ucs72 = .data:0x80441F20; // type:object size:0x200 scope:local +Ucs73 = .data:0x80442120; // type:object size:0x200 scope:local +Ucs74 = .data:0x80442320; // type:object size:0x200 scope:local +Ucs75 = .data:0x80442520; // type:object size:0x200 scope:local +Ucs76 = .data:0x80442720; // type:object size:0x200 scope:local +Ucs77 = .data:0x80442920; // type:object size:0x200 scope:local +Ucs78 = .data:0x80442B20; // type:object size:0x200 scope:local +Ucs79 = .data:0x80442D20; // type:object size:0x200 scope:local +Ucs7A = .data:0x80442F20; // type:object size:0x200 scope:local +Ucs7B = .data:0x80443120; // type:object size:0x200 scope:local +Ucs7C = .data:0x80443320; // type:object size:0x200 scope:local +Ucs7D = .data:0x80443520; // type:object size:0x200 scope:local +Ucs7E = .data:0x80443720; // type:object size:0x200 scope:local +Ucs7F = .data:0x80443920; // type:object size:0x200 scope:local +Ucs80 = .data:0x80443B20; // type:object size:0x200 scope:local +Ucs81 = .data:0x80443D20; // type:object size:0x200 scope:local +Ucs82 = .data:0x80443F20; // type:object size:0x200 scope:local +Ucs83 = .data:0x80444120; // type:object size:0x200 scope:local +Ucs84 = .data:0x80444320; // type:object size:0x200 scope:local +Ucs85 = .data:0x80444520; // type:object size:0x200 scope:local +Ucs86 = .data:0x80444720; // type:object size:0x200 scope:local +Ucs87 = .data:0x80444920; // type:object size:0x200 scope:local +Ucs88 = .data:0x80444B20; // type:object size:0x200 scope:local +Ucs89 = .data:0x80444D20; // type:object size:0x200 scope:local +Ucs8A = .data:0x80444F20; // type:object size:0x200 scope:local +Ucs8B = .data:0x80445120; // type:object size:0x200 scope:local +Ucs8C = .data:0x80445320; // type:object size:0x200 scope:local +Ucs8D = .data:0x80445520; // type:object size:0x200 scope:local +Ucs8E = .data:0x80445720; // type:object size:0x200 scope:local +Ucs8F = .data:0x80445920; // type:object size:0x200 scope:local +Ucs90 = .data:0x80445B20; // type:object size:0x200 scope:local +Ucs91 = .data:0x80445D20; // type:object size:0x200 scope:local +Ucs92 = .data:0x80445F20; // type:object size:0x200 scope:local +Ucs93 = .data:0x80446120; // type:object size:0x200 scope:local +Ucs94 = .data:0x80446320; // type:object size:0x200 scope:local +Ucs95 = .data:0x80446520; // type:object size:0x200 scope:local +Ucs96 = .data:0x80446720; // type:object size:0x200 scope:local +Ucs97 = .data:0x80446920; // type:object size:0x200 scope:local +Ucs98 = .data:0x80446B20; // type:object size:0x200 scope:local +Ucs99 = .data:0x80446D20; // type:object size:0x200 scope:local +Ucs9A = .data:0x80446F20; // type:object size:0x200 scope:local +Ucs9B = .data:0x80447120; // type:object size:0x200 scope:local +Ucs9C = .data:0x80447320; // type:object size:0x200 scope:local +Ucs9D = .data:0x80447520; // type:object size:0x200 scope:local +Ucs9E = .data:0x80447720; // type:object size:0x200 scope:local +Ucs9F = .data:0x80447920; // type:object size:0x200 scope:local +UcsFF = .data:0x80447B20; // type:object size:0x200 scope:local +UcsSjisTable = .data:0x80447D20; // type:object size:0x400 scope:local +Sjis00 = .data:0x80448120; // type:object size:0x200 scope:local +Sjis81 = .data:0x80448320; // type:object size:0x200 scope:local +Sjis82 = .data:0x80448520; // type:object size:0x200 scope:local +Sjis83 = .data:0x80448720; // type:object size:0x200 scope:local +Sjis84 = .data:0x80448920; // type:object size:0x200 scope:local +Sjis88 = .data:0x80448B20; // type:object size:0x200 scope:local +Sjis89 = .data:0x80448D20; // type:object size:0x200 scope:local +Sjis8A = .data:0x80448F20; // type:object size:0x200 scope:local +Sjis8B = .data:0x80449120; // type:object size:0x200 scope:local +Sjis8C = .data:0x80449320; // type:object size:0x200 scope:local +Sjis8D = .data:0x80449520; // type:object size:0x200 scope:local +Sjis8E = .data:0x80449720; // type:object size:0x200 scope:local +Sjis8F = .data:0x80449920; // type:object size:0x200 scope:local +Sjis90 = .data:0x80449B20; // type:object size:0x200 scope:local +Sjis91 = .data:0x80449D20; // type:object size:0x200 scope:local +Sjis92 = .data:0x80449F20; // type:object size:0x200 scope:local +Sjis93 = .data:0x8044A120; // type:object size:0x200 scope:local +Sjis94 = .data:0x8044A320; // type:object size:0x200 scope:local +Sjis95 = .data:0x8044A520; // type:object size:0x200 scope:local +Sjis96 = .data:0x8044A720; // type:object size:0x200 scope:local +Sjis97 = .data:0x8044A920; // type:object size:0x200 scope:local +Sjis98 = .data:0x8044AB20; // type:object size:0x200 scope:local +Sjis99 = .data:0x8044AD20; // type:object size:0x200 scope:local +Sjis9A = .data:0x8044AF20; // type:object size:0x200 scope:local +Sjis9B = .data:0x8044B120; // type:object size:0x200 scope:local +Sjis9C = .data:0x8044B320; // type:object size:0x200 scope:local +Sjis9D = .data:0x8044B520; // type:object size:0x200 scope:local +Sjis9E = .data:0x8044B720; // type:object size:0x200 scope:local +Sjis9F = .data:0x8044B920; // type:object size:0x200 scope:local +SjisE0 = .data:0x8044BB20; // type:object size:0x200 scope:local +SjisE1 = .data:0x8044BD20; // type:object size:0x200 scope:local +SjisE2 = .data:0x8044BF20; // type:object size:0x200 scope:local +SjisE3 = .data:0x8044C120; // type:object size:0x200 scope:local +SjisE4 = .data:0x8044C320; // type:object size:0x200 scope:local +SjisE5 = .data:0x8044C520; // type:object size:0x200 scope:local +SjisE6 = .data:0x8044C720; // type:object size:0x200 scope:local +SjisE7 = .data:0x8044C920; // type:object size:0x200 scope:local +SjisE8 = .data:0x8044CB20; // type:object size:0x200 scope:local +SjisE9 = .data:0x8044CD20; // type:object size:0x200 scope:local +SjisEA = .data:0x8044CF20; // type:object size:0x200 scope:local +SjisUcsTable = .data:0x8044D120; // type:object size:0x400 scope:local +@9 = .data:0x8044D520; // type:object size:0x18 scope:local +mtxUnit = .data:0x8044D538; // type:object size:0x10 scope:local +...data.0 = .data:0x8044D548; // type:label scope:local +@119 = .data:0x8044D548; // type:object size:0xC8 scope:local +@140 = .data:0x8044D610; // type:object size:0x37 scope:local +@239 = .data:0x8044D648; // type:object size:0x34 scope:local +@265 = .data:0x8044D67C; // type:object size:0x2F scope:local +@271 = .data:0x8044D6AC; // type:object size:0x27 scope:local +@311 = .data:0x8044D6D4; // type:object size:0x3A scope:local +@343 = .data:0x8044D710; // type:object size:0x66 scope:local +@344 = .data:0x8044D778; // type:object size:0x55 scope:local +@345 = .data:0x8044D7D0; // type:object size:0x5C scope:local +@376 = .data:0x8044D82C; // type:object size:0x61 scope:local +@377 = .data:0x8044D890; // type:object size:0x50 scope:local +@378 = .data:0x8044D8E0; // type:object size:0x57 scope:local +...data.0 = .data:0x8044D938; // type:label scope:local +@1 = .data:0x8044D938; // type:object size:0x45 scope:local +@18 = .data:0x8044D980; // type:object size:0xA scope:local +@24 = .data:0x8044D98C; // type:object size:0x34 scope:local +@359 = .data:0x8044D9C0; // type:object size:0x44 scope:local +ImmCommand = .data:0x8044DA04; // type:object size:0xC scope:local +@789 = .data:0x8044DA10; // type:object size:0x41 scope:local +@956 = .data:0x8044DA54; // type:object size:0x34 scope:local +@1060 = .data:0x8044DA88; // type:object size:0x34 scope:local +...data.0 = .data:0x8044DAC0; // type:label scope:local +@66 = .data:0x8044DAC0; // type:object size:0xC scope:local +@69 = .data:0x8044DACC; // type:object size:0xB scope:local +@70 = .data:0x8044DAD8; // type:object size:0xD scope:local +@71 = .data:0x8044DAE8; // type:object size:0x13 scope:local +@72 = .data:0x8044DAFC; // type:object size:0x14 scope:local +@73 = .data:0x8044DB10; // type:object size:0x12 scope:local +@74 = .data:0x8044DB24; // type:object size:0x13 scope:local +@75 = .data:0x8044DB38; // type:object size:0xF scope:local +@76 = .data:0x8044DB48; // type:object size:0x14 scope:local +@78 = .data:0x8044DB5C; // type:object size:0xF scope:local +CommandNames = .data:0x8044DB6C; // type:object size:0x40 scope:local +@97 = .data:0x8044DBAC; // type:object size:0x24 scope:local +@98 = .data:0x8044DBD0; // type:object size:0xF scope:local +@101 = .data:0x8044DBE0; // type:object size:0x15 scope:local +@102 = .data:0x8044DBF8; // type:object size:0x2B scope:local +ErrorTable = .data:0x8044DC28; // type:object size:0x48 scope:local +...data.0 = .data:0x8044DC70; // type:label scope:local +@4 = .data:0x8044DC70; // type:object size:0x6E scope:local +@5 = .data:0x8044DCE0; // type:object size:0x7E scope:local +@6 = .data:0x8044DD60; // type:object size:0x99 scope:local +@7 = .data:0x8044DDFC; // type:object size:0x8D scope:local +@8 = .data:0x8044DE8C; // type:object size:0x87 scope:local +@9 = .data:0x8044DF14; // type:object size:0x80 scope:local +@10 = .data:0x8044DF94; // type:object size:0x89 scope:local +...data.0 = .data:0x8044E020; // type:label scope:local +@38 = .data:0x8044E020; // type:object size:0x1A scope:local +@39 = .data:0x8044E03C; // type:object size:0x16 scope:local +@40 = .data:0x8044E054; // type:object size:0x14 scope:local +@41 = .data:0x8044E068; // type:object size:0x14 scope:local +@44 = .data:0x8044E07C; // type:object size:0x14 scope:local +...data.0 = .data:0x8044E090; // type:label scope:local +@1 = .data:0x8044E090; // type:object size:0x44 scope:local +timing = .data:0x8044E0D4; // type:object size:0x17C scope:local +taps = .data:0x8044E250; // type:object size:0x32 scope:local +@101 = .data:0x8044E284; // type:object size:0x7C scope:local +@355 = .data:0x8044E300; // type:object size:0x29 scope:local +@356 = .data:0x8044E32C; // type:object size:0x29 scope:local +@357 = .data:0x8044E358; // type:object size:0x29 scope:local +@358 = .data:0x8044E384; // type:object size:0x29 scope:local +@359 = .data:0x8044E3B0; // type:object size:0x29 scope:local +@360 = .data:0x8044E3DC; // type:object size:0x29 scope:local +@538 = .data:0x8044E408; // type:object size:0x4B scope:local +@740 = .data:0x8044E454; // type:object size:0x20 scope:local +PadChanMask = .data:0x8044E478; // type:object size:0x10 scope:local +...data.0 = .data:0x8044E488; // type:label scope:local +@1 = .data:0x8044E488; // type:object size:0x45 scope:local +ResetFunctionInfo = .data:0x8044E4D0; // type:object size:0x10 scope:local +...data.0 = .data:0x8044E4E0; // type:label scope:local +@1 = .data:0x8044E4E0; // type:object size:0x44 scope:local +...data.0 = .data:0x8044E528; // type:label scope:local +@1 = .data:0x8044E528; // type:object size:0x44 scope:local +SectorSizeTable = .data:0x8044E570; // type:object size:0x20 scope:local +LatencyTable = .data:0x8044E590; // type:object size:0x20 scope:local +...data.0 = .data:0x8044E5B0; // type:label scope:local +@1 = .data:0x8044E5B0; // type:object size:0x46 scope:local +ResetFunctionInfo = .data:0x8044E5F8; // type:object size:0x10 scope:local +CardData = .data:0x8044E620; // type:object size:0x160 scope:local +...data.0 = .data:0x8044E780; // type:label scope:local +@1 = .data:0x8044E780; // type:object size:0x44 scope:local +DefaultTexData = .data:0x8044E7E0; // type:object size:0x20 scope:local +GXDefaultVATList = .data:0x8044E800; // type:object size:0xD0 scope:local +GXDefaultProjData = .data:0x8044E8D0; // type:object size:0x1C scope:local +GXTexRegionAddrTable = .data:0x8044E8EC; // type:object size:0xC0 scope:local +GXResetFuncInfo = .data:0x8044E9AC; // type:object size:0x10 scope:local +@176 = .data:0x8044E9C0; // type:object size:0x68 scope:local +@223 = .data:0x8044EA28; // type:object size:0x68 scope:local +@282 = .data:0x8044EA90; // type:object size:0x68 scope:local +@476 = .data:0x8044EAF8; // type:object size:0x44 scope:local +@503 = .data:0x8044EB3C; // type:object size:0x44 scope:local +@545 = .data:0x8044EB80; // type:object size:0x44 scope:local +@740 = .data:0x8044EBC4; // type:object size:0x1C scope:local +@739 = .data:0x8044EBE0; // type:object size:0x54 scope:local +@431 = .data:0x8044EC38; // type:object size:0x9 scope:local +@432 = .data:0x8044EC44; // type:object size:0x21 scope:local +@451 = .data:0x8044EC68; // type:object size:0x23 scope:local +GXNtsc480IntDf = .data:0x8044ECA0; // type:object size:0x3C scope:global +GXNtsc480Prog = .data:0x8044ECE4; // type:object size:0x3C scope:global +GXMpal480IntDf = .data:0x8044ED38; // type:object size:0x3C scope:global +GXPal528IntDf = .data:0x8044ED8C; // type:object size:0x3C scope:global +GXEurgb60Hz480IntDf = .data:0x8044EDE0; // type:object size:0x3C scope:global +@145 = .data:0x8044EE28; // type:object size:0x1C scope:local +@46 = .data:0x8044EE48; // type:object size:0xF4 scope:local +@104 = .data:0x8044EF3C; // type:object size:0xF4 scope:local +@145 = .data:0x8044F030; // type:object size:0xF4 scope:local +@224 = .data:0x8044F124; // type:object size:0x3C scope:local +...data.0 = .data:0x8044F160; // type:label scope:local +TEVCOpTableST0 = .data:0x8044F160; // type:object size:0x14 scope:local +TEVCOpTableST1 = .data:0x8044F174; // type:object size:0x14 scope:local +TEVAOpTableST0 = .data:0x8044F188; // type:object size:0x14 scope:local +TEVAOpTableST1 = .data:0x8044F19C; // type:object size:0x14 scope:local +c2r$334 = .data:0x8044F1B0; // type:object size:0x24 scope:local +p2f$358 = .data:0x8044F1D8; // type:object size:0x20 scope:local +@182 = .data:0x8044F1F8; // type:object size:0x5C scope:local +@181 = .data:0x8044F254; // type:object size:0x90 scope:local +@288 = .data:0x8044F2E4; // type:object size:0x5C scope:local +...data.0 = .data:0x8044F340; // type:label scope:local +@1 = .data:0x8044F340; // type:object size:0x45 scope:local +@473 = .data:0x8044F388; // type:object size:0xF scope:local +@474 = .data:0x8044F398; // type:object size:0x10 scope:local +@475 = .data:0x8044F3A8; // type:object size:0x10 scope:local +@476 = .data:0x8044F3B8; // type:object size:0x10 scope:local +@477 = .data:0x8044F3C8; // type:object size:0x11 scope:local +@478 = .data:0x8044F3DC; // type:object size:0x11 scope:local +@479 = .data:0x8044F3F0; // type:object size:0xC scope:local +@485 = .data:0x8044F3FC; // type:object size:0x9 scope:local +@486 = .data:0x8044F408; // type:object size:0xD scope:local +@487 = .data:0x8044F418; // type:object size:0x12 scope:local +@489 = .data:0x8044F42C; // type:object size:0xE scope:local +@490 = .data:0x8044F43C; // type:object size:0xE scope:local +...data.0 = .data:0x8044F450; // type:label scope:local +@1 = .data:0x8044F450; // type:object size:0x44 scope:local +Si = .data:0x8044F494; // type:object size:0x14 scope:local +Type = .data:0x8044F4A8; // type:object size:0x10 scope:local +@457 = .data:0x8044F4B8; // type:object size:0xC scope:local +@459 = .data:0x8044F4C4; // type:object size:0xF scope:local +@460 = .data:0x8044F4D4; // type:object size:0xF scope:local +@461 = .data:0x8044F4E4; // type:object size:0xD scope:local +@462 = .data:0x8044F4F4; // type:object size:0xA scope:local +@463 = .data:0x8044F500; // type:object size:0x10 scope:local +@464 = .data:0x8044F510; // type:object size:0x14 scope:local +@465 = .data:0x8044F524; // type:object size:0x12 scope:local +@466 = .data:0x8044F538; // type:object size:0x14 scope:local +@467 = .data:0x8044F54C; // type:object size:0x9 scope:local +@468 = .data:0x8044F558; // type:object size:0x9 scope:local +...data.0 = .data:0x8044F568; // type:label scope:local +XYNTSC = .data:0x8044F568; // type:object size:0x30 scope:local +XYPAL = .data:0x8044F598; // type:object size:0x30 scope:local +@16 = .data:0x8044F5C8; // type:object size:0x33 scope:local +ResetFunctionInfo = .data:0x8044F600; // type:object size:0x10 scope:local +@28 = .data:0x8044F610; // type:object size:0x19 scope:local +idctprescale = .data:0x8044F62C; // type:object size:0x100 scope:global +VP6_ModeUsesMC = .data:0x8044F72C; // type:object size:0x28 scope:global +BilinearFilters = .data:0x8044F754; // type:object size:0x40 scope:local +DeblockLimitValuesVp4 = .data:0x8044F794; // type:object size:0x100 scope:global +DeblockLimitValuesVp5 = .data:0x8044F894; // type:object size:0x100 scope:global +DeblockLimitValuesVp6 = .data:0x8044F994; // type:object size:0x100 scope:global +DeringModifierV2 = .data:0x8044FA94; // type:object size:0x100 scope:global +DeringModifierV3 = .data:0x8044FB94; // type:object size:0x100 scope:global +SharpenModifier = .data:0x8044FC94; // type:object size:0x100 scope:global +LoopFilterLimitValuesVp4 = .data:0x8044FD94; // type:object size:0x100 scope:global +LoopFilterLimitValuesVp5 = .data:0x8044FE94; // type:object size:0x100 scope:global +LoopFilterLimitValuesVp6 = .data:0x8044FF94; // type:object size:0x100 scope:global +idctconstants = .data:0x80450094; // type:object size:0x20 scope:local +BicubicFilters = .data:0x804500B4; // type:object size:0x80 scope:local +BilinearFilters = .data:0x80450134; // type:object size:0x40 scope:local +playerinterfacefn = .data:0x80450174; // type:object size:0x30 scope:global +SNDAEMSoptfn = .data:0x804501A4; // type:object size:0x30 scope:global +SNDAEMSplayerplayfn = .data:0x804501D4; // type:object size:0x10 scope:global +SNDAEMSplayerstopfn = .data:0x804501E4; // type:object size:0x10 scope:global +SNDAEMSplayerpausefn = .data:0x804501F4; // type:object size:0x10 scope:global +SNDAEMSplayerunpausefn = .data:0x80450204; // type:object size:0x10 scope:global +SNDAEMSplayerupdatefn = .data:0x80450214; // type:object size:0x10 scope:global +sndaemsfuncs = .data:0x80450224; // type:object size:0xA0 scope:global +modulebankhandle.375 = .data:0x804502C4; // type:object size:0x4 scope:local +SNDAEMSalmbcurrentpriority = .data:0x804502C8; // type:object size:0x4 scope:global +lasthandle.129 = .data:0x804502CC; // type:object size:0x4 scope:local +sndbas = .data:0x804502D0; // type:object size:0xC scope:global +SNDIrandseedorig = .data:0x804502DC; // type:object size:0x18 scope:global +lastTick.126 = .data:0x804502F4; // type:object size:0x4 scope:local +_3Snd.gMutexLockFn = .data:0x804502F8; // type:object size:0x4 scope:global +_3Snd.gMutexUnlockFn = .data:0x804502FC; // type:object size:0x4 scope:global +sndsintbl = .data:0x80450300; // type:object size:0x202 scope:global +_3Snd.gVoiceIndexToChannelLut = .data:0x80450504; // type:object size:0x24 scope:global +_3Snd.pheap = .data:0x80450528; // type:object size:0x4 scope:global +_3Snd.outputmode = .data:0x8045052C; // type:object size:0x4 scope:global +_3Snd.gMasterVol = .data:0x80450530; // type:object size:0x4 scope:global +_3Snd.gMaxFxBuses = .data:0x80450534; // type:object size:0x4 scope:global +gotcaps = .data:0x80450538; // type:object size:0x4 scope:local +ret.126 = .data:0x8045053C; // type:object size:0x4 scope:local +freekey.126 = .data:0x80450540; // type:object size:0x1 scope:local +snddefaultenvelope = .data:0x80450544; // type:object size:0x8 scope:global +systaskadded.168 = .data:0x8045054C; // type:object size:0x4 scope:local +_3Snd.MPEGuse_MMX = .data:0x80450550; // type:object size:0x4 scope:global +SNDDRV_dolbypl2balances = .data:0x80450558; // type:object size:0x800 scope:global +everyother = .data:0x80450D58; // type:object size:0x4 scope:local +curTick.460 = .data:0x80450D5C; // type:object size:0x4 scope:local +araminited.470 = .data:0x80450D60; // type:object size:0x4 scope:local +tablecopyto = .data:0x80450D68; // type:object size:0x510 scope:global +mapchannel = .data:0x80451278; // type:object size:0xD8 scope:global +filtersizetable = .data:0x80451350; // type:object size:0x28 scope:global +filtermodsizetable = .data:0x80451378; // type:object size:0x28 scope:global +fxGlobalsCreated = .data:0x804513A0; // type:object size:0x4 scope:local +sndlibauthor = .data:0x804513A4; // type:object size:0x3D scope:global +sndcents = .data:0x804513E4; // type:object size:0x100 scope:global +sndpantoazimuthtab = .data:0x804514E4; // type:object size:0x100 scope:global +_Q23Snd4Coda.gpMemCpy = .data:0x804515E4; // type:object size:0x4 scope:global +_3Snd.xafilterf = .data:0x804515E8; // type:object size:0x20 scope:global +_3Snd.xatablef = .data:0x80451608; // type:object size:0x400 scope:global +_3Snd.bitmask = .data:0x80451A08; // type:object size:0x24 scope:local +_3Snd.coeff_table = .data:0x80451A2C; // type:object size:0x100 scope:local +_3Snd.index_table = .data:0x80451B2C; // type:object size:0x200 scope:local +_3Snd.decode_table = .data:0x80451D2C; // type:object size:0x15C scope:local +_4Csis.gIsAllocSet = .data:0x80451E88; // type:object size:0x4 scope:global +_4Csis.gpAllocator = .data:0x80451E8C; // type:object size:0x4 scope:global +_4Csis.gpCoreAllocator = .data:0x80451E90; // type:object size:0x4 scope:global +_4Csis.gIsAllocatorCreated = .data:0x80451E94; // type:object size:0x4 scope:global +_4Csis.gIsCoreAllocatorCreated = .data:0x80451E98; // type:object size:0x4 scope:global +_4Csis.gIsInited = .data:0x80451E9C; // type:object size:0x4 scope:global +_4Csis.gUniqueKeyId = .data:0x80451EA0; // type:object size:0x2 scope:local +_4Path.pfstates = .data:0x80451EA8; // type:object size:0x10 scope:global +seedPATH = .data:0x80451EB8; // type:object size:0x18 scope:global +gMemAlloc = .data:0x80451ED0; // type:object size:0x4 scope:global +gMemFree = .data:0x80451ED4; // type:object size:0x4 scope:global +gExtVecs = .data:0x80451ED8; // type:object size:0xC scope:global +gSPCH_Initialized = .data:0x80451EE4; // type:object size:0x4 scope:global +gVoxBanks = .data:0x80451EE8; // type:object size:0x4 scope:global +gUniqueBankHandle = .data:0x80451EEC; // type:object size:0x4 scope:global +gNumBanks = .data:0x80451EF0; // type:object size:0x4 scope:global +gBankCount = .data:0x80451EF4; // type:object size:0x4 scope:global +gSPCH_AddEvent = .data:0x80451EF8; // type:object size:0x4 scope:global +gClearCycle = .data:0x80451EFC; // type:object size:0x4 scope:global +gAddEventStatus = .data:0x80451F00; // type:object size:0x4 scope:local +gSPCHPlayStatus = .data:0x80451F04; // type:object size:0x4 scope:local +multiple = .data:0x80451F08; // type:object size:0x20 scope:local +seedX = .data:0x80451F28; // type:object size:0x18 scope:global +gRandArrayIndex = .data:0x80451F40; // type:object size:0x4 scope:global +spchlibauthor = .data:0x80451F44; // type:object size:0x3D scope:global +gFileSysOpts = .data:0x80451F84; // type:object size:0x38 scope:global +exitfunctions = .data:0x80451FBC; // type:object size:0x100 scope:local +vbltmrsub = .data:0x804520BC; // type:object size:0x20 scope:global +tmrsub = .data:0x804520DC; // type:object size:0x20 scope:global +_11RealmcUtils.crctab = .data:0x804520FC; // type:object size:0x400 scope:local +PRINTchannellist = .data:0x804524FC; // type:object size:0x300 scope:local +PRINTdevicelist = .data:0x804527FC; // type:object size:0x60 scope:global +@311 = .data:0x80452860; // type:object size:0x67 scope:local +first.183 = .data:0x804528C8; // type:object size:0x4 scope:local +_ctors = .data:0x804528D0; // type:object size:0x8 scope:global +_dtors = .data:0x804528D8; // type:object size:0x8 scope:global +...data.0 = .data:0x804528E0; // type:label scope:local +@1 = .data:0x804528E0; // type:object size:0x45 scope:local +...data.0 = .data:0x80452928; // type:label scope:local +@1 = .data:0x80452928; // type:object size:0x44 scope:local +...data.0 = .data:0x80452970; // type:label scope:local +__AXSrcCycles = .data:0x80452970; // type:object size:0x14 scope:local +__AXMainMixCycles = .data:0x80452984; // type:object size:0x40 scope:local +__AXAuxMixCycles = .data:0x804529C4; // type:object size:0x80 scope:local +__AXCompressorTable = .data:0x80452A60; // type:object size:0x1A40 scope:global +axDspSlave = .data:0x804544A0; // type:object size:0x1F00 scope:global +...data.0 = .data:0x804563A0; // type:label scope:local +@1 = .data:0x804563A0; // type:object size:0x45 scope:local +@19 = .data:0x804563E8; // type:object size:0x1E scope:local +@20 = .data:0x80456408; // type:object size:0xC scope:local +@21 = .data:0x80456414; // type:object size:0x9 scope:local +...data.0 = .data:0x80456420; // type:label scope:local +@266 = .data:0x80456420; // type:object size:0x1D scope:local +@267 = .data:0x80456440; // type:object size:0x2D scope:local +@268 = .data:0x80456470; // type:object size:0x2D scope:local +@269 = .data:0x804564A0; // type:object size:0x2D scope:local +@270 = .data:0x804564D0; // type:object size:0x2D scope:local +@271 = .data:0x80456500; // type:object size:0x2D scope:local +@294 = .data:0x80456530; // type:object size:0x2B scope:local +value.10688 = .bss:0x80456560; // type:label size:0x4 scope:local +_f_bss = .bss:0x80456560; // type:object scope:global +__bss_start = .bss:0x80456560; // type:object scope:global +_.tmp_0.10689 = .bss:0x80456564; // type:label size:0x4 scope:local +k.16707 = .bss:0x80456568; // type:label size:0x4 scope:local +_.tmp_3.16708 = .bss:0x8045656C; // type:label size:0x4 scope:local +k.18593 = .bss:0x80456570; // type:label size:0x4 scope:local +_.tmp_11.18594 = .bss:0x80456574; // type:label size:0x4 scope:local +k.18631 = .bss:0x80456578; // type:label size:0x4 scope:local +_.tmp_12.18632 = .bss:0x8045657C; // type:label size:0x4 scope:local +k.18663 = .bss:0x80456580; // type:label size:0x4 scope:local +_.tmp_13.18664 = .bss:0x80456584; // type:label size:0x4 scope:local +k.18695 = .bss:0x80456588; // type:label size:0x4 scope:local +_.tmp_14.18696 = .bss:0x8045658C; // type:label size:0x4 scope:local +k.18727 = .bss:0x80456590; // type:label size:0x4 scope:local +_.tmp_15.18728 = .bss:0x80456594; // type:label size:0x4 scope:local +k.18765 = .bss:0x80456598; // type:label size:0x4 scope:local +_.tmp_16.18766 = .bss:0x8045659C; // type:label size:0x4 scope:local +k.18797 = .bss:0x804565A0; // type:label size:0x4 scope:local +_.tmp_17.18798 = .bss:0x804565A4; // type:label size:0x4 scope:local +k.18829 = .bss:0x804565A8; // type:label size:0x4 scope:local +_.tmp_18.18830 = .bss:0x804565AC; // type:label size:0x4 scope:local +k.18873 = .bss:0x804565B0; // type:label size:0x4 scope:local +_.tmp_19.18874 = .bss:0x804565B4; // type:label size:0x4 scope:local +k.18905 = .bss:0x804565B8; // type:label size:0x4 scope:local +_.tmp_20.18906 = .bss:0x804565BC; // type:label size:0x4 scope:local +patrolgoal.31353 = .bss:0x804565C0; // type:label size:0x4 scope:local +_.tmp_34.31354 = .bss:0x804565C4; // type:label size:0x4 scope:local +k.32498 = .bss:0x804565C8; // type:label size:0x4 scope:local +_.tmp_35.32499 = .bss:0x804565CC; // type:label size:0x4 scope:local +k.35274 = .bss:0x804565D0; // type:label size:0x4 scope:local +_.tmp_37.35275 = .bss:0x804565D4; // type:label size:0x4 scope:local +car_hash.35783 = .bss:0x804565D8; // type:label size:0x4 scope:local +_.tmp_38.35784 = .bss:0x804565DC; // type:label size:0x4 scope:local +heli_hash.35785 = .bss:0x804565E0; // type:label size:0x4 scope:local +_.tmp_39.35786 = .bss:0x804565E4; // type:label size:0x4 scope:local +variation.36214 = .bss:0x804565E8; // type:label size:0x4 scope:local +_.tmp_40.36215 = .bss:0x804565EC; // type:label size:0x4 scope:local +k.37060 = .bss:0x804565F0; // type:label size:0x4 scope:local +_.tmp_41.37061 = .bss:0x804565F4; // type:label size:0x4 scope:local +kFloatScaleUp = .bss:0x804565F8; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x804565FC; // type:label size:0x4 scope:local +TrafficOffScreenDistance = .bss:0x80456600; // type:label size:0x14 scope:local +TrafficOffScreenTime = .bss:0x80456614; // type:label size:0x14 scope:local +TrafficDensitySpawnRates = .bss:0x80456628; // type:label size:0x14 scope:local +_AITrafficManager = .bss:0x8045663C; // type:label size:0xC scope:global +_AIPursuit = .bss:0x80456648; // type:label size:0xC scope:global +_AIRoadBlock = .bss:0x80456654; // type:label size:0xC scope:global +_AICopManager = .bss:0x80456660; // type:label size:0xC scope:global +_AvoidableManager = .bss:0x8045666C; // type:label size:0xC scope:global +_11AIAvoidable.mAll = .bss:0x80456678; // type:label size:0x8 scope:global +_AIActionNone = .bss:0x80456680; // type:label size:0xC scope:global +_AIActionTooDamaged = .bss:0x8045668C; // type:label size:0xC scope:global +_AIActionGetUnstuck = .bss:0x80456698; // type:label size:0xC scope:global +_AIActionTraffic = .bss:0x804566A4; // type:label size:0xC scope:global +aAIStoppingDistTable = .bss:0x804566B0; // type:label size:0x14 scope:global +_AIActionPursuitOffRoad = .bss:0x804566C4; // type:label size:0xC scope:global +_AIActionHeliPursuit = .bss:0x804566D0; // type:label size:0xC scope:global +_AIActionHeliExit = .bss:0x804566DC; // type:label size:0xC scope:global +_AIActionHeadOnRam = .bss:0x804566E8; // type:label size:0xC scope:global +_AIActionRam = .bss:0x804566F4; // type:label size:0xC scope:global +_AIActionStopShort = .bss:0x80456700; // type:label size:0xC scope:global +_AIActionSpline = .bss:0x8045670C; // type:label size:0xC scope:global +_AIActionStrafe = .bss:0x80456718; // type:label size:0xC scope:global +_AIActionAirborne = .bss:0x80456724; // type:label size:0xC scope:global +_AIActionJackKnife = .bss:0x80456730; // type:label size:0xC scope:global +_AIActionStaticRoadBlock = .bss:0x8045673C; // type:label size:0xC scope:global +AiNosScaleTable = .bss:0x80456748; // type:label size:0x14 scope:global +AiSpeedScaleTable = .bss:0x8045675C; // type:label size:0x14 scope:global +AiSpeedScaleTableDrag = .bss:0x80456770; // type:label size:0x14 scope:global +AiAccelScaleTable = .bss:0x80456784; // type:label size:0x14 scope:global +AiAccelScaleTableDrag = .bss:0x80456798; // type:label size:0x14 scope:global +AiCatchupAcceleration = .bss:0x804567AC; // type:label size:0x14 scope:global +AICorneringScaleTable = .bss:0x804567C0; // type:label size:0x14 scope:global +AiNavLookAheadTable = .bss:0x804567D4; // type:label size:0x14 scope:global +AiDragNavLookAheadTable = .bss:0x804567E8; // type:label size:0x14 scope:global +AiSeparationMinTable = .bss:0x804567FC; // type:label size:0x14 scope:global +AiSeparationMaxTable = .bss:0x80456810; // type:label size:0x14 scope:global +_AIActionRace = .bss:0x80456824; // type:label size:0xC scope:global +HumanNavLookAheadTable = .bss:0x80456830; // type:label size:0x14 scope:global +HumanDragNavLookAheadTable = .bss:0x80456844; // type:label size:0x14 scope:global +__AIVehicleEmpty = .bss:0x80456858; // type:label size:0xC scope:global +__AIVehicleHuman = .bss:0x80456864; // type:label size:0xC scope:global +__AIVehicle = .bss:0x80456870; // type:label size:0xC scope:global +AdaptiveSkillUpTable = .bss:0x8045687C; // type:label size:0x14 scope:global +AdaptiveSkillDownTable = .bss:0x80456890; // type:label size:0x14 scope:global +CatchupGlueTable = .bss:0x804568A4; // type:label size:0x14 scope:global +SlowDownGlueTable = .bss:0x804568B8; // type:label size:0x14 scope:global +CatchupCheatTable = .bss:0x804568CC; // type:label size:0x14 scope:global +__AIVehicleCopCar = .bss:0x804568E0; // type:label size:0xC scope:global +vHeadingErrorModelData = .bss:0x804568EC; // type:label size:0x50 scope:global +HeadingErrorModelGraph = .bss:0x8045693C; // type:label size:0x8 scope:global +vVelocityErrorModelData = .bss:0x80456944; // type:label size:0x48 scope:global +VelocityErrorModelGraph = .bss:0x8045698C; // type:label size:0x8 scope:global +PidProportionalTable = .bss:0x80456994; // type:label size:0x14 scope:global +PidDerivativeTable = .bss:0x804569A8; // type:label size:0x14 scope:global +PidIntegralTable = .bss:0x804569BC; // type:label size:0x14 scope:global +__AIVehicleRacecar = .bss:0x804569D0; // type:label size:0xC scope:global +__AIVehicleTraffic = .bss:0x804569DC; // type:label size:0xC scope:global +__AIVehicleHelicopter = .bss:0x804569E8; // type:label size:0xC scope:global +TheValidTargets = .bss:0x804569F4; // type:label size:0x38 scope:global +TheAITargets = .bss:0x80456A2C; // type:label size:0x8 scope:global +_AIGoalNone = .bss:0x80456A34; // type:label size:0xC scope:global +_AIGoalTraffic = .bss:0x80456A40; // type:label size:0xC scope:global +_AIGoalPatrol = .bss:0x80456A4C; // type:label size:0xC scope:global +_AIGoalPursuit = .bss:0x80456A58; // type:label size:0xC scope:global +_AIGoalStopShort = .bss:0x80456A64; // type:label size:0xC scope:global +_AIGoalRam = .bss:0x80456A70; // type:label size:0xC scope:global +_AIGoalPit = .bss:0x80456A7C; // type:label size:0xC scope:global +_AIGoalPullOver = .bss:0x80456A88; // type:label size:0xC scope:global +_AIGoalHeadOnRam = .bss:0x80456A94; // type:label size:0xC scope:global +_AIGoalStaticRoadBlock = .bss:0x80456AA0; // type:label size:0xC scope:global +_AIGoalFleePursuit = .bss:0x80456AAC; // type:label size:0xC scope:global +_AIGoalHeliPursuit = .bss:0x80456AB8; // type:label size:0xC scope:global +_AIGoalHeliExit = .bss:0x80456AC4; // type:label size:0xC scope:global +_AIGoalRacer = .bss:0x80456AD0; // type:label size:0xC scope:global +kPullOverGoal = .bss:0x80456ADC; // type:label size:0x4 scope:local +heliHash1 = .bss:0x80456AE0; // type:label size:0x4 scope:local +RoadblockCandidateList = .bss:0x80456AE4; // type:label size:0x680 scope:global +SPIKES_RoadblockCandidateList = .bss:0x80457164; // type:label size:0x410 scope:global +_Gps = .bss:0x80457574; // type:label size:0xC scope:global +Tweak_ForceGPSArrowTo = .bss:0x80457580; // type:label size:0x8 scope:local +kFloatScaleUp = .bss:0x80457588; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x8045758C; // type:label size:0x4 scope:local +g_loadedAnimBankList = .bss:0x80457590; // type:label size:0x8 scope:global +_NISListenerActivity = .bss:0x80457598; // type:label size:0xC scope:global +TheAnimChooser = .bss:0x804575A4; // type:label size:0x4 scope:global +WAM_START_TRIGGER = .bss:0x804575A8; // type:label size:0x4 scope:local +WAM_STOP_TRIGGER = .bss:0x804575AC; // type:label size:0x4 scope:local +WAM_FIRST_FRAME = .bss:0x804575B0; // type:label size:0x4 scope:local +WAM_LAST_FRAME = .bss:0x804575B4; // type:label size:0x4 scope:local +WAM_SOUND_TRIGGER_START = .bss:0x804575B8; // type:label size:0x4 scope:local +WAM_SOUND_TRIGGER_STOP = .bss:0x804575BC; // type:label size:0x4 scope:local +WAM_NIS_GENERIC_CONTROL_MSG = .bss:0x804575C0; // type:label size:0x4 scope:local +WAM_FWD_REV_TRACK_CONTROL_MSG = .bss:0x804575C4; // type:label size:0x4 scope:local +temp_loaded_world_anim_entity_chunks = .bss:0x804575C8; // type:label size:0x8 scope:global +gNISSceneOrigin = .bss:0x804575D0; // type:label size:0x10 scope:global +gPlayAnimStream = .bss:0x804575E0; // type:label size:0x4 scope:global +TheAnimPlayer = .bss:0x804575E4; // type:label size:0x10 scope:global +gAnimLoader_ResourceFileList = .bss:0x804575F4; // type:label size:0x8 scope:global +gAnimLoader_Info = .bss:0x804575FC; // type:label size:0x8 scope:global +skel_ROOT_hash = .bss:0x80457604; // type:label size:0x4 scope:global +g_loadedAnimSceneDataList = .bss:0x80457608; // type:label size:0x8 scope:global +gCarAnimationStates = .bss:0x80457610; // type:label size:0x100 scope:global +g_loadedSkeletonList = .bss:0x80457710; // type:label size:0x8 scope:global +TheWorldAnimInstanceDirectory = .bss:0x80457718; // type:label size:0x50 scope:global +kFloatScaleUp = .bss:0x80457778; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x8045777C; // type:label size:0x4 scope:local +_6Attrib.gDatabaseType = .bss:0x80457780; // type:label size:0x4 scope:local +_6Attrib.gClassType = .bss:0x80457784; // type:label size:0x4 scope:local +_6Attrib.gCollectionType = .bss:0x80457788; // type:label size:0x4 scope:local +_Q26Attrib12StringKeyPtr.gDefault = .bss:0x80457790; // type:label size:0x10 scope:global +text.4279 = .bss:0x804577A0; // type:label size:0x100 scope:local +kFloatScaleUp = .bss:0x804578A0; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x804578A4; // type:label size:0x4 scope:local +bFunkServerList = .bss:0x804578A8; // type:label size:0x8 scope:global +bChunkLoaderNull = .bss:0x804578B0; // type:label size:0x10 scope:global +bIdentityQuaternion = .bss:0x804578C0; // type:label size:0x10 scope:global +TheSlotPoolManager = .bss:0x804578D0; // type:label size:0xC scope:global +bUnitVector3 = .bss:0x804578DC; // type:label size:0x10 scope:global +bUnitVector4 = .bss:0x804578EC; // type:label size:0x10 scope:global +bVector3FLT_MAX = .bss:0x804578FC; // type:label size:0x10 scope:global +TheMemoryAllocator = .bss:0x8045790C; // type:label size:0xC scope:global +gMemoryAllocator = .bss:0x80457918; // type:label size:0x4 scope:global +TheMemoryPersistentAllocator = .bss:0x8045791C; // type:label size:0xC scope:global +gMemoryPersistentAllocator = .bss:0x80457928; // type:label size:0x4 scope:global +gSharedStringPool = .bss:0x8045792C; // type:label size:0x2840 scope:global +bPutCharBuffer = .bss:0x8045A16C; // type:label size:0xA0 scope:local +bBufferedTerminalChannel = .bss:0x8045A20C; // type:label size:0x1 scope:local +MemoryPoolMem = .bss:0x8045A20D; // type:label size:0x600 scope:global +MemoryPools = .bss:0x8045A810; // type:label size:0x40 scope:global +MemoryPoolInfoTable = .bss:0x8045A850; // type:label size:0x100 scope:global +eARAMMM = .bss:0x8045A950; // type:label size:0x18 scope:global +ret.17933 = .bss:0x8045A974; // type:label size:0x10 scope:local +_.tmp_2.17934 = .bss:0x8045A984; // type:label size:0x4 scope:local +prev_position.17968 = .bss:0x8045A988; // type:label size:0x10 scope:local +_.tmp_3.17969 = .bss:0x8045A998; // type:label size:0x4 scope:local +k.27577 = .bss:0x8045AA14; // type:label size:0x4 scope:local +_.tmp_19.27578 = .bss:0x8045AA18; // type:label size:0x4 scope:local +k.27633 = .bss:0x8045AA1C; // type:label size:0x4 scope:local +_.tmp_20.27634 = .bss:0x8045AA20; // type:label size:0x4 scope:local +k.27659 = .bss:0x8045AA24; // type:label size:0x4 scope:local +_.tmp_21.27660 = .bss:0x8045AA28; // type:label size:0x4 scope:local +k.29502 = .bss:0x8045AA2C; // type:label size:0x4 scope:local +_.tmp_22.29503 = .bss:0x8045AA30; // type:label size:0x4 scope:local +name.29723 = .bss:0x8045AA38; // type:label size:0x10 scope:local +_.tmp_23.29724 = .bss:0x8045AA48; // type:label size:0x4 scope:local +name.29825 = .bss:0x8045AA50; // type:label size:0x10 scope:local +_.tmp_24.29826 = .bss:0x8045AA60; // type:label size:0x4 scope:local +name.29881 = .bss:0x8045AA68; // type:label size:0x10 scope:local +_.tmp_25.29882 = .bss:0x8045AA78; // type:label size:0x4 scope:local +name.29937 = .bss:0x8045AA80; // type:label size:0x10 scope:local +_.tmp_26.29938 = .bss:0x8045AA90; // type:label size:0x4 scope:local +name.29993 = .bss:0x8045AA98; // type:label size:0x10 scope:local +_.tmp_27.29994 = .bss:0x8045AAA8; // type:label size:0x4 scope:local +name.30094 = .bss:0x8045AAB0; // type:label size:0x10 scope:local +_.tmp_28.30095 = .bss:0x8045AAC0; // type:label size:0x4 scope:local +name.30147 = .bss:0x8045AAC8; // type:label size:0x10 scope:local +_.tmp_29.30148 = .bss:0x8045AAD8; // type:label size:0x4 scope:local +kFloatScaleUp = .bss:0x8045AADC; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x8045AAE0; // type:label size:0x4 scope:local +_6Camera.JollyRancherResponse = .bss:0x8045AAE4; // type:label size:0x50 scope:global +aBaselineFovNoise = .bss:0x8045AB34; // type:label size:0x2 scope:local +CameraNoiseHandheldFrequency = .bss:0x8045AB38; // type:label size:0x10 scope:local +CameraNoiseHandheldAmplitude = .bss:0x8045AB48; // type:label size:0x10 scope:local +CameraNoiseChopperFrequency = .bss:0x8045AB58; // type:label size:0x10 scope:local +CameraNoiseChopperAmplitude = .bss:0x8045AB68; // type:label size:0x10 scope:local +CameraNoiseSpeedFrequency = .bss:0x8045AB78; // type:label size:0x10 scope:local +CameraNoiseSpeedAmplitude = .bss:0x8045AB88; // type:label size:0x10 scope:local +CameraNoiseTerrainFrequency = .bss:0x8045AB98; // type:label size:0x10 scope:local +CameraNoiseTerrainAmplitude = .bss:0x8045ABA8; // type:label size:0x10 scope:local +CameraNoiseSpeedData = .bss:0x8045ABB8; // type:label size:0x50 scope:global +_Physics_System_CameraAI = .bss:0x8045AC08; // type:label size:0x14 scope:global +_Q33UTL11Collectionst8Listable2ZQ28CameraAI8Directori2._mTable = .bss:0x8045AC1C; // type:label size:0x18 scope:global +_CDActionDrive = .bss:0x8045AC34; // type:label size:0xC scope:global +_CDActionTrackCar = .bss:0x8045AC40; // type:label size:0xC scope:global +_CDActionTrackCop = .bss:0x8045AC4C; // type:label size:0xC scope:global +_CDActionShowcase = .bss:0x8045AC58; // type:label size:0xC scope:global +_CDActionDebug = .bss:0x8045AC64; // type:label size:0xC scope:global +_CDActionIce = .bss:0x8045AC70; // type:label size:0xC scope:global +_Q33UTL11Collectionst8Listable2Z14IDebugWatchCari2._mTable = .bss:0x8045AC7C; // type:label size:0x18 scope:global +_CDActionDebugWatchCar = .bss:0x8045AC94; // type:label size:0xC scope:global +aDriftData = .bss:0x8045ACA0; // type:label size:0x10 scope:global +gDriftSpeed = .bss:0x8045ACB0; // type:label size:0x8 scope:global +aCubicPovTables = .bss:0x8045ACB8; // type:label size:0x8C scope:global +CameraSpeedHugData = .bss:0x8045AD44; // type:label size:0x28 scope:global +vCubicBirdsEyeOffset = .bss:0x8045AD6C; // type:label size:0x20 scope:local +SmokeShowEyeOffset = .bss:0x8045AD8C; // type:label size:0x10 scope:local +SmokeShowLookAngle = .bss:0x8045AD9C; // type:label size:0x2 scope:local +HydraulicsEyeOffset = .bss:0x8045ADA0; // type:label size:0x10 scope:local +HydraulicsLookAngle = .bss:0x8045ADB0; // type:label size:0x2 scope:local +NOSFovWidening = .bss:0x8045ADB2; // type:label size:0x2 scope:local +Demo1EyeOffset = .bss:0x8045ADB4; // type:label size:0x10 scope:local +Demo1LookOffset = .bss:0x8045ADC4; // type:label size:0x10 scope:local +Demo2EyeOffset = .bss:0x8045ADD4; // type:label size:0x10 scope:local +Demo2LookOffset = .bss:0x8045ADE4; // type:label size:0x10 scope:local +PreviousEye = .bss:0x8045ADF4; // type:label size:0x10 scope:local +vCopViewPivot = .bss:0x8045AE04; // type:label size:0x10 scope:local +vCopViewDistanceFovBand = .bss:0x8045AE14; // type:label size:0x20 scope:global +tCopViewDistanceFovBand = .bss:0x8045AE34; // type:label size:0x14 scope:global +vCopViewPoints = .bss:0x8045AE48; // type:label size:0x50 scope:global +vCopViewDistanceFov = .bss:0x8045AE98; // type:label size:0x10 scope:global +tCopViewPosition = .bss:0x8045AEA8; // type:label size:0x14 scope:global +tCopViewDistanceFov = .bss:0x8045AEBC; // type:label size:0x14 scope:global +gDebugCameraTweakableEye = .bss:0x8045AED0; // type:label size:0x10 scope:global +gDebugCameraTweakableLook = .bss:0x8045AEE0; // type:label size:0x10 scope:global +_21DebugWorldCameraMover.Eye = .bss:0x8045AEF0; // type:label size:0x10 scope:global +_21DebugWorldCameraMover.Look = .bss:0x8045AF00; // type:label size:0x10 scope:global +_21DebugWorldCameraMover.Up = .bss:0x8045AF10; // type:label size:0x10 scope:global +JumpToPosition = .bss:0x8045AF20; // type:label size:0x10 scope:global +spline_points = .bss:0x8045AF30; // type:label size:0x20 scope:global +gDebugCameraInputGraph = .bss:0x8045AF50; // type:label size:0x8 scope:global +RVMOffsetInCar = .bss:0x8045AF58; // type:label size:0x10 scope:local +gPhoto_CarPosBias = .bss:0x8045AF68; // type:label size:0x10 scope:local +StillEyeTweak = .bss:0x8045AF78; // type:label size:0x10 scope:local +StillLookTweak = .bss:0x8045AF88; // type:label size:0x10 scope:local +StillUpTweak = .bss:0x8045AF98; // type:label size:0x10 scope:local +vIceAccelLagMin = .bss:0x8045AFA8; // type:label size:0x10 scope:local +vIceAccelLagMax = .bss:0x8045AFB8; // type:label size:0x10 scope:local +vIceAccelLagScale = .bss:0x8045AFC8; // type:label size:0x10 scope:local +TheICEManager = .bss:0x8045AFD8; // type:label size:0x80 scope:global +_3ICE.ReplayCategoryTable = .bss:0x8045B058; // type:label size:0x90 scope:global +_9ICEReplay.nRecentlyUsedIndex = .bss:0x8045B0E8; // type:label size:0x4 scope:global +_9ICEReplay.RecentlyUsedTracks = .bss:0x8045B0EC; // type:label size:0xC scope:global +kFloatScaleUp = .bss:0x8045B0F8; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x8045B0FC; // type:label size:0x4 scope:local +kFloatScaleUp = .bss:0x8045B100; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x8045B104; // type:label size:0x4 scope:local +_Q28Dynamics12Articulation.Joints = .bss:0x8045B108; // type:label size:0x8 scope:local +kFloatScaleUp = .bss:0x8045B110; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x8045B114; // type:label size:0x4 scope:local +_Q29EAGL4Anim19AttributeDictionary.mReservedAttributeMetaData = .bss:0x8045B118; // type:label size:0x18 scope:global +_Q25EAGL413DynamicLoader.gSymbolPool = .bss:0x8045B130; // type:label size:0x14 scope:global +_Q25EAGL413DynamicLoader.gConsPool = .bss:0x8045B144; // type:label size:0x28 scope:global +_Q25EAGL413DynamicLoader.gRuntimeAllocConsPool = .bss:0x8045B16C; // type:label size:0x28 scope:global +_Q29EAGL4Anim19ScratchBufferHelper.mScratchBuffers = .bss:0x8045B194; // type:label size:0x24 scope:global +_9EAGL4Anim.qt0 = .bss:0x8045B1C0; // type:label size:0x1C scope:global +k.30900 = .bss:0x8045B268; // type:label size:0x4 scope:local +_.tmp_17.30901 = .bss:0x8045B26C; // type:label size:0x4 scope:local +hash.31037 = .bss:0x8045B288; // type:label size:0x4 scope:local +_.tmp_21.31038 = .bss:0x8045B28C; // type:label size:0x4 scope:local +hash.31045 = .bss:0x8045B290; // type:label size:0x4 scope:local +_.tmp_22.31046 = .bss:0x8045B294; // type:label size:0x4 scope:local +hash.31153 = .bss:0x8045B2A8; // type:label size:0x4 scope:local +_.tmp_25.31154 = .bss:0x8045B2AC; // type:label size:0x4 scope:local +hash.31161 = .bss:0x8045B2B0; // type:label size:0x4 scope:local +_.tmp_26.31162 = .bss:0x8045B2B4; // type:label size:0x4 scope:local +k.34411 = .bss:0x8045B2C8; // type:label size:0x4 scope:local +_.tmp_29.34412 = .bss:0x8045B2CC; // type:label size:0x4 scope:local +prevbrakestate.35478 = .bss:0x8045B2D0; // type:label size:0x4 scope:local +_.tmp_30.35479 = .bss:0x8045B2D4; // type:label size:0x4 scope:local +k.35630 = .bss:0x8045B2D8; // type:label size:0x4 scope:local +_.tmp_31.35631 = .bss:0x8045B2DC; // type:label size:0x4 scope:local +k.35662 = .bss:0x8045B2E0; // type:label size:0x4 scope:local +_.tmp_32.35663 = .bss:0x8045B2E4; // type:label size:0x4 scope:local +k.36612 = .bss:0x8045B2E8; // type:label size:0x4 scope:local +_.tmp_33.36613 = .bss:0x8045B2EC; // type:label size:0x4 scope:local +kFloatScaleUp = .bss:0x8045B2F0; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x8045B2F4; // type:label size:0x4 scope:local +gAudioMemoryManager = .bss:0x8045B2F8; // type:label size:0x14 scope:global +crcEngineAudio = .bss:0x8045B310; // type:label size:0x10 scope:global +crcAudioSystem = .bss:0x8045B320; // type:label size:0x10 scope:global +crcMostWanted = .bss:0x8045B330; // type:label size:0x10 scope:global +crcDrivetrain = .bss:0x8045B340; // type:label size:0x10 scope:global +crcSkidParams = .bss:0x8045B350; // type:label size:0x10 scope:global +crcTurboSFX = .bss:0x8045B360; // type:label size:0x10 scope:global +crcAccelTrans = .bss:0x8045B370; // type:label size:0x10 scope:global +crcShiftPattern = .bss:0x8045B380; // type:label size:0x10 scope:global +crcSweetener = .bss:0x8045B390; // type:label size:0x10 scope:global +crcEnglish = .bss:0x8045B3A0; // type:label size:0x10 scope:global +crcCarHitWall = .bss:0x8045B3B0; // type:label size:0x10 scope:global +crcLicensedMusic = .bss:0x8045B3C0; // type:label size:0x10 scope:global +crcMusic = .bss:0x8045B3D0; // type:label size:0x10 scope:global +gAEMSMgr = .bss:0x8045B3E0; // type:label size:0x130 scope:global +g_SndAssetList = .bss:0x8045B510; // type:label size:0x1380 scope:global +TablePitch = .bss:0x8045C890; // type:label size:0x1C scope:global +BreakingPitchVsSpeed = .bss:0x8045C8AC; // type:label size:0x1C scope:global +__audioscrape = .bss:0x8045C8C8; // type:label size:0xC scope:global +__audioimpact = .bss:0x8045C8D4; // type:label size:0xC scope:global +g_CSISCoreAllocator = .bss:0x8045C8E0; // type:label size:0x4 scope:global +_15cSTICH_PlayBack.mQueuedSampleList = .bss:0x8045C8E4; // type:label size:0x438 scope:global +_Q33UTL11Collectionst11ListableSet4Z14cSampleWarpperi25Z10STICH_TYPEUi3._mLists = .bss:0x8045CD1C; // type:label size:0x15C scope:global +_Q33UTL11Collectionst8Listable2Z12EAX_CarStatei10._mTable = .bss:0x8045CE78; // type:label size:0x38 scope:global +_Q33UTL11Collectionst8Listable2Z13EAX_HeliStatei10._mTable = .bss:0x8045CEB0; // type:label size:0x38 scope:global +_CarSoundConn = .bss:0x8045CEE8; // type:label size:0xC scope:global +_Q33UTL11Collectionst8Listable2Z12CarSoundConni10._mTable = .bss:0x8045CEF4; // type:label size:0x38 scope:global +_HeliSoundConn = .bss:0x8045CF2C; // type:label size:0xC scope:global +_Q33UTL11Collectionst8Listable2Z13HeliSoundConni10._mTable = .bss:0x8045CF38; // type:label size:0x38 scope:global +Songs = .bss:0x8045CF70; // type:label size:0x10 scope:global +g_WheelLoadSlope = .bss:0x8045CF80; // type:label size:0x1C scope:global +RedLineDelayPerGear = .bss:0x8045CF9C; // type:label size:0x1C scope:global +RevPat5 = .bss:0x8045CFB8; // type:label size:0x150 scope:global +RevPat6 = .bss:0x8045D108; // type:label size:0x114 scope:global +RevPat7 = .bss:0x8045D21C; // type:label size:0xF0 scope:global +RevPat8 = .bss:0x8045D30C; // type:label size:0x330 scope:global +RevPat9 = .bss:0x8045D63C; // type:label size:0x2AC scope:global +RevPat10 = .bss:0x8045D8E8; // type:label size:0x1A4 scope:global +RevPat11 = .bss:0x8045DA8C; // type:label size:0x174 scope:global +RevPat12 = .bss:0x8045DC00; // type:label size:0x168 scope:global +_15SFXCTL_3DObjPos.m_v2ObjPosCopy = .bss:0x8045DD68; // type:label size:0x8 scope:global +gPF_MemoryAllocator = .bss:0x8045DD70; // type:label size:0x8 scope:global +GameFlowSndState = .bss:0x8045DD78; // type:label size:0x3C scope:global +pCsisSlotPools = .bss:0x8045DDB4; // type:label size:0x4 scope:global +nCsisSlotPoolSizes = .bss:0x8045DDB8; // type:label size:0x4 scope:global +gbAudioInterruptsWorldDataRead = .bss:0x8045DDBC; // type:label size:0x4 scope:global +gbWorldDataBlocksAudioRead = .bss:0x8045DDC0; // type:label size:0x4 scope:global +bReadCallbackToggle = .bss:0x8045DDC4; // type:label size:0x4 scope:global +csCSISdebug = .bss:0x8045DDCC; // type:label size:0x20 scope:global +requestidcounter = .bss:0x8045DDEC; // type:label size:0x4 scope:local +g_pSFXCTL_Pathfinder = .bss:0x8045DDF0; // type:label size:0x4 scope:global +k.15950 = .bss:0x8045DE60; // type:label size:0x4 scope:local +_.tmp_13.15951 = .bss:0x8045DE64; // type:label size:0x4 scope:local +tmp_refCnt.31253 = .bss:0x8045DED8; // type:label size:0x4 scope:local +_.tmp_28.31254 = .bss:0x8045DEDC; // type:label size:0x4 scope:local +kFloatScaleUp = .bss:0x8045DEF8; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x8045DEFC; // type:label size:0x4 scope:local +_9SndCamera.m_CurCamPos = .bss:0x8045DF00; // type:label size:0x20 scope:global +_9SndCamera.m_CurCamDir = .bss:0x8045DF20; // type:label size:0x20 scope:global +_9SndCamera.m_CurCamTarget = .bss:0x8045DF40; // type:label size:0x20 scope:global +_9SndCamera.m_NormCamDir = .bss:0x8045DF60; // type:label size:0x10 scope:global +_9SndCamera.m_WorldCamPos = .bss:0x8045DF70; // type:label size:0x10 scope:global +_9SndCamera.m_WorldCarPos = .bss:0x8045DF80; // type:label size:0x10 scope:global +_9SndCamera.m_AvergeCamDir = .bss:0x8045DF90; // type:label size:0x10 scope:global +_9SndCamera.m_AveragedCamPos = .bss:0x8045DFA0; // type:label size:0x10 scope:global +_9SndCamera.m_CenteredCamPos = .bss:0x8045DFB0; // type:label size:0x10 scope:global +_9SndCamera.m_CenteredCarPos = .bss:0x8045DFC0; // type:label size:0x10 scope:global +_9SndCamera.m_AverageCarPos = .bss:0x8045DFD0; // type:label size:0x10 scope:global +_9SndCamera.m_NormCarDir = .bss:0x8045DFE0; // type:label size:0x10 scope:global +_9SndCamera.m_v3WorldCarVel = .bss:0x8045DFF0; // type:label size:0x20 scope:global +_9SndCamera.m_v3WorldCamVel = .bss:0x8045E010; // type:label size:0x20 scope:global +_9SndCamera.m_v3WorldCarPos = .bss:0x8045E030; // type:label size:0x20 scope:global +_9SndCamera.m_v3WorldCarDir = .bss:0x8045E050; // type:label size:0x20 scope:global +_9SndCamera.m_CamAction = .bss:0x8045E070; // type:label size:0x20 scope:global +_9SndCamera.m_NewCamAction = .bss:0x8045E090; // type:label size:0x20 scope:global +_14CSTATEMGR_Base.m_SFXCTRLClassList = .bss:0x8045E0B0; // type:label size:0x8 scope:global +_14CSTATEMGR_Base.m_SFXClassList = .bss:0x8045E0B8; // type:label size:0x8 scope:global +_14CSTATEMGR_Base.m_STATEClassList = .bss:0x8045E0C0; // type:label size:0x8 scope:global +_Q33UTL11Collectionst8Listable2Z14ISndAttachablei15._mTable = .bss:0x8045E0C8; // type:label size:0x4C scope:global +_18CSTATEMGR_CarState.FinalMapping = .bss:0x8045E114; // type:label size:0xD0 scope:global +_18CSTATEMGR_CarState.FinalEngines = .bss:0x8045E1E4; // type:label size:0x30 scope:global +_18CSTATEMGR_CarState.FinalCopV8Engines = .bss:0x8045E214; // type:label size:0x30 scope:global +_18CSTATEMGR_CarState.EngineToCarMapping = .bss:0x8045E244; // type:label size:0xD0 scope:global +ShiftingAttackVolSlope = .bss:0x8045E314; // type:label size:0x1C scope:global +RoadNoiseTransitionVolSlope = .bss:0x8045E330; // type:label size:0x1C scope:global +RoadNoiseTransitionPitchSlope = .bss:0x8045E34C; // type:label size:0x1C scope:global +RoadNoiseVolumeCurve = .bss:0x8045E368; // type:label size:0x28 scope:global +RoadNoiseVolGraph = .bss:0x8045E390; // type:label size:0x8 scope:global +RoadNoiseSpeedToPitch = .bss:0x8045E398; // type:label size:0x1C scope:global +WeatherWindVolSlope = .bss:0x8045E3B4; // type:label size:0x1C scope:global +g_CLASS1 = .bss:0x8045E3D0; // type:label size:0x130 scope:global +g_WooshVol_vs_Vel = .bss:0x8045E500; // type:label size:0x1C scope:global +SPAMAccessorSpeech = .bss:0x8045E51C; // type:label size:0x1C scope:global +v3NULL = .bss:0x8045E538; // type:label size:0x10 scope:global +JumpLandingIntensity = .bss:0x8045E548; // type:label size:0x1C scope:global +ReverbAccessor = .bss:0x8045E564; // type:label size:0x1C scope:global +_13SFXObj_Reverb.m_EchoAllocs = .bss:0x8045E580; // type:label size:0x20 scope:global +AmbientAccessor = .bss:0x8045E5A0; // type:label size:0x1C scope:global +_15SFXObj_PFEATrax.m_EATrax = .bss:0x8045E5BC; // type:label size:0x30 scope:global +g_MomentMappings = .bss:0x8045E5EC; // type:label size:0x78 scope:global +g_DOPPLER_PARAMS = .bss:0x8045E664; // type:label size:0x18 scope:global +g_REVERBFXMODULES = .bss:0x8045E67C; // type:label size:0x120 scope:global +_4Csis.gSIRENHandle = .bss:0x8045E79C; // type:label size:0x8 scope:global +_4Csis.gSIREN_BEDHandle = .bss:0x8045E7A4; // type:label size:0x8 scope:global +_4Csis.gSputter_MessageHandle = .bss:0x8045E7AC; // type:label size:0x8 scope:global +_4Csis.gCARHandle = .bss:0x8045E7B4; // type:label size:0x8 scope:global +_4Csis.gCAR_SWTNHandle = .bss:0x8045E7BC; // type:label size:0x8 scope:global +_4Csis.gCAR_WHINEHandle = .bss:0x8045E7C4; // type:label size:0x8 scope:global +_4Csis.gCAR_TRANNYHandle = .bss:0x8045E7CC; // type:label size:0x8 scope:global +_4Csis.gCAR_SputterHandle = .bss:0x8045E7D4; // type:label size:0x8 scope:global +_4Csis.gCAR_SputOutputHandle = .bss:0x8045E7DC; // type:label size:0x8 scope:global +_4Csis.gFX_ROADNOISEHandle = .bss:0x8045E7E4; // type:label size:0x8 scope:global +_4Csis.gFX_ROADNOISE_TRANSHandle = .bss:0x8045E7EC; // type:label size:0x8 scope:global +_4Csis.gENV_STATICHandle = .bss:0x8045E7F4; // type:label size:0x8 scope:global +_4Csis.gFX_MAIN_MEMHandle = .bss:0x8045E7FC; // type:label size:0x8 scope:global +_4Csis.gFX_WINDHandle = .bss:0x8045E804; // type:label size:0x8 scope:global +_4Csis.gFX_WIND_WeatherHandle = .bss:0x8045E80C; // type:label size:0x8 scope:global +_4Csis.gFX_TRAFFICHandle = .bss:0x8045E814; // type:label size:0x8 scope:global +_4Csis.gFX_TRUCK_FXHandle = .bss:0x8045E81C; // type:label size:0x8 scope:global +_4Csis.gPlayCommonSampleHandle = .bss:0x8045E824; // type:label size:0x8 scope:global +_4Csis.gPlayFrontEndSampleHandle = .bss:0x8045E82C; // type:label size:0x8 scope:global +_4Csis.gPlayFrontEndSample_RSHandle = .bss:0x8045E834; // type:label size:0x8 scope:global +_4Csis.gFEDriveOnHandle = .bss:0x8045E83C; // type:label size:0x8 scope:global +_4Csis.gFX_NITROUSHandle = .bss:0x8045E844; // type:label size:0x8 scope:global +_4Csis.gFX_PURGEHandle = .bss:0x8045E84C; // type:label size:0x8 scope:global +_4Csis.gFX_SHIFTING_01Handle = .bss:0x8045E854; // type:label size:0x8 scope:global +_4Csis.gFX_SPARKCHATTERHandle = .bss:0x8045E85C; // type:label size:0x8 scope:global +_4Csis.gFX_SKIDHandle = .bss:0x8045E864; // type:label size:0x8 scope:global +_4Csis.gFX_HydraulicHandle = .bss:0x8045E86C; // type:label size:0x8 scope:global +_4Csis.gFX_HelicopterHandle = .bss:0x8045E874; // type:label size:0x8 scope:global +_4Csis.gFX_Hydr_BounceHandle = .bss:0x8045E87C; // type:label size:0x8 scope:global +_4Csis.gFX_WeatherHandle = .bss:0x8045E884; // type:label size:0x8 scope:global +_4Csis.gFX_CameraHandle = .bss:0x8045E88C; // type:label size:0x8 scope:global +_4Csis.gFX_UVESHandle = .bss:0x8045E894; // type:label size:0x8 scope:global +_4Csis.gFX_RadarHandle = .bss:0x8045E89C; // type:label size:0x8 scope:global +_4Csis.gFX_ScrapeHandle = .bss:0x8045E8A4; // type:label size:0x8 scope:global +_4Csis.gAEMS_StichCollisionHandle = .bss:0x8045E8AC; // type:label size:0x8 scope:global +_4Csis.gAEMS_StichWooshHandle = .bss:0x8045E8B4; // type:label size:0x8 scope:global +_4Csis.gAEMS_StichStaticHandle = .bss:0x8045E8BC; // type:label size:0x8 scope:global +_4Csis.gFX_TURBO_01Handle = .bss:0x8045E8C4; // type:label size:0x8 scope:global +_4Csis.gNIS_Select_StartHandle = .bss:0x8045E8CC; // type:label size:0x8 scope:global +_4Csis.gSoundFX_SelectHandle = .bss:0x8045E8D4; // type:label size:0x8 scope:global +_4Csis.gNIS_Select_BlacklistHandle = .bss:0x8045E8DC; // type:label size:0x8 scope:global +_4Csis.gNIS_Select_EndHandle = .bss:0x8045E8E4; // type:label size:0x8 scope:global +uNIS_STRINGHASHMAP = .bss:0x8045E8EC; // type:label size:0x330 scope:global +mhL2V.32020 = .bss:0x8045ECB0; // type:label size:0x30 scope:local +prevVtxFmt.32111 = .bss:0x8045ECE0; // type:label size:0x4 scope:local +prevopt.32112 = .bss:0x8045ECE4; // type:label size:0x4 scope:local +prevVertexFormat.32116 = .bss:0x8045ECE8; // type:label size:0x4 scope:local +prevVertexDescription.32117 = .bss:0x8045ECEC; // type:label size:0x4 scope:local +kFloatScaleUp = .bss:0x8045ECF0; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x8045ECF4; // type:label size:0x4 scope:local +UnattachedModelList = .bss:0x8045ECF8; // type:label size:0x8 scope:global +MovedModelList = .bss:0x8045ED00; // type:label size:0x8 scope:global +SolidListHeaderList = .bss:0x8045ED08; // type:label size:0x8 scope:global +InvalidSolidList = .bss:0x8045ED10; // type:label size:0x8 scope:global +SolidList = .bss:0x8045ED18; // type:label size:0x8 scope:global +SolidLoadedTable = .bss:0x8045ED20; // type:label size:0x2004 scope:global +bChunkLoaderSolidList = .bss:0x80460D24; // type:label size:0x10 scope:global +StreamingSolidPackLoader = .bss:0x80460D34; // type:label size:0x38 scope:global +RunTimeLightFlarePackHeader = .bss:0x80460D6C; // type:label size:0x60 scope:global +LightFlarePackList = .bss:0x80460DCC; // type:label size:0x8 scope:global +LightPackList = .bss:0x80460DD4; // type:label size:0x8 scope:global +LightMaterialList = .bss:0x80460DDC; // type:label size:0x8 scope:global +DefaultLightMaterialData = .bss:0x80460DE4; // type:label size:0xA8 scope:global +LightPositionVFE0 = .bss:0x80460E8C; // type:label size:0x10 scope:global +LightPositionVFE1 = .bss:0x80460E9C; // type:label size:0x10 scope:global +LightPositionVFE2 = .bss:0x80460EAC; // type:label size:0x10 scope:global +LightPositionFE0 = .bss:0x80460EBC; // type:label size:0x10 scope:global +LightPositionFE1 = .bss:0x80460ECC; // type:label size:0x10 scope:global +LightPositionFE2 = .bss:0x80460EDC; // type:label size:0x10 scope:global +LightColourFE0 = .bss:0x80460EEC; // type:label size:0x10 scope:global +LightColourFE1 = .bss:0x80460EFC; // type:label size:0x10 scope:global +LightColourFE2 = .bss:0x80460F0C; // type:label size:0x10 scope:global +AmbientColourFE = .bss:0x80460F1C; // type:label size:0x10 scope:global +AmbientColourIG = .bss:0x80460F2C; // type:label size:0x10 scope:global +LightDirection0 = .bss:0x80460F3C; // type:label size:0x10 scope:global +LightColour0 = .bss:0x80460F4C; // type:label size:0x10 scope:global +bChunkLoaderLightMaterial = .bss:0x80460F5C; // type:label size:0x10 scope:global +bChunkLoaderLightFlares = .bss:0x80460F6C; // type:label size:0x10 scope:global +bChunkLoaderLights = .bss:0x80460F7C; // type:label size:0x10 scope:global +DynamicLightPackList = .bss:0x80460F8C; // type:label size:0x8 scope:global +ShaperLightsGCSpecial = .bss:0x80460F94; // type:label size:0x88 scope:global +ShaperLightsDefault = .bss:0x8046101C; // type:label size:0x88 scope:global +ShaperLightsBackRoom = .bss:0x804610A4; // type:label size:0x88 scope:global +ShaperLightsCarLot = .bss:0x8046112C; // type:label size:0x88 scope:global +ShaperLightsCShop = .bss:0x804611B4; // type:label size:0x88 scope:global +ShaperLightsQRace = .bss:0x8046123C; // type:label size:0x88 scope:global +ShaperLightsSafehouse = .bss:0x804612C4; // type:label size:0x88 scope:global +ShaperLightsCarsInGame = .bss:0x8046134C; // type:label size:0x88 scope:global +ShaperLightsCharacters = .bss:0x804613D4; // type:label size:0x88 scope:global +ShaperLightsCharactersBackup = .bss:0x8046145C; // type:label size:0x88 scope:global +ShaperLightsScenery = .bss:0x804614E4; // type:label size:0x88 scope:global +ShaperLightsWorldObjects = .bss:0x8046156C; // type:label size:0x88 scope:global +PoolLightFlareList = .bss:0x804615F4; // type:label size:0x960 scope:global +eViews = .bss:0x80461F5C; // type:label size:0x8F0 scope:global +TexturePackList = .bss:0x8046284C; // type:label size:0x8 scope:global +TextureAnimPackList = .bss:0x80462854; // type:label size:0x8 scope:global +TextureVRAMDataHeaderList = .bss:0x8046285C; // type:label size:0x8 scope:global +TextureLoadedTable = .bss:0x80462864; // type:label size:0x2004 scope:global +bChunkLoaderTexturePackList = .bss:0x80464868; // type:label size:0x10 scope:global +bChunkLoaderVramDataChunks = .bss:0x80464878; // type:label size:0x10 scope:global +bChunkLoaderTextureAnimPack = .bss:0x80464888; // type:label size:0x10 scope:global +StreamingTexturePackLoader = .bss:0x80464898; // type:label size:0x38 scope:global +SunPosition = .bss:0x804648D0; // type:label size:0x10 scope:global +gDefragFixer = .bss:0x804648E0; // type:label size:0x60C scope:global +PalNFS01IntDfScale = .bss:0x80464EEC; // type:label size:0x3C scope:global +g_ParticleStats = .bss:0x80464F28; // type:label size:0x20 scope:local +FlailerCamera = .bss:0x80464F48; // type:label size:0x290 scope:global +Player1Camera = .bss:0x804651D8; // type:label size:0x290 scope:global +Player2Camera = .bss:0x80465468; // type:label size:0x290 scope:global +Player1RVMCamera = .bss:0x804656F8; // type:label size:0x290 scope:global +RenderTargetTextureInfos = .bss:0x80465988; // type:label size:0x83C scope:global +aBaselineFovMip = .bss:0x804661C4; // type:label size:0x2 scope:local +aBaselineFovZ = .bss:0x804661C6; // type:label size:0x2 scope:local +SpecularMap = .bss:0x804661C8; // type:label size:0x4C scope:global +QSizeI8_Z8 = .bss:0x80466214; // type:label size:0x50 scope:global +QSizeScratchPad = .bss:0x80466264; // type:label size:0x50 scope:global +QSizeAccumulationI8 = .bss:0x804662B4; // type:label size:0x50 scope:global +SafezoneHeight_PAL = .bss:0x80466304; // type:label size:0x4 scope:local +g_TextureBucketList = .bss:0x80466308; // type:label size:0x80 scope:global +tP = .bss:0x80466388; // type:label size:0x600 scope:local +tPC = .bss:0x80466988; // type:label size:0x10 scope:local +tN = .bss:0x80466998; // type:label size:0x600 scope:local +MyLightPos = .bss:0x80466FA8; // type:label size:0x30 scope:global +eLamb = .bss:0x80466FD8; // type:label size:0x10 scope:global +eLdir = .bss:0x80466FE8; // type:label size:0x30 scope:global +eLpos = .bss:0x80467018; // type:label size:0x30 scope:global +eLdiff = .bss:0x80467058; // type:label size:0x30 scope:global +hack_man_matrix = .bss:0x80467088; // type:label size:0x40 scope:global +envmap_fakeup = .bss:0x804670C8; // type:label size:0x10 scope:global +TheOnlyEnvMap = .bss:0x804670D8; // type:label size:0xF78 scope:global +SphereMap = .bss:0x80468050; // type:label size:0x140 scope:global +eMathIdentityMatrix = .bss:0x80468190; // type:label size:0x40 scope:global +eMathZeroMatrix = .bss:0x804681D0; // type:label size:0x40 scope:global +e_strip_matrix = .bss:0x80468210; // type:label size:0x40 scope:global +ViewPlatInfoTable = .bss:0x80468250; // type:label size:0x1FF8 scope:global +SpriteManager = .bss:0x8046A248; // type:label size:0x1C scope:global +_13EmitterSystem.mLoader = .bss:0x8046A264; // type:label size:0x10 scope:global +_13EmitterSystem.mLibLoader = .bss:0x8046A274; // type:label size:0x10 scope:global +_13EmitterSystem.mTexPageLoader = .bss:0x8046A284; // type:label size:0x10 scope:global +gEmitterSystem = .bss:0x8046A294; // type:label size:0x3AC scope:global +SunTextures = .bss:0x8046A640; // type:label size:0x14 scope:global +numCopsActiveView = .bss:0x8046A654; // type:label size:0x4 scope:global +numCopsActiveTotal = .bss:0x8046A658; // type:label size:0x4 scope:global +numCopsActiveCherry = .bss:0x8046A65C; // type:label size:0x4 scope:global +FrameMemoryBuffer = .bss:0x8046A660; // type:label size:0x8 scope:global +FrameMemoryBufferAmountUsed = .bss:0x8046A668; // type:label size:0x8 scope:global +OtherEcstacyTextures = .bss:0x8046A670; // type:label size:0x78 scope:global +OtherEcstacyTextures_name_hash = .bss:0x8046A6E8; // type:label size:0x78 scope:global +QueuedLoadingTables = .bss:0x8046A770; // type:label size:0x400 scope:global +ReplacementTextureTableFixups = .bss:0x8046AB70; // type:label size:0x5B0 scope:global +LoadedSolidStats = .bss:0x8046B120; // type:label size:0x14 scope:global +eLightFlareTextureInfos = .bss:0x8046B134; // type:label size:0xC scope:global +PoolOfFlaresXcludeView = .bss:0x8046B140; // type:label size:0xC8 scope:global +intensity = .bss:0x8046B208; // type:label size:0x4 scope:global +TextureInfoCache = .bss:0x8046B20C; // type:label size:0x400 scope:global +TextureInfoCacheSafety = .bss:0x8046B60C; // type:label size:0x400 scope:global +g_ScreenPositionMatrix = .bss:0x8046BA14; // type:label size:0x30 scope:global +Player1SpecularProjection = .bss:0x8046BA44; // type:label size:0x40 scope:global +Player2SpecularProjection = .bss:0x8046BA84; // type:label size:0x40 scope:global +RenderTargets = .bss:0x8046BAC4; // type:label size:0x440 scope:global +_rmode = .bss:0x8046BF04; // type:label size:0x4 scope:global +_rmodeObj = .bss:0x8046BF08; // type:label size:0x3C scope:global +projMOrthographic = .bss:0x8046BF44; // type:label size:0x40 scope:global +viewMOrthographic = .bss:0x8046BF84; // type:label size:0x30 scope:global +projMOrthographicScreenQuad = .bss:0x8046BFB4; // type:label size:0x40 scope:global +viewMOrthographicScreenQuad = .bss:0x8046BFF4; // type:label size:0x30 scope:global +fbSize = .bss:0x8046C024; // type:label size:0x4 scope:local +scis_xOrig = .bss:0x8046C028; // type:label size:0x4 scope:global +scis_yOrig = .bss:0x8046C02C; // type:label size:0x4 scope:global +scis_wd = .bss:0x8046C030; // type:label size:0x4 scope:global +scis_ht = .bss:0x8046C034; // type:label size:0x4 scope:global +g_InitPad = .bss:0x8046C038; // type:label size:0x30 scope:global +g_LastInitPad = .bss:0x8046C068; // type:label size:0x30 scope:global +FontData = .bss:0x8046C098; // type:label size:0x4 scope:local +LastSheet = .bss:0x8046C09C; // type:label size:0x4 scope:local +FontSize = .bss:0x8046C0A0; // type:label size:0x2 scope:local +FontSpace = .bss:0x8046C0A2; // type:label size:0x2 scope:local +HORIZON_FOG_GRID_DISPLAY_LIST = .bss:0x8046C0C0; // type:label size:0x300 scope:global +HORIZON_FOG_GRID_POS_ARRAY = .bss:0x8046C3C0; // type:label size:0x600 scope:global +HORIZON_FOG_GRID_CLR_ARRAY = .bss:0x8046C9C0; // type:label size:0x380 scope:global +HORIZON_FOG_GRID_UVS_ARRAY = .bss:0x8046CD40; // type:label size:0x400 scope:global +DLHorizonFogGrid = .bss:0x8046D140; // type:label size:0x4 scope:global +DLHorizonFogGridSize = .bss:0x8046D144; // type:label size:0x4 scope:global +HorizonCurrentPOS = .bss:0x8046D148; // type:label size:0x1 scope:global +HorizonCurrentCLR = .bss:0x8046D149; // type:label size:0x1 scope:global +HorizonCurrentUVS = .bss:0x8046D14A; // type:label size:0x1 scope:global +ENV_MAP_DISPLAY_LIST = .bss:0x8046D160; // type:label size:0x5000 scope:global +g_FogParams = .bss:0x80472160; // type:label size:0x14 scope:global +pt = .bss:0x80472178; // type:label size:0x8 scope:global +tT = .bss:0x80472180; // type:label size:0x240 scope:local +g_contrast_current_gain = .bss:0x804723C0; // type:label size:0x10 scope:global +pContrastRampTextureInfo = .bss:0x804723D0; // type:label size:0x4 scope:global +pContrastRampPixels = .bss:0x804723D4; // type:label size:0x4 scope:global +pContrastLinearSource = .bss:0x804723D8; // type:label size:0x4 scope:global +eSTRIP = .bss:0x804723DC; // type:label size:0x604 scope:global +k.27406 = .bss:0x804729E0; // type:label size:0x4 scope:local +_.tmp_18.27407 = .bss:0x804729E4; // type:label size:0x4 scope:local +scale.29589 = .bss:0x804729E8; // type:label size:0x4 scope:local +_.tmp_19.29590 = .bss:0x804729EC; // type:label size:0x4 scope:local +k.29612 = .bss:0x804729F0; // type:label size:0x4 scope:local +_.tmp_20.29613 = .bss:0x804729F4; // type:label size:0x4 scope:local +iSystem.35753 = .bss:0x804729F8; // type:label size:0x10 scope:local +_.tmp_24.35754 = .bss:0x80472A08; // type:label size:0x4 scope:local +sMemcardImp.35756 = .bss:0x80472A0C; // type:label size:0xC scope:local +_.tmp_25.35757 = .bss:0x80472A18; // type:label size:0x4 scope:local +kFloatScaleUp = .bss:0x80472A1C; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x80472A20; // type:label size:0x4 scope:local +gNormal = .bss:0x80472A24; // type:label size:0x10 scope:local +gTint = .bss:0x80472A34; // type:label size:0x10 scope:local +gRapsheet = .bss:0x80472A44; // type:label size:0x10 scope:local +MessengerCreationTimer = .bss:0x80472A54; // type:label size:0x4 scope:global +MovieTextureInfo = .bss:0x80472A58; // type:label size:0x7C scope:global +gShapeMemoryAllocator = .bss:0x80472AD4; // type:label size:0x8 scope:global +gMemcardCallbacks = .bss:0x80472ADC; // type:label size:0x8 scope:global +gMemcardSetup = .bss:0x80472AE4; // type:label size:0x34 scope:global +theMarker = .bss:0x80472B18; // type:label size:0x4 scope:global +FEPrintf_Buffer = .bss:0x80472B1C; // type:label size:0x400 scope:local +gSaveType0 = .bss:0x80472F1C; // type:label size:0x40 scope:global +gSaveType1 = .bss:0x80472F5C; // type:label size:0x40 scope:global +gSaveType2 = .bss:0x80472F9C; // type:label size:0x20 scope:global +k.28785 = .bss:0x80472FBC; // type:label size:0x4 scope:local +_.tmp_17.28786 = .bss:0x80472FC0; // type:label size:0x4 scope:local +k.31452 = .bss:0x80472FC4; // type:label size:0x4 scope:local +_.tmp_24.31453 = .bss:0x80472FC8; // type:label size:0x4 scope:local +k.32656 = .bss:0x80472FCC; // type:label size:0x4 scope:local +_.tmp_26.32657 = .bss:0x80472FD0; // type:label size:0x4 scope:local +k.32682 = .bss:0x80472FD4; // type:label size:0x4 scope:local +_.tmp_27.32683 = .bss:0x80472FD8; // type:label size:0x4 scope:local +k.32737 = .bss:0x80472FDC; // type:label size:0x4 scope:local +_.tmp_29.32738 = .bss:0x80472FE0; // type:label size:0x4 scope:local +kFloatScaleUp = .bss:0x80472FE4; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x80472FE8; // type:label size:0x4 scope:local +bChunkLoaderMiniMap = .bss:0x80472FEC; // type:label size:0x10 scope:global +WAM_START_TRIGGER = .bss:0x80472FFC; // type:label size:0x4 scope:local +WAM_STOP_TRIGGER = .bss:0x80473000; // type:label size:0x4 scope:local +WAM_FIRST_FRAME = .bss:0x80473004; // type:label size:0x4 scope:local +WAM_LAST_FRAME = .bss:0x80473008; // type:label size:0x4 scope:local +WAM_SOUND_TRIGGER_START = .bss:0x8047300C; // type:label size:0x4 scope:local +WAM_SOUND_TRIGGER_STOP = .bss:0x80473010; // type:label size:0x4 scope:local +WAM_NIS_GENERIC_CONTROL_MSG = .bss:0x80473014; // type:label size:0x4 scope:local +WAM_FWD_REV_TRACK_CONTROL_MSG = .bss:0x80473018; // type:label size:0x4 scope:local +TheHudResourceManager = .bss:0x8047301C; // type:label size:0xC scope:global +_10FEKeyboard.ButtonHighlight = .bss:0x80473028; // type:label size:0x10 scope:global +_10FEKeyboard.LetterHighlight = .bss:0x80473038; // type:label size:0x10 scope:global +_10FEKeyboard.ButtonIdle = .bss:0x80473048; // type:label size:0x10 scope:global +_10FEKeyboard.LetterIdle = .bss:0x80473058; // type:label size:0x10 scope:global +KBCreationTimer = .bss:0x80473068; // type:label size:0x4 scope:global +_21PostRacePursuitScreen.mPursuitData = .bss:0x8047306C; // type:label size:0xAC scope:global +SecretDialogInfo = .bss:0x80473118; // type:label size:0x248 scope:local +gKeyboardManager = .bss:0x80473360; // type:label size:0x418 scope:global +gFEDatabase = .bss:0x80473778; // type:label size:0x4 scope:global +FEngFonts = .bss:0x8047377C; // type:label size:0x8 scope:global +TheFEMarkerManager = .bss:0x80473784; // type:label size:0x340 scope:global +TheUnlockData = .bss:0x80473AC4; // type:label size:0x1C8 scope:global +gMaxPartLevels = .bss:0x80473C8C; // type:label size:0x39 scope:global +kFloatScaleUp = .bss:0x80473CC8; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x80473CCC; // type:label size:0x4 scope:local +DirectionVectors = .bss:0x80473CD0; // type:label size:0x40 scope:local +PassOffsets = .bss:0x80473D10; // type:label size:0x28 scope:local +_9FEKeyNode.NodePool = .bss:0x80473D38; // type:label size:0x10 scope:global +_17FEMessageResponse.NodePool = .bss:0x80473D48; // type:label size:0x10 scope:global +ObjDataPool = .bss:0x80473D58; // type:label size:0x10 scope:local +MaximumObjData = .bss:0x80473D68; // type:label size:0x94 scope:local +_8FEScript.NodePool = .bss:0x80473DFC; // type:label size:0x10 scope:global +eFrameCounterOLD = .bss:0x80473E0C; // type:label size:0x4 scope:global +objCount = .bss:0x80473E10; // type:label size:0x4 scope:global +kFloatScaleUp = .bss:0x80473E14; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x80473E18; // type:label size:0x4 scope:local +_6UCrc32.kNull = .bss:0x80473E1C; // type:label size:0x4 scope:global +_5UMath.Infinity = .bss:0x80473E20; // type:label size:0x4 scope:global +_10UTransform.fgIdentityTransform = .bss:0x80473E24; // type:label size:0x40 scope:global +_7USphere.fgNullSphere = .bss:0x80473E64; // type:label size:0x10 scope:global +_4CARP.gDataResolverMap = .bss:0x80473E74; // type:label size:0x10 scope:local +gFunctions = .bss:0x80473E84; // type:label size:0x50 scope:local +_19StringStoreBlockPtr.sStringStoreBlockPtrCache = .bss:0x80473ED4; // type:label size:0x10 scope:global +_14StringRegistry.fgThis = .bss:0x80473EE4; // type:label size:0x14 scope:global +kFloatScaleUp = .bss:0x80473EF8; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x80473EFC; // type:label size:0x4 scope:local +k.13265 = .bss:0x80473F00; // type:label size:0x4 scope:local +_.tmp_1.13266 = .bss:0x80473F04; // type:label size:0x4 scope:local +k.13306 = .bss:0x80473F08; // type:label size:0x4 scope:local +_.tmp_2.13307 = .bss:0x80473F0C; // type:label size:0x4 scope:local +k.13344 = .bss:0x80473F10; // type:label size:0x4 scope:local +_.tmp_3.13345 = .bss:0x80473F14; // type:label size:0x4 scope:local +k.26869 = .bss:0x80473F18; // type:label size:0x4 scope:local +_.tmp_19.26870 = .bss:0x80473F1C; // type:label size:0x4 scope:local +k.26895 = .bss:0x80473F20; // type:label size:0x4 scope:local +_.tmp_20.26896 = .bss:0x80473F24; // type:label size:0x4 scope:local +k.27521 = .bss:0x80473F28; // type:label size:0x4 scope:local +_.tmp_21.27522 = .bss:0x80473F2C; // type:label size:0x4 scope:local +k.27565 = .bss:0x80473F30; // type:label size:0x4 scope:local +_.tmp_22.27566 = .bss:0x80473F34; // type:label size:0x4 scope:local +k.27597 = .bss:0x80473F38; // type:label size:0x4 scope:local +_.tmp_23.27598 = .bss:0x80473F3C; // type:label size:0x4 scope:local +k.27623 = .bss:0x80473F40; // type:label size:0x4 scope:local +_.tmp_24.27624 = .bss:0x80473F44; // type:label size:0x4 scope:local +quarterMileInMeters.31487 = .bss:0x80473F48; // type:label size:0x4 scope:local +_.tmp_25.31488 = .bss:0x80473F4C; // type:label size:0x4 scope:local +sixtyMphInMetersPerSec.31489 = .bss:0x80473F50; // type:label size:0x4 scope:local +_.tmp_26.31490 = .bss:0x80473F54; // type:label size:0x4 scope:local +lower.32099 = .bss:0x80473F58; // type:label size:0x4 scope:local +_.tmp_28.32100 = .bss:0x80473F5C; // type:label size:0x4 scope:local +upper.32104 = .bss:0x80473F60; // type:label size:0x4 scope:local +_.tmp_29.32105 = .bss:0x80473F64; // type:label size:0x4 scope:local +k.34061 = .bss:0x80473F68; // type:label size:0x4 scope:local +_.tmp_31.34062 = .bss:0x80473F6C; // type:label size:0x4 scope:local +k.34099 = .bss:0x80473F70; // type:label size:0x4 scope:local +_.tmp_32.34100 = .bss:0x80473F74; // type:label size:0x4 scope:local +k.35687 = .bss:0x80473F78; // type:label size:0x4 scope:local +_.tmp_34.35688 = .bss:0x80473F7C; // type:label size:0x4 scope:local +k.36003 = .bss:0x80473F80; // type:label size:0x4 scope:local +_.tmp_36.36004 = .bss:0x80473F84; // type:label size:0x4 scope:local +kFloatScaleUp = .bss:0x80473F88; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x80473F8C; // type:label size:0x4 scope:local +Tweak_GlueSpreadTable_Low = .bss:0x80473F90; // type:label size:0x14 scope:global +Tweak_GlueSpreadTable_High = .bss:0x80473FA4; // type:label size:0x14 scope:global +Tweak_GlueStrengthTable_Low = .bss:0x80473FB8; // type:label size:0x14 scope:global +Tweak_GlueStrengthTable_High = .bss:0x80473FCC; // type:label size:0x14 scope:global +k.29730 = .bss:0x80473FE0; // type:label size:0x4 scope:local +_.tmp_15.29731 = .bss:0x80473FE4; // type:label size:0x4 scope:local +k.29762 = .bss:0x80473FE8; // type:label size:0x4 scope:local +_.tmp_16.29763 = .bss:0x80473FEC; // type:label size:0x4 scope:local +k.29806 = .bss:0x80473FF0; // type:label size:0x4 scope:local +_.tmp_17.29807 = .bss:0x80473FF4; // type:label size:0x4 scope:local +k.29850 = .bss:0x80473FF8; // type:label size:0x4 scope:local +_.tmp_18.29851 = .bss:0x80473FFC; // type:label size:0x4 scope:local +k.30181 = .bss:0x80474000; // type:label size:0x4 scope:local +_.tmp_26.30182 = .bss:0x80474004; // type:label size:0x4 scope:local +k.30213 = .bss:0x80474008; // type:label size:0x4 scope:local +_.tmp_27.30214 = .bss:0x8047400C; // type:label size:0x4 scope:local +kFloatScaleUp = .bss:0x80474010; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x80474014; // type:label size:0x4 scope:local +gGPSDestination = .bss:0x80474018; // type:label size:0xC scope:local +hash.12646 = .bss:0x80474024; // type:label size:0x4 scope:local +_.tmp_5.12647 = .bss:0x80474028; // type:label size:0x4 scope:local +hash.12654 = .bss:0x8047402C; // type:label size:0x4 scope:local +_.tmp_6.12655 = .bss:0x80474030; // type:label size:0x4 scope:local +value.29117 = .bss:0x80474034; // type:label size:0x4 scope:local +_.tmp_23.29118 = .bss:0x80474038; // type:label size:0x4 scope:local +k.30964 = .bss:0x8047403C; // type:label size:0x4 scope:local +_.tmp_32.30965 = .bss:0x80474040; // type:label size:0x4 scope:local +k.30996 = .bss:0x80474044; // type:label size:0x4 scope:local +_.tmp_33.30997 = .bss:0x80474048; // type:label size:0x4 scope:local +value.39127 = .bss:0x8047404C; // type:label size:0x4 scope:local +_.tmp_37.39128 = .bss:0x80474050; // type:label size:0x4 scope:local +k.39647 = .bss:0x80474054; // type:label size:0x4 scope:local +_.tmp_39.39648 = .bss:0x80474058; // type:label size:0x4 scope:local +k.40339 = .bss:0x8047405C; // type:label size:0x4 scope:local +_.tmp_41.40340 = .bss:0x80474060; // type:label size:0x4 scope:local +k.41431 = .bss:0x80474064; // type:label size:0x4 scope:local +_.tmp_50.41432 = .bss:0x80474068; // type:label size:0x4 scope:local +k.41663 = .bss:0x8047406C; // type:label size:0x4 scope:local +_.tmp_58.41664 = .bss:0x80474070; // type:label size:0x4 scope:local +k.41689 = .bss:0x80474074; // type:label size:0x4 scope:local +_.tmp_59.41690 = .bss:0x80474078; // type:label size:0x4 scope:local +k.41913 = .bss:0x8047407C; // type:label size:0x4 scope:local +_.tmp_66.41914 = .bss:0x80474080; // type:label size:0x4 scope:local +k.42193 = .bss:0x80474084; // type:label size:0x4 scope:local +_.tmp_74.42194 = .bss:0x80474088; // type:label size:0x4 scope:local +k.42231 = .bss:0x8047408C; // type:label size:0x4 scope:local +_.tmp_75.42232 = .bss:0x80474090; // type:label size:0x4 scope:local +k.42403 = .bss:0x80474094; // type:label size:0x4 scope:local +_.tmp_80.42404 = .bss:0x80474098; // type:label size:0x4 scope:local +k.42461 = .bss:0x8047409C; // type:label size:0x4 scope:local +_.tmp_82.42462 = .bss:0x804740A0; // type:label size:0x4 scope:local +k.42493 = .bss:0x804740A4; // type:label size:0x4 scope:local +_.tmp_83.42494 = .bss:0x804740A8; // type:label size:0x4 scope:local +k.42615 = .bss:0x804740AC; // type:label size:0x4 scope:local +_.tmp_87.42616 = .bss:0x804740B0; // type:label size:0x4 scope:local +k.42671 = .bss:0x804740B4; // type:label size:0x4 scope:local +_.tmp_88.42672 = .bss:0x804740B8; // type:label size:0x4 scope:local +gDefaultDataArea.43405 = .bss:0x804740BC; // type:label size:0x800 scope:local +instance.54980 = .bss:0x804748BC; // type:label size:0x50 scope:local +_.tmp_95.54981 = .bss:0x8047490C; // type:label size:0x4 scope:local +kFloatScaleUp = .bss:0x80474910; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x80474914; // type:label size:0x4 scope:local +WAM_START_TRIGGER = .bss:0x80474918; // type:label size:0x4 scope:local +WAM_STOP_TRIGGER = .bss:0x8047491C; // type:label size:0x4 scope:local +WAM_FIRST_FRAME = .bss:0x80474920; // type:label size:0x4 scope:local +WAM_LAST_FRAME = .bss:0x80474924; // type:label size:0x4 scope:local +WAM_SOUND_TRIGGER_START = .bss:0x80474928; // type:label size:0x4 scope:local +WAM_SOUND_TRIGGER_STOP = .bss:0x8047492C; // type:label size:0x4 scope:local +WAM_NIS_GENERIC_CONTROL_MSG = .bss:0x80474930; // type:label size:0x4 scope:local +WAM_FWD_REV_TRACK_CONTROL_MSG = .bss:0x80474934; // type:label size:0x4 scope:local +_6Attrib.AICollisionReactionRecord_singleton = .bss:0x80474938; // type:label size:0x4 scope:local +_6Attrib.Attrib_RefSpec_singleton = .bss:0x8047493C; // type:label size:0x4 scope:local +_6Attrib.CollisionStream_singleton = .bss:0x80474940; // type:label size:0x4 scope:local +_6Attrib.EffectLinkageRecord_singleton = .bss:0x80474944; // type:label size:0x4 scope:local +_6Attrib.TireEffectRecord_singleton = .bss:0x80474948; // type:label size:0x4 scope:local +_6Attrib.TrafficPatternRecord_singleton = .bss:0x8047494C; // type:label size:0x4 scope:local +_6Attrib.UpgradeSpecs_singleton = .bss:0x80474950; // type:label size:0x4 scope:local +GameActionConverter = .bss:0x80474954; // type:label size:0x10 scope:global +_11ActionQueue.mLastAnyActionTime = .bss:0x80474964; // type:label size:0x4 scope:global +_Q33UTL11Collectionst8Listable2Z11ActionQueuei20._mTable = .bss:0x80474968; // type:label size:0x60 scope:global +_Q33UTL11Collectionst12Instanceable3ZPQ214EventSequencer9HENGINE__ZQ214EventSequencer7IEnginei434._mList = .bss:0x804749C8; // type:label size:0xDA0 scope:global +_14EventSequencer.gCreateStimulus = .bss:0x80475768; // type:label size:0x4 scope:local +_14EventSequencer.gTriggerStimulus = .bss:0x8047576C; // type:label size:0x4 scope:local +_14EventSequencer.gStartAction = .bss:0x80475770; // type:label size:0x4 scope:local +_14EventSequencer.gEndAction = .bss:0x80475774; // type:label size:0x4 scope:local +_14EventSequencer.gStopAction = .bss:0x80475778; // type:label size:0x4 scope:local +_14EventSequencer.gPauseAction = .bss:0x8047577C; // type:label size:0x4 scope:local +_14EventSequencer.gResumeAction = .bss:0x80475780; // type:label size:0x4 scope:local +_14EventSequencer.gUnloadAction = .bss:0x80475784; // type:label size:0x4 scope:local +_14EventSequencer.gStimulusParameter = .bss:0x80475788; // type:label size:0x4 scope:local +_14EventSequencer.gStimulusResult = .bss:0x8047578C; // type:label size:0x4 scope:local +_14EventSequencer.gEngineData = .bss:0x80475790; // type:label size:0x10 scope:local +bChunkLoaderEventSequence = .bss:0x804757A0; // type:label size:0x10 scope:global +bChunkLoaderEventSequenceTemp = .bss:0x804757B0; // type:label size:0x10 scope:global +kCurrentWeapon = .bss:0x804757C0; // type:label size:0x4 scope:local +kCurrentGadget = .bss:0x804757C4; // type:label size:0x4 scope:local +_13VirtualMemory.fgInstance = .bss:0x804757C8; // type:label size:0x901C scope:global +_GameDevice = .bss:0x8047E7E4; // type:label size:0xC scope:global +gEventDynamicData = .bss:0x8047E7F0; // type:label size:0x64 scope:global +input_devices = .bss:0x8047E854; // type:label size:0x10 scope:local +input_connected = .bss:0x8047E864; // type:label size:0x10 scope:local +effect_states = .bss:0x8047E874; // type:label size:0x50 scope:local +_14EventSequencer.gActiveSystemList = .bss:0x8047E8C4; // type:label size:0x1000 scope:local +sprint_buffer.32547 = .bss:0x8047F8C4; // type:label size:0x50 scope:local +kFloatScaleUp = .bss:0x8047F914; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x8047F918; // type:label size:0x4 scope:local +OverhauserBasisMatricies = .bss:0x8047F91C; // type:label size:0xC0 scope:global +LoadedSplineList = .bss:0x8047F9DC; // type:label size:0x8 scope:global +gFastMem = .bss:0x8047F9E4; // type:label size:0x32C scope:global +ResourceFileList = .bss:0x8047FD10; // type:label size:0x8 scope:global +queued_vm_files = .bss:0x8047FD18; // type:label size:0x17C scope:global +gVaults = .bss:0x8047FE94; // type:label size:0x10 scope:local +gFiles = .bss:0x8047FEA4; // type:label size:0x10 scope:local +gFileCollector = .bss:0x8047FEB4; // type:label size:0x4 scope:local +gVaultCollector = .bss:0x8047FEB8; // type:label size:0x4 scope:local +sDefaultAttribAlloc = .bss:0x8047FEBC; // type:label size:0x4 scope:local +TheRegionLoader = .bss:0x8047FEC0; // type:label size:0x20 scope:global +TheTrackLoader = .bss:0x8047FEE0; // type:label size:0x4 scope:global +TheGameFlowManager = .bss:0x8047FEE4; // type:label size:0x24 scope:global +last_any_joy = .bss:0x8047FF08; // type:label size:0x4 scope:local +vShakeTest = .bss:0x8047FF0C; // type:label size:0x10 scope:global +vShakeRotation = .bss:0x8047FF1C; // type:label size:0x10 scope:local +vShakeAccelBias = .bss:0x8047FF2C; // type:label size:0x10 scope:local +SmallRumbleEnvelope = .bss:0x8047FF3C; // type:label size:0x8 scope:global +BigRumbleEnvelope = .bss:0x8047FF44; // type:label size:0x8 scope:global +ShockSwayRumbleEnvelope = .bss:0x8047FF4C; // type:label size:0x8 scope:global +RoadNoiseRumbleEnvelope0 = .bss:0x8047FF54; // type:label size:0x8 scope:global +RoadNoiseRumbleEnvelope1 = .bss:0x8047FF5C; // type:label size:0x8 scope:global +BinaryRumbleEnvelope = .bss:0x8047FF64; // type:label size:0x8 scope:global +SingleRoadBumpRumbleEnvelope = .bss:0x8047FF6C; // type:label size:0x8 scope:global +DoubleRoadBumpRumbleEnvelope = .bss:0x8047FF74; // type:label size:0x8 scope:global +ShakeAmplitudeEnvelope = .bss:0x8047FF7C; // type:label size:0x8 scope:global +GearGrindEnvelope = .bss:0x8047FF84; // type:label size:0x8 scope:global +EngineHeatEnvelope = .bss:0x8047FF8C; // type:label size:0x8 scope:global +EngineRevEnvelope = .bss:0x8047FF94; // type:label size:0x8 scope:global +NOSEnvelope = .bss:0x8047FF9C; // type:label size:0x8 scope:global +DriftEnvelope = .bss:0x8047FFA4; // type:label size:0x8 scope:global +BurnoutEnvelope = .bss:0x8047FFAC; // type:label size:0x8 scope:global +CameraShakers = .bss:0x8047FFB4; // type:label size:0x40 scope:global +WaitingQueuedFileList = .bss:0x8047FFF4; // type:label size:0x8 scope:global +ReadingQueuedFileList = .bss:0x8047FFFC; // type:label size:0x8 scope:global +MemoryFileList = .bss:0x80480004; // type:label size:0x8 scope:global +_20CachedRealFileHandle.HandleList = .bss:0x8048000C; // type:label size:0x8 scope:global +bFileList = .bss:0x80480014; // type:label size:0x8 scope:global +_5bFile.PendingCallbackList = .bss:0x8048001C; // type:label size:0x8 scope:global +_5bFile.CompletedCallbackList = .bss:0x80480024; // type:label size:0x8 scope:global +sCutiePetootie = .bss:0x8048002C; // type:label size:0x3C scope:global +tRenderEggTimer = .bss:0x80480068; // type:label size:0x4 scope:global +gEasterEggs = .bss:0x8048006C; // type:label size:0x48 scope:global +RealTimer = .bss:0x804800B4; // type:label size:0x4 scope:global +RealTimeElapsed = .bss:0x804800B8; // type:label size:0x4 scope:global +LimitMinimumVideoTimeElapsed = .bss:0x804800BC; // type:label size:0x4 scope:global +WorldTimer = .bss:0x804800C0; // type:label size:0x4 scope:global +frames_elapsed = .bss:0x804800C8; // type:label size:0x4 scope:global +loop_ticker = .bss:0x804800CC; // type:label size:0x4 scope:global +DelayedResourceCallbacks = .bss:0x804800D0; // type:label size:0x40 scope:global +JoylogThrottleCounter = .bss:0x80480110; // type:label size:0x8 scope:global +JoylogThrottleTicks = .bss:0x80480118; // type:label size:0x8 scope:global +LastQueuedFilename = .bss:0x80480120; // type:label size:0x64 scope:global +bFileMutex = .bss:0x80480184; // type:label size:0x1C scope:global +kFloatScaleUp = .bss:0x804801A4; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x804801A8; // type:label size:0x4 scope:local +kFloatScaleUp = .bss:0x804801AC; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x804801B0; // type:label size:0x4 scope:local +value.13005 = .bss:0x804801D8; // type:label size:0x4 scope:local +_.tmp_4.13006 = .bss:0x804801DC; // type:label size:0x4 scope:local +value.13016 = .bss:0x804801E0; // type:label size:0x4 scope:local +_.tmp_5.13017 = .bss:0x804801E4; // type:label size:0x4 scope:local +value.13027 = .bss:0x804801E8; // type:label size:0x4 scope:local +_.tmp_6.13028 = .bss:0x804801EC; // type:label size:0x4 scope:local +value.13038 = .bss:0x804801F0; // type:label size:0x4 scope:local +_.tmp_7.13039 = .bss:0x804801F4; // type:label size:0x4 scope:local +value.13049 = .bss:0x804801F8; // type:label size:0x4 scope:local +_.tmp_8.13050 = .bss:0x804801FC; // type:label size:0x4 scope:local +value.13060 = .bss:0x80480200; // type:label size:0x4 scope:local +_.tmp_9.13061 = .bss:0x80480204; // type:label size:0x4 scope:local +hash.23295 = .bss:0x80480208; // type:label size:0x4 scope:local +_.tmp_10.23296 = .bss:0x8048020C; // type:label size:0x4 scope:local +hash.23303 = .bss:0x80480210; // type:label size:0x4 scope:local +_.tmp_11.23304 = .bss:0x80480214; // type:label size:0x4 scope:local +temp_record.28290 = .bss:0x80480278; // type:label size:0x198 scope:local +_.tmp_24.28291 = .bss:0x80480410; // type:label size:0x4 scope:local +tunings.28622 = .bss:0x80480414; // type:label size:0x1C scope:local +_.tmp_25.28623 = .bss:0x80480430; // type:label size:0x4 scope:local +fix.31644 = .bss:0x80480434; // type:label size:0x40 scope:local +hash.31919 = .bss:0x804804E4; // type:label size:0x4 scope:local +_.tmp_40.31920 = .bss:0x804804E8; // type:label size:0x4 scope:local +hash.31927 = .bss:0x804804EC; // type:label size:0x4 scope:local +_.tmp_41.31928 = .bss:0x804804F0; // type:label size:0x4 scope:local +kFloatScaleUp = .bss:0x80480504; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x80480508; // type:label size:0x4 scope:local +_Q33UTL11Collectionst8Listable2Z10IExplosioni96._mTable = .bss:0x8048050C; // type:label size:0x190 scope:global +_Q33UTL11Collectionst8Listable2Z11IDisposablei160._mTable = .bss:0x8048069C; // type:label size:0x290 scope:global +_Q33UTL11Collectionst11ListableSet4Z8IVehiclei10Z12eVehicleListUi10._mLists = .bss:0x8048092C; // type:label size:0x230 scope:global +_Q33UTL11Collectionst8Listable2Z10IRigidBodyi160._mTable = .bss:0x80480B5C; // type:label size:0x290 scope:global +_Q33UTL11Collectionst8Listable2Z14ICollisionBodyi160._mTable = .bss:0x80480DEC; // type:label size:0x290 scope:global +_Q33UTL11Collectionst8Listable2Z11ISimpleBodyi96._mTable = .bss:0x8048107C; // type:label size:0x190 scope:global +_Q33UTL11Collectionst11ListableSet4ZQ23Sim7IEntityi8Z11eEntityListUi4._mLists = .bss:0x8048120C; // type:label size:0xC0 scope:global +_Q33UTL11Collectionst11ListableSet4Z7IPlayeri8Z11ePlayerListUi3._mLists = .bss:0x804812CC; // type:label size:0x90 scope:global +_Q33UTL11Collectionst8Listable2Z17IRecordablePlayeri8._mTable = .bss:0x8048135C; // type:label size:0x30 scope:global +_Q33UTL11Collectionst8Listable2Z12IInputPlayeri8._mTable = .bss:0x8048138C; // type:label size:0x30 scope:global +_Q33UTL11Collectionst8Listable2Z6IModeli434._mTable = .bss:0x804813BC; // type:label size:0x6D8 scope:global +_Q33UTL11Collectionst8Listable2Z8IPursuiti8._mTable = .bss:0x80481A94; // type:label size:0x30 scope:global +_Q33UTL11Collectionst8Listable2Z10IRoadBlocki8._mTable = .bss:0x80481AC4; // type:label size:0x30 scope:global +_Q33UTL11Collectionst8Listable2Z4IHudi2._mTable = .bss:0x80481AF4; // type:label size:0x18 scope:global +_Q33UTL11Collectionst8Listable2Z13IVehicleCachei18._mTable = .bss:0x80481B0C; // type:label size:0x58 scope:global +_Q33UTL11Collectionst8Listable2Z14ITrafficCenteri8._mTable = .bss:0x80481B64; // type:label size:0x30 scope:global +_Q33UTL11Collectionst8Listable2Z10ISpikeablei10._mTable = .bss:0x80481B94; // type:label size:0x38 scope:global +_Q33UTL11Collectionst12Instanceable3ZP10HSIMABLE__Z8ISimablei160._mList = .bss:0x80481BCC; // type:label size:0x510 scope:global +_Q33UTL11Collectionst12Instanceable3ZP11HACTIVITY__ZQ23Sim9IActivityi40._mList = .bss:0x804820DC; // type:label size:0x150 scope:global +_Q33UTL11Collectionst12Instanceable3ZP8HMODEL__Z6IModeli434._mList = .bss:0x8048222C; // type:label size:0xDA0 scope:global +_Q33UTL11Collectionst12Instanceable3ZP8HCAUSE__Z6ICausei10._mList = .bss:0x80482FCC; // type:label size:0x60 scope:global +_Explosion = .bss:0x8048302C; // type:label size:0xC scope:global +_12VehicleClass.CAR = .bss:0x80483038; // type:label size:0x4 scope:global +_12VehicleClass.SUBMARINE = .bss:0x8048303C; // type:label size:0x4 scope:global +_12VehicleClass.CHOPPER = .bss:0x80483040; // type:label size:0x4 scope:global +_12VehicleClass.BIKE = .bss:0x80483044; // type:label size:0x4 scope:global +_12VehicleClass.BOAT = .bss:0x80483048; // type:label size:0x4 scope:global +_12VehicleClass.SNOWMOBILE = .bss:0x8048304C; // type:label size:0x4 scope:global +_12VehicleClass.HOVER = .bss:0x80483050; // type:label size:0x4 scope:global +_12VehicleClass.PLANE = .bss:0x80483054; // type:label size:0x4 scope:global +_12VehicleClass.TANK = .bss:0x80483058; // type:label size:0x4 scope:global +_12VehicleClass.TRAILER = .bss:0x8048305C; // type:label size:0x4 scope:global +_12VehicleClass.TRAIN = .bss:0x80483060; // type:label size:0x4 scope:global +_12VehicleClass.TRANSPORT = .bss:0x80483064; // type:label size:0x4 scope:global +_12VehicleClass.RC = .bss:0x80483068; // type:label size:0x4 scope:global +_12VehicleClass.TRACTOR = .bss:0x8048306C; // type:label size:0x4 scope:global +_PVehicle = .bss:0x80483070; // type:label size:0xC scope:global +_8PVehicle.mInstances = .bss:0x8048307C; // type:label size:0x8 scope:global +ai_behaviors = .bss:0x80483084; // type:label size:0x6C scope:local +_Q33UTL11Collectionst11GarbageNode2Z13PhysicsObjecti160._mCollector = .bss:0x804830F0; // type:label size:0xA24 scope:global +_9Smackable.CYLINDER = .bss:0x80483B18; // type:label size:0x10 scope:global +_9Smackable.TUBE = .bss:0x80483B28; // type:label size:0x10 scope:global +_9Smackable.CONE = .bss:0x80483B38; // type:label size:0x10 scope:global +_9Smackable.SPHERE = .bss:0x80483B48; // type:label size:0x10 scope:global +_Q33UTL11Collectionst8Listable2Z9Smackablei160._mTable = .bss:0x80483B58; // type:label size:0x290 scope:global +_Smackable = .bss:0x80483DE8; // type:label size:0xC scope:global +__RBSmackable = .bss:0x80483DF4; // type:label size:0xC scope:global +_Physics_System_VehicleSystem = .bss:0x80483E00; // type:label size:0x14 scope:global +BEHAVIOR_MECHANIC_AI = .bss:0x80483E18; // type:label size:0x10 scope:global +BEHAVIOR_MECHANIC_RIGIDBODY = .bss:0x80483E28; // type:label size:0x10 scope:global +BEHAVIOR_MECHANIC_INPUT = .bss:0x80483E38; // type:label size:0x10 scope:global +BEHAVIOR_MECHANIC_SUSPENSION = .bss:0x80483E48; // type:label size:0x10 scope:global +BEHAVIOR_MECHANIC_ENGINE = .bss:0x80483E58; // type:label size:0x10 scope:global +BEHAVIOR_MECHANIC_DAMAGE = .bss:0x80483E68; // type:label size:0x10 scope:global +BEHAVIOR_MECHANIC_DRAW = .bss:0x80483E78; // type:label size:0x10 scope:global +BEHAVIOR_MECHANIC_AUDIO = .bss:0x80483E88; // type:label size:0x10 scope:global +BEHAVIOR_MECHANIC_EFFECTS = .bss:0x80483E98; // type:label size:0x10 scope:global +BEHAVIOR_MECHANIC_RESET = .bss:0x80483EA8; // type:label size:0x10 scope:global +TheCollections = .bss:0x80483EB8; // type:label size:0x8 scope:local +TheSmokeableSections = .bss:0x80483EC0; // type:label size:0xF10 scope:global +_Physics_System_SceneryModel = .bss:0x80484DD0; // type:label size:0x14 scope:global +_20SmokeableSpawnerPack.mLoader = .bss:0x80484DE4; // type:label size:0x10 scope:global +PerformanceWeights = .bss:0x80484DF4; // type:label size:0x54 scope:local +top_stats = .bss:0x80484E48; // type:label size:0xC scope:local +bottom_stats = .bss:0x80484E54; // type:label size:0xC scope:local +TheStockCars = .bss:0x80484E60; // type:label size:0x8 scope:local +hash.18890 = .bss:0x80484EB8; // type:label size:0x4 scope:local +_.tmp_10.18891 = .bss:0x80484EBC; // type:label size:0x4 scope:local +hash.18898 = .bss:0x80484EC0; // type:label size:0x4 scope:local +_.tmp_11.18899 = .bss:0x80484EC4; // type:label size:0x4 scope:local +hash.19006 = .bss:0x80484ED8; // type:label size:0x4 scope:local +_.tmp_14.19007 = .bss:0x80484EDC; // type:label size:0x4 scope:local +hash.19014 = .bss:0x80484EE0; // type:label size:0x4 scope:local +_.tmp_15.19015 = .bss:0x80484EE4; // type:label size:0x4 scope:local +hash.19056 = .bss:0x80484EF8; // type:label size:0x4 scope:local +_.tmp_18.19057 = .bss:0x80484EFC; // type:label size:0x4 scope:local +hash.19064 = .bss:0x80484F00; // type:label size:0x4 scope:local +_.tmp_19.19065 = .bss:0x80484F04; // type:label size:0x4 scope:local +null_record.23326 = .bss:0x80484F58; // type:label size:0x8 scope:local +hash.37036 = .bss:0x80484FE0; // type:label size:0x4 scope:local +_.tmp_46.37037 = .bss:0x80484FE4; // type:label size:0x4 scope:local +hash.37044 = .bss:0x80484FE8; // type:label size:0x4 scope:local +_.tmp_47.37045 = .bss:0x80484FEC; // type:label size:0x4 scope:local +hash.37152 = .bss:0x80485000; // type:label size:0x4 scope:local +_.tmp_50.37153 = .bss:0x80485004; // type:label size:0x4 scope:local +hash.37160 = .bss:0x80485008; // type:label size:0x4 scope:local +_.tmp_51.37161 = .bss:0x8048500C; // type:label size:0x4 scope:local +kFloatScaleUp = .bss:0x80485020; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x80485024; // type:label size:0x4 scope:local +_t18AttributeStructPtr1ZQ36Attrib3Gen8pvehicle.mAttributeClass = .bss:0x80485028; // type:label size:0x4 scope:global +_t18AttributeStructPtr1ZQ36Attrib3Gen12chopperspecs.mAttributeClass = .bss:0x8048502C; // type:label size:0x4 scope:global +_t18AttributeStructPtr1ZQ36Attrib3Gen11damagespecs.mAttributeClass = .bss:0x80485030; // type:label size:0x4 scope:global +_t18AttributeStructPtr1ZQ36Attrib3Gen5tires.mAttributeClass = .bss:0x80485034; // type:label size:0x4 scope:global +_t18AttributeStructPtr1ZQ36Attrib3Gen7chassis.mAttributeClass = .bss:0x80485038; // type:label size:0x4 scope:global +_t18AttributeStructPtr1ZQ36Attrib3Gen6brakes.mAttributeClass = .bss:0x8048503C; // type:label size:0x4 scope:global +_t18AttributeStructPtr1ZQ36Attrib3Gen6engine.mAttributeClass = .bss:0x80485040; // type:label size:0x4 scope:global +_t18AttributeStructPtr1ZQ36Attrib3Gen12transmission.mAttributeClass = .bss:0x80485044; // type:label size:0x4 scope:global +_t18AttributeStructPtr1ZQ36Attrib3Gen9induction.mAttributeClass = .bss:0x80485048; // type:label size:0x4 scope:global +_t18AttributeStructPtr1ZQ36Attrib3Gen3nos.mAttributeClass = .bss:0x8048504C; // type:label size:0x4 scope:global +_Physics_System_RigidBody = .bss:0x80485050; // type:label size:0x14 scope:global +_t10ScratchPtr1ZQ29RigidBody8Volatile.mRAMBuffer = .bss:0x80485064; // type:label size:0x2C00 scope:global +_t18AttributeStructPtr1ZQ36Attrib3Gen14rigidbodyspecs.mAttributeClass = .bss:0x80487C64; // type:label size:0x4 scope:global +TheRigidBodies = .bss:0x80487C68; // type:label size:0x8 scope:global +__RigidBody = .bss:0x80487C70; // type:label size:0xC scope:global +__SimpleRigidBody = .bss:0x80487C7C; // type:label size:0xC scope:global +_t10ScratchPtr1ZQ215SimpleRigidBody8Volatile.mRAMBuffer = .bss:0x80487C88; // type:label size:0x1800 scope:global +TheSimpleBodies = .bss:0x80489488; // type:label size:0x8 scope:global +_15SimpleRigidBody.mCollisionMap = .bss:0x80489490; // type:label size:0x900 scope:global +__RBVehicle = .bss:0x80489D90; // type:label size:0xC scope:global +__RBTractor = .bss:0x80489D9C; // type:label size:0xC scope:global +__RBTrailer = .bss:0x80489DA8; // type:label size:0xC scope:global +__RBCop = .bss:0x80489DB4; // type:label size:0xC scope:global +__EffectsVehicle = .bss:0x80489DC0; // type:label size:0xC scope:global +__EffectsCar = .bss:0x80489DCC; // type:label size:0xC scope:global +__EffectsPlayer = .bss:0x80489DD8; // type:label size:0xC scope:global +__EffectsSmackable = .bss:0x80489DE4; // type:label size:0xC scope:global +__EffectsFragment = .bss:0x80489DF0; // type:label size:0xC scope:global +__DamageVehicle = .bss:0x80489DFC; // type:label size:0xC scope:global +__DamageRacer = .bss:0x80489E08; // type:label size:0xC scope:global +__DamageDragster = .bss:0x80489E14; // type:label size:0xC scope:global +__DamageHeli = .bss:0x80489E20; // type:label size:0xC scope:global +__DamageCopCar = .bss:0x80489E2C; // type:label size:0xC scope:global +__PInput = .bss:0x80489E38; // type:label size:0xC scope:global +__InputPlayer = .bss:0x80489E44; // type:label size:0xC scope:global +__InputPlayerDrag = .bss:0x80489E50; // type:label size:0xC scope:global +__InputNIS = .bss:0x80489E5C; // type:label size:0xC scope:global +TractionRangeTable = .bss:0x80489E68; // type:label size:0x14 scope:global +GripRangeTable = .bss:0x80489E7C; // type:label size:0x14 scope:global +JumpStabilizationGraph = .bss:0x80489E90; // type:label size:0x18 scope:global +JumpStabilization = .bss:0x80489EA8; // type:label size:0x8 scope:global +ZeroDegree = .bss:0x80489EB0; // type:label size:0x14 scope:global +TwoDegree = .bss:0x80489EC4; // type:label size:0x14 scope:global +FourDegree = .bss:0x80489ED8; // type:label size:0x14 scope:global +SixDegree = .bss:0x80489EEC; // type:label size:0x14 scope:global +EightDegree = .bss:0x80489F00; // type:label size:0x14 scope:global +TenDegree = .bss:0x80489F14; // type:label size:0x14 scope:global +TwelveDegree = .bss:0x80489F28; // type:label size:0x14 scope:global +kOneMPH = .bss:0x80489F3C; // type:label size:0x4 scope:local +__SuspensionRacer = .bss:0x80489F40; // type:label size:0xC scope:global +PostCollisionSteerReductionData = .bss:0x80489F4C; // type:label size:0x20 scope:global +PostCollisionSteerReductionTable = .bss:0x80489F6C; // type:label size:0x8 scope:global +CounterSteerOn = .bss:0x80489F74; // type:label size:0x4 scope:global +SteerInputRemapTables = .bss:0x80489F78; // type:label size:0x50 scope:global +SteeringRangeTable = .bss:0x80489FC8; // type:label size:0x14 scope:global +SteeringWheelRangeTable = .bss:0x80489FDC; // type:label size:0x14 scope:global +SteeringRangeCoeffTable = .bss:0x80489FF0; // type:label size:0x14 scope:global +SteeringSpeedTable = .bss:0x8048A004; // type:label size:0x14 scope:global +SteeringInputSpeedCoeffTable = .bss:0x8048A018; // type:label size:0x14 scope:global +SteeringInputCoeffTable = .bss:0x8048A02C; // type:label size:0x14 scope:global +BurnoutFrictionTable = .bss:0x8048A040; // type:label size:0x8 scope:global +DriftStabilizerData = .bss:0x8048A048; // type:label size:0x38 scope:global +DriftStabilizerTable = .bss:0x8048A080; // type:label size:0x8 scope:global +DriftRearFrictionTable = .bss:0x8048A088; // type:label size:0x14 scope:global +__SuspensionTraffic = .bss:0x8048A09C; // type:label size:0xC scope:global +__SuspensionSimple = .bss:0x8048A0A8; // type:label size:0xC scope:global +TrailerCorneringForce = .bss:0x8048A0B4; // type:label size:0x14 scope:global +__SuspensionTrailer = .bss:0x8048A0C8; // type:label size:0xC scope:global +__SuspensionSpline = .bss:0x8048A0D4; // type:label size:0xC scope:global +__EngineRacer = .bss:0x8048A0E0; // type:label size:0xC scope:global +ClutchPlayTable = .bss:0x8048A0EC; // type:label size:0x8 scope:global +__EngineDragster = .bss:0x8048A0F4; // type:label size:0xC scope:global +__EngineSpline = .bss:0x8048A100; // type:label size:0xC scope:global +__SimpleChopper = .bss:0x8048A10C; // type:label size:0xC scope:global +__EngineTraffic = .bss:0x8048A118; // type:label size:0xC scope:global +__DrawHeli = .bss:0x8048A124; // type:label size:0xC scope:global +__DrawTraffic = .bss:0x8048A130; // type:label size:0xC scope:global +__DrawNISCar = .bss:0x8048A13C; // type:label size:0xC scope:global +__DrawCopCar = .bss:0x8048A148; // type:label size:0xC scope:global +__DrawRaceCar = .bss:0x8048A154; // type:label size:0xC scope:global +__SoundTraffic = .bss:0x8048A160; // type:label size:0xC scope:global +__SoundCop = .bss:0x8048A16C; // type:label size:0xC scope:global +__SoundRacer = .bss:0x8048A178; // type:label size:0xC scope:global +__ResetCar = .bss:0x8048A184; // type:label size:0xC scope:global +__SoundHeli = .bss:0x8048A190; // type:label size:0xC scope:global +__SpikeStrip = .bss:0x8048A19C; // type:label size:0xC scope:global +RBGrid_Memory = .bss:0x8048A1A8; // type:label size:0x1B00 scope:local +profdata.25844 = .bss:0x8048BD18; // type:label size:0x2000 scope:local +softwareResetStartTick.25900 = .bss:0x8048DD18; // type:label size:0x4 scope:local +sDisplayName.29516 = .bss:0x8048DD1C; // type:label size:0x20 scope:local +kFloatScaleUp = .bss:0x8048DD3C; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x8048DD40; // type:label size:0x4 scope:local +gVMStatsManager_FE = .bss:0x8048DD48; // type:label size:0x58 scope:global +gVMStatsManager_LS = .bss:0x8048DDA0; // type:label size:0x58 scope:global +gVMStatsManager_IG = .bss:0x8048DDF8; // type:label size:0x58 scope:global +sun_vis_poly_fix = .bss:0x8048DE50; // type:label size:0x94 scope:global +sun_vis_poly_fix_ini = .bss:0x8048DEE4; // type:label size:0x40 scope:global +BillboardedParticleBasisX = .bss:0x8048DF24; // type:label size:0x10 scope:global +BillboardedParticleBasisY = .bss:0x8048DF34; // type:label size:0x10 scope:global +TheDemoDiscManager = .bss:0x8048DF44; // type:label size:0x28 scope:global +NGSpriteManager = .bss:0x8048DF6C; // type:label size:0x3394 scope:global +gNGEffectList = .bss:0x80491300; // type:label size:0x20 scope:global +g_GC_Disk_GameName = .bss:0x80491320; // type:label size:0x4 scope:global +arenaLo = .bss:0x80491324; // type:label size:0x4 scope:global +HardwarePadStatus = .bss:0x80491330; // type:label size:0x30 scope:global +PadRingData = .bss:0x80491360; // type:label size:0x1E00 scope:global +calibrationTimer = .bss:0x80493160; // type:label size:0x10 scope:global +lastCalibTime = .bss:0x80493170; // type:label size:0x10 scope:global +notYetCalibrating = .bss:0x80493180; // type:label size:0x4 scope:global +wasWheelConnected = .bss:0x80493184; // type:label size:0x4 scope:global +vis_layer_fix = .bss:0x8049318C; // type:label size:0x24 scope:global +crtVtxFmt = .bss:0x804931C8; // type:label size:0x4 scope:global +gGCVD = .bss:0x804931CC; // type:label size:0x4 scope:global +gParticleList = .bss:0x804931D0; // type:label size:0x3850 scope:global +kFloatScaleUp = .bss:0x80496A20; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x80496A24; // type:label size:0x4 scope:local +hash.19645 = .bss:0x80496A28; // type:label size:0x4 scope:local +_.tmp_13.19646 = .bss:0x80496A2C; // type:label size:0x4 scope:local +hash.19653 = .bss:0x80496A30; // type:label size:0x4 scope:local +_.tmp_14.19654 = .bss:0x80496A34; // type:label size:0x4 scope:local +hash.19664 = .bss:0x80496A38; // type:label size:0x4 scope:local +_.tmp_15.19665 = .bss:0x80496A3C; // type:label size:0x4 scope:local +hash.19672 = .bss:0x80496A40; // type:label size:0x4 scope:local +_.tmp_16.19673 = .bss:0x80496A44; // type:label size:0x4 scope:local +r.25453 = .bss:0x80496A48; // type:label size:0x10 scope:local +_.tmp_20.25454 = .bss:0x80496A58; // type:label size:0x4 scope:local +kFloatScaleUp = .bss:0x80496A5C; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x80496A60; // type:label size:0x4 scope:local +_10SimSurface.kNull = .bss:0x80496A64; // type:label size:0x14 scope:global +_LocalPlayer = .bss:0x80496A78; // type:label size:0xC scope:global +_Q33UTL11Collectionst11GarbageNode2ZQ23Sim8Activityi40._mCollector = .bss:0x80496A84; // type:label size:0x2A4 scope:global +_Q33UTL11Collectionst11GarbageNode2ZQ23Sim6Entityi8._mCollector = .bss:0x80496D28; // type:label size:0xA4 scope:global +_Q33UTL11Collectionst11GarbageNode2ZQ23Sim5Modeli434._mCollector = .bss:0x80496DCC; // type:label size:0x1B44 scope:global +_QuickGame = .bss:0x80498910; // type:label size:0xC scope:global +_CareerGame = .bss:0x8049891C; // type:label size:0xC scope:global +WAM_START_TRIGGER = .bss:0x80498928; // type:label size:0x4 scope:local +WAM_STOP_TRIGGER = .bss:0x8049892C; // type:label size:0x4 scope:local +WAM_FIRST_FRAME = .bss:0x80498930; // type:label size:0x4 scope:local +WAM_LAST_FRAME = .bss:0x80498934; // type:label size:0x4 scope:local +WAM_SOUND_TRIGGER_START = .bss:0x80498938; // type:label size:0x4 scope:local +WAM_SOUND_TRIGGER_STOP = .bss:0x8049893C; // type:label size:0x4 scope:local +WAM_NIS_GENERIC_CONTROL_MSG = .bss:0x80498940; // type:label size:0x4 scope:local +WAM_FWD_REV_TRACK_CONTROL_MSG = .bss:0x80498944; // type:label size:0x4 scope:local +_NISActivity = .bss:0x80498948; // type:label size:0xC scope:global +_GameplayActivity = .bss:0x80498954; // type:label size:0xC scope:global +_Q23Sim8Internal.mProfileTime = .bss:0x80498960; // type:label size:0x4 scope:local +_Q23Sim8Internal.mCallCount = .bss:0x80498964; // type:label size:0x4 scope:local +_Q23Sim8Internal.mTick = .bss:0x80498968; // type:label size:0x4 scope:local +_Q23Sim8Internal.mTime = .bss:0x8049896C; // type:label size:0x4 scope:local +_Q23Sim8Internal.mSystem = .bss:0x80498970; // type:label size:0x4 scope:local +msg.25523 = .bss:0x80498974; // type:label size:0x200 scope:local +tune.25789 = .bss:0x80498B74; // type:label size:0x14 scope:local +_.tmp_18.25790 = .bss:0x80498B88; // type:label size:0x4 scope:local +requests_in_queue.26705 = .bss:0x80498B8C; // type:label size:0x4 scope:local +_.tmp_19.26706 = .bss:0x80498B90; // type:label size:0x4 scope:local +fw0.29386 = .bss:0x80498B94; // type:label size:0xC scope:local +_.tmp_24.29387 = .bss:0x80498BA0; // type:label size:0x4 scope:local +startpos.29388 = .bss:0x80498BA4; // type:label size:0xC scope:local +_.tmp_25.29389 = .bss:0x80498BB0; // type:label size:0x4 scope:local +speed0.29400 = .bss:0x80498BB4; // type:label size:0x4 scope:local +_.tmp_26.29401 = .bss:0x80498BB8; // type:label size:0x4 scope:local +t_brake_start.29402 = .bss:0x80498BBC; // type:label size:0x4 scope:local +_.tmp_27.29403 = .bss:0x80498BC0; // type:label size:0x4 scope:local +t_currdir.30960 = .bss:0x80498BC4; // type:label size:0x4 scope:local +_.tmp_35.30961 = .bss:0x80498BC8; // type:label size:0x4 scope:local +kFloatScaleUp = .bss:0x80498BCC; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x80498BD0; // type:label size:0x4 scope:local +_Q26Speech7Manager.mEvents = .bss:0x80498BD4; // type:label size:0x50 scope:global +_Q26Speech7Manager.mEvtHistory = .bss:0x80498C24; // type:label size:0xC scope:global +_Q26Speech7Manager.mHashMap = .bss:0x80498C30; // type:label size:0x854 scope:global +_Q26Speech7Manager.mGlobalHistory = .bss:0x80499484; // type:label size:0xC74 scope:global +_Q26Speech7Manager.mSampleRequests = .bss:0x8049A0F8; // type:label size:0x14 scope:global +_Q26Speech7Manager.mSampleReqTimer = .bss:0x8049A10C; // type:label size:0x4 scope:global +gSpeechCache = .bss:0x8049A110; // type:label size:0x2C scope:global +_4Csis.gAcknowledgeHandle = .bss:0x8049A13C; // type:label size:0x8 scope:global +_4Csis.gSetup_SpotterHandle = .bss:0x8049A144; // type:label size:0x8 scope:global +_4Csis.gSetup_SpotterWantedHandle = .bss:0x8049A14C; // type:label size:0x8 scope:global +_4Csis.gSetup_SpotterReplyHandle = .bss:0x8049A154; // type:label size:0x8 scope:global +_4Csis.gSetup_AttmptVehStpHandle = .bss:0x8049A15C; // type:label size:0x8 scope:global +_4Csis.gSetup_DispGoAheadHandle = .bss:0x8049A164; // type:label size:0x8 scope:global +_4Csis.gSetup_PrimaryEngageHandle = .bss:0x8049A16C; // type:label size:0x8 scope:global +_4Csis.gSetup_InitPursuitHandle = .bss:0x8049A174; // type:label size:0x8 scope:global +_4Csis.gSetup_SuspectConfirmedHandle = .bss:0x8049A17C; // type:label size:0x8 scope:global +_4Csis.gSetup_ReInitPursuitHandle = .bss:0x8049A184; // type:label size:0x8 scope:global +_4Csis.gSetup_VehicleReportHandle = .bss:0x8049A18C; // type:label size:0x8 scope:global +_4Csis.gSetup_VehicleReportTagHandle = .bss:0x8049A194; // type:label size:0x8 scope:global +_4Csis.gSetup_DispVehDescripHandle = .bss:0x8049A19C; // type:label size:0x8 scope:global +_4Csis.gSetup_DispVehDescripVinylsHandle = .bss:0x8049A1A4; // type:label size:0x8 scope:global +_4Csis.gSetup_DispNoVehDescripHandle = .bss:0x8049A1AC; // type:label size:0x8 scope:global +_4Csis.gSetup_DispCustPaintHandle = .bss:0x8049A1B4; // type:label size:0x8 scope:global +_4Csis.gSetup_MoreDetailsHandle = .bss:0x8049A1BC; // type:label size:0x8 scope:global +_4Csis.gSetup_LocationReportHandle = .bss:0x8049A1C4; // type:label size:0x8 scope:global +_4Csis.gSetup_BullhornPrefixHandle = .bss:0x8049A1CC; // type:label size:0x8 scope:global +_4Csis.gSetup_BullhornHandle = .bss:0x8049A1D4; // type:label size:0x8 scope:global +_4Csis.gSetup_SelfStrategyHandle = .bss:0x8049A1DC; // type:label size:0x8 scope:global +_4Csis.gSetup_InitialCallForBUHandle = .bss:0x8049A1E4; // type:label size:0x8 scope:global +_4Csis.gSetup_InitialCallForBU_MSHandle = .bss:0x8049A1EC; // type:label size:0x8 scope:global +_4Csis.gBackup_CallForBUHandle = .bss:0x8049A1F4; // type:label size:0x8 scope:global +_4Csis.gBackup_UnitBUReplyHandle = .bss:0x8049A1FC; // type:label size:0x8 scope:global +_4Csis.gBackup_DispBackupReplyHandle = .bss:0x8049A204; // type:label size:0x8 scope:global +_4Csis.gBackup_CallForSwarmingHandle = .bss:0x8049A20C; // type:label size:0x8 scope:global +_4Csis.gBackup_DispBUETAHandle = .bss:0x8049A214; // type:label size:0x8 scope:global +_4Csis.gBackup_DispHeliBUETAHandle = .bss:0x8049A21C; // type:label size:0x8 scope:global +_4Csis.gBackup_BUReminderHandle = .bss:0x8049A224; // type:label size:0x8 scope:global +_4Csis.gBackup_NegativeBUReplyHandle = .bss:0x8049A22C; // type:label size:0x8 scope:global +_4Csis.gBackup_DispBackupUpdateHandle = .bss:0x8049A234; // type:label size:0x8 scope:global +_4Csis.gBackup_BUArrivesHandle = .bss:0x8049A23C; // type:label size:0x8 scope:global +_4Csis.gStaticRoadblock_CallForRBHandle = .bss:0x8049A244; // type:label size:0x8 scope:global +_4Csis.gStaticRoadblock_RBReminderHandle = .bss:0x8049A24C; // type:label size:0x8 scope:global +_4Csis.gStaticRoadblock_NegativeRBReplyHandle = .bss:0x8049A254; // type:label size:0x8 scope:global +_4Csis.gStaticRoadblock_DispRBReplyHandle = .bss:0x8049A25C; // type:label size:0x8 scope:global +_4Csis.gStaticRoadblock_DispRBUpdateHandle = .bss:0x8049A264; // type:label size:0x8 scope:global +_4Csis.gStaticRoadblock_PursuitApproachingHandle = .bss:0x8049A26C; // type:label size:0x8 scope:global +_4Csis.gStaticRoadblock_RBApproachHandle = .bss:0x8049A274; // type:label size:0x8 scope:global +_4Csis.gStaticRoadblock_RBEngageHandle = .bss:0x8049A27C; // type:label size:0x8 scope:global +_4Csis.gStaticRoadblock_RBAvertedHandle = .bss:0x8049A284; // type:label size:0x8 scope:global +_4Csis.gStaticRoadblock_CallForRB_subHandle = .bss:0x8049A28C; // type:label size:0x8 scope:global +_4Csis.gStaticRoadblock_DispSubRBHandle = .bss:0x8049A294; // type:label size:0x8 scope:global +_4Csis.gProjectile_CallForSafetyHandle = .bss:0x8049A29C; // type:label size:0x8 scope:global +_4Csis.gProjectile_ProjectileLaunchHandle = .bss:0x8049A2A4; // type:label size:0x8 scope:global +_4Csis.gProjectile_ProjectileHitHandle = .bss:0x8049A2AC; // type:label size:0x8 scope:global +_4Csis.gProjectile_ProjectileMissHandle = .bss:0x8049A2B4; // type:label size:0x8 scope:global +_4Csis.gRollingStrategy_InitStrategyHandle = .bss:0x8049A2BC; // type:label size:0x8 scope:global +_4Csis.gRollingStrategy_CallToPositionHandle = .bss:0x8049A2C4; // type:label size:0x8 scope:global +_4Csis.gRollingStrategy_CallToPositionRemHandle = .bss:0x8049A2CC; // type:label size:0x8 scope:global +_4Csis.gRollingStrategy_StrategyExecuteHandle = .bss:0x8049A2D4; // type:label size:0x8 scope:global +_4Csis.gOutcome_AnticipateFailHandle = .bss:0x8049A2DC; // type:label size:0x8 scope:global +_4Csis.gOutcome_AnticipateSuccessHandle = .bss:0x8049A2E4; // type:label size:0x8 scope:global +_4Csis.gOutcome_OutcomeFailHandle = .bss:0x8049A2EC; // type:label size:0x8 scope:global +_4Csis.gOutcome_StrategyResetHandle = .bss:0x8049A2F4; // type:label size:0x8 scope:global +_4Csis.gArrest_BullhornArrestHandle = .bss:0x8049A2FC; // type:label size:0x8 scope:global +_4Csis.gArrest_ArrestHandle = .bss:0x8049A304; // type:label size:0x8 scope:global +_4Csis.gArrest_DispArrestReplyHandle = .bss:0x8049A30C; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_CollisionWorldHandle = .bss:0x8049A314; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_CollWorld_CiviHandle = .bss:0x8049A31C; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_CollWorld_SpinHandle = .bss:0x8049A324; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_CollWorld_AirHandle = .bss:0x8049A32C; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_CollWorld_FlipHandle = .bss:0x8049A334; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_DispPursuitUpdateHandle = .bss:0x8049A33C; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_PursuitUpdateRepHandle = .bss:0x8049A344; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_Disp911ReportHandle = .bss:0x8049A34C; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_Disp911CsPntHandle = .bss:0x8049A354; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_Disp911NoDescripHandle = .bss:0x8049A35C; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_Unit911ReplyHandle = .bss:0x8049A364; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_SuspectUTurnHandle = .bss:0x8049A36C; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_SuspectOutrunHandle = .bss:0x8049A374; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_LostVisualHandle = .bss:0x8049A37C; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_RegainVisualHandle = .bss:0x8049A384; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_LostSuspectHandle = .bss:0x8049A38C; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_DispBreakAwayHandle = .bss:0x8049A394; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_DispTimeExpiredHandle = .bss:0x8049A39C; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_DispPursuitEscalationHandle = .bss:0x8049A3A4; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_DispPursEscGenHandle = .bss:0x8049A3AC; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_UnitDisabledHandle = .bss:0x8049A3B4; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_CallForEVHandle = .bss:0x8049A3BC; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_DispEVReplyHandle = .bss:0x8049A3C4; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_IntentToRamHandle = .bss:0x8049A3CC; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_BailoutHandle = .bss:0x8049A3D4; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_BailoutDenyHandle = .bss:0x8049A3DC; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_FocusChangeHandle = .bss:0x8049A3E4; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_SuspectBehaviourHandle = .bss:0x8049A3EC; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_DriverHistoryHandle = .bss:0x8049A3F4; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_OffroadMomentHandle = .bss:0x8049A3FC; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_SpottedHandle = .bss:0x8049A404; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_SuspectBrakeHandle = .bss:0x8049A40C; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_WeatherReportHandle = .bss:0x8049A414; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_HeatJumpHandle = .bss:0x8049A41C; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_DirectionHighHandle = .bss:0x8049A424; // type:label size:0x8 scope:global +_4Csis.gAnytimeEvents_DispJurisShiftHandle = .bss:0x8049A42C; // type:label size:0x8 scope:global +_4Csis.gHeliSpecific_HeliSelfStrategyHandle = .bss:0x8049A434; // type:label size:0x8 scope:global +_4Csis.gHeliSpecific_HeliLostVisualHandle = .bss:0x8049A43C; // type:label size:0x8 scope:global +_4Csis.gHeliSpecific_HeliIntentToBailHandle = .bss:0x8049A444; // type:label size:0x8 scope:global +_4Csis.gHeliSpecific_HeliBailoutHandle = .bss:0x8049A44C; // type:label size:0x8 scope:global +_4Csis.gHeliSpecific_HeliSwarmingHandle = .bss:0x8049A454; // type:label size:0x8 scope:global +_4Csis.gHeliSpecific_HeliSpotterHandle = .bss:0x8049A45C; // type:label size:0x8 scope:global +_4Csis.gHeliSpecific_HeliHazardAlertHandle = .bss:0x8049A464; // type:label size:0x8 scope:global +_4Csis.gHeliSpecific_HeliQuadrentHandle = .bss:0x8049A46C; // type:label size:0x8 scope:global +_4Csis.gHeliSpecific_HeliQuadrentMovingHandle = .bss:0x8049A474; // type:label size:0x8 scope:global +_4Csis.gHeliSpecific_HeliBullhornArrestHandle = .bss:0x8049A47C; // type:label size:0x8 scope:global +_4Csis.gE3_Events_E3_SetupHandle = .bss:0x8049A484; // type:label size:0x8 scope:global +_4Csis.gInterrupts_InterruptHandle = .bss:0x8049A48C; // type:label size:0x8 scope:global +_4Csis.gInterrupts_InterruptRamHandle = .bss:0x8049A494; // type:label size:0x8 scope:global +_4Csis.gInterrupts_InterruptRam_REHandle = .bss:0x8049A49C; // type:label size:0x8 scope:global +_4Csis.gInterrupts_InterruptRam_HOHandle = .bss:0x8049A4A4; // type:label size:0x8 scope:global +_4Csis.gInterrupts_InterruptRam_SSHandle = .bss:0x8049A4AC; // type:label size:0x8 scope:global +_4Csis.gInterrupts_InterruptRam_TBHandle = .bss:0x8049A4B4; // type:label size:0x8 scope:global +_4Csis.gInterrupts_InterruptRamHighHandle = .bss:0x8049A4BC; // type:label size:0x8 scope:global +_4Csis.gInterrupts_StaticInterruptHandle = .bss:0x8049A4C4; // type:label size:0x8 scope:global +_4Csis.gInterrupts_RegainVisualInterruptHandle = .bss:0x8049A4CC; // type:label size:0x8 scope:global +_4Csis.gCellCallHandle = .bss:0x8049A4D4; // type:label size:0x8 scope:global +_4Csis.gExtraCops_SwarmingReplyHandle = .bss:0x8049A4DC; // type:label size:0x8 scope:global +_4Csis.gExtraCops_SuperPursuitReplyHandle = .bss:0x8049A4E4; // type:label size:0x8 scope:global +_4Csis.gExtraCops_SwarmingReplyFollowHandle = .bss:0x8049A4EC; // type:label size:0x8 scope:global +_4Csis.gExtraCops_QuadrentFormingHandle = .bss:0x8049A4F4; // type:label size:0x8 scope:global +_4Csis.gExtraCops_SuspectPossiblyGoneHandle = .bss:0x8049A4FC; // type:label size:0x8 scope:global +_4Csis.gExtraCops_QuadrentMovingHandle = .bss:0x8049A504; // type:label size:0x8 scope:global +_4Csis.gExtraCops_OtherLeadHandle = .bss:0x8049A50C; // type:label size:0x8 scope:global +_4Csis.gExtraCops_PossibleSuspectHandle = .bss:0x8049A514; // type:label size:0x8 scope:global +_4Csis.gExtraCops_WrongSuspectHandle = .bss:0x8049A51C; // type:label size:0x8 scope:global +_4Csis.gExtraCops_SuspectGoneHandle = .bss:0x8049A524; // type:label size:0x8 scope:global +_4Csis.gExtraCops_RBWarningHandle = .bss:0x8049A52C; // type:label size:0x8 scope:global +_4Csis.gExtraCops_RBPositionHandle = .bss:0x8049A534; // type:label size:0x8 scope:global +_4Csis.gExtraCops_ExtraRBEngageHandle = .bss:0x8049A53C; // type:label size:0x8 scope:global +_4Csis.gExtraCops_ExtraRBAvertedHandle = .bss:0x8049A544; // type:label size:0x8 scope:global +_4Csis.gCross_CrossBUReplyHandle = .bss:0x8049A54C; // type:label size:0x8 scope:global +_4Csis.gCross_CrossFailReplyHandle = .bss:0x8049A554; // type:label size:0x8 scope:global +_4Csis.gCross_CrossRBFailReplyHandle = .bss:0x8049A55C; // type:label size:0x8 scope:global +_4Csis.gCross_CrossPursuitEscHandle = .bss:0x8049A564; // type:label size:0x8 scope:global +_4Csis.gCross_CrossSelfStrategyHandle = .bss:0x8049A56C; // type:label size:0x8 scope:global +_4Csis.gCross_CrossMultiStrategyHandle = .bss:0x8049A574; // type:label size:0x8 scope:global +_4Csis.gCross_CrossBailoutDeny_subHandle = .bss:0x8049A57C; // type:label size:0x8 scope:global +_4Csis.gD_DayHandle = .bss:0x8049A584; // type:label size:0x8 scope:global +_4Csis.gDispIntroRaceHandle = .bss:0x8049A58C; // type:label size:0x8 scope:global +_SoundAI = .bss:0x8049A594; // type:label size:0xC scope:global +CopMinClosingVelSq = .bss:0x8049A5A0; // type:label size:0x4 scope:local +last_jettison_print.26154 = .bss:0x8049A5A4; // type:label size:0x4 scope:local +map_table.26965 = .bss:0x8049A5A8; // type:label size:0x2BC0 scope:local +text.26984 = .bss:0x8049D168; // type:label size:0x40 scope:local +lcamPosInside.27614 = .bss:0x8049D1A8; // type:label size:0x20 scope:local +_.tmp_14.27615 = .bss:0x8049D1C8; // type:label size:0x4 scope:local +dataBackup.27616 = .bss:0x8049D1CC; // type:label size:0x60 scope:local +kFloatScaleUp = .bss:0x8049D22C; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x8049D230; // type:label size:0x4 scope:local +SkidSetList = .bss:0x8049D234; // type:label size:0x8 scope:global +ClanList = .bss:0x8049D23C; // type:label size:0x8 scope:global +bChunkLoaderTrackOBB = .bss:0x8049D244; // type:label size:0x10 scope:global +TrackPositionMarkerList = .bss:0x8049D254; // type:label size:0x8 scope:global +bChunkLoaderTrackPositionMarkers = .bss:0x8049D25C; // type:label size:0x10 scope:global +bChunkLoaderTrackInfo = .bss:0x8049D26C; // type:label size:0x10 scope:global +TheTrackPathManager = .bss:0x8049D27C; // type:label size:0x48C scope:global +bChunkLoaderTrackPath = .bss:0x8049D708; // type:label size:0x10 scope:global +bChunkLoaderTrackPathBarriers = .bss:0x8049D718; // type:label size:0x10 scope:global +TheTrackStreamer = .bss:0x8049D728; // type:label size:0x888 scope:global +bChunkLoaderTrackStreamingSection = .bss:0x8049DFB0; // type:label size:0x10 scope:global +bChunkLoaderTrackStreamingDiscBundle = .bss:0x8049DFC0; // type:label size:0x10 scope:global +bChunkLoaderTrackStreamingInfo = .bss:0x8049DFD0; // type:label size:0x10 scope:global +bChunkLoaderTrackStreamingBarriers = .bss:0x8049DFE0; // type:label size:0x10 scope:global +ScenerySectionHeaderList = .bss:0x8049DFF0; // type:label size:0x8 scope:global +HeirarchyMap = .bss:0x8049DFF8; // type:label size:0x10 scope:global +SceneryGroupList = .bss:0x8049E008; // type:label size:0x8 scope:global +bChunkLoaderSceneryGroup = .bss:0x8049E010; // type:label size:0x10 scope:global +bChunkLoaderScenerySection = .bss:0x8049E020; // type:label size:0x10 scope:global +bChunkLoaderOverrideInfos = .bss:0x8049E030; // type:label size:0x10 scope:global +bChunkLoaderSceneryHeirarchy = .bss:0x8049E040; // type:label size:0x10 scope:global +bChunkLoaderSceneryLighting = .bss:0x8049E050; // type:label size:0x10 scope:global +EnablePrecullingSpeed = .bss:0x8049E060; // type:label size:0x4 scope:local +SectionRemapperTable_Gamecube = .bss:0x8049E064; // type:label size:0x204 scope:global +SectionRemapperTable = .bss:0x8049E268; // type:label size:0x218 scope:global +TheVisibleSectionManager = .bss:0x8049E480; // type:label size:0x6830 scope:global +RegionLists = .bss:0x804A4CB0; // type:label size:0x48 scope:global +cPos = .bss:0x804A4CF8; // type:label size:0x10 scope:global +TintSunRiseAccessor = .bss:0x804A4D08; // type:label size:0x60 scope:global +TintMiddayAccessor = .bss:0x804A4D68; // type:label size:0x60 scope:global +EmptyEventTriggerPackList = .bss:0x804A4DC8; // type:label size:0x8 scope:global +EventTriggerPackList = .bss:0x804A4DD0; // type:label size:0x8 scope:global +EventHandlerList = .bss:0x804A4DD8; // type:label size:0x8 scope:global +MasterEventQueue = .bss:0x804A4DE0; // type:label size:0x8 scope:global +SkidTextureInfo = .bss:0x804A4DE8; // type:label size:0x74 scope:global +CurrentVisibleSectionTableMem = .bss:0x804A4E5C; // type:label size:0x15E scope:global +RegionInfo = .bss:0x804A4FBC; // type:label size:0x1C scope:global +SceneryOverrideHashTable = .bss:0x804A4FD8; // type:label size:0x202 scope:global +gPrecullerBooBooManager = .bss:0x804A51DA; // type:label size:0x800 scope:global +SE_PaletteFile = .bss:0x804A59DC; // type:label size:0x324 scope:global +EventManagerStats = .bss:0x804A5D00; // type:label size:0x14 scope:global +TriggerEventArray = .bss:0x804A5D14; // type:label size:0xA4 scope:global +hash.29913 = .bss:0x804A5E60; // type:label size:0x4 scope:local +_.tmp_21.29914 = .bss:0x804A5E64; // type:label size:0x4 scope:local +hash.29921 = .bss:0x804A5E68; // type:label size:0x4 scope:local +_.tmp_22.29922 = .bss:0x804A5E6C; // type:label size:0x4 scope:local +hash.30029 = .bss:0x804A5E80; // type:label size:0x4 scope:local +_.tmp_25.30030 = .bss:0x804A5E84; // type:label size:0x4 scope:local +hash.30037 = .bss:0x804A5E88; // type:label size:0x4 scope:local +_.tmp_26.30038 = .bss:0x804A5E8C; // type:label size:0x4 scope:local +hash.30079 = .bss:0x804A5EA0; // type:label size:0x4 scope:local +_.tmp_29.30080 = .bss:0x804A5EA4; // type:label size:0x4 scope:local +hash.30087 = .bss:0x804A5EA8; // type:label size:0x4 scope:local +_.tmp_30.30088 = .bss:0x804A5EAC; // type:label size:0x4 scope:local +hash.30142 = .bss:0x804A5ED0; // type:label size:0x4 scope:local +_.tmp_35.30143 = .bss:0x804A5ED4; // type:label size:0x4 scope:local +hash.30150 = .bss:0x804A5ED8; // type:label size:0x4 scope:local +_.tmp_36.30151 = .bss:0x804A5EDC; // type:label size:0x4 scope:local +sCarWorldPosition.31751 = .bss:0x804A5F20; // type:label size:0x10 scope:local +_.tmp_45.31752 = .bss:0x804A5F30; // type:label size:0x4 scope:local +TheParameterMapsManager.36151 = .bss:0x804A5F34; // type:label size:0x8 scope:local +_.tmp_46.36152 = .bss:0x804A5F3C; // type:label size:0x4 scope:local +AutoParameterAccessors.36159 = .bss:0x804A5F40; // type:label size:0x8 scope:local +_.tmp_47.36160 = .bss:0x804A5F48; // type:label size:0x4 scope:local +tCs.36848 = .bss:0x804A5F4C; // type:label size:0x4 scope:local +_.tmp_48.36849 = .bss:0x804A5F50; // type:label size:0x4 scope:local +tCd.36850 = .bss:0x804A5F54; // type:label size:0x4 scope:local +_.tmp_49.36851 = .bss:0x804A5F58; // type:label size:0x4 scope:local +tI.36852 = .bss:0x804A5F5C; // type:label size:0x4 scope:local +_.tmp_50.36853 = .bss:0x804A5F60; // type:label size:0x4 scope:local +kFloatScaleUp = .bss:0x804A5F64; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x804A5F68; // type:label size:0x4 scope:local +ZeroVector = .bss:0x804A5F6C; // type:label size:0x10 scope:global +_Physics_System_World = .bss:0x804A5F7C; // type:label size:0x14 scope:global +TheRaceParameters = .bss:0x804A5F90; // type:label size:0xA0 scope:global +TheOnlineManager = .bss:0x804A6030; // type:label size:0x1 scope:global +_19SmackableRenderConn.mList = .bss:0x804A6034; // type:label size:0x8 scope:global +_SmackableRenderConn = .bss:0x804A603C; // type:label size:0xC scope:global +CarPartCullingPlaneInfoTable = .bss:0x804A6048; // type:label size:0x344 scope:global +CarReplacementDecalHash = .bss:0x804A638C; // type:label size:0x68 scope:global +gTrunkAudioMarkerHash = .bss:0x804A63F4; // type:label size:0x30 scope:global +NISCopCarDoorOpenMarkers = .bss:0x804A6424; // type:label size:0x100 scope:global +NISCopCarDoorClosedMarkers = .bss:0x804A6524; // type:label size:0x100 scope:global +EnvMapEyeOffset = .bss:0x804A6624; // type:label size:0x10 scope:global +EnvMapCamOffset = .bss:0x804A6634; // type:label size:0x10 scope:global +CarScaleMatrix = .bss:0x804A6644; // type:label size:0x40 scope:global +TestSprite = .bss:0x804A6684; // type:label size:0x30 scope:global +LeftTireRotateZMatrix = .bss:0x804A66B4; // type:label size:0x40 scope:global +LeftTireMirrorMatrix = .bss:0x804A66F4; // type:label size:0x40 scope:global +StandardCubeModel = .bss:0x804A6734; // type:label size:0x18 scope:global +StandardDebugModel = .bss:0x804A674C; // type:label size:0x18 scope:global +FrontEndRenderingCarList = .bss:0x804A6764; // type:label size:0x8 scope:global +hull_Origin = .bss:0x804A676C; // type:label size:0x10 scope:local +hull_Normal = .bss:0x804A677C; // type:label size:0x10 scope:local +hullVertArray1 = .bss:0x804A678C; // type:label size:0x100 scope:local +hullVertArray2 = .bss:0x804A688C; // type:label size:0x100 scope:local +hullVertArray3 = .bss:0x804A698C; // type:label size:0x300 scope:local +cs_lightV = .bss:0x804A6C8C; // type:label size:0x10 scope:global +EPfe = .bss:0x804A6C9C; // type:label size:0x10 scope:local +feposoff = .bss:0x804A6CAC; // type:label size:0x10 scope:global +_Q33UTL11Collectionst8Listable2Z17VehicleRenderConni10._mTable = .bss:0x804A6CBC; // type:label size:0x38 scope:global +gTireStateList = .bss:0x804A6CF4; // type:label size:0x8 scope:global +_CarRenderConn = .bss:0x804A6CFC; // type:label size:0xC scope:global +Tweak_BlowOutNoise = .bss:0x804A6D08; // type:label size:0x10 scope:local +_HeliRenderConn = .bss:0x804A6D18; // type:label size:0xC scope:global +_VehicleFragmentConn = .bss:0x804A6D24; // type:label size:0xC scope:global +TheVehcileFrags = .bss:0x804A6D30; // type:label size:0x8 scope:global +SkydomeModel = .bss:0x804A6D38; // type:label size:0x18 scope:global +SkydomeLocalWorld = .bss:0x804A6D50; // type:label size:0x40 scope:global +SkydomeLocalReflectedWorld = .bss:0x804A6D90; // type:label size:0x40 scope:global +SkySpecularModel = .bss:0x804A6DD0; // type:label size:0x18 scope:global +SkySpecularLocalWorld = .bss:0x804A6DE8; // type:label size:0x40 scope:global +SKYtextable = .bss:0x804A6E28; // type:label size:0x18 scope:global +SPECtextable = .bss:0x804A6E40; // type:label size:0xC scope:global +SunPos = .bss:0x804A6E4C; // type:label size:0x10 scope:global +SpaceNodeTrashList = .bss:0x804A6E5C; // type:label size:0x8 scope:global +CarPartDB = .bss:0x804A6E64; // type:label size:0x11C scope:global +PresetCarList = .bss:0x804A6F80; // type:label size:0x8 scope:global +CarPartIDNames = .bss:0x804A6F88; // type:label size:0x414 scope:global +CarPartIDOldNames = .bss:0x804A739C; // type:label size:0xC scope:global +TheCarLoader = .bss:0x804A73A8; // type:label size:0x8B0 scope:global +WorldModelList = .bss:0x804A7C58; // type:label size:0x8 scope:global +RainAccessor = .bss:0x804A7C60; // type:label size:0x1C scope:global +CloudAccessor = .bss:0x804A7C7C; // type:label size:0x1C scope:global +windAxis = .bss:0x804A7C9C; // type:label size:0x10 scope:global +WindAccessor = .bss:0x804A7CAC; // type:label size:0x60 scope:global +FogAccessor = .bss:0x804A7D0C; // type:label size:0x60 scope:global +RainFogAccessor = .bss:0x804A7D6C; // type:label size:0x60 scope:global +FogBlendDistAccessor = .bss:0x804A7DCC; // type:label size:0x38 scope:global +_14FacePixelation.mWorldPos = .bss:0x804A7E04; // type:label size:0x10 scope:global +gHeliSheetManager = .bss:0x804A7E14; // type:label size:0x8 scope:global +bChunkLoaderHeliSheet = .bss:0x804A7E1C; // type:label size:0x10 scope:global +_9VehicleFX.vehicle_fx_maps = .bss:0x804A7E30; // type:label size:0x2C0 scope:local +NISCopCarDoorOpenAmount = .bss:0x804A80F4; // type:label size:0x10 scope:global +P = .bss:0x804A8108; // type:label size:0x44 scope:local +cs_OneOverZ = .bss:0x804A814C; // type:label size:0x4 scope:global +RVManchor = .bss:0x804A8150; // type:label size:0x4 scope:global +BaseSkyHash = .bss:0x804A8154; // type:label size:0x8 scope:global +SkyHash = .bss:0x804A8160; // type:label size:0x28 scope:global +CurrentSkyTextures = .bss:0x804A8188; // type:label size:0x28 scope:global +UserSkyLoadCallbackParam = .bss:0x804A81B0; // type:label size:0x4 scope:global +TempSlotTable = .bss:0x804A81B4; // type:label size:0x8 scope:global +DefragmentParams = .bss:0x804A81BC; // type:label size:0xD0 scope:global +SkinCompositeParameterCache = .bss:0x804A828C; // type:label size:0x140 scope:global +swatch_offset_cache = .bss:0x804A83CC; // type:label size:0x100 scope:global +alphadec = .bss:0x804A84CC; // type:label size:0x4 scope:global +thepicture = .bss:0x804A84D0; // type:label size:0x4 scope:local +lengthcount = .bss:0x804A84D4; // type:label size:0x4 scope:local +samplefac = .bss:0x804A84D8; // type:label size:0x4 scope:local +network = .bss:0x804A84DC; // type:label size:0x1400 scope:local +netindex = .bss:0x804A98DC; // type:label size:0x400 scope:local +bias = .bss:0x804A9CDC; // type:label size:0x400 scope:local +freq = .bss:0x804AA0DC; // type:label size:0x400 scope:local +radpower = .bss:0x804AA4DC; // type:label size:0x80 scope:local +wPos.10506 = .bss:0x804AA598; // type:label size:0x3C scope:local +_.tmp_7.10507 = .bss:0x804AA5D4; // type:label size:0x4 scope:local +wPos.10514 = .bss:0x804AA5D8; // type:label size:0x3C scope:local +_.tmp_8.10515 = .bss:0x804AA614; // type:label size:0x4 scope:local +roadSpline.21136 = .bss:0x804AA620; // type:label size:0x6C scope:local +_.tmp_10.21137 = .bss:0x804AA68C; // type:label size:0x4 scope:local +roadSpline.21173 = .bss:0x804AA698; // type:label size:0x6C scope:local +_.tmp_12.21174 = .bss:0x804AA704; // type:label size:0x4 scope:local +hash.22642 = .bss:0x804AA720; // type:label size:0x4 scope:local +_.tmp_16.22643 = .bss:0x804AA724; // type:label size:0x4 scope:local +hash.22650 = .bss:0x804AA728; // type:label size:0x4 scope:local +_.tmp_17.22651 = .bss:0x804AA72C; // type:label size:0x4 scope:local +hash.22724 = .bss:0x804AA760; // type:label size:0x4 scope:local +_.tmp_24.22725 = .bss:0x804AA764; // type:label size:0x4 scope:local +hash.22732 = .bss:0x804AA768; // type:label size:0x4 scope:local +_.tmp_25.22733 = .bss:0x804AA76C; // type:label size:0x4 scope:local +kFloatScaleUp = .bss:0x804AA770; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x804AA774; // type:label size:0x4 scope:local +_9WCollider.fWuidMap = .bss:0x804AA778; // type:label size:0x10 scope:global +_Q33UTL11Collectionst8Listable2Z9WCollideri100._mTable = .bss:0x804AA788; // type:label size:0x1A0 scope:global +_23WGridManagedDynamicElem.fgManagedDynamicElemList = .bss:0x804AA928; // type:label size:0x8 scope:global +_Physics_System_WRoadNetwork = .bss:0x804AA930; // type:label size:0x14 scope:global +_PathFinder = .bss:0x804AA944; // type:label size:0xC scope:global +bChunkLoaderWGrid = .bss:0x804AA950; // type:label size:0x10 scope:global +_8WSurface.kNull = .bss:0x804AA960; // type:label size:0x2 scope:global +_WorldBodyConn = .bss:0x804AA964; // type:label size:0xC scope:global +_13WorldBodyConn.mList = .bss:0x804AA970; // type:label size:0x8 scope:global +_WorldEffectConn = .bss:0x804AA978; // type:label size:0xC scope:global +_15WorldEffectConn.mList = .bss:0x804AA984; // type:label size:0x8 scope:global +_World_OneShotEffect = .bss:0x804AA98C; // type:label size:0xC scope:global +_World_UpdateBody = .bss:0x804AA998; // type:label size:0xC scope:global +DZSystemName = .bss:0x804AA9A8; // type:label size:0xA0 scope:local +DZDamageStimulus = .bss:0x804AAA48; // type:label size:0x1C scope:local +DZImpactStimulus = .bss:0x804AAA64; // type:label size:0x1C scope:local +_9WorldConn._Server = .bss:0x804AAA80; // type:label size:0x4 scope:local +kFloatScaleUp = .bss:0x804AAA88; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x804AAA8C; // type:label size:0x4 scope:local +TheGarageCarLoader.27807 = .bss:0x804AAA90; // type:label size:0x638 scope:local +_.tmp_15.27808 = .bss:0x804AB0C8; // type:label size:0x4 scope:local +kFloatScaleUp = .bss:0x804AB0CC; // type:label size:0x4 scope:local +kFloatScaleDown = .bss:0x804AB0D0; // type:label size:0x4 scope:local +TopOrFullScreenRide = .bss:0x804AB0D4; // type:label size:0x310 scope:global +gCarCustomizeManager = .bss:0x804AB3E4; // type:label size:0x1C4 scope:global +TopOrFullScreenLoadingReason = .bss:0x804AB5A8; // type:label size:0x4 scope:global +gPlayerNum = .bss:0x804AB5AC; // type:label size:0x4 scope:global +CustomizeHUDTexPackResources = .bss:0x804AB5B0; // type:label size:0x2C scope:global +CustomizeHUDTexTextureResources = .bss:0x804AB5DC; // type:label size:0xDC scope:global +NOA_ProgramExc = .bss:0x804B4DE8; // type:label scope:local +g_hHandle = .bss:0x804B4F40; // type:label size:0x4 scope:local +g_pBuffer = .bss:0x804B4F44; // type:label size:0x4 scope:local +g_nBlockCnt = .bss:0x804B4F48; // type:label size:0x4 scope:local +g_nRemainderCnt = .bss:0x804B4F4C; // type:label size:0x4 scope:local +g_nTotalBytesRemaining = .bss:0x804B4F50; // type:label size:0x4 scope:local +g_bDoFSACK = .bss:0x804B4F54; // type:label size:0x4 scope:local +g_nFSLastError = .bss:0x804B4F58; // type:label size:0x4 scope:local +g_FsResult = .bss:0x804B4F60; // type:label size:0xC scope:local +g_nDvdAudioCfg = .bss:0x804B4F80; // type:label size:0x4 scope:local +g_aBuffer = .bss:0x804B4FA0; // type:label size:0x20 scope:local +g_nDvdError = .bss:0x804B4FC0; // type:label size:0x4 scope:local +g_nDvdCurrOffset = .bss:0x804B4FC4; // type:label size:0x4 scope:local +g_nDvdReadLength = .bss:0x804B4FC8; // type:label size:0x4 scope:local +g_nBaseOffset = .bss:0x804B4FCC; // type:label size:0x4 scope:local +g_nEmuState = .bss:0x804B4FD0; // type:label size:0x1 scope:local +g_nLidState = .bss:0x804B4FD1; // type:label size:0x1 scope:local +_sn_iobf = .bss:0x804B4FE0; // type:label size:0x3C0 scope:local +_sn_stat_g = .bss:0x804B53A0; // type:label size:0xC scope:local +str.13 = .bss:0x804B53AC; // type:label size:0xA4 scope:local +pch.20 = .bss:0x804B5450; // type:label size:0x80 scope:local +pch.3 = .bss:0x804B54D0; // type:label size:0x80 scope:local +initialized.10 = .bss:0x804B5550; // type:label size:0x4 scope:local +g_lgDevices = .bss:0x804B5558; // type:object size:0x4920 scope:local +g_iGammaLookup = .bss:0x804B9E78; // type:object size:0x81 scope:local +g_iQuarterSineTable = .bss:0x804B9EFC; // type:object size:0x80 scope:local +g_iRampUpTable = .bss:0x804B9F7C; // type:object size:0x80 scope:local +ia$1518 = .bss:0x804B9FFC; // type:object size:0x28 scope:local +DriveInfo = .bss:0x804BA040; // type:object size:0x20 scope:local +...bss.0 = .bss:0x804BA040; // type:label scope:local +DriveBlock = .bss:0x804BA060; // type:object size:0x30 scope:local +__OSRebootParams = .bss:0x804BA090; // type:object size:0x1C scope:global +...bss.0 = .bss:0x804BA0B0; // type:label scope:local +__OSErrorTable = .bss:0x804BA0B0; // type:object size:0x44 scope:global +Scb = .bss:0x804BA100; // type:object size:0x54 scope:local +...bss.0 = .bss:0x804BA100; // type:label scope:local +RunQueue = .bss:0x804BA158; // type:object size:0x100 scope:local +...bss.0 = .bss:0x804BA158; // type:label scope:local +IdleThread = .bss:0x804BA258; // type:object size:0x318 scope:local +DefaultThread = .bss:0x804BA570; // type:object size:0x318 scope:local +IdleContext = .bss:0x804BA888; // type:object size:0x2C8 scope:local +BB2 = .bss:0x804BAB60; // type:object size:0x20 scope:local +...bss.0 = .bss:0x804BAB60; // type:label scope:local +CurrDiskID = .bss:0x804BAB80; // type:object size:0x20 scope:local +DummyCommandBlock = .bss:0x804BABA0; // type:object size:0x30 scope:local +ResetAlarm = .bss:0x804BABD0; // type:object size:0x28 scope:local +WaitingQueue = .bss:0x804BABF8; // type:object size:0x20 scope:local +...bss.0 = .bss:0x804BABF8; // type:label scope:local +bb2Buf = .bss:0x804BAC18; // type:object size:0x3F scope:local +block$18 = .bss:0x804BAC58; // type:object size:0x30 scope:local +CommandList = .bss:0x804BAC88; // type:object size:0x3C scope:local +...bss.0 = .bss:0x804BAC88; // type:label scope:local +AlarmForWA = .bss:0x804BACC8; // type:object size:0x28 scope:local +AlarmForTimeout = .bss:0x804BACF0; // type:object size:0x28 scope:local +AlarmForBreak = .bss:0x804BAD18; // type:object size:0x28 scope:local +Prev = .bss:0x804BAD40; // type:object size:0xC scope:local +Curr = .bss:0x804BAD4C; // type:object size:0xC scope:local +regs = .bss:0x804BAD58; // type:object size:0x76 scope:local +...bss.0 = .bss:0x804BAD58; // type:label scope:local +shdwRegs = .bss:0x804BADD0; // type:object size:0x76 scope:local +HorVer = .bss:0x804BAE48; // type:object size:0x58 scope:local +Pad = .bss:0x804BAEA0; // type:object size:0x30 scope:local +...bss.0 = .bss:0x804BAEA0; // type:label scope:local +Type = .bss:0x804BAED0; // type:object size:0x10 scope:local +...bss.0 = .bss:0x804BAED0; // type:label scope:local +Origin = .bss:0x804BAEE0; // type:object size:0x30 scope:local +CmdProbeDevice = .bss:0x804BAF10; // type:object size:0x10 scope:local +...bss.0 = .bss:0x804BAF20; // type:label scope:local +__CARDBlock = .bss:0x804BAF20; // type:object size:0x220 scope:global +__CARDDiskNone = .bss:0x804BB140; // type:object size:0x20 scope:global +FifoObj = .bss:0x804BB160; // type:object size:0x80 scope:local +...bss.0 = .bss:0x804BB160; // type:label scope:local +gxData = .bss:0x804BB1E0; // type:object size:0x5B0 scope:local +DisplayListFifo = .bss:0x804BB790; // type:object size:0x24 scope:local +...bss.0 = .bss:0x804BB790; // type:label scope:local +__savedGXdata = .bss:0x804BB7B4; // type:object size:0x5B0 scope:local +Ecb = .bss:0x804BBD68; // type:object size:0xC0 scope:local +Packet = .bss:0x804BBE28; // type:object size:0x80 scope:local +...bss.0 = .bss:0x804BBE28; // type:label scope:local +Alarm = .bss:0x804BBEA8; // type:object size:0xA0 scope:local +TypeTime = .bss:0x804BBF48; // type:object size:0x20 scope:local +XferTime = .bss:0x804BBF68; // type:object size:0x20 scope:local +TypeCallback = .bss:0x804BBF88; // type:object size:0x40 scope:local +RDSTHandler = .bss:0x804BBFC8; // type:object size:0x10 scope:local +InputBufferValid = .bss:0x804BBFD8; // type:object size:0x10 scope:local +InputBuffer = .bss:0x804BBFE8; // type:object size:0x20 scope:local +InputBufferVcount = .bss:0x804BC008; // type:object size:0x10 scope:local +cmdFixDevice$327 = .bss:0x804BC018; // type:object size:0x10 scope:local +__SISteering = .bss:0x804BC028; // type:object size:0xA0 scope:global +Ecb = .bss:0x804BC0C8; // type:object size:0x18 scope:local +...bss.0 = .bss:0x804BC0C8; // type:label scope:local +_4RCMP.rcmp_sys = .bss:0x804BC0E0; // type:label size:0x10 scope:global +myalloc = .bss:0x804BC0F0; // type:label size:0x14 scope:global +madvlctbl1 = .bss:0x804BC104; // type:label size:0x800 scope:global +madvlctbl2 = .bss:0x804BC904; // type:label size:0x400 scope:global +madvlctbl3 = .bss:0x804BCD04; // type:label size:0x400 scope:global +madvlctbl4 = .bss:0x804BD104; // type:label size:0x100 scope:global +madquant = .bss:0x804BD204; // type:label size:0x100 scope:global +luma = .bss:0x804BD304; // type:label size:0x400 scope:local +chroma = .bss:0x804BD704; // type:label size:0x200 scope:local +clipbiastbl = .bss:0x804BD904; // type:label size:0x200 scope:local +idctinput = .bss:0x804BDB04; // type:label size:0x100 scope:global +work = .bss:0x804BDC04; // type:label size:0x100 scope:local +VP6_DCQuantScaleP = .bss:0x804BDD04; // type:label size:0x100 scope:local +LimitVal_VP31 = .bss:0x804BDE04; // type:label size:0x300 scope:global +FData = .bss:0x804BE104; // type:label size:0x160 scope:local +idct = .bss:0x804BE264; // type:label size:0x104 scope:global +idctc = .bss:0x804BE368; // type:label size:0x104 scope:global +DeringModifierV1 = .bss:0x804BE46C; // type:label size:0x100 scope:global +FData.84 = .bss:0x804BE56C; // type:label size:0x90 scope:local +sndaems = .bss:0x804BE5FC; // type:label size:0x38 scope:global +SNDAEMSalmbpriority = .bss:0x804BE634; // type:label size:0x4 scope:global +SNDAEMSalmbfilename = .bss:0x804BE638; // type:label size:0x4 scope:global +SNDAEMSalmbfileoffset = .bss:0x804BE63C; // type:label size:0x4 scope:global +SNDAEMSalmbstreamfilename = .bss:0x804BE640; // type:label size:0x4 scope:global +SNDAEMSalmbstreamfileoffset = .bss:0x804BE644; // type:label size:0x4 scope:global +SNDAEMSalmbploadbuf = .bss:0x804BE648; // type:label size:0x4 scope:global +SNDAEMSalmbloadbufsize = .bss:0x804BE64C; // type:label size:0x4 scope:global +SNDAEMSalmbmalloccb = .bss:0x804BE650; // type:label size:0x4 scope:global +SNDAEMSalmbfhandle = .bss:0x804BE654; // type:label size:0x4 scope:global +SNDAEMSalmbpmb = .bss:0x804BE658; // type:label size:0x4 scope:global +SNDAEMSalmbmodulebankhandle = .bss:0x804BE65C; // type:label size:0x4 scope:global +SNDAEMSalmbpatchbankhandle = .bss:0x804BE660; // type:label size:0x4 scope:global +SNDAEMSalmbmidibankhandle = .bss:0x804BE664; // type:label size:0x4 scope:global +SNDAEMSalmbfileop = .bss:0x804BE668; // type:label size:0x4 scope:global +SNDAEMSalmbstage = .bss:0x804BE66C; // type:label size:0x1 scope:global +SNDAEMSalmblasterror = .bss:0x804BE66D; // type:label size:0x1 scope:global +SNDAEMSalmbmpmodulebank = .bss:0x804BE670; // type:label size:0x4 scope:global +SNDAEMSalmbmstreamfilename = .bss:0x804BE674; // type:label size:0x4 scope:global +SNDAEMSalmbmstreamfileoffset = .bss:0x804BE678; // type:label size:0x4 scope:global +SNDAEMSalmbmmalloccb = .bss:0x804BE67C; // type:label size:0x4 scope:global +SNDAEMSalmbmpmb = .bss:0x804BE680; // type:label size:0x4 scope:global +SNDAEMSalmbmpatchbankhandle = .bss:0x804BE684; // type:label size:0x4 scope:global +SNDAEMSalmbmmidibankhandle = .bss:0x804BE688; // type:label size:0x4 scope:global +SNDAEMSalmbmpatchloaded = .bss:0x804BE68C; // type:label size:0x1 scope:global +SNDAEMSalmbmmidiloaded = .bss:0x804BE68D; // type:label size:0x1 scope:global +sndvoicereserved = .bss:0x804BE690; // type:label size:0xC scope:global +sndbams = .bss:0x804BE69C; // type:label size:0x14 scope:global +sndgs = .bss:0x804BE6B0; // type:label size:0x244 scope:global +sndpps = .bss:0x804BE8F4; // type:label size:0x384 scope:global +SNDIrandseed = .bss:0x804BEC78; // type:label size:0x18 scope:global +_3Snd.gVariableTimerList = .bss:0x804BEC90; // type:label size:0x4 scope:global +_3Snd.gVariableTimerTick = .bss:0x804BEC94; // type:label size:0x4 scope:global +_3Snd.gVariableTimerPeriod = .bss:0x804BEC98; // type:label size:0x4 scope:global +sndss = .bss:0x804BEC9C; // type:label size:0x80 scope:global +_3Snd.gVoicesNext = .bss:0x804BED1C; // type:label size:0x20 scope:global +_3Snd.gOutputSampleRateNext = .bss:0x804BED3C; // type:label size:0x20 scope:global +_3Snd.gOutputModeNext = .bss:0x804BED5C; // type:label size:0x8 scope:global +_3Snd.heapsize = .bss:0x804BED64; // type:label size:0x4 scope:global +_3Snd.gSpeakerPositions = .bss:0x804BED68; // type:label size:0x14 scope:global +_3Snd.gTotalOutputChannels = .bss:0x804BED7C; // type:label size:0x1 scope:global +_3Snd.gFoldDownTarget = .bss:0x804BED80; // type:label size:0x4 scope:global +__MIXChannel = .bss:0x804BED88; // type:label size:0x1600 scope:local +numoutputchannels = .bss:0x804C0388; // type:label size:0x4 scope:local +ptr.447 = .bss:0x804C03A0; // type:label size:0x4 scope:local +snddrv = .bss:0x804C03C0; // type:label size:0xC0C0 scope:global +fxBusesLinkList = .bss:0x804CC480; // type:label size:0x4 scope:global +sndfx = .bss:0x804CC484; // type:label size:0x8 scope:global +modlist = .bss:0x804CC48C; // type:label size:0x4 scope:global +conlist = .bss:0x804CC490; // type:label size:0x4 scope:global +sndmix = .bss:0x804CC494; // type:label size:0x1E8 scope:global +sndmixwritelog = .bss:0x804CC67C; // type:label size:0x4 scope:global +MIXinitfn = .bss:0x804CC680; // type:label size:0x4 scope:global +MIXrestorefn = .bss:0x804CC684; // type:label size:0x4 scope:global +MIXaudioslicefn = .bss:0x804CC688; // type:label size:0x4 scope:global +MIXplayinitfn = .bss:0x804CC68C; // type:label size:0x4 scope:global +MIXplayfn = .bss:0x804CC690; // type:label size:0x4 scope:global +MIXstopfn = .bss:0x804CC694; // type:label size:0x4 scope:global +MIXsetpitchfn = .bss:0x804CC698; // type:label size:0x4 scope:global +sndaztospkr_buf = .bss:0x804CC69C; // type:label size:0x4 scope:global +sndaztospkr = .bss:0x804CC6A0; // type:label size:0x18 scope:global +_3Snd.CODANew = .bss:0x804CC6B8; // type:label size:0x4 scope:global +_3Snd.CODADelete = .bss:0x804CC6BC; // type:label size:0x4 scope:global +sndaram = .bss:0x804CC6C0; // type:label size:0x10 scope:global +_4Csis.gSystems = .bss:0x804CC6D0; // type:label size:0x4 scope:global +_4Csis.gMutexHandle = .bss:0x804CC6D4; // type:label size:0x18 scope:global +_16PathToIAllocator.memimptags = .bss:0x804CC6EC; // type:label size:0xC scope:global +gCallbacks = .bss:0x804CC6F8; // type:label size:0x14 scope:global +gEventDats = .bss:0x804CC70C; // type:label size:0x40 scope:global +gVoxEvents = .bss:0x804CC74C; // type:label size:0x140 scope:global +gVoxInGame = .bss:0x804CC88C; // type:label size:0x40 scope:global +gGameNum = .bss:0x804CC8CC; // type:label size:0x4 scope:global +gDataRate = .bss:0x804CC8D0; // type:label size:0x4 scope:global +gFilterSetting = .bss:0x804CC8D4; // type:label size:0x20 scope:global +gPreLoadTicks = .bss:0x804CC8F4; // type:label size:0x4 scope:global +gLastTick = .bss:0x804CC8F8; // type:label size:0x4 scope:global +gLastSubTick = .bss:0x804CC8FC; // type:label size:0x2 scope:global +gEventChoice = .bss:0x804CC900; // type:label size:0x500 scope:local +gRandArray = .bss:0x804CCE00; // type:label size:0x80 scope:global +nulldrv = .bss:0x804CCE80; // type:label size:0x14 scope:local +FileAlignTvp = .bss:0x804CCE94; // type:label size:0xC scope:global +mutex = .bss:0x804CCEA0; // type:label size:0x1C scope:local +GcDvd_fdd = .bss:0x804CCEC0; // type:label size:0x24 scope:global +ReadFileThreadMsgQ = .bss:0x804CCEE4; // type:label size:0x20 scope:local +ReadFileThreadMsgData = .bss:0x804CCF04; // type:label size:0x80 scope:local +gCurRead = .bss:0x804CCFA0; // type:label size:0x8060 scope:local +GcHd_fdd = .bss:0x804D5000; // type:label size:0x14 scope:global +Alarm = .bss:0x804D5018; // type:label size:0x28 scope:local +TimerThreadMsgQ = .bss:0x804D5040; // type:label size:0x20 scope:global +TimerThreadMsgData = .bss:0x804D5060; // type:label size:0x80 scope:global +TimerThread = .bss:0x804D50E0; // type:label size:0x318 scope:global +TimerThreadStack = .bss:0x804D53F8; // type:label size:0x1000 scope:global +systemtasksubs = .bss:0x804D63F8; // type:label size:0x140 scope:local +_Q26Realmc6Locale.gTrcMsgBuffer = .bss:0x804D6540; // type:label size:0x2800 scope:local +statInfo.695 = .bss:0x804D8D40; // type:label size:0x6C scope:local +sMsg.608 = .bss:0x804D8DAC; // type:label size:0x78 scope:local +_Q26Realmc11GCInterface.mMsgTimer = .bss:0x804D8E24; // type:label size:0x10 scope:global +_Q26Realmc11GCInterface.mBlockCalculator = .bss:0x804D8E34; // type:label size:0x18 scope:global +_Q26Realmc11GCInterface.mTaskManager = .bss:0x804D8E4C; // type:label size:0x50 scope:global +_Q26Realmc11GCInterface.mFindResult = .bss:0x804D8E9C; // type:label size:0x9C scope:global +_Q26Realmc11GCInterface.mTaskTrcStartGame = .bss:0x804D8F38; // type:label size:0x7C scope:global +_Q26Realmc11GCInterface.mTaskTrcCardExists = .bss:0x804D8FB4; // type:label size:0x30 scope:global +_Q26Realmc11GCInterface.mTaskTrcGetCardInfo = .bss:0x804D8FE4; // type:label size:0x3C scope:global +_Q26Realmc11GCInterface.mTaskTrcSaveFile = .bss:0x804D9020; // type:label size:0x74 scope:global +_Q26Realmc11GCInterface.mTaskTrcLoadFile = .bss:0x804D9094; // type:label size:0x64 scope:global +_Q26Realmc11GCInterface.mTaskTrcDeleteFile = .bss:0x804D90F8; // type:label size:0x64 scope:global +_Q26Realmc11GCInterface.mTaskTrcListFiles = .bss:0x804D915C; // type:label size:0x68 scope:global +_Q26Realmc11GCInterface.mTaskCardExists = .bss:0x804D91C4; // type:label size:0x28 scope:global +_Q26Realmc11GCInterface.mTaskGetCardInfo = .bss:0x804D91EC; // type:label size:0x24 scope:global +_Q26Realmc11GCInterface.mTaskMount = .bss:0x804D9210; // type:label size:0x24 scope:global +_Q26Realmc11GCInterface.mTaskUnmount = .bss:0x804D9234; // type:label size:0x24 scope:global +_Q26Realmc11GCInterface.mTaskOpen = .bss:0x804D9258; // type:label size:0x2C scope:global +_Q26Realmc11GCInterface.mTaskClose = .bss:0x804D9284; // type:label size:0x28 scope:global +_Q26Realmc11GCInterface.mTaskRead = .bss:0x804D92AC; // type:label size:0x34 scope:global +_Q26Realmc11GCInterface.mTaskWrite = .bss:0x804D92E0; // type:label size:0x34 scope:global +_Q26Realmc11GCInterface.mTaskSeek = .bss:0x804D9314; // type:label size:0x30 scope:global +_Q26Realmc11GCInterface.mTaskFlush = .bss:0x804D9344; // type:label size:0x28 scope:global +_Q26Realmc11GCInterface.mTaskDelete = .bss:0x804D936C; // type:label size:0x48 scope:global +_Q26Realmc11GCInterface.mTaskSetAttribute = .bss:0x804D93B4; // type:label size:0x4C scope:global +_Q26Realmc11GCInterface.mTaskFind = .bss:0x804D9400; // type:label size:0x4C scope:global +_Q26Realmc11GCInterface.mTaskTrcMount = .bss:0x804D944C; // type:label size:0x34 scope:global +_Q26Realmc11GCInterface.mTaskTrcFormat = .bss:0x804D9480; // type:label size:0x34 scope:global +_Q26Realmc11GCInterface.mTaskShowCardStatusMsg = .bss:0x804D94B4; // type:label size:0x34 scope:global +_Q26Realmc11GCInterface.mTaskTrcCheckSpace = .bss:0x804D94E8; // type:label size:0x88 scope:global +_Q26Realmc11GCInterface.mTaskMsg = .bss:0x804D9570; // type:label size:0x78 scope:global +_6Realmc.sCardName = .bss:0x804D95E8; // type:label size:0x60 scope:local +findFileInfo.635 = .bss:0x804D9648; // type:label size:0x20 scope:local +AbortMsgBuffer = .bss:0x804D9668; // type:label size:0x800 scope:local +SystemAbortBuffer = .bss:0x804D9E68; // type:label size:0x800 scope:local +_9RealInput.gPadstat = .bss:0x804DA668; // type:label size:0x30 scope:global +FatalParam = .bss:0x804DA698; // type:object size:0xC scope:local +...bss.0 = .bss:0x804DA698; // type:label scope:local +FatalContext = .bss:0x804DA6A8; // type:object size:0x2C8 scope:local +__AXStackHead = .bss:0x804DA970; // type:object size:0x80 scope:local +...bss.0 = .bss:0x804DA970; // type:label scope:local +__AXStackTail = .bss:0x804DA9F0; // type:object size:0x80 scope:local +__AXBufferAuxA = .bss:0x804DAA80; // type:object size:0x1680 scope:local +...bss.0 = .bss:0x804DAA80; // type:label scope:local +__AXBufferAuxB = .bss:0x804DC100; // type:object size:0x1680 scope:local +__AXCommandList = .bss:0x804DD780; // type:object size:0x600 scope:local +__AXOutBuffer = .bss:0x804DDD80; // type:object size:0x780 scope:local +...bss.0 = .bss:0x804DDD80; // type:label scope:local +__AXOutSBuffer = .bss:0x804DE500; // type:object size:0x280 scope:local +__AXDramImage = .bss:0x804DE780; // type:object size:0x4000 scope:local +__AXDSPTask = .bss:0x804E2780; // type:object size:0x50 scope:local +__AXStudio = .bss:0x804E2800; // type:object size:0x36 scope:local +...bss.0 = .bss:0x804E2800; // type:label scope:local +__AXPB = .bss:0x804E2840; // type:object size:0x3D00 scope:local +...bss.0 = .bss:0x804E2840; // type:label scope:local +__AXITD = .bss:0x804E6540; // type:object size:0x1000 scope:local +__AXUpdates = .bss:0x804E7540; // type:object size:0x4000 scope:local +__AXVPB = .bss:0x804EB540; // type:object size:0x8B00 scope:local +_14AISpawnManager.mSpawnSegment = .bss:0x804F4040; // type:object size:0xC8 scope:global +_12bChunkLoader.sLoaderTable = .bss:0x804F4108; // type:object size:0x100 scope:global +_12bChunkLoader.sNumLoaders = .bss:0x804F4208; // type:object size:0x40 scope:global +_12WRoadNetwork.fInvalidProfile = .bss:0x804F4248; // type:object size:0x40 scope:global +_8EAXSound.m_pStateMgr = .bss:0x804F4288; // type:object size:0x34 scope:global +_18HudResourceManager.mCustHudTexPackName = .bss:0x804F42BC; // type:object size:0x20 scope:global +_18HudResourceManager.mCustomizeHUDTexTextureResources = .bss:0x804F42DC; // type:object size:0x14 scope:global +_20GrandSceneryCullInfo.SceneryDrawInfoTable = .bss:0x804F42F0; // type:object size:0xA410 scope:global +_14EAXAemsManager.m_RequiredSlots = .bss:0x804FE700; // type:object size:0x10 scope:global +_13SFXObj_Reverb.m_pFXEditPatch = .bss:0x804FE710; // type:object size:0x30 scope:global +_16FEAnyMovieScreen.ReturnToPackageName = .bss:0x804FE740; // type:object size:0x40 scope:global +_13MemoryCardImp.gContentName = .bss:0x804FE780; // type:object size:0x40 scope:global +_8Showcase.FromColor = .bss:0x804FE7C0; // type:object size:0xC scope:global +_9RigidBody.mMaps = .bss:0x804FE7CC; // type:object size:0x100 scope:global +_t10ScratchPtr1ZQ29RigidBody8Volatile.mPointer = .bss:0x804FE8CC; // type:object size:0x100 scope:global +_10QueuedFile.DecompressionTable = .bss:0x804FE9CC; // type:object size:0x80 scope:global +_15SimpleRigidBody.mMaps = .bss:0x804FEA4C; // type:object size:0x180 scope:global +_t10ScratchPtr1ZQ215SimpleRigidBody8Volatile.mPointer = .bss:0x804FEBCC; // type:object size:0x180 scope:global +_Q26Realmc11GCInterface.mCardName = .bss:0x804FED4C; // type:object size:0x60 scope:global +__bss_end = .bss:0x804FEDAC; // type:object scope:global +_e_bss = .bss:0x804FEDAC; // type:object scope:global +__SDATA_START__ = .sdata:0x804FEDC0; // type:object scope:global +_impure_ptr = .sdata:0x804FEDC0; // type:object size:0x4 scope:global +_sn_IO_buf_ptr = .sdata:0x804FEDC4; // type:object size:0x4 scope:global +cumulative_written.21 = .sdata:0x804FEDD0; // type:object size:0x4 scope:local +pch_pointer.22 = .sdata:0x804FEDD4; // type:object size:0x4 scope:local +cumulative_written.4 = .sdata:0x804FEDD8; // type:object size:0x4 scope:local +pch_pointer.5 = .sdata:0x804FEDDC; // type:object size:0x4 scope:local +maxExponent = .sdata:0x804FEDE0; // type:object size:0x4 scope:local +__mb_cur_max = .sdata:0x804FEDE4; // type:object size:0x4 scope:global +__OSVersion = .sdata:0x804FF3B0; // type:object size:0x4 scope:global +@116 = .sdata:0x804FF3B4; // type:object size:0x6 scope:local +@163 = .sdata:0x804FF3BC; // type:object size:0x4 scope:local +__OSCurrHeap = .sdata:0x804FF3C0; // type:object size:0x4 scope:global +__OSArenaLo = .sdata:0x804FF3C8; // type:object size:0x4 scope:local +__OSFpscrEnableBits = .sdata:0x804FF3D0; // type:object size:0x4 scope:global +@76 = .sdata:0x804FF3D4; // type:object size:0x2 scope:local +@213 = .sdata:0x804FF3D8; // type:object size:0x3 scope:local +FontEncode = .sdata:0x804FF3E0; // type:object size:0x2 scope:local +SwitchThreadCallback = .sdata:0x804FF3E8; // type:object size:0x4 scope:local +@833 = .sdata:0x804FF3EC; // type:object size:0x1 scope:local +Unit01 = .sdata:0x804FF3F8; // type:object size:0x8 scope:local +@118 = .sdata:0x804FF400; // type:object size:0x8 scope:local +__DVDVersion = .sdata:0x804FF408; // type:object size:0x4 scope:global +autoInvalidation = .sdata:0x804FF40C; // type:object size:0x4 scope:local +checkOptionalCommand = .sdata:0x804FF410; // type:object size:0x4 scope:local +@23 = .sdata:0x804FF414; // type:object size:0x6 scope:local +DmaCommand = .sdata:0x804FF41C; // type:object size:0x4 scope:local +@790 = .sdata:0x804FF420; // type:object size:0x1 scope:local +@63 = .sdata:0x804FF428; // type:object size:0x1 scope:local +@64 = .sdata:0x804FF42C; // type:object size:0x5 scope:local +@65 = .sdata:0x804FF434; // type:object size:0x5 scope:local +@67 = .sdata:0x804FF43C; // type:object size:0x7 scope:local +@68 = .sdata:0x804FF444; // type:object size:0x7 scope:local +@77 = .sdata:0x804FF44C; // type:object size:0x8 scope:local +@99 = .sdata:0x804FF454; // type:object size:0x6 scope:local +@100 = .sdata:0x804FF45C; // type:object size:0x2 scope:local +@37 = .sdata:0x804FF468; // type:object size:0x2 scope:local +@42 = .sdata:0x804FF46C; // type:object size:0x4 scope:local +@43 = .sdata:0x804FF470; // type:object size:0x3 scope:local +FirstRead = .sdata:0x804FF478; // type:object size:0x4 scope:local +__VIVersion = .sdata:0x804FF480; // type:object size:0x4 scope:global +@537 = .sdata:0x804FF484; // type:object size:0x5 scope:local +__PADVersion = .sdata:0x804FF490; // type:object size:0x4 scope:global +ResettingChan = .sdata:0x804FF494; // type:object size:0x4 scope:local +XPatchBits = .sdata:0x804FF498; // type:object size:0x4 scope:local +AnalogMode = .sdata:0x804FF49C; // type:object size:0x4 scope:local +Spec = .sdata:0x804FF4A0; // type:object size:0x4 scope:local +MakeStatus = .sdata:0x804FF4A4; // type:object size:0x4 scope:local +CmdReadOrigin = .sdata:0x804FF4A8; // type:object size:0x4 scope:local +CmdCalibrate = .sdata:0x804FF4AC; // type:object size:0x4 scope:local +__AIVersion = .sdata:0x804FF4B0; // type:object size:0x4 scope:global +__ARVersion = .sdata:0x804FF4B8; // type:object size:0x4 scope:global +__CARDVendorID = .sdata:0x804FF4C0; // type:object size:0x2 scope:global +__CARDPermMask = .sdata:0x804FF4C2; // type:object size:0x1 scope:global +__CARDVersion = .sdata:0x804FF4C8; // type:object size:0x4 scope:global +next = .sdata:0x804FF4D0; // type:object size:0x4 scope:local +__GXVersion = .sdata:0x804FF4D8; // type:object size:0x4 scope:global +tbl1$241 = .sdata:0x804FF4E0; // type:object size:0x4 scope:local +tbl2$242 = .sdata:0x804FF4E4; // type:object size:0x4 scope:local +tbl3$243 = .sdata:0x804FF4E8; // type:object size:0x4 scope:local +GXTexMode0Ids = .sdata:0x804FF4F0; // type:object size:0x8 scope:local +GXTexMode1Ids = .sdata:0x804FF4F8; // type:object size:0x8 scope:local +GXTexImage0Ids = .sdata:0x804FF500; // type:object size:0x8 scope:local +GXTexImage1Ids = .sdata:0x804FF508; // type:object size:0x8 scope:local +GXTexImage2Ids = .sdata:0x804FF510; // type:object size:0x8 scope:local +GXTexImage3Ids = .sdata:0x804FF518; // type:object size:0x8 scope:local +GXTexTlutIds = .sdata:0x804FF520; // type:object size:0x8 scope:local +GX2HWFiltConv = .sdata:0x804FF528; // type:object size:0x6 scope:local +HW2GXFiltConv = .sdata:0x804FF530; // type:object size:0x8 scope:local +__EXIVersion = .sdata:0x804FF538; // type:object size:0x4 scope:global +@480 = .sdata:0x804FF53C; // type:object size:0x5 scope:local +@481 = .sdata:0x804FF544; // type:object size:0x6 scope:local +@482 = .sdata:0x804FF54C; // type:object size:0x7 scope:local +@483 = .sdata:0x804FF554; // type:object size:0x5 scope:local +@484 = .sdata:0x804FF55C; // type:object size:0x7 scope:local +@488 = .sdata:0x804FF564; // type:object size:0x4 scope:local +@491 = .sdata:0x804FF568; // type:object size:0x8 scope:local +__SIVersion = .sdata:0x804FF570; // type:object size:0x4 scope:global +@458 = .sdata:0x804FF574; // type:object size:0x5 scope:local +@469 = .sdata:0x804FF57C; // type:object size:0x8 scope:local +SendCount = .sdata:0x804FF588; // type:object size:0x1 scope:local +pucEXI2InputPending = .sdata:0x804FF590; // type:object size:0x4 scope:local +exi = .sdata:0x804FF598; // type:object size:0x4 scope:local +_3Vp6.gAllocator = .sdata:0x804FF5A0; // type:object size:0x4 scope:local +CurrentFrame = .sdata:0x804FF5A8; // type:object size:0x4 scope:global +f128 = .sdata:0x804FF5B0; // type:object size:0x4 scope:local +f64 = .sdata:0x804FF5B4; // type:object size:0x4 scope:local +_4Path.pfstate = .sdata:0x804FF5B8; // type:object size:0x4 scope:global +_4Path.songprogress = .sdata:0x804FF5BC; // type:object size:0x4 scope:global +_4Path.eventrelease = .sdata:0x804FF5C0; // type:object size:0x4 scope:global +_4Path.eventaction = .sdata:0x804FF5C4; // type:object size:0x4 scope:global +_4Path.inited = .sdata:0x804FF5C8; // type:object size:0x1 scope:global +_4Path.paused = .sdata:0x804FF5C9; // type:object size:0x1 scope:global +_4Path.volscale = .sdata:0x804FF5CA; // type:object size:0x1 scope:global +_4Path.bankservice = .sdata:0x804FF5CB; // type:object size:0x1 scope:global +_4Path.timercallsinarow = .sdata:0x804FF5CC; // type:object size:0x4 scope:global +_4Path.lasttimercb = .sdata:0x804FF5D0; // type:object size:0x4 scope:global +_4Path.milliseconds = .sdata:0x804FF5D4; // type:object size:0x4 scope:global +_4Path.debugchannels = .sdata:0x804FF5D8; // type:object size:0x4 scope:global +_4Path.defaultfxbus = .sdata:0x804FF5DC; // type:object size:0x4 scope:global +_4Path.memalloc = .sdata:0x804FF5E0; // type:object size:0x4 scope:global +_4Path.memfree = .sdata:0x804FF5E4; // type:object size:0x4 scope:global +_4Path.timercalls = .sdata:0x804FF5E8; // type:object size:0x4 scope:global +_4Path.timertimespent = .sdata:0x804FF5EC; // type:object size:0x4 scope:global +_4Path.taskcalls = .sdata:0x804FF5F0; // type:object size:0x4 scope:global +_4Path.tasktimespent = .sdata:0x804FF5F4; // type:object size:0x4 scope:global +_Q24Path11IPathToReal.realimp = .sdata:0x804FF5F8; // type:object size:0x4 scope:global +_Q24Path10IPathToSnd.sndimp = .sdata:0x804FF5FC; // type:object size:0x4 scope:global +pathsemaphore = .sdata:0x804FF600; // type:object size:0x4 scope:global +_16PathToIAllocator.memimp = .sdata:0x804FF604; // type:object size:0x4 scope:global +lastwhile.78 = .sdata:0x804FF608; // type:object size:0x4 scope:local +lastendif.79 = .sdata:0x804FF60C; // type:object size:0x4 scope:local +pDeviceMem = .sdata:0x804FF610; // type:object size:0x4 scope:local +bIsFileSysInitialized = .sdata:0x804FF618; // type:object size:0x4 scope:global +request = .sdata:0x804FF61C; // type:object size:0x4 scope:local +libdevice = .sdata:0x804FF620; // type:object size:0x8 scope:global +bIsTimerInited = .sdata:0x804FF629; // type:object size:0x1 scope:local +TimesInited = .sdata:0x804FF630; // type:object size:0x4 scope:global +reentry.39 = .sdata:0x804FF638; // type:object size:0x4 scope:local +lastsystemtask.46 = .sdata:0x804FF63C; // type:object size:0x4 scope:local +vblticks = .sdata:0x804FF640; // type:object size:0x4 scope:global +TIMERhz = .sdata:0x804FF644; // type:object size:0x4 scope:global +ticks = .sdata:0x804FF648; // type:object size:0x4 scope:global +libticks = .sdata:0x804FF64C; // type:object size:0x4 scope:global +_11RealFontOld.gFontDriver = .sdata:0x804FF658; // type:object size:0x4 scope:global +_Q29RealShape9MemObject.sAllocator = .sdata:0x804FF65C; // type:object size:0x4 scope:global +_11RealmcIface.gInstance = .sdata:0x804FF660; // type:object size:0x4 scope:local +_6Realmc.gAllocator = .sdata:0x804FF664; // type:object size:0x4 scope:local +slotA.384 = .sdata:0x804FF668; // type:object size:0x4 scope:local +slotB.385 = .sdata:0x804FF66C; // type:object size:0x4 scope:local +_11RealmcIface.ALL_ENTRIES = .sdata:0x804FF670; // type:object size:0x4 scope:global +_Q26Realmc6Locale.gTrcMsgBufferIndex = .sdata:0x804FF674; // type:object size:0x4 scope:local +_Q26Realmc6Locale.gLocaleCallback = .sdata:0x804FF678; // type:object size:0x4 scope:local +_Q26Realmc8GCDriver.MEMCARD_SECTOR_SIZE = .sdata:0x804FF67C; // type:object size:0x4 scope:global +_Q26Realmc8GCDriver.mMounted = .sdata:0x804FF680; // type:object size:0x4 scope:global +_Q26Realmc8GCDriver.mIsCardPresent = .sdata:0x804FF684; // type:object size:0x4 scope:global +_Q26Realmc8GCDriver.mWasCardPresent = .sdata:0x804FF688; // type:object size:0x4 scope:global +_6Realmc.FILENAME_ALL_FILES = .sdata:0x804FF68C; // type:object size:0x4 scope:global +_Q26Realmc11GCInterface.mpDriver = .sdata:0x804FF690; // type:object size:0x4 scope:global +_Q26Realmc11GCInterface.mUserMsg = .sdata:0x804FF694; // type:object size:0x4 scope:global +_6Realmc.gInterfaceThread = .sdata:0x804FF698; // type:object size:0x4 scope:global +_6Realmc.gInterfaceMutex = .sdata:0x804FF69C; // type:object size:0x4 scope:global +_Q26Realmc11GCInterface.mExitThread = .sdata:0x804FF6A0; // type:object size:0x4 scope:global +_Q26Realmc11GCInterface.mpNewTaskMsg = .sdata:0x804FF6A4; // type:object size:0x4 scope:global +_6Realmc.gInterface = .sdata:0x804FF6A8; // type:object size:0x4 scope:global +abort_handler_fn = .sdata:0x804FF6AC; // type:object size:0x4 scope:local +_9RealInput.gInterface = .sdata:0x804FF6B0; // type:object size:0x4 scope:global +_9RealInput.gAllocator = .sdata:0x804FF6B8; // type:object size:0x4 scope:global +_9RealInput.gPadUpdate = .sdata:0x804FF6C0; // type:object size:0x4 scope:global +_9RealInput.gResetBit = .sdata:0x804FF6C8; // type:object size:0x4 scope:global +g_vmBaseVMARAM = .sdata:0x804FF6D0; // type:object size:0x4 scope:local +g_vmFreePagesExist = .sdata:0x804FF6D8; // type:object size:0x4 scope:local +g_vmPageReplacementPolicy = .sdata:0x804FF6DC; // type:object size:0x4 scope:local +@252 = .sdata:0x804FF888; // type:object size:0x4 scope:local +__ARQVersion = .sdata:0x804FF890; // type:object size:0x4 scope:global +__AXVersion = .sdata:0x804FF898; // type:object size:0x4 scope:global +axDspSlaveLength = .sdata:0x804FF8A0; // type:object size:0x2 scope:global +__DSPVersion = .sdata:0x804FF8A8; // type:object size:0x4 scope:global +_SDA_BASE_ = .sdata:0x80506DC0; // type:object scope:global +_SDA2_BASE_ = .sdata:0x80516DC0; // type:object scope:global +g_lgInitialized = .sbss:0x804FF8C0; // type:object size:0x4 scope:local +_f_sbss = .sbss:0x804FF8C0; // type:object scope:global +__sbss_start = .sbss:0x804FF8C0; // type:object scope:global +g_bGammaInitialized = .sbss:0x804FF8C4; // type:object size:0x4 scope:local +jumbleeffectid$1040 = .sbss:0x804FF8C8; // type:object size:0x4 scope:local +createcount$1041 = .sbss:0x804FF8CC; // type:object size:0x4 scope:local +g_bWaveTablesInitialized = .sbss:0x804FF8D0; // type:object size:0x4 scope:local +BootInfo = .sbss:0x804FF8D8; // type:object size:0x4 scope:local +BI2DebugFlag = .sbss:0x804FF8DC; // type:object size:0x4 scope:local +BI2DebugFlagHolder = .sbss:0x804FF8E0; // type:object size:0x4 scope:local +__OSIsGcam = .sbss:0x804FF8E4; // type:object size:0x4 scope:global +ZeroF = .sbss:0x804FF8E8; // type:object size:0x8 scope:local +ZeroPS = .sbss:0x804FF8F0; // type:object size:0x8 scope:local +AreWeInitialized = .sbss:0x804FF8F8; // type:object size:0x4 scope:local +OSExceptionTable = .sbss:0x804FF8FC; // type:object size:0x4 scope:local +__OSInIPL = .sbss:0x804FF900; // type:object size:0x4 scope:global +__OSStartTime = .sbss:0x804FF908; // type:object size:0x8 scope:global +AlarmQueue = .sbss:0x804FF910; // type:object size:0x8 scope:local +HeapArray = .sbss:0x804FF918; // type:object size:0x4 scope:local +NumHeaps = .sbss:0x804FF91C; // type:object size:0x4 scope:local +ArenaStart = .sbss:0x804FF920; // type:object size:0x4 scope:local +ArenaEnd = .sbss:0x804FF924; // type:object size:0x4 scope:local +__OSArenaHi = .sbss:0x804FF928; // type:object size:0x4 scope:local +Prepared = .sbss:0x804FF930; // type:object size:0x4 scope:local +apploaderPosition$69 = .sbss:0x804FF934; // type:object size:0x4 scope:local +FontDataAnsi = .sbss:0x804FF938; // type:object size:0x4 scope:local +FontDataSjis = .sbss:0x804FF93C; // type:object size:0x4 scope:local +FixedPitch = .sbss:0x804FF940; // type:object size:0x4 scope:local +ParseString = .sbss:0x804FF944; // type:object size:0x4 scope:local +InterruptHandlerTable = .sbss:0x804FF948; // type:object size:0x4 scope:local +__OSLastInterruptSrr0 = .sbss:0x804FF94C; // type:object size:0x4 scope:global +__OSLastInterrupt = .sbss:0x804FF950; // type:object size:0x2 scope:global +__OSLastInterruptTime = .sbss:0x804FF958; // type:object size:0x8 scope:global +SaveStart = .sbss:0x804FF960; // type:object size:0x4 scope:local +SaveEnd = .sbss:0x804FF964; // type:object size:0x4 scope:local +ResetFunctionQueue = .sbss:0x804FF968; // type:object size:0x8 scope:local +bootThisDol = .sbss:0x804FF970; // type:object size:0x4 scope:local +ResetCallback = .sbss:0x804FF978; // type:object size:0x4 scope:local +Down = .sbss:0x804FF97C; // type:object size:0x4 scope:local +LastState = .sbss:0x804FF980; // type:object size:0x4 scope:local +HoldUp = .sbss:0x804FF988; // type:object size:0x8 scope:local +HoldDown = .sbss:0x804FF990; // type:object size:0x8 scope:local +RunQueueBits = .sbss:0x804FF998; // type:object size:0x4 scope:local +RunQueueHint = .sbss:0x804FF99C; // type:object size:0x4 scope:local +Reschedule = .sbss:0x804FF9A0; // type:object size:0x4 scope:local +__DBInterface = .sbss:0x804FF9A8; // type:object size:0x4 scope:global +DBVerbose = .sbss:0x804FF9AC; // type:object size:0x4 scope:global +BootInfo = .sbss:0x804FF9B0; // type:object size:0x4 scope:local +FstStart = .sbss:0x804FF9B4; // type:object size:0x4 scope:local +FstStringStart = .sbss:0x804FF9B8; // type:object size:0x4 scope:local +MaxEntryNum = .sbss:0x804FF9BC; // type:object size:0x4 scope:local +currentDirectory = .sbss:0x804FF9C0; // type:object size:0x4 scope:local +__DVDLongFileNameFlag = .sbss:0x804FF9C4; // type:object size:0x4 scope:global +__DVDThreadQueue = .sbss:0x804FF9C8; // type:object size:0x8 scope:global +executing = .sbss:0x804FF9D0; // type:object size:0x4 scope:local +IDShouldBe = .sbss:0x804FF9D4; // type:object size:0x4 scope:local +bootInfo = .sbss:0x804FF9D8; // type:object size:0x4 scope:local +PauseFlag = .sbss:0x804FF9DC; // type:object size:0x4 scope:local +PausingFlag = .sbss:0x804FF9E0; // type:object size:0x4 scope:local +AutoFinishing = .sbss:0x804FF9E4; // type:object size:0x4 scope:local +FatalErrorFlag = .sbss:0x804FF9E8; // type:object size:0x4 scope:local +CurrCommand = .sbss:0x804FF9EC; // type:object size:0x4 scope:local +Canceling = .sbss:0x804FF9F0; // type:object size:0x4 scope:local +CancelCallback = .sbss:0x804FF9F4; // type:object size:0x4 scope:local +ResumeFromHere = .sbss:0x804FF9F8; // type:object size:0x4 scope:local +CancelLastError = .sbss:0x804FF9FC; // type:object size:0x4 scope:local +LastError = .sbss:0x804FFA00; // type:object size:0x4 scope:local +NumInternalRetry = .sbss:0x804FFA04; // type:object size:0x4 scope:local +ResetRequired = .sbss:0x804FFA08; // type:object size:0x4 scope:local +CancelAllSyncComplete = .sbss:0x804FFA0C; // type:object size:0x4 scope:local +ResetCount = .sbss:0x804FFA10; // type:object size:0x4 scope:local +FirstTimeInBootrom = .sbss:0x804FFA14; // type:object size:0x4 scope:local +MotorState = .sbss:0x804FFA18; // type:object size:0x4 scope:local +DVDInitialized = .sbss:0x804FFA1C; // type:object size:0x4 scope:local +immCount$360 = .sbss:0x804FFA20; // type:object size:0x4 scope:local +dmaCount$362 = .sbss:0x804FFA24; // type:object size:0x4 scope:local +LastState = .sbss:0x804FFA28; // type:object size:0x4 scope:global +FatalFunc = .sbss:0x804FFA30; // type:object size:0x4 scope:local +status = .sbss:0x804FFA38; // type:object size:0x4 scope:local +bb2 = .sbss:0x804FFA3C; // type:object size:0x4 scope:local +idTmp = .sbss:0x804FFA40; // type:object size:0x4 scope:local +StopAtNextInt = .sbss:0x804FFA48; // type:object size:0x4 scope:local +LastLength = .sbss:0x804FFA4C; // type:object size:0x4 scope:local +Callback = .sbss:0x804FFA50; // type:object size:0x4 scope:local +ResetCoverCallback = .sbss:0x804FFA54; // type:object size:0x4 scope:local +LastResetEnd = .sbss:0x804FFA58; // type:object size:0x8 scope:local +ResetOccurred = .sbss:0x804FFA60; // type:object size:0x4 scope:local +WaitingCoverClose = .sbss:0x804FFA64; // type:object size:0x4 scope:local +Breaking = .sbss:0x804FFA68; // type:object size:0x4 scope:local +WorkAroundType = .sbss:0x804FFA6C; // type:object size:0x4 scope:local +WorkAroundSeekLocation = .sbss:0x804FFA70; // type:object size:0x4 scope:local +LastReadFinished = .sbss:0x804FFA78; // type:object size:0x8 scope:local +LastReadIssued = .sbss:0x804FFA80; // type:object size:0x8 scope:local +LastCommandWasRead = .sbss:0x804FFA88; // type:object size:0x4 scope:local +NextCommandNumber = .sbss:0x804FFA8C; // type:object size:0x4 scope:local +IsInitialized = .sbss:0x804FFA90; // type:object size:0x4 scope:local +retraceCount = .sbss:0x804FFA94; // type:object size:0x4 scope:local +flushFlag = .sbss:0x804FFA98; // type:object size:0x4 scope:local +retraceQueue = .sbss:0x804FFA9C; // type:object size:0x8 scope:local +PreCB = .sbss:0x804FFAA4; // type:object size:0x4 scope:local +PostCB = .sbss:0x804FFAA8; // type:object size:0x4 scope:local +PositionCallback = .sbss:0x804FFAAC; // type:object size:0x4 scope:local +encoderType = .sbss:0x804FFAB0; // type:object size:0x4 scope:local +displayOffsetH = .sbss:0x804FFAB4; // type:object size:0x2 scope:local +displayOffsetV = .sbss:0x804FFAB6; // type:object size:0x2 scope:local +changeMode = .sbss:0x804FFAB8; // type:object size:0x4 scope:local +changed = .sbss:0x804FFAC0; // type:object size:0x8 scope:local +shdwChangeMode = .sbss:0x804FFAC8; // type:object size:0x4 scope:local +shdwChanged = .sbss:0x804FFAD0; // type:object size:0x8 scope:local +CurrTiming = .sbss:0x804FFAD8; // type:object size:0x4 scope:local +CurrTvMode = .sbss:0x804FFADC; // type:object size:0x4 scope:local +NextBufAddr = .sbss:0x804FFAE0; // type:object size:0x4 scope:local +CurrBufAddr = .sbss:0x804FFAE4; // type:object size:0x4 scope:local +FBSet = .sbss:0x804FFAE8; // type:object size:0x4 scope:local +timingExtra = .sbss:0x804FFAEC; // type:object size:0x4 scope:local +message$351 = .sbss:0x804FFAF0; // type:object size:0x4 scope:local +Initialized = .sbss:0x804FFB00; // type:object size:0x4 scope:local +EnabledBits = .sbss:0x804FFB04; // type:object size:0x4 scope:local +ResettingBits = .sbss:0x804FFB08; // type:object size:0x4 scope:local +RecalibrateBits = .sbss:0x804FFB0C; // type:object size:0x4 scope:local +WaitingBits = .sbss:0x804FFB10; // type:object size:0x4 scope:local +CheckingBits = .sbss:0x804FFB14; // type:object size:0x4 scope:local +PendingBits = .sbss:0x804FFB18; // type:object size:0x4 scope:local +BarrelBits = .sbss:0x804FFB1C; // type:object size:0x4 scope:local +CmdTypeAndStatus = .sbss:0x804FFB20; // type:object size:0x4 scope:local +SamplingCallback = .sbss:0x804FFB24; // type:object size:0x4 scope:local +recalibrated$388 = .sbss:0x804FFB28; // type:object size:0x4 scope:local +__PADSpec = .sbss:0x804FFB2C; // type:object size:0x4 scope:global +__AIS_Callback = .sbss:0x804FFB30; // type:object size:0x4 scope:local +__AID_Callback = .sbss:0x804FFB34; // type:object size:0x4 scope:local +__CallbackStack = .sbss:0x804FFB38; // type:object size:0x4 scope:local +__OldStack = .sbss:0x804FFB3C; // type:object size:0x4 scope:local +__AI_init_flag = .sbss:0x804FFB40; // type:object size:0x4 scope:local +__AID_Active = .sbss:0x804FFB44; // type:object size:0x4 scope:local +bound_32KHz = .sbss:0x804FFB48; // type:object size:0x8 scope:local +bound_48KHz = .sbss:0x804FFB50; // type:object size:0x8 scope:local +min_wait = .sbss:0x804FFB58; // type:object size:0x8 scope:local +max_wait = .sbss:0x804FFB60; // type:object size:0x8 scope:local +buffer = .sbss:0x804FFB68; // type:object size:0x8 scope:local +__AR_Callback = .sbss:0x804FFB70; // type:object size:0x4 scope:local +__AR_Size = .sbss:0x804FFB74; // type:object size:0x4 scope:local +__AR_InternalSize = .sbss:0x804FFB78; // type:object size:0x4 scope:local +__AR_ExpansionSize = .sbss:0x804FFB7C; // type:object size:0x4 scope:local +__AR_StackPointer = .sbss:0x804FFB80; // type:object size:0x4 scope:local +__AR_FreeBlocks = .sbss:0x804FFB84; // type:object size:0x4 scope:local +__AR_BlockLength = .sbss:0x804FFB88; // type:object size:0x4 scope:local +__AR_init_flag = .sbss:0x804FFB8C; // type:object size:0x4 scope:local +__CARDEncode = .sbss:0x804FFB90; // type:object size:0x2 scope:local +__CARDFastMode = .sbss:0x804FFB92; // type:object size:0x2 scope:local +__piReg = .sbss:0x804FFB98; // type:object size:0x4 scope:global +__cpReg = .sbss:0x804FFB9C; // type:object size:0x4 scope:global +__peReg = .sbss:0x804FFBA0; // type:object size:0x4 scope:global +__memReg = .sbss:0x804FFBA4; // type:object size:0x4 scope:global +peCount$35 = .sbss:0x804FFBA8; // type:object size:0x4 scope:local +time$36 = .sbss:0x804FFBB0; // type:object size:0x8 scope:local +calledOnce$37 = .sbss:0x804FFBB8; // type:object size:0x4 scope:local +resetFuncRegistered$145 = .sbss:0x804FFBBC; // type:object size:0x4 scope:local +CPUFifo = .sbss:0x804FFBC0; // type:object size:0x4 scope:local +GPFifo = .sbss:0x804FFBC4; // type:object size:0x4 scope:local +__GXCurrentThread = .sbss:0x804FFBC8; // type:object size:0x4 scope:local +CPGPLinked = .sbss:0x804FFBCC; // type:object size:0x1 scope:local +GXOverflowSuspendInProgress = .sbss:0x804FFBD0; // type:object size:0x4 scope:local +BreakPointCB = .sbss:0x804FFBD4; // type:object size:0x4 scope:local +__GXOverflowCount = .sbss:0x804FFBD8; // type:object size:0x4 scope:local +TokenCB = .sbss:0x804FFBE0; // type:object size:0x4 scope:local +DrawDoneCB = .sbss:0x804FFBE4; // type:object size:0x4 scope:local +DrawDone = .sbss:0x804FFBE8; // type:object size:0x1 scope:local +FinishQueue = .sbss:0x804FFBEC; // type:object size:0x8 scope:local +OldCPUFifo = .sbss:0x804FFBF8; // type:object size:0x4 scope:local +IDSerialPort1 = .sbss:0x804FFC00; // type:object size:0x4 scope:local +Chan = .sbss:0x804FFC08; // type:object size:0x4 scope:local +Dev = .sbss:0x804FFC0C; // type:object size:0x4 scope:local +Enabled = .sbss:0x804FFC10; // type:object size:0x4 scope:local +BarnacleEnabled = .sbss:0x804FFC14; // type:object size:0x4 scope:local +cmdTypeAndStatus$78 = .sbss:0x804FFC18; // type:object size:0x4 scope:local +cmdTypeAndStatus$372 = .sbss:0x804FFC1C; // type:object size:0x4 scope:local +__PADFixBits = .sbss:0x804FFC20; // type:object size:0x4 scope:global +SamplingRate = .sbss:0x804FFC28; // type:object size:0x4 scope:local +initialized$3 = .sbss:0x804FFC30; // type:object size:0x4 scope:local +count$46 = .sbss:0x804FFC34; // type:object size:0x4 scope:local +__SIResetSteering = .sbss:0x804FFC38; // type:object size:0x4 scope:global +SamplingCallback = .sbss:0x804FFC40; // type:object size:0x4 scope:local +__SISteeringEnableBits = .sbss:0x804FFC44; // type:object size:0x4 scope:global +MTRCallback = .sbss:0x804FFC48; // type:object size:0x4 scope:local +DBGCallback = .sbss:0x804FFC4C; // type:object size:0x4 scope:local +SendMailData = .sbss:0x804FFC50; // type:object size:0x4 scope:local +RecvDataLeng = .sbss:0x804FFC54; // type:object size:0x4 scope:local +pEXIInputFlag = .sbss:0x804FFC58; // type:object size:0x4 scope:local +EXIInputFlag = .sbss:0x804FFC5C; // type:object size:0x1 scope:local +ucEXI2InputPending = .sbss:0x804FFC60; // type:object size:0x1 scope:local +fExi2Selected = .sbss:0x804FFC64; // type:object size:0x4 scope:local +TRK_Callback = .sbss:0x804FFC68; // type:object size:0x4 scope:local +RCMP_global_VP6_skipK = .sbss:0x804FFC6C; // type:label scope:global +RCMP_global_VP6_skipK_frameNo = .sbss:0x804FFC70; // type:label scope:global +maddataptr = .sbss:0x804FFC74; // type:label scope:global +madshiftreg = .sbss:0x804FFC78; // type:label scope:global +madbitcount = .sbss:0x804FFC7C; // type:label scope:global +initflag = .sbss:0x804FFC80; // type:label scope:local +motionframe = .sbss:0x804FFC84; // type:label scope:local +CPUFrequency = .sbss:0x804FFC88; // type:label size:0x4 scope:global +FilteringVert_12 = .sbss:0x804FFC8C; // type:label size:0x4 scope:global +FilteringHoriz_12 = .sbss:0x804FFC90; // type:label size:0x4 scope:global +FilteringVert_8 = .sbss:0x804FFC94; // type:label size:0x4 scope:global +FilteringHoriz_8 = .sbss:0x804FFC98; // type:label size:0x4 scope:global +VerticalBand_4_5_Scale = .sbss:0x804FFC9C; // type:label size:0x4 scope:global +LastVerticalBand_4_5_Scale = .sbss:0x804FFCA0; // type:label size:0x4 scope:global +VerticalBand_3_5_Scale = .sbss:0x804FFCA4; // type:label size:0x4 scope:global +LastVerticalBand_3_5_Scale = .sbss:0x804FFCA8; // type:label size:0x4 scope:global +HorizontalLine_1_2_Scale = .sbss:0x804FFCAC; // type:label size:0x4 scope:global +HorizontalLine_3_5_Scale = .sbss:0x804FFCB0; // type:label size:0x4 scope:global +HorizontalLine_4_5_Scale = .sbss:0x804FFCB4; // type:label size:0x4 scope:global +VerticalBand_1_2_Scale = .sbss:0x804FFCB8; // type:label size:0x4 scope:global +LastVerticalBand_1_2_Scale = .sbss:0x804FFCBC; // type:label size:0x4 scope:global +FilterHoriz_Simple = .sbss:0x804FFCC0; // type:label size:0x4 scope:global +FilterVert_Simple = .sbss:0x804FFCC4; // type:label size:0x4 scope:global +DeringBlockWeak = .sbss:0x804FFCC8; // type:label size:0x4 scope:global +DeringBlockStrong = .sbss:0x804FFCCC; // type:label size:0x4 scope:global +DeblockLoopFilteredBand = .sbss:0x804FFCD0; // type:label size:0x4 scope:global +DeblockNonFilteredBand = .sbss:0x804FFCD4; // type:label size:0x4 scope:global +DeblockNonFilteredBandNewFilter = .sbss:0x804FFCD8; // type:label size:0x4 scope:global +SetupBoundingValueArray = .sbss:0x804FFCDC; // type:label size:0x4 scope:global +SetupDeblockValueArray = .sbss:0x804FFCE0; // type:label size:0x4 scope:global +FilterHoriz = .sbss:0x804FFCE4; // type:label size:0x4 scope:global +FilterVert = .sbss:0x804FFCE8; // type:label size:0x4 scope:global +ClampLevels = .sbss:0x804FFCEC; // type:label size:0x4 scope:global +FastDeInterlace = .sbss:0x804FFCF0; // type:label size:0x4 scope:global +PlaneAddNoise = .sbss:0x804FFCF4; // type:label size:0x4 scope:global +VP6_BuildQuantIndex = .sbss:0x804FFCF8; // type:label size:0x4 scope:global +ReconIntra = .sbss:0x804FFCFC; // type:label size:0x4 scope:global +ReconInter = .sbss:0x804FFD00; // type:label size:0x4 scope:global +ReconInterHalfPixel2 = .sbss:0x804FFD04; // type:label size:0x4 scope:global +ClearSysState = .sbss:0x804FFD08; // type:label size:0x4 scope:global +ReconBlock = .sbss:0x804FFD0C; // type:label size:0x4 scope:global +SubtractBlock = .sbss:0x804FFD10; // type:label size:0x4 scope:global +UnpackBlock = .sbss:0x804FFD14; // type:label size:0x4 scope:global +AverageBlock = .sbss:0x804FFD18; // type:label size:0x4 scope:global +CopyBlock = .sbss:0x804FFD1C; // type:label size:0x4 scope:global +Copy12x12 = .sbss:0x804FFD20; // type:label size:0x4 scope:global +FilterBlockBil_8 = .sbss:0x804FFD24; // type:label size:0x4 scope:global +FilterBlock = .sbss:0x804FFD28; // type:label size:0x4 scope:global +DCQuantScaleV2 = .sbss:0x804FFD2C; // type:label size:0x4 scope:global +DCQuantScaleUV = .sbss:0x804FFD30; // type:label size:0x4 scope:global +DCQuantScaleV1 = .sbss:0x804FFD34; // type:label size:0x4 scope:global +DeblockLimitValuesV2 = .sbss:0x804FFD38; // type:label size:0x4 scope:global +LoopFilterLimitValuesV2 = .sbss:0x804FFD3C; // type:label size:0x4 scope:global +gpFileSysInfo = .sbss:0x804FFD40; // type:label size:0x4 scope:local +numrequests = .sbss:0x804FFD44; // type:label size:0x4 scope:local +freequeue = .sbss:0x804FFD48; // type:label size:0x8 scope:local +requestidcounter = .sbss:0x804FFD50; // type:label size:0x4 scope:local +g_thMain = .sbss:0x804FFD54; // type:label size:0x4 scope:global +_.tmp_0.609 = .sbss:0x804FFD58; // type:label size:0x4 scope:local +_.tmp_0.636 = .sbss:0x804FFD5C; // type:label size:0x4 scope:local +_9RealInput.sGcOriginalSamplingCallback = .sbss:0x804FFD60; // type:label size:0x4 scope:local +g_vmSizeVMMainMemory = .sbss:0x804FFD68; // type:object size:0x4 scope:local +g_vmBaseVMMainMemory = .sbss:0x804FFD6C; // type:object size:0x4 scope:local +g_vmSizeVMARAM = .sbss:0x804FFD70; // type:object size:0x4 scope:local +g_vmNumPagesInMRAM = .sbss:0x804FFD74; // type:object size:0x4 scope:local +g_cbLogStats = .sbss:0x804FFD78; // type:object size:0x4 scope:local +g_vmInitialized = .sbss:0x804FFD7C; // type:object size:0x4 scope:local +nextPageToCheck$357 = .sbss:0x804FFD80; // type:object size:0x4 scope:local +g_vmNextPageToSwap = .sbss:0x804FFD88; // type:object size:0x4 scope:local +g_baseARAMtoVM = .sbss:0x804FFD90; // type:object size:0x4 scope:local +g_baseVMtoARAM = .sbss:0x804FFD94; // type:object size:0x4 scope:local +g_totalAllocatedVM = .sbss:0x804FFD98; // type:object size:0x4 scope:local +g_nextARAMPageToCheck$233 = .sbss:0x804FFD9C; // type:object size:0x4 scope:local +__ARQRequestQueueHi = .sbss:0x804FFDA0; // type:object size:0x4 scope:local +__ARQRequestTailHi = .sbss:0x804FFDA4; // type:object size:0x4 scope:local +__ARQRequestQueueLo = .sbss:0x804FFDA8; // type:object size:0x4 scope:local +__ARQRequestTailLo = .sbss:0x804FFDAC; // type:object size:0x4 scope:local +__ARQRequestQueueTemp = .sbss:0x804FFDB0; // type:object size:0x4 scope:local +__ARQRequestTailTemp = .sbss:0x804FFDB4; // type:object size:0x4 scope:local +__ARQRequestPendingHi = .sbss:0x804FFDB8; // type:object size:0x4 scope:local +__ARQRequestPendingLo = .sbss:0x804FFDBC; // type:object size:0x4 scope:local +__ARQCallbackHi = .sbss:0x804FFDC0; // type:object size:0x4 scope:local +__ARQCallbackLo = .sbss:0x804FFDC4; // type:object size:0x4 scope:local +__ARQChunkSize = .sbss:0x804FFDC8; // type:object size:0x4 scope:local +__ARQ_init_flag = .sbss:0x804FFDCC; // type:object size:0x4 scope:local +__AXCallbackStack = .sbss:0x804FFDD0; // type:object size:0x4 scope:local +__AXCallbackAuxA = .sbss:0x804FFDD8; // type:object size:0x4 scope:local +__AXCallbackAuxB = .sbss:0x804FFDDC; // type:object size:0x4 scope:local +__AXContextAuxA = .sbss:0x804FFDE0; // type:object size:0x4 scope:local +__AXContextAuxB = .sbss:0x804FFDE4; // type:object size:0x4 scope:local +__AXAuxADspWrite = .sbss:0x804FFDE8; // type:object size:0x4 scope:local +__AXAuxADspRead = .sbss:0x804FFDEC; // type:object size:0x4 scope:local +__AXAuxBDspWrite = .sbss:0x804FFDF0; // type:object size:0x4 scope:local +__AXAuxBDspRead = .sbss:0x804FFDF4; // type:object size:0x4 scope:local +__AXAuxDspWritePosition = .sbss:0x804FFDF8; // type:object size:0x4 scope:local +__AXAuxDspReadPosition = .sbss:0x804FFDFC; // type:object size:0x4 scope:local +__AXAuxDspWritePositionDpl2 = .sbss:0x804FFE00; // type:object size:0x4 scope:local +__AXAuxDspReadPositionDpl2 = .sbss:0x804FFE04; // type:object size:0x4 scope:local +__AXAuxCpuReadWritePosition = .sbss:0x804FFE08; // type:object size:0x4 scope:local +__AXCommandListPosition = .sbss:0x804FFE10; // type:object size:0x4 scope:local +__AXClWrite = .sbss:0x804FFE14; // type:object size:0x4 scope:local +__AXCommandListCycles = .sbss:0x804FFE18; // type:object size:0x4 scope:local +__AXCompressor = .sbss:0x804FFE1C; // type:object size:0x4 scope:local +__AXClMode = .sbss:0x804FFE20; // type:object size:0x4 scope:global +__AXOutFrame = .sbss:0x804FFE28; // type:object size:0x4 scope:local +__AXAiDmaFrame = .sbss:0x804FFE2C; // type:object size:0x4 scope:local +__AXOutDspReady = .sbss:0x804FFE30; // type:object size:0x4 scope:local +__AXOsTime = .sbss:0x804FFE38; // type:object size:0x8 scope:local +__AXUserFrameCallback = .sbss:0x804FFE40; // type:object size:0x4 scope:local +__AXDSPInitFlag = .sbss:0x804FFE44; // type:object size:0x4 scope:local +__AXDSPDoneFlag = .sbss:0x804FFE48; // type:object size:0x4 scope:local +__AXDebugSteppingMode = .sbss:0x804FFE4C; // type:object size:0x4 scope:local +__AXOutThreadQueue = .sbss:0x804FFE50; // type:object size:0x8 scope:local +__AXOutputBufferMode = .sbss:0x804FFE58; // type:object size:0x4 scope:local +__AXSpbAL = .sbss:0x804FFE60; // type:object size:0x4 scope:local +__AXSpbAR = .sbss:0x804FFE64; // type:object size:0x4 scope:local +__AXSpbAS = .sbss:0x804FFE68; // type:object size:0x4 scope:local +__AXSpbAAL = .sbss:0x804FFE6C; // type:object size:0x4 scope:local +__AXSpbAAR = .sbss:0x804FFE70; // type:object size:0x4 scope:local +__AXSpbAAS = .sbss:0x804FFE74; // type:object size:0x4 scope:local +__AXSpbABL = .sbss:0x804FFE78; // type:object size:0x4 scope:local +__AXSpbABR = .sbss:0x804FFE7C; // type:object size:0x4 scope:local +__AXSpbABS = .sbss:0x804FFE80; // type:object size:0x4 scope:local +__AXMaxDspCycles = .sbss:0x804FFE88; // type:object size:0x4 scope:local +__AXRecDspCycles = .sbss:0x804FFE8C; // type:object size:0x4 scope:local +__AXNumVoices = .sbss:0x804FFE90; // type:object size:0x4 scope:local +__AXProfile = .sbss:0x804FFE98; // type:object size:0x4 scope:local +__AXMaxProfiles = .sbss:0x804FFE9C; // type:object size:0x4 scope:local +__AXCurrentProfile = .sbss:0x804FFEA0; // type:object size:0x4 scope:local +__AXProfileInitialized = .sbss:0x804FFEA4; // type:object size:0x4 scope:local +__DSP_init_flag = .sbss:0x804FFEA8; // type:object size:0x4 scope:local +t0 = .sbss:0x804FFEB0; // type:object size:0x4 scope:local +t1 = .sbss:0x804FFEB4; // type:object size:0x4 scope:local +t2 = .sbss:0x804FFEB8; // type:object size:0x4 scope:local +__DSP_rude_task_pending = .sbss:0x804FFEBC; // type:object size:0x4 scope:global +__DSP_rude_task = .sbss:0x804FFEC0; // type:object size:0x4 scope:global +__DSP_tmp_task = .sbss:0x804FFEC4; // type:object size:0x4 scope:global +__DSP_last_task = .sbss:0x804FFEC8; // type:object size:0x4 scope:global +__DSP_first_task = .sbss:0x804FFECC; // type:object size:0x4 scope:global +__DSP_curr_task = .sbss:0x804FFED0; // type:object size:0x4 scope:global +g_vmBasePageTable = .sbss:0x804FFED8; // type:object size:0x4 scope:local +g_vmBaseVMReversePageTable = .sbss:0x804FFEDC; // type:object size:0x4 scope:local +g_vmBaseLockedPageTable = .sbss:0x804FFEE0; // type:object size:0x4 scope:local +cbVMSwapPageIn = .sbss:0x804FFEE4; // type:object size:0x4 scope:local +g_baseInitialized = .sbss:0x804FFEE8; // type:object size:0x4 scope:local +g_originalSR7 = .sbss:0x804FFEEC; // type:object size:0x4 scope:local +g_originalSDR1 = .sbss:0x804FFEF0; // type:object size:0x4 scope:local +_12WRoadNetwork.fValidRaceFilter = .sbss:0x804FFEF4; // type:object size:0x4 scope:global +_12WRoadNetwork.fNumSegments = .sbss:0x804FFEF8; // type:object size:0x4 scope:global +_Q33UTL11Collectionst12Instanceable3ZP8HCAUSE__Z6ICausei10._mHNext = .sbss:0x804FFEFC; // type:object size:0x4 scope:global +_12WRoadNetwork.fValidTrafficRoads = .sbss:0x804FFF00; // type:object size:0x4 scope:global +_Q33UTL11Collectionst12Instanceable3ZP10HSIMABLE__Z8ISimablei160._mHNext = .sbss:0x804FFF04; // type:object size:0x4 scope:global +_Q33UTL11Collectionst12Instanceable3ZP11HACTIVITY__ZQ23Sim9IActivityi40._mHNext = .sbss:0x804FFF08; // type:object size:0x4 scope:global +_12WRoadNetwork.fNumRoads = .sbss:0x804FFF0C; // type:object size:0x4 scope:global +_12WRoadNetwork.fNumNodes = .sbss:0x804FFF10; // type:object size:0x4 scope:global +_12WRoadNetwork.fNumProfiles = .sbss:0x804FFF14; // type:object size:0x4 scope:global +_12WRoadNetwork.fNumIntersections = .sbss:0x804FFF18; // type:object size:0x4 scope:global +_12WRoadNetwork.fValid = .sbss:0x804FFF1C; // type:object size:0x4 scope:global +_Q33UTL11Collectionst12Instanceable3ZP8HMODEL__Z6IModeli434._mHNext = .sbss:0x804FFF20; // type:object size:0x4 scope:global +_Q33UTL11Collectionst12Instanceable3ZPQ214EventSequencer9HENGINE__ZQ214EventSequencer7IEnginei434._mHNext = .sbss:0x804FFF24; // type:object size:0x4 scope:global +_13SFXObj_Reverb.m_pFXEditModule = .sbss:0x804FFF28; // type:object size:0x8 scope:global +_7SimTask.mRoot = .sbss:0x804FFF30; // type:object size:0x4 scope:global +errno = .sbss:0x804FFF34; // type:object size:0x4 scope:global +__sbss_end = .sbss:0x804FFF38; // type:object scope:global +_e_sbss = .sbss:0x804FFF38; // type:object scope:global +__SBSS_END__ = .sbss:0x804FFF38; // type:object scope:global +__clz_tab = .sdata2:0x804FFF40; // type:object size:0x100 scope:local +__SDATA2_START__ = .sdata2:0x804FFF40; // type:object scope:global +__clz_tab = .sdata2:0x80500040; // type:object size:0x100 scope:local +__clz_tab = .sdata2:0x80500140; // type:object size:0x100 scope:local +__clz_tab = .sdata2:0x80500240; // type:object size:0x100 scope:local +bp = .sdata2:0x80500340; // type:object size:0x10 scope:local +dp_h = .sdata2:0x80500350; // type:object size:0x10 scope:local +dp_l = .sdata2:0x80500360; // type:object size:0x10 scope:local +halF = .sdata2:0x80500370; // type:object size:0x8 scope:local +ln2HI = .sdata2:0x80500378; // type:object size:0x8 scope:local +ln2LO = .sdata2:0x80500380; // type:object size:0x8 scope:local +Zero = .sdata2:0x80500388; // type:object size:0x8 scope:local +bp = .sdata2:0x80500390; // type:object size:0x8 scope:local +dp_h = .sdata2:0x80500398; // type:object size:0x8 scope:local +dp_l = .sdata2:0x805003A0; // type:object size:0x8 scope:local +atanhi = .sdata2:0x805003A8; // type:object size:0x10 scope:local +atanlo = .sdata2:0x805003B8; // type:object size:0x10 scope:local +aT = .sdata2:0x805003C8; // type:object size:0x2C scope:local +T = .sdata2:0x805003F8; // type:object size:0x34 scope:local +two_over_pi = .sdata2:0x8050042C; // type:object size:0x318 scope:local +npio2_hw = .sdata2:0x80500744; // type:object size:0x80 scope:local +init_jk = .sdata2:0x805007C4; // type:object size:0xC scope:local +PIo2 = .sdata2:0x805007D0; // type:object size:0x2C scope:local +@956 = .sdata2:0x80500800; // type:object size:0x4 scope:local +@957 = .sdata2:0x80500804; // type:object size:0x4 scope:local +@958 = .sdata2:0x80500808; // type:object size:0x4 scope:local +@959 = .sdata2:0x8050080C; // type:object size:0x4 scope:local +@961 = .sdata2:0x80500810; // type:object size:0x8 scope:local +@1129 = .sdata2:0x80500818; // type:object size:0x4 scope:local +@1130 = .sdata2:0x8050081C; // type:object size:0x4 scope:local +@1516 = .sdata2:0x80500820; // type:object size:0x4 scope:local +@1546 = .sdata2:0x80500824; // type:object size:0x4 scope:local +@130 = .sdata2:0x80500828; // type:object size:0x8 scope:local +@96 = .sdata2:0x80500830; // type:object size:0x4 scope:local +@97 = .sdata2:0x80500834; // type:object size:0x4 scope:local +@190 = .sdata2:0x80500838; // type:object size:0x4 scope:local +@191 = .sdata2:0x8050083C; // type:object size:0x4 scope:local +@206 = .sdata2:0x80500840; // type:object size:0x4 scope:local +@215 = .sdata2:0x80500844; // type:object size:0x4 scope:local +@227 = .sdata2:0x80500848; // type:object size:0x4 scope:local +@230 = .sdata2:0x8050084C; // type:object size:0x4 scope:local +@99 = .sdata2:0x80500850; // type:object size:0x4 scope:local +@100 = .sdata2:0x80500854; // type:object size:0x4 scope:local +@101 = .sdata2:0x80500858; // type:object size:0x4 scope:local +@102 = .sdata2:0x8050085C; // type:object size:0x4 scope:local +@105 = .sdata2:0x80500860; // type:object size:0x4 scope:local +@106 = .sdata2:0x80500864; // type:object size:0x4 scope:local +@205 = .sdata2:0x80500868; // type:object size:0x4 scope:local +@113 = .sdata2:0x80500870; // type:object size:0x4 scope:local +@114 = .sdata2:0x80500878; // type:object size:0x8 scope:local +@115 = .sdata2:0x80500880; // type:object size:0x8 scope:local +@116 = .sdata2:0x80500888; // type:object size:0x4 scope:local +@118 = .sdata2:0x8050088C; // type:object size:0x4 scope:local +@119 = .sdata2:0x80500890; // type:object size:0x4 scope:local +@161 = .sdata2:0x80500894; // type:object size:0x4 scope:local +@11 = .sdata2:0x80500898; // type:object size:0x4 scope:local +@12 = .sdata2:0x8050089C; // type:object size:0x4 scope:local +@160 = .sdata2:0x805008A0; // type:object size:0x4 scope:local +@161 = .sdata2:0x805008A8; // type:object size:0x8 scope:local +@162 = .sdata2:0x805008B0; // type:object size:0x8 scope:local +@164 = .sdata2:0x805008B8; // type:object size:0x8 scope:local +__GXData = .sdata2:0x805008C0; // type:object size:0x4 scope:global +@267 = .sdata2:0x805008C4; // type:object size:0x4 scope:local +@268 = .sdata2:0x805008C8; // type:object size:0x4 scope:local +@269 = .sdata2:0x805008CC; // type:object size:0x4 scope:local +@270 = .sdata2:0x805008D0; // type:object size:0x4 scope:local +@271 = .sdata2:0x805008D4; // type:object size:0x4 scope:local +@331 = .sdata2:0x805008D8; // type:object size:0x4 scope:local +@332 = .sdata2:0x805008DC; // type:object size:0x4 scope:local +@334 = .sdata2:0x805008E0; // type:object size:0x8 scope:local +@179 = .sdata2:0x805008E8; // type:object size:0x4 scope:local +@234 = .sdata2:0x805008F0; // type:object size:0x8 scope:local +@134 = .sdata2:0x805008F8; // type:object size:0x4 scope:local +@135 = .sdata2:0x805008FC; // type:object size:0x4 scope:local +@136 = .sdata2:0x80500900; // type:object size:0x4 scope:local +@137 = .sdata2:0x80500904; // type:object size:0x4 scope:local +@138 = .sdata2:0x80500908; // type:object size:0x4 scope:local +@139 = .sdata2:0x8050090C; // type:object size:0x4 scope:local +@140 = .sdata2:0x80500910; // type:object size:0x4 scope:local +@141 = .sdata2:0x80500914; // type:object size:0x4 scope:local +@142 = .sdata2:0x80500918; // type:object size:0x4 scope:local +@143 = .sdata2:0x8050091C; // type:object size:0x4 scope:local +@144 = .sdata2:0x80500920; // type:object size:0x4 scope:local +@160 = .sdata2:0x80500924; // type:object size:0x4 scope:local +@177 = .sdata2:0x80500928; // type:object size:0x8 scope:local +@178 = .sdata2:0x80500930; // type:object size:0x8 scope:local +@179 = .sdata2:0x80500938; // type:object size:0x4 scope:local +@220 = .sdata2:0x80500940; // type:object size:0x4 scope:local +@222 = .sdata2:0x80500948; // type:object size:0x8 scope:local +@288 = .sdata2:0x80500950; // type:object size:0x4 scope:local +@289 = .sdata2:0x80500954; // type:object size:0x4 scope:local +@290 = .sdata2:0x80500958; // type:object size:0x4 scope:local +@291 = .sdata2:0x8050095C; // type:object size:0x4 scope:local +@292 = .sdata2:0x80500960; // type:object size:0x4 scope:local +@293 = .sdata2:0x80500964; // type:object size:0x4 scope:local +@384 = .sdata2:0x80500968; // type:object size:0x4 scope:local +@385 = .sdata2:0x8050096C; // type:object size:0x4 scope:local +@389 = .sdata2:0x80500970; // type:object size:0x8 scope:local +@149 = .sdata2:0x80500978; // type:object size:0x4 scope:local +@282 = .sdata2:0x8050097C; // type:object size:0x4 scope:local +@283 = .sdata2:0x80500980; // type:object size:0x4 scope:local +@285 = .sdata2:0x80500988; // type:object size:0x8 scope:local +@211 = .sdata2:0x80500990; // type:object size:0x4 scope:local +@212 = .sdata2:0x80500994; // type:object size:0x4 scope:local +@213 = .sdata2:0x80500998; // type:object size:0x4 scope:local +@214 = .sdata2:0x805009A0; // type:object size:0x8 scope:local +@215 = .sdata2:0x805009A8; // type:object size:0x4 scope:local +@216 = .sdata2:0x805009B0; // type:object size:0x8 scope:local +@217 = .sdata2:0x805009B8; // type:object size:0x4 scope:local +@219 = .sdata2:0x805009C0; // type:object size:0x8 scope:local +@248 = .sdata2:0x805009C8; // type:object size:0x8 scope:local +@249 = .sdata2:0x805009D0; // type:object size:0x4 scope:local +@250 = .sdata2:0x805009D8; // type:object size:0x8 scope:local +@251 = .sdata2:0x805009E0; // type:object size:0x4 scope:local +@253 = .sdata2:0x805009E8; // type:object size:0x8 scope:local +@26 = .sdata2:0x805009F0; // type:object size:0x4 scope:local +@27 = .sdata2:0x805009F4; // type:object size:0x4 scope:local +@28 = .sdata2:0x805009F8; // type:object size:0x4 scope:local +@201 = .sdata2:0x805009FC; // type:object size:0x4 scope:local +@219 = .sdata2:0x80500A00; // type:object size:0x4 scope:local +VP6_QTableSelect = .sdata2:0x80500A04; // type:object size:0x6 scope:global +DefaultIsShortProbs = .sdata2:0x80500A0C; // type:object size:0x2 scope:global +DefaultSignProbs = .sdata2:0x80500A10; // type:object size:0x2 scope:global +_6Realmc.MAX_COMMENT_LENGTH = .sdata2:0x80500A14; // type:object size:0x4 scope:global +halF = .sdata2:0x80500A18; // type:object size:0x10 scope:local +ln2HI = .sdata2:0x80500A28; // type:object size:0x10 scope:local +ln2LO = .sdata2:0x80500A38; // type:object size:0x10 scope:local +two_over_pi = .sdata2:0x80500A48; // type:object size:0x108 scope:local +npio2_hw = .sdata2:0x80500B50; // type:object size:0x80 scope:local +init_jk = .sdata2:0x80500BD0; // type:object size:0x10 scope:local +PIo2 = .sdata2:0x80500BE0; // type:object size:0x40 scope:local +@121 = .sdata2:0x80500C20; // type:object size:0x4 scope:local +@122 = .sdata2:0x80500C24; // type:object size:0x4 scope:local +@123 = .sdata2:0x80500C28; // type:object size:0x4 scope:local +@124 = .sdata2:0x80500C2C; // type:object size:0x4 scope:local +@125 = .sdata2:0x80500C30; // type:object size:0x4 scope:local +@126 = .sdata2:0x80500C34; // type:object size:0x4 scope:local +@127 = .sdata2:0x80500C38; // type:object size:0x4 scope:local +@128 = .sdata2:0x80500C3C; // type:object size:0x4 scope:local +@129 = .sdata2:0x80500C40; // type:object size:0x4 scope:local +@130 = .sdata2:0x80500C44; // type:object size:0x4 scope:local +@131 = .sdata2:0x80500C48; // type:object size:0x4 scope:local +@132 = .sdata2:0x80500C4C; // type:object size:0x4 scope:local +@133 = .sdata2:0x80500C50; // type:object size:0x4 scope:local +@135 = .sdata2:0x80500C58; // type:object size:0x8 scope:local +@331 = .sdata2:0x80500C60; // type:object size:0x4 scope:local +@347 = .sdata2:0x80500C64; // type:object size:0x4 scope:local +@348 = .sdata2:0x80500C68; // type:object size:0x4 scope:local +@349 = .sdata2:0x80500C6C; // type:object size:0x4 scope:local +@350 = .sdata2:0x80500C70; // type:object size:0x4 scope:local +@351 = .sdata2:0x80500C74; // type:object size:0x4 scope:local +@352 = .sdata2:0x80500C78; // type:object size:0x8 scope:local +@353 = .sdata2:0x80500C80; // type:object size:0x8 scope:local +@354 = .sdata2:0x80500C88; // type:object size:0x4 scope:local +@356 = .sdata2:0x80500C90; // type:object size:0x8 scope:local diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp index 4f46d133b..086a2effd 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp @@ -8,7 +8,70 @@ #include "Speed/Indep/Libs/Support/Utility/UVector.h" static bool IsRightSide() { - return false; + int playerRanking = 0; + int opponentRanking = 0; + UMath::Vector3 playerPos; + UMath::Vector3 opponentPos; + UMath::Vector3 playerFwd; + UMath::Vector3 opponentFwd; + + for (int onRacer = 0; onRacer < GRaceStatus::Get().GetRacerCount(); onRacer++) { + GRacerInfo &racerInfo = GRaceStatus::Get().GetRacerInfo(onRacer); + ISimable *simable = racerInfo.GetSimable(); + UMath::Matrix4 matrix; + UMath::Vector3 velocity; + + simable->GetTransform(matrix); + simable->GetLinearVelocity(velocity); + + if (simable->IsPlayer()) { + playerRanking = racerInfo.GetRanking(); + if (UMath::LengthSquare(velocity) > 0.0f) { + UMath::Unit(velocity, playerFwd); + } else { + playerFwd = UMath::Vector4To3(matrix.v0); + } + playerPos = UMath::Vector4To3(matrix.v3); + } else { + opponentRanking = racerInfo.GetRanking(); + if (UMath::LengthSquare(velocity) > 0.0f) { + UMath::Unit(velocity, opponentFwd); + } else { + opponentFwd = UMath::Vector4To3(matrix.v0); + } + opponentPos = UMath::Vector4To3(matrix.v3); + } + } + + if (playerRanking == 0 || opponentRanking == 0) { + return false; + } + + UMath::Vector3 opponent2player; + UMath::Sub(opponentPos, playerPos, opponent2player); + opponent2player.y = 0.0f; + + if (UMath::LengthSquare(opponent2player) > 10000.0f) { + return false; + } + + UMath::Unit(opponent2player, opponent2player); + UMath::Vector3 up = {0.0f, 1.0f, 0.0f}; + UMath::Vector3 playerRight; + UMath::Cross(up, playerFwd, playerRight); + float dot = UMath::Dot(opponent2player, playerRight); + + bool rightSide = false; + if (playerRanking == 1) { + if (dot > 0.0f) { + rightSide = true; + } + } else if (playerRanking == 2) { + if (dot < 0.0f) { + rightSide = true; + } + } + return rightSide; } static UTL::COM::Factory::Prototype _CDActionShowcase("SHOWCASE", CDActionShowcase::Construct); From 68a2615ac9c41b5e2ed9a2073b3ed70eeca7b1e0 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 20:53:25 +0100 Subject: [PATCH 097/691] 77.4%: match CDActionTrackCar/Cop/Showcase::Update with cg.x = 0.0f Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp | 1 + src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp | 1 + src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp | 1 + 3 files changed, 3 insertions(+) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp index 086a2effd..403577958 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp @@ -260,6 +260,7 @@ void CDActionShowcase::Update(float dT) { if (mVehicle->QueryInterface(&irbc)) { IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); UVector3 cg(irbc->GetCenterOfGravity()); + cg.x = 0.0f; irb->ConvertLocalToWorld(cg, false); cg += irb->GetPosition(); eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(mat.v3)); diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp index 8d47e6d65..4f08aad30 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp @@ -198,6 +198,7 @@ void CDActionTrackCar::Update(float dT) { if (mVehicle->QueryInterface(&irbc)) { IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); UVector3 cg(irbc->GetCenterOfGravity()); + cg.x = 0.0f; irb->ConvertLocalToWorld(cg, false); cg += irb->GetPosition(); eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(mat.v3)); diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp index 9a4b7e528..5b81d311a 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp @@ -206,6 +206,7 @@ void CDActionTrackCop::Update(float dT) { if (mVehicle->QueryInterface(&irbc)) { IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); UVector3 cg(irbc->GetCenterOfGravity()); + cg.x = 0.0f; irb->ConvertLocalToWorld(cg, false); cg += irb->GetPosition(); eSwizzleWorldVector(reinterpret_cast(cg), reinterpret_cast(mat.v3)); From b2bb7df032f28cc339b7717d3af18f8b588fc5ca Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 21:16:22 +0100 Subject: [PATCH 098/691] 77.5%: improve CameraAnchor ctor initializer list (84.8% match) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index e819df736..63da7c741 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -187,11 +187,16 @@ template <> void tTable::Blend(bVector2 *dest, bVector2 *a, bVector2 * } CameraAnchor::CameraAnchor(int model) - : mVelMag(0.0f), // + : mVelocity(0.0f, 0.0f, 0.0f), // + mVelMag(0.0f), // mTopSpeed(0.0f), // + mGeomPos(0.0f, 0.0f, 0.0f), // + mDimension(0.0f, 0.0f, 0.0f), // + mAccel(0.0f, 0.0f, 0.0f), // + mGeomRot(), // mModel(0), // mWorldID(0), // - mSurface(), // + mSurface(SimSurface::kNull), // mCollisionDamping(0.0f), // mDrift(0.0f), // mGroundCollision(0.0f), // @@ -207,18 +212,6 @@ CameraAnchor::CameraAnchor(int model) mZoom(1.0f), // mModelAttributes(Attrib::FindCollection(Attrib::Gen::ecar::ClassKey(), 0xeec2271a), 0, nullptr), // mCameraInfoAttributes(Attrib::FindCollection(Attrib::Gen::camerainfo::ClassKey(), 0xeec2271a), 0, nullptr) { - mVelocity.x = 0.0f; - mVelocity.y = 0.0f; - mVelocity.z = 0.0f; - mGeomPos.x = 0.0f; - mGeomPos.y = 0.0f; - mGeomPos.z = 0.0f; - mDimension.x = 0.0f; - mDimension.y = 0.0f; - mDimension.z = 0.0f; - mAccel.x = 0.0f; - mAccel.y = 0.0f; - mAccel.z = 0.0f; mPOV.Type = 3; mPOV.Angle = bDegToAng(mCameraInfoAttributes.ANGLE(0)); mPOV.Lag = mCameraInfoAttributes.LAG(0); From 8418229f91f530a133d1025c383fc17fca318c39 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 21:24:18 +0100 Subject: [PATCH 099/691] 77.7%: fix CDActionDebug/WatchCar constructors and Update - CDActionDebug ctor: use prev_action->GetMover() instead of director->GetMover() - CDActionDebugWatchCar ctor: remove pos/dir logic and AquireTarget (not in original) - CDActionDebugWatchCar::Update: remove mMover->Update(dT) call, 100% match Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Src/Camera/Actions/CDActionDebug.cpp | 29 ++++++++----------- .../Camera/Actions/CDActionDebugWatchCar.cpp | 28 ++---------------- 2 files changed, 14 insertions(+), 43 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp index fb5cf29d2..2313159e7 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp @@ -27,26 +27,21 @@ CDActionDebug::CDActionDebug(CameraAI::Director *director) : CameraAI::Action(), // mActionQ(1, 0x98c7a2f5, "DebugWorld", false) { mDone = false; - mPrev = director->GetAction()->GetName(); + bVector3 start_position(0.0f, 0.0f, 0.0f); + bVector3 start_direction(0.0f, 0.0f, 1.0f); + Action *prev_action = director->GetAction(); - CameraMover *m = director->GetMover(); - bVector3 pos; - bVector3 dir; - - if (m != nullptr) { - pos = *m->GetCamera()->GetPosition(); - dir = *m->GetCamera()->GetDirection(); - } else { - pos.x = 0.0f; - pos.y = 0.0f; - pos.z = 0.0f; - dir.x = 0.0f; - dir.y = 0.0f; - dir.z = 1.0f; + if (prev_action != nullptr) { + mPrev = prev_action->GetName(); + CameraMover *prev_mover = prev_action->GetMover(); + if (prev_mover != nullptr) { + start_position = *prev_mover->GetPosition(); + start_direction = *prev_mover->GetDirection(); + } } - int viewId = static_cast(director->GetViewID()); - mMover = new DebugWorldCameraMover(viewId, &pos, &dir, static_cast(viewId)); + int viewId = static_cast(director->GetViewID()); + mMover = new DebugWorldCameraMover(viewId, &start_position, &start_direction, static_cast(viewId)); } CDActionDebug::~CDActionDebug() { diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp index 329e3e54c..63e825f2f 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp @@ -82,31 +82,7 @@ CDActionDebugWatchCar::CDActionDebugWatchCar(CameraAI::Director *director) mhSimable = nullptr; mPrev = director->GetAction()->GetName(); - CameraMover *m = director->GetMover(); - bVector3 pos; - bVector3 dir; - - if (m != nullptr) { - pos = *m->GetCamera()->GetPosition(); - dir = *m->GetCamera()->GetDirection(); - } else { - pos.x = 0.0f; - pos.y = 0.0f; - pos.z = 0.0f; - dir.x = 0.0f; - dir.y = 0.0f; - dir.z = 1.0f; - } - mAnchor = new CameraAnchor(0); - - AquireTarget(); - - if (mTarget.IsValid()) { - bMatrix4 mat(*mTarget.GetMatrix()); - mAnchor->Update(0.0f, mat, *mTarget.GetVelocity(), *mTarget.GetAcceleration()); - } - mMover = new TrackCarCameraMover(static_cast(director->GetViewID()), mAnchor, true); } @@ -121,9 +97,9 @@ void CDActionDebugWatchCar::Update(float dT) { AquireTarget(); if (mTarget.IsValid()) { mAnchor->SetWorldID(mTarget.GetWorldID()); - mAnchor->Update(dT, *mTarget.GetMatrix(), *mTarget.GetVelocity(), *mTarget.GetAcceleration()); + const bVector3 *accel = mTarget.GetAcceleration(); + mAnchor->Update(dT, *mTarget.GetMatrix(), *mTarget.GetVelocity(), *accel); } - mMover->Update(dT); } bool CDActionDebugWatchCar::GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) { From 8ac3a694b9f723d0ffd5427c4667970478547894 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 21:27:29 +0100 Subject: [PATCH 100/691] 77.8%: add GC fabs asm to VU0_fabs, match KeysShared/KeysSharedSpace VU0_fabs was missing the GameCube fabs assembly path, causing UMath::Abs to generate if/fneg instead of the fabs instruction. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Libs/Support/Utility/UVectorMath.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h b/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h index b587abc28..357af2388 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h +++ b/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h @@ -276,6 +276,10 @@ inline float VU0_fabs(const float a) { float result; asm __volatile__("abs.s %0, %1" : "=f"(result) : "f"(a)); return result; +#elif defined(EA_PLATFORM_GAMECUBE) + float result; + asm("fabs %0, %1" : "=f"(result) : "f"(a)); + return result; #else if (a < 0.0f) { return -a; From dccfd40114ce3e321d261ecdbafa14ebe76c4999 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 21:34:06 +0100 Subject: [PATCH 101/691] 77.9%: improve Loader/UnloaderICECameras, match FovCubicInit - Restructure LoaderICECameras/UnloaderICECameras range checks - Swap GetFov/GetVelocityFov order in ICEMover::FovCubicInit (65.9%) - Match CameraMover::FovCubicInit 100% Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp | 34 +++++++++++++------ src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 4 +-- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp index 4e73d8fbd..17bf36755 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp @@ -1004,26 +1004,40 @@ static void ICEGetPlayerCarTransform(ICE::Matrix4 *mCarToWorld) { int LoaderICECameras(bChunk *pChunk) { unsigned int id = pChunk->GetID(); - if (id == 0x0003B211) { - TheICEManager.LoadCameraShakes(pChunk); - return 1; - } else if (id >= 0x8003B200 && id <= 0x8003B203) { + if (id != 0x0003B211) { + if (id < 0x0003B211) { + return 0; + } + if (id > 0x8003B203) { + return 0; + } + if (id < 0x8003B200) { + return 0; + } TheICEManager.LoadCameraSet(pChunk); return 1; } - return 0; + TheICEManager.LoadCameraShakes(pChunk); + return 1; } int UnloaderICECameras(bChunk *pChunk) { unsigned int id = pChunk->GetID(); - if (id == 0x0003B211) { - TheICEManager.UnloadCameraShakes(pChunk); - return 1; - } else if (id >= 0x8003B200 && id <= 0x8003B203) { + if (id != 0x0003B211) { + if (id < 0x0003B211) { + return 0; + } + if (id > 0x8003B203) { + return 0; + } + if (id < 0x8003B200) { + return 0; + } TheICEManager.UnloadCameraSet(pChunk); return 1; } - return 0; + TheICEManager.UnloadCameraShakes(pChunk); + return 1; } namespace ICE { diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index 135a6e0b0..57f6e4c26 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -461,9 +461,9 @@ void ICEMover::DutchCubicInit(ICE::Cubic1D *pDutch) { } void ICEMover::FovCubicInit(ICE::Cubic1D *pFov) { - unsigned short fov_velocity_angle = GetCamera()->GetVelocityFov(); unsigned short fov_angle = GetCamera()->GetFov(); - float fFov = static_cast(static_cast(fov_velocity_angle)) * (1.0f / 30.0f) + static_cast(static_cast(fov_angle)); + unsigned short fov_velocity_angle = GetCamera()->GetVelocityFov(); + float fFov = static_cast(static_cast(fov_angle)) + static_cast(static_cast(fov_velocity_angle)) * (1.0f / 30.0f); float fFovVel = static_cast(static_cast(fov_velocity_angle)) * pFov->duration; pFov->SetVal(fFov); From aca5bed68eb3950942ab845d8592e592e5ed33c3 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 21:47:27 +0100 Subject: [PATCH 102/691] 77.9%: improve CubicCameraMover ctor store order (99.9% match) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Movers/Cubic.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp index adfffbb49..eddf0eb03 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp @@ -94,9 +94,9 @@ CubicCameraMover::CubicCameraMover(int nView, CameraAnchor *p_car, int pov_type, nPovTypeUsed = pov_type; tLastGrounded = WorldTimer - Timer(8000); tLastUnderVehicle = WorldTimer - Timer(0x1900); + tLastGearChange = WorldTimer - Timer(6000); fIgnoreSetSnapNextTimer = 0.0f; bFirstTime = 1; - tLastGearChange = WorldTimer - Timer(6000); POV *pov = pCar->GetPov(nPovType); From 467e7b8276bf4d31c241977bffd85102480fa977 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 22:08:58 +0100 Subject: [PATCH 103/691] 78.7%: fix Listable::List to inherit from _Storage, match _Storage dtor Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Libs/Support/Utility/UListable.h | 2 +- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Libs/Support/Utility/UListable.h b/src/Speed/Indep/Libs/Support/Utility/UListable.h index 451783dc1..3afe5dd22 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UListable.h +++ b/src/Speed/Indep/Libs/Support/Utility/UListable.h @@ -21,7 +21,7 @@ template class Listable { typedef value_type *pointer; typedef value_type const *const_pointer; - class List : public FixedVector { + class List : public _Storage { public: typedef T value_type; typedef value_type *pointer; diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index 57f6e4c26..905712ee5 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -19,9 +19,9 @@ extern bool bMirrorICEData; extern ICE::Vector3 vIceAccelLagScale; extern ICE::Vector3 vIceAccelLagMin; extern ICE::Vector3 vIceAccelLagMax; -void bQuaternionToMatrix(bMatrix4 *matrix, const bQuaternion *quaternion); bVector3 *bCross(bVector3 *dest, const bVector3 *v1, const bVector3 *v2); +void bQuaternionToMatrix(bMatrix4 *matrix, const bQuaternion *quaternion); unsigned short ConvertLensLengthToFovAngle(float f_lens_mm) { return (bATan(f_lens_mm, 15.96f) & 0x7FFF) << 1; From a2ea7e7a6bf7c758d6b9677d213ce9174d09b8de Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 22:17:00 +0100 Subject: [PATCH 104/691] 79.1%: emit IDebugWatchCar UTL template functions (all 100% match) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp index 63e825f2f..bd914a9cb 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp @@ -110,3 +110,5 @@ bool CDActionDebugWatchCar::GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vecto } return valid; } + +template class UTL::Collections::Listable::List; From b5be8c4c031f63b62b12665c682d1f9ece28f08f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 22:38:04 +0100 Subject: [PATCH 105/691] 79.1%: improve CDActionIce::Construct branch and ShowcaseCameraMover::Update FOV Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp | 7 +++---- src/Speed/Indep/Src/Camera/Movers/Showcase.cpp | 3 ++- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp index e6e689ee6..ab84c86f5 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp @@ -73,11 +73,10 @@ CameraAI::Action *CDActionIce::Construct(CameraAI::Director *director) { return nullptr; } - if (!TheICEManager.ChooseCameraPlaybackTrack() && !Tweak_ForceICEReplay) { - return nullptr; + if (TheICEManager.ChooseCameraPlaybackTrack() || Tweak_ForceICEReplay) { + return new (static_cast(0)) CDActionIce(director, player); } - - return new (static_cast(0)) CDActionIce(director, player); + return nullptr; } CDActionIce::CDActionIce(CameraAI::Director *director, IPlayer *player) diff --git a/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp b/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp index 859cfeee4..793123933 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp @@ -101,8 +101,9 @@ void ShowcaseCameraMover::BuildPhotoCameraMatrix() { void ShowcaseCameraMover::Update(float dT) { BuildPhotoCameraMatrix(); + unsigned short fov = bDegToAng(mFOV); if (Camera::StopUpdating == 0) { - GetCamera()->SetFieldOfView(bDegToAng(mFOV)); + GetCamera()->SetFieldOfView(fov); } if (Camera::StopUpdating == 0) { GetCamera()->SetDepthOfField(mDOF); From bd1162145d2b206f29c5bd02a456083186c7cb8c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 23:02:31 +0100 Subject: [PATCH 106/691] 79.2%: improve CameraAnchor::GetPov default case layout Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 63da7c741..226c6a5fb 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -270,9 +270,7 @@ POV *CameraAnchor::GetPov(int pov_type) { attrib_key = 0xd76a6fad; break; default: - mPOV.Type = 3; - mCameraInfoAttributes.Change(Attrib::FindCollection(Attrib::Gen::camerainfo::ClassKey(), 0xeec2271a)); - goto after_camerainfo; + goto default_case; } { @@ -284,6 +282,11 @@ POV *CameraAnchor::GetPov(int pov_type) { mCameraInfoAttributes.ChangeWithDefault(*refspec); } + goto after_camerainfo; + +default_case: + mPOV.Type = 3; + mCameraInfoAttributes.Change(Attrib::FindCollection(Attrib::Gen::camerainfo::ClassKey(), 0xeec2271a)); after_camerainfo: { From 50c9c49d5134af95ab6f2df304082b94ce6550fd Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 23:34:42 +0100 Subject: [PATCH 107/691] 79.2%: fix vtable order (OutsidePOV before RenderCarPOV), float adjust type, IsBeingPursued return logic Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 2 +- src/Speed/Indep/Src/Camera/CameraMover.hpp | 6 +++--- src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp | 5 +++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 226c6a5fb..8daf82176 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -976,7 +976,7 @@ int CameraMover::MinGapCars(bMatrix4 *pMatrix, bVector3 *pLook, bVector3 *pForwa float old_z = pCameraPos->z; int i = 0; bVector3 vCarCameraSpace; - double adjust; + float adjust; for (;;) { adjust = AdjustHeightAroundCar(pCameraPos, pLook, pForward); diff --git a/src/Speed/Indep/Src/Camera/CameraMover.hpp b/src/Speed/Indep/Src/Camera/CameraMover.hpp index 44b8d0e56..6d0911c70 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.hpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.hpp @@ -358,10 +358,10 @@ class CameraMover : public bTNode, public WCollisionMgr::ICollision virtual void SetPovType(int pov_type) {} - virtual bool RenderCarPOV(); - virtual bool OutsidePOV(); + virtual bool RenderCarPOV(); + virtual float MinDistToWall(); virtual unsigned short GetLookbackAngle(); @@ -454,8 +454,8 @@ class CubicCameraMover : public CameraMover { virtual void SetLookBack(bool b); virtual void SetDisableLag(bool disable); virtual void SetPovType(int pov_type); - virtual bool RenderCarPOV(); virtual bool OutsidePOV(); + virtual bool RenderCarPOV(); virtual float MinDistToWall(); virtual unsigned short GetLookbackAngle(); virtual void ResetState(); diff --git a/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp b/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp index 330908c55..e21844ab9 100644 --- a/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp @@ -38,9 +38,10 @@ static bool IsBeingPursued(int nView) { if (simable != nullptr) { simable->QueryInterface(&iperp); if (iperp != nullptr) { - if (iperp->IsBeingPursued()) { - return true; + if (!iperp->IsBeingPursued()) { + return false; } + return true; } } return false; From d5d974419336ae763af35916a4179204cf782753 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 23:36:28 +0100 Subject: [PATCH 108/691] 79.3%: match ComputeBankedUpVector by moving new_up after axis rotation Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 8daf82176..2daf1fc4e 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -820,11 +820,11 @@ void CameraMover::TerrainVelocityNoise(bMatrix4 *world_to_camera, CameraAnchor * void CameraMover::ComputeBankedUpVector(bVector3 *up, bVector3 *eye, bVector3 *look, unsigned short bank) { bMatrix4 axis_rotation; bVector3 axis; - bVector3 new_up(0.0f, 0.0f, 1.0f); bSub(&axis, look, eye); bNormalize(&axis, &axis); eCreateAxisRotationMatrix(&axis_rotation, axis, bank); + bVector3 new_up(0.0f, 0.0f, 1.0f); eMulVector(up, &axis_rotation, &new_up); } From a0a93fe4dea5addca07604a4bdc59f4d091e5eb2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 23:46:28 +0100 Subject: [PATCH 109/691] Add decomp workflow wrapper Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/execute/SKILL.md | 16 ++ .github/skills/implement/SKILL.md | 13 +- AGENTS.md | 16 ++ tools/decomp-workflow.py | 357 ++++++++++++++++++++++++++++++ 4 files changed, 401 insertions(+), 1 deletion(-) create mode 100644 tools/decomp-workflow.py diff --git a/.github/skills/execute/SKILL.md b/.github/skills/execute/SKILL.md index b82c8b223..839a485d1 100644 --- a/.github/skills/execute/SKILL.md +++ b/.github/skills/execute/SKILL.md @@ -52,6 +52,14 @@ Determine the file path (e.g. `src/Speed/Indep/SourceLists/zWorld2`). The game u ### 1b. Get the full function list +Preferred shortcut: + +```sh +python tools/decomp-workflow.py unit -u main/Path/To/TU +``` + +Manual equivalent: + ```sh python tools/decomp-diff.py -u main/Path/To/TU ``` @@ -74,6 +82,14 @@ After scaffolding, rebuild and re-check the function list. Use `build-unit.py` to compile to a private temp `.o` so the status check isn't polluted by another concurrent temp build: +Preferred shortcut: + +```sh +python tools/decomp-workflow.py unit -u main/Path/To/TU +``` + +Manual equivalent: + ```sh ninja # full build to update shared state (progress, sha1) TEMPOBJ=$(python tools/build-unit.py -u main/Path/To/TU) diff --git a/.github/skills/implement/SKILL.md b/.github/skills/implement/SKILL.md index 52f30fefb..09b8f7690 100644 --- a/.github/skills/implement/SKILL.md +++ b/.github/skills/implement/SKILL.md @@ -13,6 +13,14 @@ Collect data from **all** of these sources in parallel where possible. ### 1a. decomp-context.py +Preferred shortcut: + +```sh +python tools/decomp-workflow.py function -u main/Path/To/TU -f FunctionName +``` + +Equivalent manual form: + ```sh python tools/decomp-context.py -u main/Path/To/TU -f FunctionName ``` @@ -89,7 +97,10 @@ The game uses stlport, so you'll often encounter \_STL, but in the code it must ### Initial build -Compile to a private temp `.o` so your output isn't overwritten by other concurrent builds: +Compile to a private temp `.o` so your output isn't overwritten by other concurrent builds. +If you just need the standard context + temp-build flow, prefer +`python tools/decomp-workflow.py function -u main/Path/To/TU -f FunctionName` and drop +down to the manual loop below when you need tighter control over repeated diff iterations: ```sh TEMPOBJ=$(python tools/build-unit.py -u main/Path/To/TU) diff --git a/AGENTS.md b/AGENTS.md index b278fa09f..7e829bea8 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -132,6 +132,22 @@ TEMPOBJ=$(python tools/build-unit.py -u main/Speed/Indep/SourceLists/zAnim) python tools/decomp-context.py -u main/Speed/Indep/SourceLists/zAnim -f FindIOWin --base-obj "$TEMPOBJ" ``` +### decomp-workflow.py — Wrapper for common agent workflows + +Prefer this wrapper for routine agent-driven flows instead of manually chaining +`build-unit.py`, `decomp-context.py`, `decomp-diff.py`, and `decomp-status.py`: + +```sh +python tools/decomp-workflow.py health +python tools/decomp-workflow.py health --smoke-build-unit main/Speed/Indep/SourceLists/zAnim +python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zAnim -f FindIOWin +python tools/decomp-workflow.py unit -u main/Speed/Indep/SourceLists/zAnim +``` + +The wrapper keeps the existing tools as the source of truth. It is intended to reduce +repeated command chaining and to standardize temp-object handling and worktree preflight +checks for agents. + ### find-symbol.py — Check for existing definitions before declaring new types Before declaring any new struct, class, enum, global, or typedef, run this to check whether diff --git a/tools/decomp-workflow.py b/tools/decomp-workflow.py new file mode 100644 index 000000000..ecde20867 --- /dev/null +++ b/tools/decomp-workflow.py @@ -0,0 +1,357 @@ +#!/usr/bin/env python3 + +""" +Wrapper for common decomp workflows. + +This script keeps the existing tools as the source of truth and orchestrates the +most common agent flows: + + python tools/decomp-workflow.py health + python tools/decomp-workflow.py health --smoke-build-unit main/Speed/Indep/SourceLists/zCamera + python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll + python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll --no-source + python tools/decomp-workflow.py unit -u main/Speed/Indep/SourceLists/zCamera +""" + +import argparse +import os +import subprocess +import sys +from typing import List, Optional, Sequence, Tuple + + +SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) +ROOT_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, "..")) +TOOLS_DIR = os.path.join(ROOT_DIR, "tools") + +BUILD_NINJA = os.path.join(ROOT_DIR, "build.ninja") +OBJDIFF_JSON = os.path.join(ROOT_DIR, "objdiff.json") +PS2_TYPES = os.path.join(ROOT_DIR, "symbols", "PS2", "PS2_types.nothpp") + +DEFAULT_SMOKE_UNIT = "main/Speed/Indep/SourceLists/zCamera" + +SHARED_ASSET_REQUIREMENTS = [ + ("NFSMWRELEASE.ELF", "GameCube ELF"), + ("NFS.ELF", "PS2 ELF"), + ("NFS.MAP", "PS2 MAP"), + (os.path.join("build", "tools"), "downloaded tooling"), + (os.path.join("orig", "GOWE69", "NFSMWRELEASE.ELF"), "GameCube original ELF"), + (os.path.join("orig", "SLES-53558-A124", "NFS.ELF"), "PS2 original ELF"), + (os.path.join("symbols", "Dwarf"), "DWARF dump"), + (os.path.join("symbols", "mw_dwarfdump.nothpp"), "combined dwarf dump"), +] + + +class WorkflowError(RuntimeError): + pass + + +def tool_path(name: str) -> str: + return os.path.join(TOOLS_DIR, name) + + +def python_tool(name: str, *args: str) -> List[str]: + return [sys.executable, tool_path(name), *args] + + +def print_section(title: str) -> None: + print(flush=True) + print("=" * 60, flush=True) + print(f" {title}", flush=True) + print("=" * 60, flush=True) + + +def format_failure( + cmd: Sequence[str], returncode: int, stdout: str = "", stderr: str = "" +) -> str: + message = [f"Command failed (exit {returncode}): {' '.join(cmd)}"] + stdout = stdout.strip() + stderr = stderr.strip() + if stdout: + message.append(f"stdout:\n{stdout}") + if stderr: + message.append(f"stderr:\n{stderr}") + return "\n".join(message) + + +def run_capture(cmd: Sequence[str]) -> subprocess.CompletedProcess[str]: + result = subprocess.run( + cmd, + cwd=ROOT_DIR, + text=True, + capture_output=True, + ) + if result.returncode != 0: + raise WorkflowError( + format_failure(cmd, result.returncode, result.stdout, result.stderr) + ) + return result + + +def run_stream(cmd: Sequence[str]) -> None: + sys.stdout.flush() + sys.stderr.flush() + result = subprocess.run(cmd, cwd=ROOT_DIR, text=True) + if result.returncode != 0: + raise WorkflowError(format_failure(cmd, result.returncode)) + + +def ensure_exists(path: str, hint: str) -> None: + if not os.path.exists(path): + raise WorkflowError(f"Missing {path}\nHint: {hint}") + + +def ensure_decomp_prereqs() -> None: + ensure_exists( + BUILD_NINJA, + "Run: python configure.py", + ) + ensure_exists( + OBJDIFF_JSON, + "Run: python configure.py", + ) + + +def build_temp_obj(unit_name: str) -> str: + result = run_capture(python_tool("build-unit.py", "-u", unit_name)) + lines = [line.strip() for line in result.stdout.splitlines() if line.strip()] + if not lines: + raise WorkflowError( + "build-unit.py succeeded but did not print an output path to stdout" + ) + actual = lines[-1] + if not os.path.exists(actual): + raise WorkflowError(f"build-unit.py reported a missing output path: {actual}") + return actual + + +def maybe_remove(path: Optional[str]) -> None: + if not path: + return + try: + if os.path.exists(path): + os.remove(path) + except OSError as e: + print(f"Warning: failed to remove temp object {path}: {e}", file=sys.stderr) + + +def describe_path(path: str) -> str: + if os.path.islink(path): + return "shared-symlink" + return "present" + + +def command_health(args: argparse.Namespace) -> None: + failures = 0 + + print_section("Worktree Health") + print(f"Root: {ROOT_DIR}") + + def report(ok: bool, label: str, detail: str) -> None: + nonlocal failures + status = "OK " if ok else "FAIL" + print(f"{status} {label}: {detail}", flush=True) + if not ok: + failures += 1 + + report( + os.path.exists(BUILD_NINJA), + "build.ninja", + BUILD_NINJA if os.path.exists(BUILD_NINJA) else "missing (run: python configure.py)", + ) + report( + os.path.exists(OBJDIFF_JSON), + "objdiff.json", + OBJDIFF_JSON if os.path.exists(OBJDIFF_JSON) else "missing (run: python configure.py)", + ) + + print_section("Shared Assets") + for rel_path, label in SHARED_ASSET_REQUIREMENTS: + abs_path = os.path.join(ROOT_DIR, rel_path) + report( + os.path.exists(abs_path), + label, + describe_path(abs_path) if os.path.exists(abs_path) else f"missing ({rel_path})", + ) + + print_section("Tool Checks") + try: + run_capture(python_tool("decomp-context.py", "--ghidra-check")) + report(True, "ghidra", "GC + PS2 programs available") + except WorkflowError as e: + report(False, "ghidra", str(e)) + + try: + run_capture(python_tool("lookup.py", "--file", PS2_TYPES, "struct", "Camera")) + report(True, "ps2-lookup", "Camera found in PS2 dump") + except WorkflowError as e: + report(False, "ps2-lookup", str(e)) + + if args.smoke_build_unit: + print_section("Build Smoke Test") + temp_obj = None + try: + temp_obj = build_temp_obj(args.smoke_build_unit) + report(True, "build-unit", temp_obj) + except WorkflowError as e: + report(False, "build-unit", str(e)) + finally: + maybe_remove(temp_obj) + + if failures: + raise WorkflowError(f"Health check failed with {failures} issue(s)") + + +def resolve_base_obj( + unit_name: str, base_obj: Optional[str], no_build: bool, keep_temp: bool +) -> Tuple[Optional[str], bool]: + if base_obj: + return os.path.abspath(base_obj), False + if no_build: + return None, False + temp_obj = build_temp_obj(unit_name) + print(f"Using temp object: {temp_obj}", flush=True) + return temp_obj, not keep_temp + + +def command_function(args: argparse.Namespace) -> None: + ensure_decomp_prereqs() + temp_obj = None + cleanup = False + try: + temp_obj, cleanup = resolve_base_obj( + args.unit, args.base_obj, args.no_build, args.keep_temp_obj + ) + print_section(f"Function Workflow: {args.function}") + cmd = python_tool("decomp-context.py", "-u", args.unit, "-f", args.function) + if args.no_source: + cmd.append("--no-source") + if args.no_ghidra: + cmd.append("--no-ghidra") + if temp_obj: + cmd.extend(["--base-obj", temp_obj]) + run_stream(cmd) + finally: + if cleanup: + maybe_remove(temp_obj) + + +def command_unit(args: argparse.Namespace) -> None: + ensure_decomp_prereqs() + temp_obj = None + cleanup = False + try: + temp_obj, cleanup = resolve_base_obj( + args.unit, args.base_obj, args.no_build, args.keep_temp_obj + ) + + print_section(f"Unit Status: {args.unit}") + run_stream(python_tool("decomp-status.py", "--unit", args.unit)) + + common_args: List[str] = ["-u", args.unit, "-t", "function"] + if temp_obj: + common_args.extend(["--base-obj", temp_obj]) + + print_section("Missing Functions") + run_stream(python_tool("decomp-diff.py", *common_args, "-s", "missing")) + + print_section("Nonmatching Functions") + run_stream(python_tool("decomp-diff.py", *common_args, "-s", "nonmatching")) + finally: + if cleanup: + maybe_remove(temp_obj) + + +def build_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser( + description=( + "Wrapper for common decomp workflows built on top of the existing project tools." + ) + ) + subparsers = parser.add_subparsers(dest="command", required=True) + + health = subparsers.add_parser( + "health", + help="Check whether the current worktree is ready for GC and PS2 decomp work", + ) + health.add_argument( + "--smoke-build-unit", + metavar="UNIT", + nargs="?", + const=DEFAULT_SMOKE_UNIT, + help=( + "Also run build-unit.py as a smoke test. If UNIT is omitted, uses " + f"{DEFAULT_SMOKE_UNIT}" + ), + ) + health.set_defaults(func=command_health) + + function = subparsers.add_parser( + "function", + help="Build a temp object if needed and run decomp-context.py for one function", + ) + function.add_argument("-u", "--unit", required=True, help="Translation unit name") + function.add_argument("-f", "--function", required=True, help="Function name to inspect") + function.add_argument( + "--base-obj", + help="Use an explicit object file instead of building a temp object", + ) + function.add_argument( + "--no-build", + action="store_true", + help="Do not build a temp object when --base-obj is not provided", + ) + function.add_argument( + "--keep-temp-obj", + action="store_true", + help="Keep the auto-built temp object instead of deleting it afterwards", + ) + function.add_argument( + "--no-source", + action="store_true", + help="Pass through to decomp-context.py", + ) + function.add_argument( + "--no-ghidra", + action="store_true", + help="Pass through to decomp-context.py", + ) + function.set_defaults(func=command_function) + + unit = subparsers.add_parser( + "unit", + help="Show a compact unit workflow summary using decomp-status.py and decomp-diff.py", + ) + unit.add_argument("-u", "--unit", required=True, help="Translation unit name") + unit.add_argument( + "--base-obj", + help="Use an explicit object file instead of building a temp object", + ) + unit.add_argument( + "--no-build", + action="store_true", + help="Do not build a temp object when --base-obj is not provided", + ) + unit.add_argument( + "--keep-temp-obj", + action="store_true", + help="Keep the auto-built temp object instead of deleting it afterwards", + ) + unit.set_defaults(func=command_unit) + + return parser + + +def main() -> None: + parser = build_parser() + args = parser.parse_args() + + try: + args.func(args) + except WorkflowError as e: + print(e, file=sys.stderr) + sys.exit(1) + + +if __name__ == "__main__": + main() From 5b6c1cdac0752787dd6f2e8189ffa294586b5e0e Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 11 Mar 2026 23:51:30 +0100 Subject: [PATCH 110/691] 79.3%: improve SetFromTweakables store order, rename ConvertAperture variable Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 13 ++++++------- src/Speed/Indep/Src/Camera/Movers/Showcase.cpp | 4 ++-- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index 905712ee5..f35d367a0 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -84,16 +84,15 @@ float ConvertApertureNumberToFStop(float aperture) { 57.017517f, 64.0f, }; - int index = static_cast(aperture + 0.5f); - - if (index < 0) { - index = 0; + int n = static_cast(aperture + 0.5f); + if (n < 0) { + n = 0; } - if (index > 36) { - index = 36; + if (n > 36) { + n = 36; } - return kFStops[index]; + return kFStops[n]; } static void CreateLookAtMatrix(ICE::Matrix4 *mat, ICE::Vector3 &eye, ICE::Vector3 ¢er, unsigned short dutch) { diff --git a/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp b/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp index 793123933..8500103cf 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp @@ -26,12 +26,12 @@ ShowcaseCameraMover::ShowcaseCameraMover(int nView, CameraAnchor *p_car, bool fl } void ShowcaseCameraMover::SetFromTweakables() { - mLatAng = gPhoto_LatAng; mUpAng = gPhoto_UpAng; mDist = gPhoto_Dist; + mLatAng = gPhoto_LatAng; mCarPosBias = gPhoto_CarPosBias; - mFOV = gPhoto_LatAng; mFd = gPhoto_DOF; + mFOV = gPhoto_LatAng; mDOF = gPhoto_DOF; } From 50ea0e57409d23ff1add41643d328c70c8e171dc Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 00:04:01 +0100 Subject: [PATCH 111/691] Refactor decomp workflow tooling Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/execute/SKILL.md | 7 +- .github/skills/implement/SKILL.md | 12 ++- AGENTS.md | 6 ++ tools/_common.py | 152 ++++++++++++++++++++++++++++++ tools/build-unit.py | 54 ++++------- tools/decomp-context.py | 97 +++---------------- tools/decomp-diff.py | 124 +++--------------------- tools/decomp-status.py | 23 ++--- tools/decomp-workflow.py | 129 +++++++++++++++++++++---- 9 files changed, 331 insertions(+), 273 deletions(-) create mode 100644 tools/_common.py diff --git a/.github/skills/execute/SKILL.md b/.github/skills/execute/SKILL.md index 839a485d1..3a8fafbe3 100644 --- a/.github/skills/execute/SKILL.md +++ b/.github/skills/execute/SKILL.md @@ -61,7 +61,10 @@ python tools/decomp-workflow.py unit -u main/Path/To/TU Manual equivalent: ```sh -python tools/decomp-diff.py -u main/Path/To/TU +python tools/decomp-status.py --unit main/Path/To/TU +TEMPOBJ=$(python tools/build-unit.py -u main/Path/To/TU) +python tools/decomp-diff.py -u main/Path/To/TU -s missing -t function --base-obj "$TEMPOBJ" +python tools/decomp-diff.py -u main/Path/To/TU -s nonmatching -t function --base-obj "$TEMPOBJ" ``` This shows all symbols with their match status. Note the total count of missing, @@ -93,8 +96,8 @@ Manual equivalent: ```sh ninja # full build to update shared state (progress, sha1) TEMPOBJ=$(python tools/build-unit.py -u main/Path/To/TU) -python tools/decomp-diff.py -u main/Path/To/TU -s nonmatching -t function --base-obj "$TEMPOBJ" python tools/decomp-diff.py -u main/Path/To/TU -s missing -t function --base-obj "$TEMPOBJ" +python tools/decomp-diff.py -u main/Path/To/TU -s nonmatching -t function --base-obj "$TEMPOBJ" ``` ### 3c. Implement each function sequentially diff --git a/.github/skills/implement/SKILL.md b/.github/skills/implement/SKILL.md index 09b8f7690..0e68e78c2 100644 --- a/.github/skills/implement/SKILL.md +++ b/.github/skills/implement/SKILL.md @@ -17,6 +17,7 @@ Preferred shortcut: ```sh python tools/decomp-workflow.py function -u main/Path/To/TU -f FunctionName +python tools/decomp-workflow.py diff -u main/Path/To/TU -d FunctionName ``` Equivalent manual form: @@ -99,8 +100,15 @@ The game uses stlport, so you'll often encounter \_STL, but in the code it must Compile to a private temp `.o` so your output isn't overwritten by other concurrent builds. If you just need the standard context + temp-build flow, prefer -`python tools/decomp-workflow.py function -u main/Path/To/TU -f FunctionName` and drop -down to the manual loop below when you need tighter control over repeated diff iterations: +`python tools/decomp-workflow.py function -u main/Path/To/TU -f FunctionName`. +If you only need a temp build or a standardized diff run, use: + +```sh +python tools/decomp-workflow.py build -u main/Path/To/TU +python tools/decomp-workflow.py diff -u main/Path/To/TU -d FunctionName +``` + +Drop down to the manual loop below when you need tighter control over repeated diff iterations: ```sh TEMPOBJ=$(python tools/build-unit.py -u main/Path/To/TU) diff --git a/AGENTS.md b/AGENTS.md index 7e829bea8..609f8a06b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -140,6 +140,8 @@ Prefer this wrapper for routine agent-driven flows instead of manually chaining ```sh python tools/decomp-workflow.py health python tools/decomp-workflow.py health --smoke-build-unit main/Speed/Indep/SourceLists/zAnim +python tools/decomp-workflow.py build -u main/Speed/Indep/SourceLists/zAnim +python tools/decomp-workflow.py diff -u main/Speed/Indep/SourceLists/zAnim -d FindIOWin python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zAnim -f FindIOWin python tools/decomp-workflow.py unit -u main/Speed/Indep/SourceLists/zAnim ``` @@ -148,6 +150,10 @@ The wrapper keeps the existing tools as the source of truth. It is intended to r repeated command chaining and to standardize temp-object handling and worktree preflight checks for agents. +On a newly updated or unusual worktree, run `python tools/decomp-workflow.py health` first. +If it reports missing generated files such as `objdiff.json` or `build.ninja`, run +`python configure.py` in that worktree before using the decomp wrappers. + ### find-symbol.py — Check for existing definitions before declaring new types Before declaring any new struct, class, enum, global, or typedef, run this to check whether diff --git a/tools/_common.py b/tools/_common.py new file mode 100644 index 000000000..773f7f12a --- /dev/null +++ b/tools/_common.py @@ -0,0 +1,152 @@ +#!/usr/bin/env python3 + +import json +import os +import shutil +import subprocess +import sys +import tempfile +from typing import Any, Dict, Optional, Sequence + + +SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) +ROOT_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, "..")) +BUILD_NINJA = os.path.join(ROOT_DIR, "build.ninja") +OBJDIFF_JSON = os.path.join(ROOT_DIR, "objdiff.json") + + +class ToolError(RuntimeError): + pass + + +def fail(message: str) -> None: + print(message, file=sys.stderr) + sys.exit(1) + + +def format_subprocess_error( + cmd: Sequence[str], returncode: int, stdout: str = "", stderr: str = "" +) -> str: + message = [f"Command failed (exit {returncode}): {' '.join(cmd)}"] + stdout = stdout.strip() + stderr = stderr.strip() + if stdout: + message.append(f"stdout:\n{stdout}") + if stderr: + message.append(f"stderr:\n{stderr}") + return "\n".join(message) + + +def ensure_exists(path: str, hint: str) -> None: + if not os.path.exists(path): + raise ToolError(f"Missing {path}\nHint: {hint}") + + +def ensure_project_prereqs(require_build_ninja: bool = False) -> None: + ensure_exists(OBJDIFF_JSON, "Run: python configure.py") + if require_build_ninja: + ensure_exists(BUILD_NINJA, "Run: python configure.py") + + +def load_json_file(path: str, description: str) -> Any: + try: + with open(path) as f: + return json.load(f) + except FileNotFoundError: + raise ToolError(f"Missing {description}: {path}") + except json.JSONDecodeError as e: + raise ToolError(f"Failed to parse {description}: {e}") + + +def load_objdiff_config() -> Dict[str, Any]: + ensure_project_prereqs() + data = load_json_file(OBJDIFF_JSON, "objdiff.json") + if not isinstance(data, dict): + raise ToolError("objdiff.json does not contain a JSON object") + return data + + +def make_abs(path: Optional[str], base: str = ROOT_DIR) -> Optional[str]: + if path is None: + return None + if os.path.isabs(str(path)): + return str(path) + return os.path.abspath(os.path.join(base, str(path))) + + +def apply_base_obj_override( + config: Dict[str, Any], unit_name: str, base_obj: str, root_dir: str = ROOT_DIR +) -> bool: + found = False + for unit in config.get("units", []): + target_path = make_abs(unit.get("target_path"), root_dir) + if target_path is not None: + unit["target_path"] = target_path + + if unit.get("name") == unit_name: + unit["base_path"] = os.path.abspath(base_obj) + found = True + else: + base_path = make_abs(unit.get("base_path"), root_dir) + if base_path is not None: + unit["base_path"] = base_path + + metadata = unit.get("metadata") or {} + source_path = make_abs(metadata.get("source_path"), root_dir) + if source_path is not None: + metadata["source_path"] = source_path + + scratch = unit.get("scratch") or {} + ctx_path = make_abs(scratch.get("ctx_path"), root_dir) + if ctx_path is not None: + scratch["ctx_path"] = ctx_path + + return found + + +def run_objdiff_json( + objdiff_cli: str, + unit_name: str, + *, + base_obj: Optional[str] = None, + extra_args: Optional[Sequence[str]] = None, + root_dir: str = ROOT_DIR, +) -> Dict[str, Any]: + ensure_project_prereqs() + + cmd = [objdiff_cli, "diff"] + if extra_args: + cmd.extend(extra_args) + cmd.extend(["-u", unit_name, "-o", "-", "--format", "json"]) + + cwd = root_dir + tmpdir = None + if base_obj is not None: + config = load_objdiff_config() + if not apply_base_obj_override(config, unit_name, base_obj, root_dir=root_dir): + raise ToolError(f"Unit not found in objdiff.json: {unit_name}") + + tmpdir = tempfile.mkdtemp(prefix="nfsmw_objdiff_") + tmp_config = os.path.join(tmpdir, "objdiff.json") + with open(tmp_config, "w") as f: + json.dump(config, f) + cwd = tmpdir + + try: + result = subprocess.run( + cmd, + cwd=cwd, + text=True, + capture_output=True, + ) + if result.returncode != 0: + raise ToolError( + format_subprocess_error(cmd, result.returncode, result.stdout, result.stderr) + ) + try: + return json.loads(result.stdout) + except json.JSONDecodeError as e: + raise ToolError(f"objdiff-cli returned invalid JSON: {e}") + finally: + if tmpdir is not None: + shutil.rmtree(tmpdir, ignore_errors=True) diff --git a/tools/build-unit.py b/tools/build-unit.py index dbfacf7b7..29a440d8b 100644 --- a/tools/build-unit.py +++ b/tools/build-unit.py @@ -31,18 +31,16 @@ import tempfile from typing import Any, Dict, List, Optional, Tuple, Union -script_dir = os.path.dirname(os.path.realpath(__file__)) -root_dir = os.path.abspath(os.path.join(script_dir, "..")) -OBJDIFF_JSON = os.path.join(root_dir, "objdiff.json") -BUILD_NINJA = os.path.join(root_dir, "build.ninja") -COMPILE_COMMANDS = os.path.join(root_dir, "compile_commands.json") +from _common import BUILD_NINJA, OBJDIFF_JSON, ROOT_DIR, ToolError, fail, load_objdiff_config + +root_dir = ROOT_DIR +COMPILE_COMMANDS = os.path.join(ROOT_DIR, "compile_commands.json") Command = Union[str, List[str]] def load_objdiff() -> Dict[str, Any]: - with open(OBJDIFF_JSON) as f: - return json.load(f) + return load_objdiff_config() def find_unit_source(config: Dict[str, Any], unit_name: str) -> Optional[str]: @@ -221,45 +219,25 @@ def actual_output_path(command: Command, source_path: str, new_output: str) -> s def compile_unit(unit_name: str, output_path: str) -> str: """Compile unit to output_path and return the actual .o path.""" - if not os.path.exists(OBJDIFF_JSON): - print( - "objdiff.json not found. Run: python configure.py && ninja all_source", - file=sys.stderr, - ) - sys.exit(1) - config = load_objdiff() source_path = find_unit_source(config, unit_name) target_path = find_unit_target(config, unit_name) if not source_path: - print( + fail( f"No source_path found for unit '{unit_name}' in objdiff.json.\n" - "The unit may not have a source file yet (missing implementation).", - file=sys.stderr, + "The unit may not have a source file yet (missing implementation)." ) - sys.exit(1) if not target_path: - print( - f"No target_path found for unit '{unit_name}' in objdiff.json.", - file=sys.stderr, - ) - sys.exit(1) - + fail(f"No target_path found for unit '{unit_name}' in objdiff.json.") if not os.path.exists(BUILD_NINJA): - print( - "build.ninja not found. Run: python configure.py && ninja all_source", - file=sys.stderr, - ) - sys.exit(1) + fail(f"Missing {BUILD_NINJA}\nHint: Run: python configure.py") command = get_build_command(target_path) if command is None: - print( + fail( f"No build command found for target '{target_path}'.\n" - "Make sure the unit exists and `python configure.py` has been run.", - file=sys.stderr, + "Make sure the unit exists and `python configure.py` has been run." ) - sys.exit(1) # 1. Strip the dependency-file transform step — not needed for temp builds. command = strip_transform_dep(command) @@ -278,10 +256,7 @@ def compile_unit(unit_name: str, output_path: str) -> str: # 5. Run the compile. result = subprocess.run(command, shell=isinstance(command, str), cwd=root_dir) if result.returncode != 0: - print( - f"Compilation failed (exit code {result.returncode})", file=sys.stderr - ) - sys.exit(1) + fail(f"Compilation failed (exit code {result.returncode})") return actual @@ -316,7 +291,10 @@ def main() -> None: ) os.close(fd) - actual = compile_unit(args.unit, output_path) + try: + actual = compile_unit(args.unit, output_path) + except ToolError as e: + fail(str(e)) print(actual) diff --git a/tools/decomp-context.py b/tools/decomp-context.py index 0ced57453..981bed4a1 100644 --- a/tools/decomp-context.py +++ b/tools/decomp-context.py @@ -22,16 +22,15 @@ import os import re import shutil -import tempfile import subprocess import sys from typing import Any, Dict, List, Optional, Tuple +from _common import ROOT_DIR, ToolError, fail, load_objdiff_config, run_objdiff_json script_dir = os.path.dirname(os.path.realpath(__file__)) -root_dir = os.path.abspath(os.path.join(script_dir, "..")) +root_dir = ROOT_DIR OBJDIFF_CLI = os.path.join(root_dir, "build", "tools", "objdiff-cli") -OBJDIFF_JSON = os.path.join(root_dir, "objdiff.json") DTK = os.path.join(root_dir, "build", "tools", "dtk") GC_SYMBOLS_FILE = os.path.join(root_dir, "config", "GOWE69", "symbols.txt") PS2_SYMBOLS_FILE = os.path.join(root_dir, "config", "SLES-53558-A124", "symbols.txt") @@ -44,8 +43,7 @@ def load_project_config() -> Dict[str, Any]: """Load objdiff.json.""" - with open(OBJDIFF_JSON) as f: - return json.load(f) + return load_objdiff_config() def find_unit(config: Dict[str, Any], unit_name: str) -> Optional[Dict[str, Any]]: @@ -57,86 +55,12 @@ def find_unit(config: Dict[str, Any], unit_name: str) -> Optional[Dict[str, Any] def run_objdiff(unit_name: str, base_obj: Optional[str] = None) -> Optional[Dict[str, Any]]: - """Run objdiff-cli diff and return parsed JSON. - - If base_obj is given, a temporary objdiff.json is used that overrides the - base_path for this unit so parallel agents don't interfere with each other. - """ - if base_obj is not None: - return _run_objdiff_with_base_obj(unit_name, base_obj) - - result = subprocess.run( - [OBJDIFF_CLI, "diff", "-u", unit_name, "-o", "-", "--format", "json"], - capture_output=True, - cwd=root_dir, + return run_objdiff_json( + OBJDIFF_CLI, + unit_name, + base_obj=base_obj, + root_dir=root_dir, ) - if result.returncode != 0: - return None - try: - return json.loads(result.stdout) - except json.JSONDecodeError: - return None - - -def _make_abs(path: Optional[str], base: str) -> Optional[str]: - if path is None: - return None - if os.path.isabs(str(path)): - return str(path) - return os.path.abspath(os.path.join(base, str(path))) - - -def _run_objdiff_with_base_obj(unit_name: str, base_obj: str) -> Optional[Dict[str, Any]]: - """Run objdiff-cli using a temporary config pointing base_path at base_obj.""" - with open(OBJDIFF_JSON) as f: - config = json.load(f) - - found = False - for unit in config.get("units", []): - tp = _make_abs(unit.get("target_path"), root_dir) - if tp is not None: - unit["target_path"] = tp - - if unit["name"] == unit_name: - unit["base_path"] = os.path.abspath(base_obj) - found = True - else: - bp = _make_abs(unit.get("base_path"), root_dir) - if bp is not None: - unit["base_path"] = bp - - meta = unit.get("metadata") or {} - sp = _make_abs(meta.get("source_path"), root_dir) - if sp is not None: - meta["source_path"] = sp - - scratch = unit.get("scratch") or {} - cp = _make_abs(scratch.get("ctx_path"), root_dir) - if cp is not None: - scratch["ctx_path"] = cp - - if not found: - return None - - tmpdir = tempfile.mkdtemp(prefix="nfsmw_objdiff_") - try: - tmp_config = os.path.join(tmpdir, "objdiff.json") - with open(tmp_config, "w") as f: - json.dump(config, f) - - result = subprocess.run( - [OBJDIFF_CLI, "diff", "-u", unit_name, "-o", "-", "--format", "json"], - capture_output=True, - cwd=tmpdir, - ) - if result.returncode != 0: - return None - try: - return json.loads(result.stdout) - except json.JSONDecodeError: - return None - finally: - shutil.rmtree(tmpdir, ignore_errors=True) def find_symbol_in_diff( @@ -569,4 +493,7 @@ def main(): if __name__ == "__main__": - main() + try: + main() + except ToolError as e: + fail(str(e)) diff --git a/tools/decomp-diff.py b/tools/decomp-diff.py index db62b7e24..034397155 100644 --- a/tools/decomp-diff.py +++ b/tools/decomp-diff.py @@ -20,126 +20,23 @@ import argparse import json import os -import shutil import subprocess import sys -import tempfile from typing import Any, Dict, List, Optional, Tuple +from _common import ROOT_DIR, ToolError, fail, run_objdiff_json -script_dir = os.path.dirname(os.path.realpath(__file__)) -root_dir = os.path.abspath(os.path.join(script_dir, "..")) - +root_dir = ROOT_DIR OBJDIFF_CLI = os.path.join(root_dir, "build", "tools", "objdiff-cli") -OBJDIFF_JSON = os.path.join(root_dir, "objdiff.json") - - -def _make_abs(path: Optional[str], base: str) -> Optional[str]: - """Return an absolute version of path relative to base, or None.""" - if path is None: - return None - if os.path.isabs(str(path)): - return str(path) - return os.path.abspath(os.path.join(base, str(path))) - - -def _absolutize_config(config: Dict[str, Any], unit_name: str, base_obj: str) -> bool: - """Rewrite all file paths in config to absolute paths and override base_path - for unit_name with base_obj. Returns True if the unit was found.""" - found = False - for unit in config.get("units", []): - tp = _make_abs(unit.get("target_path"), root_dir) - if tp is not None: - unit["target_path"] = tp - - if unit["name"] == unit_name: - unit["base_path"] = os.path.abspath(base_obj) - found = True - else: - bp = _make_abs(unit.get("base_path"), root_dir) - if bp is not None: - unit["base_path"] = bp - - meta = unit.get("metadata") or {} - sp = _make_abs(meta.get("source_path"), root_dir) - if sp is not None: - meta["source_path"] = sp - - scratch = unit.get("scratch") or {} - cp = _make_abs(scratch.get("ctx_path"), root_dir) - if cp is not None: - scratch["ctx_path"] = cp - - return found def run_objdiff(unit: str, base_obj: Optional[str] = None) -> Dict[str, Any]: - """Run objdiff-cli diff and return parsed JSON. - - If base_obj is given, a temporary objdiff.json is created that overrides the - base_path for this unit so parallel agents don't interfere with each other. - """ - if base_obj is not None: - return _run_objdiff_with_base_obj(unit, base_obj) - - result = subprocess.run( - [ - OBJDIFF_CLI, - "diff", - "-c", - "functionRelocDiffs=none", - "-u", - unit, - "-o", - "-", - "--format", - "json", - ], - capture_output=True, - cwd=root_dir, + return run_objdiff_json( + OBJDIFF_CLI, + unit, + base_obj=base_obj, + extra_args=["-c", "functionRelocDiffs=none"], + root_dir=root_dir, ) - if result.returncode != 0: - print(f"objdiff-cli error: {result.stderr.decode()}", file=sys.stderr) - sys.exit(1) - return json.loads(result.stdout) - - -def _run_objdiff_with_base_obj(unit: str, base_obj: str) -> Dict[str, Any]: - """Run objdiff-cli using a temporary config that points base_path at base_obj.""" - with open(OBJDIFF_JSON) as f: - config = json.load(f) - - if not _absolutize_config(config, unit, base_obj): - print(f"Unit not found in objdiff.json: {unit}", file=sys.stderr) - sys.exit(1) - - tmpdir = tempfile.mkdtemp(prefix="nfsmw_objdiff_") - try: - tmp_config = os.path.join(tmpdir, "objdiff.json") - with open(tmp_config, "w") as f: - json.dump(config, f) - - result = subprocess.run( - [ - OBJDIFF_CLI, - "diff", - "-c", - "functionRelocDiffs=none", - "-u", - unit, - "-o", - "-", - "--format", - "json", - ], - capture_output=True, - cwd=tmpdir, - ) - if result.returncode != 0: - print(f"objdiff-cli error: {result.stderr.decode()}", file=sys.stderr) - sys.exit(1) - return json.loads(result.stdout) - finally: - shutil.rmtree(tmpdir, ignore_errors=True) def classify_symbol(sym: Dict[str, Any]) -> str: @@ -571,7 +468,10 @@ def main(): args = parser.parse_args() - data = run_objdiff(args.unit, base_obj=args.base_obj) + try: + data = run_objdiff(args.unit, base_obj=args.base_obj) + except ToolError as e: + fail(str(e)) if args.diff: build_diff(data, args.diff, args) diff --git a/tools/decomp-status.py b/tools/decomp-status.py index 0f4058497..69917e7dd 100644 --- a/tools/decomp-status.py +++ b/tools/decomp-status.py @@ -16,35 +16,25 @@ import argparse import json import os -import subprocess import sys from typing import Any, Dict, List, Optional +from _common import ROOT_DIR, ToolError, fail, load_objdiff_config, run_objdiff_json -script_dir = os.path.dirname(os.path.realpath(__file__)) -root_dir = os.path.abspath(os.path.join(script_dir, "..")) +root_dir = ROOT_DIR OBJDIFF_CLI = os.path.join(root_dir, "build", "tools", "objdiff-cli") -OBJDIFF_JSON = os.path.join(root_dir, "objdiff.json") def load_project_config() -> Dict[str, Any]: """Load objdiff.json project configuration.""" - with open(OBJDIFF_JSON) as f: - return json.load(f) + return load_objdiff_config() def run_objdiff(unit_name: str) -> Optional[Dict[str, Any]]: """Run objdiff-cli diff for a unit and return parsed JSON.""" - result = subprocess.run( - [OBJDIFF_CLI, "diff", "-u", unit_name, "-o", "-", "--format", "json"], - capture_output=True, - cwd=root_dir, - ) - if result.returncode != 0: - return None try: - return json.loads(result.stdout) - except json.JSONDecodeError: + return run_objdiff_json(OBJDIFF_CLI, unit_name, root_dir=root_dir) + except ToolError: return None @@ -141,8 +131,7 @@ def main(): categorized.setdefault(cat, []).append(unit) if not categorized: - print("No units match the given filters.", file=sys.stderr) - sys.exit(1) + fail("No units match the given filters.") # Process each unit results = {} diff --git a/tools/decomp-workflow.py b/tools/decomp-workflow.py index ecde20867..8c6da989f 100644 --- a/tools/decomp-workflow.py +++ b/tools/decomp-workflow.py @@ -18,14 +18,11 @@ import subprocess import sys from typing import List, Optional, Sequence, Tuple +from _common import BUILD_NINJA, OBJDIFF_JSON, ROOT_DIR, ToolError, ensure_exists SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) -ROOT_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, "..")) TOOLS_DIR = os.path.join(ROOT_DIR, "tools") - -BUILD_NINJA = os.path.join(ROOT_DIR, "build.ninja") -OBJDIFF_JSON = os.path.join(ROOT_DIR, "objdiff.json") PS2_TYPES = os.path.join(ROOT_DIR, "symbols", "PS2", "PS2_types.nothpp") DEFAULT_SMOKE_UNIT = "main/Speed/Indep/SourceLists/zCamera" @@ -96,20 +93,12 @@ def run_stream(cmd: Sequence[str]) -> None: raise WorkflowError(format_failure(cmd, result.returncode)) -def ensure_exists(path: str, hint: str) -> None: - if not os.path.exists(path): - raise WorkflowError(f"Missing {path}\nHint: {hint}") - - def ensure_decomp_prereqs() -> None: - ensure_exists( - BUILD_NINJA, - "Run: python configure.py", - ) - ensure_exists( - OBJDIFF_JSON, - "Run: python configure.py", - ) + try: + ensure_exists(BUILD_NINJA, "Run: python configure.py") + ensure_exists(OBJDIFF_JSON, "Run: python configure.py") + except ToolError as e: + raise WorkflowError(str(e)) def build_temp_obj(unit_name: str) -> str: @@ -262,6 +251,52 @@ def command_unit(args: argparse.Namespace) -> None: maybe_remove(temp_obj) +def command_build(args: argparse.Namespace) -> None: + cmd = python_tool("build-unit.py", "-u", args.unit) + if args.output: + cmd.extend(["-o", os.path.abspath(args.output)]) + run_stream(cmd) + + +def command_diff(args: argparse.Namespace) -> None: + ensure_decomp_prereqs() + temp_obj = None + cleanup = False + try: + temp_obj, cleanup = resolve_base_obj( + args.unit, args.base_obj, args.no_build, args.keep_temp_obj + ) + + title = f"Diff Workflow: {args.unit}" + if args.diff: + title += f" / {args.diff}" + print_section(title) + + cmd: List[str] = python_tool("decomp-diff.py", "-u", args.unit) + if args.diff: + cmd.extend(["-d", args.diff]) + if args.type: + cmd.extend(["-t", args.type]) + if args.status: + cmd.extend(["-s", args.status]) + if args.section: + cmd.extend(["--section", args.section]) + if args.search: + cmd.extend(["--search", args.search]) + if args.context is not None: + cmd.extend(["-C", str(args.context)]) + if args.range: + cmd.extend(["--range", args.range]) + if args.no_collapse: + cmd.append("--no-collapse") + if temp_obj: + cmd.extend(["--base-obj", temp_obj]) + run_stream(cmd) + finally: + if cleanup: + maybe_remove(temp_obj) + + def build_parser() -> argparse.ArgumentParser: parser = argparse.ArgumentParser( description=( @@ -339,6 +374,66 @@ def build_parser() -> argparse.ArgumentParser: ) unit.set_defaults(func=command_unit) + build = subparsers.add_parser( + "build", + help="Run build-unit.py with wrapper-friendly defaults", + ) + build.add_argument("-u", "--unit", required=True, help="Translation unit name") + build.add_argument( + "-o", + "--output", + help="Explicit output .o path (default: auto-generated temp file)", + ) + build.set_defaults(func=command_build) + + diff = subparsers.add_parser( + "diff", + help="Build a temp object if needed and run decomp-diff.py", + ) + diff.add_argument("-u", "--unit", required=True, help="Translation unit name") + diff.add_argument( + "-d", + "--diff", + metavar="SYMBOL", + help="Show diff for a specific symbol instead of overview mode", + ) + diff.add_argument("-t", "--type", help="Filter by type: function, object") + diff.add_argument( + "-s", + "--status", + help="Filter by status: missing, matching, nonmatching, extra", + ) + diff.add_argument("--section", help="Filter by section name") + diff.add_argument("--search", help="Fuzzy search on demangled symbol name") + diff.add_argument( + "-C", + "--context", + type=int, + default=3, + help="Context lines around mismatches (default: 3)", + ) + diff.add_argument("--range", help="Instruction offset range (hex, e.g. 100-200)") + diff.add_argument( + "--no-collapse", + action="store_true", + help="Don't collapse matching instruction runs", + ) + diff.add_argument( + "--base-obj", + help="Use an explicit object file instead of building a temp object", + ) + diff.add_argument( + "--no-build", + action="store_true", + help="Do not build a temp object when --base-obj is not provided", + ) + diff.add_argument( + "--keep-temp-obj", + action="store_true", + help="Keep the auto-built temp object instead of deleting it afterwards", + ) + diff.set_defaults(func=command_diff) + return parser From 87fd61488070fe14ab63e49e0887509b2ce2280d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 00:30:37 +0100 Subject: [PATCH 112/691] 79.6%: improve ConvertLensDeltaToFovDelta, TrackCopCameraMover::Update - ConvertLensDeltaToFovDelta: unsigned short types + individual float conversion via SignExtendAng (59.9% -> 84.9%) - TrackCopCameraMover::Update: add dead code (displacement, bLength, normalize, bCross), fix dVal->dValDesired, bMax threshold 2.0f, use look_offset for eMulVector (55.0% -> 83.4%) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 35 +++++++++++++++------ src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 6 ++-- src/Speed/Indep/bWare/Inc/bMath.hpp | 4 +++ 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 2daf1fc4e..01099623e 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -1610,9 +1610,12 @@ void TrackCopCameraMover::Init() { void TrackCopCameraMover::Update(float dT) { if (FEManager::Get() == nullptr || !FEManager::ShouldPauseSimulation(true)) { bVector3 world_up(0.0f, 0.0f, 1.0f); - bVector3 look; bVector3 eye; + bVector3 look; bVector3 offset; + bVector3 displacement; + bVector3 hcomp; + bVector3 look_offset; bMatrix4 camera_matrix; float focal_distance; @@ -1638,13 +1641,22 @@ void TrackCopCameraMover::Update(float dT) { GetCamera()->SetFieldOfView(static_cast(bDegToAng(offset.x))); } - offset.x = 0.0f; - offset.y = 0.0f; - offset.z = 0.0f; - eMulVector(&offset, CarToFollow->GetMatrix(), &offset); - look.x += offset.x; - look.y += offset.y; - look.z += offset.z; + displacement = eye - look; + float distance = bLength(&displacement); + if (distance < 1.0f) { + distance = 1.0f; + } + displacement /= distance; + bCross(&hcomp, &displacement, &world_up); + + float vert_comp = 0.0f; + bScale(&hcomp, &hcomp, vert_comp); + look_offset.x = vert_comp; + look_offset.y = vert_comp; + look_offset.z = vert_comp; + + eMulVector(&look_offset, CarToFollow->GetGeometryOrientation(), &look_offset); + look += look_offset; eCreateLookAtMatrix(&camera_matrix, eye, look, world_up); focal_distance = bDistBetween(CarToFollow->GetGeomPos(), &eye); @@ -1652,9 +1664,12 @@ void TrackCopCameraMover::Update(float dT) { GetCamera()->SetTargetDistance(focal_distance); } - FocalDistCubic.dVal = FocalDistCubic.Val * 0.1f; + FocalDistCubic.dValDesired = FocalDistCubic.Val * 0.1f; SplineSeek(&FocalDistCubic, dT, 0.0f, 0.0f); - focal_distance = bMax(1.0f, focal_distance + FocalDistCubic.Val); + focal_distance += FocalDistCubic.Val; + if (focal_distance < 2.0f) { + focal_distance = 2.0f; + } if (FocusEffects) { if (Camera::StopUpdating == 0) { diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index f35d367a0..f2d33b43f 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -39,9 +39,9 @@ float ConvertFovAngleToLensLength(unsigned short a_fov) { } float ConvertLensDeltaToFovDelta(float f_lens_mm, float f_lens_slope) { - short a_fov = bATan(f_lens_mm, 15.96f) << 1; - short a_fov_desired = bATan(f_lens_mm + f_lens_slope * 0.01f, 15.96f) << 1; - return static_cast(a_fov_desired - a_fov) * 100.0f; + unsigned short a = bATan(f_lens_mm, 15.96f) << 1; + unsigned short b = bATan(f_lens_mm + f_lens_slope * 0.01f, 15.96f) << 1; + return (SignExtendAng(b) - SignExtendAng(a)) * 100.0f; } float ConvertApertureNumberToFStop(float aperture) { diff --git a/src/Speed/Indep/bWare/Inc/bMath.hpp b/src/Speed/Indep/bWare/Inc/bMath.hpp index 74c1b771c..7a5b97b2a 100644 --- a/src/Speed/Indep/bWare/Inc/bMath.hpp +++ b/src/Speed/Indep/bWare/Inc/bMath.hpp @@ -183,6 +183,10 @@ inline float bAngToRad(unsigned short angle) { return ((float)angle) * 0.0000958738f; } +inline float SignExtendAng(unsigned short angle) { + return static_cast(static_cast(angle)); +} + inline float bDegToRad(float degrees) { return degrees * 0.017453292f; } From f42cbc761f5f5ca8de055095c651ec227d6e50ef Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 00:59:30 +0100 Subject: [PATCH 113/691] 79.8%: improve TrackCar/TrackCop Update with manual fov max, restructured distance clamp Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 80 ++++++++++++---------- 1 file changed, 42 insertions(+), 38 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 01099623e..39c68bb79 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -1409,70 +1409,74 @@ TrackCarCameraMover::~TrackCarCameraMover() { void TrackCarCameraMover::Update(float dT) { if (!TheGameFlowManager.IsPaused()) { - bVector3 world_up(0.0f, 0.0f, 1.0f); - bVector3 to_car; - bVector3 offset; - bMatrix4 camera_matrix; - float dist; - float inv_dist; - float focal_distance; + bVector3 up(0.0f, 0.0f, 1.0f); + unsigned short fov; GetCamera()->SetSimTimeMultiplier(1.0f); - to_car.x = Eye.x - CarToFollow->GetGeomPos()->x; - to_car.y = Eye.y - CarToFollow->GetGeomPos()->y; - to_car.z = Eye.z - CarToFollow->GetGeomPos()->z; - dist = bLength(&to_car); - - if (dist > 0.0f) { - unsigned short fov = bATan(dist, TrackCarIsoZoomDistance[CameraType]); - unsigned int fov_limit = bMax(800, static_cast((fov & 0x7fff) << 1)); + bVector3 displacement = Eye - *CarToFollow->GetGeometryPosition(); + float distance = bLength(&displacement); + if (distance < 1.0f) { + distance = 1.0f; + } + fov = bATan(distance, TrackCarIsoZoomDistance[CameraType]); + unsigned int x = static_cast(fov & 0x7fff) << 1; + if (x) { + int fov_limit = 800; + if (static_cast(x) > 800) { + fov_limit = static_cast(x); + } if (fov_limit > 0x332c) { fov_limit = 0x332c; } - if (Camera::StopUpdating == 0 && (fov & 0x7fff) != 0) { + if (Camera::StopUpdating == 0) { GetCamera()->SetFieldOfView(static_cast(fov_limit)); } } - Look = *CarToFollow->GetGeomPos(); - inv_dist = dist > 1.0f ? 1.0f / dist : 1.0f; - to_car.x *= inv_dist; - to_car.y *= inv_dist; - to_car.z *= inv_dist; - world_up = bCross(to_car, world_up); + Look = *CarToFollow->GetGeometryPosition(); + displacement /= distance; + bVector3 hcomp; + bCross(&hcomp, &displacement, &up); - offset.x = TrackCarLookOffsetX[CameraType]; - offset.y = TrackCarLookOffsetY[CameraType]; - offset.z = TrackCarLookOffsetZ[CameraType]; - eMulVector(&offset, CarToFollow->GetMatrix(), &offset); + bVector3 look_offset; + look_offset.x = TrackCarLookOffsetX[CameraType]; + look_offset.y = TrackCarLookOffsetY[CameraType]; + look_offset.z = TrackCarLookOffsetZ[CameraType]; + float vert_comp = 0.0f; + bScale(&hcomp, &hcomp, vert_comp); + eMulVector(&look_offset, CarToFollow->GetGeometryOrientation(), &look_offset); - Look.x += offset.x; - Look.y += offset.y; - Look.z += offset.z; + Look += look_offset; + bVector3 lookdir = Look - Eye; + bNormalize(&lookdir, &lookdir); - eCreateLookAtMatrix(&camera_matrix, Eye, Look, world_up); - focal_distance = bDistBetween(CarToFollow->GetGeomPos(), &Eye); + bMatrix4 m; + eCreateLookAtMatrix(&m, Eye, Look, up); + float focal_dist = bDistBetween(CarToFollow->GetGeometryPosition(), &Eye); if (Camera::StopUpdating == 0) { - GetCamera()->SetTargetDistance(focal_distance); + GetCamera()->SetTargetDistance(focal_dist); } - FocalDistCubic.dVal = FocalDistCubic.Val * 0.1f; - SplineSeek(&FocalDistCubic, dT, 0.0f, 0.0f); - focal_distance = bMax(1.0f, focal_distance + FocalDistCubic.Val); + FocalDistCubic.dValDesired = FocalDistCubic.Val * 0.1f; + SplineSeek(&FocalDistCubic, dT, vert_comp, vert_comp); + focal_dist += FocalDistCubic.Val; + if (focal_dist < 2.0f) { + focal_dist = 2.0f; + } if (FocusEffects) { if (Camera::StopUpdating == 0) { - GetCamera()->SetFocalDistance(focal_distance + FocalDistCubic.Val); + GetCamera()->SetFocalDistance(focal_dist + FocalDistCubic.Val); } if (Camera::StopUpdating == 0) { GetCamera()->SetDepthOfField(2.0f); } } - GetCamera()->SetCameraMatrix(camera_matrix, dT); - if (IsSomethingInBetween(GetCamera()->GetPosition(), CarToFollow->GetGeomPos())) { + GetCamera()->SetCameraMatrix(m, dT); + if (IsSomethingInBetween(GetCamera()->GetPosition(), CarToFollow->GetGeometryPosition())) { CameraAI::MaybeKillJumpCam(CarToFollow->GetWorldID()); } } From a83bcdb2a04921ddd1d916ab2554ed92f4a7d57e Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 01:57:18 +0100 Subject: [PATCH 114/691] Tune decomp workflow context helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/execute/SKILL.md | 2 +- .github/skills/implement/SKILL.md | 14 + AGENTS.md | 25 +- tools/_common.py | 46 +- tools/decomp-context.py | 745 ++++++++++++++++++++++++++++-- tools/decomp-diff.py | 30 +- tools/decomp-status.py | 18 +- tools/decomp-workflow.py | 179 ++++++- 8 files changed, 1009 insertions(+), 50 deletions(-) diff --git a/.github/skills/execute/SKILL.md b/.github/skills/execute/SKILL.md index 3a8fafbe3..66443927e 100644 --- a/.github/skills/execute/SKILL.md +++ b/.github/skills/execute/SKILL.md @@ -55,7 +55,7 @@ Determine the file path (e.g. `src/Speed/Indep/SourceLists/zWorld2`). The game u Preferred shortcut: ```sh -python tools/decomp-workflow.py unit -u main/Path/To/TU +python tools/decomp-workflow.py unit -u main/Path/To/TU --limit 20 ``` Manual equivalent: diff --git a/.github/skills/implement/SKILL.md b/.github/skills/implement/SKILL.md index 0e68e78c2..66580e0c5 100644 --- a/.github/skills/implement/SKILL.md +++ b/.github/skills/implement/SKILL.md @@ -17,9 +17,19 @@ Preferred shortcut: ```sh python tools/decomp-workflow.py function -u main/Path/To/TU -f FunctionName +python tools/decomp-workflow.py function -u main/Path/To/TU -f FunctionName --brief python tools/decomp-workflow.py diff -u main/Path/To/TU -d FunctionName ``` +If you only need one Ghidra view, add `--ghidra-version gc` or `--ghidra-version ps2` +to keep the context run faster and shorter. + +The wrapper defaults to compact GC DWARF signatures. Add `--lookup-mode full` when you +need the full DWARF body with locals and nested inline info. + +Add `--brief` when you want a shorter helper view; it trims suggested commands and +related-source hints while keeping the core source/status/diff context. + Equivalent manual form: ```sh @@ -29,6 +39,10 @@ python tools/decomp-context.py -u main/Path/To/TU -f FunctionName This provides in one shot: - Current source code (if any exists) +- A fallback source excerpt from the GC debug-line-mapped repo file when the metadata + source path is empty or otherwise unhelpful +- Related source-file hints when the unit metadata source is empty or unhelpful +- Compact GC DWARF signature by default, or full DWARF body with `--lookup-mode full` - objdiff status and instruction-level diff - Ghidra decompilation of the original diff --git a/AGENTS.md b/AGENTS.md index 609f8a06b..22f60e3cd 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -140,19 +140,40 @@ Prefer this wrapper for routine agent-driven flows instead of manually chaining ```sh python tools/decomp-workflow.py health python tools/decomp-workflow.py health --smoke-build-unit main/Speed/Indep/SourceLists/zAnim +python tools/decomp-workflow.py health --smoke-dtk main/Speed/Indep/SourceLists/zAnim python tools/decomp-workflow.py build -u main/Speed/Indep/SourceLists/zAnim python tools/decomp-workflow.py diff -u main/Speed/Indep/SourceLists/zAnim -d FindIOWin python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zAnim -f FindIOWin -python tools/decomp-workflow.py unit -u main/Speed/Indep/SourceLists/zAnim +python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zAnim -f FindIOWin --brief +python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zAnim -f FindIOWin --ghidra-version gc +python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zAnim -f FindIOWin --lookup-mode full +python tools/decomp-workflow.py unit -u main/Speed/Indep/SourceLists/zAnim --search FindIOWin --limit 20 ``` The wrapper keeps the existing tools as the source of truth. It is intended to reduce repeated command chaining and to standardize temp-object handling and worktree preflight checks for agents. +`function` is the preferred context-gathering entrypoint: it bundles source excerpt, +objdiff status/diff, compact GC DWARF function lookup, and Ghidra output in one run. +If the unit metadata points at an empty or otherwise useless source-list file, it also +falls back to the GC debug-line-mapped repo source file when that file exists and has +real content. +Add `--brief` when you want to keep the helper sections compact; it trims suggested +commands and related-source hints without hiding the core status/diff/source data. + +When working with these tools, do not just work around recurring friction silently. If you +notice a clear, safe workflow or tooling improvement that would make future decomp work +faster, shorter, or more reliable, prefer implementing that improvement as part of the task +instead of leaving the paper cut in place. Favor small, surgical tuning to wrappers, shared +helpers, error messages, output shaping, and context-gathering defaults when they remove +repeated manual steps for future agents. + On a newly updated or unusual worktree, run `python tools/decomp-workflow.py health` first. If it reports missing generated files such as `objdiff.json` or `build.ninja`, run -`python configure.py` in that worktree before using the decomp wrappers. +`python configure.py` in that worktree before using the decomp wrappers. `health` also +checks the debug-symbol side of the setup now: GC/PS2 `symbols.txt`, GC DWARF lookup, +PS2 type lookup, and the GC debug line mapping. ### find-symbol.py — Check for existing definitions before declaring new types diff --git a/tools/_common.py b/tools/_common.py index 773f7f12a..a479a3e57 100644 --- a/tools/_common.py +++ b/tools/_common.py @@ -2,6 +2,7 @@ import json import os +import re import shutil import subprocess import sys @@ -66,6 +67,13 @@ def load_objdiff_config() -> Dict[str, Any]: return data +def find_objdiff_unit(config: Dict[str, Any], unit_name: str) -> Optional[Dict[str, Any]]: + for unit in config.get("units", []): + if unit.get("name") == unit_name: + return unit + return None + + def make_abs(path: Optional[str], base: str = ROOT_DIR) -> Optional[str]: if path is None: return None @@ -140,8 +148,44 @@ def run_objdiff_json( capture_output=True, ) if result.returncode != 0: + stderr = result.stderr + hint_lines = [] + missing_path = None + + if "No such file or directory" in stderr: + match = re.search(r"Failed:\s+Loading\s+(.+)", stderr) + if match: + missing_path = match.group(1).strip() + + if missing_path is not None: + if base_obj is not None: + hint_lines.extend( + [ + f"Hint: the requested base object is missing: {missing_path}", + f"Rebuild it with: python tools/build-unit.py -u {unit_name}", + ] + ) + else: + hint_lines.extend( + [ + f"Hint: the shared build output for {unit_name} is missing: {missing_path}", + "Fastest one-off fix for direct tools:", + f" TEMPOBJ=$(python tools/build-unit.py -u {unit_name})", + " rerun your diff/context command with --base-obj \"$TEMPOBJ\"", + "Wrapper flows that auto-build temp objects:", + f" python tools/decomp-workflow.py unit -u {unit_name}", + f" python tools/decomp-workflow.py diff -u {unit_name} ...", + "Or rebuild shared outputs with: ninja all_source", + ] + ) + + message = format_subprocess_error( + cmd, result.returncode, result.stdout, result.stderr + ) + if hint_lines: + message += "\n" + "\n".join(hint_lines) raise ToolError( - format_subprocess_error(cmd, result.returncode, result.stdout, result.stderr) + message ) try: return json.loads(result.stdout) diff --git a/tools/decomp-context.py b/tools/decomp-context.py index 981bed4a1..3ec255d97 100644 --- a/tools/decomp-context.py +++ b/tools/decomp-context.py @@ -3,12 +3,15 @@ """ Function context gatherer for decomp work. -Collects some things an agent needs to work on matching a function: objdiff status/diff and Ghidra decompile. -Source code and dwarf info should be queried from the lookup script instead. +Collects the common function context an agent needs for matching work: +source excerpt, objdiff status/diff, GC DWARF lookup, and Ghidra decompile. Usage: python tools/decomp-context.py -u main/Speed/Indep/SourceLists/zAnim -f __9CAnimBank python tools/decomp-context.py -u main/Speed/Indep/SourceLists/zAnim -f __9CAnimBank --no-ghidra + python tools/decomp-context.py -u main/Speed/Indep/SourceLists/zAnim -f __9CAnimBank --ghidra-version gc + python tools/decomp-context.py -u main/Speed/Indep/SourceLists/zAnim -f __9CAnimBank --lookup-mode signature + python tools/decomp-context.py -u main/Speed/Indep/SourceLists/zAnim -f __9CAnimBank --no-lookup python tools/decomp-context.py -u main/Speed/Indep/SourceLists/zAnim -f __9CAnimBank --no-source python tools/decomp-context.py --ghidra-check @@ -34,11 +37,16 @@ DTK = os.path.join(root_dir, "build", "tools", "dtk") GC_SYMBOLS_FILE = os.path.join(root_dir, "config", "GOWE69", "symbols.txt") PS2_SYMBOLS_FILE = os.path.join(root_dir, "config", "SLES-53558-A124", "symbols.txt") +GC_DWARF_FILE = os.path.join(root_dir, "symbols", "mw_dwarfdump.nothpp") +DEBUG_LINES_FILE = os.path.join(root_dir, "symbols", "debug_lines.txt") GC_GHIDRA_PROGRAM = "NFSMWRELEASE.ELF" PS2_GHIDRA_PROGRAM = "NFS.ELF" # Number of lines of context to show before/after the matched function in source SOURCE_CONTEXT_LINES = 5 +RELATED_SOURCE_LIMIT = 8 +BRIEF_RELATED_SOURCE_LIMIT = 3 +BRIEF_SUGGESTED_COMMAND_LIMIT = 2 def load_project_config() -> Dict[str, Any]: @@ -98,6 +106,16 @@ def find_symbol_in_diff( return None, None +def describe_symbol_presence( + left_sym: Optional[Dict[str, Any]], right_sym: Optional[Dict[str, Any]] +) -> str: + if left_sym is not None and right_sym is None: + return "missing in decomp output" + if left_sym is None and right_sym is not None: + return "extra in decomp output" + return "present on both sides" + + def lookup_symbol_address(file: str, mangled_name: str) -> Optional[str]: """Look up a symbol's address from symbols.txt.""" if not os.path.exists(file): @@ -113,6 +131,53 @@ def lookup_symbol_address(file: str, mangled_name: str) -> Optional[str]: return None +def format_hex_address(address: str) -> str: + return address if address.lower().startswith("0x") else f"0x{address}" + + +def lookup_function_dwarf(query: str) -> Tuple[Optional[str], Optional[str]]: + """Query the combined GC DWARF dump for one function.""" + if not os.path.exists(GC_DWARF_FILE): + return None, f"DWARF dump not found: {GC_DWARF_FILE}" + + cmd = [ + sys.executable, + os.path.join(script_dir, "lookup.py"), + "--file", + GC_DWARF_FILE, + "function", + query, + ] + result = subprocess.run(cmd, capture_output=True, cwd=root_dir, text=True) + if result.returncode == 0: + return result.stdout.strip(), None + + detail = result.stderr.strip() or result.stdout.strip() or "lookup failed" + return None, detail + + +def compact_dwarf_function_text(text: str) -> str: + lines = [line.rstrip() for line in text.splitlines()] + kept: List[str] = [] + signature = None + + for line in lines: + stripped = line.strip() + if not stripped: + continue + if stripped.startswith("//"): + if stripped.startswith("// Range:") or stripped.startswith("// this:"): + kept.append(line) + continue + signature = line + break + + if signature is not None: + kept.append(signature) + + return "\n".join(kept) if kept else text + + def search_symbols_file(file: str, name: str) -> List[Tuple[str, str, str]]: """Search symbols.txt for entries matching a name. Returns [(mangled, section, address)].""" if not os.path.exists(file): @@ -243,6 +308,9 @@ def extract_source_for_function( with open(full_path) as f: all_lines = f.readlines() + if not all_lines: + return "" + # Collect all source line numbers referenced by the decomp symbol's instructions line_numbers: List[int] = [] if right_sym: @@ -264,13 +332,441 @@ def extract_source_for_function( # the function body, giving context. start = max(1, first_line - SOURCE_CONTEXT_LINES) end = min(len(all_lines), last_line + SOURCE_CONTEXT_LINES) + if start > end: + return "" # 1-indexed lines -> 0-indexed slice excerpt = all_lines[start - 1 : end] + if not excerpt: + return "" header = f"// Lines {start}–{end} of {source_path}\n" return header + "".join(excerpt) +def extract_source_around_line( + source_path: str, line_number: int, context_lines: int = SOURCE_CONTEXT_LINES +) -> Optional[str]: + full_path = os.path.join(root_dir, source_path) + if not os.path.exists(full_path): + return None + + with open(full_path) as f: + all_lines = f.readlines() + + if not all_lines: + return "" + + target_line = min(max(1, line_number), len(all_lines)) + start = max(1, target_line - context_lines) + end = min(len(all_lines), target_line + context_lines) + excerpt = all_lines[start - 1 : end] + header = ( + f"// Lines {start}–{end} of {source_path} " + f"(GC debug-line fallback, target line {line_number})\n" + ) + return header + "".join(excerpt) + + +def definition_name_variants(function_name: str) -> Tuple[List[str], Optional[str]]: + qualified = function_name.split("(", 1)[0].strip() + scoped_parts = [part.strip() for part in qualified.split("::") if part.strip()] + + qualified_variants: List[str] = [] + if qualified: + qualified_variants.append(qualified) + if len(scoped_parts) >= 2: + tail_qualified = "::".join(scoped_parts[-2:]) + if tail_qualified not in qualified_variants: + qualified_variants.append(tail_qualified) + + bare_name = scoped_parts[-1] if scoped_parts else (qualified or None) + return qualified_variants, bare_name + + +def line_has_nearby_open_brace(lines: List[str], line_number: int) -> bool: + start = max(1, line_number) + end = min(len(lines), line_number + 2) + for idx in range(start, end + 1): + if "{" in lines[idx - 1]: + return True + return False + + +def find_function_definition_line( + lines: List[str], function_name: str, target_line: Optional[int] = None +) -> Optional[int]: + qualified_variants, bare_name = definition_name_variants(function_name) + candidates: List[Tuple[int, int]] = [] + + for index, raw_line in enumerate(lines, start=1): + line = raw_line.strip() + if not line: + continue + + score = 0 + for i, qualified in enumerate(qualified_variants): + if re.search(rf"\b{re.escape(qualified)}\s*\(", line): + score = max(score, 260 - (i * 40)) + + if bare_name and re.search(rf"\b{re.escape(bare_name)}\s*\(", line): + score = max(score, 120) + + if score == 0: + continue + + if line.endswith(";"): + score -= 120 + if "::" in line: + score += 20 + if line_has_nearby_open_brace(lines, index): + score += 35 + + if target_line is not None: + score -= min(abs(index - target_line), 120) + + candidates.append((score, index)) + + if not candidates: + return None + + if target_line is None: + candidates.sort(key=lambda item: (-item[0], item[1])) + else: + candidates.sort(key=lambda item: (-item[0], abs(item[1] - target_line), item[1])) + return candidates[0][1] + + +def extract_source_for_definition( + source_path: str, definition_line: int, target_line: Optional[int] = None +) -> Optional[str]: + full_path = os.path.join(root_dir, source_path) + if not os.path.exists(full_path): + return None + + with open(full_path) as f: + all_lines = f.readlines() + + if not all_lines: + return "" + + start = definition_line + while start > 1: + previous = all_lines[start - 2].strip() + if not previous or previous.endswith(";") or previous == "}": + break + if previous.startswith("//"): + break + start -= 1 + if definition_line - start >= 3: + break + + brace_depth = 0 + saw_open_brace = False + end: Optional[int] = None + for index in range(start, len(all_lines) + 1): + line = all_lines[index - 1] + if "{" in line: + saw_open_brace = True + if saw_open_brace: + brace_depth += line.count("{") + brace_depth -= line.count("}") + if brace_depth <= 0: + end = index + break + + if end is None: + return extract_source_around_line( + source_path, + target_line if target_line is not None else definition_line, + ) + + excerpt = all_lines[start - 1 : end] + detail = "GC debug-line fallback, matched definition" + if target_line is not None: + detail += f", target line {target_line}" + header = f"// Lines {start}–{end} of {source_path} ({detail})\n" + return header + "".join(excerpt) + + +def extract_source_from_debug_hint( + source_path: str, function_name: str, target_line: int +) -> Optional[str]: + full_path = os.path.join(root_dir, source_path) + if not os.path.exists(full_path): + return None + + with open(full_path) as f: + all_lines = f.readlines() + + if not all_lines: + return "" + + definition_line = find_function_definition_line( + all_lines, function_name, target_line=target_line + ) + if definition_line is not None: + return extract_source_for_definition( + source_path, definition_line, target_line=target_line + ) + + return extract_source_around_line(source_path, target_line) + + +def resolve_repo_path_from_debug_path(debug_path: str) -> Optional[str]: + normalized = debug_path.replace("\\", "/").strip() + lowered = normalized.lower() + + suffixes: List[str] = [] + if "/speed/indep/" in lowered: + suffixes.append(lowered.split("/speed/indep/", 1)[1].lstrip("/")) + if "/src/" in lowered: + suffixes.append("src/" + lowered.split("/src/", 1)[1].lstrip("/")) + basename = os.path.basename(lowered) + if basename: + suffixes.append(basename) + + matches: List[str] = [] + source_root = os.path.join(root_dir, "src") + for dirpath, _, filenames in os.walk(source_root): + for filename in filenames: + rel_path = os.path.relpath(os.path.join(dirpath, filename), root_dir) + rel_lower = rel_path.replace("\\", "/").lower() + if any(rel_lower.endswith(suffix) for suffix in suffixes): + matches.append(rel_path) + + if not matches: + return None + matches.sort(key=lambda path: (len(path), path)) + return matches[0] + + +def lookup_debug_line_source(address: str) -> Tuple[Optional[Dict[str, Any]], Optional[str]]: + if not os.path.exists(DEBUG_LINES_FILE): + return None, f"debug lines file not found: {DEBUG_LINES_FILE}" + + try: + target = int(address, 16) + except ValueError: + return None, f"invalid address for debug line lookup: {address}" + + pattern = re.compile(r"^\s*0x([0-9A-Fa-f]+):\s*(.+?)\s+\(line\s+(\d+)\)\s*$") + best: Optional[Dict[str, Any]] = None + + with open(DEBUG_LINES_FILE) as f: + for raw_line in f: + line = raw_line.rstrip("\n") + match = pattern.match(line) + if match is None: + continue + + entry_addr = int(match.group(1), 16) + diff = abs(entry_addr - target) + candidate = { + "address": f"0x{entry_addr:08X}", + "debug_path": match.group(2), + "line_number": int(match.group(3)), + "exact": diff == 0, + "diff": diff, + } + if best is None or diff < int(best["diff"]): + best = candidate + if diff == 0: + break + + if best is None: + return None, f"no entries found in {DEBUG_LINES_FILE}" + + best["repo_path"] = resolve_repo_path_from_debug_path(str(best["debug_path"])) + return best, None + + +def split_function_search_terms(function_name: str) -> Tuple[List[str], List[str]]: + qualified = function_name.split("(", 1)[0].strip() + scoped_parts = [part.strip() for part in qualified.split("::") if part.strip()] + + phrases: List[str] = [] + tokens: List[str] = [] + + if qualified: + phrases.append(qualified) + + for part in scoped_parts: + if part and part not in tokens: + tokens.append(part) + + bare = re.sub(r"[^A-Za-z0-9_:]", " ", function_name) + for token in bare.replace("::", " ").split(): + if len(token) >= 3 and token not in tokens: + tokens.append(token) + + return phrases, tokens + + +def find_related_source_files( + function_name: str, exclude_path: Optional[str] = None +) -> List[Tuple[int, str, List[str]]]: + source_root = os.path.join(root_dir, "src") + if not os.path.isdir(source_root): + return [] + + phrases, tokens = split_function_search_terms(function_name) + if not phrases and not tokens: + return [] + + class_token = tokens[0] if tokens else None + method_token = tokens[-1] if tokens else None + + candidates: List[Tuple[int, str, List[str]]] = [] + for dirpath, _, filenames in os.walk(source_root): + for filename in filenames: + if not filename.endswith((".cpp", ".hpp", ".h")): + continue + + abs_path = os.path.join(dirpath, filename) + rel_path = os.path.relpath(abs_path, root_dir) + if exclude_path and rel_path == exclude_path: + continue + path_lower = rel_path.lower() + score = 0 + reasons: List[str] = [] + is_cpp = rel_path.endswith(".cpp") + is_header = rel_path.endswith((".hpp", ".h")) + + try: + file_size = os.path.getsize(abs_path) + except OSError: + continue + + if is_cpp: + score += 35 + reasons.append("implementation file") + elif is_header: + score += 5 + + if file_size == 0: + score -= 140 + reasons.append("empty file") + + if "/generated/" in path_lower: + score -= 40 + + if class_token and class_token.lower() in path_lower: + score += 90 + reasons.append(f"path mentions {class_token}") + if method_token and method_token.lower() in path_lower and method_token != class_token: + score += 30 + reasons.append(f"path mentions {method_token}") + + basename = os.path.splitext(os.path.basename(rel_path))[0] + if class_token and basename.lower() == class_token.lower(): + score += 90 if is_cpp else 45 + reasons.append(f"basename matches {class_token}") + + try: + with open(abs_path, errors="ignore") as f: + text = f.read() + except OSError: + continue + + if class_token and method_token: + qualified = f"{class_token}::{method_token}" + if qualified in text: + score += 320 + reasons.append(f"contains {qualified}") + + for phrase in phrases: + if phrase and phrase in text: + score += 220 + reasons.append(f"contains {phrase}") + break + + if class_token: + if re.search(rf"\b(class|struct)\s+{re.escape(class_token)}\b", text): + score += 140 + reasons.append(f"declares {class_token}") + if f"{class_token}::" in text: + score += 80 + reasons.append(f"mentions {class_token}::") + + if method_token and re.search(rf"\b{re.escape(method_token)}\s*\(", text): + score += 35 + reasons.append(f"mentions {method_token}(") + + if score > 0: + deduped_reasons = [] + for reason in reasons: + if reason not in deduped_reasons: + deduped_reasons.append(reason) + candidates.append((score, rel_path, deduped_reasons[:3])) + + candidates.sort(key=lambda item: (-item[0], item[1])) + return candidates[:RELATED_SOURCE_LIMIT] + + +def format_related_source_files( + function_name: str, + source_path: Optional[str], + gc_addr: Optional[str] = None, + debug_hint: Optional[Dict[str, Any]] = None, + debug_err: Optional[str] = None, + brief: bool = False, +) -> str: + lines = [] + if source_path: + full_source_path = os.path.join(root_dir, source_path) + if not os.path.exists(full_source_path): + lines.append(f"Primary metadata source is missing: {source_path}") + elif os.path.getsize(full_source_path) == 0: + lines.append(f"Primary metadata source is empty: {source_path}") + else: + lines.append(f"Primary metadata source was not useful: {source_path}") + lines.append("") + + if debug_hint is None and debug_err is None and gc_addr: + debug_hint, debug_err = lookup_debug_line_source(gc_addr) + + if gc_addr: + if debug_hint is not None: + display_path = str(debug_hint.get("repo_path") or debug_hint.get("debug_path")) + suffix = "" + repo_path = debug_hint.get("repo_path") + if repo_path: + full_repo_path = os.path.join(root_dir, str(repo_path)) + if os.path.exists(full_repo_path) and os.path.getsize(full_repo_path) == 0: + suffix = ", file is currently empty in repo" + if debug_hint.get("exact"): + relation = f"exact address match for {format_hex_address(gc_addr)}" + else: + relation = ( + f"closest debug line to {format_hex_address(gc_addr)} " + f"(off by {debug_hint['diff']} / 0x{int(debug_hint['diff']):X})" + ) + lines.append("GC debug line mapping suggests:") + lines.append( + f"- {display_path}:{debug_hint['line_number']} ({relation}{suffix})" + ) + lines.append("") + elif debug_err: + lines.append(f"GC debug line mapping unavailable: {debug_err}") + lines.append("") + + hints = find_related_source_files(function_name, exclude_path=source_path) + if not hints: + lines.append(f"No related source files found for {function_name}.") + return "\n".join(lines) + + lines.append(f"Likely related files for {function_name}:") + shown_hints = hints[:BRIEF_RELATED_SOURCE_LIMIT] if brief else hints + for score, rel_path, reasons in shown_hints: + lines.append(f"- {rel_path} ({', '.join(reasons)})") + if brief and len(hints) > len(shown_hints): + omitted = len(hints) - len(shown_hints) + lines.append( + f"- ... {omitted} more omitted in brief mode (rerun without --brief)" + ) + return "\n".join(lines) + + def strip_ansi(text: str) -> str: """Remove ANSI escape codes from text.""" return re.sub(r"\x1b\[[0-9;]*m", "", text) @@ -327,6 +823,92 @@ def print_ghidra_decompilation( ) +def print_gc_dwarf_lookup( + function: str, mangled_function: str, lookup_mode: str = "full" +) -> None: + addr = lookup_symbol_address(GC_SYMBOLS_FILE, mangled_function) + + lookup_queries = [] + if addr: + lookup_queries.append(f"0x{addr}") + lookup_queries.append(function) + + seen_queries = set() + for query in lookup_queries: + if query in seen_queries: + continue + seen_queries.add(query) + dwarf_text, err = lookup_function_dwarf(query) + if dwarf_text is not None: + title = "GOWE69: DWARF Function" + if query.startswith("0x"): + title += f" ({query})" + if lookup_mode == "signature": + title += " (signature)" + dwarf_text = compact_dwarf_function_text(dwarf_text) + print_section(title, dwarf_text) + return + + if addr: + print( + f"\nDWARF lookup failed for {function} / 0x{addr}: {err}", + file=sys.stderr, + ) + else: + print(f"\nDWARF lookup failed for {function}: {err}", file=sys.stderr) + + +def format_suggested_commands( + unit_name: str, + function_query: str, + symbol_name: str, + left_sym: Optional[Dict[str, Any]], + right_sym: Optional[Dict[str, Any]], + brief: bool = False, +) -> str: + commands = [] + + if left_sym is not None and right_sym is None: + commands.extend( + [ + f"python tools/decomp-workflow.py function -u {unit_name} -f '{function_query}' --lookup-mode full", + f"python tools/decomp-workflow.py function -u {unit_name} -f '{function_query}' --ghidra-version gc", + f"python tools/decomp-workflow.py unit -u {unit_name} --search '{function_query}' --limit 20", + ] + ) + elif left_sym is not None and right_sym is not None: + commands.extend( + [ + f"python tools/decomp-workflow.py diff -u {unit_name} -d '{function_query}' -C 8", + f"python tools/decomp-workflow.py function -u {unit_name} -f '{function_query}' --lookup-mode full", + f"python tools/decomp-workflow.py function -u {unit_name} -f '{function_query}' --ghidra-version gc", + ] + ) + elif left_sym is None and right_sym is not None: + commands.extend( + [ + f"python tools/decomp-workflow.py function -u {unit_name} -f '{function_query}' --lookup-mode full", + f"python tools/find-symbol.py '{symbol_name}'", + f"python tools/decomp-workflow.py unit -u {unit_name} --search '{function_query}' --limit 20", + ] + ) + else: + commands.extend( + [ + f"python tools/decomp-workflow.py unit -u {unit_name} --search '{function_query}' --limit 20", + f"python tools/decomp-workflow.py diff -u {unit_name} --search '{function_query}' --limit 20", + ] + ) + + shown_commands = commands[:BRIEF_SUGGESTED_COMMAND_LIMIT] if brief else commands + lines = [f"- {command}" for command in shown_commands] + if brief and len(commands) > len(shown_commands): + lines.append( + f"- ... {len(commands) - len(shown_commands)} more omitted in brief mode" + ) + return "\n".join(lines) + + def main(): parser = argparse.ArgumentParser( description="Gather context for decomp function matching" @@ -341,6 +923,26 @@ def main(): parser.add_argument( "--no-ghidra", action="store_true", help="Skip Ghidra decompile" ) + parser.add_argument( + "--ghidra-version", + choices=["both", "gc", "ps2"], + default="both", + help="Choose which Ghidra decompile(s) to show (default: both)", + ) + parser.add_argument( + "--no-lookup", action="store_true", help="Skip GC DWARF function lookup" + ) + parser.add_argument( + "--lookup-mode", + choices=["full", "signature"], + default="full", + help="Choose how much GC DWARF function detail to show (default: full)", + ) + parser.add_argument( + "--brief", + action="store_true", + help="Trim helper sections like related-source hints and suggested commands", + ) parser.add_argument( "--ghidra-check", action="store_true", @@ -382,26 +984,65 @@ def main(): if diff_data: left_sym, right_sym = find_symbol_in_diff(diff_data, args.function) + context_name = args.function + gc_addr = None + if left_sym or right_sym: + sym = left_sym if left_sym is not None else right_sym + assert sym is not None + context_name = sym.get("demangled_name", sym.get("name", args.function)) + gc_addr = lookup_symbol_address(GC_SYMBOLS_FILE, sym.get("name", "")) + debug_hint = None + debug_hint_err = None + if gc_addr: + debug_hint, debug_hint_err = lookup_debug_line_source(gc_addr) + # === Source File (scoped to function if line info available) === - if not args.no_source and source_path: - excerpt = extract_source_for_function(source_path, right_sym) - if excerpt is not None: - label = "Source" - if right_sym and right_sym.get("instructions"): - # Check if we actually got line info - has_lines = any( - inst.get("instruction", {}).get("line_number") is not None - for inst in right_sym.get("instructions", []) - ) - if has_lines: - label = "Source (function excerpt)" - else: - label = f"Source (full file — no line info): {source_path}" - print_section(label, excerpt) - else: - print( - f"\nSource file not found: {os.path.join(root_dir, source_path)}", - file=sys.stderr, + source_was_useful = False + if not args.no_source: + if source_path: + excerpt = extract_source_for_function(source_path, right_sym) + if excerpt is not None and excerpt.strip(): + label = "Source" + if right_sym and right_sym.get("instructions"): + # Check if we actually got line info + has_lines = any( + inst.get("instruction", {}).get("line_number") is not None + for inst in right_sym.get("instructions", []) + ) + if has_lines: + label = "Source (function excerpt)" + else: + label = f"Source (full file — no line info): {source_path}" + print_section(label, excerpt) + source_was_useful = True + + if ( + not source_was_useful + and debug_hint is not None + and debug_hint.get("repo_path") is not None + ): + fallback_source = str(debug_hint["repo_path"]) + fallback_line = int(debug_hint.get("line_number", 0)) + fallback_excerpt = extract_source_from_debug_hint( + fallback_source, + context_name, + fallback_line, + ) + if fallback_excerpt is not None and fallback_excerpt.strip(): + print_section("Source (GC debug-line fallback)", fallback_excerpt) + source_was_useful = True + + if not source_was_useful: + print_section( + "Related Source Files", + format_related_source_files( + context_name, + source_path, + gc_addr=gc_addr, + debug_hint=debug_hint, + debug_err=debug_hint_err, + brief=args.brief, + ), ) # === objdiff Status === @@ -418,10 +1059,11 @@ def main(): status_lines.append(f"Function: {name}") status_lines.append(f"Mangled: {mangled}") status_lines.append(f"Size: {size} bytes") - if mp is not None: + status_lines.append( + f"Status: {describe_symbol_presence(left_sym, right_sym)}" + ) + if left_sym and right_sym and mp is not None: status_lines.append(f"Match: {mp:.1f}%") - else: - status_lines.append("Match: N/A (not in both sides)") # Quick diff summary if left_sym and right_sym: @@ -437,8 +1079,29 @@ def main(): print_section("objdiff Status", "\n".join(status_lines)) - # Run decomp-diff.py for the actual diff if not 100% - if mp is not None and mp < 100.0: + print_section( + "Suggested Next Commands", + format_suggested_commands( + args.unit, args.function, name, left_sym, right_sym, brief=args.brief + ), + ) + + if not source_was_useful and args.no_source: + print_section( + "Related Source Files", + format_related_source_files( + name, + source_path, + gc_addr=gc_addr, + debug_hint=debug_hint, + debug_err=debug_hint_err, + brief=args.brief, + ), + ) + + # Run decomp-diff.py for the actual diff unless the function is already fully matched. + show_diff = not (left_sym and right_sym and mp is not None and mp >= 100.0) + if show_diff: diff_cmd = [ sys.executable, os.path.join(script_dir, "decomp-diff.py"), @@ -475,21 +1138,31 @@ def main(): print(f"\nFailed to run objdiff for {args.unit}", file=sys.stderr) # === Ghidra Decompile === + if not args.no_lookup and (left_sym or right_sym): + sym = left_sym if left_sym is not None else right_sym + assert sym is not None + name = sym.get("demangled_name", args.function) + mangled = sym.get("name", "") + + print_gc_dwarf_lookup(name, mangled, lookup_mode=args.lookup_mode) + if not args.no_ghidra and (left_sym or right_sym): sym = left_sym if left_sym is not None else right_sym assert sym is not None mangled = sym.get("name", "") - print_ghidra_decompilation( - "GOWE69", GC_SYMBOLS_FILE, GC_GHIDRA_PROGRAM, args.function, mangled - ) - print_ghidra_decompilation( - "SLES-53558-A124", - PS2_SYMBOLS_FILE, - PS2_GHIDRA_PROGRAM, - args.function, - mangled, - ) + if args.ghidra_version in ("both", "gc"): + print_ghidra_decompilation( + "GOWE69", GC_SYMBOLS_FILE, GC_GHIDRA_PROGRAM, args.function, mangled + ) + if args.ghidra_version in ("both", "ps2"): + print_ghidra_decompilation( + "SLES-53558-A124", + PS2_SYMBOLS_FILE, + PS2_GHIDRA_PROGRAM, + args.function, + mangled, + ) if __name__ == "__main__": diff --git a/tools/decomp-diff.py b/tools/decomp-diff.py index 034397155..fda358711 100644 --- a/tools/decomp-diff.py +++ b/tools/decomp-diff.py @@ -78,6 +78,24 @@ def fuzzy_match(pattern: str, name: str) -> bool: return pattern.lower() in name.lower() +def describe_pair_status( + left_sym: Optional[Dict[str, Any]], right_sym: Optional[Dict[str, Any]] +) -> str: + if left_sym is not None and right_sym is None: + return "missing in decomp" + if left_sym is None and right_sym is not None: + return "extra in decomp" + + sym = left_sym if left_sym is not None else right_sym + if sym is None: + return "not found" + + mp = sym.get("match_percent") + if mp is not None: + return f"{mp:.1f}% match" + return "paired" + + def build_overview(data: Dict[str, Any], args) -> None: """Print overview of all symbols in a unit.""" left_syms = data.get("left", {}).get("symbols", []) @@ -147,6 +165,9 @@ def build_overview(data: Dict[str, Any], args) -> None: if args.search: rows = [r for r in rows if fuzzy_match(args.search, r[5])] + if args.limit is not None: + rows = rows[: args.limit] + if not rows: print("No symbols match the given filters.") return @@ -280,8 +301,8 @@ def build_diff(data: Dict[str, Any], symbol_name: str, args) -> None: right_insts = (right_sym or {}).get("instructions", []) n_insts = max(len(left_insts), len(right_insts)) - mp_str = f"{mp:.1f}%" if mp is not None else "N/A" - print(f"{display_name}: {mp_str} match ({size}B, {n_insts} instructions)") + status_str = describe_pair_status(left_sym, right_sym) + print(f"{display_name}: {status_str} ({size}B, {n_insts} instructions)") print() if n_insts == 0: @@ -436,6 +457,11 @@ def main(): ) parser.add_argument("--section", help="Filter by section name (e.g. .text)") parser.add_argument("--search", help="Fuzzy search on demangled symbol name") + parser.add_argument( + "--limit", + type=int, + help="Limit overview output to the first N matching rows", + ) # Diff options parser.add_argument( diff --git a/tools/decomp-status.py b/tools/decomp-status.py index 69917e7dd..8741b9675 100644 --- a/tools/decomp-status.py +++ b/tools/decomp-status.py @@ -17,7 +17,7 @@ import json import os import sys -from typing import Any, Dict, List, Optional +from typing import Any, Dict, List, Optional, Tuple from _common import ROOT_DIR, ToolError, fail, load_objdiff_config, run_objdiff_json root_dir = ROOT_DIR @@ -30,12 +30,12 @@ def load_project_config() -> Dict[str, Any]: return load_objdiff_config() -def run_objdiff(unit_name: str) -> Optional[Dict[str, Any]]: +def run_objdiff(unit_name: str) -> Tuple[Optional[Dict[str, Any]], Optional[str]]: """Run objdiff-cli diff for a unit and return parsed JSON.""" try: - return run_objdiff_json(OBJDIFF_CLI, unit_name, root_dir=root_dir) - except ToolError: - return None + return run_objdiff_json(OBJDIFF_CLI, unit_name, root_dir=root_dir), None + except ToolError as e: + return None, str(e) def analyze_unit(diff_data: Dict[str, Any]) -> Dict[str, Any]: @@ -156,13 +156,14 @@ def main(): entry["status"] = "complete" entry["text_match"] = 100.0 elif has_target and has_base: - diff_data = run_objdiff(name) + diff_data, error_message = run_objdiff(name) if diff_data: stats = analyze_unit(diff_data) entry.update(stats) entry["status"] = "incomplete" else: entry["status"] = "error" + entry["error_message"] = error_message elif has_target and not has_base: entry["status"] = "no_source" else: @@ -217,6 +218,11 @@ def main(): print(f" {display_name:<50s} no source file") elif status == "error": print(f" {display_name:<50s} error running objdiff") + if args.unit: + error_message = entry.get("error_message") + if error_message: + for line in error_message.splitlines(): + print(f" {line}") # Add complete units to totals complete_count = sum(1 for e in entries if e.get("status") == "complete") diff --git a/tools/decomp-workflow.py b/tools/decomp-workflow.py index 8c6da989f..6b1e92e10 100644 --- a/tools/decomp-workflow.py +++ b/tools/decomp-workflow.py @@ -9,14 +9,20 @@ python tools/decomp-workflow.py health python tools/decomp-workflow.py health --smoke-build-unit main/Speed/Indep/SourceLists/zCamera python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll + python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll --brief + python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll --ghidra-version gc + python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll --lookup-mode full + python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll --no-lookup python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll --no-source python tools/decomp-workflow.py unit -u main/Speed/Indep/SourceLists/zCamera """ import argparse +import re import os import subprocess import sys +import tempfile from typing import List, Optional, Sequence, Tuple from _common import BUILD_NINJA, OBJDIFF_JSON, ROOT_DIR, ToolError, ensure_exists @@ -24,8 +30,16 @@ SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) TOOLS_DIR = os.path.join(ROOT_DIR, "tools") PS2_TYPES = os.path.join(ROOT_DIR, "symbols", "PS2", "PS2_types.nothpp") +DTK = os.path.join(ROOT_DIR, "build", "tools", "dtk") +GC_SYMBOLS = os.path.join(ROOT_DIR, "config", "GOWE69", "symbols.txt") +PS2_SYMBOLS = os.path.join(ROOT_DIR, "config", "SLES-53558-A124", "symbols.txt") +GC_DWARF = os.path.join(ROOT_DIR, "symbols", "mw_dwarfdump.nothpp") +DEBUG_LINES = os.path.join(ROOT_DIR, "symbols", "debug_lines.txt") DEFAULT_SMOKE_UNIT = "main/Speed/Indep/SourceLists/zCamera" +DEBUG_SYMBOL_PROBE_MANGLED = "UpdateAll__6Cameraf" +DEBUG_SYMBOL_PROBE_DEMANGLED = "Camera::UpdateAll(float)" +DEBUG_SYMBOL_PROBE_GC_ADDR = "0x80065A84" SHARED_ASSET_REQUIREMENTS = [ ("NFSMWRELEASE.ELF", "GameCube ELF"), @@ -124,12 +138,57 @@ def maybe_remove(path: Optional[str]) -> None: print(f"Warning: failed to remove temp object {path}: {e}", file=sys.stderr) +def dtk_dwarf_dump(obj_path: str) -> str: + fd, output_path = tempfile.mkstemp(prefix="nfsmw_dtk_", suffix=".nothpp") + os.close(fd) + maybe_remove(output_path) + + result = subprocess.run( + [DTK, "dwarf", "dump", obj_path, "-o", output_path], + cwd=ROOT_DIR, + text=True, + capture_output=True, + ) + if result.returncode != 0: + maybe_remove(output_path) + raise WorkflowError( + format_failure([DTK, "dwarf", "dump", obj_path, "-o", output_path], result.returncode, result.stdout, result.stderr) + ) + + tool_output = "\n".join( + part.strip() for part in [result.stdout, result.stderr] if part.strip() + ) + if "ERROR " in tool_output or tool_output.startswith("ERROR"): + maybe_remove(output_path) + raise WorkflowError(f"dtk reported an error while dumping DWARF:\n{tool_output}") + + if not os.path.exists(output_path): + raise WorkflowError("dtk dwarf dump succeeded but did not write an output file") + + return output_path + + def describe_path(path: str) -> str: if os.path.islink(path): return "shared-symlink" return "present" +def lookup_symbol_address(symbols_file: str, mangled_name: str) -> Optional[str]: + if not os.path.exists(symbols_file): + return None + + pattern = re.compile( + r"^" + re.escape(mangled_name) + r"\s*=\s*(?:\.(\w+):)?0x([0-9A-Fa-f]+)" + ) + with open(symbols_file) as f: + for line in f: + match = pattern.match(line.strip()) + if match: + return "0x" + match.group(2) + return None + + def command_health(args: argparse.Namespace) -> None: failures = 0 @@ -170,11 +229,56 @@ def report(ok: bool, label: str, detail: str) -> None: except WorkflowError as e: report(False, "ghidra", str(e)) + print_section("Debug Symbol Checks") + try: + gc_addr = lookup_symbol_address(GC_SYMBOLS, DEBUG_SYMBOL_PROBE_MANGLED) + report( + gc_addr == DEBUG_SYMBOL_PROBE_GC_ADDR, + "gc-symbols", + gc_addr or f"missing ({DEBUG_SYMBOL_PROBE_MANGLED})", + ) + except Exception as e: + report(False, "gc-symbols", str(e)) + + try: + ps2_addr = lookup_symbol_address(PS2_SYMBOLS, DEBUG_SYMBOL_PROBE_MANGLED) + report( + ps2_addr is not None, + "ps2-symbols", + ps2_addr or f"missing ({DEBUG_SYMBOL_PROBE_MANGLED})", + ) + except Exception as e: + report(False, "ps2-symbols", str(e)) + + try: + run_capture( + python_tool( + "lookup.py", + "--file", + GC_DWARF, + "function", + DEBUG_SYMBOL_PROBE_DEMANGLED, + ) + ) + report(True, "gc-dwarf", f"{DEBUG_SYMBOL_PROBE_DEMANGLED} found") + except WorkflowError as e: + report(False, "gc-dwarf", str(e)) + try: run_capture(python_tool("lookup.py", "--file", PS2_TYPES, "struct", "Camera")) - report(True, "ps2-lookup", "Camera found in PS2 dump") + report(True, "ps2-types", "Camera found in PS2 dump") except WorkflowError as e: - report(False, "ps2-lookup", str(e)) + report(False, "ps2-types", str(e)) + + try: + result = run_capture( + python_tool("line_lookup.py", DEBUG_LINES, DEBUG_SYMBOL_PROBE_GC_ADDR) + ) + ok = "Exact match found" in result.stdout and "Camera.cpp" in result.stdout + detail = "Camera.cpp exact match" if ok else "unexpected line lookup output" + report(ok, "debug-lines", detail) + except WorkflowError as e: + report(False, "debug-lines", str(e)) if args.smoke_build_unit: print_section("Build Smoke Test") @@ -187,6 +291,20 @@ def report(ok: bool, label: str, detail: str) -> None: finally: maybe_remove(temp_obj) + if args.smoke_dtk: + print_section("DTK Smoke Test") + temp_obj = None + dump_path = None + try: + temp_obj = build_temp_obj(args.smoke_dtk) + dump_path = dtk_dwarf_dump(temp_obj) + report(True, "dtk", dump_path) + except WorkflowError as e: + report(False, "dtk", str(e)) + finally: + maybe_remove(dump_path) + maybe_remove(temp_obj) + if failures: raise WorkflowError(f"Health check failed with {failures} issue(s)") @@ -215,8 +333,16 @@ def command_function(args: argparse.Namespace) -> None: cmd = python_tool("decomp-context.py", "-u", args.unit, "-f", args.function) if args.no_source: cmd.append("--no-source") + if args.no_lookup: + cmd.append("--no-lookup") + else: + cmd.extend(["--lookup-mode", args.lookup_mode]) if args.no_ghidra: cmd.append("--no-ghidra") + else: + cmd.extend(["--ghidra-version", args.ghidra_version]) + if args.brief: + cmd.append("--brief") if temp_obj: cmd.extend(["--base-obj", temp_obj]) run_stream(cmd) @@ -240,6 +366,10 @@ def command_unit(args: argparse.Namespace) -> None: common_args: List[str] = ["-u", args.unit, "-t", "function"] if temp_obj: common_args.extend(["--base-obj", temp_obj]) + if args.search: + common_args.extend(["--search", args.search]) + if args.limit is not None: + common_args.extend(["--limit", str(args.limit)]) print_section("Missing Functions") run_stream(python_tool("decomp-diff.py", *common_args, "-s", "missing")) @@ -283,6 +413,8 @@ def command_diff(args: argparse.Namespace) -> None: cmd.extend(["--section", args.section]) if args.search: cmd.extend(["--search", args.search]) + if args.limit is not None: + cmd.extend(["--limit", str(args.limit)]) if args.context is not None: cmd.extend(["-C", str(args.context)]) if args.range: @@ -319,6 +451,16 @@ def build_parser() -> argparse.ArgumentParser: f"{DEFAULT_SMOKE_UNIT}" ), ) + health.add_argument( + "--smoke-dtk", + metavar="UNIT", + nargs="?", + const=DEFAULT_SMOKE_UNIT, + help=( + "Also run a dtk dwarf dump smoke test. If UNIT is omitted, uses " + f"{DEFAULT_SMOKE_UNIT}" + ), + ) health.set_defaults(func=command_health) function = subparsers.add_parser( @@ -351,6 +493,28 @@ def build_parser() -> argparse.ArgumentParser: action="store_true", help="Pass through to decomp-context.py", ) + function.add_argument( + "--ghidra-version", + choices=["both", "gc", "ps2"], + default="both", + help="Pass through to decomp-context.py (default: both)", + ) + function.add_argument( + "--no-lookup", + action="store_true", + help="Pass through to decomp-context.py", + ) + function.add_argument( + "--lookup-mode", + choices=["signature", "full"], + default="signature", + help="Pass through to decomp-context.py (default: signature)", + ) + function.add_argument( + "--brief", + action="store_true", + help="Trim helper sections like related-source hints and suggested commands", + ) function.set_defaults(func=command_function) unit = subparsers.add_parser( @@ -372,6 +536,12 @@ def build_parser() -> argparse.ArgumentParser: action="store_true", help="Keep the auto-built temp object instead of deleting it afterwards", ) + unit.add_argument("--search", help="Fuzzy search on demangled symbol name") + unit.add_argument( + "--limit", + type=int, + help="Limit each symbol list to the first N matching rows", + ) unit.set_defaults(func=command_unit) build = subparsers.add_parser( @@ -405,6 +575,11 @@ def build_parser() -> argparse.ArgumentParser: ) diff.add_argument("--section", help="Filter by section name") diff.add_argument("--search", help="Fuzzy search on demangled symbol name") + diff.add_argument( + "--limit", + type=int, + help="Limit overview output to the first N matching rows", + ) diff.add_argument( "-C", "--context", From c944978e9033746df7b5be4dd81c712321c7bf45 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 02:02:19 +0100 Subject: [PATCH 115/691] 80.1%: define CameraNoise globals, init aBaselineFovNoise, improve CameraAnchor ctor and tAverage Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Camera.cpp | 2 +- src/Speed/Indep/Src/Camera/CameraMover.cpp | 18 +++++++++--------- src/Speed/Indep/Src/Misc/Table.hpp | 7 +++++-- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Camera.cpp b/src/Speed/Indep/Src/Camera/Camera.cpp index d9c1c82fb..3bd241fe0 100644 --- a/src/Speed/Indep/Src/Camera/Camera.cpp +++ b/src/Speed/Indep/Src/Camera/Camera.cpp @@ -14,7 +14,7 @@ extern int JR2ServerExists; int Camera::StopUpdating; volatile JollyRancherResponsePacket Camera::JollyRancherResponse; -static unsigned short aBaselineFovNoise; +static const unsigned short aBaselineFovNoise = 0x2AAA; static int cameralink; Camera::Camera() { diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 39c68bb79..512d53b60 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -59,14 +59,14 @@ inline void espSetCameraPositionFix(const LongVector *eye, const LongVector *tar inline void espCentrePlaneView(const bVector3 *pos) {} int bFunkDoesServerExist(const char *server_name); -extern bVector4 CameraNoiseHandheldFrequency; -extern bVector4 CameraNoiseHandheldAmplitude; -extern bVector4 CameraNoiseChopperFrequency; -extern bVector4 CameraNoiseChopperAmplitude; -extern bVector4 CameraNoiseSpeedFrequency; -extern bVector4 CameraNoiseSpeedAmplitude; -extern bVector4 CameraNoiseTerrainFrequency; -extern bVector4 CameraNoiseTerrainAmplitude; +static const bVector4 CameraNoiseHandheldFrequency(0.213f, 0.175f, 0.153f, 0.192f); +static const bVector4 CameraNoiseHandheldAmplitude(0.01f, 0.01f, 0.03f, 0.03f); +static const bVector4 CameraNoiseChopperFrequency(3.141f, 2.971f, 0.84234f, 0.92345f); +static const bVector4 CameraNoiseChopperAmplitude(0.01f, 0.05f, 1.1f, 2.7f); +static const bVector4 CameraNoiseSpeedFrequency(1.8f, 2.0f, 2.125f, 2.0f); +static const bVector4 CameraNoiseSpeedAmplitude(0.03f, 0.025f, 0.68f, 0.28f); +static const bVector4 CameraNoiseTerrainFrequency(3.0f, 5.0f, 7.0f, 5.5f); +static const bVector4 CameraNoiseTerrainAmplitude(0.007f, 0.01f, 0.3f, 0.4f); extern bVector4 CameraNoiseSpeedData[5]; extern float CameraAccelerationCurve[5]; extern bVector2 CameraSpeedHugData[5]; @@ -218,8 +218,8 @@ CameraAnchor::CameraAnchor(int model) mPOV.Height = mCameraInfoAttributes.HEIGHT(0); mPOV.LatOffset = mCameraInfoAttributes.LATOFFSET(0); mPOV.Fov = bDegToAng(mCameraInfoAttributes.FOV(0)); - mPOV.Stiffness = mCameraInfoAttributes.STIFFNESS(0); mPOV.AllowTilting = mCameraInfoAttributes.TILTING(0); + mPOV.Stiffness = mCameraInfoAttributes.STIFFNESS(0); SetModel(model); bIdentity(&mGeomRot); } diff --git a/src/Speed/Indep/Src/Misc/Table.hpp b/src/Speed/Indep/Src/Misc/Table.hpp index 301f2767d..ee6e16d7c 100644 --- a/src/Speed/Indep/Src/Misc/Table.hpp +++ b/src/Speed/Indep/Src/Misc/Table.hpp @@ -151,8 +151,11 @@ template class tAverage : public AverageBase { for (int i = 0; i < nSamples; i++) { Total += pData[i]; } - float fRecip = 1.0f / static_cast(bMax(1, static_cast(nSamples))); - Average = Total * fRecip; + int n = static_cast(nSamples); + if (n == 0) n = 1; + float fRecip = 1.0f / static_cast(n); + bVector3 result = Total * fRecip; + Average = result; } T *pData; // offset 0x8, size 0x4 From 381d6fc16f4af9c49f636b6a6b7dd9c63797a0cf Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 02:10:35 +0100 Subject: [PATCH 116/691] fix decomp-status: restore objdiff diff config flags after merge The merge from agent-decomp-workflow lost the functionRelocDiffs=none and ppc.calculatePoolRelocations=false flags, causing inflated mismatch counts. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- tools/decomp-status.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/decomp-status.py b/tools/decomp-status.py index 8741b9675..b7997dc8a 100644 --- a/tools/decomp-status.py +++ b/tools/decomp-status.py @@ -33,7 +33,13 @@ def load_project_config() -> Dict[str, Any]: def run_objdiff(unit_name: str) -> Tuple[Optional[Dict[str, Any]], Optional[str]]: """Run objdiff-cli diff for a unit and return parsed JSON.""" try: - return run_objdiff_json(OBJDIFF_CLI, unit_name, root_dir=root_dir), None + return run_objdiff_json( + OBJDIFF_CLI, unit_name, root_dir=root_dir, + extra_args=[ + "-c", "functionRelocDiffs=none", + "-c", "ppc.calculatePoolRelocations=false", + ], + ), None except ToolError as e: return None, str(e) From 164da55229408641559a2baa5af9412adbefaaf9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 02:11:09 +0100 Subject: [PATCH 117/691] 80.2%: define CameraNoiseSpeedData array with values Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 512d53b60..14cce1688 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -67,7 +67,13 @@ static const bVector4 CameraNoiseSpeedFrequency(1.8f, 2.0f, 2.125f, 2.0f); static const bVector4 CameraNoiseSpeedAmplitude(0.03f, 0.025f, 0.68f, 0.28f); static const bVector4 CameraNoiseTerrainFrequency(3.0f, 5.0f, 7.0f, 5.5f); static const bVector4 CameraNoiseTerrainAmplitude(0.007f, 0.01f, 0.3f, 0.4f); -extern bVector4 CameraNoiseSpeedData[5]; +static const bVector4 CameraNoiseSpeedData[5] = { + bVector4(0.0f, 0.0f, 0.6f, 1.0f), + bVector4(0.005f, 0.5f, 1.1f, 1.1f), + bVector4(0.03f, 0.8f, 1.2f, 1.2f), + bVector4(0.07f, 1.0f, 1.3f, 1.3f), + bVector4(0.02f, 1.0f, 1.0f, 1.4f), +}; extern float CameraAccelerationCurve[5]; extern bVector2 CameraSpeedHugData[5]; extern Graph gDriftSpeed; From cdd4c31d6bfee41084d052cfcf49b636514deac5 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 02:18:25 +0100 Subject: [PATCH 118/691] 80.2%: add const to kSelectCarWrapAngle, kEndJump/Pursuit/Speed CameraAI consts Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraAI.cpp | 12 ++++++------ src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index 23b07b4b6..5b9e50921 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -28,12 +28,12 @@ extern bool gGameBreakerCamera; void SetNewSndCamAction(Attrib::StringKey mode, EVIEW_ID viewID); static float kJumpTimeMultiplier = 2.0f; -static float kEndJumpThreshold = 0.0f; -static float kEndJumpValue = -1.0f; -static float kEndPursuitThreshold = 0.0f; -static float kEndPursuitValue = -1.0f; -static float kJumpSpeedHigh = 100.0f; -static float kJumpSpeedLow = 80.0f; +static const float kEndJumpThreshold = 0.0f; +static const float kEndJumpValue = -1.0f; +static const float kEndPursuitThreshold = 0.0f; +static const float kEndPursuitValue = -1.0f; +static const float kJumpSpeedHigh = 100.0f; +static const float kJumpSpeedLow = 80.0f; static const float kJumpDuration = 5.0f; static const float Tweak_JumpCamHighestAirTresh[2] = {2.5f, 1.8f}; diff --git a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp index a26876284..c5553f542 100644 --- a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp @@ -11,7 +11,7 @@ static float kSelectCarLowerOrbitV = 94.5f; static float kSelectCarRadiusSpeedScale = 0.125f; static float kSelectCarUpperRadius = 6.65f; static float kSelectCarLowerRadius = 4.65f; -static float kSelectCarWrapAngle = 360.0f; +static const float kSelectCarWrapAngle = 360.0f; SelectCarCameraMover::~SelectCarCameraMover() {} From c06f53d357104e062fca1360bd1fdec7a09cc843 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 02:19:14 +0100 Subject: [PATCH 119/691] 80.2%: match FovRelativeAngle by removing const from aBaselineFovNoise Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Camera.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Camera/Camera.cpp b/src/Speed/Indep/Src/Camera/Camera.cpp index 3bd241fe0..688c7b3e1 100644 --- a/src/Speed/Indep/Src/Camera/Camera.cpp +++ b/src/Speed/Indep/Src/Camera/Camera.cpp @@ -14,7 +14,7 @@ extern int JR2ServerExists; int Camera::StopUpdating; volatile JollyRancherResponsePacket Camera::JollyRancherResponse; -static const unsigned short aBaselineFovNoise = 0x2AAA; +static unsigned short aBaselineFovNoise = 0x2AAA; static int cameralink; Camera::Camera() { From 363724a7956a3085dfb0e404a9b4da723e658948 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 02:34:38 +0100 Subject: [PATCH 120/691] 80.2%: fix kFloatScaleUp/Down values, define TrackCar arrays Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Libs/Support/Utility/UVectorMath.h | 6 +++--- src/Speed/Indep/Src/Camera/CameraMover.cpp | 8 ++++---- src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h b/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h index 357af2388..24d96b4c8 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h +++ b/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h @@ -698,8 +698,8 @@ inline float V3DistanceSquared(const UMath::Vector3 &a, const UMath::Vector3 &b) return dx * dx + dy * dy + dz * dz; } -// TODO where to put these? TODO only one of them uses IntAsFloat actually -static const float kFloatScaleUp = IntAsFloat(0x7E800000); -static const float kFloatScaleDown = IntAsFloat(0x80000000); +// TODO where to put these? +static const float kFloatScaleUp = IntAsFloat(0x00800000); +static const float kFloatScaleDown = 1.0f / IntAsFloat(0x00800000); #endif diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 14cce1688..62352ee77 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -81,10 +81,10 @@ extern CarTypeInfo *GetCarTypeInfoFromHash(unsigned int car_type_hash); extern float RVMnearz; extern float RVMfarz; extern bVector3 RVMOffsetInCar; -extern float TrackCarIsoZoomDistance[3]; -extern float TrackCarLookOffsetX[3]; -extern float TrackCarLookOffsetY[3]; -extern float TrackCarLookOffsetZ[3]; +static float TrackCarIsoZoomDistance[3] = {3.3f, 3.3f, 3.3f}; +static float TrackCarLookOffsetX[3] = {1.2f, -4.0f, 1.2f}; +static float TrackCarLookOffsetY[3] = {0.0f, 0.0f, 0.0f}; +static float TrackCarLookOffsetZ[3] = {-0.2f, -0.2f, 1.0f}; void ApplyCameraShake(int nViewID, bMatrix4 *pMatrix); void HideEverySingleHud(); void SplineSeek(tCubic1D *p, float time, float fDClamp, float fDDClamp) __asm__("SplineSeek__6cPointP8tCubic1Dfff"); diff --git a/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp b/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp index e21844ab9..b15d31fa8 100644 --- a/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp @@ -2,7 +2,7 @@ #include "Speed/Indep/Src/Interfaces/Simables/IAI.h" #include "Speed/Indep/Libs/Support/Utility/UVector.h" -extern float TrackCarEyeOffsetZ[]; +static float TrackCarEyeOffsetZ[4] = {0.1f, 3.0f, 3.5f, 2.0f}; static bool IsAnyCopNear(CameraAnchor *pCar) { IVehicle *const *iter = IVehicle::GetList(VEHICLE_AICOPS).begin(); From adc43a246513f644c1702ff6c78192e71921a260 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 03:21:38 +0100 Subject: [PATCH 121/691] 80.3%: match ICETrack::GetKeyNumber Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp index 17bf36755..421d5d44e 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp @@ -130,11 +130,13 @@ int ICETrack::GetContext() { int ICETrack::GetKeyNumber(float f_param) { int i = NumKeys - 1; - float *parameters = &Keys[0].fParameter; if (i < 1) { return i; } + + float *parameters = &Keys[0].fParameter; + if (parameters[i * 33] <= f_param) { return i; } From 89b566a47556f13661ab3bc2ff2c39f7dd86d87c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 03:34:23 +0100 Subject: [PATCH 122/691] 80.3%: match ICETrack::GetParameter Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp index 421d5d44e..c9ef10fd3 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp @@ -153,26 +153,34 @@ int ICETrack::GetKeyNumber(float f_param) { } float ICETrack::GetParameter() { - float parameter = 0.0f; + float f_param = 0.0f; int context = GetContext(); - if (context == 0) { + switch (context) { + case 0: { ICEScene *scene = ICE::FindAnimScene(); if (scene != 0) { - parameter = (scene->GetTimeElapsed() - scene->GetTimeStart()) / (scene->GetTimeTotalLength() - scene->GetTimeStart()); + f_param = (scene->GetTimeElapsed() - scene->GetTimeStart()) / (scene->GetTimeTotalLength() - scene->GetTimeStart()); } - } else if (context == 1 || context == 2 || context == 3) { + break; + } + case 1: + case 3: if (0.0f < Length) { - parameter = (TheICEManager.GetTimerSeconds() - Start) / Length; - - if (1.0f < parameter) { - parameter = 1.0f; - } + float t = (TheICEManager.GetTimerSeconds() - Start) / Length; + f_param = bMin(1.0f, t); + } + break; + case 2: + if (Length > f_param) { + float t = (TheICEManager.GetTimerSeconds() - Start) / Length; + f_param = bMin(1.0f, t); } + break; } - return parameter; + return f_param; } ICEData *ICETrack::GetCameraData(float *p_start, float *p_end, float *p_current) { From 062905e22bc9a72f2f1cd4f826e57ef85aa1d8bb Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 03:39:27 +0100 Subject: [PATCH 123/691] 80.4%: improve ICETrack::GetCameraData, use bClamp for UMath::Clamp Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Libs/Support/Utility/UMath.h | 2 +- src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp | 43 +++---------------- src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp | 5 +++ 3 files changed, 13 insertions(+), 37 deletions(-) diff --git a/src/Speed/Indep/Libs/Support/Utility/UMath.h b/src/Speed/Indep/Libs/Support/Utility/UMath.h index f30129ba3..0767c4cda 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UMath.h +++ b/src/Speed/Indep/Libs/Support/Utility/UMath.h @@ -410,7 +410,7 @@ inline int Clamp(const int a, const int amin, const int amax) { } inline float Clamp(const float a, const float amin, const float amax) { - return VU0_floatmax(amin, VU0_floatmin(a, amax)); + return bClamp(a, amin, amax); } inline float Abs(const float a) { diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp index c9ef10fd3..789444f53 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp @@ -184,54 +184,25 @@ float ICETrack::GetParameter() { } ICEData *ICETrack::GetCameraData(float *p_start, float *p_end, float *p_current) { - float current = GetParameter(); + float f_param = GetParameter(); - if (current < 0.0f || 1.0f < current) { + if (f_param != UMath::Clamp(f_param, 0.0f, 1.0f)) { return 0; } - int i = GetKeyNumber(current); + int key = GetKeyNumber(f_param); if (p_current != 0) { - *p_current = current; + *p_current = f_param; } if (p_start != 0) { - float start = 0.0f; - - if (i > -1 && i < NumKeys) { - start = Keys[i].fParameter; - } - - *p_start = start; + *p_start = GetParameter(key); } if (p_end != 0) { - int next = i + 1; - float end = 1.0f; - - if (next > -1 && next < NumKeys) { - end = Keys[next].fParameter; - } - - *p_end = end; + *p_end = GetParameter(key + 1); } - int clamped = i; - - if (clamped < 0) { - clamped = 0; - } - - int max = NumKeys - 1; - - if (max < clamped) { - clamped = max; - } - - if (i == clamped) { - return &Keys[i]; - } - - return 0; + return GetKey(key); } void ICEShakeData::PlatEndianSwap() { diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp index 8ef8c510b..0a991b7ae 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.hpp @@ -66,6 +66,11 @@ struct ICETrack : public bTNode { return static_cast(data - Keys); } float GetParameter(); + float GetParameter(int n) { + if (n < 0) return 0.0f; + if (n >= NumKeys) return 1.0f; + return Keys[n].fParameter; + } struct ICEData *GetCameraData(float *p_start, float *p_end, float *p_current); int GetNumKeys() { From 92151397b8e03ebd4b0284f0cd6336830ae1282a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 03:59:37 +0100 Subject: [PATCH 124/691] 80.5%: improve ReplayBurnoutScore and ReplayPowerSlideScore with ret pattern Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp | 38 ++++++++++---------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp index a398f86f2..e79f0e8bc 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp @@ -70,24 +70,24 @@ static bool ReplayCornerMirror(ICEAnchor *) { } static float ReplayBurnoutScore(ICEAnchor *p_car) { - float speed = p_car->GetVelocityMagnitude(); + float ret = 0.0f; + float forward_speed = p_car->GetVelocityMagnitude(); - if (speed != bClamp(speed, -10.0f, 20.0f)) { - return 0.0f; + if (forward_speed != UMath::Clamp(forward_speed, -10.0f, 20.0f)) { + return ret; } - { - float score = bClamp(p_car->GetForwardSlip() * 0.1f - 1.0f, 0.0f, 1.0f); - - if (speed != bClamp(speed, -1.0f, 1.0f)) { - return score; - } - if (p_car->GetRPM() <= 3000.0f) { - return score; - } + float forward_slip = p_car->GetForwardSlip(); + ret = UMath::Clamp(forward_slip * 0.1f - 1.0f, 0.0f, 1.0f); - return score + 10.9999895f; + if (forward_speed != UMath::Clamp(forward_speed, -1.0f, 1.0f)) { + return ret; } + if (p_car->GetRPM() <= 3000.0f) { + return ret; + } + + return ret + 10.9999895f; } static bool ReplayBurnoutMirror(ICEAnchor *) { @@ -95,18 +95,20 @@ static bool ReplayBurnoutMirror(ICEAnchor *) { } static float ReplayPowerSlideScore(ICEAnchor *p_car) { + float ret = 0.0f; + if (p_car->GetVelocityMagnitude() <= 4.0f) { - return 0.0f; + return ret; } { - float score = (bAbs(p_car->GetSlipAngle()) * 360.0f - 5.0f) * 0.025f; + float yaw = (UMath::Abs(p_car->GetSlipAngle()) * 360.0f - 5.0f) * 0.025f; - if (score <= 0.0f) { - return 0.0f; + if (yaw <= ret) { + return ret; } - return bClamp(score + 0.1f, 0.0f, 1.0f); + return UMath::Clamp(yaw + 0.1f, 0.0f, 1.0f); } } From 66e2a951c484a8fb9c5a168ceb1b9bc045ecbd20 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 04:56:22 +0100 Subject: [PATCH 125/691] 82.0%: implement TrackCarCameraMover::Init (81% match) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 27 --- .../Indep/Src/Camera/Movers/TrackCar.cpp | 221 +++++++++++++++++- 2 files changed, 215 insertions(+), 33 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 62352ee77..ef99071ce 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -1375,33 +1375,6 @@ TrackCarCameraMover::TrackCarCameraMover(int nView, CameraAnchor *pCar, bool foc Init(); } -void TrackCarCameraMover::Init() { - bVector3 offset; - - CameraType = 0; - Eye = *CarToFollow->GetGeomPos(); - Look = *CarToFollow->GetGeomPos(); - - Eye.z += TrackCarIsoZoomDistance[CameraType]; - offset.x = TrackCarLookOffsetX[CameraType]; - offset.y = TrackCarLookOffsetY[CameraType]; - offset.z = TrackCarLookOffsetZ[CameraType]; - eMulVector(&offset, CarToFollow->GetMatrix(), &offset); - - Look.x += offset.x; - Look.y += offset.y; - Look.z += offset.z; - FocalDistCubic.Val = 0.0f; - FocalDistCubic.ValDesired = 0.0f; - FocalDistCubic.dVal = 0.0f; - FocalDistCubic.dValDesired = 0.0f; - GetCamera()->ClearVelocity(); - - if (Camera::StopUpdating == 0) { - GetCamera()->SetTargetDistance(bDistBetween(&Eye, CarToFollow->GetGeomPos())); - } -} - TrackCarCameraMover::~TrackCarCameraMover() { GetCamera()->SetSimTimeMultiplier(1.0f); if (Camera::StopUpdating == 0) { diff --git a/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp b/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp index b15d31fa8..465edbf4b 100644 --- a/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp @@ -1,6 +1,14 @@ #include "Speed/Indep/Src/Camera/CameraMover.hpp" +#include "Speed/Indep/Src/Camera/Camera.hpp" #include "Speed/Indep/Src/Interfaces/Simables/IAI.h" #include "Speed/Indep/Libs/Support/Utility/UVector.h" +#include "Speed/Indep/Src/World/WRoadNetwork.h" +#include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" + +extern bool gCamCloseToRoadBlock; + +static const float Tweak_JumpCamPositionSpeedMult[4] = {0.5f, 1.3f, 1.0f, 1.5f}; +static bVector3 PreviousEye; static float TrackCarEyeOffsetZ[4] = {0.1f, 3.0f, 3.5f, 2.0f}; @@ -77,9 +85,210 @@ static void FixWorldHeight(UMath::Vector3 *point, int type) { point->y += TrackCarEyeOffsetZ[type]; } -// TEMP: force emission for testing -volatile void *_force_active_TrackCar[] = { - (void *)IsAnyCopNear, - (void *)IsBeingPursued, - (void *)FixWorldHeight, -}; \ No newline at end of file +void TrackCarCameraMover::Init() { + const float kMaxPositionDistance = 150.0f; + WRoadNav nav; + nav.SetCookieTrail(true); + nav.SetNavType(WRoadNav::kTypeDirection); + + if (gCamCloseToRoadBlock) { + gCamCloseToRoadBlock = false; + CameraType = 2; + } else { + if (IsBeingPursued(ViewID) && IsAnyCopNear(CarToFollow)) { + CameraType = 1; + } + } + + float positionSpeedMultiplier[2]; + positionSpeedMultiplier[0] = Tweak_JumpCamPositionSpeedMult[CameraType]; + positionSpeedMultiplier[1] = Tweak_JumpCamPositionSpeedMult[3]; + + if (CarToFollow->GetVelocityMagnitude() * positionSpeedMultiplier[0] > kMaxPositionDistance) { + positionSpeedMultiplier[0] = kMaxPositionDistance / CarToFollow->GetVelocityMagnitude(); + } + if (CarToFollow->GetVelocityMagnitude() * positionSpeedMultiplier[1] > kMaxPositionDistance) { + positionSpeedMultiplier[1] = kMaxPositionDistance / CarToFollow->GetVelocityMagnitude(); + } + + bVector3 vCarPosQuarterTime; + bScaleAdd(&vCarPosQuarterTime, CarToFollow->GetGeometryPosition(), CarToFollow->GetVelocity(), 0.1f); + + UMath::Vector4 carPosQuarterTime; + eUnSwizzleWorldVector(vCarPosQuarterTime, reinterpret_cast(carPosQuarterTime)); + + bVector3 vFuture; + bScaleAdd(&vFuture, CarToFollow->GetGeometryPosition(), CarToFollow->GetVelocity(), positionSpeedMultiplier[0]); + + bVector3 vLeft(vFuture); + bVector3 vRight(vFuture); + + bVector3 vFutureHigh; + bScaleAdd(&vFutureHigh, CarToFollow->GetGeometryPosition(), CarToFollow->GetVelocity(), positionSpeedMultiplier[1]); + + bVector3 vLeftHigh(vFutureHigh); + bVector3 vRightHigh(vFutureHigh); + + UMath::Vector4 carPos; + eUnSwizzleWorldVector(*CarToFollow->GetGeometryPosition(), reinterpret_cast(carPos)); + + UMath::Vector4 carDir; + eUnSwizzleWorldVector(*CarToFollow->GetForwardVector(), reinterpret_cast(carDir)); + + nav.InitAtPoint(reinterpret_cast(carPos), + reinterpret_cast(carDir), true, 1.0f); + + float leftDist = 0.0f; + float rightDist = 0.0f; + float leftDistHigh = 0.0f; + float rightDistHigh = 0.0f; + + if (nav.IsValid()) { + nav.IncNavPosition(positionSpeedMultiplier[0] * CarToFollow->GetVelocityMagnitude(), + UMath::Vector3::kZero, 0.0f); + + float navDist = UMath::Distancexz(nav.GetPosition(), nav.GetLeftPosition()); + + float sideLerp = 0.9f; + if (navDist > 10.0f) { + sideLerp = (10.0f / navDist) * 0.9f; + } + + UMath::Vector3 leftPos; + UMath::Vector3 rightPos; + + int focal_error = 0; + + UMath::Lerp(nav.GetLeftPosition(), nav.GetPosition(), sideLerp, leftPos); + FixWorldHeight(&leftPos, CameraType); + + if (!IsSomethingInBetween(UMath::Vector4Make(leftPos, 1.0f), + UMath::Vector4Make(reinterpret_cast(carPos), 1.0f))) { + if (IsSomethingInBetween(UMath::Vector4Make(leftPos, 1.0f), carPosQuarterTime) && CameraType == 2) { + } else { + focal_error = 1; + } + } + + if (focal_error) { + eSwizzleWorldVector(reinterpret_cast(leftPos), vLeft); + if (bDistBetween(&PreviousEye, &vLeft) > 3.0f) { + leftDist = bDistBetween(&vFuture, &vLeft); + } + } + + navDist = UMath::Distancexz(nav.GetPosition(), nav.GetRightPosition()); + + sideLerp = 0.9f; + if (navDist > 10.0f) { + sideLerp = (10.0f / navDist) * 0.9f; + } + + focal_error = 0; + + UMath::Lerp(nav.GetRightPosition(), nav.GetPosition(), sideLerp, rightPos); + FixWorldHeight(&rightPos, CameraType); + + if (!IsSomethingInBetween(UMath::Vector4Make(rightPos, 1.0f), + UMath::Vector4Make(reinterpret_cast(carPos), 1.0f))) { + if (IsSomethingInBetween(UMath::Vector4Make(rightPos, 1.0f), carPosQuarterTime) && CameraType == 2) { + } else { + focal_error = 1; + } + } + + if (focal_error) { + eSwizzleWorldVector(reinterpret_cast(rightPos), vRight); + if (bDistBetween(&PreviousEye, &vRight) > 3.0f) { + rightDist = bDistBetween(&vFuture, &vRight); + } + } + } + + { + UMath::Vector3 pos; + bool visible = false; + + bScaleAdd(&vLeftHigh, &vFutureHigh, CarToFollow->GetLeftVector(), 4.0f); + eUnSwizzleWorldVector(vLeftHigh, reinterpret_cast(pos)); + FixWorldHeight(&pos, 3); + vLeftHigh.z = pos.y; + + if (!IsSomethingInBetween(UMath::Vector4Make(pos, 1.0f), + UMath::Vector4Make(reinterpret_cast(carPos), 1.0f))) { + if (IsSomethingInBetween(UMath::Vector4Make(pos, 1.0f), carPosQuarterTime) && CameraType == 2) { + } else { + visible = true; + } + } + + if (visible && bDistBetween(&PreviousEye, &vLeftHigh) > 3.0f) { + leftDistHigh = bDistBetween(&vFutureHigh, &vLeftHigh) * 0.1f; + } + + visible = false; + + bScaleAdd(&vRightHigh, &vFutureHigh, CarToFollow->GetLeftVector(), -4.0f); + eUnSwizzleWorldVector(vRightHigh, reinterpret_cast(pos)); + FixWorldHeight(&pos, 3); + vRightHigh.z = pos.y; + + if (!IsSomethingInBetween(UMath::Vector4Make(pos, 1.0f), + UMath::Vector4Make(reinterpret_cast(carPos), 1.0f))) { + if (IsSomethingInBetween(UMath::Vector4Make(pos, 1.0f), carPosQuarterTime) && CameraType == 2) { + } else { + visible = true; + } + } + + if (visible && bDistBetween(&PreviousEye, &vRightHigh) > 3.0f) { + rightDistHigh = bDistBetween(&vFutureHigh, &vRightHigh) * 0.1f; + } + } + + if (leftDist > 0.0f || rightDist > 0.0f || leftDistHigh > 0.0f || rightDistHigh > 0.0f) { + if (leftDist + leftDistHigh <= rightDist + rightDistHigh) { + if (rightDist > rightDistHigh) { + Eye = vRight; + } else { + Eye = vRightHigh; + } + } else { + if (leftDist > leftDistHigh) { + Eye = vLeft; + } else { + Eye = vLeftHigh; + } + } + } else { + Eye = *GetCamera()->GetPosition(); + Eye.z += 2.0f; + if (IsSomethingInBetween(GetCamera()->GetPosition(), CarToFollow->GetGeometryPosition())) { + Eye.z -= 2.0f; + } + } + + Eye.z += 0.5f; + PreviousEye = Eye; + + FocalDistCubic.SetDuration(0.42f); + FocalDistCubic.SetFlags(1); + + int dutch_raw = bRandom(0x13) + 0x1a; + if (bRandom(2) != 0) { + dutch_raw = -dutch_raw; + } + + float dutch = static_cast(dutch_raw); + FocalDistCubic.SetVal(dutch); + FocalDistCubic.SetValDesired(0.0f); + + if (FocusEffects == 0) { + if (!Camera::StopUpdating) { + GetCamera()->SetFocalDistance(0.0f); + } + if (!Camera::StopUpdating) { + GetCamera()->SetDepthOfField(0.0f); + } + } +} \ No newline at end of file From 2b9eff86f88c3243c6460e1fc8fe4afe32af051a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 05:05:08 +0100 Subject: [PATCH 126/691] 82.2%: improve TrackCarCameraMover::Init to 89.3% match Fix IsSomethingInBetween logic (Ghidra branch inversion), pass carPos directly with w=1.0f set, inline Vector4Make calls. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Indep/Src/Camera/Movers/TrackCar.cpp | 37 +++++++------------ 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp b/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp index 465edbf4b..d0f6ecc54 100644 --- a/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp @@ -131,6 +131,7 @@ void TrackCarCameraMover::Init() { UMath::Vector4 carPos; eUnSwizzleWorldVector(*CarToFollow->GetGeometryPosition(), reinterpret_cast(carPos)); + carPos.w = 1.0f; UMath::Vector4 carDir; eUnSwizzleWorldVector(*CarToFollow->GetForwardVector(), reinterpret_cast(carDir)); @@ -162,12 +163,9 @@ void TrackCarCameraMover::Init() { UMath::Lerp(nav.GetLeftPosition(), nav.GetPosition(), sideLerp, leftPos); FixWorldHeight(&leftPos, CameraType); - if (!IsSomethingInBetween(UMath::Vector4Make(leftPos, 1.0f), - UMath::Vector4Make(reinterpret_cast(carPos), 1.0f))) { - if (IsSomethingInBetween(UMath::Vector4Make(leftPos, 1.0f), carPosQuarterTime) && CameraType == 2) { - } else { - focal_error = 1; - } + if (!IsSomethingInBetween(UMath::Vector4Make(leftPos, 1.0f), carPos) || + (!IsSomethingInBetween(UMath::Vector4Make(leftPos, 1.0f), carPosQuarterTime) && CameraType != 2)) { + focal_error = 1; } if (focal_error) { @@ -189,12 +187,9 @@ void TrackCarCameraMover::Init() { UMath::Lerp(nav.GetRightPosition(), nav.GetPosition(), sideLerp, rightPos); FixWorldHeight(&rightPos, CameraType); - if (!IsSomethingInBetween(UMath::Vector4Make(rightPos, 1.0f), - UMath::Vector4Make(reinterpret_cast(carPos), 1.0f))) { - if (IsSomethingInBetween(UMath::Vector4Make(rightPos, 1.0f), carPosQuarterTime) && CameraType == 2) { - } else { - focal_error = 1; - } + if (!IsSomethingInBetween(UMath::Vector4Make(rightPos, 1.0f), carPos) || + (!IsSomethingInBetween(UMath::Vector4Make(rightPos, 1.0f), carPosQuarterTime) && CameraType != 2)) { + focal_error = 1; } if (focal_error) { @@ -214,12 +209,9 @@ void TrackCarCameraMover::Init() { FixWorldHeight(&pos, 3); vLeftHigh.z = pos.y; - if (!IsSomethingInBetween(UMath::Vector4Make(pos, 1.0f), - UMath::Vector4Make(reinterpret_cast(carPos), 1.0f))) { - if (IsSomethingInBetween(UMath::Vector4Make(pos, 1.0f), carPosQuarterTime) && CameraType == 2) { - } else { - visible = true; - } + if (!IsSomethingInBetween(UMath::Vector4Make(pos, 1.0f), carPos) || + (!IsSomethingInBetween(UMath::Vector4Make(pos, 1.0f), carPosQuarterTime) && CameraType != 2)) { + visible = true; } if (visible && bDistBetween(&PreviousEye, &vLeftHigh) > 3.0f) { @@ -233,12 +225,9 @@ void TrackCarCameraMover::Init() { FixWorldHeight(&pos, 3); vRightHigh.z = pos.y; - if (!IsSomethingInBetween(UMath::Vector4Make(pos, 1.0f), - UMath::Vector4Make(reinterpret_cast(carPos), 1.0f))) { - if (IsSomethingInBetween(UMath::Vector4Make(pos, 1.0f), carPosQuarterTime) && CameraType == 2) { - } else { - visible = true; - } + if (!IsSomethingInBetween(UMath::Vector4Make(pos, 1.0f), carPos) || + (!IsSomethingInBetween(UMath::Vector4Make(pos, 1.0f), carPosQuarterTime) && CameraType != 2)) { + visible = true; } if (visible && bDistBetween(&PreviousEye, &vRightHigh) > 3.0f) { From f41c2fbda16f015e6fb3177a86de5c844231c77b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 08:19:54 +0100 Subject: [PATCH 127/691] 83.4%: implement TrackCopCameraMover::Init (93.6% match) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 76 --------- .../Indep/Src/Camera/Movers/TrackCop.cpp | 154 ++++++++++++++++++ 2 files changed, 154 insertions(+), 76 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index ef99071ce..a5826ddd6 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -1514,82 +1514,6 @@ bool TrackCopCameraMover::FindPursuitVehiclePosition(bVector3 *pPosition) { return found; } -void TrackCopCameraMover::Init() { - bVector3 pursuit_position; - bVector3 eye = *GetCamera()->GetPosition(); - bVector3 look = *GetCamera()->GetTarget(); - float fov = static_cast(GetCamera()->GetFieldOfView()); - - TrackCopCameraMover_IdleSim = true; - HideEverySingleHud(); - bRenderCarPOV = true; - - ZoomVerts.v0.x = fov; - ZoomVerts.v0.y = 0.0f; - ZoomVerts.v0.z = 0.0f; - ZoomVerts.v0.w = 1.0f; - ZoomVerts.v1 = ZoomVerts.v0; - ZoomVerts.v2 = ZoomVerts.v0; - ZoomVerts.v3 = ZoomVerts.v0; - - EyeVerts.v0.x = eye.x; - EyeVerts.v0.y = eye.y; - EyeVerts.v0.z = eye.z; - EyeVerts.v0.w = 1.0f; - EyeVerts.v1 = EyeVerts.v0; - EyeVerts.v2 = EyeVerts.v0; - EyeVerts.v3 = EyeVerts.v0; - - LookVerts.v0.x = look.x; - LookVerts.v0.y = look.y; - LookVerts.v0.z = look.z; - LookVerts.v0.w = 1.0f; - LookVerts.v1 = LookVerts.v0; - LookVerts.v2 = LookVerts.v0; - LookVerts.v3 = LookVerts.v0; - - if (FindPursuitVehiclePosition(&pursuit_position)) { - bVector3 chase_eye = pursuit_position; - bVector3 chase_look = *CarToFollow->GetGeomPos(); - - chase_eye.z += 2.0f; - EyeVerts.v1.x = chase_eye.x; - EyeVerts.v1.y = chase_eye.y; - EyeVerts.v1.z = chase_eye.z; - EyeVerts.v2 = EyeVerts.v1; - EyeVerts.v3 = EyeVerts.v1; - - LookVerts.v1.x = chase_look.x; - LookVerts.v1.y = chase_look.y; - LookVerts.v1.z = chase_look.z; - LookVerts.v2 = LookVerts.v1; - LookVerts.v3 = LookVerts.v1; - - ZoomVerts.v1.x = fov; - ZoomVerts.v2.x = fov; - ZoomVerts.v3.x = fov; - bRenderCarPOV = false; - } else { - CameraAI::MaybeKillPursuitCam(CarToFollow->GetWorldID()); - } - - EyeSpline.SetControlPoints(&EyeVerts); - LookSpline.SetControlPoints(&LookVerts); - ZoomSpline.SetControlPoints(&ZoomVerts); - EyeSplineParam = 0.0f; - LookSplineParam = 0.0f; - ZoomSplineParam = 0.0f; - FocalDistCubic.Val = 0.0f; - FocalDistCubic.ValDesired = 0.0f; - FocalDistCubic.dVal = 0.0f; - FocalDistCubic.dValDesired = 0.0f; - - if (FocusEffects == 0 && Camera::StopUpdating == 0) { - GetCamera()->SetFocalDistance(0.0f); - GetCamera()->SetDepthOfField(0.0f); - } -} - void TrackCopCameraMover::Update(float dT) { if (FEManager::Get() == nullptr || !FEManager::ShouldPauseSimulation(true)) { bVector3 world_up(0.0f, 0.0f, 1.0f); diff --git a/src/Speed/Indep/Src/Camera/Movers/TrackCop.cpp b/src/Speed/Indep/Src/Camera/Movers/TrackCop.cpp index 9af000b1e..d84c1ff30 100644 --- a/src/Speed/Indep/Src/Camera/Movers/TrackCop.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/TrackCop.cpp @@ -1,5 +1,159 @@ #include "Speed/Indep/Src/Camera/CameraMover.hpp" +#include "Speed/Indep/Src/Camera/Camera.hpp" +#include "Speed/Indep/Src/Camera/CameraAI.hpp" + +extern bool TrackCopCameraMover_IdleSim; +void HideEverySingleHud(); static float CrossXY(const bVector3 *v1, const bVector3 *v2) { return v1->x * v2->y - v1->y * v2->x; } + +void TrackCopCameraMover::Init() { + bVector3 copPos; + int focal_error; + + TrackCopCameraMover_IdleSim = 1; + HideEverySingleHud(); + + unsigned short fov; + + bCopy(&EyeVerts.v0, GetCamera()->GetPosition(), 0.0f); + bCopy(&EyeVerts.v1, GetCamera()->GetPosition(), 0.0f); + bCopy(&EyeVerts.v2, GetCamera()->GetPosition(), 0.0f); + bCopy(&EyeVerts.v3, GetCamera()->GetPosition(), 0.0f); + + bCopy(&LookVerts.v0, GetCamera()->GetTarget(), 0.0f); + bCopy(&LookVerts.v1, GetCamera()->GetTarget(), 0.0f); + bCopy(&LookVerts.v2, GetCamera()->GetTarget(), 0.0f); + bCopy(&LookVerts.v3, GetCamera()->GetTarget(), 0.0f); + + bool copFound = FindPursuitVehiclePosition(&copPos); + + if (copFound) { + bVector3 eyeDisplacement = *GetCamera()->GetPosition() - *GetCamera()->GetTarget(); + float eyeDistance = bLength(&eyeDisplacement); + + bVector3 copDisplacement = *GetCamera()->GetTarget() - copPos; + float savedZ = copDisplacement.z; + copDisplacement.z = 0.0f; + float copDistance = bLength(&copDisplacement); + + if (copDistance < 0.1f) { + copDistance = 0.1f; + } + + copDisplacement /= copDistance; + copDisplacement *= 5.0f; + + copDisplacement.z = bClamp(savedZ, eyeDisplacement.z, 2.25f) + 0.25f; + + copDistance = bLength(&copDisplacement); + + bVector3 copEyePos = *GetCamera()->GetTarget() + copDisplacement; + + float dot = bDot(&eyeDisplacement, &copDisplacement) / (eyeDistance * copDistance); + + if (dot < 0.0f) { + float scale = (1.0f - dot) * 0.5f; + float cross = CrossXY(&eyeDisplacement, &copDisplacement); + if (cross < 0.0f) { + scale = -scale; + } + + bVector3 eyeNormalDisplacement(-eyeDisplacement.y * scale, eyeDisplacement.x * scale, 0.0f); + bVector3 copNormalDisplacement(copDisplacement.y * scale, -copDisplacement.x * scale, 0.0f); + + bVector3 ctrl1 = *GetCamera()->GetPosition() + eyeNormalDisplacement; + bVector3 ctrl2 = copEyePos + copNormalDisplacement; + + if (!IsSomethingInBetween(&ctrl1, GetCamera()->GetTarget()) && + !IsSomethingInBetween(&ctrl2, GetCamera()->GetTarget())) { + bCopy(&EyeVerts.v1, &ctrl1, 0.0f); + bCopy(&EyeVerts.v2, &ctrl2, 0.0f); + bCopy(&EyeVerts.v3, &copEyePos, 0.0f); + } + } + + bCopy(&LookVerts.v3, &copPos, 0.0f); + } + + EyeSpline.SetControlPoints(&EyeVerts); + LookSpline.SetControlPoints(&LookVerts); + + bVector3 displacement = *reinterpret_cast(&EyeVerts.v3) - *reinterpret_cast(&LookVerts.v3); + float distance = bLength(&displacement); + if (distance < 1.0f) { + distance = 1.0f; + } + + fov = static_cast((bATan(distance, 3.0f) & 0x7FFF) << 1); + + if (fov != 0) { + fov = static_cast(bClamp(static_cast(fov), 1000, 13100)); + float fovDegDefault = bAngToDeg(GetCamera()->GetFov()); + float fovDeg = bAngToDeg(fov); + + ZoomVerts.v0.x = fovDegDefault; + ZoomVerts.v0.y = fovDegDefault; + ZoomVerts.v0.z = fovDegDefault; + ZoomVerts.v0.w = 0.0f; + ZoomVerts.v1.x = fovDegDefault; + ZoomVerts.v1.y = fovDegDefault; + ZoomVerts.v1.z = fovDegDefault; + ZoomVerts.v1.w = 0.0f; + ZoomVerts.v2.x = fovDegDefault; + ZoomVerts.v2.y = fovDegDefault; + ZoomVerts.v2.z = fovDegDefault; + ZoomVerts.v2.w = 0.0f; + ZoomVerts.v3.x = fovDeg; + ZoomVerts.v3.y = fovDeg; + ZoomVerts.v3.z = fovDeg; + ZoomVerts.v3.w = 0.0f; + } else { + float fovDeg = bAngToDeg(GetCamera()->GetFov()); + + ZoomVerts.v0.x = fovDeg; + ZoomVerts.v0.y = fovDeg; + ZoomVerts.v0.z = fovDeg; + ZoomVerts.v0.w = 0.0f; + ZoomVerts.v1.x = fovDeg; + ZoomVerts.v1.y = fovDeg; + ZoomVerts.v1.z = fovDeg; + ZoomVerts.v1.w = 0.0f; + ZoomVerts.v2.x = fovDeg; + ZoomVerts.v2.y = fovDeg; + ZoomVerts.v2.z = fovDeg; + ZoomVerts.v2.w = 0.0f; + ZoomVerts.v3.x = fovDeg; + ZoomVerts.v3.y = fovDeg; + ZoomVerts.v3.z = fovDeg; + ZoomVerts.v3.w = 0.0f; + } + + ZoomSpline.SetControlPoints(&ZoomVerts); + + FocalDistCubic.SetDuration(0.42f); + FocalDistCubic.SetFlags(1); + + focal_error = bRandom(19) + 26; + if (bRandom(2) != 0) { + focal_error = -focal_error; + } + + FocalDistCubic.SetVal(static_cast(focal_error)); + FocalDistCubic.SetValDesired(0.0f); + + if (FocusEffects == 0) { + if (Camera::StopUpdating == 0) { + GetCamera()->SetFocalDistance(0.0f); + } + if (Camera::StopUpdating == 0) { + GetCamera()->SetDepthOfField(0.0f); + } + } + + if (!copFound) { + CameraAI::MaybeKillPursuitCam(CarToFollow->GetWorldID()); + } +} From 43ec65f7996332a800fe4f704dd3bee36ed5a2ba Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 09:05:37 +0100 Subject: [PATCH 128/691] 83.7%: implement FindPursuitVehiclePosition (97.9% match) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 29 ------------- .../Indep/Src/Camera/Movers/TrackCop.cpp | 43 +++++++++++++++++++ 2 files changed, 43 insertions(+), 29 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index a5826ddd6..06c467381 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -1485,35 +1485,6 @@ TrackCopCameraMover::~TrackCopCameraMover() { GetCamera()->ClearVelocity(); } -bool TrackCopCameraMover::FindPursuitVehiclePosition(bVector3 *pPosition) { - bool found = false; - float best_distance = 10000.0f; - const IVehicle::List &vehicles = IVehicle::GetList(VEHICLE_ALL); - - for (IVehicle::List::const_iterator iter = vehicles.begin(); iter != vehicles.end(); ++iter) { - IVehicle *vehicle = *iter; - - if (vehicle != nullptr && vehicle->GetVehicleClass() == VehicleClass::CAR) { - bVector3 render_position; - float distance; - - eSwizzleWorldVector(vehicle->GetPosition(), render_position); - if (IsSomethingInBetween(GetCamera()->GetPosition(), &render_position)) { - continue; - } - - distance = bDistBetween(CarToFollow->GetGeomPos(), &render_position); - if (distance < best_distance) { - *pPosition = render_position; - best_distance = distance; - found = true; - } - } - } - - return found; -} - void TrackCopCameraMover::Update(float dT) { if (FEManager::Get() == nullptr || !FEManager::ShouldPauseSimulation(true)) { bVector3 world_up(0.0f, 0.0f, 1.0f); diff --git a/src/Speed/Indep/Src/Camera/Movers/TrackCop.cpp b/src/Speed/Indep/Src/Camera/Movers/TrackCop.cpp index d84c1ff30..b44204eb2 100644 --- a/src/Speed/Indep/Src/Camera/Movers/TrackCop.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/TrackCop.cpp @@ -1,6 +1,7 @@ #include "Speed/Indep/Src/Camera/CameraMover.hpp" #include "Speed/Indep/Src/Camera/Camera.hpp" #include "Speed/Indep/Src/Camera/CameraAI.hpp" +#include "Speed/Indep/Src/AI/AITarget.h" extern bool TrackCopCameraMover_IdleSim; void HideEverySingleHud(); @@ -9,6 +10,48 @@ static float CrossXY(const bVector3 *v1, const bVector3 *v2) { return v1->x * v2->y - v1->y * v2->x; } +bool TrackCopCameraMover::FindPursuitVehiclePosition(bVector3 *copPos) { + const float kMinDist = 300.0f; + float minDist = kMinDist; + for (IVehicle *const *iter = IVehicle::GetList(VEHICLE_AICOPS).begin(); + iter != IVehicle::GetList(VEHICLE_AICOPS).end(); ++iter) { + IVehicle *p_car = *iter; + if (p_car == nullptr) continue; + if (!p_car->IsActive()) continue; + if (!(p_car->GetVehicleClass() == VehicleClass::CAR)) continue; + + IVehicleAI *p_vehicleai; + if (!p_car->QueryInterface(&p_vehicleai)) continue; + + AITarget *p_target = p_vehicleai->GetTarget(); + if (p_target == nullptr) continue; + if (!p_target->IsValid()) continue; + + ISimable *p_targetsimable = p_target->GetSimable(); + if (p_targetsimable == nullptr) continue; + if (p_targetsimable->GetWorldID() != CarToFollow->GetWorldID()) continue; + + IPursuitAI *p_pursuitai; + if (!p_car->QueryInterface(&p_pursuitai)) continue; + if (!p_pursuitai->GetInPursuit()) continue; + if (p_pursuitai->GetTimeSinceTargetSeen() > 0.0f) continue; + + UMath::Vector3 upos = p_car->GetPosition(); + bVector3 bpos; + eSwizzleWorldVector(upos, bpos); + + if (IsSomethingInBetween(GetCamera()->GetPosition(), &bpos)) continue; + + float dist = bDistBetween(CarToFollow->GetGeomPos(), &bpos); + if (dist < minDist) { + *copPos = bpos; + minDist = dist; + } + } + + return minDist < kMinDist; +} + void TrackCopCameraMover::Init() { bVector3 copPos; int focal_error; From b3654439729fe7f2bbda1f4e94a51d594c9411ca Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 09:36:44 +0100 Subject: [PATCH 129/691] 84.1%: move StopUpdating check into Camera setter inlines SetFocalDistance, SetDepthOfField, SetFieldOfView, SetTargetDistance now internally check Camera::StopUpdating, matching the original inline pattern. Removes redundant external guards from all callers across CameraMover, TrackCar, TrackCop, Cubic, Showcase, SelectCar, DebugWorld, and ICEMover. Matches: TrackCarCameraMover::~TrackCarCameraMover, TrackCopCameraMover::~TrackCopCameraMover, ShowcaseCameraMover::Update, and 2 more functions. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Camera.hpp | 16 ++++-- src/Speed/Indep/Src/Camera/CameraMover.cpp | 52 +++++-------------- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 26 +++------- src/Speed/Indep/Src/Camera/Movers/Cubic.cpp | 36 ++++--------- .../Indep/Src/Camera/Movers/DebugWorld.cpp | 6 +-- .../Indep/Src/Camera/Movers/SelectCar.cpp | 8 +-- .../Indep/Src/Camera/Movers/Showcase.cpp | 12 ++--- .../Indep/Src/Camera/Movers/TrackCar.cpp | 8 +-- .../Indep/Src/Camera/Movers/TrackCop.cpp | 8 +-- 9 files changed, 52 insertions(+), 120 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Camera.hpp b/src/Speed/Indep/Src/Camera/Camera.hpp index 116cd31de..397d21d8b 100644 --- a/src/Speed/Indep/Src/Camera/Camera.hpp +++ b/src/Speed/Indep/Src/Camera/Camera.hpp @@ -134,19 +134,27 @@ class Camera { } void SetTargetDistance(float f) { - CurrentKey.TargetDistance = f; + if (!StopUpdating) { + CurrentKey.TargetDistance = f; + } } void SetFocalDistance(float f) { - CurrentKey.FocalDistance = f; + if (!StopUpdating) { + CurrentKey.FocalDistance = f; + } } void SetDepthOfField(float f) { - CurrentKey.DepthOfField = f; + if (!StopUpdating) { + CurrentKey.DepthOfField = f; + } } void SetFieldOfView(unsigned short fov) { - CurrentKey.FieldOfView = fov; + if (!StopUpdating) { + CurrentKey.FieldOfView = fov; + } } void SetNoiseFrequency1(float x, float y, float z, float w) { diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 06c467381..249e67033 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -1356,9 +1356,7 @@ void RearViewMirrorCameraMover::Update(float dT) { rvm_matrix.v3.x += RVMOffsetInCar.x; rvm_matrix.v3.y += RVMOffsetInCar.y; rvm_matrix.v3.z += RVMOffsetInCar.z; - if (Camera::StopUpdating == 0) { - GetCamera()->SetFieldOfView(20000); - } + GetCamera()->SetFieldOfView(20000); GetCamera()->SetNearZ(RVMnearz); GetCamera()->SetFarZ(RVMfarz); ApplyCameraShake(ViewID, &rvm_matrix); @@ -1377,12 +1375,8 @@ TrackCarCameraMover::TrackCarCameraMover(int nView, CameraAnchor *pCar, bool foc TrackCarCameraMover::~TrackCarCameraMover() { GetCamera()->SetSimTimeMultiplier(1.0f); - if (Camera::StopUpdating == 0) { - GetCamera()->SetFocalDistance(0.0f); - } - if (Camera::StopUpdating == 0) { - GetCamera()->SetDepthOfField(0.0f); - } + GetCamera()->SetFocalDistance(0.0f); + GetCamera()->SetDepthOfField(0.0f); GetCamera()->ClearVelocity(); } @@ -1409,9 +1403,7 @@ void TrackCarCameraMover::Update(float dT) { if (fov_limit > 0x332c) { fov_limit = 0x332c; } - if (Camera::StopUpdating == 0) { - GetCamera()->SetFieldOfView(static_cast(fov_limit)); - } + GetCamera()->SetFieldOfView(static_cast(fov_limit)); } Look = *CarToFollow->GetGeometryPosition(); @@ -1434,9 +1426,7 @@ void TrackCarCameraMover::Update(float dT) { bMatrix4 m; eCreateLookAtMatrix(&m, Eye, Look, up); float focal_dist = bDistBetween(CarToFollow->GetGeometryPosition(), &Eye); - if (Camera::StopUpdating == 0) { - GetCamera()->SetTargetDistance(focal_dist); - } + GetCamera()->SetTargetDistance(focal_dist); FocalDistCubic.dValDesired = FocalDistCubic.Val * 0.1f; SplineSeek(&FocalDistCubic, dT, vert_comp, vert_comp); @@ -1446,12 +1436,8 @@ void TrackCarCameraMover::Update(float dT) { } if (FocusEffects) { - if (Camera::StopUpdating == 0) { - GetCamera()->SetFocalDistance(focal_dist + FocalDistCubic.Val); - } - if (Camera::StopUpdating == 0) { - GetCamera()->SetDepthOfField(2.0f); - } + GetCamera()->SetFocalDistance(focal_dist + FocalDistCubic.Val); + GetCamera()->SetDepthOfField(2.0f); } GetCamera()->SetCameraMatrix(m, dT); @@ -1476,12 +1462,8 @@ TrackCopCameraMover::TrackCopCameraMover(int nView, CameraAnchor *pCar, bool foc TrackCopCameraMover::~TrackCopCameraMover() { TrackCopCameraMover_IdleSim = false; GetCamera()->SetSimTimeMultiplier(1.0f); - if (Camera::StopUpdating == 0) { - GetCamera()->SetFocalDistance(0.0f); - } - if (Camera::StopUpdating == 0) { - GetCamera()->SetDepthOfField(0.0f); - } + GetCamera()->SetFocalDistance(0.0f); + GetCamera()->SetDepthOfField(0.0f); GetCamera()->ClearVelocity(); } @@ -1515,9 +1497,7 @@ void TrackCopCameraMover::Update(float dT) { } ZoomSpline.GetPoint(reinterpret_cast(&offset), ZoomSplineParam); - if (Camera::StopUpdating == 0) { - GetCamera()->SetFieldOfView(static_cast(bDegToAng(offset.x))); - } + GetCamera()->SetFieldOfView(static_cast(bDegToAng(offset.x))); displacement = eye - look; float distance = bLength(&displacement); @@ -1538,9 +1518,7 @@ void TrackCopCameraMover::Update(float dT) { eCreateLookAtMatrix(&camera_matrix, eye, look, world_up); focal_distance = bDistBetween(CarToFollow->GetGeomPos(), &eye); - if (Camera::StopUpdating == 0) { - GetCamera()->SetTargetDistance(focal_distance); - } + GetCamera()->SetTargetDistance(focal_distance); FocalDistCubic.dValDesired = FocalDistCubic.Val * 0.1f; SplineSeek(&FocalDistCubic, dT, 0.0f, 0.0f); @@ -1550,12 +1528,8 @@ void TrackCopCameraMover::Update(float dT) { } if (FocusEffects) { - if (Camera::StopUpdating == 0) { - GetCamera()->SetFocalDistance(focal_distance + FocalDistCubic.Val); - } - if (Camera::StopUpdating == 0) { - GetCamera()->SetDepthOfField(2.0f); - } + GetCamera()->SetFocalDistance(focal_distance + FocalDistCubic.Val); + GetCamera()->SetDepthOfField(2.0f); } GetCamera()->SetCameraMatrix(camera_matrix, dT); diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index f2d33b43f..8f6f2f714 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -774,12 +774,8 @@ ICEMover::~ICEMover() { delete pAccelOffset; GetCamera()->SetSimTimeMultiplier(1.0f); GetCamera()->SetLetterBox(0.0f); - if (!Camera::StopUpdating) { - GetCamera()->SetDepthOfField(0.0f); - } - if (!Camera::StopUpdating) { - GetCamera()->SetFocalDistance(0.0f); - } + GetCamera()->SetDepthOfField(0.0f); + GetCamera()->SetFocalDistance(0.0f); GetCamera()->ClearVelocity(); } @@ -913,7 +909,7 @@ void ICEMover::Update(float dT) { } unsigned short a_fov = GetFOV(f_param); - if (a_fov != 0 && !Camera::StopUpdating) { + if (a_fov != 0) { GetCamera()->SetFieldOfView(a_fov); } @@ -1157,9 +1153,7 @@ void ICEMover::Update(float dT) { float aperture = pAperture->GetVal(f_param); if (aperture < 0.0f || 37.0f <= aperture) { - if (!Camera::StopUpdating) { - GetCamera()->SetFocalDistance(0.0f); - } + GetCamera()->SetFocalDistance(0.0f); } else { float focal = pFocalDistance->GetVal(f_param); if (focal < 1.0f) { @@ -1180,19 +1174,13 @@ void ICEMover::Update(float dT) { if (dofFar < dofNear) { dofFar = dofNear + 1.0f; } - if (!Camera::StopUpdating) { - GetCamera()->SetFocalDistance((dofFar + dofNear) * 0.5f); - } + GetCamera()->SetFocalDistance((dofFar + dofNear) * 0.5f); float dof = dofFar - dofNear; } - if (!Camera::StopUpdating) { - GetCamera()->SetDepthOfField(0.0f); - } + GetCamera()->SetDepthOfField(0.0f); float targetDist = bDistBetween(reinterpret_cast(&vEye), reinterpret_cast(&vLook)); - if (!Camera::StopUpdating) { - GetCamera()->SetTargetDistance(targetDist); - } + GetCamera()->SetTargetDistance(targetDist); GetCamera()->SetCameraMatrix(*reinterpret_cast(&mWorldToCamera), dT * simspeed); } diff --git a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp index eddf0eb03..fd51e0ea5 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp @@ -462,24 +462,16 @@ void CubicCameraMover::Update(float dT) { pEye->SetDuration(eye_duration); float target_dist = bDistBetween(GetCamera()->GetPosition(), pCar->GetGeometryPosition()); - if (Camera::StopUpdating == 0) { - GetCamera()->SetTargetDistance(target_dist); - } + GetCamera()->SetTargetDistance(target_dist); float fSign; if (!bPerfectFocus) { - if (Camera::StopUpdating == 0) { - GetCamera()->SetFocalDistance(40.0f); - } + GetCamera()->SetFocalDistance(40.0f); fSign = 100.0f; } else { - if (Camera::StopUpdating == 0) { - GetCamera()->SetFocalDistance(0.0f); - } - } - if (Camera::StopUpdating == 0) { - GetCamera()->SetDepthOfField(fSign); + GetCamera()->SetFocalDistance(0.0f); } + GetCamera()->SetDepthOfField(fSign); bMatrix4 mCarToWorld; SetDesired(&mCarToWorld, pov, &pov_data, bSnapNext); @@ -593,24 +585,16 @@ void CubicCameraMover::Update(float dT) { bOutside = OutsidePovType(pov->Type); target_dist = bDistBetween(GetCamera()->GetPosition(), pCar->GetGeometryPosition()); - if (Camera::StopUpdating == 0) { - GetCamera()->SetTargetDistance(target_dist); - } + GetCamera()->SetTargetDistance(target_dist); fSign = 0.0f; if (!bPerfectFocus) { - if (Camera::StopUpdating == 0) { - GetCamera()->SetFocalDistance(40.0f); - } + GetCamera()->SetFocalDistance(40.0f); fSign = 100.0f; } else { - if (Camera::StopUpdating == 0) { - GetCamera()->SetFocalDistance(0.0f); - } - } - if (Camera::StopUpdating == 0) { - GetCamera()->SetDepthOfField(fSign); + GetCamera()->SetFocalDistance(0.0f); } + GetCamera()->SetDepthOfField(fSign); if (GRaceStatus::Exists() && pCar->IsDragRace()) { float seconds = GRaceStatus::Get().GetRaceTimeElapsed(); @@ -630,9 +614,7 @@ void CubicCameraMover::Update(float dT) { float f_tan_fov = bTan(a_fov >> 1); unsigned short a_new_fov = bATan(1.0f, f_tan_fov) << 1; - if (Camera::StopUpdating == 0) { - GetCamera()->SetFieldOfView(a_new_fov); - } + GetCamera()->SetFieldOfView(a_new_fov); bMatrix4 mWorldToCamera; eCreateLookAtMatrix(&mWorldToCamera, vEye, vLook, vUp); diff --git a/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp b/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp index 616388dc1..fa4ef30e7 100644 --- a/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp @@ -257,9 +257,7 @@ void DebugWorldCameraMover::Update(float dT) { ComputeBankedUpVector(&up, &Eye, &Look, bank); eCreateLookAtMatrix(&m, Eye, Look, up); - if (Camera::StopUpdating == 0) { - unsigned short fov = 0x32dc; - GetCamera()->SetFieldOfView(fov); - } + unsigned short fov = 0x32dc; + GetCamera()->SetFieldOfView(fov); GetCamera()->SetCameraMatrix(m, dT); } diff --git a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp index c5553f542..81ff016a6 100644 --- a/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/SelectCar.cpp @@ -182,12 +182,8 @@ void SelectCarCameraMover::Update(float dT) { bMatrix4 camera_matrix; CreateCameraMatrix(&camera_matrix, camera_data); screen_print_x = bDegToAng(camera_data->FOV); - if (Camera::StopUpdating == 0) { - GetCamera()->SetFieldOfView(static_cast(screen_print_x)); - } - if (Camera::StopUpdating == 0) { - GetCamera()->SetTargetDistance(camera_data->Radius); - } + GetCamera()->SetFieldOfView(static_cast(screen_print_x)); + GetCamera()->SetTargetDistance(camera_data->Radius); GetCamera()->SetCameraMatrix(camera_matrix, dT); } diff --git a/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp b/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp index 8500103cf..653bcb439 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Showcase.cpp @@ -102,14 +102,8 @@ void ShowcaseCameraMover::BuildPhotoCameraMatrix() { void ShowcaseCameraMover::Update(float dT) { BuildPhotoCameraMatrix(); unsigned short fov = bDegToAng(mFOV); - if (Camera::StopUpdating == 0) { - GetCamera()->SetFieldOfView(fov); - } - if (Camera::StopUpdating == 0) { - GetCamera()->SetDepthOfField(mDOF); - } - if (Camera::StopUpdating == 0) { - GetCamera()->SetFocalDistance(mFd); - } + GetCamera()->SetFieldOfView(fov); + GetCamera()->SetDepthOfField(mDOF); + GetCamera()->SetFocalDistance(mFd); GetCamera()->SetCameraMatrix(mCameraMatrix, dT); } diff --git a/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp b/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp index d0f6ecc54..9c06cfbb6 100644 --- a/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp @@ -273,11 +273,7 @@ void TrackCarCameraMover::Init() { FocalDistCubic.SetValDesired(0.0f); if (FocusEffects == 0) { - if (!Camera::StopUpdating) { - GetCamera()->SetFocalDistance(0.0f); - } - if (!Camera::StopUpdating) { - GetCamera()->SetDepthOfField(0.0f); - } + GetCamera()->SetFocalDistance(0.0f); + GetCamera()->SetDepthOfField(0.0f); } } \ No newline at end of file diff --git a/src/Speed/Indep/Src/Camera/Movers/TrackCop.cpp b/src/Speed/Indep/Src/Camera/Movers/TrackCop.cpp index b44204eb2..d7609f888 100644 --- a/src/Speed/Indep/Src/Camera/Movers/TrackCop.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/TrackCop.cpp @@ -188,12 +188,8 @@ void TrackCopCameraMover::Init() { FocalDistCubic.SetValDesired(0.0f); if (FocusEffects == 0) { - if (Camera::StopUpdating == 0) { - GetCamera()->SetFocalDistance(0.0f); - } - if (Camera::StopUpdating == 0) { - GetCamera()->SetDepthOfField(0.0f); - } + GetCamera()->SetFocalDistance(0.0f); + GetCamera()->SetDepthOfField(0.0f); } if (!copFound) { From fac9c9db40bf4f3f487d40538233913ea91663c2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 09:40:21 +0100 Subject: [PATCH 130/691] 84.2%: match TrackCopCameraMover constructor Move SplineParam inits to initializer list so they interleave with Bezier constructors in declaration order, matching original. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 249e67033..f3c2ebe70 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -1449,13 +1449,13 @@ void TrackCarCameraMover::Update(float dT) { TrackCopCameraMover::TrackCopCameraMover(int nView, CameraAnchor *pCar, bool focus_effects) : CameraMover(nView, CM_TRACK_COP), + ZoomSplineParam(0.0f), // + EyeSplineParam(0.0f), // + LookSplineParam(0.0f), // CarToFollow(pCar), FocalDistCubic(1, 1.0f), FocusEffects(focus_effects), bRenderCarPOV(true) { - ZoomSplineParam = 0.0f; - EyeSplineParam = 0.0f; - LookSplineParam = 0.0f; Init(); } From 6ff0c5acbd59c683f92b8fc9e138231b3ceb407c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 10:15:57 +0100 Subject: [PATCH 131/691] 84.3%: match CameraMover constructor Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 14 +++++++++----- src/Speed/Indep/Src/World/WCollision.h | 7 ++++++- src/Speed/Indep/Src/World/WCollisionTri.h | 1 + src/Speed/Indep/Src/World/WWorldPos.h | 13 +++++-------- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index f3c2ebe70..0c8931a6c 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -509,21 +509,25 @@ bool DoesCameraTypeDisablePreculler(CameraMoverTypes type) { } CameraMover::CameraMover(int view_id, CameraMoverTypes type) - : mWPos(0.025f) { - mCollider = WCollider::Create(0, WCollider::kColliderShape_Sphere, 0x1C, 0); + : mCollider(WCollider::Create(0, WCollider::kColliderShape_Sphere, 0x1C, 0)) // + , mWPos(0.025f) { + mWPos.fFace.fPt0 = UMath::Vector3::kZero; + mWPos.fFace.fPt1 = UMath::Vector3::kZero; + mWPos.fFace.fPt2 = UMath::Vector3::kZero; Type = type; - Enabled = 0; + mWPos.fSurface = nullptr; ViewID = view_id; + Enabled = 0; fAccumulatedClearance = 0.0f; fAccumulatedAdjust = 0.0f; fSavedAdjust = 0.0f; + vSavedForward.z = 0.0f; vSavedForward.y = 0.0f; vSavedForward.x = 0.0f; - vSavedForward.z = 0.0f; if (view_id == -1) { - RenderDash = 0; pView = nullptr; pCamera = nullptr; + RenderDash = 0; } else { pView = eGetView(view_id, false); pCamera = pView->GetCamera(); diff --git a/src/Speed/Indep/Src/World/WCollision.h b/src/Speed/Indep/Src/World/WCollision.h index 5b3bab6fb..523e7c15f 100644 --- a/src/Speed/Indep/Src/World/WCollision.h +++ b/src/Speed/Indep/Src/World/WCollision.h @@ -11,7 +11,12 @@ #include "Speed/Indep/Src/Physics/Dynamics/Collision.h" #include "Speed/Indep/bWare/Inc/bMath.hpp" -struct WSurface : CollisionSurface {}; +struct WSurface : CollisionSurface { + WSurface() { + fSurface = 0; + fFlags = 0; + } +}; struct WCollisionArticle { // total size: 0x10 diff --git a/src/Speed/Indep/Src/World/WCollisionTri.h b/src/Speed/Indep/Src/World/WCollisionTri.h index b88fd9b2b..b7d43a4c1 100644 --- a/src/Speed/Indep/Src/World/WCollisionTri.h +++ b/src/Speed/Indep/Src/World/WCollisionTri.h @@ -10,6 +10,7 @@ #include "Speed/Indep/Libs/Support/Utility/UTypes.h" struct WCollisionTri { + WCollisionTri() {} // total size: 0x30 UMath::Vector3 fPt0; // offset 0x0, size 0xC const struct SimSurface *fSurfaceRef; // offset 0xC, size 0x4 diff --git a/src/Speed/Indep/Src/World/WWorldPos.h b/src/Speed/Indep/Src/World/WWorldPos.h index 0d334b1fd..302777830 100644 --- a/src/Speed/Indep/Src/World/WWorldPos.h +++ b/src/Speed/Indep/Src/World/WWorldPos.h @@ -9,8 +9,7 @@ #include "Speed/Indep/Src/World/WCollisionTri.h" // total size: 0x3C -class WWorldPos { - public: +struct WWorldPos { void MakeFaceAtPoint(const UMath::Vector3 &inPoint); bool FindClosestFace(const WCollider *collider, const UMath::Vector3 &ptRaw, bool quitIfOnSameFace); bool FindClosestFace(const UMath::Vector3 &ptRaw, bool quitIfOnSameFace); @@ -33,11 +32,10 @@ class WWorldPos { } WWorldPos(float yOffset) { - this->fFaceValid = 0; - this->fMissCount = 0; - this->fUsageCount = 0; - this->fYOffset = yOffset; - this->fSurface = nullptr; + fFaceValid = 0; + fMissCount = 0; + fUsageCount = 0; + fYOffset = yOffset; } ~WWorldPos() {} @@ -66,7 +64,6 @@ class WWorldPos { // bool FindClosestFace(const WCollisionInstanceCacheList &instList, const UMath::Vector3 &pt, bool quitIfOnSameFace) {} - private: WCollisionTri fFace; // offset 0x0, size 0x30 unsigned int fFaceValid : 1; // offset 0x30, size 0x4 unsigned int fMissCount : 15; // offset 0x30, size 0x4 From 0ff19198e57c210a49066da1f8b32e8b8e0305b6 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 10:19:06 +0100 Subject: [PATCH 132/691] 84.4%: match CameraMover::Enable with SetRenderDash StopUpdating inline Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Camera.hpp | 4 +++- src/Speed/Indep/Src/Camera/CameraMover.cpp | 4 +--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Camera.hpp b/src/Speed/Indep/Src/Camera/Camera.hpp index 397d21d8b..98923fe66 100644 --- a/src/Speed/Indep/Src/Camera/Camera.hpp +++ b/src/Speed/Indep/Src/Camera/Camera.hpp @@ -130,7 +130,9 @@ class Camera { } void SetRenderDash(int r) { - RenderDash = r; + if (!StopUpdating) { + RenderDash = r; + } } void SetTargetDistance(float f) { diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 0c8931a6c..8a8d0bf12 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -568,9 +568,7 @@ bool CameraMover::RenderCarPOV() { void CameraMover::Enable() { if (Enabled == 0) { Enabled = 1; - if (Camera::StopUpdating == 0) { - pCamera->SetRenderDash(RenderDash); - } + pCamera->SetRenderDash(RenderDash); pView->AttachCameraMover(this); pCamera->SetNearZ(0.5f); } From 7f3b905793f9438b6bf00bcfa28f690e6041d8e4 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 10:57:23 +0100 Subject: [PATCH 133/691] Merge tooling-worktree-assets into zcamera Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/execute/SKILL.md | 31 +-- .github/skills/implement/SKILL.md | 27 ++- .github/skills/refiner/SKILL.md | 13 +- AGENTS.md | 95 +++++----- tools/_common.py | 9 +- tools/build-unit.py | 302 ------------------------------ tools/decomp-context.py | 21 +-- tools/decomp-diff.py | 10 +- tools/decomp-workflow.py | 289 ++++++++++------------------ 9 files changed, 180 insertions(+), 617 deletions(-) delete mode 100644 tools/build-unit.py diff --git a/.github/skills/execute/SKILL.md b/.github/skills/execute/SKILL.md index 66443927e..c6ebe9e22 100644 --- a/.github/skills/execute/SKILL.md +++ b/.github/skills/execute/SKILL.md @@ -58,21 +58,15 @@ Preferred shortcut: python tools/decomp-workflow.py unit -u main/Path/To/TU --limit 20 ``` -Manual equivalent: - -```sh -python tools/decomp-status.py --unit main/Path/To/TU -TEMPOBJ=$(python tools/build-unit.py -u main/Path/To/TU) -python tools/decomp-diff.py -u main/Path/To/TU -s missing -t function --base-obj "$TEMPOBJ" -python tools/decomp-diff.py -u main/Path/To/TU -s nonmatching -t function --base-obj "$TEMPOBJ" -``` +If you need the raw tools instead of the wrapper, run `decomp-status.py` and +`decomp-diff.py` directly against the shared build output. This shows all symbols with their match status. Note the total count of missing, nonmatching, and matching functions. ## Phase 2: Scaffold (if needed) -A jump file contains many files and classes. If the TU depends on a type whose +A jumbo file contains many files and classes. If the TU depends on a type whose definition does not yet exist in the project, follow the scaffold workflow in `.github/skills/scaffold/SKILL.md` to create the needed header/source definitions before moving on. @@ -81,9 +75,7 @@ before moving on. ### 3a. Get the updated function list -After scaffolding, rebuild and re-check the function list. -Use `build-unit.py` to compile to a private temp `.o` so the status check isn't -polluted by another concurrent temp build: +After scaffolding, rebuild and re-check the function list: Preferred shortcut: @@ -91,14 +83,8 @@ Preferred shortcut: python tools/decomp-workflow.py unit -u main/Path/To/TU ``` -Manual equivalent: - -```sh -ninja # full build to update shared state (progress, sha1) -TEMPOBJ=$(python tools/build-unit.py -u main/Path/To/TU) -python tools/decomp-diff.py -u main/Path/To/TU -s missing -t function --base-obj "$TEMPOBJ" -python tools/decomp-diff.py -u main/Path/To/TU -s nonmatching -t function --base-obj "$TEMPOBJ" -``` +If you need the raw tools, rebuild normally and then run `decomp-diff.py` +directly on the unit. ### 3c. Implement each function sequentially @@ -134,8 +120,9 @@ After modifying any shared headers, run `ninja changes` to check for regressions Empty changeset = no regressions. If regressions appear, revert the shared change and use a local workaround instead. -Use `build-unit.py` + `--base-obj` for diff and context commands when you want -results isolated from other concurrent builds of the same TU. +Use `python tools/decomp-workflow.py function ...` or +`python tools/decomp-workflow.py diff ...` when you want a shorter, wrapper-first +view for one function. ### 3g. Periodic reassessment diff --git a/.github/skills/implement/SKILL.md b/.github/skills/implement/SKILL.md index 66580e0c5..ce3c7dcc4 100644 --- a/.github/skills/implement/SKILL.md +++ b/.github/skills/implement/SKILL.md @@ -112,32 +112,26 @@ The game uses stlport, so you'll often encounter \_STL, but in the code it must ### Initial build -Compile to a private temp `.o` so your output isn't overwritten by other concurrent builds. -If you just need the standard context + temp-build flow, prefer +Rebuild the shared object the normal way before diffing. If you just need the +standard context flow, prefer `python tools/decomp-workflow.py function -u main/Path/To/TU -f FunctionName`. -If you only need a temp build or a standardized diff run, use: +For a rebuild plus a standardized diff run, use: ```sh python tools/decomp-workflow.py build -u main/Path/To/TU python tools/decomp-workflow.py diff -u main/Path/To/TU -d FunctionName ``` -Drop down to the manual loop below when you need tighter control over repeated diff iterations: - -```sh -TEMPOBJ=$(python tools/build-unit.py -u main/Path/To/TU) -``` - If the build fails, fix compilation errors first. ### Check the diff ```sh # Quick status -python tools/decomp-diff.py -u main/Path/To/TU --search FunctionName --base-obj "$TEMPOBJ" +python tools/decomp-diff.py -u main/Path/To/TU --search FunctionName # Full instruction diff -python tools/decomp-diff.py -u main/Path/To/TU -d FunctionName --base-obj "$TEMPOBJ" +python tools/decomp-diff.py -u main/Path/To/TU -d FunctionName ``` ### Interpreting the diff @@ -157,23 +151,24 @@ After writing your code, occasionally run the dwarf dump on the compiled output due to work on other functions, query the unmangled name instead. ```bash -# Compile to temp .o and dump its DWARF (use the same TEMPOBJ from the build step above): -dtk dwarf dump "$TEMPOBJ" -o /tmp/my_unit_dump.nothpp +# Rebuild the unit, then dump the shared object file's DWARF: +python tools/decomp-workflow.py build -u main/Path/To/TU +dtk dwarf dump build/GOWE69/src/Path/To/TU.o -o /tmp/my_unit_dump.nothpp # Then look up the same function in your output: python tools/lookup.py --file /tmp/my_unit_dump.nothpp function "EPerfectLaunch::~EPerfectLaunch(void)" # Compare with the original: python tools/lookup.py ./symbols/Dwarf function 0x801DE9AC ``` -If you can't figure out the source address using objdiff, find the function in the temporary file manually. +If you can't figure out the source address using objdiff, find the function in the rebuilt object file manually. ### Iterate Repeat the build-diff cycle until the diff shows 100% match with no `~` lines: ```sh -TEMPOBJ=$(python tools/build-unit.py -u main/Path/To/TU) -python tools/decomp-diff.py -u main/Path/To/TU -d FunctionName --base-obj "$TEMPOBJ" +python tools/decomp-workflow.py build -u main/Path/To/TU +python tools/decomp-diff.py -u main/Path/To/TU -d FunctionName ``` Every mismatched instruction is a signal — don't settle for "close enough". diff --git a/.github/skills/refiner/SKILL.md b/.github/skills/refiner/SKILL.md index 58ca6e603..96ab8d21e 100644 --- a/.github/skills/refiner/SKILL.md +++ b/.github/skills/refiner/SKILL.md @@ -18,11 +18,11 @@ approaches that were tried before — instead, apply systematic lateral analysis ## Phase 1: Read the full diff without collapsing -First compile to a private temp `.o`, then diff: +First rebuild the unit normally, then diff: ```sh -TEMPOBJ=$(python tools/build-unit.py -u main/Path/To/TU) -python tools/decomp-diff.py -u main/Path/To/TU -d FunctionName --no-collapse --base-obj "$TEMPOBJ" +python tools/decomp-workflow.py build -u main/Path/To/TU +python tools/decomp-diff.py -u main/Path/To/TU -d FunctionName --no-collapse ``` Read every instruction pair. Categorize each mismatch: @@ -109,11 +109,12 @@ isolated function, not as a general strategy. ## Phase 3: DWARF verification After any instruction match, verify the DWARF also matches. -Use the same `TEMPOBJ` from Phase 1 (or rebuild if you've changed the source): +Use the rebuilt shared object from Phase 1 (or rebuild again if you've changed the source): ```bash -# Compile to temp .o and dump its DWARF -dtk dwarf dump "$TEMPOBJ" -o /tmp/refiner__check.nothpp +# Rebuild the unit, then dump its DWARF +python tools/decomp-workflow.py build -u main/Path/To/TU +dtk dwarf dump build/GOWE69/src/Path/To/TU.o -o /tmp/refiner__check.nothpp # Compare your function's DWARF against the original python tools/lookup.py --file /tmp/refiner__check.nothpp function "ClassName::FunctionName(void)" diff --git a/AGENTS.md b/AGENTS.md index 22f60e3cd..540b15945 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2,7 +2,7 @@ Matching decompilation of Need for Speed Most Wanted 2005 (GameCube) targeting the USA Release build (`GOWE69`). The goal is to produce C++ source that compiles to byte-identical and dwarf-identical object code against the -original retail binary using the ProDG GC 3.9.3 compiler. +original retail binary using the ProDG GC 3.9.3 compiler, which is GCC 2.95-based under the hood. ## Build & Verify @@ -35,7 +35,7 @@ Sub-agents are allowed only for **read-only exploration** tasks such as: - searching the codebase for symbols, call sites, or include relationships - inspecting decomp output, assembly, DWARF, PS2 dumps, or line mappings -- gathering context from Ghidra, `lookup.py`, `decomp-diff.py`, or similar tools +- gathering context from Ghidra, `tools/decomp-workflow.py`, `lookup.py`, `decomp-diff.py`, or similar tools - summarizing findings that help the main worker decide what to change Sub-agents must **not** write or edit code files, headers, configs, or other repository files. @@ -58,6 +58,17 @@ Do **not** try to cheat objdiff, progress, or match metrics in any way. The goal the real decompilation output, not to manipulate the comparison setup, hide mismatches, or make progress numbers look better without actually matching the original code. +**Never** copy, overwrite, or symlink a compiled source `.o` file into `build/GOWE69/obj/`. +The `obj/` directory contains the **original reference objects** extracted from the retail +binary by `dtk dol split`. Replacing them with your own compiled output will make objdiff +compare your code against itself, producing a false 100% match. If the `obj/` file is +accidentally corrupted, regenerate it with: + +```sh +rm build/GOWE69/config.json +ninja build/GOWE69/config.json # re-splits from the original ELF +``` + ### lookup.py — Symbol lookup from the debug dump Query structs, enums, functions, globals, and typedefs directly from the pre-extracted @@ -95,14 +106,6 @@ python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim -d FindIOWin - Mismatched args are wrapped in `{}`. Matching runs are collapsed (control with `-C ` context lines, `--no-collapse`). Left = original, right = decomp. -**Parallel-safe usage** — when you compile the same TU in multiple concurrent iterations, -pass a private `--base-obj` so each diff uses its own compiled output: - -```sh -TEMPOBJ=$(python tools/build-unit.py -u main/Speed/Indep/SourceLists/zAnim) -python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim --base-obj "$TEMPOBJ" -d FindIOWin -``` - ### decomp-status.py — Project-wide progress ```sh @@ -125,21 +128,14 @@ python tools/decomp-context.py --ghidra-check # verify Ghidra CLI is set up co Flags: `--no-source`, `--no-ghidra` to skip sections. Source output is automatically scoped to the function's line range (with a few lines of context) instead of dumping the whole file. -**Parallel-safe usage** — pass `--base-obj` to use a private compiled `.o`: - -```sh -TEMPOBJ=$(python tools/build-unit.py -u main/Speed/Indep/SourceLists/zAnim) -python tools/decomp-context.py -u main/Speed/Indep/SourceLists/zAnim -f FindIOWin --base-obj "$TEMPOBJ" -``` - ### decomp-workflow.py — Wrapper for common agent workflows Prefer this wrapper for routine agent-driven flows instead of manually chaining -`build-unit.py`, `decomp-context.py`, `decomp-diff.py`, and `decomp-status.py`: +`decomp-context.py`, `decomp-diff.py`, and `decomp-status.py`: ```sh python tools/decomp-workflow.py health -python tools/decomp-workflow.py health --smoke-build-unit main/Speed/Indep/SourceLists/zAnim +python tools/decomp-workflow.py health --smoke-build main/Speed/Indep/SourceLists/zAnim python tools/decomp-workflow.py health --smoke-dtk main/Speed/Indep/SourceLists/zAnim python tools/decomp-workflow.py build -u main/Speed/Indep/SourceLists/zAnim python tools/decomp-workflow.py diff -u main/Speed/Indep/SourceLists/zAnim -d FindIOWin @@ -151,8 +147,7 @@ python tools/decomp-workflow.py unit -u main/Speed/Indep/SourceLists/zAnim --sea ``` The wrapper keeps the existing tools as the source of truth. It is intended to reduce -repeated command chaining and to standardize temp-object handling and worktree preflight -checks for agents. +repeated command chaining and to standardize routine worktree preflight checks for agents. `function` is the preferred context-gathering entrypoint: it bundles source excerpt, objdiff status/diff, compact GC DWARF function lookup, and Ghidra output in one run. @@ -205,13 +200,11 @@ If it finds a match, include that header instead of redeclaring. ### dtk (decomp-toolkit) -Dump the dwarf of your own implementation of a function. -**Always use the temp `.o` produced by `build-unit.py`** so the dump reflects your own -compilation and isn't overwritten by another concurrent temp build: +Dump the dwarf of your own implementation of a function after rebuilding the unit normally: ```sh -TEMPOBJ=$(python tools/build-unit.py -u main/Speed/Indep/SourceLists/UNITNAME) -dtk dwarf dump "$TEMPOBJ" -o /tmp/UNITNAME_.nothpp +python tools/decomp-workflow.py build -u main/Speed/Indep/SourceLists/zAnim +dtk dwarf dump build/GOWE69/src/Speed/Indep/SourceLists/zAnim.o -o /tmp/zAnim_check.nothpp ``` Demangle a symbol (you probably won't need this): @@ -220,29 +213,6 @@ Demangle a symbol (you probably won't need this): dtk demangle 'AcceptScriptMsg__7CEntityF20EScriptObjectMessage9TUniqueIdR13CStateManager' ``` -### build-unit.py — Parallel-safe compilation - -Compile a single translation unit to a private temporary `.o` file that won't be -overwritten by other concurrent temp builds. Always prefer this over plain `ninja` when you need to -diff or inspect your own compiled output: - -```sh -# Compile to an auto-generated temp path (printed to stdout): -TEMPOBJ=$(python tools/build-unit.py -u main/Speed/Indep/SourceLists/zAnim) - -# Compile to an explicit path: -python tools/build-unit.py -u main/Speed/Indep/SourceLists/zAnim -o /tmp/my.o -``` - -Typical parallel-safe iteration loop: - -```sh -TEMPOBJ=$(python tools/build-unit.py -u main/Path/To/TU) -python tools/decomp-diff.py -u main/Path/To/TU --base-obj "$TEMPOBJ" -d FunctionName -python tools/decomp-context.py -u main/Path/To/TU --base-obj "$TEMPOBJ" -f FunctionName -dtk dwarf dump "$TEMPOBJ" -o /tmp/TU_check.nothpp -``` - ### share_worktree_assets.py — Share stable assets across git worktrees Deduplicate immutable debug inputs and downloaded tool binaries across all git @@ -260,7 +230,7 @@ downloaded tool binaries under `build/`. It does **not** share `build.ninja`, ## Code Conventions -This is a **C++98** codebase compiled with ProDG (GCC under the hood). Key rules: +This is a **C++98** codebase compiled with ProDG GC 3.9.3 (GCC 2.95 under the hood). Key rules: - No `auto`, range-for, `enum class`, lambdas, or any C++11+ - Enum values use prefix: `enum EFoo { kF_Value1, kF_Value2 }` (not `enum class`) @@ -270,6 +240,7 @@ This is a **C++98** codebase compiled with ProDG (GCC under the hood). Key rules - Omit the `this` pointer. - Use `nullptr` and `override`. If they are missing, you need to include `types.h`. - Omit `struct` when declaring variables or parameters, we are not in C land. +- Avoid using `using namespace` at all cost. Since the game uses jumbo builds, they leak through files. ## Committing Progress @@ -286,12 +257,27 @@ n.n%: short description of what was matched or changed ``` Examples: + - `42.1%: match UpdateCamera` - `78.5%: match PlayerController constructor and destructor` - `100.0%: full match for zAnim` Do not batch up multiple percentage milestones into one commit — commit as each improvement lands. +## Parallel Sub-Agent Matching + +When working on a translation unit with multiple non-matching functions, use sub-agents selectively for **read-only exploration** around individual functions. Each sub-agent should focus on **exactly one function** — do not assign a sub-agent more than one function at a time. + +**Limit: never run more than 5 sub-agents concurrently.** Spawning too many at once causes resource contention and makes it harder to reason about progress. + +Guidelines: + +- Prefer solving difficult matching work in the main worker. Use sub-agents to inspect one function's context, diff, DWARF, or related call paths without editing files. +- Spawn a sub-agent per function only when the functions are independent (no shared edits to the same source lines). +- Sub-agents stay read-only. Let them inspect existing diff/context output rather than compiling or rebuilding. +- Do not sit idle waiting for sub-agents to finish. Continue with other independent investigation while they run. +- After a useful result lands and you make a real improvement, check the updated match percentage and commit if it improved. + ## Matching Philosophy You should take the Ghidra decompiler output for the initial translation step, get it to compile, make sure that the dwarf of the function matches and only then look for binary matching problems in the assembly. Be aware Ghidra usually gets the order of branches incorrect in if statements (it inverts the logic and the two bodies are swapped), this needs to be fixed to achieve bytematching status. @@ -345,9 +331,10 @@ It's very important that you use math inlines from bMath and UMath as shown in t the first one of the source code often ends up being the last in the assembly. - The developers usually initialized members using initializer lists. This is great because the order of stores becomes deterministic that way. However if you put all possible variables into the initializer list - and the order is wrong, you might have to initialize some or all variables in the function body instead. + and the order is wrong, you might have to initialize some or all variables in the function body instead. ### Relocation diffs + - When you have to use a constant that looks like an address, it's possible that the splitter thought it was an allocation and it shows up as a diff because the left side has a symbol and the right side has a constant. In this case you need to figure out the virtual address of the instruction and block the relocation in config.yml. @@ -418,9 +405,11 @@ TU: | Function: ### ExplicitInlineSpecialMembersForSTLElements -TU: zAttribSys | Function: _STL::_Rb_tree::_M_insert + +TU: zAttribSys | Function: \_STL::\_Rb_tree::\_M_insert If an STL node insertion path refuses to match, check whether the element type is missing explicit inline special members that the original source exposed. Adding the Dwarf-backed `operator new`, `operator delete`, placement `new`, copy constructor, and tiny accessors to `TypeDesc` made the tree node creation/insertion path match exactly. ### RegisterAllocatorTieBreakDeadEnd + TU: zAttribSys | Function: Class::RemoveCollection / Database::RemoveClass -If two near-matching functions differ only because the same inlined helper chain lands `mTableSize` in `r6` in the original but `r7` in the rebuild, treat it as a likely GCC 3.x register-allocation tie-break, not a normal source mismatch. In `zAttribSys`, `VecHashMap::FindIndex` inlined through `Remove -> RemoveIndex -> UpdateSearchLength` produced a stable `lwz r6, 4(r3)` vs `lwz r7, 4(r3)` split, which then propagated into later `UpdateSearchLength` control-flow differences. This survived 300+ source experiments: loop-form changes, adding/removing temporaries, splitting/merging expressions, helper inline/outline changes, declaration-order tweaks, member type changes, access-control changes, template method reorderings, and inline vs out-of-line ctor/dtor placement. Once the diff has collapsed to this kind of isolated register swap and DWARF locals/inlining already match, stop attacking each caller separately. Document the functions as `NON_MATCHING`, note the shared inlined root cause, and only consider flag permutation or compiler-level investigation as a last resort. +If two near-matching functions differ only because the same inlined helper chain lands `mTableSize` in `r6` in the original but `r7` in the rebuild, treat it as a likely ProDG/GCC 2.95 register-allocation tie-break, not a normal source mismatch. In `zAttribSys`, `VecHashMap::FindIndex` inlined through `Remove -> RemoveIndex -> UpdateSearchLength` produced a stable `lwz r6, 4(r3)` vs `lwz r7, 4(r3)` split, which then propagated into later `UpdateSearchLength` control-flow differences. This survived 300+ source experiments: loop-form changes, adding/removing temporaries, splitting/merging expressions, helper inline/outline changes, declaration-order tweaks, member type changes, access-control changes, template method reorderings, and inline vs out-of-line ctor/dtor placement. Once the diff has collapsed to this kind of isolated register swap and DWARF locals/inlining already match, stop attacking each caller separately. Document the functions as `NON_MATCHING`, note the shared inlined root cause, and only consider flag permutation or compiler-level investigation as a last resort. diff --git a/tools/_common.py b/tools/_common.py index a479a3e57..976fcd649 100644 --- a/tools/_common.py +++ b/tools/_common.py @@ -162,17 +162,16 @@ def run_objdiff_json( hint_lines.extend( [ f"Hint: the requested base object is missing: {missing_path}", - f"Rebuild it with: python tools/build-unit.py -u {unit_name}", + "Rebuild that object or point --base-obj at an existing file.", ] ) else: hint_lines.extend( [ f"Hint: the shared build output for {unit_name} is missing: {missing_path}", - "Fastest one-off fix for direct tools:", - f" TEMPOBJ=$(python tools/build-unit.py -u {unit_name})", - " rerun your diff/context command with --base-obj \"$TEMPOBJ\"", - "Wrapper flows that auto-build temp objects:", + "Fastest fixes:", + f" python tools/decomp-workflow.py build -u {unit_name}", + "Wrapper flows for inspection after rebuilding:", f" python tools/decomp-workflow.py unit -u {unit_name}", f" python tools/decomp-workflow.py diff -u {unit_name} ...", "Or rebuild shared outputs with: ninja all_source", diff --git a/tools/build-unit.py b/tools/build-unit.py deleted file mode 100644 index 29a440d8b..000000000 --- a/tools/build-unit.py +++ /dev/null @@ -1,302 +0,0 @@ -#!/usr/bin/env python3 - -""" -Compile a single translation unit to a temporary (or specified) object file. - -Uses `ninja -t compdb` to extract the exact compile command for the unit, then -redirects the output to a private path so parallel agents never overwrite each -other's work. - -Usage: - # Auto-generate a temp path (printed to stdout): - python tools/build-unit.py -u main/Speed/Indep/SourceLists/zAnim - - # Compile to an explicit path: - python tools/build-unit.py -u main/Speed/Indep/SourceLists/zAnim -o /tmp/my.o - -The path of the compiled .o is always printed to stdout on success so it can be -captured with command substitution: - - TEMPOBJ=$(python tools/build-unit.py -u main/Speed/Indep/SourceLists/zAnim) - python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim -d MyFunc --base-obj "$TEMPOBJ" - dtk dwarf dump "$TEMPOBJ" -o /tmp/my_dwarf.nothpp -""" - -import argparse -import json -import os -import re -import subprocess -import sys -import tempfile -from typing import Any, Dict, List, Optional, Tuple, Union - -from _common import BUILD_NINJA, OBJDIFF_JSON, ROOT_DIR, ToolError, fail, load_objdiff_config - -root_dir = ROOT_DIR -COMPILE_COMMANDS = os.path.join(ROOT_DIR, "compile_commands.json") - -Command = Union[str, List[str]] - - -def load_objdiff() -> Dict[str, Any]: - return load_objdiff_config() - - -def find_unit_source(config: Dict[str, Any], unit_name: str) -> Optional[str]: - """Return the source_path for a unit from objdiff.json, or None.""" - for unit in config.get("units", []): - if unit["name"] == unit_name: - src = unit.get("metadata", {}).get("source_path") - return str(src) if src else None - return None - - -def find_unit_target(config: Dict[str, Any], unit_name: str) -> Optional[str]: - """Return the build target path for a unit from objdiff.json, or None.""" - for unit in config.get("units", []): - if unit["name"] == unit_name: - target = unit.get("base_path") or unit.get("target_path") - return str(target) if target else None - return None - - -def get_compdb() -> Optional[List[Dict[str, Any]]]: - """Load compile_commands.json, falling back to `ninja -t compdb` if needed.""" - if os.path.exists(COMPILE_COMMANDS): - try: - with open(COMPILE_COMMANDS) as f: - return json.load(f) - except json.JSONDecodeError as e: - print(f"Failed to parse compile_commands.json: {e}", file=sys.stderr) - - result = subprocess.run( - ["ninja", "-t", "compdb"], - capture_output=True, - cwd=root_dir, - ) - if result.returncode != 0: - print( - f"ninja -t compdb failed:\n{result.stderr.decode(errors='replace')}", - file=sys.stderr, - ) - return None - try: - return json.loads(result.stdout) - except json.JSONDecodeError as e: - print(f"Failed to parse ninja compdb output: {e}", file=sys.stderr) - return None - - -def get_build_command(target_path: str) -> Optional[str]: - """Return the final ninja command used to build target_path.""" - result = subprocess.run( - ["ninja", "-t", "commands", target_path], - capture_output=True, - cwd=root_dir, - ) - if result.returncode != 0: - print( - f"ninja -t commands failed:\n{result.stderr.decode(errors='replace')}", - file=sys.stderr, - ) - return None - - commands = [line.strip() for line in result.stdout.decode().splitlines() if line.strip()] - return commands[-1] if commands else None - - -def find_entry( - compdb: List[Dict[str, Any]], source_path: str -) -> Optional[Dict[str, Any]]: - """Find the compdb entry whose 'file' matches source_path. - - Prefers entries whose output is a .o file (actual compiler invocations) - over auxiliary entries (e.g. hash generation). - """ - abs_source = os.path.normcase(os.path.abspath(os.path.join(root_dir, source_path))) - candidates = [] - for entry in compdb: - file_val = entry.get("file", "") - if not os.path.isabs(file_val): - entry_dir = entry.get("directory", root_dir) - file_val = os.path.abspath(os.path.join(entry_dir, file_val)) - if os.path.normcase(file_val) == abs_source: - candidates.append(entry) - for entry in candidates: - out = entry.get("output", "") - if out.endswith(".o") or out.endswith(".obj"): - return entry - return candidates[0] if candidates else None - - -def get_command(entry: Dict[str, Any]) -> Command: - command = entry.get("command") - if isinstance(command, str): - return command - - arguments = entry.get("arguments") - if isinstance(arguments, list): - return arguments[:] - - print( - "Compilation entry is missing both 'command' and 'arguments'", - file=sys.stderr, - ) - sys.exit(1) - - -def strip_transform_dep(command: Command) -> Command: - """Remove the `&& python transform_dep.py ...` step from a compile command. - - The dependency file transformation is only needed for incremental ninja - builds; it is safe to skip for one-off temp compilations. - """ - if isinstance(command, list): - return command - return re.sub( - r"\s*&&\s*\S*python3?\S*\s+\S*transform_dep\.py\s+\S+\s+\S+", - "", - command, - ) - - -def find_output_argument(command: Command) -> Optional[Tuple[int, str]]: - if isinstance(command, list): - for i in range(len(command) - 1): - if command[i] == "-o": - return i + 1, command[i + 1] - return None - - m = re.search(r"(? Command: - """Replace the compiler output path in command with new_output. - - Handles two styles: - - Direct file output (-o path/to/file.o): ngccc/ProDG, MSVC, EE-GCC - - Directory output (-o path/to/dir): mwcc (MWCC outputs to a dir) - """ - output_arg = find_output_argument(command) - if output_arg is None: - print("Could not find -o argument in compile command", file=sys.stderr) - sys.exit(1) - - index, o_arg = output_arg - - if o_arg.endswith(".o") or o_arg.endswith(".obj"): - replacement = new_output - else: - replacement = os.path.dirname(new_output) - - if isinstance(command, list): - new_command = command[:] - new_command[index] = replacement - return new_command - - return command[:index] + replacement + command[index + len(o_arg) :] - - -def actual_output_path(command: Command, source_path: str, new_output: str) -> str: - """Return the path where the compiled .o actually lands. - - For direct-file compilers this is new_output. For directory-output - compilers it is /.o. - """ - output_arg = find_output_argument(command) - if output_arg is None: - return new_output - _, o_arg = output_arg - if o_arg.endswith(".o") or o_arg.endswith(".obj"): - return new_output - stem = os.path.splitext(os.path.basename(source_path))[0] - return os.path.join(os.path.dirname(new_output), stem + ".o") - - -def compile_unit(unit_name: str, output_path: str) -> str: - """Compile unit to output_path and return the actual .o path.""" - config = load_objdiff() - source_path = find_unit_source(config, unit_name) - target_path = find_unit_target(config, unit_name) - if not source_path: - fail( - f"No source_path found for unit '{unit_name}' in objdiff.json.\n" - "The unit may not have a source file yet (missing implementation)." - ) - if not target_path: - fail(f"No target_path found for unit '{unit_name}' in objdiff.json.") - if not os.path.exists(BUILD_NINJA): - fail(f"Missing {BUILD_NINJA}\nHint: Run: python configure.py") - - command = get_build_command(target_path) - if command is None: - fail( - f"No build command found for target '{target_path}'.\n" - "Make sure the unit exists and `python configure.py` has been run." - ) - - # 1. Strip the dependency-file transform step — not needed for temp builds. - command = strip_transform_dep(command) - - # 2. Determine the actual output path before modifying the command. - actual = actual_output_path(command, source_path, output_path) - - # 3. Ensure the output directory exists. - out_dir = os.path.dirname(actual) - if out_dir: - os.makedirs(out_dir, exist_ok=True) - - # 4. Redirect the compiler output. - command = redirect_output(command, source_path, output_path) - - # 5. Run the compile. - result = subprocess.run(command, shell=isinstance(command, str), cwd=root_dir) - if result.returncode != 0: - fail(f"Compilation failed (exit code {result.returncode})") - - return actual - - -def main() -> None: - parser = argparse.ArgumentParser( - description=( - "Compile a translation unit to a temporary or specified .o file. " - "Safe to run in parallel — each call produces an independent output." - ) - ) - parser.add_argument( - "-u", - "--unit", - required=True, - help="Unit name (e.g. main/Speed/Indep/SourceLists/zAnim)", - ) - parser.add_argument( - "-o", - "--output", - help="Explicit output .o path (default: auto-generated temp file)", - ) - args = parser.parse_args() - - if args.output: - output_path = os.path.abspath(args.output) - else: - unit_stem = os.path.basename(args.unit) - fd, output_path = tempfile.mkstemp( - prefix=f"nfsmw_{unit_stem}_", - suffix=".o", - ) - os.close(fd) - - try: - actual = compile_unit(args.unit, output_path) - except ToolError as e: - fail(str(e)) - print(actual) - - -if __name__ == "__main__": - main() diff --git a/tools/decomp-context.py b/tools/decomp-context.py index 3ec255d97..637c8f35f 100644 --- a/tools/decomp-context.py +++ b/tools/decomp-context.py @@ -14,10 +14,6 @@ python tools/decomp-context.py -u main/Speed/Indep/SourceLists/zAnim -f __9CAnimBank --no-lookup python tools/decomp-context.py -u main/Speed/Indep/SourceLists/zAnim -f __9CAnimBank --no-source python tools/decomp-context.py --ghidra-check - -Parallel-safe usage (avoids interference from other agents building the same TU): - TEMPOBJ=$(python tools/build-unit.py -u main/Speed/Indep/SourceLists/zAnim) - python tools/decomp-context.py -u main/Speed/Indep/SourceLists/zAnim -f __9CAnimBank --base-obj "$TEMPOBJ" """ import argparse @@ -37,7 +33,7 @@ DTK = os.path.join(root_dir, "build", "tools", "dtk") GC_SYMBOLS_FILE = os.path.join(root_dir, "config", "GOWE69", "symbols.txt") PS2_SYMBOLS_FILE = os.path.join(root_dir, "config", "SLES-53558-A124", "symbols.txt") -GC_DWARF_FILE = os.path.join(root_dir, "symbols", "mw_dwarfdump.nothpp") +GC_DWARF_PATH = os.path.join(root_dir, "symbols", "Dwarf") DEBUG_LINES_FILE = os.path.join(root_dir, "symbols", "debug_lines.txt") GC_GHIDRA_PROGRAM = "NFSMWRELEASE.ELF" PS2_GHIDRA_PROGRAM = "NFS.ELF" @@ -136,15 +132,14 @@ def format_hex_address(address: str) -> str: def lookup_function_dwarf(query: str) -> Tuple[Optional[str], Optional[str]]: - """Query the combined GC DWARF dump for one function.""" - if not os.path.exists(GC_DWARF_FILE): - return None, f"DWARF dump not found: {GC_DWARF_FILE}" + """Query the split GC DWARF dump for one function.""" + if not os.path.exists(GC_DWARF_PATH): + return None, f"DWARF dump not found: {GC_DWARF_PATH}" cmd = [ sys.executable, os.path.join(script_dir, "lookup.py"), - "--file", - GC_DWARF_FILE, + GC_DWARF_PATH, "function", query, ] @@ -948,15 +943,11 @@ def main(): action="store_true", help="Verify Ghidra CLI is reachable and programs are loaded, then exit", ) - # Parallel-safe option: use a pre-compiled temp .o instead of the shared build output. - # Obtain the temp path with: TEMPOBJ=$(python tools/build-unit.py -u ) parser.add_argument( "--base-obj", metavar="PATH", help=( - "Use this .o file as the decomp base instead of the one from objdiff.json. " - "Allows parallel agents to see their own compilation result without interference. " - "Produce the path with build-unit.py." + "Use this .o file as the decomp base instead of the one from objdiff.json." ), ) args = parser.parse_args() diff --git a/tools/decomp-diff.py b/tools/decomp-diff.py index fda358711..0f3dba9e8 100644 --- a/tools/decomp-diff.py +++ b/tools/decomp-diff.py @@ -11,10 +11,6 @@ python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim -s nonmatching python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim -d __9CAnimBank - -Parallel-safe usage (use a temp .o to avoid collisions with other agents): - TEMPOBJ=$(python tools/build-unit.py -u main/Speed/Indep/SourceLists/zAnim) - python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim --base-obj "$TEMPOBJ" -d __9CAnimBank """ import argparse @@ -480,15 +476,11 @@ def main(): help="Don't collapse matching instruction runs", ) - # Parallel-safe option: use a pre-compiled temp .o instead of the shared build output. - # Obtain the temp path with: TEMPOBJ=$(python tools/build-unit.py -u ) parser.add_argument( "--base-obj", metavar="PATH", help=( - "Use this .o file as the decomp base instead of the one from objdiff.json. " - "Allows parallel agents to diff against their own private compilation output " - "without interference. Produce the path with build-unit.py." + "Use this .o file as the decomp base instead of the one from objdiff.json." ), ) diff --git a/tools/decomp-workflow.py b/tools/decomp-workflow.py index 6b1e92e10..31118068d 100644 --- a/tools/decomp-workflow.py +++ b/tools/decomp-workflow.py @@ -7,7 +7,7 @@ most common agent flows: python tools/decomp-workflow.py health - python tools/decomp-workflow.py health --smoke-build-unit main/Speed/Indep/SourceLists/zCamera + python tools/decomp-workflow.py health --smoke-build main/Speed/Indep/SourceLists/zCamera python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll --brief python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll --ghidra-version gc @@ -23,8 +23,17 @@ import subprocess import sys import tempfile -from typing import List, Optional, Sequence, Tuple -from _common import BUILD_NINJA, OBJDIFF_JSON, ROOT_DIR, ToolError, ensure_exists +from typing import List, Optional, Sequence +from _common import ( + BUILD_NINJA, + OBJDIFF_JSON, + ROOT_DIR, + ToolError, + ensure_exists, + find_objdiff_unit, + load_objdiff_config, + make_abs, +) SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) @@ -33,7 +42,7 @@ DTK = os.path.join(ROOT_DIR, "build", "tools", "dtk") GC_SYMBOLS = os.path.join(ROOT_DIR, "config", "GOWE69", "symbols.txt") PS2_SYMBOLS = os.path.join(ROOT_DIR, "config", "SLES-53558-A124", "symbols.txt") -GC_DWARF = os.path.join(ROOT_DIR, "symbols", "mw_dwarfdump.nothpp") +GC_DWARF = os.path.join(ROOT_DIR, "symbols", "Dwarf") DEBUG_LINES = os.path.join(ROOT_DIR, "symbols", "debug_lines.txt") DEFAULT_SMOKE_UNIT = "main/Speed/Indep/SourceLists/zCamera" @@ -49,7 +58,6 @@ (os.path.join("orig", "GOWE69", "NFSMWRELEASE.ELF"), "GameCube original ELF"), (os.path.join("orig", "SLES-53558-A124", "NFS.ELF"), "PS2 original ELF"), (os.path.join("symbols", "Dwarf"), "DWARF dump"), - (os.path.join("symbols", "mw_dwarfdump.nothpp"), "combined dwarf dump"), ] @@ -115,17 +123,28 @@ def ensure_decomp_prereqs() -> None: raise WorkflowError(str(e)) -def build_temp_obj(unit_name: str) -> str: - result = run_capture(python_tool("build-unit.py", "-u", unit_name)) - lines = [line.strip() for line in result.stdout.splitlines() if line.strip()] - if not lines: - raise WorkflowError( - "build-unit.py succeeded but did not print an output path to stdout" - ) - actual = lines[-1] - if not os.path.exists(actual): - raise WorkflowError(f"build-unit.py reported a missing output path: {actual}") - return actual +def get_unit_build_target(unit_name: str) -> str: + config = load_objdiff_config() + unit = find_objdiff_unit(config, unit_name) + if unit is None: + raise WorkflowError(f"Unit not found in objdiff.json: {unit_name}") + + target = unit.get("base_path") or unit.get("target_path") + if not target: + raise WorkflowError(f"Unit has no build target in objdiff.json: {unit_name}") + return str(target) + + +def get_unit_build_output(unit_name: str) -> str: + target = get_unit_build_target(unit_name) + return make_abs(target) or target + + +def build_shared_unit(unit_name: str) -> str: + ensure_decomp_prereqs() + target = get_unit_build_target(unit_name) + run_stream(["ninja", target]) + return get_unit_build_output(unit_name) def maybe_remove(path: Optional[str]) -> None: @@ -135,7 +154,7 @@ def maybe_remove(path: Optional[str]) -> None: if os.path.exists(path): os.remove(path) except OSError as e: - print(f"Warning: failed to remove temp object {path}: {e}", file=sys.stderr) + print(f"Warning: failed to remove temporary file {path}: {e}", file=sys.stderr) def dtk_dwarf_dump(obj_path: str) -> str: @@ -252,13 +271,7 @@ def report(ok: bool, label: str, detail: str) -> None: try: run_capture( - python_tool( - "lookup.py", - "--file", - GC_DWARF, - "function", - DEBUG_SYMBOL_PROBE_DEMANGLED, - ) + python_tool("lookup.py", GC_DWARF, "function", DEBUG_SYMBOL_PROBE_DEMANGLED) ) report(True, "gc-dwarf", f"{DEBUG_SYMBOL_PROBE_DEMANGLED} found") except WorkflowError as e: @@ -280,153 +293,98 @@ def report(ok: bool, label: str, detail: str) -> None: except WorkflowError as e: report(False, "debug-lines", str(e)) - if args.smoke_build_unit: + if args.smoke_build: print_section("Build Smoke Test") - temp_obj = None try: - temp_obj = build_temp_obj(args.smoke_build_unit) - report(True, "build-unit", temp_obj) + output_path = build_shared_unit(args.smoke_build) + report(True, "build", output_path) except WorkflowError as e: - report(False, "build-unit", str(e)) - finally: - maybe_remove(temp_obj) + report(False, "build", str(e)) if args.smoke_dtk: print_section("DTK Smoke Test") - temp_obj = None dump_path = None try: - temp_obj = build_temp_obj(args.smoke_dtk) - dump_path = dtk_dwarf_dump(temp_obj) + obj_path = build_shared_unit(args.smoke_dtk) + dump_path = dtk_dwarf_dump(obj_path) report(True, "dtk", dump_path) except WorkflowError as e: report(False, "dtk", str(e)) finally: maybe_remove(dump_path) - maybe_remove(temp_obj) if failures: raise WorkflowError(f"Health check failed with {failures} issue(s)") -def resolve_base_obj( - unit_name: str, base_obj: Optional[str], no_build: bool, keep_temp: bool -) -> Tuple[Optional[str], bool]: - if base_obj: - return os.path.abspath(base_obj), False - if no_build: - return None, False - temp_obj = build_temp_obj(unit_name) - print(f"Using temp object: {temp_obj}", flush=True) - return temp_obj, not keep_temp - - def command_function(args: argparse.Namespace) -> None: ensure_decomp_prereqs() - temp_obj = None - cleanup = False - try: - temp_obj, cleanup = resolve_base_obj( - args.unit, args.base_obj, args.no_build, args.keep_temp_obj - ) - print_section(f"Function Workflow: {args.function}") - cmd = python_tool("decomp-context.py", "-u", args.unit, "-f", args.function) - if args.no_source: - cmd.append("--no-source") - if args.no_lookup: - cmd.append("--no-lookup") - else: - cmd.extend(["--lookup-mode", args.lookup_mode]) - if args.no_ghidra: - cmd.append("--no-ghidra") - else: - cmd.extend(["--ghidra-version", args.ghidra_version]) - if args.brief: - cmd.append("--brief") - if temp_obj: - cmd.extend(["--base-obj", temp_obj]) - run_stream(cmd) - finally: - if cleanup: - maybe_remove(temp_obj) + print_section(f"Function Workflow: {args.function}") + cmd = python_tool("decomp-context.py", "-u", args.unit, "-f", args.function) + if args.no_source: + cmd.append("--no-source") + if args.no_lookup: + cmd.append("--no-lookup") + else: + cmd.extend(["--lookup-mode", args.lookup_mode]) + if args.no_ghidra: + cmd.append("--no-ghidra") + else: + cmd.extend(["--ghidra-version", args.ghidra_version]) + if args.brief: + cmd.append("--brief") + run_stream(cmd) def command_unit(args: argparse.Namespace) -> None: ensure_decomp_prereqs() - temp_obj = None - cleanup = False - try: - temp_obj, cleanup = resolve_base_obj( - args.unit, args.base_obj, args.no_build, args.keep_temp_obj - ) - - print_section(f"Unit Status: {args.unit}") - run_stream(python_tool("decomp-status.py", "--unit", args.unit)) + print_section(f"Unit Status: {args.unit}") + run_stream(python_tool("decomp-status.py", "--unit", args.unit)) - common_args: List[str] = ["-u", args.unit, "-t", "function"] - if temp_obj: - common_args.extend(["--base-obj", temp_obj]) - if args.search: - common_args.extend(["--search", args.search]) - if args.limit is not None: - common_args.extend(["--limit", str(args.limit)]) + common_args: List[str] = ["-u", args.unit, "-t", "function"] + if args.search: + common_args.extend(["--search", args.search]) + if args.limit is not None: + common_args.extend(["--limit", str(args.limit)]) - print_section("Missing Functions") - run_stream(python_tool("decomp-diff.py", *common_args, "-s", "missing")) + print_section("Missing Functions") + run_stream(python_tool("decomp-diff.py", *common_args, "-s", "missing")) - print_section("Nonmatching Functions") - run_stream(python_tool("decomp-diff.py", *common_args, "-s", "nonmatching")) - finally: - if cleanup: - maybe_remove(temp_obj) + print_section("Nonmatching Functions") + run_stream(python_tool("decomp-diff.py", *common_args, "-s", "nonmatching")) def command_build(args: argparse.Namespace) -> None: - cmd = python_tool("build-unit.py", "-u", args.unit) - if args.output: - cmd.extend(["-o", os.path.abspath(args.output)]) - run_stream(cmd) + print(build_shared_unit(args.unit), flush=True) def command_diff(args: argparse.Namespace) -> None: ensure_decomp_prereqs() - temp_obj = None - cleanup = False - try: - temp_obj, cleanup = resolve_base_obj( - args.unit, args.base_obj, args.no_build, args.keep_temp_obj - ) - - title = f"Diff Workflow: {args.unit}" - if args.diff: - title += f" / {args.diff}" - print_section(title) - - cmd: List[str] = python_tool("decomp-diff.py", "-u", args.unit) - if args.diff: - cmd.extend(["-d", args.diff]) - if args.type: - cmd.extend(["-t", args.type]) - if args.status: - cmd.extend(["-s", args.status]) - if args.section: - cmd.extend(["--section", args.section]) - if args.search: - cmd.extend(["--search", args.search]) - if args.limit is not None: - cmd.extend(["--limit", str(args.limit)]) - if args.context is not None: - cmd.extend(["-C", str(args.context)]) - if args.range: - cmd.extend(["--range", args.range]) - if args.no_collapse: - cmd.append("--no-collapse") - if temp_obj: - cmd.extend(["--base-obj", temp_obj]) - run_stream(cmd) - finally: - if cleanup: - maybe_remove(temp_obj) + title = f"Diff Workflow: {args.unit}" + if args.diff: + title += f" / {args.diff}" + print_section(title) + + cmd: List[str] = python_tool("decomp-diff.py", "-u", args.unit) + if args.diff: + cmd.extend(["-d", args.diff]) + if args.type: + cmd.extend(["-t", args.type]) + if args.status: + cmd.extend(["-s", args.status]) + if args.section: + cmd.extend(["--section", args.section]) + if args.search: + cmd.extend(["--search", args.search]) + if args.limit is not None: + cmd.extend(["--limit", str(args.limit)]) + if args.context is not None: + cmd.extend(["-C", str(args.context)]) + if args.range: + cmd.extend(["--range", args.range]) + if args.no_collapse: + cmd.append("--no-collapse") + run_stream(cmd) def build_parser() -> argparse.ArgumentParser: @@ -442,12 +400,12 @@ def build_parser() -> argparse.ArgumentParser: help="Check whether the current worktree is ready for GC and PS2 decomp work", ) health.add_argument( - "--smoke-build-unit", + "--smoke-build", metavar="UNIT", nargs="?", const=DEFAULT_SMOKE_UNIT, help=( - "Also run build-unit.py as a smoke test. If UNIT is omitted, uses " + "Also build the unit's shared output as a smoke test. If UNIT is omitted, uses " f"{DEFAULT_SMOKE_UNIT}" ), ) @@ -465,24 +423,10 @@ def build_parser() -> argparse.ArgumentParser: function = subparsers.add_parser( "function", - help="Build a temp object if needed and run decomp-context.py for one function", + help="Run decomp-context.py for one function", ) function.add_argument("-u", "--unit", required=True, help="Translation unit name") function.add_argument("-f", "--function", required=True, help="Function name to inspect") - function.add_argument( - "--base-obj", - help="Use an explicit object file instead of building a temp object", - ) - function.add_argument( - "--no-build", - action="store_true", - help="Do not build a temp object when --base-obj is not provided", - ) - function.add_argument( - "--keep-temp-obj", - action="store_true", - help="Keep the auto-built temp object instead of deleting it afterwards", - ) function.add_argument( "--no-source", action="store_true", @@ -522,20 +466,6 @@ def build_parser() -> argparse.ArgumentParser: help="Show a compact unit workflow summary using decomp-status.py and decomp-diff.py", ) unit.add_argument("-u", "--unit", required=True, help="Translation unit name") - unit.add_argument( - "--base-obj", - help="Use an explicit object file instead of building a temp object", - ) - unit.add_argument( - "--no-build", - action="store_true", - help="Do not build a temp object when --base-obj is not provided", - ) - unit.add_argument( - "--keep-temp-obj", - action="store_true", - help="Keep the auto-built temp object instead of deleting it afterwards", - ) unit.add_argument("--search", help="Fuzzy search on demangled symbol name") unit.add_argument( "--limit", @@ -546,19 +476,14 @@ def build_parser() -> argparse.ArgumentParser: build = subparsers.add_parser( "build", - help="Run build-unit.py with wrapper-friendly defaults", + help="Build a unit's shared output with its configured ninja target", ) build.add_argument("-u", "--unit", required=True, help="Translation unit name") - build.add_argument( - "-o", - "--output", - help="Explicit output .o path (default: auto-generated temp file)", - ) build.set_defaults(func=command_build) diff = subparsers.add_parser( "diff", - help="Build a temp object if needed and run decomp-diff.py", + help="Run decomp-diff.py", ) diff.add_argument("-u", "--unit", required=True, help="Translation unit name") diff.add_argument( @@ -593,20 +518,6 @@ def build_parser() -> argparse.ArgumentParser: action="store_true", help="Don't collapse matching instruction runs", ) - diff.add_argument( - "--base-obj", - help="Use an explicit object file instead of building a temp object", - ) - diff.add_argument( - "--no-build", - action="store_true", - help="Do not build a temp object when --base-obj is not provided", - ) - diff.add_argument( - "--keep-temp-obj", - action="store_true", - help="Keep the auto-built temp object instead of deleting it afterwards", - ) diff.set_defaults(func=command_diff) return parser From 3c8060181431d44003c762618ece9f5a8ff6383c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 12:44:11 +0100 Subject: [PATCH 134/691] =?UTF-8?q?85.1%:=20match=20TerrainVelocityNoise?= =?UTF-8?q?=20(17.1%=20=E2=86=92=2099.1%)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 106 +++++++++++---------- 1 file changed, 56 insertions(+), 50 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 8a8d0bf12..6d6cf778a 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -336,9 +336,9 @@ void CameraAnchor::Update(float dT, const bMatrix4 &matrix, const bVector3 &velo bVector3 acc((mVelMag - savedVelMag) / dT, 0.0f, 0.0f); bMulMatrix(&mAccel, &mGeomRot, &acc); } else { - mAccel.x = 0.0f; mAccel.z = 0.0f; mAccel.y = 0.0f; + mAccel.x = 0.0f; } } @@ -378,17 +378,14 @@ void CameraMoverRestartRace() { } Camera *GetCurrentCamera() { - Camera *camera = 0; - - if (&eViews[1] != 0) { - camera = eViews[1].pCamera; - } - - if (camera != 0) { - return camera; + eView *view = eGetView(1, false); + if (view != nullptr) { + Camera *c = view->GetCamera(); + if (c != nullptr) { + return c; + } } - - return 0; + return nullptr; } static bool sHavePrevPosition; @@ -764,64 +761,73 @@ void CameraMover::ChopperNoise(bMatrix4 *world_to_camera, float f_scale, bool us } } -void CameraMover::TerrainVelocityNoise(bMatrix4 *world_to_camera, CameraAnchor *car, float speed_scale, float terrain_scale) { - if (car == nullptr) { +void CameraMover::TerrainVelocityNoise(bMatrix4 *world_to_camera, CameraAnchor *p_car, float f_speed_scale, float f_terrain_scale) { + if (p_car == nullptr) { return; } - float speed_amount = speed_scale * car->GetVelMag(); - float terrain_amount = terrain_scale * car->GetSurface().CAMERA_NOISE(0); - float terrain_mix = car->GetSurface().CAMERA_NOISE(1); - bVector3 accel = *car->GetAccel(); - const bMatrix4 *matrix = car->GetMatrix(); - float accel_forward = accel.x * matrix->v0.x + accel.y * matrix->v1.x + accel.z * matrix->v2.x; - bVector4 speed_frequency = CameraNoiseSpeedFrequency; - bVector4 speed_amplitude = CameraNoiseSpeedAmplitude; - bVector4 terrain_frequency = CameraNoiseTerrainFrequency; - bVector4 terrain_amplitude = CameraNoiseTerrainAmplitude; + const float speed_tresh = 5.0f; + + bVector4 v_speed_terrain_freq; + tTable speed_table(const_cast(CameraNoiseSpeedData), 5, 0.0f, 80.0f); + speed_table.GetValue(&v_speed_terrain_freq, p_car->GetVelocityMagnitude()); - if (speed_amount > 0.0f) { - int speed_index = bClamp(static_cast(speed_amount * 0.05f), 0, 4); - bVector4 speed_sample = CameraNoiseSpeedData[speed_index]; + float f_road_noise_amplitude = p_car->GetSurface().CAMERA_NOISE(0); + float f_road_noise_grid_spacing_inverse = p_car->GetSurface().CAMERA_NOISE(1); - terrain_amount += bAbs(accel_forward) * 0.25f; - speed_amount = speed_sample.x * speed_scale + bAbs(accel_forward) * 0.5f; + float f_speed_magnitude = f_speed_scale * v_speed_terrain_freq.x; + float f_speed_frequency = v_speed_terrain_freq.z; + + if (p_car->IsDragRace()) { + f_speed_magnitude *= 1.5f; } - if (car->IsDragRace()) { - speed_amount *= 0.75f; + if (p_car->GetVelocityMagnitude() > speed_tresh) { + const float accel_max = 20.0f; + float accel = bDot(p_car->GetAcceleration(), p_car->GetForwardVector()); + accel = bClamp(accel, 0.0f, accel_max); + accel *= 0.05f; + f_speed_magnitude += accel * 0.15f; + f_speed_frequency += (0.5f - f_speed_frequency) * accel; } - if (car->IsOverRev()) { - speed_amount += 1.0f; - terrain_amount *= 0.5f; + if (p_car->IsOverRev()) { + f_speed_magnitude += 0.15f; + f_speed_frequency *= 0.7f; } - if (car->IsNosEngaged() && car->GetVelMag() > 1.0f) { - speed_amount = 1.5f; - terrain_amount = 1.0f; + if (p_car->IsNosEngaged() && p_car->GetVelocityMagnitude() > speed_tresh) { + f_speed_magnitude = 0.3f; + f_speed_frequency = 2.0f; } - if (car->IsBrakeEngaged() && car->GetVelMag() > 1.0f) { - speed_amount = 1.5f; - terrain_amount = 0.0f; + if (p_car->IsBrakeEngaged() && p_car->GetVelocityMagnitude() > speed_tresh) { + f_speed_magnitude = 0.3f; + f_speed_frequency = speed_tresh; } + float f_terrain_magnitude = f_terrain_scale * v_speed_terrain_freq.y * f_road_noise_amplitude; + float f_terrain_frequency = v_speed_terrain_freq.w * f_road_noise_grid_spacing_inverse; + if (!RenderCarPOV()) { - speed_amount *= 0.5f; - terrain_amount *= 0.5f; + f_speed_magnitude *= 0.25f; + f_terrain_magnitude *= 0.25f; } - terrain_amount *= terrain_mix; - bScale(&speed_frequency, &speed_frequency, terrain_amount); - bScale(&speed_amplitude, &speed_amplitude, speed_amount); - bScale(&terrain_frequency, &terrain_frequency, terrain_mix); - bScale(&terrain_amplitude, &terrain_amplitude, terrain_scale * terrain_amount); + bVector4 v_speed_frequency; + bVector4 v_speed_magnitude; + bScale(&v_speed_frequency, &CameraNoiseSpeedFrequency, f_speed_frequency); + bScale(&v_speed_magnitude, &CameraNoiseSpeedAmplitude, f_speed_magnitude); + pCamera->SetNoiseFrequency1(&v_speed_frequency); + pCamera->SetNoiseAmplitude1(&v_speed_magnitude); + + bVector4 v_terrain_frequency; + bVector4 v_terrain_magnitude; + bScale(&v_terrain_frequency, &CameraNoiseTerrainFrequency, f_terrain_frequency); + bScale(&v_terrain_magnitude, &CameraNoiseTerrainAmplitude, f_terrain_magnitude); + pCamera->SetNoiseFrequency2(&v_terrain_frequency); + pCamera->SetNoiseAmplitude2(&v_terrain_magnitude); - pCamera->SetNoiseFrequency1(&speed_frequency); - pCamera->SetNoiseAmplitude1(&speed_amplitude); - pCamera->SetNoiseFrequency2(&terrain_frequency); - pCamera->SetNoiseAmplitude2(&terrain_amplitude); pCamera->ApplyNoise(world_to_camera, WorldTimer.GetSeconds(), 1.0f); } From 19af78dc79b9cd66502e3a54cbd6149aa9b7fd03 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 13:18:28 +0100 Subject: [PATCH 135/691] =?UTF-8?q?85.7%:=20improve=20tTable?= =?UTF-8?q?::Blend=20(20.5%=20=E2=86=92=2086.3%)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 30 ++++++++-------- src/Speed/Indep/Src/Camera/Movers/Cubic.cpp | 40 ++++++++++----------- 2 files changed, 33 insertions(+), 37 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index 8f6f2f714..e49a6cdb2 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -474,30 +474,30 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { ICETrack *p_track = 0; ICEData *pCameraData = TheICEManager.GetCameraData(&p_track, &fParameter0, &fParameter1); - bool b_new_camera = (pICEData == pCameraData); + bool b_new_camera = (pICEData != pCameraData); - if (!b_refresh && b_new_camera) { + if (!b_refresh && !b_new_camera) { return; } bool hard_cut = false; - if (!b_new_camera && pCameraData != 0 && pOldCameraData != 0) { - hard_cut = !ICE::KeysShared(pOldCameraData, 1, pCameraData, 0); + if (b_new_camera && pCameraData != 0 && pOldCameraData != 0) { + hard_cut = (ICE::KeysShared(pOldCameraData, 1, pCameraData, 0) == 0); } - bool entering_smooth = false; - if (pCameraData != 0 && pOldCameraData == 0 && (pCameraData->bSmooth & 1)) { - entering_smooth = true; + int es = 0; + if (pCameraData != 0 && pICEData == 0 && !(pCameraData->bSmooth & 1)) { + es = 1; } - - bool leaving_smooth = false; - if (pOldCameraData != 0 && pCameraData == 0 && (pOldCameraData->bSmooth & 1)) { - leaving_smooth = true; + int ls = 0; + if (pICEData != 0 && pCameraData == 0 && !(pICEData->bSmooth & 1)) { + ls = 1; } + int flush = hard_cut | es | ls; pICEData = pCameraData; - if (hard_cut || entering_smooth || leaving_smooth) { + if (flush) { FlushAccumulationBuffer(); ICE::Vector3 *pos = pCar->GetGeometryPosition(); vSmoothCarPos.x = pos->x; @@ -509,7 +509,7 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { vSmoothCarFwd.z = fwd->z; } - if (!b_new_camera) { + if (b_new_camera) { int key = TheICEManager.GetCameraIndex((fParameter0 + fParameter1) * 0.5f, p_track); ICE::FireEventTag(key); } @@ -521,7 +521,7 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { nSpaceEye = pCameraData->nSpaceEye; nSpaceLook = pCameraData->nSpaceLook; - if (!b_new_camera && (pCameraData->bSmooth & 1) != 0) { + if (b_new_camera && (pCameraData->bSmooth & 1) != 0) { bMirrorICEData = (pCameraData->bSmooth >> 1) & 1; TheICEManager.SetSmoothExit(true); @@ -600,7 +600,7 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { fov.SetValDesired(static_cast(fov1)); fov.SetdValDesired(fov1_slope); - if (hard_cut || entering_smooth || leaving_smooth) { + if (hard_cut || es || ls) { PSMTX44Identity(*reinterpret_cast(&mHybridToWorld)); ICE::Vector3 *carPos = pCar->GetGeometryPosition(); bCopy(reinterpret_cast(&mHybridToWorld), diff --git a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp index fd51e0ea5..67dc21f41 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp @@ -44,42 +44,38 @@ bVector3* bClamp(bVector3* dest, const bVector3* pMin, const bVector3* pMax) { void tTable::Blend(CubicPovData *dest, CubicPovData *a, CubicPovData *b, float blend_a) { float blend_b = 1.0f - blend_a; + float f1 = blend_b * b->fEyeDuration; + float f2 = blend_b * b->fLookDuration; + float f3 = blend_b * b->fFovDuration; + float f4 = blend_b * b->fUpDuration; - dest->fEyeDuration = blend_a * a->fEyeDuration + blend_b * b->fEyeDuration; - dest->fLookDuration = blend_a * a->fLookDuration + blend_b * b->fLookDuration; - dest->fFovDuration = blend_a * a->fFovDuration + blend_b * b->fFovDuration; - dest->fUpDuration = blend_a * a->fUpDuration + blend_b * b->fUpDuration; + dest->fEyeDuration = blend_a * a->fEyeDuration + f1; + dest->fLookDuration = blend_a * a->fLookDuration + f2; + dest->fFovDuration = blend_a * a->fFovDuration + f3; + dest->fUpDuration = blend_a * a->fUpDuration + f4; bVector3 v0, v1, v2, v3, v4, v5, v6, v7, v8, v9; bScale(&v0, a->GetUpAccel(), blend_a); - bScaleAdd(dest->GetUpAccel(), &v0, b->GetUpAccel(), blend_b); - bScale(&v1, a->GetUpAccelMin(), blend_a); - bScaleAdd(dest->GetUpAccelMin(), &v1, b->GetUpAccelMin(), blend_b); - bScale(&v2, a->GetUpAccelMax(), blend_a); - bScaleAdd(dest->GetUpAccelMax(), &v2, b->GetUpAccelMax(), blend_b); - bScale(&v3, a->GetEyeAccel(), blend_a); - bScaleAdd(dest->GetEyeAccel(), &v3, b->GetEyeAccel(), blend_b); - bScale(&v4, a->GetEyeAccelMin(), blend_a); - bScaleAdd(dest->GetEyeAccelMin(), &v4, b->GetEyeAccelMin(), blend_b); - bScale(&v5, a->GetEyeAccelMax(), blend_a); - bScaleAdd(dest->GetEyeAccelMax(), &v5, b->GetEyeAccelMax(), blend_b); - bScale(&v6, a->GetLookAccel(), blend_a); - bScaleAdd(dest->GetLookAccel(), &v6, b->GetLookAccel(), blend_b); - bScale(&v7, a->GetLookAccelMin(), blend_a); - bScaleAdd(dest->GetLookAccelMin(), &v7, b->GetLookAccelMin(), blend_b); - bScale(&v8, a->GetLookAccelMax(), blend_a); - bScaleAdd(dest->GetLookAccelMax(), &v8, b->GetLookAccelMax(), blend_b); - bScale(&v9, a->GetForwardDuration(), blend_a); + + bScaleAdd(dest->GetUpAccel(), &v0, b->GetUpAccel(), blend_b); + bScaleAdd(dest->GetUpAccelMin(), &v1, b->GetUpAccelMin(), blend_b); + bScaleAdd(dest->GetUpAccelMax(), &v2, b->GetUpAccelMax(), blend_b); + bScaleAdd(dest->GetEyeAccel(), &v3, b->GetEyeAccel(), blend_b); + bScaleAdd(dest->GetEyeAccelMin(), &v4, b->GetEyeAccelMin(), blend_b); + bScaleAdd(dest->GetEyeAccelMax(), &v5, b->GetEyeAccelMax(), blend_b); + bScaleAdd(dest->GetLookAccel(), &v6, b->GetLookAccel(), blend_b); + bScaleAdd(dest->GetLookAccelMin(), &v7, b->GetLookAccelMin(), blend_b); + bScaleAdd(dest->GetLookAccelMax(), &v8, b->GetLookAccelMax(), blend_b); bScaleAdd(dest->GetForwardDuration(), &v9, b->GetForwardDuration(), blend_b); } From 7dca885054f50fd67ba21de0a5f759dde593645a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 13:29:26 +0100 Subject: [PATCH 136/691] =?UTF-8?q?85.8%:=20improve=20IsSomethingInBetween?= =?UTF-8?q?=20(15.2%=20=E2=86=92=2083.4%)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 14 +++++++------- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 6d6cf778a..76076ea15 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -587,17 +587,17 @@ bool CameraMover::OnWCollide(const WCollisionMgr::WorldCollisionInfo &cInfo, con return true; } -bool CameraMover::IsSomethingInBetween(const UMath::Vector4 &start, const UMath::Vector4 &end) { +bool CameraMover::IsSomethingInBetween(const UMath::Vector4 &p0, const UMath::Vector4 &p1) { UMath::Vector4 seg[2]; + seg[0] = p0; + seg[1] = p1; + seg[0].y += 0.5f; + seg[1].y += 0.5f; WCollisionMgr::WorldCollisionInfo cInfo; WCollisionMgr collision_mgr(0, 3); - - seg[0] = start; - seg[1] = end; - seg[0].y += 0.1f; - seg[1].y += 0.1f; collision_mgr.CheckHitWorld(seg, cInfo, 3); - return cInfo.HitSomething(); + bool result = cInfo.HitSomething(); + return result; } bool CameraMover::IsSomethingInBetween(const bVector3 *start, const bVector3 *end) { diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index e49a6cdb2..61e662346 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -1100,7 +1100,7 @@ void ICEMover::Update(float dT) { bQuaternion q(r.x, r.y, r.z, halfAngle); UMath::Matrix4 shake_matrix; - bQuaternionToMatrix(reinterpret_cast(&shake_matrix), &q); + q.GetMatrix(*reinterpret_cast(&shake_matrix)); UMath::Vector3 t; t.x = shake_data->p[0] * f_amplitude; From 2f4a5f7711c60b88d04c2b52de7291026856b653 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 15:05:51 +0100 Subject: [PATCH 137/691] Sync prioritization workflow tooling Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/execute/SKILL.md | 9 ++ .github/skills/implement/SKILL.md | 10 ++ AGENTS.md | 19 ++- tools/_common.py | 159 +++++++++++++++++++- tools/decomp-context.py | 157 +++++++++++++++++++- tools/decomp-diff.py | 152 +++++++------------ tools/decomp-status.py | 109 +++++++++++--- tools/decomp-workflow.py | 235 +++++++++++++++++++++++++++++- 8 files changed, 719 insertions(+), 131 deletions(-) diff --git a/.github/skills/execute/SKILL.md b/.github/skills/execute/SKILL.md index c6ebe9e22..fd21f4f8a 100644 --- a/.github/skills/execute/SKILL.md +++ b/.github/skills/execute/SKILL.md @@ -55,9 +55,18 @@ Determine the file path (e.g. `src/Speed/Indep/SourceLists/zWorld2`). The game u Preferred shortcut: ```sh +python tools/decomp-workflow.py next --unit main/Path/To/TU --limit 10 python tools/decomp-workflow.py unit -u main/Path/To/TU --limit 20 ``` +Use `next` first when you want the wrapper to rank the most useful targets instead of +following raw objdiff order. `--strategy balanced` is the default and is usually the best +starting point. Use `--strategy impact` when you only care about the biggest unmatched-byte +wins, or `--strategy quick-wins` when you want already-implemented functions in mature units. + +If the shared unit object is missing, the wrapper now rebuilds it automatically before +running `unit`. + If you need the raw tools instead of the wrapper, run `decomp-status.py` and `decomp-diff.py` directly against the shared build output. diff --git a/.github/skills/implement/SKILL.md b/.github/skills/implement/SKILL.md index ce3c7dcc4..416a47d43 100644 --- a/.github/skills/implement/SKILL.md +++ b/.github/skills/implement/SKILL.md @@ -11,6 +11,13 @@ Your goal is to decompile a specific function: writing C++ source that compiles Collect data from **all** of these sources in parallel where possible. +If the function was not already chosen for you, pick it with the ranking wrapper first: + +```sh +python tools/decomp-workflow.py next --unit main/Path/To/TU --limit 10 +python tools/decomp-workflow.py next --category game --strategy quick-wins --limit 10 +``` + ### 1a. decomp-context.py Preferred shortcut: @@ -21,6 +28,9 @@ python tools/decomp-workflow.py function -u main/Path/To/TU -f FunctionName --br python tools/decomp-workflow.py diff -u main/Path/To/TU -d FunctionName ``` +If the shared unit object is missing, the wrapper now rebuilds it automatically before +running `function` / `diff`. + If you only need one Ghidra view, add `--ghidra-version gc` or `--ghidra-version ps2` to keep the context run faster and shorter. diff --git a/AGENTS.md b/AGENTS.md index 540b15945..eb35a8664 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -137,6 +137,8 @@ Prefer this wrapper for routine agent-driven flows instead of manually chaining python tools/decomp-workflow.py health python tools/decomp-workflow.py health --smoke-build main/Speed/Indep/SourceLists/zAnim python tools/decomp-workflow.py health --smoke-dtk main/Speed/Indep/SourceLists/zAnim +python tools/decomp-workflow.py next --category game --limit 10 +python tools/decomp-workflow.py next --unit main/Speed/Indep/SourceLists/zAnim --strategy quick-wins --limit 5 python tools/decomp-workflow.py build -u main/Speed/Indep/SourceLists/zAnim python tools/decomp-workflow.py diff -u main/Speed/Indep/SourceLists/zAnim -d FindIOWin python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zAnim -f FindIOWin @@ -148,6 +150,18 @@ python tools/decomp-workflow.py unit -u main/Speed/Indep/SourceLists/zAnim --sea The wrapper keeps the existing tools as the source of truth. It is intended to reduce repeated command chaining and to standardize routine worktree preflight checks for agents. +`function`, `unit`, and `diff` now also auto-build the unit's shared `.o` once when that +output is missing, so wrapper-first inspection works more often on half-prepared worktrees. + +When you do not already have a specific target in mind, start with `next` or `unit` +instead of picking functions in raw objdiff order. `next` is the fastest way to answer +"what should I work on now?": + +- `--strategy balanced` favors high-impact functions while de-prioritizing obvious + init/setup sinkholes and preferring targets with usable source context. +- `--strategy impact` is the blunt "largest unmatched byte loss first" view. +- `--strategy quick-wins` favors mature units and existing implementations where agents + are more likely to land progress quickly. `function` is the preferred context-gathering entrypoint: it bundles source excerpt, objdiff status/diff, compact GC DWARF function lookup, and Ghidra output in one run. @@ -167,8 +181,9 @@ repeated manual steps for future agents. On a newly updated or unusual worktree, run `python tools/decomp-workflow.py health` first. If it reports missing generated files such as `objdiff.json` or `build.ninja`, run `python configure.py` in that worktree before using the decomp wrappers. `health` also -checks the debug-symbol side of the setup now: GC/PS2 `symbols.txt`, GC DWARF lookup, -PS2 type lookup, and the GC debug line mapping. +checks the debug-symbol side of the setup now, plus the wrapper binaries themselves: +`objdiff-cli`, `dtk`, GC/PS2 `symbols.txt`, GC DWARF lookup, PS2 type lookup, and the +GC debug line mapping. ### find-symbol.py — Check for existing definitions before declaring new types diff --git a/tools/_common.py b/tools/_common.py index 976fcd649..22b59667a 100644 --- a/tools/_common.py +++ b/tools/_common.py @@ -7,7 +7,7 @@ import subprocess import sys import tempfile -from typing import Any, Dict, Optional, Sequence +from typing import Any, Dict, List, Optional, Sequence SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) @@ -112,6 +112,144 @@ def apply_base_obj_override( return found +def classify_objdiff_symbol(sym: Dict[str, Any]) -> str: + """Classify an objdiff symbol as 'function', 'object', or 'section'.""" + kind = sym.get("kind", "") + if kind == "SYMBOL_FUNCTION": + return "function" + if kind == "SYMBOL_OBJECT": + return "object" + if kind == "SYMBOL_SECTION": + return "section" + if "instructions" in sym: + return "function" + if "data_diff" in sym: + return "object" + return "unknown" + + +def objdiff_symbol_section(sym: Dict[str, Any], sections: List[Dict[str, Any]]) -> str: + """Determine which section a symbol belongs to.""" + name = sym.get("name", "") + if name.startswith("[."): + return name[1:].split("-")[0].rstrip("]") + if classify_objdiff_symbol(sym) == "function": + return ".text" + for sec in sections: + kind = sec.get("kind", "") + if kind in ("SECTION_DATA", "SECTION_BSS"): + return sec["name"] + return ".data" + + +def estimate_unmatched_bytes( + size: int, match_percent: Optional[float], status: str +) -> int: + """Estimate remaining unmatched bytes for a symbol.""" + size = max(int(size), 0) + if size == 0: + return 0 + if status in ("missing", "extra", "no_target", "no_source"): + return size + if status in ("match", "matching", "complete"): + return 0 + if match_percent is None: + return size + + clamped = max(0.0, min(float(match_percent), 100.0)) + if clamped >= 100.0: + return 0 + + unmatched = int(round(size * (100.0 - clamped) / 100.0)) + unmatched = max(1, unmatched) + return min(size, unmatched) + + +def build_objdiff_symbol_rows(diff_data: Dict[str, Any]) -> List[Dict[str, Any]]: + """Build normalized overview rows from objdiff JSON for both left and right symbols.""" + left_syms = diff_data.get("left", {}).get("symbols", []) + right_syms = diff_data.get("right", {}).get("symbols", []) + left_sections = diff_data.get("left", {}).get("sections", []) + right_sections = diff_data.get("right", {}).get("sections", []) + + rows: List[Dict[str, Any]] = [] + + for sym in left_syms: + sym_type = classify_objdiff_symbol(sym) + if sym_type in ("section", "unknown"): + continue + + size = int(sym.get("size", "0")) + if size == 0: + continue + + name = sym.get("demangled_name", sym.get("name", "?")) + section = objdiff_symbol_section(sym, left_sections) + target_symbol = sym.get("target_symbol") + match_percent = sym.get("match_percent") + + if target_symbol is None: + status = "missing" + elif match_percent is not None and match_percent >= 100.0: + status = "match" + elif match_percent is not None: + status = "nonmatching" + else: + status = "missing" + + rows.append( + { + "status": status, + "match_percent": match_percent, + "size": size, + "unmatched_bytes_est": estimate_unmatched_bytes( + size, match_percent, status + ), + "section": section, + "type": sym_type, + "name": name, + "symbol_name": sym.get("name", "?"), + "side": "left", + "left_symbol": sym, + "right_symbol": right_syms[target_symbol] + if target_symbol is not None and target_symbol < len(right_syms) + else None, + } + ) + + for sym in right_syms: + if sym.get("target_symbol") is not None: + continue + + sym_type = classify_objdiff_symbol(sym) + if sym_type in ("section", "unknown"): + continue + + size = int(sym.get("size", "0")) + if size == 0: + continue + + name = sym.get("demangled_name", sym.get("name", "?")) + section = objdiff_symbol_section(sym, right_sections) + rows.append( + { + "status": "extra", + "match_percent": None, + "size": size, + "unmatched_bytes_est": estimate_unmatched_bytes(size, None, "extra"), + "section": section, + "type": sym_type, + "name": name, + "symbol_name": sym.get("name", "?"), + "side": "right", + "left_symbol": None, + "right_symbol": sym, + } + ) + + return rows + + def run_objdiff_json( objdiff_cli: str, unit_name: str, @@ -141,12 +279,19 @@ def run_objdiff_json( cwd = tmpdir try: - result = subprocess.run( - cmd, - cwd=cwd, - text=True, - capture_output=True, - ) + try: + result = subprocess.run( + cmd, + cwd=cwd, + text=True, + capture_output=True, + ) + except FileNotFoundError: + raise ToolError( + f"Missing objdiff-cli: {objdiff_cli}\n" + "Hint: ensure build/tools is populated in this worktree " + "(for example via the shared worktree assets setup)." + ) if result.returncode != 0: stderr = result.stderr hint_lines = [] diff --git a/tools/decomp-context.py b/tools/decomp-context.py index 637c8f35f..f648ee65b 100644 --- a/tools/decomp-context.py +++ b/tools/decomp-context.py @@ -24,7 +24,14 @@ import subprocess import sys from typing import Any, Dict, List, Optional, Tuple -from _common import ROOT_DIR, ToolError, fail, load_objdiff_config, run_objdiff_json +from _common import ( + ROOT_DIR, + ToolError, + build_objdiff_symbol_rows, + fail, + load_objdiff_config, + run_objdiff_json, +) script_dir = os.path.dirname(os.path.realpath(__file__)) root_dir = ROOT_DIR @@ -43,6 +50,9 @@ RELATED_SOURCE_LIMIT = 8 BRIEF_RELATED_SOURCE_LIMIT = 3 BRIEF_SUGGESTED_COMMAND_LIMIT = 2 +LOW_UNMATCHED_HINT_THRESHOLD = 96 +LARGER_TARGET_RATIO = 4 +LARGER_TARGET_MIN_BYTES = 256 def load_project_config() -> Dict[str, Any]: @@ -338,6 +348,42 @@ def extract_source_for_function( return header + "".join(excerpt) +def source_excerpt_is_useful(source_path: str, excerpt: str) -> bool: + lines = [line.strip() for line in excerpt.splitlines()] + content_lines = [ + line + for line in lines + if line and not line.startswith("// Lines ") + ] + if not content_lines: + return False + + include_like = sum( + 1 + for line in content_lines + if line.startswith("#include") + or line.startswith("#pragma") + or line.startswith("#if") + or line.startswith("#endif") + or line.startswith("#define") + ) + + source_list_path = source_path.replace("\\", "/") + if "SourceLists/" in source_list_path: + if include_like == len(content_lines): + return False + if include_like >= max(2, len(content_lines) - 1): + return False + + useful_tokens = ("{", "}", "if ", "for ", "while ", "::", "return ", "=") + if include_like == len(content_lines) and not any( + token in excerpt for token in useful_tokens + ): + return False + + return True + + def extract_source_around_line( source_path: str, line_number: int, context_lines: int = SOURCE_CONTEXT_LINES ) -> Optional[str]: @@ -904,6 +950,99 @@ def format_suggested_commands( return "\n".join(lines) +def unit_progress_category(unit: Dict[str, Any]) -> Optional[str]: + categories = unit.get("metadata", {}).get("progress_categories", []) + if not categories: + return None + if len(categories) > 1: + return str(categories[1]) + return str(categories[0]) + + +def format_priority_guidance( + unit_name: str, + unit: Dict[str, Any], + diff_data: Optional[Dict[str, Any]], + current_symbol_name: Optional[str], + brief: bool = False, +) -> Optional[str]: + if diff_data is None or current_symbol_name is None: + return None + + function_rows = [ + row + for row in build_objdiff_symbol_rows(diff_data) + if row["side"] == "left" + and row["type"] == "function" + and row["status"] in ("missing", "nonmatching") + and row["unmatched_bytes_est"] > 0 + ] + if not function_rows: + return None + + function_rows.sort( + key=lambda row: (-row["unmatched_bytes_est"], -row["size"], row["name"].lower()) + ) + + current_row = None + for row in function_rows: + if row["symbol_name"] == current_symbol_name: + current_row = row + break + if current_row is None: + return None + + current_unmatched = int(current_row["unmatched_bytes_est"]) + if current_unmatched > LOW_UNMATCHED_HINT_THRESHOLD: + return None + + unit_top = function_rows[0] + larger_unit_target = None + for row in function_rows: + if row["symbol_name"] == current_symbol_name: + continue + if ( + int(row["unmatched_bytes_est"]) >= LARGER_TARGET_MIN_BYTES + and int(row["unmatched_bytes_est"]) >= current_unmatched * LARGER_TARGET_RATIO + ): + larger_unit_target = row + break + + lines: List[str] = [] + lines.append( + f"- Current function is already low-byte cleanup territory (~{current_unmatched}B remaining)." + ) + + if larger_unit_target is not None: + lines.append( + f"- This unit still has a much larger target: " + f"{larger_unit_target['name']} (~{larger_unit_target['unmatched_bytes_est']}B remaining)." + ) + lines.append( + f"- Try: python tools/decomp-workflow.py function -u {unit_name} " + f"-f '{larger_unit_target['name']}'" + ) + else: + lines.append( + f"- This unit's largest remaining function is only ~{unit_top['unmatched_bytes_est']}B " + f"({unit_top['name']})." + ) + category = unit_progress_category(unit) + next_cmd = "python tools/decomp-workflow.py next --strategy balanced --limit 10" + if category: + next_cmd = ( + "python tools/decomp-workflow.py next " + f"--category {category} --strategy balanced --limit 10" + ) + lines.append(f"- For larger gains elsewhere, rerun: {next_cmd}") + + if brief: + if larger_unit_target is not None: + return "\n".join([lines[0], lines[2]]) + return "\n".join([lines[0], lines[2]]) + return "\n".join(lines) + + def main(): parser = argparse.ArgumentParser( description="Gather context for decomp function matching" @@ -992,7 +1131,11 @@ def main(): if not args.no_source: if source_path: excerpt = extract_source_for_function(source_path, right_sym) - if excerpt is not None and excerpt.strip(): + if ( + excerpt is not None + and excerpt.strip() + and source_excerpt_is_useful(source_path, excerpt) + ): label = "Source" if right_sym and right_sym.get("instructions"): # Check if we actually got line info @@ -1077,6 +1220,16 @@ def main(): ), ) + priority_guidance = format_priority_guidance( + args.unit, + unit, + diff_data, + mangled, + brief=args.brief, + ) + if priority_guidance: + print_section("Higher-impact targets right now", priority_guidance) + if not source_was_useful and args.no_source: print_section( "Related Source Files", diff --git a/tools/decomp-diff.py b/tools/decomp-diff.py index 0f3dba9e8..ab7d38e05 100644 --- a/tools/decomp-diff.py +++ b/tools/decomp-diff.py @@ -14,12 +14,16 @@ """ import argparse -import json import os -import subprocess import sys from typing import Any, Dict, List, Optional, Tuple -from _common import ROOT_DIR, ToolError, fail, run_objdiff_json +from _common import ( + ROOT_DIR, + ToolError, + build_objdiff_symbol_rows, + fail, + run_objdiff_json, +) root_dir = ROOT_DIR OBJDIFF_CLI = os.path.join(root_dir, "build", "tools", "objdiff-cli") @@ -34,41 +38,6 @@ def run_objdiff(unit: str, base_obj: Optional[str] = None) -> Dict[str, Any]: root_dir=root_dir, ) - -def classify_symbol(sym: Dict[str, Any]) -> str: - """Classify a symbol as 'function', 'object', or 'section'.""" - kind = sym.get("kind", "") - if kind == "SYMBOL_FUNCTION": - return "function" - if kind == "SYMBOL_OBJECT": - return "object" - if kind == "SYMBOL_SECTION": - return "section" - # Fallback for external/relocation-only symbols (empty kind) - if "instructions" in sym: - return "function" - if "data_diff" in sym: - return "object" - return "unknown" - - -def symbol_section(sym: Dict[str, Any], sections: List[Dict[str, Any]]) -> str: - """Determine which section a symbol belongs to.""" - # For named section data symbols like [.rodata-0] - name = sym.get("name", "") - if name.startswith("[."): - return name[1:].split("-")[0].rstrip("]") - # Use content type as best indicator - if classify_symbol(sym) == "function": - return ".text" - # Check sections for data - for sec in sections: - kind = sec.get("kind", "") - if kind in ("SECTION_DATA", "SECTION_BSS"): - return sec["name"] - return ".data" - - def fuzzy_match(pattern: str, name: str) -> bool: """Case-insensitive substring match.""" return pattern.lower() in name.lower() @@ -94,72 +63,43 @@ def describe_pair_status( def build_overview(data: Dict[str, Any], args) -> None: """Print overview of all symbols in a unit.""" - left_syms = data.get("left", {}).get("symbols", []) - right_syms = data.get("right", {}).get("symbols", []) - left_sections = data.get("left", {}).get("sections", []) - right_sections = data.get("right", {}).get("sections", []) - - rows = [] - - # Process left (original/target) symbols - for i, sym in enumerate(left_syms): - sym_type = classify_symbol(sym) - # Skip section symbols and external references - if sym_type in ("section", "unknown"): - continue - # Skip symbols without size - size = int(sym.get("size", "0")) - if size == 0: - continue - - name = sym.get("demangled_name", sym.get("name", "?")) - section = symbol_section(sym, left_sections) - ts = sym.get("target_symbol") - mp = sym.get("match_percent") - - if ts is None: - status = "missing" - match_str = "-" - elif mp is not None and mp >= 100.0: - status = "match" - match_str = f"{mp:.1f}%" - elif mp is not None: - status = "nonmatching" - match_str = f"{mp:.1f}%" - else: - status = "missing" - match_str = "-" - - rows.append((status, match_str, size, section, sym_type, name, "left")) - - # Process right (decomp/base) symbols that aren't targeted (extra) - for i, sym in enumerate(right_syms): - if sym.get("target_symbol") is not None: - continue # Already covered via left side - sym_type = classify_symbol(sym) - if sym_type in ("section", "unknown"): - continue - size = int(sym.get("size", "0")) - if size == 0: - continue - name = sym.get("demangled_name", sym.get("name", "?")) - section = symbol_section(sym, right_sections) - rows.append(("extra", "-", size, section, sym_type, name, "right")) + rows = build_objdiff_symbol_rows(data) # Apply filters if args.type: types = set(t.strip() for t in args.type.split(",")) - rows = [r for r in rows if r[4] in types] + rows = [r for r in rows if r["type"] in types] if args.status: - statuses = set(s.strip() for s in args.status.split(",")) - rows = [r for r in rows if r[0] in statuses] + status_aliases = {"matching": "match", "matched": "match"} + statuses = set( + status_aliases.get(s.strip(), s.strip()) for s in args.status.split(",") + ) + rows = [r for r in rows if r["status"] in statuses] if args.section: - rows = [r for r in rows if r[3] == args.section] + rows = [r for r in rows if r["section"] == args.section] if args.search: - rows = [r for r in rows if fuzzy_match(args.search, r[5])] + rows = [r for r in rows if fuzzy_match(args.search, r["name"])] + + if args.sort == "unmatched": + rows.sort( + key=lambda r: (-r["unmatched_bytes_est"], -r["size"], r["name"].lower()) + ) + elif args.sort == "size": + rows.sort(key=lambda r: (-r["size"], r["name"].lower())) + elif args.sort == "match": + rows.sort( + key=lambda r: ( + r["match_percent"] is None, + r["match_percent"] if r["match_percent"] is not None else 101.0, + -r["size"], + r["name"].lower(), + ) + ) + elif args.sort == "name": + rows.sort(key=lambda r: r["name"].lower()) if args.limit is not None: rows = rows[: args.limit] @@ -169,10 +109,20 @@ def build_overview(data: Dict[str, Any], args) -> None: return # Print header - print(f"{'STATUS':<10} {'MATCH':>7} {'SIZE':>6} {'SECTION':<10} {'NAME'}") - print("-" * 80) - for status, match_str, size, section, sym_type, name, side in rows: - print(f"{status:<10} {match_str:>7} {size:>5}B {section:<10} {name}") + print( + f"{'STATUS':<10} {'MATCH':>7} {'UNMATCH':>8} {'SIZE':>6} {'SECTION':<10} {'NAME'}" + ) + print("-" * 96) + for row in rows: + match_str = ( + f"{row['match_percent']:.1f}%" + if row["match_percent"] is not None + else "-" + ) + print( + f"{row['status']:<10} {match_str:>7} {row['unmatched_bytes_est']:>7}B " + f"{row['size']:>5}B {row['section']:<10} {row['name']}" + ) def render_instruction( @@ -458,6 +408,12 @@ def main(): type=int, help="Limit overview output to the first N matching rows", ) + parser.add_argument( + "--sort", + choices=["objdiff", "unmatched", "size", "match", "name"], + default="objdiff", + help="Sort overview rows (default: objdiff order)", + ) # Diff options parser.add_argument( diff --git a/tools/decomp-status.py b/tools/decomp-status.py index b7997dc8a..8dcf5d6c7 100644 --- a/tools/decomp-status.py +++ b/tools/decomp-status.py @@ -18,7 +18,14 @@ import os import sys from typing import Any, Dict, List, Optional, Tuple -from _common import ROOT_DIR, ToolError, fail, load_objdiff_config, run_objdiff_json +from _common import ( + ROOT_DIR, + ToolError, + build_objdiff_symbol_rows, + fail, + load_objdiff_config, + run_objdiff_json, +) root_dir = ROOT_DIR @@ -33,13 +40,7 @@ def load_project_config() -> Dict[str, Any]: def run_objdiff(unit_name: str) -> Tuple[Optional[Dict[str, Any]], Optional[str]]: """Run objdiff-cli diff for a unit and return parsed JSON.""" try: - return run_objdiff_json( - OBJDIFF_CLI, unit_name, root_dir=root_dir, - extra_args=[ - "-c", "functionRelocDiffs=none", - "-c", "ppc.calculatePoolRelocations=false", - ], - ), None + return run_objdiff_json(OBJDIFF_CLI, unit_name, root_dir=root_dir), None except ToolError as e: return None, str(e) @@ -47,9 +48,17 @@ def run_objdiff(unit_name: str) -> Tuple[Optional[Dict[str, Any]], Optional[str] def analyze_unit(diff_data: Dict[str, Any]) -> Dict[str, Any]: """Analyze a unit's diff data and return summary statistics.""" left = diff_data.get("left", {}) - right = diff_data.get("right", {}) - left_syms = left.get("symbols", []) left_sections = left.get("sections", []) + symbol_rows = build_objdiff_symbol_rows(diff_data) + function_rows = [r for r in symbol_rows if r["type"] == "function" and r["side"] == "left"] + unmatched_function_rows = [ + r + for r in function_rows + if r["status"] in ("missing", "nonmatching") and r["unmatched_bytes_est"] > 0 + ] + unmatched_function_rows.sort( + key=lambda r: (-r["unmatched_bytes_est"], -r["size"], r["name"].lower()) + ) # Section-level stats section_stats = {} @@ -71,17 +80,17 @@ def analyze_unit(diff_data: Dict[str, Any]) -> Dict[str, Any]: matching_funcs = 0 total_code_size = 0 matching_code_size = 0 + remaining_code_size_est = 0 - for sym in left_syms: - if "instructions" not in sym: - continue - size = int(sym.get("size", "0")) + for row in function_rows: + size = row["size"] total_funcs += 1 total_code_size += size - mp = sym.get("match_percent") + mp = row["match_percent"] if mp is not None and mp >= 100.0: matching_funcs += 1 matching_code_size += size + remaining_code_size_est += row["unmatched_bytes_est"] text_section = section_stats.get(".text", {}) text_match = text_section.get("match_percent") @@ -92,9 +101,20 @@ def analyze_unit(diff_data: Dict[str, Any]) -> Dict[str, Any]: "matching_functions": matching_funcs, "total_code_size": total_code_size, "matching_code_size": matching_code_size, + "remaining_code_size_est": remaining_code_size_est, "text_match_percent": text_match, "text_size": text_size, "sections": section_stats, + "top_unmatched_functions": [ + { + "name": row["name"], + "status": row["status"], + "size": row["size"], + "match_percent": row["match_percent"], + "unmatched_bytes_est": row["unmatched_bytes_est"], + } + for row in unmatched_function_rows[:10] + ], } @@ -111,6 +131,12 @@ def main(): dest="json_output", help="Output as JSON", ) + parser.add_argument( + "--top-unmatched", + type=int, + metavar="N", + help="Show the top N unmatched functions by estimated unmatched bytes", + ) args = parser.parse_args() config = load_project_config() @@ -186,7 +212,9 @@ def main(): grand_matching_funcs = 0 grand_total_size = 0 grand_matching_size = 0 + grand_remaining_size_est = 0 cat_summaries = {} + top_unmatched_candidates = [] for cat, entries in sorted(results.items()): print(f"\n=== {cat} ===") @@ -212,13 +240,26 @@ def main(): mf = entry.get("matching_functions", 0) tm = entry.get("text_match_percent") tm_str = f"{tm:.1f}%" if tm is not None else "?" + remain = entry.get("remaining_code_size_est", 0) print( - f" {display_name:<50s} .text {tm_str:>6s} ({mf}/{tf} functions)" + f" {display_name:<50s} .text {tm_str:>6s} ~{remain:>6}B rem ({mf}/{tf} functions)" ) cat_funcs += tf cat_matching += mf cat_size += entry.get("total_code_size", 0) cat_matching_size += entry.get("matching_code_size", 0) + for candidate in entry.get("top_unmatched_functions", []): + top_unmatched_candidates.append( + { + "unit": name, + "display_unit": display_name, + "name": candidate["name"], + "status": candidate["status"], + "size": candidate["size"], + "match_percent": candidate["match_percent"], + "unmatched_bytes_est": candidate["unmatched_bytes_est"], + } + ) elif status == "no_source": if args.unit: print(f" {display_name:<50s} no source file") @@ -241,11 +282,17 @@ def main(): "matching": cat_matching, "complete_units": complete_count, "total_units": len(entries), + "remaining_code_size_est": sum( + e.get("remaining_code_size_est", 0) + for e in entries + if e.get("status") == "incomplete" + ), } grand_total_funcs += cat_funcs grand_matching_funcs += cat_matching grand_total_size += cat_size grand_matching_size += cat_matching_size + grand_remaining_size_est += cat_summaries[cat]["remaining_code_size_est"] if not args.unit: print(f"\n=== Summary ===") @@ -257,14 +304,40 @@ def main(): pct = f"{matching/total*100:.1f}%" if total > 0 else "N/A" print( f" {cat:<15s} {pct:>6s} ({matching}/{total} functions) " - f"[{complete}/{total_units} units complete]" + f"[{complete}/{total_units} units complete, ~{s['remaining_code_size_est']}B rem]" ) if grand_total_funcs > 0: grand_pct = grand_matching_funcs / grand_total_funcs * 100 print( - f"\n Total: {grand_pct:.1f}% ({grand_matching_funcs}/{grand_total_funcs} functions)" + f"\n Total: {grand_pct:.1f}% ({grand_matching_funcs}/{grand_total_funcs} functions, ~{grand_remaining_size_est}B rem)" ) + if args.top_unmatched: + top_unmatched_candidates.sort( + key=lambda r: (-r["unmatched_bytes_est"], -r["size"], r["name"].lower()) + ) + if args.top_unmatched > 0: + top_unmatched_candidates = top_unmatched_candidates[: args.top_unmatched] + + print("\n=== Top Unmatched Functions ===") + if not top_unmatched_candidates: + print("No unmatched functions found for the given filters.") + else: + print( + f"{'UNMATCH':>8} {'MATCH':>7} {'SIZE':>6} {'UNIT':<34} NAME" + ) + print("-" * 110) + for candidate in top_unmatched_candidates: + match_str = ( + f"{candidate['match_percent']:.1f}%" + if candidate["match_percent"] is not None + else "-" + ) + print( + f"{candidate['unmatched_bytes_est']:>7}B {match_str:>7} " + f"{candidate['size']:>5}B {candidate['display_unit']:<34} {candidate['name']}" + ) + if __name__ == "__main__": main() diff --git a/tools/decomp-workflow.py b/tools/decomp-workflow.py index 31118068d..be8c151b3 100644 --- a/tools/decomp-workflow.py +++ b/tools/decomp-workflow.py @@ -18,12 +18,14 @@ """ import argparse +import json import re import os +import shlex import subprocess import sys import tempfile -from typing import List, Optional, Sequence +from typing import Any, Dict, List, Optional, Sequence from _common import ( BUILD_NINJA, OBJDIFF_JSON, @@ -40,6 +42,7 @@ TOOLS_DIR = os.path.join(ROOT_DIR, "tools") PS2_TYPES = os.path.join(ROOT_DIR, "symbols", "PS2", "PS2_types.nothpp") DTK = os.path.join(ROOT_DIR, "build", "tools", "dtk") +OBJDIFF_CLI = os.path.join(ROOT_DIR, "build", "tools", "objdiff-cli") GC_SYMBOLS = os.path.join(ROOT_DIR, "config", "GOWE69", "symbols.txt") PS2_SYMBOLS = os.path.join(ROOT_DIR, "config", "SLES-53558-A124", "symbols.txt") GC_DWARF = os.path.join(ROOT_DIR, "symbols", "Dwarf") @@ -140,13 +143,42 @@ def get_unit_build_output(unit_name: str) -> str: return make_abs(target) or target -def build_shared_unit(unit_name: str) -> str: +def build_shared_unit(unit_name: str, quiet: bool = False) -> str: ensure_decomp_prereqs() target = get_unit_build_target(unit_name) - run_stream(["ninja", target]) + cmd = ["ninja", target] + if quiet: + result = subprocess.run( + cmd, + cwd=ROOT_DIR, + text=True, + capture_output=True, + ) + if result.returncode != 0: + raise WorkflowError( + format_failure(cmd, result.returncode, result.stdout, result.stderr) + ) + else: + run_stream(cmd) return get_unit_build_output(unit_name) +def ensure_shared_unit_output(unit_name: str) -> str: + output_path = get_unit_build_output(unit_name) + if os.path.exists(output_path): + return output_path + + print(f"Shared build missing for {unit_name}; rebuilding...", flush=True) + try: + output_path = build_shared_unit(unit_name, quiet=True) + except WorkflowError as e: + raise WorkflowError( + f"Auto-build failed while preparing shared output for {unit_name}\n{e}" + ) + print(f"Shared build ready: {output_path}", flush=True) + return output_path + + def maybe_remove(path: Optional[str]) -> None: if not path: return @@ -242,6 +274,16 @@ def report(ok: bool, label: str, detail: str) -> None: ) print_section("Tool Checks") + report( + os.path.exists(OBJDIFF_CLI), + "objdiff-cli", + OBJDIFF_CLI if os.path.exists(OBJDIFF_CLI) else "missing (seed build/tools in this worktree)", + ) + report( + os.path.exists(DTK), + "dtk", + DTK if os.path.exists(DTK) else "missing (seed build/tools in this worktree)", + ) try: run_capture(python_tool("decomp-context.py", "--ghidra-check")) report(True, "ghidra", "GC + PS2 programs available") @@ -317,9 +359,85 @@ def report(ok: bool, label: str, detail: str) -> None: raise WorkflowError(f"Health check failed with {failures} issue(s)") +def build_next_candidates( + status_data: Dict[str, Any], strategy: str +) -> List[Dict[str, Any]]: + candidates: List[Dict[str, Any]] = [] + + for category, entries in status_data.items(): + for entry in entries: + unit_name = entry.get("name", "") + display_unit = unit_name.replace("main/", "") + has_source = bool(entry.get("has_source")) + + for func in entry.get("top_unmatched_functions", []): + function_name = func.get("name", "?") + unmatched = int(func.get("unmatched_bytes_est", 0)) + match_percent = func.get("match_percent") + status = func.get("status", "?") + size = int(func.get("size", 0)) + is_static_init = function_name.startswith( + "__static_initialization_and_destruction_0" + ) + is_initializer = "InitializeTables" in function_name or is_static_init + reason = "largest remaining byte win" + score = float(unmatched) + + if strategy == "balanced": + if status == "nonmatching": + score *= 1.15 + reason = "large remaining win with an existing implementation" + if has_source: + score *= 1.1 + reason += " and source available" + if is_initializer: + score *= 0.3 + reason = ( + "large remaining win, but likely lower-priority init/setup work" + ) + elif strategy == "quick-wins": + score = min(float(unmatched), 768.0) + if status == "nonmatching": + score *= 1.3 + reason = "existing implementation makes this a likely quick win" + if match_percent is not None and match_percent >= 90.0: + score *= 1.2 + reason = "high match % makes this a likely quick cleanup" + if has_source: + score *= 1.05 + if "source" not in reason: + reason += " with source available" + if is_initializer: + score *= 0.1 + reason = ( + "deprioritized init/setup work; likely not the fastest useful win" + ) + + candidates.append( + { + "category": category, + "unit": unit_name, + "display_unit": display_unit, + "function": function_name, + "status": status, + "size": size, + "match_percent": match_percent, + "unmatched_bytes_est": unmatched, + "score": score, + "reason": reason, + } + ) + + candidates.sort( + key=lambda c: (-c["score"], -c["unmatched_bytes_est"], -c["size"], c["function"].lower()) + ) + return candidates + + def command_function(args: argparse.Namespace) -> None: ensure_decomp_prereqs() print_section(f"Function Workflow: {args.function}") + ensure_shared_unit_output(args.unit) cmd = python_tool("decomp-context.py", "-u", args.unit, "-f", args.function) if args.no_source: cmd.append("--no-source") @@ -339,13 +457,24 @@ def command_function(args: argparse.Namespace) -> None: def command_unit(args: argparse.Namespace) -> None: ensure_decomp_prereqs() print_section(f"Unit Status: {args.unit}") - run_stream(python_tool("decomp-status.py", "--unit", args.unit)) + ensure_shared_unit_output(args.unit) + top_unmatched_limit = args.limit if args.limit is not None else 5 + run_stream( + python_tool( + "decomp-status.py", + "--unit", + args.unit, + "--top-unmatched", + str(top_unmatched_limit), + ) + ) common_args: List[str] = ["-u", args.unit, "-t", "function"] if args.search: common_args.extend(["--search", args.search]) if args.limit is not None: common_args.extend(["--limit", str(args.limit)]) + common_args.extend(["--sort", "unmatched"]) print_section("Missing Functions") run_stream(python_tool("decomp-diff.py", *common_args, "-s", "missing")) @@ -354,6 +483,78 @@ def command_unit(args: argparse.Namespace) -> None: run_stream(python_tool("decomp-diff.py", *common_args, "-s", "nonmatching")) +def command_next(args: argparse.Namespace) -> None: + ensure_decomp_prereqs() + if args.unit: + ensure_shared_unit_output(args.unit) + + cmd = python_tool("decomp-status.py", "--json") + if args.category: + cmd.extend(["--category", args.category]) + if args.unit: + cmd.extend(["--unit", args.unit]) + + result = run_capture(cmd) + status_data = json.loads(result.stdout) + candidates = build_next_candidates(status_data, args.strategy) + if args.limit is not None: + candidates = candidates[: args.limit] + + if not candidates: + if args.unit: + for entries in status_data.values(): + for entry in entries: + if entry.get("name") != args.unit: + continue + status = entry.get("status") + if status == "error": + raise WorkflowError( + f"Unable to rank {args.unit}: {entry.get('error_message', 'objdiff failed')}" + ) + if status == "complete": + raise WorkflowError(f"{args.unit} is already complete.") + if status == "no_source": + raise WorkflowError( + f"{args.unit} has no decomp source configured in objdiff.json." + ) + if status == "no_target": + raise WorkflowError( + f"{args.unit} has no target object configured in objdiff.json." + ) + raise WorkflowError("No unmatched function candidates found for the given filters.") + + if args.command_only: + for candidate in candidates: + print( + "python tools/decomp-workflow.py function " + f"-u {shlex.quote(candidate['unit'])} " + f"-f {shlex.quote(candidate['function'])}" + ) + return + + print_section("Next Targets") + print( + f"{'UNMATCH':>8} {'MATCH':>7} {'SIZE':>6} {'UNIT':<34} {'FUNCTION'}" + ) + print("-" * 120) + for candidate in candidates: + match_str = ( + f"{candidate['match_percent']:.1f}%" + if candidate["match_percent"] is not None + else "-" + ) + print( + f"{candidate['unmatched_bytes_est']:>7}B {match_str:>7} {candidate['size']:>5}B " + f"{candidate['display_unit']:<34} {candidate['function']}" + ) + print(f" why: {candidate['reason']}") + print( + " next: python tools/decomp-workflow.py function " + f"-u {shlex.quote(candidate['unit'])} " + f"-f {shlex.quote(candidate['function'])}" + ) + + def command_build(args: argparse.Namespace) -> None: print(build_shared_unit(args.unit), flush=True) @@ -364,6 +565,7 @@ def command_diff(args: argparse.Namespace) -> None: if args.diff: title += f" / {args.diff}" print_section(title) + ensure_shared_unit_output(args.unit) cmd: List[str] = python_tool("decomp-diff.py", "-u", args.unit) if args.diff: @@ -474,6 +676,31 @@ def build_parser() -> argparse.ArgumentParser: ) unit.set_defaults(func=command_unit) + next_cmd = subparsers.add_parser( + "next", + help="Recommend the highest-impact next functions to work on", + ) + next_cmd.add_argument("--category", help="Filter by progress category") + next_cmd.add_argument("--unit", help="Restrict recommendations to one unit") + next_cmd.add_argument( + "--limit", + type=int, + default=10, + help="Limit the number of suggested targets (default: 10)", + ) + next_cmd.add_argument( + "--strategy", + choices=["impact", "balanced", "quick-wins"], + default="balanced", + help="Ranking strategy for recommendations (default: balanced)", + ) + next_cmd.add_argument( + "--command-only", + action="store_true", + help="Print only follow-up commands, one per line", + ) + next_cmd.set_defaults(func=command_next) + build = subparsers.add_parser( "build", help="Build a unit's shared output with its configured ninja target", From 48e0760cae2b709b6795dcdb632885eb29f803ad Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 15:26:26 +0100 Subject: [PATCH 138/691] 85.4%: match ICE::Cubic1D::GetdVal Multiply coefficient by 3.0f first, then by t, instead of multiplying t by 3.0f first. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index 61e662346..8c334e033 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -242,7 +242,7 @@ float Cubic1D::GetVal(float t) const { } float Cubic1D::GetdVal(float t) const { - return (Coeff[0] * (t * 3.0f) + (Coeff[1] + Coeff[1])) * t + Coeff[2]; + return (Coeff[0] * 3.0f * t + (Coeff[1] + Coeff[1])) * t + Coeff[2]; } float Cubic1D::GetddVal(float t) const { From ae952686f065f9a7d67da57126bb9a4e83a5203e Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 15:30:42 +0100 Subject: [PATCH 139/691] Sync workflow wrapper docs Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/execute/SKILL.md | 2 +- .github/skills/implement/SKILL.md | 2 +- .github/skills/refiner/SKILL.md | 11 ++++++++++- AGENTS.md | 5 +++-- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/.github/skills/execute/SKILL.md b/.github/skills/execute/SKILL.md index fd21f4f8a..7b9379f4f 100644 --- a/.github/skills/execute/SKILL.md +++ b/.github/skills/execute/SKILL.md @@ -65,7 +65,7 @@ starting point. Use `--strategy impact` when you only care about the biggest unm wins, or `--strategy quick-wins` when you want already-implemented functions in mature units. If the shared unit object is missing, the wrapper now rebuilds it automatically before -running `unit`. +running `next --unit` / `unit`. If you need the raw tools instead of the wrapper, run `decomp-status.py` and `decomp-diff.py` directly against the shared build output. diff --git a/.github/skills/implement/SKILL.md b/.github/skills/implement/SKILL.md index 416a47d43..a52b286e1 100644 --- a/.github/skills/implement/SKILL.md +++ b/.github/skills/implement/SKILL.md @@ -29,7 +29,7 @@ python tools/decomp-workflow.py diff -u main/Path/To/TU -d FunctionName ``` If the shared unit object is missing, the wrapper now rebuilds it automatically before -running `function` / `diff`. +running `next --unit` / `function` / `diff`. If you only need one Ghidra view, add `--ghidra-version gc` or `--ghidra-version ps2` to keep the context run faster and shorter. diff --git a/.github/skills/refiner/SKILL.md b/.github/skills/refiner/SKILL.md index 96ab8d21e..5cccdb1d5 100644 --- a/.github/skills/refiner/SKILL.md +++ b/.github/skills/refiner/SKILL.md @@ -18,7 +18,16 @@ approaches that were tried before — instead, apply systematic lateral analysis ## Phase 1: Read the full diff without collapsing -First rebuild the unit normally, then diff: +Preferred shortcut: + +```sh +python tools/decomp-workflow.py diff -u main/Path/To/TU -d FunctionName --no-collapse +``` + +If the shared unit object is missing, the wrapper now rebuilds it automatically before +running `diff`. + +If you need the raw backend form instead of the wrapper, rebuild the unit and then run: ```sh python tools/decomp-workflow.py build -u main/Path/To/TU diff --git a/AGENTS.md b/AGENTS.md index eb35a8664..209b49230 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -150,8 +150,9 @@ python tools/decomp-workflow.py unit -u main/Speed/Indep/SourceLists/zAnim --sea The wrapper keeps the existing tools as the source of truth. It is intended to reduce repeated command chaining and to standardize routine worktree preflight checks for agents. -`function`, `unit`, and `diff` now also auto-build the unit's shared `.o` once when that -output is missing, so wrapper-first inspection works more often on half-prepared worktrees. +`next --unit`, `function`, `unit`, and `diff` now also auto-build the unit's shared `.o` +once when that output is missing, so wrapper-first inspection works more often on +half-prepared worktrees. When you do not already have a specific target in mind, start with `next` or `unit` instead of picking functions in raw objdiff order. `next` is the fastest way to answer From 883c47f9e7073b03dee596620addb203251d7b32 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 15:46:37 +0100 Subject: [PATCH 140/691] 85.4%: improve CreateLookAtMatrix and fix false relocations in Loader/Unloader - CreateLookAtMatrix: replace UMath::Sub call with inline subtraction (64.9% -> 77.6%) - LoaderICECameras/UnloaderICECameras: block false _STL::find relocations (72.6% -> 74.5%) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- config/GOWE69/config.yml | 6 ++++++ src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/config/GOWE69/config.yml b/config/GOWE69/config.yml index a201a7d33..30e13cf05 100644 --- a/config/GOWE69/config.yml +++ b/config/GOWE69/config.yml @@ -58,3 +58,9 @@ block_relocations: end: .text:0x80069F54 - source: .text:0x80069F60 end: .text:0x80069F64 + +# LoaderICECameras / UnloaderICECameras - false relocation to _STL::find +- source: .text:0x8007F114 + end: .text:0x8007F11C +- source: .text:0x8007F19C + end: .text:0x8007F1A4 diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index 8c334e033..5af3530da 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -102,7 +102,9 @@ static void CreateLookAtMatrix(ICE::Matrix4 *mat, ICE::Vector3 &eye, ICE::Vector UMath::Vector3 a; UMath::Matrix4 tl; - UMath::Sub(reinterpret_cast(center), reinterpret_cast(eye), c); + c.x = center.x - eye.x; + c.y = center.y - eye.y; + c.z = center.z - eye.z; bNormalize(reinterpret_cast(&c), reinterpret_cast(&c)); vUp.x = 0.0f; From 277cc6a63d654ff72380c5ee7a30d659ab229ee8 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 16:21:34 +0100 Subject: [PATCH 141/691] =?UTF-8?q?86.1%:=20improve=20MinGapTopology=20(14?= =?UTF-8?q?.5%=20=E2=86=92=2084.0%)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Rewrote MinGapTopology with full function body from DWARF/Ghidra analysis - Changed return type from int to bool, fixed parameter name - Added bScale/bScaleAdd center computation, bDistBetween radius - Added WCollider::Refresh, eUnSwizzleWorldVector, Vector4Make, EnforceMinGapToWalls, AmIinATunnel, terrain normal + height clamping - Implemented WCollisionTri::GetNormal and WWorldPos::UNormal inlines - Added WWorldMath::GetPlaneY declaration Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 96 ++++++++++++++++++---- src/Speed/Indep/Src/Camera/CameraMover.hpp | 2 +- src/Speed/Indep/Src/World/WCollisionTri.h | 26 ++++++ src/Speed/Indep/Src/World/WWorldMath.h | 1 + src/Speed/Indep/Src/World/WWorldPos.h | 8 +- 5 files changed, 114 insertions(+), 19 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 76076ea15..061601dfb 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -21,8 +21,11 @@ Attrib::Key Attrib::Gen::camerainfo::ClassKey() { #include "Speed/Indep/Src/Physics/Common/VehicleSystem.h" #include "Speed/Indep/Src/World/CarInfo.hpp" #include "Speed/Indep/Src/World/TrackStreamer.hpp" +#include "Speed/Indep/Src/World/WWorldMath.h" #include "Speed/Indep/bWare/Inc/bFunk.hpp" +int AmIinATunnel(eView *view, int CheckOverPass); + DECLARE_CONTAINER_TYPE(CameraAIAvoidables); struct Avoidables : public _STL::list > { @@ -1031,31 +1034,92 @@ int CameraMover::MinGapCars(bMatrix4 *pMatrix, bVector3 *pLook, bVector3 *pForwa return ret; } -int CameraMover::MinGapTopology(bMatrix4 *pMatrix, bVector3 *pLook) { - bMatrix4 inv_matrix; - bVector3 eye; - bVector3 look_camera_space; +bool CameraMover::MinGapTopology(bMatrix4 *pMatrix, bVector3 *pCarPos) { + bMatrix4 mCameraToWorld; + bVector3 vCenter; + bVector4 vAdjust; + UMath::Vector3 usCamPos; + UMath::Vector3 usCarPos; + UMath::Vector4 seg[2]; + bVector3 vCarCameraSpace; + bVector2 vProjection; + + eInvertTransformationMatrix(&mCameraToWorld, pMatrix); + bVector3 *pCameraPos = reinterpret_cast(&mCameraToWorld.v3); + + bScale(&vCenter, pCameraPos, 0.5f); + bScaleAdd(&vCenter, &vCenter, pCarPos, 0.5f); - eInvertTransformationMatrix(&inv_matrix, pMatrix); - eye.x = pMatrix->v3.x; - eye.y = pMatrix->v3.y; - eye.z = pMatrix->v3.z; + vAdjust.x = 0.0f; + vAdjust.y = 0.0f; + vAdjust.z = 0.0f; + vAdjust.w = 1.0f; - if (eye.z < pLook->z + 0.5f) { - eye.z = pLook->z + 0.5f; + float fRadius = bDistBetween(pCarPos, pCameraPos); + fRadius = (fRadius + 1.0f) * 0.5f; + if (fRadius > 50.0f) { + fRadius = 50.0f; } - eMulVector(&look_camera_space, pMatrix, pLook); - if (look_camera_space.z <= 0.0f) { - return 0; + eUnSwizzleWorldVector(reinterpret_cast(vCenter), reinterpret_cast(usCamPos)); + mCollider->Refresh(usCamPos, fRadius, true); + + eUnSwizzleWorldVector(*pCarPos, reinterpret_cast(usCarPos)); + eUnSwizzleWorldVector(*pCameraPos, reinterpret_cast(usCamPos)); + + seg[0] = UMath::Vector4Make(usCamPos, 1.0f); + seg[1] = UMath::Vector4Make(usCarPos, 1.0f); + + bool bViolates = EnforceMinGapToWalls(mCollider, pCarPos, pCameraPos, &vAdjust); + + pCameraPos->x += vAdjust.x; + pCameraPos->y += vAdjust.y; + pCameraPos->z += vAdjust.z; + + int inTunnel = AmIinATunnel(&eViews[ViewID], 1); + + eUnSwizzleWorldVector(*pCameraPos, reinterpret_cast(usCamPos)); + + if (!inTunnel && usCamPos.y < pCarPos->z + 0.5f) { + usCamPos.y = pCarPos->z + 0.5f; } { - bVector2 projection(look_camera_space.x / look_camera_space.z, look_camera_space.y / look_camera_space.z); - IsoProjectionMatrix(pMatrix, &eye, pLook, &projection); + WWorldPos temp(0.5f); + temp.FindClosestFace(mCollider, usCamPos, true); + + if (temp.OnValidFace()) { + UMath::Vector3 norm; + temp.UNormal(&norm); + + if (norm.y < 0.0f) { + norm.y = -norm.y; + norm.x = -norm.x; + norm.z = -norm.z; + } + if (0.95f <= norm.y) { + norm.y = 0.95f; + } + + float height = WWorldMath::GetPlaneY(norm, UMath::Vector4To3(temp.FacePoint(0)), usCamPos); + if (pCameraPos->z < height + 1.0f) { + pCameraPos->z = height + 1.0f; + } + if (inTunnel && (height + 3.0f < pCameraPos->z)) { + pCameraPos->z = height + 3.0f; + } + } } - return 1; + eMulVector(&vCarCameraSpace, pMatrix, pCarPos); + if (vCarCameraSpace.z <= 0.0f) { + return bViolates; + } + + vProjection = bVector2(vCarCameraSpace.x / vCarCameraSpace.z, vCarCameraSpace.y / vCarCameraSpace.z); + IsoProjectionMatrix(pMatrix, pCameraPos, pCarPos, &vProjection); + + return bViolates; } void CameraMover::FovCubicInit(tCubic1D *cubic) { diff --git a/src/Speed/Indep/Src/Camera/CameraMover.hpp b/src/Speed/Indep/Src/Camera/CameraMover.hpp index 6d0911c70..a3b680196 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.hpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.hpp @@ -386,7 +386,7 @@ class CameraMover : public bTNode, public WCollisionMgr::ICollision void IsoProjectionMatrix(bMatrix4 *pMatrix, bVector3 *pEye, bVector3 *pLook, bVector2 *pProjection); float AdjustHeightAroundCar(const bVector3 *car_pos, bVector3 *pEye, bVector3 *pForward); int MinGapCars(bMatrix4 *pMatrix, bVector3 *pLook, bVector3 *pForward); - int MinGapTopology(bMatrix4 *pMatrix, bVector3 *pLook); + bool MinGapTopology(bMatrix4 *pMatrix, bVector3 *pCarPos); bool EnforceMinGapToWalls(WCollider *collider, bVector3 *pCarPos, bVector3 *pCameraPos, bVector4 *pAdjust); bVector3 *DutchAroundCar(bVector3 *pPos, bVector3 *pVelocity); void FovCubicInit(tCubic1D *cubic); diff --git a/src/Speed/Indep/Src/World/WCollisionTri.h b/src/Speed/Indep/Src/World/WCollisionTri.h index b7d43a4c1..a5f0fcebd 100644 --- a/src/Speed/Indep/Src/World/WCollisionTri.h +++ b/src/Speed/Indep/Src/World/WCollisionTri.h @@ -6,11 +6,37 @@ #endif #include "./WCollision.h" +#include "Speed/Indep/Libs/Support/Utility/UEALibs.hpp" #include "Speed/Indep/Libs/Support/Utility/UStandard.h" #include "Speed/Indep/Libs/Support/Utility/UTypes.h" +#include "Speed/Indep/Libs/Support/Utility/UVectorMath.h" struct WCollisionTri { WCollisionTri() {} + + void GetNormal(UMath::Vector3 *norm) const { + UMath::Vector3 vecX; + UMath::Vector3 vecZ; + UMath::Vector3 normal; + + vecZ.x = fPt1.x - fPt0.x; + vecZ.y = fPt1.y - fPt0.y; + vecZ.z = fPt1.z - fPt0.z; + + vecX.x = fPt0.x - fPt2.x; + vecX.y = fPt0.y - fPt2.y; + vecX.z = fPt0.z - fPt2.z; + + VU0_v3crossprod(vecZ, vecX, normal); + + if (normal.x == 0.0f && normal.y == 0.0f && normal.z == 0.0f) { + norm->x = 0.0f; + norm->y = 1.0f; + norm->z = 0.0f; + } else { + v3unit(&normal, norm); + } + } // total size: 0x30 UMath::Vector3 fPt0; // offset 0x0, size 0xC const struct SimSurface *fSurfaceRef; // offset 0xC, size 0x4 diff --git a/src/Speed/Indep/Src/World/WWorldMath.h b/src/Speed/Indep/Src/World/WWorldMath.h index aa0211bc1..91417e485 100644 --- a/src/Speed/Indep/Src/World/WWorldMath.h +++ b/src/Speed/Indep/Src/World/WWorldMath.h @@ -8,6 +8,7 @@ namespace WWorldMath { bool IntersectCircle(float x1, float y1, float x2, float y2, float cx, float cy, float r, float &u1, float &u2); +float GetPlaneY(const UMath::Vector3 &normal, const UMath::Vector3 &pointOnPlane, const UMath::Vector3 &testPoint); }; diff --git a/src/Speed/Indep/Src/World/WWorldPos.h b/src/Speed/Indep/Src/World/WWorldPos.h index 302777830..6c2543b26 100644 --- a/src/Speed/Indep/Src/World/WWorldPos.h +++ b/src/Speed/Indep/Src/World/WWorldPos.h @@ -52,11 +52,15 @@ struct WWorldPos { fYOffset = liftAmount; } - void UNormal(UMath::Vector3 *norm) const {} + void UNormal(UMath::Vector3 *norm) const { + fFace.GetNormal(norm); + } void UNormal(UMath::Vector4 *norm) const {} - // const UMath::Vector4 &FacePoint(int ptInd) const {} + const UMath::Vector4 &FacePoint(int ptInd) const { + return reinterpret_cast(&fFace)[ptInd]; + } const Attrib::Collection *GetSurface() const { return fSurface; From bb4a8289f3a8dfb800bc6d44a238985061af5d3c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 16:37:10 +0100 Subject: [PATCH 142/691] =?UTF-8?q?86.2%:=20fix=20CDActionDebugWatchCar=20?= =?UTF-8?q?ctor=20(TrackCarCameraMover=20=E2=86=92=20CubicCameraMover)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp index bd914a9cb..da72f23f3 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp @@ -83,7 +83,7 @@ CDActionDebugWatchCar::CDActionDebugWatchCar(CameraAI::Director *director) mPrev = director->GetAction()->GetName(); mAnchor = new CameraAnchor(0); - mMover = new TrackCarCameraMover(static_cast(director->GetViewID()), mAnchor, true); + mMover = new CubicCameraMover(static_cast(director->GetViewID()), mAnchor, 0, false, false, false, true); } CDActionDebugWatchCar::~CDActionDebugWatchCar() { From 19427ba380d5d3262bf02b78627b0abe8141dd07 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 16:45:46 +0100 Subject: [PATCH 143/691] 86.2%: improve ICEMover::Update branch layout (remove bNoTrack) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index 5af3530da..b61497b77 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -852,8 +852,7 @@ void ICEMover::Update(float dT) { return; } - bool bNoTrack = (p_track == 0); - if (!bNoTrack) { + if (p_track != nullptr) { int context = p_track->GetContext(); bLerpLag = (context == 3); if (p_track->GetContext() != 2) { @@ -877,10 +876,10 @@ void ICEMover::Update(float dT) { } float f_route_param; - if (bNoTrack) { - f_route_param = TheICEManager.GetParameter(); - } else { + if (p_track != nullptr) { f_route_param = p_track->GetParameter(); + } else { + f_route_param = TheICEManager.GetParameter(); } float f_range = fParameter1 - fParameter0; @@ -1050,7 +1049,7 @@ void ICEMover::Update(float dT) { GetCamera()->SetNoiseFrequency2(0.0f, 0.0f, 0.0f, 0.0f); float routeLen; - if (!bNoTrack) { + if (p_track != nullptr) { routeLen = p_track->GetLength(); } else { routeLen = TheICEManager.GetParameterLength(); @@ -1062,7 +1061,7 @@ void ICEMover::Update(float dT) { ICEShakeTrack *shake_track = TheICEManager.GetShakeTrack(pICEData->nShakeType); if (shake_track != 0) { float routeLen; - if (!bNoTrack) { + if (p_track != nullptr) { routeLen = p_track->GetLength(); } else { routeLen = TheICEManager.GetParameterLength(); @@ -1119,7 +1118,7 @@ void ICEMover::Update(float dT) { } } - if (bNoTrack || p_track->GetContext() != 2) { + if (p_track == nullptr || p_track->GetContext() != 2) { bool constrain_to_topology = false; if (pICEData != 0 && pICEData->bConstrainToWorld != 0) { constrain_to_topology = (n_state < 9); From 4849ed0d935ce9e90f5d5fa40723ce8fa3c233e3 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 16:49:03 +0100 Subject: [PATCH 144/691] =?UTF-8?q?86.6%:=20restructure=20ICEMover::SetDes?= =?UTF-8?q?ired=20block=20layout=20(27.2%=20=E2=86=92=2041.0%)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 252 ++++++++++---------- 1 file changed, 127 insertions(+), 125 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index b61497b77..b7745bf65 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -529,39 +529,6 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { TheICEManager.SetSmoothExit(true); { - UMath::Matrix4 mCarToWorld; - UMath::Matrix4 mWorldToCar; - UMath::Matrix4 mWorldToHybrid; - ICE::Cubic3D eye(0, 0.0f); - ICE::Cubic3D look(0, 0.0f); - ICE::Cubic1D dutch(0, 0.0f); - ICE::Cubic1D fov(0, 0.0f); - UMath::Matrix4 mWorldToScene; - UMath::Matrix4 *pWorldToScene = 0; - UMath::Matrix4 *eye_space; - UMath::Matrix4 *look_space; - - bCopy(reinterpret_cast(&mCarToWorld), - reinterpret_cast(pCar->GetGeometryOrientation()), - reinterpret_cast(pCar->GetGeometryPosition())); - - eInvertTransformationMatrix(reinterpret_cast(&mWorldToCar), - reinterpret_cast(&mCarToWorld)); - - eInvertTransformationMatrix(reinterpret_cast(&mWorldToHybrid), - reinterpret_cast(&mHybridToWorld)); - - PSMTX44Identity(*reinterpret_cast(&mWorldToScene)); - - if (nSpaceEye == 3 || nSpaceLook == 3) { - ICEScene *scene = ICE::FindAnimScene(); - if (scene != 0) { - bMatrix4 &sceneMat = scene->GetSceneTransformMatrix(); - pWorldToScene = &mWorldToScene; - eInvertTransformationMatrix(reinterpret_cast(pWorldToScene), &sceneMat); - } - } - ICE::Vector3 v_eye[2]; ICE::Vector3 v_look[2]; ICE::Vector3 v_eye_slope[2]; @@ -577,107 +544,142 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { TheICEManager.GetSlope(&v_eye_slope[0], &v_look_slope[0], &f_lens_slope[0], &f_dutch_slope[0], pCameraData, 0, p_track); TheICEManager.GetSlope(&v_eye_slope[1], &v_look_slope[1], &f_lens_slope[1], &f_dutch_slope[1], pCameraData, 1, p_track); - eye.SetVal(&v_eye[0]); - eye.SetdVal(&v_eye_slope[0]); - eye.SetValDesired(&v_eye[1]); - eye.SetdValDesired(&v_eye_slope[1]); - - look.SetVal(&v_look[0]); - look.SetdVal(&v_look_slope[0]); - look.SetValDesired(&v_look[1]); - look.SetdValDesired(&v_look_slope[1]); - - dutch.SetVal(pCameraData->fDutch[0]); - dutch.SetdVal(f_dutch_slope[0]); - dutch.SetValDesired(pCameraData->fDutch[1]); - dutch.SetdValDesired(f_dutch_slope[1]); - - unsigned short fov0 = ConvertLensLengthToFovAngle(pCameraData->fLens[0]); - unsigned short fov1 = ConvertLensLengthToFovAngle(pCameraData->fLens[1]); - float fov0_slope = ConvertLensDeltaToFovDelta(pCameraData->fLens[0], f_lens_slope[0]); - float fov1_slope = ConvertLensDeltaToFovDelta(pCameraData->fLens[1], f_lens_slope[1]); - - fov.SetVal(static_cast(fov0)); - fov.SetdVal(fov0_slope); - fov.SetValDesired(static_cast(fov1)); - fov.SetdValDesired(fov1_slope); - - if (hard_cut || es || ls) { - PSMTX44Identity(*reinterpret_cast(&mHybridToWorld)); - ICE::Vector3 *carPos = pCar->GetGeometryPosition(); - bCopy(reinterpret_cast(&mHybridToWorld), + { + UMath::Matrix4 mCarToWorld; + UMath::Matrix4 mWorldToCar; + UMath::Matrix4 mWorldToHybrid; + ICE::Cubic3D eye(0, 0.0f); + ICE::Cubic3D look(0, 0.0f); + ICE::Cubic1D dutch(0, 0.0f); + ICE::Cubic1D fov(0, 0.0f); + UMath::Matrix4 mWorldToScene; + UMath::Matrix4 *pWorldToScene = 0; + UMath::Matrix4 *eye_space; + UMath::Matrix4 *look_space; + + bCopy(reinterpret_cast(&mCarToWorld), reinterpret_cast(pCar->GetGeometryOrientation()), - reinterpret_cast(carPos)); - } + reinterpret_cast(pCar->GetGeometryPosition())); - switch (nSpaceEye) { - case 0: eye_space = reinterpret_cast(&mWorldToCar); break; - case 2: eye_space = &mWorldToHybrid; break; - case 3: eye_space = pWorldToScene; break; - default: eye_space = 0; break; - } - - switch (nSpaceLook) { - case 0: look_space = reinterpret_cast(&mWorldToCar); break; - case 2: look_space = &mWorldToHybrid; break; - case 3: look_space = pWorldToScene; break; - default: look_space = 0; break; - } + eInvertTransformationMatrix(reinterpret_cast(&mWorldToCar), + reinterpret_cast(&mCarToWorld)); - ICE::Vector3 *eye_vel = (nSpaceEye == 0) ? pCar->GetVelocity() : static_cast(0); - ICE::Vector3 *look_vel = (nSpaceLook == 0) ? pCar->GetVelocity() : static_cast(0); + eInvertTransformationMatrix(reinterpret_cast(&mWorldToHybrid), + reinterpret_cast(&mHybridToWorld)); - EyeCubicInit(&eye, reinterpret_cast(eye_space), eye_vel); - LookCubicInit(&look, reinterpret_cast(look_space), look_vel); - DutchCubicInit(&dutch); - FovCubicInit(&fov); + PSMTX44Identity(*reinterpret_cast(&mWorldToScene)); - float f_route_param = TheICEManager.GetParameter(); - float f_to_start = bAbs(f_route_param - fParameter0); - float f_to_end = bAbs(f_route_param - fParameter1); - - if (f_to_end <= f_to_start) { - ICE::Vector3 v_eye_val; - ICE::Vector3 v_deye; - ICE::Vector3 v_look_val; - ICE::Vector3 v_dlook; + if (nSpaceEye == 3 || nSpaceLook == 3) { + ICEScene *scene = ICE::FindAnimScene(); + if (scene != 0) { + bMatrix4 &sceneMat = scene->GetSceneTransformMatrix(); + pWorldToScene = &mWorldToScene; + eInvertTransformationMatrix(reinterpret_cast(pWorldToScene), &sceneMat); + } + } - eye.GetVal(&v_eye_val); - eye.GetdVal(&v_deye); - pEye->SetValDesired(&v_eye_val); - pEye->SetdValDesired(&v_deye); + eye.SetVal(&v_eye[0]); + eye.SetdVal(&v_eye_slope[0]); + eye.SetValDesired(&v_eye[1]); + eye.SetdValDesired(&v_eye_slope[1]); + + look.SetVal(&v_look[0]); + look.SetdVal(&v_look_slope[0]); + look.SetValDesired(&v_look[1]); + look.SetdValDesired(&v_look_slope[1]); + + dutch.SetVal(pCameraData->fDutch[0]); + dutch.SetdVal(f_dutch_slope[0]); + dutch.SetValDesired(pCameraData->fDutch[1]); + dutch.SetdValDesired(f_dutch_slope[1]); + + unsigned short fov0 = ConvertLensLengthToFovAngle(pCameraData->fLens[0]); + unsigned short fov1 = ConvertLensLengthToFovAngle(pCameraData->fLens[1]); + float fov0_slope = ConvertLensDeltaToFovDelta(pCameraData->fLens[0], f_lens_slope[0]); + float fov1_slope = ConvertLensDeltaToFovDelta(pCameraData->fLens[1], f_lens_slope[1]); + + fov.SetVal(static_cast(fov0)); + fov.SetdVal(fov0_slope); + fov.SetValDesired(static_cast(fov1)); + fov.SetdValDesired(fov1_slope); + + if (hard_cut || es || ls) { + PSMTX44Identity(*reinterpret_cast(&mHybridToWorld)); + ICE::Vector3 *carPos = pCar->GetGeometryPosition(); + bCopy(reinterpret_cast(&mHybridToWorld), + reinterpret_cast(pCar->GetGeometryOrientation()), + reinterpret_cast(carPos)); + } - look.GetVal(&v_look_val); - look.GetdVal(&v_dlook); - pLook->SetValDesired(&v_look_val); - pLook->SetdValDesired(&v_dlook); + switch (nSpaceEye) { + case 0: eye_space = reinterpret_cast(&mWorldToCar); break; + case 2: eye_space = &mWorldToHybrid; break; + case 3: eye_space = pWorldToScene; break; + default: eye_space = 0; break; + } - pDutch->SetValDesired(dutch.GetVal()); - pDutch->dValDesired = dutch.GetdVal(); + switch (nSpaceLook) { + case 0: look_space = reinterpret_cast(&mWorldToCar); break; + case 2: look_space = &mWorldToHybrid; break; + case 3: look_space = pWorldToScene; break; + default: look_space = 0; break; + } - pFov->SetValDesired(fov.GetVal()); - pFov->dValDesired = fov.GetdVal(); - } else { - ICE::Vector3 v_eye_val; - ICE::Vector3 v_deye; - ICE::Vector3 v_look_val; - ICE::Vector3 v_dlook; - - eye.GetVal(&v_eye_val); - eye.GetdVal(&v_deye); - pEye->SetVal(&v_eye_val); - pEye->SetdVal(&v_deye); - - look.GetVal(&v_look_val); - look.GetdVal(&v_dlook); - pLook->SetVal(&v_look_val); - pLook->SetdVal(&v_dlook); - - pDutch->SetVal(dutch.GetVal()); - pDutch->SetdVal(dutch.GetdVal()); - - pFov->SetVal(fov.GetVal()); - pFov->SetdVal(fov.GetdVal()); + ICE::Vector3 *eye_vel = (nSpaceEye == 0) ? pCar->GetVelocity() : static_cast(0); + ICE::Vector3 *look_vel = (nSpaceLook == 0) ? pCar->GetVelocity() : static_cast(0); + + EyeCubicInit(&eye, reinterpret_cast(eye_space), eye_vel); + LookCubicInit(&look, reinterpret_cast(look_space), look_vel); + DutchCubicInit(&dutch); + FovCubicInit(&fov); + + float f_route_param = TheICEManager.GetParameter(); + float f_to_start = bAbs(f_route_param - fParameter0); + float f_to_end = bAbs(f_route_param - fParameter1); + + if (f_to_end <= f_to_start) { + ICE::Vector3 v_eye_val; + ICE::Vector3 v_deye; + ICE::Vector3 v_look_val; + ICE::Vector3 v_dlook; + + eye.GetVal(&v_eye_val); + eye.GetdVal(&v_deye); + pEye->SetValDesired(&v_eye_val); + pEye->SetdValDesired(&v_deye); + + look.GetVal(&v_look_val); + look.GetdVal(&v_dlook); + pLook->SetValDesired(&v_look_val); + pLook->SetdValDesired(&v_dlook); + + pDutch->SetValDesired(dutch.GetVal()); + pDutch->dValDesired = dutch.GetdVal(); + + pFov->SetValDesired(fov.GetVal()); + pFov->dValDesired = fov.GetdVal(); + } else { + ICE::Vector3 v_eye_val; + ICE::Vector3 v_deye; + ICE::Vector3 v_look_val; + ICE::Vector3 v_dlook; + + eye.GetVal(&v_eye_val); + eye.GetdVal(&v_deye); + pEye->SetVal(&v_eye_val); + pEye->SetdVal(&v_deye); + + look.GetVal(&v_look_val); + look.GetdVal(&v_dlook); + pLook->SetVal(&v_look_val); + pLook->SetdVal(&v_dlook); + + pDutch->SetVal(dutch.GetVal()); + pDutch->SetdVal(dutch.GetdVal()); + + pFov->SetVal(fov.GetVal()); + pFov->SetdVal(fov.GetdVal()); + } } } } From 8733c6469b9158ba0f93933b7aeacc1c39a50356 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 16:50:27 +0100 Subject: [PATCH 145/691] =?UTF-8?q?86.8%:=20reorder=20ICEMover::SetDesired?= =?UTF-8?q?=20operations=20(41.0%=20=E2=86=92=2047.4%)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 42 ++++++++++----------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index b7745bf65..d3982d567 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -557,27 +557,6 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { UMath::Matrix4 *eye_space; UMath::Matrix4 *look_space; - bCopy(reinterpret_cast(&mCarToWorld), - reinterpret_cast(pCar->GetGeometryOrientation()), - reinterpret_cast(pCar->GetGeometryPosition())); - - eInvertTransformationMatrix(reinterpret_cast(&mWorldToCar), - reinterpret_cast(&mCarToWorld)); - - eInvertTransformationMatrix(reinterpret_cast(&mWorldToHybrid), - reinterpret_cast(&mHybridToWorld)); - - PSMTX44Identity(*reinterpret_cast(&mWorldToScene)); - - if (nSpaceEye == 3 || nSpaceLook == 3) { - ICEScene *scene = ICE::FindAnimScene(); - if (scene != 0) { - bMatrix4 &sceneMat = scene->GetSceneTransformMatrix(); - pWorldToScene = &mWorldToScene; - eInvertTransformationMatrix(reinterpret_cast(pWorldToScene), &sceneMat); - } - } - eye.SetVal(&v_eye[0]); eye.SetdVal(&v_eye_slope[0]); eye.SetValDesired(&v_eye[1]); @@ -611,6 +590,27 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { reinterpret_cast(carPos)); } + bCopy(reinterpret_cast(&mCarToWorld), + reinterpret_cast(pCar->GetGeometryOrientation()), + reinterpret_cast(pCar->GetGeometryPosition())); + + eInvertTransformationMatrix(reinterpret_cast(&mWorldToCar), + reinterpret_cast(&mCarToWorld)); + + eInvertTransformationMatrix(reinterpret_cast(&mWorldToHybrid), + reinterpret_cast(&mHybridToWorld)); + + PSMTX44Identity(*reinterpret_cast(&mWorldToScene)); + + if (nSpaceEye == 3 || nSpaceLook == 3) { + ICEScene *scene = ICE::FindAnimScene(); + if (scene != 0) { + bMatrix4 &sceneMat = scene->GetSceneTransformMatrix(); + pWorldToScene = &mWorldToScene; + eInvertTransformationMatrix(reinterpret_cast(pWorldToScene), &sceneMat); + } + } + switch (nSpaceEye) { case 0: eye_space = reinterpret_cast(&mWorldToCar); break; case 2: eye_space = &mWorldToHybrid; break; From 8857a10ee9d79daa3d96a414002801d08e285d01 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 17:16:53 +0100 Subject: [PATCH 146/691] 86.9%: fix bVector3::operator-= empty body The operator-= had an empty body {}, causing all bVector3 -= operations to be silently no-ops. Implemented it to call bSub() matching operator+= which calls bAdd(). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/bWare/Inc/bMath.hpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/bWare/Inc/bMath.hpp b/src/Speed/Indep/bWare/Inc/bMath.hpp index 7a5b97b2a..a6d39d57c 100644 --- a/src/Speed/Indep/bWare/Inc/bMath.hpp +++ b/src/Speed/Indep/bWare/Inc/bMath.hpp @@ -319,7 +319,7 @@ struct ALIGN_16 bVector3 { bVector3 operator*(float f) const; - bVector3 &operator-=(const bVector3 &v) {} + bVector3 &operator-=(const bVector3 &v); }; bVector3 *bNormalize(bVector3 *dest, const bVector3 *v); @@ -413,6 +413,11 @@ inline bVector3 &bVector3::operator+=(const bVector3 &v) { return *this; } +inline bVector3 &bVector3::operator-=(const bVector3 &v) { + bSub(this, this, &v); + return *this; +} + inline bVector3 bVector3::operator+(const bVector3 &v) const { return bAdd(*this, v); } From 6a2e4eac1380dde7c991506478ce78034bc25e59 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 17:22:23 +0100 Subject: [PATCH 147/691] 86.9%: fix VU0 function calls in IsUnderVehicle Use UMath::Sub/Length/Rotate (Vector4 variants) instead of Subxyz/Lengthxyz/Rotate(Vector3) to match original VU0 calls. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Movers/Cubic.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp index 67dc21f41..384625111 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp @@ -242,16 +242,15 @@ bool CubicCameraMover::IsUnderVehicle() { testPos.w = 0.0f; UMath::Vector4 test2vehicle; - UMath::Subxyz(testPos, vehiclePos, test2vehicle); - float dist = UMath::Lengthxyz(test2vehicle); + UMath::Sub(testPos, vehiclePos, test2vehicle); + float dist = UMath::Length(test2vehicle); if (dist >= irb->GetRadius()) { continue; } UMath::Vector4 test2vehicleLocal; - UMath::Rotate(reinterpret_cast(test2vehicle), world2local, - reinterpret_cast(test2vehicleLocal)); + UMath::Rotate(test2vehicle, world2local, test2vehicleLocal); float absX = test2vehicleLocal.x; if (absX < 0.0f) { From 42a2c6d2b11f0f33753b02e1d052b998bb0ba6ac Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 17:30:44 +0100 Subject: [PATCH 148/691] =?UTF-8?q?87.4%:=20reorder=20CubicCameraMover::Up?= =?UTF-8?q?date=20(59.0%=20=E2=86=92=2075.8%)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move HighliteMode/Updates/OutsidePovType/bDistBetween before SetDesired. Remove duplicate second-pass code. Add dampers to pForward SetDuration. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 4 -- src/Speed/Indep/Src/Camera/Movers/Cubic.cpp | 53 +++++++-------------- 2 files changed, 17 insertions(+), 40 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 061601dfb..c189967d4 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -1289,10 +1289,6 @@ void CubicCameraMover::CameraAccelCurve(bVector3 *pAccel) { } void CubicCameraMover::CameraSpeedHug(bVector3 *pEyeOffset) { - if (pCar == nullptr) { - return; - } - float f_top_speed = pCar->GetTopSpeed(); if (f_top_speed > 0.0f) { tTable speed_table(CameraSpeedHugData, 5, 0.0f, f_top_speed); diff --git a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp index 384625111..e2fddd9b1 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp @@ -453,8 +453,23 @@ void CubicCameraMover::Update(float dT) { pFov->SetDuration(eye_duration); pLook->SetDuration(eye_duration); bVector3 *foward_duration = pov_data.GetForwardDuration(); - pForward->SetDuration(foward_duration->x, foward_duration->y, foward_duration->z); - pEye->SetDuration(eye_duration); + pForward->SetDuration(foward_duration->x + collision_damper + drift_damper, + foward_duration->y + collision_damper + drift_damper, + foward_duration->z + collision_damper + drift_damper); + + if (HighliteMode()) { + eye_duration = pov_data.fEyeDuration * 2.0f; + } + + pEye->SetDuration(eye_duration, eye_duration, eye_duration); + + pUp->Update(dT, 0.0f, 0.0f); + pFov->Update(dT, 0.0f, 0.0f); + pEye->Update(dT, 0.0f, 0.0f); + pLook->Update(dT, 0.0f, 0.0f); + pForward->Update(dT, 0.0f, 0.0f); + + bool bOutside = OutsidePovType(pov->Type); float target_dist = bDistBetween(GetCamera()->GetPosition(), pCar->GetGeometryPosition()); GetCamera()->SetTargetDistance(target_dist); @@ -476,8 +491,6 @@ void CubicCameraMover::Update(float dT) { if (bLookBack) { f_stiffness = -1.0f; } - - bool bOutside = OutsidePovType(pov->Type); bVector3 vUp; vUp.x = (*pUp).x.Val; vUp.y = (*pUp).y.Val; @@ -559,38 +572,6 @@ void CubicCameraMover::Update(float dT) { } } - pUp->SetDuration(0.0f, 0.0f, 0.0f); - pFov->SetDuration(0.0f); - pEye->SetDuration(0.0f, 0.0f, 0.0f); - pLook->SetDuration(0.0f, 0.0f, 0.0f); - pForward->SetDuration(0.0f, 0.0f, collision_damper + drift_damper); - - if (HighliteMode()) { - eye_duration = pov_data.fEyeDuration * 2.0f; - } - - pEye->SetDuration(eye_duration, eye_duration, eye_duration); - - pUp->Update(dT, 0.0f, 0.0f); - pFov->Update(dT, 0.0f, 0.0f); - pEye->Update(dT, 0.0f, 0.0f); - pLook->Update(dT, 0.0f, 0.0f); - pForward->Update(dT, 0.0f, 0.0f); - - bOutside = OutsidePovType(pov->Type); - - target_dist = bDistBetween(GetCamera()->GetPosition(), pCar->GetGeometryPosition()); - GetCamera()->SetTargetDistance(target_dist); - - fSign = 0.0f; - if (!bPerfectFocus) { - GetCamera()->SetFocalDistance(40.0f); - fSign = 100.0f; - } else { - GetCamera()->SetFocalDistance(0.0f); - } - GetCamera()->SetDepthOfField(fSign); - if (GRaceStatus::Exists() && pCar->IsDragRace()) { float seconds = GRaceStatus::Get().GetRaceTimeElapsed(); if (seconds < 0.0f) { From 89645511239621b65604eb20ba42b6bfd07f11b4 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 17:43:12 +0100 Subject: [PATCH 149/691] Sync agent workflow docs Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/execute/SKILL.md | 30 ++++++++++++++++++------------ .github/skills/implement/SKILL.md | 22 ++++++++++++++-------- .github/skills/refiner/SKILL.md | 24 +++++++++++------------- AGENTS.md | 27 +++++++++++++++++++-------- 4 files changed, 62 insertions(+), 41 deletions(-) diff --git a/.github/skills/execute/SKILL.md b/.github/skills/execute/SKILL.md index 7b9379f4f..90ecbf819 100644 --- a/.github/skills/execute/SKILL.md +++ b/.github/skills/execute/SKILL.md @@ -61,17 +61,19 @@ python tools/decomp-workflow.py unit -u main/Path/To/TU --limit 20 Use `next` first when you want the wrapper to rank the most useful targets instead of following raw objdiff order. `--strategy balanced` is the default and is usually the best -starting point. Use `--strategy impact` when you only care about the biggest unmatched-byte -wins, or `--strategy quick-wins` when you want already-implemented functions in mature units. +starting point because it now favors large remaining gains and penalizes near-finished +cleanup work. Use `--strategy impact` when you only care about the biggest unmatched-byte +wins, or `--strategy quick-wins` only when you intentionally want a cleanup pass on +already-implemented functions. + +Stay in the wrapper flow by default. Only drop to raw `decomp-status.py` / `decomp-diff.py` +when you need an option the wrapper does not expose yet. If the shared unit object is missing, the wrapper now rebuilds it automatically before running `next --unit` / `unit`. If you need the raw tools instead of the wrapper, run `decomp-status.py` and -`decomp-diff.py` directly against the shared build output. - -This shows all symbols with their match status. Note the total count of missing, -nonmatching, and matching functions. +`decomp-diff.py` directly against the shared build output as a fallback, not the default. ## Phase 2: Scaffold (if needed) @@ -93,7 +95,7 @@ python tools/decomp-workflow.py unit -u main/Path/To/TU ``` If you need the raw tools, rebuild normally and then run `decomp-diff.py` -directly on the unit. +directly on the unit only as a fallback. ### 3c. Implement each function sequentially @@ -138,7 +140,8 @@ view for one function. After every few functions, re-run the full status check: ```sh -python tools/decomp-diff.py -u main/Path/To/TU +python tools/decomp-workflow.py unit -u main/Path/To/TU +python tools/decomp-workflow.py next --unit main/Path/To/TU --limit 10 ``` Review progress and decide whether to: @@ -152,16 +155,19 @@ Review progress and decide whether to: When all functions have been attempted: ```sh -# Full status -python tools/decomp-diff.py -u main/Path/To/TU +# Wrapper-first unit summary +python tools/decomp-workflow.py unit -u main/Path/To/TU -# Check for any remaining mismatches -python tools/decomp-diff.py -u main/Path/To/TU -s nonmatching +# Focused remaining mismatches +python tools/decomp-workflow.py diff -u main/Path/To/TU -s nonmatching -t function # Verify no regressions ninja changes ``` +If you need a raw full-symbol dump beyond that, use `decomp-diff.py` only as a final +fallback. + For any remaining nonmatching functions, make one final pass using the implementation or refiner workflow with all context accumulated during the session. diff --git a/.github/skills/implement/SKILL.md b/.github/skills/implement/SKILL.md index a52b286e1..a81bb47c1 100644 --- a/.github/skills/implement/SKILL.md +++ b/.github/skills/implement/SKILL.md @@ -15,9 +15,15 @@ If the function was not already chosen for you, pick it with the ranking wrapper ```sh python tools/decomp-workflow.py next --unit main/Path/To/TU --limit 10 -python tools/decomp-workflow.py next --category game --strategy quick-wins --limit 10 +python tools/decomp-workflow.py next --category game --limit 10 ``` +Prefer low-match, high-remaining targets here. Do not default to near-finished cleanup +functions unless the user explicitly wants a cleanup/refiner pass. + +Use the wrapper flow first throughout this skill. Drop to raw `decomp-context.py` or +`decomp-diff.py` only when the wrapper is missing a specific flag or you are debugging. + ### 1a. decomp-context.py Preferred shortcut: @@ -40,7 +46,7 @@ need the full DWARF body with locals and nested inline info. Add `--brief` when you want a shorter helper view; it trims suggested commands and related-source hints while keeping the core source/status/diff context. -Equivalent manual form: +Equivalent manual fallback: ```sh python tools/decomp-context.py -u main/Path/To/TU -f FunctionName @@ -104,7 +110,7 @@ and assembly: Utilize the dwarf information that you get from the lookup skill heavily. -Don't add any comments. +Don't add explanatory comments during implementation unless you need to document a remaining DWARF mismatch. Don't use any temporary local variables that don't exist in the dwarf. @@ -138,10 +144,10 @@ If the build fails, fix compilation errors first. ```sh # Quick status -python tools/decomp-diff.py -u main/Path/To/TU --search FunctionName +python tools/decomp-workflow.py diff -u main/Path/To/TU --search FunctionName --limit 20 # Full instruction diff -python tools/decomp-diff.py -u main/Path/To/TU -d FunctionName +python tools/decomp-workflow.py diff -u main/Path/To/TU -d FunctionName ``` ### Interpreting the diff @@ -161,9 +167,9 @@ After writing your code, occasionally run the dwarf dump on the compiled output due to work on other functions, query the unmangled name instead. ```bash -# Rebuild the unit, then dump the shared object file's DWARF: +# Rebuild the unit, then dump the shared object file's DWARF (ignore dwarf specific errors): python tools/decomp-workflow.py build -u main/Path/To/TU -dtk dwarf dump build/GOWE69/src/Path/To/TU.o -o /tmp/my_unit_dump.nothpp +build/tools/dtk dwarf dump build/GOWE69/src/Path/To/TU.o -o /tmp/my_unit_dump.nothpp # Then look up the same function in your output: python tools/lookup.py --file /tmp/my_unit_dump.nothpp function "EPerfectLaunch::~EPerfectLaunch(void)" # Compare with the original: @@ -178,7 +184,7 @@ Repeat the build-diff cycle until the diff shows 100% match with no `~` lines: ```sh python tools/decomp-workflow.py build -u main/Path/To/TU -python tools/decomp-diff.py -u main/Path/To/TU -d FunctionName +python tools/decomp-workflow.py diff -u main/Path/To/TU -d FunctionName ``` Every mismatched instruction is a signal — don't settle for "close enough". diff --git a/.github/skills/refiner/SKILL.md b/.github/skills/refiner/SKILL.md index 5cccdb1d5..82b2a2608 100644 --- a/.github/skills/refiner/SKILL.md +++ b/.github/skills/refiner/SKILL.md @@ -27,6 +27,9 @@ python tools/decomp-workflow.py diff -u main/Path/To/TU -d FunctionName --no-col If the shared unit object is missing, the wrapper now rebuilds it automatically before running `diff`. +Stay in the wrapper flow for refiner passes unless you hit a wrapper limitation and need a +backend-only option. + If you need the raw backend form instead of the wrapper, rebuild the unit and then run: ```sh @@ -46,8 +49,7 @@ Read every instruction pair. Categorize each mismatch: | **Relocation offset** | `@stringBase0` or data offset differs | More string literals will shift this; add them in order | | **Virtual vs direct call** | `bl` vs indirect through vtable | Check const-qualifier; use `GetFoo()` vs `Foo()` | | **Inline vs outlined** | Extra call to helper vs inlined sequence | Force inline by rewriting the expression without calling the helper | -| **Missing `this->` dereference** | Wrong address in load/store | Ensure member access goes through the correct `this` pointer | -| **Loop structure** | `do/while` vs `for` vs `while` | Try all three forms; compiler emits different branch sequences | +| **Loop structure** | Guarded `do/while` from Ghidra or mismatched loop branches | Rewrite to the natural source form suggested by the control flow; in particular, a guarded `do/while` often needs to become a plain `for` loop | ## Phase 2: Systematic permutation strategies @@ -99,31 +101,27 @@ python tools/lookup.py ./symbols/Dwarf struct bMath Replace hand-rolled sequences with the correct inline call. -### 2e. Initializer list order +### 2e. Constructor initialization placement -Constructors compiled with GCC are sensitive to initializer list order. The DWARF -shows the canonical member order. If yours differs, reorder. +Only do this for constructors. Compare which members are initialized in the +initializer list versus the function body, and in what order. Initializer-list use +often stabilizes store order, but forcing every member into the initializer list can +also make the match worse. ### 2f. Cast type `static_cast` vs `static_cast` produces different assembly sequences on PPC (see `xoris` pattern in AGENTS.md). Check all casts. -### 2g. Compiler flag hint - -If none of the above resolve the mismatch, note the function address and consider -running `flag_permuter.py`. This is a last resort — only do this for a single -isolated function, not as a general strategy. - ## Phase 3: DWARF verification After any instruction match, verify the DWARF also matches. Use the rebuilt shared object from Phase 1 (or rebuild again if you've changed the source): ```bash -# Rebuild the unit, then dump its DWARF +# Rebuild the unit, then dump its DWARF (ignore dwarf specific errors) python tools/decomp-workflow.py build -u main/Path/To/TU -dtk dwarf dump build/GOWE69/src/Path/To/TU.o -o /tmp/refiner__check.nothpp +build/tools/dtk dwarf dump build/GOWE69/src/Path/To/TU.o -o /tmp/refiner__check.nothpp # Compare your function's DWARF against the original python tools/lookup.py --file /tmp/refiner__check.nothpp function "ClassName::FunctionName(void)" diff --git a/AGENTS.md b/AGENTS.md index 209b49230..60534c3dc 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -138,7 +138,7 @@ python tools/decomp-workflow.py health python tools/decomp-workflow.py health --smoke-build main/Speed/Indep/SourceLists/zAnim python tools/decomp-workflow.py health --smoke-dtk main/Speed/Indep/SourceLists/zAnim python tools/decomp-workflow.py next --category game --limit 10 -python tools/decomp-workflow.py next --unit main/Speed/Indep/SourceLists/zAnim --strategy quick-wins --limit 5 +python tools/decomp-workflow.py next --unit main/Speed/Indep/SourceLists/zAnim --limit 5 python tools/decomp-workflow.py build -u main/Speed/Indep/SourceLists/zAnim python tools/decomp-workflow.py diff -u main/Speed/Indep/SourceLists/zAnim -d FindIOWin python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zAnim -f FindIOWin @@ -154,15 +154,26 @@ repeated command chaining and to standardize routine worktree preflight checks f once when that output is missing, so wrapper-first inspection works more often on half-prepared worktrees. +In normal agent work, use the wrapper commands first. Drop to the raw backend tools only +when you specifically need a backend-only flag, are debugging a wrapper/backend discrepancy, +or are doing a final exhaustive check that the wrapper does not expose directly. + When you do not already have a specific target in mind, start with `next` or `unit` instead of picking functions in raw objdiff order. `next` is the fastest way to answer "what should I work on now?": -- `--strategy balanced` favors high-impact functions while de-prioritizing obvious - init/setup sinkholes and preferring targets with usable source context. +- `--strategy balanced` favors functions with large remaining gains, penalizes + high-match cleanup work, de-prioritizes obvious init/setup sinkholes, and prefers + targets with usable source context. - `--strategy impact` is the blunt "largest unmatched byte loss first" view. -- `--strategy quick-wins` favors mature units and existing implementations where agents - are more likely to land progress quickly. +- `--strategy quick-wins` is a cleanup-oriented mode for deliberate polish passes on + already-implemented functions. Do not use it as the default scouting mode. + +When choosing what to work on next, bias toward low-match, high-remaining functions. +As a rule of thumb, getting a function from 0% to 80% is usually much faster and higher +leverage than pushing a function from 90% to 100%. +Leave 85%+ cleanup and refiner-style polish for deliberate cleanup passes unless the +user explicitly wants that work or the function is directly blocking something else. `function` is the preferred context-gathering entrypoint: it bundles source excerpt, objdiff status/diff, compact GC DWARF function lookup, and Ghidra output in one run. @@ -216,11 +227,11 @@ If it finds a match, include that header instead of redeclaring. ### dtk (decomp-toolkit) -Dump the dwarf of your own implementation of a function after rebuilding the unit normally: +Dump the dwarf of your own implementation of a function after rebuilding the unit normally (ignore dwarf specific errors): ```sh python tools/decomp-workflow.py build -u main/Speed/Indep/SourceLists/zAnim -dtk dwarf dump build/GOWE69/src/Speed/Indep/SourceLists/zAnim.o -o /tmp/zAnim_check.nothpp +build/tools/dtk dwarf dump build/GOWE69/src/Speed/Indep/SourceLists/zAnim.o -o /tmp/zAnim_check.nothpp ``` Demangle a symbol (you probably won't need this): @@ -256,7 +267,7 @@ This is a **C++98** codebase compiled with ProDG GC 3.9.3 (GCC 2.95 under the ho - Omit the `this` pointer. - Use `nullptr` and `override`. If they are missing, you need to include `types.h`. - Omit `struct` when declaring variables or parameters, we are not in C land. -- Avoid using `using namespace` at all cost. Since the game uses jumbo builds, they leak through files. +- Avoid using `using` directives at all cost. Since the game uses jumbo builds, they leak through files. ## Committing Progress From 8ffec6bacb41c4da5df1096d7ed223c5d2def07e Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 17:50:49 +0100 Subject: [PATCH 150/691] =?UTF-8?q?87.5%:=20match=20GetSceneHash,=20fix=20?= =?UTF-8?q?GetICEAnchor=20(53.2%=20=E2=86=92=2090.2%)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - GetSceneHash: use && pattern + AnimSceneLoadInfo zeroing ctor → 100% match - GetICEAnchor: use eGetView(1, false) to get correct eViews[1] offset → 90.2% Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Animation/AnimDirectory.hpp | 7 ++++++- src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp | 10 +++++----- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 14 ++++++-------- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/Speed/Indep/Src/Animation/AnimDirectory.hpp b/src/Speed/Indep/Src/Animation/AnimDirectory.hpp index b60a8b6f3..b5c6e5ebe 100644 --- a/src/Speed/Indep/Src/Animation/AnimDirectory.hpp +++ b/src/Speed/Indep/Src/Animation/AnimDirectory.hpp @@ -18,7 +18,12 @@ struct AnimFileLoadInfo { // total size: 0x8 struct AnimSceneLoadInfo { - AnimSceneLoadInfo() {} + AnimSceneLoadInfo() + : mAnimSceneHash(0) // + , mSharedFileCount(0) // + , mSharedFileStartIndex(0) // + , mSceneFileCount(0) // + , mSceneFileStartIndex(0) {} unsigned int mAnimSceneHash; // offset 0x0, size 0x4 unsigned char mSharedFileCount; // offset 0x4, size 0x1 diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp index 789444f53..e04fafef4 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp @@ -1042,12 +1042,12 @@ unsigned int GetSceneCount() { } unsigned int GetSceneHash(unsigned int slot) { - if (TheAnimDirectory == 0 || TheAnimDirectory->GetSceneCount() <= slot) { - return 0; + if (TheAnimDirectory != 0 && slot < TheAnimDirectory->GetSceneCount()) { + AnimSceneLoadInfo info; + TheAnimDirectory->GetSceneLoadInfo(slot, info); + return info.mAnimSceneHash; } - AnimSceneLoadInfo info; - TheAnimDirectory->GetSceneLoadInfo(slot, info); - return info.mAnimSceneHash; + return 0; } void GetNameOfSceneHash(unsigned int hash, char *name) { diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index d3982d567..6649a55a8 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -832,15 +832,13 @@ void ICEMover::GetLook(ICE::Vector3 *vLook, float f_param) { } ICEAnchor *GetICEAnchor() { - CameraMover *camera_mover = 0; - - if (&eViews[1] != 0) { - camera_mover = eViews[1].GetCameraMover(); - } - if (camera_mover != 0 && camera_mover->GetType() == CM_ICE) { - return reinterpret_cast(camera_mover)->GetICEAnchor(); + eView *view = eGetView(1, false); + if (view != 0) { + CameraMover *m = view->GetCameraMover(); + if (m != 0 && m->GetType() == CM_ICE) { + return reinterpret_cast(m)->GetICEAnchor(); + } } - return 0; } From 2fae4e76b0b9089b3933d70228ea00a5a538a28c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 17:56:38 +0100 Subject: [PATCH 151/691] 87.5%: match GetTimerSeconds Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp index e04fafef4..7f4fc8be6 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp @@ -256,15 +256,11 @@ ICEManager::ICEManager() { } float ICEManager::GetTimerSeconds() { - int packed_time; - - if (!bUseRealTime) { - packed_time = WorldTimer.GetPackedTime(); + if (bUseRealTime) { + return RealTimer.GetSeconds(); } else { - packed_time = RealTimer.GetPackedTime(); + return WorldTimer.GetSeconds(); } - - return packed_time / 4000.0f; } bool ICEManager::RefreshCameraSplines() { From 979edf014994ed105401fcbf434da91ad283bee3 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 18:23:26 +0100 Subject: [PATCH 152/691] 87.6%: match FovCubicInit and CameraAI::Shutdown Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Libs/Support/Utility/UListable.h | 5 +---- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 6 ++---- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/Speed/Indep/Libs/Support/Utility/UListable.h b/src/Speed/Indep/Libs/Support/Utility/UListable.h index 3afe5dd22..535c0286d 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UListable.h +++ b/src/Speed/Indep/Libs/Support/Utility/UListable.h @@ -29,7 +29,7 @@ template class Listable { // List(const List &); List(); - virtual ~List(); + virtual ~List() {} // List &operator=(List &); }; @@ -73,9 +73,6 @@ template class Listable { template Listable::List::List() {} -template -Listable::List::~List() {} - template class ListableSet { public: typedef T value_type; diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index 6649a55a8..c7dbe3eb6 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -462,10 +462,8 @@ void ICEMover::DutchCubicInit(ICE::Cubic1D *pDutch) { } void ICEMover::FovCubicInit(ICE::Cubic1D *pFov) { - unsigned short fov_angle = GetCamera()->GetFov(); - unsigned short fov_velocity_angle = GetCamera()->GetVelocityFov(); - float fFov = static_cast(static_cast(fov_angle)) + static_cast(static_cast(fov_velocity_angle)) * (1.0f / 30.0f); - float fFovVel = static_cast(static_cast(fov_velocity_angle)) * pFov->duration; + float fFov = static_cast(static_cast(GetCamera()->GetFov())) + static_cast(static_cast(GetCamera()->GetVelocityFov())) * (1.0f / 30.0f); + float fFovVel = static_cast(static_cast(GetCamera()->GetVelocityFov())) * pFov->duration; pFov->SetVal(fFov); pFov->SetdVal(fFovVel); From 2339dfa7e9c4c353fe9bfcb67c0c56c62e5c7f75 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 19:05:12 +0100 Subject: [PATCH 153/691] fix --- tools/_common.py | 7 +++++++ tools/decomp-diff.py | 1 - tools/project.py | 9 ++++++--- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/tools/_common.py b/tools/_common.py index 22b59667a..db992bd8b 100644 --- a/tools/_common.py +++ b/tools/_common.py @@ -14,6 +14,12 @@ ROOT_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, "..")) BUILD_NINJA = os.path.join(ROOT_DIR, "build.ninja") OBJDIFF_JSON = os.path.join(ROOT_DIR, "objdiff.json") +OBJDIFF_DEFAULT_CONFIG_ARGS = [ + "-c", + "functionRelocDiffs=none", + "-c", + "ppc.calculatePoolRelocations=false", +] class ToolError(RuntimeError): @@ -261,6 +267,7 @@ def run_objdiff_json( ensure_project_prereqs() cmd = [objdiff_cli, "diff"] + cmd.extend(OBJDIFF_DEFAULT_CONFIG_ARGS) if extra_args: cmd.extend(extra_args) cmd.extend(["-u", unit_name, "-o", "-", "--format", "json"]) diff --git a/tools/decomp-diff.py b/tools/decomp-diff.py index ab7d38e05..9f4653147 100644 --- a/tools/decomp-diff.py +++ b/tools/decomp-diff.py @@ -34,7 +34,6 @@ def run_objdiff(unit: str, base_obj: Optional[str] = None) -> Dict[str, Any]: OBJDIFF_CLI, unit, base_obj=base_obj, - extra_args=["-c", "functionRelocDiffs=none"], root_dir=root_dir, ) diff --git a/tools/project.py b/tools/project.py index d905a9547..e8b36b8c4 100644 --- a/tools/project.py +++ b/tools/project.py @@ -226,9 +226,12 @@ def __init__(self) -> None: self.print_progress_categories: Union[bool, List[str]] = ( True # Print additional progress categories in the CLI progress output ) - self.progress_report_args: Optional[List[str]] = ( - None # Flags to `objdiff-cli report generate` - ) + self.progress_report_args: Optional[List[str]] = [ + "-c", + "functionRelocDiffs=none", + "-c", + "ppc.calculatePoolRelocations=false", + ] # Flags to `objdiff-cli report generate` # Progress fancy printing self.progress_use_fancy: bool = False From 2da9924e0a7c269dee10a592aa19dfaad41535e1 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 19:06:06 +0100 Subject: [PATCH 154/691] 87.7%: fix CubicCameraMover::Update durations and fAccelH - Use separate pov_data durations (fUpDuration, fFovDuration, fLookDuration) instead of eye_duration for all - Use bMax(bAbs(x), bAbs(y)) for fAccelH instead of if-statement (produces fsel) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Movers/Cubic.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp index e2fddd9b1..e7c5922f1 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp @@ -436,11 +436,8 @@ void CubicCameraMover::Update(float dT) { avg->nCurrentSlot = 0; } - float fAccelH = bAbs(vAccel.x); + float fAccelH = bMax(bAbs(vAccel.x), bAbs(vAccel.y)); float fAccelV; - if (bAbs(vAccel.x) - bAbs(vAccel.y) < 0.0f) { - fAccelH = bAbs(vAccel.y); - } if (0.1f <= fAccelH && 0.0f < pCar->GetCollisionDamping() && vCameraImpcat.x < pCar->GetCollisionDamping()) { @@ -449,9 +446,9 @@ void CubicCameraMover::Update(float dT) { } float eye_duration = pov_data.fEyeDuration; - pUp->SetDuration(eye_duration); - pFov->SetDuration(eye_duration); - pLook->SetDuration(eye_duration); + pUp->SetDuration(pov_data.fUpDuration); + pFov->SetDuration(pov_data.fFovDuration); + pLook->SetDuration(pov_data.fLookDuration); bVector3 *foward_duration = pov_data.GetForwardDuration(); pForward->SetDuration(foward_duration->x + collision_damper + drift_damper, foward_duration->y + collision_damper + drift_damper, From f47ad429e924f22678fae27437e69d7cf81cd10e Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 19:23:53 +0100 Subject: [PATCH 155/691] 88.2%: add vertical impact block to CubicCameraMover::Update Add missing fAccelV computation and vertical camera impact check that sets vCameraImpcat.y from scaled vertical acceleration. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Movers/Cubic.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp index e7c5922f1..4862598ab 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp @@ -439,12 +439,21 @@ void CubicCameraMover::Update(float dT) { float fAccelH = bMax(bAbs(vAccel.x), bAbs(vAccel.y)); float fAccelV; - if (0.1f <= fAccelH && 0.0f < pCar->GetCollisionDamping() && + if (24.0f <= fAccelH && 0.0f < pCar->GetCollisionDamping() && vCameraImpcat.x < pCar->GetCollisionDamping()) { vCameraImpcat.x = pCar->GetCollisionDamping(); vCameraImpcatTimer.x = 1.0f; } + fAccelV = vAccel.z; + if (fAccelV >= 24.0f) { + float impact = bClamp((fAccelV - 24.0f) * (1.0f / 6.0f), 0.0f, 1.0f); + if (impact > vCameraImpcat.y) { + vCameraImpcat.y = impact; + vCameraImpcatTimer.y = 1.0f; + } + } + float eye_duration = pov_data.fEyeDuration; pUp->SetDuration(pov_data.fUpDuration); pFov->SetDuration(pov_data.fFovDuration); From cb6437224643c070e5ec1bca3240fd8870d67a4b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 19:36:10 +0100 Subject: [PATCH 156/691] 88.2%: reorder IsUnderVehicle to check WorldID before GetRigidBody Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Movers/Cubic.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp index 4862598ab..43ae18dd5 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp @@ -184,12 +184,12 @@ bool CubicCameraMover::IsUnderVehicle() { continue; } - IRigidBody *irb = isimable->GetRigidBody(); - if (irb == nullptr) { + if (isimable->GetWorldID() == pCar->GetWorldID()) { continue; } - if (isimable->GetWorldID() == pCar->GetWorldID()) { + IRigidBody *irb = isimable->GetRigidBody(); + if (irb == nullptr) { continue; } From 1b17b75aaff3799b793a5a5ee1b72c476a1ce53a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 19:55:00 +0100 Subject: [PATCH 157/691] 88.3%: fix HighliteMode constant and fSign branch in CubicCameraMover::Update - HighliteMode duration multiplier is 10/13 (~0.769), not 2.0 - fSign must use if/else pattern, not init-then-override Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Movers/Cubic.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp index 43ae18dd5..81eb4899f 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp @@ -464,7 +464,7 @@ void CubicCameraMover::Update(float dT) { foward_duration->z + collision_damper + drift_damper); if (HighliteMode()) { - eye_duration = pov_data.fEyeDuration * 2.0f; + eye_duration = pov_data.fEyeDuration * (10.0f / 13.0f); } pEye->SetDuration(eye_duration, eye_duration, eye_duration); @@ -480,22 +480,24 @@ void CubicCameraMover::Update(float dT) { float target_dist = bDistBetween(GetCamera()->GetPosition(), pCar->GetGeometryPosition()); GetCamera()->SetTargetDistance(target_dist); - float fSign; + float dof; if (!bPerfectFocus) { GetCamera()->SetFocalDistance(40.0f); - fSign = 100.0f; + dof = 100.0f; } else { GetCamera()->SetFocalDistance(0.0f); } - GetCamera()->SetDepthOfField(fSign); + GetCamera()->SetDepthOfField(dof); bMatrix4 mCarToWorld; SetDesired(&mCarToWorld, pov, &pov_data, bSnapNext); bSnapNext = 0; - float f_stiffness = 1.0f; + float fSign; if (bLookBack) { - f_stiffness = -1.0f; + fSign = -1.0f; + } else { + fSign = 1.0f; } bVector3 vUp; vUp.x = (*pUp).x.Val; @@ -507,8 +509,8 @@ void CubicCameraMover::Update(float dT) { vUp.z = pCar->GetUpVector()->z; } - bVector3 vEye(f_stiffness * (*pEye).x.Val, f_stiffness * (*pEye).y.Val, (*pEye).z.Val); - bVector3 vLook(f_stiffness * (*pLook).x.Val, f_stiffness * (*pLook).y.Val, (*pLook).z.Val); + bVector3 vEye(fSign * (*pEye).x.Val, fSign * (*pEye).y.Val, (*pEye).z.Val); + bVector3 vLook(fSign * (*pLook).x.Val, fSign * (*pLook).y.Val, (*pLook).z.Val); { float impact; @@ -588,7 +590,7 @@ void CubicCameraMover::Update(float dT) { } bVector3 vDiff = vEye - vLook; - vDiff *= f_stiffness; + vDiff *= fSign; vLook = vLook + vDiff; vEye = vLook; From ef33eb52674c2096005f834d75fb9bdd34aa8784 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 19:58:27 +0100 Subject: [PATCH 158/691] 88.3%: fix bOutside branch polarity in CubicCameraMover::Update Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Movers/Cubic.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp index 81eb4899f..e4417cb97 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp @@ -615,7 +615,7 @@ void CubicCameraMover::Update(float dT) { TerrainVelocityNoise(&mWorldToCamera, pCar, PovVelocityNoiseScale[nPovTypeUsed], PovTerrainNoiseScale[nPovTypeUsed]); - if (!bOutside) { + if (bOutside) { MinGapTopology(&mWorldToCamera, pCar->GetGeometryPosition()); if (!isUnder) { MinGapCars(&mWorldToCamera, pCar->GetGeometryPosition(), const_cast(pCar->GetVelocity())); From dd0ee1bb89528b1ca1e54cddfcd753dc2730a76f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 20:09:33 +0100 Subject: [PATCH 159/691] 88.3%: fix ViewID usage in CubicCameraMover::Update Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Movers/Cubic.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp index e4417cb97..7f95b6a8d 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp @@ -603,10 +603,10 @@ void CubicCameraMover::Update(float dT) { bMatrix4 mWorldToCamera; eCreateLookAtMatrix(&mWorldToCamera, vEye, vLook, vUp); - ApplyCameraShake(0, &mWorldToCamera); + ApplyCameraShake(ViewID, &mWorldToCamera); HandheldNoise(&mWorldToCamera, PovHandheldNoiseScale[nPovTypeUsed], true); - if (!AmIinATunnel(eGetView(0, false), 1)) { + if (!AmIinATunnel(&eViews[ViewID], 1)) { float speed_attenuation = bClamp(pCar->GetVelMag() * 0.01f, 0.0f, 1.0f); float f_chopper_scale = PovHandheldChopperScale[nPovTypeUsed] * (1.0f - speed_attenuation * 0.5f); ChopperNoise(&mWorldToCamera, f_chopper_scale, true); From 693ac98ee21651f7b4679fb4f65e3a408fa6929f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 20:46:49 +0100 Subject: [PATCH 160/691] =?UTF-8?q?88.3%:=20fix=20TerrainVelocityNoise=20v?= =?UTF-8?q?table=20call=20(RenderCarPOV=20=E2=86=92=20OutsidePOV)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index c189967d4..2c0c57c26 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -812,7 +812,7 @@ void CameraMover::TerrainVelocityNoise(bMatrix4 *world_to_camera, CameraAnchor * float f_terrain_magnitude = f_terrain_scale * v_speed_terrain_freq.y * f_road_noise_amplitude; float f_terrain_frequency = v_speed_terrain_freq.w * f_road_noise_grid_spacing_inverse; - if (!RenderCarPOV()) { + if (!OutsidePOV()) { f_speed_magnitude *= 0.25f; f_terrain_magnitude *= 0.25f; } From 8c384ccfadecb180350214cc125841cfd6363e64 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 21:06:33 +0100 Subject: [PATCH 161/691] Improve decomp workflow tooling and agent guidance Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/execute/SKILL.md | 35 +++- .github/skills/implement/SKILL.md | 26 ++- .github/skills/refiner/SKILL.md | 31 ++-- AGENTS.md | 32 +++- README.md | 22 ++- tools/_common.py | 166 ++++++++++++++++- tools/decomp-context.py | 173 +++++++++++++++++- tools/decomp-diff.py | 153 ++++++---------- tools/decomp-status.py | 101 +++++++++-- tools/decomp-workflow.py | 291 +++++++++++++++++++++++++++++- tools/project.py | 9 +- 11 files changed, 875 insertions(+), 164 deletions(-) diff --git a/.github/skills/execute/SKILL.md b/.github/skills/execute/SKILL.md index c6ebe9e22..c4366f2a6 100644 --- a/.github/skills/execute/SKILL.md +++ b/.github/skills/execute/SKILL.md @@ -55,14 +55,25 @@ Determine the file path (e.g. `src/Speed/Indep/SourceLists/zWorld2`). The game u Preferred shortcut: ```sh +python tools/decomp-workflow.py next --unit main/Path/To/TU --limit 10 python tools/decomp-workflow.py unit -u main/Path/To/TU --limit 20 ``` -If you need the raw tools instead of the wrapper, run `decomp-status.py` and -`decomp-diff.py` directly against the shared build output. +Use `next` first when you want the wrapper to rank the most useful targets instead of +following raw objdiff order. `--strategy balanced` is the default and is usually the best +starting point because it now favors large remaining gains and penalizes near-finished +cleanup work. Use `--strategy impact` when you only care about the biggest unmatched-byte +wins. Use `--strategy quick-wins` when you want lower-match functions where the first big +chunk of progress is likely to come faster than late cleanup. + +Stay in the wrapper flow by default. Only drop to raw `decomp-status.py` / `decomp-diff.py` +when you need an option the wrapper does not expose yet. -This shows all symbols with their match status. Note the total count of missing, -nonmatching, and matching functions. +If the shared unit object is missing, the wrapper now rebuilds it automatically before +running `next --unit` / `unit`. + +If you need the raw tools instead of the wrapper, run `decomp-status.py` and +`decomp-diff.py` directly against the shared build output as a fallback, not the default. ## Phase 2: Scaffold (if needed) @@ -84,7 +95,7 @@ python tools/decomp-workflow.py unit -u main/Path/To/TU ``` If you need the raw tools, rebuild normally and then run `decomp-diff.py` -directly on the unit. +directly on the unit only as a fallback. ### 3c. Implement each function sequentially @@ -129,7 +140,8 @@ view for one function. After every few functions, re-run the full status check: ```sh -python tools/decomp-diff.py -u main/Path/To/TU +python tools/decomp-workflow.py unit -u main/Path/To/TU +python tools/decomp-workflow.py next --unit main/Path/To/TU --limit 10 ``` Review progress and decide whether to: @@ -143,16 +155,19 @@ Review progress and decide whether to: When all functions have been attempted: ```sh -# Full status -python tools/decomp-diff.py -u main/Path/To/TU +# Wrapper-first unit summary +python tools/decomp-workflow.py unit -u main/Path/To/TU -# Check for any remaining mismatches -python tools/decomp-diff.py -u main/Path/To/TU -s nonmatching +# Focused remaining mismatches +python tools/decomp-workflow.py diff -u main/Path/To/TU -s nonmatching -t function # Verify no regressions ninja changes ``` +If you need a raw full-symbol dump beyond that, use `decomp-diff.py` only as a final +fallback. + For any remaining nonmatching functions, make one final pass using the implementation or refiner workflow with all context accumulated during the session. diff --git a/.github/skills/implement/SKILL.md b/.github/skills/implement/SKILL.md index 52c063e0b..a81bb47c1 100644 --- a/.github/skills/implement/SKILL.md +++ b/.github/skills/implement/SKILL.md @@ -11,6 +11,19 @@ Your goal is to decompile a specific function: writing C++ source that compiles Collect data from **all** of these sources in parallel where possible. +If the function was not already chosen for you, pick it with the ranking wrapper first: + +```sh +python tools/decomp-workflow.py next --unit main/Path/To/TU --limit 10 +python tools/decomp-workflow.py next --category game --limit 10 +``` + +Prefer low-match, high-remaining targets here. Do not default to near-finished cleanup +functions unless the user explicitly wants a cleanup/refiner pass. + +Use the wrapper flow first throughout this skill. Drop to raw `decomp-context.py` or +`decomp-diff.py` only when the wrapper is missing a specific flag or you are debugging. + ### 1a. decomp-context.py Preferred shortcut: @@ -21,6 +34,9 @@ python tools/decomp-workflow.py function -u main/Path/To/TU -f FunctionName --br python tools/decomp-workflow.py diff -u main/Path/To/TU -d FunctionName ``` +If the shared unit object is missing, the wrapper now rebuilds it automatically before +running `next --unit` / `function` / `diff`. + If you only need one Ghidra view, add `--ghidra-version gc` or `--ghidra-version ps2` to keep the context run faster and shorter. @@ -30,7 +46,7 @@ need the full DWARF body with locals and nested inline info. Add `--brief` when you want a shorter helper view; it trims suggested commands and related-source hints while keeping the core source/status/diff context. -Equivalent manual form: +Equivalent manual fallback: ```sh python tools/decomp-context.py -u main/Path/To/TU -f FunctionName @@ -94,7 +110,7 @@ and assembly: Utilize the dwarf information that you get from the lookup skill heavily. -Don't add any comments. +Don't add explanatory comments during implementation unless you need to document a remaining DWARF mismatch. Don't use any temporary local variables that don't exist in the dwarf. @@ -128,10 +144,10 @@ If the build fails, fix compilation errors first. ```sh # Quick status -python tools/decomp-diff.py -u main/Path/To/TU --search FunctionName +python tools/decomp-workflow.py diff -u main/Path/To/TU --search FunctionName --limit 20 # Full instruction diff -python tools/decomp-diff.py -u main/Path/To/TU -d FunctionName +python tools/decomp-workflow.py diff -u main/Path/To/TU -d FunctionName ``` ### Interpreting the diff @@ -168,7 +184,7 @@ Repeat the build-diff cycle until the diff shows 100% match with no `~` lines: ```sh python tools/decomp-workflow.py build -u main/Path/To/TU -python tools/decomp-diff.py -u main/Path/To/TU -d FunctionName +python tools/decomp-workflow.py diff -u main/Path/To/TU -d FunctionName ``` Every mismatched instruction is a signal — don't settle for "close enough". diff --git a/.github/skills/refiner/SKILL.md b/.github/skills/refiner/SKILL.md index 761a92e37..82b2a2608 100644 --- a/.github/skills/refiner/SKILL.md +++ b/.github/skills/refiner/SKILL.md @@ -18,7 +18,19 @@ approaches that were tried before — instead, apply systematic lateral analysis ## Phase 1: Read the full diff without collapsing -First rebuild the unit normally, then diff: +Preferred shortcut: + +```sh +python tools/decomp-workflow.py diff -u main/Path/To/TU -d FunctionName --no-collapse +``` + +If the shared unit object is missing, the wrapper now rebuilds it automatically before +running `diff`. + +Stay in the wrapper flow for refiner passes unless you hit a wrapper limitation and need a +backend-only option. + +If you need the raw backend form instead of the wrapper, rebuild the unit and then run: ```sh python tools/decomp-workflow.py build -u main/Path/To/TU @@ -37,8 +49,7 @@ Read every instruction pair. Categorize each mismatch: | **Relocation offset** | `@stringBase0` or data offset differs | More string literals will shift this; add them in order | | **Virtual vs direct call** | `bl` vs indirect through vtable | Check const-qualifier; use `GetFoo()` vs `Foo()` | | **Inline vs outlined** | Extra call to helper vs inlined sequence | Force inline by rewriting the expression without calling the helper | -| **Missing `this->` dereference** | Wrong address in load/store | Ensure member access goes through the correct `this` pointer | -| **Loop structure** | `do/while` vs `for` vs `while` | Try all three forms; compiler emits different branch sequences | +| **Loop structure** | Guarded `do/while` from Ghidra or mismatched loop branches | Rewrite to the natural source form suggested by the control flow; in particular, a guarded `do/while` often needs to become a plain `for` loop | ## Phase 2: Systematic permutation strategies @@ -90,22 +101,18 @@ python tools/lookup.py ./symbols/Dwarf struct bMath Replace hand-rolled sequences with the correct inline call. -### 2e. Initializer list order +### 2e. Constructor initialization placement -Constructors compiled with GCC are sensitive to initializer list order. The DWARF -shows the canonical member order. If yours differs, reorder. +Only do this for constructors. Compare which members are initialized in the +initializer list versus the function body, and in what order. Initializer-list use +often stabilizes store order, but forcing every member into the initializer list can +also make the match worse. ### 2f. Cast type `static_cast` vs `static_cast` produces different assembly sequences on PPC (see `xoris` pattern in AGENTS.md). Check all casts. -### 2g. Compiler flag hint - -If none of the above resolve the mismatch, note the function address and consider -running `flag_permuter.py`. This is a last resort — only do this for a single -isolated function, not as a general strategy. - ## Phase 3: DWARF verification After any instruction match, verify the DWARF also matches. diff --git a/AGENTS.md b/AGENTS.md index 74c446bc7..b95d62190 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -137,6 +137,8 @@ Prefer this wrapper for routine agent-driven flows instead of manually chaining python tools/decomp-workflow.py health python tools/decomp-workflow.py health --smoke-build main/Speed/Indep/SourceLists/zAnim python tools/decomp-workflow.py health --smoke-dtk main/Speed/Indep/SourceLists/zAnim +python tools/decomp-workflow.py next --category game --limit 10 +python tools/decomp-workflow.py next --unit main/Speed/Indep/SourceLists/zAnim --limit 5 python tools/decomp-workflow.py build -u main/Speed/Indep/SourceLists/zAnim python tools/decomp-workflow.py diff -u main/Speed/Indep/SourceLists/zAnim -d FindIOWin python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zAnim -f FindIOWin @@ -148,6 +150,31 @@ python tools/decomp-workflow.py unit -u main/Speed/Indep/SourceLists/zAnim --sea The wrapper keeps the existing tools as the source of truth. It is intended to reduce repeated command chaining and to standardize routine worktree preflight checks for agents. +`next --unit`, `function`, `unit`, and `diff` now also auto-build the unit's shared `.o` +once when that output is missing, so wrapper-first inspection works more often on +half-prepared worktrees. + +In normal agent work, use the wrapper commands first. Drop to the raw backend tools only +when you specifically need a backend-only flag, are debugging a wrapper/backend discrepancy, +or are doing a final exhaustive check that the wrapper does not expose directly. + +When you do not already have a specific target in mind, start with `next` or `unit` +instead of picking functions in raw objdiff order. `next` is the fastest way to answer +"what should I work on now?": + +- `--strategy balanced` favors functions with large remaining gains, penalizes + high-match cleanup work, de-prioritizes obvious init/setup sinkholes, and prefers + targets with usable source context. +- `--strategy impact` is the blunt "largest unmatched byte loss first" view. +- `--strategy quick-wins` biases toward low-match functions where getting the first + 40-60% tends to be much faster than squeezing a polished function from 95% to 100%. + It should not be treated as a cleanup/polish mode. + +When choosing what to work on next, bias toward low-match, high-remaining functions. +As a rule of thumb, getting a function from 0% to 80% is usually much faster and higher +leverage than pushing a function from 90% to 100%. +Leave 85%+ cleanup and refiner-style polish for deliberate cleanup passes unless the +user explicitly wants that work or the function is directly blocking something else. `function` is the preferred context-gathering entrypoint: it bundles source excerpt, objdiff status/diff, compact GC DWARF function lookup, and Ghidra output in one run. @@ -167,8 +194,9 @@ repeated manual steps for future agents. On a newly updated or unusual worktree, run `python tools/decomp-workflow.py health` first. If it reports missing generated files such as `objdiff.json` or `build.ninja`, run `python configure.py` in that worktree before using the decomp wrappers. `health` also -checks the debug-symbol side of the setup now: GC/PS2 `symbols.txt`, GC DWARF lookup, -PS2 type lookup, and the GC debug line mapping. +checks the debug-symbol side of the setup now, plus the wrapper binaries themselves: +`objdiff-cli`, `dtk`, GC/PS2 `symbols.txt`, GC DWARF lookup, PS2 type lookup, and the +GC debug line mapping. ### find-symbol.py — Check for existing definitions before declaring new types diff --git a/README.md b/README.md index b74f298fd..70bb79dde 100644 --- a/README.md +++ b/README.md @@ -87,15 +87,15 @@ sudo xattr -rd com.apple.quarantine '/Applications/Wine Crossover.app' ``` - Extracting the binaries - - GC: Extract `NFSMWRELEASE.ELF`, copy it into `orig/GOWE69` and convert it into a DOL using the following command: + - GC: Extract `NFSMWRELEASE.ELF`, copy it into `orig/GOWE69`, and convert it into a DOL using the following command: ```sh - ./build/tools/dtk elf2dol ./orig/GOWE69/NFSMWRELEASE.elf ./orig/GOWE69/sys/main.dol + ./build/tools/dtk elf2dol ./orig/GOWE69/NFSMWRELEASE.ELF ./orig/GOWE69/sys/main.dol ``` - Xbox 360: simply rename `NfsMWEuropeGerMilestone.exe` to `NfsMWEuropeGerMilestone.xex` and copy it to `./orig/EUROPEGERMILESTONE/` - - PS2: Copy `NSF.ELF` to `./orig/SLES-53558-A124/` + - PS2: Copy `NFS.ELF` to `./orig/SLES-53558-A124/` - Sharing large assets across git worktrees @@ -108,8 +108,8 @@ sudo xattr -rd com.apple.quarantine '/Applications/Wine Crossover.app' ``` This shares the ignored debug/tool assets under the git common directory, including - extracted `orig/*` contents, `symbols/*`, root ELF / MAP files, and downloaded - tool binaries under `build/`. It intentionally does **not** share `build.ninja`, + extracted `orig/*` contents, `symbols/*`, and downloaded tool binaries under + `build/`. It intentionally does **not** share `build.ninja`, `objdiff.json`, `compile_commands.json`, or per-worktree object outputs. After linking shared assets into a worktree, regenerate that worktree's local build @@ -160,7 +160,7 @@ For PS2 binaries the deprecated version gives nicer results. ## symbols/mw_dwarfdump.nothpp ``` -./build/tools/dtk dwarf dump ./orig/NFSMWRELEASE.ELF -o ./symbols/mw_dwarfdump.nothpp +./build/tools/dtk dwarf dump ./orig/GOWE69/NFSMWRELEASE.ELF -o ./symbols/mw_dwarfdump.nothpp ``` This is the dwarf dump of the whole GC version of the game. The `.nothpp` extension is to make sure that the IDE doesn't parse it on weak laptops. This should be your main source of information. It even shows which inlines a function calls. Namespaces only show up in generics. For regular functions and variables you can search `symbols.txt` for the right name. @@ -204,13 +204,19 @@ This file contains bChunk chunk IDs. - Run ``` - ./build/tools/dtk dwarf dump ./orig/NFSMWRELEASE.ELF -o ./symbols/mw_dwarfdump.nothpp + ./build/tools/dtk dwarf dump ./orig/GOWE69/NFSMWRELEASE.ELF -o ./symbols/mw_dwarfdump.nothpp python ./tools/split_dwarf_info.py ./symbols/mw_dwarfdump.nothpp ./symbols/Dwarf ``` - Set up the project and Ghidra as described above (take the Ghidra repo from the decomp.dev server, you'll have to request access). -- In Ghidra, checkout `mw/GOWE69/NFSMWRELEASE.ELF` and `mw/SLES-53558/NFS.ELF.fixed` and copy them both into the root of the project. Rename `NFS.ELF.fixed` to `NFS.ELF`. +- Import the ELF files from `orig/` into the Ghidra project so the program names stay + `NFSMWRELEASE.ELF` and `NFS.ELF`: + + ```sh + ghidra import ./orig/GOWE69/NFSMWRELEASE.ELF + ghidra import ./orig/SLES-53558-A124/NFS.ELF + ``` - Download [ghidra-cli](https://github.com/akiselev/ghidra-cli) and put it into your path. diff --git a/tools/_common.py b/tools/_common.py index 976fcd649..db992bd8b 100644 --- a/tools/_common.py +++ b/tools/_common.py @@ -7,13 +7,19 @@ import subprocess import sys import tempfile -from typing import Any, Dict, Optional, Sequence +from typing import Any, Dict, List, Optional, Sequence SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) ROOT_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, "..")) BUILD_NINJA = os.path.join(ROOT_DIR, "build.ninja") OBJDIFF_JSON = os.path.join(ROOT_DIR, "objdiff.json") +OBJDIFF_DEFAULT_CONFIG_ARGS = [ + "-c", + "functionRelocDiffs=none", + "-c", + "ppc.calculatePoolRelocations=false", +] class ToolError(RuntimeError): @@ -112,6 +118,144 @@ def apply_base_obj_override( return found +def classify_objdiff_symbol(sym: Dict[str, Any]) -> str: + """Classify an objdiff symbol as 'function', 'object', or 'section'.""" + kind = sym.get("kind", "") + if kind == "SYMBOL_FUNCTION": + return "function" + if kind == "SYMBOL_OBJECT": + return "object" + if kind == "SYMBOL_SECTION": + return "section" + if "instructions" in sym: + return "function" + if "data_diff" in sym: + return "object" + return "unknown" + + +def objdiff_symbol_section(sym: Dict[str, Any], sections: List[Dict[str, Any]]) -> str: + """Determine which section a symbol belongs to.""" + name = sym.get("name", "") + if name.startswith("[."): + return name[1:].split("-")[0].rstrip("]") + if classify_objdiff_symbol(sym) == "function": + return ".text" + for sec in sections: + kind = sec.get("kind", "") + if kind in ("SECTION_DATA", "SECTION_BSS"): + return sec["name"] + return ".data" + + +def estimate_unmatched_bytes( + size: int, match_percent: Optional[float], status: str +) -> int: + """Estimate remaining unmatched bytes for a symbol.""" + size = max(int(size), 0) + if size == 0: + return 0 + if status in ("missing", "extra", "no_target", "no_source"): + return size + if status in ("match", "matching", "complete"): + return 0 + if match_percent is None: + return size + + clamped = max(0.0, min(float(match_percent), 100.0)) + if clamped >= 100.0: + return 0 + + unmatched = int(round(size * (100.0 - clamped) / 100.0)) + unmatched = max(1, unmatched) + return min(size, unmatched) + + +def build_objdiff_symbol_rows(diff_data: Dict[str, Any]) -> List[Dict[str, Any]]: + """Build normalized overview rows from objdiff JSON for both left and right symbols.""" + left_syms = diff_data.get("left", {}).get("symbols", []) + right_syms = diff_data.get("right", {}).get("symbols", []) + left_sections = diff_data.get("left", {}).get("sections", []) + right_sections = diff_data.get("right", {}).get("sections", []) + + rows: List[Dict[str, Any]] = [] + + for sym in left_syms: + sym_type = classify_objdiff_symbol(sym) + if sym_type in ("section", "unknown"): + continue + + size = int(sym.get("size", "0")) + if size == 0: + continue + + name = sym.get("demangled_name", sym.get("name", "?")) + section = objdiff_symbol_section(sym, left_sections) + target_symbol = sym.get("target_symbol") + match_percent = sym.get("match_percent") + + if target_symbol is None: + status = "missing" + elif match_percent is not None and match_percent >= 100.0: + status = "match" + elif match_percent is not None: + status = "nonmatching" + else: + status = "missing" + + rows.append( + { + "status": status, + "match_percent": match_percent, + "size": size, + "unmatched_bytes_est": estimate_unmatched_bytes( + size, match_percent, status + ), + "section": section, + "type": sym_type, + "name": name, + "symbol_name": sym.get("name", "?"), + "side": "left", + "left_symbol": sym, + "right_symbol": right_syms[target_symbol] + if target_symbol is not None and target_symbol < len(right_syms) + else None, + } + ) + + for sym in right_syms: + if sym.get("target_symbol") is not None: + continue + + sym_type = classify_objdiff_symbol(sym) + if sym_type in ("section", "unknown"): + continue + + size = int(sym.get("size", "0")) + if size == 0: + continue + + name = sym.get("demangled_name", sym.get("name", "?")) + section = objdiff_symbol_section(sym, right_sections) + rows.append( + { + "status": "extra", + "match_percent": None, + "size": size, + "unmatched_bytes_est": estimate_unmatched_bytes(size, None, "extra"), + "section": section, + "type": sym_type, + "name": name, + "symbol_name": sym.get("name", "?"), + "side": "right", + "left_symbol": None, + "right_symbol": sym, + } + ) + + return rows + + def run_objdiff_json( objdiff_cli: str, unit_name: str, @@ -123,6 +267,7 @@ def run_objdiff_json( ensure_project_prereqs() cmd = [objdiff_cli, "diff"] + cmd.extend(OBJDIFF_DEFAULT_CONFIG_ARGS) if extra_args: cmd.extend(extra_args) cmd.extend(["-u", unit_name, "-o", "-", "--format", "json"]) @@ -141,12 +286,19 @@ def run_objdiff_json( cwd = tmpdir try: - result = subprocess.run( - cmd, - cwd=cwd, - text=True, - capture_output=True, - ) + try: + result = subprocess.run( + cmd, + cwd=cwd, + text=True, + capture_output=True, + ) + except FileNotFoundError: + raise ToolError( + f"Missing objdiff-cli: {objdiff_cli}\n" + "Hint: ensure build/tools is populated in this worktree " + "(for example via the shared worktree assets setup)." + ) if result.returncode != 0: stderr = result.stderr hint_lines = [] diff --git a/tools/decomp-context.py b/tools/decomp-context.py index 637c8f35f..32a35fcae 100644 --- a/tools/decomp-context.py +++ b/tools/decomp-context.py @@ -24,7 +24,14 @@ import subprocess import sys from typing import Any, Dict, List, Optional, Tuple -from _common import ROOT_DIR, ToolError, fail, load_objdiff_config, run_objdiff_json +from _common import ( + ROOT_DIR, + ToolError, + build_objdiff_symbol_rows, + fail, + load_objdiff_config, + run_objdiff_json, +) script_dir = os.path.dirname(os.path.realpath(__file__)) root_dir = ROOT_DIR @@ -43,6 +50,10 @@ RELATED_SOURCE_LIMIT = 8 BRIEF_RELATED_SOURCE_LIMIT = 3 BRIEF_SUGGESTED_COMMAND_LIMIT = 2 +LOW_UNMATCHED_HINT_THRESHOLD = 192 +HIGH_MATCH_HINT_THRESHOLD = 85.0 +LARGER_TARGET_RATIO = 3 +LARGER_TARGET_MIN_BYTES = 192 def load_project_config() -> Dict[str, Any]: @@ -338,6 +349,42 @@ def extract_source_for_function( return header + "".join(excerpt) +def source_excerpt_is_useful(source_path: str, excerpt: str) -> bool: + lines = [line.strip() for line in excerpt.splitlines()] + content_lines = [ + line + for line in lines + if line and not line.startswith("// Lines ") + ] + if not content_lines: + return False + + include_like = sum( + 1 + for line in content_lines + if line.startswith("#include") + or line.startswith("#pragma") + or line.startswith("#if") + or line.startswith("#endif") + or line.startswith("#define") + ) + + source_list_path = source_path.replace("\\", "/") + if "SourceLists/" in source_list_path: + if include_like == len(content_lines): + return False + if include_like >= max(2, len(content_lines) - 1): + return False + + useful_tokens = ("{", "}", "if ", "for ", "while ", "::", "return ", "=") + if include_like == len(content_lines) and not any( + token in excerpt for token in useful_tokens + ): + return False + + return True + + def extract_source_around_line( source_path: str, line_number: int, context_lines: int = SOURCE_CONTEXT_LINES ) -> Optional[str]: @@ -904,6 +951,114 @@ def format_suggested_commands( return "\n".join(lines) +def unit_progress_category(unit: Dict[str, Any]) -> Optional[str]: + categories = unit.get("metadata", {}).get("progress_categories", []) + if not categories: + return None + if len(categories) > 1: + return str(categories[1]) + return str(categories[0]) + + +def format_priority_guidance( + unit_name: str, + unit: Dict[str, Any], + diff_data: Optional[Dict[str, Any]], + current_symbol_name: Optional[str], + brief: bool = False, +) -> Optional[str]: + if diff_data is None or current_symbol_name is None: + return None + + function_rows = [ + row + for row in build_objdiff_symbol_rows(diff_data) + if row["side"] == "left" + and row["type"] == "function" + and row["status"] in ("missing", "nonmatching") + and row["unmatched_bytes_est"] > 0 + ] + if not function_rows: + return None + + function_rows.sort( + key=lambda row: (-row["unmatched_bytes_est"], -row["size"], row["name"].lower()) + ) + + current_row = None + for row in function_rows: + if row["symbol_name"] == current_symbol_name: + current_row = row + break + if current_row is None: + return None + + current_unmatched = int(current_row["unmatched_bytes_est"]) + current_match = current_row.get("match_percent") + if ( + current_unmatched > LOW_UNMATCHED_HINT_THRESHOLD + and (current_match is None or float(current_match) < HIGH_MATCH_HINT_THRESHOLD) + ): + return None + + unit_top = function_rows[0] + larger_unit_target = None + for row in function_rows: + if row["symbol_name"] == current_symbol_name: + continue + if ( + int(row["unmatched_bytes_est"]) >= LARGER_TARGET_MIN_BYTES + and int(row["unmatched_bytes_est"]) >= current_unmatched * LARGER_TARGET_RATIO + ): + larger_unit_target = row + break + + lines: List[str] = [] + if current_match is not None and float(current_match) >= HIGH_MATCH_HINT_THRESHOLD: + lines.append( + f"- Current function is already in cleanup/polish territory " + f"(~{current_unmatched}B remaining, {float(current_match):.1f}% matched)." + ) + else: + lines.append( + f"- Current function is already low-byte cleanup territory (~{current_unmatched}B remaining)." + ) + + if larger_unit_target is not None: + larger_match = larger_unit_target.get("match_percent") + larger_match_detail = "" + if larger_match is not None: + larger_match_detail = f", {float(larger_match):.1f}% matched" + lines.append( + f"- This unit still has a much larger target: " + f"{larger_unit_target['name']} " + f"(~{larger_unit_target['unmatched_bytes_est']}B remaining{larger_match_detail})." + ) + lines.append( + f"- Try: python tools/decomp-workflow.py function -u {unit_name} " + f"-f '{larger_unit_target['name']}'" + ) + else: + lines.append( + f"- This unit's largest remaining function is only ~{unit_top['unmatched_bytes_est']}B " + f"({unit_top['name']})." + ) + category = unit_progress_category(unit) + next_cmd = "python tools/decomp-workflow.py next --strategy balanced --limit 10" + if category: + next_cmd = ( + "python tools/decomp-workflow.py next " + f"--category {category} --strategy balanced --limit 10" + ) + lines.append(f"- For larger gains elsewhere, rerun: {next_cmd}") + + if brief: + if larger_unit_target is not None: + return "\n".join([lines[0], lines[2]]) + return "\n".join([lines[0], lines[2]]) + return "\n".join(lines) + + def main(): parser = argparse.ArgumentParser( description="Gather context for decomp function matching" @@ -992,7 +1147,11 @@ def main(): if not args.no_source: if source_path: excerpt = extract_source_for_function(source_path, right_sym) - if excerpt is not None and excerpt.strip(): + if ( + excerpt is not None + and excerpt.strip() + and source_excerpt_is_useful(source_path, excerpt) + ): label = "Source" if right_sym and right_sym.get("instructions"): # Check if we actually got line info @@ -1077,6 +1236,16 @@ def main(): ), ) + priority_guidance = format_priority_guidance( + args.unit, + unit, + diff_data, + mangled, + brief=args.brief, + ) + if priority_guidance: + print_section("Higher-impact targets right now", priority_guidance) + if not source_was_useful and args.no_source: print_section( "Related Source Files", diff --git a/tools/decomp-diff.py b/tools/decomp-diff.py index 0f3dba9e8..9f4653147 100644 --- a/tools/decomp-diff.py +++ b/tools/decomp-diff.py @@ -14,12 +14,16 @@ """ import argparse -import json import os -import subprocess import sys from typing import Any, Dict, List, Optional, Tuple -from _common import ROOT_DIR, ToolError, fail, run_objdiff_json +from _common import ( + ROOT_DIR, + ToolError, + build_objdiff_symbol_rows, + fail, + run_objdiff_json, +) root_dir = ROOT_DIR OBJDIFF_CLI = os.path.join(root_dir, "build", "tools", "objdiff-cli") @@ -30,45 +34,9 @@ def run_objdiff(unit: str, base_obj: Optional[str] = None) -> Dict[str, Any]: OBJDIFF_CLI, unit, base_obj=base_obj, - extra_args=["-c", "functionRelocDiffs=none"], root_dir=root_dir, ) - -def classify_symbol(sym: Dict[str, Any]) -> str: - """Classify a symbol as 'function', 'object', or 'section'.""" - kind = sym.get("kind", "") - if kind == "SYMBOL_FUNCTION": - return "function" - if kind == "SYMBOL_OBJECT": - return "object" - if kind == "SYMBOL_SECTION": - return "section" - # Fallback for external/relocation-only symbols (empty kind) - if "instructions" in sym: - return "function" - if "data_diff" in sym: - return "object" - return "unknown" - - -def symbol_section(sym: Dict[str, Any], sections: List[Dict[str, Any]]) -> str: - """Determine which section a symbol belongs to.""" - # For named section data symbols like [.rodata-0] - name = sym.get("name", "") - if name.startswith("[."): - return name[1:].split("-")[0].rstrip("]") - # Use content type as best indicator - if classify_symbol(sym) == "function": - return ".text" - # Check sections for data - for sec in sections: - kind = sec.get("kind", "") - if kind in ("SECTION_DATA", "SECTION_BSS"): - return sec["name"] - return ".data" - - def fuzzy_match(pattern: str, name: str) -> bool: """Case-insensitive substring match.""" return pattern.lower() in name.lower() @@ -94,72 +62,43 @@ def describe_pair_status( def build_overview(data: Dict[str, Any], args) -> None: """Print overview of all symbols in a unit.""" - left_syms = data.get("left", {}).get("symbols", []) - right_syms = data.get("right", {}).get("symbols", []) - left_sections = data.get("left", {}).get("sections", []) - right_sections = data.get("right", {}).get("sections", []) - - rows = [] - - # Process left (original/target) symbols - for i, sym in enumerate(left_syms): - sym_type = classify_symbol(sym) - # Skip section symbols and external references - if sym_type in ("section", "unknown"): - continue - # Skip symbols without size - size = int(sym.get("size", "0")) - if size == 0: - continue - - name = sym.get("demangled_name", sym.get("name", "?")) - section = symbol_section(sym, left_sections) - ts = sym.get("target_symbol") - mp = sym.get("match_percent") - - if ts is None: - status = "missing" - match_str = "-" - elif mp is not None and mp >= 100.0: - status = "match" - match_str = f"{mp:.1f}%" - elif mp is not None: - status = "nonmatching" - match_str = f"{mp:.1f}%" - else: - status = "missing" - match_str = "-" - - rows.append((status, match_str, size, section, sym_type, name, "left")) - - # Process right (decomp/base) symbols that aren't targeted (extra) - for i, sym in enumerate(right_syms): - if sym.get("target_symbol") is not None: - continue # Already covered via left side - sym_type = classify_symbol(sym) - if sym_type in ("section", "unknown"): - continue - size = int(sym.get("size", "0")) - if size == 0: - continue - name = sym.get("demangled_name", sym.get("name", "?")) - section = symbol_section(sym, right_sections) - rows.append(("extra", "-", size, section, sym_type, name, "right")) + rows = build_objdiff_symbol_rows(data) # Apply filters if args.type: types = set(t.strip() for t in args.type.split(",")) - rows = [r for r in rows if r[4] in types] + rows = [r for r in rows if r["type"] in types] if args.status: - statuses = set(s.strip() for s in args.status.split(",")) - rows = [r for r in rows if r[0] in statuses] + status_aliases = {"matching": "match", "matched": "match"} + statuses = set( + status_aliases.get(s.strip(), s.strip()) for s in args.status.split(",") + ) + rows = [r for r in rows if r["status"] in statuses] if args.section: - rows = [r for r in rows if r[3] == args.section] + rows = [r for r in rows if r["section"] == args.section] if args.search: - rows = [r for r in rows if fuzzy_match(args.search, r[5])] + rows = [r for r in rows if fuzzy_match(args.search, r["name"])] + + if args.sort == "unmatched": + rows.sort( + key=lambda r: (-r["unmatched_bytes_est"], -r["size"], r["name"].lower()) + ) + elif args.sort == "size": + rows.sort(key=lambda r: (-r["size"], r["name"].lower())) + elif args.sort == "match": + rows.sort( + key=lambda r: ( + r["match_percent"] is None, + r["match_percent"] if r["match_percent"] is not None else 101.0, + -r["size"], + r["name"].lower(), + ) + ) + elif args.sort == "name": + rows.sort(key=lambda r: r["name"].lower()) if args.limit is not None: rows = rows[: args.limit] @@ -169,10 +108,20 @@ def build_overview(data: Dict[str, Any], args) -> None: return # Print header - print(f"{'STATUS':<10} {'MATCH':>7} {'SIZE':>6} {'SECTION':<10} {'NAME'}") - print("-" * 80) - for status, match_str, size, section, sym_type, name, side in rows: - print(f"{status:<10} {match_str:>7} {size:>5}B {section:<10} {name}") + print( + f"{'STATUS':<10} {'MATCH':>7} {'UNMATCH':>8} {'SIZE':>6} {'SECTION':<10} {'NAME'}" + ) + print("-" * 96) + for row in rows: + match_str = ( + f"{row['match_percent']:.1f}%" + if row["match_percent"] is not None + else "-" + ) + print( + f"{row['status']:<10} {match_str:>7} {row['unmatched_bytes_est']:>7}B " + f"{row['size']:>5}B {row['section']:<10} {row['name']}" + ) def render_instruction( @@ -458,6 +407,12 @@ def main(): type=int, help="Limit overview output to the first N matching rows", ) + parser.add_argument( + "--sort", + choices=["objdiff", "unmatched", "size", "match", "name"], + default="objdiff", + help="Sort overview rows (default: objdiff order)", + ) # Diff options parser.add_argument( diff --git a/tools/decomp-status.py b/tools/decomp-status.py index 8741b9675..8dcf5d6c7 100644 --- a/tools/decomp-status.py +++ b/tools/decomp-status.py @@ -18,7 +18,14 @@ import os import sys from typing import Any, Dict, List, Optional, Tuple -from _common import ROOT_DIR, ToolError, fail, load_objdiff_config, run_objdiff_json +from _common import ( + ROOT_DIR, + ToolError, + build_objdiff_symbol_rows, + fail, + load_objdiff_config, + run_objdiff_json, +) root_dir = ROOT_DIR @@ -41,9 +48,17 @@ def run_objdiff(unit_name: str) -> Tuple[Optional[Dict[str, Any]], Optional[str] def analyze_unit(diff_data: Dict[str, Any]) -> Dict[str, Any]: """Analyze a unit's diff data and return summary statistics.""" left = diff_data.get("left", {}) - right = diff_data.get("right", {}) - left_syms = left.get("symbols", []) left_sections = left.get("sections", []) + symbol_rows = build_objdiff_symbol_rows(diff_data) + function_rows = [r for r in symbol_rows if r["type"] == "function" and r["side"] == "left"] + unmatched_function_rows = [ + r + for r in function_rows + if r["status"] in ("missing", "nonmatching") and r["unmatched_bytes_est"] > 0 + ] + unmatched_function_rows.sort( + key=lambda r: (-r["unmatched_bytes_est"], -r["size"], r["name"].lower()) + ) # Section-level stats section_stats = {} @@ -65,17 +80,17 @@ def analyze_unit(diff_data: Dict[str, Any]) -> Dict[str, Any]: matching_funcs = 0 total_code_size = 0 matching_code_size = 0 + remaining_code_size_est = 0 - for sym in left_syms: - if "instructions" not in sym: - continue - size = int(sym.get("size", "0")) + for row in function_rows: + size = row["size"] total_funcs += 1 total_code_size += size - mp = sym.get("match_percent") + mp = row["match_percent"] if mp is not None and mp >= 100.0: matching_funcs += 1 matching_code_size += size + remaining_code_size_est += row["unmatched_bytes_est"] text_section = section_stats.get(".text", {}) text_match = text_section.get("match_percent") @@ -86,9 +101,20 @@ def analyze_unit(diff_data: Dict[str, Any]) -> Dict[str, Any]: "matching_functions": matching_funcs, "total_code_size": total_code_size, "matching_code_size": matching_code_size, + "remaining_code_size_est": remaining_code_size_est, "text_match_percent": text_match, "text_size": text_size, "sections": section_stats, + "top_unmatched_functions": [ + { + "name": row["name"], + "status": row["status"], + "size": row["size"], + "match_percent": row["match_percent"], + "unmatched_bytes_est": row["unmatched_bytes_est"], + } + for row in unmatched_function_rows[:10] + ], } @@ -105,6 +131,12 @@ def main(): dest="json_output", help="Output as JSON", ) + parser.add_argument( + "--top-unmatched", + type=int, + metavar="N", + help="Show the top N unmatched functions by estimated unmatched bytes", + ) args = parser.parse_args() config = load_project_config() @@ -180,7 +212,9 @@ def main(): grand_matching_funcs = 0 grand_total_size = 0 grand_matching_size = 0 + grand_remaining_size_est = 0 cat_summaries = {} + top_unmatched_candidates = [] for cat, entries in sorted(results.items()): print(f"\n=== {cat} ===") @@ -206,13 +240,26 @@ def main(): mf = entry.get("matching_functions", 0) tm = entry.get("text_match_percent") tm_str = f"{tm:.1f}%" if tm is not None else "?" + remain = entry.get("remaining_code_size_est", 0) print( - f" {display_name:<50s} .text {tm_str:>6s} ({mf}/{tf} functions)" + f" {display_name:<50s} .text {tm_str:>6s} ~{remain:>6}B rem ({mf}/{tf} functions)" ) cat_funcs += tf cat_matching += mf cat_size += entry.get("total_code_size", 0) cat_matching_size += entry.get("matching_code_size", 0) + for candidate in entry.get("top_unmatched_functions", []): + top_unmatched_candidates.append( + { + "unit": name, + "display_unit": display_name, + "name": candidate["name"], + "status": candidate["status"], + "size": candidate["size"], + "match_percent": candidate["match_percent"], + "unmatched_bytes_est": candidate["unmatched_bytes_est"], + } + ) elif status == "no_source": if args.unit: print(f" {display_name:<50s} no source file") @@ -235,11 +282,17 @@ def main(): "matching": cat_matching, "complete_units": complete_count, "total_units": len(entries), + "remaining_code_size_est": sum( + e.get("remaining_code_size_est", 0) + for e in entries + if e.get("status") == "incomplete" + ), } grand_total_funcs += cat_funcs grand_matching_funcs += cat_matching grand_total_size += cat_size grand_matching_size += cat_matching_size + grand_remaining_size_est += cat_summaries[cat]["remaining_code_size_est"] if not args.unit: print(f"\n=== Summary ===") @@ -251,14 +304,40 @@ def main(): pct = f"{matching/total*100:.1f}%" if total > 0 else "N/A" print( f" {cat:<15s} {pct:>6s} ({matching}/{total} functions) " - f"[{complete}/{total_units} units complete]" + f"[{complete}/{total_units} units complete, ~{s['remaining_code_size_est']}B rem]" ) if grand_total_funcs > 0: grand_pct = grand_matching_funcs / grand_total_funcs * 100 print( - f"\n Total: {grand_pct:.1f}% ({grand_matching_funcs}/{grand_total_funcs} functions)" + f"\n Total: {grand_pct:.1f}% ({grand_matching_funcs}/{grand_total_funcs} functions, ~{grand_remaining_size_est}B rem)" ) + if args.top_unmatched: + top_unmatched_candidates.sort( + key=lambda r: (-r["unmatched_bytes_est"], -r["size"], r["name"].lower()) + ) + if args.top_unmatched > 0: + top_unmatched_candidates = top_unmatched_candidates[: args.top_unmatched] + + print("\n=== Top Unmatched Functions ===") + if not top_unmatched_candidates: + print("No unmatched functions found for the given filters.") + else: + print( + f"{'UNMATCH':>8} {'MATCH':>7} {'SIZE':>6} {'UNIT':<34} NAME" + ) + print("-" * 110) + for candidate in top_unmatched_candidates: + match_str = ( + f"{candidate['match_percent']:.1f}%" + if candidate["match_percent"] is not None + else "-" + ) + print( + f"{candidate['unmatched_bytes_est']:>7}B {match_str:>7} " + f"{candidate['size']:>5}B {candidate['display_unit']:<34} {candidate['name']}" + ) + if __name__ == "__main__": main() diff --git a/tools/decomp-workflow.py b/tools/decomp-workflow.py index c4dc08b39..bca622ec0 100644 --- a/tools/decomp-workflow.py +++ b/tools/decomp-workflow.py @@ -18,12 +18,14 @@ """ import argparse +import json import re import os +import shlex import subprocess import sys import tempfile -from typing import List, Optional, Sequence +from typing import Any, Dict, List, Optional, Sequence from _common import ( BUILD_NINJA, OBJDIFF_JSON, @@ -40,6 +42,7 @@ TOOLS_DIR = os.path.join(ROOT_DIR, "tools") PS2_TYPES = os.path.join(ROOT_DIR, "symbols", "PS2", "PS2_types.nothpp") DTK = os.path.join(ROOT_DIR, "build", "tools", "dtk") +OBJDIFF_CLI = os.path.join(ROOT_DIR, "build", "tools", "objdiff-cli") GC_SYMBOLS = os.path.join(ROOT_DIR, "config", "GOWE69", "symbols.txt") PS2_SYMBOLS = os.path.join(ROOT_DIR, "config", "SLES-53558-A124", "symbols.txt") GC_DWARF = os.path.join(ROOT_DIR, "symbols", "Dwarf") @@ -49,12 +52,15 @@ DEBUG_SYMBOL_PROBE_MANGLED = "UpdateAll__6Cameraf" DEBUG_SYMBOL_PROBE_DEMANGLED = "Camera::UpdateAll(float)" DEBUG_SYMBOL_PROBE_GC_ADDR = "0x80065A84" +LOW_MATCH_PRIORITY_THRESHOLD = 60.0 +VERY_LOW_MATCH_PRIORITY_THRESHOLD = 40.0 +HIGH_MATCH_CLEANUP_THRESHOLD = 85.0 +VERY_HIGH_MATCH_CLEANUP_THRESHOLD = 95.0 SHARED_ASSET_REQUIREMENTS = [ (os.path.join("build", "tools"), "downloaded tooling"), (os.path.join("orig", "GOWE69", "NFSMWRELEASE.ELF"), "GameCube original ELF"), (os.path.join("orig", "SLES-53558-A124", "NFS.ELF"), "PS2 original ELF"), - (os.path.join("orig", "SLES-53558-A124", "NFS.MAP"), "PS2 MAP"), (os.path.join("symbols", "Dwarf"), "DWARF dump"), ] @@ -138,13 +144,42 @@ def get_unit_build_output(unit_name: str) -> str: return make_abs(target) or target -def build_shared_unit(unit_name: str) -> str: +def build_shared_unit(unit_name: str, quiet: bool = False) -> str: ensure_decomp_prereqs() target = get_unit_build_target(unit_name) - run_stream(["ninja", target]) + cmd = ["ninja", target] + if quiet: + result = subprocess.run( + cmd, + cwd=ROOT_DIR, + text=True, + capture_output=True, + ) + if result.returncode != 0: + raise WorkflowError( + format_failure(cmd, result.returncode, result.stdout, result.stderr) + ) + else: + run_stream(cmd) return get_unit_build_output(unit_name) +def ensure_shared_unit_output(unit_name: str) -> str: + output_path = get_unit_build_output(unit_name) + if os.path.exists(output_path): + return output_path + + print(f"Shared build missing for {unit_name}; rebuilding...", flush=True) + try: + output_path = build_shared_unit(unit_name, quiet=True) + except WorkflowError as e: + raise WorkflowError( + f"Auto-build failed while preparing shared output for {unit_name}\n{e}" + ) + print(f"Shared build ready: {output_path}", flush=True) + return output_path + + def maybe_remove(path: Optional[str]) -> None: if not path: return @@ -240,6 +275,16 @@ def report(ok: bool, label: str, detail: str) -> None: ) print_section("Tool Checks") + report( + os.path.exists(OBJDIFF_CLI), + "objdiff-cli", + OBJDIFF_CLI if os.path.exists(OBJDIFF_CLI) else "missing (seed build/tools in this worktree)", + ) + report( + os.path.exists(DTK), + "dtk", + DTK if os.path.exists(DTK) else "missing (seed build/tools in this worktree)", + ) try: run_capture(python_tool("decomp-context.py", "--ghidra-check")) report(True, "ghidra", "GC + PS2 programs available") @@ -315,9 +360,133 @@ def report(ok: bool, label: str, detail: str) -> None: raise WorkflowError(f"Health check failed with {failures} issue(s)") +def build_next_candidates( + status_data: Dict[str, Any], strategy: str +) -> List[Dict[str, Any]]: + candidates: List[Dict[str, Any]] = [] + + for category, entries in status_data.items(): + for entry in entries: + unit_name = entry.get("name", "") + display_unit = unit_name.replace("main/", "") + has_source = bool(entry.get("has_source")) + + for func in entry.get("top_unmatched_functions", []): + function_name = func.get("name", "?") + unmatched = int(func.get("unmatched_bytes_est", 0)) + match_percent = func.get("match_percent") + status = func.get("status", "?") + size = int(func.get("size", 0)) + is_static_init = function_name.startswith( + "__static_initialization_and_destruction_0" + ) + is_initializer = "InitializeTables" in function_name or is_static_init + reason = "largest remaining byte win" + score = float(unmatched) + + if strategy == "balanced": + if status == "missing": + score *= 1.15 + reason = "whole implementation still missing; high remaining gain" + elif status == "nonmatching": + score *= 1.05 + reason = "large remaining win" + + if match_percent is not None: + if match_percent >= VERY_HIGH_MATCH_CLEANUP_THRESHOLD: + score *= 0.2 + reason = ( + "near-finished cleanup deprioritized in favor of larger remaining gains" + ) + elif match_percent >= HIGH_MATCH_CLEANUP_THRESHOLD: + score *= 0.45 + reason = ( + "high-match cleanup deprioritized in favor of larger remaining gains" + ) + elif match_percent <= VERY_LOW_MATCH_PRIORITY_THRESHOLD: + score *= 1.25 + reason = "low match % leaves a large amount of work and upside" + elif match_percent <= LOW_MATCH_PRIORITY_THRESHOLD: + score *= 1.1 + reason = "plenty of unmatched work remains here" + + if has_source: + score *= 1.08 + if "source available" not in reason and "deprioritized" not in reason: + reason += " with source available" + if is_initializer: + score *= 0.3 + reason = ( + "large remaining win, but likely lower-priority init/setup work" + ) + elif strategy == "quick-wins": + score = min(float(unmatched), 1024.0) + if status == "missing": + score *= 1.05 + reason = "whole implementation missing; early progress should come quickly" + elif status == "nonmatching": + score *= 1.1 + reason = "partial implementation exists, but this is still early-progress work" + + if match_percent is None: + score *= 1.35 + reason = "0% function; early implementation progress is usually fastest" + elif match_percent <= VERY_LOW_MATCH_PRIORITY_THRESHOLD: + score *= 1.35 + reason = "very low match % leaves fast early-progress gains" + elif match_percent <= LOW_MATCH_PRIORITY_THRESHOLD: + score *= 1.2 + reason = "low match % usually moves faster than cleanup" + elif match_percent >= VERY_HIGH_MATCH_CLEANUP_THRESHOLD: + score *= 0.12 + reason = "near-finished cleanup is slower than fresh early-progress work" + elif match_percent >= HIGH_MATCH_CLEANUP_THRESHOLD: + score *= 0.35 + reason = "high-match cleanup deprioritized; quicker gains exist earlier" + elif match_percent >= 70.0: + score *= 0.75 + reason = "mid/high-match work is less likely to be a quick win" + if has_source: + score *= 1.05 + if "source" not in reason: + reason += " with source available" + if is_initializer: + score *= 0.1 + reason = ( + "deprioritized init/setup work; likely not the fastest useful win" + ) + + candidates.append( + { + "category": category, + "unit": unit_name, + "display_unit": display_unit, + "function": function_name, + "status": status, + "size": size, + "match_percent": match_percent, + "unmatched_bytes_est": unmatched, + "score": score, + "reason": reason, + } + ) + + candidates.sort( + key=lambda c: ( + -c["score"], + c["match_percent"] if c["match_percent"] is not None else -1.0, + -c["unmatched_bytes_est"], + -c["size"], + c["function"].lower(), + ) + ) + return candidates + + def command_function(args: argparse.Namespace) -> None: ensure_decomp_prereqs() print_section(f"Function Workflow: {args.function}") + ensure_shared_unit_output(args.unit) cmd = python_tool("decomp-context.py", "-u", args.unit, "-f", args.function) if args.no_source: cmd.append("--no-source") @@ -337,13 +506,24 @@ def command_function(args: argparse.Namespace) -> None: def command_unit(args: argparse.Namespace) -> None: ensure_decomp_prereqs() print_section(f"Unit Status: {args.unit}") - run_stream(python_tool("decomp-status.py", "--unit", args.unit)) + ensure_shared_unit_output(args.unit) + top_unmatched_limit = args.limit if args.limit is not None else 5 + run_stream( + python_tool( + "decomp-status.py", + "--unit", + args.unit, + "--top-unmatched", + str(top_unmatched_limit), + ) + ) common_args: List[str] = ["-u", args.unit, "-t", "function"] if args.search: common_args.extend(["--search", args.search]) if args.limit is not None: common_args.extend(["--limit", str(args.limit)]) + common_args.extend(["--sort", "unmatched"]) print_section("Missing Functions") run_stream(python_tool("decomp-diff.py", *common_args, "-s", "missing")) @@ -352,6 +532,78 @@ def command_unit(args: argparse.Namespace) -> None: run_stream(python_tool("decomp-diff.py", *common_args, "-s", "nonmatching")) +def command_next(args: argparse.Namespace) -> None: + ensure_decomp_prereqs() + if args.unit: + ensure_shared_unit_output(args.unit) + + cmd = python_tool("decomp-status.py", "--json") + if args.category: + cmd.extend(["--category", args.category]) + if args.unit: + cmd.extend(["--unit", args.unit]) + + result = run_capture(cmd) + status_data = json.loads(result.stdout) + candidates = build_next_candidates(status_data, args.strategy) + if args.limit is not None: + candidates = candidates[: args.limit] + + if not candidates: + if args.unit: + for entries in status_data.values(): + for entry in entries: + if entry.get("name") != args.unit: + continue + status = entry.get("status") + if status == "error": + raise WorkflowError( + f"Unable to rank {args.unit}: {entry.get('error_message', 'objdiff failed')}" + ) + if status == "complete": + raise WorkflowError(f"{args.unit} is already complete.") + if status == "no_source": + raise WorkflowError( + f"{args.unit} has no decomp source configured in objdiff.json." + ) + if status == "no_target": + raise WorkflowError( + f"{args.unit} has no target object configured in objdiff.json." + ) + raise WorkflowError("No unmatched function candidates found for the given filters.") + + if args.command_only: + for candidate in candidates: + print( + "python tools/decomp-workflow.py function " + f"-u {shlex.quote(candidate['unit'])} " + f"-f {shlex.quote(candidate['function'])}" + ) + return + + print_section("Next Targets") + print( + f"{'UNMATCH':>8} {'MATCH':>7} {'SIZE':>6} {'UNIT':<34} {'FUNCTION'}" + ) + print("-" * 120) + for candidate in candidates: + match_str = ( + f"{candidate['match_percent']:.1f}%" + if candidate["match_percent"] is not None + else "-" + ) + print( + f"{candidate['unmatched_bytes_est']:>7}B {match_str:>7} {candidate['size']:>5}B " + f"{candidate['display_unit']:<34} {candidate['function']}" + ) + print(f" why: {candidate['reason']}") + print( + " next: python tools/decomp-workflow.py function " + f"-u {shlex.quote(candidate['unit'])} " + f"-f {shlex.quote(candidate['function'])}" + ) + + def command_build(args: argparse.Namespace) -> None: print(build_shared_unit(args.unit), flush=True) @@ -362,6 +614,7 @@ def command_diff(args: argparse.Namespace) -> None: if args.diff: title += f" / {args.diff}" print_section(title) + ensure_shared_unit_output(args.unit) cmd: List[str] = python_tool("decomp-diff.py", "-u", args.unit) if args.diff: @@ -472,6 +725,34 @@ def build_parser() -> argparse.ArgumentParser: ) unit.set_defaults(func=command_unit) + next_cmd = subparsers.add_parser( + "next", + help="Recommend the highest-impact next functions to work on", + ) + next_cmd.add_argument("--category", help="Filter by progress category") + next_cmd.add_argument("--unit", help="Restrict recommendations to one unit") + next_cmd.add_argument( + "--limit", + type=int, + default=10, + help="Limit the number of suggested targets (default: 10)", + ) + next_cmd.add_argument( + "--strategy", + choices=["impact", "balanced", "quick-wins"], + default="balanced", + help=( + "Ranking strategy for recommendations (default: balanced; quick-wins favors " + "low-match functions where early progress is fastest)" + ), + ) + next_cmd.add_argument( + "--command-only", + action="store_true", + help="Print only follow-up commands, one per line", + ) + next_cmd.set_defaults(func=command_next) + build = subparsers.add_parser( "build", help="Build a unit's shared output with its configured ninja target", diff --git a/tools/project.py b/tools/project.py index ee35a3fa9..6fd752059 100644 --- a/tools/project.py +++ b/tools/project.py @@ -226,9 +226,12 @@ def __init__(self) -> None: self.print_progress_categories: Union[bool, List[str]] = ( True # Print additional progress categories in the CLI progress output ) - self.progress_report_args: Optional[List[str]] = ( - None # Flags to `objdiff-cli report generate` - ) + self.progress_report_args: Optional[List[str]] = [ + "-c", + "functionRelocDiffs=none", + "-c", + "ppc.calculatePoolRelocations=false", + ] # Flags to `objdiff-cli report generate` # Progress fancy printing self.progress_use_fancy: bool = False From d34647fca9f10e145ab4054239412b8bbd9bd24c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 21:19:56 +0100 Subject: [PATCH 162/691] 88.3%: improve ICEMover::Update temporary reduction and NaN check structure Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- DETAILED_FINDINGS.md | 194 ++++++++++++++++++++ src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 31 ++-- src/Speed/Indep/Src/Camera/Movers/Cubic.cpp | 19 +- 3 files changed, 224 insertions(+), 20 deletions(-) create mode 100644 DETAILED_FINDINGS.md diff --git a/DETAILED_FINDINGS.md b/DETAILED_FINDINGS.md new file mode 100644 index 000000000..1310f663b --- /dev/null +++ b/DETAILED_FINDINGS.md @@ -0,0 +1,194 @@ +# DETAILED TECHNICAL FINDINGS - zCamera Structural Analysis + +## KEY FINDINGS BY PATTERN + +### Pattern 1: Pure Register Allocation (Easiest Fixes) + +**ReplayPowerSlideScore (68.0%, 38B unmatched)** +- **Root Cause**: Different floating-point register usage for temporaries + - Left: f1, f13, f12, f0 assignments + - Right: f10, f0, f13, f12 assignments (different order) +- **Key Observation**: ALL arithmetic operations are IDENTICAL + - `fmsubs f0, f0, f11, f12` vs `fmsubs f0, f0, f11, f13` (just register names) + - `fmuls f13, f0, f13` vs `fmuls f0, f0, f12` (semantically equivalent reordering) +- **Branch Pattern Change**: `bso` (branch if summary overflow) → `bgt` + `fmr f1, f10` + - This achieves the same result but uses different registers +- **Fix Strategy**: This is likely a compiler preference for register reuse + - Try: Declaring temporaries in different order might help compiler preference + - Or: Using explicit register constraints with `__attribute__((register(r3)))` + +**ReplayJumpScore (75.6%, 46B unmatched)** +- **Root Cause**: Stack frame shrinking + one register saved removed + - Left: Stack -0x20, saves r30 + - Right: Stack -0x18, no r30 saved (r30 truly not needed) + - r30 used for loading constant in left, but directly loaded in right +- **Key Pattern**: `stmw r30, 0x10(r1)` removed in optimized version + - This means one fewer register to preserve + - Entire function can fit in fewer callee-saved registers +- **Fix Strategy**: + - Remove unnecessary register usage + - Let compiler optimize register pressure + +### Pattern 2: Stack Frame Optimization (Medium Difficulty) + +**FixWorldHeight (72.9%, 62B unmatched)** +- **Left Stack Setup**: + ``` + stwu r1, {-0x30}(r1) # Frame size 0x30 + stmw {r30}, {0x28}(r1) # Save from 0x28 + stw r0, {0x34}(r1) # Stack too small for this offset! + ``` +- **Right Stack Setup**: + ``` + stwu r1, {-0x38}(r1) # Frame size 0x38 (8 bytes more) + stmw {r29}, {0x2c}(r1) # Save from 0x2c (more conservative) + stw r0, {0x3c}(r1) # LR save at end + ``` +- **Key Difference**: Compiler made different frame size choice (0x30 vs 0x38) + - Left tries to be minimal but has register pressure issues + - Right uses more space but cleaner register allocation +- **Register Pressure**: r30→r29 swap due to different saved set +- **Fix Impact**: ~62B - mostly instructions, register assignment + +**GetGroundElevation (71.1%, 57B unmatched)** +- **Similar pattern** to FixWorldHeight +- Setup phase has instructions reordered but achieve same initialization +- Stack frame differences: tempt vector setups in different stack locations + +### Pattern 3: Complex Loop Scheduling (Hard) + +**ChooseGoodSceneCameraTrackIndex (70.8%, 233B unmatched)** +- **Initialization Loop Issue**: + - Left: 13 sequential `stfs f31, offset(r1)` instructions (redundant init) + - Right: Compiler eliminated loop-invariant stores + - Savings: ~52B from removing redundant setup + +- **Major Register Swaps Throughout**: + ``` + r23 ↔ r18 (player car transform matrix reference) + r24 ↔ r23 (temp position) + r30 ↔ f31 (best distance tracking - FLOAT vs INT register!) + ``` + +- **Vector Operations Reordering**: + - Same `eMulVector()` calls but different stack offsets + - Left stores at 0x48-0x54, Right stores at 0x68-0x74 + - Compiler made different stack allocation choices + +- **Why This Matters**: This function has a loop over camera tracks + - Each iteration does similar math + - Compiler optimized variable reuse aggressively + - Left version saves fewer registers but more stack accesses + - Right version uses more registers but cleaner + +### Pattern 4: Extreme Reordering (Very Hard) + +**DebugWorldCameraMover::Update (87.5%, 257B unmatched)** +- **Widespread Register Swaps**: + - r26 ↔ r25 (static global references to Eye/Look) + - f30 ↔ f31 (temporary float calculations) + - r29 ↔ r30 (object pointers) + +- **Large Instruction Reordering**: + ``` + Left sequence: + - stfs f0, 0x28(r1) + - stfs f13, 0x20(r1) + - stfs f12, 0x24(r1) + - bl bVector3 constructor + - (then uses values from stack) + + Right sequence: + - All the stfs mixed with loads/calculations + - No separate bVector3 constructor call + - Direct inline operations + ``` + +- **Missing Constructor Call**: + - Left: `bl bVector3::bVector3(bVector3 const &)` + - Right: Eliminated (inline copy) + - This is 4 instructions saved + +- **Stack Offset Shifting**: + - Left uses 0x80-0x88 region + - Right uses 0x40-0x48 region + - Completely different stack layout for same data + +- **Why It's Hard**: + - This isn't just register allocation + - Compiler inlined a constructor and reordered everything + - Would need source code refactoring or explicit inline attributes + + +## CODE GENERATION DIFFERENCES + +### Mismatch Categories: + +1. **Register Allocation Mismatch**: 20-30 instructions typically + - Different saved register set + - Different temp register usage + - Different immediate loading strategies + +2. **Stack Frame Mismatch**: 8-16 bytes typically + - Different padding strategies + - Different alignment choices + - Different local variable stack layouts + +3. **Instruction Reordering**: Variable, 10-50 instructions + - Load/store interleaving + - Due to compiler scheduler + - Doesn't change semantics + +4. **Optimization Differences**: 20-100+ instructions + - Loop-invariant code motion + - Dead code elimination + - Constant folding + +5. **Inlining Decisions**: 4-40 instructions + - Constructor inlining + - Small function inlining + - Wrapper function elimination + + +## ACTIONABLE RECOMMENDATIONS + +### Tier 1: ~100B Potential (Easy Fixes) +- **ReplayPowerSlideScore**: Focus on register naming conventions + - Add `#pragma clang attribute push (__attribute__((preserve_most)))` + - Or reorder temp variable declarations + +- **ReplayJumpScore**: Remove unused register from saved set + - May require refactoring to not use r30 + +- **FixWorldHeight**: Stack frame sizing + - Try adjusting local variable types or alignment + +### Tier 2: ~200B Potential (Medium Difficulty) +- **ChooseGoodSceneCameraTrackIndex**: + - Add loop initialization guards to prevent optimization + - Restructure vector operation storage pattern + - May need `#pragma unroll(1)` to prevent loop optimization + +- **GetGroundElevation**: + - Similar to FixWorldHeight + +### Tier 3: Defer (Very High Effort) +- **DebugWorldCameraMover::Update**: + - Would require significant refactoring + - Consider focusing on other functions first + - This is likely due to more aggressive -O3 vs -O2 settings + + +## COMPILER FLAGS HYPOTHESIS + +The differences suggest: +- Left compiled with: `-O2` or `-O1` (conservative) +- Right compiled with: `-O3` or `-O4` (aggressive) + link-time optimization (LTO) +- Possibly different `-march=` or `-mtune=` flags + +Evidence: +- Right eliminates loop-invariant code more aggressively +- Right inlines constructors +- Right makes bolder register allocation choices +- Right sometimes uses fewer stack bytes despite same logic + diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index c7dbe3eb6..46b1fb274 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -485,16 +485,14 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { hard_cut = (ICE::KeysShared(pOldCameraData, 1, pCameraData, 0) == 0); } - int es = 0; + bool flush = hard_cut; if (pCameraData != 0 && pICEData == 0 && !(pCameraData->bSmooth & 1)) { - es = 1; + flush = true; } - int ls = 0; if (pICEData != 0 && pCameraData == 0 && !(pICEData->bSmooth & 1)) { - ls = 1; + flush = true; } - int flush = hard_cut | es | ls; pICEData = pCameraData; if (flush) { @@ -580,7 +578,7 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { fov.SetValDesired(static_cast(fov1)); fov.SetdValDesired(fov1_slope); - if (hard_cut || es || ls) { + if (flush) { PSMTX44Identity(*reinterpret_cast(&mHybridToWorld)); ICE::Vector3 *carPos = pCar->GetGeometryPosition(); bCopy(reinterpret_cast(&mHybridToWorld), @@ -842,7 +840,7 @@ ICEAnchor *GetICEAnchor() { void ICEMover::Update(float dT) { ICETrack *p_track = TheICEManager.GetPlaybackTrack(); - bool bLerpLag = false; + bool bLerpLag; UMath::Matrix4 mSceneToWorld; float realTime = TheICEManager.IsUsingRealTime(); @@ -850,17 +848,16 @@ void ICEMover::Update(float dT) { return; } + bLerpLag = false; if (p_track != nullptr) { - int context = p_track->GetContext(); - bLerpLag = (context == 3); + bLerpLag = (p_track->GetContext() == 3); if (p_track->GetContext() != 2) { bMirrorICEData = false; } } bViolatesTopology = false; - bool b_refresh = TheICEManager.RefreshCameraSplines(); - SetDesired(false, b_refresh); + SetDesired(false, TheICEManager.RefreshCameraSplines()); PSMTX44Identity(*reinterpret_cast(&mSceneToWorld)); @@ -880,10 +877,9 @@ void ICEMover::Update(float dT) { f_route_param = TheICEManager.GetParameter(); } - float f_range = fParameter1 - fParameter0; float f_param = 0.0f; - if (0.0001f < bAbs(f_range)) { - f_param = (f_route_param - fParameter0) / f_range; + if (0.0001f < bAbs(fParameter1 - fParameter0)) { + f_param = (f_route_param - fParameter0) / (fParameter1 - fParameter0); } if (1.0f <= f_route_param) { @@ -1022,8 +1018,7 @@ void ICEMover::Update(float dT) { } n_state = TheICEManager.GetState(); - float dutchVal = GetDutch(f_param); - unsigned short dutch = static_cast(static_cast(dutchVal * 65536.0f) & 0xffff); + unsigned short dutch = static_cast(static_cast(GetDutch(f_param) * 65536.0f) & 0xffff); UMath::Matrix4 mWorldToCamera; CreateLookAtMatrix(reinterpret_cast(&mWorldToCamera), @@ -1174,12 +1169,10 @@ void ICEMover::Update(float dT) { dofFar = dofNear + 1.0f; } GetCamera()->SetFocalDistance((dofFar + dofNear) * 0.5f); - float dof = dofFar - dofNear; } GetCamera()->SetDepthOfField(0.0f); - float targetDist = bDistBetween(reinterpret_cast(&vEye), reinterpret_cast(&vLook)); - GetCamera()->SetTargetDistance(targetDist); + GetCamera()->SetTargetDistance(bDistBetween(reinterpret_cast(&vEye), reinterpret_cast(&vLook))); GetCamera()->SetCameraMatrix(*reinterpret_cast(&mWorldToCamera), dT * simspeed); } diff --git a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp index 7f95b6a8d..5e5725922 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp @@ -513,7 +513,6 @@ void CubicCameraMover::Update(float dT) { bVector3 vLook(fSign * (*pLook).x.Val, fSign * (*pLook).y.Val, (*pLook).z.Val); { - float impact; if (vCameraImpcat.x > 0.0f) { if (0.0f < vCameraImpcatTimer.x) { tTable envelope(CameraImpcatCurveH, 5, 0.0f, 1.0f); @@ -530,6 +529,15 @@ void CubicCameraMover::Update(float dT) { clearH: vCameraImpcat.x = 0.0f; } + } else { + if (vCameraImpcatTimer.x > 0.0f) { + vCameraImpcatTimer.x -= dT; + if (vCameraImpcatTimer.x > 0.0f) { + goto doneH; + } + } + vCameraImpcat.x = 0.0f; + doneH:; } } @@ -548,6 +556,15 @@ void CubicCameraMover::Update(float dT) { clearV: vCameraImpcat.y = 0.0f; } + } else { + if (vCameraImpcatTimer.y > 0.0f) { + vCameraImpcatTimer.y -= dT; + if (vCameraImpcatTimer.y > 0.0f) { + goto doneV; + } + } + vCameraImpcat.y = 0.0f; + doneV:; } } From e8f745fc036afd7b1842ba6d03bfbe9382342359 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 21:29:40 +0100 Subject: [PATCH 163/691] =?UTF-8?q?88.7%:=20use=20member=20cubics=20direct?= =?UTF-8?q?ly=20in=20SetDesired=20(48.8%=20=E2=86=92=2060.3%)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removed local ICE::Cubic3D/Cubic1D objects (eye, look, dutch, fov) and operate directly on pEye/pLook/pDutch/pFov members. Eliminates ~100 zeroing stores from constructor initialization. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 76 ++++++++++----------- 1 file changed, 36 insertions(+), 40 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index 46b1fb274..f952ab8cf 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -544,39 +544,35 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { UMath::Matrix4 mCarToWorld; UMath::Matrix4 mWorldToCar; UMath::Matrix4 mWorldToHybrid; - ICE::Cubic3D eye(0, 0.0f); - ICE::Cubic3D look(0, 0.0f); - ICE::Cubic1D dutch(0, 0.0f); - ICE::Cubic1D fov(0, 0.0f); UMath::Matrix4 mWorldToScene; UMath::Matrix4 *pWorldToScene = 0; UMath::Matrix4 *eye_space; UMath::Matrix4 *look_space; - eye.SetVal(&v_eye[0]); - eye.SetdVal(&v_eye_slope[0]); - eye.SetValDesired(&v_eye[1]); - eye.SetdValDesired(&v_eye_slope[1]); + pEye->SetVal(&v_eye[0]); + pEye->SetdVal(&v_eye_slope[0]); + pEye->SetValDesired(&v_eye[1]); + pEye->SetdValDesired(&v_eye_slope[1]); - look.SetVal(&v_look[0]); - look.SetdVal(&v_look_slope[0]); - look.SetValDesired(&v_look[1]); - look.SetdValDesired(&v_look_slope[1]); + pLook->SetVal(&v_look[0]); + pLook->SetdVal(&v_look_slope[0]); + pLook->SetValDesired(&v_look[1]); + pLook->SetdValDesired(&v_look_slope[1]); - dutch.SetVal(pCameraData->fDutch[0]); - dutch.SetdVal(f_dutch_slope[0]); - dutch.SetValDesired(pCameraData->fDutch[1]); - dutch.SetdValDesired(f_dutch_slope[1]); + pDutch->SetVal(pCameraData->fDutch[0]); + pDutch->SetdVal(f_dutch_slope[0]); + pDutch->SetValDesired(pCameraData->fDutch[1]); + pDutch->SetdValDesired(f_dutch_slope[1]); unsigned short fov0 = ConvertLensLengthToFovAngle(pCameraData->fLens[0]); unsigned short fov1 = ConvertLensLengthToFovAngle(pCameraData->fLens[1]); float fov0_slope = ConvertLensDeltaToFovDelta(pCameraData->fLens[0], f_lens_slope[0]); float fov1_slope = ConvertLensDeltaToFovDelta(pCameraData->fLens[1], f_lens_slope[1]); - fov.SetVal(static_cast(fov0)); - fov.SetdVal(fov0_slope); - fov.SetValDesired(static_cast(fov1)); - fov.SetdValDesired(fov1_slope); + pFov->SetVal(static_cast(fov0)); + pFov->SetdVal(fov0_slope); + pFov->SetValDesired(static_cast(fov1)); + pFov->SetdValDesired(fov1_slope); if (flush) { PSMTX44Identity(*reinterpret_cast(&mHybridToWorld)); @@ -624,10 +620,10 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { ICE::Vector3 *eye_vel = (nSpaceEye == 0) ? pCar->GetVelocity() : static_cast(0); ICE::Vector3 *look_vel = (nSpaceLook == 0) ? pCar->GetVelocity() : static_cast(0); - EyeCubicInit(&eye, reinterpret_cast(eye_space), eye_vel); - LookCubicInit(&look, reinterpret_cast(look_space), look_vel); - DutchCubicInit(&dutch); - FovCubicInit(&fov); + EyeCubicInit(pEye, reinterpret_cast(eye_space), eye_vel); + LookCubicInit(pLook, reinterpret_cast(look_space), look_vel); + DutchCubicInit(pDutch); + FovCubicInit(pFov); float f_route_param = TheICEManager.GetParameter(); float f_to_start = bAbs(f_route_param - fParameter0); @@ -639,42 +635,42 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { ICE::Vector3 v_look_val; ICE::Vector3 v_dlook; - eye.GetVal(&v_eye_val); - eye.GetdVal(&v_deye); + pEye->GetVal(&v_eye_val); + pEye->GetdVal(&v_deye); pEye->SetValDesired(&v_eye_val); pEye->SetdValDesired(&v_deye); - look.GetVal(&v_look_val); - look.GetdVal(&v_dlook); + pLook->GetVal(&v_look_val); + pLook->GetdVal(&v_dlook); pLook->SetValDesired(&v_look_val); pLook->SetdValDesired(&v_dlook); - pDutch->SetValDesired(dutch.GetVal()); - pDutch->dValDesired = dutch.GetdVal(); + pDutch->SetValDesired(pDutch->GetVal()); + pDutch->dValDesired = pDutch->GetdVal(); - pFov->SetValDesired(fov.GetVal()); - pFov->dValDesired = fov.GetdVal(); + pFov->SetValDesired(pFov->GetVal()); + pFov->dValDesired = pFov->GetdVal(); } else { ICE::Vector3 v_eye_val; ICE::Vector3 v_deye; ICE::Vector3 v_look_val; ICE::Vector3 v_dlook; - eye.GetVal(&v_eye_val); - eye.GetdVal(&v_deye); + pEye->GetVal(&v_eye_val); + pEye->GetdVal(&v_deye); pEye->SetVal(&v_eye_val); pEye->SetdVal(&v_deye); - look.GetVal(&v_look_val); - look.GetdVal(&v_dlook); + pLook->GetVal(&v_look_val); + pLook->GetdVal(&v_dlook); pLook->SetVal(&v_look_val); pLook->SetdVal(&v_dlook); - pDutch->SetVal(dutch.GetVal()); - pDutch->SetdVal(dutch.GetdVal()); + pDutch->SetVal(pDutch->GetVal()); + pDutch->SetdVal(pDutch->GetdVal()); - pFov->SetVal(fov.GetVal()); - pFov->SetdVal(fov.GetdVal()); + pFov->SetVal(pFov->GetVal()); + pFov->SetdVal(pFov->GetdVal()); } } } From 85b45a3d2b72f2d7c3150902f1130068ade493de Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 21:37:20 +0100 Subject: [PATCH 164/691] Bootstrap fresh worktree setup Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- README.md | 30 ++------- tools/decomp-workflow.py | 13 +++- tools/share_worktree_assets.py | 114 ++++++++++++++++++++++++++++++--- 3 files changed, 121 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index d89e285a1..b10d186c0 100644 --- a/README.md +++ b/README.md @@ -112,34 +112,16 @@ sudo xattr -rd com.apple.quarantine '/Applications/Wine Crossover.app' `build/`. It intentionally does **not** share `build.ninja`, `objdiff.json`, `compile_commands.json`, or per-worktree object outputs. - After linking shared assets into a worktree, regenerate that worktree's local build - files with: + After creating a fresh worktree, bootstrap its local generated files with: ```sh - python configure.py - ``` - -- Sharing large assets across git worktrees - - If you use multiple git worktrees, you can deduplicate the large immutable inputs - and downloaded tool binaries while keeping each worktree's generated build files - separate: - - ```sh - python tools/share_worktree_assets.py link --all + python tools/share_worktree_assets.py bootstrap ``` - This shares the ignored debug/tool assets under the git common directory, including - extracted `orig/*` contents, `symbols/*`, root ELF / MAP files, and downloaded - tool binaries under `build/`. It intentionally does **not** share `build.ninja`, - `objdiff.json`, `compile_commands.json`, or per-worktree object outputs. - - After linking shared assets into a worktree, regenerate that worktree's local build - files with: - - ```sh - python configure.py - ``` + `bootstrap` links the shared assets for the current worktree, runs `configure.py`, + generates the local split config when needed, and reruns `configure.py` so fresh + worktrees end up with `build.ninja`, `objdiff.json`, and `compile_commands.json` + without manual copying. # Diffing diff --git a/tools/decomp-workflow.py b/tools/decomp-workflow.py index bca622ec0..f9e9a0fc8 100644 --- a/tools/decomp-workflow.py +++ b/tools/decomp-workflow.py @@ -257,12 +257,16 @@ def report(ok: bool, label: str, detail: str) -> None: report( os.path.exists(BUILD_NINJA), "build.ninja", - BUILD_NINJA if os.path.exists(BUILD_NINJA) else "missing (run: python configure.py)", + BUILD_NINJA + if os.path.exists(BUILD_NINJA) + else "missing (run: python tools/share_worktree_assets.py bootstrap)", ) report( os.path.exists(OBJDIFF_JSON), "objdiff.json", - OBJDIFF_JSON if os.path.exists(OBJDIFF_JSON) else "missing (run: python configure.py)", + OBJDIFF_JSON + if os.path.exists(OBJDIFF_JSON) + else "missing (run: python tools/share_worktree_assets.py bootstrap)", ) print_section("Shared Assets") @@ -342,7 +346,10 @@ def report(ok: bool, label: str, detail: str) -> None: output_path = build_shared_unit(args.smoke_build) report(True, "build", output_path) except WorkflowError as e: - report(False, "build", str(e)) + detail = str(e) + if "objdiff.json" in detail or "build.ninja" in detail: + detail += "\nHint: Run: python tools/share_worktree_assets.py bootstrap" + report(False, "build", detail) if args.smoke_dtk: print_section("DTK Smoke Test") diff --git a/tools/share_worktree_assets.py b/tools/share_worktree_assets.py index f01f36145..374d168e5 100644 --- a/tools/share_worktree_assets.py +++ b/tools/share_worktree_assets.py @@ -12,6 +12,7 @@ python tools/share_worktree_assets.py status python tools/share_worktree_assets.py status --all python tools/share_worktree_assets.py link --all + python tools/share_worktree_assets.py bootstrap """ import argparse @@ -27,6 +28,7 @@ root_dir = os.path.abspath(os.path.join(script_dir, "..")) SHARED_ROOT_NAME = "worktree-shared" +DEFAULT_BOOTSTRAP_VERSION = "GOWE69" @dataclass(frozen=True) @@ -58,6 +60,24 @@ def run_git(args: List[str], cwd: str) -> str: return result.stdout +def run_command( + args: List[str], cwd: str, description: str, echo_success_output: bool = False +) -> subprocess.CompletedProcess[str]: + result = subprocess.run(args, cwd=cwd, capture_output=True, text=True) + if result.returncode != 0: + message = [f"{description} failed in {cwd}: {' '.join(args)}"] + if result.stdout.strip(): + message.append(f"stdout:\n{result.stdout.strip()}") + if result.stderr.strip(): + message.append(f"stderr:\n{result.stderr.strip()}") + raise RuntimeError("\n".join(message)) + if echo_success_output and result.stdout.strip(): + print(result.stdout.strip()) + if echo_success_output and result.stderr.strip(): + print(result.stderr.strip(), file=sys.stderr) + return result + + def git_common_dir(cwd: str) -> str: common = run_git(["rev-parse", "--git-common-dir"], cwd).strip() if os.path.isabs(common): @@ -302,19 +322,70 @@ def print_status(worktrees: List[str], shared_root: str) -> int: return 0 -def link_assets(worktrees: List[str], shared_root: str) -> int: +def link_assets( + target_worktrees: List[str], seed_worktrees: List[str], shared_root: str +) -> int: os.makedirs(shared_root, exist_ok=True) - assets = discover_assets(worktrees, shared_root) + assets = discover_assets(seed_worktrees, shared_root) for spec in assets: - shared_path = ensure_shared_asset(spec, worktrees, shared_root) + shared_path = ensure_shared_asset(spec, seed_worktrees, shared_root) if shared_path is None: continue - for worktree in worktrees: + for worktree in target_worktrees: status = link_asset(worktree, spec, shared_path) print(f"{worktree}: {spec.relpath} -> {status}") return 0 +def bootstrap_generated_files(worktree: str, version: str) -> None: + build_ninja = os.path.join(worktree, "build.ninja") + objdiff_json = os.path.join(worktree, "objdiff.json") + compile_commands = os.path.join(worktree, "compile_commands.json") + config_target = os.path.join("build", version, "config.json") + + print(f"{worktree}: running configure.py") + run_command([sys.executable, "configure.py"], worktree, "configure.py") + + if not os.path.isfile(build_ninja): + raise RuntimeError(f"{worktree}: configure.py did not create build.ninja") + + if not os.path.isfile(objdiff_json) or not os.path.isfile(compile_commands): + print(f"{worktree}: generating {config_target} for local objdiff metadata") + run_command(["ninja", config_target], worktree, f"ninja {config_target}") + print(f"{worktree}: rerunning configure.py") + run_command([sys.executable, "configure.py"], worktree, "configure.py") + + missing = [] + if not os.path.isfile(objdiff_json): + missing.append("objdiff.json") + if not os.path.isfile(compile_commands): + missing.append("compile_commands.json") + if missing: + raise RuntimeError( + f"{worktree}: bootstrap did not create {', '.join(missing)}" + ) + + +def bootstrap_worktrees( + target_worktrees: List[str], + seed_worktrees: List[str], + shared_root: str, + version: str, + run_health: bool, + smoke_build: Optional[str], +) -> int: + link_assets(target_worktrees, seed_worktrees, shared_root) + for worktree in target_worktrees: + bootstrap_generated_files(worktree, version) + if run_health or smoke_build: + cmd = [sys.executable, os.path.join("tools", "decomp-workflow.py"), "health"] + if smoke_build: + cmd.extend(["--smoke-build", smoke_build]) + print(f"{worktree}: running {' '.join(cmd)}") + run_command(cmd, worktree, "decomp-workflow health", echo_success_output=True) + return 0 + + def main() -> int: parser = argparse.ArgumentParser( description=( @@ -324,24 +395,49 @@ def main() -> int: ) parser.add_argument( "command", - choices=("status", "link"), - help="Inspect or create shared asset symlinks.", + choices=("status", "link", "bootstrap"), + help="Inspect, link, or fully bootstrap worktree-local setup.", ) parser.add_argument( "--all", action="store_true", help="Operate on all worktrees for this repository (default: current worktree only).", ) + parser.add_argument( + "--version", + default=DEFAULT_BOOTSTRAP_VERSION, + help="Version whose split config should be generated during bootstrap (default: GOWE69).", + ) + parser.add_argument( + "--health", + action="store_true", + help="Run `decomp-workflow.py health` after bootstrap completes.", + ) + parser.add_argument( + "--smoke-build", + metavar="UNIT", + help="Also run `decomp-workflow.py health --smoke-build UNIT` after bootstrap.", + ) args = parser.parse_args() common_dir = git_common_dir(root_dir) shared_root = os.path.join(common_dir, SHARED_ROOT_NAME) - worktrees = list_worktrees(root_dir) if args.all else [root_dir] + seed_worktrees = list_worktrees(root_dir) + target_worktrees = seed_worktrees if args.all else [root_dir] try: if args.command == "status": - return print_status(worktrees, shared_root) - return link_assets(worktrees, shared_root) + return print_status(target_worktrees, shared_root) + if args.command == "link": + return link_assets(target_worktrees, seed_worktrees, shared_root) + return bootstrap_worktrees( + target_worktrees, + seed_worktrees, + shared_root, + args.version, + args.health, + args.smoke_build, + ) except RuntimeError as e: print(f"Error: {e}", file=sys.stderr) return 1 From aa658dda20d0805da2eb186af820e0030f9614d2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 21:38:26 +0100 Subject: [PATCH 165/691] 88.8%: improve SetDesired vSmoothCar bCopy + inline fov conversions Use bCopy for vSmoothCarPos/Fwd copies and inline the FOV conversion calls directly into SetVal/SetdVal/SetValDesired/SetdValDesired. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 25 +++++++-------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index f952ab8cf..a3f607de9 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -497,14 +497,10 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { if (flush) { FlushAccumulationBuffer(); - ICE::Vector3 *pos = pCar->GetGeometryPosition(); - vSmoothCarPos.x = pos->x; - vSmoothCarPos.y = pos->y; - vSmoothCarPos.z = pos->z; - ICE::Vector3 *fwd = pCar->GetForwardVector(); - vSmoothCarFwd.x = fwd->x; - vSmoothCarFwd.y = fwd->y; - vSmoothCarFwd.z = fwd->z; + bCopy(reinterpret_cast(&vSmoothCarPos), + reinterpret_cast(pCar->GetGeometryPosition())); + bCopy(reinterpret_cast(&vSmoothCarFwd), + reinterpret_cast(pCar->GetForwardVector())); } if (b_new_camera) { @@ -564,15 +560,10 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { pDutch->SetValDesired(pCameraData->fDutch[1]); pDutch->SetdValDesired(f_dutch_slope[1]); - unsigned short fov0 = ConvertLensLengthToFovAngle(pCameraData->fLens[0]); - unsigned short fov1 = ConvertLensLengthToFovAngle(pCameraData->fLens[1]); - float fov0_slope = ConvertLensDeltaToFovDelta(pCameraData->fLens[0], f_lens_slope[0]); - float fov1_slope = ConvertLensDeltaToFovDelta(pCameraData->fLens[1], f_lens_slope[1]); - - pFov->SetVal(static_cast(fov0)); - pFov->SetdVal(fov0_slope); - pFov->SetValDesired(static_cast(fov1)); - pFov->SetdValDesired(fov1_slope); + pFov->SetVal(static_cast(ConvertLensLengthToFovAngle(pCameraData->fLens[0]))); + pFov->SetdVal(ConvertLensDeltaToFovDelta(pCameraData->fLens[0], f_lens_slope[0])); + pFov->SetValDesired(static_cast(ConvertLensLengthToFovAngle(pCameraData->fLens[1]))); + pFov->SetdValDesired(ConvertLensDeltaToFovDelta(pCameraData->fLens[1], f_lens_slope[1])); if (flush) { PSMTX44Identity(*reinterpret_cast(&mHybridToWorld)); From 9bc66f929d7276eb3f46add54aa0fa05ca706181 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 21:40:50 +0100 Subject: [PATCH 166/691] 88.9%: fix SetDesired flush boolean to use int OR pattern Use int instead of bool for flush conditions and combine with bitwise OR + != 0 normalization to generate matching or. instructions. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index a3f607de9..84b1f4f29 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -480,18 +480,22 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { return; } - bool hard_cut = false; + int hard_cut = 0; if (b_new_camera && pCameraData != 0 && pOldCameraData != 0) { hard_cut = (ICE::KeysShared(pOldCameraData, 1, pCameraData, 0) == 0); } - bool flush = hard_cut; + int cond1 = 0; if (pCameraData != 0 && pICEData == 0 && !(pCameraData->bSmooth & 1)) { - flush = true; + cond1 = 1; } + int flush = (hard_cut | cond1) != 0; + + int cond2 = 0; if (pICEData != 0 && pCameraData == 0 && !(pICEData->bSmooth & 1)) { - flush = true; + cond2 = 1; } + flush = (flush | cond2) != 0; pICEData = pCameraData; From 3deb3e9880a7bd43f92297186cf1f78524f84f88 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 21:44:55 +0100 Subject: [PATCH 167/691] 88.9%: use direct member writes for last SetdValDesired calls The original skips the nType/state check for the last SetdValDesired on both dutch and fov Cubic1D objects. Use direct member assignment instead of the inline function to match. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index 84b1f4f29..50bec5f6d 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -562,12 +562,12 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { pDutch->SetVal(pCameraData->fDutch[0]); pDutch->SetdVal(f_dutch_slope[0]); pDutch->SetValDesired(pCameraData->fDutch[1]); - pDutch->SetdValDesired(f_dutch_slope[1]); + pDutch->dValDesired = f_dutch_slope[1]; pFov->SetVal(static_cast(ConvertLensLengthToFovAngle(pCameraData->fLens[0]))); pFov->SetdVal(ConvertLensDeltaToFovDelta(pCameraData->fLens[0], f_lens_slope[0])); pFov->SetValDesired(static_cast(ConvertLensLengthToFovAngle(pCameraData->fLens[1]))); - pFov->SetdValDesired(ConvertLensDeltaToFovDelta(pCameraData->fLens[1], f_lens_slope[1])); + pFov->dValDesired = ConvertLensDeltaToFovDelta(pCameraData->fLens[1], f_lens_slope[1]); if (flush) { PSMTX44Identity(*reinterpret_cast(&mHybridToWorld)); From 012725f2d7c3b7e2ec8dbcb60da142b16c309b72 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 22:11:28 +0100 Subject: [PATCH 168/691] 89.5%: restructure SetDesired smooth block with local cubics Move matrix operations, CubicInit calls, and route parameter conditional into the b_new_camera && bSmooth block. Create local Cubic3D/Cubic1D objects in the smooth block matching DWARF layout. Copy local cubic values back to member cubics via the f_to_start/ f_to_end conditional. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 279 ++++++++++---------- 1 file changed, 142 insertions(+), 137 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index 50bec5f6d..3a9976f58 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -519,153 +519,158 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { nSpaceEye = pCameraData->nSpaceEye; nSpaceLook = pCameraData->nSpaceLook; - if (b_new_camera && (pCameraData->bSmooth & 1) != 0) { - bMirrorICEData = (pCameraData->bSmooth >> 1) & 1; - - TheICEManager.SetSmoothExit(true); - - { - ICE::Vector3 v_eye[2]; - ICE::Vector3 v_look[2]; - ICE::Vector3 v_eye_slope[2]; - ICE::Vector3 v_look_slope[2]; - float f_dutch_slope[2]; - float f_lens_slope[2]; - - pCameraData->GetEye(0, &v_eye[0]); - pCameraData->GetEye(1, &v_eye[1]); - pCameraData->GetLook(0, &v_look[0]); - pCameraData->GetLook(1, &v_look[1]); - - TheICEManager.GetSlope(&v_eye_slope[0], &v_look_slope[0], &f_lens_slope[0], &f_dutch_slope[0], pCameraData, 0, p_track); - TheICEManager.GetSlope(&v_eye_slope[1], &v_look_slope[1], &f_lens_slope[1], &f_dutch_slope[1], pCameraData, 1, p_track); - - { - UMath::Matrix4 mCarToWorld; - UMath::Matrix4 mWorldToCar; - UMath::Matrix4 mWorldToHybrid; - UMath::Matrix4 mWorldToScene; - UMath::Matrix4 *pWorldToScene = 0; - UMath::Matrix4 *eye_space; - UMath::Matrix4 *look_space; - - pEye->SetVal(&v_eye[0]); - pEye->SetdVal(&v_eye_slope[0]); - pEye->SetValDesired(&v_eye[1]); - pEye->SetdValDesired(&v_eye_slope[1]); - - pLook->SetVal(&v_look[0]); - pLook->SetdVal(&v_look_slope[0]); - pLook->SetValDesired(&v_look[1]); - pLook->SetdValDesired(&v_look_slope[1]); - - pDutch->SetVal(pCameraData->fDutch[0]); - pDutch->SetdVal(f_dutch_slope[0]); - pDutch->SetValDesired(pCameraData->fDutch[1]); - pDutch->dValDesired = f_dutch_slope[1]; - - pFov->SetVal(static_cast(ConvertLensLengthToFovAngle(pCameraData->fLens[0]))); - pFov->SetdVal(ConvertLensDeltaToFovDelta(pCameraData->fLens[0], f_lens_slope[0])); - pFov->SetValDesired(static_cast(ConvertLensLengthToFovAngle(pCameraData->fLens[1]))); - pFov->dValDesired = ConvertLensDeltaToFovDelta(pCameraData->fLens[1], f_lens_slope[1]); - - if (flush) { - PSMTX44Identity(*reinterpret_cast(&mHybridToWorld)); - ICE::Vector3 *carPos = pCar->GetGeometryPosition(); - bCopy(reinterpret_cast(&mHybridToWorld), + { + ICE::Vector3 v_eye[2]; + ICE::Vector3 v_look[2]; + ICE::Vector3 v_eye_slope[2]; + ICE::Vector3 v_look_slope[2]; + float f_dutch_slope[2]; + float f_lens_slope[2]; + + pCameraData->GetEye(0, &v_eye[0]); + pCameraData->GetEye(1, &v_eye[1]); + pCameraData->GetLook(0, &v_look[0]); + pCameraData->GetLook(1, &v_look[1]); + + TheICEManager.GetSlope(&v_eye_slope[0], &v_look_slope[0], &f_lens_slope[0], &f_dutch_slope[0], pCameraData, 0, p_track); + TheICEManager.GetSlope(&v_eye_slope[1], &v_look_slope[1], &f_lens_slope[1], &f_dutch_slope[1], pCameraData, 1, p_track); + + pEye->SetVal(&v_eye[0]); + pEye->SetdVal(&v_eye_slope[0]); + pEye->SetValDesired(&v_eye[1]); + pEye->SetdValDesired(&v_eye_slope[1]); + + pLook->SetVal(&v_look[0]); + pLook->SetdVal(&v_look_slope[0]); + pLook->SetValDesired(&v_look[1]); + pLook->SetdValDesired(&v_look_slope[1]); + + pDutch->SetVal(pCameraData->fDutch[0]); + pDutch->SetdVal(f_dutch_slope[0]); + pDutch->SetValDesired(pCameraData->fDutch[1]); + pDutch->dValDesired = f_dutch_slope[1]; + + pFov->SetVal(static_cast(ConvertLensLengthToFovAngle(pCameraData->fLens[0]))); + pFov->SetdVal(ConvertLensDeltaToFovDelta(pCameraData->fLens[0], f_lens_slope[0])); + pFov->SetValDesired(static_cast(ConvertLensLengthToFovAngle(pCameraData->fLens[1]))); + pFov->dValDesired = ConvertLensDeltaToFovDelta(pCameraData->fLens[1], f_lens_slope[1]); + + if (flush) { + PSMTX44Identity(*reinterpret_cast(&mHybridToWorld)); + bCopy(reinterpret_cast(&mHybridToWorld), + reinterpret_cast(pCar->GetGeometryOrientation()), + reinterpret_cast(pCar->GetGeometryPosition())); + } + + if (b_new_camera) { + bMirrorICEData = (pCameraData->bSmooth >> 1) & 1; + + if ((pCameraData->bSmooth & 1) != 0) { + TheICEManager.SetSmoothExit(true); + { + UMath::Matrix4 mCarToWorld; + UMath::Matrix4 mWorldToCar; + + bCopy(reinterpret_cast(&mCarToWorld), reinterpret_cast(pCar->GetGeometryOrientation()), - reinterpret_cast(carPos)); - } + reinterpret_cast(pCar->GetGeometryPosition())); - bCopy(reinterpret_cast(&mCarToWorld), - reinterpret_cast(pCar->GetGeometryOrientation()), - reinterpret_cast(pCar->GetGeometryPosition())); + eInvertTransformationMatrix(reinterpret_cast(&mWorldToCar), + reinterpret_cast(&mCarToWorld)); - eInvertTransformationMatrix(reinterpret_cast(&mWorldToCar), - reinterpret_cast(&mCarToWorld)); + UMath::Matrix4 mWorldToHybrid; - eInvertTransformationMatrix(reinterpret_cast(&mWorldToHybrid), - reinterpret_cast(&mHybridToWorld)); + eInvertTransformationMatrix(reinterpret_cast(&mWorldToHybrid), + reinterpret_cast(&mHybridToWorld)); - PSMTX44Identity(*reinterpret_cast(&mWorldToScene)); + ICE::Cubic3D eye(1, 1.0f); + ICE::Cubic3D look(1, 1.0f); + ICE::Cubic1D dutch(1, 1.0f); + ICE::Cubic1D fov(1, 1.0f); - if (nSpaceEye == 3 || nSpaceLook == 3) { - ICEScene *scene = ICE::FindAnimScene(); - if (scene != 0) { - bMatrix4 &sceneMat = scene->GetSceneTransformMatrix(); - pWorldToScene = &mWorldToScene; - eInvertTransformationMatrix(reinterpret_cast(pWorldToScene), &sceneMat); + UMath::Matrix4 mWorldToScene; + UMath::Matrix4 *pWorldToScene = 0; + UMath::Matrix4 *eye_space; + UMath::Matrix4 *look_space; + + if (nSpaceEye == 3 || nSpaceLook == 3) { + ICEScene *scene = ICE::FindAnimScene(); + if (scene != 0) { + bMatrix4 &sceneMat = scene->GetSceneTransformMatrix(); + pWorldToScene = &mWorldToScene; + eInvertTransformationMatrix(reinterpret_cast(pWorldToScene), &sceneMat); + } } - } - switch (nSpaceEye) { - case 0: eye_space = reinterpret_cast(&mWorldToCar); break; - case 2: eye_space = &mWorldToHybrid; break; - case 3: eye_space = pWorldToScene; break; - default: eye_space = 0; break; - } + switch (nSpaceEye) { + case 0: eye_space = reinterpret_cast(&mWorldToCar); break; + case 2: eye_space = &mWorldToHybrid; break; + case 3: eye_space = pWorldToScene; break; + default: eye_space = 0; break; + } - switch (nSpaceLook) { - case 0: look_space = reinterpret_cast(&mWorldToCar); break; - case 2: look_space = &mWorldToHybrid; break; - case 3: look_space = pWorldToScene; break; - default: look_space = 0; break; - } + switch (nSpaceLook) { + case 0: look_space = reinterpret_cast(&mWorldToCar); break; + case 2: look_space = &mWorldToHybrid; break; + case 3: look_space = pWorldToScene; break; + default: look_space = 0; break; + } - ICE::Vector3 *eye_vel = (nSpaceEye == 0) ? pCar->GetVelocity() : static_cast(0); - ICE::Vector3 *look_vel = (nSpaceLook == 0) ? pCar->GetVelocity() : static_cast(0); - - EyeCubicInit(pEye, reinterpret_cast(eye_space), eye_vel); - LookCubicInit(pLook, reinterpret_cast(look_space), look_vel); - DutchCubicInit(pDutch); - FovCubicInit(pFov); - - float f_route_param = TheICEManager.GetParameter(); - float f_to_start = bAbs(f_route_param - fParameter0); - float f_to_end = bAbs(f_route_param - fParameter1); - - if (f_to_end <= f_to_start) { - ICE::Vector3 v_eye_val; - ICE::Vector3 v_deye; - ICE::Vector3 v_look_val; - ICE::Vector3 v_dlook; - - pEye->GetVal(&v_eye_val); - pEye->GetdVal(&v_deye); - pEye->SetValDesired(&v_eye_val); - pEye->SetdValDesired(&v_deye); - - pLook->GetVal(&v_look_val); - pLook->GetdVal(&v_dlook); - pLook->SetValDesired(&v_look_val); - pLook->SetdValDesired(&v_dlook); - - pDutch->SetValDesired(pDutch->GetVal()); - pDutch->dValDesired = pDutch->GetdVal(); - - pFov->SetValDesired(pFov->GetVal()); - pFov->dValDesired = pFov->GetdVal(); - } else { - ICE::Vector3 v_eye_val; - ICE::Vector3 v_deye; - ICE::Vector3 v_look_val; - ICE::Vector3 v_dlook; - - pEye->GetVal(&v_eye_val); - pEye->GetdVal(&v_deye); - pEye->SetVal(&v_eye_val); - pEye->SetdVal(&v_deye); - - pLook->GetVal(&v_look_val); - pLook->GetdVal(&v_dlook); - pLook->SetVal(&v_look_val); - pLook->SetdVal(&v_dlook); - - pDutch->SetVal(pDutch->GetVal()); - pDutch->SetdVal(pDutch->GetdVal()); - - pFov->SetVal(pFov->GetVal()); - pFov->SetdVal(pFov->GetdVal()); + ICE::Vector3 *eye_vel = (nSpaceEye == 0) ? pCar->GetVelocity() : static_cast(0); + ICE::Vector3 *look_vel = (nSpaceLook == 0) ? pCar->GetVelocity() : static_cast(0); + + EyeCubicInit(&eye, reinterpret_cast(eye_space), eye_vel); + LookCubicInit(&look, reinterpret_cast(look_space), look_vel); + DutchCubicInit(&dutch); + FovCubicInit(&fov); + + float f_route_param = TheICEManager.GetParameter(); + float f_to_start = bAbs(f_route_param - fParameter0); + float f_to_end = bAbs(f_route_param - fParameter1); + + if (f_to_end <= f_to_start) { + ICE::Vector3 v_eye_val; + ICE::Vector3 v_deye; + ICE::Vector3 v_look_val; + ICE::Vector3 v_dlook; + + eye.GetVal(&v_eye_val); + eye.GetdVal(&v_deye); + pEye->SetVal(&v_eye_val); + pEye->SetdVal(&v_deye); + + look.GetVal(&v_look_val); + look.GetdVal(&v_dlook); + pLook->SetVal(&v_look_val); + pLook->SetdVal(&v_dlook); + + pDutch->SetVal(dutch.GetVal()); + pDutch->SetdVal(dutch.GetdVal()); + + pFov->SetVal(fov.GetVal()); + pFov->SetdVal(fov.GetdVal()); + } else { + ICE::Vector3 v_eye_val; + ICE::Vector3 v_deye; + ICE::Vector3 v_look_val; + ICE::Vector3 v_dlook; + + eye.GetVal(&v_eye_val); + eye.GetdVal(&v_deye); + pEye->SetValDesired(&v_eye_val); + pEye->SetdValDesired(&v_deye); + + look.GetVal(&v_look_val); + look.GetdVal(&v_dlook); + pLook->SetValDesired(&v_look_val); + pLook->SetdValDesired(&v_dlook); + + pDutch->SetValDesired(dutch.GetVal()); + pDutch->dValDesired = dutch.GetdVal(); + + pFov->SetValDesired(fov.GetVal()); + pFov->dValDesired = fov.GetdVal(); + } } } } From 0fcb107c33d3e29342d976e79697b6b1f82392a9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 22:22:31 +0100 Subject: [PATCH 169/691] 89.7%: use ICE::Matrix4 for zeroing constructors in SetDesired ICE::Matrix4 has zeroing constructors via ICE::Vector4, producing the 64 stfs stores per matrix that the original code generates. Improves SetDesired from 84.2% to 92.4%. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 22 ++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index 3a9976f58..2a4d3b91f 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -568,8 +568,8 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { if ((pCameraData->bSmooth & 1) != 0) { TheICEManager.SetSmoothExit(true); { - UMath::Matrix4 mCarToWorld; - UMath::Matrix4 mWorldToCar; + ICE::Matrix4 mCarToWorld; + ICE::Matrix4 mWorldToCar; bCopy(reinterpret_cast(&mCarToWorld), reinterpret_cast(pCar->GetGeometryOrientation()), @@ -578,7 +578,7 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { eInvertTransformationMatrix(reinterpret_cast(&mWorldToCar), reinterpret_cast(&mCarToWorld)); - UMath::Matrix4 mWorldToHybrid; + ICE::Matrix4 mWorldToHybrid; eInvertTransformationMatrix(reinterpret_cast(&mWorldToHybrid), reinterpret_cast(&mHybridToWorld)); @@ -588,10 +588,10 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { ICE::Cubic1D dutch(1, 1.0f); ICE::Cubic1D fov(1, 1.0f); - UMath::Matrix4 mWorldToScene; - UMath::Matrix4 *pWorldToScene = 0; - UMath::Matrix4 *eye_space; - UMath::Matrix4 *look_space; + ICE::Matrix4 mWorldToScene; + ICE::Matrix4 *pWorldToScene = 0; + ICE::Matrix4 *eye_space; + ICE::Matrix4 *look_space; if (nSpaceEye == 3 || nSpaceLook == 3) { ICEScene *scene = ICE::FindAnimScene(); @@ -603,14 +603,14 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { } switch (nSpaceEye) { - case 0: eye_space = reinterpret_cast(&mWorldToCar); break; + case 0: eye_space = &mWorldToCar; break; case 2: eye_space = &mWorldToHybrid; break; case 3: eye_space = pWorldToScene; break; default: eye_space = 0; break; } switch (nSpaceLook) { - case 0: look_space = reinterpret_cast(&mWorldToCar); break; + case 0: look_space = &mWorldToCar; break; case 2: look_space = &mWorldToHybrid; break; case 3: look_space = pWorldToScene; break; default: look_space = 0; break; @@ -619,8 +619,8 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { ICE::Vector3 *eye_vel = (nSpaceEye == 0) ? pCar->GetVelocity() : static_cast(0); ICE::Vector3 *look_vel = (nSpaceLook == 0) ? pCar->GetVelocity() : static_cast(0); - EyeCubicInit(&eye, reinterpret_cast(eye_space), eye_vel); - LookCubicInit(&look, reinterpret_cast(look_space), look_vel); + EyeCubicInit(&eye, eye_space, eye_vel); + LookCubicInit(&look, look_space, look_vel); DutchCubicInit(&dutch); FovCubicInit(&fov); From 255dfb9990d82ba32c6cb61b7c7f99ec43678a37 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 22:41:43 +0100 Subject: [PATCH 170/691] 89.8%: emit bQuaternion::GetMatrix as non-inline in ICEMover.cpp Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 31 +++++++++++++++++++++ src/Speed/Indep/bWare/Inc/bMath.hpp | 31 +-------------------- 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index 2a4d3b91f..85a29f2e9 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -23,6 +23,37 @@ extern ICE::Vector3 vIceAccelLagMax; bVector3 *bCross(bVector3 *dest, const bVector3 *v1, const bVector3 *v2); void bQuaternionToMatrix(bMatrix4 *matrix, const bQuaternion *quaternion); +void bQuaternion::GetMatrix(bMatrix4 &mat) const { + float x2 = x + x; + float y2 = y + y; + float z2 = z + z; + float xx = x * x2; + float xy = x * y2; + float xz = x * z2; + float yy = y * y2; + float yz = y * z2; + float zz = z * z2; + float sx = w * x2; + float sy = w * y2; + float sz = w * z2; + mat.v0.x = 1.0f - (yy + zz); + mat.v0.y = xy + sz; + mat.v0.z = xz - sy; + mat.v0.w = 0.0f; + mat.v1.x = xy - sz; + mat.v1.y = 1.0f - (xx + zz); + mat.v1.z = yz + sx; + mat.v1.w = 0.0f; + mat.v2.x = xz + sy; + mat.v2.y = yz - sx; + mat.v2.z = 1.0f - (xx + yy); + mat.v2.w = 0.0f; + mat.v3.x = 0.0f; + mat.v3.y = 0.0f; + mat.v3.z = 0.0f; + mat.v3.w = 1.0f; +} + unsigned short ConvertLensLengthToFovAngle(float f_lens_mm) { return (bATan(f_lens_mm, 15.96f) & 0x7FFF) << 1; } diff --git a/src/Speed/Indep/bWare/Inc/bMath.hpp b/src/Speed/Indep/bWare/Inc/bMath.hpp index a6d39d57c..7f2ad0cc0 100644 --- a/src/Speed/Indep/bWare/Inc/bMath.hpp +++ b/src/Speed/Indep/bWare/Inc/bMath.hpp @@ -912,36 +912,7 @@ struct bQuaternion { bQuaternion &Slerp(bQuaternion &r, const bQuaternion &target, float t) const; - void GetMatrix(bMatrix4 &mat) const { - float x2 = x + x; - float y2 = y + y; - float z2 = z + z; - float xx = x * x2; - float xy = x * y2; - float xz = x * z2; - float yy = y * y2; - float yz = y * z2; - float zz = z * z2; - float sx = w * x2; - float sy = w * y2; - float sz = w * z2; - mat[0][0] = 1.0f - (yy + zz); - mat[0][1] = xy + sz; - mat[0][2] = xz - sy; - mat[0][3] = 0.0f; - mat[1][0] = xy - sz; - mat[1][1] = 1.0f - (xx + zz); - mat[1][2] = yz + sx; - mat[1][3] = 0.0f; - mat[2][0] = xz + sy; - mat[2][1] = yz - sx; - mat[2][2] = 1.0f - (xx + yy); - mat[2][3] = 0.0f; - mat[3][0] = 0.0f; - mat[3][1] = 0.0f; - mat[3][2] = 0.0f; - mat[3][3] = 1.0f; - } + void GetMatrix(bMatrix4 &mat) const; }; class bBitTable { From 19f09764ac9931ba65732893ad80f0bc91379d84 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 22:50:02 +0100 Subject: [PATCH 171/691] =?UTF-8?q?89.9%:=20improve=20bQuaternion::GetMatr?= =?UTF-8?q?ix=20diagonal=20computation=20(72%=20=E2=86=92=2088%)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index 85a29f2e9..111f07ac2 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -36,17 +36,17 @@ void bQuaternion::GetMatrix(bMatrix4 &mat) const { float sx = w * x2; float sy = w * y2; float sz = w * z2; - mat.v0.x = 1.0f - (yy + zz); + mat.v0.x = 1.0f - yy - zz; mat.v0.y = xy + sz; mat.v0.z = xz - sy; mat.v0.w = 0.0f; mat.v1.x = xy - sz; - mat.v1.y = 1.0f - (xx + zz); + mat.v1.y = 1.0f - xx - zz; mat.v1.z = yz + sx; mat.v1.w = 0.0f; mat.v2.x = xz + sy; mat.v2.y = yz - sx; - mat.v2.z = 1.0f - (xx + yy); + mat.v2.z = 1.0f - xx - yy; mat.v2.w = 0.0f; mat.v3.x = 0.0f; mat.v3.y = 0.0f; From 1003d8e1ae662560371e3da3458d57dcb2e71fb9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 22:59:31 +0100 Subject: [PATCH 172/691] =?UTF-8?q?90.0%:=20restructure=20GetNameOfSceneHa?= =?UTF-8?q?sh=20(45.9%=20=E2=86=92=2091.0%)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move hash check before AnimSceneLoadInfo creation to match original code structure. Use pointer overload of GetSceneLoadInfo for hash comparison, creating local struct only after match. Cache TheAnimDirectory in local variable. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp index 7f4fc8be6..eeeb03065 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp @@ -1049,11 +1049,12 @@ unsigned int GetSceneHash(unsigned int slot) { void GetNameOfSceneHash(unsigned int hash, char *name) { *name = 0; if (TheAnimDirectory != 0) { - for (unsigned int i = 0; i < TheAnimDirectory->GetSceneCount(); i++) { - AnimSceneLoadInfo info; - TheAnimDirectory->GetSceneLoadInfo(i, info); - if (hash == info.mAnimSceneHash) { - char *filename = TheAnimDirectory->GetFileName(info.mSceneFileStartIndex); + AnimDirectory *dir = TheAnimDirectory; + for (unsigned int i = 0; i < dir->GetSceneCount(); i++) { + if (hash == dir->GetSceneLoadInfo(i)->mAnimSceneHash) { + AnimSceneLoadInfo info; + dir->GetSceneLoadInfo(i, info); + char *filename = dir->GetFileName(info.mSceneFileStartIndex); int pos = 0; while (filename[pos] != '_') { pos++; From f5ad928203323c62cc6509adf88db89bf18b9f68 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 23:22:17 +0100 Subject: [PATCH 173/691] 90.1%: emit _STL::find via ListableSet _remove Changed ListableSet::_remove to use std::find with const iterators instead of std::remove. This emits the correct const-qualified find template instantiation that matches the original binary. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Libs/Support/Utility/UListable.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Libs/Support/Utility/UListable.h b/src/Speed/Indep/Libs/Support/Utility/UListable.h index 535c0286d..25eb26eba 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UListable.h +++ b/src/Speed/Indep/Libs/Support/Utility/UListable.h @@ -106,11 +106,11 @@ template class Li _buckets[idx].push_back(t); } - void _remove(iterator t, std::size_t idx) { - List &bucket = _buckets[idx]; - typename List::iterator newend = std::remove(bucket.begin(), bucket.end(), t); - if (newend != bucket.end()) { - bucket.erase(newend, bucket.end()); + void _remove(const_pointer t, std::size_t idx) { + const List &bucket = _buckets[idx]; + typename List::const_iterator pos = std::find(bucket.begin(), bucket.end(), t); + if (pos != bucket.end()) { + _buckets[idx].erase(_buckets[idx].begin() + (pos - bucket.begin())); } } @@ -133,7 +133,7 @@ template class Li void UnList() { for (std::size_t i = 0; i < EnumMax; i++) { - _mLists._remove(static_cast(this), i); + _mLists._remove(static_cast(this), i); } } From 9019c15f33703e48bacaf4d3d5d38eea64d0c1ed Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 23:43:29 +0100 Subject: [PATCH 174/691] fix: resolve CI build failures - Remove UEALibs.hpp include from WCollisionTri.h (guard collision with UGroup.hpp) - Replace v3unit with VU0_v3unit in WCollisionTri.h - Revert IAttachable methods to non-pure virtual (fixes abstract class errors in zSim) - Revert IPlayer.h to main (fixes missing IsLocal/SetSettings in zSim) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Interfaces/IAttachable.h | 12 ++++++------ src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h | 9 ++++++--- src/Speed/Indep/Src/World/WCollisionTri.h | 3 +-- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/Speed/Indep/Src/Interfaces/IAttachable.h b/src/Speed/Indep/Src/Interfaces/IAttachable.h index 181bb0451..16417c577 100644 --- a/src/Speed/Indep/Src/Interfaces/IAttachable.h +++ b/src/Speed/Indep/Src/Interfaces/IAttachable.h @@ -20,12 +20,12 @@ struct IAttachable : public UTL::COM::IUnknown { virtual ~IAttachable() {} - virtual bool Attach(IUnknown *pOther) = 0; - virtual bool Detach(IUnknown *pOther) = 0; - virtual bool IsAttached(const IUnknown *pOther) const = 0; - virtual void OnAttached(IAttachable *pOther) = 0; - virtual void OnDetached(IAttachable *pOther) = 0; - virtual const List *GetAttachments() const = 0; + virtual bool Attach(IUnknown *pOther); + virtual bool Detach(IUnknown *pOther); + virtual bool IsAttached(const IUnknown *pOther) const; + virtual void OnAttached(IAttachable *pOther); + virtual void OnDetached(IAttachable *pOther); + virtual const List *GetAttachments() const; }; #endif diff --git a/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h b/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h index 780edb7e9..e295ac620 100644 --- a/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h +++ b/src/Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h @@ -33,10 +33,15 @@ class IPlayer : public UTL::COM::IUnknown, public UTL::Collections::ListableSet< virtual ISimable *GetSimable() const; +#ifndef EA_BUILD_A124 + virtual bool IsLocal() const; +#endif + virtual const UMath::Vector3 &GetPosition() const; virtual bool SetPosition(const UMath::Vector3 &position); - virtual int GetSettingsIndex() const; virtual PlayerSettings *GetSettings() const; + virtual void SetSettings(int fe_index); + virtual int GetSettingsIndex() const; virtual IHud *GetHud() const; virtual void SetHud() const; // TODO fix params virtual void SetRenderPort(int renderport); @@ -45,8 +50,6 @@ class IPlayer : public UTL::COM::IUnknown, public UTL::Collections::ListableSet< virtual int GetControllerPort() const; virtual IFeedback *GetFFB(); virtual ISteeringWheel *GetSteeringDevice(); - virtual void Unknown_vtable_0x78(); // TODO: unknown virtual - virtual void Unknown_vtable_0x80(); // TODO: unknown virtual virtual bool InGameBreaker() const; virtual bool CanRechargeNOS() const; virtual void ResetGameBreaker(bool full); diff --git a/src/Speed/Indep/Src/World/WCollisionTri.h b/src/Speed/Indep/Src/World/WCollisionTri.h index a5f0fcebd..e9b61ebcf 100644 --- a/src/Speed/Indep/Src/World/WCollisionTri.h +++ b/src/Speed/Indep/Src/World/WCollisionTri.h @@ -6,7 +6,6 @@ #endif #include "./WCollision.h" -#include "Speed/Indep/Libs/Support/Utility/UEALibs.hpp" #include "Speed/Indep/Libs/Support/Utility/UStandard.h" #include "Speed/Indep/Libs/Support/Utility/UTypes.h" #include "Speed/Indep/Libs/Support/Utility/UVectorMath.h" @@ -34,7 +33,7 @@ struct WCollisionTri { norm->y = 1.0f; norm->z = 0.0f; } else { - v3unit(&normal, norm); + VU0_v3unit(normal, *norm); } } // total size: 0x30 From 7b3515c72a2caf79b11b446c86c9aea3bb052140 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 23:51:36 +0100 Subject: [PATCH 175/691] fix: use platform-independent bIdentity/bCopy instead of GC-only PSMTX44 Replace direct PSMTX44Identity/PSMTX44Copy calls with bIdentity/bCopy wrappers that compile on all platforms (GC, PS2, Xenon). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/Camera.cpp | 4 ++-- src/Speed/Indep/Src/Camera/CameraMover.cpp | 4 ++-- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 14 +++++++------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Camera.cpp b/src/Speed/Indep/Src/Camera/Camera.cpp index 688c7b3e1..4a2e59567 100644 --- a/src/Speed/Indep/Src/Camera/Camera.cpp +++ b/src/Speed/Indep/Src/Camera/Camera.cpp @@ -137,13 +137,13 @@ void Camera::SetCameraMatrix(const bMatrix4 &m, float fTime) { scaledmatrix.v3.y *= 0.01f; scaledmatrix.v3.z *= 0.01f; scaledmatrix.v3.w = 1.0f; - PSMTX44Copy(*reinterpret_cast(&scaledmatrix), *reinterpret_cast(&CurrentKey.Matrix)); + bCopy(reinterpret_cast(&CurrentKey.Matrix), reinterpret_cast(&scaledmatrix)); } else { if (cameralink != 0) { cameralink = 0; } - PSMTX44Copy(*reinterpret_cast(&m), *reinterpret_cast(&CurrentKey.Matrix)); + bCopy(reinterpret_cast(&CurrentKey.Matrix), reinterpret_cast(&m)); } bMatrix4 t; diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 2c0c57c26..dd506a4b1 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -322,7 +322,7 @@ POV *CameraAnchor::GetPov(int pov_type) { void CameraAnchor::Update(float dT, const bMatrix4 &matrix, const bVector3 &velocity, const bVector3 &forward) { float dist = bDistBetween(&mGeomPos, reinterpret_cast(&matrix.v3)); - PSMTX44Copy(*reinterpret_cast(&matrix), *reinterpret_cast(&mGeomRot)); + bCopy(reinterpret_cast(&mGeomRot), reinterpret_cast(&matrix)); float savedVelMag = mVelMag; mGeomRot.v3.z = 0.0f; mGeomRot.v3.y = 0.0f; @@ -1415,7 +1415,7 @@ void RearViewMirrorCameraMover::Update(float dT) { m.v3.x = -pCar->GetGeometryPosition()->x; m.v3.y = -pCar->GetGeometryPosition()->y; m.v3.z = -pCar->GetGeometryPosition()->z; - PSMTX44Copy(*reinterpret_cast(pCar->GetGeometryOrientation()), *reinterpret_cast(&CarRotMat)); + bCopy(reinterpret_cast(&CarRotMat), reinterpret_cast(pCar->GetGeometryOrientation())); eTransposeMatrix(&tbod, &CarRotMat); eRotateX(&tbod, &tbod, 0x4000); eRotateY(&tbod, &tbod, 0x4000); diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index 111f07ac2..e8967d98f 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -213,7 +213,7 @@ ICEMover::ICEMover(int nView, ICEAnchor *pCar) bViolatesTopology = false; fParameter1 = 0.0f; ICE::HideOverlay(); - PSMTX44Identity(*reinterpret_cast(&mHybridToWorld)); + bIdentity(reinterpret_cast(&mHybridToWorld)); bCopy(reinterpret_cast(&vSmoothCarPos), reinterpret_cast(pCar->GetGeometryPosition())); bCopy(reinterpret_cast(&vSmoothCarFwd), reinterpret_cast(pCar->GetForwardVector())); SetDesired(true, true); @@ -233,13 +233,13 @@ ICEAnchor::ICEAnchor() mIsTouchingGround(true), // mIsNosEngaged(false), // mNosPercentageLeft(0.0f) { - PSMTX44Identity(*reinterpret_cast(&mGeomRot)); + bIdentity(reinterpret_cast(&mGeomRot)); } void ICEAnchor::Update(float dT, const ICE::Matrix4 &orientpos, const ICE::Vector3 &velocity, const ICE::Vector3 &) { float dist = bDistBetween(reinterpret_cast(&mGeomPos), reinterpret_cast(&orientpos.v3)); - PSMTX44Copy(*reinterpret_cast(&orientpos), *reinterpret_cast(&mGeomRot)); + bCopy(reinterpret_cast(&mGeomRot), reinterpret_cast(&orientpos)); float savedVelMag = mVelMag; mGeomRot.v3.z = 0.0f; mGeomRot.v3.y = 0.0f; @@ -587,7 +587,7 @@ void ICEMover::SetDesired(bool b_snap, bool b_refresh) { pFov->dValDesired = ConvertLensDeltaToFovDelta(pCameraData->fLens[1], f_lens_slope[1]); if (flush) { - PSMTX44Identity(*reinterpret_cast(&mHybridToWorld)); + bIdentity(reinterpret_cast(&mHybridToWorld)); bCopy(reinterpret_cast(&mHybridToWorld), reinterpret_cast(pCar->GetGeometryOrientation()), reinterpret_cast(pCar->GetGeometryPosition())); @@ -886,7 +886,7 @@ void ICEMover::Update(float dT) { bViolatesTopology = false; SetDesired(false, TheICEManager.RefreshCameraSplines()); - PSMTX44Identity(*reinterpret_cast(&mSceneToWorld)); + bIdentity(reinterpret_cast(&mSceneToWorld)); if (nSpaceEye == 3 || nSpaceLook == 3) { ICEScene *scene = ICE::FindAnimScene(); @@ -894,7 +894,7 @@ void ICEMover::Update(float dT) { return; } bMatrix4 &sceneMat = scene->GetSceneTransformMatrix(); - PSMTX44Copy(*reinterpret_cast(&sceneMat), *reinterpret_cast(&mSceneToWorld)); + bCopy(reinterpret_cast(&mSceneToWorld), reinterpret_cast(&sceneMat)); } float f_route_param; @@ -969,7 +969,7 @@ void ICEMover::Update(float dT) { vSmoothCarFwd.y = (carFwd->y - vSmoothCarFwd.y) * lerp + vSmoothCarFwd.y; vSmoothCarFwd.z = (carFwd->z - vSmoothCarFwd.z) * lerp + vSmoothCarFwd.z; - PSMTX44Identity(*reinterpret_cast(&mCarToWorld)); + bIdentity(reinterpret_cast(&mCarToWorld)); bNormalize(reinterpret_cast(&vSmoothCarFwd), reinterpret_cast(&vSmoothCarFwd)); bCopy(reinterpret_cast(&mCarToWorld.v0), reinterpret_cast(&vSmoothCarFwd), 0.0f); bCross(reinterpret_cast(&mCarToWorld.v1), reinterpret_cast(&mCarToWorld.v2), reinterpret_cast(&mCarToWorld.v0)); From 5e8c3e85acb4c1e078dd198872d74d416d74e150 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 12 Mar 2026 23:56:09 +0100 Subject: [PATCH 176/691] fix: guard _STL/Avoidables code for PS2 compatibility PS2 build uses different STL namespace. Guard Avoidables struct, TheAvoidables global, and _STL::find/list usage with #ifndef EA_PLATFORM_PLAYSTATION2. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraAI.cpp | 10 ++++++++++ src/Speed/Indep/Src/Camera/CameraMover.cpp | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index 5b9e50921..9c42f8800 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -22,7 +22,9 @@ #include "Speed/Indep/Src/Speech/SoundAI.h" #include "Speed/Indep/Src/World/TrackPath.hpp" +#ifndef EA_PLATFORM_PLAYSTATION2 extern Avoidables *TheAvoidables; +#endif extern bool gGameBreakerCamera; void SetNewSndCamAction(Attrib::StringKey mode, EVIEW_ID viewID); @@ -464,14 +466,18 @@ void CameraAI::MaybeKillJumpCam(unsigned int id) { } void CameraAI::Init() { +#ifndef EA_PLATFORM_PLAYSTATION2 TheAvoidables = new Avoidables(); +#endif } void CameraAI::Shutdown() { +#ifndef EA_PLATFORM_PLAYSTATION2 if (TheAvoidables != nullptr) { delete TheAvoidables; } TheAvoidables = nullptr; +#endif Director::List copy(Director::GetList()); for (Director *const *iter = copy.begin(); iter != copy.end(); ++iter) { Director *cd = *iter; @@ -482,17 +488,21 @@ void CameraAI::Shutdown() { } void CameraAI::AddAvoidable(IBody *body) { +#ifndef EA_PLATFORM_PLAYSTATION2 Avoidables::iterator iter = _STL::find(TheAvoidables->begin(), TheAvoidables->end(), body); if (iter == TheAvoidables->end()) { TheAvoidables->push_back(body); } +#endif } void CameraAI::RemoveAvoidable(IBody *body) { +#ifndef EA_PLATFORM_PLAYSTATION2 Avoidables::iterator iter = _STL::find(TheAvoidables->begin(), TheAvoidables->end(), body); if (iter != TheAvoidables->end()) { TheAvoidables->erase(iter); } +#endif } void CameraAI::StartCinematicSlowdown(EVIEW_ID viewID, float seconds) { diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index dd506a4b1..6b23b7ca8 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -26,6 +26,7 @@ Attrib::Key Attrib::Gen::camerainfo::ClassKey() { int AmIinATunnel(eView *view, int CheckOverPass); +#ifndef EA_PLATFORM_PLAYSTATION2 DECLARE_CONTAINER_TYPE(CameraAIAvoidables); struct Avoidables : public _STL::list > { @@ -41,6 +42,7 @@ struct Avoidables : public _STL::list >::const_iterator iter; for (iter = TheAvoidables->begin(); iter != TheAvoidables->end(); ++iter) { @@ -921,6 +924,7 @@ float CameraMover::AdjustHeightAroundCar(const bVector3 *position, bVector3 *pCa } } } +#endif return 0.0f; } @@ -932,6 +936,7 @@ bVector3 *CameraMover::DutchAroundCar(bVector3 *pCarPos, bVector3 *pCarVelocity) ret.y = 0.0f; { +#ifndef EA_PLATFORM_PLAYSTATION2 _STL::list >::const_iterator iter; for (iter = TheAvoidables->begin(); iter != TheAvoidables->end(); ++iter) { @@ -979,6 +984,7 @@ bVector3 *CameraMover::DutchAroundCar(bVector3 *pCarPos, bVector3 *pCarVelocity) } } } +#endif } return &ret; From 3f05ed98657c2a9c3269cbecc2c2cdd2246776e0 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 00:01:43 +0100 Subject: [PATCH 177/691] chore: remove stray notes file Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- DETAILED_FINDINGS.md | 194 ------------------------------------------- 1 file changed, 194 deletions(-) delete mode 100644 DETAILED_FINDINGS.md diff --git a/DETAILED_FINDINGS.md b/DETAILED_FINDINGS.md deleted file mode 100644 index 1310f663b..000000000 --- a/DETAILED_FINDINGS.md +++ /dev/null @@ -1,194 +0,0 @@ -# DETAILED TECHNICAL FINDINGS - zCamera Structural Analysis - -## KEY FINDINGS BY PATTERN - -### Pattern 1: Pure Register Allocation (Easiest Fixes) - -**ReplayPowerSlideScore (68.0%, 38B unmatched)** -- **Root Cause**: Different floating-point register usage for temporaries - - Left: f1, f13, f12, f0 assignments - - Right: f10, f0, f13, f12 assignments (different order) -- **Key Observation**: ALL arithmetic operations are IDENTICAL - - `fmsubs f0, f0, f11, f12` vs `fmsubs f0, f0, f11, f13` (just register names) - - `fmuls f13, f0, f13` vs `fmuls f0, f0, f12` (semantically equivalent reordering) -- **Branch Pattern Change**: `bso` (branch if summary overflow) → `bgt` + `fmr f1, f10` - - This achieves the same result but uses different registers -- **Fix Strategy**: This is likely a compiler preference for register reuse - - Try: Declaring temporaries in different order might help compiler preference - - Or: Using explicit register constraints with `__attribute__((register(r3)))` - -**ReplayJumpScore (75.6%, 46B unmatched)** -- **Root Cause**: Stack frame shrinking + one register saved removed - - Left: Stack -0x20, saves r30 - - Right: Stack -0x18, no r30 saved (r30 truly not needed) - - r30 used for loading constant in left, but directly loaded in right -- **Key Pattern**: `stmw r30, 0x10(r1)` removed in optimized version - - This means one fewer register to preserve - - Entire function can fit in fewer callee-saved registers -- **Fix Strategy**: - - Remove unnecessary register usage - - Let compiler optimize register pressure - -### Pattern 2: Stack Frame Optimization (Medium Difficulty) - -**FixWorldHeight (72.9%, 62B unmatched)** -- **Left Stack Setup**: - ``` - stwu r1, {-0x30}(r1) # Frame size 0x30 - stmw {r30}, {0x28}(r1) # Save from 0x28 - stw r0, {0x34}(r1) # Stack too small for this offset! - ``` -- **Right Stack Setup**: - ``` - stwu r1, {-0x38}(r1) # Frame size 0x38 (8 bytes more) - stmw {r29}, {0x2c}(r1) # Save from 0x2c (more conservative) - stw r0, {0x3c}(r1) # LR save at end - ``` -- **Key Difference**: Compiler made different frame size choice (0x30 vs 0x38) - - Left tries to be minimal but has register pressure issues - - Right uses more space but cleaner register allocation -- **Register Pressure**: r30→r29 swap due to different saved set -- **Fix Impact**: ~62B - mostly instructions, register assignment - -**GetGroundElevation (71.1%, 57B unmatched)** -- **Similar pattern** to FixWorldHeight -- Setup phase has instructions reordered but achieve same initialization -- Stack frame differences: tempt vector setups in different stack locations - -### Pattern 3: Complex Loop Scheduling (Hard) - -**ChooseGoodSceneCameraTrackIndex (70.8%, 233B unmatched)** -- **Initialization Loop Issue**: - - Left: 13 sequential `stfs f31, offset(r1)` instructions (redundant init) - - Right: Compiler eliminated loop-invariant stores - - Savings: ~52B from removing redundant setup - -- **Major Register Swaps Throughout**: - ``` - r23 ↔ r18 (player car transform matrix reference) - r24 ↔ r23 (temp position) - r30 ↔ f31 (best distance tracking - FLOAT vs INT register!) - ``` - -- **Vector Operations Reordering**: - - Same `eMulVector()` calls but different stack offsets - - Left stores at 0x48-0x54, Right stores at 0x68-0x74 - - Compiler made different stack allocation choices - -- **Why This Matters**: This function has a loop over camera tracks - - Each iteration does similar math - - Compiler optimized variable reuse aggressively - - Left version saves fewer registers but more stack accesses - - Right version uses more registers but cleaner - -### Pattern 4: Extreme Reordering (Very Hard) - -**DebugWorldCameraMover::Update (87.5%, 257B unmatched)** -- **Widespread Register Swaps**: - - r26 ↔ r25 (static global references to Eye/Look) - - f30 ↔ f31 (temporary float calculations) - - r29 ↔ r30 (object pointers) - -- **Large Instruction Reordering**: - ``` - Left sequence: - - stfs f0, 0x28(r1) - - stfs f13, 0x20(r1) - - stfs f12, 0x24(r1) - - bl bVector3 constructor - - (then uses values from stack) - - Right sequence: - - All the stfs mixed with loads/calculations - - No separate bVector3 constructor call - - Direct inline operations - ``` - -- **Missing Constructor Call**: - - Left: `bl bVector3::bVector3(bVector3 const &)` - - Right: Eliminated (inline copy) - - This is 4 instructions saved - -- **Stack Offset Shifting**: - - Left uses 0x80-0x88 region - - Right uses 0x40-0x48 region - - Completely different stack layout for same data - -- **Why It's Hard**: - - This isn't just register allocation - - Compiler inlined a constructor and reordered everything - - Would need source code refactoring or explicit inline attributes - - -## CODE GENERATION DIFFERENCES - -### Mismatch Categories: - -1. **Register Allocation Mismatch**: 20-30 instructions typically - - Different saved register set - - Different temp register usage - - Different immediate loading strategies - -2. **Stack Frame Mismatch**: 8-16 bytes typically - - Different padding strategies - - Different alignment choices - - Different local variable stack layouts - -3. **Instruction Reordering**: Variable, 10-50 instructions - - Load/store interleaving - - Due to compiler scheduler - - Doesn't change semantics - -4. **Optimization Differences**: 20-100+ instructions - - Loop-invariant code motion - - Dead code elimination - - Constant folding - -5. **Inlining Decisions**: 4-40 instructions - - Constructor inlining - - Small function inlining - - Wrapper function elimination - - -## ACTIONABLE RECOMMENDATIONS - -### Tier 1: ~100B Potential (Easy Fixes) -- **ReplayPowerSlideScore**: Focus on register naming conventions - - Add `#pragma clang attribute push (__attribute__((preserve_most)))` - - Or reorder temp variable declarations - -- **ReplayJumpScore**: Remove unused register from saved set - - May require refactoring to not use r30 - -- **FixWorldHeight**: Stack frame sizing - - Try adjusting local variable types or alignment - -### Tier 2: ~200B Potential (Medium Difficulty) -- **ChooseGoodSceneCameraTrackIndex**: - - Add loop initialization guards to prevent optimization - - Restructure vector operation storage pattern - - May need `#pragma unroll(1)` to prevent loop optimization - -- **GetGroundElevation**: - - Similar to FixWorldHeight - -### Tier 3: Defer (Very High Effort) -- **DebugWorldCameraMover::Update**: - - Would require significant refactoring - - Consider focusing on other functions first - - This is likely due to more aggressive -O3 vs -O2 settings - - -## COMPILER FLAGS HYPOTHESIS - -The differences suggest: -- Left compiled with: `-O2` or `-O1` (conservative) -- Right compiled with: `-O3` or `-O4` (aggressive) + link-time optimization (LTO) -- Possibly different `-march=` or `-mtune=` flags - -Evidence: -- Right eliminates loop-invariant code more aggressively -- Right inlines constructors -- Right makes bolder register allocation choices -- Right sometimes uses fewer stack bytes despite same logic - From e481ca308985b65e9c1fe53f908927c388fde60a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 00:31:48 +0100 Subject: [PATCH 178/691] revert shared header changes that don't affect zCamera - ISuspension.h: revert vtable order (GetCompression position) - UVectorMath.h: revert kFloatScaleUp/kFloatScaleDown to original values - bMath.hpp: revert bMin(int) to ternary form These changes caused regressions in other TUs without benefiting zCamera match percentage. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Libs/Support/Utility/UVectorMath.h | 6 +++--- src/Speed/Indep/Src/Interfaces/Simables/ISuspension.h | 3 +-- src/Speed/Indep/bWare/Inc/bMath.hpp | 3 +-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h b/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h index 24d96b4c8..357af2388 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h +++ b/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h @@ -698,8 +698,8 @@ inline float V3DistanceSquared(const UMath::Vector3 &a, const UMath::Vector3 &b) return dx * dx + dy * dy + dz * dz; } -// TODO where to put these? -static const float kFloatScaleUp = IntAsFloat(0x00800000); -static const float kFloatScaleDown = 1.0f / IntAsFloat(0x00800000); +// TODO where to put these? TODO only one of them uses IntAsFloat actually +static const float kFloatScaleUp = IntAsFloat(0x7E800000); +static const float kFloatScaleDown = IntAsFloat(0x80000000); #endif diff --git a/src/Speed/Indep/Src/Interfaces/Simables/ISuspension.h b/src/Speed/Indep/Src/Interfaces/Simables/ISuspension.h index 4b68f0d6f..acb98eebc 100644 --- a/src/Speed/Indep/Src/Interfaces/Simables/ISuspension.h +++ b/src/Speed/Indep/Src/Interfaces/Simables/ISuspension.h @@ -32,7 +32,7 @@ class ISuspension : public UTL::COM::IUnknown { virtual void ApplyVehicleEntryForces(bool enteringVehicle, const UMath::Vector3 &pos, bool calledfromEvent); virtual const float GetWheelRoadHeight(unsigned int i) const; virtual bool IsWheelOnGround(unsigned int i) const; - virtual void Unknown_ISuspension_0x58(); // TODO: unknown virtual + virtual float GetCompression(unsigned int i) const; virtual Meters GuessCompression(unsigned int wheelIndex, float downforce) const; virtual float GetWheelSlip(unsigned int idx) const; virtual float GetToleratedSlip(unsigned int idx) const; @@ -48,7 +48,6 @@ class ISuspension : public UTL::COM::IUnknown { virtual float CalculateUndersteerFactor() const; virtual float CalculateOversteerFactor() const; virtual Meters GetRideHeight(unsigned int wheelIndex) const; - virtual float GetCompression(unsigned int i) const; virtual float GetWheelRadius(unsigned int index) const; virtual float GetMaxSteering() const; virtual void MatchSpeed(float speed); diff --git a/src/Speed/Indep/bWare/Inc/bMath.hpp b/src/Speed/Indep/bWare/Inc/bMath.hpp index 7f2ad0cc0..e986d01cf 100644 --- a/src/Speed/Indep/bWare/Inc/bMath.hpp +++ b/src/Speed/Indep/bWare/Inc/bMath.hpp @@ -90,8 +90,7 @@ inline float bSqrt(float x) { } inline int bMin(int a, int b) { - if (b - a < 0) return b; - return a; + return a > b ? b : a; } inline float bMin(float a, float b) { From 7dbe6a5bfb8e1d90b70373997be20ad216602772 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 00:43:37 +0100 Subject: [PATCH 179/691] revert UMath::Clamp to original, use bClamp directly in zCamera - UMath::Clamp: revert to VU0_floatmax/VU0_floatmin (fixes physics regressions) - ICEManager.cpp, ICEReplay.cpp: use bClamp directly (keeps zCamera match) - WWorldPos.h: restore fSurface = nullptr in constructor Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Libs/Support/Utility/UMath.h | 4 ++-- src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp | 2 +- src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp | 8 ++++---- src/Speed/Indep/Src/World/WWorldPos.h | 1 + 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Libs/Support/Utility/UMath.h b/src/Speed/Indep/Libs/Support/Utility/UMath.h index 0767c4cda..0e6ff1446 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UMath.h +++ b/src/Speed/Indep/Libs/Support/Utility/UMath.h @@ -406,11 +406,11 @@ inline void Matrix4ToQuaternion(const Matrix4 &m, Vector4 &q) { } inline int Clamp(const int a, const int amin, const int amax) { - return bClamp(a, amin, amax); + return a < amin ? amin : (a > amax ? amax : a); } inline float Clamp(const float a, const float amin, const float amax) { - return bClamp(a, amin, amax); + return VU0_floatmax(amin, VU0_floatmin(a, amax)); } inline float Abs(const float a) { diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp index eeeb03065..ee194a188 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp @@ -186,7 +186,7 @@ float ICETrack::GetParameter() { ICEData *ICETrack::GetCameraData(float *p_start, float *p_end, float *p_current) { float f_param = GetParameter(); - if (f_param != UMath::Clamp(f_param, 0.0f, 1.0f)) { + if (f_param != bClamp(f_param, 0.0f, 1.0f)) { return 0; } diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp index e79f0e8bc..13f2552c0 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp @@ -73,14 +73,14 @@ static float ReplayBurnoutScore(ICEAnchor *p_car) { float ret = 0.0f; float forward_speed = p_car->GetVelocityMagnitude(); - if (forward_speed != UMath::Clamp(forward_speed, -10.0f, 20.0f)) { + if (forward_speed != bClamp(forward_speed, -10.0f, 20.0f)) { return ret; } float forward_slip = p_car->GetForwardSlip(); - ret = UMath::Clamp(forward_slip * 0.1f - 1.0f, 0.0f, 1.0f); + ret = bClamp(forward_slip * 0.1f - 1.0f, 0.0f, 1.0f); - if (forward_speed != UMath::Clamp(forward_speed, -1.0f, 1.0f)) { + if (forward_speed != bClamp(forward_speed, -1.0f, 1.0f)) { return ret; } if (p_car->GetRPM() <= 3000.0f) { @@ -108,7 +108,7 @@ static float ReplayPowerSlideScore(ICEAnchor *p_car) { return ret; } - return UMath::Clamp(yaw + 0.1f, 0.0f, 1.0f); + return bClamp(yaw + 0.1f, 0.0f, 1.0f); } } diff --git a/src/Speed/Indep/Src/World/WWorldPos.h b/src/Speed/Indep/Src/World/WWorldPos.h index 6c2543b26..6126a97e5 100644 --- a/src/Speed/Indep/Src/World/WWorldPos.h +++ b/src/Speed/Indep/Src/World/WWorldPos.h @@ -36,6 +36,7 @@ struct WWorldPos { fMissCount = 0; fUsageCount = 0; fYOffset = yOffset; + fSurface = nullptr; } ~WWorldPos() {} From bec0ccf4266ebea79f73212d1909384f064c8082 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 01:04:05 +0100 Subject: [PATCH 180/691] fix major regressions: VU0_fabs, ListableSet, Timer - UVectorMath.h: revert VU0_fabs GC asm path (original uses branching abs) - ICEData.cpp, ICEReplay.cpp, CDActionDrive.cpp: use bAbs instead of UMath::Abs - UListable.h: ListableSet::_remove uses std::remove with non-const pointer - Timer.hpp: restore PackedTime = 0 in default ctor Fixes ~38 physics regressions (VU0_fabs), zAI/zSim broken matches (ListableSet). zCamera at 89.9% (360/453 functions). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Libs/Support/Utility/UListable.h | 12 ++++++------ src/Speed/Indep/Libs/Support/Utility/UVectorMath.h | 4 ---- src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp | 2 +- src/Speed/Indep/Src/Camera/ICE/ICEData.cpp | 10 +++++----- src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp | 2 +- src/Speed/Indep/Src/Misc/Timer.hpp | 4 +++- 6 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/Speed/Indep/Libs/Support/Utility/UListable.h b/src/Speed/Indep/Libs/Support/Utility/UListable.h index 25eb26eba..fd915eb19 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UListable.h +++ b/src/Speed/Indep/Libs/Support/Utility/UListable.h @@ -106,11 +106,11 @@ template class Li _buckets[idx].push_back(t); } - void _remove(const_pointer t, std::size_t idx) { - const List &bucket = _buckets[idx]; - typename List::const_iterator pos = std::find(bucket.begin(), bucket.end(), t); - if (pos != bucket.end()) { - _buckets[idx].erase(_buckets[idx].begin() + (pos - bucket.begin())); + void _remove(pointer t, std::size_t idx) { + List &bucket = _buckets[idx]; + typename List::iterator newend = std::remove(bucket.begin(), bucket.end(), t); + if (newend != bucket.end()) { + bucket.erase(newend, bucket.end()); } } @@ -133,7 +133,7 @@ template class Li void UnList() { for (std::size_t i = 0; i < EnumMax; i++) { - _mLists._remove(static_cast(this), i); + _mLists._remove(static_cast(this), i); } } diff --git a/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h b/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h index 357af2388..b587abc28 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h +++ b/src/Speed/Indep/Libs/Support/Utility/UVectorMath.h @@ -276,10 +276,6 @@ inline float VU0_fabs(const float a) { float result; asm __volatile__("abs.s %0, %1" : "=f"(result) : "f"(a)); return result; -#elif defined(EA_PLATFORM_GAMECUBE) - float result; - asm("fabs %0, %1" : "=f"(result) : "f"(a)); - return result; #else if (a < 0.0f) { return -a; diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index d55804caf..bc47d9745 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -530,7 +530,7 @@ void CDActionDrive::Update(float dT) { float drift = 0.0f; if (mAnchor->IsTouchingGround() && mVehicle != nullptr) { - float slipangle = UMath::Abs(mVehicle->GetSlipAngle()); + float slipangle = bAbs(mVehicle->GetSlipAngle()); slipangle = ANGLE2DEG(slipangle); drift = UMath::Ramp(slipangle, 5.0f, 45.0f); float speedFactor = UMath::Ramp(mVehicle->GetAbsoluteSpeed() - 10.0f, 0.0f, 10.0f); diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEData.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEData.cpp index 0d30977a8..886d6ba19 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEData.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEData.cpp @@ -56,13 +56,13 @@ namespace ICE { bool KeysSharedSpace(ICEData *p1, int n1, ICEData *p2, int n2); bool KeysShared(ICEData *p1, int n1, ICEData *p2, int n2) { - if (UMath::Abs(p1->fTangentLength[n1] - p2->fTangentLength[n2]) > 0.001f) { + if (bAbs(p1->fTangentLength[n1] - p2->fTangentLength[n2]) > 0.001f) { return false; } - if (UMath::Abs(p1->fDutch[n1] - p2->fDutch[n2]) > 0.001f) { + if (bAbs(p1->fDutch[n1] - p2->fDutch[n2]) > 0.001f) { return false; } - if (UMath::Abs(p1->fLens[n1] - p2->fLens[n2]) > 0.001f) { + if (bAbs(p1->fLens[n1] - p2->fLens[n2]) > 0.001f) { return false; } return KeysSharedSpace(p1, n1, p2, n2); @@ -79,10 +79,10 @@ bool KeysSharedSpace(ICEData *p1, int n1, ICEData *p2, int n2) { return false; } for (int i = 0; i < 3; i++) { - if (UMath::Abs(p1->vEye[n1][i] - p2->vEye[n2][i]) > 0.001f) { + if (bAbs(p1->vEye[n1][i] - p2->vEye[n2][i]) > 0.001f) { return false; } - if (UMath::Abs(p1->vLook[n1][i] - p2->vLook[n2][i]) > 0.001f) { + if (bAbs(p1->vLook[n1][i] - p2->vLook[n2][i]) > 0.001f) { return false; } } diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp index 13f2552c0..c820e7961 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp @@ -102,7 +102,7 @@ static float ReplayPowerSlideScore(ICEAnchor *p_car) { } { - float yaw = (UMath::Abs(p_car->GetSlipAngle()) * 360.0f - 5.0f) * 0.025f; + float yaw = (bAbs(p_car->GetSlipAngle()) * 360.0f - 5.0f) * 0.025f; if (yaw <= ret) { return ret; diff --git a/src/Speed/Indep/Src/Misc/Timer.hpp b/src/Speed/Indep/Src/Misc/Timer.hpp index c0a790f6d..621ce9360 100644 --- a/src/Speed/Indep/Src/Misc/Timer.hpp +++ b/src/Speed/Indep/Src/Misc/Timer.hpp @@ -8,7 +8,9 @@ // total size: 0x4 class Timer { public: - Timer() {} + Timer() { + this->PackedTime = 0; + } Timer(float seconds) { this->PackedTime = static_cast(seconds * 4000); From 7456a1b8ed49dec96f19ea9a3cb0f2f60a135c83 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 02:49:53 +0100 Subject: [PATCH 181/691] 90.0%: recover IVehicle find instantiation Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/SourceLists/zCamera.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Speed/Indep/SourceLists/zCamera.cpp b/src/Speed/Indep/SourceLists/zCamera.cpp index 58932488c..daf64b6cc 100644 --- a/src/Speed/Indep/SourceLists/zCamera.cpp +++ b/src/Speed/Indep/SourceLists/zCamera.cpp @@ -27,3 +27,11 @@ #include "Speed/Indep/Src/Camera/ICE/ICERender.cpp" #include "Speed/Indep/Src/Camera/ICE/ICEOverlays.cpp" #include "Speed/Indep/Src/Camera/ICE/ICEManager.cpp" + +namespace _STL { +template IVehicle *const *find( + IVehicle *const *, + IVehicle *const *, + IVehicle const *const & +); +} From 7f97b5550199af6b85bdf1ef7a959d1db14239e2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 12:03:37 +0100 Subject: [PATCH 182/691] style: apply safe review cleanups Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/SourceLists/zCamera.cpp | 36 ++- .../Src/Camera/Actions/CDActionDebug.cpp | 4 +- .../Camera/Actions/CDActionDebugWatchCar.cpp | 8 +- src/Speed/Indep/Src/Camera/CameraAI.cpp | 8 + src/Speed/Indep/Src/Frontend/FEManager.cpp | 20 +- .../FEngInterfaces/FEGameInterface.cpp | 251 +++++++++++++----- 6 files changed, 242 insertions(+), 85 deletions(-) diff --git a/src/Speed/Indep/SourceLists/zCamera.cpp b/src/Speed/Indep/SourceLists/zCamera.cpp index daf64b6cc..8b4096215 100644 --- a/src/Speed/Indep/SourceLists/zCamera.cpp +++ b/src/Speed/Indep/SourceLists/zCamera.cpp @@ -1,37 +1,57 @@ #include "Speed/Indep/Src/Camera/Camera.cpp" + #include "Speed/Indep/Src/Camera/CameraMover.cpp" + #include "Speed/Indep/Src/Camera/CameraAI.cpp" + #include "Speed/Indep/Src/Camera/ChaseCamAI.cpp" + #include "Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp" + #include "Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp" + #include "Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp" + #include "Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp" + #include "Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp" + #include "Speed/Indep/Src/Camera/Actions/CDActionIce.cpp" + #include "Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp" + #include "Speed/Indep/Src/Camera/Movers/Cubic.cpp" + #include "Speed/Indep/Src/Camera/Movers/TrackCar.cpp" + #include "Speed/Indep/Src/Camera/Movers/TrackCop.cpp" + #include "Speed/Indep/Src/Camera/Movers/Rearview.cpp" + #include "Speed/Indep/Src/Camera/Movers/SelectCar.cpp" + #include "Speed/Indep/Src/Camera/Movers/Showcase.cpp" + #include "Speed/Indep/Src/Camera/Movers/DebugWorld.cpp" + #include "Speed/Indep/Src/Camera/Movers/Still.cpp" + #include "Speed/Indep/Src/Camera/Movers/CopView.cpp" + #include "Speed/Indep/Src/Camera/ICE/ICEData.cpp" + #include "Speed/Indep/Src/Camera/ICE/ICEAnchor.cpp" + #include "Speed/Indep/Src/Camera/ICE/ICEAnimScene.cpp" + #include "Speed/Indep/Src/Camera/ICE/ICEMover.cpp" + #include "Speed/Indep/Src/Camera/ICE/ICEReplay.cpp" + #include "Speed/Indep/Src/Camera/ICE/ICEPoint.cpp" + #include "Speed/Indep/Src/Camera/ICE/ICERender.cpp" + #include "Speed/Indep/Src/Camera/ICE/ICEOverlays.cpp" -#include "Speed/Indep/Src/Camera/ICE/ICEManager.cpp" -namespace _STL { -template IVehicle *const *find( - IVehicle *const *, - IVehicle *const *, - IVehicle const *const & -); -} +#include "Speed/Indep/Src/Camera/ICE/ICEManager.cpp" diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp index 2313159e7..59b7f7bc3 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebug.cpp @@ -31,10 +31,10 @@ CDActionDebug::CDActionDebug(CameraAI::Director *director) bVector3 start_direction(0.0f, 0.0f, 1.0f); Action *prev_action = director->GetAction(); - if (prev_action != nullptr) { + if (prev_action) { mPrev = prev_action->GetName(); CameraMover *prev_mover = prev_action->GetMover(); - if (prev_mover != nullptr) { + if (prev_mover) { start_position = *prev_mover->GetPosition(); start_direction = *prev_mover->GetDirection(); } diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp index da72f23f3..9a392bcc0 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDebugWatchCar.cpp @@ -9,6 +9,8 @@ extern eVehicleList mToggleCarList; extern bool CameraDebugWatchCar; +// TODO: Confirm the original home and linkage of these camera-debug globals. + template <> UTL::Collections::Listable::List UTL::Collections::Listable::_mTable; @@ -40,7 +42,7 @@ void CDActionDebugWatchCar::ReleaseTarget() { void CDActionDebugWatchCar::AquireTarget() { ISimable *isim = ISimable::FindInstance(mhSimable); - if (isim == nullptr) { + if (!isim) { ReleaseTarget(); } @@ -48,14 +50,14 @@ void CDActionDebugWatchCar::AquireTarget() { int count = IVehicle::Count(mToggleCarList); if (count != 0) { IVehicle *ivehicle = IVehicle::GetList(mToggleCarList)[static_cast(mToggleCar % count)]; - if (ivehicle != nullptr) { + if (ivehicle) { if (ivehicle->GetSimable()->GetInstanceHandle() != mhSimable) { unsigned int world_id = ivehicle->GetSimable()->GetWorldID(); if (world_id != 0) { ReleaseTarget(); CameraAnchor *anchor = mAnchor; const char *model_str = ivehicle->GetVehicleAttributes().MODEL().GetString(); - if (model_str == nullptr) { + if (!model_str) { model_str = ""; } anchor->SetModel(bStringHash(model_str)); diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index 9c42f8800..509d8788e 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -22,6 +22,14 @@ #include "Speed/Indep/Src/Speech/SoundAI.h" #include "Speed/Indep/Src/World/TrackPath.hpp" +namespace _STL { +template IVehicle *const *find( + IVehicle *const *, + IVehicle *const *, + IVehicle const *const & +); +} + #ifndef EA_PLATFORM_PLAYSTATION2 extern Avoidables *TheAvoidables; #endif diff --git a/src/Speed/Indep/Src/Frontend/FEManager.cpp b/src/Speed/Indep/Src/Frontend/FEManager.cpp index d417c5590..b601ef69f 100644 --- a/src/Speed/Indep/Src/Frontend/FEManager.cpp +++ b/src/Speed/Indep/Src/Frontend/FEManager.cpp @@ -27,18 +27,18 @@ void InitLoadingTipsScreen(); void InitLoadingControllerScreen(); void InitChyron(); void DismissChyron(); -void SummonChyron(char*, char*, char*); +void SummonChyron(char *, char *, char *); void ChoppedMiniMapManager_Init(); -void PlayFEMusic_EAXSound(EAXSound* sound, int id); +void PlayFEMusic_EAXSound(EAXSound *sound, int id); void SteeringWheels_StopAllForces(); void UpdateGarageCarLoaders(); unsigned long FEngMapJoyportToJoyParam(int port); int FadeScreen_IsOn(); void BootFlowManager_Init(); void BootFlowManager_Destroy(); -void EasterEggs_HandleJoy(EasterEggs* eggs); +void EasterEggs_HandleJoy(EasterEggs *eggs); -extern cFEngRender* cFEngRender_mInstance; +extern cFEngRender *cFEngRender_mInstance; extern int DrawFEng; extern int DoScreenPrintf; extern int SummonChyronNow; @@ -47,13 +47,13 @@ extern bool CarViewer_haveLoadedOnce; extern EasterEggs gEasterEggs; void ShowCarScreen_CarViewer(); -void BuildCurrentRideForPlayer_cFrontendDatabase(cFrontendDatabase* db, int player, RideInfo* ride); -void SetRideInfo_CarViewer(RideInfo* ride, int reason, int which_car); +void BuildCurrentRideForPlayer_cFrontendDatabase(cFrontendDatabase *db, int player, RideInfo *ride); +void SetRideInfo_CarViewer(RideInfo *ride, int reason, int which_car); void ShowAllCars_CarViewer(); -FEManager* FEManager::mInstance = nullptr; +FEManager *FEManager::mInstance = nullptr; int FEManager::mPauseRequest = 0; -const char* FEManager::mPauseReason[8] = {}; +const char *FEManager::mPauseReason[8] = {}; FEManager::FEManager() { mFirstScreenMask = 0xff; @@ -93,7 +93,7 @@ void FEManager::InitInput() { cFEngJoyInput::mInstance = new cFEngJoyInput(); } -FEManager* FEManager::Get() { +FEManager *FEManager::Get() { return mInstance; } @@ -107,7 +107,7 @@ void FEManager::SetGarageType(eGarageType pGarageType) { mPreviousGarageType = old; } -const char* FEManager::GetGarageNameFromType() { +const char *FEManager::GetGarageNameFromType() { switch (mGarageType) { case GARAGETYPE_NONE: return ""; case GARAGETYPE_MAIN_FE: return "FE_Garage"; diff --git a/src/Speed/Indep/Src/Frontend/FEngInterfaces/FEGameInterface.cpp b/src/Speed/Indep/Src/Frontend/FEngInterfaces/FEGameInterface.cpp index 8fc90eada..f8328f4d8 100644 --- a/src/Speed/Indep/Src/Frontend/FEngInterfaces/FEGameInterface.cpp +++ b/src/Speed/Indep/Src/Frontend/FEngInterfaces/FEGameInterface.cpp @@ -9,105 +9,232 @@ #include "Speed/Indep/Src/Frontend/FEPackageManager.hpp" #include "Speed/Indep/Src/Frontend/FEJoyInput.hpp" #include "Speed/Indep/Src/Gameplay/GRaceStatus.h" -struct FEMatrix4 { float data[16]; void Identify(); }; + +struct FEMatrix4 { + float data[16]; + void Identify(); +}; + struct RenderContext; struct FEngine; + struct cFEngRender { - static cFEngRender* mInstance; - RenderContext* GetRenderContext(unsigned short RenderContext); - void GenerateRenderContext(unsigned short GroupContext, FEObject* pObject); - void PrepForPackage(FEPackage* pPackage); - void PackageFinished(FEPackage* pPackage); - void AddToRenderList(FEObject* pObject); + static cFEngRender *mInstance; + RenderContext *GetRenderContext(unsigned short renderContext); + void GenerateRenderContext(unsigned short groupContext, FEObject *pObject); + void PrepForPackage(FEPackage *pPackage); + void PackageFinished(FEPackage *pPackage); + void AddToRenderList(FEObject *pObject); }; + extern FEColor gNormal; extern FEColor gTint; extern FEColor gRapsheet; extern int g_discErrorOccured; extern int FEngPleaseRenderSinglePackage; -void GetBaseName(char* dst, const char* src); -void bToUpper(char* s); -unsigned int bStringHash(const char* s); -void* bMalloc(int size, int param); -void bStrNCpy(char* dst, const char* src, int size); -void bFree(void* ptr); -unsigned int FEHashUpper(const char* name); -FEPackageRenderInfo* HACK_FEPkgMgr_GetPackageRenderInfo(FEPackage* pkg); -bool FEngTestForIntersection(float x, float y, FEObject* obj); -cFEngGameInterface* cFEngGameInterface::pInstance = nullptr; -cFEngGameInterface::cFEngGameInterface() { RenderThisPackage = false; iGameMode = 0; } -cFEngGameInterface::~cFEngGameInterface() {} -bool cFEngGameInterface::LoadResources(FEPackage* pPackage, int Count, FEResourceRequest* pList) { + +void GetBaseName(char *dst, const char *src); +void bToUpper(char *s); +unsigned int bStringHash(const char *s); +void *bMalloc(int size, int param); +void bStrNCpy(char *dst, const char *src, int size); +void bFree(void *ptr); +unsigned int FEHashUpper(const char *name); +FEPackageRenderInfo *HACK_FEPkgMgr_GetPackageRenderInfo(FEPackage *pkg); +bool FEngTestForIntersection(float x, float y, FEObject *obj); + +cFEngGameInterface *cFEngGameInterface::pInstance = nullptr; + +cFEngGameInterface::cFEngGameInterface() { + RenderThisPackage = false; + iGameMode = 0; +} + +cFEngGameInterface::~cFEngGameInterface() { +} + +bool cFEngGameInterface::LoadResources(FEPackage *pPackage, int Count, FEResourceRequest *pList) { for (int i = 0; i < Count; i++) { - FEResourceRequest* req = &pList[i]; + FEResourceRequest *req = &pList[i]; char filename[256]; GetBaseName(filename, req->pFilename); bToUpper(filename); unsigned long type = req->Type; - if (type == 1 || type == 2) { req->Handle = bStringHash(filename); req->UserParam = 0; } - else if (type == 4) { void* mem = bMalloc(256, 0); bStrNCpy(static_cast(mem), filename, 256); req->Handle = reinterpret_cast(mem); req->UserParam = 0; } - else { req->Handle = bStringHash(filename); req->UserParam = 0; } + if (type == 1 || type == 2) { + req->Handle = bStringHash(filename); + req->UserParam = 0; + } else if (type == 4) { + void *mem = bMalloc(256, 0); + bStrNCpy(static_cast(mem), filename, 256); + req->Handle = reinterpret_cast(mem); + req->UserParam = 0; + } else { + req->Handle = bStringHash(filename); + req->UserParam = 0; + } } return true; } -bool cFEngGameInterface::UnloadResources(FEPackage* pPackage, int Count, FEResourceRequest* pList) { - for (int i = 0; i < Count; i++) { if (pList[i].Type == 4) bFree(reinterpret_cast(pList[i].Handle)); } + +bool cFEngGameInterface::UnloadResources(FEPackage *pPackage, int Count, FEResourceRequest *pList) { + for (int i = 0; i < Count; i++) { + if (pList[i].Type == 4) { + bFree(reinterpret_cast(pList[i].Handle)); + } + } return true; } -void cFEngGameInterface::NotificationMessage(unsigned long Message, FEObject* pObject, unsigned long Param1, unsigned long Param2) { - if (Message != 0x5922615 && Message != 0x7E4D1288) FEPackageManager::Get()->NotificationMessage(Message, pObject, Param1, Param2); + +void cFEngGameInterface::NotificationMessage( + unsigned long Message, + FEObject *pObject, + unsigned long Param1, + unsigned long Param2 +) { + if (Message != 0x5922615 && Message != 0x7E4D1288) { + FEPackageManager::Get()->NotificationMessage(Message, pObject, Param1, Param2); + } } -void cFEngGameInterface::NotifySoundMessage(unsigned long Message, FEObject* pObject, unsigned long ControlMask, unsigned long pPackagePtr) { + +void cFEngGameInterface::NotifySoundMessage( + unsigned long Message, + FEObject *pObject, + unsigned long ControlMask, + unsigned long pPackagePtr +) { FEPackageManager::Get()->NotifySoundMessage(Message, pObject, ControlMask, pPackagePtr); } -void cFEngGameInterface::GenerateRenderContext(unsigned short uContext, FEObject* pObject) { cFEngRender::mInstance->GenerateRenderContext(uContext, pObject); } -bool cFEngGameInterface::GetContextTransform(unsigned short uContext, FEMatrix4& Matrix) { + +void cFEngGameInterface::GenerateRenderContext(unsigned short uContext, FEObject *pObject) { + cFEngRender::mInstance->GenerateRenderContext(uContext, pObject); +} + +bool cFEngGameInterface::GetContextTransform(unsigned short uContext, FEMatrix4 &Matrix) { Matrix.Identify(); - if (uContext != 0) { RenderContext* ctxt = cFEngRender::mInstance->GetRenderContext(uContext); if (ctxt) Matrix = *reinterpret_cast(ctxt); } + if (uContext != 0) { + RenderContext *ctxt = cFEngRender::mInstance->GetRenderContext(uContext); + if (ctxt) { + Matrix = *reinterpret_cast(ctxt); + } + } return true; } -void cFEngGameInterface::RenderObject(FEObject* pObject) { + +void cFEngGameInterface::RenderObject(FEObject *pObject) { bool visible = false; - if (!(pObject->Flags & 1)) { if (RenderThisPackage) visible = true; } + if (!(pObject->Flags & 1)) { + if (RenderThisPackage) { + visible = true; + } + } + if (pObject->Flags & 0x10) { - FEObjData* data = pObject->GetObjData(); - if (iGameMode == 0) data->Color = gNormal; - else if (iGameMode == 1) data->Color = gTint; - else if (iGameMode == 2) data->Color = gRapsheet; + FEObjData *data = pObject->GetObjData(); + if (iGameMode == 0) { + data->Color = gNormal; + } else if (iGameMode == 1) { + data->Color = gTint; + } else if (iGameMode == 2) { + data->Color = gRapsheet; + } } - if (visible) cFEngRender::mInstance->AddToRenderList(pObject); + + if (visible) { + cFEngRender::mInstance->AddToRenderList(pObject); + } +} + +void cFEngGameInterface::GetViewTransformation(FEMatrix4 *pView) { + pView->Identify(); } -void cFEngGameInterface::GetViewTransformation(FEMatrix4* pView) { pView->Identify(); } -void cFEngGameInterface::BeginPackageRendering(FEPackage* pPackage) { + +void cFEngGameInterface::BeginPackageRendering(FEPackage *pPackage) { RenderThisPackage = true; - if (g_discErrorOccured && pPackage->GetNameHash() != 0x942C98B5) RenderThisPackage = false; - if (FEngPleaseRenderSinglePackage) { if (FEHashUpper(pPackage->GetName()) != pPackage->GetNameHash()) RenderThisPackage = false; } - if (!FEPackageManager::Get()->GetVisibility(pPackage->GetName())) RenderThisPackage = false; + if (g_discErrorOccured && pPackage->GetNameHash() != 0x942C98B5) { + RenderThisPackage = false; + } + if (FEngPleaseRenderSinglePackage) { + if (FEHashUpper(pPackage->GetName()) != pPackage->GetNameHash()) { + RenderThisPackage = false; + } + } + if (!FEPackageManager::Get()->GetVisibility(pPackage->GetName())) { + RenderThisPackage = false; + } cFEngRender::mInstance->PrepForPackage(pPackage); } -void cFEngGameInterface::EndPackageRendering(FEPackage* pPackage) { cFEngRender::mInstance->PackageFinished(pPackage); } -void cFEngGameInterface::PackageWasLoaded(FEPackage* pPackage) { + +void cFEngGameInterface::EndPackageRendering(FEPackage *pPackage) { + cFEngRender::mInstance->PackageFinished(pPackage); +} + +void cFEngGameInterface::PackageWasLoaded(FEPackage *pPackage) { pPackage->InitializePackage(); pPackage->bExecuting = true; - if (!pPackage->bIsLibrary) pPackage->Update(cFEng::Get()->mFEng, 0); + if (!pPackage->bIsLibrary) { + pPackage->Update(cFEng::Get()->mFEng, 0); + } FEPackageManager::Get()->PackageWasLoaded(pPackage); - { FEngMovieStarter movie_starter(pPackage); pPackage->ForAllObjects(movie_starter); } - { FEngHidePCObjects pcHideObjects; pPackage->ForAllObjects(pcHideObjects); } - { FEngTransferFlagsToChildren transfer_to_children(4); pPackage->ForAllObjects(transfer_to_children); } - if (GRaceStatus::Exists()) iGameMode = 1; - else { if (FEDatabase && (FEDatabase->GetFEGameMode() & eFE_GAME_MODE_RAP_SHEET)) iGameMode = 2; else iGameMode = 0; } -} -bool cFEngGameInterface::PackageWillUnload(FEPackage* pPackage) { - { FEngMovieStopper movie_stop; pPackage->ForAllObjects(movie_stop); } - { RenderObjectDisconnect disconnect(HACK_FEPkgMgr_GetPackageRenderInfo(pPackage), cFEngRender::mInstance); pPackage->ForAllObjects(disconnect); } + + { + FEngMovieStarter movie_starter(pPackage); + pPackage->ForAllObjects(movie_starter); + } + { + FEngHidePCObjects pcHideObjects; + pPackage->ForAllObjects(pcHideObjects); + } + { + FEngTransferFlagsToChildren transfer_to_children(4); + pPackage->ForAllObjects(transfer_to_children); + } + + if (GRaceStatus::Exists()) { + iGameMode = 1; + } else { + if (FEDatabase && (FEDatabase->GetFEGameMode() & eFE_GAME_MODE_RAP_SHEET)) { + iGameMode = 2; + } else { + iGameMode = 0; + } + } +} + +bool cFEngGameInterface::PackageWillUnload(FEPackage *pPackage) { + { + FEngMovieStopper movie_stop; + pPackage->ForAllObjects(movie_stop); + } + { + RenderObjectDisconnect disconnect( + HACK_FEPkgMgr_GetPackageRenderInfo(pPackage), + cFEngRender::mInstance + ); + pPackage->ForAllObjects(disconnect); + } FEPackageManager::Get()->PackageWillBeUnloaded(pPackage); return true; } -unsigned char* cFEngGameInterface::GetPackageData(const char* pPackageName, unsigned char** pBlockStart, bool& bDeleteBlock) { + +unsigned char *cFEngGameInterface::GetPackageData( + const char *pPackageName, + unsigned char **pBlockStart, + bool &bDeleteBlock +) { bDeleteBlock = false; - return static_cast(FEPackageManager::Get()->GetPackageData(pPackageName)); + return static_cast(FEPackageManager::Get()->GetPackageData(pPackageName)); +} + +unsigned long cFEngGameInterface::GetJoyPadMask(unsigned char feng_pad_index) { + return cFEngJoyInput::mInstance->GetJoyPadMask(feng_pad_index); +} + +void cFEngGameInterface::GetMouseInfo(FEMouseInfo &Info) { +} + +bool cFEngGameInterface::DoesPointTouchObject(float xPos, float yPos, FEObject *pButton) { + return FEngTestForIntersection(xPos, yPos, pButton); +} + +void cFEngGameInterface::OutputWarning(const char *pString, FEng_WarningLevel WarningLevel) { } -unsigned long cFEngGameInterface::GetJoyPadMask(unsigned char feng_pad_index) { return cFEngJoyInput::mInstance->GetJoyPadMask(feng_pad_index); } -void cFEngGameInterface::GetMouseInfo(FEMouseInfo& Info) {} -bool cFEngGameInterface::DoesPointTouchObject(float xPos, float yPos, FEObject* pButton) { return FEngTestForIntersection(xPos, yPos, pButton); } -void cFEngGameInterface::OutputWarning(const char* pString, FEng_WarningLevel WarningLevel) {} From 35aa876e85c13ce2f667749a09feaf0c6c01d2d4 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 12:20:18 +0100 Subject: [PATCH 183/691] style: apply audit-driven frontend cleanup Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Frontend/FEManager.cpp | 8 ++--- .../Indep/Src/Frontend/FEObjectCallbacks.cpp | 30 ++++++++-------- .../MenuScreens/Common/FEAnyMovieScreen.cpp | 28 +++++++-------- .../Common/FEAnyTutorialScreen.cpp | 34 +++++++++---------- .../Safehouse/options/uiOptionsTrailers.cpp | 10 +++--- src/Speed/Indep/Src/Frontend/SubTitle.cpp | 30 ++++++++-------- 6 files changed, 70 insertions(+), 70 deletions(-) diff --git a/src/Speed/Indep/Src/Frontend/FEManager.cpp b/src/Speed/Indep/Src/Frontend/FEManager.cpp index b601ef69f..1524acbf2 100644 --- a/src/Speed/Indep/Src/Frontend/FEManager.cpp +++ b/src/Speed/Indep/Src/Frontend/FEManager.cpp @@ -119,7 +119,7 @@ const char *FEManager::GetGarageNameFromType() { } } -const char* FEManager::GetGaragePrefixFromType(eGarageType pGarageType) { +const char *FEManager::GetGaragePrefixFromType(eGarageType pGarageType) { switch (pGarageType) { case GARAGETYPE_NONE: return ""; case GARAGETYPE_MAIN_FE: return "FE"; @@ -144,12 +144,12 @@ bool FEManager::ShouldPauseSimulation(bool useControllerErrors) { return mPauseRequest != 0; } -void FEManager::RequestPauseSimulation(const char* reason) { +void FEManager::RequestPauseSimulation(const char *reason) { mPauseReason[mPauseRequest] = reason; mPauseRequest++; } -void FEManager::RequestUnPauseSimulation(const char* reason) { +void FEManager::RequestUnPauseSimulation(const char *reason) { mPauseRequest--; } @@ -212,7 +212,7 @@ void FEManager::Update() { } IOModule& iomod = IOModule::GetIOModule(); for (int d = 0; d < iomod.fNumDevices; d++) { - InputDevice* dev = iomod.GetDevice(d); + InputDevice *dev = iomod.GetDevice(d); if (dev != nullptr) dev->PollDevices(); } unsigned long jp = FEngMapJoyportToJoyParam(port); diff --git a/src/Speed/Indep/Src/Frontend/FEObjectCallbacks.cpp b/src/Speed/Indep/Src/Frontend/FEObjectCallbacks.cpp index e297792bc..7f48cfd1d 100644 --- a/src/Speed/Indep/Src/Frontend/FEObjectCallbacks.cpp +++ b/src/Speed/Indep/Src/Frontend/FEObjectCallbacks.cpp @@ -11,21 +11,21 @@ extern int SkipMovies; enum eLanguages; -int GetMovieNameEnum(const char* name); +int GetMovieNameEnum(const char *name); eLanguages GetCurrentLanguage(); -void CalculateMovieFilename(char* buffer, int size, const char* name, eLanguages lang); -bool bFileExists(const char* filename); -void bStrNCpy(char* dst, const char* src, int size); +void CalculateMovieFilename(char *buffer, int size, const char *name, eLanguages lang); +bool bFileExists(const char *filename); +void bStrNCpy(char *dst, const char *src, int size); -void FEngSetInvisible(FEObject* obj); -void FEngSetVisibility(FEObject* obj, bool visible); +void FEngSetInvisible(FEObject *obj); +void FEngSetVisibility(FEObject *obj, bool visible); -bool FEngMovieStarter::Callback(FEObject* obj) { +bool FEngMovieStarter::Callback(FEObject *obj) { if (obj->Type == FE_Movie) { if (SkipMovies) { cFEng::Get()->QueueGameMessagePkg(0xC3960EB9, pPackage); } - const char* movie_name = reinterpret_cast(obj->Handle); + const char *movie_name = reinterpret_cast(obj->Handle); char buffer[64]; int movieID = GetMovieNameEnum(movie_name); eLanguages lang = GetCurrentLanguage(); @@ -60,7 +60,7 @@ bool FEngMovieStarter::Callback(FEObject* obj) { return true; } -bool FEngMovieStopper::Callback(FEObject* obj) { +bool FEngMovieStopper::Callback(FEObject *obj) { if (obj->Type == FE_Movie) { if (gMoviePlayer) { gMoviePlayer->Stop(); @@ -71,7 +71,7 @@ bool FEngMovieStopper::Callback(FEObject* obj) { return true; } -bool FEngHidePCObjects::Callback(FEObject* obj) { +bool FEngHidePCObjects::Callback(FEObject *obj) { if (obj->Flags & 0x8) { FEngSetInvisible(obj); if (obj->Flags & 0x10000000) { @@ -82,10 +82,10 @@ bool FEngHidePCObjects::Callback(FEObject* obj) { return true; } -bool FEngTransferFlagsToChildren::Callback(FEObject* obj) { +bool FEngTransferFlagsToChildren::Callback(FEObject *obj) { if ((obj->Flags & FlagToTransfer) && obj->Type == FE_Group) { - FEGroup* group = static_cast(obj); - FEObject* child = group->GetFirstChild(); + FEGroup *group = static_cast(obj); + FEObject *child = group->GetFirstChild(); int num = group->GetNumChildren(); for (int i = 0; i < num; i++) { child->Flags |= FlagToTransfer; @@ -96,12 +96,12 @@ bool FEngTransferFlagsToChildren::Callback(FEObject* obj) { return true; } -bool RenderObjectDisconnect::Callback(FEObject* pObj) { +bool RenderObjectDisconnect::Callback(FEObject *pObj) { pObj->Cached = nullptr; return true; } -bool ObjectDirtySetter::Callback(FEObject* obj) { +bool ObjectDirtySetter::Callback(FEObject *obj) { obj->Cached = nullptr; return true; } diff --git a/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyMovieScreen.cpp b/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyMovieScreen.cpp index 7563c53e7..11419a768 100644 --- a/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyMovieScreen.cpp +++ b/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyMovieScreen.cpp @@ -7,18 +7,18 @@ #include "Speed/Indep/Src/Generated/Events/EFadeScreenOff.hpp" struct FEMovie; struct GarageMainScreen { - static GarageMainScreen* GetInstance(); + static GarageMainScreen *GetInstance(); bool IsVisable(); void NotificationMessage(unsigned long, unsigned long, unsigned long, unsigned long); }; -FEObject* FEngFindObject(const char* pkg_name, unsigned int hash); -void FEngSetMovieName(FEMovie* movie, const char* name); +FEObject *FEngFindObject(const char *pkg_name, unsigned int hash); +void FEngSetMovieName(FEMovie *movie, const char *name); void DismissChyron(); -void bStrNCpy(char* dst, const char* src, int size); +void bStrNCpy(char *dst, const char *src, int size); bool eIsWidescreen(); char FEAnyMovieScreen::MovieFilename[64] = {}; char FEAnyMovieScreen::ReturnToPackageName[64] = {}; -FEAnyMovieScreen::FEAnyMovieScreen(ScreenConstructorData* sd) +FEAnyMovieScreen::FEAnyMovieScreen(ScreenConstructorData *sd) : MenuScreen(sd) // , mSubtitler() // , bHidGarage(false) // @@ -26,27 +26,27 @@ FEAnyMovieScreen::FEAnyMovieScreen(ScreenConstructorData* sd) { bAllowingControllerErrors = FEManager::Get()->IsAllowingControllerError(); FEManager::Get()->AllowControllerError(false); - FEMovie* movie = static_cast(FEngFindObject(GetPackageName(), 0x348FF9F)); + FEMovie *movie = static_cast(FEngFindObject(GetPackageName(), 0x348FF9F)); FEngSetMovieName(movie, MovieFilename); mSubtitler.BeginningMovie(MovieFilename, GetPackageName()); DismissChyron(); - EFadeScreenOff* evt = new EFadeScreenOff(0x14035FB); - GarageMainScreen* gs = GarageMainScreen::GetInstance(); + EFadeScreenOff *evt = new EFadeScreenOff(0x14035FB); + GarageMainScreen *gs = GarageMainScreen::GetInstance(); if (gs && !gs->IsVisable()) { gs->NotificationMessage(0xAD4BBDC, 0, 0, 0); bHidGarage = true; } } FEAnyMovieScreen::~FEAnyMovieScreen() { - if (bHidGarage) { GarageMainScreen* gs = GarageMainScreen::GetInstance(); if (gs) gs->NotificationMessage(0x18883F75, 0, 0, 0); } + if (bHidGarage) { GarageMainScreen *gs = GarageMainScreen::GetInstance(); if (gs) gs->NotificationMessage(0x18883F75, 0, 0, 0); } FEManager::Get()->SetEATraxSecondButton(); FEManager::Get()->AllowControllerError(bAllowingControllerErrors); } -MenuScreen* FEAnyMovieScreen::Create(ScreenConstructorData* sd) { return new(__FILE__, __LINE__) FEAnyMovieScreen(sd); } -void FEAnyMovieScreen::NotificationMessage(unsigned long msg, FEObject* obj, unsigned long param1, unsigned long param2) { +MenuScreen *FEAnyMovieScreen::Create(ScreenConstructorData *sd) { return new(__FILE__, __LINE__) FEAnyMovieScreen(sd); } +void FEAnyMovieScreen::NotificationMessage(unsigned long msg, FEObject *obj, unsigned long param1, unsigned long param2) { mSubtitler.Update(msg); if (msg == 0xB5AF2461 || msg == 0x406415E3) { if (FEDatabase->IsDDay() || MoviePlayer_Bypass()) { mSubtitler.Update(0xC3960EB9); DismissMovie(); } } else if (msg == 0xC3960EB9) { DismissMovie(); } } -void FEAnyMovieScreen::LaunchMovie(const char* return_to_pkg, const char* filename) { +void FEAnyMovieScreen::LaunchMovie(const char *return_to_pkg, const char *filename) { bStrNCpy(ReturnToPackageName, return_to_pkg, 64); SetMovieName(filename); cFEng::Get()->QueuePackageSwitch(GetFEngPackageName(), 0, 0, false); } @@ -62,8 +62,8 @@ void FEAnyMovieScreen::DismissMovie() { else cFEng::Get()->QueuePackagePop(1); } } -void FEAnyMovieScreen::SetMovieName(const char* filename) { bStrNCpy(MovieFilename, filename, 64); } -const char* FEAnyMovieScreen::GetFEngPackageName() { +void FEAnyMovieScreen::SetMovieName(const char *filename) { bStrNCpy(MovieFilename, filename, 64); } +const char *FEAnyMovieScreen::GetFEngPackageName() { if (eIsWidescreen()) return "FeMovieWide.fng"; return "FeMovie.fng"; } diff --git a/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyTutorialScreen.cpp b/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyTutorialScreen.cpp index 83354e43a..d839d6f3b 100644 --- a/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyTutorialScreen.cpp +++ b/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyTutorialScreen.cpp @@ -5,20 +5,20 @@ #include "Speed/Indep/Src/Frontend/MoviePlayer/MoviePlayer.hpp" #include "Speed/Indep/Src/Generated/Events/EFadeScreenOff.hpp" struct FEMovie; -FEObject* FEngFindObject(const char* pkg_name, unsigned int hash); -void FEngSetMovieName(FEMovie* movie, const char* name); +FEObject *FEngFindObject(const char *pkg_name, unsigned int hash); +void FEngSetMovieName(FEMovie *movie, const char *name); void DismissChyron(); -void bStrNCpy(char* dst, const char* src, int size); -int bStrCmp(const char* a, const char* b); +void bStrNCpy(char *dst, const char *src, int size); +int bStrCmp(const char *a, const char *b); bool eIsWidescreen(); -unsigned int FEngHashString(const char* s); -void FEngSetLanguageHash(const char* pkg_name, unsigned int obj_hash, unsigned int lang_hash); -unsigned int bStringHash(const char* s, unsigned int hash); -static const char* FEAnyTutorialScreenName = "FeTutorial.fng"; +unsigned int FEngHashString(const char *s); +void FEngSetLanguageHash(const char *pkg_name, unsigned int obj_hash, unsigned int lang_hash); +unsigned int bStringHash(const char *s, unsigned int hash); +static const char *FEAnyTutorialScreenName = "FeTutorial.fng"; char FEAnyTutorialScreen::MovieFilename[64] = {}; char FEAnyTutorialScreen::PackageFilename[64] = {}; bool FEAnyTutorialScreen::PackageSet = false; -FEAnyTutorialScreen::FEAnyTutorialScreen(ScreenConstructorData* sd) +FEAnyTutorialScreen::FEAnyTutorialScreen(ScreenConstructorData *sd) : MenuScreen(sd) // , LastTime(0) // , TimeElapsed(0.0f) // @@ -27,10 +27,10 @@ FEAnyTutorialScreen::FEAnyTutorialScreen(ScreenConstructorData* sd) , mSubtitler() { DismissChyron(); - FEMovie* movie = static_cast(FEngFindObject(GetPackageName(), 0x348FF9F)); + FEMovie *movie = static_cast(FEngFindObject(GetPackageName(), 0x348FF9F)); FEngSetMovieName(movie, MovieFilename); if (eIsWidescreen()) cFEng::Get()->QueuePackageMessage(0x70D2183B, GetPackageName(), nullptr); - CareerSettings* career = FEDatabase->GetCareerSettings(); + CareerSettings *career = FEDatabase->GetCareerSettings(); unsigned int str_hash = 0; bool mSkipable = true; unsigned int label_hash; @@ -63,16 +63,16 @@ FEAnyTutorialScreen::FEAnyTutorialScreen(ScreenConstructorData* sd) FEngSetLanguageHash(GetPackageName(), 0x07D2EA5D, einput); } mSubtitler.BeginningMovie(MovieFilename, GetPackageName()); - EFadeScreenOff* evt = new EFadeScreenOff(0x14035FB); + EFadeScreenOff *evt = new EFadeScreenOff(0x14035FB); } -MenuScreen* FEAnyTutorialScreen::Create(ScreenConstructorData* sd) { return new(__FILE__, __LINE__) FEAnyTutorialScreen(sd); } +MenuScreen *FEAnyTutorialScreen::Create(ScreenConstructorData *sd) { return new(__FILE__, __LINE__) FEAnyTutorialScreen(sd); } FEAnyTutorialScreen::~FEAnyTutorialScreen() { FEManager::Get()->SetEATraxSecondButton(); } -void FEAnyTutorialScreen::NotificationMessage(unsigned long msg, FEObject* obj, unsigned long param1, unsigned long param2) { +void FEAnyTutorialScreen::NotificationMessage(unsigned long msg, FEObject *obj, unsigned long param1, unsigned long param2) { mSubtitler.Update(msg); if (msg == 0xB5AF2461 || msg == 0x406415E3) { DismissMovie(true); mSubtitler.Update(0xC3960EB9); } else if (msg == 0xC3960EB9) { DismissMovie(false); } } -void FEAnyTutorialScreen::LaunchMovie(const char* filename, const char* packageName) { +void FEAnyTutorialScreen::LaunchMovie(const char *filename, const char *packageName) { PackageSet = false; SetMovieName(filename); if (packageName) SetPackageName(packageName); cFEng::Get()->QueuePackagePush(FEAnyTutorialScreenName, 0, 0, false); @@ -81,5 +81,5 @@ void FEAnyTutorialScreen::DismissMovie(bool send_message) { cFEng::Get()->QueuePackagePop(1); if (send_message) cFEng::Get()->QueueGameMessage(0xC3960EB9, PackageFilename, 0xFF); } -void FEAnyTutorialScreen::SetMovieName(const char* filename) { bStrNCpy(MovieFilename, filename, 64); } -void FEAnyTutorialScreen::SetPackageName(const char* packageName) { PackageSet = true; bStrNCpy(PackageFilename, packageName, 64); } +void FEAnyTutorialScreen::SetMovieName(const char *filename) { bStrNCpy(MovieFilename, filename, 64); } +void FEAnyTutorialScreen::SetPackageName(const char *packageName) { PackageSet = true; bStrNCpy(PackageFilename, packageName, 64); } diff --git a/src/Speed/Indep/Src/Frontend/MenuScreens/Safehouse/options/uiOptionsTrailers.cpp b/src/Speed/Indep/Src/Frontend/MenuScreens/Safehouse/options/uiOptionsTrailers.cpp index 3a2287d45..8cb946d27 100644 --- a/src/Speed/Indep/Src/Frontend/MenuScreens/Safehouse/options/uiOptionsTrailers.cpp +++ b/src/Speed/Indep/Src/Frontend/MenuScreens/Safehouse/options/uiOptionsTrailers.cpp @@ -4,19 +4,19 @@ #include "Speed/Indep/Src/Frontend/Database/FEDatabase.hpp" struct GarageMainScreen { - static GarageMainScreen* GetInstance(); + static GarageMainScreen *GetInstance(); void CancelCameraPush(); }; -void FEngSetLanguageHash(const char* pkg_name, unsigned int obj_hash, unsigned int language); -int FEngGetLastButton(const char* pkg_name); +void FEngSetLanguageHash(const char *pkg_name, unsigned int obj_hash, unsigned int language); +int FEngGetLastButton(const char *pkg_name); -UIOptionsTrailers::UIOptionsTrailers(ScreenConstructorData* sd) +UIOptionsTrailers::UIOptionsTrailers(ScreenConstructorData *sd) : IconScrollerMenu(sd) { Setup(); } -void UIOptionsTrailers::NotificationMessage(unsigned long msg, FEObject* pobj, unsigned long param1, +void UIOptionsTrailers::NotificationMessage(unsigned long msg, FEObject *pobj, unsigned long param1, unsigned long param2) { if (msg != 0xC407210) { IconScrollerMenu::NotificationMessage(msg, pobj, param1, param2); diff --git a/src/Speed/Indep/Src/Frontend/SubTitle.cpp b/src/Speed/Indep/Src/Frontend/SubTitle.cpp index 6634f1e1d..30fb700a3 100644 --- a/src/Speed/Indep/Src/Frontend/SubTitle.cpp +++ b/src/Speed/Indep/Src/Frontend/SubTitle.cpp @@ -14,18 +14,18 @@ struct FEString; struct FEObject; int GetCurrentLanguage(); -void FEngSetScript(FEObject* object, unsigned int script_hash, bool start_at_beginning); -void FEngSetLanguageHash(FEString* text, unsigned int hash); -int FEPrintf(FEString* text, const char* fmt, ...); -FEString* FEngFindString(const char* pkg_name, int name_hash); -FEObject* FEngFindObject(const char* pkg_name, unsigned int hash); -void FEngGetTopLeft(FEObject* object, float& x, float& y); -void FEngSetTopLeft(FEObject* object, float x, float y); -unsigned int FEngHashString(const char* str, ...); +void FEngSetScript(FEObject *object, unsigned int script_hash, bool start_at_beginning); +void FEngSetLanguageHash(FEString *text, unsigned int hash); +int FEPrintf(FEString *text, const char *fmt, ...); +FEString *FEngFindString(const char *pkg_name, int name_hash); +FEObject *FEngFindObject(const char *pkg_name, unsigned int hash); +void FEngGetTopLeft(FEObject *object, float& x, float& y); +void FEngSetTopLeft(FEObject *object, float x, float y); +unsigned int FEngHashString(const char *str, ...); bool DoesStringExist(unsigned int hash); -const char* GetLocalizedString(unsigned int hash); +const char *GetLocalizedString(unsigned int hash); -SubTitler* SubTitler::gCurrentSubtitler_; +SubTitler *SubTitler::gCurrentSubtitler_; SubTitler::SubTitler() { next_ = 0; @@ -45,7 +45,7 @@ SubTitler::~SubTitler() { gCurrentSubtitler_ = nullptr; } -bool SubTitler::ShouldShowSubTitles(const char* movie_name) { +bool SubTitler::ShouldShowSubTitles(const char *movie_name) { int lang = GetCurrentLanguage(); if (lang != 0 || mIsTutorial) { return true; @@ -53,14 +53,14 @@ bool SubTitler::ShouldShowSubTitles(const char* movie_name) { return false; } -void SubTitler::BeginningMovie(const char* moviename, const char* packagename) { +void SubTitler::BeginningMovie(const char *moviename, const char *packagename) { SetIsTutorialMovie(moviename); if (ShouldShowSubTitles(moviename)) { Load(moviename, packagename); } } -void SubTitler::Load(const char* movieName, const char* packageName) { +void SubTitler::Load(const char *movieName, const char *packageName) { char filename[64]; Unload(); if (movieName != nullptr) { @@ -150,7 +150,7 @@ void SubTitler::NotifyFirstFrame() { void SubTitler::RefreshText() { if (mIsTutorial == false) { if (data_[next_].stringHash != 0x1A20BA) { - const char* str = GetLocalizedString(data_[next_].stringHash); + const char *str = GetLocalizedString(data_[next_].stringHash); if (bStrCmp("", str) != 0) { FEngSetLanguageHash(str_, data_[next_].stringHash); float x1, y1; @@ -183,7 +183,7 @@ void SubTitler::RefreshText() { } } -void SubTitler::SetIsTutorialMovie(const char* movieName) { +void SubTitler::SetIsTutorialMovie(const char *movieName) { if (bStrCmp(movieName, "NIS_tutorial_1") == 0 || bStrCmp(movieName, "NIS_tutorial_2") == 0 || bStrCmp(movieName, "NIS_tutorial_3") == 0 || From 0f075755466b51d623064a59d365140c45849e8a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 12:38:58 +0100 Subject: [PATCH 184/691] style: align frontend declarations with dwarf Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Frontend/FEManager.cpp | 2 +- .../Indep/Src/Frontend/FEngInterfaces/FEGameInterface.cpp | 5 +++-- .../Src/Frontend/MenuScreens/Common/FEAnyMovieScreen.cpp | 5 +++-- .../Src/Frontend/MenuScreens/Common/FEAnyTutorialScreen.cpp | 2 +- .../MenuScreens/Safehouse/options/uiOptionsTrailers.cpp | 3 ++- src/Speed/Indep/Src/Frontend/SubTitle.cpp | 4 ++-- 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/Speed/Indep/Src/Frontend/FEManager.cpp b/src/Speed/Indep/Src/Frontend/FEManager.cpp index 1524acbf2..c4cdae432 100644 --- a/src/Speed/Indep/Src/Frontend/FEManager.cpp +++ b/src/Speed/Indep/Src/Frontend/FEManager.cpp @@ -18,7 +18,7 @@ #include "Speed/Indep/Src/World/CarInfo.hpp" #include "Speed/Indep/bWare/Inc/Strings.hpp" -struct cFEngRender; +class cFEngRender; struct EasterEggs; void InitFEngMemoryPool(); diff --git a/src/Speed/Indep/Src/Frontend/FEngInterfaces/FEGameInterface.cpp b/src/Speed/Indep/Src/Frontend/FEngInterfaces/FEGameInterface.cpp index f8328f4d8..c32e14ff6 100644 --- a/src/Speed/Indep/Src/Frontend/FEngInterfaces/FEGameInterface.cpp +++ b/src/Speed/Indep/Src/Frontend/FEngInterfaces/FEGameInterface.cpp @@ -16,9 +16,10 @@ struct FEMatrix4 { }; struct RenderContext; -struct FEngine; +class FEngine; -struct cFEngRender { +class cFEngRender { + public: static cFEngRender *mInstance; RenderContext *GetRenderContext(unsigned short renderContext); void GenerateRenderContext(unsigned short groupContext, FEObject *pObject); diff --git a/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyMovieScreen.cpp b/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyMovieScreen.cpp index 11419a768..9cc97d871 100644 --- a/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyMovieScreen.cpp +++ b/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyMovieScreen.cpp @@ -5,8 +5,9 @@ #include "Speed/Indep/Src/Frontend/MenuScreens/Safehouse/career/uiRepSheetRivalFlow.hpp" #include "Speed/Indep/Src/Frontend/MoviePlayer/MoviePlayer.hpp" #include "Speed/Indep/Src/Generated/Events/EFadeScreenOff.hpp" -struct FEMovie; -struct GarageMainScreen { +class FEMovie; +class GarageMainScreen { + public: static GarageMainScreen *GetInstance(); bool IsVisable(); void NotificationMessage(unsigned long, unsigned long, unsigned long, unsigned long); diff --git a/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyTutorialScreen.cpp b/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyTutorialScreen.cpp index d839d6f3b..f6b109256 100644 --- a/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyTutorialScreen.cpp +++ b/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyTutorialScreen.cpp @@ -4,7 +4,7 @@ #include "Speed/Indep/Src/Frontend/FEManager.hpp" #include "Speed/Indep/Src/Frontend/MoviePlayer/MoviePlayer.hpp" #include "Speed/Indep/Src/Generated/Events/EFadeScreenOff.hpp" -struct FEMovie; +class FEMovie; FEObject *FEngFindObject(const char *pkg_name, unsigned int hash); void FEngSetMovieName(FEMovie *movie, const char *name); void DismissChyron(); diff --git a/src/Speed/Indep/Src/Frontend/MenuScreens/Safehouse/options/uiOptionsTrailers.cpp b/src/Speed/Indep/Src/Frontend/MenuScreens/Safehouse/options/uiOptionsTrailers.cpp index 8cb946d27..f02fd92ad 100644 --- a/src/Speed/Indep/Src/Frontend/MenuScreens/Safehouse/options/uiOptionsTrailers.cpp +++ b/src/Speed/Indep/Src/Frontend/MenuScreens/Safehouse/options/uiOptionsTrailers.cpp @@ -3,7 +3,8 @@ #include "Speed/Indep/Src/FEng/cFEng.h" #include "Speed/Indep/Src/Frontend/Database/FEDatabase.hpp" -struct GarageMainScreen { +class GarageMainScreen { + public: static GarageMainScreen *GetInstance(); void CancelCameraPush(); }; diff --git a/src/Speed/Indep/Src/Frontend/SubTitle.cpp b/src/Speed/Indep/Src/Frontend/SubTitle.cpp index 30fb700a3..4d2235a72 100644 --- a/src/Speed/Indep/Src/Frontend/SubTitle.cpp +++ b/src/Speed/Indep/Src/Frontend/SubTitle.cpp @@ -10,8 +10,8 @@ #include "Speed/Indep/bWare/Inc/bPrintf.hpp" #include "Speed/Indep/bWare/Inc/bWare.hpp" -struct FEString; -struct FEObject; +class FEString; +class FEObject; int GetCurrentLanguage(); void FEngSetScript(FEObject *object, unsigned int script_hash, bool start_at_beginning); From aa28496865973b886a81eadccf648d12feb27e27 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 12:45:43 +0100 Subject: [PATCH 185/691] style: correct frontend declaration kinds Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Frontend/FEManager.cpp | 2 +- .../Indep/Src/Frontend/MenuScreens/Common/FEAnyMovieScreen.cpp | 2 +- .../Src/Frontend/MenuScreens/Common/FEAnyTutorialScreen.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Frontend/FEManager.cpp b/src/Speed/Indep/Src/Frontend/FEManager.cpp index c4cdae432..871e46c7b 100644 --- a/src/Speed/Indep/Src/Frontend/FEManager.cpp +++ b/src/Speed/Indep/Src/Frontend/FEManager.cpp @@ -19,7 +19,7 @@ #include "Speed/Indep/bWare/Inc/Strings.hpp" class cFEngRender; -struct EasterEggs; +class EasterEggs; void InitFEngMemoryPool(); void InitLoadingScreen(); diff --git a/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyMovieScreen.cpp b/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyMovieScreen.cpp index 9cc97d871..8592985bd 100644 --- a/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyMovieScreen.cpp +++ b/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyMovieScreen.cpp @@ -5,7 +5,7 @@ #include "Speed/Indep/Src/Frontend/MenuScreens/Safehouse/career/uiRepSheetRivalFlow.hpp" #include "Speed/Indep/Src/Frontend/MoviePlayer/MoviePlayer.hpp" #include "Speed/Indep/Src/Generated/Events/EFadeScreenOff.hpp" -class FEMovie; +struct FEMovie; class GarageMainScreen { public: static GarageMainScreen *GetInstance(); diff --git a/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyTutorialScreen.cpp b/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyTutorialScreen.cpp index f6b109256..d839d6f3b 100644 --- a/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyTutorialScreen.cpp +++ b/src/Speed/Indep/Src/Frontend/MenuScreens/Common/FEAnyTutorialScreen.cpp @@ -4,7 +4,7 @@ #include "Speed/Indep/Src/Frontend/FEManager.hpp" #include "Speed/Indep/Src/Frontend/MoviePlayer/MoviePlayer.hpp" #include "Speed/Indep/Src/Generated/Events/EFadeScreenOff.hpp" -class FEMovie; +struct FEMovie; FEObject *FEngFindObject(const char *pkg_name, unsigned int hash); void FEngSetMovieName(FEMovie *movie, const char *name); void DismissChyron(); From 2f5d2aae0627eabdb48ab75cceb683ffccf3a437 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 12:56:37 +0100 Subject: [PATCH 186/691] style: include FEObject header in SubTitle Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Frontend/SubTitle.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Frontend/SubTitle.cpp b/src/Speed/Indep/Src/Frontend/SubTitle.cpp index 4d2235a72..07094e9ad 100644 --- a/src/Speed/Indep/Src/Frontend/SubTitle.cpp +++ b/src/Speed/Indep/Src/Frontend/SubTitle.cpp @@ -3,6 +3,7 @@ #include #include "Speed/Indep/Src/FEng/cFEng.h" +#include "Speed/Indep/Src/FEng/FEObject.h" #include "Speed/Indep/Src/Frontend/MoviePlayer/MoviePlayer.hpp" #include "Speed/Indep/Src/Misc/Timer.hpp" #include "Speed/Indep/bWare/Inc/Strings.hpp" @@ -11,7 +12,6 @@ #include "Speed/Indep/bWare/Inc/bWare.hpp" class FEString; -class FEObject; int GetCurrentLanguage(); void FEngSetScript(FEObject *object, unsigned int script_hash, bool start_at_beginning); From f5b2b0ed52154bf23551afb2da44b2f7f6994fdb Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 13:30:30 +0100 Subject: [PATCH 187/691] tools: add style guidance and accuracy audits Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .clang-format | 1 + .github/skills/code_style/SKILL.md | 171 +++++ .github/skills/implement/SKILL.md | 9 + .github/skills/scaffold/SKILL.md | 16 + AGENTS.md | 24 +- README.md | 50 ++ tools/_common.py | 15 +- tools/code_style.py | 965 +++++++++++++++++++++++++++++ tools/decomp-context.py | 23 +- tools/decomp-diff.py | 20 +- tools/decomp-workflow.py | 26 + 11 files changed, 1310 insertions(+), 10 deletions(-) create mode 100644 .github/skills/code_style/SKILL.md create mode 100644 tools/code_style.py diff --git a/.clang-format b/.clang-format index 29b540ad4..bf931d0ec 100644 --- a/.clang-format +++ b/.clang-format @@ -3,3 +3,4 @@ ColumnLimit: 150 AllowShortFunctionsOnASingleLine: Empty IndentWidth: 4 IndentCaseLabels: true +SortIncludes: Never diff --git a/.github/skills/code_style/SKILL.md b/.github/skills/code_style/SKILL.md new file mode 100644 index 000000000..5aafbce35 --- /dev/null +++ b/.github/skills/code_style/SKILL.md @@ -0,0 +1,171 @@ +--- +name: code-style +description: Repo-specific code style and match-safe cleanup guidance for code-writing tasks. +--- + +# Code Style Workflow + +Use this skill when writing new code, polishing code you already touched, or doing a style review of a branch. + +This skill is about **code style only**: formatting, declaration placement, header layout, local readability, and repo-specific conventions. It is **not** a PR-response workflow and it is **not** a license to do broad cleanup sweeps. + +It also tracks the repo's written `STYLE_GUIDE.md` rules where they fit the decomp workflow. + +## Core Principle + +In this repo, style cleanup must preserve decomp progress. + +- In match-sensitive code, prefer the smallest local cleanup that keeps the code readable. +- If a style tweak changes codegen or match status, revert it. +- Extend this skill only from patterns you actually verified in the repo. + +## Quick Tooling + +Use the repo-local helper before doing a style pass: + +```sh +python tools/code_style.py audit --base origin/main +``` + +- `audit` classifies changed files into safe vs match-sensitive buckets and reports repo-specific findings. +- `audit` also checks touched `class` / `struct` declarations against known header declarations and, when no header exists, against the PS2 visibility rule. +- `audit` warns on touched local forward declarations when the repo already has a header for that type. +- `audit` warns on touched type members that look like invented padding or placeholder names such as `pad`, `unk`, or `field_1234`. +- `audit` also checks touched style-guide rules that clang-format cannot enforce for you, such as cast spacing, `using namespace`, `NULL`, and missing `EA_PRAGMA_ONCE_SUPPORTED` guard blocks when a header's guard region is touched. +- `audit` groups repeated findings by file so branch-wide output stays readable. +- Use `audit --category safe-cpp` for frontend/support cleanup passes and `audit --category match-sensitive-cpp` when you want a conservative review queue for decomp code. +- `format --check` is an opt-in wrapper around the repo's `.clang-format`, but it only targets safe C/C++ files by default. +- Use `format --check --base origin/main --category safe-cpp` when you want a branch-level formatter probe instead of spelling every file path out. +- `format --check` labels whitespace-only formatter output separately from more invasive changes such as include reordering. +- `format` never targets `SourceLists/z*.cpp`; those files stay audit-only even when you opt into risky formatting. +- `format` skips files that use initializer-list guard comments (`//`) unless you explicitly override that, because clang-format fights this repo-specific convention. +- `clang-format` itself is optional. If it is not on `PATH`, install it locally or point the helper at it with `CLANG_FORMAT=/path/to/clang-format`. +- Do not pass `--include-match-sensitive` unless you are deliberately taking on verification work afterwards. + +## Phase 1: Classify the File Before Cleaning + +Decide which bucket the file belongs to: + +### 1a. Match-sensitive decomp code + +Examples: + +- gameplay / camera / physics / world translation-unit source +- utility headers and templates included by matched code +- headers with layout-sensitive inlines or emitted virtual methods + +For these files, style cleanup must be conservative and verified. + +### 1b. Safer support / frontend / tooling code + +Examples: + +- frontend interface shims +- scripts, tooling, and agent docs +- non-match-critical glue code + +These files can take normal readability cleanup, but still follow repo conventions. + +## Phase 2: Apply Repo-Specific Style Rules + +### Jumbo source-list files + +- Keep deliberate blank lines between `#include` entries when they help prevent clang-format from collapsing or reshuffling the jumbo list. +- Do not leave stray helper declarations in a `SourceLists/z*.cpp` file when they really belong near a use site in the underlying implementation file. + +### Constructors and initializer lists + +- Preserve the repo's multiline initializer-list style. +- Keep the trailing `//` markers on each initializer line except the last when that pattern is already being used to keep clang-format from collapsing the list. + +Example: + +```cpp +Foo::Foo() + : a(0), // + b(1), // + c(2) {} +``` + +### Casts, nulls, and low-level code + +- Use C++ casts instead of C-style casts. +- Spell casts without spaces inside the angle brackets: `static_cast(expr)`, not `static_cast< Type * >(expr)`. +- Use `nullptr` exclusively for null pointers. +- Prefer `if (ptr)` / `if (!ptr)` over explicit null comparisons when the change is local and verified safe. +- Inline assembly is acceptable when it is needed to preserve dead-code compares, ordering, or other compiler behavior that source alone cannot reproduce. + +### Forward declarations and local prototypes + +- Prefer including the owning repo header over adding a local forward declaration for a project type. +- If the repo already has a header declaration/definition for a type, include that header instead of redeclaring the type locally. +- Only keep a local forward declaration when no canonical repo header exists yet and you have verified that the ownership is still unresolved. +- Prefer moving helper template declarations next to their real use site instead of leaving them in an unrelated file. + +### Pointer style + +- Prefer `Type *name` over `Type* name`. +- Do not do broad pointer-style sweeps in match-sensitive files; change a small batch and verify the affected unit. + +### Header layout and data carriers + +- Use the repo's header guard form when writing headers: `#ifndef` / `#define` plus the `#ifdef EA_PRAGMA_ONCE_SUPPORTED` / `#pragma once` block. +- Keep member layout comments aligned and intact in decomp headers. +- Preserve the original `class` / `struct` kind from existing headers or Dwarf / PS2 evidence; do not treat it as a cosmetic style choice. +- Treat header declarations as the repo source of truth. If the repo only has local `.cpp` partial declarations, verify the kind with the PS2 dump instead of copying them blindly. +- Even forward declarations and local partial declarations should use the accurate keyword when known. +- Preserve the member naming style that DWARF shows. Some types use `mMember`, others use `m_member`; do not normalize them. +- Preserve recovered member names, types, order, and offset comments. Do not invent placeholder members named `pad`, `unk`, `unknown`, or `field_XXXX` for game code just to make a layout compile. +- If a member is genuinely unknown, stop and verify it with `find-symbol.py`, GC Dwarf, and PS2 data. If the layout is still incomplete, add a short TODO above the type instead of burying uncertainty in fake member names. +- Add offset / size comments when you are writing recovered type layouts from DWARF. +- Define inline member functions in headers only when DWARF shows that they are genuinely inlined in the binary. +- Use `struct` for POD-like data carriers with public fields; use `class` for behavior-heavy types only when that matches the recovered type information. +- Keep tiny placeholder methods as concise inline bodies when that is already the local pattern. + +### Namespaces and container aliases + +- Do not add `using` directives. +- Keep namespace-qualified types explicit at point of use. +- When introducing `UTL::Std::list` / `UTL::Std::vector` aliases that rely on a `_type_` helper, pair them with `DECLARE_CONTAINER_TYPE`. + +### Dense local code + +- Expand dense one-line helper structs, declaration blocks, and function bodies in non-match-sensitive files into normal multiline formatting. +- Prefer readable blocks over stacked one-line statements when behavior does not depend on exact source shape. + +### Uncertain ownership + +- If a declaration or global clearly compiles but its original home is uncertain, add a short TODO comment instead of inventing structure you cannot justify yet. +- When ownership matters, verify it with `decomp-workflow.py`, `decomp-context.py`, and `line-lookup` before moving code. + +## Phase 3: Things Not To "Clean Up" Blindly + +- Do not move an inline method out of a header just because it looks cleaner. +- Do not broad-format utility templates or virtual interfaces without checking who includes them. +- Do not rewrite expression structure in a near-matching function just to satisfy a style preference. +- Do not replace repo-specific formatting conventions with generic modern C++ preferences. + +## Phase 4: Verify Risky Style Changes + +For match-sensitive translation units: + +```sh +python tools/decomp-workflow.py build -u main/Path/To/TU +python tools/decomp-status.py --unit main/Path/To/TU +``` + +For safer but still compiled code: + +```sh +python tools/decomp-workflow.py build -u main/Path/To/OtherTU +``` + +Keep the cleanup only if the build succeeds and the relevant match status is unchanged. + +## Branch Patterns Confirmed So Far + +- Blank-line spacing in jumbo source-list include blocks is intentional and worth preserving. +- Helper template declarations should live near the file that actually uses them, not in the jumbo source-list file. +- The trailing `//` initializer-list markers are an intentional repo convention, not noise to remove. +- Small `if (ptr)` cleanup batches can be kept in match-sensitive code, but only after rebuilding the affected unit. +- Dense frontend shim files benefit from multiline struct/prototype/function formatting. diff --git a/.github/skills/implement/SKILL.md b/.github/skills/implement/SKILL.md index a81bb47c1..95ad95016 100644 --- a/.github/skills/implement/SKILL.md +++ b/.github/skills/implement/SKILL.md @@ -24,6 +24,11 @@ functions unless the user explicitly wants a cleanup/refiner pass. Use the wrapper flow first throughout this skill. Drop to raw `decomp-context.py` or `decomp-diff.py` only when the wrapper is missing a specific flag or you are debugging. +Before doing any local readability/style cleanup in code you are editing, consult +`.github/skills/code_style/SKILL.md`. Follow it for formatting, declaration placement, +pointer-style cleanup, and match-safe polish. Do not trade away match behavior for a +style preference. + ### 1a. decomp-context.py Preferred shortcut: @@ -70,6 +75,10 @@ Reference the skill for the usage. It gives info based on the virtual address of - Read the headers for class layout, member types, field offsets and the source files for existing implementations and includes (both are in `src/.../*.cpp`). - Check parent class headers for inherited members/methods used in the function +- Before adding any new declaration, partial declaration, or forward declaration, check whether the type already exists with `python tools/find-symbol.py `. +- If a repo header already exists for the type, include that header instead of introducing a local forward declaration. +- Preserve the original `class` vs `struct` kind. If the existing header is missing or incomplete, verify the type kind from GC Dwarf and PS2 info before writing a local declaration. +- Preserve real member names and field types too. Do not introduce `pad`, `unk`, or `field_XXXX` members as placeholders for guessed layout; verify the member list from GC Dwarf / PS2 data and leave a TODO when something is still uncertain. ### 1e. Assembly reference diff --git a/.github/skills/scaffold/SKILL.md b/.github/skills/scaffold/SKILL.md index 76abd7925..a2f062f50 100644 --- a/.github/skills/scaffold/SKILL.md +++ b/.github/skills/scaffold/SKILL.md @@ -31,6 +31,22 @@ Collect data from **all** of these sources in parallel where possible: Copy and cleanup the header that you got from running the `lookup` skill using the `symbols/Dwarf` folder. Fix visibility, function order and vtable related things based on using `lookup` on the PS2 types. +For formatting and local cleanup while writing the header, consult +`.github/skills/code_style/SKILL.md`. Use it for member-comment alignment, declaration +grouping, TODO placement, and other repo-specific style decisions. + +Preserve the real `class` / `struct` kind while scaffolding. Check existing headers first, +then use Dwarf plus PS2 visibility / vtable info to decide the type kind. Even temporary +forward declarations should match the known original kind. + +If the repo already has a header for a type you need, include that header instead of +adding a new local forward declaration. Only forward-declare when no canonical repo header +exists yet and you have verified that the ownership is still unresolved. + +Preserve real member names, types, order, and offset comments while scaffolding. Do not +fill gaps with invented `pad`, `unk`, or `field_XXXX` members for game types; verify the +layout from Dwarf / PS2 data and leave a TODO over the type if a field is still uncertain. + Only create headers if it's really necessary (the struct doesn't have inlines so you can't determine in which header file it goes and it's thematically very different from the other structs that use it), otherwise put it into the one you determined to be correct. The dwarf often has duplicated inlines, clean those up according to the order in the PS2 info. diff --git a/AGENTS.md b/AGENTS.md index 60534c3dc..a809e1678 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -83,6 +83,17 @@ originates from, use this script against the compiler-generated debug line mappi See `.github/skills/line_lookup/SKILL.md` for the full workflow. +### code-style — Repo-local style guidance + +When you are writing code, polishing code you already touched, or doing a style-review pass, +consult `.github/skills/code_style/SKILL.md` first. It captures repo-specific formatting and +cleanup rules, including jumbo include spacing, initializer-list comment markers, declaration +placement, pointer style, and how to keep style work safe in match-sensitive code. + +Use `python tools/code_style.py audit --base origin/main` before a branch-wide style pass. +It classifies changed files, reports repo-specific findings, and only treats safer C/C++ files +as clang-format candidates by default. + ### decomp-diff.py — Diff & symbol overview Overview mode lists all symbols in a translation unit with match status: @@ -92,10 +103,12 @@ python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim -s nonmatching -t function python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim -s missing -t function python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim --search RemoveIOWin +python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim -d FindIOWin --reloc-diffs all ``` Filters: `-t function,object` (type), `-s missing|matching|nonmatching|extra` (status), -`--section .text`, `--search ` (fuzzy name match). +`--section .text`, `--search ` (fuzzy name match), `--reloc-diffs none|name_address|data_value|all` +(surface relocation-only mismatches when needed; default: `none`). Diff mode shows side-by-side instruction comparison: @@ -261,9 +274,14 @@ This is a **C++98** codebase compiled with ProDG GC 3.9.3 (GCC 2.95 under the ho - No `auto`, range-for, `enum class`, lambdas, or any C++11+ - Enum values use prefix: `enum EFoo { kF_Value1, kF_Value2 }` (not `enum class`) -- Use C++ casts (`static_cast< T >(expr)`) instead of C-style casts -- Header guards: `#ifndef _CLASSNAME` / `#define _CLASSNAME` (not `#pragma once`) +- Use C++ casts (`static_cast(expr)`) instead of C-style casts +- Header guards should use `#ifndef` / `#define` together with the `EA_PRAGMA_ONCE_SUPPORTED` block when writing repo headers - Constructors use initializer list style with leading `, ` on each line, add empty comments at the end of these lines (except the last) to stop clang-format from putting them all on the same line +- Inline assembly is acceptable when needed to reproduce dead code or compiler scheduling that source alone cannot express cleanly +- Preserve the original `class` vs `struct` kind. Check existing headers first, then Dwarf / PS2 info when needed. Even forward declarations and local partial declarations should use the accurate keyword when known. +- Prefer including the real repo header over introducing a local forward declaration for a project type. If a type already has a header in `src/`, include it instead of redeclaring it locally. +- Preserve original member names, types, order, and proven layout comments. Do not invent `pad`, `unk`, or `field_XXXX` members just to satisfy a guessed size or offset; verify the real members with `find-symbol.py`, GC Dwarf, and PS2 data, and leave a short TODO if a layout detail is still uncertain. +- Follow DWARF member naming exactly (`mMember` vs `m_member`) instead of normalizing names - Omit the `this` pointer. - Use `nullptr` and `override`. If they are missing, you need to include `types.h`. - Omit `struct` when declaring variables or parameters, we are not in C land. diff --git a/README.md b/README.md index b74f298fd..94bd7d887 100644 --- a/README.md +++ b/README.md @@ -241,6 +241,56 @@ This file contains bChunk chunk IDs. Just tell your favourite clanker to reference `AGENTS.md` to decompile a translation unit of your choice, for example `main/Speed/Indep/SourceLists/zEAXSound`. +When introducing or forward-declaring a type, preserve the original `class` / `struct` +kind. Check existing headers first with `python tools/find-symbol.py `, then use +GC Dwarf and PS2 type info when the real declaration is missing or incomplete. + +Preserve real member names, types, order, and offset comments too. For recovered game +types, do not invent `pad`, `unk`, or `field_XXXX` members to force a guessed layout; use +the debug data and leave a short TODO when a field is still unresolved. + +If a project type already has a header in `src/`, include that header instead of adding a +local forward declaration. + +## Style tooling + +The repo ships with a decomp-aware style helper: + +```sh +python tools/code_style.py audit --base origin/main +``` + +Use `audit` to classify branch changes into safer vs match-sensitive buckets and to flag repo-specific issues such as jumbo include spacing, stray top-level declarations in `SourceLists` files, touched `class` / `struct` declarations that disagree with known headers or the PS2 visibility rule, touched project forward declarations that should be replaced by real includes, touched type members that look like invented padding or placeholder names, and touched style-guide issues that clang-format cannot fix for you (`using namespace`, `NULL`, bad cast spacing, or missing `EA_PRAGMA_ONCE_SUPPORTED` guard blocks). +Repeated findings are grouped by file so large branch audits stay readable. + +Useful focused passes: + +```sh +python tools/code_style.py audit --base origin/main --category safe-cpp +python tools/code_style.py audit --base origin/main --category match-sensitive-cpp +python tools/code_style.py format --check --base origin/main --category safe-cpp +``` + +If you have `clang-format` installed locally, you can also use: + +```sh +python tools/code_style.py format --check src/Speed/Indep/Src/Frontend/FEManager.cpp +``` + +The formatter wrapper only targets safer C/C++ files by default. It intentionally skips match-sensitive code unless you explicitly pass `--include-match-sensitive` and verify the affected unit afterwards. +`SourceLists/z*.cpp` files remain audit-only and are never formatter targets. +`format --check` now distinguishes whitespace-only formatter deltas from more invasive output such as include reordering. +Files that use the repo's initializer-list guard comments (`//`) are skipped by default because clang-format fights that convention; override only if you are deliberately inspecting that output. +For declaration-kind checks, header declarations are treated as the repo source of truth; otherwise the helper falls back to the PS2 dump rule (`public:` / `private:` / `protected:` means `class`, no visibility labels means `struct`). + +`clang-format` is optional. Recommended installs: + +- macOS: `brew install clang-format` +- Linux: `sudo apt install clang-format` +- Windows: `winget install LLVM.LLVM` + +If your binary lives outside `PATH`, set `CLANG_FORMAT` to the executable path before running `tools/code_style.py format`. + # Contributors Special thanks to [Brawltendo](https://github.com/Brawltendo) for helping with tooling and letting me use his partial decomp. diff --git a/tools/_common.py b/tools/_common.py index db992bd8b..d1b4f42a0 100644 --- a/tools/_common.py +++ b/tools/_common.py @@ -14,9 +14,8 @@ ROOT_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, "..")) BUILD_NINJA = os.path.join(ROOT_DIR, "build.ninja") OBJDIFF_JSON = os.path.join(ROOT_DIR, "objdiff.json") +RELOC_DIFF_CHOICES = ("none", "name_address", "data_value", "all") OBJDIFF_DEFAULT_CONFIG_ARGS = [ - "-c", - "functionRelocDiffs=none", "-c", "ppc.calculatePoolRelocations=false", ] @@ -55,6 +54,15 @@ def ensure_project_prereqs(require_build_ninja: bool = False) -> None: ensure_exists(BUILD_NINJA, "Run: python configure.py") +def build_objdiff_config_args(reloc_diffs: str = "none") -> List[str]: + if reloc_diffs not in RELOC_DIFF_CHOICES: + raise ToolError( + f"Invalid relocation diff mode: {reloc_diffs} " + f"(expected one of {', '.join(RELOC_DIFF_CHOICES)})" + ) + return ["-c", f"functionRelocDiffs={reloc_diffs}", *OBJDIFF_DEFAULT_CONFIG_ARGS] + + def load_json_file(path: str, description: str) -> Any: try: with open(path) as f: @@ -262,12 +270,13 @@ def run_objdiff_json( *, base_obj: Optional[str] = None, extra_args: Optional[Sequence[str]] = None, + reloc_diffs: str = "none", root_dir: str = ROOT_DIR, ) -> Dict[str, Any]: ensure_project_prereqs() cmd = [objdiff_cli, "diff"] - cmd.extend(OBJDIFF_DEFAULT_CONFIG_ARGS) + cmd.extend(build_objdiff_config_args(reloc_diffs)) if extra_args: cmd.extend(extra_args) cmd.extend(["-u", unit_name, "-o", "-", "--format", "json"]) diff --git a/tools/code_style.py b/tools/code_style.py new file mode 100644 index 000000000..1f14f7c72 --- /dev/null +++ b/tools/code_style.py @@ -0,0 +1,965 @@ +#!/usr/bin/env python3 +""" +Decomp-aware code style helper. + +Examples: + python tools/code_style.py audit --base origin/main + python tools/code_style.py classify src/Speed/Indep/Src/Frontend/FEManager.cpp + python tools/code_style.py format --check src/Speed/Indep/Src/Frontend/FEManager.cpp +""" + +import argparse +import os +import platform +import re +import shutil +import subprocess +import sys +from dataclasses import dataclass +from typing import Dict, Iterable, List, Optional, Sequence, Set + +script_dir = os.path.dirname(os.path.realpath(__file__)) +root_dir = os.path.abspath(os.path.join(script_dir, "..")) +src_dir = os.path.join(root_dir, "src") +ps2_types_path = os.path.join(root_dir, "symbols", "PS2", "PS2_types.nothpp") + +CPP_EXTS = {".c", ".cc", ".cpp", ".h", ".hh", ".hpp"} +HEADER_EXTS = {".h", ".hh", ".hpp"} + +SAFE_CPP_PREFIXES = ( + "src/Speed/Indep/Src/Frontend/", + "src/Speed/Indep/Src/FEng/", +) +DOC_PREFIXES = ( + ".github/skills/", + "docs/", +) +TOOL_PREFIXES = ( + "tools/", +) +JUMBO_PREFIX = "src/Speed/Indep/SourceLists/" +MATCH_SENSITIVE_PREFIXES = ( + "src/Speed/Indep/Libs/Support/Utility/", + "src/Speed/Indep/bWare/Inc/", + "src/Speed/Indep/Src/", +) +ROOT_FILES = { + "AGENTS.md", + "README.md", +} +CATEGORIES = ( + "docs", + "jumbo-source-list", + "match-sensitive-cpp", + "match-sensitive-other", + "other", + "safe-cpp", + "safe-other", + "tooling", +) + + +@dataclass +class Finding: + path: str + line: int + severity: str + message: str + + +DECL_PATTERN = re.compile( + r"^\s*(struct|class)\s+([A-Za-z_][A-Za-z0-9_]*)\b(?:\s*[:;{]|$)" +) +TYPE_BODY_START_PATTERN = re.compile(r"^\s*(struct|class)\s+([A-Za-z_][A-Za-z0-9_]*)\b.*\{") +FORWARD_DECL_PATTERN = re.compile(r"^\s*(struct|class)\s+([A-Za-z_][A-Za-z0-9_]*)\s*;\s*$") +VISIBILITY_PATTERN = re.compile(r"^\s*(public|private|protected)\s*:", re.MULTILINE) +ACCESS_SPECIFIER_PATTERN = re.compile(r"^\s*(public|private|protected)\s*:\s*$") +CAST_SPACING_PATTERN = re.compile( + r"\b(?:static_cast|reinterpret_cast|const_cast|dynamic_cast)\s*<\s+" + r"|" + r"\b(?:static_cast|reinterpret_cast|const_cast|dynamic_cast)\s*<[^>\n]*\s+>" +) +USING_NAMESPACE_PATTERN = re.compile(r"^\s*using\s+namespace\b") +NULL_PATTERN = re.compile(r"\bNULL\b") +HEADER_GUARD_IFNDEF_PATTERN = re.compile(r"^\s*#ifndef\s+[A-Za-z0-9_]+\s*$", re.MULTILINE) +HEADER_GUARD_DEFINE_PATTERN = re.compile(r"^\s*#define\s+[A-Za-z0-9_]+\s*$", re.MULTILINE) +EA_PRAGMA_BLOCK_PATTERN = re.compile( + r"^\s*#ifdef\s+EA_PRAGMA_ONCE_SUPPORTED\s*$" + r".*?^\s*#pragma\s+once\s*$" + r".*?^\s*#endif\s*$", + re.MULTILINE | re.DOTALL, +) +SUSPICIOUS_MEMBER_PATTERN = re.compile( + r"^(?:" + r"_?pad(?:ding)?[0-9A-Fa-f_]*" + r"|pad(?:byte|char)" + r"|unk(?:nown)?[0-9A-Fa-f_]*" + r"|unk_[A-Za-z0-9_]+" + r"|field_[0-9A-Fa-f]+" + r")$" +) + +_source_decl_cache: Optional[Dict[str, List[tuple]]] = None +_ps2_kind_cache: Dict[str, Optional[str]] = {} + + +def run_git(args: Sequence[str]) -> str: + result = subprocess.run( + ["git", *args], + cwd=root_dir, + capture_output=True, + text=True, + ) + if result.returncode != 0: + raise RuntimeError(result.stderr.strip() or "git command failed") + return result.stdout + + +def relpath(path: str) -> str: + abs_path = path if os.path.isabs(path) else os.path.join(root_dir, path) + return os.path.relpath(abs_path, root_dir).replace("\\", "/") + + +def path_category(path: str) -> str: + path = relpath(path) + ext = os.path.splitext(path)[1] + + if path in ROOT_FILES: + return "docs" + if any(path.startswith(prefix) for prefix in DOC_PREFIXES): + return "docs" + if any(path.startswith(prefix) for prefix in TOOL_PREFIXES): + return "tooling" + if path.startswith(JUMBO_PREFIX): + return "jumbo-source-list" + if any(path.startswith(prefix) for prefix in SAFE_CPP_PREFIXES): + return "safe-cpp" if ext in CPP_EXTS else "safe-other" + if any(path.startswith(prefix) for prefix in MATCH_SENSITIVE_PREFIXES): + return "match-sensitive-cpp" if ext in CPP_EXTS else "match-sensitive-other" + return "other" + + +def file_candidates_from_base(base: str, include_worktree: bool) -> List[str]: + files: Set[str] = set() + for line in run_git(["diff", "--name-only", f"{base}...HEAD"]).splitlines(): + if line.strip(): + files.add(line.strip()) + if include_worktree: + for line in run_git(["diff", "--name-only"]).splitlines(): + if line.strip(): + files.add(line.strip()) + return sorted(files) + + +def collect_touched_lines_from_diff(diff_text: str) -> Dict[str, Set[int]]: + touched: Dict[str, Set[int]] = {} + current_path: Optional[str] = None + + for line in diff_text.splitlines(): + if line.startswith("+++ b/"): + current_path = line[6:] + touched.setdefault(current_path, set()) + continue + + if not line.startswith("@@") or current_path is None: + continue + + match = re.search(r"\+(\d+)(?:,(\d+))?", line) + if match is None: + continue + + start = int(match.group(1)) + count = int(match.group(2) or "1") + if count == 0: + continue + + for line_no in range(start, start + count): + touched.setdefault(current_path, set()).add(line_no) + + return touched + + +def touched_lines_from_base(base: str, include_worktree: bool) -> Dict[str, Set[int]]: + touched = collect_touched_lines_from_diff( + run_git(["diff", "--unified=0", f"{base}...HEAD"]) + ) + if include_worktree: + worktree_touched = collect_touched_lines_from_diff( + run_git(["diff", "--unified=0"]) + ) + for path, lines in worktree_touched.items(): + touched.setdefault(path, set()).update(lines) + return touched + + +def read_text(path: str) -> str: + with open( + os.path.join(root_dir, relpath(path)), + encoding="utf-8", + errors="ignore", + ) as f: + return f.read() + + +def source_declaration_index() -> Dict[str, List[tuple]]: + global _source_decl_cache + if _source_decl_cache is not None: + return _source_decl_cache + + index: Dict[str, List[tuple]] = {} + for dirpath, _dirs, files in os.walk(src_dir): + for fname in files: + if os.path.splitext(fname)[1] not in CPP_EXTS: + continue + fpath = os.path.join(dirpath, fname) + rel = os.path.relpath(fpath, root_dir).replace("\\", "/") + try: + with open(fpath, encoding="utf-8", errors="ignore") as f: + for lineno, line in enumerate(f, 1): + match = DECL_PATTERN.match(line) + if match is None: + continue + kind = match.group(1) + name = match.group(2) + index.setdefault(name, []).append((kind, rel, lineno)) + except OSError: + continue + + _source_decl_cache = index + return index + + +def expected_kind_from_source(name: str, current_path: str, current_line: int) -> Optional[str]: + candidates = source_declaration_index().get(name, []) + filtered = [] + for kind, rel, lineno in candidates: + if rel == current_path and lineno == current_line: + continue + if os.path.splitext(rel)[1] not in {".h", ".hh", ".hpp"}: + continue + filtered.append(kind) + unique = sorted(set(filtered)) + if len(unique) == 1: + return unique[0] + return None + + +def header_declaration_paths(name: str, current_path: str, current_line: int) -> List[str]: + candidates = source_declaration_index().get(name, []) + headers = set() + for _kind, rel, lineno in candidates: + if rel == current_path and lineno == current_line: + continue + if os.path.splitext(rel)[1] not in {".h", ".hh", ".hpp"}: + continue + headers.add(rel) + return sorted(headers) + + +def expected_kind_from_ps2(name: str) -> Optional[str]: + cached = _ps2_kind_cache.get(name) + if cached is not None or name in _ps2_kind_cache: + return cached + + if not os.path.isfile(ps2_types_path): + _ps2_kind_cache[name] = None + return None + + result = subprocess.run( + ["python", "tools/lookup.py", "--file", ps2_types_path, "struct", name], + cwd=root_dir, + capture_output=True, + text=True, + ) + output = (result.stdout or result.stderr).strip() + if result.returncode != 0 or not output.startswith("struct "): + _ps2_kind_cache[name] = None + return None + + if VISIBILITY_PATTERN.search(output): + _ps2_kind_cache[name] = "class" + else: + _ps2_kind_cache[name] = "struct" + return _ps2_kind_cache[name] + + +def audit_type_kind_declarations( + path: str, text: str, touched_lines: Optional[Set[int]] +) -> List[Finding]: + findings: List[Finding] = [] + for idx, line in enumerate(text.splitlines(), 1): + if touched_lines is not None and idx not in touched_lines: + continue + match = DECL_PATTERN.match(line) + if match is None: + continue + + actual_kind = match.group(1) + name = match.group(2) + expected_kind = expected_kind_from_source(name, path, idx) + reason = "repo declaration" + if expected_kind is None: + expected_kind = expected_kind_from_ps2(name) + reason = "PS2 visibility rule" + if expected_kind is None or expected_kind == actual_kind: + continue + + findings.append( + Finding( + path, + idx, + "WARN", + f"`{actual_kind} {name}` disagrees with known type kind; use `{expected_kind} {name}` ({reason})", + ) + ) + return findings + + +def extract_member_name(line: str) -> Optional[str]: + code = line.split("//", 1)[0].strip() + if not code or code.startswith("#") or code.endswith(":"): + return None + if "(" in code or ")" in code: + return None + if any(code.startswith(prefix) for prefix in ("typedef ", "using ", "enum ", "union ", "class ", "struct ", "friend ")): + return None + + code = code.rstrip(";").strip() + if "," in code: + return None + if "=" in code: + code = code.split("=", 1)[0].rstrip() + + match = re.search( + r"([A-Za-z_][A-Za-z0-9_]*)\s*(?:\[[^\]]+\])?\s*(?::\s*\d+)?\s*$", + code, + ) + if match is None: + return None + return match.group(1) + + +def audit_placeholder_members( + path: str, text: str, touched_lines: Optional[Set[int]] +) -> List[Finding]: + findings: List[Finding] = [] + current_type: Optional[str] = None + pending_type: Optional[str] = None + brace_depth = 0 + + for idx, line in enumerate(text.splitlines(), 1): + stripped = line.strip() + + if current_type is None: + start_match = TYPE_BODY_START_PATTERN.match(line) + if start_match is not None: + current_type = start_match.group(2) + brace_depth = line.count("{") - line.count("}") + if brace_depth <= 0: + current_type = None + brace_depth = 0 + continue + + decl_match = DECL_PATTERN.match(line) + if decl_match is not None and "{" not in line and not stripped.endswith(";"): + pending_type = decl_match.group(2) + + if pending_type is not None and "{" in line: + current_type = pending_type + pending_type = None + brace_depth = line.count("{") - line.count("}") + if brace_depth <= 0: + current_type = None + brace_depth = 0 + continue + + if stripped.endswith(";"): + pending_type = None + continue + + if touched_lines is None or idx in touched_lines: + if not ACCESS_SPECIFIER_PATTERN.match(line): + member_name = extract_member_name(line) + if member_name is not None and SUSPICIOUS_MEMBER_PATTERN.match(member_name): + findings.append( + Finding( + path, + idx, + "WARN", + f"`{current_type}` member `{member_name}` looks like placeholder padding/unknown naming; verify the real member from Dwarf/PS2 instead of inventing pads", + ) + ) + + brace_depth += line.count("{") - line.count("}") + if brace_depth <= 0: + current_type = None + brace_depth = 0 + + return findings + + +def audit_forward_declarations( + path: str, text: str, touched_lines: Optional[Set[int]] +) -> List[Finding]: + findings: List[Finding] = [] + for idx, line in enumerate(text.splitlines(), 1): + if touched_lines is not None and idx not in touched_lines: + continue + match = FORWARD_DECL_PATTERN.match(line) + if match is None: + continue + + name = match.group(2) + headers = header_declaration_paths(name, path, idx) + if not headers: + continue + + sample = ", ".join(headers[:2]) + if len(headers) > 2: + sample += ", ..." + findings.append( + Finding( + path, + idx, + "WARN", + f"`{name}` is forward-declared even though repo headers exist; include {sample} instead of redeclaring", + ) + ) + return findings + + +def audit_style_guide_rules( + path: str, text: str, touched_lines: Optional[Set[int]] +) -> List[Finding]: + findings: List[Finding] = [] + ext = os.path.splitext(path)[1] + + for idx, line in enumerate(text.splitlines(), 1): + if touched_lines is not None and idx not in touched_lines: + continue + stripped = line.strip() + if stripped.startswith("//"): + continue + + if CAST_SPACING_PATTERN.search(line): + findings.append( + Finding( + path, + idx, + "WARN", + "C++ cast uses spaces inside `<...>`; prefer `static_cast(expr)` style", + ) + ) + if USING_NAMESPACE_PATTERN.search(line): + findings.append( + Finding( + path, + idx, + "WARN", + "`using namespace` is not allowed here; keep names fully qualified", + ) + ) + if NULL_PATTERN.search(line): + findings.append( + Finding( + path, + idx, + "WARN", + "use `nullptr` instead of `NULL`", + ) + ) + + if ext in HEADER_EXTS: + should_check_guard = touched_lines is None or any(line_no <= 8 for line_no in touched_lines) + if should_check_guard: + has_ifndef = HEADER_GUARD_IFNDEF_PATTERN.search(text) is not None + has_define = HEADER_GUARD_DEFINE_PATTERN.search(text) is not None + has_pragma_block = EA_PRAGMA_BLOCK_PATTERN.search(text) is not None + if not (has_ifndef and has_define and has_pragma_block): + findings.append( + Finding( + path, + 1, + "WARN", + "header guard should use `#ifndef` / `#define` plus the `EA_PRAGMA_ONCE_SUPPORTED` `#pragma once` block", + ) + ) + + return findings + + +def audit_source_list( + path: str, text: str, touched_lines: Optional[Set[int]] +) -> List[Finding]: + findings: List[Finding] = [] + lines = text.splitlines() + seen_include = False + prev_include_line = -1 + + for idx, line in enumerate(lines, 1): + stripped = line.strip() + if not seen_include: + if stripped.startswith("#include "): + seen_include = True + prev_include_line = idx + continue + + if stripped.startswith("#include "): + if idx == prev_include_line + 1 and ( + touched_lines is None + or idx in touched_lines + or prev_include_line in touched_lines + ): + findings.append( + Finding( + path, + idx, + "WARN", + "consecutive jumbo includes without a separating blank line", + ) + ) + prev_include_line = idx + continue + + if stripped == "": + continue + + if touched_lines is None or idx in touched_lines: + findings.append( + Finding( + path, + idx, + "INFO", + "top-level declaration/code in SourceLists file; keep only if placement is intentional", + ) + ) + break + + return findings + + +def audit_safe_cpp( + path: str, text: str, touched_lines: Optional[Set[int]] +) -> List[Finding]: + findings = audit_type_kind_declarations(path, text, touched_lines) + findings.extend(audit_forward_declarations(path, text, touched_lines)) + findings.extend(audit_placeholder_members(path, text, touched_lines)) + findings.extend(audit_style_guide_rules(path, text, touched_lines)) + pointer_pattern = re.compile( + r"\b[A-Za-z_][A-Za-z0-9_:<>]*\*\s*[A-Za-z_][A-Za-z0-9_]*" + ) + + for idx, line in enumerate(text.splitlines(), 1): + stripped = line.strip() + if stripped.startswith("//") or stripped.startswith("#"): + continue + if touched_lines is not None and idx not in touched_lines: + continue + if pointer_pattern.search(line): + findings.append( + Finding( + path, + idx, + "INFO", + "pointer declaration/prototype uses `Type* name`; repo style prefers `Type *name`", + ) + ) + return findings + + +def audit_match_sensitive_cpp( + path: str, text: str, touched_lines: Optional[Set[int]] +) -> List[Finding]: + findings = audit_type_kind_declarations(path, text, touched_lines) + findings.extend(audit_forward_declarations(path, text, touched_lines)) + findings.extend(audit_placeholder_members(path, text, touched_lines)) + findings.extend(audit_style_guide_rules(path, text, touched_lines)) + nullptr_pattern = re.compile(r"\bif\s*\([^)]*(?:==|!=)\s*nullptr") + + for idx, line in enumerate(text.splitlines(), 1): + if touched_lines is not None and idx not in touched_lines: + continue + if nullptr_pattern.search(line): + findings.append( + Finding( + path, + idx, + "INFO", + "pointer-null comparison is a candidate for `if (ptr)` cleanup, but verify the affected TU first", + ) + ) + return findings + + +def audit_path(path: str, touched_lines: Optional[Set[int]]) -> List[Finding]: + path = relpath(path) + abs_path = os.path.join(root_dir, path) + if not os.path.isfile(abs_path): + return [] + + category = path_category(path) + text = read_text(path) + + if category == "jumbo-source-list": + return audit_source_list(path, text, touched_lines) + if category == "safe-cpp": + return audit_safe_cpp(path, text, touched_lines) + if category == "match-sensitive-cpp": + return audit_match_sensitive_cpp(path, text, touched_lines) + return [] + + +def gather_paths(args: argparse.Namespace) -> List[str]: + if args.paths: + return [relpath(path) for path in args.paths] + return file_candidates_from_base(args.base, include_worktree=not args.no_worktree) + + +def filter_paths_by_category( + paths: Iterable[str], categories: Optional[Sequence[str]] +) -> List[str]: + if not categories: + return list(paths) + allowed = set(categories) + return [path for path in paths if path_category(path) in allowed] + + +def format_line_list(lines: Sequence[int], sample_limit: int) -> str: + sample = list(lines[:sample_limit]) + rendered = ", ".join(str(line) for line in sample) + if len(lines) > sample_limit: + rendered += ", ..." + return rendered + + +def strip_whitespace(text: str) -> str: + return re.sub(r"\s+", "", text) + + +def include_lines(text: str) -> List[str]: + return [line.strip() for line in text.splitlines() if line.strip().startswith("#include ")] + + +def has_initializer_guard_comments(text: str) -> bool: + guard_pattern = re.compile(r"^\s*(?::|,)\s+.*//\s*$", re.MULTILINE) + return guard_pattern.search(text) is not None + + +def format_change_summary(before: str, after: str) -> str: + reasons: List[str] = [] + if strip_whitespace(before) == strip_whitespace(after): + reasons.append("whitespace-only") + else: + reasons.append("non-whitespace token/order changes") + + before_includes = include_lines(before) + after_includes = include_lines(after) + if before_includes and before_includes != after_includes and sorted(before_includes) == sorted(after_includes): + reasons.append("reorders includes") + + if has_initializer_guard_comments(before): + reasons.append("initializer-list guard comments present") + + return ", ".join(reasons) + + +def command_classify(args: argparse.Namespace) -> int: + for path in filter_paths_by_category(gather_paths(args), args.category): + print(f"{path_category(path):<22} {path}") + return 0 + + +def command_audit(args: argparse.Namespace) -> int: + paths = filter_paths_by_category(gather_paths(args), args.category) + if not paths: + print("No files selected.") + return 0 + + touched_lines = None if args.paths else touched_lines_from_base( + args.base, include_worktree=not args.no_worktree + ) + + by_category = {} + findings: List[Finding] = [] + for path in paths: + by_category.setdefault(path_category(path), []).append(path) + findings.extend( + audit_path(path, None if touched_lines is None else touched_lines.get(path)) + ) + + print("File categories:") + for category in sorted(by_category): + print(f" {category}: {len(by_category[category])}") + print() + + safe_format_candidates = [ + path + for path in paths + if path_category(path) == "safe-cpp" and os.path.splitext(path)[1] in CPP_EXTS + ] + if safe_format_candidates: + print("Safe clang-format candidates:") + for path in safe_format_candidates: + print(f" {path}") + print() + + if not findings: + print("No style findings.") + return 0 + + print("Findings:") + findings = sorted(findings, key=lambda item: (item.path, item.line, item.message)) + if args.ungrouped: + shown = findings[: args.max_findings] + for finding in shown: + print( + f" {finding.severity:<4} {finding.path}:{finding.line}: {finding.message}" + ) + if len(findings) > len(shown): + print() + print(f" ... {len(findings) - len(shown)} more finding(s) omitted") + return 0 + + grouped: Dict[tuple, List[int]] = {} + for finding in findings: + grouped.setdefault( + (finding.severity, finding.path, finding.message), [] + ).append(finding.line) + + grouped_items = sorted(grouped.items(), key=lambda item: (item[0][1], item[1][0], item[0][2])) + shown = grouped_items[: args.max_findings] + for (severity, path, message), lines in shown: + print( + f" {severity:<4} {path}: {message} ({len(lines)} occurrence(s); lines {format_line_list(lines, args.sample_lines)})" + ) + if len(grouped_items) > len(shown): + print() + print(f" ... {len(grouped_items) - len(shown)} more grouped finding(s) omitted") + return 0 + + +def find_clang_format() -> str: + env_override = os.environ.get("CLANG_FORMAT") + if env_override: + if os.path.isfile(env_override) and os.access(env_override, os.X_OK): + return env_override + resolved = shutil.which(env_override) + if resolved is not None: + return resolved + raise RuntimeError( + f"CLANG_FORMAT is set to '{env_override}', but that executable was not found." + ) + + candidates = ( + "clang-format", + "clang-format-19", + "clang-format-18", + "clang-format-17", + "clang-format-16", + "clang-format-15", + "clang-format-14", + ) + for candidate in candidates: + resolved = shutil.which(candidate) + if resolved is not None: + return resolved + + system = platform.system() + if system == "Darwin": + install_hint = "Install it with `brew install clang-format`." + elif system == "Linux": + install_hint = "Install it with your package manager, for example `sudo apt install clang-format`." + elif system == "Windows": + install_hint = "Install LLVM/clang-format, for example with `winget install LLVM.LLVM`." + else: + install_hint = "Install clang-format and ensure it is available on PATH." + + raise RuntimeError( + "clang-format not found. " + + install_hint + + " You can also point the helper at a specific binary with the CLANG_FORMAT environment variable." + ) + + +def format_paths(paths: Iterable[str], include_match_sensitive: bool) -> List[str]: + allowed = {"safe-cpp"} + if include_match_sensitive: + allowed.add("match-sensitive-cpp") + + return [ + relpath(path) + for path in paths + if path_category(path) in allowed and os.path.splitext(path)[1] in CPP_EXTS + ] + + +def command_format(args: argparse.Namespace) -> int: + selected = format_paths( + filter_paths_by_category(gather_paths(args), args.category), + args.include_match_sensitive, + ) + if not selected: + print("No format-eligible files selected.") + return 0 + + clang_format = find_clang_format() + changed: List[str] = [] + changed_summaries: Dict[str, str] = {} + skipped_initializer_guards: List[str] = [] + + for path in selected: + abs_path = os.path.join(root_dir, path) + with open(abs_path, encoding="utf-8", errors="ignore") as f: + before = f.read() + + if has_initializer_guard_comments(before) and not args.include_initializer_guards: + skipped_initializer_guards.append(path) + continue + + if args.check: + result = subprocess.run( + [clang_format, "--style=file", abs_path], + capture_output=True, + text=True, + ) + if result.returncode != 0: + print(result.stderr.strip(), file=sys.stderr) + return result.returncode + if result.stdout != before: + changed.append(path) + changed_summaries[path] = format_change_summary(before, result.stdout) + else: + result = subprocess.run([clang_format, "-i", "--style=file", abs_path]) + if result.returncode != 0: + return result.returncode + changed.append(path) + + if skipped_initializer_guards: + print("Skipped files with initializer-list guard comments:") + for path in skipped_initializer_guards: + print(f" {path}") + print(" clang-format fights this repo convention; inspect these manually or override explicitly.") + print() + + if args.check: + if changed: + print("Would reformat:") + for path in changed: + print(f" {path} [{changed_summaries[path]}]") + return 1 + print("All selected files already match clang-format output.") + return 0 + + print("Formatted files:") + for path in changed: + print(f" {path}") + return 0 + + +def build_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser(description="Decomp-aware code style helper") + subparsers = parser.add_subparsers(dest="command", required=True) + + shared = argparse.ArgumentParser(add_help=False) + shared.add_argument( + "paths", + nargs="*", + help="Files to inspect. If omitted, use changed files against --base.", + ) + shared.add_argument( + "--base", + default="origin/main", + help="Base ref used when paths are omitted (default: origin/main)", + ) + shared.add_argument( + "--no-worktree", + action="store_true", + help="Ignore uncommitted worktree changes when collecting default files", + ) + + classify = subparsers.add_parser( + "classify", + parents=[shared], + help="Classify files by style-risk bucket", + ) + classify.add_argument( + "--category", + action="append", + choices=CATEGORIES, + help="Restrict output to one or more categories", + ) + classify.set_defaults(func=command_classify) + + audit = subparsers.add_parser( + "audit", + parents=[shared], + help="Audit files for repo-specific style issues", + ) + audit.add_argument( + "--category", + action="append", + choices=CATEGORIES, + help="Restrict the audit to one or more categories", + ) + audit.add_argument( + "--max-findings", + type=int, + default=60, + help="Maximum number of findings or grouped findings to print (default: 60)", + ) + audit.add_argument( + "--sample-lines", + type=int, + default=5, + help="Maximum line samples to print per grouped finding (default: 5)", + ) + audit.add_argument( + "--ungrouped", + action="store_true", + help="Print individual findings instead of grouped summaries", + ) + audit.set_defaults(func=command_audit) + + fmt = subparsers.add_parser( + "format", + parents=[shared], + help="Run clang-format on safe files by default", + ) + fmt.add_argument( + "--category", + action="append", + choices=CATEGORIES, + help="Restrict the format pass to one or more categories", + ) + fmt.add_argument( + "--check", + action="store_true", + help="Report files that would change instead of formatting them", + ) + fmt.add_argument( + "--include-match-sensitive", + action="store_true", + help="Also format match-sensitive C/C++ files (dangerous; verify afterwards). SourceLists files stay excluded.", + ) + fmt.add_argument( + "--include-initializer-guards", + action="store_true", + help="Also format files that use initializer-list guard comments (`//`). Disabled by default because clang-format fights that repo convention.", + ) + fmt.set_defaults(func=command_format) + + return parser + + +def main() -> int: + parser = build_parser() + args = parser.parse_args() + try: + return args.func(args) + except RuntimeError as exc: + print(f"Error: {exc}", file=sys.stderr) + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tools/decomp-context.py b/tools/decomp-context.py index f648ee65b..ae15cbbdb 100644 --- a/tools/decomp-context.py +++ b/tools/decomp-context.py @@ -26,6 +26,7 @@ from typing import Any, Dict, List, Optional, Tuple from _common import ( ROOT_DIR, + RELOC_DIFF_CHOICES, ToolError, build_objdiff_symbol_rows, fail, @@ -68,11 +69,16 @@ def find_unit(config: Dict[str, Any], unit_name: str) -> Optional[Dict[str, Any] return None -def run_objdiff(unit_name: str, base_obj: Optional[str] = None) -> Optional[Dict[str, Any]]: +def run_objdiff( + unit_name: str, + base_obj: Optional[str] = None, + reloc_diffs: str = "none", +) -> Optional[Dict[str, Any]]: return run_objdiff_json( OBJDIFF_CLI, unit_name, base_obj=base_obj, + reloc_diffs=reloc_diffs, root_dir=root_dir, ) @@ -1089,6 +1095,15 @@ def main(): "Use this .o file as the decomp base instead of the one from objdiff.json." ), ) + parser.add_argument( + "--reloc-diffs", + choices=RELOC_DIFF_CHOICES, + default="none", + help=( + "Control relocation-only mismatches in objdiff " + "(default: none; use all to surface relocation diffs)" + ), + ) args = parser.parse_args() if args.ghidra_check: @@ -1108,7 +1123,9 @@ def main(): source_path = meta.get("source_path", "") # === objdiff Status (run first so we have line numbers for source scoping) === - diff_data = run_objdiff(args.unit, base_obj=args.base_obj) + diff_data = run_objdiff( + args.unit, base_obj=args.base_obj, reloc_diffs=args.reloc_diffs + ) left_sym = right_sym = None if diff_data: @@ -1253,6 +1270,8 @@ def main(): args.unit, "-d", args.function, + "--reloc-diffs", + args.reloc_diffs, ] if args.base_obj: diff_cmd += ["--base-obj", args.base_obj] diff --git a/tools/decomp-diff.py b/tools/decomp-diff.py index 9f4653147..78017385e 100644 --- a/tools/decomp-diff.py +++ b/tools/decomp-diff.py @@ -11,6 +11,7 @@ python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim -s nonmatching python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim -d __9CAnimBank + python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim -d __9CAnimBank --reloc-diffs all """ import argparse @@ -19,6 +20,7 @@ from typing import Any, Dict, List, Optional, Tuple from _common import ( ROOT_DIR, + RELOC_DIFF_CHOICES, ToolError, build_objdiff_symbol_rows, fail, @@ -29,11 +31,14 @@ OBJDIFF_CLI = os.path.join(root_dir, "build", "tools", "objdiff-cli") -def run_objdiff(unit: str, base_obj: Optional[str] = None) -> Dict[str, Any]: +def run_objdiff( + unit: str, base_obj: Optional[str] = None, reloc_diffs: str = "none" +) -> Dict[str, Any]: return run_objdiff_json( OBJDIFF_CLI, unit, base_obj=base_obj, + reloc_diffs=reloc_diffs, root_dir=root_dir, ) @@ -438,11 +443,22 @@ def main(): "Use this .o file as the decomp base instead of the one from objdiff.json." ), ) + parser.add_argument( + "--reloc-diffs", + choices=RELOC_DIFF_CHOICES, + default="none", + help=( + "Control relocation-only mismatches in objdiff " + "(default: none; use all to surface relocation diffs)" + ), + ) args = parser.parse_args() try: - data = run_objdiff(args.unit, base_obj=args.base_obj) + data = run_objdiff( + args.unit, base_obj=args.base_obj, reloc_diffs=args.reloc_diffs + ) except ToolError as e: fail(str(e)) diff --git a/tools/decomp-workflow.py b/tools/decomp-workflow.py index be8c151b3..1c054960c 100644 --- a/tools/decomp-workflow.py +++ b/tools/decomp-workflow.py @@ -14,6 +14,7 @@ python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll --lookup-mode full python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll --no-lookup python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll --no-source + python tools/decomp-workflow.py diff -u main/Speed/Indep/SourceLists/zCamera -d UpdateAll --reloc-diffs all python tools/decomp-workflow.py unit -u main/Speed/Indep/SourceLists/zCamera """ @@ -29,6 +30,7 @@ from _common import ( BUILD_NINJA, OBJDIFF_JSON, + RELOC_DIFF_CHOICES, ROOT_DIR, ToolError, ensure_exists, @@ -451,6 +453,8 @@ def command_function(args: argparse.Namespace) -> None: cmd.extend(["--ghidra-version", args.ghidra_version]) if args.brief: cmd.append("--brief") + if args.reloc_diffs != "none": + cmd.extend(["--reloc-diffs", args.reloc_diffs]) run_stream(cmd) @@ -470,6 +474,8 @@ def command_unit(args: argparse.Namespace) -> None: ) common_args: List[str] = ["-u", args.unit, "-t", "function"] + if args.reloc_diffs != "none": + common_args.extend(["--reloc-diffs", args.reloc_diffs]) if args.search: common_args.extend(["--search", args.search]) if args.limit is not None: @@ -568,6 +574,8 @@ def command_diff(args: argparse.Namespace) -> None: ensure_shared_unit_output(args.unit) cmd: List[str] = python_tool("decomp-diff.py", "-u", args.unit) + if args.reloc_diffs != "none": + cmd.extend(["--reloc-diffs", args.reloc_diffs]) if args.diff: cmd.extend(["-d", args.diff]) if args.type: @@ -661,6 +669,12 @@ def build_parser() -> argparse.ArgumentParser: action="store_true", help="Trim helper sections like related-source hints and suggested commands", ) + function.add_argument( + "--reloc-diffs", + choices=RELOC_DIFF_CHOICES, + default="none", + help="Pass through objdiff relocation diff mode to decomp-context.py", + ) function.set_defaults(func=command_function) unit = subparsers.add_parser( @@ -674,6 +688,12 @@ def build_parser() -> argparse.ArgumentParser: type=int, help="Limit each symbol list to the first N matching rows", ) + unit.add_argument( + "--reloc-diffs", + choices=RELOC_DIFF_CHOICES, + default="none", + help="Pass through objdiff relocation diff mode to decomp-diff.py", + ) unit.set_defaults(func=command_unit) next_cmd = subparsers.add_parser( @@ -745,6 +765,12 @@ def build_parser() -> argparse.ArgumentParser: action="store_true", help="Don't collapse matching instruction runs", ) + diff.add_argument( + "--reloc-diffs", + choices=RELOC_DIFF_CHOICES, + default="none", + help="Pass through objdiff relocation diff mode to decomp-diff.py", + ) diff.set_defaults(func=command_diff) return parser From e3b4f8cff98bbbac6bc90544a40087ceb2978b70 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 14:34:31 +0100 Subject: [PATCH 188/691] style: move FEGameInterface declarations into headers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/FEng/FEGameInterface.h | 80 +++++++++++++++++++ src/Speed/Indep/Src/FEng/FEMath.h | 19 +++++ .../FEngInterfaces/FEGameInterface.cpp | 15 +--- 3 files changed, 103 insertions(+), 11 deletions(-) diff --git a/src/Speed/Indep/Src/FEng/FEGameInterface.h b/src/Speed/Indep/Src/FEng/FEGameInterface.h index 63da4eb32..b2718ceae 100644 --- a/src/Speed/Indep/Src/FEng/FEGameInterface.h +++ b/src/Speed/Indep/Src/FEng/FEGameInterface.h @@ -5,6 +5,86 @@ #pragma once #endif +#include +#include "FEObject.h" +#include "FEMath.h" + +class FEPackage; +struct FEResourceRequest; +struct FEObjectListEntry; +struct FEMouseInfo; + +enum FEng_WarningLevel { + FEng_NonWarning = 0, + FEng_SoftWarning = 1, + FEng_HardWarning = 2, +}; + +// TODO: FEGameInterface ownership is inferred from the existing stub header and FEGameInterface.cpp line info. +struct FEGameInterface { + virtual ~FEGameInterface() {} + + virtual unsigned char *GetPackageData(const char *pPackageName, unsigned char **pBlockStart, bool &bDeleteBlock) { + bDeleteBlock = false; + return nullptr; + } + + virtual bool LoadResources(FEPackage *pPackage, int Count, FEResourceRequest *pList) { return false; } + virtual bool UnloadResources(FEPackage *pPackage, int Count, FEResourceRequest *pList) { return false; } + virtual void PackageWasLoaded(FEPackage *pPackage) {} + virtual bool PackageWillUnload(FEPackage *pPackage) { return false; } + virtual bool UnloadUnreferencedLibrary() { return false; } + virtual void NotificationMessage(unsigned long Message, FEObject *pObject, unsigned long Param1, unsigned long Param2) {} + virtual void NotifySoundMessage(unsigned long Message, FEObject *pObject, unsigned long ControlMask, unsigned long pPackagePtr) {} + virtual void BeginPackageRendering(FEPackage *pPackage) {} + virtual void EndPackageRendering(FEPackage *pPackage) {} + virtual void GenerateRenderContext(unsigned short uContext, FEObject *pObject) {} + virtual bool GetContextTransform(unsigned short uContext, FEMatrix4 &Matrix) { return false; } + virtual void RenderObjectList(FEObjectListEntry *pList, unsigned long Count) {} + virtual void RenderObject(FEObject *pObject) {} + virtual void DrawMousePointer() {} + virtual void GetViewTransformation(FEMatrix4 *pView) {} + virtual unsigned long GetJoyPadMask(unsigned char feng_pad_index) { return 0; } + virtual void GetMouseInfo(FEMouseInfo &Info) {} + virtual bool DoesPointTouchObject(float xPos, float yPos, FEObject *pButton) { return false; } + virtual bool SetCellData(unsigned long Param1, unsigned long Param2, unsigned long Param3, unsigned long Param4) { return false; } + virtual void OutputWarning(const char *pString, FEng_WarningLevel WarningLevel) {} + virtual void DebugMessageQueued(unsigned long Param1, unsigned long Param2, unsigned long Param3, unsigned long Param4) {} + virtual void DebugMessageProcessed(unsigned long Param1, unsigned long Param2, unsigned long Param3, unsigned long Param4) {} + virtual void DebugMessageBeginUpdate() {} + virtual void DebugMessageEndUpdate() {} +}; + +// TODO: cFEngGameInterface ownership is inferred from FEGameInterface.cpp and the matching FEGameInterface header stub. +class cFEngGameInterface : public FEGameInterface { + public: + cFEngGameInterface(); + virtual ~cFEngGameInterface(); + + bool LoadResources(FEPackage *pPackage, int Count, FEResourceRequest *pList) override; + bool UnloadResources(FEPackage *pPackage, int Count, FEResourceRequest *pList) override; + void NotificationMessage(unsigned long Message, FEObject *pObject, unsigned long Param1, unsigned long Param2) override; + void NotifySoundMessage(unsigned long Message, FEObject *pObject, unsigned long ControlMask, unsigned long pPackagePtr) override; + void GenerateRenderContext(unsigned short uContext, FEObject *pObject) override; + bool GetContextTransform(unsigned short uContext, FEMatrix4 &Matrix) override; + void RenderObject(FEObject *pObject) override; + void GetViewTransformation(FEMatrix4 *pView) override; + void BeginPackageRendering(FEPackage *pPackage) override; + void EndPackageRendering(FEPackage *pPackage) override; + void PackageWasLoaded(FEPackage *pPackage) override; + bool PackageWillUnload(FEPackage *pPackage) override; + unsigned char *GetPackageData(const char *pPackageName, unsigned char **pBlockStart, bool &bDeleteBlock) override; + unsigned long GetJoyPadMask(unsigned char feng_pad_index) override; + void GetMouseInfo(FEMouseInfo &Info) override; + bool DoesPointTouchObject(float xPos, float yPos, FEObject *pButton) override; + void OutputWarning(const char *pString, FEng_WarningLevel WarningLevel) override; + + static cFEngGameInterface *pInstance; + + private: + bool RenderThisPackage; + int iGameMode; +}; #endif diff --git a/src/Speed/Indep/Src/FEng/FEMath.h b/src/Speed/Indep/Src/FEng/FEMath.h index 1c696caf7..842bd7845 100644 --- a/src/Speed/Indep/Src/FEng/FEMath.h +++ b/src/Speed/Indep/Src/FEng/FEMath.h @@ -5,6 +5,25 @@ #pragma once #endif +struct FEMatrix4 { + float m11; // offset 0x0, size 0x4 + float m12; // offset 0x4, size 0x4 + float m13; // offset 0x8, size 0x4 + float m14; // offset 0xC, size 0x4 + float m21; // offset 0x10, size 0x4 + float m22; // offset 0x14, size 0x4 + float m23; // offset 0x18, size 0x4 + float m24; // offset 0x1C, size 0x4 + float m31; // offset 0x20, size 0x4 + float m32; // offset 0x24, size 0x4 + float m33; // offset 0x28, size 0x4 + float m34; // offset 0x2C, size 0x4 + float m41; // offset 0x30, size 0x4 + float m42; // offset 0x34, size 0x4 + float m43; // offset 0x38, size 0x4 + float m44; // offset 0x3C, size 0x4 + void Identify(); +}; #endif diff --git a/src/Speed/Indep/Src/Frontend/FEngInterfaces/FEGameInterface.cpp b/src/Speed/Indep/Src/Frontend/FEngInterfaces/FEGameInterface.cpp index c32e14ff6..0dc0c51b5 100644 --- a/src/Speed/Indep/Src/Frontend/FEngInterfaces/FEGameInterface.cpp +++ b/src/Speed/Indep/Src/Frontend/FEngInterfaces/FEGameInterface.cpp @@ -2,18 +2,16 @@ #include "Speed/Indep/Src/FEng/FEGroup.h" #include "Speed/Indep/Src/FEng/FEObject.h" #include "Speed/Indep/Src/FEng/FEPackage.h" -#include "Speed/Indep/Src/FEng/FETypes.h" +#include "Speed/Indep/Src/FEng/FEMath.h" +#include "Speed/Indep/Src/FEng/FEList.h" #include "Speed/Indep/Src/FEng/cFEng.h" #include "Speed/Indep/Src/Frontend/Database/FEDatabase.hpp" #include "Speed/Indep/Src/Frontend/FEObjectCallbacks.hpp" #include "Speed/Indep/Src/Frontend/FEPackageManager.hpp" #include "Speed/Indep/Src/Frontend/FEJoyInput.hpp" #include "Speed/Indep/Src/Gameplay/GRaceStatus.h" - -struct FEMatrix4 { - float data[16]; - void Identify(); -}; +#include "Speed/Indep/bWare/Inc/Strings.hpp" +#include "Speed/Indep/bWare/Inc/bWare.hpp" struct RenderContext; class FEngine; @@ -36,11 +34,6 @@ extern int FEngPleaseRenderSinglePackage; void GetBaseName(char *dst, const char *src); void bToUpper(char *s); -unsigned int bStringHash(const char *s); -void *bMalloc(int size, int param); -void bStrNCpy(char *dst, const char *src, int size); -void bFree(void *ptr); -unsigned int FEHashUpper(const char *name); FEPackageRenderInfo *HACK_FEPkgMgr_GetPackageRenderInfo(FEPackage *pkg); bool FEngTestForIntersection(float x, float y, FEObject *obj); From 6bf38e982980ddb77673b48070aa5acc275e8c36 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 14:34:54 +0100 Subject: [PATCH 189/691] docs: note stub-header ownership cleanup Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/code_style/SKILL.md | 1 + AGENTS.md | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/skills/code_style/SKILL.md b/.github/skills/code_style/SKILL.md index 5aafbce35..d5ec45a39 100644 --- a/.github/skills/code_style/SKILL.md +++ b/.github/skills/code_style/SKILL.md @@ -99,6 +99,7 @@ Foo::Foo() - Prefer including the owning repo header over adding a local forward declaration for a project type. - If the repo already has a header declaration/definition for a type, include that header instead of redeclaring the type locally. +- If the repo only has an empty or stub owner header, and line info / surrounding source clearly points at that header's subsystem, prefer populating that owner header over leaving a recovered project type declaration inside a `.cpp`. - Only keep a local forward declaration when no canonical repo header exists yet and you have verified that the ownership is still unresolved. - Prefer moving helper template declarations next to their real use site instead of leaving them in an unrelated file. diff --git a/AGENTS.md b/AGENTS.md index a809e1678..1b1f23030 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -280,6 +280,7 @@ This is a **C++98** codebase compiled with ProDG GC 3.9.3 (GCC 2.95 under the ho - Inline assembly is acceptable when needed to reproduce dead code or compiler scheduling that source alone cannot express cleanly - Preserve the original `class` vs `struct` kind. Check existing headers first, then Dwarf / PS2 info when needed. Even forward declarations and local partial declarations should use the accurate keyword when known. - Prefer including the real repo header over introducing a local forward declaration for a project type. If a type already has a header in `src/`, include it instead of redeclaring it locally. +- If a subsystem already has a stub owner header and the debug line info points back at that subsystem, fill the owner header instead of keeping a recovered project type declaration in a `.cpp`. - Preserve original member names, types, order, and proven layout comments. Do not invent `pad`, `unk`, or `field_XXXX` members just to satisfy a guessed size or offset; verify the real members with `find-symbol.py`, GC Dwarf, and PS2 data, and leave a short TODO if a layout detail is still uncertain. - Follow DWARF member naming exactly (`mMember` vs `m_member`) instead of normalizing names - Omit the `this` pointer. From 83f97dcd8bd31090d72e25e16d9725179d61a7c7 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 15:14:10 +0100 Subject: [PATCH 190/691] style: normalize zCamera null checks Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Src/Camera/Actions/CDActionDrive.cpp | 62 +++++++-------- .../Indep/Src/Camera/Actions/CDActionIce.cpp | 30 +++---- .../Src/Camera/Actions/CDActionShowcase.cpp | 24 +++--- .../Src/Camera/Actions/CDActionTrackCar.cpp | 26 +++---- .../Src/Camera/Actions/CDActionTrackCop.cpp | 28 +++---- src/Speed/Indep/Src/Camera/CameraAI.cpp | 78 +++++++++---------- src/Speed/Indep/Src/Camera/CameraMover.cpp | 48 ++++++------ src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp | 6 +- src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp | 10 +-- src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp | 2 +- src/Speed/Indep/Src/Camera/Movers/Cubic.cpp | 4 +- .../Indep/Src/Camera/Movers/DebugWorld.cpp | 10 +-- .../Indep/Src/Camera/Movers/TrackCar.cpp | 6 +- .../Indep/Src/Camera/Movers/TrackCop.cpp | 6 +- 14 files changed, 170 insertions(+), 170 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp index bc47d9745..38b57eb74 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionDrive.cpp @@ -80,17 +80,17 @@ CameraAI::Action *CDActionDrive::Construct(CameraAI::Director *director) { } } - if (player == nullptr) { + if (!player) { goto null_return; } - if (player->GetSettings() == nullptr) { + if (!player->GetSettings()) { goto null_return; } { ISimable *isimable = player->GetSimable(); - if (isimable == nullptr) { + if (!isimable) { goto null_return; } @@ -141,7 +141,7 @@ CDActionDrive::CDActionDrive(CameraAI::Director *director, IPlayer *player) bool smooth = false; CameraMover *m = director->GetMover(); - if (m != nullptr && m->GetType() == CM_ICE) { + if (m && m->GetType() == CM_ICE) { smooth = TheICEManager.IsSmoothExit(); } @@ -157,7 +157,7 @@ CDActionDrive::CDActionDrive(CameraAI::Director *director, IPlayer *player) bMatrix4 mat(*mTarget.GetMatrix()); ICollisionBody *irbc = nullptr; - if (mVehicle != nullptr && mVehicle->QueryInterface(&irbc)) { + if (mVehicle && mVehicle->QueryInterface(&irbc)) { IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); UVector3 cg(irbc->GetCenterOfGravity()); irb->ConvertLocalToWorld(cg, false); @@ -216,7 +216,7 @@ void CDActionDrive::OnCarDetached() { if (mTarget.IsValid()) { mTarget.Set(0); } - if (mAnchor != nullptr) { + if (mAnchor) { mAnchor->SetWorldID(0); } mVehicle = nullptr; @@ -255,21 +255,21 @@ void CDActionDrive::OnCollision(const Sim::Collision::Info &cinfo) { void CDActionDrive::AquireCar() { ISimable *isimable; - if (mPlayer == nullptr) { + if (!mPlayer) { return; } if (!ComparePtr(mPlayer->GetSimable(), mVehicle)) { - if (mVehicle != nullptr) { + if (mVehicle) { Detach(mVehicle); mVehicle = nullptr; } } - if (mVehicle != nullptr) { + if (mVehicle) { return; } isimable = mPlayer->GetSimable(); - if (isimable != nullptr) { + if (isimable) { mTarget.Set(isimable->GetWorldID()); if (mTarget.IsValid()) { if (isimable->QueryInterface(&mVehicle)) { @@ -277,7 +277,7 @@ void CDActionDrive::AquireCar() { Sim::Collision::AddListener(static_cast(this), mVehicle, "Camera"); CameraAnchor *anchor = mAnchor; const char *model_str = mVehicle->GetVehicleAttributes().MODEL().GetString(); - if (model_str == nullptr) { + if (!model_str) { model_str = ""; } anchor->SetModel(bStringHash(model_str)); @@ -312,8 +312,8 @@ void CDActionDrive::Update(float dT) { mObjectCollisionTime = 0.0f; } - if (mPlayer == nullptr) { - if (mVehicle != nullptr) { + if (!mPlayer) { + if (mVehicle) { Detach(mVehicle); mVehicle = nullptr; } @@ -322,7 +322,7 @@ void CDActionDrive::Update(float dT) { AquireCar(); mAnchor->SetVehicleDestroyed(false); - if (mVehicle != nullptr && mVehicle->IsDestroyed()) { + if (mVehicle && mVehicle->IsDestroyed()) { mAnchor->SetVehicleDestroyed(true); } @@ -331,7 +331,7 @@ void CDActionDrive::Update(float dT) { if (GRaceStatus::Get().GetRaceTimeRemaining() <= 0.0f) { ISimable *playerSim = mPlayer->GetSimable(); GRacerInfo *racerInfo = GRaceStatus::Get().GetRacerInfo(playerSim); - if (racerInfo != nullptr && !racerInfo->IsFinishedRacing()) { + if (racerInfo && !racerInfo->IsFinishedRacing()) { return; } } @@ -341,7 +341,7 @@ void CDActionDrive::Update(float dT) { if (GRaceStatus::Exists()) { ISimable *playerSim = mPlayer->GetSimable(); GRacerInfo *racerInfo = GRaceStatus::Get().GetRacerInfo(playerSim); - if (racerInfo != nullptr && racerInfo->GetCameraDetached()) { + if (racerInfo && racerInfo->GetCameraDetached()) { return; } } @@ -349,15 +349,15 @@ void CDActionDrive::Update(float dT) { bool isBeingPursued = false; mAnchor->SetCloseToRoadBlock(isBeingPursued); IVehicleAI *ivehicleai = mVehicle->GetAIVehiclePtr(); - if (ivehicleai != nullptr) { + if (ivehicleai) { IPursuit *ipursuit = ivehicleai->GetPursuit(); - if (ipursuit != nullptr) { + if (ipursuit) { float distance = 0.0f; IVehicle *cop = ipursuit->GetNearestCopInRoadblock(&distance); - if (cop != nullptr && 0.0f < distance && distance < mAnchor->GetVelocityMagnitude() * 3.0f) { + if (cop && 0.0f < distance && distance < mAnchor->GetVelocityMagnitude() * 3.0f) { for (IVehicle *const *iter = IVehicle::GetList(VEHICLE_AICOPS).begin(); iter != IVehicle::GetList(VEHICLE_AICOPS).end(); ++iter) { IVehicle *p_car = *iter; - if (p_car != nullptr && p_car->IsActive() && p_car->GetVehicleClass() == VehicleClass::CAR) { + if (p_car && p_car->IsActive() && p_car->GetVehicleClass() == VehicleClass::CAR) { UVector3 ucoppos(p_car->GetPosition()); bVector3 coppos; eSwizzleWorldVector(reinterpret_cast(ucoppos), coppos); @@ -388,7 +388,7 @@ void CDActionDrive::Update(float dT) { } IInput *iinput; - if (mVehicle != nullptr && mVehicle->QueryInterface(&iinput)) { + if (mVehicle && mVehicle->QueryInterface(&iinput)) { mMover->SetLookBack(false); if (iinput->IsLookBackButtonPressed() && !mVehicle->IsStaging() && !isBeingPursued) { mMover->SetLookBack(true); @@ -405,7 +405,7 @@ void CDActionDrive::Update(float dT) { if (0.0f < pulseTime && pulseTime < 0.25f) { mPulseTimer = 0.0f; IVisualTreatment *ivt = IVisualTreatment::Get(); - if (ivt != nullptr) { + if (ivt) { ivt->TriggerPulse(0.5f); } } @@ -431,7 +431,7 @@ void CDActionDrive::Update(float dT) { if (gCinematicMomementCamera) { Camera *camera = mMover->GetCamera(); - if (camera != nullptr) { + if (camera) { float timeScale = (1.0f - mCinematicMomementTimer) * 2.5f + 3.0f; if (0.9f < timeScale) { timeScale = 1.0f; @@ -458,10 +458,10 @@ void CDActionDrive::Update(float dT) { { PlayerSettings *settings = mPlayer->GetSettings(); - if (settings != nullptr) { + if (settings) { int pov_type = GetPOVTypeFromPlayerCamera(settings->CurCam); - if (mVehicle != nullptr && mVehicle->QueryInterface(&iinput)) { + if (mVehicle && mVehicle->QueryInterface(&iinput)) { static int old_pov = -1; if (iinput->IsPullBackButtonPressed()) { old_pov = pov_type; @@ -484,7 +484,7 @@ void CDActionDrive::Update(float dT) { } if (mTarget.IsValid()) { - if (mVehicle != nullptr) { + if (mVehicle) { mAnchor->SetDragRace(mVehicle->GetDriverStyle() == STYLE_DRAG); } @@ -494,7 +494,7 @@ void CDActionDrive::Update(float dT) { mAnchor->SetSurface(SimSurface::kNull); mAnchor->SetTouchingGround(false); - if (mVehicle != nullptr && mVehicle->QueryInterface(&irbc)) { + if (mVehicle && mVehicle->QueryInterface(&irbc)) { IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); UVector3 cg(irbc->GetCenterOfGravity()); irb->ConvertLocalToWorld(cg, false); @@ -517,7 +517,7 @@ void CDActionDrive::Update(float dT) { mAnchor->SetNosEngaged(false); mAnchor->SetOverRev(false); - if (mVehicle != nullptr) { + if (mVehicle) { ISimable *isimable; if (mVehicle->QueryInterface(&isimable)) { IEngine *iengine; @@ -529,7 +529,7 @@ void CDActionDrive::Update(float dT) { } float drift = 0.0f; - if (mAnchor->IsTouchingGround() && mVehicle != nullptr) { + if (mAnchor->IsTouchingGround() && mVehicle) { float slipangle = bAbs(mVehicle->GetSlipAngle()); slipangle = ANGLE2DEG(slipangle); drift = UMath::Ramp(slipangle, 5.0f, 45.0f); @@ -584,7 +584,7 @@ void CDActionDrive::Update(float dT) { bool CDActionDrive::GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) { IBody *ibody; - if (mVehicle == nullptr) { + if (!mVehicle) { return false; } if (!mVehicle->QueryInterface(&ibody)) { @@ -596,7 +596,7 @@ bool CDActionDrive::GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velo } void CDActionDrive::MessageJumpCut(const MJumpCut &message) { - if (mAnchor != nullptr && message.GetAnchorWorldID() == mAnchor->GetWorldID()) { + if (mAnchor && message.GetAnchorWorldID() == mAnchor->GetWorldID()) { static_cast(mMover)->SetSnapNext(); } } diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp index ab84c86f5..a72798af8 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionIce.cpp @@ -55,16 +55,16 @@ CameraAI::Action *CDActionIce::Construct(CameraAI::Director *director) { } } - if (player == nullptr) { + if (!player) { return nullptr; } - if (player->GetSettings() == nullptr) { + if (!player->GetSettings()) { return nullptr; } ISimable *isimable = player->GetSimable(); - if (isimable == nullptr) { + if (!isimable) { return nullptr; } @@ -94,9 +94,9 @@ CDActionIce::CDActionIce(CameraAI::Director *director, IPlayer *player) mAttachments->Attach(mPlayer); CameraMover *m = director->GetMover(); - if (m != nullptr) { + if (m) { CameraAnchor *prevAnchor = m->GetAnchor(); - if (prevAnchor != nullptr) { + if (prevAnchor) { // mPrev from prevAnchor } } @@ -110,7 +110,7 @@ CDActionIce::CDActionIce(CameraAI::Director *director, IPlayer *player) ICollisionBody *irbc = nullptr; mVehicle->QueryInterface(&irbc); - if (irbc != nullptr) { + if (irbc) { IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); UVector3 cg(irbc->GetCenterOfGravity()); irb->ConvertLocalToWorld(cg, false); @@ -148,7 +148,7 @@ void CDActionIce::OnDetached(IAttachable *pOther) { } void CDActionIce::ReleaseCar(bool detach) { - if (mVehicle != nullptr) { + if (mVehicle) { if (detach) { Detach(mVehicle); } @@ -162,19 +162,19 @@ void CDActionIce::AquireCar() { ITransmission *itrans; ISuspension *isuspension; - if (mPlayer == nullptr) { + if (!mPlayer) { return; } if (!ComparePtr(mPlayer->GetSimable(), mVehicle)) { ReleaseCar(true); } - if (mVehicle != nullptr) { + if (mVehicle) { return; } isimable = mPlayer->GetSimable(); - if (isimable == nullptr) { + if (!isimable) { return; } @@ -209,7 +209,7 @@ void CDActionIce::Update(float dT) { mActionQ.PopAction(); } - if (mPlayer == nullptr) { + if (!mPlayer) { ReleaseCar(true); } else { AquireCar(); @@ -220,7 +220,7 @@ void CDActionIce::Update(float dT) { float forward_slip; ISuspension *isuspension; - if (mVehicle != nullptr && mVehicle->QueryInterface(&irbc)) { + if (mVehicle && mVehicle->QueryInterface(&irbc)) { IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); UVector3 cg(irbc->GetCenterOfGravity()); irb->ConvertLocalToWorld(cg, false); @@ -229,7 +229,7 @@ void CDActionIce::Update(float dT) { } mAnchor->SetSlipAngle(0.0f); - if (mVehicle != nullptr) { + if (mVehicle) { mAnchor->SetSlipAngle(mVehicle->GetSlipAngle()); } @@ -237,7 +237,7 @@ void CDActionIce::Update(float dT) { mAnchor->SetNosEngaged(false); mAnchor->SetNosPercentageLeft(0.0f); - if (mVehicle != nullptr && mVehicle->QueryInterface(&isimable)) { + if (mVehicle && mVehicle->QueryInterface(&isimable)) { IEngine *iengine; if (isimable->QueryInterface(&iengine)) { mAnchor->SetRPM(iengine->GetRPM()); @@ -247,7 +247,7 @@ void CDActionIce::Update(float dT) { } forward_slip = 0.0f; - if (mVehicle != nullptr && mVehicle->QueryInterface(&isuspension)) { + if (mVehicle && mVehicle->QueryInterface(&isuspension)) { for (unsigned int i = 0; i < isuspension->GetNumWheels(); i++) { if (isuspension->GetWheelSlip(i) > 0.0f) { forward_slip += isuspension->GetWheelSlip(i); diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp index 403577958..9c7d8334f 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionShowcase.cpp @@ -113,17 +113,17 @@ CameraAI::Action *CDActionShowcase::Construct(CameraAI::Director *director) { } } - if (player == nullptr) { + if (!player) { goto null_return; } - if (player->GetSettings() == nullptr) { + if (!player->GetSettings()) { goto null_return; } { ISimable *isimable = player->GetSimable(); - if (isimable == nullptr) { + if (!isimable) { goto null_return; } @@ -158,7 +158,7 @@ CDActionShowcase::CDActionShowcase(CameraAI::Director *director, IPlayer *player bMatrix4 mat(*mTarget.GetMatrix()); ICollisionBody *irbc = nullptr; - if (mVehicle != nullptr && mVehicle->QueryInterface(&irbc)) { + if (mVehicle && mVehicle->QueryInterface(&irbc)) { IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); UVector3 cg(irbc->GetCenterOfGravity()); irb->ConvertLocalToWorld(cg, false); @@ -208,28 +208,28 @@ void CDActionShowcase::OnCarDetached() { void CDActionShowcase::AquireCar() { ISimable *isimable; - if (mPlayer == nullptr) { + if (!mPlayer) { return; } if (!ComparePtr(mPlayer->GetSimable(), mVehicle)) { - if (mVehicle != nullptr) { + if (mVehicle) { Detach(mVehicle); mVehicle = nullptr; } } - if (mVehicle != nullptr) { + if (mVehicle) { return; } isimable = mPlayer->GetSimable(); - if (isimable != nullptr) { + if (isimable) { mTarget.Set(isimable->GetWorldID()); if (mTarget.IsValid()) { if (isimable->QueryInterface(&mVehicle)) { Attach(mVehicle); CameraAnchor *anchor = mAnchor; const char *model_str = mVehicle->GetVehicleAttributes().MODEL().GetString(); - if (model_str == nullptr) { + if (!model_str) { model_str = ""; } anchor->SetModel(bStringHash(model_str)); @@ -240,8 +240,8 @@ void CDActionShowcase::AquireCar() { } void CDActionShowcase::Update(float dT) { - if (mPlayer == nullptr) { - if (mVehicle != nullptr) { + if (!mPlayer) { + if (mVehicle) { Detach(mVehicle); mVehicle = nullptr; } @@ -256,7 +256,7 @@ void CDActionShowcase::Update(float dT) { bMatrix4 mat(*mTarget.GetMatrix()); ICollisionBody *irbc; - if (mVehicle != nullptr) { + if (mVehicle) { if (mVehicle->QueryInterface(&irbc)) { IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); UVector3 cg(irbc->GetCenterOfGravity()); diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp index 4f08aad30..e964a67b1 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCar.cpp @@ -47,17 +47,17 @@ CameraAI::Action *CDActionTrackCar::Construct(CameraAI::Director *director) { } } - if (player == nullptr) { + if (!player) { goto null_return; } - if (player->GetSettings() == nullptr) { + if (!player->GetSettings()) { goto null_return; } { ISimable *isimable = player->GetSimable(); - if (isimable == nullptr) { + if (!isimable) { goto null_return; } @@ -92,7 +92,7 @@ CDActionTrackCar::CDActionTrackCar(CameraAI::Director *director, IPlayer *player bMatrix4 mat(*mTarget.GetMatrix()); ICollisionBody *irbc = nullptr; - if (mVehicle != nullptr && mVehicle->QueryInterface(&irbc)) { + if (mVehicle && mVehicle->QueryInterface(&irbc)) { IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); UVector3 cg(irbc->GetCenterOfGravity()); irb->ConvertLocalToWorld(cg, false); @@ -142,28 +142,28 @@ void CDActionTrackCar::OnCarDetached() { void CDActionTrackCar::AquireCar() { ISimable *isimable; - if (mPlayer == nullptr) { + if (!mPlayer) { return; } if (!ComparePtr(mPlayer->GetSimable(), mVehicle)) { - if (mVehicle != nullptr) { + if (mVehicle) { Detach(mVehicle); mVehicle = nullptr; } } - if (mVehicle != nullptr) { + if (mVehicle) { return; } isimable = mPlayer->GetSimable(); - if (isimable != nullptr) { + if (isimable) { mTarget.Set(isimable->GetWorldID()); if (mTarget.IsValid()) { if (isimable->QueryInterface(&mVehicle)) { Attach(mVehicle); CameraAnchor *anchor = mAnchor; const char *model_str = mVehicle->GetVehicleAttributes().MODEL().GetString(); - if (model_str == nullptr) { + if (!model_str) { model_str = ""; } anchor->SetModel(bStringHash(model_str)); @@ -178,8 +178,8 @@ void CDActionTrackCar::AquireCar() { } void CDActionTrackCar::Update(float dT) { - if (mPlayer == nullptr) { - if (mVehicle != nullptr) { + if (!mPlayer) { + if (mVehicle) { Detach(mVehicle); mVehicle = nullptr; } @@ -194,7 +194,7 @@ void CDActionTrackCar::Update(float dT) { bMatrix4 mat(*mTarget.GetMatrix()); ICollisionBody *irbc; - if (mVehicle != nullptr) { + if (mVehicle) { if (mVehicle->QueryInterface(&irbc)) { IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); UVector3 cg(irbc->GetCenterOfGravity()); @@ -210,7 +210,7 @@ void CDActionTrackCar::Update(float dT) { bool CDActionTrackCar::GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) { IBody *ibody; - if (mVehicle == nullptr) { + if (!mVehicle) { return false; } if (!mVehicle->QueryInterface(&ibody)) { diff --git a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp index 5b81d311a..5d038130b 100644 --- a/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp +++ b/src/Speed/Indep/Src/Camera/Actions/CDActionTrackCop.cpp @@ -48,17 +48,17 @@ CameraAI::Action *CDActionTrackCop::Construct(CameraAI::Director *director) { } } - if (player == nullptr) { + if (!player) { goto null_return; } - if (player->GetSettings() == nullptr) { + if (!player->GetSettings()) { goto null_return; } { ISimable *isimable = player->GetSimable(); - if (isimable == nullptr) { + if (!isimable) { goto null_return; } @@ -87,7 +87,7 @@ CDActionTrackCop::CDActionTrackCop(CameraAI::Director *director, IPlayer *player mAttachments->Attach(mPlayer); CameraMover *m = director->GetMover(); - if (m != nullptr) { + if (m) { renderCarPOV = m->RenderCarPOV(); } @@ -99,7 +99,7 @@ CDActionTrackCop::CDActionTrackCop(CameraAI::Director *director, IPlayer *player bMatrix4 mat(*mTarget.GetMatrix()); ICollisionBody *irbc = nullptr; - if (mVehicle != nullptr && mVehicle->QueryInterface(&irbc)) { + if (mVehicle && mVehicle->QueryInterface(&irbc)) { IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); UVector3 cg(irbc->GetCenterOfGravity()); irb->ConvertLocalToWorld(cg, false); @@ -150,28 +150,28 @@ void CDActionTrackCop::OnCarDetached() { void CDActionTrackCop::AquireCar() { ISimable *isimable; - if (mPlayer == nullptr) { + if (!mPlayer) { return; } if (!ComparePtr(mPlayer->GetSimable(), mVehicle)) { - if (mVehicle != nullptr) { + if (mVehicle) { Detach(mVehicle); mVehicle = nullptr; } } - if (mVehicle != nullptr) { + if (mVehicle) { return; } isimable = mPlayer->GetSimable(); - if (isimable != nullptr) { + if (isimable) { mTarget.Set(isimable->GetWorldID()); if (mTarget.IsValid()) { if (isimable->QueryInterface(&mVehicle)) { Attach(mVehicle); CameraAnchor *anchor = mAnchor; const char *model_str = mVehicle->GetVehicleAttributes().MODEL().GetString(); - if (model_str == nullptr) { + if (!model_str) { model_str = ""; } anchor->SetModel(bStringHash(model_str)); @@ -186,8 +186,8 @@ void CDActionTrackCop::AquireCar() { } void CDActionTrackCop::Update(float dT) { - if (mPlayer == nullptr) { - if (mVehicle != nullptr) { + if (!mPlayer) { + if (mVehicle) { Detach(mVehicle); mVehicle = nullptr; } @@ -202,7 +202,7 @@ void CDActionTrackCop::Update(float dT) { bMatrix4 mat(*mTarget.GetMatrix()); ICollisionBody *irbc; - if (mVehicle != nullptr) { + if (mVehicle) { if (mVehicle->QueryInterface(&irbc)) { IRigidBody *irb = mVehicle->GetSimable()->GetRigidBody(); UVector3 cg(irbc->GetCenterOfGravity()); @@ -218,7 +218,7 @@ void CDActionTrackCop::Update(float dT) { bool CDActionTrackCop::GetTrafficBasis(UMath::Matrix4 &matrix, UMath::Vector3 &velocity) { IBody *ibody; - if (mVehicle == nullptr) { + if (!mVehicle) { return false; } if (!mVehicle->QueryInterface(&ibody)) { diff --git a/src/Speed/Indep/Src/Camera/CameraAI.cpp b/src/Speed/Indep/Src/Camera/CameraAI.cpp index 509d8788e..2acb23591 100644 --- a/src/Speed/Indep/Src/Camera/CameraAI.cpp +++ b/src/Speed/Indep/Src/Camera/CameraAI.cpp @@ -69,7 +69,7 @@ CameraAI::Director::~Director() { } void CameraAI::Director::ReleaseAction() { - if (mAction != nullptr) { + if (mAction) { delete mAction; mAction = nullptr; } @@ -81,7 +81,7 @@ void CameraAI::Director::Reset() { mPursuitStartTime = 0.0f; mCinematicSlowdownSeconds = 0.0f; SetAction(Attrib::StringKey("DRIVE")); - if (mAction != nullptr) { + if (mAction) { mAction->Reset(); } } @@ -105,7 +105,7 @@ void CameraAI::Director::EndPursuitStart() { } CameraMover *CameraAI::Director::GetMover() { - if (mAction != nullptr) { + if (mAction) { return mAction->GetMover(); } return nullptr; @@ -119,11 +119,11 @@ void CameraAI::Director::Update(float dT) { mPursuitStartTime -= dT; } SelectAction(); - if (mAction != nullptr) { + if (mAction) { if (mAction->GetName() == Attrib::StringKey("DRIVE")) { mAction->SetSpecial(mCinematicSlowdownSeconds); } - if (mAction != nullptr) { + if (mAction) { mAction->Update(dT); } } @@ -132,12 +132,12 @@ void CameraAI::Director::Update(float dT) { void CameraAI::Director::SetAction(Attrib::StringKey desiredMode) { Action *action; mDesiredMode = desiredMode; - if (mAction != nullptr) { + if (mAction) { const Attrib::StringKey &key = mAction->GetNext(); if (!key.IsEmpty()) { mDesiredMode = key; } - if (mAction != nullptr) { + if (mAction) { if (mAction->GetName() == mDesiredMode) { return; } @@ -145,7 +145,7 @@ void CameraAI::Director::SetAction(Attrib::StringKey desiredMode) { } if (!mDesiredMode.IsEmpty()) { action = Action::CreateInstance(UCrc32(mDesiredMode), this); - if (action != nullptr) { + if (action) { ReleaseAction(); mAction = action; SetNewSndCamAction(mDesiredMode, mViewID); @@ -174,11 +174,11 @@ void CameraAI::Director::SelectAction() { if (!gGameBreakerCamera) { eView *view = &eViews[mViewID]; - if (view != nullptr) { + if (view) { CameraMover *cm = view->GetCameraMover(); - if (cm != nullptr && cm->GetType() == CM_DRIVE_CUBIC) { + if (cm && cm->GetType() == CM_DRIVE_CUBIC) { CameraAnchor *anchor = cm->GetAnchor(); - if (anchor != nullptr) { + if (anchor) { if (AreMomentCamerasEnabled() && (anchor->GetVelocityMagnitude() > kJumpSpeedHigh || (anchor->GetVelocityMagnitude() > kJumpSpeedLow && anchor->IsTouchingGround())) && @@ -197,10 +197,10 @@ void CameraAI::Director::SelectAction() { bool isICEPlaying = false; INIS *nis = UTL::Collections::Singleton::Get(); - if (nis != nullptr) { + if (nis) { if (nis->IsPlaying()) { ICEScene *scene = nis->GetScene(); - if (scene != nullptr) { + if (scene) { isICEPlaying = scene->IsControllingCamera(); mIsCinematicMomement = nis->IsWorldMomement(); } @@ -212,11 +212,11 @@ void CameraAI::Director::SelectAction() { mJumpTime = 0.0f; mPursuitStartTime = 0.0f; } else { - if (mAction != nullptr && mAction->GetName() == Attrib::StringKey("ICE")) { + if (mAction && mAction->GetName() == Attrib::StringKey("ICE")) { TheICEManager.SetUseRealTime(false); mDesiredMode = Attrib::StringKey("DRIVE"); INIS *nis2 = UTL::Collections::Singleton::Get(); - if (nis2 != nullptr) { + if (nis2) { nis2->FireEventTag("CameraFinished"); } MICECameraFinished().Post(UCrc32(0x20d60dbf)); @@ -224,12 +224,12 @@ void CameraAI::Director::SelectAction() { } } - if (mAction != nullptr) { + if (mAction) { const Attrib::StringKey &key = mAction->GetNext(); if (!key.IsEmpty()) { mDesiredMode = key; } - if (mAction != nullptr) { + if (mAction) { if (mAction->GetName() == mDesiredMode) { return; } @@ -237,7 +237,7 @@ void CameraAI::Director::SelectAction() { } if (!mDesiredMode.IsEmpty()) { Action *action = Action::CreateInstance(UCrc32(mDesiredMode), this); - if (action != nullptr) { + if (action) { mIsCinematicMomement = false; mCinematicSlowdownSeconds = 0.0f; ReleaseAction(); @@ -295,9 +295,9 @@ CameraAI::Director *FindDirector(unsigned int id) { for (CameraAI::Director *const *iter = CameraAI::Director::GetList().begin(); iter != CameraAI::Director::GetList().end(); ++iter) { CameraAI::Director *cd = *iter; IPlayer *iplayer = FindPlayer(cd->GetViewID()); - if (iplayer != nullptr) { + if (iplayer) { ISimable *isimable = iplayer->GetSimable(); - if (isimable != nullptr && isimable->GetWorldID() == id) { + if (isimable && isimable->GetWorldID() == id) { return cd; } } @@ -328,11 +328,11 @@ void CameraAI::Update(float dT) { EVIEW_ID viewID = static_cast(++player); IPlayer *iplayer = FindPlayer(viewID); Director *cd = FindDirector(viewID); - if (cd != nullptr && iplayer == nullptr) { + if (cd && !iplayer) { delete cd; continue; } - if (iplayer != nullptr && cd == nullptr) { + if (iplayer && !cd) { cd = new (static_cast(0)) Director(viewID); } } while (player <= static_cast(PLAYER_LOCAL)); @@ -360,14 +360,14 @@ void CameraAI::SetAction(EVIEW_ID viewID, const char *desiredMode) { void CameraAI::MaybeKillPursuitCam(unsigned int id) { Director *cd = FindDirector(id); - if (cd != nullptr) { + if (cd) { cd->EndPursuitStart(); } } static float AverageAir(ISimable *isimable, float fSeconds, float *pHighest, float *pLongest) { IRigidBody *irb = isimable->GetRigidBody(); - if (irb == nullptr) return 0.0f; + if (!irb) return 0.0f; ICollisionBody *irbc; if (!isimable->QueryInterface(&irbc)) return 0.0f; @@ -456,10 +456,10 @@ static float AverageAir(ISimable *isimable, float fSeconds, float *pHighest, flo } } - if (pHighest != nullptr) { + if (pHighest) { *pHighest = fAirMax; } - if (pLongest != nullptr) { + if (pLongest) { *pLongest = fFuture; } @@ -468,7 +468,7 @@ static float AverageAir(ISimable *isimable, float fSeconds, float *pHighest, flo void CameraAI::MaybeKillJumpCam(unsigned int id) { Director *cd = FindDirector(id); - if (cd != nullptr) { + if (cd) { cd->EndJumping(); } } @@ -481,7 +481,7 @@ void CameraAI::Init() { void CameraAI::Shutdown() { #ifndef EA_PLATFORM_PLAYSTATION2 - if (TheAvoidables != nullptr) { + if (TheAvoidables) { delete TheAvoidables; } TheAvoidables = nullptr; @@ -489,7 +489,7 @@ void CameraAI::Shutdown() { Director::List copy(Director::GetList()); for (Director *const *iter = copy.begin(); iter != copy.end(); ++iter) { Director *cd = *iter; - if (cd != nullptr) { + if (cd) { delete cd; } } @@ -518,7 +518,7 @@ void CameraAI::StartCinematicSlowdown(EVIEW_ID viewID, float seconds) { Director *cd = *iter; if (cd->GetViewID() == viewID) { Action *action = cd->GetAction(); - if (action != nullptr && action->GetName() == Attrib::StringKey("DRIVE")) { + if (action && action->GetName() == Attrib::StringKey("DRIVE")) { cd->SetCinematicSlowdown(seconds); } } @@ -545,11 +545,11 @@ void CameraAI::MaybeDoPursuitCam(IVehicle *ivehicle) { return; } INIS *nis = UTL::Collections::Singleton::Get(); - if (nis != nullptr) { + if (nis) { return; } GRaceParameters *parms = GRaceStatus::Get().GetRaceParameters(); - if (parms != nullptr) { + if (parms) { if (parms->GetIsPursuitRace()) { return; } @@ -561,11 +561,11 @@ void CameraAI::MaybeDoPursuitCam(IVehicle *ivehicle) { return; } ISimable *isimable = ivehicle->GetSimable(); - if (isimable == nullptr) { + if (!isimable) { return; } Director *cd = FindDirector(isimable->GetWorldID()); - if (cd == nullptr) { + if (!cd) { return; } if (gGameBreakerCamera) { @@ -583,7 +583,7 @@ void CameraAI::MaybeDoJumpCam(ISimable *isimable) { if (!AreMomentCamerasEnabled()) { return; } - if (UTL::Collections::Singleton::Get() != nullptr) { + if (UTL::Collections::Singleton::Get()) { return; } IVehicle *ivehicle; @@ -593,7 +593,7 @@ void CameraAI::MaybeDoJumpCam(ISimable *isimable) { } } Director *cd = FindDirector(isimable->GetWorldID()); - if (cd == nullptr) { + if (!cd) { return; } if (cd->IsJumping()) { @@ -614,7 +614,7 @@ void CameraAI::MaybeDoJumpCam(ISimable *isimable) { reinterpret_cast( &bConvertFromBond(position, isimable->GetPosition())), TRACK_PATH_ZONE_JUMP_CAM, nullptr); - if (zone != nullptr) { + if (zone) { set = 1; } float highest = 0.0f; @@ -641,9 +641,9 @@ void CameraAI::MaybeDoJumpCam(ISimable *isimable) { } if (avg > 1.0f) { SoundAI *ai = UTL::Collections::Singleton::Get(); - if (ai != nullptr) { + if (ai) { Observer *observer = ai->GetObserver(); - if (observer != nullptr) { + if (observer) { observer->NotifyAirborne(highest, longest); } } diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 6b23b7ca8..86b932a29 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -242,7 +242,7 @@ void CameraAnchor::SetModel(int model) { CarTypeInfo *info = GetCarTypeInfoFromHash(model); const char *name; - if (info != nullptr) { + if (info) { name = info->CarTypeName; } else { name = ""; @@ -287,7 +287,7 @@ POV *CameraAnchor::GetPov(int pov_type) { { const Attrib::RefSpec *refspec = reinterpret_cast(mModelAttributes.GetAttributePointer(attrib_key, 0)); - if (refspec == nullptr) { + if (!refspec) { refspec = reinterpret_cast(Attrib::DefaultDataArea(sizeof(Attrib::RefSpec))); } @@ -355,7 +355,7 @@ void RenderCameraMovers(eView *view) { if (!no_camera_mover) { camera_mover = head; } - if (camera_mover != nullptr) { + if (camera_mover) { camera_mover = nullptr; if (!no_camera_mover) { camera_mover = head; @@ -371,7 +371,7 @@ void CameraMoverRestartRace() { for (int view_id = 1; view_id < 4; view_id++) { eView *view = eGetView(view_id, false); - if (view == nullptr) { + if (!view) { continue; } @@ -384,9 +384,9 @@ void CameraMoverRestartRace() { Camera *GetCurrentCamera() { eView *view = eGetView(1, false); - if (view != nullptr) { + if (view) { Camera *c = view->GetCamera(); - if (c != nullptr) { + if (c) { return c; } } @@ -401,7 +401,7 @@ void UpdateCameraMovers(float dT) { eView *view = eGetView(view_id, false); CameraMover *m = view->GetCameraMover(); - if (m != nullptr) { + if (m) { m->Update(dT); } } @@ -415,14 +415,14 @@ void UpdateCameraMovers(float dT) { eView *view = eGetView(1, false); Camera *camera = view->GetCamera(); - if (JR2ServerExists != 0 && camera != nullptr) { + if (JR2ServerExists != 0 && camera) { if (bAbs(RealTime - LastUpdateTimeJR2) > 0x10) { LastUpdateTimeJR2 = RealTime; camera->CommunicateWithJollyRancher(const_cast("Player1Camera")); } } - if (RemoteCaffeinating != 0 && DisableCommunication == 0 && camera != nullptr) { + if (RemoteCaffeinating != 0 && DisableCommunication == 0 && camera) { if (bAbs(RealTime - LastUpdateTimeCaffeine) > 0x10) { LongVector fix_eye; LongVector fix_look; @@ -461,7 +461,7 @@ void UpdateCameraMovers(float dT) { if (view->Active != 0) { CameraMover *camera_mover = view->GetCameraMover(); - if (camera_mover != nullptr) { + if (camera_mover) { if (!set_any_positions) { TheTrackStreamer.ClearStreamingPositions(); set_any_positions = true; @@ -477,7 +477,7 @@ void UpdateCameraMovers(float dT) { if (bStreamingPositionFromICE != 0) { INIS *nis = INIS::Get(); - if (nis != nullptr) { + if (nis) { bConvertFromBond(pos, reinterpret_cast(*nis->GetStartLocation())); } @@ -767,7 +767,7 @@ void CameraMover::ChopperNoise(bMatrix4 *world_to_camera, float f_scale, bool us } void CameraMover::TerrainVelocityNoise(bMatrix4 *world_to_camera, CameraAnchor *p_car, float f_speed_scale, float f_terrain_scale) { - if (p_car == nullptr) { + if (!p_car) { return; } @@ -1140,7 +1140,7 @@ void CameraMover::EyeCubicInit(tCubic3D *pEye, bMatrix4 *pMatrix, bVector3 *pVel bVector3 vEye; bScaleAdd(&vEye, pCamera->GetPosition(), pCamera->GetVelocityPosition(), 1.0f / 30.0f); - if (pMatrix != nullptr) { + if (pMatrix) { bMulMatrix(&vEye, pMatrix, &vEye); } @@ -1148,7 +1148,7 @@ void CameraMover::EyeCubicInit(tCubic3D *pEye, bMatrix4 *pMatrix, bVector3 *pVel bVector3 vEyeRel(*pCamera->GetVelocityPosition()); - if (pVelocity != nullptr) { + if (pVelocity) { bSub(&vEyeRel, &vEyeRel, pVelocity); } @@ -1156,7 +1156,7 @@ void CameraMover::EyeCubicInit(tCubic3D *pEye, bMatrix4 *pMatrix, bVector3 *pVel bScale(reinterpret_cast(&vEyeVel), &vEyeRel, pEye->x.duration); vEyeVel.w = 0.0f; - if (pMatrix != nullptr) { + if (pMatrix) { bMulMatrix(&vEyeVel, pMatrix, &vEyeVel); } @@ -1167,7 +1167,7 @@ void CameraMover::LookCubicInit(tCubic3D *pLook, bMatrix4 *pMatrix, bVector3 *pV bVector3 vLook; bScaleAdd(&vLook, pCamera->GetTarget(), pCamera->GetVelocityTarget(), 1.0f / 30.0f); - if (pMatrix != nullptr) { + if (pMatrix) { bMulMatrix(&vLook, pMatrix, &vLook); } @@ -1175,7 +1175,7 @@ void CameraMover::LookCubicInit(tCubic3D *pLook, bMatrix4 *pMatrix, bVector3 *pV bVector3 vLookRel(*pCamera->GetVelocityTarget()); - if (pVelocity != nullptr) { + if (pVelocity) { bSub(&vLookRel, &vLookRel, pVelocity); } @@ -1183,7 +1183,7 @@ void CameraMover::LookCubicInit(tCubic3D *pLook, bMatrix4 *pMatrix, bVector3 *pV bScale(reinterpret_cast(&vLookVel), &vLookRel, pLook->x.duration); vLookVel.w = 0.0f; - if (pMatrix != nullptr) { + if (pMatrix) { bMulMatrix(&vLookVel, pMatrix, &vLookVel); } @@ -1248,7 +1248,7 @@ bool CubicCameraMover::IsHoodCamera() { } void CubicCameraMover::SetForward(POV *pov, bool bSnap) { - if (pov != nullptr && OutsidePovType(pov->Type)) { + if (pov && OutsidePovType(pov->Type)) { if (!bSnap && HighliteMode()) { return; } @@ -1277,7 +1277,7 @@ void CubicCameraMover::SetForward(POV *pov, bool bSnap) { return; } } else { - if (pCar == nullptr) { + if (!pCar) { return; } pForward->SetValDesired(pCar->GetForwardVector()); @@ -1384,7 +1384,7 @@ Bezier::Bezier() } void Bezier::GetPoint(bVector3 *pPoint, float parameter) { - if (pControlPoints != nullptr) { + if (pControlPoints) { bVector4 basis; bVector4 v; float t = 1.0f - parameter; @@ -1542,7 +1542,7 @@ TrackCopCameraMover::~TrackCopCameraMover() { } void TrackCopCameraMover::Update(float dT) { - if (FEManager::Get() == nullptr || !FEManager::ShouldPauseSimulation(true)) { + if (!FEManager::Get() || !FEManager::ShouldPauseSimulation(true)) { bVector3 world_up(0.0f, 0.0f, 1.0f); bVector3 eye; bVector3 look; @@ -1620,7 +1620,7 @@ CameraAnchor *TrackCarCameraMover::GetAnchor() { bVector3 *TrackCarCameraMover::GetTarget() { CameraAnchor *car = CarToFollow; - if (car != nullptr) { + if (car) { return car->GetGeomPos(); } return GetCamera()->GetTarget(); @@ -1636,7 +1636,7 @@ bool TrackCopCameraMover::RenderCarPOV() { bVector3 *TrackCopCameraMover::GetTarget() { CameraAnchor *car = CarToFollow; - if (car != nullptr) { + if (car) { return car->GetGeomPos(); } return GetCamera()->GetTarget(); diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp index ee194a188..3b4e8a978 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEManager.cpp @@ -324,7 +324,7 @@ ICEShakeTrack *ICEManager::GetShakeTrack(unsigned int shake_type) { } int ICEManager::GetCameraIndex(float f_param, ICETrack *track) { - if (track != nullptr) { + if (track) { return track->GetKeyNumber(f_param); } @@ -385,7 +385,7 @@ int ICEManager::GetNumSceneCameraTrack(unsigned int scene_hash) { int available_tracks = 0; ICEGroup *group = GetNisCameraGroup(scene_hash); - if (group != nullptr) { + if (group) { available_tracks = group->NumTracks; } @@ -1031,7 +1031,7 @@ ICEScene *FindAnimScene() { unsigned int GetSceneCount() { unsigned int sceneCount = 0; - if (TheAnimDirectory != nullptr) { + if (TheAnimDirectory) { sceneCount = TheAnimDirectory->GetSceneCount(); } return sceneCount; diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp index e8967d98f..121039e7b 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEMover.cpp @@ -876,7 +876,7 @@ void ICEMover::Update(float dT) { } bLerpLag = false; - if (p_track != nullptr) { + if (p_track) { bLerpLag = (p_track->GetContext() == 3); if (p_track->GetContext() != 2) { bMirrorICEData = false; @@ -898,7 +898,7 @@ void ICEMover::Update(float dT) { } float f_route_param; - if (p_track != nullptr) { + if (p_track) { f_route_param = p_track->GetParameter(); } else { f_route_param = TheICEManager.GetParameter(); @@ -1069,7 +1069,7 @@ void ICEMover::Update(float dT) { GetCamera()->SetNoiseFrequency2(0.0f, 0.0f, 0.0f, 0.0f); float routeLen; - if (p_track != nullptr) { + if (p_track) { routeLen = p_track->GetLength(); } else { routeLen = TheICEManager.GetParameterLength(); @@ -1081,7 +1081,7 @@ void ICEMover::Update(float dT) { ICEShakeTrack *shake_track = TheICEManager.GetShakeTrack(pICEData->nShakeType); if (shake_track != 0) { float routeLen; - if (p_track != nullptr) { + if (p_track) { routeLen = p_track->GetLength(); } else { routeLen = TheICEManager.GetParameterLength(); @@ -1138,7 +1138,7 @@ void ICEMover::Update(float dT) { } } - if (p_track == nullptr || p_track->GetContext() != 2) { + if (!p_track || p_track->GetContext() != 2) { bool constrain_to_topology = false; if (pICEData != 0 && pICEData->bConstrainToWorld != 0) { constrain_to_topology = (n_state < 9); diff --git a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp index c820e7961..81b4c165a 100644 --- a/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp +++ b/src/Speed/Indep/Src/Camera/ICE/ICEReplay.cpp @@ -193,7 +193,7 @@ bool CameraCutIsGood(ICEData *camera, float param, ICEAnchor *p_car) { bool is_it_good = false; char sStat[5] = "...."; - if (old_cam == nullptr) { + if (!old_cam) { return is_it_good; } diff --git a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp index 5e5725922..8818409cd 100644 --- a/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/Cubic.cpp @@ -180,7 +180,7 @@ bool CubicCameraMover::IsUnderVehicle() { } ISimable *isimable = ivehicle->GetSimable(); - if (isimable == nullptr) { + if (!isimable) { continue; } @@ -189,7 +189,7 @@ bool CubicCameraMover::IsUnderVehicle() { } IRigidBody *irb = isimable->GetRigidBody(); - if (irb == nullptr) { + if (!irb) { continue; } diff --git a/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp b/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp index fa4ef30e7..94b299724 100644 --- a/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/DebugWorld.cpp @@ -47,9 +47,9 @@ DebugWorldCameraMover::DebugWorldCameraMover(int view_id, const bVector3 *start_ } DebugWorldCameraMover::~DebugWorldCameraMover() { - if (mActionQ != nullptr) { + if (mActionQ) { GetCamera()->SetNearZ(PrevNearZ); - if (mActionQ != nullptr) { + if (mActionQ) { delete mActionQ; } mActionQ = nullptr; @@ -57,7 +57,7 @@ DebugWorldCameraMover::~DebugWorldCameraMover() { } void DebugWorldCameraMover::JoyHandler() { - if (mActionQ == nullptr) { + if (!mActionQ) { return; } @@ -122,9 +122,9 @@ void DebugWorldCameraMover::JoyHandler() { eUnSwizzleWorldVector(*GetPosition(), simpos); { IPlayer *player = IPlayer::First(PLAYER_LOCAL); - if (player != nullptr) { + if (player) { ISimable *sim = player->GetSimable(); - if (sim != nullptr) { + if (sim) { WCollisionMgr(0, 3).GetWorldHeightAtPoint( reinterpret_cast(simpos), simpos.y, nullptr); simpos.y += 3.0f; diff --git a/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp b/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp index 9c06cfbb6..724779622 100644 --- a/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/TrackCar.cpp @@ -17,7 +17,7 @@ static bool IsAnyCopNear(CameraAnchor *pCar) { while (iter != IVehicle::GetList(VEHICLE_AICOPS).end()) { IVehicle *p_car = *iter; - if (p_car != nullptr && p_car->IsActive()) { + if (p_car && p_car->IsActive()) { UVector3 ucoppos(p_car->GetPosition()); bVector3 coppos; bVector3 copdir; @@ -43,9 +43,9 @@ static bool IsBeingPursued(int nView) { IPlayer *ip = *iter; if (ip->GetControllerPort() == nView) { ISimable *simable = ip->GetSimable(); - if (simable != nullptr) { + if (simable) { simable->QueryInterface(&iperp); - if (iperp != nullptr) { + if (iperp) { if (!iperp->IsBeingPursued()) { return false; } diff --git a/src/Speed/Indep/Src/Camera/Movers/TrackCop.cpp b/src/Speed/Indep/Src/Camera/Movers/TrackCop.cpp index d7609f888..8b3d06a87 100644 --- a/src/Speed/Indep/Src/Camera/Movers/TrackCop.cpp +++ b/src/Speed/Indep/Src/Camera/Movers/TrackCop.cpp @@ -16,7 +16,7 @@ bool TrackCopCameraMover::FindPursuitVehiclePosition(bVector3 *copPos) { for (IVehicle *const *iter = IVehicle::GetList(VEHICLE_AICOPS).begin(); iter != IVehicle::GetList(VEHICLE_AICOPS).end(); ++iter) { IVehicle *p_car = *iter; - if (p_car == nullptr) continue; + if (!p_car) continue; if (!p_car->IsActive()) continue; if (!(p_car->GetVehicleClass() == VehicleClass::CAR)) continue; @@ -24,11 +24,11 @@ bool TrackCopCameraMover::FindPursuitVehiclePosition(bVector3 *copPos) { if (!p_car->QueryInterface(&p_vehicleai)) continue; AITarget *p_target = p_vehicleai->GetTarget(); - if (p_target == nullptr) continue; + if (!p_target) continue; if (!p_target->IsValid()) continue; ISimable *p_targetsimable = p_target->GetSimable(); - if (p_targetsimable == nullptr) continue; + if (!p_targetsimable) continue; if (p_targetsimable->GetWorldID() != CarToFollow->GetWorldID()) continue; IPursuitAI *p_pursuitai; From 1e13ad74d240c0e4e3efba46379e1704b4f288e9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 15:20:30 +0100 Subject: [PATCH 191/691] tools: document match-safe null sweeps Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/code_style/SKILL.md | 1 + AGENTS.md | 1 + tools/code_style.py | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/skills/code_style/SKILL.md b/.github/skills/code_style/SKILL.md index d5ec45a39..950d7c6ee 100644 --- a/.github/skills/code_style/SKILL.md +++ b/.github/skills/code_style/SKILL.md @@ -93,6 +93,7 @@ Foo::Foo() - Spell casts without spaces inside the angle brackets: `static_cast(expr)`, not `static_cast< Type * >(expr)`. - Use `nullptr` exclusively for null pointers. - Prefer `if (ptr)` / `if (!ptr)` over explicit null comparisons when the change is local and verified safe. +- When a match-sensitive TU has many explicit `nullptr` checks and you decide to normalize them, prefer one mechanical full-TU pass over piecemeal cleanup. Rebuild the unit and re-check its status before keeping the rewrite. - Inline assembly is acceptable when it is needed to preserve dead-code compares, ordering, or other compiler behavior that source alone cannot reproduce. ### Forward declarations and local prototypes diff --git a/AGENTS.md b/AGENTS.md index 1b1f23030..aca27f4b6 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -285,6 +285,7 @@ This is a **C++98** codebase compiled with ProDG GC 3.9.3 (GCC 2.95 under the ho - Follow DWARF member naming exactly (`mMember` vs `m_member`) instead of normalizing names - Omit the `this` pointer. - Use `nullptr` and `override`. If they are missing, you need to include `types.h`. +- Prefer `if (ptr)` / `if (!ptr)` over explicit `nullptr` comparisons. In match-sensitive translation units, if you choose to normalize many of them, do it as one mechanical TU-wide pass and then rebuild / re-check that unit instead of assuming a piecemeal cleanup is free. - Omit `struct` when declaring variables or parameters, we are not in C land. - Avoid using `using` directives at all cost. Since the game uses jumbo builds, they leak through files. diff --git a/tools/code_style.py b/tools/code_style.py index 1f14f7c72..a1a8f83fa 100644 --- a/tools/code_style.py +++ b/tools/code_style.py @@ -585,7 +585,7 @@ def audit_match_sensitive_cpp( path, idx, "INFO", - "pointer-null comparison is a candidate for `if (ptr)` cleanup, but verify the affected TU first", + "pointer-null comparison is a candidate for `if (ptr)` cleanup; in match-sensitive code, prefer a mechanical full-TU pass and then rebuild/status-check that unit", ) ) return findings From 4453407039a188cf62d4ee3677b0641f340eab85 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 13:30:30 +0100 Subject: [PATCH 192/691] tools: add style guidance and accuracy audits Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .clang-format | 1 + .github/skills/code_style/SKILL.md | 171 +++++ .github/skills/implement/SKILL.md | 9 + .github/skills/scaffold/SKILL.md | 16 + AGENTS.md | 24 +- README.md | 50 ++ tools/_common.py | 15 +- tools/code_style.py | 965 +++++++++++++++++++++++++++++ tools/decomp-context.py | 23 +- tools/decomp-diff.py | 20 +- tools/decomp-workflow.py | 26 + 11 files changed, 1310 insertions(+), 10 deletions(-) create mode 100644 .github/skills/code_style/SKILL.md create mode 100644 tools/code_style.py diff --git a/.clang-format b/.clang-format index 29b540ad4..bf931d0ec 100644 --- a/.clang-format +++ b/.clang-format @@ -3,3 +3,4 @@ ColumnLimit: 150 AllowShortFunctionsOnASingleLine: Empty IndentWidth: 4 IndentCaseLabels: true +SortIncludes: Never diff --git a/.github/skills/code_style/SKILL.md b/.github/skills/code_style/SKILL.md new file mode 100644 index 000000000..5aafbce35 --- /dev/null +++ b/.github/skills/code_style/SKILL.md @@ -0,0 +1,171 @@ +--- +name: code-style +description: Repo-specific code style and match-safe cleanup guidance for code-writing tasks. +--- + +# Code Style Workflow + +Use this skill when writing new code, polishing code you already touched, or doing a style review of a branch. + +This skill is about **code style only**: formatting, declaration placement, header layout, local readability, and repo-specific conventions. It is **not** a PR-response workflow and it is **not** a license to do broad cleanup sweeps. + +It also tracks the repo's written `STYLE_GUIDE.md` rules where they fit the decomp workflow. + +## Core Principle + +In this repo, style cleanup must preserve decomp progress. + +- In match-sensitive code, prefer the smallest local cleanup that keeps the code readable. +- If a style tweak changes codegen or match status, revert it. +- Extend this skill only from patterns you actually verified in the repo. + +## Quick Tooling + +Use the repo-local helper before doing a style pass: + +```sh +python tools/code_style.py audit --base origin/main +``` + +- `audit` classifies changed files into safe vs match-sensitive buckets and reports repo-specific findings. +- `audit` also checks touched `class` / `struct` declarations against known header declarations and, when no header exists, against the PS2 visibility rule. +- `audit` warns on touched local forward declarations when the repo already has a header for that type. +- `audit` warns on touched type members that look like invented padding or placeholder names such as `pad`, `unk`, or `field_1234`. +- `audit` also checks touched style-guide rules that clang-format cannot enforce for you, such as cast spacing, `using namespace`, `NULL`, and missing `EA_PRAGMA_ONCE_SUPPORTED` guard blocks when a header's guard region is touched. +- `audit` groups repeated findings by file so branch-wide output stays readable. +- Use `audit --category safe-cpp` for frontend/support cleanup passes and `audit --category match-sensitive-cpp` when you want a conservative review queue for decomp code. +- `format --check` is an opt-in wrapper around the repo's `.clang-format`, but it only targets safe C/C++ files by default. +- Use `format --check --base origin/main --category safe-cpp` when you want a branch-level formatter probe instead of spelling every file path out. +- `format --check` labels whitespace-only formatter output separately from more invasive changes such as include reordering. +- `format` never targets `SourceLists/z*.cpp`; those files stay audit-only even when you opt into risky formatting. +- `format` skips files that use initializer-list guard comments (`//`) unless you explicitly override that, because clang-format fights this repo-specific convention. +- `clang-format` itself is optional. If it is not on `PATH`, install it locally or point the helper at it with `CLANG_FORMAT=/path/to/clang-format`. +- Do not pass `--include-match-sensitive` unless you are deliberately taking on verification work afterwards. + +## Phase 1: Classify the File Before Cleaning + +Decide which bucket the file belongs to: + +### 1a. Match-sensitive decomp code + +Examples: + +- gameplay / camera / physics / world translation-unit source +- utility headers and templates included by matched code +- headers with layout-sensitive inlines or emitted virtual methods + +For these files, style cleanup must be conservative and verified. + +### 1b. Safer support / frontend / tooling code + +Examples: + +- frontend interface shims +- scripts, tooling, and agent docs +- non-match-critical glue code + +These files can take normal readability cleanup, but still follow repo conventions. + +## Phase 2: Apply Repo-Specific Style Rules + +### Jumbo source-list files + +- Keep deliberate blank lines between `#include` entries when they help prevent clang-format from collapsing or reshuffling the jumbo list. +- Do not leave stray helper declarations in a `SourceLists/z*.cpp` file when they really belong near a use site in the underlying implementation file. + +### Constructors and initializer lists + +- Preserve the repo's multiline initializer-list style. +- Keep the trailing `//` markers on each initializer line except the last when that pattern is already being used to keep clang-format from collapsing the list. + +Example: + +```cpp +Foo::Foo() + : a(0), // + b(1), // + c(2) {} +``` + +### Casts, nulls, and low-level code + +- Use C++ casts instead of C-style casts. +- Spell casts without spaces inside the angle brackets: `static_cast(expr)`, not `static_cast< Type * >(expr)`. +- Use `nullptr` exclusively for null pointers. +- Prefer `if (ptr)` / `if (!ptr)` over explicit null comparisons when the change is local and verified safe. +- Inline assembly is acceptable when it is needed to preserve dead-code compares, ordering, or other compiler behavior that source alone cannot reproduce. + +### Forward declarations and local prototypes + +- Prefer including the owning repo header over adding a local forward declaration for a project type. +- If the repo already has a header declaration/definition for a type, include that header instead of redeclaring the type locally. +- Only keep a local forward declaration when no canonical repo header exists yet and you have verified that the ownership is still unresolved. +- Prefer moving helper template declarations next to their real use site instead of leaving them in an unrelated file. + +### Pointer style + +- Prefer `Type *name` over `Type* name`. +- Do not do broad pointer-style sweeps in match-sensitive files; change a small batch and verify the affected unit. + +### Header layout and data carriers + +- Use the repo's header guard form when writing headers: `#ifndef` / `#define` plus the `#ifdef EA_PRAGMA_ONCE_SUPPORTED` / `#pragma once` block. +- Keep member layout comments aligned and intact in decomp headers. +- Preserve the original `class` / `struct` kind from existing headers or Dwarf / PS2 evidence; do not treat it as a cosmetic style choice. +- Treat header declarations as the repo source of truth. If the repo only has local `.cpp` partial declarations, verify the kind with the PS2 dump instead of copying them blindly. +- Even forward declarations and local partial declarations should use the accurate keyword when known. +- Preserve the member naming style that DWARF shows. Some types use `mMember`, others use `m_member`; do not normalize them. +- Preserve recovered member names, types, order, and offset comments. Do not invent placeholder members named `pad`, `unk`, `unknown`, or `field_XXXX` for game code just to make a layout compile. +- If a member is genuinely unknown, stop and verify it with `find-symbol.py`, GC Dwarf, and PS2 data. If the layout is still incomplete, add a short TODO above the type instead of burying uncertainty in fake member names. +- Add offset / size comments when you are writing recovered type layouts from DWARF. +- Define inline member functions in headers only when DWARF shows that they are genuinely inlined in the binary. +- Use `struct` for POD-like data carriers with public fields; use `class` for behavior-heavy types only when that matches the recovered type information. +- Keep tiny placeholder methods as concise inline bodies when that is already the local pattern. + +### Namespaces and container aliases + +- Do not add `using` directives. +- Keep namespace-qualified types explicit at point of use. +- When introducing `UTL::Std::list` / `UTL::Std::vector` aliases that rely on a `_type_` helper, pair them with `DECLARE_CONTAINER_TYPE`. + +### Dense local code + +- Expand dense one-line helper structs, declaration blocks, and function bodies in non-match-sensitive files into normal multiline formatting. +- Prefer readable blocks over stacked one-line statements when behavior does not depend on exact source shape. + +### Uncertain ownership + +- If a declaration or global clearly compiles but its original home is uncertain, add a short TODO comment instead of inventing structure you cannot justify yet. +- When ownership matters, verify it with `decomp-workflow.py`, `decomp-context.py`, and `line-lookup` before moving code. + +## Phase 3: Things Not To "Clean Up" Blindly + +- Do not move an inline method out of a header just because it looks cleaner. +- Do not broad-format utility templates or virtual interfaces without checking who includes them. +- Do not rewrite expression structure in a near-matching function just to satisfy a style preference. +- Do not replace repo-specific formatting conventions with generic modern C++ preferences. + +## Phase 4: Verify Risky Style Changes + +For match-sensitive translation units: + +```sh +python tools/decomp-workflow.py build -u main/Path/To/TU +python tools/decomp-status.py --unit main/Path/To/TU +``` + +For safer but still compiled code: + +```sh +python tools/decomp-workflow.py build -u main/Path/To/OtherTU +``` + +Keep the cleanup only if the build succeeds and the relevant match status is unchanged. + +## Branch Patterns Confirmed So Far + +- Blank-line spacing in jumbo source-list include blocks is intentional and worth preserving. +- Helper template declarations should live near the file that actually uses them, not in the jumbo source-list file. +- The trailing `//` initializer-list markers are an intentional repo convention, not noise to remove. +- Small `if (ptr)` cleanup batches can be kept in match-sensitive code, but only after rebuilding the affected unit. +- Dense frontend shim files benefit from multiline struct/prototype/function formatting. diff --git a/.github/skills/implement/SKILL.md b/.github/skills/implement/SKILL.md index a81bb47c1..95ad95016 100644 --- a/.github/skills/implement/SKILL.md +++ b/.github/skills/implement/SKILL.md @@ -24,6 +24,11 @@ functions unless the user explicitly wants a cleanup/refiner pass. Use the wrapper flow first throughout this skill. Drop to raw `decomp-context.py` or `decomp-diff.py` only when the wrapper is missing a specific flag or you are debugging. +Before doing any local readability/style cleanup in code you are editing, consult +`.github/skills/code_style/SKILL.md`. Follow it for formatting, declaration placement, +pointer-style cleanup, and match-safe polish. Do not trade away match behavior for a +style preference. + ### 1a. decomp-context.py Preferred shortcut: @@ -70,6 +75,10 @@ Reference the skill for the usage. It gives info based on the virtual address of - Read the headers for class layout, member types, field offsets and the source files for existing implementations and includes (both are in `src/.../*.cpp`). - Check parent class headers for inherited members/methods used in the function +- Before adding any new declaration, partial declaration, or forward declaration, check whether the type already exists with `python tools/find-symbol.py `. +- If a repo header already exists for the type, include that header instead of introducing a local forward declaration. +- Preserve the original `class` vs `struct` kind. If the existing header is missing or incomplete, verify the type kind from GC Dwarf and PS2 info before writing a local declaration. +- Preserve real member names and field types too. Do not introduce `pad`, `unk`, or `field_XXXX` members as placeholders for guessed layout; verify the member list from GC Dwarf / PS2 data and leave a TODO when something is still uncertain. ### 1e. Assembly reference diff --git a/.github/skills/scaffold/SKILL.md b/.github/skills/scaffold/SKILL.md index 76abd7925..a2f062f50 100644 --- a/.github/skills/scaffold/SKILL.md +++ b/.github/skills/scaffold/SKILL.md @@ -31,6 +31,22 @@ Collect data from **all** of these sources in parallel where possible: Copy and cleanup the header that you got from running the `lookup` skill using the `symbols/Dwarf` folder. Fix visibility, function order and vtable related things based on using `lookup` on the PS2 types. +For formatting and local cleanup while writing the header, consult +`.github/skills/code_style/SKILL.md`. Use it for member-comment alignment, declaration +grouping, TODO placement, and other repo-specific style decisions. + +Preserve the real `class` / `struct` kind while scaffolding. Check existing headers first, +then use Dwarf plus PS2 visibility / vtable info to decide the type kind. Even temporary +forward declarations should match the known original kind. + +If the repo already has a header for a type you need, include that header instead of +adding a new local forward declaration. Only forward-declare when no canonical repo header +exists yet and you have verified that the ownership is still unresolved. + +Preserve real member names, types, order, and offset comments while scaffolding. Do not +fill gaps with invented `pad`, `unk`, or `field_XXXX` members for game types; verify the +layout from Dwarf / PS2 data and leave a TODO over the type if a field is still uncertain. + Only create headers if it's really necessary (the struct doesn't have inlines so you can't determine in which header file it goes and it's thematically very different from the other structs that use it), otherwise put it into the one you determined to be correct. The dwarf often has duplicated inlines, clean those up according to the order in the PS2 info. diff --git a/AGENTS.md b/AGENTS.md index b95d62190..0c400cca5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -83,6 +83,17 @@ originates from, use this script against the compiler-generated debug line mappi See `.github/skills/line_lookup/SKILL.md` for the full workflow. +### code-style — Repo-local style guidance + +When you are writing code, polishing code you already touched, or doing a style-review pass, +consult `.github/skills/code_style/SKILL.md` first. It captures repo-specific formatting and +cleanup rules, including jumbo include spacing, initializer-list comment markers, declaration +placement, pointer style, and how to keep style work safe in match-sensitive code. + +Use `python tools/code_style.py audit --base origin/main` before a branch-wide style pass. +It classifies changed files, reports repo-specific findings, and only treats safer C/C++ files +as clang-format candidates by default. + ### decomp-diff.py — Diff & symbol overview Overview mode lists all symbols in a translation unit with match status: @@ -92,10 +103,12 @@ python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim -s nonmatching -t function python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim -s missing -t function python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim --search RemoveIOWin +python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim -d FindIOWin --reloc-diffs all ``` Filters: `-t function,object` (type), `-s missing|matching|nonmatching|extra` (status), -`--section .text`, `--search ` (fuzzy name match). +`--section .text`, `--search ` (fuzzy name match), `--reloc-diffs none|name_address|data_value|all` +(surface relocation-only mismatches when needed; default: `none`). Diff mode shows side-by-side instruction comparison: @@ -262,9 +275,14 @@ This is a **C++98** codebase compiled with ProDG GC 3.9.3 (GCC 2.95 under the ho - No `auto`, range-for, `enum class`, lambdas, or any C++11+ - Enum values use prefix: `enum EFoo { kF_Value1, kF_Value2 }` (not `enum class`) -- Use C++ casts (`static_cast< T >(expr)`) instead of C-style casts -- Header guards: `#ifndef _CLASSNAME` / `#define _CLASSNAME` (not `#pragma once`) +- Use C++ casts (`static_cast(expr)`) instead of C-style casts +- Header guards should use `#ifndef` / `#define` together with the `EA_PRAGMA_ONCE_SUPPORTED` block when writing repo headers - Constructors use initializer list style with leading `, ` on each line, add empty comments at the end of these lines (except the last) to stop clang-format from putting them all on the same line +- Inline assembly is acceptable when needed to reproduce dead code or compiler scheduling that source alone cannot express cleanly +- Preserve the original `class` vs `struct` kind. Check existing headers first, then Dwarf / PS2 info when needed. Even forward declarations and local partial declarations should use the accurate keyword when known. +- Prefer including the real repo header over introducing a local forward declaration for a project type. If a type already has a header in `src/`, include it instead of redeclaring it locally. +- Preserve original member names, types, order, and proven layout comments. Do not invent `pad`, `unk`, or `field_XXXX` members just to satisfy a guessed size or offset; verify the real members with `find-symbol.py`, GC Dwarf, and PS2 data, and leave a short TODO if a layout detail is still uncertain. +- Follow DWARF member naming exactly (`mMember` vs `m_member`) instead of normalizing names - Omit the `this` pointer. - Use `nullptr` and `override`. If they are missing, you need to include `types.h`. - Omit `struct` when declaring variables or parameters, we are not in C land. diff --git a/README.md b/README.md index b10d186c0..e36bd8a4e 100644 --- a/README.md +++ b/README.md @@ -251,6 +251,56 @@ This file contains bChunk chunk IDs. Just tell your favourite clanker to reference `AGENTS.md` to decompile a translation unit of your choice, for example `main/Speed/Indep/SourceLists/zEAXSound`. +When introducing or forward-declaring a type, preserve the original `class` / `struct` +kind. Check existing headers first with `python tools/find-symbol.py `, then use +GC Dwarf and PS2 type info when the real declaration is missing or incomplete. + +Preserve real member names, types, order, and offset comments too. For recovered game +types, do not invent `pad`, `unk`, or `field_XXXX` members to force a guessed layout; use +the debug data and leave a short TODO when a field is still unresolved. + +If a project type already has a header in `src/`, include that header instead of adding a +local forward declaration. + +## Style tooling + +The repo ships with a decomp-aware style helper: + +```sh +python tools/code_style.py audit --base origin/main +``` + +Use `audit` to classify branch changes into safer vs match-sensitive buckets and to flag repo-specific issues such as jumbo include spacing, stray top-level declarations in `SourceLists` files, touched `class` / `struct` declarations that disagree with known headers or the PS2 visibility rule, touched project forward declarations that should be replaced by real includes, touched type members that look like invented padding or placeholder names, and touched style-guide issues that clang-format cannot fix for you (`using namespace`, `NULL`, bad cast spacing, or missing `EA_PRAGMA_ONCE_SUPPORTED` guard blocks). +Repeated findings are grouped by file so large branch audits stay readable. + +Useful focused passes: + +```sh +python tools/code_style.py audit --base origin/main --category safe-cpp +python tools/code_style.py audit --base origin/main --category match-sensitive-cpp +python tools/code_style.py format --check --base origin/main --category safe-cpp +``` + +If you have `clang-format` installed locally, you can also use: + +```sh +python tools/code_style.py format --check src/Speed/Indep/Src/Frontend/FEManager.cpp +``` + +The formatter wrapper only targets safer C/C++ files by default. It intentionally skips match-sensitive code unless you explicitly pass `--include-match-sensitive` and verify the affected unit afterwards. +`SourceLists/z*.cpp` files remain audit-only and are never formatter targets. +`format --check` now distinguishes whitespace-only formatter deltas from more invasive output such as include reordering. +Files that use the repo's initializer-list guard comments (`//`) are skipped by default because clang-format fights that convention; override only if you are deliberately inspecting that output. +For declaration-kind checks, header declarations are treated as the repo source of truth; otherwise the helper falls back to the PS2 dump rule (`public:` / `private:` / `protected:` means `class`, no visibility labels means `struct`). + +`clang-format` is optional. Recommended installs: + +- macOS: `brew install clang-format` +- Linux: `sudo apt install clang-format` +- Windows: `winget install LLVM.LLVM` + +If your binary lives outside `PATH`, set `CLANG_FORMAT` to the executable path before running `tools/code_style.py format`. + # Contributors Special thanks to [Brawltendo](https://github.com/Brawltendo) for helping with tooling and letting me use his partial decomp. diff --git a/tools/_common.py b/tools/_common.py index db992bd8b..d1b4f42a0 100644 --- a/tools/_common.py +++ b/tools/_common.py @@ -14,9 +14,8 @@ ROOT_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, "..")) BUILD_NINJA = os.path.join(ROOT_DIR, "build.ninja") OBJDIFF_JSON = os.path.join(ROOT_DIR, "objdiff.json") +RELOC_DIFF_CHOICES = ("none", "name_address", "data_value", "all") OBJDIFF_DEFAULT_CONFIG_ARGS = [ - "-c", - "functionRelocDiffs=none", "-c", "ppc.calculatePoolRelocations=false", ] @@ -55,6 +54,15 @@ def ensure_project_prereqs(require_build_ninja: bool = False) -> None: ensure_exists(BUILD_NINJA, "Run: python configure.py") +def build_objdiff_config_args(reloc_diffs: str = "none") -> List[str]: + if reloc_diffs not in RELOC_DIFF_CHOICES: + raise ToolError( + f"Invalid relocation diff mode: {reloc_diffs} " + f"(expected one of {', '.join(RELOC_DIFF_CHOICES)})" + ) + return ["-c", f"functionRelocDiffs={reloc_diffs}", *OBJDIFF_DEFAULT_CONFIG_ARGS] + + def load_json_file(path: str, description: str) -> Any: try: with open(path) as f: @@ -262,12 +270,13 @@ def run_objdiff_json( *, base_obj: Optional[str] = None, extra_args: Optional[Sequence[str]] = None, + reloc_diffs: str = "none", root_dir: str = ROOT_DIR, ) -> Dict[str, Any]: ensure_project_prereqs() cmd = [objdiff_cli, "diff"] - cmd.extend(OBJDIFF_DEFAULT_CONFIG_ARGS) + cmd.extend(build_objdiff_config_args(reloc_diffs)) if extra_args: cmd.extend(extra_args) cmd.extend(["-u", unit_name, "-o", "-", "--format", "json"]) diff --git a/tools/code_style.py b/tools/code_style.py new file mode 100644 index 000000000..1f14f7c72 --- /dev/null +++ b/tools/code_style.py @@ -0,0 +1,965 @@ +#!/usr/bin/env python3 +""" +Decomp-aware code style helper. + +Examples: + python tools/code_style.py audit --base origin/main + python tools/code_style.py classify src/Speed/Indep/Src/Frontend/FEManager.cpp + python tools/code_style.py format --check src/Speed/Indep/Src/Frontend/FEManager.cpp +""" + +import argparse +import os +import platform +import re +import shutil +import subprocess +import sys +from dataclasses import dataclass +from typing import Dict, Iterable, List, Optional, Sequence, Set + +script_dir = os.path.dirname(os.path.realpath(__file__)) +root_dir = os.path.abspath(os.path.join(script_dir, "..")) +src_dir = os.path.join(root_dir, "src") +ps2_types_path = os.path.join(root_dir, "symbols", "PS2", "PS2_types.nothpp") + +CPP_EXTS = {".c", ".cc", ".cpp", ".h", ".hh", ".hpp"} +HEADER_EXTS = {".h", ".hh", ".hpp"} + +SAFE_CPP_PREFIXES = ( + "src/Speed/Indep/Src/Frontend/", + "src/Speed/Indep/Src/FEng/", +) +DOC_PREFIXES = ( + ".github/skills/", + "docs/", +) +TOOL_PREFIXES = ( + "tools/", +) +JUMBO_PREFIX = "src/Speed/Indep/SourceLists/" +MATCH_SENSITIVE_PREFIXES = ( + "src/Speed/Indep/Libs/Support/Utility/", + "src/Speed/Indep/bWare/Inc/", + "src/Speed/Indep/Src/", +) +ROOT_FILES = { + "AGENTS.md", + "README.md", +} +CATEGORIES = ( + "docs", + "jumbo-source-list", + "match-sensitive-cpp", + "match-sensitive-other", + "other", + "safe-cpp", + "safe-other", + "tooling", +) + + +@dataclass +class Finding: + path: str + line: int + severity: str + message: str + + +DECL_PATTERN = re.compile( + r"^\s*(struct|class)\s+([A-Za-z_][A-Za-z0-9_]*)\b(?:\s*[:;{]|$)" +) +TYPE_BODY_START_PATTERN = re.compile(r"^\s*(struct|class)\s+([A-Za-z_][A-Za-z0-9_]*)\b.*\{") +FORWARD_DECL_PATTERN = re.compile(r"^\s*(struct|class)\s+([A-Za-z_][A-Za-z0-9_]*)\s*;\s*$") +VISIBILITY_PATTERN = re.compile(r"^\s*(public|private|protected)\s*:", re.MULTILINE) +ACCESS_SPECIFIER_PATTERN = re.compile(r"^\s*(public|private|protected)\s*:\s*$") +CAST_SPACING_PATTERN = re.compile( + r"\b(?:static_cast|reinterpret_cast|const_cast|dynamic_cast)\s*<\s+" + r"|" + r"\b(?:static_cast|reinterpret_cast|const_cast|dynamic_cast)\s*<[^>\n]*\s+>" +) +USING_NAMESPACE_PATTERN = re.compile(r"^\s*using\s+namespace\b") +NULL_PATTERN = re.compile(r"\bNULL\b") +HEADER_GUARD_IFNDEF_PATTERN = re.compile(r"^\s*#ifndef\s+[A-Za-z0-9_]+\s*$", re.MULTILINE) +HEADER_GUARD_DEFINE_PATTERN = re.compile(r"^\s*#define\s+[A-Za-z0-9_]+\s*$", re.MULTILINE) +EA_PRAGMA_BLOCK_PATTERN = re.compile( + r"^\s*#ifdef\s+EA_PRAGMA_ONCE_SUPPORTED\s*$" + r".*?^\s*#pragma\s+once\s*$" + r".*?^\s*#endif\s*$", + re.MULTILINE | re.DOTALL, +) +SUSPICIOUS_MEMBER_PATTERN = re.compile( + r"^(?:" + r"_?pad(?:ding)?[0-9A-Fa-f_]*" + r"|pad(?:byte|char)" + r"|unk(?:nown)?[0-9A-Fa-f_]*" + r"|unk_[A-Za-z0-9_]+" + r"|field_[0-9A-Fa-f]+" + r")$" +) + +_source_decl_cache: Optional[Dict[str, List[tuple]]] = None +_ps2_kind_cache: Dict[str, Optional[str]] = {} + + +def run_git(args: Sequence[str]) -> str: + result = subprocess.run( + ["git", *args], + cwd=root_dir, + capture_output=True, + text=True, + ) + if result.returncode != 0: + raise RuntimeError(result.stderr.strip() or "git command failed") + return result.stdout + + +def relpath(path: str) -> str: + abs_path = path if os.path.isabs(path) else os.path.join(root_dir, path) + return os.path.relpath(abs_path, root_dir).replace("\\", "/") + + +def path_category(path: str) -> str: + path = relpath(path) + ext = os.path.splitext(path)[1] + + if path in ROOT_FILES: + return "docs" + if any(path.startswith(prefix) for prefix in DOC_PREFIXES): + return "docs" + if any(path.startswith(prefix) for prefix in TOOL_PREFIXES): + return "tooling" + if path.startswith(JUMBO_PREFIX): + return "jumbo-source-list" + if any(path.startswith(prefix) for prefix in SAFE_CPP_PREFIXES): + return "safe-cpp" if ext in CPP_EXTS else "safe-other" + if any(path.startswith(prefix) for prefix in MATCH_SENSITIVE_PREFIXES): + return "match-sensitive-cpp" if ext in CPP_EXTS else "match-sensitive-other" + return "other" + + +def file_candidates_from_base(base: str, include_worktree: bool) -> List[str]: + files: Set[str] = set() + for line in run_git(["diff", "--name-only", f"{base}...HEAD"]).splitlines(): + if line.strip(): + files.add(line.strip()) + if include_worktree: + for line in run_git(["diff", "--name-only"]).splitlines(): + if line.strip(): + files.add(line.strip()) + return sorted(files) + + +def collect_touched_lines_from_diff(diff_text: str) -> Dict[str, Set[int]]: + touched: Dict[str, Set[int]] = {} + current_path: Optional[str] = None + + for line in diff_text.splitlines(): + if line.startswith("+++ b/"): + current_path = line[6:] + touched.setdefault(current_path, set()) + continue + + if not line.startswith("@@") or current_path is None: + continue + + match = re.search(r"\+(\d+)(?:,(\d+))?", line) + if match is None: + continue + + start = int(match.group(1)) + count = int(match.group(2) or "1") + if count == 0: + continue + + for line_no in range(start, start + count): + touched.setdefault(current_path, set()).add(line_no) + + return touched + + +def touched_lines_from_base(base: str, include_worktree: bool) -> Dict[str, Set[int]]: + touched = collect_touched_lines_from_diff( + run_git(["diff", "--unified=0", f"{base}...HEAD"]) + ) + if include_worktree: + worktree_touched = collect_touched_lines_from_diff( + run_git(["diff", "--unified=0"]) + ) + for path, lines in worktree_touched.items(): + touched.setdefault(path, set()).update(lines) + return touched + + +def read_text(path: str) -> str: + with open( + os.path.join(root_dir, relpath(path)), + encoding="utf-8", + errors="ignore", + ) as f: + return f.read() + + +def source_declaration_index() -> Dict[str, List[tuple]]: + global _source_decl_cache + if _source_decl_cache is not None: + return _source_decl_cache + + index: Dict[str, List[tuple]] = {} + for dirpath, _dirs, files in os.walk(src_dir): + for fname in files: + if os.path.splitext(fname)[1] not in CPP_EXTS: + continue + fpath = os.path.join(dirpath, fname) + rel = os.path.relpath(fpath, root_dir).replace("\\", "/") + try: + with open(fpath, encoding="utf-8", errors="ignore") as f: + for lineno, line in enumerate(f, 1): + match = DECL_PATTERN.match(line) + if match is None: + continue + kind = match.group(1) + name = match.group(2) + index.setdefault(name, []).append((kind, rel, lineno)) + except OSError: + continue + + _source_decl_cache = index + return index + + +def expected_kind_from_source(name: str, current_path: str, current_line: int) -> Optional[str]: + candidates = source_declaration_index().get(name, []) + filtered = [] + for kind, rel, lineno in candidates: + if rel == current_path and lineno == current_line: + continue + if os.path.splitext(rel)[1] not in {".h", ".hh", ".hpp"}: + continue + filtered.append(kind) + unique = sorted(set(filtered)) + if len(unique) == 1: + return unique[0] + return None + + +def header_declaration_paths(name: str, current_path: str, current_line: int) -> List[str]: + candidates = source_declaration_index().get(name, []) + headers = set() + for _kind, rel, lineno in candidates: + if rel == current_path and lineno == current_line: + continue + if os.path.splitext(rel)[1] not in {".h", ".hh", ".hpp"}: + continue + headers.add(rel) + return sorted(headers) + + +def expected_kind_from_ps2(name: str) -> Optional[str]: + cached = _ps2_kind_cache.get(name) + if cached is not None or name in _ps2_kind_cache: + return cached + + if not os.path.isfile(ps2_types_path): + _ps2_kind_cache[name] = None + return None + + result = subprocess.run( + ["python", "tools/lookup.py", "--file", ps2_types_path, "struct", name], + cwd=root_dir, + capture_output=True, + text=True, + ) + output = (result.stdout or result.stderr).strip() + if result.returncode != 0 or not output.startswith("struct "): + _ps2_kind_cache[name] = None + return None + + if VISIBILITY_PATTERN.search(output): + _ps2_kind_cache[name] = "class" + else: + _ps2_kind_cache[name] = "struct" + return _ps2_kind_cache[name] + + +def audit_type_kind_declarations( + path: str, text: str, touched_lines: Optional[Set[int]] +) -> List[Finding]: + findings: List[Finding] = [] + for idx, line in enumerate(text.splitlines(), 1): + if touched_lines is not None and idx not in touched_lines: + continue + match = DECL_PATTERN.match(line) + if match is None: + continue + + actual_kind = match.group(1) + name = match.group(2) + expected_kind = expected_kind_from_source(name, path, idx) + reason = "repo declaration" + if expected_kind is None: + expected_kind = expected_kind_from_ps2(name) + reason = "PS2 visibility rule" + if expected_kind is None or expected_kind == actual_kind: + continue + + findings.append( + Finding( + path, + idx, + "WARN", + f"`{actual_kind} {name}` disagrees with known type kind; use `{expected_kind} {name}` ({reason})", + ) + ) + return findings + + +def extract_member_name(line: str) -> Optional[str]: + code = line.split("//", 1)[0].strip() + if not code or code.startswith("#") or code.endswith(":"): + return None + if "(" in code or ")" in code: + return None + if any(code.startswith(prefix) for prefix in ("typedef ", "using ", "enum ", "union ", "class ", "struct ", "friend ")): + return None + + code = code.rstrip(";").strip() + if "," in code: + return None + if "=" in code: + code = code.split("=", 1)[0].rstrip() + + match = re.search( + r"([A-Za-z_][A-Za-z0-9_]*)\s*(?:\[[^\]]+\])?\s*(?::\s*\d+)?\s*$", + code, + ) + if match is None: + return None + return match.group(1) + + +def audit_placeholder_members( + path: str, text: str, touched_lines: Optional[Set[int]] +) -> List[Finding]: + findings: List[Finding] = [] + current_type: Optional[str] = None + pending_type: Optional[str] = None + brace_depth = 0 + + for idx, line in enumerate(text.splitlines(), 1): + stripped = line.strip() + + if current_type is None: + start_match = TYPE_BODY_START_PATTERN.match(line) + if start_match is not None: + current_type = start_match.group(2) + brace_depth = line.count("{") - line.count("}") + if brace_depth <= 0: + current_type = None + brace_depth = 0 + continue + + decl_match = DECL_PATTERN.match(line) + if decl_match is not None and "{" not in line and not stripped.endswith(";"): + pending_type = decl_match.group(2) + + if pending_type is not None and "{" in line: + current_type = pending_type + pending_type = None + brace_depth = line.count("{") - line.count("}") + if brace_depth <= 0: + current_type = None + brace_depth = 0 + continue + + if stripped.endswith(";"): + pending_type = None + continue + + if touched_lines is None or idx in touched_lines: + if not ACCESS_SPECIFIER_PATTERN.match(line): + member_name = extract_member_name(line) + if member_name is not None and SUSPICIOUS_MEMBER_PATTERN.match(member_name): + findings.append( + Finding( + path, + idx, + "WARN", + f"`{current_type}` member `{member_name}` looks like placeholder padding/unknown naming; verify the real member from Dwarf/PS2 instead of inventing pads", + ) + ) + + brace_depth += line.count("{") - line.count("}") + if brace_depth <= 0: + current_type = None + brace_depth = 0 + + return findings + + +def audit_forward_declarations( + path: str, text: str, touched_lines: Optional[Set[int]] +) -> List[Finding]: + findings: List[Finding] = [] + for idx, line in enumerate(text.splitlines(), 1): + if touched_lines is not None and idx not in touched_lines: + continue + match = FORWARD_DECL_PATTERN.match(line) + if match is None: + continue + + name = match.group(2) + headers = header_declaration_paths(name, path, idx) + if not headers: + continue + + sample = ", ".join(headers[:2]) + if len(headers) > 2: + sample += ", ..." + findings.append( + Finding( + path, + idx, + "WARN", + f"`{name}` is forward-declared even though repo headers exist; include {sample} instead of redeclaring", + ) + ) + return findings + + +def audit_style_guide_rules( + path: str, text: str, touched_lines: Optional[Set[int]] +) -> List[Finding]: + findings: List[Finding] = [] + ext = os.path.splitext(path)[1] + + for idx, line in enumerate(text.splitlines(), 1): + if touched_lines is not None and idx not in touched_lines: + continue + stripped = line.strip() + if stripped.startswith("//"): + continue + + if CAST_SPACING_PATTERN.search(line): + findings.append( + Finding( + path, + idx, + "WARN", + "C++ cast uses spaces inside `<...>`; prefer `static_cast(expr)` style", + ) + ) + if USING_NAMESPACE_PATTERN.search(line): + findings.append( + Finding( + path, + idx, + "WARN", + "`using namespace` is not allowed here; keep names fully qualified", + ) + ) + if NULL_PATTERN.search(line): + findings.append( + Finding( + path, + idx, + "WARN", + "use `nullptr` instead of `NULL`", + ) + ) + + if ext in HEADER_EXTS: + should_check_guard = touched_lines is None or any(line_no <= 8 for line_no in touched_lines) + if should_check_guard: + has_ifndef = HEADER_GUARD_IFNDEF_PATTERN.search(text) is not None + has_define = HEADER_GUARD_DEFINE_PATTERN.search(text) is not None + has_pragma_block = EA_PRAGMA_BLOCK_PATTERN.search(text) is not None + if not (has_ifndef and has_define and has_pragma_block): + findings.append( + Finding( + path, + 1, + "WARN", + "header guard should use `#ifndef` / `#define` plus the `EA_PRAGMA_ONCE_SUPPORTED` `#pragma once` block", + ) + ) + + return findings + + +def audit_source_list( + path: str, text: str, touched_lines: Optional[Set[int]] +) -> List[Finding]: + findings: List[Finding] = [] + lines = text.splitlines() + seen_include = False + prev_include_line = -1 + + for idx, line in enumerate(lines, 1): + stripped = line.strip() + if not seen_include: + if stripped.startswith("#include "): + seen_include = True + prev_include_line = idx + continue + + if stripped.startswith("#include "): + if idx == prev_include_line + 1 and ( + touched_lines is None + or idx in touched_lines + or prev_include_line in touched_lines + ): + findings.append( + Finding( + path, + idx, + "WARN", + "consecutive jumbo includes without a separating blank line", + ) + ) + prev_include_line = idx + continue + + if stripped == "": + continue + + if touched_lines is None or idx in touched_lines: + findings.append( + Finding( + path, + idx, + "INFO", + "top-level declaration/code in SourceLists file; keep only if placement is intentional", + ) + ) + break + + return findings + + +def audit_safe_cpp( + path: str, text: str, touched_lines: Optional[Set[int]] +) -> List[Finding]: + findings = audit_type_kind_declarations(path, text, touched_lines) + findings.extend(audit_forward_declarations(path, text, touched_lines)) + findings.extend(audit_placeholder_members(path, text, touched_lines)) + findings.extend(audit_style_guide_rules(path, text, touched_lines)) + pointer_pattern = re.compile( + r"\b[A-Za-z_][A-Za-z0-9_:<>]*\*\s*[A-Za-z_][A-Za-z0-9_]*" + ) + + for idx, line in enumerate(text.splitlines(), 1): + stripped = line.strip() + if stripped.startswith("//") or stripped.startswith("#"): + continue + if touched_lines is not None and idx not in touched_lines: + continue + if pointer_pattern.search(line): + findings.append( + Finding( + path, + idx, + "INFO", + "pointer declaration/prototype uses `Type* name`; repo style prefers `Type *name`", + ) + ) + return findings + + +def audit_match_sensitive_cpp( + path: str, text: str, touched_lines: Optional[Set[int]] +) -> List[Finding]: + findings = audit_type_kind_declarations(path, text, touched_lines) + findings.extend(audit_forward_declarations(path, text, touched_lines)) + findings.extend(audit_placeholder_members(path, text, touched_lines)) + findings.extend(audit_style_guide_rules(path, text, touched_lines)) + nullptr_pattern = re.compile(r"\bif\s*\([^)]*(?:==|!=)\s*nullptr") + + for idx, line in enumerate(text.splitlines(), 1): + if touched_lines is not None and idx not in touched_lines: + continue + if nullptr_pattern.search(line): + findings.append( + Finding( + path, + idx, + "INFO", + "pointer-null comparison is a candidate for `if (ptr)` cleanup, but verify the affected TU first", + ) + ) + return findings + + +def audit_path(path: str, touched_lines: Optional[Set[int]]) -> List[Finding]: + path = relpath(path) + abs_path = os.path.join(root_dir, path) + if not os.path.isfile(abs_path): + return [] + + category = path_category(path) + text = read_text(path) + + if category == "jumbo-source-list": + return audit_source_list(path, text, touched_lines) + if category == "safe-cpp": + return audit_safe_cpp(path, text, touched_lines) + if category == "match-sensitive-cpp": + return audit_match_sensitive_cpp(path, text, touched_lines) + return [] + + +def gather_paths(args: argparse.Namespace) -> List[str]: + if args.paths: + return [relpath(path) for path in args.paths] + return file_candidates_from_base(args.base, include_worktree=not args.no_worktree) + + +def filter_paths_by_category( + paths: Iterable[str], categories: Optional[Sequence[str]] +) -> List[str]: + if not categories: + return list(paths) + allowed = set(categories) + return [path for path in paths if path_category(path) in allowed] + + +def format_line_list(lines: Sequence[int], sample_limit: int) -> str: + sample = list(lines[:sample_limit]) + rendered = ", ".join(str(line) for line in sample) + if len(lines) > sample_limit: + rendered += ", ..." + return rendered + + +def strip_whitespace(text: str) -> str: + return re.sub(r"\s+", "", text) + + +def include_lines(text: str) -> List[str]: + return [line.strip() for line in text.splitlines() if line.strip().startswith("#include ")] + + +def has_initializer_guard_comments(text: str) -> bool: + guard_pattern = re.compile(r"^\s*(?::|,)\s+.*//\s*$", re.MULTILINE) + return guard_pattern.search(text) is not None + + +def format_change_summary(before: str, after: str) -> str: + reasons: List[str] = [] + if strip_whitespace(before) == strip_whitespace(after): + reasons.append("whitespace-only") + else: + reasons.append("non-whitespace token/order changes") + + before_includes = include_lines(before) + after_includes = include_lines(after) + if before_includes and before_includes != after_includes and sorted(before_includes) == sorted(after_includes): + reasons.append("reorders includes") + + if has_initializer_guard_comments(before): + reasons.append("initializer-list guard comments present") + + return ", ".join(reasons) + + +def command_classify(args: argparse.Namespace) -> int: + for path in filter_paths_by_category(gather_paths(args), args.category): + print(f"{path_category(path):<22} {path}") + return 0 + + +def command_audit(args: argparse.Namespace) -> int: + paths = filter_paths_by_category(gather_paths(args), args.category) + if not paths: + print("No files selected.") + return 0 + + touched_lines = None if args.paths else touched_lines_from_base( + args.base, include_worktree=not args.no_worktree + ) + + by_category = {} + findings: List[Finding] = [] + for path in paths: + by_category.setdefault(path_category(path), []).append(path) + findings.extend( + audit_path(path, None if touched_lines is None else touched_lines.get(path)) + ) + + print("File categories:") + for category in sorted(by_category): + print(f" {category}: {len(by_category[category])}") + print() + + safe_format_candidates = [ + path + for path in paths + if path_category(path) == "safe-cpp" and os.path.splitext(path)[1] in CPP_EXTS + ] + if safe_format_candidates: + print("Safe clang-format candidates:") + for path in safe_format_candidates: + print(f" {path}") + print() + + if not findings: + print("No style findings.") + return 0 + + print("Findings:") + findings = sorted(findings, key=lambda item: (item.path, item.line, item.message)) + if args.ungrouped: + shown = findings[: args.max_findings] + for finding in shown: + print( + f" {finding.severity:<4} {finding.path}:{finding.line}: {finding.message}" + ) + if len(findings) > len(shown): + print() + print(f" ... {len(findings) - len(shown)} more finding(s) omitted") + return 0 + + grouped: Dict[tuple, List[int]] = {} + for finding in findings: + grouped.setdefault( + (finding.severity, finding.path, finding.message), [] + ).append(finding.line) + + grouped_items = sorted(grouped.items(), key=lambda item: (item[0][1], item[1][0], item[0][2])) + shown = grouped_items[: args.max_findings] + for (severity, path, message), lines in shown: + print( + f" {severity:<4} {path}: {message} ({len(lines)} occurrence(s); lines {format_line_list(lines, args.sample_lines)})" + ) + if len(grouped_items) > len(shown): + print() + print(f" ... {len(grouped_items) - len(shown)} more grouped finding(s) omitted") + return 0 + + +def find_clang_format() -> str: + env_override = os.environ.get("CLANG_FORMAT") + if env_override: + if os.path.isfile(env_override) and os.access(env_override, os.X_OK): + return env_override + resolved = shutil.which(env_override) + if resolved is not None: + return resolved + raise RuntimeError( + f"CLANG_FORMAT is set to '{env_override}', but that executable was not found." + ) + + candidates = ( + "clang-format", + "clang-format-19", + "clang-format-18", + "clang-format-17", + "clang-format-16", + "clang-format-15", + "clang-format-14", + ) + for candidate in candidates: + resolved = shutil.which(candidate) + if resolved is not None: + return resolved + + system = platform.system() + if system == "Darwin": + install_hint = "Install it with `brew install clang-format`." + elif system == "Linux": + install_hint = "Install it with your package manager, for example `sudo apt install clang-format`." + elif system == "Windows": + install_hint = "Install LLVM/clang-format, for example with `winget install LLVM.LLVM`." + else: + install_hint = "Install clang-format and ensure it is available on PATH." + + raise RuntimeError( + "clang-format not found. " + + install_hint + + " You can also point the helper at a specific binary with the CLANG_FORMAT environment variable." + ) + + +def format_paths(paths: Iterable[str], include_match_sensitive: bool) -> List[str]: + allowed = {"safe-cpp"} + if include_match_sensitive: + allowed.add("match-sensitive-cpp") + + return [ + relpath(path) + for path in paths + if path_category(path) in allowed and os.path.splitext(path)[1] in CPP_EXTS + ] + + +def command_format(args: argparse.Namespace) -> int: + selected = format_paths( + filter_paths_by_category(gather_paths(args), args.category), + args.include_match_sensitive, + ) + if not selected: + print("No format-eligible files selected.") + return 0 + + clang_format = find_clang_format() + changed: List[str] = [] + changed_summaries: Dict[str, str] = {} + skipped_initializer_guards: List[str] = [] + + for path in selected: + abs_path = os.path.join(root_dir, path) + with open(abs_path, encoding="utf-8", errors="ignore") as f: + before = f.read() + + if has_initializer_guard_comments(before) and not args.include_initializer_guards: + skipped_initializer_guards.append(path) + continue + + if args.check: + result = subprocess.run( + [clang_format, "--style=file", abs_path], + capture_output=True, + text=True, + ) + if result.returncode != 0: + print(result.stderr.strip(), file=sys.stderr) + return result.returncode + if result.stdout != before: + changed.append(path) + changed_summaries[path] = format_change_summary(before, result.stdout) + else: + result = subprocess.run([clang_format, "-i", "--style=file", abs_path]) + if result.returncode != 0: + return result.returncode + changed.append(path) + + if skipped_initializer_guards: + print("Skipped files with initializer-list guard comments:") + for path in skipped_initializer_guards: + print(f" {path}") + print(" clang-format fights this repo convention; inspect these manually or override explicitly.") + print() + + if args.check: + if changed: + print("Would reformat:") + for path in changed: + print(f" {path} [{changed_summaries[path]}]") + return 1 + print("All selected files already match clang-format output.") + return 0 + + print("Formatted files:") + for path in changed: + print(f" {path}") + return 0 + + +def build_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser(description="Decomp-aware code style helper") + subparsers = parser.add_subparsers(dest="command", required=True) + + shared = argparse.ArgumentParser(add_help=False) + shared.add_argument( + "paths", + nargs="*", + help="Files to inspect. If omitted, use changed files against --base.", + ) + shared.add_argument( + "--base", + default="origin/main", + help="Base ref used when paths are omitted (default: origin/main)", + ) + shared.add_argument( + "--no-worktree", + action="store_true", + help="Ignore uncommitted worktree changes when collecting default files", + ) + + classify = subparsers.add_parser( + "classify", + parents=[shared], + help="Classify files by style-risk bucket", + ) + classify.add_argument( + "--category", + action="append", + choices=CATEGORIES, + help="Restrict output to one or more categories", + ) + classify.set_defaults(func=command_classify) + + audit = subparsers.add_parser( + "audit", + parents=[shared], + help="Audit files for repo-specific style issues", + ) + audit.add_argument( + "--category", + action="append", + choices=CATEGORIES, + help="Restrict the audit to one or more categories", + ) + audit.add_argument( + "--max-findings", + type=int, + default=60, + help="Maximum number of findings or grouped findings to print (default: 60)", + ) + audit.add_argument( + "--sample-lines", + type=int, + default=5, + help="Maximum line samples to print per grouped finding (default: 5)", + ) + audit.add_argument( + "--ungrouped", + action="store_true", + help="Print individual findings instead of grouped summaries", + ) + audit.set_defaults(func=command_audit) + + fmt = subparsers.add_parser( + "format", + parents=[shared], + help="Run clang-format on safe files by default", + ) + fmt.add_argument( + "--category", + action="append", + choices=CATEGORIES, + help="Restrict the format pass to one or more categories", + ) + fmt.add_argument( + "--check", + action="store_true", + help="Report files that would change instead of formatting them", + ) + fmt.add_argument( + "--include-match-sensitive", + action="store_true", + help="Also format match-sensitive C/C++ files (dangerous; verify afterwards). SourceLists files stay excluded.", + ) + fmt.add_argument( + "--include-initializer-guards", + action="store_true", + help="Also format files that use initializer-list guard comments (`//`). Disabled by default because clang-format fights that repo convention.", + ) + fmt.set_defaults(func=command_format) + + return parser + + +def main() -> int: + parser = build_parser() + args = parser.parse_args() + try: + return args.func(args) + except RuntimeError as exc: + print(f"Error: {exc}", file=sys.stderr) + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tools/decomp-context.py b/tools/decomp-context.py index 32a35fcae..87e486552 100644 --- a/tools/decomp-context.py +++ b/tools/decomp-context.py @@ -26,6 +26,7 @@ from typing import Any, Dict, List, Optional, Tuple from _common import ( ROOT_DIR, + RELOC_DIFF_CHOICES, ToolError, build_objdiff_symbol_rows, fail, @@ -69,11 +70,16 @@ def find_unit(config: Dict[str, Any], unit_name: str) -> Optional[Dict[str, Any] return None -def run_objdiff(unit_name: str, base_obj: Optional[str] = None) -> Optional[Dict[str, Any]]: +def run_objdiff( + unit_name: str, + base_obj: Optional[str] = None, + reloc_diffs: str = "none", +) -> Optional[Dict[str, Any]]: return run_objdiff_json( OBJDIFF_CLI, unit_name, base_obj=base_obj, + reloc_diffs=reloc_diffs, root_dir=root_dir, ) @@ -1105,6 +1111,15 @@ def main(): "Use this .o file as the decomp base instead of the one from objdiff.json." ), ) + parser.add_argument( + "--reloc-diffs", + choices=RELOC_DIFF_CHOICES, + default="none", + help=( + "Control relocation-only mismatches in objdiff " + "(default: none; use all to surface relocation diffs)" + ), + ) args = parser.parse_args() if args.ghidra_check: @@ -1124,7 +1139,9 @@ def main(): source_path = meta.get("source_path", "") # === objdiff Status (run first so we have line numbers for source scoping) === - diff_data = run_objdiff(args.unit, base_obj=args.base_obj) + diff_data = run_objdiff( + args.unit, base_obj=args.base_obj, reloc_diffs=args.reloc_diffs + ) left_sym = right_sym = None if diff_data: @@ -1269,6 +1286,8 @@ def main(): args.unit, "-d", args.function, + "--reloc-diffs", + args.reloc_diffs, ] if args.base_obj: diff_cmd += ["--base-obj", args.base_obj] diff --git a/tools/decomp-diff.py b/tools/decomp-diff.py index 9f4653147..78017385e 100644 --- a/tools/decomp-diff.py +++ b/tools/decomp-diff.py @@ -11,6 +11,7 @@ python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim -s nonmatching python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim -d __9CAnimBank + python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim -d __9CAnimBank --reloc-diffs all """ import argparse @@ -19,6 +20,7 @@ from typing import Any, Dict, List, Optional, Tuple from _common import ( ROOT_DIR, + RELOC_DIFF_CHOICES, ToolError, build_objdiff_symbol_rows, fail, @@ -29,11 +31,14 @@ OBJDIFF_CLI = os.path.join(root_dir, "build", "tools", "objdiff-cli") -def run_objdiff(unit: str, base_obj: Optional[str] = None) -> Dict[str, Any]: +def run_objdiff( + unit: str, base_obj: Optional[str] = None, reloc_diffs: str = "none" +) -> Dict[str, Any]: return run_objdiff_json( OBJDIFF_CLI, unit, base_obj=base_obj, + reloc_diffs=reloc_diffs, root_dir=root_dir, ) @@ -438,11 +443,22 @@ def main(): "Use this .o file as the decomp base instead of the one from objdiff.json." ), ) + parser.add_argument( + "--reloc-diffs", + choices=RELOC_DIFF_CHOICES, + default="none", + help=( + "Control relocation-only mismatches in objdiff " + "(default: none; use all to surface relocation diffs)" + ), + ) args = parser.parse_args() try: - data = run_objdiff(args.unit, base_obj=args.base_obj) + data = run_objdiff( + args.unit, base_obj=args.base_obj, reloc_diffs=args.reloc_diffs + ) except ToolError as e: fail(str(e)) diff --git a/tools/decomp-workflow.py b/tools/decomp-workflow.py index f9e9a0fc8..df90eff4a 100644 --- a/tools/decomp-workflow.py +++ b/tools/decomp-workflow.py @@ -14,6 +14,7 @@ python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll --lookup-mode full python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll --no-lookup python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll --no-source + python tools/decomp-workflow.py diff -u main/Speed/Indep/SourceLists/zCamera -d UpdateAll --reloc-diffs all python tools/decomp-workflow.py unit -u main/Speed/Indep/SourceLists/zCamera """ @@ -29,6 +30,7 @@ from _common import ( BUILD_NINJA, OBJDIFF_JSON, + RELOC_DIFF_CHOICES, ROOT_DIR, ToolError, ensure_exists, @@ -507,6 +509,8 @@ def command_function(args: argparse.Namespace) -> None: cmd.extend(["--ghidra-version", args.ghidra_version]) if args.brief: cmd.append("--brief") + if args.reloc_diffs != "none": + cmd.extend(["--reloc-diffs", args.reloc_diffs]) run_stream(cmd) @@ -526,6 +530,8 @@ def command_unit(args: argparse.Namespace) -> None: ) common_args: List[str] = ["-u", args.unit, "-t", "function"] + if args.reloc_diffs != "none": + common_args.extend(["--reloc-diffs", args.reloc_diffs]) if args.search: common_args.extend(["--search", args.search]) if args.limit is not None: @@ -624,6 +630,8 @@ def command_diff(args: argparse.Namespace) -> None: ensure_shared_unit_output(args.unit) cmd: List[str] = python_tool("decomp-diff.py", "-u", args.unit) + if args.reloc_diffs != "none": + cmd.extend(["--reloc-diffs", args.reloc_diffs]) if args.diff: cmd.extend(["-d", args.diff]) if args.type: @@ -717,6 +725,12 @@ def build_parser() -> argparse.ArgumentParser: action="store_true", help="Trim helper sections like related-source hints and suggested commands", ) + function.add_argument( + "--reloc-diffs", + choices=RELOC_DIFF_CHOICES, + default="none", + help="Pass through objdiff relocation diff mode to decomp-context.py", + ) function.set_defaults(func=command_function) unit = subparsers.add_parser( @@ -730,6 +744,12 @@ def build_parser() -> argparse.ArgumentParser: type=int, help="Limit each symbol list to the first N matching rows", ) + unit.add_argument( + "--reloc-diffs", + choices=RELOC_DIFF_CHOICES, + default="none", + help="Pass through objdiff relocation diff mode to decomp-diff.py", + ) unit.set_defaults(func=command_unit) next_cmd = subparsers.add_parser( @@ -804,6 +824,12 @@ def build_parser() -> argparse.ArgumentParser: action="store_true", help="Don't collapse matching instruction runs", ) + diff.add_argument( + "--reloc-diffs", + choices=RELOC_DIFF_CHOICES, + default="none", + help="Pass through objdiff relocation diff mode to decomp-diff.py", + ) diff.set_defaults(func=command_diff) return parser From 41b71d55b36299e0b2f27847f53b389deaec07db Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 14:34:54 +0100 Subject: [PATCH 193/691] docs: note stub-header ownership cleanup Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/code_style/SKILL.md | 1 + AGENTS.md | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/skills/code_style/SKILL.md b/.github/skills/code_style/SKILL.md index 5aafbce35..d5ec45a39 100644 --- a/.github/skills/code_style/SKILL.md +++ b/.github/skills/code_style/SKILL.md @@ -99,6 +99,7 @@ Foo::Foo() - Prefer including the owning repo header over adding a local forward declaration for a project type. - If the repo already has a header declaration/definition for a type, include that header instead of redeclaring the type locally. +- If the repo only has an empty or stub owner header, and line info / surrounding source clearly points at that header's subsystem, prefer populating that owner header over leaving a recovered project type declaration inside a `.cpp`. - Only keep a local forward declaration when no canonical repo header exists yet and you have verified that the ownership is still unresolved. - Prefer moving helper template declarations next to their real use site instead of leaving them in an unrelated file. diff --git a/AGENTS.md b/AGENTS.md index 0c400cca5..39b682fe7 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -281,6 +281,7 @@ This is a **C++98** codebase compiled with ProDG GC 3.9.3 (GCC 2.95 under the ho - Inline assembly is acceptable when needed to reproduce dead code or compiler scheduling that source alone cannot express cleanly - Preserve the original `class` vs `struct` kind. Check existing headers first, then Dwarf / PS2 info when needed. Even forward declarations and local partial declarations should use the accurate keyword when known. - Prefer including the real repo header over introducing a local forward declaration for a project type. If a type already has a header in `src/`, include it instead of redeclaring it locally. +- If a subsystem already has a stub owner header and the debug line info points back at that subsystem, fill the owner header instead of keeping a recovered project type declaration in a `.cpp`. - Preserve original member names, types, order, and proven layout comments. Do not invent `pad`, `unk`, or `field_XXXX` members just to satisfy a guessed size or offset; verify the real members with `find-symbol.py`, GC Dwarf, and PS2 data, and leave a short TODO if a layout detail is still uncertain. - Follow DWARF member naming exactly (`mMember` vs `m_member`) instead of normalizing names - Omit the `this` pointer. From b37777749ad8f153e8763bb4b7ce8a078fad8a21 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 15:20:30 +0100 Subject: [PATCH 194/691] tools: document match-safe null sweeps Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/code_style/SKILL.md | 1 + AGENTS.md | 1 + tools/code_style.py | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/skills/code_style/SKILL.md b/.github/skills/code_style/SKILL.md index d5ec45a39..950d7c6ee 100644 --- a/.github/skills/code_style/SKILL.md +++ b/.github/skills/code_style/SKILL.md @@ -93,6 +93,7 @@ Foo::Foo() - Spell casts without spaces inside the angle brackets: `static_cast(expr)`, not `static_cast< Type * >(expr)`. - Use `nullptr` exclusively for null pointers. - Prefer `if (ptr)` / `if (!ptr)` over explicit null comparisons when the change is local and verified safe. +- When a match-sensitive TU has many explicit `nullptr` checks and you decide to normalize them, prefer one mechanical full-TU pass over piecemeal cleanup. Rebuild the unit and re-check its status before keeping the rewrite. - Inline assembly is acceptable when it is needed to preserve dead-code compares, ordering, or other compiler behavior that source alone cannot reproduce. ### Forward declarations and local prototypes diff --git a/AGENTS.md b/AGENTS.md index 39b682fe7..5a55e5e13 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -286,6 +286,7 @@ This is a **C++98** codebase compiled with ProDG GC 3.9.3 (GCC 2.95 under the ho - Follow DWARF member naming exactly (`mMember` vs `m_member`) instead of normalizing names - Omit the `this` pointer. - Use `nullptr` and `override`. If they are missing, you need to include `types.h`. +- Prefer `if (ptr)` / `if (!ptr)` over explicit `nullptr` comparisons. In match-sensitive translation units, if you choose to normalize many of them, do it as one mechanical TU-wide pass and then rebuild / re-check that unit instead of assuming a piecemeal cleanup is free. - Omit `struct` when declaring variables or parameters, we are not in C land. - Avoid using `using` directives at all cost. Since the game uses jumbo builds, they leak through files. diff --git a/tools/code_style.py b/tools/code_style.py index 1f14f7c72..a1a8f83fa 100644 --- a/tools/code_style.py +++ b/tools/code_style.py @@ -585,7 +585,7 @@ def audit_match_sensitive_cpp( path, idx, "INFO", - "pointer-null comparison is a candidate for `if (ptr)` cleanup, but verify the affected TU first", + "pointer-null comparison is a candidate for `if (ptr)` cleanup; in match-sensitive code, prefer a mechanical full-TU pass and then rebuild/status-check that unit", ) ) return findings From ebaa4a4ca6fe4886ad64d51af0fc7d43ce2c0ede Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 17:37:15 +0100 Subject: [PATCH 195/691] Improve DWARF verification workflow Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/execute/SKILL.md | 14 + .github/skills/implement/SKILL.md | 32 +- .github/skills/refiner/SKILL.md | 20 +- AGENTS.md | 30 ++ tools/decomp-workflow.py | 223 +++++++++++++ tools/dwarf-compare.py | 517 ++++++++++++++++++++++++++++++ tools/lookup.py | 34 +- 7 files changed, 863 insertions(+), 7 deletions(-) create mode 100644 tools/dwarf-compare.py diff --git a/.github/skills/execute/SKILL.md b/.github/skills/execute/SKILL.md index c4366f2a6..b2cf62247 100644 --- a/.github/skills/execute/SKILL.md +++ b/.github/skills/execute/SKILL.md @@ -9,6 +9,8 @@ Your goal is to decompile a full translation unit: understand the current state, scaffold any missing classes if needed, then match the unit function by function until the produced C++ compiles to byte-identical object code against the original retail binary. +For each function, "done" means both objdiff and normalized DWARF are exact. + ## Overview This workflow combines several smaller workflows: @@ -113,6 +115,7 @@ For each missing or nonmatching function, follow the implementation workflow in - Branch structure mismatches indicate wrong control flow (if/switch/loop) - **Match percentage is misleading.** The last few percent are often the hardest. Treat 95% as unfinished; the goal is 100%. +- **DWARF is equally mandatory.** A 100% objdiff function with a DWARF mismatch is still unfinished. ### 3d. Collect and propagate matching tips @@ -135,6 +138,15 @@ Use `python tools/decomp-workflow.py function ...` or `python tools/decomp-workflow.py diff ...` when you want a shorter, wrapper-first view for one function. +After each function-level edit pass, run: + +```sh +python tools/decomp-workflow.py verify -u main/Path/To/TU -f FunctionName +``` + +If it fails, follow up with `decomp-workflow.py diff` and `decomp-workflow.py dwarf` +until both checks pass. + ### 3g. Periodic reassessment After every few functions, re-run the full status check: @@ -171,6 +183,8 @@ fallback. For any remaining nonmatching functions, make one final pass using the implementation or refiner workflow with all context accumulated during the session. +Do not report a function as complete unless its per-function `verify` check also passes. + ## Phase 5: Report Summarize the session: diff --git a/.github/skills/implement/SKILL.md b/.github/skills/implement/SKILL.md index 95ad95016..b51773f02 100644 --- a/.github/skills/implement/SKILL.md +++ b/.github/skills/implement/SKILL.md @@ -7,6 +7,8 @@ description: Workflow for decompiling and iterating on a function. Your goal is to decompile a specific function: writing C++ source that compiles to byte-identical object code against the original retail binary, verified via `decomp-diff.py`. +A function is not done until it is exact in both objdiff and normalized DWARF. + ## Phase 1: Gather Context Collect data from **all** of these sources in parallel where possible. @@ -145,6 +147,7 @@ For a rebuild plus a standardized diff run, use: ```sh python tools/decomp-workflow.py build -u main/Path/To/TU python tools/decomp-workflow.py diff -u main/Path/To/TU -d FunctionName +python tools/decomp-workflow.py verify -u main/Path/To/TU -f FunctionName ``` If the build fails, fix compilation errors first. @@ -172,7 +175,28 @@ Refer to the **Matching Tips** section in AGENTS.md for detailed patterns on resolving instruction mismatches, register allocation issues, stack frame differences, and symbol naming. -After writing your code, occasionally run the dwarf dump on the compiled output and then query your output dump with lookup.py to compare your decompiled functions against the originals. Since the address of the function you're working on can keep changing +After each meaningful edit/build iteration, run the combined verification gate first: + +Preferred shortcut: + +```sh +python tools/decomp-workflow.py verify -u main/Path/To/TU -f FunctionName +``` + +This fails unless both the instruction diff and normalized DWARF are exact. + +If the verify gate fails because of DWARF, inspect the DWARF block diff directly: + +```sh +python tools/decomp-workflow.py dwarf -u main/Path/To/TU -f FunctionName +``` + +This gives you a normalized DWARF match percentage plus a diff-like report of what still +differs between the original and rebuilt DWARF blocks for that function. + +Manual fallback: + +After writing your code, you can also run the dwarf dump on the compiled output and then query your output dump with lookup.py to compare your decompiled functions against the originals. Since the address of the function you're working on can keep changing due to work on other functions, query the unmangled name instead. ```bash @@ -193,17 +217,19 @@ Repeat the build-diff cycle until the diff shows 100% match with no `~` lines: ```sh python tools/decomp-workflow.py build -u main/Path/To/TU -python tools/decomp-workflow.py diff -u main/Path/To/TU -d FunctionName +python tools/decomp-workflow.py verify -u main/Path/To/TU -f FunctionName ``` Every mismatched instruction is a signal — don't settle for "close enough". -Reaching 100% matching status is not enough, also make sure that the dwarf of the function matches the original. +Reaching 100% instruction matching status is not enough. Stay in the loop until `verify` +passes, which means the DWARF of the function also matches after normalization. ## Phase 5: Report Summarize: - Final match status (percentage, instruction count) +- Final DWARF status (exact or remaining mismatch summary) - What the function does (brief description) - Key decisions or tricky patterns used to achieve the match - If not fully matching, document remaining mismatches and theories diff --git a/.github/skills/refiner/SKILL.md b/.github/skills/refiner/SKILL.md index 82b2a2608..4d1fe1bb7 100644 --- a/.github/skills/refiner/SKILL.md +++ b/.github/skills/refiner/SKILL.md @@ -115,7 +115,23 @@ sequences on PPC (see `xoris` pattern in AGENTS.md). Check all casts. ## Phase 3: DWARF verification -After any instruction match, verify the DWARF also matches. +After any instruction match, verify the DWARF also matches. The function is not done +until both objdiff and normalized DWARF are exact. + +Preferred shortcut: + +```bash +python tools/decomp-workflow.py verify -u main/Path/To/TU -f FunctionName +``` + +If the combined gate fails because of DWARF, inspect the DWARF diff directly with: + +```bash +python tools/decomp-workflow.py dwarf -u main/Path/To/TU -f FunctionName +``` + +Manual fallback: + Use the rebuilt shared object from Phase 1 (or rebuild again if you've changed the source): ```bash @@ -143,5 +159,5 @@ Summarize: - What was blocking the match (the root cause category from Phase 1) - The specific source change that resolved it - Any new generalizable assembly pattern discovered (add to AGENTS.md if so) -- DWARF match status +- DWARF match status and whether `verify` passes - If still not matching: the exact diff lines that remain and your best theory diff --git a/AGENTS.md b/AGENTS.md index 5a55e5e13..ff958229f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -156,6 +156,7 @@ python tools/decomp-workflow.py build -u main/Speed/Indep/SourceLists/zAnim python tools/decomp-workflow.py diff -u main/Speed/Indep/SourceLists/zAnim -d FindIOWin python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zAnim -f FindIOWin python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zAnim -f FindIOWin --brief +python tools/decomp-workflow.py verify -u main/Speed/Indep/SourceLists/zAnim -f FindIOWin python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zAnim -f FindIOWin --ghidra-version gc python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zAnim -f FindIOWin --lookup-mode full python tools/decomp-workflow.py unit -u main/Speed/Indep/SourceLists/zAnim --search FindIOWin --limit 20 @@ -197,6 +198,31 @@ real content. Add `--brief` when you want to keep the helper sections compact; it trims suggested commands and related-source hints without hiding the core status/diff/source data. +For every function you touch, treat DWARF as a first-class completion gate, not a +secondary polish pass. After each meaningful code/build iteration, run the wrapper's +combined verification flow: + +```sh +python tools/decomp-workflow.py verify -u main/Path/To/TU -f FunctionName +``` + +`verify` fails unless **both** checks are exact for that function: + +- objdiff instruction match is 100% +- normalized DWARF block match is exact + +If the combined check fails, then inspect the DWARF diff directly with: + +```sh +python tools/decomp-workflow.py dwarf -u main/Path/To/TU -f FunctionName +``` + +It compares the original and rebuilt DWARF blocks for one function, prints a normalized +DWARF match percentage, and shows a diff-like view of what still differs. Use it +whenever `verify` says the function is still failing the DWARF gate. This is the +fastest way to see whether you are still missing locals, have the wrong inline body, or +changed signature/type details even when the instruction diff already looks good. + When working with these tools, do not just work around recurring friction silently. If you notice a clear, safe workflow or tooling improvement that would make future decomp work faster, shorter, or more reliable, prefer implementing that improvement as part of the task @@ -334,6 +360,10 @@ You may use sub-agents to gather read-only context during this process, but they edit files. Treat their output as analysis input for the main worker, not as a path to delegate source changes. +A function is only done when both objdiff and normalized DWARF are exact. Treat a +100% instruction match with a DWARF mismatch as unfinished work, not a near-complete +result. + The dwarf of your structs doesn't have to neccessarily match the original due to various reasons, just make sure that you copied everything correctly. Never dismiss a diff as "close enough" or "just register allocation." Every mismatched diff --git a/tools/decomp-workflow.py b/tools/decomp-workflow.py index df90eff4a..9193425cd 100644 --- a/tools/decomp-workflow.py +++ b/tools/decomp-workflow.py @@ -15,6 +15,9 @@ python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll --no-lookup python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll --no-source python tools/decomp-workflow.py diff -u main/Speed/Indep/SourceLists/zCamera -d UpdateAll --reloc-diffs all + python tools/decomp-workflow.py dwarf -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll + python tools/decomp-workflow.py dwarf -u main/Speed/Indep/SourceLists/zAttribSys -f 'Attrib::Class::RemoveCollection(Attrib::Collection *)' --full-diff + python tools/decomp-workflow.py verify -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll python tools/decomp-workflow.py unit -u main/Speed/Indep/SourceLists/zCamera """ @@ -33,10 +36,12 @@ RELOC_DIFF_CHOICES, ROOT_DIR, ToolError, + build_objdiff_symbol_rows, ensure_exists, find_objdiff_unit, load_objdiff_config, make_abs, + run_objdiff_json, ) @@ -228,6 +233,77 @@ def describe_path(path: str) -> str: return "present" +def fuzzy_match(pattern: str, name: str) -> bool: + return pattern.lower() in name.lower() + + +def find_objdiff_rows_for_function( + unit_name: str, function_name: str, reloc_diffs: str = "none" +) -> List[Dict[str, Any]]: + data = run_objdiff_json( + OBJDIFF_CLI, + unit_name, + reloc_diffs=reloc_diffs, + root_dir=ROOT_DIR, + ) + rows = [ + row + for row in build_objdiff_symbol_rows(data) + if row["type"] == "function" + ] + + exact_matches = [ + row + for row in rows + if function_name in row["name"] or function_name in row["symbol_name"] + ] + if exact_matches: + return exact_matches + + return [ + row + for row in rows + if fuzzy_match(function_name, row["name"]) + or fuzzy_match(function_name, row["symbol_name"]) + ] + + +def choose_objdiff_row(unit_name: str, function_name: str, reloc_diffs: str = "none") -> Dict[str, Any]: + matches = find_objdiff_rows_for_function(unit_name, function_name, reloc_diffs=reloc_diffs) + if not matches: + raise WorkflowError( + f"objdiff: function '{function_name}' not found in {unit_name}.\n" + "Hint: run `python tools/decomp-workflow.py unit -u " + f"{unit_name} --search {shlex.quote(function_name)}` to inspect nearby symbols." + ) + + if len(matches) > 1: + preview = "\n".join(f" - {row['name']}" for row in matches[:8]) + extra = "" + if len(matches) > 8: + extra = f"\n ... {len(matches) - 8} more" + raise WorkflowError( + f"objdiff: function query '{function_name}' matched multiple symbols in {unit_name}.\n" + f"Use a more specific function name.\n{preview}{extra}" + ) + return matches[0] + + +def load_dwarf_report( + unit_name: str, + function_name: str, + rebuilt_dwarf_file: Optional[str] = None, +) -> Dict[str, Any]: + cmd: List[str] = python_tool("dwarf-compare.py", "-u", unit_name, "-f", function_name, "--json") + if rebuilt_dwarf_file: + cmd.extend(["--rebuilt-dwarf-file", rebuilt_dwarf_file]) + result = run_capture(cmd) + try: + return json.loads(result.stdout) + except json.JSONDecodeError as e: + raise WorkflowError(f"dwarf-compare.py returned invalid JSON: {e}") + + def lookup_symbol_address(symbols_file: str, mangled_name: str) -> Optional[str]: if not os.path.exists(symbols_file): return None @@ -512,6 +588,12 @@ def command_function(args: argparse.Namespace) -> None: if args.reloc_diffs != "none": cmd.extend(["--reloc-diffs", args.reloc_diffs]) run_stream(cmd) + print(flush=True) + print( + "Required completion check: python tools/decomp-workflow.py verify " + f"-u {shlex.quote(args.unit)} -f {shlex.quote(args.function)}", + flush=True, + ) def command_unit(args: argparse.Namespace) -> None: @@ -653,6 +735,88 @@ def command_diff(args: argparse.Namespace) -> None: run_stream(cmd) +def command_dwarf(args: argparse.Namespace) -> None: + ensure_decomp_prereqs() + print_section(f"DWARF Workflow: {args.unit} / {args.function}") + if not args.rebuilt_dwarf_file: + ensure_shared_unit_output(args.unit) + + cmd: List[str] = python_tool("dwarf-compare.py", "-u", args.unit, "-f", args.function) + if args.summary: + cmd.append("--summary") + if args.json: + cmd.append("--json") + if args.context is not None: + cmd.extend(["-C", str(args.context)]) + if args.no_collapse: + cmd.append("--no-collapse") + if args.require_exact: + cmd.append("--require-exact") + if args.rebuilt_dwarf_file: + cmd.extend(["--rebuilt-dwarf-file", args.rebuilt_dwarf_file]) + run_stream(cmd) + + +def command_verify(args: argparse.Namespace) -> None: + ensure_decomp_prereqs() + print_section(f"Verify Workflow: {args.unit} / {args.function}") + ensure_shared_unit_output(args.unit) + + objdiff_row = choose_objdiff_row(args.unit, args.function, reloc_diffs=args.reloc_diffs) + dwarf_report = load_dwarf_report( + args.unit, + args.function, + rebuilt_dwarf_file=args.rebuilt_dwarf_file, + ) + + objdiff_exact = ( + objdiff_row["status"] == "match" + and objdiff_row["match_percent"] is not None + and float(objdiff_row["match_percent"]) >= 100.0 + ) + dwarf_exact = bool(dwarf_report["normalized_exact_match"]) + overall_ok = objdiff_exact and dwarf_exact + + objdiff_percent = ( + f"{float(objdiff_row['match_percent']):.1f}%" + if objdiff_row["match_percent"] is not None + else "-" + ) + dwarf_percent = f"{float(dwarf_report['match_percent']):.1f}%" + + print( + f"objdiff: {'PASS' if objdiff_exact else 'FAIL'} | " + f"{objdiff_percent} | status={objdiff_row['status']} | " + f"unmatched~{objdiff_row['unmatched_bytes_est']}B" + ) + print( + f"DWARF: {'PASS' if dwarf_exact else 'FAIL'} | " + f"{dwarf_percent} | normalized exact={'yes' if dwarf_exact else 'no'} | " + f"change groups={dwarf_report['changed_groups']}" + ) + print(f"Overall: {'PASS' if overall_ok else 'FAIL'}") + print("Done means both objdiff and normalized DWARF are exact for the function.") + + if overall_ok: + return + + print(flush=True) + print("Follow-up commands:", flush=True) + print( + f" python tools/decomp-workflow.py diff -u {shlex.quote(args.unit)} " + f"-d {shlex.quote(args.function)}", + flush=True, + ) + print( + f" python tools/decomp-workflow.py dwarf -u {shlex.quote(args.unit)} " + f"-f {shlex.quote(args.function)}", + flush=True, + ) + raise WorkflowError( + "Verification failed: the function is not complete until both objdiff and DWARF match." + ) + + def build_parser() -> argparse.ArgumentParser: parser = argparse.ArgumentParser( description=( @@ -832,6 +996,65 @@ def build_parser() -> argparse.ArgumentParser: ) diff.set_defaults(func=command_diff) + dwarf = subparsers.add_parser( + "dwarf", + help="Compare original vs rebuilt DWARF for one function", + ) + dwarf.add_argument("-u", "--unit", required=True, help="Translation unit name") + dwarf.add_argument("-f", "--function", required=True, help="Function name to compare") + dwarf.add_argument( + "--summary", + action="store_true", + help="Print only the DWARF summary without the diff view", + ) + dwarf.add_argument( + "--json", + action="store_true", + help="Print the DWARF comparison report as JSON", + ) + dwarf.add_argument( + "-C", + "--context", + type=int, + default=3, + help="Context lines around collapsed matching DWARF runs (default: 3)", + ) + dwarf.add_argument( + "--no-collapse", + "--full-diff", + dest="no_collapse", + action="store_true", + help="Show the whole normalized DWARF block with diff markers instead of collapsing matching runs", + ) + dwarf.add_argument( + "--rebuilt-dwarf-file", + help="Use an existing rebuilt DWARF dump instead of dumping the unit object", + ) + dwarf.add_argument( + "--require-exact", + action="store_true", + help="Exit non-zero unless the normalized DWARF block matches exactly", + ) + dwarf.set_defaults(func=command_dwarf) + + verify = subparsers.add_parser( + "verify", + help="Fail unless one function matches in both objdiff and DWARF", + ) + verify.add_argument("-u", "--unit", required=True, help="Translation unit name") + verify.add_argument("-f", "--function", required=True, help="Function name to verify") + verify.add_argument( + "--reloc-diffs", + choices=RELOC_DIFF_CHOICES, + default="none", + help="Pass through objdiff relocation diff mode when checking instruction match", + ) + verify.add_argument( + "--rebuilt-dwarf-file", + help="Use an existing rebuilt DWARF dump instead of dumping the unit object", + ) + verify.set_defaults(func=command_verify) + return parser diff --git a/tools/dwarf-compare.py b/tools/dwarf-compare.py new file mode 100644 index 000000000..51f35ea9b --- /dev/null +++ b/tools/dwarf-compare.py @@ -0,0 +1,517 @@ +#!/usr/bin/env python3 + +""" +Compare the original DWARF for one function against the rebuilt DWARF from a unit object. + +Examples: + python tools/dwarf-compare.py -u main/Speed/Indep/SourceLists/zCamera -f "Camera::UpdateAll(float)" + python tools/dwarf-compare.py -u main/Speed/Indep/SourceLists/zAI -f "AIPursuit::AIPursuit(Sim::Param)" --summary + python tools/dwarf-compare.py -u main/Speed/Indep/SourceLists/zAttribSys -f "Attrib::Class::RemoveCollection(Attrib::Collection *)" --full-diff + python tools/dwarf-compare.py -u main/Speed/Indep/SourceLists/zCamera -f "Camera::UpdateAll(float)" --require-exact +""" + +import argparse +import difflib +import json +import os +import re +import sys +from typing import Any, Dict, Iterable, List, Optional, Sequence, Tuple + +from _common import ROOT_DIR, ToolError, find_objdiff_unit, load_objdiff_config, make_abs +from lookup import ( + _candidate_func_names, + _normalise_func_name, + _sig_contains_name, + read_text, + split_functions, +) + + +SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) +TOOLS_DIR = os.path.join(ROOT_DIR, "tools") +GC_DWARF = os.path.join(ROOT_DIR, "symbols", "Dwarf") +DTK = os.path.join(ROOT_DIR, "build", "tools", "dtk") +HEX_RE = re.compile(r"0x[0-9A-Fa-f]+") + + +class DwarfCompareError(RuntimeError): + pass + + +FunctionBlock = Tuple[str, str, str, str] + + +def tool_path(name: str) -> str: + return os.path.join(TOOLS_DIR, name) + + +def print_section(title: str) -> None: + print(flush=True) + print("=" * 60, flush=True) + print(f" {title}", flush=True) + print("=" * 60, flush=True) + + +def format_failure( + cmd: Sequence[str], returncode: int, stdout: str = "", stderr: str = "" +) -> str: + message = [f"Command failed (exit {returncode}): {' '.join(cmd)}"] + stdout = stdout.strip() + stderr = stderr.strip() + if stdout: + message.append(f"stdout:\n{stdout}") + if stderr: + message.append(f"stderr:\n{stderr}") + return "\n".join(message) + + +def maybe_remove(path: Optional[str]) -> None: + if not path: + return + try: + if os.path.exists(path): + os.remove(path) + except OSError as e: + print(f"Warning: failed to remove temporary file {path}: {e}", file=sys.stderr) + + +def get_unit_build_output(unit_name: str) -> str: + config = load_objdiff_config() + unit = find_objdiff_unit(config, unit_name) + if unit is None: + raise DwarfCompareError(f"Unit not found in objdiff.json: {unit_name}") + + target = unit.get("base_path") or unit.get("target_path") + if not target: + raise DwarfCompareError(f"Unit has no build target in objdiff.json: {unit_name}") + return make_abs(str(target)) or str(target) + + +def dtk_dwarf_dump(obj_path: str) -> str: + import tempfile + import subprocess + + fd, output_path = tempfile.mkstemp(prefix="nfsmw_dwarf_compare_", suffix=".nothpp") + os.close(fd) + maybe_remove(output_path) + + result = subprocess.run( + [DTK, "dwarf", "dump", obj_path, "-o", output_path], + cwd=ROOT_DIR, + text=True, + capture_output=True, + ) + if result.returncode != 0: + maybe_remove(output_path) + raise DwarfCompareError( + format_failure( + [DTK, "dwarf", "dump", obj_path, "-o", output_path], + result.returncode, + result.stdout, + result.stderr, + ) + ) + + tool_output = "\n".join( + part.strip() for part in [result.stdout, result.stderr] if part.strip() + ) + if "ERROR " in tool_output or tool_output.startswith("ERROR"): + maybe_remove(output_path) + raise DwarfCompareError( + f"dtk reported an error while dumping DWARF:\n{tool_output}" + ) + + if not os.path.exists(output_path): + raise DwarfCompareError("dtk dwarf dump succeeded but did not write an output file") + + return output_path + + +def load_function_blocks(path: str, folder_mode: bool) -> List[FunctionBlock]: + if folder_mode: + text = read_text(os.path.join(path, "functions.nothpp")) + else: + text = read_text(path) + return split_functions(text) + + +def find_function_blocks(funcs: Iterable[FunctionBlock], query: str) -> List[FunctionBlock]: + candidates = _candidate_func_names(query) + matches: List[FunctionBlock] = [] + exact_substring_matches: List[FunctionBlock] = [] + + for func in funcs: + sig_line = func[2] + if query in sig_line: + exact_substring_matches.append(func) + if any(_sig_contains_name(sig_line, candidate) for candidate in candidates): + matches.append(func) + + if exact_substring_matches: + return exact_substring_matches + return matches + + +def last_name_token(query: str) -> str: + bare = _normalise_func_name(query) + if "::" in bare: + return bare.split("::")[-1] + return bare + + +def find_similar_signatures( + funcs: Sequence[FunctionBlock], query: str, limit: int = 8 +) -> List[str]: + token = last_name_token(query) + token_matches: List[str] = [] + seen = set() + + for _, _, sig_line, _ in funcs: + if token and token in sig_line and sig_line not in seen: + token_matches.append(sig_line) + seen.add(sig_line) + if len(token_matches) >= limit: + return token_matches + + choices = [sig_line for _, _, sig_line, _ in funcs if sig_line] + for sig_line in difflib.get_close_matches(query, choices, n=limit, cutoff=0.35): + if sig_line not in seen: + token_matches.append(sig_line) + seen.add(sig_line) + if len(token_matches) >= limit: + break + return token_matches + + +def choose_function_block( + funcs: List[FunctionBlock], query: str, label: str +) -> FunctionBlock: + matches = find_function_blocks(funcs, query) + if not matches: + if not funcs: + raise DwarfCompareError( + f"{label}: function '{query}' not found.\n" + "The scanned DWARF source contains no top-level function blocks." + ) + + similar = find_similar_signatures(funcs, query) + details = [ + f"{label}: function '{query}' not found.", + f"Scanned {len(funcs)} top-level function block(s).", + ] + if similar: + details.append("Closest signatures:") + details.extend(f" - {sig}" for sig in similar) + raise DwarfCompareError("\n".join(details)) + if len(matches) > 1: + signatures = "\n".join(f" - {match[2]}" for match in matches[:8]) + extra = "" + if len(matches) > 8: + extra = f"\n ... {len(matches) - 8} more" + raise DwarfCompareError( + f"{label}: function query '{query}' matched multiple DWARF blocks.\n" + f"Use a more specific function name.\n{signatures}{extra}" + ) + return matches[0] + + +def normalize_line(line: str) -> str: + stripped = line.rstrip("\n").rstrip() + if stripped.startswith("// Range:"): + return "// Range: " + return HEX_RE.sub("0xADDR", stripped) + + +def normalize_block(block: str) -> List[str]: + return [normalize_line(line) for line in block.splitlines()] + + +def count_lines_for_opcodes(opcodes: Sequence[Tuple[str, int, int, int, int]]) -> Dict[str, int]: + matching = 0 + original_only = 0 + rebuilt_only = 0 + changed_groups = 0 + for tag, i1, i2, j1, j2 in opcodes: + if tag == "equal": + matching += i2 - i1 + continue + changed_groups += 1 + if tag in ("replace", "delete"): + original_only += i2 - i1 + if tag in ("replace", "insert"): + rebuilt_only += j2 - j1 + return { + "matching_lines": matching, + "original_only_lines": original_only, + "rebuilt_only_lines": rebuilt_only, + "changed_groups": changed_groups, + } + + +def build_diff_lines( + original_lines: Sequence[str], + rebuilt_lines: Sequence[str], + function_name: str, + context: int, + collapse: bool, +) -> List[str]: + if list(original_lines) == list(rebuilt_lines): + return [] + + rendered: List[str] = [ + f"--- original:{function_name}", + f"+++ rebuilt:{function_name}", + ] + + matcher = difflib.SequenceMatcher(a=original_lines, b=rebuilt_lines) + for group in matcher.get_grouped_opcodes(context if collapse else max(len(original_lines), len(rebuilt_lines))): + first = group[0] + last = group[-1] + a_start = first[1] + 1 + a_len = last[2] - first[1] + b_start = first[3] + 1 + b_len = last[4] - first[3] + rendered.append(f"@@ -{a_start},{a_len} +{b_start},{b_len} @@") + + for tag, i1, i2, j1, j2 in group: + if tag == "equal": + for idx in range(i1, i2): + rendered.append(f" L{idx + 1:04d} {original_lines[idx]}") + continue + + if tag in ("replace", "delete"): + for idx in range(i1, i2): + rendered.append(f"- L{idx + 1:04d} {original_lines[idx]}") + if tag in ("replace", "insert"): + for idx in range(j1, j2): + rendered.append(f"+ L{idx + 1:04d} {rebuilt_lines[idx]}") + + return rendered + + +def build_report( + unit_name: str, + function_name: str, + original_block: FunctionBlock, + rebuilt_block: FunctionBlock, + collapse: bool, + context: int, +) -> Dict[str, Any]: + original_raw = original_block[3].splitlines() + rebuilt_raw = rebuilt_block[3].splitlines() + original_lines = normalize_block(original_block[3]) + rebuilt_lines = normalize_block(rebuilt_block[3]) + + matcher = difflib.SequenceMatcher(a=original_lines, b=rebuilt_lines) + opcodes = matcher.get_opcodes() + counts = count_lines_for_opcodes(opcodes) + total_lines = max(len(original_lines), len(rebuilt_lines), 1) + match_percent = 100.0 * counts["matching_lines"] / total_lines + signature_match = normalize_line(original_block[2]) == normalize_line(rebuilt_block[2]) + raw_exact_match = original_raw == rebuilt_raw + normalized_exact_match = original_lines == rebuilt_lines + + diff_lines = build_diff_lines( + original_lines, + rebuilt_lines, + function_name, + context=context, + collapse=collapse, + ) + mismatch_summaries: List[str] = [] + for tag, i1, i2, j1, j2 in opcodes: + if tag == "equal": + continue + original_span = ( + f"L{i1 + 1:04d}" if i2 - i1 <= 1 else f"L{i1 + 1:04d}-L{i2:04d}" + ) if tag in ("replace", "delete") else "-" + rebuilt_span = ( + f"L{j1 + 1:04d}" if j2 - j1 <= 1 else f"L{j1 + 1:04d}-L{j2:04d}" + ) if tag in ("replace", "insert") else "-" + + if tag == "replace" and i2 - i1 == 1 and j2 - j1 == 1: + detail = f"{original_lines[i1]} -> {rebuilt_lines[j1]}" + elif tag == "delete": + detail = f"removed {i2 - i1} original line(s)" + elif tag == "insert": + detail = f"added {j2 - j1} rebuilt line(s)" + else: + detail = ( + f"replaced {i2 - i1} original line(s) with " + f"{j2 - j1} rebuilt line(s)" + ) + mismatch_summaries.append( + f"- {original_span} -> {rebuilt_span}: {detail}" + ) + + return { + "unit": unit_name, + "function": function_name, + "match_percent": match_percent, + "matching_lines": counts["matching_lines"], + "total_lines": total_lines, + "original_line_count": len(original_lines), + "rebuilt_line_count": len(rebuilt_lines), + "original_only_lines": counts["original_only_lines"], + "rebuilt_only_lines": counts["rebuilt_only_lines"], + "changed_groups": counts["changed_groups"], + "signature_match": signature_match, + "normalized_exact_match": normalized_exact_match, + "raw_exact_match": raw_exact_match, + "original_signature": original_block[2], + "rebuilt_signature": rebuilt_block[2], + "original_range": [original_block[0], original_block[1]], + "rebuilt_range": [rebuilt_block[0], rebuilt_block[1]], + "mismatch_summaries": mismatch_summaries, + "diff_lines": diff_lines, + } + + +def print_summary(report: Dict[str, Any]) -> None: + print_section(f"DWARF Match: {report['function']}") + print(f"Unit: {report['unit']}") + print( + f"Normalized DWARF match: {report['match_percent']:.1f}% " + f"({report['matching_lines']}/{report['total_lines']} lines)" + ) + print( + f"Signature: {'match' if report['signature_match'] else 'mismatch'} | " + f"Change groups: {report['changed_groups']} | " + f"Original-only lines: {report['original_only_lines']} | " + f"Rebuilt-only lines: {report['rebuilt_only_lines']}" + ) + print( + f"Normalized exact match: {'yes' if report['normalized_exact_match'] else 'no'}" + ) + if report["normalized_exact_match"] and not report["raw_exact_match"]: + print("Raw textual exact match: no (only raw addresses/ranges differ)") + else: + print(f"Raw textual exact match: {'yes' if report['raw_exact_match'] else 'no'}") + print( + "Address-only range differences are normalized out so the percentage tracks " + "structural/function-body DWARF changes." + ) + if not report["signature_match"]: + print() + print("Original signature:") + print(f" {report['original_signature']}") + print("Rebuilt signature:") + print(f" {report['rebuilt_signature']}") + + +def print_diff(report: Dict[str, Any]) -> None: + if report["mismatch_summaries"]: + print_section("Mismatch Summary") + for line in report["mismatch_summaries"]: + print(line) + print_section("DWARF Diff") + if not report["diff_lines"]: + print("No DWARF differences after normalization.") + return + for line in report["diff_lines"]: + print(line) + + +def build_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser( + description=( + "Compare original and rebuilt DWARF for one function and show a " + "normalized line-match report plus a diff-like view." + ) + ) + parser.add_argument("-u", "--unit", required=True, help="Translation unit name") + parser.add_argument("-f", "--function", required=True, help="Function name to compare") + parser.add_argument( + "--summary", + action="store_true", + help="Print only the summary header without the diff view", + ) + parser.add_argument( + "--json", + action="store_true", + help="Print the report as JSON", + ) + parser.add_argument( + "-C", + "--context", + type=int, + default=3, + help="Context lines to keep around collapsed matching runs (default: 3)", + ) + parser.add_argument( + "--no-collapse", + "--full-diff", + dest="no_collapse", + action="store_true", + help="Show the whole normalized DWARF block with diff markers instead of collapsing matching runs", + ) + parser.add_argument( + "--rebuilt-dwarf-file", + help="Use an existing rebuilt DWARF dump instead of dumping the unit object", + ) + parser.add_argument( + "--require-exact", + action="store_true", + help="Exit non-zero unless the normalized DWARF block matches exactly", + ) + return parser + + +def main() -> None: + parser = build_parser() + args = parser.parse_args() + + rebuilt_dwarf_path: Optional[str] = None + cleanup_rebuilt_dwarf = False + try: + if args.rebuilt_dwarf_file: + rebuilt_dwarf_path = os.path.abspath(args.rebuilt_dwarf_file) + else: + obj_path = get_unit_build_output(args.unit) + if not os.path.exists(obj_path): + raise DwarfCompareError( + f"Missing built object for {args.unit}: {obj_path}\n" + f"Hint: run `python tools/decomp-workflow.py build -u {args.unit}` " + "or use the wrapper `python tools/decomp-workflow.py dwarf ...`." + ) + rebuilt_dwarf_path = dtk_dwarf_dump(obj_path) + cleanup_rebuilt_dwarf = True + + original_funcs = load_function_blocks(GC_DWARF, folder_mode=True) + rebuilt_funcs = load_function_blocks(rebuilt_dwarf_path, folder_mode=False) + + original_block = choose_function_block(original_funcs, args.function, "original DWARF") + rebuilt_block = choose_function_block(rebuilt_funcs, args.function, "rebuilt DWARF") + + report = build_report( + args.unit, + args.function, + original_block, + rebuilt_block, + collapse=not args.no_collapse, + context=args.context, + ) + + if args.json: + print(json.dumps(report, indent=2)) + if args.require_exact and not report["normalized_exact_match"]: + sys.exit(1) + return + + print_summary(report) + if not args.summary: + print_diff(report) + if args.require_exact and not report["normalized_exact_match"]: + sys.exit(1) + + except (DwarfCompareError, ToolError) as e: + print(e, file=sys.stderr) + sys.exit(1) + finally: + if cleanup_rebuilt_dwarf: + maybe_remove(rebuilt_dwarf_path) + + +if __name__ == "__main__": + main() diff --git a/tools/lookup.py b/tools/lookup.py index e8188bfca..cecbae991 100644 --- a/tools/lookup.py +++ b/tools/lookup.py @@ -248,6 +248,32 @@ def _normalise_func_name(name: str) -> str: return name.strip() +def _candidate_func_names(name: str) -> list[str]: + """ + Generate progressively shorter qualified-name suffixes. + + Example: + Attrib::Class::RemoveCollection -> [ + 'Attrib::Class::RemoveCollection', + 'Class::RemoveCollection', + 'RemoveCollection', + ] + + This helps match DWARF signatures that omit leading namespaces. + """ + bare = _normalise_func_name(name) + if not bare: + return [] + + parts = bare.split("::") + candidates: list[str] = [] + for index in range(len(parts)): + candidate = "::".join(parts[index:]).strip() + if candidate and candidate not in candidates: + candidates.append(candidate) + return candidates + + def _sig_contains_name(sig_line: str, bare_name: str) -> bool: """ Return True if *bare_name* (e.g. 'EPerfectLaunch::~EPerfectLaunch') appears @@ -291,8 +317,12 @@ def find_functions_by_name( funcs: list[tuple[str, str, str, str]], query: str ) -> list[str]: """Return all function blocks whose signature matches *query* (ignoring params).""" - bare = _normalise_func_name(query) - return [block for start, end, sig, block in funcs if _sig_contains_name(sig, bare)] + candidates = _candidate_func_names(query) + return [ + block + for start, end, sig, block in funcs + if any(_sig_contains_name(sig, candidate) for candidate in candidates) + ] # --------------------------------------------------------------------------- From cc4c6904c9e179b74ef1039e08f579d698a5db2a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 17:38:03 +0100 Subject: [PATCH 196/691] - again --- tools/build-unit.py | 324 -------------------------------------------- 1 file changed, 324 deletions(-) delete mode 100644 tools/build-unit.py diff --git a/tools/build-unit.py b/tools/build-unit.py deleted file mode 100644 index dbfacf7b7..000000000 --- a/tools/build-unit.py +++ /dev/null @@ -1,324 +0,0 @@ -#!/usr/bin/env python3 - -""" -Compile a single translation unit to a temporary (or specified) object file. - -Uses `ninja -t compdb` to extract the exact compile command for the unit, then -redirects the output to a private path so parallel agents never overwrite each -other's work. - -Usage: - # Auto-generate a temp path (printed to stdout): - python tools/build-unit.py -u main/Speed/Indep/SourceLists/zAnim - - # Compile to an explicit path: - python tools/build-unit.py -u main/Speed/Indep/SourceLists/zAnim -o /tmp/my.o - -The path of the compiled .o is always printed to stdout on success so it can be -captured with command substitution: - - TEMPOBJ=$(python tools/build-unit.py -u main/Speed/Indep/SourceLists/zAnim) - python tools/decomp-diff.py -u main/Speed/Indep/SourceLists/zAnim -d MyFunc --base-obj "$TEMPOBJ" - dtk dwarf dump "$TEMPOBJ" -o /tmp/my_dwarf.nothpp -""" - -import argparse -import json -import os -import re -import subprocess -import sys -import tempfile -from typing import Any, Dict, List, Optional, Tuple, Union - -script_dir = os.path.dirname(os.path.realpath(__file__)) -root_dir = os.path.abspath(os.path.join(script_dir, "..")) -OBJDIFF_JSON = os.path.join(root_dir, "objdiff.json") -BUILD_NINJA = os.path.join(root_dir, "build.ninja") -COMPILE_COMMANDS = os.path.join(root_dir, "compile_commands.json") - -Command = Union[str, List[str]] - - -def load_objdiff() -> Dict[str, Any]: - with open(OBJDIFF_JSON) as f: - return json.load(f) - - -def find_unit_source(config: Dict[str, Any], unit_name: str) -> Optional[str]: - """Return the source_path for a unit from objdiff.json, or None.""" - for unit in config.get("units", []): - if unit["name"] == unit_name: - src = unit.get("metadata", {}).get("source_path") - return str(src) if src else None - return None - - -def find_unit_target(config: Dict[str, Any], unit_name: str) -> Optional[str]: - """Return the build target path for a unit from objdiff.json, or None.""" - for unit in config.get("units", []): - if unit["name"] == unit_name: - target = unit.get("base_path") or unit.get("target_path") - return str(target) if target else None - return None - - -def get_compdb() -> Optional[List[Dict[str, Any]]]: - """Load compile_commands.json, falling back to `ninja -t compdb` if needed.""" - if os.path.exists(COMPILE_COMMANDS): - try: - with open(COMPILE_COMMANDS) as f: - return json.load(f) - except json.JSONDecodeError as e: - print(f"Failed to parse compile_commands.json: {e}", file=sys.stderr) - - result = subprocess.run( - ["ninja", "-t", "compdb"], - capture_output=True, - cwd=root_dir, - ) - if result.returncode != 0: - print( - f"ninja -t compdb failed:\n{result.stderr.decode(errors='replace')}", - file=sys.stderr, - ) - return None - try: - return json.loads(result.stdout) - except json.JSONDecodeError as e: - print(f"Failed to parse ninja compdb output: {e}", file=sys.stderr) - return None - - -def get_build_command(target_path: str) -> Optional[str]: - """Return the final ninja command used to build target_path.""" - result = subprocess.run( - ["ninja", "-t", "commands", target_path], - capture_output=True, - cwd=root_dir, - ) - if result.returncode != 0: - print( - f"ninja -t commands failed:\n{result.stderr.decode(errors='replace')}", - file=sys.stderr, - ) - return None - - commands = [line.strip() for line in result.stdout.decode().splitlines() if line.strip()] - return commands[-1] if commands else None - - -def find_entry( - compdb: List[Dict[str, Any]], source_path: str -) -> Optional[Dict[str, Any]]: - """Find the compdb entry whose 'file' matches source_path. - - Prefers entries whose output is a .o file (actual compiler invocations) - over auxiliary entries (e.g. hash generation). - """ - abs_source = os.path.normcase(os.path.abspath(os.path.join(root_dir, source_path))) - candidates = [] - for entry in compdb: - file_val = entry.get("file", "") - if not os.path.isabs(file_val): - entry_dir = entry.get("directory", root_dir) - file_val = os.path.abspath(os.path.join(entry_dir, file_val)) - if os.path.normcase(file_val) == abs_source: - candidates.append(entry) - for entry in candidates: - out = entry.get("output", "") - if out.endswith(".o") or out.endswith(".obj"): - return entry - return candidates[0] if candidates else None - - -def get_command(entry: Dict[str, Any]) -> Command: - command = entry.get("command") - if isinstance(command, str): - return command - - arguments = entry.get("arguments") - if isinstance(arguments, list): - return arguments[:] - - print( - "Compilation entry is missing both 'command' and 'arguments'", - file=sys.stderr, - ) - sys.exit(1) - - -def strip_transform_dep(command: Command) -> Command: - """Remove the `&& python transform_dep.py ...` step from a compile command. - - The dependency file transformation is only needed for incremental ninja - builds; it is safe to skip for one-off temp compilations. - """ - if isinstance(command, list): - return command - return re.sub( - r"\s*&&\s*\S*python3?\S*\s+\S*transform_dep\.py\s+\S+\s+\S+", - "", - command, - ) - - -def find_output_argument(command: Command) -> Optional[Tuple[int, str]]: - if isinstance(command, list): - for i in range(len(command) - 1): - if command[i] == "-o": - return i + 1, command[i + 1] - return None - - m = re.search(r"(? Command: - """Replace the compiler output path in command with new_output. - - Handles two styles: - - Direct file output (-o path/to/file.o): ngccc/ProDG, MSVC, EE-GCC - - Directory output (-o path/to/dir): mwcc (MWCC outputs to a dir) - """ - output_arg = find_output_argument(command) - if output_arg is None: - print("Could not find -o argument in compile command", file=sys.stderr) - sys.exit(1) - - index, o_arg = output_arg - - if o_arg.endswith(".o") or o_arg.endswith(".obj"): - replacement = new_output - else: - replacement = os.path.dirname(new_output) - - if isinstance(command, list): - new_command = command[:] - new_command[index] = replacement - return new_command - - return command[:index] + replacement + command[index + len(o_arg) :] - - -def actual_output_path(command: Command, source_path: str, new_output: str) -> str: - """Return the path where the compiled .o actually lands. - - For direct-file compilers this is new_output. For directory-output - compilers it is /.o. - """ - output_arg = find_output_argument(command) - if output_arg is None: - return new_output - _, o_arg = output_arg - if o_arg.endswith(".o") or o_arg.endswith(".obj"): - return new_output - stem = os.path.splitext(os.path.basename(source_path))[0] - return os.path.join(os.path.dirname(new_output), stem + ".o") - - -def compile_unit(unit_name: str, output_path: str) -> str: - """Compile unit to output_path and return the actual .o path.""" - if not os.path.exists(OBJDIFF_JSON): - print( - "objdiff.json not found. Run: python configure.py && ninja all_source", - file=sys.stderr, - ) - sys.exit(1) - - config = load_objdiff() - source_path = find_unit_source(config, unit_name) - target_path = find_unit_target(config, unit_name) - if not source_path: - print( - f"No source_path found for unit '{unit_name}' in objdiff.json.\n" - "The unit may not have a source file yet (missing implementation).", - file=sys.stderr, - ) - sys.exit(1) - if not target_path: - print( - f"No target_path found for unit '{unit_name}' in objdiff.json.", - file=sys.stderr, - ) - sys.exit(1) - - if not os.path.exists(BUILD_NINJA): - print( - "build.ninja not found. Run: python configure.py && ninja all_source", - file=sys.stderr, - ) - sys.exit(1) - - command = get_build_command(target_path) - if command is None: - print( - f"No build command found for target '{target_path}'.\n" - "Make sure the unit exists and `python configure.py` has been run.", - file=sys.stderr, - ) - sys.exit(1) - - # 1. Strip the dependency-file transform step — not needed for temp builds. - command = strip_transform_dep(command) - - # 2. Determine the actual output path before modifying the command. - actual = actual_output_path(command, source_path, output_path) - - # 3. Ensure the output directory exists. - out_dir = os.path.dirname(actual) - if out_dir: - os.makedirs(out_dir, exist_ok=True) - - # 4. Redirect the compiler output. - command = redirect_output(command, source_path, output_path) - - # 5. Run the compile. - result = subprocess.run(command, shell=isinstance(command, str), cwd=root_dir) - if result.returncode != 0: - print( - f"Compilation failed (exit code {result.returncode})", file=sys.stderr - ) - sys.exit(1) - - return actual - - -def main() -> None: - parser = argparse.ArgumentParser( - description=( - "Compile a translation unit to a temporary or specified .o file. " - "Safe to run in parallel — each call produces an independent output." - ) - ) - parser.add_argument( - "-u", - "--unit", - required=True, - help="Unit name (e.g. main/Speed/Indep/SourceLists/zAnim)", - ) - parser.add_argument( - "-o", - "--output", - help="Explicit output .o path (default: auto-generated temp file)", - ) - args = parser.parse_args() - - if args.output: - output_path = os.path.abspath(args.output) - else: - unit_stem = os.path.basename(args.unit) - fd, output_path = tempfile.mkstemp( - prefix=f"nfsmw_{unit_stem}_", - suffix=".o", - ) - os.close(fd) - - actual = compile_unit(args.unit, output_path) - print(actual) - - -if __name__ == "__main__": - main() From 718ab67aa4093f67f585863ac978f88b12350329 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 17:44:32 +0100 Subject: [PATCH 197/691] Add merge rollout helper Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- tools/merge-main-rollout.py | 327 ++++++++++++++++++++++++++++++++++++ 1 file changed, 327 insertions(+) create mode 100644 tools/merge-main-rollout.py diff --git a/tools/merge-main-rollout.py b/tools/merge-main-rollout.py new file mode 100644 index 000000000..4848fbdfd --- /dev/null +++ b/tools/merge-main-rollout.py @@ -0,0 +1,327 @@ +#!/usr/bin/env python3 + +""" +Safely merge a base branch into recent local branches and open-PR branches. + +Examples: + python tools/merge-main-rollout.py --base main --recent-hours 5 --pr-repo dbalatoni13/nfsmw --dry-run + python tools/merge-main-rollout.py --base main --recent-hours 5 --pr-repo dbalatoni13/nfsmw +""" + +import argparse +import json +import os +import shutil +import subprocess +import sys +import tempfile +import time +from dataclasses import dataclass, field +from typing import Dict, List, Optional, Sequence, Set, Tuple + +from _common import ROOT_DIR, format_subprocess_error + + +TRAILER = "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>" + + +class RolloutError(RuntimeError): + pass + + +@dataclass +class TargetBranch: + name: str + reasons: Set[str] = field(default_factory=set) + + +@dataclass +class MergeResult: + branch: str + status: str + detail: str + + +def run_capture(cmd: Sequence[str], cwd: str = ROOT_DIR) -> subprocess.CompletedProcess[str]: + result = subprocess.run( + cmd, + cwd=cwd, + text=True, + capture_output=True, + ) + if result.returncode != 0: + raise RolloutError(format_subprocess_error(cmd, result.returncode, result.stdout, result.stderr)) + return result + + +def run_stream(cmd: Sequence[str], cwd: str = ROOT_DIR) -> None: + result = subprocess.run(cmd, cwd=cwd, text=True) + if result.returncode != 0: + raise RolloutError(format_subprocess_error(cmd, result.returncode)) + + +def git_common_dir() -> str: + return run_capture(["git", "rev-parse", "--git-common-dir"]).stdout.strip() + + +def get_worktrees() -> Dict[str, str]: + result = run_capture(["git", "worktree", "list", "--porcelain"]) + worktrees: Dict[str, str] = {} + current: Dict[str, str] = {} + for line in result.stdout.splitlines(): + if not line: + branch = current.get("branch", "") + worktree = current.get("worktree") + if branch.startswith("refs/heads/") and worktree: + worktrees[branch.replace("refs/heads/", "", 1)] = worktree + current = {} + continue + key, _, value = line.partition(" ") + current[key] = value + if current: + branch = current.get("branch", "") + worktree = current.get("worktree") + if branch.startswith("refs/heads/") and worktree: + worktrees[branch.replace("refs/heads/", "", 1)] = worktree + return worktrees + + +def worktree_dirty(path: str) -> bool: + result = run_capture(["git", "status", "--short"], cwd=path) + return bool(result.stdout.strip()) + + +def get_recent_local_branches(hours: float) -> List[str]: + threshold = int(time.time() - hours * 3600.0) + result = run_capture( + [ + "git", + "for-each-ref", + "--format=%(refname:short)\t%(committerdate:unix)", + "refs/heads", + ] + ) + recent: List[str] = [] + for line in result.stdout.splitlines(): + if not line.strip(): + continue + name, _, ts = line.partition("\t") + if not name or not ts: + continue + if int(ts) >= threshold: + recent.append(name) + return recent + + +def get_open_pr_branches(repo: str) -> List[Tuple[str, str]]: + result = run_capture( + [ + "gh", + "pr", + "list", + "--repo", + repo, + "--state", + "open", + "--limit", + "100", + "--json", + "headRefName,headRepositoryOwner", + ] + ) + data = json.loads(result.stdout) + refs: List[Tuple[str, str]] = [] + for entry in data: + branch = entry.get("headRefName") + owner = ((entry.get("headRepositoryOwner") or {}).get("login") or "").strip() + if branch: + refs.append((branch, owner)) + return refs + + +def local_branch_exists(branch: str) -> bool: + result = subprocess.run( + ["git", "show-ref", "--verify", "--quiet", f"refs/heads/{branch}"], + cwd=ROOT_DIR, + text=True, + ) + return result.returncode == 0 + + +def discover_targets(base: str, recent_hours: float, pr_repos: Sequence[str]) -> Dict[str, TargetBranch]: + targets: Dict[str, TargetBranch] = {} + for branch in get_recent_local_branches(recent_hours): + if branch == base: + continue + target = targets.setdefault(branch, TargetBranch(branch)) + target.reasons.add(f"recent<={recent_hours:g}h") + + for repo in pr_repos: + for branch, owner in get_open_pr_branches(repo): + if branch == base: + continue + target = targets.setdefault(branch, TargetBranch(branch)) + if owner: + target.reasons.add(f"open-pr:{repo}:{owner}") + else: + target.reasons.add(f"open-pr:{repo}") + return targets + + +def ensure_temp_worktree(branch: str, temp_root: str) -> str: + os.makedirs(temp_root, exist_ok=True) + path = tempfile.mkdtemp(prefix=f"{branch.replace('/', '_')}_", dir=temp_root) + try: + run_capture(["git", "worktree", "add", path, branch]) + except Exception: + shutil.rmtree(path, ignore_errors=True) + raise + return path + + +def remove_temp_worktree(path: str) -> None: + result = subprocess.run( + ["git", "worktree", "remove", "--force", path], + cwd=ROOT_DIR, + text=True, + capture_output=True, + ) + if result.returncode != 0: + shutil.rmtree(path, ignore_errors=True) + + +def merge_into_branch(branch: str, base: str, path: str) -> MergeResult: + before = run_capture(["git", "rev-parse", "HEAD"], cwd=path).stdout.strip() + merge_message = f"Merge {base} into {branch}\n\n{TRAILER}" + result = subprocess.run( + ["git", "merge", "--no-ff", base, "-m", merge_message], + cwd=path, + text=True, + capture_output=True, + ) + if result.returncode != 0: + subprocess.run(["git", "merge", "--abort"], cwd=path, text=True, capture_output=True) + return MergeResult( + branch=branch, + status="conflict", + detail=(result.stderr.strip() or result.stdout.strip() or "merge failed"), + ) + + after = run_capture(["git", "rev-parse", "HEAD"], cwd=path).stdout.strip() + if before == after: + return MergeResult(branch=branch, status="up-to-date", detail="already contained base") + return MergeResult(branch=branch, status="merged", detail=after) + + +def rollout( + base: str, + recent_hours: float, + pr_repos: Sequence[str], + dry_run: bool, +) -> List[MergeResult]: + targets = discover_targets(base, recent_hours, pr_repos) + worktrees = get_worktrees() + temp_root = os.path.join(git_common_dir(), "merge-rollout-worktrees") + results: List[MergeResult] = [] + + for branch in sorted(targets): + if branch == base: + continue + + target = targets[branch] + reason_text = ", ".join(sorted(target.reasons)) + + if not local_branch_exists(branch): + results.append( + MergeResult(branch=branch, status="skipped", detail=f"no local branch ({reason_text})") + ) + continue + + existing_path = worktrees.get(branch) + temp_path: Optional[str] = None + path = existing_path + try: + if existing_path: + if worktree_dirty(existing_path): + results.append( + MergeResult( + branch=branch, + status="skipped", + detail=f"dirty worktree: {existing_path} ({reason_text})", + ) + ) + continue + else: + temp_path = ensure_temp_worktree(branch, temp_root) + path = temp_path + + assert path is not None + if dry_run: + location = existing_path if existing_path else temp_path + results.append( + MergeResult( + branch=branch, + status="would-merge", + detail=f"{location} ({reason_text})", + ) + ) + continue + + results.append(merge_into_branch(branch, base, path)) + finally: + if temp_path is not None: + remove_temp_worktree(temp_path) + + return results + + +def print_results(results: Sequence[MergeResult]) -> None: + print(f"{'BRANCH':<40} {'STATUS':<12} DETAIL") + print("-" * 120) + for result in results: + print(f"{result.branch:<40} {result.status:<12} {result.detail}") + + +def build_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser( + description="Safely merge a base branch into recent local branches and local open-PR branches.", + ) + parser.add_argument("--base", default="main", help="Base branch to merge from (default: main)") + parser.add_argument( + "--recent-hours", + type=float, + default=5.0, + help="Include local branches with commits in the last N hours (default: 5)", + ) + parser.add_argument( + "--pr-repo", + action="append", + default=[], + help="GitHub repo in OWNER/REPO form; include open PR head branches if they exist locally", + ) + parser.add_argument( + "--dry-run", + action="store_true", + help="Discover and print targets without merging", + ) + return parser + + +def main() -> None: + parser = build_parser() + args = parser.parse_args() + try: + results = rollout( + base=args.base, + recent_hours=args.recent_hours, + pr_repos=args.pr_repo, + dry_run=args.dry_run, + ) + print_results(results) + except RolloutError as e: + print(e, file=sys.stderr) + sys.exit(1) + + +if __name__ == "__main__": + main() From 9ff950b49f1c28851c4fe21bed3e4242ba108bb6 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 17:49:22 +0100 Subject: [PATCH 198/691] Support dirty merge rollout Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- tools/merge-main-rollout.py | 79 +++++++++++++++++++++++++++++++------ 1 file changed, 68 insertions(+), 11 deletions(-) diff --git a/tools/merge-main-rollout.py b/tools/merge-main-rollout.py index 4848fbdfd..2f2afeeda 100644 --- a/tools/merge-main-rollout.py +++ b/tools/merge-main-rollout.py @@ -190,27 +190,56 @@ def remove_temp_worktree(path: str) -> None: shutil.rmtree(path, ignore_errors=True) -def merge_into_branch(branch: str, base: str, path: str) -> MergeResult: +def merge_in_progress(path: str) -> bool: + result = subprocess.run( + ["git", "rev-parse", "-q", "--verify", "MERGE_HEAD"], + cwd=path, + text=True, + capture_output=True, + ) + return result.returncode == 0 + + +def merge_into_branch(branch: str, base: str, path: str, allow_dirty: bool) -> MergeResult: before = run_capture(["git", "rev-parse", "HEAD"], cwd=path).stdout.strip() + dirty_before = worktree_dirty(path) merge_message = f"Merge {base} into {branch}\n\n{TRAILER}" + cmd = ["git", "merge", "--no-ff"] + if allow_dirty and dirty_before: + cmd.append("--autostash") + cmd.extend([base, "-m", merge_message]) result = subprocess.run( - ["git", "merge", "--no-ff", base, "-m", merge_message], + cmd, cwd=path, text=True, capture_output=True, ) if result.returncode != 0: - subprocess.run(["git", "merge", "--abort"], cwd=path, text=True, capture_output=True) + if merge_in_progress(path): + subprocess.run(["git", "merge", "--abort"], cwd=path, text=True, capture_output=True) + return MergeResult( + branch=branch, + status="conflict", + detail=(result.stderr.strip() or result.stdout.strip() or "merge failed"), + ) return MergeResult( branch=branch, - status="conflict", + status="restore-conflict" if dirty_before else "failed", detail=(result.stderr.strip() or result.stdout.strip() or "merge failed"), ) after = run_capture(["git", "rev-parse", "HEAD"], cwd=path).stdout.strip() if before == after: - return MergeResult(branch=branch, status="up-to-date", detail="already contained base") - return MergeResult(branch=branch, status="merged", detail=after) + status = "up-to-date-dirty" if dirty_before else "up-to-date" + detail = "already contained base" + if dirty_before and allow_dirty: + detail += " (dirty changes preserved with autostash)" + return MergeResult(branch=branch, status=status, detail=detail) + status = "merged-dirty" if dirty_before else "merged" + detail = after + if dirty_before and allow_dirty: + detail += " (dirty changes preserved with autostash)" + return MergeResult(branch=branch, status=status, detail=detail) def rollout( @@ -218,6 +247,7 @@ def rollout( recent_hours: float, pr_repos: Sequence[str], dry_run: bool, + dirty_mode: str, ) -> List[MergeResult]: targets = discover_targets(base, recent_hours, pr_repos) worktrees = get_worktrees() @@ -242,7 +272,8 @@ def rollout( path = existing_path try: if existing_path: - if worktree_dirty(existing_path): + dirty = worktree_dirty(existing_path) + if dirty and dirty_mode == "skip": results.append( MergeResult( branch=branch, @@ -252,22 +283,41 @@ def rollout( ) continue else: + if dry_run: + location = f" ({reason_text})" + results.append( + MergeResult(branch=branch, status="would-merge", detail=location) + ) + continue temp_path = ensure_temp_worktree(branch, temp_root) path = temp_path assert path is not None if dry_run: - location = existing_path if existing_path else temp_path + dirty = worktree_dirty(path) + if dirty and dirty_mode == "autostash": + status = "would-merge-dirty" + location = f"{path} ({reason_text}; autostash)" + else: + status = "would-merge" + location = f"{path} ({reason_text})" results.append( MergeResult( branch=branch, - status="would-merge", - detail=f"{location} ({reason_text})", + status=status, + detail=location, ) ) continue - results.append(merge_into_branch(branch, base, path)) + results.append( + merge_into_branch( + branch, + base, + path, + allow_dirty=(dirty_mode == "autostash"), + ) + ) finally: if temp_path is not None: remove_temp_worktree(temp_path) @@ -304,6 +354,12 @@ def build_parser() -> argparse.ArgumentParser: action="store_true", help="Discover and print targets without merging", ) + parser.add_argument( + "--dirty-mode", + choices=["autostash", "skip"], + default="autostash", + help="How to handle dirty checked-out worktrees (default: autostash)", + ) return parser @@ -316,6 +372,7 @@ def main() -> None: recent_hours=args.recent_hours, pr_repos=args.pr_repo, dry_run=args.dry_run, + dirty_mode=args.dirty_mode, ) print_results(results) except RolloutError as e: From e7f538205d204154c3c4a470af5578a015967031 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 18:59:07 +0100 Subject: [PATCH 199/691] Tune health checks and line ownership tooling Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/execute/SKILL.md | 4 + .github/skills/implement/SKILL.md | 14 ++ AGENTS.md | 18 ++ tools/_common.py | 1 + tools/decomp-context.py | 1 + tools/decomp-workflow.py | 99 ++++++++- tools/dwarf-compare.py | 354 +++++++++++++++++++++++++++++- tools/line_lookup.py | 2 +- 8 files changed, 484 insertions(+), 9 deletions(-) diff --git a/.github/skills/execute/SKILL.md b/.github/skills/execute/SKILL.md index b2cf62247..58e81937e 100644 --- a/.github/skills/execute/SKILL.md +++ b/.github/skills/execute/SKILL.md @@ -32,10 +32,14 @@ the main worker after reviewing the read-only findings. Before any work begins, establish a regression baseline: ```sh +python tools/decomp-workflow.py health --full main/Path/To/TU ninja # ensure clean build ninja baseline # snapshot current match state ``` +Add `--timings` to the `health --full` command when you are investigating slow worktrees +or unexpectedly expensive build/tool startup. + After modifying shared headers, check `ninja changes` to verify no regressions were introduced. An empty changeset means no regressions. If regressions appear, the shared header change must be reverted. diff --git a/.github/skills/implement/SKILL.md b/.github/skills/implement/SKILL.md index 1a68ccec5..25f56b926 100644 --- a/.github/skills/implement/SKILL.md +++ b/.github/skills/implement/SKILL.md @@ -26,6 +26,15 @@ functions unless the user explicitly wants a cleanup/refiner pass. Use the wrapper flow first throughout this skill. Drop to raw `decomp-context.py` or `decomp-diff.py` only when the wrapper is missing a specific flag or you are debugging. +On a new, suspicious, or recently updated worktree, start with: + +```sh +python tools/decomp-workflow.py health --full main/Path/To/TU +``` + +Add `--timings` when you need to understand why wrapper/tool startup or the shared build +smoke is slow. + ### 1a. decomp-context.py Preferred shortcut: @@ -189,6 +198,11 @@ python tools/decomp-workflow.py dwarf -u main/Path/To/TU -f FunctionName This gives you a normalized DWARF match percentage plus a diff-like report of what still differs between the original and rebuilt DWARF blocks for that function. +Pay attention to the `Range source ownership` summary there as well. It compares the +debug-line owner files for each DWARF `// Range:` block, which makes it much easier to +spot inlines that are coming from the wrong header or owner file. Exact line-number +agreement is a useful secondary hint, but file ownership is the first thing to check. + Manual fallback: After writing your code, you can also run the dwarf dump on the compiled output and then query your output dump with lookup.py to compare your decompiled functions against the originals. Since the address of the function you're working on can keep changing diff --git a/AGENTS.md b/AGENTS.md index ff958229f..ca49784a2 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -83,6 +83,11 @@ originates from, use this script against the compiler-generated debug line mappi See `.github/skills/line_lookup/SKILL.md` for the full workflow. +`line_lookup.py` now accepts both the original `0xADDR:` debug-line format and rebuilt +object exports written as bare `ADDR:` lines, so you can point it at +`symbols/debug_lines.txt` or at a rebuilt `debug_lines.txt` from +`tools/dwarf1_gcc_line_info.py`. + ### code-style — Repo-local style guidance When you are writing code, polishing code you already touched, or doing a style-review pass, @@ -148,6 +153,8 @@ Prefer this wrapper for routine agent-driven flows instead of manually chaining ```sh python tools/decomp-workflow.py health +python tools/decomp-workflow.py health --full main/Speed/Indep/SourceLists/zAnim +python tools/decomp-workflow.py health --full main/Speed/Indep/SourceLists/zAnim --timings python tools/decomp-workflow.py health --smoke-build main/Speed/Indep/SourceLists/zAnim python tools/decomp-workflow.py health --smoke-dtk main/Speed/Indep/SourceLists/zAnim python tools/decomp-workflow.py next --category game --limit 10 @@ -168,6 +175,12 @@ repeated command chaining and to standardize routine worktree preflight checks f once when that output is missing, so wrapper-first inspection works more often on half-prepared worktrees. +Use `health --full ` when you want one end-to-end tooling smoke test for a worktree. +It reuses a single shared build for the build smoke, DTK dump, rebuilt debug-line export, +and rebuilt `line_lookup.py` check, so it is faster and more representative than chaining +`--smoke-build` and `--smoke-dtk` separately. Add `--timings` when you are diagnosing a +slow worktree or compiler/tool startup. + In normal agent work, use the wrapper commands first. Drop to the raw backend tools only when you specifically need a backend-only flag, are debugging a wrapper/backend discrepancy, or are doing a final exhaustive check that the wrapper does not expose directly. @@ -223,6 +236,11 @@ whenever `verify` says the function is still failing the DWARF gate. This is the fastest way to see whether you are still missing locals, have the wrong inline body, or changed signature/type details even when the instruction diff already looks good. +It also compares the debug-line ownership of each `// Range:` block. Treat the +`Range source ownership` summary as the fast inline-placement check: file mismatches are +strong evidence that an inline body came from the wrong header or owner file. The exact +file+line count is stricter and mainly useful as a secondary hint, not as the main gate. + When working with these tools, do not just work around recurring friction silently. If you notice a clear, safe workflow or tooling improvement that would make future decomp work faster, shorter, or more reliable, prefer implementing that improvement as part of the task diff --git a/tools/_common.py b/tools/_common.py index 2acfbac2a..985a122bc 100644 --- a/tools/_common.py +++ b/tools/_common.py @@ -20,6 +20,7 @@ "-c", "ppc.calculatePoolRelocations=false", ] +RELOC_DIFF_CHOICES = ("none", "function", "data", "all") class ToolError(RuntimeError): diff --git a/tools/decomp-context.py b/tools/decomp-context.py index c2382602b..b13790ece 100644 --- a/tools/decomp-context.py +++ b/tools/decomp-context.py @@ -25,6 +25,7 @@ import sys from typing import Any, Dict, List, Optional, Tuple from _common import ( + RELOC_DIFF_CHOICES, ROOT_DIR, ToolError, build_objdiff_symbol_rows, diff --git a/tools/decomp-workflow.py b/tools/decomp-workflow.py index 9193425cd..84f2f83d5 100644 --- a/tools/decomp-workflow.py +++ b/tools/decomp-workflow.py @@ -26,10 +26,12 @@ import re import os import shlex +import shutil import subprocess import sys import tempfile -from typing import Any, Dict, List, Optional, Sequence +import time +from typing import Any, Dict, List, Optional, Sequence, Tuple from _common import ( BUILD_NINJA, OBJDIFF_JSON, @@ -59,6 +61,7 @@ DEBUG_SYMBOL_PROBE_MANGLED = "UpdateAll__6Cameraf" DEBUG_SYMBOL_PROBE_DEMANGLED = "Camera::UpdateAll(float)" DEBUG_SYMBOL_PROBE_GC_ADDR = "0x80065A84" +REBUILT_DEBUG_LINE_RE = re.compile(r"^\s*([0-9A-Fa-f]+)\s*:") LOW_MATCH_PRIORITY_THRESHOLD = 60.0 VERY_LOW_MATCH_PRIORITY_THRESHOLD = 40.0 HIGH_MATCH_CLEANUP_THRESHOLD = 85.0 @@ -321,6 +324,11 @@ def lookup_symbol_address(symbols_file: str, mangled_name: str) -> Optional[str] def command_health(args: argparse.Namespace) -> None: failures = 0 + timings: List[Tuple[str, float]] = [] + build_cache: Dict[str, str] = {} + + smoke_build_unit = args.smoke_build or args.full + smoke_dtk_unit = args.smoke_dtk or args.full print_section("Worktree Health") print(f"Root: {ROOT_DIR}") @@ -332,6 +340,20 @@ def report(ok: bool, label: str, detail: str) -> None: if not ok: failures += 1 + def timed(label: str, func): + start = time.monotonic() + try: + return func() + finally: + timings.append((label, time.monotonic() - start)) + + def build_shared_unit_cached(unit: str) -> str: + if unit in build_cache: + return build_cache[unit] + output_path = timed(f"build {unit}", lambda: build_shared_unit(unit)) + build_cache[unit] = output_path + return output_path + report( os.path.exists(BUILD_NINJA), "build.ninja", @@ -368,7 +390,7 @@ def report(ok: bool, label: str, detail: str) -> None: DTK if os.path.exists(DTK) else "missing (seed build/tools in this worktree)", ) try: - run_capture(python_tool("decomp-context.py", "--ghidra-check")) + timed("ghidra-check", lambda: run_capture(python_tool("decomp-context.py", "--ghidra-check"))) report(True, "ghidra", "GC + PS2 programs available") except WorkflowError as e: report(False, "ghidra", str(e)) @@ -418,10 +440,10 @@ def report(ok: bool, label: str, detail: str) -> None: except WorkflowError as e: report(False, "debug-lines", str(e)) - if args.smoke_build: + if smoke_build_unit: print_section("Build Smoke Test") try: - output_path = build_shared_unit(args.smoke_build) + output_path = build_shared_unit_cached(smoke_build_unit) report(True, "build", output_path) except WorkflowError as e: detail = str(e) @@ -429,17 +451,65 @@ def report(ok: bool, label: str, detail: str) -> None: detail += "\nHint: Run: python tools/share_worktree_assets.py bootstrap" report(False, "build", detail) - if args.smoke_dtk: + if smoke_dtk_unit: print_section("DTK Smoke Test") dump_path = None + debug_lines_dir = None try: - obj_path = build_shared_unit(args.smoke_dtk) - dump_path = dtk_dwarf_dump(obj_path) + obj_path = build_shared_unit_cached(smoke_dtk_unit) + dump_path = timed(f"dtk dump {smoke_dtk_unit}", lambda: dtk_dwarf_dump(obj_path)) report(True, "dtk", dump_path) except WorkflowError as e: report(False, "dtk", str(e)) + else: + try: + debug_lines_dir = tempfile.mkdtemp(prefix="nfsmw_health_debug_lines_") + timed( + f"debug-line export {smoke_dtk_unit}", + lambda: run_capture( + python_tool("dwarf1_gcc_line_info.py", obj_path, debug_lines_dir) + ), + ) + rebuilt_debug_lines = os.path.join(debug_lines_dir, "debug_lines.txt") + if not os.path.exists(rebuilt_debug_lines): + raise WorkflowError( + "rebuilt debug-line export did not produce debug_lines.txt" + ) + first_address = None + with open(rebuilt_debug_lines) as f: + for raw_line in f: + match = REBUILT_DEBUG_LINE_RE.match(raw_line) + if match is not None: + first_address = match.group(1) + break + if first_address is None: + raise WorkflowError( + "rebuilt debug-line export produced no address entries" + ) + result = timed( + f"rebuilt line lookup {smoke_dtk_unit}", + lambda: run_capture( + python_tool("line_lookup.py", rebuilt_debug_lines, first_address) + ), + ) + ok = "Exact match found" in result.stdout + detail = ( + f"rebuilt line export ok ({first_address})" + if ok + else "rebuilt line lookup output did not contain an exact match" + ) + report(ok, "rebuilt-debug-lines", detail) + except WorkflowError as e: + report(False, "rebuilt-debug-lines", str(e)) finally: maybe_remove(dump_path) + if debug_lines_dir is not None: + shutil.rmtree(debug_lines_dir, ignore_errors=True) + + if args.timings and timings: + print_section("Timings") + for label, elapsed in timings: + print(f"{elapsed:7.2f}s {label}") if failures: raise WorkflowError(f"Health check failed with {failures} issue(s)") @@ -829,6 +899,16 @@ def build_parser() -> argparse.ArgumentParser: "health", help="Check whether the current worktree is ready for GC and PS2 decomp work", ) + health.add_argument( + "--full", + metavar="UNIT", + nargs="?", + const=DEFAULT_SMOKE_UNIT, + help=( + "Run the full smoke path for one unit: shared build, dtk dump, rebuilt " + f"debug-line export, and rebuilt line lookup. If UNIT is omitted, uses {DEFAULT_SMOKE_UNIT}" + ), + ) health.add_argument( "--smoke-build", metavar="UNIT", @@ -839,6 +919,11 @@ def build_parser() -> argparse.ArgumentParser: f"{DEFAULT_SMOKE_UNIT}" ), ) + health.add_argument( + "--timings", + action="store_true", + help="Show wall-clock timings for the heavier health-check steps", + ) health.add_argument( "--smoke-dtk", metavar="UNIT", diff --git a/tools/dwarf-compare.py b/tools/dwarf-compare.py index 51f35ea9b..087389d78 100644 --- a/tools/dwarf-compare.py +++ b/tools/dwarf-compare.py @@ -11,14 +11,19 @@ """ import argparse +import contextlib import difflib +import io import json import os import re +import shutil import sys +import tempfile from typing import Any, Dict, Iterable, List, Optional, Sequence, Tuple from _common import ROOT_DIR, ToolError, find_objdiff_unit, load_objdiff_config, make_abs +from dwarf1_gcc_line_info import process_file as export_debug_lines from lookup import ( _candidate_func_names, _normalise_func_name, @@ -33,6 +38,10 @@ GC_DWARF = os.path.join(ROOT_DIR, "symbols", "Dwarf") DTK = os.path.join(ROOT_DIR, "build", "tools", "dtk") HEX_RE = re.compile(r"0x[0-9A-Fa-f]+") +RANGE_RE = re.compile(r"^(\s*)// Range:\s*(0x[0-9A-Fa-f]+)\s*->\s*(0x[0-9A-Fa-f]+)") +DEBUG_LINE_RE = re.compile( + r"^\s*(?:0x)?([0-9A-Fa-f]+):\s*(.+?)\s+\(line\s+(\d+)(?:,\s+column\s+(\d+))?\)\s*$" +) class DwarfCompareError(RuntimeError): @@ -227,6 +236,269 @@ def normalize_block(block: str) -> List[str]: return [normalize_line(line) for line in block.splitlines()] +def canonical_debug_path(debug_path: str) -> str: + normalized = debug_path.replace("\\", "/").strip() + lowered = normalized.lower().replace("\\", "/") + if "/src/" in lowered: + src_index = lowered.index("/src/") + suffix = normalized[src_index + len("/src/") :].lstrip("/") + return os.path.normpath("src/" + suffix).replace("\\", "/") + if "/speed/indep/" in lowered: + indep_index = lowered.index("/speed/indep/") + suffix = normalized[indep_index + len("/speed/indep/") :].lstrip("/") + return os.path.normpath("src/Speed/Indep/" + suffix.lstrip("/")).replace("\\", "/") + return os.path.normpath(normalized).replace("\\", "/") + + +def normalize_source_location(path: str, line_number: int) -> str: + normalized = os.path.normpath(path.replace("\\", "/")).replace("\\", "/").lower() + return f"{normalized}:{line_number}" + + +def parse_debug_lines_file(path: str) -> Dict[int, List[Dict[str, Any]]]: + entries: Dict[int, List[Dict[str, Any]]] = {} + with open(path) as f: + for raw_line in f: + line = raw_line.rstrip("\n") + match = DEBUG_LINE_RE.match(line) + if match is None: + continue + address = int(match.group(1), 16) + debug_path = match.group(2) + line_number = int(match.group(3)) + display_path = canonical_debug_path(debug_path) + entries.setdefault(address, []).append( + { + "address": address, + "debug_path": debug_path, + "display_path": display_path, + "line_number": line_number, + "normalized_file": os.path.normpath(display_path.replace("\\", "/")) + .replace("\\", "/") + .lower(), + "normalized": normalize_source_location(display_path, line_number), + } + ) + return entries + + +def dedupe_source_locations(locations: Sequence[Dict[str, Any]]) -> List[str]: + deduped: List[str] = [] + seen = set() + for entry in locations: + rendered = f"{entry['display_path']}:{entry['line_number']}" + if rendered in seen: + continue + seen.add(rendered) + deduped.append(rendered) + return deduped + + +def dedupe_source_files(locations: Sequence[Dict[str, Any]]) -> List[str]: + deduped: List[str] = [] + seen = set() + for entry in locations: + normalized_file = entry["normalized_file"] + if normalized_file in seen: + continue + seen.add(normalized_file) + deduped.append(entry["display_path"]) + return deduped + + +def render_list(items: Sequence[str], limit: int = 6) -> str: + if not items: + return "" + if len(items) <= limit: + return ", ".join(items) + hidden = len(items) - limit + return f"{', '.join(items[:limit])}, ... (+{hidden} more)" + + +def build_debug_lines_file_for_object(obj_path: str) -> str: + temp_dir = tempfile.mkdtemp(prefix="nfsmw_debug_lines_") + with contextlib.redirect_stdout(io.StringIO()): + export_debug_lines(obj_path, temp_dir) + debug_lines_path = os.path.join(temp_dir, "debug_lines.txt") + if not os.path.exists(debug_lines_path): + raise DwarfCompareError("failed to export rebuilt debug lines") + return debug_lines_path + + +def collect_range_entries(block: str) -> List[Dict[str, Any]]: + lines = block.splitlines() + entries: List[Dict[str, Any]] = [] + for idx, line in enumerate(lines): + match = RANGE_RE.match(line) + if match is None: + continue + signature = "" + for follow in lines[idx + 1 :]: + stripped = follow.strip() + if not stripped or stripped.startswith("//"): + continue + signature = stripped.split("{")[0].strip() + break + entries.append( + { + "line_index": idx + 1, + "indent": len(match.group(1)) // 4, + "start_address": int(match.group(2), 16), + "end_address": int(match.group(3), 16), + "signature": signature, + } + ) + return entries + + +def normalized_signature_key(signature: str) -> str: + signature = signature.strip() + if not signature: + return "" + return normalize_line(signature) + + +def align_range_entries( + original_entries: Sequence[Dict[str, Any]], + rebuilt_entries: Sequence[Dict[str, Any]], +) -> List[Tuple[Optional[Dict[str, Any]], Optional[Dict[str, Any]]]]: + original_keys = [ + f"{entry['indent']}|{normalized_signature_key(entry['signature'])}" for entry in original_entries + ] + rebuilt_keys = [ + f"{entry['indent']}|{normalized_signature_key(entry['signature'])}" for entry in rebuilt_entries + ] + matcher = difflib.SequenceMatcher(a=original_keys, b=rebuilt_keys) + aligned: List[Tuple[Optional[Dict[str, Any]], Optional[Dict[str, Any]]]] = [] + for tag, i1, i2, j1, j2 in matcher.get_opcodes(): + if tag == "equal": + for orig, reb in zip(original_entries[i1:i2], rebuilt_entries[j1:j2]): + aligned.append((orig, reb)) + elif tag == "replace": + max_len = max(i2 - i1, j2 - j1) + for offset in range(max_len): + orig = original_entries[i1 + offset] if i1 + offset < i2 else None + reb = rebuilt_entries[j1 + offset] if j1 + offset < j2 else None + aligned.append((orig, reb)) + elif tag == "delete": + for orig in original_entries[i1:i2]: + aligned.append((orig, None)) + elif tag == "insert": + for reb in rebuilt_entries[j1:j2]: + aligned.append((None, reb)) + return aligned + + +def build_range_source_summary( + original_block: FunctionBlock, + rebuilt_block: FunctionBlock, + rebuilt_debug_lines_path: Optional[str], +) -> Dict[str, Any]: + if not rebuilt_debug_lines_path or not os.path.exists(rebuilt_debug_lines_path): + return {"available": False} + original_debug_lines_path = os.path.join(ROOT_DIR, "symbols", "debug_lines.txt") + if not os.path.exists(original_debug_lines_path): + return {"available": False} + + original_entries = collect_range_entries(original_block[3]) + rebuilt_entries = collect_range_entries(rebuilt_block[3]) + aligned_entries = align_range_entries(original_entries, rebuilt_entries) + original_debug_lines = parse_debug_lines_file(original_debug_lines_path) + rebuilt_debug_lines = parse_debug_lines_file(rebuilt_debug_lines_path) + + rows: List[Dict[str, Any]] = [] + file_match_count = 0 + exact_match_count = 0 + for original_entry, rebuilt_entry in aligned_entries: + original_items = ( + original_debug_lines.get(int(original_entry["start_address"]), []) + if original_entry is not None + else [] + ) + rebuilt_items = ( + rebuilt_debug_lines.get(int(rebuilt_entry["start_address"]), []) + if rebuilt_entry is not None + else [] + ) + original_locations = ( + dedupe_source_locations(original_items) if original_entry is not None else [] + ) + rebuilt_locations = ( + dedupe_source_locations(rebuilt_items) if rebuilt_entry is not None else [] + ) + original_files_display = ( + dedupe_source_files(original_items) if original_entry is not None else [] + ) + rebuilt_files_display = ( + dedupe_source_files(rebuilt_items) if rebuilt_entry is not None else [] + ) + original_norm = { + item["normalized"] + for item in original_items + } if original_entry is not None else set() + original_files = { + item["normalized_file"] + for item in original_items + } if original_entry is not None else set() + rebuilt_norm = { + item["normalized"] + for item in rebuilt_items + } if rebuilt_entry is not None else set() + rebuilt_files = { + item["normalized_file"] + for item in rebuilt_items + } if rebuilt_entry is not None else set() + common_files = [ + path + for path in original_files_display + if os.path.normpath(path.replace("\\", "/")).replace("\\", "/").lower() + in rebuilt_files + ] + original_only_files = [ + path + for path in original_files_display + if os.path.normpath(path.replace("\\", "/")).replace("\\", "/").lower() + not in rebuilt_files + ] + rebuilt_only_files = [ + path + for path in rebuilt_files_display + if os.path.normpath(path.replace("\\", "/")).replace("\\", "/").lower() + not in original_files + ] + if original_entry is not None and rebuilt_entry is not None and original_files == rebuilt_files: + file_status = "match" + file_match_count += 1 + else: + file_status = "mismatch" + if original_entry is not None and rebuilt_entry is not None and original_norm == rebuilt_norm: + exact_status = "match" + exact_match_count += 1 + else: + exact_status = "mismatch" + rows.append( + { + "file_status": file_status, + "exact_status": exact_status, + "indent": (original_entry or rebuilt_entry or {}).get("indent", 0), + "line_number": (original_entry or rebuilt_entry or {}).get("line_index"), + "signature": (original_entry or rebuilt_entry or {}).get("signature", ""), + "original_locations": original_locations, + "rebuilt_locations": rebuilt_locations, + "common_files": common_files, + "original_only_files": original_only_files, + "rebuilt_only_files": rebuilt_only_files, + } + ) + return { + "available": True, + "rows": rows, + "total": len(rows), + "file_matches": file_match_count, + "exact_matches": exact_match_count, + } + + def count_lines_for_opcodes(opcodes: Sequence[Tuple[str, int, int, int, int]]) -> Dict[str, int]: matching = 0 original_only = 0 @@ -297,6 +569,7 @@ def build_report( rebuilt_block: FunctionBlock, collapse: bool, context: int, + rebuilt_debug_lines_path: Optional[str], ) -> Dict[str, Any]: original_raw = original_block[3].splitlines() rebuilt_raw = rebuilt_block[3].splitlines() @@ -345,6 +618,12 @@ def build_report( f"- {original_span} -> {rebuilt_span}: {detail}" ) + range_sources = build_range_source_summary( + original_block, + rebuilt_block, + rebuilt_debug_lines_path=rebuilt_debug_lines_path, + ) + return { "unit": unit_name, "function": function_name, @@ -364,6 +643,7 @@ def build_report( "original_range": [original_block[0], original_block[1]], "rebuilt_range": [rebuilt_block[0], rebuilt_block[1]], "mismatch_summaries": mismatch_summaries, + "range_sources": range_sources, "diff_lines": diff_lines, } @@ -392,6 +672,17 @@ def print_summary(report: Dict[str, Any]) -> None: "Address-only range differences are normalized out so the percentage tracks " "structural/function-body DWARF changes." ) + if report["range_sources"].get("available"): + line_drifts = report["range_sources"]["file_matches"] - report["range_sources"]["exact_matches"] + print( + f"Range source ownership: files agree {report['range_sources']['file_matches']}/" + f"{report['range_sources']['total']}" + f" | file mismatches {report['range_sources']['total'] - report['range_sources']['file_matches']}/" + f"{report['range_sources']['total']}" + f" | line drifts {line_drifts}/{report['range_sources']['total']}" + ) + else: + print("Range source ownership: unavailable (missing debug-line export data)") if not report["signature_match"]: print() print("Original signature:") @@ -401,6 +692,55 @@ def print_summary(report: Dict[str, Any]) -> None: def print_diff(report: Dict[str, Any]) -> None: + if not report["range_sources"].get("available"): + file_mismatches = [] + line_drifts = [] + elif report["range_sources"]["rows"]: + file_mismatches = [ + row for row in report["range_sources"]["rows"] if row["file_status"] != "match" + ] + line_drifts = [ + row + for row in report["range_sources"]["rows"] + if row["file_status"] == "match" and row["exact_status"] != "match" + ] + else: + file_mismatches = [] + line_drifts = [] + + if file_mismatches: + print_section("Range Source Ownership") + for row in file_mismatches: + location = f"L{row['line_number']:04d}" if row["line_number"] else "L????" + print(f"- {location} {row['signature']}") + if row["common_files"]: + print(f" common files: {render_list(row['common_files'])}") + if row["original_only_files"]: + print( + f" original-only files: {render_list(row['original_only_files'])}" + ) + if row["rebuilt_only_files"]: + print( + f" rebuilt-only files: {render_list(row['rebuilt_only_files'])}" + ) + print( + f" original lines: {render_list(row['original_locations'])}" + ) + print( + f" rebuilt lines: {render_list(row['rebuilt_locations'])}" + ) + if line_drifts: + print() + print( + f"Additionally, {len(line_drifts)}/{report['range_sources']['total']} ranges keep " + "the same source files but drift on line numbers." + ) + elif line_drifts: + print_section("Range Source Ownership") + print( + "All range starts resolve to the same source files; line numbers drift " + f"for {len(line_drifts)}/{report['range_sources']['total']} ranges." + ) if report["mismatch_summaries"]: print_section("Mismatch Summary") for line in report["mismatch_summaries"]: @@ -463,12 +803,14 @@ def main() -> None: args = parser.parse_args() rebuilt_dwarf_path: Optional[str] = None + rebuilt_debug_lines_path: Optional[str] = None cleanup_rebuilt_dwarf = False + cleanup_rebuilt_debug_lines_dir = False try: + obj_path = get_unit_build_output(args.unit) if args.rebuilt_dwarf_file: rebuilt_dwarf_path = os.path.abspath(args.rebuilt_dwarf_file) else: - obj_path = get_unit_build_output(args.unit) if not os.path.exists(obj_path): raise DwarfCompareError( f"Missing built object for {args.unit}: {obj_path}\n" @@ -478,6 +820,13 @@ def main() -> None: rebuilt_dwarf_path = dtk_dwarf_dump(obj_path) cleanup_rebuilt_dwarf = True + if os.path.exists(obj_path): + try: + rebuilt_debug_lines_path = build_debug_lines_file_for_object(obj_path) + cleanup_rebuilt_debug_lines_dir = True + except Exception: + rebuilt_debug_lines_path = None + original_funcs = load_function_blocks(GC_DWARF, folder_mode=True) rebuilt_funcs = load_function_blocks(rebuilt_dwarf_path, folder_mode=False) @@ -491,6 +840,7 @@ def main() -> None: rebuilt_block, collapse=not args.no_collapse, context=args.context, + rebuilt_debug_lines_path=rebuilt_debug_lines_path, ) if args.json: @@ -511,6 +861,8 @@ def main() -> None: finally: if cleanup_rebuilt_dwarf: maybe_remove(rebuilt_dwarf_path) + if cleanup_rebuilt_debug_lines_dir and rebuilt_debug_lines_path: + shutil.rmtree(os.path.dirname(rebuilt_debug_lines_path), ignore_errors=True) if __name__ == "__main__": diff --git a/tools/line_lookup.py b/tools/line_lookup.py index 65aed6649..41890b877 100644 --- a/tools/line_lookup.py +++ b/tools/line_lookup.py @@ -21,7 +21,7 @@ def parse_map_file(filepath): with open(filepath, "r") as f: for line in f: line = line.rstrip("\n") - match = re.match(r"^\s*(0x[0-9A-Fa-f]+)\s*:", line) + match = re.match(r"^\s*((?:0x)?[0-9A-Fa-f]+)\s*:", line) if match: addr = int(match.group(1), 16) entries.append((addr, line)) From 6ac3c90906aba8b8db2298c69f1869362d4bc4b7 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 19:10:44 +0100 Subject: [PATCH 200/691] Add ELF address lookup tool Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/execute/SKILL.md | 1 + .github/skills/refiner/SKILL.md | 2 +- AGENTS.md | 16 +++ tools/elf_lookup.py | 174 ++++++++++++++++++++++++++++++++ 4 files changed, 192 insertions(+), 1 deletion(-) create mode 100644 tools/elf_lookup.py diff --git a/.github/skills/execute/SKILL.md b/.github/skills/execute/SKILL.md index 58e81937e..7abf9cb3f 100644 --- a/.github/skills/execute/SKILL.md +++ b/.github/skills/execute/SKILL.md @@ -115,6 +115,7 @@ For each missing or nonmatching function, follow the implementation workflow in implementing the next function reveals patterns that make the previous one click. - **Mismatch triage:** - `@stringBase0` offset mismatches often resolve as more string literals are added + - If you need to inspect the original string or rodata at a virtual address, use `python tools/elf_lookup.py 0xADDR` - Register swaps and stack layout issues require direct intervention - Branch structure mismatches indicate wrong control flow (if/switch/loop) - **Match percentage is misleading.** The last few percent are often the hardest. diff --git a/.github/skills/refiner/SKILL.md b/.github/skills/refiner/SKILL.md index 4d1fe1bb7..a6aeb2125 100644 --- a/.github/skills/refiner/SKILL.md +++ b/.github/skills/refiner/SKILL.md @@ -46,7 +46,7 @@ Read every instruction pair. Categorize each mismatch: | **Stack frame size** | Wrong frame size in prologue | Count locals in DWARF; remove temporaries not in DWARF | | **Float vs int sequence** | `xoris` present → field is `int`; absent → `uint` | Check field type in DWARF; change cast | | **`fmuls` operand order** | `fmuls fX, fX, fY` or `fmuls fX, fY, fX` | Try `v *= fY` vs `fY * v` explicitly | -| **Relocation offset** | `@stringBase0` or data offset differs | More string literals will shift this; add them in order | +| **Relocation offset** | `@stringBase0` or data offset differs | More string literals will shift this; add them in order. Use `python tools/elf_lookup.py 0xADDR` when you need to confirm the original string/rodata at a virtual address | | **Virtual vs direct call** | `bl` vs indirect through vtable | Check const-qualifier; use `GetFoo()` vs `Foo()` | | **Inline vs outlined** | Extra call to helper vs inlined sequence | Force inline by rewriting the expression without calling the helper | | **Loop structure** | Guarded `do/while` from Ghidra or mismatched loop branches | Rewrite to the natural source form suggested by the control flow; in particular, a guarded `do/while` often needs to become a plain `for` loop | diff --git a/AGENTS.md b/AGENTS.md index ca49784a2..bd8a1ec3a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -88,6 +88,20 @@ object exports written as bare `ADDR:` lines, so you can point it at `symbols/debug_lines.txt` or at a rebuilt `debug_lines.txt` from `tools/dwarf1_gcc_line_info.py`. +### elf_lookup.py — Resolve strings / rodata by virtual address + +When you have a virtual address inside the original ELF and need to know which string or +rodata bytes live there, use: + +```sh +python tools/elf_lookup.py 0x803E58F4 +python tools/elf_lookup.py 0x803E58F4 --mode bytes --length 32 +python tools/elf_lookup.py 0x002F1234 --game ps2 +``` + +This is the preferred replacement for ad-hoc Python snippets that manually parse the ELF +to chase `@stringBase0` or other rodata/data references. + ### code-style — Repo-local style guidance When you are writing code, polishing code you already touched, or doing a style-review pass, @@ -434,6 +448,8 @@ It's very important that you use math inlines from bMath and UMath as shown in t - When you have to use a constant that looks like an address, it's possible that the splitter thought it was an allocation and it shows up as a diff because the left side has a symbol and the right side has a constant. In this case you need to figure out the virtual address of the instruction and block the relocation in config.yml. +- When you need to confirm what lives at a rodata/data address from the original ELF, use + `python tools/elf_lookup.py 0xADDR` instead of writing a one-off Python script. ### PPC EABI calling convention diff --git a/tools/elf_lookup.py b/tools/elf_lookup.py new file mode 100644 index 000000000..de0840a15 --- /dev/null +++ b/tools/elf_lookup.py @@ -0,0 +1,174 @@ +#!/usr/bin/env python3 +""" +Look up string or raw bytes in an ELF by virtual address. + +Examples: + python tools/elf_lookup.py 0x803E58F4 + python tools/elf_lookup.py 803E58F4 --mode bytes --length 32 + python tools/elf_lookup.py 0x002F1234 --game ps2 + python tools/elf_lookup.py 0x803E58F4 --elf orig/GOWE69/NFSMWRELEASE.ELF +""" + +import argparse +import os +import string +import sys +from typing import Any, Dict, Optional + +from elftools.elf.elffile import ELFFile + +from _common import ROOT_DIR, ToolError + + +DEFAULT_ELF_BY_GAME = { + "gc": os.path.join(ROOT_DIR, "orig", "GOWE69", "NFSMWRELEASE.ELF"), + "ps2": os.path.join(ROOT_DIR, "orig", "SLES-53558-A124", "NFS.ELF"), +} + + +def parse_address(raw: str) -> int: + try: + return int(raw, 16) + except ValueError as exc: + raise ToolError(f"invalid hex address: {raw}") from exc + + +def choose_elf_path(args: argparse.Namespace) -> str: + if args.elf: + path = args.elf + if not os.path.isabs(path): + path = os.path.join(ROOT_DIR, path) + return os.path.abspath(path) + return DEFAULT_ELF_BY_GAME[args.game] + + +def find_section_for_address(elffile: ELFFile, address: int) -> Optional[Dict[str, Any]]: + for section in elffile.iter_sections(): + header = section.header + start = int(header["sh_addr"]) + size = int(header["sh_size"]) + if size <= 0: + continue + end = start + size + if start <= address < end: + return { + "name": section.name, + "address": start, + "size": size, + "offset": int(header["sh_offset"]), + "data": section.data(), + } + return None + + +def read_c_string(data: bytes, start_offset: int, max_bytes: int) -> bytes: + blob = data[start_offset : start_offset + max_bytes] + terminator = blob.find(b"\x00") + if terminator != -1: + blob = blob[:terminator] + return blob + + +def printable_ratio(blob: bytes) -> float: + if not blob: + return 1.0 + printable = set(string.printable.encode("ascii")) + hits = sum(1 for byte in blob if byte in printable and byte not in b"\x0b\x0c") + return hits / len(blob) + + +def decode_display_string(blob: bytes) -> str: + try: + return blob.decode("utf-8") + except UnicodeDecodeError: + return blob.decode("latin-1", errors="replace") + + +def format_hex_bytes(blob: bytes, width: int = 16) -> str: + lines = [] + for offset in range(0, len(blob), width): + chunk = blob[offset : offset + width] + hex_part = " ".join(f"{byte:02X}" for byte in chunk) + ascii_part = "".join(chr(byte) if 32 <= byte <= 126 else "." for byte in chunk) + lines.append(f" +0x{offset:04X}: {hex_part:<{width * 3}} {ascii_part}") + return "\n".join(lines) + + +def main() -> None: + parser = argparse.ArgumentParser( + description="Look up a string or raw bytes in an ELF by virtual address." + ) + parser.add_argument("address", help="Virtual address, with or without 0x prefix") + parser.add_argument( + "--game", + choices=sorted(DEFAULT_ELF_BY_GAME), + default="gc", + help="Shortcut for selecting the default GameCube or PS2 ELF (default: gc)", + ) + parser.add_argument( + "--elf", + help="Explicit ELF path. Overrides --game.", + ) + parser.add_argument( + "--mode", + choices=["string", "bytes"], + default="string", + help="Read a C string or raw bytes from the address (default: string)", + ) + parser.add_argument( + "--length", + type=int, + default=64, + help="Maximum bytes to read (default: 64)", + ) + args = parser.parse_args() + + address = parse_address(args.address) + elf_path = choose_elf_path(args) + if not os.path.exists(elf_path): + raise ToolError(f"ELF not found: {elf_path}") + + with open(elf_path, "rb") as f: + elffile = ELFFile(f) + section = find_section_for_address(elffile, address) + + if section is None: + raise ToolError( + f"address 0x{address:08X} is not inside any ELF section in {elf_path}" + ) + + section_offset = address - int(section["address"]) + file_offset = int(section["offset"]) + section_offset + section_data = section["data"] + + print(f"ELF: {os.path.relpath(elf_path, ROOT_DIR)}") + print(f"Address: 0x{address:08X}") + print( + f"Section: {section['name']} +0x{section_offset:X} " + f"(section VA 0x{int(section['address']):08X}, file offset 0x{file_offset:X})" + ) + + if args.mode == "string": + blob = read_c_string(section_data, section_offset, args.length) + display = decode_display_string(blob) + kind = "string" if printable_ratio(blob) >= 0.85 else "non-printable bytes" + print(f"Kind: {kind}") + print(f"Length: {len(blob)} byte(s)") + print(f"Value: {display!r}") + if blob: + print("Hex:") + print(format_hex_bytes(blob)) + return + + blob = section_data[section_offset : section_offset + args.length] + print(f"Length: {len(blob)} byte(s)") + print("Hex:") + print(format_hex_bytes(blob)) + + +if __name__ == "__main__": + try: + main() + except ToolError as exc: + print(f"Error: {exc}", file=sys.stderr) + sys.exit(1) From dfd359ec701c47d115d6266ed9fedecf45d47e34 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 19:10:44 +0100 Subject: [PATCH 201/691] Add ELF address lookup tool Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/execute/SKILL.md | 1 + .github/skills/refiner/SKILL.md | 2 +- AGENTS.md | 16 +++ tools/elf_lookup.py | 174 ++++++++++++++++++++++++++++++++ 4 files changed, 192 insertions(+), 1 deletion(-) create mode 100644 tools/elf_lookup.py diff --git a/.github/skills/execute/SKILL.md b/.github/skills/execute/SKILL.md index 58e81937e..7abf9cb3f 100644 --- a/.github/skills/execute/SKILL.md +++ b/.github/skills/execute/SKILL.md @@ -115,6 +115,7 @@ For each missing or nonmatching function, follow the implementation workflow in implementing the next function reveals patterns that make the previous one click. - **Mismatch triage:** - `@stringBase0` offset mismatches often resolve as more string literals are added + - If you need to inspect the original string or rodata at a virtual address, use `python tools/elf_lookup.py 0xADDR` - Register swaps and stack layout issues require direct intervention - Branch structure mismatches indicate wrong control flow (if/switch/loop) - **Match percentage is misleading.** The last few percent are often the hardest. diff --git a/.github/skills/refiner/SKILL.md b/.github/skills/refiner/SKILL.md index 4d1fe1bb7..a6aeb2125 100644 --- a/.github/skills/refiner/SKILL.md +++ b/.github/skills/refiner/SKILL.md @@ -46,7 +46,7 @@ Read every instruction pair. Categorize each mismatch: | **Stack frame size** | Wrong frame size in prologue | Count locals in DWARF; remove temporaries not in DWARF | | **Float vs int sequence** | `xoris` present → field is `int`; absent → `uint` | Check field type in DWARF; change cast | | **`fmuls` operand order** | `fmuls fX, fX, fY` or `fmuls fX, fY, fX` | Try `v *= fY` vs `fY * v` explicitly | -| **Relocation offset** | `@stringBase0` or data offset differs | More string literals will shift this; add them in order | +| **Relocation offset** | `@stringBase0` or data offset differs | More string literals will shift this; add them in order. Use `python tools/elf_lookup.py 0xADDR` when you need to confirm the original string/rodata at a virtual address | | **Virtual vs direct call** | `bl` vs indirect through vtable | Check const-qualifier; use `GetFoo()` vs `Foo()` | | **Inline vs outlined** | Extra call to helper vs inlined sequence | Force inline by rewriting the expression without calling the helper | | **Loop structure** | Guarded `do/while` from Ghidra or mismatched loop branches | Rewrite to the natural source form suggested by the control flow; in particular, a guarded `do/while` often needs to become a plain `for` loop | diff --git a/AGENTS.md b/AGENTS.md index ca49784a2..bd8a1ec3a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -88,6 +88,20 @@ object exports written as bare `ADDR:` lines, so you can point it at `symbols/debug_lines.txt` or at a rebuilt `debug_lines.txt` from `tools/dwarf1_gcc_line_info.py`. +### elf_lookup.py — Resolve strings / rodata by virtual address + +When you have a virtual address inside the original ELF and need to know which string or +rodata bytes live there, use: + +```sh +python tools/elf_lookup.py 0x803E58F4 +python tools/elf_lookup.py 0x803E58F4 --mode bytes --length 32 +python tools/elf_lookup.py 0x002F1234 --game ps2 +``` + +This is the preferred replacement for ad-hoc Python snippets that manually parse the ELF +to chase `@stringBase0` or other rodata/data references. + ### code-style — Repo-local style guidance When you are writing code, polishing code you already touched, or doing a style-review pass, @@ -434,6 +448,8 @@ It's very important that you use math inlines from bMath and UMath as shown in t - When you have to use a constant that looks like an address, it's possible that the splitter thought it was an allocation and it shows up as a diff because the left side has a symbol and the right side has a constant. In this case you need to figure out the virtual address of the instruction and block the relocation in config.yml. +- When you need to confirm what lives at a rodata/data address from the original ELF, use + `python tools/elf_lookup.py 0xADDR` instead of writing a one-off Python script. ### PPC EABI calling convention diff --git a/tools/elf_lookup.py b/tools/elf_lookup.py new file mode 100644 index 000000000..de0840a15 --- /dev/null +++ b/tools/elf_lookup.py @@ -0,0 +1,174 @@ +#!/usr/bin/env python3 +""" +Look up string or raw bytes in an ELF by virtual address. + +Examples: + python tools/elf_lookup.py 0x803E58F4 + python tools/elf_lookup.py 803E58F4 --mode bytes --length 32 + python tools/elf_lookup.py 0x002F1234 --game ps2 + python tools/elf_lookup.py 0x803E58F4 --elf orig/GOWE69/NFSMWRELEASE.ELF +""" + +import argparse +import os +import string +import sys +from typing import Any, Dict, Optional + +from elftools.elf.elffile import ELFFile + +from _common import ROOT_DIR, ToolError + + +DEFAULT_ELF_BY_GAME = { + "gc": os.path.join(ROOT_DIR, "orig", "GOWE69", "NFSMWRELEASE.ELF"), + "ps2": os.path.join(ROOT_DIR, "orig", "SLES-53558-A124", "NFS.ELF"), +} + + +def parse_address(raw: str) -> int: + try: + return int(raw, 16) + except ValueError as exc: + raise ToolError(f"invalid hex address: {raw}") from exc + + +def choose_elf_path(args: argparse.Namespace) -> str: + if args.elf: + path = args.elf + if not os.path.isabs(path): + path = os.path.join(ROOT_DIR, path) + return os.path.abspath(path) + return DEFAULT_ELF_BY_GAME[args.game] + + +def find_section_for_address(elffile: ELFFile, address: int) -> Optional[Dict[str, Any]]: + for section in elffile.iter_sections(): + header = section.header + start = int(header["sh_addr"]) + size = int(header["sh_size"]) + if size <= 0: + continue + end = start + size + if start <= address < end: + return { + "name": section.name, + "address": start, + "size": size, + "offset": int(header["sh_offset"]), + "data": section.data(), + } + return None + + +def read_c_string(data: bytes, start_offset: int, max_bytes: int) -> bytes: + blob = data[start_offset : start_offset + max_bytes] + terminator = blob.find(b"\x00") + if terminator != -1: + blob = blob[:terminator] + return blob + + +def printable_ratio(blob: bytes) -> float: + if not blob: + return 1.0 + printable = set(string.printable.encode("ascii")) + hits = sum(1 for byte in blob if byte in printable and byte not in b"\x0b\x0c") + return hits / len(blob) + + +def decode_display_string(blob: bytes) -> str: + try: + return blob.decode("utf-8") + except UnicodeDecodeError: + return blob.decode("latin-1", errors="replace") + + +def format_hex_bytes(blob: bytes, width: int = 16) -> str: + lines = [] + for offset in range(0, len(blob), width): + chunk = blob[offset : offset + width] + hex_part = " ".join(f"{byte:02X}" for byte in chunk) + ascii_part = "".join(chr(byte) if 32 <= byte <= 126 else "." for byte in chunk) + lines.append(f" +0x{offset:04X}: {hex_part:<{width * 3}} {ascii_part}") + return "\n".join(lines) + + +def main() -> None: + parser = argparse.ArgumentParser( + description="Look up a string or raw bytes in an ELF by virtual address." + ) + parser.add_argument("address", help="Virtual address, with or without 0x prefix") + parser.add_argument( + "--game", + choices=sorted(DEFAULT_ELF_BY_GAME), + default="gc", + help="Shortcut for selecting the default GameCube or PS2 ELF (default: gc)", + ) + parser.add_argument( + "--elf", + help="Explicit ELF path. Overrides --game.", + ) + parser.add_argument( + "--mode", + choices=["string", "bytes"], + default="string", + help="Read a C string or raw bytes from the address (default: string)", + ) + parser.add_argument( + "--length", + type=int, + default=64, + help="Maximum bytes to read (default: 64)", + ) + args = parser.parse_args() + + address = parse_address(args.address) + elf_path = choose_elf_path(args) + if not os.path.exists(elf_path): + raise ToolError(f"ELF not found: {elf_path}") + + with open(elf_path, "rb") as f: + elffile = ELFFile(f) + section = find_section_for_address(elffile, address) + + if section is None: + raise ToolError( + f"address 0x{address:08X} is not inside any ELF section in {elf_path}" + ) + + section_offset = address - int(section["address"]) + file_offset = int(section["offset"]) + section_offset + section_data = section["data"] + + print(f"ELF: {os.path.relpath(elf_path, ROOT_DIR)}") + print(f"Address: 0x{address:08X}") + print( + f"Section: {section['name']} +0x{section_offset:X} " + f"(section VA 0x{int(section['address']):08X}, file offset 0x{file_offset:X})" + ) + + if args.mode == "string": + blob = read_c_string(section_data, section_offset, args.length) + display = decode_display_string(blob) + kind = "string" if printable_ratio(blob) >= 0.85 else "non-printable bytes" + print(f"Kind: {kind}") + print(f"Length: {len(blob)} byte(s)") + print(f"Value: {display!r}") + if blob: + print("Hex:") + print(format_hex_bytes(blob)) + return + + blob = section_data[section_offset : section_offset + args.length] + print(f"Length: {len(blob)} byte(s)") + print("Hex:") + print(format_hex_bytes(blob)) + + +if __name__ == "__main__": + try: + main() + except ToolError as exc: + print(f"Error: {exc}", file=sys.stderr) + sys.exit(1) From 2dcd3a08c115dd4cf0bfba767a8849c55eb98007 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 19:15:37 +0100 Subject: [PATCH 202/691] Fix ProDG dep path rewriting Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- tools/transform_dep.py | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/tools/transform_dep.py b/tools/transform_dep.py index 124de04b9..36dbea004 100755 --- a/tools/transform_dep.py +++ b/tools/transform_dep.py @@ -13,6 +13,7 @@ import argparse import os +import re from platform import uname wineprefix = os.path.join(os.environ["HOME"], ".wine") @@ -27,6 +28,7 @@ def in_wsl() -> bool: def import_d_file(in_file: str) -> str: out_text = "" + build_root = os.getcwd() with open(in_file) as file: for idx, line in enumerate(file): @@ -42,19 +44,26 @@ def import_d_file(in_file: str) -> str: path = line.lstrip()[:-3] else: path = line.strip() - # lowercase drive letter - path = path[0].lower() + path[1:] - if path[0] == "z": - # shortcut for z: - path = path[2:].replace("\\", "/") - elif in_wsl(): - path = path[0:1] + path[2:] - path = os.path.join("/mnt", path.replace("\\", "/")) + path = path.replace("\\", "/") + if re.match(r"^[A-Za-z]:", path): + # lowercase drive letter for Windows-style absolute paths + path = path[0].lower() + path[1:] + if path[0] == "z": + # shortcut for z: + path = path[2:] + elif in_wsl(): + path = path[0:1] + path[2:] + path = os.path.join("/mnt", path) + else: + # use $WINEPREFIX/dosdevices to resolve path + path = os.path.realpath(os.path.join(winedevices, path)) + elif os.path.isabs(path): + path = os.path.realpath(path) else: - # use $WINEPREFIX/dosdevices to resolve path - path = os.path.realpath( - os.path.join(winedevices, path.replace("\\", "/")) - ) + # ProDG often emits repo-relative includes like src\Foo.h. + # Keep them anchored to the current build root instead of + # incorrectly treating them as Wine drive roots. + path = os.path.realpath(os.path.join(build_root, path)) out_text += "\t" + path + suffix + "\n" return out_text From 4aafb334420e5334a323abb42cff5070c9ae3e95 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 19:43:04 +0100 Subject: [PATCH 203/691] Clarify formatter allowlist semantics Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/code_style/SKILL.md | 8 ++++---- AGENTS.md | 8 ++++++-- README.md | 2 +- tools/code_style.py | 16 +++++++++------- 4 files changed, 20 insertions(+), 14 deletions(-) diff --git a/.github/skills/code_style/SKILL.md b/.github/skills/code_style/SKILL.md index 950d7c6ee..2c9ba5f19 100644 --- a/.github/skills/code_style/SKILL.md +++ b/.github/skills/code_style/SKILL.md @@ -27,14 +27,14 @@ Use the repo-local helper before doing a style pass: python tools/code_style.py audit --base origin/main ``` -- `audit` classifies changed files into safe vs match-sensitive buckets and reports repo-specific findings. +- `audit` classifies changed files into default-format vs match-sensitive buckets and reports repo-specific findings. - `audit` also checks touched `class` / `struct` declarations against known header declarations and, when no header exists, against the PS2 visibility rule. - `audit` warns on touched local forward declarations when the repo already has a header for that type. - `audit` warns on touched type members that look like invented padding or placeholder names such as `pad`, `unk`, or `field_1234`. - `audit` also checks touched style-guide rules that clang-format cannot enforce for you, such as cast spacing, `using namespace`, `NULL`, and missing `EA_PRAGMA_ONCE_SUPPORTED` guard blocks when a header's guard region is touched. - `audit` groups repeated findings by file so branch-wide output stays readable. -- Use `audit --category safe-cpp` for frontend/support cleanup passes and `audit --category match-sensitive-cpp` when you want a conservative review queue for decomp code. -- `format --check` is an opt-in wrapper around the repo's `.clang-format`, but it only targets safe C/C++ files by default. +- Use `audit --category safe-cpp` for the tool's default-format frontend/support bucket and `audit --category match-sensitive-cpp` when you want a conservative review queue for decomp code. +- `format --check` is an opt-in wrapper around the repo's `.clang-format`, but it only targets the tool's default allowlisted C/C++ files by default. - Use `format --check --base origin/main --category safe-cpp` when you want a branch-level formatter probe instead of spelling every file path out. - `format --check` labels whitespace-only formatter output separately from more invasive changes such as include reordering. - `format` never targets `SourceLists/z*.cpp`; those files stay audit-only even when you opt into risky formatting. @@ -56,7 +56,7 @@ Examples: For these files, style cleanup must be conservative and verified. -### 1b. Safer support / frontend / tooling code +### 1b. Default-format support / frontend / tooling code Examples: diff --git a/AGENTS.md b/AGENTS.md index bd8a1ec3a..95cd388f2 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -110,8 +110,8 @@ cleanup rules, including jumbo include spacing, initializer-list comment markers placement, pointer style, and how to keep style work safe in match-sensitive code. Use `python tools/code_style.py audit --base origin/main` before a branch-wide style pass. -It classifies changed files, reports repo-specific findings, and only treats safer C/C++ files -as clang-format candidates by default. +It classifies changed files, reports repo-specific findings, and only treats a narrow +allowlisted subset of C/C++ files as clang-format candidates by default. ### decomp-diff.py — Diff & symbol overview @@ -238,6 +238,10 @@ python tools/decomp-workflow.py verify -u main/Path/To/TU -f FunctionName - objdiff instruction match is 100% - normalized DWARF block match is exact +Pass the normal demangled function name to `verify`. The objdiff side matches against both +the demangled and symbol-name fields, and the DWARF side reuses the demangled-name lookup +matching that also tolerates omitted leading namespaces when that information is inconsistent. + If the combined check fails, then inspect the DWARF diff directly with: ```sh diff --git a/README.md b/README.md index e36bd8a4e..d0103a8d1 100644 --- a/README.md +++ b/README.md @@ -287,7 +287,7 @@ If you have `clang-format` installed locally, you can also use: python tools/code_style.py format --check src/Speed/Indep/Src/Frontend/FEManager.cpp ``` -The formatter wrapper only targets safer C/C++ files by default. It intentionally skips match-sensitive code unless you explicitly pass `--include-match-sensitive` and verify the affected unit afterwards. +The formatter wrapper only targets a narrow allowlisted subset of C/C++ files by default. That allowlist is about limiting churn, not about whitespace changing codegen by itself. The risky cases are formatter-driven changes such as include reordering and files that rely on the repo's initializer-list guard comments, so match-sensitive code is still skipped unless you explicitly pass `--include-match-sensitive` and verify the affected unit afterwards. `SourceLists/z*.cpp` files remain audit-only and are never formatter targets. `format --check` now distinguishes whitespace-only formatter deltas from more invasive output such as include reordering. Files that use the repo's initializer-list guard comments (`//`) are skipped by default because clang-format fights that convention; override only if you are deliberately inspecting that output. diff --git a/tools/code_style.py b/tools/code_style.py index a1a8f83fa..09be61f20 100644 --- a/tools/code_style.py +++ b/tools/code_style.py @@ -26,7 +26,9 @@ CPP_EXTS = {".c", ".cc", ".cpp", ".h", ".hh", ".hpp"} HEADER_EXTS = {".h", ".hh", ".hpp"} -SAFE_CPP_PREFIXES = ( +# Default clang-format allowlist. This is about limiting churn, not guaranteeing +# byte-match safety. +DEFAULT_FORMAT_CPP_PREFIXES = ( "src/Speed/Indep/Src/Frontend/", "src/Speed/Indep/Src/FEng/", ) @@ -132,7 +134,7 @@ def path_category(path: str) -> str: return "tooling" if path.startswith(JUMBO_PREFIX): return "jumbo-source-list" - if any(path.startswith(prefix) for prefix in SAFE_CPP_PREFIXES): + if any(path.startswith(prefix) for prefix in DEFAULT_FORMAT_CPP_PREFIXES): return "safe-cpp" if ext in CPP_EXTS else "safe-other" if any(path.startswith(prefix) for prefix in MATCH_SENSITIVE_PREFIXES): return "match-sensitive-cpp" if ext in CPP_EXTS else "match-sensitive-other" @@ -692,14 +694,14 @@ def command_audit(args: argparse.Namespace) -> int: print(f" {category}: {len(by_category[category])}") print() - safe_format_candidates = [ + default_format_candidates = [ path for path in paths if path_category(path) == "safe-cpp" and os.path.splitext(path)[1] in CPP_EXTS ] - if safe_format_candidates: - print("Safe clang-format candidates:") - for path in safe_format_candidates: + if default_format_candidates: + print("Default clang-format candidates:") + for path in default_format_candidates: print(f" {path}") print() @@ -923,7 +925,7 @@ def build_parser() -> argparse.ArgumentParser: fmt = subparsers.add_parser( "format", parents=[shared], - help="Run clang-format on safe files by default", + help="Run clang-format on the default allowlisted files by default", ) fmt.add_argument( "--category", From 71946bdd2428673716a6f233a16b302c7a5f533c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 19:58:15 +0100 Subject: [PATCH 204/691] Clarify formatter default scope Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/code_style/SKILL.md | 6 +++--- AGENTS.md | 4 ++-- README.md | 6 +++--- tools/code_style.py | 7 ++++--- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/.github/skills/code_style/SKILL.md b/.github/skills/code_style/SKILL.md index 2c9ba5f19..d6a13c738 100644 --- a/.github/skills/code_style/SKILL.md +++ b/.github/skills/code_style/SKILL.md @@ -33,12 +33,12 @@ python tools/code_style.py audit --base origin/main - `audit` warns on touched type members that look like invented padding or placeholder names such as `pad`, `unk`, or `field_1234`. - `audit` also checks touched style-guide rules that clang-format cannot enforce for you, such as cast spacing, `using namespace`, `NULL`, and missing `EA_PRAGMA_ONCE_SUPPORTED` guard blocks when a header's guard region is touched. - `audit` groups repeated findings by file so branch-wide output stays readable. -- Use `audit --category safe-cpp` for the tool's default-format frontend/support bucket and `audit --category match-sensitive-cpp` when you want a conservative review queue for decomp code. +- Use `audit --category safe-cpp` for the tool's intentionally tiny Frontend/FEng default-format bucket and `audit --category match-sensitive-cpp` when you want a conservative review queue for decomp code. - `format --check` is an opt-in wrapper around the repo's `.clang-format`, but it only targets the tool's default allowlisted C/C++ files by default. - Use `format --check --base origin/main --category safe-cpp` when you want a branch-level formatter probe instead of spelling every file path out. -- `format --check` labels whitespace-only formatter output separately from more invasive changes such as include reordering. +- `format --check` labels whitespace-only formatter output separately from other non-whitespace changes. - `format` never targets `SourceLists/z*.cpp`; those files stay audit-only even when you opt into risky formatting. -- `format` skips files that use initializer-list guard comments (`//`) unless you explicitly override that, because clang-format fights this repo-specific convention. +- `format` skips files that use initializer-list guard comments (`//`) unless you explicitly override that, because clang-format fights this repo-specific layout convention. - `clang-format` itself is optional. If it is not on `PATH`, install it locally or point the helper at it with `CLANG_FORMAT=/path/to/clang-format`. - Do not pass `--include-match-sensitive` unless you are deliberately taking on verification work afterwards. diff --git a/AGENTS.md b/AGENTS.md index 95cd388f2..9285959f8 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -110,8 +110,8 @@ cleanup rules, including jumbo include spacing, initializer-list comment markers placement, pointer style, and how to keep style work safe in match-sensitive code. Use `python tools/code_style.py audit --base origin/main` before a branch-wide style pass. -It classifies changed files, reports repo-specific findings, and only treats a narrow -allowlisted subset of C/C++ files as clang-format candidates by default. +It classifies changed files, reports repo-specific findings, and only treats the tiny +Frontend/FEng default bucket as clang-format candidates by default. ### decomp-diff.py — Diff & symbol overview diff --git a/README.md b/README.md index d0103a8d1..037a995f2 100644 --- a/README.md +++ b/README.md @@ -287,10 +287,10 @@ If you have `clang-format` installed locally, you can also use: python tools/code_style.py format --check src/Speed/Indep/Src/Frontend/FEManager.cpp ``` -The formatter wrapper only targets a narrow allowlisted subset of C/C++ files by default. That allowlist is about limiting churn, not about whitespace changing codegen by itself. The risky cases are formatter-driven changes such as include reordering and files that rely on the repo's initializer-list guard comments, so match-sensitive code is still skipped unless you explicitly pass `--include-match-sensitive` and verify the affected unit afterwards. +The formatter wrapper only targets a tiny default C/C++ bucket by default: currently `src/Speed/Indep/Src/Frontend/` and `src/Speed/Indep/Src/FEng/`. Nothing magical happens in those directories; they are just the initial low-churn UI-heavy areas chosen for branch-wide formatter probes, while the rest of `src/` stays opt-in because most of this repo is match-sensitive decomp code. `SourceLists/z*.cpp` files remain audit-only and are never formatter targets. -`format --check` now distinguishes whitespace-only formatter deltas from more invasive output such as include reordering. -Files that use the repo's initializer-list guard comments (`//`) are skipped by default because clang-format fights that convention; override only if you are deliberately inspecting that output. +`format --check` now distinguishes whitespace-only formatter deltas from other non-whitespace output changes. +Files that use the repo's initializer-list guard comments (`//`) are skipped by default because clang-format fights that convention by reflowing the guarded initializer layout. That is a source-layout concern, not a claim that whitespace by itself changes codegen; if you override it, verify the affected unit afterwards. For declaration-kind checks, header declarations are treated as the repo source of truth; otherwise the helper falls back to the PS2 dump rule (`public:` / `private:` / `protected:` means `class`, no visibility labels means `struct`). `clang-format` is optional. Recommended installs: diff --git a/tools/code_style.py b/tools/code_style.py index 09be61f20..e3f4fb6ea 100644 --- a/tools/code_style.py +++ b/tools/code_style.py @@ -26,8 +26,9 @@ CPP_EXTS = {".c", ".cc", ".cpp", ".h", ".hh", ".hpp"} HEADER_EXTS = {".h", ".hh", ".hpp"} -# Default clang-format allowlist. This is about limiting churn, not guaranteeing -# byte-match safety. +# Seed default for branch-wide clang-format probes: keep the automatic bucket tiny +# and limited to the UI-heavy Frontend/FEng directories. Broader C/C++ stays +# audit-first and opt-in. DEFAULT_FORMAT_CPP_PREFIXES = ( "src/Speed/Indep/Src/Frontend/", "src/Speed/Indep/Src/FEng/", @@ -925,7 +926,7 @@ def build_parser() -> argparse.ArgumentParser: fmt = subparsers.add_parser( "format", parents=[shared], - help="Run clang-format on the default allowlisted files by default", + help="Run clang-format on the tiny Frontend/FEng default allowlist by default", ) fmt.add_argument( "--category", From effd68f12dea2e950d15850321b1078658308905 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 21:59:39 +0100 Subject: [PATCH 205/691] fix mac build --- tools/project.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tools/project.py b/tools/project.py index a7847c129..793200414 100644 --- a/tools/project.py +++ b/tools/project.py @@ -755,10 +755,13 @@ def write_cargo_rule(): gnu_as_implicit = None ld_cmd = None ld_implicit = None + # macOS has a very low default soft fd limit (256) which is not enough + # for linking hundreds of objects through wibo/wine. + ld_prefix = "ulimit -n 65536 && " if sys.platform == "darwin" else "" if config.platform == Platform.GC_WII: # NGCLD ngcld = compiler_path / "ngcld.exe" - ld_cmd = f"{wrapper_cmd}{ngcld} $ldflags -o $out @$out.rsp" + ld_cmd = f"{ld_prefix}{wrapper_cmd}{ngcld} $ldflags -o $out @$out.rsp" ld_implicit: List[Optional[Path]] = [ compilers_implicit or ngcld, wrapper_implicit, @@ -776,7 +779,7 @@ def write_cargo_rule(): elif config.platform == Platform.X360: # MSVC linker msvc_link = compiler_path / "link.exe" - ld_cmd = f"{wrapper_cmd}{msvc_link} $ldflags /OUT:$out @$out.rsp" + ld_cmd = f"{ld_prefix}{wrapper_cmd}{msvc_link} $ldflags /OUT:$out @$out.rsp" ld_implicit: List[Optional[Path]] = [ compilers_implicit or msvc_link, wrapper_implicit, @@ -795,7 +798,7 @@ def write_cargo_rule(): else: # GNU linker gnu_ld = binutils / f"mips-linux-gnu-ld{EXE}" - ld_cmd = f"{wrapper_cmd}{gnu_ld} $ldflags -o $out @$out.rsp" + ld_cmd = f"{ld_prefix}{wrapper_cmd}{gnu_ld} $ldflags -o $out @$out.rsp" ld_implicit: List[Optional[Path]] = [ compilers_implicit or gnu_ld, wrapper_implicit, From d46f238f937e474de513dbb606ca0221ac1e165a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 22:36:10 +0100 Subject: [PATCH 206/691] tooling: broaden code_style format defaults Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/code_style/SKILL.md | 8 ++++---- AGENTS.md | 4 ++-- README.md | 4 ++-- tools/code_style.py | 33 ++++++++---------------------- 4 files changed, 17 insertions(+), 32 deletions(-) diff --git a/.github/skills/code_style/SKILL.md b/.github/skills/code_style/SKILL.md index d6a13c738..97179bab8 100644 --- a/.github/skills/code_style/SKILL.md +++ b/.github/skills/code_style/SKILL.md @@ -33,14 +33,14 @@ python tools/code_style.py audit --base origin/main - `audit` warns on touched type members that look like invented padding or placeholder names such as `pad`, `unk`, or `field_1234`. - `audit` also checks touched style-guide rules that clang-format cannot enforce for you, such as cast spacing, `using namespace`, `NULL`, and missing `EA_PRAGMA_ONCE_SUPPORTED` guard blocks when a header's guard region is touched. - `audit` groups repeated findings by file so branch-wide output stays readable. -- Use `audit --category safe-cpp` for the tool's intentionally tiny Frontend/FEng default-format bucket and `audit --category match-sensitive-cpp` when you want a conservative review queue for decomp code. -- `format --check` is an opt-in wrapper around the repo's `.clang-format`, but it only targets the tool's default allowlisted C/C++ files by default. +- Use `audit --category safe-cpp` when you want a smaller Frontend/FEng-focused subset and `audit --category match-sensitive-cpp` when you want a conservative review queue for decomp code. +- `format --check` is an opt-in wrapper around the repo's `.clang-format`, and by default it targets eligible changed C/C++ files, including match-sensitive code. - Use `format --check --base origin/main --category safe-cpp` when you want a branch-level formatter probe instead of spelling every file path out. - `format --check` labels whitespace-only formatter output separately from other non-whitespace changes. - `format` never targets `SourceLists/z*.cpp`; those files stay audit-only even when you opt into risky formatting. -- `format` skips files that use initializer-list guard comments (`//`) unless you explicitly override that, because clang-format fights this repo-specific layout convention. +- Files that use initializer-list guard comments (`//`) are still formatter targets; if a formatting pass touches match-sensitive code, verify the affected unit afterwards. - `clang-format` itself is optional. If it is not on `PATH`, install it locally or point the helper at it with `CLANG_FORMAT=/path/to/clang-format`. -- Do not pass `--include-match-sensitive` unless you are deliberately taking on verification work afterwards. +- Do not assume a formatting-only change is automatically byte-stable; verify affected units when the formatter touches match-sensitive code. ## Phase 1: Classify the File Before Cleaning diff --git a/AGENTS.md b/AGENTS.md index 9285959f8..e5f644c7b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -110,8 +110,8 @@ cleanup rules, including jumbo include spacing, initializer-list comment markers placement, pointer style, and how to keep style work safe in match-sensitive code. Use `python tools/code_style.py audit --base origin/main` before a branch-wide style pass. -It classifies changed files, reports repo-specific findings, and only treats the tiny -Frontend/FEng default bucket as clang-format candidates by default. +It classifies changed files, reports repo-specific findings, and can run clang-format +across eligible changed C/C++ files by default (excluding `SourceLists/z*.cpp`). ### decomp-diff.py — Diff & symbol overview diff --git a/README.md b/README.md index eba142b0e..88ecd7210 100644 --- a/README.md +++ b/README.md @@ -277,10 +277,10 @@ If you have `clang-format` installed locally, you can also use: python tools/code_style.py format --check src/Speed/Indep/Src/Frontend/FEManager.cpp ``` -The formatter wrapper only targets a tiny default C/C++ bucket by default: currently `src/Speed/Indep/Src/Frontend/` and `src/Speed/Indep/Src/FEng/`. Nothing magical happens in those directories; they are just the initial low-churn UI-heavy areas chosen for branch-wide formatter probes, while the rest of `src/` stays opt-in because most of this repo is match-sensitive decomp code. +The formatter wrapper targets eligible changed C/C++ files by default, including match-sensitive code. If you want a smaller focused pass, restrict it with `--category safe-cpp`, which currently maps to `src/Speed/Indep/Src/Frontend/` and `src/Speed/Indep/Src/FEng/`. `SourceLists/z*.cpp` files remain audit-only and are never formatter targets. `format --check` now distinguishes whitespace-only formatter deltas from other non-whitespace output changes. -Files that use the repo's initializer-list guard comments (`//`) are skipped by default because clang-format fights that convention by reflowing the guarded initializer layout. That is a source-layout concern, not a claim that whitespace by itself changes codegen; if you override it, verify the affected unit afterwards. +Files that use the repo's initializer-list guard comments (`//`) are formatter targets too. If a formatting pass touches match-sensitive code, rebuild and verify the affected unit afterwards instead of assuming the change is automatically byte-stable. For declaration-kind checks, header declarations are treated as the repo source of truth; otherwise the helper falls back to the PS2 dump rule (`public:` / `private:` / `protected:` means `class`, no visibility labels means `struct`). `clang-format` is optional. Recommended installs: diff --git a/tools/code_style.py b/tools/code_style.py index e3f4fb6ea..ddbe3436d 100644 --- a/tools/code_style.py +++ b/tools/code_style.py @@ -26,10 +26,10 @@ CPP_EXTS = {".c", ".cc", ".cpp", ".h", ".hh", ".hpp"} HEADER_EXTS = {".h", ".hh", ".hpp"} -# Seed default for branch-wide clang-format probes: keep the automatic bucket tiny -# and limited to the UI-heavy Frontend/FEng directories. Broader C/C++ stays -# audit-first and opt-in. -DEFAULT_FORMAT_CPP_PREFIXES = ( +# Small focused C/C++ subset for targeted probes. The format command itself +# now covers all eligible changed C/C++ files by default; this bucket remains +# useful when a caller explicitly wants a narrower Frontend/FEng-only pass. +SAFE_CPP_PREFIXES = ( "src/Speed/Indep/Src/Frontend/", "src/Speed/Indep/Src/FEng/", ) @@ -135,7 +135,7 @@ def path_category(path: str) -> str: return "tooling" if path.startswith(JUMBO_PREFIX): return "jumbo-source-list" - if any(path.startswith(prefix) for prefix in DEFAULT_FORMAT_CPP_PREFIXES): + if any(path.startswith(prefix) for prefix in SAFE_CPP_PREFIXES): return "safe-cpp" if ext in CPP_EXTS else "safe-other" if any(path.startswith(prefix) for prefix in MATCH_SENSITIVE_PREFIXES): return "match-sensitive-cpp" if ext in CPP_EXTS else "match-sensitive-other" @@ -785,9 +785,7 @@ def find_clang_format() -> str: def format_paths(paths: Iterable[str], include_match_sensitive: bool) -> List[str]: - allowed = {"safe-cpp"} - if include_match_sensitive: - allowed.add("match-sensitive-cpp") + allowed = {"safe-cpp", "match-sensitive-cpp"} return [ relpath(path) @@ -808,17 +806,11 @@ def command_format(args: argparse.Namespace) -> int: clang_format = find_clang_format() changed: List[str] = [] changed_summaries: Dict[str, str] = {} - skipped_initializer_guards: List[str] = [] - for path in selected: abs_path = os.path.join(root_dir, path) with open(abs_path, encoding="utf-8", errors="ignore") as f: before = f.read() - if has_initializer_guard_comments(before) and not args.include_initializer_guards: - skipped_initializer_guards.append(path) - continue - if args.check: result = subprocess.run( [clang_format, "--style=file", abs_path], @@ -837,13 +829,6 @@ def command_format(args: argparse.Namespace) -> int: return result.returncode changed.append(path) - if skipped_initializer_guards: - print("Skipped files with initializer-list guard comments:") - for path in skipped_initializer_guards: - print(f" {path}") - print(" clang-format fights this repo convention; inspect these manually or override explicitly.") - print() - if args.check: if changed: print("Would reformat:") @@ -926,7 +911,7 @@ def build_parser() -> argparse.ArgumentParser: fmt = subparsers.add_parser( "format", parents=[shared], - help="Run clang-format on the tiny Frontend/FEng default allowlist by default", + help="Run clang-format on changed C/C++ files by default (SourceLists stay excluded)", ) fmt.add_argument( "--category", @@ -942,12 +927,12 @@ def build_parser() -> argparse.ArgumentParser: fmt.add_argument( "--include-match-sensitive", action="store_true", - help="Also format match-sensitive C/C++ files (dangerous; verify afterwards). SourceLists files stay excluded.", + help="Deprecated no-op kept for compatibility; eligible match-sensitive C/C++ files are already included by default.", ) fmt.add_argument( "--include-initializer-guards", action="store_true", - help="Also format files that use initializer-list guard comments (`//`). Disabled by default because clang-format fights that repo convention.", + help="Deprecated no-op kept for compatibility; files with initializer-list guard comments are formatted by default.", ) fmt.set_defaults(func=command_format) From 1bb0e62e8e2ec3b4e0d19de981f65a43728bc0a6 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 13 Mar 2026 23:22:58 +0100 Subject: [PATCH 207/691] tooling: globalize clang-format scope Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/code_style/SKILL.md | 3 ++- AGENTS.md | 2 +- README.md | 2 +- tools/code_style.py | 14 +++++++------- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/.github/skills/code_style/SKILL.md b/.github/skills/code_style/SKILL.md index 97179bab8..5218fb40b 100644 --- a/.github/skills/code_style/SKILL.md +++ b/.github/skills/code_style/SKILL.md @@ -35,9 +35,10 @@ python tools/code_style.py audit --base origin/main - `audit` groups repeated findings by file so branch-wide output stays readable. - Use `audit --category safe-cpp` when you want a smaller Frontend/FEng-focused subset and `audit --category match-sensitive-cpp` when you want a conservative review queue for decomp code. - `format --check` is an opt-in wrapper around the repo's `.clang-format`, and by default it targets eligible changed C/C++ files, including match-sensitive code. +- Use `format --check --base origin/main` for a branch-wide formatter pass over all changed C/C++ files. - Use `format --check --base origin/main --category safe-cpp` when you want a branch-level formatter probe instead of spelling every file path out. - `format --check` labels whitespace-only formatter output separately from other non-whitespace changes. -- `format` never targets `SourceLists/z*.cpp`; those files stay audit-only even when you opt into risky formatting. +- `format` also accepts `SourceLists/z*.cpp` and other repo C/C++ files; if a formatting pass touches match-sensitive code, verify the affected unit afterwards. - Files that use initializer-list guard comments (`//`) are still formatter targets; if a formatting pass touches match-sensitive code, verify the affected unit afterwards. - `clang-format` itself is optional. If it is not on `PATH`, install it locally or point the helper at it with `CLANG_FORMAT=/path/to/clang-format`. - Do not assume a formatting-only change is automatically byte-stable; verify affected units when the formatter touches match-sensitive code. diff --git a/AGENTS.md b/AGENTS.md index e5f644c7b..d367fc237 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -111,7 +111,7 @@ placement, pointer style, and how to keep style work safe in match-sensitive cod Use `python tools/code_style.py audit --base origin/main` before a branch-wide style pass. It classifies changed files, reports repo-specific findings, and can run clang-format -across eligible changed C/C++ files by default (excluding `SourceLists/z*.cpp`). +across eligible changed C/C++ files by default. ### decomp-diff.py — Diff & symbol overview diff --git a/README.md b/README.md index 88ecd7210..b67d7d54c 100644 --- a/README.md +++ b/README.md @@ -274,11 +274,11 @@ python tools/code_style.py format --check --base origin/main --category safe-cpp If you have `clang-format` installed locally, you can also use: ```sh +python tools/code_style.py format --check --base origin/main python tools/code_style.py format --check src/Speed/Indep/Src/Frontend/FEManager.cpp ``` The formatter wrapper targets eligible changed C/C++ files by default, including match-sensitive code. If you want a smaller focused pass, restrict it with `--category safe-cpp`, which currently maps to `src/Speed/Indep/Src/Frontend/` and `src/Speed/Indep/Src/FEng/`. -`SourceLists/z*.cpp` files remain audit-only and are never formatter targets. `format --check` now distinguishes whitespace-only formatter deltas from other non-whitespace output changes. Files that use the repo's initializer-list guard comments (`//`) are formatter targets too. If a formatting pass touches match-sensitive code, rebuild and verify the affected unit afterwards instead of assuming the change is automatically byte-stable. For declaration-kind checks, header declarations are treated as the repo source of truth; otherwise the helper falls back to the PS2 dump rule (`public:` / `private:` / `protected:` means `class`, no visibility labels means `struct`). diff --git a/tools/code_style.py b/tools/code_style.py index ddbe3436d..ecb85f713 100644 --- a/tools/code_style.py +++ b/tools/code_style.py @@ -695,14 +695,14 @@ def command_audit(args: argparse.Namespace) -> int: print(f" {category}: {len(by_category[category])}") print() - default_format_candidates = [ + safe_cpp_candidates = [ path for path in paths if path_category(path) == "safe-cpp" and os.path.splitext(path)[1] in CPP_EXTS ] - if default_format_candidates: - print("Default clang-format candidates:") - for path in default_format_candidates: + if safe_cpp_candidates: + print("Focused safe-cpp subset:") + for path in safe_cpp_candidates: print(f" {path}") print() @@ -785,12 +785,12 @@ def find_clang_format() -> str: def format_paths(paths: Iterable[str], include_match_sensitive: bool) -> List[str]: - allowed = {"safe-cpp", "match-sensitive-cpp"} + del include_match_sensitive return [ relpath(path) for path in paths - if path_category(path) in allowed and os.path.splitext(path)[1] in CPP_EXTS + if os.path.splitext(path)[1] in CPP_EXTS ] @@ -911,7 +911,7 @@ def build_parser() -> argparse.ArgumentParser: fmt = subparsers.add_parser( "format", parents=[shared], - help="Run clang-format on changed C/C++ files by default (SourceLists stay excluded)", + help="Run clang-format on changed C/C++ files by default", ) fmt.add_argument( "--category", From 2564a6ac7a92aebf7438551f03141ea47cd5df40 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 11:48:31 +0100 Subject: [PATCH 208/691] agent % --- AGENTS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index d367fc237..fc4f7af24 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -363,13 +363,13 @@ python tools/decomp-status.py --unit main/Path/To/TU Commit whenever the match percentage increases (e.g. you matched a new function). Use this format for the commit message: ``` -n.n%: short description of what was matched or changed +n.n[n]%: short description of what was matched or changed ``` Examples: - `42.1%: match UpdateCamera` -- `78.5%: match PlayerController constructor and destructor` +- `78.56%: match PlayerController constructor and destructor` - `100.0%: full match for zAnim` Do not batch up multiple percentage milestones into one commit — commit as each improvement lands. From e6af5d4fda2f4d67c6bd5364fbe24c740884cf12 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 19:21:52 +0100 Subject: [PATCH 209/691] 2.2%: initial GRuntimeInstance implementation with matching sort/helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/SourceLists/zGameplay.cpp | 1 + src/Speed/Indep/Src/Gameplay/GActivity.h | 60 ++++++ src/Speed/Indep/Src/Gameplay/GCharacter.h | 82 ++++++++ src/Speed/Indep/Src/Gameplay/GHandler.h | 6 + src/Speed/Indep/Src/Gameplay/GManager.h | 8 + src/Speed/Indep/Src/Gameplay/GMarker.h | 26 +++ src/Speed/Indep/Src/Gameplay/GReflected.h | 16 ++ .../Indep/Src/Gameplay/GRuntimeInstance.cpp | 188 ++++++++++++++++++ .../Indep/Src/Gameplay/GRuntimeInstance.h | 70 ++++++- src/Speed/Indep/Src/Gameplay/GState.h | 4 + src/Speed/Indep/Src/Gameplay/GTrigger.h | 114 +++++++++-- src/Speed/Indep/Src/World/WTrigger.h | 57 +++++- tools/decomp-diff.py | 1 + 13 files changed, 611 insertions(+), 22 deletions(-) diff --git a/src/Speed/Indep/SourceLists/zGameplay.cpp b/src/Speed/Indep/SourceLists/zGameplay.cpp index e69de29bb..c0e3cfdce 100644 --- a/src/Speed/Indep/SourceLists/zGameplay.cpp +++ b/src/Speed/Indep/SourceLists/zGameplay.cpp @@ -0,0 +1 @@ +#include "Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp" diff --git a/src/Speed/Indep/Src/Gameplay/GActivity.h b/src/Speed/Indep/Src/Gameplay/GActivity.h index 2614120c4..aafe9fefa 100644 --- a/src/Speed/Indep/Src/Gameplay/GActivity.h +++ b/src/Speed/Indep/Src/Gameplay/GActivity.h @@ -7,6 +7,7 @@ #include "GHandler.h" #include "GState.h" +#include "Speed/Indep/Libs/Support/Utility/UCrc.h" #include "Speed/Indep/Libs/Support/Utility/UStandard.h" DECLARE_CONTAINER_TYPE(ID_GHandlerVector); @@ -14,6 +15,9 @@ DECLARE_CONTAINER_TYPE(ID_StateToVectors); typedef UTL::Std::map, _type_ID_StateToVectors> StateToHandlers; +struct LuaMessageDeliveryInfo; +struct lua_State; + // total size: 0x48 class GActivity : public GRuntimeInstance { public: @@ -26,6 +30,62 @@ class GActivity : public GRuntimeInstance { GActivity(const Attrib::Key &activityKey); + ~GActivity() override; + + GameplayObjType GetType() const override { + return kGameplayObjType_Activity; + } + + const char *GetActivityName() { + return CollectionName(); + } + + bool GetIsRunning() const { + return mRunning; + } + + void GatherStatesAndHandlers(); + + unsigned int StoreHandlers(GState *state, UTL::Std::vector *handlerVec); + + bool CollectionIsStateForActivity(GState *state); + + bool CollectionIsHandlerForState(GState *state, GHandler *handler); + + void RegisterMessageHandlers(GState *state); + + void UnregisterMessageHandlers(); + + void ActivateReferencedTriggers(bool activate, GRuntimeInstance *instance); + + void Run(); + + void Suspend(); + + void Reset(); + + GState *GetStateByName(const char *stateName); + + void EnterStateByName(const char *stateName); + + void EnterState(GState *newState); + + static int ChangeStateFromScript(lua_State *luaState); + + void HandleLocalMessage(UCrc32 messageType); + + void PushActivityVars(lua_State *luaState); + + void ClearActivityVars(lua_State *luaState); + + int BuildActivityTables(lua_State *luaState); + + void HandleMessage(LuaMessageDeliveryInfo *deliveryInfo); + + void SerializeVars(bool abandonLuaTable); + + void DeserializeVars(); + private: GState *mCurrentState; // offset 0x28, size 0x4 GState *mRegisteredHandlersState; // offset 0x2C, size 0x4 diff --git a/src/Speed/Indep/Src/Gameplay/GCharacter.h b/src/Speed/Indep/Src/Gameplay/GCharacter.h index 330122349..36bb045eb 100644 --- a/src/Speed/Indep/Src/Gameplay/GCharacter.h +++ b/src/Speed/Indep/Src/Gameplay/GCharacter.h @@ -13,8 +13,90 @@ // total size: 0x80 class GCharacter : public GRuntimeInstance, public UTL::COM::Object, public IAttachable { public: + enum State { + kCharState_Invalid = 0, + kCharState_Unspawned = 1, + kCharState_Spawning_WaitingForModel = 2, + kCharState_Spawning_WaitingForTrack = 3, + kCharState_Spawned = 4, + kCharState_Unspawning_WaitingUntilOffscreen = 5, + }; + + enum Flags { + kCharFlag_UsingStockCar = 1, + kCharFlag_AttachedToManager = 2, + }; + GCharacter(const Attrib::Key &triggerKey); + ~GCharacter() override; + + GameplayObjType GetType() const override { + return kGameplayObjType_Character; + } + + bool HasStockCar() const { + return IsFlagSet(kCharFlag_UsingStockCar); + } + + bool Attach(IUnknown *pOther) override { + return false; + } + + bool Detach(IUnknown *pOther) override { + return false; + } + + bool IsAttached(const IUnknown *pOther) const override { + return false; + } + + const IAttachable::List *GetAttachments() const override { + return &mAttachments->GetList(); + } + + void SetFlag(unsigned short flag) { + mFlags = mFlags | flag; + } + + void ClearFlag(unsigned short flag) { + mFlags = mFlags & ~flag; + } + + bool IsFlagSet(unsigned short flag) const { + return (mFlags & flag) != 0; + } + + bool IsFlagClear(unsigned short flag) const { + return (mFlags & flag) == 0; + } + + void OnAttached(IAttachable *pOther) override; + + void OnDetached(IAttachable *pOther) override; + + void Spawn(const UMath::Vector3 &pos, const UMath::Vector3 &dir, GMarker *targetPoint, float initialSpeed); + + bool SpawnPending() const; + + bool IsSpawned() const; + + void ReleaseVehicle(); + + void Unspawn(); + + void UnspawnWhenOffscreen(); + + bool IsNoLongerUseful() const; + + bool AttemptSpawn(); + + IVehicle *GetSpawnedVehicle() const { + return mVehicle; + } + + unsigned int GetName() const; + private: UMath::Vector3 mSpawnPos; // offset 0x40, size 0xC unsigned char mState; // offset 0x4C, size 0x1 diff --git a/src/Speed/Indep/Src/Gameplay/GHandler.h b/src/Speed/Indep/Src/Gameplay/GHandler.h index 0c3503ec5..a283ca89c 100644 --- a/src/Speed/Indep/Src/Gameplay/GHandler.h +++ b/src/Speed/Indep/Src/Gameplay/GHandler.h @@ -12,6 +12,12 @@ class GHandler : public GRuntimeInstance { public: GHandler(const Attrib::Key &handlerKey); + GameplayObjType GetType() const override { + return kGameplayObjType_Handler; + } + + void NotifyBytecodeFlushed(); + private: bool mAttached; // offset 0x28, size 0x1 }; diff --git a/src/Speed/Indep/Src/Gameplay/GManager.h b/src/Speed/Indep/Src/Gameplay/GManager.h index f1a37ee98..93b87c293 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.h +++ b/src/Speed/Indep/Src/Gameplay/GManager.h @@ -193,6 +193,14 @@ class GManager : public UTL::COM::Object, public IVehicleCache { return mStartFreeRoamPursuit; } + unsigned int Get24BitAttributeKey(unsigned int attribKey) const { + return attribKey >> mAttributeKeyShiftTo24; + } + + unsigned int Get32BitCollectionKey(unsigned int collectionKey) const { + return collectionKey << mCollectionKeyShiftTo32; + } + void TrackValue(const char *valueName, int value) { TrackValue(valueName, static_cast(value)); } diff --git a/src/Speed/Indep/Src/Gameplay/GMarker.h b/src/Speed/Indep/Src/Gameplay/GMarker.h index 793b7f037..93d541bd0 100644 --- a/src/Speed/Indep/Src/Gameplay/GMarker.h +++ b/src/Speed/Indep/Src/Gameplay/GMarker.h @@ -5,6 +5,32 @@ #pragma once #endif +#include "GRuntimeInstance.h" +// total size: 0x40 +class GMarker : public GRuntimeInstance { + public: + GMarker(const Attrib::Key &markerKey); + + ~GMarker() override; + + GameplayObjType GetType() const override { + return kGameplayObjType_Marker; + } + + const UMath::Vector3 &GetPosition() const { + return mPosition; + } + + const UMath::Vector3 &GetDirection() const { + return mDirection; + } + + void CalcTransform(UMath::Matrix4 &mat) const; + + private: + UMath::Vector3 mPosition; // offset 0x28, size 0xC + UMath::Vector3 mDirection; // offset 0x34, size 0xC +}; #endif diff --git a/src/Speed/Indep/Src/Gameplay/GReflected.h b/src/Speed/Indep/Src/Gameplay/GReflected.h index c1ab3ad19..510e8c012 100644 --- a/src/Speed/Indep/Src/Gameplay/GReflected.h +++ b/src/Speed/Indep/Src/Gameplay/GReflected.h @@ -5,8 +5,24 @@ #pragma once #endif +class GRuntimeInstance; + // total size: 0x4 struct GCollectionKey { + GCollectionKey(unsigned int key) : mCollectionKey(key) {} + + GCollectionKey(GRuntimeInstance *inst); + + unsigned int GetCollectionKey() const { + return mCollectionKey; + } + + operator unsigned int() { + return mCollectionKey; + } + + operator GRuntimeInstance *() const; + unsigned int mCollectionKey; // offset 0x0, size 0x4 }; diff --git a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp index e69de29bb..6af253b52 100644 --- a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp @@ -0,0 +1,188 @@ +#include "GRuntimeInstance.h" + +#include "GManager.h" +#include "GMarker.h" +#include "GTrigger.h" +#include "Speed/Indep/Libs/Support/Utility/UStandard.h" + +#include + +GRuntimeInstance *GRuntimeInstance::sRingListHead[6]; + +GRuntimeInstance::GRuntimeInstance(const Attrib::Key &key, GameplayObjType type) + : Attrib::Gen::gameplay(key, 0, nullptr) // +{ + mFlags = 0; + mNumConnected = 0; + mConnected = nullptr; + mPrev = nullptr; + mNext = nullptr; + GManager::Get().RegisterInstance(this); + AddToTypeList(type); +} + +GRuntimeInstance::~GRuntimeInstance() { + GManager::Get().UnregisterInstance(this); + DisconnectInstances(); + RemoveFromTypeList(); + mFlags = mFlags & ~1; +} + +void GRuntimeInstance::SetConnectionBuffer(ConnectedInstance *destBuffer, unsigned int numEntries) { + mConnected = destBuffer; + mNumConnected = 0; +} + +void GRuntimeInstance::AllocateConnectionBuffer(unsigned int numEntries) { + ConnectedInstance *buffer = new ConnectedInstance[numEntries]; + SetConnectionBuffer(buffer, numEntries); + SetFlag(4); +} + +void GRuntimeInstance::ConnectToInstance(const Attrib::Key &key, int index, GRuntimeInstance *instance) { + unsigned int packedKey = MakePackedKey(key, index); + ConnectedInstance &connected = mConnected[mNumConnected]; + connected.mIndexedKey = packedKey; + connected.mInstance = instance; + mNumConnected++; +} + +void GRuntimeInstance::LockConnections() { + std::sort(mConnected, mConnected + mNumConnected); + SetFlag(2); +} + +GRuntimeInstance *GRuntimeInstance::GetConnectedInstance(const Attrib::Key &key, int index) const { + unsigned int targetKey = MakePackedKey(key, index); + int lower = 0; + int upper = mNumConnected - 1; + while (lower <= upper) { + int middle = (lower + upper) / 2; + ConnectedInstance &connected = mConnected[middle]; + if (connected.mIndexedKey == targetKey) { + return connected.mInstance; + } + if (connected.mIndexedKey < targetKey) { + lower = middle + 1; + } else { + upper = middle - 1; + } + } + return nullptr; +} + +void GRuntimeInstance::ResetConnections() { + mNumConnected = 0; + mFlags = mFlags & ~2; +} + +void GRuntimeInstance::DisconnectInstances() { + if (GetFlag(4)) { + if (mConnected) { + delete[] mConnected; + } + mFlags = mFlags & ~4; + } + mNumConnected = 0; + mConnected = nullptr; + mFlags = mFlags & ~2; +} + +unsigned int GRuntimeInstance::MakePackedKey(unsigned int key, int index) const { + unsigned int key24 = GManager::Get().Get24BitAttributeKey(key); + unsigned char index8 = static_cast(index); + return (key24 << 8) | index8; +} + +void GRuntimeInstance::AddToTypeList(GameplayObjType type) { + GRuntimeInstance *&head = sRingListHead[type]; + if (head) { + mNext = head; + mPrev = head->mPrev; + head->mPrev->mNext = this; + head->mPrev = this; + } else { + mNext = this; + mPrev = this; + head = this; + } +} + +void GRuntimeInstance::RemoveFromTypeList() { + for (unsigned int onType = 0; onType < kGameplayObjType_Count; onType++) { + if (sRingListHead[onType] == this) { + if (mNext == this) { + sRingListHead[onType] = nullptr; + } else { + sRingListHead[onType] = mNext; + mPrev->mNext = mNext; + mNext->mPrev = mPrev; + } + mNext = nullptr; + mPrev = nullptr; + return; + } + } + if (mNext) { + mPrev->mNext = mNext; + mNext->mPrev = mPrev; + mNext = nullptr; + mPrev = nullptr; + } +} + +unsigned int GRuntimeInstance::GetConnectionCount() const { + return mNumConnected; +} + +GRuntimeInstance *GRuntimeInstance::GetConnectionAt(unsigned int index) const { + return mConnected[index].mInstance; +} + +bool GRuntimeInstance::IsDerivedFromTemplate(unsigned int templateKey) const { + unsigned int parentKey = GetParent(); + while (parentKey) { + if (parentKey == templateKey) { + return true; + } + { + Attrib::Gen::gameplay parentObj(parentKey, 0, nullptr); + parentKey = parentObj.GetParent(); + } + } + return false; +} + +bool GRuntimeInstance::GetPosition(UMath::Vector3 &pos) { + if (GetType() == kGameplayObjType_Marker) { + GMarker *marker = static_cast(this); + pos = marker->GetPosition(); + return true; + } + if (GetType() == kGameplayObjType_Trigger) { + GTrigger *trigger = static_cast(this); + trigger->GetPosition(pos); + return true; + } + return false; +} + +bool GRuntimeInstance::GetDirection(UMath::Vector3 &dir) { + if (GetType() == kGameplayObjType_Marker) { + GMarker *marker = static_cast(this); + dir = marker->GetDirection(); + return true; + } + if (GetType() == kGameplayObjType_Trigger) { + GTrigger *trigger = static_cast(this); + dir = trigger->GetDirection(); + return true; + } + return false; +} + +GCollectionKey::GCollectionKey(GRuntimeInstance *inst) : mCollectionKey(inst->GetCollection()) {} + +GCollectionKey::operator GRuntimeInstance *() const { + return GManager::Get().FindInstance(mCollectionKey); +} \ No newline at end of file diff --git a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.h b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.h index cae688d12..97a1abced 100644 --- a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.h +++ b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.h @@ -7,17 +7,77 @@ #include "Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h" +class GMarker; + // total size: 0x28 class GRuntimeInstance : public Attrib::Gen::gameplay { public: + // total size: 0x8 + struct ConnectedInstance { + bool operator<(const ConnectedInstance &other) const { + return mIndexedKey < other.mIndexedKey; + } + + unsigned int mIndexedKey; // offset 0x0, size 0x4 + GRuntimeInstance *mInstance; // offset 0x4, size 0x4 + }; + + typedef unsigned int PackedIndexedKey; + GRuntimeInstance(const Attrib::Key &key, GameplayObjType type); + virtual ~GRuntimeInstance(); + + void SetConnectionBuffer(ConnectedInstance *destBuffer, unsigned int numEntries); + + void AllocateConnectionBuffer(unsigned int numEntries); + + void ConnectToInstance(const Attrib::Key &key, int index, GRuntimeInstance *instance); + + void LockConnections(); + + GRuntimeInstance *GetConnectedInstance(const Attrib::Key &key, int index) const; + + void ResetConnections(); + + void DisconnectInstances(); + + unsigned int MakePackedKey(unsigned int key, int index) const; + + void AddToTypeList(GameplayObjType type); + + void RemoveFromTypeList(); + + unsigned int GetConnectionCount() const; + + GRuntimeInstance *GetConnectionAt(unsigned int index) const; + + bool IsDerivedFromTemplate(unsigned int templateKey) const; + + bool GetPosition(UMath::Vector3 &pos); + + bool GetDirection(UMath::Vector3 &dir); + + virtual GameplayObjType GetType() const { + return kGameplayObjType_Invalid; + } + + bool GetFlag(unsigned int flag) const { + return (mFlags & flag) != 0; + } + + void SetFlag(unsigned int flag) { + mFlags = mFlags | static_cast(flag); + } + + static GRuntimeInstance *sRingListHead[6]; + private: - unsigned short mFlags; // offset 0x14, size 0x2 - unsigned short mNumConnected; // offset 0x16, size 0x2 - struct ConnectedInstance *mConnected; // offset 0x18, size 0x4 - GRuntimeInstance *mPrev; // offset 0x1C, size 0x4 - GRuntimeInstance *mNext; // offset 0x20, size 0x4 + unsigned short mFlags; // offset 0x14, size 0x2 + unsigned short mNumConnected; // offset 0x16, size 0x2 + ConnectedInstance *mConnected; // offset 0x18, size 0x4 + GRuntimeInstance *mPrev; // offset 0x1C, size 0x4 + GRuntimeInstance *mNext; // offset 0x20, size 0x4 }; #endif diff --git a/src/Speed/Indep/Src/Gameplay/GState.h b/src/Speed/Indep/Src/Gameplay/GState.h index 722c11708..92a88ca74 100644 --- a/src/Speed/Indep/Src/Gameplay/GState.h +++ b/src/Speed/Indep/Src/Gameplay/GState.h @@ -11,6 +11,10 @@ class GState : public GRuntimeInstance { public: GState(const Attrib::Key &stateKey); + + GameplayObjType GetType() const override { + return kGameplayObjType_State; + } }; #endif diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.h b/src/Speed/Indep/Src/Gameplay/GTrigger.h index 0efe0b8b0..a8d8351cf 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.h +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.h @@ -10,21 +10,105 @@ #include "Speed/Indep/Libs/Support/Utility/UTypes.h" #include "Speed/Indep/Src/Ecstasy/EmitterSystem.h" #include "Speed/Indep/Src/Interfaces/Simables/ISimable.h" +#include "Speed/Indep/Src/World/WTrigger.h" -// // total size: 0xCC -// class GTrigger : public GRuntimeInstance { -// private: -// WTrigger mWorldTrigger; // offset 0x28, size 0x40 -// UMath::Vector3 mDirection; // offset 0x68, size 0xC -// unsigned int mTriggerEnabled; // offset 0x74, size 0x4 -// UTL::Std::vector mSimObjInside; // offset 0x78, size 0x10 -// struct EventList mEventList; // offset 0x88, size 0x10 -// struct EventStaticData mEventStaticData; // offset 0x98, size 0x10 -// unsigned char mTriggerEventData[16]; // offset 0xA8, size 0x10 -// EmitterGroup *mParticleEffect[2]; // offset 0xB8, size 0x8 -// struct GIcon *mIcon; // offset 0xC0, size 0x4 -// bool mEnabled; // offset 0xC4, size 0x1 -// int mActivationReferences; // offset 0xC8, size 0x4 -// }; +struct GIcon; + +DECLARE_CONTAINER_TYPE(ID_SimObjList); + +// total size: 0x10 +struct EventList { + unsigned int fNumEvents; // offset 0x0, size 0x4 + unsigned int fPad[3]; // offset 0x4, size 0xC +}; + +// total size: 0x10 +struct EventStaticData { + unsigned int fEventID; // offset 0x0, size 0x4 + unsigned int fEventSize; // offset 0x4, size 0x4 + unsigned int fDataOffset; // offset 0x8, size 0x4 + unsigned int fPad; // offset 0xC, size 0x4 +}; + +// total size: 0xCC +class GTrigger : public GRuntimeInstance { + public: + GTrigger(const Attrib::Key &triggerKey); + + ~GTrigger() override; + + GameplayObjType GetType() const override { + return kGameplayObjType_Trigger; + } + + void Disable() { + Enable(false); + } + + const UMath::Vector3 &GetDirection() const { + return mDirection; + } + + bool IsEnabled() const { + return mEnabled; + } + + GIcon *GetIcon() const { + return mIcon; + } + + GActivity *GetTargetActivity(); + + void AddActivationReference(); + + void RemoveActivationReference(); + + EmitterGroup *CreateParticleEffect(const char *effectName, UMath::Vector3 &pos); + + void CreateAllParticleEffects(); + + void ClearParticleEffects(); + + void EnableParticleEffects(bool enabled); + + void RefreshParticleEffects(); + + static void NotifyEmitterGroupDelete(void *obj, EmitterGroup *group); + + void Enable(bool setEnabled); + + void GetPosition(UMath::Vector3 &pos); + + float GetRadius(); + + void NotifySimableTrigger(ISimable *isim, int triggerStimulus); + + void Reset(); + + void ShowIcon(); + + void HideIcon(); + + void MarkAsInside(ISimable *simable); + + void MarkAsOutside(ISimable *simable); + + bool IsInside(ISimable *simable); + + void Update(float dT); + + private: + WTrigger mWorldTrigger; // offset 0x28, size 0x40 + UMath::Vector3 mDirection; // offset 0x68, size 0xC + unsigned int mTriggerEnabled; // offset 0x74, size 0x4 + UTL::Std::vector mSimObjInside; // offset 0x78, size 0x10 + EventList mEventList; // offset 0x88, size 0x10 + EventStaticData mEventStaticData; // offset 0x98, size 0x10 + unsigned char mTriggerEventData[16]; // offset 0xA8, size 0x10 + EmitterGroup *mParticleEffect[2]; // offset 0xB8, size 0x8 + GIcon *mIcon; // offset 0xC0, size 0x4 + bool mEnabled; // offset 0xC4, size 0x1 + int mActivationReferences; // offset 0xC8, size 0x4 +}; #endif diff --git a/src/Speed/Indep/Src/World/WTrigger.h b/src/Speed/Indep/Src/World/WTrigger.h index 2bc77fe21..ffb9a7833 100644 --- a/src/Speed/Indep/Src/World/WTrigger.h +++ b/src/Speed/Indep/Src/World/WTrigger.h @@ -5,12 +5,65 @@ #pragma once #endif +#include "Speed/Indep/Libs/Support/Utility/UMath.h" #include "Speed/Indep/Src/Interfaces/Simables/ISimable.h" +struct EventList; +struct EventStaticData; + +// total size: 0x40 +struct Trigger { + UMath::Vector4 fMatRow0Width; // offset 0x0, size 0x10 + unsigned int fType : 4; // offset 0x10 + unsigned int fShape : 4; // offset 0x10 + unsigned int fFlags : 24; // offset 0x10 + float fHeight; // offset 0x14, size 0x4 + EventList *fEvents; // offset 0x18, size 0x4 + unsigned short fIterStamp; // offset 0x1C, size 0x2 + unsigned short fFingerprint; // offset 0x1E, size 0x2 + UMath::Vector4 fMatRow2Length; // offset 0x20, size 0x10 + UMath::Vector4 fPosRadius; // offset 0x30, size 0x10 +}; + +// total size: 0x40 +class WTrigger : public Trigger { + public: + WTrigger(); + WTrigger(const UMath::Matrix4 &mat, const UMath::Vector3 &dimensions, EventList *eventList, unsigned int flags); + WTrigger(const UMath::Matrix4 &mat, float radius, float height, EventList *eventList, unsigned int flags); + ~WTrigger(); + + void FireEvents(HSIMABLE hSimable); + bool HasEvent(unsigned int eventID, const EventStaticData **foundEvent) const; + bool TestDirection(const UMath::Vector3 &vec) const; + bool TestDirection(const UMath::Vector4 *seg) const; + void UpdateBox(const UMath::Matrix4 &mat, const UMath::Vector3 &dimension); + void UpdateCylinder(const UMath::Vector3 &position, const UMath::Matrix4 &newRot, const UMath::Vector3 &dim); + bool UpdatePos(const UMath::Vector3 &newPos, unsigned int triggerInd); + + void Enable() { + fFlags |= 1; + } + + void Disable() { + fFlags &= ~1; + } + + bool IsEnabled(bool allowSilencables) const { + return (fFlags & 1) != 0; + } + + void GetCenter(UMath::Vector3 ¢er) const { + center.x = fPosRadius.x; + center.y = fPosRadius.y; + center.z = fPosRadius.z; + } +}; + // total size: 0x8 struct FireOnExitRec { - class WTrigger &mTrigger; // offset 0x0, size 0x4 - HSIMABLE mhSimable; // offset 0x4, size 0x4 + WTrigger &mTrigger; // offset 0x0, size 0x4 + HSIMABLE mhSimable; // offset 0x4, size 0x4 }; // total size: 0x10 diff --git a/tools/decomp-diff.py b/tools/decomp-diff.py index 13e54e26f..439811479 100644 --- a/tools/decomp-diff.py +++ b/tools/decomp-diff.py @@ -19,6 +19,7 @@ import sys from typing import Any, Dict, List, Optional, Tuple from _common import ( + RELOC_DIFF_CHOICES, ROOT_DIR, ToolError, build_objdiff_symbol_rows, From b966c5a85c9831b7afeb2a7673c709ea0793b412 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 19:53:50 +0100 Subject: [PATCH 210/691] 4.2%: implement timer and race utility gameplay code Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/SourceLists/zGameplay.cpp | 16 +++ .../Indep/Src/Gameplay/GInfractionManager.cpp | 68 ++++++++++ .../Indep/Src/Gameplay/GInfractionManager.h | 51 ++++++-- src/Speed/Indep/Src/Gameplay/GManager.h | 18 ++- src/Speed/Indep/Src/Gameplay/GMilestone.cpp | 121 ++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GMilestone.h | 70 ++++++++++ src/Speed/Indep/Src/Gameplay/GRaceDatabase.h | 23 +++- src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 83 ++++++++++-- src/Speed/Indep/Src/Gameplay/GSpeedTrap.cpp | 75 +++++++++++ src/Speed/Indep/Src/Gameplay/GSpeedTrap.h | 79 ++++++++++++ src/Speed/Indep/Src/Gameplay/GTimer.cpp | 38 ++++++ src/Speed/Indep/Src/Gameplay/GTimer.h | 10 ++ 12 files changed, 618 insertions(+), 34 deletions(-) diff --git a/src/Speed/Indep/SourceLists/zGameplay.cpp b/src/Speed/Indep/SourceLists/zGameplay.cpp index c0e3cfdce..9b5ff7546 100644 --- a/src/Speed/Indep/SourceLists/zGameplay.cpp +++ b/src/Speed/Indep/SourceLists/zGameplay.cpp @@ -1 +1,17 @@ #include "Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp" +#include "Speed/Indep/Src/Gameplay/GTrigger.cpp" +#include "Speed/Indep/Src/Gameplay/GMarker.cpp" +#include "Speed/Indep/Src/Gameplay/GActivity.cpp" +#include "Speed/Indep/Src/Gameplay/GRaceStatus.cpp" +#include "Speed/Indep/Src/Gameplay/GRaceDatabase.cpp" +#include "Speed/Indep/Src/Gameplay/GCharacter.cpp" +#include "Speed/Indep/Src/Gameplay/GState.cpp" +#include "Speed/Indep/Src/Gameplay/GHandler.cpp" +#include "Speed/Indep/Src/Gameplay/GManager.cpp" +#include "Speed/Indep/Src/Gameplay/GTimer.cpp" +#include "Speed/Indep/Src/Gameplay/GVault.cpp" +#include "Speed/Indep/Src/Gameplay/GObjectBlock.cpp" +#include "Speed/Indep/Src/Gameplay/GInfractionManager.cpp" +#include "Speed/Indep/Src/Gameplay/GMilestone.cpp" +#include "Speed/Indep/Src/Gameplay/GSpeedTrap.cpp" +#include "Speed/Indep/Src/Gameplay/GIcon.cpp" diff --git a/src/Speed/Indep/Src/Gameplay/GInfractionManager.cpp b/src/Speed/Indep/Src/Gameplay/GInfractionManager.cpp index e69de29bb..44cbd9d02 100644 --- a/src/Speed/Indep/Src/Gameplay/GInfractionManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GInfractionManager.cpp @@ -0,0 +1,68 @@ +#include "Speed/Indep/Src/Gameplay/GInfractionManager.h" + +#include "Speed/Indep/Src/Gameplay/GManager.h" +#include "Speed/Indep/Src/Gameplay/GRaceStatus.h" + +typedef GInfractionManager::InfractionType InfractionType; + +#include "Speed/Indep/Src/Generated/Events/EReportInfraction.hpp" + +GInfractionManager *GInfractionManager::mObj = nullptr; + +GInfractionManager::GInfractionManager() + : mInfractions(0), // + mNumThisPursuit(0), // + mSpeeding(false), // + mDrivingRecklessly(false), // + mRacing(false) {} + +void GInfractionManager::Init() { + mObj = new GInfractionManager; +} + +void GInfractionManager::PursuitStarted() { + mInfractions = 0; + mNumThisPursuit = 0; + mSpeeding = false; + mDrivingRecklessly = false; + mRacing = false; +} + +void GInfractionManager::ReportInfraction(InfractionType infraction) { + bool pursuitRace; + + if (!GRaceStatus::Exists()) { + return; + } + + pursuitRace = false; + if (GRaceStatus::Get().GetRaceParameters() && GRaceStatus::Get().GetRaceParameters()->GetIsPursuitRace()) { + pursuitRace = true; + } + + if (!GRaceStatus::Get().GetActivelyRacing() || pursuitRace) { + if ((mInfractions & infraction) == 0) { + mInfractions |= infraction; + new EReportInfraction(infraction); + GManager::Get().TrackValue("total_infractions", static_cast(GetNumInfractions())); + } + + mNumThisPursuit++; + } +} + +unsigned int GInfractionManager::GetNumInfractions() { + unsigned int bits; + unsigned int count; + + count = 0; + for (bits = mInfractions; bits != 0; bits >>= 1) { + count += bits & 1; + } + + return count; +} + +bool GInfractionManager::DidInfractionOccur(InfractionType infraction) { + return (mInfractions & infraction) != 0; +} diff --git a/src/Speed/Indep/Src/Gameplay/GInfractionManager.h b/src/Speed/Indep/Src/Gameplay/GInfractionManager.h index 347ed93d4..ff4ad2d1d 100644 --- a/src/Speed/Indep/Src/Gameplay/GInfractionManager.h +++ b/src/Speed/Indep/Src/Gameplay/GInfractionManager.h @@ -39,33 +39,60 @@ class GInfractionManager { return *mObj; } - // static bool Exists() {} + static bool Exists() { + return mObj != nullptr; + } - // void ClearInfractions() {} + void ClearInfractions() { + mInfractions = 0; + } - // void ReportResistingArrest() {} + void ReportResistingArrest() { + ReportInfraction(kInfraction_Resist); + } - // void ReportSpeeding(bool speeding) {} + void ReportSpeeding(bool speeding) { + mSpeeding = speeding; + if (speeding) { + ReportInfraction(kInfraction_Speeding); + } + } - // void ReportRecklessDriving(bool reckless) {} + void ReportRecklessDriving(bool reckless) { + mDrivingRecklessly = reckless; + if (reckless) { + ReportInfraction(kInfraction_Reckless); + } + } - // void ReportRacing(bool racing) {} + void ReportRacing(bool racing) { + mRacing = racing; + if (racing) { + ReportInfraction(kInfraction_Racing); + } + } - // void ReportAssaultingPoliceOfficer() {} + void ReportAssaultingPoliceOfficer() { + ReportInfraction(kInfraction_Assault); + } - // void ReportHitAndRun() {} + void ReportHitAndRun() { + ReportInfraction(kInfraction_HitAndRun); + } - // void ReportDamageToProperty() {} + void ReportDamageToProperty() { + ReportInfraction(kInfraction_Damage); + } void ReportDrivingOffRoadWay() { ReportInfraction(kInfraction_OffRoad); } - // float GetRecklessSpeedThreshold() {} + float GetRecklessSpeedThreshold(); - // float GetSpeedLimit() {} + float GetSpeedLimit(); - // float GetRacingSpeedLimit() {} + float GetRacingSpeedLimit(); unsigned int GetInfractions() { return mInfractions; diff --git a/src/Speed/Indep/Src/Gameplay/GManager.h b/src/Speed/Indep/Src/Gameplay/GManager.h index 93b87c293..9bccfb1f4 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.h +++ b/src/Speed/Indep/Src/Gameplay/GManager.h @@ -63,6 +63,8 @@ class GManager : public UTL::COM::Object, public IVehicleCache { static void Init(const char *vaultPackName); + const char *GetCacheName() const override { return "GManager"; } + void InitializeRaceStreaming(); void PreBeginGameplay(); void BeginGameplay(); @@ -76,6 +78,8 @@ class GManager : public UTL::COM::Object, public IVehicleCache { void TrackValue(const char *valueName, float value); void IncValue(const char *valueName); float GetValue(const char *valueName); + float GetValue(unsigned int valueKey); + bool GetIsBiggerValueBetter(unsigned int valueKey); void RegisterInstance(GRuntimeInstance *instance); void UnregisterInstance(GRuntimeInstance *instance); @@ -104,7 +108,7 @@ class GManager : public UTL::COM::Object, public IVehicleCache { void RefreshSpeedTrapIcons(); void GatherInstanceKeys(Attrib::Gen::gameplay &collection, AttribKeyList &list, unsigned int templateKey); void FindBountySpawnPoints(); - unsigned int GetNumBountySpawnMarkers() const; + unsigned int GetNumBountySpawnMarkers() const { return mNumBountySpawnPoints; } unsigned int GetBountySpawnMarker(unsigned int index) const; void ServicePendingCharacters(); void UnspawnUselessCharacters(); @@ -128,8 +132,8 @@ class GManager : public UTL::COM::Object, public IVehicleCache { void UnspawnAllIcons(); void FreeAllIcons(); - unsigned int GetNumMilestones(); - GMilestone *GetMilestone(unsigned int index); + unsigned int GetNumMilestones() { return mNumMilestones; } + GMilestone *GetMilestone(unsigned int index) { return &mMilestones[index]; } GMilestone *GetFirstMilestone(bool availOnly, unsigned int binNumber); GMilestone *GetNextMilestone(GMilestone *current, bool availOnly, unsigned int binNumber); void AllocateMilestones(); @@ -142,8 +146,8 @@ class GManager : public UTL::COM::Object, public IVehicleCache { unsigned int SaveMilestones(GMilestone *dest); void LoadMilestones(GMilestone *src, unsigned int count); - unsigned int GetNumSpeedTraps(); - GSpeedTrap *GetSpeedTrap(unsigned int index); + unsigned int GetNumSpeedTraps() { return mNumSpeedTraps; } + GSpeedTrap *GetSpeedTrap(unsigned int index) { return &mSpeedTraps[index]; } GSpeedTrap *GetFirstSpeedTrap(bool activeOnly, unsigned int binNumber); GSpeedTrap *GetNextSpeedTrap(GSpeedTrap *current, bool activeOnly, unsigned int binNumber); void AllocateSpeedTraps(); @@ -189,6 +193,10 @@ class GManager : public UTL::COM::Object, public IVehicleCache { return mWarping; } + bool GetInGameplay() const { + return mInGameplay; + } + bool GetStartFreeRoamPursuit() { return mStartFreeRoamPursuit; } diff --git a/src/Speed/Indep/Src/Gameplay/GMilestone.cpp b/src/Speed/Indep/Src/Gameplay/GMilestone.cpp index e69de29bb..bed2ef68c 100644 --- a/src/Speed/Indep/Src/Gameplay/GMilestone.cpp +++ b/src/Speed/Indep/Src/Gameplay/GMilestone.cpp @@ -0,0 +1,121 @@ +#include "Speed/Indep/Src/Gameplay/GMilestone.h" + +#include "Speed/Indep/Src/Gameplay/GManager.h" +#include "Speed/Indep/Src/Gameplay/GRaceDatabase.h" +#include "Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h" +#include "Speed/Indep/Src/Generated/AttribSys/Classes/milestonetypes.h" +#include "Speed/Indep/Src/Generated/Events/EReportMilestoneAtStake.hpp" +#include "Speed/Indep/Src/Generated/Messages/MNotifyMilestoneReached.h" +#include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" + +void Game_AwardPlayerBounty(int bounty); +void Game_ChallengeCompleted(); + +GMilestone::GMilestone() + : mTypeKey(0), // + mChallengeKey(0), // + mState(0), // + mFlags(0), // + mBinNumber(0), // + mRequiredValue(0.0f), // + mRecordedValue(0.0f) {} + +float GMilestone::GetCurrentValue() const { + return GManager::Get().GetValue(mTypeKey); +} + +float GMilestone::GetBounty() const { + Attrib::Gen::gameplay gameplayObj(mChallengeKey, 0, nullptr); + + if (!gameplayObj.IsValid()) { + return 0.0f; + } + + return static_cast(gameplayObj.Bounty(0)); +} + +int GMilestone::GetLocalizationTag() const { + Attrib::Gen::milestonetypes milestoneType(mTypeKey, 0, nullptr); + + if (!milestoneType.IsValid()) { + return 0; + } + + return milestoneType.LocalizationTag(); +} + +unsigned int GMilestone::GetJumpMarkerKey() const { + Attrib::Gen::gameplay gameplayObj(mChallengeKey, 0, nullptr); + + return gameplayObj.SpawnPoint(0).GetCollectionKey(); +} + +void GMilestone::DebugForceComplete() { + mFlags |= kFlag_CompletionFaked; + mState = kState_DonePendingEscape; +} + +void GMilestone::Init(unsigned int challengeKey) { + mChallengeKey = challengeKey; + Reset(); +} + +void GMilestone::Reset() { + Attrib::Gen::gameplay gameplayObj(mChallengeKey, 0, nullptr); + + mTypeKey = Attrib::StringToKey(gameplayObj.MilestoneName(0)); + mState = kState_Locked; + mBinNumber = static_cast(gameplayObj.BinIndex(0)); + mRequiredValue = gameplayObj.GoalEasy(0); + mRecordedValue = 0.0f; + + if (GManager::Get().GetIsBiggerValueBetter(mTypeKey)) { + mFlags |= kFlag_BiggerIsBetter; + } +} + +void GMilestone::Unlock() { + if (mState == kState_Locked) { + mState = kState_Available; + } +} + +bool GMilestone::ValueMeetsGoal(float value) { + float delta; + + delta = mRequiredValue - value; + if (((mFlags ^ kFlag_BiggerIsBetter) & kFlag_BiggerIsBetter) != 0) { + delta = -delta; + } + + return delta <= 0.0f; +} + +void GMilestone::NotifyProgress(float value) { + if (mState == kState_Available && ValueMeetsGoal(value)) { + new EReportMilestoneAtStake(this); + mState = kState_DonePendingEscape; + } +} + +void GMilestone::NotifyPursuitOver(bool escaped) { + if (mState == kState_DonePendingEscape) { + if (!escaped) { + mState = kState_Available; + } else { + Attrib::Gen::milestonetypes milestoneType(mTypeKey, 0, nullptr); + MNotifyMilestoneReached message(milestoneType.CollectionName(), (mFlags & kFlag_CompletionFaked) ? mRequiredValue : GetCurrentValue()); + + mRecordedValue = (mFlags & kFlag_CompletionFaked) ? mRequiredValue : GetCurrentValue(); + mState = kState_Awarded; + message.Post(UCrc32(0x20D60DBF)); + + if (GRaceDatabase::Get().GetBinNumber(mBinNumber)) { + GRaceDatabase::Get().GetBinNumber(mBinNumber)->RefreshProgress(); + } + + Game_AwardPlayerBounty(static_cast(GetBounty())); + Game_ChallengeCompleted(); + } + } +} diff --git a/src/Speed/Indep/Src/Gameplay/GMilestone.h b/src/Speed/Indep/Src/Gameplay/GMilestone.h index 4de0c87cf..9753105e4 100644 --- a/src/Speed/Indep/Src/Gameplay/GMilestone.h +++ b/src/Speed/Indep/Src/Gameplay/GMilestone.h @@ -14,6 +14,76 @@ struct MilestoneTypeInfo { // total size: 0x14 class GMilestone { + public: + enum State { + kState_Invalid = 0, + kState_Locked = 1, + kState_Available = 2, + kState_DonePendingEscape = 3, + kState_Awarded = 4, + }; + + enum Flags { + kFlag_BiggerIsBetter = 1, + kFlag_CompletionFaked = 2, + }; + + bool GetIsLocked() const { + return mState == kState_Locked; + } + + bool GetIsAvailable() const { + return mState == kState_Available; + } + + bool GetIsDonePendingEscape() const { + return mState == kState_DonePendingEscape; + } + + bool GetIsAwarded() const { + return mState == kState_Awarded; + } + + unsigned int GetTypeKey() const { + return mTypeKey; + } + + unsigned int GetChallengeKey() const { + return mChallengeKey; + } + + unsigned int GetBinNumber() const { + return mBinNumber; + } + + float GetRequiredValue() const { + return mRequiredValue; + } + + float GetRecordedPassValue() const { + return mRecordedValue; + } + + bool operator<(const GMilestone &rhs) const { + return mChallengeKey < rhs.mChallengeKey; + } + + GMilestone(); + float GetCurrentValue() const; + float GetBounty() const; + int GetLocalizationTag() const; + unsigned int GetJumpMarkerKey() const; + void DebugForceComplete(); + void Init(unsigned int challengeKey); + void Reset(); + void Unlock(); + void SetGoal(float required) { + mRequiredValue = required; + } + bool ValueMeetsGoal(float value); + void NotifyProgress(float value); + void NotifyPursuitOver(bool escaped); + private: unsigned int mTypeKey; // offset 0x0, size 0x4 unsigned int mChallengeKey; // offset 0x4, size 0x4 diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h index 0cc743d17..07ef10329 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h @@ -36,7 +36,7 @@ class GRaceBin { const Attrib::Gen::gameplay *GetGameplayObj() const; - GVault *GetChildVault() const; + GVault *GetChildVault() const { return mChildVault; } int GetBinNumber() const; @@ -84,9 +84,9 @@ class GRaceBin { int GetRequiredRaceWins() const; - int GetCompletedChallenges() const; + int GetCompletedChallenges() const { return mStats.mChallengesCompleted; } - int GetAwardedRaceWins() const; + int GetAwardedRaceWins() const { return mStats.mRacesWon; } void RefreshProgress(); @@ -95,9 +95,9 @@ class GRaceBin { unsigned int Deserialize(unsigned char *src); - void SetCompletedChallenges(int numChallenges); + void SetCompletedChallenges(int numChallenges) { mStats.mChallengesCompleted = numChallenges; } - void SetRacesWon(int numRaces); + void SetRacesWon(int numRaces) { mStats.mRacesWon = numRaces; } Attrib::Gen::gameplay mBinRecord; // offset 0x0, size 0x14 GVault *mChildVault; // offset 0x14, size 0x4 @@ -118,12 +118,23 @@ class GRaceDatabase { static void Init(); - GRaceCustom *GetStartupRace(); + GRaceCustom *GetStartupRace() { return mStartupRace; } + Context GetStartupRaceContext() { return mStartupRaceContext; } void SetStartupRace(GRaceCustom *custom, Context context); void FreeCustomRace(GRaceCustom *custom); GRaceParameters *GetRaceFromHash(unsigned int hash); GRaceCustom *AllocCustomRace(GRaceParameters *parms); + unsigned int GetBinCount() { return mBinCount; } + GRaceBin *GetBin(unsigned int index); + GRaceBin *GetBinNumber(int number); + unsigned int GetRaceCount() { return mRaceCountStatic + mRaceCountDynamic; } + + void SimulateDDayComplete() {} + + void NotifyVaultLoaded(GVault *vault); + void NotifyVaultUnloading(GVault *vault); + static GRaceDatabase &Get() { return *mObj; } diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index 3af76cbf1..7d7077899 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -45,6 +45,57 @@ struct GRacerInfo { return mCameraDetached; } + bool GetIsHuman() const; + const char *GetName() const { return mName; } + int GetIndex() const { return mIndex; } + int GetAiRanking() const { return mAiRanking; } + int GetSpeedTrapsCrossed() const { return mSpeedTrapsCrossed; } + bool GetIsKnockedOut() const { return mKnockedOut; } + bool GetIsTotalled() const { return mTotalled; } + bool GetIsEngineBlown() const { return mEngineBlown; } + bool GetIsBusted() const { return mBusted; } + bool GetChallengeComplete() const { return mChallengeComplete; } + float GetPctLapComplete() const { return mPctLapComplete; } + int GetLapsCompleted() const { return mLapsCompleted; } + int GetChecksHitThisLap() const { return mCheckpointsHitThisLap; } + int GetTollboothsCrossed() const { return mTollboothsCrossed; } + float GetDistToNextCheck() const { return mDistToNextCheckpoint; } + float GetDistDriven() const { return mDistanceDriven; } + float GetTopSpeed() const { return mTopSpeed; } + float GetFinishingSpeed() const { return mFinishingSpeed; } + float GetPoundsNOSUsed() const { return mPoundsNOSUsed; } + float GetRaceTime() const { return mRaceTimer.GetTime(); } + float GetLapTime() const { return mLapTimer.GetTime(); } + float GetCheckTime() const { return mCheckTimer.GetTime(); } + int GetPerfectShifts() const { return mNumPerfectShifts; } + int GetTrafficCarsHit() const { return mNumTrafficCarsHit; } + float GetSpeedBreakerTime() const { return mSpeedBreakerTime; } + float GetPointTotal() const { return mPointTotal; } + float GetZeroToSixtyTime() const { return mZeroToSixtyTime; } + float GetQuarterMileTime() const { return mQuarterMileTime; } + + void SetName(const char *name) { mName = name; } + void SetIndex(int n) { mIndex = n; } + void SetRanking(int n) { mRanking = n; } + void SetRaceTime(float f) { mRaceTimer.SetTime(f); } + void SetLapsCompleted(int n) { mLapsCompleted = n; } + void SetPctRaceComplete(float f) { mPctRaceComplete = f; } + void SetDistDriven(float f) { mDistanceDriven = f; } + void SetTopSpeed(float f) { mTopSpeed = f; } + void SetPoundsNOSUsed(float f) { mPoundsNOSUsed = f; } + + void Reset(); + void Update(float dT); + void SaveExistingRaceStats(); + void RestoreExistingRaceStats(); + bool AreStatsReady() const; + void ChooseRandomName(); + bool ChooseBossName(); + bool ChooseRacerName(); + void FinalizeRaceStats(); + void ChallengeComplete(); + void ClearAll() {} + private: HSIMABLE mhSimable; // offset 0x0, size 0x4 GCharacter *mGameCharacter; // offset 0x4, size 0x4 @@ -232,13 +283,13 @@ class GRaceParameters { void NotifyParentVaultLoaded(); - const Attrib::Gen::gameplay *GetGameplayObj() const; + const Attrib::Gen::gameplay *GetGameplayObj() const { return mRaceRecord; } struct GActivity *GetActivity() const; - struct GVault *GetChildVault() const; + struct GVault *GetChildVault() const { return mChildVault; } - struct GVault *GetParentVault() const; + struct GVault *GetParentVault() const { return mParentVault; } void GetBoundingBox(struct Vector2 &topLeft, struct Vector2 &botRight) const; @@ -340,9 +391,12 @@ class GRaceStatus : public UTL::COM::Object, public IVehicleCache { enum eVehicleCacheResult OnQueryVehicleCache(const IVehicle *removethis, const IVehicleCache *whosasking) const override; // Overrides: IVehicleCache - void OnRemovedVehicleCache(IVehicle *ivehicle) override; + void OnRemovedVehicleCache(IVehicle *ivehicle) override {} - void SetRaceContext(GRace::Context context); + // Overrides: IVehicleCache + const char *GetCacheName() const override { return "GRaceStatus"; } + + void SetRaceContext(GRace::Context context) { mRaceContext = context; } GRacerInfo &GetRacerInfo(int index); @@ -350,7 +404,12 @@ class GRaceStatus : public UTL::COM::Object, public IVehicleCache { GRacerInfo *GetWinningPlayerInfo(); - int GetRacerCount() const; + int GetRacerCount() const { return mRacerCount; } + + void SetActivelyRacing(bool racing) { mActivelyRacing = racing; } + void SetHasBeenWon(bool won) { mHasBeenWon = won; } + void SetIsLoading(bool loading) { mIsLoading = loading; } + void SetTaskTime(float time) { mTaskTime = time; } void StartMasterTimer(); @@ -382,9 +441,9 @@ class GRaceStatus : public UTL::COM::Object, public IVehicleCache { void NotifyScriptWhenLoaded(); - void AddAvailableEventToMap(GRuntimeInstance *trigger, GRuntimeInstance *activity); + void AddAvailableEventToMap(GRuntimeInstance *trigger, GRuntimeInstance *activity) {} - void AddSpeedTrapToMap(GRuntimeInstance *trigger); + void AddSpeedTrapToMap(GRuntimeInstance *trigger) {} void AwardBonusTime(float seconds); @@ -528,6 +587,8 @@ class GRaceStatus : public UTL::COM::Object, public IVehicleCache { return mRaceBin->GetScaleOpenWorldHeat(); } + void EnterSuddenDeath() { mSuddenDeathMode = true; } + private: static struct GRaceStatus *fObj; @@ -611,7 +672,7 @@ class GRaceCustom : public GRaceParameters { void CreateRaceActivity(); - GActivity *GetRaceActivity() const; + GActivity *GetRaceActivity() const { return mRaceActivity; } // Overrides: GRaceParameters void GetCheckpointPosition(unsigned int index, UMath::Vector3 &pos) const override; @@ -619,7 +680,7 @@ class GRaceCustom : public GRaceParameters { // Overrides: GRaceParameters void GetCheckpointDirection(unsigned int index, UMath::Vector3 &dir) const override; - void SetReversed(bool isReverseDir); + void SetReversed(bool isReverseDir) { mReversed = isReverseDir; } void SetPositionalKnockout(bool enabled, int knockoutsPerLap); @@ -629,7 +690,7 @@ class GRaceCustom : public GRaceParameters { void SetTrafficDensity(int density); - void SetNumOpponents(int numOpponents); + void SetNumOpponents(int numOpponents) { mNumOpponents = numOpponents; } void SetDifficulty(GRace::Difficulty difficulty); diff --git a/src/Speed/Indep/Src/Gameplay/GSpeedTrap.cpp b/src/Speed/Indep/Src/Gameplay/GSpeedTrap.cpp index e69de29bb..8bc33d724 100644 --- a/src/Speed/Indep/Src/Gameplay/GSpeedTrap.cpp +++ b/src/Speed/Indep/Src/Gameplay/GSpeedTrap.cpp @@ -0,0 +1,75 @@ +#include "Speed/Indep/Src/Gameplay/GSpeedTrap.h" + +#include "Speed/Indep/Src/Gameplay/GManager.h" +#include "Speed/Indep/Src/Gameplay/GRaceDatabase.h" +#include "Speed/Indep/Src/Gameplay/GTrigger.h" +#include "Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h" + +GSpeedTrap::GSpeedTrap() + : mFlags(0), // + mBinNumber(0), // + mSpeedTrapKey(0), // + mCameraMarkerKey(0), // + mRequiredValue(0.0f), // + mRecordedValue(0.0f) {} + +float GSpeedTrap::GetBounty() const { + Attrib::Gen::gameplay gameplayObj(mSpeedTrapKey, 0, nullptr); + + if (!gameplayObj.IsValid()) { + return 0.0f; + } + + return static_cast(gameplayObj.Bounty(0)); +} + +GTrigger *GSpeedTrap::GetTrapTrigger() const { + return static_cast(GManager::Get().FindInstance(mSpeedTrapKey)); +} + +unsigned int GSpeedTrap::GetJumpMarkerKey() const { + Attrib::Gen::gameplay gameplayObj(mSpeedTrapKey, 0, nullptr); + + return gameplayObj.SpawnPoint(0).GetCollectionKey(); +} + +void GSpeedTrap::DebugForceComplete() { + SetFlag(kFlag_Unlocked | kFlag_Active | kFlag_Completed); + mRecordedValue = mRequiredValue; +} + +void GSpeedTrap::Init(unsigned int trapKey) { + mSpeedTrapKey = trapKey; + Reset(); +} + +void GSpeedTrap::Reset() { + Attrib::Gen::gameplay gameplayObj(mSpeedTrapKey, 0, nullptr); + + mFlags = 0; + mCameraMarkerKey = gameplayObj.CameraModelMarker(0).GetCollectionKey(); + mBinNumber = static_cast(gameplayObj.BinIndex(0)); + mRequiredValue = gameplayObj.ThreshholdSpeed(0) * 0.277779996f; + mRecordedValue = 0.0f; +} + +void GSpeedTrap::Unlock() { + mFlags = static_cast(mFlags | kFlag_Unlocked); +} + +void GSpeedTrap::Activate() { + mFlags = static_cast(mFlags | kFlag_Active); +} + +void GSpeedTrap::NotifyTriggered(float value) { + if (IsFlagSet(kFlag_Unlocked) && IsFlagSet(kFlag_Active)) { + mFlags = static_cast((mFlags & ~kFlag_Active) | kFlag_Completed); + mRecordedValue = value; + + if (GRaceDatabase::Get().GetBinNumber(mBinNumber)) { + GRaceDatabase::Get().GetBinNumber(mBinNumber)->RefreshProgress(); + } + + GManager::Get().RefreshSpeedTrapIcons(); + } +} diff --git a/src/Speed/Indep/Src/Gameplay/GSpeedTrap.h b/src/Speed/Indep/Src/Gameplay/GSpeedTrap.h index 77dc76771..18cba847e 100644 --- a/src/Speed/Indep/Src/Gameplay/GSpeedTrap.h +++ b/src/Speed/Indep/Src/Gameplay/GSpeedTrap.h @@ -7,6 +7,85 @@ // total size: 0x14 class GSpeedTrap { + public: + enum Flags { + kFlag_Unlocked = 1, + kFlag_Active = 2, + kFlag_Completed = 4, + kFlag_KnockedOver = 8, + }; + + bool GetIsLocked() const { + return IsFlagClear(kFlag_Unlocked); + } + + bool GetIsUnlocked() const { + return IsFlagSet(kFlag_Unlocked); + } + + bool GetIsCompleted() const { + return IsFlagSet(kFlag_Completed); + } + + bool GetIsKnockedOver() const { + return IsFlagSet(kFlag_KnockedOver); + } + + bool GetIsActive() const { + return IsFlagSet(kFlag_Active); + } + + unsigned int GetSpeedTrapKey() const { + return mSpeedTrapKey; + } + + unsigned int GetCameraMarkerKey() const { + return mCameraMarkerKey; + } + + unsigned int GetBinNumber() const { + return mBinNumber; + } + + float GetTriggerSpeed() const { + return mRequiredValue; + } + + float GetRecordedPassSpeed() const { + return mRecordedValue; + } + + bool operator<(const GSpeedTrap &rhs) const { + return mSpeedTrapKey < rhs.mSpeedTrapKey; + } + + void SetFlag(unsigned int mask) { + mFlags = static_cast(mFlags | mask); + } + + void ClearFlag(unsigned int mask) { + mFlags = static_cast(mFlags & ~mask); + } + + bool IsFlagSet(unsigned int mask) const { + return (mFlags & mask) != 0; + } + + bool IsFlagClear(unsigned int mask) const { + return (mFlags & mask) == 0; + } + + GSpeedTrap(); + float GetBounty() const; + class GTrigger *GetTrapTrigger() const; + unsigned int GetJumpMarkerKey() const; + void DebugForceComplete(); + void Init(unsigned int trapKey); + void Reset(); + void Unlock(); + void Activate(); + void NotifyTriggered(float value); + private: unsigned short mFlags; // offset 0x0, size 0x2 unsigned short mBinNumber; // offset 0x2, size 0x2 diff --git a/src/Speed/Indep/Src/Gameplay/GTimer.cpp b/src/Speed/Indep/Src/Gameplay/GTimer.cpp index e69de29bb..decbabfb4 100644 --- a/src/Speed/Indep/Src/Gameplay/GTimer.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTimer.cpp @@ -0,0 +1,38 @@ +#include "Speed/Indep/Src/Gameplay/GTimer.h" + +#include "Speed/Indep/Src/Sim/Simulation.h" + +GTimer::GTimer() { + Reset(0.0f); +} + +GTimer::~GTimer() {} + +void GTimer::Start() { + mTotalTime = GetTime(); + mStartTime = Sim::GetTime(); + mRunning = true; +} + +void GTimer::Stop() { + mTotalTime = GetTime(); + mRunning = false; +} + +void GTimer::Reset(float value) { + mTotalTime = value; + mStartTime = Sim::GetTime(); +} + +float GTimer::GetTime() const { + if (!mRunning) { + return mTotalTime; + } + + return mTotalTime + (Sim::GetTime() - mStartTime); +} + +void GTimer::SetTime(float time) { + mTotalTime = time; + mRunning = false; +} diff --git a/src/Speed/Indep/Src/Gameplay/GTimer.h b/src/Speed/Indep/Src/Gameplay/GTimer.h index 90169c489..65af7380d 100644 --- a/src/Speed/Indep/Src/Gameplay/GTimer.h +++ b/src/Speed/Indep/Src/Gameplay/GTimer.h @@ -8,6 +8,16 @@ // total size: 0xC class GTimer { public: + GTimer(); + ~GTimer(); + + bool IsRunning() { return mRunning; } + void Start(); + void Stop(); + void Reset(float value); + float GetTime() const; + void SetTime(float time); + private: float mStartTime; // offset 0x0, size 0x4 float mTotalTime; // offset 0x4, size 0x4 From d6a189c3b7b2035d17750e8c154c4fea9b2844cf Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 20:22:21 +0100 Subject: [PATCH 211/691] 7.9%: add race database and parameter gameplay wrappers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GHandler.cpp | 15 + src/Speed/Indep/Src/Gameplay/GHandler.h | 14 + src/Speed/Indep/Src/Gameplay/GMarker.cpp | 21 ++ .../Indep/Src/Gameplay/GRaceDatabase.cpp | 294 ++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GRaceDatabase.h | 13 +- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 278 +++++++++++++++++ src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 2 +- src/Speed/Indep/Src/Gameplay/GState.cpp | 5 + src/Speed/Indep/Src/Gameplay/GState.h | 4 + 9 files changed, 641 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GHandler.cpp b/src/Speed/Indep/Src/Gameplay/GHandler.cpp index e69de29bb..77887b80e 100644 --- a/src/Speed/Indep/Src/Gameplay/GHandler.cpp +++ b/src/Speed/Indep/Src/Gameplay/GHandler.cpp @@ -0,0 +1,15 @@ +#include "Speed/Indep/Src/Gameplay/GHandler.h" + +#include "Speed/Indep/Src/Lua/LuaRuntime.h" + +GHandler::GHandler(const Attrib::Key &handlerKey) + : GRuntimeInstance(handlerKey, kGameplayObjType_Handler), // + mAttached(false) {} + +GHandler::~GHandler() { + Detach(LuaRuntime::Get().GetState()); +} + +void GHandler::NotifyBytecodeFlushed() { + mAttached = false; +} diff --git a/src/Speed/Indep/Src/Gameplay/GHandler.h b/src/Speed/Indep/Src/Gameplay/GHandler.h index a283ca89c..cc818bfd0 100644 --- a/src/Speed/Indep/Src/Gameplay/GHandler.h +++ b/src/Speed/Indep/Src/Gameplay/GHandler.h @@ -7,16 +7,30 @@ #include "GRuntimeInstance.h" +struct LuaMessageDeliveryInfo; +struct lua_State; + // total size: 0x2C class GHandler : public GRuntimeInstance { public: GHandler(const Attrib::Key &handlerKey); + ~GHandler() override; + GameplayObjType GetType() const override { return kGameplayObjType_Handler; } + bool IsScripted() const { + return mAttached; + } + + void Attach(lua_State *luaState); + void Detach(lua_State *luaState); void NotifyBytecodeFlushed(); + bool MessagePassesFilters(LuaMessageDeliveryInfo *deliveryInfo); + void HandleMessage(LuaMessageDeliveryInfo *deliveryInfo); + void ExecuteScriptedHandler(LuaMessageDeliveryInfo *deliveryInfo); private: bool mAttached; // offset 0x28, size 0x1 diff --git a/src/Speed/Indep/Src/Gameplay/GMarker.cpp b/src/Speed/Indep/Src/Gameplay/GMarker.cpp index e69de29bb..c8d300f04 100644 --- a/src/Speed/Indep/Src/Gameplay/GMarker.cpp +++ b/src/Speed/Indep/Src/Gameplay/GMarker.cpp @@ -0,0 +1,21 @@ +#include "Speed/Indep/Src/Gameplay/GMarker.h" + +#include "Speed/Indep/Libs/Support/Utility/UMath.h" + +GMarker::GMarker(const Attrib::Key &markerKey) + : GRuntimeInstance(markerKey, kGameplayObjType_Marker) { + Attrib::Gen::gameplay gameplayObj(markerKey, 0, nullptr); + UMath::Matrix4 rotMat; + UMath::Vector3 position; + UMath::Vector3 forward = {0.0f, 0.0f, 1.0f}; + + position = gameplayObj.Position(0); + UMath::MultYRot(UMath::Matrix4::kIdentity, -gameplayObj.Rotation(0) * 0.00069444446f, rotMat); + VU0_MATRIX3x4_vect3mult(forward, rotMat, mDirection); + + mPosition.x = -position.y; + mPosition.y = position.z; + mPosition.z = position.x; +} + +GMarker::~GMarker() {} diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index e69de29bb..f4e2da23f 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -0,0 +1,294 @@ +#include "Speed/Indep/Src/Gameplay/GRaceDatabase.h" + +#include "Speed/Indep/Src/Gameplay/GRaceStatus.h" +#include "Speed/Indep/Src/Gameplay/GVault.h" +#include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" + +GRaceDatabase *GRaceDatabase::mObj = nullptr; + +unsigned int GRaceBin::GetCollectionKey() const { + return mBinRecord.GetCollection(); +} + +const Attrib::Gen::gameplay *GRaceBin::GetGameplayObj() const { + return &mBinRecord; +} + +int GRaceBin::GetBinNumber() const { + return *reinterpret_cast(mBinRecord.GetAttributePointer(0x6CE23062, 0) ? + mBinRecord.GetAttributePointer(0x6CE23062, 0) : + Attrib::DefaultDataArea(sizeof(int))); +} + +int GRaceBin::GetBossReputation() const { + return mBinRecord.BossReputation(0); +} + +float GRaceBin::GetBaseOpenWorldHeat() const { + return *reinterpret_cast(mBinRecord.GetAttributePointer(0x8F186AC4, 0) ? + mBinRecord.GetAttributePointer(0x8F186AC4, 0) : + Attrib::DefaultDataArea(sizeof(float))); +} + +float GRaceBin::GetMaxOpenWorldHeat() const { + return *reinterpret_cast(mBinRecord.GetAttributePointer(0xE8C24416, 0) ? + mBinRecord.GetAttributePointer(0xE8C24416, 0) : + Attrib::DefaultDataArea(sizeof(float))); +} + +float GRaceBin::GetScaleOpenWorldHeat() const { + return *reinterpret_cast(mBinRecord.GetAttributePointer(0x1823B89E, 0) ? + mBinRecord.GetAttributePointer(0x1823B89E, 0) : + Attrib::DefaultDataArea(sizeof(float))); +} + +unsigned int GRaceBin::GetBossRaceCount() const { + Attrib::Attribute bossRaces; + + bossRaces = mBinRecord.Get(0xD5A174AA); + return bossRaces.GetLength(); +} + +unsigned int GRaceBin::GetBossRaceHash(unsigned int index) const { + GRaceParameters *race; + const unsigned int *key; + + key = reinterpret_cast(mBinRecord.GetAttributePointer(0xD5A174AA, index)); + if (!key) { + key = reinterpret_cast(Attrib::DefaultDataArea(sizeof(unsigned int))); + } + + race = GRaceDatabase::Get().GetRaceFromKey(*key); + return race ? race->GetEventHash() : 0; +} + +unsigned int GRaceBin::GetWorldRaceCount() const { + Attrib::Attribute worldRaces; + + worldRaces = mBinRecord.Get(0xA7EF40EF); + return worldRaces.GetLength(); +} + +unsigned int GRaceBin::GetWorldRaceHash(unsigned int index) const { + GRaceParameters *race; + const unsigned int *key; + + key = reinterpret_cast(mBinRecord.GetAttributePointer(0xA7EF40EF, index)); + if (!key) { + key = reinterpret_cast(Attrib::DefaultDataArea(sizeof(unsigned int))); + } + + race = GRaceDatabase::Get().GetRaceFromKey(*key); + return race ? race->GetEventHash() : 0; +} + +unsigned int GRaceBin::GetBaselineUnlockCount() const { + Attrib::Attribute unlocks; + + unlocks = mBinRecord.Get(0xBAF89280); + return unlocks.GetLength(); +} + +unsigned int GRaceBin::GetBaselineUnlock(unsigned int index) const { + const unsigned int *key; + + key = reinterpret_cast(mBinRecord.GetAttributePointer(0xBAF89280, index)); + if (!key) { + key = reinterpret_cast(Attrib::DefaultDataArea(sizeof(unsigned int))); + } + + return *key; +} + +unsigned int GRaceBin::GetBarrierCount() const { + Attrib::Attribute barriers; + + barriers = mBinRecord.Get(0xE244F26B); + return barriers.GetLength(); +} + +const char *GRaceBin::GetBarrierName(unsigned int index) const { + const char *barrierName; + const EA::Reflection::Text *barrierText; + + barrierText = reinterpret_cast(mBinRecord.GetAttributePointer(0xE244F26B, index)); + if (!barrierText) { + barrierText = reinterpret_cast(Attrib::DefaultDataArea(sizeof(EA::Reflection::Text))); + } + + barrierName = *barrierText; + if (barrierName && *barrierName == '*') { + return barrierName + 1; + } + + return barrierName; +} + +unsigned int GRaceBin::GetBarrierHash(unsigned int index) const { + const char *barrierName; + + barrierName = GetBarrierName(index); + return barrierName ? Attrib::StringToKey(barrierName) : 0; +} + +bool GRaceBin::GetBarrierIsFlipped(unsigned int index) const { + const char *barrierName; + const EA::Reflection::Text *barrierText; + + barrierText = reinterpret_cast(mBinRecord.GetAttributePointer(0xE244F26B, index)); + if (!barrierText) { + barrierText = reinterpret_cast(Attrib::DefaultDataArea(sizeof(EA::Reflection::Text))); + } + + barrierName = *barrierText; + return barrierName && *barrierName == '*'; +} + +int GRaceBin::GetRequiredBounty() const { + return *reinterpret_cast(mBinRecord.GetAttributePointer(0xD3657D92, 0) ? + mBinRecord.GetAttributePointer(0xD3657D92, 0) : + Attrib::DefaultDataArea(sizeof(int))); +} + +int GRaceBin::GetRequiredChallenges() const { + return *reinterpret_cast(mBinRecord.GetAttributePointer(0x6DD4B98B, 0) ? + mBinRecord.GetAttributePointer(0x6DD4B98B, 0) : + Attrib::DefaultDataArea(sizeof(int))); +} + +int GRaceBin::GetRequiredRaceWins() const { + return *reinterpret_cast(mBinRecord.GetAttributePointer(0xD617FEDC, 0) ? + mBinRecord.GetAttributePointer(0xD617FEDC, 0) : + Attrib::DefaultDataArea(sizeof(int))); +} + +GRaceCustom *GRaceDatabase::GetStartupRace() { + return mStartupRace; +} + +Context GRaceDatabase::GetStartupRaceContext() { + return mStartupRaceContext; +} + +unsigned int GRaceDatabase::GetBinCount() { + return mBinCount; +} + +unsigned int GRaceDatabase::GetRaceCount() { + return mRaceCountStatic + mRaceCountDynamic; +} + +GRaceBin *GRaceDatabase::GetBin(unsigned int index) { + return &mBins[index]; +} + +GRaceParameters *GRaceDatabase::GetRaceParameters(unsigned int index) { + if (mRaceCountStatic <= index) { + return mRaceCustom[index - mRaceCountStatic]; + } + + return &mRaceParameters[index]; +} + +GRaceParameters *GRaceDatabase::GetRaceFromKey(unsigned int key) { + unsigned int i; + + for (i = 0; i < GetRaceCount(); i++) { + GRaceParameters *race; + + race = GetRaceParameters(i); + if (race && race->GetCollectionKey() == key) { + return race; + } + } + + return nullptr; +} + +void GRaceDatabase::DestroyCustomRace(GRaceCustom *custom) { + unsigned int i; + + if (custom) { + delete custom; + } + + for (i = 0; i < 4; i++) { + if (mRaceCustom[i] == custom) { + unsigned int lastIndex; + + lastIndex = mRaceCountDynamic - 1; + if (i < lastIndex) { + mRaceCustom[i] = mRaceCustom[lastIndex]; + } + mRaceCountDynamic = lastIndex; + mRaceCustom[lastIndex] = nullptr; + return; + } + } +} + +void GRaceDatabase::ClearStartupRace() { + if (mStartupRace && !mStartupRace->GetFreedByOwner()) { + DestroyCustomRace(mStartupRace); + } + + mStartupRaceContext = kRaceContext_QuickRace; + mStartupRace = nullptr; +} + +GRaceBin *GRaceDatabase::GetBinNumber(int number) { + unsigned int i; + + for (i = 0; i < GetBinCount(); i++) { + GRaceBin *bin; + + bin = &mBins[i]; + if (bin->GetBinNumber() == number) { + return bin; + } + } + + return nullptr; +} + +void GRaceDatabase::NotifyVaultLoaded(GVault *vault) { + unsigned int i; + + for (i = 0; i < GetRaceCount(); i++) { + GRaceParameters *race; + + race = GetRaceParameters(i); + if (race->GetParentVault() == vault) { + race->NotifyParentVaultLoaded(); + } + } +} + +void GRaceDatabase::NotifyVaultUnloading(GVault *vault) { + unsigned int i; + + for (i = 0; i < GetRaceCount(); i++) { + GRaceParameters *race; + + race = GetRaceParameters(i); + if (race->GetParentVault() == vault) { + race->NotifyParentVaultUnloading(); + } + } + + if (mStartupRace && mStartupRace->GetParentVault() == vault) { + ClearStartupRace(); + } +} + +void GRaceDatabase::FreeCustomRace(GRaceCustom *custom) { + if (!custom) { + return; + } + + if (custom == mStartupRace) { + custom->SetFreedByOwner(); + } else { + DestroyCustomRace(custom); + } +} diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h index 07ef10329..6e2f3bf78 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h @@ -118,17 +118,20 @@ class GRaceDatabase { static void Init(); - GRaceCustom *GetStartupRace() { return mStartupRace; } - Context GetStartupRaceContext() { return mStartupRaceContext; } + GRaceCustom *GetStartupRace(); + Context GetStartupRaceContext(); void SetStartupRace(GRaceCustom *custom, Context context); void FreeCustomRace(GRaceCustom *custom); + void DestroyCustomRace(GRaceCustom *custom); GRaceParameters *GetRaceFromHash(unsigned int hash); + GRaceParameters *GetRaceFromKey(unsigned int key); + GRaceParameters *GetRaceParameters(unsigned int index); GRaceCustom *AllocCustomRace(GRaceParameters *parms); - unsigned int GetBinCount() { return mBinCount; } + unsigned int GetBinCount(); GRaceBin *GetBin(unsigned int index); GRaceBin *GetBinNumber(int number); - unsigned int GetRaceCount() { return mRaceCountStatic + mRaceCountDynamic; } + unsigned int GetRaceCount(); void SimulateDDayComplete() {} @@ -148,6 +151,8 @@ class GRaceDatabase { } private: + void ClearStartupRace(); + unsigned int mRaceCountStatic; // offset 0x0, size 0x4 unsigned int mRaceCountDynamic; // offset 0x4, size 0x4 struct GRaceIndexData *mRaceIndex; // offset 0x8, size 0x4 diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index e69de29bb..438a7a84b 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -0,0 +1,278 @@ +#include "Speed/Indep/Src/Gameplay/GRaceStatus.h" + +#include "Speed/Indep/Src/Gameplay/GVault.h" +#include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" + +void GRaceParameters::EnsureLoaded() const { + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } +} + +void GRaceParameters::BlockUntilLoaded() { + EnsureLoaded(); +} + +bool GRaceParameters::GetIsLoaded() const { + if (mParentVault && !mParentVault->IsLoaded()) { + return false; + } + + if (mChildVault && !mChildVault->IsLoaded()) { + return false; + } + + return true; +} + +void GRaceParameters::NotifyParentVaultUnloading() { + mRaceRecord = nullptr; +} + +void GRaceParameters::NotifyParentVaultLoaded() { +} + +unsigned int GRaceParameters::GetCollectionKey() const { + return mRaceRecord ? mRaceRecord->GetCollection() : 0; +} + +float GRaceParameters::GetRaceLengthMeters() const { + EnsureLoaded(); + return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x7C11C52E, 0) ? + mRaceRecord->GetAttributePointer(0x7C11C52E, 0) : + Attrib::DefaultDataArea(sizeof(float))); +} + +int GRaceParameters::GetReputation() const { + return 0; +} + +float GRaceParameters::GetCashValue() const { + return 0.0f; +} + +int GRaceParameters::GetLocalizationTag() const { + EnsureLoaded(); + return *reinterpret_cast(mRaceRecord->GetAttributePointer(0xDB89AB5C, 0) ? + mRaceRecord->GetAttributePointer(0xDB89AB5C, 0) : + Attrib::DefaultDataArea(sizeof(int))); +} + +int GRaceParameters::GetNumLaps() const { + EnsureLoaded(); + return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x0EBDC165, 0) ? + mRaceRecord->GetAttributePointer(0x0EBDC165, 0) : + Attrib::DefaultDataArea(sizeof(int))); +} + +const char *GRaceParameters::GetEventID() const { + EnsureLoaded(); + return *reinterpret_cast(mRaceRecord->GetAttributePointer(0xA78403EC, 0) ? + mRaceRecord->GetAttributePointer(0xA78403EC, 0) : + Attrib::DefaultDataArea(sizeof(EA::Reflection::Text))); +} + +float GRaceParameters::GetRivalBestTime() const { + EnsureLoaded(); + return mRaceRecord->RivalBestTime(0); +} + +float GRaceParameters::GetChallengeGoal() const { + EnsureLoaded(); + return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x4E90219D, 0) ? + mRaceRecord->GetAttributePointer(0x4E90219D, 0) : + Attrib::DefaultDataArea(sizeof(float))); +} + +bool GRaceParameters::GetIsPursuitRace() const { + EnsureLoaded(); + return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x2B1F54F6, 0) ? + mRaceRecord->GetAttributePointer(0x2B1F54F6, 0) : + Attrib::DefaultDataArea(sizeof(bool))); +} + +bool GRaceParameters::GetIsLoopingRace() const { + EnsureLoaded(); + return mRaceRecord->IsLoopingRace(0); +} + +bool GRaceParameters::GetRankPlayersByPoints() const { + EnsureLoaded(); + return mRaceRecord->RankPlayersByPoints(0); +} + +bool GRaceParameters::GetRankPlayersByDistance() const { + EnsureLoaded(); + return mRaceRecord->RankPlayersByDistance(0); +} + +bool GRaceParameters::GetScriptedCopsInRace() const { + EnsureLoaded(); + return mRaceRecord->ScriptedCopsInRace(0); +} + +bool GRaceParameters::GetNeverInQuickRace() const { + EnsureLoaded(); + return mRaceRecord->NeverInQuickRace(0); +} + +float GRaceParameters::GetTimeLimit() const { + EnsureLoaded(); + return mRaceRecord->TimeLimit(0); +} + +float GRaceParameters::GetMaxHeatLevel() const { + EnsureLoaded(); + return mRaceRecord->MaxHeatLevel(0); +} + +bool GRaceParameters::GetNoPostRaceScreen() const { + EnsureLoaded(); + return mRaceRecord->NoPostRaceScreen(0); +} + +float GRaceParameters::GetForceHeatLevel() const { + EnsureLoaded(); + return static_cast(mRaceRecord->ForceHeatLevel(0)); +} + +float GRaceParameters::GetInitialPlayerSpeed() const { + EnsureLoaded(); + return mRaceRecord->InitialPlayerSpeed(0); +} + +bool GRaceParameters::GetIsEpicPursuitRace() const { + EnsureLoaded(); + return mRaceRecord->IsEpicPursuitRace(0); +} + +const char *GRaceParameters::GetPlayerCarType() const { + EnsureLoaded(); + return mRaceRecord->PlayerCarType(0); +} + +float GRaceParameters::GetPlayerCarPerformance() const { + EnsureLoaded(); + return mRaceRecord->PlayerCarPerformance(0); +} + +int GRaceParameters::GetBustedLives() const { + EnsureLoaded(); + return mRaceRecord->BustedLives(0); +} + +int GRaceParameters::GetKnockoutsPerLap() const { + EnsureLoaded(); + return mRaceRecord->KnockoutsPerLap(0); +} + +bool GRaceParameters::GetCatchUp() const { + EnsureLoaded(); + return mRaceRecord->CatchUp(0); +} + +bool GRaceParameters::GetCatchUpOverride() const { + EnsureLoaded(); + return mRaceRecord->CatchUpOverride(0); +} + +const char *GRaceParameters::GetCatchUpSkill() const { + EnsureLoaded(); + return mRaceRecord->CatchUpSkill(0); +} + +const char *GRaceParameters::GetCatchUpSpread() const { + EnsureLoaded(); + return mRaceRecord->CatchUpSpread(0); +} + +float GRaceParameters::GetCatchUpIntegral() const { + EnsureLoaded(); + return mRaceRecord->CatchUpIntegral(0); +} + +float GRaceParameters::GetCatchUpDerivative() const { + EnsureLoaded(); + return mRaceRecord->CatchUpDerivative(0); +} + +bool GRaceParameters::GetPhotofinish() const { + EnsureLoaded(); + return mRaceRecord->DoPhotofinish(0); +} + +unsigned int GRaceParameters::GetNumCheckpoints() const { + Attrib::Attribute checkpointList; + + EnsureLoaded(); + checkpointList = mRaceRecord->Get(0x34AAE3FC); + return checkpointList.GetLength(); +} + +bool GRaceParameters::GetCheckpointsVisible() const { + EnsureLoaded(); + return mRaceRecord->CheckpointsVisible(0); +} + +unsigned int GRaceParameters::GetNumShortcuts() const { + EnsureLoaded(); + return mRaceRecord->Num_Shortcuts(); +} + +unsigned int GRaceParameters::GetNumBarrierExemptions() const { + EnsureLoaded(); + return mRaceRecord->Num_BarrierExemptions(); +} + +unsigned int GRaceParameters::GetBarrierCount() const { + EnsureLoaded(); + return mRaceRecord->Num_Barriers(); +} + +const char *GRaceParameters::GetTrafficPattern() const { + EnsureLoaded(); + return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x6319B692, 0) ? + mRaceRecord->GetAttributePointer(0x6319B692, 0) : + Attrib::DefaultDataArea(sizeof(EA::Reflection::Text))); +} + +unsigned int GRaceParameters::GetChallengeType() const { + return 0; +} + +GRace::Type GRaceParameters::GetRaceType() const { + return GRace::kRaceType_None; +} + +unsigned int GRaceParameters::GetEventHash() const { + return Attrib::StringToKey(GetEventID()); +} + +int GRaceParameters::GetTrafficDensity() const { + EnsureLoaded(); + return mRaceRecord->ForceTrafficDensity(0); +} + +int GRaceParameters::GetNumOpponents() const { + EnsureLoaded(); + return mRaceRecord->Num_Opponents(); +} + +float GRaceParameters::GetStartTime() const { + EnsureLoaded(); + return mRaceRecord->StartTime(0); +} + +float GRaceParameters::GetStartPercent() const { + EnsureLoaded(); + return mRaceRecord->StartPercent(0); +} + +const char *GRaceParameters::GetSpeedTrapCamera() const { + EnsureLoaded(); + return mRaceRecord->SpeedTrapCamera(0); +} diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index 7d7077899..7a7aaeb35 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -267,7 +267,7 @@ class GRaceParameters { const char *GetSpeedTrapCamera() const; - inline void EnsureLoaded() const {} + void EnsureLoaded() const; void BlockUntilLoaded(); diff --git a/src/Speed/Indep/Src/Gameplay/GState.cpp b/src/Speed/Indep/Src/Gameplay/GState.cpp index e69de29bb..747b8cfa7 100644 --- a/src/Speed/Indep/Src/Gameplay/GState.cpp +++ b/src/Speed/Indep/Src/Gameplay/GState.cpp @@ -0,0 +1,5 @@ +#include "Speed/Indep/Src/Gameplay/GState.h" + +GState::GState(const Attrib::Key &stateKey) : GRuntimeInstance(stateKey, kGameplayObjType_State) {} + +GState::~GState() {} diff --git a/src/Speed/Indep/Src/Gameplay/GState.h b/src/Speed/Indep/Src/Gameplay/GState.h index 92a88ca74..9f6b4de7e 100644 --- a/src/Speed/Indep/Src/Gameplay/GState.h +++ b/src/Speed/Indep/Src/Gameplay/GState.h @@ -12,9 +12,13 @@ class GState : public GRuntimeInstance { public: GState(const Attrib::Key &stateKey); + ~GState() override; + GameplayObjType GetType() const override { return kGameplayObjType_State; } + + bool IsTerminalState() const; }; #endif From 9f37b53dd0e0a48c6d18d911a53ba9d3e88683a7 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 20:25:11 +0100 Subject: [PATCH 212/691] 8.6%: add remaining small GRace wrapper accessors Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Indep/Src/Gameplay/GRaceDatabase.cpp | 22 ++++ src/Speed/Indep/Src/Gameplay/GRaceDatabase.h | 12 +- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 117 ++++++++++++++++++ 3 files changed, 145 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index f4e2da23f..f82f92ec1 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -14,6 +14,10 @@ const Attrib::Gen::gameplay *GRaceBin::GetGameplayObj() const { return &mBinRecord; } +GVault *GRaceBin::GetChildVault() const { + return mChildVault; +} + int GRaceBin::GetBinNumber() const { return *reinterpret_cast(mBinRecord.GetAttributePointer(0x6CE23062, 0) ? mBinRecord.GetAttributePointer(0x6CE23062, 0) : @@ -162,6 +166,22 @@ int GRaceBin::GetRequiredRaceWins() const { Attrib::DefaultDataArea(sizeof(int))); } +int GRaceBin::GetCompletedChallenges() const { + return mStats.mChallengesCompleted; +} + +int GRaceBin::GetAwardedRaceWins() const { + return mStats.mRacesWon; +} + +void GRaceBin::SetCompletedChallenges(int numChallenges) { + mStats.mChallengesCompleted = numChallenges; +} + +void GRaceBin::SetRacesWon(int numRaces) { + mStats.mRacesWon = numRaces; +} + GRaceCustom *GRaceDatabase::GetStartupRace() { return mStartupRace; } @@ -178,6 +198,8 @@ unsigned int GRaceDatabase::GetRaceCount() { return mRaceCountStatic + mRaceCountDynamic; } +void GRaceDatabase::SimulateDDayComplete() {} + GRaceBin *GRaceDatabase::GetBin(unsigned int index) { return &mBins[index]; } diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h index 6e2f3bf78..518d40c70 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h @@ -36,7 +36,7 @@ class GRaceBin { const Attrib::Gen::gameplay *GetGameplayObj() const; - GVault *GetChildVault() const { return mChildVault; } + GVault *GetChildVault() const; int GetBinNumber() const; @@ -84,9 +84,9 @@ class GRaceBin { int GetRequiredRaceWins() const; - int GetCompletedChallenges() const { return mStats.mChallengesCompleted; } + int GetCompletedChallenges() const; - int GetAwardedRaceWins() const { return mStats.mRacesWon; } + int GetAwardedRaceWins() const; void RefreshProgress(); @@ -95,9 +95,9 @@ class GRaceBin { unsigned int Deserialize(unsigned char *src); - void SetCompletedChallenges(int numChallenges) { mStats.mChallengesCompleted = numChallenges; } + void SetCompletedChallenges(int numChallenges); - void SetRacesWon(int numRaces) { mStats.mRacesWon = numRaces; } + void SetRacesWon(int numRaces); Attrib::Gen::gameplay mBinRecord; // offset 0x0, size 0x14 GVault *mChildVault; // offset 0x14, size 0x4 @@ -133,7 +133,7 @@ class GRaceDatabase { GRaceBin *GetBinNumber(int number); unsigned int GetRaceCount(); - void SimulateDDayComplete() {} + void SimulateDDayComplete(); void NotifyVaultLoaded(GVault *vault); void NotifyVaultUnloading(GVault *vault); diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 438a7a84b..3d4e2de79 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -36,6 +36,18 @@ void GRaceParameters::NotifyParentVaultUnloading() { void GRaceParameters::NotifyParentVaultLoaded() { } +const Attrib::Gen::gameplay *GRaceParameters::GetGameplayObj() const { + return mRaceRecord; +} + +GVault *GRaceParameters::GetChildVault() const { + return mChildVault; +} + +GVault *GRaceParameters::GetParentVault() const { + return mParentVault; +} + unsigned int GRaceParameters::GetCollectionKey() const { return mRaceRecord ? mRaceRecord->GetCollection() : 0; } @@ -100,6 +112,48 @@ bool GRaceParameters::GetIsLoopingRace() const { return mRaceRecord->IsLoopingRace(0); } +bool GRaceParameters::GetInitiallyUnlockedQuickRace() const { + EnsureLoaded(); + return *reinterpret_cast(mRaceRecord->GetAttributePointer(0xB39ED8C3, 0) ? + mRaceRecord->GetAttributePointer(0xB39ED8C3, 0) : + Attrib::DefaultDataArea(sizeof(bool))); +} + +bool GRaceParameters::GetInitiallyUnlockedOnline() const { + EnsureLoaded(); + return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x39509746, 0) ? + mRaceRecord->GetAttributePointer(0x39509746, 0) : + Attrib::DefaultDataArea(sizeof(bool))); +} + +bool GRaceParameters::GetInitiallyUnlockedChallenge() const { + EnsureLoaded(); + return *reinterpret_cast(mRaceRecord->GetAttributePointer(0xEA855EAF, 0) ? + mRaceRecord->GetAttributePointer(0xEA855EAF, 0) : + Attrib::DefaultDataArea(sizeof(bool))); +} + +bool GRaceParameters::GetIsDDayRace() const { + EnsureLoaded(); + return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x8CB01ABF, 0) ? + mRaceRecord->GetAttributePointer(0x8CB01ABF, 0) : + Attrib::DefaultDataArea(sizeof(bool))); +} + +bool GRaceParameters::GetIsBossRace() const { + EnsureLoaded(); + return *reinterpret_cast(mRaceRecord->GetAttributePointer(0xFF5EE5D6, 0) ? + mRaceRecord->GetAttributePointer(0xFF5EE5D6, 0) : + Attrib::DefaultDataArea(sizeof(bool))); +} + +bool GRaceParameters::GetIsMarkerRace() const { + EnsureLoaded(); + return *reinterpret_cast(mRaceRecord->GetAttributePointer(0xF2FE50D7, 0) ? + mRaceRecord->GetAttributePointer(0xF2FE50D7, 0) : + Attrib::DefaultDataArea(sizeof(bool))); +} + bool GRaceParameters::GetRankPlayersByPoints() const { EnsureLoaded(); return mRaceRecord->RankPlayersByPoints(0); @@ -115,11 +169,32 @@ bool GRaceParameters::GetScriptedCopsInRace() const { return mRaceRecord->ScriptedCopsInRace(0); } +bool GRaceParameters::GetCopsEnabled() const { + EnsureLoaded(); + return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x3918E889, 0) ? + mRaceRecord->GetAttributePointer(0x3918E889, 0) : + Attrib::DefaultDataArea(sizeof(bool))); +} + bool GRaceParameters::GetNeverInQuickRace() const { EnsureLoaded(); return mRaceRecord->NeverInQuickRace(0); } +bool GRaceParameters::GetIsChallengeSeriesRace() const { + EnsureLoaded(); + return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x1C650104, 0) ? + mRaceRecord->GetAttributePointer(0x1C650104, 0) : + Attrib::DefaultDataArea(sizeof(bool))); +} + +bool GRaceParameters::GetIsCollectorsEditionRace() const { + EnsureLoaded(); + return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x637584FE, 0) ? + mRaceRecord->GetAttributePointer(0x637584FE, 0) : + Attrib::DefaultDataArea(sizeof(bool))); +} + float GRaceParameters::GetTimeLimit() const { EnsureLoaded(); return mRaceRecord->TimeLimit(0); @@ -135,16 +210,37 @@ bool GRaceParameters::GetNoPostRaceScreen() const { return mRaceRecord->NoPostRaceScreen(0); } +bool GRaceParameters::GetUseWorldHeatInRace() const { + EnsureLoaded(); + return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x45F2AD6C, 0) ? + mRaceRecord->GetAttributePointer(0x45F2AD6C, 0) : + Attrib::DefaultDataArea(sizeof(bool))); +} + float GRaceParameters::GetForceHeatLevel() const { EnsureLoaded(); return static_cast(mRaceRecord->ForceHeatLevel(0)); } +float GRaceParameters::GetMaxRaceHeatLevel() const { + EnsureLoaded(); + return *reinterpret_cast(mRaceRecord->GetAttributePointer(0xF5A03629, 0) ? + mRaceRecord->GetAttributePointer(0xF5A03629, 0) : + Attrib::DefaultDataArea(sizeof(float))); +} + float GRaceParameters::GetInitialPlayerSpeed() const { EnsureLoaded(); return mRaceRecord->InitialPlayerSpeed(0); } +bool GRaceParameters::GetIsRollingStart() const { + EnsureLoaded(); + return *reinterpret_cast(mRaceRecord->GetAttributePointer(0xB809D19C, 0) ? + mRaceRecord->GetAttributePointer(0xB809D19C, 0) : + Attrib::DefaultDataArea(sizeof(bool))); +} + bool GRaceParameters::GetIsEpicPursuitRace() const { EnsureLoaded(); return mRaceRecord->IsEpicPursuitRace(0); @@ -233,6 +329,20 @@ unsigned int GRaceParameters::GetBarrierCount() const { return mRaceRecord->Num_Barriers(); } +const char *GRaceParameters::GetPhotoFinishCamera() const { + EnsureLoaded(); + return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x62DFC259, 0) ? + mRaceRecord->GetAttributePointer(0x62DFC259, 0) : + Attrib::DefaultDataArea(sizeof(EA::Reflection::Text))); +} + +const char *GRaceParameters::GetPhotoFinishTexture() const { + EnsureLoaded(); + return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x038A3B53, 0) ? + mRaceRecord->GetAttributePointer(0x038A3B53, 0) : + Attrib::DefaultDataArea(sizeof(EA::Reflection::Text))); +} + const char *GRaceParameters::GetTrafficPattern() const { EnsureLoaded(); return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x6319B692, 0) ? @@ -240,6 +350,13 @@ const char *GRaceParameters::GetTrafficPattern() const { Attrib::DefaultDataArea(sizeof(EA::Reflection::Text))); } +float GRaceParameters::GetTimeOfDay() const { + EnsureLoaded(); + return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x9DFF3C3D, 0) ? + mRaceRecord->GetAttributePointer(0x9DFF3C3D, 0) : + Attrib::DefaultDataArea(sizeof(float))); +} + unsigned int GRaceParameters::GetChallengeType() const { return 0; } From acd9273ed092d1d880ec824ea766eb74c77fa54e Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 20:28:15 +0100 Subject: [PATCH 213/691] 8.8%: add race score bookkeeping helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Indep/Src/Gameplay/GRaceDatabase.cpp | 101 ++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GRaceDatabase.h | 4 + 2 files changed, 105 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index f82f92ec1..d032f69d3 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -3,6 +3,7 @@ #include "Speed/Indep/Src/Gameplay/GRaceStatus.h" #include "Speed/Indep/Src/Gameplay/GVault.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" +#include "Speed/Indep/bWare/Inc/bWare.hpp" GRaceDatabase *GRaceDatabase::mObj = nullptr; @@ -227,6 +228,21 @@ GRaceParameters *GRaceDatabase::GetRaceFromKey(unsigned int key) { return nullptr; } +GRaceParameters *GRaceDatabase::GetRaceFromHash(unsigned int hash) { + unsigned int i; + + for (i = 0; i < GetRaceCount(); i++) { + GRaceParameters *race; + + race = GetRaceParameters(i); + if (race && race->GetEventHash() == hash) { + return race; + } + } + + return nullptr; +} + void GRaceDatabase::DestroyCustomRace(GRaceCustom *custom) { unsigned int i; @@ -258,6 +274,15 @@ void GRaceDatabase::ClearStartupRace() { mStartupRace = nullptr; } +void GRaceDatabase::SetStartupRace(GRaceCustom *custom, Context context) { + if (mStartupRace) { + ClearStartupRace(); + } + + mStartupRaceContext = context; + mStartupRace = custom; +} + GRaceBin *GRaceDatabase::GetBinNumber(int number) { unsigned int i; @@ -314,3 +339,79 @@ void GRaceDatabase::FreeCustomRace(GRaceCustom *custom) { DestroyCustomRace(custom); } } + +void GRaceDatabase::BuildScoreList() { + unsigned int i; + + mRaceScoreInfo = static_cast(bMalloc(mRaceCountStatic << 4, 0x800)); + if (!mRaceScoreInfo) { + return; + } + + bMemSet(mRaceScoreInfo, 0, mRaceCountStatic << 4); + + for (i = 0; i < mRaceCountStatic; i++) { + GRaceParameters *race; + + race = &mRaceParameters[i]; + if (!race->GetIsDDayRace()) { + bool unlockedQuick; + bool unlockedOnline; + bool unlockedChallenge; + + unlockedQuick = race->GetInitiallyUnlockedQuickRace(); + unlockedOnline = race->GetInitiallyUnlockedOnline(); + unlockedChallenge = race->GetInitiallyUnlockedChallenge(); + + if (race->GetIsBossRace()) { + unlockedQuick = false; + unlockedOnline = false; + unlockedChallenge = false; + } + + if (unlockedQuick || unlockedOnline || unlockedChallenge) { + unsigned int *flags; + + flags = &reinterpret_cast(GetScoreInfo(race->GetEventHash()))[1]; + if (unlockedQuick || unlockedChallenge) { + *flags |= kUnlocked_QuickRace; + } + if (unlockedOnline) { + *flags |= kUnlocked_Online; + } + } + } + } +} + +GRaceSaveInfo *GRaceDatabase::GetScoreInfo(unsigned int hash) { + unsigned int i; + int *scoreInfo; + + i = 0; + scoreInfo = reinterpret_cast(mRaceScoreInfo); + while (i < mRaceCountStatic && *scoreInfo) { + if (static_cast(*scoreInfo) == hash) { + return reinterpret_cast(scoreInfo); + } + i++; + scoreInfo += 4; + } + + *scoreInfo = static_cast(hash); + return reinterpret_cast(scoreInfo); +} + +bool GRaceDatabase::CheckRaceScoreFlags(unsigned int hash, ScoreFlags flags) { + GRaceSaveInfo *scoreInfo; + + scoreInfo = GetScoreInfo(hash); + return scoreInfo && (reinterpret_cast(scoreInfo)[1] & flags) != 0; +} + +void GRaceDatabase::ResetCareerCompleteFlag(unsigned int hash) { + unsigned int *flags; + + flags = &reinterpret_cast(GetScoreInfo(hash))[1]; + *flags &= ~kCompleted_ContextCareer; +} diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h index 518d40c70..7994a217c 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h @@ -151,6 +151,10 @@ class GRaceDatabase { } private: + void BuildScoreList(); + struct GRaceSaveInfo *GetScoreInfo(unsigned int hash); + bool CheckRaceScoreFlags(unsigned int hash, ScoreFlags flags); + void ResetCareerCompleteFlag(unsigned int hash); void ClearStartupRace(); unsigned int mRaceCountStatic; // offset 0x0, size 0x4 From 63d1841e5cdc7f70c69056daa9224580a3434de1 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 20:29:21 +0100 Subject: [PATCH 214/691] 8.9%: add remaining simple GRace utility helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Indep/Src/Gameplay/GRaceDatabase.cpp | 27 +++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 5 ++++ 2 files changed, 32 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index d032f69d3..3c1046a37 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -112,6 +112,16 @@ unsigned int GRaceBin::GetBarrierCount() const { return barriers.GetLength(); } +unsigned int GRaceBin::Serialize(unsigned char *dest) { + *reinterpret_cast(dest) = mStats; + return sizeof(mStats); +} + +unsigned int GRaceBin::Deserialize(unsigned char *src) { + mStats = *reinterpret_cast(src); + return sizeof(mStats); +} + const char *GRaceBin::GetBarrierName(unsigned int index) const { const char *barrierName; const EA::Reflection::Text *barrierText; @@ -281,6 +291,10 @@ void GRaceDatabase::SetStartupRace(GRaceCustom *custom, Context context) { mStartupRaceContext = context; mStartupRace = custom; + + if (custom && context == kRaceContext_Career) { + custom->SetupTimeOfDay(); + } } GRaceBin *GRaceDatabase::GetBinNumber(int number) { @@ -340,6 +354,19 @@ void GRaceDatabase::FreeCustomRace(GRaceCustom *custom) { } } +GRaceCustom *GRaceDatabase::AllocCustomRace(GRaceParameters *parms) { + GRaceCustom *custom; + + custom = nullptr; + if (parms) { + parms->BlockUntilLoaded(); + custom = new GRaceCustom(*parms); + mRaceCustom[mRaceCountDynamic++] = custom; + } + + return custom; +} + void GRaceDatabase::BuildScoreList() { unsigned int i; diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 3d4e2de79..d371f39cf 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1,5 +1,6 @@ #include "Speed/Indep/Src/Gameplay/GRaceStatus.h" +#include "Speed/Indep/Src/Gameplay/GManager.h" #include "Speed/Indep/Src/Gameplay/GVault.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" @@ -48,6 +49,10 @@ GVault *GRaceParameters::GetParentVault() const { return mParentVault; } +GActivity *GRaceParameters::GetActivity() const { + return static_cast(GManager::Get().FindInstance(GetCollectionKey())); +} + unsigned int GRaceParameters::GetCollectionKey() const { return mRaceRecord ? mRaceRecord->GetCollection() : 0; } From 6b2e518d0bfe1ecd7d2a185309a1917dbe5e9e87 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 20:32:03 +0100 Subject: [PATCH 215/691] 9.8%: build race bin and score lists Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Indep/Src/Gameplay/GRaceDatabase.cpp | 176 ++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GRaceDatabase.h | 11 ++ 2 files changed, 187 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index 3c1046a37..436693f64 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -5,8 +5,34 @@ #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" #include "Speed/Indep/bWare/Inc/bWare.hpp" +#include + GRaceDatabase *GRaceDatabase::mObj = nullptr; +GRaceDatabase::GRaceDatabase() + : mRaceCountStatic(0), // + mRaceCountDynamic(0), // + mRaceIndex(nullptr), // + mRaceParameters(nullptr), // + mBinCount(0), // + mBins(nullptr), // + mGameplayClass(Attrib::Database::Get().GetClass(0x5CEA9D46)), // + mStartupRace(nullptr), // + mStartupRaceContext(kRaceContext_QuickRace), // + mNumInitialUnlocks(0), // + mInitialUnlockHash(nullptr), // + mRaceScoreInfo(nullptr) { + unsigned int i; + + for (i = 0; i < 4; i++) { + mRaceCustom[i] = nullptr; + } + + BuildBinList(); + BuildRaceList(); + BuildScoreList(); +} + unsigned int GRaceBin::GetCollectionKey() const { return mBinRecord.GetCollection(); } @@ -193,6 +219,10 @@ void GRaceBin::SetRacesWon(int numRaces) { mStats.mRacesWon = numRaces; } +void GRaceDatabase::Init() { + mObj = new GRaceDatabase; +} + GRaceCustom *GRaceDatabase::GetStartupRace() { return mStartupRace; } @@ -215,6 +245,90 @@ GRaceBin *GRaceDatabase::GetBin(unsigned int index) { return &mBins[index]; } +bool GRaceDatabase::CollectionIsRaceActivity(Attrib::Gen::gameplay &collection) { + return collection.GetAttributePointer(0xA78403EC, 0) != nullptr; +} + +bool GRaceDatabase::CollectionIsRaceBin(Attrib::Gen::gameplay &collection) { + return collection.GetAttributePointer(0x6CE23062, 0) != nullptr; +} + +unsigned int GRaceDatabase::StoreBinList(GRaceBin *dest) { + unsigned int count; + unsigned int collectionKey; + GRaceBin *current; + + count = 0; + current = dest; + for (collectionKey = mGameplayClass->GetFirstCollection(); collectionKey != 0; + collectionKey = mGameplayClass->GetNextCollection(collectionKey)) { + Attrib::Gen::gameplay gameplay(collectionKey, 0, nullptr); + + if (CollectionIsRaceBin(gameplay)) { + if (dest && current) { + new (current) GRaceBin(collectionKey); + current = reinterpret_cast(reinterpret_cast(current) + 0x1C); + } + count++; + } + } + + return count; +} + +void GRaceDatabase::BuildBinList() { + mBinCount = StoreBinList(nullptr); + mBins = static_cast(bMalloc(mBinCount * 0x1C, 0)); + StoreBinList(mBins); +} + +unsigned int GRaceDatabase::StoreRaceList(GRaceParameters *dest) { + unsigned int count; + unsigned int collectionKey; + GRaceParameters *current; + unsigned char *indexData; + + count = 0; + current = dest; + indexData = reinterpret_cast(mRaceIndex); + for (collectionKey = mGameplayClass->GetFirstCollection(); collectionKey != 0; + collectionKey = mGameplayClass->GetNextCollection(collectionKey)) { + Attrib::Gen::gameplay gameplay(collectionKey, 0, nullptr); + + if (CollectionIsRaceActivity(gameplay)) { + if (dest && current) { + new (current) GRaceParameters(collectionKey, reinterpret_cast(indexData)); + current = reinterpret_cast(reinterpret_cast(current) + 0x14); + } + indexData += 0x30; + count++; + } + } + + return count; +} + +void GRaceDatabase::BuildRaceList() { + unsigned int i; + + mRaceCountStatic = StoreRaceList(nullptr); + mRaceCountDynamic = 0; + mRaceIndex = reinterpret_cast(bMalloc(mRaceCountStatic * 0x30, 0)); + mRaceParameters = static_cast(bMalloc(mRaceCountStatic * 0x14, 0)); + for (i = 0; i < 4; i++) { + mRaceCustom[i] = nullptr; + } + StoreRaceList(mRaceParameters); +} + +void GRaceDatabase::RefreshBinProgress() { + unsigned int i; + + for (i = 0; i < mBinCount; i++) { + mBins[i].RefreshProgress(); + } +} + GRaceParameters *GRaceDatabase::GetRaceParameters(unsigned int index) { if (mRaceCountStatic <= index) { return mRaceCustom[index - mRaceCountStatic]; @@ -411,6 +525,46 @@ void GRaceDatabase::BuildScoreList() { } } +void GRaceDatabase::ClearRaceScores() { + unsigned int i; + + if (!mRaceScoreInfo) { + return; + } + + bMemSet(mRaceScoreInfo, 0, mRaceCountStatic << 4); + for (i = 0; i < mRaceCountStatic; i++) { + GRaceParameters *race; + + race = &mRaceParameters[i]; + if (!race->GetIsDDayRace()) { + bool unlockedQuick; + bool unlockedOnline; + bool unlockedChallenge; + + unlockedQuick = race->GetInitiallyUnlockedQuickRace(); + unlockedOnline = race->GetInitiallyUnlockedOnline(); + unlockedChallenge = race->GetInitiallyUnlockedChallenge(); + + if (race->GetIsBossRace()) { + unlockedChallenge = false; + } + + if (unlockedQuick || unlockedOnline || unlockedChallenge) { + unsigned int *flags; + + flags = &reinterpret_cast(GetScoreInfo(race->GetEventHash()))[1]; + if (unlockedQuick || unlockedChallenge) { + *flags |= kUnlocked_QuickRace; + } + if (unlockedOnline) { + *flags |= kUnlocked_Online; + } + } + } + } +} + GRaceSaveInfo *GRaceDatabase::GetScoreInfo(unsigned int hash) { unsigned int i; int *scoreInfo; @@ -442,3 +596,25 @@ void GRaceDatabase::ResetCareerCompleteFlag(unsigned int hash) { flags = &reinterpret_cast(GetScoreInfo(hash))[1]; *flags &= ~kCompleted_ContextCareer; } + +void GRaceDatabase::LoadBestScores(GRaceSaveInfo *scores, unsigned int count) { + int *scoreWords; + int *dest; + unsigned int loaded; + unsigned int i; + + loaded = 0; + i = 0; + scoreWords = reinterpret_cast(scores); + dest = reinterpret_cast(mRaceScoreInfo); + bMemSet(mRaceScoreInfo, 0, mRaceCountStatic << 4); + while (i < count && loaded != mRaceCountStatic) { + if (scoreWords[0] && GetRaceFromHash(scoreWords[0])) { + loaded++; + bMemCpy(dest, scoreWords, 0x10); + dest += 4; + } + scoreWords += 4; + i++; + } +} diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h index 7994a217c..ec58fc0c1 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h @@ -116,6 +116,8 @@ class GRaceDatabase { kUnlocked_Online = 1 << 4, }; + GRaceDatabase(); + static void Init(); GRaceCustom *GetStartupRace(); @@ -151,7 +153,16 @@ class GRaceDatabase { } private: + void BuildBinList(); + unsigned int StoreBinList(GRaceBin *dest); + void RefreshBinProgress(); + void BuildRaceList(); + unsigned int StoreRaceList(GRaceParameters *dest); + bool CollectionIsRaceActivity(Attrib::Gen::gameplay &collection); + bool CollectionIsRaceBin(Attrib::Gen::gameplay &collection); void BuildScoreList(); + void ClearRaceScores(); + void LoadBestScores(struct GRaceSaveInfo *scores, unsigned int count); struct GRaceSaveInfo *GetScoreInfo(unsigned int hash); bool CheckRaceScoreFlags(unsigned int hash, ScoreFlags flags); void ResetCareerCompleteFlag(unsigned int hash); From b1b65eb47650a37c02d556678fecec44636a1d81 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 20:34:21 +0100 Subject: [PATCH 216/691] 10.2%: add race database serialization and D-Day helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Indep/Src/Gameplay/GRaceDatabase.cpp | 76 +++++++++++++++++-- src/Speed/Indep/Src/Gameplay/GRaceDatabase.h | 13 +++- 2 files changed, 81 insertions(+), 8 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index 436693f64..d00643313 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -8,6 +8,13 @@ #include GRaceDatabase *GRaceDatabase::mObj = nullptr; +static const char *kDDayRaces[5] = { + "16.1.0", + "16.2.2", + "16.2.3", + "16.1.1", + "16.2.1", +}; GRaceDatabase::GRaceDatabase() : mRaceCountStatic(0), // @@ -18,7 +25,7 @@ GRaceDatabase::GRaceDatabase() mBins(nullptr), // mGameplayClass(Attrib::Database::Get().GetClass(0x5CEA9D46)), // mStartupRace(nullptr), // - mStartupRaceContext(kRaceContext_QuickRace), // + mStartupRaceContext(GRace::kRaceContext_QuickRace), // mNumInitialUnlocks(0), // mInitialUnlockHash(nullptr), // mRaceScoreInfo(nullptr) { @@ -227,7 +234,7 @@ GRaceCustom *GRaceDatabase::GetStartupRace() { return mStartupRace; } -Context GRaceDatabase::GetStartupRaceContext() { +GRace::Context GRaceDatabase::GetStartupRaceContext() { return mStartupRaceContext; } @@ -394,11 +401,11 @@ void GRaceDatabase::ClearStartupRace() { DestroyCustomRace(mStartupRace); } - mStartupRaceContext = kRaceContext_QuickRace; + mStartupRaceContext = GRace::kRaceContext_QuickRace; mStartupRace = nullptr; } -void GRaceDatabase::SetStartupRace(GRaceCustom *custom, Context context) { +void GRaceDatabase::SetStartupRace(GRaceCustom *custom, GRace::Context context) { if (mStartupRace) { ClearStartupRace(); } @@ -406,7 +413,7 @@ void GRaceDatabase::SetStartupRace(GRaceCustom *custom, Context context) { mStartupRaceContext = context; mStartupRace = custom; - if (custom && context == kRaceContext_Career) { + if (custom && context == GRace::kRaceContext_Career) { custom->SetupTimeOfDay(); } } @@ -456,6 +463,50 @@ void GRaceDatabase::NotifyVaultUnloading(GVault *vault) { } } +unsigned int GRaceDatabase::SerializeBins(unsigned char *dest) { + unsigned int i; + unsigned char *cursor; + + *reinterpret_cast(dest) = mBinCount; + cursor = dest + 4; + for (i = 0; i < mBinCount; i++) { + unsigned short bytes; + + *reinterpret_cast(cursor) = static_cast(mBins[i].GetBinNumber()); + bytes = static_cast(mBins[i].Serialize(cursor + 4)); + *reinterpret_cast(cursor + 2) = bytes; + cursor += 4 + bytes; + } + + return cursor - dest; +} + +unsigned int GRaceDatabase::DeserializeBins(unsigned char *src) { + unsigned int count; + unsigned int i; + unsigned char *cursor; + + count = *reinterpret_cast(src); + cursor = src + 4; + for (i = 0; i < count; i++) { + GRaceBin *bin; + unsigned short bytes; + + bytes = *reinterpret_cast(cursor + 2); + bin = GetBinNumber(*reinterpret_cast(cursor)); + if (bin) { + bin->Deserialize(cursor + 4); + } + cursor += 4 + bytes; + } + + return cursor - src; +} + +GRaceParameters *GRaceDatabase::GetRaceFromActivity(GActivity *activity) { + return GetRaceFromKey(activity->GetCollection()); +} + void GRaceDatabase::FreeCustomRace(GRaceCustom *custom) { if (!custom) { return; @@ -618,3 +669,18 @@ void GRaceDatabase::LoadBestScores(GRaceSaveInfo *scores, unsigned int count) { i++; } } + +const char *GRaceDatabase::GetNextDDayRace() { + int i; + + for (i = 0; i < 5; i++) { + GRaceParameters *race; + + race = GetRaceFromHash(Attrib::StringHash32(kDDayRaces[i])); + if (!CheckRaceScoreFlags(race->GetEventHash(), kCompleted_ContextCareer)) { + return kDDayRaces[i]; + } + } + + return nullptr; +} diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h index ec58fc0c1..91e0dcdc5 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h @@ -5,6 +5,7 @@ #pragma once #endif +#include "GRace.h" #include "Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribHash.h" @@ -22,6 +23,8 @@ class GRaceParameters; // total size: 0x1C class GRaceBin { public: + friend class GRaceDatabase; + // total size: 0x4 struct BinStats { uint16 mChallengesCompleted; // offset 0x0, size 0x2 @@ -121,8 +124,8 @@ class GRaceDatabase { static void Init(); GRaceCustom *GetStartupRace(); - Context GetStartupRaceContext(); - void SetStartupRace(GRaceCustom *custom, Context context); + GRace::Context GetStartupRaceContext(); + void SetStartupRace(GRaceCustom *custom, GRace::Context context); void FreeCustomRace(GRaceCustom *custom); void DestroyCustomRace(GRaceCustom *custom); GRaceParameters *GetRaceFromHash(unsigned int hash); @@ -139,6 +142,10 @@ class GRaceDatabase { void NotifyVaultLoaded(GVault *vault); void NotifyVaultUnloading(GVault *vault); + unsigned int SerializeBins(unsigned char *dest); + unsigned int DeserializeBins(unsigned char *src); + GRaceParameters *GetRaceFromActivity(GActivity *activity); + const char *GetNextDDayRace(); static GRaceDatabase &Get() { return *mObj; @@ -177,7 +184,7 @@ class GRaceDatabase { GRaceBin *mBins; // offset 0x24, size 0x4 Attrib::Class *mGameplayClass; // offset 0x28, size 0x4 struct GRaceCustom *mStartupRace; // offset 0x2C, size 0x4 - Context mStartupRaceContext; // offset 0x30, size 0x4 + GRace::Context mStartupRaceContext; // offset 0x30, size 0x4 unsigned int mNumInitialUnlocks; // offset 0x34, size 0x4 unsigned int *mInitialUnlockHash; // offset 0x38, size 0x4 struct GRaceSaveInfo *mRaceScoreInfo; // offset 0x3C, size 0x4 From 1873c9f8075d7a9ad31d121599eac9cf812678e9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 20:36:47 +0100 Subject: [PATCH 217/691] 11.0%: add race lifecycle and progress helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Indep/Src/Gameplay/GRaceDatabase.cpp | 43 +++++++++++ src/Speed/Indep/Src/Gameplay/GRaceDatabase.h | 2 + src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 72 +++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 10 +-- 4 files changed, 122 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index d00643313..cf99b330f 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -1,5 +1,6 @@ #include "Speed/Indep/Src/Gameplay/GRaceDatabase.h" +#include "Speed/Indep/Src/Gameplay/GManager.h" #include "Speed/Indep/Src/Gameplay/GRaceStatus.h" #include "Speed/Indep/Src/Gameplay/GVault.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" @@ -40,6 +41,12 @@ GRaceDatabase::GRaceDatabase() BuildScoreList(); } +GRaceBin::GRaceBin(unsigned int collectionKey) + : mBinRecord(collectionKey, 0, nullptr), // + mChildVault(nullptr) { + bMemSet(&mStats, 0, sizeof(mStats)); +} + unsigned int GRaceBin::GetCollectionKey() const { return mBinRecord.GetCollection(); } @@ -226,6 +233,42 @@ void GRaceBin::SetRacesWon(int numRaces) { mStats.mRacesWon = numRaces; } +void GRaceBin::RefreshProgress() { + unsigned int racesWon; + int completedChallenges; + unsigned int binNumber; + GMilestone *milestone; + GSpeedTrap *speedTrap; + + racesWon = 0; + for (binNumber = 0; binNumber < GetWorldRaceCount(); binNumber++) { + if (GRaceDatabase::Get().CheckRaceScoreFlags(GetWorldRaceHash(binNumber), GRaceDatabase::kCompleted_ContextCareer)) { + racesWon++; + } + } + + completedChallenges = 0; + binNumber = GetBinNumber(); + milestone = GManager::Get().GetFirstMilestone(false, binNumber); + while (milestone) { + if (milestone->GetIsAwarded()) { + completedChallenges++; + } + milestone = GManager::Get().GetNextMilestone(milestone, false, binNumber); + } + + speedTrap = GManager::Get().GetFirstSpeedTrap(false, binNumber); + while (speedTrap) { + if (speedTrap->IsFlagSet(4)) { + completedChallenges++; + } + speedTrap = GManager::Get().GetNextSpeedTrap(speedTrap, false, binNumber); + } + + SetRacesWon(racesWon); + SetCompletedChallenges(completedChallenges); +} + void GRaceDatabase::Init() { mObj = new GRaceDatabase; } diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h index 91e0dcdc5..9b8fa5508 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h @@ -110,6 +110,8 @@ class GRaceBin { // total size: 0x40 class GRaceDatabase { public: + friend class GRaceBin; + enum ScoreFlags { kCompleted_ContextQuickRace = 1 << 0, kCompleted_ContextCareer = 1 << 1, diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index d371f39cf..b81494bb5 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -4,6 +4,20 @@ #include "Speed/Indep/Src/Gameplay/GVault.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" +void SetCurrentTimeOfDay(float value); + +GRaceParameters::GRaceParameters(unsigned int collectionKey, GRaceIndexData *index) + : mIndex(index), // + mRaceRecord(new Attrib::Gen::gameplay(collectionKey, 0, nullptr)), // + mParentVault(nullptr), // + mChildVault(nullptr) {} + +GRaceParameters::~GRaceParameters() { + delete mRaceRecord; + mRaceRecord = nullptr; + mIndex = nullptr; +} + void GRaceParameters::EnsureLoaded() const { if (mParentVault && !mParentVault->IsLoaded()) { mParentVault->LoadSyncTransient(); @@ -379,6 +393,64 @@ int GRaceParameters::GetTrafficDensity() const { return mRaceRecord->ForceTrafficDensity(0); } +bool GRaceParameters::GetIsSunsetRace() const { + return GetTimeOfDay() >= 0.8f; +} + +bool GRaceParameters::GetIsMiddayRace() const { + float timeOfDay; + + timeOfDay = GetTimeOfDay(); + return timeOfDay >= 0.0f && timeOfDay < 0.8f; +} + +void GRaceParameters::SetupTimeOfDay() { + if (GetIsSunsetRace()) { + SetCurrentTimeOfDay(0.9f); + } else if (GetIsMiddayRace()) { + SetCurrentTimeOfDay(0.0f); + } +} + +GRace::Difficulty GRaceParameters::GetDifficulty() const { + int trafficLevel; + + EnsureLoaded(); + trafficLevel = *reinterpret_cast(mRaceRecord->GetAttributePointer(0x88A7E3BE, 0) ? + mRaceRecord->GetAttributePointer(0x88A7E3BE, 0) : + Attrib::DefaultDataArea(sizeof(int))); + if (trafficLevel < 0x22) { + return GRace::kRaceDifficulty_Easy; + } + if (trafficLevel > 0x42) { + return GRace::kRaceDifficulty_Hard; + } + return GRace::kRaceDifficulty_Medium; +} + +int GRaceParameters::GetCopDensity() const { + int density; + + EnsureLoaded(); + density = *reinterpret_cast(mRaceRecord->GetAttributePointer(0xDBC08D32, 0) ? + mRaceRecord->GetAttributePointer(0xDBC08D32, 0) : + Attrib::DefaultDataArea(sizeof(int))); + if (density == 0 && !GetCopsEnabled()) { + return 0; + } + if (density < 0x22) { + return 1; + } + if (density > 0x42) { + return 3; + } + return 2; +} + +bool GRaceParameters::GetCanBeReversed() const { + return false; +} + int GRaceParameters::GetNumOpponents() const { EnsureLoaded(); return mRaceRecord->Num_Opponents(); diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index 7a7aaeb35..ece7f5b0b 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -283,13 +283,13 @@ class GRaceParameters { void NotifyParentVaultLoaded(); - const Attrib::Gen::gameplay *GetGameplayObj() const { return mRaceRecord; } + const Attrib::Gen::gameplay *GetGameplayObj() const; struct GActivity *GetActivity() const; - struct GVault *GetChildVault() const { return mChildVault; } + struct GVault *GetChildVault() const; - struct GVault *GetParentVault() const { return mParentVault; } + struct GVault *GetParentVault() const; void GetBoundingBox(struct Vector2 &topLeft, struct Vector2 &botRight) const; @@ -315,9 +315,9 @@ class GRaceParameters { int GetTrafficDensity() const; - // enum Difficulty GetDifficulty() const; + GRace::Difficulty GetDifficulty() const; - // enum CopDensity GetCopDensity() const; + int GetCopDensity() const; bool GetCanBeReversed() const; From bab649029dce696a6d574ac0096c60db45159b9a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 20:55:51 +0100 Subject: [PATCH 218/691] 12.4%: add race route and availability helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceDatabase.h | 1 + src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 202 +++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 4 +- 3 files changed, 205 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h index 9b8fa5508..85e71d64c 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h @@ -111,6 +111,7 @@ class GRaceBin { class GRaceDatabase { public: friend class GRaceBin; + friend class GRaceParameters; enum ScoreFlags { kCompleted_ContextQuickRace = 1 << 0, diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index b81494bb5..7e2d8f5fa 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1,10 +1,14 @@ #include "Speed/Indep/Src/Gameplay/GRaceStatus.h" #include "Speed/Indep/Src/Gameplay/GManager.h" +#include "Speed/Indep/Src/Gameplay/GMarker.h" #include "Speed/Indep/Src/Gameplay/GVault.h" +#include "Speed/Indep/Src/Main/AttribSupport.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" +#include "Speed/Indep/bWare/Inc/Strings.hpp" void SetCurrentTimeOfDay(float value); +extern int UnlockAllThings; GRaceParameters::GRaceParameters(unsigned int collectionKey, GRaceIndexData *index) : mIndex(index), // @@ -384,10 +388,76 @@ GRace::Type GRaceParameters::GetRaceType() const { return GRace::kRaceType_None; } +unsigned int GRaceParameters::GetRegion() const { + static const char *kRaceRegions[3] = { + "city", + "coastal", + "college_town", + }; + unsigned int i; + const char *regionName; + + if (mIndex) { + return reinterpret_cast(mIndex)[0x29]; + } + + EnsureLoaded(); + regionName = mRaceRecord->Region(0); + for (i = 0; i < 3; i++) { + if (bStrCmp(regionName, kRaceRegions[i]) == 0) { + return i; + } + } + + return static_cast(-1); +} + +void GRaceParameters::ExtractPosition(Attrib::Gen::gameplay &collection, UMath::Vector3 &pos) const { + const UMath::Vector3 &collectionPosition = collection.Position(0); + + pos.x = -collectionPosition.y; + pos.y = collectionPosition.z; + pos.z = collectionPosition.x; +} + +void GRaceParameters::ExtractDirection(Attrib::Gen::gameplay &collection, UMath::Vector3 &dir, float rotate) const { + UMath::Matrix4 rotMat; + UMath::Vector3 forward = {0.0f, 0.0f, 1.0f}; + + UMath::MultYRot(UMath::Matrix4::kIdentity, -(collection.Rotation(0) + rotate) * 0.00069444446f, rotMat); + VU0_MATRIX3x4_vect3mult(forward, rotMat, dir); +} + unsigned int GRaceParameters::GetEventHash() const { return Attrib::StringToKey(GetEventID()); } +bool GRaceParameters::GetIsAvailable(GRace::Context context) const { + unsigned int eventHash; + + if (UnlockAllThings) { + return true; + } + + eventHash = GetEventHash(); + switch (context) { + case GRace::kRaceContext_QuickRace: + return !GetNeverInQuickRace() && + GRaceDatabase::Get().CheckRaceScoreFlags(eventHash, GRaceDatabase::kUnlocked_QuickRace); + + case GRace::kRaceContext_TimeTrial: + return GRaceDatabase::Get().CheckRaceScoreFlags(eventHash, GRaceDatabase::kUnlocked_Online); + + case GRace::kRaceContext_Career: + if (!GRaceDatabase::Get().CheckRaceScoreFlags(eventHash, GRaceDatabase::kUnlocked_Career)) { + return false; + } + return !GRaceDatabase::Get().CheckRaceScoreFlags(eventHash, GRaceDatabase::kCompleted_ContextCareer); + } + + return false; +} + int GRaceParameters::GetTrafficDensity() const { EnsureLoaded(); return mRaceRecord->ForceTrafficDensity(0); @@ -451,11 +521,143 @@ bool GRaceParameters::GetCanBeReversed() const { return false; } +GCharacter *GRaceParameters::GetOpponentChar(unsigned int index) const { + unsigned int characterKey; + + EnsureLoaded(); + if (GetIsBossRace() && GRaceStatus::Get().GetRaceContext() != GRace::kRaceContext_Career) { + characterKey = Attrib::StringToLowerCaseKey("character_smart"); + } else { + characterKey = mRaceRecord->Opponents(index).GetCollectionKey(); + } + + return static_cast(GManager::Get().FindInstance(characterKey)); +} + int GRaceParameters::GetNumOpponents() const { EnsureLoaded(); return mRaceRecord->Num_Opponents(); } +void GRaceParameters::GetStartPosition(UMath::Vector3 &pos) const { + unsigned int collectionKey; + + EnsureLoaded(); + pos = UMath::Vector3::kZero; + collectionKey = mRaceRecord->racestart(0).GetCollectionKey(); + if (collectionKey) { + Attrib::Gen::gameplay raceStart(collectionKey, 0, nullptr); + + ExtractPosition(raceStart, pos); + } +} + +void GRaceParameters::GetStartDirection(UMath::Vector3 &dir) const { + unsigned int collectionKey; + + EnsureLoaded(); + dir = UMath::Vector3::kZero; + collectionKey = mRaceRecord->racestart(0).GetCollectionKey(); + if (collectionKey) { + Attrib::Gen::gameplay raceStart(collectionKey, 0, nullptr); + + ExtractDirection(raceStart, dir, 0.0f); + } +} + +bool GRaceParameters::HasFinishLine() const { + EnsureLoaded(); + return mRaceRecord->racefinish(0).GetCollectionKey() != 0; +} + +void GRaceParameters::GetFinishPosition(UMath::Vector3 &pos) const { + unsigned int collectionKey; + + EnsureLoaded(); + pos = UMath::Vector3::kZero; + collectionKey = mRaceRecord->racefinish(0).GetCollectionKey(); + if (collectionKey) { + Attrib::Gen::gameplay raceFinish(collectionKey, 0, nullptr); + + ExtractPosition(raceFinish, pos); + } +} + +void GRaceParameters::GetFinishDirection(UMath::Vector3 &dir) const { + unsigned int collectionKey; + + EnsureLoaded(); + dir = UMath::Vector3::kZero; + collectionKey = mRaceRecord->racefinish(0).GetCollectionKey(); + if (collectionKey) { + Attrib::Gen::gameplay raceFinish(collectionKey, 0, nullptr); + + ExtractDirection(raceFinish, dir, 0.0f); + } +} + +void GRaceParameters::GetCheckpointPosition(unsigned int index, UMath::Vector3 &pos) const { + unsigned int collectionKey; + + EnsureLoaded(); + pos = UMath::Vector3::kZero; + collectionKey = mRaceRecord->Checkpoint(index).GetCollectionKey(); + if (collectionKey) { + Attrib::Gen::gameplay checkpoint(collectionKey, 0, nullptr); + + ExtractPosition(checkpoint, pos); + } +} + +void GRaceParameters::GetCheckpointDirection(unsigned int index, UMath::Vector3 &dir) const { + unsigned int collectionKey; + + EnsureLoaded(); + dir = UMath::Vector3::kZero; + collectionKey = mRaceRecord->Checkpoint(index).GetCollectionKey(); + if (collectionKey) { + Attrib::Gen::gameplay checkpoint(collectionKey, 0, nullptr); + + ExtractDirection(checkpoint, dir, 0.0f); + } +} + +GMarker *GRaceParameters::GetShortcut(unsigned int index) const { + unsigned int collectionKey; + + EnsureLoaded(); + collectionKey = mRaceRecord->Shortcuts(index).GetCollectionKey(); + return static_cast(GManager::Get().FindInstance(collectionKey)); +} + +GMarker *GRaceParameters::GetBarrierExemption(unsigned int index) const { + unsigned int collectionKey; + + EnsureLoaded(); + collectionKey = mRaceRecord->BarrierExemptions(index).GetCollectionKey(); + return static_cast(GManager::Get().FindInstance(collectionKey)); +} + +const char *GRaceParameters::GetBarrierName(unsigned int index) const { + const char *barrierName; + + EnsureLoaded(); + barrierName = mRaceRecord->Barriers(index); + if (barrierName && *barrierName == '*') { + return barrierName + 1; + } + + return barrierName; +} + +bool GRaceParameters::GetBarrierIsFlipped(unsigned int index) const { + const char *barrierName; + + EnsureLoaded(); + barrierName = mRaceRecord->Barriers(index); + return barrierName && *barrierName == '*'; +} + float GRaceParameters::GetStartTime() const { EnsureLoaded(); return mRaceRecord->StartTime(0); diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index ece7f5b0b..e784eccd8 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -297,7 +297,7 @@ class GRaceParameters { GRace::Type GetRaceType() const; - // enum Region GetRegion() const; + unsigned int GetRegion() const; void ExtractPosition(Attrib::Gen::gameplay &collection, UMath::Vector3 &pos) const; @@ -305,7 +305,7 @@ class GRaceParameters { unsigned int GetEventHash() const; - // bool GetIsAvailable(enum Context context) const; + bool GetIsAvailable(GRace::Context context) const; bool GetIsSunsetRace() const; From 15f3832f96fe7018604fbc41a60cddcdadb83844 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 21:03:26 +0100 Subject: [PATCH 219/691] 13.7%: add race custom index and setter helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 14 + src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 271 +++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 8 +- 3 files changed, 289 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index e69de29bb..ae42bd681 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -0,0 +1,14 @@ +#include "Speed/Indep/Src/Gameplay/GManager.h" + +void GManager::StartBinActivity(GRaceBin *raceBin) { + GActivity *activity; + + if (!raceBin) { + return; + } + + activity = static_cast(FindInstance(raceBin->GetCollectionKey())); + if (activity && !activity->GetIsRunning()) { + activity->Run(); + } +} diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 7e2d8f5fa..3c87a2c7d 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -5,6 +5,7 @@ #include "Speed/Indep/Src/Gameplay/GVault.h" #include "Speed/Indep/Src/Main/AttribSupport.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" +#include "Speed/Indep/bWare/Inc/bWare.hpp" #include "Speed/Indep/bWare/Inc/Strings.hpp" void SetCurrentTimeOfDay(float value); @@ -22,6 +23,97 @@ GRaceParameters::~GRaceParameters() { mIndex = nullptr; } +void GRaceParameters::GenerateIndex(GRaceIndexData *index) { + unsigned int flags; + char *indexBytes; + float topLeft[2]; + float botRight[2]; + + if (!index) { + return; + } + + indexBytes = reinterpret_cast(index); + bMemSet(indexBytes, 0, 0x30); + + *reinterpret_cast(indexBytes + 0x00) = GetCollectionKey(); + *reinterpret_cast(indexBytes + 0x10) = GetChallengeType(); + *reinterpret_cast(indexBytes + 0x14) = GetEventHash(); + *reinterpret_cast(indexBytes + 0x18) = 0; + *reinterpret_cast(indexBytes + 0x1C) = GetRaceLengthMeters(); + *reinterpret_cast(indexBytes + 0x20) = static_cast(GetLocalizationTag()); + *reinterpret_cast(indexBytes + 0x22) = static_cast(GetCashValue()); + *reinterpret_cast(indexBytes + 0x26) = static_cast(GetRivalBestTime() * 8.0f); + indexBytes[0x29] = static_cast(GetRegion()); + indexBytes[0x2A] = static_cast(GetCopDensity()); + indexBytes[0x2B] = static_cast(GetRaceType()); + + flags = 0; + if (GetInitiallyUnlockedQuickRace()) { + flags |= 1 << 0; + } + if (GetInitiallyUnlockedOnline()) { + flags |= 1 << 1; + } + if (GetInitiallyUnlockedChallenge()) { + flags |= 1 << 2; + } + if (GetCanBeReversed()) { + flags |= 1 << 3; + } + if (GetIsDDayRace()) { + flags |= 1 << 4; + } + if (GetIsBossRace()) { + flags |= 1 << 5; + } + if (GetIsMarkerRace()) { + flags |= 1 << 6; + } + if (GetIsPursuitRace()) { + flags |= 1 << 7; + } + if (GetIsLoopingRace()) { + flags |= 1 << 8; + } + if (GetRankPlayersByPoints()) { + flags |= 1 << 9; + } + if (GetRankPlayersByDistance()) { + flags |= 1 << 10; + } + if (GetCopsEnabled()) { + flags |= 1 << 11; + } + if (GetScriptedCopsInRace()) { + flags |= 1 << 12; + } + if (GetTimeOfDay() > 0.8f) { + flags |= 1 << 13; + } + if (GetNeverInQuickRace()) { + flags |= 1 << 14; + } + if (GetIsChallengeSeriesRace()) { + flags |= 1 << 15; + } + if (GetIsCollectorsEditionRace()) { + flags |= 1 << 16; + } + if (GetTimeOfDay() <= 0.8f && GetTimeOfDay() >= 0.0f) { + flags |= 1 << 17; + } + + *reinterpret_cast(indexBytes + 0x04) = static_cast(flags); + bSafeStrCpy(indexBytes + 0x06, GetEventID(), 10); + + GetBoundingBox(*reinterpret_cast(topLeft), *reinterpret_cast(botRight)); + indexBytes[0x2C] = static_cast(topLeft[0] * 255.0f); + indexBytes[0x2D] = static_cast(topLeft[1] * 255.0f); + indexBytes[0x2E] = static_cast(botRight[0] * 255.0f); + indexBytes[0x2F] = static_cast(botRight[1] * 255.0f); +} + void GRaceParameters::EnsureLoaded() const { if (mParentVault && !mParentVault->IsLoaded()) { mParentVault->LoadSyncTransient(); @@ -75,6 +167,29 @@ unsigned int GRaceParameters::GetCollectionKey() const { return mRaceRecord ? mRaceRecord->GetCollection() : 0; } +void GRaceParameters::GetBoundingBox(UMath::Vector2 &topLeft, UMath::Vector2 &botRight) const { + float *topLeftValues; + float *botRightValues; + + topLeftValues = reinterpret_cast(&topLeft); + botRightValues = reinterpret_cast(&botRight); + if (mIndex) { + const unsigned char *indexBytes; + + indexBytes = reinterpret_cast(mIndex); + topLeftValues[0] = indexBytes[0x2C] * (1.0f / 255.0f); + topLeftValues[1] = indexBytes[0x2D] * (1.0f / 255.0f); + botRightValues[0] = indexBytes[0x2E] * (1.0f / 255.0f); + botRightValues[1] = indexBytes[0x2F] * (1.0f / 255.0f); + return; + } + + topLeftValues[0] = 0.0f; + topLeftValues[1] = 0.0f; + botRightValues[0] = 0.0f; + botRightValues[1] = 0.0f; +} + float GRaceParameters::GetRaceLengthMeters() const { EnsureLoaded(); return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x7C11C52E, 0) ? @@ -672,3 +787,159 @@ const char *GRaceParameters::GetSpeedTrapCamera() const { EnsureLoaded(); return mRaceRecord->SpeedTrapCamera(0); } + +GRaceCustom::GRaceCustom(const GRaceParameters &other) + : GRaceParameters(other.GetCollectionKey(), nullptr), // + mRaceActivity(nullptr), // + mNumOpponents(0), // + mReversed(false), // + mFreedByOwner(false), // + mHeatLevel(-1) { + Attrib::Attribute opponents; + unsigned int customKey; + + customKey = mRaceRecord->GenerateUniqueKey("GRaceCustom", true); + mRaceRecord->Modify(customKey, 0); + mRaceRecord->SetParent(other.GetGameplayObj()->GetCollection()); + + opponents = mRaceRecord->Get(0x5839FA1A); + mNumOpponents = opponents.GetLength(); +} + +GRaceCustom::~GRaceCustom() { + if (mRaceActivity) { + delete mRaceActivity; + mRaceActivity = nullptr; + } +} + +GActivity *GRaceCustom::GetRaceActivity() const { + return mRaceActivity; +} + +void GRaceCustom::GetCheckpointPosition(unsigned int index, UMath::Vector3 &pos) const { + if (mReversed) { + index = GetNumCheckpoints() - (index + 1); + } + + GRaceParameters::GetCheckpointPosition(index, pos); +} + +void GRaceCustom::GetCheckpointDirection(unsigned int index, UMath::Vector3 &dir) const { + float rotate; + + if (mReversed) { + index = GetNumCheckpoints() - (index + 1); + rotate = 180.0f; + } else { + rotate = 0.0f; + } + + EnsureLoaded(); + dir = UMath::Vector3::kZero; + { + unsigned int collectionKey; + + collectionKey = mRaceRecord->Checkpoint(index).GetCollectionKey(); + if (collectionKey) { + Attrib::Gen::gameplay checkpoint(collectionKey, 0, nullptr); + + ExtractDirection(checkpoint, dir, rotate); + } + } +} + +void GRaceCustom::SetReversed(bool isReverseDir) { + mReversed = isReverseDir; +} + +void GRaceCustom::SetNumLaps(int numLaps) { + SetAttribute(0x0EBDC165, numLaps, 0); +} + +void GRaceCustom::SetTrafficDensity(int density) { + if (density < 0) { + density = 0; + } else if (density > 100) { + density = 100; + } + + SetAttribute(0xC64BC341, density, 0); +} + +void GRaceCustom::SetNumOpponents(int numOpponents) { + mNumOpponents = numOpponents; +} + +void GRaceCustom::SetDifficulty(GRace::Difficulty difficulty) { + int value; + + if (difficulty == GRace::kRaceDifficulty_Easy) { + value = 0x21; + } else if (difficulty == GRace::kRaceDifficulty_Medium) { + value = 0x42; + } else if (difficulty == GRace::kRaceDifficulty_Hard) { + value = 100; + } else { + value = 0; + } + + SetAttribute(0x88A7E3BE, value, 0); +} + +void GRaceCustom::SetCatchUp(bool catchUpEnabled) { + SetAttribute(0x10DB04E6, catchUpEnabled, 0); +} + +void GRaceCustom::SetCopsEnabled(bool copsEnabled) { + SetAttribute(0x3918E889, copsEnabled, 0); +} + +void GRaceCustom::SetForceHeatLevel(int level) { + SetAttribute(0xE4211F4F, level, 0); +} + +void GRaceCustom::SetAttribute(unsigned int key, const int &value, unsigned int index) { + Attrib::Attribute attribute; + int *dest; + + attribute = mRaceRecord->Get(key); + if (!attribute.IsValid()) { + mRaceRecord->Add(key, 1); + } + + dest = reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(key, index))); + if (dest) { + *dest = value; + } +} + +void GRaceCustom::SetAttribute(unsigned int key, const float &value, unsigned int index) { + Attrib::Attribute attribute; + float *dest; + + attribute = mRaceRecord->Get(key); + if (!attribute.IsValid()) { + mRaceRecord->Add(key, 1); + } + + dest = reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(key, index))); + if (dest) { + *dest = value; + } +} + +void GRaceCustom::SetAttribute(unsigned int key, const bool &value, unsigned int index) { + Attrib::Attribute attribute; + bool *dest; + + attribute = mRaceRecord->Get(key); + if (!attribute.IsValid()) { + mRaceRecord->Add(key, 1); + } + + dest = reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(key, index))); + if (dest) { + *dest = value; + } +} diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index e784eccd8..09881dd29 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -291,7 +291,7 @@ class GRaceParameters { struct GVault *GetParentVault() const; - void GetBoundingBox(struct Vector2 &topLeft, struct Vector2 &botRight) const; + void GetBoundingBox(UMath::Vector2 &topLeft, UMath::Vector2 &botRight) const; unsigned int GetChallengeType() const; @@ -672,7 +672,7 @@ class GRaceCustom : public GRaceParameters { void CreateRaceActivity(); - GActivity *GetRaceActivity() const { return mRaceActivity; } + GActivity *GetRaceActivity() const; // Overrides: GRaceParameters void GetCheckpointPosition(unsigned int index, UMath::Vector3 &pos) const override; @@ -680,7 +680,7 @@ class GRaceCustom : public GRaceParameters { // Overrides: GRaceParameters void GetCheckpointDirection(unsigned int index, UMath::Vector3 &dir) const override; - void SetReversed(bool isReverseDir) { mReversed = isReverseDir; } + void SetReversed(bool isReverseDir); void SetPositionalKnockout(bool enabled, int knockoutsPerLap); @@ -690,7 +690,7 @@ class GRaceCustom : public GRaceParameters { void SetTrafficDensity(int density); - void SetNumOpponents(int numOpponents) { mNumOpponents = numOpponents; } + void SetNumOpponents(int numOpponents); void SetDifficulty(GRace::Difficulty difficulty); From 74e94527d271513563314ce26565dccc36278535 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 21:05:55 +0100 Subject: [PATCH 220/691] 14.0%: add custom race activity helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 61 ++++++++++---------- src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 6 +- 2 files changed, 30 insertions(+), 37 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 3c87a2c7d..d012acbeb 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2,6 +2,7 @@ #include "Speed/Indep/Src/Gameplay/GManager.h" #include "Speed/Indep/Src/Gameplay/GMarker.h" +#include "Speed/Indep/Src/Gameplay/GObjectBlock.h" #include "Speed/Indep/Src/Gameplay/GVault.h" #include "Speed/Indep/Src/Main/AttribSupport.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" @@ -813,6 +814,29 @@ GRaceCustom::~GRaceCustom() { } } +void GRaceCustom::CreateRaceActivity() { + if (mReversed && !GetCanBeReversed()) { + mReversed = false; + } + + if (GRaceStatus::Get().GetRaceContext() != GRace::kRaceContext_Career && GetIsBossRace()) { + mNumOpponents = 0; + } else { + mNumOpponents = GetNumOpponents(); + } + + if (mHeatLevel != -1) { + if (mHeatLevel == 0) { + SetCopsEnabled(false); + } else { + SetForceHeatLevel(mHeatLevel); + } + } + + mRaceActivity = new GActivity(mRaceRecord->GetCollection()); + mRaceActivity->AllocateConnectionBuffer(GObjectBlock::CalcNumConnections(mRaceRecord->GetCollection())); +} + GActivity *GRaceCustom::GetRaceActivity() const { return mRaceActivity; } @@ -899,47 +923,20 @@ void GRaceCustom::SetForceHeatLevel(int level) { SetAttribute(0xE4211F4F, level, 0); } -void GRaceCustom::SetAttribute(unsigned int key, const int &value, unsigned int index) { +template void GRaceCustom::SetAttribute(unsigned int key, const T &value, unsigned int index) { Attrib::Attribute attribute; - int *dest; + T *dest; attribute = mRaceRecord->Get(key); if (!attribute.IsValid()) { mRaceRecord->Add(key, 1); } - dest = reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(key, index))); + dest = reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(key, index))); if (dest) { *dest = value; } } -void GRaceCustom::SetAttribute(unsigned int key, const float &value, unsigned int index) { - Attrib::Attribute attribute; - float *dest; - - attribute = mRaceRecord->Get(key); - if (!attribute.IsValid()) { - mRaceRecord->Add(key, 1); - } - - dest = reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(key, index))); - if (dest) { - *dest = value; - } -} - -void GRaceCustom::SetAttribute(unsigned int key, const bool &value, unsigned int index) { - Attrib::Attribute attribute; - bool *dest; - - attribute = mRaceRecord->Get(key); - if (!attribute.IsValid()) { - mRaceRecord->Add(key, 1); - } - - dest = reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(key, index))); - if (dest) { - *dest = value; - } -} +template void GRaceCustom::SetAttribute(unsigned int key, const int &value, unsigned int index); +template void GRaceCustom::SetAttribute(unsigned int key, const bool &value, unsigned int index); diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index 09881dd29..429b9dccb 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -702,11 +702,7 @@ class GRaceCustom : public GRaceParameters { void SetForceHeatLevel(int level); - void SetAttribute(unsigned int key, const int &value, unsigned int index); - - void SetAttribute(unsigned int key, const float &value, unsigned int index); - - void SetAttribute(unsigned int key, const bool &value, unsigned int index); + template void SetAttribute(unsigned int key, const T &value, unsigned int index); void SetHeatLevel(int level) { mHeatLevel = level; From 64271aaa1dec58d26e5bc63244c404cdec7639c2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 21:08:04 +0100 Subject: [PATCH 221/691] 14.5%: add race database scoring and barrier helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Indep/Src/Gameplay/GRaceDatabase.cpp | 93 +++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GRaceDatabase.h | 1 + src/Speed/Indep/Src/World/WRoadNetwork.h | 6 ++ 3 files changed, 100 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index cf99b330f..720fcb2b6 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -3,11 +3,16 @@ #include "Speed/Indep/Src/Gameplay/GManager.h" #include "Speed/Indep/Src/Gameplay/GRaceStatus.h" #include "Speed/Indep/Src/Gameplay/GVault.h" +#include "Speed/Indep/Src/World/WCollisionAssets.h" +#include "Speed/Indep/Src/World/WRoadNetwork.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" #include "Speed/Indep/bWare/Inc/bWare.hpp" #include +void EnableBarrierSceneryGroup(const char *name, bool flipped); +void RedoTopologyAndSceneryGroups(); + GRaceDatabase *GRaceDatabase::mObj = nullptr; static const char *kDDayRaces[5] = { "16.1.0", @@ -152,6 +157,23 @@ unsigned int GRaceBin::GetBarrierCount() const { return barriers.GetLength(); } +void GRaceBin::EnableBarriers() { + unsigned int i; + + for (i = 0; i < GetBarrierCount(); i++) { + EnableBarrierSceneryGroup(GetBarrierName(i), GetBarrierIsFlipped(i)); + } + + WCollisionAssets::Get().SetExclusionFlags(); + WRoadNetwork::Get().ResolveBarriers(); +} + +void GRaceBin::DisableBarriers() { + RedoTopologyAndSceneryGroups(); + WRoadNetwork::Get().ResetBarriers(); + WRoadNetwork::Get().ResetRaceSegments(); +} + unsigned int GRaceBin::Serialize(unsigned char *dest) { *reinterpret_cast(dest) = mStats; return sizeof(mStats); @@ -727,3 +749,74 @@ const char *GRaceDatabase::GetNextDDayRace() { return nullptr; } + +void GRaceDatabase::UpdateRaceScore(bool raceCompleted) { + GRaceParameters *race; + GRacerInfo *winner; + int *scoreInfo; + float recordValue; + float value; + int scale; + + race = GRaceStatus::Get().GetRaceParameters(); + winner = GRaceStatus::Get().GetWinningPlayerInfo(); + if (!winner || !race) { + return; + } + + scoreInfo = reinterpret_cast(GetScoreInfo(race->GetEventHash())); + + value = winner->GetTopSpeed(); + scale = 8; + recordValue = static_cast(*reinterpret_cast(reinterpret_cast(scoreInfo) + 0x0C)) / scale; + if (recordValue < value) { + recordValue = value; + } + *reinterpret_cast(reinterpret_cast(scoreInfo) + 0x0C) = static_cast(recordValue * scale); + + value = winner->GetDistDriven(); + recordValue = static_cast(*reinterpret_cast(reinterpret_cast(scoreInfo) + 0x0E)) / scale; + if (recordValue < value) { + recordValue = value; + } + *reinterpret_cast(reinterpret_cast(scoreInfo) + 0x0E) = static_cast(recordValue * scale); + + switch (race->GetRaceType()) { + case GRace::kRaceType_P2P: + case GRace::kRaceType_Circuit: + case GRace::kRaceType_Drag: + case GRace::kRaceType_Knockout: + case GRace::kRaceType_Tollbooth: + case GRace::kRaceType_JumpToSpeedTrap: + case GRace::kRaceType_JumpToMilestone: + if ((scoreInfo[1] & 3) == 0 || winner->GetRaceTime() < *reinterpret_cast(scoreInfo + 2)) { + *reinterpret_cast(scoreInfo + 2) = winner->GetRaceTime(); + } + break; + + case GRace::kRaceType_SpeedTrap: + case GRace::kRaceType_CashGrab: + if ((scoreInfo[1] & 3) == 0 || *reinterpret_cast(scoreInfo + 2) < winner->GetPointTotal()) { + *reinterpret_cast(scoreInfo + 2) = winner->GetPointTotal(); + } + break; + + case GRace::kRaceType_Checkpoint: + if ((scoreInfo[1] & 3) == 0 || static_cast(scoreInfo[2]) < static_cast(winner->GetPointTotal())) { + scoreInfo[2] = static_cast(winner->GetPointTotal()); + } + break; + + default: + break; + } + + if (raceCompleted) { + if (GRaceStatus::Get().GetRaceContext() == GRace::kRaceContext_Career) { + scoreInfo[1] |= kCompleted_ContextCareer; + } else { + scoreInfo[1] |= kCompleted_ContextQuickRace; + } + RefreshBinProgress(); + } +} diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h index 85e71d64c..90b9b2986 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h @@ -149,6 +149,7 @@ class GRaceDatabase { unsigned int DeserializeBins(unsigned char *src); GRaceParameters *GetRaceFromActivity(GActivity *activity); const char *GetNextDDayRace(); + void UpdateRaceScore(bool raceCompleted); static GRaceDatabase &Get() { return *mObj; diff --git a/src/Speed/Indep/Src/World/WRoadNetwork.h b/src/Speed/Indep/Src/World/WRoadNetwork.h index e6a3b125a..420af55b4 100644 --- a/src/Speed/Indep/Src/World/WRoadNetwork.h +++ b/src/Speed/Indep/Src/World/WRoadNetwork.h @@ -69,6 +69,12 @@ class WRoadNetwork : public Debugable { // WRoadSegment *GetSegmentNonConst(int index) {} + void ResolveBarriers(); + + void ResetBarriers(); + + void ResetRaceSegments(); + // unsigned int GetNumRoads() {} // unsigned int GetNumNodes() {} From 355c57e65ce23a4c635a7ad3be442980c503df74 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 21:13:07 +0100 Subject: [PATCH 222/691] 14.9%: add vault loading and accessor helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 34 ++++++++++ src/Speed/Indep/Src/Gameplay/GManager.h | 8 +++ src/Speed/Indep/Src/Gameplay/GVault.cpp | 83 +++++++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GVault.h | 74 ++++++++++++++++++++ 4 files changed, 199 insertions(+) create mode 100644 src/Speed/Indep/Src/Gameplay/GVault.h diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index ae42bd681..427ff3584 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1,5 +1,7 @@ #include "Speed/Indep/Src/Gameplay/GManager.h" +#include "Speed/Indep/Src/Gameplay/GVault.h" + void GManager::StartBinActivity(GRaceBin *raceBin) { GActivity *activity; @@ -12,3 +14,35 @@ void GManager::StartBinActivity(GRaceBin *raceBin) { activity->Run(); } } + +void GManager::LoadVaultSync(GVault *vault) { + int slot; + int offset; + unsigned char *streamBuffer; + + if (!vault->IsRaceBin()) { + slot = GetAvailableRaceSlot(); + streamBuffer = mStreamedRaceSlots; + offset = slot * mRaceSlotSize; + mRaceVaultInSlot[slot] = vault; + } else { + GetAvailableRaceSlot(); + slot = GetAvailableBinSlot(); + streamBuffer = mStreamedBinSlots; + offset = slot * mBinSlotSize; + mBinVaultInSlot[slot] = vault; + } + + mVaultPackFile = bOpen(mVaultPackFileName, 1, 1); + bSeek(mVaultPackFile, vault->GetDataOffset(), 0); + bRead(mVaultPackFile, streamBuffer + offset, vault->GetDataSize()); + bSeek(mVaultPackFile, vault->GetLoadDataOffset(), 0); + bRead(mVaultPackFile, mTempLoadData, vault->GetLoadDataSize()); + bClose(mVaultPackFile); + mVaultPackFile = nullptr; + + vault->InitTransient(streamBuffer + offset, mTempLoadData); + if (mInGameplay) { + ConnectRuntimeInstances(); + } +} diff --git a/src/Speed/Indep/Src/Gameplay/GManager.h b/src/Speed/Indep/Src/Gameplay/GManager.h index 9bccfb1f4..d96d56969 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.h +++ b/src/Speed/Indep/Src/Gameplay/GManager.h @@ -36,6 +36,8 @@ typedef UTL::Std::map PendingSMSList; typedef UTL::Std::list AttribKeyList; +class GVault; + // total size: 0x308 class GManager : public UTL::COM::Object, public IVehicleCache { public: @@ -214,8 +216,14 @@ class GManager : public UTL::COM::Object, public IVehicleCache { } private: + friend class GVault; + GManager(const char *vaultPackName); + int GetAvailableBinSlot(); + int GetAvailableRaceSlot(); + void LoadVaultSync(GVault *vault); + static GManager *mObj; const char *mVaultPackFileName; // offset 0x1C, size 0x4 diff --git a/src/Speed/Indep/Src/Gameplay/GVault.cpp b/src/Speed/Indep/Src/Gameplay/GVault.cpp index e69de29bb..35f0acfab 100644 --- a/src/Speed/Indep/Src/Gameplay/GVault.cpp +++ b/src/Speed/Indep/Src/Gameplay/GVault.cpp @@ -0,0 +1,83 @@ +#include "Speed/Indep/Src/Gameplay/GVault.h" + +#include "Speed/Indep/Src/Gameplay/GManager.h" + +GVault::GVault(AttribVaultPackEntry *packEntry, const char *vaultName) + : mVault(nullptr), // + mVaultName(vaultName), // + mFlags(0), // + mBinResidentData(nullptr), // + mBinOffset(packEntry->mBinOffset), // + mBinSize((packEntry->mBinSize + 15U) & ~15U), // + mVltOffset(packEntry->mVltOffset), // + mVltSize((packEntry->mVltSize + 15U) & ~15U), // + mAttribAllocator(nullptr), // + mAttribObjSize(0), // + mAttribAllocChecksum(0), // + mAttribTransientData(nullptr), // + mGameObjSize(0), // + mGameObjCount(0), // + mGameObjBlock(nullptr), // + mGameObjData(nullptr) {} + +GVault::~GVault() { + if (IsLoaded()) { + Unload(); + } +} + +void GVault::LoadSyncTransient() { + GManager::Get().LoadVaultSync(this); +} + +const char *GVault::GetName() const { + return mVaultName; +} + +Attrib::Vault *GVault::GetAttribVault() const { + return mVault; +} + +unsigned int GVault::GetObjectCount() const { + return mGameObjCount; +} + +unsigned int GVault::GetFootprint() const { + return mBinSize + mAttribObjSize + mGameObjSize; +} + +unsigned int GVault::GetDataOffset() const { + return mBinOffset; +} + +unsigned int GVault::GetDataSize() const { + return mBinSize; +} + +unsigned int GVault::GetLoadDataOffset() const { + return mVltOffset; +} + +unsigned int GVault::GetLoadDataSize() const { + return mVltSize; +} + +bool GVault::IsLoaded() const { + return mVault != nullptr; +} + +bool GVault::IsResident() const { + return (mFlags & 1) != 0; +} + +bool GVault::IsTransient() const { + return (mFlags ^ 1) & 1; +} + +bool GVault::IsRaceBin() const { + return (mFlags & 2) != 0; +} + +void GVault::SetRaceBin() { + mFlags |= 2; +} diff --git a/src/Speed/Indep/Src/Gameplay/GVault.h b/src/Speed/Indep/Src/Gameplay/GVault.h new file mode 100644 index 000000000..6c6cdb3ad --- /dev/null +++ b/src/Speed/Indep/Src/Gameplay/GVault.h @@ -0,0 +1,74 @@ +#ifndef GAMEPLAY_GVAULT_H +#define GAMEPLAY_GVAULT_H + +#ifdef EA_PRAGMA_ONCE_SUPPORTED +#pragma once +#endif + +// total size: 0x14 +struct AttribVaultPackEntry { + unsigned int mVaultNameOffset; // offset 0x0, size 0x4 + unsigned int mBinSize; // offset 0x4, size 0x4 + unsigned int mVltSize; // offset 0x8, size 0x4 + unsigned int mBinOffset; // offset 0xC, size 0x4 + unsigned int mVltOffset; // offset 0x10, size 0x4 +}; + +struct AttribVaultPackImage; +struct GObjectBlock; +struct LoggingAttribAllocator; + +namespace Attrib { +class Vault; +} + +// total size: 0x40 +class GVault { + public: + GVault(AttribVaultPackEntry *packEntry, const char *vaultName); + ~GVault(); + + void LoadResident(AttribVaultPackImage *packImage); + void PreloadTransient(AttribVaultPackImage *packImage, int pool_num); + unsigned int InitTransient(unsigned char *binBlock, unsigned char *vltBlock); + void CreateGameplayObjects(); + void DestroyGameplayObjects(); + void LoadSyncTransient(); + void LoadAsyncTransient(); + void Unload(); + + const char *GetName() const; + Attrib::Vault *GetAttribVault() const; + GObjectBlock *GetObjectBlock() const { return mGameObjBlock; } + unsigned int GetObjectCount() const; + unsigned int GetFootprint() const; + unsigned int GetDataOffset() const; + unsigned int GetDataSize() const; + unsigned int GetLoadDataOffset() const; + unsigned int GetLoadDataSize() const; + bool IsLoaded() const; + bool IsResident() const; + bool IsTransient() const; + bool IsRaceBin() const; + void SetRaceBin(); + + private: + Attrib::Vault *mVault; // offset 0x0, size 0x4 + const char *mVaultName; // offset 0x4, size 0x4 + unsigned int mFlags; // offset 0x8, size 0x4 + unsigned char *mBinResidentData; // offset 0xC, size 0x4 + unsigned int mBinOffset; // offset 0x10, size 0x4 + unsigned int mBinSize; // offset 0x14, size 0x4 + unsigned int mVltOffset; // offset 0x18, size 0x4 + unsigned int mVltSize; // offset 0x1C, size 0x4 + LoggingAttribAllocator *mAttribAllocator; // offset 0x20, size 0x4 + unsigned int mAttribObjSize; // offset 0x24, size 0x4 + unsigned int mAttribAllocChecksum; // offset 0x28, size 0x4 + unsigned char *mAttribTransientData; // offset 0x2C, size 0x4 + unsigned int mGameObjSize; // offset 0x30, size 0x4 + unsigned int mGameObjCount; // offset 0x34, size 0x4 + GObjectBlock *mGameObjBlock; // offset 0x38, size 0x4 + unsigned char *mGameObjData; // offset 0x3C, size 0x4 +}; + +#endif From aa71d2a3419681e1b9a7f154a46bcd731259f11e Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 22:00:27 +0100 Subject: [PATCH 223/691] 17.4%: recover zGameplay object emission Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GCharacter.cpp | 152 ++++++++++++ src/Speed/Indep/Src/Gameplay/GManager.cpp | 88 +++++++ src/Speed/Indep/Src/Gameplay/GManager.h | 2 + src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp | 27 ++ src/Speed/Indep/Src/Gameplay/GObjectBlock.h | 41 +++ .../Indep/Src/Gameplay/GRaceDatabase.cpp | 6 +- src/Speed/Indep/Src/Gameplay/GRaceDatabase.h | 3 +- .../Indep/Src/Gameplay/GRuntimeInstance.cpp | 3 +- src/Speed/Indep/Src/Gameplay/GVault.cpp | 233 ++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GVault.h | 56 ++++- .../Src/Gameplay/LuaMessageDeliveryInfo.h | 69 ++++++ src/Speed/Indep/Src/Misc/AttribAsset.h | 5 + src/Speed/Indep/Src/World/WTrigger.h | 1 + 13 files changed, 680 insertions(+), 6 deletions(-) create mode 100644 src/Speed/Indep/Src/Gameplay/GObjectBlock.h create mode 100644 src/Speed/Indep/Src/Gameplay/LuaMessageDeliveryInfo.h diff --git a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp index e69de29bb..dfa5411de 100644 --- a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp +++ b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp @@ -0,0 +1,152 @@ +#include "GCharacter.h" + +#include "GManager.h" +#include "GMarker.h" +#include "Speed/Indep/Libs/Support/Utility/UCOM.h" +#include "Speed/Indep/Src/AI/AITarget.h" +#include "Speed/Indep/Src/Generated/Messages/MSetTrafficSpeed.h" +#include "Speed/Indep/Src/Interfaces/Simables/IAI.h" +#include "Speed/Indep/Src/Interfaces/Simables/ISimable.h" +#include "Speed/Indep/Src/Physics/PVehicle.h" +#include "Speed/Indep/Src/World/WCollisionMgr.h" +#include "Speed/Indep/Tools/Inc/ConversionUtil.hpp" +#include "Speed/Indep/bWare/Inc/Strings.hpp" + +extern int SkipFE; +extern int SkipFEDisableTraffic; +extern int SkipFEDisableCops; + +void GCharacter::OnAttached(IAttachable *pOther) { + IVehicle *vehicle; + + if (pOther->QueryInterface(&vehicle)) { + mVehicle = vehicle; + } +} + +void GCharacter::OnDetached(IAttachable *pOther) { + IVehicle *vehicle; + + if (pOther->QueryInterface(&vehicle) && mVehicle == vehicle) { + mVehicle = nullptr; + } +} + +void GCharacter::Spawn(const UMath::Vector3 &pos, const UMath::Vector3 &dir, GMarker *targetPoint, float initialSpeed) { + Unspawn(); + mSpawnPos = pos; + mSpawnDir = dir; + mSpawnSpeed = MPH2MPS(initialSpeed); + mTargetPos = targetPoint->GetPosition(); + mTargetDir = targetPoint->GetDirection(); + mCreateAttemptsMade = 0; + + AttemptSpawn(); + GManager::Get().AttachCharacter(this); + SetFlag(kCharFlag_AttachedToManager); +} + +bool GCharacter::SpawnPending() const { + return mState - kCharState_Spawning_WaitingForModel < 2; +} + +bool GCharacter::AttemptSpawn() { + if (mState == kCharState_Unspawned) { + const char *carType = CarType(0); + const char *carTypeLowMem = CarTypeLowMem(0); + bool isCop = bStrCmp(carType, "copmidsize") == 0; + DriverClass driverClass = isCop ? DRIVER_COP : DRIVER_TRAFFIC; + bool spawn_ok = true; + + if (carTypeLowMem && *carTypeLowMem) { + carType = carTypeLowMem; + } + + if (SkipFE) { + int disable = SkipFEDisableTraffic; + + if (isCop) { + disable = SkipFEDisableCops; + } + + spawn_ok = disable == 0; + } + + if (spawn_ok) { + ISimable *isimable = GManager::Get().GetStockCar(carType); + + if (!isimable) { + VehicleParams params(&GManager::Get(), driverClass, Attrib::StringToKey(carType), mSpawnDir, mSpawnPos, 0, nullptr, 0); + isimable = UTL::COM::Factory::CreateInstance("PVehicle", params); + + if (!isimable) { + isimable = GManager::Get().GetRandomEmergencyStockCar(); + if (!isimable) { + return false; + } + SetFlag(kCharFlag_UsingStockCar); + } + } else { + SetFlag(kCharFlag_UsingStockCar); + } + + mAttachments->Attach(isimable); + mVehicle->SetDriverClass(driverClass); + mState = kCharState_Spawning_WaitingForModel; + } + } + + if (mState == kCharState_Spawning_WaitingForModel) { + if (!mVehicle->IsLoading() || AllowInvisibleSpawn(0)) { + mState = kCharState_Spawning_WaitingForTrack; + } + } + + if (mState == kCharState_Spawning_WaitingForTrack) { + float worldHeight = 0.0f; + WCollisionMgr collisionMgr(0, 3); + + if (collisionMgr.GetWorldHeightAtPointRigorous(mSpawnPos, worldHeight, nullptr)) { + ISimable *isimable; + + if (mVehicle->QueryInterface(&isimable)) { + IVehicleAI *vehicleAI; + + if (isimable->QueryInterface(&vehicleAI)) { + AITarget *target = vehicleAI->GetTarget(); + WRoadNav *road_nav = vehicleAI->GetCurrentRoad(); + + if (target) { + target->Aquire(mTargetPos, mTargetDir); + } + + if (road_nav) { + road_nav->ResetCookieTrail(); + } + + vehicleAI->SetSpawned(); + vehicleAI->ResetVehicleToRoadPos(mSpawnPos, mSpawnDir); + + if (0.0f < mSpawnSpeed) { + ITrafficAI *itv; + float speedMph; + + mVehicle->Activate(); + speedMph = MPS2MPH(mSpawnSpeed); + MSetTrafficSpeed msg(speedMph, speedMph, true); + msg.SetID(isimable->GetWorldID()); + msg.Post("AIAction"); + + if (isimable->QueryInterface(&itv)) { + itv->StartDriving(mSpawnSpeed); + } + } + } + + mState = kCharState_Spawned; + } + } + } + + return mState == kCharState_Spawned; +} diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 427ff3584..e198c0e6c 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -46,3 +46,91 @@ void GManager::LoadVaultSync(GVault *vault) { ConnectRuntimeInstances(); } } + +int GManager::GetAvailableBinSlot() { + if (mBinVaultInSlot[0]) { + mBinVaultInSlot[0]->Unload(); + mBinVaultInSlot[0] = nullptr; + } + + return 0; +} + +int GManager::GetAvailableRaceSlot() { + if (mRaceVaultInSlot[0]) { + mRaceVaultInSlot[0]->Unload(); + mRaceVaultInSlot[0] = nullptr; + } + + return 0; +} + +GMilestone *GManager::GetNextMilestone(GMilestone *current, bool availOnly, unsigned int binNumber) { + GMilestone *next = current + 1; + GMilestone *end = mMilestones + mNumMilestones; + + while (next < end) { + if ((!availOnly || next->GetIsAvailable() || next->GetIsDonePendingEscape()) && + (binNumber == 0 || next->GetBinNumber() == binNumber)) { + return next; + } + + next++; + } + + return nullptr; +} + +unsigned int GManager::SaveMilestones(GMilestone *dest) { + bMemCpy(dest, mMilestones, mNumMilestones * sizeof(GMilestone)); + return mNumMilestones; +} + +void GManager::LoadMilestones(GMilestone *src, unsigned int count) { + unsigned int i; + unsigned int j; + + for (i = 0; i < count; ++i) { + for (j = 0; j < mNumMilestones; ++j) { + if (mMilestones[j].GetChallengeKey() == src[i].GetChallengeKey()) { + mMilestones[j] = src[i]; + break; + } + } + } +} + +GSpeedTrap *GManager::GetNextSpeedTrap(GSpeedTrap *current, bool activeOnly, unsigned int binNumber) { + GSpeedTrap *next = current + 1; + GSpeedTrap *end = mSpeedTraps + mNumSpeedTraps; + + while (next < end) { + if ((!activeOnly || next->IsFlagSet(GSpeedTrap::kFlag_Active)) && + (binNumber == 0 || next->GetBinNumber() == binNumber)) { + return next; + } + + next++; + } + + return nullptr; +} + +unsigned int GManager::SaveSpeedTraps(GSpeedTrap *dest) { + bMemCpy(dest, mSpeedTraps, mNumSpeedTraps * sizeof(GSpeedTrap)); + return mNumSpeedTraps; +} + +void GManager::LoadSpeedTraps(GSpeedTrap *src, unsigned int count) { + unsigned int i; + unsigned int j; + + for (i = 0; i < count; ++i) { + for (j = 0; j < mNumSpeedTraps; ++j) { + if (mSpeedTraps[j].GetSpeedTrapKey() == src[i].GetSpeedTrapKey()) { + mSpeedTraps[j] = src[i]; + break; + } + } + } +} diff --git a/src/Speed/Indep/Src/Gameplay/GManager.h b/src/Speed/Indep/Src/Gameplay/GManager.h index d96d56969..ec9e67258 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.h +++ b/src/Speed/Indep/Src/Gameplay/GManager.h @@ -157,6 +157,8 @@ class GManager : public UTL::COM::Object, public IVehicleCache { void ResetSpeedTraps(); unsigned int SaveSpeedTraps(GSpeedTrap *dest); void LoadSpeedTraps(GSpeedTrap *src, unsigned int count); + void AttachCharacter(GCharacter *character); + void DetachCharacter(GCharacter *character); void RecursivePreloadCharacterCars(GRuntimeInstance *instance, bool forcePreload); void PreloadStockCarsForActivity(GActivity *activity); diff --git a/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp b/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp index e69de29bb..c38666ab4 100644 --- a/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp +++ b/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp @@ -0,0 +1,27 @@ +#include "Speed/Indep/Src/Gameplay/GObjectBlock.h" + +#include "Speed/Indep/Src/Gameplay/GVault.h" + +GObjectBlock::GObjectBlock(GVault *vault, unsigned char *buffer) + : mVault(vault), // + mObjectBuffer(buffer) {} + +GObjectBlock::~GObjectBlock() {} + +void GObjectBlock::Initialize(unsigned int bufferSize) {} + +unsigned int GObjectBlock::CalcSpaceRequired(GVault *vault, unsigned int *outObjCount) { + if (outObjCount) { + *outObjCount = 0; + } + + return 0; +} + +bool GObjectBlock::CollectionIsInstanceOfTemplate(Attrib::Gen::gameplay &instanceObj, Attrib::Gen::gameplay &templateObj) { + return false; +} + +unsigned int GObjectBlock::CalcNumConnections(unsigned int collectionKey) { + return 0; +} diff --git a/src/Speed/Indep/Src/Gameplay/GObjectBlock.h b/src/Speed/Indep/Src/Gameplay/GObjectBlock.h new file mode 100644 index 000000000..5a3a21619 --- /dev/null +++ b/src/Speed/Indep/Src/Gameplay/GObjectBlock.h @@ -0,0 +1,41 @@ +#ifndef GAMEPLAY_GOBJECTBLOCK_H +#define GAMEPLAY_GOBJECTBLOCK_H + +#ifdef EA_PRAGMA_ONCE_SUPPORTED +#pragma once +#endif + +#include "Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h" + +class GVault; +class GRuntimeInstance; + +// total size: 0x50 +struct GObjectBlock { + GObjectBlock(GVault *vault, unsigned char *buffer); + ~GObjectBlock(); + + void Initialize(unsigned int bufferSize); + static unsigned int CalcSpaceRequired(GVault *vault, unsigned int *outObjCount); + static bool CollectionIsInstanceOfTemplate(Attrib::Gen::gameplay &instanceObj, Attrib::Gen::gameplay &templateObj); + static unsigned int CalcNumConnections(unsigned int collectionKey); + + template + void DeleteObjects(); + + template + unsigned int CreateObjects(GVault *vault, unsigned char *buffer); + + template + static unsigned int GetPaddedObjectSize() { + return (sizeof(T) + 15) & ~15; + } + + GVault *mVault; // offset 0x0, size 0x4 + unsigned char *mObjectBuffer; // offset 0x4, size 0x4 + unsigned int mObjectCount[6]; // offset 0x8, size 0x18 + unsigned int mObjectSize[6]; // offset 0x20, size 0x18 + GRuntimeInstance *mObjectList[6]; // offset 0x38, size 0x18 +}; + +#endif diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index 720fcb2b6..8de19184a 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -470,15 +470,15 @@ void GRaceDatabase::ClearStartupRace() { mStartupRace = nullptr; } -void GRaceDatabase::SetStartupRace(GRaceCustom *custom, GRace::Context context) { +void GRaceDatabase::SetStartupRace(GRaceCustom *custom, Context context) { if (mStartupRace) { ClearStartupRace(); } - mStartupRaceContext = context; + mStartupRaceContext = GRace::Context(context); mStartupRace = custom; - if (custom && context == GRace::kRaceContext_Career) { + if (custom && mStartupRaceContext == GRace::kRaceContext_Career) { custom->SetupTimeOfDay(); } } diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h index 90b9b2986..5d34f9ad1 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h @@ -17,6 +17,7 @@ enum Context { }; class GVault; +class GActivity; class GRaceCustom; class GRaceParameters; @@ -128,7 +129,7 @@ class GRaceDatabase { GRaceCustom *GetStartupRace(); GRace::Context GetStartupRaceContext(); - void SetStartupRace(GRaceCustom *custom, GRace::Context context); + void SetStartupRace(GRaceCustom *custom, Context context); void FreeCustomRace(GRaceCustom *custom); void DestroyCustomRace(GRaceCustom *custom); GRaceParameters *GetRaceFromHash(unsigned int hash); diff --git a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp index 6af253b52..87adb9490 100644 --- a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp @@ -17,8 +17,9 @@ GRuntimeInstance::GRuntimeInstance(const Attrib::Key &key, GameplayObjType type) mConnected = nullptr; mPrev = nullptr; mNext = nullptr; - GManager::Get().RegisterInstance(this); AddToTypeList(type); + GManager::Get().RegisterInstance(this); + SetFlag(1); } GRuntimeInstance::~GRuntimeInstance() { diff --git a/src/Speed/Indep/Src/Gameplay/GVault.cpp b/src/Speed/Indep/Src/Gameplay/GVault.cpp index 35f0acfab..3e782ee78 100644 --- a/src/Speed/Indep/Src/Gameplay/GVault.cpp +++ b/src/Speed/Indep/Src/Gameplay/GVault.cpp @@ -1,6 +1,105 @@ #include "Speed/Indep/Src/Gameplay/GVault.h" +#include "Speed/Indep/bWare/Inc/bWare.hpp" +#include "Speed/Indep/bWare/Inc/bPrintf.hpp" +#include "Speed/Indep/Libs/Support/Utility/FastMem.h" #include "Speed/Indep/Src/Gameplay/GManager.h" +#include "Speed/Indep/Src/Gameplay/GObjectBlock.h" +#include "Speed/Indep/Src/Gameplay/GRaceDatabase.h" +#include "Speed/Indep/Src/Misc/AttribAlloc.h" +#include "Speed/Indep/Src/Misc/AttribAsset.h" + +void *LoggingAttribAllocator::operator new(std::size_t size) { + return gFastMem.Alloc(size, nullptr); +} + +void LoggingAttribAllocator::operator delete(void *mem, std::size_t size) { + if (mem) { + gFastMem.Free(mem, size, nullptr); + } +} + +LoggingAttribAllocator::LoggingAttribAllocator() + : mChecksum(0xEA0FF1CE), // + mAllocCount(0), // + mAllocBytes(0), // + mFreeCount(0), // + mFreeBytes(0) {} + +LoggingAttribAllocator::~LoggingAttribAllocator() {} + +void *LoggingAttribAllocator::Allocate(std::size_t bytes, const char *name) { + void *memory = gFastMem.Alloc(bytes, name); + + if (memory) { + LogAlloc(static_cast(bytes), name); + } + + return memory; +} + +void LoggingAttribAllocator::Free(void *ptr, std::size_t bytes, const char *name) { + if (ptr) { + LogFree(static_cast(bytes), name); + gFastMem.Free(ptr, bytes, name); + } +} + +unsigned int LoggingAttribAllocator::GetChecksum() const { + return mChecksum; +} + +unsigned int LoggingAttribAllocator::GetByteCount() const { + return mAllocBytes; +} + +void LoggingAttribAllocator::LogAlloc(unsigned int bytes, const char *name) { + mAllocCount++; + mAllocBytes += bytes; +} + +void LoggingAttribAllocator::LogFree(unsigned int bytes, const char *name) { + mFreeCount++; + mFreeBytes += bytes; +} + +PreloadingAttribAllocator::PreloadingAttribAllocator(int pool_num) : LoggingAttribAllocator(), mPoolNum(pool_num) {} + +void *PreloadingAttribAllocator::Allocate(std::size_t bytes, const char *name) { + return LoggingAttribAllocator::Allocate(bytes, name); +} + +void PreloadingAttribAllocator::Free(void *ptr, std::size_t bytes, const char *name) { + LoggingAttribAllocator::Free(ptr, bytes, name); +} + +BlockLoadingAttribAllocator::BlockLoadingAttribAllocator(unsigned char *buffer, unsigned int heapSize, unsigned int targetChecksum) + : LoggingAttribAllocator(), // + mAllocPtr(buffer), // + mAvailBytes(heapSize), // + mTargetChecksum(targetChecksum) {} + +void *BlockLoadingAttribAllocator::Allocate(std::size_t bytes, const char *name) { + const unsigned int alignedBytes = static_cast((bytes + 15U) & ~15U); + + if (alignedBytes > mAvailBytes) { + return nullptr; + } + + void *memory = mAllocPtr; + mAllocPtr += alignedBytes; + mAvailBytes -= alignedBytes; + LogAlloc(alignedBytes, name); + return memory; +} + +void BlockLoadingAttribAllocator::Free(void *ptr, std::size_t bytes, const char *name) { + if (ptr) { + LogFree(static_cast(bytes), name); + } +} + +void BlockLoadingAttribAllocator::VerifyAllocations() {} GVault::GVault(AttribVaultPackEntry *packEntry, const char *vaultName) : mVault(nullptr), // @@ -26,10 +125,144 @@ GVault::~GVault() { } } +void GVault::LoadResident(AttribVaultPackImage *packImage) { + char binName[128]; + char vltName[128]; + char allocName[128]; + + bSPrintf(binName, "%s.bin", GetName()); + bSPrintf(vltName, "%s.vlt", GetName()); + bSPrintf(allocName, "Gameplay resident data: %s", binName); + + mBinResidentData = static_cast(bMalloc(mBinSize, allocName, 0, GetVirtualMemoryAllocParams())); + bMemCpy(mBinResidentData, reinterpret_cast(packImage) + mBinOffset, mBinSize); + AddDepFile(binName, mBinResidentData, mBinSize); + mVault = AddVault(vltName, reinterpret_cast(packImage) + mVltOffset, mVltSize); + + mGameObjSize = (GObjectBlock::CalcSpaceRequired(this, &mGameObjCount) + 0x5FU) & ~15U; + mGameObjData = static_cast(bMalloc(mGameObjSize, "Gameplay object data", 0, 0x400)); + mFlags |= 1; +} + +void GVault::PreloadTransient(AttribVaultPackImage *packImage, int pool_num) { + char binName[128]; + char vltName[128]; + PreloadingAttribAllocator *allocator; + IAttribAllocator *prevAllocator; + + bSPrintf(binName, "%s.bin", GetName()); + bSPrintf(vltName, "%s.vlt", GetName()); + + allocator = new PreloadingAttribAllocator(pool_num); + prevAllocator = AttribAlloc::OverrideAllocator(allocator); + + AddDepFile(binName, reinterpret_cast(packImage) + mBinOffset, mBinSize); + mVault = AddVault(vltName, reinterpret_cast(packImage) + mVltOffset, mVltSize); + mAttribAllocator = allocator; + mAttribAllocChecksum = allocator->GetChecksum(); + mAttribObjSize = allocator->GetByteCount(); + + AttribAlloc::OverrideAllocator(prevAllocator); + mGameObjSize = (GObjectBlock::CalcSpaceRequired(this, &mGameObjCount) + 0x5FU) & ~15U; +} + +unsigned int GVault::InitTransient(unsigned char *binBlock, unsigned char *vltBlock) { + char binName[128]; + char vltName[128]; + BlockLoadingAttribAllocator *allocator; + IAttribAllocator *prevAllocator; + + bSPrintf(binName, "%s.bin", GetName()); + bSPrintf(vltName, "%s.vlt", GetName()); + + mAttribTransientData = binBlock + mBinSize; + mGameObjData = binBlock + mBinSize + mAttribObjSize; + + allocator = new BlockLoadingAttribAllocator(mAttribTransientData, mAttribObjSize, mAttribAllocChecksum); + prevAllocator = AttribAlloc::OverrideAllocator(allocator); + + AddDepFile(binName, binBlock, mBinSize); + mVault = AddVault(vltName, vltBlock, mVltSize); + mAttribAllocator = allocator; + + AttribAlloc::OverrideAllocator(prevAllocator); + + if (GManager::Get().GetInGameplay()) { + CreateGameplayObjects(); + } + + GRaceDatabase::Get().NotifyVaultLoaded(this); + return GetFootprint(); +} + +void GVault::CreateGameplayObjects() { + if (mGameObjData) { + new (mGameObjData) GObjectBlock(this, mGameObjData + sizeof(GObjectBlock)); + } + + mGameObjBlock = reinterpret_cast(mGameObjData); + mGameObjBlock->Initialize(mGameObjSize); +} + +void GVault::DestroyGameplayObjects() { + delete mGameObjBlock; + mGameObjBlock = nullptr; +} + void GVault::LoadSyncTransient() { GManager::Get().LoadVaultSync(this); } +void GVault::Unload() { + IAttribAllocator *prevAllocator; + char binName[128]; + char vltName[128]; + + prevAllocator = nullptr; + GRaceDatabase::Get().NotifyVaultUnloading(this); + + if (IsTransient()) { + prevAllocator = AttribAlloc::OverrideAllocator(mAttribAllocator); + } + + if (mGameObjBlock) { + DestroyGameplayObjects(); + } + + if (IsResident()) { + bFree(mGameObjData); + } + mGameObjData = nullptr; + + mVault->Deinitialize(); + mVault->Release(); + mVault = nullptr; + + bSPrintf(binName, "%s.bin", GetName()); + RemoveDepFile(binName); + + bSPrintf(vltName, "%s.vlt", GetName()); + RemoveVault(vltName); + + if (prevAllocator) { + AttribAlloc::OverrideAllocator(prevAllocator); + } + + if (IsTransient()) { + delete mAttribAllocator; + mAttribAllocator = nullptr; + } + + if (IsResident()) { + if (mBinResidentData) { + bFree(mBinResidentData); + } + + mBinResidentData = nullptr; + mFlags &= ~1U; + } +} + const char *GVault::GetName() const { return mVaultName; } diff --git a/src/Speed/Indep/Src/Gameplay/GVault.h b/src/Speed/Indep/Src/Gameplay/GVault.h index 6c6cdb3ad..ed4ac558f 100644 --- a/src/Speed/Indep/Src/Gameplay/GVault.h +++ b/src/Speed/Indep/Src/Gameplay/GVault.h @@ -5,6 +5,8 @@ #pragma once #endif +#include "Speed/Indep/Src/Misc/AttribAlloc.h" + // total size: 0x14 struct AttribVaultPackEntry { unsigned int mVaultNameOffset; // offset 0x0, size 0x4 @@ -16,7 +18,59 @@ struct AttribVaultPackEntry { struct AttribVaultPackImage; struct GObjectBlock; -struct LoggingAttribAllocator; + +// total size: 0x18 +class LoggingAttribAllocator : public IAttribAllocator { + public: + static void *operator new(std::size_t size); + static void operator delete(void *mem, std::size_t size); + + LoggingAttribAllocator(); + virtual ~LoggingAttribAllocator(); + + virtual void *Allocate(std::size_t bytes, const char *name); + virtual void Free(void *ptr, std::size_t bytes, const char *name); + + unsigned int GetChecksum() const; + unsigned int GetByteCount() const; + + protected: + void LogAlloc(unsigned int bytes, const char *name); + void LogFree(unsigned int bytes, const char *name); + + unsigned int mChecksum; // offset 0x4, size 0x4 + unsigned int mAllocCount; // offset 0x8, size 0x4 + unsigned int mAllocBytes; // offset 0xC, size 0x4 + unsigned int mFreeCount; // offset 0x10, size 0x4 + unsigned int mFreeBytes; // offset 0x14, size 0x4 +}; + +// total size: 0x1C +class PreloadingAttribAllocator : public LoggingAttribAllocator { + public: + PreloadingAttribAllocator(int pool_num); + + void *Allocate(std::size_t bytes, const char *name) override; + void Free(void *ptr, std::size_t bytes, const char *name) override; + + private: + int mPoolNum; // offset 0x18, size 0x4 +}; + +// total size: 0x24 +class BlockLoadingAttribAllocator : public LoggingAttribAllocator { + public: + BlockLoadingAttribAllocator(unsigned char *buffer, unsigned int heapSize, unsigned int targetChecksum); + + void *Allocate(std::size_t bytes, const char *name) override; + void Free(void *ptr, std::size_t bytes, const char *name) override; + void VerifyAllocations(); + + private: + unsigned char *mAllocPtr; // offset 0x18, size 0x4 + unsigned int mAvailBytes; // offset 0x1C, size 0x4 + unsigned int mTargetChecksum; // offset 0x20, size 0x4 +}; namespace Attrib { class Vault; diff --git a/src/Speed/Indep/Src/Gameplay/LuaMessageDeliveryInfo.h b/src/Speed/Indep/Src/Gameplay/LuaMessageDeliveryInfo.h new file mode 100644 index 000000000..784d5d341 --- /dev/null +++ b/src/Speed/Indep/Src/Gameplay/LuaMessageDeliveryInfo.h @@ -0,0 +1,69 @@ +#ifndef GAMEPLAY_LUAMESSAGEDELIVERYINFO_H +#define GAMEPLAY_LUAMESSAGEDELIVERYINFO_H + +#ifdef EA_PRAGMA_ONCE_SUPPORTED +#pragma once +#endif + +#include "Speed/Indep/Libs/Support/Utility/UCrc.h" +#include "Speed/Indep/Libs/Support/Utility/UCOM.h" + +struct GActivity; +struct GHandler; +struct lua_State; +struct Message; + +struct IMessageFilterContext : public UTL::COM::IUnknown { + static HINTERFACE _IHandle() { + return reinterpret_cast(_IHandle); + } + + IMessageFilterContext(UTL::COM::Object *owner) : UTL::COM::IUnknown(owner, _IHandle()) {} + + virtual ~IMessageFilterContext() {} + + virtual lua_State *GetLuaState() const = 0; + virtual GActivity *GetActivity() const = 0; + virtual GHandler *GetHandler() const = 0; + virtual const Message *GetMessage() const = 0; +}; + +// total size: 0x34 +struct LuaMessageDeliveryInfo : public UTL::COM::Object, public IMessageFilterContext { + LuaMessageDeliveryInfo(UCrc32 messageKind, const Message *messageBase, + void (*buildTableFunc)(lua_State *, const Message *)) + : IMessageFilterContext(this) // + , mMessageKind(messageKind) // + , mMessageBase(messageBase) // + , mBuildTableFunc(buildTableFunc) // + , mLuaTableBuilt(false) // + , mLuaState(nullptr) // + , mActivityContext(nullptr) // + , mHandlerContext(nullptr) // + { + } + + ~LuaMessageDeliveryInfo() override {} + + unsigned int GetMessageKind() const { return mMessageKind; } + + void SetLuaState(lua_State *luaState) { mLuaState = luaState; } + void SetActivityContext(GActivity *activity) { mActivityContext = activity; } + void SetHandlerContext(GHandler *handler) { mHandlerContext = handler; } + + lua_State *GetLuaState() const override { return mLuaState; } + GActivity *GetActivity() const override { return mActivityContext; } + GHandler *GetHandler() const override { return mHandlerContext; } + const Message *GetMessage() const override { return mMessageBase; } + + private: + UCrc32 mMessageKind; // offset 0x18, size 0x4 + const Message *mMessageBase; // offset 0x1C, size 0x4 + void (*mBuildTableFunc)(lua_State *, const Message *); // offset 0x20, size 0x4 + bool mLuaTableBuilt; // offset 0x24, size 0x1 + lua_State *mLuaState; // offset 0x28, size 0x4 + GActivity *mActivityContext; // offset 0x2C, size 0x4 + GHandler *mHandlerContext; // offset 0x30, size 0x4 +}; + +#endif diff --git a/src/Speed/Indep/Src/Misc/AttribAsset.h b/src/Speed/Indep/Src/Misc/AttribAsset.h index 7fa1d1c67..8c1acc776 100644 --- a/src/Speed/Indep/Src/Misc/AttribAsset.h +++ b/src/Speed/Indep/Src/Misc/AttribAsset.h @@ -45,4 +45,9 @@ class FileMap : public std::map { FileMap(); }; +bool AddDepFile(const char *filename, void *data, size_t bytes); +bool RemoveDepFile(const char *filename); +Attrib::Vault *AddVault(const char *filename, void *data, size_t bytes); +void RemoveVault(const char *filename); + #endif diff --git a/src/Speed/Indep/Src/World/WTrigger.h b/src/Speed/Indep/Src/World/WTrigger.h index ffb9a7833..07c316244 100644 --- a/src/Speed/Indep/Src/World/WTrigger.h +++ b/src/Speed/Indep/Src/World/WTrigger.h @@ -73,6 +73,7 @@ class FireOnExitList : public std::set {}; class WTriggerManager { public: void Update(float dT); + void ClearAllFireOnExit(); static WTriggerManager &Get() { return *fgTriggerManager; From 8810b3dd147f32b31a380ae79ee01424b7875bb9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 22:09:44 +0100 Subject: [PATCH 224/691] 20.3%: recover GManager core helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 228 ++++++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GManager.h | 8 + 2 files changed, 236 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index e198c0e6c..1b85afbbe 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1,6 +1,105 @@ #include "Speed/Indep/Src/Gameplay/GManager.h" +#include "Speed/Indep/Libs/Support/Utility/FastMem.h" #include "Speed/Indep/Src/Gameplay/GVault.h" +#include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" +#include "Speed/Indep/bWare/Inc/bWare.hpp" + +GManager *GManager::mObj = nullptr; + +GManager::GManager(const char *vaultPackName) + : UTL::COM::Object(1), // + IVehicleCache((UTL::COM::Object *)this), // + mVaultPackFileName(vaultPackName), // + mVaultPackFile(nullptr), // + mVaultCount(0), // + mVaults(nullptr), // + mVaultNameStrings(nullptr), // + mLoadingPackImage(nullptr), // + mBinSlotSize(0), // + mStreamedBinSlots(nullptr), // + mRaceSlotSize(0), // + mStreamedRaceSlots(nullptr), // + mTempLoadData(nullptr), // + mTransientPoolNumber(0), // + mTransientPoolMemory(nullptr), // + mGameplayClass(Attrib::Database::Get().GetClass(0x5CEA9D46)), // + mMilestoneClass(Attrib::Database::Get().GetClass(0xE4C3D904)), // + mAttributeKeyShiftTo24(0), // + mCollectionKeyShiftTo32(0), // + mMaxObjects(0), // + mClassTempBuffer(nullptr), // + mInstanceHashTableSize(0), // + mInstanceHashTableMask(0), // + mWorstHashCollision(0), // + mKeyToInstanceMap(nullptr), // + mActiveCharacters(), // + mStockCars(), // + mMilestoneTypeInfo(), // + mNumMilestones(0), // + mMilestones(nullptr), // + mNumSpeedTraps(0), // + mSpeedTraps(nullptr), // + mNumBountySpawnPoints(0), // + mFreeRoamStartMarker(0), // + mFreeRoamFromSafeHouseStartMarker(0), // + mStartFreeRoamFromSafeHouse(false), // + mStartFreeRoamPursuit(false), // + mQueuedPursuitMinHeat(0.0f), // + mInGameplay(false), // + mOverrideFreeRoamStartMarker(0), // + mObjectStateBuffer(nullptr), // + mObjectStateBufferFree(nullptr), // + mObjectStateBufferSize(0), // + mPersistentStateBlocks(), // + mSessionStateBlocks(), // + mPendingSMS(), // + mLastCouldSendTime(0.0f), // + mWarping(false), // + mWarpStartPursuit(false), // + mWarpTargetMarker(0), // + mNumIcons(0), // + mNumVisibleIcons(0), // + mIcons(nullptr), // + mPursuitBreakerIconsShown(false), // + mHidingSpotIconsShown(false), // + mEventIconsShown(false), // + mMenuGateIconsShown(false), // + mSpeedTrapIconsShown(false), // + mSpeedTrapRaceIconsShown(false), // + mAllowEngageEvents(false), // + mAllowEngageSafehouse(false), // + mAllowMenuGates(false), // + mRestartEventHash(0) { + mObj = this; + + bMemSet(mBinVaultInSlot, 0, sizeof(mBinVaultInSlot)); + bMemSet(mRaceVaultInSlot, 0, sizeof(mRaceVaultInSlot)); + bMemSet(mBountySpawnPoint, 0, sizeof(mBountySpawnPoint)); + bMemSet(mHidingSpotFound, 0, sizeof(mHidingSpotFound)); + + mActiveCharacters.reserve(0x10); + AllocateObjectStateStorage(); + ResetAllGameplayData(); +} + +GManager::~GManager() { + mActiveCharacters.clear(); + ReleaseSpeedTraps(); + ReleaseMilestones(); + ClearStockCars(); + ReleaseStreamingBuffers(); + ReleaseInstanceMap(); + ReleaseObjectStateStorage(); + DestroyVaults(); + + if (mVaultPackFile) { + bClose(mVaultPackFile); + mVaultPackFile = nullptr; + } + + mObj = nullptr; +} void GManager::StartBinActivity(GRaceBin *raceBin) { GActivity *activity; @@ -134,3 +233,132 @@ void GManager::LoadSpeedTraps(GSpeedTrap *src, unsigned int count) { } } } + +void GManager::AllocateObjectStateStorage() { + mObjectStateBuffer = static_cast(bMalloc(0x4000, GetVirtualMemoryAllocParams())); + mObjectStateBufferFree = mObjectStateBuffer; + mObjectStateBufferSize = 0x4000; +} + +void GManager::ReleaseObjectStateStorage() { + mPersistentStateBlocks.clear(); + mSessionStateBlocks.clear(); + + if (mObjectStateBuffer) { + bFree(mObjectStateBuffer); + } + + mObjectStateBuffer = nullptr; + mObjectStateBufferFree = nullptr; + mObjectStateBufferSize = 0; +} + +void GManager::ReleaseInstanceMap() { + if (mKeyToInstanceMap) { + bFree(mKeyToInstanceMap); + mKeyToInstanceMap = nullptr; + } + + mInstanceHashTableMask = 0; + mInstanceHashTableSize = 0; +} + +void GManager::ReleaseStreamingBuffers() { + if (mStreamedBinSlots) { + delete[] mStreamedBinSlots; + mStreamedBinSlots = nullptr; + } + + if (mStreamedRaceSlots) { + delete[] mStreamedRaceSlots; + mStreamedRaceSlots = nullptr; + } + + if (mTempLoadData) { + delete[] mTempLoadData; + mTempLoadData = nullptr; + } +} + +void GManager::DestroyVaults() { + if (mVaults) { + for (unsigned int i = 0; i < mVaultCount; ++i) { + mVaults[i].~GVault(); + } + + mVaultCount = 0; + bFree(mVaults); + mVaults = nullptr; + } + + if (mVaultNameStrings) { + delete[] const_cast(mVaultNameStrings); + mVaultNameStrings = nullptr; + } +} + +void GManager::ReleaseMilestones() { + if (mMilestones) { + delete[] mMilestones; + } + + mNumMilestones = 0; + mMilestones = nullptr; +} + +void GManager::ResetMilestoneTrackingInfo() { + mMilestoneTypeInfo.clear(); +} + +void GManager::ResetMilestones() { + if (!mMilestones) { + return; + } + + for (unsigned int i = 0; i < mNumMilestones; ++i) { + mMilestones[i].Reset(); + } +} + +void GManager::ReleaseSpeedTraps() { + if (mSpeedTraps) { + delete[] mSpeedTraps; + } + + mNumSpeedTraps = 0; + mSpeedTraps = nullptr; +} + +void GManager::ResetSpeedTraps() { + if (!mSpeedTraps) { + return; + } + + for (unsigned int i = 0; i < mNumSpeedTraps; ++i) { + mSpeedTraps[i].Reset(); + } +} + +void GManager::ClearStockCars() { + mStockCars.clear(); +} + +void GManager::ResetTimers() { + bMemSet(mTimers, 0, sizeof(mTimers)); +} + +void GManager::ResetAllGameplayData() { + mPersistentStateBlocks.clear(); + mSessionStateBlocks.clear(); + mObjectStateBufferFree = mObjectStateBuffer; + ResetMilestoneTrackingInfo(); + ResetMilestones(); + ResetSpeedTraps(); + bMemSet(mHidingSpotFound, 0, sizeof(mHidingSpotFound)); + ResetTimers(); + mStartFreeRoamFromSafeHouse = false; + mFreeRoamStartMarker = 0; + mOverrideFreeRoamStartMarker = 0; + mFreeRoamFromSafeHouseStartMarker = 0; + mPendingSMS.clear(); +} diff --git a/src/Speed/Indep/Src/Gameplay/GManager.h b/src/Speed/Indep/Src/Gameplay/GManager.h index ec9e67258..9a893ec4a 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.h +++ b/src/Speed/Indep/Src/Gameplay/GManager.h @@ -64,6 +64,7 @@ class GManager : public UTL::COM::Object, public IVehicleCache { }; static void Init(const char *vaultPackName); + ~GManager() override; const char *GetCacheName() const override { return "GManager"; } @@ -222,6 +223,13 @@ class GManager : public UTL::COM::Object, public IVehicleCache { GManager(const char *vaultPackName); + void AllocateObjectStateStorage(); + void ReleaseObjectStateStorage(); + void ReleaseInstanceMap(); + void ReleaseStreamingBuffers(); + void DestroyVaults(); + void ResetAllGameplayData(); + int GetAvailableBinSlot(); int GetAvailableRaceSlot(); void LoadVaultSync(GVault *vault); From 919782d6b7256dbfa5810cde4e5299b530fb3f74 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 22:16:30 +0100 Subject: [PATCH 225/691] 24.6%: grow GManager gameplay helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 350 ++++++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GManager.h | 5 + 2 files changed, 355 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 1b85afbbe..8fabc13c3 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1,10 +1,14 @@ #include "Speed/Indep/Src/Gameplay/GManager.h" #include "Speed/Indep/Libs/Support/Utility/FastMem.h" +#include "Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h" #include "Speed/Indep/Src/Gameplay/GVault.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" #include "Speed/Indep/bWare/Inc/bWare.hpp" +#include +#include + GManager *GManager::mObj = nullptr; GManager::GManager(const char *vaultPackName) @@ -240,6 +244,106 @@ void GManager::AllocateObjectStateStorage() { mObjectStateBufferSize = 0x4000; } +void GManager::AllocateInstanceMap() { + unsigned int largestTransientCount; + + largestTransientCount = 0; + mMaxObjects = 0; + + for (unsigned int i = 0; i < mVaultCount; ++i) { + GVault &vault = mVaults[i]; + + if (vault.IsResident()) { + mMaxObjects += vault.GetObjectCount(); + } else if (largestTransientCount < vault.GetObjectCount()) { + largestTransientCount = vault.GetObjectCount(); + } + } + + mMaxObjects += largestTransientCount * 2; + mInstanceHashTableSize = 0x100; + + { + unsigned int neededSize = mMaxObjects + (mMaxObjects >> 1); + + while (mInstanceHashTableSize < neededSize) { + mInstanceHashTableSize <<= 1; + } + } + + mInstanceHashTableMask = mInstanceHashTableSize - 1; + mKeyToInstanceMap = static_cast(bMalloc(mInstanceHashTableSize << 3, GetVirtualMemoryAllocParams())); + bMemSet(mKeyToInstanceMap, 0, mInstanceHashTableSize << 3); +} + +void GManager::AllocateStreamingBuffers() { + GVault *largestBinVault; + GVault *largestRaceVault; + + largestBinVault = nullptr; + for (unsigned int i = 0; i < GRaceDatabase::Get().GetBinCount(); ++i) { + GRaceBin *raceBin = GRaceDatabase::Get().GetBin(i); + GVault *vault = raceBin->GetChildVault(); + + if (vault && !vault->IsResident()) { + if (!largestBinVault || largestBinVault->GetFootprint() < vault->GetFootprint()) { + largestBinVault = vault; + } + } + } + + largestRaceVault = nullptr; + for (unsigned int i = 0; i < GRaceDatabase::Get().GetRaceCount(); ++i) { + GRaceParameters *raceParameters = GRaceDatabase::Get().GetRaceParameters(i); + GVault *vault = raceParameters->GetChildVault(); + + if (vault && !vault->IsResident()) { + if (!largestRaceVault || largestRaceVault->GetFootprint() < vault->GetFootprint()) { + largestRaceVault = vault; + } + } + } + + mBinSlotSize = largestBinVault ? largestBinVault->GetFootprint() : 0; + mRaceSlotSize = largestRaceVault ? largestRaceVault->GetFootprint() : 0; + + mStreamedBinSlots = new unsigned char[mBinSlotSize]; + mStreamedRaceSlots = new unsigned char[mRaceSlotSize]; + + { + unsigned int maxLoadDataSize = 0; + + for (unsigned int i = 0; i < mVaultCount; ++i) { + GVault &vault = mVaults[i]; + + if (vault.IsTransient()) { + if (maxLoadDataSize < vault.GetLoadDataSize()) { + maxLoadDataSize = vault.GetLoadDataSize(); + } + } + } + + mTempLoadData = new unsigned char[maxLoadDataSize]; + } +} + +void GManager::BuildVaultTable(AttribVaultPackImage *packImage) { + char *image; + AttribVaultPackEntry *entries; + + image = reinterpret_cast(packImage); + mVaultNameStrings = new char[*reinterpret_cast(image + 0xC)]; + bMemCpy(const_cast(mVaultNameStrings), image + *reinterpret_cast(image + 8), *reinterpret_cast(image + 0xC)); + + mVaultCount = *reinterpret_cast(image + 4); + mVaults = static_cast(bMalloc(mVaultCount << 6, GetVirtualMemoryAllocParams() | 0x1000)); + + entries = reinterpret_cast(image + 0x10); + for (unsigned int i = 0; i < mVaultCount; ++i) { + new (&mVaults[i]) GVault(&entries[i], mVaultNameStrings + entries[i].mVaultNameOffset); + } +} + void GManager::ReleaseObjectStateStorage() { mPersistentStateBlocks.clear(); mSessionStateBlocks.clear(); @@ -280,6 +384,165 @@ void GManager::ReleaseStreamingBuffers() { } } +unsigned int GManager::GetStrippedNameKey(const char *name) { + int length; + const char *start; + const char *scan; + + length = bStrLen(name); + scan = name + length; + do { + start = scan; + scan = start - 1; + if (scan < name || *scan == '/') { + break; + } + } while (*scan != '\\'); + + return Attrib::StringToKey(start); +} + +unsigned int GManager::FindUniqueKeyShift(unsigned int *keys, unsigned int numKeys, unsigned int uniqueBits) { + if (numKeys > 1) { + unsigned int shift = 0x20 - uniqueBits; + unsigned int clearMask = 0xFFFFFFFF; + unsigned int compareMask = ((1 << (uniqueBits & 0x1F)) - 1) << (shift & 0x1F); + + while (static_cast(shift) > -1) { + for (unsigned int i = 0; i < numKeys; ++i) { + keys[i] &= clearMask; + } + + std::sort(keys, keys + numKeys); + + { + bool foundDuplicate = false; + + for (unsigned int i = 1; i < numKeys; ++i) { + if ((keys[i] & compareMask) == (keys[i - 1] & compareMask)) { + foundDuplicate = true; + break; + } + } + + if (!foundDuplicate) { + return shift; + } + } + + clearMask >>= 1; + compareMask >>= 1; + shift--; + } + } + + return 0; +} + +void GManager::FindKeyReductionShifts() { + unsigned int numCollections; + unsigned int numDefinitions; + unsigned int numKeys; + unsigned int *keys; + unsigned int *out; + unsigned int collectionKey; + Attrib::Key definitionKey; + + numCollections = mGameplayClass->GetNumCollections(); + numDefinitions = mGameplayClass->GetNumDefinitions(); + numKeys = numCollections; + if (numKeys < numDefinitions + numCollections) { + numKeys = numDefinitions + numCollections; + } + + keys = new unsigned int[numKeys]; + out = keys; + + for (definitionKey = mGameplayClass->GetFirstDefinition(); definitionKey != 0; definitionKey = mGameplayClass->GetNextDefinition(definitionKey)) { + *out++ = definitionKey; + } + + for (collectionKey = mGameplayClass->GetFirstCollection(); collectionKey != 0; collectionKey = mGameplayClass->GetNextCollection(collectionKey)) { + Attrib::Gen::gameplay gameplay(collectionKey, 0, nullptr); + *out++ = GetStrippedNameKey(gameplay.CollectionName()); + } + + std::sort(keys, out); + out = std::unique(keys, out); + mAttributeKeyShiftTo24 = FindUniqueKeyShift(keys, out - keys, 0x18); + delete[] keys; +} + +void GManager::TrackValue(const char *valueName, float value) { + unsigned int valueKey; + MilestoneInfoMap::iterator it; + bool updateBest; + + valueKey = Attrib::StringToKey(valueName); + it = mMilestoneTypeInfo.find(valueKey); + if (it == mMilestoneTypeInfo.end()) { + MilestoneTypeInfo info; + + info.mTypeKey = valueKey; + info.mLastKnownValue = value; + info.mBestValue = value; + info.mFlags = 0; + mMilestoneTypeInfo.insert(MilestoneInfoMap::value_type(valueKey, info)); + return; + } + + it->second.mLastKnownValue = value; + updateBest = it->second.mBestValue == -1.0f; + if (!updateBest) { + if ((it->second.mFlags & GMilestone::kFlag_BiggerIsBetter) != 0) { + updateBest = it->second.mBestValue < value; + } else { + updateBest = value < it->second.mBestValue; + } + } + + if (updateBest) { + it->second.mBestValue = value; + } +} + +void GManager::IncValue(const char *valueName) { + float value; + + value = GetValue(valueName); + if (value == -1.0f) { + TrackValue(valueName, 1.0f); + } else { + TrackValue(valueName, value + 1.0f); + } +} + +float GManager::GetValue(const char *valueName) { + return GetValue(Attrib::StringToKey(valueName)); +} + +float GManager::GetValue(unsigned int valueKey) { + MilestoneInfoMap::iterator it; + + it = mMilestoneTypeInfo.find(valueKey); + if (it == mMilestoneTypeInfo.end()) { + return -1.0f; + } + + return it->second.mLastKnownValue; +} + +bool GManager::GetIsBiggerValueBetter(unsigned int valueKey) { + MilestoneInfoMap::iterator it; + + it = mMilestoneTypeInfo.find(valueKey); + if (it == mMilestoneTypeInfo.end()) { + return false; + } + + return (it->second.mFlags & GMilestone::kFlag_BiggerIsBetter) != 0; +} + void GManager::DestroyVaults() { if (mVaults) { for (unsigned int i = 0; i < mVaultCount; ++i) { @@ -306,10 +569,52 @@ void GManager::ReleaseMilestones() { mMilestones = nullptr; } +void GManager::AllocateMilestones() { + Attrib::Gen::gameplay gameplay(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), 0x1D975142), 0, nullptr); + AttribKeyList keys; + AttribKeyList::iterator it; + unsigned int i; + + GatherInstanceKeys(gameplay, keys, 0xA3D34781); + + mNumMilestones = 0; + for (it = keys.begin(); it != keys.end(); ++it) { + mNumMilestones++; + } + + mMilestones = new GMilestone[mNumMilestones]; + + i = 0; + for (it = keys.begin(); it != keys.end(); ++it) { + mMilestones[i].Init(*it); + i++; + } +} + void GManager::ResetMilestoneTrackingInfo() { mMilestoneTypeInfo.clear(); } +void GManager::LoadMilestoneInfo(MilestoneTypeInfo *savedInfo, unsigned int count) { + unsigned int i; + + ResetMilestoneTrackingInfo(); + for (i = 0; i < count; ++i) { + MilestoneTypeInfo &info = savedInfo[i]; + mMilestoneTypeInfo[info.mTypeKey] = info; + } +} + +unsigned int GManager::SaveMilestoneInfo(MilestoneTypeInfo *dest) { + MilestoneInfoMap::iterator it; + + for (it = mMilestoneTypeInfo.begin(); it != mMilestoneTypeInfo.end(); ++it, ++dest) { + *dest = it->second; + } + + return mMilestoneTypeInfo.size(); +} + void GManager::ResetMilestones() { if (!mMilestones) { return; @@ -329,6 +634,28 @@ void GManager::ReleaseSpeedTraps() { mSpeedTraps = nullptr; } +void GManager::AllocateSpeedTraps() { + Attrib::Gen::gameplay gameplay(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), 0x49511906), 0, nullptr); + AttribKeyList keys; + AttribKeyList::iterator it; + unsigned int i; + + GatherInstanceKeys(gameplay, keys, 0xB05871D3); + + mNumSpeedTraps = 0; + for (it = keys.begin(); it != keys.end(); ++it) { + mNumSpeedTraps++; + } + + mSpeedTraps = new GSpeedTrap[mNumSpeedTraps]; + + i = 0; + for (it = keys.begin(); it != keys.end(); ++it) { + mSpeedTraps[i].Init(*it); + i++; + } +} + void GManager::ResetSpeedTraps() { if (!mSpeedTraps) { return; @@ -339,6 +666,29 @@ void GManager::ResetSpeedTraps() { } } +void GManager::GatherInstanceKeys(Attrib::Gen::gameplay &collection, AttribKeyList &list, unsigned int templateKey) { + Attrib::Key parentKey; + unsigned int i; + + parentKey = collection.GetParent(); + while (parentKey != 0) { + if (parentKey == templateKey) { + list.push_back(collection.GetCollection()); + break; + } + + { + Attrib::Gen::gameplay parent(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), parentKey), 0, nullptr); + parentKey = parent.GetParent(); + } + } + + for (i = 0; i < collection.Num_Children(); ++i) { + Attrib::Gen::gameplay child(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), collection.Children(i).GetCollectionKey()), 0, nullptr); + GatherInstanceKeys(child, list, templateKey); + } +} + void GManager::ClearStockCars() { mStockCars.clear(); } diff --git a/src/Speed/Indep/Src/Gameplay/GManager.h b/src/Speed/Indep/Src/Gameplay/GManager.h index 9a893ec4a..b5e317e18 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.h +++ b/src/Speed/Indep/Src/Gameplay/GManager.h @@ -224,6 +224,11 @@ class GManager : public UTL::COM::Object, public IVehicleCache { GManager(const char *vaultPackName); void AllocateObjectStateStorage(); + void AllocateInstanceMap(); + void AllocateStreamingBuffers(); + void BuildVaultTable(struct AttribVaultPackImage *packImage); + void FindKeyReductionShifts(); + unsigned int FindUniqueKeyShift(unsigned int *keys, unsigned int numKeys, unsigned int uniqueBits); void ReleaseObjectStateStorage(); void ReleaseInstanceMap(); void ReleaseStreamingBuffers(); From 91e1f3e0a07544130302c6d57b4d1f5ad8011d7a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 22:25:08 +0100 Subject: [PATCH 226/691] 27.1%: add zGameplay instance and race helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 232 +++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 86 +++++++ 2 files changed, 318 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 8fabc13c3..48585e046 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -402,6 +402,72 @@ unsigned int GManager::GetStrippedNameKey(const char *name) { return Attrib::StringToKey(start); } +void GManager::RegisterInstance(GRuntimeInstance *instance) { + unsigned int key; + unsigned int collisions; + unsigned int slot; + + key = instance->GetCollection() >> (mCollectionKeyShiftTo32 & 0x1F); + collisions = 0; + if (mInstanceHashTableSize != 0) { + slot = key & mInstanceHashTableMask; + do { + if (!mKeyToInstanceMap[slot].mInstance) { + if (mWorstHashCollision < collisions) { + mWorstHashCollision = collisions; + } + + mKeyToInstanceMap[slot].mKey32 = key; + mKeyToInstanceMap[slot].mInstance = instance; + return; + } + + collisions++; + slot = (slot + 1) & mInstanceHashTableMask; + } while (collisions < mInstanceHashTableSize); + } +} + +void GManager::UnregisterInstance(GRuntimeInstance *instance) { + unsigned int key; + unsigned int collisions; + unsigned int slot; + + key = instance->GetCollection() >> (mCollectionKeyShiftTo32 & 0x1F); + collisions = 0; + slot = key & mInstanceHashTableMask; + do { + if (mKeyToInstanceMap[slot].mKey32 == key) { + mKeyToInstanceMap[slot].mKey32 = 0; + mKeyToInstanceMap[slot].mInstance = nullptr; + return; + } + + collisions++; + slot = (slot + 1) & mInstanceHashTableMask; + } while (collisions <= mWorstHashCollision); +} + +GRuntimeInstance *GManager::FindInstance(Attrib::Key key) const { + unsigned int key32; + unsigned int collisions; + unsigned int slot; + + collisions = 0; + key32 = key >> (mCollectionKeyShiftTo32 & 0x1F); + slot = key32 & mInstanceHashTableMask; + do { + if (mKeyToInstanceMap[slot].mKey32 == key32) { + return mKeyToInstanceMap[slot].mInstance; + } + + collisions++; + slot = (slot + 1) & mInstanceHashTableMask; + } while (collisions <= mWorstHashCollision); + + return nullptr; +} + unsigned int GManager::FindUniqueKeyShift(unsigned int *keys, unsigned int numKeys, unsigned int uniqueBits) { if (numKeys > 1) { unsigned int shift = 0x20 - uniqueBits; @@ -473,6 +539,30 @@ void GManager::FindKeyReductionShifts() { delete[] keys; } +void GManager::ConnectInstanceReferences(GRuntimeInstance *runtimeInstance, const Attrib::Gen::gameplay &collection) {} + +void GManager::ConnectRuntimeInstances() { + for (unsigned int i = 0; i < mInstanceHashTableSize; ++i) { + GRuntimeInstance *instance = mKeyToInstanceMap[i].mInstance; + + if (instance) { + instance->ResetConnections(); + ConnectChildren(instance); + instance->LockConnections(); + } + } +} + +void GManager::ConnectChildren(GRuntimeInstance *runtimeInstance) { + for (unsigned int i = 0; i < runtimeInstance->Num_Children(); ++i) { + GRuntimeInstance *child = FindInstance(runtimeInstance->Children(i).GetCollectionKey()); + + if (child) { + runtimeInstance->ConnectToInstance(GetStrippedNameKey(child->CollectionName()), 0, child); + } + } +} + void GManager::TrackValue(const char *valueName, float value) { unsigned int valueKey; MilestoneInfoMap::iterator it; @@ -693,6 +783,148 @@ void GManager::ClearStockCars() { mStockCars.clear(); } +void GManager::ReserveStockCar(const char *carName) { + unsigned int carKey; + + if (!carName || !*carName) { + return; + } + + carKey = Attrib::StringHash32(carName); + if (mStockCars.find(carKey) == mStockCars.end()) { + mStockCars.insert(StockCarMap::value_type(carKey, static_cast(nullptr))); + } +} + +bool GManager::StockCarsLoaded() { + StockCarMap::iterator it; + + for (it = mStockCars.begin(); it != mStockCars.end(); ++it) { + if (!it->second) { + return false; + } + } + + return true; +} + +ISimable *GManager::GetStockCar(const char *carName) { + StockCarMap::iterator it; + ISimable *stockCar; + + it = mStockCars.find(Attrib::StringHash32(carName)); + if (it == mStockCars.end()) { + return nullptr; + } + + stockCar = it->second; + mStockCars.erase(it); + return stockCar; +} + +ISimable *GManager::GetRandomEmergencyStockCar() { + StockCarMap::iterator it; + int index; + ISimable *stockCar; + + if (mStockCars.empty()) { + return nullptr; + } + + index = bRandom(static_cast(mStockCars.size())); + it = mStockCars.begin(); + while (index > 0 && it != mStockCars.end()) { + ++it; + index--; + } + + if (it == mStockCars.end()) { + return nullptr; + } + + stockCar = it->second; + mStockCars.erase(it); + return stockCar; +} + +void GManager::ReleaseStockCar(ISimable *stockCar) { + if (!stockCar) { + return; + } + + stockCar->Kill(); + mStockCars[stockCar->GetAttributes().GetCollection()] = stockCar; +} + +bool GManager::GetHasPendingSMS() const { + return !mPendingSMS.empty(); +} + +unsigned int GManager::SaveSMSInfo(int *saveInfo) { + PendingSMSList::const_iterator it; + unsigned int count; + + count = 0; + for (it = mPendingSMS.begin(); it != mPendingSMS.end(); ++it) { + *saveInfo++ = *it; + count++; + } + + return count; +} + +void GManager::LoadSMSInfo(int *loadInfo, unsigned int count) { + unsigned int i; + + mPendingSMS.clear(); + for (i = 0; i < count; ++i) { + mPendingSMS.push_back(loadInfo[i]); + } +} + +bool GManager::CanPlaySMS() const { + return !mPendingSMS.empty(); +} + +void GManager::DispatchSMSMessage(int smsID) { + mPendingSMS.push_back(smsID); +} + +void GManager::AddSMS(int smsID) { + PendingSMSList::iterator it; + + if ((smsID - 10U < 5) || smsID == 0x5F || smsID == 0x60) { + DispatchSMSMessage(smsID); + return; + } + + for (it = mPendingSMS.begin(); it != mPendingSMS.end(); ++it) { + if (*it == smsID) { + return; + } + } + + mPendingSMS.push_back(smsID); +} + +int GManager::PushSMSToInbox() { + int smsID; + + smsID = -1; + if (!mPendingSMS.empty()) { + smsID = mPendingSMS.front(); + } + + mPendingSMS.clear(); + return smsID; +} + +void GManager::UpdatePendingSMS() { + if (GetHasPendingSMS() && CanPlaySMS()) { + PushSMSToInbox(); + } +} + void GManager::ResetTimers() { bMemSet(mTimers, 0, sizeof(mTimers)); } diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index d012acbeb..17a9df703 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -6,6 +6,7 @@ #include "Speed/Indep/Src/Gameplay/GVault.h" #include "Speed/Indep/Src/Main/AttribSupport.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" +#include "Speed/Indep/Src/World/WRoadNetwork.h" #include "Speed/Indep/bWare/Inc/bWare.hpp" #include "Speed/Indep/bWare/Inc/Strings.hpp" @@ -938,5 +939,90 @@ template void GRaceCustom::SetAttribute(unsigned int key, const T & } } +float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, const UMath::Vector4 *directions, int start, int end) { + WRoadNav nav; + bVector3 delta; + float pathDistance; + + nav.SetPathType(WRoadNav::kPathChopper); + + bSub(&delta, reinterpret_cast(&positions[start]), reinterpret_cast(&positions[end])); + pathDistance = bLength(delta); + + nav.InitAtPoint(UMath::Vector4To3(positions[start]), UMath::Vector4To3(directions[start]), true, 1.0f); + if (!nav.IsValid()) { + bRaceRouteError = true; + return pathDistance; + } + + if (nav.FindPathNow(&UMath::Vector4To3(positions[end]), &UMath::Vector4To3(directions[end]), nullptr)) { + pathDistance = nav.GetPathDistanceRemaining(); + } else { + bRaceRouteError = true; + } + + return pathDistance; +} + +void GRaceStatus::DetermineRaceLength() { + UMath::Vector4 positions[18]; + UMath::Vector4 directions[18]; + UMath::Vector3 pos; + UMath::Vector3 dir; + int numCheckpoints; + int numSegments; + + nSpeedTraps = 0; + fSubsequentLapLength = 0.0f; + fRaceLength = 0.0f; + fFirstLapLength = 0.0f; + bMemSet(mSegmentLengths, 0, sizeof(mSegmentLengths)); + bRaceRouteError = false; + + if (!mRaceParms || !mRaceParms->HasFinishLine()) { + return; + } + + numCheckpoints = mRaceParms->GetNumCheckpoints(); + mRaceParms->GetStartPosition(pos); + positions[0] = UMath::Vector4Make(pos, 0.0f); + mRaceParms->GetStartDirection(dir); + directions[0] = UMath::Vector4Make(dir, 0.0f); + + for (int i = 0; i < numCheckpoints; ++i) { + mRaceParms->GetCheckpointPosition(i, pos); + positions[i + 1] = UMath::Vector4Make(pos, 0.0f); + mRaceParms->GetCheckpointDirection(i, dir); + directions[i + 1] = UMath::Vector4Make(dir, 0.0f); + } + + mRaceParms->GetFinishPosition(pos); + positions[numCheckpoints + 1] = UMath::Vector4Make(pos, 0.0f); + mRaceParms->GetFinishDirection(dir); + directions[numCheckpoints + 1] = UMath::Vector4Make(dir, 0.0f); + + numSegments = numCheckpoints + 1; + if (mRaceParms->GetIsLoopingRace()) { + numSegments = numCheckpoints + 2; + } + + for (int i = 0; i < numSegments; ++i) { + int end = (i % (numCheckpoints + 1)) + 1; + float segmentLength = DetermineRaceSegmentLength(positions, directions, i, end); + + mSegmentLengths[i] = segmentLength; + fRaceLength += segmentLength; + } + + if (mRaceParms->GetIsLoopingRace()) { + fSubsequentLapLength = fRaceLength - mSegmentLengths[0]; + fFirstLapLength = fRaceLength - mSegmentLengths[numCheckpoints + 1]; + fRaceLength = fSubsequentLapLength * static_cast(mRaceParms->GetNumLaps() - 1) + fFirstLapLength; + } else { + fSubsequentLapLength = fRaceLength; + fFirstLapLength = fRaceLength; + } +} + template void GRaceCustom::SetAttribute(unsigned int key, const int &value, unsigned int index); template void GRaceCustom::SetAttribute(unsigned int key, const bool &value, unsigned int index); From 249352b0b1d513f354fbb7ab077430de4110ae2a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 22:34:56 +0100 Subject: [PATCH 227/691] 30.0%: grow zGameplay state and race systems Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GActivity.cpp | 37 ++++ src/Speed/Indep/Src/Gameplay/GManager.cpp | 220 +++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GManager.h | 9 + src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 62 ++++++ 4 files changed, 328 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GActivity.cpp b/src/Speed/Indep/Src/Gameplay/GActivity.cpp index e69de29bb..18a5dc3f1 100644 --- a/src/Speed/Indep/Src/Gameplay/GActivity.cpp +++ b/src/Speed/Indep/Src/Gameplay/GActivity.cpp @@ -0,0 +1,37 @@ +#include "GActivity.h" + +#include "GManager.h" +#include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" +#include "Speed/Indep/bWare/Inc/bWare.hpp" + +void GActivity::SerializeVars(bool abandonLuaTable) { + SerializedHeader header; + ObjectStateBlockHeader *block; + const bool *persistent; + const char *stateName; + + if (!mVarsInLuaVM) { + return; + } + + stateName = nullptr; + if (mCurrentState) { + stateName = mCurrentState->CollectionName(); + } + + header.mStateNameHash = stateName && *stateName ? Attrib::StringHash32(stateName) : 0; + header.mFlags = mRunning ? 1 : 0; + header.mTableBytes = 0; + + persistent = reinterpret_cast(GetAttributePointer(0xE4542E9B, 0) ? + GetAttributePointer(0xE4542E9B, 0) : + Attrib::DefaultDataArea(sizeof(bool))); + block = GManager::Get().AllocObjectStateBlock(GetCollection(), sizeof(header), *persistent); + if (block) { + bMemCpy(block, &header, sizeof(header)); + } + + if (abandonLuaTable) { + mVarsInLuaVM = false; + } +} diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 48585e046..5259b4cd9 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2,7 +2,9 @@ #include "Speed/Indep/Libs/Support/Utility/FastMem.h" #include "Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h" +#include "Speed/Indep/Src/Gameplay/GMarker.h" #include "Speed/Indep/Src/Gameplay/GVault.h" +#include "Speed/Indep/Src/Interfaces/Simables/IAI.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" #include "Speed/Indep/bWare/Inc/bWare.hpp" @@ -925,6 +927,224 @@ void GManager::UpdatePendingSMS() { } } +bool GManager::SaveGameplayData(unsigned char *dest, unsigned int maxSize) { + SavedGameplayDataHeader *header; + unsigned char *cursor; + ObjectStateMap::iterator it; + + if (maxSize < 0x80) { + return false; + } + + bMemSet(dest, 0, maxSize); + header = reinterpret_cast(dest); + header->mMagic = 0x656D6147; + header->mVersion = 8; + header->mNumPersistent = mPersistentStateBlocks.size(); + + cursor = dest + 0x80; + for (it = mPersistentStateBlocks.begin(); it != mPersistentStateBlocks.end(); ++it) { + ObjectStateBlockHeader *block = it->second; + unsigned int blockSize = (block->mSize + 0x17U) & ~0xFU; + + if (static_cast(cursor - dest) + blockSize > maxSize) { + return false; + } + + bMemCpy(cursor, block, blockSize); + cursor += blockSize; + } + + cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); + header->mNumSavedTimers = SaveTimerInfo(reinterpret_cast(cursor)); + cursor += header->mNumSavedTimers * 0x20; + + header->mNumMilestoneTypes = SaveMilestoneInfo(reinterpret_cast(cursor)); + cursor += header->mNumMilestoneTypes * 0x10; + + header->mNumMilestoneRecords = SaveMilestones(reinterpret_cast(cursor)); + cursor += header->mNumMilestoneRecords * 0x14; + cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); + + header->mNumSpeedTrapRecords = SaveSpeedTraps(reinterpret_cast(cursor)); + cursor += header->mNumSpeedTrapRecords * 0x14; + cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); + + header->mNumHidingSpotFlags = 0x200; + bMemCpy(cursor, mHidingSpotFound, sizeof(mHidingSpotFound)); + cursor += sizeof(mHidingSpotFound); + + header->mNumBytesBinStats = GRaceDatabase::Get().SerializeBins(cursor); + cursor += header->mNumBytesBinStats; + cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); + + header->mNumPendingSMS = SaveSMSInfo(reinterpret_cast(cursor)); + cursor += header->mNumPendingSMS * sizeof(int); + cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); + + bMemCpy(cursor, &mFreeRoamStartMarker, sizeof(mFreeRoamStartMarker)); + bMemCpy(cursor + 0x10, &mFreeRoamFromSafeHouseStartMarker, sizeof(mFreeRoamFromSafeHouseStartMarker)); + return true; +} + +bool GManager::LoadGameplayData(unsigned char *src, unsigned int maxSize) { + SavedGameplayDataHeader *header; + unsigned char *cursor; + unsigned int i; + + if (maxSize < 0x80) { + return false; + } + + header = reinterpret_cast(src); + if (header->mMagic != 0x656D6147 || header->mVersion < 8) { + return false; + } + + ResetAllGameplayData(); + + cursor = src + 0x80; + for (i = 0; i < header->mNumPersistent; ++i) { + ObjectStateBlockHeader *savedBlock = reinterpret_cast(cursor); + ObjectStateBlockHeader *block = AllocObjectStateBlock(savedBlock->mKey, savedBlock->mSize, true); + + if (block) { + bMemCpy(block, savedBlock, savedBlock->mSize + sizeof(ObjectStateBlockHeader)); + } + + cursor += (savedBlock->mSize + 0x17U) & ~0xFU; + } + + cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); + LoadTimerInfo(reinterpret_cast(cursor), header->mNumSavedTimers); + cursor += header->mNumSavedTimers * 0x20; + + LoadMilestoneInfo(reinterpret_cast(cursor), header->mNumMilestoneTypes); + cursor += header->mNumMilestoneTypes * 0x10; + + LoadMilestones(reinterpret_cast(cursor), header->mNumMilestoneRecords); + cursor += header->mNumMilestoneRecords * 0x14; + cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); + + LoadSpeedTraps(reinterpret_cast(cursor), header->mNumSpeedTrapRecords); + cursor += header->mNumSpeedTrapRecords * 0x14; + cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); + + bMemCpy(mHidingSpotFound, cursor, sizeof(mHidingSpotFound)); + cursor += (header->mNumHidingSpotFlags + 7U) >> 3; + cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); + + cursor += GRaceDatabase::Get().DeserializeBins(cursor); + cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); + + LoadSMSInfo(reinterpret_cast(cursor), header->mNumPendingSMS); + cursor += header->mNumPendingSMS * sizeof(int); + cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); + + bMemCpy(&mFreeRoamStartMarker, cursor, sizeof(mFreeRoamStartMarker)); + bMemCpy(&mFreeRoamFromSafeHouseStartMarker, cursor + 0x10, sizeof(mFreeRoamFromSafeHouseStartMarker)); + return true; +} + +void GManager::DefragObjectStateStorage() { + unsigned int count; + unsigned int index; + ObjectStateBlockHeader **blocks; + ObjectStateMap::iterator it; + unsigned char *freePtr; + + count = mPersistentStateBlocks.size() + mSessionStateBlocks.size(); + if (count == 0) { + mObjectStateBufferFree = mObjectStateBuffer; + return; + } + + blocks = new ObjectStateBlockHeader *[count]; + index = 0; + for (it = mPersistentStateBlocks.begin(); it != mPersistentStateBlocks.end(); ++it) { + blocks[index++] = it->second; + } + for (it = mSessionStateBlocks.begin(); it != mSessionStateBlocks.end(); ++it) { + blocks[index++] = it->second; + } + + std::sort(blocks, blocks + count); + freePtr = mObjectStateBuffer; + for (index = 0; index < count; ++index) { + ObjectStateBlockHeader *block = blocks[index]; + unsigned int blockSize = (block->mSize + 0x17U) & ~0xFU; + + if (reinterpret_cast(block) != freePtr) { + bOverlappedMemCpy(freePtr, block, blockSize); + + it = mPersistentStateBlocks.find(block->mKey); + if (it != mPersistentStateBlocks.end()) { + it->second = reinterpret_cast(freePtr); + } + + it = mSessionStateBlocks.find(block->mKey); + if (it != mSessionStateBlocks.end()) { + it->second = reinterpret_cast(freePtr); + } + } + + freePtr += blockSize; + } + + delete[] blocks; + mObjectStateBufferFree = freePtr; +} + +void GManager::UpdatePursuit() { + IPursuit *pursuit; + IPerpetrator *perpetrator; + bool roaming; + bool challengeRace; + bool cooldown; + + pursuit = nullptr; + perpetrator = nullptr; + roaming = GRaceStatus::Exists() && GRaceStatus::Get().GetPlayMode() == GRaceStatus::kPlayMode_Roaming; + GetPlayerPursuitInterfaces(pursuit, perpetrator); + + cooldown = false; + if (pursuit) { + TrackValue("cost_to_state_in_pursuit", static_cast(pursuit->CalcTotalCostToState())); + cooldown = pursuit->GetPursuitStatus() == 2; + } + + if (perpetrator) { + TrackValue("cost_to_state", static_cast(perpetrator->GetCostToState())); + TrackValue("bounty_in_pursuit", + static_cast(perpetrator->GetPendingRepPointsNormal() + + perpetrator->GetPendingRepPointsFromCopDestruction())); + } + + challengeRace = GRaceStatus::Exists() && GRaceStatus::Get().GetRaceParameters() && + GRaceStatus::Get().GetRaceParameters()->GetIsChallengeSeriesRace(); + + mHidingSpotIconsShown = (roaming || challengeRace) && pursuit && cooldown; + mPursuitBreakerIconsShown = (roaming || challengeRace) && pursuit && !cooldown; +} + +bool GManager::CalcMapCoordsForMarker(unsigned int markerKey, bVector2 &outPos, float &outRotDeg) { + GMarker *marker; + UMath::Vector3 pos; + UMath::Vector3 dir; + + marker = static_cast(FindInstance(markerKey)); + if (!marker) { + return false; + } + + pos = marker->GetPosition(); + dir = marker->GetDirection(); + outPos.x = pos.x; + outPos.y = pos.z; + outRotDeg = bAngToDeg(bATan(-dir.x, dir.z)); + return true; +} + void GManager::ResetTimers() { bMemSet(mTimers, 0, sizeof(mTimers)); } diff --git a/src/Speed/Indep/Src/Gameplay/GManager.h b/src/Speed/Indep/Src/Gameplay/GManager.h index b5e317e18..852e58014 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.h +++ b/src/Speed/Indep/Src/Gameplay/GManager.h @@ -37,6 +37,8 @@ typedef UTL::Std::list PendingSMSList; typedef UTL::Std::list AttribKeyList; class GVault; +class IPursuit; +class IPerpetrator; // total size: 0x308 class GManager : public UTL::COM::Object, public IVehicleCache { @@ -176,6 +178,8 @@ class GManager : public UTL::COM::Object, public IVehicleCache { void UpdateTimers(float dT); unsigned int SaveTimerInfo(struct SavedTimerInfo *saveInfo); void LoadTimerInfo(struct SavedTimerInfo *saveInfo, unsigned int count); + bool SaveGameplayData(unsigned char *dest, unsigned int maxSize); + bool LoadGameplayData(unsigned char *src, unsigned int maxSize); unsigned int SaveSMSInfo(int *saveInfo); void LoadSMSInfo(int *loadInfo, unsigned int count); @@ -220,6 +224,7 @@ class GManager : public UTL::COM::Object, public IVehicleCache { private: friend class GVault; + friend class GActivity; GManager(const char *vaultPackName); @@ -234,6 +239,10 @@ class GManager : public UTL::COM::Object, public IVehicleCache { void ReleaseStreamingBuffers(); void DestroyVaults(); void ResetAllGameplayData(); + ObjectStateBlockHeader *AllocObjectStateBlock(unsigned int key, unsigned int size, bool persistent); + void DefragObjectStateStorage(); + void UpdatePursuit(); + void GetPlayerPursuitInterfaces(IPursuit *&pursuit, IPerpetrator *&perpetrator); int GetAvailableBinSlot(); int GetAvailableRaceSlot(); diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 17a9df703..9904c4c75 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -13,6 +13,8 @@ void SetCurrentTimeOfDay(float value); extern int UnlockAllThings; +GRaceStatus *GRaceStatus::fObj = nullptr; + GRaceParameters::GRaceParameters(unsigned int collectionKey, GRaceIndexData *index) : mIndex(index), // mRaceRecord(new Attrib::Gen::gameplay(collectionKey, 0, nullptr)), // @@ -939,6 +941,66 @@ template void GRaceCustom::SetAttribute(unsigned int key, const T & } } +GRaceStatus::GRaceStatus() + : UTL::COM::Object(1), // + IVehicleCache((UTL::COM::Object *)this), // + mRacerCount(0), // + mIsLoading(false), // + mPlayMode(kPlayMode_Racing), // + mRaceContext(GRace::kRaceContext_Career), // + mRaceParms(nullptr), // + mRaceBin(nullptr), // + mBonusTime(0.0f), // + mTaskTime(0.0f), // + mSuddenDeathMode(false), // + mTimeExpiredMsgSent(false), // + mActivelyRacing(false), // + mLastSecondTickSent(0), // + mCheckpointModel(nullptr), // + mCheckpointEmitter(nullptr), // + mQueueBinChange(false), // + mNumTollbooths(0), // + mScriptWaitingForLoad(false), // + mCheckpoints(), // + mNextCheckpoint(nullptr), // + fRaceLength(0.0f), // + fFirstLapLength(0.0f), // + fSubsequentLapLength(0.0f), // + fCatchUpIntegral(0.0f), // + fCatchUpDerivative(0.0f), // + fCatchUpAdaptiveBonus(0.0f), // + fAveragePercentComplete(0.0f), // + nCatchUpSkillEntries(0), // + nCatchUpSpreadEntries(0), // + nSpeedTraps(0), // + mVehicleCacheLocked(false), // + bRaceRouteError(false), // + mTrafficDensity(0), // + mTrafficPattern(0), // + mHasBeenWon(false) { + fObj = this; + + bMemSet(mSegmentLengths, 0, sizeof(mSegmentLengths)); + bMemSet(mLapTimes, 0, sizeof(mLapTimes)); + bMemSet(mCheckTimes, 0, sizeof(mCheckTimes)); + bMemSet(aCatchUpSkillData, 0, sizeof(aCatchUpSkillData)); + bMemSet(aCatchUpSpreadData, 0, sizeof(aCatchUpSpreadData)); + bMemSet(aSpeedTraps, 0, sizeof(aSpeedTraps)); + + for (int i = 0; i < 16; ++i) { + mRacerInfo[i].ClearAll(); + } + + ClearTimes(); + SyncronizeAdaptiveBonus(); + MakeDefaultCatchUpData(); + + if (!GRaceDatabase::Get().GetStartupRace()) { + EnterBin(0); + SetRoaming(); + } +} + float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, const UMath::Vector4 *directions, int start, int end) { WRoadNav nav; bVector3 delta; From 35e8305a467049bba3576f02c9ea0a4fcbb3c2c2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 22:45:57 +0100 Subject: [PATCH 228/691] 30.8%: add GTrigger constructor Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Src/Frontend/Database/FEDatabase.hpp | 4 + src/Speed/Indep/Src/Gameplay/GIcon.h | 96 +++++++++++++ src/Speed/Indep/Src/Gameplay/GManager.h | 5 +- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 133 ++++++++++++++++++ 4 files changed, 236 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Frontend/Database/FEDatabase.hpp b/src/Speed/Indep/Src/Frontend/Database/FEDatabase.hpp index 3a41974f6..8356efa9d 100644 --- a/src/Speed/Indep/Src/Frontend/Database/FEDatabase.hpp +++ b/src/Speed/Indep/Src/Frontend/Database/FEDatabase.hpp @@ -166,6 +166,10 @@ class CareerSettings { return CurrentCar; } + unsigned char GetCurrentBin() { + return CurrentBin; + } + private: uint32 CurrentCar; // offset 0x0, size 0x4 uint32 SpecialFlags; // offset 0x4, size 0x4 diff --git a/src/Speed/Indep/Src/Gameplay/GIcon.h b/src/Speed/Indep/Src/Gameplay/GIcon.h index a6438b96c..728e0c897 100644 --- a/src/Speed/Indep/Src/Gameplay/GIcon.h +++ b/src/Speed/Indep/Src/Gameplay/GIcon.h @@ -5,6 +5,102 @@ #pragma once #endif +#include "Speed/Indep/Libs/Support/Utility/UMath.h" +struct EmitterGroup; +struct WorldModel; +struct bVector2; + +// total size: 0x20 +struct GIcon { + public: + enum Type { + kType_Invalid = 0, + kType_RaceSprint = 1, + kType_RaceCircuit = 2, + kType_RaceDrag = 3, + kType_RaceKnockout = 4, + kType_RaceTollbooth = 5, + kType_RaceSpeedtrap = 6, + kType_RaceRival = 7, + kType_GateSafehouse = 8, + kType_GateCarLot = 9, + kType_GateCustomShop = 10, + kType_HidingSpot = 11, + kType_PursuitBreaker = 12, + kType_SpeedTrap = 13, + kType_SpeedTrapInRace = 14, + kType_AreaUnlock = 15, + kType_Checkpoint = 16, + kType_Count = 17, + }; + + struct EffectInfo { + unsigned int mType; // offset 0x0, size 0x4 + unsigned int mModelHash; // offset 0x4, size 0x4 + unsigned int mParticleHash; // offset 0x8, size 0x4 + }; + + void Show(); + void Hide(); + void HideUntilRespawn(); + void ShowOnMap(); + void HideOnMap(); + void SetGPSing(); + void ClearGPSing(); + Type GetType() const; + int GetSectionID() const; + int GetCombinedSectionID() const; + bool GetVisibleInWorld() const; + bool GetVisibleOnMap() const; + bool GetIsDisposable() const; + bool GetIsSnapped() const; + bool GetIsGPSing() const; + const UMath::Vector3 &GetPosition() const; + void GetPosition2D(bVector2 &outPos); + + static void *operator new(unsigned int size); + static void operator delete(void *mem, unsigned int size); + static void *operator new(unsigned int size, const char *name); + static void operator delete(void *mem, const char *name); + static void operator delete(void *mem, unsigned int size, const char *name); + + void MarkDisposable(); + bool GetIsEnabled() const; + void SetFlag(unsigned int mask); + void ClearFlag(unsigned int mask); + bool IsFlagSet(unsigned int mask) const; + bool IsFlagClear(unsigned int mask) const; + + GIcon(Type type, const UMath::Vector3 &pos, float rotDeg); + ~GIcon(); + + void Spawn(); + void Unspawn(); + void FindSection(); + void SnapToGround(); + static void NotifyEmitterGroupDelete(void *obj, EmitterGroup *group); + EmitterGroup *CreateParticleEffect(unsigned int particleHash); + void ReleaseParticleEffect(); + void RefreshEffects(); + WorldModel *CreateGeometry(unsigned int modelHash); + void ReleaseGeometry(); + void SetPosition(); + void Enable(); + void Disable(); + + static EffectInfo kEffectInfo[]; + + private: + unsigned short mType; // offset 0x0, size 0x2 + unsigned short mFlags; // offset 0x2, size 0x2 + short mSectionID; // offset 0x4, size 0x2 + short mCombSectionID; // offset 0x6, size 0x2 + WorldModel *mModel; // offset 0x8, size 0x4 + EmitterGroup *mEmitter; // offset 0xC, size 0x4 + UMath::Vector3 mPosition; // offset 0x10, size 0xC + unsigned short mRotation; // offset 0x1C, size 0x2 + unsigned short mPad; // offset 0x1E, size 0x2 +}; #endif diff --git a/src/Speed/Indep/Src/Gameplay/GManager.h b/src/Speed/Indep/Src/Gameplay/GManager.h index 852e58014..3d3e8e049 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.h +++ b/src/Speed/Indep/Src/Gameplay/GManager.h @@ -7,6 +7,7 @@ #include "GActivity.h" #include "GCharacter.h" +#include "GIcon.h" #include "GMilestone.h" #include "GRaceDatabase.h" #include "GSpeedTrap.h" @@ -125,8 +126,8 @@ class GManager : public UTL::COM::Object, public IVehicleCache { void RefreshEngageTriggerIcons(); void HidePursuitBreakerIcon(const UMath::Vector3 &pos, float radius); - // struct GIcon *AllocIcon(enum Type iconType, const UMath::Vector3 &pos, float rotDeg, bool disposable); - // void FreeDisposableIcons(enum Type iconType); + GIcon *AllocIcon(GIcon::Type iconType, const UMath::Vector3 &pos, float rotDeg, bool disposable); + void FreeDisposableIcons(GIcon::Type iconType); void FreeIcon(struct GIcon *icon); void FreeIconAt(unsigned int index); int GatherVisibleIcons(struct GIcon **iconArray, IPlayer *player); diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index e69de29bb..7d909f82c 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -0,0 +1,133 @@ +#include "Speed/Indep/Src/Gameplay/GTrigger.h" + +#include "Speed/Indep/Src/Frontend/Database/FEDatabase.hpp" +#include "Speed/Indep/Src/Gameplay/GIcon.h" +#include "Speed/Indep/Src/Gameplay/GManager.h" +#include "Speed/Indep/Src/Gameplay/GRaceDatabase.h" +#include "Speed/Indep/Libs/Support/Utility/UMath.h" +#include "Speed/Indep/Libs/Support/Utility/UStandard.h" + +GTrigger::GTrigger(const Attrib::Key &triggerKey) + : GRuntimeInstance(triggerKey, kGameplayObjType_Trigger), // + mWorldTrigger(), // + mDirection(UMath::Vector3Make(0.0f, 0.0f, 0.0f)), // + mTriggerEnabled(0), // + mIcon(nullptr), // + mEnabled(false), // + mActivationReferences(0) { + const UMath::Vector3 &pos = Position(0); + const UMath::Vector3 *dimensions = reinterpret_cast(GetAttributePointer(0x6D9E21AD, 0)); + const float *radiusAttr = reinterpret_cast(GetAttributePointer(0x39BF8002, 0)); + UMath::Vector3 initialVec = UMath::Vector3Make(0.0f, 0.0f, 1.0f); + UMath::Vector3 posSwizzled = UMath::Vector3Make(-pos.y, pos.z, pos.x); + UMath::Matrix4 rotMat; + UMath::Matrix4 triggerMat; + float radius = radiusAttr ? *radiusAttr : 0.0f; + bool showIconBasedOnBin = true; + GIcon::Type iconType = GIcon::kType_Invalid; + + mParticleEffect[0] = nullptr; + mParticleEffect[1] = nullptr; + mSimObjInside.reserve(8); + + UMath::MultYRot(UMath::Matrix4::kIdentity, -Rotation(0) * 0.00069444446f, rotMat); + UMath::Rotate(initialVec, rotMat, mDirection); + + triggerMat = rotMat; + UMath::Set(triggerMat, 3, UMath::Vector4Make(posSwizzled, 1.0f)); + + if (dimensions) { + UMath::Vector3 dimSwizzled = UMath::Vector3Make(dimensions->x, dimensions->z, dimensions->y); + mWorldTrigger = WTrigger(triggerMat, dimSwizzled, &mEventList, OneShot(0) ? 2 : 0); + } else { + if (!radiusAttr) { + float width = Width(0); + radius = UMath::Sqrt(width * width + 1.0f); + } + mWorldTrigger = WTrigger(triggerMat, radius, radius * 2.0f, &mEventList, OneShot(0) ? 2 : 0); + } + + mEventList.fNumEvents = 1; + mEventList.fPad[0] = 0; + mEventList.fPad[1] = 0; + mEventList.fPad[2] = 0; + mEventStaticData.fEventID = 0xC34649C0u; + mEventStaticData.fEventSize = 8; + mEventStaticData.fDataOffset = 0x10; + mEventStaticData.fPad = 0; + bMemSet(mTriggerEventData, 0, sizeof(mTriggerEventData)); + reinterpret_cast(mTriggerEventData)[1] = GetCollection(); + + if (IsDerivedFromTemplate(0xF05931AB)) { + GRaceParameters *parms = GRaceDatabase::Get().GetRaceFromKey(TargetActivity(0).GetCollectionKey()); + + SetFlag(0x200); + if (parms) { + if (parms->GetIsBossRace()) { + iconType = GIcon::kType_RaceRival; + } else { + switch (parms->GetRaceType()) { + case GRace::kRaceType_P2P: + iconType = GIcon::kType_RaceSprint; + break; + case GRace::kRaceType_Circuit: + iconType = GIcon::kType_RaceCircuit; + break; + case GRace::kRaceType_Drag: + iconType = GIcon::kType_RaceDrag; + break; + case GRace::kRaceType_Knockout: + iconType = GIcon::kType_RaceKnockout; + break; + case GRace::kRaceType_Tollbooth: + iconType = GIcon::kType_RaceTollbooth; + break; + case GRace::kRaceType_SpeedTrap: + iconType = GIcon::kType_RaceSpeedtrap; + break; + default: + break; + } + } + + if (iconType != GIcon::kType_Invalid) { + mIcon = GManager::Get().AllocIcon(iconType, posSwizzled, 0.0f, false); + } + showIconBasedOnBin = false; + } + } else if (IsDerivedFromTemplate(0x73049919)) { + SetFlag(0x2000); + iconType = GIcon::kType_GateCarLot; + } else if (IsDerivedFromTemplate(0x4698966B)) { + SetFlag(0x4000); + iconType = GIcon::kType_GateCustomShop; + } else if (IsDerivedFromTemplate(0x326427BB)) { + SetFlag(0x8000); + iconType = GIcon::kType_GateSafehouse; + } else if (IsDerivedFromTemplate(0xB05871D3)) { + SetFlag(0x100); + if (OpenWorldSpeedTrap(0)) { + iconType = GIcon::kType_SpeedTrap; + } else { + iconType = GIcon::kType_SpeedTrapInRace; + showIconBasedOnBin = false; + } + } else if (IsDerivedFromTemplate(0x45E28759)) { + SetFlag(0x400); + } else if (IsDerivedFromTemplate(0x76720F56)) { + SetFlag(0x800); + } else if (IsDerivedFromTemplate(0xA3E939E9)) { + SetFlag(0x1000); + } else if (IsDerivedFromTemplate(0x98217DBF)) { + iconType = GIcon::kType_AreaUnlock; + } + + if (!mIcon && iconType != GIcon::kType_Invalid) { + mIcon = GManager::Get().AllocIcon(iconType, posSwizzled, 0.0f, false); + } + + if (showIconBasedOnBin && mIcon && FEDatabase && FEDatabase->GetCareerSettings()->GetCurrentBin() <= BinIndex(0)) { + mIcon->SetFlag(1); + mIcon->SetFlag(2); + } +} From 2e6106d2f847a5f1cfc698e4a918ba7fdec94268 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 22:47:46 +0100 Subject: [PATCH 229/691] 31.7%: add GTrigger helper methods Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 124 ++++++++++++++++++++++ 1 file changed, 124 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 7d909f82c..3a16686ef 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -7,6 +7,8 @@ #include "Speed/Indep/Libs/Support/Utility/UMath.h" #include "Speed/Indep/Libs/Support/Utility/UStandard.h" +#include + GTrigger::GTrigger(const Attrib::Key &triggerKey) : GRuntimeInstance(triggerKey, kGameplayObjType_Trigger), // mWorldTrigger(), // @@ -131,3 +133,125 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) mIcon->SetFlag(2); } } + +GTrigger::~GTrigger() { + ClearParticleEffects(); + if (mIcon) { + GManager::Get().FreeIcon(mIcon); + mIcon = nullptr; + } +} + +GActivity *GTrigger::GetTargetActivity() { + return reinterpret_cast(GManager::Get().FindInstance(TargetActivity(0).GetCollectionKey())); +} + +void GTrigger::AddActivationReference() { + mActivationReferences++; + if (mActivationReferences > 0) { + Enable(true); + } +} + +void GTrigger::RemoveActivationReference() { + if (mActivationReferences > 0) { + mActivationReferences--; + } + if (mActivationReferences <= 0) { + Enable(false); + } +} + +void GTrigger::ClearParticleEffects() { + for (int i = 0; i < 2; i++) { + if (mParticleEffect[i]) { + delete mParticleEffect[i]; + mParticleEffect[i] = nullptr; + } + } +} + +void GTrigger::EnableParticleEffects(bool enabled) { + for (int i = 0; i < 2; i++) { + if (mParticleEffect[i]) { + if (enabled) { + mParticleEffect[i]->Enable(); + } else { + mParticleEffect[i]->Disable(); + } + } + } +} + +void GTrigger::RefreshParticleEffects() { + EnableParticleEffects(mEnabled); +} + +void GTrigger::NotifyEmitterGroupDelete(void *obj, EmitterGroup *group) { + GTrigger *trigger = reinterpret_cast(obj); + + if (!trigger) { + return; + } + + for (int i = 0; i < 2; i++) { + if (trigger->mParticleEffect[i] == group) { + trigger->mParticleEffect[i] = nullptr; + } + } +} + +void GTrigger::Enable(bool setEnabled) { + mEnabled = setEnabled; + if (setEnabled) { + mWorldTrigger.Enable(); + ShowIcon(); + } else { + mWorldTrigger.Disable(); + HideIcon(); + } + EnableParticleEffects(setEnabled); +} + +void GTrigger::GetPosition(UMath::Vector3 &pos) { + mWorldTrigger.GetCenter(pos); +} + +void GTrigger::Reset() { + mSimObjInside.clear(); + mTriggerEnabled = 0; + mActivationReferences = 0; + Enable(false); +} + +void GTrigger::ShowIcon() { + if (mIcon) { + mIcon->SetFlag(1); + mIcon->SetFlag(2); + } +} + +void GTrigger::HideIcon() { + if (mIcon) { + mIcon->ClearFlag(1); + mIcon->ClearFlag(2); + } +} + +void GTrigger::MarkAsInside(ISimable *simable) { + if (!IsInside(simable)) { + mSimObjInside.push_back(simable); + } +} + +void GTrigger::MarkAsOutside(ISimable *simable) { + UTL::Std::vector::iterator it = std::find(mSimObjInside.begin(), mSimObjInside.end(), simable); + + if (it != mSimObjInside.end()) { + mSimObjInside.erase(it); + } +} + +bool GTrigger::IsInside(ISimable *simable) { + return std::find(mSimObjInside.begin(), mSimObjInside.end(), simable) != mSimObjInside.end(); +} From 545e69cf77f68f89c6c0eacd7f3ea186d363f224 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 22:51:14 +0100 Subject: [PATCH 230/691] 32.3%: add GTrigger particle flow Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Ecstasy/EmitterSystem.h | 2 + src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 79 +++++++++++++++++++++ 2 files changed, 81 insertions(+) diff --git a/src/Speed/Indep/Src/Ecstasy/EmitterSystem.h b/src/Speed/Indep/Src/Ecstasy/EmitterSystem.h index 979a05d1f..16c508322 100644 --- a/src/Speed/Indep/Src/Ecstasy/EmitterSystem.h +++ b/src/Speed/Indep/Src/Ecstasy/EmitterSystem.h @@ -572,4 +572,6 @@ class EmitterSystem { LibList mLibs; // offset 0x39C, size 0x10 }; +extern EmitterSystem gEmitterSystem; + #endif diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 3a16686ef..86545ac7a 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -1,6 +1,11 @@ #include "Speed/Indep/Src/Gameplay/GTrigger.h" +#include "Speed/Indep/Src/Ecstasy/EmitterSystem.h" +#include "Speed/Indep/Src/Ecstasy/eMath.hpp" #include "Speed/Indep/Src/Frontend/Database/FEDatabase.hpp" +#include "Speed/Indep/Src/Generated/Messages/MTriggerEnter.h" +#include "Speed/Indep/Src/Generated/Messages/MTriggerExit.h" +#include "Speed/Indep/Src/Generated/Messages/MTriggerInside.h" #include "Speed/Indep/Src/Gameplay/GIcon.h" #include "Speed/Indep/Src/Gameplay/GManager.h" #include "Speed/Indep/Src/Gameplay/GRaceDatabase.h" @@ -162,6 +167,55 @@ void GTrigger::RemoveActivationReference() { } } +EmitterGroup *GTrigger::CreateParticleEffect(const char *effectName, UMath::Vector3 &pos) { + Attrib::StringKey effectKey(effectName); + EmitterGroup *group = gEmitterSystem.CreateEmitterGroup(effectKey, 0x8040000); + + if (group) { + bMatrix4 localWorld; + bVector3 translation(pos.z, pos.y, -pos.x); + + eCreateTranslationMatrix(&localWorld, translation); + group->SetLocalWorld(&localWorld); + group->SetAutoUpdate(true); + group->SubscribeToDeletion(this, NotifyEmitterGroupDelete); + group->Disable(); + gEmitterSystem.AddEmitterGroup(group); + } + + return group; +} + +void GTrigger::CreateAllParticleEffects() { + const char *effectName = ParticleEffect(0); + + if (effectName && *effectName) { + UMath::Vector3 pos; + float flareSpacing = FlareSpacing(0); + + GetPosition(pos); + if (flareSpacing <= 0.0f) { + mParticleEffect[0] = CreateParticleEffect(effectName, pos); + } else { + bVector3 triggerPos(pos.x, pos.y, pos.z); + bVector3 up(0.0f, 1.0f, 0.0f); + bVector3 direction(mDirection.x, mDirection.y, mDirection.z); + bVector3 offset; + bVector3 leftOffset; + bVector3 rightOffset; + + bCross(&offset, &up, &direction); + offset *= flareSpacing; + leftOffset = bScaleAdd(triggerPos, offset, -1.0f); + rightOffset = bScaleAdd(triggerPos, offset, 1.0f); + UMath::Vector3 leftPos = UMath::Vector3Make(leftOffset.x, leftOffset.y, leftOffset.z); + UMath::Vector3 rightPos = UMath::Vector3Make(rightOffset.x, rightOffset.y, rightOffset.z); + mParticleEffect[0] = CreateParticleEffect(effectName, leftPos); + mParticleEffect[1] = CreateParticleEffect(effectName, rightPos); + } + } +} + void GTrigger::ClearParticleEffects() { for (int i = 0; i < 2; i++) { if (mParticleEffect[i]) { @@ -217,6 +271,31 @@ void GTrigger::GetPosition(UMath::Vector3 &pos) { mWorldTrigger.GetCenter(pos); } +void GTrigger::NotifySimableTrigger(ISimable *isim, int triggerStimulus) { + if (!isim) { + return; + } + + bool wasInside = IsInside(isim); + if (triggerStimulus == 2) { + MarkAsOutside(isim); + if (FireOnExit(0)) { + MTriggerExit msg(GCollectionKey(this), isim->GetOwnerHandle()); + msg.Post(UCrc32(0x20D60DBF)); + } + } + + if (triggerStimulus == 1) { + if (!wasInside) { + MarkAsInside(isim); + MTriggerEnter enterMsg(GCollectionKey(this), isim->GetOwnerHandle()); + enterMsg.Post(UCrc32(0x20D60DBF)); + } + MTriggerInside insideMsg(GCollectionKey(this), isim->GetOwnerHandle()); + insideMsg.Post(UCrc32(0x20D60DBF)); + } +} + void GTrigger::Reset() { mSimObjInside.clear(); mTriggerEnabled = 0; From 4f05b9d743d00d96e1f48e845194e6b08ffae790 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 22:54:13 +0100 Subject: [PATCH 231/691] 33.2%: add GRaceStatus utility helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 200 +++++++++++++++++++ 1 file changed, 200 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 9904c4c75..8da14ab4d 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1001,6 +1001,206 @@ GRaceStatus::GRaceStatus() } } +void GRaceStatus::Init() { + if (!fObj) { + new GRaceStatus(); + } +} + +void GRaceStatus::Shutdown() { + if (fObj) { + delete fObj; + fObj = nullptr; + } +} + +void GRaceStatus::EnableBinBarriers() { + EnableBarriers(); +} + +void GRaceStatus::DisableBinBarriers() { + DisableBarriers(); +} + +void GRaceStatus::RefreshBinWhileInGame() { + mQueueBinChange = true; +} + +GRacerInfo &GRaceStatus::GetRacerInfo(int index) { + return mRacerInfo[index]; +} + +GRacerInfo *GRaceStatus::GetRacerInfo(ISimable *isim) { + for (int i = 0; i < mRacerCount; ++i) { + if (mRacerInfo[i].GetSimable() == isim) { + return &mRacerInfo[i]; + } + } + + return nullptr; +} + +GRacerInfo *GRaceStatus::GetWinningPlayerInfo() { + GRacerInfo *winner = nullptr; + + for (int i = 0; i < mRacerCount; ++i) { + GRacerInfo &info = mRacerInfo[i]; + + if (!info.GetIsHuman()) { + continue; + } + + if (!winner || info.GetRanking() < winner->GetRanking()) { + winner = &info; + } + } + + return winner; +} + +void GRaceStatus::StartMasterTimer() { + float startTime = 0.0f; + + if (mRaceParms) { + startTime = mRaceParms->GetStartTime(); + } + + mRaceMasterTimer.Reset(-startTime); + mRaceMasterTimer.Start(); + mLastSecondTickSent = static_cast(GetRaceTimeElapsed()); + mTimeExpiredMsgSent = false; +} + +void GRaceStatus::StopMasterTimer() { + mRaceMasterTimer.Stop(); +} + +float GRaceStatus::GetRaceTimeElapsed() const { + return mRaceMasterTimer.GetTime(); +} + +float GRaceStatus::GetRaceTimeRemaining() const { + float limit = mRaceParms ? mRaceParms->GetTimeLimit() : 0.0f; + + if (limit <= 0.0f) { + return 0.0f; + } + + return limit + mBonusTime - GetRaceTimeElapsed(); +} + +void GRaceStatus::SetRaceActivity(GActivity *activity) { + mRaceParms = activity ? GRaceDatabase::Get().GetRaceFromActivity(activity) : nullptr; + DetermineRaceLength(); +} + +void GRaceStatus::AwardBonusTime(float seconds) { + mBonusTime += seconds; +} + +void GRaceStatus::ClearCheckpoints() { + mCheckpoints.clear(); + mNextCheckpoint = nullptr; +} + +void GRaceStatus::AddCheckpoint(GRuntimeInstance *trigger) { + GTrigger *gtrigger = static_cast(trigger); + + if (!gtrigger) { + return; + } + + mCheckpoints.push_back(gtrigger); + if (!mNextCheckpoint) { + mNextCheckpoint = gtrigger; + } +} + +float GRaceStatus::GetAdaptiveDifficutly() const { + return fCatchUpAdaptiveBonus; +} + +void GRaceStatus::SyncronizeAdaptiveBonus() { + if (fCatchUpAdaptiveBonus < 0.0f) { + fCatchUpAdaptiveBonus = 0.0f; + } +} + +void GRaceStatus::MakeDefaultCatchUpData() { + nCatchUpSkillEntries = 0; + nCatchUpSpreadEntries = 0; + fCatchUpIntegral = 0.0f; + fCatchUpDerivative = 0.0f; + bMemSet(aCatchUpSkillData, 0, sizeof(aCatchUpSkillData)); + bMemSet(aCatchUpSpreadData, 0, sizeof(aCatchUpSpreadData)); +} + +void GRaceStatus::MakeCatchUpData() { + MakeDefaultCatchUpData(); + if (mRaceParms) { + ParseCatchUpData(mRaceParms->GetCatchUpSkill(), mRaceParms->GetCatchUpSpread()); + fCatchUpIntegral = mRaceParms->GetCatchUpIntegral(); + fCatchUpDerivative = mRaceParms->GetCatchUpDerivative(); + } +} + +void GRaceStatus::ClearTimes() { + bMemSet(mLapTimes, 0, sizeof(mLapTimes)); + bMemSet(mCheckTimes, 0, sizeof(mCheckTimes)); +} + +void GRaceStatus::SetLapTime(int lapIndex, int racerIndex, float time) { + mLapTimes[lapIndex][racerIndex] = time; +} + +float GRaceStatus::GetLapTime(int lapIndex, int racerIndex, bool bCumulativeTimeAtLap) { + float time = mLapTimes[lapIndex][racerIndex]; + + if (bCumulativeTimeAtLap) { + for (int i = 0; i < lapIndex; ++i) { + time += mLapTimes[i][racerIndex]; + } + } + + return time; +} + +void GRaceStatus::SetCheckpointTime(int lapIndex, int checkIndex, int racerIndex, float time) { + mCheckTimes[lapIndex][checkIndex][racerIndex] = time; +} + +float GRaceStatus::GetCheckpointTime(int lapIndex, int checkIndex, int racerIndex, bool bCumulative) { + float time = mCheckTimes[lapIndex][checkIndex][racerIndex]; + + if (bCumulative) { + for (int i = 0; i < checkIndex; ++i) { + time += mCheckTimes[lapIndex][i][racerIndex]; + } + } + + return time; +} + +bool GRaceStatus::IsAudioLoading() { + return false; +} + +bool GRaceStatus::IsModelsLoading() { + return false; +} + +bool GRaceStatus::IsLoading() { + return mIsLoading || IsAudioLoading() || IsModelsLoading(); +} + +float GRaceStatus::GetSegmentLength(int segment, int lap) { + if (segment < 0 || segment >= 18) { + return 0.0f; + } + + return mSegmentLengths[segment]; +} + float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, const UMath::Vector4 *directions, int start, int end) { WRoadNav nav; bVector3 delta; From 0350d74418b8e79f24ace5fe35afcdc4eefc9b45 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 22:55:50 +0100 Subject: [PATCH 232/691] 33.9%: add GActivity lifecycle helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GActivity.cpp | 75 ++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GActivity.cpp b/src/Speed/Indep/Src/Gameplay/GActivity.cpp index 18a5dc3f1..f3d870d67 100644 --- a/src/Speed/Indep/Src/Gameplay/GActivity.cpp +++ b/src/Speed/Indep/Src/Gameplay/GActivity.cpp @@ -4,6 +4,81 @@ #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" #include "Speed/Indep/bWare/Inc/bWare.hpp" +GActivity::GActivity(const Attrib::Key &activityKey) + : GRuntimeInstance(activityKey, kGameplayObjType_Activity) // + , mCurrentState(nullptr) // + , mRegisteredHandlersState(nullptr) // + , mStateHandlers() // + , mRunning(false) // + , mVarsInLuaVM(false) { + GatherStatesAndHandlers(); +} + +GActivity::~GActivity() { + SerializeVars(true); + UnregisterMessageHandlers(); + mStateHandlers.clear(); +} + +void GActivity::Run() { + if (mRunning) { + return; + } + + mRunning = true; + if (mCurrentState) { + RegisterMessageHandlers(mCurrentState); + } + ActivateReferencedTriggers(true, this); +} + +void GActivity::Suspend() { + if (!mRunning) { + return; + } + + mRunning = false; + UnregisterMessageHandlers(); + ActivateReferencedTriggers(false, this); +} + +void GActivity::Reset() { + Suspend(); + mCurrentState = nullptr; + mRegisteredHandlersState = nullptr; +} + +GState *GActivity::GetStateByName(const char *stateName) { + StateToHandlers::iterator it = mStateHandlers.begin(); + StateToHandlers::iterator end = mStateHandlers.end(); + + while (it != end) { + GState *state = it->first; + if (state && bStrCmp(state->CollectionName(), stateName) == 0) { + return state; + } + ++it; + } + + return nullptr; +} + +void GActivity::EnterStateByName(const char *stateName) { + EnterState(GetStateByName(stateName)); +} + +void GActivity::EnterState(GState *newState) { + if (mCurrentState == newState) { + return; + } + + UnregisterMessageHandlers(); + mCurrentState = newState; + if (mRunning && mCurrentState) { + RegisterMessageHandlers(mCurrentState); + } +} + void GActivity::SerializeVars(bool abandonLuaTable) { SerializedHeader header; ObjectStateBlockHeader *block; From 2a0f799c2f54eb5553fc7712329093c2ad4c9ab8 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 22:57:21 +0100 Subject: [PATCH 233/691] 34.3%: add GRacerInfo race helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 99 ++++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 13 +++ 2 files changed, 112 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 8da14ab4d..0609e7840 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -15,6 +15,105 @@ extern int UnlockAllThings; GRaceStatus *GRaceStatus::fObj = nullptr; +bool GRacerInfo::GetIsHuman() const { + ISimable *simable = GetSimable(); + return simable && simable->IsPlayer(); +} + +void GRacerInfo::SetSimable(ISimable *isim) { + mhSimable = isim ? isim->GetInstanceHandle() : nullptr; +} + +void GRacerInfo::KnockOut() { + mKnockedOut = true; + mFinishedRacing = true; +} + +void GRacerInfo::TotalVehicle() { + mTotalled = true; + mFinishedRacing = true; +} + +void GRacerInfo::Busted() { + mBusted = true; + mFinishedRacing = true; +} + +void GRacerInfo::ChallengeComplete() { + mChallengeComplete = true; +} + +void GRacerInfo::ForceStop() { + mRaceTimer.Stop(); + mLapTimer.Stop(); + mCheckTimer.Stop(); + mFinishedRacing = true; + mFinishingSpeed = 0.0f; +} + +void GRacerInfo::BlowEngine() { + mEngineBlown = true; + mFinishedRacing = true; +} + +void GRacerInfo::AddToPointTotal(float points) { + mPointTotal += points; +} + +float GRacerInfo::CalcAverageSpeed() const { + float time = mRaceTimer.GetTime(); + + if (time <= 0.0f) { + return 0.0f; + } + + return mDistanceDriven / time; +} + +float GRacerInfo::GetHudPctRaceComplete() const { + if (mFinishedRacing) { + return 1.0f; + } + + return mPctRaceComplete; +} + +void GRacerInfo::StartRace() { + mFinishedRacing = false; + mRaceTimer.Reset(0.0f); + mLapTimer.Reset(0.0f); + mCheckTimer.Reset(0.0f); + mRaceTimer.Start(); + mLapTimer.Start(); + mCheckTimer.Start(); +} + +void GRacerInfo::StartLap(int lap) { + mLapsCompleted = lap; + mCheckpointsHitThisLap = 0; + mLapTimer.Reset(0.0f); + mLapTimer.Start(); +} + +void GRacerInfo::StartCheckpoint(int checkpoint) { + mCheckpointsHitThisLap = checkpoint; + mCheckTimer.Reset(0.0f); + mCheckTimer.Start(); +} + +void GRacerInfo::NotifySpeedTrapTriggered(float speed) { + if (mSpeedTrapsCrossed < 16) { + mSpeedTrapSpeed[mSpeedTrapsCrossed] = speed; + mSpeedTrapPosition[mSpeedTrapsCrossed] = mRanking; + } + + ++mSpeedTrapsCrossed; +} + +bool GRacerInfo::AreStatsReady() const { + return mhSimable != nullptr; +} + GRaceParameters::GRaceParameters(unsigned int collectionKey, GRaceIndexData *index) : mIndex(index), // mRaceRecord(new Attrib::Gen::gameplay(collectionKey, 0, nullptr)), // diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index 429b9dccb..bd20ad5ba 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -83,16 +83,29 @@ struct GRacerInfo { void SetDistDriven(float f) { mDistanceDriven = f; } void SetTopSpeed(float f) { mTopSpeed = f; } void SetPoundsNOSUsed(float f) { mPoundsNOSUsed = f; } + void SetSimable(ISimable *isim); void Reset(); void Update(float dT); void SaveExistingRaceStats(); void RestoreExistingRaceStats(); + float CalcAverageSpeed() const; + float GetHudPctRaceComplete() const; bool AreStatsReady() const; void ChooseRandomName(); bool ChooseBossName(); bool ChooseRacerName(); void FinalizeRaceStats(); + void KnockOut(); + void TotalVehicle(); + void Busted(); + void ForceStop(); + void BlowEngine(); + void AddToPointTotal(float points); + void StartRace(); + void StartLap(int lap); + void StartCheckpoint(int checkpoint); + void NotifySpeedTrapTriggered(float speed); void ChallengeComplete(); void ClearAll() {} From 790729eb0e883ebedea542f8e167d307636e8ba6 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 22:59:45 +0100 Subject: [PATCH 234/691] 34.6%: align GRacerInfo state helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 146 +++++++++++++++++-- src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 10 +- 2 files changed, 142 insertions(+), 14 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 0609e7840..ff5bbef16 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -20,23 +20,44 @@ bool GRacerInfo::GetIsHuman() const { return simable && simable->IsPlayer(); } +void GRacerInfo::SetName(const char *name) { + mName = name; +} + +void GRacerInfo::SetIndex(int index) { + mIndex = index; +} + +void GRacerInfo::SetRanking(int ranking) { + mRanking = ranking; +} + void GRacerInfo::SetSimable(ISimable *isim) { mhSimable = isim ? isim->GetInstanceHandle() : nullptr; } void GRacerInfo::KnockOut() { - mKnockedOut = true; - mFinishedRacing = true; + if (!IsFinishedRacing()) { + mKnockedOut = true; + mFinishedRacing = true; + GRaceStatus::Get().CalculateRankings(); + } } void GRacerInfo::TotalVehicle() { - mTotalled = true; - mFinishedRacing = true; + if (!IsFinishedRacing()) { + mTotalled = true; + mFinishedRacing = true; + GRaceStatus::Get().CalculateRankings(); + } } void GRacerInfo::Busted() { - mBusted = true; - mFinishedRacing = true; + if (!IsFinishedRacing()) { + mBusted = true; + mFinishedRacing = true; + GRaceStatus::Get().CalculateRankings(); + } } void GRacerInfo::ChallengeComplete() { @@ -44,20 +65,32 @@ void GRacerInfo::ChallengeComplete() { } void GRacerInfo::ForceStop() { + ISimable *simable = GetSimable(); mRaceTimer.Stop(); mLapTimer.Stop(); mCheckTimer.Stop(); mFinishedRacing = true; mFinishingSpeed = 0.0f; + + if (simable) { + IVehicle *vehicle; + + if (simable->QueryInterface(&vehicle)) { + vehicle->SetSpeed(0.0f); + } + } } void GRacerInfo::BlowEngine() { - mEngineBlown = true; - mFinishedRacing = true; + if (!IsFinishedRacing()) { + mEngineBlown = true; + mFinishedRacing = true; + GRaceStatus::Get().CalculateRankings(); + } } void GRacerInfo::AddToPointTotal(float points) { - mPointTotal += points; + mPointTotal = UMath::Max(mPointTotal + points, 0.0f); } float GRacerInfo::CalcAverageSpeed() const { @@ -71,11 +104,14 @@ float GRacerInfo::CalcAverageSpeed() const { } float GRacerInfo::GetHudPctRaceComplete() const { + GRaceParameters *raceParameters = GRaceStatus::Get().GetRaceParameters(); + float startPercent = raceParameters ? raceParameters->GetStartPercent() : 0.0f; + if (mFinishedRacing) { return 1.0f; } - return mPctRaceComplete; + return bClamp(startPercent + ((1.0f - startPercent) * mPctRaceComplete), 0.0f, 1.0f); } void GRacerInfo::StartRace() { @@ -110,10 +146,100 @@ void GRacerInfo::NotifySpeedTrapTriggered(float speed) { ++mSpeedTrapsCrossed; } +void GRacerInfo::FinishRace() { + mRaceTimer.Stop(); + mLapTimer.Stop(); + mCheckTimer.Stop(); + mFinishedRacing = true; + mFinishingSpeed = CalcAverageSpeed(); +} + +bool GRacerInfo::IsBehind(const GRacerInfo &rhs) const { + if (IsFinishedRacing() && rhs.IsFinishedRacing()) { + return GetRaceTime() > rhs.GetRaceTime(); + } + + if (IsFinishedRacing() != rhs.IsFinishedRacing()) { + return !IsFinishedRacing(); + } + + if (GetIsKnockedOut() != rhs.GetIsKnockedOut()) { + return GetIsKnockedOut(); + } + + if (GetIsEngineBlown() != rhs.GetIsEngineBlown()) { + return GetIsEngineBlown(); + } + + if (GetIsTotalled() != rhs.GetIsTotalled()) { + return GetIsTotalled(); + } + +#ifndef EA_BUILD_A124 + if (mDNF != rhs.mDNF) { + return mDNF; + } +#endif + + return GetPctRaceComplete() < rhs.GetPctRaceComplete(); +} + bool GRacerInfo::AreStatsReady() const { return mhSimable != nullptr; } +void GRacerInfo::ClearAll() { + mhSimable = nullptr; + mGameCharacter = nullptr; + mName = nullptr; + mIndex = 0; + mRanking = 0; + mAiRanking = 0; + mPctRaceComplete = 0.0f; + mKnockedOut = false; + mTotalled = false; + mEngineBlown = false; + mBusted = false; + mChallengeComplete = false; + mFinishedRacing = false; + mCameraDetached = false; + mPctLapComplete = 0.0f; + mLapsCompleted = 0; + mCheckpointsHitThisLap = 0; + mTollboothsCrossed = 0; + bMemSet(mTimeRemainingToBooth, 0, sizeof(mTimeRemainingToBooth)); + mSpeedTrapsCrossed = 0; + bMemSet(mSpeedTrapSpeed, 0, sizeof(mSpeedTrapSpeed)); + bMemSet(mSpeedTrapPosition, 0, sizeof(mSpeedTrapPosition)); + mDistToNextCheckpoint = 0.0f; + mDistanceDriven = 0.0f; + mTopSpeed = 0.0f; + mFinishingSpeed = 0.0f; + mPoundsNOSUsed = 0.0f; + mTimeCrossedLastCheck = 0.0f; + mTotalUpdateTime = 0.0f; + mNumPerfectShifts = 0; + mNumTrafficCarsHit = 0; + mSpeedBreakerTime = 0.0f; + mPointTotal = 0.0f; + mZeroToSixtyTime = 0.0f; + mQuarterMileTime = 0.0f; +#ifndef EA_BUILD_A124 + bMemSet(mSplitTimes, 0, sizeof(mSplitTimes)); + bMemSet(mSplitRankings, 0, sizeof(mSplitRankings)); +#endif + mRaceTimer.Reset(0.0f); + mLapTimer.Reset(0.0f); + mCheckTimer.Reset(0.0f); + mSavedPosition = UMath::Vector3Make(0.0f, 0.0f, 0.0f); + mSavedHeatLevel = 0.0f; + mSavedDirection = UMath::Vector3Make(0.0f, 0.0f, 0.0f); + mSavedSpeed = 0.0f; +#ifndef EA_BUILD_A124 + mDNF = false; +#endif +} + GRaceParameters::GRaceParameters(unsigned int collectionKey, GRaceIndexData *index) : mIndex(index), // mRaceRecord(new Attrib::Gen::gameplay(collectionKey, 0, nullptr)), // diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index bd20ad5ba..f9df81d78 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -74,9 +74,9 @@ struct GRacerInfo { float GetZeroToSixtyTime() const { return mZeroToSixtyTime; } float GetQuarterMileTime() const { return mQuarterMileTime; } - void SetName(const char *name) { mName = name; } - void SetIndex(int n) { mIndex = n; } - void SetRanking(int n) { mRanking = n; } + void SetName(const char *name); + void SetIndex(int n); + void SetRanking(int n); void SetRaceTime(float f) { mRaceTimer.SetTime(f); } void SetLapsCompleted(int n) { mLapsCompleted = n; } void SetPctRaceComplete(float f) { mPctRaceComplete = f; } @@ -89,6 +89,7 @@ struct GRacerInfo { void Update(float dT); void SaveExistingRaceStats(); void RestoreExistingRaceStats(); + bool IsBehind(const GRacerInfo &rhs) const; float CalcAverageSpeed() const; float GetHudPctRaceComplete() const; bool AreStatsReady() const; @@ -106,8 +107,9 @@ struct GRacerInfo { void StartLap(int lap); void StartCheckpoint(int checkpoint); void NotifySpeedTrapTriggered(float speed); + void FinishRace(); void ChallengeComplete(); - void ClearAll() {} + void ClearAll(); private: HSIMABLE mhSimable; // offset 0x0, size 0x4 From 58360fa23e05f5e8fea70cddda15c5b25520fa5d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:00:59 +0100 Subject: [PATCH 235/691] 34.7%: emit tiny GRaceStatus accessors Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 38 ++++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 22 ++++++------ 2 files changed, 49 insertions(+), 11 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index ff5bbef16..eaa846c0a 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1232,6 +1232,36 @@ void GRaceStatus::Init() { } } +void GRaceStatus::OnRemovedVehicleCache(IVehicle *ivehicle) {} + +const char *GRaceStatus::GetCacheName() const { + return "GRaceStatus"; +} + +void GRaceStatus::SetRaceContext(GRace::Context context) { + mRaceContext = context; +} + +int GRaceStatus::GetRacerCount() const { + return mRacerCount; +} + +void GRaceStatus::SetActivelyRacing(bool racing) { + mActivelyRacing = racing; +} + +void GRaceStatus::SetHasBeenWon(bool won) { + mHasBeenWon = won; +} + +void GRaceStatus::SetIsLoading(bool loading) { + mIsLoading = loading; +} + +void GRaceStatus::SetTaskTime(float time) { + mTaskTime = time; +} + void GRaceStatus::Shutdown() { if (fObj) { delete fObj; @@ -1319,6 +1349,10 @@ void GRaceStatus::SetRaceActivity(GActivity *activity) { DetermineRaceLength(); } +void GRaceStatus::AddAvailableEventToMap(GRuntimeInstance *trigger, GRuntimeInstance *activity) {} + +void GRaceStatus::AddSpeedTrapToMap(GRuntimeInstance *trigger) {} + void GRaceStatus::AwardBonusTime(float seconds) { mBonusTime += seconds; } @@ -1426,6 +1460,10 @@ float GRaceStatus::GetSegmentLength(int segment, int lap) { return mSegmentLengths[segment]; } +void GRaceStatus::EnterSuddenDeath() { + mSuddenDeathMode = true; +} + float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, const UMath::Vector4 *directions, int start, int end) { WRoadNav nav; bVector3 delta; diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index f9df81d78..8f1e27416 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -406,12 +406,12 @@ class GRaceStatus : public UTL::COM::Object, public IVehicleCache { enum eVehicleCacheResult OnQueryVehicleCache(const IVehicle *removethis, const IVehicleCache *whosasking) const override; // Overrides: IVehicleCache - void OnRemovedVehicleCache(IVehicle *ivehicle) override {} + void OnRemovedVehicleCache(IVehicle *ivehicle) override; // Overrides: IVehicleCache - const char *GetCacheName() const override { return "GRaceStatus"; } + const char *GetCacheName() const override; - void SetRaceContext(GRace::Context context) { mRaceContext = context; } + void SetRaceContext(GRace::Context context); GRacerInfo &GetRacerInfo(int index); @@ -419,12 +419,12 @@ class GRaceStatus : public UTL::COM::Object, public IVehicleCache { GRacerInfo *GetWinningPlayerInfo(); - int GetRacerCount() const { return mRacerCount; } + int GetRacerCount() const; - void SetActivelyRacing(bool racing) { mActivelyRacing = racing; } - void SetHasBeenWon(bool won) { mHasBeenWon = won; } - void SetIsLoading(bool loading) { mIsLoading = loading; } - void SetTaskTime(float time) { mTaskTime = time; } + void SetActivelyRacing(bool racing); + void SetHasBeenWon(bool won); + void SetIsLoading(bool loading); + void SetTaskTime(float time); void StartMasterTimer(); @@ -456,9 +456,9 @@ class GRaceStatus : public UTL::COM::Object, public IVehicleCache { void NotifyScriptWhenLoaded(); - void AddAvailableEventToMap(GRuntimeInstance *trigger, GRuntimeInstance *activity) {} + void AddAvailableEventToMap(GRuntimeInstance *trigger, GRuntimeInstance *activity); - void AddSpeedTrapToMap(GRuntimeInstance *trigger) {} + void AddSpeedTrapToMap(GRuntimeInstance *trigger); void AwardBonusTime(float seconds); @@ -602,7 +602,7 @@ class GRaceStatus : public UTL::COM::Object, public IVehicleCache { return mRaceBin->GetScaleOpenWorldHeat(); } - void EnterSuddenDeath() { mSuddenDeathMode = true; } + void EnterSuddenDeath(); private: static struct GRaceStatus *fObj; From 81eb7a4b291bf92227acfd617687b2aa363faf58 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:03:21 +0100 Subject: [PATCH 236/691] 35.1%: add GRacerInfo start position helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 50 ++++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 3 ++ 2 files changed, 53 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index eaa846c0a..c250df17f 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -4,6 +4,8 @@ #include "Speed/Indep/Src/Gameplay/GMarker.h" #include "Speed/Indep/Src/Gameplay/GObjectBlock.h" #include "Speed/Indep/Src/Gameplay/GVault.h" +#include "Speed/Indep/Src/Interfaces/Simables/IAI.h" +#include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" #include "Speed/Indep/Src/Main/AttribSupport.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" #include "Speed/Indep/Src/World/WRoadNetwork.h" @@ -240,6 +242,54 @@ void GRacerInfo::ClearAll() { #endif } +void GRacerInfo::SaveStartPosition() { + ISimable *simable = GetSimable(); + + if (!simable) { + return; + } + + IRigidBody *rigidBody = simable->GetRigidBody(); + if (rigidBody) { + mSavedPosition = rigidBody->GetPosition(); + rigidBody->GetForwardVector(mSavedDirection); + mSavedSpeed = rigidBody->GetSpeed(); + } + + mSavedHeatLevel = 0.0f; + { + IPerpetrator *perp; + + if (simable->QueryInterface(&perp)) { + mSavedHeatLevel = perp->GetHeat(); + } + } +} + +void GRacerInfo::RestoreStartPosition() { + ISimable *simable = GetSimable(); + IRacer *racer; + + if (!simable || !simable->QueryInterface(&racer)) { + return; + } + + RacePreparationInfo rpi; + rpi.Position = mSavedPosition; + rpi.Speed = mSavedSpeed; + rpi.Direction = mSavedDirection; + rpi.HeatLevel = mSavedHeatLevel; + rpi.Flags = RacePreparationInfo::RESET_DAMAGE; + racer->PrepareForRace(rpi); +} + +void GRacerInfo::ForceStartPosition(const UMath::Vector3 &pos, const UMath::Vector3 &dir) { + mSavedPosition = pos; + mSavedDirection = dir; + mSavedSpeed = 0.0f; + RestoreStartPosition(); +} + GRaceParameters::GRaceParameters(unsigned int collectionKey, GRaceIndexData *index) : mIndex(index), // mRaceRecord(new Attrib::Gen::gameplay(collectionKey, 0, nullptr)), // diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index 8f1e27416..01b054846 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -108,6 +108,9 @@ struct GRacerInfo { void StartCheckpoint(int checkpoint); void NotifySpeedTrapTriggered(float speed); void FinishRace(); + void SaveStartPosition(); + void RestoreStartPosition(); + void ForceStartPosition(const UMath::Vector3 &pos, const UMath::Vector3 &dir); void ChallengeComplete(); void ClearAll(); From 718d65e2781eaf8c1c6bad4b4e98a3d1d90e7f2b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:04:20 +0100 Subject: [PATCH 237/691] 35.4%: add GRaceStatus race stat accessors Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 83 ++++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 3 + 2 files changed, 86 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index c250df17f..7337b09e9 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1490,6 +1490,89 @@ float GRaceStatus::GetCheckpointTime(int lapIndex, int checkIndex, int racerInde return time; } +int GRaceStatus::GetLapPosition(int lapIndex, int racerIndex, bool bOverallPosition) { + float racerTime = GetLapTime(lapIndex, racerIndex, bOverallPosition); + int position = 1; + + for (int i = 0; i < mRacerCount; ++i) { + if (i == racerIndex) { + continue; + } + + float otherTime = GetLapTime(lapIndex, i, bOverallPosition); + if (otherTime > 0.0f && (racerTime <= 0.0f || otherTime < racerTime)) { + ++position; + } + } + + return position; +} + +float GRaceStatus::GetBestLapTime(int racerIndex) { + float best = 0.0f; + int lapCount = mRaceParms ? mRaceParms->GetNumLaps() : 10; + + for (int i = 0; i < lapCount && i < 10; ++i) { + float time = GetLapTime(i, racerIndex, false); + if (time > 0.0f && (best <= 0.0f || time < best)) { + best = time; + } + } + + return best; +} + +float GRaceStatus::GetWorstLapTime(int racerIndex) { + float worst = 0.0f; + int lapCount = mRaceParms ? mRaceParms->GetNumLaps() : 10; + + for (int i = 0; i < lapCount && i < 10; ++i) { + float time = GetLapTime(i, racerIndex, false); + if (time > worst) { + worst = time; + } + } + + return worst; +} + +float GRaceStatus::GetRaceSpeedTrapSpeed(int trapIndex, int racerIndex) { + return mRacerInfo[racerIndex].GetSpeedTrapSpeed(trapIndex); +} + +int GRaceStatus::GetRaceSpeedTrapPosition(int trapIndex, int racerIndex) { + return mRacerInfo[racerIndex].GetSpeedTrapPosition(trapIndex); +} + +float GRaceStatus::GetBestSpeedTrapSpeed(int racerIndex) { + float best = 0.0f; + + for (int i = 0; i < 16; ++i) { + best = UMath::Max(best, GetRaceSpeedTrapSpeed(i, racerIndex)); + } + + return best; +} + +float GRaceStatus::GetWorstSpeedTrapSpeed(int racerIndex) { + float worst = 0.0f; + bool found = false; + + for (int i = 0; i < 16; ++i) { + float speed = GetRaceSpeedTrapSpeed(i, racerIndex); + if (speed > 0.0f && (!found || speed < worst)) { + worst = speed; + found = true; + } + } + + return worst; +} + +float GRaceStatus::GetRaceTollboothTime(int boothIndex, int racerIndex) { + return mRacerInfo[racerIndex].GetTollboothTime(boothIndex); +} + bool GRaceStatus::IsAudioLoading() { return false; } diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index 01b054846..da569b13d 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -50,6 +50,9 @@ struct GRacerInfo { int GetIndex() const { return mIndex; } int GetAiRanking() const { return mAiRanking; } int GetSpeedTrapsCrossed() const { return mSpeedTrapsCrossed; } + float GetSpeedTrapSpeed(int index) const { return mSpeedTrapSpeed[index]; } + int GetSpeedTrapPosition(int index) const { return mSpeedTrapPosition[index]; } + float GetTollboothTime(int index) const { return mTimeRemainingToBooth[index]; } bool GetIsKnockedOut() const { return mKnockedOut; } bool GetIsTotalled() const { return mTotalled; } bool GetIsEngineBlown() const { return mEngineBlown; } From 5db953ba9b01cd8f46421d1ecfe3362495242522 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:06:59 +0100 Subject: [PATCH 238/691] 35.5%: add GRaceStatus teardown helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 22 ++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 7337b09e9..1f16937b4 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1573,6 +1573,28 @@ float GRaceStatus::GetRaceTollboothTime(int boothIndex, int racerIndex) { return mRacerInfo[racerIndex].GetTollboothTime(boothIndex); } +void GRaceStatus::RaceAbandoned() { + if (GetRaceContext() != GRace::kRaceContext_Career) { + return; + } + + GManager::Get().SuspendAllActivities(); +} + +void GRaceStatus::EndStopAll() { + for (int i = 0; i < mRacerCount; ++i) { + mRacerInfo[i].ForceStop(); + } +} + +void GRaceStatus::FinalizeRaceStats() { + if (GRaceStatus::Get().GetRaceContext() == GRace::kRaceContext_Career) { + for (int i = 0; i < mRacerCount; ++i) { + mRacerInfo[i].FinalizeRaceStats(); + } + } +} + bool GRaceStatus::IsAudioLoading() { return false; } From 90e1ad23861a4113adee03b4485bafa9c8c1b1b7 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:10:18 +0100 Subject: [PATCH 239/691] 35.7%: align GRacerInfo timer flow Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 87 +++++++++++++++++--- 1 file changed, 74 insertions(+), 13 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 1f16937b4..e29e56d98 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -117,26 +117,32 @@ float GRacerInfo::GetHudPctRaceComplete() const { } void GRacerInfo::StartRace() { + GRaceParameters *raceParameters = GRaceStatus::Get().GetRaceParameters(); + float startTime = raceParameters ? raceParameters->GetStartTime() : 0.0f; + mFinishedRacing = false; - mRaceTimer.Reset(0.0f); - mLapTimer.Reset(0.0f); - mCheckTimer.Reset(0.0f); + mRaceTimer.Reset(startTime); mRaceTimer.Start(); - mLapTimer.Start(); - mCheckTimer.Start(); + StartLap(1); } -void GRacerInfo::StartLap(int lap) { - mLapsCompleted = lap; +void GRacerInfo::StartLap(int lapIndexOneBased) { + mLapsCompleted = lapIndexOneBased - 1; mCheckpointsHitThisLap = 0; mLapTimer.Reset(0.0f); mLapTimer.Start(); + StartCheckpoint(0); } -void GRacerInfo::StartCheckpoint(int checkpoint) { - mCheckpointsHitThisLap = checkpoint; +void GRacerInfo::StartCheckpoint(int checkIndex) { + if (checkIndex == mCheckpointsHitThisLap + 1) { + mCheckpointsHitThisLap = checkIndex; + } + mCheckTimer.Reset(0.0f); mCheckTimer.Start(); + mDistToNextCheckpoint = 0.0f; + mTimeCrossedLastCheck = mRaceTimer.GetTime(); } void GRacerInfo::NotifySpeedTrapTriggered(float speed) { @@ -149,11 +155,17 @@ void GRacerInfo::NotifySpeedTrapTriggered(float speed) { } void GRacerInfo::FinishRace() { + ISimable *simable; + UMath::Vector3 linearVelocity; + mRaceTimer.Stop(); - mLapTimer.Stop(); - mCheckTimer.Stop(); mFinishedRacing = true; - mFinishingSpeed = CalcAverageSpeed(); + + simable = GetSimable(); + if (simable) { + simable->GetLinearVelocity(linearVelocity); + mFinishingSpeed = UMath::Length(linearVelocity); + } } bool GRacerInfo::IsBehind(const GRacerInfo &rhs) const { @@ -187,7 +199,11 @@ bool GRacerInfo::IsBehind(const GRacerInfo &rhs) const { } bool GRacerInfo::AreStatsReady() const { - return mhSimable != nullptr; + if (GRaceStatus::Get().GetRaceContext() != GRace::kRaceContext_TimeTrial) { + return true; + } + + return IsFinishedRacing() || GetIsEngineBlown() || GetIsTotalled(); } void GRacerInfo::ClearAll() { @@ -1453,6 +1469,20 @@ void GRaceStatus::MakeCatchUpData() { } } +void GRaceStatus::ParseCatchUpData(const char *skill, const char *spread) {} + +int GRaceStatus::GetCheckpointCount() { + return mCheckpoints.size(); +} + +GTrigger *GRaceStatus::GetCheckpoint(int index) { + return mCheckpoints[index]; +} + +GTrigger *GRaceStatus::GetNextCheckpoint() { + return mNextCheckpoint; +} + void GRaceStatus::ClearTimes() { bMemSet(mLapTimes, 0, sizeof(mLapTimes)); bMemSet(mCheckTimes, 0, sizeof(mCheckTimes)); @@ -1536,6 +1566,37 @@ float GRaceStatus::GetWorstLapTime(int racerIndex) { return worst; } +float GRaceStatus::GetFinishTimeBehind(int racerIndex) { + GRacerInfo &info = mRacerInfo[racerIndex]; + float finishTime = info.GetRaceTime(); + float bestFinish = finishTime; + + for (int i = 0; i < mRacerCount; ++i) { + if (i == racerIndex) { + continue; + } + + GRacerInfo &opponent = mRacerInfo[i]; + if (opponent.GetRaceTime() < bestFinish) { + bestFinish = opponent.GetRaceTime(); + } + } + + return finishTime - bestFinish; +} + +int GRaceStatus::GetLapsLed(int racerIndex) { + int numLed = 0; + + for (int i = 0; i < 10; ++i) { + if (GetLapPosition(i, racerIndex, true) == 1) { + ++numLed; + } + } + + return numLed; +} + float GRaceStatus::GetRaceSpeedTrapSpeed(int trapIndex, int racerIndex) { return mRacerInfo[racerIndex].GetSpeedTrapSpeed(trapIndex); } From 4ff0541e7e692fa4dcad326a8438637901c41fe1 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:12:19 +0100 Subject: [PATCH 240/691] 35.9%: add GRaceStatus racer registration helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 86 +++++++++++++++----- 1 file changed, 67 insertions(+), 19 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index e29e56d98..3e26be3a0 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -39,27 +39,33 @@ void GRacerInfo::SetSimable(ISimable *isim) { } void GRacerInfo::KnockOut() { - if (!IsFinishedRacing()) { - mKnockedOut = true; - mFinishedRacing = true; - GRaceStatus::Get().CalculateRankings(); + if (mFinishedRacing) { + return; } + + mKnockedOut = true; + mFinishedRacing = true; + GRaceStatus::Get().CalculateRankings(); } void GRacerInfo::TotalVehicle() { - if (!IsFinishedRacing()) { - mTotalled = true; - mFinishedRacing = true; - GRaceStatus::Get().CalculateRankings(); + if (mFinishedRacing) { + return; } + + mTotalled = true; + mFinishedRacing = true; + GRaceStatus::Get().CalculateRankings(); } void GRacerInfo::Busted() { - if (!IsFinishedRacing()) { - mBusted = true; - mFinishedRacing = true; - GRaceStatus::Get().CalculateRankings(); + if (mFinishedRacing) { + return; } + + mBusted = true; + mFinishedRacing = true; + GRaceStatus::Get().CalculateRankings(); } void GRacerInfo::ChallengeComplete() { @@ -84,11 +90,13 @@ void GRacerInfo::ForceStop() { } void GRacerInfo::BlowEngine() { - if (!IsFinishedRacing()) { - mEngineBlown = true; - mFinishedRacing = true; - GRaceStatus::Get().CalculateRankings(); + if (mFinishedRacing) { + return; } + + mEngineBlown = true; + mFinishedRacing = true; + GRaceStatus::Get().CalculateRankings(); } void GRacerInfo::AddToPointTotal(float points) { @@ -106,8 +114,11 @@ float GRacerInfo::CalcAverageSpeed() const { } float GRacerInfo::GetHudPctRaceComplete() const { - GRaceParameters *raceParameters = GRaceStatus::Get().GetRaceParameters(); - float startPercent = raceParameters ? raceParameters->GetStartPercent() : 0.0f; + float startPercent = 0.0f; + + if (GRaceStatus::Get().GetRaceParameters()) { + startPercent = GRaceStatus::Get().GetRaceParameters()->GetStartPercent(); + } if (mFinishedRacing) { return 1.0f; @@ -203,7 +214,7 @@ bool GRacerInfo::AreStatsReady() const { return true; } - return IsFinishedRacing() || GetIsEngineBlown() || GetIsTotalled(); + return mFinishedRacing || mEngineBlown || mTotalled; } void GRacerInfo::ClearAll() { @@ -1410,6 +1421,43 @@ float GRaceStatus::GetRaceTimeRemaining() const { return limit + mBonusTime - GetRaceTimeElapsed(); } +void GRaceStatus::ClearRacers() { + for (int i = 0; i < mRacerCount; ++i) { + mRacerInfo[i].ClearAll(); + } + + mRacerCount = 0; +} + +GRacerInfo &GRaceStatus::AddSimablePlayer(ISimable *isim) { + int index = mRacerCount; + GRacerInfo &info = mRacerInfo[index]; + + info.ClearAll(); + info.SetSimable(isim); + info.SetIndex(index); + info.SetRanking(index); + ++mRacerCount; + return info; +} + +void GRaceStatus::AddRacer(GRuntimeInstance *racer) { + GCharacter *character = static_cast(racer); + IVehicle *vehicle = character ? character->GetSpawnedVehicle() : nullptr; + ISimable *isimable = nullptr; + int index = mRacerCount; + GRacerInfo &info = mRacerInfo[index]; + + info.ClearAll(); + info.SetIndex(index); + info.SetRanking(index); + if (vehicle && vehicle->QueryInterface(&isimable)) { + info.SetSimable(isimable); + } + + ++mRacerCount; +} + void GRaceStatus::SetRaceActivity(GActivity *activity) { mRaceParms = activity ? GRaceDatabase::Get().GetRaceFromActivity(activity) : nullptr; DetermineRaceLength(); From d504aa85610c5cc73ffab0b938ddd8ac82a070f6 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:18:46 +0100 Subject: [PATCH 241/691] 36.5%: recover GCharacter owner methods Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GCharacter.cpp | 51 ++++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GCharacter.h | 4 +- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 45 +++++++++++++++++ src/Speed/Indep/Src/World/WRoadNetwork.h | 9 +++- 4 files changed, 105 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp index dfa5411de..6c05f9405 100644 --- a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp +++ b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp @@ -16,6 +16,25 @@ extern int SkipFE; extern int SkipFEDisableTraffic; extern int SkipFEDisableCops; +GCharacter::GCharacter(const Attrib::Key &triggerKey) + : GRuntimeInstance(triggerKey, kGameplayObjType_Character), // + UTL::COM::Object(1), // + IAttachable(this), // + mSpawnPos(UMath::Vector3::kZero), // + mState(kCharState_Unspawned), // + mFlags(0), // + mCreateAttemptsMade(0), // + mSpawnDir(UMath::Vector3::kZero), // + mSpawnSpeed(0.0f), // + mTargetPos(UMath::Vector3::kZero), // + mVehicle(nullptr), // + mTargetDir(UMath::Vector3::kZero), // + mAttachments(new Sim::Attachments(this)) {} + +GCharacter::~GCharacter() { + delete mAttachments; +} + void GCharacter::OnAttached(IAttachable *pOther) { IVehicle *vehicle; @@ -150,3 +169,35 @@ bool GCharacter::AttemptSpawn() { return mState == kCharState_Spawned; } + +bool GCharacter::IsSpawned() const { + return mState == kCharState_Spawned; +} + +void GCharacter::ReleaseVehicle() { + if (mVehicle) { + mAttachments->Detach(mVehicle); + } +} + +void GCharacter::Unspawn() { + if (IsFlagSet(kCharFlag_AttachedToManager)) { + GManager::Get().DetachCharacter(this); + ClearFlag(kCharFlag_AttachedToManager); + } + + if (mVehicle) { + ReleaseVehicle(); + } + + mState = kCharState_Unspawned; +} + +IVehicle *GCharacter::GetSpawnedVehicle() const { + return mVehicle; +} + +unsigned int GCharacter::GetName() const { + const char *name = RacerName(0); + return name ? Attrib::StringToKey(name) : 0; +} diff --git a/src/Speed/Indep/Src/Gameplay/GCharacter.h b/src/Speed/Indep/Src/Gameplay/GCharacter.h index 36bb045eb..ca9f1ca6b 100644 --- a/src/Speed/Indep/Src/Gameplay/GCharacter.h +++ b/src/Speed/Indep/Src/Gameplay/GCharacter.h @@ -91,9 +91,7 @@ class GCharacter : public GRuntimeInstance, public UTL::COM::Object, public IAtt bool AttemptSpawn(); - IVehicle *GetSpawnedVehicle() const { - return mVehicle; - } + IVehicle *GetSpawnedVehicle() const; unsigned int GetName() const; diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 3e26be3a0..51847ecaa 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1463,6 +1463,18 @@ void GRaceStatus::SetRaceActivity(GActivity *activity) { DetermineRaceLength(); } +void GRaceStatus::EnableBarriers() { + if (mRaceBin) { + mRaceBin->EnableBarriers(); + } +} + +void GRaceStatus::DisableBarriers() { + if (mRaceBin) { + mRaceBin->DisableBarriers(); + } +} + void GRaceStatus::AddAvailableEventToMap(GRuntimeInstance *trigger, GRuntimeInstance *activity) {} void GRaceStatus::AddSpeedTrapToMap(GRuntimeInstance *trigger) {} @@ -1767,11 +1779,13 @@ void GRaceStatus::DetermineRaceLength() { fFirstLapLength = 0.0f; bMemSet(mSegmentLengths, 0, sizeof(mSegmentLengths)); bRaceRouteError = false; + WRoadNetwork::Get().ResolveShortcuts(); if (!mRaceParms || !mRaceParms->HasFinishLine()) { return; } + WRoadNetwork::Get().SetRaceFilterValid(true); numCheckpoints = mRaceParms->GetNumCheckpoints(); mRaceParms->GetStartPosition(pos); positions[0] = UMath::Vector4Make(pos, 0.0f); @@ -1811,6 +1825,37 @@ void GRaceStatus::DetermineRaceLength() { fSubsequentLapLength = fRaceLength; fFirstLapLength = fRaceLength; } + + { + WRoadNav nav; + + nav.SetPathType(WRoadNav::kPathChopper); + nav.InitAtPoint(UMath::Vector4To3(positions[numCheckpoints + 1]), UMath::Vector4To3(directions[numCheckpoints + 1]), true, 1.0f); + if (nav.IsValid()) { + for (int i = 0; i < 100; ++i) { + WRoadSegment *segment; + + nav.IncNavPosition(1.0f, UMath::Vector3::kZero, 0.0f); + segment = const_cast(nav.GetSegment()); + segment->fFlags |= 0x8000; + if (nav.GetNodeInd() == 1) { + segment->fFlags |= 0x8004; + } else { + segment->fFlags = (segment->fFlags & static_cast(~4)) | 0x8000; + } + } + } + } + + nSpeedTraps = 0; + for (unsigned int i = 0; i < GManager::Get().GetNumSpeedTraps() && nSpeedTraps < 16; ++i) { + GTrigger *trigger = GManager::Get().GetSpeedTrap(i)->GetTrapTrigger(); + + if (trigger) { + aSpeedTraps[nSpeedTraps] = trigger; + ++nSpeedTraps; + } + } } template void GRaceCustom::SetAttribute(unsigned int key, const int &value, unsigned int index); diff --git a/src/Speed/Indep/Src/World/WRoadNetwork.h b/src/Speed/Indep/Src/World/WRoadNetwork.h index 420af55b4..57c500519 100644 --- a/src/Speed/Indep/Src/World/WRoadNetwork.h +++ b/src/Speed/Indep/Src/World/WRoadNetwork.h @@ -43,7 +43,9 @@ class WRoadNetwork : public Debugable { ~WRoadNetwork() {} - // void SetRaceFilterValid(bool b) {} + inline void SetRaceFilterValid(bool b) { + fValidRaceFilter = b; + } bool IsRaceFilterValid() { return fValidRaceFilter; @@ -70,6 +72,7 @@ class WRoadNetwork : public Debugable { // WRoadSegment *GetSegmentNonConst(int index) {} void ResolveBarriers(); + void ResolveShortcuts(); void ResetBarriers(); @@ -302,6 +305,10 @@ class WRoadNav { return fSegmentInd; } + char GetNodeInd() const { + return fNodeInd; + } + char HitDeadEnd() const { return fDeadEnd; } From 0c7bdd85a1dabe35ce7e0a819b6e90227b421c2c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:22:38 +0100 Subject: [PATCH 242/691] 36.8%: add GHandler scripted message flow Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GHandler.cpp | 69 +++++++++++++++++++ .../Src/Gameplay/LuaMessageDeliveryInfo.h | 7 +- 2 files changed, 73 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GHandler.cpp b/src/Speed/Indep/Src/Gameplay/GHandler.cpp index 77887b80e..36e0dbf88 100644 --- a/src/Speed/Indep/Src/Gameplay/GHandler.cpp +++ b/src/Speed/Indep/Src/Gameplay/GHandler.cpp @@ -1,6 +1,12 @@ #include "Speed/Indep/Src/Gameplay/GHandler.h" +#include "Speed/Indep/Src/Gameplay/LuaMessageDeliveryInfo.h" +#include "Speed/Indep/Src/Lua/source/lauxlib.h" +#include "Speed/Indep/Src/Lua/source/lua.h" #include "Speed/Indep/Src/Lua/LuaRuntime.h" +#include "Speed/Indep/Src/Misc/LZCompress.hpp" + +void LZByteSwapHeader(LZHeader *header); GHandler::GHandler(const Attrib::Key &handlerKey) : GRuntimeInstance(handlerKey, kGameplayObjType_Handler), // @@ -13,3 +19,66 @@ GHandler::~GHandler() { void GHandler::NotifyBytecodeFlushed() { mAttached = false; } + +void GHandler::Attach(lua_State *luaState) { + if (!mAttached) { + const unsigned int *bytecode = reinterpret_cast(GetAttributePointer(0x9a4a020a, 0)); + + if (bytecode) { + unsigned int size = bytecode[0]; + LZHeader *header = reinterpret_cast(bytecode[1]); + + if (size != 0) { + int result; + + LZByteSwapHeader(header); + if (!LZValidHeader(header)) { + result = lua_dobuffer(luaState, reinterpret_cast(header), size, "Handler"); + } else { + unsigned char stackBuffer[0x1000]; + unsigned char *buffer = stackBuffer; + unsigned char *allocated = nullptr; + + if (header->UncompressedSize > sizeof(stackBuffer)) { + allocated = new unsigned char[header->UncompressedSize]; + buffer = allocated; + } + + LZDecompress(reinterpret_cast(header), buffer); + result = lua_dobuffer(luaState, reinterpret_cast(buffer), header->UncompressedSize, "Handler"); + delete[] allocated; + } + LZByteSwapHeader(header); + + if (result == 0) { + mAttached = true; + } + } + } + } +} + +void GHandler::Detach(lua_State *luaState) { + if (mAttached) { + lua_pushstring(luaState, CollectionName()); + lua_pushnil(luaState); + lua_settable(luaState, LUA_GLOBALSINDEX); + mAttached = false; + } +} + +void GHandler::HandleMessage(LuaMessageDeliveryInfo *deliveryInfo) { + ExecuteScriptedHandler(deliveryInfo); +} + +void GHandler::ExecuteScriptedHandler(LuaMessageDeliveryInfo *deliveryInfo) { + lua_State *luaState = deliveryInfo->GetLuaState(); + + Attach(luaState); + lua_pushstring(luaState, CollectionName()); + lua_gettable(luaState, LUA_GLOBALSINDEX); + lua_pushvalue(luaState, -3); + lua_pushvalue(luaState, -5); + lua_pushvalue(luaState, -4); + lua_call(luaState, 3, 0); +} diff --git a/src/Speed/Indep/Src/Gameplay/LuaMessageDeliveryInfo.h b/src/Speed/Indep/Src/Gameplay/LuaMessageDeliveryInfo.h index 784d5d341..04cf8298d 100644 --- a/src/Speed/Indep/Src/Gameplay/LuaMessageDeliveryInfo.h +++ b/src/Speed/Indep/Src/Gameplay/LuaMessageDeliveryInfo.h @@ -15,7 +15,7 @@ struct Message; struct IMessageFilterContext : public UTL::COM::IUnknown { static HINTERFACE _IHandle() { - return reinterpret_cast(_IHandle); + return (HINTERFACE)_IHandle; } IMessageFilterContext(UTL::COM::Object *owner) : UTL::COM::IUnknown(owner, _IHandle()) {} @@ -32,7 +32,8 @@ struct IMessageFilterContext : public UTL::COM::IUnknown { struct LuaMessageDeliveryInfo : public UTL::COM::Object, public IMessageFilterContext { LuaMessageDeliveryInfo(UCrc32 messageKind, const Message *messageBase, void (*buildTableFunc)(lua_State *, const Message *)) - : IMessageFilterContext(this) // + : UTL::COM::Object(1) // + , IMessageFilterContext(this) // , mMessageKind(messageKind) // , mMessageBase(messageBase) // , mBuildTableFunc(buildTableFunc) // @@ -45,7 +46,7 @@ struct LuaMessageDeliveryInfo : public UTL::COM::Object, public IMessageFilterCo ~LuaMessageDeliveryInfo() override {} - unsigned int GetMessageKind() const { return mMessageKind; } + unsigned int GetMessageKind() const { return mMessageKind.GetValue(); } void SetLuaState(lua_State *luaState) { mLuaState = luaState; } void SetActivityContext(GActivity *activity) { mActivityContext = activity; } From 6ba2de555f7ccd4cdb6c3c4f70f9b1a8a881d6bb Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:24:20 +0100 Subject: [PATCH 243/691] 37.1%: add GManager icon and speedtrap helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 43 +++++++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GManager.h | 2 ++ 2 files changed, 45 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 5259b4cd9..97c4060ce 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -726,6 +726,22 @@ void GManager::ReleaseSpeedTraps() { mSpeedTraps = nullptr; } +void GManager::AllocateIcons() { + mNumIcons = 0; + mNumVisibleIcons = 0; + mIcons = new GIcon *[200]; +} + +void GManager::ReleaseIcons() { + if (mIcons) { + delete[] mIcons; + } + + mIcons = nullptr; + mNumIcons = 0; + mNumVisibleIcons = 0; +} + void GManager::AllocateSpeedTraps() { Attrib::Gen::gameplay gameplay(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), 0x49511906), 0, nullptr); AttribKeyList keys; @@ -758,6 +774,33 @@ void GManager::ResetSpeedTraps() { } } +GSpeedTrap *GManager::GetFirstSpeedTrap(bool activeOnly, unsigned int binNumber) { + return GetNextSpeedTrap(mSpeedTraps - 1, activeOnly, binNumber); +} + +void GManager::EnableBinSpeedTraps(unsigned int binNumber) { + for (GSpeedTrap *speedTrap = GetFirstSpeedTrap(false, binNumber); speedTrap; + speedTrap = GetNextSpeedTrap(speedTrap, false, binNumber)) { + speedTrap->Unlock(); + speedTrap->Activate(); + } +} + +void GManager::RefreshSpeedTrapIcons() { + for (GSpeedTrap *speedTrap = GetFirstSpeedTrap(false, 0); speedTrap; + speedTrap = GetNextSpeedTrap(speedTrap, false, 0)) { + GTrigger *trigger = speedTrap->GetTrapTrigger(); + + if (trigger) { + if (!speedTrap->IsFlagSet(GSpeedTrap::kFlag_Active) || speedTrap->IsFlagSet(GSpeedTrap::kFlag_Completed)) { + trigger->HideIcon(); + } else { + trigger->ShowIcon(); + } + } + } +} + void GManager::GatherInstanceKeys(Attrib::Gen::gameplay &collection, AttribKeyList &list, unsigned int templateKey) { Attrib::Key parentKey; unsigned int i; diff --git a/src/Speed/Indep/Src/Gameplay/GManager.h b/src/Speed/Indep/Src/Gameplay/GManager.h index 3d3e8e049..7ab929f85 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.h +++ b/src/Speed/Indep/Src/Gameplay/GManager.h @@ -126,6 +126,8 @@ class GManager : public UTL::COM::Object, public IVehicleCache { void RefreshEngageTriggerIcons(); void HidePursuitBreakerIcon(const UMath::Vector3 &pos, float radius); + void AllocateIcons(); + void ReleaseIcons(); GIcon *AllocIcon(GIcon::Type iconType, const UMath::Vector3 &pos, float rotDeg, bool disposable); void FreeDisposableIcons(GIcon::Type iconType); void FreeIcon(struct GIcon *icon); From 22582c7b928614065b0019b8885cc4dc9d89c086 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:25:46 +0100 Subject: [PATCH 244/691] 37.6%: add GManager character list helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 20 ++++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GManager.h | 1 + 2 files changed, 21 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 97c4060ce..e4bc2e779 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -901,6 +901,26 @@ void GManager::ReleaseStockCar(ISimable *stockCar) { mStockCars[stockCar->GetAttributes().GetCollection()] = stockCar; } +void GManager::AttachCharacter(GCharacter *character) { + if (std::find(mActiveCharacters.begin(), mActiveCharacters.end(), character) == mActiveCharacters.end()) { + mActiveCharacters.push_back(character); + } +} + +void GManager::DetachCharacter(GCharacter *character) { + GCharacterList::iterator it = std::find(mActiveCharacters.begin(), mActiveCharacters.end(), character); + + if (it != mActiveCharacters.end()) { + mActiveCharacters.erase(it); + } +} + +void GManager::UnspawnAllCharacters() { + while (!mActiveCharacters.empty()) { + mActiveCharacters.front()->Unspawn(); + } +} + bool GManager::GetHasPendingSMS() const { return !mPendingSMS.empty(); } diff --git a/src/Speed/Indep/Src/Gameplay/GManager.h b/src/Speed/Indep/Src/Gameplay/GManager.h index 7ab929f85..92b8b1985 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.h +++ b/src/Speed/Indep/Src/Gameplay/GManager.h @@ -117,6 +117,7 @@ class GManager : public UTL::COM::Object, public IVehicleCache { unsigned int GetNumBountySpawnMarkers() const { return mNumBountySpawnPoints; } unsigned int GetBountySpawnMarker(unsigned int index) const; void ServicePendingCharacters(); + void UnspawnAllCharacters(); void UnspawnUselessCharacters(); unsigned int GetRespawnMarker(); int GetBountySpawnMarkerTag(unsigned int index) const; From 85f37eaa01b66b50642ff7d7b376fa183a5ba8fc Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:26:42 +0100 Subject: [PATCH 245/691] 37.7%: add GCharacter offscreen unspawn helper Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GCharacter.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp index 6c05f9405..855f5e3fb 100644 --- a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp +++ b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp @@ -193,6 +193,22 @@ void GCharacter::Unspawn() { mState = kCharState_Unspawned; } +void GCharacter::UnspawnWhenOffscreen() { + switch (mState) { + case kCharState_Spawning_WaitingForModel: + case kCharState_Spawning_WaitingForTrack: + Unspawn(); + break; + case kCharState_Spawned: + case kCharState_Unspawning_WaitingUntilOffscreen: + if (mVehicle && mVehicle->GetOffscreenTime() > 0.0f) { + Unspawn(); + } + mState = kCharState_Unspawning_WaitingUntilOffscreen; + break; + } +} + IVehicle *GCharacter::GetSpawnedVehicle() const { return mVehicle; } From 6480e2f2e648cbddec3e5fff15fc954af0b586e6 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:30:37 +0100 Subject: [PATCH 246/691] 38.0%: add GManager vault lookup helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 55 +++++++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GManager.h | 7 +++ 2 files changed, 62 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index e4bc2e779..acd597535 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -5,7 +5,9 @@ #include "Speed/Indep/Src/Gameplay/GMarker.h" #include "Speed/Indep/Src/Gameplay/GVault.h" #include "Speed/Indep/Src/Interfaces/Simables/IAI.h" +#include "Speed/Indep/Tools/AttribSys/Runtime/AttribLoadAndGo.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" +#include "Speed/Indep/Tools/AttribSys/Runtime/Common/AttribPrivate.h" #include "Speed/Indep/bWare/Inc/bWare.hpp" #include @@ -107,6 +109,59 @@ GManager::~GManager() { mObj = nullptr; } +GVault *GManager::FindVault(const char *vaultName) { + int lower = 0; + int upper = mVaultCount - 1; + + while (lower <= upper) { + int middle = (lower + upper) / 2; + int cmp = bStrCmp(vaultName, mVaults[middle].GetName()); + + if (cmp < 0) { + upper = middle - 1; + } else if (cmp > 0) { + lower = middle + 1; + } else { + return &mVaults[middle]; + } + } + + return nullptr; +} + +GVault *GManager::FindVaultContaining(unsigned int collectionKey) { + unsigned int collectionType = Attrib::StringToTypeID("Attrib::CollectionLoadData"); + + for (int i = 0; i < mVaultCount; ++i) { + GVault *vault = &mVaults[i]; + + if (vault->IsLoaded()) { + Attrib::Vault *attribVault = vault->GetAttribVault(); + unsigned int exportCount = attribVault->CountExports(); + + for (unsigned int exportIndex = 0; exportIndex < exportCount; ++exportIndex) { + if (attribVault->GetExportType(exportIndex) == collectionType) { + Attrib::Collection *collection = reinterpret_cast(attribVault->GetExportData(exportIndex)); + + if (collection && collection->GetKey() == collectionKey) { + return vault; + } + } + } + } + } + + return nullptr; +} + +void GManager::LoadCoreVault(AttribVaultPackImage *packImage) { + FindVault("gpcore")->LoadResident(packImage); +} + +void GManager::UnloadCoreVault() { + FindVault("gpcore")->Unload(); +} + void GManager::StartBinActivity(GRaceBin *raceBin) { GActivity *activity; diff --git a/src/Speed/Indep/Src/Gameplay/GManager.h b/src/Speed/Indep/Src/Gameplay/GManager.h index 92b8b1985..a9f3c6d0a 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.h +++ b/src/Speed/Indep/Src/Gameplay/GManager.h @@ -71,7 +71,14 @@ class GManager : public UTL::COM::Object, public IVehicleCache { const char *GetCacheName() const override { return "GManager"; } + void InitializeVaults(); void InitializeRaceStreaming(); + GVault *FindVault(const char *vaultName); + GVault *FindVaultContaining(unsigned int collectionKey); + void LoadCoreVault(struct AttribVaultPackImage *packImage); + void PreloadTransientVaults(struct AttribVaultPackImage *packImage); + void UnloadCoreVault(); + void UnloadTransientVaults(); void PreBeginGameplay(); void BeginGameplay(); void EndGameplay(); From e19e5956bacd55b8e0c64e675b6a4c15aa05c594 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:36:18 +0100 Subject: [PATCH 247/691] 38.6%: add GManager vault initialization flow Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 88 +++++++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GVault.h | 54 +++++++++++++- src/Speed/Indep/Src/Misc/LZCompress.hpp | 9 +++ 3 files changed, 150 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index acd597535..57a1f1bab 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -5,6 +5,8 @@ #include "Speed/Indep/Src/Gameplay/GMarker.h" #include "Speed/Indep/Src/Gameplay/GVault.h" #include "Speed/Indep/Src/Interfaces/Simables/IAI.h" +#include "Speed/Indep/Src/Misc/LZCompress.hpp" +#include "Speed/Indep/Src/Misc/Platform.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribLoadAndGo.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" #include "Speed/Indep/Tools/AttribSys/Runtime/Common/AttribPrivate.h" @@ -13,6 +15,11 @@ #include #include +char *bStrIStr(const char *s1, const char *s2); +void bCloseMemoryPool(int pool_num); +bool bSetMemoryPoolDebugTracing(int pool_num, bool on_off); +void LZByteSwapHeader(LZHeader *header); + GManager *GManager::mObj = nullptr; GManager::GManager(const char *vaultPackName) @@ -162,6 +169,87 @@ void GManager::UnloadCoreVault() { FindVault("gpcore")->Unload(); } +void GManager::PreloadTransientVaults(AttribVaultPackImage *packImage) { + mTransientPoolMemory = bMalloc(0x164000, 0x47); + mTransientPoolNumber = bGetFreeMemoryPoolNum(); + bInitMemoryPool(mTransientPoolNumber, mTransientPoolMemory, 0x164000, "GManager Temp"); + bSetMemoryPoolDebugTracing(mTransientPoolNumber, false); + + for (unsigned int i = 0; i < mVaultCount; ++i) { + DVDErrorTask(nullptr, 0); + + if (!mVaults[i].IsLoaded()) { + mVaults[i].PreloadTransient(packImage, mTransientPoolNumber); + } + } +} + +void GManager::Init(const char *vaultPackName) { + mObj = new GManager(vaultPackName); + mObj->InitializeVaults(); +} + +void GManager::InitializeVaults() { + char compressedFilename[128]; + void *compressedBuf; + LZHeader *header; + AttribVaultPackImage *imageBuffer; + unsigned int tableBufferSize; + + bStrCpy(compressedFilename, mVaultPackFileName); + bStrCpy(bStrIStr(compressedFilename, ".BIN"), ".LZC"); + + compressedBuf = bGetFile(compressedFilename, nullptr, 0); + header = reinterpret_cast(compressedBuf); + LZByteSwapHeader(header); + imageBuffer = static_cast(bMalloc(header->UncompressedSize, 0x1047)); + LZDecompress(reinterpret_cast(compressedBuf), reinterpret_cast(imageBuffer)); + bFree(compressedBuf); + + mLoadingPackImage = imageBuffer; + mLoadingPackImage->EndianSwap(); + + tableBufferSize = mGameplayClass->GetTableNodeSize() << 14; + mClassTempBuffer = bMalloc(tableBufferSize, 0x40); + mGameplayClass->SetTableBuffer(mClassTempBuffer, tableBufferSize); + + BuildVaultTable(mLoadingPackImage); + LoadCoreVault(mLoadingPackImage); + PreloadTransientVaults(mLoadingPackImage); + FindKeyReductionShifts(); + AllocateIcons(); + AllocateMilestones(); + AllocateSpeedTraps(); + FindBountySpawnPoints(); + RefreshZoneIcons(); + RefreshTrackMarkerIcons(); +} + +void GManager::InitializeRaceStreaming() { + AllocateStreamingBuffers(); + AllocateInstanceMap(); + UnloadTransientVaults(); + + mGameplayClass->SetTableBuffer(nullptr, mMaxObjects * 3 * mGameplayClass->GetTableNodeSize()); + bFree(mClassTempBuffer); + mClassTempBuffer = nullptr; + bFree(mLoadingPackImage); + mLoadingPackImage = nullptr; +} + +void GManager::UnloadTransientVaults() { + for (unsigned int i = 0; i < mVaultCount; ++i) { + if (mVaults[i].IsTransient()) { + mVaults[i].Unload(); + } + } + + bCloseMemoryPool(mTransientPoolNumber); + bFree(mTransientPoolMemory); + mTransientPoolNumber = 0; + mTransientPoolMemory = nullptr; +} + void GManager::StartBinActivity(GRaceBin *raceBin) { GActivity *activity; diff --git a/src/Speed/Indep/Src/Gameplay/GVault.h b/src/Speed/Indep/Src/Gameplay/GVault.h index ed4ac558f..bf6c31c18 100644 --- a/src/Speed/Indep/Src/Gameplay/GVault.h +++ b/src/Speed/Indep/Src/Gameplay/GVault.h @@ -6,6 +6,7 @@ #endif #include "Speed/Indep/Src/Misc/AttribAlloc.h" +#include "Speed/Indep/bWare/Inc/bWare.hpp" // total size: 0x14 struct AttribVaultPackEntry { @@ -16,7 +17,58 @@ struct AttribVaultPackEntry { unsigned int mVltOffset; // offset 0x10, size 0x4 }; -struct AttribVaultPackImage; +// total size: 0x10 +struct AttribVaultPackHeader { + char mMagic[4]; // offset 0x0, size 0x4 + unsigned int mNumEntries; // offset 0x4, size 0x4 + unsigned int mStringBlockOffset; // offset 0x8, size 0x4 + unsigned int mStringBlockSize; // offset 0xC, size 0x4 +}; + +// total size: 0x24 +struct AttribVaultPackImage { + const char *GetVaultName(int index) { + return reinterpret_cast(this) + mHeader.mStringBlockOffset + GetEntry(index).mVaultNameOffset; + } + + int GetVaultIndex(const char *name) { + for (unsigned int i = 0; i < mHeader.mNumEntries; ++i) { + if (bStrCmp(GetVaultName(i), name) == 0) { + return static_cast(i); + } + } + + return -1; + } + + AttribVaultPackEntry &GetEntry(int index) { + return mEntry[index]; + } + + unsigned char *GetData(unsigned int offset) { + return reinterpret_cast(this) + offset; + } + + void EndianSwap() { + bPlatEndianSwap(&mHeader.mNumEntries); + bPlatEndianSwap(&mHeader.mStringBlockOffset); + bPlatEndianSwap(&mHeader.mStringBlockSize); + + for (int onEntry = 0; onEntry < static_cast(mHeader.mNumEntries); ++onEntry) { + AttribVaultPackEntry &entry = GetEntry(onEntry); + + bPlatEndianSwap(&entry.mVaultNameOffset); + bPlatEndianSwap(&entry.mBinSize); + bPlatEndianSwap(&entry.mVltSize); + bPlatEndianSwap(&entry.mBinOffset); + bPlatEndianSwap(&entry.mVltOffset); + } + } + + AttribVaultPackHeader mHeader; // offset 0x0, size 0x10 + AttribVaultPackEntry mEntry[1]; // offset 0x10, size 0x14 +}; + struct GObjectBlock; // total size: 0x18 diff --git a/src/Speed/Indep/Src/Misc/LZCompress.hpp b/src/Speed/Indep/Src/Misc/LZCompress.hpp index d1436fa4c..093643542 100644 --- a/src/Speed/Indep/Src/Misc/LZCompress.hpp +++ b/src/Speed/Indep/Src/Misc/LZCompress.hpp @@ -1,3 +1,10 @@ +#ifndef MISC_LZCOMPRESS_HPP +#define MISC_LZCOMPRESS_HPP + +#ifdef EA_PRAGMA_ONCE_SUPPORTED +#pragma once +#endif + #include "types.h" // total size: 0x10 @@ -13,3 +20,5 @@ class LZHeader { int32 LZDecompress(uint8 *pSrc, uint8 *pDst); int LZValidHeader(LZHeader *header); + +#endif From e185d81204799a7d77bd7dc5067c3581bcdd22e6 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:39:35 +0100 Subject: [PATCH 248/691] 38.8%: add GManager gameplay lifecycle helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 26 +++++++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GManager.h | 3 +++ 2 files changed, 29 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 57a1f1bab..e134bd0f4 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -250,6 +250,32 @@ void GManager::UnloadTransientVaults() { mTransientPoolMemory = nullptr; } +void GManager::PreBeginGameplay() { + if (mRestartEventHash) { + GRaceCustom *customRace = GRaceDatabase::Get().AllocCustomRace(GRaceDatabase::Get().GetRaceFromHash(mRestartEventHash)); + + GRaceDatabase::Get().SetStartupRace(customRace, kRaceContext_Career); + GRaceDatabase::Get().FreeCustomRace(customRace); + mRestartEventHash = 0; + } +} + +void GManager::Update(float dT) { + GRaceStatus::Get().Update(dT); + UnspawnUselessCharacters(); + ServicePendingCharacters(); + UpdatePursuit(); + UpdateTimers(dT); + UpdatePendingSMS(); + UpdateTriggerAvailability(); + UpdateIconVisibility(); +} + +void GManager::ClearAllSessionData() { + mSessionStateBlocks.clear(); + DefragObjectStateStorage(); +} + void GManager::StartBinActivity(GRaceBin *raceBin) { GActivity *activity; diff --git a/src/Speed/Indep/Src/Gameplay/GManager.h b/src/Speed/Indep/Src/Gameplay/GManager.h index a9f3c6d0a..3dec5ae08 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.h +++ b/src/Speed/Indep/Src/Gameplay/GManager.h @@ -199,7 +199,10 @@ class GManager : public UTL::COM::Object, public IVehicleCache { void AddSMS(int smsID); void DispatchSMSMessage(int smsID); void UpdatePendingSMS(); + void UpdateTriggerAvailability(); + void UpdateIconVisibility(); int PushSMSToInbox(); + void ClearAllSessionData(); static GManager &Get() { return *mObj; From 518417d75f36c66432e8bf3accedda21f939a022 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:42:17 +0100 Subject: [PATCH 249/691] 39.1%: add GManager milestone helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 24 +++++++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GManager.h | 1 + 2 files changed, 25 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index e134bd0f4..83890f023 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -355,6 +355,10 @@ GMilestone *GManager::GetNextMilestone(GMilestone *current, bool availOnly, unsi return nullptr; } +GMilestone *GManager::GetFirstMilestone(bool availOnly, unsigned int binNumber) { + return GetNextMilestone(mMilestones - 1, availOnly, binNumber); +} + unsigned int GManager::SaveMilestones(GMilestone *dest) { bMemCpy(dest, mMilestones, mNumMilestones * sizeof(GMilestone)); return mNumMilestones; @@ -793,6 +797,10 @@ float GManager::GetValue(unsigned int valueKey) { return it->second.mLastKnownValue; } +float GManager::GetBestValue(unsigned int valueKey) { + return mMilestoneTypeInfo.find(valueKey)->second.mBestValue; +} + bool GManager::GetIsBiggerValueBetter(unsigned int valueKey) { MilestoneInfoMap::iterator it; @@ -955,6 +963,22 @@ void GManager::EnableBinSpeedTraps(unsigned int binNumber) { } } +void GManager::EnableBinMilestones(unsigned int binNumber) { + for (GMilestone *milestone = GetFirstMilestone(false, binNumber); milestone; + milestone = GetNextMilestone(milestone, false, binNumber)) { + milestone->Unlock(); + } +} + +void GManager::NotifyPursuitStarted() { + for (MilestoneInfoMap::iterator it = mMilestoneTypeInfo.begin(); it != mMilestoneTypeInfo.end(); ++it) { + if ((it->second.mFlags & GMilestone::kFlag_CompletionFaked) != 0) { + it->second.mLastKnownValue = -1.0f; + it->second.mBestValue = -1.0f; + } + } +} + void GManager::RefreshSpeedTrapIcons() { for (GSpeedTrap *speedTrap = GetFirstSpeedTrap(false, 0); speedTrap; speedTrap = GetNextSpeedTrap(speedTrap, false, 0)) { diff --git a/src/Speed/Indep/Src/Gameplay/GManager.h b/src/Speed/Indep/Src/Gameplay/GManager.h index 3dec5ae08..d57d68b73 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.h +++ b/src/Speed/Indep/Src/Gameplay/GManager.h @@ -92,6 +92,7 @@ class GManager : public UTL::COM::Object, public IVehicleCache { void IncValue(const char *valueName); float GetValue(const char *valueName); float GetValue(unsigned int valueKey); + float GetBestValue(unsigned int valueKey); bool GetIsBiggerValueBetter(unsigned int valueKey); void RegisterInstance(GRuntimeInstance *instance); From 4bf31221909ce5fdd40ec512e2787aaaab765f8d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:43:43 +0100 Subject: [PATCH 250/691] 39.2%: add GManager bounty and notify wrappers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 83890f023..ae6f998d9 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -979,6 +979,14 @@ void GManager::NotifyPursuitStarted() { } } +unsigned int GManager::GetBountySpawnMarker(unsigned int index) const { + if (index >= mNumBountySpawnPoints) { + return 0; + } + + return mBountySpawnPoint[index]; +} + void GManager::RefreshSpeedTrapIcons() { for (GSpeedTrap *speedTrap = GetFirstSpeedTrap(false, 0); speedTrap; speedTrap = GetNextSpeedTrap(speedTrap, false, 0)) { @@ -994,6 +1002,18 @@ void GManager::RefreshSpeedTrapIcons() { } } +void NotifyGameZonesChanged() { + if (GManager::Exists()) { + GManager::Get().RefreshZoneIcons(); + } +} + +void NotifyTrackMarkersChanged() { + if (GManager::Exists()) { + GManager::Get().RefreshTrackMarkerIcons(); + } +} + void GManager::GatherInstanceKeys(Attrib::Gen::gameplay &collection, AttribKeyList &list, unsigned int templateKey) { Attrib::Key parentKey; unsigned int i; From 5ade0dcdd20349bcde033e456677b3f140ac1d2b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:44:57 +0100 Subject: [PATCH 251/691] 39.4%: add GManager marker and pursuit helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index ae6f998d9..a134d6d34 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2,6 +2,7 @@ #include "Speed/Indep/Libs/Support/Utility/FastMem.h" #include "Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h" +#include "Speed/Indep/Src/Generated/Events/EAutoSave.hpp" #include "Speed/Indep/Src/Gameplay/GMarker.h" #include "Speed/Indep/Src/Gameplay/GVault.h" #include "Speed/Indep/Src/Interfaces/Simables/IAI.h" @@ -987,6 +988,12 @@ unsigned int GManager::GetBountySpawnMarker(unsigned int index) const { return mBountySpawnPoint[index]; } +int GManager::GetBountySpawnMarkerTag(unsigned int index) const { + Attrib::Gen::gameplay gameplay(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), GetBountySpawnMarker(index)), 0, nullptr); + + return gameplay.LocalizationTag(0); +} + void GManager::RefreshSpeedTrapIcons() { for (GSpeedTrap *speedTrap = GetFirstSpeedTrap(false, 0); speedTrap; speedTrap = GetNextSpeedTrap(speedTrap, false, 0)) { @@ -1014,6 +1021,17 @@ void NotifyTrackMarkersChanged() { } } +void GManager::NotifyPursuitEnded(bool evaded) { + for (GMilestone *availMile = GetFirstMilestone(true, 0); availMile; + availMile = GetNextMilestone(availMile, true, 0)) { + availMile->NotifyPursuitOver(evaded); + } + + if (evaded && GRaceStatus::Get().GetPlayMode() == GRaceStatus::kPlayMode_Roaming) { + new EAutoSave(); + } +} + void GManager::GatherInstanceKeys(Attrib::Gen::gameplay &collection, AttribKeyList &list, unsigned int templateKey) { Attrib::Key parentKey; unsigned int i; From c17a5c3945f27af3db523fc454223876f2719d8e Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:48:50 +0100 Subject: [PATCH 252/691] 40.0%: add GManager zone and lifecycle flow Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 93 +++++++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GManager.h | 2 + 2 files changed, 95 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index a134d6d34..8b513baa7 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -3,11 +3,14 @@ #include "Speed/Indep/Libs/Support/Utility/FastMem.h" #include "Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h" #include "Speed/Indep/Src/Generated/Events/EAutoSave.hpp" +#include "Speed/Indep/Src/Generated/Messages/MEnteringGameplay.h" #include "Speed/Indep/Src/Gameplay/GMarker.h" #include "Speed/Indep/Src/Gameplay/GVault.h" #include "Speed/Indep/Src/Interfaces/Simables/IAI.h" #include "Speed/Indep/Src/Misc/LZCompress.hpp" #include "Speed/Indep/Src/Misc/Platform.h" +#include "Speed/Indep/Src/World/TrackPath.hpp" +#include "Speed/Indep/Src/World/WCollisionAssets.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribLoadAndGo.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" #include "Speed/Indep/Tools/AttribSys/Runtime/Common/AttribPrivate.h" @@ -19,6 +22,8 @@ char *bStrIStr(const char *s1, const char *s2); void bCloseMemoryPool(int pool_num); bool bSetMemoryPoolDebugTracing(int pool_num, bool on_off); +void ApplyTimeOfDayTickOver(); +void SetOverRideRainIntensity(float intensity); void LZByteSwapHeader(LZHeader *header); GManager *GManager::mObj = nullptr; @@ -261,6 +266,40 @@ void GManager::PreBeginGameplay() { } } +void GManager::BeginGameplay() { + for (unsigned int i = 0; i < mVaultCount; ++i) { + if (mVaults[i].IsLoaded()) { + mVaults[i].CreateGameplayObjects(); + } + } + + GRaceCustom *startupRace = GRaceDatabase::Get().GetStartupRace(); + if (startupRace) { + startupRace->CreateRaceActivity(); + } + + ConnectRuntimeInstances(); + StartActivities(); + WCollisionAssets::Get().AddPackLoadCallback(NotifyCollisionPackLoaded); + mPursuitBreakerIconsShown = false; + mHidingSpotIconsShown = false; + mEventIconsShown = false; + mMenuGateIconsShown = false; + mSpeedTrapIconsShown = false; + mSpeedTrapRaceIconsShown = false; + RefreshEngageTriggerIcons(); + RefreshSpeedTrapIcons(); + SpawnAllLoadedSectionIcons(); + + if (!startupRace) { + GRaceStatus::Get().EnableBinBarriers(); + } + + MEnteringGameplay().Post(UCrc32(0x20D60DBF)); + mStartFreeRoamFromSafeHouse = false; + mInGameplay = true; +} + void GManager::Update(float dT) { GRaceStatus::Get().Update(dT); UnspawnUselessCharacters(); @@ -277,6 +316,27 @@ void GManager::ClearAllSessionData() { DefragObjectStateStorage(); } +void GManager::EndGameplay() { + UnspawnAllCharacters(); + ClearStockCars(); + + for (unsigned int i = 0; i < mVaultCount; ++i) { + if (mVaults[i].IsLoaded()) { + mVaults[i].DestroyGameplayObjects(); + } + } + + UnspawnAllIcons(); + ClearAllSessionData(); + WCollisionAssets::Get().RemovePackLoadCallback(NotifyCollisionPackLoaded); + GRaceDatabase::Get().SetStartupRace(nullptr, kRaceContext_Career); + mInGameplay = false; + mWorstHashCollision = 0; + mOverrideFreeRoamStartMarker = 0; + ApplyTimeOfDayTickOver(); + SetOverRideRainIntensity(0.0f); +} + void GManager::StartBinActivity(GRaceBin *raceBin) { GActivity *activity; @@ -980,6 +1040,16 @@ void GManager::NotifyPursuitStarted() { } } +void GManager::NotifyCollisionPackLoaded(int sectionID, bool loaded) { + if (mObj) { + if (loaded) { + mObj->SpawnSectionIcons(sectionID); + } else { + mObj->UnspawnSectionIcons(sectionID); + } + } +} + unsigned int GManager::GetBountySpawnMarker(unsigned int index) const { if (index >= mNumBountySpawnPoints) { return 0; @@ -994,6 +1064,29 @@ int GManager::GetBountySpawnMarkerTag(unsigned int index) const { return gameplay.LocalizationTag(0); } +void GManager::RefreshZoneIcons() { + FreeDisposableIcons(GIcon::kType_HidingSpot); + + for (TrackPathZone *zone = TheTrackPathManager.FindZone(nullptr, TRACK_PATH_ZONE_HIDDEN, nullptr); zone; + zone = TheTrackPathManager.FindZone(nullptr, TRACK_PATH_ZONE_HIDDEN, zone)) { + UMath::Vector3 pos; + + pos.x = zone->Position.x; + pos.y = zone->Position.y; + pos.z = zone->Elevation; + + GIcon *icon = AllocIcon(GIcon::kType_HidingSpot, pos, 0.0f, true); + if (icon) { + icon->Show(); + icon->ShowOnMap(); + } + } + + if (GetInGameplay()) { + SpawnAllLoadedSectionIcons(); + } +} + void GManager::RefreshSpeedTrapIcons() { for (GSpeedTrap *speedTrap = GetFirstSpeedTrap(false, 0); speedTrap; speedTrap = GetNextSpeedTrap(speedTrap, false, 0)) { diff --git a/src/Speed/Indep/Src/Gameplay/GManager.h b/src/Speed/Indep/Src/Gameplay/GManager.h index d57d68b73..310cfb53a 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.h +++ b/src/Speed/Indep/Src/Gameplay/GManager.h @@ -209,6 +209,8 @@ class GManager : public UTL::COM::Object, public IVehicleCache { return *mObj; } + static void NotifyCollisionPackLoaded(int sectionID, bool loaded); + static bool Exists() { return mObj != nullptr; } From fc84d81b0a154130c8886dbc39397073c915e557 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:50:10 +0100 Subject: [PATCH 253/691] 40.2%: add GManager track marker icon helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 29 +++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 8b513baa7..facb1dac2 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -10,6 +10,7 @@ #include "Speed/Indep/Src/Misc/LZCompress.hpp" #include "Speed/Indep/Src/Misc/Platform.h" #include "Speed/Indep/Src/World/TrackPath.hpp" +#include "Speed/Indep/Src/World/TrackPositionMarker.hpp" #include "Speed/Indep/Src/World/WCollisionAssets.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribLoadAndGo.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" @@ -24,6 +25,7 @@ void bCloseMemoryPool(int pool_num); bool bSetMemoryPoolDebugTracing(int pool_num, bool on_off); void ApplyTimeOfDayTickOver(); void SetOverRideRainIntensity(float intensity); +void ForEachTrackPositionMarker(bool (*callback)(TrackPositionMarker *marker, unsigned int tag), unsigned int tag); void LZByteSwapHeader(LZHeader *header); GManager *GManager::mObj = nullptr; @@ -1087,6 +1089,33 @@ void GManager::RefreshZoneIcons() { } } +bool GManager::AddIconForTrackMarker(TrackPositionMarker *marker, unsigned int tag) { + if (marker->NameHash == tag) { + UMath::Vector3 pos; + + pos.x = marker->Position.x; + pos.y = marker->Position.y; + pos.z = marker->Position.z; + + GIcon *icon = GManager::Get().AllocIcon(GIcon::kType_PursuitBreaker, pos, 0.0f, true); + if (icon) { + icon->Show(); + icon->ShowOnMap(); + } + } + + return true; +} + +void GManager::RefreshTrackMarkerIcons() { + FreeDisposableIcons(GIcon::kType_PursuitBreaker); + ForEachTrackPositionMarker(AddIconForTrackMarker, bStringHash("IconMarker")); + + if (GetInGameplay()) { + SpawnAllLoadedSectionIcons(); + } +} + void GManager::RefreshSpeedTrapIcons() { for (GSpeedTrap *speedTrap = GetFirstSpeedTrap(false, 0); speedTrap; speedTrap = GetNextSpeedTrap(speedTrap, false, 0)) { From 0640f92f6a9c1456ed1a26a9e6a8ecb573fea09a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:51:50 +0100 Subject: [PATCH 254/691] 40.3%: add GManager world activity startup Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index facb1dac2..da5b430ac 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -20,6 +20,8 @@ #include #include +extern int SkipFE; + char *bStrIStr(const char *s1, const char *s2); void bCloseMemoryPool(int pool_num); bool bSetMemoryPoolDebugTracing(int pool_num, bool on_off); @@ -339,6 +341,25 @@ void GManager::EndGameplay() { SetOverRideRainIntensity(0.0f); } +void GManager::StartWorldActivities(bool startFreeRoamOnly) { + for (unsigned int i = 0; i < mInstanceHashTableSize; ++i) { + GRuntimeInstance *instance = mKeyToInstanceMap[i].mInstance; + + if (instance && instance->GetType() == kGameplayObjType_Activity) { + GActivity *activity = static_cast(instance); + bool autoStart = activity->AutoStart(0); + + if (activity->FreeRoamOnly(0) && !startFreeRoamOnly) { + autoStart = false; + } + + if (autoStart) { + activity->Run(); + } + } + } +} + void GManager::StartBinActivity(GRaceBin *raceBin) { GActivity *activity; From 4c7e3acd0dd484e7d6b5f48908e04c099cf1a235 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:53:15 +0100 Subject: [PATCH 255/691] 40.4%: add GManager activity startup flow Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index da5b430ac..e8d487563 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -360,6 +360,21 @@ void GManager::StartWorldActivities(bool startFreeRoamOnly) { } } +void GManager::StartActivities() { + bool startWorld = SkipFE == 0; + GRaceCustom *startupRace = GRaceDatabase::Get().GetStartupRace(); + + if (startupRace) { + startupRace->GetRaceActivity()->Run(); + GRaceStatus::Get().SetRaceContext(GRaceDatabase::Get().GetStartupRaceContext()); + startWorld = GRaceDatabase::Get().GetStartupRaceContext() == GRace::kRaceContext_Career && startWorld; + } + + if (startWorld) { + StartWorldActivities(startupRace == nullptr); + } +} + void GManager::StartBinActivity(GRaceBin *raceBin) { GActivity *activity; From ff31ca6609a04120ef3e772fbcef94b5d225acc7 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:55:36 +0100 Subject: [PATCH 256/691] 40.9%: add gameplay event timer runtime Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 6 ++++ src/Speed/Indep/Src/Gameplay/GTimer.cpp | 39 +++++++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GTimer.h | 9 ++++++ 3 files changed, 54 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index e8d487563..90af6161e 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -375,6 +375,12 @@ void GManager::StartActivities() { } } +void GManager::UpdateTimers(float dT) { + for (unsigned int i = 0; i < 8; ++i) { + mTimers[i].Update(dT); + } +} + void GManager::StartBinActivity(GRaceBin *raceBin) { GActivity *activity; diff --git a/src/Speed/Indep/Src/Gameplay/GTimer.cpp b/src/Speed/Indep/Src/Gameplay/GTimer.cpp index decbabfb4..40e759f35 100644 --- a/src/Speed/Indep/Src/Gameplay/GTimer.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTimer.cpp @@ -1,5 +1,6 @@ #include "Speed/Indep/Src/Gameplay/GTimer.h" +#include "Speed/Indep/Src/Generated/Messages/MNotifyTimer.h" #include "Speed/Indep/Src/Sim/Simulation.h" GTimer::GTimer() { @@ -36,3 +37,41 @@ void GTimer::SetTime(float time) { mTotalTime = time; mRunning = false; } + +GEventTimer::GEventTimer() { + Reset(); +} + +GEventTimer::~GEventTimer() {} + +void GEventTimer::Reset() { + mInterval = 1.0f; + mRunning = false; + mElapsed = 0.0f; + mNameHash = 0; +} + +void GEventTimer::Start() { + mRunning = true; + mElapsed = 0.0f; +} + +void GEventTimer::Stop() { + mRunning = false; + mElapsed = 0.0f; +} + +void GEventTimer::SetInterval(float value) { + mInterval = value; + mElapsed = 0.0f; +} + +void GEventTimer::Update(float dT) { + if (mRunning != 0) { + mElapsed += dT; + if (mInterval <= mElapsed) { + MNotifyTimer(mName).Post(UCrc32(0x20D60DBF)); + mElapsed -= mInterval; + } + } +} diff --git a/src/Speed/Indep/Src/Gameplay/GTimer.h b/src/Speed/Indep/Src/Gameplay/GTimer.h index 65af7380d..ab23fe562 100644 --- a/src/Speed/Indep/Src/Gameplay/GTimer.h +++ b/src/Speed/Indep/Src/Gameplay/GTimer.h @@ -37,6 +37,15 @@ class GEventTimer { // float GetElapsed() const {} + GEventTimer(); + ~GEventTimer(); + + void Reset(); + void Start(); + void Stop(); + void SetInterval(float value); + void Update(float dT); + private: float mInterval; // offset 0x0, size 0x4 bool mRunning; // offset 0x4, size 0x1 From d8dded0272210993051e60a65151109b18185f71 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:57:41 +0100 Subject: [PATCH 257/691] 41.4%: add gameplay timer save load flow Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 55 +++++++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GTimer.cpp | 21 +++++++++ src/Speed/Indep/Src/Gameplay/GTimer.h | 25 +++++++---- 3 files changed, 92 insertions(+), 9 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 90af6161e..4e1c19093 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -16,6 +16,7 @@ #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" #include "Speed/Indep/Tools/AttribSys/Runtime/Common/AttribPrivate.h" #include "Speed/Indep/bWare/Inc/bWare.hpp" +#include "Speed/Indep/bWare/Inc/Strings.hpp" #include #include @@ -381,6 +382,60 @@ void GManager::UpdateTimers(float dT) { } } +bool GManager::SetTimer(const char *name, float interval) { + unsigned int hash = bStringHash(name); + int index; + + for (index = 0; index < 8; ++index) { + GEventTimer &timer = mTimers[index]; + + if (hash == timer.GetNameHash()) { + timer.Stop(); + timer.SetInterval(interval); + timer.Start(); + return true; + } + } + + for (index = 0; index < 8; ++index) { + GEventTimer &timer = mTimers[index]; + + if (!timer.IsRunning()) { + timer.SetName(name); + timer.SetInterval(interval); + timer.Start(); + return true; + } + } + + return false; +} + +void GManager::KillTimer(const char *name) { + unsigned int hash = bStringHash(name); + + for (unsigned int i = 0; i < 8; ++i) { + if (hash == mTimers[i].GetNameHash()) { + mTimers[i].Stop(); + return; + } + } +} + +unsigned int GManager::SaveTimerInfo(SavedTimerInfo *saveInfo) { + for (unsigned int i = 0; i < 8; ++i) { + mTimers[i].Serialize(&saveInfo[i]); + } + + return 8; +} + +void GManager::LoadTimerInfo(SavedTimerInfo *saveInfo, unsigned int count) { + for (unsigned int i = 0; i < count; ++i) { + mTimers[i].Deserialize(&saveInfo[i]); + } +} + void GManager::StartBinActivity(GRaceBin *raceBin) { GActivity *activity; diff --git a/src/Speed/Indep/Src/Gameplay/GTimer.cpp b/src/Speed/Indep/Src/Gameplay/GTimer.cpp index 40e759f35..3774a3168 100644 --- a/src/Speed/Indep/Src/Gameplay/GTimer.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTimer.cpp @@ -2,6 +2,7 @@ #include "Speed/Indep/Src/Generated/Messages/MNotifyTimer.h" #include "Speed/Indep/Src/Sim/Simulation.h" +#include "Speed/Indep/bWare/Inc/Strings.hpp" GTimer::GTimer() { Reset(0.0f); @@ -66,6 +67,11 @@ void GEventTimer::SetInterval(float value) { mElapsed = 0.0f; } +void GEventTimer::SetName(const char *name) { + bSafeStrCpy(mName, name, sizeof(mName)); + mNameHash = bStringHash(mName); +} + void GEventTimer::Update(float dT) { if (mRunning != 0) { mElapsed += dT; @@ -75,3 +81,18 @@ void GEventTimer::Update(float dT) { } } } + +void GEventTimer::Serialize(SavedTimerInfo *saveInfo) { + saveInfo->mElapsed = mElapsed; + saveInfo->mInterval = mInterval; + saveInfo->mRunning = mRunning; + bSafeStrCpy(saveInfo->mName, mName, sizeof(saveInfo->mName)); +} + +void GEventTimer::Deserialize(SavedTimerInfo *saveInfo) { + mElapsed = saveInfo->mElapsed; + mInterval = saveInfo->mInterval; + mRunning = saveInfo->mRunning; + bSafeStrCpy(mName, saveInfo->mName, sizeof(mName)); + mNameHash = bStringHash(mName); +} diff --git a/src/Speed/Indep/Src/Gameplay/GTimer.h b/src/Speed/Indep/Src/Gameplay/GTimer.h index ab23fe562..45ddcc70c 100644 --- a/src/Speed/Indep/Src/Gameplay/GTimer.h +++ b/src/Speed/Indep/Src/Gameplay/GTimer.h @@ -24,18 +24,22 @@ class GTimer { bool mRunning; // offset 0x8, size 0x1 }; +// total size: 0x20 +struct SavedTimerInfo { + float mInterval; // offset 0x0, size 0x4 + bool mRunning; // offset 0x4, size 0x1 + float mElapsed; // offset 0x8, size 0x4 + char mName[20]; // offset 0xC, size 0x14 +}; + // total size: 0x24 class GEventTimer { public: - // bool IsRunning() const {} - - // float GetInterval() const {} - - // unsigned int GetNameHash() const {} - - // const char *GetName() const {} - - // float GetElapsed() const {} + bool IsRunning() const { return mRunning; } + float GetInterval() const { return mInterval; } + unsigned int GetNameHash() const { return mNameHash; } + const char *GetName() const { return mName; } + float GetElapsed() const { return mElapsed; } GEventTimer(); ~GEventTimer(); @@ -43,8 +47,11 @@ class GEventTimer { void Reset(); void Start(); void Stop(); + void SetName(const char *name); void SetInterval(float value); void Update(float dT); + void Serialize(struct SavedTimerInfo *saveInfo); + void Deserialize(struct SavedTimerInfo *saveInfo); private: float mInterval; // offset 0x0, size 0x4 From 991045502b890e5a3a790452d0a64db81c3d718d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Tue, 17 Mar 2026 23:59:19 +0100 Subject: [PATCH 258/691] 42.7%: add GManager object state helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 71 +++++++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GManager.h | 2 + 2 files changed, 73 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 4e1c19093..8d8db82e3 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1034,6 +1034,77 @@ void GManager::LoadMilestoneInfo(MilestoneTypeInfo *savedInfo, unsigned int coun } } +ObjectStateBlockHeader *GManager::AllocObjectStateBlock(unsigned int key, unsigned int size, bool persistent) { + ObjectStateMap &blocks = persistent ? mPersistentStateBlocks : mSessionStateBlocks; + unsigned int shiftedKey = key >> mCollectionKeyShiftTo32; + ObjectStateMap::iterator it = blocks.find(shiftedKey); + unsigned int blockSize; + unsigned int tryCount; + ObjectStateBlockHeader *block; + + if (it != blocks.end()) { + block = it->second; + if (size <= block->mSize) { + block->mSize = size; + return block; + } + + ClearObjectStateBlock(key); + } + + blockSize = (size + 0x17U) & ~0xFU; + for (tryCount = 0; tryCount < 2; ++tryCount) { + if (mObjectStateBufferSize >= static_cast(mObjectStateBufferFree - mObjectStateBuffer) + blockSize) { + break; + } + + if (tryCount != 0) { + return nullptr; + } + + DefragObjectStateStorage(); + } + + block = reinterpret_cast(mObjectStateBufferFree); + mObjectStateBufferFree += blockSize; + if (persistent) { + bMemSet(block, 0, blockSize); + } + + block->mKey = key; + block->mSize = size; + blocks[shiftedKey] = block; + return block; +} + +void *GManager::GetObjectStateBlock(unsigned int key) { + unsigned int shiftedKey = key >> mCollectionKeyShiftTo32; + ObjectStateMap::iterator it = mSessionStateBlocks.find(shiftedKey); + + if (it == mSessionStateBlocks.end()) { + it = mPersistentStateBlocks.find(shiftedKey); + if (it == mPersistentStateBlocks.end()) { + return nullptr; + } + } + + return it->second + 1; +} + +void GManager::ClearObjectStateBlock(unsigned int key) { + unsigned int shiftedKey = key >> mCollectionKeyShiftTo32; + ObjectStateMap::iterator it = mSessionStateBlocks.find(shiftedKey); + + if (it != mSessionStateBlocks.end()) { + mSessionStateBlocks.erase(it); + } + + it = mPersistentStateBlocks.find(shiftedKey); + if (it != mPersistentStateBlocks.end()) { + mPersistentStateBlocks.erase(it); + } +} + unsigned int GManager::SaveMilestoneInfo(MilestoneTypeInfo *dest) { MilestoneInfoMap::iterator it; diff --git a/src/Speed/Indep/Src/Gameplay/GManager.h b/src/Speed/Indep/Src/Gameplay/GManager.h index 310cfb53a..ceaa95f19 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.h +++ b/src/Speed/Indep/Src/Gameplay/GManager.h @@ -192,6 +192,8 @@ class GManager : public UTL::COM::Object, public IVehicleCache { void LoadTimerInfo(struct SavedTimerInfo *saveInfo, unsigned int count); bool SaveGameplayData(unsigned char *dest, unsigned int maxSize); bool LoadGameplayData(unsigned char *src, unsigned int maxSize); + void *GetObjectStateBlock(unsigned int key); + void ClearObjectStateBlock(unsigned int key); unsigned int SaveSMSInfo(int *saveInfo); void LoadSMSInfo(int *loadInfo, unsigned int count); From ca858c131259867be1e614e8d905075caf05e70d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 00:00:56 +0100 Subject: [PATCH 259/691] 43.1%: add GManager icon and character loops Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 61 +++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 8d8db82e3..a3675da99 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -321,6 +321,27 @@ void GManager::ClearAllSessionData() { DefragObjectStateStorage(); } +void GManager::ServicePendingCharacters() { + for (GCharacterList::iterator it = mActiveCharacters.begin(); it != mActiveCharacters.end(); ++it) { + GCharacter *character = *it; + + if (character->SpawnPending() && character->AttemptSpawn()) { + return; + } + } +} + +void GManager::UnspawnUselessCharacters() { + for (GCharacterList::iterator it = mActiveCharacters.begin(); it != mActiveCharacters.end(); ++it) { + GCharacter *character = *it; + + if (character->IsNoLongerUseful()) { + character->Unspawn(); + return; + } + } +} + void GManager::EndGameplay() { UnspawnAllCharacters(); ClearStockCars(); @@ -1220,6 +1241,46 @@ void GManager::NotifyCollisionPackLoaded(int sectionID, bool loaded) { } } +void GManager::SpawnSectionIcons(int section) { + for (unsigned int i = 0; i < mNumIcons; ++i) { + GIcon *icon = mIcons[i]; + + if (icon->GetSectionID() < 0) { + icon->FindSection(); + } + + if (icon->GetSectionID() == section || icon->GetCombinedSectionID() == section) { + icon->Spawn(); + } + } +} + +void GManager::UnspawnSectionIcons(int section) { + for (unsigned int i = 0; i < mNumIcons; ++i) { + GIcon *icon = mIcons[i]; + + if (icon->GetSectionID() < 0) { + icon->FindSection(); + } + + if (icon->GetSectionID() == section || icon->GetCombinedSectionID() == section) { + icon->Unspawn(); + } + } +} + +void GManager::UnspawnAllIcons() { + for (unsigned int i = 0; i < mNumIcons; ++i) { + mIcons[i]->Unspawn(); + } +} + +void GManager::FreeAllIcons() { + while (mNumIcons != 0) { + FreeIconAt(0); + } +} + unsigned int GManager::GetBountySpawnMarker(unsigned int index) const { if (index >= mNumBountySpawnPoints) { return 0; From 4e90452d8370497107f282958a77eb8d4d9610a3 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 00:03:51 +0100 Subject: [PATCH 260/691] 43.5%: add GManager icon visibility helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 57 +++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index a3675da99..aec5a9403 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -11,6 +11,7 @@ #include "Speed/Indep/Src/Misc/Platform.h" #include "Speed/Indep/Src/World/TrackPath.hpp" #include "Speed/Indep/Src/World/TrackPositionMarker.hpp" +#include "Speed/Indep/Src/World/TrackStreamer.hpp" #include "Speed/Indep/Src/World/WCollisionAssets.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribLoadAndGo.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" @@ -1275,6 +1276,62 @@ void GManager::UnspawnAllIcons() { } } +bool GManager::GetIsIconVisible(GIcon *icon) { + for (unsigned int i = 0; i < mNumVisibleIcons; ++i) { + if (mIcons[i] == icon) { + return true; + } + } + + return false; +} + +void GManager::SpawnAllLoadedSectionIcons() { + for (unsigned int i = 0; i < mNumIcons; ++i) { + GIcon *icon = mIcons[i]; + + icon->FindSection(); + if (icon->GetSectionID() >= 0) { + if (TheTrackStreamer.IsSectionVisible(icon->GetSectionID()) || + TheTrackStreamer.IsSectionVisible(icon->GetCombinedSectionID())) { + icon->Spawn(); + } + } + } +} + +void GManager::RestorePursuitBreakerIcons(int sectionID) { + for (unsigned int i = 0; i < mNumIcons; ++i) { + GIcon *icon = mIcons[i]; + + if (icon->GetType() == GIcon::kType_PursuitBreaker && + (sectionID == -1 || sectionID == icon->GetSectionID() || sectionID == icon->GetCombinedSectionID())) { + icon->SetFlag(1); + } + } +} + +void GManager::FreeDisposableIcons(GIcon::Type iconType) { + for (unsigned int i = 0; i < mNumIcons;) { + GIcon *icon = mIcons[i]; + + if (icon->GetIsDisposable() && icon->GetType() == iconType) { + FreeIconAt(i); + } else { + ++i; + } + } +} + +void GManager::FreeIcon(GIcon *icon) { + for (unsigned int i = 0; i < mNumIcons; ++i) { + if (mIcons[i] == icon) { + FreeIconAt(i); + return; + } + } +} + void GManager::FreeAllIcons() { while (mNumIcons != 0) { FreeIconAt(0); From b97a1272ed3c5ab536b2dbb9d647a2ec3269c7f9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 00:08:58 +0100 Subject: [PATCH 261/691] 43.9%: add GManager trigger visibility flow Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 114 ++++++++++++++++++++++ 1 file changed, 114 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index aec5a9403..82b76653b 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -6,6 +6,7 @@ #include "Speed/Indep/Src/Generated/Messages/MEnteringGameplay.h" #include "Speed/Indep/Src/Gameplay/GMarker.h" #include "Speed/Indep/Src/Gameplay/GVault.h" +#include "Speed/Indep/Src/Interfaces/SimActivities/INIS.h" #include "Speed/Indep/Src/Interfaces/Simables/IAI.h" #include "Speed/Indep/Src/Misc/LZCompress.hpp" #include "Speed/Indep/Src/Misc/Platform.h" @@ -23,6 +24,7 @@ #include extern int SkipFE; +extern int TWEAK_ShowAllGameplayIcons; char *bStrIStr(const char *s1, const char *s2); void bCloseMemoryPool(int pool_num); @@ -1375,6 +1377,43 @@ void GManager::RefreshZoneIcons() { } } +void GManager::RefreshWorldParticleEffects() { + for (unsigned int i = 0; i < mInstanceHashTableSize; ++i) { + GRuntimeInstance *instance = mKeyToInstanceMap[i].mInstance; + + if (instance && instance->GetType() == kGameplayObjType_Trigger) { + static_cast(instance)->RefreshParticleEffects(); + } + } + + for (unsigned int i = 0; i < mNumIcons; ++i) { + mIcons[i]->RefreshEffects(); + } +} + +void GManager::RefreshEngageTriggerIcons() { + for (unsigned int i = 0; i < mInstanceHashTableSize; ++i) { + GRuntimeInstance *instance = mKeyToInstanceMap[i].mInstance; + + if (instance && instance->GetType() == kGameplayObjType_Trigger) { + GTrigger *trigger = static_cast(instance); + GActivity *activity = trigger->GetTargetActivity(); + + if (activity) { + GRaceParameters *race = GRaceDatabase::Get().GetRaceFromActivity(activity); + + if (race) { + if (!race->GetIsAvailable(GRace::kRaceContext_Career)) { + trigger->HideIcon(); + } else { + trigger->ShowIcon(); + } + } + } + } + } +} + bool GManager::AddIconForTrackMarker(TrackPositionMarker *marker, unsigned int tag) { if (marker->NameHash == tag) { UMath::Vector3 pos; @@ -1829,6 +1868,81 @@ void GManager::UpdatePursuit() { mPursuitBreakerIconsShown = (roaming || challengeRace) && pursuit && !cooldown; } +void GManager::UpdateTriggerAvailability() { + IPursuit *pursuit; + IPerpetrator *perpetrator; + bool roaming; + bool cooldown; + bool inPursuit; + + pursuit = nullptr; + perpetrator = nullptr; + roaming = GRaceStatus::Get().GetPlayMode() == GRaceStatus::kPlayMode_Roaming; + GetPlayerPursuitInterfaces(pursuit, perpetrator); + + cooldown = false; + inPursuit = pursuit != nullptr; + if (inPursuit) { + cooldown = pursuit->GetPursuitStatus() == 2; + } + + mAllowMenuGates = roaming && !inPursuit; + mAllowEngageEvents = roaming && !inPursuit; + mAllowEngageSafehouse = roaming && (!inPursuit || cooldown); +} + +void GManager::UpdateIconVisibility() { + bool visible[GIcon::kType_Count]; + + mEventIconsShown = mAllowEngageEvents; + mMenuGateIconsShown = mAllowMenuGates; + mSpeedTrapIconsShown = mAllowEngageEvents; + mSpeedTrapRaceIconsShown = + GRaceStatus::Exists() && GRaceStatus::Get().GetRaceParameters() && + GRaceStatus::Get().GetRaceParameters()->GetRaceType() == GRace::kRaceType_SpeedTrap; + + for (unsigned int i = 0; i < GIcon::kType_Count; ++i) { + visible[i] = TWEAK_ShowAllGameplayIcons != 0; + } + + if (!TWEAK_ShowAllGameplayIcons && !INIS::Exists()) { + visible[GIcon::kType_RaceSprint] = mEventIconsShown; + visible[GIcon::kType_RaceCircuit] = mEventIconsShown; + visible[GIcon::kType_RaceDrag] = mEventIconsShown; + visible[GIcon::kType_RaceKnockout] = mEventIconsShown; + visible[GIcon::kType_RaceTollbooth] = mEventIconsShown; + visible[GIcon::kType_RaceSpeedtrap] = mEventIconsShown; + visible[GIcon::kType_RaceRival] = mEventIconsShown; + visible[GIcon::kType_GateSafehouse] = mAllowEngageSafehouse; + visible[GIcon::kType_GateCarLot] = mMenuGateIconsShown; + visible[GIcon::kType_GateCustomShop] = mMenuGateIconsShown; + visible[GIcon::kType_HidingSpot] = mHidingSpotIconsShown; + visible[GIcon::kType_PursuitBreaker] = mPursuitBreakerIconsShown; + visible[GIcon::kType_SpeedTrap] = mSpeedTrapIconsShown; + visible[GIcon::kType_SpeedTrapInRace] = mSpeedTrapRaceIconsShown; + visible[GIcon::kType_AreaUnlock] = true; + } + + mNumVisibleIcons = 0; + for (unsigned int i = 0; i < mNumIcons; ++i) { + GIcon *icon = mIcons[i]; + bool shouldShow = icon->IsFlagSet(1) && visible[icon->GetType()]; + + if (shouldShow) { + if (icon->IsFlagClear(8)) { + icon->Enable(); + } + + GIcon *swap = mIcons[mNumVisibleIcons]; + mIcons[mNumVisibleIcons] = mIcons[i]; + mIcons[i] = swap; + mNumVisibleIcons++; + } else if (icon->IsFlagSet(8)) { + icon->Disable(); + } + } +} + bool GManager::CalcMapCoordsForMarker(unsigned int markerKey, bVector2 &outPos, float &outRotDeg) { GMarker *marker; UMath::Vector3 pos; From 51c26384fefa4e663e19b29d5e2c7482abda090c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 00:11:17 +0100 Subject: [PATCH 262/691] 90.2%: improve CameraAnchor::GetPov Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Camera/CameraMover.cpp | 34 +++++++++------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/src/Speed/Indep/Src/Camera/CameraMover.cpp b/src/Speed/Indep/Src/Camera/CameraMover.cpp index 86b932a29..271b2f29b 100644 --- a/src/Speed/Indep/Src/Camera/CameraMover.cpp +++ b/src/Speed/Indep/Src/Camera/CameraMover.cpp @@ -254,45 +254,41 @@ void CameraAnchor::SetModel(int model) { } POV *CameraAnchor::GetPov(int pov_type) { - unsigned int attrib_key; + const Attrib::RefSpec *refspec; mPOV.Type = static_cast(pov_type); switch (pov_type) { case 0: - attrib_key = 0x585517f3; + refspec = reinterpret_cast(mModelAttributes.GetAttributePointer(0x585517f3, 0)); break; case 1: - attrib_key = 0xd74c1435; + refspec = reinterpret_cast(mModelAttributes.GetAttributePointer(0xd74c1435, 0)); break; case 2: - attrib_key = 0x0c2da793; + refspec = reinterpret_cast(mModelAttributes.GetAttributePointer(0x0c2da793, 0)); break; case 3: - attrib_key = 0xccf03cb3; + refspec = reinterpret_cast(mModelAttributes.GetAttributePointer(0xccf03cb3, 0)); break; case 4: - attrib_key = 0x10204a90; + refspec = reinterpret_cast(mModelAttributes.GetAttributePointer(0x10204a90, 0)); break; case 5: - attrib_key = 0x4b675dc8; + refspec = reinterpret_cast(mModelAttributes.GetAttributePointer(0x4b675dc8, 0)); break; case 6: - attrib_key = 0xd76a6fad; + refspec = reinterpret_cast(mModelAttributes.GetAttributePointer(0xd76a6fad, 0)); break; default: goto default_case; } - { - const Attrib::RefSpec *refspec = reinterpret_cast(mModelAttributes.GetAttributePointer(attrib_key, 0)); - - if (!refspec) { - refspec = reinterpret_cast(Attrib::DefaultDataArea(sizeof(Attrib::RefSpec))); - } - - mCameraInfoAttributes.ChangeWithDefault(*refspec); + if (!refspec) { + refspec = reinterpret_cast(Attrib::DefaultDataArea(sizeof(Attrib::RefSpec))); } + + mCameraInfoAttributes.ChangeWithDefault(*refspec); goto after_camerainfo; default_case: @@ -301,10 +297,8 @@ POV *CameraAnchor::GetPov(int pov_type) { after_camerainfo: { - float zoom; - if (mZoom > 1.0f) { - zoom = mZoom; - } else { + float zoom = mZoom; + if (zoom < 1.0f) { zoom = 1.0f; } unsigned int index = eGetCurrentViewMode() == 3; From edd680860818f3f62de54a27a57c2598f3ebd74f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 00:11:38 +0100 Subject: [PATCH 263/691] 44.2%: add GManager icon allocation helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 46 +++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 82b76653b..98eebf981 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1414,6 +1414,52 @@ void GManager::RefreshEngageTriggerIcons() { } } +GIcon *GManager::AllocIcon(GIcon::Type iconType, const UMath::Vector3 &pos, float rotDeg, bool disposable) { + GIcon *icon = nullptr; + + if (mNumIcons < 200) { + icon = new GIcon(iconType, pos, rotDeg); + if (icon) { + mIcons[mNumIcons++] = icon; + if (disposable) { + icon->MarkDisposable(); + } + } + } + + return icon; +} + +void GManager::FreeIconAt(unsigned int index) { + if (mNumIcons == 0) { + return; + } + + GIcon *icon = mIcons[index]; + if (icon) { + icon->ClearGPSing(); + delete icon; + mIcons[index] = nullptr; + } + + if (index + 1 < mNumIcons) { + if (index + 1 < mNumVisibleIcons) { + mIcons[index] = mIcons[mNumVisibleIcons - 1]; + if (mNumVisibleIcons < mNumIcons) { + mIcons[mNumVisibleIcons - 1] = mIcons[mNumIcons - 1]; + } + } else { + mIcons[index] = mIcons[mNumIcons - 1]; + } + } + + if (index < mNumVisibleIcons) { + mNumVisibleIcons--; + } + + mNumIcons--; +} + bool GManager::AddIconForTrackMarker(TrackPositionMarker *marker, unsigned int tag) { if (marker->NameHash == tag) { UMath::Vector3 pos; From e301ac51ef08b721e7ccbe86abbf535a42575947 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 00:15:50 +0100 Subject: [PATCH 264/691] 44.8%: add GManager pursuit and bin helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 61 +++++++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GManager.h | 1 + 2 files changed, 62 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 98eebf981..4d3a6e98f 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -6,6 +6,7 @@ #include "Speed/Indep/Src/Generated/Messages/MEnteringGameplay.h" #include "Speed/Indep/Src/Gameplay/GMarker.h" #include "Speed/Indep/Src/Gameplay/GVault.h" +#include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" #include "Speed/Indep/Src/Interfaces/SimActivities/INIS.h" #include "Speed/Indep/Src/Interfaces/Simables/IAI.h" #include "Speed/Indep/Src/Misc/LZCompress.hpp" @@ -1487,6 +1488,21 @@ void GManager::RefreshTrackMarkerIcons() { } } +void GManager::FindBountySpawnPoints() { + Attrib::Gen::gameplay gameplay(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), 0x3D48E303), 0, nullptr); + AttribKeyList keys; + AttribKeyList::iterator it; + + GatherInstanceKeys(gameplay, keys, 0xA7BCCF63); + mNumBountySpawnPoints = 0; + for (it = keys.begin(); it != keys.end(); ++it) { + mBountySpawnPoint[mNumBountySpawnPoints++] = *it; + if (mNumBountySpawnPoints > 0x13) { + break; + } + } +} + void GManager::RefreshSpeedTrapIcons() { for (GSpeedTrap *speedTrap = GetFirstSpeedTrap(false, 0); speedTrap; speedTrap = GetNextSpeedTrap(speedTrap, false, 0)) { @@ -1882,6 +1898,51 @@ void GManager::DefragObjectStateStorage() { mObjectStateBufferFree = freePtr; } +void GManager::GetPlayerPursuitInterfaces(IPursuit *&pursuit, IPerpetrator *&perpetrator) { + IPlayer *player = IPlayer::First(PLAYER_LOCAL); + ISimable *simable = player ? player->GetSimable() : nullptr; + IVehicleAI *vehicleAI = nullptr; + + if (simable) { + simable->QueryInterface(&vehicleAI); + } + + if (!vehicleAI) { + pursuit = nullptr; + } else { + pursuit = vehicleAI->GetPursuit(); + } + + perpetrator = nullptr; + if (simable) { + simable->QueryInterface(&perpetrator); + } +} + +void GManager::OnRemovedVehicleCache(IVehicle *ivehicle) { + for (StockCarMap::iterator it = mStockCars.begin(); it != mStockCars.end(); ++it) { + if (UTL::COM::ComparePtr(it->second, ivehicle)) { + mStockCars.erase(it); + return; + } + } +} + +void GManager::SuspendAllBinActivities() { + for (unsigned int i = 0; i < GRaceDatabase::Get().GetBinCount(); ++i) { + GRaceBin *bin = GRaceDatabase::Get().GetBin(i); + + if (bin) { + GActivity *activity = static_cast(FindInstance(bin->GetCollectionKey())); + + if (activity && activity->GetIsRunning()) { + activity->SerializeVars(false); + activity->Suspend(); + } + } + } +} + void GManager::UpdatePursuit() { IPursuit *pursuit; IPerpetrator *perpetrator; diff --git a/src/Speed/Indep/Src/Gameplay/GManager.h b/src/Speed/Indep/Src/Gameplay/GManager.h index ceaa95f19..b6fb5d4e8 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.h +++ b/src/Speed/Indep/Src/Gameplay/GManager.h @@ -70,6 +70,7 @@ class GManager : public UTL::COM::Object, public IVehicleCache { ~GManager() override; const char *GetCacheName() const override { return "GManager"; } + void OnRemovedVehicleCache(IVehicle *ivehicle) override; void InitializeVaults(); void InitializeRaceStreaming(); From 32027ace8ac9d5dccedccb7b5b6c308e45ecfdbd Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 00:24:04 +0100 Subject: [PATCH 265/691] 45.7%: add initial GIcon runtime Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GIcon.cpp | 210 +++++++++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GIcon.h | 134 ++++++++++++++++ 2 files changed, 344 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GIcon.cpp b/src/Speed/Indep/Src/Gameplay/GIcon.cpp index e69de29bb..349526003 100644 --- a/src/Speed/Indep/Src/Gameplay/GIcon.cpp +++ b/src/Speed/Indep/Src/Gameplay/GIcon.cpp @@ -0,0 +1,210 @@ +#include "Speed/Indep/Src/Gameplay/GIcon.h" + +#include "Speed/Indep/Src/Ecstasy/EmitterSystem.h" +#include "Speed/Indep/Src/Ecstasy/eMath.hpp" +#include "Speed/Indep/Src/World/VisibleSection.hpp" +#include "Speed/Indep/Src/World/WCollisionMgr.h" +#include "Speed/Indep/Src/World/WorldModel.hpp" + +static int sNumSpawned; + +GIcon::EffectInfo GIcon::kEffectInfo[GIcon::kType_Count] = { + {0, 0, 0}, + {0, 0, 0}, + {0, 0, 0}, + {0, 0, 0}, + {0, 0, 0}, + {0, 0, 0}, + {0, 0, 0}, + {0, 0, 0}, + {0, 0, 0}, + {0, 0, 0}, + {0, 0, 0}, + {0, 0, 0}, + {0, 0, 0}, + {0, 0, 0}, + {0, 0, 0}, + {0, 0, 0}, + {0, 0, 0}, +}; + +GIcon::GIcon(Type type, const UMath::Vector3 &pos, float rotDeg) + : mType(type), // + mFlags(0), // + mSectionID(-1), // + mCombSectionID(-1), // + mModel(nullptr), // + mEmitter(nullptr), // + mPosition(pos), // + mRotation(bDegToAng(rotDeg)), + mPad(0) { + FindSection(); +} + +GIcon::~GIcon() { + Unspawn(); +} + +void GIcon::Spawn() { + EffectInfo *info = &kEffectInfo[mType]; + + if (mType == kType_HidingSpot) { + SnapToGround(); + } + + if (!mModel && info->mModelHash) { + mModel = CreateGeometry(info->mModelHash); + } + + if (!mEmitter && info->mParticleHash) { + mEmitter = CreateParticleEffect(info->mParticleHash); + } + + if (IsFlagClear(kFlag_Spawned)) { + sNumSpawned++; + } + + SetFlag(kFlag_Spawned); + if (IsFlagSet(kFlag_ShowWhenSpawned)) { + Show(); + ClearFlag(kFlag_ShowWhenSpawned); + } +} + +void GIcon::Unspawn() { + if (IsFlagSet(kFlag_Spawned)) { + ReleaseParticleEffect(); + ReleaseGeometry(); + ClearFlag(kFlag_Spawned); + sNumSpawned--; + } +} + +void GIcon::FindSection() { + bVector2 pos2D(mPosition.x, mPosition.z); + DrivableScenerySection *drivable = TheVisibleSectionManager.FindDrivableSection(&pos2D); + + if (drivable) { + mSectionID = drivable->SectionNumber; + mCombSectionID = drivable->SectionNumber; + } else { + mSectionID = -1; + mCombSectionID = -1; + } +} + +void GIcon::SnapToGround() { + UMath::Vector3 posSwiz = mPosition; + float worldHeight; + bool heightValid; + + if (IsFlagSet(kFlag_Snapped)) { + return; + } + + heightValid = WCollisionMgr(0, 3).GetWorldHeightAtPointRigorous(posSwiz, worldHeight, nullptr); + if (heightValid) { + mPosition.y = worldHeight; + SetFlag(kFlag_Snapped); + } +} + +void GIcon::NotifyEmitterGroupDelete(void *obj, EmitterGroup *group) { + GIcon *icon = reinterpret_cast(obj); + + if (icon && icon->mEmitter == group) { + icon->mEmitter = nullptr; + } +} + +EmitterGroup *GIcon::CreateParticleEffect(unsigned int particleHash) { + EmitterGroup *effect = gEmitterSystem.CreateEmitterGroup(static_cast(particleHash), 0x8040000); + + if (effect) { + effect->SetAutoUpdate(true); + effect->SubscribeToDeletion(this, NotifyEmitterGroupDelete); + effect->Disable(); + gEmitterSystem.AddEmitterGroup(effect); + mEmitter = effect; + SetPosition(); + } + + return effect; +} + +void GIcon::ReleaseParticleEffect() { + if (mEmitter) { + delete mEmitter; + mEmitter = nullptr; + } +} + +void GIcon::RefreshEffects() { + bool shouldBeEnabled = GetIsEnabled() && GetVisibleInWorld(); + + if (mEmitter) { + if (shouldBeEnabled) { + mEmitter->Enable(); + } else { + mEmitter->Disable(); + } + } +} + +WorldModel *GIcon::CreateGeometry(unsigned int modelHash) { + WorldModel *model = new WorldModel(modelHash, nullptr, true); + + if (model) { + model->SetEnabledFlag(false); + mModel = model; + SetPosition(); + } + + return model; +} + +void GIcon::ReleaseGeometry() { + if (mModel) { + delete mModel; + mModel = nullptr; + } +} + +void GIcon::SetPosition() { + if (IsFlagSet(kFlag_Spawned)) { + bMatrix4 mat; + + bIdentity(&mat); + eRotateZ(&mat, &mat, mRotation); + mat.v3 = bVector4(mPosition.x, mPosition.y, mPosition.z, 1.0f); + + if (mModel) { + mModel->SetMatrix(&mat); + if (IsFlagClear(kFlag_Enabled)) { + mModel->SetEnabledFlag(false); + } + } + + if (mEmitter) { + mEmitter->SetLocalWorld(&mat); + } + } +} + +void GIcon::Enable() { + if (!IsFlagSet(kFlag_Enabled)) { + if (mModel) { + mModel->SetEnabledFlag(GetVisibleInWorld()); + } + RefreshEffects(); + SetFlag(kFlag_Enabled); + } +} + +void GIcon::Disable() { + if (mModel) { + mModel->SetEnabledFlag(false); + } + RefreshEffects(); + ClearFlag(kFlag_Enabled); +} diff --git a/src/Speed/Indep/Src/Gameplay/GIcon.h b/src/Speed/Indep/Src/Gameplay/GIcon.h index 728e0c897..2650d8e44 100644 --- a/src/Speed/Indep/Src/Gameplay/GIcon.h +++ b/src/Speed/Indep/Src/Gameplay/GIcon.h @@ -7,6 +7,8 @@ #include "Speed/Indep/Libs/Support/Utility/UMath.h" +#include + struct EmitterGroup; struct WorldModel; struct bVector2; @@ -92,6 +94,17 @@ struct GIcon { static EffectInfo kEffectInfo[]; private: + enum Flags { + kFlag_VisibleInWorld = 0x1, + kFlag_VisibleOnMap = 0x2, + kFlag_Spawned = 0x4, + kFlag_Enabled = 0x8, + kFlag_Disposable = 0x10, + kFlag_Snapped = 0x20, + kFlag_ShowWhenSpawned = 0x40, + kFlag_GPSing = 0x80, + }; + unsigned short mType; // offset 0x0, size 0x2 unsigned short mFlags; // offset 0x2, size 0x2 short mSectionID; // offset 0x4, size 0x2 @@ -103,4 +116,125 @@ struct GIcon { unsigned short mPad; // offset 0x1E, size 0x2 }; +inline void GIcon::Show() { + SetFlag(kFlag_VisibleInWorld); + if (GetIsEnabled()) { + Enable(); + } +} + +inline void GIcon::Hide() { + ClearFlag(kFlag_VisibleInWorld); + Disable(); +} + +inline void GIcon::HideUntilRespawn() { + if (IsFlagSet(kFlag_Spawned)) { + Hide(); + } else { + SetFlag(kFlag_ShowWhenSpawned); + } +} + +inline void GIcon::ShowOnMap() { + SetFlag(kFlag_VisibleOnMap); +} + +inline void GIcon::HideOnMap() { + ClearFlag(kFlag_VisibleOnMap); +} + +inline void GIcon::SetGPSing() { + SetFlag(kFlag_GPSing); +} + +inline void GIcon::ClearGPSing() { + ClearFlag(kFlag_GPSing); +} + +inline GIcon::Type GIcon::GetType() const { + return static_cast(mType); +} + +inline int GIcon::GetSectionID() const { + return mSectionID; +} + +inline int GIcon::GetCombinedSectionID() const { + return mCombSectionID; +} + +inline bool GIcon::GetVisibleInWorld() const { + return IsFlagSet(kFlag_VisibleInWorld); +} + +inline bool GIcon::GetVisibleOnMap() const { + return IsFlagSet(kFlag_VisibleOnMap); +} + +inline bool GIcon::GetIsDisposable() const { + return IsFlagSet(kFlag_Disposable); +} + +inline bool GIcon::GetIsSnapped() const { + return IsFlagSet(kFlag_Snapped); +} + +inline bool GIcon::GetIsGPSing() const { + return IsFlagSet(kFlag_GPSing); +} + +inline const UMath::Vector3 &GIcon::GetPosition() const { + return mPosition; +} + +inline void GIcon::GetPosition2D(bVector2 &outPos) { + outPos.x = mPosition.x; + outPos.y = mPosition.z; +} + +inline void *GIcon::operator new(unsigned int size) { + return ::operator new(size); +} + +inline void GIcon::operator delete(void *mem, unsigned int) { + ::operator delete(mem); +} + +inline void *GIcon::operator new(unsigned int size, const char *) { + return ::operator new(size); +} + +inline void GIcon::operator delete(void *mem, const char *) { + ::operator delete(mem); +} + +inline void GIcon::operator delete(void *mem, unsigned int, const char *) { + ::operator delete(mem); +} + +inline void GIcon::MarkDisposable() { + SetFlag(kFlag_Disposable); +} + +inline bool GIcon::GetIsEnabled() const { + return IsFlagSet(kFlag_Enabled); +} + +inline void GIcon::SetFlag(unsigned int mask) { + mFlags = static_cast(mFlags | mask); +} + +inline void GIcon::ClearFlag(unsigned int mask) { + mFlags = static_cast(mFlags & ~mask); +} + +inline bool GIcon::IsFlagSet(unsigned int mask) const { + return (mFlags & mask) != 0; +} + +inline bool GIcon::IsFlagClear(unsigned int mask) const { + return (mFlags & mask) == 0; +} + #endif From b5355041f3db57d72bbf30d31ac73a5edcfeebf4 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 00:27:33 +0100 Subject: [PATCH 266/691] 46.1%: add gameplay warp and respawn helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 73 +++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 4d3a6e98f..3f8bc46b1 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -3,6 +3,7 @@ #include "Speed/Indep/Libs/Support/Utility/FastMem.h" #include "Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h" #include "Speed/Indep/Src/Generated/Events/EAutoSave.hpp" +#include "Speed/Indep/Src/Generated/Events/EFadeScreenOn.hpp" #include "Speed/Indep/Src/Generated/Messages/MEnteringGameplay.h" #include "Speed/Indep/Src/Gameplay/GMarker.h" #include "Speed/Indep/Src/Gameplay/GVault.h" @@ -11,7 +12,9 @@ #include "Speed/Indep/Src/Interfaces/Simables/IAI.h" #include "Speed/Indep/Src/Misc/LZCompress.hpp" #include "Speed/Indep/Src/Misc/Platform.h" +#include "Speed/Indep/Src/Sim/Simulation.h" #include "Speed/Indep/Src/World/TrackPath.hpp" +#include "Speed/Indep/Src/World/TrackInfo.hpp" #include "Speed/Indep/Src/World/TrackPositionMarker.hpp" #include "Speed/Indep/Src/World/TrackStreamer.hpp" #include "Speed/Indep/Src/World/WCollisionAssets.h" @@ -19,6 +22,7 @@ #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" #include "Speed/Indep/Tools/AttribSys/Runtime/Common/AttribPrivate.h" #include "Speed/Indep/bWare/Inc/bWare.hpp" +#include "Speed/Indep/bWare/Inc/bPrintf.hpp" #include "Speed/Indep/bWare/Inc/Strings.hpp" #include @@ -2087,3 +2091,72 @@ void GManager::ResetAllGameplayData() { mFreeRoamFromSafeHouseStartMarker = 0; mPendingSMS.clear(); } + +bool GManager::WarpToMarker(unsigned int markerKey, bool startPursuit) { + if (GRaceStatus::Exists() && GRaceStatus::Get().GetPlayMode() == GRaceStatus::kPlayMode_Racing) { + return false; + } + + if (mWarping) { + return false; + } + + GMarker *marker = static_cast(FindInstance(markerKey)); + if (!marker) { + return false; + } + + new EFadeScreenOn(false); + Sim::SetStream(const_cast(marker->GetPosition()), false); + + IPlayer *player = IPlayer::First(PLAYER_LOCAL); + ISimable *simable = player ? player->GetSimable() : nullptr; + IVehicle *vehicle = nullptr; + + if (simable) { + simable->QueryInterface(&vehicle); + } + + if (vehicle) { + vehicle->SetVehicleOnGround(marker->GetPosition(), marker->GetDirection()); + } + + mWarpStartPursuit = startPursuit; + mWarping = true; + mWarpTargetMarker = markerKey; + return true; +} + +unsigned int GManager::GetRespawnMarker() { + unsigned int markerKey = mOverrideFreeRoamStartMarker; + const Attrib::Collection *collection = Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), markerKey); + + if (!collection) { + markerKey = mStartFreeRoamFromSafeHouse ? mFreeRoamFromSafeHouseStartMarker : mFreeRoamStartMarker; + collection = Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), markerKey); + + if (!collection) { + char markerName[32]; + + bSPrintf(markerName, "career_start_%s", LoadedTrackInfo->GetLoadedTrackInfo()); + markerKey = Attrib::StringToLowerCaseKey(markerName); + mFreeRoamStartMarker = markerKey; + } + } + + return markerKey; +} + +void GManager::GetRespawnLocation(UMath::Vector3 &startLoc, UMath::Vector3 &initialVec) { + Attrib::Gen::gameplay gameplayObj(GetRespawnMarker(), 0, nullptr); + UMath::Vector3 position = gameplayObj.Position(0); + UMath::Matrix4 rotMat; + UMath::Vector3 forward = {0.0f, 0.0f, 1.0f}; + + startLoc.x = -position.y; + startLoc.y = position.z; + startLoc.z = position.x; + + UMath::MultYRot(UMath::Matrix4::kIdentity, -gameplayObj.Rotation(0) * 0.00069444446f, rotMat); + VU0_MATRIX3x4_vect3mult(forward, rotMat, initialVec); +} From 80df004796b6ca9b25d64be548945ab9b4377cfb Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 00:56:02 +0100 Subject: [PATCH 267/691] fix: link shared assets and track agent skills symlinks --- .agents/skills/code_style | 1 + .agents/skills/execute | 1 + .agents/skills/ghidra | 1 + .agents/skills/implement | 1 + .agents/skills/line_lookup | 1 + .agents/skills/lookup | 1 + .agents/skills/refiner | 1 + .agents/skills/scaffold | 1 + 8 files changed, 8 insertions(+) create mode 120000 .agents/skills/code_style create mode 120000 .agents/skills/execute create mode 120000 .agents/skills/ghidra create mode 120000 .agents/skills/implement create mode 120000 .agents/skills/line_lookup create mode 120000 .agents/skills/lookup create mode 120000 .agents/skills/refiner create mode 120000 .agents/skills/scaffold diff --git a/.agents/skills/code_style b/.agents/skills/code_style new file mode 120000 index 000000000..edb444fb7 --- /dev/null +++ b/.agents/skills/code_style @@ -0,0 +1 @@ +../../.github/skills/code_style \ No newline at end of file diff --git a/.agents/skills/execute b/.agents/skills/execute new file mode 120000 index 000000000..ff61f8ce2 --- /dev/null +++ b/.agents/skills/execute @@ -0,0 +1 @@ +../../.github/skills/execute \ No newline at end of file diff --git a/.agents/skills/ghidra b/.agents/skills/ghidra new file mode 120000 index 000000000..e348149ed --- /dev/null +++ b/.agents/skills/ghidra @@ -0,0 +1 @@ +../../.github/skills/ghidra \ No newline at end of file diff --git a/.agents/skills/implement b/.agents/skills/implement new file mode 120000 index 000000000..609ac0075 --- /dev/null +++ b/.agents/skills/implement @@ -0,0 +1 @@ +../../.github/skills/implement \ No newline at end of file diff --git a/.agents/skills/line_lookup b/.agents/skills/line_lookup new file mode 120000 index 000000000..98bcd185e --- /dev/null +++ b/.agents/skills/line_lookup @@ -0,0 +1 @@ +../../.github/skills/line_lookup \ No newline at end of file diff --git a/.agents/skills/lookup b/.agents/skills/lookup new file mode 120000 index 000000000..e0466a56a --- /dev/null +++ b/.agents/skills/lookup @@ -0,0 +1 @@ +../../.github/skills/lookup \ No newline at end of file diff --git a/.agents/skills/refiner b/.agents/skills/refiner new file mode 120000 index 000000000..d61e56ea1 --- /dev/null +++ b/.agents/skills/refiner @@ -0,0 +1 @@ +../../.github/skills/refiner \ No newline at end of file diff --git a/.agents/skills/scaffold b/.agents/skills/scaffold new file mode 120000 index 000000000..5684eddc2 --- /dev/null +++ b/.agents/skills/scaffold @@ -0,0 +1 @@ +../../.github/skills/scaffold \ No newline at end of file From 7c5e41aceb7f7422f7954cd0568f7ca563f9acc0 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 01:12:16 +0100 Subject: [PATCH 268/691] 48.0%: add race status update bodies --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 250 +++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 18 ++ src/Speed/Indep/Src/World/TrackStreamer.hpp | 1 + 3 files changed, 269 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 51847ecaa..f2a161d76 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -4,11 +4,19 @@ #include "Speed/Indep/Src/Gameplay/GMarker.h" #include "Speed/Indep/Src/Gameplay/GObjectBlock.h" #include "Speed/Indep/Src/Gameplay/GVault.h" +#include "Speed/Indep/Src/Generated/Messages/MLoadingComplete.h" +#include "Speed/Indep/Src/Generated/Messages/MNotifyRaceTime.h" +#include "Speed/Indep/Src/Generated/Messages/MNotifyRaceTimeExpired.h" +#include "Speed/Indep/Src/Generated/Messages/MNotifyRaceTimeSecTick.h" +#include "Speed/Indep/Src/Interfaces/SimActivities/ICopMgr.h" +#include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" #include "Speed/Indep/Src/Interfaces/Simables/IAI.h" +#include "Speed/Indep/Src/Interfaces/Simables/IEngine.h" #include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" #include "Speed/Indep/Src/Main/AttribSupport.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" #include "Speed/Indep/Src/World/WRoadNetwork.h" +#include "Speed/Indep/Src/World/TrackStreamer.hpp" #include "Speed/Indep/bWare/Inc/bWare.hpp" #include "Speed/Indep/bWare/Inc/Strings.hpp" @@ -317,6 +325,131 @@ void GRacerInfo::ForceStartPosition(const UMath::Vector3 &pos, const UMath::Vect RestoreStartPosition(); } +void GRacerInfo::Update(float dT) { + ISimable *simable; + IVehicleAI *vehicleAI; + GRaceStatus &raceStatus = GRaceStatus::Get(); + IEngine *engine; + IPlayer *player; + UMath::Vector3 linearVelocity; + float speed; + float distance; + float raceLength; + + if (IsFinishedRacing() || GetIsEngineBlown() || GetIsTotalled() || GetIsKnockedOut()) { + return; + } + + simable = GetSimable(); + if (!simable) { + return; + } + + engine = nullptr; + if (simable->QueryInterface(&engine) && engine->IsNOSEngaged()) { + mPoundsNOSUsed += dT * engine->GetNOSFlowRate(); + } + + player = simable->GetPlayer(); + if (player && player->InGameBreaker()) { + mSpeedBreakerTime += dT; + } + + simable->GetLinearVelocity(linearVelocity); + speed = UMath::Length(linearVelocity); + if (mTopSpeed < speed) { + mTopSpeed = speed; + } + + distance = mDistanceDriven + speed * dT; + mTotalUpdateTime += dT; + mDistanceDriven = distance; + +#ifndef EA_BUILD_A124 + if (mQuarterMileTime == 0.0f) { + static const float quarterMileInMeters = 402.335f; + + if (quarterMileInMeters <= distance) { + mQuarterMileTime = GetRaceTime(); + } + } + + if (mZeroToSixtyTime == 0.0f) { + static const float sixtyMphInMetersPerSec = 26.8218f; + + if (sixtyMphInMetersPerSec <= mTopSpeed) { + mZeroToSixtyTime = GetRaceTime(); + } + } +#endif + + raceLength = raceStatus.GetRaceLength(); + vehicleAI = nullptr; + if (simable->QueryInterface(&vehicleAI)) { + mDistToNextCheckpoint = vehicleAI->GetPathDistanceRemaining(); + } else { + mDistToNextCheckpoint = 0.0f; + } + + if (raceLength > 0.0f) { + float raceDistanceCompleted = 0.0f; + int lapsCompleted = GetLapsCompleted(); + float lapDistanceCompleted = 0.0f; + int checkpointsCompleted = GetChecksHitThisLap(); + float distanceToNextCheckpoint; + float currentSegmentLength; + + if (lapsCompleted > 0) { + raceDistanceCompleted = raceStatus.GetFirstLapLength(); + } + + if (lapsCompleted > 1) { + raceDistanceCompleted += raceStatus.GetSubsequentLapLength() * static_cast(lapsCompleted - 1); + } + + for (int i = 0; i < checkpointsCompleted; ++i) { + lapDistanceCompleted += raceStatus.GetSegmentLength(i, lapsCompleted); + } + + distanceToNextCheckpoint = GetDistToNextCheck(); + currentSegmentLength = raceStatus.GetSegmentLength(checkpointsCompleted, lapsCompleted); + if (distanceToNextCheckpoint != 0.0f) { + float lapLength; + + lapDistanceCompleted += currentSegmentLength - distanceToNextCheckpoint; + lapLength = raceStatus.GetLapLength(lapsCompleted); + if (lapLength > 0.0f) { + mPctLapComplete = bClamp(lapDistanceCompleted / lapLength, 0.0f, 1.0f); + } else { + mPctLapComplete = 1.0f; + } + + mPctRaceComplete = bClamp((raceDistanceCompleted + lapDistanceCompleted) / raceLength, 0.0f, 1.0f); + } + } +} + +void GRacerInfo::UpdateSplits() { +#ifndef EA_BUILD_A124 + int split = -1; + + if (mPctRaceComplete >= 1.0f && mSplitTimes[3] == 0.0f) { + split = 3; + } else if (mPctRaceComplete >= 0.75f && mSplitTimes[2] == 0.0f) { + split = 2; + } else if (mPctRaceComplete >= 0.5f && mSplitTimes[1] == 0.0f) { + split = 1; + } else if (mPctRaceComplete >= 0.25f && mSplitTimes[0] == 0.0f) { + split = 0; + } + + if (split != -1) { + mSplitTimes[split] = mRaceTimer.GetTime(); + mSplitRankings[split] = mRanking; + } +#endif +} + GRaceParameters::GRaceParameters(unsigned int collectionKey, GRaceIndexData *index) : mIndex(index), // mRaceRecord(new Attrib::Gen::gameplay(collectionKey, 0, nullptr)), // @@ -1358,6 +1491,123 @@ void GRaceStatus::RefreshBinWhileInGame() { mQueueBinChange = true; } +void GRaceStatus::Update(float dT) { + int numRacers = mRacerCount; + +#ifndef EA_BUILD_A124 + if (GetPlayMode() == kPlayMode_Racing && mRefreshBinAfterRace) { + RefreshBinWhileInGame(); + mRefreshBinAfterRace = false; + } +#endif + + if (GetPlayMode() == kPlayMode_Roaming) { + if (mQueueBinChange) { + EnterBin(FEDatabase->GetCareerSettings()->GetCurrentBin()); + mQueueBinChange = false; + } + +#ifndef EA_BUILD_A124 + if (GetPlayMode() == kPlayMode_Roaming && mWarpWhenInFreeRoam && GManager::Get().WarpToMarker(mWarpWhenInFreeRoam, false)) { + mWarpWhenInFreeRoam = 0; + } +#endif + } + + if (GetPlayMode() == kPlayMode_Racing && numRacers > 0) { + int numAiRacers = 0; + float floatRacers = 0.0f; + float percentComplete = 0.0f; + float elapsed; + int elapsedSec; + + for (int idx = 0; idx < numRacers; ++idx) { + GRacerInfo &info = GetRacerInfo(idx); + + if (info.GetGameCharacter()) { + ++numAiRacers; + } + } + + for (int idx = 0; idx < numRacers; ++idx) { + GRacerInfo &info = GetRacerInfo(idx); + + info.Update(dT); + if (info.GetSimable()) { + float weight = 1.0f; + + if (!info.GetGameCharacter()) { + weight = bMax(1.0f, static_cast(numAiRacers)); + } + + floatRacers += weight; + percentComplete += weight * info.GetPctRaceComplete(); + } + } + + fAveragePercentComplete = percentComplete / bMax(1.0f, floatRacers); + CalculateRankings(); + +#ifndef EA_BUILD_A124 + for (int idx = 0; idx < numRacers; ++idx) { + GetRacerInfo(idx).UpdateSplits(); + } +#endif + + elapsed = GetRaceTimeElapsed(); + MNotifyRaceTime(elapsed, GetIsTimeLimited(), GetRaceTimeRemaining()).Post(UCrc32(0x20D60DBF)); + + elapsedSec = static_cast(elapsed); + if (mLastSecondTickSent < elapsedSec) { + mLastSecondTickSent = elapsedSec; + MNotifyRaceTimeSecTick(elapsed).Post(UCrc32(0x20D60DBF)); + } + + if (GetIsTimeLimited()) { + if (IsChallengeRace()) { +#ifndef EA_BUILD_A124 + if (mPlayerPursuitInCooldown) { + if (mRaceMasterTimer.IsRunning()) { + mRaceMasterTimer.Stop(); + } + } else if (!mRaceMasterTimer.IsRunning()) { + mRaceMasterTimer.Start(); + } +#endif + } + + if (!mTimeExpiredMsgSent && GetRaceTimeRemaining() <= 0.0f) { + MNotifyRaceTimeExpired().Post(UCrc32(0x20D60DBF)); + mTimeExpiredMsgSent = true; + + for (int idx = 0; idx < mRacerCount; ++idx) { + GRacerInfo &info = mRacerInfo[idx]; + + if (!info.GetIsHuman() && !info.IsFinishedRacing()) { + info.ForceStop(); + } + } + } + } + } + + if (mScriptWaitingForLoad) { + bool racersLoading = IsLoading(); + bool trackLoading = TheTrackStreamer.IsLoadingInProgress(); + bool copsSpawning = false; + ICopMgr *copMgr = ICopMgr::Get(); + + if (copMgr && copMgr->IsCopSpawnPending()) { + copsSpawning = true; + } + + if (!racersLoading && !trackLoading && !copsSpawning) { + MLoadingComplete().Post(UCrc32(0x20D60DBF)); + mScriptWaitingForLoad = false; + } + } +} + GRacerInfo &GRaceStatus::GetRacerInfo(int index) { return mRacerInfo[index]; } diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index da569b13d..422fdd4ce 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -89,7 +89,9 @@ struct GRacerInfo { void SetSimable(ISimable *isim); void Reset(); + IVehicle *CreateVehicle(unsigned int default_key); void Update(float dT); + void UpdateSplits(); void SaveExistingRaceStats(); void RestoreExistingRaceStats(); bool IsBehind(const GRacerInfo &rhs) const; @@ -572,6 +574,22 @@ class GRaceStatus : public UTL::COM::Object, public IVehicleCache { return mRaceParms != nullptr && mRaceParms->GetTimeLimit() > 0.0f; } + float GetRaceLength() { + return fRaceLength; + } + + float GetFirstLapLength() { + return fFirstLapLength; + } + + float GetSubsequentLapLength() { + return fSubsequentLapLength; + } + + float GetLapLength(int lap) { + return lap == 0 ? GetFirstLapLength() : GetSubsequentLapLength(); + } + static bool IsChallengeRace() { return Exists() && Get().GetRaceType() == GRace::kRaceType_Challenge; } diff --git a/src/Speed/Indep/Src/World/TrackStreamer.hpp b/src/Speed/Indep/Src/World/TrackStreamer.hpp index 627d8cd58..c450328a8 100644 --- a/src/Speed/Indep/Src/World/TrackStreamer.hpp +++ b/src/Speed/Indep/Src/World/TrackStreamer.hpp @@ -152,6 +152,7 @@ class TrackStreamer { void PredictStreamingPosition(int position_number, const bVector3 *position, const bVector3 *velocity, const bVector3 *direction, bool following_car); void ClearStreamingPositions(); void BlockUntilLoadingComplete(); + int IsLoadingInProgress(); void *AllocateUserMemory(int size, const char *debug_name, int offset); void FreeUserMemory(void *mem); From cc71a46bec42c3f16a94d7d927fa344a8798cdcd Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 01:14:56 +0100 Subject: [PATCH 269/691] 48.3%: add race ranking helpers --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 68 ++++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 2 + 2 files changed, 70 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index f2a161d76..f30e6b3fe 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1491,6 +1491,74 @@ void GRaceStatus::RefreshBinWhileInGame() { mQueueBinChange = true; } +void GRaceStatus::CalculateRankings() { + GRacerInfo *rankings[16]; + bool rankPlayersByPoints = mRaceParms->GetRankPlayersByPoints(); + int aiRacers = 0; + + for (int i = 0; i < mRacerCount; ++i) { + rankings[i] = &mRacerInfo[i]; + } + + for (int i = mRacerCount - 1; i > 0; --i) { + for (int j = 0; j < i; ++j) { + bool swap; + + if (!rankPlayersByPoints) { + swap = rankings[j]->IsBehind(*rankings[i]); + } else if (rankings[i]->GetPointTotal() + rankings[j]->GetPointTotal() <= 0.0f) { + swap = rankings[j]->IsBehind(*rankings[i]); + } else { + swap = rankings[j]->GetPointTotal() < rankings[i]->GetPointTotal(); + } + + if (swap) { + GRacerInfo *info = rankings[i]; + + rankings[i] = rankings[j]; + rankings[j] = info; + } + } + } + + for (int i = 0; i < mRacerCount; ++i) { + GRacerInfo *info = rankings[i]; + + info->SetRanking(i + 1); + if (!info->GetGameCharacter()) { + info->mAiRanking = 0; + ++aiRacers; + } else { + info->mAiRanking = (i + 1) - aiRacers; + } + } +} + +void GRaceStatus::SortCheckPointRankings() { + GRacerInfo *rankings[16]; + + for (int checkpoint = 0; checkpoint < 16; ++checkpoint) { + for (int i = 0; i < mRacerCount; ++i) { + rankings[i] = &mRacerInfo[i]; + } + + for (int i = mRacerCount - 1; i > 0; --i) { + for (int j = 0; j < i; ++j) { + GRacerInfo *info = rankings[i]; + + if (rankings[j]->GetSpeedTrapSpeed(checkpoint) < info->GetSpeedTrapSpeed(checkpoint)) { + rankings[i] = rankings[j]; + rankings[j] = info; + } + } + } + + for (int i = 0; i < mRacerCount; ++i) { + rankings[i]->mSpeedTrapPosition[checkpoint] = i + 1; + } + } +} + void GRaceStatus::Update(float dT) { int numRacers = mRacerCount; diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index 422fdd4ce..efe5adbdb 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -21,6 +21,8 @@ // total size: 0x1A8 struct GRacerInfo { public: + friend class GRaceStatus; + GCharacter *GetGameCharacter() const { return mGameCharacter; } From 906ee0e46d90e939d102eb730fbabe98e48cc2d2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 01:17:48 +0100 Subject: [PATCH 270/691] 48.7%: add race stat finalization --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 91 ++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index f30e6b3fe..58884b824 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -450,6 +450,97 @@ void GRacerInfo::UpdateSplits() { #endif } +void GRacerInfo::FinalizeRaceStats() { + GRaceParameters *raceParms = GRaceStatus::Get().GetRaceParameters(); + float adjustedRaceTime; + float pctRaceComplete = mPctRaceComplete; + + if (mFinishedRacing) { + return; + } + + adjustedRaceTime = GetRaceTime(); + if (0.1f < pctRaceComplete) { + adjustedRaceTime = GetRaceTime() / pctRaceComplete; + } + +#ifndef EA_BUILD_A124 + mDNF = false; +#endif + + if (raceParms && raceParms->GetRaceType() == GRace::kRaceType_Drag && + (mTotalled || mEngineBlown || pctRaceComplete < 1.0f)) { + adjustedRaceTime = 0.0f; +#ifndef EA_BUILD_A124 + mDNF = true; +#endif + } + + if (raceParms && raceParms->GetRaceType() == GRace::kRaceType_SpeedTrap && mGameCharacter) { + const unsigned int *pointPenalty = + reinterpret_cast(raceParms->GetGameplayObj()->GetAttributePointer(0x26FD42B0, 0)); + + if (!pointPenalty) { + pointPenalty = reinterpret_cast(Attrib::DefaultDataArea(sizeof(unsigned int))); + } + + if (0.0f < adjustedRaceTime - GetRaceTime()) { + AddToPointTotal(-((adjustedRaceTime - GetRaceTime()) * static_cast(*pointPenalty))); + } + } + + if (raceParms && raceParms->GetIsLoopingRace() && mGameCharacter) { + int numLaps = raceParms->GetNumLaps(); + float totalLapTime = 0.0f; + + for (int i = 0; i < numLaps; ++i) { + float lapTime = GRaceStatus::Get().GetLapTime(i, GetIndex(), false); + + if (lapTime == 0.0f) { + break; + } + + totalLapTime += lapTime; + } + + GRaceStatus::Get().SetLapTime(mLapsCompleted, GetIndex(), adjustedRaceTime - totalLapTime); + } + +#ifndef EA_BUILD_A124 + if (mGameCharacter) { + static const float splitPct[4] = { + 0.25f, + 0.5f, + 0.75f, + 1.0f, + }; + float effectivePct = mDNF ? pctRaceComplete : 1.0f; + + for (int i = 0; i < 4; ++i) { + if (mSplitTimes[i] == 0.0f) { + if (effectivePct < splitPct[i]) { + mSplitTimes[i] = 0.0f; + } else { + mSplitTimes[i] = adjustedRaceTime * splitPct[i]; + } + } + + if (mSplitRankings[i] == 0) { + mSplitRankings[i] = mRanking; + } + } + } + + if (!mDNF) { + mRaceTimer.SetTime(adjustedRaceTime); + FinishRace(); + } +#else + mRaceTimer.SetTime(adjustedRaceTime); + FinishRace(); +#endif +} + GRaceParameters::GRaceParameters(unsigned int collectionKey, GRaceIndexData *index) : mIndex(index), // mRaceRecord(new Attrib::Gen::gameplay(collectionKey, 0, nullptr)), // From 8d4606156eef434fb37d8486d5bdb24ea866a3a2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 01:19:26 +0100 Subject: [PATCH 271/691] 49.1%: match GRaceStatus destructor --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 14 ++++++++++++++ src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 1 + 2 files changed, 15 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 58884b824..a9e011213 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -16,6 +16,7 @@ #include "Speed/Indep/Src/Main/AttribSupport.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" #include "Speed/Indep/Src/World/WRoadNetwork.h" +#include "Speed/Indep/Src/World/WorldModel.hpp" #include "Speed/Indep/Src/World/TrackStreamer.hpp" #include "Speed/Indep/bWare/Inc/bWare.hpp" #include "Speed/Indep/bWare/Inc/Strings.hpp" @@ -1527,6 +1528,19 @@ GRaceStatus::GRaceStatus() } } +GRaceStatus::~GRaceStatus() { + if (mCheckpointModel) { + delete mCheckpointModel; + mCheckpointModel = nullptr; + } + + if (mCheckpointEmitter) { + mCheckpointEmitter->UnSubscribe(); + delete mCheckpointEmitter; + mCheckpointEmitter = nullptr; + } +} + void GRaceStatus::Init() { if (!fObj) { new GRaceStatus(); diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index efe5adbdb..021bb2f33 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -551,6 +551,7 @@ class GRaceStatus : public UTL::COM::Object, public IVehicleCache { float GetSegmentLength(int segment, int lap); GRaceStatus(); + ~GRaceStatus() override; GRaceParameters *GetRaceParameters() const { return mRaceParms; From 2815275fdce6fa83f7f67ebb819e9e11b354de8f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 01:23:52 +0100 Subject: [PATCH 272/691] 49.5%: add roaming state transition --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 81 ++++++++++++++++++++ src/Speed/Indep/Src/World/WRoadNetwork.h | 1 + 2 files changed, 82 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index a9e011213..4c9847639 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -8,6 +8,8 @@ #include "Speed/Indep/Src/Generated/Messages/MNotifyRaceTime.h" #include "Speed/Indep/Src/Generated/Messages/MNotifyRaceTimeExpired.h" #include "Speed/Indep/Src/Generated/Messages/MNotifyRaceTimeSecTick.h" +#include "Speed/Indep/Src/Generated/Events/EAutoSave.hpp" +#include "Speed/Indep/Src/Generated/Events/EReloadHud.hpp" #include "Speed/Indep/Src/Interfaces/SimActivities/ICopMgr.h" #include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" #include "Speed/Indep/Src/Interfaces/Simables/IAI.h" @@ -22,6 +24,7 @@ #include "Speed/Indep/bWare/Inc/Strings.hpp" void SetCurrentTimeOfDay(float value); +void SetOverRideRainIntensity(float intensity); extern int UnlockAllThings; GRaceStatus *GRaceStatus::fObj = nullptr; @@ -1596,6 +1599,84 @@ void GRaceStatus::RefreshBinWhileInGame() { mQueueBinChange = true; } +void GRaceStatus::EnterBin(unsigned int binNumber) { + if (mRaceBin) { + DisableBarriers(); + } + + mRaceBin = GRaceDatabase::Get().GetBinNumber(binNumber); + if (mRaceBin) { + EnableBarriers(); + if (mRaceBin->GetChildVault() && !mRaceBin->GetChildVault()->IsLoaded()) { + mRaceBin->GetChildVault()->LoadSyncTransient(); + } + } + + if (GManager::Get().GetInGameplay()) { + GManager::Get().StartWorldActivities(true); + GManager::Get().StartBinActivity(mRaceBin); + GManager::Get().RefreshEngageTriggerIcons(); + GManager::Get().RefreshSpeedTrapIcons(); + } +} + +void GRaceStatus::SetRacing() { + mPlayMode = kPlayMode_Racing; + ClearTimes(); + + for (IPlayer::List::const_iterator iter = IPlayer::GetList(PLAYER_ALL).begin(); iter != IPlayer::GetList(PLAYER_ALL).end(); ++iter) { + IPlayer *player = *iter; + + if (player->InGameBreaker()) { + player->ResetGameBreaker(true); + } + } + + mNumTollbooths = 0; + + if ((!mRaceParms || !mRaceParms->GetIsDDayRace() || bStrCmp(mRaceParms->GetEventID(), "16.1.0") == 0) && !IsFinalEpicPursuit()) { + new EAutoSave(); + } + + new EReloadHud(); + +#ifndef EA_BUILD_A124 + mCaluclatedAdaptiveGain = false; +#endif +} + +void GRaceStatus::SetRoaming() { + bool skipHudReload = false; + + if (mRaceParms) { + skipHudReload = bStrCmp(mRaceParms->GetEventID(), "16.2.1") == 0; + } + + mPlayMode = kPlayMode_Roaming; + SetRaceContext(GRace::kRaceContext_Career); + mIsLoading = false; + mRaceParms = nullptr; + WRoadNetwork::Get().ResetShortcuts(); + + for (IPlayer::List::const_iterator iter = IPlayer::GetList(PLAYER_ALL).begin(); iter != IPlayer::GetList(PLAYER_ALL).end(); ++iter) { + IPlayer *player = *iter; + + if (player->InGameBreaker()) { + player->ResetGameBreaker(true); + } + } + + if (!skipHudReload) { + new EReloadHud(); + } + + new EAutoSave(); + SetOverRideRainIntensity(0.0f); + SetCurrentTimeOfDay(0.5f); + GManager::Get().SpawnAllLoadedSectionIcons(); + ICopMgr::mDisableCops = 0; +} + void GRaceStatus::CalculateRankings() { GRacerInfo *rankings[16]; bool rankPlayersByPoints = mRaceParms->GetRankPlayersByPoints(); diff --git a/src/Speed/Indep/Src/World/WRoadNetwork.h b/src/Speed/Indep/Src/World/WRoadNetwork.h index 57c500519..0a2b584f4 100644 --- a/src/Speed/Indep/Src/World/WRoadNetwork.h +++ b/src/Speed/Indep/Src/World/WRoadNetwork.h @@ -75,6 +75,7 @@ class WRoadNetwork : public Debugable { void ResolveShortcuts(); void ResetBarriers(); + void ResetShortcuts(); void ResetRaceSegments(); From f333b74f63ea1e1e4e3460405c434c85bc9280b0 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 01:29:00 +0100 Subject: [PATCH 273/691] 50.1%: add race loading and cache helpers --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 115 +++++++++++++++++++ src/Speed/Indep/Src/World/TrackStreamer.hpp | 3 + 2 files changed, 118 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 4c9847639..332d0dda0 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -9,14 +9,17 @@ #include "Speed/Indep/Src/Generated/Messages/MNotifyRaceTimeExpired.h" #include "Speed/Indep/Src/Generated/Messages/MNotifyRaceTimeSecTick.h" #include "Speed/Indep/Src/Generated/Events/EAutoSave.hpp" +#include "Speed/Indep/Src/Generated/Events/EFadeScreenOn.hpp" #include "Speed/Indep/Src/Generated/Events/EReloadHud.hpp" #include "Speed/Indep/Src/Interfaces/SimActivities/ICopMgr.h" +#include "Speed/Indep/Src/Interfaces/SimActivities/ITrafficMgr.h" #include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" #include "Speed/Indep/Src/Interfaces/Simables/IAI.h" #include "Speed/Indep/Src/Interfaces/Simables/IEngine.h" #include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" #include "Speed/Indep/Src/Main/AttribSupport.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" +#include "Speed/Indep/Src/Sim/Simulation.h" #include "Speed/Indep/Src/World/WRoadNetwork.h" #include "Speed/Indep/Src/World/WorldModel.hpp" #include "Speed/Indep/Src/World/TrackStreamer.hpp" @@ -1556,6 +1559,51 @@ const char *GRaceStatus::GetCacheName() const { return "GRaceStatus"; } +bool GRaceStatus::CanUnspawnRoamer(const IVehicle *roamer) const { + const GRacerInfo *info = nullptr; + + if (roamer->IsActive()) { + for (int onRacer = 0; onRacer < GetRacerCount(); ++onRacer) { + const GRacerInfo &racerInfo = mRacerInfo[onRacer]; + + if (UTL::COM::ComparePtr(racerInfo.GetSimable(), roamer)) { + info = &racerInfo; + break; + } + } + + if (info) { + if (roamer->GetOffscreenTime() >= 4.0f) { + return Sim::DistanceToCamera(roamer->GetPosition()) >= 100.0f; + } + + return false; + } + } + + return true; +} + +eVehicleCacheResult GRaceStatus::OnQueryVehicleCache(const IVehicle *removethis, const IVehicleCache *whosasking) const { + if (mPlayMode == kPlayMode_Racing || mVehicleCacheLocked) { + for (int i = 0; i < GetRacerCount(); ++i) { + if (UTL::COM::ComparePtr(mRacerInfo[i].GetSimable(), removethis)) { + return VCR_WANT; + } + } + } else { + if (!UTL::COM::ComparePtr(whosasking, ICopMgr::Get()) && !UTL::COM::ComparePtr(whosasking, ITrafficMgr::Get())) { + return VCR_DONTCARE; + } + + if (!CanUnspawnRoamer(removethis)) { + return VCR_WANT; + } + } + + return VCR_DONTCARE; +} + void GRaceStatus::SetRaceContext(GRace::Context context) { mRaceContext = context; } @@ -1645,6 +1693,32 @@ void GRaceStatus::SetRacing() { #endif } +void GRaceStatus::NotifyScriptWhenLoaded() { + bool racersLoading = IsLoading(); + bool trackLoading = TheTrackStreamer.IsLoadingInProgress(); + bool copsSpawning = false; + + if (ICopMgr::Get() && ICopMgr::Get()->IsCopSpawnPending()) { + copsSpawning = true; + } + + if (trackLoading) { + if (!racersLoading) { + if (!copsSpawning) { + if (!TheTrackStreamer.IsFarLoadingInProgress()) { + trackLoading = false; + } + } + } + } + + if (racersLoading || trackLoading || copsSpawning) { + new EFadeScreenOn(false); + } + + mScriptWaitingForLoad = true; +} + void GRaceStatus::SetRoaming() { bool skipHudReload = false; @@ -2005,6 +2079,47 @@ void GRaceStatus::AddCheckpoint(GRuntimeInstance *trigger) { } } +void GRaceStatus::SetNextCheckpointPos(GRuntimeInstance *trigger) { + bool checkpointsVisible = false; + + mNextCheckpoint = static_cast(trigger); + + if (mRaceParms) { + checkpointsVisible = mRaceParms->GetCheckpointsVisible(); + } + + if (!trigger || !checkpointsVisible) { + if (mCheckpointModel) { + delete mCheckpointModel; + } + mCheckpointModel = nullptr; + + if (mCheckpointEmitter) { + mCheckpointEmitter->UnSubscribe(); + delete mCheckpointEmitter; + mCheckpointEmitter = nullptr; + } + + return; + } + + if (!mCheckpointModel) { + mCheckpointModel = new WorldModel(0x738B1F9B, nullptr, false); + } + + UMath::Vector3 position; + bMatrix4 matrix; + + trigger->GetPosition(position); + bIdentity(&matrix); + eSwizzleWorldVector(reinterpret_cast(position), reinterpret_cast(matrix.v3)); + mCheckpointModel->SetMatrix(&matrix); + + if (mCheckpointEmitter) { + mCheckpointEmitter->SetLocalWorld(&matrix); + } +} + float GRaceStatus::GetAdaptiveDifficutly() const { return fCatchUpAdaptiveBonus; } diff --git a/src/Speed/Indep/Src/World/TrackStreamer.hpp b/src/Speed/Indep/Src/World/TrackStreamer.hpp index c450328a8..23bd5c792 100644 --- a/src/Speed/Indep/Src/World/TrackStreamer.hpp +++ b/src/Speed/Indep/Src/World/TrackStreamer.hpp @@ -153,6 +153,9 @@ class TrackStreamer { void ClearStreamingPositions(); void BlockUntilLoadingComplete(); int IsLoadingInProgress(); + bool IsFarLoadingInProgress() { + return CurrentZoneFarLoad; + } void *AllocateUserMemory(int size, const char *debug_name, int offset); void FreeUserMemory(void *mem); From 7ac149f650a77e3fe95f8a14d47b6977244c90a8 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 01:32:10 +0100 Subject: [PATCH 274/691] 50.3%: add catch-up skill computation --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 111 +++++++++++++++++++ 1 file changed, 111 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 332d0dda0..5175bdd02 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -32,6 +32,49 @@ extern int UnlockAllThings; GRaceStatus *GRaceStatus::fObj = nullptr; +static const float Tweak_GlueSpreadData_Low[5] = { + 1000.0f, + 900.0f, + 750.0f, + 600.0f, + 800.0f, +}; + +static const float Tweak_GlueSpreadData_High[5] = { + 300.0f, + 275.0f, + 250.0f, + 150.0f, + 250.0f, +}; + +static const float Tweak_GlueStrengthData_Low[5] = { + 0.75f, + 0.75f, + 0.75f, + 0.5f, + 0.25f, +}; + +static const float Tweak_GlueStrengthData_High[5] = { + 0.75f, + 0.75f, + 0.75f, + 0.75f, + 0.25f, +}; + +static const float Tweak_QuickRaceGlue[3] = { + 0.0f, + 0.5f, + 1.0f, +}; + +Table Tweak_GlueSpreadTable_Low(Tweak_GlueSpreadData_Low, 5, 0.0f, 100.0f); +Table Tweak_GlueSpreadTable_High(Tweak_GlueSpreadData_High, 5, 0.0f, 100.0f); +Table Tweak_GlueStrengthTable_Low(Tweak_GlueStrengthData_Low, 5, 0.0f, 100.0f); +Table Tweak_GlueStrengthTable_High(Tweak_GlueStrengthData_High, 5, 0.0f, 100.0f); + bool GRacerInfo::GetIsHuman() const { ISimable *simable = GetSimable(); return simable && simable->IsPlayer(); @@ -2130,6 +2173,74 @@ void GRaceStatus::SyncronizeAdaptiveBonus() { } } +bool GRaceStatus::ComputeCatchUpSkill(GRacerInfo *racer_info, PidError *pid, float *output, float *skill, bool off_world) { + float glue_level = 0.5f; + bool is_boss = false; + bool use_race_override = false; + float percent_complete = racer_info->GetPctRaceComplete(); + float glue_skill; + float glue_spread; + float glue_integral; + float glue_derivative; + float glue_p = pid->GetErrorIntegral(); + float glue_error = pid->GetErrorDerivative(); + float glue_output; + + if (!off_world) { + if (GetRaceContext() == GRace::kRaceContext_QuickRace) { + if (!mRaceParms || !mRaceParms->GetCatchUp()) { + return false; + } + + glue_level = Tweak_QuickRaceGlue[mRaceParms->GetDifficulty()]; + } else { + if (GetRaceContext() != GRace::kRaceContext_Career) { + return false; + } + + glue_level = bClamp((GetAdaptiveDifficutly() + 1.0f) * 0.5f, 0.0f, 1.0f); + + if (mRaceParms) { + use_race_override = mRaceParms->GetCatchUpOverride(); + if (mRaceParms->GetIsBossRace()) { + is_boss = true; + glue_level = ((1.0f - glue_level) * 0.5f) + glue_level; + } + } + } + } else { + glue_level = 1.0f; + } + + if (use_race_override) { + Table glue_skill_table(aCatchUpSkillData, nCatchUpSkillEntries, 0.0f, 100.0f); + Table glue_spread_table(aCatchUpSpreadData, nCatchUpSpreadEntries, 0.0f, 100.0f); + + glue_skill = glue_skill_table.GetValue(percent_complete); + glue_spread = glue_spread_table.GetValue(percent_complete); + glue_integral = fCatchUpIntegral; + glue_derivative = fCatchUpDerivative; + } else { + glue_spread = ((Tweak_GlueSpreadTable_High.GetValue(percent_complete) - Tweak_GlueSpreadTable_Low.GetValue(percent_complete)) * glue_level) + + Tweak_GlueSpreadTable_Low.GetValue(percent_complete); + glue_skill = ((Tweak_GlueStrengthTable_High.GetValue(percent_complete) - Tweak_GlueStrengthTable_Low.GetValue(percent_complete)) * glue_level) + + Tweak_GlueStrengthTable_Low.GetValue(percent_complete); + glue_integral = 5.0e-5f; + glue_derivative = 0.01f; + } + + glue_spread = bMax(glue_spread, 100.0f); + glue_output = bClamp((2.0f / glue_spread) * pid->GetError() + glue_p * glue_integral + glue_error * glue_derivative, -1.0f, 1.0f); + *skill = glue_skill * glue_output; + + if (is_boss) { + glue_output = 1.0f; + } + + *output = glue_output; + return true; +} + void GRaceStatus::MakeDefaultCatchUpData() { nCatchUpSkillEntries = 0; nCatchUpSpreadEntries = 0; From cd4a76cf5d792e660c06b7ca9948afba56245758 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 01:37:07 +0100 Subject: [PATCH 275/691] 51.4%: add adaptive difficulty update flow --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 193 +++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 11 +- 2 files changed, 203 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 5175bdd02..43b2c4ad9 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2173,6 +2173,199 @@ void GRaceStatus::SyncronizeAdaptiveBonus() { } } +void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable *who) { + bool update = false; + GRacerInfo *winning_player = nullptr; + GRacerInfo *winning_ai = nullptr; + GRacerInfo *eliminated_player = nullptr; + float difficulty = fCatchUpAdaptiveBonus; + const int num_racers = GetRacerCount(); + + if (mCaluclatedAdaptiveGain || GetRaceContext() != GRace::kRaceContext_Career || num_racers < 2 || Sim::GetUserMode() != 0 || GetPlayMode() != kPlayMode_Racing || + (mRaceParms && mRaceParms->GetNoPostRaceScreen()) || GetRaceLength() <= 0.0f) { + return; + } + + for (int i = 0; i < num_racers; ++i) { + GRacerInfo &info = GetRacerInfo(i); + + if (!info.GetGameCharacter()) { + if (info.GetIsBusted()) { + return; + } + + if (info.IsFinishedRacing() && info.GetRanking() == 1) { + winning_player = &info; + } else if (GetRaceType() == GRace::kRaceType_Knockout && info.GetIsKnockedOut()) { + eliminated_player = &info; + } + } else if (info.IsFinishedRacing() && info.GetRanking() == 1) { + winning_ai = &info; + } + } + + if (reason < kAdaptiveGainReason_2) { + float percent_ai_complete = 0.0f; + float percent_human_complete = 0.0f; + + if (!who || !who->IsPlayer()) { + return; + } + + for (int i = 0; i < num_racers; ++i) { + GRacerInfo &info = GetRacerInfo(i); + + if (!info.GetIsKnockedOut()) { + if (!info.GetGameCharacter()) { + percent_human_complete = UMath::Max(percent_human_complete, info.GetPctRaceComplete()); + } else { + percent_ai_complete = UMath::Max(percent_ai_complete, info.GetPctRaceComplete()); + } + } + } + + if (percent_human_complete < percent_ai_complete && percent_human_complete > 0.0f) { + float lose_margin = ((percent_ai_complete - percent_human_complete) * (GetRaceLength() * 0.01f)) / 300.0f; + float bonus = bClamp(lose_margin, 0.0f, 1.0f); + + difficulty = bClamp(difficulty + (((bonus * -0.4f) * percent_human_complete) * 0.01f), -1.0f, 1.0f); + update = true; + } + } else if (reason == kAdaptiveGainReason_5) { + float percent_ai_complete = 0.0f; + float percent_human_complete = 0.0f; + + for (int i = 0; i < num_racers; ++i) { + GRacerInfo &info = GetRacerInfo(i); + + if (!info.GetIsKnockedOut() && !info.GetIsTotalled() && !info.GetIsEngineBlown()) { + if (!info.GetGameCharacter()) { + percent_human_complete = UMath::Max(percent_human_complete, info.GetPctRaceComplete()); + } else { + percent_ai_complete = UMath::Max(percent_ai_complete, info.GetPctRaceComplete()); + } + } + } + + if (percent_human_complete < percent_ai_complete && percent_human_complete > 0.0f) { + float lose_margin = ((percent_ai_complete - percent_human_complete) * (GetRaceLength() * 0.01f)) / 300.0f; + float bonus = bClamp(lose_margin, 0.0f, 1.0f); + + difficulty = bClamp(difficulty + (((bonus * -0.4f) * percent_human_complete) * 0.01f), -1.0f, 1.0f); + update = true; + } + } else if (GetRaceType() == GRace::kRaceType_SpeedTrap) { + float player_points = 0.0f; + float ai_points = 0.0f; + float total_points; + + for (int i = 0; i < num_racers; ++i) { + GRacerInfo &info = GetRacerInfo(i); + + if (!info.IsFinishedRacing()) { + return; + } + + if (!info.GetGameCharacter()) { + player_points = info.GetPointTotal(); + } else { + ai_points = UMath::Max(ai_points, info.GetPointTotal()); + } + } + + total_points = UMath::Max(player_points, ai_points); + if (total_points > 0.0f && player_points > 0.0f && ai_points > 0.0f) { + float point_spread_ratio = (player_points - ai_points) / total_points; + + if (point_spread_ratio <= 0.0f) { + float bonus = bClamp((-point_spread_ratio) / 0.2f, 0.0f, 1.0f); + + difficulty = bClamp(difficulty + (bonus * -0.2f), -1.0f, 1.0f); + } else { + float bonus = bClamp((point_spread_ratio - 0.05f) / (0.2f - 0.05f), 0.0f, 1.0f); + + difficulty = bClamp(difficulty + (bonus * 0.2f), -1.0f, 1.0f); + } + + update = true; + } + } else if (winning_ai) { + float max_pct_complete = 0.0f; + + for (int i = 0; i < num_racers; ++i) { + GRacerInfo *info = &GetRacerInfo(i); + + if (info != winning_ai && !info->IsFinishedRacing() && !info->GetIsTotalled() && !info->GetIsEngineBlown()) { + max_pct_complete = bMax(max_pct_complete, info->GetPctRaceComplete()); + } + } + + { + float win_margin = (GetRaceLength() * (100.0f - max_pct_complete)) * 0.01f; + + if (win_margin > 200.0f && max_pct_complete > 0.0f) { + float bonus = bClamp((win_margin - 200.0f) / (750.0f - 200.0f), 0.0f, 1.0f); + + difficulty = bClamp(difficulty + (bonus * 0.4f), -1.0f, 1.0f); + update = true; + } + } + } else if (winning_player) { + for (int i = 0; i < num_racers; ++i) { + GRacerInfo *info = &GetRacerInfo(i); + + if (info->GetGameCharacter() && !info->IsFinishedRacing()) { + float lose_margin = (GetRaceLength() * (100.0f - info->GetPctRaceComplete())) * 0.01f; + + if (lose_margin > 0.0f) { + float bonus = bClamp(lose_margin / 300.0f, 0.0f, 1.0f); + + difficulty = bClamp(difficulty + ((((bonus * -0.3f) + -0.1f) * info->GetPctRaceComplete()) * 0.01f), -1.0f, 1.0f); + update = true; + } + } + } + } else if (eliminated_player) { + int lap_count = 1; + float num_laps; + float race_lose_margin; + float lose_margin; + + if (mRaceParms) { + lap_count = bMax(1, mRaceParms->GetNumLaps()); + } + + num_laps = static_cast(lap_count); + lose_margin = (GetRaceLength() * (100.0f - eliminated_player->GetPctRaceComplete())) * 0.01f; + race_lose_margin = GetRaceLength() / num_laps; + lose_margin -= bFloor(lose_margin / race_lose_margin) * race_lose_margin; + + if (lose_margin > 0.0f) { + float bonus = bClamp(lose_margin / 300.0f, 0.0f, 1.0f); + + difficulty = bClamp(difficulty + ((((bonus * (-0.4f - -0.1f)) + -0.1f) * eliminated_player->GetPctRaceComplete()) * 0.01f), -1.0f, 1.0f); + update = true; + } + } + + if (update) { + float clamped_difficulty; + + mCaluclatedAdaptiveGain = true; + clamped_difficulty = bClamp(difficulty, -1.0f, 1.0f); + + if (FEDatabase) { + CareerSettings *career = FEDatabase->GetCareerSettings(); + + if (career) { + *reinterpret_cast(reinterpret_cast(career) + 0x10) = static_cast(clamped_difficulty * 32767.0f); + } + } + + fCatchUpAdaptiveBonus = difficulty; + } +} + bool GRaceStatus::ComputeCatchUpSkill(GRacerInfo *racer_info, PidError *pid, float *output, float *skill, bool off_world) { float glue_level = 0.5f; bool is_boss = false; diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index 021bb2f33..3102dbb06 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -386,6 +386,15 @@ class GRaceParameters { // total size: 0x46AC class GRaceStatus : public UTL::COM::Object, public IVehicleCache { public: + enum eAdaptiveGainReason { + kAdaptiveGainReason_0 = 0, + kAdaptiveGainReason_1 = 1, + kAdaptiveGainReason_2 = 2, + kAdaptiveGainReason_3 = 3, + kAdaptiveGainReason_4 = 4, + kAdaptiveGainReason_5 = 5, + }; + enum PlayMode { kPlayMode_Roaming = 0, kPlayMode_Racing = 1, @@ -490,7 +499,7 @@ class GRaceStatus : public UTL::COM::Object, public IVehicleCache { void SyncronizeAdaptiveBonus(); - // void UpdateAdaptiveDifficulty(enum eAdaptiveGainReason reason, struct ISimable *who); + void UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable *who); bool ComputeCatchUpSkill(GRacerInfo *racer_info, PidError *pid, float *output, float *skill, bool off_world); From a919aaa5149cdb24c7939cb096d639bbf8d4d7d0 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 01:38:37 +0100 Subject: [PATCH 276/691] 51.6%: add racer vehicle creation path --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 34 ++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 43b2c4ad9..05926f512 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -11,6 +11,7 @@ #include "Speed/Indep/Src/Generated/Events/EAutoSave.hpp" #include "Speed/Indep/Src/Generated/Events/EFadeScreenOn.hpp" #include "Speed/Indep/Src/Generated/Events/EReloadHud.hpp" +#include "Speed/Indep/Src/Frontend/Database/VehicleDB.hpp" #include "Speed/Indep/Src/Interfaces/SimActivities/ICopMgr.h" #include "Speed/Indep/Src/Interfaces/SimActivities/ITrafficMgr.h" #include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" @@ -18,6 +19,7 @@ #include "Speed/Indep/Src/Interfaces/Simables/IEngine.h" #include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" #include "Speed/Indep/Src/Main/AttribSupport.h" +#include "Speed/Indep/Src/Physics/PVehicle.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" #include "Speed/Indep/Src/Sim/Simulation.h" #include "Speed/Indep/Src/World/WRoadNetwork.h" @@ -96,6 +98,38 @@ void GRacerInfo::SetSimable(ISimable *isim) { mhSimable = isim ? isim->GetInstanceHandle() : nullptr; } +IVehicle *GRacerInfo::CreateVehicle(unsigned int default_key) { + GCharacter *racerChar = GetGameCharacter(); + unsigned int vehicle_key = default_key; + FECustomizationRecord customizations; + UMath::Vector3 direction = UMath::Vector3::kZero; + UMath::Vector3 position = UMath::Vector3::kZero; + IVehicleCache *cache = nullptr; + ISimable *result; + IVehicle *vehicle = nullptr; + + bMemSet(&customizations, 0, sizeof(customizations)); + + if (racerChar) { + const char *carName = racerChar->CarType(0); + + if (carName && *carName) { + vehicle_key = Attrib::StringToKey(carName); + } + } + + if (GRaceStatus::Exists()) { + cache = &GRaceStatus::Get(); + } + + result = UTL::COM::Factory::CreateInstance("PVehicle", VehicleParams(cache, DRIVER_RACER, vehicle_key, direction, position, 0, &customizations, nullptr)); + if (result && result->QueryInterface(&vehicle)) { + SetSimable(result); + } + + return vehicle; +} + void GRacerInfo::KnockOut() { if (mFinishedRacing) { return; From 9da43b6919ced891441bb8c691e6c808bae135cc Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 01:48:30 +0100 Subject: [PATCH 277/691] 51.9%: add loading checks --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 26 ++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 05926f512..ac299b997 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -16,7 +16,9 @@ #include "Speed/Indep/Src/Interfaces/SimActivities/ITrafficMgr.h" #include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" #include "Speed/Indep/Src/Interfaces/Simables/IAI.h" +#include "Speed/Indep/Src/Interfaces/Simables/IAudible.h" #include "Speed/Indep/Src/Interfaces/Simables/IEngine.h" +#include "Speed/Indep/Src/Interfaces/Simables/IRenderable.h" #include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" #include "Speed/Indep/Src/Main/AttribSupport.h" #include "Speed/Indep/Src/Physics/PVehicle.h" @@ -2674,10 +2676,34 @@ void GRaceStatus::FinalizeRaceStats() { } bool GRaceStatus::IsAudioLoading() { + for (int i = 0; i < GetRacerCount(); ++i) { + ISimable *simable = GetRacerInfo(i).GetSimable(); + + if (simable) { + IAudible *iaudible; + + if (simable->QueryInterface(&iaudible) && !iaudible->IsAudible()) { + return true; + } + } + } + return false; } bool GRaceStatus::IsModelsLoading() { + for (int i = 0; i < GetRacerCount(); ++i) { + ISimable *simable = GetRacerInfo(i).GetSimable(); + + if (simable) { + IRenderable *irenderable; + + if (simable->QueryInterface(&irenderable) && !irenderable->IsRenderable()) { + return true; + } + } + } + return false; } From 89d4f56c345d24280388c7f5e0d8cabd4d331c2a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 01:57:54 +0100 Subject: [PATCH 278/691] 52.3%: restore race path container logic --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 252 ++++++++++++++++++- src/Speed/Indep/Src/World/WRoadNetwork.h | 26 +- 2 files changed, 267 insertions(+), 11 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index ac299b997..caddfadfa 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -30,12 +30,26 @@ #include "Speed/Indep/bWare/Inc/bWare.hpp" #include "Speed/Indep/bWare/Inc/Strings.hpp" +#include + void SetCurrentTimeOfDay(float value); void SetOverRideRainIntensity(float intensity); extern int UnlockAllThings; GRaceStatus *GRaceStatus::fObj = nullptr; +DECLARE_CONTAINER_TYPE(ID_ROAD_SET); +DECLARE_CONTAINER_TYPE(ID_PATH_SET); + +struct PathSegment { + bool operator<(const PathSegment &rhs) const { + return Length < rhs.Length; + } + + float Length; + UTL::Std::set Roads; +}; + static const float Tweak_GlueSpreadData_Low[5] = { 1000.0f, 900.0f, @@ -1430,14 +1444,141 @@ GRaceCustom::~GRaceCustom() { } void GRaceCustom::CreateRaceActivity() { - if (mReversed && !GetCanBeReversed()) { - mReversed = false; + if (mReversed) { + if (!GetCanBeReversed()) { + mReversed = false; + } else { + const unsigned int *reverse_start = reinterpret_cast( + mRaceRecord->GetAttributePointer(0xFD945479, 0) ? mRaceRecord->GetAttributePointer(0xFD945479, 0) : Attrib::DefaultDataArea(sizeof(unsigned int))); + const unsigned int *reverse_finish = reinterpret_cast( + mRaceRecord->GetAttributePointer(0x7C7CF20F, 0) ? mRaceRecord->GetAttributePointer(0x7C7CF20F, 0) : Attrib::DefaultDataArea(sizeof(unsigned int))); + Attrib::Attribute race_start = mRaceRecord->Get(0xE43B2CCC); + Attrib::Attribute race_finish = mRaceRecord->Get(0xB0A24ADC); + + if (race_start.IsValid() && race_start.GetCollection() != mRaceRecord->GetConstCollection()) { + unsigned int length = race_start.GetLength(); + unsigned int *values = length ? new unsigned int[length] : nullptr; + + for (unsigned int i = 0; i < length; ++i) { + const unsigned int *src = + reinterpret_cast(mRaceRecord->GetAttributePointer(0xE43B2CCC, i)); + values[i] = src ? *src : 0; + } + + if (mRaceRecord->Add(0xE43B2CCC, length)) { + for (unsigned int i = 0; i < length; ++i) { + unsigned int *dst = + reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(0xE43B2CCC, i))); + + if (dst) { + *dst = values[i]; + } + } + + race_start = mRaceRecord->Get(0xE43B2CCC); + } + + delete[] values; + } + + if (race_start.IsValid()) { + unsigned int *dst = + reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(0xE43B2CCC, 0))); + + if (dst) { + *dst = *reverse_start; + } + } + + if (race_finish.IsValid() && race_finish.GetCollection() != mRaceRecord->GetConstCollection()) { + unsigned int length = race_finish.GetLength(); + unsigned int *values = length ? new unsigned int[length] : nullptr; + + for (unsigned int i = 0; i < length; ++i) { + const unsigned int *src = + reinterpret_cast(mRaceRecord->GetAttributePointer(0xB0A24ADC, i)); + values[i] = src ? *src : 0; + } + + if (mRaceRecord->Add(0xB0A24ADC, length)) { + for (unsigned int i = 0; i < length; ++i) { + unsigned int *dst = + reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(0xB0A24ADC, i))); + + if (dst) { + *dst = values[i]; + } + } + + race_finish = mRaceRecord->Get(0xB0A24ADC); + } + + delete[] values; + } + + if (race_finish.IsValid()) { + unsigned int *dst = + reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(0xB0A24ADC, 0))); + + if (dst) { + *dst = *reverse_finish; + } + } + } } - if (GRaceStatus::Get().GetRaceContext() != GRace::kRaceContext_Career && GetIsBossRace()) { - mNumOpponents = 0; - } else { - mNumOpponents = GetNumOpponents(); + { + unsigned int num_opponents = GetNumOpponents(); + bool boss_race = false; + + if (GRaceStatus::Get().GetRaceContext() != GRace::kRaceContext_Career && GetIsBossRace()) { + boss_race = true; + num_opponents = 0; + } + + if (mNumOpponents != num_opponents) { + unsigned int opponent_keys[16]; + unsigned int old_length = 0; + + if (!boss_race) { + Attrib::Attribute opponents = mRaceRecord->Get(0x5839FA1A); + + old_length = opponents.GetLength(); + for (unsigned int i = 0; i < old_length && i < 16; ++i) { + const unsigned int *src = reinterpret_cast(mRaceRecord->GetAttributePointer(0x5839FA1A, i)); + + if (!src) { + src = reinterpret_cast(Attrib::DefaultDataArea(sizeof(unsigned int))); + } + + opponent_keys[i] = *src; + } + } + + if (old_length < mNumOpponents && mNumOpponents <= 16) { + if (old_length == 0) { + for (unsigned int i = 0; i < mNumOpponents; ++i) { + opponent_keys[i] = 0x9F3B88C5; + } + } else { + for (unsigned int i = old_length; i < mNumOpponents; ++i) { + opponent_keys[i] = opponent_keys[i % old_length]; + } + } + } + + mRaceRecord->Add(0x5839FA1A, mNumOpponents); + if (mNumOpponents != 0) { + for (unsigned int i = 0; i < mNumOpponents && i < 16; ++i) { + unsigned int *dst = + reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(0x5839FA1A, i))); + + if (dst) { + *dst = opponent_keys[i]; + } + } + } + } } if (mHeatLevel != -1) { @@ -2727,6 +2868,9 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c WRoadNav nav; bVector3 delta; float pathDistance; + float segmentDistance = 0.0f; + UTL::Std::set pathSegments; + char shortcutAllowed[32]; nav.SetPathType(WRoadNav::kPathChopper); @@ -2739,10 +2883,98 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c return pathDistance; } - if (nav.FindPathNow(&UMath::Vector4To3(positions[end]), &UMath::Vector4To3(directions[end]), nullptr)) { - pathDistance = nav.GetPathDistanceRemaining(); - } else { - bRaceRouteError = true; + if (start == end) { + short segment = nav.GetSegmentInd(); + + do { + float distance = static_cast(nav.GetSegment()->nLength) * 0.015259022f * (1.0f - nav.GetSegTime()); + + if (distance < 0.01f) { + distance = 0.01f; + } + + segmentDistance += distance; + nav.IncNavPosition(distance, UMath::Vector4To3(directions[end]), 0.0f); + } while (segment == nav.GetSegmentInd()); + } + + bMemSet(shortcutAllowed, 1, sizeof(shortcutAllowed)); + + { + bool noShortcuts = true; + + do { + PathSegment pathSegment; + + nav.FindPathNow(&UMath::Vector4To3(positions[end]), &UMath::Vector4To3(directions[end]), shortcutAllowed); + if (nav.GetNavType() != WRoadNav::kTypePath) { + break; + } + + WRoadNetwork::Get().AddRaceSegments(&nav); + pathDistance = nav.GetPathDistanceRemaining(); + + { + unsigned char shortcut = nav.FirstShortcutInPath(); + + noShortcuts = shortcut == 0xFF; + if (!noShortcuts) { + shortcutAllowed[shortcut] = 0; + } + } + + pathSegment.Length = pathDistance; + for (int i = 0; i < nav.GetNumPathSegments(); ++i) { + const WRoadSegment *roadSegment = WRoadNetwork::Get().GetSegment(nav.GetPathSegment(i)); + + if (!(roadSegment->fFlags & 1)) { + pathSegment.Roads.insert(roadSegment->fRoadID); + } + } + + pathSegments.insert(pathSegment); + } while (!noShortcuts); + + pathDistance += segmentDistance; + if (noShortcuts && pathSegments.size() == 0) { + bRaceRouteError = true; + } + } + + if (pathSegments.size() > 1) { + PathSegment *sortedPaths[32]; + int count = 0; + + for (UTL::Std::set::iterator it = pathSegments.begin(); it != pathSegments.end(); ++it) { + sortedPaths[count++] = const_cast(&*it); + } + + for (int i = 1; i < count; ++i) { + PathSegment *current = sortedPaths[i]; + PathSegment *previous = sortedPaths[i - 1]; + UTL::Std::set roadDiff; + float roadDiffLength = 0.0f; + + std::set_difference( + previous->Roads.begin(), + previous->Roads.end(), + current->Roads.begin(), + current->Roads.end(), + std::insert_iterator >(roadDiff, roadDiff.begin())); + + for (UTL::Std::set::iterator it = roadDiff.begin(); it != roadDiff.end(); ++it) { + roadDiffLength += static_cast(WRoadNetwork::Get().GetRoad(*it)->nLength) * 0.061036088f; + } + + if (roadDiffLength > 0.0f) { + for (UTL::Std::set::iterator it = roadDiff.begin(); it != roadDiff.end(); ++it) { + WRoad *road = const_cast(WRoadNetwork::Get().GetRoad(*it)); + int scale = static_cast((((current->Length - previous->Length) + roadDiffLength) / roadDiffLength) * 65536.0f); + + road->nScale = static_cast(scale >> 8); + } + } + } } return pathDistance; diff --git a/src/Speed/Indep/Src/World/WRoadNetwork.h b/src/Speed/Indep/Src/World/WRoadNetwork.h index 0a2b584f4..d10eee692 100644 --- a/src/Speed/Indep/Src/World/WRoadNetwork.h +++ b/src/Speed/Indep/Src/World/WRoadNetwork.h @@ -57,7 +57,9 @@ class WRoadNetwork : public Debugable { // const WRoadNode *GetNode(int index) {} - // const WRoad *GetRoad(int index) {} + const WRoad *GetRoad(int index) { + return &fRoads[index]; + } // const WRoadProfile *GetProfile(int index) {} @@ -78,6 +80,7 @@ class WRoadNetwork : public Debugable { void ResetShortcuts(); void ResetRaceSegments(); + void AddRaceSegments(WRoadNav *road_nav); // unsigned int GetNumRoads() {} @@ -201,6 +204,7 @@ class WRoadNav { bool FindPath(const UMath::Vector3 *goal_position, const UMath::Vector3 *goal_direction, char *shortcut_allowed); bool FindPathNow(const UMath::Vector3 *goal_position, const UMath::Vector3 *goal_direction, char *shortcut_allowed); bool FindingPath(); + unsigned char FirstShortcutInPath(); float GetPathDistanceRemaining(); bool IsPointInCookieTrail(const UMath::Vector3 &position_3d, float margin); bool IsSegmentInCookieTrail(int segment_number, bool use_whole_path); @@ -310,6 +314,26 @@ class WRoadNav { return fNodeInd; } + unsigned short GetPathSegment(int n) { + return pPathSegments[n]; + } + + unsigned short *GetPathSegments() { + return pPathSegments; + } + + void SetNumPathSegments(int n) { + nPathSegments = n; + } + + int GetNumPathSegments() { + return nPathSegments; + } + + float GetSegTime() const { + return fSegTime; + } + char HitDeadEnd() const { return fDeadEnd; } From 1c85578eeec727b76b58b9f1183aeeeea5581624 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 02:00:10 +0100 Subject: [PATCH 279/691] 55.1%: restore race segment path search --- src/Speed/Indep/Src/World/WRoadNetwork.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/World/WRoadNetwork.h b/src/Speed/Indep/Src/World/WRoadNetwork.h index d10eee692..84ee34573 100644 --- a/src/Speed/Indep/Src/World/WRoadNetwork.h +++ b/src/Speed/Indep/Src/World/WRoadNetwork.h @@ -15,6 +15,7 @@ #include "types.h" extern class WRoadNetwork *fgRoadNetwork; +class WRoadNav; // total size: 0x1 class WRoadNetwork : public Debugable { @@ -80,7 +81,7 @@ class WRoadNetwork : public Debugable { void ResetShortcuts(); void ResetRaceSegments(); - void AddRaceSegments(WRoadNav *road_nav); + void AddRaceSegments(class WRoadNav *road_nav); // unsigned int GetNumRoads() {} From 4861610e84beb747b0ab0e96f505ce9b6c1bbe87 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 02:07:34 +0100 Subject: [PATCH 280/691] 55.7%: restore race index packing --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 139 ++++++++++++++++--- 1 file changed, 118 insertions(+), 21 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index caddfadfa..357bfadcd 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -50,6 +50,68 @@ struct PathSegment { UTL::Std::set Roads; }; +template struct FixedPoint { + FixedPoint(float val) + : mValue(static_cast(static_cast(val * static_cast(GetScale())))) {} + + static int GetScale(); + + T mValue; +}; + +template +int FixedPoint::GetScale() { + return 1 << FractionBits; +} + +template +struct FloatingPoint { + FloatingPoint(float val) { + bool neg = val < 0.0f; + int man = 0; + int exp = 0; + + if (neg) { + val = -val; + } + + if (0.0f < val) { + while (val < static_cast(GetNormalizedLower())) { + exp--; + val *= 10.0f; + } + + man = static_cast(val); + while (GetNormalizedUpper() <= man) { + exp++; + man /= 10; + } + } + + if (neg) { + man = -man; + } + + mValue = static_cast((exp << MantissaBits) | (man & ((1 << MantissaBits) - 1))); + } + + static int GetNormalizedLower(); + + static int GetNormalizedUpper(); + + T mValue; +}; + +template +int FloatingPoint::GetNormalizedLower() { + return 1 << (MantissaBits - 1); +} + +template +int FloatingPoint::GetNormalizedUpper() { + return 1 << MantissaBits; +} + static const float Tweak_GlueSpreadData_Low[5] = { 1000.0f, 900.0f, @@ -655,93 +717,128 @@ GRaceParameters::~GRaceParameters() { void GRaceParameters::GenerateIndex(GRaceIndexData *index) { unsigned int flags; + unsigned int *indexWords; char *indexBytes; - float topLeft[2]; - float botRight[2]; + UMath::Vector2 topLeft; + UMath::Vector2 botRight; + float timeOfDay; if (!index) { return; } + indexWords = reinterpret_cast(index); indexBytes = reinterpret_cast(index); - bMemSet(indexBytes, 0, 0x30); - *reinterpret_cast(indexBytes + 0x00) = GetCollectionKey(); - *reinterpret_cast(indexBytes + 0x10) = GetChallengeType(); - *reinterpret_cast(indexBytes + 0x14) = GetEventHash(); - *reinterpret_cast(indexBytes + 0x18) = 0; + indexWords[0] = GetCollectionKey(); + indexWords[5] = GetEventHash(); + *reinterpret_cast(indexBytes + 0x20) = GetLocalizationTag(); *reinterpret_cast(indexBytes + 0x1C) = GetRaceLengthMeters(); - *reinterpret_cast(indexBytes + 0x20) = static_cast(GetLocalizationTag()); - *reinterpret_cast(indexBytes + 0x22) = static_cast(GetCashValue()); - *reinterpret_cast(indexBytes + 0x26) = static_cast(GetRivalBestTime() * 8.0f); - indexBytes[0x29] = static_cast(GetRegion()); + *reinterpret_cast(indexBytes + 0x26) = + FixedPoint(GetRivalBestTime()).mValue; + *reinterpret_cast(indexBytes + 0x24) = + FloatingPoint(static_cast(GetReputation())).mValue; + *reinterpret_cast(indexBytes + 0x22) = + FloatingPoint(GetCashValue()).mValue; + indexWords[4] = GetChallengeType(); + *reinterpret_cast(indexBytes + 0x0E) = + FloatingPoint(GetChallengeGoal()).mValue; + indexBytes[0x28] = static_cast(GetNumLaps()); indexBytes[0x2A] = static_cast(GetCopDensity()); indexBytes[0x2B] = static_cast(GetRaceType()); + indexBytes[0x29] = static_cast(GetRegion()); flags = 0; + indexWords[6] = 0; if (GetInitiallyUnlockedQuickRace()) { flags |= 1 << 0; } + indexWords[6] = flags; if (GetInitiallyUnlockedOnline()) { flags |= 1 << 1; } + indexWords[6] = flags; if (GetInitiallyUnlockedChallenge()) { flags |= 1 << 2; } + indexWords[6] = flags; if (GetCanBeReversed()) { flags |= 1 << 3; } + indexWords[6] = flags; if (GetIsDDayRace()) { flags |= 1 << 4; } + indexWords[6] = flags; if (GetIsBossRace()) { flags |= 1 << 5; } + indexWords[6] = flags; if (GetIsMarkerRace()) { flags |= 1 << 6; } + indexWords[6] = flags; if (GetIsPursuitRace()) { flags |= 1 << 7; } + indexWords[6] = flags; if (GetIsLoopingRace()) { flags |= 1 << 8; } + indexWords[6] = flags; if (GetRankPlayersByPoints()) { flags |= 1 << 9; } + indexWords[6] = flags; if (GetRankPlayersByDistance()) { flags |= 1 << 10; } + indexWords[6] = flags; if (GetCopsEnabled()) { flags |= 1 << 11; } + indexWords[6] = flags; if (GetScriptedCopsInRace()) { flags |= 1 << 12; } - if (GetTimeOfDay() > 0.8f) { + indexWords[6] = flags; + timeOfDay = GetTimeOfDay(); + if (0.8f < timeOfDay) { flags |= 1 << 13; } + indexWords[6] = flags; if (GetNeverInQuickRace()) { flags |= 1 << 14; } + indexWords[6] = flags; if (GetIsChallengeSeriesRace()) { flags |= 1 << 15; } + indexWords[6] = flags; if (GetIsCollectorsEditionRace()) { flags |= 1 << 16; } - if (GetTimeOfDay() <= 0.8f && GetTimeOfDay() >= 0.0f) { - flags |= 1 << 17; + indexWords[6] = flags; + timeOfDay = GetTimeOfDay(); + if (timeOfDay < 0.8f) { + timeOfDay = GetTimeOfDay(); + if (0.0f <= timeOfDay) { + flags = indexWords[6] | (1 << 17); + indexWords[6] = flags; + } + } else { + flags = indexWords[6] | (1 << 13); + indexWords[6] = flags; } - *reinterpret_cast(indexBytes + 0x04) = static_cast(flags); - bSafeStrCpy(indexBytes + 0x06, GetEventID(), 10); + bMemSet(indexWords + 1, 0, 10); + bSafeStrCpy(reinterpret_cast(indexWords + 1), GetEventID(), 10); - GetBoundingBox(*reinterpret_cast(topLeft), *reinterpret_cast(botRight)); - indexBytes[0x2C] = static_cast(topLeft[0] * 255.0f); - indexBytes[0x2D] = static_cast(topLeft[1] * 255.0f); - indexBytes[0x2E] = static_cast(botRight[0] * 255.0f); - indexBytes[0x2F] = static_cast(botRight[1] * 255.0f); + GetBoundingBox(topLeft, botRight); + indexBytes[0x2C] = static_cast(topLeft.x * 255.0f); + indexBytes[0x2D] = static_cast(topLeft.y * 255.0f); + indexBytes[0x2E] = static_cast(botRight.x * 255.0f); + indexBytes[0x2F] = static_cast(botRight.y * 255.0f); } void GRaceParameters::EnsureLoaded() const { From a90390daac52155409a0cf0f030fb25fd8fbcf13 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 02:10:23 +0100 Subject: [PATCH 281/691] 56.1%: restore race bounding box fallback --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 64 ++++++++++++++++---- src/Speed/Indep/Src/World/TrackInfo.hpp | 2 + 2 files changed, 54 insertions(+), 12 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 357bfadcd..ee421f2ef 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -25,6 +25,7 @@ #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" #include "Speed/Indep/Src/Sim/Simulation.h" #include "Speed/Indep/Src/World/WRoadNetwork.h" +#include "Speed/Indep/Src/World/TrackInfo.hpp" #include "Speed/Indep/Src/World/WorldModel.hpp" #include "Speed/Indep/Src/World/TrackStreamer.hpp" #include "Speed/Indep/bWare/Inc/bWare.hpp" @@ -36,6 +37,11 @@ void SetCurrentTimeOfDay(float value); void SetOverRideRainIntensity(float intensity); extern int UnlockAllThings; +class Minimap { + public: + static void ConvertPos(bVector2 &worldPos, bVector2 &minimapPos, TrackInfo *track); +}; + GRaceStatus *GRaceStatus::fObj = nullptr; DECLARE_CONTAINER_TYPE(ID_ROAD_SET); @@ -895,26 +901,60 @@ unsigned int GRaceParameters::GetCollectionKey() const { } void GRaceParameters::GetBoundingBox(UMath::Vector2 &topLeft, UMath::Vector2 &botRight) const { - float *topLeftValues; - float *botRightValues; + UMath::Vector3 pos; + float x1; + float x2; + float y1; + float y2; + TrackInfo *trackInfo; + bVector2 topLeftWorld; + bVector2 botRightWorld; + bVector2 topLeftMap; + bVector2 botRightMap; - topLeftValues = reinterpret_cast(&topLeft); - botRightValues = reinterpret_cast(&botRight); if (mIndex) { const unsigned char *indexBytes; indexBytes = reinterpret_cast(mIndex); - topLeftValues[0] = indexBytes[0x2C] * (1.0f / 255.0f); - topLeftValues[1] = indexBytes[0x2D] * (1.0f / 255.0f); - botRightValues[0] = indexBytes[0x2E] * (1.0f / 255.0f); - botRightValues[1] = indexBytes[0x2F] * (1.0f / 255.0f); + topLeft.x = indexBytes[0x2C] * (1.0f / 255.0f); + topLeft.y = indexBytes[0x2D] * (1.0f / 255.0f); + botRight.x = indexBytes[0x2E] * (1.0f / 255.0f); + botRight.y = indexBytes[0x2F] * (1.0f / 255.0f); return; } - topLeftValues[0] = 0.0f; - topLeftValues[1] = 0.0f; - botRightValues[0] = 0.0f; - botRightValues[1] = 0.0f; + EnsureLoaded(); + GetStartPosition(pos); + x1 = pos.z; + x2 = pos.z; + y1 = -pos.x; + y2 = y1; + + if (HasFinishLine()) { + GetFinishPosition(pos); + x1 = std::min(pos.z, x1); + x2 = std::max(x2, pos.z); + y1 = std::min(-pos.x, y1); + y2 = std::max(y2, -pos.x); + } + + for (unsigned int onCheck = 0; onCheck < GetNumCheckpoints(); ++onCheck) { + GetCheckpointPosition(onCheck, pos); + x1 = std::min(pos.z, x1); + x2 = std::max(x2, pos.z); + y1 = std::min(-pos.x, y1); + y2 = std::max(y2, -pos.x); + } + + trackInfo = TrackInfo::GetTrackInfo(2000); + topLeftWorld = bVector2(x1, y1); + botRightWorld = bVector2(x2, y2); + Minimap::ConvertPos(topLeftWorld, topLeftMap, trackInfo); + Minimap::ConvertPos(botRightWorld, botRightMap, trackInfo); + topLeft.x = topLeftMap.x; + topLeft.y = topLeftMap.y; + botRight.x = botRightMap.x; + botRight.y = botRightMap.y; } float GRaceParameters::GetRaceLengthMeters() const { diff --git a/src/Speed/Indep/Src/World/TrackInfo.hpp b/src/Speed/Indep/Src/World/TrackInfo.hpp index f2cd58ff0..0f46ed9ea 100644 --- a/src/Speed/Indep/Src/World/TrackInfo.hpp +++ b/src/Speed/Indep/Src/World/TrackInfo.hpp @@ -77,6 +77,8 @@ class TrackInfo { float TrackMapZoomWidth; // offset 0x118, size 0x4 char TrackMapStartZoomed; // offset 0x11C, size 0x1 + static TrackInfo *GetTrackInfo(int trackNumber); + const char *GetLoadedTrackInfo() { return this->RegionName; } From 688ec26e214e5221f71e4a158bc63bdd784c7bdc Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 02:11:34 +0100 Subject: [PATCH 282/691] 56.2%: tighten race parameter constructors --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index ee421f2ef..55ef0d85e 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -73,11 +73,12 @@ int FixedPoint::GetScale() { template struct FloatingPoint { FloatingPoint(float val) { - bool neg = val < 0.0f; + bool neg = false; int man = 0; int exp = 0; - if (neg) { + if (val < 0.0f) { + neg = true; val = -val; } @@ -88,7 +89,7 @@ struct FloatingPoint { } man = static_cast(val); - while (GetNormalizedUpper() <= man) { + while (man >= GetNormalizedUpper()) { exp++; man /= 10; } @@ -98,7 +99,7 @@ struct FloatingPoint { man = -man; } - mValue = static_cast((exp << MantissaBits) | (man & ((1 << MantissaBits) - 1))); + mValue = static_cast(((exp & 0x1F) << MantissaBits) | (man & ((1 << MantissaBits) - 1))); } static int GetNormalizedLower(); @@ -907,10 +908,6 @@ void GRaceParameters::GetBoundingBox(UMath::Vector2 &topLeft, UMath::Vector2 &bo float y1; float y2; TrackInfo *trackInfo; - bVector2 topLeftWorld; - bVector2 botRightWorld; - bVector2 topLeftMap; - bVector2 botRightMap; if (mIndex) { const unsigned char *indexBytes; @@ -947,8 +944,10 @@ void GRaceParameters::GetBoundingBox(UMath::Vector2 &topLeft, UMath::Vector2 &bo } trackInfo = TrackInfo::GetTrackInfo(2000); - topLeftWorld = bVector2(x1, y1); - botRightWorld = bVector2(x2, y2); + bVector2 topLeftWorld(x1, y1); + bVector2 botRightWorld(x2, y2); + bVector2 topLeftMap; + bVector2 botRightMap; Minimap::ConvertPos(topLeftWorld, topLeftMap, trackInfo); Minimap::ConvertPos(botRightWorld, botRightMap, trackInfo); topLeft.x = topLeftMap.x; From 0c577aec09570049cfbcc13a70a2b42a91469997 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 02:13:45 +0100 Subject: [PATCH 283/691] 56.2%: refine race parameter bounds --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 55ef0d85e..e49075e1f 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -929,17 +929,17 @@ void GRaceParameters::GetBoundingBox(UMath::Vector2 &topLeft, UMath::Vector2 &bo if (HasFinishLine()) { GetFinishPosition(pos); - x1 = std::min(pos.z, x1); + x1 = std::min(x1, pos.z); x2 = std::max(x2, pos.z); - y1 = std::min(-pos.x, y1); + y1 = std::min(y1, -pos.x); y2 = std::max(y2, -pos.x); } for (unsigned int onCheck = 0; onCheck < GetNumCheckpoints(); ++onCheck) { GetCheckpointPosition(onCheck, pos); - x1 = std::min(pos.z, x1); + x1 = std::min(x1, pos.z); x2 = std::max(x2, pos.z); - y1 = std::min(-pos.x, y1); + y1 = std::min(y1, -pos.x); y2 = std::max(y2, -pos.x); } From 363fea146c0fc8e152d59d4a71f1c529c2dd8449 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 02:25:18 +0100 Subject: [PATCH 284/691] 56.7%: recover emergency stock car selection --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 31 +++++++++++++---------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 3f8bc46b1..46d1cb86a 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -10,6 +10,7 @@ #include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" #include "Speed/Indep/Src/Interfaces/SimActivities/INIS.h" #include "Speed/Indep/Src/Interfaces/Simables/IAI.h" +#include "Speed/Indep/Src/Interfaces/Simables/IArticulatedVehicle.h" #include "Speed/Indep/Src/Misc/LZCompress.hpp" #include "Speed/Indep/Src/Misc/Platform.h" #include "Speed/Indep/Src/Sim/Simulation.h" @@ -1612,27 +1613,31 @@ ISimable *GManager::GetStockCar(const char *carName) { } ISimable *GManager::GetRandomEmergencyStockCar() { - StockCarMap::iterator it; - int index; - ISimable *stockCar; + typedef UTL::Std::vector CandidateCars; - if (mStockCars.empty()) { + CandidateCars candidates; + GRaceParameters *raceParms = GRaceStatus::Exists() ? GRaceStatus::Get().GetRaceParameters() : nullptr; + ISimable *stockCar = nullptr; + + if (raceParms && raceParms->GetRaceType() != 2) { return nullptr; } - index = bRandom(static_cast(mStockCars.size())); - it = mStockCars.begin(); - while (index > 0 && it != mStockCars.end()) { - ++it; - index--; + candidates.reserve(mStockCars.size()); + for (StockCarMap::iterator it = mStockCars.begin(); it != mStockCars.end(); ++it) { + IArticulatedVehicle *iarticulation; + + if (!it->second || !it->second->QueryInterface(&iarticulation)) { + candidates.push_back(it); + } } - if (it == mStockCars.end()) { - return nullptr; + if (!candidates.empty()) { + StockCarMap::iterator it = candidates[bRandom(static_cast(candidates.size()))]; + stockCar = it->second; + mStockCars.erase(it); } - stockCar = it->second; - mStockCars.erase(it); return stockCar; } From 17e4c60549dbbfdc76efd76822d678b72df78ac5 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 02:28:06 +0100 Subject: [PATCH 285/691] 58.3%: add activity state handler gathering --- src/Speed/Indep/Src/Gameplay/GActivity.cpp | 60 +++++++++++++++++++ .../Indep/Src/Gameplay/GRuntimeInstance.h | 4 ++ 2 files changed, 64 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GActivity.cpp b/src/Speed/Indep/Src/Gameplay/GActivity.cpp index f3d870d67..c44811f09 100644 --- a/src/Speed/Indep/Src/Gameplay/GActivity.cpp +++ b/src/Speed/Indep/Src/Gameplay/GActivity.cpp @@ -4,6 +4,40 @@ #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" #include "Speed/Indep/bWare/Inc/bWare.hpp" +template struct GObjectIteratorTraits; + +template <> struct GObjectIteratorTraits { + enum { kType = kGameplayObjType_State }; +}; + +template class GObjectIterator { + public: + GObjectIterator(unsigned int) + : mInstance(static_cast(GRuntimeInstance::sRingListHead[GObjectIteratorTraits::kType])) // + , mHead(mInstance) {} + + bool IsValid() const { + return mInstance != nullptr; + } + + T *GetInstance() const { + return mInstance; + } + + void Advance() { + if (!mInstance) { + return; + } + + GRuntimeInstance *next = mInstance->GetNextRuntimeInstance(); + mInstance = next == mHead ? nullptr : static_cast(next); + } + + private: + T *mInstance; + GRuntimeInstance *mHead; +}; + GActivity::GActivity(const Attrib::Key &activityKey) : GRuntimeInstance(activityKey, kGameplayObjType_Activity) // , mCurrentState(nullptr) // @@ -20,6 +54,32 @@ GActivity::~GActivity() { mStateHandlers.clear(); } +void GActivity::GatherStatesAndHandlers() { + if (!mStateHandlers.empty()) { + mStateHandlers.clear(); + } + + GObjectIterator iter(0xFFFFFFFF); + while (iter.IsValid()) { + GState *state = iter.GetInstance(); + + if (CollectionIsStateForActivity(state)) { + mStateHandlers[state].clear(); + } + + iter.Advance(); + } + + for (StateToHandlers::iterator iterState = mStateHandlers.begin(); iterState != mStateHandlers.end(); ++iterState) { + GState *state = iterState->first; + UTL::Std::vector &handlerVec = iterState->second; + unsigned int handlerCount = StoreHandlers(state, nullptr); + + handlerVec.reserve(handlerCount); + StoreHandlers(state, &handlerVec); + } +} + void GActivity::Run() { if (mRunning) { return; diff --git a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.h b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.h index 97a1abced..47eafe506 100644 --- a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.h +++ b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.h @@ -70,6 +70,10 @@ class GRuntimeInstance : public Attrib::Gen::gameplay { mFlags = mFlags | static_cast(flag); } + GRuntimeInstance *GetNextRuntimeInstance() const { + return mNext; + } + static GRuntimeInstance *sRingListHead[6]; private: From 7226c851e7443b2f61b4beacc569d6aa8a9677f4 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 02:31:15 +0100 Subject: [PATCH 286/691] 58.6%: add gameplay vehicle cache query handling --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 39 +++++++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GManager.h | 1 + 2 files changed, 40 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 46d1cb86a..ba7fb15df 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -9,6 +9,7 @@ #include "Speed/Indep/Src/Gameplay/GVault.h" #include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" #include "Speed/Indep/Src/Interfaces/SimActivities/INIS.h" +#include "Speed/Indep/Src/Interfaces/SimActivities/ITrafficMgr.h" #include "Speed/Indep/Src/Interfaces/Simables/IAI.h" #include "Speed/Indep/Src/Interfaces/Simables/IArticulatedVehicle.h" #include "Speed/Indep/Src/Misc/LZCompress.hpp" @@ -1937,6 +1938,44 @@ void GManager::OnRemovedVehicleCache(IVehicle *ivehicle) { } } +eVehicleCacheResult GManager::OnQueryVehicleCache(const IVehicle *removethis, const IVehicleCache *whosasking) const { + GManager *self = const_cast(this); + + for (StockCarMap::iterator it = self->mStockCars.begin(); it != self->mStockCars.end(); ++it) { + IVehicle *stockCar = nullptr; + + if (it->second && it->second->QueryInterface(&stockCar) && UTL::COM::ComparePtr(stockCar, removethis)) { + if (!UTL::COM::ComparePtr(whosasking, INIS::Get())) { + return VCR_WANT; + } + + self->mStockCars.erase(it); + return VCR_DONTCARE; + } + } + + for (GCharacterList::const_iterator it = mActiveCharacters.begin(); it != mActiveCharacters.end(); ++it) { + GCharacter *character = *it; + IVehicle *vehicle = character->GetSpawnedVehicle(); + + if (!UTL::COM::ComparePtr(vehicle, removethis)) { + continue; + } + + if (vehicle && character->IsFlagSet(GCharacter::kCharFlag_UsingStockCar)) { + return VCR_DONTCARE; + } + + if (UTL::COM::ComparePtr(whosasking, ITrafficMgr::Get()) || vehicle->GetOffscreenTime() == 0.0f) { + return VCR_DONTCARE; + } + + return character == mActiveCharacters.front() ? VCR_DONTCARE : VCR_WANT; + } + + return VCR_DONTCARE; +} + void GManager::SuspendAllBinActivities() { for (unsigned int i = 0; i < GRaceDatabase::Get().GetBinCount(); ++i) { GRaceBin *bin = GRaceDatabase::Get().GetBin(i); diff --git a/src/Speed/Indep/Src/Gameplay/GManager.h b/src/Speed/Indep/Src/Gameplay/GManager.h index b6fb5d4e8..5306b5de8 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.h +++ b/src/Speed/Indep/Src/Gameplay/GManager.h @@ -71,6 +71,7 @@ class GManager : public UTL::COM::Object, public IVehicleCache { const char *GetCacheName() const override { return "GManager"; } void OnRemovedVehicleCache(IVehicle *ivehicle) override; + eVehicleCacheResult OnQueryVehicleCache(const IVehicle *removethis, const IVehicleCache *whosasking) const override; void InitializeVaults(); void InitializeRaceStreaming(); From 0cb5eb9991846ae756c94c2e5958be707e50911b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 02:45:21 +0100 Subject: [PATCH 287/691] 58.9%: add character usefulness checks --- src/Speed/Indep/Src/Gameplay/GCharacter.cpp | 52 +++++++++++++ src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 80 +++++++++++++++++++- 2 files changed, 129 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp index 855f5e3fb..1a5a2efb8 100644 --- a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp +++ b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp @@ -6,6 +6,7 @@ #include "Speed/Indep/Src/AI/AITarget.h" #include "Speed/Indep/Src/Generated/Messages/MSetTrafficSpeed.h" #include "Speed/Indep/Src/Interfaces/Simables/IAI.h" +#include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" #include "Speed/Indep/Src/Interfaces/Simables/ISimable.h" #include "Speed/Indep/Src/Physics/PVehicle.h" #include "Speed/Indep/Src/World/WCollisionMgr.h" @@ -209,6 +210,57 @@ void GCharacter::UnspawnWhenOffscreen() { } } +bool GCharacter::IsNoLongerUseful() const { + IVehicle *vehicle = mVehicle; + + if (!IsSpawned()) { + return false; + } + + if (vehicle->GetOffscreenTime() < 0.5f) { + return false; + } + + IVehicle *otherVehicle = IVehicle::First(VEHICLE_RACERS); + for (int i = 0; i < IVehicle::Count(VEHICLE_RACERS); ++i) { + ISimable *simable = otherVehicle ? otherVehicle->GetSimable() : nullptr; + + if (!otherVehicle->IsDestroyed() && simable) { + const IRigidBody *rigidBody = simable->GetRigidBody(); + + if (rigidBody) { + UMath::Vector3 direction; + UMath::Vector3 forward; + float distance; + + UMath::Sub(vehicle->GetPosition(), otherVehicle->GetPosition(), direction); + distance = UMath::Normalize(direction); + if (distance < 100.0f) { + return false; + } + + rigidBody->GetForwardVector(forward); + if (UMath::Dot(direction, forward) >= 0.0f) { + return false; + } + } + } + + { + const IVehicle::List &vehicles = IVehicle::GetList(VEHICLE_RACERS); + IVehicle::List::const_iterator found = std::find(vehicles.begin(), vehicles.end(), otherVehicle); + + if (found == vehicles.end() || ++found == vehicles.end()) { + otherVehicle = nullptr; + } else { + otherVehicle = *found; + } + } + } + + return true; +} + IVehicle *GCharacter::GetSpawnedVehicle() const { return mVehicle; } diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index e49075e1f..18d666283 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -35,6 +35,7 @@ void SetCurrentTimeOfDay(float value); void SetOverRideRainIntensity(float intensity); +const char *GetLocalizedString(unsigned int hash); extern int UnlockAllThings; class Minimap { @@ -2366,12 +2367,85 @@ void GRaceStatus::ClearRacers() { GRacerInfo &GRaceStatus::AddSimablePlayer(ISimable *isim) { int index = mRacerCount; GRacerInfo &info = mRacerInfo[index]; + const char *name; + + ++mRacerCount; + + info.mhSimable = nullptr; + info.mGameCharacter = nullptr; + info.mName = nullptr; + info.mIndex = 0; + info.mRanking = 0; + info.mAiRanking = 0; + info.mPctRaceComplete = 0.0f; + info.mKnockedOut = false; + info.mTotalled = false; + info.mEngineBlown = false; + info.mBusted = false; + info.mChallengeComplete = false; + info.mFinishedRacing = false; + info.mCameraDetached = false; + info.mPctLapComplete = 0.0f; + info.mLapsCompleted = 0; + info.mCheckpointsHitThisLap = 0; + info.mTollboothsCrossed = 0; + + for (int i = 0; i < 16; ++i) { + info.mTimeRemainingToBooth[i] = 0.0f; + } + + info.mSpeedTrapsCrossed = 0; + for (int i = 0; i < 16; ++i) { + info.mSpeedTrapSpeed[i] = 0.0f; + info.mSpeedTrapPosition[i] = -1; + } + + info.mDistToNextCheckpoint = 0.0f; + info.mDistanceDriven = 0.0f; + info.mTopSpeed = 0.0f; + info.mFinishingSpeed = 0.0f; + info.mPoundsNOSUsed = 0.0f; + info.mTimeCrossedLastCheck = 0.0f; + info.mTotalUpdateTime = 0.0f; + info.mNumPerfectShifts = 0; + info.mNumTrafficCarsHit = 0; + info.mSpeedBreakerTime = 0.0f; + info.mPointTotal = 0.0f; + info.mZeroToSixtyTime = 0.0f; + info.mQuarterMileTime = 0.0f; +#ifndef EA_BUILD_A124 + for (int i = 0; i < 4; ++i) { + info.mSplitTimes[i] = 0.0f; + info.mSplitRankings[i] = 0; + } +#endif + info.mRaceTimer.Stop(); + info.mRaceTimer.Reset(0.0f); + info.mLapTimer.Stop(); + info.mLapTimer.Reset(0.0f); + info.mCheckTimer.Stop(); + info.mCheckTimer.Reset(0.0f); + info.mSavedPosition = UMath::Vector3::kZero; + info.mSavedHeatLevel = 0.0f; + info.mSavedDirection = UMath::Vector3::kZero; + info.mSavedSpeed = 0.0f; +#ifndef EA_BUILD_A124 + info.mDNF = false; +#endif - info.ClearAll(); info.SetSimable(isim); info.SetIndex(index); - info.SetRanking(index); - ++mRacerCount; + + if (Sim::GetUserMode() == 1) { + name = GetLocalizedString(mRacerCount == 1 ? 0x7B070984 : 0x7B070985); + } else { + IPlayer *player = isim ? isim->GetPlayer() : nullptr; + UserProfile *profile = player ? FEDatabase->CurrentUserProfiles[player->GetSettingsIndex()] : nullptr; + + name = profile ? profile->GetProfileName() : GetLocalizedString(0xF760EABE); + } + + info.SetName(name); return info; } From 34fbed7172245687c92024ee68ac43981618a624 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 09:24:29 +0100 Subject: [PATCH 288/691] 59.2%: add activity variable deserialization --- src/Speed/Indep/Src/Gameplay/GActivity.cpp | 44 ++++++++++++++++++++++ src/Speed/Indep/Src/Lua/LuaRuntime.h | 2 + 2 files changed, 46 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GActivity.cpp b/src/Speed/Indep/Src/Gameplay/GActivity.cpp index c44811f09..f9c4c6c14 100644 --- a/src/Speed/Indep/Src/Gameplay/GActivity.cpp +++ b/src/Speed/Indep/Src/Gameplay/GActivity.cpp @@ -3,6 +3,8 @@ #include "GManager.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" #include "Speed/Indep/bWare/Inc/bWare.hpp" +#include "Speed/Indep/Src/Lua/LuaRuntime.h" +#include "Speed/Indep/Src/Lua/source/lua.h" template struct GObjectIteratorTraits; @@ -170,3 +172,45 @@ void GActivity::SerializeVars(bool abandonLuaTable) { mVarsInLuaVM = false; } } + +void GActivity::DeserializeVars() { + unsigned char *buffer = reinterpret_cast(GManager::Get().GetObjectStateBlock(GetCollection())); + + if (buffer) { + bool handlerListWasEmpty = mStateHandlers.empty(); + SerializedHeader header; + + if (handlerListWasEmpty) { + GatherStatesAndHandlers(); + } + + bMemCpy(&header, buffer, sizeof(header)); + if (header.mStateNameHash != 0) { + for (StateToHandlers::iterator iterState = mStateHandlers.begin(); iterState != mStateHandlers.end(); ++iterState) { + GState *state = iterState->first; + + if (header.mStateNameHash == Attrib::StringHash32(state->Name(0))) { + mCurrentState = state; + break; + } + } + } + + if (header.mTableBytes != 0) { + lua_State *luaState = LuaRuntime::Get().GetState(); + unsigned int bytesLoaded = LuaRuntime::DeserializeTable(luaState, buffer + sizeof(header), !Persistent(0)); + + if (bytesLoaded != 0) { + lua_pushstring(luaState, CollectionName()); + lua_pushvalue(luaState, -2); + lua_settable(luaState, LUA_GLOBALSINDEX); + lua_settop(luaState, -2); + mVarsInLuaVM = true; + } + } + + if (handlerListWasEmpty && !mStateHandlers.empty()) { + mStateHandlers.clear(); + } + } +} diff --git a/src/Speed/Indep/Src/Lua/LuaRuntime.h b/src/Speed/Indep/Src/Lua/LuaRuntime.h index dd77e68f6..64f0d47c1 100644 --- a/src/Speed/Indep/Src/Lua/LuaRuntime.h +++ b/src/Speed/Indep/Src/Lua/LuaRuntime.h @@ -29,6 +29,8 @@ class LuaRuntime { void TakeResetSnapshot(); + static unsigned int DeserializeTable(lua_State *state, unsigned char *buffer, bool allowUserData); + static LuaRuntime &Get() { return *mObj; } From e2b502a3a5c6100abf3264247a63f6529ff705a9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 09:51:06 +0100 Subject: [PATCH 289/691] 60.055%: fix SetStartupRace context mangling --- src/Speed/Indep/Src/Gameplay/GActivity.cpp | 18 +++- src/Speed/Indep/Src/Gameplay/GManager.cpp | 88 ++++++++++++++++++- src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp | 41 ++++++++- .../Indep/Src/Gameplay/GRaceDatabase.cpp | 4 +- src/Speed/Indep/Src/Gameplay/GRaceDatabase.h | 2 +- 5 files changed, 144 insertions(+), 9 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GActivity.cpp b/src/Speed/Indep/Src/Gameplay/GActivity.cpp index f9c4c6c14..a4a5750b6 100644 --- a/src/Speed/Indep/Src/Gameplay/GActivity.cpp +++ b/src/Speed/Indep/Src/Gameplay/GActivity.cpp @@ -1,6 +1,7 @@ #include "GActivity.h" #include "GManager.h" +#include "Speed/Indep/Libs/Support/Miscellaneous/StringHash.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" #include "Speed/Indep/bWare/Inc/bWare.hpp" #include "Speed/Indep/Src/Lua/LuaRuntime.h" @@ -179,6 +180,7 @@ void GActivity::DeserializeVars() { if (buffer) { bool handlerListWasEmpty = mStateHandlers.empty(); SerializedHeader header; + const char *stateName; if (handlerListWasEmpty) { GatherStatesAndHandlers(); @@ -188,8 +190,18 @@ void GActivity::DeserializeVars() { if (header.mStateNameHash != 0) { for (StateToHandlers::iterator iterState = mStateHandlers.begin(); iterState != mStateHandlers.end(); ++iterState) { GState *state = iterState->first; + const char *const *stateNamePtr = + reinterpret_cast(state->GetAttributePointer(0x3E225EC1, 0)); - if (header.mStateNameHash == Attrib::StringHash32(state->Name(0))) { + if (!stateNamePtr) { + stateNamePtr = reinterpret_cast(Attrib::DefaultDataArea(sizeof(const char *))); + } + + stateName = *stateNamePtr; + if (header.mStateNameHash == stringhash32(stateName)) { + if (!state->GetAttributePointer(0x3E225EC1, 0)) { + Attrib::DefaultDataArea(sizeof(const char *)); + } mCurrentState = state; break; } @@ -201,9 +213,9 @@ void GActivity::DeserializeVars() { unsigned int bytesLoaded = LuaRuntime::DeserializeTable(luaState, buffer + sizeof(header), !Persistent(0)); if (bytesLoaded != 0) { - lua_pushstring(luaState, CollectionName()); + lua_pushstring(luaState, *reinterpret_cast(GetLayoutPointer())); lua_pushvalue(luaState, -2); - lua_settable(luaState, LUA_GLOBALSINDEX); + lua_settable(luaState, LUA_REGISTRYINDEX); lua_settop(luaState, -2); mVarsInLuaVM = true; } diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index ba7fb15df..1e70b7c7e 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -3,10 +3,12 @@ #include "Speed/Indep/Libs/Support/Utility/FastMem.h" #include "Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h" #include "Speed/Indep/Src/Generated/Events/EAutoSave.hpp" +#include "Speed/Indep/Src/Generated/Events/EFadeScreenOff.hpp" #include "Speed/Indep/Src/Generated/Events/EFadeScreenOn.hpp" #include "Speed/Indep/Src/Generated/Messages/MEnteringGameplay.h" #include "Speed/Indep/Src/Gameplay/GMarker.h" #include "Speed/Indep/Src/Gameplay/GVault.h" +#include "Speed/Indep/Src/Interfaces/SimActivities/ICopMgr.h" #include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" #include "Speed/Indep/Src/Interfaces/SimActivities/INIS.h" #include "Speed/Indep/Src/Interfaces/SimActivities/ITrafficMgr.h" @@ -40,6 +42,40 @@ void ApplyTimeOfDayTickOver(); void SetOverRideRainIntensity(float intensity); void ForEachTrackPositionMarker(bool (*callback)(TrackPositionMarker *marker, unsigned int tag), unsigned int tag); void LZByteSwapHeader(LZHeader *header); +void World_RestoreProps(); +void GPS_Disengage(); + +class IPursuit; + +class GCopMgrCompat : public UTL::COM::IUnknown { + public: + static HINTERFACE _IHandle() { + return (HINTERFACE)_IHandle; + } + + static GCopMgrCompat *Get() { + return reinterpret_cast(ICopMgr::Get()); + } + + virtual float GetLockoutTimeRemaining() const; + virtual bool VehicleSpawningEnabled(bool isdespawn); + virtual void SpawnCop(UMath::Vector3 &InitialPos, UMath::Vector3 &InitialVec, const char *VehicleName, bool InPursuit, bool RoadBlock); + virtual bool IsCopSpawnPending() const; + virtual void SetAllBustedTimersToZero(); + virtual void PursuitIsEvaded(IPursuit *ipursuit); + virtual bool IsCopRequestPending(); + virtual bool CanPursueRacers(); + virtual bool IsPlayerPursuitActive(); + virtual bool PlayerPursuitHasCop() const; + virtual void PursueAtHeatLevel(int minHeatLevel); + virtual void ResetCopsForRestart(bool release); + virtual void LockoutCops(bool lockout); + virtual void NoNewPursuitsOrCops(); + + protected: + GCopMgrCompat(UTL::COM::Object *owner) : UTL::COM::IUnknown(owner, _IHandle()) {} + virtual ~GCopMgrCompat() {} +}; GManager *GManager::mObj = nullptr; @@ -275,7 +311,7 @@ void GManager::PreBeginGameplay() { if (mRestartEventHash) { GRaceCustom *customRace = GRaceDatabase::Get().AllocCustomRace(GRaceDatabase::Get().GetRaceFromHash(mRestartEventHash)); - GRaceDatabase::Get().SetStartupRace(customRace, kRaceContext_Career); + GRaceDatabase::Get().SetStartupRace(customRace, GRace::kRaceContext_Career); GRaceDatabase::Get().FreeCustomRace(customRace); mRestartEventHash = 0; } @@ -365,7 +401,7 @@ void GManager::EndGameplay() { UnspawnAllIcons(); ClearAllSessionData(); WCollisionAssets::Get().RemovePackLoadCallback(NotifyCollisionPackLoaded); - GRaceDatabase::Get().SetStartupRace(nullptr, kRaceContext_Career); + GRaceDatabase::Get().SetStartupRace(nullptr, GRace::kRaceContext_Career); mInGameplay = false; mWorstHashCollision = 0; mOverrideFreeRoamStartMarker = 0; @@ -2136,6 +2172,54 @@ void GManager::ResetAllGameplayData() { mPendingSMS.clear(); } +void GManager::NotifyWorldService() { + if (!mWarping) { + return; + } + + if (TheTrackStreamer.IsLoadingInProgress() == 1) { + return; + } + + if (mWarpTargetMarker != 0) { + GMarker *marker = static_cast(FindInstance(mWarpTargetMarker)); + const UMath::Vector3 &position = marker->GetPosition(); + const UMath::Vector3 &direction = marker->GetDirection(); + IVehicle *vehicle = nullptr; + + if (IPlayer::First(PLAYER_LOCAL)->GetSimable()->QueryInterface(&vehicle)) { + vehicle->SetVehicleOnGround(position, direction); + vehicle->Activate(); + } + + mWarpTargetMarker = 0; + if (mWarpStartPursuit) { + World_RestoreProps(); + GPS_Disengage(); + ITrafficMgr::Get()->FlushAllTraffic(true); + GCopMgrCompat::Get()->ResetCopsForRestart(true); + GCopMgrCompat::Get()->LockoutCops(false); + GCopMgrCompat::Get()->PursueAtHeatLevel(1); + } + } + + if (mWarpStartPursuit) { + if (GCopMgrCompat::Get()->IsCopSpawnPending()) { + mWarpStartPursuit = false; + } else { + GCopMgrCompat::Get()->PursueAtHeatLevel(1); + goto done; + } + } + + mWarping = false; + +done: + if (!mWarping) { + new EFadeScreenOff(0x161A918); + } +} + bool GManager::WarpToMarker(unsigned int markerKey, bool startPursuit) { if (GRaceStatus::Exists() && GRaceStatus::Get().GetPlayMode() == GRaceStatus::kPlayMode_Racing) { return false; diff --git a/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp b/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp index c38666ab4..30d4227b7 100644 --- a/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp +++ b/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp @@ -1,6 +1,8 @@ #include "Speed/Indep/Src/Gameplay/GObjectBlock.h" #include "Speed/Indep/Src/Gameplay/GVault.h" +#include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" +#include "Speed/Indep/bWare/Inc/Strings.hpp" GObjectBlock::GObjectBlock(GVault *vault, unsigned char *buffer) : mVault(vault), // @@ -23,5 +25,42 @@ bool GObjectBlock::CollectionIsInstanceOfTemplate(Attrib::Gen::gameplay &instanc } unsigned int GObjectBlock::CalcNumConnections(unsigned int collectionKey) { - return 0; + Attrib::Class *gameplayClass = Attrib::Database::Get().GetClass(Attrib::Gen::gameplay::ClassKey()); + unsigned int numConnections; + Attrib::Gen::gameplay collection(collectionKey, 0, nullptr); + + numConnections = collection.Num_Children(); + if (collectionKey != 0) { + do { + Attrib::Gen::gameplay collection(collectionKey, 0, nullptr); + Attrib::AttributeIterator iter = collection.Iterator(); + + while (iter.Valid()) { + unsigned int attribKey = iter.GetKey(); + + { + Attrib::Attribute attrib = collection.Get(attribKey); + + if (attribKey != 0x916E0E78 && attrib.IsValid()) { + const Attrib::TypeDesc &typeDesc = Attrib::Database::Get().GetTypeDesc(attrib.GetType()); + const char *typeName = + *reinterpret_cast(reinterpret_cast(&typeDesc) + sizeof(unsigned int)); + + if (bStrCmp(typeName, "GCollectionKey") == 0) { + const Attrib::Definition *definition = gameplayClass->GetDefinition(attrib.GetKey()); + int count = ((reinterpret_cast(definition)[0xE] & 1) != 0) ? attrib.GetLength() : 1; + + numConnections += count; + } + } + } + + iter.Advance(); + } + + collectionKey = collection.GetParent(); + } while (collectionKey != 0); + } + + return numConnections; } diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index 8de19184a..ba1676763 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -470,12 +470,12 @@ void GRaceDatabase::ClearStartupRace() { mStartupRace = nullptr; } -void GRaceDatabase::SetStartupRace(GRaceCustom *custom, Context context) { +void GRaceDatabase::SetStartupRace(GRaceCustom *custom, GRace::Context context) { if (mStartupRace) { ClearStartupRace(); } - mStartupRaceContext = GRace::Context(context); + mStartupRaceContext = context; mStartupRace = custom; if (custom && mStartupRaceContext == GRace::kRaceContext_Career) { diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h index 5d34f9ad1..7ce3a5622 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h @@ -129,7 +129,7 @@ class GRaceDatabase { GRaceCustom *GetStartupRace(); GRace::Context GetStartupRaceContext(); - void SetStartupRace(GRaceCustom *custom, Context context); + void SetStartupRace(GRaceCustom *custom, GRace::Context context); void FreeCustomRace(GRaceCustom *custom); void DestroyCustomRace(GRaceCustom *custom); GRaceParameters *GetRaceFromHash(unsigned int hash); From 1c72be4f6c7673f2b67bbf5605c46320fc75fa95 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 09:52:39 +0100 Subject: [PATCH 290/691] 60.117%: add ClearActivityVars --- src/Speed/Indep/Src/Gameplay/GActivity.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GActivity.cpp b/src/Speed/Indep/Src/Gameplay/GActivity.cpp index a4a5750b6..e776f1b47 100644 --- a/src/Speed/Indep/Src/Gameplay/GActivity.cpp +++ b/src/Speed/Indep/Src/Gameplay/GActivity.cpp @@ -226,3 +226,12 @@ void GActivity::DeserializeVars() { } } } + +void GActivity::ClearActivityVars(lua_State *luaState) { + const char *activityName = *reinterpret_cast(GetLayoutPointer()); + + lua_pushstring(luaState, activityName); + lua_pushnil(luaState); + lua_settable(luaState, LUA_REGISTRYINDEX); + mVarsInLuaVM = false; +} From c2d7cbc5cca9c43a38ae400a48c9e776cfaff363 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 10:07:12 +0100 Subject: [PATCH 291/691] 60.456%: rebuild milestone tracking info --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 1e70b7c7e..42766c06c 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2,6 +2,7 @@ #include "Speed/Indep/Libs/Support/Utility/FastMem.h" #include "Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h" +#include "Speed/Indep/Src/Generated/AttribSys/Classes/milestonetypes.h" #include "Speed/Indep/Src/Generated/Events/EAutoSave.hpp" #include "Speed/Indep/Src/Generated/Events/EFadeScreenOff.hpp" #include "Speed/Indep/Src/Generated/Events/EFadeScreenOn.hpp" @@ -1088,7 +1089,26 @@ void GManager::AllocateMilestones() { } void GManager::ResetMilestoneTrackingInfo() { + unsigned int collectionKey; + mMilestoneTypeInfo.clear(); + collectionKey = mMilestoneClass->GetFirstCollection(); + while (collectionKey) { + Attrib::Gen::milestonetypes milestoneType( + Attrib::FindCollection(Attrib::Gen::milestonetypes::ClassKey(), collectionKey), 0, nullptr); + MilestoneTypeInfo info; + + info.mTypeKey = collectionKey; + info.mLastKnownValue = -1.0f; + info.mBestValue = -1.0f; + info.mFlags = milestoneType.MilestoneType() != 2 ? GMilestone::kFlag_BiggerIsBetter : 0; + if (milestoneType.ResetWhenPursuitStarts()) { + info.mFlags |= GMilestone::kFlag_CompletionFaked; + } + + mMilestoneTypeInfo[collectionKey] = info; + collectionKey = mMilestoneClass->GetNextCollection(collectionKey); + } } void GManager::LoadMilestoneInfo(MilestoneTypeInfo *savedInfo, unsigned int count) { From b1698f5120be3551c4887665b57de3c6c95dde3f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 10:15:48 +0100 Subject: [PATCH 292/691] 60.755%: add racer name and icon helpers --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 13 ++++++ src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 44 ++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 42766c06c..2ea578bf1 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1376,6 +1376,19 @@ void GManager::RestorePursuitBreakerIcons(int sectionID) { } } +void GManager::HidePursuitBreakerIcon(const UMath::Vector3 &pos, float radius) { + UMath::Vector3 swizzledPos = UMath::Vector3Make(pos.z, -pos.x, pos.y); + + for (unsigned int i = 0; i < mNumIcons; ++i) { + GIcon *icon = mIcons[i]; + + if (icon->GetType() == GIcon::kType_PursuitBreaker && + UMath::DistanceSquare(swizzledPos, icon->GetPosition()) <= radius * radius) { + icon->ClearFlag(1); + } + } +} + void GManager::FreeDisposableIcons(GIcon::Type iconType) { for (unsigned int i = 0; i < mNumIcons;) { GIcon *icon = mIcons[i]; diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 18d666283..b7428db0b 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -29,12 +29,15 @@ #include "Speed/Indep/Src/World/WorldModel.hpp" #include "Speed/Indep/Src/World/TrackStreamer.hpp" #include "Speed/Indep/bWare/Inc/bWare.hpp" +#include "Speed/Indep/bWare/Inc/bMath.hpp" +#include "Speed/Indep/bWare/Inc/bPrintf.hpp" #include "Speed/Indep/bWare/Inc/Strings.hpp" #include void SetCurrentTimeOfDay(float value); void SetOverRideRainIntensity(float intensity); +bool DoesStringExist(unsigned int hash); const char *GetLocalizedString(unsigned int hash); extern int UnlockAllThings; @@ -291,6 +294,47 @@ float GRacerInfo::CalcAverageSpeed() const { return mDistanceDriven / time; } +void GRacerInfo::ChooseRandomName() { + char nameBuffer[32]; + const char *name; + + if (!DoesStringExist(Attrib::StringHash32("RACERNAME_000"))) { + mName = "UNKNOWN"; + return; + } + + do { + bool duplicate = false; + unsigned int i; + + bSPrintf(nameBuffer, "RACERNAME_%03d", bRandom(0x96)); + name = GetLocalizedString(Attrib::StringHash32(nameBuffer)); + + for (i = 0; i < static_cast(GRaceStatus::Get().GetRacerCount()); ++i) { + GRacerInfo &info = GRaceStatus::Get().GetRacerInfo(i); + + if (info.mName && bStrCmp(name, info.mName) == 0) { + duplicate = true; + break; + } + } + + if (!duplicate) { + mName = name; + return; + } + } while (true); +} + +bool GRacerInfo::ChooseRacerName() { + if (!GRaceStatus::Exists() || GRaceStatus::Get().GetRaceContext() != GRace::kRaceContext_Career || !mGameCharacter->GetName()) { + return false; + } + + mName = GetLocalizedString(mGameCharacter->GetName()); + return true; +} + float GRacerInfo::GetHudPctRaceComplete() const { float startPercent = 0.0f; From fba7965adca1a1599994162f93e26bedf410f810 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 10:18:11 +0100 Subject: [PATCH 293/691] 60.765%: match ChooseRandomName --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 22 +++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index b7428db0b..cef905b86 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -305,12 +305,13 @@ void GRacerInfo::ChooseRandomName() { do { bool duplicate = false; - unsigned int i; + int i; + const int racerCount = GRaceStatus::Get().GetRacerCount(); bSPrintf(nameBuffer, "RACERNAME_%03d", bRandom(0x96)); - name = GetLocalizedString(Attrib::StringHash32(nameBuffer)); + name = GetLocalizedString(bStringHash(nameBuffer)); - for (i = 0; i < static_cast(GRaceStatus::Get().GetRacerCount()); ++i) { + for (i = 0; i < racerCount; ++i) { GRacerInfo &info = GRaceStatus::Get().GetRacerInfo(i); if (info.mName && bStrCmp(name, info.mName) == 0) { @@ -327,11 +328,22 @@ void GRacerInfo::ChooseRandomName() { } bool GRacerInfo::ChooseRacerName() { - if (!GRaceStatus::Exists() || GRaceStatus::Get().GetRaceContext() != GRace::kRaceContext_Career || !mGameCharacter->GetName()) { + unsigned int nameHash; + + if (!GRaceStatus::Exists()) { + return false; + } + + if (GRaceStatus::Get().GetRaceContext() != GRace::kRaceContext_Career) { + return false; + } + + nameHash = mGameCharacter->GetName(); + if (!nameHash) { return false; } - mName = GetLocalizedString(mGameCharacter->GetName()); + mName = GetLocalizedString(nameHash); return true; } From 4d4dd886d7b3856ebfee4932b09a1848e75e19b8 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 10:21:10 +0100 Subject: [PATCH 294/691] 60.864%: add ChooseBossName --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index cef905b86..5991bd814 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -46,6 +46,11 @@ class Minimap { static void ConvertPos(bVector2 &worldPos, bVector2 &minimapPos, TrackInfo *track); }; +struct GRaceStatusCompat { + unsigned char _pad[0x1AB0]; + GRaceBin *mRaceBin; +}; + GRaceStatus *GRaceStatus::fObj = nullptr; DECLARE_CONTAINER_TYPE(ID_ROAD_SET); @@ -347,6 +352,21 @@ bool GRacerInfo::ChooseRacerName() { return true; } +bool GRacerInfo::ChooseBossName() { + char stringBuffer[32]; + GRaceBin *raceBin; + + if (!GRaceStatus::Exists() || GRaceStatus::Get().GetRaceContext() != GRace::kRaceContext_Career || !GRaceStatus::Get().GetRaceParameters() || + !GRaceStatus::Get().GetRaceParameters()->GetIsBossRace()) { + return false; + } + + raceBin = reinterpret_cast(&GRaceStatus::Get())->mRaceBin; + bSNPrintf(stringBuffer, 0x20, "BLACKLIST_RIVAL_%02d_LEADERBOARD", raceBin->GetBinNumber()); + mName = GetLocalizedString(bStringHash(stringBuffer)); + return true; +} + float GRacerInfo::GetHudPctRaceComplete() const { float startPercent = 0.0f; From 3999d869ae8e1402224467dd7c1fddeb0a8acfeb Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 10:28:22 +0100 Subject: [PATCH 295/691] 60.976%: add StartRaceFromInGame --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 2ea578bf1..94d4cc9f5 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -48,6 +48,13 @@ void GPS_Disengage(); class IPursuit; +struct GManagerRaceStatusCompat { + unsigned char _padRaceBin[0x1AB0]; + GRaceBin *mRaceBin; + unsigned char _padRefresh[0x40]; + bool mRefreshBinAfterRace; +}; + class GCopMgrCompat : public UTL::COM::IUnknown { public: static HINTERFACE _IHandle() { @@ -444,6 +451,27 @@ void GManager::StartActivities() { } } +void GManager::StartRaceFromInGame(unsigned int raceHash) { + if (GRaceStatus::Get().GetPlayMode() == GRaceStatus::kPlayMode_Roaming) { + GRaceParameters *race = GRaceDatabase::Get().GetRaceFromHash(raceHash); + + if (race) { + GManagerRaceStatusCompat &raceStatus = reinterpret_cast(GRaceStatus::Get()); + + if (raceStatus.mRaceBin) { + if (race->GetParentVault() != raceStatus.mRaceBin->GetChildVault()) { + SuspendAllBinActivities(); + raceStatus.mRefreshBinAfterRace = true; + } + } + + race->BlockUntilLoaded(); + race->GetActivity()->Reset(); + race->GetActivity()->Run(); + } + } +} + void GManager::UpdateTimers(float dT) { for (unsigned int i = 0; i < 8; ++i) { mTimers[i].Update(dT); From 8b657f50723189be99760438bb4b1710ff64e538 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 10:38:01 +0100 Subject: [PATCH 296/691] 61.007%: match boss and racer name selection --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 42 ++++++++++---------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 5991bd814..3457f34b1 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -335,36 +335,38 @@ void GRacerInfo::ChooseRandomName() { bool GRacerInfo::ChooseRacerName() { unsigned int nameHash; - if (!GRaceStatus::Exists()) { - return false; - } - - if (GRaceStatus::Get().GetRaceContext() != GRace::kRaceContext_Career) { - return false; - } - - nameHash = mGameCharacter->GetName(); - if (!nameHash) { - return false; + if (GRaceStatus::Exists()) { + if (GRaceStatus::Get().GetRaceContext() == GRace::kRaceContext_Career) { + if ((nameHash = mGameCharacter->GetName()) != 0) { + mName = GetLocalizedString(nameHash); + return true; + } + } } - mName = GetLocalizedString(nameHash); - return true; + return false; } bool GRacerInfo::ChooseBossName() { char stringBuffer[32]; GRaceBin *raceBin; - if (!GRaceStatus::Exists() || GRaceStatus::Get().GetRaceContext() != GRace::kRaceContext_Career || !GRaceStatus::Get().GetRaceParameters() || - !GRaceStatus::Get().GetRaceParameters()->GetIsBossRace()) { - return false; + if (GRaceStatus::Exists()) { + if (GRaceStatus::Get().GetRaceContext() == GRace::kRaceContext_Career) { + GRaceParameters *raceParameters = GRaceStatus::Get().GetRaceParameters(); + + if (raceParameters) { + if (raceParameters->GetIsBossRace()) { + raceBin = reinterpret_cast(&GRaceStatus::Get())->mRaceBin; + bSNPrintf(stringBuffer, 0x20, "BLACKLIST_RIVAL_%02d_LEADERBOARD", raceBin->GetBinNumber()); + mName = GetLocalizedString(bStringHash(stringBuffer)); + return true; + } + } + } } - raceBin = reinterpret_cast(&GRaceStatus::Get())->mRaceBin; - bSNPrintf(stringBuffer, 0x20, "BLACKLIST_RIVAL_%02d_LEADERBOARD", raceBin->GetBinNumber()); - mName = GetLocalizedString(bStringHash(stringBuffer)); - return true; + return false; } float GRacerInfo::GetHudPctRaceComplete() const { From 79dc985e187f71d89a3a5c965a7a756eb843d6af Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 10:43:43 +0100 Subject: [PATCH 297/691] 63.150%: rebuild GObjectBlock instance scanning --- src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp | 91 ++++++++++++++++++- 1 file changed, 89 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp b/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp index 30d4227b7..930219223 100644 --- a/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp +++ b/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp @@ -1,9 +1,65 @@ #include "Speed/Indep/Src/Gameplay/GObjectBlock.h" +#include "Speed/Indep/Libs/Support/Utility/FastMem.h" +#include "Speed/Indep/Src/Gameplay/GActivity.h" +#include "Speed/Indep/Src/Gameplay/GCharacter.h" +#include "Speed/Indep/Src/Gameplay/GHandler.h" +#include "Speed/Indep/Src/Gameplay/GManager.h" +#include "Speed/Indep/Src/Gameplay/GMarker.h" +#include "Speed/Indep/Src/Gameplay/GState.h" +#include "Speed/Indep/Src/Gameplay/GTrigger.h" #include "Speed/Indep/Src/Gameplay/GVault.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" #include "Speed/Indep/bWare/Inc/Strings.hpp" +template +static unsigned int GetPaddedObjectSize() { + return (sizeof(T) + 15) & ~15; +} + +template +static unsigned int FindInstances(GVault *vault, AttribKeyList *attribKeyList, unsigned int *outObjCount, unsigned int *outConnCount) { + static unsigned int kObjectTemplateKey = 0x7FCB7ABA; + int numConnections = 0; + Attrib::Gen::gameplay objectTemplate(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), kObjectTemplateKey), 0, nullptr); + int numObjects = 0; + Attrib::Vault *attribVault = vault->GetAttribVault(); + unsigned int exportIndex = 0; + unsigned int exportCount; + int collectionType = Attrib::StringToTypeID("Attrib::CollectionLoadData"); + + exportCount = attribVault->CountExports(); + if (exportCount != 0) { + do { + if (attribVault->GetExportType(exportIndex) == collectionType) { + unsigned int collectionKey = Attrib::GetCollectionKey(reinterpret_cast(attribVault->GetExportData(exportIndex))); + Attrib::Gen::gameplay instanceObj(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), collectionKey), 0, nullptr); + + if (GObjectBlock::CollectionIsInstanceOfTemplate(instanceObj, objectTemplate)) { + if (attribKeyList) { + attribKeyList->push_back(collectionKey); + } + + numObjects = numObjects + 1; + numConnections = numConnections + GObjectBlock::CalcNumConnections(collectionKey); + } + } + + exportIndex = exportIndex + 1; + } while (exportIndex < exportCount); + } + + if (outObjCount) { + *outObjCount = *outObjCount + numObjects; + } + + if (outConnCount) { + *outConnCount = *outConnCount + numConnections; + } + + return (numObjects * GetPaddedObjectSize() + numConnections * 8 + 0xFU) & ~0xFU; +} + GObjectBlock::GObjectBlock(GVault *vault, unsigned char *buffer) : mVault(vault), // mObjectBuffer(buffer) {} @@ -13,14 +69,45 @@ GObjectBlock::~GObjectBlock() {} void GObjectBlock::Initialize(unsigned int bufferSize) {} unsigned int GObjectBlock::CalcSpaceRequired(GVault *vault, unsigned int *outObjCount) { + unsigned int objCount = 0; + unsigned int spaceRequired = FindInstances(vault, nullptr, &objCount, nullptr); + + spaceRequired += FindInstances(vault, nullptr, &objCount, nullptr); + spaceRequired += FindInstances(vault, nullptr, &objCount, nullptr); + spaceRequired += FindInstances(vault, nullptr, &objCount, nullptr); + spaceRequired += FindInstances(vault, nullptr, &objCount, nullptr); + spaceRequired += FindInstances(vault, nullptr, &objCount, nullptr); + if (outObjCount) { - *outObjCount = 0; + *outObjCount = objCount; } - return 0; + return spaceRequired; } bool GObjectBlock::CollectionIsInstanceOfTemplate(Attrib::Gen::gameplay &instanceObj, Attrib::Gen::gameplay &templateObj) { + const int *isObject = reinterpret_cast(instanceObj.GetAttributePointer(0x3E9156CA, 0)); + unsigned int parentKey; + + if (!isObject) { + isObject = reinterpret_cast(Attrib::DefaultDataArea(sizeof(int))); + } + + if (*isObject != 0) { + return false; + } + + parentKey = instanceObj.GetParent(); + while (parentKey != 0) { + Attrib::Gen::gameplay parent(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), parentKey), 0, nullptr); + + if (parent.GetCollection() == templateObj.GetCollection()) { + return true; + } + + parentKey = parent.GetParent(); + } + return false; } From 21548ee6d057262f7e67165580c2f6a400470647 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 10:44:53 +0100 Subject: [PATCH 298/691] 63.296%: add padded object size helpers --- src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp b/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp index 930219223..d89b10ae9 100644 --- a/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp +++ b/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp @@ -69,8 +69,11 @@ GObjectBlock::~GObjectBlock() {} void GObjectBlock::Initialize(unsigned int bufferSize) {} unsigned int GObjectBlock::CalcSpaceRequired(GVault *vault, unsigned int *outObjCount) { - unsigned int objCount = 0; - unsigned int spaceRequired = FindInstances(vault, nullptr, &objCount, nullptr); + unsigned int objCount; + unsigned int spaceRequired; + + objCount = 0; + spaceRequired = FindInstances(vault, nullptr, &objCount, nullptr); spaceRequired += FindInstances(vault, nullptr, &objCount, nullptr); spaceRequired += FindInstances(vault, nullptr, &objCount, nullptr); @@ -128,16 +131,22 @@ unsigned int GObjectBlock::CalcNumConnections(unsigned int collectionKey) { { Attrib::Attribute attrib = collection.Get(attribKey); - if (attribKey != 0x916E0E78 && attrib.IsValid()) { - const Attrib::TypeDesc &typeDesc = Attrib::Database::Get().GetTypeDesc(attrib.GetType()); - const char *typeName = - *reinterpret_cast(reinterpret_cast(&typeDesc) + sizeof(unsigned int)); + if (attribKey != 0x916E0E78) { + if (attrib.IsValid()) { + const Attrib::TypeDesc &typeDesc = Attrib::Database::Get().GetTypeDesc(attrib.GetType()); + const char *typeName = + *reinterpret_cast(reinterpret_cast(&typeDesc) + sizeof(unsigned int)); + + if (bStrCmp(typeName, "GCollectionKey") == 0) { + const Attrib::Definition *definition = gameplayClass->GetDefinition(attrib.GetKey()); + int count = 1; - if (bStrCmp(typeName, "GCollectionKey") == 0) { - const Attrib::Definition *definition = gameplayClass->GetDefinition(attrib.GetKey()); - int count = ((reinterpret_cast(definition)[0xE] & 1) != 0) ? attrib.GetLength() : 1; + if (definition->GetFlag(1)) { + count = attrib.GetLength(); + } - numConnections += count; + numConnections += count; + } } } } From 64e0f40d0cc3793875c8fc11140a7b7b58cdd0fe Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 11:07:10 +0100 Subject: [PATCH 299/691] 63.62%: improve GRaceStatus::AddSimablePlayer --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 77 +++++++++++--------- 1 file changed, 43 insertions(+), 34 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 3457f34b1..766646d82 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2443,8 +2443,7 @@ void GRaceStatus::ClearRacers() { } GRacerInfo &GRaceStatus::AddSimablePlayer(ISimable *isim) { - int index = mRacerCount; - GRacerInfo &info = mRacerInfo[index]; + GRacerInfo &info = mRacerInfo[mRacerCount]; const char *name; ++mRacerCount; @@ -2452,10 +2451,13 @@ GRacerInfo &GRaceStatus::AddSimablePlayer(ISimable *isim) { info.mhSimable = nullptr; info.mGameCharacter = nullptr; info.mName = nullptr; - info.mIndex = 0; + info.mIndex = -1; + info.mSavedHeatLevel = 0.0f; + info.mSavedSpeed = 0.0f; + info.mSavedPosition = UMath::Vector3::kZero; + info.mSavedDirection = UMath::Vector3::kZero; info.mRanking = 0; info.mAiRanking = 0; - info.mPctRaceComplete = 0.0f; info.mKnockedOut = false; info.mTotalled = false; info.mEngineBlown = false; @@ -2463,21 +2465,10 @@ GRacerInfo &GRaceStatus::AddSimablePlayer(ISimable *isim) { info.mChallengeComplete = false; info.mFinishedRacing = false; info.mCameraDetached = false; - info.mPctLapComplete = 0.0f; info.mLapsCompleted = 0; + info.mPctRaceComplete = 0.0f; + info.mPctLapComplete = 0.0f; info.mCheckpointsHitThisLap = 0; - info.mTollboothsCrossed = 0; - - for (int i = 0; i < 16; ++i) { - info.mTimeRemainingToBooth[i] = 0.0f; - } - - info.mSpeedTrapsCrossed = 0; - for (int i = 0; i < 16; ++i) { - info.mSpeedTrapSpeed[i] = 0.0f; - info.mSpeedTrapPosition[i] = -1; - } - info.mDistToNextCheckpoint = 0.0f; info.mDistanceDriven = 0.0f; info.mTopSpeed = 0.0f; @@ -2485,42 +2476,60 @@ GRacerInfo &GRaceStatus::AddSimablePlayer(ISimable *isim) { info.mPoundsNOSUsed = 0.0f; info.mTimeCrossedLastCheck = 0.0f; info.mTotalUpdateTime = 0.0f; - info.mNumPerfectShifts = 0; - info.mNumTrafficCarsHit = 0; - info.mSpeedBreakerTime = 0.0f; info.mPointTotal = 0.0f; info.mZeroToSixtyTime = 0.0f; info.mQuarterMileTime = 0.0f; + info.mSpeedBreakerTime = 0.0f; #ifndef EA_BUILD_A124 - for (int i = 0; i < 4; ++i) { - info.mSplitTimes[i] = 0.0f; - info.mSplitRankings[i] = 0; - } + info.mDNF = false; #endif + info.mTollboothsCrossed = 0; + info.mSpeedTrapsCrossed = 0; + info.mNumPerfectShifts = 0; + info.mNumTrafficCarsHit = 0; + info.mRaceTimer.Stop(); info.mRaceTimer.Reset(0.0f); info.mLapTimer.Stop(); info.mLapTimer.Reset(0.0f); info.mCheckTimer.Stop(); info.mCheckTimer.Reset(0.0f); - info.mSavedPosition = UMath::Vector3::kZero; - info.mSavedHeatLevel = 0.0f; - info.mSavedDirection = UMath::Vector3::kZero; - info.mSavedSpeed = 0.0f; + + for (int i = 0; i < 16; ++i) { + info.mTimeRemainingToBooth[i] = 0.0f; + } + + for (int i = 0; i < 16; ++i) { + info.mSpeedTrapSpeed[i] = 0.0f; + info.mSpeedTrapPosition[i] = -1; + } + #ifndef EA_BUILD_A124 - info.mDNF = false; + for (int i = 0; i < 4; ++i) { + info.mSplitTimes[i] = 0.0f; + info.mSplitRankings[i] = 0; + } #endif info.SetSimable(isim); - info.SetIndex(index); + info.SetIndex(mRacerCount - 1); if (Sim::GetUserMode() == 1) { - name = GetLocalizedString(mRacerCount == 1 ? 0x7B070984 : 0x7B070985); + if (mRacerCount == 1) { + name = GetLocalizedString(0x7B070984); + } else { + name = GetLocalizedString(0x7B070985); + } } else { - IPlayer *player = isim ? isim->GetPlayer() : nullptr; - UserProfile *profile = player ? FEDatabase->CurrentUserProfiles[player->GetSettingsIndex()] : nullptr; + UserProfile *userProfile = FEDatabase->CurrentUserProfiles[isim->GetPlayer()->GetSettingsIndex()]; + + if (!userProfile) { + name = GetLocalizedString(0xF760EABE); + info.SetName(name); + return info; + } - name = profile ? profile->GetProfileName() : GetLocalizedString(0xF760EABE); + name = userProfile->GetProfileName(); } info.SetName(name); From cc9731b8f5d9167a11682a5401533772b5bc7ab5 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 11:17:03 +0100 Subject: [PATCH 300/691] 63.96%: improve GManager::CanPlaySMS --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 66 ++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 94d4cc9f5..5aa342a4a 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -15,6 +15,8 @@ #include "Speed/Indep/Src/Interfaces/SimActivities/ITrafficMgr.h" #include "Speed/Indep/Src/Interfaces/Simables/IAI.h" #include "Speed/Indep/Src/Interfaces/Simables/IArticulatedVehicle.h" +#include "Speed/Indep/Src/Frontend/FEManager.hpp" +#include "Speed/Indep/Src/Misc/GameFlow.hpp" #include "Speed/Indep/Src/Misc/LZCompress.hpp" #include "Speed/Indep/Src/Misc/Platform.h" #include "Speed/Indep/Src/Sim/Simulation.h" @@ -48,6 +50,19 @@ void GPS_Disengage(); class IPursuit; +namespace Speech { +class Manager { + public: + static int m_speechDisable; + static bool IsCopSpeechPlaying(int event_id); +}; +}; // namespace Speech + +class PhotoFinishScreen { + public: + static int mActive; +}; + struct GManagerRaceStatusCompat { unsigned char _padRaceBin[0x1AB0]; GRaceBin *mRaceBin; @@ -1795,7 +1810,56 @@ void GManager::LoadSMSInfo(int *loadInfo, unsigned int count) { } bool GManager::CanPlaySMS() const { - return !mPendingSMS.empty(); + IPlayer *player; + + if (Speech::Manager::m_speechDisable != 0 || TheGameFlowManager.GetState() != GAMEFLOW_STATE_RACING || + UTL::Collections::Singleton::Get() != nullptr || PhotoFinishScreen::mActive != 0 || + !GRaceStatus::Exists() || GRaceStatus::Get().GetPlayMode() != GRaceStatus::kPlayMode_Roaming) { + return false; + } + + if (!FEManager::IsOkayToRequestPauseSimulation(0, true, true)) { + return false; + } + + if (Speech::Manager::IsCopSpeechPlaying(0xCC)) { + return false; + } + + player = IPlayer::First(PLAYER_LOCAL); + if (!player) { + return false; + } + + ISimable *simable = player->GetSimable(); + if (!simable) { + return false; + } + + IHud *ihud = player->GetHud(); + if (!ihud) { + return false; + } + + if (!ihud->AreResourcesLoaded()) { + return false; + } + + IVehicle *ivehicle; + if (!simable->QueryInterface(&ivehicle) || !ivehicle) { + return false; + } + + if (ivehicle->IsAnimating() || ivehicle->IsStaging() || ivehicle->IsLoading()) { + return false; + } + + IVehicleAI *ivehicleai = ivehicle->GetAIVehiclePtr(); + if (!ivehicleai) { + return false; + } + + return !ivehicleai->GetPursuit(); } void GManager::DispatchSMSMessage(int smsID) { From ac35da758be6f97eb35cb6e3dfefd31d23fb8f33 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 11:25:48 +0100 Subject: [PATCH 301/691] 64.21%: improve gameplay data loading paths --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 105 ++++++++++++++-------- src/Speed/Indep/Src/Gameplay/GManager.h | 8 ++ src/Speed/Indep/Src/Misc/MD5.hpp | 22 +++++ 3 files changed, 100 insertions(+), 35 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 5aa342a4a..0d08caa19 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -18,6 +18,7 @@ #include "Speed/Indep/Src/Frontend/FEManager.hpp" #include "Speed/Indep/Src/Misc/GameFlow.hpp" #include "Speed/Indep/Src/Misc/LZCompress.hpp" +#include "Speed/Indep/Src/Misc/MD5.hpp" #include "Speed/Indep/Src/Misc/Platform.h" #include "Speed/Indep/Src/Sim/Simulation.h" #include "Speed/Indep/Src/World/TrackPath.hpp" @@ -1171,12 +1172,13 @@ ObjectStateBlockHeader *GManager::AllocObjectStateBlock(unsigned int key, unsign unsigned int blockSize; unsigned int tryCount; ObjectStateBlockHeader *block; + ObjectStateBlockHeader *userData; if (it != blocks.end()) { block = it->second; if (size <= block->mSize) { block->mSize = size; - return block; + return block + 1; } ClearObjectStateBlock(key); @@ -1203,8 +1205,9 @@ ObjectStateBlockHeader *GManager::AllocObjectStateBlock(unsigned int key, unsign block->mKey = key; block->mSize = size; + userData = block + 1; blocks[shiftedKey] = block; - return block; + return userData; } void *GManager::GetObjectStateBlock(unsigned int key) { @@ -1962,61 +1965,93 @@ bool GManager::SaveGameplayData(unsigned char *dest, unsigned int maxSize) { } bool GManager::LoadGameplayData(unsigned char *src, unsigned int maxSize) { - SavedGameplayDataHeader *header; - unsigned char *cursor; - unsigned int i; + unsigned char *srcStart; + SavedGameplayDataHeader *gameplayHeader; + unsigned char *startChecksum; + unsigned int bytesToChecksum; + MD5 md5; + unsigned int spotBytes; + unsigned int binBytesRead; + unsigned int respawnMarker; + unsigned int onBlock; if (maxSize < 0x80) { return false; } - header = reinterpret_cast(src); - if (header->mMagic != 0x656D6147 || header->mVersion < 8) { + srcStart = src; + gameplayHeader = reinterpret_cast(srcStart); + startChecksum = srcStart + 0x10; + bytesToChecksum = maxSize - 0x10; + md5.Reset(); + md5.Update(startChecksum, bytesToChecksum); + md5.GetRaw(); + if (bMemCmp(srcStart, md5.GetRaw(), md5.GetRawLength()) != 0 || gameplayHeader->mMagic != 0x656D6147 || + gameplayHeader->mVersion < 8) { return false; } ResetAllGameplayData(); - cursor = src + 0x80; - for (i = 0; i < header->mNumPersistent; ++i) { - ObjectStateBlockHeader *savedBlock = reinterpret_cast(cursor); - ObjectStateBlockHeader *block = AllocObjectStateBlock(savedBlock->mKey, savedBlock->mSize, true); + src += 0x80; + for (onBlock = 0; onBlock < gameplayHeader->mNumPersistent; ++onBlock) { + ObjectStateBlockHeader *header = reinterpret_cast(src); + unsigned int allocSize = header->mSize; + unsigned char *newBlock = reinterpret_cast(AllocObjectStateBlock(header->mKey, allocSize, true)); - if (block) { - bMemCpy(block, savedBlock, savedBlock->mSize + sizeof(ObjectStateBlockHeader)); + if (newBlock) { + bMemCpy(newBlock, header + 1, header->mSize); } - cursor += (savedBlock->mSize + 0x17U) & ~0xFU; + src += (allocSize + 0x17U) & ~0xFU; } - cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); - LoadTimerInfo(reinterpret_cast(cursor), header->mNumSavedTimers); - cursor += header->mNumSavedTimers * 0x20; + src = reinterpret_cast((reinterpret_cast(src) + 0xFU) & ~0xFU); + LoadTimerInfo(reinterpret_cast(src), gameplayHeader->mNumSavedTimers); + src += gameplayHeader->mNumSavedTimers * 0x20; - LoadMilestoneInfo(reinterpret_cast(cursor), header->mNumMilestoneTypes); - cursor += header->mNumMilestoneTypes * 0x10; + LoadMilestoneInfo(reinterpret_cast(src), gameplayHeader->mNumMilestoneTypes); + src += gameplayHeader->mNumMilestoneTypes * 0x10; - LoadMilestones(reinterpret_cast(cursor), header->mNumMilestoneRecords); - cursor += header->mNumMilestoneRecords * 0x14; - cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); + LoadMilestones(reinterpret_cast(src), gameplayHeader->mNumMilestoneRecords); + src += gameplayHeader->mNumMilestoneRecords * 0x14; + src = reinterpret_cast((reinterpret_cast(src) + 0xFU) & ~0xFU); - LoadSpeedTraps(reinterpret_cast(cursor), header->mNumSpeedTrapRecords); - cursor += header->mNumSpeedTrapRecords * 0x14; - cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); + LoadSpeedTraps(reinterpret_cast(src), gameplayHeader->mNumSpeedTrapRecords); + src += gameplayHeader->mNumSpeedTrapRecords * 0x14; + src = reinterpret_cast((reinterpret_cast(src) + 0xFU) & ~0xFU); - bMemCpy(mHidingSpotFound, cursor, sizeof(mHidingSpotFound)); - cursor += (header->mNumHidingSpotFlags + 7U) >> 3; - cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); + spotBytes = (gameplayHeader->mNumHidingSpotFlags + 7U) >> 3; + bMemCpy(mHidingSpotFound, src, spotBytes); + src += spotBytes; + src = reinterpret_cast((reinterpret_cast(src) + 0xFU) & ~0xFU); - cursor += GRaceDatabase::Get().DeserializeBins(cursor); - cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); + binBytesRead = GRaceDatabase::Get().DeserializeBins(src); + src += binBytesRead; + src = reinterpret_cast((reinterpret_cast(src) + 0xFU) & ~0xFU); - LoadSMSInfo(reinterpret_cast(cursor), header->mNumPendingSMS); - cursor += header->mNumPendingSMS * sizeof(int); - cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); + LoadSMSInfo(reinterpret_cast(src), gameplayHeader->mNumPendingSMS); + src += gameplayHeader->mNumPendingSMS * sizeof(int); + src = reinterpret_cast((reinterpret_cast(src) + 0xFU) & ~0xFU); + + bMemCpy(&respawnMarker, src, sizeof(respawnMarker)); + { + Attrib::Gen::gameplay testInstance(respawnMarker, 0, nullptr); + + if (testInstance.IsValid()) { + Get().SetFreeRoamStartMarker(respawnMarker); + } + } + + bMemCpy(&respawnMarker, src + 0x10, sizeof(respawnMarker)); + { + Attrib::Gen::gameplay testInstance2(respawnMarker, 0, nullptr); + + if (testInstance2.IsValid()) { + Get().SetFreeRoamFromSafeHouseStartMarker(respawnMarker); + } + } - bMemCpy(&mFreeRoamStartMarker, cursor, sizeof(mFreeRoamStartMarker)); - bMemCpy(&mFreeRoamFromSafeHouseStartMarker, cursor + 0x10, sizeof(mFreeRoamFromSafeHouseStartMarker)); return true; } diff --git a/src/Speed/Indep/Src/Gameplay/GManager.h b/src/Speed/Indep/Src/Gameplay/GManager.h index 5306b5de8..b02b6b9a0 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.h +++ b/src/Speed/Indep/Src/Gameplay/GManager.h @@ -239,6 +239,14 @@ class GManager : public UTL::COM::Object, public IVehicleCache { return collectionKey << mCollectionKeyShiftTo32; } + void SetFreeRoamStartMarker(unsigned int markerKey) { + mFreeRoamStartMarker = markerKey; + } + + void SetFreeRoamFromSafeHouseStartMarker(unsigned int markerKey) { + mFreeRoamFromSafeHouseStartMarker = markerKey; + } + void TrackValue(const char *valueName, int value) { TrackValue(valueName, static_cast(value)); } diff --git a/src/Speed/Indep/Src/Misc/MD5.hpp b/src/Speed/Indep/Src/Misc/MD5.hpp index dcb20e28b..dc67aa0f9 100644 --- a/src/Speed/Indep/Src/Misc/MD5.hpp +++ b/src/Speed/Indep/Src/Misc/MD5.hpp @@ -5,6 +5,28 @@ #pragma once #endif +// total size: 0x90 +class MD5 { + public: + MD5() {} + virtual ~MD5() {} + int GetRawLength() { + return computed ? 16 : 0; + } + + void Reset(); + void Update(const void *buffer, int length); + void *GetRaw(); + const char *GetString(); + + private: + unsigned int uCount; // offset 0x0, size 0x4 + unsigned int uRegs[4]; // offset 0x4, size 0x10 + unsigned char strData[64]; // offset 0x14, size 0x40 + bool computed; // offset 0x54, size 0x1 + unsigned char rawMD5[16]; // offset 0x58, size 0x10 + unsigned char strMD5[33]; // offset 0x68, size 0x21 +}; #endif From eb09271b05e3fa2bc78dcd8b4f4377ec4631d247 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 11:29:47 +0100 Subject: [PATCH 302/691] 64.45%: add ParseArray helper --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 50 ++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 766646d82..76f140f8f 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -22,6 +22,7 @@ #include "Speed/Indep/Src/Interfaces/Simables/IRigidBody.h" #include "Speed/Indep/Src/Main/AttribSupport.h" #include "Speed/Indep/Src/Physics/PVehicle.h" +#include "Speed/Indep/Src/Misc/Table.hpp" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" #include "Speed/Indep/Src/Sim/Simulation.h" #include "Speed/Indep/Src/World/WRoadNetwork.h" @@ -40,6 +41,9 @@ void SetOverRideRainIntensity(float intensity); bool DoesStringExist(unsigned int hash); const char *GetLocalizedString(unsigned int hash); extern int UnlockAllThings; +int NotNumeric(char c); +int SplitChars(char *in, char ***array, int (*func)(char)); +float ParseFloat(char *word); class Minimap { public: @@ -1633,6 +1637,52 @@ const char *GRaceParameters::GetSpeedTrapCamera() const { return mRaceRecord->SpeedTrapCamera(0); } +int ParseArray(const char *string, float *data, int max) { + int len = bStrLen(string); + char *copy = new (__FILE__, __LINE__) char[len + 1]; + char **words; + int num; + float *temp = nullptr; + + bMemCpy(copy, string, len + 1); + num = SplitChars(copy, &words, NotNumeric); + if (num > max) { + temp = new (__FILE__, __LINE__) float[num]; + + for (int i = 0; i < num; ++i) { + temp[i] = ParseFloat(words[i]); + } + + Table table(temp, num, 0.0f, static_cast(max - 1)); + + for (int i = 0; i < max; ++i) { + data[i] = table.GetValue(static_cast(i)); + } + } else { + for (int i = 0; i < num; ++i) { + data[i] = ParseFloat(words[i]); + } + + max = num; + if (num == 1) { + max = 2; + data[1] = *data; + } + } + + if (temp) { + delete[] temp; + } + if (words) { + delete[] words; + } + if (copy) { + delete[] copy; + } + + return max; +} + GRaceCustom::GRaceCustom(const GRaceParameters &other) : GRaceParameters(other.GetCollectionKey(), nullptr), // mRaceActivity(nullptr), // From 4b98090553eef2d3e4f26045d087230dfe9ede81 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 11:30:31 +0100 Subject: [PATCH 303/691] 64.52%: refine ParseArray control flow --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 32 ++++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 76f140f8f..37e2b8e17 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1643,24 +1643,38 @@ int ParseArray(const char *string, float *data, int max) { char **words; int num; float *temp = nullptr; + int i; bMemCpy(copy, string, len + 1); num = SplitChars(copy, &words, NotNumeric); if (num > max) { temp = new (__FILE__, __LINE__) float[num]; - - for (int i = 0; i < num; ++i) { - temp[i] = ParseFloat(words[i]); + i = 0; + if (num > 0) { + do { + temp[i] = ParseFloat(words[i]); + i += 1; + } while (i < num); } - Table table(temp, num, 0.0f, static_cast(max - 1)); - - for (int i = 0; i < max; ++i) { - data[i] = table.GetValue(static_cast(i)); + { + Table table(temp, num, 0.0f, static_cast(max - 1)); + + i = 0; + if (max > 0) { + do { + data[i] = table.GetValue(static_cast(i)); + i += 1; + } while (i < max); + } } } else { - for (int i = 0; i < num; ++i) { - data[i] = ParseFloat(words[i]); + i = 0; + if (num > 0) { + do { + data[i] = ParseFloat(words[i]); + i += 1; + } while (i < num); } max = num; From 5ab5cc98292a5c461b5735dffedbc74906711ddf Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 11:45:02 +0100 Subject: [PATCH 304/691] 64.56%: rewrite CalcMapCoordsForMarker --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 31 +++++++++++++------- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 3 ++ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 0d08caa19..db7f34a69 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -64,6 +64,14 @@ class PhotoFinishScreen { static int mActive; }; +#ifndef DECLARE_GAMEPLAY_MINIMAP_CLASS +#define DECLARE_GAMEPLAY_MINIMAP_CLASS +class Minimap { + public: + static void ConvertPos(bVector2 &worldPos, bVector2 &minimapPos, TrackInfo *track); +}; +#endif + struct GManagerRaceStatusCompat { unsigned char _padRaceBin[0x1AB0]; GRaceBin *mRaceBin; @@ -2295,20 +2303,23 @@ void GManager::UpdateIconVisibility() { } bool GManager::CalcMapCoordsForMarker(unsigned int markerKey, bVector2 &outPos, float &outRotDeg) { - GMarker *marker; - UMath::Vector3 pos; - UMath::Vector3 dir; + Attrib::Gen::gameplay marker(markerKey, 0, nullptr); - marker = static_cast(FindInstance(markerKey)); - if (!marker) { + if (!marker.IsValid()) { return false; } - pos = marker->GetPosition(); - dir = marker->GetDirection(); - outPos.x = pos.x; - outPos.y = pos.z; - outRotDeg = bAngToDeg(bATan(-dir.x, dir.z)); + const UMath::Vector3 &pos = marker.Position(0); + TrackInfo *trackInfo = TrackInfo::GetTrackInfo(2000); + bVector2 worldPos(pos.x, pos.y); + UMath::Matrix4 rotMat; + UMath::Vector3 forwardVec = {0.0f, 0.0f, 1.0f}; + + Minimap::ConvertPos(worldPos, outPos, trackInfo); + UMath::Init(rotMat, 1.0f, 1.0f, 1.0f); + UMath::MultYRot(rotMat, -marker.Rotation(0) * 0.0027777778f, rotMat); + UMath::Rotate(forwardVec, rotMat, forwardVec); + outRotDeg = bAngToDeg(bATan(-forwardVec.x, forwardVec.z)); return true; } diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 37e2b8e17..f47b5d8f8 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -45,10 +45,13 @@ int NotNumeric(char c); int SplitChars(char *in, char ***array, int (*func)(char)); float ParseFloat(char *word); +#ifndef DECLARE_GAMEPLAY_MINIMAP_CLASS +#define DECLARE_GAMEPLAY_MINIMAP_CLASS class Minimap { public: static void ConvertPos(bVector2 &worldPos, bVector2 &minimapPos, TrackInfo *track); }; +#endif struct GRaceStatusCompat { unsigned char _pad[0x1AB0]; From 1746fed4d0b98bdfc721105e4011425631d3126f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 11:48:22 +0100 Subject: [PATCH 305/691] 64.84%: add GActivity::StoreHandlers --- src/Speed/Indep/Src/Gameplay/GActivity.cpp | 40 ++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GActivity.cpp b/src/Speed/Indep/Src/Gameplay/GActivity.cpp index e776f1b47..e4ad1a89f 100644 --- a/src/Speed/Indep/Src/Gameplay/GActivity.cpp +++ b/src/Speed/Indep/Src/Gameplay/GActivity.cpp @@ -13,6 +13,10 @@ template <> struct GObjectIteratorTraits { enum { kType = kGameplayObjType_State }; }; +template <> struct GObjectIteratorTraits { + enum { kType = kGameplayObjType_Handler }; +}; + template class GObjectIterator { public: GObjectIterator(unsigned int) @@ -41,6 +45,21 @@ template class GObjectIterator { GRuntimeInstance *mHead; }; +template <> +GObjectIterator::GObjectIterator(unsigned int) + : mInstance(static_cast(GRuntimeInstance::sRingListHead[GObjectIteratorTraits::kType])) // + , mHead(mInstance) {} + +template <> +void GObjectIterator::Advance() { + if (!mInstance) { + return; + } + + GRuntimeInstance *next = mInstance->GetNextRuntimeInstance(); + mInstance = next == mHead ? nullptr : static_cast(next); +} + GActivity::GActivity(const Attrib::Key &activityKey) : GRuntimeInstance(activityKey, kGameplayObjType_Activity) // , mCurrentState(nullptr) // @@ -83,6 +102,27 @@ void GActivity::GatherStatesAndHandlers() { } } +unsigned int GActivity::StoreHandlers(GState *state, UTL::Std::vector *handlerVec) { + unsigned int count = 0; + GObjectIterator iter(0xFFFFFFFF); + + while (iter.IsValid()) { + GHandler *handler = iter.GetInstance(); + + if (CollectionIsHandlerForState(state, handler)) { + if (handlerVec) { + handlerVec->push_back(handler); + } + + count++; + } + + iter.Advance(); + } + + return count; +} + void GActivity::Run() { if (mRunning) { return; From 5fa0f01590478f00832ca579460fb929d78348b7 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 11:56:33 +0100 Subject: [PATCH 306/691] 64.93%: rewrite GRaceStatus::SetRoaming --- src/Speed/Indep/Src/EAXSound/EAXSOund.hpp | 1 + src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 53 +++++++++++++++++--- 2 files changed, 47 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/EAXSound/EAXSOund.hpp b/src/Speed/Indep/Src/EAXSound/EAXSOund.hpp index 6aa05c883..b78cdb394 100644 --- a/src/Speed/Indep/Src/EAXSound/EAXSOund.hpp +++ b/src/Speed/Indep/Src/EAXSound/EAXSOund.hpp @@ -113,6 +113,7 @@ class EAXSound : public AudioMemBase { void StartSND11(); void StopSND11(); + void StartNewGamePlay(); void QueueNISStream(unsigned int anim_id, int camera_track_number, void (*setmstimecb)(unsigned int, int)); bool IsNISStreamQueued(); diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index f47b5d8f8..7b7153e02 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -11,6 +11,7 @@ #include "Speed/Indep/Src/Generated/Events/EAutoSave.hpp" #include "Speed/Indep/Src/Generated/Events/EFadeScreenOn.hpp" #include "Speed/Indep/Src/Generated/Events/EReloadHud.hpp" +#include "Speed/Indep/Src/EAXSound/EAXSOund.hpp" #include "Speed/Indep/Src/Frontend/Database/VehicleDB.hpp" #include "Speed/Indep/Src/Interfaces/SimActivities/ICopMgr.h" #include "Speed/Indep/Src/Interfaces/SimActivities/ITrafficMgr.h" @@ -58,6 +59,11 @@ struct GRaceStatusCompat { GRaceBin *mRaceBin; }; +struct GManagerRestartCompat { + unsigned char _pad[0x304]; + unsigned int mRestartEventHash; +}; + GRaceStatus *GRaceStatus::fObj = nullptr; DECLARE_CONTAINER_TYPE(ID_ROAD_SET); @@ -2222,33 +2228,66 @@ void GRaceStatus::NotifyScriptWhenLoaded() { } void GRaceStatus::SetRoaming() { - bool skipHudReload = false; + bool lastDDay = false; + IPlayer *player; + bool dDay = false; if (mRaceParms) { - skipHudReload = bStrCmp(mRaceParms->GetEventID(), "16.2.1") == 0; + const unsigned int *startNewGame = + reinterpret_cast(mRaceParms->GetGameplayObj()->GetAttributePointer(0x64273C71, 0)); + + lastDDay = bStrCmp(mRaceParms->GetEventID(), "16.2.1") == 0; + if (!startNewGame) { + startNewGame = reinterpret_cast(Attrib::DefaultDataArea(sizeof(unsigned int))); + } + + if (!*startNewGame) { + g_pEAXSound->StartNewGamePlay(); + } + } else { + g_pEAXSound->StartNewGamePlay(); } mPlayMode = kPlayMode_Roaming; SetRaceContext(GRace::kRaceContext_Career); - mIsLoading = false; + SetIsLoading(false); mRaceParms = nullptr; WRoadNetwork::Get().ResetShortcuts(); for (IPlayer::List::const_iterator iter = IPlayer::GetList(PLAYER_ALL).begin(); iter != IPlayer::GetList(PLAYER_ALL).end(); ++iter) { - IPlayer *player = *iter; + ISimable *simable; + IVehicle *vehicle; + IVehicleAI *ivai; + + player = *iter; if (player->InGameBreaker()) { player->ResetGameBreaker(true); } + + simable = player->GetSimable(); + if (simable && simable->QueryInterface(&vehicle) && simable->QueryInterface(&ivai) && !ivai->GetPursuit()) { + ICopMgr *copMgr = ICopMgr::Get(); + + if (copMgr) { + copMgr->ResetCopsForRestart(true); + } + } } - if (!skipHudReload) { + if (!lastDDay && !reinterpret_cast(&GManager::Get())->mRestartEventHash) { new EReloadHud(); } new EAutoSave(); - SetOverRideRainIntensity(0.0f); - SetCurrentTimeOfDay(0.5f); + if (mRaceParms) { + dDay = mRaceParms->GetIsDDayRace(); + } + + if (!dDay) { + SetOverRideRainIntensity(0.0f); + } + GManager::Get().SpawnAllLoadedSectionIcons(); ICopMgr::mDisableCops = 0; } From e3bfeb14ee0b65a636be34dfb1c5d5ce38fffcf5 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 11:59:21 +0100 Subject: [PATCH 307/691] 65.16%: refine GRaceStatus::SetRoaming loop --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 60 +++++++++++++++----- 1 file changed, 46 insertions(+), 14 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 7b7153e02..18924c4fe 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -54,6 +54,28 @@ class Minimap { }; #endif +class GCopMgrCompat : public UTL::COM::IUnknown { + public: + static GCopMgrCompat *Get() { + return reinterpret_cast(ICopMgr::Get()); + } + + virtual float GetLockoutTimeRemaining() const; + virtual bool VehicleSpawningEnabled(bool isdespawn); + virtual void SpawnCop(UMath::Vector3 &InitialPos, UMath::Vector3 &InitialVec, const char *VehicleName, bool InPursuit, bool RoadBlock); + virtual bool IsCopSpawnPending() const; + virtual void SetAllBustedTimersToZero(); + virtual void PursuitIsEvaded(IPursuit *ipursuit); + virtual bool IsCopRequestPending(); + virtual bool CanPursueRacers(); + virtual bool IsPlayerPursuitActive(); + virtual bool PlayerPursuitHasCop() const; + virtual void PursueAtHeatLevel(int minHeatLevel); + virtual void ResetCopsForRestart(bool release); + virtual void LockoutCops(bool lockout); + virtual void NoNewPursuitsOrCops(); +}; + struct GRaceStatusCompat { unsigned char _pad[0x1AB0]; GRaceBin *mRaceBin; @@ -2233,16 +2255,18 @@ void GRaceStatus::SetRoaming() { bool dDay = false; if (mRaceParms) { - const unsigned int *startNewGame = - reinterpret_cast(mRaceParms->GetGameplayObj()->GetAttributePointer(0x64273C71, 0)); - lastDDay = bStrCmp(mRaceParms->GetEventID(), "16.2.1") == 0; - if (!startNewGame) { - startNewGame = reinterpret_cast(Attrib::DefaultDataArea(sizeof(unsigned int))); - } + if (mRaceParms) { + const unsigned int *startNewGame = + reinterpret_cast(mRaceParms->GetGameplayObj()->GetAttributePointer(0x64273C71, 0)); + + if (!startNewGame) { + startNewGame = reinterpret_cast(Attrib::DefaultDataArea(sizeof(unsigned int))); + } - if (!*startNewGame) { - g_pEAXSound->StartNewGamePlay(); + if (!*startNewGame) { + g_pEAXSound->StartNewGamePlay(); + } } } else { g_pEAXSound->StartNewGamePlay(); @@ -2254,12 +2278,12 @@ void GRaceStatus::SetRoaming() { mRaceParms = nullptr; WRoadNetwork::Get().ResetShortcuts(); - for (IPlayer::List::const_iterator iter = IPlayer::GetList(PLAYER_ALL).begin(); iter != IPlayer::GetList(PLAYER_ALL).end(); ++iter) { + player = IPlayer::First(PLAYER_ALL); + while (player) { ISimable *simable; IVehicle *vehicle; IVehicleAI *ivai; - - player = *iter; + IPlayer::List::const_iterator iter; if (player->InGameBreaker()) { player->ResetGameBreaker(true); @@ -2267,10 +2291,18 @@ void GRaceStatus::SetRoaming() { simable = player->GetSimable(); if (simable && simable->QueryInterface(&vehicle) && simable->QueryInterface(&ivai) && !ivai->GetPursuit()) { - ICopMgr *copMgr = ICopMgr::Get(); + if (GCopMgrCompat::Get()) { + GCopMgrCompat::Get()->ResetCopsForRestart(true); + } + } - if (copMgr) { - copMgr->ResetCopsForRestart(true); + iter = std::find(IPlayer::GetList(PLAYER_ALL).begin(), IPlayer::GetList(PLAYER_ALL).end(), player); + if (iter == IPlayer::GetList(PLAYER_ALL).end()) { + player = nullptr; + } else { + player = nullptr; + if (iter + 1 != IPlayer::GetList(PLAYER_ALL).end()) { + player = *(iter + 1); } } } From d79948b4f3b8de25a34555d183e1afc6b179a737 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 12:22:45 +0100 Subject: [PATCH 308/691] 65.32%: rewrite GRaceStatus::DetermineRaceLength --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 152 +++++++++---------- 1 file changed, 69 insertions(+), 83 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 18924c4fe..49d49c947 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -54,28 +54,6 @@ class Minimap { }; #endif -class GCopMgrCompat : public UTL::COM::IUnknown { - public: - static GCopMgrCompat *Get() { - return reinterpret_cast(ICopMgr::Get()); - } - - virtual float GetLockoutTimeRemaining() const; - virtual bool VehicleSpawningEnabled(bool isdespawn); - virtual void SpawnCop(UMath::Vector3 &InitialPos, UMath::Vector3 &InitialVec, const char *VehicleName, bool InPursuit, bool RoadBlock); - virtual bool IsCopSpawnPending() const; - virtual void SetAllBustedTimersToZero(); - virtual void PursuitIsEvaded(IPursuit *ipursuit); - virtual bool IsCopRequestPending(); - virtual bool CanPursueRacers(); - virtual bool IsPlayerPursuitActive(); - virtual bool PlayerPursuitHasCop() const; - virtual void PursueAtHeatLevel(int minHeatLevel); - virtual void ResetCopsForRestart(bool release); - virtual void LockoutCops(bool lockout); - virtual void NoNewPursuitsOrCops(); -}; - struct GRaceStatusCompat { unsigned char _pad[0x1AB0]; GRaceBin *mRaceBin; @@ -86,6 +64,10 @@ struct GManagerRestartCompat { unsigned int mRestartEventHash; }; +template <> struct GObjectIteratorTraits { + enum { kType = kGameplayObjType_Trigger }; +}; + GRaceStatus *GRaceStatus::fObj = nullptr; DECLARE_CONTAINER_TYPE(ID_ROAD_SET); @@ -2255,18 +2237,16 @@ void GRaceStatus::SetRoaming() { bool dDay = false; if (mRaceParms) { - lastDDay = bStrCmp(mRaceParms->GetEventID(), "16.2.1") == 0; - if (mRaceParms) { - const unsigned int *startNewGame = - reinterpret_cast(mRaceParms->GetGameplayObj()->GetAttributePointer(0x64273C71, 0)); + const unsigned int *startNewGame = + reinterpret_cast(mRaceParms->GetGameplayObj()->GetAttributePointer(0x64273C71, 0)); - if (!startNewGame) { - startNewGame = reinterpret_cast(Attrib::DefaultDataArea(sizeof(unsigned int))); - } + lastDDay = bStrCmp(mRaceParms->GetEventID(), "16.2.1") == 0; + if (!startNewGame) { + startNewGame = reinterpret_cast(Attrib::DefaultDataArea(sizeof(unsigned int))); + } - if (!*startNewGame) { - g_pEAXSound->StartNewGamePlay(); - } + if (!*startNewGame) { + g_pEAXSound->StartNewGamePlay(); } } else { g_pEAXSound->StartNewGamePlay(); @@ -2278,12 +2258,12 @@ void GRaceStatus::SetRoaming() { mRaceParms = nullptr; WRoadNetwork::Get().ResetShortcuts(); - player = IPlayer::First(PLAYER_ALL); - while (player) { + for (IPlayer::List::const_iterator iter = IPlayer::GetList(PLAYER_ALL).begin(); iter != IPlayer::GetList(PLAYER_ALL).end(); ++iter) { ISimable *simable; IVehicle *vehicle; IVehicleAI *ivai; - IPlayer::List::const_iterator iter; + + player = *iter; if (player->InGameBreaker()) { player->ResetGameBreaker(true); @@ -2291,18 +2271,10 @@ void GRaceStatus::SetRoaming() { simable = player->GetSimable(); if (simable && simable->QueryInterface(&vehicle) && simable->QueryInterface(&ivai) && !ivai->GetPursuit()) { - if (GCopMgrCompat::Get()) { - GCopMgrCompat::Get()->ResetCopsForRestart(true); - } - } + ICopMgr *copMgr = ICopMgr::Get(); - iter = std::find(IPlayer::GetList(PLAYER_ALL).begin(), IPlayer::GetList(PLAYER_ALL).end(), player); - if (iter == IPlayer::GetList(PLAYER_ALL).end()) { - player = nullptr; - } else { - player = nullptr; - if (iter + 1 != IPlayer::GetList(PLAYER_ALL).end()) { - player = *(iter + 1); + if (copMgr) { + copMgr->ResetCopsForRestart(true); } } } @@ -3418,10 +3390,13 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c void GRaceStatus::DetermineRaceLength() { UMath::Vector4 positions[18]; UMath::Vector4 directions[18]; - UMath::Vector3 pos; - UMath::Vector3 dir; int numCheckpoints; - int numSegments; + int numPathPoints; + float totalDistance; + bool raceLoops; + int numSegmentLengths; + int j; + int numSpeedTraps; nSpeedTraps = 0; fSubsequentLapLength = 0.0f; @@ -3437,56 +3412,59 @@ void GRaceStatus::DetermineRaceLength() { WRoadNetwork::Get().SetRaceFilterValid(true); numCheckpoints = mRaceParms->GetNumCheckpoints(); - mRaceParms->GetStartPosition(pos); - positions[0] = UMath::Vector4Make(pos, 0.0f); - mRaceParms->GetStartDirection(dir); - directions[0] = UMath::Vector4Make(dir, 0.0f); + numPathPoints = numCheckpoints + 2; + mRaceParms->GetStartPosition(UMath::Vector4To3(positions[0])); + positions[0].w = 0.0f; + mRaceParms->GetStartDirection(UMath::Vector4To3(directions[0])); + directions[0].w = 0.0f; for (int i = 0; i < numCheckpoints; ++i) { - mRaceParms->GetCheckpointPosition(i, pos); - positions[i + 1] = UMath::Vector4Make(pos, 0.0f); - mRaceParms->GetCheckpointDirection(i, dir); - directions[i + 1] = UMath::Vector4Make(dir, 0.0f); + mRaceParms->GetCheckpointPosition(i, UMath::Vector4To3(positions[i + 1])); + positions[i + 1].w = 0.0f; + mRaceParms->GetCheckpointDirection(i, UMath::Vector4To3(directions[i + 1])); + directions[i + 1].w = 0.0f; } - mRaceParms->GetFinishPosition(pos); - positions[numCheckpoints + 1] = UMath::Vector4Make(pos, 0.0f); - mRaceParms->GetFinishDirection(dir); - directions[numCheckpoints + 1] = UMath::Vector4Make(dir, 0.0f); + mRaceParms->GetFinishPosition(UMath::Vector4To3(positions[numCheckpoints + 1])); + positions[numCheckpoints + 1].w = 0.0f; + mRaceParms->GetFinishDirection(UMath::Vector4To3(directions[numCheckpoints + 1])); + directions[numCheckpoints + 1].w = 0.0f; - numSegments = numCheckpoints + 1; - if (mRaceParms->GetIsLoopingRace()) { - numSegments = numCheckpoints + 2; + raceLoops = mRaceParms->GetIsLoopingRace(); + totalDistance = 0.0f; + numSegmentLengths = numPathPoints; + if (!raceLoops) { + numSegmentLengths = numPathPoints - 1; } - for (int i = 0; i < numSegments; ++i) { - int end = (i % (numCheckpoints + 1)) + 1; - float segmentLength = DetermineRaceSegmentLength(positions, directions, i, end); - - mSegmentLengths[i] = segmentLength; - fRaceLength += segmentLength; + for (j = 0; j < numSegmentLengths; ++j) { + mSegmentLengths[j] = DetermineRaceSegmentLength(positions, directions, j, (j % (numCheckpoints + 1)) + 1); + totalDistance += mSegmentLengths[j]; } - if (mRaceParms->GetIsLoopingRace()) { - fSubsequentLapLength = fRaceLength - mSegmentLengths[0]; - fFirstLapLength = fRaceLength - mSegmentLengths[numCheckpoints + 1]; + if (raceLoops) { + fSubsequentLapLength = totalDistance - mSegmentLengths[0]; + fFirstLapLength = totalDistance - mSegmentLengths[numCheckpoints + 1]; fRaceLength = fSubsequentLapLength * static_cast(mRaceParms->GetNumLaps() - 1) + fFirstLapLength; } else { - fSubsequentLapLength = fRaceLength; - fFirstLapLength = fRaceLength; + fSubsequentLapLength = totalDistance; + fRaceLength = totalDistance; + fFirstLapLength = totalDistance; } { WRoadNav nav; - nav.SetPathType(WRoadNav::kPathChopper); + nav.SetPathType(static_cast(6)); nav.InitAtPoint(UMath::Vector4To3(positions[numCheckpoints + 1]), UMath::Vector4To3(directions[numCheckpoints + 1]), true, 1.0f); if (nav.IsValid()) { for (int i = 0; i < 100; ++i) { + int segmentNumber; WRoadSegment *segment; nav.IncNavPosition(1.0f, UMath::Vector3::kZero, 0.0f); - segment = const_cast(nav.GetSegment()); + segmentNumber = nav.GetSegmentInd(); + segment = const_cast(WRoadNetwork::Get().GetSegment(segmentNumber)); segment->fFlags |= 0x8000; if (nav.GetNodeInd() == 1) { segment->fFlags |= 0x8004; @@ -3497,14 +3475,22 @@ void GRaceStatus::DetermineRaceLength() { } } - nSpeedTraps = 0; - for (unsigned int i = 0; i < GManager::Get().GetNumSpeedTraps() && nSpeedTraps < 16; ++i) { - GTrigger *trigger = GManager::Get().GetSpeedTrap(i)->GetTrapTrigger(); + { + GObjectIterator iter(0x100); + + numSpeedTraps = 0; + while (iter.IsValid()) { + GTrigger *trigger = iter.GetInstance(); - if (trigger) { - aSpeedTraps[nSpeedTraps] = trigger; - ++nSpeedTraps; + if (!trigger->OpenWorldSpeedTrap(0)) { + aSpeedTraps[numSpeedTraps] = trigger; + ++numSpeedTraps; + } + + iter.Advance(); } + + nSpeedTraps = numSpeedTraps; } } From ba5457ef64fc9e68aefea81c4b2730fbb7bbdfcb Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 12:27:13 +0100 Subject: [PATCH 309/691] 65.33%: inline GRaceStatus::AddRacer setup --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 79 +++++++++++++++++--- 1 file changed, 68 insertions(+), 11 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 49d49c947..30b5c1df2 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2647,20 +2647,77 @@ GRacerInfo &GRaceStatus::AddSimablePlayer(ISimable *isim) { } void GRaceStatus::AddRacer(GRuntimeInstance *racer) { - GCharacter *character = static_cast(racer); - IVehicle *vehicle = character ? character->GetSpawnedVehicle() : nullptr; - ISimable *isimable = nullptr; - int index = mRacerCount; - GRacerInfo &info = mRacerInfo[index]; + GRacerInfo &info = mRacerInfo[mRacerCount]; + + ++mRacerCount; + info.mhSimable = nullptr; + info.mGameCharacter = nullptr; + info.mName = nullptr; + info.mIndex = -1; + info.mRanking = 0; + info.mAiRanking = 0; + info.mPctRaceComplete = 0.0f; + info.mKnockedOut = false; + info.mTotalled = false; + info.mEngineBlown = false; + info.mBusted = false; + info.mChallengeComplete = false; + info.mFinishedRacing = false; + info.mCameraDetached = false; + info.mPctLapComplete = 0.0f; + info.mLapsCompleted = 0; + info.mCheckpointsHitThisLap = 0; + info.mTollboothsCrossed = 0; + info.mSpeedTrapsCrossed = 0; + info.mDistToNextCheckpoint = 0.0f; + info.mDistanceDriven = 0.0f; + info.mTopSpeed = 0.0f; + info.mFinishingSpeed = 0.0f; + info.mPoundsNOSUsed = 0.0f; + info.mTimeCrossedLastCheck = 0.0f; + info.mTotalUpdateTime = 0.0f; + info.mNumPerfectShifts = 0; + info.mNumTrafficCarsHit = 0; + info.mSpeedBreakerTime = 0.0f; + info.mPointTotal = 0.0f; + info.mZeroToSixtyTime = 0.0f; + info.mQuarterMileTime = 0.0f; + info.mRaceTimer.Stop(); + info.mRaceTimer.Reset(0.0f); + info.mLapTimer.Stop(); + info.mLapTimer.Reset(0.0f); + info.mCheckTimer.Stop(); + info.mCheckTimer.Reset(0.0f); + info.mSavedPosition = UMath::Vector3::kZero; + info.mSavedHeatLevel = 0.0f; + info.mSavedDirection = UMath::Vector3::kZero; + info.mSavedSpeed = 0.0f; +#ifndef EA_BUILD_A124 + info.mDNF = false; +#endif - info.ClearAll(); - info.SetIndex(index); - info.SetRanking(index); - if (vehicle && vehicle->QueryInterface(&isimable)) { - info.SetSimable(isimable); + for (int i = 0; i < 16; ++i) { + info.mTimeRemainingToBooth[i] = 0.0f; } - ++mRacerCount; + for (int i = 0; i < 16; ++i) { + info.mSpeedTrapSpeed[i] = 0.0f; + info.mSpeedTrapPosition[i] = -1; + } + +#ifndef EA_BUILD_A124 + for (int i = 0; i < 4; ++i) { + info.mSplitTimes[i] = 0.0f; + info.mSplitRankings[i] = 0; + } +#endif + + info.mGameCharacter = static_cast(racer); + info.SetIndex(mRacerCount - 1); + + if (!info.ChooseBossName() && !info.ChooseRacerName()) { + info.ChooseRandomName(); + } } void GRaceStatus::SetRaceActivity(GActivity *activity) { From 6a99a6df52e3e1ae6ad6ca38ba8d27039907cf5f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 12:30:15 +0100 Subject: [PATCH 310/691] 65.48%: preload stock cars in GManager --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 25 +++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index db7f34a69..03a42060f 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -15,6 +15,7 @@ #include "Speed/Indep/Src/Interfaces/SimActivities/ITrafficMgr.h" #include "Speed/Indep/Src/Interfaces/Simables/IAI.h" #include "Speed/Indep/Src/Interfaces/Simables/IArticulatedVehicle.h" +#include "Speed/Indep/Src/Physics/PVehicle.h" #include "Speed/Indep/Src/Frontend/FEManager.hpp" #include "Speed/Indep/Src/Misc/GameFlow.hpp" #include "Speed/Indep/Src/Misc/LZCompress.hpp" @@ -1698,15 +1699,31 @@ void GManager::ClearStockCars() { } void GManager::ReserveStockCar(const char *carName) { - unsigned int carKey; + unsigned int carHash; + StockCarMap::iterator iterExisting; if (!carName || !*carName) { return; } - carKey = Attrib::StringHash32(carName); - if (mStockCars.find(carKey) == mStockCars.end()) { - mStockCars.insert(StockCarMap::value_type(carKey, static_cast(nullptr))); + carHash = Attrib::StringHash32(carName); + iterExisting = mStockCars.find(carHash); + if (iterExisting == mStockCars.end()) { + UMath::Vector3 pos = UMath::Vector3::kZero; + UMath::Vector3 dir = UMath::Vector3::kZero; + IVehicleCache *cache = static_cast(this); + VehicleParams params(cache, DRIVER_TRAFFIC, Attrib::StringToKey(carName), dir, pos, 0, nullptr, nullptr); + ISimable *simable = UTL::COM::Factory::CreateInstance("PVehicle", params); + + if (simable) { + IVehicle *vehicle; + + if (simable->QueryInterface(&vehicle)) { + vehicle->Deactivate(); + } + + mStockCars[carHash] = simable; + } } } From c5a57ec45c2f87601706727c06882728f3339992 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 12:31:38 +0100 Subject: [PATCH 311/691] 65.76%: rewrite GRaceStatus::ComputeCatchUpSkill --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 55 ++++++++++---------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 30b5c1df2..65827969e 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3011,41 +3011,42 @@ bool GRaceStatus::ComputeCatchUpSkill(GRacerInfo *racer_info, PidError *pid, flo float glue_level = 0.5f; bool is_boss = false; bool use_race_override = false; - float percent_complete = racer_info->GetPctRaceComplete(); + float percent_complete; float glue_skill; float glue_spread; float glue_integral; float glue_derivative; - float glue_p = pid->GetErrorIntegral(); - float glue_error = pid->GetErrorDerivative(); + float glue_p; + float glue_error; float glue_output; - if (!off_world) { - if (GetRaceContext() == GRace::kRaceContext_QuickRace) { - if (!mRaceParms || !mRaceParms->GetCatchUp()) { - return false; - } - - glue_level = Tweak_QuickRaceGlue[mRaceParms->GetDifficulty()]; - } else { - if (GetRaceContext() != GRace::kRaceContext_Career) { - return false; - } + if (off_world) { + glue_level = 1.0f; + } else if (GetRaceContext() == GRace::kRaceContext_QuickRace) { + if (!mRaceParms || !mRaceParms->GetCatchUp()) { + return false; + } - glue_level = bClamp((GetAdaptiveDifficutly() + 1.0f) * 0.5f, 0.0f, 1.0f); + glue_level = Tweak_QuickRaceGlue[mRaceParms->GetDifficulty()]; + } else { + if (GetRaceContext() != GRace::kRaceContext_Career) { + return false; + } - if (mRaceParms) { - use_race_override = mRaceParms->GetCatchUpOverride(); - if (mRaceParms->GetIsBossRace()) { - is_boss = true; - glue_level = ((1.0f - glue_level) * 0.5f) + glue_level; - } + glue_level = UMath::Clamp((GetAdaptiveDifficutly() + 1.0f) * 0.5f, 0.0f, 1.0f); + if (mRaceParms) { + use_race_override = mRaceParms->GetCatchUpOverride(); + if (mRaceParms->GetIsBossRace()) { + is_boss = true; + glue_level = UMath::Lerp(glue_level, 1.0f, 0.5f); } } - } else { - glue_level = 1.0f; } + percent_complete = racer_info->GetPctRaceComplete(); + glue_p = pid->GetErrorIntegral(); + glue_error = pid->GetErrorDerivative(); + if (use_race_override) { Table glue_skill_table(aCatchUpSkillData, nCatchUpSkillEntries, 0.0f, 100.0f); Table glue_spread_table(aCatchUpSpreadData, nCatchUpSpreadEntries, 0.0f, 100.0f); @@ -3055,15 +3056,13 @@ bool GRaceStatus::ComputeCatchUpSkill(GRacerInfo *racer_info, PidError *pid, flo glue_integral = fCatchUpIntegral; glue_derivative = fCatchUpDerivative; } else { - glue_spread = ((Tweak_GlueSpreadTable_High.GetValue(percent_complete) - Tweak_GlueSpreadTable_Low.GetValue(percent_complete)) * glue_level) + - Tweak_GlueSpreadTable_Low.GetValue(percent_complete); - glue_skill = ((Tweak_GlueStrengthTable_High.GetValue(percent_complete) - Tweak_GlueStrengthTable_Low.GetValue(percent_complete)) * glue_level) + - Tweak_GlueStrengthTable_Low.GetValue(percent_complete); + glue_spread = UMath::Lerp(Tweak_GlueSpreadTable_Low.GetValue(percent_complete), Tweak_GlueSpreadTable_High.GetValue(percent_complete), glue_level); + glue_skill = UMath::Lerp(Tweak_GlueStrengthTable_Low.GetValue(percent_complete), Tweak_GlueStrengthTable_High.GetValue(percent_complete), glue_level); glue_integral = 5.0e-5f; glue_derivative = 0.01f; } - glue_spread = bMax(glue_spread, 100.0f); + glue_spread = bMax(100.0f, glue_spread); glue_output = bClamp((2.0f / glue_spread) * pid->GetError() + glue_p * glue_integral + glue_error * glue_derivative, -1.0f, 1.0f); *skill = glue_skill * glue_output; From 842de99ad550fa6947ac3155c8fdcb11b50fba30 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 12:37:59 +0100 Subject: [PATCH 312/691] 65.90%: rewrite GMarker constructor --- src/Speed/Indep/Src/Gameplay/GMarker.cpp | 26 ++++++++++++++++-------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GMarker.cpp b/src/Speed/Indep/Src/Gameplay/GMarker.cpp index c8d300f04..a806bac9e 100644 --- a/src/Speed/Indep/Src/Gameplay/GMarker.cpp +++ b/src/Speed/Indep/Src/Gameplay/GMarker.cpp @@ -4,18 +4,26 @@ GMarker::GMarker(const Attrib::Key &markerKey) : GRuntimeInstance(markerKey, kGameplayObjType_Marker) { - Attrib::Gen::gameplay gameplayObj(markerKey, 0, nullptr); UMath::Matrix4 rotMat; - UMath::Vector3 position; - UMath::Vector3 forward = {0.0f, 0.0f, 1.0f}; + UMath::Vector3 initialVec = UMath::Vector3Make(0.0f, 0.0f, 1.0f); + const UMath::Vector3 *posPtr = reinterpret_cast(GetAttributePointer(0x9f743a0e, 0)); + const float *rotation = reinterpret_cast(GetAttributePointer(0x5a6a57c6, 0)); - position = gameplayObj.Position(0); - UMath::MultYRot(UMath::Matrix4::kIdentity, -gameplayObj.Rotation(0) * 0.00069444446f, rotMat); - VU0_MATRIX3x4_vect3mult(forward, rotMat, mDirection); + if (!posPtr) { + posPtr = reinterpret_cast(Attrib::DefaultDataArea(sizeof(UMath::Vector3))); + } - mPosition.x = -position.y; - mPosition.y = position.z; - mPosition.z = position.x; + if (!rotation) { + rotation = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); + } + + UMath::MultYRot(UMath::Matrix4::kIdentity, -*rotation * 0.00069444446f, rotMat); + VU0_MATRIX3x4_vect3mult(initialVec, rotMat, initialVec); + + mPosition.x = -posPtr->y; + mPosition.y = posPtr->z; + mPosition.z = posPtr->x; + mDirection = initialVec; } GMarker::~GMarker() {} From d745154a2126aaf828c45ed6092b77786560fbb1 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 12:39:51 +0100 Subject: [PATCH 313/691] 66.14%: implement GHandler filter checks --- src/Speed/Indep/Src/Gameplay/GHandler.cpp | 62 +++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GHandler.cpp b/src/Speed/Indep/Src/Gameplay/GHandler.cpp index 36e0dbf88..7330e4008 100644 --- a/src/Speed/Indep/Src/Gameplay/GHandler.cpp +++ b/src/Speed/Indep/Src/Gameplay/GHandler.cpp @@ -4,10 +4,25 @@ #include "Speed/Indep/Src/Lua/source/lauxlib.h" #include "Speed/Indep/Src/Lua/source/lua.h" #include "Speed/Indep/Src/Lua/LuaRuntime.h" +#include "Speed/Indep/Src/Misc/Hermes.h" #include "Speed/Indep/Src/Misc/LZCompress.hpp" void LZByteSwapHeader(LZHeader *header); +typedef void (*QueryFunc)(IMessageFilterContext *, int, const void *, int, bool *); + +struct MessageFilterHeader { + unsigned char mSourceOffset; + unsigned char mDestOffset; + unsigned char mSize; + unsigned char mInitialized; + QueryFunc mQuery; + unsigned char mQueryStaticData[1]; +}; + +void ByteSwapStaticData(const void *data) __asm__("ByteSwapStaticData__5QueryPCv"); +QueryFunc LookupQueryFunc(unsigned int key) __asm__("LookupQueryFunc__5QueryUi"); + GHandler::GHandler(const Attrib::Key &handlerKey) : GRuntimeInstance(handlerKey, kGameplayObjType_Handler), // mAttached(false) {} @@ -71,6 +86,53 @@ void GHandler::HandleMessage(LuaMessageDeliveryInfo *deliveryInfo) { ExecuteScriptedHandler(deliveryInfo); } +bool GHandler::MessagePassesFilters(LuaMessageDeliveryInfo *deliveryInfo) { + struct BlobView { + unsigned int mSize; + const void *mData; + }; + + for (unsigned int onFilter = 0;; onFilter++) { + if (onFilter >= Num_FilterBlocks()) { + return true; + } + + const Attrib::Blob *blobPtr = reinterpret_cast(GetAttributePointer(0x56e1436d, onFilter)); + + if (blobPtr) { + Attrib::Blob blob = *blobPtr; + const BlobView &blobView = reinterpret_cast(blob); + unsigned char *blockData = reinterpret_cast(const_cast(blobView.mData)); + MessageFilterHeader *filter = reinterpret_cast(blockData); + bool filterPassed = true; + + if (!filter->mInitialized) { + ByteSwapStaticData(filter->mQueryStaticData); + filter->mQuery = LookupQueryFunc(*reinterpret_cast(filter->mQueryStaticData)); + filter->mInitialized = 1; + } + + IMessageFilterContext *filterContext = deliveryInfo; + const unsigned char *source = reinterpret_cast(filterContext->GetMessage()) + sizeof(Hermes::Message) + filter->mSourceOffset; + unsigned char *dest = blockData + filter->mDestOffset + 0xC; + + bMemCpy(dest, source, filter->mSize); + + if (filter->mQuery) { + filter->mQuery(filterContext, 0, filter->mQueryStaticData, 1, &filterPassed); + } + + if (!FilterModePassAll(0)) { + if (filterPassed) { + return true; + } + } else if (!filterPassed) { + return false; + } + } + } +} + void GHandler::ExecuteScriptedHandler(LuaMessageDeliveryInfo *deliveryInfo) { lua_State *luaState = deliveryInfo->GetLuaState(); From 7647b641d509b1e971a9dbfafa8f44e7647279e5 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 12:42:22 +0100 Subject: [PATCH 314/691] 66.38%: add visible icon gathering --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 59 +++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 03a42060f..cad522242 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1591,6 +1591,65 @@ void GManager::FreeIconAt(unsigned int index) { mNumIcons--; } +struct IconSort { + GIcon *icon; + int distance; +}; + +static int CompareVisibleIcons(const void *lhs, const void *rhs) { + return reinterpret_cast(lhs)->distance - reinterpret_cast(rhs)->distance; +} + +int GManager::GatherVisibleIcons(GIcon **iconArray, IPlayer *player) { + UMath::Vector3 playerPos = UMath::Vector3::kZero; + IconSort iconSort[200]; + ISimable *simable = nullptr; + + if (player) { + simable = player->GetSimable(); + } + + if (simable) { + const UMath::Vector3 &pos = simable->GetPosition(); + + playerPos.x = pos.z; + playerPos.y = -pos.x; + playerPos.z = pos.y; + } + + int count = 0; + for (unsigned int i = 0; i < mNumVisibleIcons; i++) { + GIcon *icon = mIcons[i]; + bool show = false; + + if (icon->IsFlagSet(1)) { + if (icon->IsFlagSet(2)) { + show = true; + } + } + + if (show) { + iconSort[count].icon = icon; + if (!simable) { + iconSort[count].distance = 0; + } else { + iconSort[count].distance = static_cast(VU0_v3distancesquarexz(icon->GetPosition(), playerPos)); + } + count++; + } + } + + if (simable) { + qsort(iconSort, count, sizeof(IconSort), CompareVisibleIcons); + } + + for (int i = 0; i < count; i++) { + iconArray[i] = iconSort[i].icon; + } + + return count; +} + bool GManager::AddIconForTrackMarker(TrackPositionMarker *marker, unsigned int tag) { if (marker->NameHash == tag) { UMath::Vector3 pos; From d1a5baca4550cfccba3a85a0e9fda23594b77395 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 12:44:14 +0100 Subject: [PATCH 315/691] 66.59%: add GActivity handler-state lookup --- src/Speed/Indep/Src/Gameplay/GActivity.cpp | 56 ++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GActivity.cpp b/src/Speed/Indep/Src/Gameplay/GActivity.cpp index e4ad1a89f..fec7e8e46 100644 --- a/src/Speed/Indep/Src/Gameplay/GActivity.cpp +++ b/src/Speed/Indep/Src/Gameplay/GActivity.cpp @@ -123,6 +123,62 @@ unsigned int GActivity::StoreHandlers(GState *state, UTL::Std::vector(handler->GetAttributePointer(0x918c796e, 0)); + + if (!handlerState) { + handlerState = reinterpret_cast(Attrib::DefaultDataArea(sizeof(Attrib::Key))); + } + + if (*handlerState == state->GetCollection()) { + const Attrib::Key *handlerActivity = reinterpret_cast(handler->GetAttributePointer(0x857fe432, 0)); + + if (!handlerActivity) { + handlerActivity = reinterpret_cast(Attrib::DefaultDataArea(sizeof(Attrib::Key))); + } + + if (*handlerActivity == GetCollection()) { + return true; + } else { + Attrib::Instance activity(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), *handlerActivity), 0, nullptr); + const Attrib::Gen::gameplay::_LayoutStruct *layout = + reinterpret_cast(activity.GetLayoutPointer()); + + if (!layout) { + layout = reinterpret_cast( + Attrib::DefaultDataArea(sizeof(Attrib::Gen::gameplay::_LayoutStruct))); + } + + if (bStrCmp(layout->CollectionName, CollectionName()) == 0) { + return true; + } else { + Attrib::Key collection = GetCollection(); + + if (collection) { + do { + if (collection == *handlerActivity) { + return true; + } + + Attrib::Instance parent(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), collection), 0, nullptr); + const Attrib::Gen::gameplay::_LayoutStruct *parentLayout = + reinterpret_cast(parent.GetLayoutPointer()); + + if (!parentLayout) { + parentLayout = reinterpret_cast( + Attrib::DefaultDataArea(sizeof(Attrib::Gen::gameplay::_LayoutStruct))); + } + + collection = parent.GetParent(); + } while (collection != 0); + } + } + } + } + + return false; +} + void GActivity::Run() { if (mRunning) { return; From 6049b64bc548f517fb320300a1b926e32b042861 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 12:46:23 +0100 Subject: [PATCH 316/691] 66.80%: rewrite GActivity serialization flow --- src/Speed/Indep/Src/Gameplay/GActivity.cpp | 75 +++++++++++++++++++--- 1 file changed, 65 insertions(+), 10 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GActivity.cpp b/src/Speed/Indep/Src/Gameplay/GActivity.cpp index fec7e8e46..9aff585a1 100644 --- a/src/Speed/Indep/Src/Gameplay/GActivity.cpp +++ b/src/Speed/Indep/Src/Gameplay/GActivity.cpp @@ -7,6 +7,9 @@ #include "Speed/Indep/Src/Lua/LuaRuntime.h" #include "Speed/Indep/Src/Lua/source/lua.h" +unsigned short SerializeTable(lua_State *state, unsigned char *buffer, bool allowUserData) + __asm__("SerializeTable__10LuaRuntimeP9lua_StatePUcb"); + template struct GObjectIteratorTraits; template <> struct GObjectIteratorTraits { @@ -241,32 +244,84 @@ void GActivity::EnterState(GState *newState) { void GActivity::SerializeVars(bool abandonLuaTable) { SerializedHeader header; ObjectStateBlockHeader *block; - const bool *persistent; const char *stateName; + bool isDoneState; if (!mVarsInLuaVM) { return; } - stateName = nullptr; + stateName = ""; + if (mCurrentState) { + const char *const *stateNamePtr = reinterpret_cast(mCurrentState->GetAttributePointer(0x3E225EC1, 0)); + + if (!stateNamePtr) { + stateNamePtr = reinterpret_cast(Attrib::DefaultDataArea(sizeof(const char *))); + } + + stateName = *stateNamePtr; + } + + isDoneState = false; if (mCurrentState) { - stateName = mCurrentState->CollectionName(); + const char *const *stateNamePtr = reinterpret_cast(mCurrentState->GetAttributePointer(0x3E225EC1, 0)); + + if (!stateNamePtr) { + stateNamePtr = reinterpret_cast(Attrib::DefaultDataArea(sizeof(const char *))); + } + + if (bStrCmp(*stateNamePtr, "done") == 0) { + isDoneState = true; + } } - header.mStateNameHash = stateName && *stateName ? Attrib::StringHash32(stateName) : 0; - header.mFlags = mRunning ? 1 : 0; + header.mStateNameHash = *stateName ? stringhash32(stateName) : 0; + header.mFlags = static_cast(mRunning != 0); header.mTableBytes = 0; - persistent = reinterpret_cast(GetAttributePointer(0xE4542E9B, 0) ? - GetAttributePointer(0xE4542E9B, 0) : - Attrib::DefaultDataArea(sizeof(bool))); - block = GManager::Get().AllocObjectStateBlock(GetCollection(), sizeof(header), *persistent); + if (isDoneState) { + header.mFlags = header.mFlags | 2; + } + + lua_State *luaState = LuaRuntime::Get().GetState(); + int top = lua_gettop(luaState); + + if (!isDoneState) { + lua_pushstring(luaState, *reinterpret_cast(GetLayoutPointer())); + lua_gettable(luaState, LUA_REGISTRYINDEX); + if (lua_type(luaState, -1) == LUA_TTABLE) { + const bool *persistent = reinterpret_cast(GetAttributePointer(0xE4542E9B, 0)); + + if (!persistent) { + persistent = reinterpret_cast(Attrib::DefaultDataArea(sizeof(bool))); + } + + header.mTableBytes = SerializeTable(luaState, nullptr, !*persistent); + } + } + + block = GManager::Get().AllocObjectStateBlock( + GetCollection(), header.mTableBytes + sizeof(header), + *reinterpret_cast(GetAttributePointer(0xE4542E9B, 0) ? GetAttributePointer(0xE4542E9B, 0) + : Attrib::DefaultDataArea(sizeof(bool)))); + if (block) { bMemCpy(block, &header, sizeof(header)); + if (header.mTableBytes != 0) { + const bool *persistent = reinterpret_cast(GetAttributePointer(0xE4542E9B, 0)); + + if (!persistent) { + persistent = reinterpret_cast(Attrib::DefaultDataArea(sizeof(bool))); + } + + SerializeTable(luaState, reinterpret_cast(block) + sizeof(header), !*persistent); + } } + lua_settop(luaState, top); + if (abandonLuaTable) { - mVarsInLuaVM = false; + ClearActivityVars(luaState); } } From 70d3a4c5a9289ab96012b40f5f923305d6447008 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 14:39:40 +0100 Subject: [PATCH 317/691] 68.6%: recover missing gameplay helper symbols --- src/Speed/Indep/Src/Gameplay/GActivity.cpp | 229 ++++++++++++++++-- .../Indep/Src/Gameplay/GRuntimeInstance.cpp | 50 +++- .../Indep/Src/Gameplay/GRuntimeInstance.h | 3 + .../Src/Gameplay/LuaMessageDeliveryInfo.h | 3 +- 4 files changed, 263 insertions(+), 22 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GActivity.cpp b/src/Speed/Indep/Src/Gameplay/GActivity.cpp index 9aff585a1..9d50a3831 100644 --- a/src/Speed/Indep/Src/Gameplay/GActivity.cpp +++ b/src/Speed/Indep/Src/Gameplay/GActivity.cpp @@ -1,14 +1,27 @@ #include "GActivity.h" #include "GManager.h" +#include "GTrigger.h" +#include "LuaMessageDeliveryInfo.h" #include "Speed/Indep/Libs/Support/Miscellaneous/StringHash.h" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" +#include "Speed/Indep/Src/Generated/Events/EChangeState.hpp" +#include "Speed/Indep/Src/Lua/LuaBindery.h" +#include "Speed/Indep/Src/Lua/LuaPostOffice.h" #include "Speed/Indep/bWare/Inc/bWare.hpp" #include "Speed/Indep/Src/Lua/LuaRuntime.h" #include "Speed/Indep/Src/Lua/source/lua.h" unsigned short SerializeTable(lua_State *state, unsigned char *buffer, bool allowUserData) __asm__("SerializeTable__10LuaRuntimeP9lua_StatePUcb"); +void AttachMetatable(lua_State *luaState, const char *name) __asm__("AttachMetatable__10LuaBinderyP9lua_StatePCc"); +void RegisterHandler(LuaPostOffice *postOffice, unsigned int messageType, GActivity *activity) + __asm__("RegisterHandler__13LuaPostOfficeUiP9GActivity"); +void UnregisterHandler(LuaPostOffice *postOffice, unsigned int messageType, GActivity *activity) + __asm__("UnregisterHandler__13LuaPostOfficeUiP9GActivity"); +void BeginDelivery(LuaRuntime *runtime) __asm__("BeginDelivery__10LuaRuntime"); +void EndDelivery(LuaRuntime *runtime) __asm__("EndDelivery__10LuaRuntime"); +extern LuaPostOffice *fObj__13LuaPostOffice __asm__("fObj__13LuaPostOffice"); template struct GObjectIteratorTraits; @@ -20,11 +33,13 @@ template <> struct GObjectIteratorTraits { enum { kType = kGameplayObjType_Handler }; }; +template <> struct GObjectIteratorTraits { + enum { kType = kGameplayObjType_Activity }; +}; + template class GObjectIterator { public: - GObjectIterator(unsigned int) - : mInstance(static_cast(GRuntimeInstance::sRingListHead[GObjectIteratorTraits::kType])) // - , mHead(mInstance) {} + GObjectIterator(unsigned int flagMask); bool IsValid() const { return mInstance != nullptr; @@ -34,33 +49,36 @@ template class GObjectIterator { return mInstance; } - void Advance() { - if (!mInstance) { - return; - } - - GRuntimeInstance *next = mInstance->GetNextRuntimeInstance(); - mInstance = next == mHead ? nullptr : static_cast(next); - } + void Advance(); private: T *mInstance; - GRuntimeInstance *mHead; + unsigned int mFlagMask; }; -template <> -GObjectIterator::GObjectIterator(unsigned int) - : mInstance(static_cast(GRuntimeInstance::sRingListHead[GObjectIteratorTraits::kType])) // - , mHead(mInstance) {} +template +GObjectIterator::GObjectIterator(unsigned int flagMask) + : mInstance(nullptr), // + mFlagMask(flagMask) { + mInstance = static_cast(GRuntimeInstance::sRingListHead[GObjectIteratorTraits::kType]); + if (mInstance && (mInstance->GetFlag(mFlagMask) == 0)) { + Advance(); + } +} -template <> -void GObjectIterator::Advance() { +template +void GObjectIterator::Advance() { if (!mInstance) { return; } - GRuntimeInstance *next = mInstance->GetNextRuntimeInstance(); - mInstance = next == mHead ? nullptr : static_cast(next); + do { + mInstance = static_cast(mInstance->GetNextRuntimeInstance()); + if (mInstance == GRuntimeInstance::sRingListHead[GObjectIteratorTraits::kType]) { + mInstance = nullptr; + return; + } + } while (mInstance->GetFlag(mFlagMask) == 0); } GActivity::GActivity(const Attrib::Key &activityKey) @@ -79,6 +97,15 @@ GActivity::~GActivity() { mStateHandlers.clear(); } +LuaMessageDeliveryInfo::~LuaMessageDeliveryInfo() {} + +void LuaMessageDeliveryInfo::BuildMessageTable() { + if (!mLuaTableBuilt && mBuildTableFunc) { + mBuildTableFunc(mLuaState, mMessageBase); + mLuaTableBuilt = true; + } +} + void GActivity::GatherStatesAndHandlers() { if (!mStateHandlers.empty()) { mStateHandlers.clear(); @@ -126,6 +153,82 @@ unsigned int GActivity::StoreHandlers(GState *state, UTL::Std::vector(state->GetAttributePointer(0xA0697302, 0)); + + if (!activityKey) { + activityKey = reinterpret_cast(Attrib::DefaultDataArea(sizeof(unsigned int))); + } + + if (*activityKey == parent.GetCollection()) { + return true; + } + + parentKey = parent.GetParent(); + } + + return false; +} + +void GActivity::RegisterMessageHandlers(GState *state) { + if (mRegisteredHandlersState != state) { + if (mRegisteredHandlersState) { + UnregisterMessageHandlers(); + } + + StateToHandlers::iterator iter = mStateHandlers.find(state); + for (UTL::Std::vector::iterator handler = iter->second.begin(); + handler != iter->second.end(); ++handler) { + RegisterHandler(fObj__13LuaPostOffice, (*handler)->GetCollection(), this); + } + + mRegisteredHandlersState = state; + } +} + +void GActivity::UnregisterMessageHandlers() { + if (mRegisteredHandlersState) { + StateToHandlers::iterator iter = mStateHandlers.find(mRegisteredHandlersState); + for (UTL::Std::vector::iterator handler = iter->second.begin(); + handler != iter->second.end(); ++handler) { + UnregisterHandler(fObj__13LuaPostOffice, (*handler)->GetCollection(), this); + } + + mRegisteredHandlersState = nullptr; + } +} + +void GActivity::ActivateReferencedTriggers(bool activate, GRuntimeInstance *instance) { + for (unsigned int i = 0; i < instance->GetConnectionCount(); i++) { + GTrigger *trigger = GRuntimeInstance::FindObject(instance->GetConnectionAt(i)->GetCollection()); + + if (trigger) { + if (activate) { + trigger->AddActivationReference(); + } else { + trigger->RemoveActivationReference(); + } + } + } + + for (unsigned int i = 0; i < instance->Get(0x916E0E78).GetLength(); i++) { + const unsigned int *childKey = reinterpret_cast(instance->GetAttributePointer(0x916E0E78, i)); + + if (!childKey) { + childKey = reinterpret_cast(Attrib::DefaultDataArea(sizeof(unsigned int))); + } + + GRuntimeInstance *child = GManager::Get().FindInstance(*childKey); + if (child) { + ActivateReferencedTriggers(activate, child); + } + } +} + bool GActivity::CollectionIsHandlerForState(GState *state, GHandler *handler) { const Attrib::Key *handlerState = reinterpret_cast(handler->GetAttributePointer(0x918c796e, 0)); @@ -241,6 +344,92 @@ void GActivity::EnterState(GState *newState) { } } +int GActivity::ChangeStateFromScript(lua_State *luaState) { + GActivity *activity = reinterpret_cast(lua_touserdata(luaState, -10002)); + GState *state = activity->GetStateByName(lua_tostring(luaState, 1)); + new EChangeState(activity->GetCollection(), state->GetCollection()); + return 0; +} + +void GActivity::HandleLocalMessage(UCrc32 messageType) { + LuaMessageDeliveryInfo deliveryInfo(messageType, nullptr, nullptr); + + BeginDelivery(&LuaRuntime::Get()); + deliveryInfo.SetLuaState(LuaRuntime::Get().GetState()); + HandleMessage(&deliveryInfo); + if (deliveryInfo.GetLuaState()) { + lua_settop(deliveryInfo.GetLuaState(), -2); + } + EndDelivery(&LuaRuntime::Get()); +} + +void GActivity::PushActivityVars(lua_State *luaState) { + if (!mVarsInLuaVM) { + DeserializeVars(); + } + + const char *activityName = *reinterpret_cast(GetLayoutPointer()); + + lua_pushstring(luaState, activityName); + lua_gettable(luaState, LUA_REGISTRYINDEX); + if (lua_type(luaState, -1) == LUA_TNIL) { + lua_settop(luaState, -2); + lua_newtable(luaState); + lua_pushstring(luaState, activityName); + lua_pushvalue(luaState, -2); + lua_settable(luaState, LUA_REGISTRYINDEX); + } + + mVarsInLuaVM = true; +} + +int GActivity::BuildActivityTables(lua_State *luaState) { + int top = lua_gettop(luaState); + GActivity **userdata = reinterpret_cast(lua_newuserdata(luaState, sizeof(GActivity *))); + + *userdata = this; + AttachMetatable(luaState, "GRuntimeInstance"); + PushActivityVars(luaState); + lua_pushstring(luaState, "ChangeState"); + lua_pushlightuserdata(luaState, this); + lua_pushcclosure(luaState, ChangeStateFromScript, 1); + lua_settable(luaState, LUA_GLOBALSINDEX); + return top; +} + +void GActivity::HandleMessage(LuaMessageDeliveryInfo *deliveryInfo) { + bool builtActivityTables = false; + int top = 0; + StateToHandlers::iterator iter = mStateHandlers.find(mCurrentState); + + for (UTL::Std::vector::iterator handler = iter->second.begin(); + handler != iter->second.end(); ++handler) { + if ((*handler)->GetCollection() == deliveryInfo->GetMessageKind()) { + deliveryInfo->SetActivityContext(this); + deliveryInfo->SetHandlerContext(*handler); + if ((*handler)->MessagePassesFilters(deliveryInfo)) { + deliveryInfo->BuildMessageTable(); + if (!builtActivityTables) { + top = BuildActivityTables(deliveryInfo->GetLuaState()); + builtActivityTables = true; + } + (*handler)->HandleMessage(deliveryInfo); + } + } + } + + if (builtActivityTables) { + lua_settop(deliveryInfo->GetLuaState(), top); + } +} + +template GObjectIterator::GObjectIterator(unsigned int flagMask); +template void GObjectIterator::Advance(); +template GObjectIterator::GObjectIterator(unsigned int flagMask); +template void GObjectIterator::Advance(); +template GObjectIterator::GObjectIterator(unsigned int flagMask); +template void GObjectIterator::Advance(); + void GActivity::SerializeVars(bool abandonLuaTable) { SerializedHeader header; ObjectStateBlockHeader *block; diff --git a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp index 87adb9490..9c8455320 100644 --- a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp @@ -1,5 +1,7 @@ #include "GRuntimeInstance.h" +#include "GActivity.h" +#include "GCharacter.h" #include "GManager.h" #include "GMarker.h" #include "GTrigger.h" @@ -182,8 +184,54 @@ bool GRuntimeInstance::GetDirection(UMath::Vector3 &dir) { return false; } +template +struct GRuntimeInstanceFindObjectTraits; + +template <> +struct GRuntimeInstanceFindObjectTraits { + enum { kType = kGameplayObjType_Activity }; +}; + +template <> +struct GRuntimeInstanceFindObjectTraits { + enum { kType = kGameplayObjType_Character }; +}; + +template <> +struct GRuntimeInstanceFindObjectTraits { + enum { kType = kGameplayObjType_Marker }; +}; + +template <> +struct GRuntimeInstanceFindObjectTraits { + enum { kType = kGameplayObjType_Trigger }; +}; + +template +T *GRuntimeInstance::FindObject(unsigned int key) { + T *instance = static_cast(sRingListHead[GRuntimeInstanceFindObjectTraits::kType]); + + while (instance) { + if (instance->GetCollection() == key) { + return instance; + } + + instance = static_cast(instance->GetNextRuntimeInstance()); + if (instance == sRingListHead[GRuntimeInstanceFindObjectTraits::kType]) { + return nullptr; + } + } + + return nullptr; +} + +template GActivity *GRuntimeInstance::FindObject(unsigned int key); +template GCharacter *GRuntimeInstance::FindObject(unsigned int key); +template GMarker *GRuntimeInstance::FindObject(unsigned int key); +template GTrigger *GRuntimeInstance::FindObject(unsigned int key); + GCollectionKey::GCollectionKey(GRuntimeInstance *inst) : mCollectionKey(inst->GetCollection()) {} GCollectionKey::operator GRuntimeInstance *() const { return GManager::Get().FindInstance(mCollectionKey); -} \ No newline at end of file +} diff --git a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.h b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.h index 47eafe506..281741733 100644 --- a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.h +++ b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.h @@ -58,6 +58,9 @@ class GRuntimeInstance : public Attrib::Gen::gameplay { bool GetDirection(UMath::Vector3 &dir); + template + static T *FindObject(unsigned int key); + virtual GameplayObjType GetType() const { return kGameplayObjType_Invalid; } diff --git a/src/Speed/Indep/Src/Gameplay/LuaMessageDeliveryInfo.h b/src/Speed/Indep/Src/Gameplay/LuaMessageDeliveryInfo.h index 04cf8298d..8e0b9a074 100644 --- a/src/Speed/Indep/Src/Gameplay/LuaMessageDeliveryInfo.h +++ b/src/Speed/Indep/Src/Gameplay/LuaMessageDeliveryInfo.h @@ -44,9 +44,10 @@ struct LuaMessageDeliveryInfo : public UTL::COM::Object, public IMessageFilterCo { } - ~LuaMessageDeliveryInfo() override {} + ~LuaMessageDeliveryInfo() override; unsigned int GetMessageKind() const { return mMessageKind.GetValue(); } + void BuildMessageTable(); void SetLuaState(lua_State *luaState) { mLuaState = luaState; } void SetActivityContext(GActivity *activity) { mActivityContext = activity; } From 9a9bc0cb0606d8092db138fe57ee13bc9a937b82 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 16:24:31 +0100 Subject: [PATCH 318/691] 69.4%: rebuild GRacerInfo helpers and vehicle path --- src/Speed/Indep/Src/Gameplay/GMarker.cpp | 22 +- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 239 ++++++++++++++----- src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 76 ++++++ 3 files changed, 257 insertions(+), 80 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GMarker.cpp b/src/Speed/Indep/Src/Gameplay/GMarker.cpp index a806bac9e..403577a19 100644 --- a/src/Speed/Indep/Src/Gameplay/GMarker.cpp +++ b/src/Speed/Indep/Src/Gameplay/GMarker.cpp @@ -4,25 +4,15 @@ GMarker::GMarker(const Attrib::Key &markerKey) : GRuntimeInstance(markerKey, kGameplayObjType_Marker) { + const UMath::Vector3 &pos = Position(0); UMath::Matrix4 rotMat; UMath::Vector3 initialVec = UMath::Vector3Make(0.0f, 0.0f, 1.0f); - const UMath::Vector3 *posPtr = reinterpret_cast(GetAttributePointer(0x9f743a0e, 0)); - const float *rotation = reinterpret_cast(GetAttributePointer(0x5a6a57c6, 0)); + UMath::MultYRot(UMath::Matrix4::kIdentity, -Rotation(0) * 0.00069444446f, rotMat); + UMath::Rotate(initialVec, rotMat, initialVec); - if (!posPtr) { - posPtr = reinterpret_cast(Attrib::DefaultDataArea(sizeof(UMath::Vector3))); - } - - if (!rotation) { - rotation = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); - } - - UMath::MultYRot(UMath::Matrix4::kIdentity, -*rotation * 0.00069444446f, rotMat); - VU0_MATRIX3x4_vect3mult(initialVec, rotMat, initialVec); - - mPosition.x = -posPtr->y; - mPosition.y = posPtr->z; - mPosition.z = posPtr->x; + mPosition.x = -pos.y; + mPosition.y = pos.z; + mPosition.z = pos.x; mDirection = initialVec; } diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 65827969e..b1dc7caa6 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -42,9 +42,27 @@ void SetOverRideRainIntensity(float intensity); bool DoesStringExist(unsigned int hash); const char *GetLocalizedString(unsigned int hash); extern int UnlockAllThings; -int NotNumeric(char c); -int SplitChars(char *in, char ***array, int (*func)(char)); -float ParseFloat(char *word); +extern int SkipFE; +extern const char *SkipFEOpponentPresetRide; +unsigned int bStringHashUpper(const char *text); + +struct PresetCar; +struct CarPartDatabase; + +extern CarPartDatabase CarPartDB; + +FECustomizationRecord *FECustomizationRecordCtor(FECustomizationRecord *self) __asm__("__21FECustomizationRecord"); +PresetCar *FindFEPresetCar(unsigned int key) __asm__("FindFEPresetCar__FUi"); +void FECustomizationRecordBecomePreset(FECustomizationRecord *self, PresetCar *preset) + __asm__("BecomePreset__21FECustomizationRecordP9PresetCar"); +void FECustomizationRecordWriteRideIntoRecord(FECustomizationRecord *self, const RideInfo *ride) + __asm__("WriteRideIntoRecord__21FECustomizationRecordPC8RideInfo"); +void RideInfoSetRandomParts(RideInfo *self) __asm__("SetRandomParts__8RideInfo"); +CarType CarPartDatabaseGetCarType(CarPartDatabase *self, unsigned int key) __asm__("GetCarType__15CarPartDatabaseUi"); + +static unsigned int GetPresetVehicleKey(PresetCar *preset) { + return *reinterpret_cast(reinterpret_cast(preset) + 0x54); +} #ifndef DECLARE_GAMEPLAY_MINIMAP_CLASS #define DECLARE_GAMEPLAY_MINIMAP_CLASS @@ -188,6 +206,98 @@ Table Tweak_GlueSpreadTable_High(Tweak_GlueSpreadData_High, 5, 0.0f, 100.0f); Table Tweak_GlueStrengthTable_Low(Tweak_GlueStrengthData_Low, 5, 0.0f, 100.0f); Table Tweak_GlueStrengthTable_High(Tweak_GlueStrengthData_High, 5, 0.0f, 100.0f); +int NotNumeric(char c) { + if (c == '-' || c == '.') { + return 0; + } + + int numeric = '0'; + if (c > '0') { + numeric = c; + } + if (numeric > '9') { + numeric = '9'; + } + + return c != numeric; +} + +int SplitChars(char *in, char ***array, int (*func)(char)) { + while (*in != '\0' && func(*in) != 0) { + in += 1; + } + + int count = 0; + char *cursor = in; + + while (*cursor != '\0') { + if (func(*cursor) == 0) { + count += 1; + while (*cursor != '\0' && func(*cursor) == 0) { + cursor += 1; + } + } else { + cursor += 1; + } + } + + *array = new char *[count]; + if (count > 0) { + int i = 0; + + do { + char *end = in; + + (*array)[i] = in; + i += 1; + while (*end != '\0' && func(*end) == 0) { + end += 1; + } + + in = end; + while (*in != '\0' && func(*in) != 0) { + in += 1; + } + + *end = '\0'; + } while (i < count); + } + + return count; +} + +float ParseFloat(char *word) { + float whole = 0.0f; + unsigned int index = static_cast(*word == '-'); + bool pastDecimal = false; + float scale = 1.0f; + + for (char c = word[index]; c != '\0'; c = word[++index]) { + if (c == '.') { + pastDecimal = true; + } else { + if (pastDecimal) { + scale *= 0.1f; + } else { + whole *= 10.0f; + } + + int digit = c - '0'; + + if (digit < 0) { + digit = 0; + } + if (digit > 9) { + digit = 9; + } + + whole = scale * static_cast(digit) + whole; + } + } + + return whole; +} + bool GRacerInfo::GetIsHuman() const { ISimable *simable = GetSimable(); return simable && simable->IsPlayer(); @@ -211,31 +321,80 @@ void GRacerInfo::SetSimable(ISimable *isim) { IVehicle *GRacerInfo::CreateVehicle(unsigned int default_key) { GCharacter *racerChar = GetGameCharacter(); - unsigned int vehicle_key = default_key; + const char *carName; + const char *carNameLowMem; + const char *presetRide; FECustomizationRecord customizations; - UMath::Vector3 direction = UMath::Vector3::kZero; - UMath::Vector3 position = UMath::Vector3::kZero; - IVehicleCache *cache = nullptr; + unsigned int vehicle_key; + Physics::Info::Performance ai_performance(1.0f, 0.0f, 0.0f); + IVehicleCache *cache; + UMath::Vector3 direction = {0.0f, 0.0f, 1.0f}; ISimable *result; IVehicle *vehicle = nullptr; - bMemSet(&customizations, 0, sizeof(customizations)); + if (!racerChar) { + return nullptr; + } - if (racerChar) { - const char *carName = racerChar->CarType(0); + carName = racerChar->CarType(0); + carNameLowMem = racerChar->CarTypeLowMem(0); + presetRide = racerChar->PresetRide(0); + FECustomizationRecordCtor(&customizations); + + if (SkipFE && bStrLen(SkipFEOpponentPresetRide) > 0) { + presetRide = SkipFEOpponentPresetRide; + } + vehicle_key = 0; + if (presetRide) { + PresetCar *preset = FindFEPresetCar(bStringHashUpper(presetRide)); + + if (preset) { + FECustomizationRecordBecomePreset(&customizations, preset); + vehicle_key = GetPresetVehicleKey(preset); + } + } + + if (vehicle_key == 0) { if (carName && *carName) { - vehicle_key = Attrib::StringToKey(carName); + vehicle_key = Attrib::StringKey(carName); + } + + if (vehicle_key == 0) { + vehicle_key = default_key; + } + } + + Attrib::Gen::pvehicle attributes(Attrib::FindCollection(Attrib::Gen::pvehicle::ClassKey(), vehicle_key), 0, nullptr); + + if (!attributes.IsValid()) { + return nullptr; + } + + if (customizations.Preset == 0) { + RideInfo ride; + const char *modelName = attributes.MODEL().GetString(); + + if (!modelName) { + modelName = ""; } + + ride.Init(CarPartDatabaseGetCarType(&CarPartDB, bStringHashUpper(modelName)), CarRenderUsage_AIRacer, 0, 0); + RideInfoSetRandomParts(&ride); + FECustomizationRecordWriteRideIntoRecord(&customizations, &ride); } + cache = nullptr; if (GRaceStatus::Exists()) { - cache = &GRaceStatus::Get(); + cache = static_cast(&GRaceStatus::Get()); } - result = UTL::COM::Factory::CreateInstance("PVehicle", VehicleParams(cache, DRIVER_RACER, vehicle_key, direction, position, 0, &customizations, nullptr)); - if (result && result->QueryInterface(&vehicle)) { - SetSimable(result); + VehicleParams params(cache, DRIVER_RACER, vehicle_key, direction, UMath::Vector3::kZero, 0, &customizations, &ai_performance); + result = UTL::COM::Factory::CreateInstance("PVehicle", params); + if (result) { + if (result->QueryInterface(&vehicle)) { + SetSimable(result); + } } return vehicle; @@ -491,55 +650,7 @@ bool GRacerInfo::AreStatsReady() const { } void GRacerInfo::ClearAll() { - mhSimable = nullptr; - mGameCharacter = nullptr; - mName = nullptr; - mIndex = 0; - mRanking = 0; - mAiRanking = 0; - mPctRaceComplete = 0.0f; - mKnockedOut = false; - mTotalled = false; - mEngineBlown = false; - mBusted = false; - mChallengeComplete = false; - mFinishedRacing = false; - mCameraDetached = false; - mPctLapComplete = 0.0f; - mLapsCompleted = 0; - mCheckpointsHitThisLap = 0; - mTollboothsCrossed = 0; - bMemSet(mTimeRemainingToBooth, 0, sizeof(mTimeRemainingToBooth)); - mSpeedTrapsCrossed = 0; - bMemSet(mSpeedTrapSpeed, 0, sizeof(mSpeedTrapSpeed)); - bMemSet(mSpeedTrapPosition, 0, sizeof(mSpeedTrapPosition)); - mDistToNextCheckpoint = 0.0f; - mDistanceDriven = 0.0f; - mTopSpeed = 0.0f; - mFinishingSpeed = 0.0f; - mPoundsNOSUsed = 0.0f; - mTimeCrossedLastCheck = 0.0f; - mTotalUpdateTime = 0.0f; - mNumPerfectShifts = 0; - mNumTrafficCarsHit = 0; - mSpeedBreakerTime = 0.0f; - mPointTotal = 0.0f; - mZeroToSixtyTime = 0.0f; - mQuarterMileTime = 0.0f; -#ifndef EA_BUILD_A124 - bMemSet(mSplitTimes, 0, sizeof(mSplitTimes)); - bMemSet(mSplitRankings, 0, sizeof(mSplitRankings)); -#endif - mRaceTimer.Reset(0.0f); - mLapTimer.Reset(0.0f); - mCheckTimer.Reset(0.0f); - mSavedPosition = UMath::Vector3Make(0.0f, 0.0f, 0.0f); - mSavedHeatLevel = 0.0f; - mSavedDirection = UMath::Vector3Make(0.0f, 0.0f, 0.0f); - mSavedSpeed = 0.0f; -#ifndef EA_BUILD_A124 - mDNF = false; -#endif + ClearRaceStats(); } void GRacerInfo::SaveStartPosition() { diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index 3102dbb06..a8b1ffeab 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -122,6 +122,82 @@ struct GRacerInfo { void ClearAll(); private: + inline void ClearRaceStats() { + mhSimable = nullptr; + mGameCharacter = nullptr; + mName = nullptr; + mIndex = -1; + mSavedHeatLevel = 0.0f; + mSavedSpeed = 0.0f; + mSavedPosition = UMath::Vector3::kZero; + mSavedDirection = UMath::Vector3::kZero; + mRanking = 0; + mAiRanking = 0; + mPctRaceComplete = 0.0f; + mKnockedOut = false; + mTotalled = false; + mEngineBlown = false; + mBusted = false; + mChallengeComplete = false; + mFinishedRacing = false; + mCameraDetached = false; + mPctLapComplete = 0.0f; + mLapsCompleted = 0; + mCheckpointsHitThisLap = 0; + mTollboothsCrossed = 0; + mSpeedTrapsCrossed = 0; + mDistToNextCheckpoint = 0.0f; + mDistanceDriven = 0.0f; + mTopSpeed = 0.0f; + mFinishingSpeed = 0.0f; + mPoundsNOSUsed = 0.0f; + mTimeCrossedLastCheck = 0.0f; + mTotalUpdateTime = 0.0f; + mNumPerfectShifts = 0; + mNumTrafficCarsHit = 0; + mPointTotal = 0.0f; + mZeroToSixtyTime = 0.0f; + mQuarterMileTime = 0.0f; + mSpeedBreakerTime = 0.0f; +#ifndef EA_BUILD_A124 + mDNF = false; +#endif + mRaceTimer.Stop(); + mRaceTimer.Reset(0.0f); + mLapTimer.Stop(); + mLapTimer.Reset(0.0f); + mCheckTimer.Stop(); + mCheckTimer.Reset(0.0f); + + { + int i; + + for (i = 0; i < 16; ++i) { + mTimeRemainingToBooth[i] = 0.0f; + } + } + + { + int i; + + for (i = 0; i < 16; ++i) { + mSpeedTrapSpeed[i] = 0.0f; + mSpeedTrapPosition[i] = -1; + } + } + +#ifndef EA_BUILD_A124 + { + int i; + + for (i = 0; i < 4; ++i) { + mSplitTimes[i] = 0.0f; + mSplitRankings[i] = 0; + } + } +#endif + } + HSIMABLE mhSimable; // offset 0x0, size 0x4 GCharacter *mGameCharacter; // offset 0x4, size 0x4 const char *mName; // offset 0x8, size 0x4 From f1907d2b7462448aaaa8279a65ca3a5ac9a16f0b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 16:42:07 +0100 Subject: [PATCH 319/691] 69.5%: tighten GTrigger constructor setup --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 86545ac7a..8372bbd62 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -23,13 +23,14 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) mEnabled(false), // mActivationReferences(0) { const UMath::Vector3 &pos = Position(0); - const UMath::Vector3 *dimensions = reinterpret_cast(GetAttributePointer(0x6D9E21AD, 0)); - const float *radiusAttr = reinterpret_cast(GetAttributePointer(0x39BF8002, 0)); + const UMath::Vector3 &dimensions = Dimensions(0); + bool hasDimensions = GetAttributePointer(0x6D9E21AD, 0) != nullptr; + bool hasRadius = GetAttributePointer(0x39BF8002, 0) != nullptr; UMath::Vector3 initialVec = UMath::Vector3Make(0.0f, 0.0f, 1.0f); UMath::Vector3 posSwizzled = UMath::Vector3Make(-pos.y, pos.z, pos.x); + UMath::Vector3 dimSwizzled = UMath::Vector3Make(dimensions.x, dimensions.z, dimensions.y); UMath::Matrix4 rotMat; - UMath::Matrix4 triggerMat; - float radius = radiusAttr ? *radiusAttr : 0.0f; + float radius = Radius(0); bool showIconBasedOnBin = true; GIcon::Type iconType = GIcon::kType_Invalid; @@ -39,19 +40,16 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) UMath::MultYRot(UMath::Matrix4::kIdentity, -Rotation(0) * 0.00069444446f, rotMat); UMath::Rotate(initialVec, rotMat, mDirection); + UMath::Set(rotMat, 3, UMath::Vector4Make(posSwizzled, 1.0f)); - triggerMat = rotMat; - UMath::Set(triggerMat, 3, UMath::Vector4Make(posSwizzled, 1.0f)); - - if (dimensions) { - UMath::Vector3 dimSwizzled = UMath::Vector3Make(dimensions->x, dimensions->z, dimensions->y); - mWorldTrigger = WTrigger(triggerMat, dimSwizzled, &mEventList, OneShot(0) ? 2 : 0); + if (hasDimensions) { + mWorldTrigger = WTrigger(rotMat, dimSwizzled, &mEventList, OneShot(0) ? 2 : 0); } else { - if (!radiusAttr) { + if (!hasRadius) { float width = Width(0); radius = UMath::Sqrt(width * width + 1.0f); } - mWorldTrigger = WTrigger(triggerMat, radius, radius * 2.0f, &mEventList, OneShot(0) ? 2 : 0); + mWorldTrigger = WTrigger(rotMat, radius, radius * 2.0f, &mEventList, OneShot(0) ? 2 : 0); } mEventList.fNumEvents = 1; From a2955cf0809406f4c90bd46e3295888ff44456f7 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 16:54:48 +0100 Subject: [PATCH 320/691] 69.7%: reshape UpdateRaceScore records --- .../Indep/Src/Gameplay/GRaceDatabase.cpp | 36 +++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index ba1676763..7b0c544a8 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -756,36 +756,42 @@ void GRaceDatabase::UpdateRaceScore(bool raceCompleted) { int *scoreInfo; float recordValue; float value; - int scale; + unsigned int eventHash; race = GRaceStatus::Get().GetRaceParameters(); + if (!race) { + return; + } + + eventHash = race->GetEventHash(); winner = GRaceStatus::Get().GetWinningPlayerInfo(); - if (!winner || !race) { + if (!winner) { return; } - scoreInfo = reinterpret_cast(GetScoreInfo(race->GetEventHash())); + scoreInfo = reinterpret_cast(GetScoreInfo(eventHash)); value = winner->GetTopSpeed(); - scale = 8; - recordValue = static_cast(*reinterpret_cast(reinterpret_cast(scoreInfo) + 0x0C)) / scale; + recordValue = static_cast(*reinterpret_cast(reinterpret_cast(scoreInfo) + 0x0C)) / + FixedPoint::GetScale(); if (recordValue < value) { recordValue = value; } - *reinterpret_cast(reinterpret_cast(scoreInfo) + 0x0C) = static_cast(recordValue * scale); + *reinterpret_cast(reinterpret_cast(scoreInfo) + 0x0C) = + static_cast(recordValue * FixedPoint::GetScale()); - value = winner->GetDistDriven(); - recordValue = static_cast(*reinterpret_cast(reinterpret_cast(scoreInfo) + 0x0E)) / scale; + value = winner->CalcAverageSpeed(); + recordValue = static_cast(*reinterpret_cast(reinterpret_cast(scoreInfo) + 0x0E)) / + FixedPoint::GetScale(); if (recordValue < value) { recordValue = value; } - *reinterpret_cast(reinterpret_cast(scoreInfo) + 0x0E) = static_cast(recordValue * scale); + *reinterpret_cast(reinterpret_cast(scoreInfo) + 0x0E) = + static_cast(recordValue * FixedPoint::GetScale()); switch (race->GetRaceType()) { case GRace::kRaceType_P2P: - case GRace::kRaceType_Circuit: case GRace::kRaceType_Drag: - case GRace::kRaceType_Knockout: case GRace::kRaceType_Tollbooth: case GRace::kRaceType_JumpToSpeedTrap: case GRace::kRaceType_JumpToMilestone: @@ -794,6 +800,14 @@ void GRaceDatabase::UpdateRaceScore(bool raceCompleted) { } break; + case GRace::kRaceType_Circuit: + case GRace::kRaceType_Knockout: + if ((scoreInfo[1] & 3) == 0 || + GRaceStatus::Get().GetBestLapTime(winner->GetIndex()) < *reinterpret_cast(scoreInfo + 2)) { + *reinterpret_cast(scoreInfo + 2) = GRaceStatus::Get().GetBestLapTime(winner->GetIndex()); + } + break; + case GRace::kRaceType_SpeedTrap: case GRace::kRaceType_CashGrab: if ((scoreInfo[1] & 3) == 0 || *reinterpret_cast(scoreInfo + 2) < winner->GetPointTotal()) { From 0ea4e9ac4c4790c06b7f1a8c2f3ed93b6d531275 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 17:00:57 +0100 Subject: [PATCH 321/691] 69.74%: tighten UpdateRaceScore locals and switch --- .../Indep/Src/Gameplay/GRaceDatabase.cpp | 73 +++++++++---------- 1 file changed, 36 insertions(+), 37 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index 7b0c544a8..69dddf26a 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -751,73 +751,72 @@ const char *GRaceDatabase::GetNextDDayRace() { } void GRaceDatabase::UpdateRaceScore(bool raceCompleted) { - GRaceParameters *race; - GRacerInfo *winner; - int *scoreInfo; + GRaceParameters *parms; + unsigned int eventHash; + GRacerInfo *racerInfo; + GRaceSaveInfo *saveInfo; float recordValue; float value; - unsigned int eventHash; - - race = GRaceStatus::Get().GetRaceParameters(); - if (!race) { - return; - } - eventHash = race->GetEventHash(); - winner = GRaceStatus::Get().GetWinningPlayerInfo(); - if (!winner) { + parms = GRaceStatus::Get().GetRaceParameters(); + eventHash = parms->GetEventHash(); + racerInfo = GRaceStatus::Get().GetWinningPlayerInfo(); + if (!racerInfo) { return; } - scoreInfo = reinterpret_cast(GetScoreInfo(eventHash)); + saveInfo = GetScoreInfo(eventHash); - value = winner->GetTopSpeed(); - recordValue = static_cast(*reinterpret_cast(reinterpret_cast(scoreInfo) + 0x0C)) / + value = racerInfo->GetTopSpeed(); + recordValue = static_cast(*reinterpret_cast(reinterpret_cast(saveInfo) + 0x0C)) / FixedPoint::GetScale(); if (recordValue < value) { recordValue = value; } - *reinterpret_cast(reinterpret_cast(scoreInfo) + 0x0C) = + *reinterpret_cast(reinterpret_cast(saveInfo) + 0x0C) = static_cast(recordValue * FixedPoint::GetScale()); - value = winner->CalcAverageSpeed(); - recordValue = static_cast(*reinterpret_cast(reinterpret_cast(scoreInfo) + 0x0E)) / + value = racerInfo->CalcAverageSpeed(); + recordValue = static_cast(*reinterpret_cast(reinterpret_cast(saveInfo) + 0x0E)) / FixedPoint::GetScale(); if (recordValue < value) { recordValue = value; } - *reinterpret_cast(reinterpret_cast(scoreInfo) + 0x0E) = + *reinterpret_cast(reinterpret_cast(saveInfo) + 0x0E) = static_cast(recordValue * FixedPoint::GetScale()); - switch (race->GetRaceType()) { + switch (parms->GetRaceType()) { + case GRace::kRaceType_Circuit: + case GRace::kRaceType_Knockout: + if ((reinterpret_cast(saveInfo)[1] & 3) == 0 || + GRaceStatus::Get().GetBestLapTime(racerInfo->GetIndex()) < *reinterpret_cast(reinterpret_cast(saveInfo) + 2)) { + *reinterpret_cast(reinterpret_cast(saveInfo) + 2) = GRaceStatus::Get().GetBestLapTime(racerInfo->GetIndex()); + } + break; + case GRace::kRaceType_P2P: case GRace::kRaceType_Drag: case GRace::kRaceType_Tollbooth: case GRace::kRaceType_JumpToSpeedTrap: case GRace::kRaceType_JumpToMilestone: - if ((scoreInfo[1] & 3) == 0 || winner->GetRaceTime() < *reinterpret_cast(scoreInfo + 2)) { - *reinterpret_cast(scoreInfo + 2) = winner->GetRaceTime(); + if ((reinterpret_cast(saveInfo)[1] & 3) == 0 || + racerInfo->GetRaceTime() < *reinterpret_cast(reinterpret_cast(saveInfo) + 2)) { + *reinterpret_cast(reinterpret_cast(saveInfo) + 2) = racerInfo->GetRaceTime(); } break; - case GRace::kRaceType_Circuit: - case GRace::kRaceType_Knockout: - if ((scoreInfo[1] & 3) == 0 || - GRaceStatus::Get().GetBestLapTime(winner->GetIndex()) < *reinterpret_cast(scoreInfo + 2)) { - *reinterpret_cast(scoreInfo + 2) = GRaceStatus::Get().GetBestLapTime(winner->GetIndex()); + case GRace::kRaceType_Checkpoint: + if ((reinterpret_cast(saveInfo)[1] & 3) == 0 || + static_cast(reinterpret_cast(saveInfo)[2]) < static_cast(racerInfo->GetPointTotal())) { + reinterpret_cast(saveInfo)[2] = static_cast(racerInfo->GetPointTotal()); } break; case GRace::kRaceType_SpeedTrap: case GRace::kRaceType_CashGrab: - if ((scoreInfo[1] & 3) == 0 || *reinterpret_cast(scoreInfo + 2) < winner->GetPointTotal()) { - *reinterpret_cast(scoreInfo + 2) = winner->GetPointTotal(); - } - break; - - case GRace::kRaceType_Checkpoint: - if ((scoreInfo[1] & 3) == 0 || static_cast(scoreInfo[2]) < static_cast(winner->GetPointTotal())) { - scoreInfo[2] = static_cast(winner->GetPointTotal()); + if ((reinterpret_cast(saveInfo)[1] & 3) == 0 || + *reinterpret_cast(reinterpret_cast(saveInfo) + 2) < racerInfo->GetPointTotal()) { + *reinterpret_cast(reinterpret_cast(saveInfo) + 2) = racerInfo->GetPointTotal(); } break; @@ -827,9 +826,9 @@ void GRaceDatabase::UpdateRaceScore(bool raceCompleted) { if (raceCompleted) { if (GRaceStatus::Get().GetRaceContext() == GRace::kRaceContext_Career) { - scoreInfo[1] |= kCompleted_ContextCareer; + reinterpret_cast(saveInfo)[1] |= kCompleted_ContextCareer; } else { - scoreInfo[1] |= kCompleted_ContextQuickRace; + reinterpret_cast(saveInfo)[1] |= kCompleted_ContextQuickRace; } RefreshBinProgress(); } From 8a7ac975e1da36a88240a97dda4f8494d7abd6b5 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 17:09:35 +0100 Subject: [PATCH 322/691] 69.79%: refine UpdateRaceScore record updates --- .../Indep/Src/Gameplay/GRaceDatabase.cpp | 36 ++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index 69dddf26a..18a67d462 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -770,20 +770,16 @@ void GRaceDatabase::UpdateRaceScore(bool raceCompleted) { value = racerInfo->GetTopSpeed(); recordValue = static_cast(*reinterpret_cast(reinterpret_cast(saveInfo) + 0x0C)) / FixedPoint::GetScale(); - if (recordValue < value) { - recordValue = value; - } - *reinterpret_cast(reinterpret_cast(saveInfo) + 0x0C) = - static_cast(recordValue * FixedPoint::GetScale()); + value = UMath::Max(recordValue, value); + *reinterpret_cast(reinterpret_cast(saveInfo) + 0x0C) = + FixedPoint(value).mValue; value = racerInfo->CalcAverageSpeed(); recordValue = static_cast(*reinterpret_cast(reinterpret_cast(saveInfo) + 0x0E)) / FixedPoint::GetScale(); - if (recordValue < value) { - recordValue = value; - } - *reinterpret_cast(reinterpret_cast(saveInfo) + 0x0E) = - static_cast(recordValue * FixedPoint::GetScale()); + value = UMath::Max(recordValue, value); + *reinterpret_cast(reinterpret_cast(saveInfo) + 0x0E) = + FixedPoint(value).mValue; switch (parms->GetRaceType()) { case GRace::kRaceType_Circuit: @@ -806,18 +802,26 @@ void GRaceDatabase::UpdateRaceScore(bool raceCompleted) { break; case GRace::kRaceType_Checkpoint: - if ((reinterpret_cast(saveInfo)[1] & 3) == 0 || - static_cast(reinterpret_cast(saveInfo)[2]) < static_cast(racerInfo->GetPointTotal())) { - reinterpret_cast(saveInfo)[2] = static_cast(racerInfo->GetPointTotal()); + { + unsigned int score; + + score = static_cast(racerInfo->GetPointTotal()); + if ((reinterpret_cast(saveInfo)[1] & 3) != 0 && + score <= reinterpret_cast(saveInfo)[2]) { + break; + } + reinterpret_cast(saveInfo)[2] = score; } break; case GRace::kRaceType_SpeedTrap: case GRace::kRaceType_CashGrab: - if ((reinterpret_cast(saveInfo)[1] & 3) == 0 || - *reinterpret_cast(reinterpret_cast(saveInfo) + 2) < racerInfo->GetPointTotal()) { - *reinterpret_cast(reinterpret_cast(saveInfo) + 2) = racerInfo->GetPointTotal(); + value = racerInfo->GetPointTotal(); + if ((reinterpret_cast(saveInfo)[1] & 3) != 0 && + value <= *reinterpret_cast(reinterpret_cast(saveInfo) + 2)) { + break; } + *reinterpret_cast(reinterpret_cast(saveInfo) + 2) = value; break; default: From d76c2f640a7b741902a5dbe13adf6f5423e89e46 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 17:35:17 +0100 Subject: [PATCH 323/691] fix diff --- tools/decomp-diff.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/decomp-diff.py b/tools/decomp-diff.py index 13e54e26f..7b50a6b02 100644 --- a/tools/decomp-diff.py +++ b/tools/decomp-diff.py @@ -20,6 +20,7 @@ from typing import Any, Dict, List, Optional, Tuple from _common import ( ROOT_DIR, + RELOC_DIFF_CHOICES, ToolError, build_objdiff_symbol_rows, fail, From 8e8fc957d6d7cdbc5b7ccad511f11e74540349c2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 19:34:20 +0100 Subject: [PATCH 324/691] 69.81%: push UpdateRaceScore near match --- .../Indep/Src/Gameplay/GRaceDatabase.cpp | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index 18a67d462..793774f41 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -767,19 +767,19 @@ void GRaceDatabase::UpdateRaceScore(bool raceCompleted) { saveInfo = GetScoreInfo(eventHash); - value = racerInfo->GetTopSpeed(); - recordValue = static_cast(*reinterpret_cast(reinterpret_cast(saveInfo) + 0x0C)) / - FixedPoint::GetScale(); - value = UMath::Max(recordValue, value); + recordValue = racerInfo->GetTopSpeed(); + value = static_cast(*reinterpret_cast(reinterpret_cast(saveInfo) + 0x0C)) / + FixedPoint::GetScale(); + recordValue = UMath::Max(recordValue, value); *reinterpret_cast(reinterpret_cast(saveInfo) + 0x0C) = - FixedPoint(value).mValue; + FixedPoint(recordValue).mValue; - value = racerInfo->CalcAverageSpeed(); - recordValue = static_cast(*reinterpret_cast(reinterpret_cast(saveInfo) + 0x0E)) / - FixedPoint::GetScale(); - value = UMath::Max(recordValue, value); + recordValue = racerInfo->CalcAverageSpeed(); + value = static_cast(*reinterpret_cast(reinterpret_cast(saveInfo) + 0x0E)) / + FixedPoint::GetScale(); + recordValue = UMath::Max(recordValue, value); *reinterpret_cast(reinterpret_cast(saveInfo) + 0x0E) = - FixedPoint(value).mValue; + FixedPoint(recordValue).mValue; switch (parms->GetRaceType()) { case GRace::kRaceType_Circuit: From 2329e252e3e332a419261a0161e80abb24909ffc Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 19:41:10 +0100 Subject: [PATCH 325/691] 70.52%: match rb-tree erase rebalance --- src/Speed/Indep/SourceLists/zGameplay.cpp | 134 ++++++++++++++++++++++ 1 file changed, 134 insertions(+) diff --git a/src/Speed/Indep/SourceLists/zGameplay.cpp b/src/Speed/Indep/SourceLists/zGameplay.cpp index 9b5ff7546..2f1202246 100644 --- a/src/Speed/Indep/SourceLists/zGameplay.cpp +++ b/src/Speed/Indep/SourceLists/zGameplay.cpp @@ -15,3 +15,137 @@ #include "Speed/Indep/Src/Gameplay/GMilestone.cpp" #include "Speed/Indep/Src/Gameplay/GSpeedTrap.cpp" #include "Speed/Indep/Src/Gameplay/GIcon.cpp" + +namespace _STL { +template _Rb_tree_node_base* _STLP_CALL +_Rb_global<_Dummy>::_Rebalance_for_erase(_Rb_tree_node_base* __z, + _Rb_tree_node_base*& __root, + _Rb_tree_node_base*& __leftmost, + _Rb_tree_node_base*& __rightmost) +{ + _Rb_tree_node_base* __y = __z; + _Rb_tree_node_base* __x = 0; + _Rb_tree_node_base* __x_parent = 0; + if (__y->_M_left == 0) + __x = __y->_M_right; + else + if (__y->_M_right == 0) + __x = __y->_M_left; + else { + __y = __y->_M_right; + while (__y->_M_left != 0) + __y = __y->_M_left; + __x = __y->_M_right; + } + if (__y != __z) { + __z->_M_left->_M_parent = __y; + __y->_M_left = __z->_M_left; + if (__y != __z->_M_right) { + __x_parent = __y->_M_parent; + if (__x) __x->_M_parent = __y->_M_parent; + __y->_M_parent->_M_left = __x; + __y->_M_right = __z->_M_right; + __z->_M_right->_M_parent = __y; + } + else + __x_parent = __y; + if (__root == __z) + __root = __y; + else if (__z->_M_parent->_M_left == __z) + __z->_M_parent->_M_left = __y; + else + __z->_M_parent->_M_right = __y; + __y->_M_parent = __z->_M_parent; + _STLP_STD::swap(__y->_M_color, __z->_M_color); + __y = __z; + } + else { + __x_parent = __y->_M_parent; + if (__x) __x->_M_parent = __y->_M_parent; + if (__root == __z) + __root = __x; + else + if (__z->_M_parent->_M_left == __z) + __z->_M_parent->_M_left = __x; + else + __z->_M_parent->_M_right = __x; + if (__leftmost == __z) + if (__z->_M_right == 0) + __leftmost = __z->_M_parent; + else + __leftmost = _Rb_tree_node_base::_S_minimum(__x); + if (__rightmost == __z) + if (__z->_M_left == 0) + __rightmost = __z->_M_parent; + else + __rightmost = _Rb_tree_node_base::_S_maximum(__x); + } + if (__y->_M_color != _S_rb_tree_red) { + while (__x != __root && (__x == 0 || __x->_M_color == _S_rb_tree_black)) + if (__x == __x_parent->_M_left) { + _Rb_tree_node_base* __w = __x_parent->_M_right; + if (__w->_M_color == _S_rb_tree_red) { + __w->_M_color = _S_rb_tree_black; + __x_parent->_M_color = _S_rb_tree_red; + _Rotate_left(__x_parent, __root); + __w = __x_parent->_M_right; + } + if ((__w->_M_left == 0 || + __w->_M_left->_M_color == _S_rb_tree_black) && (__w->_M_right == 0 || + __w->_M_right->_M_color == _S_rb_tree_black)) { + __w->_M_color = _S_rb_tree_red; + __x = __x_parent; + __x_parent = __x_parent->_M_parent; + } else { + if (__w->_M_right == 0 || + __w->_M_right->_M_color == _S_rb_tree_black) { + if (__w->_M_left) __w->_M_left->_M_color = _S_rb_tree_black; + __w->_M_color = _S_rb_tree_red; + _Rotate_right(__w, __root); + __w = __x_parent->_M_right; + } + __w->_M_color = __x_parent->_M_color; + __x_parent->_M_color = _S_rb_tree_black; + if (__w->_M_right) __w->_M_right->_M_color = _S_rb_tree_black; + _Rotate_left(__x_parent, __root); + break; + } + } else { + _Rb_tree_node_base* __w = __x_parent->_M_left; + if (__w->_M_color == _S_rb_tree_red) { + __w->_M_color = _S_rb_tree_black; + __x_parent->_M_color = _S_rb_tree_red; + _Rotate_right(__x_parent, __root); + __w = __x_parent->_M_left; + } + if ((__w->_M_right == 0 || + __w->_M_right->_M_color == _S_rb_tree_black) && (__w->_M_left == 0 || + __w->_M_left->_M_color == _S_rb_tree_black)) { + __w->_M_color = _S_rb_tree_red; + __x = __x_parent; + __x_parent = __x_parent->_M_parent; + } else { + if (__w->_M_left == 0 || + __w->_M_left->_M_color == _S_rb_tree_black) { + if (__w->_M_right) __w->_M_right->_M_color = _S_rb_tree_black; + __w->_M_color = _S_rb_tree_red; + _Rotate_left(__w, __root); + __w = __x_parent->_M_left; + } + __w->_M_color = __x_parent->_M_color; + __x_parent->_M_color = _S_rb_tree_black; + if (__w->_M_left) __w->_M_left->_M_color = _S_rb_tree_black; + _Rotate_right(__x_parent, __root); + break; + } + } + if (__x) __x->_M_color = _S_rb_tree_black; + } + return __y; +} + +template _Rb_tree_node_base* _Rb_global::_Rebalance_for_erase(_Rb_tree_node_base*, + _Rb_tree_node_base*&, + _Rb_tree_node_base*&, + _Rb_tree_node_base*&); +} From 6771c077318a21e9da251b080d09627f85e162cb Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 19:46:46 +0100 Subject: [PATCH 326/691] 70.69%: reshape CreateRaceActivity --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 166 +++++++++---------- 1 file changed, 74 insertions(+), 92 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index b1dc7caa6..0b0a05366 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1847,138 +1847,120 @@ GRaceCustom::~GRaceCustom() { } void GRaceCustom::CreateRaceActivity() { + int existingOpponents; + bool bossINQuickRace; + if (mReversed) { if (!GetCanBeReversed()) { mReversed = false; } else { - const unsigned int *reverse_start = reinterpret_cast( - mRaceRecord->GetAttributePointer(0xFD945479, 0) ? mRaceRecord->GetAttributePointer(0xFD945479, 0) : Attrib::DefaultDataArea(sizeof(unsigned int))); - const unsigned int *reverse_finish = reinterpret_cast( - mRaceRecord->GetAttributePointer(0x7C7CF20F, 0) ? mRaceRecord->GetAttributePointer(0x7C7CF20F, 0) : Attrib::DefaultDataArea(sizeof(unsigned int))); - Attrib::Attribute race_start = mRaceRecord->Get(0xE43B2CCC); - Attrib::Attribute race_finish = mRaceRecord->Get(0xB0A24ADC); - - if (race_start.IsValid() && race_start.GetCollection() != mRaceRecord->GetConstCollection()) { - unsigned int length = race_start.GetLength(); - unsigned int *values = length ? new unsigned int[length] : nullptr; - - for (unsigned int i = 0; i < length; ++i) { - const unsigned int *src = - reinterpret_cast(mRaceRecord->GetAttributePointer(0xE43B2CCC, i)); - values[i] = src ? *src : 0; - } + GCollectionKey startReverse = mRaceRecord->racestartReverse(0); + GCollectionKey finishReverse = mRaceRecord->racefinishReverse(0); + Attrib::Attribute attr; + + attr = mRaceRecord->Get(0xE43B2CCC); + if (attr.IsValid() && attr.GetCollection() != mRaceRecord->GetConstCollection()) { + unsigned int len = attr.GetLength(); - if (mRaceRecord->Add(0xE43B2CCC, length)) { - for (unsigned int i = 0; i < length; ++i) { - unsigned int *dst = - reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(0xE43B2CCC, i))); + if (mRaceRecord->Add(0xE43B2CCC, len)) { + Attrib::Attribute localattr = mRaceRecord->Get(0xE43B2CCC); - if (dst) { - *dst = values[i]; + for (unsigned int i = 0; i < len; i++) { + GCollectionKey *resultptr = + reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(0xE43B2CCC, i))); + + if (resultptr) { + *resultptr = mRaceRecord->racestart(i); } } - race_start = mRaceRecord->Get(0xE43B2CCC); + attr = localattr; } - - delete[] values; } - if (race_start.IsValid()) { - unsigned int *dst = - reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(0xE43B2CCC, 0))); + if (attr.IsValid()) { + GCollectionKey *resultptr = + reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(0xE43B2CCC, 0))); - if (dst) { - *dst = *reverse_start; + if (resultptr) { + *resultptr = startReverse; } } - if (race_finish.IsValid() && race_finish.GetCollection() != mRaceRecord->GetConstCollection()) { - unsigned int length = race_finish.GetLength(); - unsigned int *values = length ? new unsigned int[length] : nullptr; + attr = mRaceRecord->Get(0xB0A24ADC); + if (attr.IsValid() && attr.GetCollection() != mRaceRecord->GetConstCollection()) { + unsigned int len = attr.GetLength(); - for (unsigned int i = 0; i < length; ++i) { - const unsigned int *src = - reinterpret_cast(mRaceRecord->GetAttributePointer(0xB0A24ADC, i)); - values[i] = src ? *src : 0; - } + if (mRaceRecord->Add(0xB0A24ADC, len)) { + Attrib::Attribute localattr = mRaceRecord->Get(0xB0A24ADC); - if (mRaceRecord->Add(0xB0A24ADC, length)) { - for (unsigned int i = 0; i < length; ++i) { - unsigned int *dst = - reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(0xB0A24ADC, i))); + for (unsigned int i = 0; i < len; i++) { + GCollectionKey *resultptr = + reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(0xB0A24ADC, i))); - if (dst) { - *dst = values[i]; + if (resultptr) { + *resultptr = mRaceRecord->racefinish(i); } } - race_finish = mRaceRecord->Get(0xB0A24ADC); + attr = localattr; } - - delete[] values; } - if (race_finish.IsValid()) { - unsigned int *dst = - reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(0xB0A24ADC, 0))); + if (attr.IsValid()) { + GCollectionKey *resultptr = + reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(0xB0A24ADC, 0))); - if (dst) { - *dst = *reverse_finish; + if (resultptr) { + *resultptr = finishReverse; } } } } - { - unsigned int num_opponents = GetNumOpponents(); - bool boss_race = false; - - if (GRaceStatus::Get().GetRaceContext() != GRace::kRaceContext_Career && GetIsBossRace()) { - boss_race = true; - num_opponents = 0; - } - - if (mNumOpponents != num_opponents) { - unsigned int opponent_keys[16]; - unsigned int old_length = 0; - - if (!boss_race) { - Attrib::Attribute opponents = mRaceRecord->Get(0x5839FA1A); - - old_length = opponents.GetLength(); - for (unsigned int i = 0; i < old_length && i < 16; ++i) { - const unsigned int *src = reinterpret_cast(mRaceRecord->GetAttributePointer(0x5839FA1A, i)); + existingOpponents = GetNumOpponents(); + bossINQuickRace = false; + if (GRaceStatus::Get().GetRaceContext() != GRace::kRaceContext_Career && GetIsBossRace()) { + bossINQuickRace = true; + existingOpponents = 0; + } - if (!src) { - src = reinterpret_cast(Attrib::DefaultDataArea(sizeof(unsigned int))); - } + if (mNumOpponents != static_cast(existingOpponents)) { + unsigned int opponentKey[16]; + unsigned int currOpponents = 0; + Attrib::Attribute attribute; - opponent_keys[i] = *src; + if (!bossINQuickRace) { + attribute = mRaceRecord->Get(0x5839FA1A); + currOpponents = attribute.GetLength(); + if (currOpponents != 0) { + for (unsigned int onOpp = 0; onOpp < currOpponents; onOpp++) { + opponentKey[onOpp] = mRaceRecord->Opponents(onOpp).GetCollectionKey(); } } + } - if (old_length < mNumOpponents && mNumOpponents <= 16) { - if (old_length == 0) { - for (unsigned int i = 0; i < mNumOpponents; ++i) { - opponent_keys[i] = 0x9F3B88C5; - } - } else { - for (unsigned int i = old_length; i < mNumOpponents; ++i) { - opponent_keys[i] = opponent_keys[i % old_length]; - } + if (currOpponents < mNumOpponents) { + if (currOpponents == 0) { + for (unsigned int onSet = 0; onSet < mNumOpponents; onSet++) { + opponentKey[onSet] = 0x9F3B88C5; + } + } else { + for (unsigned int onCopy = currOpponents; onCopy < mNumOpponents; onCopy++) { + opponentKey[onCopy] = opponentKey[onCopy % currOpponents]; } } + } - mRaceRecord->Add(0x5839FA1A, mNumOpponents); - if (mNumOpponents != 0) { - for (unsigned int i = 0; i < mNumOpponents && i < 16; ++i) { - unsigned int *dst = - reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(0x5839FA1A, i))); + mRaceRecord->Add(0x5839FA1A, mNumOpponents); + attribute = mRaceRecord->Get(0x5839FA1A); + if (mNumOpponents != 0) { + for (unsigned int onSet = 0; onSet < mNumOpponents; onSet++) { + GCollectionKey *resultptr = + reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(0x5839FA1A, onSet))); - if (dst) { - *dst = opponent_keys[i]; - } + if (resultptr) { + *resultptr = GCollectionKey(opponentKey[onSet]); } } } From f5d87d922d96d1bcec0be6ce0f14e395c2fe9fed Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 19:48:45 +0100 Subject: [PATCH 327/691] 70.83%: add gameplay clone and set helpers --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 67 +------------------ .../Generated/AttribSys/Classes/gameplay.h | 32 +++++++++ .../Indep/Tools/AttribSys/Runtime/AttribSys.h | 24 ++++++- 3 files changed, 58 insertions(+), 65 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 0b0a05366..26a9dc209 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1856,65 +1856,9 @@ void GRaceCustom::CreateRaceActivity() { } else { GCollectionKey startReverse = mRaceRecord->racestartReverse(0); GCollectionKey finishReverse = mRaceRecord->racefinishReverse(0); - Attrib::Attribute attr; - attr = mRaceRecord->Get(0xE43B2CCC); - if (attr.IsValid() && attr.GetCollection() != mRaceRecord->GetConstCollection()) { - unsigned int len = attr.GetLength(); - - if (mRaceRecord->Add(0xE43B2CCC, len)) { - Attrib::Attribute localattr = mRaceRecord->Get(0xE43B2CCC); - - for (unsigned int i = 0; i < len; i++) { - GCollectionKey *resultptr = - reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(0xE43B2CCC, i))); - - if (resultptr) { - *resultptr = mRaceRecord->racestart(i); - } - } - - attr = localattr; - } - } - - if (attr.IsValid()) { - GCollectionKey *resultptr = - reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(0xE43B2CCC, 0))); - - if (resultptr) { - *resultptr = startReverse; - } - } - - attr = mRaceRecord->Get(0xB0A24ADC); - if (attr.IsValid() && attr.GetCollection() != mRaceRecord->GetConstCollection()) { - unsigned int len = attr.GetLength(); - - if (mRaceRecord->Add(0xB0A24ADC, len)) { - Attrib::Attribute localattr = mRaceRecord->Get(0xB0A24ADC); - - for (unsigned int i = 0; i < len; i++) { - GCollectionKey *resultptr = - reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(0xB0A24ADC, i))); - - if (resultptr) { - *resultptr = mRaceRecord->racefinish(i); - } - } - - attr = localattr; - } - } - - if (attr.IsValid()) { - GCollectionKey *resultptr = - reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(0xB0A24ADC, 0))); - - if (resultptr) { - *resultptr = finishReverse; - } - } + mRaceRecord->Set_racestart(startReverse); + mRaceRecord->Set_racefinish(finishReverse); } } @@ -1956,12 +1900,7 @@ void GRaceCustom::CreateRaceActivity() { attribute = mRaceRecord->Get(0x5839FA1A); if (mNumOpponents != 0) { for (unsigned int onSet = 0; onSet < mNumOpponents; onSet++) { - GCollectionKey *resultptr = - reinterpret_cast(const_cast(mRaceRecord->GetAttributePointer(0x5839FA1A, onSet))); - - if (resultptr) { - *resultptr = GCollectionKey(opponentKey[onSet]); - } + attribute.Set(onSet, GCollectionKey(opponentKey[onSet])); } } } diff --git a/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h b/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h index 8f0044386..441ddd1fa 100644 --- a/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h +++ b/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h @@ -1326,6 +1326,32 @@ struct gameplay : Instance { return *resultptr; } + TAttrib GetOrClone(unsigned int attributeKey) { + TAttrib attr(this->Get(attributeKey)); + + if (attr.IsValid() && attr.GetCollection() != this->GetConstCollection()) { + unsigned int len = attr.GetLength(); + + if (this->Add(attributeKey, len)) { + TAttrib localattr(this->Get(attributeKey)); + + for (unsigned int i = 0; i < len; i++) { + localattr.Set(i, attr.Get(i)); + } + + return localattr; + } + } + + return attr; + } + + bool Set_racefinish(const GCollectionKey &input) { + TAttrib attr = GetOrClone(0xb0a24adc); + + return attr.Set(0, input); + } + const float &MinimumAIPerformance() const { const float *resultptr = reinterpret_cast(this->GetAttributePointer(0xb1ece070, 0)); if (!resultptr) { @@ -1710,6 +1736,12 @@ struct gameplay : Instance { return *resultptr; } + bool Set_racestart(const GCollectionKey &input) { + TAttrib attr = GetOrClone(0xe43b2ccc); + + return attr.Set(0, input); + } + const bool &Persistent(unsigned int index) const { const bool *resultptr = reinterpret_cast(this->GetAttributePointer(0xe4542e9b, index)); if (!resultptr) { diff --git a/src/Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h b/src/Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h index f458308a4..85efaba7c 100644 --- a/src/Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h +++ b/src/Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h @@ -667,6 +667,16 @@ class Attribute { void SendChangeMsg() const; // TODO template const T &Get(unsigned int index, T &result) const; + template bool Set(unsigned int index, const T &input) { + T *resultptr = reinterpret_cast(GetElementPointer(index)); + + if (resultptr) { + *resultptr = input; + return true; + } + + return false; + } void operator delete(void *ptr, std::size_t bytes) { Free(ptr, bytes, "Attrib::Attribute"); @@ -911,7 +921,19 @@ template class TAttrib : public Attribute { TAttrib(const Attribute &src) : Attribute(src) {} ~TAttrib() {} - bool &Get(unsigned int index) const; + const t &Get(unsigned int index) const { + const t *resultptr = reinterpret_cast(GetElementPointer(index)); + + if (!resultptr) { + resultptr = reinterpret_cast(DefaultDataArea(sizeof(t))); + } + + return *resultptr; + } + + bool Set(unsigned int index, const t &data) { + return Attribute::Set(index, data); + } }; } // namespace Attrib From e1d34c0baf15a10077afff85dbfbe4ff00e2be9b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 20:07:43 +0100 Subject: [PATCH 328/691] 70.95%: reshape ComputeCatchUpSkill --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 59 ++++++++++++-------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 26a9dc209..739da1971 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3054,23 +3054,29 @@ bool GRaceStatus::ComputeCatchUpSkill(GRacerInfo *racer_info, PidError *pid, flo if (off_world) { glue_level = 1.0f; - } else if (GetRaceContext() == GRace::kRaceContext_QuickRace) { - if (!mRaceParms || !mRaceParms->GetCatchUp()) { - return false; - } - - glue_level = Tweak_QuickRaceGlue[mRaceParms->GetDifficulty()]; } else { - if (GetRaceContext() != GRace::kRaceContext_Career) { - return false; - } + if (GetRaceContext() == GRace::kRaceContext_QuickRace) { + if (!mRaceParms) { + return false; + } - glue_level = UMath::Clamp((GetAdaptiveDifficutly() + 1.0f) * 0.5f, 0.0f, 1.0f); - if (mRaceParms) { - use_race_override = mRaceParms->GetCatchUpOverride(); - if (mRaceParms->GetIsBossRace()) { - is_boss = true; - glue_level = UMath::Lerp(glue_level, 1.0f, 0.5f); + if (!mRaceParms->GetCatchUp()) { + return false; + } + + glue_level = Tweak_QuickRaceGlue[mRaceParms->GetDifficulty()]; + } else { + if (GetRaceContext() != GRace::kRaceContext_Career) { + return false; + } + + glue_level = UMath::Clamp((GetAdaptiveDifficutly() + 1.0f) * 0.5f, 0.0f, 1.0f); + if (mRaceParms) { + use_race_override = mRaceParms->GetCatchUpOverride(); + if (mRaceParms->GetIsBossRace()) { + is_boss = true; + glue_level = UMath::Lerp(glue_level, 1.0f, 0.5f); + } } } } @@ -3079,19 +3085,24 @@ bool GRaceStatus::ComputeCatchUpSkill(GRacerInfo *racer_info, PidError *pid, flo glue_p = pid->GetErrorIntegral(); glue_error = pid->GetErrorDerivative(); - if (use_race_override) { - Table glue_skill_table(aCatchUpSkillData, nCatchUpSkillEntries, 0.0f, 100.0f); - Table glue_spread_table(aCatchUpSpreadData, nCatchUpSpreadEntries, 0.0f, 100.0f); - - glue_skill = glue_skill_table.GetValue(percent_complete); - glue_spread = glue_spread_table.GetValue(percent_complete); - glue_integral = fCatchUpIntegral; - glue_derivative = fCatchUpDerivative; - } else { + if (!use_race_override) { glue_spread = UMath::Lerp(Tweak_GlueSpreadTable_Low.GetValue(percent_complete), Tweak_GlueSpreadTable_High.GetValue(percent_complete), glue_level); glue_skill = UMath::Lerp(Tweak_GlueStrengthTable_Low.GetValue(percent_complete), Tweak_GlueStrengthTable_High.GetValue(percent_complete), glue_level); glue_integral = 5.0e-5f; glue_derivative = 0.01f; + } else { + { + Table glue_table(aCatchUpSkillData, nCatchUpSkillEntries, 0.0f, 100.0f); + + glue_skill = glue_table.GetValue(percent_complete); + } + { + Table glue_table(aCatchUpSpreadData, nCatchUpSpreadEntries, 0.0f, 100.0f); + + glue_spread = glue_table.GetValue(percent_complete); + } + glue_derivative = fCatchUpDerivative; + glue_integral = fCatchUpIntegral; } glue_spread = bMax(100.0f, glue_spread); From 5aabb7b46c4406c01f4bbc9f42a5ac87b5231ef7 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 20:11:19 +0100 Subject: [PATCH 329/691] 71.11%: delay adaptive difficulty locals --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 21 +++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 739da1971..8f714b5e8 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2847,18 +2847,25 @@ void GRaceStatus::SyncronizeAdaptiveBonus() { } void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable *who) { - bool update = false; - GRacerInfo *winning_player = nullptr; - GRacerInfo *winning_ai = nullptr; - GRacerInfo *eliminated_player = nullptr; - float difficulty = fCatchUpAdaptiveBonus; - const int num_racers = GetRacerCount(); + bool update; + GRacerInfo *winning_player; + GRacerInfo *winning_ai; + GRacerInfo *eliminated_player; + float difficulty; - if (mCaluclatedAdaptiveGain || GetRaceContext() != GRace::kRaceContext_Career || num_racers < 2 || Sim::GetUserMode() != 0 || GetPlayMode() != kPlayMode_Racing || + if (mCaluclatedAdaptiveGain || GetRaceContext() != GRace::kRaceContext_Career || GetRacerCount() <= 1 || Sim::GetUserMode() != 0 || GetPlayMode() != kPlayMode_Racing || (mRaceParms && mRaceParms->GetNoPostRaceScreen()) || GetRaceLength() <= 0.0f) { return; } + difficulty = fCatchUpAdaptiveBonus; + const int num_racers = GetRacerCount(); + + update = false; + winning_player = nullptr; + winning_ai = nullptr; + eliminated_player = nullptr; + for (int i = 0; i < num_racers; ++i) { GRacerInfo &info = GetRacerInfo(i); From 7a5f3d90c940cf87312a3b8806cca50f48c47ed6 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 20:15:41 +0100 Subject: [PATCH 330/691] 71.03%: reshape adaptive difficulty bonus ramps --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 37 ++++++++++++-------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 8f714b5e8..580b7b379 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2906,9 +2906,10 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable if (percent_human_complete < percent_ai_complete && percent_human_complete > 0.0f) { float lose_margin = ((percent_ai_complete - percent_human_complete) * (GetRaceLength() * 0.01f)) / 300.0f; - float bonus = bClamp(lose_margin, 0.0f, 1.0f); + float t = UMath::Ramp(lose_margin, 0.0f, 1.0f); + float bonus = UMath::Lerp(0.0f, -0.4f, t); - difficulty = bClamp(difficulty + (((bonus * -0.4f) * percent_human_complete) * 0.01f), -1.0f, 1.0f); + difficulty = bClamp(difficulty + ((bonus * percent_human_complete) * 0.01f), -1.0f, 1.0f); update = true; } } else if (reason == kAdaptiveGainReason_5) { @@ -2929,9 +2930,10 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable if (percent_human_complete < percent_ai_complete && percent_human_complete > 0.0f) { float lose_margin = ((percent_ai_complete - percent_human_complete) * (GetRaceLength() * 0.01f)) / 300.0f; - float bonus = bClamp(lose_margin, 0.0f, 1.0f); + float t = UMath::Ramp(lose_margin, 0.0f, 1.0f); + float bonus = UMath::Lerp(0.0f, -0.4f, t); - difficulty = bClamp(difficulty + (((bonus * -0.4f) * percent_human_complete) * 0.01f), -1.0f, 1.0f); + difficulty = bClamp(difficulty + ((bonus * percent_human_complete) * 0.01f), -1.0f, 1.0f); update = true; } } else if (GetRaceType() == GRace::kRaceType_SpeedTrap) { @@ -2958,13 +2960,17 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable float point_spread_ratio = (player_points - ai_points) / total_points; if (point_spread_ratio <= 0.0f) { - float bonus = bClamp((-point_spread_ratio) / 0.2f, 0.0f, 1.0f); + float win_margin = -point_spread_ratio; + float t = UMath::Ramp(win_margin, 0.0f, 0.2f); + float bonus = UMath::Lerp(0.0f, -0.2f, t); - difficulty = bClamp(difficulty + (bonus * -0.2f), -1.0f, 1.0f); + difficulty = bClamp(difficulty + bonus, -1.0f, 1.0f); } else { - float bonus = bClamp((point_spread_ratio - 0.05f) / (0.2f - 0.05f), 0.0f, 1.0f); + float lose_margin = point_spread_ratio; + float t = UMath::Ramp(lose_margin, 0.05f, 0.2f); + float bonus = UMath::Lerp(0.0f, 0.2f, t); - difficulty = bClamp(difficulty + (bonus * 0.2f), -1.0f, 1.0f); + difficulty = bClamp(difficulty + bonus, -1.0f, 1.0f); } update = true; @@ -2984,9 +2990,10 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable float win_margin = (GetRaceLength() * (100.0f - max_pct_complete)) * 0.01f; if (win_margin > 200.0f && max_pct_complete > 0.0f) { - float bonus = bClamp((win_margin - 200.0f) / (750.0f - 200.0f), 0.0f, 1.0f); + float t = UMath::Ramp(win_margin, 200.0f, 750.0f); + float bonus = UMath::Lerp(0.0f, 0.4f, t); - difficulty = bClamp(difficulty + (bonus * 0.4f), -1.0f, 1.0f); + difficulty = bClamp(difficulty + bonus, -1.0f, 1.0f); update = true; } } @@ -2998,9 +3005,10 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable float lose_margin = (GetRaceLength() * (100.0f - info->GetPctRaceComplete())) * 0.01f; if (lose_margin > 0.0f) { - float bonus = bClamp(lose_margin / 300.0f, 0.0f, 1.0f); + float t = UMath::Ramp(lose_margin / 300.0f, 0.0f, 1.0f); + float bonus = UMath::Lerp(-0.1f, -0.4f, t); - difficulty = bClamp(difficulty + ((((bonus * -0.3f) + -0.1f) * info->GetPctRaceComplete()) * 0.01f), -1.0f, 1.0f); + difficulty = bClamp(difficulty + ((bonus * info->GetPctRaceComplete()) * 0.01f), -1.0f, 1.0f); update = true; } } @@ -3021,9 +3029,10 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable lose_margin -= bFloor(lose_margin / race_lose_margin) * race_lose_margin; if (lose_margin > 0.0f) { - float bonus = bClamp(lose_margin / 300.0f, 0.0f, 1.0f); + float t = UMath::Ramp(lose_margin / 300.0f, 0.0f, 1.0f); + float bonus = UMath::Lerp(-0.1f, -0.4f, t); - difficulty = bClamp(difficulty + ((((bonus * (-0.4f - -0.1f)) + -0.1f) * eliminated_player->GetPctRaceComplete()) * 0.01f), -1.0f, 1.0f); + difficulty = bClamp(difficulty + ((bonus * eliminated_player->GetPctRaceComplete()) * 0.01f), -1.0f, 1.0f); update = true; } } From 1433b757af989e237f6352d72ef860e32220fb0a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 20:28:32 +0100 Subject: [PATCH 331/691] 71.06%: reshape GTrigger constructor setup --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 71 ++++++++++++++--------- 1 file changed, 44 insertions(+), 27 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 8372bbd62..fee6de4d7 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -16,50 +16,67 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) : GRuntimeInstance(triggerKey, kGameplayObjType_Trigger), // - mWorldTrigger(), // - mDirection(UMath::Vector3Make(0.0f, 0.0f, 0.0f)), // - mTriggerEnabled(0), // - mIcon(nullptr), // - mEnabled(false), // - mActivationReferences(0) { + mWorldTrigger() { const UMath::Vector3 &pos = Position(0); - const UMath::Vector3 &dimensions = Dimensions(0); - bool hasDimensions = GetAttributePointer(0x6D9E21AD, 0) != nullptr; - bool hasRadius = GetAttributePointer(0x39BF8002, 0) != nullptr; - UMath::Vector3 initialVec = UMath::Vector3Make(0.0f, 0.0f, 1.0f); + UMath::Vector3 dim; + const UMath::Vector3 *dimPtr = reinterpret_cast(GetAttributePointer(0x6D9E21AD, 0)); + bool hasDimensions = dimPtr != nullptr; UMath::Vector3 posSwizzled = UMath::Vector3Make(-pos.y, pos.z, pos.x); - UMath::Vector3 dimSwizzled = UMath::Vector3Make(dimensions.x, dimensions.z, dimensions.y); - UMath::Matrix4 rotMat; - float radius = Radius(0); + UMath::Vector3 dimSwizzled; + UMath::Matrix4 mat; + float radius; + EventStaticData *pTriggerData = &mEventStaticData; bool showIconBasedOnBin = true; GIcon::Type iconType = GIcon::kType_Invalid; - mParticleEffect[0] = nullptr; - mParticleEffect[1] = nullptr; + if (!dimPtr) { + dimPtr = reinterpret_cast(Attrib::DefaultDataArea(sizeof(UMath::Vector3))); + } + + dim = *dimPtr; + dimSwizzled = UMath::Vector3Make(dim.x, dim.z, dim.y); + mTriggerEnabled = 0; + mIcon = nullptr; + mEnabled = false; + mActivationReferences = 0; + bMemSet(mParticleEffect, 0, 8); mSimObjInside.reserve(8); - UMath::MultYRot(UMath::Matrix4::kIdentity, -Rotation(0) * 0.00069444446f, rotMat); - UMath::Rotate(initialVec, rotMat, mDirection); - UMath::Set(rotMat, 3, UMath::Vector4Make(posSwizzled, 1.0f)); + { + UMath::Matrix4 rotMat = UMath::Matrix4::kIdentity; + UMath::Vector3 initialVec = UMath::Vector3Make(0.0f, 0.0f, 1.0f); + + MATRIX4_multyrot(&rotMat, -Rotation(0) * 0.00069444446f, &rotMat); + VU0_MATRIX3x4_vect3mult(initialVec, rotMat, mDirection); + mat = rotMat; + } + + UMath::Set(mat, 3, UMath::Vector4Make(posSwizzled, 1.0f)); if (hasDimensions) { - mWorldTrigger = WTrigger(rotMat, dimSwizzled, &mEventList, OneShot(0) ? 2 : 0); + new (&mWorldTrigger) WTrigger(mat, dimSwizzled, &mEventList, OneShot(0) ? 2 : 0); } else { - if (!hasRadius) { + const float *radiusPtr = reinterpret_cast(GetAttributePointer(0x39BF8002, 0)); + + if (radiusPtr) { + radius = *radiusPtr; + } else { float width = Width(0); + radius = UMath::Sqrt(width * width + 1.0f); } - mWorldTrigger = WTrigger(rotMat, radius, radius * 2.0f, &mEventList, OneShot(0) ? 2 : 0); + + new (&mWorldTrigger) WTrigger(mat, radius, radius * 2.0f, &mEventList, OneShot(0) ? 2 : 0); } mEventList.fNumEvents = 1; mEventList.fPad[0] = 0; mEventList.fPad[1] = 0; mEventList.fPad[2] = 0; - mEventStaticData.fEventID = 0xC34649C0u; - mEventStaticData.fEventSize = 8; - mEventStaticData.fDataOffset = 0x10; - mEventStaticData.fPad = 0; + pTriggerData->fEventID = 0xC34649C0u; + pTriggerData->fEventSize = 8; + pTriggerData->fDataOffset = 0x10; + pTriggerData->fPad = 0; bMemSet(mTriggerEventData, 0, sizeof(mTriggerEventData)); reinterpret_cast(mTriggerEventData)[1] = GetCollection(); @@ -132,8 +149,8 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) } if (showIconBasedOnBin && mIcon && FEDatabase && FEDatabase->GetCareerSettings()->GetCurrentBin() <= BinIndex(0)) { - mIcon->SetFlag(1); - mIcon->SetFlag(2); + mIcon->Show(); + mIcon->ShowOnMap(); } } From adbba7bf0daf8c52ae2b91155e926533ed1237d0 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 20:53:36 +0100 Subject: [PATCH 332/691] 73.19%: restore GObjectBlock templates --- src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp | 142 +++++++++++++++++- src/Speed/Indep/Src/World/WTrigger.h | 4 + 2 files changed, 143 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp b/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp index d89b10ae9..a7ad005aa 100644 --- a/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp +++ b/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp @@ -60,13 +60,135 @@ static unsigned int FindInstances(GVault *vault, AttribKeyList *attribKeyList, u return (numObjects * GetPaddedObjectSize() + numConnections * 8 + 0xFU) & ~0xFU; } +template +struct GObjectBlockTypeTraits; + +template <> +struct GObjectBlockTypeTraits { + enum { kType = kGameplayObjType_Activity }; +}; + +template <> +struct GObjectBlockTypeTraits { + enum { kType = kGameplayObjType_Character }; +}; + +template <> +struct GObjectBlockTypeTraits { + enum { kType = kGameplayObjType_Handler }; +}; + +template <> +struct GObjectBlockTypeTraits { + enum { kType = kGameplayObjType_Marker }; +}; + +template <> +struct GObjectBlockTypeTraits { + enum { kType = kGameplayObjType_State }; +}; + +template <> +struct GObjectBlockTypeTraits { + enum { kType = kGameplayObjType_Trigger }; +}; + +template +static inline unsigned int GetGameplayType() { + return GObjectBlockTypeTraits::kType; +} + +template +void GObjectBlock::DeleteObjects() { + const unsigned int type = GetGameplayType(); + unsigned char *buffer = reinterpret_cast(mObjectList[type]); + unsigned int objSize = GetPaddedObjectSize(); + + for (unsigned int onObj = 0; onObj < mObjectCount[type]; ++onObj) { + T *obj = reinterpret_cast(buffer + onObj * objSize); + obj->~T(); + } + + mObjectCount[type] = 0; + mObjectSize[type] = 0; + mObjectList[type] = nullptr; +} + +template +unsigned int GObjectBlock::CreateObjects(GVault *vault, unsigned char *buffer) { + const unsigned int type = GetGameplayType(); + AttribKeyList keys; + unsigned int objSize; + unsigned int objCount; + GRuntimeInstance::ConnectedInstance *connectionBase; + GRuntimeInstance::ConnectedInstance *connectionDest; + unsigned int spaceUsed; + + FindInstances(vault, &keys, nullptr, nullptr); + + objSize = GetPaddedObjectSize(); + objCount = 0; + connectionBase = reinterpret_cast(buffer + objSize * keys.size()); + connectionDest = connectionBase; + + for (AttribKeyList::iterator iterObj = keys.begin(); iterObj != keys.end(); ++iterObj) { + unsigned int collectionKey = *iterObj; + T *pMem = ::new (buffer + objCount * objSize) T(collectionKey); + T *newObj = pMem; + unsigned int numConnections = CalcNumConnections(collectionKey); + + newObj->SetConnectionBuffer(connectionDest, numConnections); + connectionDest += numConnections; + objCount += 1; + } + + mObjectCount[type] = objCount; + mObjectSize[type] = objSize; + mObjectList[type] = reinterpret_cast(buffer); + + spaceUsed = reinterpret_cast(connectionDest) - buffer; + return (spaceUsed + 0xFU) & ~0xFU; +} + GObjectBlock::GObjectBlock(GVault *vault, unsigned char *buffer) : mVault(vault), // - mObjectBuffer(buffer) {} + mObjectBuffer(buffer) { + unsigned int onType = 0; + + do { + mObjectCount[onType] = 0; + mObjectSize[onType] = 0; + mObjectList[onType] = nullptr; + onType += 1; + } while (onType < 6); +} -GObjectBlock::~GObjectBlock() {} +GObjectBlock::~GObjectBlock() { + DeleteObjects(); + DeleteObjects(); + DeleteObjects(); + DeleteObjects(); + DeleteObjects(); + DeleteObjects(); -void GObjectBlock::Initialize(unsigned int bufferSize) {} + mObjectBuffer = nullptr; + mVault = nullptr; + + if (WTriggerManager::Exists()) { + WTriggerManager::Get().ClearAllFireOnExit(); + } +} + +void GObjectBlock::Initialize(unsigned int bufferSize) { + unsigned char *buffer = mObjectBuffer; + + buffer += CreateObjects(mVault, buffer); + buffer += CreateObjects(mVault, buffer); + buffer += CreateObjects(mVault, buffer); + buffer += CreateObjects(mVault, buffer); + buffer += CreateObjects(mVault, buffer); + CreateObjects(mVault, buffer); +} unsigned int GObjectBlock::CalcSpaceRequired(GVault *vault, unsigned int *outObjCount) { unsigned int objCount; @@ -160,3 +282,17 @@ unsigned int GObjectBlock::CalcNumConnections(unsigned int collectionKey) { return numConnections; } + +template void GObjectBlock::DeleteObjects(); +template void GObjectBlock::DeleteObjects(); +template void GObjectBlock::DeleteObjects(); +template void GObjectBlock::DeleteObjects(); +template void GObjectBlock::DeleteObjects(); +template void GObjectBlock::DeleteObjects(); + +template unsigned int GObjectBlock::CreateObjects(GVault *vault, unsigned char *buffer); +template unsigned int GObjectBlock::CreateObjects(GVault *vault, unsigned char *buffer); +template unsigned int GObjectBlock::CreateObjects(GVault *vault, unsigned char *buffer); +template unsigned int GObjectBlock::CreateObjects(GVault *vault, unsigned char *buffer); +template unsigned int GObjectBlock::CreateObjects(GVault *vault, unsigned char *buffer); +template unsigned int GObjectBlock::CreateObjects(GVault *vault, unsigned char *buffer); diff --git a/src/Speed/Indep/Src/World/WTrigger.h b/src/Speed/Indep/Src/World/WTrigger.h index 07c316244..5af649e86 100644 --- a/src/Speed/Indep/Src/World/WTrigger.h +++ b/src/Speed/Indep/Src/World/WTrigger.h @@ -75,6 +75,10 @@ class WTriggerManager { void Update(float dT); void ClearAllFireOnExit(); + static bool Exists() { + return fgTriggerManager != nullptr; + } + static WTriggerManager &Get() { return *fgTriggerManager; } From ab1508e337ed3913c1370f161d1b7df748754e69 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 20:58:08 +0100 Subject: [PATCH 333/691] 73.43%: match stock-car activity preload --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 57 +++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index cad522242..fd662d9d9 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -39,6 +39,7 @@ extern int SkipFE; extern int TWEAK_ShowAllGameplayIcons; +extern int gVerboseTesterOutput; char *bStrIStr(const char *s1, const char *s2); void bCloseMemoryPool(int pool_num); @@ -1753,6 +1754,62 @@ void GManager::GatherInstanceKeys(Attrib::Gen::gameplay &collection, AttribKeyLi } } +void GManager::RecursivePreloadCharacterCars(GRuntimeInstance *instance, bool forcePreload) { + if (instance->GetType() == kGameplayObjType_Character) { + const char *carName = *reinterpret_cast(instance->GetAttributePointer(0xF833C06F, 0) ? + instance->GetAttributePointer(0xF833C06F, 0) : + Attrib::DefaultDataArea(sizeof(const char *))); + const char *stockCarName = *reinterpret_cast(instance->GetAttributePointer(0xFD3CF790, 0) ? + instance->GetAttributePointer(0xFD3CF790, 0) : + Attrib::DefaultDataArea(sizeof(const char *))); + + if (stockCarName && *stockCarName) { + carName = stockCarName; + } + + if (*reinterpret_cast(instance->GetAttributePointer(0x9652AF0F, 0) ? + instance->GetAttributePointer(0x9652AF0F, 0) : + Attrib::DefaultDataArea(sizeof(int))) != 0 || + forcePreload) { + ReserveStockCar(carName); + } + } + + for (unsigned int i = 0; i < instance->Get(0x916E0E78).GetLength(); ++i) { + const unsigned int *childKey = reinterpret_cast(instance->GetAttributePointer(0x916E0E78, i)); + + if (!childKey) { + childKey = reinterpret_cast(Attrib::DefaultDataArea(sizeof(unsigned int))); + } + + GRuntimeInstance *child = FindInstance(*childKey); + if (child) { + RecursivePreloadCharacterCars(child, forcePreload); + } + } +} + +void GManager::PreloadStockCarsForActivity(GActivity *activity) { + GRaceParameters *raceParms; + bool forcePreload; + + ClearStockCars(); + if (activity) { + forcePreload = false; + raceParms = GRaceDatabase::Get().GetRaceFromActivity(activity); + + if (raceParms) { + forcePreload = raceParms->GetRaceType() == GRace::kRaceType_Drag; + } + + if (gVerboseTesterOutput && raceParms) { + raceParms->GetEventID(); + } + + RecursivePreloadCharacterCars(activity, forcePreload); + } +} + void GManager::ClearStockCars() { mStockCars.clear(); } From 7c4dc902a02dee32953b0865438e0cb88dd5e05a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 20:59:12 +0100 Subject: [PATCH 334/691] 73.51%: reshape recursive stock-car preload --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 46 +++++++++++++++++------ 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index fd662d9d9..d66b91a35 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1756,26 +1756,48 @@ void GManager::GatherInstanceKeys(Attrib::Gen::gameplay &collection, AttribKeyLi void GManager::RecursivePreloadCharacterCars(GRuntimeInstance *instance, bool forcePreload) { if (instance->GetType() == kGameplayObjType_Character) { - const char *carName = *reinterpret_cast(instance->GetAttributePointer(0xF833C06F, 0) ? - instance->GetAttributePointer(0xF833C06F, 0) : - Attrib::DefaultDataArea(sizeof(const char *))); - const char *stockCarName = *reinterpret_cast(instance->GetAttributePointer(0xFD3CF790, 0) ? - instance->GetAttributePointer(0xFD3CF790, 0) : - Attrib::DefaultDataArea(sizeof(const char *))); + const char *const *carNamePtr = reinterpret_cast(instance->GetAttributePointer(0xF833C06F, 0)); + const char *const *stockCarNamePtr; + const int *preloadPtr; + const char *carName; + const char *stockCarName; + + if (!carNamePtr) { + carNamePtr = reinterpret_cast(Attrib::DefaultDataArea(sizeof(const char *))); + } + + carName = *carNamePtr; + stockCarNamePtr = reinterpret_cast(instance->GetAttributePointer(0xFD3CF790, 0)); + if (!stockCarNamePtr) { + stockCarNamePtr = reinterpret_cast(Attrib::DefaultDataArea(sizeof(const char *))); + } + + stockCarName = *stockCarNamePtr; + preloadPtr = reinterpret_cast(instance->GetAttributePointer(0x9652AF0F, 0)); + if (!preloadPtr) { + preloadPtr = reinterpret_cast(Attrib::DefaultDataArea(sizeof(int))); + } if (stockCarName && *stockCarName) { carName = stockCarName; } - if (*reinterpret_cast(instance->GetAttributePointer(0x9652AF0F, 0) ? - instance->GetAttributePointer(0x9652AF0F, 0) : - Attrib::DefaultDataArea(sizeof(int))) != 0 || - forcePreload) { + if (*preloadPtr != 0 || forcePreload) { ReserveStockCar(carName); } } - for (unsigned int i = 0; i < instance->Get(0x916E0E78).GetLength(); ++i) { + unsigned int i = 0; + + while (true) { + Attrib::Attribute children = instance->Get(0x916E0E78); + unsigned int numChildren = children.GetLength(); + + children.~Attribute(); + if (numChildren <= i) { + break; + } + const unsigned int *childKey = reinterpret_cast(instance->GetAttributePointer(0x916E0E78, i)); if (!childKey) { @@ -1786,6 +1808,8 @@ void GManager::RecursivePreloadCharacterCars(GRuntimeInstance *instance, bool fo if (child) { RecursivePreloadCharacterCars(child, forcePreload); } + + i += 1; } } From ab27f913d8b3aa469df564b79d0abba80daf2ca5 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 21:00:58 +0100 Subject: [PATCH 335/691] 73.57%: reshape GMarker constructor --- src/Speed/Indep/Src/Gameplay/GMarker.cpp | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GMarker.cpp b/src/Speed/Indep/Src/Gameplay/GMarker.cpp index 403577a19..8e5403293 100644 --- a/src/Speed/Indep/Src/Gameplay/GMarker.cpp +++ b/src/Speed/Indep/Src/Gameplay/GMarker.cpp @@ -4,15 +4,25 @@ GMarker::GMarker(const Attrib::Key &markerKey) : GRuntimeInstance(markerKey, kGameplayObjType_Marker) { - const UMath::Vector3 &pos = Position(0); - UMath::Matrix4 rotMat; + const UMath::Vector3 *pos = reinterpret_cast(GetAttributePointer(0x9F743A0E, 0)); + UMath::Matrix4 rotMat = UMath::Matrix4::kIdentity; UMath::Vector3 initialVec = UMath::Vector3Make(0.0f, 0.0f, 1.0f); - UMath::MultYRot(UMath::Matrix4::kIdentity, -Rotation(0) * 0.00069444446f, rotMat); - UMath::Rotate(initialVec, rotMat, initialVec); + const float *rotation = reinterpret_cast(GetAttributePointer(0x5A6A57C6, 0)); - mPosition.x = -pos.y; - mPosition.y = pos.z; - mPosition.z = pos.x; + if (!pos) { + pos = reinterpret_cast(Attrib::DefaultDataArea(sizeof(UMath::Vector3))); + } + + if (!rotation) { + rotation = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); + } + + MATRIX4_multyrot(&rotMat, -*rotation * 0.0027777778f, &rotMat); + VU0_MATRIX3x4_vect3mult(initialVec, rotMat, initialVec); + + mPosition.x = -pos->y; + mPosition.y = pos->z; + mPosition.z = pos->x; mDirection = initialVec; } From 779df534d1f70154efe3969b58b4ac5051d43f43 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 21:08:49 +0100 Subject: [PATCH 336/691] 73.78%: implement instance reference wiring --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 37 ++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index d66b91a35..926081144 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -996,7 +996,42 @@ void GManager::FindKeyReductionShifts() { delete[] keys; } -void GManager::ConnectInstanceReferences(GRuntimeInstance *runtimeInstance, const Attrib::Gen::gameplay &collection) {} +void GManager::ConnectInstanceReferences(GRuntimeInstance *runtimeInstance, const Attrib::Gen::gameplay &collection) { + Attrib::AttributeIterator iter = collection.Iterator(); + + while (iter.Valid()) { + unsigned int attributeKey = iter.GetKey(); + Attrib::Attribute attribute = collection.Get(attributeKey); + + if (attributeKey != 0x916E0E78) { + if (attribute.IsValid()) { + const Attrib::TypeDesc &typeDesc = Attrib::Database::Get().GetTypeDesc(attribute.GetType()); + const char *typeName = + *reinterpret_cast(reinterpret_cast(&typeDesc) + sizeof(unsigned int)); + + if (bStrCmp(typeName, "GCollectionKey") == 0) { + const Attrib::Definition *definition = mGameplayClass->GetDefinition(attribute.GetKey()); + int numConnections = definition->GetFlag(1) ? static_cast(attribute.GetLength()) : 1; + + for (int i = 0; i < numConnections; ++i) { + const GCollectionKey *connectedKey = + reinterpret_cast(collection.GetAttributePointer(attributeKey, i)); + + if (connectedKey) { + GRuntimeInstance *connected = FindInstance(connectedKey->GetCollectionKey()); + + if (connected) { + runtimeInstance->ConnectToInstance(attributeKey, i, connected); + } + } + } + } + } + } + + iter.Advance(); + } +} void GManager::ConnectRuntimeInstances() { for (unsigned int i = 0; i < mInstanceHashTableSize; ++i) { From e9fc203fef383fd8b099630bdc46a9789d88c348 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 21:09:57 +0100 Subject: [PATCH 337/691] 73.79%: tighten instance reference wiring --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 35 ++++++++++++----------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 926081144..38b8891c4 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1001,34 +1001,35 @@ void GManager::ConnectInstanceReferences(GRuntimeInstance *runtimeInstance, cons while (iter.Valid()) { unsigned int attributeKey = iter.GetKey(); - Attrib::Attribute attribute = collection.Get(attributeKey); + { + Attrib::Attribute attribute = collection.Get(attributeKey); - if (attributeKey != 0x916E0E78) { - if (attribute.IsValid()) { - const Attrib::TypeDesc &typeDesc = Attrib::Database::Get().GetTypeDesc(attribute.GetType()); - const char *typeName = - *reinterpret_cast(reinterpret_cast(&typeDesc) + sizeof(unsigned int)); + if (attributeKey != 0x916E0E78) { + if (attribute.IsValid()) { + const Attrib::TypeDesc &typeDesc = Attrib::Database::Get().GetTypeDesc(attribute.GetType()); + const char *typeName = + *reinterpret_cast(reinterpret_cast(&typeDesc) + sizeof(unsigned int)); - if (bStrCmp(typeName, "GCollectionKey") == 0) { - const Attrib::Definition *definition = mGameplayClass->GetDefinition(attribute.GetKey()); - int numConnections = definition->GetFlag(1) ? static_cast(attribute.GetLength()) : 1; + if (bStrCmp(typeName, "GCollectionKey") == 0) { + const Attrib::Definition *definition = mGameplayClass->GetDefinition(attribute.GetKey()); + int numConnections = definition->GetFlag(1) ? static_cast(attribute.GetLength()) : 1; - for (int i = 0; i < numConnections; ++i) { - const GCollectionKey *connectedKey = - reinterpret_cast(collection.GetAttributePointer(attributeKey, i)); + for (int i = 0; i < numConnections; ++i) { + const GCollectionKey *connectedKey = + reinterpret_cast(collection.GetAttributePointer(attributeKey, i)); - if (connectedKey) { - GRuntimeInstance *connected = FindInstance(connectedKey->GetCollectionKey()); + if (connectedKey) { + GRuntimeInstance *connected = FindInstance(connectedKey->GetCollectionKey()); - if (connected) { - runtimeInstance->ConnectToInstance(attributeKey, i, connected); + if (connected) { + runtimeInstance->ConnectToInstance(attributeKey, i, connected); + } } } } } } } - iter.Advance(); } } From d466aa451955c39ce427dd563824c4c016cafde9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 21:14:09 +0100 Subject: [PATCH 338/691] 74.05%: reshape respawn and direction extraction --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 29 ++++++++++++++------ src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 15 ++++++++-- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 38b8891c4..813aab997 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2641,14 +2641,27 @@ unsigned int GManager::GetRespawnMarker() { void GManager::GetRespawnLocation(UMath::Vector3 &startLoc, UMath::Vector3 &initialVec) { Attrib::Gen::gameplay gameplayObj(GetRespawnMarker(), 0, nullptr); - UMath::Vector3 position = gameplayObj.Position(0); - UMath::Matrix4 rotMat; - UMath::Vector3 forward = {0.0f, 0.0f, 1.0f}; + const UMath::Vector3 *position = reinterpret_cast(gameplayObj.GetAttributePointer(0x9F743A0E, 0)); + UMath::Matrix4 rotMat = UMath::Matrix4::kIdentity; + const float *rotation; + + if (!position) { + position = reinterpret_cast(Attrib::DefaultDataArea(sizeof(UMath::Vector3))); + } - startLoc.x = -position.y; - startLoc.y = position.z; - startLoc.z = position.x; + startLoc.x = -position->y; + startLoc.y = position->z; + startLoc.z = position->x; + + initialVec.x = 0.0f; + initialVec.y = 0.0f; + initialVec.z = 1.0f; + + rotation = reinterpret_cast(gameplayObj.GetAttributePointer(0x5A6A57C6, 0)); + if (!rotation) { + rotation = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); + } - UMath::MultYRot(UMath::Matrix4::kIdentity, -gameplayObj.Rotation(0) * 0.00069444446f, rotMat); - VU0_MATRIX3x4_vect3mult(forward, rotMat, initialVec); + MATRIX4_multyrot(&rotMat, -*rotation * 0.0027777778f, &rotMat); + VU0_MATRIX3x4_vect3mult(initialVec, rotMat, initialVec); } diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 580b7b379..f53d7daf7 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1509,11 +1509,20 @@ void GRaceParameters::ExtractPosition(Attrib::Gen::gameplay &collection, UMath:: } void GRaceParameters::ExtractDirection(Attrib::Gen::gameplay &collection, UMath::Vector3 &dir, float rotate) const { - UMath::Matrix4 rotMat; + UMath::Matrix4 rotMat = UMath::Matrix4::kIdentity; UMath::Vector3 forward = {0.0f, 0.0f, 1.0f}; + const float *rotation = reinterpret_cast(collection.GetAttributePointer(0x5A6A57C6, 0)); - UMath::MultYRot(UMath::Matrix4::kIdentity, -(collection.Rotation(0) + rotate) * 0.00069444446f, rotMat); - VU0_MATRIX3x4_vect3mult(forward, rotMat, dir); + if (!rotation) { + rotation = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); + } + + MATRIX4_multyrot(&rotMat, -(*rotation + rotate) * 0.0027777778f, &rotMat); + VU0_MATRIX3x4_vect3mult(forward, rotMat, forward); + + dir.x = forward.x; + dir.y = forward.y; + dir.z = forward.z; } unsigned int GRaceParameters::GetEventHash() const { From 95b22eb97ea92caa3f956882cc4d7a7e5d6b27c5 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 21:18:34 +0100 Subject: [PATCH 339/691] 74.13%: reshape marker map coordinate extraction --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 27 +++++++++++++++++------ 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 813aab997..85d5fd833 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2502,16 +2502,29 @@ bool GManager::CalcMapCoordsForMarker(unsigned int markerKey, bVector2 &outPos, return false; } - const UMath::Vector3 &pos = marker.Position(0); + const UMath::Vector3 *pos = reinterpret_cast(marker.GetAttributePointer(0x9F743A0E, 0)); TrackInfo *trackInfo = TrackInfo::GetTrackInfo(2000); - bVector2 worldPos(pos.x, pos.y); - UMath::Matrix4 rotMat; - UMath::Vector3 forwardVec = {0.0f, 0.0f, 1.0f}; + bVector2 worldPos; + UMath::Matrix4 rotMat = UMath::Matrix4::kIdentity; + UMath::Vector3 forwardVec = UMath::Vector3Make(0.0f, 0.0f, 1.0f); + const float *rotation; + + if (!pos) { + pos = reinterpret_cast(Attrib::DefaultDataArea(sizeof(UMath::Vector3))); + } + + worldPos.x = pos->x; + worldPos.y = pos->y; Minimap::ConvertPos(worldPos, outPos, trackInfo); - UMath::Init(rotMat, 1.0f, 1.0f, 1.0f); - UMath::MultYRot(rotMat, -marker.Rotation(0) * 0.0027777778f, rotMat); - UMath::Rotate(forwardVec, rotMat, forwardVec); + + rotation = reinterpret_cast(marker.GetAttributePointer(0x5A6A57C6, 0)); + if (!rotation) { + rotation = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); + } + + MATRIX4_multyrot(&rotMat, -*rotation * 0.0027777778f, &rotMat); + VU0_MATRIX3x4_vect3mult(forwardVec, rotMat, forwardVec); outRotDeg = bAngToDeg(bATan(-forwardVec.x, forwardVec.z)); return true; } From eb98df490424aa9ae4fd5ef1dc055e44cd08121f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 21:22:51 +0100 Subject: [PATCH 340/691] 74.17%: tighten marker map coordinate extraction --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 85d5fd833..aa2b4f095 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2503,21 +2503,22 @@ bool GManager::CalcMapCoordsForMarker(unsigned int markerKey, bVector2 &outPos, } const UMath::Vector3 *pos = reinterpret_cast(marker.GetAttributePointer(0x9F743A0E, 0)); - TrackInfo *trackInfo = TrackInfo::GetTrackInfo(2000); + TrackInfo *trackInfo; bVector2 worldPos; - UMath::Matrix4 rotMat = UMath::Matrix4::kIdentity; - UMath::Vector3 forwardVec = UMath::Vector3Make(0.0f, 0.0f, 1.0f); + UMath::Matrix4 rotMat; + UMath::Vector3 forwardVec; const float *rotation; if (!pos) { pos = reinterpret_cast(Attrib::DefaultDataArea(sizeof(UMath::Vector3))); } - worldPos.x = pos->x; - worldPos.y = pos->y; - + trackInfo = TrackInfo::GetTrackInfo(2000); + worldPos = bVector2(pos->x, pos->y); Minimap::ConvertPos(worldPos, outPos, trackInfo); + rotMat = UMath::Matrix4::kIdentity; + forwardVec = UMath::Vector3Make(0.0f, 0.0f, 1.0f); rotation = reinterpret_cast(marker.GetAttributePointer(0x5A6A57C6, 0)); if (!rotation) { rotation = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); From f7dbaa311af8afad9faaad01f0168d5cf79c2462 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Wed, 18 Mar 2026 21:24:55 +0100 Subject: [PATCH 341/691] 74.21%: reshape milestone pursuit completion flow --- src/Speed/Indep/Src/Gameplay/GMilestone.cpp | 31 +++++++++++++++------ 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GMilestone.cpp b/src/Speed/Indep/Src/Gameplay/GMilestone.cpp index bed2ef68c..a842aba21 100644 --- a/src/Speed/Indep/Src/Gameplay/GMilestone.cpp +++ b/src/Speed/Indep/Src/Gameplay/GMilestone.cpp @@ -100,22 +100,37 @@ void GMilestone::NotifyProgress(float value) { void GMilestone::NotifyPursuitOver(bool escaped) { if (mState == kState_DonePendingEscape) { - if (!escaped) { - mState = kState_Available; - } else { + if (escaped) { + float currentValue = GetCurrentValue(); Attrib::Gen::milestonetypes milestoneType(mTypeKey, 0, nullptr); - MNotifyMilestoneReached message(milestoneType.CollectionName(), (mFlags & kFlag_CompletionFaked) ? mRequiredValue : GetCurrentValue()); + Attrib::Gen::gameplay gameplayObj(mChallengeKey, 0, nullptr); + const int *bounty; + GRaceBin *bin; - mRecordedValue = (mFlags & kFlag_CompletionFaked) ? mRequiredValue : GetCurrentValue(); + if ((mFlags & kFlag_CompletionFaked) != 0) { + currentValue = mRequiredValue; + } + + mRecordedValue = currentValue; mState = kState_Awarded; + + MNotifyMilestoneReached message(milestoneType.CollectionName(), currentValue); message.Post(UCrc32(0x20D60DBF)); - if (GRaceDatabase::Get().GetBinNumber(mBinNumber)) { - GRaceDatabase::Get().GetBinNumber(mBinNumber)->RefreshProgress(); + bin = GRaceDatabase::Get().GetBinNumber(mBinNumber); + if (bin) { + bin->RefreshProgress(); } - Game_AwardPlayerBounty(static_cast(GetBounty())); + bounty = reinterpret_cast(gameplayObj.GetAttributePointer(0x8E1904C7, 0)); + if (!bounty) { + bounty = reinterpret_cast(Attrib::DefaultDataArea(sizeof(int))); + } + + Game_AwardPlayerBounty(*bounty); Game_ChallengeCompleted(); + } else { + mState = kState_Available; } } } From 1a54bf300cac21f922f60417ef1928a37f49e777 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 09:03:54 +0100 Subject: [PATCH 342/691] improvements derived from zBWare review changes --- .github/skills/code_style/SKILL.md | 33 +++++++++- .github/skills/execute/SKILL.md | 9 +++ .github/skills/implement/SKILL.md | 29 +++++++++ .github/skills/refiner/SKILL.md | 19 ++++++ .github/skills/scaffold/SKILL.md | 20 +++++- tools/code_style.py | 63 +++++++++++++++++- tools/decomp-workflow.py | 100 +++++++++++++++++++++++------ 7 files changed, 251 insertions(+), 22 deletions(-) diff --git a/.github/skills/code_style/SKILL.md b/.github/skills/code_style/SKILL.md index 5218fb40b..d5b2cbbb3 100644 --- a/.github/skills/code_style/SKILL.md +++ b/.github/skills/code_style/SKILL.md @@ -31,7 +31,7 @@ python tools/code_style.py audit --base origin/main - `audit` also checks touched `class` / `struct` declarations against known header declarations and, when no header exists, against the PS2 visibility rule. - `audit` warns on touched local forward declarations when the repo already has a header for that type. - `audit` warns on touched type members that look like invented padding or placeholder names such as `pad`, `unk`, or `field_1234`. -- `audit` also checks touched style-guide rules that clang-format cannot enforce for you, such as cast spacing, `using namespace`, `NULL`, and missing `EA_PRAGMA_ONCE_SUPPORTED` guard blocks when a header's guard region is touched. +- `audit` also checks touched style-guide rules that clang-format cannot enforce for you, such as cast spacing, `using namespace`, `NULL`, bare `#if MACRO` presence checks, recovered layout members that still use raw `unsigned char` / `unsigned short`, and missing or misordered `EA_PRAGMA_ONCE_SUPPORTED` guard blocks when a header's prologue is touched. - `audit` groups repeated findings by file so branch-wide output stays readable. - Use `audit --category safe-cpp` when you want a smaller Frontend/FEng-focused subset and `audit --category match-sensitive-cpp` when you want a conservative review queue for decomp code. - `format --check` is an opt-in wrapper around the repo's `.clang-format`, and by default it targets eligible changed C/C++ files, including match-sensitive code. @@ -95,7 +95,14 @@ Foo::Foo() - Use `nullptr` exclusively for null pointers. - Prefer `if (ptr)` / `if (!ptr)` over explicit null comparisons when the change is local and verified safe. - When a match-sensitive TU has many explicit `nullptr` checks and you decide to normalize them, prefer one mechanical full-TU pass over piecemeal cleanup. Rebuild the unit and re-check its status before keeping the rewrite. +- When a helper is doing address arithmetic, prefer `intptr_t` / `uintptr_t` or byte-pointer (`reinterpret_cast`) math over plain `int` parameters or integerized pointer subtraction. - Inline assembly is acceptable when it is needed to preserve dead-code compares, ordering, or other compiler behavior that source alone cannot reproduce. +- In low-level list / node / allocator code, prefer existing helper methods such as `AddBefore`, `AddAfter`, `Remove`, `GetPrev`, `GetNext`, or typed accessors over open-coding link rewiring once the helper exists. + +### Header prologues and preprocessor checks + +- In headers, keep the guard / `EA_PRAGMA_ONCE_SUPPORTED` block before any project `#include`; do not place includes ahead of `#pragma once`. +- Use `#ifdef MACRO` / `#ifndef MACRO` for presence checks. Reserve bare `#if MACRO` for cases where you really need the macro's numeric value. ### Forward declarations and local prototypes @@ -103,6 +110,7 @@ Foo::Foo() - If the repo already has a header declaration/definition for a type, include that header instead of redeclaring the type locally. - If the repo only has an empty or stub owner header, and line info / surrounding source clearly points at that header's subsystem, prefer populating that owner header over leaving a recovered project type declaration inside a `.cpp`. - Only keep a local forward declaration when no canonical repo header exists yet and you have verified that the ownership is still unresolved. +- Likewise for project free functions: if a declaration is shared across translation units, move it into the owning header instead of leaving ad-hoc local prototypes in `.cpp` files. - Prefer moving helper template declarations next to their real use site instead of leaving them in an unrelated file. ### Pointer style @@ -117,10 +125,13 @@ Foo::Foo() - Preserve the original `class` / `struct` kind from existing headers or Dwarf / PS2 evidence; do not treat it as a cosmetic style choice. - Treat header declarations as the repo source of truth. If the repo only has local `.cpp` partial declarations, verify the kind with the PS2 dump instead of copying them blindly. - Even forward declarations and local partial declarations should use the accurate keyword when known. +- Keep the `// total size: 0x...` comment above the recovered type declaration instead of burying it inside the body. +- When a recovered type is a `class`, keep explicit access sections and put the method/accessor block before the member layout block unless existing repo evidence shows otherwise. - Preserve the member naming style that DWARF shows. Some types use `mMember`, others use `m_member`; do not normalize them. - Preserve recovered member names, types, order, and offset comments. Do not invent placeholder members named `pad`, `unk`, `unknown`, or `field_XXXX` for game code just to make a layout compile. - If a member is genuinely unknown, stop and verify it with `find-symbol.py`, GC Dwarf, and PS2 data. If the layout is still incomplete, add a short TODO above the type instead of burying uncertainty in fake member names. - Add offset / size comments when you are writing recovered type layouts from DWARF. +- In recovered layouts, prefer explicit-width aliases such as `uint8` / `uint16` when the field width is known. Use plain `char` for text / byte buffers and `signed char` when the field is a signed 8-bit counter. - Define inline member functions in headers only when DWARF shows that they are genuinely inlined in the binary. - Use `struct` for POD-like data carriers with public fields; use `class` for behavior-heavy types only when that matches the recovered type information. - Keep tiny placeholder methods as concise inline bodies when that is already the local pattern. @@ -134,13 +145,27 @@ Foo::Foo() ### Dense local code - Expand dense one-line helper structs, declaration blocks, and function bodies in non-match-sensitive files into normal multiline formatting. +- In low-level headers, prefer normal multi-line bodies for touched inline operators and accessors instead of stacking `{ return ...; }` on one line, unless the surrounding file clearly uses intentional placeholder one-liners. - Prefer readable blocks over stacked one-line statements when behavior does not depend on exact source shape. +- In touched validation/parsing code, prefer explicit min/max or boundary checks over equivalent magic-constant arithmetic when the clearer form still compiles to the verified result. +- In parser/state-table code, prefer named enums and enum-typed state variables over anonymous integer state codes when that rewrite is verified safe. + +### Recovery markers + +- Remove stale recovery markers such as `// TODO`, `// UNSOLVED`, or `// STRIPPED` when the touched code is now implemented or understood. +- If a marker still needs to stay, give it short context such as ownership uncertainty, a Dwarf caveat, a platform/config note, or a scratch/link reference. Avoid bare marker-only comments. +- Do not leave `// TODO` hanging off a declaration or helper you just implemented; either finish the thought or remove the marker. ### Uncertain ownership - If a declaration or global clearly compiles but its original home is uncertain, add a short TODO comment instead of inventing structure you cannot justify yet. - When ownership matters, verify it with `decomp-workflow.py`, `decomp-context.py`, and `line-lookup` before moving code. +### Readable helper extraction + +- When touched recovered code repeats the same pointer/boundary arithmetic, prefer a short named helper or accessor such as `GetTop`, `GetBot`, `GetNext`, `GetPrev`, `GetStringTableStart`, or `GetStringTableEnd` if that shape is already supported by Dwarf/inlining evidence. +- Prefer call sites that use those helpers or existing container APIs over re-encoding the same arithmetic or link manipulation inline. + ## Phase 3: Things Not To "Clean Up" Blindly - Do not move an inline method out of a header just because it looks cleaner. @@ -172,3 +197,9 @@ Keep the cleanup only if the build succeeds and the relevant match status is unc - The trailing `//` initializer-list markers are an intentional repo convention, not noise to remove. - Small `if (ptr)` cleanup batches can be kept in match-sensitive code, but only after rebuilding the affected unit. - Dense frontend shim files benefit from multiline struct/prototype/function formatting. +- Header prologues should keep the `EA_PRAGMA_ONCE_SUPPORTED` block ahead of includes, not after them. +- Bare `#if MACRO` presence checks are review bait; use `#ifdef` / `#ifndef` unless you are intentionally testing a numeric config value. +- Reviewed recovered headers tend to keep total-size comments above the type, methods before fields, explicit access sections, and fixed-width aliases for width-known narrow integer members. +- Reviewed fixups also remove stale bare recovery markers or replace them with context, and prefer existing list/node helpers over hand-written pointer/link rewiring. +- Some reviewed fixups improved readability without losing match by replacing opaque range-check arithmetic with explicit bounds and by moving repeated pointer/boundary math behind short named helpers. +- Other recurring review churn came from plain-`int` address helpers, stray local `.cpp` prototypes for shared functions, and integer-coded parser states where named enums were clearer but still matched. diff --git a/.github/skills/execute/SKILL.md b/.github/skills/execute/SKILL.md index 7abf9cb3f..5ba0bd156 100644 --- a/.github/skills/execute/SKILL.md +++ b/.github/skills/execute/SKILL.md @@ -11,6 +11,9 @@ the produced C++ compiles to byte-identical object code against the original ret For each function, "done" means both objdiff and normalized DWARF are exact. +Human review is not a substitute for running `dwarf compare`. Each function should hit +its own `verify` gate before you treat it as ready to hand off, commit, or move past. + ## Overview This workflow combines several smaller workflows: @@ -152,6 +155,10 @@ python tools/decomp-workflow.py verify -u main/Path/To/TU -f FunctionName If it fails, follow up with `decomp-workflow.py diff` and `decomp-workflow.py dwarf` until both checks pass. +Do not queue up several "probably done" functions and leave the DWARF check for later. +Close the `verify` gate per function before moving on whenever feasible; otherwise the +reviewer ends up doing avoidable DWARF triage. + ### 3g. Periodic reassessment After every few functions, re-run the full status check: @@ -189,6 +196,8 @@ For any remaining nonmatching functions, make one final pass using the implement or refiner workflow with all context accumulated during the session. Do not report a function as complete unless its per-function `verify` check also passes. +Do not hand a function to review as "done except maybe DWARF" — either resolve the DWARF +failure yourself or explicitly call out the blocker and why it remains. ## Phase 5: Report diff --git a/.github/skills/implement/SKILL.md b/.github/skills/implement/SKILL.md index 25f56b926..cbd94da78 100644 --- a/.github/skills/implement/SKILL.md +++ b/.github/skills/implement/SKILL.md @@ -9,6 +9,11 @@ Your goal is to decompile a specific function: writing C++ source that compiles A function is not done until it is exact in both objdiff and normalized DWARF. +Reviewers should not be spending their time rediscovering DWARF mismatches. Before you +report progress, ask for review, hand the function off, or switch to another target, you +must run the per-function verification gate yourself and treat any DWARF failure as your +next task, not as review debt. + ## Phase 1: Gather Context Collect data from **all** of these sources in parallel where possible. @@ -156,6 +161,16 @@ python tools/decomp-workflow.py verify -u main/Path/To/TU -f FunctionName If the build fails, fix compilation errors first. +As soon as you have a compiling draft, run the combined verification gate immediately: + +```sh +python tools/decomp-workflow.py verify -u main/Path/To/TU -f FunctionName +``` + +Do this before you spend a long time polishing late instruction mismatches. If `verify` +already shows a DWARF failure, fix that first so you are not polishing code the reviewer +will bounce anyway. + ### Check the diff ```sh @@ -203,6 +218,17 @@ debug-line owner files for each DWARF `// Range:` block, which makes it much eas spot inlines that are coming from the wrong header or owner file. Exact line-number agreement is a useful secondary hint, but file ownership is the first thing to check. +Use this as the default loop when the function compiles but `verify` is still failing: + +1. Run `verify`. +2. If DWARF fails, run `dwarf`. +3. Fix the structural issue the DWARF diff is pointing at first: missing/extra locals, + wrong qualifiers or parameter types, wrong inline ownership, wrong helper/header owner, + or a source shape that outlined something that should be inlined. +4. Rebuild and rerun `verify`. +5. Only return to instruction-by-instruction cleanup once the remaining failures are no + longer obvious DWARF-compare issues. + Manual fallback: After writing your code, you can also run the dwarf dump on the compiled output and then query your output dump with lookup.py to compare your decompiled functions against the originals. Since the address of the function you're working on can keep changing @@ -233,6 +259,9 @@ Every mismatched instruction is a signal — don't settle for "close enough". Reaching 100% instruction matching status is not enough. Stay in the loop until `verify` passes, which means the DWARF of the function also matches after normalization. +Do not leave a function in a "review-ready" or "good enough for now" state with a known +DWARF failure unless you are explicitly blocked and you document that blocker clearly. + ## Phase 5: Report Summarize: diff --git a/.github/skills/refiner/SKILL.md b/.github/skills/refiner/SKILL.md index a6aeb2125..0054e6e18 100644 --- a/.github/skills/refiner/SKILL.md +++ b/.github/skills/refiner/SKILL.md @@ -15,9 +15,25 @@ approaches that were tried before — instead, apply systematic lateral analysis - A diff is available (`decomp-diff.py -u -d `). - The "obvious" translation from Ghidra has been attempted. - You have been given the current source code and the diff. +- You have already run the per-function `verify` gate and know whether the remaining work + is still structural DWARF cleanup or true late-stage instruction cleanup. + +Refiner is not the place to dump unresolved DWARF debt on a reviewer. If `verify` or +`dwarf` is still showing obvious structural mismatches (missing locals, wrong types, +wrong inline ownership, wrong helper/header owner), fix those first or drop back to the +implementer workflow before doing late instruction polish. ## Phase 1: Read the full diff without collapsing +Before you start a refiner pass, confirm the gate status: + +```sh +python tools/decomp-workflow.py verify -u main/Path/To/TU -f FunctionName +``` + +If the combined gate is failing for reasons that are still clearly visible in the DWARF +diff, address those first instead of treating them as reviewer follow-up. + Preferred shortcut: ```sh @@ -151,6 +167,9 @@ DWARF mismatches to watch for: - Wrong return type - Missing inlined function records (means an inline call was outlined) +If these mismatches are still present, you are not in pure refiner territory yet. Resolve +them before you ask a reviewer to spend time on the function. + ## Phase 4: Report Summarize: diff --git a/.github/skills/scaffold/SKILL.md b/.github/skills/scaffold/SKILL.md index a2f062f50..3fe3d9256 100644 --- a/.github/skills/scaffold/SKILL.md +++ b/.github/skills/scaffold/SKILL.md @@ -39,6 +39,9 @@ Preserve the real `class` / `struct` kind while scaffolding. Check existing head then use Dwarf plus PS2 visibility / vtable info to decide the type kind. Even temporary forward declarations should match the known original kind. +Keep the header prologue in repo order: header guard, `EA_PRAGMA_ONCE_SUPPORTED` block, +then includes. Do not drop project includes ahead of `#pragma once`. + If the repo already has a header for a type you need, include that header instead of adding a new local forward declaration. Only forward-declare when no canonical repo header exists yet and you have verified that the ownership is still unresolved. @@ -47,11 +50,26 @@ Preserve real member names, types, order, and offset comments while scaffolding. fill gaps with invented `pad`, `unk`, or `field_XXXX` members for game types; verify the layout from Dwarf / PS2 data and leave a TODO over the type if a field is still uncertain. +Keep the `// total size: 0x...` comment above the recovered type declaration. When the +recovered type is a `class`, keep explicit access sections and prefer putting methods / +accessors before the member layout block unless existing repo evidence says otherwise. + +When a recovered field width is known, prefer explicit-width aliases such as `uint8` / +`uint16` over raw `unsigned char` / `unsigned short`. Use plain `char` for string or byte +buffers and `signed char` when the field is a signed 8-bit counter. + +If a recovered type repeatedly walks neighbors, boundaries, or in-object offsets, prefer +small named helpers such as `GetTop`, `GetBot`, `GetNext`, `GetPrev`, or boundary getters +instead of repeating raw pointer arithmetic at each call site. + +When those helpers operate on addresses or byte offsets, prefer `intptr_t` / `uintptr_t` +or explicit byte-pointer arithmetic instead of plain `int` address parameters. + Only create headers if it's really necessary (the struct doesn't have inlines so you can't determine in which header file it goes and it's thematically very different from the other structs that use it), otherwise put it into the one you determined to be correct. The dwarf often has duplicated inlines, clean those up according to the order in the PS2 info. -Write a TODO comment over the struct/class if you aren't 100% sure that it belongs to the correct header. +Write a TODO comment over the struct/class if you aren't 100% sure that it belongs to the correct header, and say why (ownership uncertainty, circular dependency, dwarf caveat, etc.) instead of leaving a bare marker. ## Phase 3: Add needed files to jumbo file and compile diff --git a/tools/code_style.py b/tools/code_style.py index ecb85f713..61c3f2ee3 100644 --- a/tools/code_style.py +++ b/tools/code_style.py @@ -84,6 +84,7 @@ class Finding: ) USING_NAMESPACE_PATTERN = re.compile(r"^\s*using\s+namespace\b") NULL_PATTERN = re.compile(r"\bNULL\b") +BARE_PRESENCE_IF_PATTERN = re.compile(r"^\s*#if\s+([A-Za-z_][A-Za-z0-9_]*)\s*$") HEADER_GUARD_IFNDEF_PATTERN = re.compile(r"^\s*#ifndef\s+[A-Za-z0-9_]+\s*$", re.MULTILINE) HEADER_GUARD_DEFINE_PATTERN = re.compile(r"^\s*#define\s+[A-Za-z0-9_]+\s*$", re.MULTILINE) EA_PRAGMA_BLOCK_PATTERN = re.compile( @@ -92,6 +93,16 @@ class Finding: r".*?^\s*#endif\s*$", re.MULTILINE | re.DOTALL, ) +EA_PRAGMA_IFDEF_PATTERN = re.compile( + r"^\s*#ifdef\s+EA_PRAGMA_ONCE_SUPPORTED\s*$", re.MULTILINE +) +RECOVERED_LAYOUT_COMMENT_PATTERN = re.compile( + r"//\s*offset 0x[0-9A-Fa-f]+,\s*size 0x[0-9A-Fa-f]+" +) +RECOVERED_NARROW_UNSIGNED_PATTERN = re.compile(r"\bunsigned\s+(char|short)\b") +BARE_RECOVERY_MARKER_PATTERN = re.compile( + r"//\s*(TODO|UNSOLVED|STRIPPED)\b(?:\s*[.:,-]*)?\s*$" +) SUSPICIOUS_MEMBER_PATTERN = re.compile( r"^(?:" r"_?pad(?:ding)?[0-9A-Fa-f_]*" @@ -441,6 +452,16 @@ def audit_style_guide_rules( if touched_lines is not None and idx not in touched_lines: continue stripped = line.strip() + bare_recovery_marker_match = BARE_RECOVERY_MARKER_PATTERN.search(line) + if bare_recovery_marker_match is not None: + findings.append( + Finding( + path, + idx, + "INFO", + f"`// {bare_recovery_marker_match.group(1)}` has no context; add a short reason or remove the stale recovery marker", + ) + ) if stripped.startswith("//"): continue @@ -471,9 +492,35 @@ def audit_style_guide_rules( "use `nullptr` instead of `NULL`", ) ) + bare_presence_if_match = BARE_PRESENCE_IF_PATTERN.match(line) + if bare_presence_if_match is not None: + findings.append( + Finding( + path, + idx, + "WARN", + f"bare `#if {bare_presence_if_match.group(1)}` looks like a presence check; prefer `#ifdef {bare_presence_if_match.group(1)}` unless a numeric test is intentional", + ) + ) + narrow_type_match = RECOVERED_NARROW_UNSIGNED_PATTERN.search(line) + if ( + narrow_type_match is not None + and RECOVERED_LAYOUT_COMMENT_PATTERN.search(line) is not None + ): + preferred = "uint8" if narrow_type_match.group(1) == "char" else "uint16" + findings.append( + Finding( + path, + idx, + "INFO", + f"recovered layout member uses `{narrow_type_match.group(0)}`; prefer explicit-width `{preferred}` when the field width is known", + ) + ) if ext in HEADER_EXTS: - should_check_guard = touched_lines is None or any(line_no <= 8 for line_no in touched_lines) + should_check_guard = touched_lines is None or any( + line_no <= 12 for line_no in touched_lines + ) if should_check_guard: has_ifndef = HEADER_GUARD_IFNDEF_PATTERN.search(text) is not None has_define = HEADER_GUARD_DEFINE_PATTERN.search(text) is not None @@ -487,6 +534,20 @@ def audit_style_guide_rules( "header guard should use `#ifndef` / `#define` plus the `EA_PRAGMA_ONCE_SUPPORTED` `#pragma once` block", ) ) + pragma_ifdef_match = EA_PRAGMA_IFDEF_PATTERN.search(text) + if pragma_ifdef_match is not None: + pragma_ifdef_line = text[: pragma_ifdef_match.start()].count("\n") + 1 + for idx, line in enumerate(text.splitlines(), 1): + if line.strip().startswith("#include ") and idx < pragma_ifdef_line: + findings.append( + Finding( + path, + idx, + "WARN", + "header include appears before the `EA_PRAGMA_ONCE_SUPPORTED` block; keep the guard / pragma block ahead of includes", + ) + ) + break return findings diff --git a/tools/decomp-workflow.py b/tools/decomp-workflow.py index 84f2f83d5..6be2b3d80 100644 --- a/tools/decomp-workflow.py +++ b/tools/decomp-workflow.py @@ -292,6 +292,14 @@ def choose_objdiff_row(unit_name: str, function_name: str, reloc_diffs: str = "n return matches[0] +def resolve_exact_function_name( + unit_name: str, function_name: str, reloc_diffs: str = "none" +) -> str: + return str( + choose_objdiff_row(unit_name, function_name, reloc_diffs=reloc_diffs)["name"] + ) + + def load_dwarf_report( unit_name: str, function_name: str, @@ -642,6 +650,9 @@ def command_function(args: argparse.Namespace) -> None: ensure_decomp_prereqs() print_section(f"Function Workflow: {args.function}") ensure_shared_unit_output(args.unit) + resolved_function_name = resolve_exact_function_name( + args.unit, args.function, reloc_diffs=args.reloc_diffs + ) cmd = python_tool("decomp-context.py", "-u", args.unit, "-f", args.function) if args.no_source: cmd.append("--no-source") @@ -661,9 +672,14 @@ def command_function(args: argparse.Namespace) -> None: print(flush=True) print( "Required completion check: python tools/decomp-workflow.py verify " - f"-u {shlex.quote(args.unit)} -f {shlex.quote(args.function)}", + f"-u {shlex.quote(args.unit)} -f {shlex.quote(resolved_function_name)}", flush=True, ) + if resolved_function_name != args.function: + print( + f"(Resolved exact function name for DWARF-safe follow-up: {resolved_function_name})", + flush=True, + ) def command_unit(args: argparse.Namespace) -> None: @@ -810,8 +826,11 @@ def command_dwarf(args: argparse.Namespace) -> None: print_section(f"DWARF Workflow: {args.unit} / {args.function}") if not args.rebuilt_dwarf_file: ensure_shared_unit_output(args.unit) + resolved_function_name = resolve_exact_function_name(args.unit, args.function) - cmd: List[str] = python_tool("dwarf-compare.py", "-u", args.unit, "-f", args.function) + cmd: List[str] = python_tool( + "dwarf-compare.py", "-u", args.unit, "-f", resolved_function_name + ) if args.summary: cmd.append("--summary") if args.json: @@ -833,18 +852,24 @@ def command_verify(args: argparse.Namespace) -> None: ensure_shared_unit_output(args.unit) objdiff_row = choose_objdiff_row(args.unit, args.function, reloc_diffs=args.reloc_diffs) - dwarf_report = load_dwarf_report( - args.unit, - args.function, - rebuilt_dwarf_file=args.rebuilt_dwarf_file, - ) + resolved_function_name = str(objdiff_row["name"]) + dwarf_load_error: Optional[str] = None + dwarf_report: Optional[Dict[str, Any]] = None + try: + dwarf_report = load_dwarf_report( + args.unit, + resolved_function_name, + rebuilt_dwarf_file=args.rebuilt_dwarf_file, + ) + except WorkflowError as e: + dwarf_load_error = str(e) objdiff_exact = ( objdiff_row["status"] == "match" and objdiff_row["match_percent"] is not None and float(objdiff_row["match_percent"]) >= 100.0 ) - dwarf_exact = bool(dwarf_report["normalized_exact_match"]) + dwarf_exact = bool(dwarf_report["normalized_exact_match"]) if dwarf_report else False overall_ok = objdiff_exact and dwarf_exact objdiff_percent = ( @@ -852,34 +877,56 @@ def command_verify(args: argparse.Namespace) -> None: if objdiff_row["match_percent"] is not None else "-" ) - dwarf_percent = f"{float(dwarf_report['match_percent']):.1f}%" + dwarf_percent = ( + f"{float(dwarf_report['match_percent']):.1f}%" if dwarf_report else "-" + ) print( f"objdiff: {'PASS' if objdiff_exact else 'FAIL'} | " f"{objdiff_percent} | status={objdiff_row['status']} | " f"unmatched~{objdiff_row['unmatched_bytes_est']}B" ) - print( - f"DWARF: {'PASS' if dwarf_exact else 'FAIL'} | " - f"{dwarf_percent} | normalized exact={'yes' if dwarf_exact else 'no'} | " - f"change groups={dwarf_report['changed_groups']}" - ) + if dwarf_report: + print( + f"DWARF: {'PASS' if dwarf_exact else 'FAIL'} | " + f"{dwarf_percent} | normalized exact={'yes' if dwarf_exact else 'no'} | " + f"change groups={dwarf_report['changed_groups']}" + ) + else: + print("DWARF: FAIL | unable to compare rebuilt vs original DWARF", flush=True) + if resolved_function_name != args.function: + print(f"Resolved DWARF symbol: {resolved_function_name}") print(f"Overall: {'PASS' if overall_ok else 'FAIL'}") print("Done means both objdiff and normalized DWARF are exact for the function.") if overall_ok: return + if dwarf_load_error: + print(flush=True) + print("DWARF compare could not complete:", flush=True) + print(dwarf_load_error, flush=True) + if ( + objdiff_row["status"] == "missing" + and "rebuilt DWARF: function" in dwarf_load_error + and "not found" in dwarf_load_error + ): + print( + "Hint: the rebuilt object does not contain this function yet. " + "Implement the function or fix its ownership/signature first, then rerun verify.", + flush=True, + ) + print(flush=True) print("Follow-up commands:", flush=True) print( f" python tools/decomp-workflow.py diff -u {shlex.quote(args.unit)} " - f"-d {shlex.quote(args.function)}", + f"-d {shlex.quote(resolved_function_name)}", flush=True, ) print( f" python tools/decomp-workflow.py dwarf -u {shlex.quote(args.unit)} " - f"-f {shlex.quote(args.function)}", + f"-f {shlex.quote(resolved_function_name)}", flush=True, ) raise WorkflowError( @@ -941,7 +988,12 @@ def build_parser() -> argparse.ArgumentParser: help="Run decomp-context.py for one function", ) function.add_argument("-u", "--unit", required=True, help="Translation unit name") - function.add_argument("-f", "--function", required=True, help="Function name to inspect") + function.add_argument( + "-f", + "--function", + required=True, + help="Function name to inspect (full name or a unique substring)", + ) function.add_argument( "--no-source", action="store_true", @@ -1086,7 +1138,12 @@ def build_parser() -> argparse.ArgumentParser: help="Compare original vs rebuilt DWARF for one function", ) dwarf.add_argument("-u", "--unit", required=True, help="Translation unit name") - dwarf.add_argument("-f", "--function", required=True, help="Function name to compare") + dwarf.add_argument( + "-f", + "--function", + required=True, + help="Function name to compare (full name or a unique substring)", + ) dwarf.add_argument( "--summary", action="store_true", @@ -1127,7 +1184,12 @@ def build_parser() -> argparse.ArgumentParser: help="Fail unless one function matches in both objdiff and DWARF", ) verify.add_argument("-u", "--unit", required=True, help="Translation unit name") - verify.add_argument("-f", "--function", required=True, help="Function name to verify") + verify.add_argument( + "-f", + "--function", + required=True, + help="Function name to verify (full name or a unique substring)", + ) verify.add_argument( "--reloc-diffs", choices=RELOC_DIFF_CHOICES, From 1b8ec13c1bf0453e18f17d12875cc9b1cd599d24 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 09:51:52 +0100 Subject: [PATCH 343/691] symlink --- .claude | 1 + 1 file changed, 1 insertion(+) create mode 120000 .claude diff --git a/.claude b/.claude new file mode 120000 index 000000000..c0ca46856 --- /dev/null +++ b/.claude @@ -0,0 +1 @@ +.agents \ No newline at end of file From b14c1cef45e3fcdfe760488dd2afcf2bb6a69084 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 16:33:15 +0100 Subject: [PATCH 344/691] commit semantics --- AGENTS.md | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index fc4f7af24..7b4321485 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -354,25 +354,35 @@ This is a **C++98** codebase compiled with ProDG GC 3.9.3 (GCC 2.95 under the ho ## Committing Progress -After each meaningful percentage-point improvement in objdiff match score, commit your changes. Check the current unit match percentage with: +After each meaningful improvement in objdiff match score or DWARF progress, commit your changes. Check the current unit match percentage with: ```sh python tools/decomp-status.py --unit main/Path/To/TU ``` -Commit whenever the match percentage increases (e.g. you matched a new function). Use this format for the commit message: +Commit whenever the match percentage increases or you achieve a milestone (e.g. you matched a new function or improved an existing one). Use this format for the commit message: ``` -n.n[n]%: short description of what was matched or changed +n.n[n]%: [action] [Subject]::[Function] ``` +- **match+**: used when a function or object achieves 100% byte-match status AND 100% DWARF match. +- **match**: used when a function achieves 100% byte-match status but DWARF is still missing/mismatched. +- **improve**: used when the instruction match percentage increases. +- **dwarf match**: used when the normalized DWARF achieves 100% match. +- **dwarf improve**: used when DWARF issues are resolved but it's not yet 100% DWARF-matched. + Examples: -- `42.1%: match UpdateCamera` -- `78.56%: match PlayerController constructor and destructor` +- `42.1%: match+ UpdateCamera` +- `76.7%: match+ TrackStreamer::HibernateStreamingSections` +- `76.7%: match TrackStreamer::WillUnloadBlock` +- `76.5%: dwarf match TrackStreamer::HandleLoading` +- `76.5%: improve TrackStreamer::LoadSection` +- `76.5%: dwarf improve TrackStreamer::CountUserAllocations` - `100.0%: full match for zAnim` -Do not batch up multiple percentage milestones into one commit — commit as each improvement lands. +Do not batch up multiple unrelated improvements into one commit — commit as each logical piece of work lands. ## Parallel Sub-Agent Matching From c23d4331055138b5da53f9fe7f823f5bd8fd67c0 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 16:39:03 +0100 Subject: [PATCH 345/691] 74.48%: reshape milestone value tracking --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 54 ++++++++++++----------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index aa2b4f095..22debf73a 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -7,6 +7,7 @@ #include "Speed/Indep/Src/Generated/Events/EFadeScreenOff.hpp" #include "Speed/Indep/Src/Generated/Events/EFadeScreenOn.hpp" #include "Speed/Indep/Src/Generated/Messages/MEnteringGameplay.h" +#include "Speed/Indep/Src/Generated/Messages/MNotifyMilestoneProgress.h" #include "Speed/Indep/Src/Gameplay/GMarker.h" #include "Speed/Indep/Src/Gameplay/GVault.h" #include "Speed/Indep/Src/Interfaces/SimActivities/ICopMgr.h" @@ -1057,35 +1058,38 @@ void GManager::ConnectChildren(GRuntimeInstance *runtimeInstance) { } void GManager::TrackValue(const char *valueName, float value) { - unsigned int valueKey; - MilestoneInfoMap::iterator it; - bool updateBest; - - valueKey = Attrib::StringToKey(valueName); - it = mMilestoneTypeInfo.find(valueKey); - if (it == mMilestoneTypeInfo.end()) { - MilestoneTypeInfo info; - - info.mTypeKey = valueKey; - info.mLastKnownValue = value; - info.mBestValue = value; - info.mFlags = 0; - mMilestoneTypeInfo.insert(MilestoneInfoMap::value_type(valueKey, info)); - return; - } - - it->second.mLastKnownValue = value; - updateBest = it->second.mBestValue == -1.0f; - if (!updateBest) { - if ((it->second.mFlags & GMilestone::kFlag_BiggerIsBetter) != 0) { - updateBest = it->second.mBestValue < value; + unsigned int key; + MilestoneInfoMap::iterator iterMile; + bool setBestValue; + + key = Attrib::StringToKey(valueName); + iterMile = mMilestoneTypeInfo.find(key); + MilestoneTypeInfo &info = iterMile->second; + info.mLastKnownValue = value; + setBestValue = true; + + if (info.mBestValue != -1.0f) { + if ((info.mFlags & GMilestone::kFlag_BiggerIsBetter) != 0) { + setBestValue = info.mBestValue < value; } else { - updateBest = value < it->second.mBestValue; + setBestValue = value < info.mBestValue; } } - if (updateBest) { - it->second.mBestValue = value; + if (setBestValue) { + info.mBestValue = value; + + MNotifyMilestoneProgress message(valueName, value); + message.Post(UCrc32(0x20D60DBF)); + + if (GRaceStatus::Exists() && GRaceStatus::Get().GetPlayMode() == GRaceStatus::kPlayMode_Roaming) { + for (GMilestone *availMile = GetFirstMilestone(true, 0); availMile; + availMile = GetNextMilestone(availMile, true, 0)) { + if (availMile->GetTypeKey() == info.mTypeKey) { + availMile->NotifyProgress(value); + } + } + } } } From d5223ed7da0024e6d56f8fd02b398cf561c5d99c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 16:43:26 +0100 Subject: [PATCH 346/691] 74.73%: implement race reputation decode --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 54 ++++++++++++++++---- 1 file changed, 45 insertions(+), 9 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index f53d7daf7..382d58e31 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1171,7 +1171,39 @@ float GRaceParameters::GetRaceLengthMeters() const { } int GRaceParameters::GetReputation() const { - return 0; + if (!mIndex) { + const int *reputation; + + EnsureLoaded(); + reputation = reinterpret_cast(mRaceRecord->GetAttributePointer(0x477EC5AA, 0)); + if (!reputation) { + reputation = reinterpret_cast(Attrib::DefaultDataArea(sizeof(int))); + } + + return *reputation; + } + + unsigned short value = *reinterpret_cast(reinterpret_cast(mIndex) + 0x24); + int exponent = static_cast(static_cast(value)) >> 11; + unsigned int scale = 1; + float result; + + if (exponent < 0) { + exponent = -exponent; + } + + while (exponent > 0) { + exponent--; + scale *= 10; + } + + if ((value & 0x8000) == 0) { + result = static_cast(static_cast(value << 5) >> 5) * static_cast(scale); + } else { + result = static_cast(static_cast(value << 5) >> 5) / static_cast(scale); + } + + return static_cast(result); } float GRaceParameters::GetCashValue() const { @@ -2138,20 +2170,24 @@ bool GRaceStatus::CanUnspawnRoamer(const IVehicle *roamer) const { } eVehicleCacheResult GRaceStatus::OnQueryVehicleCache(const IVehicle *removethis, const IVehicleCache *whosasking) const { - if (mPlayMode == kPlayMode_Racing || mVehicleCacheLocked) { - for (int i = 0; i < GetRacerCount(); ++i) { - if (UTL::COM::ComparePtr(mRacerInfo[i].GetSimable(), removethis)) { - return VCR_WANT; + if (mPlayMode != kPlayMode_Racing && !mVehicleCacheLocked) { + if (!UTL::COM::ComparePtr(whosasking, ICopMgr::Get())) { + if (!UTL::COM::ComparePtr(whosasking, ITrafficMgr::Get())) { + return VCR_DONTCARE; } } - } else { - if (!UTL::COM::ComparePtr(whosasking, ICopMgr::Get()) && !UTL::COM::ComparePtr(whosasking, ITrafficMgr::Get())) { - return VCR_DONTCARE; - } if (!CanUnspawnRoamer(removethis)) { return VCR_WANT; } + } else { + for (int onRacer = 0; onRacer < GetRacerCount(); ++onRacer) { + const GRacerInfo &racerInfo = mRacerInfo[onRacer]; + + if (UTL::COM::ComparePtr(racerInfo.GetSimable(), removethis)) { + return VCR_WANT; + } + } } return VCR_DONTCARE; From 933967caf6d88a63cababe8c37a10b088b8890e5 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 16:46:56 +0100 Subject: [PATCH 347/691] 74.74%: tighten race reputation decode flow --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 51 +++++++++++--------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 382d58e31..843ce925b 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1171,39 +1171,44 @@ float GRaceParameters::GetRaceLengthMeters() const { } int GRaceParameters::GetReputation() const { - if (!mIndex) { - const int *reputation; + if (mIndex) { + unsigned short value = *reinterpret_cast(reinterpret_cast(mIndex) + 0x24); + int exponent = static_cast(static_cast(value)) >> 11; + unsigned int scale = 1; - EnsureLoaded(); - reputation = reinterpret_cast(mRaceRecord->GetAttributePointer(0x477EC5AA, 0)); - if (!reputation) { - reputation = reinterpret_cast(Attrib::DefaultDataArea(sizeof(int))); + if (exponent < 0) { + exponent = -exponent; } - return *reputation; - } + while (true) { + bool done = exponent < 1; - unsigned short value = *reinterpret_cast(reinterpret_cast(mIndex) + 0x24); - int exponent = static_cast(static_cast(value)) >> 11; - unsigned int scale = 1; - float result; + exponent = exponent - 1; + if (done) { + break; + } - if (exponent < 0) { - exponent = -exponent; - } + scale = scale * 10; + } - while (exponent > 0) { - exponent--; - scale *= 10; + if ((value & 0x8000) != 0) { + return static_cast(static_cast(static_cast(value << 5) >> 5) / + static_cast(scale)); + } + + return static_cast(static_cast(static_cast(value << 5) >> 5) * + static_cast(scale)); } - if ((value & 0x8000) == 0) { - result = static_cast(static_cast(value << 5) >> 5) * static_cast(scale); - } else { - result = static_cast(static_cast(value << 5) >> 5) / static_cast(scale); + const int *reputation; + + EnsureLoaded(); + reputation = reinterpret_cast(mRaceRecord->GetAttributePointer(0x477EC5AA, 0)); + if (!reputation) { + reputation = reinterpret_cast(Attrib::DefaultDataArea(sizeof(int))); } - return static_cast(result); + return *reputation; } float GRaceParameters::GetCashValue() const { From 13013a4b3dd311dbd6aa43aa1e1d6ae4b4b11f08 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 16:48:29 +0100 Subject: [PATCH 348/691] 74.89%: reshape pursuit state updates --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 35 +++++++++++++++++++---- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 22debf73a..2b9f3cfb5 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -78,7 +78,9 @@ class Minimap { struct GManagerRaceStatusCompat { unsigned char _padRaceBin[0x1AB0]; GRaceBin *mRaceBin; - unsigned char _padRefresh[0x40]; + unsigned char _padPursuitCooldown[0xC]; + bool mPlayerPursuitInCooldown; + unsigned char _padRefresh[0x33]; bool mRefreshBinAfterRace; }; @@ -2398,10 +2400,11 @@ void GManager::UpdatePursuit() { bool roaming; bool challengeRace; bool cooldown; + bool epicPursuitRace; + roaming = GRaceStatus::Get().GetPlayMode() == GRaceStatus::kPlayMode_Roaming; pursuit = nullptr; perpetrator = nullptr; - roaming = GRaceStatus::Exists() && GRaceStatus::Get().GetPlayMode() == GRaceStatus::kPlayMode_Roaming; GetPlayerPursuitInterfaces(pursuit, perpetrator); cooldown = false; @@ -2409,6 +2412,7 @@ void GManager::UpdatePursuit() { TrackValue("cost_to_state_in_pursuit", static_cast(pursuit->CalcTotalCostToState())); cooldown = pursuit->GetPursuitStatus() == 2; } + reinterpret_cast(GRaceStatus::Get()).mPlayerPursuitInCooldown = cooldown; if (perpetrator) { TrackValue("cost_to_state", static_cast(perpetrator->GetCostToState())); @@ -2417,11 +2421,30 @@ void GManager::UpdatePursuit() { perpetrator->GetPendingRepPointsFromCopDestruction())); } - challengeRace = GRaceStatus::Exists() && GRaceStatus::Get().GetRaceParameters() && - GRaceStatus::Get().GetRaceParameters()->GetIsChallengeSeriesRace(); + challengeRace = false; + if (GRaceStatus::Get().GetRaceParameters() && GRaceStatus::Get().GetRaceParameters()->GetIsChallengeSeriesRace()) { + challengeRace = true; + } + + mHidingSpotIconsShown = false; + if ((roaming || challengeRace) && pursuit && cooldown) { + mHidingSpotIconsShown = true; + } + + mPursuitBreakerIconsShown = false; + if (!roaming && !challengeRace) { + epicPursuitRace = false; + if (GRaceStatus::Exists() && GRaceStatus::Get().GetRaceParameters() && + GRaceStatus::Get().GetRaceParameters()->GetIsEpicPursuitRace()) { + epicPursuitRace = true; + } - mHidingSpotIconsShown = (roaming || challengeRace) && pursuit && cooldown; - mPursuitBreakerIconsShown = (roaming || challengeRace) && pursuit && !cooldown; + if (epicPursuitRace && pursuit && !cooldown) { + mPursuitBreakerIconsShown = true; + } + } else if (pursuit && !cooldown) { + mPursuitBreakerIconsShown = true; + } } void GManager::UpdateTriggerAvailability() { From 4d0db9b8d899b8aa68bc1733b027bd5edc29994b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 16:56:50 +0100 Subject: [PATCH 349/691] 75.09%: improve GRaceStatus::SetRoaming --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 37 ++++++++++++++------ 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 843ce925b..02572272a 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2319,8 +2319,9 @@ void GRaceStatus::SetRoaming() { bool dDay = false; if (mRaceParms) { + const Attrib::Gen::gameplay *gameplayObj = mRaceParms->GetGameplayObj(); const unsigned int *startNewGame = - reinterpret_cast(mRaceParms->GetGameplayObj()->GetAttributePointer(0x64273C71, 0)); + reinterpret_cast(gameplayObj->GetAttributePointer(0x64273C71, 0)); lastDDay = bStrCmp(mRaceParms->GetEventID(), "16.2.1") == 0; if (!startNewGame) { @@ -2340,28 +2341,44 @@ void GRaceStatus::SetRoaming() { mRaceParms = nullptr; WRoadNetwork::Get().ResetShortcuts(); - for (IPlayer::List::const_iterator iter = IPlayer::GetList(PLAYER_ALL).begin(); iter != IPlayer::GetList(PLAYER_ALL).end(); ++iter) { + player = IPlayer::First(PLAYER_ALL); + while (player) { ISimable *simable; IVehicle *vehicle; - IVehicleAI *ivai; - - player = *iter; + IVehicleAI *vehicleAI; if (player->InGameBreaker()) { player->ResetGameBreaker(true); } simable = player->GetSimable(); - if (simable && simable->QueryInterface(&vehicle) && simable->QueryInterface(&ivai) && !ivai->GetPursuit()) { - ICopMgr *copMgr = ICopMgr::Get(); + if (simable && simable->QueryInterface(&vehicle)) { + vehicle->ForceStopOff(vehicle->GetForceStop()); + + if (vehicle->QueryInterface(&vehicleAI) && !vehicleAI->GetPursuit()) { + ICopMgr *copMgr = ICopMgr::Get(); + + if (copMgr) { + copMgr->ResetCopsForRestart(true); + } + } + } - if (copMgr) { - copMgr->ResetCopsForRestart(true); + { + IPlayer::List::const_iterator iter = + std::find(IPlayer::GetList(PLAYER_ALL).begin(), IPlayer::GetList(PLAYER_ALL).end(), player); + IPlayer::List::const_iterator end = IPlayer::GetList(PLAYER_ALL).end(); + + if (iter == end) { + player = nullptr; + } else { + ++iter; + player = iter == end ? nullptr : *iter; } } } - if (!lastDDay && !reinterpret_cast(&GManager::Get())->mRestartEventHash) { + if (!lastDDay && reinterpret_cast(&GManager::Get())->mRestartEventHash == 0) { new EReloadHud(); } From 6665de83bd7e816670afefc819d3c58c76557dac Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 16:58:49 +0100 Subject: [PATCH 350/691] 75.25%: improve GRaceParameters::GetCashValue --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 37 +++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 02572272a..f22129aca 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1212,7 +1212,42 @@ int GRaceParameters::GetReputation() const { } float GRaceParameters::GetCashValue() const { - return 0.0f; + if (mIndex) { + unsigned short value = *reinterpret_cast(reinterpret_cast(mIndex) + 0x22); + int exponent = static_cast(static_cast(value)) >> 11; + unsigned int scale = 1; + + if (exponent < 0) { + exponent = -exponent; + } + + while (true) { + bool done = exponent < 1; + + exponent = exponent - 1; + if (done) { + break; + } + + scale = scale * 10; + } + + if ((value & 0x8000) != 0) { + return static_cast(static_cast(value << 5) >> 5) / static_cast(scale); + } + + return static_cast(static_cast(value << 5) >> 5) * static_cast(scale); + } + + const float *cashValue; + + EnsureLoaded(); + cashValue = reinterpret_cast(mRaceRecord->GetAttributePointer(0xD8BAA07B, 0)); + if (!cashValue) { + cashValue = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); + } + + return *cashValue; } int GRaceParameters::GetLocalizationTag() const { From 68abe38a377fd92acf3d77a45b11c45e5cb77ac9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 17:03:51 +0100 Subject: [PATCH 351/691] 75.64%: match GRaceParameters type helpers --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 88 +++++++++++++++++++- 1 file changed, 87 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index f22129aca..c1e84e521 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1541,10 +1541,84 @@ float GRaceParameters::GetTimeOfDay() const { } unsigned int GRaceParameters::GetChallengeType() const { - return 0; + const EA::Reflection::Text *challengeType; + + if (mIndex) { + return *reinterpret_cast(reinterpret_cast(mIndex) + 0x10); + } + + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } + + challengeType = reinterpret_cast(mRaceRecord->GetAttributePointer(0x704F72E8, 0)); + if (!challengeType) { + challengeType = reinterpret_cast(Attrib::DefaultDataArea(sizeof(EA::Reflection::Text))); + } + + if (!*challengeType || !**challengeType) { + return 0; + } + + return Attrib::StringHash32(*challengeType); } GRace::Type GRaceParameters::GetRaceType() const { + static const struct { + const char *mTypeName; + GRace::Type mType; + } typeTable[11] = { + {"circuit", GRace::kRaceType_Circuit}, + {"p2p", GRace::kRaceType_P2P}, + {"drag", GRace::kRaceType_Drag}, + {"knockout", GRace::kRaceType_Knockout}, + {"tollbooth", GRace::kRaceType_Tollbooth}, + {"speedtrap", GRace::kRaceType_SpeedTrap}, + {"cashgrab", GRace::kRaceType_CashGrab}, + {"checkpointrace", GRace::kRaceType_Checkpoint}, + {"challenge", GRace::kRaceType_Challenge}, + {"speedtrapjump", GRace::kRaceType_JumpToSpeedTrap}, + {"milestonejump", GRace::kRaceType_JumpToMilestone}, + }; + const char *eventType; + + if (mIndex) { + return static_cast(static_cast(reinterpret_cast(mIndex)[0x2B])); + } + + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } + + { + const EA::Reflection::Text *eventTypePtr = + reinterpret_cast(mRaceRecord->GetAttributePointer(0x0F6BCDE1, 0)); + + if (!eventTypePtr) { + eventTypePtr = reinterpret_cast(Attrib::DefaultDataArea(sizeof(EA::Reflection::Text))); + } + + eventType = *eventTypePtr; + } + + { + int onType; + + for (onType = 0; onType < 11; ++onType) { + if (bStrCmp(eventType, typeTable[onType].mTypeName) == 0) { + return typeTable[onType].mType; + } + } + } + return GRace::kRaceType_None; } @@ -1687,6 +1761,18 @@ int GRaceParameters::GetCopDensity() const { } bool GRaceParameters::GetCanBeReversed() const { + if (mIndex) { + return (*reinterpret_cast(reinterpret_cast(mIndex) + 0x18) >> 3) & 1; + } + + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } + return false; } From d35ca683ea983941ab5550a243c577e1be103b23 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 17:08:50 +0100 Subject: [PATCH 352/691] 75.73%: match GRaceParameters index-aware getters --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 41 ++++++++++++++++---- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index c1e84e521..6f5e54115 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1105,7 +1105,16 @@ GActivity *GRaceParameters::GetActivity() const { } unsigned int GRaceParameters::GetCollectionKey() const { - return mRaceRecord ? mRaceRecord->GetCollection() : 0; + unsigned int collectionKey; + + if (!mIndex) { + EnsureLoaded(); + collectionKey = mRaceRecord->GetCollection(); + } else { + collectionKey = reinterpret_cast(mIndex)[0]; + } + + return collectionKey; } void GRaceParameters::GetBoundingBox(UMath::Vector2 &topLeft, UMath::Vector2 &botRight) const { @@ -1164,10 +1173,19 @@ void GRaceParameters::GetBoundingBox(UMath::Vector2 &topLeft, UMath::Vector2 &bo } float GRaceParameters::GetRaceLengthMeters() const { + if (mIndex) { + return *reinterpret_cast(reinterpret_cast(mIndex) + 0x1C); + } + + const float *raceLength; + EnsureLoaded(); - return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x7C11C52E, 0) ? - mRaceRecord->GetAttributePointer(0x7C11C52E, 0) : - Attrib::DefaultDataArea(sizeof(float))); + raceLength = reinterpret_cast(mRaceRecord->GetAttributePointer(0x7C11C52E, 0)); + if (!raceLength) { + raceLength = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); + } + + return *raceLength; } int GRaceParameters::GetReputation() const { @@ -1251,10 +1269,19 @@ float GRaceParameters::GetCashValue() const { } int GRaceParameters::GetLocalizationTag() const { + if (mIndex) { + return *reinterpret_cast(reinterpret_cast(mIndex) + 0x20); + } + + const int *localizationTag; + EnsureLoaded(); - return *reinterpret_cast(mRaceRecord->GetAttributePointer(0xDB89AB5C, 0) ? - mRaceRecord->GetAttributePointer(0xDB89AB5C, 0) : - Attrib::DefaultDataArea(sizeof(int))); + localizationTag = reinterpret_cast(mRaceRecord->GetAttributePointer(0xDB89AB5C, 0)); + if (!localizationTag) { + localizationTag = reinterpret_cast(Attrib::DefaultDataArea(sizeof(int))); + } + + return *localizationTag; } int GRaceParameters::GetNumLaps() const { From 75133e38a45057b950d8bb511a4291610bb59973 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 17:17:25 +0100 Subject: [PATCH 353/691] 76.45%: improve GRaceParameters::attribute getter fallbacks --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 277 +++++++++++++++---- 1 file changed, 220 insertions(+), 57 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 6f5e54115..76bffc0ca 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1285,17 +1285,35 @@ int GRaceParameters::GetLocalizationTag() const { } int GRaceParameters::GetNumLaps() const { + if (mIndex) { + return reinterpret_cast(mIndex)[0x28]; + } + + const int *numLaps; + EnsureLoaded(); - return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x0EBDC165, 0) ? - mRaceRecord->GetAttributePointer(0x0EBDC165, 0) : - Attrib::DefaultDataArea(sizeof(int))); + numLaps = reinterpret_cast(mRaceRecord->GetAttributePointer(0x0EBDC165, 0)); + if (!numLaps) { + numLaps = reinterpret_cast(Attrib::DefaultDataArea(sizeof(int))); + } + + return *numLaps; } const char *GRaceParameters::GetEventID() const { + if (mIndex) { + return reinterpret_cast(mIndex) + 4; + } + + const EA::Reflection::Text *eventID; + EnsureLoaded(); - return *reinterpret_cast(mRaceRecord->GetAttributePointer(0xA78403EC, 0) ? - mRaceRecord->GetAttributePointer(0xA78403EC, 0) : - Attrib::DefaultDataArea(sizeof(EA::Reflection::Text))); + eventID = reinterpret_cast(mRaceRecord->GetAttributePointer(0xA78403EC, 0)); + if (!eventID) { + eventID = reinterpret_cast(Attrib::DefaultDataArea(sizeof(EA::Reflection::Text))); + } + + return *eventID; } float GRaceParameters::GetRivalBestTime() const { @@ -1311,98 +1329,208 @@ float GRaceParameters::GetChallengeGoal() const { } bool GRaceParameters::GetIsPursuitRace() const { + if (mIndex) { + return (reinterpret_cast(mIndex)[6] & (1 << 7)) != 0; + } + + const bool *isPursuitRace; + EnsureLoaded(); - return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x2B1F54F6, 0) ? - mRaceRecord->GetAttributePointer(0x2B1F54F6, 0) : - Attrib::DefaultDataArea(sizeof(bool))); + isPursuitRace = reinterpret_cast(mRaceRecord->GetAttributePointer(0x2B1F54F6, 0)); + if (!isPursuitRace) { + isPursuitRace = reinterpret_cast(Attrib::DefaultDataArea(sizeof(bool))); + } + + return *isPursuitRace; } bool GRaceParameters::GetIsLoopingRace() const { + if (mIndex) { + return (reinterpret_cast(mIndex)[6] & (1 << 8)) != 0; + } + EnsureLoaded(); return mRaceRecord->IsLoopingRace(0); } bool GRaceParameters::GetInitiallyUnlockedQuickRace() const { + if (mIndex) { + return (reinterpret_cast(mIndex)[6] & (1 << 0)) != 0; + } + + const bool *initiallyUnlockedQuickRace; + EnsureLoaded(); - return *reinterpret_cast(mRaceRecord->GetAttributePointer(0xB39ED8C3, 0) ? - mRaceRecord->GetAttributePointer(0xB39ED8C3, 0) : - Attrib::DefaultDataArea(sizeof(bool))); + initiallyUnlockedQuickRace = reinterpret_cast(mRaceRecord->GetAttributePointer(0xB39ED8C3, 0)); + if (!initiallyUnlockedQuickRace) { + initiallyUnlockedQuickRace = reinterpret_cast(Attrib::DefaultDataArea(sizeof(bool))); + } + + return *initiallyUnlockedQuickRace; } bool GRaceParameters::GetInitiallyUnlockedOnline() const { + if (mIndex) { + return (reinterpret_cast(mIndex)[6] & (1 << 1)) != 0; + } + + const bool *initiallyUnlockedOnline; + EnsureLoaded(); - return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x39509746, 0) ? - mRaceRecord->GetAttributePointer(0x39509746, 0) : - Attrib::DefaultDataArea(sizeof(bool))); + initiallyUnlockedOnline = reinterpret_cast(mRaceRecord->GetAttributePointer(0x39509746, 0)); + if (!initiallyUnlockedOnline) { + initiallyUnlockedOnline = reinterpret_cast(Attrib::DefaultDataArea(sizeof(bool))); + } + + return *initiallyUnlockedOnline; } bool GRaceParameters::GetInitiallyUnlockedChallenge() const { + if (mIndex) { + return (reinterpret_cast(mIndex)[6] & (1 << 2)) != 0; + } + + const bool *initiallyUnlockedChallenge; + EnsureLoaded(); - return *reinterpret_cast(mRaceRecord->GetAttributePointer(0xEA855EAF, 0) ? - mRaceRecord->GetAttributePointer(0xEA855EAF, 0) : - Attrib::DefaultDataArea(sizeof(bool))); + initiallyUnlockedChallenge = reinterpret_cast(mRaceRecord->GetAttributePointer(0xEA855EAF, 0)); + if (!initiallyUnlockedChallenge) { + initiallyUnlockedChallenge = reinterpret_cast(Attrib::DefaultDataArea(sizeof(bool))); + } + + return *initiallyUnlockedChallenge; } bool GRaceParameters::GetIsDDayRace() const { + if (mIndex) { + return (reinterpret_cast(mIndex)[6] & (1 << 4)) != 0; + } + + const bool *isDDayRace; + EnsureLoaded(); - return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x8CB01ABF, 0) ? - mRaceRecord->GetAttributePointer(0x8CB01ABF, 0) : - Attrib::DefaultDataArea(sizeof(bool))); + isDDayRace = reinterpret_cast(mRaceRecord->GetAttributePointer(0x8CB01ABF, 0)); + if (!isDDayRace) { + isDDayRace = reinterpret_cast(Attrib::DefaultDataArea(sizeof(bool))); + } + + return *isDDayRace; } bool GRaceParameters::GetIsBossRace() const { + if (mIndex) { + return (reinterpret_cast(mIndex)[6] & (1 << 5)) != 0; + } + + const bool *isBossRace; + EnsureLoaded(); - return *reinterpret_cast(mRaceRecord->GetAttributePointer(0xFF5EE5D6, 0) ? - mRaceRecord->GetAttributePointer(0xFF5EE5D6, 0) : - Attrib::DefaultDataArea(sizeof(bool))); + isBossRace = reinterpret_cast(mRaceRecord->GetAttributePointer(0xFF5EE5D6, 0)); + if (!isBossRace) { + isBossRace = reinterpret_cast(Attrib::DefaultDataArea(sizeof(bool))); + } + + return *isBossRace; } bool GRaceParameters::GetIsMarkerRace() const { + if (mIndex) { + return (reinterpret_cast(mIndex)[6] & (1 << 6)) != 0; + } + + const bool *isMarkerRace; + EnsureLoaded(); - return *reinterpret_cast(mRaceRecord->GetAttributePointer(0xF2FE50D7, 0) ? - mRaceRecord->GetAttributePointer(0xF2FE50D7, 0) : - Attrib::DefaultDataArea(sizeof(bool))); + isMarkerRace = reinterpret_cast(mRaceRecord->GetAttributePointer(0xF2FE50D7, 0)); + if (!isMarkerRace) { + isMarkerRace = reinterpret_cast(Attrib::DefaultDataArea(sizeof(bool))); + } + + return *isMarkerRace; } bool GRaceParameters::GetRankPlayersByPoints() const { + if (mIndex) { + return (reinterpret_cast(mIndex)[6] & (1 << 9)) != 0; + } + EnsureLoaded(); return mRaceRecord->RankPlayersByPoints(0); } bool GRaceParameters::GetRankPlayersByDistance() const { + if (mIndex) { + return (reinterpret_cast(mIndex)[6] & (1 << 10)) != 0; + } + EnsureLoaded(); return mRaceRecord->RankPlayersByDistance(0); } bool GRaceParameters::GetScriptedCopsInRace() const { + if (mIndex) { + return (reinterpret_cast(mIndex)[6] & (1 << 12)) != 0; + } + EnsureLoaded(); return mRaceRecord->ScriptedCopsInRace(0); } bool GRaceParameters::GetCopsEnabled() const { + if (mIndex) { + return (reinterpret_cast(mIndex)[6] & (1 << 11)) != 0; + } + + const bool *copsEnabled; + EnsureLoaded(); - return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x3918E889, 0) ? - mRaceRecord->GetAttributePointer(0x3918E889, 0) : - Attrib::DefaultDataArea(sizeof(bool))); + copsEnabled = reinterpret_cast(mRaceRecord->GetAttributePointer(0x3918E889, 0)); + if (!copsEnabled) { + copsEnabled = reinterpret_cast(Attrib::DefaultDataArea(sizeof(bool))); + } + + return *copsEnabled; } bool GRaceParameters::GetNeverInQuickRace() const { + if (mIndex) { + return (reinterpret_cast(mIndex)[6] & (1 << 14)) != 0; + } + EnsureLoaded(); return mRaceRecord->NeverInQuickRace(0); } bool GRaceParameters::GetIsChallengeSeriesRace() const { + if (mIndex) { + return (reinterpret_cast(mIndex)[6] & (1 << 15)) != 0; + } + + const bool *isChallengeSeriesRace; + EnsureLoaded(); - return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x1C650104, 0) ? - mRaceRecord->GetAttributePointer(0x1C650104, 0) : - Attrib::DefaultDataArea(sizeof(bool))); + isChallengeSeriesRace = reinterpret_cast(mRaceRecord->GetAttributePointer(0x1C650104, 0)); + if (!isChallengeSeriesRace) { + isChallengeSeriesRace = reinterpret_cast(Attrib::DefaultDataArea(sizeof(bool))); + } + + return *isChallengeSeriesRace; } bool GRaceParameters::GetIsCollectorsEditionRace() const { + if (mIndex) { + return (reinterpret_cast(mIndex)[6] & (1 << 16)) != 0; + } + + const bool *isCollectorsEditionRace; + EnsureLoaded(); - return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x637584FE, 0) ? - mRaceRecord->GetAttributePointer(0x637584FE, 0) : - Attrib::DefaultDataArea(sizeof(bool))); + isCollectorsEditionRace = reinterpret_cast(mRaceRecord->GetAttributePointer(0x637584FE, 0)); + if (!isCollectorsEditionRace) { + isCollectorsEditionRace = reinterpret_cast(Attrib::DefaultDataArea(sizeof(bool))); + } + + return *isCollectorsEditionRace; } float GRaceParameters::GetTimeLimit() const { @@ -1421,10 +1549,15 @@ bool GRaceParameters::GetNoPostRaceScreen() const { } bool GRaceParameters::GetUseWorldHeatInRace() const { + const bool *useWorldHeatInRace; + EnsureLoaded(); - return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x45F2AD6C, 0) ? - mRaceRecord->GetAttributePointer(0x45F2AD6C, 0) : - Attrib::DefaultDataArea(sizeof(bool))); + useWorldHeatInRace = reinterpret_cast(mRaceRecord->GetAttributePointer(0x45F2AD6C, 0)); + if (!useWorldHeatInRace) { + useWorldHeatInRace = reinterpret_cast(Attrib::DefaultDataArea(sizeof(bool))); + } + + return *useWorldHeatInRace; } float GRaceParameters::GetForceHeatLevel() const { @@ -1433,10 +1566,15 @@ float GRaceParameters::GetForceHeatLevel() const { } float GRaceParameters::GetMaxRaceHeatLevel() const { + const float *maxRaceHeatLevel; + EnsureLoaded(); - return *reinterpret_cast(mRaceRecord->GetAttributePointer(0xF5A03629, 0) ? - mRaceRecord->GetAttributePointer(0xF5A03629, 0) : - Attrib::DefaultDataArea(sizeof(float))); + maxRaceHeatLevel = reinterpret_cast(mRaceRecord->GetAttributePointer(0xF5A03629, 0)); + if (!maxRaceHeatLevel) { + maxRaceHeatLevel = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); + } + + return *maxRaceHeatLevel; } float GRaceParameters::GetInitialPlayerSpeed() const { @@ -1445,10 +1583,15 @@ float GRaceParameters::GetInitialPlayerSpeed() const { } bool GRaceParameters::GetIsRollingStart() const { + const bool *isRollingStart; + EnsureLoaded(); - return *reinterpret_cast(mRaceRecord->GetAttributePointer(0xB809D19C, 0) ? - mRaceRecord->GetAttributePointer(0xB809D19C, 0) : - Attrib::DefaultDataArea(sizeof(bool))); + isRollingStart = reinterpret_cast(mRaceRecord->GetAttributePointer(0xB809D19C, 0)); + if (!isRollingStart) { + isRollingStart = reinterpret_cast(Attrib::DefaultDataArea(sizeof(bool))); + } + + return *isRollingStart; } bool GRaceParameters::GetIsEpicPursuitRace() const { @@ -1540,31 +1683,51 @@ unsigned int GRaceParameters::GetBarrierCount() const { } const char *GRaceParameters::GetPhotoFinishCamera() const { + const EA::Reflection::Text *photoFinishCamera; + EnsureLoaded(); - return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x62DFC259, 0) ? - mRaceRecord->GetAttributePointer(0x62DFC259, 0) : - Attrib::DefaultDataArea(sizeof(EA::Reflection::Text))); + photoFinishCamera = reinterpret_cast(mRaceRecord->GetAttributePointer(0x62DFC259, 0)); + if (!photoFinishCamera) { + photoFinishCamera = reinterpret_cast(Attrib::DefaultDataArea(sizeof(EA::Reflection::Text))); + } + + return *photoFinishCamera; } const char *GRaceParameters::GetPhotoFinishTexture() const { + const EA::Reflection::Text *photoFinishTexture; + EnsureLoaded(); - return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x038A3B53, 0) ? - mRaceRecord->GetAttributePointer(0x038A3B53, 0) : - Attrib::DefaultDataArea(sizeof(EA::Reflection::Text))); + photoFinishTexture = reinterpret_cast(mRaceRecord->GetAttributePointer(0x038A3B53, 0)); + if (!photoFinishTexture) { + photoFinishTexture = reinterpret_cast(Attrib::DefaultDataArea(sizeof(EA::Reflection::Text))); + } + + return *photoFinishTexture; } const char *GRaceParameters::GetTrafficPattern() const { + const EA::Reflection::Text *trafficPattern; + EnsureLoaded(); - return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x6319B692, 0) ? - mRaceRecord->GetAttributePointer(0x6319B692, 0) : - Attrib::DefaultDataArea(sizeof(EA::Reflection::Text))); + trafficPattern = reinterpret_cast(mRaceRecord->GetAttributePointer(0x6319B692, 0)); + if (!trafficPattern) { + trafficPattern = reinterpret_cast(Attrib::DefaultDataArea(sizeof(EA::Reflection::Text))); + } + + return *trafficPattern; } float GRaceParameters::GetTimeOfDay() const { + const float *timeOfDay; + EnsureLoaded(); - return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x9DFF3C3D, 0) ? - mRaceRecord->GetAttributePointer(0x9DFF3C3D, 0) : - Attrib::DefaultDataArea(sizeof(float))); + timeOfDay = reinterpret_cast(mRaceRecord->GetAttributePointer(0x9DFF3C3D, 0)); + if (!timeOfDay) { + timeOfDay = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); + } + + return *timeOfDay; } unsigned int GRaceParameters::GetChallengeType() const { From 980360264ae7a036c21a2770d5eaabcd0f8ee3c8 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 17:22:35 +0100 Subject: [PATCH 354/691] 76.73%: improve GRaceParameters::event and density accessors --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 133 +++++++++++++++---- 1 file changed, 106 insertions(+), 27 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 76bffc0ca..791e093cb 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1813,23 +1813,37 @@ GRace::Type GRaceParameters::GetRaceType() const { } unsigned int GRaceParameters::GetRegion() const { - static const char *kRaceRegions[3] = { - "city", - "coastal", - "college_town", + static const struct { + const char *mName; + unsigned int mRegion; + } kRaceRegions[3] = { + {"city", 0}, + {"coastal", 1}, + {"college_town", 2}, }; unsigned int i; - const char *regionName; + const EA::Reflection::Text *regionName; if (mIndex) { return reinterpret_cast(mIndex)[0x29]; } - EnsureLoaded(); - regionName = mRaceRecord->Region(0); + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } + + regionName = reinterpret_cast(mRaceRecord->GetAttributePointer(0xCB01E454, 0)); + if (!regionName) { + regionName = reinterpret_cast(Attrib::DefaultDataArea(sizeof(EA::Reflection::Text))); + } + for (i = 0; i < 3; i++) { - if (bStrCmp(regionName, kRaceRegions[i]) == 0) { - return i; + if (bStrCmp(*regionName, kRaceRegions[i].mName) == 0) { + return kRaceRegions[i].mRegion; } } @@ -1862,7 +1876,26 @@ void GRaceParameters::ExtractDirection(Attrib::Gen::gameplay &collection, UMath: } unsigned int GRaceParameters::GetEventHash() const { - return Attrib::StringToKey(GetEventID()); + const EA::Reflection::Text *eventID; + + if (mIndex) { + return *reinterpret_cast(reinterpret_cast(mIndex) + 0x14); + } + + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } + + eventID = reinterpret_cast(mRaceRecord->GetAttributePointer(0xA78403EC, 0)); + if (!eventID) { + eventID = reinterpret_cast(Attrib::DefaultDataArea(sizeof(EA::Reflection::Text))); + } + + return Attrib::StringHash32(*eventID); } bool GRaceParameters::GetIsAvailable(GRace::Context context) const { @@ -1892,8 +1925,22 @@ bool GRaceParameters::GetIsAvailable(GRace::Context context) const { } int GRaceParameters::GetTrafficDensity() const { - EnsureLoaded(); - return mRaceRecord->ForceTrafficDensity(0); + const int *trafficDensity; + + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } + + trafficDensity = reinterpret_cast(mRaceRecord->GetAttributePointer(0xC64BC341, 0)); + if (!trafficDensity) { + trafficDensity = reinterpret_cast(Attrib::DefaultDataArea(sizeof(int))); + } + + return *trafficDensity; } bool GRaceParameters::GetIsSunsetRace() const { @@ -1916,38 +1963,70 @@ void GRaceParameters::SetupTimeOfDay() { } GRace::Difficulty GRaceParameters::GetDifficulty() const { - int trafficLevel; + const int *difficulty; + GRace::Difficulty raceDifficulty; - EnsureLoaded(); - trafficLevel = *reinterpret_cast(mRaceRecord->GetAttributePointer(0x88A7E3BE, 0) ? - mRaceRecord->GetAttributePointer(0x88A7E3BE, 0) : - Attrib::DefaultDataArea(sizeof(int))); - if (trafficLevel < 0x22) { + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } + + difficulty = reinterpret_cast(mRaceRecord->GetAttributePointer(0x88A7E3BE, 0)); + if (!difficulty) { + difficulty = reinterpret_cast(Attrib::DefaultDataArea(sizeof(int))); + } + + if (*difficulty < 0x22) { return GRace::kRaceDifficulty_Easy; } - if (trafficLevel > 0x42) { - return GRace::kRaceDifficulty_Hard; + + raceDifficulty = GRace::kRaceDifficulty_Medium; + if (*difficulty > 0x42) { + raceDifficulty = GRace::kRaceDifficulty_Hard; } - return GRace::kRaceDifficulty_Medium; + + return raceDifficulty; } int GRaceParameters::GetCopDensity() const { + const int *copDensity; + int raceCopDensity; int density; - EnsureLoaded(); - density = *reinterpret_cast(mRaceRecord->GetAttributePointer(0xDBC08D32, 0) ? - mRaceRecord->GetAttributePointer(0xDBC08D32, 0) : - Attrib::DefaultDataArea(sizeof(int))); + if (mIndex) { + return static_cast(reinterpret_cast(mIndex)[0x2A]); + } + + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } + + copDensity = reinterpret_cast(mRaceRecord->GetAttributePointer(0xDBC08D32, 0)); + if (!copDensity) { + copDensity = reinterpret_cast(Attrib::DefaultDataArea(sizeof(int))); + } + + density = *copDensity; if (density == 0 && !GetCopsEnabled()) { return 0; } if (density < 0x22) { return 1; } + + raceCopDensity = 2; if (density > 0x42) { - return 3; + raceCopDensity = 3; } - return 2; + + return raceCopDensity; } bool GRaceParameters::GetCanBeReversed() const { From 3d3eced8cf51c499967e1aa3334542b156587584 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 17:28:04 +0100 Subject: [PATCH 355/691] 76.85%: improve GRaceParameters::challenge value decoders --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 48 ++++++++++++++++++-- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 791e093cb..0601d8558 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1317,15 +1317,55 @@ const char *GRaceParameters::GetEventID() const { } float GRaceParameters::GetRivalBestTime() const { + const float *rivalBestTime; + + if (mIndex) { + return static_cast(*reinterpret_cast(reinterpret_cast(mIndex) + 0x26)) / + static_cast(FixedPoint::GetScale()); + } + EnsureLoaded(); - return mRaceRecord->RivalBestTime(0); + rivalBestTime = reinterpret_cast(mRaceRecord->GetAttributePointer(0xF9120D73, 0)); + if (!rivalBestTime) { + rivalBestTime = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); + } + + return *rivalBestTime; } float GRaceParameters::GetChallengeGoal() const { + const float *challengeGoal; + + if (mIndex) { + short recordValue = *reinterpret_cast(reinterpret_cast(mIndex) + 0x0E); + int exponent = recordValue >> 11; + int multiplier = 1; + int mantissa; + + if (exponent < 0) { + exponent = -exponent; + } + + while (exponent > 0) { + exponent--; + multiplier *= 10; + } + + mantissa = recordValue << 21 >> 21; + if (recordValue & 0x8000) { + return static_cast(mantissa) / static_cast(multiplier); + } + + return static_cast(mantissa) * static_cast(multiplier); + } + EnsureLoaded(); - return *reinterpret_cast(mRaceRecord->GetAttributePointer(0x4E90219D, 0) ? - mRaceRecord->GetAttributePointer(0x4E90219D, 0) : - Attrib::DefaultDataArea(sizeof(float))); + challengeGoal = reinterpret_cast(mRaceRecord->GetAttributePointer(0x4E90219D, 0)); + if (!challengeGoal) { + challengeGoal = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); + } + + return *challengeGoal; } bool GRaceParameters::GetIsPursuitRace() const { From a6b5a8b18876bf637a83f0d3467a0f4b30985dd3 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 17:31:48 +0100 Subject: [PATCH 356/691] 76.92%: improve GRaceParameters::availability checks --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 0601d8558..8baad8d15 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1939,26 +1939,23 @@ unsigned int GRaceParameters::GetEventHash() const { } bool GRaceParameters::GetIsAvailable(GRace::Context context) const { - unsigned int eventHash; - if (UnlockAllThings) { return true; } - eventHash = GetEventHash(); switch (context) { case GRace::kRaceContext_QuickRace: return !GetNeverInQuickRace() && - GRaceDatabase::Get().CheckRaceScoreFlags(eventHash, GRaceDatabase::kUnlocked_QuickRace); + GRaceDatabase::Get().CheckRaceScoreFlags(GetEventHash(), GRaceDatabase::kUnlocked_QuickRace); case GRace::kRaceContext_TimeTrial: - return GRaceDatabase::Get().CheckRaceScoreFlags(eventHash, GRaceDatabase::kUnlocked_Online); + return GRaceDatabase::Get().CheckRaceScoreFlags(GetEventHash(), GRaceDatabase::kUnlocked_Online); case GRace::kRaceContext_Career: - if (!GRaceDatabase::Get().CheckRaceScoreFlags(eventHash, GRaceDatabase::kUnlocked_Career)) { + if (!GRaceDatabase::Get().CheckRaceScoreFlags(GetEventHash(), GRaceDatabase::kUnlocked_Career)) { return false; } - return !GRaceDatabase::Get().CheckRaceScoreFlags(eventHash, GRaceDatabase::kCompleted_ContextCareer); + return !GRaceDatabase::Get().CheckRaceScoreFlags(GetEventHash(), GRaceDatabase::kCompleted_ContextCareer); } return false; From d359676556ad1f7f998fa6b070d9bdf70272e827 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 17:40:31 +0100 Subject: [PATCH 357/691] 76.95%: improve GTrigger::helper flow --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 57 +++++++++++++++-------- 1 file changed, 38 insertions(+), 19 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index fee6de4d7..8009d4d7b 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -9,6 +9,7 @@ #include "Speed/Indep/Src/Gameplay/GIcon.h" #include "Speed/Indep/Src/Gameplay/GManager.h" #include "Speed/Indep/Src/Gameplay/GRaceDatabase.h" +#include "Speed/Indep/Src/World/WCollisionAssets.h" #include "Speed/Indep/Libs/Support/Utility/UMath.h" #include "Speed/Indep/Libs/Support/Utility/UStandard.h" @@ -163,12 +164,13 @@ GTrigger::~GTrigger() { } GActivity *GTrigger::GetTargetActivity() { - return reinterpret_cast(GManager::Get().FindInstance(TargetActivity(0).GetCollectionKey())); + unsigned int targetActivityKey = TargetActivity(0).GetCollectionKey(); + return reinterpret_cast(GetConnectedInstance(targetActivityKey, 0)); } void GTrigger::AddActivationReference() { mActivationReferences++; - if (mActivationReferences > 0) { + if (!mEnabled) { Enable(true); } } @@ -253,37 +255,50 @@ void GTrigger::EnableParticleEffects(bool enabled) { } void GTrigger::RefreshParticleEffects() { + ClearParticleEffects(); + CreateAllParticleEffects(); EnableParticleEffects(mEnabled); } void GTrigger::NotifyEmitterGroupDelete(void *obj, EmitterGroup *group) { GTrigger *trigger = reinterpret_cast(obj); + EmitterGroup **particleEffect = trigger->mParticleEffect; + int i = 0; - if (!trigger) { - return; - } - - for (int i = 0; i < 2; i++) { - if (trigger->mParticleEffect[i] == group) { - trigger->mParticleEffect[i] = nullptr; + do { + if (particleEffect[i] == group) { + particleEffect[i] = nullptr; } - } + i++; + } while (i <= 1); } void GTrigger::Enable(bool setEnabled) { - mEnabled = setEnabled; + if (!mTriggerEnabled) { + if (setEnabled) { + WCollisionAssets::Get().AddTrigger(&mWorldTrigger); + mTriggerEnabled = 1; + } + } else if (!setEnabled) { + WCollisionAssets::Get().RemoveTrigger(&mWorldTrigger); + mTriggerEnabled = 0; + } + if (setEnabled) { mWorldTrigger.Enable(); ShowIcon(); + CreateAllParticleEffects(); } else { mWorldTrigger.Disable(); HideIcon(); + ClearParticleEffects(); } - EnableParticleEffects(setEnabled); + + mEnabled = setEnabled; } void GTrigger::GetPosition(UMath::Vector3 &pos) { - mWorldTrigger.GetCenter(pos); + pos = *reinterpret_cast(&mWorldTrigger.fPosRadius); } void GTrigger::NotifySimableTrigger(ISimable *isim, int triggerStimulus) { @@ -319,16 +334,20 @@ void GTrigger::Reset() { } void GTrigger::ShowIcon() { - if (mIcon) { - mIcon->SetFlag(1); - mIcon->SetFlag(2); + GIcon *icon = mIcon; + + if (icon) { + icon->SetFlag(1); + icon->SetFlag(2); } } void GTrigger::HideIcon() { - if (mIcon) { - mIcon->ClearFlag(1); - mIcon->ClearFlag(2); + GIcon *icon = mIcon; + + if (icon) { + icon->ClearFlag(1); + icon->ClearFlag(2); } } From 3f35b51e9be48cd3f725175b09fde5749484ee15 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 17:41:29 +0100 Subject: [PATCH 358/691] 76.99%: improve GTrigger::GetTargetActivity --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 8009d4d7b..498a9c73c 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -164,7 +164,7 @@ GTrigger::~GTrigger() { } GActivity *GTrigger::GetTargetActivity() { - unsigned int targetActivityKey = TargetActivity(0).GetCollectionKey(); + unsigned int targetActivityKey = 0x277566F3; return reinterpret_cast(GetConnectedInstance(targetActivityKey, 0)); } @@ -266,8 +266,8 @@ void GTrigger::NotifyEmitterGroupDelete(void *obj, EmitterGroup *group) { int i = 0; do { - if (particleEffect[i] == group) { - particleEffect[i] = nullptr; + if (*(particleEffect + i) == group) { + *(particleEffect + i) = nullptr; } i++; } while (i <= 1); From a50cfcd44cf2717f192ff53d473bf5263a359a17 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 17:43:21 +0100 Subject: [PATCH 359/691] 77.09%: improve GRuntimeInstance::type list flow --- .../Indep/Src/Gameplay/GRuntimeInstance.cpp | 40 +++++++++---------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp index 9c8455320..3515dd26a 100644 --- a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp @@ -99,39 +99,37 @@ unsigned int GRuntimeInstance::MakePackedKey(unsigned int key, int index) const void GRuntimeInstance::AddToTypeList(GameplayObjType type) { GRuntimeInstance *&head = sRingListHead[type]; - if (head) { - mNext = head; - mPrev = head->mPrev; - head->mPrev->mNext = this; - head->mPrev = this; - } else { + if (!head) { mNext = this; mPrev = this; head = this; + } else { + mNext = head; + mPrev = head->mPrev; + mPrev->mNext = this; + mNext->mPrev = this; } } void GRuntimeInstance::RemoveFromTypeList() { + mNext->mPrev = mPrev; + mPrev->mNext = mNext; + for (unsigned int onType = 0; onType < kGameplayObjType_Count; onType++) { if (sRingListHead[onType] == this) { if (mNext == this) { sRingListHead[onType] = nullptr; } else { sRingListHead[onType] = mNext; - mPrev->mNext = mNext; - mNext->mPrev = mPrev; } - mNext = nullptr; mPrev = nullptr; + mNext = nullptr; return; } } - if (mNext) { - mPrev->mNext = mNext; - mNext->mPrev = mPrev; - mNext = nullptr; - mPrev = nullptr; - } + + mPrev = nullptr; + mNext = nullptr; } unsigned int GRuntimeInstance::GetConnectionCount() const { @@ -161,13 +159,13 @@ bool GRuntimeInstance::GetPosition(UMath::Vector3 &pos) { GMarker *marker = static_cast(this); pos = marker->GetPosition(); return true; - } - if (GetType() == kGameplayObjType_Trigger) { + } else if (GetType() == kGameplayObjType_Trigger) { GTrigger *trigger = static_cast(this); trigger->GetPosition(pos); return true; + } else { + return false; } - return false; } bool GRuntimeInstance::GetDirection(UMath::Vector3 &dir) { @@ -175,13 +173,13 @@ bool GRuntimeInstance::GetDirection(UMath::Vector3 &dir) { GMarker *marker = static_cast(this); dir = marker->GetDirection(); return true; - } - if (GetType() == kGameplayObjType_Trigger) { + } else if (GetType() == kGameplayObjType_Trigger) { GTrigger *trigger = static_cast(this); dir = trigger->GetDirection(); return true; + } else { + return false; } - return false; } template From a76075cee9d307f05920b33d5c643c033632eed9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 17:45:00 +0100 Subject: [PATCH 360/691] 77.11%: improve GRuntimeInstance::connection search --- .../Indep/Src/Gameplay/GRuntimeInstance.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp index 3515dd26a..fdb283da0 100644 --- a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp @@ -44,10 +44,12 @@ void GRuntimeInstance::AllocateConnectionBuffer(unsigned int numEntries) { void GRuntimeInstance::ConnectToInstance(const Attrib::Key &key, int index, GRuntimeInstance *instance) { unsigned int packedKey = MakePackedKey(key, index); - ConnectedInstance &connected = mConnected[mNumConnected]; + unsigned short connectedIndex = mNumConnected; + ConnectedInstance &connected = mConnected[connectedIndex]; + connected.mIndexedKey = packedKey; connected.mInstance = instance; - mNumConnected++; + mNumConnected = connectedIndex + 1; } void GRuntimeInstance::LockConnections() { @@ -59,18 +61,20 @@ GRuntimeInstance *GRuntimeInstance::GetConnectedInstance(const Attrib::Key &key, unsigned int targetKey = MakePackedKey(key, index); int lower = 0; int upper = mNumConnected - 1; + while (lower <= upper) { int middle = (lower + upper) / 2; ConnectedInstance &connected = mConnected[middle]; - if (connected.mIndexedKey == targetKey) { - return connected.mInstance; - } - if (connected.mIndexedKey < targetKey) { + + if (targetKey > connected.mIndexedKey) { lower = middle + 1; - } else { + } else if (targetKey < connected.mIndexedKey) { upper = middle - 1; + } else { + return connected.mInstance; } } + return nullptr; } From c398fb14a7550b04d84b22ac640f9d391ac5e675 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 17:46:22 +0100 Subject: [PATCH 361/691] 77.14%: improve runtime buffer and emitter helpers --- src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp | 13 ++++++++----- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp index fdb283da0..4e22a7caf 100644 --- a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp @@ -38,7 +38,8 @@ void GRuntimeInstance::SetConnectionBuffer(ConnectedInstance *destBuffer, unsign void GRuntimeInstance::AllocateConnectionBuffer(unsigned int numEntries) { ConnectedInstance *buffer = new ConnectedInstance[numEntries]; - SetConnectionBuffer(buffer, numEntries); + mConnected = buffer; + mNumConnected = 0; SetFlag(4); } @@ -121,11 +122,13 @@ void GRuntimeInstance::RemoveFromTypeList() { for (unsigned int onType = 0; onType < kGameplayObjType_Count; onType++) { if (sRingListHead[onType] == this) { - if (mNext == this) { - sRingListHead[onType] = nullptr; - } else { - sRingListHead[onType] = mNext; + GRuntimeInstance *newHead = nullptr; + + if (mNext != this) { + newHead = mNext; } + + sRingListHead[onType] = newHead; mPrev = nullptr; mNext = nullptr; return; diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 498a9c73c..ee7448f6c 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -263,7 +263,7 @@ void GTrigger::RefreshParticleEffects() { void GTrigger::NotifyEmitterGroupDelete(void *obj, EmitterGroup *group) { GTrigger *trigger = reinterpret_cast(obj); EmitterGroup **particleEffect = trigger->mParticleEffect; - int i = 0; + unsigned int i = 0; do { if (*(particleEffect + i) == group) { From 4c6b5150d749cf2799a6f57f7480b4aa7dfb1eb9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 17:48:20 +0100 Subject: [PATCH 362/691] 77.15%: improve GTrigger::NotifyEmitterGroupDelete --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index ee7448f6c..a3b872fd0 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -262,12 +262,11 @@ void GTrigger::RefreshParticleEffects() { void GTrigger::NotifyEmitterGroupDelete(void *obj, EmitterGroup *group) { GTrigger *trigger = reinterpret_cast(obj); - EmitterGroup **particleEffect = trigger->mParticleEffect; unsigned int i = 0; do { - if (*(particleEffect + i) == group) { - *(particleEffect + i) = nullptr; + if (trigger->mParticleEffect[i] == group) { + trigger->mParticleEffect[i] = nullptr; } i++; } while (i <= 1); From 5c587c12358a8bb5a8c1425082d7085fb676dfdb Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 17:49:59 +0100 Subject: [PATCH 363/691] skill --- .github/skills/code_style/SKILL.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/skills/code_style/SKILL.md b/.github/skills/code_style/SKILL.md index d5b2cbbb3..28db08c3c 100644 --- a/.github/skills/code_style/SKILL.md +++ b/.github/skills/code_style/SKILL.md @@ -19,6 +19,15 @@ In this repo, style cleanup must preserve decomp progress. - If a style tweak changes codegen or match status, revert it. - Extend this skill only from patterns you actually verified in the repo. +### Authenticity Over Hacks + +A 100% match is the goal, but **how** we get there matters just as much. + +- Do not use "any means necessary" to force a match if it results in unreadable or unnatural code. +- Always think about what the original code probably looked like and write it that way. +- Even if a function matches 100% binary-wise, it is not "correct" if the source is unreadable or contains logic that no human developer would have written. +- If you find a stubborn mismatch, look for a more natural C++ expression or a different architectural pattern instead of resorting to opaque hacks. + ## Quick Tooling Use the repo-local helper before doing a style pass: From a89063e4398b8cbd9d9c1048b0ed706a45e72a73 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 18:09:29 +0100 Subject: [PATCH 364/691] 77.2%: improve GManager::SaveGameplayData --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 2b9f3cfb5..c589e537d 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2115,12 +2115,20 @@ bool GManager::SaveGameplayData(unsigned char *dest, unsigned int maxSize) { SavedGameplayDataHeader *header; unsigned char *cursor; ObjectStateMap::iterator it; + GObjectIterator activityIterator(0xFFFFFFFF); + MD5 md5; + + bMemSet(dest, 0, maxSize); + + while (activityIterator.IsValid()) { + activityIterator.GetInstance()->SerializeVars(false); + activityIterator.Advance(); + } if (maxSize < 0x80) { return false; } - bMemSet(dest, 0, maxSize); header = reinterpret_cast(dest); header->mMagic = 0x656D6147; header->mVersion = 8; @@ -2168,6 +2176,10 @@ bool GManager::SaveGameplayData(unsigned char *dest, unsigned int maxSize) { bMemCpy(cursor, &mFreeRoamStartMarker, sizeof(mFreeRoamStartMarker)); bMemCpy(cursor + 0x10, &mFreeRoamFromSafeHouseStartMarker, sizeof(mFreeRoamFromSafeHouseStartMarker)); + md5.Reset(); + md5.Update(dest + 0x10, maxSize - 0x10); + md5.GetRaw(); + bMemCpy(dest, md5.GetRaw(), md5.GetRawLength()); return true; } From 0894902a1d452e6fb4ec0125d1392c52fc48ce51 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 18:11:23 +0100 Subject: [PATCH 365/691] 77.3%: improve GManager::SaveGameplayData --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index c589e537d..e73cf7eff 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2115,11 +2115,10 @@ bool GManager::SaveGameplayData(unsigned char *dest, unsigned int maxSize) { SavedGameplayDataHeader *header; unsigned char *cursor; ObjectStateMap::iterator it; - GObjectIterator activityIterator(0xFFFFFFFF); - MD5 md5; bMemSet(dest, 0, maxSize); + GObjectIterator activityIterator(0xFFFFFFFF); while (activityIterator.IsValid()) { activityIterator.GetInstance()->SerializeVars(false); activityIterator.Advance(); @@ -2176,6 +2175,7 @@ bool GManager::SaveGameplayData(unsigned char *dest, unsigned int maxSize) { bMemCpy(cursor, &mFreeRoamStartMarker, sizeof(mFreeRoamStartMarker)); bMemCpy(cursor + 0x10, &mFreeRoamFromSafeHouseStartMarker, sizeof(mFreeRoamFromSafeHouseStartMarker)); + MD5 md5; md5.Reset(); md5.Update(dest + 0x10, maxSize - 0x10); md5.GetRaw(); From 8075feb8b8fe49578ab10e31f94a2da834d82a3d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 18:14:29 +0100 Subject: [PATCH 366/691] 77.4%: improve GRaceStatus::GRaceStatus --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 85 ++++++++++---------- 1 file changed, 41 insertions(+), 44 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 8baad8d15..f7b895c12 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2493,60 +2493,57 @@ template void GRaceCustom::SetAttribute(unsigned int key, const T & GRaceStatus::GRaceStatus() : UTL::COM::Object(1), // - IVehicleCache((UTL::COM::Object *)this), // - mRacerCount(0), // - mIsLoading(false), // - mPlayMode(kPlayMode_Racing), // - mRaceContext(GRace::kRaceContext_Career), // - mRaceParms(nullptr), // - mRaceBin(nullptr), // - mBonusTime(0.0f), // - mTaskTime(0.0f), // - mSuddenDeathMode(false), // - mTimeExpiredMsgSent(false), // - mActivelyRacing(false), // - mLastSecondTickSent(0), // - mCheckpointModel(nullptr), // - mCheckpointEmitter(nullptr), // - mQueueBinChange(false), // - mNumTollbooths(0), // - mScriptWaitingForLoad(false), // - mCheckpoints(), // - mNextCheckpoint(nullptr), // - fRaceLength(0.0f), // - fFirstLapLength(0.0f), // - fSubsequentLapLength(0.0f), // - fCatchUpIntegral(0.0f), // - fCatchUpDerivative(0.0f), // - fCatchUpAdaptiveBonus(0.0f), // - fAveragePercentComplete(0.0f), // - nCatchUpSkillEntries(0), // - nCatchUpSpreadEntries(0), // - nSpeedTraps(0), // - mVehicleCacheLocked(false), // - bRaceRouteError(false), // - mTrafficDensity(0), // - mTrafficPattern(0), // - mHasBeenWon(false) { - fObj = this; - - bMemSet(mSegmentLengths, 0, sizeof(mSegmentLengths)); - bMemSet(mLapTimes, 0, sizeof(mLapTimes)); - bMemSet(mCheckTimes, 0, sizeof(mCheckTimes)); - bMemSet(aCatchUpSkillData, 0, sizeof(aCatchUpSkillData)); - bMemSet(aCatchUpSpreadData, 0, sizeof(aCatchUpSpreadData)); - bMemSet(aSpeedTraps, 0, sizeof(aSpeedTraps)); + IVehicleCache((UTL::COM::Object *)this) { + unsigned char currentBin = FEDatabase->GetCareerSettings()->GetCurrentBin(); for (int i = 0; i < 16; ++i) { mRacerInfo[i].ClearAll(); } + mRacerCount = 0; + mIsLoading = false; + mRaceContext = GRace::kRaceContext_Career; + mRaceParms = nullptr; + mCheckpointModel = nullptr; + mCheckpointEmitter = nullptr; + mActivelyRacing = false; + mNumTollbooths = 0; + mPlayMode = kPlayMode_Racing; + mRaceBin = GRaceDatabase::Get().GetBinNumber(currentBin); + mScriptWaitingForLoad = false; + mHasBeenWon = false; + fRaceLength = 0.0f; + fFirstLapLength = 0.0f; + fSubsequentLapLength = 0.0f; +#ifndef EA_BUILD_A124 + mPlayerPursuitInCooldown = false; +#endif + mBonusTime = 0.0f; + mTaskTime = 0.0f; + mSuddenDeathMode = false; + mTimeExpiredMsgSent = false; + mLastSecondTickSent = 0; + mQueueBinChange = false; +#ifndef EA_BUILD_A124 + mWarpWhenInFreeRoam = 0; +#endif + mNextCheckpoint = nullptr; + nSpeedTraps = 0; + mVehicleCacheLocked = false; + bRaceRouteError = false; + mTrafficDensity = 0; + mTrafficPattern = 0; +#ifndef EA_BUILD_A124 + mRefreshBinAfterRace = false; +#endif + fObj = this; + ClearTimes(); SyncronizeAdaptiveBonus(); MakeDefaultCatchUpData(); if (!GRaceDatabase::Get().GetStartupRace()) { - EnterBin(0); + EnterBin(currentBin); SetRoaming(); } } From c8a936a8cf019382fe44b6574367ce52a77d1dde Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 18:17:18 +0100 Subject: [PATCH 367/691] 77.5%: improve GRaceStatus::UpdateAdaptiveDifficulty --- src/Speed/Indep/Libs/Support/Utility/UMath.h | 1 + .../Src/Frontend/Database/FEDatabase.hpp | 4 ++ src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 38 ++++++++----------- 3 files changed, 21 insertions(+), 22 deletions(-) diff --git a/src/Speed/Indep/Libs/Support/Utility/UMath.h b/src/Speed/Indep/Libs/Support/Utility/UMath.h index 0e6ff1446..c6de994a5 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UMath.h +++ b/src/Speed/Indep/Libs/Support/Utility/UMath.h @@ -39,6 +39,7 @@ inline float Cosr(const float a) { void BuildRotate(Matrix4 &m, float r, float x, float y, float z); float Ceil(const float x); +float Mod(const float x, const float e); inline float Distance(const Vector3 &a, const Vector3 &b) { return VU0_v3distance(a, b); diff --git a/src/Speed/Indep/Src/Frontend/Database/FEDatabase.hpp b/src/Speed/Indep/Src/Frontend/Database/FEDatabase.hpp index 8356efa9d..5eeefdeb0 100644 --- a/src/Speed/Indep/Src/Frontend/Database/FEDatabase.hpp +++ b/src/Speed/Indep/Src/Frontend/Database/FEDatabase.hpp @@ -170,6 +170,10 @@ class CareerSettings { return CurrentBin; } + void SetAdaptiveDifficulty(float difficulty) { + AdaptiveDifficulty = static_cast(difficulty * 32767.0f); + } + private: uint32 CurrentCar; // offset 0x0, size 0x4 uint32 SpecialFlags; // offset 0x4, size 0x4 diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index f7b895c12..5b7ad2020 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3338,6 +3338,7 @@ void GRaceStatus::SyncronizeAdaptiveBonus() { } void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable *who) { + int num_racers; bool update; GRacerInfo *winning_player; GRacerInfo *winning_ai; @@ -3350,8 +3351,7 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable } difficulty = fCatchUpAdaptiveBonus; - const int num_racers = GetRacerCount(); - + num_racers = GetRacerCount(); update = false; winning_player = nullptr; winning_ai = nullptr; @@ -3375,14 +3375,14 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable } } - if (reason < kAdaptiveGainReason_2) { - float percent_ai_complete = 0.0f; - float percent_human_complete = 0.0f; - + if (static_cast(reason) < 2) { if (!who || !who->IsPlayer()) { return; } + float percent_ai_complete = 0.0f; + float percent_human_complete = 0.0f; + for (int i = 0; i < num_racers; ++i) { GRacerInfo &info = GetRacerInfo(i); @@ -3433,16 +3433,14 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable float total_points; for (int i = 0; i < num_racers; ++i) { - GRacerInfo &info = GetRacerInfo(i); - - if (!info.IsFinishedRacing()) { + if (!GetRacerInfo(i).IsFinishedRacing()) { return; } - if (!info.GetGameCharacter()) { - player_points = info.GetPointTotal(); + if (!GetRacerInfo(i).GetGameCharacter()) { + player_points = GetRacerInfo(i).GetPointTotal(); } else { - ai_points = UMath::Max(ai_points, info.GetPointTotal()); + ai_points = UMath::Max(ai_points, GetRacerInfo(i).GetPointTotal()); } } @@ -3505,19 +3503,19 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable } } } else if (eliminated_player) { - int lap_count = 1; float num_laps; float race_lose_margin; float lose_margin; if (mRaceParms) { - lap_count = bMax(1, mRaceParms->GetNumLaps()); + num_laps = static_cast(bMax(1, mRaceParms->GetNumLaps())); + } else { + num_laps = 1.0f; } - num_laps = static_cast(lap_count); lose_margin = (GetRaceLength() * (100.0f - eliminated_player->GetPctRaceComplete())) * 0.01f; race_lose_margin = GetRaceLength() / num_laps; - lose_margin -= bFloor(lose_margin / race_lose_margin) * race_lose_margin; + lose_margin = UMath::Mod(lose_margin, race_lose_margin); if (lose_margin > 0.0f) { float t = UMath::Ramp(lose_margin / 300.0f, 0.0f, 1.0f); @@ -3535,14 +3533,10 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable clamped_difficulty = bClamp(difficulty, -1.0f, 1.0f); if (FEDatabase) { - CareerSettings *career = FEDatabase->GetCareerSettings(); - - if (career) { - *reinterpret_cast(reinterpret_cast(career) + 0x10) = static_cast(clamped_difficulty * 32767.0f); - } + FEDatabase->GetCareerSettings()->SetAdaptiveDifficulty(clamped_difficulty); } - fCatchUpAdaptiveBonus = difficulty; + fCatchUpAdaptiveBonus = clamped_difficulty; } } From 0c61f6d1cb6e046e537692d6633e8b72c2073d3c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 18:19:37 +0100 Subject: [PATCH 368/691] 77.6%: improve GRaceCustom::CreateRaceActivity --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 21 +++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 5b7ad2020..0f176aa46 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2324,14 +2324,14 @@ void GRaceCustom::CreateRaceActivity() { bool bossINQuickRace; if (mReversed) { - if (!GetCanBeReversed()) { - mReversed = false; - } else { + if (GetCanBeReversed()) { GCollectionKey startReverse = mRaceRecord->racestartReverse(0); GCollectionKey finishReverse = mRaceRecord->racefinishReverse(0); mRaceRecord->Set_racestart(startReverse); mRaceRecord->Set_racefinish(finishReverse); + } else { + mReversed = false; } } @@ -2345,10 +2345,10 @@ void GRaceCustom::CreateRaceActivity() { if (mNumOpponents != static_cast(existingOpponents)) { unsigned int opponentKey[16]; unsigned int currOpponents = 0; - Attrib::Attribute attribute; if (!bossINQuickRace) { - attribute = mRaceRecord->Get(0x5839FA1A); + Attrib::Attribute attribute(mRaceRecord->Get(0x5839FA1A)); + currOpponents = attribute.GetLength(); if (currOpponents != 0) { for (unsigned int onOpp = 0; onOpp < currOpponents; onOpp++) { @@ -2370,10 +2370,13 @@ void GRaceCustom::CreateRaceActivity() { } mRaceRecord->Add(0x5839FA1A, mNumOpponents); - attribute = mRaceRecord->Get(0x5839FA1A); - if (mNumOpponents != 0) { - for (unsigned int onSet = 0; onSet < mNumOpponents; onSet++) { - attribute.Set(onSet, GCollectionKey(opponentKey[onSet])); + { + Attrib::Attribute attribute(mRaceRecord->Get(0x5839FA1A)); + + if (mNumOpponents != 0) { + for (unsigned int onSet = 0; onSet < mNumOpponents; onSet++) { + attribute.Set(onSet, GCollectionKey(opponentKey[onSet])); + } } } } From b6242773c56f3a2229a7e8ad7d3f9177292cf546 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 18:24:39 +0100 Subject: [PATCH 369/691] 77.8%: improve GRaceStatus::DetermineRaceSegmentLength --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 128 +++++++++---------- src/Speed/Indep/Src/World/WRoadElem.h | 16 ++- src/Speed/Indep/Src/World/WRoadNetwork.h | 4 +- 3 files changed, 78 insertions(+), 70 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 0f176aa46..fd672b68e 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3876,16 +3876,15 @@ void GRaceStatus::EnterSuddenDeath() { float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, const UMath::Vector4 *directions, int start, int end) { WRoadNav nav; - bVector3 delta; + UMath::Vector3 delta; float pathDistance; float segmentDistance = 0.0f; - UTL::Std::set pathSegments; char shortcutAllowed[32]; nav.SetPathType(WRoadNav::kPathChopper); - bSub(&delta, reinterpret_cast(&positions[start]), reinterpret_cast(&positions[end])); - pathDistance = bLength(delta); + VU0_v3sub(UMath::Vector4To3(positions[start]), UMath::Vector4To3(positions[end]), delta); + pathDistance = VU0_sqrt(VU0_v3lengthsquare(delta)); nav.InitAtPoint(UMath::Vector4To3(positions[start]), UMath::Vector4To3(directions[start]), true, 1.0f); if (!nav.IsValid()) { @@ -3899,16 +3898,14 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c do { float distance = static_cast(nav.GetSegment()->nLength) * 0.015259022f * (1.0f - nav.GetSegTime()); - if (distance < 0.01f) { - distance = 0.01f; - } - + distance = UMath::Max(distance, 0.01f); segmentDistance += distance; nav.IncNavPosition(distance, UMath::Vector4To3(directions[end]), 0.0f); } while (segment == nav.GetSegmentInd()); } bMemSet(shortcutAllowed, 1, sizeof(shortcutAllowed)); + UTL::Std::set pathSegments; { bool noShortcuts = true; @@ -3917,32 +3914,28 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c PathSegment pathSegment; nav.FindPathNow(&UMath::Vector4To3(positions[end]), &UMath::Vector4To3(directions[end]), shortcutAllowed); - if (nav.GetNavType() != WRoadNav::kTypePath) { - break; - } - - WRoadNetwork::Get().AddRaceSegments(&nav); - pathDistance = nav.GetPathDistanceRemaining(); + if (nav.GetNavType() == WRoadNav::kTypePath) { + WRoadNetwork::Get().AddRaceSegments(&nav); + pathDistance = nav.GetPathDistanceRemaining(); - { unsigned char shortcut = nav.FirstShortcutInPath(); noShortcuts = shortcut == 0xFF; if (!noShortcuts) { shortcutAllowed[shortcut] = 0; } - } - - pathSegment.Length = pathDistance; - for (int i = 0; i < nav.GetNumPathSegments(); ++i) { - const WRoadSegment *roadSegment = WRoadNetwork::Get().GetSegment(nav.GetPathSegment(i)); + pathSegment.Length = pathDistance; + for (int i = 0; i < nav.GetNumPathSegments(); ++i) { + const WRoadSegment *roadSegment = WRoadNetwork::Get().GetSegment(nav.GetPathSegment(i)); - if (!(roadSegment->fFlags & 1)) { - pathSegment.Roads.insert(roadSegment->fRoadID); + if (!(roadSegment->fFlags & 1)) { + pathSegment.Roads.insert(roadSegment->fRoadID); + } } + pathSegments.insert(pathSegment); + } else { + break; } - - pathSegments.insert(pathSegment); } while (!noShortcuts); pathDistance += segmentDistance; @@ -3977,9 +3970,11 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c } if (roadDiffLength > 0.0f) { + float scale_ratio = ((current->Length - previous->Length) + roadDiffLength) / roadDiffLength; + for (UTL::Std::set::iterator it = roadDiff.begin(); it != roadDiff.end(); ++it) { WRoad *road = const_cast(WRoadNetwork::Get().GetRoad(*it)); - int scale = static_cast((((current->Length - previous->Length) + roadDiffLength) / roadDiffLength) * 65536.0f); + int scale = static_cast(scale_ratio * 65536.0f); road->nScale = static_cast(scale >> 8); } @@ -3999,6 +3994,11 @@ void GRaceStatus::DetermineRaceLength() { bool raceLoops; int numSegmentLengths; int j; + WRoadNetwork &rn = WRoadNetwork::Get(); + GRaceParameters *race_parameters = mRaceParms; + WRoadNav nav; + const bool force_centre_lane = true; + const float direction_weight = 1.0f; int numSpeedTraps; nSpeedTraps = 0; @@ -4007,37 +4007,37 @@ void GRaceStatus::DetermineRaceLength() { fFirstLapLength = 0.0f; bMemSet(mSegmentLengths, 0, sizeof(mSegmentLengths)); bRaceRouteError = false; - WRoadNetwork::Get().ResolveShortcuts(); + rn.ResolveShortcuts(); - if (!mRaceParms || !mRaceParms->HasFinishLine()) { + if (!race_parameters || !race_parameters->HasFinishLine()) { return; } - WRoadNetwork::Get().SetRaceFilterValid(true); - numCheckpoints = mRaceParms->GetNumCheckpoints(); + rn.SetRaceFilterValid(true); + numCheckpoints = race_parameters->GetNumCheckpoints(); numPathPoints = numCheckpoints + 2; - mRaceParms->GetStartPosition(UMath::Vector4To3(positions[0])); + race_parameters->GetStartPosition(UMath::Vector4To3(positions[0])); positions[0].w = 0.0f; - mRaceParms->GetStartDirection(UMath::Vector4To3(directions[0])); + race_parameters->GetStartDirection(UMath::Vector4To3(directions[0])); directions[0].w = 0.0f; + race_parameters->GetFinishPosition(UMath::Vector4To3(positions[numCheckpoints + 1])); + positions[numCheckpoints + 1].w = 0.0f; + race_parameters->GetFinishDirection(UMath::Vector4To3(directions[numCheckpoints + 1])); + directions[numCheckpoints + 1].w = 0.0f; for (int i = 0; i < numCheckpoints; ++i) { - mRaceParms->GetCheckpointPosition(i, UMath::Vector4To3(positions[i + 1])); + race_parameters->GetCheckpointPosition(i, UMath::Vector4To3(positions[i + 1])); positions[i + 1].w = 0.0f; - mRaceParms->GetCheckpointDirection(i, UMath::Vector4To3(directions[i + 1])); + race_parameters->GetCheckpointDirection(i, UMath::Vector4To3(directions[i + 1])); directions[i + 1].w = 0.0f; } - mRaceParms->GetFinishPosition(UMath::Vector4To3(positions[numCheckpoints + 1])); - positions[numCheckpoints + 1].w = 0.0f; - mRaceParms->GetFinishDirection(UMath::Vector4To3(directions[numCheckpoints + 1])); - directions[numCheckpoints + 1].w = 0.0f; - - raceLoops = mRaceParms->GetIsLoopingRace(); + raceLoops = race_parameters->GetIsLoopingRace(); totalDistance = 0.0f; - numSegmentLengths = numPathPoints; if (!raceLoops) { numSegmentLengths = numPathPoints - 1; + } else { + numSegmentLengths = numPathPoints; } for (j = 0; j < numSegmentLengths; ++j) { @@ -4045,36 +4045,30 @@ void GRaceStatus::DetermineRaceLength() { totalDistance += mSegmentLengths[j]; } - if (raceLoops) { - fSubsequentLapLength = totalDistance - mSegmentLengths[0]; - fFirstLapLength = totalDistance - mSegmentLengths[numCheckpoints + 1]; - fRaceLength = fSubsequentLapLength * static_cast(mRaceParms->GetNumLaps() - 1) + fFirstLapLength; - } else { + if (!raceLoops) { fSubsequentLapLength = totalDistance; fRaceLength = totalDistance; fFirstLapLength = totalDistance; - } - - { - WRoadNav nav; - - nav.SetPathType(static_cast(6)); - nav.InitAtPoint(UMath::Vector4To3(positions[numCheckpoints + 1]), UMath::Vector4To3(directions[numCheckpoints + 1]), true, 1.0f); - if (nav.IsValid()) { - for (int i = 0; i < 100; ++i) { - int segmentNumber; - WRoadSegment *segment; - - nav.IncNavPosition(1.0f, UMath::Vector3::kZero, 0.0f); - segmentNumber = nav.GetSegmentInd(); - segment = const_cast(WRoadNetwork::Get().GetSegment(segmentNumber)); - segment->fFlags |= 0x8000; - if (nav.GetNodeInd() == 1) { - segment->fFlags |= 0x8004; - } else { - segment->fFlags = (segment->fFlags & static_cast(~4)) | 0x8000; - } - } + } else { + fSubsequentLapLength = totalDistance - mSegmentLengths[0]; + fFirstLapLength = totalDistance - mSegmentLengths[numCheckpoints + 1]; + fRaceLength = fSubsequentLapLength * static_cast(race_parameters->GetNumLaps() - 1) + fFirstLapLength; + } + + nav.SetPathType(WRoadNav::kPathRaceRoute); + nav.SetNavType(WRoadNav::kTypeDirection); + nav.SetDecisionFilter(true); + nav.InitAtPoint(UMath::Vector4To3(positions[numCheckpoints + 1]), UMath::Vector4To3(directions[numCheckpoints + 1]), force_centre_lane, direction_weight); + if (nav.IsValid()) { + for (int i = 0; i < 100; ++i) { + int segmentNumber; + WRoadSegment *segment; + + nav.IncNavPosition(1.0f, UMath::Vector3::kZero, 0.0f); + segmentNumber = nav.GetSegmentInd(); + segment = rn.GetSegmentNonConst(segmentNumber); + segment->SetInRace(true); + segment->SetRaceRouteForward(nav.GetNodeInd() == 1); } } diff --git a/src/Speed/Indep/Src/World/WRoadElem.h b/src/Speed/Indep/Src/World/WRoadElem.h index 3cdbd826f..ba8d15551 100644 --- a/src/Speed/Indep/Src/World/WRoadElem.h +++ b/src/Speed/Indep/Src/World/WRoadElem.h @@ -176,7 +176,13 @@ struct WRoadSegment { // bool RaceRouteForward() const {} - // void SetRaceRouteForward(bool forward) {} + void SetRaceRouteForward(bool forward) { + if (forward) { + fFlags = fFlags | 4; + } else { + fFlags = fFlags & static_cast(~4); + } + } // bool ShouldChopperStayLow() const {} @@ -198,7 +204,13 @@ struct WRoadSegment { return fFlags & (1 << 15); } - // void SetInRace(bool in_race) {} + void SetInRace(bool in_race) { + if (in_race) { + fFlags = fFlags | static_cast(1 << 15); + } else { + fFlags = fFlags & static_cast(~(1 << 15)); + } + } // bool IsShortcut() const {} diff --git a/src/Speed/Indep/Src/World/WRoadNetwork.h b/src/Speed/Indep/Src/World/WRoadNetwork.h index 84ee34573..d912f8363 100644 --- a/src/Speed/Indep/Src/World/WRoadNetwork.h +++ b/src/Speed/Indep/Src/World/WRoadNetwork.h @@ -72,7 +72,9 @@ class WRoadNetwork : public Debugable { // WRoad *GetRoadNonConst(int index) {} - // WRoadSegment *GetSegmentNonConst(int index) {} + WRoadSegment *GetSegmentNonConst(int index) { + return &fSegments[index]; + } void ResolveBarriers(); void ResolveShortcuts(); From ce8c12d8cccc4ac3f9ec923a76869fb3d9bfb959 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 18:34:46 +0100 Subject: [PATCH 370/691] 77.9%: improve GTrigger::CreateAllParticleEffects --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 33 +++++++++++------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index a3b872fd0..948b24f5c 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -208,27 +208,24 @@ void GTrigger::CreateAllParticleEffects() { if (effectName && *effectName) { UMath::Vector3 pos; - float flareSpacing = FlareSpacing(0); + float flareSpacing; GetPosition(pos); - if (flareSpacing <= 0.0f) { - mParticleEffect[0] = CreateParticleEffect(effectName, pos); + flareSpacing = FlareSpacing(0); + if (flareSpacing > 0.0f) { + UMath::Vector3 upVec = UMath::Vector3Make(0.0f, 1.0f, 0.0f); + UMath::Vector3 lateralVec; + UMath::Vector3 posLeft; + UMath::Vector3 posRight; + + bCross(reinterpret_cast(&lateralVec), reinterpret_cast(&upVec), reinterpret_cast(&mDirection)); + bScale(reinterpret_cast(&lateralVec), reinterpret_cast(&lateralVec), flareSpacing); + bScaleAdd(reinterpret_cast(&posLeft), reinterpret_cast(&pos), reinterpret_cast(&lateralVec), -1.0f); + bScaleAdd(reinterpret_cast(&posRight), reinterpret_cast(&pos), reinterpret_cast(&lateralVec), 1.0f); + mParticleEffect[0] = CreateParticleEffect(effectName, posLeft); + mParticleEffect[1] = CreateParticleEffect(effectName, posRight); } else { - bVector3 triggerPos(pos.x, pos.y, pos.z); - bVector3 up(0.0f, 1.0f, 0.0f); - bVector3 direction(mDirection.x, mDirection.y, mDirection.z); - bVector3 offset; - bVector3 leftOffset; - bVector3 rightOffset; - - bCross(&offset, &up, &direction); - offset *= flareSpacing; - leftOffset = bScaleAdd(triggerPos, offset, -1.0f); - rightOffset = bScaleAdd(triggerPos, offset, 1.0f); - UMath::Vector3 leftPos = UMath::Vector3Make(leftOffset.x, leftOffset.y, leftOffset.z); - UMath::Vector3 rightPos = UMath::Vector3Make(rightOffset.x, rightOffset.y, rightOffset.z); - mParticleEffect[0] = CreateParticleEffect(effectName, leftPos); - mParticleEffect[1] = CreateParticleEffect(effectName, rightPos); + mParticleEffect[0] = CreateParticleEffect(effectName, pos); } } } From 1fafa86847ce7a1e09bd45e0b54c042572e19355 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 18:36:58 +0100 Subject: [PATCH 371/691] 78.1%: improve GManager::GetRandomEmergencyStockCar --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 37 ++++++++++++----------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index e73cf7eff..32ade97a8 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1938,30 +1938,31 @@ ISimable *GManager::GetStockCar(const char *carName) { ISimable *GManager::GetRandomEmergencyStockCar() { typedef UTL::Std::vector CandidateCars; - CandidateCars candidates; - GRaceParameters *raceParms = GRaceStatus::Exists() ? GRaceStatus::Get().GetRaceParameters() : nullptr; - ISimable *stockCar = nullptr; + GRaceParameters *parms = GRaceStatus::Get().GetRaceParameters(); + CandidateCars validCars; + int numValid; - if (raceParms && raceParms->GetRaceType() != 2) { - return nullptr; - } + if (!parms || parms->GetRaceType() == 2) { + validCars.reserve(mStockCars.size()); + for (StockCarMap::iterator it = mStockCars.begin(); it != mStockCars.end(); ++it) { + IArticulatedVehicle *iarticulation; - candidates.reserve(mStockCars.size()); - for (StockCarMap::iterator it = mStockCars.begin(); it != mStockCars.end(); ++it) { - IArticulatedVehicle *iarticulation; - - if (!it->second || !it->second->QueryInterface(&iarticulation)) { - candidates.push_back(it); + if (!it->second || !it->second->QueryInterface(&iarticulation)) { + validCars.push_back(it); + } } - } - if (!candidates.empty()) { - StockCarMap::iterator it = candidates[bRandom(static_cast(candidates.size()))]; - stockCar = it->second; - mStockCars.erase(it); + numValid = static_cast(validCars.size()); + if (numValid > 0) { + int index = bRandom(numValid); + ISimable *simable = validCars[index]->second; + + mStockCars.erase(validCars[index]); + return simable; + } } - return stockCar; + return nullptr; } void GManager::ReleaseStockCar(ISimable *stockCar) { From 6c63dbadcd7a4d329ba9bdf35083ab235841c5f0 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 22:13:28 +0100 Subject: [PATCH 372/691] 78.2%: improve GMilestone::NotifyPursuitOver --- src/Speed/Indep/Src/Gameplay/GMilestone.cpp | 34 +++++++++++++-------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GMilestone.cpp b/src/Speed/Indep/Src/Gameplay/GMilestone.cpp index a842aba21..8ee3c4282 100644 --- a/src/Speed/Indep/Src/Gameplay/GMilestone.cpp +++ b/src/Speed/Indep/Src/Gameplay/GMilestone.cpp @@ -102,10 +102,6 @@ void GMilestone::NotifyPursuitOver(bool escaped) { if (mState == kState_DonePendingEscape) { if (escaped) { float currentValue = GetCurrentValue(); - Attrib::Gen::milestonetypes milestoneType(mTypeKey, 0, nullptr); - Attrib::Gen::gameplay gameplayObj(mChallengeKey, 0, nullptr); - const int *bounty; - GRaceBin *bin; if ((mFlags & kFlag_CompletionFaked) != 0) { currentValue = mRequiredValue; @@ -114,20 +110,32 @@ void GMilestone::NotifyPursuitOver(bool escaped) { mRecordedValue = currentValue; mState = kState_Awarded; - MNotifyMilestoneReached message(milestoneType.CollectionName(), currentValue); - message.Post(UCrc32(0x20D60DBF)); + { + Attrib::Gen::milestonetypes milestoneType(mTypeKey, 0, nullptr); + MNotifyMilestoneReached message(milestoneType.CollectionName(), currentValue); - bin = GRaceDatabase::Get().GetBinNumber(mBinNumber); - if (bin) { - bin->RefreshProgress(); + message.Post(UCrc32(0x20D60DBF)); } - bounty = reinterpret_cast(gameplayObj.GetAttributePointer(0x8E1904C7, 0)); - if (!bounty) { - bounty = reinterpret_cast(Attrib::DefaultDataArea(sizeof(int))); + { + GRaceBin *bin = GRaceDatabase::Get().GetBinNumber(mBinNumber); + + if (bin) { + bin->RefreshProgress(); + } + } + + { + Attrib::Gen::gameplay gameplayObj(mChallengeKey, 0, nullptr); + const int *bounty = reinterpret_cast(gameplayObj.GetAttributePointer(0x8E1904C7, 0)); + + if (!bounty) { + bounty = reinterpret_cast(Attrib::DefaultDataArea(sizeof(int))); + } + + Game_AwardPlayerBounty(*bounty); } - Game_AwardPlayerBounty(*bounty); Game_ChallengeCompleted(); } else { mState = kState_Available; From eaf81c81cdccd42d7db8e546291477ed82dce78b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 22:16:08 +0100 Subject: [PATCH 373/691] 78.2%: improve GMilestone::NotifyPursuitOver --- src/Speed/Indep/Src/Gameplay/GMilestone.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GMilestone.cpp b/src/Speed/Indep/Src/Gameplay/GMilestone.cpp index 8ee3c4282..efc1458d8 100644 --- a/src/Speed/Indep/Src/Gameplay/GMilestone.cpp +++ b/src/Speed/Indep/Src/Gameplay/GMilestone.cpp @@ -118,25 +118,21 @@ void GMilestone::NotifyPursuitOver(bool escaped) { } { + Attrib::Gen::gameplay gameplayObj(mChallengeKey, 0, nullptr); GRaceBin *bin = GRaceDatabase::Get().GetBinNumber(mBinNumber); + const int *bounty = reinterpret_cast(gameplayObj.GetAttributePointer(0x8E1904C7, 0)); if (bin) { bin->RefreshProgress(); } - } - - { - Attrib::Gen::gameplay gameplayObj(mChallengeKey, 0, nullptr); - const int *bounty = reinterpret_cast(gameplayObj.GetAttributePointer(0x8E1904C7, 0)); if (!bounty) { bounty = reinterpret_cast(Attrib::DefaultDataArea(sizeof(int))); } Game_AwardPlayerBounty(*bounty); + Game_ChallengeCompleted(); } - - Game_ChallengeCompleted(); } else { mState = kState_Available; } From ea938c275d8d154f75d263bff2b6586803d88c23 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 22:17:21 +0100 Subject: [PATCH 374/691] 78.2%: improve GMilestone::NotifyPursuitOver --- src/Speed/Indep/Src/Gameplay/GMilestone.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GMilestone.cpp b/src/Speed/Indep/Src/Gameplay/GMilestone.cpp index efc1458d8..485703a1d 100644 --- a/src/Speed/Indep/Src/Gameplay/GMilestone.cpp +++ b/src/Speed/Indep/Src/Gameplay/GMilestone.cpp @@ -120,12 +120,13 @@ void GMilestone::NotifyPursuitOver(bool escaped) { { Attrib::Gen::gameplay gameplayObj(mChallengeKey, 0, nullptr); GRaceBin *bin = GRaceDatabase::Get().GetBinNumber(mBinNumber); - const int *bounty = reinterpret_cast(gameplayObj.GetAttributePointer(0x8E1904C7, 0)); if (bin) { bin->RefreshProgress(); } + const int *bounty = reinterpret_cast(gameplayObj.GetAttributePointer(0x8E1904C7, 0)); + if (!bounty) { bounty = reinterpret_cast(Attrib::DefaultDataArea(sizeof(int))); } From cff852b7748223d448e7f766ebf870398e9eaa1c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 22:20:58 +0100 Subject: [PATCH 375/691] 78.3%: improve GMarker::GMarker --- src/Speed/Indep/Src/Gameplay/GMarker.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GMarker.cpp b/src/Speed/Indep/Src/Gameplay/GMarker.cpp index 8e5403293..15878be5c 100644 --- a/src/Speed/Indep/Src/Gameplay/GMarker.cpp +++ b/src/Speed/Indep/Src/Gameplay/GMarker.cpp @@ -6,13 +6,18 @@ GMarker::GMarker(const Attrib::Key &markerKey) : GRuntimeInstance(markerKey, kGameplayObjType_Marker) { const UMath::Vector3 *pos = reinterpret_cast(GetAttributePointer(0x9F743A0E, 0)); UMath::Matrix4 rotMat = UMath::Matrix4::kIdentity; - UMath::Vector3 initialVec = UMath::Vector3Make(0.0f, 0.0f, 1.0f); - const float *rotation = reinterpret_cast(GetAttributePointer(0x5A6A57C6, 0)); + UMath::Vector3 initialVec; + const float *rotation; + + initialVec.x = 0.0f; + initialVec.y = 0.0f; + initialVec.z = 1.0f; if (!pos) { pos = reinterpret_cast(Attrib::DefaultDataArea(sizeof(UMath::Vector3))); } + rotation = reinterpret_cast(GetAttributePointer(0x5A6A57C6, 0)); if (!rotation) { rotation = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); } @@ -21,9 +26,11 @@ GMarker::GMarker(const Attrib::Key &markerKey) VU0_MATRIX3x4_vect3mult(initialVec, rotMat, initialVec); mPosition.x = -pos->y; - mPosition.y = pos->z; mPosition.z = pos->x; - mDirection = initialVec; + mPosition.y = pos->z; + mDirection.x = initialVec.x; + mDirection.z = initialVec.z; + mDirection.y = initialVec.y; } GMarker::~GMarker() {} From be110e34d533e022b311739e43ef7b0b7b77448b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 22:24:21 +0100 Subject: [PATCH 376/691] 78.4%: improve GRaceDatabase::CollectionIsRaceActivity --- .../Indep/Src/Gameplay/GRaceDatabase.cpp | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index 793774f41..69f2d4c10 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -318,7 +318,28 @@ GRaceBin *GRaceDatabase::GetBin(unsigned int index) { } bool GRaceDatabase::CollectionIsRaceActivity(Attrib::Gen::gameplay &collection) { - return collection.GetAttributePointer(0xA78403EC, 0) != nullptr; + Attrib::Gen::gameplay activity(0xD1E66B67, 0, nullptr); + const int *isObject = reinterpret_cast(collection.GetAttributePointer(0x3E9156CA, 0)); + + if (!isObject) { + isObject = reinterpret_cast(Attrib::DefaultDataArea(sizeof(int))); + } + + if (*isObject == 0) { + Attrib::Key parentKey = collection.GetParent(); + + while (parentKey != 0) { + Attrib::Gen::gameplay parent(parentKey, 0, nullptr); + + if (parent.GetCollection() == activity.GetCollection()) { + return true; + } + + parentKey = parent.GetParent(); + } + } + + return false; } bool GRaceDatabase::CollectionIsRaceBin(Attrib::Gen::gameplay &collection) { From 066d70a4d43750d3013ad4663d1927cca7faae04 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 22:28:29 +0100 Subject: [PATCH 377/691] 78.5%: match GRaceDatabase::CollectionIsRaceActivity --- src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index 69f2d4c10..395cd24d2 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -325,18 +325,20 @@ bool GRaceDatabase::CollectionIsRaceActivity(Attrib::Gen::gameplay &collection) isObject = reinterpret_cast(Attrib::DefaultDataArea(sizeof(int))); } - if (*isObject == 0) { - Attrib::Key parentKey = collection.GetParent(); + if (*isObject != 0) { + return false; + } - while (parentKey != 0) { - Attrib::Gen::gameplay parent(parentKey, 0, nullptr); + Attrib::Key parentKey = collection.GetParent(); - if (parent.GetCollection() == activity.GetCollection()) { - return true; - } + while (parentKey != 0) { + Attrib::Gen::gameplay parent(parentKey, 0, nullptr); - parentKey = parent.GetParent(); + if (parent.GetCollection() == activity.GetCollection()) { + return true; } + + parentKey = parent.GetParent(); } return false; From 6c3d4734ccb34311bc7b88134b934eb1c72f4fca Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 22:43:38 +0100 Subject: [PATCH 378/691] 78.6%: improve GRaceDatabase::CollectionIsRaceBin --- src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index 395cd24d2..32bbb4d51 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -345,7 +345,12 @@ bool GRaceDatabase::CollectionIsRaceActivity(Attrib::Gen::gameplay &collection) } bool GRaceDatabase::CollectionIsRaceBin(Attrib::Gen::gameplay &collection) { - return collection.GetAttributePointer(0x6CE23062, 0) != nullptr; + Attrib::Key parentKey = collection.GetParent(); + Attrib::Gen::gameplay bin(0x022EB0EE, 0, nullptr); + Attrib::Gen::gameplay parent(parentKey, 0, nullptr); + bool isRaceBin = parent.GetCollection() == bin.GetCollection(); + + return isRaceBin; } unsigned int GRaceDatabase::StoreBinList(GRaceBin *dest) { From 5b4b7e8d9c0753a4906ae3f6b01342baf2cdee0d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 22:46:18 +0100 Subject: [PATCH 379/691] 78.6%: improve GRuntimeInstance::ConnectToInstance --- src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp index 4e22a7caf..cd1ff4920 100644 --- a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp @@ -46,11 +46,11 @@ void GRuntimeInstance::AllocateConnectionBuffer(unsigned int numEntries) { void GRuntimeInstance::ConnectToInstance(const Attrib::Key &key, int index, GRuntimeInstance *instance) { unsigned int packedKey = MakePackedKey(key, index); unsigned short connectedIndex = mNumConnected; - ConnectedInstance &connected = mConnected[connectedIndex]; + ConnectedInstance *connected = mConnected; - connected.mIndexedKey = packedKey; - connected.mInstance = instance; mNumConnected = connectedIndex + 1; + connected[connectedIndex].mIndexedKey = packedKey; + connected[connectedIndex].mInstance = instance; } void GRuntimeInstance::LockConnections() { From a49628fc856af51ba2139194af8e0ee3d15ef5d1 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 22:50:46 +0100 Subject: [PATCH 380/691] 78.6%: improve GRuntimeInstance::DisconnectInstances --- src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp index cd1ff4920..b0d92c95f 100644 --- a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp @@ -85,15 +85,15 @@ void GRuntimeInstance::ResetConnections() { } void GRuntimeInstance::DisconnectInstances() { - if (GetFlag(4)) { + if ((mFlags & 4) != 0) { if (mConnected) { delete[] mConnected; } - mFlags = mFlags & ~4; + mFlags &= ~4; } mNumConnected = 0; mConnected = nullptr; - mFlags = mFlags & ~2; + mFlags &= ~2; } unsigned int GRuntimeInstance::MakePackedKey(unsigned int key, int index) const { From 1794974feb438451361e29feb3e686b0e7e8a332 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 22:55:43 +0100 Subject: [PATCH 381/691] 78.6%: match GRuntimeInstance::GetConnectedInstance / GCollectionKey::GCollectionKey --- src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp index b0d92c95f..b2f68e864 100644 --- a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp @@ -64,7 +64,7 @@ GRuntimeInstance *GRuntimeInstance::GetConnectedInstance(const Attrib::Key &key, int upper = mNumConnected - 1; while (lower <= upper) { - int middle = (lower + upper) / 2; + int middle = (lower + upper) >> 1; ConnectedInstance &connected = mConnected[middle]; if (targetKey > connected.mIndexedKey) { @@ -235,7 +235,13 @@ template GCharacter *GRuntimeInstance::FindObject(unsigned int key); template GMarker *GRuntimeInstance::FindObject(unsigned int key); template GTrigger *GRuntimeInstance::FindObject(unsigned int key); -GCollectionKey::GCollectionKey(GRuntimeInstance *inst) : mCollectionKey(inst->GetCollection()) {} +GCollectionKey::GCollectionKey(GRuntimeInstance *inst) { + if (inst) { + mCollectionKey = inst->GetCollection(); + } else { + mCollectionKey = 0; + } +} GCollectionKey::operator GRuntimeInstance *() const { return GManager::Get().FindInstance(mCollectionKey); From a6054523f611a1adcf420ebee6bf9bccd2d9f966 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 23:10:04 +0100 Subject: [PATCH 382/691] 78.6%: improve GRacerInfo::CreateVehicle --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index fd672b68e..4792509f9 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -326,7 +326,7 @@ IVehicle *GRacerInfo::CreateVehicle(unsigned int default_key) { const char *presetRide; FECustomizationRecord customizations; unsigned int vehicle_key; - Physics::Info::Performance ai_performance(1.0f, 0.0f, 0.0f); + Physics::Info::Performance ai_performance(1.0f, 1.0f, 1.0f); IVehicleCache *cache; UMath::Vector3 direction = {0.0f, 0.0f, 1.0f}; ISimable *result; From 4d51ec7b43ca7005647b2062249050a2e22de116 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 23:11:52 +0100 Subject: [PATCH 383/691] 78.7%: improve GMarker::GMarker --- src/Speed/Indep/Src/Gameplay/GMarker.cpp | 30 +++++------------------- 1 file changed, 6 insertions(+), 24 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GMarker.cpp b/src/Speed/Indep/Src/Gameplay/GMarker.cpp index 15878be5c..9ccee0e43 100644 --- a/src/Speed/Indep/Src/Gameplay/GMarker.cpp +++ b/src/Speed/Indep/Src/Gameplay/GMarker.cpp @@ -4,33 +4,15 @@ GMarker::GMarker(const Attrib::Key &markerKey) : GRuntimeInstance(markerKey, kGameplayObjType_Marker) { - const UMath::Vector3 *pos = reinterpret_cast(GetAttributePointer(0x9F743A0E, 0)); + const UMath::Vector3 &pos = Position(0); UMath::Matrix4 rotMat = UMath::Matrix4::kIdentity; - UMath::Vector3 initialVec; - const float *rotation; + UMath::Vector3 initialVec = UMath::Vector3Make(0.0f, 0.0f, 1.0f); - initialVec.x = 0.0f; - initialVec.y = 0.0f; - initialVec.z = 1.0f; + UMath::MultYRot(rotMat, -Rotation(0) * 0.0027777778f, rotMat); + UMath::Rotate(initialVec, rotMat, initialVec); - if (!pos) { - pos = reinterpret_cast(Attrib::DefaultDataArea(sizeof(UMath::Vector3))); - } - - rotation = reinterpret_cast(GetAttributePointer(0x5A6A57C6, 0)); - if (!rotation) { - rotation = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); - } - - MATRIX4_multyrot(&rotMat, -*rotation * 0.0027777778f, &rotMat); - VU0_MATRIX3x4_vect3mult(initialVec, rotMat, initialVec); - - mPosition.x = -pos->y; - mPosition.z = pos->x; - mPosition.y = pos->z; - mDirection.x = initialVec.x; - mDirection.z = initialVec.z; - mDirection.y = initialVec.y; + mPosition = UMath::Vector3Make(-pos.y, pos.z, pos.x); + mDirection = initialVec; } GMarker::~GMarker() {} From db72dee4bc3bef38cd5f4c79cb700b6d03895edb Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 23:13:59 +0100 Subject: [PATCH 384/691] 78.7%: improve GRaceStatus::DetermineRaceLength --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 45 +++++++++----------- 1 file changed, 20 insertions(+), 25 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 4792509f9..089474944 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3989,17 +3989,12 @@ void GRaceStatus::DetermineRaceLength() { UMath::Vector4 positions[18]; UMath::Vector4 directions[18]; int numCheckpoints; - int numPathPoints; float totalDistance; bool raceLoops; int numSegmentLengths; int j; WRoadNetwork &rn = WRoadNetwork::Get(); GRaceParameters *race_parameters = mRaceParms; - WRoadNav nav; - const bool force_centre_lane = true; - const float direction_weight = 1.0f; - int numSpeedTraps; nSpeedTraps = 0; fSubsequentLapLength = 0.0f; @@ -4015,7 +4010,6 @@ void GRaceStatus::DetermineRaceLength() { rn.SetRaceFilterValid(true); numCheckpoints = race_parameters->GetNumCheckpoints(); - numPathPoints = numCheckpoints + 2; race_parameters->GetStartPosition(UMath::Vector4To3(positions[0])); positions[0].w = 0.0f; race_parameters->GetStartDirection(UMath::Vector4To3(directions[0])); @@ -4034,10 +4028,9 @@ void GRaceStatus::DetermineRaceLength() { raceLoops = race_parameters->GetIsLoopingRace(); totalDistance = 0.0f; - if (!raceLoops) { - numSegmentLengths = numPathPoints - 1; - } else { - numSegmentLengths = numPathPoints; + numSegmentLengths = numCheckpoints + 1; + if (raceLoops) { + numSegmentLengths = numCheckpoints + 2; } for (j = 0; j < numSegmentLengths; ++j) { @@ -4055,27 +4048,29 @@ void GRaceStatus::DetermineRaceLength() { fRaceLength = fSubsequentLapLength * static_cast(race_parameters->GetNumLaps() - 1) + fFirstLapLength; } - nav.SetPathType(WRoadNav::kPathRaceRoute); - nav.SetNavType(WRoadNav::kTypeDirection); - nav.SetDecisionFilter(true); - nav.InitAtPoint(UMath::Vector4To3(positions[numCheckpoints + 1]), UMath::Vector4To3(directions[numCheckpoints + 1]), force_centre_lane, direction_weight); - if (nav.IsValid()) { - for (int i = 0; i < 100; ++i) { - int segmentNumber; - WRoadSegment *segment; - - nav.IncNavPosition(1.0f, UMath::Vector3::kZero, 0.0f); - segmentNumber = nav.GetSegmentInd(); - segment = rn.GetSegmentNonConst(segmentNumber); - segment->SetInRace(true); - segment->SetRaceRouteForward(nav.GetNodeInd() == 1); + { + WRoadNav nav; + + nav.SetPathType(WRoadNav::kPathRaceRoute); + nav.InitAtPoint(UMath::Vector4To3(positions[numCheckpoints + 1]), UMath::Vector4To3(directions[numCheckpoints + 1]), true, 1.0f); + if (nav.IsValid()) { + for (int i = 0; i < 100; ++i) { + int segmentNumber; + WRoadSegment *segment; + + nav.IncNavPosition(1.0f, UMath::Vector3::kZero, 0.0f); + segmentNumber = nav.GetSegmentInd(); + segment = rn.GetSegmentNonConst(segmentNumber); + segment->SetInRace(true); + segment->SetRaceRouteForward(nav.GetNodeInd() == 1); + } } } { GObjectIterator iter(0x100); + int numSpeedTraps = 0; - numSpeedTraps = 0; while (iter.IsValid()) { GTrigger *trigger = iter.GetInstance(); From b0cdc114c5f2d9cc5ba4215689980c33ea735902 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 23:15:51 +0100 Subject: [PATCH 385/691] 78.7%: improve GMarker::GMarker --- src/Speed/Indep/Src/Gameplay/GMarker.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GMarker.cpp b/src/Speed/Indep/Src/Gameplay/GMarker.cpp index 9ccee0e43..051dd3a76 100644 --- a/src/Speed/Indep/Src/Gameplay/GMarker.cpp +++ b/src/Speed/Indep/Src/Gameplay/GMarker.cpp @@ -8,8 +8,8 @@ GMarker::GMarker(const Attrib::Key &markerKey) UMath::Matrix4 rotMat = UMath::Matrix4::kIdentity; UMath::Vector3 initialVec = UMath::Vector3Make(0.0f, 0.0f, 1.0f); - UMath::MultYRot(rotMat, -Rotation(0) * 0.0027777778f, rotMat); - UMath::Rotate(initialVec, rotMat, initialVec); + MATRIX4_multyrot(&rotMat, -Rotation(0) * 0.0027777778f, &rotMat); + VU0_MATRIX3x4_vect3mult(initialVec, rotMat, initialVec); mPosition = UMath::Vector3Make(-pos.y, pos.z, pos.x); mDirection = initialVec; From 1cf2cdd32f844fd6ed3a7a46a4b1fc71d7f141ce Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 23:18:58 +0100 Subject: [PATCH 386/691] 78.8%: improve GTrigger::NotifySimableTrigger --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 948b24f5c..961c690d5 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -302,22 +302,24 @@ void GTrigger::NotifySimableTrigger(ISimable *isim, int triggerStimulus) { return; } + bool triggerExited = triggerStimulus == 2; + bool triggerInside = triggerStimulus == 1; bool wasInside = IsInside(isim); - if (triggerStimulus == 2) { + if (triggerExited) { MarkAsOutside(isim); if (FireOnExit(0)) { - MTriggerExit msg(GCollectionKey(this), isim->GetOwnerHandle()); + MTriggerExit msg(GCollectionKey(this), isim->GetInstanceHandle()); msg.Post(UCrc32(0x20D60DBF)); } } - if (triggerStimulus == 1) { + if (triggerInside) { if (!wasInside) { MarkAsInside(isim); - MTriggerEnter enterMsg(GCollectionKey(this), isim->GetOwnerHandle()); + MTriggerEnter enterMsg(GCollectionKey(this), isim->GetInstanceHandle()); enterMsg.Post(UCrc32(0x20D60DBF)); } - MTriggerInside insideMsg(GCollectionKey(this), isim->GetOwnerHandle()); + MTriggerInside insideMsg(GCollectionKey(this), isim->GetInstanceHandle()); insideMsg.Post(UCrc32(0x20D60DBF)); } } From 4da2e95767c10087f1456e31300d2cc657c46153 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 23:19:54 +0100 Subject: [PATCH 387/691] 78.9%: improve GTrigger::NotifySimableTrigger --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 961c690d5..ea47727f0 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -308,19 +308,22 @@ void GTrigger::NotifySimableTrigger(ISimable *isim, int triggerStimulus) { if (triggerExited) { MarkAsOutside(isim); if (FireOnExit(0)) { + UCrc32 triggerMessage(0x20D60DBF); MTriggerExit msg(GCollectionKey(this), isim->GetInstanceHandle()); - msg.Post(UCrc32(0x20D60DBF)); + msg.Post(triggerMessage); } } if (triggerInside) { if (!wasInside) { MarkAsInside(isim); + UCrc32 triggerMessage(0x20D60DBF); MTriggerEnter enterMsg(GCollectionKey(this), isim->GetInstanceHandle()); - enterMsg.Post(UCrc32(0x20D60DBF)); + enterMsg.Post(triggerMessage); } + UCrc32 triggerMessage(0x20D60DBF); MTriggerInside insideMsg(GCollectionKey(this), isim->GetInstanceHandle()); - insideMsg.Post(UCrc32(0x20D60DBF)); + insideMsg.Post(triggerMessage); } } From 95a9ccec8478f2538faab9bfacfb164071036502 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 23:22:04 +0100 Subject: [PATCH 388/691] 78.9%: improve GRaceCustom::CreateRaceActivity --- src/Speed/Indep/Src/Gameplay/GActivity.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GActivity.h b/src/Speed/Indep/Src/Gameplay/GActivity.h index aafe9fefa..0ee052201 100644 --- a/src/Speed/Indep/Src/Gameplay/GActivity.h +++ b/src/Speed/Indep/Src/Gameplay/GActivity.h @@ -7,6 +7,7 @@ #include "GHandler.h" #include "GState.h" +#include "Speed/Indep/Libs/Support/Utility/FastMem.h" #include "Speed/Indep/Libs/Support/Utility/UCrc.h" #include "Speed/Indep/Libs/Support/Utility/UStandard.h" @@ -28,6 +29,16 @@ class GActivity : public GRuntimeInstance { unsigned short mTableBytes; // offset 0x6, size 0x2 }; + void *operator new(std::size_t size) { + return gFastMem.Alloc(size, nullptr); + } + + void operator delete(void *mem, std::size_t size) { + if (mem) { + gFastMem.Free(mem, size, nullptr); + } + } + GActivity(const Attrib::Key &activityKey); ~GActivity() override; From fbc1337a26ce962648cd038919c8705d3180b412 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 23:41:41 +0100 Subject: [PATCH 389/691] 79.1%: improve GTrigger::GTrigger --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index ea47727f0..7c9ca6587 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -82,9 +82,8 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) reinterpret_cast(mTriggerEventData)[1] = GetCollection(); if (IsDerivedFromTemplate(0xF05931AB)) { - GRaceParameters *parms = GRaceDatabase::Get().GetRaceFromKey(TargetActivity(0).GetCollectionKey()); - SetFlag(0x200); + GRaceParameters *parms = GRaceDatabase::Get().GetRaceFromKey(TargetActivity(0).GetCollectionKey()); if (parms) { if (parms->GetIsBossRace()) { iconType = GIcon::kType_RaceRival; @@ -149,9 +148,16 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) mIcon = GManager::Get().AllocIcon(iconType, posSwizzled, 0.0f, false); } - if (showIconBasedOnBin && mIcon && FEDatabase && FEDatabase->GetCareerSettings()->GetCurrentBin() <= BinIndex(0)) { - mIcon->Show(); - mIcon->ShowOnMap(); + if (showIconBasedOnBin && mIcon) { + int binIndex = BinIndex(0); + + if (binIndex > 0 && FEDatabase && FEDatabase->GetCareerSettings()->GetCurrentBin() <= binIndex) { + mIcon->SetFlag(1); + if (mIcon->GetIsEnabled()) { + mIcon->Enable(); + } + mIcon->SetFlag(2); + } } } From a897f010334925baa0ee9b5130b992f4e7a6116f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 23:51:53 +0100 Subject: [PATCH 390/691] 79.0%: match GRaceStatus::AwardBonusTime --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 089474944..2b12c91ae 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3268,6 +3268,13 @@ void GRaceStatus::AddAvailableEventToMap(GRuntimeInstance *trigger, GRuntimeInst void GRaceStatus::AddSpeedTrapToMap(GRuntimeInstance *trigger) {} void GRaceStatus::AwardBonusTime(float seconds) { + for (int i = 0; i < mRacerCount; ++i) { + GRacerInfo &info = mRacerInfo[i]; + + info.mTimeRemainingToBooth[info.mTollboothsCrossed] = GRaceStatus::Get().GetRaceTimeRemaining(); + info.mTollboothsCrossed++; + } + mBonusTime += seconds; } From 062e19fade517368c41e0083a775f8a99d801d83 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 23:57:07 +0100 Subject: [PATCH 391/691] 79.0%: match GTrigger::MarkAsInside --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 7c9ca6587..317b5657a 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -359,7 +359,7 @@ void GTrigger::HideIcon() { } void GTrigger::MarkAsInside(ISimable *simable) { - if (!IsInside(simable)) { + if (std::find(mSimObjInside.begin(), mSimObjInside.end(), simable) == mSimObjInside.end()) { mSimObjInside.push_back(simable); } } From f11a516bb5a60999c484711e46a76138e7ae5796 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 23:58:16 +0100 Subject: [PATCH 392/691] 79.1%: improve GTrigger::Enable --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 317b5657a..4def565d8 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -288,11 +288,9 @@ void GTrigger::Enable(bool setEnabled) { if (setEnabled) { mWorldTrigger.Enable(); - ShowIcon(); CreateAllParticleEffects(); } else { mWorldTrigger.Disable(); - HideIcon(); ClearParticleEffects(); } From 1102463744e8776f7c8736bbe7fc37aa4a3af3d1 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Thu, 19 Mar 2026 23:59:51 +0100 Subject: [PATCH 393/691] 79.1%: improve GTrigger::Enable --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 4def565d8..519639946 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -286,11 +286,25 @@ void GTrigger::Enable(bool setEnabled) { mTriggerEnabled = 0; } + { + unsigned char *triggerBytes = reinterpret_cast(&mWorldTrigger); + unsigned int word = *reinterpret_cast(triggerBytes + 0x10); + unsigned int flags = static_cast(triggerBytes[0x13]) | + (static_cast(triggerBytes[0x12]) << 8) | + (static_cast(triggerBytes[0x11]) << 16); + + if (setEnabled) { + flags |= 1; + } else { + flags &= 0xFFFFFE; + } + + *reinterpret_cast(triggerBytes + 0x10) = (word & 0xFF000000) | flags; + } + if (setEnabled) { - mWorldTrigger.Enable(); CreateAllParticleEffects(); } else { - mWorldTrigger.Disable(); ClearParticleEffects(); } From bde8c8029d519a01ba45111a64afa15ec3eabf29 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 12:54:33 +0100 Subject: [PATCH 394/691] 79.1%: improve GTrigger::Enable --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 519639946..a4e6f7c23 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -287,16 +287,19 @@ void GTrigger::Enable(bool setEnabled) { } { - unsigned char *triggerBytes = reinterpret_cast(&mWorldTrigger); + WTrigger *trigger = &mWorldTrigger; + unsigned char *triggerBytes = reinterpret_cast(trigger); unsigned int word = *reinterpret_cast(triggerBytes + 0x10); - unsigned int flags = static_cast(triggerBytes[0x13]) | - (static_cast(triggerBytes[0x12]) << 8) | - (static_cast(triggerBytes[0x11]) << 16); + unsigned int flags; if (setEnabled) { - flags |= 1; + flags = static_cast(triggerBytes[0x13]) | + (static_cast(triggerBytes[0x12]) << 8) | + (static_cast(triggerBytes[0x11]) << 16) | 1; } else { - flags &= 0xFFFFFE; + flags = (static_cast(triggerBytes[0x13]) & 0xFFFFFE) | + (static_cast(triggerBytes[0x12]) << 8) | + (static_cast(triggerBytes[0x11]) << 16); } *reinterpret_cast(triggerBytes + 0x10) = (word & 0xFF000000) | flags; From e4066db066aeb931c74db3ccf1b4bf85e6b9a98a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 13:07:09 +0100 Subject: [PATCH 395/691] 79.1%: improve GRaceStatus::DetermineRaceLength --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 52 +++++++++----------- 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 2b12c91ae..55fd535cd 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -4055,42 +4055,38 @@ void GRaceStatus::DetermineRaceLength() { fRaceLength = fSubsequentLapLength * static_cast(race_parameters->GetNumLaps() - 1) + fFirstLapLength; } - { - WRoadNav nav; - - nav.SetPathType(WRoadNav::kPathRaceRoute); - nav.InitAtPoint(UMath::Vector4To3(positions[numCheckpoints + 1]), UMath::Vector4To3(directions[numCheckpoints + 1]), true, 1.0f); - if (nav.IsValid()) { - for (int i = 0; i < 100; ++i) { - int segmentNumber; - WRoadSegment *segment; - - nav.IncNavPosition(1.0f, UMath::Vector3::kZero, 0.0f); - segmentNumber = nav.GetSegmentInd(); - segment = rn.GetSegmentNonConst(segmentNumber); - segment->SetInRace(true); - segment->SetRaceRouteForward(nav.GetNodeInd() == 1); - } + WRoadNav nav; + + nav.SetPathType(static_cast(6)); + nav.InitAtPoint(UMath::Vector4To3(positions[numCheckpoints + 1]), UMath::Vector4To3(directions[numCheckpoints + 1]), true, 1.0f); + if (nav.IsValid()) { + for (int i = 0; i < 100; ++i) { + int segmentNumber; + WRoadSegment *segment; + + nav.IncNavPosition(1.0f, UMath::Vector3::kZero, 0.0f); + segmentNumber = nav.GetSegmentInd(); + segment = rn.GetSegmentNonConst(segmentNumber); + segment->SetInRace(true); + segment->SetRaceRouteForward(nav.GetNodeInd() == 1); } } - { - GObjectIterator iter(0x100); - int numSpeedTraps = 0; - - while (iter.IsValid()) { - GTrigger *trigger = iter.GetInstance(); + GObjectIterator iter(0x100); + int numSpeedTraps = 0; - if (!trigger->OpenWorldSpeedTrap(0)) { - aSpeedTraps[numSpeedTraps] = trigger; - ++numSpeedTraps; - } + while (iter.IsValid()) { + GTrigger *trigger = iter.GetInstance(); - iter.Advance(); + if (!trigger->OpenWorldSpeedTrap(0)) { + aSpeedTraps[numSpeedTraps] = trigger; + ++numSpeedTraps; } - nSpeedTraps = numSpeedTraps; + iter.Advance(); } + + nSpeedTraps = numSpeedTraps; } template void GRaceCustom::SetAttribute(unsigned int key, const int &value, unsigned int index); From b7241d3c41799b8dfb7d6e27cbf859576a833852 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 13:09:07 +0100 Subject: [PATCH 396/691] 79.1%: improve GRaceStatus::DetermineRaceLength --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 139 ++++++++++--------- 1 file changed, 73 insertions(+), 66 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 55fd535cd..e23c0270d 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3993,13 +3993,6 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c } void GRaceStatus::DetermineRaceLength() { - UMath::Vector4 positions[18]; - UMath::Vector4 directions[18]; - int numCheckpoints; - float totalDistance; - bool raceLoops; - int numSegmentLengths; - int j; WRoadNetwork &rn = WRoadNetwork::Get(); GRaceParameters *race_parameters = mRaceParms; @@ -4015,78 +4008,92 @@ void GRaceStatus::DetermineRaceLength() { return; } - rn.SetRaceFilterValid(true); - numCheckpoints = race_parameters->GetNumCheckpoints(); - race_parameters->GetStartPosition(UMath::Vector4To3(positions[0])); - positions[0].w = 0.0f; - race_parameters->GetStartDirection(UMath::Vector4To3(directions[0])); - directions[0].w = 0.0f; - race_parameters->GetFinishPosition(UMath::Vector4To3(positions[numCheckpoints + 1])); - positions[numCheckpoints + 1].w = 0.0f; - race_parameters->GetFinishDirection(UMath::Vector4To3(directions[numCheckpoints + 1])); - directions[numCheckpoints + 1].w = 0.0f; - - for (int i = 0; i < numCheckpoints; ++i) { - race_parameters->GetCheckpointPosition(i, UMath::Vector4To3(positions[i + 1])); - positions[i + 1].w = 0.0f; - race_parameters->GetCheckpointDirection(i, UMath::Vector4To3(directions[i + 1])); - directions[i + 1].w = 0.0f; - } + { + int numCheckpoints; + int numPathPoints; + UMath::Vector4 positions[18]; + UMath::Vector4 directions[18]; + float totalDistance; + bool raceLoops; + int numSegmentLengths; + int j; + const bool forceCentreLane = true; + const float directionWeight = 1.0f; + + rn.SetRaceFilterValid(true); + numCheckpoints = race_parameters->GetNumCheckpoints(); + numPathPoints = numCheckpoints + 2; + race_parameters->GetStartPosition(UMath::Vector4To3(positions[0])); + positions[0].w = 0.0f; + race_parameters->GetStartDirection(UMath::Vector4To3(directions[0])); + directions[0].w = 0.0f; + race_parameters->GetFinishPosition(UMath::Vector4To3(positions[numPathPoints - 1])); + positions[numPathPoints - 1].w = 0.0f; + race_parameters->GetFinishDirection(UMath::Vector4To3(directions[numPathPoints - 1])); + directions[numPathPoints - 1].w = 0.0f; + + for (int i = 0; i < numCheckpoints; ++i) { + race_parameters->GetCheckpointPosition(i, UMath::Vector4To3(positions[i + 1])); + positions[i + 1].w = 0.0f; + race_parameters->GetCheckpointDirection(i, UMath::Vector4To3(directions[i + 1])); + directions[i + 1].w = 0.0f; + } - raceLoops = race_parameters->GetIsLoopingRace(); - totalDistance = 0.0f; - numSegmentLengths = numCheckpoints + 1; - if (raceLoops) { - numSegmentLengths = numCheckpoints + 2; - } + totalDistance = 0.0f; + raceLoops = race_parameters->GetIsLoopingRace(); + numSegmentLengths = numPathPoints - 1; + if (raceLoops) { + numSegmentLengths = numPathPoints; + } - for (j = 0; j < numSegmentLengths; ++j) { - mSegmentLengths[j] = DetermineRaceSegmentLength(positions, directions, j, (j % (numCheckpoints + 1)) + 1); - totalDistance += mSegmentLengths[j]; - } + for (j = 0; j < numSegmentLengths; ++j) { + mSegmentLengths[j] = DetermineRaceSegmentLength(positions, directions, j, (j % (numPathPoints - 1)) + 1); + totalDistance += mSegmentLengths[j]; + } - if (!raceLoops) { - fSubsequentLapLength = totalDistance; - fRaceLength = totalDistance; - fFirstLapLength = totalDistance; - } else { - fSubsequentLapLength = totalDistance - mSegmentLengths[0]; - fFirstLapLength = totalDistance - mSegmentLengths[numCheckpoints + 1]; - fRaceLength = fSubsequentLapLength * static_cast(race_parameters->GetNumLaps() - 1) + fFirstLapLength; - } + if (!raceLoops) { + fSubsequentLapLength = totalDistance; + fRaceLength = totalDistance; + fFirstLapLength = totalDistance; + } else { + fSubsequentLapLength = totalDistance - mSegmentLengths[0]; + fFirstLapLength = totalDistance - mSegmentLengths[numPathPoints - 1]; + fRaceLength = fSubsequentLapLength * static_cast(race_parameters->GetNumLaps() - 1) + fFirstLapLength; + } - WRoadNav nav; + WRoadNav nav; - nav.SetPathType(static_cast(6)); - nav.InitAtPoint(UMath::Vector4To3(positions[numCheckpoints + 1]), UMath::Vector4To3(directions[numCheckpoints + 1]), true, 1.0f); - if (nav.IsValid()) { - for (int i = 0; i < 100; ++i) { - int segmentNumber; - WRoadSegment *segment; + nav.SetPathType(static_cast(6)); + nav.InitAtPoint(UMath::Vector4To3(positions[numPathPoints - 1]), UMath::Vector4To3(directions[numPathPoints - 1]), forceCentreLane, directionWeight); + if (nav.IsValid()) { + for (int i = 0; i < 100; ++i) { + int segmentNumber; + WRoadSegment *segment; - nav.IncNavPosition(1.0f, UMath::Vector3::kZero, 0.0f); - segmentNumber = nav.GetSegmentInd(); - segment = rn.GetSegmentNonConst(segmentNumber); - segment->SetInRace(true); - segment->SetRaceRouteForward(nav.GetNodeInd() == 1); + nav.IncNavPosition(1.0f, UMath::Vector3::kZero, 0.0f); + segmentNumber = nav.GetSegmentInd(); + segment = rn.GetSegmentNonConst(segmentNumber); + segment->SetInRace(true); + segment->SetRaceRouteForward(nav.GetNodeInd() == 1); + } } - } - GObjectIterator iter(0x100); - int numSpeedTraps = 0; + GObjectIterator iter(0x100); + int numSpeedTraps = 0; + + while (iter.IsValid()) { + GTrigger *trigger = iter.GetInstance(); - while (iter.IsValid()) { - GTrigger *trigger = iter.GetInstance(); + if (!trigger->OpenWorldSpeedTrap(0)) { + aSpeedTraps[numSpeedTraps] = trigger; + ++numSpeedTraps; + } - if (!trigger->OpenWorldSpeedTrap(0)) { - aSpeedTraps[numSpeedTraps] = trigger; - ++numSpeedTraps; + iter.Advance(); } - iter.Advance(); + nSpeedTraps = numSpeedTraps; } - - nSpeedTraps = numSpeedTraps; } template void GRaceCustom::SetAttribute(unsigned int key, const int &value, unsigned int index); From 54673ecdc1c0291aa593f03ff68077c8463ba0cf Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 13:20:11 +0100 Subject: [PATCH 397/691] 79.2%: improve GManager::PushSMSToInbox --- .../Src/Frontend/Database/FEDatabase.hpp | 4 +++ src/Speed/Indep/Src/Gameplay/GManager.cpp | 26 +++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Frontend/Database/FEDatabase.hpp b/src/Speed/Indep/Src/Frontend/Database/FEDatabase.hpp index 5eeefdeb0..9837d1e1d 100644 --- a/src/Speed/Indep/Src/Frontend/Database/FEDatabase.hpp +++ b/src/Speed/Indep/Src/Frontend/Database/FEDatabase.hpp @@ -153,6 +153,7 @@ class OptionsSettings { // total size: 0x4 struct SMSMessage { public: + bool IsVoice(); private: unsigned char Handle; // offset 0x0, size 0x1 unsigned char Flags; // offset 0x1, size 0x1 @@ -170,6 +171,9 @@ class CareerSettings { return CurrentBin; } + SMSMessage *GetSMSMessage(unsigned int index); + unsigned short GetSMSSortOrder(); + void SetAdaptiveDifficulty(float difficulty) { AdaptiveDifficulty = static_cast(difficulty * 32767.0f); } diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 32ade97a8..22e5d6e63 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2095,11 +2095,33 @@ void GManager::AddSMS(int smsID) { } int GManager::PushSMSToInbox() { + CareerSettings *careerSettings; + PendingSMSList::iterator it; int smsID; smsID = -1; - if (!mPendingSMS.empty()) { - smsID = mPendingSMS.front(); + careerSettings = FEDatabase->GetCareerSettings(); + for (it = mPendingSMS.begin(); it != mPendingSMS.end(); ++it) { + SMSMessage *smsMessage = careerSettings->GetSMSMessage(*it); + + if (smsMessage) { + if (smsMessage->IsVoice() && smsID == -1) { + smsID = *it; + } + reinterpret_cast(smsMessage)[1] = 2; + *reinterpret_cast(reinterpret_cast(smsMessage) + 2) = careerSettings->GetSMSSortOrder(); + } + } + + if (smsID == -1) { + int numSMS = 0; + + for (it = mPendingSMS.begin(); it != mPendingSMS.end(); ++it) { + ++numSMS; + } + if (numSMS != 0) { + smsID = mPendingSMS.front(); + } } mPendingSMS.clear(); From 09dcdd311dc8347119db61ddc5d241af36d0a7dc Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 13:28:41 +0100 Subject: [PATCH 398/691] 79.2%: improve GRacerInfo::CreateVehicle --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index e23c0270d..f24de218b 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -60,10 +60,6 @@ void FECustomizationRecordWriteRideIntoRecord(FECustomizationRecord *self, const void RideInfoSetRandomParts(RideInfo *self) __asm__("SetRandomParts__8RideInfo"); CarType CarPartDatabaseGetCarType(CarPartDatabase *self, unsigned int key) __asm__("GetCarType__15CarPartDatabaseUi"); -static unsigned int GetPresetVehicleKey(PresetCar *preset) { - return *reinterpret_cast(reinterpret_cast(preset) + 0x54); -} - #ifndef DECLARE_GAMEPLAY_MINIMAP_CLASS #define DECLARE_GAMEPLAY_MINIMAP_CLASS class Minimap { @@ -351,7 +347,7 @@ IVehicle *GRacerInfo::CreateVehicle(unsigned int default_key) { if (preset) { FECustomizationRecordBecomePreset(&customizations, preset); - vehicle_key = GetPresetVehicleKey(preset); + vehicle_key = *reinterpret_cast(reinterpret_cast(preset) + 0x54); } } @@ -385,8 +381,12 @@ IVehicle *GRacerInfo::CreateVehicle(unsigned int default_key) { } cache = nullptr; - if (GRaceStatus::Exists()) { - cache = static_cast(&GRaceStatus::Get()); + bool raceStatusExists = GRaceStatus::Exists(); + + if (raceStatusExists) { + GRaceStatus *raceStatus = &GRaceStatus::Get(); + + cache = reinterpret_cast(reinterpret_cast(raceStatus) + 0x10); } VehicleParams params(cache, DRIVER_RACER, vehicle_key, direction, UMath::Vector3::kZero, 0, &customizations, &ai_performance); From 61bb4d4b7f57d632756adf62d9b46d5ff960e5f7 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 13:35:29 +0100 Subject: [PATCH 399/691] 79.4%: improve GManager::GetRespawnLocation --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 22e5d6e63..79e97b84a 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2716,18 +2716,20 @@ unsigned int GManager::GetRespawnMarker() { } void GManager::GetRespawnLocation(UMath::Vector3 &startLoc, UMath::Vector3 &initialVec) { - Attrib::Gen::gameplay gameplayObj(GetRespawnMarker(), 0, nullptr); - const UMath::Vector3 *position = reinterpret_cast(gameplayObj.GetAttributePointer(0x9F743A0E, 0)); - UMath::Matrix4 rotMat = UMath::Matrix4::kIdentity; + Attrib::Gen::gameplay gameplayObj(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), GetRespawnMarker()), 0, nullptr); + const float *position = reinterpret_cast(gameplayObj.GetAttributePointer(0x9F743A0E, 0)); + UMath::Matrix4 rotMat; const float *rotation; if (!position) { - position = reinterpret_cast(Attrib::DefaultDataArea(sizeof(UMath::Vector3))); + position = reinterpret_cast(Attrib::DefaultDataArea(sizeof(UMath::Vector3))); } - startLoc.x = -position->y; - startLoc.y = position->z; - startLoc.z = position->x; + startLoc.x = -position[1]; + startLoc.y = position[2]; + startLoc.z = position[0]; + + UMath::Copy(UMath::Matrix4::kIdentity, rotMat); initialVec.x = 0.0f; initialVec.y = 0.0f; From 5704edfd1e61ff732584dfb2698125ca10bdabe4 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 13:37:43 +0100 Subject: [PATCH 400/691] 79.3%: improve GManager::GetRespawnLocation --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 79e97b84a..d2162704d 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2719,21 +2719,25 @@ void GManager::GetRespawnLocation(UMath::Vector3 &startLoc, UMath::Vector3 &init Attrib::Gen::gameplay gameplayObj(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), GetRespawnMarker()), 0, nullptr); const float *position = reinterpret_cast(gameplayObj.GetAttributePointer(0x9F743A0E, 0)); UMath::Matrix4 rotMat; + UMath::Vector3 respawnLoc; + UMath::Vector3 forwardVec; const float *rotation; if (!position) { position = reinterpret_cast(Attrib::DefaultDataArea(sizeof(UMath::Vector3))); } - startLoc.x = -position[1]; - startLoc.y = position[2]; - startLoc.z = position[0]; + respawnLoc.x = -position[1]; + respawnLoc.y = position[2]; + respawnLoc.z = position[0]; + startLoc = respawnLoc; UMath::Copy(UMath::Matrix4::kIdentity, rotMat); - initialVec.x = 0.0f; - initialVec.y = 0.0f; - initialVec.z = 1.0f; + forwardVec.x = 0.0f; + forwardVec.y = 0.0f; + forwardVec.z = 1.0f; + initialVec = forwardVec; rotation = reinterpret_cast(gameplayObj.GetAttributePointer(0x5A6A57C6, 0)); if (!rotation) { From b65026d9cbef547032115b433ea13a1a6821f5f1 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 15:12:20 +0100 Subject: [PATCH 401/691] 79.4%: match GRaceParameters::NotifyParentVaultLoaded --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 3 +++ src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index f24de218b..2104ac67b 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1086,6 +1086,9 @@ void GRaceParameters::NotifyParentVaultUnloading() { } void GRaceParameters::NotifyParentVaultLoaded() { + if (!mRaceRecord) { + mRaceRecord = new Attrib::Gen::gameplay(reinterpret_cast(mIndex)[0], 0, nullptr); + } } const Attrib::Gen::gameplay *GRaceParameters::GetGameplayObj() const { diff --git a/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h b/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h index 441ddd1fa..8ea58ade9 100644 --- a/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h +++ b/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h @@ -35,6 +35,10 @@ struct gameplay : Instance { unsigned int message_id; // offset 0x4, size 0x4 }; + void *operator new(size_t bytes) { + return Attrib::Alloc(bytes, "gameplay"); + } + void operator delete(void *ptr, size_t bytes) { Attrib::Free(ptr, bytes, "gameplay"); } From d09c474933293b962015ac2b5d4d0ab43f5efd79 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 15:18:58 +0100 Subject: [PATCH 402/691] 79.7%: improve GManager::UpdateIconVisibility --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 105 +++++++++++++--------- 1 file changed, 65 insertions(+), 40 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index d2162704d..d26d601d4 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2506,53 +2506,78 @@ void GManager::UpdateTriggerAvailability() { } void GManager::UpdateIconVisibility() { - bool visible[GIcon::kType_Count]; - - mEventIconsShown = mAllowEngageEvents; - mMenuGateIconsShown = mAllowMenuGates; - mSpeedTrapIconsShown = mAllowEngageEvents; - mSpeedTrapRaceIconsShown = - GRaceStatus::Exists() && GRaceStatus::Get().GetRaceParameters() && - GRaceStatus::Get().GetRaceParameters()->GetRaceType() == GRace::kRaceType_SpeedTrap; - - for (unsigned int i = 0; i < GIcon::kType_Count; ++i) { - visible[i] = TWEAK_ShowAllGameplayIcons != 0; - } - - if (!TWEAK_ShowAllGameplayIcons && !INIS::Exists()) { - visible[GIcon::kType_RaceSprint] = mEventIconsShown; - visible[GIcon::kType_RaceCircuit] = mEventIconsShown; - visible[GIcon::kType_RaceDrag] = mEventIconsShown; - visible[GIcon::kType_RaceKnockout] = mEventIconsShown; - visible[GIcon::kType_RaceTollbooth] = mEventIconsShown; - visible[GIcon::kType_RaceSpeedtrap] = mEventIconsShown; - visible[GIcon::kType_RaceRival] = mEventIconsShown; - visible[GIcon::kType_GateSafehouse] = mAllowEngageSafehouse; - visible[GIcon::kType_GateCarLot] = mMenuGateIconsShown; - visible[GIcon::kType_GateCustomShop] = mMenuGateIconsShown; - visible[GIcon::kType_HidingSpot] = mHidingSpotIconsShown; - visible[GIcon::kType_PursuitBreaker] = mPursuitBreakerIconsShown; - visible[GIcon::kType_SpeedTrap] = mSpeedTrapIconsShown; - visible[GIcon::kType_SpeedTrapInRace] = mSpeedTrapRaceIconsShown; - visible[GIcon::kType_AreaUnlock] = true; + bool eventIconsShown; + bool menuGateIconsShown; + bool speedTrapIconsShown; + bool speedTrapRaceIconsShown; + bool hideAll; + bool showAll; + bool iconTypeVisible[GIcon::kType_Count]; + unsigned int onFlag; + unsigned int onIcon; + + eventIconsShown = mAllowEngageEvents; + menuGateIconsShown = mAllowMenuGates; + speedTrapIconsShown = mAllowEngageEvents; + mSpeedTrapIconsShown = speedTrapIconsShown; + mMenuGateIconsShown = menuGateIconsShown; + mEventIconsShown = eventIconsShown; + speedTrapRaceIconsShown = + GRaceStatus::Exists() && + GRaceStatus::Get().GetRaceType() == GRace::kRaceType_SpeedTrap; + mSpeedTrapRaceIconsShown = speedTrapRaceIconsShown; + hideAll = false; + if (UTL::Collections::Singleton::Exists()) { + hideAll = true; + } + showAll = false; + if (TWEAK_ShowAllGameplayIcons != 0) { + showAll = true; + } + + for (onFlag = 0; onFlag < GIcon::kType_Count; ++onFlag) { + iconTypeVisible[onFlag] = showAll; + } + + if (!showAll && !hideAll) { + iconTypeVisible[GIcon::kType_RaceSprint] = mEventIconsShown; + iconTypeVisible[GIcon::kType_RaceCircuit] = mEventIconsShown; + iconTypeVisible[GIcon::kType_RaceDrag] = mEventIconsShown; + iconTypeVisible[GIcon::kType_RaceKnockout] = mEventIconsShown; + iconTypeVisible[GIcon::kType_RaceTollbooth] = mEventIconsShown; + iconTypeVisible[GIcon::kType_RaceSpeedtrap] = mEventIconsShown; + iconTypeVisible[GIcon::kType_RaceRival] = mEventIconsShown; + iconTypeVisible[GIcon::kType_GateSafehouse] = mAllowEngageSafehouse; + iconTypeVisible[GIcon::kType_GateCarLot] = mMenuGateIconsShown; + iconTypeVisible[GIcon::kType_GateCustomShop] = mMenuGateIconsShown; + iconTypeVisible[GIcon::kType_HidingSpot] = mHidingSpotIconsShown; + iconTypeVisible[GIcon::kType_PursuitBreaker] = mPursuitBreakerIconsShown; + iconTypeVisible[GIcon::kType_SpeedTrap] = mSpeedTrapIconsShown; + iconTypeVisible[GIcon::kType_SpeedTrapInRace] = mSpeedTrapRaceIconsShown; + iconTypeVisible[GIcon::kType_AreaUnlock] = true; } mNumVisibleIcons = 0; - for (unsigned int i = 0; i < mNumIcons; ++i) { - GIcon *icon = mIcons[i]; - bool shouldShow = icon->IsFlagSet(1) && visible[icon->GetType()]; - - if (shouldShow) { - if (icon->IsFlagClear(8)) { + for (onIcon = 0; onIcon < mNumIcons; ++onIcon) { + GIcon *icon = mIcons[onIcon]; + bool enabled = icon->GetIsEnabled(); + bool iconVisible = icon->GetVisibleInWorld(); + bool typeVisible = iconTypeVisible[icon->GetType()]; + bool shouldBeVisible = iconVisible && typeVisible; + + if (!shouldBeVisible) { + if (enabled) { + icon->Disable(); + } + } else { + if (!enabled) { icon->Enable(); } - GIcon *swap = mIcons[mNumVisibleIcons]; - mIcons[mNumVisibleIcons] = mIcons[i]; - mIcons[i] = swap; + GIcon *visibleIcon = mIcons[mNumVisibleIcons]; + mIcons[onIcon] = visibleIcon; + mIcons[mNumVisibleIcons] = icon; mNumVisibleIcons++; - } else if (icon->IsFlagSet(8)) { - icon->Disable(); } } } From 66dd0bc1838a4f8212399befcdf8fb2d6ffd62b5 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 15:19:01 +0100 Subject: [PATCH 403/691] 79.7%: improve GRacerInfo::FinalizeRaceStats --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 105 ++++++++++--------- 1 file changed, 56 insertions(+), 49 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 2104ac67b..1b5653189 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -827,92 +827,99 @@ void GRacerInfo::UpdateSplits() { } void GRacerInfo::FinalizeRaceStats() { - GRaceParameters *raceParms = GRaceStatus::Get().GetRaceParameters(); - float adjustedRaceTime; - float pctRaceComplete = mPctRaceComplete; + float currentTime; + float time_now; + float pctComplete; if (mFinishedRacing) { return; } - adjustedRaceTime = GetRaceTime(); - if (0.1f < pctRaceComplete) { - adjustedRaceTime = GetRaceTime() / pctRaceComplete; + time_now = GetRaceTime(); + pctComplete = GetPctRaceComplete(); + currentTime = time_now; + if (0.1f < pctComplete) { + currentTime = currentTime / (pctComplete * 0.01f); } -#ifndef EA_BUILD_A124 - mDNF = false; -#endif - - if (raceParms && raceParms->GetRaceType() == GRace::kRaceType_Drag && - (mTotalled || mEngineBlown || pctRaceComplete < 1.0f)) { - adjustedRaceTime = 0.0f; + if (GRaceStatus::Get().GetRaceType() == GRace::kRaceType_Drag && + (GetIsTotalled() || GetIsEngineBlown() || pctComplete < 1.0f)) { + currentTime = 0.0f; #ifndef EA_BUILD_A124 mDNF = true; #endif } - if (raceParms && raceParms->GetRaceType() == GRace::kRaceType_SpeedTrap && mGameCharacter) { - const unsigned int *pointPenalty = - reinterpret_cast(raceParms->GetGameplayObj()->GetAttributePointer(0x26FD42B0, 0)); + if (GRaceStatus::Get().GetRaceType() == GRace::kRaceType_SpeedTrap && mGameCharacter) { + GRaceParameters *parameters = GRaceStatus::Get().GetRaceParameters(); + float time_left = currentTime - time_now; + int penalty = parameters->GetGameplayObj()->OvertimePenaltyPerSec(0); - if (!pointPenalty) { - pointPenalty = reinterpret_cast(Attrib::DefaultDataArea(sizeof(unsigned int))); - } - - if (0.0f < adjustedRaceTime - GetRaceTime()) { - AddToPointTotal(-((adjustedRaceTime - GetRaceTime()) * static_cast(*pointPenalty))); + if (0.0f < time_left) { + AddToPointTotal(-(time_left * static_cast(penalty))); } } - if (raceParms && raceParms->GetIsLoopingRace() && mGameCharacter) { - int numLaps = raceParms->GetNumLaps(); - float totalLapTime = 0.0f; + if (GRaceStatus::Get().GetRaceParameters() && + GRaceStatus::Get().GetRaceParameters()->GetIsLoopingRace()) { + if (mGameCharacter) { + int totalLaps = GRaceStatus::Get().GetRaceParameters()->GetNumLaps(); + int completedLaps = GetLapsCompleted(); + float elapsedTime = 0.0f; + int onLap = 0; - for (int i = 0; i < numLaps; ++i) { - float lapTime = GRaceStatus::Get().GetLapTime(i, GetIndex(), false); + if (onLap < totalLaps) { + do { + float lapTime = GRaceStatus::Get().GetLapTime(onLap, GetIndex(), false); - if (lapTime == 0.0f) { - break; + if (lapTime == 0.0f) { + completedLaps = onLap; + break; + } + + onLap++; + elapsedTime += lapTime; + } while (onLap < totalLaps); } - totalLapTime += lapTime; + GRaceStatus::Get().SetLapTime(completedLaps, GetIndex(), currentTime - elapsedTime); } - - GRaceStatus::Get().SetLapTime(mLapsCompleted, GetIndex(), adjustedRaceTime - totalLapTime); } #ifndef EA_BUILD_A124 if (mGameCharacter) { - static const float splitPct[4] = { - 0.25f, - 0.5f, - 0.75f, - 1.0f, - }; - float effectivePct = mDNF ? pctRaceComplete : 1.0f; - - for (int i = 0; i < 4; ++i) { - if (mSplitTimes[i] == 0.0f) { - if (effectivePct < splitPct[i]) { - mSplitTimes[i] = 0.0f; + float effectivePct = mDNF ? pctComplete : 1.0f; + float pct[4]; + int onSplit; + + pct[0] = 0.25f; + pct[1] = 0.5f; + pct[2] = 0.75f; + pct[3] = 1.0f; + + for (onSplit = 0; onSplit <= 3; ++onSplit) { + bool wasAliveAtPct = effectivePct >= pct[onSplit]; + + if (mSplitTimes[onSplit] == 0.0f) { + if (wasAliveAtPct) { + mSplitTimes[onSplit] = currentTime * pct[onSplit]; } else { - mSplitTimes[i] = adjustedRaceTime * splitPct[i]; + mSplitTimes[onSplit] = 0.0f; } } - if (mSplitRankings[i] == 0) { - mSplitRankings[i] = mRanking; + if (mSplitRankings[onSplit] == 0) { + mSplitRankings[onSplit] = mRanking; } } } if (!mDNF) { - mRaceTimer.SetTime(adjustedRaceTime); + mRaceTimer.SetTime(currentTime); FinishRace(); } #else - mRaceTimer.SetTime(adjustedRaceTime); + mRaceTimer.SetTime(currentTime); FinishRace(); #endif } From 63f024c27825a92f71c3afff658eb2ca0339757c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 15:32:37 +0100 Subject: [PATCH 404/691] 79.8%: improve GRaceStatus::DetermineRaceSegmentLength --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 113 ++++++++++--------- 1 file changed, 62 insertions(+), 51 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 1b5653189..6a21e67d7 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3896,42 +3896,49 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c UMath::Vector3 delta; float pathDistance; float segmentDistance = 0.0f; + UTL::Std::set pathSegments; char shortcutAllowed[32]; + bool noShortcuts = true; + nav.SetNavType(WRoadNav::kTypeDirection); + nav.SetDecisionFilter(true); nav.SetPathType(WRoadNav::kPathChopper); VU0_v3sub(UMath::Vector4To3(positions[start]), UMath::Vector4To3(positions[end]), delta); pathDistance = VU0_sqrt(VU0_v3lengthsquare(delta)); nav.InitAtPoint(UMath::Vector4To3(positions[start]), UMath::Vector4To3(directions[start]), true, 1.0f); - if (!nav.IsValid()) { - bRaceRouteError = true; - return pathDistance; - } + if (nav.IsValid()) { + if (start == end) { + short segment = nav.GetSegmentInd(); + float segLenScale = static_cast(nav.GetSegment()->nLength) * 0.015259022f; - if (start == end) { - short segment = nav.GetSegmentInd(); + do { + float lengthDelta = segLenScale * (1.0f - nav.GetSegTime()); - do { - float distance = static_cast(nav.GetSegment()->nLength) * 0.015259022f * (1.0f - nav.GetSegTime()); + if (lengthDelta < 0.01f) { + lengthDelta = 0.01f; + } - distance = UMath::Max(distance, 0.01f); - segmentDistance += distance; - nav.IncNavPosition(distance, UMath::Vector4To3(directions[end]), 0.0f); - } while (segment == nav.GetSegmentInd()); - } + segmentDistance += lengthDelta; + nav.IncNavPosition(lengthDelta, UMath::Vector4To3(directions[end]), 0.0f); + } while (segment == nav.GetSegmentInd()); + } - bMemSet(shortcutAllowed, 1, sizeof(shortcutAllowed)); - UTL::Std::set pathSegments; + bMemSet(shortcutAllowed, 1, sizeof(shortcutAllowed)); + while (true) { + bool foundPath; - { - bool noShortcuts = true; + nav.SetNavType(WRoadNav::kTypeDirection); + nav.FindPathNow(&UMath::Vector4To3(positions[end]), &UMath::Vector4To3(directions[end]), shortcutAllowed); + foundPath = nav.GetNavType() == WRoadNav::kTypePath; + if (!foundPath) { + break; + } - do { - PathSegment pathSegment; + { + PathSegment pathSegment; - nav.FindPathNow(&UMath::Vector4To3(positions[end]), &UMath::Vector4To3(directions[end]), shortcutAllowed); - if (nav.GetNavType() == WRoadNav::kTypePath) { WRoadNetwork::Get().AddRaceSegments(&nav); pathDistance = nav.GetPathDistanceRemaining(); @@ -3950,53 +3957,57 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c } } pathSegments.insert(pathSegment); - } else { + } + + if (noShortcuts) { break; } - } while (!noShortcuts); + } pathDistance += segmentDistance; if (noShortcuts && pathSegments.size() == 0) { bRaceRouteError = true; } - } - if (pathSegments.size() > 1) { - PathSegment *sortedPaths[32]; - int count = 0; - - for (UTL::Std::set::iterator it = pathSegments.begin(); it != pathSegments.end(); ++it) { - sortedPaths[count++] = const_cast(&*it); - } + if (noShortcuts && pathSegments.size() > 1) { + PathSegment *sortedPaths[32]; + int count = 0; - for (int i = 1; i < count; ++i) { - PathSegment *current = sortedPaths[i]; - PathSegment *previous = sortedPaths[i - 1]; - UTL::Std::set roadDiff; - float roadDiffLength = 0.0f; - - std::set_difference( - previous->Roads.begin(), - previous->Roads.end(), - current->Roads.begin(), - current->Roads.end(), - std::insert_iterator >(roadDiff, roadDiff.begin())); - - for (UTL::Std::set::iterator it = roadDiff.begin(); it != roadDiff.end(); ++it) { - roadDiffLength += static_cast(WRoadNetwork::Get().GetRoad(*it)->nLength) * 0.061036088f; + for (UTL::Std::set::iterator it = pathSegments.begin(); it != pathSegments.end(); ++it) { + sortedPaths[count++] = const_cast(&*it); } - if (roadDiffLength > 0.0f) { - float scale_ratio = ((current->Length - previous->Length) + roadDiffLength) / roadDiffLength; + for (int i = 1; i < count; ++i) { + PathSegment *current = sortedPaths[i]; + PathSegment *previous = sortedPaths[i - 1]; + UTL::Std::set roadDiff; + float roadDiffLength = 0.0f; + + std::set_difference( + previous->Roads.begin(), + previous->Roads.end(), + current->Roads.begin(), + current->Roads.end(), + std::insert_iterator >(roadDiff, roadDiff.begin())); for (UTL::Std::set::iterator it = roadDiff.begin(); it != roadDiff.end(); ++it) { - WRoad *road = const_cast(WRoadNetwork::Get().GetRoad(*it)); - int scale = static_cast(scale_ratio * 65536.0f); + roadDiffLength += static_cast(WRoadNetwork::Get().GetRoad(*it)->nLength) * 0.061036088f; + } + + if (roadDiffLength > 0.0f) { + float scale_ratio = ((current->Length - previous->Length) + roadDiffLength) / roadDiffLength; + + for (UTL::Std::set::iterator it = roadDiff.begin(); it != roadDiff.end(); ++it) { + WRoad *road = const_cast(WRoadNetwork::Get().GetRoad(*it)); + int scale = static_cast(scale_ratio * 65536.0f); - road->nScale = static_cast(scale >> 8); + road->nScale = static_cast(scale >> 8); + } } } } + } else { + bRaceRouteError = true; } return pathDistance; From 899b38c624464059c375a293ee6091e374b17bbf Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 15:47:31 +0100 Subject: [PATCH 405/691] 80.0%: improve GRaceStatus::SetRacing --- .../Src/Frontend/Database/FEDatabase.hpp | 2 ++ src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 35 ++++++++++++++++--- src/Speed/Indep/Src/Gameplay/GTrigger.h | 4 +++ 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Frontend/Database/FEDatabase.hpp b/src/Speed/Indep/Src/Frontend/Database/FEDatabase.hpp index 9837d1e1d..79031eab2 100644 --- a/src/Speed/Indep/Src/Frontend/Database/FEDatabase.hpp +++ b/src/Speed/Indep/Src/Frontend/Database/FEDatabase.hpp @@ -306,6 +306,8 @@ class cFrontendDatabase { return CurrentUserProfiles[0]->GetOptions()->GetGameplaySettings(); } + bool IsFinalEpicChase(); + unsigned char iNumPlayers; // offset 0x0, size 0x1 bool bComingFromBoot; // offset 0x4, size 0x1 bool bSavedProfileForMP; // offset 0x8, size 0x1 diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 6a21e67d7..baedca8f8 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2700,20 +2700,47 @@ void GRaceStatus::EnterBin(unsigned int binNumber) { } void GRaceStatus::SetRacing() { + IPlayer *player; + mPlayMode = kPlayMode_Racing; ClearTimes(); - for (IPlayer::List::const_iterator iter = IPlayer::GetList(PLAYER_ALL).begin(); iter != IPlayer::GetList(PLAYER_ALL).end(); ++iter) { - IPlayer *player = *iter; - + player = IPlayer::First(PLAYER_ALL); + while (player) { if (player->InGameBreaker()) { player->ResetGameBreaker(true); } + + { + IPlayer::List::const_iterator iter = + std::find(IPlayer::GetList(PLAYER_ALL).begin(), IPlayer::GetList(PLAYER_ALL).end(), player); + IPlayer::List::const_iterator end = IPlayer::GetList(PLAYER_ALL).end(); + + if (iter == end) { + player = nullptr; + } else { + ++iter; + player = iter == end ? nullptr : *iter; + } + } } mNumTollbooths = 0; - if ((!mRaceParms || !mRaceParms->GetIsDDayRace() || bStrCmp(mRaceParms->GetEventID(), "16.1.0") == 0) && !IsFinalEpicPursuit()) { + { + GObjectIterator iter(0x800); + + while (iter.IsValid()) { + if (iter.GetInstance()->GetTriggerEnabled()) { + mNumTollbooths++; + } + + iter.Advance(); + } + } + + if ((!mRaceParms || !mRaceParms->GetIsDDayRace() || bStrCmp(mRaceParms->GetEventID(), "16.1.0") == 0) && + (!FEDatabase || !FEDatabase->IsFinalEpicChase())) { new EAutoSave(); } diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.h b/src/Speed/Indep/Src/Gameplay/GTrigger.h index a8d8351cf..13988b279 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.h +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.h @@ -53,6 +53,10 @@ class GTrigger : public GRuntimeInstance { return mEnabled; } + bool GetTriggerEnabled() const { + return mTriggerEnabled != 0; + } + GIcon *GetIcon() const { return mIcon; } From 5780d0a0470abba99442d6bee42f1f3c28646a0a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 15:49:23 +0100 Subject: [PATCH 406/691] 80.2%: improve GRaceStatus::SetRacing --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index baedca8f8..72cbfc4ff 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2712,8 +2712,9 @@ void GRaceStatus::SetRacing() { } { + const IPlayer *currentPlayer = player; IPlayer::List::const_iterator iter = - std::find(IPlayer::GetList(PLAYER_ALL).begin(), IPlayer::GetList(PLAYER_ALL).end(), player); + std::find(IPlayer::GetList(PLAYER_ALL).begin(), IPlayer::GetList(PLAYER_ALL).end(), currentPlayer); IPlayer::List::const_iterator end = IPlayer::GetList(PLAYER_ALL).end(); if (iter == end) { @@ -2740,7 +2741,7 @@ void GRaceStatus::SetRacing() { } if ((!mRaceParms || !mRaceParms->GetIsDDayRace() || bStrCmp(mRaceParms->GetEventID(), "16.1.0") == 0) && - (!FEDatabase || !FEDatabase->IsFinalEpicChase())) { + !FEDatabase->IsFinalEpicChase()) { new EAutoSave(); } From 0bab6b8da55355215734602b5ec9057edf02f82f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 16:22:06 +0100 Subject: [PATCH 407/691] tooling: bootstrap PS2 and Xbox assets Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- tools/share_worktree_assets.py | 117 +++++++++++++++++++++++++++++++-- 1 file changed, 112 insertions(+), 5 deletions(-) diff --git a/tools/share_worktree_assets.py b/tools/share_worktree_assets.py index 374d168e5..4bfdcf055 100644 --- a/tools/share_worktree_assets.py +++ b/tools/share_worktree_assets.py @@ -13,6 +13,8 @@ python tools/share_worktree_assets.py status --all python tools/share_worktree_assets.py link --all python tools/share_worktree_assets.py bootstrap + python tools/share_worktree_assets.py bootstrap --version EUROPEGERMILESTONE --xbox-xex /path/to/NfsMWEuropeGerMilestone.xex + python tools/share_worktree_assets.py bootstrap --version SLES-53558-A124 --ps2-toolchain-zip /path/to/PS2.zip """ import argparse @@ -21,6 +23,7 @@ import shutil import subprocess import sys +import zipfile from dataclasses import dataclass from typing import Dict, Iterable, List, Optional, Set @@ -39,11 +42,16 @@ class AssetSpec: FIXED_ASSETS = ( AssetSpec(os.path.join("orig", "GOWE69", "NFSMWRELEASE.ELF"), "file"), + AssetSpec( + os.path.join("orig", "EUROPEGERMILESTONE", "NfsMWEuropeGerMilestone.xex"), + "file", + ), AssetSpec(os.path.join("orig", "SLES-53558-A124", "NFS.ELF"), "file"), AssetSpec(os.path.join("orig", "SLES-53558-A124", "NFS.MAP"), "file"), AssetSpec(os.path.join("build", "tools"), "dir"), AssetSpec(os.path.join("build", "compilers"), "dir"), AssetSpec(os.path.join("build", "ppc_binutils"), "dir"), + AssetSpec(os.path.join("build", "mips_binutils"), "dir"), ) @@ -120,6 +128,85 @@ def ensure_parent(path: str) -> None: os.makedirs(parent, exist_ok=True) +def seed_shared_file(shared_path: str, source_path: str, description: str) -> None: + ensure_parent(shared_path) + if os.path.isfile(shared_path) and not os.path.islink(shared_path): + if not filecmp.cmp(shared_path, source_path, shallow=False): + raise RuntimeError( + f"Refusing to replace existing shared {description}: {shared_path}" + ) + return + if os.path.islink(shared_path): + if not same_symlink(shared_path, source_path): + raise RuntimeError( + f"Refusing to replace existing shared {description}: {shared_path}" + ) + os.unlink(shared_path) + elif lexists(shared_path): + raise RuntimeError( + f"Refusing to replace existing shared {description}: {shared_path}" + ) + shutil.copy2(source_path, shared_path) + + +def extract_zip_into(zip_path: str, output_dir: str) -> None: + os.makedirs(output_dir, exist_ok=True) + with zipfile.ZipFile(zip_path) as archive: + for member in archive.infolist(): + member_name = member.filename.rstrip("/") + if not member_name: + continue + + output_path = os.path.join(output_dir, *member_name.split("/")) + if member.is_dir(): + os.makedirs(output_path, exist_ok=True) + continue + + ensure_parent(output_path) + if os.path.exists(output_path): + continue + + with archive.open(member) as src, open(output_path, "wb") as dst: + shutil.copyfileobj(src, dst) + os.chmod(output_path, 0o755) + + +def seed_bootstrap_assets( + shared_root: str, xbox_xex: Optional[str], ps2_toolchain_zip: Optional[str] +) -> None: + if xbox_xex: + if not os.path.isfile(xbox_xex): + raise RuntimeError(f"Xbox XEX not found: {xbox_xex}") + seed_shared_file( + os.path.join( + shared_root, + "orig", + "EUROPEGERMILESTONE", + "NfsMWEuropeGerMilestone.xex", + ), + xbox_xex, + "Xbox XEX", + ) + + if ps2_toolchain_zip: + if not os.path.isfile(ps2_toolchain_zip): + raise RuntimeError(f"PS2 toolchain zip not found: {ps2_toolchain_zip}") + extract_zip_into(ps2_toolchain_zip, os.path.join(shared_root, "build", "compilers")) + expected_ee_gcc = os.path.join( + shared_root, + "build", + "compilers", + "PS2", + "ee-gcc2.9-991111", + "bin", + "ee-gcc.exe", + ) + if not os.path.isfile(expected_ee_gcc): + raise RuntimeError( + "PS2 toolchain zip did not produce build/compilers/PS2/ee-gcc2.9-991111/bin/ee-gcc.exe" + ) + + def merge_file(src: str, dst: str, relpath: str) -> None: ensure_parent(dst) if not os.path.exists(dst): @@ -342,18 +429,23 @@ def bootstrap_generated_files(worktree: str, version: str) -> None: objdiff_json = os.path.join(worktree, "objdiff.json") compile_commands = os.path.join(worktree, "compile_commands.json") config_target = os.path.join("build", version, "config.json") + configure_cmd = [sys.executable, "configure.py", "--version", version] - print(f"{worktree}: running configure.py") - run_command([sys.executable, "configure.py"], worktree, "configure.py") + print(f"{worktree}: running {' '.join(configure_cmd)}") + run_command(configure_cmd, worktree, "configure.py") if not os.path.isfile(build_ninja): raise RuntimeError(f"{worktree}: configure.py did not create build.ninja") - if not os.path.isfile(objdiff_json) or not os.path.isfile(compile_commands): + if ( + not os.path.isfile(config_target) + or not os.path.isfile(objdiff_json) + or not os.path.isfile(compile_commands) + ): print(f"{worktree}: generating {config_target} for local objdiff metadata") run_command(["ninja", config_target], worktree, f"ninja {config_target}") - print(f"{worktree}: rerunning configure.py") - run_command([sys.executable, "configure.py"], worktree, "configure.py") + print(f"{worktree}: rerunning {' '.join(configure_cmd)}") + run_command(configure_cmd, worktree, "configure.py") missing = [] if not os.path.isfile(objdiff_json): @@ -373,7 +465,10 @@ def bootstrap_worktrees( version: str, run_health: bool, smoke_build: Optional[str], + xbox_xex: Optional[str], + ps2_toolchain_zip: Optional[str], ) -> int: + seed_bootstrap_assets(shared_root, xbox_xex, ps2_toolchain_zip) link_assets(target_worktrees, seed_worktrees, shared_root) for worktree in target_worktrees: bootstrap_generated_files(worktree, version) @@ -418,6 +513,16 @@ def main() -> int: metavar="UNIT", help="Also run `decomp-workflow.py health --smoke-build UNIT` after bootstrap.", ) + parser.add_argument( + "--xbox-xex", + metavar="PATH", + help="Seed the shared Xbox XEX from a local file before linking/bootstrap.", + ) + parser.add_argument( + "--ps2-toolchain-zip", + metavar="PATH", + help="Extract a local PS2 EE-GCC zip into shared build/compilers before linking/bootstrap.", + ) args = parser.parse_args() common_dir = git_common_dir(root_dir) @@ -437,6 +542,8 @@ def main() -> int: args.version, args.health, args.smoke_build, + args.xbox_xex, + args.ps2_toolchain_zip, ) except RuntimeError as e: print(f"Error: {e}", file=sys.stderr) From 45403b80bb976309d78d85c7b32cb563dc3e9093 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 16:46:11 +0100 Subject: [PATCH 408/691] tooling: add cross-platform build matrix checker Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- AGENTS.md | 8 ++ tools/build_matrix.py | 307 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 315 insertions(+) create mode 100644 tools/build_matrix.py diff --git a/AGENTS.md b/AGENTS.md index fc4f7af24..bf0cba804 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -12,8 +12,16 @@ ninja all_source # build all objects ninja # build all objects, hash check and progress report ninja baseline # generates baseline report for regression checking ninja changes # check for regressions after code changes (empty = no regressions) +python tools/build_matrix.py # sequential full `ninja` across GC/Xbox/PS2, then restore GOWE69 +python tools/build_matrix.py --all-source # sequential compile-only smoke check across GC/Xbox/PS2 ``` +Use `python tools/build_matrix.py` when you want one command that verifies the current +worktree across all supported platforms. It runs `configure.py --version ...` and the +selected ninja target sequentially, writes per-platform logs under `build//logs/`, +prints failure tails with the exact failing command, and restores the worktree to +`GOWE69` by default when it finishes. + ## Project Layout ``` diff --git a/tools/build_matrix.py b/tools/build_matrix.py new file mode 100644 index 000000000..135bce18c --- /dev/null +++ b/tools/build_matrix.py @@ -0,0 +1,307 @@ +#!/usr/bin/env python3 + +""" +Run sequential build checks across supported platforms. + +Examples: + python tools/build_matrix.py + python tools/build_matrix.py --version GOWE69 --version SLES-53558-A124 + python tools/build_matrix.py --all-source +""" + +import argparse +import os +import subprocess +import sys +import time +from dataclasses import dataclass +from typing import List, Optional, Sequence + + +SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) +ROOT_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, "..")) +DEFAULT_RESTORE_VERSION = "GOWE69" + + +@dataclass(frozen=True) +class PlatformCheck: + version: str + label: str + required_assets: Sequence[str] + + +@dataclass +class StepResult: + name: str + command: List[str] + returncode: int + elapsed: float + log_path: str + output: str + + @property + def ok(self) -> bool: + return self.returncode == 0 + + +@dataclass +class PlatformResult: + platform: PlatformCheck + configure: Optional[StepResult] = None + build: Optional[StepResult] = None + preflight_error: Optional[str] = None + + @property + def ok(self) -> bool: + return ( + self.preflight_error is None + and self.configure is not None + and self.configure.ok + and self.build is not None + and self.build.ok + ) + + +PLATFORMS = ( + PlatformCheck( + version="GOWE69", + label="GameCube", + required_assets=("orig/GOWE69/NFSMWRELEASE.ELF",), + ), + PlatformCheck( + version="EUROPEGERMILESTONE", + label="Xbox 360", + required_assets=("orig/EUROPEGERMILESTONE/NfsMWEuropeGerMilestone.xex",), + ), + PlatformCheck( + version="SLES-53558-A124", + label="PS2", + required_assets=("orig/SLES-53558-A124/NFS.ELF",), + ), +) + +PLATFORM_BY_VERSION = {platform.version: platform for platform in PLATFORMS} + + +def print_section(title: str) -> None: + print(f"\n== {title} ==", flush=True) + + +def tail_lines(text: str, count: int) -> str: + lines = text.rstrip().splitlines() + if len(lines) <= count: + return "\n".join(lines) + return "\n".join(lines[-count:]) + + +def run_logged(command: List[str], log_path: str) -> StepResult: + start = time.monotonic() + try: + completed = subprocess.run( + command, + cwd=ROOT_DIR, + capture_output=True, + text=True, + errors="replace", + ) + output = completed.stdout + if completed.stderr: + if output and not output.endswith("\n"): + output += "\n" + output += completed.stderr + returncode = completed.returncode + except OSError as exc: + output = str(exc) + returncode = 127 + elapsed = time.monotonic() - start + + os.makedirs(os.path.dirname(log_path), exist_ok=True) + with open(log_path, "w", encoding="utf-8") as log_file: + log_file.write(output) + + return StepResult( + name=os.path.basename(log_path), + command=command, + returncode=returncode, + elapsed=elapsed, + log_path=log_path, + output=output, + ) + + +def missing_assets(platform: PlatformCheck) -> List[str]: + missing = [] + for rel_path in platform.required_assets: + abs_path = os.path.join(ROOT_DIR, rel_path) + if not os.path.exists(abs_path): + missing.append(rel_path) + return missing + + +def describe_failure(step: StepResult, tail_count: int) -> None: + print(f"FAIL {step.name}: exit {step.returncode} in {step.elapsed:.2f}s") + print(f"Command: {' '.join(step.command)}") + print(f"Log: {step.log_path}") + if step.output.strip(): + print("--- output tail ---") + print(tail_lines(step.output, tail_count)) + + +def run_platform( + platform: PlatformCheck, build_target: Optional[str], jobs: int, tail_count: int +) -> PlatformResult: + result = PlatformResult(platform=platform) + logs_dir = os.path.join(ROOT_DIR, "build", platform.version, "logs") + + print_section(f"{platform.label} ({platform.version})") + + missing = missing_assets(platform) + if missing: + result.preflight_error = ( + "Missing required assets: " + + ", ".join(missing) + + " (hint: seed shared assets or run worktree bootstrap first)" + ) + print(f"FAIL preflight: {result.preflight_error}") + return result + + configure_cmd = [sys.executable, "configure.py", "--version", platform.version] + configure_log = os.path.join(logs_dir, "build-matrix-configure.log") + print(f"RUN configure: {' '.join(configure_cmd)}") + result.configure = run_logged(configure_cmd, configure_log) + if result.configure.ok: + print(f"OK configure: {result.configure.elapsed:.2f}s ({configure_log})") + else: + describe_failure(result.configure, tail_count) + return result + + build_cmd = ["ninja", "-j", str(jobs)] + if build_target is not None: + build_cmd.append(build_target) + build_name = build_target or "default" + build_log = os.path.join(logs_dir, f"build-matrix-{build_name}.log") + print(f"RUN build: {' '.join(build_cmd)}") + result.build = run_logged(build_cmd, build_log) + if result.build.ok: + print(f"OK build: {result.build.elapsed:.2f}s ({build_log})") + else: + describe_failure(result.build, tail_count) + + return result + + +def restore_version(version: str, tail_count: int) -> bool: + print_section(f"Restore {version}") + log_path = os.path.join(ROOT_DIR, "build", version, "logs", "build-matrix-restore.log") + step = run_logged([sys.executable, "configure.py", "--version", version], log_path) + if step.ok: + print(f"OK restore: {step.elapsed:.2f}s ({log_path})") + return True + + describe_failure(step, tail_count) + return False + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser( + description="Check sequential builds across all supported platforms." + ) + parser.add_argument( + "--version", + dest="versions", + action="append", + choices=sorted(PLATFORM_BY_VERSION.keys()), + help="Limit the run to one or more versions (default: all platforms).", + ) + parser.add_argument( + "--all-source", + action="store_true", + help="Run `ninja all_source` instead of the default full `ninja`.", + ) + parser.add_argument( + "--jobs", + type=int, + default=1, + help="Parallelism passed to ninja (default: 1).", + ) + parser.add_argument( + "--tail", + type=int, + default=40, + help="How many output lines to print when a step fails (default: 40).", + ) + parser.add_argument( + "--restore-version", + default=DEFAULT_RESTORE_VERSION, + choices=sorted(PLATFORM_BY_VERSION.keys()), + help=f"Version to restore at the end (default: {DEFAULT_RESTORE_VERSION}).", + ) + parser.add_argument( + "--no-restore", + action="store_true", + help="Leave the worktree configured for the last checked version.", + ) + return parser.parse_args() + + +def print_summary( + results: Sequence[PlatformResult], restore_version_name: str, restore_ok: Optional[bool] +) -> None: + print_section("Summary") + for result in results: + if result.preflight_error is not None: + print(f"FAIL {result.platform.version}: {result.preflight_error}") + continue + if result.configure is None or not result.configure.ok: + assert result.configure is not None + print( + f"FAIL {result.platform.version}: configure exit {result.configure.returncode} " + f"({result.configure.elapsed:.2f}s)" + ) + continue + if result.build is None or not result.build.ok: + assert result.build is not None + print( + f"FAIL {result.platform.version}: build exit {result.build.returncode} " + f"({result.build.elapsed:.2f}s)" + ) + continue + total = result.configure.elapsed + result.build.elapsed + print(f"OK {result.platform.version}: {total:.2f}s") + + if restore_ok is not None: + status = "OK" if restore_ok else "FAIL" + print(f"{status:4} restore: {restore_version_name}") + + +args = parse_args() + + +def main() -> int: + selected_versions = args.versions or [platform.version for platform in PLATFORMS] + platforms = [PLATFORM_BY_VERSION[version] for version in selected_versions] + build_target = "all_source" if args.all_source else None + results: List[PlatformResult] = [] + restore_ok: Optional[bool] = None + + print(f"Root: {ROOT_DIR}") + print(f"Build target: {build_target or 'ninja default'}") + + try: + for platform in platforms: + results.append(run_platform(platform, build_target, args.jobs, args.tail)) + finally: + if not args.no_restore: + restore_ok = restore_version(args.restore_version, args.tail) + + print_summary(results, args.restore_version, restore_ok) + + if restore_ok is False: + return 1 + if any(not result.ok for result in results): + return 1 + return 0 + + +if __name__ == "__main__": + sys.exit(main()) From 6b35f229c3bf26032fbedc9862e246abcec93fa5 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 16:51:05 +0100 Subject: [PATCH 409/691] tooling: extend health checks for Xbox and PS2 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- tools/decomp-workflow.py | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/tools/decomp-workflow.py b/tools/decomp-workflow.py index 6be2b3d80..a00215d82 100644 --- a/tools/decomp-workflow.py +++ b/tools/decomp-workflow.py @@ -56,6 +56,9 @@ PS2_SYMBOLS = os.path.join(ROOT_DIR, "config", "SLES-53558-A124", "symbols.txt") GC_DWARF = os.path.join(ROOT_DIR, "symbols", "Dwarf") DEBUG_LINES = os.path.join(ROOT_DIR, "symbols", "debug_lines.txt") +X360_COMPILER_DIR = os.path.join(ROOT_DIR, "build", "compilers", "X360", "14.00.2110") +PS2_COMPILER_DIR = os.path.join(ROOT_DIR, "build", "compilers", "PS2", "ee-gcc2.9-991111") +MIPS_BINUTILS_DIR = os.path.join(ROOT_DIR, "build", "mips_binutils") DEFAULT_SMOKE_UNIT = "main/Speed/Indep/SourceLists/zCamera" DEBUG_SYMBOL_PROBE_MANGLED = "UpdateAll__6Cameraf" @@ -70,10 +73,32 @@ SHARED_ASSET_REQUIREMENTS = [ (os.path.join("build", "tools"), "downloaded tooling"), (os.path.join("orig", "GOWE69", "NFSMWRELEASE.ELF"), "GameCube original ELF"), + ( + os.path.join("orig", "EUROPEGERMILESTONE", "NfsMWEuropeGerMilestone.xex"), + "Xbox original XEX", + ), (os.path.join("orig", "SLES-53558-A124", "NFS.ELF"), "PS2 original ELF"), (os.path.join("symbols", "Dwarf"), "DWARF dump"), ] +PLATFORM_BUILD_REQUIREMENTS = [ + ( + "x360-compiler", + X360_COMPILER_DIR, + "missing (seed build/compilers in this worktree for Xbox builds)", + ), + ( + "ps2-compiler", + PS2_COMPILER_DIR, + "missing (seed build/compilers in this worktree for PS2 builds)", + ), + ( + "ps2-binutils", + MIPS_BINUTILS_DIR, + "missing (seed build/mips_binutils in this worktree for PS2 builds)", + ), +] + class WorkflowError(RuntimeError): pass @@ -403,6 +428,14 @@ def build_shared_unit_cached(unit: str) -> str: except WorkflowError as e: report(False, "ghidra", str(e)) + print_section("Platform Build Inputs") + for label, abs_path, missing_detail in PLATFORM_BUILD_REQUIREMENTS: + report( + os.path.exists(abs_path), + label, + describe_path(abs_path) if os.path.exists(abs_path) else missing_detail, + ) + print_section("Debug Symbol Checks") try: gc_addr = lookup_symbol_address(GC_SYMBOLS, DEBUG_SYMBOL_PROBE_MANGLED) @@ -944,7 +977,7 @@ def build_parser() -> argparse.ArgumentParser: health = subparsers.add_parser( "health", - help="Check whether the current worktree is ready for GC and PS2 decomp work", + help="Check whether the current worktree is ready for GC, Xbox, and PS2 work", ) health.add_argument( "--full", From c2f0a6556bfe44a3c2a78214708f559c72d26f8d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 17:26:05 +0100 Subject: [PATCH 410/691] 80.3%: improve GRaceStatus::UpdateAdaptiveDifficulty Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 72cbfc4ff..d3bbe3ff9 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3555,11 +3555,7 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable float race_lose_margin; float lose_margin; - if (mRaceParms) { - num_laps = static_cast(bMax(1, mRaceParms->GetNumLaps())); - } else { - num_laps = 1.0f; - } + num_laps = static_cast(bMax(1, GetRaceParameters()->GetNumLaps())); lose_margin = (GetRaceLength() * (100.0f - eliminated_player->GetPctRaceComplete())) * 0.01f; race_lose_margin = GetRaceLength() / num_laps; From 882a531e85065c5310e4e983b5e768c1a0923747 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 17:29:42 +0100 Subject: [PATCH 411/691] 80.3%: improve GRaceStatus::DetermineRaceSegmentLength Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index d3bbe3ff9..529cec217 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3920,9 +3920,6 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c UMath::Vector3 delta; float pathDistance; float segmentDistance = 0.0f; - UTL::Std::set pathSegments; - char shortcutAllowed[32]; - bool noShortcuts = true; nav.SetNavType(WRoadNav::kTypeDirection); nav.SetDecisionFilter(true); @@ -3949,6 +3946,10 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c } while (segment == nav.GetSegmentInd()); } + UTL::Std::set pathSegments; + char shortcutAllowed[32]; + bool noShortcuts = true; + bMemSet(shortcutAllowed, 1, sizeof(shortcutAllowed)); while (true) { bool foundPath; From 878f216eb1f613fd56a81e1639117055cf6ff7f0 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 17:35:22 +0100 Subject: [PATCH 412/691] 80.3%: improve GRaceStatus::ComputeCatchUpSkill Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 529cec217..c3c75193c 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3600,7 +3600,9 @@ bool GRaceStatus::ComputeCatchUpSkill(GRacerInfo *racer_info, PidError *pid, flo if (off_world) { glue_level = 1.0f; } else { - if (GetRaceContext() == GRace::kRaceContext_QuickRace) { + GRace::Context raceContext = GetRaceContext(); + + if (raceContext == GRace::kRaceContext_QuickRace) { if (!mRaceParms) { return false; } @@ -3610,11 +3612,7 @@ bool GRaceStatus::ComputeCatchUpSkill(GRacerInfo *racer_info, PidError *pid, flo } glue_level = Tweak_QuickRaceGlue[mRaceParms->GetDifficulty()]; - } else { - if (GetRaceContext() != GRace::kRaceContext_Career) { - return false; - } - + } else if (raceContext == GRace::kRaceContext_Career) { glue_level = UMath::Clamp((GetAdaptiveDifficutly() + 1.0f) * 0.5f, 0.0f, 1.0f); if (mRaceParms) { use_race_override = mRaceParms->GetCatchUpOverride(); @@ -3623,6 +3621,8 @@ bool GRaceStatus::ComputeCatchUpSkill(GRacerInfo *racer_info, PidError *pid, flo glue_level = UMath::Lerp(glue_level, 1.0f, 0.5f); } } + } else { + return false; } } From fc2544dd42bcd430b05babb0c62065322f926fe0 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 17:39:27 +0100 Subject: [PATCH 413/691] 80.3%: improve GRacerInfo::CreateVehicle Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index c3c75193c..44cda105f 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -381,9 +381,7 @@ IVehicle *GRacerInfo::CreateVehicle(unsigned int default_key) { } cache = nullptr; - bool raceStatusExists = GRaceStatus::Exists(); - - if (raceStatusExists) { + if (GRaceStatus::Exists()) { GRaceStatus *raceStatus = &GRaceStatus::Get(); cache = reinterpret_cast(reinterpret_cast(raceStatus) + 0x10); @@ -394,6 +392,7 @@ IVehicle *GRacerInfo::CreateVehicle(unsigned int default_key) { if (result) { if (result->QueryInterface(&vehicle)) { SetSimable(result); + return vehicle; } } From 46ce727d9f3dcb0948d9bb7e4f66b420ebeed73b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 17:40:57 +0100 Subject: [PATCH 414/691] 80.3%: improve GRaceStatus::UpdateAdaptiveDifficulty Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 44cda105f..e7108410c 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3442,7 +3442,7 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable } } - if (percent_human_complete < percent_ai_complete && percent_human_complete > 0.0f) { + if (percent_ai_complete > percent_human_complete && percent_human_complete > 0.0f) { float lose_margin = ((percent_ai_complete - percent_human_complete) * (GetRaceLength() * 0.01f)) / 300.0f; float t = UMath::Ramp(lose_margin, 0.0f, 1.0f); float bonus = UMath::Lerp(0.0f, -0.4f, t); @@ -3466,7 +3466,7 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable } } - if (percent_human_complete < percent_ai_complete && percent_human_complete > 0.0f) { + if (percent_ai_complete > percent_human_complete && percent_human_complete > 0.0f) { float lose_margin = ((percent_ai_complete - percent_human_complete) * (GetRaceLength() * 0.01f)) / 300.0f; float t = UMath::Ramp(lose_margin, 0.0f, 1.0f); float bonus = UMath::Lerp(0.0f, -0.4f, t); @@ -3495,17 +3495,17 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable if (total_points > 0.0f && player_points > 0.0f && ai_points > 0.0f) { float point_spread_ratio = (player_points - ai_points) / total_points; - if (point_spread_ratio <= 0.0f) { - float win_margin = -point_spread_ratio; - float t = UMath::Ramp(win_margin, 0.0f, 0.2f); - float bonus = UMath::Lerp(0.0f, -0.2f, t); - - difficulty = bClamp(difficulty + bonus, -1.0f, 1.0f); - } else { + if (point_spread_ratio > 0.0f) { float lose_margin = point_spread_ratio; float t = UMath::Ramp(lose_margin, 0.05f, 0.2f); float bonus = UMath::Lerp(0.0f, 0.2f, t); + difficulty = bClamp(difficulty + bonus, -1.0f, 1.0f); + } else { + float win_margin = -point_spread_ratio; + float t = UMath::Ramp(win_margin, 0.0f, 0.2f); + float bonus = UMath::Lerp(0.0f, -0.2f, t); + difficulty = bClamp(difficulty + bonus, -1.0f, 1.0f); } From 4b6560cd0b9b1b2d95740c8afb07b291ec16f5fd Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 17:43:00 +0100 Subject: [PATCH 415/691] 80.5%: improve GRaceStatus::ComputeCatchUpSkill Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 27 +++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index e7108410c..6e8946433 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3599,29 +3599,32 @@ bool GRaceStatus::ComputeCatchUpSkill(GRacerInfo *racer_info, PidError *pid, flo if (off_world) { glue_level = 1.0f; } else { - GRace::Context raceContext = GetRaceContext(); - - if (raceContext == GRace::kRaceContext_QuickRace) { - if (!mRaceParms) { - return false; - } - - if (!mRaceParms->GetCatchUp()) { + if (GetRaceContext() != GRace::kRaceContext_QuickRace) { + if (GetRaceContext() != GRace::kRaceContext_Career) { return false; } - glue_level = Tweak_QuickRaceGlue[mRaceParms->GetDifficulty()]; - } else if (raceContext == GRace::kRaceContext_Career) { glue_level = UMath::Clamp((GetAdaptiveDifficutly() + 1.0f) * 0.5f, 0.0f, 1.0f); if (mRaceParms) { - use_race_override = mRaceParms->GetCatchUpOverride(); + if (mRaceParms->GetCatchUpOverride()) { + use_race_override = true; + } + if (mRaceParms->GetIsBossRace()) { is_boss = true; glue_level = UMath::Lerp(glue_level, 1.0f, 0.5f); } } } else { - return false; + if (!mRaceParms) { + return false; + } + + if (!mRaceParms->GetCatchUp()) { + return false; + } + + glue_level = Tweak_QuickRaceGlue[mRaceParms->GetDifficulty()]; } } From 888f5e3442fdb5bc2bdc3b1e93512a6c3c198132 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 17:45:27 +0100 Subject: [PATCH 416/691] 80.6%: improve GRaceStatus::SetRoaming Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 6e8946433..7d9ef49a8 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2783,11 +2783,11 @@ void GRaceStatus::SetRoaming() { bool dDay = false; if (mRaceParms) { + lastDDay = bStrCmp(mRaceParms->GetEventID(), "16.2.1") == 0; const Attrib::Gen::gameplay *gameplayObj = mRaceParms->GetGameplayObj(); const unsigned int *startNewGame = reinterpret_cast(gameplayObj->GetAttributePointer(0x64273C71, 0)); - lastDDay = bStrCmp(mRaceParms->GetEventID(), "16.2.1") == 0; if (!startNewGame) { startNewGame = reinterpret_cast(Attrib::DefaultDataArea(sizeof(unsigned int))); } From a4ff16889992f90dbbb31b97447b1aa3fa89a880 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 17:53:56 +0100 Subject: [PATCH 417/691] 80.7%: improve GRaceStatus::SetRoaming Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 7d9ef49a8..0f6393ce1 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2801,7 +2801,7 @@ void GRaceStatus::SetRoaming() { mPlayMode = kPlayMode_Roaming; SetRaceContext(GRace::kRaceContext_Career); - SetIsLoading(false); + mIsLoading = false; mRaceParms = nullptr; WRoadNetwork::Get().ResetShortcuts(); From bf2655dbba192c09a2dbf887c2143fb5b0962389 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 17:57:06 +0100 Subject: [PATCH 418/691] 80.8%: improve GRaceStatus::UpdateAdaptiveDifficulty Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 0f6393ce1..f09f9df4d 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3484,10 +3484,10 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable return; } - if (!GetRacerInfo(i).GetGameCharacter()) { - player_points = GetRacerInfo(i).GetPointTotal(); - } else { + if (GetRacerInfo(i).GetGameCharacter()) { ai_points = UMath::Max(ai_points, GetRacerInfo(i).GetPointTotal()); + } else { + player_points = GetRacerInfo(i).GetPointTotal(); } } From 232e142a582242269313425b4257288ccd0690fc Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 18:06:43 +0100 Subject: [PATCH 419/691] 80.8%: improve GCharacter::AttemptSpawn Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GCharacter.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp index 1a5a2efb8..251849f0c 100644 --- a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp +++ b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp @@ -74,12 +74,17 @@ bool GCharacter::AttemptSpawn() { if (mState == kCharState_Unspawned) { const char *carType = CarType(0); const char *carTypeLowMem = CarTypeLowMem(0); + const char *spawnCarType = carType; bool isCop = bStrCmp(carType, "copmidsize") == 0; - DriverClass driverClass = isCop ? DRIVER_COP : DRIVER_TRAFFIC; + DriverClass driverClass = DRIVER_TRAFFIC; bool spawn_ok = true; + if (isCop) { + driverClass = DRIVER_COP; + } + if (carTypeLowMem && *carTypeLowMem) { - carType = carTypeLowMem; + spawnCarType = carTypeLowMem; } if (SkipFE) { @@ -93,10 +98,10 @@ bool GCharacter::AttemptSpawn() { } if (spawn_ok) { - ISimable *isimable = GManager::Get().GetStockCar(carType); + ISimable *isimable = GManager::Get().GetStockCar(spawnCarType); if (!isimable) { - VehicleParams params(&GManager::Get(), driverClass, Attrib::StringToKey(carType), mSpawnDir, mSpawnPos, 0, nullptr, 0); + VehicleParams params(&GManager::Get(), driverClass, Attrib::StringToKey(spawnCarType), mSpawnDir, mSpawnPos, 0, nullptr, 0); isimable = UTL::COM::Factory::CreateInstance("PVehicle", params); if (!isimable) { From 92b62e94ee35cf48266710cb3220787909f41966 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 18:08:56 +0100 Subject: [PATCH 420/691] 80.8%: improve GCharacter::AttemptSpawn Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GCharacter.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp index 251849f0c..f8aedf9c4 100644 --- a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp +++ b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp @@ -76,11 +76,13 @@ bool GCharacter::AttemptSpawn() { const char *carTypeLowMem = CarTypeLowMem(0); const char *spawnCarType = carType; bool isCop = bStrCmp(carType, "copmidsize") == 0; - DriverClass driverClass = DRIVER_TRAFFIC; + DriverClass driverClass; bool spawn_ok = true; if (isCop) { driverClass = DRIVER_COP; + } else { + driverClass = DRIVER_TRAFFIC; } if (carTypeLowMem && *carTypeLowMem) { @@ -88,13 +90,11 @@ bool GCharacter::AttemptSpawn() { } if (SkipFE) { - int disable = SkipFEDisableTraffic; - if (isCop) { - disable = SkipFEDisableCops; + spawn_ok = SkipFEDisableCops == 0; + } else { + spawn_ok = SkipFEDisableTraffic == 0; } - - spawn_ok = disable == 0; } if (spawn_ok) { From a736738abce656eddc677b69f95d0fd755c523bd Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 18:12:16 +0100 Subject: [PATCH 421/691] 80.7%: improve GCharacter::AttemptSpawn Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GCharacter.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp index f8aedf9c4..20fcd7c15 100644 --- a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp +++ b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp @@ -74,19 +74,12 @@ bool GCharacter::AttemptSpawn() { if (mState == kCharState_Unspawned) { const char *carType = CarType(0); const char *carTypeLowMem = CarTypeLowMem(0); - const char *spawnCarType = carType; bool isCop = bStrCmp(carType, "copmidsize") == 0; - DriverClass driverClass; + DriverClass driverClass = DRIVER_TRAFFIC; bool spawn_ok = true; if (isCop) { driverClass = DRIVER_COP; - } else { - driverClass = DRIVER_TRAFFIC; - } - - if (carTypeLowMem && *carTypeLowMem) { - spawnCarType = carTypeLowMem; } if (SkipFE) { @@ -98,10 +91,16 @@ bool GCharacter::AttemptSpawn() { } if (spawn_ok) { - ISimable *isimable = GManager::Get().GetStockCar(spawnCarType); + if (carTypeLowMem) { + if (*carTypeLowMem) { + carType = carTypeLowMem; + } + } + + ISimable *isimable = GManager::Get().GetStockCar(carType); if (!isimable) { - VehicleParams params(&GManager::Get(), driverClass, Attrib::StringToKey(spawnCarType), mSpawnDir, mSpawnPos, 0, nullptr, 0); + VehicleParams params(&GManager::Get(), driverClass, Attrib::StringToKey(carType), mSpawnDir, mSpawnPos, 0, nullptr, 0); isimable = UTL::COM::Factory::CreateInstance("PVehicle", params); if (!isimable) { From 46a21a7217dd9b38cdcb0423d89173ee7cc74d9c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 18:15:59 +0100 Subject: [PATCH 422/691] 80.8%: match+ GCharacter::Attach Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GCharacter.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GCharacter.h b/src/Speed/Indep/Src/Gameplay/GCharacter.h index ca9f1ca6b..738816e92 100644 --- a/src/Speed/Indep/Src/Gameplay/GCharacter.h +++ b/src/Speed/Indep/Src/Gameplay/GCharacter.h @@ -40,15 +40,15 @@ class GCharacter : public GRuntimeInstance, public UTL::COM::Object, public IAtt } bool Attach(IUnknown *pOther) override { - return false; + return mAttachments->Attach(pOther); } bool Detach(IUnknown *pOther) override { - return false; + return mAttachments->Detach(pOther); } bool IsAttached(const IUnknown *pOther) const override { - return false; + return mAttachments->IsAttached(pOther); } const IAttachable::List *GetAttachments() const override { From afad72bd7ca77ff02bcac855ffd8a6d7061a7411 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 18:22:11 +0100 Subject: [PATCH 423/691] 80.8%: match+ GTrigger::Reset Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index a4e6f7c23..7e019ae24 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -350,9 +350,6 @@ void GTrigger::NotifySimableTrigger(ISimable *isim, int triggerStimulus) { void GTrigger::Reset() { mSimObjInside.clear(); - mTriggerEnabled = 0; - mActivationReferences = 0; - Enable(false); } void GTrigger::ShowIcon() { From c1acc0cf26a3c1c3fa1611203cf77a17ed752d0d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 18:24:21 +0100 Subject: [PATCH 424/691] 80.8%: match+ GTrigger::EnableParticleEffects Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 7e019ae24..d68835ec7 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -246,12 +246,12 @@ void GTrigger::ClearParticleEffects() { } void GTrigger::EnableParticleEffects(bool enabled) { - for (int i = 0; i < 2; i++) { - if (mParticleEffect[i]) { + for (unsigned int onEffect = 0; onEffect < 2; onEffect++) { + if (mParticleEffect[onEffect]) { if (enabled) { - mParticleEffect[i]->Enable(); + mParticleEffect[onEffect]->Enable(); } else { - mParticleEffect[i]->Disable(); + mParticleEffect[onEffect]->Disable(); } } } From e507f99de6cff6fb91b208176b87a8623e552db7 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 18:26:56 +0100 Subject: [PATCH 425/691] 80.9%: match+ GTrigger::ClearParticleEffects Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index d68835ec7..bdbc626e9 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -237,12 +237,16 @@ void GTrigger::CreateAllParticleEffects() { } void GTrigger::ClearParticleEffects() { - for (int i = 0; i < 2; i++) { - if (mParticleEffect[i]) { - delete mParticleEffect[i]; - mParticleEffect[i] = nullptr; + for (unsigned int onEffect = 0; onEffect < 2; onEffect++) { + if (mParticleEffect[onEffect]) { + mParticleEffect[onEffect]->UnSubscribe(); + if (mParticleEffect[onEffect]) { + delete mParticleEffect[onEffect]; + } } } + + bMemSet(mParticleEffect, 0, sizeof(mParticleEffect)); } void GTrigger::EnableParticleEffects(bool enabled) { From 51bd10095608cddc41292830c3f2b13fa0be222f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 18:33:04 +0100 Subject: [PATCH 426/691] 80.9%: match+ GTrigger::CreateParticleEffect Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 29 ++++++++++++----------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index bdbc626e9..08f31d7b7 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -1,6 +1,7 @@ #include "Speed/Indep/Src/Gameplay/GTrigger.h" #include "Speed/Indep/Src/Ecstasy/EmitterSystem.h" +#include "Speed/Indep/Src/Ecstasy/Ecstasy.hpp" #include "Speed/Indep/Src/Ecstasy/eMath.hpp" #include "Speed/Indep/Src/Frontend/Database/FEDatabase.hpp" #include "Speed/Indep/Src/Generated/Messages/MTriggerEnter.h" @@ -191,22 +192,22 @@ void GTrigger::RemoveActivationReference() { } EmitterGroup *GTrigger::CreateParticleEffect(const char *effectName, UMath::Vector3 &pos) { - Attrib::StringKey effectKey(effectName); - EmitterGroup *group = gEmitterSystem.CreateEmitterGroup(effectKey, 0x8040000); - - if (group) { - bMatrix4 localWorld; - bVector3 translation(pos.z, pos.y, -pos.x); - - eCreateTranslationMatrix(&localWorld, translation); - group->SetLocalWorld(&localWorld); - group->SetAutoUpdate(true); - group->SubscribeToDeletion(this, NotifyEmitterGroupDelete); - group->Disable(); - gEmitterSystem.AddEmitterGroup(group); + EmitterGroup *effect = gEmitterSystem.CreateEmitterGroup(Attrib::StringKey(effectName), 0x8040000); + + if (effect) { + bMatrix4 mat; + bVector3 posSwizzled; + + eSwizzleWorldVector(reinterpret_cast(pos), posSwizzled); + eCreateTranslationMatrix(&mat, posSwizzled); + effect->SetLocalWorld(&mat); + effect->SetAutoUpdate(true); + effect->SubscribeToDeletion(this, NotifyEmitterGroupDelete); + effect->Disable(); + gEmitterSystem.AddEmitterGroup(effect); } - return group; + return effect; } void GTrigger::CreateAllParticleEffects() { From af261125c75a39b29ccc541a7d8b032728b456bc Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 18:44:55 +0100 Subject: [PATCH 427/691] 80.9%: improve GTrigger::CreateAllParticleEffects Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 08f31d7b7..b13c41981 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -220,11 +220,14 @@ void GTrigger::CreateAllParticleEffects() { GetPosition(pos); flareSpacing = FlareSpacing(0); if (flareSpacing > 0.0f) { - UMath::Vector3 upVec = UMath::Vector3Make(0.0f, 1.0f, 0.0f); + UMath::Vector3 upVec; UMath::Vector3 lateralVec; UMath::Vector3 posLeft; UMath::Vector3 posRight; + upVec.x = 0.0f; + upVec.y = 1.0f; + upVec.z = 0.0f; bCross(reinterpret_cast(&lateralVec), reinterpret_cast(&upVec), reinterpret_cast(&mDirection)); bScale(reinterpret_cast(&lateralVec), reinterpret_cast(&lateralVec), flareSpacing); bScaleAdd(reinterpret_cast(&posLeft), reinterpret_cast(&pos), reinterpret_cast(&lateralVec), -1.0f); From c9b94f54c6a3794b273a909b5dd3c14664783ee3 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 18:50:31 +0100 Subject: [PATCH 428/691] disallow sub agents --- AGENTS.md | 29 +---------------------------- 1 file changed, 1 insertion(+), 28 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index bf0cba804..c55e27cb4 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -39,16 +39,7 @@ objdiff.json Generated build/diff configuration ## Sub-Agent Usage -Sub-agents are allowed only for **read-only exploration** tasks such as: - -- searching the codebase for symbols, call sites, or include relationships -- inspecting decomp output, assembly, DWARF, PS2 dumps, or line mappings -- gathering context from Ghidra, `tools/decomp-workflow.py`, `lookup.py`, `decomp-diff.py`, or similar tools -- summarizing findings that help the main worker decide what to change - -Sub-agents must **not** write or edit code files, headers, configs, or other repository files. -All persistent file changes, decomp implementations, scaffolding, and follow-up fixes must be -done by the main worker after reviewing the read-only findings. +Sub-agents are **strictly prohibited**. Do not use sub-agents for any tasks (whether read-only exploration or editing). All work must be performed by the main worker directly. ## Forbidden Changes @@ -382,28 +373,10 @@ Examples: Do not batch up multiple percentage milestones into one commit — commit as each improvement lands. -## Parallel Sub-Agent Matching - -When working on a translation unit with multiple non-matching functions, use sub-agents selectively for **read-only exploration** around individual functions. Each sub-agent should focus on **exactly one function** — do not assign a sub-agent more than one function at a time. - -**Limit: never run more than 5 sub-agents concurrently.** Spawning too many at once causes resource contention and makes it harder to reason about progress. - -Guidelines: - -- Prefer solving difficult matching work in the main worker. Use sub-agents to inspect one function's context, diff, DWARF, or related call paths without editing files. -- Spawn a sub-agent per function only when the functions are independent (no shared edits to the same source lines). -- Sub-agents stay read-only. Let them inspect existing diff/context output rather than compiling or rebuilding. -- Do not sit idle waiting for sub-agents to finish. Continue with other independent investigation while they run. -- After a useful result lands and you make a real improvement, check the updated match percentage and commit if it improved. - ## Matching Philosophy You should take the Ghidra decompiler output for the initial translation step, get it to compile, make sure that the dwarf of the function matches and only then look for binary matching problems in the assembly. Be aware Ghidra usually gets the order of branches incorrect in if statements (it inverts the logic and the two bodies are swapped), this needs to be fixed to achieve bytematching status. -You may use sub-agents to gather read-only context during this process, but they must not -edit files. Treat their output as analysis input for the main worker, not as a path to -delegate source changes. - A function is only done when both objdiff and normalized DWARF are exact. Treat a 100% instruction match with a DWARF mismatch as unfinished work, not a near-complete result. From 33cfd802ddd6c57f042f40127e47592de0c3a91c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 19:24:01 +0100 Subject: [PATCH 429/691] 81.2%: improve GTrigger::GTrigger Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GIcon.h | 4 - src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 89 +++++++------------ .../Generated/AttribSys/Classes/gameplay.h | 75 ++++++++++++++++ 3 files changed, 108 insertions(+), 60 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GIcon.h b/src/Speed/Indep/Src/Gameplay/GIcon.h index 2650d8e44..571f6c867 100644 --- a/src/Speed/Indep/Src/Gameplay/GIcon.h +++ b/src/Speed/Indep/Src/Gameplay/GIcon.h @@ -118,14 +118,10 @@ struct GIcon { inline void GIcon::Show() { SetFlag(kFlag_VisibleInWorld); - if (GetIsEnabled()) { - Enable(); - } } inline void GIcon::Hide() { ClearFlag(kFlag_VisibleInWorld); - Disable(); } inline void GIcon::HideUntilRespawn() { diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index b13c41981..3968f11a3 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -19,23 +19,15 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) : GRuntimeInstance(triggerKey, kGameplayObjType_Trigger), // mWorldTrigger() { - const UMath::Vector3 &pos = Position(0); + const UMath::Vector3 &pos = Position(); UMath::Vector3 dim; - const UMath::Vector3 *dimPtr = reinterpret_cast(GetAttributePointer(0x6D9E21AD, 0)); - bool hasDimensions = dimPtr != nullptr; + bool hasDimensions = Dimensions(dim); UMath::Vector3 posSwizzled = UMath::Vector3Make(-pos.y, pos.z, pos.x); UMath::Vector3 dimSwizzled; UMath::Matrix4 mat; float radius; EventStaticData *pTriggerData = &mEventStaticData; bool showIconBasedOnBin = true; - GIcon::Type iconType = GIcon::kType_Invalid; - - if (!dimPtr) { - dimPtr = reinterpret_cast(Attrib::DefaultDataArea(sizeof(UMath::Vector3))); - } - - dim = *dimPtr; dimSwizzled = UMath::Vector3Make(dim.x, dim.z, dim.y); mTriggerEnabled = 0; mIcon = nullptr; @@ -45,30 +37,26 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) mSimObjInside.reserve(8); { - UMath::Matrix4 rotMat = UMath::Matrix4::kIdentity; - UMath::Vector3 initialVec = UMath::Vector3Make(0.0f, 0.0f, 1.0f); + UMath::Matrix4 rotMat; + UMath::Vector3 initialVec = {0.0f, 0.0f, 1.0f}; - MATRIX4_multyrot(&rotMat, -Rotation(0) * 0.00069444446f, &rotMat); - VU0_MATRIX3x4_vect3mult(initialVec, rotMat, mDirection); + UMath::Init(rotMat, 1.0f, 1.0f, 1.0f); + UMath::MultYRot(rotMat, -Rotation() * 0.00069444446f, rotMat); + UMath::Rotate(initialVec, rotMat, mDirection); mat = rotMat; } UMath::Set(mat, 3, UMath::Vector4Make(posSwizzled, 1.0f)); if (hasDimensions) { - new (&mWorldTrigger) WTrigger(mat, dimSwizzled, &mEventList, OneShot(0) ? 2 : 0); + new (&mWorldTrigger) WTrigger(mat, dimSwizzled, &mEventList, OneShot() ? 2 : 0); } else { - const float *radiusPtr = reinterpret_cast(GetAttributePointer(0x39BF8002, 0)); - - if (radiusPtr) { - radius = *radiusPtr; - } else { - float width = Width(0); - + if (!Radius(radius)) { + float width = Width(); radius = UMath::Sqrt(width * width + 1.0f); } - new (&mWorldTrigger) WTrigger(mat, radius, radius * 2.0f, &mEventList, OneShot(0) ? 2 : 0); + new (&mWorldTrigger) WTrigger(mat, radius, radius * 2.0f, &mEventList, OneShot() ? 2 : 0); } mEventList.fNumEvents = 1; @@ -84,8 +72,11 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) if (IsDerivedFromTemplate(0xF05931AB)) { SetFlag(0x200); - GRaceParameters *parms = GRaceDatabase::Get().GetRaceFromKey(TargetActivity(0).GetCollectionKey()); + const GCollectionKey &targetActivityKey = TargetActivity(); + GRaceParameters *parms = GRaceDatabase::Get().GetRaceFromKey(targetActivityKey.GetCollectionKey()); if (parms) { + GIcon::Type iconType = GIcon::kType_Invalid; + if (parms->GetIsBossRace()) { iconType = GIcon::kType_RaceRival; } else { @@ -120,20 +111,20 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) } } else if (IsDerivedFromTemplate(0x73049919)) { SetFlag(0x2000); - iconType = GIcon::kType_GateCarLot; + mIcon = GManager::Get().AllocIcon(GIcon::kType_GateCarLot, posSwizzled, 0.0f, false); } else if (IsDerivedFromTemplate(0x4698966B)) { SetFlag(0x4000); - iconType = GIcon::kType_GateCustomShop; + mIcon = GManager::Get().AllocIcon(GIcon::kType_GateCustomShop, posSwizzled, 0.0f, false); } else if (IsDerivedFromTemplate(0x326427BB)) { SetFlag(0x8000); - iconType = GIcon::kType_GateSafehouse; + mIcon = GManager::Get().AllocIcon(GIcon::kType_GateSafehouse, posSwizzled, 0.0f, false); } else if (IsDerivedFromTemplate(0xB05871D3)) { SetFlag(0x100); - if (OpenWorldSpeedTrap(0)) { - iconType = GIcon::kType_SpeedTrap; + if (OpenWorldSpeedTrap()) { + mIcon = GManager::Get().AllocIcon(GIcon::kType_SpeedTrap, posSwizzled, 0.0f, false); } else { - iconType = GIcon::kType_SpeedTrapInRace; showIconBasedOnBin = false; + mIcon = GManager::Get().AllocIcon(GIcon::kType_SpeedTrapInRace, posSwizzled, 0.0f, false); } } else if (IsDerivedFromTemplate(0x45E28759)) { SetFlag(0x400); @@ -142,22 +133,15 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) } else if (IsDerivedFromTemplate(0xA3E939E9)) { SetFlag(0x1000); } else if (IsDerivedFromTemplate(0x98217DBF)) { - iconType = GIcon::kType_AreaUnlock; - } - - if (!mIcon && iconType != GIcon::kType_Invalid) { - mIcon = GManager::Get().AllocIcon(iconType, posSwizzled, 0.0f, false); + mIcon = GManager::Get().AllocIcon(GIcon::kType_AreaUnlock, posSwizzled, 0.0f, false); } if (showIconBasedOnBin && mIcon) { - int binIndex = BinIndex(0); + int binIndex = BinIndex(); - if (binIndex > 0 && FEDatabase && FEDatabase->GetCareerSettings()->GetCurrentBin() <= binIndex) { - mIcon->SetFlag(1); - if (mIcon->GetIsEnabled()) { - mIcon->Enable(); - } - mIcon->SetFlag(2); + if (binIndex > 0 && FEDatabase && FEDatabase->GetCareerSettings()->GetCurrentBin() <= BinIndex()) { + mIcon->Show(); + mIcon->ShowOnMap(); } } } @@ -220,14 +204,11 @@ void GTrigger::CreateAllParticleEffects() { GetPosition(pos); flareSpacing = FlareSpacing(0); if (flareSpacing > 0.0f) { - UMath::Vector3 upVec; + const UMath::Vector3 upVec = {0.0f, 1.0f, 0.0f}; UMath::Vector3 lateralVec; UMath::Vector3 posLeft; UMath::Vector3 posRight; - upVec.x = 0.0f; - upVec.y = 1.0f; - upVec.z = 0.0f; bCross(reinterpret_cast(&lateralVec), reinterpret_cast(&upVec), reinterpret_cast(&mDirection)); bScale(reinterpret_cast(&lateralVec), reinterpret_cast(&lateralVec), flareSpacing); bScaleAdd(reinterpret_cast(&posLeft), reinterpret_cast(&pos), reinterpret_cast(&lateralVec), -1.0f); @@ -361,20 +342,16 @@ void GTrigger::Reset() { } void GTrigger::ShowIcon() { - GIcon *icon = mIcon; - - if (icon) { - icon->SetFlag(1); - icon->SetFlag(2); + if (mIcon) { + mIcon->Show(); + mIcon->ShowOnMap(); } } void GTrigger::HideIcon() { - GIcon *icon = mIcon; - - if (icon) { - icon->ClearFlag(1); - icon->ClearFlag(2); + if (mIcon) { + mIcon->Hide(); + mIcon->HideOnMap(); } } diff --git a/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h b/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h index 8ea58ade9..11a30eb8f 100644 --- a/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h +++ b/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h @@ -282,6 +282,14 @@ struct gameplay : Instance { return *resultptr; } + const bool &OpenWorldSpeedTrap() const { + const bool *resultptr = reinterpret_cast(this->GetAttributePointer(0x1bb16f14, 0)); + if (!resultptr) { + resultptr = reinterpret_cast(DefaultDataArea(sizeof(bool))); + } + return *resultptr; + } + const bool &OpenWorldSpeedTrap(unsigned int index) const { const bool *resultptr = reinterpret_cast(this->GetAttributePointer(0x1bb16f14, index)); if (!resultptr) { @@ -342,6 +350,14 @@ struct gameplay : Instance { return *resultptr; } + const GCollectionKey &TargetActivity() const { + const GCollectionKey *resultptr = reinterpret_cast(this->GetAttributePointer(0x277566f3, 0)); + if (!resultptr) { + resultptr = reinterpret_cast(DefaultDataArea(sizeof(GCollectionKey))); + } + return *resultptr; + } + const GCollectionKey &TargetActivity(unsigned int index) const { const GCollectionKey *resultptr = reinterpret_cast(this->GetAttributePointer(0x277566f3, index)); if (!resultptr) { @@ -426,6 +442,15 @@ struct gameplay : Instance { return *resultptr; } + bool Radius(float &result) const { + const float *resultptr = reinterpret_cast(this->GetAttributePointer(0x39bf8002, 0)); + if (!resultptr) { + return false; + } + result = *resultptr; + return true; + } + const float &Radius(unsigned int index) const { const float *resultptr = reinterpret_cast(this->GetAttributePointer(0x39bf8002, index)); if (!resultptr) { @@ -674,6 +699,14 @@ struct gameplay : Instance { return this->Get(0x56e1436d).GetLength(); } + const float &Width() const { + const float *resultptr = reinterpret_cast(this->GetAttributePointer(0x5816c1fc, 0)); + if (!resultptr) { + resultptr = reinterpret_cast(DefaultDataArea(sizeof(float))); + } + return *resultptr; + } + const float &Width(unsigned int index) const { const float *resultptr = reinterpret_cast(this->GetAttributePointer(0x5816c1fc, index)); if (!resultptr) { @@ -714,6 +747,14 @@ struct gameplay : Instance { return *resultptr; } + const float &Rotation() const { + const float *resultptr = reinterpret_cast(this->GetAttributePointer(0x5a6a57c6, 0)); + if (!resultptr) { + resultptr = reinterpret_cast(DefaultDataArea(sizeof(float))); + } + return *resultptr; + } + const float &Rotation(unsigned int index) const { const float *resultptr = reinterpret_cast(this->GetAttributePointer(0x5a6a57c6, index)); if (!resultptr) { @@ -846,6 +887,14 @@ struct gameplay : Instance { return *resultptr; } + const int &BinIndex() const { + const int *resultptr = reinterpret_cast(this->GetAttributePointer(0x6ce23062, 0)); + if (!resultptr) { + resultptr = reinterpret_cast(DefaultDataArea(sizeof(int))); + } + return *resultptr; + } + const int &BinIndex(unsigned int index) const { const int *resultptr = reinterpret_cast(this->GetAttributePointer(0x6ce23062, index)); if (!resultptr) { @@ -866,6 +915,16 @@ struct gameplay : Instance { return this->Get(0x6d7e73c9).GetLength(); } + bool Dimensions(UMath::Vector3 &result) const { + const UMath::Vector3 *resultptr = reinterpret_cast(this->GetAttributePointer(0x6d9e21ad, 0)); + bool hasResult = resultptr != nullptr; + if (!resultptr) { + resultptr = reinterpret_cast(DefaultDataArea(sizeof(UMath::Vector3))); + } + result = *resultptr; + return hasResult; + } + const UMath::Vector3 &Dimensions(unsigned int index) const { const UMath::Vector3 *resultptr = reinterpret_cast(this->GetAttributePointer(0x6d9e21ad, index)); if (!resultptr) { @@ -1174,6 +1233,14 @@ struct gameplay : Instance { return *resultptr; } + const UMath::Vector3 &Position() const { + const UMath::Vector3 *resultptr = reinterpret_cast(this->GetAttributePointer(0x9f743a0e, 0)); + if (!resultptr) { + resultptr = reinterpret_cast(DefaultDataArea(sizeof(UMath::Vector3))); + } + return *resultptr; + } + const UMath::Vector3 &Position(unsigned int index) const { const UMath::Vector3 *resultptr = reinterpret_cast(this->GetAttributePointer(0x9f743a0e, index)); if (!resultptr) { @@ -1564,6 +1631,14 @@ struct gameplay : Instance { return *resultptr; } + const bool &OneShot() const { + const bool *resultptr = reinterpret_cast(this->GetAttributePointer(0xce4261ac, 0)); + if (!resultptr) { + resultptr = reinterpret_cast(DefaultDataArea(sizeof(bool))); + } + return *resultptr; + } + const bool &OneShot(unsigned int index) const { const bool *resultptr = reinterpret_cast(this->GetAttributePointer(0xce4261ac, index)); if (!resultptr) { From 612a96db1a6f00949a1f88ed585407b9e1e58dc1 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 19:27:59 +0100 Subject: [PATCH 430/691] 81.3%: improve GTrigger::GTrigger Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 3968f11a3..cadeb1741 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -19,16 +19,7 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) : GRuntimeInstance(triggerKey, kGameplayObjType_Trigger), // mWorldTrigger() { - const UMath::Vector3 &pos = Position(); - UMath::Vector3 dim; - bool hasDimensions = Dimensions(dim); - UMath::Vector3 posSwizzled = UMath::Vector3Make(-pos.y, pos.z, pos.x); - UMath::Vector3 dimSwizzled; UMath::Matrix4 mat; - float radius; - EventStaticData *pTriggerData = &mEventStaticData; - bool showIconBasedOnBin = true; - dimSwizzled = UMath::Vector3Make(dim.x, dim.z, dim.y); mTriggerEnabled = 0; mIcon = nullptr; mEnabled = false; @@ -38,14 +29,26 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) { UMath::Matrix4 rotMat; - UMath::Vector3 initialVec = {0.0f, 0.0f, 1.0f}; + UMath::Vector3 initialVec; UMath::Init(rotMat, 1.0f, 1.0f, 1.0f); + initialVec.x = 0.0f; + initialVec.y = 0.0f; + initialVec.z = 1.0f; UMath::MultYRot(rotMat, -Rotation() * 0.00069444446f, rotMat); UMath::Rotate(initialVec, rotMat, mDirection); mat = rotMat; } + const UMath::Vector3 &pos = Position(); + UMath::Vector3 dim; + bool hasDimensions = Dimensions(dim); + UMath::Vector3 posSwizzled = UMath::Vector3Make(-pos.y, pos.z, pos.x); + UMath::Vector3 dimSwizzled = UMath::Vector3Make(dim.x, dim.z, dim.y); + float radius; + EventStaticData *pTriggerData = &mEventStaticData; + bool showIconBasedOnBin = true; + UMath::Set(mat, 3, UMath::Vector4Make(posSwizzled, 1.0f)); if (hasDimensions) { From e90e76c41119d3f90c89ee7a318eb2520c7982e1 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 19:45:13 +0100 Subject: [PATCH 431/691] 81.5%: match+ GTrigger::~GTrigger Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRuntimeInstance.h | 8 ++++++++ src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 12 +++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.h b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.h index 281741733..497fa1062 100644 --- a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.h +++ b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.h @@ -5,6 +5,7 @@ #pragma once #endif +#include "Speed/Indep/Libs/Support/Utility/FastMem.h" #include "Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h" class GMarker; @@ -28,6 +29,13 @@ class GRuntimeInstance : public Attrib::Gen::gameplay { virtual ~GRuntimeInstance(); + static void operator delete(void *mem, unsigned int size) { + if (mem) { + gFastMem.Free(mem, size, nullptr); + } + } + + void SetConnectionBuffer(ConnectedInstance *destBuffer, unsigned int numEntries); void AllocateConnectionBuffer(unsigned int numEntries); diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index cadeb1741..0e81e7055 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -150,7 +150,17 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) } GTrigger::~GTrigger() { - ClearParticleEffects(); + Disable(); + + for (unsigned int onEffect = 0; onEffect < 2; onEffect++) { + if (mParticleEffect[onEffect]) { + mParticleEffect[onEffect]->UnSubscribe(); + if (mParticleEffect[onEffect]) { + delete mParticleEffect[onEffect]; + } + } + } + if (mIcon) { GManager::Get().FreeIcon(mIcon); mIcon = nullptr; From d3121ff6279e197b8335fa4606f01e3b18b1ff0c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 19:53:49 +0100 Subject: [PATCH 432/691] 81.5%: improve GTrigger::NotifySimableTrigger Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 16 ++++++++++++---- .../Src/Generated/AttribSys/Classes/gameplay.h | 4 ++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 0e81e7055..3bfb657c2 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -328,11 +328,14 @@ void GTrigger::NotifySimableTrigger(ISimable *isim, int triggerStimulus) { bool triggerExited = triggerStimulus == 2; bool triggerInside = triggerStimulus == 1; bool wasInside = IsInside(isim); + if (triggerExited) { MarkAsOutside(isim); - if (FireOnExit(0)) { + if (FireOnExit()) { UCrc32 triggerMessage(0x20D60DBF); - MTriggerExit msg(GCollectionKey(this), isim->GetInstanceHandle()); + HSIMABLE handle = isim->GetInstanceHandle(); + GCollectionKey sender(this); + MTriggerExit msg(sender, handle); msg.Post(triggerMessage); } } @@ -341,11 +344,16 @@ void GTrigger::NotifySimableTrigger(ISimable *isim, int triggerStimulus) { if (!wasInside) { MarkAsInside(isim); UCrc32 triggerMessage(0x20D60DBF); - MTriggerEnter enterMsg(GCollectionKey(this), isim->GetInstanceHandle()); + HSIMABLE handle = isim->GetInstanceHandle(); + GCollectionKey sender(this); + MTriggerEnter enterMsg(sender, handle); enterMsg.Post(triggerMessage); } + UCrc32 triggerMessage(0x20D60DBF); - MTriggerInside insideMsg(GCollectionKey(this), isim->GetInstanceHandle()); + HSIMABLE handle = isim->GetInstanceHandle(); + GCollectionKey sender(this); + MTriggerInside insideMsg(sender, handle); insideMsg.Post(triggerMessage); } } diff --git a/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h b/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h index 11a30eb8f..f2f3744fb 100644 --- a/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h +++ b/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h @@ -1439,6 +1439,10 @@ struct gameplay : Instance { return *resultptr; } + const bool &FireOnExit() const { + return FireOnExit(0); + } + const bool &AvailableQR(unsigned int index) const { const bool *resultptr = reinterpret_cast(this->GetAttributePointer(0xb39ed8c3, index)); if (!resultptr) { From b490afa07faaeec9064dd2648fe1937ae3cc3020 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 20:09:32 +0100 Subject: [PATCH 433/691] 81.1%: match+ GRaceStatus::AddRacer Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 66 +------------------- src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 4 ++ 2 files changed, 5 insertions(+), 65 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index f09f9df4d..5edbee62f 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -648,10 +648,6 @@ bool GRacerInfo::AreStatsReady() const { return mFinishedRacing || mEngineBlown || mTotalled; } -void GRacerInfo::ClearAll() { - ClearRaceStats(); -} - void GRacerInfo::SaveStartPosition() { ISimable *simable = GetSimable(); @@ -3213,67 +3209,7 @@ void GRaceStatus::AddRacer(GRuntimeInstance *racer) { GRacerInfo &info = mRacerInfo[mRacerCount]; ++mRacerCount; - info.mhSimable = nullptr; - info.mGameCharacter = nullptr; - info.mName = nullptr; - info.mIndex = -1; - info.mRanking = 0; - info.mAiRanking = 0; - info.mPctRaceComplete = 0.0f; - info.mKnockedOut = false; - info.mTotalled = false; - info.mEngineBlown = false; - info.mBusted = false; - info.mChallengeComplete = false; - info.mFinishedRacing = false; - info.mCameraDetached = false; - info.mPctLapComplete = 0.0f; - info.mLapsCompleted = 0; - info.mCheckpointsHitThisLap = 0; - info.mTollboothsCrossed = 0; - info.mSpeedTrapsCrossed = 0; - info.mDistToNextCheckpoint = 0.0f; - info.mDistanceDriven = 0.0f; - info.mTopSpeed = 0.0f; - info.mFinishingSpeed = 0.0f; - info.mPoundsNOSUsed = 0.0f; - info.mTimeCrossedLastCheck = 0.0f; - info.mTotalUpdateTime = 0.0f; - info.mNumPerfectShifts = 0; - info.mNumTrafficCarsHit = 0; - info.mSpeedBreakerTime = 0.0f; - info.mPointTotal = 0.0f; - info.mZeroToSixtyTime = 0.0f; - info.mQuarterMileTime = 0.0f; - info.mRaceTimer.Stop(); - info.mRaceTimer.Reset(0.0f); - info.mLapTimer.Stop(); - info.mLapTimer.Reset(0.0f); - info.mCheckTimer.Stop(); - info.mCheckTimer.Reset(0.0f); - info.mSavedPosition = UMath::Vector3::kZero; - info.mSavedHeatLevel = 0.0f; - info.mSavedDirection = UMath::Vector3::kZero; - info.mSavedSpeed = 0.0f; -#ifndef EA_BUILD_A124 - info.mDNF = false; -#endif - - for (int i = 0; i < 16; ++i) { - info.mTimeRemainingToBooth[i] = 0.0f; - } - - for (int i = 0; i < 16; ++i) { - info.mSpeedTrapSpeed[i] = 0.0f; - info.mSpeedTrapPosition[i] = -1; - } - -#ifndef EA_BUILD_A124 - for (int i = 0; i < 4; ++i) { - info.mSplitTimes[i] = 0.0f; - info.mSplitRankings[i] = 0; - } -#endif + info.ClearAll(); info.mGameCharacter = static_cast(racer); info.SetIndex(mRacerCount - 1); diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index a8b1ffeab..ee9a0f056 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -249,6 +249,10 @@ struct GRacerInfo { #endif }; +inline void GRacerInfo::ClearAll() { + ClearRaceStats(); +} + DECLARE_CONTAINER_TYPE(ID_GRaceStatusTriggerList); // total size: 0x14 From acb52857b612271ca28d48524a9bb771f91bd88c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 20:12:51 +0100 Subject: [PATCH 434/691] 81.7%: improve GRacerInfo::ClearAll Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 4 ++++ src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 4 ---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 5edbee62f..857a6d155 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3205,6 +3205,10 @@ GRacerInfo &GRaceStatus::AddSimablePlayer(ISimable *isim) { return info; } +inline void GRacerInfo::ClearAll() { + ClearRaceStats(); +} + void GRaceStatus::AddRacer(GRuntimeInstance *racer) { GRacerInfo &info = mRacerInfo[mRacerCount]; diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index ee9a0f056..a8b1ffeab 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -249,10 +249,6 @@ struct GRacerInfo { #endif }; -inline void GRacerInfo::ClearAll() { - ClearRaceStats(); -} - DECLARE_CONTAINER_TYPE(ID_GRaceStatusTriggerList); // total size: 0x14 From 4f4838ca6990194d2befd9640abf288884a5817d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 20:20:46 +0100 Subject: [PATCH 435/691] 81.8%: improve GRaceStatus::GRaceStatus Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 857a6d155..4111395bf 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2502,21 +2502,23 @@ template void GRaceCustom::SetAttribute(unsigned int key, const T & GRaceStatus::GRaceStatus() : UTL::COM::Object(1), // IVehicleCache((UTL::COM::Object *)this) { - unsigned char currentBin = FEDatabase->GetCareerSettings()->GetCurrentBin(); + unsigned char currentBin; for (int i = 0; i < 16; ++i) { mRacerInfo[i].ClearAll(); } + currentBin = FEDatabase->GetCareerSettings()->GetCurrentBin(); + mRacerCount = 0; mIsLoading = false; + mPlayMode = kPlayMode_Racing; mRaceContext = GRace::kRaceContext_Career; mRaceParms = nullptr; mCheckpointModel = nullptr; mCheckpointEmitter = nullptr; mActivelyRacing = false; mNumTollbooths = 0; - mPlayMode = kPlayMode_Racing; mRaceBin = GRaceDatabase::Get().GetBinNumber(currentBin); mScriptWaitingForLoad = false; mHasBeenWon = false; From 9390529969dd2c595fd19478cef14e6891c06c19 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 20:21:05 +0100 Subject: [PATCH 436/691] 81.8%: improve GRaceStatus::SetNextCheckpointPos Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 45 ++++++++++---------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 4111395bf..e5e43680a 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3276,15 +3276,34 @@ void GRaceStatus::AddCheckpoint(GRuntimeInstance *trigger) { } void GRaceStatus::SetNextCheckpointPos(GRuntimeInstance *trigger) { - bool checkpointsVisible = false; + GTrigger *gtrigger = static_cast(trigger); + bool checkpointVisible = false; - mNextCheckpoint = static_cast(trigger); + mNextCheckpoint = gtrigger; if (mRaceParms) { - checkpointsVisible = mRaceParms->GetCheckpointsVisible(); + checkpointVisible = mRaceParms->GetCheckpointsVisible(); } - if (!trigger || !checkpointsVisible) { + if (gtrigger && checkpointVisible) { + UMath::Vector3 triggerPos; + bVector3 triggerPosSwiz; + bMatrix4 mat; + + if (!mCheckpointModel) { + mCheckpointModel = new WorldModel(0x738B1F9B, nullptr, false); + } + + gtrigger->GetPosition(triggerPos); + eSwizzleWorldVector(reinterpret_cast(triggerPos), triggerPosSwiz); + bIdentity(&mat); + bCopy(&mat.v3, &triggerPosSwiz, 1.0f); + mCheckpointModel->SetMatrix(&mat); + + if (mCheckpointEmitter) { + mCheckpointEmitter->SetLocalWorld(&mat); + } + } else { if (mCheckpointModel) { delete mCheckpointModel; } @@ -3295,24 +3314,6 @@ void GRaceStatus::SetNextCheckpointPos(GRuntimeInstance *trigger) { delete mCheckpointEmitter; mCheckpointEmitter = nullptr; } - - return; - } - - if (!mCheckpointModel) { - mCheckpointModel = new WorldModel(0x738B1F9B, nullptr, false); - } - - UMath::Vector3 position; - bMatrix4 matrix; - - trigger->GetPosition(position); - bIdentity(&matrix); - eSwizzleWorldVector(reinterpret_cast(position), reinterpret_cast(matrix.v3)); - mCheckpointModel->SetMatrix(&matrix); - - if (mCheckpointEmitter) { - mCheckpointEmitter->SetLocalWorld(&matrix); } } From e429917af440eded12dd4b4eb7d5cc488d91e0fa Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 20:27:05 +0100 Subject: [PATCH 437/691] 81.9%: improve GRaceStatus::GRaceStatus Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 33 ++++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index e5e43680a..a95fae155 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2510,21 +2510,19 @@ GRaceStatus::GRaceStatus() currentBin = FEDatabase->GetCareerSettings()->GetCurrentBin(); - mRacerCount = 0; - mIsLoading = false; - mPlayMode = kPlayMode_Racing; - mRaceContext = GRace::kRaceContext_Career; - mRaceParms = nullptr; + mNextCheckpoint = nullptr; mCheckpointModel = nullptr; mCheckpointEmitter = nullptr; + mIsLoading = false; mActivelyRacing = false; - mNumTollbooths = 0; + mRaceParms = nullptr; + mRacerCount = 0; + nSpeedTraps = 0; + mRaceContext = GRace::kRaceContext_Career; mRaceBin = GRaceDatabase::Get().GetBinNumber(currentBin); - mScriptWaitingForLoad = false; - mHasBeenWon = false; - fRaceLength = 0.0f; - fFirstLapLength = 0.0f; - fSubsequentLapLength = 0.0f; + mCaluclatedAdaptiveGain = false; + mQueueBinChange = false; + mNumTollbooths = 0; #ifndef EA_BUILD_A124 mPlayerPursuitInCooldown = false; #endif @@ -2533,19 +2531,20 @@ GRaceStatus::GRaceStatus() mSuddenDeathMode = false; mTimeExpiredMsgSent = false; mLastSecondTickSent = 0; - mQueueBinChange = false; #ifndef EA_BUILD_A124 + mRefreshBinAfterRace = false; mWarpWhenInFreeRoam = 0; #endif - mNextCheckpoint = nullptr; - nSpeedTraps = 0; mVehicleCacheLocked = false; bRaceRouteError = false; mTrafficDensity = 0; mTrafficPattern = 0; -#ifndef EA_BUILD_A124 - mRefreshBinAfterRace = false; -#endif + mScriptWaitingForLoad = false; + mHasBeenWon = false; + fSubsequentLapLength = 0.0f; + mPlayMode = kPlayMode_Racing; + fRaceLength = 0.0f; + fFirstLapLength = 0.0f; fObj = this; ClearTimes(); From a797ce0a7835a17b8061ad65b20e9c46d1ca49b0 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 20:47:05 +0100 Subject: [PATCH 438/691] 82.3%: improve GManager milestone/state helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 96 ++++++++++++++++------- 1 file changed, 69 insertions(+), 27 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index d26d601d4..86f070380 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -46,6 +46,7 @@ char *bStrIStr(const char *s1, const char *s2); void bCloseMemoryPool(int pool_num); bool bSetMemoryPoolDebugTracing(int pool_num, bool on_off); void ApplyTimeOfDayTickOver(); +unsigned int GameplayClassKey() __asm__("ClassKey__Q36Attrib3Gen8gameplay"); void SetOverRideRainIntensity(float intensity); void ForEachTrackPositionMarker(bool (*callback)(TrackPositionMarker *marker, unsigned int tag), unsigned int tag); void LZByteSwapHeader(LZHeader *header); @@ -84,6 +85,12 @@ struct GManagerRaceStatusCompat { bool mRefreshBinAfterRace; }; +struct GManagerSpeedTrapCompat { + unsigned char _pad[0xB8]; + unsigned int mNumSpeedTraps; + GSpeedTrap *mSpeedTraps; +}; + class GCopMgrCompat : public UTL::COM::IUnknown { public: static HINTERFACE _IHandle() { @@ -1212,8 +1219,12 @@ void GManager::LoadMilestoneInfo(MilestoneTypeInfo *savedInfo, unsigned int coun ResetMilestoneTrackingInfo(); for (i = 0; i < count; ++i) { - MilestoneTypeInfo &info = savedInfo[i]; - mMilestoneTypeInfo[info.mTypeKey] = info; + MilestoneInfoMap::iterator it = mMilestoneTypeInfo.find(savedInfo[i].mTypeKey); + + if (it != mMilestoneTypeInfo.end()) { + it->second.mLastKnownValue = savedInfo[i].mLastKnownValue; + it->second.mBestValue = savedInfo[i].mBestValue; + } } } @@ -1278,15 +1289,15 @@ void *GManager::GetObjectStateBlock(unsigned int key) { void GManager::ClearObjectStateBlock(unsigned int key) { unsigned int shiftedKey = key >> mCollectionKeyShiftTo32; - ObjectStateMap::iterator it = mSessionStateBlocks.find(shiftedKey); + ObjectStateMap *blocks = &mSessionStateBlocks; + unsigned int i; - if (it != mSessionStateBlocks.end()) { - mSessionStateBlocks.erase(it); - } + for (i = 0; i < 2; ++i, --blocks) { + ObjectStateMap::iterator it = blocks->find(shiftedKey); - it = mPersistentStateBlocks.find(shiftedKey); - if (it != mPersistentStateBlocks.end()) { - mPersistentStateBlocks.erase(it); + if (it != blocks->end()) { + blocks->erase(it); + } } } @@ -1301,12 +1312,20 @@ unsigned int GManager::SaveMilestoneInfo(MilestoneTypeInfo *dest) { } void GManager::ResetMilestones() { - if (!mMilestones) { + if (!mNumMilestones) { return; } - for (unsigned int i = 0; i < mNumMilestones; ++i) { - mMilestones[i].Reset(); + Attrib::Gen::gameplay gameplay(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), 0x1D975142), 0, nullptr); + AttribKeyList keys; + AttribKeyList::iterator it; + GMilestone *milestone = mMilestones; + + GatherInstanceKeys(gameplay, keys, 0xA3D34781); + + for (it = keys.begin(); it != keys.end(); ++it) { + milestone->Init(*it); + milestone++; } } @@ -1358,12 +1377,24 @@ void GManager::AllocateSpeedTraps() { } void GManager::ResetSpeedTraps() { - if (!mSpeedTraps) { + GManagerSpeedTrapCompat *compat = reinterpret_cast(this); + + if (compat->mNumSpeedTraps == 0) { return; } - for (unsigned int i = 0; i < mNumSpeedTraps; ++i) { - mSpeedTraps[i].Reset(); + unsigned int gameplayKey = GameplayClassKey(); + Attrib::Gen::gameplay gameplay(Attrib::FindCollection(gameplayKey, 0x49511906), 0, nullptr); + AttribKeyList keys; + AttribKeyList::iterator it; + GSpeedTrap *speedTrap; + + GatherInstanceKeys(gameplay, keys, 0xB05871D3); + + speedTrap = compat->mSpeedTraps; + for (it = keys.begin(); it != keys.end(); ++it) { + speedTrap->Init(*it); + speedTrap++; } } @@ -2300,9 +2331,11 @@ bool GManager::LoadGameplayData(unsigned char *src, unsigned int maxSize) { void GManager::DefragObjectStateStorage() { unsigned int count; unsigned int index; + ObjectStateBlockHeader *stackBlocks[0x100]; ObjectStateBlockHeader **blocks; ObjectStateMap::iterator it; unsigned char *freePtr; + ObjectStateMap *stateBlocks; count = mPersistentStateBlocks.size() + mSessionStateBlocks.size(); if (count == 0) { @@ -2310,13 +2343,19 @@ void GManager::DefragObjectStateStorage() { return; } - blocks = new ObjectStateBlockHeader *[count]; + blocks = stackBlocks; + if (count > 0x100) { + blocks = new ObjectStateBlockHeader *[count]; + } + index = 0; for (it = mPersistentStateBlocks.begin(); it != mPersistentStateBlocks.end(); ++it) { - blocks[index++] = it->second; + blocks[index] = it->second; + index++; } for (it = mSessionStateBlocks.begin(); it != mSessionStateBlocks.end(); ++it) { - blocks[index++] = it->second; + blocks[index] = it->second; + index++; } std::sort(blocks, blocks + count); @@ -2326,23 +2365,26 @@ void GManager::DefragObjectStateStorage() { unsigned int blockSize = (block->mSize + 0x17U) & ~0xFU; if (reinterpret_cast(block) != freePtr) { - bOverlappedMemCpy(freePtr, block, blockSize); + unsigned int shiftedKey = block->mKey >> mCollectionKeyShiftTo32; - it = mPersistentStateBlocks.find(block->mKey); - if (it != mPersistentStateBlocks.end()) { - it->second = reinterpret_cast(freePtr); - } + bOverlappedMemCpy(freePtr, block, blockSize); - it = mSessionStateBlocks.find(block->mKey); - if (it != mSessionStateBlocks.end()) { - it->second = reinterpret_cast(freePtr); + stateBlocks = &mSessionStateBlocks; + for (unsigned int i = 0; i < 2; ++i, --stateBlocks) { + it = stateBlocks->find(shiftedKey); + if (it != stateBlocks->end()) { + (*stateBlocks)[shiftedKey] = reinterpret_cast(freePtr); + } } } freePtr += blockSize; } - delete[] blocks; + if (blocks != stackBlocks) { + delete[] blocks; + } + mObjectStateBufferFree = freePtr; } From 634a6978a9240637ea291c8daeab25cdc9b40c42 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 20:55:02 +0100 Subject: [PATCH 439/691] 82.5%: improve GManager respawn/state helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 61 +++++++++++++---------- 1 file changed, 35 insertions(+), 26 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 86f070380..6e574b65b 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1215,15 +1215,17 @@ void GManager::ResetMilestoneTrackingInfo() { } void GManager::LoadMilestoneInfo(MilestoneTypeInfo *savedInfo, unsigned int count) { - unsigned int i; + unsigned int onMilestone; ResetMilestoneTrackingInfo(); - for (i = 0; i < count; ++i) { - MilestoneInfoMap::iterator it = mMilestoneTypeInfo.find(savedInfo[i].mTypeKey); + for (onMilestone = 0; onMilestone < count; ++onMilestone) { + MilestoneTypeInfo &saved = savedInfo[onMilestone]; + MilestoneInfoMap::iterator iterCurrent; - if (it != mMilestoneTypeInfo.end()) { - it->second.mLastKnownValue = savedInfo[i].mLastKnownValue; - it->second.mBestValue = savedInfo[i].mBestValue; + iterCurrent = mMilestoneTypeInfo.find(saved.mTypeKey); + if (iterCurrent != mMilestoneTypeInfo.end()) { + iterCurrent->second.mBestValue = saved.mBestValue; + iterCurrent->second.mLastKnownValue = saved.mLastKnownValue; } } } @@ -1287,18 +1289,20 @@ void *GManager::GetObjectStateBlock(unsigned int key) { return it->second + 1; } -void GManager::ClearObjectStateBlock(unsigned int key) { - unsigned int shiftedKey = key >> mCollectionKeyShiftTo32; - ObjectStateMap *blocks = &mSessionStateBlocks; - unsigned int i; +void GManager::ClearObjectStateBlock(unsigned int collectionKey) { + unsigned int key32 = collectionKey >> mCollectionKeyShiftTo32; + unsigned int persistent = 0; - for (i = 0; i < 2; ++i, --blocks) { - ObjectStateMap::iterator it = blocks->find(shiftedKey); + do { + ObjectStateMap &stateMap = persistent ? mPersistentStateBlocks : mSessionStateBlocks; + ObjectStateMap::iterator existing = stateMap.find(key32); - if (it != blocks->end()) { - blocks->erase(it); + if (existing != stateMap.end()) { + stateMap.erase(existing); } - } + + persistent++; + } while (persistent <= 1); } unsigned int GManager::SaveMilestoneInfo(MilestoneTypeInfo *dest) { @@ -1316,15 +1320,15 @@ void GManager::ResetMilestones() { return; } - Attrib::Gen::gameplay gameplay(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), 0x1D975142), 0, nullptr); + Attrib::Gen::gameplay milestoneRoot(0x1D975142, 0, nullptr); AttribKeyList keys; - AttribKeyList::iterator it; - GMilestone *milestone = mMilestones; + GMilestone *milestone; - GatherInstanceKeys(gameplay, keys, 0xA3D34781); + GatherInstanceKeys(milestoneRoot, keys, 0xA3D34781); - for (it = keys.begin(); it != keys.end(); ++it) { - milestone->Init(*it); + milestone = mMilestones; + for (AttribKeyList::iterator iter = keys.begin(); iter != keys.end(); ++iter) { + milestone->Init(*iter); milestone++; } } @@ -2764,13 +2768,18 @@ bool GManager::WarpToMarker(unsigned int markerKey, bool startPursuit) { unsigned int GManager::GetRespawnMarker() { unsigned int markerKey = mOverrideFreeRoamStartMarker; - const Attrib::Collection *collection = Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), markerKey); + Attrib::Gen::gameplay marker(markerKey, 0, nullptr); + + if (!marker.IsValid()) { + if (mStartFreeRoamFromSafeHouse) { + markerKey = mFreeRoamFromSafeHouseStartMarker; + } else { + markerKey = mFreeRoamStartMarker; + } - if (!collection) { - markerKey = mStartFreeRoamFromSafeHouse ? mFreeRoamFromSafeHouseStartMarker : mFreeRoamStartMarker; - collection = Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), markerKey); + Attrib::Gen::gameplay defaultMarker(markerKey, 0, nullptr); - if (!collection) { + if (!defaultMarker.IsValid()) { char markerName[32]; bSPrintf(markerName, "career_start_%s", LoadedTrackInfo->GetLoadedTrackInfo()); From 607fdf05f22fea96261efd13ae65ed0af8c253bc Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 21:03:51 +0100 Subject: [PATCH 440/691] 82.7%: improve GTrigger::GTrigger Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 116 +++++++++++++++++----- 1 file changed, 89 insertions(+), 27 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 3bfb657c2..11abaf4f5 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -20,46 +20,108 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) : GRuntimeInstance(triggerKey, kGameplayObjType_Trigger), // mWorldTrigger() { UMath::Matrix4 mat; + UMath::Vector3 initialVec; + const float *rotation; + const UMath::Vector3 *position; + const UMath::Vector3 *dimensions; + const float *radius; + UMath::Vector3 posSwizzled; + UMath::Vector3 dimSwizzled; + float triggerRadius; + EventStaticData *pTriggerData = &mEventStaticData; + bool showIconBasedOnBin = true; + const int *oneShot; + mTriggerEnabled = 0; mIcon = nullptr; mEnabled = false; mActivationReferences = 0; bMemSet(mParticleEffect, 0, 8); - mSimObjInside.reserve(8); - { - UMath::Matrix4 rotMat; - UMath::Vector3 initialVec; - - UMath::Init(rotMat, 1.0f, 1.0f, 1.0f); - initialVec.x = 0.0f; - initialVec.y = 0.0f; - initialVec.z = 1.0f; - UMath::MultYRot(rotMat, -Rotation() * 0.00069444446f, rotMat); - UMath::Rotate(initialVec, rotMat, mDirection); - mat = rotMat; + UMath::Copy(UMath::Matrix4::kIdentity, mat); + initialVec.x = 0.0f; + initialVec.y = 0.0f; + initialVec.z = 1.0f; + + rotation = reinterpret_cast(GetAttributePointer(0x5A6A57C6, 0)); + if (!rotation) { + rotation = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); } - const UMath::Vector3 &pos = Position(); - UMath::Vector3 dim; - bool hasDimensions = Dimensions(dim); - UMath::Vector3 posSwizzled = UMath::Vector3Make(-pos.y, pos.z, pos.x); - UMath::Vector3 dimSwizzled = UMath::Vector3Make(dim.x, dim.z, dim.y); - float radius; - EventStaticData *pTriggerData = &mEventStaticData; - bool showIconBasedOnBin = true; + MATRIX4_multyrot(&mat, -*rotation * 0.00069444446f, &mat); + VU0_MATRIX3x4_vect3mult(initialVec, mat, mDirection); + mSimObjInside.reserve(8); - UMath::Set(mat, 3, UMath::Vector4Make(posSwizzled, 1.0f)); + position = reinterpret_cast(GetAttributePointer(0x9F743A0E, 0)); + if (!position) { + position = reinterpret_cast(Attrib::DefaultDataArea(sizeof(UMath::Vector3))); + } - if (hasDimensions) { - new (&mWorldTrigger) WTrigger(mat, dimSwizzled, &mEventList, OneShot() ? 2 : 0); + dimensions = reinterpret_cast(GetAttributePointer(0x6D9E21AD, 0)); + posSwizzled.x = -position->y; + posSwizzled.y = position->z; + posSwizzled.z = position->x; + triggerRadius = 0.0f; + + if (dimensions) { + dimSwizzled.x = dimensions->x; + dimSwizzled.y = dimensions->z; + dimSwizzled.z = dimensions->y; + mWorldTrigger.fShape = 1; + mWorldTrigger.fMatRow0Width.w = dimSwizzled.z; + mWorldTrigger.fHeight = dimSwizzled.y * 2.0f; + mWorldTrigger.fMatRow2Length.w = dimSwizzled.x; } else { - if (!Radius(radius)) { - float width = Width(); - radius = UMath::Sqrt(width * width + 1.0f); + radius = reinterpret_cast(GetAttributePointer(0x39BF8002, 0)); + if (radius) { + triggerRadius = *radius; + mWorldTrigger.fShape = 3; + mWorldTrigger.fMatRow0Width.w = triggerRadius * 2.0f; + mWorldTrigger.fHeight = triggerRadius * 4.0f; + mWorldTrigger.fMatRow2Length.w = triggerRadius * 2.0f; + } else { + const float *width = reinterpret_cast(GetAttributePointer(0x5816C1FC, 0)); + float halfWidth; + + if (!width) { + width = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); + } + + halfWidth = *width; + mWorldTrigger.fShape = 1; + mWorldTrigger.fMatRow0Width.w = halfWidth; + mWorldTrigger.fHeight = 2.0f; + mWorldTrigger.fMatRow2Length.w = 0.0f; + triggerRadius = UMath::Sqrt(halfWidth * halfWidth + 1.0f); } + } + + UMath::Copy(UMath::Matrix4::kIdentity, mat); + MATRIX4_multyrot(&mat, -*rotation * 0.00069444446f, &mat); + + mWorldTrigger.fType = 1; + mWorldTrigger.fEvents = &mEventList; + mWorldTrigger.fIterStamp = 0; + mWorldTrigger.fFingerprint = 0; + mWorldTrigger.fMatRow0Width.x = mat[0][0]; + mWorldTrigger.fMatRow0Width.y = mat[0][1]; + mWorldTrigger.fMatRow0Width.z = mat[0][2]; + mWorldTrigger.fMatRow2Length.x = mat[2][0]; + mWorldTrigger.fMatRow2Length.y = mat[2][1]; + mWorldTrigger.fMatRow2Length.z = mat[2][2]; + mWorldTrigger.fPosRadius.x = posSwizzled.x; + mWorldTrigger.fPosRadius.y = posSwizzled.y; + mWorldTrigger.fPosRadius.z = posSwizzled.z; + mWorldTrigger.fPosRadius.w = triggerRadius; + mWorldTrigger.fFlags = 0x4810D; + + oneShot = reinterpret_cast(GetAttributePointer(0xCE4261AC, 0)); + if (!oneShot) { + oneShot = reinterpret_cast(Attrib::DefaultDataArea(sizeof(int))); + } - new (&mWorldTrigger) WTrigger(mat, radius, radius * 2.0f, &mEventList, OneShot() ? 2 : 0); + if (*oneShot) { + mWorldTrigger.fFlags |= 2; } mEventList.fNumEvents = 1; From 44abee2b04e5a1d3ab5bf6b357554894d00e721f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 21:05:13 +0100 Subject: [PATCH 441/691] 82.7%: improve GTrigger::GTrigger Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 68 ++++++++++++++--------- 1 file changed, 41 insertions(+), 27 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 11abaf4f5..11b64a43d 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -28,9 +28,13 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) UMath::Vector3 posSwizzled; UMath::Vector3 dimSwizzled; float triggerRadius; + float triggerWidth; + float triggerLength; + float triggerHeight; EventStaticData *pTriggerData = &mEventStaticData; bool showIconBasedOnBin = true; const int *oneShot; + bool hasDimensions; mTriggerEnabled = 0; mIcon = nullptr; @@ -49,7 +53,10 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) } MATRIX4_multyrot(&mat, -*rotation * 0.00069444446f, &mat); - VU0_MATRIX3x4_vect3mult(initialVec, mat, mDirection); + VU0_MATRIX3x4_vect3mult(initialVec, mat, initialVec); + mDirection.x = initialVec.x; + mDirection.y = initialVec.y; + mDirection.z = initialVec.z; mSimObjInside.reserve(8); position = reinterpret_cast(GetAttributePointer(0x9F743A0E, 0)); @@ -61,43 +68,47 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) posSwizzled.x = -position->y; posSwizzled.y = position->z; posSwizzled.z = position->x; + hasDimensions = false; triggerRadius = 0.0f; + triggerWidth = 0.0f; + triggerLength = 0.0f; + triggerHeight = 0.0f; if (dimensions) { dimSwizzled.x = dimensions->x; dimSwizzled.y = dimensions->z; dimSwizzled.z = dimensions->y; + hasDimensions = true; + } + + UMath::Copy(UMath::Matrix4::kIdentity, mat); + MATRIX4_multyrot(&mat, -*rotation * 0.00069444446f, &mat); + + radius = reinterpret_cast(GetAttributePointer(0x39BF8002, 0)); + if (radius) { + triggerRadius = *radius; + triggerWidth = triggerRadius + triggerRadius; + triggerLength = triggerWidth; + triggerHeight = triggerWidth; + mWorldTrigger.fShape = 3; + } else if (hasDimensions) { + triggerWidth = dimSwizzled.z; + triggerHeight = dimSwizzled.y; + triggerLength = dimSwizzled.x; mWorldTrigger.fShape = 1; - mWorldTrigger.fMatRow0Width.w = dimSwizzled.z; - mWorldTrigger.fHeight = dimSwizzled.y * 2.0f; - mWorldTrigger.fMatRow2Length.w = dimSwizzled.x; } else { - radius = reinterpret_cast(GetAttributePointer(0x39BF8002, 0)); - if (radius) { - triggerRadius = *radius; - mWorldTrigger.fShape = 3; - mWorldTrigger.fMatRow0Width.w = triggerRadius * 2.0f; - mWorldTrigger.fHeight = triggerRadius * 4.0f; - mWorldTrigger.fMatRow2Length.w = triggerRadius * 2.0f; - } else { - const float *width = reinterpret_cast(GetAttributePointer(0x5816C1FC, 0)); - float halfWidth; + const float *width = reinterpret_cast(GetAttributePointer(0x5816C1FC, 0)); - if (!width) { - width = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); - } - - halfWidth = *width; - mWorldTrigger.fShape = 1; - mWorldTrigger.fMatRow0Width.w = halfWidth; - mWorldTrigger.fHeight = 2.0f; - mWorldTrigger.fMatRow2Length.w = 0.0f; - triggerRadius = UMath::Sqrt(halfWidth * halfWidth + 1.0f); + if (!width) { + width = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); } - } - UMath::Copy(UMath::Matrix4::kIdentity, mat); - MATRIX4_multyrot(&mat, -*rotation * 0.00069444446f, &mat); + triggerWidth = *width; + triggerHeight = 1.0f; + triggerLength = 0.0f; + triggerRadius = UMath::Sqrt(triggerWidth * triggerWidth + 1.0f); + mWorldTrigger.fShape = 1; + } mWorldTrigger.fType = 1; mWorldTrigger.fEvents = &mEventList; @@ -106,9 +117,12 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) mWorldTrigger.fMatRow0Width.x = mat[0][0]; mWorldTrigger.fMatRow0Width.y = mat[0][1]; mWorldTrigger.fMatRow0Width.z = mat[0][2]; + mWorldTrigger.fMatRow0Width.w = triggerWidth; + mWorldTrigger.fHeight = triggerHeight + triggerHeight; mWorldTrigger.fMatRow2Length.x = mat[2][0]; mWorldTrigger.fMatRow2Length.y = mat[2][1]; mWorldTrigger.fMatRow2Length.z = mat[2][2]; + mWorldTrigger.fMatRow2Length.w = triggerLength; mWorldTrigger.fPosRadius.x = posSwizzled.x; mWorldTrigger.fPosRadius.y = posSwizzled.y; mWorldTrigger.fPosRadius.z = posSwizzled.z; From 8d25115c0a5bf833885f5e6773edc1c122efb21d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 21:06:10 +0100 Subject: [PATCH 442/691] 82.7%: improve GTrigger::GTrigger Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 11b64a43d..306ab5fc5 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -19,6 +19,7 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) : GRuntimeInstance(triggerKey, kGameplayObjType_Trigger), // mWorldTrigger() { + UMath::Matrix4 directionMat; UMath::Matrix4 mat; UMath::Vector3 initialVec; const float *rotation; @@ -42,7 +43,7 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) mActivationReferences = 0; bMemSet(mParticleEffect, 0, 8); - UMath::Copy(UMath::Matrix4::kIdentity, mat); + UMath::Copy(UMath::Matrix4::kIdentity, directionMat); initialVec.x = 0.0f; initialVec.y = 0.0f; initialVec.z = 1.0f; @@ -52,8 +53,8 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) rotation = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); } - MATRIX4_multyrot(&mat, -*rotation * 0.00069444446f, &mat); - VU0_MATRIX3x4_vect3mult(initialVec, mat, initialVec); + MATRIX4_multyrot(&directionMat, -*rotation * 0.00069444446f, &directionMat); + VU0_MATRIX3x4_vect3mult(initialVec, directionMat, initialVec); mDirection.x = initialVec.x; mDirection.y = initialVec.y; mDirection.z = initialVec.z; From 90d576ab5d9930e6699924fe5a5a2e45a74f0d65 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 21:17:53 +0100 Subject: [PATCH 443/691] 82.8%: improve GManager::OnQueryVehicleCache Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 6e574b65b..e831445a4 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2423,13 +2423,15 @@ void GManager::OnRemovedVehicleCache(IVehicle *ivehicle) { } eVehicleCacheResult GManager::OnQueryVehicleCache(const IVehicle *removethis, const IVehicleCache *whosasking) const { + const IVehicleCache *cache = whosasking; + const IVehicle *vehicleToRemove = removethis; GManager *self = const_cast(this); for (StockCarMap::iterator it = self->mStockCars.begin(); it != self->mStockCars.end(); ++it) { IVehicle *stockCar = nullptr; - if (it->second && it->second->QueryInterface(&stockCar) && UTL::COM::ComparePtr(stockCar, removethis)) { - if (!UTL::COM::ComparePtr(whosasking, INIS::Get())) { + if (it->second && it->second->QueryInterface(&stockCar) && UTL::COM::ComparePtr(stockCar, vehicleToRemove)) { + if (!UTL::COM::ComparePtr(cache, INIS::Get())) { return VCR_WANT; } @@ -2442,15 +2444,15 @@ eVehicleCacheResult GManager::OnQueryVehicleCache(const IVehicle *removethis, co GCharacter *character = *it; IVehicle *vehicle = character->GetSpawnedVehicle(); - if (!UTL::COM::ComparePtr(vehicle, removethis)) { + if (!UTL::COM::ComparePtr(vehicle, vehicleToRemove)) { continue; } - if (vehicle && character->IsFlagSet(GCharacter::kCharFlag_UsingStockCar)) { + if (vehicle && character->HasStockCar()) { return VCR_DONTCARE; } - if (UTL::COM::ComparePtr(whosasking, ITrafficMgr::Get()) || vehicle->GetOffscreenTime() == 0.0f) { + if (UTL::COM::ComparePtr(cache, ITrafficMgr::Get()) || vehicle->GetOffscreenTime() == 0.0f) { return VCR_DONTCARE; } From 1e8eff32e2cbe17cbfebb045448f62426694ea39 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 21:36:14 +0100 Subject: [PATCH 444/691] 82.8%: improve GTrigger::GTrigger Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 306ab5fc5..50cae3428 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -29,6 +29,7 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) UMath::Vector3 posSwizzled; UMath::Vector3 dimSwizzled; float triggerRadius; + float triggerRadiusSquared; float triggerWidth; float triggerLength; float triggerHeight; @@ -71,6 +72,7 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) posSwizzled.z = position->x; hasDimensions = false; triggerRadius = 0.0f; + triggerRadiusSquared = 0.0f; triggerWidth = 0.0f; triggerLength = 0.0f; triggerHeight = 0.0f; @@ -96,6 +98,8 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) triggerWidth = dimSwizzled.z; triggerHeight = dimSwizzled.y; triggerLength = dimSwizzled.x; + triggerRadiusSquared = triggerWidth * triggerWidth + triggerLength * triggerLength; + triggerRadius = UMath::Sqrt(triggerRadiusSquared); mWorldTrigger.fShape = 1; } else { const float *width = reinterpret_cast(GetAttributePointer(0x5816C1FC, 0)); @@ -107,7 +111,8 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) triggerWidth = *width; triggerHeight = 1.0f; triggerLength = 0.0f; - triggerRadius = UMath::Sqrt(triggerWidth * triggerWidth + 1.0f); + triggerRadiusSquared = triggerWidth * triggerWidth + 1.0f; + triggerRadius = UMath::Sqrt(triggerRadiusSquared); mWorldTrigger.fShape = 1; } From b8d8dfca4892d563cd069e50412d48f02acaace3 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 21:37:11 +0100 Subject: [PATCH 445/691] 82.8%: improve GTrigger::GTrigger Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 50cae3428..dabca2183 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -85,7 +85,6 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) } UMath::Copy(UMath::Matrix4::kIdentity, mat); - MATRIX4_multyrot(&mat, -*rotation * 0.00069444446f, &mat); radius = reinterpret_cast(GetAttributePointer(0x39BF8002, 0)); if (radius) { @@ -116,6 +115,12 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) mWorldTrigger.fShape = 1; } + rotation = reinterpret_cast(GetAttributePointer(0x5A6A57C6, 0)); + if (!rotation) { + rotation = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); + } + + MATRIX4_multyrot(&mat, -*rotation * 0.00069444446f, &mat); mWorldTrigger.fType = 1; mWorldTrigger.fEvents = &mEventList; mWorldTrigger.fIterStamp = 0; From 181bf1cf7839ef6daaecd2a636a9a1d6275afdfe Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 21:38:59 +0100 Subject: [PATCH 446/691] 82.8%: improve GTrigger::GTrigger Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index dabca2183..472f4c1ca 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -27,9 +27,7 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) const UMath::Vector3 *dimensions; const float *radius; UMath::Vector3 posSwizzled; - UMath::Vector3 dimSwizzled; float triggerRadius; - float triggerRadiusSquared; float triggerWidth; float triggerLength; float triggerHeight; @@ -56,9 +54,7 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) MATRIX4_multyrot(&directionMat, -*rotation * 0.00069444446f, &directionMat); VU0_MATRIX3x4_vect3mult(initialVec, directionMat, initialVec); - mDirection.x = initialVec.x; - mDirection.y = initialVec.y; - mDirection.z = initialVec.z; + mDirection = initialVec; mSimObjInside.reserve(8); position = reinterpret_cast(GetAttributePointer(0x9F743A0E, 0)); @@ -72,15 +68,14 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) posSwizzled.z = position->x; hasDimensions = false; triggerRadius = 0.0f; - triggerRadiusSquared = 0.0f; triggerWidth = 0.0f; triggerLength = 0.0f; triggerHeight = 0.0f; if (dimensions) { - dimSwizzled.x = dimensions->x; - dimSwizzled.y = dimensions->z; - dimSwizzled.z = dimensions->y; + triggerWidth = dimensions->y; + triggerHeight = dimensions->z; + triggerLength = dimensions->x; hasDimensions = true; } @@ -94,11 +89,7 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) triggerHeight = triggerWidth; mWorldTrigger.fShape = 3; } else if (hasDimensions) { - triggerWidth = dimSwizzled.z; - triggerHeight = dimSwizzled.y; - triggerLength = dimSwizzled.x; - triggerRadiusSquared = triggerWidth * triggerWidth + triggerLength * triggerLength; - triggerRadius = UMath::Sqrt(triggerRadiusSquared); + triggerRadius = UMath::Sqrt(triggerWidth * triggerWidth + triggerLength * triggerLength); mWorldTrigger.fShape = 1; } else { const float *width = reinterpret_cast(GetAttributePointer(0x5816C1FC, 0)); @@ -110,8 +101,7 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) triggerWidth = *width; triggerHeight = 1.0f; triggerLength = 0.0f; - triggerRadiusSquared = triggerWidth * triggerWidth + 1.0f; - triggerRadius = UMath::Sqrt(triggerRadiusSquared); + triggerRadius = UMath::Sqrt(triggerWidth * triggerWidth + 1.0f); mWorldTrigger.fShape = 1; } From 055fff601854aafb60e2d137fc23d1c006760dbb Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 21:45:15 +0100 Subject: [PATCH 447/691] 82.8%: improve GTrigger::GTrigger Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 38 +++++++++++------------ 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 472f4c1ca..17c03dcbd 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -27,10 +27,8 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) const UMath::Vector3 *dimensions; const float *radius; UMath::Vector3 posSwizzled; + UMath::Vector3 dimSwizzled; float triggerRadius; - float triggerWidth; - float triggerLength; - float triggerHeight; EventStaticData *pTriggerData = &mEventStaticData; bool showIconBasedOnBin = true; const int *oneShot; @@ -66,16 +64,16 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) posSwizzled.x = -position->y; posSwizzled.y = position->z; posSwizzled.z = position->x; + dimSwizzled.x = 0.0f; + dimSwizzled.y = 0.0f; + dimSwizzled.z = 0.0f; hasDimensions = false; triggerRadius = 0.0f; - triggerWidth = 0.0f; - triggerLength = 0.0f; - triggerHeight = 0.0f; if (dimensions) { - triggerWidth = dimensions->y; - triggerHeight = dimensions->z; - triggerLength = dimensions->x; + dimSwizzled.x = dimensions->y; + dimSwizzled.y = dimensions->z; + dimSwizzled.z = dimensions->x; hasDimensions = true; } @@ -84,12 +82,12 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) radius = reinterpret_cast(GetAttributePointer(0x39BF8002, 0)); if (radius) { triggerRadius = *radius; - triggerWidth = triggerRadius + triggerRadius; - triggerLength = triggerWidth; - triggerHeight = triggerWidth; + dimSwizzled.x = triggerRadius + triggerRadius; + dimSwizzled.y = dimSwizzled.x; + dimSwizzled.z = dimSwizzled.x; mWorldTrigger.fShape = 3; } else if (hasDimensions) { - triggerRadius = UMath::Sqrt(triggerWidth * triggerWidth + triggerLength * triggerLength); + triggerRadius = UMath::Sqrt(dimSwizzled.x * dimSwizzled.x + dimSwizzled.z * dimSwizzled.z); mWorldTrigger.fShape = 1; } else { const float *width = reinterpret_cast(GetAttributePointer(0x5816C1FC, 0)); @@ -98,10 +96,10 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) width = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); } - triggerWidth = *width; - triggerHeight = 1.0f; - triggerLength = 0.0f; - triggerRadius = UMath::Sqrt(triggerWidth * triggerWidth + 1.0f); + dimSwizzled.x = *width; + dimSwizzled.y = 1.0f; + dimSwizzled.z = 0.0f; + triggerRadius = UMath::Sqrt(dimSwizzled.x * dimSwizzled.x + 1.0f); mWorldTrigger.fShape = 1; } @@ -118,12 +116,12 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) mWorldTrigger.fMatRow0Width.x = mat[0][0]; mWorldTrigger.fMatRow0Width.y = mat[0][1]; mWorldTrigger.fMatRow0Width.z = mat[0][2]; - mWorldTrigger.fMatRow0Width.w = triggerWidth; - mWorldTrigger.fHeight = triggerHeight + triggerHeight; + mWorldTrigger.fMatRow0Width.w = dimSwizzled.x; + mWorldTrigger.fHeight = dimSwizzled.y + dimSwizzled.y; mWorldTrigger.fMatRow2Length.x = mat[2][0]; mWorldTrigger.fMatRow2Length.y = mat[2][1]; mWorldTrigger.fMatRow2Length.z = mat[2][2]; - mWorldTrigger.fMatRow2Length.w = triggerLength; + mWorldTrigger.fMatRow2Length.w = dimSwizzled.z; mWorldTrigger.fPosRadius.x = posSwizzled.x; mWorldTrigger.fPosRadius.y = posSwizzled.y; mWorldTrigger.fPosRadius.z = posSwizzled.z; From faa57cfee3eac0ce04844f673dc0333c38a1ce8f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 21:49:39 +0100 Subject: [PATCH 448/691] 82.8%: improve GRacerInfo::CreateVehicle Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index a95fae155..700524403 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -361,7 +361,7 @@ IVehicle *GRacerInfo::CreateVehicle(unsigned int default_key) { } } - Attrib::Gen::pvehicle attributes(Attrib::FindCollection(Attrib::Gen::pvehicle::ClassKey(), vehicle_key), 0, nullptr); + Attrib::Gen::pvehicle attributes(vehicle_key, 0, nullptr); if (!attributes.IsValid()) { return nullptr; From c90c37e7ea1800e05f55d1da2cc7eb5c31392be3 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 21:51:54 +0100 Subject: [PATCH 449/691] 82.9%: improve GRacerInfo::CreateVehicle Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 700524403..be6194599 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -326,7 +326,7 @@ IVehicle *GRacerInfo::CreateVehicle(unsigned int default_key) { IVehicleCache *cache; UMath::Vector3 direction = {0.0f, 0.0f, 1.0f}; ISimable *result; - IVehicle *vehicle = nullptr; + IVehicle *vehicle; if (!racerChar) { return nullptr; @@ -396,7 +396,7 @@ IVehicle *GRacerInfo::CreateVehicle(unsigned int default_key) { } } - return vehicle; + return nullptr; } void GRacerInfo::KnockOut() { From dbc6b4174788a4c34e1a7bda6b6c47843e625750 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 21:53:23 +0100 Subject: [PATCH 450/691] 82.9%: improve GRacerInfo::CreateVehicle Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Frontend/Database/VehicleDB.hpp | 4 ++++ src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Frontend/Database/VehicleDB.hpp b/src/Speed/Indep/Src/Frontend/Database/VehicleDB.hpp index 006e3698f..dc49d1796 100644 --- a/src/Speed/Indep/Src/Frontend/Database/VehicleDB.hpp +++ b/src/Speed/Indep/Src/Frontend/Database/VehicleDB.hpp @@ -29,6 +29,10 @@ struct FECustomizationRecord { Physics::eCustomTuningType ActiveTuning; // offset 0x18C, size 0x4 int Preset; // offset 0x190, size 0x4 unsigned char Handle; // offset 0x194, size 0x1 + + bool IsPreset() const { + return Preset != 0; + } }; // total size: 0x8 diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index be6194599..b22bd3413 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -367,7 +367,7 @@ IVehicle *GRacerInfo::CreateVehicle(unsigned int default_key) { return nullptr; } - if (customizations.Preset == 0) { + if (!customizations.IsPreset()) { RideInfo ride; const char *modelName = attributes.MODEL().GetString(); From d58a347f2e1fc80869e1cd1c5fbac719313898ff Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 21:54:47 +0100 Subject: [PATCH 451/691] 83.0%: improve GRacerInfo::CreateVehicle Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index b22bd3413..fd380fbed 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -322,11 +322,6 @@ IVehicle *GRacerInfo::CreateVehicle(unsigned int default_key) { const char *presetRide; FECustomizationRecord customizations; unsigned int vehicle_key; - Physics::Info::Performance ai_performance(1.0f, 1.0f, 1.0f); - IVehicleCache *cache; - UMath::Vector3 direction = {0.0f, 0.0f, 1.0f}; - ISimable *result; - IVehicle *vehicle; if (!racerChar) { return nullptr; @@ -380,16 +375,20 @@ IVehicle *GRacerInfo::CreateVehicle(unsigned int default_key) { FECustomizationRecordWriteRideIntoRecord(&customizations, &ride); } - cache = nullptr; + Physics::Info::Performance ai_performance(1.0f, 1.0f, 1.0f); + IVehicleCache *cache = nullptr; if (GRaceStatus::Exists()) { GRaceStatus *raceStatus = &GRaceStatus::Get(); cache = reinterpret_cast(reinterpret_cast(raceStatus) + 0x10); } + UMath::Vector3 direction = {0.0f, 0.0f, 1.0f}; VehicleParams params(cache, DRIVER_RACER, vehicle_key, direction, UMath::Vector3::kZero, 0, &customizations, &ai_performance); - result = UTL::COM::Factory::CreateInstance("PVehicle", params); + ISimable *result = UTL::COM::Factory::CreateInstance("PVehicle", params); if (result) { + IVehicle *vehicle; + if (result->QueryInterface(&vehicle)) { SetSimable(result); return vehicle; From bfbb205a01df89e89473ca079937f7408ea471b7 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 22:04:12 +0100 Subject: [PATCH 452/691] 83.0%: improve GTrigger::GTrigger Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 17c03dcbd..8a74575d4 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -25,7 +25,6 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) const float *rotation; const UMath::Vector3 *position; const UMath::Vector3 *dimensions; - const float *radius; UMath::Vector3 posSwizzled; UMath::Vector3 dimSwizzled; float triggerRadius; @@ -79,9 +78,7 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) UMath::Copy(UMath::Matrix4::kIdentity, mat); - radius = reinterpret_cast(GetAttributePointer(0x39BF8002, 0)); - if (radius) { - triggerRadius = *radius; + if (Radius(triggerRadius)) { dimSwizzled.x = triggerRadius + triggerRadius; dimSwizzled.y = dimSwizzled.x; dimSwizzled.z = dimSwizzled.x; From b7d6564918d088379a7575f3d4f39357b4a913ce Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 22:05:20 +0100 Subject: [PATCH 453/691] 83.0%: improve GTrigger::GTrigger Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 8a74575d4..811577cf6 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -28,8 +28,6 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) UMath::Vector3 posSwizzled; UMath::Vector3 dimSwizzled; float triggerRadius; - EventStaticData *pTriggerData = &mEventStaticData; - bool showIconBasedOnBin = true; const int *oneShot; bool hasDimensions; @@ -138,6 +136,7 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) mEventList.fPad[0] = 0; mEventList.fPad[1] = 0; mEventList.fPad[2] = 0; + EventStaticData *pTriggerData = &mEventStaticData; pTriggerData->fEventID = 0xC34649C0u; pTriggerData->fEventSize = 8; pTriggerData->fDataOffset = 0x10; @@ -145,6 +144,7 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) bMemSet(mTriggerEventData, 0, sizeof(mTriggerEventData)); reinterpret_cast(mTriggerEventData)[1] = GetCollection(); + bool showIconBasedOnBin = true; if (IsDerivedFromTemplate(0xF05931AB)) { SetFlag(0x200); const GCollectionKey &targetActivityKey = TargetActivity(); From e7e46cf7e08193915c01cea8dcdccdfc6a7db19f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 22:18:25 +0100 Subject: [PATCH 454/691] 83.2%: match+ GManager::UpdatePendingSMS Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Src/Frontend/HUD/FeMenuZoneTrigger.hpp | 26 +++++++++++++++++++ src/Speed/Indep/Src/Gameplay/GManager.cpp | 22 ++++++++++++++-- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Frontend/HUD/FeMenuZoneTrigger.hpp b/src/Speed/Indep/Src/Frontend/HUD/FeMenuZoneTrigger.hpp index e24bb9430..48f0e9d73 100644 --- a/src/Speed/Indep/Src/Frontend/HUD/FeMenuZoneTrigger.hpp +++ b/src/Speed/Indep/Src/Frontend/HUD/FeMenuZoneTrigger.hpp @@ -5,6 +5,32 @@ #pragma once #endif +#include "Speed/Indep/Libs/Support/Utility/UCOM.h" +struct GRuntimeInstance; + +struct IMenuZoneTrigger : public UTL::COM::IUnknown { + static HINTERFACE _IHandle() { + return (HINTERFACE)_IHandle; + } + + protected: + IMenuZoneTrigger(UTL::COM::Object *owner) : UTL::COM::IUnknown(owner, _IHandle()) {} + + virtual ~IMenuZoneTrigger() {} + + public: + virtual bool ShouldSeeMenuZoneCluster(); + virtual bool IsPlayerInsideTrigger(); + virtual void EnterTriggerForAutoSave(); + virtual void ExitTriggerForAutoSave(); + virtual void EnterTrigger(GRuntimeInstance *pRaceActivity); + virtual void EnterTrigger(char *zoneType); + virtual void ExitTrigger(); + virtual void RequestEventInfoDialog(int port); + virtual void RequestZoneInfoDialog(int port); + virtual bool IsType(const char *t); + virtual void RequestDoAction(); +}; #endif diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index e831445a4..4b89684d7 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -6,8 +6,10 @@ #include "Speed/Indep/Src/Generated/Events/EAutoSave.hpp" #include "Speed/Indep/Src/Generated/Events/EFadeScreenOff.hpp" #include "Speed/Indep/Src/Generated/Events/EFadeScreenOn.hpp" +#include "Speed/Indep/Src/Generated/Events/EShowSMS.hpp" #include "Speed/Indep/Src/Generated/Messages/MEnteringGameplay.h" #include "Speed/Indep/Src/Generated/Messages/MNotifyMilestoneProgress.h" +#include "Speed/Indep/Src/Frontend/HUD/FeMenuZoneTrigger.hpp" #include "Speed/Indep/Src/Gameplay/GMarker.h" #include "Speed/Indep/Src/Gameplay/GVault.h" #include "Speed/Indep/Src/Interfaces/SimActivities/ICopMgr.h" @@ -2164,8 +2166,24 @@ int GManager::PushSMSToInbox() { } void GManager::UpdatePendingSMS() { - if (GetHasPendingSMS() && CanPlaySMS()) { - PushSMSToInbox(); + if (mPendingSMS.size() && CanPlaySMS()) { + int smsToShow = PushSMSToInbox(); + if (smsToShow != -1) { + new EShowSMS(smsToShow); + } + + IPlayer *player = IPlayer::First(PLAYER_LOCAL); + if (player) { + IHud *ihud = player->GetHud(); + if (ihud) { + IMenuZoneTrigger *izone; + if (ihud->QueryInterface(&izone)) { + if (izone) { + izone->ExitTrigger(); + } + } + } + } } } From ffaa77124cd1da9fb66242d12ded186bdf074c49 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 22:28:00 +0100 Subject: [PATCH 455/691] 83.3%: match+ gameplay helper emissions Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 4 ++++ src/Speed/Indep/Src/Gameplay/GState.cpp | 15 +++++++++++++++ .../Indep/Src/Generated/Messages/MStateEnter.h | 6 +----- .../Indep/Src/Generated/Messages/MStateExit.h | 6 +----- .../Indep/Src/Interfaces/Simables/IAudible.h | 4 +--- 5 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index fd380fbed..b6f1ed4ac 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -49,6 +49,10 @@ unsigned int bStringHashUpper(const char *text); struct PresetCar; struct CarPartDatabase; +HINTERFACE IAudible::_IHandle() { + return (HINTERFACE)_IHandle; +} + extern CarPartDatabase CarPartDB; FECustomizationRecord *FECustomizationRecordCtor(FECustomizationRecord *self) __asm__("__21FECustomizationRecord"); diff --git a/src/Speed/Indep/Src/Gameplay/GState.cpp b/src/Speed/Indep/Src/Gameplay/GState.cpp index 747b8cfa7..344ff68b9 100644 --- a/src/Speed/Indep/Src/Gameplay/GState.cpp +++ b/src/Speed/Indep/Src/Gameplay/GState.cpp @@ -1,5 +1,20 @@ #include "Speed/Indep/Src/Gameplay/GState.h" +#include "Speed/Indep/Src/Generated/Messages/MStateEnter.h" +#include "Speed/Indep/Src/Generated/Messages/MStateExit.h" + +UCrc32 MStateEnter::_GetKind() { + static UCrc32 k("MStateEnter"); + + return k; +} + +UCrc32 MStateExit::_GetKind() { + static UCrc32 k("MStateExit"); + + return k; +} + GState::GState(const Attrib::Key &stateKey) : GRuntimeInstance(stateKey, kGameplayObjType_State) {} GState::~GState() {} diff --git a/src/Speed/Indep/Src/Generated/Messages/MStateEnter.h b/src/Speed/Indep/Src/Generated/Messages/MStateEnter.h index b41cf70b8..766765c8f 100644 --- a/src/Speed/Indep/Src/Generated/Messages/MStateEnter.h +++ b/src/Speed/Indep/Src/Generated/Messages/MStateEnter.h @@ -14,11 +14,7 @@ class MStateEnter : public Hermes::Message { return sizeof(MStateEnter); } - static UCrc32 _GetKind() { - static UCrc32 k("MStateEnter"); - - return k; - } + static UCrc32 _GetKind(); MStateEnter() : Hermes::Message(_GetKind(), _GetSize(), 0) {} diff --git a/src/Speed/Indep/Src/Generated/Messages/MStateExit.h b/src/Speed/Indep/Src/Generated/Messages/MStateExit.h index 6ed9ae779..aebf9b977 100644 --- a/src/Speed/Indep/Src/Generated/Messages/MStateExit.h +++ b/src/Speed/Indep/Src/Generated/Messages/MStateExit.h @@ -14,11 +14,7 @@ class MStateExit : public Hermes::Message { return sizeof(MStateExit); } - static UCrc32 _GetKind() { - static UCrc32 k("MStateExit"); - - return k; - } + static UCrc32 _GetKind(); MStateExit() : Hermes::Message(_GetKind(), _GetSize(), 0) {} diff --git a/src/Speed/Indep/Src/Interfaces/Simables/IAudible.h b/src/Speed/Indep/Src/Interfaces/Simables/IAudible.h index 9c1dc8476..19bc8168d 100644 --- a/src/Speed/Indep/Src/Interfaces/Simables/IAudible.h +++ b/src/Speed/Indep/Src/Interfaces/Simables/IAudible.h @@ -9,9 +9,7 @@ class IAudible : public UTL::COM::IUnknown { public: - static HINTERFACE _IHandle() { - return (HINTERFACE)_IHandle; - } + static HINTERFACE _IHandle(); IAudible(UTL::COM::Object *owner) : UTL::COM::IUnknown(owner, _IHandle()) {} From 34b441debbd9f6b19cf1eaea89ff25d56e87912a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 22:36:48 +0100 Subject: [PATCH 456/691] 83.3%: improve Attrib::Attribute::Get Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp | 10 ++++++++++ src/Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h | 1 + 2 files changed, 11 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp index b2f68e864..e8a6669f7 100644 --- a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp @@ -235,6 +235,16 @@ template GCharacter *GRuntimeInstance::FindObject(unsigned int key); template GMarker *GRuntimeInstance::FindObject(unsigned int key); template GTrigger *GRuntimeInstance::FindObject(unsigned int key); +template <> const GCollectionKey &Attrib::Attribute::Get(unsigned int index) const { + const GCollectionKey *resultptr = reinterpret_cast(GetElementPointer(index)); + + if (!resultptr) { + resultptr = reinterpret_cast(Attrib::DefaultDataArea(sizeof(GCollectionKey))); + } + + return *resultptr; +} + GCollectionKey::GCollectionKey(GRuntimeInstance *inst) { if (inst) { mCollectionKey = inst->GetCollection(); diff --git a/src/Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h b/src/Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h index 85efaba7c..0ce008b66 100644 --- a/src/Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h +++ b/src/Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h @@ -666,6 +666,7 @@ class Attribute { bool SetLength(unsigned int); void SendChangeMsg() const; // TODO + template const T &Get(unsigned int index) const; template const T &Get(unsigned int index, T &result) const; template bool Set(unsigned int index, const T &input) { T *resultptr = reinterpret_cast(GetElementPointer(index)); From c692dea93bdf5c6b41e102d0bad63e322f308463 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 22:38:28 +0100 Subject: [PATCH 457/691] 83.4%: match+ global constructors keyed to GRuntimeInstance::sRingListHead Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp index e8a6669f7..89da90190 100644 --- a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp @@ -9,7 +9,7 @@ #include -GRuntimeInstance *GRuntimeInstance::sRingListHead[6]; +GRuntimeInstance *GRuntimeInstance::sRingListHead[6] = {0}; GRuntimeInstance::GRuntimeInstance(const Attrib::Key &key, GameplayObjType type) : Attrib::Gen::gameplay(key, 0, nullptr) // From fd0f74fb59a9627d09391353468388273c6c8c80 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 22:46:04 +0100 Subject: [PATCH 458/691] 83.4%: improve GCharacter::AttemptSpawn Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GCharacter.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp index 20fcd7c15..aebcce73a 100644 --- a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp +++ b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp @@ -74,6 +74,13 @@ bool GCharacter::AttemptSpawn() { if (mState == kCharState_Unspawned) { const char *carType = CarType(0); const char *carTypeLowMem = CarTypeLowMem(0); + + if (carTypeLowMem) { + if (*carTypeLowMem) { + carType = carTypeLowMem; + } + } + bool isCop = bStrCmp(carType, "copmidsize") == 0; DriverClass driverClass = DRIVER_TRAFFIC; bool spawn_ok = true; @@ -91,12 +98,6 @@ bool GCharacter::AttemptSpawn() { } if (spawn_ok) { - if (carTypeLowMem) { - if (*carTypeLowMem) { - carType = carTypeLowMem; - } - } - ISimable *isimable = GManager::Get().GetStockCar(carType); if (!isimable) { From 336f077de9aece7c7e806387570a25f0779c776a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 22:47:55 +0100 Subject: [PATCH 459/691] 83.4%: improve GCharacter::AttemptSpawn Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GCharacter.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp index aebcce73a..60005ecdd 100644 --- a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp +++ b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp @@ -106,18 +106,19 @@ bool GCharacter::AttemptSpawn() { if (!isimable) { isimable = GManager::Get().GetRandomEmergencyStockCar(); - if (!isimable) { - return false; + if (isimable) { + SetFlag(kCharFlag_UsingStockCar); } - SetFlag(kCharFlag_UsingStockCar); } } else { SetFlag(kCharFlag_UsingStockCar); } - mAttachments->Attach(isimable); - mVehicle->SetDriverClass(driverClass); - mState = kCharState_Spawning_WaitingForModel; + if (isimable) { + Attach(isimable); + mVehicle->SetDriverClass(driverClass); + mState = kCharState_Spawning_WaitingForModel; + } } } @@ -139,12 +140,13 @@ bool GCharacter::AttemptSpawn() { if (isimable->QueryInterface(&vehicleAI)) { AITarget *target = vehicleAI->GetTarget(); - WRoadNav *road_nav = vehicleAI->GetCurrentRoad(); if (target) { target->Aquire(mTargetPos, mTargetDir); } + WRoadNav *road_nav = vehicleAI->GetCurrentRoad(); + if (road_nav) { road_nav->ResetCookieTrail(); } From db6ecc617c85edfa9c56aaea56bdbece9e2c02ca Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 22:52:55 +0100 Subject: [PATCH 460/691] 83.6%: match GRaceParameters::GRaceParameters Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index b6f1ed4ac..5b1750f7c 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -923,10 +923,26 @@ void GRacerInfo::FinalizeRaceStats() { } GRaceParameters::GRaceParameters(unsigned int collectionKey, GRaceIndexData *index) - : mIndex(index), // + : mIndex(nullptr), // mRaceRecord(new Attrib::Gen::gameplay(collectionKey, 0, nullptr)), // mParentVault(nullptr), // - mChildVault(nullptr) {} + mChildVault(nullptr) { + const char *childVaultName; + + GenerateIndex(index); + mIndex = index; + + childVaultName = mRaceRecord->gameplayvault(0); + if (childVaultName) { + mChildVault = GManager::Get().FindVault(childVaultName); + mRaceRecord->Num_Children(); + } + + mParentVault = GManager::Get().FindVaultContaining(mRaceRecord->GetCollection()); + if (mParentVault) { + mParentVault->IsTransient(); + } +} GRaceParameters::~GRaceParameters() { delete mRaceRecord; From 60c57effbb5a83ae4ea5f2321af3d0aa6db7cc72 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 22:54:22 +0100 Subject: [PATCH 461/691] 83.6%: dwarf improve GCharacter::AttemptSpawn Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GCharacter.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp index 60005ecdd..993f00c57 100644 --- a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp +++ b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp @@ -137,15 +137,19 @@ bool GCharacter::AttemptSpawn() { if (mVehicle->QueryInterface(&isimable)) { IVehicleAI *vehicleAI; + ITrafficAI *itv; if (isimable->QueryInterface(&vehicleAI)) { - AITarget *target = vehicleAI->GetTarget(); + AITarget *target; + WRoadNav *road_nav; + + target = vehicleAI->GetTarget(); if (target) { target->Aquire(mTargetPos, mTargetDir); } - WRoadNav *road_nav = vehicleAI->GetCurrentRoad(); + road_nav = vehicleAI->GetCurrentRoad(); if (road_nav) { road_nav->ResetCookieTrail(); @@ -155,7 +159,6 @@ bool GCharacter::AttemptSpawn() { vehicleAI->ResetVehicleToRoadPos(mSpawnPos, mSpawnDir); if (0.0f < mSpawnSpeed) { - ITrafficAI *itv; float speedMph; mVehicle->Activate(); From 58bd7efb699e0c7d49aa1cb0bc0b620f9de1ec12 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 23:52:20 +0100 Subject: [PATCH 462/691] 83.6%: improve GRuntimeInstance::ConnectToInstance Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp index 89da90190..0f7ff1bb7 100644 --- a/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRuntimeInstance.cpp @@ -46,11 +46,11 @@ void GRuntimeInstance::AllocateConnectionBuffer(unsigned int numEntries) { void GRuntimeInstance::ConnectToInstance(const Attrib::Key &key, int index, GRuntimeInstance *instance) { unsigned int packedKey = MakePackedKey(key, index); unsigned short connectedIndex = mNumConnected; - ConnectedInstance *connected = mConnected; + ConnectedInstance *connected = &mConnected[connectedIndex]; mNumConnected = connectedIndex + 1; - connected[connectedIndex].mIndexedKey = packedKey; - connected[connectedIndex].mInstance = instance; + connected->mIndexedKey = packedKey; + connected->mInstance = instance; } void GRuntimeInstance::LockConnections() { From 3249d8cf7f27a84d116c89e0e3409984170c1f2e Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 23:57:49 +0100 Subject: [PATCH 463/691] 83.6%: improve GRaceStatus::DetermineRaceSegmentLength Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 5b1750f7c..f267d570a 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -739,7 +739,7 @@ void GRacerInfo::Update(float dT) { mTotalUpdateTime += dT; mDistanceDriven = distance; -#ifndef EA_BUILD_A124 + #ifndef EA_BUILD_A124 if (mQuarterMileTime == 0.0f) { static const float quarterMileInMeters = 402.335f; @@ -3898,11 +3898,7 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c float segLenScale = static_cast(nav.GetSegment()->nLength) * 0.015259022f; do { - float lengthDelta = segLenScale * (1.0f - nav.GetSegTime()); - - if (lengthDelta < 0.01f) { - lengthDelta = 0.01f; - } + float lengthDelta = UMath::Max(segLenScale * (1.0f - nav.GetSegTime()), 0.01f); segmentDistance += lengthDelta; nav.IncNavPosition(lengthDelta, UMath::Vector4To3(directions[end]), 0.0f); From 778a6dd35f18b2183c8d7cfa16f4c179899f1dfd Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 23:58:48 +0100 Subject: [PATCH 464/691] 83.6%: improve GRaceStatus::DetermineRaceSegmentLength Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index f267d570a..37715ebe7 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3936,7 +3936,7 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c for (int i = 0; i < nav.GetNumPathSegments(); ++i) { const WRoadSegment *roadSegment = WRoadNetwork::Get().GetSegment(nav.GetPathSegment(i)); - if (!(roadSegment->fFlags & 1)) { + if ((roadSegment->fFlags & 1) == 0) { pathSegment.Roads.insert(roadSegment->fRoadID); } } From 090aacde1b06ad54be3a47196f7ae399e815a051 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Fri, 20 Mar 2026 23:59:47 +0100 Subject: [PATCH 465/691] 83.6%: improve GRaceStatus::DetermineRaceSegmentLength Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 37715ebe7..e52691499 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3949,11 +3949,13 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c } pathDistance += segmentDistance; - if (noShortcuts && pathSegments.size() == 0) { + int numPaths = pathSegments.size(); + + if (noShortcuts && numPaths == 0) { bRaceRouteError = true; } - if (noShortcuts && pathSegments.size() > 1) { + if (noShortcuts && numPaths > 1) { PathSegment *sortedPaths[32]; int count = 0; From 79c7d41783a4e48c31d33a014c1007711c6d46ae Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 00:00:43 +0100 Subject: [PATCH 466/691] 83.6%: improve GRaceStatus::DetermineRaceSegmentLength Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 33 ++++++++++---------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index e52691499..dfacbc623 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3964,28 +3964,29 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c } for (int i = 1; i < count; ++i) { - PathSegment *current = sortedPaths[i]; - PathSegment *previous = sortedPaths[i - 1]; - UTL::Std::set roadDiff; - float roadDiffLength = 0.0f; + PathSegment *shorter_path = sortedPaths[i - 1]; + PathSegment *longer_path = sortedPaths[i]; + UTL::Std::set unique_roads; + float unique_length = 0.0f; + float longer_by = longer_path->Length - shorter_path->Length; std::set_difference( - previous->Roads.begin(), - previous->Roads.end(), - current->Roads.begin(), - current->Roads.end(), - std::insert_iterator >(roadDiff, roadDiff.begin())); - - for (UTL::Std::set::iterator it = roadDiff.begin(); it != roadDiff.end(); ++it) { - roadDiffLength += static_cast(WRoadNetwork::Get().GetRoad(*it)->nLength) * 0.061036088f; + shorter_path->Roads.begin(), + shorter_path->Roads.end(), + longer_path->Roads.begin(), + longer_path->Roads.end(), + std::insert_iterator >(unique_roads, unique_roads.begin())); + + for (UTL::Std::set::iterator it = unique_roads.begin(); it != unique_roads.end(); ++it) { + unique_length += static_cast(WRoadNetwork::Get().GetRoad(*it)->nLength) * 0.061036088f; } - if (roadDiffLength > 0.0f) { - float scale_ratio = ((current->Length - previous->Length) + roadDiffLength) / roadDiffLength; + if (unique_length > 0.0f) { + float road_scale = (longer_by + unique_length) / unique_length; - for (UTL::Std::set::iterator it = roadDiff.begin(); it != roadDiff.end(); ++it) { + for (UTL::Std::set::iterator it = unique_roads.begin(); it != unique_roads.end(); ++it) { WRoad *road = const_cast(WRoadNetwork::Get().GetRoad(*it)); - int scale = static_cast(scale_ratio * 65536.0f); + int scale = static_cast(road_scale * 65536.0f); road->nScale = static_cast(scale >> 8); } From e607372a6c336f9c5d82dcda239bf63a64131091 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 00:02:56 +0100 Subject: [PATCH 467/691] 83.6%: improve GRaceStatus::DetermineRaceSegmentLength Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index dfacbc623..732a8fb72 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3933,7 +3933,9 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c shortcutAllowed[shortcut] = 0; } pathSegment.Length = pathDistance; - for (int i = 0; i < nav.GetNumPathSegments(); ++i) { + int numSegments = nav.GetNumPathSegments(); + + for (int i = 0; i < numSegments; ++i) { const WRoadSegment *roadSegment = WRoadNetwork::Get().GetSegment(nav.GetPathSegment(i)); if ((roadSegment->fFlags & 1) == 0) { From 289f1123e19e93040679ea32b837632bcb0470b7 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 00:03:50 +0100 Subject: [PATCH 468/691] 83.6%: improve GRaceStatus::DetermineRaceSegmentLength Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 732a8fb72..cc134e438 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3951,13 +3951,17 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c } pathDistance += segmentDistance; - int numPaths = pathSegments.size(); + int numPaths = 0; - if (noShortcuts && numPaths == 0) { + if (noShortcuts) { + numPaths = pathSegments.size(); + } + + if (numPaths == 0) { bRaceRouteError = true; } - if (noShortcuts && numPaths > 1) { + if (numPaths > 1) { PathSegment *sortedPaths[32]; int count = 0; From 58e3f6038bfc07974ec47c5f91e1782b10e9f661 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 01:07:58 +0100 Subject: [PATCH 469/691] 83.6%: improve GRaceStatus::DetermineRaceSegmentLength Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index cc134e438..22e51ff03 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3950,13 +3950,14 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c } } - pathDistance += segmentDistance; int numPaths = 0; if (noShortcuts) { numPaths = pathSegments.size(); } + pathDistance += segmentDistance; + if (numPaths == 0) { bRaceRouteError = true; } From a38f7422f86577986d256a4ad4092f27fce94309 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 01:09:19 +0100 Subject: [PATCH 470/691] 83.6%: improve GRaceStatus::DetermineRaceSegmentLength Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 22e51ff03..37e5f4c7a 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3971,11 +3971,11 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c } for (int i = 1; i < count; ++i) { - PathSegment *shorter_path = sortedPaths[i - 1]; PathSegment *longer_path = sortedPaths[i]; + PathSegment *shorter_path = sortedPaths[i - 1]; + float longer_by = longer_path->Length - shorter_path->Length; UTL::Std::set unique_roads; float unique_length = 0.0f; - float longer_by = longer_path->Length - shorter_path->Length; std::set_difference( shorter_path->Roads.begin(), From 70443c7483d207e6a45325b246f79cc05907ac57 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 01:12:00 +0100 Subject: [PATCH 471/691] 83.7%: improve GRacerInfo::IsBehind Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 37 ++++++++++++-------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 37e5f4c7a..a0199d3a6 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -614,31 +614,40 @@ void GRacerInfo::FinishRace() { } bool GRacerInfo::IsBehind(const GRacerInfo &rhs) const { - if (IsFinishedRacing() && rhs.IsFinishedRacing()) { - return GetRaceTime() > rhs.GetRaceTime(); + if (IsFinishedRacing()) { + if (rhs.IsFinishedRacing()) { + return GetRaceTime() > rhs.GetRaceTime(); + } + + return false; + } + + if (rhs.IsFinishedRacing()) { + return true; } - if (IsFinishedRacing() != rhs.IsFinishedRacing()) { - return !IsFinishedRacing(); + if ((GetIsKnockedOut() && rhs.GetIsKnockedOut()) || (GetIsEngineBlown() && rhs.GetIsEngineBlown()) || + (GetIsTotalled() && rhs.GetIsTotalled())) { + return GetRaceTime() > rhs.GetRaceTime(); } - if (GetIsKnockedOut() != rhs.GetIsKnockedOut()) { - return GetIsKnockedOut(); +#ifndef EA_BUILD_A124 + if (mDNF && rhs.mDNF) { + return GetPctRaceComplete() < rhs.GetPctRaceComplete(); } +#endif - if (GetIsEngineBlown() != rhs.GetIsEngineBlown()) { - return GetIsEngineBlown(); + if (GetIsKnockedOut() || GetIsEngineBlown() || GetIsTotalled()) { + return true; } - if (GetIsTotalled() != rhs.GetIsTotalled()) { - return GetIsTotalled(); + if (rhs.GetIsKnockedOut() || rhs.GetIsEngineBlown() || rhs.GetIsTotalled()) { + return false; } -#ifndef EA_BUILD_A124 - if (mDNF != rhs.mDNF) { - return mDNF; + if (mLapsCompleted != rhs.mLapsCompleted) { + return mLapsCompleted < rhs.mLapsCompleted; } -#endif return GetPctRaceComplete() < rhs.GetPctRaceComplete(); } From 45bae171529edc82ca5c5297e8897ea6ee981630 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 01:14:50 +0100 Subject: [PATCH 472/691] 83.8%: improve GRacerInfo::IsBehind Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 25 +++++++++++++------- src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 3 +++ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index a0199d3a6..a4a1779fe 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -615,25 +615,34 @@ void GRacerInfo::FinishRace() { bool GRacerInfo::IsBehind(const GRacerInfo &rhs) const { if (IsFinishedRacing()) { - if (rhs.IsFinishedRacing()) { - return GetRaceTime() > rhs.GetRaceTime(); + if (!rhs.IsFinishedRacing()) { + return false; } - return false; + return GetRaceTime() > rhs.GetRaceTime(); } if (rhs.IsFinishedRacing()) { return true; } - if ((GetIsKnockedOut() && rhs.GetIsKnockedOut()) || (GetIsEngineBlown() && rhs.GetIsEngineBlown()) || - (GetIsTotalled() && rhs.GetIsTotalled())) { - return GetRaceTime() > rhs.GetRaceTime(); + if (GetIsKnockedOut() && rhs.GetIsKnockedOut()) { + return GetRaceTime() < rhs.GetRaceTime(); + } + + if (GetIsEngineBlown() && rhs.GetIsEngineBlown()) { + return GetRaceTime() < rhs.GetRaceTime(); + } + + if (GetIsTotalled() && rhs.GetIsTotalled()) { + return GetRaceTime() < rhs.GetRaceTime(); } #ifndef EA_BUILD_A124 - if (mDNF && rhs.mDNF) { - return GetPctRaceComplete() < rhs.GetPctRaceComplete(); + if (GetDNF()) { + if (rhs.GetDNF()) { + return GetPctRaceComplete() < rhs.GetPctRaceComplete(); + } } #endif diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index a8b1ffeab..e817b8809 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -78,6 +78,9 @@ struct GRacerInfo { float GetPointTotal() const { return mPointTotal; } float GetZeroToSixtyTime() const { return mZeroToSixtyTime; } float GetQuarterMileTime() const { return mQuarterMileTime; } +#ifndef EA_BUILD_A124 + bool GetDNF() const { return mDNF; } +#endif void SetName(const char *name); void SetIndex(int n); From 83ac437cbf218901924ba1478663a40a92a29fe0 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 01:20:03 +0100 Subject: [PATCH 473/691] 83.9%: match+ GCharacter::OnDetached Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GCharacter.cpp | 24 +++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp index 993f00c57..5b19e3235 100644 --- a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp +++ b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp @@ -45,10 +45,30 @@ void GCharacter::OnAttached(IAttachable *pOther) { } void GCharacter::OnDetached(IAttachable *pOther) { - IVehicle *vehicle; + IVehicle *ivehicle; + + if (pOther->QueryInterface(&ivehicle)) { + ISimable *isimable; + IVehicleAI *vai; + + mVehicle->QueryInterface(&isimable); + + if (isimable->QueryInterface(&vai)) { + WRoadNav *driveTo = vai->GetDriveToNav(); + + if (driveTo) { + driveTo->CancelPathFinding(); + } + } + + if (IsFlagSet(kCharFlag_UsingStockCar)) { + mVehicle->Deactivate(); + GManager::Get().ReleaseStockCar(isimable); + ClearFlag(kCharFlag_UsingStockCar); + } - if (pOther->QueryInterface(&vehicle) && mVehicle == vehicle) { mVehicle = nullptr; + Unspawn(); } } From 09715537d1547b905f41899586058d2e893b2193 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 01:27:44 +0100 Subject: [PATCH 474/691] 84.0%: match+ GCharacter::ReleaseVehicle Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GCharacter.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp index 5b19e3235..b6cb991ec 100644 --- a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp +++ b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp @@ -206,8 +206,20 @@ bool GCharacter::IsSpawned() const { } void GCharacter::ReleaseVehicle() { + ISimable *simableToKill; + if (mVehicle) { - mAttachments->Detach(mVehicle); + simableToKill = nullptr; + + if (IsFlagClear(kCharFlag_UsingStockCar)) { + mVehicle->QueryInterface(&simableToKill); + } + + Detach(mVehicle); + + if (simableToKill) { + simableToKill->Kill(); + } } } From 36d6822fc58876d3df752dc6bfd2a64db392f553 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 01:30:08 +0100 Subject: [PATCH 475/691] 84.0%: match+ GCharacter spawn-state helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GCharacter.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp index b6cb991ec..cf23ee650 100644 --- a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp +++ b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp @@ -87,7 +87,7 @@ void GCharacter::Spawn(const UMath::Vector3 &pos, const UMath::Vector3 &dir, GMa } bool GCharacter::SpawnPending() const { - return mState - kCharState_Spawning_WaitingForModel < 2; + return static_cast(mState - kCharState_Spawning_WaitingForModel) < 2; } bool GCharacter::AttemptSpawn() { @@ -202,7 +202,7 @@ bool GCharacter::AttemptSpawn() { } bool GCharacter::IsSpawned() const { - return mState == kCharState_Spawned; + return static_cast(mState - kCharState_Spawned) < 2; } void GCharacter::ReleaseVehicle() { From 1a7d09517aec00fbb8b77288321b943a500a3b63 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 01:39:33 +0100 Subject: [PATCH 476/691] 84.0%: improve GRacerInfo::IsBehind Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index a4a1779fe..ba08ff13e 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -641,7 +641,7 @@ bool GRacerInfo::IsBehind(const GRacerInfo &rhs) const { #ifndef EA_BUILD_A124 if (GetDNF()) { if (rhs.GetDNF()) { - return GetPctRaceComplete() < rhs.GetPctRaceComplete(); + return rhs.GetPctRaceComplete() < GetPctRaceComplete(); } } #endif @@ -3929,10 +3929,10 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c bMemSet(shortcutAllowed, 1, sizeof(shortcutAllowed)); while (true) { - bool foundPath; - nav.SetNavType(WRoadNav::kTypeDirection); nav.FindPathNow(&UMath::Vector4To3(positions[end]), &UMath::Vector4To3(directions[end]), shortcutAllowed); + bool foundPath; + foundPath = nav.GetNavType() == WRoadNav::kTypePath; if (!foundPath) { break; From 643cf5fe43ea737e166b44d7e9deeed7e8abc5e9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 01:42:51 +0100 Subject: [PATCH 477/691] 84.0%: improve GRacerInfo::IsBehind Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index ba08ff13e..0714a58f1 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -640,8 +640,8 @@ bool GRacerInfo::IsBehind(const GRacerInfo &rhs) const { #ifndef EA_BUILD_A124 if (GetDNF()) { - if (rhs.GetDNF()) { - return rhs.GetPctRaceComplete() < GetPctRaceComplete(); + if (!rhs.GetDNF()) { + return GetPctRaceComplete() > rhs.GetPctRaceComplete(); } } #endif From 578947dee97f6807fc55b18441d77282e8231b4f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 01:51:07 +0100 Subject: [PATCH 478/691] 84.0%: improve GRacerInfo::Update Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 0714a58f1..857bdf7df 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -749,7 +749,7 @@ void GRacerInfo::Update(float dT) { simable->GetLinearVelocity(linearVelocity); speed = UMath::Length(linearVelocity); - if (mTopSpeed < speed) { + if (speed > mTopSpeed) { mTopSpeed = speed; } @@ -759,17 +759,13 @@ void GRacerInfo::Update(float dT) { #ifndef EA_BUILD_A124 if (mQuarterMileTime == 0.0f) { - static const float quarterMileInMeters = 402.335f; - - if (quarterMileInMeters <= distance) { + if (402.335f <= distance) { mQuarterMileTime = GetRaceTime(); } } if (mZeroToSixtyTime == 0.0f) { - static const float sixtyMphInMetersPerSec = 26.8218f; - - if (sixtyMphInMetersPerSec <= mTopSpeed) { + if (26.8218f <= mTopSpeed) { mZeroToSixtyTime = GetRaceTime(); } } From 0c838e1c50971f5292c4510b7c224c2735fe74d2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 01:56:58 +0100 Subject: [PATCH 479/691] 84.0%: improve GRaceStatus::DetermineRaceSegmentLength Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 857bdf7df..d11e9f69f 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3902,6 +3902,7 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c nav.SetDecisionFilter(true); nav.SetPathType(WRoadNav::kPathChopper); + mRaceParms->GetNumCheckpoints(); VU0_v3sub(UMath::Vector4To3(positions[start]), UMath::Vector4To3(positions[end]), delta); pathDistance = VU0_sqrt(VU0_v3lengthsquare(delta)); @@ -4016,6 +4017,7 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c } } else { bRaceRouteError = true; + mRaceParms->GetNumCheckpoints(); } return pathDistance; From bdc3401554c0c92ff91c55d2aec0f821f039a75d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 02:05:41 +0100 Subject: [PATCH 480/691] 84.0%: improve GRaceStatus::Update Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index d11e9f69f..93bb1e3ca 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2999,7 +2999,9 @@ void GRaceStatus::Update(float dT) { GRacerInfo &info = GetRacerInfo(idx); info.Update(dT); - if (info.GetSimable()) { + ISimable *simable = info.GetSimable(); + + if (simable) { float weight = 1.0f; if (!info.GetGameCharacter()) { From 7c08b1ca12a1adc77323b8d01f52396eb684fe59 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 02:07:35 +0100 Subject: [PATCH 481/691] 84.0%: improve GRaceStatus::Update Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 93bb1e3ca..dd3aaee1c 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3026,7 +3026,7 @@ void GRaceStatus::Update(float dT) { MNotifyRaceTime(elapsed, GetIsTimeLimited(), GetRaceTimeRemaining()).Post(UCrc32(0x20D60DBF)); elapsedSec = static_cast(elapsed); - if (mLastSecondTickSent < elapsedSec) { + if (elapsedSec > mLastSecondTickSent) { mLastSecondTickSent = elapsedSec; MNotifyRaceTimeSecTick(elapsed).Post(UCrc32(0x20D60DBF)); } From ce4cd184741281a7bb06423d14d58ddc327fe24c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 02:08:52 +0100 Subject: [PATCH 482/691] 84.0%: improve GRaceStatus::Update Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index dd3aaee1c..ef897bff5 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3022,13 +3022,14 @@ void GRaceStatus::Update(float dT) { } #endif + UCrc32 gameplayMessage(0x20D60DBF); elapsed = GetRaceTimeElapsed(); - MNotifyRaceTime(elapsed, GetIsTimeLimited(), GetRaceTimeRemaining()).Post(UCrc32(0x20D60DBF)); + MNotifyRaceTime(elapsed, GetIsTimeLimited(), GetRaceTimeRemaining()).Post(gameplayMessage); elapsedSec = static_cast(elapsed); if (elapsedSec > mLastSecondTickSent) { mLastSecondTickSent = elapsedSec; - MNotifyRaceTimeSecTick(elapsed).Post(UCrc32(0x20D60DBF)); + MNotifyRaceTimeSecTick(elapsed).Post(gameplayMessage); } if (GetIsTimeLimited()) { @@ -3045,7 +3046,7 @@ void GRaceStatus::Update(float dT) { } if (!mTimeExpiredMsgSent && GetRaceTimeRemaining() <= 0.0f) { - MNotifyRaceTimeExpired().Post(UCrc32(0x20D60DBF)); + MNotifyRaceTimeExpired().Post(gameplayMessage); mTimeExpiredMsgSent = true; for (int idx = 0; idx < mRacerCount; ++idx) { From 5f5cef90cb291e2955cd9bdd4dc942e182fa2903 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 02:11:56 +0100 Subject: [PATCH 483/691] 84.0%: improve GRaceStatus::DetermineRaceSegmentLength Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index ef897bff5..2474910c2 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3939,8 +3939,6 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c } { - PathSegment pathSegment; - WRoadNetwork::Get().AddRaceSegments(&nav); pathDistance = nav.GetPathDistanceRemaining(); @@ -3950,6 +3948,8 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c if (!noShortcuts) { shortcutAllowed[shortcut] = 0; } + PathSegment pathSegment; + pathSegment.Length = pathDistance; int numSegments = nav.GetNumPathSegments(); From 4e59b73908d90cd060693ca5f45faae88bc58b24 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 02:14:24 +0100 Subject: [PATCH 484/691] 84.1%: improve GRaceStatus::DetermineRaceSegmentLength Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 2474910c2..47b70d57f 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3926,6 +3926,7 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c UTL::Std::set pathSegments; char shortcutAllowed[32]; bool noShortcuts = true; + WRoadNetwork *roadNetwork = &WRoadNetwork::Get(); bMemSet(shortcutAllowed, 1, sizeof(shortcutAllowed)); while (true) { @@ -3939,7 +3940,7 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c } { - WRoadNetwork::Get().AddRaceSegments(&nav); + roadNetwork->AddRaceSegments(&nav); pathDistance = nav.GetPathDistanceRemaining(); unsigned char shortcut = nav.FirstShortcutInPath(); @@ -3954,7 +3955,7 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c int numSegments = nav.GetNumPathSegments(); for (int i = 0; i < numSegments; ++i) { - const WRoadSegment *roadSegment = WRoadNetwork::Get().GetSegment(nav.GetPathSegment(i)); + const WRoadSegment *roadSegment = roadNetwork->GetSegment(nav.GetPathSegment(i)); if ((roadSegment->fFlags & 1) == 0) { pathSegment.Roads.insert(roadSegment->fRoadID); @@ -4000,17 +4001,17 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c shorter_path->Roads.end(), longer_path->Roads.begin(), longer_path->Roads.end(), - std::insert_iterator >(unique_roads, unique_roads.begin())); + std::insert_iterator >(unique_roads, unique_roads.begin())); for (UTL::Std::set::iterator it = unique_roads.begin(); it != unique_roads.end(); ++it) { - unique_length += static_cast(WRoadNetwork::Get().GetRoad(*it)->nLength) * 0.061036088f; + unique_length += static_cast(roadNetwork->GetRoad(*it)->nLength) * 0.061036088f; } if (unique_length > 0.0f) { float road_scale = (longer_by + unique_length) / unique_length; for (UTL::Std::set::iterator it = unique_roads.begin(); it != unique_roads.end(); ++it) { - WRoad *road = const_cast(WRoadNetwork::Get().GetRoad(*it)); + WRoad *road = const_cast(roadNetwork->GetRoad(*it)); int scale = static_cast(road_scale * 65536.0f); road->nScale = static_cast(scale >> 8); From c3dd7e1ff85e7668744f71568e4356658e1f4c26 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 02:16:50 +0100 Subject: [PATCH 485/691] 84.1%: improve GRaceStatus::DetermineRaceSegmentLength Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 47b70d57f..d9602144f 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3992,7 +3992,6 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c for (int i = 1; i < count; ++i) { PathSegment *longer_path = sortedPaths[i]; PathSegment *shorter_path = sortedPaths[i - 1]; - float longer_by = longer_path->Length - shorter_path->Length; UTL::Std::set unique_roads; float unique_length = 0.0f; @@ -4002,6 +4001,7 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c longer_path->Roads.begin(), longer_path->Roads.end(), std::insert_iterator >(unique_roads, unique_roads.begin())); + float longer_by = longer_path->Length - shorter_path->Length; for (UTL::Std::set::iterator it = unique_roads.begin(); it != unique_roads.end(); ++it) { unique_length += static_cast(roadNetwork->GetRoad(*it)->nLength) * 0.061036088f; From 04a627e3cbdccee4464659d74d9d2a6f2bbc683b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 02:17:53 +0100 Subject: [PATCH 486/691] 84.1%: improve GRaceStatus::DetermineRaceSegmentLength Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index d9602144f..fde75c559 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3993,7 +3993,6 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c PathSegment *longer_path = sortedPaths[i]; PathSegment *shorter_path = sortedPaths[i - 1]; UTL::Std::set unique_roads; - float unique_length = 0.0f; std::set_difference( shorter_path->Roads.begin(), @@ -4001,6 +4000,7 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c longer_path->Roads.begin(), longer_path->Roads.end(), std::insert_iterator >(unique_roads, unique_roads.begin())); + float unique_length = 0.0f; float longer_by = longer_path->Length - shorter_path->Length; for (UTL::Std::set::iterator it = unique_roads.begin(); it != unique_roads.end(); ++it) { From 2b6259b97bb8a4c466d3cf5ddf07e60d9f462409 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 02:26:07 +0100 Subject: [PATCH 487/691] 84.1%: improve GRaceStatus::Update Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index fde75c559..c9c6e13e8 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3026,6 +3026,7 @@ void GRaceStatus::Update(float dT) { elapsed = GetRaceTimeElapsed(); MNotifyRaceTime(elapsed, GetIsTimeLimited(), GetRaceTimeRemaining()).Post(gameplayMessage); + elapsed = GetRaceTimeElapsed(); elapsedSec = static_cast(elapsed); if (elapsedSec > mLastSecondTickSent) { mLastSecondTickSent = elapsedSec; From 77fe0bc5fb9d6c0f8c7291c07610359c2a8e09c9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 02:29:16 +0100 Subject: [PATCH 488/691] 84.1%: improve GRaceStatus::Update Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index c9c6e13e8..fddb89ad4 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3024,7 +3024,14 @@ void GRaceStatus::Update(float dT) { UCrc32 gameplayMessage(0x20D60DBF); elapsed = GetRaceTimeElapsed(); - MNotifyRaceTime(elapsed, GetIsTimeLimited(), GetRaceTimeRemaining()).Post(gameplayMessage); + bool isTimeLimited; + + if (mRaceParms) { + isTimeLimited = mRaceParms->GetTimeLimit() > 0.0f; + } else { + isTimeLimited = false; + } + MNotifyRaceTime(elapsed, isTimeLimited, GetRaceTimeRemaining()).Post(gameplayMessage); elapsed = GetRaceTimeElapsed(); elapsedSec = static_cast(elapsed); From 25fc4fdbac1d3753d52de2bed62d380a44d48221 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 02:30:09 +0100 Subject: [PATCH 489/691] 84.1%: improve GRaceStatus::Update Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index fddb89ad4..1453009e0 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3031,7 +3031,9 @@ void GRaceStatus::Update(float dT) { } else { isTimeLimited = false; } - MNotifyRaceTime(elapsed, isTimeLimited, GetRaceTimeRemaining()).Post(gameplayMessage); + float timeRemaining = GetRaceTimeRemaining(); + + MNotifyRaceTime(elapsed, isTimeLimited, timeRemaining).Post(gameplayMessage); elapsed = GetRaceTimeElapsed(); elapsedSec = static_cast(elapsed); From 9fa248fbae393deefcc66af904d3f8cad09fd8fe Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 02:37:04 +0100 Subject: [PATCH 490/691] 84.1%: improve GRaceStatus::DetermineRaceSegmentLength Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 1453009e0..2022cbfca 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3938,18 +3938,15 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c bool noShortcuts = true; WRoadNetwork *roadNetwork = &WRoadNetwork::Get(); + bool foundPath; + bMemSet(shortcutAllowed, 1, sizeof(shortcutAllowed)); - while (true) { + do { nav.SetNavType(WRoadNav::kTypeDirection); nav.FindPathNow(&UMath::Vector4To3(positions[end]), &UMath::Vector4To3(directions[end]), shortcutAllowed); - bool foundPath; foundPath = nav.GetNavType() == WRoadNav::kTypePath; - if (!foundPath) { - break; - } - - { + if (foundPath) { roadNetwork->AddRaceSegments(&nav); pathDistance = nav.GetPathDistanceRemaining(); @@ -3973,11 +3970,7 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c } pathSegments.insert(pathSegment); } - - if (noShortcuts) { - break; - } - } + } while (foundPath && !noShortcuts); int numPaths = 0; From 119d3b3db79c23cd9099ea9f66a2cc2f7ddabba5 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 02:42:21 +0100 Subject: [PATCH 491/691] 84.2%: improve GActivity::ActivateReferencedTriggers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GActivity.cpp | 24 ++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GActivity.cpp b/src/Speed/Indep/Src/Gameplay/GActivity.cpp index 9d50a3831..7b9b90b7a 100644 --- a/src/Speed/Indep/Src/Gameplay/GActivity.cpp +++ b/src/Speed/Indep/Src/Gameplay/GActivity.cpp @@ -203,7 +203,12 @@ void GActivity::UnregisterMessageHandlers() { } void GActivity::ActivateReferencedTriggers(bool activate, GRuntimeInstance *instance) { - for (unsigned int i = 0; i < instance->GetConnectionCount(); i++) { + unsigned int i = 0; + + while (true) { + if (instance->GetConnectionCount() <= i) { + break; + } GTrigger *trigger = GRuntimeInstance::FindObject(instance->GetConnectionAt(i)->GetCollection()); if (trigger) { @@ -213,9 +218,23 @@ void GActivity::ActivateReferencedTriggers(bool activate, GRuntimeInstance *inst trigger->RemoveActivationReference(); } } + i++; } - for (unsigned int i = 0; i < instance->Get(0x916E0E78).GetLength(); i++) { + i = 0; + while (true) { + unsigned int childCount; + + { + Attrib::Attribute children = instance->Get(0x916E0E78); + + childCount = children.GetLength(); + } + + if (childCount <= i) { + break; + } + const unsigned int *childKey = reinterpret_cast(instance->GetAttributePointer(0x916E0E78, i)); if (!childKey) { @@ -226,6 +245,7 @@ void GActivity::ActivateReferencedTriggers(bool activate, GRuntimeInstance *inst if (child) { ActivateReferencedTriggers(activate, child); } + i++; } } From 0be9e1454ce07ffee45c15a76fd75b542b97338a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 02:46:57 +0100 Subject: [PATCH 492/691] 84.3%: match GActivity::ActivateReferencedTriggers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GActivity.cpp | 35 ++++------------------ 1 file changed, 6 insertions(+), 29 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GActivity.cpp b/src/Speed/Indep/Src/Gameplay/GActivity.cpp index 7b9b90b7a..d0e167c06 100644 --- a/src/Speed/Indep/Src/Gameplay/GActivity.cpp +++ b/src/Speed/Indep/Src/Gameplay/GActivity.cpp @@ -203,13 +203,9 @@ void GActivity::UnregisterMessageHandlers() { } void GActivity::ActivateReferencedTriggers(bool activate, GRuntimeInstance *instance) { - unsigned int i = 0; - - while (true) { - if (instance->GetConnectionCount() <= i) { - break; - } - GTrigger *trigger = GRuntimeInstance::FindObject(instance->GetConnectionAt(i)->GetCollection()); + for (unsigned int onConnection = 0; onConnection < instance->GetConnectionCount(); onConnection++) { + GRuntimeInstance *target = instance->GetConnectionAt(onConnection); + GTrigger *trigger = GRuntimeInstance::FindObject(target->GetCollection()); if (trigger) { if (activate) { @@ -218,34 +214,15 @@ void GActivity::ActivateReferencedTriggers(bool activate, GRuntimeInstance *inst trigger->RemoveActivationReference(); } } - i++; } - i = 0; - while (true) { - unsigned int childCount; - - { - Attrib::Attribute children = instance->Get(0x916E0E78); - - childCount = children.GetLength(); - } - - if (childCount <= i) { - break; - } - - const unsigned int *childKey = reinterpret_cast(instance->GetAttributePointer(0x916E0E78, i)); - - if (!childKey) { - childKey = reinterpret_cast(Attrib::DefaultDataArea(sizeof(unsigned int))); - } + for (unsigned int onChild = 0; onChild < instance->Num_Children(); onChild++) { + const GCollectionKey &childSpec = instance->Children(onChild); + GRuntimeInstance *child = GManager::Get().FindInstance(childSpec.GetCollectionKey()); - GRuntimeInstance *child = GManager::Get().FindInstance(*childKey); if (child) { ActivateReferencedTriggers(activate, child); } - i++; } } From 3d5a77501ffbef487a783578c07558cbdd58e702 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 03:01:29 +0100 Subject: [PATCH 493/691] 84.3%: improve GRacerInfo::Update Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 2022cbfca..fb71d5ef5 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -720,7 +720,6 @@ void GRacerInfo::ForceStartPosition(const UMath::Vector3 &pos, const UMath::Vect void GRacerInfo::Update(float dT) { ISimable *simable; IVehicleAI *vehicleAI; - GRaceStatus &raceStatus = GRaceStatus::Get(); IEngine *engine; IPlayer *player; UMath::Vector3 linearVelocity; @@ -737,6 +736,8 @@ void GRacerInfo::Update(float dT) { return; } + GRaceStatus &raceStatus = GRaceStatus::Get(); + engine = nullptr; if (simable->QueryInterface(&engine) && engine->IsNOSEngaged()) { mPoundsNOSUsed += dT * engine->GetNOSFlowRate(); From 089a1a26bc7631879f41c54c74591c5d22147607 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 03:03:07 +0100 Subject: [PATCH 494/691] 84.3%: improve GRacerInfo::Update Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index fb71d5ef5..13e55bbab 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -30,6 +30,7 @@ #include "Speed/Indep/Src/World/TrackInfo.hpp" #include "Speed/Indep/Src/World/WorldModel.hpp" #include "Speed/Indep/Src/World/TrackStreamer.hpp" +#include "Speed/Indep/Tools/Inc/ConversionUtil.hpp" #include "Speed/Indep/bWare/Inc/bWare.hpp" #include "Speed/Indep/bWare/Inc/bMath.hpp" #include "Speed/Indep/bWare/Inc/bPrintf.hpp" @@ -760,13 +761,17 @@ void GRacerInfo::Update(float dT) { #ifndef EA_BUILD_A124 if (mQuarterMileTime == 0.0f) { - if (402.335f <= distance) { + static float quarterMileInMeters = 1609.34f * 0.25f; + + if (quarterMileInMeters <= distance) { mQuarterMileTime = GetRaceTime(); } } if (mZeroToSixtyTime == 0.0f) { - if (26.8218f <= mTopSpeed) { + static float sixtyMphInMetersPerSec = MPH2MPS(60.0f); + + if (sixtyMphInMetersPerSec <= mTopSpeed) { mZeroToSixtyTime = GetRaceTime(); } } From 6a5713f181f4eb044c34e6cbe47e1a4c14fe7d44 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 03:08:22 +0100 Subject: [PATCH 495/691] 84.4%: improve GRacerInfo::Update Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 6 +++--- src/Speed/Indep/Tools/Inc/ConversionUtil.hpp | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 13e55bbab..517b7d90b 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -761,9 +761,9 @@ void GRacerInfo::Update(float dT) { #ifndef EA_BUILD_A124 if (mQuarterMileTime == 0.0f) { - static float quarterMileInMeters = 1609.34f * 0.25f; + static float quarterMileInMeters = MILE2METERS(0.25f); - if (quarterMileInMeters <= distance) { + if (distance >= quarterMileInMeters) { mQuarterMileTime = GetRaceTime(); } } @@ -771,7 +771,7 @@ void GRacerInfo::Update(float dT) { if (mZeroToSixtyTime == 0.0f) { static float sixtyMphInMetersPerSec = MPH2MPS(60.0f); - if (sixtyMphInMetersPerSec <= mTopSpeed) { + if (mTopSpeed >= sixtyMphInMetersPerSec) { mZeroToSixtyTime = GetRaceTime(); } } diff --git a/src/Speed/Indep/Tools/Inc/ConversionUtil.hpp b/src/Speed/Indep/Tools/Inc/ConversionUtil.hpp index c1521fe9f..281290078 100644 --- a/src/Speed/Indep/Tools/Inc/ConversionUtil.hpp +++ b/src/Speed/Indep/Tools/Inc/ConversionUtil.hpp @@ -67,6 +67,10 @@ inline float INCH2METERS(const float _inches_) { return _inches_ * 0.0254f; } +inline float MILE2METERS(const float _mi_) { + return _mi_ * 1609.34f; +} + inline Rpm RPS2RPM(const float _rps_) { return _rps_ * 9.549296f; // TODO problems on PS2 } From 82e5d91c169097350a08a61bb054499fc37d766f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 03:10:01 +0100 Subject: [PATCH 496/691] 84.4%: improve GRacerInfo::Update Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 517b7d90b..255bba4b1 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -789,7 +789,7 @@ void GRacerInfo::Update(float dT) { float raceDistanceCompleted = 0.0f; int lapsCompleted = GetLapsCompleted(); float lapDistanceCompleted = 0.0f; - int checkpointsCompleted = GetChecksHitThisLap(); + int checkpointsCompleted; float distanceToNextCheckpoint; float currentSegmentLength; @@ -801,6 +801,7 @@ void GRacerInfo::Update(float dT) { raceDistanceCompleted += raceStatus.GetSubsequentLapLength() * static_cast(lapsCompleted - 1); } + checkpointsCompleted = GetChecksHitThisLap(); for (int i = 0; i < checkpointsCompleted; ++i) { lapDistanceCompleted += raceStatus.GetSegmentLength(i, lapsCompleted); } @@ -808,9 +809,11 @@ void GRacerInfo::Update(float dT) { distanceToNextCheckpoint = GetDistToNextCheck(); currentSegmentLength = raceStatus.GetSegmentLength(checkpointsCompleted, lapsCompleted); if (distanceToNextCheckpoint != 0.0f) { + float currentDistanceCompleted; float lapLength; lapDistanceCompleted += currentSegmentLength - distanceToNextCheckpoint; + currentDistanceCompleted = raceDistanceCompleted + lapDistanceCompleted; lapLength = raceStatus.GetLapLength(lapsCompleted); if (lapLength > 0.0f) { mPctLapComplete = bClamp(lapDistanceCompleted / lapLength, 0.0f, 1.0f); @@ -818,7 +821,7 @@ void GRacerInfo::Update(float dT) { mPctLapComplete = 1.0f; } - mPctRaceComplete = bClamp((raceDistanceCompleted + lapDistanceCompleted) / raceLength, 0.0f, 1.0f); + mPctRaceComplete = bClamp(currentDistanceCompleted / raceLength, 0.0f, 1.0f); } } } From 62d01929d4c7f1057ea97773e14453d9c9454b1f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 03:11:57 +0100 Subject: [PATCH 497/691] 84.4%: improve GRacerInfo::Update Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 255bba4b1..42166dd5f 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -788,7 +788,7 @@ void GRacerInfo::Update(float dT) { if (raceLength > 0.0f) { float raceDistanceCompleted = 0.0f; int lapsCompleted = GetLapsCompleted(); - float lapDistanceCompleted = 0.0f; + float lapDistanceCompleted; int checkpointsCompleted; float distanceToNextCheckpoint; float currentSegmentLength; @@ -802,6 +802,7 @@ void GRacerInfo::Update(float dT) { } checkpointsCompleted = GetChecksHitThisLap(); + lapDistanceCompleted = 0.0f; for (int i = 0; i < checkpointsCompleted; ++i) { lapDistanceCompleted += raceStatus.GetSegmentLength(i, lapsCompleted); } @@ -813,7 +814,8 @@ void GRacerInfo::Update(float dT) { float lapLength; lapDistanceCompleted += currentSegmentLength - distanceToNextCheckpoint; - currentDistanceCompleted = raceDistanceCompleted + lapDistanceCompleted; + raceDistanceCompleted += lapDistanceCompleted; + currentDistanceCompleted = raceDistanceCompleted; lapLength = raceStatus.GetLapLength(lapsCompleted); if (lapLength > 0.0f) { mPctLapComplete = bClamp(lapDistanceCompleted / lapLength, 0.0f, 1.0f); @@ -821,7 +823,7 @@ void GRacerInfo::Update(float dT) { mPctLapComplete = 1.0f; } - mPctRaceComplete = bClamp(currentDistanceCompleted / raceLength, 0.0f, 1.0f); + mPctRaceComplete = bClamp(raceDistanceCompleted / raceLength, 0.0f, 1.0f); } } } From 75a2ba1bde5debdd342ab9e9087d99296e8ac3c5 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 03:17:32 +0100 Subject: [PATCH 498/691] 84.4%: improve GRaceStatus::Update Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 42166dd5f..1fdb0c3ae 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3001,7 +3001,7 @@ void GRaceStatus::Update(float dT) { for (int idx = 0; idx < numRacers; ++idx) { GRacerInfo &info = GetRacerInfo(idx); - if (info.GetGameCharacter()) { + if (!info.GetIsHuman()) { ++numAiRacers; } } @@ -3015,7 +3015,7 @@ void GRaceStatus::Update(float dT) { if (simable) { float weight = 1.0f; - if (!info.GetGameCharacter()) { + if (info.GetIsHuman()) { weight = bMax(1.0f, static_cast(numAiRacers)); } @@ -3056,7 +3056,7 @@ void GRaceStatus::Update(float dT) { if (GetIsTimeLimited()) { if (IsChallengeRace()) { #ifndef EA_BUILD_A124 - if (mPlayerPursuitInCooldown) { + if (mPlayerPursuitInCooldown == 1) { if (mRaceMasterTimer.IsRunning()) { mRaceMasterTimer.Stop(); } From fbfed2cd41f694f0e069a750baaa4ba0325985ae Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 03:26:01 +0100 Subject: [PATCH 499/691] 84.4%: improve GCharacter::IsNoLongerUseful Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GCharacter.cpp | 46 +++++++++++---------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp index cf23ee650..a952f036b 100644 --- a/src/Speed/Indep/Src/Gameplay/GCharacter.cpp +++ b/src/Speed/Indep/Src/Gameplay/GCharacter.cpp @@ -253,49 +253,51 @@ void GCharacter::UnspawnWhenOffscreen() { } bool GCharacter::IsNoLongerUseful() const { - IVehicle *vehicle = mVehicle; - if (!IsSpawned()) { return false; } - if (vehicle->GetOffscreenTime() < 0.5f) { + if (mVehicle->GetOffscreenTime() < 0.5f) { return false; } - IVehicle *otherVehicle = IVehicle::First(VEHICLE_RACERS); - for (int i = 0; i < IVehicle::Count(VEHICLE_RACERS); ++i) { - ISimable *simable = otherVehicle ? otherVehicle->GetSimable() : nullptr; + IVehicle *racerVehicle = IVehicle::First(VEHICLE_RACERS); + for (int racerIdx = 0; racerIdx < IVehicle::Count(VEHICLE_RACERS); ++racerIdx) { + ISimable *racerSimable = racerVehicle ? racerVehicle->GetSimable() : nullptr; - if (!otherVehicle->IsDestroyed() && simable) { - const IRigidBody *rigidBody = simable->GetRigidBody(); + if (!racerVehicle->IsDestroyed() && racerSimable) { + IRigidBody *rigidBody = racerSimable->GetRigidBody(); if (rigidBody) { - UMath::Vector3 direction; - UMath::Vector3 forward; - float distance; - - UMath::Sub(vehicle->GetPosition(), otherVehicle->GetPosition(), direction); - distance = UMath::Normalize(direction); - if (distance < 100.0f) { + UMath::Vector3 charPos; + UMath::Vector3 dirToChar; + UMath::Vector3 humanPos; + UMath::Vector3 humanForward; + float distToChar; + + charPos = mVehicle->GetPosition(); + humanPos = racerVehicle->GetPosition(); + UMath::Sub(charPos, humanPos, dirToChar); + distToChar = UMath::Normalize(dirToChar); + if (distToChar < 100.0f) { return false; } - rigidBody->GetForwardVector(forward); - if (UMath::Dot(direction, forward) >= 0.0f) { + rigidBody->GetForwardVector(humanForward); + if (UMath::Dot(dirToChar, humanForward) >= 0.0f) { return false; } } } { - const IVehicle::List &vehicles = IVehicle::GetList(VEHICLE_RACERS); - IVehicle::List::const_iterator found = std::find(vehicles.begin(), vehicles.end(), otherVehicle); + const IVehicle::List &list = IVehicle::GetList(VEHICLE_RACERS); + IVehicle *const *iter = std::find(list.begin(), list.end(), racerVehicle); - if (found == vehicles.end() || ++found == vehicles.end()) { - otherVehicle = nullptr; + if (iter == list.end() || ++iter == list.end()) { + racerVehicle = nullptr; } else { - otherVehicle = *found; + racerVehicle = *iter; } } } From f44754a070f6641138b504a5ab881d3c2129ab62 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 03:32:16 +0100 Subject: [PATCH 500/691] 84.4%: improve GRaceStatus::Update Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 126 ++++++++++--------- 1 file changed, 64 insertions(+), 62 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 1fdb0c3ae..2f18c8c5a 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2969,8 +2969,6 @@ void GRaceStatus::SortCheckPointRankings() { } void GRaceStatus::Update(float dT) { - int numRacers = mRacerCount; - #ifndef EA_BUILD_A124 if (GetPlayMode() == kPlayMode_Racing && mRefreshBinAfterRace) { RefreshBinWhileInGame(); @@ -2991,90 +2989,94 @@ void GRaceStatus::Update(float dT) { #endif } - if (GetPlayMode() == kPlayMode_Racing && numRacers > 0) { - int numAiRacers = 0; - float floatRacers = 0.0f; - float percentComplete = 0.0f; - float elapsed; - int elapsedSec; + if (GetPlayMode() == kPlayMode_Racing) { + int numRacers = mRacerCount; + + if (numRacers > 0) { + int numAiRacers = 0; + float floatRacers = 0.0f; + float percentComplete = 0.0f; + float elapsed; + int elapsedSec; - for (int idx = 0; idx < numRacers; ++idx) { - GRacerInfo &info = GetRacerInfo(idx); + for (int idx = 0; idx < numRacers; ++idx) { + GRacerInfo &info = GetRacerInfo(idx); - if (!info.GetIsHuman()) { - ++numAiRacers; + if (!info.GetIsHuman()) { + ++numAiRacers; + } } - } - for (int idx = 0; idx < numRacers; ++idx) { - GRacerInfo &info = GetRacerInfo(idx); + for (int idx = 0; idx < numRacers; ++idx) { + GRacerInfo &info = GetRacerInfo(idx); - info.Update(dT); - ISimable *simable = info.GetSimable(); + info.Update(dT); + ISimable *simable = info.GetSimable(); - if (simable) { - float weight = 1.0f; + if (simable) { + float weight = 1.0f; - if (info.GetIsHuman()) { - weight = bMax(1.0f, static_cast(numAiRacers)); - } + if (info.GetIsHuman()) { + weight = bMax(1.0f, static_cast(numAiRacers)); + } - floatRacers += weight; - percentComplete += weight * info.GetPctRaceComplete(); + floatRacers += weight; + percentComplete += weight * info.GetPctRaceComplete(); + } } - } - fAveragePercentComplete = percentComplete / bMax(1.0f, floatRacers); - CalculateRankings(); + fAveragePercentComplete = percentComplete / bMax(1.0f, floatRacers); + CalculateRankings(); #ifndef EA_BUILD_A124 - for (int idx = 0; idx < numRacers; ++idx) { - GetRacerInfo(idx).UpdateSplits(); - } + for (int idx = 0; idx < numRacers; ++idx) { + GetRacerInfo(idx).UpdateSplits(); + } #endif - UCrc32 gameplayMessage(0x20D60DBF); - elapsed = GetRaceTimeElapsed(); - bool isTimeLimited; + UCrc32 gameplayMessage(0x20D60DBF); + elapsed = GetRaceTimeElapsed(); + bool isTimeLimited; - if (mRaceParms) { - isTimeLimited = mRaceParms->GetTimeLimit() > 0.0f; - } else { - isTimeLimited = false; - } - float timeRemaining = GetRaceTimeRemaining(); + if (mRaceParms) { + isTimeLimited = mRaceParms->GetTimeLimit() > 0.0f; + } else { + isTimeLimited = false; + } + float timeRemaining = GetRaceTimeRemaining(); - MNotifyRaceTime(elapsed, isTimeLimited, timeRemaining).Post(gameplayMessage); + MNotifyRaceTime(elapsed, isTimeLimited, timeRemaining).Post(gameplayMessage); - elapsed = GetRaceTimeElapsed(); - elapsedSec = static_cast(elapsed); - if (elapsedSec > mLastSecondTickSent) { - mLastSecondTickSent = elapsedSec; - MNotifyRaceTimeSecTick(elapsed).Post(gameplayMessage); - } + elapsed = GetRaceTimeElapsed(); + elapsedSec = static_cast(elapsed); + if (elapsedSec > mLastSecondTickSent) { + mLastSecondTickSent = elapsedSec; + MNotifyRaceTimeSecTick(elapsed).Post(gameplayMessage); + } - if (GetIsTimeLimited()) { - if (IsChallengeRace()) { + if (GetIsTimeLimited()) { + if (IsChallengeRace()) { #ifndef EA_BUILD_A124 - if (mPlayerPursuitInCooldown == 1) { - if (mRaceMasterTimer.IsRunning()) { - mRaceMasterTimer.Stop(); + if (mPlayerPursuitInCooldown == 1) { + if (mRaceMasterTimer.IsRunning()) { + mRaceMasterTimer.Stop(); + } + } else if (!mRaceMasterTimer.IsRunning()) { + mRaceMasterTimer.Start(); } - } else if (!mRaceMasterTimer.IsRunning()) { - mRaceMasterTimer.Start(); - } #endif - } + } - if (!mTimeExpiredMsgSent && GetRaceTimeRemaining() <= 0.0f) { - MNotifyRaceTimeExpired().Post(gameplayMessage); - mTimeExpiredMsgSent = true; + if (!mTimeExpiredMsgSent && GetRaceTimeRemaining() <= 0.0f) { + MNotifyRaceTimeExpired().Post(gameplayMessage); + mTimeExpiredMsgSent = true; - for (int idx = 0; idx < mRacerCount; ++idx) { - GRacerInfo &info = mRacerInfo[idx]; + for (int idx = 0; idx < mRacerCount; ++idx) { + GRacerInfo &info = mRacerInfo[idx]; - if (!info.GetIsHuman() && !info.IsFinishedRacing()) { - info.ForceStop(); + if (!info.GetIsHuman() && !info.IsFinishedRacing()) { + info.ForceStop(); + } } } } From 13fa493c53b12ec860a14b50387c5ec317e153df Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 03:33:44 +0100 Subject: [PATCH 501/691] 84.5%: improve GRaceCustom::GetCheckpointDirection Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 2f18c8c5a..bbc0cd5fa 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2455,6 +2455,7 @@ void GRaceCustom::GetCheckpointPosition(unsigned int index, UMath::Vector3 &pos) } void GRaceCustom::GetCheckpointDirection(unsigned int index, UMath::Vector3 &dir) const { + UMath::Vector3 checkDir = UMath::Vector3::kZero; float rotate; if (mReversed) { @@ -2465,17 +2466,16 @@ void GRaceCustom::GetCheckpointDirection(unsigned int index, UMath::Vector3 &dir } EnsureLoaded(); - dir = UMath::Vector3::kZero; { - unsigned int collectionKey; + const GCollectionKey &raceCheckSpec = mRaceRecord->Checkpoint(index); - collectionKey = mRaceRecord->Checkpoint(index).GetCollectionKey(); - if (collectionKey) { - Attrib::Gen::gameplay checkpoint(collectionKey, 0, nullptr); + if (raceCheckSpec.GetCollectionKey()) { + Attrib::Gen::gameplay checkpoint(raceCheckSpec.GetCollectionKey(), 0, nullptr); - ExtractDirection(checkpoint, dir, rotate); + ExtractDirection(checkpoint, checkDir, rotate); } } + dir = checkDir; } void GRaceCustom::SetReversed(bool isReverseDir) { From 17a8965029259c4628e250e79a2d21a8c377cca3 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 03:34:25 +0100 Subject: [PATCH 502/691] 84.5%: improve GRaceCustom::GetCheckpointDirection Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index bbc0cd5fa..b93d6a9cc 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2456,13 +2456,9 @@ void GRaceCustom::GetCheckpointPosition(unsigned int index, UMath::Vector3 &pos) void GRaceCustom::GetCheckpointDirection(unsigned int index, UMath::Vector3 &dir) const { UMath::Vector3 checkDir = UMath::Vector3::kZero; - float rotate; if (mReversed) { index = GetNumCheckpoints() - (index + 1); - rotate = 180.0f; - } else { - rotate = 0.0f; } EnsureLoaded(); @@ -2472,7 +2468,11 @@ void GRaceCustom::GetCheckpointDirection(unsigned int index, UMath::Vector3 &dir if (raceCheckSpec.GetCollectionKey()) { Attrib::Gen::gameplay checkpoint(raceCheckSpec.GetCollectionKey(), 0, nullptr); - ExtractDirection(checkpoint, checkDir, rotate); + if (mReversed) { + ExtractDirection(checkpoint, checkDir, 180.0f); + } else { + ExtractDirection(checkpoint, checkDir, 0.0f); + } } } dir = checkDir; From 35bd3aeff0b7009a7783a1138c8d8ef1eed202fd Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 03:35:19 +0100 Subject: [PATCH 503/691] 84.5%: improve GRaceCustom::GetCheckpointDirection Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index b93d6a9cc..ae10e40a7 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2455,13 +2455,14 @@ void GRaceCustom::GetCheckpointPosition(unsigned int index, UMath::Vector3 &pos) } void GRaceCustom::GetCheckpointDirection(unsigned int index, UMath::Vector3 &dir) const { - UMath::Vector3 checkDir = UMath::Vector3::kZero; + UMath::Vector3 checkDir; if (mReversed) { index = GetNumCheckpoints() - (index + 1); } EnsureLoaded(); + checkDir = UMath::Vector3::kZero; { const GCollectionKey &raceCheckSpec = mRaceRecord->Checkpoint(index); From bbcfd3c20522441848a01a340fb96a8b82d3bc52 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 03:36:22 +0100 Subject: [PATCH 504/691] 84.5%: improve GRaceCustom::GetCheckpointDirection Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index ae10e40a7..4ea5f2548 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2461,7 +2461,6 @@ void GRaceCustom::GetCheckpointDirection(unsigned int index, UMath::Vector3 &dir index = GetNumCheckpoints() - (index + 1); } - EnsureLoaded(); checkDir = UMath::Vector3::kZero; { const GCollectionKey &raceCheckSpec = mRaceRecord->Checkpoint(index); From c6b96b58e70e5eaf170c979160e47702dc2cf4e9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 03:38:02 +0100 Subject: [PATCH 505/691] 84.5%: improve GRaceCustom checkpoint helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 4ea5f2548..7bb61e24d 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2448,7 +2448,7 @@ GActivity *GRaceCustom::GetRaceActivity() const { void GRaceCustom::GetCheckpointPosition(unsigned int index, UMath::Vector3 &pos) const { if (mReversed) { - index = GetNumCheckpoints() - (index + 1); + index = GetNumCheckpoints() - 1 - index; } GRaceParameters::GetCheckpointPosition(index, pos); @@ -2458,7 +2458,7 @@ void GRaceCustom::GetCheckpointDirection(unsigned int index, UMath::Vector3 &dir UMath::Vector3 checkDir; if (mReversed) { - index = GetNumCheckpoints() - (index + 1); + index = GetNumCheckpoints() - 1 - index; } checkDir = UMath::Vector3::kZero; From 9ff25b5194d3d6c17790de0a4d2d0e8059365906 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 03:50:11 +0100 Subject: [PATCH 506/691] 84.6%: improve GRaceStatus::ClearRacers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 7bb61e24d..b64d9bbb7 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3164,8 +3164,19 @@ float GRaceStatus::GetRaceTimeRemaining() const { } void GRaceStatus::ClearRacers() { - for (int i = 0; i < mRacerCount; ++i) { - mRacerInfo[i].ClearAll(); + const IVehicle::List &list = IVehicle::GetList(VEHICLE_RACERS); + + for (IVehicle *const *iter = list.begin(); iter != list.end(); ++iter) { + IVehicle *vehicle = *iter; + ISimable *simable = vehicle->GetSimable(); + + if (simable) { + GRacerInfo *racerInfo = GetRacerInfo(simable); + + if (racerInfo) { + racerInfo->ClearAll(); + } + } } mRacerCount = 0; From a1ba71497717e1502ffaaae0a8b0aca83f25f3e1 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 03:53:45 +0100 Subject: [PATCH 507/691] 84.7%: improve GRaceStatus::RaceAbandoned Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceDatabase.h | 3 ++- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h index 7ce3a5622..9b7be13ac 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h @@ -164,6 +164,8 @@ class GRaceDatabase { return GetRaceFromHash(Attrib::StringHash32(name)); } + void ResetCareerCompleteFlag(unsigned int hash); + private: void BuildBinList(); unsigned int StoreBinList(GRaceBin *dest); @@ -177,7 +179,6 @@ class GRaceDatabase { void LoadBestScores(struct GRaceSaveInfo *scores, unsigned int count); struct GRaceSaveInfo *GetScoreInfo(unsigned int hash); bool CheckRaceScoreFlags(unsigned int hash, ScoreFlags flags); - void ResetCareerCompleteFlag(unsigned int hash); void ClearStartupRace(); unsigned int mRaceCountStatic; // offset 0x0, size 0x4 diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index b64d9bbb7..1f6cb49e5 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3864,7 +3864,21 @@ void GRaceStatus::RaceAbandoned() { return; } - GManager::Get().SuspendAllActivities(); + if (mRaceBin) { + GRaceParameters *parms = GetRaceParameters(); + + if (parms && parms->GetIsBossRace() && !parms->GetIsEpicPursuitRace()) { + unsigned int numBossRaces = mRaceBin->GetBossRaceCount(); + + for (unsigned int index = 0; index < numBossRaces; ++index) { + unsigned int raceHash = mRaceBin->GetBossRaceHash(index); + + GRaceDatabase::Get().ResetCareerCompleteFlag(raceHash); + } + } + } + + GManager::Get().RefreshEngageTriggerIcons(); } void GRaceStatus::EndStopAll() { From 15687f7fa93fa288ba8e40d80d273d2aa4fb7708 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 03:55:51 +0100 Subject: [PATCH 508/691] 84.7%: improve GRaceStatus::ClearRacers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 1f6cb49e5..3d9b400cb 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3171,10 +3171,8 @@ void GRaceStatus::ClearRacers() { ISimable *simable = vehicle->GetSimable(); if (simable) { - GRacerInfo *racerInfo = GetRacerInfo(simable); - - if (racerInfo) { - racerInfo->ClearAll(); + if (!simable->GetPlayer()) { + simable->Kill(); } } } From 3c0febcc122a5bbc01be41e61913055b3253fba3 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 03:57:17 +0100 Subject: [PATCH 509/691] 84.8%: improve GRaceParameters::GetIsMiddayRace Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 3d9b400cb..6a0ca2ae3 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2034,10 +2034,11 @@ bool GRaceParameters::GetIsSunsetRace() const { } bool GRaceParameters::GetIsMiddayRace() const { - float timeOfDay; + if (mIndex) { + return (*reinterpret_cast(reinterpret_cast(mIndex) + 0x18) >> 17) & 1; + } - timeOfDay = GetTimeOfDay(); - return timeOfDay >= 0.0f && timeOfDay < 0.8f; + return GetTimeOfDay() >= 0.0f && GetTimeOfDay() < 0.8f; } void GRaceParameters::SetupTimeOfDay() { From 93f811e3ee8444d14ccf035f80e70bde3005d8bc Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 03:58:38 +0100 Subject: [PATCH 510/691] 84.8%: match GRaceParameters::GetIsMiddayRace Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 6a0ca2ae3..59622da55 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2038,6 +2038,14 @@ bool GRaceParameters::GetIsMiddayRace() const { return (*reinterpret_cast(reinterpret_cast(mIndex) + 0x18) >> 17) & 1; } + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } + return GetTimeOfDay() >= 0.0f && GetTimeOfDay() < 0.8f; } From 86eaa6c9b8c957c3b960858eda8d1c5988af4964 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 03:59:26 +0100 Subject: [PATCH 511/691] 84.9%: match GRaceParameters::GetIsSunsetRace Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 59622da55..9e1644889 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2030,6 +2030,18 @@ int GRaceParameters::GetTrafficDensity() const { } bool GRaceParameters::GetIsSunsetRace() const { + if (mIndex) { + return (*reinterpret_cast(reinterpret_cast(mIndex) + 0x18) >> 13) & 1; + } + + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } + return GetTimeOfDay() >= 0.8f; } From 87a78ecd19db74869a293a2fb2409bd54174b830 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 04:00:43 +0100 Subject: [PATCH 512/691] 84.9%: match GRaceParameters::GetNumOpponents Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 9e1644889..c1798fd64 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2166,7 +2166,14 @@ GCharacter *GRaceParameters::GetOpponentChar(unsigned int index) const { } int GRaceParameters::GetNumOpponents() const { - EnsureLoaded(); + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } + return mRaceRecord->Num_Opponents(); } From 5016b54afb2c8989b06c52e36cec1a6da6dc501e Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 04:02:51 +0100 Subject: [PATCH 513/691] 85.0%: improve GRaceParameters::GetBarrierIsFlipped Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index c1798fd64..706737627 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2291,7 +2291,14 @@ const char *GRaceParameters::GetBarrierName(unsigned int index) const { bool GRaceParameters::GetBarrierIsFlipped(unsigned int index) const { const char *barrierName; - EnsureLoaded(); + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } + barrierName = mRaceRecord->Barriers(index); return barrierName && *barrierName == '*'; } From 0f0aed5e25c428f117d14175941cae1559cfefcb Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 04:04:44 +0100 Subject: [PATCH 514/691] 85.1%: improve GRaceParameters barrier marker accessors Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 706737627..8f4836978 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2263,7 +2263,14 @@ void GRaceParameters::GetCheckpointDirection(unsigned int index, UMath::Vector3 GMarker *GRaceParameters::GetShortcut(unsigned int index) const { unsigned int collectionKey; - EnsureLoaded(); + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } + collectionKey = mRaceRecord->Shortcuts(index).GetCollectionKey(); return static_cast(GManager::Get().FindInstance(collectionKey)); } @@ -2271,7 +2278,14 @@ GMarker *GRaceParameters::GetShortcut(unsigned int index) const { GMarker *GRaceParameters::GetBarrierExemption(unsigned int index) const { unsigned int collectionKey; - EnsureLoaded(); + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } + collectionKey = mRaceRecord->BarrierExemptions(index).GetCollectionKey(); return static_cast(GManager::Get().FindInstance(collectionKey)); } From c235511dbaea60a356d0f046cb8ef4fe53dd1929 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 04:08:27 +0100 Subject: [PATCH 515/691] 85.1%: improve GRaceParameters::GetIsAvailable Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 8f4836978..171381c95 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1993,21 +1993,26 @@ bool GRaceParameters::GetIsAvailable(GRace::Context context) const { } switch (context) { - case GRace::kRaceContext_QuickRace: - return !GetNeverInQuickRace() && - GRaceDatabase::Get().CheckRaceScoreFlags(GetEventHash(), GRaceDatabase::kUnlocked_QuickRace); - case GRace::kRaceContext_TimeTrial: return GRaceDatabase::Get().CheckRaceScoreFlags(GetEventHash(), GRaceDatabase::kUnlocked_Online); + case GRace::kRaceContext_QuickRace: + if (GetNeverInQuickRace()) { + return false; + } + + return GRaceDatabase::Get().CheckRaceScoreFlags(GetEventHash(), GRaceDatabase::kUnlocked_QuickRace); + case GRace::kRaceContext_Career: if (!GRaceDatabase::Get().CheckRaceScoreFlags(GetEventHash(), GRaceDatabase::kUnlocked_Career)) { return false; } + return !GRaceDatabase::Get().CheckRaceScoreFlags(GetEventHash(), GRaceDatabase::kCompleted_ContextCareer); - } - return false; + default: + return false; + } } int GRaceParameters::GetTrafficDensity() const { From fbcfbaaff6b1820f082b9ff9fa7c0db2623cd3c5 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 04:09:29 +0100 Subject: [PATCH 516/691] 85.2%: improve GRaceParameters lookup helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 171381c95..6fa70c63e 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2160,7 +2160,14 @@ bool GRaceParameters::GetCanBeReversed() const { GCharacter *GRaceParameters::GetOpponentChar(unsigned int index) const { unsigned int characterKey; - EnsureLoaded(); + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } + if (GetIsBossRace() && GRaceStatus::Get().GetRaceContext() != GRace::kRaceContext_Career) { characterKey = Attrib::StringToLowerCaseKey("character_smart"); } else { @@ -2298,7 +2305,14 @@ GMarker *GRaceParameters::GetBarrierExemption(unsigned int index) const { const char *GRaceParameters::GetBarrierName(unsigned int index) const { const char *barrierName; - EnsureLoaded(); + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } + barrierName = mRaceRecord->Barriers(index); if (barrierName && *barrierName == '*') { return barrierName + 1; From a6bb035c2c95566026173a368f614a1fd19d0e89 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 04:10:17 +0100 Subject: [PATCH 517/691] 85.2%: match GRaceParameters::HasFinishLine Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 6fa70c63e..384d1b685 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2216,7 +2216,14 @@ void GRaceParameters::GetStartDirection(UMath::Vector3 &dir) const { } bool GRaceParameters::HasFinishLine() const { - EnsureLoaded(); + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } + return mRaceRecord->racefinish(0).GetCollectionKey() != 0; } From ea0be813c49d3ecfc1f16f1b5403c4fff9816c84 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 04:12:40 +0100 Subject: [PATCH 518/691] 85.2%: improve GRaceParameters::GetRivalBestTime Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 384d1b685..26438668a 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1369,8 +1369,10 @@ float GRaceParameters::GetRivalBestTime() const { const float *rivalBestTime; if (mIndex) { - return static_cast(*reinterpret_cast(reinterpret_cast(mIndex) + 0x26)) / - static_cast(FixedPoint::GetScale()); + const unsigned short value = *reinterpret_cast(reinterpret_cast(mIndex) + 0x26); + const int scale = FixedPoint::GetScale(); + + return static_cast(value) / static_cast(scale); } EnsureLoaded(); From 7f8fa44121c559c60180be1dacbc05c97a41e242 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 04:15:45 +0100 Subject: [PATCH 519/691] 85.5%: improve GRaceParameters marker transform helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 132 ++++++++++++++----- 1 file changed, 102 insertions(+), 30 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 26438668a..5cbd19d6a 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2192,26 +2192,50 @@ int GRaceParameters::GetNumOpponents() const { } void GRaceParameters::GetStartPosition(UMath::Vector3 &pos) const { - unsigned int collectionKey; + const GCollectionKey *raceStartSpec; + + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } - EnsureLoaded(); pos = UMath::Vector3::kZero; - collectionKey = mRaceRecord->racestart(0).GetCollectionKey(); - if (collectionKey) { - Attrib::Gen::gameplay raceStart(collectionKey, 0, nullptr); + + raceStartSpec = reinterpret_cast(mRaceRecord->GetAttributePointer(0xE43B2CCC, 0)); + if (!raceStartSpec) { + raceStartSpec = reinterpret_cast(Attrib::DefaultDataArea(sizeof(GCollectionKey))); + } + + if (raceStartSpec->GetCollectionKey()) { + Attrib::Gen::gameplay raceStart(raceStartSpec->GetCollectionKey(), 0, nullptr); ExtractPosition(raceStart, pos); } } void GRaceParameters::GetStartDirection(UMath::Vector3 &dir) const { - unsigned int collectionKey; + const GCollectionKey *raceStartSpec; + + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } - EnsureLoaded(); dir = UMath::Vector3::kZero; - collectionKey = mRaceRecord->racestart(0).GetCollectionKey(); - if (collectionKey) { - Attrib::Gen::gameplay raceStart(collectionKey, 0, nullptr); + + raceStartSpec = reinterpret_cast(mRaceRecord->GetAttributePointer(0xE43B2CCC, 0)); + if (!raceStartSpec) { + raceStartSpec = reinterpret_cast(Attrib::DefaultDataArea(sizeof(GCollectionKey))); + } + + if (raceStartSpec->GetCollectionKey()) { + Attrib::Gen::gameplay raceStart(raceStartSpec->GetCollectionKey(), 0, nullptr); ExtractDirection(raceStart, dir, 0.0f); } @@ -2230,52 +2254,100 @@ bool GRaceParameters::HasFinishLine() const { } void GRaceParameters::GetFinishPosition(UMath::Vector3 &pos) const { - unsigned int collectionKey; + const GCollectionKey *raceFinishSpec; + + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } - EnsureLoaded(); pos = UMath::Vector3::kZero; - collectionKey = mRaceRecord->racefinish(0).GetCollectionKey(); - if (collectionKey) { - Attrib::Gen::gameplay raceFinish(collectionKey, 0, nullptr); + + raceFinishSpec = reinterpret_cast(mRaceRecord->GetAttributePointer(0xB0A24ADC, 0)); + if (!raceFinishSpec) { + raceFinishSpec = reinterpret_cast(Attrib::DefaultDataArea(sizeof(GCollectionKey))); + } + + if (raceFinishSpec->GetCollectionKey()) { + Attrib::Gen::gameplay raceFinish(raceFinishSpec->GetCollectionKey(), 0, nullptr); ExtractPosition(raceFinish, pos); } } void GRaceParameters::GetFinishDirection(UMath::Vector3 &dir) const { - unsigned int collectionKey; + const GCollectionKey *raceFinishSpec; + + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } - EnsureLoaded(); dir = UMath::Vector3::kZero; - collectionKey = mRaceRecord->racefinish(0).GetCollectionKey(); - if (collectionKey) { - Attrib::Gen::gameplay raceFinish(collectionKey, 0, nullptr); + + raceFinishSpec = reinterpret_cast(mRaceRecord->GetAttributePointer(0xB0A24ADC, 0)); + if (!raceFinishSpec) { + raceFinishSpec = reinterpret_cast(Attrib::DefaultDataArea(sizeof(GCollectionKey))); + } + + if (raceFinishSpec->GetCollectionKey()) { + Attrib::Gen::gameplay raceFinish(raceFinishSpec->GetCollectionKey(), 0, nullptr); ExtractDirection(raceFinish, dir, 0.0f); } } void GRaceParameters::GetCheckpointPosition(unsigned int index, UMath::Vector3 &pos) const { - unsigned int collectionKey; + const GCollectionKey *raceCheckSpec; + + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } - EnsureLoaded(); pos = UMath::Vector3::kZero; - collectionKey = mRaceRecord->Checkpoint(index).GetCollectionKey(); - if (collectionKey) { - Attrib::Gen::gameplay checkpoint(collectionKey, 0, nullptr); + + raceCheckSpec = reinterpret_cast(mRaceRecord->GetAttributePointer(0x34AAE3FC, index)); + if (!raceCheckSpec) { + raceCheckSpec = reinterpret_cast(Attrib::DefaultDataArea(sizeof(GCollectionKey))); + } + + if (raceCheckSpec->GetCollectionKey()) { + Attrib::Gen::gameplay checkpoint(raceCheckSpec->GetCollectionKey(), 0, nullptr); ExtractPosition(checkpoint, pos); } } void GRaceParameters::GetCheckpointDirection(unsigned int index, UMath::Vector3 &dir) const { - unsigned int collectionKey; + const GCollectionKey *raceCheckSpec; + + if (mParentVault && !mParentVault->IsLoaded()) { + mParentVault->LoadSyncTransient(); + } + + if (mChildVault && !mChildVault->IsLoaded()) { + mChildVault->LoadSyncTransient(); + } - EnsureLoaded(); dir = UMath::Vector3::kZero; - collectionKey = mRaceRecord->Checkpoint(index).GetCollectionKey(); - if (collectionKey) { - Attrib::Gen::gameplay checkpoint(collectionKey, 0, nullptr); + + raceCheckSpec = reinterpret_cast(mRaceRecord->GetAttributePointer(0x34AAE3FC, index)); + if (!raceCheckSpec) { + raceCheckSpec = reinterpret_cast(Attrib::DefaultDataArea(sizeof(GCollectionKey))); + } + + if (raceCheckSpec->GetCollectionKey()) { + Attrib::Gen::gameplay checkpoint(raceCheckSpec->GetCollectionKey(), 0, nullptr); ExtractDirection(checkpoint, dir, 0.0f); } From a961ee846d14dbb5c82af88109555bed7ae5584b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 04:22:19 +0100 Subject: [PATCH 520/691] 85.5%: improve GRaceParameters object lookup helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 5cbd19d6a..6b695b7ef 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1150,7 +1150,7 @@ GVault *GRaceParameters::GetParentVault() const { } GActivity *GRaceParameters::GetActivity() const { - return static_cast(GManager::Get().FindInstance(GetCollectionKey())); + return GRuntimeInstance::FindObject(GetCollectionKey()); } unsigned int GRaceParameters::GetCollectionKey() const { @@ -2176,7 +2176,7 @@ GCharacter *GRaceParameters::GetOpponentChar(unsigned int index) const { characterKey = mRaceRecord->Opponents(index).GetCollectionKey(); } - return static_cast(GManager::Get().FindInstance(characterKey)); + return GRuntimeInstance::FindObject(characterKey); } int GRaceParameters::GetNumOpponents() const { @@ -2202,8 +2202,6 @@ void GRaceParameters::GetStartPosition(UMath::Vector3 &pos) const { mChildVault->LoadSyncTransient(); } - pos = UMath::Vector3::kZero; - raceStartSpec = reinterpret_cast(mRaceRecord->GetAttributePointer(0xE43B2CCC, 0)); if (!raceStartSpec) { raceStartSpec = reinterpret_cast(Attrib::DefaultDataArea(sizeof(GCollectionKey))); @@ -2365,7 +2363,7 @@ GMarker *GRaceParameters::GetShortcut(unsigned int index) const { } collectionKey = mRaceRecord->Shortcuts(index).GetCollectionKey(); - return static_cast(GManager::Get().FindInstance(collectionKey)); + return GRuntimeInstance::FindObject(collectionKey); } GMarker *GRaceParameters::GetBarrierExemption(unsigned int index) const { @@ -2380,7 +2378,7 @@ GMarker *GRaceParameters::GetBarrierExemption(unsigned int index) const { } collectionKey = mRaceRecord->BarrierExemptions(index).GetCollectionKey(); - return static_cast(GManager::Get().FindInstance(collectionKey)); + return GRuntimeInstance::FindObject(collectionKey); } const char *GRaceParameters::GetBarrierName(unsigned int index) const { From eeb131b727db8261b488ac414257f3069f4c82ff Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 04:25:27 +0100 Subject: [PATCH 521/691] 85.6%: improve GRaceStatus::GetRaceTimeRemaining Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 6b695b7ef..d257549db 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3301,13 +3301,21 @@ float GRaceStatus::GetRaceTimeElapsed() const { } float GRaceStatus::GetRaceTimeRemaining() const { - float limit = mRaceParms ? mRaceParms->GetTimeLimit() : 0.0f; + float totalTime = mRaceParms ? mRaceParms->GetTimeLimit() : 0.0f; - if (limit <= 0.0f) { + totalTime += mBonusTime; + if (totalTime <= 0.0f) { return 0.0f; } - return limit + mBonusTime - GetRaceTimeElapsed(); + { + float timeRemaining = totalTime - mRaceMasterTimer.GetTime(); + if (timeRemaining < 0.0f) { + return 0.0f; + } + + return timeRemaining; + } } void GRaceStatus::ClearRacers() { From c00f051e1d54b72999ff5328ff56f705eb01d45f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 04:28:55 +0100 Subject: [PATCH 522/691] 85.6%: improve GRaceStatus::ClearTimes Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index d257549db..733869386 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3862,8 +3862,26 @@ GTrigger *GRaceStatus::GetNextCheckpoint() { } void GRaceStatus::ClearTimes() { + GRaceParameters *race_parameters; + float start_time; + bMemSet(mLapTimes, 0, sizeof(mLapTimes)); bMemSet(mCheckTimes, 0, sizeof(mCheckTimes)); + + race_parameters = GetRaceParameters(); + if (race_parameters) { + start_time = race_parameters->GetStartTime(); + } else { + start_time = 0.0f; + } + + mRaceMasterTimer.Stop(); + mRaceMasterTimer.Reset(start_time); + mLastSecondTickSent = 0; + mBonusTime = 0.0f; + mTaskTime = 0.0f; + mSuddenDeathMode = false; + mTimeExpiredMsgSent = false; } void GRaceStatus::SetLapTime(int lapIndex, int racerIndex, float time) { From 622005709cf246fb98cf64f39dbf3e1ee3bc834b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 04:31:51 +0100 Subject: [PATCH 523/691] 85.7%: match GRaceStatus::GetWinningPlayerInfo Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 34 ++++++++++++++------ 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 733869386..6c1956a83 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3262,21 +3262,37 @@ GRacerInfo *GRaceStatus::GetRacerInfo(ISimable *isim) { } GRacerInfo *GRaceStatus::GetWinningPlayerInfo() { - GRacerInfo *winner = nullptr; - - for (int i = 0; i < mRacerCount; ++i) { - GRacerInfo &info = mRacerInfo[i]; + IPlayer *player; - if (!info.GetIsHuman()) { - continue; + player = IPlayer::First(PLAYER_ALL); + while (player) { + ISimable *sim; + GRacerInfo *info; + + sim = player->GetSimable(); + info = GetRacerInfo(sim); + if (info && info->IsFinishedRacing()) { + if (info->GetRanking() == 1) { + return info; + } } - if (!winner || info.GetRanking() < winner->GetRanking()) { - winner = &info; + { + const IPlayer *currentPlayer = player; + IPlayer::List::const_iterator iter = + std::find(IPlayer::GetList(PLAYER_ALL).begin(), IPlayer::GetList(PLAYER_ALL).end(), currentPlayer); + IPlayer::List::const_iterator end = IPlayer::GetList(PLAYER_ALL).end(); + + if (iter == end) { + player = nullptr; + } else { + ++iter; + player = iter == end ? nullptr : *iter; + } } } - return winner; + return nullptr; } void GRaceStatus::StartMasterTimer() { From 980e63de7ce17bf0e675136aa769eae70c305b52 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 04:35:17 +0100 Subject: [PATCH 524/691] 85.8%: match+ GRaceStatus timer helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 6c1956a83..0853a1eaa 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3296,16 +3296,18 @@ GRacerInfo *GRaceStatus::GetWinningPlayerInfo() { } void GRaceStatus::StartMasterTimer() { - float startTime = 0.0f; + GRaceParameters *race_parameters; + float start_time; - if (mRaceParms) { - startTime = mRaceParms->GetStartTime(); + race_parameters = GetRaceParameters(); + if (race_parameters) { + start_time = race_parameters->GetStartTime(); + } else { + start_time = 0.0f; } - mRaceMasterTimer.Reset(-startTime); + mRaceMasterTimer.Reset(start_time); mRaceMasterTimer.Start(); - mLastSecondTickSent = static_cast(GetRaceTimeElapsed()); - mTimeExpiredMsgSent = false; } void GRaceStatus::StopMasterTimer() { @@ -3313,6 +3315,10 @@ void GRaceStatus::StopMasterTimer() { } float GRaceStatus::GetRaceTimeElapsed() const { + if (!mRaceParms) { + return 0.0f; + } + return mRaceMasterTimer.GetTime(); } From 9667b164bba7f4c4beeba10e8948486affa653a1 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 04:40:45 +0100 Subject: [PATCH 525/691] 85.8%: improve GRaceStatus lap time helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 36 ++++++++++++-------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 0853a1eaa..2849c5790 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3957,31 +3957,39 @@ int GRaceStatus::GetLapPosition(int lapIndex, int racerIndex, bool bOverallPosit } float GRaceStatus::GetBestLapTime(int racerIndex) { - float best = 0.0f; - int lapCount = mRaceParms ? mRaceParms->GetNumLaps() : 10; + float bestLapTime; + int onLap; - for (int i = 0; i < lapCount && i < 10; ++i) { - float time = GetLapTime(i, racerIndex, false); - if (time > 0.0f && (best <= 0.0f || time < best)) { - best = time; + bestLapTime = GetLapTime(0, racerIndex, false); + onLap = 1; + while (onLap < (mRaceParms ? mRaceParms->GetNumLaps() : 10) && onLap <= 9) { + float lapTime = GetLapTime(onLap, racerIndex, false); + if (lapTime > 0.0f && (bestLapTime <= 0.0f || lapTime < bestLapTime)) { + bestLapTime = lapTime; } + + onLap++; } - return best; + return bestLapTime; } float GRaceStatus::GetWorstLapTime(int racerIndex) { - float worst = 0.0f; - int lapCount = mRaceParms ? mRaceParms->GetNumLaps() : 10; + float worstLapTime; + int onLap; - for (int i = 0; i < lapCount && i < 10; ++i) { - float time = GetLapTime(i, racerIndex, false); - if (time > worst) { - worst = time; + worstLapTime = GetLapTime(0, racerIndex, false); + onLap = 1; + while (onLap < (mRaceParms ? mRaceParms->GetNumLaps() : 10) && onLap <= 9) { + float lapTime = GetLapTime(onLap, racerIndex, false); + if (lapTime > 0.0f && lapTime > worstLapTime) { + worstLapTime = lapTime; } + + onLap++; } - return worst; + return worstLapTime; } float GRaceStatus::GetFinishTimeBehind(int racerIndex) { From a0d372be582d6c5912347c57550899fdcb4b0bc5 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 04:43:39 +0100 Subject: [PATCH 526/691] 85.8%: improve GRaceStatus::DetermineRaceLength Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 2849c5790..44397a7cf 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -4270,16 +4270,17 @@ float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, c } void GRaceStatus::DetermineRaceLength() { - WRoadNetwork &rn = WRoadNetwork::Get(); - GRaceParameters *race_parameters = mRaceParms; - nSpeedTraps = 0; fSubsequentLapLength = 0.0f; fRaceLength = 0.0f; fFirstLapLength = 0.0f; bMemSet(mSegmentLengths, 0, sizeof(mSegmentLengths)); bRaceRouteError = false; - rn.ResolveShortcuts(); + + WRoadNetwork *roadNetwork = &WRoadNetwork::Get(); + GRaceParameters *race_parameters = mRaceParms; + + roadNetwork->ResolveShortcuts(); if (!race_parameters || !race_parameters->HasFinishLine()) { return; @@ -4297,7 +4298,7 @@ void GRaceStatus::DetermineRaceLength() { const bool forceCentreLane = true; const float directionWeight = 1.0f; - rn.SetRaceFilterValid(true); + roadNetwork->SetRaceFilterValid(true); numCheckpoints = race_parameters->GetNumCheckpoints(); numPathPoints = numCheckpoints + 2; race_parameters->GetStartPosition(UMath::Vector4To3(positions[0])); @@ -4329,9 +4330,9 @@ void GRaceStatus::DetermineRaceLength() { } if (!raceLoops) { - fSubsequentLapLength = totalDistance; fRaceLength = totalDistance; fFirstLapLength = totalDistance; + fSubsequentLapLength = totalDistance; } else { fSubsequentLapLength = totalDistance - mSegmentLengths[0]; fFirstLapLength = totalDistance - mSegmentLengths[numPathPoints - 1]; @@ -4349,7 +4350,7 @@ void GRaceStatus::DetermineRaceLength() { nav.IncNavPosition(1.0f, UMath::Vector3::kZero, 0.0f); segmentNumber = nav.GetSegmentInd(); - segment = rn.GetSegmentNonConst(segmentNumber); + segment = roadNetwork->GetSegmentNonConst(segmentNumber); segment->SetInRace(true); segment->SetRaceRouteForward(nav.GetNodeInd() == 1); } From 9109b56fae4a8af04262517ef74b2ad7b51fc0fd Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 04:47:09 +0100 Subject: [PATCH 527/691] 85.8%: improve GRaceStatus::Update(float) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 44397a7cf..eb59be404 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3221,7 +3221,7 @@ void GRaceStatus::Update(float dT) { for (int idx = 0; idx < mRacerCount; ++idx) { GRacerInfo &info = mRacerInfo[idx]; - if (!info.GetIsHuman() && !info.IsFinishedRacing()) { + if (!info.GetGameCharacter() && !info.IsFinishedRacing()) { info.ForceStop(); } } @@ -3231,16 +3231,24 @@ void GRaceStatus::Update(float dT) { } if (mScriptWaitingForLoad) { - bool racersLoading = IsLoading(); - bool trackLoading = TheTrackStreamer.IsLoadingInProgress(); - bool copsSpawning = false; - ICopMgr *copMgr = ICopMgr::Get(); + bool racersLoading; + bool trackLoading; + bool copsSpawning; + ICopMgr *copMgr; + + racersLoading = IsLoading(); + trackLoading = true; + if (!TheTrackStreamer.IsLoadingInProgress()) { + trackLoading = false; + } + copsSpawning = false; + copMgr = ICopMgr::Get(); if (copMgr && copMgr->IsCopSpawnPending()) { copsSpawning = true; } - if (!racersLoading && !trackLoading && !copsSpawning) { + if (!trackLoading && !racersLoading && !copsSpawning) { MLoadingComplete().Post(UCrc32(0x20D60DBF)); mScriptWaitingForLoad = false; } From f05e5946503720525c652f8cf1d4f7bceecfcf2d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 04:51:28 +0100 Subject: [PATCH 528/691] 85.9%: match GRaceStatus::GetWorstLapTime Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index eb59be404..00f8fc36d 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3970,7 +3970,7 @@ float GRaceStatus::GetBestLapTime(int racerIndex) { bestLapTime = GetLapTime(0, racerIndex, false); onLap = 1; - while (onLap < (mRaceParms ? mRaceParms->GetNumLaps() : 10) && onLap <= 9) { + while (onLap < mRaceParms->GetNumLaps()) { float lapTime = GetLapTime(onLap, racerIndex, false); if (lapTime > 0.0f && (bestLapTime <= 0.0f || lapTime < bestLapTime)) { bestLapTime = lapTime; @@ -3988,7 +3988,7 @@ float GRaceStatus::GetWorstLapTime(int racerIndex) { worstLapTime = GetLapTime(0, racerIndex, false); onLap = 1; - while (onLap < (mRaceParms ? mRaceParms->GetNumLaps() : 10) && onLap <= 9) { + while (onLap < mRaceParms->GetNumLaps()) { float lapTime = GetLapTime(onLap, racerIndex, false); if (lapTime > 0.0f && lapTime > worstLapTime) { worstLapTime = lapTime; From 5010de6797be648fa136d1b12b87b24934203e22 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 04:52:17 +0100 Subject: [PATCH 529/691] 85.9%: match GRaceStatus::GetBestLapTime Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 00f8fc36d..d8d75f281 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3972,7 +3972,7 @@ float GRaceStatus::GetBestLapTime(int racerIndex) { onLap = 1; while (onLap < mRaceParms->GetNumLaps()) { float lapTime = GetLapTime(onLap, racerIndex, false); - if (lapTime > 0.0f && (bestLapTime <= 0.0f || lapTime < bestLapTime)) { + if (lapTime > 0.0f && lapTime < bestLapTime) { bestLapTime = lapTime; } From e74999f7def33e411c06cbfe037005f8547e6615 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 04:58:00 +0100 Subject: [PATCH 530/691] 85.9%: dwarf improve GRaceStatus::DetermineRaceLength Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index d8d75f281..ce20894f3 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -4285,10 +4285,10 @@ void GRaceStatus::DetermineRaceLength() { bMemSet(mSegmentLengths, 0, sizeof(mSegmentLengths)); bRaceRouteError = false; - WRoadNetwork *roadNetwork = &WRoadNetwork::Get(); - GRaceParameters *race_parameters = mRaceParms; + WRoadNetwork &rn = WRoadNetwork::Get(); + GRaceParameters *race_parameters = GetRaceParameters(); - roadNetwork->ResolveShortcuts(); + rn.ResolveShortcuts(); if (!race_parameters || !race_parameters->HasFinishLine()) { return; @@ -4306,7 +4306,7 @@ void GRaceStatus::DetermineRaceLength() { const bool forceCentreLane = true; const float directionWeight = 1.0f; - roadNetwork->SetRaceFilterValid(true); + rn.SetRaceFilterValid(true); numCheckpoints = race_parameters->GetNumCheckpoints(); numPathPoints = numCheckpoints + 2; race_parameters->GetStartPosition(UMath::Vector4To3(positions[0])); @@ -4349,7 +4349,9 @@ void GRaceStatus::DetermineRaceLength() { WRoadNav nav; - nav.SetPathType(static_cast(6)); + nav.SetDecisionFilter(true); + nav.SetNavType(WRoadNav::kTypeDirection); + nav.SetPathType(WRoadNav::kPathChopper); nav.InitAtPoint(UMath::Vector4To3(positions[numPathPoints - 1]), UMath::Vector4To3(directions[numPathPoints - 1]), forceCentreLane, directionWeight); if (nav.IsValid()) { for (int i = 0; i < 100; ++i) { @@ -4358,7 +4360,7 @@ void GRaceStatus::DetermineRaceLength() { nav.IncNavPosition(1.0f, UMath::Vector3::kZero, 0.0f); segmentNumber = nav.GetSegmentInd(); - segment = roadNetwork->GetSegmentNonConst(segmentNumber); + segment = rn.GetSegmentNonConst(segmentNumber); segment->SetInRace(true); segment->SetRaceRouteForward(nav.GetNodeInd() == 1); } From 810790199233776440d7590492705905fd47e2c2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 05:12:26 +0100 Subject: [PATCH 531/691] 85.9%: improve GRacerInfo::Update Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index ce20894f3..0936e3ea4 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -755,7 +755,8 @@ void GRacerInfo::Update(float dT) { mTopSpeed = speed; } - distance = mDistanceDriven + speed * dT; + distance = mDistanceDriven; + distance += speed * dT; mTotalUpdateTime += dT; mDistanceDriven = distance; @@ -780,10 +781,11 @@ void GRacerInfo::Update(float dT) { raceLength = raceStatus.GetRaceLength(); vehicleAI = nullptr; if (simable->QueryInterface(&vehicleAI)) { - mDistToNextCheckpoint = vehicleAI->GetPathDistanceRemaining(); + distance = vehicleAI->GetPathDistanceRemaining(); } else { - mDistToNextCheckpoint = 0.0f; + distance = 0.0f; } + mDistToNextCheckpoint = distance; if (raceLength > 0.0f) { float raceDistanceCompleted = 0.0f; From 1cb14b57a369502f58893fea502d1b2949a48f72 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 05:14:49 +0100 Subject: [PATCH 532/691] 85.9%: match GRacerInfo::StartRace Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 0936e3ea4..146034be2 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -566,7 +566,6 @@ void GRacerInfo::StartRace() { GRaceParameters *raceParameters = GRaceStatus::Get().GetRaceParameters(); float startTime = raceParameters ? raceParameters->GetStartTime() : 0.0f; - mFinishedRacing = false; mRaceTimer.Reset(startTime); mRaceTimer.Start(); StartLap(1); From 9cd546807adfe63363792e0afaf2de15e09379ab Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 05:16:11 +0100 Subject: [PATCH 533/691] 86.0%: match GRaceStatus::CanUnspawnRoamer Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 33 +++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 146034be2..544bb42eb 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2775,28 +2775,31 @@ const char *GRaceStatus::GetCacheName() const { } bool GRaceStatus::CanUnspawnRoamer(const IVehicle *roamer) const { - const GRacerInfo *info = nullptr; + const GRacerInfo *info; - if (roamer->IsActive()) { - for (int onRacer = 0; onRacer < GetRacerCount(); ++onRacer) { - const GRacerInfo &racerInfo = mRacerInfo[onRacer]; + if (!roamer->IsActive()) { + return true; + } - if (UTL::COM::ComparePtr(racerInfo.GetSimable(), roamer)) { - info = &racerInfo; - break; - } + info = nullptr; + for (int onRacer = 0; onRacer < GetRacerCount(); ++onRacer) { + const GRacerInfo &racerInfo = mRacerInfo[onRacer]; + + if (UTL::COM::ComparePtr(racerInfo.GetSimable(), roamer)) { + info = &racerInfo; + break; } + } - if (info) { - if (roamer->GetOffscreenTime() >= 4.0f) { - return Sim::DistanceToCamera(roamer->GetPosition()) >= 100.0f; - } + if (!info) { + return true; + } - return false; - } + if (roamer->GetOffscreenTime() < 4.0f) { + return false; } - return true; + return Sim::DistanceToCamera(roamer->GetPosition()) >= 100.0f; } eVehicleCacheResult GRaceStatus::OnQueryVehicleCache(const IVehicle *removethis, const IVehicleCache *whosasking) const { From 3667bc3615f2cf0b939b670da201e942d1e0f95a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 05:29:39 +0100 Subject: [PATCH 534/691] 86.0%: match GRaceDatabase::BuildBinList Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index 32bbb4d51..ae1da5585 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -378,7 +378,7 @@ unsigned int GRaceDatabase::StoreBinList(GRaceBin *dest) { void GRaceDatabase::BuildBinList() { mBinCount = StoreBinList(nullptr); - mBins = static_cast(bMalloc(mBinCount * 0x1C, 0)); + mBins = reinterpret_cast(new unsigned char[mBinCount * 0x1C]); StoreBinList(mBins); } From a9a73f2b13d8ec12d8f8fbab1871006bd2f2758f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 05:34:22 +0100 Subject: [PATCH 535/691] 86.0%: match+ GRaceDatabase::ClearStartupRace Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index ae1da5585..5a23f8f8b 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -490,12 +490,12 @@ void GRaceDatabase::DestroyCustomRace(GRaceCustom *custom) { } void GRaceDatabase::ClearStartupRace() { - if (mStartupRace && !mStartupRace->GetFreedByOwner()) { + if (mStartupRace && mStartupRace->GetFreedByOwner()) { DestroyCustomRace(mStartupRace); } - mStartupRaceContext = GRace::kRaceContext_QuickRace; mStartupRace = nullptr; + mStartupRaceContext = GRace::kRaceContext_QuickRace; } void GRaceDatabase::SetStartupRace(GRaceCustom *custom, GRace::Context context) { From 5514395551bf83188a2f81f78ec06f63a3109380 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 05:37:24 +0100 Subject: [PATCH 536/691] 86.0%: match GRaceDatabase::NotifyVaultUnloading Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index 5a23f8f8b..618509071 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -551,7 +551,7 @@ void GRaceDatabase::NotifyVaultUnloading(GVault *vault) { } } - if (mStartupRace && mStartupRace->GetParentVault() == vault) { + if (mStartupRace && vault == mStartupRace->GetParentVault()) { ClearStartupRace(); } } From 62baddcc75e6b5dfb1a1fbb42e3ac0c650faaabd Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 06:58:32 +0100 Subject: [PATCH 537/691] 86.1%: improve GManager::OnQueryVehicleCache Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 4b89684d7..e78d11d07 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2448,7 +2448,7 @@ eVehicleCacheResult GManager::OnQueryVehicleCache(const IVehicle *removethis, co for (StockCarMap::iterator it = self->mStockCars.begin(); it != self->mStockCars.end(); ++it) { IVehicle *stockCar = nullptr; - if (it->second && it->second->QueryInterface(&stockCar) && UTL::COM::ComparePtr(stockCar, vehicleToRemove)) { + if (it->second && it->second->QueryInterface(&stockCar) && stockCar == vehicleToRemove) { if (!UTL::COM::ComparePtr(cache, INIS::Get())) { return VCR_WANT; } @@ -2462,11 +2462,17 @@ eVehicleCacheResult GManager::OnQueryVehicleCache(const IVehicle *removethis, co GCharacter *character = *it; IVehicle *vehicle = character->GetSpawnedVehicle(); - if (!UTL::COM::ComparePtr(vehicle, vehicleToRemove)) { + if (vehicle != vehicleToRemove) { continue; } - if (vehicle && character->HasStockCar()) { + bool hasStockCar = false; + + if (vehicle) { + hasStockCar = character->IsFlagSet(GCharacter::kCharFlag_UsingStockCar); + } + + if (hasStockCar) { return VCR_DONTCARE; } @@ -2474,7 +2480,12 @@ eVehicleCacheResult GManager::OnQueryVehicleCache(const IVehicle *removethis, co return VCR_DONTCARE; } - return character == mActiveCharacters.front() ? VCR_DONTCARE : VCR_WANT; + GCharacter *firstCharacter = nullptr; + if (mActiveCharacters.begin() != mActiveCharacters.end()) { + firstCharacter = *mActiveCharacters.begin(); + } + + return character == firstCharacter ? VCR_DONTCARE : VCR_WANT; } return VCR_DONTCARE; From dba83776bbbedaa801edc2140ca6bd02e92cbc52 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 07:00:53 +0100 Subject: [PATCH 538/691] 86.1%: dwarf improve GManager::OnQueryVehicleCache Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index e78d11d07..161d446f3 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2441,19 +2441,17 @@ void GManager::OnRemovedVehicleCache(IVehicle *ivehicle) { } eVehicleCacheResult GManager::OnQueryVehicleCache(const IVehicle *removethis, const IVehicleCache *whosasking) const { - const IVehicleCache *cache = whosasking; - const IVehicle *vehicleToRemove = removethis; - GManager *self = const_cast(this); - - for (StockCarMap::iterator it = self->mStockCars.begin(); it != self->mStockCars.end(); ++it) { + for (StockCarMap::iterator it = const_cast(this)->mStockCars.begin(); + it != const_cast(this)->mStockCars.end(); + ++it) { IVehicle *stockCar = nullptr; - if (it->second && it->second->QueryInterface(&stockCar) && stockCar == vehicleToRemove) { - if (!UTL::COM::ComparePtr(cache, INIS::Get())) { + if (it->second->QueryInterface(&stockCar) && stockCar == removethis) { + if (!UTL::COM::ComparePtr(whosasking, INIS::Get())) { return VCR_WANT; } - self->mStockCars.erase(it); + const_cast(this)->mStockCars.erase(it); return VCR_DONTCARE; } } @@ -2462,7 +2460,7 @@ eVehicleCacheResult GManager::OnQueryVehicleCache(const IVehicle *removethis, co GCharacter *character = *it; IVehicle *vehicle = character->GetSpawnedVehicle(); - if (vehicle != vehicleToRemove) { + if (vehicle != removethis) { continue; } @@ -2476,7 +2474,7 @@ eVehicleCacheResult GManager::OnQueryVehicleCache(const IVehicle *removethis, co return VCR_DONTCARE; } - if (UTL::COM::ComparePtr(cache, ITrafficMgr::Get()) || vehicle->GetOffscreenTime() == 0.0f) { + if (UTL::COM::ComparePtr(whosasking, ITrafficMgr::Get()) || vehicle->GetOffscreenTime() == 0.0f) { return VCR_DONTCARE; } From 29bae87fbd7c65104ecbf19df35f7e247ef785af Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 07:05:57 +0100 Subject: [PATCH 539/691] 86.1%: improve GManager::OnQueryVehicleCache Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 161d446f3..b81534373 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2447,12 +2447,12 @@ eVehicleCacheResult GManager::OnQueryVehicleCache(const IVehicle *removethis, co IVehicle *stockCar = nullptr; if (it->second->QueryInterface(&stockCar) && stockCar == removethis) { - if (!UTL::COM::ComparePtr(whosasking, INIS::Get())) { - return VCR_WANT; + if (UTL::COM::ComparePtr(whosasking, INIS::Get())) { + const_cast(this)->mStockCars.erase(it); + return VCR_DONTCARE; } - const_cast(this)->mStockCars.erase(it); - return VCR_DONTCARE; + return VCR_WANT; } } @@ -2465,9 +2465,10 @@ eVehicleCacheResult GManager::OnQueryVehicleCache(const IVehicle *removethis, co } bool hasStockCar = false; - if (vehicle) { - hasStockCar = character->IsFlagSet(GCharacter::kCharFlag_UsingStockCar); + if (character->HasStockCar()) { + hasStockCar = true; + } } if (hasStockCar) { @@ -2479,7 +2480,7 @@ eVehicleCacheResult GManager::OnQueryVehicleCache(const IVehicle *removethis, co } GCharacter *firstCharacter = nullptr; - if (mActiveCharacters.begin() != mActiveCharacters.end()) { + if ((mActiveCharacters.end() - mActiveCharacters.begin()) != 0) { firstCharacter = *mActiveCharacters.begin(); } From 127104ceefd4c9a35abdb5dbe867d4ff807ca07c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 07:07:25 +0100 Subject: [PATCH 540/691] 86.1%: dwarf improve GManager::OnQueryVehicleCache Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index b81534373..125602015 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2475,16 +2475,16 @@ eVehicleCacheResult GManager::OnQueryVehicleCache(const IVehicle *removethis, co return VCR_DONTCARE; } - if (UTL::COM::ComparePtr(whosasking, ITrafficMgr::Get()) || vehicle->GetOffscreenTime() == 0.0f) { - return VCR_DONTCARE; - } + if (!UTL::COM::ComparePtr(whosasking, ITrafficMgr::Get()) && vehicle->GetOffscreenTime() != 0.0f) { + GCharacter *firstCharacter = nullptr; + if ((mActiveCharacters.end() - mActiveCharacters.begin()) != 0) { + firstCharacter = *mActiveCharacters.begin(); + } - GCharacter *firstCharacter = nullptr; - if ((mActiveCharacters.end() - mActiveCharacters.begin()) != 0) { - firstCharacter = *mActiveCharacters.begin(); + return character == firstCharacter ? VCR_DONTCARE : VCR_WANT; } - return character == firstCharacter ? VCR_DONTCARE : VCR_WANT; + return VCR_DONTCARE; } return VCR_DONTCARE; From 5f9028e53faa5e5e58b3e742d9e2681b2f463265 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 07:18:15 +0100 Subject: [PATCH 541/691] 86.1%: improve GTrigger::GTrigger Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 811577cf6..171c1a211 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -47,7 +47,7 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) rotation = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); } - MATRIX4_multyrot(&directionMat, -*rotation * 0.00069444446f, &directionMat); + MATRIX4_multyrot(&directionMat, -*rotation * 0.0027777778f, &directionMat); VU0_MATRIX3x4_vect3mult(initialVec, directionMat, initialVec); mDirection = initialVec; mSimObjInside.reserve(8); @@ -82,7 +82,7 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) dimSwizzled.z = dimSwizzled.x; mWorldTrigger.fShape = 3; } else if (hasDimensions) { - triggerRadius = UMath::Sqrt(dimSwizzled.x * dimSwizzled.x + dimSwizzled.z * dimSwizzled.z); + triggerRadius = UMath::Sqrt(dimSwizzled.x * dimSwizzled.x * 0.25f + dimSwizzled.z * dimSwizzled.z * 0.25f); mWorldTrigger.fShape = 1; } else { const float *width = reinterpret_cast(GetAttributePointer(0x5816C1FC, 0)); @@ -92,9 +92,9 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) } dimSwizzled.x = *width; - dimSwizzled.y = 1.0f; - dimSwizzled.z = 0.0f; - triggerRadius = UMath::Sqrt(dimSwizzled.x * dimSwizzled.x + 1.0f); + dimSwizzled.y = 50.0f; + dimSwizzled.z = 1.0f; + triggerRadius = UMath::Sqrt(dimSwizzled.x * dimSwizzled.x * 0.25f + 0.25f); mWorldTrigger.fShape = 1; } @@ -103,7 +103,7 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) rotation = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); } - MATRIX4_multyrot(&mat, -*rotation * 0.00069444446f, &mat); + MATRIX4_multyrot(&mat, -*rotation * 0.0027777778f, &mat); mWorldTrigger.fType = 1; mWorldTrigger.fEvents = &mEventList; mWorldTrigger.fIterStamp = 0; From 2bb0eb0ee8902d2fa3d5e501283d35390e17f26b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 07:21:46 +0100 Subject: [PATCH 542/691] 86.2%: improve GManager::GetObjectStateBlock Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 125602015..997c6e443 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1278,17 +1278,21 @@ ObjectStateBlockHeader *GManager::AllocObjectStateBlock(unsigned int key, unsign } void *GManager::GetObjectStateBlock(unsigned int key) { + unsigned int persistent = 0; unsigned int shiftedKey = key >> mCollectionKeyShiftTo32; - ObjectStateMap::iterator it = mSessionStateBlocks.find(shiftedKey); - if (it == mSessionStateBlocks.end()) { - it = mPersistentStateBlocks.find(shiftedKey); - if (it == mPersistentStateBlocks.end()) { - return nullptr; + do { + ObjectStateMap &stateMap = persistent ? mPersistentStateBlocks : mSessionStateBlocks; + ObjectStateMap::iterator existing = stateMap.find(shiftedKey); + + if (existing != stateMap.end()) { + return existing->second + 1; } - } - return it->second + 1; + persistent++; + } while (persistent <= 1); + + return nullptr; } void GManager::ClearObjectStateBlock(unsigned int collectionKey) { From 8a6b92feb0b945abd32011a71a88062e8417eab1 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 07:23:53 +0100 Subject: [PATCH 543/691] 86.2%: improve GManager::CalcMapCoordsForMarker Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 997c6e443..2134e13da 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2670,7 +2670,6 @@ bool GManager::CalcMapCoordsForMarker(unsigned int markerKey, bVector2 &outPos, } const UMath::Vector3 *pos = reinterpret_cast(marker.GetAttributePointer(0x9F743A0E, 0)); - TrackInfo *trackInfo; bVector2 worldPos; UMath::Matrix4 rotMat; UMath::Vector3 forwardVec; @@ -2680,12 +2679,14 @@ bool GManager::CalcMapCoordsForMarker(unsigned int markerKey, bVector2 &outPos, pos = reinterpret_cast(Attrib::DefaultDataArea(sizeof(UMath::Vector3))); } - trackInfo = TrackInfo::GetTrackInfo(2000); - worldPos = bVector2(pos->x, pos->y); - Minimap::ConvertPos(worldPos, outPos, trackInfo); + worldPos.x = pos->x; + worldPos.y = pos->y; + Minimap::ConvertPos(worldPos, outPos, TrackInfo::GetTrackInfo(2000)); rotMat = UMath::Matrix4::kIdentity; - forwardVec = UMath::Vector3Make(0.0f, 0.0f, 1.0f); + forwardVec.x = 0.0f; + forwardVec.y = 0.0f; + forwardVec.z = 1.0f; rotation = reinterpret_cast(marker.GetAttributePointer(0x5A6A57C6, 0)); if (!rotation) { rotation = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); From 1ce7e279a384bd654ae429f0a1a51756e4634bb8 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 07:30:49 +0100 Subject: [PATCH 544/691] 86.2%: improve GManager::SaveGameplayData Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 2134e13da..7bf863126 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2194,6 +2194,9 @@ void GManager::UpdatePendingSMS() { bool GManager::SaveGameplayData(unsigned char *dest, unsigned int maxSize) { SavedGameplayDataHeader *header; unsigned char *cursor; + unsigned char *end; + unsigned int freeRoamStartMarker; + unsigned int freeRoamFromSafeHouseStartMarker; ObjectStateMap::iterator it; bMemSet(dest, 0, maxSize); @@ -2209,6 +2212,7 @@ bool GManager::SaveGameplayData(unsigned char *dest, unsigned int maxSize) { } header = reinterpret_cast(dest); + end = dest + maxSize; header->mMagic = 0x656D6147; header->mVersion = 8; header->mNumPersistent = mPersistentStateBlocks.size(); @@ -2217,13 +2221,14 @@ bool GManager::SaveGameplayData(unsigned char *dest, unsigned int maxSize) { for (it = mPersistentStateBlocks.begin(); it != mPersistentStateBlocks.end(); ++it) { ObjectStateBlockHeader *block = it->second; unsigned int blockSize = (block->mSize + 0x17U) & ~0xFU; + unsigned char *nextCursor = cursor + blockSize; - if (static_cast(cursor - dest) + blockSize > maxSize) { + if (nextCursor > end) { return false; } bMemCpy(cursor, block, blockSize); - cursor += blockSize; + cursor = nextCursor; } cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); @@ -2253,8 +2258,10 @@ bool GManager::SaveGameplayData(unsigned char *dest, unsigned int maxSize) { cursor += header->mNumPendingSMS * sizeof(int); cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); - bMemCpy(cursor, &mFreeRoamStartMarker, sizeof(mFreeRoamStartMarker)); - bMemCpy(cursor + 0x10, &mFreeRoamFromSafeHouseStartMarker, sizeof(mFreeRoamFromSafeHouseStartMarker)); + freeRoamStartMarker = mFreeRoamStartMarker; + bMemCpy(cursor, &freeRoamStartMarker, sizeof(freeRoamStartMarker)); + freeRoamFromSafeHouseStartMarker = mFreeRoamFromSafeHouseStartMarker; + bMemCpy(cursor + 0x10, &freeRoamFromSafeHouseStartMarker, sizeof(freeRoamFromSafeHouseStartMarker)); MD5 md5; md5.Reset(); md5.Update(dest + 0x10, maxSize - 0x10); From fa41fea7ceaf58ea86d538d7a958606cc83e6f30 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 07:41:15 +0100 Subject: [PATCH 545/691] 86.3%: improve GManager::UpdatePursuit Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 7bf863126..040f4e5d5 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -42,6 +42,7 @@ extern int SkipFE; extern int TWEAK_ShowAllGameplayIcons; +extern int TWEAK_ShowGameplayMilestoneValues; extern int gVerboseTesterOutput; char *bStrIStr(const char *s1, const char *s2); @@ -2523,6 +2524,17 @@ void GManager::UpdatePursuit() { bool challengeRace; bool cooldown; bool epicPursuitRace; + static const char *milestoneNames[] = { + "cops_damaged", + "cops_destroyed_in_pursuit", + "cost_to_state_in_pursuit", + "pursuit_evasion_time", + "pursuit_length", + "roadblocks_dodged", + "tire_spikes_dodged", + "total_infractions", + "bounty_in_pursuit", + }; roaming = GRaceStatus::Get().GetPlayMode() == GRaceStatus::kPlayMode_Roaming; pursuit = nullptr; @@ -2567,6 +2579,12 @@ void GManager::UpdatePursuit() { } else if (pursuit && !cooldown) { mPursuitBreakerIconsShown = true; } + + if (TWEAK_ShowGameplayMilestoneValues != 0) { + for (int i = 0; i <= 8; ++i) { + GetValue(milestoneNames[i]); + } + } } void GManager::UpdateTriggerAvailability() { From 123761dc51b8eb81a1606bbfad87538e515302dc Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 07:45:37 +0100 Subject: [PATCH 546/691] 86.3%: improve GManager::UpdatePursuit Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 36 +++++++++++++++-------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 040f4e5d5..019e18ece 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2524,17 +2524,6 @@ void GManager::UpdatePursuit() { bool challengeRace; bool cooldown; bool epicPursuitRace; - static const char *milestoneNames[] = { - "cops_damaged", - "cops_destroyed_in_pursuit", - "cost_to_state_in_pursuit", - "pursuit_evasion_time", - "pursuit_length", - "roadblocks_dodged", - "tire_spikes_dodged", - "total_infractions", - "bounty_in_pursuit", - }; roaming = GRaceStatus::Get().GetPlayMode() == GRaceStatus::kPlayMode_Roaming; pursuit = nullptr; @@ -2581,8 +2570,29 @@ void GManager::UpdatePursuit() { } if (TWEAK_ShowGameplayMilestoneValues != 0) { - for (int i = 0; i <= 8; ++i) { - GetValue(milestoneNames[i]); + static volatile int xLeft = -130; + static volatile int yTop = -230; + static volatile int tab = 220; + static volatile int line = 16; + static const char *milestoneNames[] = { + "cops_damaged", + "cops_destroyed_in_pursuit", + "cost_to_state_in_pursuit", + "pursuit_evasion_time", + "pursuit_length", + "roadblocks_dodged", + "tire_spikes_dodged", + "total_infractions", + "bounty_in_pursuit", + }; + int x = xLeft; + int y = yTop; + + for (int printMilestone = 0; printMilestone <= 8; ++printMilestone) { + const char *name = milestoneNames[printMilestone]; + float val = GetValue(name); + + y = line; } } } From 35c197fab6f3f408bb3c32cefb50f7834fb9f449 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 07:47:56 +0100 Subject: [PATCH 547/691] 86.3%: improve GManager::GetRespawnLocation Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 019e18ece..d9c099c24 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2862,20 +2862,20 @@ unsigned int GManager::GetRespawnMarker() { } void GManager::GetRespawnLocation(UMath::Vector3 &startLoc, UMath::Vector3 &initialVec) { - Attrib::Gen::gameplay gameplayObj(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), GetRespawnMarker()), 0, nullptr); - const float *position = reinterpret_cast(gameplayObj.GetAttributePointer(0x9F743A0E, 0)); + Attrib::Gen::gameplay gameplayObj(GetRespawnMarker(), 0, nullptr); + const UMath::Vector3 *position = reinterpret_cast(gameplayObj.GetAttributePointer(0x9F743A0E, 0)); UMath::Matrix4 rotMat; UMath::Vector3 respawnLoc; UMath::Vector3 forwardVec; const float *rotation; if (!position) { - position = reinterpret_cast(Attrib::DefaultDataArea(sizeof(UMath::Vector3))); + position = reinterpret_cast(Attrib::DefaultDataArea(sizeof(UMath::Vector3))); } - respawnLoc.x = -position[1]; - respawnLoc.y = position[2]; - respawnLoc.z = position[0]; + respawnLoc.x = -position->y; + respawnLoc.y = position->z; + respawnLoc.z = position->x; startLoc = respawnLoc; UMath::Copy(UMath::Matrix4::kIdentity, rotMat); From a46fc5f39adc5f01b738473c1ed2754464f58be7 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 07:49:05 +0100 Subject: [PATCH 548/691] 86.3%: improve GManager::CalcMapCoordsForMarker Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index d9c099c24..0a5f80c3c 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2704,19 +2704,21 @@ bool GManager::CalcMapCoordsForMarker(unsigned int markerKey, bVector2 &outPos, return false; } - const UMath::Vector3 *pos = reinterpret_cast(marker.GetAttributePointer(0x9F743A0E, 0)); + const bVector2 *pos = reinterpret_cast(marker.GetAttributePointer(0x9F743A0E, 0)); bVector2 worldPos; UMath::Matrix4 rotMat; UMath::Vector3 forwardVec; const float *rotation; + TrackInfo *trackInfo; if (!pos) { - pos = reinterpret_cast(Attrib::DefaultDataArea(sizeof(UMath::Vector3))); + pos = reinterpret_cast(Attrib::DefaultDataArea(sizeof(UMath::Vector3))); } + trackInfo = TrackInfo::GetTrackInfo(2000); worldPos.x = pos->x; worldPos.y = pos->y; - Minimap::ConvertPos(worldPos, outPos, TrackInfo::GetTrackInfo(2000)); + Minimap::ConvertPos(worldPos, outPos, trackInfo); rotMat = UMath::Matrix4::kIdentity; forwardVec.x = 0.0f; From 6809c81b2e817066f5cd80e8a7eb9f1744d08495 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 07:55:24 +0100 Subject: [PATCH 549/691] 86.3%: improve GManager::CalcMapCoordsForMarker Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 0a5f80c3c..9e3a7dd13 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2705,7 +2705,6 @@ bool GManager::CalcMapCoordsForMarker(unsigned int markerKey, bVector2 &outPos, } const bVector2 *pos = reinterpret_cast(marker.GetAttributePointer(0x9F743A0E, 0)); - bVector2 worldPos; UMath::Matrix4 rotMat; UMath::Vector3 forwardVec; const float *rotation; @@ -2716,8 +2715,7 @@ bool GManager::CalcMapCoordsForMarker(unsigned int markerKey, bVector2 &outPos, } trackInfo = TrackInfo::GetTrackInfo(2000); - worldPos.x = pos->x; - worldPos.y = pos->y; + bVector2 worldPos(pos->x, pos->y); Minimap::ConvertPos(worldPos, outPos, trackInfo); rotMat = UMath::Matrix4::kIdentity; From 1fe60d7c935dda79acab25f7410d5d53e924ecb7 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 07:56:19 +0100 Subject: [PATCH 550/691] 86.3%: improve GManager::GetRespawnLocation Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 9e3a7dd13..fdfbf66e1 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2873,16 +2873,12 @@ void GManager::GetRespawnLocation(UMath::Vector3 &startLoc, UMath::Vector3 &init position = reinterpret_cast(Attrib::DefaultDataArea(sizeof(UMath::Vector3))); } - respawnLoc.x = -position->y; - respawnLoc.y = position->z; - respawnLoc.z = position->x; + respawnLoc = UMath::Vector3Make(-position->y, position->z, position->x); startLoc = respawnLoc; UMath::Copy(UMath::Matrix4::kIdentity, rotMat); - forwardVec.x = 0.0f; - forwardVec.y = 0.0f; - forwardVec.z = 1.0f; + forwardVec = UMath::Vector3Make(0.0f, 0.0f, 1.0f); initialVec = forwardVec; rotation = reinterpret_cast(gameplayObj.GetAttributePointer(0x5A6A57C6, 0)); From 47539037a08d4756de04736ed9f30d5d021d2b26 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 07:57:28 +0100 Subject: [PATCH 551/691] 86.3%: improve GManager::GetRespawnLocation Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index fdfbf66e1..64204616d 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1714,22 +1714,22 @@ int GManager::GatherVisibleIcons(GIcon **iconArray, IPlayer *player) { } if (show) { - iconSort[count].icon = icon; + iconSort[count].mIcon = icon; if (!simable) { - iconSort[count].distance = 0; + iconSort[count].mDist = 0; } else { - iconSort[count].distance = static_cast(VU0_v3distancesquarexz(icon->GetPosition(), playerPos)); + iconSort[count].mDist = static_cast(VU0_v3distancesquarexz(icon->GetPosition(), playerPos)); } count++; } } if (simable) { - qsort(iconSort, count, sizeof(IconSort), CompareVisibleIcons); + qsort(iconSort, count, sizeof(IconSort), IconSort::Compare); } for (int i = 0; i < count; i++) { - iconArray[i] = iconSort[i].icon; + iconArray[i] = iconSort[i].mIcon; } return count; From 9c4ff3a736df9d3f3d86c09ef40882a6db3edafb Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 07:58:15 +0100 Subject: [PATCH 552/691] Revert "86.3%: improve GManager::GetRespawnLocation" This reverts commit 47539037a08d4756de04736ed9f30d5d021d2b26. --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 64204616d..fdfbf66e1 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1714,22 +1714,22 @@ int GManager::GatherVisibleIcons(GIcon **iconArray, IPlayer *player) { } if (show) { - iconSort[count].mIcon = icon; + iconSort[count].icon = icon; if (!simable) { - iconSort[count].mDist = 0; + iconSort[count].distance = 0; } else { - iconSort[count].mDist = static_cast(VU0_v3distancesquarexz(icon->GetPosition(), playerPos)); + iconSort[count].distance = static_cast(VU0_v3distancesquarexz(icon->GetPosition(), playerPos)); } count++; } } if (simable) { - qsort(iconSort, count, sizeof(IconSort), IconSort::Compare); + qsort(iconSort, count, sizeof(IconSort), CompareVisibleIcons); } for (int i = 0; i < count; i++) { - iconArray[i] = iconSort[i].mIcon; + iconArray[i] = iconSort[i].icon; } return count; From 80c9c3dbfc9bbd642c0e4fdf5919bce4ffede8b4 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 08:01:39 +0100 Subject: [PATCH 553/691] 86.3%: improve GRaceParameters::ExtractDirection Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 544bb42eb..5460b159a 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1952,7 +1952,7 @@ void GRaceParameters::ExtractPosition(Attrib::Gen::gameplay &collection, UMath:: void GRaceParameters::ExtractDirection(Attrib::Gen::gameplay &collection, UMath::Vector3 &dir, float rotate) const { UMath::Matrix4 rotMat = UMath::Matrix4::kIdentity; - UMath::Vector3 forward = {0.0f, 0.0f, 1.0f}; + UMath::Vector3 initialVec = UMath::Vector3Make(0.0f, 0.0f, 1.0f); const float *rotation = reinterpret_cast(collection.GetAttributePointer(0x5A6A57C6, 0)); if (!rotation) { @@ -1960,11 +1960,9 @@ void GRaceParameters::ExtractDirection(Attrib::Gen::gameplay &collection, UMath: } MATRIX4_multyrot(&rotMat, -(*rotation + rotate) * 0.0027777778f, &rotMat); - VU0_MATRIX3x4_vect3mult(forward, rotMat, forward); + VU0_MATRIX3x4_vect3mult(initialVec, rotMat, initialVec); - dir.x = forward.x; - dir.y = forward.y; - dir.z = forward.z; + dir = initialVec; } unsigned int GRaceParameters::GetEventHash() const { From f7a998c9aba09890b87e7384895b0e3c65dd79c0 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 08:07:02 +0100 Subject: [PATCH 554/691] 86.5%: match GManager::ConnectRuntimeInstances Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index fdfbf66e1..e3757e2a9 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1048,13 +1048,24 @@ void GManager::ConnectInstanceReferences(GRuntimeInstance *runtimeInstance, cons } void GManager::ConnectRuntimeInstances() { - for (unsigned int i = 0; i < mInstanceHashTableSize; ++i) { - GRuntimeInstance *instance = mKeyToInstanceMap[i].mInstance; + for (unsigned int onEntry = 0; onEntry < mInstanceHashTableSize; ++onEntry) { + GRuntimeInstance *targetInstance = mKeyToInstanceMap[onEntry].mInstance; + unsigned int collectionKey; + + if (targetInstance) { + targetInstance->ResetConnections(); + ConnectInstanceReferences(targetInstance, *targetInstance); + + collectionKey = targetInstance->GetParent(); + while (collectionKey) { + Attrib::Gen::gameplay collection(collectionKey, 0, nullptr); + + ConnectInstanceReferences(targetInstance, collection); + collectionKey = collection.GetParent(); + } - if (instance) { - instance->ResetConnections(); - ConnectChildren(instance); - instance->LockConnections(); + ConnectChildren(targetInstance); + targetInstance->LockConnections(); } } } From 24d33fb4e586d757f0a205b7bb674b591aa82124 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 08:10:59 +0100 Subject: [PATCH 555/691] 86.6%: match+ GActivity::HandleMessage Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GActivity.cpp | 32 ++++++++++++---------- src/Speed/Indep/Src/Gameplay/GHandler.h | 2 +- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GActivity.cpp b/src/Speed/Indep/Src/Gameplay/GActivity.cpp index d0e167c06..c32399e4c 100644 --- a/src/Speed/Indep/Src/Gameplay/GActivity.cpp +++ b/src/Speed/Indep/Src/Gameplay/GActivity.cpp @@ -395,28 +395,32 @@ int GActivity::BuildActivityTables(lua_State *luaState) { } void GActivity::HandleMessage(LuaMessageDeliveryInfo *deliveryInfo) { - bool builtActivityTables = false; - int top = 0; - StateToHandlers::iterator iter = mStateHandlers.find(mCurrentState); + lua_State *luaState = deliveryInfo->GetLuaState(); + int luaStackPreviousTop = 0; + bool activityTablesBuilt = false; + StateToHandlers::const_iterator iterState = mStateHandlers.find(mCurrentState); + const UTL::Std::vector &handlerVec = iterState->second; - for (UTL::Std::vector::iterator handler = iter->second.begin(); - handler != iter->second.end(); ++handler) { - if ((*handler)->GetCollection() == deliveryInfo->GetMessageKind()) { + for (GHandler *const *iterHandler = handlerVec.begin(); iterHandler != handlerVec.end(); ++iterHandler) { + GHandler *handler = *iterHandler; + + if (handler->message_id() == deliveryInfo->GetMessageKind()) { deliveryInfo->SetActivityContext(this); - deliveryInfo->SetHandlerContext(*handler); - if ((*handler)->MessagePassesFilters(deliveryInfo)) { + deliveryInfo->SetHandlerContext(handler); + handler->IsScripted(); + if (handler->MessagePassesFilters(deliveryInfo)) { deliveryInfo->BuildMessageTable(); - if (!builtActivityTables) { - top = BuildActivityTables(deliveryInfo->GetLuaState()); - builtActivityTables = true; + if (!activityTablesBuilt) { + luaStackPreviousTop = BuildActivityTables(luaState); + activityTablesBuilt = true; } - (*handler)->HandleMessage(deliveryInfo); + handler->HandleMessage(deliveryInfo); } } } - if (builtActivityTables) { - lua_settop(deliveryInfo->GetLuaState(), top); + if (activityTablesBuilt) { + lua_settop(luaState, luaStackPreviousTop); } } diff --git a/src/Speed/Indep/Src/Gameplay/GHandler.h b/src/Speed/Indep/Src/Gameplay/GHandler.h index cc818bfd0..f315161ef 100644 --- a/src/Speed/Indep/Src/Gameplay/GHandler.h +++ b/src/Speed/Indep/Src/Gameplay/GHandler.h @@ -21,7 +21,7 @@ class GHandler : public GRuntimeInstance { return kGameplayObjType_Handler; } - bool IsScripted() const { + bool IsScripted() { return mAttached; } From c64f1de14c61e20a8cfcb453320a07650998bdd3 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 08:14:06 +0100 Subject: [PATCH 556/691] 86.6%: improve GRaceStatus::CalculateRankings Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 49 +++++++++++--------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 5460b159a..4096deb5e 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3050,44 +3050,51 @@ void GRaceStatus::SetRoaming() { } void GRaceStatus::CalculateRankings() { - GRacerInfo *rankings[16]; - bool rankPlayersByPoints = mRaceParms->GetRankPlayersByPoints(); - int aiRacers = 0; + GRacerInfo *sortedRacers[16]; + bool sortByPoints; + int players_encountered = 0; - for (int i = 0; i < mRacerCount; ++i) { - rankings[i] = &mRacerInfo[i]; + for (int idx = 0; idx < mRacerCount; ++idx) { + sortedRacers[idx] = &mRacerInfo[idx]; } - for (int i = mRacerCount - 1; i > 0; --i) { - for (int j = 0; j < i; ++j) { + sortByPoints = mRaceParms->GetRankPlayersByPoints(); + for (int sort1 = mRacerCount - 1; sort1 > 0; --sort1) { + for (int sort2 = 0; sort2 < sort1; ++sort2) { bool swap; - if (!rankPlayersByPoints) { - swap = rankings[j]->IsBehind(*rankings[i]); - } else if (rankings[i]->GetPointTotal() + rankings[j]->GetPointTotal() <= 0.0f) { - swap = rankings[j]->IsBehind(*rankings[i]); + if (sortByPoints) { + float p1 = sortedRacers[sort1]->GetPointTotal(); + float p2 = sortedRacers[sort2]->GetPointTotal(); + + if (p1 + p2 <= 0.0f) { + swap = sortedRacers[sort2]->IsBehind(*sortedRacers[sort1]); + } else { + swap = p2 < p1; + } } else { - swap = rankings[j]->GetPointTotal() < rankings[i]->GetPointTotal(); + swap = sortedRacers[sort2]->IsBehind(*sortedRacers[sort1]); } if (swap) { - GRacerInfo *info = rankings[i]; + GRacerInfo *temp = sortedRacers[sort1]; - rankings[i] = rankings[j]; - rankings[j] = info; + sortedRacers[sort1] = sortedRacers[sort2]; + sortedRacers[sort2] = temp; } } } - for (int i = 0; i < mRacerCount; ++i) { - GRacerInfo *info = rankings[i]; + for (int onSetRank = 0; onSetRank < mRacerCount; ++onSetRank) { + int ranking = onSetRank + 1; + GRacerInfo *info = sortedRacers[onSetRank]; - info->SetRanking(i + 1); - if (!info->GetGameCharacter()) { + info->SetRanking(ranking); + if (!info->GetIsHuman()) { info->mAiRanking = 0; - ++aiRacers; + ++players_encountered; } else { - info->mAiRanking = (i + 1) - aiRacers; + info->mAiRanking = ranking - players_encountered; } } } From d754f05dd648a556141c190acb4831a1d76346b9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 08:21:02 +0100 Subject: [PATCH 557/691] 86.6%: improve GRaceStatus::SetRoaming Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.h | 3 +++ src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.h b/src/Speed/Indep/Src/Gameplay/GManager.h index b02b6b9a0..aec387420 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.h +++ b/src/Speed/Indep/Src/Gameplay/GManager.h @@ -200,6 +200,9 @@ class GManager : public UTL::COM::Object, public IVehicleCache { unsigned int SaveSMSInfo(int *saveInfo); void LoadSMSInfo(int *loadInfo, unsigned int count); bool GetHasPendingSMS() const; + bool GetHasPendingRestartEvent() const { + return mRestartEventHash != 0; + } bool CanPlaySMS() const; void AddSMS(int smsID); void DispatchSMSMessage(int smsID); diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 4096deb5e..824628a59 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3032,7 +3032,7 @@ void GRaceStatus::SetRoaming() { } } - if (!lastDDay && reinterpret_cast(&GManager::Get())->mRestartEventHash == 0) { + if (!lastDDay && !GManager::Get().GetHasPendingRestartEvent()) { new EReloadHud(); } From 2df6a2e7ddc1cd9dcd654af8b21e0a8754d59796 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 08:24:58 +0100 Subject: [PATCH 558/691] 86.7%: improve GRaceStatus::Update Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 37 ++++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 824628a59..d258c15ca 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3145,47 +3145,46 @@ void GRaceStatus::Update(float dT) { #endif } - if (GetPlayMode() == kPlayMode_Racing) { - int numRacers = mRacerCount; + { + int num_racers = mRacerCount; - if (numRacers > 0) { - int numAiRacers = 0; - float floatRacers = 0.0f; - float percentComplete = 0.0f; + if (GetPlayMode() == kPlayMode_Racing && num_racers > 0) { + int num_ai_racers = 0; + float float_racers = 0.0f; + float percent_complete = 0.0f; float elapsed; int elapsedSec; - for (int idx = 0; idx < numRacers; ++idx) { + for (int idx = 0; idx < num_racers; ++idx) { GRacerInfo &info = GetRacerInfo(idx); - if (!info.GetIsHuman()) { - ++numAiRacers; + if (info.mGameCharacter) { + ++num_ai_racers; } } - for (int idx = 0; idx < numRacers; ++idx) { + for (int idx = 0; idx < num_racers; ++idx) { GRacerInfo &info = GetRacerInfo(idx); info.Update(dT); - ISimable *simable = info.GetSimable(); - if (simable) { + if (info.mhSimable) { float weight = 1.0f; - if (info.GetIsHuman()) { - weight = bMax(1.0f, static_cast(numAiRacers)); + if (!info.mGameCharacter) { + weight = bMax(1.0f, static_cast(num_ai_racers)); } - floatRacers += weight; - percentComplete += weight * info.GetPctRaceComplete(); + float_racers += weight; + percent_complete += weight * info.mPctRaceComplete; } } - fAveragePercentComplete = percentComplete / bMax(1.0f, floatRacers); + fAveragePercentComplete = percent_complete / bMax(1.0f, float_racers); CalculateRankings(); #ifndef EA_BUILD_A124 - for (int idx = 0; idx < numRacers; ++idx) { + for (int idx = 0; idx < num_racers; ++idx) { GetRacerInfo(idx).UpdateSplits(); } #endif @@ -3227,7 +3226,7 @@ void GRaceStatus::Update(float dT) { MNotifyRaceTimeExpired().Post(gameplayMessage); mTimeExpiredMsgSent = true; - for (int idx = 0; idx < mRacerCount; ++idx) { + for (int idx = 0; idx < num_racers; ++idx) { GRacerInfo &info = mRacerInfo[idx]; if (!info.GetGameCharacter() && !info.IsFinishedRacing()) { From 1c0b75a79a7d2f486db15e356319b5a881e85808 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 08:31:09 +0100 Subject: [PATCH 559/691] 86.7%: improve GActivity::SerializeVars Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GActivity.cpp | 74 ++++++++-------------- 1 file changed, 27 insertions(+), 47 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GActivity.cpp b/src/Speed/Indep/Src/Gameplay/GActivity.cpp index c32399e4c..d5e57991b 100644 --- a/src/Speed/Indep/Src/Gameplay/GActivity.cpp +++ b/src/Speed/Indep/Src/Gameplay/GActivity.cpp @@ -432,83 +432,63 @@ template GObjectIterator::GObjectIterator(unsigned int flagMask); template void GObjectIterator::Advance(); void GActivity::SerializeVars(bool abandonLuaTable) { - SerializedHeader header; - ObjectStateBlockHeader *block; + const char *activityName; const char *stateName; - bool isDoneState; + unsigned int stateNameLen; + bool terminalState; + SerializedHeader header; + lua_State *luaState; + int prevStackTop; + unsigned int footprint; + unsigned char *buffer; if (!mVarsInLuaVM) { return; } + activityName = CollectionName(); stateName = ""; if (mCurrentState) { - const char *const *stateNamePtr = reinterpret_cast(mCurrentState->GetAttributePointer(0x3E225EC1, 0)); - - if (!stateNamePtr) { - stateNamePtr = reinterpret_cast(Attrib::DefaultDataArea(sizeof(const char *))); - } - - stateName = *stateNamePtr; + stateName = mCurrentState->Name(0); } - isDoneState = false; + terminalState = false; + stateNameLen = bStrLen(stateName); if (mCurrentState) { - const char *const *stateNamePtr = reinterpret_cast(mCurrentState->GetAttributePointer(0x3E225EC1, 0)); - - if (!stateNamePtr) { - stateNamePtr = reinterpret_cast(Attrib::DefaultDataArea(sizeof(const char *))); - } - - if (bStrCmp(*stateNamePtr, "done") == 0) { - isDoneState = true; - } + terminalState = bStrCmp(mCurrentState->Name(0), "done") == 0; } - header.mStateNameHash = *stateName ? stringhash32(stateName) : 0; + header.mStateNameHash = stateNameLen ? stringhash32(stateName) : 0; header.mFlags = static_cast(mRunning != 0); header.mTableBytes = 0; - if (isDoneState) { + if (terminalState) { header.mFlags = header.mFlags | 2; } - lua_State *luaState = LuaRuntime::Get().GetState(); - int top = lua_gettop(luaState); + luaState = LuaRuntime::Get().GetState(); + prevStackTop = lua_gettop(luaState); - if (!isDoneState) { - lua_pushstring(luaState, *reinterpret_cast(GetLayoutPointer())); + if (!terminalState) { + lua_pushstring(luaState, activityName); lua_gettable(luaState, LUA_REGISTRYINDEX); if (lua_type(luaState, -1) == LUA_TTABLE) { - const bool *persistent = reinterpret_cast(GetAttributePointer(0xE4542E9B, 0)); - - if (!persistent) { - persistent = reinterpret_cast(Attrib::DefaultDataArea(sizeof(bool))); - } - - header.mTableBytes = SerializeTable(luaState, nullptr, !*persistent); + header.mTableBytes = SerializeTable(luaState, nullptr, !Persistent(0)); } } - block = GManager::Get().AllocObjectStateBlock( - GetCollection(), header.mTableBytes + sizeof(header), - *reinterpret_cast(GetAttributePointer(0xE4542E9B, 0) ? GetAttributePointer(0xE4542E9B, 0) - : Attrib::DefaultDataArea(sizeof(bool)))); + footprint = header.mTableBytes + sizeof(header); + buffer = reinterpret_cast(GManager::Get().AllocObjectStateBlock(GetCollection(), footprint, Persistent(0))); - if (block) { - bMemCpy(block, &header, sizeof(header)); + if (buffer) { + bMemCpy(buffer, &header, sizeof(header)); if (header.mTableBytes != 0) { - const bool *persistent = reinterpret_cast(GetAttributePointer(0xE4542E9B, 0)); - - if (!persistent) { - persistent = reinterpret_cast(Attrib::DefaultDataArea(sizeof(bool))); - } - - SerializeTable(luaState, reinterpret_cast(block) + sizeof(header), !*persistent); + unsigned int writtenBytes = SerializeTable(luaState, buffer + sizeof(header), !Persistent(0)); + (void)writtenBytes; } } - lua_settop(luaState, top); + lua_settop(luaState, prevStackTop); if (abandonLuaTable) { ClearActivityVars(luaState); From ecba99588fe73ab66af2929790b8d2ed1c3bf611 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 08:34:38 +0100 Subject: [PATCH 560/691] 86.8%: match GActivity::SerializeVars Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GActivity.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GActivity.cpp b/src/Speed/Indep/Src/Gameplay/GActivity.cpp index d5e57991b..413c6db0b 100644 --- a/src/Speed/Indep/Src/Gameplay/GActivity.cpp +++ b/src/Speed/Indep/Src/Gameplay/GActivity.cpp @@ -432,7 +432,6 @@ template GObjectIterator::GObjectIterator(unsigned int flagMask); template void GObjectIterator::Advance(); void GActivity::SerializeVars(bool abandonLuaTable) { - const char *activityName; const char *stateName; unsigned int stateNameLen; bool terminalState; @@ -446,7 +445,6 @@ void GActivity::SerializeVars(bool abandonLuaTable) { return; } - activityName = CollectionName(); stateName = ""; if (mCurrentState) { stateName = mCurrentState->Name(0); @@ -455,13 +453,19 @@ void GActivity::SerializeVars(bool abandonLuaTable) { terminalState = false; stateNameLen = bStrLen(stateName); if (mCurrentState) { - terminalState = bStrCmp(mCurrentState->Name(0), "done") == 0; + if (bStrCmp(mCurrentState->Name(0), "done") == 0) { + terminalState = true; + } } header.mStateNameHash = stateNameLen ? stringhash32(stateName) : 0; - header.mFlags = static_cast(mRunning != 0); + header.mFlags = 0; header.mTableBytes = 0; + if (mRunning) { + header.mFlags = header.mFlags | 1; + } + if (terminalState) { header.mFlags = header.mFlags | 2; } @@ -470,7 +474,7 @@ void GActivity::SerializeVars(bool abandonLuaTable) { prevStackTop = lua_gettop(luaState); if (!terminalState) { - lua_pushstring(luaState, activityName); + lua_pushstring(luaState, *reinterpret_cast(GetLayoutPointer())); lua_gettable(luaState, LUA_REGISTRYINDEX); if (lua_type(luaState, -1) == LUA_TTABLE) { header.mTableBytes = SerializeTable(luaState, nullptr, !Persistent(0)); @@ -482,8 +486,9 @@ void GActivity::SerializeVars(bool abandonLuaTable) { if (buffer) { bMemCpy(buffer, &header, sizeof(header)); + buffer += sizeof(header); if (header.mTableBytes != 0) { - unsigned int writtenBytes = SerializeTable(luaState, buffer + sizeof(header), !Persistent(0)); + unsigned int writtenBytes = SerializeTable(luaState, buffer, !Persistent(0)); (void)writtenBytes; } } From d945ff18f092a2471e34d40438a7764da67075fb Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 08:37:14 +0100 Subject: [PATCH 561/691] 86.8%: improve GRacerInfo::FinalizeRaceStats Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 22 +++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index d258c15ca..3be9f769b 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -876,18 +876,25 @@ void GRacerInfo::FinalizeRaceStats() { if (GRaceStatus::Get().GetRaceType() == GRace::kRaceType_SpeedTrap && mGameCharacter) { GRaceParameters *parameters = GRaceStatus::Get().GetRaceParameters(); - float time_left = currentTime - time_now; - int penalty = parameters->GetGameplayObj()->OvertimePenaltyPerSec(0); + float time_left; + float penalty; - if (0.0f < time_left) { - AddToPointTotal(-(time_left * static_cast(penalty))); + if (parameters) { + time_left = currentTime - time_now; + penalty = static_cast(parameters->GetGameplayObj()->OvertimePenaltyPerSec(0)); + + if (0.0f < time_left) { + AddToPointTotal(-(time_left * penalty)); + } } } - if (GRaceStatus::Get().GetRaceParameters() && - GRaceStatus::Get().GetRaceParameters()->GetIsLoopingRace()) { + { + GRaceParameters *parameters = GRaceStatus::Get().GetRaceParameters(); + + if (parameters->GetIsLoopingRace()) { if (mGameCharacter) { - int totalLaps = GRaceStatus::Get().GetRaceParameters()->GetNumLaps(); + int totalLaps = parameters->GetNumLaps(); int completedLaps = GetLapsCompleted(); float elapsedTime = 0.0f; int onLap = 0; @@ -909,6 +916,7 @@ void GRacerInfo::FinalizeRaceStats() { GRaceStatus::Get().SetLapTime(completedLaps, GetIndex(), currentTime - elapsedTime); } } + } #ifndef EA_BUILD_A124 if (mGameCharacter) { From b22b69e27bd1af27c2f679e0a45f12c6393bb2f9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 08:39:43 +0100 Subject: [PATCH 562/691] 86.9%: improve GRacerInfo::FinalizeRaceStats Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 54 +++++++++----------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 3be9f769b..463fad674 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -876,15 +876,16 @@ void GRacerInfo::FinalizeRaceStats() { if (GRaceStatus::Get().GetRaceType() == GRace::kRaceType_SpeedTrap && mGameCharacter) { GRaceParameters *parameters = GRaceStatus::Get().GetRaceParameters(); - float time_left; float penalty; + float point_loss; if (parameters) { - time_left = currentTime - time_now; penalty = static_cast(parameters->GetGameplayObj()->OvertimePenaltyPerSec(0)); + point_loss = currentTime - time_now; - if (0.0f < time_left) { - AddToPointTotal(-(time_left * penalty)); + if (0.0f < point_loss) { + point_loss *= penalty; + AddToPointTotal(-point_loss); } } } @@ -893,42 +894,37 @@ void GRacerInfo::FinalizeRaceStats() { GRaceParameters *parameters = GRaceStatus::Get().GetRaceParameters(); if (parameters->GetIsLoopingRace()) { - if (mGameCharacter) { - int totalLaps = parameters->GetNumLaps(); - int completedLaps = GetLapsCompleted(); - float elapsedTime = 0.0f; - int onLap = 0; - - if (onLap < totalLaps) { - do { - float lapTime = GRaceStatus::Get().GetLapTime(onLap, GetIndex(), false); + if (mGameCharacter) { + int totalLaps = GRaceStatus::Get().GetRaceParameters()->GetNumLaps(); + int completedLaps = GetLapsCompleted(); + float elapsedTime = 0.0f; + int onLap = 0; + + if (onLap < totalLaps) { + do { + float lapTime = GRaceStatus::Get().GetLapTime(onLap, GetIndex(), false); + + if (lapTime == 0.0f) { + completedLaps = onLap; + break; + } - if (lapTime == 0.0f) { - completedLaps = onLap; - break; - } + onLap++; + elapsedTime += lapTime; + } while (onLap < totalLaps); + } - onLap++; - elapsedTime += lapTime; - } while (onLap < totalLaps); + GRaceStatus::Get().SetLapTime(completedLaps, GetIndex(), currentTime - elapsedTime); } - - GRaceStatus::Get().SetLapTime(completedLaps, GetIndex(), currentTime - elapsedTime); } } - } #ifndef EA_BUILD_A124 if (mGameCharacter) { float effectivePct = mDNF ? pctComplete : 1.0f; - float pct[4]; + float pct[4] = {0.25f, 0.5f, 0.75f, 1.0f}; int onSplit; - pct[0] = 0.25f; - pct[1] = 0.5f; - pct[2] = 0.75f; - pct[3] = 1.0f; - for (onSplit = 0; onSplit <= 3; ++onSplit) { bool wasAliveAtPct = effectivePct >= pct[onSplit]; From 6bf69523305c073e255c5d1fd5b897960d08494b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 08:40:34 +0100 Subject: [PATCH 563/691] 86.9%: match GRacerInfo::FinalizeRaceStats Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 463fad674..8d8b5cff1 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -859,9 +859,9 @@ void GRacerInfo::FinalizeRaceStats() { return; } - time_now = GetRaceTime(); + currentTime = GetRaceTime(); + time_now = currentTime; pctComplete = GetPctRaceComplete(); - currentTime = time_now; if (0.1f < pctComplete) { currentTime = currentTime / (pctComplete * 0.01f); } From df0a9e0424fe9fece8064ac9245e7a58b5527ba5 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 08:43:41 +0100 Subject: [PATCH 564/691] 86.9%: improve GRaceCustom::CreateRaceActivity Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h b/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h index f2f3744fb..7ec7c689a 100644 --- a/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h +++ b/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h @@ -1403,7 +1403,11 @@ struct gameplay : Instance { if (attr.IsValid() && attr.GetCollection() != this->GetConstCollection()) { unsigned int len = attr.GetLength(); - if (this->Add(attributeKey, len)) { + if (!this->Add(attributeKey, len)) { + return attr; + } + + { TAttrib localattr(this->Get(attributeKey)); for (unsigned int i = 0; i < len; i++) { From 15fa5fe2efa3ca8376aae3e14802d0a9ecaa9041 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 08:52:03 +0100 Subject: [PATCH 565/691] 87.0%: improve GManager::RefreshEngageTriggerIcons Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 54 ++++++++++---------- src/Speed/Indep/Src/Gameplay/GRaceDatabase.h | 8 +++ 2 files changed, 35 insertions(+), 27 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index e3757e2a9..b12809c23 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1619,25 +1619,25 @@ void GManager::RefreshWorldParticleEffects() { } void GManager::RefreshEngageTriggerIcons() { - for (unsigned int i = 0; i < mInstanceHashTableSize; ++i) { - GRuntimeInstance *instance = mKeyToInstanceMap[i].mInstance; + GObjectIterator iter(0x200); - if (instance && instance->GetType() == kGameplayObjType_Trigger) { - GTrigger *trigger = static_cast(instance); - GActivity *activity = trigger->GetTargetActivity(); + while (iter.IsValid()) { + GTrigger *trigger = iter.GetInstance(); + GActivity *activity = trigger->GetTargetActivity(); - if (activity) { - GRaceParameters *race = GRaceDatabase::Get().GetRaceFromActivity(activity); + if (activity) { + GRaceParameters *raceParms = GRaceDatabase::Get().GetRaceFromActivity(activity); + bool complete = GRaceDatabase::Get().IsCareerRaceComplete(raceParms->GetEventHash()); + bool unlocked = GRaceDatabase::Get().IsCareerRaceUnlocked(raceParms->GetEventHash()); - if (race) { - if (!race->GetIsAvailable(GRace::kRaceContext_Career)) { - trigger->HideIcon(); - } else { - trigger->ShowIcon(); - } - } + if (!unlocked || complete) { + trigger->HideIcon(); + } else { + trigger->ShowIcon(); } } + + iter.Advance(); } } @@ -1687,16 +1687,16 @@ void GManager::FreeIconAt(unsigned int index) { mNumIcons--; } -struct IconSort { - GIcon *icon; - int distance; -}; +int GManager::GatherVisibleIcons(GIcon **iconArray, IPlayer *player) { + struct IconSort { + GIcon *mIcon; + int mDist; -static int CompareVisibleIcons(const void *lhs, const void *rhs) { - return reinterpret_cast(lhs)->distance - reinterpret_cast(rhs)->distance; -} + static int Compare(const void *lhs, const void *rhs) { + return reinterpret_cast(lhs)->mDist - reinterpret_cast(rhs)->mDist; + } + }; -int GManager::GatherVisibleIcons(GIcon **iconArray, IPlayer *player) { UMath::Vector3 playerPos = UMath::Vector3::kZero; IconSort iconSort[200]; ISimable *simable = nullptr; @@ -1725,22 +1725,22 @@ int GManager::GatherVisibleIcons(GIcon **iconArray, IPlayer *player) { } if (show) { - iconSort[count].icon = icon; + iconSort[count].mIcon = icon; if (!simable) { - iconSort[count].distance = 0; + iconSort[count].mDist = 0; } else { - iconSort[count].distance = static_cast(VU0_v3distancesquarexz(icon->GetPosition(), playerPos)); + iconSort[count].mDist = static_cast(VU0_v3distancesquarexz(icon->GetPosition(), playerPos)); } count++; } } if (simable) { - qsort(iconSort, count, sizeof(IconSort), CompareVisibleIcons); + qsort(iconSort, count, sizeof(IconSort), IconSort::Compare); } for (int i = 0; i < count; i++) { - iconArray[i] = iconSort[i].icon; + iconArray[i] = iconSort[i].mIcon; } return count; diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h index 9b7be13ac..c5b308e9f 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h @@ -152,6 +152,14 @@ class GRaceDatabase { const char *GetNextDDayRace(); void UpdateRaceScore(bool raceCompleted); + bool IsCareerRaceComplete(unsigned int eventHash) { + return CheckRaceScoreFlags(eventHash, kCompleted_ContextCareer); + } + + bool IsCareerRaceUnlocked(unsigned int eventHash) { + return CheckRaceScoreFlags(eventHash, kUnlocked_Career); + } + static GRaceDatabase &Get() { return *mObj; } From e0e697e97b1cc37a420bdf66c72d8890a7f107d6 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 08:53:20 +0100 Subject: [PATCH 566/691] 87.0%: match GManager::RefreshEngageTriggerIcons Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index b12809c23..90200d885 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1630,10 +1630,10 @@ void GManager::RefreshEngageTriggerIcons() { bool complete = GRaceDatabase::Get().IsCareerRaceComplete(raceParms->GetEventHash()); bool unlocked = GRaceDatabase::Get().IsCareerRaceUnlocked(raceParms->GetEventHash()); - if (!unlocked || complete) { - trigger->HideIcon(); - } else { + if (unlocked && !complete) { trigger->ShowIcon(); + } else { + trigger->HideIcon(); } } From 48e57a382ff9241c0202ac0dd6b16835e33cee8e Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 08:54:47 +0100 Subject: [PATCH 567/691] 87.0%: improve GRacerInfo::SaveStartPosition Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 8d8b5cff1..72e89eaf2 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -670,6 +670,11 @@ bool GRacerInfo::AreStatsReady() const { } void GRacerInfo::SaveStartPosition() { + mSavedPosition = UMath::Vector3::kZero; + mSavedHeatLevel = 0.0f; + mSavedDirection = UMath::Vector3::kZero; + mSavedSpeed = 0.0f; + ISimable *simable = GetSimable(); if (!simable) { @@ -679,11 +684,13 @@ void GRacerInfo::SaveStartPosition() { IRigidBody *rigidBody = simable->GetRigidBody(); if (rigidBody) { mSavedPosition = rigidBody->GetPosition(); - rigidBody->GetForwardVector(mSavedDirection); mSavedSpeed = rigidBody->GetSpeed(); + rigidBody->GetForwardVector(mSavedDirection); + if (mSavedSpeed == 0.0f) { + mSavedSpeed = GRaceStatus::Get().GetRaceParameters()->GetInitialPlayerSpeed(); + } } - mSavedHeatLevel = 0.0f; { IPerpetrator *perp; From a9a0c0b74b27958d7c892598d10fa821518088ad Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 08:56:31 +0100 Subject: [PATCH 568/691] 87.1%: match+ GRacerInfo::SaveStartPosition Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 24 ++++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 72e89eaf2..b4ea99a14 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -670,10 +670,10 @@ bool GRacerInfo::AreStatsReady() const { } void GRacerInfo::SaveStartPosition() { - mSavedPosition = UMath::Vector3::kZero; mSavedHeatLevel = 0.0f; - mSavedDirection = UMath::Vector3::kZero; mSavedSpeed = 0.0f; + mSavedPosition = UMath::Vector3::kZero; + mSavedDirection = UMath::Vector3::kZero; ISimable *simable = GetSimable(); @@ -681,17 +681,17 @@ void GRacerInfo::SaveStartPosition() { return; } - IRigidBody *rigidBody = simable->GetRigidBody(); - if (rigidBody) { - mSavedPosition = rigidBody->GetPosition(); - mSavedSpeed = rigidBody->GetSpeed(); - rigidBody->GetForwardVector(mSavedDirection); - if (mSavedSpeed == 0.0f) { - mSavedSpeed = GRaceStatus::Get().GetRaceParameters()->GetInitialPlayerSpeed(); - } - } - { + IRigidBody *rigidBody = simable->GetRigidBody(); + + if (rigidBody) { + mSavedPosition = rigidBody->GetPosition(); + mSavedSpeed = rigidBody->GetSpeed(); + rigidBody->GetForwardVector(mSavedDirection); + if (mSavedSpeed == 0.0f) { + mSavedSpeed = GRaceStatus::Get().GetRaceParameters()->GetInitialPlayerSpeed(); + } + } IPerpetrator *perp; if (simable->QueryInterface(&perp)) { From ba1de57627f488f2563108f069bf23a0d3dbc8bb Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 09:01:14 +0100 Subject: [PATCH 569/691] 87.1%: match GActivity::CollectionIsHandlerForState Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GActivity.cpp | 59 +++++++------------ .../Generated/AttribSys/Classes/gameplay.h | 4 +- 2 files changed, 23 insertions(+), 40 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GActivity.cpp b/src/Speed/Indep/Src/Gameplay/GActivity.cpp index 413c6db0b..7e74845e7 100644 --- a/src/Speed/Indep/Src/Gameplay/GActivity.cpp +++ b/src/Speed/Indep/Src/Gameplay/GActivity.cpp @@ -227,54 +227,37 @@ void GActivity::ActivateReferencedTriggers(bool activate, GRuntimeInstance *inst } bool GActivity::CollectionIsHandlerForState(GState *state, GHandler *handler) { - const Attrib::Key *handlerState = reinterpret_cast(handler->GetAttributePointer(0x918c796e, 0)); + const GCollectionKey &stateRef = handler->stateref(); - if (!handlerState) { - handlerState = reinterpret_cast(Attrib::DefaultDataArea(sizeof(Attrib::Key))); + if (stateRef.GetCollectionKey() != state->GetCollection()) { + return false; } - if (*handlerState == state->GetCollection()) { - const Attrib::Key *handlerActivity = reinterpret_cast(handler->GetAttributePointer(0x857fe432, 0)); + { + const GCollectionKey &handlerOwner = handler->handler_owner(); - if (!handlerActivity) { - handlerActivity = reinterpret_cast(Attrib::DefaultDataArea(sizeof(Attrib::Key))); - } - - if (*handlerActivity == GetCollection()) { + if (handlerOwner.GetCollectionKey() == GetCollection()) { return true; - } else { - Attrib::Instance activity(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), *handlerActivity), 0, nullptr); - const Attrib::Gen::gameplay::_LayoutStruct *layout = - reinterpret_cast(activity.GetLayoutPointer()); - - if (!layout) { - layout = reinterpret_cast( - Attrib::DefaultDataArea(sizeof(Attrib::Gen::gameplay::_LayoutStruct))); - } + } - if (bStrCmp(layout->CollectionName, CollectionName()) == 0) { - return true; - } else { - Attrib::Key collection = GetCollection(); + Attrib::Gen::gameplay handlerOwnerObj(handlerOwner.GetCollectionKey(), 0, nullptr); - if (collection) { - do { - if (collection == *handlerActivity) { - return true; - } + if (bStrCmp( + *reinterpret_cast(handlerOwnerObj.GetLayoutPointer()), + *reinterpret_cast(GetLayoutPointer())) == 0) { + return true; + } - Attrib::Instance parent(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), collection), 0, nullptr); - const Attrib::Gen::gameplay::_LayoutStruct *parentLayout = - reinterpret_cast(parent.GetLayoutPointer()); + unsigned int validOwnerKey = GetCollection(); - if (!parentLayout) { - parentLayout = reinterpret_cast( - Attrib::DefaultDataArea(sizeof(Attrib::Gen::gameplay::_LayoutStruct))); - } + while (validOwnerKey) { + if (validOwnerKey == handlerOwner.GetCollectionKey()) { + return true; + } - collection = parent.GetParent(); - } while (collection != 0); - } + { + Attrib::Gen::gameplay validOwnerObj(validOwnerKey, 0, nullptr); + validOwnerKey = validOwnerObj.GetParent(); } } } diff --git a/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h b/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h index 7ec7c689a..1b345727a 100644 --- a/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h +++ b/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h @@ -1085,7 +1085,7 @@ struct gameplay : Instance { return *resultptr; } - const GCollectionKey &handler_owner(unsigned int index) const { + const GCollectionKey &handler_owner(unsigned int index = 0) const { const GCollectionKey *resultptr = reinterpret_cast(this->GetAttributePointer(0x857fe432, index)); if (!resultptr) { resultptr = reinterpret_cast(DefaultDataArea(sizeof(GCollectionKey))); @@ -1161,7 +1161,7 @@ struct gameplay : Instance { return this->Get(0x916e0e78).GetLength(); } - const GCollectionKey &stateref(unsigned int index) const { + const GCollectionKey &stateref(unsigned int index = 0) const { const GCollectionKey *resultptr = reinterpret_cast(this->GetAttributePointer(0x918c796e, index)); if (!resultptr) { resultptr = reinterpret_cast(DefaultDataArea(sizeof(GCollectionKey))); From b3c383afbed8d9eb8bd62c47803eb15f977bde7d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 09:05:52 +0100 Subject: [PATCH 570/691] 87.2%: match GIcon::SnapToGround Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GIcon.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GIcon.cpp b/src/Speed/Indep/Src/Gameplay/GIcon.cpp index 349526003..b46c88ebd 100644 --- a/src/Speed/Indep/Src/Gameplay/GIcon.cpp +++ b/src/Speed/Indep/Src/Gameplay/GIcon.cpp @@ -6,6 +6,14 @@ #include "Speed/Indep/Src/World/WCollisionMgr.h" #include "Speed/Indep/Src/World/WorldModel.hpp" +extern void *gWGrid __asm__("_5WGrid.fgGrid"); + +struct WGrid { + static bool Initialized() { + return gWGrid != nullptr; + } +}; + static int sNumSpawned; GIcon::EffectInfo GIcon::kEffectInfo[GIcon::kType_Count] = { @@ -94,18 +102,28 @@ void GIcon::FindSection() { } void GIcon::SnapToGround() { - UMath::Vector3 posSwiz = mPosition; float worldHeight; bool heightValid; + if (!WGrid::Initialized()) { + return; + } + if (IsFlagSet(kFlag_Snapped)) { return; } + if (mPosition.z != 0.0f) { + return; + } + + UMath::Vector3 posSwiz = UMath::Vector3Make(-mPosition.y, mPosition.z, mPosition.x); + worldHeight = 0.0f; heightValid = WCollisionMgr(0, 3).GetWorldHeightAtPointRigorous(posSwiz, worldHeight, nullptr); if (heightValid) { - mPosition.y = worldHeight; SetFlag(kFlag_Snapped); + mPosition.z = worldHeight; + SetPosition(); } } From 3924b4f4f9822608dc5635a52183b4b1e70e58db Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 09:09:29 +0100 Subject: [PATCH 571/691] 87.3%: improve GVault::PreloadTransient Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GVault.cpp | 41 ++++++++++++++----------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GVault.cpp b/src/Speed/Indep/Src/Gameplay/GVault.cpp index 3e782ee78..65f1a2c6d 100644 --- a/src/Speed/Indep/Src/Gameplay/GVault.cpp +++ b/src/Speed/Indep/Src/Gameplay/GVault.cpp @@ -9,6 +9,8 @@ #include "Speed/Indep/Src/Misc/AttribAlloc.h" #include "Speed/Indep/Src/Misc/AttribAsset.h" +#include + void *LoggingAttribAllocator::operator new(std::size_t size) { return gFastMem.Alloc(size, nullptr); } @@ -145,24 +147,27 @@ void GVault::LoadResident(AttribVaultPackImage *packImage) { } void GVault::PreloadTransient(AttribVaultPackImage *packImage, int pool_num) { - char binName[128]; - char vltName[128]; - PreloadingAttribAllocator *allocator; - IAttribAllocator *prevAllocator; - - bSPrintf(binName, "%s.bin", GetName()); - bSPrintf(vltName, "%s.vlt", GetName()); - - allocator = new PreloadingAttribAllocator(pool_num); - prevAllocator = AttribAlloc::OverrideAllocator(allocator); - - AddDepFile(binName, reinterpret_cast(packImage) + mBinOffset, mBinSize); - mVault = AddVault(vltName, reinterpret_cast(packImage) + mVltOffset, mVltSize); - mAttribAllocator = allocator; - mAttribAllocChecksum = allocator->GetChecksum(); - mAttribObjSize = allocator->GetByteCount(); - - AttribAlloc::OverrideAllocator(prevAllocator); + unsigned char *binBlock = reinterpret_cast(packImage) + mBinOffset; + unsigned char *vltBlock = reinterpret_cast(packImage) + mVltOffset; + char binFileName[128]; + char vltFileName[128]; + PreloadingAttribAllocator *preloadingAllocator; + IAttribAllocator *oldAllocator; + + bSPrintf(binFileName, "%s.bin", GetName()); + bSPrintf(vltFileName, "%s.vlt", GetName()); + + preloadingAllocator = static_cast(LoggingAttribAllocator::operator new(sizeof(PreloadingAttribAllocator))); + ::new (static_cast(preloadingAllocator)) PreloadingAttribAllocator(pool_num); + oldAllocator = AttribAlloc::OverrideAllocator(preloadingAllocator); + + AddDepFile(binFileName, binBlock, mBinSize); + mVault = AddVault(vltFileName, vltBlock, mVltSize); + mAttribAllocator = preloadingAllocator; + mAttribAllocChecksum = preloadingAllocator->GetChecksum(); + mAttribObjSize = preloadingAllocator->GetByteCount(); + + AttribAlloc::OverrideAllocator(oldAllocator); mGameObjSize = (GObjectBlock::CalcSpaceRequired(this, &mGameObjCount) + 0x5FU) & ~15U; } From cbcefa2c4e880930d5a9f6890db5b065f6b3fbe2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 09:11:21 +0100 Subject: [PATCH 572/691] 87.3%: improve GVault::PreloadTransient Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GVault.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GVault.cpp b/src/Speed/Indep/Src/Gameplay/GVault.cpp index 65f1a2c6d..a54ab6a77 100644 --- a/src/Speed/Indep/Src/Gameplay/GVault.cpp +++ b/src/Speed/Indep/Src/Gameplay/GVault.cpp @@ -11,6 +11,15 @@ #include +struct LoggingAttribAllocatorLayout { + void *vfptr; + unsigned int mChecksum; + unsigned int mAllocCount; + unsigned int mAllocBytes; + unsigned int mFreeCount; + unsigned int mFreeBytes; +}; + void *LoggingAttribAllocator::operator new(std::size_t size) { return gFastMem.Alloc(size, nullptr); } @@ -147,25 +156,28 @@ void GVault::LoadResident(AttribVaultPackImage *packImage) { } void GVault::PreloadTransient(AttribVaultPackImage *packImage, int pool_num) { - unsigned char *binBlock = reinterpret_cast(packImage) + mBinOffset; - unsigned char *vltBlock = reinterpret_cast(packImage) + mVltOffset; + unsigned char *binBlock; + unsigned char *vltBlock = reinterpret_cast(packImage); char binFileName[128]; char vltFileName[128]; PreloadingAttribAllocator *preloadingAllocator; IAttribAllocator *oldAllocator; + binBlock = vltBlock + mBinOffset; + vltBlock += mVltOffset; + bSPrintf(binFileName, "%s.bin", GetName()); bSPrintf(vltFileName, "%s.vlt", GetName()); - preloadingAllocator = static_cast(LoggingAttribAllocator::operator new(sizeof(PreloadingAttribAllocator))); + preloadingAllocator = static_cast(gFastMem.Alloc(sizeof(PreloadingAttribAllocator), nullptr)); ::new (static_cast(preloadingAllocator)) PreloadingAttribAllocator(pool_num); oldAllocator = AttribAlloc::OverrideAllocator(preloadingAllocator); AddDepFile(binFileName, binBlock, mBinSize); mVault = AddVault(vltFileName, vltBlock, mVltSize); mAttribAllocator = preloadingAllocator; - mAttribAllocChecksum = preloadingAllocator->GetChecksum(); - mAttribObjSize = preloadingAllocator->GetByteCount(); + mAttribAllocChecksum = reinterpret_cast(preloadingAllocator)->mChecksum; + mAttribObjSize = reinterpret_cast(preloadingAllocator)->mAllocBytes; AttribAlloc::OverrideAllocator(oldAllocator); mGameObjSize = (GObjectBlock::CalcSpaceRequired(this, &mGameObjCount) + 0x5FU) & ~15U; From 0cee8531695f3c901c3f2abcfcfd2858d45ae190 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 09:16:14 +0100 Subject: [PATCH 573/691] 87.3%: improve GVault::PreloadTransient Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GVault.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GVault.cpp b/src/Speed/Indep/Src/Gameplay/GVault.cpp index a54ab6a77..e7018d729 100644 --- a/src/Speed/Indep/Src/Gameplay/GVault.cpp +++ b/src/Speed/Indep/Src/Gameplay/GVault.cpp @@ -9,8 +9,6 @@ #include "Speed/Indep/Src/Misc/AttribAlloc.h" #include "Speed/Indep/Src/Misc/AttribAsset.h" -#include - struct LoggingAttribAllocatorLayout { void *vfptr; unsigned int mChecksum; @@ -20,6 +18,12 @@ struct LoggingAttribAllocatorLayout { unsigned int mFreeBytes; }; +struct PreloadingAttribAllocatorLayout : LoggingAttribAllocatorLayout { + int mPoolNum; +}; + +extern void *PreloadingAttribAllocator_vtable __asm__("_vt.25PreloadingAttribAllocator"); + void *LoggingAttribAllocator::operator new(std::size_t size) { return gFastMem.Alloc(size, nullptr); } @@ -170,7 +174,19 @@ void GVault::PreloadTransient(AttribVaultPackImage *packImage, int pool_num) { bSPrintf(vltFileName, "%s.vlt", GetName()); preloadingAllocator = static_cast(gFastMem.Alloc(sizeof(PreloadingAttribAllocator), nullptr)); - ::new (static_cast(preloadingAllocator)) PreloadingAttribAllocator(pool_num); + { + PreloadingAttribAllocatorLayout *allocator = reinterpret_cast(preloadingAllocator); + void *vfptr = &PreloadingAttribAllocator_vtable; + unsigned int checksum = 0xEA0FF1CE; + + allocator->mPoolNum = pool_num; + allocator->vfptr = vfptr; + allocator->mFreeBytes = 0; + allocator->mChecksum = checksum; + allocator->mAllocCount = 0; + allocator->mAllocBytes = 0; + allocator->mFreeCount = 0; + } oldAllocator = AttribAlloc::OverrideAllocator(preloadingAllocator); AddDepFile(binFileName, binBlock, mBinSize); From 37ca7bf230bc0d92b750494663474e670d0fd0a9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 09:27:53 +0100 Subject: [PATCH 574/691] 87.4%: improve GRaceStatus::SetRoaming Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Indep/Libs/Support/Utility/UListable.h | 16 ++++++++- src/Speed/Indep/Src/Gameplay/GRaceDatabase.h | 3 ++ src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 35 +++++-------------- .../Generated/AttribSys/Classes/gameplay.h | 6 ++-- 4 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/Speed/Indep/Libs/Support/Utility/UListable.h b/src/Speed/Indep/Libs/Support/Utility/UListable.h index fd915eb19..fdf9eb393 100644 --- a/src/Speed/Indep/Libs/Support/Utility/UListable.h +++ b/src/Speed/Indep/Libs/Support/Utility/UListable.h @@ -141,7 +141,21 @@ template class Li UnList(); } - iterator Next(Enum idx) {} + iterator Next(Enum idx) { + const List &list = GetList(idx); + const pointer *iter = std::find(list.begin(), list.end(), static_cast(this)); + + if (iter == list.end()) { + return nullptr; + } + + ++iter; + if (iter == list.end()) { + return nullptr; + } + + return *iter; + } void AddToList(Enum to) { _mLists._add(static_cast(this), to); diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h index c5b308e9f..dce088992 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.h @@ -149,6 +149,9 @@ class GRaceDatabase { unsigned int SerializeBins(unsigned char *dest); unsigned int DeserializeBins(unsigned char *src); GRaceParameters *GetRaceFromActivity(GActivity *activity); + const char *GetDDayEndRace() const { + return "16.2.1"; + } const char *GetNextDDayRace(); void UpdateRaceScore(bool raceCompleted); diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index b4ea99a14..25b402c16 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2531,8 +2531,8 @@ void GRaceCustom::CreateRaceActivity() { if (mReversed) { if (GetCanBeReversed()) { - GCollectionKey startReverse = mRaceRecord->racestartReverse(0); - GCollectionKey finishReverse = mRaceRecord->racefinishReverse(0); + GCollectionKey startReverse = mRaceRecord->racestartReverse(); + GCollectionKey finishReverse = mRaceRecord->racefinishReverse(); mRaceRecord->Set_racestart(startReverse); mRaceRecord->Set_racefinish(finishReverse); @@ -2981,19 +2981,10 @@ void GRaceStatus::NotifyScriptWhenLoaded() { void GRaceStatus::SetRoaming() { bool lastDDay = false; IPlayer *player; - bool dDay = false; if (mRaceParms) { - lastDDay = bStrCmp(mRaceParms->GetEventID(), "16.2.1") == 0; - const Attrib::Gen::gameplay *gameplayObj = mRaceParms->GetGameplayObj(); - const unsigned int *startNewGame = - reinterpret_cast(gameplayObj->GetAttributePointer(0x64273C71, 0)); - - if (!startNewGame) { - startNewGame = reinterpret_cast(Attrib::DefaultDataArea(sizeof(unsigned int))); - } - - if (!*startNewGame) { + lastDDay = bStrCmp(mRaceParms->GetEventID(), GRaceDatabase::Get().GetDDayEndRace()) == 0; + if (!mRaceParms->GetGameplayObj()->PostRaceActivity().GetCollectionKey()) { g_pEAXSound->StartNewGamePlay(); } } else { @@ -3029,18 +3020,7 @@ void GRaceStatus::SetRoaming() { } } - { - IPlayer::List::const_iterator iter = - std::find(IPlayer::GetList(PLAYER_ALL).begin(), IPlayer::GetList(PLAYER_ALL).end(), player); - IPlayer::List::const_iterator end = IPlayer::GetList(PLAYER_ALL).end(); - - if (iter == end) { - player = nullptr; - } else { - ++iter; - player = iter == end ? nullptr : *iter; - } - } + player = player->Next(PLAYER_ALL); } if (!lastDDay && !GManager::Get().GetHasPendingRestartEvent()) { @@ -3048,8 +3028,11 @@ void GRaceStatus::SetRoaming() { } new EAutoSave(); + bool dDay = false; if (mRaceParms) { - dDay = mRaceParms->GetIsDDayRace(); + if (mRaceParms->GetIsDDayRace()) { + dDay = true; + } } if (!dDay) { diff --git a/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h b/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h index 1b345727a..ee99907bb 100644 --- a/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h +++ b/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h @@ -827,7 +827,7 @@ struct gameplay : Instance { return *resultptr; } - const GCollectionKey &PostRaceActivity(unsigned int index) const { + const GCollectionKey &PostRaceActivity(unsigned int index = 0) const { const GCollectionKey *resultptr = reinterpret_cast(this->GetAttributePointer(0x64273c71, index)); if (!resultptr) { resultptr = reinterpret_cast(DefaultDataArea(sizeof(GCollectionKey))); @@ -1041,7 +1041,7 @@ struct gameplay : Instance { return *resultptr; } - const GCollectionKey &racefinishReverse(unsigned int index) const { + const GCollectionKey &racefinishReverse(unsigned int index = 0) const { const GCollectionKey *resultptr = reinterpret_cast(this->GetAttributePointer(0x7c7cf20f, index)); if (!resultptr) { resultptr = reinterpret_cast(DefaultDataArea(sizeof(GCollectionKey))); @@ -2001,7 +2001,7 @@ struct gameplay : Instance { return *resultptr; } - const GCollectionKey &racestartReverse(unsigned int index) const { + const GCollectionKey &racestartReverse(unsigned int index = 0) const { const GCollectionKey *resultptr = reinterpret_cast(this->GetAttributePointer(0xfd945479, index)); if (!resultptr) { resultptr = reinterpret_cast(DefaultDataArea(sizeof(GCollectionKey))); From b08de507e9f0634a62e6c36c310fb61fceb1428a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 09:32:59 +0100 Subject: [PATCH 575/691] 87.5%: match+ GManager::ReleaseStockCar Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 90200d885..75d5d73e0 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2019,12 +2019,12 @@ ISimable *GManager::GetRandomEmergencyStockCar() { } void GManager::ReleaseStockCar(ISimable *stockCar) { - if (!stockCar) { - return; - } + const Attrib::Instance &carAttrib = stockCar->GetAttributes(); + unsigned int carHash; - stockCar->Kill(); - mStockCars[stockCar->GetAttributes().GetCollection()] = stockCar; + carHash = carAttrib.GetCollection(); + StockCarMap::iterator iterExisting = mStockCars.find(carHash); + mStockCars[carHash] = stockCar; } void GManager::AttachCharacter(GCharacter *character) { From 0791c1b893540882763a9199f302ed8c54d265f2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 09:43:44 +0100 Subject: [PATCH 576/691] 87.5%: improve GManager::SaveGameplayData Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 122 +++++++++++++--------- src/Speed/Indep/Src/Gameplay/GManager.h | 8 ++ src/Speed/Indep/Src/Gameplay/GUtility.h | 4 +- 3 files changed, 81 insertions(+), 53 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 75d5d73e0..1336883e6 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -11,6 +11,7 @@ #include "Speed/Indep/Src/Generated/Messages/MNotifyMilestoneProgress.h" #include "Speed/Indep/Src/Frontend/HUD/FeMenuZoneTrigger.hpp" #include "Speed/Indep/Src/Gameplay/GMarker.h" +#include "Speed/Indep/Src/Gameplay/GUtility.h" #include "Speed/Indep/Src/Gameplay/GVault.h" #include "Speed/Indep/Src/Interfaces/SimActivities/ICopMgr.h" #include "Speed/Indep/Src/Interfaces/SimEntities/IPlayer.h" @@ -2204,81 +2205,98 @@ void GManager::UpdatePendingSMS() { } bool GManager::SaveGameplayData(unsigned char *dest, unsigned int maxSize) { - SavedGameplayDataHeader *header; - unsigned char *cursor; - unsigned char *end; - unsigned int freeRoamStartMarker; - unsigned int freeRoamFromSafeHouseStartMarker; - ObjectStateMap::iterator it; + unsigned char *destStart = dest; + SavedGameplayDataHeader *gameplayHeader; + unsigned int spotBytes; + unsigned int respawnMarker; + unsigned int respawnSafeHouseMarker; + unsigned char *startChecksum; + unsigned int bytesToChecksum; - bMemSet(dest, 0, maxSize); + bMemSet(destStart, 0, maxSize); - GObjectIterator activityIterator(0xFFFFFFFF); - while (activityIterator.IsValid()) { - activityIterator.GetInstance()->SerializeVars(false); - activityIterator.Advance(); + { + GObjectIterator iter(0xFFFFFFFF); + + while (iter.IsValid()) { + GActivity *activity = iter.GetInstance(); + + activity->SerializeVars(false); + iter.Advance(); + } } if (maxSize < 0x80) { return false; } - header = reinterpret_cast(dest); - end = dest + maxSize; - header->mMagic = 0x656D6147; - header->mVersion = 8; - header->mNumPersistent = mPersistentStateBlocks.size(); + gameplayHeader = reinterpret_cast(destStart); + gameplayHeader->mVersion = 8; + gameplayHeader->mMagic = 0x656D6147; + gameplayHeader->mNumPersistent = mPersistentStateBlocks.size(); - cursor = dest + 0x80; - for (it = mPersistentStateBlocks.begin(); it != mPersistentStateBlocks.end(); ++it) { - ObjectStateBlockHeader *block = it->second; - unsigned int blockSize = (block->mSize + 0x17U) & ~0xFU; - unsigned char *nextCursor = cursor + blockSize; + startChecksum = destStart + 0x80; + { + ObjectStateMap::iterator iter = mPersistentStateBlocks.begin(); - if (nextCursor > end) { - return false; - } + while (iter != mPersistentStateBlocks.end()) { + ObjectStateBlockHeader *header = iter->second; + unsigned int allocSize = (header->mSize + 0x17U) & ~0xFU; + + if (startChecksum + allocSize > destStart + maxSize) { + return false; + } - bMemCpy(cursor, block, blockSize); - cursor = nextCursor; + bMemCpy(startChecksum, header, allocSize); + startChecksum += allocSize; + ++iter; + } } - cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); - header->mNumSavedTimers = SaveTimerInfo(reinterpret_cast(cursor)); - cursor += header->mNumSavedTimers * 0x20; + AlignPointer(startChecksum, 0x10); + gameplayHeader->mNumSavedTimers = SaveTimerInfo(reinterpret_cast(startChecksum)); + startChecksum += gameplayHeader->mNumSavedTimers * 0x20; + + gameplayHeader->mNumMilestoneTypes = SaveMilestoneInfo(reinterpret_cast(startChecksum)); + startChecksum += gameplayHeader->mNumMilestoneTypes * 0x10; - header->mNumMilestoneTypes = SaveMilestoneInfo(reinterpret_cast(cursor)); - cursor += header->mNumMilestoneTypes * 0x10; + gameplayHeader->mNumMilestoneRecords = SaveMilestones(reinterpret_cast(startChecksum)); + startChecksum += gameplayHeader->mNumMilestoneRecords * 0x14; + AlignPointer(startChecksum, 0x10); - header->mNumMilestoneRecords = SaveMilestones(reinterpret_cast(cursor)); - cursor += header->mNumMilestoneRecords * 0x14; - cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); + gameplayHeader->mNumSpeedTrapRecords = SaveSpeedTraps(reinterpret_cast(startChecksum)); + startChecksum += gameplayHeader->mNumSpeedTrapRecords * 0x14; + AlignPointer(startChecksum, 0x10); - header->mNumSpeedTrapRecords = SaveSpeedTraps(reinterpret_cast(cursor)); - cursor += header->mNumSpeedTrapRecords * 0x14; - cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); + gameplayHeader->mNumHidingSpotFlags = 0x200; + spotBytes = sizeof(mHidingSpotFound); + bMemCpy(startChecksum, mHidingSpotFound, spotBytes); + startChecksum += spotBytes; + AlignPointer(startChecksum, 0x10); - header->mNumHidingSpotFlags = 0x200; - bMemCpy(cursor, mHidingSpotFound, sizeof(mHidingSpotFound)); - cursor += sizeof(mHidingSpotFound); + gameplayHeader->mNumBytesBinStats = GRaceDatabase::Get().SerializeBins(startChecksum); + startChecksum += gameplayHeader->mNumBytesBinStats; + AlignPointer(startChecksum, 0x10); - header->mNumBytesBinStats = GRaceDatabase::Get().SerializeBins(cursor); - cursor += header->mNumBytesBinStats; - cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); + gameplayHeader->mNumPendingSMS = SaveSMSInfo(reinterpret_cast(startChecksum)); + startChecksum += gameplayHeader->mNumPendingSMS * sizeof(int); + AlignPointer(startChecksum, 0x10); - header->mNumPendingSMS = SaveSMSInfo(reinterpret_cast(cursor)); - cursor += header->mNumPendingSMS * sizeof(int); - cursor = reinterpret_cast((reinterpret_cast(cursor) + 0xFU) & ~0xFU); + respawnMarker = GManager::Get().GetFreeRoamStartMarker(); + bMemCpy(startChecksum, &respawnMarker, sizeof(respawnMarker)); + startChecksum += sizeof(respawnMarker); + AlignPointer(startChecksum, 0x10); + respawnSafeHouseMarker = GManager::Get().GetFreeRoamFromSafeHouseStartMarker(); + bMemCpy(startChecksum, &respawnSafeHouseMarker, sizeof(respawnSafeHouseMarker)); - freeRoamStartMarker = mFreeRoamStartMarker; - bMemCpy(cursor, &freeRoamStartMarker, sizeof(freeRoamStartMarker)); - freeRoamFromSafeHouseStartMarker = mFreeRoamFromSafeHouseStartMarker; - bMemCpy(cursor + 0x10, &freeRoamFromSafeHouseStartMarker, sizeof(freeRoamFromSafeHouseStartMarker)); MD5 md5; + + startChecksum = destStart + 0x10; + bytesToChecksum = maxSize - static_cast(startChecksum - destStart); md5.Reset(); - md5.Update(dest + 0x10, maxSize - 0x10); + md5.Update(startChecksum, bytesToChecksum); md5.GetRaw(); - bMemCpy(dest, md5.GetRaw(), md5.GetRawLength()); + bMemCpy(destStart, md5.GetRaw(), md5.GetRawLength()); return true; } diff --git a/src/Speed/Indep/Src/Gameplay/GManager.h b/src/Speed/Indep/Src/Gameplay/GManager.h index aec387420..35e07f52f 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.h +++ b/src/Speed/Indep/Src/Gameplay/GManager.h @@ -250,6 +250,14 @@ class GManager : public UTL::COM::Object, public IVehicleCache { mFreeRoamFromSafeHouseStartMarker = markerKey; } + unsigned int GetFreeRoamStartMarker() const { + return mFreeRoamStartMarker; + } + + unsigned int GetFreeRoamFromSafeHouseStartMarker() const { + return mFreeRoamFromSafeHouseStartMarker; + } + void TrackValue(const char *valueName, int value) { TrackValue(valueName, static_cast(value)); } diff --git a/src/Speed/Indep/Src/Gameplay/GUtility.h b/src/Speed/Indep/Src/Gameplay/GUtility.h index 1abc1294c..90b1ab027 100644 --- a/src/Speed/Indep/Src/Gameplay/GUtility.h +++ b/src/Speed/Indep/Src/Gameplay/GUtility.h @@ -5,6 +5,8 @@ #pragma once #endif - +static inline void AlignPointer(unsigned char *&ptr, unsigned int bound) { + ptr = reinterpret_cast((reinterpret_cast(ptr) + (bound - 1)) & ~(bound - 1)); +} #endif From eb9e45fea766d21d65897a6c4abc5637a9a212bb Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 09:47:26 +0100 Subject: [PATCH 577/691] 87.5%: improve GManager::CalcMapCoordsForMarker Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 1336883e6..becd9ab36 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2733,30 +2733,20 @@ bool GManager::CalcMapCoordsForMarker(unsigned int markerKey, bVector2 &outPos, return false; } - const bVector2 *pos = reinterpret_cast(marker.GetAttributePointer(0x9F743A0E, 0)); + const UMath::Vector3 &pos = marker.Position(); UMath::Matrix4 rotMat; UMath::Vector3 forwardVec; - const float *rotation; TrackInfo *trackInfo; - if (!pos) { - pos = reinterpret_cast(Attrib::DefaultDataArea(sizeof(UMath::Vector3))); - } - trackInfo = TrackInfo::GetTrackInfo(2000); - bVector2 worldPos(pos->x, pos->y); + bVector2 worldPos(pos.x, pos.y); Minimap::ConvertPos(worldPos, outPos, trackInfo); rotMat = UMath::Matrix4::kIdentity; forwardVec.x = 0.0f; forwardVec.y = 0.0f; forwardVec.z = 1.0f; - rotation = reinterpret_cast(marker.GetAttributePointer(0x5A6A57C6, 0)); - if (!rotation) { - rotation = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); - } - - MATRIX4_multyrot(&rotMat, -*rotation * 0.0027777778f, &rotMat); + MATRIX4_multyrot(&rotMat, -marker.Rotation() * 0.0027777778f, &rotMat); VU0_MATRIX3x4_vect3mult(forwardVec, rotMat, forwardVec); outRotDeg = bAngToDeg(bATan(-forwardVec.x, forwardVec.z)); return true; From dc01de1af715d80560476945c58150c27aef30fc Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 10:00:13 +0100 Subject: [PATCH 578/691] 87.5%: improve GManager::LoadGameplayData Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index becd9ab36..e6d5712a9 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2371,6 +2371,8 @@ bool GManager::LoadGameplayData(unsigned char *src, unsigned int maxSize) { src = reinterpret_cast((reinterpret_cast(src) + 0xFU) & ~0xFU); bMemCpy(&respawnMarker, src, sizeof(respawnMarker)); + src += sizeof(respawnMarker); + AlignPointer(src, 0x10); { Attrib::Gen::gameplay testInstance(respawnMarker, 0, nullptr); @@ -2379,7 +2381,7 @@ bool GManager::LoadGameplayData(unsigned char *src, unsigned int maxSize) { } } - bMemCpy(&respawnMarker, src + 0x10, sizeof(respawnMarker)); + bMemCpy(&respawnMarker, src, sizeof(respawnMarker)); { Attrib::Gen::gameplay testInstance2(respawnMarker, 0, nullptr); From 34c920f614e6e028540fff7b1f73f01bd78982f9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 10:01:28 +0100 Subject: [PATCH 579/691] 87.5%: improve GManager::LoadGameplayData Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index e6d5712a9..139982eeb 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2305,7 +2305,6 @@ bool GManager::LoadGameplayData(unsigned char *src, unsigned int maxSize) { SavedGameplayDataHeader *gameplayHeader; unsigned char *startChecksum; unsigned int bytesToChecksum; - MD5 md5; unsigned int spotBytes; unsigned int binBytesRead; unsigned int respawnMarker; @@ -2319,6 +2318,8 @@ bool GManager::LoadGameplayData(unsigned char *src, unsigned int maxSize) { gameplayHeader = reinterpret_cast(srcStart); startChecksum = srcStart + 0x10; bytesToChecksum = maxSize - 0x10; + MD5 md5; + md5.Reset(); md5.Update(startChecksum, bytesToChecksum); md5.GetRaw(); From dbce5643545c43db138e171869281c69308d4245 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 10:05:01 +0100 Subject: [PATCH 580/691] 87.5%: dwarf improve GManager::LoadGameplayData Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 139982eeb..707db5443 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2308,7 +2308,6 @@ bool GManager::LoadGameplayData(unsigned char *src, unsigned int maxSize) { unsigned int spotBytes; unsigned int binBytesRead; unsigned int respawnMarker; - unsigned int onBlock; if (maxSize < 0x80) { return false; @@ -2331,7 +2330,7 @@ bool GManager::LoadGameplayData(unsigned char *src, unsigned int maxSize) { ResetAllGameplayData(); src += 0x80; - for (onBlock = 0; onBlock < gameplayHeader->mNumPersistent; ++onBlock) { + for (unsigned int onBlock = 0; onBlock < gameplayHeader->mNumPersistent; ++onBlock) { ObjectStateBlockHeader *header = reinterpret_cast(src); unsigned int allocSize = header->mSize; unsigned char *newBlock = reinterpret_cast(AllocObjectStateBlock(header->mKey, allocSize, true)); From 115e684158f9e63e82895e55750f0ac528ee2e9c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 10:08:02 +0100 Subject: [PATCH 581/691] 87.5%: dwarf improve GRaceStatus::UpdateAdaptiveDifficulty Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 25b402c16..e1c04dccf 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3582,7 +3582,6 @@ void GRaceStatus::SyncronizeAdaptiveBonus() { } void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable *who) { - int num_racers; bool update; GRacerInfo *winning_player; GRacerInfo *winning_ai; @@ -3595,7 +3594,7 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable } difficulty = fCatchUpAdaptiveBonus; - num_racers = GetRacerCount(); + const int num_racers = GetRacerCount(); update = false; winning_player = nullptr; winning_ai = nullptr; From 23b8c42aa039f35dde7b4645a8a62a97b5efe88b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 10:17:24 +0100 Subject: [PATCH 582/691] 87.6%: improve GManager::LoadGameplayData Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 707db5443..0bbc8b382 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2373,21 +2373,17 @@ bool GManager::LoadGameplayData(unsigned char *src, unsigned int maxSize) { bMemCpy(&respawnMarker, src, sizeof(respawnMarker)); src += sizeof(respawnMarker); AlignPointer(src, 0x10); - { - Attrib::Gen::gameplay testInstance(respawnMarker, 0, nullptr); + Attrib::Gen::gameplay testInstance(respawnMarker, 0, nullptr); - if (testInstance.IsValid()) { - Get().SetFreeRoamStartMarker(respawnMarker); - } + if (testInstance.IsValid()) { + Get().SetFreeRoamStartMarker(respawnMarker); } bMemCpy(&respawnMarker, src, sizeof(respawnMarker)); - { - Attrib::Gen::gameplay testInstance2(respawnMarker, 0, nullptr); + Attrib::Gen::gameplay testInstance2(respawnMarker, 0, nullptr); - if (testInstance2.IsValid()) { - Get().SetFreeRoamFromSafeHouseStartMarker(respawnMarker); - } + if (testInstance2.IsValid()) { + Get().SetFreeRoamFromSafeHouseStartMarker(respawnMarker); } return true; From eb2c5b95c5b8ee19d336990feb8a341ed6c8a58d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 10:19:29 +0100 Subject: [PATCH 583/691] 87.6%: improve GManager::LoadGameplayData Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 0bbc8b382..a6ff4e7dd 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2313,10 +2313,10 @@ bool GManager::LoadGameplayData(unsigned char *src, unsigned int maxSize) { return false; } - srcStart = src; - gameplayHeader = reinterpret_cast(srcStart); - startChecksum = srcStart + 0x10; + gameplayHeader = reinterpret_cast(src); bytesToChecksum = maxSize - 0x10; + srcStart = reinterpret_cast(gameplayHeader); + startChecksum = srcStart + 0x10; MD5 md5; md5.Reset(); @@ -2333,13 +2333,14 @@ bool GManager::LoadGameplayData(unsigned char *src, unsigned int maxSize) { for (unsigned int onBlock = 0; onBlock < gameplayHeader->mNumPersistent; ++onBlock) { ObjectStateBlockHeader *header = reinterpret_cast(src); unsigned int allocSize = header->mSize; + unsigned int blockBytes = (allocSize + 0x17U) & ~0xFU; unsigned char *newBlock = reinterpret_cast(AllocObjectStateBlock(header->mKey, allocSize, true)); if (newBlock) { bMemCpy(newBlock, header + 1, header->mSize); } - src += (allocSize + 0x17U) & ~0xFU; + src += blockBytes; } src = reinterpret_cast((reinterpret_cast(src) + 0xFU) & ~0xFU); From 005968625e7497af828f9f9621fda884e658a241 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 10:20:59 +0100 Subject: [PATCH 584/691] 87.6%: dwarf improve GManager::LoadGameplayData Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index a6ff4e7dd..130fd959c 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2349,6 +2349,7 @@ bool GManager::LoadGameplayData(unsigned char *src, unsigned int maxSize) { LoadMilestoneInfo(reinterpret_cast(src), gameplayHeader->mNumMilestoneTypes); src += gameplayHeader->mNumMilestoneTypes * 0x10; + AlignPointer(src, 0x10); LoadMilestones(reinterpret_cast(src), gameplayHeader->mNumMilestoneRecords); src += gameplayHeader->mNumMilestoneRecords * 0x14; From 80d31c0e241afa729076d71962b1f80f1e3e9e3c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 10:23:39 +0100 Subject: [PATCH 585/691] 87.6%: dwarf improve GManager::LoadGameplayData Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 130fd959c..64b45482c 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2328,7 +2328,6 @@ bool GManager::LoadGameplayData(unsigned char *src, unsigned int maxSize) { } ResetAllGameplayData(); - src += 0x80; for (unsigned int onBlock = 0; onBlock < gameplayHeader->mNumPersistent; ++onBlock) { ObjectStateBlockHeader *header = reinterpret_cast(src); @@ -2337,7 +2336,8 @@ bool GManager::LoadGameplayData(unsigned char *src, unsigned int maxSize) { unsigned char *newBlock = reinterpret_cast(AllocObjectStateBlock(header->mKey, allocSize, true)); if (newBlock) { - bMemCpy(newBlock, header + 1, header->mSize); + unsigned char *data = reinterpret_cast(header + 1); + bMemCpy(newBlock, data, header->mSize); } src += blockBytes; From 045580d65b74e9e57dcedfa40ebfd4e60a092dd4 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 10:26:44 +0100 Subject: [PATCH 586/691] 87.6%: improve GRaceStatus::UpdateAdaptiveDifficulty Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index e1c04dccf..e1dbb3251 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3584,8 +3584,8 @@ void GRaceStatus::SyncronizeAdaptiveBonus() { void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable *who) { bool update; GRacerInfo *winning_player; - GRacerInfo *winning_ai; GRacerInfo *eliminated_player; + GRacerInfo *winning_ai; float difficulty; if (mCaluclatedAdaptiveGain || GetRaceContext() != GRace::kRaceContext_Career || GetRacerCount() <= 1 || Sim::GetUserMode() != 0 || GetPlayMode() != kPlayMode_Racing || @@ -3597,8 +3597,8 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable const int num_racers = GetRacerCount(); update = false; winning_player = nullptr; - winning_ai = nullptr; eliminated_player = nullptr; + winning_ai = nullptr; for (int i = 0; i < num_racers; ++i) { GRacerInfo &info = GetRacerInfo(i); From 99f96326417a3a008977c361d6f06f4956306515 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 10:40:41 +0100 Subject: [PATCH 587/691] 87.6%: improve GManager::DefragObjectStateStorage Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 64b45482c..3641909f3 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2400,13 +2400,8 @@ void GManager::DefragObjectStateStorage() { unsigned char *freePtr; ObjectStateMap *stateBlocks; - count = mPersistentStateBlocks.size() + mSessionStateBlocks.size(); - if (count == 0) { - mObjectStateBufferFree = mObjectStateBuffer; - return; - } - blocks = stackBlocks; + count = mPersistentStateBlocks.size() + mSessionStateBlocks.size(); if (count > 0x100) { blocks = new ObjectStateBlockHeader *[count]; } From 55b5763200eb16992d78dc0f159fab27a8f11407 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 10:43:16 +0100 Subject: [PATCH 588/691] 87.6%: improve GManager::DefragObjectStateStorage Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 3641909f3..73f7b11e4 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2407,11 +2407,11 @@ void GManager::DefragObjectStateStorage() { } index = 0; - for (it = mPersistentStateBlocks.begin(); it != mPersistentStateBlocks.end(); ++it) { + for (ObjectStateMap::iterator it = mPersistentStateBlocks.begin(); it != mPersistentStateBlocks.end(); ++it) { blocks[index] = it->second; index++; } - for (it = mSessionStateBlocks.begin(); it != mSessionStateBlocks.end(); ++it) { + for (ObjectStateMap::iterator it = mSessionStateBlocks.begin(); it != mSessionStateBlocks.end(); ++it) { blocks[index] = it->second; index++; } From 8e6ff042c0b62dc6fadacf0801ab14e9a7dd6aef Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 10:44:10 +0100 Subject: [PATCH 589/691] 87.6%: improve GManager::DefragObjectStateStorage Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 73f7b11e4..4f5a430d4 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2396,7 +2396,6 @@ void GManager::DefragObjectStateStorage() { unsigned int index; ObjectStateBlockHeader *stackBlocks[0x100]; ObjectStateBlockHeader **blocks; - ObjectStateMap::iterator it; unsigned char *freePtr; ObjectStateMap *stateBlocks; @@ -2407,12 +2406,12 @@ void GManager::DefragObjectStateStorage() { } index = 0; - for (ObjectStateMap::iterator it = mPersistentStateBlocks.begin(); it != mPersistentStateBlocks.end(); ++it) { - blocks[index] = it->second; + for (ObjectStateMap::iterator iter = mPersistentStateBlocks.begin(); iter != mPersistentStateBlocks.end(); ++iter) { + blocks[index] = iter->second; index++; } - for (ObjectStateMap::iterator it = mSessionStateBlocks.begin(); it != mSessionStateBlocks.end(); ++it) { - blocks[index] = it->second; + for (ObjectStateMap::iterator iter = mSessionStateBlocks.begin(); iter != mSessionStateBlocks.end(); ++iter) { + blocks[index] = iter->second; index++; } @@ -2427,6 +2426,7 @@ void GManager::DefragObjectStateStorage() { bOverlappedMemCpy(freePtr, block, blockSize); + ObjectStateMap::iterator it; stateBlocks = &mSessionStateBlocks; for (unsigned int i = 0; i < 2; ++i, --stateBlocks) { it = stateBlocks->find(shiftedKey); From 2a3fa50a37d7b450d554a7cf110daa80bf482e1c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 10:45:13 +0100 Subject: [PATCH 590/691] 87.6%: improve GManager::DefragObjectStateStorage Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 4f5a430d4..74fef750a 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2397,7 +2397,6 @@ void GManager::DefragObjectStateStorage() { ObjectStateBlockHeader *stackBlocks[0x100]; ObjectStateBlockHeader **blocks; unsigned char *freePtr; - ObjectStateMap *stateBlocks; blocks = stackBlocks; count = mPersistentStateBlocks.size() + mSessionStateBlocks.size(); @@ -2423,17 +2422,19 @@ void GManager::DefragObjectStateStorage() { if (reinterpret_cast(block) != freePtr) { unsigned int shiftedKey = block->mKey >> mCollectionKeyShiftTo32; + unsigned int persistent = 0; bOverlappedMemCpy(freePtr, block, blockSize); - ObjectStateMap::iterator it; - stateBlocks = &mSessionStateBlocks; - for (unsigned int i = 0; i < 2; ++i, --stateBlocks) { - it = stateBlocks->find(shiftedKey); - if (it != stateBlocks->end()) { - (*stateBlocks)[shiftedKey] = reinterpret_cast(freePtr); + do { + ObjectStateMap &stateMap = persistent ? mPersistentStateBlocks : mSessionStateBlocks; + + if (stateMap.find(shiftedKey) != stateMap.end()) { + stateMap[shiftedKey] = reinterpret_cast(freePtr); } - } + + persistent++; + } while (persistent <= 1); } freePtr += blockSize; From 54447525f4f5d4a934e3a51d9d65b469aff4835b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 12:05:43 +0100 Subject: [PATCH 591/691] 87.7%: match+ GManager::FindInstance Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 22 +++++++++++----------- src/Speed/Indep/Src/Gameplay/GManager.h | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 74fef750a..0d5128edb 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -921,20 +921,20 @@ void GManager::UnregisterInstance(GRuntimeInstance *instance) { GRuntimeInstance *GManager::FindInstance(Attrib::Key key) const { unsigned int key32; - unsigned int collisions; - unsigned int slot; + unsigned int index; - collisions = 0; - key32 = key >> (mCollectionKeyShiftTo32 & 0x1F); - slot = key32 & mInstanceHashTableMask; - do { - if (mKeyToInstanceMap[slot].mKey32 == key32) { - return mKeyToInstanceMap[slot].mInstance; + key32 = Get32BitCollectionKey(key); + index = key32 & mInstanceHashTableMask; + + for (unsigned int onElem = 0; onElem <= mWorstHashCollision; onElem++) { + HashEntry *entry = mKeyToInstanceMap + index; + + if (entry->mKey32 == key32) { + return entry->mInstance; } - collisions++; - slot = (slot + 1) & mInstanceHashTableMask; - } while (collisions <= mWorstHashCollision); + index = (index + 1) & mInstanceHashTableMask; + } return nullptr; } diff --git a/src/Speed/Indep/Src/Gameplay/GManager.h b/src/Speed/Indep/Src/Gameplay/GManager.h index 35e07f52f..f7d5fb516 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.h +++ b/src/Speed/Indep/Src/Gameplay/GManager.h @@ -239,7 +239,7 @@ class GManager : public UTL::COM::Object, public IVehicleCache { } unsigned int Get32BitCollectionKey(unsigned int collectionKey) const { - return collectionKey << mCollectionKeyShiftTo32; + return collectionKey >> mCollectionKeyShiftTo32; } void SetFreeRoamStartMarker(unsigned int markerKey) { From 0b8e77945ac8bf28603291593d9f4572a100ef75 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 12:07:16 +0100 Subject: [PATCH 592/691] 87.7%: improve GRaceParameters::NotifyParentVaultUnloading Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index e1dbb3251..008a2fbba 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -1140,6 +1140,7 @@ bool GRaceParameters::GetIsLoaded() const { } void GRaceParameters::NotifyParentVaultUnloading() { + delete mRaceRecord; mRaceRecord = nullptr; } From 70b1e077651f5cba4af16005a072ef35b7bc890d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 12:11:29 +0100 Subject: [PATCH 593/691] 87.9%: match GRaceStatus::EnableBarriers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 008a2fbba..299a22c5e 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -26,6 +26,7 @@ #include "Speed/Indep/Src/Misc/Table.hpp" #include "Speed/Indep/Tools/AttribSys/Runtime/AttribSys.h" #include "Speed/Indep/Src/Sim/Simulation.h" +#include "Speed/Indep/Src/World/WCollisionAssets.h" #include "Speed/Indep/Src/World/WRoadNetwork.h" #include "Speed/Indep/Src/World/TrackInfo.hpp" #include "Speed/Indep/Src/World/WorldModel.hpp" @@ -43,6 +44,8 @@ void SetOverRideRainIntensity(float intensity); bool DoesStringExist(unsigned int hash); const char *GetLocalizedString(unsigned int hash); extern int UnlockAllThings; + +void EnableBarrierSceneryGroup(const char *name, bool flipped); extern int SkipFE; extern const char *SkipFEOpponentPresetRide; unsigned int bStringHashUpper(const char *text); @@ -3486,8 +3489,18 @@ void GRaceStatus::SetRaceActivity(GActivity *activity) { } void GRaceStatus::EnableBarriers() { - if (mRaceBin) { - mRaceBin->EnableBarriers(); + if (mRaceParms) { + for (unsigned int onBarrier = 0; onBarrier < mRaceParms->GetBarrierCount(); onBarrier++) { + { + const char *barrierName = mRaceParms->GetBarrierName(onBarrier); + bool flipFlag = mRaceParms->GetBarrierIsFlipped(onBarrier); + + EnableBarrierSceneryGroup(barrierName, flipFlag); + } + } + + WCollisionAssets::Get().SetExclusionFlags(); + WRoadNetwork::Get().ResolveBarriers(); } } From 3a2870b900ec52a8f22fba99b9a60aa5a3215436 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 12:14:11 +0100 Subject: [PATCH 594/691] 88.0%: match+ GRaceStatus::DisableBarriers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 299a22c5e..1b7a19070 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -46,6 +46,7 @@ const char *GetLocalizedString(unsigned int hash); extern int UnlockAllThings; void EnableBarrierSceneryGroup(const char *name, bool flipped); +void RedoTopologyAndSceneryGroups(); extern int SkipFE; extern const char *SkipFEOpponentPresetRide; unsigned int bStringHashUpper(const char *text); @@ -3505,9 +3506,9 @@ void GRaceStatus::EnableBarriers() { } void GRaceStatus::DisableBarriers() { - if (mRaceBin) { - mRaceBin->DisableBarriers(); - } + RedoTopologyAndSceneryGroups(); + WRoadNetwork::Get().ResetBarriers(); + WRoadNetwork::Get().ResetRaceSegments(); } void GRaceStatus::AddAvailableEventToMap(GRuntimeInstance *trigger, GRuntimeInstance *activity) {} From 22a06f6a9e9fcd419d1de213a912e34d3a188776 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 12:18:44 +0100 Subject: [PATCH 595/691] 87.9%: match+ GRaceStatus::EnableBinBarriers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 1b7a19070..139582aa7 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2872,11 +2872,9 @@ void GRaceStatus::Shutdown() { } void GRaceStatus::EnableBinBarriers() { - EnableBarriers(); -} - -void GRaceStatus::DisableBinBarriers() { - DisableBarriers(); + if (mRaceBin) { + mRaceBin->EnableBarriers(); + } } void GRaceStatus::RefreshBinWhileInGame() { From 64f95eba9bc3ccd66478e5bda63f2b18d5eb875a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 12:22:09 +0100 Subject: [PATCH 596/691] 87.9%: match+ GRaceBin::GetBarrierCount Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index 618509071..c5adc7190 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -151,10 +151,7 @@ unsigned int GRaceBin::GetBaselineUnlock(unsigned int index) const { } unsigned int GRaceBin::GetBarrierCount() const { - Attrib::Attribute barriers; - - barriers = mBinRecord.Get(0xE244F26B); - return barriers.GetLength(); + return mBinRecord.Num_Barriers(); } void GRaceBin::EnableBarriers() { From e97f321c95dd8f087ae35131dbed299bafac2298 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 12:24:21 +0100 Subject: [PATCH 597/691] 87.9%: match GRaceBin::GetBarrierIsFlipped Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index c5adc7190..4f124f5d2 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -207,15 +207,13 @@ unsigned int GRaceBin::GetBarrierHash(unsigned int index) const { bool GRaceBin::GetBarrierIsFlipped(unsigned int index) const { const char *barrierName; - const EA::Reflection::Text *barrierText; - barrierText = reinterpret_cast(mBinRecord.GetAttributePointer(0xE244F26B, index)); - if (!barrierText) { - barrierText = reinterpret_cast(Attrib::DefaultDataArea(sizeof(EA::Reflection::Text))); + barrierName = mBinRecord.Barriers(index); + if (barrierName) { + return *barrierName == '*'; } - barrierName = *barrierText; - return barrierName && *barrierName == '*'; + return false; } int GRaceBin::GetRequiredBounty() const { From 9d36d78b3f6723a01bd19a78b6464760517b1b3d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 12:27:02 +0100 Subject: [PATCH 598/691] 87.9%: match GRaceParameters::GetBarrierIsFlipped Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 139582aa7..5d457aee4 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2427,7 +2427,11 @@ bool GRaceParameters::GetBarrierIsFlipped(unsigned int index) const { } barrierName = mRaceRecord->Barriers(index); - return barrierName && *barrierName == '*'; + if (barrierName) { + return *barrierName == '*'; + } + + return false; } float GRaceParameters::GetStartTime() const { From ba35432c228be7e9f38fbaa276b66a6af2d18074 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 12:39:30 +0100 Subject: [PATCH 599/691] 88.1%: improve FindInstances Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp b/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp index a7ad005aa..1b7150788 100644 --- a/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp +++ b/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp @@ -21,7 +21,7 @@ template static unsigned int FindInstances(GVault *vault, AttribKeyList *attribKeyList, unsigned int *outObjCount, unsigned int *outConnCount) { static unsigned int kObjectTemplateKey = 0x7FCB7ABA; int numConnections = 0; - Attrib::Gen::gameplay objectTemplate(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), kObjectTemplateKey), 0, nullptr); + Attrib::Gen::gameplay objectTemplate(kObjectTemplateKey, 0, nullptr); int numObjects = 0; Attrib::Vault *attribVault = vault->GetAttribVault(); unsigned int exportIndex = 0; @@ -33,7 +33,7 @@ static unsigned int FindInstances(GVault *vault, AttribKeyList *attribKeyList, u do { if (attribVault->GetExportType(exportIndex) == collectionType) { unsigned int collectionKey = Attrib::GetCollectionKey(reinterpret_cast(attribVault->GetExportData(exportIndex))); - Attrib::Gen::gameplay instanceObj(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), collectionKey), 0, nullptr); + Attrib::Gen::gameplay instanceObj(collectionKey, 0, nullptr); if (GObjectBlock::CollectionIsInstanceOfTemplate(instanceObj, objectTemplate)) { if (attribKeyList) { From c291e8eee43701361bc4c22ba91403343830d2d0 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 12:42:06 +0100 Subject: [PATCH 600/691] 88.1%: improve FindInstances local order Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp b/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp index 1b7150788..077651d17 100644 --- a/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp +++ b/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp @@ -20,15 +20,13 @@ static unsigned int GetPaddedObjectSize() { template static unsigned int FindInstances(GVault *vault, AttribKeyList *attribKeyList, unsigned int *outObjCount, unsigned int *outConnCount) { static unsigned int kObjectTemplateKey = 0x7FCB7ABA; - int numConnections = 0; Attrib::Gen::gameplay objectTemplate(kObjectTemplateKey, 0, nullptr); - int numObjects = 0; Attrib::Vault *attribVault = vault->GetAttribVault(); - unsigned int exportIndex = 0; - unsigned int exportCount; int collectionType = Attrib::StringToTypeID("Attrib::CollectionLoadData"); - - exportCount = attribVault->CountExports(); + unsigned int exportCount = attribVault->CountExports(); + int numObjects = 0; + int numConnections = 0; + unsigned int exportIndex = 0; if (exportCount != 0) { do { if (attribVault->GetExportType(exportIndex) == collectionType) { From 2f8ab22018a2d6ca7adf4fb705f2c1688c1b380c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 12:48:14 +0100 Subject: [PATCH 601/691] 88.1%: match+ GManager release cleanups Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 0d5128edb..5e09e38e6 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -834,8 +834,8 @@ void GManager::ReleaseInstanceMap() { mKeyToInstanceMap = nullptr; } - mInstanceHashTableMask = 0; mInstanceHashTableSize = 0; + mInstanceHashTableMask = 0; } void GManager::ReleaseStreamingBuffers() { @@ -1180,8 +1180,8 @@ void GManager::ReleaseMilestones() { delete[] mMilestones; } - mNumMilestones = 0; mMilestones = nullptr; + mNumMilestones = 0; } void GManager::AllocateMilestones() { @@ -1357,8 +1357,8 @@ void GManager::ReleaseSpeedTraps() { delete[] mSpeedTraps; } - mNumSpeedTraps = 0; mSpeedTraps = nullptr; + mNumSpeedTraps = 0; } void GManager::AllocateIcons() { @@ -1372,9 +1372,9 @@ void GManager::ReleaseIcons() { delete[] mIcons; } - mIcons = nullptr; mNumIcons = 0; mNumVisibleIcons = 0; + mIcons = nullptr; } void GManager::AllocateSpeedTraps() { From e0ae205753c73b24bfafa419bc2e679944d11220 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 12:50:11 +0100 Subject: [PATCH 602/691] 88.1%: match+ GManager::ReleaseObjectStateStorage Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 5e09e38e6..440f8e7a5 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -823,7 +823,6 @@ void GManager::ReleaseObjectStateStorage() { bFree(mObjectStateBuffer); } - mObjectStateBuffer = nullptr; mObjectStateBufferFree = nullptr; mObjectStateBufferSize = 0; } From b32dcc0cd94df5afd9f5233499689e7951489d80 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 12:52:10 +0100 Subject: [PATCH 603/691] 88.1%: match+ GManager::ResetAllGameplayData Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 440f8e7a5..8f868510a 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2760,10 +2760,10 @@ void GManager::ResetAllGameplayData() { ResetSpeedTraps(); bMemSet(mHidingSpotFound, 0, sizeof(mHidingSpotFound)); ResetTimers(); - mStartFreeRoamFromSafeHouse = false; mFreeRoamStartMarker = 0; mOverrideFreeRoamStartMarker = 0; mFreeRoamFromSafeHouseStartMarker = 0; + mStartFreeRoamFromSafeHouse = false; mPendingSMS.clear(); } From c70fc3d967fc496f52d4066f6d57d595399b17a1 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 12:53:58 +0100 Subject: [PATCH 604/691] 88.1%: match+ GManager::UnloadTransientVaults Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 8f868510a..14c3268ad 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -344,15 +344,17 @@ void GManager::InitializeRaceStreaming() { void GManager::UnloadTransientVaults() { for (unsigned int i = 0; i < mVaultCount; ++i) { - if (mVaults[i].IsTransient()) { - mVaults[i].Unload(); + GVault &vault = mVaults[i]; + + if (vault.IsTransient()) { + vault.Unload(); } } bCloseMemoryPool(mTransientPoolNumber); bFree(mTransientPoolMemory); - mTransientPoolNumber = 0; mTransientPoolMemory = nullptr; + mTransientPoolNumber = 0; } void GManager::PreBeginGameplay() { From b00ee41f55c9df2d4cf16cd921ee7a8d8f52bc08 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 13:07:27 +0100 Subject: [PATCH 605/691] 88.1%: improve GRaceCustom::CreateRaceActivity Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 5d457aee4..ba45d5e44 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2562,9 +2562,7 @@ void GRaceCustom::CreateRaceActivity() { unsigned int currOpponents = 0; if (!bossINQuickRace) { - Attrib::Attribute attribute(mRaceRecord->Get(0x5839FA1A)); - - currOpponents = attribute.GetLength(); + currOpponents = mRaceRecord->Num_Opponents(); if (currOpponents != 0) { for (unsigned int onOpp = 0; onOpp < currOpponents; onOpp++) { opponentKey[onOpp] = mRaceRecord->Opponents(onOpp).GetCollectionKey(); @@ -4305,7 +4303,7 @@ void GRaceStatus::DetermineRaceLength() { WRoadNetwork &rn = WRoadNetwork::Get(); GRaceParameters *race_parameters = GetRaceParameters(); - + rn.ResolveShortcuts(); if (!race_parameters || !race_parameters->HasFinishLine()) { @@ -4370,7 +4368,8 @@ void GRaceStatus::DetermineRaceLength() { nav.SetDecisionFilter(true); nav.SetNavType(WRoadNav::kTypeDirection); nav.SetPathType(WRoadNav::kPathChopper); - nav.InitAtPoint(UMath::Vector4To3(positions[numPathPoints - 1]), UMath::Vector4To3(directions[numPathPoints - 1]), forceCentreLane, directionWeight); + nav.InitAtPoint(UMath::Vector4To3(positions[numPathPoints - 1]), UMath::Vector4To3(directions[numPathPoints - 1]), forceCentreLane, + directionWeight); if (nav.IsValid()) { for (int i = 0; i < 100; ++i) { int segmentNumber; From 0a29d959775957acbf41de89c18320f9ed2db114 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 13:28:30 +0100 Subject: [PATCH 606/691] 88.2%: match GManager::ConnectChildren Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 14c3268ad..c8469cedf 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1077,7 +1077,7 @@ void GManager::ConnectChildren(GRuntimeInstance *runtimeInstance) { GRuntimeInstance *child = FindInstance(runtimeInstance->Children(i).GetCollectionKey()); if (child) { - runtimeInstance->ConnectToInstance(GetStrippedNameKey(child->CollectionName()), 0, child); + runtimeInstance->ConnectToInstance(GetStrippedNameKey(*reinterpret_cast(child->GetLayoutPointer())), 0, child); } } } From 18b4f6de88d784224587e0341bfac3d81a05f415 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 13:29:41 +0100 Subject: [PATCH 607/691] 88.2%: match+ GManager::PreBeginGameplay Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index c8469cedf..0a7a7b6a5 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -359,10 +359,11 @@ void GManager::UnloadTransientVaults() { void GManager::PreBeginGameplay() { if (mRestartEventHash) { - GRaceCustom *customRace = GRaceDatabase::Get().AllocCustomRace(GRaceDatabase::Get().GetRaceFromHash(mRestartEventHash)); + GRaceParameters *parms = GRaceDatabase::Get().GetRaceFromHash(mRestartEventHash); + GRaceCustom *race = GRaceDatabase::Get().AllocCustomRace(parms); - GRaceDatabase::Get().SetStartupRace(customRace, GRace::kRaceContext_Career); - GRaceDatabase::Get().FreeCustomRace(customRace); + GRaceDatabase::Get().SetStartupRace(race, GRace::kRaceContext_Career); + GRaceDatabase::Get().FreeCustomRace(race); mRestartEventHash = 0; } } From c66ab1f048cc261d0e605efe867dd3b6fde83ab2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 12:55:08 +0100 Subject: [PATCH 608/691] dwarf TU scan tool Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> 90.6%: improve decomp-workflow::dwarf-scan signature filter Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- tools/decomp-workflow.py | 411 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 411 insertions(+) diff --git a/tools/decomp-workflow.py b/tools/decomp-workflow.py index a00215d82..78e7fee04 100644 --- a/tools/decomp-workflow.py +++ b/tools/decomp-workflow.py @@ -16,12 +16,15 @@ python tools/decomp-workflow.py function -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll --no-source python tools/decomp-workflow.py diff -u main/Speed/Indep/SourceLists/zCamera -d UpdateAll --reloc-diffs all python tools/decomp-workflow.py dwarf -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll + python tools/decomp-workflow.py dwarf-scan -u main/Speed/Indep/SourceLists/zCamera + python tools/decomp-workflow.py dwarf-scan -u main/Speed/Indep/SourceLists/zCamera --objdiff-status match python tools/decomp-workflow.py dwarf -u main/Speed/Indep/SourceLists/zAttribSys -f 'Attrib::Class::RemoveCollection(Attrib::Collection *)' --full-diff python tools/decomp-workflow.py verify -u main/Speed/Indep/SourceLists/zCamera -f UpdateAll python tools/decomp-workflow.py unit -u main/Speed/Indep/SourceLists/zCamera """ import argparse +import difflib import json import re import os @@ -45,6 +48,8 @@ make_abs, run_objdiff_json, ) +from lookup import _candidate_func_names, _sig_contains_name, read_text, split_functions +from split_dwarf_info import apply_umath_fixups SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) @@ -65,10 +70,12 @@ DEBUG_SYMBOL_PROBE_DEMANGLED = "Camera::UpdateAll(float)" DEBUG_SYMBOL_PROBE_GC_ADDR = "0x80065A84" REBUILT_DEBUG_LINE_RE = re.compile(r"^\s*([0-9A-Fa-f]+)\s*:") +DWARF_HEX_RE = re.compile(r"0x[0-9A-Fa-f]+") LOW_MATCH_PRIORITY_THRESHOLD = 60.0 VERY_LOW_MATCH_PRIORITY_THRESHOLD = 40.0 HIGH_MATCH_CLEANUP_THRESHOLD = 85.0 VERY_HIGH_MATCH_CLEANUP_THRESHOLD = 95.0 +FunctionBlock = Tuple[str, str, str, str] SHARED_ASSET_REQUIREMENTS = [ (os.path.join("build", "tools"), "downloaded tooling"), @@ -340,6 +347,355 @@ def load_dwarf_report( raise WorkflowError(f"dwarf-compare.py returned invalid JSON: {e}") +def load_dwarf_blocks( + path: str, folder_mode: bool, apply_split_fixups_in_ram: bool = False +) -> List[FunctionBlock]: + if folder_mode: + text = read_text(os.path.join(path, "functions.nothpp")) + else: + text = read_text(path) + if apply_split_fixups_in_ram: + text = apply_umath_fixups(text) + return split_functions(text) + + +def find_dwarf_function_blocks( + funcs: Sequence[FunctionBlock], query: str +) -> List[FunctionBlock]: + candidates = _candidate_func_names(query) + exact_matches: List[FunctionBlock] = [] + fuzzy_matches: List[FunctionBlock] = [] + + for func in funcs: + sig_line = func[2] + if sig_line == query: + exact_matches.append(func) + elif any(_sig_contains_name(sig_line, candidate) for candidate in candidates): + fuzzy_matches.append(func) + + if exact_matches: + return exact_matches + return fuzzy_matches + + +def choose_dwarf_function_block( + funcs: Sequence[FunctionBlock], query: str, label: str +) -> FunctionBlock: + matches = find_dwarf_function_blocks(funcs, query) + if not matches: + raise WorkflowError(f"{label}: function '{query}' not found.") + if len(matches) > 1: + preview = "\n".join(f" - {match[2]}" for match in matches[:8]) + extra = "" + if len(matches) > 8: + extra = f"\n ... {len(matches) - 8} more" + raise WorkflowError( + f"{label}: function query '{query}' matched multiple DWARF blocks.\n" + f"Use a more specific function name.\n{preview}{extra}" + ) + return matches[0] + + +def normalize_dwarf_line(line: str) -> str: + stripped = line.rstrip("\n").rstrip() + if stripped.startswith("// Range:"): + return "// Range: " + return DWARF_HEX_RE.sub("0xADDR", stripped) + + +def normalize_dwarf_block(block: str) -> List[str]: + return [normalize_dwarf_line(line) for line in block.splitlines()] + + +def count_dwarf_opcodes( + opcodes: Sequence[Tuple[str, int, int, int, int]] +) -> Dict[str, int]: + matching = 0 + original_only = 0 + rebuilt_only = 0 + changed_groups = 0 + for tag, i1, i2, j1, j2 in opcodes: + if tag == "equal": + matching += i2 - i1 + continue + changed_groups += 1 + if tag in ("replace", "delete"): + original_only += i2 - i1 + if tag in ("replace", "insert"): + rebuilt_only += j2 - j1 + return { + "matching_lines": matching, + "original_only_lines": original_only, + "rebuilt_only_lines": rebuilt_only, + "changed_groups": changed_groups, + } + + +def build_dwarf_scan_row( + row: Dict[str, Any], + original_funcs: Sequence[FunctionBlock], + rebuilt_funcs: Sequence[FunctionBlock], +) -> Dict[str, Any]: + function_name = str(row["name"]) + result: Dict[str, Any] = { + "function": function_name, + "symbol_name": row["symbol_name"], + "objdiff_status": row["status"], + "objdiff_match_percent": row["match_percent"], + "unmatched_bytes_est": row["unmatched_bytes_est"], + "size": row["size"], + } + + try: + original_block = choose_dwarf_function_block( + original_funcs, function_name, "original DWARF" + ) + rebuilt_block = choose_dwarf_function_block( + rebuilt_funcs, function_name, "rebuilt DWARF" + ) + original_lines = normalize_dwarf_block(original_block[3]) + rebuilt_lines = normalize_dwarf_block(rebuilt_block[3]) + matcher = difflib.SequenceMatcher(a=original_lines, b=rebuilt_lines) + counts = count_dwarf_opcodes(matcher.get_opcodes()) + total_lines = max(len(original_lines), len(rebuilt_lines), 1) + result.update( + { + "dwarf_status": "exact" + if original_lines == rebuilt_lines + else "mismatch", + "dwarf_match_percent": 100.0 * counts["matching_lines"] / total_lines, + "changed_groups": counts["changed_groups"], + "matching_lines": counts["matching_lines"], + "total_lines": total_lines, + "original_line_count": len(original_lines), + "rebuilt_line_count": len(rebuilt_lines), + "signature_match": normalize_dwarf_line(original_block[2]) + == normalize_dwarf_line(rebuilt_block[2]), + } + ) + except WorkflowError as e: + result.update( + { + "dwarf_status": "error", + "dwarf_match_percent": None, + "changed_groups": None, + "matching_lines": None, + "total_lines": None, + "original_line_count": None, + "rebuilt_line_count": None, + "signature_match": None, + "error": str(e), + } + ) + return result + + +def filter_dwarf_scan_rows( + rows: Sequence[Dict[str, Any]], dwarf_status: str +) -> List[Dict[str, Any]]: + if dwarf_status == "all": + return list(rows) + if dwarf_status == "problem": + return [row for row in rows if row["dwarf_status"] in ("mismatch", "error")] + return [row for row in rows if row["dwarf_status"] == dwarf_status] + + +def filter_dwarf_signature_rows( + rows: Sequence[Dict[str, Any]], signature_status: str +) -> List[Dict[str, Any]]: + if signature_status == "all": + return list(rows) + want_match = signature_status == "match" + return [ + row + for row in rows + if row.get("signature_match") is not None + and bool(row["signature_match"]) == want_match + ] + + +def sort_dwarf_scan_rows(rows: List[Dict[str, Any]]) -> None: + status_rank = {"error": 0, "mismatch": 1, "exact": 2} + rows.sort( + key=lambda row: ( + status_rank.get(str(row["dwarf_status"]), 3), + row["dwarf_match_percent"] + if row["dwarf_match_percent"] is not None + else -1.0, + 0 + if row.get("signature_match") is True + else 1 + if row.get("signature_match") is False + else 2, + -(row["changed_groups"] or 0), + -(row["unmatched_bytes_est"] or 0), + row["objdiff_match_percent"] + if row["objdiff_match_percent"] is not None + else -1.0, + row["function"].lower(), + ) + ) + + +def command_dwarf_scan(args: argparse.Namespace) -> None: + ensure_decomp_prereqs() + if not args.json: + print_section(f"DWARF Scan: {args.unit}") + ensure_shared_unit_output(args.unit) + + rebuilt_dwarf_path = ( + os.path.abspath(args.rebuilt_dwarf_file) if args.rebuilt_dwarf_file else None + ) + cleanup_rebuilt_dwarf = False + try: + if not rebuilt_dwarf_path: + rebuilt_dwarf_path = dtk_dwarf_dump(get_unit_build_output(args.unit)) + cleanup_rebuilt_dwarf = True + + data = run_objdiff_json( + OBJDIFF_CLI, + args.unit, + reloc_diffs=args.reloc_diffs, + root_dir=ROOT_DIR, + ) + rows = [ + row + for row in build_objdiff_symbol_rows(data) + if row["type"] == "function" and row["side"] == "left" + ] + if args.objdiff_status != "all": + rows = [row for row in rows if row["status"] == args.objdiff_status] + if args.search: + rows = [ + row + for row in rows + if fuzzy_match(args.search, row["name"]) + or fuzzy_match(args.search, row["symbol_name"]) + ] + if not rows: + raise WorkflowError("No functions match the given filters.") + + original_funcs = load_dwarf_blocks(GC_DWARF, folder_mode=True) + rebuilt_funcs = load_dwarf_blocks( + rebuilt_dwarf_path, folder_mode=False, apply_split_fixups_in_ram=True + ) + scan_rows = [ + build_dwarf_scan_row(row, original_funcs, rebuilt_funcs) for row in rows + ] + + summary = { + "scanned_functions": len(scan_rows), + "exact_functions": sum( + 1 for row in scan_rows if row["dwarf_status"] == "exact" + ), + "mismatch_functions": sum( + 1 for row in scan_rows if row["dwarf_status"] == "mismatch" + ), + "error_functions": sum( + 1 for row in scan_rows if row["dwarf_status"] == "error" + ), + "byte_matched_dwarf_problems": sum( + 1 + for row in scan_rows + if row["objdiff_status"] == "match" + and row["dwarf_status"] in ("mismatch", "error") + ), + "signature_mismatch_functions": sum( + 1 for row in scan_rows if row.get("signature_match") is False + ), + } + + filtered_rows = filter_dwarf_scan_rows(scan_rows, args.dwarf_status) + filtered_rows = filter_dwarf_signature_rows( + filtered_rows, args.signature_status + ) + sort_dwarf_scan_rows(filtered_rows) + if args.limit is not None: + filtered_rows = filtered_rows[: args.limit] + + if args.json: + print( + json.dumps( + { + "unit": args.unit, + "summary": summary, + "rows": filtered_rows, + }, + indent=2, + ) + ) + return + + print( + f"Scanned {summary['scanned_functions']} function(s): " + f"{summary['exact_functions']} exact, " + f"{summary['mismatch_functions']} mismatched, " + f"{summary['error_functions']} errors." + ) + print( + "Byte-matched but DWARF-problem functions: " + f"{summary['byte_matched_dwarf_problems']}" + ) + print( + "Signature-mismatch functions: " + f"{summary['signature_mismatch_functions']}" + ) + + if not filtered_rows: + print("No functions match the given filters.") + return + + print() + print( + f"{'DSTAT':<8} {'DWARF':>7} {'SIG':>3} {'CHG':>4} {'OBJ':>7} {'OSTAT':<10} {'UNM':>6} FUNCTION" + ) + print("-" * 120) + for row in filtered_rows: + dwarf_percent = ( + f"{row['dwarf_match_percent']:.1f}%" + if row["dwarf_match_percent"] is not None + else "ERR" + ) + objdiff_percent = ( + f"{row['objdiff_match_percent']:.1f}%" + if row["objdiff_match_percent"] is not None + else "-" + ) + changed_groups = ( + str(row["changed_groups"]) if row["changed_groups"] is not None else "-" + ) + signature_state = ( + "yes" + if row.get("signature_match") is True + else "no" + if row.get("signature_match") is False + else "-" + ) + print( + f"{row['dwarf_status']:<8} {dwarf_percent:>7} {signature_state:>3} {changed_groups:>4} " + f"{objdiff_percent:>7} {row['objdiff_status']:<10} " + f"{row['unmatched_bytes_est']:>5}B {row['function']}" + ) + if args.show_errors and row.get("error"): + first_line = str(row["error"]).splitlines()[0] + print(f" error: {first_line}") + + print() + print( + "Tip: focus matched-byte functions first with " + "`python tools/decomp-workflow.py dwarf-scan " + f"-u {shlex.quote(args.unit)} --objdiff-status match`" + ) + if summary["signature_mismatch_functions"]: + print( + "Tip: add `--signature-status match` to focus body/local DWARF mismatches " + "instead of signature-only trouble." + ) + finally: + if cleanup_rebuilt_dwarf: + maybe_remove(rebuilt_dwarf_path) + + def lookup_symbol_address(symbols_file: str, mangled_name: str) -> Optional[str]: if not os.path.exists(symbols_file): return None @@ -1212,6 +1568,61 @@ def build_parser() -> argparse.ArgumentParser: ) dwarf.set_defaults(func=command_dwarf) + dwarf_scan = subparsers.add_parser( + "dwarf-scan", + help="Scan one translation unit and rank per-function DWARF problem areas", + ) + dwarf_scan.add_argument("-u", "--unit", required=True, help="Translation unit name") + dwarf_scan.add_argument( + "--search", + help="Only include functions whose name or symbol contains this text", + ) + dwarf_scan.add_argument( + "--objdiff-status", + choices=["all", "match", "nonmatching", "missing"], + default="all", + help="Filter functions by objdiff status before scanning (default: all)", + ) + dwarf_scan.add_argument( + "--dwarf-status", + choices=["all", "problem", "exact", "mismatch", "error"], + default="problem", + help="Filter scan results by DWARF outcome after scanning (default: problem)", + ) + dwarf_scan.add_argument( + "--signature-status", + choices=["all", "match", "mismatch"], + default="all", + help="Filter scan results by whether the DWARF signature already matches (default: all)", + ) + dwarf_scan.add_argument( + "--limit", + type=int, + default=20, + help="Maximum rows to print after sorting (default: 20)", + ) + dwarf_scan.add_argument( + "--json", + action="store_true", + help="Print the scan summary and rows as JSON", + ) + dwarf_scan.add_argument( + "--show-errors", + action="store_true", + help="Print one-line error details under rows that could not be compared", + ) + dwarf_scan.add_argument( + "--reloc-diffs", + choices=RELOC_DIFF_CHOICES, + default="none", + help="Pass through objdiff relocation diff mode when loading unit symbols", + ) + dwarf_scan.add_argument( + "--rebuilt-dwarf-file", + help="Use an existing rebuilt DWARF dump instead of dumping the unit object", + ) + dwarf_scan.set_defaults(func=command_dwarf_scan) + verify = subparsers.add_parser( "verify", help="Fail unless one function matches in both objdiff and DWARF", From cf579e8b093696fc639f6feadc34f6217c9fb54d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 13:32:42 +0100 Subject: [PATCH 609/691] 88.2%: match+ GManager::FindVault Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 0a7a7b6a5..cbabc77a3 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -226,15 +226,17 @@ GVault *GManager::FindVault(const char *vaultName) { int upper = mVaultCount - 1; while (lower <= upper) { - int middle = (lower + upper) / 2; - int cmp = bStrCmp(vaultName, mVaults[middle].GetName()); + int middle = (lower + upper) >> 1; + int compare = bStrCmp(vaultName, mVaults[middle].GetName()); - if (cmp < 0) { - upper = middle - 1; - } else if (cmp > 0) { + if (compare > 0) { lower = middle + 1; } else { - return &mVaults[middle]; + if (compare < 0) { + upper = middle - 1; + } else { + return &mVaults[middle]; + } } } From 6ec341ccb95d0ca683f85fc7cca6dd1b83fa69b5 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 13:37:46 +0100 Subject: [PATCH 610/691] 88.2%: match GRaceStatus::SetRacing Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index ba45d5e44..85da708c8 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2913,7 +2913,7 @@ void GRaceStatus::SetRacing() { player = IPlayer::First(PLAYER_ALL); while (player) { if (player->InGameBreaker()) { - player->ResetGameBreaker(true); + player->ToggleGameBreaker(); } { @@ -2945,11 +2945,17 @@ void GRaceStatus::SetRacing() { } } - if ((!mRaceParms || !mRaceParms->GetIsDDayRace() || bStrCmp(mRaceParms->GetEventID(), "16.1.0") == 0) && - !FEDatabase->IsFinalEpicChase()) { + if (!mRaceParms || !mRaceParms->GetIsDDayRace() || bStrCmp(mRaceParms->GetEventID(), "16.1.0") == 0) { + if (!FEDatabase->IsFinalEpicChase()) { + goto skipAutoSave; + } + } + + { new EAutoSave(); } +skipAutoSave: new EReloadHud(); #ifndef EA_BUILD_A124 From ecb459d7497b3a8b1fe8474bde92ecfc2972d64a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 13:56:00 +0100 Subject: [PATCH 611/691] 88.2%: improve GRaceStatus::OnQueryVehicleCache Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 10 +++++----- src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 85da708c8..e1277854c 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2819,16 +2819,16 @@ bool GRaceStatus::CanUnspawnRoamer(const IVehicle *roamer) const { } eVehicleCacheResult GRaceStatus::OnQueryVehicleCache(const IVehicle *removethis, const IVehicleCache *whosasking) const { - if (mPlayMode != kPlayMode_Racing && !mVehicleCacheLocked) { - if (!UTL::COM::ComparePtr(whosasking, ICopMgr::Get())) { - if (!UTL::COM::ComparePtr(whosasking, ITrafficMgr::Get())) { - return VCR_DONTCARE; - } + if (GetPlayMode() != kPlayMode_Racing && !mVehicleCacheLocked) { + if (!UTL::COM::ComparePtr(whosasking, ICopMgr::Get()) && !UTL::COM::ComparePtr(whosasking, ITrafficMgr::Get())) { + return VCR_DONTCARE; } if (!CanUnspawnRoamer(removethis)) { return VCR_WANT; } + + return VCR_DONTCARE; } else { for (int onRacer = 0; onRacer < GetRacerCount(); ++onRacer) { const GRacerInfo &racerInfo = mRacerInfo[onRacer]; diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index e817b8809..b916fc956 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -685,7 +685,7 @@ class GRaceStatus : public UTL::COM::Object, public IVehicleCache { return Exists() && Get().GetRaceType() == GRace::kRaceType_Challenge; } - PlayMode GetPlayMode() { + PlayMode GetPlayMode() const { return mPlayMode; } From 97a709172f19a0f23bd4295ee935a2fc96afa584 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 13:56:53 +0100 Subject: [PATCH 612/691] 88.2%: match+ GRaceStatus::Shutdown Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index e1277854c..db85128b6 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2869,8 +2869,9 @@ void GRaceStatus::SetTaskTime(float time) { void GRaceStatus::Shutdown() { if (fObj) { delete fObj; - fObj = nullptr; } + + fObj = nullptr; } void GRaceStatus::EnableBinBarriers() { From 63f66a93d35c4a57bc8deaa4d70ef22bec23e8b4 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 14:30:52 +0100 Subject: [PATCH 613/691] 88.2%: match+ GRaceStatus::RaceAbandoned Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index db85128b6..32736f4ad 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -4107,10 +4107,10 @@ void GRaceStatus::RaceAbandoned() { GRaceDatabase::Get().ResetCareerCompleteFlag(raceHash); } + + GManager::Get().RefreshEngageTriggerIcons(); } } - - GManager::Get().RefreshEngageTriggerIcons(); } void GRaceStatus::EndStopAll() { From cfa7f811009e5df200f44f70a581f3e93e46998b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 14:34:31 +0100 Subject: [PATCH 614/691] 88.2%: match+ GRaceStatus::OnQueryVehicleCache Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 32736f4ad..4d8f44bab 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2820,12 +2820,12 @@ bool GRaceStatus::CanUnspawnRoamer(const IVehicle *roamer) const { eVehicleCacheResult GRaceStatus::OnQueryVehicleCache(const IVehicle *removethis, const IVehicleCache *whosasking) const { if (GetPlayMode() != kPlayMode_Racing && !mVehicleCacheLocked) { - if (!UTL::COM::ComparePtr(whosasking, ICopMgr::Get()) && !UTL::COM::ComparePtr(whosasking, ITrafficMgr::Get())) { - return VCR_DONTCARE; - } + if (UTL::COM::ComparePtr(whosasking, ICopMgr::Get()) || UTL::COM::ComparePtr(whosasking, ITrafficMgr::Get())) { + if (!CanUnspawnRoamer(removethis)) { + return VCR_WANT; + } - if (!CanUnspawnRoamer(removethis)) { - return VCR_WANT; + return VCR_DONTCARE; } return VCR_DONTCARE; From f5337285c5571cab7e2fff4254357a5f76ccaa2d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 14:38:37 +0100 Subject: [PATCH 615/691] 88.2%: match+ GEventTimer::SetName Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GTimer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTimer.cpp b/src/Speed/Indep/Src/Gameplay/GTimer.cpp index 3774a3168..f168dc408 100644 --- a/src/Speed/Indep/Src/Gameplay/GTimer.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTimer.cpp @@ -68,7 +68,7 @@ void GEventTimer::SetInterval(float value) { } void GEventTimer::SetName(const char *name) { - bSafeStrCpy(mName, name, sizeof(mName)); + bSafeStrCpy(mName, name, sizeof(mName) - 1); mNameHash = bStringHash(mName); } @@ -86,7 +86,7 @@ void GEventTimer::Serialize(SavedTimerInfo *saveInfo) { saveInfo->mElapsed = mElapsed; saveInfo->mInterval = mInterval; saveInfo->mRunning = mRunning; - bSafeStrCpy(saveInfo->mName, mName, sizeof(saveInfo->mName)); + bSafeStrCpy(saveInfo->mName, mName, sizeof(saveInfo->mName) - 1); } void GEventTimer::Deserialize(SavedTimerInfo *saveInfo) { From 55faa9a83d8da4ebb727ab01e7938ee0e1425bc4 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 14:39:49 +0100 Subject: [PATCH 616/691] 88.2%: match+ GEventTimer::Update Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GTimer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTimer.cpp b/src/Speed/Indep/Src/Gameplay/GTimer.cpp index f168dc408..434c30321 100644 --- a/src/Speed/Indep/Src/Gameplay/GTimer.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTimer.cpp @@ -75,7 +75,7 @@ void GEventTimer::SetName(const char *name) { void GEventTimer::Update(float dT) { if (mRunning != 0) { mElapsed += dT; - if (mInterval <= mElapsed) { + if (mElapsed >= mInterval) { MNotifyTimer(mName).Post(UCrc32(0x20D60DBF)); mElapsed -= mInterval; } From fdd247ef1a7873a00760c1b11aef632a4d1c7f3e Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 14:46:08 +0100 Subject: [PATCH 617/691] 88.2%: match+ GEventTimer::Deserialize Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GTimer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTimer.cpp b/src/Speed/Indep/Src/Gameplay/GTimer.cpp index 434c30321..4951904cc 100644 --- a/src/Speed/Indep/Src/Gameplay/GTimer.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTimer.cpp @@ -93,6 +93,6 @@ void GEventTimer::Deserialize(SavedTimerInfo *saveInfo) { mElapsed = saveInfo->mElapsed; mInterval = saveInfo->mInterval; mRunning = saveInfo->mRunning; - bSafeStrCpy(mName, saveInfo->mName, sizeof(mName)); + bSafeStrCpy(mName, saveInfo->mName, sizeof(mName) - 1); mNameHash = bStringHash(mName); } From 72e570cc0c299d9b7473a2b60f9f2e0725eedfaa Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 14:48:06 +0100 Subject: [PATCH 618/691] 88.2%: match+ GObjectBlock::~GObjectBlock Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp b/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp index 077651d17..4e3341b90 100644 --- a/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp +++ b/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp @@ -169,8 +169,8 @@ GObjectBlock::~GObjectBlock() { DeleteObjects(); DeleteObjects(); - mObjectBuffer = nullptr; mVault = nullptr; + mObjectBuffer = nullptr; if (WTriggerManager::Exists()) { WTriggerManager::Get().ClearAllFireOnExit(); From e824f617b8ac4fe6f92143e6df0a47d037c63e2e Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 14:51:27 +0100 Subject: [PATCH 619/691] 88.2%: match+ GRaceStatus::ClearRacers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 4d8f44bab..2a621c372 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3370,7 +3370,7 @@ void GRaceStatus::ClearRacers() { ISimable *simable = vehicle->GetSimable(); if (simable) { - if (!simable->GetPlayer()) { + if (!simable->IsPlayer()) { simable->Kill(); } } From 96a30e7046bb6b7c9f06f88125c1aac4c072f4b1 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 14:56:18 +0100 Subject: [PATCH 620/691] 88.2%: match+ GRacerInfo::AddToPointTotal Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 2a621c372..28d458efb 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -469,7 +469,8 @@ void GRacerInfo::BlowEngine() { } void GRacerInfo::AddToPointTotal(float points) { - mPointTotal = UMath::Max(mPointTotal + points, 0.0f); + mPointTotal += points; + mPointTotal = UMath::Max(0.0f, mPointTotal); } float GRacerInfo::CalcAverageSpeed() const { From 2d140269fa673ca803c0ff8ebe3a69d678865233 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 15:01:47 +0100 Subject: [PATCH 621/691] 88.2%: match+ GRaceStatus::GetAdaptiveDifficutly Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 28d458efb..813eb9d23 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3595,7 +3595,11 @@ void GRaceStatus::SetNextCheckpointPos(GRuntimeInstance *trigger) { } float GRaceStatus::GetAdaptiveDifficutly() const { - return fCatchUpAdaptiveBonus; + if (GetRaceContext() == GRace::kRaceContext_Career) { + return fCatchUpAdaptiveBonus; + } + + return 0.0f; } void GRaceStatus::SyncronizeAdaptiveBonus() { From 3437cb94f2e3795105a5a4d2bdf90de9052f4655 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 15:07:40 +0100 Subject: [PATCH 622/691] 88.3%: improve GRaceStatus::GetBestSpeedTrapSpeed Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 27 +++++++++++--------- src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 4 +++ 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 813eb9d23..ed67f0b1d 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -4068,28 +4068,31 @@ int GRaceStatus::GetRaceSpeedTrapPosition(int trapIndex, int racerIndex) { } float GRaceStatus::GetBestSpeedTrapSpeed(int racerIndex) { - float best = 0.0f; + float bestSpeedtrapSpeed = GetRaceSpeedTrapSpeed(0, racerIndex); - for (int i = 0; i < 16; ++i) { - best = UMath::Max(best, GetRaceSpeedTrapSpeed(i, racerIndex)); + for (int onSpeedtrap = 1; onSpeedtrap < GetNumRaceSpeedTraps(); ++onSpeedtrap) { + float speedtrapSpeed = GetRaceSpeedTrapSpeed(onSpeedtrap, racerIndex); + + if (speedtrapSpeed > 0.0f && speedtrapSpeed > bestSpeedtrapSpeed) { + bestSpeedtrapSpeed = speedtrapSpeed; + } } - return best; + return bestSpeedtrapSpeed; } float GRaceStatus::GetWorstSpeedTrapSpeed(int racerIndex) { - float worst = 0.0f; - bool found = false; + float worstSpeedtrapSpeed = GetRaceSpeedTrapSpeed(0, racerIndex); - for (int i = 0; i < 16; ++i) { - float speed = GetRaceSpeedTrapSpeed(i, racerIndex); - if (speed > 0.0f && (!found || speed < worst)) { - worst = speed; - found = true; + for (int onSpeedtrap = 1; onSpeedtrap < GetNumRaceSpeedTraps(); ++onSpeedtrap) { + float speedtrapSpeed = GetRaceSpeedTrapSpeed(onSpeedtrap, racerIndex); + + if (speedtrapSpeed > 0.0f && speedtrapSpeed < worstSpeedtrapSpeed) { + worstSpeedtrapSpeed = speedtrapSpeed; } } - return worst; + return worstSpeedtrapSpeed; } float GRaceStatus::GetRaceTollboothTime(int boothIndex, int racerIndex) { diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index b916fc956..c4d2f6329 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -618,6 +618,10 @@ class GRaceStatus : public UTL::COM::Object, public IVehicleCache { int GetRaceSpeedTrapPosition(int trapIndex, int racerIndex); + int GetNumRaceSpeedTraps() { + return nSpeedTraps; + } + float GetBestSpeedTrapSpeed(int racerIndex); float GetWorstSpeedTrapSpeed(int racerIndex); From 28d9a79dcc16a3446d3aef24c48f5b6594e46e99 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 15:12:25 +0100 Subject: [PATCH 623/691] 88.4%: match+ GRaceStatus::GetRaceSpeedTrapSpeed Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index ed67f0b1d..cbaa2bffc 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -4060,11 +4060,13 @@ int GRaceStatus::GetLapsLed(int racerIndex) { } float GRaceStatus::GetRaceSpeedTrapSpeed(int trapIndex, int racerIndex) { - return mRacerInfo[racerIndex].GetSpeedTrapSpeed(trapIndex); + GRacerInfo &info = GetRacerInfo(racerIndex); + return info.mSpeedTrapSpeed[trapIndex]; } int GRaceStatus::GetRaceSpeedTrapPosition(int trapIndex, int racerIndex) { - return mRacerInfo[racerIndex].GetSpeedTrapPosition(trapIndex); + GRacerInfo &info = GetRacerInfo(racerIndex); + return info.mSpeedTrapPosition[trapIndex]; } float GRaceStatus::GetBestSpeedTrapSpeed(int racerIndex) { @@ -4096,7 +4098,8 @@ float GRaceStatus::GetWorstSpeedTrapSpeed(int racerIndex) { } float GRaceStatus::GetRaceTollboothTime(int boothIndex, int racerIndex) { - return mRacerInfo[racerIndex].GetTollboothTime(boothIndex); + GRacerInfo &info = GetRacerInfo(racerIndex); + return info.mTimeRemainingToBooth[boothIndex]; } void GRaceStatus::RaceAbandoned() { From 392e77385ce34eaea8161e82dc2db163fa1a67ea Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 15:18:07 +0100 Subject: [PATCH 624/691] 88.4%: match+ GRaceStatus::GetBestLapTime Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 49 ++++++++++++-------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index cbaa2bffc..3cb38ef9a 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3994,17 +3994,23 @@ int GRaceStatus::GetLapPosition(int lapIndex, int racerIndex, bool bOverallPosit float GRaceStatus::GetBestLapTime(int racerIndex) { float bestLapTime; - int onLap; - bestLapTime = GetLapTime(0, racerIndex, false); - onLap = 1; - while (onLap < mRaceParms->GetNumLaps()) { - float lapTime = GetLapTime(onLap, racerIndex, false); - if (lapTime > 0.0f && lapTime < bestLapTime) { - bestLapTime = lapTime; - } + { + int onLap; + + bestLapTime = GetLapTime(0, racerIndex, false); + onLap = 1; + while (onLap < mRaceParms->GetNumLaps()) { + { + float lapTime = GetLapTime(onLap, racerIndex, false); - onLap++; + if (lapTime > 0.0f && lapTime < bestLapTime) { + bestLapTime = lapTime; + } + } + + onLap++; + } } return bestLapTime; @@ -4012,17 +4018,23 @@ float GRaceStatus::GetBestLapTime(int racerIndex) { float GRaceStatus::GetWorstLapTime(int racerIndex) { float worstLapTime; - int onLap; - worstLapTime = GetLapTime(0, racerIndex, false); - onLap = 1; - while (onLap < mRaceParms->GetNumLaps()) { - float lapTime = GetLapTime(onLap, racerIndex, false); - if (lapTime > 0.0f && lapTime > worstLapTime) { - worstLapTime = lapTime; - } + { + int onLap; + + worstLapTime = GetLapTime(0, racerIndex, false); + onLap = 1; + while (onLap < mRaceParms->GetNumLaps()) { + { + float lapTime = GetLapTime(onLap, racerIndex, false); - onLap++; + if (lapTime > 0.0f && lapTime > worstLapTime) { + worstLapTime = lapTime; + } + } + + onLap++; + } } return worstLapTime; @@ -4321,7 +4333,6 @@ void GRaceStatus::DetermineRaceLength() { WRoadNetwork &rn = WRoadNetwork::Get(); GRaceParameters *race_parameters = GetRaceParameters(); - rn.ResolveShortcuts(); if (!race_parameters || !race_parameters->HasFinishLine()) { From f102386525ec9106bd7a29bcb0200699a74fa89a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 15:19:44 +0100 Subject: [PATCH 625/691] 88.4%: match+ GRaceStatus::GetBestSpeedTrapSpeed Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 3cb38ef9a..46ea0284e 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -4087,7 +4087,7 @@ float GRaceStatus::GetBestSpeedTrapSpeed(int racerIndex) { for (int onSpeedtrap = 1; onSpeedtrap < GetNumRaceSpeedTraps(); ++onSpeedtrap) { float speedtrapSpeed = GetRaceSpeedTrapSpeed(onSpeedtrap, racerIndex); - if (speedtrapSpeed > 0.0f && speedtrapSpeed > bestSpeedtrapSpeed) { + if (speedtrapSpeed > 0.0f && speedtrapSpeed < bestSpeedtrapSpeed) { bestSpeedtrapSpeed = speedtrapSpeed; } } @@ -4101,7 +4101,7 @@ float GRaceStatus::GetWorstSpeedTrapSpeed(int racerIndex) { for (int onSpeedtrap = 1; onSpeedtrap < GetNumRaceSpeedTraps(); ++onSpeedtrap) { float speedtrapSpeed = GetRaceSpeedTrapSpeed(onSpeedtrap, racerIndex); - if (speedtrapSpeed > 0.0f && speedtrapSpeed < worstSpeedtrapSpeed) { + if (speedtrapSpeed > 0.0f && speedtrapSpeed > worstSpeedtrapSpeed) { worstSpeedtrapSpeed = speedtrapSpeed; } } From bd31bda6fcf8650aa89a9b94a97392bd100ec07b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 15:23:42 +0100 Subject: [PATCH 626/691] 88.5%: match+ GRaceStatus::GetLapTime Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 27 ++++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 46ea0284e..cb2455a10 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3947,15 +3947,32 @@ void GRaceStatus::SetLapTime(int lapIndex, int racerIndex, float time) { } float GRaceStatus::GetLapTime(int lapIndex, int racerIndex, bool bCumulativeTimeAtLap) { - float time = mLapTimes[lapIndex][racerIndex]; - if (bCumulativeTimeAtLap) { - for (int i = 0; i < lapIndex; ++i) { - time += mLapTimes[i][racerIndex]; + float totalTime = 0.0f; + + { + int i = 0; + + if (i > lapIndex) { + return totalTime; + } + + do { + float time = mLapTimes[i][racerIndex]; + + if (time <= 0.0f) { + return 0.0f; + } + + totalTime += time; + ++i; + } while (i <= lapIndex); } + + return totalTime; } - return time; + return mLapTimes[lapIndex][racerIndex]; } void GRaceStatus::SetCheckpointTime(int lapIndex, int checkIndex, int racerIndex, float time) { From 9a553223d9a3ca10cb7b2f4ec7d56da824813e9f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 15:25:18 +0100 Subject: [PATCH 627/691] 88.5%: match+ GRaceStatus::GetLapPosition Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index cb2455a10..468fd2255 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3992,21 +3992,21 @@ float GRaceStatus::GetCheckpointTime(int lapIndex, int checkIndex, int racerInde } int GRaceStatus::GetLapPosition(int lapIndex, int racerIndex, bool bOverallPosition) { - float racerTime = GetLapTime(lapIndex, racerIndex, bOverallPosition); - int position = 1; + float lapTime = GetLapTime(lapIndex, racerIndex, bOverallPosition); + int numFaster = 0; - for (int i = 0; i < mRacerCount; ++i) { - if (i == racerIndex) { + for (int onRacer = 0; onRacer < mRacerCount; ++onRacer) { + if (onRacer == racerIndex) { continue; } - float otherTime = GetLapTime(lapIndex, i, bOverallPosition); - if (otherTime > 0.0f && (racerTime <= 0.0f || otherTime < racerTime)) { - ++position; + float onRacerLapTime = GetLapTime(lapIndex, onRacer, bOverallPosition); + if (onRacerLapTime < lapTime && onRacerLapTime > 0.0f) { + ++numFaster; } } - return position; + return numFaster + 1; } float GRaceStatus::GetBestLapTime(int racerIndex) { From b4be1c972e5c8014792e3dc6ede7ed9f6dcc86bb Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 15:38:03 +0100 Subject: [PATCH 628/691] 88.5%: improve GManager::GetRespawnLocation Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index cbabc77a3..471c5d281 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2882,29 +2882,19 @@ unsigned int GManager::GetRespawnMarker() { void GManager::GetRespawnLocation(UMath::Vector3 &startLoc, UMath::Vector3 &initialVec) { Attrib::Gen::gameplay gameplayObj(GetRespawnMarker(), 0, nullptr); - const UMath::Vector3 *position = reinterpret_cast(gameplayObj.GetAttributePointer(0x9F743A0E, 0)); UMath::Matrix4 rotMat; UMath::Vector3 respawnLoc; UMath::Vector3 forwardVec; - const float *rotation; + const UMath::Vector3 &position = gameplayObj.Position(); - if (!position) { - position = reinterpret_cast(Attrib::DefaultDataArea(sizeof(UMath::Vector3))); - } - - respawnLoc = UMath::Vector3Make(-position->y, position->z, position->x); + respawnLoc = UMath::Vector3Make(-position.y, position.z, position.x); startLoc = respawnLoc; - UMath::Copy(UMath::Matrix4::kIdentity, rotMat); + rotMat = UMath::Matrix4::kIdentity; forwardVec = UMath::Vector3Make(0.0f, 0.0f, 1.0f); initialVec = forwardVec; - rotation = reinterpret_cast(gameplayObj.GetAttributePointer(0x5A6A57C6, 0)); - if (!rotation) { - rotation = reinterpret_cast(Attrib::DefaultDataArea(sizeof(float))); - } - - MATRIX4_multyrot(&rotMat, -*rotation * 0.0027777778f, &rotMat); + MATRIX4_multyrot(&rotMat, -gameplayObj.Rotation() * 0.0027777778f, &rotMat); VU0_MATRIX3x4_vect3mult(initialVec, rotMat, initialVec); } From 9448fa6d06f6079967db6783521013e322f20d84 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 15:41:20 +0100 Subject: [PATCH 629/691] 88.5%: match+ GRaceDatabase::SetStartupRace Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index 4f124f5d2..68cd5f2df 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -198,13 +198,6 @@ const char *GRaceBin::GetBarrierName(unsigned int index) const { return barrierName; } -unsigned int GRaceBin::GetBarrierHash(unsigned int index) const { - const char *barrierName; - - barrierName = GetBarrierName(index); - return barrierName ? Attrib::StringToKey(barrierName) : 0; -} - bool GRaceBin::GetBarrierIsFlipped(unsigned int index) const { const char *barrierName; @@ -498,8 +491,8 @@ void GRaceDatabase::SetStartupRace(GRaceCustom *custom, GRace::Context context) ClearStartupRace(); } - mStartupRaceContext = context; mStartupRace = custom; + mStartupRaceContext = context; if (custom && mStartupRaceContext == GRace::kRaceContext_Career) { custom->SetupTimeOfDay(); From a91bd8e67f3efb5a60016a6624846bd3d2c2c27d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 15:42:50 +0100 Subject: [PATCH 630/691] 88.5%: restore GRaceBin::GetBarrierHash Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index 68cd5f2df..1309a1b0f 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -198,6 +198,13 @@ const char *GRaceBin::GetBarrierName(unsigned int index) const { return barrierName; } +unsigned int GRaceBin::GetBarrierHash(unsigned int index) const { + const char *barrierName; + + barrierName = GetBarrierName(index); + return barrierName ? Attrib::StringToKey(barrierName) : 0; +} + bool GRaceBin::GetBarrierIsFlipped(unsigned int index) const { const char *barrierName; From 36461f765f9285aca6a23fb72d2035a3da29dd21 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 15:50:33 +0100 Subject: [PATCH 631/691] 88.5%: match+ GManager::NotifyPursuitStarted Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 471c5d281..1e8467f80 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1445,10 +1445,12 @@ void GManager::EnableBinMilestones(unsigned int binNumber) { } void GManager::NotifyPursuitStarted() { - for (MilestoneInfoMap::iterator it = mMilestoneTypeInfo.begin(); it != mMilestoneTypeInfo.end(); ++it) { - if ((it->second.mFlags & GMilestone::kFlag_CompletionFaked) != 0) { - it->second.mLastKnownValue = -1.0f; - it->second.mBestValue = -1.0f; + for (MilestoneInfoMap::iterator iterMile = mMilestoneTypeInfo.begin(); iterMile != mMilestoneTypeInfo.end(); ++iterMile) { + MilestoneTypeInfo &info = iterMile->second; + + if ((info.mFlags & GMilestone::kFlag_CompletionFaked) != 0) { + info.mBestValue = -1.0f; + info.mLastKnownValue = -1.0f; } } } From 2d3ade1ffe4c119d89ecc32dd4f7d53f6acc8ab7 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 16:07:43 +0100 Subject: [PATCH 632/691] 88.6%: match+ GRaceStatus::GetRacerInfo Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 468fd2255..6e157a117 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3275,9 +3275,15 @@ GRacerInfo &GRaceStatus::GetRacerInfo(int index) { } GRacerInfo *GRaceStatus::GetRacerInfo(ISimable *isim) { - for (int i = 0; i < mRacerCount; ++i) { - if (mRacerInfo[i].GetSimable() == isim) { - return &mRacerInfo[i]; + { + int idx = 0; + + for (; idx < mRacerCount; ++idx) { + GRacerInfo &info = mRacerInfo[idx]; + + if (info.GetSimable() == isim) { + return &info; + } } } From ab08e706d851cdd54ef0d78a5fba698440f9aa70 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 16:10:10 +0100 Subject: [PATCH 633/691] 88.6%: match+ GHandler::Detach Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h b/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h index ee99907bb..d1fef11a6 100644 --- a/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h +++ b/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h @@ -31,7 +31,7 @@ namespace Gen { struct gameplay : Instance { struct _LayoutStruct { - char CollectionName[4]; // offset 0x0, size 0x4 + const char *CollectionName; // offset 0x0, size 0x4 unsigned int message_id; // offset 0x4, size 0x4 }; @@ -1205,7 +1205,7 @@ struct gameplay : Instance { return this->Get(0x9c19e56f).GetLength(); } - const char *CollectionName() const { + const char * const &CollectionName() const { return reinterpret_cast<_LayoutStruct *>(this->GetLayoutPointer())->CollectionName; } From 1bf8c9a27a072cca6f58d0d28f67b1a2e15a0768 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 16:11:22 +0100 Subject: [PATCH 634/691] 88.6%: match+ GHandler::HandleMessage Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GHandler.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Speed/Indep/Src/Gameplay/GHandler.cpp b/src/Speed/Indep/Src/Gameplay/GHandler.cpp index 7330e4008..81f8a513c 100644 --- a/src/Speed/Indep/Src/Gameplay/GHandler.cpp +++ b/src/Speed/Indep/Src/Gameplay/GHandler.cpp @@ -83,6 +83,7 @@ void GHandler::Detach(lua_State *luaState) { } void GHandler::HandleMessage(LuaMessageDeliveryInfo *deliveryInfo) { + IsScripted(); ExecuteScriptedHandler(deliveryInfo); } From d8f415dfe69920b8285483a5dc9da064cace6d2b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 16:15:48 +0100 Subject: [PATCH 635/691] 88.6%: match GRacerInfo::IsBehind Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 6e157a117..f7def2c34 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -620,11 +620,10 @@ void GRacerInfo::FinishRace() { bool GRacerInfo::IsBehind(const GRacerInfo &rhs) const { if (IsFinishedRacing()) { - if (!rhs.IsFinishedRacing()) { - return false; + if (rhs.IsFinishedRacing()) { + return GetRaceTime() > rhs.GetRaceTime(); } - - return GetRaceTime() > rhs.GetRaceTime(); + return false; } if (rhs.IsFinishedRacing()) { From 27ea99b5aed61318e4a9e9c6661dec5605ab8fcb Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 17:04:49 +0100 Subject: [PATCH 636/691] 88.6%: improve GRaceStatus::DetermineRaceSegmentLength Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index f7def2c34..43228223a 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -4222,20 +4222,25 @@ void GRaceStatus::EnterSuddenDeath() { float GRaceStatus::DetermineRaceSegmentLength(const UMath::Vector4 *positions, const UMath::Vector4 *directions, int start, int end) { WRoadNav nav; - UMath::Vector3 delta; float pathDistance; - float segmentDistance = 0.0f; + float segmentDistance; nav.SetNavType(WRoadNav::kTypeDirection); nav.SetDecisionFilter(true); nav.SetPathType(WRoadNav::kPathChopper); mRaceParms->GetNumCheckpoints(); - VU0_v3sub(UMath::Vector4To3(positions[start]), UMath::Vector4To3(positions[end]), delta); - pathDistance = VU0_sqrt(VU0_v3lengthsquare(delta)); + { + UMath::Vector3 delta; + + VU0_v3sub(UMath::Vector4To3(positions[start]), UMath::Vector4To3(positions[end]), delta); + pathDistance = VU0_sqrt(VU0_v3lengthsquare(delta)); + } nav.InitAtPoint(UMath::Vector4To3(positions[start]), UMath::Vector4To3(directions[start]), true, 1.0f); if (nav.IsValid()) { + segmentDistance = 0.0f; + if (start == end) { short segment = nav.GetSegmentInd(); float segLenScale = static_cast(nav.GetSegment()->nLength) * 0.015259022f; From 3318d562b8e3b367dfb6dc089b9603480ad8b8dd Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 17:15:06 +0100 Subject: [PATCH 637/691] 88.6%: match+ GRaceStatus::ClearTimes Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 43228223a..0d765a23a 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3940,11 +3940,11 @@ void GRaceStatus::ClearTimes() { mRaceMasterTimer.Stop(); mRaceMasterTimer.Reset(start_time); - mLastSecondTickSent = 0; mBonusTime = 0.0f; mTaskTime = 0.0f; - mSuddenDeathMode = false; mTimeExpiredMsgSent = false; + mSuddenDeathMode = false; + mLastSecondTickSent = 0; } void GRaceStatus::SetLapTime(int lapIndex, int racerIndex, float time) { From c7846cb5198c1b0abc669c2fe4994b1eba10a913 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 19:01:41 +0100 Subject: [PATCH 638/691] 88.6%: match+ GObjectBlock::CalcSpaceRequired Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp b/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp index 4e3341b90..c66908743 100644 --- a/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp +++ b/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp @@ -189,23 +189,22 @@ void GObjectBlock::Initialize(unsigned int bufferSize) { } unsigned int GObjectBlock::CalcSpaceRequired(GVault *vault, unsigned int *outObjCount) { - unsigned int objCount; - unsigned int spaceRequired; + unsigned int bytesUsed = 0; + unsigned int objCount = bytesUsed; - objCount = 0; - spaceRequired = FindInstances(vault, nullptr, &objCount, nullptr); + bytesUsed = FindInstances(vault, nullptr, &objCount, nullptr); - spaceRequired += FindInstances(vault, nullptr, &objCount, nullptr); - spaceRequired += FindInstances(vault, nullptr, &objCount, nullptr); - spaceRequired += FindInstances(vault, nullptr, &objCount, nullptr); - spaceRequired += FindInstances(vault, nullptr, &objCount, nullptr); - spaceRequired += FindInstances(vault, nullptr, &objCount, nullptr); + bytesUsed += FindInstances(vault, nullptr, &objCount, nullptr); + bytesUsed += FindInstances(vault, nullptr, &objCount, nullptr); + bytesUsed += FindInstances(vault, nullptr, &objCount, nullptr); + bytesUsed += FindInstances(vault, nullptr, &objCount, nullptr); + bytesUsed += FindInstances(vault, nullptr, &objCount, nullptr); if (outObjCount) { *outObjCount = objCount; } - return spaceRequired; + return bytesUsed; } bool GObjectBlock::CollectionIsInstanceOfTemplate(Attrib::Gen::gameplay &instanceObj, Attrib::Gen::gameplay &templateObj) { From 6c9ee0f09229777327c2652a89cd093209687ec2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 19:04:10 +0100 Subject: [PATCH 639/691] 88.6%: match+ GRaceDatabase::ClearRaceScores Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Indep/Src/Gameplay/GRaceDatabase.cpp | 41 +++++++++---------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index 1309a1b0f..6adf5c508 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -665,39 +665,36 @@ void GRaceDatabase::BuildScoreList() { } void GRaceDatabase::ClearRaceScores() { - unsigned int i; - if (!mRaceScoreInfo) { return; } bMemSet(mRaceScoreInfo, 0, mRaceCountStatic << 4); - for (i = 0; i < mRaceCountStatic; i++) { - GRaceParameters *race; - - race = &mRaceParameters[i]; - if (!race->GetIsDDayRace()) { - bool unlockedQuick; - bool unlockedOnline; - bool unlockedChallenge; - - unlockedQuick = race->GetInitiallyUnlockedQuickRace(); - unlockedOnline = race->GetInitiallyUnlockedOnline(); - unlockedChallenge = race->GetInitiallyUnlockedChallenge(); - - if (race->GetIsBossRace()) { + for (unsigned int onRace = 0; onRace < mRaceCountStatic; onRace++) { + GRaceParameters *parms; + bool unlockedQR; + bool unlockedOnline; + bool unlockedChallenge; + + parms = &mRaceParameters[onRace]; + if (!parms->GetIsDDayRace()) { + unlockedQR = parms->GetInitiallyUnlockedQuickRace(); + unlockedOnline = parms->GetInitiallyUnlockedOnline(); + unlockedChallenge = parms->GetInitiallyUnlockedChallenge(); + + if (parms->GetIsBossRace()) { unlockedChallenge = false; } - if (unlockedQuick || unlockedOnline || unlockedChallenge) { - unsigned int *flags; + if (unlockedQR || unlockedOnline || unlockedChallenge) { + GRaceSaveInfo *info; - flags = &reinterpret_cast(GetScoreInfo(race->GetEventHash()))[1]; - if (unlockedQuick || unlockedChallenge) { - *flags |= kUnlocked_QuickRace; + info = GetScoreInfo(parms->GetEventHash()); + if (unlockedQR || unlockedChallenge) { + reinterpret_cast(info)[1] |= kUnlocked_QuickRace; } if (unlockedOnline) { - *flags |= kUnlocked_Online; + reinterpret_cast(info)[1] |= kUnlocked_Online; } } } From f72feb8573ab7f612733b4853de1ecd97f25955c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 19:07:22 +0100 Subject: [PATCH 640/691] 88.6%: match GManager::CanPlaySMS Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 49 +++++++++-------------- src/Speed/Indep/Src/Interfaces/IFengHud.h | 1 + 2 files changed, 19 insertions(+), 31 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 1e8467f80..fbcbd6f4f 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2098,39 +2098,26 @@ bool GManager::CanPlaySMS() const { } player = IPlayer::First(PLAYER_LOCAL); - if (!player) { - return false; - } - - ISimable *simable = player->GetSimable(); - if (!simable) { - return false; - } - - IHud *ihud = player->GetHud(); - if (!ihud) { - return false; - } - - if (!ihud->AreResourcesLoaded()) { - return false; - } - - IVehicle *ivehicle; - if (!simable->QueryInterface(&ivehicle) || !ivehicle) { - return false; - } - - if (ivehicle->IsAnimating() || ivehicle->IsStaging() || ivehicle->IsLoading()) { - return false; - } - - IVehicleAI *ivehicleai = ivehicle->GetAIVehiclePtr(); - if (!ivehicleai) { - return false; + if (player) { + ISimable *simable = player->GetSimable(); + if (simable) { + IHud *ihud = player->GetHud(); + if (ihud && ihud->IsHudVisible()) { + IVehicle *ivehicle; + + if (simable->QueryInterface(&ivehicle) && ivehicle) { + if (!ivehicle->IsAnimating() && !ivehicle->IsStaging() && !ivehicle->IsLoading()) { + IVehicleAI *ivehicleai = ivehicle->GetAIVehiclePtr(); + if (ivehicleai) { + return !ivehicleai->GetPursuit(); + } + } + } + } + } } - return !ivehicleai->GetPursuit(); + return false; } void GManager::DispatchSMSMessage(int smsID) { diff --git a/src/Speed/Indep/Src/Interfaces/IFengHud.h b/src/Speed/Indep/Src/Interfaces/IFengHud.h index 8611948d3..b2c1211df 100644 --- a/src/Speed/Indep/Src/Interfaces/IFengHud.h +++ b/src/Speed/Indep/Src/Interfaces/IFengHud.h @@ -21,6 +21,7 @@ class IHud : public UTL::COM::IUnknown, public UTL::Collections::Listable Date: Sat, 21 Mar 2026 19:18:17 +0100 Subject: [PATCH 641/691] 88.6%: match GObjectBlock::CollectionIsInstanceOfTemplate Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp b/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp index c66908743..f41da8213 100644 --- a/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp +++ b/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp @@ -208,26 +208,21 @@ unsigned int GObjectBlock::CalcSpaceRequired(GVault *vault, unsigned int *outObj } bool GObjectBlock::CollectionIsInstanceOfTemplate(Attrib::Gen::gameplay &instanceObj, Attrib::Gen::gameplay &templateObj) { - const int *isObject = reinterpret_cast(instanceObj.GetAttributePointer(0x3E9156CA, 0)); unsigned int parentKey; - if (!isObject) { - isObject = reinterpret_cast(Attrib::DefaultDataArea(sizeof(int))); - } - - if (*isObject != 0) { + if (instanceObj.Template(0)) { return false; } parentKey = instanceObj.GetParent(); while (parentKey != 0) { - Attrib::Gen::gameplay parent(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), parentKey), 0, nullptr); + Attrib::Gen::gameplay parentObj(parentKey, 0, nullptr); - if (parent.GetCollection() == templateObj.GetCollection()) { + if (parentObj.GetCollection() == templateObj.GetCollection()) { return true; } - parentKey = parent.GetParent(); + parentKey = parentObj.GetParent(); } return false; From ec372a9fa501de8cead87ea0e7aab6eb26096a34 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 19:20:08 +0100 Subject: [PATCH 642/691] 88.6%: match+ GManager::BeginGameplay Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index fbcbd6f4f..afcf21c5b 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -371,9 +371,11 @@ void GManager::PreBeginGameplay() { } void GManager::BeginGameplay() { - for (unsigned int i = 0; i < mVaultCount; ++i) { - if (mVaults[i].IsLoaded()) { - mVaults[i].CreateGameplayObjects(); + for (unsigned int onVault = 0; onVault < mVaultCount; ++onVault) { + GVault &vault = mVaults[onVault]; + + if (vault.IsLoaded()) { + vault.CreateGameplayObjects(); } } From 7af8fb350ad428b2e2ea28c40ee3d39499a48352 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 20:36:00 +0100 Subject: [PATCH 643/691] 88.6%: improve GRaceCustom::CreateRaceActivity Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 0d765a23a..962eedf1f 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2586,10 +2586,8 @@ void GRaceCustom::CreateRaceActivity() { { Attrib::Attribute attribute(mRaceRecord->Get(0x5839FA1A)); - if (mNumOpponents != 0) { - for (unsigned int onSet = 0; onSet < mNumOpponents; onSet++) { - attribute.Set(onSet, GCollectionKey(opponentKey[onSet])); - } + for (unsigned int onSet = 0; onSet < mNumOpponents; onSet++) { + attribute.Set(onSet, GCollectionKey(opponentKey[onSet])); } } } From c65ae9c4db33e5eddf680db52f1706c7ee4a340d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 20:38:57 +0100 Subject: [PATCH 644/691] 88.6%: improve GRaceCustom::CreateRaceActivity Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 962eedf1f..f28d2290c 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2570,7 +2570,7 @@ void GRaceCustom::CreateRaceActivity() { } } - if (currOpponents < mNumOpponents) { + if (mNumOpponents > currOpponents) { if (currOpponents == 0) { for (unsigned int onSet = 0; onSet < mNumOpponents; onSet++) { opponentKey[onSet] = 0x9F3B88C5; @@ -2583,10 +2583,12 @@ void GRaceCustom::CreateRaceActivity() { } mRaceRecord->Add(0x5839FA1A, mNumOpponents); + unsigned int onSet; + { Attrib::Attribute attribute(mRaceRecord->Get(0x5839FA1A)); - for (unsigned int onSet = 0; onSet < mNumOpponents; onSet++) { + for (onSet = 0; onSet < mNumOpponents; onSet++) { attribute.Set(onSet, GCollectionKey(opponentKey[onSet])); } } From 545760d37c0a94c4d8ad0903058e59af8b94cf2a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 20:43:25 +0100 Subject: [PATCH 645/691] 88.6%: improve GRaceCustom::CreateRaceActivity Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index f28d2290c..e81c09990 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2563,8 +2563,10 @@ void GRaceCustom::CreateRaceActivity() { if (!bossINQuickRace) { currOpponents = mRaceRecord->Num_Opponents(); - if (currOpponents != 0) { - for (unsigned int onOpp = 0; onOpp < currOpponents; onOpp++) { + unsigned int onOpp = 0; + + if (currOpponents) { + for (; onOpp < currOpponents; onOpp++) { opponentKey[onOpp] = mRaceRecord->Opponents(onOpp).GetCollectionKey(); } } From 14aa4bfd9df91850f85a0f2994e8341afe1384ad Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 20:44:47 +0100 Subject: [PATCH 646/691] 88.6%: improve GRaceCustom::CreateRaceActivity Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index e81c09990..c7961b218 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2562,13 +2562,11 @@ void GRaceCustom::CreateRaceActivity() { unsigned int currOpponents = 0; if (!bossINQuickRace) { - currOpponents = mRaceRecord->Num_Opponents(); unsigned int onOpp = 0; - if (currOpponents) { - for (; onOpp < currOpponents; onOpp++) { - opponentKey[onOpp] = mRaceRecord->Opponents(onOpp).GetCollectionKey(); - } + currOpponents = mRaceRecord->Num_Opponents(); + for (; onOpp < currOpponents; onOpp++) { + opponentKey[onOpp] = mRaceRecord->Opponents(onOpp).GetCollectionKey(); } } From 0ee4ae0f5526f89c565519268fe8770967634883 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 20:47:11 +0100 Subject: [PATCH 647/691] 88.7%: improve GRaceCustom::CreateRaceActivity Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index c7961b218..7ccc5cdbb 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2562,9 +2562,8 @@ void GRaceCustom::CreateRaceActivity() { unsigned int currOpponents = 0; if (!bossINQuickRace) { - unsigned int onOpp = 0; - currOpponents = mRaceRecord->Num_Opponents(); + unsigned int onOpp = 0; for (; onOpp < currOpponents; onOpp++) { opponentKey[onOpp] = mRaceRecord->Opponents(onOpp).GetCollectionKey(); } From cded52526b213f4a528c6a48d3ad3b9eb82803f9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 21:14:31 +0100 Subject: [PATCH 648/691] 88.7%: improve GTrigger::GTrigger Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 171c1a211..50c427709 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -29,7 +29,6 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) UMath::Vector3 dimSwizzled; float triggerRadius; const int *oneShot; - bool hasDimensions; mTriggerEnabled = 0; mIcon = nullptr; @@ -51,7 +50,6 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) VU0_MATRIX3x4_vect3mult(initialVec, directionMat, initialVec); mDirection = initialVec; mSimObjInside.reserve(8); - position = reinterpret_cast(GetAttributePointer(0x9F743A0E, 0)); if (!position) { position = reinterpret_cast(Attrib::DefaultDataArea(sizeof(UMath::Vector3))); @@ -64,7 +62,7 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) dimSwizzled.x = 0.0f; dimSwizzled.y = 0.0f; dimSwizzled.z = 0.0f; - hasDimensions = false; + bool hasDimensions = false; triggerRadius = 0.0f; if (dimensions) { From 96820c6d50a36378d9c8191f0f0ac2aa6a12e6df Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 21:40:36 +0100 Subject: [PATCH 649/691] 88.7%: improve GTrigger::GTrigger Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GTrigger.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp index 50c427709..6c52a6307 100644 --- a/src/Speed/Indep/Src/Gameplay/GTrigger.cpp +++ b/src/Speed/Indep/Src/Gameplay/GTrigger.cpp @@ -80,8 +80,8 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) dimSwizzled.z = dimSwizzled.x; mWorldTrigger.fShape = 3; } else if (hasDimensions) { - triggerRadius = UMath::Sqrt(dimSwizzled.x * dimSwizzled.x * 0.25f + dimSwizzled.z * dimSwizzled.z * 0.25f); mWorldTrigger.fShape = 1; + triggerRadius = UMath::Sqrt(dimSwizzled.x * dimSwizzled.x * 0.25f + dimSwizzled.z * dimSwizzled.z * 0.25f); } else { const float *width = reinterpret_cast(GetAttributePointer(0x5816C1FC, 0)); @@ -92,8 +92,8 @@ GTrigger::GTrigger(const Attrib::Key &triggerKey) dimSwizzled.x = *width; dimSwizzled.y = 50.0f; dimSwizzled.z = 1.0f; - triggerRadius = UMath::Sqrt(dimSwizzled.x * dimSwizzled.x * 0.25f + 0.25f); mWorldTrigger.fShape = 1; + triggerRadius = UMath::Sqrt(dimSwizzled.x * dimSwizzled.x * 0.25f + 0.25f); } rotation = reinterpret_cast(GetAttributePointer(0x5A6A57C6, 0)); From 879928303e339003a273e5fb5c3130de6726b3ed Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 23:16:29 +0100 Subject: [PATCH 650/691] 88.7%: improve GRaceCustom::GRaceCustom Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 7ccc5cdbb..3e58bb985 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2516,15 +2516,12 @@ GRaceCustom::GRaceCustom(const GRaceParameters &other) mReversed(false), // mFreedByOwner(false), // mHeatLevel(-1) { - Attrib::Attribute opponents; unsigned int customKey; customKey = mRaceRecord->GenerateUniqueKey("GRaceCustom", true); mRaceRecord->Modify(customKey, 0); mRaceRecord->SetParent(other.GetGameplayObj()->GetCollection()); - - opponents = mRaceRecord->Get(0x5839FA1A); - mNumOpponents = opponents.GetLength(); + mNumOpponents = mRaceRecord->Num_Opponents(); } GRaceCustom::~GRaceCustom() { From 20c542378d0d61e1793886493949d848e1fbe0de Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 23:22:34 +0100 Subject: [PATCH 651/691] 88.7%: match GRaceCustom::GRaceCustom Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Indep/Src/Generated/AttribSys/Classes/gameplay.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h b/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h index d1fef11a6..bfbfd04b3 100644 --- a/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h +++ b/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h @@ -62,6 +62,14 @@ struct gameplay : Instance { Change(FindCollection(ClassKey(), collectionkey)); } + bool Modify(Key dynamicCollectionKey, unsigned int spaceForAdditionalAttributes) { + return ModifyInternal(ClassKey(), dynamicCollectionKey, LocalAttribCount() + spaceForAdditionalAttributes); + } + + Key GenerateUniqueKey(const char *name, bool registerName) const { + return GUKeyInternal(ClassKey(), name, registerName); + } + static Key ClassKey() { return 0x5cea9d46; } From b181b68a96e18f81096840734ed4e47cfedaaf67 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 23:24:33 +0100 Subject: [PATCH 652/691] 88.8%: improve GManager::GetRespawnLocation Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index afcf21c5b..f6a3a4df7 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2872,20 +2872,17 @@ unsigned int GManager::GetRespawnMarker() { } void GManager::GetRespawnLocation(UMath::Vector3 &startLoc, UMath::Vector3 &initialVec) { - Attrib::Gen::gameplay gameplayObj(GetRespawnMarker(), 0, nullptr); + unsigned int markerKey = GetRespawnMarker(); + Attrib::Gen::gameplay marker(markerKey, 0, nullptr); UMath::Matrix4 rotMat; - UMath::Vector3 respawnLoc; - UMath::Vector3 forwardVec; - const UMath::Vector3 &position = gameplayObj.Position(); + const UMath::Vector3 &pos = marker.Position(); - respawnLoc = UMath::Vector3Make(-position.y, position.z, position.x); - startLoc = respawnLoc; + startLoc = UMath::Vector3Make(-pos.y, pos.z, pos.x); rotMat = UMath::Matrix4::kIdentity; - forwardVec = UMath::Vector3Make(0.0f, 0.0f, 1.0f); - initialVec = forwardVec; + initialVec = UMath::Vector3Make(0.0f, 0.0f, 1.0f); - MATRIX4_multyrot(&rotMat, -gameplayObj.Rotation() * 0.0027777778f, &rotMat); + MATRIX4_multyrot(&rotMat, -marker.Rotation() * 0.0027777778f, &rotMat); VU0_MATRIX3x4_vect3mult(initialVec, rotMat, initialVec); } From 0590f6419881e3e641098625d1c277fa8686b1c2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 23:30:19 +0100 Subject: [PATCH 653/691] 88.9%: match GManager::AllocateMilestones Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index f6a3a4df7..7bd175c2f 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1191,24 +1191,19 @@ void GManager::ReleaseMilestones() { } void GManager::AllocateMilestones() { - Attrib::Gen::gameplay gameplay(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), 0x1D975142), 0, nullptr); + Attrib::Gen::gameplay milestoneRoot(0x1D975142, 0, nullptr); AttribKeyList keys; - AttribKeyList::iterator it; - unsigned int i; - - GatherInstanceKeys(gameplay, keys, 0xA3D34781); + GMilestone *milestone; - mNumMilestones = 0; - for (it = keys.begin(); it != keys.end(); ++it) { - mNumMilestones++; - } + GatherInstanceKeys(milestoneRoot, keys, 0xA3D34781); + mNumMilestones = keys.size(); mMilestones = new GMilestone[mNumMilestones]; + milestone = mMilestones; - i = 0; - for (it = keys.begin(); it != keys.end(); ++it) { - mMilestones[i].Init(*it); - i++; + for (AttribKeyList::iterator iter = keys.begin(); iter != keys.end(); ++iter) { + milestone->Init(*iter); + ++milestone; } } From 217e8cdb4e4848ef341e5a43d559ed4bdfaebd88 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 23:31:29 +0100 Subject: [PATCH 654/691] 89.0%: match GManager::AllocateSpeedTraps Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 7bd175c2f..713389c1e 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1379,24 +1379,19 @@ void GManager::ReleaseIcons() { } void GManager::AllocateSpeedTraps() { - Attrib::Gen::gameplay gameplay(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), 0x49511906), 0, nullptr); + Attrib::Gen::gameplay speedTrapRoot(0x49511906, 0, nullptr); AttribKeyList keys; - AttribKeyList::iterator it; - unsigned int i; - - GatherInstanceKeys(gameplay, keys, 0xB05871D3); + GSpeedTrap *speedTrap; - mNumSpeedTraps = 0; - for (it = keys.begin(); it != keys.end(); ++it) { - mNumSpeedTraps++; - } + GatherInstanceKeys(speedTrapRoot, keys, 0xB05871D3); + mNumSpeedTraps = keys.size(); mSpeedTraps = new GSpeedTrap[mNumSpeedTraps]; + speedTrap = mSpeedTraps; - i = 0; - for (it = keys.begin(); it != keys.end(); ++it) { - mSpeedTraps[i].Init(*it); - i++; + for (AttribKeyList::iterator iter = keys.begin(); iter != keys.end(); ++iter) { + speedTrap->Init(*iter); + ++speedTrap; } } From 2b6d7b09682403b7813eeb881e082491464e18ec Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 23:33:08 +0100 Subject: [PATCH 655/691] 89.0%: match GManager::ResetSpeedTraps Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 713389c1e..ab2b31633 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1396,24 +1396,20 @@ void GManager::AllocateSpeedTraps() { } void GManager::ResetSpeedTraps() { - GManagerSpeedTrapCompat *compat = reinterpret_cast(this); - - if (compat->mNumSpeedTraps == 0) { + if (!mNumSpeedTraps) { return; } - unsigned int gameplayKey = GameplayClassKey(); - Attrib::Gen::gameplay gameplay(Attrib::FindCollection(gameplayKey, 0x49511906), 0, nullptr); + Attrib::Gen::gameplay speedTrapRoot(0x49511906, 0, nullptr); AttribKeyList keys; - AttribKeyList::iterator it; GSpeedTrap *speedTrap; - GatherInstanceKeys(gameplay, keys, 0xB05871D3); + GatherInstanceKeys(speedTrapRoot, keys, 0xB05871D3); - speedTrap = compat->mSpeedTraps; - for (it = keys.begin(); it != keys.end(); ++it) { - speedTrap->Init(*it); - speedTrap++; + speedTrap = mSpeedTraps; + for (AttribKeyList::iterator iter = keys.begin(); iter != keys.end(); ++iter) { + speedTrap->Init(*iter); + ++speedTrap; } } From c436ab1aaccd9e7a2f0c8c4eef3aca6ab0f93af4 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 23:33:48 +0100 Subject: [PATCH 656/691] 89.0%: match GManager::FindBountySpawnPoints Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index ab2b31633..a2eef695f 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1769,14 +1769,14 @@ void GManager::RefreshTrackMarkerIcons() { } void GManager::FindBountySpawnPoints() { - Attrib::Gen::gameplay gameplay(Attrib::FindCollection(Attrib::Gen::gameplay::ClassKey(), 0x3D48E303), 0, nullptr); + Attrib::Gen::gameplay jumpRoot(0x3D48E303, 0, nullptr); AttribKeyList keys; - AttribKeyList::iterator it; - GatherInstanceKeys(gameplay, keys, 0xA7BCCF63); + GatherInstanceKeys(jumpRoot, keys, 0xA7BCCF63); mNumBountySpawnPoints = 0; - for (it = keys.begin(); it != keys.end(); ++it) { - mBountySpawnPoint[mNumBountySpawnPoints++] = *it; + + for (AttribKeyList::iterator iter = keys.begin(); iter != keys.end(); ++iter) { + mBountySpawnPoint[mNumBountySpawnPoints++] = *iter; if (mNumBountySpawnPoints > 0x13) { break; } From 527dbfda903f7395cd7f1018912bd0dc57924064 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 23:41:58 +0100 Subject: [PATCH 657/691] 89.1%: improve GObjectBlock::CreateObjects Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp b/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp index f41da8213..c2eee6f53 100644 --- a/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp +++ b/src/Speed/Indep/Src/Gameplay/GObjectBlock.cpp @@ -114,7 +114,7 @@ void GObjectBlock::DeleteObjects() { template unsigned int GObjectBlock::CreateObjects(GVault *vault, unsigned char *buffer) { - const unsigned int type = GetGameplayType(); + const GameplayObjType type = static_cast(GetGameplayType()); AttribKeyList keys; unsigned int objSize; unsigned int objCount; @@ -124,12 +124,12 @@ unsigned int GObjectBlock::CreateObjects(GVault *vault, unsigned char *buffer) { FindInstances(vault, &keys, nullptr, nullptr); - objSize = GetPaddedObjectSize(); objCount = 0; + objSize = ::GetPaddedObjectSize(); connectionBase = reinterpret_cast(buffer + objSize * keys.size()); connectionDest = connectionBase; - for (AttribKeyList::iterator iterObj = keys.begin(); iterObj != keys.end(); ++iterObj) { + for (AttribKeyList::const_iterator iterObj = keys.begin(); iterObj != keys.end(); ++iterObj) { unsigned int collectionKey = *iterObj; T *pMem = ::new (buffer + objCount * objSize) T(collectionKey); T *newObj = pMem; From 004aeb6a8964a8b65187f0a76960992025164910 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sat, 21 Mar 2026 23:56:06 +0100 Subject: [PATCH 658/691] 89.2%: improve GHandler::MessagePassesFilters Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GHandler.cpp | 26 +++++++++++++++-------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GHandler.cpp b/src/Speed/Indep/Src/Gameplay/GHandler.cpp index 81f8a513c..f0354d2a5 100644 --- a/src/Speed/Indep/Src/Gameplay/GHandler.cpp +++ b/src/Speed/Indep/Src/Gameplay/GHandler.cpp @@ -98,12 +98,20 @@ bool GHandler::MessagePassesFilters(LuaMessageDeliveryInfo *deliveryInfo) { return true; } - const Attrib::Blob *blobPtr = reinterpret_cast(GetAttributePointer(0x56e1436d, onFilter)); + Attrib::Blob blob; + + reinterpret_cast(blob).mSize = 0; + reinterpret_cast(blob).mData = nullptr; + const Attrib::Blob *blobPtr = reinterpret_cast(GetAttributePointer(0x56e1436d, onFilter)); if (blobPtr) { - Attrib::Blob blob = *blobPtr; - const BlobView &blobView = reinterpret_cast(blob); - unsigned char *blockData = reinterpret_cast(const_cast(blobView.mData)); + blob = *blobPtr; + } + + unsigned char *blockData = + reinterpret_cast(const_cast(reinterpret_cast(blob).mData)); + + if (blockData) { MessageFilterHeader *filter = reinterpret_cast(blockData); bool filterPassed = true; @@ -123,12 +131,12 @@ bool GHandler::MessagePassesFilters(LuaMessageDeliveryInfo *deliveryInfo) { filter->mQuery(filterContext, 0, filter->mQueryStaticData, 1, &filterPassed); } - if (!FilterModePassAll(0)) { - if (filterPassed) { - return true; + if (FilterModePassAll(0)) { + if (!filterPassed) { + return false; } - } else if (!filterPassed) { - return false; + } else if (filterPassed) { + return true; } } } From 855cd4b0473a54d409c0e313650af3ae78aa4140 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 00:07:29 +0100 Subject: [PATCH 659/691] 89.2%: improve GRaceStatus::GRaceStatus Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 3e58bb985..1b8980cb5 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2727,24 +2727,16 @@ GRaceStatus::GRaceStatus() mCaluclatedAdaptiveGain = false; mQueueBinChange = false; mNumTollbooths = 0; -#ifndef EA_BUILD_A124 - mPlayerPursuitInCooldown = false; -#endif - mBonusTime = 0.0f; - mTaskTime = 0.0f; - mSuddenDeathMode = false; - mTimeExpiredMsgSent = false; - mLastSecondTickSent = 0; -#ifndef EA_BUILD_A124 - mRefreshBinAfterRace = false; - mWarpWhenInFreeRoam = 0; -#endif mVehicleCacheLocked = false; bRaceRouteError = false; mTrafficDensity = 0; mTrafficPattern = 0; mScriptWaitingForLoad = false; mHasBeenWon = false; +#ifndef EA_BUILD_A124 + mRefreshBinAfterRace = false; + mWarpWhenInFreeRoam = 0; +#endif fSubsequentLapLength = 0.0f; mPlayMode = kPlayMode_Racing; fRaceLength = 0.0f; From 3ae398629f9053a2fae61ba7921422d1e0972536 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 00:13:54 +0100 Subject: [PATCH 660/691] 89.2%: match+ GManager::WarpToMarker Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 22 ++++++++++----------- src/Speed/Indep/Src/World/TrackStreamer.hpp | 4 ++++ 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index a2eef695f..18ce56da8 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2798,7 +2798,7 @@ void GManager::NotifyWorldService() { } bool GManager::WarpToMarker(unsigned int markerKey, bool startPursuit) { - if (GRaceStatus::Exists() && GRaceStatus::Get().GetPlayMode() == GRaceStatus::kPlayMode_Racing) { + if (!GRaceStatus::Exists() || GRaceStatus::Get().GetPlayMode() != GRaceStatus::kPlayMode_Roaming) { return false; } @@ -2811,24 +2811,24 @@ bool GManager::WarpToMarker(unsigned int markerKey, bool startPursuit) { return false; } + const UMath::Vector3 &markerPos = marker->GetPosition(); + const UMath::Vector3 &markerDir = marker->GetDirection(); + new EFadeScreenOn(false); - Sim::SetStream(const_cast(marker->GetPosition()), false); + TheTrackStreamer.EnableZoneSwitching(); + Sim::SetStream(const_cast(markerPos), false); - IPlayer *player = IPlayer::First(PLAYER_LOCAL); - ISimable *simable = player ? player->GetSimable() : nullptr; + ISimable *player = IPlayer::First(PLAYER_LOCAL)->GetSimable(); IVehicle *vehicle = nullptr; - if (simable) { - simable->QueryInterface(&vehicle); - } - - if (vehicle) { - vehicle->SetVehicleOnGround(marker->GetPosition(), marker->GetDirection()); + if (player->QueryInterface(&vehicle)) { + vehicle->SetVehicleOnGround(markerPos, markerDir); + vehicle->Deactivate(); } - mWarpStartPursuit = startPursuit; mWarping = true; mWarpTargetMarker = markerKey; + mWarpStartPursuit = startPursuit; return true; } diff --git a/src/Speed/Indep/Src/World/TrackStreamer.hpp b/src/Speed/Indep/Src/World/TrackStreamer.hpp index 23bd5c792..dfef41328 100644 --- a/src/Speed/Indep/Src/World/TrackStreamer.hpp +++ b/src/Speed/Indep/Src/World/TrackStreamer.hpp @@ -163,6 +163,10 @@ class TrackStreamer { ZoneSwitchingDisabled = true; } + void EnableZoneSwitching() { + ZoneSwitchingDisabled = false; + } + int IsSectionVisible(int section_number) { return CurrentVisibleSectionTable.IsSet(section_number); } From 170fd22fd4aa392c4e6c3cb19023cb74f1c295bb Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 00:18:23 +0100 Subject: [PATCH 661/691] 89.3%: match+ GRaceBin::RefreshProgress Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Indep/Src/Gameplay/GRaceDatabase.cpp | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp index 6adf5c508..e92735b5e 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceDatabase.cpp @@ -251,39 +251,39 @@ void GRaceBin::SetRacesWon(int numRaces) { } void GRaceBin::RefreshProgress() { - unsigned int racesWon; - int completedChallenges; - unsigned int binNumber; - GMilestone *milestone; - GSpeedTrap *speedTrap; - - racesWon = 0; - for (binNumber = 0; binNumber < GetWorldRaceCount(); binNumber++) { - if (GRaceDatabase::Get().CheckRaceScoreFlags(GetWorldRaceHash(binNumber), GRaceDatabase::kCompleted_ContextCareer)) { - racesWon++; + int numRaces; + int numChallenges; + GMilestone *binMilestone; + GSpeedTrap *binSpeedTrap; + + numRaces = 0; + for (unsigned int onRace = 0; onRace < GetWorldRaceCount(); onRace++) { + unsigned int raceHash = GetWorldRaceHash(onRace); + + if (GRaceDatabase::Get().IsCareerRaceComplete(raceHash)) { + numRaces++; } } - completedChallenges = 0; - binNumber = GetBinNumber(); - milestone = GManager::Get().GetFirstMilestone(false, binNumber); - while (milestone) { - if (milestone->GetIsAwarded()) { - completedChallenges++; + numChallenges = 0; + binMilestone = GManager::Get().GetFirstMilestone(false, GetBinNumber()); + while (binMilestone) { + if (binMilestone->GetIsAwarded()) { + numChallenges++; } - milestone = GManager::Get().GetNextMilestone(milestone, false, binNumber); + binMilestone = GManager::Get().GetNextMilestone(binMilestone, false, GetBinNumber()); } - speedTrap = GManager::Get().GetFirstSpeedTrap(false, binNumber); - while (speedTrap) { - if (speedTrap->IsFlagSet(4)) { - completedChallenges++; + binSpeedTrap = GManager::Get().GetFirstSpeedTrap(false, GetBinNumber()); + while (binSpeedTrap) { + if (binSpeedTrap->GetIsCompleted()) { + numChallenges++; } - speedTrap = GManager::Get().GetNextSpeedTrap(speedTrap, false, binNumber); + binSpeedTrap = GManager::Get().GetNextSpeedTrap(binSpeedTrap, false, GetBinNumber()); } - SetRacesWon(racesWon); - SetCompletedChallenges(completedChallenges); + SetRacesWon(numRaces); + SetCompletedChallenges(numChallenges); } void GRaceDatabase::Init() { From 4c3d497b7037bbb316fd76e69922726da3ee6daa Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 00:26:55 +0100 Subject: [PATCH 662/691] 89.4%: improve GManager::UpdatePursuit Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 48 +++++++++++----------- src/Speed/Indep/Src/Gameplay/GRaceStatus.h | 4 ++ 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 18ce56da8..53cfddd89 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2525,53 +2525,51 @@ void GManager::SuspendAllBinActivities() { void GManager::UpdatePursuit() { IPursuit *pursuit; - IPerpetrator *perpetrator; bool roaming; + IPerpetrator *perp; + bool inPursuit; + bool inCooldown; + GRaceParameters *raceParms; bool challengeRace; - bool cooldown; - bool epicPursuitRace; - roaming = GRaceStatus::Get().GetPlayMode() == GRaceStatus::kPlayMode_Roaming; + roaming = !GRaceStatus::Get().GetPlayMode(); pursuit = nullptr; - perpetrator = nullptr; - GetPlayerPursuitInterfaces(pursuit, perpetrator); + perp = nullptr; + inPursuit = false; + GetPlayerPursuitInterfaces(pursuit, perp); - cooldown = false; + inCooldown = false; if (pursuit) { - TrackValue("cost_to_state_in_pursuit", static_cast(pursuit->CalcTotalCostToState())); - cooldown = pursuit->GetPursuitStatus() == 2; + inPursuit = true; + mObj->TrackValue("cost_to_state_in_pursuit", static_cast(pursuit->CalcTotalCostToState())); + inCooldown = pursuit->GetPursuitStatus() == 2; } - reinterpret_cast(GRaceStatus::Get()).mPlayerPursuitInCooldown = cooldown; + GRaceStatus::Get().PlayerPursuitInCoolDown(inCooldown); - if (perpetrator) { - TrackValue("cost_to_state", static_cast(perpetrator->GetCostToState())); - TrackValue("bounty_in_pursuit", - static_cast(perpetrator->GetPendingRepPointsNormal() + - perpetrator->GetPendingRepPointsFromCopDestruction())); + if (perp) { + mObj->TrackValue("cost_to_state", static_cast(perp->GetCostToState())); + mObj->TrackValue("bounty_in_pursuit", + static_cast(perp->GetPendingRepPointsNormal() + + perp->GetPendingRepPointsFromCopDestruction())); } + raceParms = GRaceStatus::Get().GetRaceParameters(); challengeRace = false; - if (GRaceStatus::Get().GetRaceParameters() && GRaceStatus::Get().GetRaceParameters()->GetIsChallengeSeriesRace()) { + if (raceParms && raceParms->GetIsChallengeSeriesRace()) { challengeRace = true; } mHidingSpotIconsShown = false; - if ((roaming || challengeRace) && pursuit && cooldown) { + if ((roaming || challengeRace) && inPursuit && inCooldown) { mHidingSpotIconsShown = true; } mPursuitBreakerIconsShown = false; if (!roaming && !challengeRace) { - epicPursuitRace = false; - if (GRaceStatus::Exists() && GRaceStatus::Get().GetRaceParameters() && - GRaceStatus::Get().GetRaceParameters()->GetIsEpicPursuitRace()) { - epicPursuitRace = true; - } - - if (epicPursuitRace && pursuit && !cooldown) { + if (GRaceStatus::IsFinalEpicPursuit() && inPursuit && !inCooldown) { mPursuitBreakerIconsShown = true; } - } else if (pursuit && !cooldown) { + } else if (inPursuit && !inCooldown) { mPursuitBreakerIconsShown = true; } diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h index c4d2f6329..c933e3327 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.h +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.h @@ -709,6 +709,10 @@ class GRaceStatus : public UTL::COM::Object, public IVehicleCache { return GRaceStatus::Exists() && GRaceStatus::Get().GetRaceParameters() && GRaceStatus::Get().GetRaceParameters()->GetIsEpicPursuitRace(); } + void PlayerPursuitInCoolDown(bool c) { + mPlayerPursuitInCooldown = c; + } + float GetBinBaseHeat() const { return mRaceBin->GetBaseOpenWorldHeat(); } From 225c19b773a69b557f0cb56b9c2d905b18298da9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 00:40:42 +0100 Subject: [PATCH 663/691] 89.5%: match+ GManager::GManager Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 53cfddd89..7a9cc396e 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -143,8 +143,8 @@ GManager::GManager(const char *vaultPackName) mTempLoadData(nullptr), // mTransientPoolNumber(0), // mTransientPoolMemory(nullptr), // - mGameplayClass(Attrib::Database::Get().GetClass(0x5CEA9D46)), // - mMilestoneClass(Attrib::Database::Get().GetClass(0xE4C3D904)), // + mGameplayClass(nullptr), // + mMilestoneClass(nullptr), // mAttributeKeyShiftTo24(0), // mCollectionKeyShiftTo32(0), // mMaxObjects(0), // @@ -174,7 +174,6 @@ GManager::GManager(const char *vaultPackName) mPersistentStateBlocks(), // mSessionStateBlocks(), // mPendingSMS(), // - mLastCouldSendTime(0.0f), // mWarping(false), // mWarpStartPursuit(false), // mWarpTargetMarker(0), // @@ -191,12 +190,13 @@ GManager::GManager(const char *vaultPackName) mAllowEngageSafehouse(false), // mAllowMenuGates(false), // mRestartEventHash(0) { - mObj = this; + mGameplayClass = Attrib::Database::Get().GetClass(Attrib::Gen::gameplay::ClassKey()); + mMilestoneClass = Attrib::Database::Get().GetClass(Attrib::Gen::milestonetypes::ClassKey()); bMemSet(mBinVaultInSlot, 0, sizeof(mBinVaultInSlot)); bMemSet(mRaceVaultInSlot, 0, sizeof(mRaceVaultInSlot)); - bMemSet(mBountySpawnPoint, 0, sizeof(mBountySpawnPoint)); bMemSet(mHidingSpotFound, 0, sizeof(mHidingSpotFound)); + bMemSet(mBountySpawnPoint, 0, sizeof(mBountySpawnPoint)); mActiveCharacters.reserve(0x10); AllocateObjectStateStorage(); From 785d70655438e410076fcdfebe7fbc4a010d6929 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 00:50:23 +0100 Subject: [PATCH 664/691] 89.5%: match+ GActivity::Run Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GActivity.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GActivity.cpp b/src/Speed/Indep/Src/Gameplay/GActivity.cpp index 7e74845e7..d6cbfa023 100644 --- a/src/Speed/Indep/Src/Gameplay/GActivity.cpp +++ b/src/Speed/Indep/Src/Gameplay/GActivity.cpp @@ -266,15 +266,20 @@ bool GActivity::CollectionIsHandlerForState(GState *state, GHandler *handler) { } void GActivity::Run() { - if (mRunning) { - return; - } + if (!mRunning) { + if (mStateHandlers.empty()) { + GatherStatesAndHandlers(); + } - mRunning = true; - if (mCurrentState) { - RegisterMessageHandlers(mCurrentState); + mRunning = true; + ActivateReferencedTriggers(true, this); + if (!mCurrentState) { + GState *initialState = GetStateByName("initial"); + new EChangeState(GetCollection(), initialState->GetCollection()); + } else { + RegisterMessageHandlers(mCurrentState); + } } - ActivateReferencedTriggers(true, this); } void GActivity::Suspend() { From 01e017d817569797424a4c872a283e62bc7259d8 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 00:57:31 +0100 Subject: [PATCH 665/691] 89.6%: match+ GManager::ClearStockCars Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 7a9cc396e..fd43cc3b1 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1925,6 +1925,12 @@ void GManager::PreloadStockCarsForActivity(GActivity *activity) { } void GManager::ClearStockCars() { + for (StockCarMap::iterator iter = mStockCars.begin(); iter != mStockCars.end(); ++iter) { + ISimable *simable = iter->second; + + simable->Kill(); + } + mStockCars.clear(); } From 765294bc9bcae25226f8aef5b21c95e44c8f518c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 01:15:26 +0100 Subject: [PATCH 666/691] 89.6%: improve GHandler::Attach Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GHandler.cpp | 77 ++++++++++++++--------- 1 file changed, 49 insertions(+), 28 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GHandler.cpp b/src/Speed/Indep/Src/Gameplay/GHandler.cpp index f0354d2a5..bc1ce0a09 100644 --- a/src/Speed/Indep/Src/Gameplay/GHandler.cpp +++ b/src/Speed/Indep/Src/Gameplay/GHandler.cpp @@ -36,39 +36,60 @@ void GHandler::NotifyBytecodeFlushed() { } void GHandler::Attach(lua_State *luaState) { + struct BlobView { + unsigned int mSize; + const void *mData; + }; + if (!mAttached) { - const unsigned int *bytecode = reinterpret_cast(GetAttributePointer(0x9a4a020a, 0)); - - if (bytecode) { - unsigned int size = bytecode[0]; - LZHeader *header = reinterpret_cast(bytecode[1]); - - if (size != 0) { - int result; - - LZByteSwapHeader(header); - if (!LZValidHeader(header)) { - result = lua_dobuffer(luaState, reinterpret_cast(header), size, "Handler"); - } else { - unsigned char stackBuffer[0x1000]; - unsigned char *buffer = stackBuffer; - unsigned char *allocated = nullptr; - - if (header->UncompressedSize > sizeof(stackBuffer)) { - allocated = new unsigned char[header->UncompressedSize]; - buffer = allocated; - } - - LZDecompress(reinterpret_cast(header), buffer); - result = lua_dobuffer(luaState, reinterpret_cast(buffer), header->UncompressedSize, "Handler"); - delete[] allocated; + Attrib::Blob blob; + bool hasBytecode; + + reinterpret_cast(blob).mSize = 0; + reinterpret_cast(blob).mData = nullptr; + hasBytecode = false; + + if (const Attrib::Blob *blobPtr = reinterpret_cast(GetAttributePointer(0x9a4a020a, 0))) { + blob = *blobPtr; + hasBytecode = true; + } + + if (hasBytecode && reinterpret_cast(blob).mSize != 0) { + int dobuffer_status; + unsigned char *compressedBlock = + reinterpret_cast(const_cast(reinterpret_cast(blob).mData)); + LZHeader *lzHeader = reinterpret_cast(compressedBlock); + + LZByteSwapHeader(lzHeader); + if (!LZValidHeader(lzHeader)) { + dobuffer_status = + lua_dobuffer(luaState, reinterpret_cast(compressedBlock), reinterpret_cast(blob).mSize, "Handler"); + } else { + const unsigned int kStackBufferSize = 0x1000; + unsigned char stackBuffer[kStackBufferSize]; + unsigned char *decompressionBuffer = stackBuffer; + unsigned char *heapBuffer = nullptr; + + if (lzHeader->UncompressedSize > kStackBufferSize) { + heapBuffer = new unsigned char[lzHeader->UncompressedSize]; + decompressionBuffer = heapBuffer; } - LZByteSwapHeader(header); - if (result == 0) { - mAttached = true; + LZDecompress(reinterpret_cast(lzHeader), decompressionBuffer); + dobuffer_status = lua_dobuffer( + luaState, + reinterpret_cast(decompressionBuffer), + lzHeader->UncompressedSize, + "Handler"); + if (heapBuffer) { + delete[] heapBuffer; } } + LZByteSwapHeader(lzHeader); + + if (dobuffer_status == 0) { + mAttached = true; + } } } } From d89f702dcb4c3cc1a80a7433ea4de8ad870aa71d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 01:21:34 +0100 Subject: [PATCH 667/691] 89.7%: match GManager::IncValue Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index fd43cc3b1..20fdf09c0 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1124,13 +1124,12 @@ void GManager::TrackValue(const char *valueName, float value) { } void GManager::IncValue(const char *valueName) { - float value; - - value = GetValue(valueName); - if (value == -1.0f) { + unsigned int key = Attrib::StringToKey(valueName); + MilestoneInfoMap::iterator iterMile = mMilestoneTypeInfo.find(key); + if (iterMile->second.mLastKnownValue == -1.0f) { TrackValue(valueName, 1.0f); } else { - TrackValue(valueName, value + 1.0f); + TrackValue(valueName, iterMile->second.mLastKnownValue + 1.0f); } } From 8ced866ee23dc44b0b40a1e8296070da48936550 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 01:25:09 +0100 Subject: [PATCH 668/691] 89.8%: match+ GManager::StockCarsLoaded Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 20fdf09c0..723dbcd1a 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1963,11 +1963,16 @@ void GManager::ReserveStockCar(const char *carName) { } bool GManager::StockCarsLoaded() { - StockCarMap::iterator it; + { + StockCarMap::iterator iter = mStockCars.begin(); + + for (; iter != mStockCars.end(); ++iter) { + ISimable *simable = iter->second; + IVehicle *vehicle; - for (it = mStockCars.begin(); it != mStockCars.end(); ++it) { - if (!it->second) { - return false; + if (simable->QueryInterface(&vehicle) && vehicle->IsLoading()) { + return false; + } } } From 362eed06ed5d88b6f1a05d4b9e8a582743833a4f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 01:26:41 +0100 Subject: [PATCH 669/691] 89.8%: match+ GManager::GetNextSpeedTrap Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 723dbcd1a..6ee70171f 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -682,16 +682,15 @@ void GManager::LoadMilestones(GMilestone *src, unsigned int count) { } GSpeedTrap *GManager::GetNextSpeedTrap(GSpeedTrap *current, bool activeOnly, unsigned int binNumber) { - GSpeedTrap *next = current + 1; - GSpeedTrap *end = mSpeedTraps + mNumSpeedTraps; + current++; - while (next < end) { - if ((!activeOnly || next->IsFlagSet(GSpeedTrap::kFlag_Active)) && - (binNumber == 0 || next->GetBinNumber() == binNumber)) { - return next; + while (current < mSpeedTraps + mNumSpeedTraps) { + if ((!activeOnly || current->GetIsActive()) && + (binNumber == 0 || current->GetBinNumber() == binNumber)) { + return current; } - next++; + current++; } return nullptr; From f1c02a3186ec59d8abfbf88829511b32277c9e7d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 02:17:39 +0100 Subject: [PATCH 670/691] 89.8%: improve GManager::UpdatePursuit Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 6ee70171f..1723f7bc4 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2568,10 +2568,7 @@ void GManager::UpdatePursuit() { challengeRace = true; } - mHidingSpotIconsShown = false; - if ((roaming || challengeRace) && inPursuit && inCooldown) { - mHidingSpotIconsShown = true; - } + mHidingSpotIconsShown = (roaming || challengeRace) && inPursuit && inCooldown; mPursuitBreakerIconsShown = false; if (!roaming && !challengeRace) { From 63a5a2e91226612acda28f2d74e54ee6392b6a9b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 02:21:08 +0100 Subject: [PATCH 671/691] 89.8%: improve GManager::UpdatePursuit Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 1723f7bc4..e08b336b6 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2570,14 +2570,16 @@ void GManager::UpdatePursuit() { mHidingSpotIconsShown = (roaming || challengeRace) && inPursuit && inCooldown; - mPursuitBreakerIconsShown = false; + bool pursuitBreakerIconsShown = false; + if (!roaming && !challengeRace) { if (GRaceStatus::IsFinalEpicPursuit() && inPursuit && !inCooldown) { - mPursuitBreakerIconsShown = true; + pursuitBreakerIconsShown = true; } } else if (inPursuit && !inCooldown) { - mPursuitBreakerIconsShown = true; + pursuitBreakerIconsShown = true; } + mPursuitBreakerIconsShown = pursuitBreakerIconsShown; if (TWEAK_ShowGameplayMilestoneValues != 0) { static volatile int xLeft = -130; From d34a87163f83b281be397c1388f8faece42467e0 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 11:43:26 +0100 Subject: [PATCH 672/691] 89.9%: improve GRaceCustom::CreateRaceActivity Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 12 +++++++++--- .../Indep/Src/Generated/AttribSys/Classes/gameplay.h | 1 + 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 1b8980cb5..f34961e48 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -2561,6 +2561,7 @@ void GRaceCustom::CreateRaceActivity() { if (!bossINQuickRace) { currOpponents = mRaceRecord->Num_Opponents(); unsigned int onOpp = 0; + for (; onOpp < currOpponents; onOpp++) { opponentKey[onOpp] = mRaceRecord->Opponents(onOpp).GetCollectionKey(); } @@ -2578,14 +2579,19 @@ void GRaceCustom::CreateRaceActivity() { } } + unsigned int onSet = 0; mRaceRecord->Add(0x5839FA1A, mNumOpponents); - unsigned int onSet; { Attrib::Attribute attribute(mRaceRecord->Get(0x5839FA1A)); - for (onSet = 0; onSet < mNumOpponents; onSet++) { - attribute.Set(onSet, GCollectionKey(opponentKey[onSet])); + if (onSet < mNumOpponents) { + do { + GCollectionKey opponent(opponentKey[onSet]); + + attribute.Set(onSet, opponent); + onSet++; + } while (onSet < mNumOpponents); } } } diff --git a/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h b/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h index bfbfd04b3..374d085b6 100644 --- a/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h +++ b/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h @@ -1417,6 +1417,7 @@ struct gameplay : Instance { { TAttrib localattr(this->Get(attributeKey)); + localattr.GetCollection(); for (unsigned int i = 0; i < len; i++) { localattr.Set(i, attr.Get(i)); From dd600ba9629e4bcbef8698a25394693f33a177da Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 12:14:01 +0100 Subject: [PATCH 673/691] 89.9%: improve GRaceStatus::UpdateAdaptiveDifficulty Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index f34961e48..8bee745b6 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3776,7 +3776,13 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable float race_lose_margin; float lose_margin; - num_laps = static_cast(bMax(1, GetRaceParameters()->GetNumLaps())); + int laps = GetRaceParameters()->GetNumLaps(); + + if (laps <= 1) { + laps = 1; + } + + num_laps = static_cast(laps); lose_margin = (GetRaceLength() * (100.0f - eliminated_player->GetPctRaceComplete())) * 0.01f; race_lose_margin = GetRaceLength() / num_laps; @@ -3792,16 +3798,14 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable } if (update) { - float clamped_difficulty; - mCaluclatedAdaptiveGain = true; - clamped_difficulty = bClamp(difficulty, -1.0f, 1.0f); + difficulty = bClamp(difficulty, -1.0f, 1.0f); if (FEDatabase) { - FEDatabase->GetCareerSettings()->SetAdaptiveDifficulty(clamped_difficulty); + FEDatabase->GetCareerSettings()->SetAdaptiveDifficulty(difficulty); } - fCatchUpAdaptiveBonus = clamped_difficulty; + fCatchUpAdaptiveBonus = difficulty; } } From bfad831d162a2eb1a24c6331659d098c80f1e9c2 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 12:16:04 +0100 Subject: [PATCH 674/691] 89.9%: dwarf improve GRaceStatus::UpdateAdaptiveDifficulty Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 8bee745b6..788eb4fb1 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3760,13 +3760,14 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable GRacerInfo *info = &GetRacerInfo(i); if (info->GetGameCharacter() && !info->IsFinishedRacing()) { - float lose_margin = (GetRaceLength() * (100.0f - info->GetPctRaceComplete())) * 0.01f; + float percent_human_complete = info->GetPctRaceComplete(); + float lose_margin = (GetRaceLength() * (100.0f - percent_human_complete)) * 0.01f; if (lose_margin > 0.0f) { float t = UMath::Ramp(lose_margin / 300.0f, 0.0f, 1.0f); float bonus = UMath::Lerp(-0.1f, -0.4f, t); - difficulty = bClamp(difficulty + ((bonus * info->GetPctRaceComplete()) * 0.01f), -1.0f, 1.0f); + difficulty = bClamp(difficulty + ((bonus * percent_human_complete) * 0.01f), -1.0f, 1.0f); update = true; } } From 8e2176f8bbbf6a65c386e36154d887989a0db295 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 12:17:49 +0100 Subject: [PATCH 675/691] 89.9%: dwarf improve GRaceStatus::UpdateAdaptiveDifficulty Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 788eb4fb1..7fdddbece 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3735,6 +3735,7 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable } } else if (winning_ai) { float max_pct_complete = 0.0f; + float win_margin; for (int i = 0; i < num_racers; ++i) { GRacerInfo *info = &GetRacerInfo(i); @@ -3744,16 +3745,14 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable } } - { - float win_margin = (GetRaceLength() * (100.0f - max_pct_complete)) * 0.01f; + win_margin = (GetRaceLength() * (100.0f - max_pct_complete)) * 0.01f; - if (win_margin > 200.0f && max_pct_complete > 0.0f) { - float t = UMath::Ramp(win_margin, 200.0f, 750.0f); - float bonus = UMath::Lerp(0.0f, 0.4f, t); + if (win_margin > 200.0f && max_pct_complete > 0.0f) { + float t = UMath::Ramp(win_margin, 200.0f, 750.0f); + float bonus = UMath::Lerp(0.0f, 0.4f, t); - difficulty = bClamp(difficulty + bonus, -1.0f, 1.0f); - update = true; - } + difficulty = bClamp(difficulty + bonus, -1.0f, 1.0f); + update = true; } } else if (winning_player) { for (int i = 0; i < num_racers; ++i) { From f5193a3941fafc0516b5425586e799114e83398b Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 12:23:10 +0100 Subject: [PATCH 676/691] 89.9%: improve GRaceStatus::UpdateAdaptiveDifficulty Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 7fdddbece..b504aa45a 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3758,7 +3758,7 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable for (int i = 0; i < num_racers; ++i) { GRacerInfo *info = &GetRacerInfo(i); - if (info->GetGameCharacter() && !info->IsFinishedRacing()) { + if (!info->GetGameCharacter() && !info->IsFinishedRacing()) { float percent_human_complete = info->GetPctRaceComplete(); float lose_margin = (GetRaceLength() * (100.0f - percent_human_complete)) * 0.01f; From 7373093dcc8780c8bcfe0f8822cd22a91481b2ae Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 12:24:39 +0100 Subject: [PATCH 677/691] 89.9%: improve GRaceStatus::UpdateAdaptiveDifficulty Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index b504aa45a..a16ccecfd 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3784,7 +3784,7 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable num_laps = static_cast(laps); - lose_margin = (GetRaceLength() * (100.0f - eliminated_player->GetPctRaceComplete())) * 0.01f; + lose_margin = GetRaceLength() * ((100.0f - eliminated_player->GetPctRaceComplete()) * 0.01f); race_lose_margin = GetRaceLength() / num_laps; lose_margin = UMath::Mod(lose_margin, race_lose_margin); From f15609e2fe3d707be5b47309790f4b77861a6afd Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 12:35:26 +0100 Subject: [PATCH 678/691] 90.0%: improve GRaceCustom::CreateRaceActivity Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 11 +++++++++++ .../Indep/Src/Generated/AttribSys/Classes/gameplay.h | 4 ++++ 2 files changed, 15 insertions(+) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index a16ccecfd..3ee49aa71 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -91,6 +91,17 @@ template <> struct GObjectIteratorTraits { enum { kType = kGameplayObjType_Trigger }; }; +template <> +const GCollectionKey &Attrib::TAttrib::Get(unsigned int index) const { + const GCollectionKey *resultptr = reinterpret_cast(GetElementPointer(index)); + + if (!resultptr) { + resultptr = reinterpret_cast(Attrib::DefaultDataArea(sizeof(GCollectionKey))); + } + + return *resultptr; +} + GRaceStatus *GRaceStatus::fObj = nullptr; DECLARE_CONTAINER_TYPE(ID_ROAD_SET); diff --git a/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h b/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h index 374d085b6..047245d86 100644 --- a/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h +++ b/src/Speed/Indep/Src/Generated/AttribSys/Classes/gameplay.h @@ -27,6 +27,10 @@ enum GameplayObjType { }; namespace Attrib { + +template <> +const GCollectionKey &TAttrib::Get(unsigned int index) const; + namespace Gen { struct gameplay : Instance { From e1d4da6ea8eba2bf832ec72fb1c26adec51bdc11 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 13:20:03 +0100 Subject: [PATCH 679/691] 90.0%: improve GRaceStatus::UpdateAdaptiveDifficulty Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 3ee49aa71..fd7bfb25c 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3756,7 +3756,7 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable } } - win_margin = (GetRaceLength() * (100.0f - max_pct_complete)) * 0.01f; + win_margin = GetRaceLength() * ((100.0f - max_pct_complete) * 0.01f); if (win_margin > 200.0f && max_pct_complete > 0.0f) { float t = UMath::Ramp(win_margin, 200.0f, 750.0f); From 22aabb206b3f92b0ebc750a7645308e121c3ca8a Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 13:20:10 +0100 Subject: [PATCH 680/691] 90.0%: improve GHandler::MessagePassesFilters Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GHandler.cpp | 32 +++++++++++++---------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GHandler.cpp b/src/Speed/Indep/Src/Gameplay/GHandler.cpp index bc1ce0a09..d79225ed3 100644 --- a/src/Speed/Indep/Src/Gameplay/GHandler.cpp +++ b/src/Speed/Indep/Src/Gameplay/GHandler.cpp @@ -124,17 +124,14 @@ bool GHandler::MessagePassesFilters(LuaMessageDeliveryInfo *deliveryInfo) { reinterpret_cast(blob).mSize = 0; reinterpret_cast(blob).mData = nullptr; - const Attrib::Blob *blobPtr = reinterpret_cast(GetAttributePointer(0x56e1436d, onFilter)); - if (blobPtr) { + if (const Attrib::Blob *blobPtr = + reinterpret_cast(GetAttributePointer(0x56e1436d, onFilter))) { blob = *blobPtr; } - unsigned char *blockData = - reinterpret_cast(const_cast(reinterpret_cast(blob).mData)); - - if (blockData) { + if (unsigned char *blockData = + reinterpret_cast(const_cast(reinterpret_cast(blob).mData))) { MessageFilterHeader *filter = reinterpret_cast(blockData); - bool filterPassed = true; if (!filter->mInitialized) { ByteSwapStaticData(filter->mQueryStaticData); @@ -142,22 +139,29 @@ bool GHandler::MessagePassesFilters(LuaMessageDeliveryInfo *deliveryInfo) { filter->mInitialized = 1; } - IMessageFilterContext *filterContext = deliveryInfo; - const unsigned char *source = reinterpret_cast(filterContext->GetMessage()) + sizeof(Hermes::Message) + filter->mSourceOffset; - unsigned char *dest = blockData + filter->mDestOffset + 0xC; + { + const unsigned char *source = + reinterpret_cast(reinterpret_cast(deliveryInfo->GetMessage()) + 1) + + filter->mSourceOffset; + unsigned char *dest = blockData + filter->mDestOffset + 0xC; - bMemCpy(dest, source, filter->mSize); + bMemCpy(dest, source, filter->mSize); + } + + bool filterPassed = true; if (filter->mQuery) { - filter->mQuery(filterContext, 0, filter->mQueryStaticData, 1, &filterPassed); + filter->mQuery(deliveryInfo, 0, filter->mQueryStaticData, 1, &filterPassed); } if (FilterModePassAll(0)) { if (!filterPassed) { return false; } - } else if (filterPassed) { - return true; + } else { + if (filterPassed) { + return true; + } } } } From 32ce87c80527cb1201b8cf7d6c13f3704e5d0547 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 13:20:18 +0100 Subject: [PATCH 681/691] 90.0%: improve GManager::RecursivePreloadCharacterCars Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index e08b336b6..55ea9982a 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1861,15 +1861,15 @@ void GManager::RecursivePreloadCharacterCars(GRuntimeInstance *instance, bool fo } stockCarName = *stockCarNamePtr; + if (stockCarName && *stockCarName) { + carName = stockCarName; + } + preloadPtr = reinterpret_cast(instance->GetAttributePointer(0x9652AF0F, 0)); if (!preloadPtr) { preloadPtr = reinterpret_cast(Attrib::DefaultDataArea(sizeof(int))); } - if (stockCarName && *stockCarName) { - carName = stockCarName; - } - if (*preloadPtr != 0 || forcePreload) { ReserveStockCar(carName); } From 211f51b4278fe598211f20ff7353a0bb632beb8d Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 13:36:55 +0100 Subject: [PATCH 682/691] 90.1%: improve GManager::GetRandomEmergencyStockCar Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 55ea9982a..8a7151fb5 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -1996,10 +1996,11 @@ ISimable *GManager::GetRandomEmergencyStockCar() { typedef UTL::Std::vector CandidateCars; GRaceParameters *parms = GRaceStatus::Get().GetRaceParameters(); - CandidateCars validCars; - int numValid; if (!parms || parms->GetRaceType() == 2) { + CandidateCars validCars; + int numValid; + validCars.reserve(mStockCars.size()); for (StockCarMap::iterator it = mStockCars.begin(); it != mStockCars.end(); ++it) { IArticulatedVehicle *iarticulation; From 05bd59c7517813673e6ec974cccf533db544e94f Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 13:40:08 +0100 Subject: [PATCH 683/691] 90.1%: match GManager::GetRandomEmergencyStockCar Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GManager.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GManager.cpp b/src/Speed/Indep/Src/Gameplay/GManager.cpp index 8a7151fb5..2b94de517 100644 --- a/src/Speed/Indep/Src/Gameplay/GManager.cpp +++ b/src/Speed/Indep/Src/Gameplay/GManager.cpp @@ -2003,9 +2003,7 @@ ISimable *GManager::GetRandomEmergencyStockCar() { validCars.reserve(mStockCars.size()); for (StockCarMap::iterator it = mStockCars.begin(); it != mStockCars.end(); ++it) { - IArticulatedVehicle *iarticulation; - - if (!it->second || !it->second->QueryInterface(&iarticulation)) { + if (!UTL::COM::QueryInterface(it->second)) { validCars.push_back(it); } } From fa63af33e509901038b9d6726c9e052eebaf95b3 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 13:43:33 +0100 Subject: [PATCH 684/691] 90.1%: improve GRaceStatus::ComputeCatchUpSkill Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index fd7bfb25c..f9d4d5592 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3853,15 +3853,11 @@ bool GRaceStatus::ComputeCatchUpSkill(GRacerInfo *racer_info, PidError *pid, flo } } } else { - if (!mRaceParms) { - return false; - } - - if (!mRaceParms->GetCatchUp()) { + if (mRaceParms && mRaceParms->GetCatchUp()) { + glue_level = Tweak_QuickRaceGlue[mRaceParms->GetDifficulty()]; + } else { return false; } - - glue_level = Tweak_QuickRaceGlue[mRaceParms->GetDifficulty()]; } } From 36c29d4278ab8e5ba74cb03447b6377b43bca4c9 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 13:45:42 +0100 Subject: [PATCH 685/691] 90.2%: improve GRaceStatus::ComputeCatchUpSkill Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index f9d4d5592..a4901699c 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3870,6 +3870,8 @@ bool GRaceStatus::ComputeCatchUpSkill(GRacerInfo *racer_info, PidError *pid, flo glue_skill = UMath::Lerp(Tweak_GlueStrengthTable_Low.GetValue(percent_complete), Tweak_GlueStrengthTable_High.GetValue(percent_complete), glue_level); glue_integral = 5.0e-5f; glue_derivative = 0.01f; + glue_integral *= glue_p; + glue_derivative *= glue_error; } else { { Table glue_table(aCatchUpSkillData, nCatchUpSkillEntries, 0.0f, 100.0f); @@ -3883,10 +3885,12 @@ bool GRaceStatus::ComputeCatchUpSkill(GRacerInfo *racer_info, PidError *pid, flo } glue_derivative = fCatchUpDerivative; glue_integral = fCatchUpIntegral; + glue_integral *= glue_p; + glue_derivative *= glue_error; } glue_spread = bMax(100.0f, glue_spread); - glue_output = bClamp((2.0f / glue_spread) * pid->GetError() + glue_p * glue_integral + glue_error * glue_derivative, -1.0f, 1.0f); + glue_output = bClamp((2.0f / glue_spread) * pid->GetError() + glue_integral + glue_derivative, -1.0f, 1.0f); *skill = glue_skill * glue_output; if (is_boss) { From 586a2687e91d3594dc166661291f1bcfeee63d40 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 13:51:26 +0100 Subject: [PATCH 686/691] 90.2%: improve GRaceStatus::ComputeCatchUpSkill Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index a4901699c..b01a9461e 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3870,8 +3870,8 @@ bool GRaceStatus::ComputeCatchUpSkill(GRacerInfo *racer_info, PidError *pid, flo glue_skill = UMath::Lerp(Tweak_GlueStrengthTable_Low.GetValue(percent_complete), Tweak_GlueStrengthTable_High.GetValue(percent_complete), glue_level); glue_integral = 5.0e-5f; glue_derivative = 0.01f; - glue_integral *= glue_p; - glue_derivative *= glue_error; + glue_p *= glue_integral; + glue_error *= glue_derivative; } else { { Table glue_table(aCatchUpSkillData, nCatchUpSkillEntries, 0.0f, 100.0f); @@ -3885,12 +3885,12 @@ bool GRaceStatus::ComputeCatchUpSkill(GRacerInfo *racer_info, PidError *pid, flo } glue_derivative = fCatchUpDerivative; glue_integral = fCatchUpIntegral; - glue_integral *= glue_p; - glue_derivative *= glue_error; + glue_p *= glue_integral; + glue_error *= glue_derivative; } glue_spread = bMax(100.0f, glue_spread); - glue_output = bClamp((2.0f / glue_spread) * pid->GetError() + glue_integral + glue_derivative, -1.0f, 1.0f); + glue_output = bClamp((2.0f / glue_spread) * pid->GetError() + glue_p + glue_error, -1.0f, 1.0f); *skill = glue_skill * glue_output; if (is_boss) { From 7e234b2bea52e8b38cd870e145310474c35b0038 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 14:00:37 +0100 Subject: [PATCH 687/691] 90.2%: improve GRaceStatus::UpdateAdaptiveDifficulty Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index b01a9461e..c50f0f574 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3771,10 +3771,10 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable if (!info->GetGameCharacter() && !info->IsFinishedRacing()) { float percent_human_complete = info->GetPctRaceComplete(); - float lose_margin = (GetRaceLength() * (100.0f - percent_human_complete)) * 0.01f; + float lose_margin = GetRaceLength() * ((100.0f - percent_human_complete) * 0.01f); if (lose_margin > 0.0f) { - float t = UMath::Ramp(lose_margin / 300.0f, 0.0f, 1.0f); + float t = UMath::Ramp(lose_margin, 0.0f, 300.0f); float bonus = UMath::Lerp(-0.1f, -0.4f, t); difficulty = bClamp(difficulty + ((bonus * percent_human_complete) * 0.01f), -1.0f, 1.0f); From 13237af548d4189bcd59c4c007c17af57a7dc37c Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 14:02:01 +0100 Subject: [PATCH 688/691] 90.2%: improve GRaceStatus::UpdateAdaptiveDifficulty Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index c50f0f574..52b92d1db 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3758,7 +3758,7 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable win_margin = GetRaceLength() * ((100.0f - max_pct_complete) * 0.01f); - if (win_margin > 200.0f && max_pct_complete > 0.0f) { + if (win_margin > 0.0f && max_pct_complete > 0.0f) { float t = UMath::Ramp(win_margin, 200.0f, 750.0f); float bonus = UMath::Lerp(0.0f, 0.4f, t); From 29ab414b58a6eb832513b8ff00d83f9e76649cfe Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 14:03:05 +0100 Subject: [PATCH 689/691] 90.2%: improve GRaceStatus::UpdateAdaptiveDifficulty Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 52b92d1db..161cb3c7b 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3756,7 +3756,7 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable } } - win_margin = GetRaceLength() * ((100.0f - max_pct_complete) * 0.01f); + win_margin = ((100.0f - max_pct_complete) * 0.01f) * GetRaceLength(); if (win_margin > 0.0f && max_pct_complete > 0.0f) { float t = UMath::Ramp(win_margin, 200.0f, 750.0f); From 5d1be133313fc1cdc2ed2eb278f2e5228e4d2126 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 14:06:11 +0100 Subject: [PATCH 690/691] 90.2%: improve GRaceStatus::UpdateAdaptiveDifficulty Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 161cb3c7b..84416f406 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3812,9 +3812,7 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable mCaluclatedAdaptiveGain = true; difficulty = bClamp(difficulty, -1.0f, 1.0f); - if (FEDatabase) { - FEDatabase->GetCareerSettings()->SetAdaptiveDifficulty(difficulty); - } + FEDatabase->GetCareerSettings()->SetAdaptiveDifficulty(difficulty); fCatchUpAdaptiveBonus = difficulty; } From 8c640c4df4c86eecd0141023d6683d4ec368c344 Mon Sep 17 00:00:00 2001 From: Johann Berger Date: Sun, 22 Mar 2026 14:09:12 +0100 Subject: [PATCH 691/691] 90.2%: improve GRaceStatus::UpdateAdaptiveDifficulty Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp index 84416f406..52afa2d8a 100644 --- a/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp +++ b/src/Speed/Indep/Src/Gameplay/GRaceStatus.cpp @@ -3756,7 +3756,9 @@ void GRaceStatus::UpdateAdaptiveDifficulty(eAdaptiveGainReason reason, ISimable } } - win_margin = ((100.0f - max_pct_complete) * 0.01f) * GetRaceLength(); + win_margin = 100.0f - max_pct_complete; + win_margin *= 0.01f; + win_margin *= GetRaceLength(); if (win_margin > 0.0f && max_pct_complete > 0.0f) { float t = UMath::Ramp(win_margin, 200.0f, 750.0f);